From 0019f21b88e17d10c42ca2847e5b96ff010efe8f Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Sun, 2 Aug 2015 15:50:35 +0900 Subject: [PATCH] Revert "Add OpenCV source code" This reverts commit 85209f831373c6c3aa44f1d492217d3e84cc8b3e. Change-Id: I013f60dee4047875c36dbb5dc086414ec2e2572b --- 3rdparty/ffmpeg/LICENSE.LGPL-2.1+ | 520 - 3rdparty/ffmpeg/ffmpeg_version.cmake | 11 - 3rdparty/ffmpeg/ffopencv.c | 1 - 3rdparty/ffmpeg/make.bat | 2 - 3rdparty/ffmpeg/opencv_ffmpeg.dll | Bin 10535057 -> 0 bytes 3rdparty/ffmpeg/opencv_ffmpeg_64.dll | Bin 9720042 -> 0 bytes 3rdparty/ffmpeg/readme.txt | 42 - 3rdparty/include/dshow/_mingw_dxhelper.h | 110 - 3rdparty/include/dshow/_mingw_unicode.h | 33 - 3rdparty/include/dshow/amvideo.h | 1290 - 3rdparty/include/dshow/audevcod.h | 31 - 3rdparty/include/dshow/bdatypes.h | 32 - 3rdparty/include/dshow/control.h | 1467 - 3rdparty/include/dshow/ddraw.h | 2712 - 3rdparty/include/dshow/dshow.h | 61 - 3rdparty/include/dshow/dsound.h | 1199 - 3rdparty/include/dshow/dvdmedia.h | 75 - 3rdparty/include/dshow/errors.h | 169 - 3rdparty/include/dshow/evcode.h | 68 - 3rdparty/include/dshow/ksuuids.h | 191 - 3rdparty/include/dshow/strmif.h | 9392 -- 3rdparty/include/dshow/uuids.h | 368 - 3rdparty/include/ffmpeg_/libavcodec/avcodec.h | 4863 - 3rdparty/include/ffmpeg_/libavcodec/avfft.h | 116 - 3rdparty/include/ffmpeg_/libavcodec/dxva2.h | 95 - .../include/ffmpeg_/libavcodec/old_codec_ids.h | 397 - 3rdparty/include/ffmpeg_/libavcodec/vaapi.h | 173 - 3rdparty/include/ffmpeg_/libavcodec/vda.h | 162 - 3rdparty/include/ffmpeg_/libavcodec/vdpau.h | 159 - 3rdparty/include/ffmpeg_/libavcodec/version.h | 95 - 3rdparty/include/ffmpeg_/libavcodec/xvmc.h | 168 - 3rdparty/include/ffmpeg_/libavdevice/avdevice.h | 69 - 3rdparty/include/ffmpeg_/libavdevice/version.h | 50 - 3rdparty/include/ffmpeg_/libavformat/avformat.h | 2181 - 3rdparty/include/ffmpeg_/libavformat/avio.h | 481 - 3rdparty/include/ffmpeg_/libavformat/version.h | 82 - 3rdparty/include/ffmpeg_/libavutil/adler32.h | 52 - 3rdparty/include/ffmpeg_/libavutil/aes.h | 65 - 3rdparty/include/ffmpeg_/libavutil/attributes.h | 154 - 3rdparty/include/ffmpeg_/libavutil/audio_fifo.h | 149 - 3rdparty/include/ffmpeg_/libavutil/audioconvert.h | 6 - 3rdparty/include/ffmpeg_/libavutil/avassert.h | 66 - 3rdparty/include/ffmpeg_/libavutil/avconfig.h | 8 - 3rdparty/include/ffmpeg_/libavutil/avstring.h | 302 - 3rdparty/include/ffmpeg_/libavutil/avutil.h | 314 - 3rdparty/include/ffmpeg_/libavutil/base64.h | 67 - 3rdparty/include/ffmpeg_/libavutil/blowfish.h | 77 - 3rdparty/include/ffmpeg_/libavutil/bprint.h | 200 - 3rdparty/include/ffmpeg_/libavutil/bswap.h | 109 - 3rdparty/include/ffmpeg_/libavutil/buffer.h | 274 - .../include/ffmpeg_/libavutil/channel_layout.h | 216 - 3rdparty/include/ffmpeg_/libavutil/common.h | 459 - 3rdparty/include/ffmpeg_/libavutil/cpu.h | 113 - 3rdparty/include/ffmpeg_/libavutil/crc.h | 84 - 3rdparty/include/ffmpeg_/libavutil/dict.h | 152 - 3rdparty/include/ffmpeg_/libavutil/error.h | 117 - 3rdparty/include/ffmpeg_/libavutil/eval.h | 113 - 3rdparty/include/ffmpeg_/libavutil/fifo.h | 144 - 3rdparty/include/ffmpeg_/libavutil/file.h | 66 - 3rdparty/include/ffmpeg_/libavutil/frame.h | 607 - 3rdparty/include/ffmpeg_/libavutil/hmac.h | 99 - 3rdparty/include/ffmpeg_/libavutil/imgutils.h | 200 - 3rdparty/include/ffmpeg_/libavutil/intfloat.h | 77 - .../include/ffmpeg_/libavutil/intfloat_readwrite.h | 40 - 3rdparty/include/ffmpeg_/libavutil/intreadwrite.h | 621 - 3rdparty/include/ffmpeg_/libavutil/lfg.h | 62 - 3rdparty/include/ffmpeg_/libavutil/log.h | 222 - 3rdparty/include/ffmpeg_/libavutil/lzo.h | 66 - 3rdparty/include/ffmpeg_/libavutil/mathematics.h | 147 - 3rdparty/include/ffmpeg_/libavutil/md5.h | 81 - 3rdparty/include/ffmpeg_/libavutil/mem.h | 307 - 3rdparty/include/ffmpeg_/libavutil/murmur3.h | 32 - 3rdparty/include/ffmpeg_/libavutil/old_pix_fmts.h | 171 - 3rdparty/include/ffmpeg_/libavutil/opt.h | 754 - 3rdparty/include/ffmpeg_/libavutil/parseutils.h | 174 - 3rdparty/include/ffmpeg_/libavutil/pixdesc.h | 289 - 3rdparty/include/ffmpeg_/libavutil/pixfmt.h | 366 - 3rdparty/include/ffmpeg_/libavutil/random_seed.h | 43 - 3rdparty/include/ffmpeg_/libavutil/rational.h | 155 - 3rdparty/include/ffmpeg_/libavutil/ripemd.h | 75 - 3rdparty/include/ffmpeg_/libavutil/samplefmt.h | 256 - 3rdparty/include/ffmpeg_/libavutil/sha.h | 74 - 3rdparty/include/ffmpeg_/libavutil/sha512.h | 75 - 3rdparty/include/ffmpeg_/libavutil/time.h | 41 - 3rdparty/include/ffmpeg_/libavutil/timecode.h | 140 - 3rdparty/include/ffmpeg_/libavutil/timestamp.h | 74 - 3rdparty/include/ffmpeg_/libavutil/version.h | 144 - 3rdparty/include/ffmpeg_/libavutil/xtea.h | 62 - 3rdparty/include/ffmpeg_/libswscale/swscale.h | 362 - 3rdparty/include/ffmpeg_/libswscale/version.h | 59 - 3rdparty/include/msc_inttypes.h | 301 - 3rdparty/include/msc_stdint.h | 219 - 3rdparty/readme.txt | 76 - CMakeLists.txt | 1001 - LICENSE | 33 - README.md | 22 - cmake/CMakeParseArguments.cmake | 138 - cmake/FindCUDA.cmake | 1796 - cmake/FindCUDA/make2cmake.cmake | 93 - cmake/FindCUDA/parse_cubin.cmake | 110 - cmake/FindCUDA/run_nvcc.cmake | 288 - cmake/OpenCVCRTLinkage.cmake | 107 - cmake/OpenCVCompilerOptions.cmake | 309 - cmake/OpenCVConfig.cmake | 168 - cmake/OpenCVDetectAndroidSDK.cmake | 413 - cmake/OpenCVDetectApacheAnt.cmake | 31 - cmake/OpenCVDetectCStripes.cmake | 11 - cmake/OpenCVDetectCUDA.cmake | 260 - cmake/OpenCVDetectCXXCompiler.cmake | 154 - cmake/OpenCVDetectOpenCL.cmake | 76 - cmake/OpenCVDetectPython.cmake | 134 - cmake/OpenCVDetectTBB.cmake | 90 - cmake/OpenCVDetectVTK.cmake | 53 - cmake/OpenCVExtraTargets.cmake | 38 - cmake/OpenCVFindIPP.cmake | 376 - cmake/OpenCVFindIntelPerCSDK.cmake | 20 - cmake/OpenCVFindLATEX.cmake | 114 - cmake/OpenCVFindLibsGUI.cmake | 75 - cmake/OpenCVFindLibsGrfmt.cmake | 175 - cmake/OpenCVFindLibsPerf.cmake | 74 - cmake/OpenCVFindLibsVideo.cmake | 257 - cmake/OpenCVFindOpenEXR.cmake | 108 - cmake/OpenCVFindOpenNI.cmake | 89 - cmake/OpenCVFindPkgConfig.cmake | 365 - cmake/OpenCVFindXimea.cmake | 46 - cmake/OpenCVGenAndroidMK.cmake | 146 - cmake/OpenCVGenConfig.cmake | 145 - cmake/OpenCVGenHeaders.cmake | 26 - cmake/OpenCVGenInfoPlist.cmake | 4 - cmake/OpenCVGenPkgconfig.cmake | 90 - cmake/OpenCVLegacyOptions.cmake | 24 - cmake/OpenCVModule.cmake | 922 - cmake/OpenCVPCHSupport.cmake | 353 - cmake/OpenCVPackaging.cmake | 110 - cmake/OpenCVUtils.cmake | 621 - cmake/OpenCVVersion.cmake | 19 - cmake/checks/OpenCVDetectCudaArch.cu | 14 - cmake/checks/opencl.cpp | 24 - cmake/checks/vfwtest.cpp | 10 - cmake/checks/win32uitest.cpp | 11 - cmake/checks/winrttest.cpp | 6 - cmake/cl2cpp.cmake | 68 - cmake/templates/OpenCV.mk.in | 211 - cmake/templates/OpenCVConfig-version.cmake.in | 14 - cmake/templates/OpenCVConfig.cmake.in | 337 - cmake/templates/cmake_uninstall.cmake.in | 25 - cmake/templates/cvconfig.h.in | 166 - cmake/templates/opencv-XXX.pc.in | 13 - cmake/templates/opencv_modules.hpp.in | 9 - cmake/templates/opencv_run_all_tests_android.sh.in | 51 - cmake/templates/opencv_run_all_tests_unix.sh.in | 25 - cmake/templates/opencv_testing.sh.in | 2 - data/CMakeLists.txt | 22 - data/haarcascades/haarcascade_eye.xml | 15452 --- .../haarcascade_eye_tree_eyeglasses.xml | 33158 ------ data/haarcascades/haarcascade_frontalface_alt.xml | 26161 ----- data/haarcascades/haarcascade_frontalface_alt2.xml | 23550 ---- .../haarcascade_frontalface_alt_tree.xml | 103493 ------------------ .../haarcascade_frontalface_default.xml | 35712 ------ data/haarcascades/haarcascade_fullbody.xml | 18118 --- data/haarcascades/haarcascade_lefteye_2splits.xml | 9803 -- data/haarcascades/haarcascade_lowerbody.xml | 15085 --- data/haarcascades/haarcascade_mcs_eyepair_big.xml | 10930 -- .../haarcascades/haarcascade_mcs_eyepair_small.xml | 12586 --- data/haarcascades/haarcascade_mcs_leftear.xml | 9322 -- data/haarcascades/haarcascade_mcs_lefteye.xml | 23791 ---- data/haarcascades/haarcascade_mcs_mouth.xml | 21991 ---- data/haarcascades/haarcascade_mcs_nose.xml | 48433 -------- data/haarcascades/haarcascade_mcs_rightear.xml | 9671 -- data/haarcascades/haarcascade_mcs_righteye.xml | 42252 ------- data/haarcascades/haarcascade_mcs_upperbody.xml | 46327 -------- data/haarcascades/haarcascade_profileface.xml | 31930 ------ data/haarcascades/haarcascade_righteye_2splits.xml | 9833 -- data/haarcascades/haarcascade_smile.xml | 8353 -- data/haarcascades/haarcascade_upperbody.xml | 29767 ----- data/hogcascades/hogcascade_pedestrians.xml | 3986 - data/lbpcascades/lbpcascade_frontalface.xml | 1505 - data/lbpcascades/lbpcascade_profileface.xml | 1275 - data/lbpcascades/lbpcascade_silverware.xml | 1279 - data/readme.txt | 7 - include/CMakeLists.txt | 7 - include/opencv/cv.h | 82 - include/opencv/cv.hpp | 52 - include/opencv/cvaux.h | 65 - include/opencv/cvaux.hpp | 51 - include/opencv/cvwimage.h | 46 - include/opencv/cxcore.h | 53 - include/opencv/cxcore.hpp | 52 - include/opencv/cxeigen.hpp | 48 - include/opencv/cxmisc.h | 6 - include/opencv/highgui.h | 50 - include/opencv/ml.h | 48 - include/opencv2/opencv.hpp | 61 - index.rst | 21 - modules/CMakeLists.txt | 5 - modules/calib3d/CMakeLists.txt | 2 - .../calib3d/include/opencv2/calib3d/calib3d.hpp | 751 - modules/calib3d/src/_modelest.h | 80 - modules/calib3d/src/calibinit.cpp | 2042 - modules/calib3d/src/calibration.cpp | 3804 - modules/calib3d/src/checkchessboard.cpp | 205 - modules/calib3d/src/circlesgrid.cpp | 1601 - modules/calib3d/src/circlesgrid.hpp | 219 - modules/calib3d/src/epnp.cpp | 624 - modules/calib3d/src/epnp.h | 81 - modules/calib3d/src/fundam.cpp | 1187 - modules/calib3d/src/modelest.cpp | 493 - modules/calib3d/src/p3p.cpp | 415 - modules/calib3d/src/p3p.h | 61 - modules/calib3d/src/polynom_solver.cpp | 171 - modules/calib3d/src/polynom_solver.h | 12 - modules/calib3d/src/posit.cpp | 358 - modules/calib3d/src/precomp.hpp | 60 - modules/calib3d/src/quadsubpix.cpp | 366 - modules/calib3d/src/solvepnp.cpp | 348 - modules/calib3d/src/stereobm.cpp | 948 - modules/calib3d/src/stereosgbm.cpp | 1069 - modules/calib3d/src/triangulate.cpp | 447 - modules/contrib/CMakeLists.txt | 1 - .../contrib/include/opencv2/contrib/contrib.hpp | 985 - .../opencv2/contrib/detection_based_tracker.hpp | 106 - .../include/opencv2/contrib/hybridtracker.hpp | 220 - .../contrib/include/opencv2/contrib/openfabmap.hpp | 405 - modules/contrib/include/opencv2/contrib/retina.hpp | 355 - modules/contrib/src/adaptiveskindetector.cpp | 286 - modules/contrib/src/ba.cpp | 1125 - modules/contrib/src/basicretinafilter.cpp | 886 - modules/contrib/src/basicretinafilter.hpp | 655 - modules/contrib/src/bowmsctrainer.cpp | 138 - modules/contrib/src/chamfermatching.cpp | 1414 - modules/contrib/src/chowliutree.cpp | 289 - modules/contrib/src/colormap.cpp | 530 - modules/contrib/src/colortracker.cpp | 135 - modules/contrib/src/contrib_init.cpp | 43 - modules/contrib/src/detection_based_tracker.cpp | 838 - modules/contrib/src/facerec.cpp | 902 - modules/contrib/src/featuretracker.cpp | 229 - modules/contrib/src/fuzzymeanshifttracker.cpp | 720 - modules/contrib/src/gencolors.cpp | 140 - modules/contrib/src/hybridtracker.cpp | 236 - modules/contrib/src/imagelogpolprojection.cpp | 449 - modules/contrib/src/imagelogpolprojection.hpp | 240 - modules/contrib/src/inputoutput.cpp | 205 - modules/contrib/src/lda.cpp | 1113 - modules/contrib/src/logpolar_bsm.cpp | 651 - modules/contrib/src/magnoretinafilter.cpp | 209 - modules/contrib/src/magnoretinafilter.hpp | 243 - modules/contrib/src/octree.cpp | 344 - modules/contrib/src/openfabmap.cpp | 778 - modules/contrib/src/parvoretinafilter.cpp | 230 - modules/contrib/src/parvoretinafilter.hpp | 260 - modules/contrib/src/polyfit.cpp | 72 - modules/contrib/src/precomp.hpp | 65 - modules/contrib/src/retina.cpp | 463 - modules/contrib/src/retinacolor.cpp | 720 - modules/contrib/src/retinacolor.hpp | 340 - modules/contrib/src/retinafilter.cpp | 529 - modules/contrib/src/retinafilter.hpp | 545 - modules/contrib/src/rgbdodometry.cpp | 636 - modules/contrib/src/selfsimilarity.cpp | 259 - modules/contrib/src/spinimages.cpp | 1231 - modules/contrib/src/stereovar.cpp | 411 - modules/contrib/src/templatebuffer.hpp | 552 - modules/core/CMakeLists.txt | 61 - modules/core/include/opencv2/core/affine.hpp | 509 - modules/core/include/opencv2/core/core.hpp | 4858 - modules/core/include/opencv2/core/core_c.h | 1885 - modules/core/include/opencv2/core/cuda_devptrs.hpp | 199 - modules/core/include/opencv2/core/devmem2d.hpp | 43 - modules/core/include/opencv2/core/eigen.hpp | 280 - modules/core/include/opencv2/core/gpumat.hpp | 562 - modules/core/include/opencv2/core/internal.hpp | 781 - modules/core/include/opencv2/core/mat.hpp | 2619 - .../core/include/opencv2/core/opengl_interop.hpp | 284 - .../opencv2/core/opengl_interop_deprecated.hpp | 330 - modules/core/include/opencv2/core/operations.hpp | 4046 - modules/core/include/opencv2/core/types_c.h | 1896 - modules/core/include/opencv2/core/version.hpp | 72 - modules/core/include/opencv2/core/wimage.hpp | 621 - modules/core/src/algorithm.cpp | 1275 - modules/core/src/alloc.cpp | 713 - modules/core/src/arithm.cpp | 3037 - modules/core/src/array.cpp | 3206 - modules/core/src/cmdparser.cpp | 398 - modules/core/src/convert.cpp | 1394 - modules/core/src/copy.cpp | 631 - modules/core/src/datastructs.cpp | 4060 - modules/core/src/drawing.cpp | 2411 - modules/core/src/dxt.cpp | 2674 - modules/core/src/gl_core_3_1.cpp | 2765 - modules/core/src/gl_core_3_1.hpp | 1373 - modules/core/src/glob.cpp | 293 - modules/core/src/gpumat.cpp | 788 - modules/core/src/lapack.cpp | 1835 - modules/core/src/mathfuncs.cpp | 2559 - modules/core/src/matmul.cpp | 3359 - modules/core/src/matop.cpp | 1651 - modules/core/src/matrix.cpp | 4280 - modules/core/src/opengl_interop.cpp | 1579 - modules/core/src/opengl_interop_deprecated.cpp | 330 - modules/core/src/out.cpp | 306 - modules/core/src/parallel.cpp | 516 - modules/core/src/persistence.cpp | 5553 - modules/core/src/precomp.hpp | 204 - modules/core/src/rand.cpp | 1032 - modules/core/src/stat.cpp | 2710 - modules/core/src/system.cpp | 1185 - modules/core/src/tables.cpp | 3512 - modules/dynamicuda/CMakeLists.txt | 15 - .../include/opencv2/dynamicuda/dynamicuda.hpp | 1143 - modules/features2d/CMakeLists.txt | 2 - .../include/opencv2/features2d/features2d.hpp | 1611 - modules/features2d/src/bagofwords.cpp | 198 - modules/features2d/src/blobdetector.cpp | 366 - modules/features2d/src/brief.cpp | 175 - modules/features2d/src/brisk.cpp | 2240 - modules/features2d/src/descriptors.cpp | 256 - modules/features2d/src/detectors.cpp | 350 - modules/features2d/src/draw.cpp | 244 - modules/features2d/src/dynamic.cpp | 222 - modules/features2d/src/evaluation.cpp | 612 - modules/features2d/src/fast.cpp | 307 - modules/features2d/src/fast_score.cpp | 359 - modules/features2d/src/fast_score.hpp | 75 - modules/features2d/src/features2d_init.cpp | 218 - modules/features2d/src/freak.cpp | 679 - modules/features2d/src/generated_16.i | 19 - modules/features2d/src/generated_32.i | 35 - modules/features2d/src/generated_64.i | 67 - modules/features2d/src/keypoint.cpp | 347 - modules/features2d/src/matchers.cpp | 1165 - modules/features2d/src/mser.cpp | 1304 - modules/features2d/src/orb.cpp | 951 - modules/features2d/src/precomp.hpp | 59 - modules/features2d/src/stardetector.cpp | 449 - modules/flann/CMakeLists.txt | 2 - modules/flann/include/opencv2/flann/all_indices.h | 155 - modules/flann/include/opencv2/flann/allocator.h | 188 - modules/flann/include/opencv2/flann/any.h | 304 - .../flann/include/opencv2/flann/autotuned_index.h | 583 - .../flann/include/opencv2/flann/composite_index.h | 194 - modules/flann/include/opencv2/flann/config.h | 38 - modules/flann/include/opencv2/flann/defines.h | 176 - modules/flann/include/opencv2/flann/dist.h | 817 - modules/flann/include/opencv2/flann/dummy.h | 16 - .../flann/include/opencv2/flann/dynamic_bitset.h | 159 - modules/flann/include/opencv2/flann/flann.hpp | 427 - modules/flann/include/opencv2/flann/flann_base.hpp | 291 - modules/flann/include/opencv2/flann/general.h | 52 - modules/flann/include/opencv2/flann/ground_truth.h | 94 - modules/flann/include/opencv2/flann/hdf5.h | 231 - modules/flann/include/opencv2/flann/heap.h | 165 - .../opencv2/flann/hierarchical_clustering_index.h | 759 - .../flann/include/opencv2/flann/index_testing.h | 318 - modules/flann/include/opencv2/flann/kdtree_index.h | 621 - .../include/opencv2/flann/kdtree_single_index.h | 634 - modules/flann/include/opencv2/flann/kmeans_index.h | 1117 - modules/flann/include/opencv2/flann/linear_index.h | 132 - modules/flann/include/opencv2/flann/logger.h | 130 - modules/flann/include/opencv2/flann/lsh_index.h | 392 - modules/flann/include/opencv2/flann/lsh_table.h | 492 - modules/flann/include/opencv2/flann/matrix.h | 116 - modules/flann/include/opencv2/flann/miniflann.hpp | 162 - modules/flann/include/opencv2/flann/nn_index.h | 179 - .../flann/include/opencv2/flann/object_factory.h | 91 - modules/flann/include/opencv2/flann/params.h | 96 - modules/flann/include/opencv2/flann/random.h | 133 - modules/flann/include/opencv2/flann/result_set.h | 542 - modules/flann/include/opencv2/flann/sampling.h | 81 - modules/flann/include/opencv2/flann/saving.h | 187 - .../flann/include/opencv2/flann/simplex_downhill.h | 186 - modules/flann/include/opencv2/flann/timer.h | 93 - modules/flann/src/flann.cpp | 57 - modules/flann/src/miniflann.cpp | 803 - modules/flann/src/precomp.hpp | 24 - modules/highgui/CMakeLists.txt | 322 - modules/highgui/include/opencv2/highgui/cap_ios.h | 169 - .../highgui/include/opencv2/highgui/highgui.hpp | 255 - .../highgui/include/opencv2/highgui/highgui_c.h | 650 - modules/highgui/include/opencv2/highgui/ios.h | 49 - modules/highgui/src/bitstrm.cpp | 582 - modules/highgui/src/bitstrm.hpp | 182 - modules/highgui/src/cap.cpp | 613 - modules/highgui/src/cap_android.cpp | 554 - modules/highgui/src/cap_avfoundation.mm | 1333 - modules/highgui/src/cap_cmu.cpp | 551 - modules/highgui/src/cap_dc1394.cpp | 1109 - modules/highgui/src/cap_dc1394_v2.cpp | 932 - modules/highgui/src/cap_dshow.cpp | 3381 - modules/highgui/src/cap_ffmpeg.cpp | 275 - modules/highgui/src/cap_ffmpeg_api.hpp | 96 - modules/highgui/src/cap_ffmpeg_impl.hpp | 2422 - modules/highgui/src/cap_giganetix.cpp | 763 - modules/highgui/src/cap_gstreamer.cpp | 777 - modules/highgui/src/cap_images.cpp | 374 - modules/highgui/src/cap_intelperc.cpp | 714 - modules/highgui/src/cap_ios_abstract_camera.mm | 502 - modules/highgui/src/cap_ios_photo_camera.mm | 165 - modules/highgui/src/cap_ios_video_camera.mm | 618 - modules/highgui/src/cap_libv4l.cpp | 1771 - modules/highgui/src/cap_mil.cpp | 219 - modules/highgui/src/cap_msmf.cpp | 3535 - modules/highgui/src/cap_openni.cpp | 1409 - modules/highgui/src/cap_pvapi.cpp | 377 - modules/highgui/src/cap_qt.cpp | 1619 - modules/highgui/src/cap_qtkit.mm | 1071 - modules/highgui/src/cap_tyzx.cpp | 230 - modules/highgui/src/cap_unicap.cpp | 331 - modules/highgui/src/cap_v4l.cpp | 2915 - modules/highgui/src/cap_vfw.cpp | 723 - modules/highgui/src/cap_ximea.cpp | 352 - modules/highgui/src/cap_xine.cpp | 846 - modules/highgui/src/ffmpeg_codecs.hpp | 317 - modules/highgui/src/files_Qt/Milky/48/1.png | Bin 1113 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/10.png | Bin 2706 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/100.png | Bin 3076 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/101.png | Bin 2763 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/102.png | Bin 2906 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/103.png | Bin 2924 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/104.png | Bin 2912 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/105.png | Bin 2849 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/106.png | Bin 2853 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/107.png | Bin 2830 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/108.png | Bin 3235 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/109.png | Bin 3177 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/11.png | Bin 1876 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/110.png | Bin 3197 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/111.png | Bin 2135 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/112.png | Bin 1326 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/113.png | Bin 3406 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/114.png | Bin 2853 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/115.png | Bin 2596 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/116.png | Bin 2877 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/117.png | Bin 831 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/118.png | Bin 2157 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/119.png | Bin 1786 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/12.png | Bin 3489 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/120.png | Bin 2480 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/121.png | Bin 2568 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/122.png | Bin 2725 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/123.png | Bin 2625 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/124.png | Bin 1913 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/125.png | Bin 2882 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/126.png | Bin 2762 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/127.png | Bin 2475 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/128.png | Bin 2383 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/129.png | Bin 2915 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/13.png | Bin 3016 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/130.png | Bin 2495 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/131.png | Bin 2586 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/14.png | Bin 3708 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/15.png | Bin 4935 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/16.png | Bin 2935 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/17.png | Bin 1828 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/18.png | Bin 2646 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/19.png | Bin 1982 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/2.png | Bin 2550 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/20.png | Bin 2426 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/21.png | Bin 3178 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/22.png | Bin 1661 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/23.png | Bin 1742 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/24.png | Bin 1619 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/25.png | Bin 2310 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/26.png | Bin 2586 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/27.png | Bin 3067 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/28.png | Bin 1718 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/29.png | Bin 3035 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/3.png | Bin 1198 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/30.png | Bin 3255 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/31.png | Bin 4314 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/32.png | Bin 2553 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/33.png | Bin 1971 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/34.png | Bin 1105 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/35.png | Bin 2735 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/36.png | Bin 5230 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/37.png | Bin 2412 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/38.png | Bin 3062 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/39.png | Bin 2413 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/4.png | Bin 2123 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/40.png | Bin 3067 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/41.png | Bin 2728 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/42.png | Bin 2836 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/43.png | Bin 2513 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/44.png | Bin 3079 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/45.png | Bin 2717 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/46.png | Bin 3366 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/47.png | Bin 2270 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/48.png | Bin 2588 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/49.png | Bin 2741 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/5.png | Bin 2641 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/50.png | Bin 2233 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/51.png | Bin 2307 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/52.png | Bin 2373 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/53.png | Bin 2872 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/54.png | Bin 2938 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/55.png | Bin 2867 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/56.png | Bin 2862 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/57.png | Bin 2661 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/58.png | Bin 1916 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/59.png | Bin 2100 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/6.png | Bin 3009 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/60.png | Bin 2957 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/61.png | Bin 3442 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/62.png | Bin 3643 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/63.png | Bin 2553 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/64.png | Bin 2301 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/65.png | Bin 3012 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/66.png | Bin 1921 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/67.png | Bin 2289 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/68.png | Bin 2359 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/69.png | Bin 2011 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/7.png | Bin 2036 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/70.png | Bin 1686 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/71.png | Bin 2391 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/72.png | Bin 2364 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/73.png | Bin 1774 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/74.png | Bin 1718 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/75.png | Bin 1231 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/76.png | Bin 2744 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/77.png | Bin 2741 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/78.png | Bin 2417 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/79.png | Bin 3120 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/8.png | Bin 4352 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/80.png | Bin 2851 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/81.png | Bin 2497 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/82.png | Bin 2336 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/83.png | Bin 2336 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/84.png | Bin 2420 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/85.png | Bin 3064 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/86.png | Bin 2497 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/87.png | Bin 2337 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/88.png | Bin 2072 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/89.png | Bin 2521 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/9.png | Bin 1980 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/90.png | Bin 3165 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/91.png | Bin 2830 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/92.png | Bin 3046 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/93.png | Bin 2901 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/94.png | Bin 3050 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/95.png | Bin 2843 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/96.png | Bin 2982 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/97.png | Bin 3074 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/98.png | Bin 2981 -> 0 bytes modules/highgui/src/files_Qt/Milky/48/99.png | Bin 2956 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/1.png | Bin 1436 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/10.png | Bin 3944 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/100.png | Bin 4091 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/101.png | Bin 3948 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/102.png | Bin 4191 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/103.png | Bin 4089 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/104.png | Bin 4086 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/105.png | Bin 4115 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/106.png | Bin 4255 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/107.png | Bin 4226 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/108.png | Bin 4650 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/109.png | Bin 4579 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/11.png | Bin 4391 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/110.png | Bin 4487 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/111.png | Bin 2999 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/112.png | Bin 1640 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/113.png | Bin 5028 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/114.png | Bin 4080 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/115.png | Bin 3810 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/116.png | Bin 4202 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/117.png | Bin 1201 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/118.png | Bin 3080 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/119.png | Bin 2550 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/12.png | Bin 5272 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/120.png | Bin 3414 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/121.png | Bin 3530 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/122.png | Bin 3942 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/123.png | Bin 3616 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/124.png | Bin 2661 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/125.png | Bin 4129 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/126.png | Bin 3934 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/127.png | Bin 3479 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/128.png | Bin 3399 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/129.png | Bin 4114 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/13.png | Bin 3329 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/130.png | Bin 3646 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/131.png | Bin 3379 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/14.png | Bin 5293 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/15.png | Bin 2593 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/16.png | Bin 4376 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/17.png | Bin 2548 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/18.png | Bin 3701 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/19.png | Bin 2719 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/2.png | Bin 3725 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/20.png | Bin 7298 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/21.png | Bin 2321 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/22.png | Bin 3399 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/23.png | Bin 2562 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/24.png | Bin 2357 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/25.png | Bin 3364 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/26.png | Bin 3615 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/27.png | Bin 4494 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/28.png | Bin 2499 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/29.png | Bin 4429 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/3.png | Bin 4209 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/30.png | Bin 4728 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/31.png | Bin 6434 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/32.png | Bin 3741 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/33.png | Bin 2791 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/34.png | Bin 1750 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/35.png | Bin 4105 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/36.png | Bin 3951 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/37.png | Bin 3189 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/38.png | Bin 4678 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/39.png | Bin 3264 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/4.png | Bin 3134 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/40.png | Bin 4555 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/41.png | Bin 4024 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/42.png | Bin 4139 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/43.png | Bin 3763 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/44.png | Bin 4490 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/45.png | Bin 4135 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/46.png | Bin 5031 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/47.png | Bin 3221 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/48.png | Bin 3797 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/49.png | Bin 4077 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/5.png | Bin 3809 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/50.png | Bin 3326 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/51.png | Bin 3192 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/52.png | Bin 3513 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/53.png | Bin 4288 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/54.png | Bin 4316 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/55.png | Bin 4140 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/56.png | Bin 4092 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/57.png | Bin 3899 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/58.png | Bin 2696 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/59.png | Bin 2688 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/6.png | Bin 4345 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/60.png | Bin 4302 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/61.png | Bin 5241 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/62.png | Bin 5416 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/63.png | Bin 3752 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/64.png | Bin 3426 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/65.png | Bin 4367 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/66.png | Bin 2793 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/67.png | Bin 3232 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/68.png | Bin 3267 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/69.png | Bin 3021 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/7.png | Bin 2862 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/70.png | Bin 2371 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/71.png | Bin 3305 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/72.png | Bin 3262 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/73.png | Bin 2427 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/74.png | Bin 2473 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/75.png | Bin 1800 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/76.png | Bin 3767 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/77.png | Bin 3874 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/78.png | Bin 3277 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/79.png | Bin 4376 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/8.png | Bin 2222 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/80.png | Bin 4074 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/81.png | Bin 3476 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/82.png | Bin 3288 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/83.png | Bin 3323 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/84.png | Bin 3475 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/85.png | Bin 4341 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/86.png | Bin 3507 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/87.png | Bin 3289 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/88.png | Bin 2916 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/89.png | Bin 3575 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/9.png | Bin 2685 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/90.png | Bin 4516 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/91.png | Bin 3865 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/92.png | Bin 4331 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/93.png | Bin 4101 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/94.png | Bin 4313 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/95.png | Bin 3983 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/96.png | Bin 4283 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/97.png | Bin 4290 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/98.png | Bin 3951 -> 0 bytes modules/highgui/src/files_Qt/Milky/64/99.png | Bin 3922 -> 0 bytes modules/highgui/src/files_Qt/Milky/README.txt | 19 - .../highgui/src/files_Qt/stylesheet_trackbar.qss | 58 - modules/highgui/src/grfmt_base.cpp | 137 - modules/highgui/src/grfmt_base.hpp | 117 - modules/highgui/src/grfmt_bmp.cpp | 565 - modules/highgui/src/grfmt_bmp.hpp | 99 - modules/highgui/src/grfmt_exr.cpp | 741 - modules/highgui/src/grfmt_exr.hpp | 117 - modules/highgui/src/grfmt_imageio.cpp | 396 - modules/highgui/src/grfmt_imageio.hpp | 67 - modules/highgui/src/grfmt_jpeg.cpp | 660 - modules/highgui/src/grfmt_jpeg.hpp | 90 - modules/highgui/src/grfmt_jpeg2000.cpp | 523 - modules/highgui/src/grfmt_jpeg2000.hpp | 95 - modules/highgui/src/grfmt_png.cpp | 449 - modules/highgui/src/grfmt_png.hpp | 101 - modules/highgui/src/grfmt_pxm.cpp | 513 - modules/highgui/src/grfmt_pxm.hpp | 92 - modules/highgui/src/grfmt_sunras.cpp | 425 - modules/highgui/src/grfmt_sunras.hpp | 105 - modules/highgui/src/grfmt_tiff.cpp | 743 - modules/highgui/src/grfmt_tiff.hpp | 136 - modules/highgui/src/grfmts.hpp | 56 - modules/highgui/src/ios_conversions.mm | 117 - modules/highgui/src/loadsave.cpp | 545 - modules/highgui/src/precomp.hpp | 251 - modules/highgui/src/utils.cpp | 689 - modules/highgui/src/utils.hpp | 128 - modules/highgui/src/window.cpp | 627 - modules/highgui/src/window_QT.cpp | 3233 - modules/highgui/src/window_QT.h | 563 - modules/highgui/src/window_QT.qrc | 15 - modules/highgui/src/window_carbon.cpp | 1100 - modules/highgui/src/window_cocoa.mm | 942 - modules/highgui/src/window_gtk.cpp | 1641 - modules/highgui/src/window_w32.cpp | 2149 - modules/imgproc/CMakeLists.txt | 2 - .../imgproc/include/opencv2/imgproc/imgproc.hpp | 1303 - .../imgproc/include/opencv2/imgproc/imgproc_c.h | 623 - modules/imgproc/include/opencv2/imgproc/types_c.h | 640 - modules/imgproc/src/_geom.h | 72 - modules/imgproc/src/_list.h | 374 - modules/imgproc/src/accum.cpp | 485 - modules/imgproc/src/approx.cpp | 807 - modules/imgproc/src/canny.cpp | 339 - modules/imgproc/src/clahe.cpp | 333 - modules/imgproc/src/color.cpp | 4426 - modules/imgproc/src/contours.cpp | 2057 - modules/imgproc/src/convhull.cpp | 815 - modules/imgproc/src/corner.cpp | 422 - modules/imgproc/src/cornersubpix.cpp | 265 - modules/imgproc/src/deriv.cpp | 670 - modules/imgproc/src/distransform.cpp | 859 - modules/imgproc/src/emd.cpp | 1162 - modules/imgproc/src/featureselect.cpp | 242 - modules/imgproc/src/filter.cpp | 3348 - modules/imgproc/src/floodfill.cpp | 651 - modules/imgproc/src/gabor.cpp | 98 - modules/imgproc/src/gcgraph.hpp | 385 - modules/imgproc/src/generalized_hough.cpp | 1290 - modules/imgproc/src/geometry.cpp | 774 - modules/imgproc/src/grabcut.cpp | 575 - modules/imgproc/src/histogram.cpp | 3328 - modules/imgproc/src/hough.cpp | 1143 - modules/imgproc/src/imgwarp.cpp | 4250 - modules/imgproc/src/linefit.cpp | 719 - modules/imgproc/src/matchcontours.cpp | 198 - modules/imgproc/src/moments.cpp | 655 - modules/imgproc/src/morph.cpp | 1524 - modules/imgproc/src/phasecorr.cpp | 615 - modules/imgproc/src/precomp.hpp | 154 - modules/imgproc/src/pyramids.cpp | 581 - modules/imgproc/src/rotcalipers.cpp | 440 - modules/imgproc/src/samplers.cpp | 900 - modules/imgproc/src/segmentation.cpp | 541 - modules/imgproc/src/shapedescr.cpp | 1186 - modules/imgproc/src/smooth.cpp | 2582 - modules/imgproc/src/subdivision2d.cpp | 827 - modules/imgproc/src/sumpixels.cpp | 359 - modules/imgproc/src/tables.cpp | 214 - modules/imgproc/src/templmatch.cpp | 390 - modules/imgproc/src/thresh.cpp | 877 - modules/imgproc/src/undistort.cpp | 572 - modules/imgproc/src/utils.cpp | 280 - modules/ml/CMakeLists.txt | 2 - modules/ml/include/opencv2/ml/ml.hpp | 2147 - modules/ml/src/ann_mlp.cpp | 1618 - modules/ml/src/boost.cpp | 2156 - modules/ml/src/cnn.cpp | 1675 - modules/ml/src/data.cpp | 769 - modules/ml/src/em.cpp | 677 - modules/ml/src/ertrees.cpp | 1849 - modules/ml/src/estimate.cpp | 728 - modules/ml/src/gbt.cpp | 1379 - modules/ml/src/inner_functions.cpp | 1879 - modules/ml/src/knearest.cpp | 482 - modules/ml/src/ml_init.cpp | 63 - modules/ml/src/nbayes.cpp | 627 - modules/ml/src/precomp.hpp | 372 - modules/ml/src/rtrees.cpp | 867 - modules/ml/src/svm.cpp | 2959 - modules/ml/src/testset.cpp | 170 - modules/ml/src/tree.cpp | 4137 - modules/objdetect/CMakeLists.txt | 2 - .../include/opencv2/objdetect/objdetect.hpp | 1073 - modules/objdetect/src/_latentsvm.h | 398 - modules/objdetect/src/_lsvm_distancetransform.h | 138 - modules/objdetect/src/_lsvm_error.h | 20 - modules/objdetect/src/_lsvm_fft.h | 79 - modules/objdetect/src/_lsvm_matching.h | 440 - modules/objdetect/src/_lsvm_resizeimg.h | 10 - modules/objdetect/src/_lsvm_routine.h | 35 - modules/objdetect/src/_lsvm_tbbversion.h | 51 - modules/objdetect/src/_lsvm_types.h | 83 - modules/objdetect/src/_lsvmparser.h | 65 - modules/objdetect/src/cascadedetect.cpp | 1311 - modules/objdetect/src/cascadedetect.hpp | 489 - modules/objdetect/src/datamatrix.cpp | 575 - modules/objdetect/src/distancetransform.cpp | 383 - modules/objdetect/src/featurepyramid.cpp | 514 - modules/objdetect/src/fft.cpp | 246 - modules/objdetect/src/haar.cpp | 2567 - modules/objdetect/src/hog.cpp | 2716 - modules/objdetect/src/latentsvm.cpp | 644 - modules/objdetect/src/latentsvmdetector.cpp | 269 - modules/objdetect/src/linemod.cpp | 1850 - modules/objdetect/src/lsvmparser.cpp | 817 - modules/objdetect/src/lsvmtbbversion.cpp | 122 - modules/objdetect/src/matching.cpp | 1797 - modules/objdetect/src/normal_lut.i | 4 - modules/objdetect/src/objdetect_init.cpp | 43 - modules/objdetect/src/precomp.hpp | 63 - modules/objdetect/src/resizeimg.cpp | 241 - modules/objdetect/src/routine.cpp | 117 - modules/photo/CMakeLists.txt | 2 - modules/photo/include/opencv2/photo/photo.hpp | 91 - modules/photo/include/opencv2/photo/photo_c.h | 69 - modules/photo/src/arrays.hpp | 159 - modules/photo/src/denoising.cpp | 240 - .../photo/src/fast_nlmeans_denoising_invoker.hpp | 338 - .../src/fast_nlmeans_denoising_invoker_commons.hpp | 120 - .../src/fast_nlmeans_multi_denoising_invoker.hpp | 387 - modules/photo/src/inpaint.cpp | 810 - modules/photo/src/precomp.hpp | 54 - modules/refman.rst.in | 9 - modules/video/CMakeLists.txt | 2 - .../include/opencv2/video/background_segm.hpp | 262 - modules/video/include/opencv2/video/tracking.hpp | 373 - modules/video/include/opencv2/video/video.hpp | 58 - modules/video/src/bgfg_gaussmix.cpp | 420 - modules/video/src/bgfg_gaussmix2.cpp | 632 - modules/video/src/bgfg_gmg.cpp | 341 - modules/video/src/camshift.cpp | 324 - modules/video/src/kalman.cpp | 300 - modules/video/src/lkpyramid.cpp | 2173 - modules/video/src/lkpyramid.hpp | 36 - modules/video/src/motempl.cpp | 486 - modules/video/src/optflowgf.cpp | 660 - modules/video/src/precomp.hpp | 60 - modules/video/src/simpleflow.cpp | 650 - modules/video/src/simpleflow.hpp | 88 - modules/video/src/tvl1flow.cpp | 938 - modules/video/src/video_init.cpp | 103 - opencv.manifest | 5 - packaging/opencv.spec | 154 - platforms/linux/arm-gnueabi.toolchain.cmake | 89 - platforms/readme.txt | 3 - platforms/scripts/ABI_compat_generator.py | 235 - platforms/scripts/camera_build.conf | 31 - platforms/scripts/cmake_android_all_cameras.py | 76 - platforms/scripts/cmake_android_arm.sh | 7 - platforms/scripts/cmake_android_mips.sh | 7 - platforms/scripts/cmake_android_service.sh | 7 - platforms/scripts/cmake_android_x86.sh | 8 - platforms/scripts/cmake_arm_gnueabi_hardfp.sh | 7 - platforms/scripts/cmake_arm_gnueabi_softfp.sh | 7 - platforms/scripts/cmake_carma.sh | 11 - platforms/scripts/cmake_winrt.cmd | 9 - 853 files changed, 926777 deletions(-) delete mode 100644 3rdparty/ffmpeg/LICENSE.LGPL-2.1+ delete mode 100644 3rdparty/ffmpeg/ffmpeg_version.cmake delete mode 100644 3rdparty/ffmpeg/ffopencv.c delete mode 100644 3rdparty/ffmpeg/make.bat delete mode 100644 3rdparty/ffmpeg/opencv_ffmpeg.dll delete mode 100644 3rdparty/ffmpeg/opencv_ffmpeg_64.dll delete mode 100644 3rdparty/ffmpeg/readme.txt delete mode 100644 3rdparty/include/dshow/_mingw_dxhelper.h delete mode 100644 3rdparty/include/dshow/_mingw_unicode.h delete mode 100644 3rdparty/include/dshow/amvideo.h delete mode 100644 3rdparty/include/dshow/audevcod.h delete mode 100644 3rdparty/include/dshow/bdatypes.h delete mode 100644 3rdparty/include/dshow/control.h delete mode 100644 3rdparty/include/dshow/ddraw.h delete mode 100644 3rdparty/include/dshow/dshow.h delete mode 100644 3rdparty/include/dshow/dsound.h delete mode 100644 3rdparty/include/dshow/dvdmedia.h delete mode 100644 3rdparty/include/dshow/errors.h delete mode 100644 3rdparty/include/dshow/evcode.h delete mode 100644 3rdparty/include/dshow/ksuuids.h delete mode 100644 3rdparty/include/dshow/strmif.h delete mode 100644 3rdparty/include/dshow/uuids.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/avcodec.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/avfft.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/dxva2.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/old_codec_ids.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/vaapi.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/vda.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/vdpau.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/version.h delete mode 100644 3rdparty/include/ffmpeg_/libavcodec/xvmc.h delete mode 100644 3rdparty/include/ffmpeg_/libavdevice/avdevice.h delete mode 100644 3rdparty/include/ffmpeg_/libavdevice/version.h delete mode 100644 3rdparty/include/ffmpeg_/libavformat/avformat.h delete mode 100644 3rdparty/include/ffmpeg_/libavformat/avio.h delete mode 100644 3rdparty/include/ffmpeg_/libavformat/version.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/adler32.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/aes.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/attributes.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/audio_fifo.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/audioconvert.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/avassert.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/avconfig.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/avstring.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/avutil.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/base64.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/blowfish.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/bprint.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/bswap.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/buffer.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/channel_layout.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/common.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/cpu.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/crc.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/dict.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/error.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/eval.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/fifo.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/file.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/frame.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/hmac.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/imgutils.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/intfloat.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/intfloat_readwrite.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/intreadwrite.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/lfg.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/log.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/lzo.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/mathematics.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/md5.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/mem.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/murmur3.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/old_pix_fmts.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/opt.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/parseutils.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/pixdesc.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/pixfmt.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/random_seed.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/rational.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/ripemd.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/samplefmt.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/sha.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/sha512.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/time.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/timecode.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/timestamp.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/version.h delete mode 100644 3rdparty/include/ffmpeg_/libavutil/xtea.h delete mode 100644 3rdparty/include/ffmpeg_/libswscale/swscale.h delete mode 100644 3rdparty/include/ffmpeg_/libswscale/version.h delete mode 100644 3rdparty/include/msc_inttypes.h delete mode 100644 3rdparty/include/msc_stdint.h delete mode 100644 3rdparty/readme.txt delete mode 100644 CMakeLists.txt delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 cmake/CMakeParseArguments.cmake delete mode 100644 cmake/FindCUDA.cmake delete mode 100644 cmake/FindCUDA/make2cmake.cmake delete mode 100644 cmake/FindCUDA/parse_cubin.cmake delete mode 100644 cmake/FindCUDA/run_nvcc.cmake delete mode 100644 cmake/OpenCVCRTLinkage.cmake delete mode 100644 cmake/OpenCVCompilerOptions.cmake delete mode 100644 cmake/OpenCVConfig.cmake delete mode 100644 cmake/OpenCVDetectAndroidSDK.cmake delete mode 100644 cmake/OpenCVDetectApacheAnt.cmake delete mode 100644 cmake/OpenCVDetectCStripes.cmake delete mode 100644 cmake/OpenCVDetectCUDA.cmake delete mode 100644 cmake/OpenCVDetectCXXCompiler.cmake delete mode 100644 cmake/OpenCVDetectOpenCL.cmake delete mode 100644 cmake/OpenCVDetectPython.cmake delete mode 100644 cmake/OpenCVDetectTBB.cmake delete mode 100644 cmake/OpenCVDetectVTK.cmake delete mode 100644 cmake/OpenCVExtraTargets.cmake delete mode 100644 cmake/OpenCVFindIPP.cmake delete mode 100644 cmake/OpenCVFindIntelPerCSDK.cmake delete mode 100644 cmake/OpenCVFindLATEX.cmake delete mode 100644 cmake/OpenCVFindLibsGUI.cmake delete mode 100644 cmake/OpenCVFindLibsGrfmt.cmake delete mode 100644 cmake/OpenCVFindLibsPerf.cmake delete mode 100644 cmake/OpenCVFindLibsVideo.cmake delete mode 100644 cmake/OpenCVFindOpenEXR.cmake delete mode 100644 cmake/OpenCVFindOpenNI.cmake delete mode 100644 cmake/OpenCVFindPkgConfig.cmake delete mode 100644 cmake/OpenCVFindXimea.cmake delete mode 100644 cmake/OpenCVGenAndroidMK.cmake delete mode 100644 cmake/OpenCVGenConfig.cmake delete mode 100644 cmake/OpenCVGenHeaders.cmake delete mode 100644 cmake/OpenCVGenInfoPlist.cmake delete mode 100644 cmake/OpenCVGenPkgconfig.cmake delete mode 100644 cmake/OpenCVLegacyOptions.cmake delete mode 100644 cmake/OpenCVModule.cmake delete mode 100644 cmake/OpenCVPCHSupport.cmake delete mode 100644 cmake/OpenCVPackaging.cmake delete mode 100644 cmake/OpenCVUtils.cmake delete mode 100644 cmake/OpenCVVersion.cmake delete mode 100644 cmake/checks/OpenCVDetectCudaArch.cu delete mode 100644 cmake/checks/opencl.cpp delete mode 100644 cmake/checks/vfwtest.cpp delete mode 100644 cmake/checks/win32uitest.cpp delete mode 100644 cmake/checks/winrttest.cpp delete mode 100644 cmake/cl2cpp.cmake delete mode 100644 cmake/templates/OpenCV.mk.in delete mode 100644 cmake/templates/OpenCVConfig-version.cmake.in delete mode 100644 cmake/templates/OpenCVConfig.cmake.in delete mode 100644 cmake/templates/cmake_uninstall.cmake.in delete mode 100644 cmake/templates/cvconfig.h.in delete mode 100644 cmake/templates/opencv-XXX.pc.in delete mode 100644 cmake/templates/opencv_modules.hpp.in delete mode 100644 cmake/templates/opencv_run_all_tests_android.sh.in delete mode 100644 cmake/templates/opencv_run_all_tests_unix.sh.in delete mode 100644 cmake/templates/opencv_testing.sh.in delete mode 100644 data/CMakeLists.txt delete mode 100644 data/haarcascades/haarcascade_eye.xml delete mode 100644 data/haarcascades/haarcascade_eye_tree_eyeglasses.xml delete mode 100644 data/haarcascades/haarcascade_frontalface_alt.xml delete mode 100644 data/haarcascades/haarcascade_frontalface_alt2.xml delete mode 100644 data/haarcascades/haarcascade_frontalface_alt_tree.xml delete mode 100644 data/haarcascades/haarcascade_frontalface_default.xml delete mode 100644 data/haarcascades/haarcascade_fullbody.xml delete mode 100644 data/haarcascades/haarcascade_lefteye_2splits.xml delete mode 100644 data/haarcascades/haarcascade_lowerbody.xml delete mode 100644 data/haarcascades/haarcascade_mcs_eyepair_big.xml delete mode 100644 data/haarcascades/haarcascade_mcs_eyepair_small.xml delete mode 100644 data/haarcascades/haarcascade_mcs_leftear.xml delete mode 100644 data/haarcascades/haarcascade_mcs_lefteye.xml delete mode 100644 data/haarcascades/haarcascade_mcs_mouth.xml delete mode 100644 data/haarcascades/haarcascade_mcs_nose.xml delete mode 100644 data/haarcascades/haarcascade_mcs_rightear.xml delete mode 100644 data/haarcascades/haarcascade_mcs_righteye.xml delete mode 100644 data/haarcascades/haarcascade_mcs_upperbody.xml delete mode 100644 data/haarcascades/haarcascade_profileface.xml delete mode 100644 data/haarcascades/haarcascade_righteye_2splits.xml delete mode 100644 data/haarcascades/haarcascade_smile.xml delete mode 100644 data/haarcascades/haarcascade_upperbody.xml delete mode 100644 data/hogcascades/hogcascade_pedestrians.xml delete mode 100644 data/lbpcascades/lbpcascade_frontalface.xml delete mode 100755 data/lbpcascades/lbpcascade_profileface.xml delete mode 100755 data/lbpcascades/lbpcascade_silverware.xml delete mode 100644 data/readme.txt delete mode 100644 include/CMakeLists.txt delete mode 100644 include/opencv/cv.h delete mode 100644 include/opencv/cv.hpp delete mode 100644 include/opencv/cvaux.h delete mode 100644 include/opencv/cvaux.hpp delete mode 100644 include/opencv/cvwimage.h delete mode 100644 include/opencv/cxcore.h delete mode 100644 include/opencv/cxcore.hpp delete mode 100644 include/opencv/cxeigen.hpp delete mode 100644 include/opencv/cxmisc.h delete mode 100644 include/opencv/highgui.h delete mode 100644 include/opencv/ml.h delete mode 100644 include/opencv2/opencv.hpp delete mode 100644 index.rst delete mode 100644 modules/CMakeLists.txt delete mode 100644 modules/calib3d/CMakeLists.txt delete mode 100644 modules/calib3d/include/opencv2/calib3d/calib3d.hpp delete mode 100644 modules/calib3d/src/_modelest.h delete mode 100644 modules/calib3d/src/calibinit.cpp delete mode 100644 modules/calib3d/src/calibration.cpp delete mode 100644 modules/calib3d/src/checkchessboard.cpp delete mode 100644 modules/calib3d/src/circlesgrid.cpp delete mode 100644 modules/calib3d/src/circlesgrid.hpp delete mode 100644 modules/calib3d/src/epnp.cpp delete mode 100644 modules/calib3d/src/epnp.h delete mode 100644 modules/calib3d/src/fundam.cpp delete mode 100644 modules/calib3d/src/modelest.cpp delete mode 100644 modules/calib3d/src/p3p.cpp delete mode 100644 modules/calib3d/src/p3p.h delete mode 100644 modules/calib3d/src/polynom_solver.cpp delete mode 100644 modules/calib3d/src/polynom_solver.h delete mode 100644 modules/calib3d/src/posit.cpp delete mode 100644 modules/calib3d/src/precomp.hpp delete mode 100644 modules/calib3d/src/quadsubpix.cpp delete mode 100644 modules/calib3d/src/solvepnp.cpp delete mode 100644 modules/calib3d/src/stereobm.cpp delete mode 100644 modules/calib3d/src/stereosgbm.cpp delete mode 100644 modules/calib3d/src/triangulate.cpp delete mode 100644 modules/contrib/CMakeLists.txt delete mode 100644 modules/contrib/include/opencv2/contrib/contrib.hpp delete mode 100644 modules/contrib/include/opencv2/contrib/detection_based_tracker.hpp delete mode 100644 modules/contrib/include/opencv2/contrib/hybridtracker.hpp delete mode 100644 modules/contrib/include/opencv2/contrib/openfabmap.hpp delete mode 100644 modules/contrib/include/opencv2/contrib/retina.hpp delete mode 100644 modules/contrib/src/adaptiveskindetector.cpp delete mode 100644 modules/contrib/src/ba.cpp delete mode 100644 modules/contrib/src/basicretinafilter.cpp delete mode 100644 modules/contrib/src/basicretinafilter.hpp delete mode 100644 modules/contrib/src/bowmsctrainer.cpp delete mode 100644 modules/contrib/src/chamfermatching.cpp delete mode 100644 modules/contrib/src/chowliutree.cpp delete mode 100644 modules/contrib/src/colormap.cpp delete mode 100644 modules/contrib/src/colortracker.cpp delete mode 100644 modules/contrib/src/contrib_init.cpp delete mode 100644 modules/contrib/src/detection_based_tracker.cpp delete mode 100644 modules/contrib/src/facerec.cpp delete mode 100644 modules/contrib/src/featuretracker.cpp delete mode 100644 modules/contrib/src/fuzzymeanshifttracker.cpp delete mode 100644 modules/contrib/src/gencolors.cpp delete mode 100644 modules/contrib/src/hybridtracker.cpp delete mode 100644 modules/contrib/src/imagelogpolprojection.cpp delete mode 100644 modules/contrib/src/imagelogpolprojection.hpp delete mode 100644 modules/contrib/src/inputoutput.cpp delete mode 100644 modules/contrib/src/lda.cpp delete mode 100644 modules/contrib/src/logpolar_bsm.cpp delete mode 100644 modules/contrib/src/magnoretinafilter.cpp delete mode 100644 modules/contrib/src/magnoretinafilter.hpp delete mode 100644 modules/contrib/src/octree.cpp delete mode 100644 modules/contrib/src/openfabmap.cpp delete mode 100644 modules/contrib/src/parvoretinafilter.cpp delete mode 100644 modules/contrib/src/parvoretinafilter.hpp delete mode 100644 modules/contrib/src/polyfit.cpp delete mode 100644 modules/contrib/src/precomp.hpp delete mode 100644 modules/contrib/src/retina.cpp delete mode 100644 modules/contrib/src/retinacolor.cpp delete mode 100644 modules/contrib/src/retinacolor.hpp delete mode 100644 modules/contrib/src/retinafilter.cpp delete mode 100644 modules/contrib/src/retinafilter.hpp delete mode 100644 modules/contrib/src/rgbdodometry.cpp delete mode 100644 modules/contrib/src/selfsimilarity.cpp delete mode 100644 modules/contrib/src/spinimages.cpp delete mode 100644 modules/contrib/src/stereovar.cpp delete mode 100644 modules/contrib/src/templatebuffer.hpp delete mode 100644 modules/core/CMakeLists.txt delete mode 100644 modules/core/include/opencv2/core/affine.hpp delete mode 100644 modules/core/include/opencv2/core/core.hpp delete mode 100644 modules/core/include/opencv2/core/core_c.h delete mode 100644 modules/core/include/opencv2/core/cuda_devptrs.hpp delete mode 100644 modules/core/include/opencv2/core/devmem2d.hpp delete mode 100644 modules/core/include/opencv2/core/eigen.hpp delete mode 100644 modules/core/include/opencv2/core/gpumat.hpp delete mode 100644 modules/core/include/opencv2/core/internal.hpp delete mode 100644 modules/core/include/opencv2/core/mat.hpp delete mode 100644 modules/core/include/opencv2/core/opengl_interop.hpp delete mode 100644 modules/core/include/opencv2/core/opengl_interop_deprecated.hpp delete mode 100644 modules/core/include/opencv2/core/operations.hpp delete mode 100644 modules/core/include/opencv2/core/types_c.h delete mode 100644 modules/core/include/opencv2/core/version.hpp delete mode 100644 modules/core/include/opencv2/core/wimage.hpp delete mode 100644 modules/core/src/algorithm.cpp delete mode 100644 modules/core/src/alloc.cpp delete mode 100644 modules/core/src/arithm.cpp delete mode 100644 modules/core/src/array.cpp delete mode 100644 modules/core/src/cmdparser.cpp delete mode 100644 modules/core/src/convert.cpp delete mode 100644 modules/core/src/copy.cpp delete mode 100644 modules/core/src/datastructs.cpp delete mode 100644 modules/core/src/drawing.cpp delete mode 100644 modules/core/src/dxt.cpp delete mode 100644 modules/core/src/gl_core_3_1.cpp delete mode 100644 modules/core/src/gl_core_3_1.hpp delete mode 100644 modules/core/src/glob.cpp delete mode 100644 modules/core/src/gpumat.cpp delete mode 100644 modules/core/src/lapack.cpp delete mode 100644 modules/core/src/mathfuncs.cpp delete mode 100644 modules/core/src/matmul.cpp delete mode 100644 modules/core/src/matop.cpp delete mode 100644 modules/core/src/matrix.cpp delete mode 100644 modules/core/src/opengl_interop.cpp delete mode 100644 modules/core/src/opengl_interop_deprecated.cpp delete mode 100644 modules/core/src/out.cpp delete mode 100644 modules/core/src/parallel.cpp delete mode 100644 modules/core/src/persistence.cpp delete mode 100644 modules/core/src/precomp.hpp delete mode 100644 modules/core/src/rand.cpp delete mode 100644 modules/core/src/stat.cpp delete mode 100644 modules/core/src/system.cpp delete mode 100644 modules/core/src/tables.cpp delete mode 100644 modules/dynamicuda/CMakeLists.txt delete mode 100644 modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp delete mode 100644 modules/features2d/CMakeLists.txt delete mode 100644 modules/features2d/include/opencv2/features2d/features2d.hpp delete mode 100644 modules/features2d/src/bagofwords.cpp delete mode 100644 modules/features2d/src/blobdetector.cpp delete mode 100644 modules/features2d/src/brief.cpp delete mode 100644 modules/features2d/src/brisk.cpp delete mode 100644 modules/features2d/src/descriptors.cpp delete mode 100644 modules/features2d/src/detectors.cpp delete mode 100644 modules/features2d/src/draw.cpp delete mode 100644 modules/features2d/src/dynamic.cpp delete mode 100644 modules/features2d/src/evaluation.cpp delete mode 100644 modules/features2d/src/fast.cpp delete mode 100644 modules/features2d/src/fast_score.cpp delete mode 100644 modules/features2d/src/fast_score.hpp delete mode 100644 modules/features2d/src/features2d_init.cpp delete mode 100644 modules/features2d/src/freak.cpp delete mode 100644 modules/features2d/src/generated_16.i delete mode 100644 modules/features2d/src/generated_32.i delete mode 100644 modules/features2d/src/generated_64.i delete mode 100644 modules/features2d/src/keypoint.cpp delete mode 100644 modules/features2d/src/matchers.cpp delete mode 100644 modules/features2d/src/mser.cpp delete mode 100644 modules/features2d/src/orb.cpp delete mode 100644 modules/features2d/src/precomp.hpp delete mode 100644 modules/features2d/src/stardetector.cpp delete mode 100644 modules/flann/CMakeLists.txt delete mode 100644 modules/flann/include/opencv2/flann/all_indices.h delete mode 100644 modules/flann/include/opencv2/flann/allocator.h delete mode 100644 modules/flann/include/opencv2/flann/any.h delete mode 100644 modules/flann/include/opencv2/flann/autotuned_index.h delete mode 100644 modules/flann/include/opencv2/flann/composite_index.h delete mode 100644 modules/flann/include/opencv2/flann/config.h delete mode 100644 modules/flann/include/opencv2/flann/defines.h delete mode 100644 modules/flann/include/opencv2/flann/dist.h delete mode 100644 modules/flann/include/opencv2/flann/dummy.h delete mode 100644 modules/flann/include/opencv2/flann/dynamic_bitset.h delete mode 100644 modules/flann/include/opencv2/flann/flann.hpp delete mode 100644 modules/flann/include/opencv2/flann/flann_base.hpp delete mode 100644 modules/flann/include/opencv2/flann/general.h delete mode 100644 modules/flann/include/opencv2/flann/ground_truth.h delete mode 100644 modules/flann/include/opencv2/flann/hdf5.h delete mode 100644 modules/flann/include/opencv2/flann/heap.h delete mode 100644 modules/flann/include/opencv2/flann/hierarchical_clustering_index.h delete mode 100644 modules/flann/include/opencv2/flann/index_testing.h delete mode 100644 modules/flann/include/opencv2/flann/kdtree_index.h delete mode 100644 modules/flann/include/opencv2/flann/kdtree_single_index.h delete mode 100644 modules/flann/include/opencv2/flann/kmeans_index.h delete mode 100644 modules/flann/include/opencv2/flann/linear_index.h delete mode 100644 modules/flann/include/opencv2/flann/logger.h delete mode 100644 modules/flann/include/opencv2/flann/lsh_index.h delete mode 100644 modules/flann/include/opencv2/flann/lsh_table.h delete mode 100644 modules/flann/include/opencv2/flann/matrix.h delete mode 100644 modules/flann/include/opencv2/flann/miniflann.hpp delete mode 100644 modules/flann/include/opencv2/flann/nn_index.h delete mode 100644 modules/flann/include/opencv2/flann/object_factory.h delete mode 100644 modules/flann/include/opencv2/flann/params.h delete mode 100644 modules/flann/include/opencv2/flann/random.h delete mode 100644 modules/flann/include/opencv2/flann/result_set.h delete mode 100644 modules/flann/include/opencv2/flann/sampling.h delete mode 100644 modules/flann/include/opencv2/flann/saving.h delete mode 100644 modules/flann/include/opencv2/flann/simplex_downhill.h delete mode 100644 modules/flann/include/opencv2/flann/timer.h delete mode 100644 modules/flann/src/flann.cpp delete mode 100644 modules/flann/src/miniflann.cpp delete mode 100644 modules/flann/src/precomp.hpp delete mode 100644 modules/highgui/CMakeLists.txt delete mode 100644 modules/highgui/include/opencv2/highgui/cap_ios.h delete mode 100644 modules/highgui/include/opencv2/highgui/highgui.hpp delete mode 100644 modules/highgui/include/opencv2/highgui/highgui_c.h delete mode 100644 modules/highgui/include/opencv2/highgui/ios.h delete mode 100644 modules/highgui/src/bitstrm.cpp delete mode 100644 modules/highgui/src/bitstrm.hpp delete mode 100644 modules/highgui/src/cap.cpp delete mode 100644 modules/highgui/src/cap_android.cpp delete mode 100644 modules/highgui/src/cap_avfoundation.mm delete mode 100644 modules/highgui/src/cap_cmu.cpp delete mode 100644 modules/highgui/src/cap_dc1394.cpp delete mode 100644 modules/highgui/src/cap_dc1394_v2.cpp delete mode 100644 modules/highgui/src/cap_dshow.cpp delete mode 100644 modules/highgui/src/cap_ffmpeg.cpp delete mode 100644 modules/highgui/src/cap_ffmpeg_api.hpp delete mode 100644 modules/highgui/src/cap_ffmpeg_impl.hpp delete mode 100644 modules/highgui/src/cap_giganetix.cpp delete mode 100644 modules/highgui/src/cap_gstreamer.cpp delete mode 100644 modules/highgui/src/cap_images.cpp delete mode 100644 modules/highgui/src/cap_intelperc.cpp delete mode 100644 modules/highgui/src/cap_ios_abstract_camera.mm delete mode 100644 modules/highgui/src/cap_ios_photo_camera.mm delete mode 100644 modules/highgui/src/cap_ios_video_camera.mm delete mode 100644 modules/highgui/src/cap_libv4l.cpp delete mode 100644 modules/highgui/src/cap_mil.cpp delete mode 100644 modules/highgui/src/cap_msmf.cpp delete mode 100644 modules/highgui/src/cap_openni.cpp delete mode 100644 modules/highgui/src/cap_pvapi.cpp delete mode 100644 modules/highgui/src/cap_qt.cpp delete mode 100644 modules/highgui/src/cap_qtkit.mm delete mode 100644 modules/highgui/src/cap_tyzx.cpp delete mode 100644 modules/highgui/src/cap_unicap.cpp delete mode 100644 modules/highgui/src/cap_v4l.cpp delete mode 100644 modules/highgui/src/cap_vfw.cpp delete mode 100644 modules/highgui/src/cap_ximea.cpp delete mode 100644 modules/highgui/src/cap_xine.cpp delete mode 100644 modules/highgui/src/ffmpeg_codecs.hpp delete mode 100644 modules/highgui/src/files_Qt/Milky/48/1.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/10.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/100.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/101.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/102.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/103.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/104.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/105.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/106.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/107.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/108.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/109.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/11.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/110.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/111.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/112.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/113.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/114.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/115.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/116.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/117.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/118.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/119.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/12.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/120.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/121.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/122.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/123.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/124.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/125.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/126.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/127.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/128.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/129.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/13.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/130.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/131.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/14.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/15.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/16.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/17.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/18.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/19.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/2.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/20.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/21.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/22.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/23.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/24.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/25.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/26.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/27.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/28.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/29.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/3.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/30.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/31.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/32.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/33.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/34.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/35.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/36.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/37.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/38.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/39.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/4.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/40.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/41.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/42.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/43.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/44.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/45.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/46.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/47.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/48.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/49.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/5.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/50.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/51.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/52.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/53.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/54.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/55.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/56.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/57.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/58.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/59.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/6.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/60.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/61.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/62.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/63.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/64.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/65.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/66.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/67.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/68.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/69.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/7.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/70.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/71.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/72.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/73.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/74.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/75.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/76.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/77.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/78.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/79.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/8.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/80.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/81.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/82.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/83.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/84.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/85.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/86.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/87.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/88.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/89.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/9.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/90.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/91.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/92.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/93.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/94.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/95.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/96.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/97.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/98.png delete mode 100644 modules/highgui/src/files_Qt/Milky/48/99.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/1.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/10.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/100.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/101.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/102.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/103.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/104.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/105.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/106.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/107.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/108.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/109.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/11.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/110.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/111.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/112.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/113.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/114.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/115.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/116.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/117.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/118.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/119.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/12.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/120.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/121.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/122.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/123.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/124.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/125.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/126.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/127.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/128.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/129.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/13.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/130.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/131.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/14.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/15.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/16.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/17.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/18.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/19.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/2.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/20.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/21.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/22.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/23.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/24.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/25.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/26.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/27.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/28.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/29.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/3.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/30.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/31.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/32.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/33.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/34.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/35.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/36.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/37.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/38.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/39.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/4.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/40.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/41.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/42.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/43.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/44.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/45.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/46.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/47.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/48.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/49.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/5.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/50.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/51.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/52.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/53.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/54.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/55.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/56.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/57.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/58.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/59.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/6.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/60.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/61.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/62.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/63.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/64.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/65.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/66.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/67.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/68.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/69.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/7.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/70.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/71.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/72.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/73.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/74.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/75.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/76.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/77.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/78.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/79.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/8.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/80.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/81.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/82.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/83.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/84.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/85.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/86.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/87.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/88.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/89.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/9.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/90.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/91.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/92.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/93.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/94.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/95.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/96.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/97.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/98.png delete mode 100644 modules/highgui/src/files_Qt/Milky/64/99.png delete mode 100644 modules/highgui/src/files_Qt/Milky/README.txt delete mode 100644 modules/highgui/src/files_Qt/stylesheet_trackbar.qss delete mode 100644 modules/highgui/src/grfmt_base.cpp delete mode 100644 modules/highgui/src/grfmt_base.hpp delete mode 100644 modules/highgui/src/grfmt_bmp.cpp delete mode 100644 modules/highgui/src/grfmt_bmp.hpp delete mode 100644 modules/highgui/src/grfmt_exr.cpp delete mode 100644 modules/highgui/src/grfmt_exr.hpp delete mode 100644 modules/highgui/src/grfmt_imageio.cpp delete mode 100644 modules/highgui/src/grfmt_imageio.hpp delete mode 100644 modules/highgui/src/grfmt_jpeg.cpp delete mode 100644 modules/highgui/src/grfmt_jpeg.hpp delete mode 100644 modules/highgui/src/grfmt_jpeg2000.cpp delete mode 100644 modules/highgui/src/grfmt_jpeg2000.hpp delete mode 100644 modules/highgui/src/grfmt_png.cpp delete mode 100644 modules/highgui/src/grfmt_png.hpp delete mode 100644 modules/highgui/src/grfmt_pxm.cpp delete mode 100644 modules/highgui/src/grfmt_pxm.hpp delete mode 100644 modules/highgui/src/grfmt_sunras.cpp delete mode 100644 modules/highgui/src/grfmt_sunras.hpp delete mode 100644 modules/highgui/src/grfmt_tiff.cpp delete mode 100644 modules/highgui/src/grfmt_tiff.hpp delete mode 100644 modules/highgui/src/grfmts.hpp delete mode 100644 modules/highgui/src/ios_conversions.mm delete mode 100644 modules/highgui/src/loadsave.cpp delete mode 100644 modules/highgui/src/precomp.hpp delete mode 100644 modules/highgui/src/utils.cpp delete mode 100644 modules/highgui/src/utils.hpp delete mode 100644 modules/highgui/src/window.cpp delete mode 100644 modules/highgui/src/window_QT.cpp delete mode 100644 modules/highgui/src/window_QT.h delete mode 100644 modules/highgui/src/window_QT.qrc delete mode 100644 modules/highgui/src/window_carbon.cpp delete mode 100644 modules/highgui/src/window_cocoa.mm delete mode 100644 modules/highgui/src/window_gtk.cpp delete mode 100644 modules/highgui/src/window_w32.cpp delete mode 100644 modules/imgproc/CMakeLists.txt delete mode 100644 modules/imgproc/include/opencv2/imgproc/imgproc.hpp delete mode 100644 modules/imgproc/include/opencv2/imgproc/imgproc_c.h delete mode 100644 modules/imgproc/include/opencv2/imgproc/types_c.h delete mode 100644 modules/imgproc/src/_geom.h delete mode 100644 modules/imgproc/src/_list.h delete mode 100644 modules/imgproc/src/accum.cpp delete mode 100644 modules/imgproc/src/approx.cpp delete mode 100644 modules/imgproc/src/canny.cpp delete mode 100644 modules/imgproc/src/clahe.cpp delete mode 100644 modules/imgproc/src/color.cpp delete mode 100644 modules/imgproc/src/contours.cpp delete mode 100644 modules/imgproc/src/convhull.cpp delete mode 100644 modules/imgproc/src/corner.cpp delete mode 100644 modules/imgproc/src/cornersubpix.cpp delete mode 100644 modules/imgproc/src/deriv.cpp delete mode 100644 modules/imgproc/src/distransform.cpp delete mode 100644 modules/imgproc/src/emd.cpp delete mode 100644 modules/imgproc/src/featureselect.cpp delete mode 100644 modules/imgproc/src/filter.cpp delete mode 100644 modules/imgproc/src/floodfill.cpp delete mode 100644 modules/imgproc/src/gabor.cpp delete mode 100644 modules/imgproc/src/gcgraph.hpp delete mode 100644 modules/imgproc/src/generalized_hough.cpp delete mode 100644 modules/imgproc/src/geometry.cpp delete mode 100644 modules/imgproc/src/grabcut.cpp delete mode 100644 modules/imgproc/src/histogram.cpp delete mode 100644 modules/imgproc/src/hough.cpp delete mode 100644 modules/imgproc/src/imgwarp.cpp delete mode 100644 modules/imgproc/src/linefit.cpp delete mode 100644 modules/imgproc/src/matchcontours.cpp delete mode 100644 modules/imgproc/src/moments.cpp delete mode 100644 modules/imgproc/src/morph.cpp delete mode 100644 modules/imgproc/src/phasecorr.cpp delete mode 100644 modules/imgproc/src/precomp.hpp delete mode 100644 modules/imgproc/src/pyramids.cpp delete mode 100644 modules/imgproc/src/rotcalipers.cpp delete mode 100644 modules/imgproc/src/samplers.cpp delete mode 100644 modules/imgproc/src/segmentation.cpp delete mode 100644 modules/imgproc/src/shapedescr.cpp delete mode 100644 modules/imgproc/src/smooth.cpp delete mode 100644 modules/imgproc/src/subdivision2d.cpp delete mode 100644 modules/imgproc/src/sumpixels.cpp delete mode 100644 modules/imgproc/src/tables.cpp delete mode 100644 modules/imgproc/src/templmatch.cpp delete mode 100644 modules/imgproc/src/thresh.cpp delete mode 100644 modules/imgproc/src/undistort.cpp delete mode 100644 modules/imgproc/src/utils.cpp delete mode 100644 modules/ml/CMakeLists.txt delete mode 100644 modules/ml/include/opencv2/ml/ml.hpp delete mode 100644 modules/ml/src/ann_mlp.cpp delete mode 100644 modules/ml/src/boost.cpp delete mode 100644 modules/ml/src/cnn.cpp delete mode 100644 modules/ml/src/data.cpp delete mode 100644 modules/ml/src/em.cpp delete mode 100644 modules/ml/src/ertrees.cpp delete mode 100644 modules/ml/src/estimate.cpp delete mode 100644 modules/ml/src/gbt.cpp delete mode 100644 modules/ml/src/inner_functions.cpp delete mode 100644 modules/ml/src/knearest.cpp delete mode 100644 modules/ml/src/ml_init.cpp delete mode 100644 modules/ml/src/nbayes.cpp delete mode 100644 modules/ml/src/precomp.hpp delete mode 100644 modules/ml/src/rtrees.cpp delete mode 100644 modules/ml/src/svm.cpp delete mode 100644 modules/ml/src/testset.cpp delete mode 100644 modules/ml/src/tree.cpp delete mode 100644 modules/objdetect/CMakeLists.txt delete mode 100644 modules/objdetect/include/opencv2/objdetect/objdetect.hpp delete mode 100644 modules/objdetect/src/_latentsvm.h delete mode 100644 modules/objdetect/src/_lsvm_distancetransform.h delete mode 100644 modules/objdetect/src/_lsvm_error.h delete mode 100644 modules/objdetect/src/_lsvm_fft.h delete mode 100644 modules/objdetect/src/_lsvm_matching.h delete mode 100644 modules/objdetect/src/_lsvm_resizeimg.h delete mode 100644 modules/objdetect/src/_lsvm_routine.h delete mode 100644 modules/objdetect/src/_lsvm_tbbversion.h delete mode 100644 modules/objdetect/src/_lsvm_types.h delete mode 100644 modules/objdetect/src/_lsvmparser.h delete mode 100644 modules/objdetect/src/cascadedetect.cpp delete mode 100644 modules/objdetect/src/cascadedetect.hpp delete mode 100644 modules/objdetect/src/datamatrix.cpp delete mode 100644 modules/objdetect/src/distancetransform.cpp delete mode 100644 modules/objdetect/src/featurepyramid.cpp delete mode 100644 modules/objdetect/src/fft.cpp delete mode 100644 modules/objdetect/src/haar.cpp delete mode 100644 modules/objdetect/src/hog.cpp delete mode 100644 modules/objdetect/src/latentsvm.cpp delete mode 100644 modules/objdetect/src/latentsvmdetector.cpp delete mode 100644 modules/objdetect/src/linemod.cpp delete mode 100644 modules/objdetect/src/lsvmparser.cpp delete mode 100644 modules/objdetect/src/lsvmtbbversion.cpp delete mode 100644 modules/objdetect/src/matching.cpp delete mode 100644 modules/objdetect/src/normal_lut.i delete mode 100644 modules/objdetect/src/objdetect_init.cpp delete mode 100644 modules/objdetect/src/precomp.hpp delete mode 100644 modules/objdetect/src/resizeimg.cpp delete mode 100644 modules/objdetect/src/routine.cpp delete mode 100644 modules/photo/CMakeLists.txt delete mode 100644 modules/photo/include/opencv2/photo/photo.hpp delete mode 100644 modules/photo/include/opencv2/photo/photo_c.h delete mode 100644 modules/photo/src/arrays.hpp delete mode 100644 modules/photo/src/denoising.cpp delete mode 100644 modules/photo/src/fast_nlmeans_denoising_invoker.hpp delete mode 100644 modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp delete mode 100644 modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp delete mode 100644 modules/photo/src/inpaint.cpp delete mode 100644 modules/photo/src/precomp.hpp delete mode 100644 modules/refman.rst.in delete mode 100644 modules/video/CMakeLists.txt delete mode 100644 modules/video/include/opencv2/video/background_segm.hpp delete mode 100644 modules/video/include/opencv2/video/tracking.hpp delete mode 100644 modules/video/include/opencv2/video/video.hpp delete mode 100644 modules/video/src/bgfg_gaussmix.cpp delete mode 100644 modules/video/src/bgfg_gaussmix2.cpp delete mode 100644 modules/video/src/bgfg_gmg.cpp delete mode 100644 modules/video/src/camshift.cpp delete mode 100644 modules/video/src/kalman.cpp delete mode 100644 modules/video/src/lkpyramid.cpp delete mode 100644 modules/video/src/lkpyramid.hpp delete mode 100644 modules/video/src/motempl.cpp delete mode 100644 modules/video/src/optflowgf.cpp delete mode 100644 modules/video/src/precomp.hpp delete mode 100644 modules/video/src/simpleflow.cpp delete mode 100644 modules/video/src/simpleflow.hpp delete mode 100644 modules/video/src/tvl1flow.cpp delete mode 100644 modules/video/src/video_init.cpp delete mode 100644 opencv.manifest delete mode 100644 packaging/opencv.spec delete mode 100644 platforms/linux/arm-gnueabi.toolchain.cmake delete mode 100644 platforms/readme.txt delete mode 100755 platforms/scripts/ABI_compat_generator.py delete mode 100644 platforms/scripts/camera_build.conf delete mode 100755 platforms/scripts/cmake_android_all_cameras.py delete mode 100755 platforms/scripts/cmake_android_arm.sh delete mode 100755 platforms/scripts/cmake_android_mips.sh delete mode 100755 platforms/scripts/cmake_android_service.sh delete mode 100755 platforms/scripts/cmake_android_x86.sh delete mode 100755 platforms/scripts/cmake_arm_gnueabi_hardfp.sh delete mode 100755 platforms/scripts/cmake_arm_gnueabi_softfp.sh delete mode 100755 platforms/scripts/cmake_carma.sh delete mode 100644 platforms/scripts/cmake_winrt.cmd diff --git a/3rdparty/ffmpeg/LICENSE.LGPL-2.1+ b/3rdparty/ffmpeg/LICENSE.LGPL-2.1+ deleted file mode 100644 index e018837..0000000 --- a/3rdparty/ffmpeg/LICENSE.LGPL-2.1+ +++ /dev/null @@ -1,520 +0,0 @@ - Copyright (C) 2001 Fabrice Bellard - - FFmpeg 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. - - FFmpeg 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 FFmpeg; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -================================================================================== - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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/3rdparty/ffmpeg/ffmpeg_version.cmake b/3rdparty/ffmpeg/ffmpeg_version.cmake deleted file mode 100644 index a3c78b2..0000000 --- a/3rdparty/ffmpeg/ffmpeg_version.cmake +++ /dev/null @@ -1,11 +0,0 @@ -set(HAVE_FFMPEG 1) -set(HAVE_FFMPEG_CODEC 1) -set(HAVE_FFMPEG_FORMAT 1) -set(HAVE_FFMPEG_UTIL 1) -set(HAVE_FFMPEG_SWSCALE 1) -set(HAVE_GENTOO_FFMPEG 1) - -set(ALIASOF_libavcodec_VERSION 55.18.102) -set(ALIASOF_libavformat_VERSION 55.12.100) -set(ALIASOF_libavutil_VERSION 52.38.100) -set(ALIASOF_libswscale_VERSION 2.3.100) diff --git a/3rdparty/ffmpeg/ffopencv.c b/3rdparty/ffmpeg/ffopencv.c deleted file mode 100644 index b412e90..0000000 --- a/3rdparty/ffmpeg/ffopencv.c +++ /dev/null @@ -1 +0,0 @@ -#include "cap_ffmpeg_impl.hpp" diff --git a/3rdparty/ffmpeg/make.bat b/3rdparty/ffmpeg/make.bat deleted file mode 100644 index cf84193..0000000 --- a/3rdparty/ffmpeg/make.bat +++ /dev/null @@ -1,2 +0,0 @@ -set path=c:\dev\msys32\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lws2_32 -set path=c:\dev\msys64\bin;%path% & gcc -m64 -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lws2_32 \ No newline at end of file diff --git a/3rdparty/ffmpeg/opencv_ffmpeg.dll b/3rdparty/ffmpeg/opencv_ffmpeg.dll deleted file mode 100644 index b1e70df6a3e0059530f13800ae675820081388dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10535057 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 z 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
  • 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

    neN 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�gJq%{ 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ΝlW)Z|rY`5NBRgeF_pZKB>4t0GGVaTbbT? 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⁡lBoCe)(xhHE+#?!u54|f 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–NeIeg$y74Dl*sQ*38^A7w1yoBkLr`;o?g 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

    4pBK?|TzacWRq~xdbiOk8i_%*S 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%0AV2tVD;XrKLBbGrPT$!wpWdOxWVVQHgh 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 a(R81$gPjM%|+ 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ଡ଼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 z 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

      H3 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�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%0DAX|b5q>?J?jNW0gE{A}`mras*V z^+QZWfGrnaN|<{|88vcz#6aGxd-uQ|3oyGr=KeMczZ_-%C#Ci8(PFpvmJGe~egdY8 zuxFR18ut_M2}l2x;g*R6ZUDfO)hsuD*@-1LW5@_kQqnVj2U*%vbd~fh2FaeurUGjO z81$AY@65bnW8~Ev#MVa3#z!H7s|Zlp*|vMk@Zb2`yzrj`ur&O=ymqkvY!2*G*89|b zXMNJQ&k~KC`ljzZUi$Xy$5Q+E@_-WnO7I7Xp1mJCeftbB$V1;g_)QOarH)NUV(${$ z4^iL#4-m@(|4>i-y}Wj?KQ{;V9)08et~u{(ZG%0D@y-?go>i0F)7!`US}#EhVk~H! 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

        %Um5R_@RrI?uYrA39R9C8tYl+ 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 B(-Miy$95F+4~yQ5di;gn!@^4Si{-K9tJnJHmME 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
        e?x#*6qICSG37B zV_bK_HNWlJ4=8y!p}wsdGhXmjfv?O}TPgRbCURo$&Kmn<*4R6<#?qQB<=&As_Hhq@ z1j7wfUTl-&QZbs)9=9*_+WYwGclVd~*!?G5Pz~_ytSDk}dw{q&RYUd3+&cN?2 z)XJ(HW*p4~7h?K48&K6`j30L2SYX_Lkm7hW8tX4GHs2Ko|8Fd?>7Xm_tBSiDnn=^f z4m5p4az1*LL9M^mZBVz4&N8Ci@;}K&6Rm%EVTN^Kg3y8?I~}A>$beaegMt+?hIdxuHxI!tqtSk@D*2U)^D;bSw>-kCKm3kYO?iR`K6-kmkA zS6(e;@I~_Z)tNu~tjntCPAy;PjanG_tNTta)sV|~dm|T$I{+s(>3%Id{lP-h$j3H# zxn3qzJNbSF?p@UZFK$*$E5A($`EL?tf7C0w5%P&^Zkgrw;6y{mxfX0^%`p1|ck2N+ zeDve&28i*$lXt=ua>Bf7mjc^uCaHQy#cNT~I9fA=PuLa5WYbur86qW}W{9FYQkP?a z{%3&uJ7qrTb02@HdmsOL|NA(FyD$1P`t=`vCi*ptKCkcO?>BGyy|(LheZ3#lUyk*4 zlV4YVsC6}iCi3vW8r!e0wVpOU%|{MH+OnE`FS&rozN{``d^P5=oy2&l+O6SZtL+lx zsKz|TOKKdW$t17TIG;UJzUqs9Bb78S66d|Hr+dJ8pVrgYE}s2;!rk#ZAo}X8>*(H? zP``JyBz(+Y|8wkdp){;>3z)PQX!i|WAxj)IlWd>zUbU@IvPUZy_MLaFdt5VL&;h>V z+F9prinNgLNWO?2c4d3rGY9cgVk=?WSF1WX20@}wg2eo{Iv6+z1|ukXghSw%zoQd} zDZo%jMMygzVw1o|E4MDjM{8u5L=vA6YaGr7*W<^!(%w5jSJ z^rHO%Ib%_ASR)~iZ)bF&B4T(ldbNHy7OfxHP{4V?hpud=d*+NS9oDt5&%yQ! z(4LkA%?9FqDXPv&iL*;G$Lc zs*(cq&FUglKamG6793R_H}ZHJrIfT&u>>z?rJ;IzaRs@kdiJ4v!vE0byo zL205Cs-#R&s;t@FiiFiTQVS82q~4YaYA27zktQK&A(9fOg-9L%rpB4XWvZ$H*H=XI z2=)_wrn&EBr8(1C1vIzgO3_@3=;&VlLO^F_eWA1IS?R1#GGPz2#T~Yg5fI&IG=yU} z=;x}@PBwcfOxJMwQzzHT*!a9QweY-KvL<&kp=swaa<@?7`5+>9^RhL0HLcgp*`3S3 z6?d;FUQtrGqGTG2<{s~_rEJ|bnIi*7IdZ`jAs%W}&ucTMoi9CBif`ij(7JKItJvx) z_G5-8qsG}=-R%8tNl~F&GIAQgd?CKhT(zY8L&rWEi8t~;*5~>{>&Bky+T?8vBl|-6 zv#0RbgEBFc$0xO^##Mgp943UF)dl#spHYZ2tC`byJT;WZyy^PX$ltsC9pJCcb?k5* zdtAr+u7hi%Y2{9{-b`3qcdNOxkN6gsOrzC9-ICGMGw!FPv5|j$b=+jbF7k0ju7J>n zhjeKhTssr&uE=O?0~!{GQ&;{dxrCBSrg!t#ulD7;iW{Y#lWLBw@^%z;2-)q}G*T)% z?%UaijV5R9xQDea$z!sl_9eLb_rF7fUz*T$zikHmL48f85!{9-v9-|jiF?iXiuw=+ zy4Sa4Bn?qLY))BSLRB6O>hdq<`^)-e68%y(N&PaFekq$uzs#wTg#vcNvd*5%3oXaw z;EdH@1su&7)FotSDFE2t2uuuCyXIzBcFrxCKx20R!~}q_UjQhW&i&}=?X&u^DX+*e z^kK}&Jrh{2(s-6wrc&jeVq&HirbU6U*onB;VhrSFz-tRqid_*bw39yGyW=-D1-Wnruwv3F z59}bc>O?U`j8YL)8+%G1s?_b2ii#OxerkGp6e?_P#eKun&w-t7lhcjZd0^G38my*K zccJ&0*Bzc=z%xwn3@bY`%gx!20W|acTr3u;catIVhDM=jQK*no1N*i9z&GAC-IM~? zc(-;)3OwW8cAdiS9~@c6L(lk$>R;PZ9@f3K<@t-Lx99fL9i!Z^$wG212s7L_3HLSN zHsOXr_36=c<}{_=K(tiWRlAgWlN$!*6KztkqIWAA?3gdsI`tGebm@K7nF1b7dGy=p zLLLQllyz`2D(#R`@zyw6-D$P#RB@Eh2wO=x58kam)7vxN)sQc0hh9_Q$1axF2ySE> z688z-@h(BqE*KGQc=xa^WloRmC3}Q#ZOil?U{e~|02 zEC8(mc~hsK;b}N2-%NnoZi&9eJTDmeqjpPV69zjcg`hn*ZeO&07re%Z<4 z&cSwoLf7upafV`*?1KyWo5tTz{xt3~+6!gmxMB3Qjo)3Of}QGT2xJ@7v^U-R8CmbJ#01cdRgU7~9i z!YzAg0tD~LS)v^zF%rld^8|FtDit=xB-Bmb3CdUZ4x$nCaYw()Ot**4(!Z0KTjxxo ze`8bW-#H9miEwt#u3$O?dMMh&x(+FSTk72WM5ivNx1(OJ|SAW=fB50n2WqM5J@LFG9B7eAc-iYp;C~h(}{|u_+Rp)tZ#P`j-RdW48 zaVkGJ*0;UOzbs7-&QHnjq#S-u&Zk8~-25h7kl`79GiT&1BDuPH!j$TBZl zFmrMzhwXkabDaHrRZotN{b0rreS6e@d&vKM(>`+8E<9%!9J2E#?A9_wIQ&(I)%;GZ z=bO=Z7jUpl&M)HylL-J&ykH!GaSD8$z}E?saMtdrAqqT7;86u0BJhv`-z4zO{FH-R zp}lL@`pwRZ?bi_CZ!&17mCsfSF*$f5Tq%GdwMqt_uQKmug&xu4Ha%9#Of}q}?mEv{$}YPvGDg;uw=dOF z^;X7nXFYIi0`AUwkRVsb3x&^)I^HI&(Qz&Y8(*Q_YVa26WGdVkO$WWgPY{{zhcQ74g;E9K>H(kq|V*Ir{lBS5nRn5ISSTv z6K&hES?WLc7l^HuzsCx4Pgf)kWX2gSDs@&02p_ zu>z0dF8Of<_`^wyiw|<~&+DC|B9rb^fK8rBPb$Ds(@8hwhZ~%Je(Y8s(56%fh#K^= zSf(mHpz}DiNBMd@smD#(=qZH1lnE!6Q*&@g&7oUPBXLA>X*4CREy$;iwKEEbu#uxy zf)n~ZT0I1_poUgw=v=F_hD0_WiVm++2dO(&37m9T^C&J2SiSyvWH;Td{ps-59%E9o z=?w_4CY&kbC*-$axLE${bs+6K)f2t~ZYMnsh0U2%%ro|=f>X!woGTKX@m0OgxLcoQ zeplg{59u2$<~emsU%TjZ{k=-w!u)zp^RWcTcLvb``;j2mGSpBZCJ8RsF0leRGOaJg zyL#?Vo!3);=Jn8@nLU^fdLbR%_N8G-4 z@By`Cod4}dXJ;LceIH@!kKXI=0hyOnuV-xGe4SZ8t)F-lb~NQ)yW@S%qATvdf$6vGA5N zN$WO4P13MC~&|ywV4e?#N%0w*k^L z9UTYWG<{h5AvOamOKhF8(c8BCYpo+jtY5JoQmQ9-$lDfY$tYcd7&EFQO>$p26JQi+ z_vYA8piS|DKPO!y#iS^ycX)>4`XcQe{HMKx^R##Hoc0cG{d)#Z$7*v^`kM=k59SYM+=Hgz$~G=) z_i9Ykg*aqxZW`p3c3E+!@1lPtX|#kPzL?sDfeX-cTHB!EwD*C+)g*A$MSofCfBl@s zp?M~&ITLxrrfOE3W7D1&4<#7R`I0`(9HQXNukwtf!%31DV;UvQVj0sN>!+#?k%;t5 zt(!=bJ^{V~3y{9iIMgw4xHEM|EbfWRP40y5ZB;-PxRK{nyC{bWv#=%vQHwP#wavw1 zL>~gzo^Bo2PH_#APjR9WANyU>i4hr7Gi^Dwc!HNrX^-C^-X6b&3?*Bc-{~bEf^Cmw zBJX+_jS;;I=p{q?b{^>R_CGck#zi)Ziwt~U2keXf9q-zxxUYTcnO#>uroGd5Y466E zgx4TFeU$c{eo1?$FZ_Gd2cdq02_WMZV+?MWb$q39$sWd) ziWbW&2gkKF#!%ClUAHllhL7S99|8V8n)rpd`oQ0Gw_&t{65}!}iD~dXFQy$LAfaom zNAx_@8ZatAzr*Dn`dd z#8azO%>QEVUEt%Yu0wAfX(SD1;xmv52r?IR(`llybW@qAK{gX2uo8r$*lG|#7?n7w zuVPycl8p?;actAUH#&%8+%#X4Hfc(G?`__X-z^nQp|OQ+%p*JuAz&OE2sLPs-^P|@ zW9j>^z0Vn)nK>iLwn(_&7k*eXv-etSul-tkt+m(QJFO<3LM~`~10_p>cQW^7)muWE zQS<@K6#gis5QRqB);iAzj~S2`kJ*qHPv(?T@l;vv)+IK(h^{>GVUsmqXaV}uE3YP_ z?`E1u=rifBndSi1JG(xbX>NzcXus$!(b2we^WFA$^W8Rg^WAoK^M4oZ>y<~eL(aTF z@SG5bh-e1+=EIiP7SW#a*VC3;w`Y&_t&g!isRS7X?e>guxBf_QHO}1nBf*{Dx_!^E z{j&9WI$jhgak7ni5jqwG54t`J*Owp)*5W?EwHHA=2OW+VL3{>_(PF;zFlmpv^Fu{c z(1ea-6a`gn(IHrz{VfN02aTy=I6~I>*#8p1W|D9{sLiWqK+skliF;uc+4FfO^qOh> zE5~NpI>etRhxzk7ilcUpO3>(<$P_R{K*^$hf-!!p>>w+{4@F5HVAXM@J80_x5g(^S zfT;~*%Hb#hf1*hKHC1UZbB_KFok?#$?s;SM|Nh&JkP{KbwAD=WH%g<}OCx5rOL_x+ zEmldceKWc3Be4pP1i4){~@$GWI%WuVF({?(b&0dfx-3HC^jj zZ(TG7!}N&S9BpjiVq`G?lN(Bd?vq?DzS_G{7n|N9*Q&Dr!&JLIz5h~2$#w7|+l-1m z=*lR&{(ua6&SsWS6z|~m&X&?+^5rqug4H#3!e5BN12xUxV_yC|{%va;H)OKi zdWsF9Q!sQ2hTMn&c3+1dw(Dh=wak2=CMb8AJ`gsZGarZqjbFbbzgj;MHgDl=tv($1 z#j+pcyz5zNuDOO*x`y_-MtaX=7s@1|-Xx{oEVC1HKegsX?ZC&sH@d$n_0#=F?MAl^ z7@ETm(|occ_Zz*}Sx20rr9v_! zDObKW$XCzo$++J)9p7wiOZFH3F2`T6Z-9$!H=p6ybM3d^FaHd$&FPMqz^HQj*V(mo z1`44;vPKeAYybO=OGlmusw&=Zac92Z ztlQUhk%Iiv`2_`5>eJg#_3bIKe_XIsfjU4!xTi5zV?7m5bzPVog78-Wzjpgj->W6I zwdq!Xx2uixtSH=f?q`yR!wb4XcVE<9W;`>}7>g}GroS88=PWTu-`vVc-aFl?{|2~L7uz((0Ckie!?05W`}{ya!Nev{*p4B@$V+R zL*pOvci)J_rT>HJ{?ADB_J2mk9nf3PpIGy@)lvtI|7;qV29Jn0p%a$jU%>+b__I`zNADW5UmGQc=+IoOvkS9oyezpg+If$`>l{F%F>!S0t) zKIbk!k}E03RCncm?ooUgE}Xmkz-iLR#D_*;?(%_gX^fulbnqRs5y3Tg`QCBSJ@PLH z9~Odhm-mlH!+oD42cN-n*7)!cn!8;5S`%&m(fW(!cvk#_Px;}qDPJbg+2X@PWbX1; z#%lxGzqMjS25@WjuiX)pC*FVA_=g2wwFMpWa&ApRuCG=;efU3!b4nWF zO!?n0_--SdLHT zKg-`7+$s*pu5--}brg);;NaGPB%RX}J&$`2k`D(4x5{k>UFWuu(x#FM2e%R}2+ZBl z^STAbu%0ifk45oglrR7K@1U&4SX9cJv;42o{JvDl&)-3z6gYSJH^dv2TCs0rL_MZk zN#fnnitd*^;k>HH|tKUlQ=i@8q(qz@iM+#@`Uv+fu^2ZhW0?_R_#}#tsC=LXZ zso;#%SB@t8_~<$}NyMEMny!Tao5|K^$oum3kARb;U1|H(o)TmO$HCq6LE!l)mNYfTkzS$SUnhcCeC z`9CxXbwepnYI23tm5%@_*)s5neq0 z&-{RX{!it921VRjy6n-~yX~Kqm)rhX0H@RbZvD+${!ID6G!N$LCXXM?t$!Yv-1_GM z^sD~|-SJQP%7rz`fcOENalk#gdY0sa5*~J9iTttlLDQhZgD*klCSv~y`}6-R{;$t( z;t~Od&)ns2<{I5uUXXOWlv95(n_PTa91qgO{TI@HUVQBVJ3D-Mzyl_4PiHZn`Lj*@ z2RY>{57=3hpZ0*AdHLD{c6RtO^5-t!o!bWIdK@UO|HSe6_-yuMwpdnsru{Eo*VXUK z|K$uo<@|Xgx7wK%aqi=B>+czWqt2g+wSU_3PnYjHf6f#?!}+r-wCPW!h0nH6Q8q2_{e;VM zqy9E?{u}ao{lWw0u2;-msp*@HUvFSg0n}Wgpz^`SP-VQV%J{9hYrx#~h`H-2bJrGg*ONq5g1sGV zdF2gkoP*}NFEfgJY9xLxklYeXzu%tR8=`VSYnv5~SzQ^mY>kC2?gt;QZcnLq7S61G z9nn&$<89BHZ!_%%%z?e;0d5!lEmu<-=5eNZRjEOvo=N2u={}eA6Y{?30d7uxm}@H` z{U|ZekWLQJGFM5 zI3hS_vs_=xt;Q62E9D*MaZ2u4yNb@dmcHcvrwJm}1&tlXi^(^Q@Rb0<$TJWo}4 z_<$nneSuifWGtVm64diP9h;1WuW? zgq~UwE4Nw^K&`Qub=W#?rD(POjf_S6vq65e#>(t#g5(Ck49cPdMmV`8lKPgwKsYV0 zgpS4V= z21Uv%PYt}CRo-dT=iZ_5>(eeUlTe>osBIIe&-;PPC@;OpvFUM=YeDeOnyz<^rsxlVW@ftgy zy!S6fX{_@Uo=7azcX9@SFt)oSskibQOa2@YFItQ z%&3KXIjWQJUvHj!sjvWu1Q4=9)q)`_Rt*%S#j2qgO>U`5{Sdee`Fw`u{l%@Pq&>$i z?+V~1qrBICGqL(T2;5|pcipaul~)PeWR!R0*Apx63E(E9yua8nvGT3}ZZgU%nqYhG zoTUEyqZcPuzmqRaPW@h+V0%6|N$ojng7f|TlQiEqPq4giO;UM(@vDjT-xa`3#`xSk z!TI;CNt%Dj3AX1=neF-6>ymrLstJo7(SP%Wp@Q!j=3Q^#S=m<9)Y!Uo+pIwK*Kgz_ zSp7};2!&UXm|P2h%1+9$*}C;)CA;}n{WbY^58n#@TEOczd`f84m;a6YYS{D*`DncF z%R*xlKq@=Ag>Tgx1oKh8J@Z%c?U#JJPpHibA5=6Vor+>v=l>&#(fjTY8XJI8*~zc- zZLKYs-;{6n%C~RJw;lm+YEm?s*9!NuT7IV3Xy)UrP}KrxF27mx(kbAImsiv`;U&Dx<>eL4OVf80FJapEd*QB2 zz7I^@@(Z^W6}*RPs*YFRX4N&3klYfu>E_MbRO^>ZbEsNvTHd;J;9=!=(^(tRg*1_s zD#P}6_Moo6K}KNA+}KiRZfu&m=*UIq78ERc{7(s0U9?mEefEvFMn;T7RwItwjSW+{ z!(d}m$)cfaOMp1M@Era=rv5(r0G6pSjE)jEH+BY$?ZAZ=?eCfb#EIqre~+oZ&)#zs zxC7`k5p!d$aoFM-Wk7>=&4uw7#BE*4&D(vipWFAwxpvjX@t2Ip<4-Pn_Frj+Mf>D$ z^3An12QXeQQA=BM3&DCH|f=T+Zbo1x_Jndgjw?EehY;5XWbV#-TORD7`8*P8P z^^yQuA3f00WXp>M8=I>8@NyLO4HYdq>FJA|qkUm_T^?|Hqug$OFE}mp!3h`johWkp z<)o)yc1pk4t3C$Y!n(eZBBz7wu1f-a!$o%VPvQsq-VlF?c!5KGuLUciWmlQ;=be7p zw^sK=nRN5|$uV9AD@t>Eda4K-_Cp^lC|CVc);BV>%@Q3qU<}$nQptU%rh-;Z z^Mxf{da<$hDj#-+r{1|uDA4%jcFno*C+zz#li%^@q;u$ivO71+ZvgvFPQCMC z^_>eY|XXRL<@U+Oz?>Gunm*UJm7hr2H@dp~QK8)tDAJSUHg z-p?}GXK_$EH?xq;A~HEWoSRuhCc|SE0ZzG@0Wyops#TQ>(+OgZ?0S4D&JhUz906@)%C3&r@oi@;=27?wBeduC8z0IQ6~S7uT(Cy>G5t-%tAHy7g`F&2{TL+c(#( zZ=-LnTi-dpxw^hh@u3lZO)#xrUK zvL5a#9emMxm=&q}LbLY7V|Dtut`ma7&|J5h!zxrhTSD&o^>XY?feX{=Z$>N{AV6ybH?B}E^Z6J`FEX`k% zn=B0<%uSXipOTv_jUCEOmS&!sn=C6I7pqrutEBggL>9VGm`J~Hg zez8xwtm9FibXmbK@ky5&lpDu$b3{w|KyI?CK+GpyD)2#{bg4jvPr6iKnoqh^pvos* zD)3>Sbg4jfz6xCCgCH7KjZeB%;G;h2Qh{2Zbg95hpLD4}!Y5rS;4@H^_EeXz0$2MG zk_y!Oq)P=p>60!MXz)pw3e5INmkKocq)P?n_@qk@H07(nXM7N(0?j_@Qi0F#K1t#VS;BG#3g4EM8c%T0#)Su1jr;eFQ1++ z8$zu82Mt8E%-_bMrA z9OHm-C_Y@&8Vee!qG-%cOfg=z6L(mNnDs*ZX-x6NO28%l?dAAO@j>I+_|s4c#Shzw zFGD^+R;YdGm|gStQm}Ev*a=QekGT<#PJ{Rg!XQ3v><|a1U3E&>vlCCMkI?1u!Je9! zF@W18Y&?aFq0Oqs2^utZtM8qK{0JHQ^^XAFA-=_506K&lAXpiS;iKp~Rn&J~2c zZr}ze!83y|X5kbGKyR}erY1Lq30&m@zI7=!0&ya=PTzz(VFAP!-~(6yXAA6Ar^HD# zU-%_&zH!VrOdQ*SzSjzqTf_L4BuS zq>KX~)x?L>eN3x(JDD!`^fA;_C&QjZ)6}-7j#2J4qaA&eQtOSKcBqFIoKK0f$p54@ zY`h%b-S-CWA~XIpEVuT(UL<}iJNn`HezUjAAT3nX7z^|bp*7y~p1RtlOQm7D8;c9b zs!$*dR;+w)eua}CaYzJ>Lzw^(2Ouf{cIZNK<1h4$lvXmJJmp0DhD$4>F$IjbukR#< zP_o(k^%;s2+MC*jyPG8~f`0n-%TziSD|SZ|?&oNHq zfJ&(9e#2b%6B=B#wsp*j_tNrl0W&Ga_*%hWT|vvQVDzpS+(BvssWD?GW3-xK%WPR8 zGqUgXLPlkU@fZ-b4A&U>bqcD9lzPE|Qa$sprV?s>uND?T(AZhD1bil{Lg|V%LaUkI ztxV_^NX&N-V~FZV5MkK&YEfLc5b3eP?7fV9ktsMs5;GxAx7SP|P3VM3nCqtFz}5kGhZ>GC9Oizi(|+ZsqOC%p{*pjS1`4q5RO8L{|KvX41Q zZ(C}>sSrtHi2O>xTzlH6` zhV1Cgd>f7*Np7xF0w+DCm&sH$vQaNnm_=z!C}m>GEMF#*w=f%ZnW1n4E-s|9P$_Yl zOy{B;)Ixa%abKc zq>7$S+J59yEl)rXQT^~Ph!jK)|KL$3nqf&{2RvJ`0q=5!Tvq)G`Hkr)-^ zHz*;~0#c(OG29!G1GSZ!xX2kzA5rroRS=MM3bzYMvkFOr-hvdE53Pj`g$kri)GKYO zdo-@uJ5yG1zz`}`(?FNw8Vv}Y%N#*ci=dfFS_@2+i!c&6;1M_os47uRT9w>EJ^?mg zk(kz@^Zi)af93F*wLpFqGk&^|B(V#GnL5F*)VNUOwccGb7+svl~Us+izF zNfnk5{9K%#5bE$v!eo_YSACz7mc#->>^^C%Mxl@g>sneUkck-@iofh&2I7O@A%#@k z9+0~AtculHhq^-|5<_;^mkRn`XWP-T6F)bG+tEjcDr;hP&Fz4NniCHeQLu>k875NJ?)A>8b zj&`D$hbo1G(5Lu7Ue_rlORoqaM>Iy64G*#Rl-#mJiN>r0iD~^NEgx61O?5F#d13p= zQ2Wkl#>-4cG?SZPH9lZRKWFx?EQ+6WSxgJZnF0n{kp~Su#fuimMia@nl7I6=y$N^_ z(ObNT#W{!|tQ2W1>Q1o-5k1C>SdxPX!b*|FqW+Y45YcPAh^0A*AgmNgEb36H2N6BT zix|v71YxC!VNs8Q9>mg2#B*{GL0Bm=n6b0?91mhJ6LE?XgjpTZ;%Zn`t{@!MXNe#1 zlZRSR^=QeZ*&?52H-1dyUs!}30;E!;RN@XLFtQ{e`VJW3 zY3-PbL&hl{x(7Zjohsrl=gKDFg90B`@V5!PE0YqHiI@+@X+ zw<52^=#OLyiDVYGw@2D-koEu0y)lDJzT};`yJ89XifTFdq8+%}{yN44zlkZan`6z& zzFUD@=|m_k9I=M1lVZUg@!f5fsEwVX!*b>u&&8EB(ok$CHn!39 z5RJyn-a}F>KAb1pED-}MO6(;+E@-QygRPUg7$HFsyV|V9=u8WF4c=<248^3Fh~jY} zu9ev^*ih=0YCLT`$?tPqS`jHTK4|tH;cr`9%EAq^cq+H$73sFRg0?Z&?Lmz6+#jo@ zv6ywzhCN@`zwS{V#xZmh$z>u|IIV1qp!_I|Z!3(x-%5;1Rs3;gR2aBg<5-cV#g9g) z3)#Lsg?+CSGT*BEUMr%@YLFH}BYwo;N5X(`1j#ASgfYV3Ci|h-T{I}b4R(F33*35I zK+d?aq_ivT2**q7K+pX`kN9Z2LxWZ@2!=u zIv_lPwHYEAU)jQgj&&Q4pOkkOS}W_Qzv5q96nas-n4v0GTiiGavfTWtfH(=+AI;Lf<7h@(E z;#(rUL2$5kY6M3lV}0N2;C!TxX46EMIM(|Ja+&w!nBDF#~ni;g0VVj!ljsE^f|>&h9F zcW#jhtTY=HKbNb|Ok)XUI@c<%L|&JT-FhiND~#P4c>S1Vz9B)eau2rM*FUojgt{C4wgUjnX>CcK0|arGf&uuj5B4 zCYhcwmpNBG`Eyr2aqsul_S! z>^JZ#Ft5t3)>xB*5(7(I3FT0d6CGj)tkV9URm%Uf3Vn+*Wp%$KIMR0!Ell>l{c$;6(#Mm8pbqK zirVc%$b;@s85qi=L~~c`I^=ql?8b9dF>)A3giciC)2Osb(B`!nj$FI(B8A{_GZivo zlUo+LZl<)nAuQYq#WrYR!q)3Rsh1g27 zaX@7eDO5y?)2u+$k4iwOh{c6qnT>ItMFoEButVF}`C!k$hQzi#xPc5WX|`^F&2zNfT#Sj4}$ z$+UNFKcpfO@(9U_Cm9a+zTSGG=P+Rdn5||0pm{wqt`2Rib6% zmI5%!*MMttD&HBSvEErIs+n)0GP_YZG^?4fYN1e0IO9-zSFB;E5-#n~96mx>(_XI{ z723qCz{IRn)3r-a*ZV)n*mmzL5dB3xLzi9;#Gl4`Ap3mP;>CGvn(;J(1A|bcMm%MQ z=88{Bmhz0nU@G#vQ!VGr89{)Ca;`Z93Nr}={0X=#fw}8MqorJsWrd@(*TSp)DnS#@MmGJn%Pc~ z({R*rbSWVVKuF|TPgP93VyqYmE=JrWI#-sI$RDl z*E+&nklLZfp6RW~-ZEGAD%;+X-Vu@BvN2WT5R|Hgk2NePEK9Iap*d*CLI?jP+R;( zaU8BBLJHW;#v?cet&_?rC3Z zKEmK4I0;n>?mEIN5J=JkL|G6e#kPRlpm4uR>icb>sBp^X*NhWVb<`5f{U2%kW^n@) zIef*3-RX){sJ0#P){G0QnTU@rv|NOV99uRwUTkh$TxV`vhU0Ig_zmz6&TF#7AGmlv zkR&e?w;^uAc_M~z3jSa%B9kP}L;juPDin*Ilv>8Q<04#qP<&w+ml7f5aT6k>M!jZs z>wht5Dya(7q|9j?rfD4QqzvaDG|QkFc3p@e$A9QYMOx9FY$EXLgoe<92pW>(SqxW3 zX?g9kL?mVLg0Ae6kj?G}AtC5J#HQu=8nH24Ut39Pc|DJq zC$8tw8ctc6ls%ys31j5wuJgXF_ZB1h<4B3=OpRRa1jDj*?_NeqJ; zmjua)N+|O$I$DczZ)+$*HJS(H905aga#Rt(Psx-<>;(B&EBIYk>P=p?KY}k+m?&4c zD2=$#8_jiJL-gFaMZ}3$ZFKH;loP0;!v|8I+Qs<-2Bu^G<>a^T7(2i6w`1oI>>fM+ z%P)BxG8nDf4<##v7rh4S1BX8H_R_NksoEU25I&(q=anVMXVj_<}vOa8{7%c+&i{| zJI5@3zahT^yO_lV)(*Kx%>{hQ1%zfK>w>c6mT>APl7GKf-=9$V54@0B{&(fKU-|1@ zz&z#OBKfCZ{)Mk(mR~Br{mS3}vICf>{HG-U^vl2fH<{&sQGWZCKgR{kQ~rk~|MbgO z?d|FRZ{%zL)#J4P&1csBU(IU&+w-;m%`RY``d=yeS@jqBEH~-NZ9^duJ1kNWJoziK4kUF*dGx2FgM6_uszU8}s`O264(=Y!98PlHjzeaxhmH%NE zFi-hYCI9rx-{v-}v%Wo$ul>K{0_G`y^_jK*H3u^5f4ThjtN$e~V4m`aecJyt_tW{(QglH*6^&PFQBaBU@4Ll&fj zbipvbSsj8eyQlcHGpJn*ud>C8LT*tO5Rohh+1Zw}KM~?JG|RH1T9ySh69)|87}e&w zzrqV}=N1|7o^7n$_5W?AP*-~WpV0d94Z-oq*RRTNKlyTt3z$c~%#nPb`5V#mH^TgN z{5>&u{;Dht92^JrW6xi&o=q(Cx3q80_KrF>m}bu{)DysNg#hz zJgN-PMmAYOX)&ZAWTN#h#MdPeXVuo5X796Y61!?Xz@#R;(oTHKPCO`+yC)iJi*L6c zC)RVgE&jM2x=q@W4S*FRarGDHHhFlc-z#L^bZkaM*bc%@t(PDsLZYlK{+#s^bCY<| z6Ef^&=UnYs8wb>JU=AFcy-m)pZkx3l-cG=kHH<5^O&l@!sI6h5VdPjWki|^NXq%jB zy~*r-9Kv|tI2F=UC6flhruJ7>TTcl(v9Z=y0v3_AD-00}g2wJ~;wCD`2@miUu1p&{ zvAWIrGV5?li7c=^5z0DZCyt7TN6^%Sm17}bv{kZ|VH^N03L4vjr3AgwuFom5U$d)z z;6YT|B!W?kLXfu>{@90I(CicFix0BkE!_wiRz|vpzjl&Nf%YW;}1M8)TT%BIU^1 zPGoHYSu3vUQEjQ5h7@f{g4Z&%C2??zwj=GK&ulke==A%L70{JUZ!Cb&m zJ?ajnN6CcuI*Rl8gC7);a+>n&tFD-G?8V#Vx1T(_*#%_S`1uR2l>8id_TV&z^__cj zg<6Gu4_g_^K9c>kI&`ea)ogze6@cJa$&=qqG=7g9d(EzLX4HOzt*&K8TV*|GpsH>Y z=)OIH_$fQEkS#1!8ARdLoLgAK)Fy{)0xC-qYrzlmg2iW$YEbP*& zOA*L`#gAILKc=+B53>IX=jTvYHr+&O!EvAy1lb?d8-o&|%>=LT6;u&qM1>=$Dn~%h&WC8^nfdN9QpKJ`Rym4ls+Yf zVIKK(i?4jTbMGJQz0p1YtP?@McYDwA)if|MIj@6&a;7y?d4*h{AogA-_Ff%%V(%%3 zjo5qtwwCb+fS7#u$yYoyGPzMhBkhEaOe3$HfFPekd+kW#A$4-k#{g4a9SDS{<(%7# z#b5S82u%Yz-_gCQ%0$c`XROnEDn`g3&3k|kM~xfUGkSopT9i?bk(P0WPb|CyGDqTi z^g(8&x{jXV^Vn$4k)0`dkMTu0#^)n9d`|L3b<9r%lEz0QU95dd7}g;$M_KhqmCx6M6NYKg1Jx9nC z+u?f?`zE1$N#(MjF_k5%PGV!w3?x2Ls|~VQAR!|HAO=vGt2T_ZeckILl~Qw zMW}n~R8C$ev2$vsOohFHKrp=LR8F?b*n!SI!;`j!Dk`&_$PPkG$k+Bz=ZrHsnQmk` zj)Gu_x~xu|`wepB#Z6}*FFqtV9{=-&^4m`z z86HPo?9L-EqS`2uD@v;6E4Gd+FPy9(_EO`-eJJc?!G8YH9INLB=5*7@YD2t;WsBnIARbv{`e8ms8?G9<)s4XsP3a=jLU`jQ7m5o6K61Asw zHYJyqI-XKHdOSrU`LLA7IG$377Uv#M0XPvK^iXx(+U_Zpn$g&126LjqIi-Rz>w7{a zzT2ZfrM=wFX;y+1#S;*{R`jR|9a8ZqRqi>JI!AJ<1C#DK6?}Kp8Ob?%PNiOa;bG^T zO184)9&nV1XQX3;xh|m;C=ntzsb?&5Wjg& zKV0ll@i?L5DSH&TkDJMfBT)LHTrH6{M?FU9sJLW@TO3-WPABxm+G&(5)t&Y19Gu1~qHJ;;Wa^zqQ2fH_+L8iUz$id4-HOSoJGL^{7SSn_YDv?zl ziJPHEI!-P0$n!JxNT>gEtrU;Mj7}zlnby?aMg!0eshZ-IYQ&Z^TZhkm$DfN#jL}QwyA7na6e+Dx2$G z*UoZ0)!f~S5@+Fd>78i@PC<`-wry5_Tl{6^{Xh0v4?B=@(~ZHi*y6Ph^t}?O46uQA zjVhj_B;xWfKK2F5N13n_`!tbLl4@+V18fk^E0Ozd%D}|iyyO!F3iH?(D1Q<60*Ze- zKHO$Ges<-w_xS4ZZHJW0J*7KVWU03wXas!i zFLGfLH8=<5!u7Quu>&m`zV;7jUpv|)Ml=1bgrHoKBbQ=`5R~`|5rVNE&P!<(xST6^ zB!j&}5(Pk{lnTI*2gJ(c{+uS{Uxjw5BmbI3w{4n_8Y^3Sh{c9FwFA9z!&>^!qER<4 z>?DN^iuVEpu6EEhqkR(H;e1>=kEb_HVXv7cufh*B;qB~LvtjNFj+L6mOLMZ-t9)u`mC@X)PjmHJ!FkA(4!7mi^xy&s>%;)!lMhgT4>2Vsm3dC?O z;syE$%L$Qxk#ng}0HiPi?ITj5NDQoCF4lRnNv<3cQshUt;`j;?mxyNm)#S*_<|)#` zkt>p$C46h*@~`I%y)kh z?@DGgiYS@gIqHu4fl{29JMFlircql&j`GJLToxaMAxPbQAL0gQKELWE?oL9rWIYly zxW_%@%aLC>{j2fxc(82o;D+JjHv8)6;A&4Fc6@D z{0!;SzoRFA3t@(M8aaDhpTmde@UJ$7mu8y6`kIv-{qBcnAm46x#g?PreNle<$+tN! zU>^CVrO6kveZAokiV5aF<($)Ui55xWy5pTcr>V9dQD0I}j@EbD4Z)B3!KzpsY_CIf!x! zJPi3@a!Vw2iNIvFmz)EX*LmdvK)E|Wo#_Rk0@+h$-y%n$Qr2;oh2Q)b3UkhJICJ>g zCW*TL)agK3fmn0xuHpiCOyk}Mm`a}`2dQGRUQsk(&Z z;r9BAKH#(3Yp$eu_{wPD%QV86?KM?kvf9h-ul(o7yyNSao1lHA_)?nYrrPGJw!!tP8ZmyU054&R6 z8je3@9ql`H>Gb{a{bbdyUWB@DST!+FGSdI7l7~Nb(SC{ellBtgkXQXlfQMBEch49$ z*FO^CtoA{yNWw5VcgeS-D`T>d7Q2a>u>=A2+evWgq&iN`iL@kFf#BPMa={zVh zXq^%+4#W@4;PAA${vQ>CcMMwzwz|D}wdVSDDsPct5emxO3T9-lUQBlZ zR^>r?SXQo}3|9ir@+quSPyq7g`dP3ehs3R2gS%j2(BblN9yqQf*3ug2zH!7lGPtwv z))T|Wc9f|-@CUA=(Wo9IbMWNL75 z7gY$j)v=e*=%y$`kP_Hhx76=I6uiV%iR~XZLmXiyu6&Z{r_qV?pNP#_TJ&k z`OOpN{6AnrIM{A@9Ea{ z9X)2E%9$^MetU(;d9CyDMF(jA2C15g9~l$Lfgt#^?xh{a@;e z`gX>m33kS0RH4oe5!Rh=GXGyuhseY6hY2{8OS7!a@h2=^m%4QNk@%4rIBL!HYg9uo z8@7(bH(Mg*rk{+TB&&AyLUCwW17Kt%{~7B`!g@NsKfVno7WXs+5Fo=vGmfk|S8}dE zkeYLL8!zg2yB<+5VLn2UTtISAOVIACN32Il-(fx4cl^@s!sM1RwUy%NkJ#4uXkhoU zzM;ZopKL6KtQ~Qruy8jNADST$>;Jc697*pZNG+8I_r8Mk7JJo4&NU+y`E0AwwrlZ?#yf3BW;ycTl6ut9_6d;?`!xTFFKo=&X;z|uBl$F-fb2A@L5%K zgJ9=WRIh3IYWm9w4&eVap{Z)FUj^Jm2k?CKpEDo8Ul8o9+M*BY^-miNj}piui_!Fh z@q;tC3!n9G2$kN?U@+G&P+1ra=-guASUkmeDPIE9_gC^)tO|4e$2HI?d&xzG$n7kv z!@T#$1Pb(UMk%nm?|30AA1iTTCKDoJUyMI$_4N&1I{nf3qws}@{l4I#C-<10ir?o5fC-RW8Bo}bO1;2O5?;YJ!Qp=9;<>}O1K4_T46=-zk zoWayI`JJiVrPhO^;&W8SDRa&#QTkHTp_mQ&ebCi%xBge~(<6@+vgZ-jD`jdsX{>D_ zbN#nz8tF~r2)biLuP~{`|~8~?2q8t$;qxJQD+bPWuHuEKT1GZ4)#_O zH)!;~kpo}Zy!|za8}QwSO#52)e(b;u4w&d}OUX-yx_zii5z2#cQZ0L_Zwn=^VlrNI zfD2QVgNk@27_9l?FVUQ40Dn`rTt-@#>{NDrP$HQ)6zw+nl+@q*6xK-}WZwT?fi2wx zn~CHJZ0TnZ_3NJ1wlo=d6Uzo)vJ>ai<-~`f7n#bm_Snhw=K3Br;j5ag{S0zeEw35f zu)3202AvwY622_c#%@@BUHl2M8||u_X!CGoE5UfXd9^_vc$~4@TwnbjWo191Em6nH z{*~C$m*R;=@5;>iiR5r8aF~Nia&FU)*}sNabSU(oB^8E0$MUEO9CuY4ek@-aokOc##Bbm18={XNX*9H#FfQQEmd6x_`EER?L4 zLc2B0c`~_j{Jqw%>3fgIg<)||x}{fD6ybLHwePs-sxE@zNTzsfSpAtwMqGTm8XR2h z-e}4bjJRH&GS{Cg%pM+mSo{*!cFcvBtnEn1?sGZxS`_!mXee^$SM$1^_={vUP-D9# zFgmzbg#-R=|2OGsEU5_ixBYGIfC>1uealz_2HS}7e+7@(nRAY0bph7$6RHCOSskD< zTDX)n%vQNPBjGn@ynGjr!*}sJ!*{VS-^K8)&JT~zcgZ+>m%KB4m-zC{^@(BbA?Ag3 z-{Eej$H}US(%j*`)Ey(G7Out&7i7cg=1Oc;pTX{o4&sr`IfwF%`BL98U%DZ=r9xTH zGSu0ID~(sk`k(%J-cpB&eK>nDu!4CF|Fs86A!v zo&l7({@baMN)D5tjl+V=LZE$fwc==t~U zgVJ8PwJp-MWg2z{^43=TEAB`Rj9XioxMPguuVjzpKu&Eh8mqQ}iPUzTP{^%qV1uqM zt6gVt-s(Q;sc!MO)&0A%tGhb8y2Uxwy;fV{{+(Mqk?Q_LDCAbRnDcjPFtbv2mQ1L= zC6iv?lAQXk&~~_geM=@%-`j*jZhcGK`m(z6qNXdDvzMLQk7__|vQ>Qh&@hKKAm_ zwt+8?>fe8b39f#Bi7(J`^~F?!`&(-WsXgv*txu*laT%W%{x6`XR>$@KNa3vcLE~`( z-pYle3sc`AP3Lw>GZWl5ntOdgYKa)=vb3)MxESc!*;j~xuCgU`EGK)4Sl}vqmtXdd zboP(M?9C?reG)bHYO$)bvsWtnT&UYk5}S#NqgW5=?n*U^jZO~|40fS$*sXC>Nvd0@ zNr3fv#!DnC_@>fS-!WhKKx&2Xo^a~@>ZA0GdS5fSw*p(eDR~@QeHW5r-6r#{=Vg5HO5gOykQlNx-e}=@*~H1V^1)qP zp;3pCv+BPUFwDyaUnDgu);_8oqcK7>W*Mei#?(N=TdD^=>PM*BdJ4-eV@|C9jASc? zCsB*0yBpGxERa9Z6hhY1m6F+oBDp*MYXX1mRhLVgVMw;4haLTv=aTR~*@?@np}}op z)^#Hwy3S<}dq@mBe#m~g&a#F%I@N`OJt*5%a1rJ9Ecz8rXt?+b)(P1RIuSp?aA{cm zNt&bV&e!!TpyI!XRB*de^g>kD9g!dk zw5mw8^#Z#>!`4YrhxJBT!|De55!H{jstHmaZ9w~~RF!C|6gLQdJumtoBFQ0tDFckOkW`{!u1q7|w>mQGX`^hfDr z`hrgGqLY!0YU{s@4i2K=qa8F?&^#?cpKe~OI|*spSRM4~=lSV=UR4`(Iy#iq(Fsi> zs5&}C`Q@1%9UQx(L$R(YZa;@&8Qt7i5%l(R8U5TqO@tMsc~(a^(9sdMqgRE2quRQw zBQe#}!O@<+nl;GV(|@Gbq)2yjP`a9!=4RT%r>{Sw`?>}4UBS`bUPV!!?hdYb4`FbP z=3JSINLTv3-0gR@w|}_r#HB(>%1d&Khw64rvaq@C)AW1Va07&D)xlB%9j=ZpuOHmO zkWU!T+Er7H=Qx_iKu*M8=EnRw+>t~v%lw|ciH?_NU**VS1P;nlf62&!r>JQkmNA5U zglM=Y5kpKyVj?A*iwhXxC3fTn`4uT4U*f;0X{2P_RW54YdnMxl*ixja@M}l@Ow*AO zeLQU5^&zG;|UX>`T@;MO=+gEYFPapG9t>9tU->G zpNVMR8<3J^1t(-xFW}TQ6(yB03+al~a-?_L25+CmD!p^{u4VuRwlhvo2>5mu4c2RD zHY%JshdqPou74qS;8*0k;Qz*&q5QM{@PAA8z;nQ>){~R5H8B<=-7697)JUnLGek;L zKaqvZ@$c(+D3Rv%YCV|ctOwmPBN;YYTo5HCVgM%@0s#*h`wTe}pWTXj)qS1ANU#^Y zfjbFveOzTV7;Nol#3dzIX7I*IX^a#0LY`!}l`(~1knMjWju2I9_Mbw`BemFMs59pr zuoKffVm{;*^C6HASf>WJsx_ctgz0}k1z2$v-zj+!4p%}X{=D@jTjA5+jK7J9PpqzG zw#Gv7!*8 zBdDjP<6N(&l)leEym_W0%Y)|nB9YwcY(Sagg?x^uu#qA7aanI`k|^#xfOD^ia00v6 z5gGOm(n@mft(h}$Ojf&o`-tivhM>$-dT4{$%iwP@vgI_LBkL{Pj`(!Wh-@E{i-oE)czq@6Sb{6IK z&8Nrf8zp$_MDS{-mg=O4+eyk*ERG&=UEfyV>8d-G)QxI)S$(Yb!7x%XEl}k_jp~8r z%yssEcDV8rc}?Snm7W;>dVmR2NC)x^39ZlS^HZOG3y+4lBNR zuVJ0ZS%%q)Q(0){ zz5hkTq*E!Em!^@_Wh86;1Q8;Qm%2d2U)Kj^JxMopS!w_g>B`e9XijC%)hU=cZ+d$8 zu1m-qcwXeABYl^GspO-`2%(t?{~3|JA|L5|78gUbwlK?{YV)uinWI|VNNt7g2Je5# zy%Hl@!~CiMr55Wr#_AZbHt*!`_LDFEanqD_ORbksoI-z3rxw`J-N04z_|c0WYbMKh zY8U%ahs`ijt<9|X(>l`l{BPBKniq_;nXRV|n=Qk#A6w9M6**70nKwSh=ObkGwV9od z&S^8JMK0h^>(sZ&dxn2I+RS+5x;FE?)=wQ53dt0DNpMx)z{kfS0CWa{c#=bPf_v0W?1>ZxyiMR24h1+IzhG+iy(rvT4I%mkoiutvC6dnA;Jbo;B=1(PU!F=@*>HO0h z_!aw^`lw&~QTf%piI1+S+h)~oxLo}%uf1XE_rhIQZYyfiGzzXzG}h`;p1D$$5>_9P zg8+kCJwp-hR3FU+GjCX$+!DNLvsaur_P4Ze1ASjd-`86YZ$Du@C(W6BO&U-X?toPj z>wkv+Vsjw6x{1Dw+JVp6Ri8CCGQ>Cu*k(n(qt3WD6`C6x|GdCB!I95lJMt_F$Ho-_ zl=%1wWJ2GGfZcqaf^Yr~6UAVYFuMHT-L7wQ_!0fD7JjN_j$2!|pRxwBc{d8v~z1A>Ynpcma3_&65PX-cTv^s+1W6%Xe^yLJzO|KS&o9WQ?!z%e(7sRoKLT$Ctl~{vp$?jENHw?o&THSy-S~E`493t1q*MMVnPqjNB_F z*Chv%zdcUL36Vq6i!!}Q4y~SLJwtCg`gRZY#m2}r=EmqJ!3`QO$v5dXzO;U#ApTPF zVb-MLws_6tOPg<1-$CL}>NJumD4ipD57Rk+d11tED*(E`ME$rAfpqB1eg($b?(eXNC$3 zM#s-P*d8*7>7p}gkA25azdhdXZI43Yj@sgGgX|frK@Krp$C^)X%cyYYcD>B)cXmEy zl(*p6Fu+dPhU7P?tGe@_BfmQbc!=1PWMf? zJBR#c*KWhE)=4-r< zOMau9Pw78vP^G^De<^WzjV3jblZvRM^6<5)jPlte86-LD3tT-z5~XhfASExojwUJK zUuBp$ckcZ0i7e-ye!eFqZYBm>l;uJL94JY#mWl$-nd%#Qg@=F)>jW=Dm&?=^GZ!cKGPTl_j`rnZ|M*M`m17PDhTwYld} zbKin5hHiz9-FnZs{v!l%1_Y_1r zg-C}1E`=>EH}~|JYdCte=Ph&1k{DGuX?83sH&Z9feJ`1N;AFFKw&x;q02U9JsbO;s zms*SvnGOs&1Bc-7GiiW|^y7MmI?ZE%Ld}2M^K`KR?bN^A@`_19w@^jg1 z=b6j)@b3-&{q{VweV5sO!dz2ku2~WMdF{D$6IQ?788&a34R^CgnJfIg@pg&1W_9rA zD>QHAc4zs!j<gT8 z4c?NQI+?1S?;_rm4B^dhwMy!hk$25igtA@~@7yAbsiR3~d+`tJt6oa}u)a?E`r65^ z%=^`%+JQ>7)l5C9R@6RoG5Xf;V@2&;Ec_IjzZZ6L7twbCJKlBkUBHfaseBi(<6Rx! z1?+ei#CHKZ-Zk*|%FaZWJ!RkCxmVW1414nH%3#c~C)>=9tHb=6J)b}9YIV#jZ^JO) z%NLs3#E|6MG*Z|K+PAoql(!`1U>oKnpVx-@vV|`ztJ^RsfmvAx%u!(Wy~US70p0`5 z0TQ0%-y3b%mSh|b0KW+A4tCR0^P2ecdYiH^0U9QGHUu#;NuLeHj>BYPXOj6Gi0s3q zj_~X|n43y-tixSj3Bqi}I_h=0%X zj}5rtm-$EL@NWK5IZQ16yvm>UCn$LewAgV~MKz2THHjt67UGy~s)#ZvLK^OlPX2tp zjz5c8H|8bN4{Qfh1PG-SUB!^K|!7bSZPi8?)nU=tv zTSV|}PVSZcBf0RbT=tM~Fv^~{1i@8U(O7bGkkkMv!TyK$6iPU41zED)B>V0WP{nl_ zW{)NHPvp1Z|8(ieeP2SaJWUVBrBx&3gZ=*supN-l19>r5)0Dk@ahuljR2cNWmPKzo z{scZv%ZI;ZS@g!_ulS8|`TOnbne`oyzh?)==I{TIKjHTK<9*}uR|v?2>Amm3xbzP1 z7kb-}=n|2en)ThcCGte?*M->EllNyT=)f2t0Rgc>G4A*6ohdhsnLm{{#l<7$Pfr@e z39T&Teb?dSBb;F%R@Zqjs+&l?m4yB+E7Z`_T;L)<;07R9a>R?r9W`yr(6o7cHJ5e+ zpes2ewJhL(Q-}sH_5}xYC9EwgcEBk`gO~V%1GRuH=l%vQh_} zQZ#tb7aY))91&R-bigS^gP%i4P`NKkDFIbMCnj$N9&~mL)b6(KuO&VA$JWwCJwMVP z52+72vC0t=gS&YurW*(*agzhww@2>MA^y5ZV=>ukdA1RV>Pk(n$f2`@Xbx`FB&U@b zUIk!-irQ|GEnQ<@-|K~=kaa-S6TnzSIIlp?r;J8pAE^s~uHx51p~awzI)ke3jUoaj z+4y(jryAVKzz?@Nan&+6t=3#dZOR#v2`EU+S_>43`L3A>)n-Ec9k|3yXXv&9C&wh` zLs?G7RA<4+YqJ&Pi#UssA2EN5Oa7+=>Sov`fT!72)8hw{+lc;TG&oOr^F9gzh&>9@ z{OPa)E~mBu_4apF7Bpl71o~S?p)2HRl90Z67L=eusmnzPffk!X$dj07jFaYA04AUI_TXF>K9Rt1E?EAt|R zK;R;C3R#$iAdtEQI1=`cD6YaFR49a+EChhr>t|p`2{s)eC@;BXi8pM+i64-yYl(M| zI0rhojNucK;iFE7NT5Yv`X19VRm)7G#g;GKlYf9Vqy=B)Nzoa2;R+SpY5lK#P;ObO? zU2_F@UfESZ-yyW@!~rfwDimpWhe32l`#zF@{11X&7aK}Qj*uo_X10&KWgO6QlkTza zzj7^Ap?Jh6GEx-)Fl(9?rw(TMRfjVpvQhL<}K&whB-jWxU^ ziroph*-ZSZqaQHi%Bhb$gA#Q013AjE%wmtNm&Y_J?Zh!wIEKYX+mC(JPW*x&g>rJL zYdNP@WX{=D0NiRY%lO|oYW6NQn1+%#-2=C@(7yk2H9ZnB&+ItZE$gR@OP+F;f(pF_ z5d=C~P?0W(!qWxGe3ycjQhFM2X;Ge%uAvxo7`jmxRpc#7-jzt#iMODnP86Rm3SCDR z<*oeEK)#~10@T}Hq>Bo8iz@aORjiAm_;gX|NxCR+^_LdsD@rR*z3n_kFAZ4iEvm#@ z6a!XjMe*sP(6Mw;-s&$c$yXG^9>uG-y;v7j;w`GwTU4noisI8np`YoZywzV?ny)CW zwDq=^=%SG0qvKEBxK8&~P!~n<>7vl>bWz^wFAe4^N-KQ5?YzGs4H)zmr4%`Dap&mb zg4`9wd*kUM(GPWz-ey>O4i{RK=PS09l_02Afq-GL#IC!C*m74Lbo6(176WCed|MzU z%cRoU=b=%f&TF-u`{t`f>L|_qBz9rnNqR{?b<=tYBfit%Mt05viUvOq{D3c-?Fi$s;5hmx%eq-2dJy1Xx5k>G(NI{iFUAB{)38c&pZUp!*qyIUOPejc5_ zm@N1p|+yo&qMdtWl<=N!m)g56;bnZ@yIR_T<}EQpNG1yanbiRpQ7*k z;*|=Xqxa84W7BvPuJL5NM164uPn7>ak_c;a-DPUE4{8;Ocq1*3J5ia{uHcXK$3yA^ z;Vk;UsQpU+SK%|F!)suz|2HfBUyxCRo3#GlSg9e<>Qx3>G^&T_{|gcNqSd!3{a-YC zbbGD;JCJfzp%(Sl)&G~EsU(#CFTuv5|JMsG7LD>O{l8l2|4v0v@X`IjKozfHJ*ko> zv0@BqbbWMuIoH>vYztAy7m98VR{`J`c;G|8H#+d5#0oERl?rn}!DByQVL<+;15mGk zssu$VRoB=LT&tJ?dKqad z19JC%)XRSu^a_Pu?T22Ui5>;L!iydOy}_UPY6n$Y9_37{b;|PS)YD2oPw$N{lruLW z|K+1 z(Fj@)=C!~~j&(D3gGRND<3B)u;~Ah??@3&LgSG9m9QqNDx=dnu^DM;d531SkwRkW{ z-dUr^<}OF3UE1^!yX2iVf6`^TM$k3C14C%EP{$m)1_ke(Hi%AyJSU zxiWa?>-wOtbKWZ(Uf={?@D%(H$A-_LU)g_p^iRH#2`{`$9kiknNIm%G*!d^-j-CI* zfwA)k_GRSj_oqT4Em1~9=@tjO((TgCxWhWkqexM;u_X2H|LPuS$TOz;JuDZH&w$GR zqU8I$kCg*>rAvs7%&5Gt)T)GaOnL=Y!XT6jMbTI}7Mq$X@EPX=&xrrqrH{wp{|3pQ z2>%~;2~CjyVIThG%_KRmBJUstsdSkrVNzksZTJ4~$`~8vxBnaR+lRmY)h-}3{oYr+ zS@N^mZvy3iRmP;J{M+TXU->t?fO*QlQu0r~{1@D6>G9UTEnoeA;sWL=fBl)&{{gpJ zPWj)>SO4`cV4m`C$*F&~Jj#(TJ2U5NHhix98XG=`e)|Es1jocg<>M7u@Y(X~%iR9v zrI($5lH20O%J1Q}xUurz&n;=5{Bh>LR5v}3L_SG-^?y}l=;(MBvE;Oi&i|t1`;6}# zz$;xs^tV@j2{l)KDOu*qFM-b*|MEUtUis_K{{zy;WAOhC$)5=Sx448R$p4iBpT++K zi>pYEvNh!^40$rE?}PWzvEN?F~_eA{*3u21G>L7mC+wEtsFU~ z^@lg|$oCw;UwGubcmAn4=c7OP$^S9=_n&{4@6O?00AWwdj|(N=XME+zkNvwGLbSJ+ zf1&0lKYk(bS>x{v_}{j3Z2rG1`4i!PwM%G%{Lc~i)8XHL{5;@xyB^Ou!y=!4lmmE+ zODK!~eB_P&Rc&87jxO48euy}F6xni!AHS!DA`=0#6C;!GCY2S zW66HbZr+ZR4TcK#mJ%D|vYo;H3+`s)h;gzg8hefuwb3KnJM6XeE(4Dco0UcXFMIC; zA9Z!*{pXtuFu>q<#8D%rlD1QqlyoJUZAnet6tPWd)Kt->mG)t`E)NKgjWt@TRKZC! z-wmU#OS|2b-Mafc`#jyJcI~!oYFoEW0L6faKwC3Jg4TAMA&Mf^2nhV%pL@UG$;@Pe z1kl~*^{c+fckZ8a?z!ijd(OG{d%yPz)V?Lkg5@1dAy~cS(F+&W=5OHVZJhH$hIvtx z1XWB@cXu~fi`cEvfAd&P(f(={5f_iX{vt% zzi%6Fpv`-vENET`6oej!I>ZwQUnjI_eYu?DSwe2>0ke8-H-zP_UnO3e$=Y>{DQz7( zInCR_#BeqTrb zBy=oGUaf68+>*9GQ>(%394t+AhO+_U0uUiWXm^>$Aw`ozu9AC_qB7bt#fbr}ESk^m z{cS8UF!le6S-P4OlpzwrAzlXq&Nf)-04L7Sk7^pIqkXugcRICnwKB0`X8Iw`^IuXM z#6?5W_cjC-h5wh40s_PLKd>ppTA z=5bjFNu(rcdQW@l_R9FSBijxnBmdeSN!GF9zx8FeWvots<470|dcD`2&B-<_v6hyK zP^5^oe7f6lHFk(~3HK4iYufOogUo?IZ5!ZNe~kk8ZGDar-H7g$CY00Q9>%5TTN5r8F>-;P_!1;S_C0j7dL04$;WcDzY05U%nLFcky>USS$a^Q**wo7M~*Kh4#!=^M=w42@Qy92E-0CAQT|U zQqU@PA{Y;7%#gPFMjaImpRfuh}56aa@zqZUOWVC}ro^(0xE z-hkNVA|kd$xUKuLM1&y1I`y^4cvN^!@58eCK%nG3&Nhsk#8xC3nC)0qviCmgrlA#K zHVLB>p{^rilg)nwpBCAd>;&oBgC#cm_4Df$o0svyuB)5i#0V8jY(?0pZB{qYb-$uI z#XAwaRu%>7iUlY!dMQ8B`f=kU{NdfK{YP2xL@7=(IOMw$HJYL8(kjrz{q7^LxQ`q( zI`~VH+YW9!l#Kmt>l^K{uPcVYKj=-dLQJ=%LI;`CHi5;xXX-bDCF3G+xXxy`qr&a@ z3=AQ(uqH}-l-YnIB_y6W!+3S)HD?bU<2bvq$+>4+B{VK|F~2_pm$INqabPu|euy$0 zws_k?ZX(hiT!7(R7BDFv*dPrL2QCpXfQw=KXR!BKz#-GBK~acm0RprbkMJ1`e-uBgF?Q@TID;%;Qa-RjS^#*QfB{^L zd-)8uFAJEI4{VU;0}F6m?!c41L_h7oJ8Y&qRtHfIz2pcxhh#!q-|))fKhZdJF9W3Y zDDl?j%*cZR;;kC(|0jrmW8&X5qw{PY$R2gCDf0R%(w18JRrBj<)V*d@;;TsZW<)STC2A!va-?^BK2=5Zuj!BLh2MyNpHG8o8=e}oDYE`xDQ>PM(R;WD^-16(ak1BJ^7e{NuK z6s|zwGFBdL7(Y@43YW3CaKnU=Dp0s=A{8c%RDr@}c&8h%s)cD#;Up?eQUwGhab?Tu zvno7|N~ev4fx=}j64)IaN@bu)NLuT$usGb7&L^_sKZcLMq~vStmH z4AZHsqI_-2D$3WRtfG7k$|}m&ovfmKt;s6N*O#oKd`-zJ%GZ&sqI~VhD$3W3tRgf5 zZID)2mB}i~*M+R2k+dMIO1Av%q~ZkRuaFCu@c%daa;$MRE^A!<+L&vfuV$8E$5ROV ztX-{IXwx#?G`Hgq-HwahNA|dnyeS#sol9k%542tG&(1YvFHnkYzL5c=*?ECdN^WG# zXc}Iil#&}6Hkxl2D5c~^Mvf-d1xhKok-?)Gbb(SzZe;x2K8|p=63@o2?E{eR?5YMIVs`bO@1rm#@gGlhkEo+&KU@l0W%erE~`bvsjdtX^j-{l3$`m-PSR z>YX*1eYMswZ@YY)M!E(xI)h1OyTbhneX&69QjYO-nTM&c#Sm*9?v9a zpB3$Tb4=T1;}RP}X6tI!d`tJFG~m1IynCq@=f^L6-~4!$^F-VHI3LWP2S7Q+F_P1qCzLUtIdsQV z(!>UOsmGkTEKKqOo{c+8Hf*YYH{I06#G<~Wf)6=8B|%VC)K*{8{0X;%t-oHnqRV?)_w2q}^<>4XHM8UM zm+LB&MHRc8w3tzGVB3Mgo|-QD<|Y?{w_-gbiRdq3kc*%Ti`$VOQx4j)>3ZRfHalIUu6MR>18O4pH@Zn(F;XwVwCOrZHJ|0 zU;EPx$J(Z*AF@>!02uamxmPgC(l4NK#=n9ir{J5~m4ZRKxPgQGuQ-st*-9veYAD=e4-%dOLWRi(PE~=!tSw4%NOT(dYnw ztzHMqct@>6IlHLYnEQ$&&VD2{+d7fKK8(7#Zxmx#W$gL9qfoQo-!{moJF}>*w0VxO znh!uLc6kGK%tfmPrh}fLQ@8wsG!(AbjE`(^c2&I2P)pTpag%>xJrgBvN4vpZe*~0g z;a4v=ezk$VAENKO6ilS6QWfbMww$=DE}+yqP_Yegl`fxuxx$-*sDS3!z-HyLD z$QqsWScAr>Eib_N_8K}e9UkZHozBar;r&G&=V^7?=1D#B?j5e-Py*%gsKkF z+mPvP+#9IS=DG%lTfVm)g|uhg!DKh56JNvcI=67`8!NA`zEV(mp zwtL0?^c?w-tn}s5lkBuunUx+V*Mb7!YUl`}f=OQg4? z7Ycr;ewq^@mCn?^Q0--v-(=I7avk56U49Al+V$l5WH;k;nrN<>yGpCS4*R&Pbh6X! z@d`0n&D7@-Y!k6&DHGK)mZ+P(<+$J7q{;_V)AgIfHJaa(xh7U#Wf@*2anyXoc`p~O z6(yVGJ2(*v?{xw2A#)Wo{`(kk)0s^so0!mZo$hGhzBo>B%!1~XILyf>Fhi-OxvkAp z3X;eSSLS%W{m67VZ$sH~;S35?lrjtWC>W}l!&c%zn>~(-u!k?|WGt@I>G;|E?LG-b z|CLnLehDr?{w^Qh|7=NZe2VtTQN-~NCM#Jxammps+9yXtapxd0N?F&zaR7$fSI1Yt zeVxLkra1)Vfr~8evUcnxtNj7m0|C}DKL;$_^(n-M`5AG3!D`yHuEWgj@cmn-FOM&0 zA{Ta7jUCU}B}Lm|XRFD(@>#X*?KYJTyQ@CvS8;aN9CojKh1xTdWe+AJo-+th1SNmW z=JjOkXG`GK6o<3)9>iE`SIv^%DduH=xwC_0+!;((drP)V={m#>_S7h0vn1 zCEZgTb5^3WjpVeh1LIoXXr9?#t-H~e*X(y!y^mK!44UO7)p3$n>ImDADck3+S{Rg( zSF_K(@@WZ;3bk!hj7RnMw4H}@iLyllrnbP;wu!CV-PV|y$el$^ZL6M{j6L9XoW@@= z5cKCIrznJ}Cz~i)(tVMW0#7VCcS0RPYD0bN&@49@T9J&ca62w5Qti$u&N{cFWJ%{m z&XdX6#dTe8j%zDPf15$)Fk!7=d^FN)sgMo|Y*uCsnKPWn-HywPU~1G?DQf5p9*s1D zkDrxG_=ISI)TuZn*y)#lJ)$#n8l+O)&9l_(bgNV$chx_zQCngqcR9yKgi))Id*xP9 zFr-#bsS*_ewQ4YG<#bW2-t8Elto4!+=~U?y=YVty>7hlTA*I?(vewxMLrTHJOn4js zfT3ch)8bmKuV%GUGkr`RlbRi9=Y&rR`PU#lJKC(XNu$%%fkW=9f40k3B0Wm_%H0&k zP2mA|)k{N#@tOnliozLfQ*DIBS)Og@c?0eCaHqD?HkVMk)s-(w)(sx0mq;MM^hjRn+g#t`mOUzMrd=xoK5akQYZVc7~7byt-$C!xPlIu$5f)GAzb zNa3zhrQr&<4>IadI95!`GfEemg16JEYdBCoS+uB8K4)_>(qT;*c@4?h)2J6i{bV`< zlU9mu&5)?}VZodOq#CV7`zVz&CT*r7Y?(Cj0-IJkUG@%}cKc9askLdS7qvrH+oD;T zMs6*KxwXE`s#w_3a_P%RV`MD;}l3 z{UI&h@9j@NP1x%lN`D@Mw@~Rn)Vy=`w4_1(d z(&6-2K!fzYbi42$NKdi&_oWBG=Iu*AWbq$PS15fr{e6(q{^9gYu<_UldBOR}S%-Ht2fHM&gj;v9@q;g1DGPhuOzh`%0|Y@zlmVTL5f=bKZu$yi4+LWsLV6mMGs^%psNxc1$|vW>;*5P0Qlwa|s^B{t@1-!*Y3(zN1# zP%|)%CL~v$tdtr=BiRipWuBqHBR{Hj<4;vLz8iu{6T@1XQ$nm^u8K=NNvXtX?kyc@~?lV1eS|C1&E9jyV5B>AU@3Xfaz zlkh{QUh+Sb3*@y!0b4(!^cAsH%r(XKMRlsBRlX|K2b*xbE_?(SrQt3}Ao=T+~(GcRBBk2be?;J@d35!hnFHlIO zp^Ws-^i09;On=0}?@XUB_?_twS$KwL`W7$*@s-m59aPzAg>pfyy)P z&UM(uTJOoho@7~3vU*CgRwoK$lrBl$;NYUL@zup1XE5)=`ot=j*mARV$I@cn5gVVR z>)|8q`l93l=V^X3k-iXPQd+_K-AD8ZR|S4=d2z9`H+e&`R~=6_zo*FALd7ypewEL2 zJN`$J>fBb0UyD>6PI4Z@A!lm|OL9a+p2CZ%P=wLDt;Do5ySSu6U%kxMcWmdiQ>p8> z#TDyKK-B2H+V$qtswXO*sOltmS<~s2c>T(Gyy9_kUU9$G={-RZIoF%fer{_ob~Aj- zgsM*7%(cAgYZ0klx8+x)lC|TpwjuA3zPyUe8SI4&sQDlCzjjK+VTjjTAm(vj6Gx^v z6|d-2Pbz7t1`b|e_^^ffB0m6J{!ypm02?l_;>?n%&@hGd*RN?=EMBoS3l^TRQnCDl z#gs$=(ejY_fTv+f38Nswr|KOO`4JZk%kEQ3Dz+KC;ntU%Cwp(I!y79$(qU$vbeW~U zsUBaLPp#TkvF*q7tcW*DERC;AY?x*iX1QN!!?dbS^V{mL)eoJgR1Sw}{ZfX@k|W6o zbJoxB^LD3#<+YC=sd&ciI9)4kB^4}#ecY*d#(6UttMWpC+;-IYrQ0#2=PdFvD@d`3;JnC#jB-6T{FE(JGI8xD1bRG5{=S5gme?>oBsJ<$uxBGOPC4$t()wSSFI&Lx0bCbiebk>pXg<=c`g>qVsaV*hVRK|S%K-ZK)$x{7rOV=g-|ztxEj8+q)MJa$y)8E%GhJd}z(7DX)%nS|@;LhgLIn*cI!y z#egDT`_8Thj^ohR#=i**HQJM98qDPyZ$!BjN0PM{QH3vR*T&aS#aO~pmeO}{HIl#8 zh&_s9Y6s(U=*A?DtDXsC1qwE8WfBLV<1o-5!KRZR&U9t>FdPd^KVp^+ zD*DJ^H%8r108TJ*in%3)rEHeAhv8{7cp@1*mc8(_%av7E7hx595)3OXNu!FJo zZ+h#?AlAX`mD$wr!Bz%~<{yTu(BWgTE=un>cHm($7Yxm$!xBHuWuUdXtApET1X$t( z-##9l3$I(B>V_dom^+-N@u^lV-a7Hp3Tr}dExP(gQuUQDwTSI@fVH=n3t1TkQRY)R z%*Y(Q;_c+cV5~8zlVHr*pqYbICQ+;Z#SSKsE#|g!&I!eY2#zVP;4??I=oktA%8UN( z#0x7osNL&yagD$K<=FK2_(q_o+O`%l^jtk!dS(@*M<+}3nu^#%dvanUb;{!$7zYH2 z4bk9wcY8kl@%2ZPzYTvA|5kv%zI-y0$mZ{t393fR-%-eW|JqT~^DE-P(b6*td4F-V z^jvik^c;u0cKo0Ke}eH~#bws@d_>(gkq&W;hobpO=o7 zo(l`pb4+_N3VHqD`=jK~KQd<-&Yxq9&uk`ZeEum2hK)}fKbre^GI#OJ;oa`gd2MWY zaGusZhmWutWRGlP`!Z1#8yw;+w=~q0cOBrDmSV7Ix7{4R8oQ8BIQhvjZbAcC4jS{#`bcO>goXfq4n$@h=q5bC<>0}2 zkI*UMfGu-a#?@V0I;}%j?98+D0GETueDyvOJ!6Cm&dh;BS%%l$;BmCtpMVMP z6VYjI6xq|>!|) z)WWu+5e9Sa^(iKn;Xv^i=M*%BA~~YeaO(W<6lNe z&*Xyi9K&A(%}Iqk{KYmieuu?#$I~C78j9zF{s=K#wEZb5)SnUJIm6#skTY8T7LMl% z(sT273-I??^n9OzHClQ`A@3I-9wj~RD@;$$P>`|{KLx`fAZJKipE1Ly(0I7I5IsJE zO#CfGgb_ww519GH=*Gh+8TMWdz1&QJ3BbBysR zA~bx|tj1>*6P!f;e9Odh8&e zhwUoVE`Pb?@BHPGcyj)G9BRZk(oJu>XTUas!!k8wwkQfxEvQj$f)4N!cCN9@Qq*I8 zhGXiq9KRf(tc55o%;dK;gOqu|3Rt7%$vDbOUU#YTp^Uc3l z+oWa+d?u7?bD}s`2W3%oOGL5`CyWr+2hxZ^s{ZS4(IFlvr?w>Pv}YZ}2kN>2b;zt# zSzP*hS8ImEpSBHN!--ZQVQI-Hm^x;CPPwxSpsuy3;gjF#%o-VVmie7W69R;KubaJ+ zl$?K&gTl@hni-HYI-}g@U;&AkhSo2TP<6*}`1^6>U zd}8D^>jdZ-g}g2uEj`~axZZSp`fP^8u=VmBdHvv9qvX%~3et0o@hKv*!yn4UjB7vM`SAYNPwjm8YO6p0W#+@{t^OQ8J^#h$ z!~6fbIRt!ITzL>UW#~pVXc?8yi~`2hTU7=aNl}^ z)ndMT(JWLGMy*Fj-7h)rmnOPjit#8baliDu`=vc@?+b44fcwgm?khXp-lyH(KKJHr zj(hVC$9?Ms_pJf<&hy9Ttp?h}ZqC{sj@x<8WKl#FS>leCH6}cA`odS9uKafw$fHE+D);g4 zp|PyiBbf$gD4$07K(_0ksiY<*T7*zDU)0QxpAUd(4oVJD&Ak5b8=0#{=Egq^+yn~; z4Svt3`EVZvP93Hhm084=TXbWtz8n6`cnb_gez!kpsN{Ggzdawrhn2KVSPU7ahAjr$ zaSJ?PfP?mY3^Rqnwqr4<&!<~pL!Y`!2|}#3xpjiLD$|K8l$@kH%`-Y<5zWA31*s!Wl%b-19mh)7> zwqt2f7tgWH`&|$CgS1pRgL{hQ_Z~GkC!qXXpC_N_`jr`Rl4)7juS|dExIaX!i?{!q zY{8xtT?fO0s#R`fer}m^ugK56M7e*MpL?Ei8}oDPlsh9ow_Leb<>$^)?uG6T=g0Y_ z51oJ59KXa?N>+M9w7yUE=H^4sR&I6IZ^q>p#8q%@e(oof`{DfD^OZXeiV<2w0U?0&>x4a-vGrW36M#nd5QL5E*4;u*>m*uHTMJKK8Mq z6-7l|uW*;j;=O;zR~Cy8KF@-CTj@~AViqVjP(qD^f2J}HqR4*BTRF8%L7w1)+tef+v#SZfN4 zhj2m+i{M)+UVQLip)RiXA%B$LMQ#9?H-><1@t(UWTC)95leO2u!sKHY42gt(riD6f z8BagY&h2Np?Wg23MAPEE>Vx>IKIQkb-!Id1SU;AZ_O>QhpPAdo_lYYH*C?}X-dNjV>74Tldb@b9 zM54Y*MEQMHH&mu>4eP6}=~AJdC}|E=(W!>2#RuC>VP0P^_6t8^3Uk%=KEG_Q?d#(0 zYxyyRTT&mpIIYnjEnZFSVM2}DK5Fm`0WRJv^%A{Ow)~DtBr21LhILeZP@(!XtfRSH z$m{4KA98ttj$Q*cVV!Qu#w_0c+q{mde~YNJIQPcpPx3nYwBOMf`S~54 z;8XNOen%k%TQryA#RtDssG|@1ka1I(*U^oBp`LB?awRGNb@WD4CR^0?t1KNh5@jwJ zT9Ur4>qQ+^S<3v2<7B#iJG{r!Y>%JH>+!ez9zRf^$2WQ6Ny!~!|4At-ssgKB1li;r3j!!;zvBsx! zuq$JNKWMsI7T;u=Ssem=l^Mic>1bOx8F^#zYgd!m^+G7Qs!G7*FV@FC^q1{>-nOn6 zCL|+&nOt?+P+{bVDJ)*R>3@lX*+o%fmFi0tZ@MDCC}t#AA6mSrm(C7Bu?ueTrZ1YT ziGCYwXj{xyr2V3KyZ$CupKgjwx9IGA=GP18`}MqITa?(abiMz*)z!?4!e%QOQ*1WJ zouQ+2=Ed4Rr)`aAwsALD$Go%JbffLOv)gnz?Yz=9T{AoHoHkt;J8w#xZhoD2rnAWa zQdNLd6(CgwNL2w+Rem`p6dfrRe)3#AXNoORRK~}fIQSkAMiasAXNoORRK~cKprCkPW1t) zBS0R<1E`~j>dV_En7?c!Rf3J6=0S@}(V`xZst2UjmAB0r$9Alt{c`#8oovK(hNT2C zixR}FE+9K~0okeV2t<8HAd>GHeiufq7%?A^Hq>|8P>Zyo7HLB*(uP_@l4=o2o|HzN z<+n&1YLPb7B5kNe+E9zMp%zgAwTKF+#S>P=QolvoP>Zyo7HLB*(uP{34Yi2ws6}*V zoRRN2M!r+pjC{|v@-1uAhUEJ9Soxl3~~?*igCh#C#+E?40yt-cw&G?zGoWwo@M2Gwv}(GmG3!LzQ`VN)FXSuQCF5f zey`O4j$ok8zEQs3J{@VjH#z@2UEqkRZkkN`eSTW%*K`IM?+-E%e-j^q&SS@ofsi6J zok_+Af(%rmiSy0oogZXCP1D(A{6UZbT}^yFJC85>2!7P_k{eOBUUATuOn|i zYRrgX_}0HyUybkq0j_->!?*r@ep*go9>cf({XvGY-ekms3}eU1_&|_hEIJwI2N}k; zlko>Z2BN8F_|{EJ&UTz_Z_2=YVSVQNg#7s61pP398di%mtQKilEz+=Bq+zv4!)kGo59p2-FyaHAW&vqfEz+=B zq+zv4!)lR+)gle6#fd)PBnwEx#{+2m#{}a)BG!MLX8lLh`j6AC|Cnt3#~Idt#Pa<| zzI>x5J~&}9jhfqmn0#&@Khpv+`P}xI2E4cp{o*!E7q?-$xDC_A?LbUEw}BV8ffpd~ z0t8-wzzY!gY%xWwn1B}`@B##0fWQk7cmV=0zzM#5Ct5(@1qi$Vffpd~0t8-wz}xt5 zypit&E8mG$zDOIu`bk#42pzzB*UC4VFW>z5fEE-LXexJl;I9=GC~TMJbuz)s}q5on}Gz)O#K2oQJy@(^I4fDIk470M?_G0MtqzxfC86qSnLxkjHh>)BN5t5T3LUJ-hNU1a%zZ>oD30?lOaNK zGK@VSP^=I8kt5-0c2d!4P8uq5(h!l8hK8IpB;=%_fG-H@!r5`@{rU0AX(nF5T!~g} zn0V(KHmn^@%o}eFTi6;l9&j{c#(@x^ZxMlz5&$7UszQ<;P@;zb1LF;Z0D(}8KnRdJ zBLW7-+qc0$2oQ+30}PBe5NZ*K;{+VnxEM>5`8o;*^VYdzS5&o2 zS#}-c#^#IFEN(QpoFJ5({{x#TiTOCr(uwv#Wyzj(jwYJEE(^ED1!@XN8K<|}8(6Gr z_z_3bX(Q8mT47qr9+B45@@e&P6r`1=3(-n;9<6>D(==&hS|=5zmFy8|os>_jkE0;1 zG+l^Rvh!&5hg?%+WLh~;sE`hjJtD1%_vel071= z6Z2{HaTKJLrVG(Zb{?(1VQHE$GOZH|(@OS;v`)yU)yGkgR+=tEE7^Ip`nIfT{K&M9 zFH9@hBhorPpH?47L0W0L5Upfq(>i1Y=kYFZm$6wX%*AAm^4ArJzGY07eF`IZhSQyF z_^iz~meL&VUmr_GK8269`Pi&_Ey(JA#bm?Z*i2(cEsnEvf^kq;mQ`!BH2tY8+{S-V zRGJKJu6Q!h8R~ko#K!6O=f~$vJ@tZ*nX7yTGhf+KX3oZRTK87y1%bcbn`3B#)#sc{ zp*6F&++12QQ@Gq*8a0#3+*~?uW|q0RblogV=jI01IyYC2+$>Pb{$&Z(^c+07xt0^d zvkhm4X9rFu4~g6i>*)Eo122{!YM7*DWW_G@)_w$Dh4nP0w?E0eL&*!l0A^by}&$ej+-?Q^FT+hi2c%G9Pa6Bh7 z;CD`D!0nvOfY&*hA`}B@jR&001QDXuw|{UtlWoZL^Uui67sY=5uvo;;htorNM7N(0 zr-$-Ix}OiHhw??epAV;p^3?&XrmreP0gUMP&D`XnTtoiI7W6uRVp+AtaliJNS=pjJ zFriu5BHhnEJ1bk1``M*g*&>_>G~0Nd9vDxph>vVmbBoRhfE0x07R53}>PQa4Gc!f% zOis~RnId&4r|9fVkvgSWOKFCFrY~9c)}Al5fK80m?7FDt?L7eNR*4oqS_JUUa^;gh=3yeDAkWr6#}U92&3-hwn9Ttfgh#Z8+G|%Zx^@k zabzeJ%`L+7-Fv4Adu<$-MSnOv=T5rI<0m{y`3PQLeKaWAFPoVxyA?)h8`4bYjbIYs ze|K;5Vf$y34OJnkMdWRf(yhtJkK`c5Ze>ME*}yY5!D%^;+wzFo=Dbe|Yk`>uSNXcU zb|zn#V}7e=aDHwW-sNW_c-c0x#^UUR%K}~8zs8R2B?5C10!=0T~6!r!ywwmoz zY^bJcIaOoRL8?YFmyZD$uj;LNmcpp}_v@#dyB|YUy_pK8C`6I7n_PA&wQ~&ZV5S(h zmuISQ0Bxog4OYDZub&0f+s*g&`syd-w)`uxiMO??7fK=-ECxeF?ZbR%F3TsNY={7z zL|IC`a4xj10T0AD4ohCnA;E{dUEG?;skptC6diOtD-{anqJ4P8=QM-dDqc zH|=Gdmf10=OG_ik+W%(QFh3p|+@(8vYQL0RdU42mrR!)3ZK=$(#&N0cy&4vaAE0 z2`9^L=5Xkc$2GPk{-qw~i2sVM9OHZMeWIGJR~I#KWVE-^rpmb@0rcfvM@qU5Os(2n zv3c7eF7doVx0%hX+B}VedmG{xO-r>!W)x+qYwKqKPi$C_b>6YIX8nl$Tt#dH2w_#s zL0su?aF&2Q57}(pq6iYgD*mzRrf8;af5nIx#Er}H;-f)?xgH;hpkc`@?Lbra-`RT+6YS0Yw3 zNUGd>-M!)!%n_G7@P{A1Ra0ZWrQ$j$P*4=pj~F)aiY+yRLgQXOhye?^4gBE;c91{( zi0DT|woN}|0b}|RLt2;jaX#EQ=k=PW-7B6pX>o*+rMsyYzv1wo*L058^q%$$y{6OK zzZ~+K&eUmeO1`)Ks*uyBES9#$s5irF0zT|9 z3yy7fegU&*o2y#uJsf)DIe45Y&NI&AUPWR<+^Wag^ELUPZy2*{j%fdQ$2Hs_!U5eo zfv!t7pUH8%*OG(Fy2RrM!)-M?ylw6ko0FAixR>w17T0-)q%v*uPO}wpdzW~JxHrW4 zMa?$%%1s;$9da+{kLtF~o21INCXZv)j11Mp0T-^RDi-fVixV$ixTdY83myH|nPMEP z=J-ra6z;Uiy=C-$-QFJ#X@uWPVcq0#&G%^4Of_@VL7yTgY2>X8UbnZ`nER zw?({V?=d$$-_N+Lr}fzzofTZLxREi(-=Y=#x3Ml{A7T55*hkbpV)jvLA7%DYZXaVXMHTmPyc*NI#tGa$MR~R9!*B*$mfm_HH5r<6$dnX)Y;)q#by?`yp-%8 zH_WFzuD?xH^>X!f$X&A@o4($CWJ^Vtx5c-PXk;Yrq%PvmR__q8%%Q1+8;h_QxA3V1 zhZgM{1l82RCzRFpITZhjvFwSRz@RAi2{BZ>6BM{DDZchDM8l8Cf46A3Yy=w4e-~-^ z*HB?TJV5@t#fSHdK*JIA|J|a&qpd>vaKpPu!|Qm8LNxr6{CA5Fe>wsUv))A-w&3mx z@!?;{f4BHhGXf1$-bEVz3F}{o5Bieor1+3$r=Khd#V_Irx{cO6dk31w4es_1V4N$S zu;$r&wQbH(a{J81ByGi+gKPJtZ^n9a-`-pv-1o9Cy&E4#x|4@Vf7+%igY*w^LX>}# zhbe!*O^1T?eH_F^c@qy)eu&_d^m9B+`oG(BeURS4xl)v`#w2Ui^OdHV^MvN;I zgSTZIq4$dl-F@Pu3%kO$^LW)+vDr&mf4E-$&~0(Jq^?Z|`YI+4C7Z*C`@NZ8=7>@OEyhhI5I-GFlw5f zlS33u;LM}R`0M)OESiWRbr!XusU(l4l2b?1%z!3v=FxPPit0 z6gqV@>GLDQCvfJ`^ko&*n~5LoOP`3}bw0MCX-pnXV@@4SugZZ+cHqpT>1h?!kICW_ zlMkJ>ZD<;sN7L9-M^i&U6FBo|`k*x+vUvS>L*rg8|;!t@itMKGWTb-HBRKDH?uClO>SSX4!oAf z{Um>4{q^5if1OI7ZPTw?|C~zSZ2h&?p76J+^j7Pyzia(#tMk z7p;Hpvi>=h_WkvHg7ky(*N4(yg4+OM}^uuXN2|!W#~_?JzXn0 ztbb-AS)hOa{p8y_vru~nu+fG1`K)aB$@Q-l6vO(rc!c&odGhVOj{P3iUW&{@{rjPe z{mJ$3&kMEpsS(=yz{$6#Z`_CV?|Wnx>fc|=ah!1fF0PD!`6B1p;S;*RSG>mc!Ny&@ zhFNQi1{1n$Lzn^HG|&~?zxi5vk=(@rKb@XMY6vEMo(f+}{~VujzdkGGqV(_aJFCVj zxs%t@vv{yxN_ly1`CD=?ucg1w!a!H zi!6d~ zWo{9zX2|ssRp9#?xSccQ?5o<>&c!rayaBsX z`?#Hkeo)iUsf8w}W3wlymC5D71a&Iw!pu>l&h$teQh0YY&2jqPjt=*p|ARvg zCC5Xa0WDlhG+;K4-G%TX%?bkjhwXjFnogf6%}PB zn4-a-UK{$nI_?{fD_%M9J*sh|?gi$p36UKms@DL5* zQ^hec{gd>B3X#Kqyw`nOtr_5#>zo~fW_i%-!*}<3eVBD`e;e<6 zN1o@!a^C;W#n!*(9IQH+h3Vf1)-sQqXXbwc=|7T3&$xv2Y4Yf)bcgS+2hx8je?3%w z14+tte6;-8K>B6*mm3%>xN5yb)(tVU+5DpWW9r*= zAq%IZGkMj8U)tFap*$>=Xl6cJ7S|khHW$Hhf+rQ@{TJ*hE&{9Ozgo$z1Y$l|>VcXE z*4co~r4?O1Vs~mpR#WTrIm(XQC9AZ<5_AzP07773>B3>xYzPJ#crl|k<{^BC)#8nrB*JtXo z@rOKJ__lz`5mg4RzY%gIObJp#Ol+9H{vGAtRtP*9{@n-sFnOOk{>>OA|DsagcawjA ze3IkkXrb}46un!()jliG3N&On+I2m*FSSTXmdABRc^f~ISC2v6bSU*QR4Fpp6DU_Q zG|Sh`Y3Ni&7k~X9Mi*!Jx+rC~dOM_xP1(A5J*2_Q1?b}S=%PKci}@Gl8NVa+t^LjD z=-VLGElA%xX&*H}PsTo?FT=*mJ4mnW@yXEpNMZfdNp5T7E386Zk3t&Vx^T8?o?}&W z*oksxePHEFPeDQZ>iBbdw8VQv&zg9rQfuPRE44PhL8-OzUn})k{7I!Ai}&+59@8GC zUjJpkHtIS}#M8>pg(-hTwZxwxTa*ig!Pvi*K?oI{Bx&AIVVhsMK~(En@^^{;51bJF z?%UIUO8iwAn`h&bFbp1wPrmfx$?5Y2z~_y>l`lzA&=AQA*}SSpOZ+8et~GK+QomE` zF{4W;%A2GD^Sj!p4MY~Sz~u;CYHn2K`@hPva4lB(hO5l;AkS8r2J9ka8R~p`EFmj5 zi179A9{pFna3b`tLeY*z|2wKLt{OiHd%bnIzPzLK9+j|9g5IA2KTN-6Sy1Ip9;ov3 zN<9|X9%BI?wifVVtIBKQk5MJb=JCLMw-{TRvCO^&x284FZrQ>9I+5=i!+bk#jbUKQ z1A};@)ef}?ZJm1fv{|A8yGY=XxzG9(_{)*(%kGo3FW(xjFYl5)|EHZN;*VYdiot34 z{-5iQE=!#V{TIAF{qN{_y|3rw#_N^94;!!VmOt9g`@H0AUIN$<#+ZV)_eb*))UoXO zyXTL-e?s)Hk;snWPv22}nR=4?vYRgF=}Y3JQ#jxLxzUK@Uax4P{_y$ssiP;lV|4U9 zPyONaoU-|95Y2^fQ~k}`vkaCdF8M=ec06Z3y}{DljFS~%S5!Qc&cxS4}IT`*xH;n&UA9@GY2gcCS@vaYi zmecAn10$^utkGMamiWUwlH7UDQo*2cw=3LcJsPpLKWRZ6XiuT^So{C=g@#vfIR z%iZg&wQpy8i-R&R1$p+}tX% zmTT`xt&O+wNM5NGA}yrPpnb!xhvRzvMuW{fGMx=p*V&lIO8XE)x5%Sv?;e?%$}Gdv zwjl_(fcc4a`am_DlT-2%O%(9e6R zkMKsTpS*wu>IC%jX~WL{hxGGfC#9c9r9Q{6pN*r|&+|?|KeaT*D0qtp+BK6guc?E- zE`}NHSL)$-kp|Ejy9~RAuU|>o)dz-tm{i5a; zMXQ>1{&+S^c)>6qGM%qNtcG~7AhE@&=IrB#;XGsbdc z{r&#@0%uY9z3ptX4_UWE+V{6w2$fUNpwv4_y~8ytFqLGL8s(VHhw6Zlj`k-B`$*`` zZ3O!yHV&(l{G_tO$x994*BuuG-YjB)!in_}j}E_o2(IuuVyHFb1@DS^0qT=!-W9*N z4I`lSZo{$`yZH2&U2%QPF2k<2%dl(WTEc?4MuuyHwNSGRTgZQC$sYwY6WT!H1^kE6 zlFviM2>zoVGg^lCphQjuPmAnhDcimAdHR?DCfP@B*| zuV?)bh|n;ojt&LUiLX)pJ#uRx2m*?%su>K~P}y-z|AV6h*4YROf@-Z2m-l~82ns84 zp&;l%*CBv53}y!bE?Y5!ttiD!y`K4j2SRaf}LK*@&qNLCwsyC2j} zbSkjU3=|XY`U7PQ5GyxG%yx6qt-*Tn%9s9={MF4HEnBk%3kMYH7xY(`QlGL>`m6VJ z8>rFyt6x6}dH?zT>hdQHmqy{Q&OI)O;r8Uk$1^RRkUjaIz-R1bpd6-&(UZd1<@KOy;gZgI%r257uKtdhaB?GGJ zz8{~B*#WBfc%d@9(WDc=?hQU?0$XRv37X1k-6}62-v9(^M;Z4=t%}d3A2I~TF`M;+ zt7nlp&5eG-@b?yQ{%Be>(aoO&xN?KUJj|Xb@P+yaWr}|>@d{@Nd=-$O4N;}mn9v1n zh$*$!#xrZPITHjglB#pm(D6h0a=Jh&=y%=kv+XQw5qDN@5cBfZ53=~#zUm}+8O(QQj$%@A zN!RH3c^dUc&(BgjT1L;$-4gfc`1uaUf0tVY9F4s`E{Kdxx-^(yyol^1N@ zkLb~Fo?cW$5ZGV5aYE6LI0LDuVgtkXd*mk9#2a}memMRZkL7X3=5B`bqqeA&M|<70 zl5dxt#%W}o`@hq=-P`@Ir|tia+p>zm2yins{&l>!d;fRZ=gdpZYEI2smg3u*)U4$^ zDpRwr=MhcKTEt^oYSvO7@zkujsaf;+Ri2tPn@1!yt3EZWAvLQyHEU*SRxMd&sacf+ z3sSTBvB@MitDb_Zc8+)>Kg_=ndHOw#XOw50=QN(BJmWlP@UN2Jdd7HGrk+l9r?!Bx zJGD9W6#rW8S^+Oo><#Yg>itmB>8&^Qb@x3^5yuz;RGsSX0Zq@ON28Q^SZyA(WSz?Ak(+F-Hpy>eCyv+t^-M!cu1XVQ}@ zUk8RVQ6B+lTF<1X$mCauoM_L6o=MLr9g3TFB2csd>O(#2dnWzdR*cZ5{=tyD8UZR7 z<{n!X9ilBB=_CI+@>BC$>JpvK$BKBR#DJqeCEM7#US=F0b9e(>*0>ec7hv#MqGvnB8S zw#3w*8k>3{)!m!kxoua9@2_f}zUAdduf67)YrLli2fUut>NSrF$?Cr=1!ZEr)Ai=m zigl^Z#5xChTUJX`Q)}#_WsT{^rrmqoyC2{)pT2zoYibUp)~pdRw|G^ZRoy=k{(;Hf zleF-pLD=51S_7uF^OlQJEvszTW9mcq?)0vnThH^JH00RI$KPborHNlrfe%c>%SjbzxIC}nSkSP0&ptRcFd++N zOMIS?w8U2!Tu#@pZscP-YY5xF30q`W&%*mNB(}uoTYN1ifbT1X@GY?T+D-tUKH(ll z-}M&XsuRF>C{zI7B8%_-6TtWHh43x4_*RdEugq7fbtu)ITVs7jrQCZGKCT?uHi5)> zvOT#B?XKB$XRe+(&oBbUCk~Xjtq&BNU{KoC+S%;lSnL3CTQ31ENhyh6Vk^0=-zYI9 z61ORN%vL(;wk}l(?+H}$2H1FWpr5^N>nxS5ic18o-IT1hmA1RBy6v2H#7w^(Q>oK! z-D_zRTl^AR$!#Sb5sW(Nm)J^f>))#6>rs0BBYqV9#B)J8`hs zduC&+YN?Xj@)yvMc+>I6*G~k*SgZuSewyP$-IhO~E~r{dd9pTYxIv$1+ddmUz2UY_ zSMo92Z%QZIQp*vyRiCC)YI;a%jV(3Z0=C@3n!Zpv&X$^9Qo0XVx8s4eZtG3(_+f|x zQzwtMuSe(!#H*$^)_c{vBjjBX@xCtMlU=UtFGRg-!z9!x@7fr@W|&{4{Hiv;%J?Ht@#z_SDpDajbF3PuS$N^n_qhO*kFEDuiWrWerT?-E>zSr>3JDH4CAftkabRf zp6`fc&r*BM$G~1v0!X*uwGy@?#coR-sjBVmMmAO5i8qUH>3I}36nQ4c?MSMtRlNyc zI&X9pyQ|l;5}ashDT4s#jjqt6@TthXZ2eF88n=kReyAwy&R+k6@K8Fc^!TB4xzZDc z(sibO*MV_CR%`c5uZ+7)m7> z>A&=~R3I&3n{=g3OBYPK*ruf_Cf&nVUeuQ+ne@Ndv<8?-x7f7w(4;??o383iN8vvh z0tj-husH!va#q=#pjC1<*_?nba>9H-mPI)^pRhSW-^f{Eb2LZ{HQy)w;}Ad7I;Hr> z5^4GZ{gSZKAJ8uiwe-3C^4XR?4NiVPoDQo{vP>VLOF!m&pFdi`pT%|+N#S$*_Z2Ir_7V^m6W6R& z?bT-Wp6T&Jq@4X9EBYFlYvK=+y7QBu?B_?XeE_1xI(({mjEPQez3I7b0?|K;@vASL z8uN3))KsUBdUx8r`=4V)MZ0=1lu-@#)rP?K>!R(mN)v~|H1inv+?I|rDJ=5(sP_~Z zUH=hEjd==GOw7Nh2JL<@h*?9beO4^7zO3~PpdVGTh-q+>d+$DQAhi`_=|6t1w!dUa z1y^;nwbQ-#j}ZeIE67Ogg&_4a)k);u-btWtC+ISgRMMW!WYoKg^UsM;Ws$LAd zxXNnia_=x7-83buSEfRL-}5B%pyh;*x$KEjM5ISpNX)FDml;9-=^G{#De}$Kb~{2B z1PmpNb~~P_*|GfpruL?~y;u0OZ+S0F+=^oDO1T}K3t_>ppkTLs^y~w5?{Xh?$NC9H zy&oz^61^-P^mXTvV?uYx=)aeGhJ^eYTD_VZZ%TbWl=?j93xqzJ*yuR6?-xI2Sm?HP z$(mXAMPbJZh^bj+gyi10nlgALk&4p`5Iq7F>*>zi_;O!O>Frwb5RjOu{}Kbm2vd^o zda+~)b3cBSm9!Y~Qt)$SR;3PwDB+KqD7rJdfl-6s-#gSl6oBIHBaQJyM>v^jCp z>>0yIE4d%qrhtj)_-%-5ElTt|i9PW|x-9YL(OdqHp-wE2Z2k@V;cIhZy_}_nCxUr~ za!i5b1H%meLfur$b0v;Cn9F{}QX zEYCn&7x1j>@98pHSZ6i3y#Gnk=xzCP%%XDTk-GHF)YWgL#;n31?B0XsGJOQm()a@R z9-aS{TL0V@X3n{T?~K&beOs8y=H^}0eZ_1ux8mmQt<*7}Xk?D`h z-iPBW=vdFHwbHBIdv>M15>0)w6cqh-(&K)k)4Md1*jSc$!bz-;CmxU2G-Hrj>P1_3 z>e5$J<1!ONcI$woBz5(xsjGk2JP*l>cSNg`d>JHe3pveosm|UH&0rw+bf+#W>gh~v z>fO`3J=N|0b!TrHLvZ)E0NS+^RmkbZz!=uQ$prb{)EOx{3)?PzsdtZi&#es2T|1$s zE42<@vBr@89a+@x{ZO5(_?F%eHR|~U>kv6eQ(JqwSvtt)@0OlnynPFHZvlKudZ}9L zY3X!ZZX_tkSK{<_WLiTt%t&n-meZYHgllDeQaWjdzqK%l$Lp{|;$F1t`OwAor+eQn zDq|w7CuGJisKu+yYyZ#$2Hs=FJcZlq!njDI?RG?_)`W{F_W|1*%iHVXZtGo>5aF2T ztWz8Fyq;rz&0n;*DK)0wq+jB%@3*i_a$oJA4tbj^)|Y%C?6!Tx#X#PnztkuWtKSycDgke6WH(ui+( zrHt-9cM2xuXGy)>zg`c1sb^|)&$^agAGA+vQMv7I^6h{>GE(b$KD3s2m=W33x1Iqs zY~1zzDi}lqeFuY|51Y37hK;v?%1ynSQrATx7TTn`&L$R2u8SbHEDrhn$|bO`JBU|I zPhD{&m3l1xAN0-r;cD~jh%5y5*Xpg^iO_51LrT>cjcUb5-`W`<%wa_DhrWmG6#(V7 zuZ1Rn@A$m04+KP?h~byA=*|V`d#Z0g63aoJ8WXnCy}Oo>d{;_dN$V5T5^|C$Uu{yK zj|DulK1F89z5Ayur9!}CROUi~d+!q$dZ;Mqs+Uo8l_1H7crbzj6x|T2QH3#V!p=4+ z64{-;Z6fWiAiH^~agVZ=6!uJ-50R-&J?Wm;6yN}p zqG)khy#LQA?ztW$7AuX|n8L1~`MGMz4@o|r#_y2R*uUz>5C;`4dfJBbt$xpw5b+Y|DAyxDP4DG~8nMvp zcBlDO&c6lxt8?#O3<2$*E^qC2TNd(j*DeUzWL9<8nfdzem%j2|V~q1fzPWdRYMU_g ztUC1?s7)I$Eyq_EVa;1QVbj&I)YYY_tE1cyA+_kCK72Q>)o|Z*vj28e|@W7)-PZLpQYLd=TP2BqMs zKO$#;Wetm+uS>{7I@i89Rr2LXxrj6StKYH($&UofXULB3Y$* zS=~LeqPbbZ%DQk(`j+pQpX;MFeRqCCMnRE?m~ExkvnLqkT@;##W!Fyk?i-lR=7%XO zY!Jlc>L1k^JN^LL();plliikAm&`?0U!6Ag1iVn)zW<#!LlPNwJ2ufr)Tym-M%sE-c_*UH_Aow5T1jGx{GT zErQ-|$kNSn4O{-zx%d2394!c0i}>81@ZgclriG!kqDX3gXddCLVo> zMhV#it8(|7BG7mUy}B#s-wb0y>-g2kzXkm_thFBE&-6S&57B8XFkXR}meC?X@vn}5 zjkh+mUs}$}?v=ZC$$G)1&fb^4a-Oks`A&hcMENH4@HwAd_8noj?->Rr17@6sQB~_U zO6WWBzaYCYShvU=u05Y_Gi@NJOBhv>>K=HORfZ-rwzCY`G}feS%mHQAV)eX`rxBg0 z7bxm9ywuB|uS`zZIM#7n|5#!8Ca|hEGKVyV!SDT0lY*MS1PY3GTpC0DzIm*Axu-e4 zytR|s%k3JFd+*Kir$a+*8|b|L`~jAXjg`Th|8-O^szsB(QmaM_(c7L+moYD0+QTwW zZZAyW<$F*QxzO;8{`KFVpm*C#8C2z|PCx9*iUv|8Jy(`$ijFYNZ1mR2iQCJ$PVNr+ zB60Apg11NJ8Ny6+YPjI;i#C&xv)t(T(u-s5U!)d*(oi-F({h8(p8Z+_yOyp50MV)tQWy@}@5t*`91j7PWshl#D&l zK0X=y1~VtwE{}_e=7erZCDunThV{$Wo8XHbRFpkhq-j1&^88-8QHjBgh=ez?V^}p9 zWYds-|AvRxRkghOpW=SnQ^_zUu-5bu(wRQ2%SoQ^)+d1`db{% zg)i}A!}NdSXfFKEn25quGaKmmovHV)df2gIg0u8?;C)?9Up`-5q<}_;bP?A`(y^K}M8+S_W0AG+_KS4j?#Uwti3J-Z=Rw*sWClJNx&lx ztx!h(s_n`r%J8kM={`y+fM%uWQ+q^?M#`?9^xYB{1}gnEekjaIzwoM&r(!;tGK|&} zHsB~qdxJ-hF1BYMXln0^gqTXM7TxdEW3^4yg;Q&yn&2DVz_Jw9D1d)H1e~p3c10k4 z2IQdEiT>im6UAtEVqU9qgO$a}oG zl4GE1t9n__VFkCkJ@PG6r#hZ^Vy3f`Md<#=e=8y{Ypm(Hb5~+RnHhiP%sPv|+<>v) zkcIHsIE04w3lm3pU3DSjJaHuCwrJC2JKscTB6gXrdZqXlUE$Y_Qcw6 z4}1H!>E5^qg>`IOBXA`Q4}FU)tWFySR-r^0$x@%*);ChKLeviRObANvc(0-8hDg=+ zROtSm2D8*!^O}i24EQbm?4CH}^e{{5iF|V?|BgR`{8F>zYwRrxXo;6YJ)!%1Lx0U` zZOzW01$NUYn6b!Gt=)H=QMDaHTjle+?oc3A*5R@dR8=T$N4;z!6*idd5D`B+0amTCeU*?X=q`KdJRTwt0?2Ohg2gm$)eebLgF9I6~ z2p|H{YEw_y!uz!&)hfxF6gY|4!(Mi?_L_%;G<7gBO-}WcNtx2 z$G@)cnP7S{M?LB4nG@#mc+VVm`UEmC{d!spNIg&Scg%B;#oEedYMe{MVJ*oUl+X;; z$T^^;p=d$WPYg%B)u7(ex4vhy-N-Z%c8Nsr6$zvJHkiZ}$%wZ_Fa;rOMKeO7JhbPf z=J_b0R&=_+#T+=|Y~`0^I-C>7BDW8_X9+%!c1s=cUIs<>o?}*b%efy#aLC38{snA_L4ZMr! zbZTBT!d4Jm9*o}NROoLp4d{T$_Q$08ea8jK%D*t{CBYEBt2cCy@bna_ev5{1w5pQ| z?Ui@cba_kfdh5>DdWq&_3X|WKOY*u_{-%gSuA3*YTgvNNxN_goJL!9r8eyk0&d-=c z>MZosQKuh1gehxGmHkBx`EIN05A*6^m^W&edwt%a_OFFg#ZI@=i6u*Q!Y>KmJ76$e z7TFkzi)9S`$iM_V03t;wk=-S5Z9|X7!n&S%JH}1l84Hj1emvMiSk8J2dJCM-CetfE z98LbS>DAUuuMSN0wk}*bc=XN$cYD!7V`|+(?-E`Zb(gTSk1-mqiNsS^(UY&3o&>fc zyFc!|Wt1f=u@U3Dp4Xkz(PZ@^r^gs~nB|4y$&fJ>G*E9gIn)2Z&L=AuId95Ir9K{N z|9FJAS+f+9vS%{lzu%e_rrTTmZm+l9?&_)cnP3e7?j9U({xvBnZLNYrRqUeJ_F4J~R4q?5Ec{1{COy}s0S_jTX3t6gl>dP8!9a7O}F zXS`s<+YG@FypRM8{J-Dl{AMzfq}2Y`ec#>ByL_1Z&gD7JdCqg5^PKy0oM(c9c47SH z(^EiIivyI@kx;ma{Hc0RUl)_2JJRysf&9Jmb6)zmBx}Y?D=SP2Q&zo!*13IG4(-Av*zpC ziR?zQqBrniZJz^NgQ0q9qb?Y+FH`qED&yF63FdeLvbQzkk)O|9+Aiap&|#-lmcyGbQeylAjI z5-hXIN(o#LttgBJDHX@aCszHi_^RyAX-rp zT~!aA5?KYsmO(O0Lz|uLO%2U!;Jx*k;~PuPGoN$K=Tqi`SD*G}94s+ej}KXo!jbj(ko71dS&!n7^(Y5f zj}KXoN+Rp=A?r~)W7Vb`GS#M;V;oVvv$gwTN3?SQHun*U>OoDgLJ)reKpbfxteLr} z8j=4}-9%Z@O_UW#r!K42Wy^J0jV@aPq19#8x@-Z2S(nYzWmQ&LkuIy$WffLgp)M=e zWsubZT~=z9<>|5#v;kdKj5ejqf>s&i8Nh{@9#NEoZiu&4=94yn27?yijpBdM^-8NQ z^V@A_M|6kA25XszZHKMP87*@~GSHsT#3;#5O0r#_oS*3ZC`D-CEUOTTE32kFG;m4H z)uDm0s=<%ZOT)V>F3Ud_IAQb~20gy8`|>Awk)UDUvT+?VCS*JUet8{@-WiSMGaQ(K z-`Oi`Fqcf}S+*BhNoNi$ALv*1w>bBNH7d!TL z_BR$QN#SC|8R-#dmc^4M00Od7Jn2k0#uJB|pcB(Uk-U78ltZONG`x&7kiOzc9ylhb z`c^QF-m~C^j22Hi8xF{9@uYL$m`EgEV*gYM5<~!T`J{6hab9`^xKutVixKCiM|cD>GX)R7~x~Yg^s;+Ut~UDMng-uY>X;tYwgcOo@X;Mn}DB5$8b)l^^(io*u3Y1 zGl|*_4WM-U(PL=5dt)j*MZQ9ZX>P>J=^Q$nVocu(Q7OUJgHG!w&hri|Z8(K!56-W0 z;)|{dJA3y`fLp(m|8DESv0?8G`7h($drWA%1CICP0r44_DWWrT=`ucDmKAzqe53Dk zp)HQfF~(H&yQLYrtmPgnPj|M)$H=4*y)lMUZmVFD?hL&?UhUccc56>x*!_fR&PRkx zH80Izi^&&3NAM&JE(6p@ZWa zy%%921B;X1nje#;Rvw2h)&hu<_X1tO8gyG_E@9`NVxiM!;jhTTBERGU?y&|ew*nWl z)pm^Cp^0&mXNZIIP>)BEn`{3OFvm%5I`BsNJ*k{@Dt(3FWHts^hJL$7Mq{E=Dk8x| zXMC)5VJLri)~WawNN%D(Gv__IV2E|Y7JTeYLln0NbGG^eV-d7l?+-U*U@^9?Jp-%! z7=IVQ&lp??f(uJ9aOJ@TwFp->Tv!Z)YXMx?NCwh1zzvUEg3IBWD6Zvj;mjyNOW?w3 z7P#iY<$4e69qSBKQJ;JCP6trX{htq4HS(Yg+z*cwD${K(?g z)*!e>ADDvAD%OE6|(&bLNJhls>l{Fdjc}#S%$}!y;+Tx1TpP%s(SES9y`63p& za9!&~ryYSLIj4&(I9;UwbdkBIi!A)pk!Dx-Psi6{lkGI6$v$1=f8bt?}6Lq#n9H6uy z;_QImA91$Bmuq}J`1Fa%C~cA_ga#bvxBNA;#3*z-2O5aP5v&}9 zaJ|9IYr3)na-5{||7_ zo5npXY^Cf6)*a?x4dcNF_*rj0kD1SOr#07QeHo&+#G3BL@_mhtLgcG4p@63X;mfV* zoM%uv{rJ^tY#=*YV^~aZj@#d*TTxT~miYK77)hx=Y*$wy6@R-! zKFG|!N#QO)Ocb*ZPOIJ6QI$!7=Rjs~Pyy@UFfqmx;GdEdYn`Dl;!6Hk?xT z+=MTRl?OreKMTRhpdv!~a&-j6#Ymjx92aUItG4a$!nQuiZ;hS6;p`bN>EhoMU~)F) z2r++u52URCskw8Ii!pYCVu3eGil_e-$wFI86DJ_H$!Q3TM{xpTKL@{^`7JmBajY#9 zb_g17#keqZ5a(g~F~+vnCmu75yVA>p0UsjVTEtB5`4$!O`*rQdfD7d)fPyN8lRZQU zzaXs`1l54BY7khf+jMK|Ar=dZ8|Sj*QmH-r4}yk$Q(|g;n`3W1_i}2KUVy z7Mn9)D#x_en(M>NmRy2jSM~cq0H!x3oVV4W;5an=zg=j6n7d(%pGh%=gF-Df)3|ll z^dcx+e(pF(Kq0tZijJh*aU8y){C(X)dwz`sen$jdM-fPxv4!M>OTRLJ910rU=d9Xz zF3US!{pbv2g>DnGP>}Kkc#xzJ!iaKlc1E$<` z{&4U8KWbQN?nc2j5+&?Is2Tl2>)T`ZpA7XlbWKwMYGlfb-|wbM&^>GxoN^uoGPbyU ztf$!RbGWctx4FW1Q6S3nizr?m>9kh5hZuvX0!k_sO?!AYRx7uw(wD;JS7lh7Jn z9VZ|}g;Uy*EKkjdOs@79IjYG377DpEI?qkW_omYGO07jMy$7!><{u3l4LjdO!^xP^ zs_wlUZQRIbfvVq1g}{j-+9C>8?a!f%7EKZ*MiFT}(ibj$HbXVv3Be42Sp8kdN2vXb zDeWMkkLr?34wF!*pe#A$@(ub%9KH|~`{&^m;99;Bi4ce=FB|5B-5XNyeHQqzz!VgO z1|8Oos6@GLqz9N{e~+U_mX88V7=NG33T)v#nO@8y*sa~>Cof<(Y=4&gv)QUjc9XOE zxz=~ahD)yw+Ded|28V+5up|(pB*vaDw>R@ z)mZ!~7+>RSxOKS8NmNTz~B8Wv+y7wzYpH z_U!HM+~{n|8@PZA?%(j}y?v1>FfxXK+H)|rr6bUJxw)gKzR?Q$%N%>9pRz{?rmxb| zaZcr0DAvS*y(w^~c2_m7`CB3FIMReJt7c5ccs8_hL6qq2ex8#2?mwSArOT|_dOuoj z0?#EWc*gyOcxFN#5_o zWXg(MbErcCk4n9IreB0IpkItTq`{C7}|L;Y+qdRRzkx%Jgzt|GsT zR*(yS9?(*aL5lMC;VKU1x#6PA5mBi5GHg!wRp>C$KThdqAE;(*1q4TGHR0;N9ni5x zXG*uZ4@F6Kn|<&gNi~{F4bs#izZ@J+Xk}wzrwOEasU7Eis`-4t_}PJ>^VFvE%$d@U zJkfb}wDz#`EMn(bWEJEmI#22scAk0rd$3pQPwhT2n(! z>7^58>Np=EPiZZ;3~McGzLRV%q4rXcR~Fw(rjM+~QdVPuRO7wv$Iv^=eGnVax+$Ax zJA%}L_PA(To<0!ja_DJ!*4$h~*6$~8Yws(#C_Edz4LNPCaN5wQEkD@lx7L0@t$9qZ z?Z;Qu!_;U-=x+BV(y!J`v}Sqpxc1!uV^;}L(?63W82vqg89VB#5+}hY+IY8)fn+eS zW-`X#IGoGojoyclwo3Sh%Yw0s9epoN*;{*tekrhHN}IZRuie%iJM^`#6bWxilx~*D z=U;&j2@YJBgX60W`T7tDGkHg?WL&Sq5@Vicw z8Rf6JG0_0N=f+u>tF0NXaPAf)&(INUrG<+s#+VkPHq9u-uGaC3^Y;e!Vt96M39#k2 zbYt77e0(W}lmi#%??71&se8YG7|iFV^e%fNLDmXy!>O7n)^%>|CVbIgc30%LIF7D* zO2&`hJvZ({DvV!NZFJZp$}?>=dzW?FXu{JR`pR7E%Dk<`_Z4E%7vt^tSE!uXPL5-6 zV&$F_zIlw=z5lJ&cL$Smj?my($XN}J9FP~LI6A5}{q$vyQ?ADm#n51;`iC|&Eqy(9 z+J5>v!w2>Cp7=4&*QYI5=+F8|q31crH zj(;BC6t%7D*W%LLt#gFS_7 zeDU=-i)zjFvNg=&XwNhi6!>o6C2Cz;Jix$OTRrkJUcVj~nrm%!a<0`H`)JCGYR2(U zze202QT6X2!`7}bq5knuY6a?^pHLYZ%;DQ}Fp$Uv^I|$aglJ195j};fI@KCGIpujZ z<4^Rs1=pU(H=rXp{hS%xW#FReoqGZmqXvFKkNuEaaglG zNb6Rm9auM_j$q#Bx9E7Ng#~toaj^i5aOnbnY{eVkAEKcts{xwBeP53J&l1%859V*j zJQ}EL)%sS)HsA+xU^N(_u9=aJr()$a1Bm|`h%di8SFQOP)hUZ)7lI9IubR;o*b=_# zq?Y*@4ks3bFa{jI;tbGG9bW}L!}tX12D+eeB1YMmyBDAiujE+1Ccg7{Lgo%-@&NP` zIEZc6-|v5;U+b7wib2Fx@pT9`qG`Z*7T<0N0PE}cA-RnU1+(ype;JXfz=ww646&L3 z{Ezs=TZds@Mqty#3}!Ye0JA@gml{meqky>|AFzu?!(9)vnZhDnaxezIeZD%`z1SGh z%hYucA^RGryz+Pzm8ekzb|X$5+gRvQ5@V9}aHlq6)j%?2Mc{wJk&YyFU=v6|GI1D^ zWpjw2z8yCmr~#hg>*PbD%SIF`Ss;uqD{psY#6Oqbr~YynOd(;$0VbhIx_?c~H>QNd zXTYO7p?a}{>%JzuZW7B(4PReDmvsRyZ?2gXWCO~wZgA=fr*(r%SGcSj+`7VT-Qdv` z9_t3LuJBqnWa$dP_;iI&J@L)#`8*7AWiCV?+rjIn5=Ho$3D(yqINsN@CRj6_de$Us zrc2K{+nVXtv(B|mqArmY#KqHPfeOeb(Tb{W0E1$SKoAjH785o zbdfd3r*FDMJ@IwW`;E`qvcarggXE@URa_AaS6&lL$;55p*7{9u$;2a>cqNl8$;2m_ zWJ@M~$t1_lBsV3K#cVt4MS8=_O6#_WJYsp4VtiR@ZQ@q*Z3|soKq`YGD~~^h?jRxd zSVtv%b}BqX{xZOe5u#Dr@Mqpl2!(0G7s8L;vcN`3bc<5a(GVt3zOw)*AIGq4SbyL$ z{XxI!4_c%@h#y5=r8fO>6lhaJqE14ot@+hqdg6_tvEN9g^7PPX++a#oA{B^C&9)qV zj32Ija{Wuj9_e?!Gl8Z^aeoZ~)aqTi8MK>q+X?hiMxes_Mg0TV zQb#{h6kg+RLGi-4vrGh>v^)o!4BR9S><;4?sV?$|w(>n_j~ik5Cil7S=PC|3cv=Zk3$_$(Xk)i`HRe^WETLL(+^ysQ`yUQK`0Bu z&$M7<0c61hvO&_9e~Jjb!x6F~)2QC_Dvm2Lqtm)g7CCPd2Xfve4&=O79LV*L z;y|tuaUj=M#DQG9#DQGjgaacr9uN!aYms|QVvze`I;JD{Y}9c0A!+MtMRL~i{*%52 zndgWDndgcFndgZEnHPuynHP!!nHPxzne&8+z6O~WivyXKhy$6H(s2bcT?N(hRFHgM zO9=yesB2iejc`CRO0ub@%!WDIRF$oJq~6yEEU0M`2dG&m4p8$8ae$ij;s7=Giv!d= zAP!LTpg2Iy!*GPxijv|O84_UTt52>%-q=i-4l*F_CA8Fh`9o&5{2l}~{7m*`j*O=p z;Y`ef&crdG#1QHT&kUu^gH*$Bu+1Vvs9(Sle&&(ksc%h5eI*YRrKK)Qr2d+u4qiSi z@4}SS{Uh@3!$~K}`)xQNu~lHMYwr()$>2XS!;tIFW+-RyfN@KHn-T}beIw)6NDqPg zD$}84srB-Y0apo>m6Pffl54iri69%%IOX^y-YIPD8t>R9jhadxMmE^dEZa8JlWZfa z-$f7f2qI9?FpK9!d63I01W;RS#h~r2@wmV`mZ!+WkCOKes-eQbR&!tOhdh=McAtlx z>T%H@W<$xt(h*?0uaNl2N4TfR8?RAgK_=?^0j3n#dsp?pLnyEBVsDy8thaY7^rxu- zui)hGu++{vUdw%{6IUzVitMosaipT({K`Sx2zvu@ya1D)HTKdY6Ay#7^zfGts~=s9 z;VLMJ4UyOI9SP!1Q{KYt_L%h`Tp+MRq8Eh@t%}~q;z#dexoO7vkZL%D=@6_xl>4jE ziK2Sug0+}2@mAe^?5EdBKiS0IaF1OTVXKRqGw6wQJI*Qu(6f|7ZRGxTFDl4R@Ce&$ zHLhf#Q>|;e|6+kD#eRx(r7s{sk>0^^Tzol39x(3|e;KBw7q)XaK?M|EGfvdZ3&&a= z`ne~UfNa(99zYW<2k$@O##735>`C*r605QHb?ixvP8EK73E0Bk;K>XiPPD-9rr^2m z3)5c(+ax?@OZ8y$z%9cE-TCz8}#FO z5?COCZY%7Ozyb*@lt7OamPZ>Nmt&@n7fGPk3TFvqkwD5k|@|nJ}b-$)mLTf z$Abb;j8s;*lxZI?mXH#|%w$H;BX#BoxRBGK8jswy3v7*W&5`0UH zFBS0CS~0%vh3y1DzZ8Vb)cw{mbDY5TzF%Dfmi9lGx;s^Q)N1#%b0Sq{!HR1?= z%r;w++LC*CBfbC&Mz2P3QU6jn)Dx2uH>njD5`M-o+@yYbDTr?TK~geLAv37I_-&)4 zxj@oj9l{a*j-%1>Bb0}-jo&8Nr+ zY^rYorwVY_;-G7?IR-k$G)XYAmW?vrf*cZUjFkQPHug-iB+Mhx#=2AR?EE-*Kv*$O zDb$GyfOyDw4XQ3|CAI605a+pGg?{G9`3Y%5EgK@(u@m;9P;bET<9OJ^z zNX3Sd>_}AXhe*TP(y=M#AhNnArHV>1V8M3CWcw&CHY0R<81|v1zEDq4lEro<#mUG- z<(x@?KdS(rB{lj5Q!AnbVa7TIOY~z_O^^p&(54anYxCDyb+O+KWLG2&Og)hC_K%G2!IYGt>l) z2^S`C{#_C99_Pc&B;~tcB7AG$!;a+xz-EtgU@qbp@Nsw=eyH~w4h~i;vvbiGuJf+~ zbVG{_AJudN7rHwu6O+w)!~h*rKAAo3z*6-Mq(a7(*0daMUxd;5+WGL1&3hcSnfYRI2R{Pt8~#bvq;LWapKSD~C!(S`~GeZW~9_I^e8iiz}4$0e~} zZ^ybS>LwT5}P1lEwd1I z3aE7~){jp(l>JSFybI^nP#Kg0|7{JGCtVduSEcRh2vyOwHT0ci)OVAvyOORIwyPub z1G=ocb9p%9ZZh3Am%{Bs*lR&$KPcG(XT6;Mr4MDir;xzwBq+ZH^9F)pIfc?=-JXa2 zO?!U=Qt>dN>_aDL^OO-B(Z8R8$z&oPIGzAj7mdMKn=q&{4sxLWbL-kFFi1dM)Dobs z<4MXdRyibojj@Ikt!vBrx&W2lKHGI(UB~jP1*j0YJc7(%&GRvSFerrW;y#SwphC;X za!ODguKe71e2ZJ(7>|Pj=r<9Lt3-~M6Tazrl8_Fn^rg}oVA4_h;nytBg_(lc8avi#r5(r-@YNQa80YLadQQwcEurern zjB3qSsn<+>LSU(TDU$NkgV}z??99j}q>$nl!ZU}^asZ}^=K8Xe53Lmly?(c1PY@fXp* z6NW;94f`SwThz*8mA8uF+Yv&|EOrd%Aq0NvXJPsRZfho?%Idu%jr;E+k$J+P&WFr0gI6!`aBn)o!ad`Rle43&xBR@3G($} zsTQ;_)cZpPR`FUVg4kCes4&o(`RKFjYkg;3I3{ z^BW%-3tx`$k*(J3JOtz-fX)0mh*;?4M0L**j8;P@9V?YRE~Qkwk1!()&`!nH!y*uv z!?P}^M-W2BBZSpphmhw8VGY5mq}iT-GTgh+pMBb@Qu%@!6L4~ME;3W9BCb^@17xjh$!Vmn)rYj-D5l2pNH zr1x%PLemV)JPF#1ZLS(W0B^8Z2*EnHI!9HI2z%!9^q>c zUblHYg6#{9+zC6oC$U!`hodm?ML_pkjCv}$Lt;lghyW8+H9YESiLz#S!fWpbPsw=D zJ5)F9?_y`RgD`?{KX3#HJF{4<4Is%1v9Ki)zYP*5>oXkB05?a4P$!j~HUN}${X<#Qu9vnJz0b*I;2%0MAr5u8Fi;DshKn$QMK4e&L#{BMpuk|m>^y`Y z<@zvA4`A^vHf9gsHPO9N$_+|Ynpupa=dh zS!@qmT=>NjQ891?t6rcYWUc2@rJ^s(2R`rj=#-A;7@!!B5IzE=urwOXzE>NAEKEXaQB0t^~>V{_$Q>gfpX&65M z8#wg(P*9zI()6hW5_{5AzY~dYI41lIH7iEx)TL&+$Cj)b4%o>5*GS|Tx?z%+zuf_| z5SPTBNnn0Q&`}Em9rdn3r`B;91{272tuD0jRk#o#%0gizXXp?9xhyJ@S;W008=I8a zoME>cA2^!mY0QSZ19tm5LR_WCR>x=X`TdXLufGjeuaTZSY&N>$cOn^Ssy`pf4t1pJ z>p=|asi|fKPzy6mA;QnFMC6Hpg$t*eI(j zRB~A0iT~{=(EC|Za^e& zwMBcdJvJ9(N*4@3wqQQDJ&JSAnUQUnb_SjJw9#~*ylKP-M!n z@$V2|8*=3nNH5{cP42s5;8VxF(~MPhLAUvM&Btdxe)GvSp91qKGM{4eDK(#R^QknS zdFE4XJ~if3E1y;M_!!rkq-$N$wLa;3AnAHI>3S^b+L&~0PP%p_U4KlvUP-#%Ou7yy zT^}S}AK5NpjD6n_Rp7Kdx`~x&l{s~jjNY0Eik&TRO*gqD%B7pQfnzoGr$l)q%B`EY zV`DWjt3)bp*T4plZsHb=)zq63l`T{$?i~7S4vb+Qu%dLu^=R?5~(n$1BE%dNj8O=A}LX25|yi)$|V(9ok&$7 zQF*$lQlj>zL{&*tfo_^7QLL&&ss$2NsGF)KYFkQ_EF!?lQd5mYv8ofPmP@LjZmN~2 zmXxSf5>*VtPZG5;C8|-PN_5j2iFz_6s!5_?E^3`bJ(d#n3yCVzP3t9!Q?LXX_e)f{ zZhAnX9!`mRP@*by)58+=U`o^@5>=_29+RjCQlg%es4CsGQKIfoiE5FkdAez{M6FMW z+9pv8bki=0;*>u@;a-WV)=htusC6k(5s6x&n_iKqrj)2IiK@{}Z%Wjfl&F|QE!Rzl zC8{wcs#l_Fb<+nDRi6^oFCnWCqMJT~8~To_Qrg&RX;Q6-Tcusr1YP2^R!dVdK_xDp zge-AetECayfgT==Eb&^arTN%_Sv)6M;^RlV+ZE&6lF=SwOSgB z9hk>Ml_dq%>MqbyX9pJYjAcoYwOSg89T>D`X6uq-Yqc~DJFvu>>DMKt)@o@Kc3_z` zGe?({TdSox*nt(+%v@bkX|0xqU`0c5 zH&R-x)sNt>&5cHimNm0fH&Xnp)eomc-7isPy72*tdN3u5Zfj<_ZX~?5ng9ueM2Qi?y0mC8EeZYvw%NxJ#l~ghUjpz?!*0 zH~vwgSjZY*T%or1={yR>xPeb*yNC_t{p+E^!cH< z6Gu;$9h`ep!d@KHa|}TXQ83esv4qzkNQ_4^bw?!E(RU!~8xze89fE0S2Od%VYK8-Y zk@c6dRW5rOg9Bic^_1&n+2FcOpGAg1Tn?o3FjQI)9TT307bWnnmNPod3v&oNVZ)V= zS>aw3%rI=HEdsIUcV^te32xjW{0z2TuvjSM6 z#Sd?wW05)99&N{iT5aZR3_?ng)gJy1#NjJ^xyTRe#Vy2xaS>4qj_ok!xgBjw2F}!An;Qct9BPM+hceh>-5u?SJO_)HEJ8_2Ok0HMvXG;RD}6ba z5Bf$ zv%yoK8V+JUKm(s3urwUXVGWTbG(9}TB^#MRW6U|XBcm;n5g)EglyEnyh&&O#kx;St z3Bw#N+=Bu~?KI>VVp)l_ynGO8$SG9jvIZ0o_uS=g2}sF{-b{Ijks_#;Wko zA?cvU_sTBxOT7Hz4i|6hrZkQg((5Lht6*a40NSt&3FgR{v~qRSpLHeT@xM)D~hw$FBR zev7tRXlurY!gx@aEZjoN1>v;jmmT)*#W6N#2zKRtt^Ce(*0lw}zi4HvQ?`GWy>8li zQvZnY7aC~K0n#kAbRQAX>^*fT5$A7@_H=)qrE3w{OK@Rgiw|dC?CAw$B#VYDTTp_U zxtzOz8P2+cr`yyfI6)pxCoH2*P3f#PaKQj zJ{VTb(_8b8CG3GfvuIus$i%8U_fcJz^HD4*a04QyVwo8*%8LFsH*r6EHbj|6-e^YC z%{GolA8I}qI+0oPrO=6SH8g7Dn%k|BlLt%if^cs9M~5;q68W9Y;JNV+-bPT(XSpt) z0yt?1FrgpW#E};tL2x5)4-R6~d_L4auI5~j=tXvNyAMcRbK}jE2Y7iQCFH8ZnHh8A zGu}<+|L@|*z3+T7{P8@)H zZN$j}JUWQ%++3|bvmO`FAA@#j*cX1x&yo0wPvbQboMtvY%N=sWwfl$c5ce*F(Ua!^ zk`ZQGi@Dxc9{+g!sUGiC9dBl+j(0Ouz+a~V)peeguj#!w?civoO$sc8pP3Q%H8_zL zJa^-5Db;WfX?xA8zU(8FQ;dy`Ih(D5%T$hcoSNeuP!(;sZB+ZNeoX}siBV$h^L3k9 zRMYr{KY~^@{4=nk81+-QzHQ2fy`st7+MD5-f^9V8%$_nMOEp}~;7d_NYns!V?ZQsD zqsI|*9CF0R+|DtA8|C?1{JzK1t;~`#;fkl~IF+GtoR_K`_ZZN4j>_?!sdD_2)toJA z&K@=Ac{S%XHRl~w(WxrhRmC4czX~`n#q&$G+v0r2OV$%-c&zWaFa4hD%o)xzXZX&X zk$pz5^*!&UUpb>!HC*-|Ojzp>Z6Hhqykkh*<`kwjrPfByHdKh3vpZ2IIWI}I%&8pk zuxu4OSv?1l0(Hh3QUUik*3z>n2q~YT!$pua9BVrR;|-n)^x>KUL_lxD7{rZ-E_s?R zoXfoi9+~nx4k4BmftMxv5RenT=9Fq?RGw-+S2eGI(VV$_dBThIg&NPw?02*U+Ew#7 z_&uG+J5K~)8hbwWqPexxJkHV9d3?S;H|*U5rR`PCQ!@h*#$N$EQ!^dyohRn&8!{~z zg>KG7u3oFa9~kHy2yE-@cbp{2^Ys`+b)H0|KU}@R>1b8WGcr2|=Hsdy`wL8e0=)^0 zGl2D~3`a-j$@%(wnMj^PYE|>HOtgJi7{2)=x<04wRU6vXhBz))L|O-x+RzG2PPJhV zX%5iHn!9yCg<;H3HKWwarL`iI?*nD44JXuw4z=NZ5QH?9{_H@1YrhH?U8Fk#5M^Xg z*xBECvh|cw%{THro~(eB@cHM3^K}JT50~{lK+ne~auAved)9a2_w@;?`66&H z1DF1{sSVvy@RMr8PDczy)-pQv1_r<^a0&1WCg_OTuoZRUQX6{69DMr%F)P;(c-$H8 zXg#4EJjG3`LmUbFItM3104Eoq{%f;nRK?SIGH|5x)O>xn#7nSakfo~5>Q~KoO#qGF zKp!E#5AyDspm$G3en{yRfkFED`a6jEj;nJJ2e4d$9){cj@@@bVP)eWURie8MA(eT@ zfiBBt77{T4QsbZv6hDQmH19Y>3ZUOcEJf*iCpCorH4SDAs0{}kCr~67M!&B%L@CD` zXqU+yh@$q94UiFBAPA9*00ex`Q%#g zuDLp|A8-3$veS7gAVe>65kw*!-N46r7%RFmuOAV756gpOH%@@V>k6D;)J>q`#tCRw zj@R_g&QlIHM7*&5{R#RAO68jD^LL(vSPA-tNPM-+VPuCq&8A?f=F+U=fum%{)j$Rh zZjqubWI6VbwKedg$?%eb(*<$LgZBSN9;Vt{B%MWa{$}(MFGdtWA5k1d7r8_i!8VB~ zA)}ItY+aO4K+-rkI79>D?TR9>)EO@5MGN2v6pH1`Y^aP;&A~*2EegB0>0Wf>D8du=T7Esh3T0&r_gLdtUB#d10 ziR@(RR>$5zCo~Z(<46;8lS|iTfV|EDvW2(KeY!Ky3VkQt$Smv&UpY?qLV;0dL4ARo z0yuMVe~o;F(52`wu#J-uKeEgLaeTO@03r>(Tm!+qlpKNO0cd))0cvcoV<-4M0SpPC zk)x%8ArOpQziw3Gr zISEcdyPwp9(2a&iWJ|Zrq5Y0HN*Op#oLFqT+uU8rE{A^+*@FGqB&$iBOk53F=M+UT_=-jn4&MbnH;gC7G-+0G5p-6PCNc zCW+Es@UCnUI{kPjSk#Gu+F;;ADZU#D9IRO~P9F&Dk#^;zAG=hdss_oE1(U!=PoQ%Q zn;Kxz=?# z#}U;$x$_hXO3i|<9wu#|Rxurr27&>OJ`(72^pGESUx3<|N=EuUVBHQR6ER?^W@Slp zImvP%A3I)rXB&;(iEb4?_d*EtihsrRGu-|Js$8+q?5-cID)6UlY zoyP;cD9snq{jwwF=pOnXXUUsqeGcKwH-{rMdxDeD)UnkTl*TuS6Tq8i&$;L1I3uUjWr0S8X_|Hf)m;OUXF2KvTNo?@+>I zp)s`*_F&9&2%{C0Vp5<7#dPDbAt)Gf%M|t^)+P9@-(%Sj=+Q?ev!M*NJQ`|6%M%6Q z27T1DEZ^Trn`4b#WW*GboE-bjqHRR zI8YXz7Gzs`9H+Fx)2itFS2#nPojNl2DXzUd-Gas#|9c#Zll@D|0p-Ku^xA1T8wxLM zSbC~!XuSL+)?3V~I)`Yq6INhNvTkx&i`@IW^0(vs-r4Gjf>~D4YOMC-UCr9ZGnV!6 zVMt037qnp2V8)6G83~fRC#Ef6rPAMmQ)@Q;AL8JcP5&V{hbY&P*l&&?F0=|{v3M2} zg<5Ri_u;b(>q5}eRnMca%aI`QUXIxhszgQk{4kA!!o|KmlPz z4!)<78G^>K0M@W{^e*cm#C18+dNI+5s%+m`={fY`I62ALfx81t`g=**VgtX4Q~Y7< z${0j1z=vCh$@+}_6p8F|drT%l#g5{71M`Ur7lJ%njC{^C`PjZe zSYu1eXCo3JA3OR!N!nujn&1N$k~zih1+dM9Y~eyxHLCwk=9@e}U<;flrTpl3r2K}i zMEOAp>MBwG;dJ>8U5WA=x)S9lvyxQd%79(|!*=}>YCHNG+xRSWx7wfHVDV80*Rd~>1`<^1N z)7f_>#OL=&!hC)uz(E8tpIv+nJyd1;Ho=$1zVDlS?C6_KKDO@~_|n){M&L*JoK*@F z`%z*yvcHtsqqsbXOES(eWbo}PkTKnmVf(%^oQz|Kq_}o;M0nF;`*x5w>BUvZuN_I4 z&qD$nL=f|N6}CZ9T-)~?d}+nK$K+#2FERPpzFXl-EAB1Kp?|2Tu`&eM60u4o;(ln) zo8#N5kP_`DRbO`*d4j?rY5&CDCq&~{^sO6`t_&!xr>l0OC61zxQt>sV;rnJ9zGC>~ zp&G#i(Y{m^P)4@N?pl*H&-iA*XBUJ@?&+?%P==XEFuy6O|BU_*g45@xW&5%y_Czsu zQ?VxtfNYIEN@RP$&}e5%L&HxcGXya85$o^?16F3JyVK-QVSKlz=Rjpq1)|FBq_rmL z5(E5qCh2nH%YzR!nj|lFF%l)pjW&PN(^cOF*UuoTMExbpk9<}EO^W_M%VgDLkn^}W zs`D4dw*|hTjG+G?Gn(ao6a9jr>k;GICPhjxUi4oJid2Ur9d@LmIayU8bFd^Zly zNAyuBqsv4uGD&-luL?evKao@HV&sr0KUx&ZA7=TPZ=(EZ`phr@4Lpde?*}0UByWPr z!)C)S(d-E}Y=SS14Zjurl3}yqIa3y!4Xsj^1aV0=+(ku#eE!J*+iaL;^0C=)-SB*- zn|y3G{121VX2Tr#(%6ti;79QqQN~kL*1`oyqr=WPU{ZTK8gJ;5YSY7WMQksnDJuccmAr}7v-w;`#<7dbMjmH*?Cr#2vOwxaa zZ%Ag7V(~3fg?xBj6G`_P;HykNwpe^^cs^e+`PgDnW|H=rq*LKb6AK4`(*&Xy_gat@ z_=(zN=~3ucjBwZ-+ymcJ86K)oPT?c5XOV<8%=rbWebvy{ge`0c#6L)flkp4V`!RfJ zT;Wwma>YddlS%rB@zEOaaIS!ytC%11p$T7d#Q=ZB#sOg>#E`ZANW*Z6Yb zOXEs6ZcwFgr9bu(0w4iRV=~Aa{CzazClG;ROlMHUjgU``d%$lZQ!?UV7*HjFPMIA9 z2??k#L*=5IwtYG9rFGNq9Axw=JDU9~W-zwz8Tf_`2iA_sh&_fR%xAp-2NA@4_J|g) zvVAS^rRB5I`!Lz_2s+EbgO$ zEk85aZ-DQqAd_(Hh$NFtl3$qUCJs-MtrZu$SK`7K1;9lAql}p{9x=YP95bQWncf<} z-vlsAe3t>+Yru+R0F)6izAvQb&>OqZ2$y+l-Qj+e7l$lZF5E@t*<+rMtc^}BicSsUxMDjj1n>|= zwBCH$aO5*Rq!nj7(?hl&IE15dXvIGUaAe6U>?cend{uu^AUNEPZ7=*vr$f*m(h0$i$+NxT9m8L$G;( zEx`%Ac47F4>Jg(SSi9l1G!pLfkE|3}$iS8gOu|H`E{RUfi%#VM?@vs`T%Z;B%SRJ2 zH{;TIIcjZrM#53REB#esBPOLOL?(I-Y(1ODR8Mqjb#!WObZXfrS){CyL4SWH-K2t}ttpUsO- zML$#VNfxMNBrT)TTsjhN)b6EhB;3f>F>3cxJ~E~0UfiR1FBO2dyBECnYT5=mgApB9 zbZq4iWI05LqQ=g}KT?a>ol6y<@_q?lD3*i}*}Z*=N{=+vC()bdZVP)kOVGwSH8W;D1F!;8qo zGq!Pvnm-!wghoy6 z*G8}{I(AJWAxBndZg}%nIsi1eVU*+2SGp23W~Y$CbVccrqlx%V5q{HBw*ndYcHnK= zs7swBNbiA3zG3N5hcr^WNzf|>FfYMRHih;6RR|qUzs=1qL;+ZsYV2#;og-WRh&1dR zZT?rw#X-~qzRXVeY>yO7t_&HDAv(4x!QqN3qhUK`9l!g%DRj^c8PlO!Cqw)>j80i{b`DBFTZR}Lq z-E}GnBZNyTG6e$nFL51GuH&s2vt%fa3{VU^QXp~ba zG!9i#jjF1as*<6WZ8)CF<>M4{WD}M40sAeaZzP7%#b&se@J4LWD6DH2UCJ>auE!Ya$5tu9TmWIlXdD$RpBoikk%RUu4X9!P;j^S|S5z?C24`>~GM7TP z02^f>T@N9aRrX5Th+fTRk`c2Hn9yEEGEyZRX18V3_(+DML2qG)33^KG=Mqw}@J6|4 zMv(O&vEzDXy`L@FXet)97$Izk0F}$IbQEdVKIOz)epj zDg*8;x{K;I_anFVwBseP7nF@9J|6Ywg_0nS=GWLk8!#C7Q2nh z)wkGXT+Y75PUFhx`&&AI(rq<7jP=gG#kmsG@Su2djOPLI_>BiE<^ap42X8*~^7-Kc z_1nF=ZOoXz!p()yyG}hlL*p_}HjX_u5c(7kp*IG3pNJ*r33Zknr4DV*PG!-x&z`uX z;TpL_Mp4JLv4{CtBhq2rU2BaA7r-j2qow(pwsV4gN33Z)7LRLF!Eg}{S>k$E-@9Sw z-vv&BSK0dc=6|`U>bkJ=%bUJ)<<-Hy9%SqUxX;luna6=}wrkTpPd(BcF8+MRv)#u^ zZwACP9{@bo?5c19@HtwTMK*%`*6d2j0zoE+*0-Jdd9K4ZJHK(?HM$p&7+2{Rnm_v8 zE&t|-AqT&9`di;};>g9#7YsZ;%Y)^f$zs5*5 z2}_$&raT0rn0U%p*p``K8!$iLy!q3+t|ZsKHEHKJg=@TKkR@F60FQ6eua6e|Rr=zAw zZaHul0>wNeW-S&1s9eMabvH)pX91#M&=*zd^fMKpOW>_QN>W5ckcCtgb}C*wBO9v` zSB^L*;yiY4Uc^z*mmp5=dLYhgr*k8Ya#Mr23Z!!*&L`<={s;&^H&lb;^7QCzt;Ti&mX@+YO&UuU1Lpir4*-8^RxKX&^)i0pnF5a%Pr70JDDMq3^avIDiMtrW#m@LFm=5v`L;wZg^cDkT`QS??8 z8ej3s;{XaJrch9%p9fav#>&eB#v(>_!$ZLq z`Vq<30x8(uM7l~uQo|(Z%td6SN$K<>PWX(3m6oUsS0Y^%L|dx03Xut}Np_S7DwI-0 zR3STx1Uu&iIP+VaNFGFBEy`AlcEjPC$q{PhnfX8b{y#%m5P&?YmD>H)ojO4?L&Xpjp zn9vTse9H?L3oNQ1BibaQTDZ;nD}j$ZtG2P1p#JvaG;Q`6^dgQnN6dyPckni1CGdGM zNU649=U#FZt}a1v?wDL^H&&R(@jPI8#1^0ijPDq;g2~i8fRqBD#s<$r>TJo>gG^nL zDLN%UQn)GrSv3aN9V9!9z{i-0J`&{tJ+)maHauAgfLw0lEY;8BsS@~sf$Ba>Qk%i5 zegTBkN;-Teo4`amv=twkL6&2$qutT#cmdVN1IA^j(n6gNld7ycy);PUs&KKU^-^8} z!>0-#b`&}I&C^RgwC8GI+3E)(a8S(U@VOoB;6pOYoJsUE2XAK-~gn9IxY`itBKI#^IMJe$6^+L*z6QN5mqya## zo|CH=`t;IDeMOPJrnYV~2YqsP!yYzY`(&xdyl?uG!80=QU&afk_5NxEfyY(+Z1m6L z=VAW>d_r9xp)9%To~M8YgT^HY%io6-HE^It3m`Z}4co)cRj}BP7jFQJd%<`Rl`^#j z{3^_E37r_D?rRCPJO2vY2t#)v(i8SJ0Aq#-Yffv|8NlVL>&V8QI}$nTw$c@@&s^0d z=Ep-@D8%mAy*REh1*UCQ{swI4!TUlKzX%mn5bAccc4zYOE9c8JNw5WMheZU8$y?vZ zoU&d@xMBeaX9-|q7G@E0^A(e;>>Y^#9NRTB zz7*wkg|^63eYhO23;dxDo`QGBoUkNG}Qpx};1_sQ#T@3GPO9Xjj|wFRMpWt||@ z$`vMF8it9wp!WHn!TTkrLLI@-)}Xq+MP2_UjK^F6<1txk&JI=C3VSN&tIC5aXUzpX zPo{F#Wy#l$EI&V(h{c+Y#PVy$t~-Afy2u0oE|3TSze#|W6ac3Uz;6;jaOTSjP!(#84RH3JjFOSW3j#t#e`K#lIkS zG4H9~BiCMjMpoj?CjN2+0*IIcvC$C2Blj>Ib|AB`^vbnRFT#Nn;rNTi$)QlxA42gr zEfkf8Q2b2`MNJ_Tf73!yJqX3$v{2LuLh&~(6cvF`{7nhP;z0-||3R1o&#ZBwm;c~= z(75OZ7VUCu!Gdxz0(D#8ORevWAA?Oc z`oK(pIkwoV#*P;O_5ct^FLu0$#M#j<1OyE-foee{g66tf%(M{Os>F)u}zyIF3=+{4uNfY@&pFQ+mm_iH84#>Fa-jWn*#Gk1H);Gji*px za#CO-2BvWcrbuA?DKOl(0zLIZFhPOIPJ!t%Fsp`OiUo#du@d}wlQ3M62a_=xkoORSr*mEpvu1&FAQ z`mWbIS`Us3v|-Naj!FxP+|z=@c%&@ZF4#^Gioe(_8w!=y(!$n~8Y-=&g{>tu)F~M7 zH!W0JOAA{|Dy*~?KJ=3oDy^l3ttB44plyzY#}2lz0j5*vfcGowItw0v4s zLjPnc&lRwJ24BT=Xr!r25bHOwL8zvw9>ja?c&MqVRfsqK${_vOh&S*R(+OXOc!RGp zNPKySH@Q_zM|M+#p|)WBG3XwdvC)2A(iS0>6TIrX$J9s1n$+S9wfGFRc(3a2R7bX{ zm-nbUIvuLNQ?2wkqK*h`+Ae!}ZhO=JpY&>R(4`iC9lueqm$?$?H_ny!8eHfGL0Fdb zk+}DcsTmDFU{&$Uu%Dt9JJe!#zFIj(t#n`NXmzxY41pEqWiQ&@MQF3jw(Od)ckwas z-vUyR$KvXImt^!UeB76+mDQKJk~#hv7}D@)3Jr-}rm%CaTI5iRE>l(gs;Wf|Y*mZg z=c`3U7pSTMRkd9WJf{|U=OEw)Rdrld?Nb9UBF{Fp2tY`5LRG!223}K({C1*`RMnem z;2pIn*G@F3s@_!tN7N#`ezd44Q&pW*RmapopIV7EE`T%aI+fRtp?v@!htR|5LbgQsKM6~Fz=~>6KW;a$JF9}bxW&SIG`5qP`B(? z3wNr;5p`>uy6q*k_(gT=fVvIBhh;vs5)!~9UbV6uW;hm?GVx}0%Uf#U7PYuX-Eved zjH|`F)U9u;+xDo%z3SF2>b4Kn%6a}`wXzhC6a!7UT3LhFGZ!s%szu*%s;Uo#O+9K+ z<@pGyxd1`$3vUmoMYVGnbOVC=gi9w)4P0XXzebA*$ecb?Xsz+ly-PNpNZpwHq2N9xlB^P3Mo>HVZK}~ zKCEteU8-Q4x}{wz@)dP!m%1&Y7H?6v#?@`Dth8da7>l=RaSiHXF&4bk;0}>5NE76% zQ{?LnH5ij}qh-9J2DV6nPK^fKRY&^SJYIcKyqnb#h;o;Db(eVC z)scuAh^SZhi+77U5>o>)_3CbxZk~iC@x7p4-9ae?pGqOj;DMV^Uh)9KJP%9-7js$p z1#FE)|EKxl6ng*T`C{@(=gX_YmrnFG*<{mVx;%8P*!I__@Jw|3P=CYiQ1tYn!%JdM z;5J!k^Ah$Kv#+}zJ(}3%XQu%Ot_o)p>c_luwl&o1g1xy|Jv@%Bp_86vzHn)@KV1G& ze{6{fGXUQbkM0NFn{Pr#moWSK-}?H$_4R-2>;G%|dZ1PHh_W7NQ$3=o2Rc+wLQO-l z_at;Qdc2;5f<~v%lhDrSM0(OxvyI@thF<<;%P%T8wfv%gmvl~|%3Xr-ev0NbRy{`5 zzwba-{(1e&`|L^m`3k&kMmau--_QU#DP-u;ZBaI=VM5X-+uf+!0$zP6z;e2JAxl_7x)hl4jKnHlz_Mf zy6}s`{Q`ck;g^7a58)_3#%)f}*E=5r@A+!sQ3>%P1OpTN1=KB|cH#SQzXCU?T=**7 zzJ9M+d$>w*nCyJ zdA|BKO1t5fZSP2gYEbo!VkO`_z1$Eha064o`UxRk6Z>owbU1=lllTKsV~+Qc?pWh zdw~Zp2f!`E&m+tcJniY2uf+W!+%yzD`FUIir*hg3bl^eU(lKg!m#2Y%Ft_(4Sv zYWr1CA%2vi2PJzI@`X_%_${Fctlfy&qRs{zUfuGZS`wR-a5(6guU52}QPlkT>S8Vv z;mx7s{69IK%8A`8h7WR1JD$pmEd*4uJy*grd^}ZR!c2SSYn9kE#ds=@{^6 zFxt^IXt0qRB)uK4kt!*v#WnW%lNO%bHCNLxc0wItPlJJm6fJuJewf8xbb7uBTCJ%zPlTXfL z&RKiywb%OYwcq6y8(^vi}yY4M_~Bprw%yeGx-Caj|s}p!ZzazjDn3A7dj^{08R*h0%y6M^DI>%0d;n9Sm%T6ipV>e9 zGiN{thf&6J9l$vnr}PJK%DmC<{5H~5g9Am6XBQ5nz?*_2--S~_7EZHr6#*5Y^71%X z0SEJNFtlsi97YOfM%f36Lpt9T>EzDP>lA53Wf^@vUVAQ5n#&!mb(QN}Pj7?nkUZWw z-{IScahF5(Y*eYCuCt`sUFh?~QHaghwYfN%br#xya#wUEowjXUwu3v}p4y#7A#_>s zor~|vPsp;S&1uNa*D${S>|)TP*M)6^cxEA*ja0mWJljZXqT(QV8i5Re1lRyfsCzqg zH&Hilw%UDZ+SBM9*h)|B$)fJ9=p2|+&3OoaGexW4=qAQU8Vt6BKb)a|Zw8Qs?J&W< zh|Z?raN-mKE<@Y>&b$4YU&M!;z4de*SG@4Fd>cxt-~9tKHoo5@_47vu9w933XyDKI zq#OMMq@{xUSUPJ1?;9zEez}u?HNaijlIlGOtr%Yxll{*#4Sj#ABJ0JnXtoBw#wj*x zoIVy@m5hUu@iW-JnRljyRGFf`9QjuaC}XIM$I>9NTSn;H?c3_xSG0n(QIK~OoyFL| z+36!vbcrY5<6rWnl**1&?|$wusdn_HkNevpLmKN&rw(h5(`Oo&#q23(WsS@Hz28LT zBTXnoifOW+A#dY7tdCI;B$nW{Qt*iVE9K|_!rsl{ZLt!<`cx!@zaO2Lel7AtXxn<( zej<%XOCLpz0czYBAv|eo{Jo0T<%htw00ugA{E0!CbjU8lo2`dhw+5pN2FQ0^h;SeZ}>@#JbFu ziP}Q~DJ%sHaF5Nlp7F2S<9?1Gcm?y=^aMYNG4djtrTehLSi9y9)>LUn4T8mWgLMX%yVc zBDAfcw!NZY*l9TO15}KTbUDa_VVo1TZOeW`+B)gTPslqs@)M9wICA(cxKUl-@FT*X z%!Oa!Nf=ld#C}E>G>AzV8RzgBm2JN5_;%A?|I%wxY+J>ANXR=}qb-;7Bp5wvWot zOH;PfMhiAk@F1#S)b>7U0o}-KUN-C-2_%F^M%lmhLw?&%+vyLT{9MrS+PsNAtXu;) zc_Z-*ixGgDTx6vjl-v9j%L(TguesQt+;U=?HayKTKW9Bud6BcpUw%B$@mB;+yFU<)^7xGQ! zNM(xQ8&GKSIC4UW->~ebh;M?A4ePF4>+mlflVaO!tMwOt++nTHNq@l=AI?(RT->N~ zTt79A`1{Z}PhsFMHKaq%jLMo!qne5DZ$P*FS=hnuyn^I<8~CfimYs?ZFh!ZhG0s=*@$?R(2#PWIy?L5MNl<9eIObCilP zioc81t$k`a7u@<#KSp3NsOgrzx@=o2{7)(^2vD$*f@`S_Wly8`9n0W%9`|E`|(!# zFrTIVt($I}Z;$T&v)79Pz;+St6C=Ou^SQDR!&sK`fy?^G*|7bw7i^p}GV%0pTlW39 z>9_F{b~AWoTFpteHjr)fa4gY#}Svm_5inqM>~2G()hqt)HrwaReF4AvZEgX ztz~o4VuuO~(i={s`V~l|yQ#$F=}jBa16M%@5XsO%FK?5&!!jvD#**tL)|B;o0MYW1 zcDrl*i)DscxX%T3VW`apw!w82+$}2jJB7;9T>=11z=TY6LP=&5ig}X-u=XcJ;Vpsq zDF7AilnRO~ft66o@CM5er$5F&aRx0#2a28~J?+%FjyiW!CuWoE*V8YbFi=?r`vVx% zcz^@l20h$n69GVtFcAUl1qhLg9w)zj1@egZRTd~7e*2WiNM=7IiU<-Z(+bEW>QB-5 zkibAk6MF=t7Uq_XSueVryv|(t+_*sI5d&=p z7B=7=j1Z2a8gc0DulV?~L=)T+CnfwcIx)ic#P@F&JV(YCFJ*{PnYjP%8!rIw(zE!$ z7XZPNK#?^WxH98z)R8GYEUX3K+HVsC>+~c_pnKB+RHq53zeU61=Sohjxqmpyo&t|t1$7Z|@!=e8cuwiWt*?Mqy=dug`2;13PNzbYe~l^B zn2z$#>;p~jCG-W2P9dTH2Tn|1{@3JqrE^DwNLC7tbl0k=ID2VCtOlJWURGis<&g!L zGCymXaBFB+HC9vO`;mE1B1J?QrrRm#%=z#aoZvqEy~3XuurWAOH4^`RRQ@-zheZl5 z7X+ zG6a?FLPMk$4UuN@qF)JROH?a?<3N`e;y6V6+GyW8p4qvthUaLSngw1vLRYq?(u?2V zy>IYoQKW=>MvV5-l}#Uak|B-H?4V0KNNc0EEOs;bVNHVtMwbarV1T>dVlzUqsEJTR~@Tf1nMkUM~Tpa$PS&wW>j@<{sG2om9V@p4tI@u7LwE);ZLmsucdKJkH003b)!BUFcu&ZGv;+rn9(U@YPh3!KW;oWN#9Dm*)Wc zxsnN(S4FkAd(cE8?IP9QwVdzDK1joiBPu(LAvG+q_<$$qclL1bPM)`4cF-oK_}^YC zh>ySvoaJRBjp&`f&9)b@V*ozP^-`GY8E`#AWzCW+Cc*E}xr&+oWrx5Oivp}%(V#u4 zb46?SgD}@nnCl5}Jwc2UmK7tM^*YzB)ODK5n!xo`B-hc@cuMDrTEUqx*YjbnC&86d zD!D?e!#dYJQZwLsI+E*+)QB;4p#kK(6Jf4hVXmjZ^%RvIl3XEHyUz81)C{;n*;WmF zf*L>2xn_}eGR*ZtnCoe9<&;XU5Q~Sg*;+@XX22E7wsHkFF(@u%{per-+cep>SGMD8 z=wsjqk(;9Wy?otO_zHY72T1!TbHHC)4uDfndcnVOFZfZyfbG2Qu!}K)zI7T-`gD$W zZsAtiho$}_YCWRH9eUR;90-zZA@hh>^bi{N9p2u7A#jcyi(>&w}FKUY-e+f#leEQ9!Sr?>FQ? zkPN9l2dFZc3L)7lJolzm$Sb4i7ynNF7^p6OJpSvM&fxzc>hJsr_RrE<48!$yEBgQh zOSkgSwok6bCQnzgf0j~pjXl95c62wST(lugm z^rKWrhMO<5xcm0A+w(vghNkx_syL8r2it)gRX-Y<{;R0sK(ZZd7j9Jj zNU|MlA8u6rNU|Ml7gkhpAlVMK7xywF;qupyJ`!pO`$8%0U^{e^8A4S*N+JO>W~365 zu2G-lHJAae%j_CIT0Wt#`cYK>>6fkjr@Vf>&;C!*-)ZXK9Tltpv!jpx&n;2?pHcG7 zvC0>-|F((g;`Hw}oe}R7O5agKY`uSX5C2y6@4jmg#^~SuhEtN)caO$qeB3VDtG z*M9ULZ%wd&_owFm-AtHZLU_h4&-R^)xy;417Oy^M?;en_o)W zB6Rf4C?M_GT;4!i!(!i4ysZvz5RJX2vB@%a|E{4BcAv(U-CexBa;TfSuuU^|a&E?k ze1wV3*rPXuUB1O0|N z2iyPga?`R8FpK{z7Pe#E@j9NX%DXi;QV23#N7|G;u?86%U~i)`Oh72ZEK zZYR$g<@u;Q)7ATq_@JEFqfm?JZw<`a;k1HC)2z>w9@U6mI~;Ykdl_enRX$=ETRfc@c#_Q+(ig z@$S?8pCBIM^$fhwCA3Gr9Vle8m=p=iue`>0|G9VW0^=}!=Wsyg3k0fnmLV1Y%@C_>#`gC*jY*yS73f5i5mU!Iu*YRGSMa)Mi%pY-M6_%EThK|ekibHz zzfIF)H9z`aA3y{vCFrq9$3? zn7Rc&3Z00T(?ulPBY*1%NEQ;wLL%u9O=Dik_DEz)GuqmpT81H%RQqEP)bZ`yYf! zbi}E|*xUzU5}h$nVr<=mFo}Be5@TZ?gh{l^6%*9uwu1Fx67*TKn_v}u24 z%=G4kc=`Lo)Zdpx2eySB_8gzgRRhaa!=<;&)}NTnZprK>cB1}BR7{2|yIt=7%4Duf z=DK9AlT*NZn^DO^F2OkpAB|Sza5?M0w$}G>=`D7D>xZm8sIQ(z_eTnUBO`%@B53yN z8;BrKKl*_5-4GC{ADuw@<{t>uk6s{sYYznKM>mkZaR&nRqaP@#JyFtzcftCr)ZXPR zI+FnU8vsz!dC8qK;T;Cx`iG&tn9POATxc5LMH3)dg%F6ik&FshvJiy#O4dR3Mdbr< z<4Nrest}YboE7T{!t)1)eSZOTv?dGAD^_q`_IU(J+g>r-#-2~`;KL8iZ7ZYpXh5c z_zi0Ba>-8=Vg|oKeP~tk6SV__-=IFRD*1`dD}&#lKCUYHiGD4E-=IFNEBT2ILxW$^ zzWw-wZqmMk`}Tm;-_Yh??3}r`@)*A4y8)Yuqb?;ptAFZ0I)oz~&|-fhZzS`Y%o_=P zv|8FW=}X0z%wv9@QtaWS{6M+XU$U$e`iuD~Qn8nq_!Md6hsdS=l4YgPU(8RA#{TF$ z>(Am#=X~wauVOP;V}IJ-_Ue$XH%a>10oqFMmofC0thdUt3T|NsT2H*YVtijah<3Q4 z^JM)XSw9GW#5(eW+p;_w+P2me?Ozyz?>|^{BKZyKn>do6UT2d02KDU^$xm;e48f-! zBtN}QEcp%U^EZ;8-oGIE4eGl$lAm5@lKcks!5hg>$Gqg1v~N_o6#EnPN&AZa1^HEx zm~8;;Y^u+ssp})jvQp>|-`Nm8MCuQ! zs@L_0{)N-nu^;*aC>8iimX$((A3%Qt$iEg}8moU{XxGylpX^H3Ym&ZJVitK@-FG;& z_0~c4FC^;+1M)B7J~64kWLvAB^@G^`3zzMCC`tc3z_K)n^}A#{ae#HNyNBX=djkJ^|h)-Jt5h@pX{?p_Wy?ax`(#Sn#^l@`JC(@ z)cZq|^+W5}QnLT|^7Q`>L;Y2>7PaJ@9a(=!&gqRgMy8jk5--X15m9}J;_=HyyJ>07Y<*XrK+ z3;NtB^%$pKe@)hfI_G569Ho~*(#j?tEqbiS__u+v* zXSRQ`qp|}P4d;`j6+WFpk4=BlL5~$a?Vw8==+ZXwI&;aJ{yA@*Km9eoJ->2^dqOJn z@>YNK(XY*^rtwo#Qewr2jbJ9=!?HPuw}9haKdSQRc^@8Dc5;mWN}&yy{yGv7|Eq&S z+c3p*B!!&cpitpA9JF8~;-2K)<##?{+vd-FsM8q_{0{cgB{75c;lqOxw zS)S|8^lkA^o{`;+iUMgi(sD+V)=1iBUMJ=0q~fDgyp=+0DfB+oj>v^An+J;XFZ`eglX6JWhvj>_ezM zrjQ2^suo8Bjx{(oF$Z>`%t2n^OPRw1eRGhW1R;f6Eut=P>;gwki16*c85jYimxVaO z%|e}xBUr^aEeJr7aJ8<=fU9zytFp~Suk7!ZuGVZ%i@#+RRvtP51KCI81eXg@`lUy< z?dWb1Hm&bus5L2g^aviQee+Q3Qt$`~9`?R@B&bey)h_bygBszg`^^8)=3&ImIt1`N zHNYQmr(KVu4!?KdH_%iI+t+S_q?}7;akdcfIt}aL$j1Zt;s_Qq`GJZ@K^8N~H8IJ< z6K{U5*{#qkMPVl!&%X|h{N|XwZ?QuYe%&}lM>_$RY6+?>k0DnuT8>e97% z;(QcO?6Yv%UPO1&``6;`5E2Wg5kl53I|#gVG4Sn=R8~7afBLyiMO8Nz`5x&ms+wEY zUF6FwEAq`POTDcgb;!zY2fh49hyfn|dIBf5)2B*BY}&XL@_O@I@{0F&(t3{Wxkp$k zM5e(z+(}yy#Fc{H<+9R6EO2m`~gmdKX8d;(aQ^U0~W2Ai45#Og~^EulM9vQ zbkfGK$|~DXC2`I|w2#2Q&W4UyJb;92iF z#!Q0o{TPxf;?r`TjT`3(#5scF>}n-%&a>WXJ<6#O`az0>ZjP~TQE9dpu>7c0i-mBk z+5&D1c+(&7*7vqA%=P;)zI9fNY4CxbO-uk@JHXq-IK5QaZGXYIh8SD-@>ue_`GO50mwQa9k_LJ=CwZptUG7p zgiK)0wBEWfF2neW#5cn00A+sc3; zgBw>()LA+zH#?t2!~pCcq%Qi*ABblh0~S|3hgjkVXgM`~3xU!e@Rcs5s}(W;!M|17 zgJYBc7Pfc*zwHG$!NYKcMz|g6Kk<~SXN=?>I+DZnKP8?G)@Cmq!Bh9i`waK{Tuzvn z0kHur5am1=Qn)<3+2uXAOC~7No?(0sB>pc%#vg*85kfPNq!W%U(HfQr8$h;G$sJVU zzLrWR-$y0(o5*v9Jk8_@k!LMWfa^L+p|ezbvx_&t7ONG*-;T!DJxbCY_0fv7b73P**K=AgT}OSRFlan!3<(94Er^yPedrQ><0(yeN`|#@jx6qJiq6 zryzCh6)c;mqX`RwZPa-H>o19p?V=}|sr~~hJ@Rup0OH+LUq@v}i3z&!FWkq1)wJL} zDu;H;9o21D_xAaamUoG?=?!MlH zXtoyDa^hLZ$Ed4GC|S4Qaf_0n+XK{bK8YNiet=(NzyDb}lQAU4S%>Nq48 zRCitwO5VY?e_|)qpJLzIg_MD19d$s5Sl!yW2L^$Xo9KysY=_eQP%?;*Q2j2cWGuwS zKU(}7Nh%qtD_=)XZObb1mG%TWTt&X6jvhS1HDCXo(G%V;YUV@8&Q4SyT&O^#`_}n0 z{ah``-tW)6ci|2j{#tGf_4EMh{T($I&gH><9r47BgyEu-J?eth zINmElO&N;c?SRdV`lq%369)HBTrPnJZRK6U>2U|2r|0u|Nd})E;?vS=`8@YNK0kL8 zw9PFnVHF7CLELN^QJTOq8fqHzpn-+l%0?pRqmi`;!fHs)e7s+TB9N7$0RzRr0%Jpi zqKes6z(*I9(}k+Kz=m)x_zhYUHV^<+{bJ~bh0u`jE(pci6tK|E(FLX^Sbz{x6vKXO z1_1~dpH(jaVW1Eou>t~iWA%365FkL3J8%fQL4pn(8blV>It5xJ-9VS1L93|)2R3#< zpbIkXB|wvh4@mO_0@NcQm&jeL8;%f?cHn?t!UHsa;F%BwWPJj%*PjL;_A?;r84w)) z2oC610s{11d_eJB?K1%32^3K|6#G=rUgTTW6X=A$dd|@!9{Qex!x9fN@PH|LNz3&& z*BYev=?`uay~+LX55fz7C`<53s$FX3tCpVH7$qY@r6p4UV3 zF|2+230@6Sa-D4rm5e3NHu3~1w3AAlpP|~_=cpuAU zvWrHgf39>KeGg+Ua&GaND+p>gYdwm5ImXLT=KNFPM7tj%Z zFTMB%TD>rb14H!AD%hd2CcRqUh}r+nEuy^)gSh_a!0q!(-03NK_^1faZkX$KRvt@b z8>NSBG>dJdeM*>0yPC8a7^|O+=?L?$rqHyJ6q<1@g=X6+G~Y?J`>3{=EdcGp6i{QrIPt}0o9Vi zR6DE+L;`I9EdvsrK8FPEOA0?@XIL|2#Ve^zhB$|_JTz2nhl=e&xqoN7U~9Yg>2K>3 znP7VdBzIQUxFYOddHkc8zQ(^Jub#wjsgl@>C+s)#=PYTzOzuU3?J{631~~kc-9Ir8 zCd#F}K^S>0cl${(0F6XlN+whfm*OWiJ*I6J__PuRra zV#jP^J-=TOJ99ZD3L(JyG4#1lzYU%47)b*Z-s8colDU{91!w_RKu*bYn|KYp04yc< ziXV(DyaR4zq35y%DyuVqm0MYHtQDw&-GAFP;l511nVGo%=ZpaV&)EX`L4(WJ;PR~* zK|=wcaRDG4mxQ@qR#>sGO+(2s<7!fYUN0%ei2^5dv$&W`jLJFHVf%lC7S&_ zF}WvpNWJcfoz(`03%e)Xmkqyvk~LIoPB7}L7Wbq(GAs7AX>epS;K&q(^6>blVV7U& zpJs}oH=e_T3D30ZD&M9+liff4Mth(u&A87Cbd92t0F|!BaPxcAwLy;b`JLDKGe`3$ zze_T4xKXg>WKhF4Y6wz8BQ>;8a61L}Qt%)JTdCZI5hxrWE6>S*dz9aci5I`$d9UB; z&qJ+e=mqfGQRN$;mX z`i>t`xB^`xVjFEhQM1kl6wp+jug78oZaKAnvbnp*|4hpB$DOv66yFcsm+-LahwgO# z^*eV8U$*#u>2~0z>X+zY!0&h5c3h})^^5iNLM`ZDY=8QGAN2nxJWjdwWp@TsEpB*xecY^`iMn4pVi5V4^D@G5a#B!J z=6lw4%AD5kp`&0$OnUy3sFnVSxb)n=W2L`6ESYccGenEaCd zCvoY`@=N-sSZ;nfEmS57Jxu~ai82rID&XfJ{2aTYY{($cW=MPSB+zI)Elusn; z4>&zZf57z@!~dD_nDhtH<-GbE^l)WD;u0tW6MXO3v z`Q7O3?dbQ-1k14~YTf>H(Dbl*fb_aP$&yFdM7*_-?mA@Fbf>2v&(zY97RbQ^PjRiagzh?H-L361iuOCnJC#i!MF;q zuH}f*f8)>GEVyif^tSz?R%+Yp&y+&9`EzdcJ3p6w4s2ZLKFaWC{$tuw_k`?YRXJ|- zC}%7_d&{j@HVW?P{-tlG_?P}ZWpVpw@iSxb>CKCKZUJ$IF9$1O|J|SS3$BNx<+yEa zfr}q2@_`o^i`!YL{3_6cr_1bMn+cvd*=^{qw#)Y;@jjE;&2{IP&Vc-%wwEbz~6Lkv6&;*fl=UA)BY_$&yohF{3?XRh*3{?TI8 ziZ-L$G56M`sM0~)i=cNce(x5f)t|Gr#9a@-8~U<+qxHrKI_l#NJY09N8xekR`DR9Ul3eD$Je1-=Fk$F>kFlHY(O*}>7Z~xL!=jwg?1Ks0&rD{?){H zwJqS=bgn*das0UetM%zr-zIu{nr-=5^^4Ty(6cf~+Hz=lgD-GyZ=h@Z8#=GR@@Z*v zzGgIh_4XsIYo}GI3s+x6K@~U;Y@`aom6- z1IJh#0M3+~s-?foLmgu-JO?{V=_uhPC;poK+T?G-J!A-H*=q7=ZNAz-v)xwfPnRBJ zqwSdRIUr2+Ig#n4W4jKn#|{tRWUr>;JXZM11Ua*tgnW{9I)0>sbtYKr-rXv+be0LS z9tmz)2J0K}!wuFsU=0t-1&4)o!L`uIP2rMbacie7mOj7C$?;i(PQ#8vEz#o;+pSb~cc@)KRpaAFWQUJZM{* zwoc^htSUP@-CTdVBYOjvYrlJqbGbh~&;RlYzJp0!iw|`A)7LV;>@~JJUp4w_Y(al! zNIbb{s|HOWy*iy*9snG?Se7tv`1FZCV4P z>*3uBedn{c2fD6a{v~*eFQo$E8zdVeQ)~ce3$x*Eu3kO`PGd@%ZJqCgBw44&bON5L z5Pq3w3E07N;_|!GAlxk52EX$&*{67($q)ZOkv>53oo|ZtVg5H4vf-j|OSmYMmi%1)wlWFzCfrqr*8J)eX(shmkO~6vd=BgN1F0e13g#Uw)(n6_6%#MYk59W zlb@EoGjQ>0+a_P#xw^oG@zTS>71SX)6P6dGAw@jaIw=jwiIWkU2! z@y@S>Er4cr7B3r?$z0rFau)l1I~jSXew`7>JMEu{LI7pj=K>e5w$+_m!zl3WM4?m% z%8TRa?E>3!R0*LpVTw0cs;) znC4u)Ed?CK#vzDdLS;>k;r0=l1(2mil@A5o;aYYiu05Md@Rt@WRu!Jc}qnKEWW5M|+>7&4b$6(stiu zH*C&^$uj8!zn#MNt0Z~8P8y4jxwU*3v`C*wrc4-8#0h)8hBaW|VdnG4e}Je!`7^$} z;QlWeu|Ogl}-Esy& zp0DAUje$zNKBBS@$657iUp9KuP~k8d zhsi!Idt%zh5HHd`4??>B+2`fH>{AwPpDbO8mi%+4lr}Q|C~2>iv8v^5gze*% zM*ezq&7eGKs;?K1|_T_O8i*qOL}wn$oqeNynp?%!gc z{~;A&wvUQV*ynoC4wHQxG8L-w#}F^lK2Iaa<+qO!yCwh3-l4RQlJ?V*R$-q!&_~(l zN0QuZ9~GUj&r_fsjC~Aw6Yy`v+hgV*L%c}))FQ|gvd^ElC2pT@Nm_+{vY?+R`}9b1 zvwc)_!ah4eJ52W3ur;QA4DllEb33HFLiQOerJZ0@C-nL?^eq%_$!i^3M9LKQF~}|c z?NQ0vY#$Y!u+L{fJ52VOAXCvF|MoouQQD`E_FEp(8^8Ve&)_Un&%+8a+Mgc>&Cs+z zH*bz;zx5$Mn=8Kj-vCF2{2b88uPqOQCNcSqV4Obyi>UVVHT{%7kNL!H|1Va{&jG{o z-;=QXMzC1&hu$A*{r>_S`_lhQpcxwd-xVpps(m@&`mv!si_dv>qq6)^(%vU&75*tJ zrPrRYt8D*k?+Mms|D>W5{^^UL9gKf6|$GTh~X~M@1*>^EzmU$v!PoER}r>@gnUr0zs7JM@;(+ zUHe~38)=^`UEvn{Tq|i6_Q})9E#><^t&6gcicZ)k4YY%?PnIq~0{JIjilwrTAzq|? zo>8ELTS{53?a$UjQj5=pDDk3nv+&nq=i_EFIZ`#c8PVY1K9q*yBZ7~)0R zXKnQrv(E)Yov3}bNLqz`Qt%h$-#XVs*+)eu>{AWeVX}`yrb1;OL%c})+zjaw_HP5u zKSu19{4-lBG19*&X+JG#752#keUyFf4@B8VMJMd@Nze|)K8Cyr__tyymdZYcc#-yb zarG6m&z}*sBL5iawb=4ol2&1#EYL^UXC>xqgLOjnw@T0slYKTwu~hakk`Za2=6A1{ zea1>@6Usjw5EBYl*vBxZrTigDZnlq#PUN4a{~k8`Ops!!>|=-*X`e4aI;DT>qy3x* zhVk2{6?@?^8fc= z`X_${7{=HC;y)_&&jG{wzXvpl>E8$zOa9Ow`X@i6=tKTrfMcKSf6yc*KgY+(jwSzH zk@BnBF9R;$EA-ecWx~d{mF0($_CF=9!awEdtS$cON3d%|`Jti{{^=>kz#zu|4S5qN z--EvwVyXO-As*WYb_$RG*TODJ|D>`Hl02~Se>Jy8hW`AnpG=J$8$IzWG~a{!!9?P0}jzPle9fl7AkR zrZ?M1MJMvlXF)p{`xx>jkbi#go0$2>5HB+Sd=Dl~*ggaHZ$=s{_BrP`CP}NXPYV8w z`UE=$wo}V^2~@LvRCK~Vr(ybGvd^rQG3{fB7ipgdA>HM-j}f~?=Rg0IGXE%P%O$PC zJ{6#kvX57q(`+9Vov_bL&<@5vhP(;*w?Doa(>{iHk@opLOnQavbG4KhV(m907|Rc}Mz#On1gD{G|IYzOh5U%WSN_i>EWZ&fmi+B7U4P`S0K-1?|Atb2 z4%n;zpADJ*!Kpv;LyA7+p97A4>OW!mIX+HyO#S~fLVi{Ia=`WD3O#m9nXvKySNbO< z?SD#Ig@4M^SzGGITalVX+yAeFb};_QkT-$yJ@}KD{>ey2q<6HFSWuGB#|4V5j z%XcHa7F%}zmq?kyJ}^%>zX5=E8@VEw;Q#(kkqef*{M#S@Bc^=} z@gnWhjD%ky`&=!hjm$qrdM&ox|3i^7g?;isA7vks<}}+!MJMdj1TlumJ{d9~cSYu-GgsE3M@l@#7XW z53Ayq`?qrZarB88V(QZdt}*q=0mJ&-^IfKlt4|C4PeCvAZCxW{p{WE-|Mkf%;_LI) z_;Cw;j#9-f^@;7yom|7wzseBblOfFbRnZB{Ed*`9@LMH!A&GYoyMC-&dqb%=lH&2`xMZ+5zAfx_E)zu-uKt$RUbdX;l7qJSRu#fAb(G zm|5X|;$q|FrgRg#aA}Kk4}QCSiQ{*Nq>aR{VFwF-pOJP@;8#h0k0e*)R~cfA3}MEvicVOr6>7PH_aRH z3jVkxu;BM?X$J*iSI10aKr5zObRg$ll%S~`qV-=+j{ z_?=xLbR1cKfZC$5{%J|8z^{=y3x2mslbG?Vq7zzp9kj!Z-$%Xu!f&o1?+<>v%M-`% z4oMq{U&9U-{5~V?pun$^{2ocJ#;-EO7#YHhUlpCOTr1Ra1@ZgZza@^}5=pDTuaP%68O3_bEua^% zTKm&2G-;f^$UTpTV0_{iFiD)a*&Zz~fhH>ML61+|#$br0Pej|RpHYG`u0AdFd!AFK z$wKp6&_t!FPkl0r_~R3E;>RuY`8ieG3F)(f&qWdyZS7<2irqLcMk(DtkRhvWn6Kd8`k zVd+13?P;Nl$oi|2wnWk@%6}tuj6WD&j-PFnUP1iM{<_d{ zWc|Sq*Mjv=OIihf4RQ;9Uy5@r2YNj^%FtMRK0Q7eTp<5xu|EcXUz`-NXfKCt?49%Nu$STOn8qQvoA zB54))HBx86?^a1}#;=M_XyJ9x4gkMG7XuwX`_aN!_%+0|_}@}N9s|G15MSUB(f(IS zd!3|>#BT+NqwxETq*eG|CHXy)T#a94h%qvR8NVtzVY$}ge&V-kp!Hv0Q^E15%pgdJkk1ZQNQr}mLTsBe#<#Tg7}>w zX(REQhvY=z_iah5z^{`0B}uNvuQJ4gGK3kwDmr1gY|!@0{|+sF$3Brbemfo)vm|7wzseBblOfFbRnZB{Ed=cq#P96+LdTKyUqf6=UE|Y|R)JrG+=Aa% zB)J*CDmtNs$3U9^eg`prW@Bk$jrUYQFvHEY?3u@uar@IP^gjiCU*i*%py_{qI!6<~ zKmFGDakD*IMycW+^!UWDJ#qAjXnXbflAw&MPYeCSpjYVALi1VB^k1LMBECNBAB`Kg z(B~gO6BTzt`mEsiV~n4Tj;Bu!7{=#O#NQu$vb+j?T6lg}m8L$&dzeLheg1R&xP?AH zu8KP$eIojp`V4$6QG9-1P$rJg1)x{xlZ6S}=!>9bKR z7=OqE`uej+gqqFezlu)QUqPEd`9GxNXOFUciQ_j{koO0_-Ln$M?+!^DiC^e5>{M8> zjN_KG568lzwkTY_E!aDU?OexZwq{)0S3kzoJ9k61n>ewhht%Hn@Z1$hkoDnoohDj-J` zcD-v;m9*DM+DQCX=#p6c?;Q`u!mpBilq6T8mY73mn3;Y z^@pZ{;m7ZImM?Mqo`8rk>%WEqEFSw^4iR1dRnmS((njJp1%F%;Sn&Jy{erKe{;MQ^ zNs_Das|@j=3}MEvica7+8?^oMztG6Q>c4rAA*%i`TZ)OhUor^62D5?9g;Q@zZD>k!tdGX zvGA)TUoXkk_*I7Zo(y5euZm7sZXsyS@1;bzbs$k_$?LW{lV`Sqyi%A4=iF-?fN=N8;RdMoz~)i z@0b<~ze@5^l3a~nWr*5)MFeL2s_2B}-T>_t#BZGxH6i@|O42IuYoyMC->vyk_*Kyf zExZoe;l}R)mM?Mqz9q=}gWqzgfQ0ZnL()d#HwAxD{`Z-CV&PXwevc$q<5wACj0|DM zuZm7suJvE8D1OIEQ4_*%2Si1Qt-!C5ItzYDk|$JuX!=q@_#MRf+4G1YvGKEq1!dg+ z^a>={fK|&apjY&#TWHcaeV1eX+0?jkvprf~0!>uhgC3u_4P0aD6VdkSXOy6ft4|C4 zo-ZoXWTE*jXrj_I1mhEP;>RuY`8ieGhCVZ^@bP#+Lw?H+8?@oK8yVe>YZi84YI#KK z?y0QFtX|&^el>s{>BnDeJuWu82ne@Zzf`QR84m~s|wvN z-==eWNt>8Yn%hB|i!^5jY28$Rdv5KEWmL8&jq2~3#J5@Uj z(r#M1nmRX7<3{SNp~h;ubWI9VG~&?)YUm>E_B;+AJV(L1#GUqYdumDw)t#Zb5NYd3 z+e(+t(xo2#$@vp>zKa@;Qt$``4^YE?@fa*2Kl5HHDeb0`#~nBo=HoOy zquXy^P98k<@KX;z_26lCFna^X==p$(Ye+jpp6yh8khCo{?-VWENZK}uI6~SUs{%ft^B1UL zD+Rac3eZ}~vx$n^sC;9Qub_vX+MX3S<|^_PI(o#T!u%fjJEMmaUVcnc)tadA$V4@# zy6tL4g8Z}Sle8JR5V>&|Tlo-a&lXTKM7$=2jo5sSAWJheHQPnaourLe&2*td6go$t z?W9dBr4WqTLe16Gew3P9NxLhHL$;oxP&G9l0Q)Rz?xGOhY^3Hf+csC_+Y zA!@Cm=1+;oVAy<(i$k{`ruIf^-A|!TYClWOcgd%x$vfXgt(!@^`GkZcrfZFS+{XJ?AQu}6VZld-REMof((x$kmeK&=g zs1@m%okguj1z``hZ>081)C$^qYCS{k?bMFQI;izLwXY`cG=xI}-luuZ)x_YBMHT%r#4Gt_-!gmi29}32Ji{56oN{YI98x=6cc* zwpV`Q_R28ZYeM4oLb$NKrZ{35EMFRImN3|ShqM@6BwK8mv{-Qri!oC+Sq2#o7A_-V&t$112b8IIn0r`#Y{P@eN0LgXK-Z2jZ}8X&gLsSXcsxJy++r`lpV$M zCnr!@Bd&`w$onj;k_w}gCX$cf4OMP0fqdi{(tK2)&PN`ZkMahRj|zJ8QEaQgOS4sQ zVXHujepw}7w@PUYs}$>2nFXsXBkztlHN7zB6>vOG4s zlrGiKrT6L5F1pk}-W2jWQD;ccCvRp37l|73qK1s9arT=%38C{5dKN+#BlNO3p{WzT zJr%NmABqO=6d-0w7LExx;DVX_A|WO>UKq-1&9SB*AV-o|fcB+Fax{C=0WT+ntNCM^a104On0fNGg2HCwpxqFo?Q z4SC)t&n_xHPQ_?MU!wL@YUh>@O6B%NdDQ+SY7x(RXu(?2+Q`$ugbTJ%I|}UfMWwW0 z4=vcIDxMRM59M$>3i5Uo{5#cOESR5VUB)ndxjF7y4FDi)KcJ$6iaXuf#`Fs@T z+@hL~;v9`MR-Jb~iu3s>&gY{zpO4~vK8o}CD9$bAcM(_TaS|;sD3yCeWM!4HDG819VdmRr_u{#EVv_LJ%WSt1&V0lNtPAdwX1O;x_LYCkVON7dCjv$hHMV6cd_1fwm1BEEhc_ps^`MD%q?>lF;f z;vpU^fv&#}MjA}M1jhS1Gns}Mys0=A@eQZe%b@a3gEj#}oSyaI^kgY$XXAx-7x&NL zirBR$@xB?dYoFpi8r-vpNLMr4gQFHuG|+|+ArOQFM!+wG#AuBmLW|!3J%PUEbp_3UITbESfm*-aJJEAqacaaV zQ3PD0H;EuvDvm|08P0dw3{MeSHqhc@i*j+AU4YY!(jvM9eO&^=FYUzvad)TC$L$VW zbMooqIov?PeFl9zlb^xoe>^>-2<;wSB4&st51+sljU7ILHJUkmDxFhJ<14t|p2okx zmz1P`O!~*9e@yyE__yKrkEp@IcfEI-%2ROUIB?3$$BA8<2Y%24Kj?uU^uQ0c!+o}M zk=rgR7+mBoSc{|1oI=jPrtXangSO`P)RkFu1-OkscQo*SWOGw6XST94r2$GiLqJ~ClXrbVC3hpJZi-HHyIp&~XE5_GQ+0Ai@elm2h^*i94YT@?7rw7FX zm<_yT_si}UzP#W*&X-r+jkw(Us{1f5wCYA$wJ;T%R<_W} zi+Ggd_CI%5UZ7``FLZ8SAT<8m`jnoYo~KiNq34@>ATGWAY??0{Azid`Dfq2yvz@8p zB?LKcW=AVe(8^9*2lH8adtRV>l<$n>vrgx8#^Cd$-M7##8DZrl1hDPHz;!R91GKWk z*2awHj>`*N9Oc_58CC0y_8E+3kMJ#YNJbc5=IGb*Xl+=cbu45HGnzUgFK~X8Z>?bT zhR$cL!Dq@y-$JM4^BnW(u!UGPVLlgG#)LF9%D2!Z84XfJ4&TCb$!K6If}O9@leZG6 zpp`;F3fux9?7f>WTi>){quBpI=%RdP)`p) zxg1ca`lb72zR0hqiQ)M|_awahC7$}0xbr};f^X-#Cu8Wm7%*AlD|Al<#aohMI?}cj zMlZ$V33x2Nxwgcefq=hbib8h|#@m;HS1um$SIh7y6NG=1;U^;eb9iLOBk?`AC740{ zOZPjH(1CDHys5xXJpD0W-f=f@E-7@+#f#N=0vZ=yaxDx`-FPa#|F*>K!P6S~w9t

        cs@~x3=QDG(Yfzo+7UGOm-Va@@E~u3D7m%W>1H3AD16R^`JTfX;^7;*kiMjz_==2=I8at(6)1 zr(cs7=o;nQEHhw0&p4ZXtyPPrE+<;W$w9#4k+gCPtttgesDS-Vx(&aXA4IdY`lnwj z_-r}1KhQn?oWW;{?_|}Y{N?xCzzCs7f>}PT+(fHpff3S5E6>>W;uqM=bx*LJ_D{c2 zu-PQ=8fLSpYTESWkEYV945rHvoTj@Aj3nl;PzAk=a$_@E{%Bg&Yy^Z?g!%;|!BEOG zkr`$5GP1{GWEW|Y0R_9Pszrs&u{S(C%^4&)Gaj1}QZ+)c$h!=p*|S*Twv%86#VmEh zU~RSz|Mc5psrbpc%kM{VF+nN>0B1ghVZ&z`hML8mkL{in+wPTXvX zQ@i;samfk2wVQuV46PQ|$)RoHI;ES(_c2SsGbN2CrEJ2nizeCE;@E;?548uVeGN_e z*oa2vgMz(0#kRp#cb~WV(XVlvYideLkvPYZCxF3DZH!=`jVqO6Rfx;V0wKj8JW`k* z7G_dPHIDbgQb2-9A6sLNx|X9xd=EkaoF_A&fJ`VL3kq;U0TZC=oB&2%wKpaI-%I{? zu?X39RFX<1&aqUIKHG*LnX}RLKw5x2n1r*DJUbC{GmhQVj+rO;^|7P0;4qbE$#ie| zD#u>L`i~pGf63QV{5kE7NLhBBB~rhP7Xr9(#RuBy0wA~wgy1S6f*Xku+(?jM zuF4ed%t5CKceG7P8LJUOTJQas?EZ6CQB3v?O<8>nruHGNS6+JW_bhQCYd_w0{`yo8#Cm%z1%!0$v zi4LiNuv}#SMgQ<+l}JDgk61o8pK@5b6OagfXF@_qr=cIpgYF^*8=t=d=^1X2^dt^+ z4RRW!!~%2pf!@jm=z`*&z1=$Q{6)v^vyMvlzDlJVUZpb)oFmR`rtZB|yqnI{Q0YcI#qR(u4pRF8bdQaq1^cNyL&rax zwasC;$vF5D{?Q%!v5*9?7gwO(ELlAygKvann}lS=JIRA4&U+AU2gG=vN`tSGR!wL2 zQTHaEmUw12b#J7S8EGskKdq+DdiExzJ6grdHMDpGwQof?9mL*56lmm}+Frw*f1_Yq1T%8#Pg$@cICrkep+7CIKY@w;t6agbh_|zdELk^B z(^$OgSTYuGKIfc8Y0)xzkS#o&5D$XX-tRICTe~0+KeYmgiu~P<#IysN?a1&V8Qg&x zDgOTwaJb5VLjw7Ig#S%eGCH0mI04MB=UO~BiVM$r=oM;(^PWwfqsS3d`=u1BZRWXw z0Br47Fb*XOlG+C`8YN1Q_9N(ch0%|O3lW*)+ddYSPL$_y%MY4 z3<}2&-Qgk;_@VpRc69GU??5%e8ou@|-Pa}{uSwr5D=XY8sMX7wg~mNHosbzlJy1Sm z#h?V#5An``3;Sb%bxuzE37Hgjw=xA7AY#7@OW^Hk{6Nat=fWDy0EezZ7zF8qt2Vr` zU!>3fOd{zM{`bv_y)TxX!`#=Oq;QqYs2ibHB@RJ%`933npH zrDC8Vm73O3({8SvE!cs&A&NtX-<}W6RCc6#e=UW1yAS`t|eq3?nB@xZluFs7z$hmGJ& zYcUX4i<(g_kLu`-777C%58>2=5KX8MEP(5kqaeL1lcgz*kLPcpFI_ZUV~AL&Oc!k$ zyV-Ou_MtYDfQXWX9Grmv-dkSvr9Ux<{~srSuQ06A0V~wBH=?3}TE2aggwa93sD_%} z7chEHz{qKWQLOq=toDz<(_z#gWn1G%LIR$-hf4pX6trei`WL@w>h$g3*eHi#3Xx(n zO41o6K!FGO8|mf~s?HJ*2N@4QOcTnr1)zzIK7{Cq>VTIOh8FQDe)b>fJ$6wGvfFJiqX;ByN#Z0bFVhK zw9%bi?n09Q$0y+HN28sbVver}5yE2cVdz)HT7>w(8joE#GWqlg966&IC26M!J?j{! zUyVV26bkcE4tU^axRJpV972si4tz~Hg57yTx(l4|ykRt8g&(8S!s}Jc@pF1h?#-il zcW2SOdp$Hi!2Va)K>2M{UY3O;4~Iu+qw9ponP-Vr0Y{A<1FU6PO~vo=&*C0d3$NNi zg0)YeB^jZX-4xtUK`f-{;4XhJsJx#*U;k**3SjxUE}Z7!STY)e1>31%FEt#bhE@vh z;gu&rtikCdFDSiC=>?@1l-1_+KvzgLQiS;vcW2>ruLpVxM5-7%x)*QDnXa5kpxh$Z z8Twm|1LpAH>Iq+kNi?Vx3B&0VIM^f&PxcYZt4aY>J^%nbf~i`!pWwQLcGr2nU@8~e zn+-P)Oy=P|mg;Pyt{T!%Q^sM@gqSLt+ZrVuKjO%$r5F06+F z!3GhkiRSI4g$TQW=B*KHrgqZ&AT8R)D^B*hNnF1VucmApW#0|mC-vHwUfV|Lg_5CPiok9(S^+u$5Lf|Xx&qX-lR|qLzYNvY z)U}Da)-XsDfMhP0FhCYi29SpiQx|~Uh}lgHQpRIFbs=A1SqX}uvO^Lg45#t{mG3C> zIk2QIE70n~Iy-u5TNXXFBdf@_oU5}%z7;>l#UNasf?i`h%fdy{Go5_)V_c|wFO?rE z^5y4&qsQR56C8Ij$JLT!qu?khm*>gQ9y7<)@>wG;VSgN{&t7yU^$3mksYm7d(!XG= zJ%vgxkf(>{@xN~)FPOFGqk0Foi=59z?=hYr8{A02-PE>`8ZZJ6H?@s|K?>GT8^+&9 z@SH8`+(w;^)PiNSCBaE_6}WqVls8Y@4aGg*w+!OA8&Z)&J{vq9@kH(N0pMyj=ej^8ZR zI!-Lz#jARhE>PYC6ADsN8s8E!27{PpmXP zNyTs=XKB&dBHzU2fex2#8{goOZ3Axd@dOtKm9L{ktBZWO@;7R)>ja@o{w}a>@K4>= z1N(fxyQhb%z=`YoqSAj1Hz!fAN7Ffo{*yLb8_+<|nsA^U5JWp5h~|46 zuF?;n(ShfkXdASkQ6^n%5&KvKv3{Fgww>Cc#gg{ z&k-ElSBf-?Y4-=E_QY&^#KLp8#jJX0N`raC1W`2KG{mkUOsz;W;kXhMyMsZjz5+-|}h^uqSgp>rFXN?o8f z%oaIA!DFKJU5nmqFh|2LxR!#=6bwaq9BWHjK><%rI1 zu)RcWTS@Dp;ART)q~fKUn7%$h-sdm@Q=7#5RB7l;zevH8B1*&!-b+E+*-lGCv=kG` zFx!^KnHU~ta?M1ahl<1CNSoPHe99cZHChxGq?%!x2JZ+X%Wsy5ttpf_)K zpu$3r@1pZHvU$4=&D%9}0O~!@+g73N%kLG<+h7Ydpu>Zwk!m-)m~nkIYQ@w5#mWZw zfkv*6fvt^#?^Ey;HPT4{kv|hORBUMi9nvz5apT&$)cWs_?e6y9Zo6G=`>VEg z+q@<`)$pDn55m)g1PBj#KmMO{?{_9MNq}H=wQV5Z`F_9md+xdSo_p>&=brl#kHw>{ z>M@w1L(ObZbMRrjt!AFqj_Yl#AyspzL8gleUxDnLnt4dgIcaejyvGs^d>gEvJ|K(+ zH+F&Zu!`W%fMv9IB(hg%+661k5>`JijYH^+qvWV6U8zdnQl;Bf>2cxS<~FGvQ(0_D zg*yejQPtI@0<9|2ts+Ij>jx!5Guuz;O4X$V;FKN(+N@J0dC=2jWl*8CMU}#e!gEsf zJ5{+n3Tx8fj;ctP>Uu}DFkFQX=b&y;w9>aEr_G}bx37oW+1@M-ZhuR%Y1+lXTMb+5 z6^^RokZwRYZ*ETtriz$(sU6}2w z0EgQt6T^?V09y_)nii}X7OZFF8_(fJReU;uW!T$mlX^_^#iOUyW4o9!fJ2D2m}L{0 zadVBDvq8<-uUOO(~r-@4nQng z>^69r3||h(ISle+tA4qMSEK|?>l1iqD9+Qsy4PJ zWyC>6n31GP+5hxSG3e13Si2Z7EHFK&x;DqG-7al~U((veQn-M%%b3^)YVGR59&JEj z`4~$#Vs^o8XTw{}Wh^!<+rU0?&snbZfyVBOW3!U$q#>&mM!epc0{!` z4rsZyVI6B5l|fcxqizx#l^#o5y=sHuGy#m6>3Y&Fy;Ym3?X{{M^OoUKEYiKqo$6?7z5{s0LhQ%VK!zC8!SYwgy))wi0W0BJO#UdRWvq--Zw@A(W=S$n8 zn#r{_s)e4mMf(Z8_t+9mkazto%^`WG2e<33!RNT*4`a1>O!=8~KR-Lnu%sR!ujQTL$q0j&GEugR zfz1G^L|D5LVc@Ro9PfJ zR*nT&-4Hp=1tLKx%QxCqash`rCi7T}PDW)J_$+0~1_jC`7Rk#Pt)9mV7D>8=GRuk` z*<&oiSZxH%UAw@@n6B}aGPJoV1whJyyA*tUZ6?FA1SG(MBjYpWuAQc4Hh|<$5Bh6U zGT|E|zxc7p%XYAIgEDqCxAP@=d|0pjGfq@e1Xhm^lV2H8nFV=IkP9vi?Hj!?BTMq%S#=B@NBM%7g=Ban4rlq|h!nJGc&mmr9dSWeiV#q^8Q{ z!uD*KLPx|}A0F&3gdb%ShgtArG5k0eek^&<_|cf4RTG+6dtqP3PujEmWXQfdW2fRiWC-(4su3U}Fn^b%MpZ_nn!(g1C6Fp6CsM^-M@>^}BS&pCAHy7i zQO}zYOpLmB(OlXDGv(!1atF)FoEK^Lf>YS94R&gihGm*0`y$YMpjs(x#E6CDRLVj* zr6EVaBB{5~m}8AA0*$oPpkd3BSmV%z?bl0_q$v1w!N=ETYDwgZY*J`UXYSgwOOvGR zy77a}cy|-NNzH2UupKPjpp0G3tN5bbyxf6`&B!sHUQz_M8QP2R(M^(6PLK;T-$pk{ z=(kIB?{>zAJ`{4~?3wi7B1tpyt60ERj;f2f(zW?+q(O>-oLcEQ=s zwFPMEEoN*Jk6O??3eN;&o(!}t7NLXqc$60K7Tz{^)RMiWGv%{swtcF zEI)rqmbTgXX_24p^3%!>u3>)uT%exkXKdDm!1DR(x<=rp3EYFs?YIEKRDry|7c$sT zh!D~CTi!ql4gcRPgh)NbN>XZX5|E_SXpk3GYR2PC6SY@MV|{_2i~@fCl54_^{NQ)a zvOlM?GVW!wkt~)@WO-E9gzHq+BwxyUD7XXKui|QeV}rjjy6d9>pTD^ zs;t{gtqrNY4_57MnNYyOy-5y!;N2}_*~D_fz3N()d0hJuwzj-3*pMgwxcG#`#qs_~ z!9WTTelC5___?>A0?Qb_evT*2*JJPHDMvOCm@t|j(TZ?XAFUWAR5yhQ5>J|fz)0KD zT2VKP>v%&Jy<4sLFi3NJ;6O$XX~iL}_`jhQ8_{r=sTHTnqRO(2YJRjs^>t&6rer9t@Q*)VJ%vc)4`n4wpl0f0zsQ z@7@Lf4fW-Q`f@{kxj)vvoVrQx{}$}NNPkWX4f=FOX<=^~rG>s4P-zYI-G*G2Sag@| zvK(aJP4D*@?7m2U?OpKeP~VIi8}eAv-9fw!c`V}|%RipJSy$rzgBKW&qidEhHTL~m zufXhR_XQU%FsPR+Q#6<{^{2aXp?jM$f9zYp)}AbXDCZ<~Su{qA!O?n&D`8%&rU(j=p*akqh2Ve#T zr*|_O?1an=LoG5f&LDVMmP%~S)Hj15AZf^Essmv$t0vf?fw}DoSb7W=eY3F4>Vu_5 zozOHC^067c*3GhMf^3(?d^HY8Wmb87sv47juTteX*O>Jff3C;0W$Z9%J;s3J*}qTw z`2(G`#<(?2`2veF%1fmw53S7TKBvrI^9hdR(rc)6Yi0q}`@2YElxfYSR%Dg5eJn-YrfsI=37l`<~;gC9MeTRWS7-1=y|TJ1F_bBwCUM%?BvpJtpYI! zOl!W?v}TRKwB`$7F{?t@xCEIX+0aXXHs5Yq^R1>e8!Vh)kdzl%v!)^IU5G?$W+YNY zdPKmqFu(6)-W__Uk;AH(iM;HU%%O|S1K+D2JtAvM*j2?^#I%`l16910A%|snGxPOc zk2%ckV{;PbxzwmR&3t0DiOlU|-=m!SgEe+l*2P*B)`>5ZW#nvKl0)1sS(KiWZx)9G zyph?_vqRbDok=nqHK4=1o2^Suvub4&o9dfc34PB)mib{9?2o?7^#zx+e&v18&;8~X z{$Z~y9MaGIwfy_4pI<;fTT?61&sU?LZ#1h6jDFUmnn~+(-s|?$+e1!X2lfZBK4(Zr z%U)xbSUowUqx)<6_fbdRb-6m)nv2SQfjP`YP14cUT-1?#dRXh|16oHBe>`(2xhV;Wfv;PCou4Ylw`_=npwLiVzRZ0C;V=rG$?^my=>eGid_Hw4Nmvtwc z*}KVo=*#Q)r9*tDI+Z>Hg~A*E78zJ=Fw#*smu#q!0V=*ov-Vi<-cnsy4*^90m`Ms7y(!FF>@TC?-GXCcWik$q3E{*JF^;qnZy^RA*4wD6!465Xr zg_9rHLP@Q$$q~E6F^#x}C-N#gGW*GAaZ_xHwVs?rJpyC~a=Gh~Tn_PJG1gg@$T1Ad z&rW{6U@exDJ$&^ZzZ6%NyvZKFEzBU7g+^w&lSy{-7_p`Wqq)a024v;#CD0~J^Ocom z$!NvA7PRIbM=NVy`=F)ZC#*`5b*$tIz6P0}+(HC>W)5YPO_mw^=9h!3dE+=E*=@$8QiAAK0cnTl!@V1CBIhXPa zppdn#vZgh@lC=#%aKH!yEo(GJlkDc(EfJJq!j6du= zbW^gO_a*@!iWS1Yp9#qF$v>&p!Z9mQ?n9Q~AGjsBCF2FwOee3P{!2n~ZcJIPuFYT_ z^#s;Y-^PM_vzS_4o8t>Ml*r0Qv)xVnd=mVjAA~&U^&HU-hgMi$#=av%hT~xOAc+}` zavw4r^>!%97TzC_;ds~YWjIb9tqsR&Oe<|TKF5PBF(1&*L$b=gEoC`L5M?54%dm74 zY|OD3pJn!Y1=cJ=?}yJULZ9#;AY&iy1+JQsWv`k#T1>~img$(_)Qg8Ex%T3ry>me% zC}}bX0b4B7al&&lr6kIf5-F?+WxJKognP}zk*K9rU$4y(t(?EIRt|j?F|exu&UKg z*K49(x{?_#`lY+27u_zsXu7k~AwL07Y%{mO&3QVy-qdXseNr5QvMC;uzw`Jd6$@Px zZ_;r$U1*I{I~R9?a|1Ymj2$2rxVgaK?CT92D2qA$vlv51FK)YREydP@{La!{XG$d- z<+Wh4$#!1lcDl3!c>i3M_s^^k4t5XD|MxE1=a8>&$k+EiZyWbvHrXr@)!)~L3$OT4 zOhk>cM3e>#;HI2t$0at=j@K(NLE8V0xQIdoX%PibGoNL1yTB+*MBxBy>ELRk?H|x` zK|~Y~7P=nZdPS7Rshx*7XSDMWNbNiXcVLtyqA&uIynO>@aZ>**9z)^@I{cB_DXJx+ zrfLyIwq+S^%Sy8OmiF$EF*%{K7v%BFMCNk3v1l_qca&2k`4H@1E#?ZKO?j zmIn+hV{gf>dB$AR-aQe8+PgR5c^&9IK_XF1gWrwg(cj>Mnx;n*sENDU0Bfua8YA7=kQSdZu7lbOtc);DwBw#yvV z?J`GoJ2k|gkI(?-ylvP0S5%2t;**&f=AiBj6EVXa)SY1t>dw*;uh9`ROvH@)ulW7u z>%5Ep{E&S=WZw(hyr1WR3^{iHkR7{!oc4XN(TMhHBidg`(E_|+n7%oN%gu=Pj~UT^ z<4FDG;VY^p&^WCSmbwnB4|72#C5$z^o#>0qqJq3%2mDa!egWYzH zbjsj(r?iUZvYR>L$uYhrIxITb9$g)*OO33Gu8yo~tBu%~M01t|Yf^5DEZ7lju+OMB z=kq6P@D9;hTiFt>fC) zJlB=hwkEo!t+uT;x>_TcoEpvJ&r1s6ot$RUDT?N$Mc06PU9>i`OGjG`kp#JLPWg6QOoXkKA7FC*FzX^6ZTt&8l8th11<)_Hq_9Cev| zkwjW7XW7v_{_?Gy<-}+(HJXyGPVyY7EE;1A71e4kJh5PB5a5(0wen4H<}LUi())b; z{BoV%B3Fh^ul%9jw6YEVla{lhrtGhDn*VLm{03=~;`O18m8G?I&uRGGB>r~*hf2rT z7PR+E^;Mnf>}p9b*gY0jF9Kygt*M}5gL?LgVKy7w>aEImk3SZzshsPY5*g+Avx@nU zAg`*rklc?b046ln1)1G|x?xnBMPyV4Pzhm<$f)e(kete~u3%$I^iCUSr^*c^ciPR1 zoffnfmR!@;8AD<<7TrwZVV~}Z4v&7iJ99!Ug#s5$(LuAdsMHIi=u)nvqo^9qn3trKx9YX+6=k za7Ai#H8G})Uo8yAdj^-2Yi!q*v#X);8Zxy8nHsE35otQtmD<)AeSLDup77S9jag`!j7PP+>^MS@o0vs>08npbO# zUfO5sZBbS6`1$kaTO;Ow*XY<&>|Pygn1m`S{g};?5BD$W{sjeP&1i$%mbzBS?IqVb zDgCf08Jp~YHX;hq8bvPNGq_EPBImVG&W^t1`k??rK34ukC+86G6A6Hrngt(^VRNweeIAEwm z@lzdrq0c@1^M&xB3u+2Mpf7fY zE()9)j;sTdOSGRP4O@uLoTP=%^?Y5Uzrs)Y>l^w$Nuc9AWz@4FST^(&oh=3cdfmdB zt+8Sdh(ycAAdn+FHu2Z)ZU6-nEDZI|1Zkcsmw#r(ovNkE- zD&=cZp0sS`Da>{R>z#`>_MI<3F#g$!JwtjEm_Y(F1h+=Wuxwg3KNiXzpp4I_1f8Ai zrjp&XlnqsB_og%*XMM&DnN&Js>b;KH>Tzapl-nJ_I>*AdkJJwcuf{QCIBx2_scKx| zy$&_5=-zCismC`;MACJnO6;h5>O%3A{oXN3fq-8y@C%AD1K`*!IE<$`=5L<<0C^Jo zHJdWzKys%pN7aNG0~Dl;c_P}aUlukGp^39YW0%(+bky#5%nnWR@>Wu1XYxxT&xHw9wo*OWM4_&aF4rRYic;PzXg^cTk6|U#euv1`_ z-jH?;e8pzGQ?pZp^^S#asHbRuRlmUAr*d=d%fUJ z;v_}jmgfyME=7$?8%>_ce9m|^&UKp_H`b#buUC(+Q;%;}C6Q^QqaItM9^I&4 zX4a`W>($J)s@$f^3uuM;shCc|n(QFf#<23AT9q=`^i>Kqkv3ZDM5-reJU_16_!;Y= za$>n)%cUnbI@L^eUW(MdMU=b?}|Qy%b$w8-kURdxkR3R7|T;?tj-2YuRsdt zYma79@O3IceFdnm0QD8 zu`99siS03lUl*2w`W(tV3oYnwQW>=>bG>q}RT(WRbDi?ol!r#)@j8_!KQ~zG4A$fY z_obFM%%~SB()%wd|MW6TJt6XM&tB3cJw}BznX6LJ$fo*nm44>FvawI~4 z)=d-26s7W1)s6*|l9O1yHa%mI(Y%7&FW9E>>28sC09ytLfmIeyQUBK() z$DcbJtX$;v5R^I84p#tzj^IZ?%Kf?08aka%)g{|&1LSY#Dz&po?To0M1LiOFsdtsX zo#byP`P)hUc3v=lj(+(IjPSD-LIpme0@$Jfnt$NYY^7HHLa8RM2vB z6?!&5SDy0ZsX(6m@>IglVv!l#mr2h}-d9-f(t(_<-WgFdEjXY1s3v_sXY84C*fS-o zXc+QP#uXS-qSv5g<>7%&&->_Xm6bo4r~H{bRew$6O0WLDzVF7I+D)t5&4QCw;bnm;M1FUBRB?|$l4>8o(Z3E+qm+b z;WI@$!e_ke!!5p1D_Sb%H|$)HHp(v#yB4I?eInf5xMNzlr6>|^@zyl#{A${W#e56z zZft*@pQZy1yZ)b%o307(o<62V!p}6WZRMwa8L>x3hBfT^>d4w_NMdKhuFt2{JP_Vp zv?{#YTN6IxA$3o_lOivrdTf%Hf;@h_{&08E>2SAqW4K}Z?RkQ;yK(z(`Pn)p{)LcM z30am{ij$OLN4Q~tQZ#%b+|qb*TDYO8BixW!icO6tUJq|-Y^M~TANlq*;Z4)WS*3VG zN)gtj=;$rQnTB0=N+~u`icL}q_sum_JojZr0Vm+EqI;@qjW!iqscTnH& zGQPV2S?|qN?tRMJrHU}Sw<+pZnd()hc9oZK(%bfuYTWlX%Dq_t0eA0FR4`!?owv=( z8&>Y9Dr!+)W7$$34+(g@x%D5q{JH5ZxQh!c3dZuO+(%W>JIcF9O~2L9pI*iR=)V{G z$398V;{f#7yG*%D{K~zsM7bMP(Msh#uBMML(ax#H6GZDFTI`cs!id&Gv=KFMw{nka z(l;D#O+sN`RQYx&Uxy|*&)Zc|xAMKI-0jM@SNT?|qFu_JE!^Q=r;64n?@mo@s<1?; zoTofIwyGlPW3Rw^+vpVeb??GmKqa>-Z$x;=z0je&`Sh3yN~GJN+;3~>?Lb2iujVJQ zz*i}im-;=W@>5?F(+$gwGk2JxX<1>5Vh#Vci##Ua^(l zCX?P9q}TeQ#x7a)J5``tDZiWGVmBZqx$G^WRLMjF7ET0X_;sbWzOD|A&{(a)s1ClI z0%V-XHH@^|%{>rS>L8z1Qfw<5>wB}YiU>`lahfdfc$RDwxK;VWiMm))l1)nOCHfYk z-)u^8LY4U`1(Z;A#5qOucOV{*M|q6*ME7W_?K0)EsD?ov*s5kObVGEv9FsJ&WFnX* zk|LdTNtwcy`zI#&1N+nWkF7qbA@N+!3=3_)^EN1TRW3hjjX>R9CKi;j_CC zMYzd}-tJYXQwcibDJ1zb9(iskdIyk$yp>9JaqWm+q_?uquKww-8Fdpo*!E#6--SvQ zE6MK6li}UWqCoTKc(rM^$ZO2EBCoOE7I|}1!Y!F~;g$?6;jdoj%GF>~at+w5Tmv>G z7qBz#RIZHW;iH+Y;iDOE2z;srw~*!=U_sfPiJ_UXML;r^o0OLul!eQ!l$YnGB+&O~ z*e#mA_diGvBaP7uM`d_o;bhZ;Tho*PxbK^C)EdTyyXgRbEufd z%V@L-TIZnE;5PcH$*K*#hIYHOYMbCyaM?hrjU(jXGDUTu&N||XZ7Q$u7eDgkKCTt| zK?QpeRE%@bDSo_t!_+@b(cGo|PalHv3{;MI?%k(VMpR{<)Ft-7Ps-h(GIpxWI^_{M zz&gsEieHtAh^mY?RA#I4q>3_E?o%pbi^@EwJbd&lTAoOObWH*A4<^+Az4sdqSnP;# zfbZep$>HU$UjuzUSUY^RS8uV9l`GnilP@-8npE zeahD3+W@*&xu;$$iH#<)(K@kCGZfZmJRx45LPia}j>?j;Dbf4yz3<+F^IL)qX}%d% zc3)^)uqzd;fy{PoXfa}>RUG#~nnOLg9wo>9V4V!CG8Q!&aON~D+H8oIT)xXsj}b6T zq%;RMQr{GInG_Pwml-5}hfv9s$4xoh;hm7+sYNeK}@wDXj z89?3y<}Sy#W_j>2ukfq|5IBKWrJ_78%EhqSfdSXSwefq}B;C#<)~R}v@9h|5ysqTh zg}sG)t`?wm*sTEU#0qQS?j#8LQ;z&8$DRar1lYYgifa3wDyQj{BZ2~jUh*QJiMSq+ zg(N=Ji|t%qNIuGWRDrimwCx1WBJ1T|M!_61uCgyh{gX#G#9n@X&&o?#wMG7(lvkHi zb@VM{;J8xnK(2$3>$I8~RdY^ivXn29ayO`%JJlRGNQgBBa)@skQA8(U<{Ns%NfSc_ zPN|t3@pVp>^Rax<@R3TxsO{+NYyCYjJ@-J zol5KN+)iD}@k*YJM@{9=LsXd--e z9A07?_z4>RCg6n}orm8^$bW7eUSb;fVu81PlJeS^sn=PT2=9->OH2dbr13X*0B;BW zpA+G0;_wpFz^_P=^3D)=s-SabB0Lpf(MMt$_`KmdKYM_u0y_UX5gsyH@DkI&Qvrfs z^6vzGn1-)D{P29o!H4Is;A-!Acz#XFBlCN>oWmZOU%<7P>t(KXF30dk=I3#haIN4n z{LvlbiX~l!pPuI4kDp3OO~ZeMQ??90Jr|Gp4W9b((_~W~4X?T4)A5*p%TqsoN>79r zuF&v0riSm!Pdkt5`ZoB5D-68EH1K`+>1T=X!W9NyVjB29{PeX%c;N~IFEI^#AAY(o z5ni~$z)MU6--n+*ng}mkVc;dEf$zglhmRzbSGdB!OH2dbho9;a;f0?Jyu>u{efa60 zHGCpJO%vX-!!ukZTr0SmxNIXHnV-w$=c?wa;p*X%@zaj0EUEMbcmjjFV}|esnH1g? z*+EmXb^emFoB5MQ-pKck^%6tmnZzKQ(mLYuY^lT${Jru_%O@REw-1UhG2-&fs*gd- zGpjxf{2=6+RUZa^5c15b4+B34d1mUvlE=bDy1cdv%CniKz72kV9A07?`O$~}{yGsJ zGFtd0rh)Inf5Q^tg^NsnB&LDy!+#qNC&**rKLal@4SXN|`@V)3{%hhYIr8v)KRvN( zt{Sc$F6R}zI7wzga{MXFAAODS{EEfNLPNWiruyx#P z#k`w)KmOZ9?lgW4FWlKNIv(>1k!OAR&y=S_!&7_!*nBzNzL~evQE$b2oqIoiJ=V*wYsD&~(55{}%#c`T5GzSuHb{)il9x&HM)>u) zi`#!m@@5e7GD+SHLS81xn?cCSBzYrTr}KYdd1pFPKrlgGL62~=~{aP@FG(~y;1i@9Fr zYUgr{f|t2UxK?l(d1lGUjUB?b&W^QmPv+NRBuAWIZ$Q=w*Ii@9yJ{f$`ZvU|&ftQ#Denql;{aPZtaGimdma2c6?6m z$^5#C?rof3r9BDPJ#WRUAz#0r2tNq<`a~kUaGlU+#D(SS!%mL-=&l2HQ(5t8XAIy)#sGfS zBa>npYnL&9=P8x$dPJqq{k%4_h;Dq{`f zI;?(GuP(avjC!^7)^iLvoMgb^5Ful1gp6SbB8`x=L!|!n;?T;_8=+N|sw#5@wz?U$ ztNe^3CA_|a3B9Q-MzSA|{0hZ$-oxCHsdw6xd&-@R3{4oOe20{K61Nk|XCJP7X~R`f zqw>DRaNa#Y&ALaRu2jBvfZ}#W`CL~i-`J~E(O%^}sNMFB`)`oBF_}AL3cpNo539`0 z47U;ABk?^`NY7JvC$qH~dUB{|zAOr*Ax)2p#M=91(R-NCTg|&&Mn&Re4?uP^I)eYb z@MkCF+-+G_u~E&N`qUXUFXs_8bLxUKYGx7Dfcrntsh-@-07@sGe|+S77!x?G0$nDs zi!lQN-yv|7n%N*r0Rr2!d%8^>d`lhNu7?X4SFmd7oO*RG6;n%$ zJtDqym2)K@Gp^!ig8WR9SDC4E{ClcQs-SGvJ!z_}kXU7daJJah~M4+CTWhzWvZB^Ojwhvuj@rqLR7hfM#4XI9spL**?b@6J|ifVY4 z$u!Sig!)haQ!nLnY5bR>d}*BWZ)(a_sq zsK-!#YMk;#G0HP`CzDiUnUbOW)HvmfE=2i+`M{UeUOq(fsR@7kg{q=mHv%R*AfWi2 zawpS4+;BO+h4(NQ(>GxlQ&T3%k9|0=X~UUU%A8W~Tgh&#@<7ZLN9=@x6HsyY9)JFG+CAwK0+Q*bNk_k*T$Z zAwi~7;5O;^cX%I{C+{sqr?5x&wF;VX#wM4r5p_}RrbMpz5`cUG7|UxDZ}~ioE|7%tCRG+p3Kc9AkYe8Va1~GC%?~|C7f&LVpI3(@JK8I0 zALKe`ARPsTJQNi1vrnP`=-nzYrt&7=Mi=wsJ;PN(CcJy)0qD{GS^SjD1ysK-6bu3} zx}-EVe<0TW^bDoDOSIwQW-@G4c~>zV*9IdhAG4I7&eLmO8h2yUF#VRP%x^3A?N0sq zG!qx{0&#T`z_V@ z7D1=AO?p!2N9J7j$L*%b1K>46Mm08rQL_F@Qr10gGwZ%nHFol4t@3sXn66Y(VWM|8 z!Q_Xk+9UaqMW$}--h%{_r-RCUR`TRoSio#@3U^jDo;69F6*#D)*Q)v{+!@t)#vnT* zGp;oFBBFS+#7#^(5n{=vM8VV#js=S)mP8V9 z#G56IVv?v29)wUI9KG^~50>=NQqzbY0xiK4lRAW0GAAZ*2(iRXqO2j*k~E28hEPk$ z#3T$MmVAi`7eXx2G9*|2q->#BXM}sw`hD3SNTm-`S(8&$`ez*~>$7YG)Tz=t(2C!Y zy%`#No>zsp+S)KSyp1aTKBvmM&#kgfsq~Yo@zi(36i9z4S7kjkQDt?>ehiIW-%-89Oo2lStnKc2~~KzL!%C>tivk(5J{Q$w^Y_? zm3}JzeT!f!yfs$?V=V0zvm)yqRdiIjng7j-wA=IK8w%Msu0TVfg~yq&1FDD@4OVmj z3sZbnjYoE?qQlB}t6u}t#BVNiHVH$uHT)q)afj!Dib180qa%Pn<}GQWo%b& z3b#ip+EV=*6#$9D#K0cYpsyHn1mt`&>Mki3CUtTQF?k8Ci0B`tU z5nq8yf7-9Ip2jfWzKkA9Z)C#E=hqfXFqUs)%l}or8BUe{tHrRk z%KBBc+|plJq2FG4S#FKzz`Gr?fp57?WYqXa$d_ix)bhoIna?jT*1OC%ZYzgi*5HP%SdOAHC+^REp3P*c7i z3#3XvOX!bkc$Ba064ba~BK^paNIw6{&}TJ~Dg_lmA)1@X#@>dP3tF&Bs4)3@wyeDK9Wd66XX!DM*uQ%FD`~8G(iaQx(=W|GDt%EOCUlo zSN;%XNcs#(pUam%iT-ptTuJ*SUeF$b+lJ)NdoF*R7#~n})hmZp6MLcbl{~rT^H%xH zVa0uAPM-OEL_Tw-W?yMjU_P&t&oN5}s3AFn;vTYcj1lxcS~>bW>PyHMwgKv7qkPqo z24fB+UjTsdKdDZpCG@rk?2^EJX+yoO#NHM(>|@^y$(NyC6n(Ql%3jof@`X7e!?-@{ zXxKF$sS-Ysp%SINZ~CnAe!g zCfw0@y7y~8k4?Bo`)k4{in_ubKFeJb^VNh`F^VmIhoZ9rptPSR9C>$MnsCo_5((8N3H0jI4HA zM3W@kl;nB|pU8YG+@5(fyeh%z5^mQn7qWf1U7m2nhsWjjb+|Evft;Xp7tW!DW6f5^XzpNAZ{t3CcPpXWwDw9Fxed2G- z+$4jhSva;Bb3Lhj&+L=7O?kejBQa>pq(#rOx(woF?p9vLoBu|6nTq&eo^pTLp&a*l zmHWjNI*p%o=rrEab1fO;-l+G;Xwwd5e9-F^1JCS*pN^NA(O+f>u-n!a+4Riw(;kUQ z%DyqxG-Bm>*h#t?tLN+O8tawH@lZbWs+Kp$e@1j5(>m)_Ci4Kc>y3@IFIt@C5#_E` zSu2HJ>>nm1BKHjYvVX@5izTM_G=fNM@sIeDn1W(Z!?X!QjU0yuDHR)OO?^H!UT`b}3xhN=oA5-pM zR!abB7O_j+?M*uPtc-5mN$wpdsDDWnaSo3a7BO&9g6SoTE%Bf1uykuZ;l)O@J+s zLX*t zB*62p8j3Lhs)|V}?jMWyR{59$@+1A^`Jwjc`)*L)>y#%O067Cl`3``{fc`vBBO0&V zWqv)Q;Y)s1)T7)#)#(&5AUe(=8TUSG5*}5ei$UvSS~N{1xI*&D4tU-r`pL7{CO&%K zR}d|@vpv>Oz>nLljCp=!B7FB{ovsgdg&y$CA?1GErh(vWGfd%mO^;28cJ$(yheDE; zyE0Fg;SJ?6j%(kK3pB3B9Mlr{V62}u31pGQm|ySF@nGm4YQ(8)qz*p!>!KhE-;hdi zfA?hpW4gEZJNk)@DRogEhcJ)%r7rZS#?O0nF5x&ce&MTJp_9McFA|p|icUahouuy| z6``M~2tCU16}X780ZJxu+&|8ZSBHu4bHBzl-$_vlC`XOX`LqJq);t=?!?;e7VNb6S zHcVHN!Z3BkcWZ$z7F3{-GCSsZ9nr@okk9ESPqla?mG5!zKUP4o7E2!7Kb9dKMUFjs z073a)uhv<4xdk;-QKT+X2r+4Hj@2B$=tfh1MbBD$*6<{J% z>Qp^<=dmlzi`J;&9<5KqHCmg7BU+bYE{i4&ukx;A z&*gy>DZz0~D#)GSn^Vk_R;IjYZ3=SHrQwbY(WK!Ttw%x5IAVep4L9}Iq2L!K%I(2C zuzr~_s=$3-p0pz6MQc)W&6Z8WhxhRVe7M1ocDtJZLS-i&mqQ zLzF1VaW(**1g$_xZZPVTE`ZUWeU)dpDN%KX+kHlNdfy^vT60Pc9Yi0D;tY56Q=3A& z0!s2F=7yBVH79@r>&@_qOKHt;$7SivaF5q0O`|c%$$%;obJpn03oFcUjqE^sNp%^H zTtZor1XBOOuN+BSR3li8ZZwJ!Y)P7tcdZ)fmucO| zd!lCK^=>}|5yc2WjAk@yQDP?QMc%bylxh&o$h%RWKCKsdo$r)l#55z%eN`ikH&HR- z%CIz}R*T3{QHm7EXhowE!JDKLdDlu&aw{rFvQeY!Me9UfpDv*3ib|x+MkgADC@~W? zBJWxyQo~v&@}8&>dF`tbDbigI=q?&De8Oi`qS1#yCn-eUwMG=Wi%Jya2?~){tr5w1 z;=kDZMSY&c!Shx2YQ0B3XM$9-cinTc!L4i(ytSHDGS%vd!#AmeYh=+=b5w2LVfImL zU>Dt-=U7u!9jqI+D6Foo?@HKjF43RP9G`0R{P^bH{nJ>5x17!8n1!@KO>b6pO~X`O zbeJmKtfsG#i7SOs^}r52Yo~!N6~Du#bIUp4{I-pY8qLWotgj&jbCPT!on=mGrNiuG z5tBiIn>#(+I)pN+oJ-t>g=u6H(^zA6wl`APIZ=5XdBh$M{*VOC^(g8 z{@#%)ut$CIm@3OnS(UPFTKOybsIO58yBF&7cP^P<6|fSTd=497IL5+x6_`0p=k=h@ zE*VWn?WRcf&aShvPd+#QgG1*{=c-YiU8By{tFyIge)~v{EKp@Old=DhjG6VgA3FNY za|;RE--%Q4$C`=>=aYRv^qZF|By6vZQ}O>u#y+IRYp=*iI>R)a<=>K1ZDl}%>;S=pT7{CxI2KQo8TrkQXZ*Flr+cX?=*vA$t&(D}V zPZ9Yl=Y4$m@=IY;O`h8+KrG)&O}+=0UlEv~VO*jt?RtJJnaPv9xj3m#(^%+hk<$M* zb#jQ0V;_QWNBKYnAU}D5=tAhTJwT8lBSd+I%9`$H5A(v|E{6V`ITdJu?t7toU=QUu zMj0%5`qI1Qmk&*OAduUXsr{Yaa(yeITo>Ud&$cBiUq*cnST|7Xuj2KChT|Q&`XRU< zl1{W!3lr^6(J3tZWN%$a9SG@#;sI*Ve_Ei<0&tv%t8UFh-6dDS4<)Nf=Nn#F|AKQ& zJL;GF%{|;r?s@wwE@6$p?M(!uJSU&yWffNw$=X)R4=4Uiv~A+YC+ zO}uJ^mART;9{;}ybc~%(^P!_BH89a)0f-!9?G+~Lc^7Y=?>jxo+yJuUza(?9^D-09 zpR~?T#o%&baJf}rRFfD;2WvuSYxfLK=}75J*>}8E&0}eQn=090QzgwdtS%2W)-7sY zsmHG7ExN_7{O!u$q5M6{e?rYadWD+*4%acR<5#FXyVRb2isgxWPN}ndU`%y(hdO&m z&EGUa&EGOYeQ_`Q)w)y8F8Ke z?_KO!?$ngCs^W93WWLCHf6ljkFY9OXF12}|+I&Q9zC?Yz`oB{jgUin)=|31W7QG*j z(L1L9FUW5QG~FODT#{P^2kjws=e2Qg;0El7xf^(BmWO5kvSjM)0$RpD*t9 zAmq15yHVHb*7FTrTdZfhSo`T)o_GryOnE3ssV9}+MYkYg-s|$vyVd3RC#xKZ_Spwf zKbxtG&D6za>SFU{*2QAQP{m zh4gP1m(5R!<@tcxM`C$mb@MNSZQqIck8AK)`=;G)yR@i6?D)lgw9^JA+GzlZ8R{!| zex)`{{lSJ~I|w7yP?LQ&CLTKb%Q=znst-HN8enUtN1@cude;ch?{9FoKH(wlf>l_Hx^ z)IdSm7iBcbMY%5J&#Fp06xzOI*BNqImGNSgJ#xIc^e&ao)??{YUu5y@XqEn*#WHT3 z^<16|>|}kXMn>~9YE;H**~5YPIHTL&F3Cu)ZdB z4Y}ql7yFW0!SfFbc1U08LjG@Azf1HfoKlm{0>djQ7h_6I)(O6htGjpNhtC1b>Dfl6 ztENVKII{*H`DoS;KEU$82Ux;o+esg*aW!iK=uu6-S-(0KjZT#Xz_R5<%`2+${42`W zpnNRsWYsL=^UOh*GTNbMEiuJ}i8hnu;Fbj|$!oHITI#cEnN4WIo+R!92IQ@`<$46n zYewC@)q2$3yG&1l@Gf@<_4sC&TeU;qSXjH!Iyjvzmu_3N;J=Rao@ZS3Tn}}_o+VBx zjhv7?Og7PwBW7f4y7h9#yoX61dHNKjeVo7IxNZHSEk`bq-+c00;M7NDP9NbA)YC_q zTc){<(Kip1WdOAfy@U_R-S3X*^VgH+-~F~-7-+d6hn-n5SF+XKc+!}|)ubAm^u7#@ zQEn_!KFUq@6=8bKK7Gt2Bc{8Q=PKoSoV4srh?tct2Mq=5oxuanul^UD(r11`LV6h6 z_VN5&$wiX<&f%w|=>~qH@^e&vlG8$Y(dx?|2e90p%g+GmQNgLN`=waRmdbCn6b|g; zq$2Re(9i<+%H)Bm+3;$hDBF%e#Pf16OmZ6}%^H3JY_TvC0X7F6ABgab5Szo9=;h*h zDxdX`UXJ+t^N@& zh$>`S?a3?EyjtpseGd7{T628DAlQ(l9Rni8oW8msh@3g3M@31w>G^OzziDhSR5}HFYG^qz9RmpbZo+s`J9rr97q*!rJ z$Mf)ZQsk5B>}mDI^Y|Z9>wDYRMfib6!V&88>Zp8fv~;Q;%cTbCGVh~YV-aO@v28?d z%oHP>rs5ahL=#s#b`K3k1jHw^GE!6ImX5{5%ay}p%nplB53PLg{$O`OWuCpFMm>8{ znt+NP7{9^tPqy0EH+ODZ-x>|prQBAxphrFt7G2%k*&Gi&(7edy9Dl5NuFKih*;?ev zZ=K@GCoFe%b*uf51VmcQ>u~~RJ>;MG2QWk6% zfMoy#8&mqiwAb5hfA^IAt5;O2&O)R>u%Tea!;e@4xmCaU3(3#}(?eSyygyVQ?4DXV z$9`L}UENd6wvttMp1+-=xm0KhXJ1vuRvo9VHK$HeUbUbn z*f2HJ17$v6Uqzv$06+LH1t9aCpM`8@;5$yQ2ge_Sp%%3+byZW8=z;B>>Kk_<9HTXn zQK?d&i(L1qSEsn{Gu8VGYJ7^TfZ8pfmJ7MxM=ciy*QQiGetyYWA+q|$mBhCQ3|l!m z_P(Hrypou6)zT9}S}#Oy<-sQTYveomn;W{KawNRu5CXUGO$b~kFmqjnxYnwl*JceLW)s6K z_WlfQBk{c{`5i8?kFQyBO04mxu2jGL+G00tsXYbb?w3OCr0;3g_ofa5L9$8TM_J!% zI))j5FWG|KIqCUbpV9E-STn39<+y63hcMr^;>G_+q?BcTIkyy z@-RB|?QXf>YY%<9M?U~^R6hW6f(OC;bubGL6g<6tx6U|yd7wa$Yz^exvWDZn$X2)Eh6+sh_wpKl9QqnJHHK9@@?uY`~MyM@R-{lXzb08VMai9OPL{^V*Z9HlO`S ztTw;NL}*i+G9}uo&F3^&s7@{Y#~9$!k<7>DbMVAuwe(IxgC|ne(n?E2R z5>=dDKhhRND%udn#eA8oo~hEP%7m1Nb|MuK*&C`GUz3E+D_{DetFIer1G*SxT|&NW zz|8ebb(IiSLRcws$aYu=d1F$dW0pSwg4i_~zP9$8bQd0Yv>b z1yTQ9=*pu6j@r|XlsW+OD6U@+Q}jIE{V8?9Q=;XksAqmoEvjd~FLfy&2^%2^2R8_v z{J_l8DUoEIR3qO7Mi7OX#&4+YaKv#M+>(}n%o=Ths-HADYEQ+$imcCt@to%CEansL zwX&E`ir!cjr>bXCHKmT5EaroIYC;yhL@Xjgkx<3T;#7elU-`XRG&l(YRMHZVBC@DK ztt3%=j>%l7urUol=Y_w@q$taRV1axxba@Y zGj*ofE)?g&NgdTSu#CV>bxk@R2~`Md6W1Gq4c6F}Y|yoCB6U0>5dem5=OPj9z^iAL z*`>ms;+MF^;G5fgBT~qURE;S^V;Uit7Exy+cqoaKLjB}i%KGyu zJ)=*Nd>$-3rMDcWH8uQBXDu&uN`I|LlV;k}TY}``cYIsG$*L6FVTxT$J_{gKA*`sL z35!$i*0jpDa)9Tc9Jq z)dkAe1)7Tbxp;vZ0Ed{SVsdmQUZu&aXMeyi8CXc-i>xvXm|hSBOMaszVD5NPa!x_A z^fnx7m=3f++xQL0pPP~C#f zvoU`f!~oG2Fe*d~{~4#~FNpBJPd_01@750p|2!Tn?Tu6xC13fHR{4lqJB*aUN73f6 zr$Z!YXsig-)Q-H;t8AUaC9;)9=}9Y%$Mpkg%+wE6%;TJif(}`ny=nzmCQ9^ogmhi={5Pb&lfO;xF4%UPHH@S6}bq z6o&*7QF+BS^^JePbdOb-r{}s;ou4IuZzX*DDTjhxl%sTnAIVW;CjkF64;HiO50hda z?xXPiwUuYpb=x}c5mKEa^3y^fngq<*M-6E>O=JvvAnzC2_X=y`Z#b_d6D_xMnpE#e zpnd?p$1bE<$PSw2JXNbTOXt7Fa&h>yF7W`;K$mDgpDntT3FN>M=;H{r8xVAzPYbvd z?lp3CS#mUv;^$JHMXr31oHG=PX#m1?xwQu9JjqAwN!rD-G_fqDImzMDE47H2I8j@r zgnc7Vo}|U@YLc%ajaF@wCuvh{PWdWr-^38HcAf)(I*U2lO|wzwzwm^D&-fbBhP&eo zJpt}%cmBD)r!M+4)60her7tMAjvIerw{`eNUttR!v-&f1J>ArFZbh?N`X7K)-l6*m z;m5?}6IcX`bP{-e zUd(GkChG9K%ICFBEih9mpBJ-Thv!#5FIKyLo?7|5*yka~_?lpYdq#aiyZH*OM~7(w zbhTe@>775P^fMe+*b@48ls_BlEXJJg$a_ZjlIu&aUTIq_vXGw4q=WcH8nQzXnZjK9 zG5TL)>C(DsjJb#>*Z5;dBxluUjCbRy+?ZEm!8Z&lnnOJzQE`uCN_{mBG+0}AUe*qne<^i9AJ0%j=L6&r&D>kU5Z<8Z&9c<)&`L2UbWn2fE-h=ZW z?3E}3`wt4=t^eQ#%YV=s!GCbI{!PU{7wH<-8X3roP!~$@BAi2Z>-f`+dncD_7B633 z)g2bAJZKS_-kqc4u8KI3$Cge`Ch#qMgTP}U@YP^&RID!bR2(b4Udly&GPGYLBL1$f zg#6`dFGsz0a*P#z`g4=Lv4W!OcS-F(#@5o9=w4?QU-6$0yPluG-mt>S#?qKf@$X*C}!@3D%h z^$BWV3K=0&P5~uTodE=?RV|gD7{9;k)n5OWMGsiQL2f(#>uW}isinU`%|s6{_Fb^O zvo)f=sZHdHmqqzlp4=tC(!(S%*ymX3xRrM$vCmBTJQ5<0t;`kSP%;7`5oe*$@EDp; zUL4I0y=YP^R;#6-Nq>$Frapk6Ws~E(wp$Ws%8cn)+rVtxQ$a@T)&~4S`pa>)F++qL#Z3_nYuq8S1Wh zonIX~%Y=68(7j@{-;r8bVy`$>_P3R(<2Q)sbiIs497fP&)9kXf=X8Vioa%RJAM0Cl z4A25Rr3DzXDg@VZW$miP7V}J-zhULUZjyk9rCEie1y=FA_k1+#hr~K|+rQvB-rUukoHh zkEeM}Xuy?!4;YqN7KQPfF&)M5PL>(i$)Nc%rjxg3jIafnu5{kZ>Bv)Q@Rhd+Y`};h8;-4#hZmJX8>~Si>JPattEh6U^nQX2EHum=g_|v{LB5 z=9i^iM^n!xHtFDRb8#(qmw!{GSU=jKs5x`Um;xo-%K0gdT(C94WR~_CplYVI^8O0{ z`kFUkv_x~ih;Di|8Me6-ia5k%K52j4}Qg6tjF;9_Q~#7z55+67dwq3sE>-zxB_stEBao;1kip zLHTtT7I=8V^+ko5OrOr-IIlLz%6kX-h`<0| z?`^CN*Fdl|yUc@xC5`OJh3ku*PjY0-b(u!678z~oE`MHl8(aI?==w0m!Jc=^{wA*& z<6v@ajKiz!%0|UFJR5yknP|Wf5e}`Xv)SuKZFGa*kh1FV?IRn``)Anm%#xZAe>iO7 z8`Ku94AfGrxQ3ThVB#9?cM4@yl!;KH6qZy5Rr$X*{)H|xDGKpN@(;kE8n~PEu>*dA zQea=CLDbG4*TBX3FOa8%j)k?GFxpKHm0q#z6c(@}gvwV{b$FTlYpIuOu(NEbH?p+V zl*S6Be><}DcvBiLl%6xPG{&PvE^+at`9bEGw~^Ea$@>WWTgRD}! zmb|-u*N%e<`vX(l7rl#k5GjaX&{~rLyy@3{rcAjHkQ;c5Z9``V!7`;DT0)G=jtZMU z+`^Yk3xZG!s-qS%!>4Oadl|K|F5MWcG>C02w5R;x_Rcl!2}13uOzkz8_SVUh z#MANSX=C_QZJr(spC*~7pM_6{ccZRLJW}fZ}pSGK)uZ2%r&C?y>(?;`jZ}`-2 zp4Np=cbKO&;nSDQ)7tQ98Bc-t3!b3#XbEZAQuHU$IYz|5{UUDg(5~0pegL3)3)JWB z1Zb0KPxUvMN`;ncOwYH6JxhNKOUb`1f^Os^l$2t;gXATJCYX&nGETCism7|g!OiqY z(H9+MhyKD$rZ(Sug$@Fasj-v!Y49;nwYqrOc9Y-YIG!C43_~bI*lY@}Q)`64F zqx^$_H=aI~*0GHBcli|lo<7ZFyiZAvCn=l3-}vX8})`k4-8GN^a zJV}rbd3!$L2Qh%z%!V1C>~>*wBhJ;bACgse*EDYsptu2AYJmnVP-_wB`?z2Hpb8j& zW}|;$LwfSF70+J0;Mucd&t9w}*JN3lqYuS~%JM40i2d_6fyorSdn0jTE!jn(Ucm zqkr+`tle`0zT0%F4zXQ;gx8|K6^GQoV%CZ~vJnHP4ST(HCrbU0rW-hvx()25-G7OZ zTM+b>#s@1QmJ))$6* z%#l>{pYT^&nZF^-u>Ez6=&ynPx(ZV4uas;f%XTUwPK?sOU7|n!jFISh!xBB$Nc0a+ zH4=TWmFRhFQKWzTCmA()OKTae21csU+t|FJ>9V-ndod#{9yiTwbbCK&A7(Wfwc_@k zVV`F=&8%{J>+M5F)6539H)S8Xnv7y{dlNiAJ9ELa6;C~6T_+JT+}^j?pgcSCN@j5( ze+M~kMz7oEw`&Va*AmyY5`EtcWc^m*lb4_x^^|V0s;T!7as)4_H}E?i;ju%4YGvPaw>WbH%gCB1Ur(7SGl?8Mr>=m#{Y%pK~N1@ROkSQjLM`iFXlmelhw z70Y~GU+tl8|Lh56?tRI#*)qASw>evy_H^&a?X6rpbQAh|ul~9hJQyU@K#h8da0oo# zk6&owX)(IH|H<1J3r#fSrGO7R0E5rgC7=8w@ewxo*T%;u!Vy!Y@Zs-ReEj&zB0B$E zK*#E1%z5yrCS0Kk3KCG?S-E5?>;nq{%0pTyl za(!jFL1H@-XHwYHJoD5=0+~53$V}}w_jLaNHjI8Bh3?aAuiJSCfrABk0Xe+CFLCC= zt(Amg^{oH#S!dACWc5S#%(2;~?Va5Z7wtv0qxLYe>mlXUZrqX(@oIM|5xwV%h%LJ> zEYA%dtj2}mliiQ2l{LppCJN_`G^f`iVl?+o{8bjW-R~1_7avnLvikEEZy3wZ4}-*& z9*1~_pFPbzdhlO|Sv>`2F0J}S3}*U?9{=^8W={YVdt-_{%g1}f#}Lgi{5z?B-NHnV zW!~nCe;t8&w7W3jjmk1@?d;wriVbFc#y>%O!~A;>sBgX$xoYmwPXXz#8VP9q)ddqR z(w28m)6)DEs$SsNG4KmqeteLab$NGLNTUV+4cm|6e9$WsHOOHKBYaN%Gj6}6p#LL| zpG@sIoEB@HWQs{jz!viFI&Oc1>)stt`M-Djx4Qj1=J)(&sBGHHx!+Xg@)O`81rHgzlsb#8x) zlWk2+u3xvKIx-s%4a&yfVyJ1K?D)@S+f$SME$-c~o2*G~-zcSGL)@jrUH!20bJ0bi@Zzho>pAswG{wV zb#sV^Igb4@43+;&(@Fth%_%aKs7X)WF`s``ugMz;a1SSGJm6w;w z)(u3w?QXN1J_3-wSx1#MzgNUtH%kaz#8rJII z5@*@sR9F4F`iJ^zuXFECpU-;Je6E*6NOwCso1W_4;r27SKhavF>f835ZkL@0=wmkW zR6E~~E>V9R(IIjvj_Gd43Nhny`ny=D-OPNfg40tbd9l0(dyXZt$s~>;vdJXMiEJ{7 z>2Bs!lc;qwCz`~2+{|$%apDR$bF@i)z|FkFB+hU%3PJbw9PVbyOyUSPvzxWt+f(gk zUNebFZstXkm`MF+NcGM7u^9I0M@gT4oIz`&lE<6m4-IV6&D>=YN4uGCm_)?QeAy&U zaxyhN!_8J3uD2z<>)}R<^~s5 zvE7^(T$Utgd_X$v!i0ZkYL!x#rO3O@OY znv%`7L_6NVtFbny(Ux3pO6qLMT2tpiTXLl-X|N>^ni6>y!98OhjHho^>UQ(6 z)RuhBJY@91k*)RfQDM8uUS?r_Z61u*YBrnVj0tHEyhb_-&YMMS=$&*-_9D}NGuhh) zX`@Rdkm3p-m5K|zV+M`7XYuUqag?2&=BIURVI+L1oCOJ2c{fSQFcdF`rzQ84DaCRu;zz2x56Rl-P%2!X|)*jq3N|K z{FSECbG!M?7!+_W zLBf5t-@ywuG(D4&fWqiss8uUG%(AIs`<*FC55f`U$=M1})&gnfIj;h?OwV_kCi+_6 zaf!Emr^3O#d(G^dK~1d&?y3x?943;@j=8JW#YW`R2;%f%h$$ALBxi>E*-Yw;VThRf z*>yD|a%u$efnkU#Ksc`gqdYLJ;|HcmoZQuxXb?BjWf|hIqx}x+rs$0g13OyUl$+0TcAYdz~&N_hNJnw#%R{o$$OfXxwk?a-0c^w*W+l<5rl=Nig)z6fT z-XYsveO6hdoHkl5jEcyMMmRjnq}oPg#v(IfWVVw@(5IrI5i#2=RpOBuaT+z4f4fZT zCBvI3relpby9iL;qn_`yn6APYH+V>AHbuYXo*(@db^e7XAzZd?J7MM$2rTc31Jn|3 zeF+`blr?3nqRtrkaW7a;&qnn|%SlNgG{tE!{;lA$YT{)4WhTIz_S8Chyp>JBB6dQ^ zt#aHC{+x`(m^O=m*-VZtQ;IV37qfR*G<}&-c}=z%clnnS;7=L(l3(&oh2?+2BseW& z1l?`7zY#mMO`E}$A`P8;>p^kD9#x`T(}O)st9t=|P??YoJC;%ilQpQ@_UwKV!jE)<6RTAXSWurr~YUl}!s#(Fx4n|x@!N0N9uEb)J z|1j?3Ah$K<(NUEQG@fJHA`WfkX*Oq~htmE$7^%qYs2@)a@sIx+Jokw1V31yNeI7#ds>uY(?k$c?^MjHU}byA zKDpyTb8g?g1~b@Y1VdbaxLeplAv17zTxY9wt)gUsD z5mj7Bl^K`CFh7|ZS~-`_^JO&Q?K#BFys}4$8E)nU65*Ee(@&5N_i#T`(x}r+&VXW0 zuQdtG>D4Atjy?Kylfs_9%_Oj=SDFO&^xv5T_H>U)U{5bH3GC@lnuP4>zcnfB=`NGN zp1#l|u&2*83GC@JNfh>Q?lFOK zW>~GjiTkYWs2d{(c3d?LO2>3B%QS|!NzgPVxQ413zr$?;r2xscr?ZeD!a??W8sj-Fbjw{ z<6kK%FcRe$0jsY82Ay3&!}oZ)ohRs#K2{FN4lyBE-ezm{{86 z?kkF(m{lj${$qiHMS8u;038RjYxFtFw%UK%2gU;8jJaf)X?9nk$eT{ zSg$covNpgqR)DoLpzYH$);b9HMVF_#tX-l-nI;9(1Ph4phM6%0w2bIkmY=R3oed3qWPOD*Nob-t*oGBBw>0wfZb>H6k5k&2No6Nwq*SIQOeQ_NNL|umcEplmy;652PaT%nVk^o4q0kPPcAd|JV~89 zrTI0=k6&3yvOY=1NQx4Y(V@-iJCt{ZA5C{D#o|q$x3=9Vjk7in)BI(IVhqjm5Z@T$ zYp8;Jk#08zLV&`k$S%;j%50yURVi(ZJS(COwHtV3lqI{)ordWYzQI$p$?kI8-buel zRoIQ6Pc-1SPqu>a68=HsXK#``rB9(TBcw#;WkZld04c~yTJHFzY1uH)>t?#OVP9j| zK7EbZ#SP>fcGu9hxI94?p_CicZzj8S^CUnJn5q^OXjCew^zlJQJ{Q4N&K?2D7HFpg@TJNS(elWBrwqL}w>c^$p?Wq9Y= z2z!#`BAcuxnYPIUN#Q{2RU{?e5*Cu07$jpP=h>vJ_JQS}n=E!oLiJxhMcgxVm;pyQ ze7?@g#GMQ(!(8L`ehUCehkMIQr1Jm3pOAUw-PJ)LFB$J~9b9CZUA@C`7Oi*MiDR_2 z&YdLgNkg%m)~hV1G{v+Md+4YozZTj?wIFn@&Y5L#h?&}iAQ!9V7s`}- z&r|_$#g_W^#g{Xs9gzH-POrE9SbrS1MIW;(sY|4lb(R zOH4|I7m|W%DPz1`+-af`dAfR=OiC~(nG^?py~in4K_aQd*#diqNeL`wQh;R+BQ<|T zem8I7?wX;ZpPH14enu*P4}TE#*>r40J#mO69}8+JsE^E@O|G;dxwRk}PK%$BLxA{m zRnCK^rnjn=3~vR0f%pvEUJw@dZl&g(0{2!m(@dyay%jvHC7Xkb0mf}9DMn1fA^E97 zSfrk77>#6MSgpKhBE`v003I_kh2)__8EDO!{5=Fl6=t-XIgQ0`SRu=02fkWQThs(C zhbB`|>D#rajh1{)nXPC@TaYX+N2|>AT8pk1J(`G6Nt5YV;H{$z6Zl>oSOa8KSGN6j z+oB{_ibIlH=!E3GVg~ZJ#Yk<2&<;q5wbk0UqzeM~2OJukCdj=>V`cf89Y&JG>b`Iu zl+4anSj+Yt<0hPIBWJ3x!hE6l59(VJS1PSAYh?|Z`K=9*nW1+6YSEJV%AajkyyQpZ-XPr?ctt$C8u!$o^mE5J0�t& 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

        r98QQPUeF$pj)lK>l>QCVa(!^K9% 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�g7C>=jx)|CtMN@vxV9PW(I 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�{y7mvaB*K2dV8o|AIm@%= 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 z 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%0A6t8S=(h4b>!77yoW=&A4+)FWxX)1 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 z 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 z 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

        kBk=P>}*3|@yg?+|eVs|!V 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

        UK%$>JB}bG_Opia{p& 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

        *M7xG>#7OPIO&zYo?|FvhNq<_{dirC-_2 zJCk2gt#k)2;4Xi#3*5&GimBe4uHe2Cs{|2BGfI6#b{y8vu-61^lJ*qh< z18ZIe%(gK775HHpPUKBd-Rzha6|Y!_aaYof&=z|wEMr9HJ~5&v%N#}wU%C0&FM6Rp zwIUkGbF3YVx)Q~kc?(cVbArnZ|DrstDUE!RL60d96R#YmNrqqF<^963y)IR@`@df( zc=CXQ?$b`I?3G*dB&}*a3EYK!Ucx8j)vmSNRMqnEIZLWo%N$#5PJgpOws@HTj@>lR z9H)uf(M8>)8GoXzoHSnIIX5>-AxdbP?r)a6sR z@7=R!&-Pc3UHiQzevL*iS)fCiZvVLWk0RRaDe6-7-C}%0ZD_*Q#n73<8K zciTMeq9YNP9^16{5B;FZw6Wh_?$&Eo?;Vl6yq^2?g{E|n?S_Odxn}W!Do&${pvlY? z8mWvhDr-NLtO89W+r{Q*r;=qe^LGW}Vsg?m2O6&M3AJ1|t{o^FN3*i?-|oNm&pIOv zjUmB}~!J6o>qM(4A9zg+#rZ5JRv@*>HZvk4p@Nhas;9q@P)e{Z}tH5B8#zn+Gh zRnu1tr*HzSSj#?(H!uEygl?twc3kO7_GaBq#<~^2Clt!^&Zpj!@r2SO<2Li;Qst0* zT*Z&)&}m4=_@o60R;J~tS=K~_@7ofYE9Kt{sokmGD=8wBjH^~=%G+a*qPaH2EhI;h z<=9)A2i4xY`DYn@mwoSt!*pri^>WOAsJx*Y;-m*k`HZOkz?*Xo(kOolg1&e31W5tD zsDC3<;qjw@==Z80ujHG-Gd-#mGoM$9;&g;lL$O%@Sy9t7C4g{JRV!@qhW;R$bBRjlM*b6;j=IQ}7)KM&P>mU``0^BSnhb0;_>74MtFBiSMwJ;+;( za30q+zg0$7Ugabf2h%`|OQ;8uDSF z{P_2mf+Kgt3e<^bmBMO7ynV3^X;PRX(q7pQPeI8sE^9$M$JdYZI z)@%H|J>mFGMR|470n)F@tJTFj{_C8UFwdbz(Lhg50^7=(NtV06n`&|V(JwX-5hTH9DJ$RnRmBvIBu~E zP2Hu!r0Cc;^LE$ey{;!ujwHwUQo$VU&6PMVT>XhRw>J)iKNSYGcZ-Y|q9w?;fbq|d zuI`+Es1A^!Du={xE@F++!3L|t+$#X9?wrvpb)Md#Mk-U=snfZzf4F-)B{f@BRUP3p zb-Uq}rZr9M1H4-9ao{(-LEW(T#JSkBlD9iv>*5%oM|I$~QaAIlBPTS(`Fc;p6-zfXb6

      1. ((wkmR=*u3wAHwNqy*( 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%0A8bFeSuLRaGqnz;gJ(9E`6=+n8- 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

        Zu{4C5gsAR;4;I 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

        p@*^L4{y!S#GoLlIg|@tausa0n2w7j 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

        wIM7H?J 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 z zH~4Y=QvIKlE(-#w8Fp7y`LfbwiJ#}8ZImv{=IAy7aNa2#rxwAjS7c*8eL9c$JaHfQ zyPV7e!8ftTxJcU~xN_sT()nJCLdWTbgJ}ow77Ewe#N*0A?OWKfZ@PVJ6XT0gGPKvY zs^iNhe?F%~blY^l?JPCwEH{(T+_*RA~E~n?S60V$3@UFj?+NvW^O^$=J8Ha|E<@!L3UxFht6G3Yj!5DW5 zQcFh2N?}=}Q;^Uh_#UKho@IJ!l~6>1me@-J!L)>?9j*L*11L@UnB=iUL{@XAH$ zkXHuQU|9vwTE>_OnCZ}#$0R#JI@KQ>N#5kF1W4jF$*KzO&ApX2$Rvt`;pyv0b6acj zW8&7lAiVf%@Mew1VlB@j=kg`G9Jr@F@P~71zdg?xfz2tiMrL){KiVznLAKK_ zk=a8;X3Nr&{1JJKn;!pmkL#~7L%ETF0dO65*v`+2!N1_0BEO!BS5rCc>Q!X5xm6()`N2%%fgYB15e}UK3p@wAPRM9YgHf%4d zAK(rh%nXaIYvQzcj?$L3UQrS7(bV|CsSrPqq~6%PpigFY4TFkeUv|rB+;r~db;m-u zod$NB()b5=z{9aBVDJ^2j_~4TF?aBjFFraq_8P+Ov;8R+$2oP2LFTNx5t6*%CnExM zDLvBvB`*dMp}e)@1KM)DG*(RN2iwt1b{@jr4claiGz7>0h)&5#- z)Jh2CD7_Hk?TQQ(?$O*MUzoiU>IOS|%?A}FQuqB-EZQTe(aCtST zWI1-g6V{i5BFu)J zl4;}<7C&U`*~BiGvGqK;GN4J&)lK!nO^|caZYc{=T7Lr(9Ax$+X~)M_o^;>uP^fke zA}r)^VkE~yyE|y`tE=_7Yq)qB1r4MiZM)4Qs(E!Ar!3)*8pS1C0jfuz^G0VioOA%5 zZqQ;1d+qNG5sYUU&e6!?E-5f%f!PctLtj*l{ki`9!g=l$=3xz^gn=+Bn zX{PaHkB+D9dV1hWPNSA6_}iBAvP_jlM0aT)Vyoa{f$pDxrXrjDh~;kHi`^dl;!uA* zTGiC@&5@UA(N3mG`O_&2_oKXux4ign3?NaovIuh*G|!%8715sc9|S0Xs1RONXH{Z+ zcGdA0=Xtl-{Yb%;`O&+ECk|a?W>@YIqmWql%vG16y4D7Va*XIrbO>AXu;>0i_1T+0 z7hBNHOeHg&!NY4u)p$+MscX4h*ydCfTv=q!5PR04(9*ZGFCy5*_AuLDQ~F4i-Axh& zKWd-Mr_#}op62Xdm}+y3h7=OZb;SO9%=iO`v#yu711ke>QXw;->8Nc)jbIx{WRYhz+cEanc%fwGQ!ub^?BLiA9V78Cvg=-C)z+=53eIMCUg2qp0V{$L_)m?<<9fN8MD5Z%rr%YGo=0HCm^h#| z=rcU%A?LkFFs5gu;;f#rwf+d5&fENXd!>}l&i2YO_bAarbE;pAjrt?#j*|+VvZ0NA zDfyP{pwTndXVUxo9uNa)-gt>M=Q4N>_ZOP}=i*~A-=5?kf7&nO+e>gp8Jmm$C(rW= z`6+tPoy^1QPm=r`Fo2%}@8zd>SAGt=jW$q@pFERpSorIT+pAN3;Xaht_MHA z8OhIhd3jzWf0y6p@^i6%F8K{Vm*(*EyS@3jYyv+M^7y&@r~F(oj-M;@`HAVL{tA93 z3VM}to>a%r{B_Z{(TFGtRS+r{>zD zV!J#!D879VCzIFKwMG-yaSo=vxZ|m_aRzRkn@gOITyN&6o@2`fuq4je&+)AX)qfF9 zObxGGz^9{{MVpx;9w^k~ud1AR-3v;4#%E~V&J8#g1M=lytLc5$=)Y8kF zIix37^6=0VJv{og49(%eJv}{n3}_ij=|c)zhAQU1x>%=$D|s3hK0v-s0OS9^ll`vH zYRd8LJ!|}>*H<=7&hD%~wV@(w^3mv9drLmo)~(52JUsjDNW;~@$|DWOWli1#GtenH zZ0&4c<-HBh3@P%$rjPQt@vJ{kOfL zuSEQRatQX1BEcb%;OcDe)nSQ4_i6iA5AXH1&%cSZe%?Fcf6?~k`s${4CNnR@UiwDG z@+xoWhmrWg9+8SSs=Q$zRrw#bC3C8Sef#o8cy9c|-VyH=41kfgj&F!m?SJ6necJX# zPHpxoZ|1HowZ$H>6|>@9`gPuQdytaV{7;qJ7dZfk7#u@jzW3Tn60Yx7S|nXsK2g0_ zR({;pk%|%jc7Nw?&avdNU6ezZG=l%F*VIboF>J(gs{OLz=oC2-zakoczPN$#tk^Em z;5PeO`sAjsq^^KV5%Q>zkg8h5do8l^(@0nSlLsSc zQZY~H7W4JU%6~^_tgyPtJ&D;(o~G?{6UsL`+YZj<>@$hw)C6S=bwzgOeznGY8ED=E zw|M6+mb<)Zve$8R9a~zEQkQ6R%sCRv7f9>Cu>r9x=vcXzVbe!6nf^$0S$`TxsbOWj zmedC7?SiU`A%}WR?*hP@J64{VmsI&f4z2P}EwL9#ck~ti3s%15_>uYk$TBanoY2Lxe?&3m zODd>Kv&U=lKz`bX*a5`Nna?D^y$$D$^+;^|)!Ce>CgRquh$JHP5KJW6JDJEm{EPE+ z0z;Xp=723N7ew9iWY>HwV}8U!iyb3aT zoP(!IFcb}TGfLO`^45mq58#rb^3SpSMza^pWsf29ag8~9G)jt$g^M^Fr-I3`jxf|Y zwzu%Kem&aYQ;r(E!Cdtk>V`E0$8Nzrw`XlIEYBZ?siQhCsO%T0UK4MH)z+9bNH*3oVh8bI{ph3qCiBl;sUN`2q;K}1eN^1&$)Ld3HJSc z{(Q*Xv+w6Q&v~{}l$?P-bxHj{@t5cR^v{Xr=` zZ(;4iIUL!_>_oGt;DjD(W$82 zki9ouPr*n6+B_oPrK#fsyRj0lY%-JpdsqenyT#ky;g{Ae~ zhtCtJm^FY#hkXmD)OUaF1e8jEQQ!TIVko|Xc6=p)NVLP04Rzi2nxA?pfB`YDwBdB zygYJ3=eaIDHUz32@&~%YCkh(w|1k17G}AH0Vv$17_v?e}2ZSfco)z8!rAaxlLZMuW z6sZs?BL$tsX?W4EJpb;<7twDiZ83SJmEdF1PckWwn;z|&O0ZMj3_7Q!Qu+Qr$~#PX zJ(PC}8J+nE#4Ef3|0_mydq{VHaoo$IlyL-zUk?}aDLshRzx4nbv5kz8h(>4yO9UpG zL_9>>-Jt42y9p6(Fd27b0pwM`67=JXTTtDc$!yKpDt7h)#hU|jn#IL+^Lm1X#3a#r zSD=T5s3FL5Pr(a-5&;pdwbS9B==*=oF|*n#NGc+E<7Zzb)Q7BD(TM{gc0#&3tS;^o zHb95%R>S&)W%35ACcXrCt?wC!j3n!*&mm$R7Ak-hdqYN5GY)&tCz%CnH$^Z3l0+sl z`Ey1rrEiZ|v_Nbt_(oZ>2W%oWG^tV1Lz0GtNjX(}3O03b_XO66v(3YkOCHUM)gXB) zMksvLAt1*G;|lZa3xi<4XqD^;j}$4l3Gr*Py`6<_{Y1_1O58AvS#sidL&b?uefJS2 ze12|a<0&%BA^$s(w*##MLEyZX*$i`=8Y zp@(B7gC?gafO03aLq4^3CugQT(Z>O6*9&UNX?;A!O4>g9-|EL7lWue!p$m8E^zq4c z=oG1FDnA4apYx)sdj0bQJuutCr$|Dru=%C>G3lhaZn@H>X^{{3oEeC0=X2Kh2&Qhi zVFIUDe0CiVn4Ljgat=SjtVv9Om2+a#tR$t#Zm=zq|PhUFG)k@Es_R_^H#8@&c(98 z`pScq9<1`W$UBgldn#*GpWQ~Ro!lvSXXh4D(0Twkblkuy776k$pS$Nagdq`UfY@N# zXN1AeStyX$&J9_6JCE1!pLa6zLT)g;@(wkUmwi|opM~t7WQ%C;1)3mAj&D1Mu)cKq z=pCG0`DBAm+M#ls9G{Q_@-45%0+Jo;0q>~2v?Mu$5lrE;qNg!KKbc2wLRMy>oFb{c zF8AA%zCH_8nBX$l&@#jZK(`+p9;xUqxEH{H33je86kUfco5W1@ zEXhaSIDFoF_U}aPif(^jXM@AI9RGjIO_HxUJVNJl;Ir^2|IgfG zbZ*Ht?``_!OCdQaWUlZ0*6+DLo37bE^p!%5Mo+p!?PELf#W?t|leC=&-Rn>gf&^#83ND2Iik68yuQya0DaBxNq zh|G#l@~WE`xeEiPaIM5Zwa4BNC1p~QoFXC;$o(iD*8|U9FKNvj#3rS!GGyvB9;MS{ zVQGEuyru6$9Diuayw#FI(2ZCgCCZX7VOXp$1NyN$sd3(c13kqo(BA+Gp{~zNr4f!s ziEN5z_Rv`NlVnsQP*BmxY2<3tz9l<8DNjAJka(*S=_*iqdvYx++lW0%X}VV(s&w~( z9{)b~ac7A9)}3{9qO`efY%V2wfKmPWVA|C_q3Vd*Atk7vl{q8wBWWL1)L${#L%z0h z!9fwZoLOet^hzet8b4RuWsaK$f#_)Wk~*mfujzOjU9V%jZHa(kiJjrZ-tT&6I^Ks} z?`+5Wxa*zkc%OE?wT@T7trS(~c$-~sBi`sTDVQU0NjqOe=9k>V_q&s*_mf^{K(B`Y zYg%bYrt>72H{VSUUF|{{NK#Mln>q+8++81z<`3lLL zM?q92c)EI=0(8=QNnq_uE|p?XFkoBPs;`-Kt%IDLud}l)lE2mfrj8;!ec`8R&*4r?wNKkFzAkqBa7fRYQktO{CJf<}jqZ zXY$#B9=$0ryZ@{de=!?q^yWbT<|TR_3Gz9+v;Hs{yvC9Q9|**SyV!C5EymKj@sl%D z{DwNnQXMV4#A*m5JE7+ z6ibJ0{@tIX=c_|~b03la)RDS=@^=&8CqFZw-jY;}ZutlLSBQg|>l$Kpg^r`GRqTSvQAX*Y6}#Hu~I+1P6rADm=$KCMoUV>%l^ zF6gxp6Ul5HjjX!5=7@{|mv-l|Y}mU1v4RsnW(xE|tz<#vt54sQ>L&S`WY(3bE1ZP* z@@_TCb%Uvwx=t~8qn9_$OUY)`x$zM$%d8c1hvK@73;gFdI}az|b+u+mwp+tg^V*Jziq z$S~Wu%`i@F6|!CBuBwIRQu6SQVf*7XPwM`O8YgxSR1*vUNK&nFaTlp#I8Jf z*I}^n!j&00?THUXlpzO8-Rfb0j-00*>ONc!Ltp!KmC5}KqN^WRa^-3ZseQl249%@$F-+dOU;5DpN=Ryt9rZG+8R*0lVB260 zx`y)B5$811|Ds57SZ$Gk_Ud;Djjn!!UtWLKM_yEG7(g|6lxb}eBYPr={t_wBPxt@} zGQX45vJaopzRj+0D)7>tSXSSC38D{1Y!1Qo-NUpSZ3)~S?dGL9++OXj)b2C1+mBm~ z0nP}(k?qznoDloTxh%7Wy#Z^F(NID_;NP+mUy`4s5C8J|)tmX$t(Kd_B)Ux#RM)?} z*aputmW`HxsZg%=3mo*)-lPNxb-ZMjP)*Pp3l?4k0)=2wu<+8lO!<^~Jxzjxi2L$i zW(C%W=ViG?=~tTtpNh7eNTJcT6V+4iAAr;kpKHH*1ScYC`-m6s*tZ!FUAejpCp$Gy zho2{&I*;cGNp!l7DSPmj;>p8+R6e;8| zaP3-+Kl6mH3>Lb6$a0G)bSa78l$QnKi#<;t5fZGi_&s_Ns6Uc1S>{Me!6ULNMoi=n z@i?=W!;sj~j|l>2jS22UR4(Ty((4T;OXTl16KSm2EG?Y@2zA>0XK(;_G=7H@BW|Oe zskS(NMmsCu9ZDPRR3jFmM|<Ti3(<(fSPuwJ9&naC8&|D zUwx21Y&wKHp=y_LfXa1;``Jq#gWgxnj87iK(1bQ84rgdHeJOZEl)Ila*;lW!0eUHw zF^Fq~*rC@IkMyy;MzJJhF|xfc((*)v{eUDMESumQE6ygJhZL8-T!dGnWxf69t%o{7 zg}py35MOwFH9E)kjkQSkXm0&-`$_3<{H9-c5}#xzE9fWXB2u{N0lp(HI`rs2wMj~8 zOxgQS1=b9vFlV&Sk;(>x1HL2&ZQ!UXpxioUUNJJ+9L=mF(+xybB;%FGb8p_$DoO&&v7#kDc}TQ*kTdn_CnR^E>eRF=ly;3tyDq_nkXLQcUR>uk z_}SOMEP5h22X%-ylEaCBAUMJZy1!iqd%zBFL#jCkzPZe9ZlblG6yu@?gq%mCGjmiY_JNDF>+~RMxPVBrqy?>n4 z)=AEWCwhe>)VrT_$1k^|F-p*3jp8^FB88A~YF<%Oeg%?&bv0`{Z(RWEX$zKh_IhVXXV{myVJLfXPwt_bZ@OarNQu z@)4+r9JCG{MIY{8t3P1gfMhMibs~`V4){)1-R)nqzJYY))Ce+Z9k~W|c!$P}!*4cK zg{DrEt4=oUmUeMt0O0rHB}sKHYoRGLY1|b=irCxx#8cJPRF%euk1GB_xA+^Y?Ah2X zE~~O<`NS~F)XVjlP7B88dIQD_SIf_MUf11~8dm&+a#|$R9oSz|nIko*X5rLwtGm>L zG!~;$UO|F{_%w2(Gw9K_thz;Xy5WE1#1*a2WNOYucTH4wk`G~=<>)|%L7HCg{l>q3 zPdjT2w1zRq!nXQAFluYRYswd_LA~aLSQ^T!9zpi89}$(qO6|voxRwM|%v66NWwd9A zrB68{cD+muXUSazTTy+G)_v z8BVIv4v2%+>>O-H>{JSl_8ezblr8$HoQD@p7Dy)&bfp_cAH#}>oQ{0HG*Fme$8mn> zJ;EC@PBUO6)~}Op_n!C22&VTZMYmOG4%@;}zuvX1Yf3suK-D)V7^F@z68BvXwZppvW4N1wv`Prt&Hk+{Ig8+Es-?N*J6W||g zNxn${MiTU>Hwb%OD)<`AnUl7m!kwV=WriUmJxmc;*mG|t+Sr67|06h*Tu_FJ9V1C2 z|HS>c<76gz7FELH7?k4cSQ&xVB7q*hqR$4NDJ{n*g2y8H^qhoN#YYeCxK4tFd{D<% z_u{68K!5Q_G*mHg z{aE1&zM6ILFb;?S#c%b&%Mjpqll_w~Y_&$$`wz!k=X#$KFM@7T;FFGfuDG9Y+_S~~ zcgHcR#P z$?F;LRU($3JQK{R&-f!Tq~foxrf%$onrRWk#~JLGPAluv&MG^VSW1UGrt(tGHWiTx*7``p)tt1uNbP;S_htoO?Vl8qF7Xj5(dmv{ zVWr7ONFMDv(TEjLwWg+s&J1%Hp3fYH=b>saV9`K~J$b{Y@tcJpTL7LMX^e(>^hAvN zi3vgx6&fyfCWndKy?9KUw^}pM)XcV)%k3@DHjpYvD7;e0pV$kD>A92hwLv6e9Qa^H z2Qhhj8xAh?2dsl=%M^YssCnYkfwVVN(`pvCDAk$Yv7z?npU8bL~;7dT-C%mV5(*O*pdfyX+k*AT!O~3QI=`T&EALmhDiOt2; zz3DIcZhCJzeVIqCm-KnP>64t{N42Nz-Bf#m9(AvzUq>RhJ%9Rc`sIDo-yrF0b)tfM ziEx*<43|3d`?9=&g+{|xS}-ll;J{&m$@=WyUMGqLyJou6%HH{I-C|w!9g%zDRsFFzEe)r!}j*pQU-M z1%qi&Yl_KQZS53d;PbE3;0hTvX8{%I1%z^dEFd|dk{{9=kw5x&pb-;$8nX5_Ne{`u z8xDzGB<40ZIU82m@Wf8!Y3NgLf!e2zV%Y2xmgPbrcZ&jc9UErj1^t_p$2k0qhZy}EogM*>zaAQfaSl*7O}%!${txtg~LPbal$!-pa6 zXTgP^l3yUEPkr(c*Q&Gz1Zc!P38wl78P;KkKb1HP^3W0eaFKeY2_y*l z?vBLaA>v=%>mMZkCsTg${27m?c&KUMBEpFB>351cR3WX_%s_Q`=2YI-ktc0co(jz%zmQZzs(7-=;pe&WXTsFjn|y<9mx7N1 zOjiP5lQ%F++z<5_=<9~szseoRrk*1*NJ%xOO&XbHGIGhsbRpOPCQh{Q&UWI4OWc#h zIV|u?DYZX6r_X)}*+qeuWOX>K9cOau?(j^Dj1%HZX)!ECWK|3R6CMHwD!e<76mzkbO(ka(D7bQbs*TFm6w)#h|4=oHJX=(5$ty_nj2SbgRWqit z5EgMEVqaPF^;*#FVHwu;J6KV?=@dS-DXrx@S-zE}J)EP{#6MH~c&>*c7Ib<`XD-m4 z>2f=>1Y3#vu;K0!V*^&(yt-Df|4mqMyc5r)l&O2xiqo*jFE+ zLq%m_l;2o(yoA;*7?D9vk(a+BUNs_<=6WUTSB(Csi;ZO>>#DP6N$3X>O4heip#w+x zXfX)VdP1a0Gr^iadV}W4N_8adnhrZ+gfnUR7Kuu={5r8fd6%0}`obcpvbL&_gognfR=hi%m;9hvtkN^3! zjI;H+8NW;4<3lwGHbo`EU-pQW|BD`^Ccw6Hq#Uq>LiIPJ?r_OZq+|A^JkGLeWR(_Q zFAbXn=UBXK0u?5Nv3ZNDj&ui6f@IULb@l7j{oOR&cG?iMZ$w&HK>ECY3&eFo170>c zT3I*dsnr5_-Cz#Rr}}vH$)z6nPDmpmL9*oO_BtiPclIG|q2AR3Dc1VhD^i7~s7LB< z*ksX)JcLP&rpW=b0(|`kx@-e0=OY{!;u4q3nZ?=ju=K_@L{w|gzk1s!I^L+9|69j< z!e`20OH$SHBP~-6dl{oR@Z08RzcQf}Pa7GE&N%QI~%&SFQeJYe4^GK;0nTsbZ&#hm;sUuT|%FQ~1I z{IkT}3I=(f2tH!VT4O%DG+4Zb)rx=+`YkEFowfRk>nicAJqn(iqKqyAi*JT%CIb^U zAqtuymM&z7MIqhJdScK_PpXMf+WaA4lvw<{k8n^UcFb&C3@3IGk4=70Abxahp}!qT z3~Uu4iEalyK4_20N<>@9cghy`QY_@t_`Io}CP6flfAWHHaULUD{Z@!QDck*0k~*{_ z0ImwG)lf8CAxJ9cNa@QzqFT-|%;%)(MFIHMp=fJ1*m1tGYZ-ihr*bkJ{1V)WWWusUb&+y8j*7u}yM!HyXcUU<78AAQkiSGqO%` zi!jRo&m%nZciSHeMz4h@@%R=ws4uc zf{L}6PelkL5NlP>iy6& zQCBkS8nieG-20A8uLTVdBz9(@ zbDOi7-~n#fiUT{HSp5L;KaP zqr!EsU^WX!GYt=&`mlK;_j_xLdP=YYcE>>VsAO-Ae(KiWq3)J|FRfOo|IvrPgkhz8ztKCk?^1oqU)oTm0Gmn|*5AS{0M zH(fwCB*#BFF4aIDS%afBRkB-MB414Fs0B}opo7sMXuD}&%ZYGo2d5I4Q_EF43;ZN? zb-KK2Tzw{$_s%5XJCoY2@4rWdGpOAv_o(z}?0=hu$>P*Lj8ApcfiVi)(=%rNXJWn! zgMhW_FH;0%yg55QQFB+AFXq{pUlJ??@*|6$q?qRuKSOuHcri2Jl-&8h`aP1s z1`r5=wKDBhka!&7^bX*Wa|xG6^HT8IUH|C&2<9xP*Rg*P7e*5Fj%be@(>aDqRG#U7 zCp=bo&&3-o9yK zuS0MNEYIs4lBS2``L~2~Y_5cibL5K<$Pr4Pss3AAWTj+a+ihGz&TAJw)8t1fnq9$Z zSKlonc??Hna3^*Tn)Cb{!z1jx09Q*&{2U-JPnHN>&a4OB&p;$zc%>_)&DJpbB&Q@o zfz24GpLWq0_y8ULZpNRI3*7x3;#uHmOP)PpAF*v>n|p7_|HJIa zXF_+srzOV2r0m|2EVedbk1+90Yjs_nJCC-%QKT6?p=dX{j$$bc>YK4tc)9{ReJ{(7 z?*MF^=(u2ssbg?LL$T<2W}O+&ZxHFt(&mu=jd}1G&`W(Cf5YC$?SbfCZwN8AJ%N{H zLrsha{{i;2H)MToCUy=8p*o}K2ZGJ-QU4O0jH=qyla5RMMK&zs_@Mj!9bb8Xc{61R z8{t0^`R6A<6Ple>*2h$BX)k}BR3h1Vm0N1H`>k|K9qoQE;T!aS5!oF5f}2v8iRCgH zX%=@?$FGm=!4BbF_20_$i+-4++HbtLzW>tQdcG`O%yhNbUMBKX|9W|AK9JYR4T&Z8 zrmR^6BxTKV3Bin|w%wW(qC>Rj`1$9=uRy4zYuirl$_XPTOv6CVYgPWQ!ap#hdwKg< zZ*oLk&I#v5d(Jf)L|sqBAIdx5mXEJ^o{paq1md@YnN!dt%wtQ$kzK_{R zB6#fVNGzacoBlv{_(bEOX7G!6(9^?qN}s3bYuIBaSNQ{z!>Tt$?|w_klhGsCK>E;= zS6#y6MV`#OKL~({-&FpsnfN5j%qRxkvVY=J=RTninMP4lM3T+Ss2*AcD@f$-^Pvf9 zb`M7&XxQ@7y`!gIb(MGi95yFrEX?@ST;M}Ivz#55rT%;o`dFe8f#0V)kPHJRM%FSNBsz|R0`*gY7eVfM^%q}{NB#b`{EZ4 z|Da|H7qVlU8N|TKnK~~@syS**!E|B!%1BgN?F+eVW(2Jb7=%124WFcaU{wB%cbpdh z>#7~q!&XO%JmBBF@FNbk+2@;LfXOnEgWBMvTp(Dfmi`ZVTzpD%V;u~`w2!kxc_Sxg zhk0Re1Di4gEN1c2^A>gOKNuf5F|BcVkS4sTz0x~>&V8MOZl=)9C$EG8#6r2IaK^zF zp0N_;?C6KtMuTu=?O$d;{XX37rO)H3vd=VMBCY&e6lju-Y#O5#T6>Dg6s~-qR-68}@A$N|+4@zU8?8e-x4H1vJwI69VE0sXD$==F z9o}zdxLEy6HRma>$N$spMMw;GtJ6YLJ#FLl!fG2Ypb?+5yj(zh6n!R5FY&?uhMEXm zc!N_aw!zvMo?6#Eil-D>OLxS>mr9qJe`Aen8BzE>7rrM*Pm=3}TF0HOysXt~X&e;J zbaEt*Z_v?sOyF;Xb{8(W~Ps2RtxiEFx?_P%foO37y=7gC@DpX$2BehM@bt~1A! zw#GJu&q2oEGh@vL=nFy=COEuZyiaRy_yjkt1pP?|apsB2tQJCjaD~?Q{e9i2k)tDb zW1eNfNUyFS9xU^kULg!Qpd_{S#Tr>JeCx}P5^LUjWp-b8J8}h2x67pd9Q-BLjQnGG zeCgIvgE?n;O(O&wyY8D~=}S&aqys2hX{`A;atm}vXAEVemx^$x)lFZ8C+bTT6In&8 zdf67G8%9w~B4)sRYxLX9#$dkBXb^#$etA;(j$CAYAWrundQpu{ zT`P$S?QkEjGOFv|f%N+eGPu{>Ha#Dyy^MbeK6W!RlO4uu=YdYhP3ycqSad@+XJSuQhCYbFP8ltso68_YcMpJ6IVxyBU#Pnm4{pnb->WC(`9hhBp#8@}nSmg* za2fa@(Rwto41(9O4$Jf4CiW;PstkE-@Oje)s$(L>YW8k66T5u@7~-LX@+I2yP&(1S zt^5+a*7>vqya zuCFX!M+PS@5d`TYrWhHhq|`xa#)@R|7s$eqalf%*6aSrzt(C=?%-%;cq%xgxQ}JsM zvUDyndbt8|;(hF196>~lj1@do$Dh?slh+iLNYu6~p0FNT(Qisgpu^XhBgYVF_tSp!ih^ko80eW35y5D`Zop zJOtDF|1RV;3X#=LDoX$VSBTra-j-~l5ZOJ1FnLE8BGMLRs2vB-=c_Z}mUZv+D~cEUY$g)$RoZ161d7|wzf12pQkjsjbr^So=JR8EeX&j^@ZhnN3;^clGN_DU~$4s?2=tZ&bH#sW={JAEBH}%@*4=Jeb1L5h=a+ue2SJMf6LfmH)> zz|P>Mfz0u|Ojzj=f~w$&@%(XIz#HXoWT)GyQO;JE;B6>*$`@ zavyuXP%gm&akt9|VOre>@`dz}9w^2Zd#|Q-NKAh3BtdJ2hcn!)IUFvi)>iY1L_Si> zw5VhClO%h?gW-sKj0UkU*!MM4PF<|BV6v{K;M5gjI>~5wP^x4t644c{&E%13xqZ3< zWJ4YW-+@6ixu@Wxe{M$tv8T2GI`R7V;X29N2Et`fe;|>V_CHTN!w1P5&v!XSg0}|z z>$Hj6McDdl7o)@84t2_9NDq;604YI%X7@uimh&c5sOAm1`^x=+8-!ST(ju>SJ_7pl zYlfNzjG_UUfpQx#lm;XV^dvBP1!of}6-*&RZ}tj&L}u%pAe+bsOMz#Qt?zxX4}Uzm z$LEM`2gKgXdPphZiz(q%((2w>5PNhmLa`u`6rKdG>xGi zX-TM0Rg!B=c&ToK#QnsH6H#xi|I=FT^#oo5o_RX6#T|;S1L-UHgO-78mYc|Pf6{k@ z*m$W}=uAJr(ORjia=MlyWuk2b005r+kgUKAYJiV&;J{yb=m@6lU)T(tk4g>6Bi!B@ z&v?N_q|{yLP?KnX@)LHAtqXtmYo{Cjz7jq%*-VGW&AG`qXqY`VI5 z%BF|gD~FngxTCbUWfl&TF-dfd0kz5&H{aYdoNu1%&v*SpUH@rLp2NqI*5}4K4V#=bs#ic4EtO zd(e76kobDoq0Y+q1k|(NO&l3uq4ql{(Ulb}euw=X6OLpyoM6+ zH{YS;DRVjudQ*sEY@u2D^St;ODhju5rhtbupEC$g^th}B&IPBY3 zo{po^ztL!zOIsO<;*E2*E@y}Xe)tMvAT=pJ&i$J;U3GMsfz?t}pOSTfV1T;NQ@>ki zOkR6&$_qez;zH((Q1Vm8F}3oYZ=chAwjBT|--Jn;@b^b&K~Xni-=~#;+t1Kh(s}?$ zF+8XlGhKZl_u9b9^Jt)bUmd@2oodZE=ZRw>N+08g{*@_bP2(5D2ko0M)Shuu;f%`o z4Y{G3SJj+L0C=J%vet-+bV49rJ)~*+Raafb+UOp3Xm|0(`0#sa2)M&*YE&vQqG-)J zER0MTcNxSKCgvgu*jh2b(~9z2qAQ!d-dd62ZLP>W(pr)A8Yf?C#lWVo+W_F3wfw5vE_V*)D{MZuRUqd4vFc=u2rXInq~i%gwXq{Jgaydo;t7BP3Onsu4+X z^{Q1oBI?^x5`^L$^ZwRMSS^}@1d&DVXSA!bZ@YG=2d)APMw|R||;ke5tp+ zE_|)u(@Y&y3?%;n>Gjhwgot5B&6p8x1wxA21~G=>p?k1un|vezHkR|zv;;>U0geM{ z#h7Z5j|i1L??8`ZUS(A#e$Ix|sb&WvjH^U^(6l~3@K@va3FEgdrOjnqBBS()CTGz6 zBVvE9IefN^KFRfUJcOyCaw+z@W=)AYy)8pZ;ePCJkk&Qhb7_lm-hdrB(jJJSjH5s+ z!%ZqQM~8n~zo(Hr(3iA0qnOPpXQOHCPEMG3L77x;eIRI^e(CR0EKcz*TjV&_S^YZ6 zEEURppfpU4wfbTY7I)QSg2hF)3kFvkSmh%n%N&Mj9<*m4BZTP!J%mMkddV?81%+hP znFQxUxPjDapD0X$?bTXsJp~8;ce^~F*{}AXOjyA(q#)d$KoYaD#-t1CTrKpZe)z3p z`7vbAK#}_2g+BJMD3Ni~;k;&V0VUrwL289mBoavFKW6h|4zeN_V*JI_62%I#4~bm7 z=iv?K!)J>hTZofeLN1>wBiPPpmrwx2GG;L-f$~7mE_uqLNJF1)T3C&?Oa&>+q^kJn zb`e*^2%!=D0zz1xUN+7$iOGObkdK1EFrBihv`on}lw(hv37_sQ59ui~4 zG$6vTy931=WNk$yHTuhgJOW6wSeUofjCM?ilu?DTxP=KBU8upVh;JB+TS+r|lnywB zQyD(V0 zWYi$r_FpzSr=PLn@qNPVzkF7LJ! zG$4;+#OeXEWc#;6>w?gJnUp_3m!IxGD(ZENhn{kOzoF1mevUf|w@^5B+{#CJ z>hzW49^s2Zjg{<<%D&u#zm^pfAH5A3%F?||sKnBqSIL-eiabSC(r5m8`XqTHGWe-U z{V8tp%mEyv^Qd1-s!C$?{zxSqK|p%`7c*7q3`dRaNXb5s)Xw^+_%HjfOm(uP_!z+k zfxlpHM#HOk?B7Wb#02FlY#5p3Eny{EE_*cUkDx>fKhbQ=sv z?QGP5q=n|IwW zZUFIGGtzhK+Ys2J1qGcc*IeqIEA)ZcRtjn1;QEz)eZSE#Kv=+t)Af_L@LDG-CU;pE?piNZdg7hkx(j`zUksfSS^}(=QIhXy)vI4DW!;N#-ys* zg*_-vt`yi7kff*k^JNsViXu{LYagD!HB-4YGg0 zL>_uoUW?4Al@Hxnxm08t--06eJ8w6HXirhMZChhDi3Bjt|! zFm55>EvIiO#%G6mEFz$jq#qD%G)!f;2qcz7G6L%fHI2&6$;)+wtR#eGfTDuBn&-2S zQ4Gs4mK`gLi-lI}33E(gRplSWF80WoEgR0XDrzlfUs&HJBT}06lv4_GJXaqw&ffNC zmBxR@dcB!t=g%tEZlT8ev(D7+vD$sIb`RI?mRW6M^X6RNI`;U{>h*oJ*bY0_^ts$711lL} z=vl20a5T(&Y1VLU|twX7mi2p?hlO{UNY9m5leAMaEu&>xI zE5VfDBKuYy%NIj55A!K+j1@l0*8vy=K7vOg|Ci4gzK`*3MskpJf5EAip{kxbabF|A zjNhXRV)Rp7T&YG4l2%vdx^}{B`wie#{o&@Hcsz?n!D8tifTUJDSS}#$G=>(=Qjv^l z8eV8n!n`;ro65H7#5VSN{b4cmxbl4JShSX6RulUT9OHnzqud zu&Ff-nzgQe_PG!bc7##1smU(g0W_3?ykHKpq2!+tliL^IahSk-IXD@!vvE@_#Z>Wp zM!B34=pbcX+IpSrHND07`Xs-^m8i=tS)5MhA?eJiH0o5M0kl##TAXu%(#Epsc<4jw z(SsDrfg2*q`0Vv*z+;x8v+C;7c5`r`g)n`XmWIZGoSw&UWK@kUVD#$94)4^&x@K^BbNhA@C(aAwX0cIG#O&GuD zq-G$B#6r(OR(EO?kc>)o66yPR!CL}UjLJ4H?Hl!Y2sKHVtnQ4IsJupbIFw>_J9*^7 zz1hT@2$hD8Gd4sEDidu2@f4W~SafX=MdZI2yJ)c2E< zm`T-mmNd=*(CT*WxylnC2g=s!^^YBHEG{Aync}&(BCZEh7IEh*5~UmTd2q`~BLCF2v!vy+p=wVb5J z3+8}GR$aF@{Il2wJQ!gYoX)gfGc69NPj7#p`y2hyAPIef#%X*`MIV+X%W^LgQ50Y8I%y>Ok}{HH zDp6;;4d-}*y`t_UgGiI`*z9(#Wl-(?sM^|IUA!{{4Pjvea1BHEd$rJ|Jbxw2)#Ir< zoE;Lqx8VMX@%(JkhY&WQIVC#N2pe-WlfN}K1gs6!{*8-Z{+Zw4u8NP%6n+4v;jYY# zemJb|@Sw=Qw4Cv4oi8HqtLt}Qh2|X#tO(SzF*$UXbkPIM&}0~kKgU(ipM-uW{Q}_w zRC-kFZ75s4a1|(HhiY=%EWi%+Psfd#bBB5qw`3qU_I+H>F7Y(tVI4`L(J?VW%{tOP zW4@C`*YPt_Ig$%QNu=KZ(c%)j2^RwKv#04tEc#DafBHH0*BpHg=;V%yUqEyYUV%Xp zJ)D7+0$O9|ls4CON>CS6d0h>nYZ~uu)%K*q|5M4su4dds5@#xFpuLUqJYJCuDN<`c zhFl=q12KqbTjqp#{>50zq3rc-nLm(Z6XI1vveh3+7P2CsHI>$=evkBMn`deGxpp9K1pB-l0#DGw`jBPjLiUj!Lhg}|Me3-C2MfHkb2^vz z<>&R2Hz}uWL(Q6Zs<9Y^s@I$y!mh9|)YOJC+A<Y+bYa?;kg{znkKCx zW8FJp#pLi!_Egj4St#8Cv1caO3<43>WGps+2??`E@R}zeS*bt&QpkO^V@!ttQ9b8l zsS*8j^lCkJ`G^YZsqe|zN@q39Do?={1e+XquE!g+_CE=b0joRp=mf)ArsiJE$i*j4 zR&O(e3||?KA1wc=motio4AX)z8o;Lcn@8d6T~w|I1xs>5(+|}!&i53W(#km-q_IIL zxs!FHc|lIT;2%55CI7^&9482<07Ba=Grig&Xt#a8MlM7lC1I(I(uB}fGCnt@>NB#WBxAV48L(bps+ zjzZKa_#2ujWt!1Ag=}IwDkL?;9jPgme4sZ$i5pQzNjxGlDZ=Q%F_TU?s27zYKeiLU zaE5Na)lsufN-O88hdAh@RY`R(u4qpt6F-Bbo`w1L8S(Mo7_UUX&NY^ZxQC$4rLHQ1 zWGJL0IUKlUH{<7(Hgz09+AgsgPiZ|pTS-%qAWZoyTs;;aqg_D_-&c-31xNNgKuk%wv^W$&bV!jE_mbvPgCe^ z11eB7tRD`)dsA0LBy{Se>ux|GP%fq6CwiwS?oF)durAXqK**i?9yx|MIwu; z?77*M_O*GHs26i9jO2@{#DzlwZR7G7H&0--{8rmP2-S4T$d_}V^YUjU>P_+73oHF^ z7)zrhsPwJJnD@F;2pu@w>k@g{}dAgN2vMowStKR(b+u!3%pL=U|+Pr%M-}p|kVEi6VQ|fS$;)(a*in zFT9k}aB$K4(XWRX%bu5(%5ftCJ^l}kyJ`gIiGH19EIS(*PnYtIrSjB-oKYhJTfVKd zZqAc&SSI)o^JgM>W3nFgs4$2~vkqA;WEqVT1&m4W%IH7!3wM(Tir-Za;o->8D%aTe z!niHsyHML`P>0tD#k+@LJdMvmyDnr8gx{acLqc)LF!XkT|q5TU>YO?ip(1NV5 zE5??RenulybI8n~Rh7lx$UxjjKG{O(E~ww6+(<0^;MV{)x~1ckPs2=7p?R2}aytlT z0SR>?$2(BGHEZ=yncjUeJFMMuW7&nAE4up($u&;9S29K(T30I#ntA?$!fVtLnHTDv zodV8lRhS?`Cd=47&UHq|pz)nlKO!diOJTIpfg(GQ3596s9_p#Ir{_b7V0lI^lG2J; ze%9Dbd2MeB+;XjwnV}}`5I_g?ur0mCSX{~bxhRM1A?l0c1lR)v9nfdmzu8P%xmQYQ z_E=rh>9YFlYn_^Qgin!tFY0_!riRF-ZArfWyA5scT*dXCChHMV?Ob;HjE$;gMzr4n zJ%1-U*+hp$d7=0X0bNU#CQ;MU>Y9(OJ0GUDD(|BL41t%)SBM0pOcMh+z>8@R&bo-| zMNuG}iBQcI*@re~jAwvkaL|9g9+B4k1d6Mi8%cE*jkL#S${>!qyOR+psn``zV)i6pq6@t2w`Q)^?Hlz#u>If4f{>Hj6qcas4IW)AF`H zc?eGw^UzXP2e%6?wI@C!yNyGc1MA$*N(a7(aXt06MBCM939TC&zvk>L)k;8gpcgVk zyx@r!g(jpNQ+2{z=-?d5Wt^?8V4WRk%`8NOMdG=h5ZIyZgrDaD&J69ypf95FYqOMo8 z5uKBpnG?D3k2Pe>pFhUuHff;LJmDge$G9sF<4lrM*LbtJeyeU zJ>eqB?sFbjljYF$a|c{uzxga$BSD`KfW2Po*w1ewXg1dUX-=i%0sYmgPDg zUF)5AfJ*i29ww?6R;{&1uWb4$mJ3>gndNf1h{@#whR2GZ#i|u$1Bs zji!3EsLMd<{QKznea{Q`SU)rgrZ0UGk<$U`^y&_Z@6Ehk{i2UwKM*Aws&;m7A~n%% zkg@bhien;o^H!fb!?IAqcZkj5-ZJ;8zlWtY2paN$5(#M5)if(TAx$vt`c6pn)31~A ztg{1;MEbIvEZ6kSvgD{N&KxE$Bi9-^RFW5@^E>_^ehPWp4B>R#b+@&Tyy) z2)tm^V(m;eru&+#RSPTe@q0)Uv>ujuheLJeTx_P=nM(Z~Spd27N=YclpokGKsF0qx zdd3}U2`OaJN=_7)x3ff&Q|JUBCuOf0GRIbw7VekDk^ww?V7a(pr}?-m=c&hJRmCR` zRey9GJ`Ki`OT`y;j3>k>9Q5)#?-c~FJ+a%=wmgWh3t5{&bKZ068A?w%NuShp`8S7u zCUl^m*cHf?8Vz5P`e4P3%rMeqq)Hcn>Q|U&i5e!;z_x}N{K`MO;wFE^TqE|LcAw_e z5gNj#^}sb@N=l6U$&6PP*|+DJ86(pagaeO4u>r3taxPK!t#bu!j6Wh^RBV4YK1#_! zyC&bBcvHyxjeisL)deRd|43-4ew`2{KL7=_FSvtw4_)+WiX1)*PTCK_ff)y zN8{@AMJEm&kj(7$OY)FCy`;LP#}q{}`B#Sw5%jWh{>moU`MXX3gfjG{q@{g^*}7Lo zSnZ(x))vJy#Gp%-~-l zs3hJZbwVj;C@9HM^!%gNPwh&&!WE%=kO>K*nZ^sbNsu68=}DXv)ioPJ@yVG18u)lEZklYteFFlf>LfshltJPu z4RAAJw^I@LbOVf~$F!ug3c_7Dp2!-T8bf1qgIyu0>)|h#mTuJ?J&)+VWZOS}Y zUGr6lw>w1#D?U2D0%P)-CAtt(y}60@lFVFn5*-;U5h9URUS%DDMcc5+>7AP1+o;LT z+n91WF!lW|p&E~$#wOvsMZ`$1JRCO7WTav0CGcm|xdGCX)pc3OEFCl~c}p>s2B15E z25B;-+6;q3%kNfM2SWaL!zcGi6_!*!N>xvgidkxC!6OM|F;L9KpZ=IZQt#G@Km-e` zw)Y6;x{#i4B;w?HYpN6IIkL>?GB46CmSO^{a`|PPs@VEh&ZRZ)0VSpNHubV zeUz)#olaS&v-bPcwC^9On*J)W0czs%oa0!%55?!_FugyZ5UpjwyVG~4^4j&Zj$r)dKr(IWRH`b%_3`?T?ko9Tt2m(yP=4q zEfv9WA(zZtHHwA=R?06c>Y7k5@CR`$l2&R4Fxp%jf*G2@?2ICM-R%-EJEU*viY;F` zXM=ns^d_K%dh!w>P3%`|2hiZLbW*N&ee`4c>QnnPshfk5i_x5S(q~qnL|d{IOXDX% zDH=W?aB#gh@;x)US`ISr$$PbdCHI!2m5zJMH|^*2X(vx}i#Qq+m}O7QhiHUH`0b}k zo2}1ZqGdgSEl1$OOo%QxnCFQ+K~irx-;6HI^MwC|Cu89tJVQO<uPL8qO&Z#od7Rf8mzjKv z=;hJd^Uu(8Z8WsvXIFR!1?`~_CXI%F5umLjv&hOb?cazP8cU?%2?`2Y`jH6RJXYrp z+GdtDVJ2b(1py{3$!i`v4XoE0OXgBYwEI|NiNH%PmRZJP!9VJ1PlUrbl}KokZDVt# z_n1-?HACHZW9enY1+Cv~CdNUDn#xHdoYJCl2s%TFhJWS^YBW)+?qoTHfGOE+b#)|^ zf5`&?1ZhRgl{+5t1Q0Bb7>4krr`J5*q~0CMHhh(2E(D%=025p}MG71AbN-JIFmrX4~1aaoHn?^M-DHnLdlh*u7(Y}kv6unHu; z&A?d+Ghk?VW;G0g5_@3N_0$nqDZe2?eDYHS30Nw_Rz`q9&9;YN{Gwf1f1sOFu`!of zNHgyI6%*b&e|nVrf>w@x-{a|3)uHSYT?3x($hhkLq8PdPZ*Dp@E0w788GT-LK9L^3 zzV{bLPf!~jcunxm?X({85_v{T;S7hgk#l*K#?IVq+H=!GWW?@ae6S3cM~YD)t2~cC zlL_V-k#9hQ@oErVBF99R9)%I1xp?qTenk53&qOxRyJ&Mz3yj}#zUQwE3iF{pl z!2kBV_rwg4G(jjZ+}x#MEaIMf3T0~hC<&&XDow8su?D0wGVwI`7}betBiy&xI?2dk z?L+A2ZEjTp+zj0b!A|XCxWkGm{c9eS%jS*naBe00)trPCC83&XhK2c*pAvO4_>u4p zg3ReP=KYm+bta_$P`ncA9ht0(B0x@rjaT6lk665u^F2K}fLS7v>daah8>8_87C`Ti z{8YF45?YPibdi0LvEtUD{(TEiqL_wZq+}$MTL8-LdX_F`lh|tQd{4{YKn(0c6_A6` zH#R=XGjd_}Z3R#WLHN8RV=m5>D2rDB?Wx>PhtO~JdsbxfhZH(%xnmLb0o)FvBX7Q0 z`;vmwYA~dQILtN%j^S(zWV>I1dEy@`-?o5HKJ}N+zisY~k?BDw^E@CBh^nE1`YzRD zc;=7AZ@f4*dzKZ*w8!RJfoyc=tU#_kHs1>5*<*)VfqeVQ)2t~&OSc|emu=kJa&TRq zac{FV(ZhsQVOrgwY#75fR$cMu*x1E1!JgiSsxzx`zc0DP9A|G{LmO z+%$XvpyyU%C7ZviF}rCjeVmr#Y36Th5KKCk-A@{R$yVuY4O-A{d9>nFx`cS!<;ZKKKwBmi1>&<$p_0!h*z!O)@AMAb{G#QSoA|< z+lON2<>U>~UAv+QxTBb8uUFqmM?eY=TgtILWwVU|7l^2zM@WP5z-s)x5=i6 z7wjN7m8?U3n{Xn3;Y4oj7rE1o)Z!5Ff(`v5*Se8Yot(}6BLC_}f-Om%FZPSH+(^F@ z`OkilH@T6+oyf=fMPA`X4s#;^*e~)TH}ZHV@^}3r3*1NnNHpj-{UW=Xok7qrE?!XI zFLH+)*~v_kv$kL48X~P0y`x0X<84V36}y7+*aZBq{5qy`3RgfobGbE8p8*mH{-N>w z&K>FXs+s1Uuk`vsr#+pkd;OW>f3nw~CH@C{{lf3im$MiSg!K_V;bk}$4oQOeWk)Ax z_xiP1{ES||7MK@39yk3llD@3hFE`9&QQEK9n~A2f7+b5fHdfWN@a#(CiW^=h zwFnf5WZ9R-c^khB80RIvH1bX_Wc>IR4A6qZJtXXS|DOJ!!~7uC1Q4J;|h) zbGC~@1;@}$AwS6OT6zfU(`b;h0Cs=pC3?Kw)C9O0NE|-JjGtB>c-CtsK7!1%Ju z(EROWkQJfNC#T}R@v?%Gg>HOR{It3&;-@`W?cdJ*jTmW@{_|oZ8mg4sD)czMh9jV# zJW75>6W#Mri+8Z4geY_RFuBfS3l@m)b0o#Q+j%!6(*_ocSb99`TTm;UMQX&c9JmmW zwBcJ};yHurOqpztfPObKxqzxbahp3IcGo{s@9A9HyT4dNo}`c=+<4tPF&g8*VbERE zK3=4_kxMP!XkuSYc1H1LSH2B;ViC+Im3iPwXGs+uC9l@|K3b6|mi&K|y$gI4)!F!; z*=$Gx!HEKj^%iXOB^5Pz%?i{E?82;UBwR$aR^uDQsHjvo7%PUQn_%W02eDqNt!;f< ztM>Y;?aR$u79;_!%B3o3Rq#4XL;)2-6!QN*XLdKcf%g6V`FzOE%((uz*lVJ8kxOD~g=`aH9~ z)=yl(wPF2#{^8EuFPF*SiNc_-G6UZ<3V?x&Je!U+OBFuCSsbBw%+1?GgG8?1iR6W* zmM}N&H}`D~=bJ?`vJv8ncc91q%z_`B4dXH&GAT0y-ONCb%z(g0MqXQqM&e2#Cs5h; zykWUzd!%n`T-TV97hk-Np`r}Aq@7>k!icrfuUH*Lda|UZ1@rrcqKH*r>V6`=RImda znHNReiv9U+YT~*)(tU&{5gn)f>?nBwP9G#57R0Aq_Fq9?KpJtEPN5dtmS;+o{UG^k zb4Fh7@tVG$&4RN6?HC>&UUBOU*UY^pdh<_r_K)woN1L253Q}hTfHEQ0yz~NkS3s(S8z53$6$oz=cxN%>B=Th>JH^unmF-dX8 z6+GSdSyl1n&$at(Rn`1!Yiz=shiUin5-@Y~c__Y)nN=2cR1n3+ zlafCG(B(eNx;fTEyadNQ+$Q_3Wj#%aA`(jb+gXF3(-XDX#E$1(1SnqDQ~YQqZk9k3 ziyfn!+}JOizXL_Hi$uS7{6NDA9}uPCyAmW~T~ZRUFB-}XW#Q4Pnylj9`Bg(-KNcZk zM2LG+B(P;n%|iFXZ>B*6N6I5vmwTbQCs%T@t%oB_v^2;928qM<=7Pe|Dljq9x%X!Iww{s|D2K-r3YQW0G4L#)cbdsQ)GO|x2JC9Xv zf~=6ARY_N%mR7r#EL|!bIb2?&CxF-MBTUHFhz)QMX7|H9gfRF3D>fEw6LHKby(h`y zuL~8g;ii+3ZW-~&QNuN+C7K_$igCrB%l}gxKbu|A4(d5ks=^MPC?c8i@yLyCV*FEo^twLH%P=aQE$ws{ zG1W*BQPtQN&9!j5`94(El4nVXC-L4Mal+c@_4FaOz!yc~@&UTV&ealPapQVB#i$V1 zqHD%G{z6)!9e8;)XfaNS*waSVaDSg@kDrSdn<%&+Ua4bJZy$dDS9M!k@Th7&6t2Mf zZdx_}s|a>}ly&*>%B^~z{DQgz98hcc^fo38BOVGkTkuSLZ7q_AsK~u9&x)gqj zXt0p<);E|z18g!hV&7a8-#@|V43$upFxH_e(KFT;3-ieil^a&;2K7|w)WRHX6+RM` z>vwIIHR#rG_s!*!S!Z{)?vk9BR9QppP&HZ)^@iodBwK?0yxvW?FdS7#nn`f*c0}r9 zk_h*#$vya25o=8<%E4{>fk$cEZ8#0pk_kmx8ng8s-*cA2i?Z^&9?Z}yAsLkETv~@V zkSJhW@ge$StNZ3xNsQdbcc_y$ESkKukX#4G^5`27+UP%K*i*aR&ybTS9zpUirozzZ_JB~ zXpasC5em*bGHhvIu8ChX9M|pgq45h317_f5dN?B`77~OL8mtz%PGPl3z7~e(7YVFK zG)HAa4Z9jqeYD8vtUjKeK#=`ljj^{H3H!%}ZO#kXwR3}kjk@z^(u`*%$I?jsdV+iw zsm+x@r3yB}`jGYt*&08BO;BUEsWI8LBm2bF((wwzE{+g#YIB#d==RhIiEnWA+!VyTQLH5*h;%Kpn*UXbHPA41i_sIz zwqJo{r>Oz}x((j6%wn3a?pjDk6gKYq z!yN1{Cl9T0f<=W0KI-7QBfltgf5xe1Us9wp0X=ckZZ4YS%pU6#sR=4^?0)1XPk$^x zJ*i0rxTtTF9-H}Q6NFd7Eo#&FZ8J2{SBNKk2$+N-b6cO1jW-di8#O|;!;(U9r1`5- zdRu<#)cGICH>b8J-g7=D%}9O8wK7iY%@wsY6?QHu#5GebGVKmLHQNK_XiOvl@cq5` zi3nOX$YusmfJhYE3*+sji5>ZdJ!2R_jyHdh*s&`JA4s1>(L^#oWCsVMibN)|a=sc+ z<^QB9djjv3Wc5m>xJ0wPaon8A~QTXDog5mos;z27&UHj9`Ns zi4RIc#T)e{LwQNj0lS5;bH6-ASwxn34IX~-teLaanjLn2gVyfE4w*Y^<`w$Hb=(2Q z^=kQf^G`)WjK0jN%v#0E@t#u+y=H^9aa`|(m3i|A0-C|VZYq7vTE{dAprcyoY1rGr zf;@fQ=4}c08!Lf()y*HocWBln{!CnvDhSBD&c$+&u>g6=t;m|x9YQgIyh>gWevk;I z<(D87$!T1>0ULUzFBX<@@-;s6;SV*jW)L1tbaEK?00q&MV_tnRr9#BEmF!(Qtm;{d^gpo(1V(VpXQs z9B`(f<^cn_5V+5uXqPBdqIN+yB3`ZW@pxyc_~3tfcrfrju<}jC{`mgkz|nebzftir z;d9D@dd(XKw6wL6DuPrY`H2&z_I7$pg#vGf^oeg{7ff|q$!HHH-&XRZaFS6>A;Pn? zj;3#6=Zd@|1q~_UT4Eo^ricn!bJ5DP=s!@XW_psE={_iQUw*$2EqnBhGJ)F7xz}Wh zDzk)Y5)Df*vn75f5o1`j!}aCU%hY7fv1-c%MXTMJB8fba?a4IjPCglflfIdjV}tV} z4}o&h?_T*fu+*0bjneNt94T<1&cj#JH~IYG0tlipK`iN^A~woD+q9Lc1WF8JqvPNV z!k`&pAHz{}oD#AVj9Q#saU0#al|?-BP)bed@_F{u!+!r8;lv9V2o-hfAC!jd9~5uI z{pEYpJP#NsW4TLtQL0s#kNruqi<0ecd9W`=M-BmG&~7fbXO0TmHyt0e=U3YEtE@I5 zP=%)KgZy)V{GhdBgMj4HfAZJ8ZCgt8jYD?RYHISPQ+m{RCJYgwXhd$@nCI4z)3g*p zpw7mib$-yg*`GQhxi90!J&R}+Y5S@&!cVT0Jzc5_C*2}`Jvmgek5Ej}i=O=AS(UB9bG9=2<%woz7uGic7W2z@162{BE=M{EkQ>+B;WAsDS%++aRMu1MhGD*Rva z6tYc!q+-3I!JyR)YcqkVwXH%vLbnw~FATwnjGR_IG7O~}*ixfUSp%P=d1SC+wV|9x z*96uC^(ild`IbML!l)Sg9xrT_#og09bOC99{^Yc4EHXI+2}- z)s{B@LVej}Ex!H2w9k#bSONMP>+O6_6bNiHgq{CT<9S(Cq+x~g&qspN{p)P7 zU+{zi`x6OmQx}5M(;aapf(P~+N}I#|-J9&A({Kmw=3L_DELE2_ujcsvqvpS-FPm8O z;-yBlP7H2U-*S?zneSTMDOpF}0{cu1jKOpGdWQ>*GQZ zhKit*7{W?%fRw^oV#V6jWG$6)3K@0AWKT&BckKycPUdz>3=3f<_Fd6d$_eM5`);b; zHR(GS5(GAb;c0~om8DVt()cK&+6=p;6j!(KKoCKqhP!TWq9{5@ZbYf~c6UI0yH8t> z2lL`}Or@q-iG3Tji@50ot&2*d7X+PI9G@3)GY?sB<8l36I)ozXJK=qsYP2;R$-#Wo z8VEUukTO{m66V1MN*>?%QQvuq{M_RiVWc9gr9Q6F*p2oqP~>nNYdon%3&(2J%e3eq zuwiNv*4Pv3#>IX;s~|dK+#-G&Q8B)mGi30lN%-pVZr$Me1@0~H@9Bkw$8)n>g}rr4 z`6gQ`6K&tuLdPY}Q*B+>uhRDoud-{xsxldwJw522>eYp-(#QCs7K^2P@F7KN9D6*J z-F>pTy>^7KweR~If32kt@i%!PtC6Pvv-sC(iov|DM<@m}UoKOMVz4JM1BLps(!Hy- z=nz!ZqQ{}8mLdfZ%XoV`&63ua)uPTeUvGIvprSUcYIA~uww9_bI=OcHo z^3Buo?1sS+yPBi7`dB#>5%7ngT%0>bTK5WQ+tbUL6HtvcwJv&;d0o4V6RFWYOcd5& zgAxqj0N`PnKo5=~7$~_W;pD6Gvcj8b_RJE=I{BcjG3g z%RK-+eIFIy>5m^cN55-3)vKzKTS&nlHug$Nts^C?c4iGuX?xkV#h43~OMvk*6lag4 zRiNnZ5ZqVzi8mFwqu&*)vWtrVqD8lR;~41CA&edUp_0~3_GvP`=zyT9H=#st6>l;2 z^s?Y}>txcbdle{5FIOG1?iFCj%+!a+qC_TMcV(t%_{)jNqUfCgF)cDumZ=ye!$1Ag z>x3u>Raw`KrP;2#q)77jl!YIRZO|iPVbRVyb{&PNqWyRSz5-&bj}Qwq-Av%e#vQy7 zz@R<49SzW+WmMtS!jU#2usB4bg{;XLHkx|u8NL#0Y6)*=%UjS_#E~<=S|osRk>gi| zh|5qAu1Jh-A8*eX=*Ql#)Vf!|LCI$n&7Bo5H|sor)xc@@nhN{|x|~4~03JqLdo=91 z3LdY{Yq%W&C9t6vOMaoo=Kk+@m2S!iargq0@uQ|=g6O(u@eI=P0@FGDc2(x1@bh>q z&y%GhJZ6So#?unC%{5};+B6+cP-7-kHFlvD7@d>y9Q{WM#P2}!>{oUO7GrbK80A5@ zu>%~=YulK(%tbVoRnhIs`|5|JY7;~6pmS~Ap&f*$aZxLxafHqwD zoB9DS9O*4T7jPKX%8$DRCxB9t&buxavZHiP_I%axRqZ{ujh<>=JN4#f8$H@5gR#Eb?Yh{6p#@r{3G_F?B znDr$wQpVgT^U(M|$y<5p8^0N_Ro3T{;<$(SroB=bQ6@W+idX|s>EH(sUyUXw;gP>1 z{UJQ^@N{_O+dn7ycO*;vWA1-&;(Mmx*l!wpD2QpdS(6wqSglA8GF7 z2AHze^s!(?%^k#8Oznn-oNmoo>O?Af$4stj{*_npPU^0)KC2zp9U=y@H!U8++P&IxO;MywketO=u%mjOn& zyYKpdS?G5kYKYiZGY3dgMd~b^3c|)2+%?V-#o0Q+YNHTIREEjIywHp4B73QzO>X6F zxMi}{5o*Vt^giKeov+n;%Ua<`b(es_e~9LOK_d{aw_e3ZQKx&B->`F|9|g~MMB-N~ zT?ai5V?HK{$|e8TYJr2EC!yG#-}YMFjUVHH=|HUKo#+{{9v0(kpgY#{b|az8md_Z6 zHzrItq|Xg=603{!<(r&fsV`FB-Sq=6vK2;y5QRTHI47}&)OW6XCxNfYMAuQ)mc+IJ z+7^O^`q47HdpOzBU4Z`cdU4N>nZPvtk!gp@D>`blFRVSpI&2z&lnXD$_@LOKh%01{ z(ZR8*-o`I*j<&TiX}u`}{}r8XCE}|70IG*HJi6DZE#ZKhWvzy1nfRcnc*7i~{K~G$ z8F-E-iX!!2WAGu?3?07^K#dUCOW~>^8%k6gb%IwyhhvSe*5e!=nYov41BFm`8=_ssBNmx>PhS< zZE45j43=Q!KWv-om*2{^sRQJaA&hK!3%lIwh7yV2F!V~tmB^UDQDk?B|<~LCt*u3zs zikgVsIq*n4*xfn!NWDdPS3uWY4*^}CJX+0;$7PD=#tKUw*(It1GJ6#9Q$$I2-5z8k z$?a66{ zUB0Ef!z}nhUW0)y{o-!|-!xA&>t7d~Woo-k=XN~Zy){2`KF2Q1YlQZnghxF_vyjmo z9b3p~BA3~n;nyqnMe09QM)12advi-3#=0Yf6U zZz9?!M#TmzG|C;f@*D9cd5_5FvoU3cpCbL0&L$_Q9A9W%4`y(?JoKM09I%-7?Zb&V zNaPeXU)NTREzn!OVlMQ>Vm~%^k>0XNet#nT8olLhd5(GCWTo3p`!=@P-eBNEL;rP0 zuy|L;fP)Lcjb#^( znS}M{7}<^>FN0q;2fXG#hGjLs>I!{qr2g;nPnFUtK?@ph8mEV*+AXg|(L27V^QP!Sx&MM|H&zdyK8_)lc zCA}10OVZ4aW#9BF{*{80{_x>l>8=An{vK8vDt*YsVpNS#w=mvS2*4FuTa@h)ZYAol zIod)LGUuG{C})4fAgkygetponNplxGh^8oK@FjI{Shp3`)E}tWRgq|YXM9`af?hTN zK;9f3-P<)Gg|F~NBPM^=p1_y-#b28FHFeZf@umCE2V~aZm2mrWg6DE-KnTcg0mlz# zL^uXIy|veFtcpG#_|mLL#cDg{D+t+&Sn2*mMBAh76RDfq^}mvN;pRhjlecXSoe$Y8 zAQ#yz%rFwSIwrV7TiRi0F?-Si6}dhB!9vam@EpA6n~7TbTJW^n>P%}&gEeVEsN!o7 z)WU&Xrs99vQyM@lL5ab%gC62QOVGiA`#qpwcoTt(z?W%U@MT2%*gc;<0|s@mvM=cR zbN{02hg(l*6#6fILhmkDH-1F2+6MXqS%X>}^vWdA<)w1U*M5uczp`mCUJx*nWYH)I zD)ul&1?oH)6D<$wOXOwZ1Zq#x9 zmKrZsNe4!JYP5egAn}2Zh5g7NEVfbnk1ogh+9L=@?_H6{F;6$Cznb!SM)6wqC_&D) zCAJ~;`WgzAPeF;)-~yXG%Oqn1oahgv;JntGkmxNklNIk`9se!-1ak~m?uFkMq>%V{utx-`DX927Jp;-8 z(k#w4Wlehg%}1IQt`sw!>%U#lq4X6gdKzmCZ4{&?6^gu?UgsrWpeXX`+$8`84z~&^ z?OFKahtLn+Hp~3&x8GnX{RsN|4ZIG>ew#S2wcVMK=W86O+@C2`<*KiH(6NQ}-{#Vbs>1^8$wGaY;vu_;EvF~r@o+QfpR)Ow3P%O}CMh578} zwn;vB)V-Ggdh3JEM1SBt!9aK?0Q*;{{e11y3I{D`a&naj<}B5=iv68)Iolzmq1d;n zroIz0$W!gAK;db2;lW7Y)94ZCxcI^_j(u)&=_QaX-A3Zmd=K)8pcrZ+*s0u&+Wh4a zdtw7kb3t-He@YNZbDfZ+Wt|hfV@>PkSZ6pGI5pT4&#@+s((n0<#h&2!FSOnkGbTby z1}$b4&HiAaudUP>s^-Onhsxnx%hitQhWT?oJu$T_8`MdfLK|iDzUvoo62>H6@*KQb|Hh?iWLN@jooFa~2bnX!;gR+{^`U-Fn zCCrADhLU-dSB#^L6-V=G+Fq^k?xV%O3_-NTXK*69Bfh^(Z+XBE`?00`ZYjvWET=g< zws;@qYb^a3EMFjxY_zES%4Xk4bIkJs8fxQ{FgS?fCVgSP#X;WacgW5jQN>L8)!GMn zb&?Q~4+?py>!3=KmbLcc4T)`q0OGu)5K@3&gk}Vz2F2HQ12?i6q|Rm{<_7r#M#JeD zu!z_4SyU{zGcSJ7*Q^WiIxq%GM!%LLK<+8QLE_w=E^m`e>q=4nKu4f3V&5_x?t1at zybofG@=dY^@l{a=pM!6a^f%$q1&g<#-4Ln&FtM#TXidW}!?s{?cVe4QUuXH)!F3XP zn5&%YUxHs+>JWq}O{zUJp(yaB>>2m_e}Sx_$MjlF0<5tftQjvL@XZgq2&4+Bi4|N9aH_c~~4PpV7vLw`RF!S$Mz}?kP8-K>CTGR$cE=0jqXI0c`yanJsZoXJ{jRww~qff8jf z$bQjU*!-A!p%3yck?bZCZz=<&(7{32i+a+ebwS6-CoQN?YNx(TUCgUjy=W+Ho?RZL z%h5#gfK(%Chh$&iWk(Dv*%y#~K_bZ=MzSyHpWR!NtP+ov$LJ=#m7i3(RHl9{-K`ce zr>LwdMdc?`R9?iT3K~+|1bovoBnxjPm>qerQ-I+1qWmczlC?bm%;OgT=V(c)4-MMYv{=OD)cCB7ydW=zDGu!9oF?g0ADC3zSho#u}LWkh|&ELb`Q^ z0|)27Z#)m8gT+$~ropd^*NZ5*BK7Nt)?rq_9sA07k$sB*|K$bKy&m;QkAlY_A5C=# zhxo;8@zsqx>CQ3G3$P|q#UyTaVBNxF@pKf{Uea5hq%MxFn!qRcKm#}9q4)K!k?7wp zgYfELk{PN|H|-x{&01hDhT~mva8)IJgZ9S)nNtf( z79PsbUpUGAF|sy$dR2hKMPDKc&3h*_714~|x=V)R6x>G*;EpoG+MTWi@~p}=C@8F7 z=F2PuAI1=xLcNq^$@O{;KwQb zld2SjIZITV>VQKrBB&GRPmp!EBY+LgLPpOdzX(m+7BeB@)|P!iJm)jTiU_jUL^agQ zYgd}BdmI1Zk+-?_UYE|qis#c7V1PL5_3L2TnW(F*601uS0ln^jb~M6XWU$Bkw`cAG-V*{ z8{A5D4Dz=g%}F`B;Erg!NKN2M|pdKn7hV|??! zpT0x^&8#ogAN&c`56x8nJ~c09OR130Nq3Mh$G58KJS(8qnJ)-+)l&Xe@9jjG7^GRA ze0r|B(dU%h1;*5RuzkoFM`u3x0)Rd0EjuXcVM2VWr# z0iE9(lVv6);a&yhAqe$+Rokcmf=*B4nMw4Vxud?~{FzG3|F{et=oO( zII-~E>i%Il@|p|b7kKbbgH6aI>1sM5BL}oRd}R(Ha#<)`xU2;tPyWtyJNp6)p(yxCl!`+rL^uT*toBJy{9+! ztl+>r`t_7l96jB1fDReaxR0AbCUlLNQHX+F3Eux%LjURNs*QTOHeU1G zOT30cG$f;2$~Tg0pd^@`GL_|Inn`(4?Y&d< zFhnHbeuSELdfw#yD;ksq-lcMSJ^cW6vs-5*@)j&7=)l zPxtI+tM#9@kKS9gT5qie?LdN>&fiok?ucffl{-b9=mHPr1)eyd;ugzy0R}G5?zeZ! zc3F+zGGs>1Pb6N~zD*-GoPt}lSTt#2oj0Sr8qw|VV=)NkAU51HeWo7Vlh>YJ9NeV>m<4g1Zo-2tU$oL)#eC z)?wgY59PVv9r<(`LFp|bz5{~&3o=M*6@JzEQp^`3{wd70+x?i(AQE+`j+6s;r1I`| zUz5*H!9KnSEDDy}?XL7be$GcWMe5^Y>f_yNr77`FUmgENN@_#0zks3Gv$6z;0_Ld~ z1xkAB5MC%armx^ssgm{{eg=ei2B=ltkD$rOqJUoQU4WU8i2$8|+~rh)7S6#Rvv+-` zco3dOVX~(f1gMuH8Kfgn2QkcL#ZBPQEPIP=R2B4XVyPf|i@0^W74CbA?|I1%%shmi zb_!y&ELl7A3MWA4>a5l$(0a0(Q+V{=qyg?r$J}FK#>kfgj_a2Vk2di+?un+ZJP*G zIzd%@c=_koq$*g|@mI29g8Rq9iuD z(?Kt?lb@DkE-_%sj^S8pTQAAIaBF;>X6$__riXU9zdni2dtc(_+yTduDdDBm+XXxo z>8;=ATXvOKQYD_CQ1-{`;_v7sF7(CxV}10zbT;<_@`UTT5Uq}$s66ZwSHpc^w6|^z zrbp|!{{LaEY+TOa_UklR3=#W_zcQjRWltEG7R4L1voLWo2o~^dk<1Elbhf&QL0|S( z@9ltG8zdEgb!%zQ{hl=CwL(PhzXNL_?O+g2yHsmbbQl$#p#ZYqDF;RD(#%!jmK0O=szFr5-2t0989OEL$okLi~?3>DHq+UO0m*4ZT~tPSHcIzNYC^~&%k>92orY*Ft>_= zfv`V10ws=MpuG{f?|%1c2msSwBGo9z07^enW>>oOJY&nV#+R#@qNcsPomVK3cNrqf z&IHQN$!r_Nf#9u@T=;jP(|a--$J9P|JMsnGWD{Grp)r*jeg2a&GBdr$J31#_p~_n~ z*P7O4W$D>TiW^&ewJKF$J?JJM<{eP_DL+eBuA@kDJ^@c~}V2H5%Pyq%fb>pZP$*%0_zWu!AN08e`LJaO6IO3jrdEVE?5*AQ#b0?yCV?E_H?y; z7uhA>Gwq=xabFiO{Ecsc8jDQ(mLgF#SRu<{tQ60?tIDKJ!VR0hOSk5&Jwom3BD1r) ziS)car=cPP>CU{ctSI&Gb`b<=f1!dk}K1+Zb&jw7F_XtHa?9?a+ z@m2yeFkMFj28&*j0y)4gEOu1@>07t-gny=e<#2b;t&n2QsOlPRXE?DlKU|MT%g^Lu zyz&o%db}1r57>+@;+%7)yKwn*)Wi;)tKW4l&2WmncWcHZbGN&D%{0Ev#U-~>5aNUd zB10%~b9koV@=(Hnlrrg&dyd@caWD)3GR!}z1r>LTby1YnZTalp`}Uq*_wTqjW`m23 zDBtv!!CpsN=m_(%Q2ltq9YvTol)2Y)yr!ylD~1~`_=llv8!JSZ5wN$CCAe)=UOTwL~$8~VM>p;xxEx{NmS zl2^$7pv~*5gbh*3C)xGCy+w4C^;XYa!p#^s4XeszpynF;&QiBoWr`A|epiIsEWZBk zYNoat?SS{ijCUV%+uG#yeDe&1b_xH)3C)J9tp8*>pAr1l8G+ChUg%-mR;aC=j7Xod z|7Gbno9HxQxNy-eLIDwWcCCnD+auQN?j#(Wun1f(WN8(W;mX8HxTl|!S{~eyoXQ88 zoQ6^kDR)hhNlqVPV9TeNMP^I=*o(z&7jN=oFRtaU6_>xVS0Z?{w?nh=gfYurJcEy? zY1tIe`I^$z^(rIFOJNV*3cj3i$;&w$=5Y zATUIoL>Fp;97N46DkX5CtG7Hv33vRd0wM5!H)6N63-ZfM@6$CZNQa~y@q`?#y+lC< zGDZ+qt6xUpw_k!8XG{5$sj)41O%8yNUs>xxA0r{LjxW!xeGAA1H8@P5s`J>_k4kU+ z6&$7CCqYI~Jq!i9rFT3AW^R&-xv58tG}Znfh}5B?s;QmcEXHZSV z`E!sOyDmuUQ^ya^p8p-ZbkrG+fytv&Me4X-99Zdh{Y|a~+Bex1DbJYBusLV-wZHYn zv#8g-gW+l#PiRdGVHJlmPr{DE^d2ojLviiK$jdK`a6`t2Rr;Pzw-q+Op+*Khvu$^5g%aiul?9rdju!@}i-8a{p?7z|>CihZ(iEyJa zP5iwQwsw|-YUU)d-5K8P+{r1%>@ zz}8^{G*A`Hl%rJ^VKS4wYj}oVO^Pc2n*NigNQ6IrR6KDs-gI#0_yLj9^`D@0DEQAr zgct8Q*3>6-C(omc9=*qWKU|r$cb{Oimu^j011+q3fj@L%Mo+G$zY&P!)ggcymxyGisDwx^ptI+K1W zD@poJ($k6iSEUA!ynsZt7D@4NM7GDX+SruIHiT^HGxu=v#)hB6SxLzo@$uM!n?pQ3 zI@MwZA=+bc0?}pGEB@JVm4{8O&C%afAppo@VgEUUZ~(eE{gEPEI$j#SCheb)Bb7Xe zD&OeHL&1Hti44|60Elh*+t*!^HwSzODLBXCt35_!3wTp>+er~MSh=mh=5d>NH?^~= zSQ$#ur|P^c`eCGy**iUH17h(AF=GZx1GiI*3o`Tsel+E@8z`q;y;r$C#L(8FUkXZI zTh!sBZ%Du{qGN-=&)18J9{v(VB+M6gUxUZl%pauG#o?X}azB)BeVr1OfNXrI=Bgky zg+TyW<`)HeHKn|#d`tZ@4c@h4zrll+dNjjQoYP>=~Jp+xQweuhD_^;q#Lp zLAR(cYW!U_|3{5e%UF*zVnl!aPE7?uG@L{=mxP^a z1}>J|)tcoKC)oIyl=2vQMk<)h_U5yssH)B@pVxSzDo+TY!sa8WpqL86cC}{e>rAf> zRzV)RzJ`9tUO#L_ioBia@tefW{;NtG_GMPpi&ASkQ(2rLv4F4fHk05OLiL*!8z4xv z=HVm~+MXC9%fp&Ft0gXb(0bhnbg$UKCTI?t6|gFHM*^>g^(puw{TSsWcf_?^OtkL? z4n&8rh5k5~oi?1Q0#)3D=q7N$tY527`J%%=0RJooaS+q+rEDhsxu&SX3% z>Pwc$sOoWt{)u5hw9-{)f@UmQ z-OhJIdyoBZ?0cWjri^+#Yn?Lh0! z=8I(FZtkPvr;!CJr0vJ4$+#MF$z4Ihw zUsDpwzlP!JEeAo;gjZ2Z;!b~9@w6~nAy_JFp|`$Ivhf^jV*;vD*gIeT)oQwby-uy8 z-g*ZG^ks9)Yt^Eq^3!Koeby%NacS{dwT#7U-DXt??U$^@A47Q-idBtLN6V*_lw~eV z4y8ZbAEyjYLC)@b+0n(`AA2`=*s!h>Gsq7DJu!^upo0{hq&~RX_Fr(4S z%xYYe*75t}Q_ID^70`{Zu1+4seKJL_(7yGO8_jB5f&-++>8CS?gYpLmp&0M>=d?AA zVgg3EK>K_0Y8v=gb-0%vrnJn4%*!BASFKG-2r4;$GX9!SIRSny3|gIO5F+^MtL|sS zveH*%1Iy! zPD6icy^2XojpN^FoYsJ2kkZyo)(s`mDADyw;WB|2{zEn+wqabTH{k%6H7NrKZeV_X zP}Y3?xC;fu?|GWPPHj8rCO?RJdS%;;a?WY)n-S;7zQ)T8i=9VAV1F#^_!B{^!5_3{ zmEl>&o?K#?B}rl2ihsO%_Ua9OT9e9EOX+48K3Ke(N-NWq5^A6)Kl%jTwGH9z<>{?r ze}O+bo2eq~HG)`6f^2RmVZxZ(|1Q*JY1 zUAfr@7-bpMhW2qV@bR4^jf&3{3w*y3_zDj?pP2d6hYOOa^>PmiY9Eiep=<%ln=Xr- zt2wv`IPB$CIB{*r>X1RoD2xPJ%kdtcjI`}Gv|U7;$Qbes>+|FY3iRE##JaUiCY6<& z1J28=Sbp+X%)nCoC9;H5(lEI{zOG%+x%)TZQm~tN3YXB~GNR-eyr{(+)8LOzk+n07 z7prM|mHaV0t07i3DKVT<_|4jqUMjU5*5`+=Mxlx?D&Qb4o}a}NY7qum%n;wld&pB7Z_;Ss+jar5B02SmrhBVe*bDrj9?tB_9gG9maO}z(w{St zFvZ9Wk%ivdDC^cTYsl#KAP#qe*5snj3Bnu8>zq&`Ki)R%qj&3HV^;Bj3*SkZ6uCdY zFNL@#3i6U%ImPOn>IQUZFHwGGp}c z>!Q!9K=kPDG93|X&3s(h_{NsZ9|Heb66B7Xo(~v^_tsy{hFaEsalL<0L`(FFlkjxW@G~-qI(HCoaBdNQ0Hd;#nC4ZXljvY!_F~2a71Z4e(WfuIPKqdY9fD9I8v=i&=?b9UT^S3?VL{Ki!d%wUVr?Kl5FXwAFJ=Z4qaDzP@}K zFr>UBBqi`!_WsJcKd=@5q%>{RT?z(rf-9h$!A(ElMunA^_0s&aV`K6gOS?w((N}@@ z=AY=D#BPi;-P%*}HuG+-W(#O*B=@_ddOJ@U<@xj_i|H5)l60S7aNI`p0&X6=@up$o zDmSoh!TDYF9{g~~vvzOGUW-tpzMPw#8Vbd@*RA0^-=&IeA>72B6%lPsFz^9(_9(Ps zkyep#_gthZNsmou#l7J6g&%^ST<@rS&OcIgfCe=L+#x)uZsr6a+g>r=b)7TxrxKnTq zS&3LsuYS~Oj2Mll=Bk*mmiQMXpJ8|D-zB zUl45-{gGFpC_%p5jkhYu6H-YC#cFpi;tpzvcOMnKg`noq8zl~3%UlSUc=rIkrA<*X z-4I;!>uDo;r9GvL>+Gn}d$}J^5-sK!{qr9@A-InUg|x6SDstE=hNg_B;M3HN}lI>&u7SUo%dWJ z&og*V&E+EAgLaXjuTRftda|ZGDN-pl;d3*Yy0)fyQSv)o1fZQ>TrX-6;Ok`dQ^0GqmRaP2<`B=hfQHfdd zc&(DdYT0;SrQzczztYI($6smq`6;M03iuhI+8bY3X>i7jFQQ3)ifN9Yfi%U>Ae!N) zL{&U~Fl}&zANIUI&V9j=37A|Y8W{y{T>*Ty&IuwZ5HdrK{%rp~O&*y552(g^DSDi{ zD5vmuvkN=p?!OYHDPdEX*5_Y79z6!ly@%z~@##-`>t`VU&IvGn@AQhKJT1x9+l^XVTY(`TWYzYY+frwZJi)CPk{@$rR2YoY$GLq zM)|;fZUbZN)fZw5^16kAO+?$?RS@sd7oNbj5Blp6Dg`V37y-dTBKBDY9&Eey=J%k8 z$z;9Ne2?m$Q$Ld~dgH_L!s}*(bTbw$zt$&h&!w+3rEPJzrusTZo}ekcF4swyYY*x2 zO^0^5Sao^u!s@Ip4^Hy~;yr^?U9bIjT^~%>?@D$3maML4&oEuTR7+3uEzKl0kYg^zzb$=UER zJFCC_C%GU!$+M-u{{lY#-$6S0s&x7PgpYp<+8Ovj@n6Up)7yaAGd+5*z_vd%*Kx@u z|HPBfBn97{lN5+RzOW?njLJ-A=c*R#Y)1J;kpt6Fv>iDKGSc5!Bv_^eNgHZOIU`}mStY@J9;OcmLHEwg3ZPFjada=D& zjCIfP%%Otzbwfjej};?bzvl_6kSpprXpQMD%cN#GkDU8tJ&hG&hJ(@^Dt+#rgMy1E z<37_BZG+$Tdar`Es=bWvulWW+iAtVa6{>~bt@XH5Yds0#6EK6|8LI8(Gr1n0 zBl5$4N~`s2=|*=@T zbos*EF7M)1Up~oa+mBL@pjv{_EN=%nS4Icg_dUW#rl}GyqLsZ1Wm=wnj8FPKVnJjj zP7~gw)q`J?7$29+;iKVP3YWM?Z@EmpOwj@xIm9Z1dawsgZXr*T7n8y`D?8(lQWq~w zr>fRc?di*oVXQ?sH`lQM)(vZ&v2V+GXKw3PqVY2j&`4~@7)j!r9`C+PnLgy>j)NPShY3Usj#W zZUrcAbbBj0Y-j6BekOFA6D^-N`W=|%@artsJ3^6!$c#aPEGUAGByDX_!Zyx@V+?a57y9k3Pg&U4x|WF1%5Q>p}vmid2ZeT6q#pnQC1VdxMv$GzSKelh(+<8$`#=w z=rfZtQF)7GJ+O#nXU=&fgw4HupQqgF!OI=X#~r*p60BOU-F^+e{{ z?=FnsK}2?w3Pe~+Lj0RS$ks3QdAoec764CRB?PPm?FS!Yx^O8t=0O2@An(pWu*Ps! ztrD!%*JTPC2?|TFsC`?UE8<__(W-4Cl@p4om4bLBXCcDQg2Iw$W&E4`R9kY((w9#G zHWSct>zxuu!R9Oa-P1^^ctt>2!%5`^0aDcS>hL#FYHF+HYRUE^^tDij&dix^o>I`C z3A9R7V2_S;?|21ergtLtdHRw?^g($%+S!Lcg@+18n&$znKrF)Be+{wEcMzI5@L_Wx zT>p1Ww!G8EA9(vtkNlgL3$(akQD@Bi3TWRptbZ)HM_7Bz`+B|Q9lE3XUcWiM#_u5_ zv%bsJ4h$wG22lEs!P5%J^+7?d?tkwW40^F3RNNtkD!Sb%J>HjWoI06r5#qx^QiEva zW`6HQ==AVG+oE*`E4mMd7VU{c39&&Q%utdN=iXlYq)ZlQRZV%=Sy+VM3~E#EuKi>O#WD~g6jIr6o&N%=DyqAe+)LGvKI@4c?D!G)c#Cu${R>e9s^?Y zw$b-_%D(UA>?dMRA{j=W{8;%zQXyMn9{jzuvaaxR9_71TTZKcVGI4|QDj>F~N8>r- zocri>SO%>_Wjm}8=dm!#g6tZ)ldq{4iDHUi;CpSgvtIHz!)x*QU=gkyP56L`@f!toE zqEje!i;S~_bfqKGm5zSLz2@IlJN(dUyPinvBRJ=-r=H{m3Ie^}F0Q4wLR+dB0B$jL zC!@fTsQYs{);><2z+1W-(cIkc{EXZZg@9q7nVZxuNvCBMosvlxsjK^_qz~dLi+`W& zx)as%KKuhaf28L!-`A|<0MWuuFNO=GA@K;)_SM80*aWxQ+8nVun&3EbF-28r5)F#R z`Gdq9fth|3$Sm%;n9A_4?MdjHga0T152i+~_8!wN+2U&35B3sReJ#9%q4rGtC^rt~ zB1$y_;>{&m^sfx~^C_vB10J4dAm}eY2(S8~zW!(Y#g`ee0DwgQ*49{mk2XLm52AM} zK90vzxQ$PK`6RnYebQTgDUZ&$-L$h(u%4ImdOmf@C&j!MhD75aAx8=)qOLNbMA7Lf zO*D?n1RcFmI-1h5sGy77mHp+TQRJu3Qu5UhCG&F%diz5XpOVB0MA1`B6s6$C^tI3( z;cIMnm#TCK%&hb@4$9&ekF-6*Oo(q7#iDAG+UZK);da8 zi(|t)(Malg7W#y_{Qbq5Mc?ZF^Zpbm)Aa{+A13{G+3C+oy3#TDFEu5eeU~SnIwfV~ zMSMQEuI`TxpkfRH8R>rdV?Z5s;rIDX8FHoPTk)Whdr3&)uWb7+?|u_uo_8^uCg{9d zehEu7ZKzW1L7LMM1p5o&%w*qPF6IPW8CoA?UPbW=SU=yej|xmLjh-pJY7!aTEHN6b zbvJ(N^{>gDMDt?h37eVJlqnh)Cn)J7Sq~gBi$JKy*xMP?TQ8sq!o;CCye#B1o)zHM zmnDpLw*a%N_%?~4*DhYQ;-8e_48}X#DB0b3OnVX*;rjUgf`xv3+OhNW);jKG5$)Yj z#Y@61!(f+wgSK(rZ^S<>v^L^-$9lPVwcc_Lt>W9KXJTDpc@!MRk4q+v>LV zL;d2Oil*(M`4TA!`YN%bI~YKaI;q$F!=^o=w4!QSh(ztni1m2{mr)HwXpoo#60cnO zLK~#4DR#KWZr;06$Q&x@9N|r_Davfa= z+5^(fDtD3Ym;XG-L^pw~uz{24hczR$!;)TJm7ZqVY)>c*vvV#Ua^Q2;q#`XLL&Hfb z(rVX+`QNoHvwxYjLHd%l3I;QCCW2>g&g3a;&RQVtj2DaeC@Ye_Wh6h~bL#xmml2){ zPU=54ut+M@V*Fdb8ZKe(m^Qm6PrT+06t8(ovw?k#6g{VNQw3$$HpbM@glX_Xx z)IyGvZUt3$J^ZZd6KCB7^E#41FkVGc4S*`u>`<;+DiWJNXq#S?yp^J$u!}E3Y>Eo6 zoETXc;EQ{_n9H+3+_KIva`>A<1s02=)ItWhlmtCE)khSd02xKH7hn%&2!%A;5d z$-qpP$*hy{7yUBck;(WTeUpr`W?gTj4w!!Q?JP78Hjs{sTA2FSvS44?QZBMqkfOk$ zvGOGT>dU@oj7W;c`q-oAqlLHsg!$*ub{oS69eJTB4m!#6}4l{y}y-ieIQAA;Ao_?9{CxWN>f|4f^?*ThzxVx!dvbEiKu@nrJgv zjJc+2a?)^Q+|_Lj*eTL_JW=5OdYrVXz?V^1$c(2)?GBP5ZviTkBKcm5vnb{~BFilM zp^D!;3za;1sg{?~J7J@Rt#66GZX&B~vue?wtTNM_XIz} zJfq^>rXaTmU-KpU^7F+%xo9GLBKG%;z`J+;gWgRrMOwF2(Wfkl2;bTKA`5iu5ZF-1 z?az^IEZGRVmd@q|Nt4SXCI!dSwTQ2=0v}SS+2RXIv}w}kDJuU^FpmQ>5UY>1`_c$xGpZS>`5#y?LDcP-cYcLVR;`542vWKzG;?qsqV>=*8>cTdZ! zc<=V-$yBQ{?M{z1Xzg?_AvIZ|`l>V=-atD{mKzXY@!h|SQ44;ax4WAtuL`>-Qq0?h z$9YN5PfRD}XOap@qK)LAnYN|L$+zUt=N>&WM?Nb0Cq<7pjP7m4G^|6$Jxg!*?EPsr~LQ0R}*7t_9>$o+D&km%m6UnY4LevM;2WsUf6#5#jzNqvZZ!QHI9 ztYs6C>Kg}iHMOjdA`tG&(y~c^ARz@mkv};}e29LLN*za}kzd){V4AN@F%Z$*8nj7Pr)%p;x zaL?jiynw#@hR{yc#%2!*>pTM6U-d%jF?V^`iZ)yiT!9N`3zo@qjXlolXXe49ZItiHJJ` zd|JsT-c}ByWpVkEaa7V`QU>EB6nv;XO;>wv=a;h5xC@#SV3tr7XxxI*gz4N}Ug-xF zD;r7TLbQ~h#cN($i~6iDo1pPHnosUT%2}O!@%1m%mpMP3`B*ZGVg53rIrVD-^!9aM ziGp;APpd@Vrr@a%x({o>u&+akrex|#AZ}z(HlMq{4K&j>wmj4}w;WKoqTH7}f*JPU z-5cK$uc87f!bMTK3im}y3LSql$zXMZI{o;;^-jc|VCEW;bRQt6qS#EQrm3?v#&pO( z;mTIJ?oD#+p8FeW$G>2H3%g`EQ$BVS0MK}B*GQZVBI(^|R_rzx?LR1zi@VlJ;rJS@ z4IHyt6HS#-ja$Z!!bO7a1t`}L-=vqp(^}f&#_kY9W7Kwi_D+?BYCA-Z|8677| zH4wu=p(-=2JDWnzY(GkZzl-rTS;{QayW&Q0y{aO4 z3t1z4^Ilooh|F>&wZWT%9R&H{R@}v0M?8FYU_##_C@W2OkffeLsz+et@)x+cb~Jt0 zlrV1|CL5_R*;v73N70gd`s->l56WURq*)8oR3{X6eqw{rzSi2NEu7aycI+cf?yS+l zqjzSPa|+h>^=|9)A`WwJTr8S$S^SZ-J)tx14`fzX>yBJsLcLY1qXQKh5tabVzV+_= z=L$RyjZQ-w0i$Dla8XtOx0F7PUjL$M%12Xu#nSi$8Fx{q>hM|Q{dei7=A@_j0n>x_ zRARbZQC_Kd>y>h!!$&Ws_Ytg0H~^NMz$Y;~EnaQ39Yq@XYn<`W4_HS*W?cp}uhClx zYt77IX$}U(EK7g$Ql98 z-gA0%?x7`4&MkooQPvy@LD_GPgxiwULUB%yb_2Bi^1sKYto#G}^+=e>{YnU5H>(7< znXDfD@zDIjAkNBPlG7vW(EQ@mB`ZJC6m#b2nnO!W%Pnz4PLC!Wn!hqPzn;^h5r^hK zA}4TZ$I(}YgR6;<|OI3Hcg*; z{5Q|u4QAJI!sHt1?iJ?+P;n#Ox#UbSwB+ReA+IS8oOj;$qo;}r1P!&6H_0zS;&3ab zp73DCZv?k!b?W!-@&##`!0-MlE`F4SxJt3S+DqEBa+7`USHJf^Z8imh{5v z*ntb>ZHj)^S0H9yHT|v&dE&0dpxe3P5aa-hBf@nTC-?%R*TkVRwj$VKsT&8>x2d-{%$#cS}T_C$)A>HJ(+xFu}CAIWgD0;}M7~dP$M4UgB%f}bx)tgdr;)knxKDtkRDo}(A5_$RV zH3CQj$j1@<{Gt#x30qI^SSbEe1tz_ z5_whT(wbNlcJA^BHYB_)dtZow!;~r9GO>B$5a&JVT*a?RQjV{Iy?hOpVr$y zJ?5puypZ(i+p^OYkNzr^;nD$fxctw^D-}CXJl9CSR2*MiKL3>}$oy0?1k*LVk(edP^risMUpir?_9W4w=Qy~3$xDXV3-d`G{cs^vMV6P~VpQU?I8qFTHbi0dhIo-}QtYtU+(qW1|rHX2OBR+gl>o7$dy`q3~ z|KaAedhub3Uf>md=l>`=q+d}r&j%4`!S&oWK;o*1vcVin{E~Zsl3r}3!|#29ODhrU zx9Y7A182$S1lTfAvrdtdZF~#1jgWmQfSRc!p$6i8Y@8Z_Zz!;~qMGdCir2#NgVhmz z$}XaeRp-ERP5oZ1TP4=w<=^A-hyzGsO=MS$<12YJ@H!QaudNOSK5agQb!?f<#!r9D z+8d-R1hnuSXm|3pZs$hSH-;^046pL7BR{hkK{}fPdrgI$@+Je1bcZQ>uaq6Hy_8-K z5%TvHM!=gc+|aMET9D~{oYM*5v$;KN&P{w+L(zY7Zyr34AGt-!cqJ~Z@ZX8Vd@SNF zQYU1kj@}e>>U@S8sT@pYq#s4PyOTg75og$Wg{s2$`AJu3XfIKx(1*;jF!oogtb^Yf z@Sj*7zm(1f|Mgh;qN-N8g;!MO-cRnJrc|uvSXf^_<_((VSG`3vNEm|Fs|sbZ@xaCi z#NUNr(aC)4$Ww@1tt&A;B-JsrR@TTXueY9@RZ^7TQ-zO^!iLtK2Dc!vn=T&8F8={1 zL%QWud4*zM<@=mYB#zvPyqOKszf=_zY>@gc&Z!SK3toL$ z!^<9BLTH23(qv8WpZUz_(ECXDCcPJAbcA0^_h!-I%ipNVYmCOrNHuD56?@P7L~BB8 z9SenUG9**$_f$QHrm#5RpfI4} zbvljcy_T~!lic+Cw>;G=+&5W=-%Q^-OwptJwTr|{(1?N!6l&7r{esi0f2*R_NS8B{ zmDz`E;jCTsx5E^D)GK;n-)PfYQ1DKsaN`}hZ8qN^?L|@;Pb3-X9!lsexnXdXL1i+C zm5}?3XOJMjwi|uIHbPQ>vU^V2w?Fx3(Od*qs#`7g&!bapQ_k8-cgv5ItgSK`B3Bk| z)AcB*H0xbiJ0%|#3jl8`F^PG}KcSS-r%#cUqK@?Bv8Y&!-vWI}04UR!Hw}#MD2X_A zC34A~ljtmpH5KRSt)dq`N8E-9A*e6!M9F!qe)j;1py$$A!CUN`-pS5TBCmZcgi5vE zGM3(QKl~=-+!lkZ8?P^GIj^)DnGl4*2~ypn-WaU(VPu2lD4vPp?J<;V3r#07pwzv* z?2^3kZO^G9$z4oX*8F^OW@>)i=jI_{6CcmXkz}C{1Q4cf+IAPldYt~(J`AqJbeXC>Adg|)wiTTc# zPKXPx`Y<;jZa`nNkeoK~Em{M=ekoBEhwR35G?~*DVUAD7Kt!-(wZgpRfMIk{TfQl?GAguy!&qF}L1rpTc_dWMMvjpw(fB*R?bDz5} z=bn4+Ip?0kkiH!wV>^g91G&x(RN>WbmG|}RL}0F$_nbUy5rL{*4#RXrU*0{AUuF8& z@SYRjfkzwj`w0C8`wu-DAfP4WU(wLf71{1bNoLiIN-gAXc~+z>^{1HQ$K+Qruc&0K zz;sBi)70-GU)JP&yQeidUu1NJyb74y*LbkmjCM2V2cTvrmsAuywjvZ$mS)=CC22zv ztR!hgDrs@|^;sBT6z(|;x|_Vby1*1EWLJzH`5l?W$?FHFxYuV9-1(okwobS2y)a7wCs_TWZ_1-O!%R&GF z+Q2#I4?r+1m)g||Yb_R}qfWd}uakYa$2o5lIBX~Akj0GA5$^r3aARi3!B^EU=F;}M zw}AeW>9UPOMW4Y{tatJ$ow)FjuzhQ8w6&K}^;Sy<7H8%*P(ids&B!6-sIn^SMe4R# zv`E8tSv`#K$Q^crWGmhxl-o@tz$?#H^GgP_4fQm5YKcKRyQgT4VP~(!X~zXF7ncf* zr>gmpT{C#LRCe2I#amqQkE2?0j}Ubag`WaIhiO*@oC|AYuZ}2ihD!j839>)jQa)1S zUsx6ZzQ^gPP|Dukzku)aPSNna_qqQAd|&;-kHPmvDUE9sz=wWbL<9EKxeEod!FyT( z`>RLLhSko>cooO{w2~e*ejmQLGWCM>{tPEh+I-$+T>p=FfU4S#nkY1S>=A0KiY^C@ z^eqH8p&!9Jl5O+VAU@-v5HFG^A{gHg#QHqXqFl-ATw4Is)Bl0h(<@cC27TfKl#$Vw zV1GD|%=xlQP*gqEhTk6vl#Ep1&_$5VPz4OuE2Uz^(ii3XprtMDz?*WerLbE_q}uOZ z51fq`Qr7>0Y4vo6sWcB>yW@iraS!|$qoW;E)iny|#g!2gfh%d?P~LsavAs)=WHnyy zuZ&|%#G)fQQH|gG0z}Te1KKN5-3yquE*J!PE+uhfRl44o`%98UNlZ#Fk$ob1Uq<|D zqV0pSMxgC$%qgM;YX^?Vh5p3A)(X{z5g(w+mItiK1LZm$8_f6M$^DJF^0Eu1-Z`u! z7xK#x&>kM$#i6jm4}$=L1!x zPUKQ)YD45VKibs(qm8*|vFa5VMW(B#Z`|Px$Gup^ZkE{7RO~Q|N~Hy_;<`t})>rne zgWx&J3flRK)G6vjeXaCe<4$?;CYq8Hcv2&$|DCd$9Q`tL=6HY@mBYksCEV`HK_mOa z<9*JFM~L1ApHQq#s!H2m^ls3qJbsXq4}R6N*!Y$vCF1Y2YL zh=FFywj5_b6(4d4l?U(wO-_6AKx=Y;_b)oXJ^HM{V+N`@nDG$(v2E$j09zX8C1nl- zMF9Qz^|#HGlW-){AhROREX?ucXJKJlGOAg@E3}!#EF{Jr&g%r9(}%IxW6ny>iiv3( zFN^K-tHIf55LFh!>KR-<&?-L*0tG7EJ%+l~-cb57p1w+d=C;9yTt?_p^~7tf=%Lg{ zJF=%&h2@Q>ji{(TJ8|uI6?RpgJPhXelV?%cbwk7e>>lUtN2TwJ zoNErJpINxh7+%PmLl0x7-h)KH&z|m3b8h0=_O|)S^FzOP_^C(V<~ZYy=@7QPK0i8` z@znXDqB87zEX)tESUoQ|fL`h^DuPo?kXt>73RKcS*M(HD4{G(%V@%N_>|97Bo;M@c z1+_uj3y<#5LPp|?ca^rzI8;$b+PbaA_eHIXJc!G0?2=H~OMatrKQBY9Tk}jm4rN=N z+QZOFb6Qh|MKa6d=#&?sBl2FAJ6}cVs@wlqg&n*iM6;o+d}nQebfDhK;x)~#!R2|p zswp!b)HIr|MU``ZL1Crv<6cH6^Sr|A;7Pwf;*G0<_tG`f|2I6o zr4n9lc5bktJ$u?@*!ai(RA~=46Ftx$^1Ha#9gF{0IS_09CJ@i?o{+THAAS*^TpiFV}}b4BeZ`e`pLqu+TnLAy_B zhY_n_8LgkU4pXBnZf+eWWU;UH4mk{U=w9;b&?Zh+9qI=cTZd}l-OC^L)8=mG*P5D5 z+hYs0rQwGC*~Y9Vh{oF6fD_Stp1*-x)>(&!O20AY+)X?OZK&v*#_tEyoH46`n2>T% z=u|(X7Uo8Ih{cP|LeaHa>6~E52_SEi$FC6Q>f`)iQhBEZj?51Gx2M4|4{*FT*Sa>( zGg$=PobPNs1bel1H4o0fTIe&Dc528mVq(uSTAqzRfXww!s;EhO_2bvcRWZ?bL+Nh$ zw>5N+nyR`_wZ6MJgTaQ}*ATxU`)&aprIs^`ic4E=JFy8wkSyPlS^oA<(G##nWH)|) z6>~7H-b~m6DhyC8|C~mTt-lL62^MCl-JsnQpyK4T6u<>r#lkC=G1LNvq2>fS4jhDg zJQmYZi|k%VC%qEU-F{b|k~C>Xgc#%G{&Lj`qSmJs#c>K5a8A22$*SP>jpR5^<ag%C?m%mD0-9JiTb;D^U$WLX<>ms+viRUCGn3tK!X1U{$DI? zmXWa!1kyb!a~?r?g)CG9FE-|gQdP7QLVGClVUFL63BQKheK5#MN&ga-SJSXA-*`tJpVR?Ui9yv^m8~}tBRy(J$ z>0e>I41xZ6u&BAJ=v|)rSNlKbQGe-5ktXv3y2`(cW1Xj7yG{HJW{F3RL-R1mKHMJ} zpBF6p-k2>y%qln&ew=Kj2O>Don9nn5WB$(`Yrr2bi%nSdJpqqkvs6KA@g+GBVUq9@&X7*3Gr{;n`)mr_ue#j+So!}z^b zw#h?+vVgPnAlbM25SiF`+tj?SR7SgpLtS8 zKq@JA^%D0UE=%jI?E}YQ7iuX}+02n*>7(>M3_8IXd_nPsDl~#ho2T|I-eAl}ldjqC zU&D9Zmtw?WqIHxFgk<}0B!X713fA>$jph?2e|EGlA(;``lVbAPB2Eglsubp)Lp^BR zw*q=n+ni0ER0{P-ccduKyi@^ORZS-bm*-k4Y}}#V`y|G|*;c^Xs_K{4i&syK{@jQ2 zXV8l+jdEefg~_ry$32o=icy-F7;_ntt>M{-i;E4oA;%dreN0W2oyV&sm<sof?qLtPgo#=~uV2Z*DW|Yhy6)F!Vv(m4=&f&fB9ha;* z)c-JA%FXybQku3akHOjjYw7<&7QbjeEH->oa7Z4{5ZMN&%hnJ(1UGXp+hvx%Go#m# z?3=G(J@kH1-k0sWWkoshdC59yTGgV z*&*4}o`eS)w)Tl-PdO8fSz^CWga%gt2;rhVLI0b)cmYo)w@TIc@57ib1WUD+l^o8I z>|P4)1p9t*G@Q4@t$CWae%B?Vm9y;iuS#|Nr&*gEvhcvd~es?h{x@^ ztE1b&ngKe3vu(G4-=L-_C(s{xYGuTB&|9X9Cx^N2-w6}Tj^zyr7H}$+(v8^g$#Uls z<89#CYVY=N&*%6_x%6(kS34Qx?w;KiMGxafMk9J3>L;gypW+S0t6QO!R?u0kmhsfZ zqkYbxUfkL^9KjKu%j+}fXg5#SN6834Q_Rl66Bl*)-0$d(Y{7Yy3MwC1V#%Vlp@DDt zbEEVPLV4j7`FM9|@;nm$dO-MBVhZ@rM5nGDcSxS@{xKVO7BJ!1%(O>O5MONCG)6sf z0yTdDsfm2CiEnvQoP19_(`3uYTF;gQ&Hvk_*xyoFB3xJ_+y~~NL^>*gLCHY>WFQ~` z$GG>)E_f``K-NMz*^D`Ps?pn_1m6m_e3l(-`9isEjD1a;^3GbOgzPxAWciJd{%YCY zi(@Vf^!hPAJpvwA^t)W+zUFB22|Ry_Nq;fM&&$!}Ji!jObY?+<9aPHed}=c0{ElSY zBzZZkWpG~=;{tl{2;au-%{zJpOP50eTI;75hZ5+o!U?g~z!eEbxA$V(gboG^t`EXx zZFbxB^yX_P{K6j1bLwg;9Xj=fx?dY{QPR-!@BhY` z`Xo6mp1-zux*u5$6DdM{)iV&77}avCrdf3z53Tl$+@4=1kf{ef;y~J6<`1M%dWP&@h8Ii3mkD+ zKdw*+0vyRLxXIe#{*5?$_`rqp$bpYUv11f+oS%Cvixs?g2VP8TO76k{gLl^IlqzdE z{0!{Ue@?2lP>#n6X@$!Z=a4mgpi_QAI}ed#g(7!GqGwgsI<-=o+tnrfLIH-t77dOY z=sJQcJbt&HUlg_EtaQ%159i^x6^`&3v)_}Bbep^rN#xoiQ(d%DsJyKd2}Zj>SpAtw zLY!qHc!k;e&m)xFU?d`@g~D~`aEp-}oVNQ6Raagqku~dZB1lL)uJNVk5ang}Iw)Q+>_e@KCvohfAFk#+6V7jzE{wkr0!(8y z9xt0&aPs`iobi6Kja3;~C=8CEe>Y0tf`D)qP#G{{SI|RgOXk_MnZWRGWjd@DWA-rV zJXk52oa{<#Wr55YmLOOOJBvjz#|HyuRA^QUL zR$I284E#DDppeo3j1H@{r#Ex1R22geXP>Je!g!{#7D=V^?pfXrtt>ENq7-6ZH9>Vi zFS+r|RkbkGt_nEcBjYm1UtBA1cQHmLX1v5lIbCpebYUXan_4^AUnx^qmHpivawwm!o&Hl6hdFY8mOtm8>YgnA-c0#3%SbIz0@17_~;GSWUX>P z!v%%M>S@A+WE5T2ljq^OTUJv8`GvZNanrJ+pw%~~Vw5Sl@Q+E{?iMHaBp;6>dapwh zz?hF1<;#}sxxL@Vcp#KMf|?*VEu9;(KGzxYy+G@5p?GC`E1Qx^9;N#2p1@Qn_*Ax? z+>;rC27rY^61hk6t>L%(`^y9EJAGhi`QiNg{txoQ6S2+s-^j;j(1>YYnwyk{V-pL5 zOXnb6{52`cfK%97%aiE%`C#GJsN6i|Pcfkmkdrr2>J}*_{5Bv^o?MFo7@{Xhv{1!f z^ffyA5{b^&(Msz@-d?vDcP}ehANe!IOi7nplPZQIgv8KFi8>@1rE?cIm#jD9lbLpo zM^V8xo%P?cL@f^7kK4+!P4Pw{#&LYoEC2YDcq6vn?x0vvYbNT*pnnWfIn zL&@7axM&7F4W76mwxK@YKCgD-VZj9|5;`_`;<^g|GN@MTw}OWg7vcI4czdS~huBE< zFsiwi8+nCXzaFB4!Dt6o>4bt6bBSh=BeqE1GE3Wy_*q1Tu;_M&NDz_773~O>ereos zoP4cX)Y#C_uy1?Ij$Wa}ghLNUis$^~^wgfg!acddiF!_x9XQkzf!Fw(Y0X-}K2TnI zU1u~Am`i8ZT05%zu>D-;-2G#bvV@1C_p}vG3bf0B@_I{cPxwR56p}H+@i^m8(Kjq# z;lV7QFeMdKMNTE^xNcEKT;@Up8dRRtaW_a-?I#^8#2B%+5i4S-FFMBJaF-KMB7aF_ z8edBCI+gr@PBx`XBIgrYRC-h(TORO#gN#P87C9fFIZY=7cyJn;ZUOmaSt_tif`8VT zx6w5&0Tuq>tFnd_C$3;|>H}>**ZUd%uWzYd+)sLiPDIoFd(v;|Cz_LRWWv_6x_^ke z9|Td*_-(V>PY4R}c?GX4Fm{!GR%NoC6nN*WlEJ0!E<*$3E+@I|v-#iN+E zw^n~pMtuuX8QS!{|GkXVkaanX+504m(rNnxbjo})x?;*RDwb>jZ3 z^A@v4FDlzF^31Q9^%t(5GRlW|1D@|XqN>FvkJyilexJj03vdQJ*NNGQ>TjV3dh-7` zkrE8=!9UZpQg+~iTqG0cDFoBZ< LhULo{v<|ajgR|i3utzyGn;o2330;9{`Ol1I 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 y3gPdP0d*sS6aM^U$Wibsrh?QtCf690hp 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∨(XRLD~Em8(KFDZkSS&u=4R%{9M>7FqUbuY0E#p5Laz^EeY{GMNUe&-aP-wO-RZ^!uZdx@jd z@8QN(Gj#c)(+?SO=&r+d>vc}1I-$_sk9U2+mV3~}uI%J@(De^Ihc9IB3cZNh5r9_T zzat?18pc-thCmm5m(e2!;2wC8tpqIQ{T^ii?!n0F_ZgD((W?xlP%R8B#a_soIy_tm zU3?q%Mds-6Fn0UH!>$C*uR(0)LdcXmr4(~=TcG3pTv$qdR5>gC^yPnRp41ks=z%Ta=oX~ z2D-|?D&zSpY;$s=GH~a|#qVf!8hv0qXgnIEK9HLvHI}Cjgl$YyGmi@rIS@>stxhT2@7M%wz&IG6f2bNw45ovYc zFB8;(J1&;k-h`aeYXobRoE(kd^c0QYj*qw@q)`gGIze1G^2`->>(peO;2xELlhtX| zf=3}Or4`iTaNfre&wl;jo(m<~lhtWdgse$H z<6gJjNkuvndO$Wiw7E9%dc0b;@q*A1PQz5&0C^wF@K)qeGh(TTBvTko8naJ*hKr3+~ghTdh5hJ?RVM5{nZ!W z{^CxuciVXERuqS$;@x6yz%RAyd9UB#HU2lNsJ4?`PjxSgThpwysAyYXkeo{`R%(Xm zvU{}(X^Y7U?XN#<5U%oC9WeJhvxZYEZ9Tx+Dyr`-(gNforP&;gLo4307qyzL2w$gF zYj3=pxsy#*_x^AvzqZOORF%-$%El_&4b->sW&br}Uav)7w?Chn*ZYc+*Ynfn^?3ey z75x`1uPMotE!(G_Q)bU}L<@B7oqc<^b7DKy@jKYDTE9Spi`rkP3t11+vbql5Q0C3? z#b2bD=EG7wWLCidJ8C`4_s%!*4!GNaSMa&I)An`0Yvjgm<8C`}h_3UkqrCD57n1)z z{+=-cedd}`W!vU#=x{TK^$A6{@z_C(EGhXlVevsTZ#pLAH*vo@f?cuM+}a*Fhz5YG zl7~V7#8F>~n}+mb?XGL_j2HFpi{*I6iw5Pj#89lYixIVg#?rlPKR!TkGcL)Wmof)Tmu{d&OmTYYn!4 zIqMoZWUu88@Y+jcv-%aa3+rrFztUN|>lJMDf#C84aL?x(5xdpk#^3O0=jPc6ikpMi zlyNKhFn;|E;he*8g4Um$?Q#`V1>PVXPhDoWHyCeRj?WBu3J#BkHeXYQx##4O!w7mZ zXQ2r3|3!k3yv5V&hTfQ99UdW_bL1|)fqpn>yoNOfQg)cLWo`~*GaU%!MgwNwc=fg6 zH#UC;C$Jk$>=3ueK3~Lm5XDrx>tot5+-GVugk%ljhJ#8YID9;`xq@Px9kD;n&Gc2~ z`|xknJiB(+TJtPChRhG*-v#Dh;@@k{$=0|rK|m47 zygDZ{gsDo-hmf9E^}++Z)OG{gLc=Gpei;aDz6u8HW(8~#K1vg{c2kTR-gGwIU89CK z;rJX@L=DFCko37UOMs-qo7*7}Ncso@nZk78vsRNUqs*oXzlWst9=sBDq@oc9;=4{l zkYSh&pfc2aEjaw9;C;fITTRLsHu&rul@0zFqCO9zW`$m5PQ|}bb0$TNMGHiYX(mJs z^HqrYOjp#iTv4A3m#fN8m8i?#C8Fl!UDa%eYq`md`~~J;P^KTiW7M31e;1n{;y)i| zF?uKKgxnAN@Y=`J;ZFoNEVW zU_p&~c!`0nZ-ykT{%UkWHIoq_0&7Dvh6&zgRQDzXcLHVrceAmFtl!WK;0gR4dTmDS zuKSG_BE}zsc65?4{MzO!1i*??j#C>!yXGteGV&;nf!Nnx;4=w0E+zrTd6q=m-TcCD zPExyTkk*H|c@s6c{-)vMm)p@m(elBD@jV~s{)R8g^ z8oyWH*I4MDzYA^5VSKo#5(8fCt_%AxRGTmoVd__&3>lBZiuxOHX11PT%rFXl0MGMi zfUcT#FAYr|$Nw-MQLp_+W`%7I!^UsaD1xu&+O0pp z*N5=6n=AT(NyoTu~FliZ`L|g){tl@EFTZrjVL=`xrJID#0T>#`f$MS5|%2WcnSaA zkGE)HsAQ^M8b5bxo|7{gR_j_R?XM3xqeWg)*-g2GDG+!%@`4>dWbBAj1m0H>Zog$ zs+H~i$dk+)biWa7krRAUFKL!JqB;-V(4_MSadv|OM>mt2yLn#jo=a_K@Riumm<6Pq ztu2bjHS9p_#-E_)VlF7`*YV#0ws!P8QgG!gxGRuPHpL@M9(uA5!n9E}f7NPW5!(1Y z_;6xEyKnL1aSrq7qWSYXxeu%2)yk_QlEzh=^fXaz3}r2 z{zIR{W{n;MU6Zs&-MsO+uVZv`w$@yLK#()(*o`CjyNKqeOrB&8>3RV#pOZ|YEB_>O zk5M*kFTXe;TS#I`p29j$(D3^+h1pRp^kOKYGVd}HU8+-qgEVr=n zdf4u04H_qu#95!}e+-XOA)&qJiUU%89Uj(WLx12v*mwapgYQKjD1w)6+tHKQ^mZDHh6#XEk6 zVAq-z$o~tq1FOt{cv~Jc9;To{rR$+BM@Kjer7Px)eYa{$u8I4uRxWiNOiIsix&MG7I$Qwy_! z#bz%*S~UDROrZzXn%L9e`U_uN$bt@_yu=r0GFM>*1?Bxzy%^(qr^_C5CkRHs9k}^C zm(|!F(QHHJT#!NL85U%S7-r(>7i72txQcCziR;E$8ZON2Y+FWLmsKn<1I`Lqni1Dy zQEbhrRWPcCvmmo?m`t%lX@scU#OXZpt&mJg6eB??d@l? z`e0>-MUY;ZJ*ih_Pon*z&0=K+E4C_}lb>n~zaBAO+FXb5ry-cLaXbnZ+h-wsITmjx z@5p3Xp>cI)hXO{o@uIfe#)^x^FX&LW=sls=kS2iyWL~5NHazF1aHCyZ$fT1kHjjYv5F{)s5xRi5Sfh&FZM=udl#Gx zMTUPLX?Y+DE98m8(b;>W%kGPuy*D!aY@}rvG?9pP22dfDAW1|fJ`kOK|NK~0yYzV|Rlc?T>#J(}&x01Ewx5&q{zWy|mBZhz z6Zr3V1QYDq{-t$9QsA)S92`4zx>c!lJ}w2T8Yl^CCppTkjlVewR4hh%03?8?z#dr? zbsfumYi)^G}@?F<=HH$Eu|vp!J{L`4LHg7GXGBHE-rIuRhBqAq=k ztO{M#93H?5?|fUQcfQSG9B>aL{%y^tz(p&xd^orlNdRxnF< zX?yb=@{`1)C`xwz8weCd&5pl(G_L`DfuBDi`%~agR0v)pbR}vTy_`}bp+^Q-nj<9)Ob z*LZ(U{DUgdov8Y-en}%Ml8JmIOHEqb>7i1>v`t}OY%H(1M|fEqnVa>G_ZEgKbo0oqJhm+ z6YU*gNCiFGz)WBHrq+mF7#*iZ3rnkJpSQHtVis;t#ayDIlhvX}YTya(wb+5{_=0t> z2X)UyJYZKC5#1=S@tCIa;cX{w^q?`603CwEuVGpzOa~}>26zY?yRC@Acw#=zGut&6 za@Hh^&%j1M;ek7VdeY?H%%dhvhQ>VXzXJO=*%=S%=1o{JEjm-CP2f2oN%N{9Xe{{$ zdS^k}=V`*jMVLB~@Gv_>4F%FGn^;MNhYS;^ZcdzjuK*8I)Cz_Zr%hF|oTg0f-@Yfb{^I`59^$VYcXBYwqj!DwTa%;ps)@$ zUbN7NPr#`r*Yai?-T>{OY`mafZHk}IVMARa3uBnAa1Y_{cKppceryt>oJ?Kh#=DtI znPqwQA)0TIHUAm`QN-+5dTmc4%dsApV5deB&>1Lk+ z(FT0)6&WcJ*K;J>V$uPl&uW$z3qEUkh0L|-3+r4gD48TxSSjasHy(4+i@D-z2O+`o zAwuF#4RF&QI3S3??m4VqH3(ME_DO`ndGtY6=~2|9b2}*Ap&* z-%az4`?0`k#_N@B4ql?aw+jEgg9JoYAvP2r6(7QHZS$GLFg3uU7><%bSefnc_C$y{WG_wIzLdB}DuSKuw z>~gzwi9YM&Vo*-PVj^53bH7{(dB8A(;Dr8_Q2F)uo(aLpGF4Wk=xqDf{}Fvj4TLyT zr~r7gbQWau9_rK~JZdwO@DecHRjJjt_i_xdK3DDoOk}|(r1KoK&Lv)gV!|FrX0}8+ z5vQk1Ke`9^1Uf zIo@NZ_lV1*fZt!h%cJT+xCB@#qA?Ws1xQr$0(XUW>e>4GMaeC!F1@nP-oxC*yVs#=CL+bWj8#p}*{R8SY z`jHe_ANT6EJgT}akE(9VqpI8TsOq*n`s?-_r)~=-L)Y!^feVo=>+=)p_DjXA+ZVaD zmT`=uZaaK3wf;c=kww1CzO3Y{5F4jgzLx_*@eY+Q_g^+1lND4NWXEb>?|aazq4KC| zs646~Dvzp$%A=~G^60Oj4NeUeHK4AcvfjgX%WB+b4$_5mz35GI?sq$JrFufG+mP6! zhH!hJRWm)|6ZWxgx5{{X(6>T;hD{mv-mVkgPC}1M8KK9O<2&B^i1Yab-UqIggIP(G zybtfO*?VmB9_M(Eo!(;vkM!OXg%*+z9H~SNsb%#j(14`Rt-~Hs+1sT2!o(Fi<=2*f z`OO)#{7}MUm0zTQ^2@*rfvV{A=|_{5qdfsCwP5+vzpxrlSRQyPSW(Kt(!x`xQuC_R zWmJA=M@^Vhzc~N>$)|hNMcz<5b%R4V%92AfjpbhdYmrlmRDxPy*y7JCTsGz*e%{wnW zdFQ1UJ{EG@LMj@SSQD5er$O`dFjhL zFRSy;%NqE|uUys^l$S5US2Id|MLD)YIxD#sg6%hGqhM2gD_@QBRRB8xFyJH;<2KH6 z=ul29hBz`}Zo~DA;xoN>B4sT#2^OrNV_$cj_7cKxmVk|*O*uPlq?A@?q>Vz%g5y4>8Pm~QApfKhy8wwj- zQzK3P6A=K83wv3^i7)Bb;P+*=lh5}O=s=`J!iw@I0sgp*BnP~o{bt`h|OVG8+nN&M)8w*QmG6z-? z{@vS!4LR-+&EqE4qF(&tk};NQ4c)-fHIP2fjB30%&+GZUItLQeqM%BJ9=t!Xe%eXs!k$t6JffExC~v$8MU3wO55oeXnr-pKvTt> zs_^_zHL?O;4QPg6;ko6!94c6f&eJ)M?b>7ZKqs4qpCK2vbH~&HI#4+zYDz4WZ!iZF ze(g*6wLjt4!GvE&6Mn_@F9i6aJl12;eS^L?o;$5Km=YLvTX}JO{D1io4{dlOoCBsz z5j7t9qtb8CDFT%aGvTO5=inL3beuvPQ-!q2Y+wLMEA>vk^J_?(6we$0PpE!+=N6BrPtp4YRZ<5Of?1(l z61EJKS}Oj9|LWUvK8ot<)?1ugX^J<2OhUQPh1GTtf1}I(lS)ZxAr?$`GwSj;nfvH1 zNu4jv$zNI7j!+G$^k<7usw2j5oW9TAFB+_uBBWW|A88q4GT3tAC9`gynHSx@r~h>1 z0mbnky!-eaQbEb@Sea24FX|1iR~RGf5Bu2YBg-d(^m7;-9P!*YE>{`o?n4`9S`bjDeuB-jRIkR zyaZ+LIuZ;5ruIwme-Xbon5)?w=>5(nn4C7i98d26Yqd~TAm4AGxAKv2=tl1&&D%ZHz7^=Iy@6PCX{dD`ScaF{VfSN z6DabcLL!M`m#kuU3&`r`THSD#21>*|gn~*;;jPqGIYG`S+Nq-u&Nt!^yB%{DY z17wp37D_>eB8LhU+N8GsTy^e`XY63RvAB^~6YxybVi^RP z;iMhP;zIoEVm441UFt*~Jj{bjcFab)#fZJU!+`nAR3+R)vhpN`=Q(&}Rs7(SG4JEf~?B-jCvZU_Fo)~v@dIogFRHbbs-aj>rc zssQS1CGwV*7n8Si1Mec~LORRM=@2gsMxy5V6fCVpLOeJJ!Q!MG#5tFuzXFe|%unLq zt1D4qYG6b{nabLV3J;tJMH%oID5{%W2$V*$;AmWe*4IwpQN(y`7>tPaU47P(yoI}CrOv}js(x~9f0fR_K4cw*UFQibXX7C&7Vp zKcA#y4|=~d1W_WDpIs!RsQ@K7parIhKuG{25p6qxB>gLSaV3Bx_!znYp^(rYT634( z_zj+>t#Mc+4@Pa?ZP{{|SO8oSi3SLb+XeXV)6nnre}am-&z-=}Pf(wBwImlweg;as zPuD1f#joXzyrPW2#787 zG9cxv%=4gpJhR&XWC|&uSEZ6vDKMT18Bd~O{Q!zWhzf~6(%15kB$0AzXHL$?Pn8KK zmNEuS!DBawdK3S^4sNPMSjVIgNCBQY63Wzz5){dGAPtg0$+r0DViKLKG~SHFiU-kt zG1V}wLo%6SQmB4_oFTdR`8gb=PfT!#37#7^9!^QKPsoBZVc-r;qaN1=y|2tkHmD(z z?6n^$W7@rRxrt&nC|+P)BqvC)^FS%9t zYPSl1X_QHaR;m9v{C5OFehD{a2?66_KLi5=jPF7r`+o2VP!*INDPs986N8G3o5-F4 z_Cnzy`qc+gk)Nl$sv*1YA@OTXszlwI45u$a!hp3Iz+gO!8^C^4rfS92l<=XxmPe54 zPXs8dwamm9nH!Z6<6$P3$@VANgLWVZNN@WT#ENMpQ_hH(FoeuEOm|YE70C!yLM2*N ziJj(km}N8B%mlni%lD@n?^-gYy|T~RAvV@X_2`130rLo|1u870^0}Iz@vE@$th7aj z#vSbTesq^2Reb*?kV95|he4d(2OI|_TM6-?4?*B$XTk+Vfh_zJQ_U;{jZsuzkFtU4 zjDT;)yZ38Gg}lLV7jAhL-qCp|(gw3=yh|HPz+Rj8-zvtohI^3dnC$yrVZJ^e`2%?d){w_Y?S@s5kG(rT8 z41l0W(MFbG_J05qYM_)RAP1}(9#P{7KT(5+)zb{kXm@{!lP72?oSYh{#}qLqr(nxi z3Zy|!hq(vYyaxSLw!I3O`@=9b5?hPo?--QB)-~)V=AdBDlB@i*R8is2fz2r*2LQ^> zwhtgUjWAK@06jI{jP4O+kCDfRpCe48&pH=t41f|fNds#OVjVzp&^c9CsjB0@zzVz% zhh+AsQlhlE=@Au}Mo6s*g2T_^)wNs;4BR3O1~L$)Mi-hbDeVi)HEOmxutTaXGLmUI zkZnT=ZDx!W0cP`Pr~?o>R|E?20H8*iSsH|%X;DCuhFTSXqk-U9ZT&2btZRchciqKx zLBx27$GnG8`)j`DEe$pqWzZU6bpWZSJ=i2`FG`)Y90FV=3=Q1GMw~_nQ!x?hTKo&5 z2Bb|UKF>B|4WUJTi*!7$)Y+aXb)fYh(JKYkdo>aDu}soRDx1`~Qg~NM9gR=e8^VM z6IT!ilUEQ}0JtlN?Q)-hgVjjWQ#p$W985;v!liQ)=H`B zJB#g|3Rs?DPc>;d0p=%a_+zNyR9B#aTeEBXVfnPFW$fzhEGWu-rqu45!hfE~)gP{g z;wdM-MiYug_!?&`Fh(8t8q}<%<7@ES_-p@7Yi?8c8shwzIA7rl29qWM4vX_o;7mmz z)8}q?c>44)_!_^s4RNDznj*2e<>LlyL@Ub+C2T||!Pc=*#76WIEa?hjY-rv+&T|xz zuK}(=0$-y-+G_564f=OZWYTXj`5Fw{7v) zEM|7zLcYdj-*JiuXC{jRqvTOGo5wL4vbVkZA;HPWI29O(A zpKPjQC|E52ds*@{C};`5BWhn&j>5sdWHP{Gqoi16E4Xn;C;uXqDV=ncH>`t@fxv8E z)VQar9Cv}0(^t^O5}L^n8e)b?95xl^8^6uQ`bf=y$NHebq`n{i^z%Nh$qu~u?x_Y| zxb|Vb^U4`{C&lM|e38ee91E{)CEJ)mdlxVADQKJ zN_ZbBS+zdr*u*a)YSajY;ayE14 zedxk;E#OfRbL4%fIFqYUn0H3{Dp7jghmJM5sioMyr|FM(%lM(}cir*hUPbrycprcB zPoi_Uro{W$40&a>38p~BCYYmN>iCzNypP!Ug3mGybl5TO220AHakz(OVAuk6iVcxod0vd84W} z|GXu!K=R02A`c|jyydQ|_2-R>+Whlo7F=%Uz-Rty?>5Fq2`a8e7PYrOZ|4=1w8? zN@9uRk+(#iNUr6!q@cVlr7xF{lxsh^oW2Sww?6pHzuZwRhag-5yxJ=1Lx6$I?@Utqkm2I6FlmJ*j^%?@db| zkuRzfedR(RVOD!+^yU&s1U^FY2m{-Ax7s;zQzD&TXSLdW5fn*a1JZ=EAOl^U8bN}6 zn2Ax`KhD#71M_+!HwHHjG8o*CpfDtX2#)H(LmPCX6C?t)uOnBqA)9+H;7h&nBimL% zwZlV$N1Agc8s8=BXB4$$5)AjC7$vpjtRx+*pIVaa83uI@cDc%UexBU{D_dpCEywqG zbkA=Iti1a*vGJhsXwU$8Ik16-q%O6D2>s2l1;%bzbH?2;3+HKoDABBvE?`Q8U4osl znUEKE^yUeKqg)FFn~_WLa_Jf+A1!FLStgQ&={?T1teQac?Dy#HvqS;wGFF;JAFkOC zIZ?Sx(cso95mPfcJw-F=H*QYx59Op{Hdn#c{R$kTNQ&O}Gft9=2=^;N#<;5z(=;Vy z;ZGc{M^zC?$>Jof4HmEuxr4paZ>#xy#Dq&gQ zqWUdAKP9;m0+&McxI#t0toSLlnD_I7y04<+)>q5D2@7wfUiZ_YmG+pmx7+w5%)&nm z|L(O~^@;eD^z}DL{c%F|y-;0Bu^Bytvf)i%dsB4Bu6-?W9q$xg%H>b_wrkS>IsW+_ z59Dz7!*eU2w-+zv)+e(U&vDJd__O1s9J$uF6MhuqMj|ieC>R>4jF5LJFXf^Ckx>@p zrTpr-bh3E&@KXMCECVkkPkzXr|4A`s=7-z@_q_Qb|7DCoFNZtrC+4UF55dpe)#vcH zz=tXEL$K1oDXaAS5H+BClm3GEA<2Oh$`4WDXnu&;g1iP~K>qv?hLdCza=Q5;Dl5K? z_AyTjX5fdU29)urU^ae;3dSqvaqvTOknXAGholN+tW$yS7U{we<&^S6k|mpX`Y%_0 zh^`_oKLl;rIr^6~KSZS@xyFX6j>w%Kq7&k`SwTjHh4dFXD|D`}8;7~zj=dna;`*B|(xEruk0+Yksj)yg)_Re#afAB?ak>dfB z9-MjsfNB3O9-e{9>p}dT7r=v$H3Hwb_nz>G!+jNNG*HCHy13>4W58faOai~+45jmc zmawno4@iJu7~Hu3ps^_`3xHkhyq$gtyg=|vc|ihlg0tKR2}l`r@f5U2NWW+vp(6Vb zJpd}n)I)3b14S44Pbb|+h(`fSXAQUp;EX^NOgH{}208tPyqPuR&8#GNMCS$h0Q_f7 zInxgC2>zrO{|+TWNUa{4h4*^65#|C3{|E)f+++fdWGI7PW(l#bAy1|k7i^+T)5)L3 zj>8n^@gX8{xg?r%qSdUx2tAuPqvDJ=d;9)YDEYc>xwo!41jHeaYL5LY} z77!31Bv1pR22mBfLyAo39epjY0ACU|ey_sR6$s=JBpkW<9;1~+;~&ZCde)#{;ul&m zD%uxwO8$09K9devf3=3@{7Ka3@>L?c1fQ=Yy96gLyu$FOx3A?*Ng1kwH0K>cC4o1j za3$-CE{M7Ic99A`#tu`<&*8$Z)!HtH^pT5?AQz*6L#f1~Mqg&{^yOmhdr`%8HbN~= z!~0UwnY>*5PPGEXUV*dJB+V@W&E?uVN`JB$BsN z;0{6cn`Xt0LMw3&rO2@x>sjHOAkG%#^4qM1q-oRxVW@IS<_SpcO1Ug~CiX29_<;4fNcR*kTWT60%z{t`dFnpssg-1l9KcMSAp!3ewwM0M8x} zFymo0XK~plj|zk1n|;=Y=h=-0PV>xWs%rZ`oc=%$sV5MPOFMB0C?rC33GW0<6MO*b zNuM=^Wg>V)t&?_?&JGVnmxmN72@yp1kkcV}4yVBNF{(WmvLKM(tIDzKGL@3`?`5(0 z(os8<7}BhMSW00d4Lvb4wIekwEP&8;<0jE$fMO1;6ct+Xtg>Q(nTSe>;-2IbR0_&z za^_Q4_JXOZkhtw4a1;eh5lD(Iq_t8=;EPKk$to#LA#n>QxsZrV8M}}Ir>>B)qgCEv zg_Mq|B1M#hR8i$5Kow{ISRdPS&?;)vhO`ykauV7H8qU>~s^>$~2?4pNi#wUZf?iu% z8phO1rHTnAC|Rnq7{h>#CIpyc9w-(D1cgYt^;kv}3kWRJu&I*<#ge`a2|i4%%!pzE z`NNN5fz<#8x*LSWlBtucGlrk-3tDyQAS|^rHlPJ)J_odV`SVwXH9$YZ9)w3Z_0N#$d;bJvOXo41pdn3!MSk$%K!O3)TfHSQaNt?N=;><^pzT1 zo>wS*rRI_X*()0${8PeT0rowCzfy}s$RR6t{tEp&{1y5wCVz!tyZjXfo)dp1IYou= zSAO_CYUi1Utbm%P?{#}W`k^_Gw@jift5bporKocB( z9j1L}&R=$bmVCrQcee~;jv`i%#EY&A;Gc!$kgl!_*^R(tm^b6^MaGL_=+byIjvS9b zz0>$_u+m&|0-6QP$wKzxi{*}-nvgY<3M*9JIOue{Bcq7z-wbSnjP0 zFb+lm5~dqP(0EZ<(_p#i#sUv1u~dburC7F5FC4fLA1thj8v9kKE6OF|i0TBQhFe3> zILOFCR#!b#C^(`0;h^y{KB@xY;vxoO01a+#M+lgyGJa$a_s_{U;H)DGCG;xV6X(8(=_Ec*ZD@uU1#nT)Xicgwtg&{s@-wjW>slV+-wd zBe;#hTGR%g3#+i8`yS%PwJ3-bZ`PfVtKXEUmIOk^VFQ9%S81(*c6aqCSgF*boMfW8 zyD72hNI17{ycybs@4*8_!lVTxJ1bz3+4vv$y}De28x0$8KsARKO~^*4wI&3u_(#K3 zF?F=da$odeARHdX%JpZ=y77F-5EV?w7`4{)j2xOveGFpIF*T{sU%(rfV?k%M4l1yY z_K>v_mUu`9wG(sgdKHQ2GwZ(|9C-|{e+>7Y6R@rYI{aBgV%(>crGbX9@j8rim*}_< zs@<^xy#vaB-Rnrgan2g`96Zb}Rm*+|RTe@pG9>$1L~v zoL2sc>XEe4Qr2R*@=ua|=EFZxezigpvF6D?p?ANj3)3C4P8t71rB>^=MMin>Pf|SR z!Szsny~4?tf09{Fr-Xl!lGS|pCn=uadO2ZgQgr@FayE14pXkDL`6sA|Ir2|boXOQF zH~xu^)wLzjO)YiuQ7Dh&TmLL;{u2Kr4@Sgz_$MFLyqOaJWHW~0+?X6$<(-AkahGDv zl=vrk)a`uuC(ATnro=zVy)KvdCkcp+9`pcEHx8+bT3si+orIbCR&)_qhG4Re|8v)q zk?W7GR>6Rw(Yg?-zB(LD<{c!{#S}y=NWN#hz@VzF^#SarPlKL{>M4F_cR+dhEU$a3 z|2mXsP)AY2SAP>D#m#&j-!n$6_0X^$3>o{at{SLVt1w;dga(wV#hw5Yh=+x+cx{CK z&#ZG&sWp<4Qa7PGo%PoGCMFOO8i!N@@wt;MgX%rl9h%#%^(O9nYGAsYG^(#fr&oUy zBd(#QusLiT#3A#jv5)Dpx?17VNj-4B34{=9to5Bt9Mg)Jwft}ulO)hdT;t8w`VbQ* z`OKO?qzWlnGD@ZB9BWO4(n1blDRz(8P<4+@`Jj#7@A242K!5XyvT>=^6E!3E}f38hFFn)`Js4RNz z1A1Ft6GbtqRIV7MR&{lywGy}cQdLa7ICa}dR0|qtyIo3& zN_*Vrh000oFfNM2#aVv^1;tGpQ0*xx-rFd*W$lD9&Bu&Uer+5>pe%6Mep%n9Y6DCB zIs7_gz&Q0egs=UuGW`dV$HWH3+iKBU!y5-C1VaV!3MBbOd73<$_j)xb4RC zVGkRSBzK5RnB!A_4@ceWV{-NAtVcpw|D)tY~--gZEFFqhE|+~1C{t~)X(5?otNI@_*IEC zQ~L=Qq}gsgADVbngaAXAD7@0{2vS9l_e^ex7EB@Q$Agljjy6dED<;}D(!ta_Y3DY= zZFl24q`KhL?^9`XQy((!lO$U|{yAKj5hmVAxnu$<&64;AB>pJ8hV8V8mn-9(98liK z!&CA(#h+F55IL*2bz2J5GBO*Lf#IWeGr`{u;3KbgzoI`xT@D*B z@ou>qOSJ;tK@STbVAlUHe8aBvMch?wgkm*jbXmZ(epmx{+#y#JHtz3UHWaF;F<}}S zG9JcW8v?*a4~CQ|#+VQ`MC-!_uPnB7c<|O}91h!C#4Iv6^cv2s56NZ*R9%na_l)4i z-<(wI?}_w};|U$p<{^5Kf-k5$u_sbrfm(;aF5u=v_P{1FFkayIff!&D6|2k!-hYii zVaMsE?@k0JhD=!k3so#O8}MHpOva&*n-qmy*bU)--Nya8Q^R)4hgG7~jdxnZ;NNb+ zdHl(t*h*6{8nLgl>xr!og<|uThhjIeX@_F#1F@S}XgCM(KK%SPYaEQkYFXjJ#u1n& z;W$J4uGmd?!$B(dkI*gpnHWkdl2)sSTWZO~s8mfGV~s=W^)oS2{40gkS%`KTdh@8= zs{Ol6jsz%%@}8`e300t6)ew`8ZM>y=jN**l#u^IQVN&yT_Ps0yk}_iJBaq(;;zS@r z_HbHq>#JfnvCE+FAV;=Dm2HjyM{<>%!#RHEN)9rEb;8#SE6eQ>LNOsHu-0P>de#;9jft**bjIbj3R*?)9-2}e;E)9@^| z;kE2Q&bRIc4mr5H3Q~;7E@TAziKJk7zZNF^T9WW9+P7Ufh&L`5fagS-;`i}-0xT5h6ya7E{)X(DOSy2_hv)grhH>~Q zVhy8{$6_)vdw=A|o^{K9v2Gcn$6FZy`bKBX$pH5A-Pyj6?vRgarYC%LF!`(9c#(De zdK4e1B1+hATA+8-=$x^9GVv^Wm(XWr`cH8z2LM=7pKp z8^F%~uOkoSQ*vS57qae^y=v({tY63f_RGG#>O@(PXAwX@$R?a93*lLuB3YcDUKXzv zEQ<~3DY?JQa!J`=Hon=GtKdiuTqSec@~Xu&zooQjFmmm z`{16LXR*6FU4Boh{L(QYzlrv5STVPtnskpGMEildZU}mwXbiVyLQNMk>(nC_1DG)L zMT7eShXMHlIz4_|+YfsO{)S@D@eIYD^9aQr6&nl8Is68?y#RkMHal_MFW*F96f`j! zYefQv8CL{)!?0)|qGlToli@mSEE2FXL=H+uyE5OsUh!AUx8cb#}MN7}KP~*F| zon8>nA~}#kc@`=heZUOMm7q}=&w}A3ZStRPo`uSaZ;oCl&muLTf_N4x7_Xei!L!Ig zx~H0Fkt&n|c^0Vwz0IYIR((o&7RdrBjAx;%hkAg-S_sjm?v1p%db_LCA+^ z!MR3o_&79PW$1I+$u9c^)i5m&pd5OkF()@+5!Fpgp|xB@M#THMh__pJq2q0&8Ug=< zzOemv7=)ZK4jHfD;Byta=?hsf2cziPj2f$==B0 zBZrhedJ*;>aE_fReN$4(U{1g{2H9C@l1sgGZ#mNno%H*lC+(Pqu(42<#qwb!&Tju1 zPK{$H<7p`DKB$$^K26;Rj5nwiR$4xuD5o}vQRCpci9^cf_OS6X^mWJzRZV!Y2O_2B z4!x&d1k(Fvcuz^_4JOz9I;|a$>vEk|CR81+R{IT-MwCuH(k#FcPo?+)Xq~P# z8<-hpj#lAsC@tffY9xhmQ+4G_wNA35Y}7X5{xl;SI@!0fOsQ`2rP@ie$epRC2CcwU?~~-McWQ8X$an~ertSoZ4#*L9Y@SS)QiT3dsUsje znugbZ8^Y$vf(0h0LA`!)Lur0dkoMsVOm2qsio{6{F&=S}k0M~=pF&&+ehR-*tPE~n zybRIf4Nx(%hY>a&V!h!v<=D&Uz%I!m>{2+gk0T81=K<9~bq_?vlMB2I^~BEep1S*-9)OU@hhkVnQWh48hJp)M)Fmq z5OT?)04mD}&L(U(tKeDXqY^Sf5WVF{KDE=VDM+ka#ksAhYB+Zlo%)UQ2I=ef9A8aI zsoy5TPpm0YxBabBjzJ)S&G=Mu=5L;iG)*OM#kUZGSIMP$NxFTlQg$-T?MxrHTqxLS z61}uVmM==o?M)E(nrhYwN-N~1yJG;la~y(Dy^3+bYoakQ9~cNb7uFhVbAg!9O79Wo z1;_AfP`!C5qypV7X7o65(16+=g)27!5P->32+cCD$4Q1p5+|CdGj9WLVJZ~%5N?ZX znOtT!axZM;aqQlHKLoXW2Q=z{8HwV2NH`8^Wc8-m_Nos85YRXkiv%Eyo`7%m;=|AN zSuGK})sUcg2;}ongWvKOq8m&bPM85I~ zBN3*ZI@%vcae5~&u$8^`uM8ZJ7{=aLU~8ZCu}G{DTgmGD1z;06BwgG8v5~#9?cqNn zDx3kx0UH471VC)38VInQXA{Rcb`%`82yQXiZonFV1B(@WhY3(Ne!4ui!({b@1g_{NIEa9LuyzVunu)sfD^)|2`zkWf2+x4 z**iZj#Wq?!a<3MUe_|C+5_P1a(L`a2yeVyzB=%KWO$gYLxH^-r67|^7>oYb!$^9iq z)+;D$_TZ59X8fU<1iL~dYiuXnBHfIVHQRtA>i}e}+xJz01XRmzzscl05!W3AFzi+&AuA8C<0ty&EY{b{6e#c zqOvD47LsM-Fc#Qz9_-QCuHb^Zlc0ozc`II6PX&{Gxh$zP#XYiz#4?>A}9 zWO}~B1LEutCV{W;eK=FG$Mm`Cd{1BesZahbOwu~3E5^BLsPpdgX+S9U%_mR)nPv0#uLd4%yv1BjHMPv@j3A~c|=w5 zCtwv58k0ZKn*La-$Dc^KuO5@N4VaL*hQlSkLW!^N?&T{aO%(FxE6_jI46eZ+W+=tt zD`c4YjLla_%2SE2keb|65u$L0E3Paz}=Yk=Z(Xm`p;wx~^2-durZG2gQ#l|v;0GeuaJ9PF7XvyQ~n5)Z6&?}EW(}RG7HR3?=iwhC@Xs+ zP+Ia~VMMDf+al0gE{TWb#LNHs}>hbaTopCKwZ|`dUp*7YPPcTB|AW* ze9B1y5fT_1CsCXP%SoK<|9|d%pYz^~Mz&+88TiF|^X~ti`*H3)_uO;OJtD(E3aaGrSetcx1zom(oWb0_7&gFae1&R!1#HONXbZe) z@BN}jtM^OYYG){a#<`FS?c89_GWWu%3WRy=N^1U zR_;!{g?pH@zlC_We}kt+9o+3Z`HgRjb@VxiYk(ETSI`v+NrIZ%j)?;HA@i{h=?z?* z3fT8=I!raR8eajW1eHNL_tC%%GO<2^Nd zuJIMZbWS9`f}-WuPv;t6K~d6o{-Jm{cm7X9d<9jNh)uv8;wu!>nrnQ8;;x=^e1*8a zJ`M2|iu*@z2_pNtbbN(kT4!uuzwGf9!hJL6_zEQCkFVhE5h{zXpep2-930LS$5&8f z{9>b`_zF{Xw2Xb9meeVPrI%0(4y$34}~A z?PDq-lYO-CL!_l^pCOf=`A|0P1D5@W&bNnYxJ{E_YOhMwNnb+}FWR(A@kmPB(;eSt zX^6GZR5<#h7hkgSn~W)>nE5SIK`Hql0zR}5hQH1FZ}p%WU|2}3HiV?>fJMv~h<1FzNn!zAgSe|pPH(mzaL|FD9^{X@7DAfvE!Q2M8V z{WFAY0uS_00RGs2Q~kqUIMM#8|5<$hJpNdG|4c9~x_`cjq!Rse=SM2;pDjPEsDC~J zILA+X|8Qib>{}7(mNSY|tTVsp3It@Jr{DLj>`&AAKS*Tq?`z29uR>_s{bye=0Dj>N z=`7Puz@yNreZ)%cL+IL8%Wh9}=IY*vzYS}1i_S4^v(dbHw8^|==7w=Ae~ZD4GLcY- znb$^d6grLH9p7$3sv1_9nuQyGj&|BdIEj5Jg^%zxM-q>*C=xh@{D71O3~9i07;qr~ zGG|$+hyl|MOjp*!9gg?^hw5%1@eN~C$Ujp9$o~msc&7U9U%2yibTMkKwP_ z<9OlC*L}$s9eGwXU;h`<^n4v%=rlx6%D-lsGakoPs!sZ^NOH&H=%Vm^eeKuOcw`ED znH4NEUmsnrju6EO+LmEC&GB4OmY5P7(eGCbV7}Zhu z6ggSYvFEY*h3|cm^|&_FQI8jP;l0JHZ<`I>Q6QmvW2?@?#9%*tR#LRwXK!TeDK*SQ zu3e6}|7>st{dD*v74_410cSt4FC04>zbNN^PtMBKo4I*b?tO`jy+7T$CtbhS9C5xK zkY2tgJ#jFT+;7?ESh=-;JY?1G&D8JDv>x!KU6rtE_uzwaR_={JsAN*~L7eQNybuxd zaPV1c*`SeoQ#w}<0_pnwR_g&P_x^;re2+PCFwOE`pU$OOex?>xWV$cyy(oV#@`A#d zo!wt^HiQkUu=2Izej=JeCfAV8onzUEr$1q}-eWG`Yfc<8lM`t>kB%NzD?We8!d(*8)(z!pt7}%ShIAkU7 zP1|qGzipt4{aQF#Kxwyb7}W8_s@Uzr14Ft}2ge`|xv znH)Fo$-jAiI`=j!w=j)qRex8y^(kjg-j%W6WaZw2`Tzbz+J0CPU73x<_e0*k58oeH z+u#@3jZSt5rmL9R=%%_Uoq20s!`l41T70npn%sYWseO8v9KX1qM6CL$?Qmx~u+*NhI`Xc@}QRqnSN!j(eE9#JlLtK^arLE1^)u!xpUGA(@ zu0iteOSMj`3lQ*@@g*mjD5QM6=GS9i1J4j`~n;R4HYj2!XY59n=)i zg4{XMhKW?`J<^6pqz#8Uk`rvhRjLhpI_e3y$)BjIaE{Xnr3eIb!{t$^S3m$+(zT;O zGMdJkTp|a4?62ROY8}&DO788j8*&|W9XYd(DS?Epx?9D6|LR!{0LA^z{L*>FBVbML ztXyM<{qUOlyE-bk|)8Z`_XD8#{9IJM4!#ASx!^dA@gzeNIR2opoz+ z?}HR%Vk($=RUKB1MDB`&NKn0sEOPT>6-gs?k(=tJtj(ut@xAl(BDw@7AVNEG=cMcj z5wdT6IujLKY^n9qe{+FI;(Z;Olbn@;f#bi ztfWQV@CxgLlfi|Ps7-v}R(z5g_W{d%&-qurj(beGSN->#&6^H);bNF&kK&6g_>!}U zTW|bC_hzF(?u(_an1}dl_!zbd6S;8#KaLV(3-d1Mg( zEyj#I*LCyCl@P0a+O#(rHKFZvS8(S@`WDDM;?Lx=56UdRWH{c5DhBqNSr;<#3 z51#F?atlm*zuCIS^j`{6rhb!_N+jS)$zBWiHn!Wjcft?&A%-Z(HS#sjCvZP#esNAW zhiNY)m3G3Bt%;?Bh~&igJTFJqOcr0iLxiEJbnR0pJ(C^H;Lc0!9Z}a_V1(Fgn3`BK ziQ)6(XbS1=D_M=jxGY81>Puxq?tMGHjOBOT6=xW`e|2GLcHhugWp{FdgEYYIj}GbY zTO~Ml@J)MuZwWX4FioQ3bDsTG-s;rfPn-hCom95O=R8k!GE+FGM)8-^V77Bgrg>ma zE#%}7siEdn_Kq|{u3~QF5||q@CyTFn;iktXEhlh4k#&fiS-8~CX%%&k44+v|+cKvp zVleYq4GJg=SD141XE(DJqN~}hoLO9KHX(maO{l+hXXCp|DfY4g(r_?^s6<6OPgFS^{-OgBK;6;YAHPBzIZK{n%n*X@f2ZU9Z#@ zi;Ed4byc*#V(()`!vRLS*c;9aejGXO<44Ph@}q4I{AfRE{4nRtkJ;^a&pi7^3PDTU ztyqM8W6SO2Zq>dK+VH+o?Hkv8voyQEdTW*4CvM;PtKXpx6KmgS->W)#N>+iYedC1e z8y8+0+t;*j+&6m4`});q-}u+x79IWN{yx34KOXwuil9 z=i6gN*r!VDk5|1zcz3$&8%zJ?6!PxXVBh$o-%|WLP4IwYn z4gBg0{F?0tM3sNb5b_q@{+qCOJ6qLJym61>m4C~oOO-vGNj!^ZJ7#a=+hmL}U*I@V z{9Cs3_3SOL<5K!&V<$_GJcX~ozhzPr8zHeu{9C4wff{$m`ddBw4_`+3x3Hf~7|5gj zTe_I)ej)Z{WcQliD9!G_{p~8d9s7@u-L8MjRx-}@Zy_6_{9FEPj5?mS|MUUmPAc(l zX}LsoGE+FGNT!k_`hMmM%qj72kzu6f)a?CR2BZ%7Dg)~fIkQUoTsZzMgUGJ^TPUC^ z^>1Of%3jvh$Mku<)8F~cs+WrWTbA4z+t;-J-1d%B-q*9X|HSpRcQ#wHuO0uElh)UB z_HX&h?XrhCUG|@WX2sL0{b!E$pC8|<_;;G@KcjE0^3S&it<3&&;a=h0>9YUS{pu;? z-K)X=lO0w3J5BbV)P+_4`R1OhZ=5;)E&s5b9ID!X&J_F4>zjQ1sM>$-qQ6%YoWOiu z<_{F|{|2e{YPSE(dcX4dmni=u_lDfBY`k8{=To>h{734YHxeR+uMHY1Etyh=e<>SpSZp4^5Y%@?sVCIHmo~^yn8j+e?I@T;@@eq|J?H4D*t?Q?+mp6 z%)5#ls@i|f6#LH~Ug_gU)&3K0|M~6{kZP}b`_IjX`@PGpU5La0JsM^*^XQK|M(~;U zn!-27Ucl}@^`}bsTSkw1Pfw5;8@DE%2g7-2b{iTI` zXf|tqj9ZfJg*Ugq_!9Wh1IMT?d#rxEb$@Q56E!M1uEHWBeZ#M+sF%sT_L#i{;B^8$ zI}G(;=OI@wfZd8}e$mAWYi0LL9IAZ^ep|_LGrJFg8O>Tm^ec|cn1Zj>^&qf5w=iXo z){m!J_r{mD1TI$n$}<3`)xPgX$-C}UIMokA1Vvt}(vjEq-?S>Rw zwm9V>5OY$L_NPT)eC+Mgsa?>H zSH>!Wma)#01k?gSzPt)(8QlQBJ+#_Q9D>@O9Ea{#dyE=;cAr@rqx+?xuyeaHE3NP5 z+j_9b`Srci(x2z8a{IHnlKxyd+x~1h(f)ku9Tekpl_{XsH zFzbE{CV$q@F0l4)Ed984gUl;)>n=lq&&O5Jt)0!SU<*f;*vmVvad&{ti@2S-6+wxt z{4GXPqNWDny{|Cyn~Z_ih|Xl%cU#$Cr1O7}$mHMGkjY=wXd#qj?kv+znEc4YAuGAh z%GI@6c6*{TSNBHzZCIOIbdG78jpogxP1Yq-H;gkl>?rBwH%l32ewWdLvO2!q1g)ZD zg#Q-a^?n+65k*!Cekzdm>pE?8fhJNP%3SYc)_|5UpzuCYUx%1QtixGajb_32dZ>QK z9(eI33$11fE5V-Vun(B_u{%>nO9No|+e|qAHt}!aj!sg%vVqxJkWJu6V&Pu|d4R4*>ce2Wug6Qt_b;SXmRXMP zj{zR)^P=%Ridp5!6aG@GEtV9-1eEdpY5zJKD^D(oTW+;HS%;mujW~l^OcV~imu*>x zxPSRhjGsw0jtlqVb-wP0=o8F^Epm^|O*FTfwXnfIRrnXlyTuR>AZAyKwmn(cf)qBH z4RNQmtY;&==Qz{4@YyTgRbwU*nBLJcdS1tN>s4)(3oasFN2wW3|M}$UtksR0g=&7Y zFv`%eFD&{ThG~Hb>sc# zyd)E!Dbn+-U1@dW9eEb1)Qvu5E2C~C04HzA2v^Zr(6Fxx<&CLN|^7%^|P=S1Y>tCu0%~C!ewad$A|9W@^=^r9kn>e8R~b$DgzSV%Nj7)>h1)Z|$pyKZAhB^5;xk z56`<-@gr(IeEuGl7P}rkqye##`P&*$!Fu>E37nxkAviJ0?8naoJS3wXefvz`k8hhm z_ZF{*f6mvX*24`N5ZmkT1Yq{-;r(~8yxFXW{}aeiU!Pg);o5OFrD#1|h1X@*!^M&} zYJd35-KyC|`@^XDdy z0x)~|fBVBEHyio?WgtU+9nde%Q2GCu>aIxnuhU`$PQQ~mPT*W8fLMVuwy|P?^VmbI z@2utjHvumaIA^l_e>9#QXX&(9b{zbv&K$>%F#*J~t(1sE8fE26z!W&Sd#7 z+TRu|7Q;>7SB@te+%%COe&K9G@*ItVf3S+xcS*`_uX`7qPw+Q!1)NW8a}j(`8h99XuQ+`;hhYshaNPKn z|G|c=GfW(YCFHzIUN69F-)3hNP&d&%4ExF7t4GN$* z{rk=bw%tr3-BU#xaWti{yh{pALlmO zkq7N24~Xgi;hz>U@*r+@xbmQfQ-kC=H5eu}FnEuDiEUeF^oHlfqmr=2n8Fw$g$7hN zkn>gzC}==q81N68bRUN?D^OtF3(b3*+)bHlw>euLrb-;L--xYdL^nQk?IyA_SoYBpQap`_1e`5HoD3a=u2 z`GXn|+sl^%;OpSxW352Hed@onyo~DJuv<+4nF6w?hf}DyCr<|9cepnH_IalLeb${$ zlolKx?E83?5p6|R4B_1x`*!7O(6Q&S`Gp;_vR+GzEq#o{9Ws-Bys!oDt=cDq5agH= zdD=yxU*}=skV@1kACeS3*#};W*uwUd@_Z24d-uoHWM_)(W*lJ}?|5|S-O@wi={SUJ zQjzCky^mf8IJ=2`;mY2a{fLRdYT6H^?eCfS>y0k@APudeyRj5^j(5 z)>A(q0n1R<^nz&@HCtf&0b`Td9Iwfaz9Zg*Hy>_J*|)>Z$Fv_ryU;8&&;*zN<$hNF zI@FP_IR~h!)IMp}K2i8vB<-PWq(%q@x2^ai$07Cv>eLH zteqAeHp+imJBZS6I?{jIyaW!5GEcQQq>qA`-)2lxXY%_`e^e%cvtc+8NL#DZ+zkUK zy+3o($&5)NeG&#FWWGR4mEs|trPH1&<*)dSyU5-x(!YwuPo?e2FpKfKsR?Z>`~~1- zGnuH_?D#9W_PJT}_kH&`lPZG0mm)EazfDYYhIJHwUz#9)tq;Q|`(Y!P0gOc_wB2Q!CwVD#NhD$8~k0HztmYhImR%1v3epLfGnWT=~?(E z<1y?l^dKc)CsW-we^oZ_;_ie9FRb=w#~#L={g}hflr5YKP$s`?``{kI!{~*IQ zn#F&i(_&ft5hrsTi&Fqp$l|B&tcb;X0S~bl_e)*O~P{QWzur)o_MP2a)*Qp)o8 z1ODuB{Jj{UOx{|rCUP-@z5Cie|HhLiuD>N?Fq+k0)@iYMZP^ggA3+||h z)eqht!Rk#A{sX2t;yS1Y zUyCF${!k83+r{k!pB{YYhbq>CAH9tfGqcr$zX3QW1AD>ITf+9=Iqes2l!Y~{u03AZ zfcJ6x1yko?X9WA{B1wteFMQ>L75CF_30W}fe#!&RemVvFh4=1{+%K%gYj#9CrjHCK zXTR_kBt-8Q5=im%*&}iLg>&|jK-vAmA>5;9lcV{{H(|Rpa#ctC1F` zzrTZN&ddq!joyr;+34?vL<6|Coc?}%R5g~Zapu8^>hGT(V-;ic_w`7O)9>1u<}^D> zzq?fR;0hLk>CTf*5A(sylCwo2&@OQ-=BR+ z7NZ#c-iX9F{`N4f6n`%V;PmM4x67D~X7E4jv{(iYI+^1b{4p7~6)||jcR7h>&EVex zJjCF+>hIr?l{A9Ag<+(W)$cyz&mO1WT?^35t-n7a!#0}5cj&ZO7Jt>r9LM5KGIT3q z@lF3$5sTjoc!>JOcH)(`^iubYlsm>FjpGr!setP*AE7ngJ zovj>q*}=20Xa8`qa$}9vPfOc(KXookqpSUx<@Cef(ES^)A9~}l!t;V7OQnmYe|_f# z594*D{=XLq(fa>(q|8G9|KE#9psfD?mw<8dodo^=Y&J25zfUiT=kJ3|i{|fcB+Z7u zw=J9%fBzmZHa4EWj=f;^`r#X;iV+G#Ci`gNh1av$(f0c(ra8@y(*OS*fYYM?ze{FS z^n&v1IxTiVsdqBREhq&UzZK~YkJXdCvsMqk33$i_ST6*z*ug?6Nr z)eo2Xv&ZR&zr?cga_j$}lVKap;*aXISQf8wGRLvl0H8t^FJDj*i;ujfh{bc#|NrE5 zG1IrugOsxTUG2{v$KP`SI*t1O7iA1av-&eSEtb`4{3CN5t1khC3R!(|T}7;ZE#O7s zx=8;YLtqP^KMTV_s1rFkjuU^Dal8xqvwZI=)}&bf--Y*D{~txv4d}jbiP0x|TXi0) zW#cMQr+ijYwEjPe3#>tZma~7L^na#swPF>8a*@x0d(wP3&H5?(^fHl9vLO}oDQjB!;|4$>y)BoqJ55G+n8P2J z@Oemx)`tsMa)6fgpSj5-fwKDW`vGGYp9FpQN>nUPA6|vDxc$y~Omh^6;C|- zdi3G1%9xF2u&vW#8Qkk+j$`n<0jQ9{_r0?s27eXs5QFEc5C5Hnc8i$4g#o0L)t5ft z&mN~QT@296tq<>&VH?fjuj#Z{7XP`EIgZ5}Waw73r+uoUA{OrjJjCKT>BHZ_`WCsJ zEes>2EPp@a&mPC$YXLfq`tXA?2BTU1Z#pfO)oT1Ba~!Kb4GI;`<^}B)vHHQwBUoLe z4;ShJ`tX$Nq2}qs1-uh|SbW;)-~Hx~(K3H6JCaE0RaA7)t@xm#0kDiY9# z1MuGgoRflmF$aBkvDE*%gj}EU`#V4T5pmY=?BS2%1!j#O>FC4zkQAv8a{#&ii5A(J7lS{$s+cM}o@h6v_dM^^752HrvvoKWO)vbj#q{QpP z%q-lg{SXOQhPrJK_9u5?4}DN|v5Dq*UF`Uid;THP+6ez{Q~bN7%3s;w`iF!D;G>0` zk*4+GQPfbH3P)$j_c5kHafoQEg(QsUTCcroF6sc0>kj1dG2S2_;zk zSq+F~@dstZR>b1Jysjb^e*o}e7Q5fCshq!W!m_7U@-TmEkW!Yv56eQLhDR)azX=fa zUp0}HKewO3-uOJp;`#eB`XX4pOA<=3`tuqP%j!P_fNF0A;`uArRK)5&z(cGaDs9g^ z|0ZWI6S8N%1_@keU4MpW28xi5{&oOKk@_3gAyQ@+cQn1c=}ANfA3HFNuaDf^E-gCS5JaH^I!ig-k$k+q{Z1Y|Cni5_~eRP z7X+ZFK3E3$>W;lHwvXKl~?*$ojJ zC{VWySh@1Fs1dhD66k!cmp;Da)recy@*^KVQ8s3TDe zDq`?I$+)eE!EfJK5rba?IOj3Bs5SMu+B2W~lNk0ErjX)W@AduK(EYrB^JnLlg?q3j zj5PoKye|M0(&zl&PBJKYo z@ml~7v3O4Q%r|{Hj=wcXDa+r7u{^rw&^Z2n6QI**&wR&c;#s{+r^T{bjsFs?K7hen zp*{1XeHF3#9e@|HTH7-nf4fnfXq)P?ygu27?j<1tb{pzg-?^Wc#2O!Ws`@&lIaVZf za_`;GdkSleE3Sj*`VYwR<2%<6-p~8ulNF!qr+%M3H0yKyHvrBaVlM>b9ly7C)8S#6 z<3FGZ+JsLTqFeN?)4sRxCe}TN?-!c6`BpB4&$#6*10R%|FkAPU^?S^b7hh8UH<#}< zCk~m(3DaI|=B`dyh`&%jVYTkf*kiu5PJBM_ZZo%ZVY+_YYTZw2Z7MmP9JlN`7?>?-$mcmSh@8^PbNFoQ9A>Y3p4gZne1q~{vNCKAtv=Y zrQg$OFI|j^v4Ib%bYIfC#R=A`uc%i24ybH}tQ;p-{P_F3KXS+4JLgq00M9Bt0M{*?S84>F z<@TPhjm0By-TZm(5Q`pyAXH`uhH1o%!8k&ZV-T$?KL|mw)F2Gkt9TT~RmmHLQV%_q zV}~Kg#LV`XVd&#s%s7lA=^KY~KUs~xKJFRCnCyJW^{%z~x+~<%&(KdXaJ4+dH(c>S zR*1r`gjqYy=VnvAYw^8n)9>1S?@ax!%lEEZzw7b6>(%f2eDC_@9W-iG#C@$kORiHy zNpmU%d$j;j*Dc0yFwb@`WoIyD#7h|sri^(hvvGG_Rr)cPT!++OI;UuLS|X2D%yD7#JjJ>D8aNFogBHtj{LTq>9+mn#Yo z)Mj!5vf8w*RS>ybj0R=}(H;x+((B0$ybg z+0Hzm%3%|zClBEOUsF4ZB@jy(x`{ZBr;-&`A*To(7LuxdSll-o-QoIi2!a@5LTQx0 ze)F-!yOX|0SCb<(d5mkelZAwP!-P44OAyA?=RB7sD75}m=l>Riy{Dzgs61*Bx5YS- z`Twcl{O_9W{KwQSGyi+a&woTUtZ@DZXKm5^FFkAVDP4>&ng43S2Bua>1i14wUY-<7 z0nXQ1N&!7(XCnoMK{Zg-7%8A9ZhVD3DZm*Un5;!opv+{AkOHHiISVPk(KF^9?iG7!4-ysGmkbok92({cG9{rI%f^PUY26H}jLygu8JgHID4n)@&N5A>> zlS%n0DO2(o)(-yt6G}R;BTX#e(?C%`^b0piY%sCT%#dP8Mhq~Yrz0RVun-EV34>u& zLQrv%f@%U*K}S;ob#EX)PCKgLTw7j6`2+-Rerq^7K-Zo<=Abzc( z1-~ILTup%b!bq5Io1z;bDWGjY6M%N3w1!ckwvVlEm&egSg~!5#O+~nryclO5(CfnA zfV`Lt6YEyQW}!7qX_`IwTP!aMVZyzo2}5g`0fI&oe8jmTc`>y?$%}badEt`^C!kII z)kmxHqAD+5!SaGJ?|I;bwQFsD={%?#%G&Db7(05ZItHv3qg>rRd&UXKj1T-?Rc2IW z#w$l=g!~JG`;+qW@`%V>R+BxRE zzp$#Cf@2*{cB!BM<9){FMx)vFh+p|(H64iHmR+df?+mHJC|e^1mEOAdGp~Q^p1m`$ zYaftw?%I83pHz0yH=y~*mUyRBIMU)DuJeeZ9 zdOdaKgVM)2h?PDbm==W#u9?-GXylrUzMTe{>YOmDb0Q$P&dfPce7{b-G#fY@?a{P- zUphN&9!0c1Su;d>;6U86Z^wq!XYIzPuw~G@XGJ30c_NMzkYEbswR2h>OrgltDI7b# zeILc9PT3hup~!PitAZ(%Upi$xm_lKsQz&J8@n+VPjR z^D+L$33aS<76g?k7%XwxL5umu`Od$-ijWT+lQYA^x(w(|j@AGDn(fC+TcprRYG@^;i7^xMuG zkdw#uX#J279u0IrW0>&PauwceG%*k84FejGIL%>V+ZD0+RoFdoZ_zY&B1iII_{5zb zBMdZuq%>iy!tKbyRk&k4tmi48|2z|v%T27jNnHU8SykXDPophH0-ddeRD(RaqNveJ zX$qz^dnqmQ7$I;jK{OyUuQmTsprQrN+bEYX+=!?OoR9#UVW;?|XFpz)6kt_>BWnMt z6*%oR9oKbS>-%P5BbRf0mkxW}1|9_3_d=h6kP(mPCMrMKJct80p&ofPZ-5L4+%DJ;R&)dGM*W%L^k6 zd6K(&9%mJ6mB~KC6}b_Q>HMb>dNsFqC>Na)F4vyNEAzLof$o^JI}`9bUJZ%rTlCxf zkTk+iV8~uZ1k|^ks6QOpmdrE7iQA=wE#+l!BHJWqwjjAGNRsEYKJ2243GphnCSP}{ zO3q{pDLZBKK|#piYCXtaEM)sYU~SG?0kSG8g|jGI_Fm=tV%G1sTH(K~9R-%dEew8` z>Fhys;-Hz_zt&!Q5ecBsy$WhB-{T~$yGRNdQiUu*AsRz+Tcz$UcImn4oA<&Bu@}^c z)SggMx=Yf`S?~e1#dUj=9Khqvig_t`eYbeT^J@|+hlPbE|QO4k@Cw|fVoEsgNh>&dLTET#MYfLG=hx7q|6nHju#65V3)2IcFrJWa**rKpKsj?O zMw)F%_7{47I)63Wv+OMPJWudkxDU4Oe0Zqz*X5~MIs;J7XmU{G%%8af@57YYHH>gLCR}Z{r zqP>A4{1)+7v=(Mx?`Gk0XRXS!XxoL%BT%sR?Tr@XdI{ZVVxMx!mg{Eqa*6Pe`EPW#5U z3VuLH-?-xS%rpv0fOf9hxB^9Z(2E*S^$P*nVGIJFv7gAa9#1d7JyZW;dgAd+@`+A+ zBgt*xMXDX*0VWv~5Gb~248)Pgm!UJa5&eO3w+qq7GOf>`%QN-QVx(r0k9FGDv+qzX zBwIPuDPuo|R0UHQ%f9}i1`}nf_2(92Ot9CZJ;1gew(1{uxcC@J5w_O8o|WBg4C4o1 zP9aZc?t1bjoCny;g#M&pcNhhszuVx_fCjUi$E|v13zS2+E@y{PgHa6jk$xEK(x1}w z6CClV+t$+b33usJ`zlAjpy@Yj`XcP(>rc2#zg^K^7G3}Ig-48(u$Fz8v45Jb|Ap21 zn7RCRbK>!I@)w=K{tC{vy5n*7U?LGD*2Gps?%C7hVlWeb+C1y^Ce$L6CFvbV4Bj-EGF8V66*L?}sw= z`!lTv(#!Xxv9Koh1H*B$%@|gg`O%mKz-%$L3ns<(Ph{%%WLn45%SY1_g-mi!CzMOU zi~@tpUJD~ImTj>0Afopogb%Q4HwS}S(Jb)1t}tBQeG8`%(CN&yf=!N@3L=QhAb!cB>? zk#u~p<3k<1A?MytD7$}=qr8;S=k8z%AHS6QdH?oBe`mdLB~ntXugU!n8rb1{g1uwU zBlFYQy(uiOZ6-h6t@bZw?GH`+P~kkGs6H*;U_y;#ak%+l3vR}#_YM}+n;!-}J;6Q%bs zOINuRGx>KxQ)hY9sFdW|r0%dJ!F{!z!Sbs&Q62d7#&T>+4kH71F=$0-BeQ4)_c1$B z5m#Sit^1|c-d00)ETF5^-4rg`_PKgx$DXNqYq=H3WG7|#BJ7pvf=uRT9E&^pGKEnCu2&KK}UB-n$fbRc27Ec%*6VORcd|F z24@jipld2OGToX&X}gR%V#2)nP86;8IAHN8ihgJQQp3!?5|2np>PT_Pu6q z(dyKS^_*93DVvN*)n!!UWuM2gB+ydM0)wI8jrlv-B@UJGGJbA+nTej@hQ_qHeMGud z4?c6pn9jck+U?Twp)fBKU3?sr2%m|ByVd0sGIJUHx1(s=;nwjY^XA*7ag9V{7e6V) zy&RBW7@zx7^C?KAVoqM+_&qWWkQW?>omqECCVz!*M>)lob1tw5*#VymE|A3<{_cET zz3LH|%v19@xCp~mXl-ugLh9jN$jS>}_Cad$t%qEZmxd0Gfsb3u*DsWA=6c5*-O`>g zoDz~m=M&Nw31Lbm}lNNYrm6z#q$9>;c}6xJhcN`GKbsEQE#bF=H6o*Rw27p^4w`oJef{D z4>kL(s1tgeB~l$CSwaGNM9MFZ%+sv%5aQ(tVKJUnU6usvGUcxeyM`|u)qk~gmWhmM z`#DklpLf-G7)iPP!)QiwXKwvM&<$g>s=rxV*0#wmq7!zTh74{U*H2_xA4)IZn})8F zoS-IOkg_eR&)bXvp}TIrbp8yhiNb31D5I=#X%Ib)7cMQR{c3A4C^S;bP+r8=fV_gK z6Bup{JPdX4es>Sy?hm#Dh-L6X0K@x(PCLb^4FfYU)P_6^-zHdVQHZdYpd!F#U{9g; z31gB6o#Lv2&Z5I>VoL3wQW#DEpS@ktb+uXRq6Y3aP?1^fH@J=P=(%NLO;ilv(nV5w z%fW%K%l2cj?~B-Sxc(s5jSQZHje&b;Quz88*FdMZ4d*23qmx!1E7j{Te)858^Grl* zoWdt)=#>mVk?he-{&)Rhsd&HA4NYa%9~`v7Z^U0Tf6+OnZ8n-Wk2YDC z6mA$d^YE`jWF78MSWqDB)L*@gJDV*=iv|pZ0iV)H|o^4(Z;Y2=q)jxo3j3oFJpv+*y`R`!TH3z#-0B)R|4BYX^?PP=ZEi*m<5 z<_hT{wkPtyo$|Lya|&>r;9#1j>-Sl$N*efR!rBWdA~YARa8arJ((huB>baH4KGIS9 zTspZgojn8zumXkPRJ1`=x(1wqz!2&On2=zCo|8g70R-awTB*j=|fvR(S87f5u+Y7*!L z0T=2+tvA};LI!}b&;%4RfUInaDRz2f#1JyNoPu^6gMbF8m?&r&a}G+Qe074&TbY^; zprF;lgkcth4j7hF4p{a3U^!yu?Lv0Xn%aA~!G$3S0)pY7y09@=$Q;{)Io2Cp%HRYX zgr4fFQ4q;wVc5br2OI+`1H-<3Oo}vSRqWT zpon2-7AA(B7HWx27?(lFR1Sg~OcAU8n6(P8@Ca{Y#)%ROwUw0GCV*u7iB5QEKDs!N z`EsQnf_8#8LnlzMkdMEKgcY6^x)4)!GGMkcNg z8puZ%NX%AZY*@*F+v?%?7{KjRIP5TRR^{RN=;BcDDlFo=jS*e&hzI0j0ElA|M4S`g zE@PZPd=a_+h}HU{x%>`u;t4Z(1RHZjZ&Jf1V_~4S%b3=%X~NLAkU2+$p zqv_(crrWPG^p~bPq+vsvt{F`iuQlDRI>Xk|ba!glPEEHfnl4^zx+6NnNNKv`8a5sW zTPD3asbQ0`F!UJ$wZ+0fZL`s(VO;{lZiAr>otBPc=fJul z7LtZ_$HG8ulhLPPeSj6~@K~I&{{^gH!}?=kjZpQe&WBDH0_O{1eg8YTNPU0N73J0a z6d8mwdf411PKLh!mA97B_dlxvvHJc89SU*!{-pwl)%TBoxvKA1^?gLwhiIzm`&E4( zds>VH=;u{^zpC$7_5Fx#0Th_3zHe0Z{i?oyhU)vCX&-^#xtew6SHes9E`DqfMt2(Y zGxlxym2xvXEiv-tqmWIs+v0Y_S&h8RpqzoG0bXPOM18O#U3&=8Ytqa)in>kONI+LLR`@QM~ z?yOisdk_l;jUZVZpa6mXEu(q&AR9ZPhxC-Gn~xo}(_u?{FOcLH(Y+p;kB-6i7zTy1 zv=2x%cN+stRhD)>I^$m~?SpvXSlS1PSH<(SpWyt2{ge!2K=%Bkj@I;HK+wDEl{6Yg z0uASU8)akPuIsX$gq4k*kB+$sws^mdeH7@9@+&>Hrh0-Efxl9yNoV@?J&9s z(>8Xi{*ZE;fzOPUJcKIJD!$9;*4S<#c_ab`k~@q(f!$*C3G9$n|A@~u{t-~a2|i%` z8rB~R6Pj9%1&~BrVQ8;OO1+9qRM!^Q!Nw6XI94o=4!HW>?}jlBR= z(8lih(-i63@>OpMt3rKNE80-G(-Ll6YsI%Lf+C$g?yAf{X7U?<$J4e8pCiJrY9G;A zKaPZS{#v=d%$eXS=v1XG$raGHwSS9f+l57cURAZLs&-Y?cGXr_v#qMy+`agnTB@pc zRn=aF#k8twS5@t*s;%8ws;ahj2^6oFmqXPK#P^C|4{;6=}R6uZn1&BcFah?aTQiKTwK3BOd8Q~8zRZC$u-zVf3P)NS~B`(S>5N3J$An!7UkSCMpj9O9&{saFYDj}V+a5xvr}J0fcGq@tg(?F4z$RI=sg`tI8sA7l_KGhKa;7S zhP6)&b9|SYQKa}0PlAjK^`Q{_!!2rBS_D@{sh&#~woPe?x~V6WXMnKeC`Y3_ zigrpF)Eh8sSZRjua|@>a)QAMY*VI0aSUeJSL`X8OAN$9}x+GD*giDV5($IS zuPR)73{{39Jd=EuuztW;LdMomr>@T;3d(%xl_9AshJ2XfRz*>|K!|Mx!m?MQi^Ie^ z>=!%s{HzXr$ezZnUu0clAMHrK*pYlNll^5n`yd&xlSSYrBJTy`(YX@&q-9^agy|zv z6=Mh6$5WXWq25l25WGlR&Jco!&vI zLXnF5jLJGs2~Q}OFc(H*j9}`*iQr{1)BX(ZiusCc3Zt47s?kNcG;rNg`KmMOC{u%8LFpZlrN zgno#2yB-`F6Jn0ru=9Tv+vWUHuzg)>hDdr9&s*J(!ZMb zL3bHr8apN=qhLaEO2eiiVZ37rv8Y|P3mRL9!~&*jNi~5hU=2rnQ3bX2e3y~XFh)3y zhDimRG^~j;gvSxZSd_d_+T5(M41gL9!}!@|v% z3FC4HxyO5>Ala+2y?!iDY4l043aYbA=niP?fFJ8DkBq%TUv)TVYS>^b4AgL}C@|bT z6j=D0Ez|;55K($GY5bj)Q*jOwK)Zp16FkCeRtk^0~ z9}7@}I!o`-68JeL?Qk#_kW!)qvRj!Lz^A6yo*=_Yr_mRox$8U}vlQ z18S|K)%^hj3{ImPs`~>*ACb@_h3ftQt3!2vfW_6~<<9EbcBiI$S`~b%cun<`;NSbi+Q6clw_(Dx4|GtJy{wg?E z?hpI_Te-TV6&o*q>IR9I@B074k3Qg(|KWQ>dO43Cd=~@?muY~jmxlqr;!tq(alOH`eELg=<{4q0P(b_!)F9yZKQ5s6;NvpB?-W!W zm=n`LhXdlb2}z&d{|rF%k1qE6*UsT^`bQooAbtaSC>#*K+ecGE^E3j4(CG;GRVy^TD>%gy!#RbG42N4|*e+ap}fcUsw;0r#FD+4Qit5DBMLK>RLU=LX0a_ii+cqYmy?f~{%)eoc-rl-wA^U;a<;)UrMl4>F<22)j-9zHq)OTzSY{1IKFev((gdidzW>0mt;%^TxDdjau>ygYn# z^ANceFL1{|U1VVyDrOE}JFV~n;?q-=nMNu26p)WDP;Legql5MEJ4zbI#{jNL;oxxr zH(d|MM;GS?#BbIG^Fu+JARhxjEX?XU0DaZfhjwBE;+sMb9^*0*qF|u5%jnUtCc=1c z$%+q%->b3BLNYcW{(y$H3oJGu{-B1Lu`pB+-x<@e9)ZOM#NV!Ay|FN`VTUm)ur0;_ zV9|l#o83V0V;VaciFE_wPifdNOXe+zXu5c<1I!n6hV7;4(!oJSqNas-nA8Kzvif60tDxQ0mdJCeG6MfcUiO zv(3%1Fbtw?;_gFOJ76V(^$coiW-JWUa4kT?dIT05tY^E1^~SF-~;vyA@! zSq-34)b)iNephwO|e{TsB+Zra; z21Et=dlv~-roVRw>o80Gy$`u&r@!|DIY<3{2wCT*zi*XB%}#&cDWz1RzmEiSl+)kG z0iTWjJ_+0`_4jG1feyzSslU%CVr9Z?_KB!fUlG>|bOWR=6uVOTdm{z2Qn&f&sDZ`$ zdka&Q{?5mM{@#Wc5&An{y98&izjq-U^>_Y_3byI!@7*M?^mjhGy0{x`GeUpw^YZY~ z%|n6Pj~5a8J6}7kDAwPHA%Cs2dzvN4h6js3j;Mzf3M+aou&Sskda+he{T|4S^d2^7KRFX`g^;;%IfcC zEG(eE_W)L`WHKydvHsp0i7nFK2Uv0?`ukvMx>O)Ie1|pNS?llHOVe%AbVoJa_UL}V z>yZ9FR+?_RraKh}3+nHMSXe-Rui-2$ufHc^VHiZ7{@w)GEcEy0SQw~z`g^;;%IfcC zEDY2<{k=zEW%c*oSQw~z`uhN2v(VoMV_{|W_v@~`8e#2+Azn=T2WH+fnxMXmn|_15 zySMPBjnsJ88BJymK`K(bIWcBQ2Y)gFh`@MTYa z<2Ri|45T{bUAHhHR^;#=XmKLH=yG1HZ$|`-+GA^TOA*vUbB?b~ht34_pauL?Fz7^Z zc0ocSXdrrQ5s7Y)sNKhV57~X`WLY|}W{W+Vj$}QE^@qhABoQ6sAsFP+_4in<60V@v zsn|W8_R__u7#sMIO7|tLTMUcjI-{?sR{ajBY=t-$2go_8g&v1|Imnl@@8;uxLlAD3 zjZX3yqltivKCW$+Pk7IoBCeMYgCh2kw+7-*l^=h9_XqCyd*{4L2H;ul%!wR;>lV%{ zH3H9?-3VMaf1W$UqK6;|l^KFz8Zl!qj!@(nMC-~ALQpI<2*dR%9))pL@1)Tr^-hh?ne+mv|9c!9IVwfVX$;1?)X0=)0w z2O%-58ldV?6m})d+G##F>vt`_cWwGzyYHQ;-*x%kb?bLMzIVO)U7zn=zr2HSNUETV z#s{*U8ad_&H$^NBtSgqeV4m$>o}IxIF)64#qrsFhFVA=|g*F3Sw<&pSPnda#XVXT^ z3A`x$uuqvwrX>}zmbkjnDo}F$5K$gF=&Yfp;h8`nyNjZmCBl$y)Bp7m%#+I%1qf<0 zIRROX7`2T5gK*`{ieh^##9phPuv+io+r}`#ULLHt5Vtz=)dOZ|LIx725O-lrXbw~A zFG*>e(Si(!<0Xp=^~VA9Stg4*AG7QOFg!>lv9@e8+JdCjumE*zNDnBKzn+Yp1Pdth z;O`Kq2I^@lVryzgu>@iXLpKq}@l>+H_@bvKIV>bq{p3>^-QoIi2!hyr%ho7={pR~8 zeUGNek&44DM7?sdP{8zt33CLOAdIQcc`i$kYrm|{eU|m9%L7_f|argR{11{+FJ$zWJ{vY+!1IM1VU_K6llLDNvfyr7V1U&m6a_@TaHF&{)C?(xWW)gTc{&2(s0pEvGt^)hC2}KH zQ=poFRnXBChL{^mVgvpLCe79`*+#r5xo9e@kmw6abOh*a57TQdM{k?46A-`F(1PEP z7p^8iePJX_w@uNFkQC51pb0>`QCh>OP=jNZQXnKCkxyG13llaK;ZpKqoOwX63x5Oh zVlqsuTM?Uu)-a`M_TX=^yeNbT_m(EixM)D|0Q6SGL#sqyO#Pmc7xSv}!Y36@K%4lh z4OMxe_7_!o@rsle&?p@JVr_ouJg6JW+Un^TJ3ds^F<`YA6@B4k>_9%yQv2`uA6Lj*}`smaVVKkE;B5rOS_g9_!ok5yd{Zlvwti_^P7snD_p| zs%t4Y*5PDV$5cq$_|Rbk)?pj|;CH5sCO#Kdeo##ZUjE>gU8vEfPpUA=ioXMF=%qd} zE{=Tut$X&)z^;9Ow8gmRGb1P10{`BA5U3J%9-6rukOx-(i^;tqz|{e5V3*w(CQHY_ zGP`#AUg%x>Fwg;d&5B;wfWEyPRoMEZvWvcfUY0HKPN{ID#Xnr<5k);>2k-9P9lwsz zaD~koqvUg?in#BocJ~! z>$Ha1jxSUwd2iXHh}N0TPMb$3^_n5l0|(-keLFU+K5IAbbIG80cWV9eQ*6E>#+`$5 z9CvsrL%}>-y%fq*pRI^uQ=dug45o~DDHLhGJd|HL&v-C}9q*i02U93bbjoxvWyVXX z5eenCR2C$4Ue0yKR|8p7R7z7YMOFuuLUC{AXc1Ry6OYW>@UHOnt9(Ld6mK&2lwOGO zg%x)p{>N*S&>@0CryYN3J0IikG7GRN7}#ZfSA@s;&cD8jkPjcRO@>k3Ldtg$A#lpx zQCsla&Zh{5pzOilfP^T7$@bz!nN@fi5WNcbh3UGhYRx6P=*1n}F=2ZVmmcAfwx z&`E=eZp6ylQG3vDJ8wWv9@|qB5yGQ^4rmM$-de80n~f&s0li^B1Ge+#FtP25So|vN zy4kd7nmdsrc`$t9-WDc2QkpPUVTu*5!X4{jJx@WzR3L9sSHMD66*$fTeFB}Wg;aw) zx}vDjOKA$GGad;4D-z!_;l+ovfCQrVb^Wkdw@K6 riKxebB<$NJ-JROY+0% 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%0DXE!`F6ezx7V< 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 z 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%0A?=@l!z1i#!HX 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

        itQ#v`*(aZv$tT>GupPs~;`4tH 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 z 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≠>-9oYPCw3P| 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 d5I) zLBTM})RxD?F( z^R!#pn6io{09i%L!B5|#7W}D^ijKCE1LPI034GqVR<8XhnFJnQ*=lKu=a=l(OBqb*NjFllzoza8o&TbHx22@Wcm$ zpH`6iXTTFl20yL*5O_3n7fF5r?N%czsmz<2_yIbukp&KS^3=EDs?_EVM9=m!_%!GN1W|&tvg2|lq?{iE2|w3!3gu7vfb zJdj$)@GHuDlb;Ij=xnDgrn%?{upJJk3_7I?S{^0|FPLs{8jhp-d7qKl!)!f?**O0+ zeNPFC^-IJbw--*L2PRTZ`e$q1*S+=WQe;k(PLsSYv32q*it~AlmX*6P)sTaYg?d=j zy3TzfiAZ0HveV>=GW62Eno6j?F62D$JKmP*E*@%R@!B2LBN>F%6wR*eq^BDVEXHry zpYY=N=b;*LgSUPwxIFJ#74g~CV2?#L)rHx6Ss)#|kL-jePqm@{ X(CO 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%0DeTxM0{f4%W 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

        Y$Ip&>^P4HTeteTE;PN@ipFf<< zF>+hieyX^AwXt{B->23nL|`VgACi2G`}0*1#{+4yO!SyN zJFTX&&&TbUxd7^{BW_HWkz#=ZB0nJurLQ`UHnZ~9$5znsoAmVz2zyDB&;I#z$l zFQ=!L5sawK>b=e2Dw@-Ts_`H!>$!;VK5~r8GM%^N0{U0lO9}sT7OUvlOL!rF-AVmX zOT;cO3E+d5?;Y0g+4(IOh?jql|uLT0_8$ zU-Cgco=P1(J%)J|)JK2eKAZj$)kCrCcIVqZer*4C+5XAQ%&k6r>qu<~6>3<1Jc*Axu(PeKe{Z=NqLG%wfLmlE?b&Ayb? z6u9Lk;Rau73Ddb4w^I!ly(tm(}{`^2b_{2JIhDqIaj@S!1;W;zWzID1GbQMz`1fe|7|_s)ODytU6@=`oziXk zFx9zg+k4JXv|)1PuIrb#@OXJgGLm$&$Mc}M5+PV1Mq z-q0^^+41s5b9ukhFYmD9<&Ed^PVbku{CIg2xx6>#@@iUprgXAC>x*VRUg53;-mpR& zN!q|-uplKvzI4_o0BWB?Q!-y%K)foB*dMgL(vL0&mDTA(8h}LqsvCK%_(w5=1fyW+)zGUEo1Bc1#DJoolX{~^5tW{Q*k+l0vFkQ zxn^u?^F=1Na|Mh|_)>>*b+MJ~NC97&QyI%rr!qJ|^PbXqlCJkhZ3M#Uwb{y}J6 zLEazlHj|Tjm7A+~(0lVun9bA+q#AybogP#o)X%Ii?5X+PXlG=U(3R{ zX73oD2VI_Q&z!Gp$saTha!NNkmF><|yPebzY0)`v$c>cb$e(c)zca4^2)rbAXDOf< zaJ-Zz7Ukw{^LtKR@j&LIcwnE&`>UM^+hAsRGopTZR}Aj=5v_g4rgjFK_O5)X^L85F zeY$P@b$*=%bLqZ1ke$hcoxgtc1^V0I%DVW(Ms=zXz3>}#s-P(C12)xyPTj=54{r;{l6fR7Y2Q&OyenpsL3u9M1) zMBQeI`QI!DnO{G4`aR^!oc@vshNif)0yd%lFL5Y%1hTDo2HfM^8+L9VcVqH!p)>zB z@`|6QM!=eW`^WS1){kqHB-JVo!5XnjwE|OSxRtr#R_2CVnHz3pZn%}X;a28`TbUa! z)!5-ukA};-Xg2#DeL8Z&LsHIwiBgPi-_y?GI+lVC&-hBNvuF)QZD-k1d6`ci!pOOI z9HaQOs$3sdcQF8C2!8=ppl|$#J3bGjTN|=a(|zPdawYt5o6~aXXL6wPOZExSS;iAA z8v{GtgKftGPm=mVPdB;Sf=@a=0u8sT_-zV-+@TM|>jhX5qa=goWcun63hrEl*(}=F z7)yu|Bv-@Baj`rgucI5ML(!u4S`5&)*P^i;+KL;5XQq1LiMHk$zfB$<hCNk4`cwD|x+elqhAs;*#L#d`yn)lQ6a;l8bft#K& z+T6D0nWh}IIadz&JTXL7*Y`;y-^91chf0z2@MV0i9;6tI^U#L zgB3Ac+};jpI#uNf$F1_nsmDyuzCIoDZ(-;6^l2wqKRPjgIktko1r^{C_sL``sG!}V zH0sB%j$6$g$5zv=YMjq+pc0Y$Jc55LhC z(q*n&+uq?yZRjb`i-%I6e@1XmTd5GyK3~aI4#)}+P=jmYG90%KJ>_kV=8FIXyL#G{ z=tYO#u9{JQ%34|~RiUkxBd6d>@@6Tj%(ocffv8jRs2qLhVVOXRj_rddv&mei@|goM z=js>q=^^o7^xzAt)5Cqc^uYHmdP^>~$yc^3X|0lel~EGaFAqL#IN)+j_35sCK~gJ8 zSARgJhwibN@4MIh4)ujNs|#Cz3*E}~o=QVXl>F*JljZ9Bx^0oWgy*p8eWcwbX5ay5sJ}d@?r9R2l_-(g08v+F_-_~gK`{>X?+J4Kg#-whx@VMlZ;-f| z1bQ>ne~<*)@ooEcR5{dN8Kl`h)KS4uzcom+eW;`SP=7;^X1bu+Agw(}+hE7xmzh2b z8kQvOb6p$x(1y2DvRZvNf7UB`SCHJMWb{fF9snaX6LO{bs=*Cp+chbBvGI%QS9E*VUHvdpHhCQbh( z?a+rN%WXPC)9~top$<(}lFrZveETFYxTqF_KO6L?m1XJXzkTenx)*rJ=s`PVmmcUP z%SiXxP?X}~JxUE-Ho{bRr5dq&hD3j~NvyM*hJ<9qCggU^qjCFgH;Xg$p~?0=*UkIt z%=^$^)!W~@rrF(blnZM4%`Xaro#2i|sbIPNf zxXe@b!)Tq_w6DI~a+&+=hkA3Ivq9pWBogFIsJsyuFyN8_)k7hb#hpo@II5i~b@dMiBT19A7Iu6Bu0H%o8xw!_)>g?&<+3 z-1!S>oQ)uZn#sPRe|Um(Y68JVXR^5eV=u^&Lp1?9Lr+ z@aj7Dz;aDrJW$T3-O%cVNmG-bRD5Nlx2h8EN=BErivPgdP?jVKZ9+_F{N;R59G|MT znl9XA!+-`lj;JJK4%)hps4Up$|BQ3 zl=edV1iJVWoXUr%v^XKZV|I{=Ff{pcUa$7luFO zPi(~dxRYwuY#thj|CS+o07HCu0-E?2m*|ZcHUDcKFul72tx_uipf_?a>2puAx=j&RQF zb{3pTSGbmkyjBb$Sh>}y-2R@kx_y9Cx!Res)A?GPbNL$8XevT@*?6k9%cBvPCzkxg zu|LI6xsBopVt0J@##52gHZp|we{;T4ELHp-=dN^V0<#iB7(104$Z?1qTwyyCX=Yu$ zxMs+TA?gK|s@(ILY>OUq-W}ZLc9G-@T|5dh(@p&I=yU%zHD6m3hTbV7VaubgO{(6E~XQ?&i zN-Bj#T5{J@JTlbxoU37qZgZw=$YI#mY;r0)NS+*arhwYNNPf#L1OXQ}kX!m1zL(s! z!Bl3^auD>&4l=7;z+~M>ab-8<;m+DZfBBd~0k`$|h1x%+P{4LQexYYSrcl6tJ$@l= zwA@7W9aF%FJ$@l=%i|RaII_ntwCiIE1+3ZQ7ZRCsyp}4Q70F?2m0+Q;DrWK*`bz3q z0iU7s(Qg2fJ~>9yT0UU*g4SF$PifvgSq_rn?HTPv*`_z~i(lH|$ zuzW8XA95}Q49GbT1C1ZIItwl^<0(1ibW_uL?GfkBb;L_zLf~rLi4Tv}Aw4^HVjqVj zuodqJfM)fwoZhGns&i=tM1*dTbN;__R@Wsz%jbN>2W(l0>hu$=pk`#iDn@Udl)BD& zt8wh+OxSN;5jVpSnDrIxeHyDN);Nk+7zT$^utCzN6twWO9L~Tdz=GHyx}k-oWNt>P zCUt1NEENohEPSX!6D2H3eT4hIkRKKcliJi8Z9teC@OouFDYJ=6x&}63;MZh@(<=wA z6hg^l9ybcJvZjnXEnngKwoGyh9W7AgPED$uRGxN!IRFT z)ns-cWNgV;!aKo_7_x5+*|Uu9ptl_ND`1sRYbTyn7Q#{PmJXcNjeX? zB(W_>iUzp~m5VK%IsCVU3Qp6@Df?Ora#UFC*3vwwbVv{BZ zxk{CbKjbo0H+3l~Vw0u>xyqD_Kji8T>QYj~Ce;PGhA9_+$YsgqlJQE4*rcn2T;TouCL> zH28(je1#)(#z|pGDwE4K4sVlX3_)E1_6k)y+gQB*z;lrhac+t1cTsY0J~Y^w|DWKi z3(b{E5Tw@7LUYFoy)>AfbH%~z6~^9ImE7O_x;)|db_aLR*kou8L#9qT+?I#x+xkpm<@Lb6HZ z{XmX95NQAgp*#Icb@@638eM4*S-?APIbOj+lJO4Nna3r*0v6&oHgGHr?si@`P;8N* z6rA~c$Okthdx&35ttOynGUS(dN5v(V*GgC_(MZP6aOqd&xz$&cK`%uEeur(_M#_UF_in-7AiH zoA`DX;Zz7N+}^c!>tSM|Yhr!CFuz0 zPF533q2f!?ilr~alY)pOB#10QG!QyQpHe*GOgMk4o18lk^6nd)3W)UPi{LmkKS_pW zW$;?@Pav{A#c_xto4DQlrYi2|cTS;<43tlm6!JY)@fhjE*!{V-P&8fqXZ^};p4Z+u zP0>IL`LNZK_G2I0zFhRS{R7pQ^b1GP2Vf#xK0VmLCv z>QN^P(=DB5w&0-To3IYjaZvg~z9(W7)ZF-2-W??Qod3l6z>}ax2gkhZZo3 zlvt)$w+2-a9TGOtidHvZUNo!vc~s9;HaUsI7^F|7C>zmVF$t!OE4Cj(=~D2=0k7b! z+MFb&>k&%fWg{PQMEnCWpBgbg!&~YEuxoc-_ZH^PS@MEjzS(-;=gBg1+kl&&8%iM1 z5~ApYwz>FvO;7%2EFJ%D%Qms1veWUa?QO`;L_gb%H<(#1FN0=s^BFi(kRNPp9qq84 z4mUleB;>ACRz7OlG&hB2ZU&mU$xlb~^O*;2wrm;$S!V@aDA$D+;?w8R|Du~K@20R- zYG|S(&cmn5R!gLY2cKzupxJOepM1U;H$~<{IC~jsBAh<=f#E!~W!FlHKYhtS?zH<} zC(U?B;f~jRr7mXHUIRa4Vq^AS)sKfyW^R*r=nAybM$tj98di-FHt;&&C0^yHN1RK< z5;;L+8X@1qml;Pt`a(Sy{>1F(b^!T^|KgDmm+=LuV;EDpU7@L4v(Ce~`!3z&JUkKg zS1b%o!Bg^or-CLKJmdC?N}JsIpiSmLD0PJDdh)U+?uKprexLgQ1tY_@KP5sRxf61l zNw*tXA;>tpZ^pBZ&G;H?5@ejyH{*vy8S7VLrYGaFX6CVP-krzheXBR`Eyv_tactgw zy?F&-`_}uTWAloJu$^5t|CqerIW}*1khgDzmmZr*goN|tGQs$uUP;k}_po0^@Mw`C z^SO7nPdc`mJeEe~!EpOFci_-5b0``klX?LQVQLqE>$9)4O^gDJpkF!t%45qIT=g;v zXd`}_>iG4Al8Wtp*Dl*HBP!Uglw}#E@Zj&W4^}F$nIt1nC^3Q$>UcEI)*+^&6+O{! zBn>4-?U>((3YEb~s3lh_xv#{$m;9bJ_Ir;kxEJzULB+x(Uh3|O3yQ^EfJCxPqhZ= zg}v!UM71GEFX>G;VygBay{tFgh^n>+>CL%z8G$LFO+sLW?xDE1 zI5KC*gY&t3bTD0KQY&{(XoJ07++A8 zmc2vQi)G_wFT`-cD#<}jSS`8dXw|6Hk-`PEK0o^iDd^lu_0Ijn_pJc3-*<6?(kJc3`%czMQsjSo=QyJMnhwcD%}K$LlyGCbX8fx8u#wi!PDvlJADx zvr)i*uH(qrN1|uH5Donmcb|wIcHY$BWpMzCVVj9Kv&lu+Q~g&P64!Mu0g>J5#ltQ< zO*}Z@bc-OVxLet)mZ(ut1!HG-xE+UMA-sy>0Se@YXmBym(s-fKj5GGvh^uyV{#TE_ zd_V8?;Gf# z-Q%mQuKfQTIMHCiC$z!Rme$ZoJ4wBiRBTDrng`F36FkwVXoICKGdK=2b!M0v3Y{uK zPf~dLa1e`ao#J%p=(M!jk*b3zw$0%V-U#u6+FHQdIRq3hg@6d(_h;|tIhQ1$o$2rO znm>NLG|xW!zSmxR?X}lhd+qq>x6+f!%VLq2fWndM&d}vBTnKqtKDaUEmgXfHJO^R( zUtKV^3jH;ESCX;k>318CZqq!PzV0X-w-6`pz3lbIdHeKro?1#zJR-BD!4gfj3jpW^ zo%YL30KYNMl0Q9>`HgPPY*pQ7TM+8zTNruZrbwXv`iToaTk*eZ+r=- z*P)*k#JqS^>l@1@OuD*{QXv5D#Vz@v*yuOh(Hm$i9{FR;xqXw9(w##C!Z?@|z))9R z0b+b;A0S?{I6di0M_kl9T$2QM4>C=9K@|*$r!PDTO1Yz-iH~L&2jh_}^Nv?prk!)x z*$8ps84!F&BHfJZj<`8X?qlvpA1ZAmxB0L!M$|qJB$Hp_6@y(sKk`S7OgO{MPB6is zO%AmASMsYLFRC9e(1+1)yQ81)ep@5dfLL6#O>h38?{LrurIQ~yikOwfNCn-!OfZlK z$rzx4ey=;a%N@OyXYwvcCqcS&^s|7i^XpT9zvc@*Sj%oR1#x#48~qBc0)4NyyLa@~ z(abxAm~YB#yzWA86DS&jd5y~DDAXU!HlON0u)XKD;Fsno_dW=k*Q|-^`Hhhucvt90 zZi2A@jX~Rr{nO9evkG!&3@^-kn`=Pivi0U28fyixGM_W;9 zbrz=T(Wq{lIT8l`<771^oDh-huOHJBeizM9eNKCfT(I2Pe<(48Tr~r{n&?+;ayrgE zJ2+8vRND~Zufc@CvA__rv%eu^XQ?6N4r>UBwZMnDf!6j_=l-vA|3?n1^pp3_dm>HV z*80wi)03_mw3uUU1*;TMTj!vGZ6P-`b768jO8Kh>d9QaJq( zMUk&6@>wEh7e&6TNZK6nH${=pD{>2wmlZ`mrAW!C&M%6548ylW#GPT{qUzk_4aD&_ zJq)eRw3!{KAtoO&m&`}(uL#EAOn#MI>fuZIDATv?`Ja&qLex`4 zsaOA5h#>hKt2~J2ha@DTf%C_Q?`(X z>CFLEaNTUBYbI)n()Yhfx*$FLYu77XGjl>w`m0KRN$I!G1znZJKw*TMFg@Ld2{+LU zpPau_&ZQ!m%DJ7+R?w3*N`GGI-AXqn7^MqZ-w%pErQ|J2_9X`jN*U<2$w)k?RXh{PRLG$iSF`lSF_k3k%6$ zD`RD-ciGY!=|7odFxMb%D-v^MSYb1;@Py99wkY;K6I=PE*{sJUI($gx`rU~#CAfgN z)`!t{x^nmi4aNSdviuvQQE;j9#+@&siRCabc`L=fbbTDF31d8<9#<}T$W%9cslLXp zz-E=Uni?)rlfyo3s%z!`K;_c8$`{xG+ZsBFQDgcJP{Z}A;q@kCBx`CAR+ZMUE~r7@ z{xw*`T`E~oREZAHrIqNArEcguKqYEbJ^81iN(_RQjOCG_5`71#M6IflGm9z_`j+-& z>%fK8nhO6hVPR1ygvcW_#5N{u#7{~wV+27S*qnxTFLK%O7tC|61A!heyXUFWy)Ft*c~R<@TK|=P>EVq zCAkR&Jh?+zODcKMuA z>@Aad_)>ib7?!Q8a@cLAZtBd#q_}6Q7Wy%44!N?CON?o@C`{!=tl}v~j>FeKY}%UK z36+9Kh_qD(i*$-#20v9C-){0w@x^Bq$1e!tEBeGQ4C06OiC-MVSN4g&C5YGcz2f>U zT2Apt_KCNcHpQ3QsN(#~f_kd^#9Mrr;>+=Qaeh11Q~cUK@pf{j_^0=Yw-YeMn3@Ll zAcv_eKP}E46imkCVZ->v90%ViysQ01D8reXW({GQImoQ5$Bn>^b$$ZjWADjqS75l_k{_! z#1JzWWw1KCh+oa#Te2AMPNwf&Fia{XOz-5veMVFzCU;@hcY37>N)oqPrVf1X>@+g2 z%G+h|f&8Z%o9ExF!F#t_;n#L7gKA$@%<5K?W%v^Hfo!sjH&Q=b$Y^tF?WR6s^oA|b zW?)kL0>Y#vIv$Yw3FY3Qj!5qJgi;cAEK6h`qU^hrWv6VJUs8K_ZdVUX8?Ym{O8}<6 zywWGvj*?uhs*}REPgQ42>oY>@e0@{HoYVW~G-Bv{&go&!8U1timb7jJXKH3&OO;HVw&aK9gxG56h7ybuJFe-I~vy&sklP z^VTruvi>=1^Et889AkeBzkOL)VtKxVGudCEA8JEWxEo|Ki|l3B7`YF>eL01c@`9!; zD;eYpRRf~0wpjwa5Sr|@c?6qPDn?WhPUvS(AxCGB<3&YT+zJtzc2vivAjk2sZ>w^> zEB0+C7nQyT?AsCMoSuhLeg;ahFB|5Z(LZM?_U#LE_QSs6xA%r=0lrn>FuUSLN;R8T+ck5(8sjhWd-fA?2JZ;E70*V|A;o!q8PiylfwrOf~V9 zOAPK9#h+;J@FmlOc!MeQ$sm$R*Vrt5?lpPLSeMKQ@*8}~*TZdX+X>1HUotz$GdJv5 zP>(^Apg(hiJO)RK>M;lsZ1PK8su5lr$4p%JOM4D z@5_R`%ky~yLS)7u5;T0ta+3#o!#8_n61%VTl3wz&*NVCXc2(!u1YPXaCQRNSp~fc6 zCLzDeXB`viFGqNWCDd|B&G=v$MBTMR&1_?WBSu&5rswk2KRJvQHzjLRY_j~3?A8=- zWivP0V|qh1r<m2`^Flh$nQdpRib6W?n{&GtYg? z{ZwZ6sU4fKr0C>wPj4Kh82$}OOdT9OXSh4>piX`6gZdkHF784(r3)wvmdG{o2K=KXjcRcP0+taRSp~bOZAe=}C*D(ippx=UdCfqv@h7!zllo4~^BkGu6l& z+@srguij1FFo>ZWyX3(#Ef4$^aWsfk9_H^*?g(@mxx-}Lh?^`WpbienO8mx1I>9Z# zR`^}GTrzUBZU2DqT5`|CyhCLGW#+xhQS59?1h1hu9qG|!!9Ai)K+ZU#=y--uvBwTw zBs#%6(OkWe!w%gfI)R%+JZ!^D6Zq`lDpA!53#v}kY+-ja+qeivS})ghN$z$5j~1t6 z1l4NBDv`17I90-99n?4q~FdP6NX?cCzvbO8D7Q{SQRXu^51=q z^8zmqVj&ktol(yNq?>RMjK<{dHF0?_=f#hU)6tYn%DJDi`J4ZxQa`3t&mFSPLH&ty z3Ym>glGg!-FvB?ISh}61u5;!ce0zrG^=$~Vh{Yoa(U`b%veK0q$>J6cR#v@zoH$Po zPi8)Wz91z8#>B5P)qDPpUw-g>u$lHpyh{6ZYml;ITqX=B2L?4&O9KBHqO59VkOFiX z1O;JHyq6-ZNfvPA-gyIcToFxuYX+9}U{ zx?>}a)?-|WNLiM$5S345F@j|{rnOS7?Y1jqCQsda)pT*C~ z7%5}_1AcKTTTk*wYn2QRS7&#%$krIESek-&-6z7eT6NjhRkLU=XDoEeI%@5=jhGHG z)ixVPuA`hn)j69?3b&y|(MZ}4S2FoEfk$60^9?#5K59bTFEO?lTp;}l52_>bqM{rP z?d7(HZk3kb_*tEPTgzwh&0`n+(%c9BNEp-5&oNN5d(db7s5BiXvi&SOQ>~e7?5WWL zR{lnoAt3nBuU$ueUjqdLr>qwc?tPJ8+>&`+_tx^3-*2C7PU6LC?$D!>ptf@_g7H~{M#Na+Ns7= z*IgxCq;HMb;~4Sx89y;iR913z3@TVbOOu(>Dd79?3Nj|5J^1$}(V%_hAnw7?p{-6W z59rqR@)}CrCKY*-BF~cjGSnePMt#*`ML$YcrW{m%pJsY$V&0m!=t&O( z2fZhS;RNM$%cJrn;1hO&g*N>CqRlMrna_!0Ox2ikx*QQs^CT<6>{7RNU{ zvN9v$eCK;?n;J%o%$e+trJ~6+hO2Z#<{w-6%>{v=4sC1dtYS4dhydeFiF;y*DM>g? zG?B4E^6oJ_c7k+>5ETt)<}N?gZg`RnmO4crW1Y*@O}8FgX-N$R4$TFB<>-Dj?BG6{X47&e(i~=Oa(f>p?W24sv+>& zsb;u-bZl6IyK1EBOOF^wXLxEYqN@(3CH6H2HzAtO@eOj6q)%6RMLvCH-*gar_=KVP z^!+v+0$v$Xrr{H?nAljwWk@YOr{k{;IY+n4FGNU5cJUP!5(S8KUXAmwVM8F6K=SL` z>64dBvPBi3#4J}h_n*b4d&LP($Kw?mUwJRBJNIuxxocEsSz+QCfAJa7MILov+AZnI zlPr9BjuITe%`sqLJUy`mOKywr=@xAB8?&NX*ck0NKeg+8|CS}A*#5^4z9pqE_l8YE zX9V+X6GPkB;jtY|=|TXt#gI032|zT2Y2x|3O*5BM-;?T&8srLFi~B$eqlYGJjd`{= zP@PlxspthWTc8rN#7Q{Xt#Evzw zcLcG&4r0fd*yTa&ok8rm@a2{$0HnJ})UA3uOQIf{H!ZAArb6>5kRRRJ(7VL!06()g|u(`q{uo13S9)X2$t-=~MVXpF^AFyGr#()Yo z+^Fyh8%`*^%7$AM?zG`ng*VwSBm)1EHauP7?KV6^;T?n_$2D1fy^Y+yFZgR?c|Guy zv2xxteq$`n7{#4};H zozoe(30rD{t4#2VAT!UZ*f1v~YqHrfjlh=ORPY+RpCk-o~p3K1jJ9*vXeNV2_M3S=(H!PiOqqHEUK*(XHyJT zI_lxkU_)pG0QjP#mVH1;*kVp#t9GcKdFzy%9Xdt+oiV}|tjST!*IflaP?mlDOEzgt zkTlLDi5<;86(l8sBvoaJT6T4iG&M+SF-cQZYFUuf%MZ1+gRi?vbSK-Pq?FyO;kh5G znM*88_xX4_Px8{ubW>YOvx8HcaTpqz(AJKS?!Ov@=f?|MUy9L=vMLtdEAkFK^(W5Z#CaqzO{VE@C8}iaeP4(YiG2v zjG@Y1h7?rt)m917b>w4>FPs!h-v&a{CVaKE*qG3?sWvois=X^PZK4`$+C)9Zv}xWt zSxyzq2i>o(#WltqmGnQIvY&^{`U|dNzREs$9?u+N&ni)bmR5p`hYHWOVc?HY!G=dF zyugN;2Y7rNW-e|ql!UU(2VRYB{5XY|+c5LOg0x}gh81bU%nvKlhFcZhWW&r8E7FFU zD^{cpGheJo!jKPmj;J2dXL4GG8*EU8%Jz1RiZz7Es~+Ry%m%^u zgCQ8-hhXr?P3lm~%zK5oA{YtJH-O@&Mau+p4na0a3FdvFx#yGc63jhpo{eYzS%x+Y z4zLJp7(75SX2amZLPInt+o-UJ2H}LlA{vBS6c*7S+^VpM2H~j+i)av@ZWgu)x6H_G z<>8JFym5buDW&YMd-@d$FJ;>e7T_|R2#H-|{@vpv-8^UeA zRBy#SyhZVGdB0DWpYrfoWfP}WVbrws=nnbyTx(cJVg`E?r(GSD#t;S<98;v z9s1cY$OK`RWupmWz7=N42Z??qjHaGDOn-|au9gLrEoGXaqxv=39D!Qb+2XC5LV(8~ z;A8&B*F-I5TT^zB_fZCLOU*;-u{ltisa&O>%;J4vi<@m7&g5;1=9Ogq?qx(A(2Zn3 zQKr1InCK_<8{0AaoBnZdrOmChXF`*o2-E1z)3(|fwv4UYw1r9G45SH@-%+Ke5@1aw zM6qD0Nuam&nQ*?fU`$3vfS#a?#beq-JRf?PtVEt zP9dZ1uAop{+{R8-HZ6k5_t`c~UHsY4=vtq4&Xgk(P}^e5CVrS@Ao&L~5w#t?mM5=& z*qNBNRS;p0ut%Xno+l;9;cN0<-~oP7kC{4W@*`@M*vVH5B%$fbpM0t<$r{ILy*x z7}K^jO;acA5@%lSvP1wfb4R-&IOz2Rl(X;oxafH8t5BdRcidu=$Zd#+GyD!iSfJ6= z)xIz&xK700`N|nT{0kNu#oB`!>HI#kOe+@#6}1AxDGP&g%=KF&Lo~GZZ?T1hP{`iS zxLkEfu;om-#T4c^yBCrCUOKsEZ@KGCVvo7vRSNF|DK`>3<*k@=ST z(xbER^da=_%|#n$5lX^OF9o*B{K?Yt?=$+0T6R z8YIM8WB-7SLPpx3~-Rm&AmBjyL#*=quo$cZH+Er^_Jr&wJ|%@=zzAxq%IC?RG)777p%7r$ zKgwT!E$(F2(0kTGWhEn_kH&R&@EX|GnXd%L-3N8_$W_Aj&pUX(Nc~MuP<8rJFTaPT z7Y?aJc9UDcYi33szC=PfaUNNy*d873C0t zYNG4+PxPamNnP4)>kJ`))R)*NY+SD(bp2aU_Y+^=ymWce6IZ#_`%e{>ztcb0*Lgb@nVEopqyWPfm>@@nmIkzW0&fV z+&^)?(@PUsQO!C^COh;i00){6&SI z7e(eTD*T`*5+1@_31~NQ?|M<88R=1A&yK;mG0{IaA7w5od^-O#e^KFMg{bhN!mvVA zcv0c-)A_3N7ZrA!IAi{QIoDo9`5=_xMTC-z3XR9PsPG}m29TyKij6)O72d|tb#Tkz z+Ba#2Ci>o2(8Z041WL!EW{z=Z;WVlUTN~iAf-Lt>GFi;H-u|O)aDZzITh)=i_Z9BH zfGY;Y-7r@d?x&Wp&0}0$_<_k{+MM5O+Z^x)!_eaD2fnt@MEL?1n60Py+QR83*|hX~ zwWK>6rMDM!VdG?K&?Yv})rIA@0kg+ZRO(XWfH%0h;1`kyy1MX>wtbb}KqNgl8vWvyKQ z4@j$WxAQie zxy`?qSV9jg+uslH8}j@7gGIOBe*44lV)P4!g6jaeC$|W~&qF81nBf|C)loL5jgj2h zf6yK0QxwK$wvO}*Dmmb@4@`buj#loES4eA9DGsLvmd5To)+cIa$4QYj+1J>wx*1$Y&hQ=BB)do~q^#1~nhA zr^@#lJaQwJPx_T(USz)@!RWo+32$ClkjsvTAbQ+w2m=SG;#ze@ zk1ZOodRtRF95^stPfqQsRNVV@Il0{$1ocm?vZ{;8+fR0GY@R09p0DnRA#dXC$> zx0q#u8y&s$!7n@N+==|M(;p+3#;f&rLuF>i`yv~;q3j*Z^j5iO)GtIGFG=qu9eIL^3-wh+-Z{S{1r7aCEv*T zYD9G;EJ@BBI>}Z;cbKQ_U;jEtpX5HE_H4Axl8uvSv9WhMbK~{eE*(UZextgy^F+DP z!nsuhBEw5NCt{x{4frB;T>cnP_L%V$sEc<<>zV$vWDcE3V~Aoj0^1<@MJ}@cknjFn z+Vu{ZW+^lFJ;9-9b|*1_+(%jQKsJE$by{x%$e4iva_K`sI!{^l1ISnsbC16Br@-Rj z0xay@4giaB1H(cjIQv%`!c{a`0K=&F1csuO)vRv+1e7uZA35;ATUQ6^H3JO%91?S1 zRSkI*{Vafd?tC2L^-4cJ?X_;rX|Vz+mZGDJYoMQp#3X9U_9k68wS& z^HJ56r@}KBOh_u}k2ziUSt>gBj(sqI5xxTZA;$+v%x&P^-}efYw&wm@Uf2oDR2#PB zAyY9hWV9z{8#S6sXqM5~U8LuJ)TN1ybMH_W`L}j)i9d+cp6U1vz_MFHN(xCP?kxHw zl(c?xydGY2FK;mL(j7_`>L+$Dp;0CzXH+9iXg?tdp~~u?BP3l6T2BQfWt9Td$TNCA zV(oKqLgRYRd2f10yw_shOL1>coQL(052y>+UBvw80&L$h*;An(Xw@=ItNaNLjXQVa zxAD-&@JcgCZWg0Bm5JAN$(y6cOGkHajYTHa@XqU`no6>E$9SF^w<7#ei$S@5`74#b ziqb{--Q(o1QvQ+Tf2vSFHn_*EpI4A4)r=zl)5ZA@9W(zZ<*y+Blg0UWA2WYN+}p)y zi+V#uX>I{8N{zTIc`EK5BKMQ{E{uD&(#*jj7N7tMXN*Ca3N8x?_;{x%{{|J@%J; z5L+d@$CBRWr1vOqCuX;Q{^MmG&&_#1@8B)=tG?q^&F6>|X;^#X8?lBLoV2==zWgZu zGwwc|jO=&u^g zRX6j_$AHJ1ZtA5$vB7faUTygjX~Gk@L+ zmTSU)ppuIPJgVqDnecx#lJI$w;5qF>IEkLOjO~&&Hdf{(e5LLs=?k!ZNuEPN)yZ=w zV~EsYT^iRUOJZSk1!~VsGW8U0NX3Xy+L(KQp z^O%2a&DfZ?V7a>4aHr|pw?7Q{WB%fGrt7OZ`9N_dq(=>bu*FWh^$rt%ZU88y5XGR3ZVc=!ck6Utw3e%5{=L1n z=Vj_d-J|ik$3@s9doN6%dywPJsaj}u3J%-htc}+_6ZhVBGjG$|7XUhb%bdIMlBUks z%BF-se;c5`0ML5`bh7k>KwoMq^B#uQJwi<-*+3?FBaesB2gU+*Jo17tCh`W&sI#n` zQGC2Ei}9wbKzm)RZfD$kf_VhmF9Pj7g7!|@?~X@)$4sdZ(;Xs>UX=BO3_C+;XX24Z z;&p4ts&3$rjb&ul7K_O&D;#}gb^vWYy+E6+W|8H709%$?EwmprYh1Xb&GNn^SjTn= zhk5=wT&!l{UU@h-nF`{#wLNXFT`o(^vhai}U_E<9WOJ+@=WT{sIE(Jqd?HAoePy&* z5sPg040`l<(A&u7(}LOeH8-xeiMlfMo4U5v<6ABza-qlBGgM>p1Y?b?2}U)I1)Qf> zyqYN*Swc%?)`ksGvL@lK5>3ed?bwfFU&imG=Wn9=+>c@LEdL>gcR_b^Nh-!=U)XNX zcj)iD2kxT4A5oy(I9c@7pzN=uIdOlZu%0MwiRzoIY0)x~dGkRqv^MEojk4!3{<=%j zUN5BWAT9T0__J90Kg+Z!q;D#tD)-mol-%D)0*Gs~>}2F~iS!~R>E}d#swYYor8iof znG`qsT}gkSPqpqU`X4&LI%qrfw_&GB5{r6vAsN(0B}LT+cvqIY7w_n${9@_;^s8`x zdOFyc{uxRfZcL5zK3|p7{t_DmK5*^E+n-UY%lML>MK;aC+mh4BMiHSY# zE^?s+0I#u&Y>4Wa?7!e=VFz*AmjJ$CAMux%ZRFy^Y!{8*VxbIMi`hWDx!OCzt>d47 zGSq9G$zZk)d>H1b*Wx=&yxBS+y@rej1Z=Y6gy_LgcqaE}Im!znTI?O%D=TcGI(2~-tNDUjXHJ}gA;2>Xdh zik%W)FdKlRsLY(d2}p{eOcs4aQq+9UeSaD~`QR8?_Fh|qedV2op4>t=LV9B8hZ^bm z*HZfNSyocxTt;IxuMa9HMSq@raE|0{7>qonC0>gY?c6ia-}DbHZ7>8Nn?y~jdbIl8 zRU#Ca;uQ!%&wrKF*pC3bZY#fr%2i9r`o5ONO4oO4PitbDwe50^lTw)XPMU1;9_1LY zl@NzSEs&(QHi@^tNT;qC>S1*1<_xE)OC0#Ui?7no#I4EnedcX8vMIy3#DVSlCVIxh zp?AEP^e?Dr8zz1S2cM}O6Yo>jCkLD&-b0>0MAUF&(XM;@yPyW(LnH z*9xyE=%3t#b8T;TaxmJ*!IyL1T4-(YHgSUFMYVs2huK`WDdE3QKz5H_0iN2CT$qOR z_!o_IyAQ_(f6`53UOrcd{z(xKdNgkr7X*&BokTFxd+If3AH9)2VbYozH18n;10N1N z>0LC^S#*ZTgoi1>1r=n)1!TN_ms_{SX-9wxW%*LIJMTq8bL%&|^WGxRc|kh*CAVSC zsw=O!;tJ=-83^E5uIw7mq6c!^yu_wpY~2>JH*6z0ovio}y}TywRmba|b<^XWI82d~ zVD~>1jYoLV@A7H^?TG#yHsCW4x105Kjk_`EM9&)88*mV5?YDU*WW_L!mm9KYoFPoV z0Bc-rsrZ#2%*-ad%SZA|YDF%^s?}@oMeo6voL`V9B&N-~kF~&wCBHjxDYFsNi@%Pb zA;W*;HIfT%p;O89Cw@R2+rn&0_)E0$a<6+TCmo#AH_3zM%ArG)Bm@0w?o4pCKfR0jC-|!@DO=nLL|pF?OaC}Ueu%M#j(BVJoSnuHs_zl-P!taCp|7JXLB<8Oc!DDw| zXBZOW{2$qn*;O9w39-6Eac?6JVd%6>Su1ksG_PYEJ~eYxk7S$*)z{%B^$MR|JgLFm z+nja5Tenfph+(MUq951k&Qe#JekB&k5qT7!yq+P_#69hqLln-6^>#wA19@g#9%@Ip zfpY{pdnjxhl{lwOZ)80(keET(i9t7y69o+4H$Ek_1<*n9p3H#f>(ri+^?M~enw|8$ z7N#_r{#SjPye&=M)9yyYw3NC2x2F>6`uAMTr+%C3KRBI0-G+|+HxB7J4Su)bjkeM3 zh89ua%n|-+-ui+aG-Nkw+eJe_hRdAK2BDo>jG4TflGi zJHw0iTO!V{x24`V)#c>s)oOja{x8(|xc?uf^PO(p9%${Hv*P|e8bnV8l9X7(j<%0` zyS<#M*m)v@s2bkAE8R@OADv{beVgljt@4{s#XI)4or8`I9ygcC4({HC^IqJ52}yGj z_(%3So8(Y(10Z zdcA($+uvp=>U+m{20Z3DHCo}On@_km()~i}`kL8|&Z4tL=w*79Za&cn6B8SwH53b2 z^6p)!tcy`bN0cZnw~G7>{=xuZf8F|yy#m317!aI@omRuEZGREY;JLvJzQPOw8m6$Z z9my?oXh3kThuh#Bj=0T)`(s%}a#iSFPT(T3+;Z$|XG&$xcsHH*1_+jddc+g*nmp8xurYj z0j;C+#^DhCktIZ5Vyl|jJ;S>Wfz56xV9U&T%Jr+}?_U#{`Eu7G9DtM1^HM3jzw+_~ zQa$gfgnzRLd@?<+l@C%X?BcRFi5BwOs7Xk*@F7+YQ5fl0ZiY#oS5%IpK6Z||FOm@U z{|a}Ke59+Dg#UBpm5BObo_+-j66qVF(3?d1S6a4KIFd}){IGD}%})vaVS$6Si|C_c z^PE`HU#b$EE({6`&+~sey*6wKkOATreV>-nt=0}z%eGJT z8ugqHrw%#a7?B>o50!c*8;z%v^I#oJ8m&6*_I!NsL(cq{KuyjVrf+!Q-o<;SrazK& z4`xwe%*X2T;KVuoOPywyR#$h{_tj&UH*&zM$QnO2g_b!sn^o>*(}{{qE{czabW@a< zV{pE0GVp}VHzo#WTXogz>dHwEE{_?5({3c$@Cq)s6W%**uEcJ+^&vlQ>kn&1!)U8Z zH^HEJT8ZrXwo}Vo7&Xn4h~jfMpZB-drJrbMd~WX-9Zf zF?-?oM~^naIx0D#nY)WqcHG;i%6YApW6U7;DA%uOyJ^~EO@o7qr1jk~xPDvqlQkdb zf*t0)l#jy*tJy?)d^8bx+MU;X4jpLn9;%tG#u0rlP%G*2yy|pP_|v}(vHNCc3-+p* z@0xc(@23kAEo@8FWfBct&ceS}M1)r$Z4JV(MQy|dEyU5|2x`uvlhis2zPdFDp1gDx zeLw}%iD(l!)V5#g;!dcOT>9srK;b3J< zIMbm+=2B6|t2V@*xQ$S;bC^5ZPO>Iu!eM!b8DgGc;Foa?GZ-tU5D6wT2hB97dgZ{xJHc#7pQF`GeW$fz)bya)hVA$@h{8U5B6dg3Wm~i%AsaQ=d z;D>E$zG8~NxttXJ3&61Dtr9ToVWSDbFvip|AQ)DVR0M`j{j^}%L@?~pD#Arzc;{5x zHx;&h>mg1Vb5Xya)`H`f0&1l3>`Q3c^KT*#9vL1{DSupr9`jQvd@sz&C;o z)nw4W{$Qw8?FBH5Gc`d_6dizJ4B@OFG^PBusc#aax)a3cUlZGn2sc#V$DmsA!ge8O z)r{R`MHt$8ljLN)T5_T`lQL4YnN%o8>g8VEkNYf_3z{-J24&wm$L=V~V|J9QP|Y<1 zd}RjNr|r+a{!sw|YC;U^oP>w-uGck{l|+E$D-<3{*!$LuZ0u6|Zo=ubul;cutJ=`j z#la}lRgv_z8K#gYJIz)`vHXt}{OCB^)|Q@dw0>JM z;G_fjmOu0qPr{VQrmkKLRt85uh${G$2rpekd1Xx(f7i@>wx=OHZ!I6}bVxy*ulv^G zhL-aq>^EswMfa%QbLX1VdWRkW#&sR(=ap?6eC4+*)9PxJraHFGjJmqjo?4eEVSO7mI+yh38bW?2;Fo)z4*1U|h>;kW z$@^d>#!zMUU#>m1EO({huwz1@Lrn-dGrI=6^A2Gee4{h}n)1ocp>^M5nANuf| zGcNJl9}$kAXbB^ksYaf@yz${&JteUp2wGEDPbG#g7LZW4AdO0jfH;vMM&GqYZzemUu_qpdUc!OPL9_X>)AM=o$@f^+C z%HSC6R}FWzbnnXS-WPA^jyn^S9A}bLn6rM|AIj0s6wslWS<`aUKR7oYF+$cK7R>Cb zj1Aes{O@7@!zw~9%em=uAdJel0D5r&3cnk3m3s;`5b|XZ-82bm=c+Zj`sW^inPGOf zVXKo{AgPu=;*+oHmUQ`F@(KAEvq#Y3kdM)CwVpc*EH0d%5_OMb8wFk`Qb&27(=vw6 zBFTOeX%`mKa(I5kfdW_%8b}k|&9$N^ToVL+W*(*nWye#)1%Dq(xxR2%> z&XKI$^*o3xn2HYQU;ZxA-P1#R_?IX{&M%TPpL%mXb)!xFG0$h_Q?JXX{@kXP6_>pt zpX%Gx&BbLuN2>V38DNtBt-AkLtACUGD{{hw9pXV#yhZ%he9AZRk$peX`q~9-8IosI zXZQc@sk}@7L4;ghCU*s6Ev(n#_kARPwWcB^)+2#P7S&ICH76;y$42hhY@>&4_vem> z`9qqXgnlN|XG9s5f3wan$@EWVo6o$dKpalsXp@Inab;UMV(*78|>YG z^G;h{Sh_$ng*UArm&u{5*_+6fm)(xIoDQfjMV*kW+B8ur!3`P@D=akoh2mzn7d1xtl^3-FBrK98oIjrAt{xYZ^qgTWIi6UWCh!vzF-$$7vc2vSxoq zu23eNd5PCPQ61Iq)l?Ql!!e}7Nj5p(Xubk97&O|i`ZO9XD+YFr5<^ySTHYAKd5sAY z1NFR~*z=5{9?}z-%dLsmbz$sc<->^>YDq0atP4_m?01Re$g(yFEoK&U0&^mKBT0^| zqkd~#u*vsz?64|4EHWOEbzWV@bZ$9i3Y|M`!5x}6)4y7iuHQD@YG7QGR%2^KYHf6i z)|LgSNENgIk%~@DUSP+wLM_Dn<*F#=ueyzo@9QXKE-{|k#_5a zFMoy1%oq?6e{{Rv!O{jD(@AdR2@EQ97DBeJBb2fKdbu2nFLb&H$B}{WJr&CxHnD$~ z?S=Ai#}&z{-;zL<{ba=2IJCs<55d!KX|z8CJHO>z`$G`+TWa;gjbQ6$M(elK*obW? zL!~eETdHjYvT!qWzhx8@=~KLknSeEMNALFanEg&QV{5GH7#ehc>;6d_E|SaB3&BZLM92A~0|fzBwX zV6-Hj89VrJW~eXuOKA`i=Rjzj4sB5Iy``p^0e{<1b#l(|KB|+Ifxhk@9zxFR>&`U0 z+8HksmrUP2TO;nLuRAE6*)a1Ct_Y?SZ4l7xk9HOjeWMAys<`GSWG1bGr6k`d+hkW$ z4b?PCJJoe@zq%@m>sk=jRZ7hVu4@o=<*uYesXp^cw;+LT?5E9iy(a?jEP1gAJP)%% z66rHG6364z1B2)FJal5R6cTt4?`6NWqc3>QDb(CH^B9o9G=aYoUyY+Z{)4VkOsyek)9(HEdIl5=+!wBHnY)cWWiW)7{0wUk1vDmI!( zekcyI!=W7^zPK=!m?{D95>f;o-r0__!iA>8-`Jucdvn;_eRgpgY$JM|28|}8~un; zu!!SD^?ANrII+Kr{<@=evu()Z%(N)lV$kBaKjgA-;j5k#Vn`WsM zTpe|lj`r=}^&PF)y0FPGZ}thY;Wyu^`K@+8^D>-WTTQEV&^=YtG(C3-XFF-8QBND2 zWzpM2%#YSvJ}*@F5B&^Wny@@z^t?v`mA}>Zqv&__g6^(@x}Tj5<|eS)S}o*c&&cch zW!HZUeg9*9^!<+)>-)7lFzrIofB00^&t{bUsQod*m5v|fKMV5lBJICuK%nyvEb<~a zfWG?`tK>K1ri9e~#B%4saGPlSt?ECo^f%F76)@4}>#q`f0zBp#co?3>z@t}*cWQeL z;8FLqKyq3OZ{P_SzTs4SV~qF@n%mJ{6#dXJG5sXaGvyEPgcLuyzq3nbYypcfi2Zy4eNtf)m2U!mp{S zd3s<9@wFj#Kc60&LOc{~SiA5rp5M>wRayFsQ=ad;VObgx8sX%(EG_tO$J)$A!u+~7 z8@g9q^;1&j_S?_RVq_yW6%}n;*Y~UJ3&oXrL1m>|*Rd-5G?nG9q)0)Y(Z@ciHtGLF z0t8gcqOO5z`A1Mp)XGii>rt&+-EuO0?)QN|CI+Nwr#s)$>p+M5e@(wU9kTQPg?@Qo zs0r?)Uye0&UUz)`@@oi)Ynr^nZI>Da^Ex9iY%Kd<>X+TG$n$3UhNyjMyeR^&BKaJ| zphV$+K_7*GWhkHepX&Q1t2>syUuk{x{kp~eXPOU52J`y<9RtjV$xt*O>P~-s|52;& zciMl+OqeNILtwF=Qt_}>>HGDY*&ayWubR>KTNVG?_@2qD_^-Gkl&lR>^)|;d#W~K( z=gf`$1FNx;&xtj)*iKS2J;;V`BS@}x-FT;Q_Jng4BI?Wd$uPWnCq zVLo@xHaL-LREIC(criqBW^My0IkL$!x%F=NHe?+YT{-0W74vq=+XXdpEK?J)A(@~R z9b0`>HET4vn;UYr{MUcBF(q|{2t?04zR9teyFr!p+mN9gc!PQp6guw->UC}!%nCj4 zl?J4d%AZVsH1^C{Wj9vj?tqU=@*E7L`SN6XBGxFKH?Vd%W|U7Q2a>2LLZk93!V0pz zu3h13Oehi4xi6c^HdFw&`PU_67<~kY4P+$+;KQqIp@RHd?k(^+_~vWIwMOC z=cZ57d{879tuz0oJU}s1=?_pl13i}+dq!9-%!}|YU||~*25Bl>T?gM$;dbqIktb7O zTy|lAdshX>EMOL+k#f3{_6|7h&j3X2&$;PrrXhWys`BpL9oyP?HDzsBMbGLy zzI!-8Th@qWaX4}GxUTEGqkzaxsIzDcD@gNM7{Al;NyS;5cjoJYu0{Cc&CiwL{K$!Y zVSWPSck|fqTJ(4O;(vU|ru-Bc;5+m014Jcr^pip#dwyx!1FNdBuOMSs*k5Xw=Dors zyIM;ZXn;>Gw!E|QgeDC1I4LQ=8(GUVsDcbhWxeI>QDndd>Qjn|Xo7 zit(N)KdTs@?g{WI=!h1r#j5F?gg}$5fZ3iYGn{;BTAYvrbt1w#Lt7QGOJ5v7~HVNN{G!f5*Yu8_)mF#+N zx|yDG7A_ZjXAZSj6x`KXw{d@Q(Y6rxo^s~T*K+pf3U`|P#X_cLf0_0L*I#b-g=Xu2 z?<7wBktWaNkXqZ6zzolOBlA+p)ZhZG|}@0&@wXIu`Tpt*e;8^rr_omg)b_}L~eHy)+U#HRG$VQzc_ zmzE!8cUVbQqN@^w|K5h9$VBd5gREm)9s8VVKj^)idWXHDh4$QeOec$S(aZcm_IzNi z?mU>AA8n%o`9#;-P>&#G=IbV{`xVi)00hqb?;Q)!aesxGlmOnBYW(aM#Q?_#O#m{` z(1N^_9ur1P5<}dCyFnSXpQP1TTK8#22=!6Kw{+A!mnz;8SD5NbAN)&E`-t%$qR?A;J3H-&y zyr=O5^ae7h&2Q&{0~%3bI1DkUmmLP6a(k=p$)IBRh1b#-SGxXU?Pu(P7%ta6X1Bq| zI;h61E~mYm1(%)}wFpQXv4+Q-)IQAPSdp%03isU%WryrlX@MHH@pub#fnA^nHR8DU zm^1%7{lMF2fpRAh!Fw^fSMI+Ycz&!{dp zn)PW-(D6_CxLKd4Rg|vJ-CCcQHKqSPSfBWGD?f#-TA$+NwmfFShLy{(KDQLDPYWZn zKD)%C<<}=O^QW&*1A;%}`ZUN4Xf2~W4zzs zSWM(=YCx=N%Fp^)QQvxgRoGvPhG#j70)L(#-fBSEZ+I&dX<0kA`;y^hX?@_~U9|W( z<1_q6f!8hUgc_eY{^nQ058m_mf|AbsTCwN@u}6Jo;G*MD;Nx&eefDZ+KCFd3JLLE4 zpB7KSijbeS7~;&|c&y!_PyZ$yr+>%UA?RN*F`4zZrTp73iu-n7z)KkZ#qtwo_l2Jb zmTb(_S3hXTEZR7v0kF%zf_U~84{aX#$Fx>%& z{Q#)`tQYj+L!Qh7FE@)BEWi&Q)t28)`94Dm%WsPhd9+aehnQ>0lh&Bcxy!=fw%jXN z-I?=1>G^16{>~HUBd7h_#$4;mR{mABM2De@xPPk-L&mMuZVp4dpE4iz!1}uKi@7Xx zpdpvF*b<}__87EW$Dp{s%p8M~&dQS!V?bg}YJ}?`Cbx$PDULc`G-sfY$D+yr+hRj@ z=9kbT0cm8%-vw%5QDbWO`hOOK{_fxugdNJj9M(>VnBlMj3E3z9V?7Mk@Z2JVfO+`| z_ge7JICfGZ{V$P*eK+jGYkRu+f4LrV}sd-nM?ktfo4>xdeSQ|k5j9a%ZXd`IRnV&8mo7sY?uh};U)Wd;J<8hkUpquRmT{<3G3x)(< z1jFJ$7E%BPX!o(8xmh14TXO@_Pm4aK;|b1NhW>WHd|noV`6pJnUECZ_S=>fMTfi)L$P;}rLHq(an;QNYR57dMy!~In{*B$L z9%AE>75&Y9P1{$vP$XC85Nb)$f+AAXr{5QIs5U~&CfpT4sY;RRPhBKu7@CwD7^#9q zQdsY1xg2P#G540k4VuMbHw!IikWL$H9=CG;&fEm`g!2H2qs#z%G}ozdtf%97SLT(< zLM1&D0{9(!z8E(=3c>`>P!&66Ow@VyKy66GtZK9OL4eIHf4y|?Gy9E~sYjx?LsWQx z4RDC$oW+BC5-Q2Dq0jZ#8vL8P76=XAdm$@bCa zbR4zH9H;$NHuv-;CHfpEC0z}ME1m&oA0Zak+&?#fT5*0Jba}O6G3a{o`iei3Zt)Yq zwz(mM)&ROis~;)Ik5N$+;o}DwVF^CI_>jTJD-rD`y=Mb_ys8KvBfl=- zwHSWGNNYlURzaK*svE0OEi%6awUg6vO0l+aD~F4BCn2q&d^*^=^ZMZbjlS`#G|eO@ z^Q)r2zOgVqyN^ijU8+u90T}y?@25oNN#yz`?S0evi%Cl=F3^r>e53FxCU{{otR zm+@JB>H}I+mRI&yi+@V`fjadwEXt%`OqfFTe4xK6)lc$tfGLmXf>dfB`HO#yM zfqKhUFzcrUgejJv+5YZ^7zKmv)8D%Pd4KKRjzH{%Q285f?MC@q3fd=*+uywU*8uK4 zsDIbO78R?1FUsrtj|pEU7S8jy%3o*xufuM>Y{B~VyNkg3U}-l4`riXeP7R9AZ*~mKWlVK2L3+HW>9da$Mgs@tiU&_kNx;~_BOLUYfB^5n!>k} za*p_uBPINau8QYb$`Q1CJRENx7{&kODRJiC0~VFwdNB)mcd*|Y`=?Rpgo6%(Lw3Wy zQwTHbn|)SbGsHQL3ySqvJeeFt7Eg93m*JDJCTs174AOLlm0Me<5NSSRZHe}9eo~vW zZZATc@W>UkpWnY&n**B$X+N=o!6FLS^Jnev$8CS**jD}hdP#o+cy{j|xO>6cEZSZ6 z73~hg!NL6Qa4h4edfpD`Yx|T#V3qKprt?-yE+N^^5=y^X;2`_loF$ne(m38KM6sA$iMaGK8DNlfOLvCLxQcEq0R#4!Dxu z9>aQeTz-=nLE|8zisXT+DLEccoBmAnXjV-LKnL0);BWpkd)Z^3XU+a#4zy-}h;x9j zrm|lMHirQYw26iz-YHJ|qh@2ksjj7Gxf=%DAJzu@gX-y7S-d~I%lWmj|M~T^|JV12 z--Bu)3IG51hkmxZA<6h(?hghf3&yd3`u-4{9*XwA+^gCjQtL{EGWGj868sHbP|T4) zMq2^T|MXA8Bf;33@JR473Zfu+RX%w{KKU1%EEX631>P{{?b$a}#<1P;ljz@E5#xvN zmFbgCRafeBE!VBn3v2eldNh0M+*P7OvZ}3?`-xhvB_AG+H=`+;5tQ_ojZl##%ZS3s zo~*+aBw@J{yos3Q`YUV@U(o(48$>(pciLbz!A&-ZO|QSz2FDQGZiAd${2eyfNHA-I z34;4-6u3^qvq-|9(Np%iw@#dGyW1f3^+bLb3Az z18;+w>k&J4ay z{$#-acZt8-@C0Lb8{BGV;SUk8a@~33_!(u;*lcyV^%1s+t|su9qiSOQzp7TqH~y5+ z6eMxBIFAbSNcmL0yh&Sm_R~M-T0f{VJCS-j;(y>n`*CKL+Q3`$Z%3RhAL=~7E0*Q@ z@uAHJx>7p_o8ZxTuT14MJa6N2YR&9Eg4bB5!=Yte&YOBkI_h1Lu5n#G?Tf8KrYZB{ z5Vx+YDZ+bSLu>pGI9oEi28G3>JcW6S(}k!_ijssE%(e>58#*3PvU%|^nNF9Tp3ht1 zU(SiQ{HH%t@9`l>ox9(W>Sg8Wm2r@MDCzQUY22b_aJrfv_HFXwf8t2o>-4r>ke>8Q z%raLFjbyU#c=)8>o1S!OHMype3mxRx$c5>#Uw7I)hM;?vv*YP2@EX)!Gna@aud6xI z)x%t`iFo_G*O_u$x#Ahhj}Dge)=c(r!x47@`L;R}4kR14%zRQsJ1Ls<))d$f~p`!@VzIN#5_={l9k4*cUqhg&6QryJRT z1<^84#JTAWa&pd@;8#5a923*F8QYb2h=p03L_09B(m^=wigVM6qeh49)INoW=iL!* z*zvqIk5+$WYujbI@rq~3HHlm0rnp;P>#F8Szp1H+MK+Yc60cp|y_D^2IKou$2y=%2 z*U;JF(eG&@+=i|jH{v>jmVc_=Oj{2Qr2bO?vg6dCBjI4{H@D+iZRMK6c-;t|c{VXL zBu&L5UNoG=Z+tyDwRVX^ZM5P`B>D{gY1#@0-!Yg%&C@bkM&lB<%FPwt8`DGQWiyYC zE;GICxQZ+?x@bxr#ogYSa69I83i%M6QZs{<-NG>R`pR^D6CRH>T+Q-0)od3dx@awU zG41~7RYL4>{?H%6&bg^xZY;%WCh`6jOAgonI9uUo!k;)&hl^Ovwa%h1(|;nbbswsx z?gu$&l%=wjwm$q3%&Xs=I&=b;%C+@0rpLcsw+X|R?j4C+Rr3@xZ~pZ))6K(zdlUYp zm5g%=t{n#R={gARwc7j2(FMG0v3{hwOhMz^UB?&RkVud1U<;Lqfke8};(AA$GOr9u zMhm?v280To&)m zy3H0%H0+!ClKPr(*#(YX%C=>m7;68$wp<*5v$pWrb@cQfmBk}3B?phMq|*zOsS&7a zKQ24^{TXrkP95XY6Dnhot7}?fkym03ZGz{eUoLR%9)liWmGl}+Rr$quI-p-C5I67p?F9ZeKt-yT0T>FrAT zQEuAgviBg0BtON24JO5ph@9um(+=U>bQE%)G_hJSwp%vf@5m=KgVuwE0>05kMu<+&A&&dNVHi~gGh z%BDW2nvK09L2kK61UKD{QFVzvbwbzH-uPO9)~pqMq!y?BYo_++=DYw|P58C=je;73 z!Iv?+UrSsIlW_W$X8&(0dd^tPD_w5Gc6^VoWsrJIsIju^kk`dS*)K<&c-IA9)y++i zP&_8i`F_lA#K7u?GQV{sq?re*cMm@Bj6Z2anOs@ukp#I{^j`1Y?LpA0ZgGD58Rxf` z4Z_#ukK73QsHcL4+yl>(otKN4yaUhr*AHXCnbMDUzv6XuzZN+{>HG4f9Z#HB9Fs5G zPcl>RU5e#uC?j~VH$Z$a0du?F&VAQV(lM}92mTQ1GjZ2s?gV$ak!P)=NWbb7GmwMb zhrm_0VGGddig_)S0Arp+L2=-|u?X&l`D!z3_>8IvfY+}U$kS*16Dz5wp#b8@{=~GW zfU}_N{06`!rtPQFF2ZM*UEodXiUzQD7JY*11aJSm2QR#~6ymt>tQrX7lfGY;2iiBk zdmNCv{<%Z@gM89|7m7RHgaKgwZsl_CS0Qntf6LnLcy8usX!6ErM)>M(jAf$5i2HJG zJed;y7~pjNf3QDlQe-c5ocY*Ym=CWjwQF$Z;2;A=O-^FkX6HA!rvi+b=mp-;OgK}& zG_Nk@<)Nkgd4l!qyOl}*Lv&-zPgsa(Uv4Eb<~PY_J!qaub(V)7M9=*|%-iCCrjviu0^H#)d`NB!o`?1?ZP#y4IkOj%?L<}0z9bIIx~_-7VpGJQ); zBP-l{hlhdbXtXIkYI)Cz$aD0AI=fP91_yQK`OSBD$iVdmHOp*fLRVA6cB-5CIPQFZ zDZtiu_6()Gyoe4SP7Pu+OH;%V`59Zs_708nk6; zMqHi{rGfoCs94`QF+J3b`l58z3OK)5w9&GC!=n)KPWJarGjUY4Hq!71C*1^AHcvBK zpXxEEQ7&sux}mIYtLWmba9@k9Ut}R@wqf099+-!f6LJ)mIgTj=Uv^;ClDM^b+KY0f ztRiZO9{mS?t`DyrU8Y8#VEy)ZeeCDv?a7i`=fSNi<#p>I?=P-^pGe>}cnp{k^DnPV z5*Eo%`tM6jTZ2nbw$uuCM0}UDN6J1-Ch%h?E~;Z?JcxV&cp9sj5%ac!FnYj6rxQF# zw^GCVosOj-2fteQ#Q`qOFN~W9>4?;Tqk#!qQ@w+EV5-vTkY_q`N1od2wo-rMR^INg zP480EgVZ#QMu)1wsWfP78l3d6t(ofjr$?MeyI;!e4QsAH+QDNymsh&p={3%RT^O%X zgvu$E$L+CfhrN1XCG+Y#L5FDZgk*ZuDiv*x^mHJ^Kg(G(7l74olYfAqir_RB4w&Ou zP~J8fTY^0Df=YA?P&!vj*c{%%>^uyX$-W)Dx}hgXFQA*TB{gmDa~onys-5(|YL40X zG#`R-!&5i5r!RqV+Zbth$4P$%oJt)WeB)=NOPE^UnVj~FW3Snr_lMbbX9~C@0{o9LXDk3PX2RAXiB%&3^gcVCHkc^NjHJ^bT>V|T-*}wBUt^N z^?N%u(`TpS2oowF<&C3+Lp(8ZZA~=$LAVeXb|WfU`~(6cwj*~nT|T;)1@k@fKT$@5 zxT6@Fn0DFFxbI>-J+#tocsS-HpMfvI`}r-Zan7jvZ7j*?%^ap$V>eg4$&u=2d!*WW z3HatsL*h!^LNME7%4Yo?La#{;)f5t$0K{XII3uhc|DJ;dWVR zP3hZe8sX-(s)YUWy52ZOzwa_DKvIkZ`54-Eg~!=2a7gWlB<8JYL~^6E56?mLpJT|E`AC_9>3(^_{%Yfm`yj!{p+D4fEAG!IRcJnmDhF zWjymayU@#E<{jC9uUB5ZI?d0&4nezOZd#g}m-a1j$5<*>&$0erm)}D5u zv7j|fNPA5+nH7iv53a_)#Ru3{ec@Vc*O5=v?-%a|8Z{=ou4@*@{cG>5NKD%r_ov)f z18|4ljO^eq$sE%Q>n{whTN6)ztHRrw>U7|d6StCO)Vw*Dar>!h8rL$ON+1T~Ilzx4 z(=ph+^w19^B8QUcp&e>m@1JYFBH?@uGMkv>7QsHgY33i|k>@9*C!GS*`ShHN-Sh<~ zQm-nF)oo>89Rc1&KR~^vLh7#Xl#nK>%@a{dYt&ZhOn%siL!e)Fb9^?QzPv)`8qTX@ z=L}=h7GgK%hCw4xT*&u^bJJEBw5DlW5Ib-hqp@LX?0r1SV49d4HZjjsJx^56O;-)F zrRO}CyIK4lThCl7V_p2=!7?b3(=mjh>lo*B)Y%Z&F^tfAfB3~|{|^KNJpPjV5ns!q zA!{^mo#mapAAwRbi#XJo(3v_kNW`-Jr>s*6C-8^8Xd`?GuO;EN`!@BDe@X9-n#Fu6 zC3-a1M6ucfPZeSeiHZeDIBf3NHhV(Mzs=?pU4TC@hZDqYRrb*_mv`3^5w~+U{9q^1 z+nh`OA9?Q|A7ynV{?8;62oiik4Hhj(+{Vu)ifvMHmnl&4z)YBt2}WTxAhp>Y)?#a0 zT9ZoK7!qfqJU)2>mekdjTDQ8bUH!IpWm^=gnSdlg)Pz{&ht`0RNN6;e!h+Pr=%QTcu9iIV{eSNk_3XUenxqc zJVVY$J#Mab_6*$OrMv%>$y+Lpc6uH#$~u(W@`br|8>KekQ>>MWN?wjcX&J1@L077{ zbG~}GK=}A8Wt+i!>oj8tu!QEmW@zp!C)at%#5|mP zs-o`Il=D%MyQ*9!J6!NWNJ@)fk5PZxAAzPu6PR-c@eVDNC`JFVrv)#K^6GKh>k184=F@O5~Q8_c1xESj+~0nDQF zz?J}-QjfBwLCZxOhS2h?acSPim#MX+Gj#|7S4{6JFY~*SlUR0G^;a3AK#IT&^{r0* zk8I*hj!~fVnnwo4h8o&UXo1v=40fc?fCI#g@ENd!2-ay0{TNPkxD-d~zhH%>XEOCW z`ZIJMjIbA&md{idtTJ#kQcpJnMp0a00X{TL@X=E6pibIY(5gS~RTMl)4;1w3m`w#o z^v6~u>``ZUPuTwY#IWc7ecY`x8c-Uc$ajdca;MO_W=2m%NUn zh!~xb{ezPVCIc@fcN1Yc6=UJMXD3c(%EbrwuU4i#KOgEh4>!B`*e%2rY&Je`A#~d3 z=TbshduHE=S;umyj^y-X0DY^`_{?AjI7Gs+?b)37^`8S{JY_gjuxR6Ur_Av^Db>I) zf)vN#=%`$WD{3W;i@3|hi)7j$@RLL7qg~rOo zgv+lyxbsV}C0bKs{cSf+;5;CY6{uq1jn2L%ix*Yn8-*5V3#ae%W3o>r^edbk}~i)Yx2 zm#AWxRc_<5B!}sULQCw$q0xnA+KVeyAu#BN7OJ!tM@AQ#Z7*J~3Pna1Dz_J93p+xg z=np7mEnW@~nnqbGoy6W?AqcVXV=}LSf_&f{QlwtsE%^h%!T{uafG%v8WtZEZ3prmd zy(VZ}`Etm)zW8Xs$enuoZD8*$Le)rc(mH~2hYd++f<-7|osjRW3sp+nQ6qQGxB28D z44)U@pgvnU4=$|bv&=3yeV!edz>T5J^l!(Tpxhq3umdJN*$m%;ii*mkhXvou_h;Y~ z9GeeO_TTci;Ku={z+>dK8hJ0fncVa#Dm~}N$BgBB__xbg))jOrvW;cijlBIvUT4r) z_PVibzp7#JA@#g8R0VUIr)oSYEfHGwx~hx96VI0# zuJx(7q1L6jVJ-cuFWnTQI<={TAJWu`Q=9sdPqmf(5p89s+sgT{whnwqTm2u>R<>#@ z=Ofz6Nw<~zVQuw}ZYy9c9r%#8a#UNnAJJBBx~;rZ+A@~D_90DuAWa=LmQL6Va1N~+ zu^lux@k_a?*}RWvHZR@mgTDNCSKLeD>xYh5uH}KWZ%BMl?>a zma&H?&YOZ96f^25R~XHi;Br`CYyLgx-zVqgn&qZbuS^dXb(KeVhq-CtfY!aPUFuB# zcm%>RG(=CxRVb3>F$%lYrHJd+@(%7@U2-Q{lI4+~9L181_gU)?lpE=Q2e? z4GBfCHnhnPr?vbTjdu#cH-CjVLT&7#qxSskbxeI#^3|ulDwxgOi!BPs$AxR%kMnMEKc;@l{g`y4`!S(bK0ujG z>USda921{)Goe`T*v8#Qjq^K>8dvXRdcjJ|I%OVMEM}oiP~5VvqsC>sN#x%$Si(WM z0p`I{niwgVZ4@3L-$7$pn^CxvT9*)&$C|%P=Rjusd0YM*mOm=)dA>ky1fP+wBl5LN zzLEgJih`B$*(-nc$e%9xL+2`cMZy>gJL~dghUKXhe5UmhkR`iCCLH>GSu2$UphVMv z!pf;M$yBdag)E@9_Tf2Hf~rQ?3F%6haTnU85=l{&q_a@Tj^R1#(>ZR*9##npIII#$ zQI({#P|4%NbJVAE+>$d`$%qUpUR9CKKo#3ZR3Qm!Ffb6@!HnqWEfTM)NN1pmp{>PW z>(e=I$s4R<#DuAMRYf`jRkV%hg(Rq6Om?dv2YYweWJrRlV_1&F@ErB&9Jfpv?8btDPgiN>xRar*{=w|Uqq5`cihNx5#knvI zXo^0R_28Uz10UQm$rGHlwLmEpG*t+NZoMXaP`TB(Dh0PFm4Zr4;RrqrAyc+hRK)%Y z`ez5 zSZeWitU)GV#19`;S3qy0C@UO+KX}u7=Wt2-%Ief^QU>K!y6r@7X1Tb|_<-r2qwhn< z_~da)D7)NB>ibZ{dnjUM$_)t0lS>e{BFIsfj*pBYK`D(@j?> zH?7!7U)|Lx*@T^lhZhK~eOXAhsw2WtAW!wt)aS{x8GsYK_OELe7aehO9+$4cHo?Pr z&O7pL_M`&iI*g9gdKeDw6|1C`o2TOTDF(yPdB%-vOKk9VFASOF(i7(h`=>M&XJYYR z*>I9KachkDQG!-?07ut}6Wk{|L*7K{5OH#nuKO6uCV$FFDtj;|L;k|3=HO(XEq#*T zR-%M=Ek8pCXm{!n+7=y$=I0m;Gs`d#NlgOQ;xblLx^lT#mBY|#^{&k}*ZvDoll1DT zmRC54YE#p^-Q6buq}tsw-zkThWC_1O)$nkQrYrdPQ~ECOJ)-~W^jpplDmel55L_BS zizS5ycq(-q0OatLQ}v&KUXIW`_Lr;VSp76Xqp-K}b&k|QLdGb3f;r*e@&oSiXj}&A zuF3am15C7B&eG?pU`4@f2nFZ@=pIEb%wdO7@Fio}6N*IONaXyFr_X;rC@7KV#ofrM z7f58@eudYpFj8(Iwo*G`X^L8y}D`5Hvy;Rq(}4BzHpUCRI&ks~UTyTg%j=5>3P3 zSHG1VGXJ~e&olDpdHDlTT)9U+4yzigh<9o=>Kx%6^lc$!-e*>+_L?! zt3uWjR?YL$QO?{O=eG-XP`6xmHT^Fk+8?-1d#_Nvf3dKnd7@`S{Tg zdYEKN-jjtCJt>DWxt($^+{Lk061exjVO*LLQrx(wjf~fiXUZl_l9{?Pf#$t3V9A8L z`*{?9=dERrHIVg(p=?p^!OxEu5s)p5hB@9@YtCeVc7%ifE2}sN4kh=PV-8}D#FN6T0fAJ zpcsV`295{-K^bfrBfbe5C}5Z6!Q(@9pntB>e3Y1oeGXR7?6S!iBgzz&mRwjrs0YId zOJLt029{AKju8;Q?+jRr;6-)9cp?w%eiY5}&cFwN9}~I@I+Vj*vZ*|b4*|^*9z-8N zz?mB;KrXkm4Dss33@Vbc)PmCI8RA1gm;cB{U^FFkBTV~X10!pn=d-Vv$yx2>{8pxk z1H@<=&oDXT|6Q&arD)qRGbm|(N;F=oLeA8>e?zLcxA5 z%Z8{Z#s8V|Cf3LA5g;ivx8%zJqOHNAmm>C8OA%i-h;6ufV&O|dyt2G#OjqL@P`H$; zwvFupFP8l7d5Q|J{}NJ>4x_N$xDt^F+S#1xUOAxEJ=ot*gHV#8=(eCg(CDcyk&Xtu z2X!}Xh=87?sCf7CqdN*vqn#8t+vz8-$u`NX#H&!k>Dw-9;Iz@M+UWcKdZvNl!^d+c z15qvY;=d@%gV46u?Q8-QWX3%S8GNi8azJ{()QsqXAC0~VbLvD4v|x9v*Faa(O99iF z-Jkj)Wwic>0!*tvP}GX2_|P3_1>JS+kKO2X6D-kekY8 z7-@V*3e=rXRF_u2FXL*d`bM99#dOo^2Q1yyZu%JQu{0H`H8cdiP0kEiEOr5O2RmWl z_S`VIj4kc87Zr+ZzBt=2mu_dN29DHc5WlcxWxx9C%Aog?N1)l%R#MdxBNZk0jfj<9 z4kjgKo-cLSl^=x$Za)H^=v$vgO;C}WYtwxDv)(*Mdqfs3`7S0xSogjBBDoiQK0C`{Sg{f>Z+DiU56qT6k)MsIfpt>yo_5BhJ`rm`qr{l}5Jo-2?>eED-9(8HC zBSpLi0!2yD?aFIN8h3%K7Zo}S5Wbmh!<3H!Rg35^Vld4idoySTTM1gfO zV1Kn(sLV2Qi5tJ>Ir3p8O(%$~ijiO{9D8(6@X$eVo6O_;l`Q}KF0-hAh&~6d&uB{2*mqHR6z33Aw?o~8z3(Az z&Gr3Yfjxyw;r{AO)YU5 zpA0xxb;e$uYsOxhTV`*(Q+Z6z-1tlR4Ozb9yK!Y(-)#Wrw&Cx) z5Cs=qeI3`sACC2mqKw?@f!~-7ND&;RQ@ktR7*E7jbj|gSfbRUz+7(O5Nyga(dDG~6tE^vJH{67zE6zQ6riN!#(e4|6c1yM9t(Cc^d z)=S#Vu(u<`vyf6MP+XO5w92}sgQ{r-#UWO?X0MtbXw{iyn7Zjs5#e;8qZ6>}Wtc=x zx`)Vc6t%?Gu_32reJhi1#(MkZWlH|Q`d+B5_42lpF$}%eTjEl{`S^mBdP2_6q#R^$ z#M)7A?c#k`$T}2qwl=6}$2tOp4Qwc8HhFXywvH%f$=-p*oHJusiGUsQG37Pm)Jgn% z!5YF%Ap?W~8A>J9Xv~AnLRQi5f~zaJqA>v$a-uVM%V2IYko#FOkUK}^{tf}$CF#sw z4w(@J$U}j5bb(w|VCL`wj<0l72{KXQAzdO*mFQ#12AdG1I!RU{fy zOJ~8rIiL=K*!FyVtfbDk<6K<_EDx%ArtjC(h$n6d8I3o9g!_8cDBKt!Mf#8^xciHw zymaP6V7k5@Vsg_lKarT{iOEUFL{-cXe36!&PCHA|b`z7I`ZTS${H;({3r*fcV0R6l^NVWF{(795JQ3_RAG1;xeR&}u5w6YR@ zxDG(-qsZHZW)9+MRGmuk$pyJJ!)>hRRs5E5$o?q7qq@@gyALxD*oL9OZwLHOuenWe z!ytQ+{O3J#2`|BXw95RU(4V37e$tX^22f{+Zjuap|QI`b;6dFMgo?jDyWDk zzS&vqK`6;k2-RE3ru{2%aZ24uPuD|e7bUC?9%sh-Cp-r8*kfG!bSRqOJzFXC>f`LC zyQ{!`A$#*meq5z?S6yRtnw{Fdi#59xKggY+YUDZSx;B z7CalsyvR}mGo7-x&Df5M%-9EY)_k9F%fG0;*A|qD!3c415tudY#xI!mSSJUiti49F ztb(}7=}aVX7`>;vA5^h!A(5#ilHxt68W2Vww?J`NE|(J15a^V9XDaA@>k`MeF5Rir zmnbFoR3;^YdYqoKPD=B{a00A?vV22yZ7Z#W4DbojDf22dDY#Zl7kbu}J$+pND^34f z4`0NLSwHMm2MM~(oE6+(pW^s)HWlw3e5<;SROrAW=(14pDmsr=VwO#7vR{rrWIAk6>x_?OTFloq4ceHnuc;U0k{;s zTult=D`Y2dZD*`Z)l8+4`EqSuzCXn*WA@+N$~+I4 zkIkKDaEB{JH)O{Bs5#c1%_}!vm#-?jVABI?F#h9pV}jQ4pmkW-&|&{?Yo5UgAb9mV zRHR?7rpl~)AGn(dK_O&ObnCqWJwfMdY8h9RN8c&49#C-+pa4V6bU5N%{GIBHJo7Vi z9+mK_`4{9oD%*yIo@x5~j3&8csJWNPXdI|JSIBXBXFI5ZZ0BXpv+{-zqUdXT>k5If znI)~U6tZiCF1%e3RzypS^bUKviXfCnHm}I5#!42YZZ7+$GVII~Uj~r#>-)y3^Gy(K zIQp@$)n+%f2<{6wVG#F;ai%e^Gr}7t9b5C9f@*yRH&=r@Q5=@+W3{gLx_>1~c4*is zb-g95@0;kpcZ#ikf2^^th~)`!-FaO$vBtJwVc;li9S;}17=Z{}jka$SBar_h;NW`o zyH)A?$)v98`&LQo!^}Du`ncMkFaGj0e&r^!N~)CtNXg_Gc0Q1`R^?1ZfTF^nEq(%h z0|*>km_rFt8Uu&XGOtluR8T^zDk7GyEHLZxh~a#Z!ATpdgZ9Tvo>!wGtm-z_eMNS$ zGw00fF9IlzLghd34Y^p|>mDCqgZXyOujkpm2g9-L0p0|_&oi1Mlv?Qcz8SF{IZEu` z$k`FL_5iOi`AX>&WN!TN^`Lh#tWY7aZ&#owTAEACqOEy+pK$h8u5Bs!fn<(SE&W@e z)>c#Wu()o1KV+eVK1Dn7JHAKe0hZ!y^?ci(5fxM!;Y#7GXtoOPV8+PNW&Em1 zH6n)vFR^X{FJG2nJjR7?x3PAUkjdWNvtWH_PtC>x`Fu=<;GQ3|@(QGDAcr^Lnzd7^ zc^|3L8i(AZAAB9e*2%W~E`gsDD6{jvYaZV%uk8YIfXQ>ZUpyOd9)YHUmuDKG=MpFL zOzS!9cApH$!&RTU5{3LHYPf8GG=glTZ%0_q^|ZrjPh3U0x2;e7nd$MGbjol<5~z+#@JcklSM%#{N126!(&9c^>Adruq~?34%#!g^S)d2b6!x&Xw?oS zrRLR;>|qAuWiS9!sW-wUsxp!p;5cH?rGZ&_HyKSaXh1pgR{QO56yX_{FaYPMn>_ ziL)O~y@m#7$SyC0|8U7yL}Hv!u8jk-k&~;RcX=5wq=bMQ!H^1AZxtn+91FZPwy_iF z=tSD-O$bXIYA5w=krlctWXcqHQhsJWQ*R?&)(hxrpgsPgOOwnvJz$*>T4JY5nuwY_ z+M8;Fm_2Xc-eUAdu#Pk9a8#u>1#ha#bbT&t86RE`dr9r7)I-#P)b~uVgH|igNuLg> zSK#=lb0YP=`qHN+hrkLsEQP9ovSUM~Hj#{y_xBjK+CQV{Utwj2ZIi3+(vVQSRfGfD z%0LLqo``5fB%^SP$Y4apyy@RS+_5c(LAxB>*AlSRZ4RnmBp(+%swE$@1-&C0QRVG# zRt?t5`#U?f`fA#-VsU;%xvTkMz!wcu7;6P9i`v+7upf{M=Zy1qT6WVK5FGElJGf-J zg^abAup7k$Ky-KH+ScrI8HN*?n1Loh*t@6i;=%i%SOwrj^tM_z$zgcBD^oSfTQn&n z7W$+Q#@hEdcq0C`ny1r!cKaJ~Y(dE(=l<3U$>H47I!Au)Z!MQdt+y=43nv7d5>*hG z3=za}y&Recy!nQ7VS@|0AtltLNSo1`!2)~p8@ z^6s(MOKr_~_ zpmogccE}HtusUSlUYSqdW6uzS6-inC_LyAB}6ia zjWT-*c9Y9ct;M>L9g`*UCya8QA}6sJ(`s#y;$^n)7EC)B>#kz1P3!4k(H=AQ+Ss78 zil#1;*D`ZnaToRp)O%L*mc!~$F64N(vf#n-7as>b~9$))_8x%Q&ThI26u zX;V(Fb8RsSmGp+AJLIMp_1(fTX}81$CSe~vQNencVkBWF9TvHQk-L1YPZ^t%t8_8l zRO*J@Kk9=#>Jbw%p!|Ww*|erjh)VU+eC-e1xorH6P@K+i(4iWc!mlS`;p`@r^d<7A@oFgNf87R^0+pPrchArOOeGQ2`?Plf%g{NN4|(%M~C%Nz{5%J z!A0&(_&77(s<&rEd~P@CooT&YZoLtQCfT_%W&g8IkvMVDHdJ%U3}?g+ zxz;8xA$H{4&pajOxpYZNN#WF1BFr7W0%+IT0rNJ~dPTOt;Kj`WF>bY~pn|-@;LhcjGfvpp zAZ&+itfbZk^x%HmsX`JteEK@av#=1*13<=K#xK%TfEv&%bUQp z<O)9I865X48MD23Zvp8|?%x z*jmuUuek+$qb!dTD2f-fNZeLa$HjHr9sIDq^*XeXpMa%nA+}b>-mUYj)*<0wlUA)m z_vz3o9eO~AuG66hb!epyZPK9?IwV3LYN^tptva+^hgx;0Qirzd&=MW$&>(C4xO6pLt4jtB^={j^ohYEG* zZ5=Amp?)38*P-`yXo?Pb_+jjmb;zefc{-G>L$VbZQ4T)>)cFFZ#c9Y^(j6Y)m%I+B z=1vyApmSYAHt;HU(iYm{3O0&KWQS?_3x{B8h$s5fyeihzWX>QU$E6|*nSg5VO0BqmU50TIrjVfnilC&t{i2d zq5a_Gj1AZsKxxFg6HOHWn@ea@Ma^rm_I&8Qe6N6fX~S!>2O`jkxg3o7*u}9p+ept* z+}FuIG8JIVAjfDtUk<&7?SfcF(84aia>!m^sNt|j25v8%5n&SK8}l2ePhiS}&2RN8 zdLU?vcK`&UE(U=A9I##pMu| z@`t?pV*RBMdSzBYyyi7*vy_Ud(z^NB%C}1_@J|Hu1 z&V)l#Jw9s}kvguV75glW`?ts>8qLB6jzo8GeOlzSG^~YH-8ao_&%jKTC)R;2J#JAT z=WxS`dSZ;Y)E%^M>g8!l*#+@&Ywu@8i*Rb#KP}7SS%V?l{ujtmH{EPV{*I4WM+Q?- zer;>%{wY4VKr;7ctQB{?8GZMp@iiS>oliE&d~Iv}S1%hglrw{zsc$k_^oh|?p*QtK zf-IHkKW3~mWgeYhdZ2B?7EkD8{zQ~Aoy&?$0BTS#tcH7y;#AXjWppB+D$DfQm<(Cd z=gyKEq5o*jj;pRlLB`|S6OSD(M!jL(QP6e62`}fl(R8Me(9Wd38&RA=5y#2$@&(mv zPx&sFtS+CN8POSCkH8#bYa;b`%pC268WCI%B}@Jt1*7iwV*L}t(J8mq&Bau8&;F|y z;78=7sVw_kI1dOgfl2)|4r-nl#B_aqqbcJ=gQ|7r7F8ZZ`hIp6N3(pm->ioS^; z`;af-?V$3y&pM$uOu4)9a^>Z4H0RK7_^hY4r$XM8oPK;h;eMLV^c*MjX3y_M+ExCX z^X(&}Dnqqls4^5db5wgdsXwPq6bVLjaCDuUZ;&zkd3C=35p}Nk3+nvfBkIik3+jZF z_@iUrirn~59ecq4g0bki*vZ<>wF(5`h?iji6Nl z<~bTloXj_^v;kt=|0&)_x0?bk>^T|m?^}bhlkLSC8*Kx&-$7u80pCaYff6fp%QM4qs3(>ka;b+8+b(2z34Y+W(Kx}w-iZW_Vx&M&oN-e}pjQFk4tDI!N6&9DzPa^o}#J_&8u)QHr&XD)iZl zot#c(M8!Pb?^H}PuWkDZMPmnhtt+NGO&xOFsc!gp8ckQz5pi>tfnBf5`F7@=9%~zG zgxeDRnO0e0d+d2ZxB$4A#G6otB|D`b_m5;%PnkA3>>3nv=UhONJb~Im#5JZ-*vhr* z<4`d2EpM}PFHDdkA5-skKPLUi{g`kUAAKbxp5H6^x62!_ZStor+4I|cRmUzKg7r({ z;}YMQT=-l*?JdQK!O|T^jp^-{???Q!TE4rS`4D%g2;p>-8Ls&m0DUW}xoqECK=Qz8 z{T0_S9GF%U{)u*#IB>q~Xz@*s=N4&2I=3N zK0-1>6MjNvP=L?bIy~tv!q{9L%a5ebx!wJ^_UWU2kVp6t>)jFraHTv(__c3# zi9FXkzt{M6V2+eKU*5lq2>_{MIq%|)^N-1lK1B^Y#ba94E4`!4^aq5Nzs;YkdB0HD zo_s-8!6X$l;SqEPAElngpb5Lg`AZ5EG+ZdHCH%tFcL>N7o zJ(KJ_YeZT{<__sjt9qQqbGN1MO2>|<598_`$@O15m#p-h#;^(?bxhqVQ)Dciq<>L3 zmU3A;bnJwmtKZ6f^kFY$Cj3OlKTRI~NgOr-821Z+&Ne_N4L5?V8(#p%g?)l`ERRpN z-oR&!#(RlGQO6f1as^~9Mn4vL$G4&H~k3?#1%kH-+hbLIbd| z^r@u%4C7{at;vVKD#KdZ4$LYD9wW3hz)L4;o+x=e{Me^|vg^_QbFZCiZsi!9D+~F$ zh`9@Cf-?*#`o$Tm6kJ^VE=@!H);}gIeBK^H0ZZ(<#M(n?|&VXI7` zj4Q#P(=Y!?B4sxWa5%P z+=`IEmUAfZUZ0t#8$QN+sN%cz=oEM(d8+?@(>(yml zk8?1qftrt%2PbXP>pir-{cDHT_iet_`o50+tgrn##Z6-~ag%7IVo$c|AwOn(BB9c#>4#}q+t}e#^op3-TbHs@ktN>)> z<=zV9as?}L73(m!o>dh&nShhxAr>o@DVUNG#PpT0cbk6;Scrrhtp~Sd=VD*+bwYVg zmm^io3}RyN!XsDm@&$pqbTUvxBD}`a$fRC|!g%r4(^p{_<_oQgyqqM8PKVnFcRyWs zv_o#{PEHsF1_2;hMaQvqZg!tUhfw7& zbC!I<8z|Zzitcw~B`^L`%B_>>Nt)4YI%~z$anReFj+@d95@jl$g`xMma_>%l;66VQ z<~l|!H~RPTBi_z(@6&pc2J+3KodNHA{(c%(-LiDAj7C3z0Ze6QGDz79IRUS)V9o$T zHJb4ZJJ4NQkloE(#ZdXePD(5NfDYR>9d5(J(kXYrp~luN`4kXyJ}eJ0@{q$MY*b?m zMYpO+VeNJId5PtVM5nO!dsyEH95m^^tSIX$%g@59wNJ73+pF@00V8Ywv_Q%!Yi~7e zUqKd@-wRZ-zDDEM=(nJZ%0iZYi&w*?Vt&{ysy_IF2q3ms0V6@Xf^pxg>Ilb@+1785 z?+X+?87SHbo!NWAbu8TMykOBY<KC!SePWLQ1WTRf$2AqIpBGJzIvz9opaS}u@BO@Z} zS=!+dq0$kd{1Ktt5uxl6A=YrHolwSzkXJ%}`XJqvX*MDqs>jFoj_z|ncRC#1YtCBo zLrCUD35lZHqoSnaBcnp4qr&;4!nvcu*`vZJKM!v;1hyLyM)p1wKE4P2qA{oiCQwV= zStNER>Cu`ATn#sUU2yI0%$)V}tR`O-U^lNFtTkPqXy9ikRo8adY@ktC{GjLwH`d67 zW9m2eQrhv=^QxvElV+#k*{s~V4=LzR5X9Q?JgLvj^i9OLPPW+RlvhIhvPJl9=vTcs zonCy3Ucl^}mni~P?4xs|gtDpm%{3)3uVwalE`e__sga%)b)et3W*jR0u>XU&IkvV1 zi?*3igfgnr+0egRCH3u}pXs~9(q)EM`%t(cA@!HzN~7^o*>PYGw9+4u1K9@VC3Y#6h;54M#wN+!&?YSE)Dqerq|a@0yLmzBlsR&`8SBnqFIt@F zOFM!WRN|^;+l}aspUvYKqIMCLH!`Y=DC|uS&-DyZIU}R?5S2YL>UpAkBcpnQ7YuI@ zmHuf)T-&Z)`try$I+HxLg2SgabA+f-oq3z6QC;pQYSh5qCu(?a#Ov1ul~bh0nM?@B z0m}=##u9MwPvjf%mw_M{9PJshPDZ1=;|to~mnAaoo0MRHqNfF|@5?vyNn(>Eo)WwM zLt|Uq*s*R6c1G$Int(q~MXN>bVBh3}nUtz32C-GKZ|dZ!Pwb0@~ZVBHc6bAR_3vUzMB=M#4s(f$?P5*9QJMJbAfuWR~;VA@$QjFm#1cp*D zN;^~=fuWR1!&3+hr9k-(l_4;c@`>Ro1cp-18J8r4pPaMHW%y^8Ashxg%4vM+SW(gOEwXt3o0= z*cm|z$M;$5JypOOcsa=1!p6JVGcY9(M;ndb;M@N4OnF05Pp|C_E5Yz~O#VVB+4gmO zFfk=vMP2p=3Gg_eH9f=jDk3oI5^1wH$fq0c=lP4hp_&Mzyu*&k$6yt!r9=WU26gt~ z@wG$o@;R7aZi{Yy`E=v`*wwaUaUulrZTXP4JGkjM6TTY0PC8ZIHEU9I>2=x_630_3 zf>*s%9rI>!Od5++j9RMUF?y+n#gwvC!-Fi<@E}VyJjhZF53*Dp^Ze3WIn9-_RKrtQ zs=?Ibd#w2@>rw9Bo5tG_mB*9qMI2HlGcqOQK0hqFmJ2%vm9X+i7 zPzA1{zz?KA-G1kWR-JOAN{NzkkCM1rdyPwvJ9WL*$>hJ0WUB`J^RY3q*NA-J+;D{2 z!jiCfx_`s)68)4YmV|}V{q|r2CElmR$5kt;u0XmnTKRx7?<)kkkPeI}H9)BYDrqrE z!&)M~llWN=iEzhyNJd^a#!?|%6&3TKVC{bjeB#CAb)^r0W?WeqRBFA0b6AB%H*FJH za{7H%vxvj(Gs_*{bZn!9VvlDhH`86~W`$0vQn-`>|8uqYr{&#ZY)3JEYV&J;YJX=Y z8b_1ug>XyeFMnh_GoD`nX&C+U}!Rrit=lmFz#qLAIdRSrXKwRKUjEy#leLK zyCh+hF_ipWULdxj6M9D7nJSF>ziBN&--BzISipEwV*G(8ZW!NBVsR?_JfVweVsgVlPcN*TUHIL|4UB6W*S48nd#ua2 zsxD;B=jZy`=ldkebS^`&w$nPpXkH9D2lbg-gt2Kp!Xf18`>ee3e>Ot5dJgg$8U+b& zQ6kp*iJmvCx5jm=JUqR&#tl|$oxwA2Y^U6a8Ro1ytZrpVnOHI_w(}gKNwm(WeOaVW z%`egSVeL)(6WWtJe{y@%MzwdnZm+LMhQrN=e&L$9b*ea-=2o+?7|%d5GlN4o3jt{z zcC%W&Je!FnGo?NmUhQkD|DXKu`p)@d^<|{%0|+uk)z`z|)O-NR%)hXb|IqwTb?0C5 z{Nee?l=;up^Pd^pIcCIs)P3>)QClSg`h7ZcR=1i{YS&eY-%aZQdy1ck_aws3^9PEa z?ekk0gH>QA@YY?Fz%eKWPAx7`3vg&Q$S!K05>7-C(xDxJ^n+Nb8Y z_MqrDBl;;c8f&1SWBnP%ItRKIC{TQT4dCLb+#}$94sS2aaa~&N#pnoHU`_x7a8T=S ztovumVqFv{0)Bc9%8Fz7l`JK@?dt{UsC-sJUXtXooaW|ySoArq7-aQWihgZMDBPE$-~N-a}8WHEivFRBcs@N3lQGo40SS zOyDl88Rnv|Baa)|tYQNW1;26KLEKw*3Okve!c;)7O~6@L3-l5FaR8cKyTESBlryAm zlgajF>juZ|?8A;2R@GxUs8&gm zaGWu;O4HP^)=bBoBWuJooRK&*d2Oz}PafwJA%n!wOdXtlHlNWKi7RfCa zDr+95TMKF2nwQ@`hC=e%t6{s`$3|S%&04G70yQCgwBA?&% zdxgIio_?v}>0Jd+<`zgSkHQOmpVRtkg8iS4089$|3oxD4^QLt|HX@K@4g;m(kW@Vx z^R#7lQ`XwMsBcT+;MiDlYycn<@3_z)zFF57*WSr>kc;DfBYr<~4En9oRvaSH#mnI) zDS84$p#kwe9<_xmhbq_^^5TrRGnDuMHs_9>4;o%&?E#c*W8LJ_WO}UQvMte6%O+m> zJ6ZQvIt$N!VHH&?@Rw%X>Lbw~2z{^Q4peSk#GZij%G1!EFnsW!cbnPsp4sryU{e!S zQ{W z6Bt)wJueMwhyyqwqFC2zh4i?@%E^Zh?JU(^!1~=O)2I&ok7zCw z-5_@x)m*@GM+b@Yheo%NRr)JN$7ITt$=t$h)oTD`GQ-|KJiMu@!M|d7auxfNhj%yo z>8~4}-0#%D;O}>3G_&^rh$|Df6nSUX%qIkX1`7Y|zp>LAMwSeXDH zPJWDaHQ;F7&4s{N?`RlH$fE0Vsw?0q1Yxy;D;~?|kAAWY(?mXI65-J=4YwyeZ=smc-sX7&cJKuvqPze-_Hg?) z4`Sl5c-FiCy%CXBt_ruedbry}E}(Le*;a~uiYk%XqCUgZ4W2^C>s*xeN?u2nV=E0? zr>SHzr%lMIwzE@}axmLDO+gHcA;v2XIAKG~-h?~D7^O*^@TnO-DEEk&Cblu~`WXBq zW~8tTyY6L}T5{4J6~x$CBnEGxJp@yZ>$XlBorr(Z*b$Lr6lu|Tm&s@j9|rECd|XfQDDEm@({tP^T& z14W&*f-ZS9TLw2Ys8idjw9a5mG!^{hrlF>iOv|4!v|L)_8FkAa8&t&~7?f)1Z#<}# zLxY-uyIEC`ppIrE15a#63QEZjWkanra5k?LQ6hK5BI| zmbT9foV#09{|jgncN8y;0&MrR(bOYi^`cG`x`k)ZIvFN{yzx+-HR31V0cdS#tFa-x zwy(RBCmG19F1wWd&UP$jG*;OAZqQi>SDPJh2nBRy9HRpJQ$g$L1({oO1@1*V0iWZ) zcyD+_RnYtN=(w4KakJ0FFm#j2Gk=MaEf&Hh+sO>Ezr0Sae*)Jh+?&PldxhSz*a6UZ zF1=;vgz>{8`}K0{2C!eztDj^o!oY~sX-~P;bQX(kF|6Y8wy~S;2dr6wRnL^2T#6tT z+cQ08X5Q%%4h;*tpMrK)&ds{&{t}A%?)qU8PY9g3U>`56T6W4P9 z4JDpIXjsYbNwu#^J?6M$smX*~leqyqoEyfDsXZ=WbzrFg|Ls<{vJJz$0W$Iu7$Zq6 zGgldmZJK`0p9LWBP_D9vI_kY-2oM(g_zwamVjsViU%XWEl1+a!74+(lmbAOdjmrBW zdG0O9rLb~onXf-KX{Xmw_*dxb6x>0q_6UDESDEo4*xr}birP{sS3&q*&0<+vG?!L} zoQ5iFctxCF-u->ySiCH;Rf?Y$LL2*QKF>VZR{3$fU5=MB#-puaG!&c*n`>uqGupbX z^bm9WsC301_o=sS zBE+r``B$Yn%?CDg$W-|UYFg~YwP<)3pwY}6ieQrGUtSPXQ#-pNWM{@UA7)HgWcV0A z@5b_(_Ie|JH|;QkvBTHK=pn;N# zis>9zV*&LMS7W?98_gnS#T@K*zw~y}=WdNdpH#Xr~cY`l&o&c@$1U>L@rA0I0~|Pibbvwq^J5 zrar_E>Yoo3)KeWF_ZBEFgx%C58Hm_eARUAgq4paQ+CrVub638uaLj|3G5+Cw2Fv1T z`w}fSno)OGZn4C54^G7RhbeM5hv@yf4$NI8%Lh}J(#44JC~c|Eh3pNgbLgusFIXjN ztJuDipC;AUMfOJ3BTAGi51OnG4b~Ra@^_OO#Ui)Ul0}c3qzBY^__$YD+FN8d>1yn_ z`c>xCbA6fgFLz1?O6b7gO9Ym-${%r%o}1@AhMUZTjORsymAlA6pi+#EKPxE*2#BTZ z%3Wf*n_0jMn3R+0l!=o0QPY!-V``KS_Car99>{cz8Np&qeU`&emMnv{k`-Zc+$C#K z)4)KqnV9qn>4lLQSAC#SHPhrvyLnHyFY-)x@^__nb1KsgFKahw$k5HGSyz+KHAp7k zg=#yl;6otFtGY-1wQ2#X)dFZkHE6HsZ0u)8#S52$TDg#p9pa8L9W4JeUdU^~3;w}_PpRd#4vqFzxqnbBZYC|JP1Azvz zYWayU3^iP}W9^NDnH3=U=&d%g#K)!r*_?blpdbo89e2+ zPRY~&c1*@6%Y|1f0k8}Kqqilzmp_$H0bxfOy_h~<+9hen)Lcl?C=ipKmzyJi*3Lgt z*>58OZYYQBSwK|h0ANOe-xUIWTOg>eS--fXwQ)BDNcC4@C(o+;I;uLr3BsDoVEyh< z@|5}97gLV#N%wE&mGidvS5T;N3J@^Ts zL{G2e#v9pH5HIyiEo{9o#;J!BKTx`9`e!up!$YP8D0fukN^w~|4!hy{E3w0?7^0>hMd1n)BSRwBZJ_; zk@$#XVsB=7Lr%cH9I)t8f|j<-k+5T5G8xa+rhg|iEF9v?b4^Q`&nd^QWxGAU)=Cs% z^=hJOAbx+BG?2oYY$;U7^0k;FC}q}$)t>Powc|Yc57l0D#EAbdb)w#X{}J8!atHpZ zGrPWTybF(9R*`@XYvYfN01rKS5SW(RR3)S$hw51XqoRpgW_>Te~bOq zfOp^E#Q9`PTPfvQCmh8o`2z9LphU7EC*lu@bWA~+6|l2w5Q!=s03SL4<7*m4Lg#khGa)G|rJKTYr1vTY@>f% z`DTcDw3&jhu;BSfJ#fMe6Q3mU%u?D5IjeK@(&p+#X3^f^%0?VZyO*yKOIv-KHUuRS zY8JS9+>o`XgI;au5)QY$K^EA0tEYEdEX0>w$ZrFXB2iw7YD`gPuh>)?PQ03hU#|C! z*h*3ZRuXnsFZX97ZqhJ^k}NP3sq8K$cfzGV;dbbPjgJ}WG-HXegXfZah9#2t(^QNJ z^WD}`_bkL+Pa(3n1b3ESDFOZl4P0~4=X7!$Ss>VdoUdzbJC7d64!nr*>w(&@H+Ix~ z1=J!qSxyIUW1{Bs*kd%iF+=j&zwlq6h_!k;k;))^5&tzDkiP-1#F~jWF(h%K;ef$^ zI-EV2lFL`@z+BTSPAKNtO)-Ju8-KtlCO}niF7J8e1)T+DwKUP4YB(URi4r_IIl7Va zq$PGMPBeVpj`O4u`Oel+xiCC?=VHe~Jb%TDA%&U4iGf&-xSe`V8)fE{&_YhH|A?{f zdD)u+FmNhnraIvo1?)TZ5-18q6D^t+lRg$|%nhZ*s_enhjdpARgYg8Mf(31?j#r}+ zaRx9wb-vUH%1MA}7VS)EU2x#P5Y1Og%;P2w*ef|3g&YGaBh?ti|gaIFY!? zQWz_hV($#`3q$sJ*1PU9?x=`SJjp3B9$+faO!af09cj{R5`!OMPVOW?v7?lSJP($a5i;}_8+PEV?qx=GX`u+ zFuQG5a}BRl8$_Eb6W+H|ayGz-a7Z58FRGOk_aQmI0jquDyy_9{s2~ z#5{Jq6$N0HKH%>)nk^bb2QF+OK7J`X?A>p-Y^Wy=Rk-CydE5g$WN%SNoIXB6&J1PG zi_L>!W0q8oQjJCJypPMFmpFv`TG#W6TAKM*%XqP-r3~Tt->QL1L?sUYXpGDBZ?Ddx z4}Ebzub5<3oO2mnB&vsvR)R$GR)p^D3q_wD>fx7_5qNF%y<~UL-t;kPLrhoVnPNEh z7>zY@PQ@B;yI8};7(pxkvHL_$h^~GF%TYgOql6pUq`%P4N-@Wtboz5&V`jIi{)tDE zA0b49^HRv4+q8?7{_86)$E$~SF%I)L$XBW_UF+^S5%kwu4DU7 zw^DMd?&9ho&PRlXmt(Id8MIn4=NQA3qbX(}&t)YM4q#a}ej6RF$E+_T_RV~HlL#fm zBcuuOmJlY@OwL<-`sp|?RHqp@>I{rqzboA z)lGZG>8iXoHJK2@TMs2wh4y24>|+|OP-vph-I(2 z7B=Xt7B%CB^IKFnnX@rQ<7PI#o-_AcQLP8<0(G&{mz-VL`Y{uS-_r*Q0@MWn`1@y{ z(wJ(f?mx6w2$+FFqow@`DxRX+$PL?NqmQ7*{%{Ax-;Zgy9e6+WZ6W?(Y)AFR=PBZz zWB%7HkMia0k7BNBwDtjj$1D^Xp9{+~w7VGZzWB#-IKT zf+lp|*M3gg(MUvym}7Sd5%U4oZQ-|4<$Y2meUNRax$a{W*By(Ysx`9QEm=gSEf8N% zfQzeSC!{!tVoxd*-J}BSn1}RE7{D+t6k-Tkn}er{tM5#T3W0(QdTXZIe|Rz&s zPPz5AjPw0@pa$z5#XGle5&r?Obw&KPS}1)Us0xdI$!Q_QqPW#wvVqt8D^8c~w$8&3 zhdH`^)rQ;`W@&@urg2wm1Ofcau(B)*q8TI48NJy)>KriZL7bp5n~% z1JGZg^KU*iKb%IFk=r5-_*%$a7>OEORh!5?kIr;5GpaAb_G^QoCsjjGeou}_5v+^8 zBL7aZ--NRP(I1}%UZEE5KBd$mCuHHX^mK|axX%|(b}4>km*R-GQmWz&_Kj$HlRHo4 z&KS%J&wpvCpFhHCgfN~c`%P!NF_ zE~c|F77v<7<0r&qh|1bgKHZ*={T2T0Ak3kj8}Q?$#%Q_`dem-tsGiXV{3ng(Pvp=J ze@@}aq6GbqHc@TGp$vb>8 z1dfdhg{`J!3u#pWA3BOi zgMAkE#OS*Gs=lH76PhmR@|n`5|5BChsgU}EE7v>=_I1iuw zi|1keM~z<&-M{DY%bE4}JbodC{+`F*`gcBlAyEIG*T3U09sffVbkD*2`1~;Zuh}Mp zN1=PT{+XxYqQO%j5Xf|^(8q21KvZ00b%<-O2#0Gj=ku8Bqv5@2ZeD8EPj$u)P$bME&Nvzmw%Rm7vVfd5e(N zSobhG=4Bg>MXamNtW@nJLhcwjIGW1 zM|tT%{tY8%XIfrmlpzk`ewmKHrIk%Zs8?QC?h7*1HXuS3Wi@M6AJ;Xp*#WkUzY_57t!(6I~b)AWWj{WSq70x&-}G024Rn+&ZY zffO1Ifdy?MZ`3e557B%fZSX8_uo&K6d`e`A3|7g-;rEqwY1okbE6JZ~$BBqNAG^Jn zYLY8$RLLIgcuZ;oYG=8O==g=Cx|}D&X_PU#>?1KRBQ#&c`N0twIWBKEWIfLHcs#B` zGIFs;e_AB^Y?-}vgUckU`%DP`ELN&ycf`&vcYNcyZ=&#+TW)1X?2s6{&o8$^+4E+# zs1mh%nP3rX@XT5|+0ZWY>3_ENXZD7ECec=6Qk+{bA+z*ESSqUa3@RQHqFO3VUdPtPPDl8X&kR2zB~hVZuN9mB%zcjtghpGkYTMctd58C8EFxZ5ybvXnVScS#4NVNT zHQmAD3^LHOU|rjjzM2sJ^rZRfN9|kg;Bv{R8e~;#Hl5~Gc6ccT{4I*VXEe_v5VY?W{)qC+ z`5D4M!b8spL^uMdo>GOl^d`+VBegMUu3Ne#f?am z%P~!*?nLl%K-;cQqb5*x7?-Wwx~M_jy8esCTwb;)v!49d78V8h+DDyhSeioRb9qj zzBhs44|J2B;CQKW5v^&>blEHZLq<~*S73Z!C^iK?BxbS?g`s`FAcxd3nN=n8di9Y@OsNra*GcV2+uxyBAiZ?gG8YZ@>H7#xGg|!r63>4lQ5M z=mRZr5DzOM*v521V-m@em|t126S@wBUuz*6_TW~D?*T*-S?mM-!ekMY>IgxOJIop5*EFX%1g zS3N(lJN}cuflTo#?LP>BKXd#=X`og$fQK{qJuB_$MYDGUcagtQ=IfxToBmfwQbM576dYaX>>6XJ};H_P>&?etU1&l=Z_H|@=e zVLVXxRTzy&B>#ZVXckN8u>mN+eJoqRKVUfT$cJ7$ci(~PQD@`KmZurG?X^TfM5~3Q zb*Ee{2r>0mwo`Ah)FQZT%HCHl8iGdr^8|;rye@;Tg`yu0Cxu)8MsSjb1s7fhr(Fz( zc?O~8uD=DGq(MU9CEZT-0=JFo&;509^2dSX<7ptdSM5D~j~u`+Vq^kjY1o%~89WHc z2zOJ!CbgY#8j=uTRiH(YdXP9-W{qOgq z37P*KTA|Om04$Aah*jH?fQulo8)B-!tolY+iMAIJ@q}8D8T1 z+5lig+h_;c+!0$hOiX-ZSZ&`14S=xfGzLJy5<0_8eE*({r9_usitP>m=^0^~JAwU8 zVm+qcuNI#FBmK@1q`F>1A9R1_5dCW|i0xI+o3Ed5+R8yr>*IJT8tjLs#aw(b)2Vv~ z69Jfo+K)?x|0Ih*ILy<8(TZzRcz3*6*%)#puT{y%JvG!D)3D(iklcRnLWhS)@=9(c z8ND{KGjieUu=g&Be2cI>m;uCr9bk)5oiF#aascMkb!r``l0Zi6Pb?86*!e<0)VmV7 z?C08kRD0jR+Q5iz5~Cn&BSS&(qQj}kX-0j0l%zH@8B21EXhgM&AyG~8nGvI`gjDT$ zNH`#aJCTmC^af9*#kAmB)BpH|4K>biExI}8zr*Jbx}Lgd!R!&dTMfDGTi z$LIS`RFTm1bbTOb1(wVPJK}JTb5ns_scB9)PPP8}-nWODDEPaJ{(q|2-@hV|jQov5 zphJ)~R#u&_lLkY7jFzH&O0xA$=~Q>>Z7k?g(sTHAWO3tmT5N z2)Xg^&dP~=x|6N{FjB@iw9#-P!G zk|RJEQ{|2Ls6q?S?(b~J!tQAP(9ZS{7Qsjp5S|fE-P?54%9l!m5+gRXM}h0s6^EDk zvhR_H4>^3S|7cbeWj~XXPH#qPjvoOKpB4lFn~=?wA}76-Tv|LhdzY(a+1dMn41BbO z#VPh<&HN(V-}7dsq}vAsSr;qb&5ut zjd2|nW}6=N8rn^_H>^MhWxAYA`dh+hdQ4~2yY;xv4_aI2X+KBY_|0x7=1tap@8qpB z3IXfB!<8T0`o)psfEl;H5XfGe-WoXy*juL#ax{Bh`_P2|=sb!Lf!WxP zsiOBQKfqL_ARZiV7Q`ENGZOyZJ`k2On_gmg%-$%N5SeZiZdk2Pv}Ji2KQ!*!)$(1P z93QIW6#3woE0baO(J?{^-A6?`XKXeax3G;GXrrMm>!FB^2$tCBlMdG9mEGTbDbo(6 z`;%gAd3NXZ%LUn;SKls^OEXuKoBqm|vKgIZ4EKL}wf)7xm}ynM0bk7f7xCGM=NjSN zeFl9M9-|la`Q~=<_7kGslv8c%8E!e-skezgCA)d_K$}C-_xNv=St02GZemQGs>p!8!WH*XUcZFgl$~WC#svV8RZW_ns2XG>jh5x8ME2n?cG;iMBC7v0HA|bY+6StiUd3CUwvxY-E!cF1;}rvfSWxg@uz8_m8iq?RB;D74aWu?_wq-u3vRMjE;>QX8x=yV6t-`)Li8`T_EK&*cgp*f zQLxDfOc=OC0+08p*45?I8b5Tl{pi_L7)w6ZO*S%EPc%7g3_GOR?)%V=;@9AEh210y zQACyNr4)@O9pzcB_VxJGGF)0^aB54AU7Fx zU(|icUs`R?3dBDPP1Jxpiyd|h0m7SL*6x6D`x+tTEaD!*dlFHJsKv#lkf4@il|aU5 zQz^^1dc|5iy)f#{&heK$-|Bi$X@&K*mimZ0tH}0{>3*bn;7{OpXsogLiyykyomFhD zZf6e3tSr9q1ez8>$rfCjK)=?@#fS_>X}#1mQLP+dkQVWZfK^G~WKnu8_~^~ME@XK3 z9Ki;HlG8XC@JkvyHXJw3DzOsM98=VMFk6Xlco|f(?tD3|*z+D8QKmQp$E>K-O5~b~ zc0`kNY3)v*#dzTp{I;@W2rt?D(MU z_k(7!wV_#6#|ItVtjLE4b&e03JBR?M2_O*jK{<8t506AV6Cnt$19pTYqh;^EXc!{y zmudu$N5brkNR(lc#jdV?GGz=UgoDzBrnI(mQ2Jg|dip&7YrYz56uken0N(%F^x9)! zm#yC?*8u*AU;o0t0IxF<-)0(o)OaS}qQ3w?v>gRrqXqnRe*ykj_=_`9Zba{9@jn*) zjeh}N?S+fTLBn7(f@X`?ZO0Y}c-)qTMg- zPOq=no_-HUIK-g+x;MQfeoN6|ik^h>EnI={a9O6U>ABIkc-@yg799Yb>w( zc)%}%mbjq>5`Xhfr@2f-G7Fg275!&FE}675t~FRs0BKp#fA(W0%Re$O39|9bF<}(3 zR$gY3%)LS1K$Ns4N|P6{MS`@mpx0-UC7a_gRrT7&8L@dZ=A{+;GwmFec;AY!8Clk{ zKjPjMTw~8y;Q?D}x&7vBpj-o7C<(oO*;9BIe z@lh^4m#27)SaY6Y88VXl&krhT zZj3v|)*YMf$-N>u@#C_dTV^G;BQkq!atIVx(u;9xBu)R`Gx(|sTTmKD;a)$%UEKc zIVo|fu1>|!?EF6BJs|N=Cv>ZKQFSyq$N1*q+DXXzQTMmF5OmtFOIcn{D)_F0VnrKVXlQQ-|gS&(mQv$f*kI2 zZH@2#yv;#uPlocU43|Z`b7?E6&)nKVjUXUXmw$81f2FD*gQ|3Yi;Gk(&Ep}c_>%`k zI1ZOX+?9KIv|2AGT|OyW^MaN}D`>2mYTCaF@Tl8?kL2aMUmo~ifSYz5-}*ZEZ-RA!?rUnby}VC9(U711W|$|^)OrK>WY) zAv%5rQf#}i+{YHvS5tDpXm(RbTZQ11A2MhOboOWd5qfS3;54U zXe=-P-|yUUrj@XG9FDcsR%6sH?ZZ$vI0uyp^|mM=p6L~O%V!Mta9{HhPSWl<(Mo)l z-|`-RQlCXDHKkWyNTR=y&oYm_~!%HIf=vb5NtAW5^r4 z7xQO3zKM|Fk?@hq>BUyd`ILaFSAQ%}N3lSpD`x4cpKu6tV17O>fyj+_6qrkc=KRy= zg6SL;FbpwJxl`j3YIHjoWCY_0*(+5nryT3}GB9W^V5an8Y9;sgePZ#^ z$eaqU@Y4|ubhp{5_wwAe`M|61)$!geoD=MymW&i1sZ7a@%Y z(2B1oIb>OF{cNug?iWtvN>N>kk1Uwtn?Xt=~ zmy3Ou^11kvfpe=9^@)JrZZUN&4~g{g^gq zus@D@f5+bSE@L~R%lykCm;Re-u-cy2vP?aliPC01qW^eo^`COGbyF+6a`nr|5!N;P z(VSg=(G62_+y{*>8C_x2YN4x91C5_SXR9|{%J`-_yf^c{CgyIf&ST_U-$|1gJ2ApC zfC(IPgk_D>IGhNoWUne?AC(OBD_mPM9vLF#JZ#~5&9-Lt>G+66{X}pd$?_;3sZfkk%m8_++e_uK&q#oPnvX>r*0 zvU(mbk3Z`F*0%ybUUb+@>xm+wLf&ogZ(M+6TkQLvX!tlD$GyRH$3PUN z;$-Wh=WlrluSV^HLTjSYyygYE#rG8D?jBfMg8W7KhIUK$=K_Zp*gpM<#grhxU)Mt6 zw;V|r)dFpbSU=if#gX=zn4IJA#a8(hu&s-_zH@?=xQz_b7jd9Aoiheavj|6ziz>D( zUQ=y75gs?>;AstIv(B7GIPGb89qTJ}yjz=oYn03NlWBz^|DnRNcRPOhIASu*06)Tc z@O&%xF}^R2UPL+?gSZB$HuHDlmuwS!f*#x}3>wNIr9;`6orz?uwomKCVHT0)#-(1# zBXlM%4KDvLaS2? zcTQ$4x??Qf#HMi?rk?W$jb@(K^A(&0T2B<@a-CA5zCdUt4Qt#7*263$WIPN z*B{!U^0%wJ0#zOIb26vX5>!d>lO2Yfqf6}aKO4`HCE!9o?M`2qH;MZ+R_lBCpTr?f z7jp?6d%LDoU3>cF2~Wc`@Tbp}V4xE6E6XgHtkT{}RSK}?ANQu+SC~mpM&6)_NWeb^Fc|c+STxkDtO&HzKRg z!=V);w+8r@gRgF`t$u($Gc0;%`jm%AV~5*#1v{huk3yjmNrv%S7L&&Fi4sI3qPTQ~ zmkm5=wz9utL1;f^*s8m78mi$Z{B=!aHcDXFjeA;77FcphDAhSVrUs`!KAj_k`=7Yy z(aZ;XHTYwG^-=mbKzKe|NWQXj!mzKL%~#N^W}XFHzDmX!2cJyg7}sp2&O{XuXiK}< zDk6H>h!9y#t6hma<||B7Qkcs8h$Cbfk4D{%cKp?0kio$_zVrmONTORBrRlx?S6ucq zV@b!kq&?QZSxp70{=7NK2R|k}FbP(D+WBfqOX+G?%EbvL%`avCV~<*Egoi&B`BZhZ z#Na-|dTG?0nZ7>>{C>NM<4&KU6N zA=A%X)H<$V)BI6Y-BsB`oMn7t1LQZ5`KG?+8CfRXcj+VvSQ9A2^a^5lOL0+>zGJYc zO##oSAtL4J_`y#TbeD?kWR%;_M*sb&W*6ccXA2Ve0$Fw5&j4~ajSyFjoQmI@2}YOQ zySrjb`<}6vnjH-%Snt@$t8?*z!-krZp)fu{+EjOxPK>iR0Sn5w8I5onigF44W|_@PpaYEv6ZL0VdhQo@#nw)$UqRJ=zgFjHwp zB)KGH$3F-)p5f1&2Q5zB{`7eX_>##prF8pXfw2@okikBJcH>|ET{bH!Y$g6f+ZJEv z=yyl3GcX2NEZ{iDWsdarC1-}(i5Nkf9%{E@J(xZE-5CEf9bmP*%#JtCp#$EN4!}$! z{z*|GqD?T>Iad*>2ZX>pTVytM$&{cgXFcA{{?!)#eC-XS3K8i<9%J$ybpqN?8 zyl1L2^k&D-*}3^O^xzLg`q14X1~&X=YWcI@O8kNGfoqwt(^vHR(>ptt@Byg<3@w+2 z&}kGaqu~mOE`-}nv_p@6nVW0S%^vir*jioBvLXjMJ7nc`#7x+3{Ht7%EU1pkDO76N zcoX-y+o+!Aq$G4lLLEl#_Ur4P;(4l$yTg7VyRt_rQMkd@h>nrFtU28j;o!{-2rJ+(?2w&A5&>-^&%BkkiS4} z;(z$&UuPc223_0J{h-%yi|uYc8jUZS$_;WR9GSS2J%pOII?q&2n@nf;-Ei~6nZKuM z%vwf_Zstsg=+OfDM76y7A7;VL>_;L#UejLq+)&fd6PR)vhou=gnY!*HEpn;f+~hy1 zLepGxKuSzVok`sM@0s6nyJXM=jJ4iS*lVJ&iQ|m#9^<5rt<&|5VrABVU2--C!8N7STyEzB(`MNp_`+RvKE@2x&7a> z(uQvhnG8QAHd@}J;1u14T@12MScPGpJtAiq1-?j`VT_A-%Zv`QO0abcv|PbNp3Da# z$wi@&Yf_*o<}}||-5RMDw2KJB#8l)1S})WQflkeGf6l<+{f7{2&%*@>$xyLByJj-w zeeu==KD0L!(gHQ#EPM#Kp@?;5SArRCbZR$$YLMjDt`~CQ7M7b}(F`tBgxU>9^4pLV zQ6eyTC;es0$a@0Mh>4(rG1?97?UU)hx<3xXStm}?~qTwSe#EkX@l z<=s%qoD}RQL|pUDevkQXxx}_&IOw?EYWb8=koZ<3?gs(Oc3hlp&|Wk6nID0*Bqa`G zj5hxYQ3J*dHuAHXUsAqm_80*se&huIQ_P`vvUFgr{%_bSm8goN%AY9diB-X0AUM|b z6~gj2k@*efvgl;kBf^jUg~!aoK}ibH4spVLMr7vB9GO}9>cBv98ruAQhP+44!k_(sOrOrP#1CCAN`IGhx)o75?(_X!?0XDneNDNyONSxXGFy!1yZwCuUekIimr9#INlte*q8Vhh*I0>%+6-mNnL zvVPR{twO`&I}nhA)!68;p1$?fOeqllPT`k%>=d4&xxr51FzpS3WAJm$)pO&I%;RF+ z7#31yfX6WyfB$7Ee=D|kF24Yq29l+eS=UkdqSf{sFWelRg$L$X2#q(#1`pkTkZxs5 zcIP4gcg=hLZ|nQ~#@`M(b^EK6Q}BEC(4B`#u^wtZ!q4pF#0Q+@CI5QDKjvJSEc(}( z$?%%$WOz9WyAxX4Z~puKdg|_nQ??`DFe_ZSGfj7M)HJdir z`@GxLm+}p|i7KKMyXdFyQ;>$mW65nyX{PNj~a!tvBuoc%=I6SJ_mX^bC2Q_@F{UBC7w&Im#lsX~rgauX0D?N#Vf?y)_dx zS=zp0>WT=nR`umzMZ#)akB}M%KRzqlH5ma7>NgMOM!i)hwl^WsJZYQ_E)=TUHO3C`G$X z7jbQc6X!E~)75?xBjdV>#tbR@grQSDb&Fp~bF-;rH>0CUHV(B$WbRir=@{*ymNAS} z7L_Vf%c`K3?64Dk52Zp-%g0PDsS(3&dsX>aTrk0v`^vV@9*s&+$+6H#R)5U2rz)WI z3<6}(ok&{A>PbXWC4TMTw6MLJTJ=D-8@XrH_G8M>c=g}#M(-KyzwL^DIoN;HzWk)ejXGVq6Z8r;R@**W9pDWr zx+g2thw$cdtcESy%nd`}I7B7@?3l z@yYf8J-SeBAXc2!_FE214gSaM$#EU(NEOI-W_B3V8TV2abj0&dsK24wt6K8t&wuu_ z^SstRMg^;lJv!u{RF1t0zP&=*(WR_w_d74@51_j-Xy@pWGz_u)b3e0b2x4-Z=U;Xy4x2O05D9O+|r!6C?F5H@N1 zF{iVTW@t18gFdSw4(G=q8}xQ?Y%SYXTRtBf#j!QrwT1*74z0*Y_T&%uusWa7WH+>J z%>4Rislu15y*pdU$VRB1lnp9ObZ?j2y#HrW7R~H()bdutG>AhxEX0vkk$mG#v)I6Z zFHUXU*~xWXM!xVCENZ+#Vk`S^II4s zuV$Sz8jH-$?0&dxEU}b(=Pj304ZO+-U6|=TOp~JCos!mK?o$;5<|NPifjSd`p=FnC ztxIvi$ZC_3qf_^Ce^l`Ze>VyTmS=_Q9*4o)NGyV?nQDXmOKnZ(SJ!P}vE*uQH9djF z@k8rQm!#VGADm4PP%koWd;hkqzib~_ti*8TaSvE1%=7{pMcrbtMvPcVx~vXA&tQZ1 zV;b{*$LO!rXU`AeyVEBH6J2&Rwn4uP$Cf*!w_Z5AZcTzO&92+YXdoD0#lIT1cS5gqqD|jqQPMcGC^g*02duVFnRH@1RH>l#nOR>HXofTyi zlrM27gc(1~1oPyE=-FM8?vCvv* zJNMc%#XJ$2<_^e$Q>*F^GQXg6AmVV+IU*t-2i4wGkkXlzQ+)p{qp;Do+vhZA`Q5|5aJYUV z%ONr))P%z-Eu}hbdTnqI;tXei!x`6yV1QPej-7`_n;k1VKrK$gwsnIXAvugKi@fd_ zBHYYVJP*$Dv-Hw#rhG@{8LX6Oeo1^!4Lt#Slb0Ixg3%jjo$}lNvA>`H%K752CYYBFue05zryv0R3L-BaG%=a4{6M5`-Wf7 z@Wo>^DyicQX|e3LBpS$;ZxD@9z0W0yU`L&K851eLTQfI{;q+lLlgWkYz5p8tI4W;% zn>@o`VJH7;Sd;(Oov9OKUpCL;ExXQUPD7FixE6|=%yZ=V3}cyub!qjynqsT%DGeAM zSI+LTm!N3et4l$;fy%;t(cfwhu0|?1IKQiEnlPtB*%LHYOZKSVibxeU)azOD50p-s zm*AR1?fx%Nh8>!E}a#|^l;^$YDzH2QsUf+2utSaH}1f>y-SeF9DB&W z!16cO)9CMw(~Ywhi3en!oL_-59gIGKdN3)FgEeCHZDrCUwW~)MoPn=6%Cc*JM-E!&C3f zrtTe{x;~qFaCoYAyo@ekL1{)6*BTF6WqYl%v{lw;mF=*~x{2zVd7hb_l^cRcy%hwfm`746dVb){3I)`Bfjs|eSw3$|NDuTf}zOcvw|cHwbD zZ}Uo*kT+lzZPD98+_zZ^UbBkcBKp9>Lw>z%;TODV6>S&5-NyJwwOU2{m2huqGmXG? z2L)<_0#lTaOOF8oaQcjAkAZihn!g55%u)WH|1J;7W%F>to!*W4x2WY1tRl&lS{JyB+{WTSONe}|tMapi0 z?Go4@siU^fT7ZRP(Jma5`0n@whtb@Ee!;2#7N*UJEmV^!khT^)B@k0UW3K{l0sCha zcuNI{LBU8(4hrm5zD+3s?pHT=3cqEgF%{U)zX5e+CoTIx5OR$|EwoP5;>Ul0_$O1v z=3%8Hg9Wp`RO-)A1P=f?&*7;Zh8u|=u@bryXE3VLDVI`98R4?`Oxk63HfcW$_5Ap11N-mnYsF9HEs^>5j_vLX&@uBZ z;~@-~{r2#9z{}t4LP{3Ltunulm)1yX7RO!WKddTU;yloE0u92ChnQyj+nFMeJIv z;ou0Rl`qCIRQ}DQ^1DXl?;V+M z&3|@8_Mb;*KQkg*9vg?6Ko9&@7;YK?b7T;PAlD;ua)NPkO2v{0Cq%CCVnoXmrQsm= z3Py@WY5op!84gCxns8TXA-Rmr4rQqS#Bg?qBka;!Z}7(Wkz~d~<0F6thI1Kyw^5Vn zuF@i^%4Tj6yuS9H^466W56ja?4v_V(vR0K&%x0Ovg%erx`<26F8p;v(d5fHlApLl0 zsh{yGtx%%cD^hr{w2Tbyobj&qzs5gtn|n(yAe{&3%zsFfPT`^PLb%9mc3(tM?I&s{ z{G)JTi((7GjplEwROF#l(;M$v9h=8k^Sb3w^%=G|$ty55s23wDj88?og@W0bS5>qR zoxfXUgnu`JlpJe`e@!s32#-5?o_K=fCWoua&vTtd?WDy-TNf$o>25P>#8v0{u2M6; zJgqAg4Jd6@sVGKIiBgdks61XO66E3DQqd|8cbAH&dAO@o)Xziw&u})`tcdf9z(^}n zELks`vW=_y0;1)n^~!tGyiXW}p=FA&Ug$~OpfNrG)iKljjMst;13(4>rJvCkWcUE{ zpUtMf6r}t4#EcK%CH&|MettH#d!hHcAl=WO&%pWhcL(VvpAS>fgtdO6iRHwlDbw#< zaD7W#4J=09$KviI_M=6Vw12Zye~kmRNb=iF_%G-d2)nBz4TO`z95Kz{N6UMom3#1o z8y6im)foO8|DefQt^OwXtK)JTduOapour^`^AqtBF?K$UEV?qS{Td@+ z_lO|DK=_uwGAF?DFC)_pGG$;pzr(s{v*mq;PseX5;a{Msni3F6)agSXcL0s~;2?V{lCvtR59sScJ!tcb5uh>|264 zr0pAo{QD}DP~N8v5ffz^-;?M2h9&FFhh|(>o+BA@Zx@2 zqEv=4wtFaMu0c3h7b>CJo53yML}|YNT&U+l|G8Mt#r|`N!fEjbE<{55akO>}gILA$ z8gKB8v}Aj}o44=^4TD%mWv2$C>G#$}&*&DUPrBFk&`D+igF$~`aB1NRY&jN{rQzh2 ztc7?rDroID?WM+C*aLMkEE6z!>u5-8>pFEd@eAF=6_Lnn%c&tQ3 znfYIcL0~%mrsgR*naS+Atrq#2)i@1~vp+O*l2iN{q=Esr8iSR-pX&>QX#bDm zI|qC-U!p$;&&#f!i^W^5RSr#B<;zNOAXOeIt+KA!!u`=TOaZlRZ{rkAxI#P3=1n45 z2v>=(k|M$X+9TFQuRu-*tQ9|jHee8JWszpjJcSfr(VbV z$vd;_+B-GfxRL)3j;8bZ*s5RU%SZuBo8&jS0JRY#wQw``gqrZ=8;wfBzyOe|)T*$u z4WFJMbp0C0%~LL+6-+J^KeDV;6Z5MIj#GAwDO-4)vI<~0zpCgsWyhMb#m6Ztoyq*F ziN`5B&Xg@VPT3Pp+0x^bJ;{_UJ5E_CbLLlFaGbK^P1(uEDSNUhJLNcKEmL+XOO5&q zXJ=wlBf8rZzie=f(2%XVUBhe&R%OApjFEEQHVEpb+JMf8mdIXF)x}B+c1B7Ib}cNO zC|hhP$j)n*&J3B%2%xna5!s$XL$VPG^MdZh82aa1EgpPBPGV5aWmbu;7(zzEx!@%| z{v$*sGM;}xl>QHR>I9u5sv9&8Su6e>!o^{|2-+soNy@or;f0s;ocR=a|Bs&OtN%yO ze}$e8-Lx>EJ8R+75L-3`=>JEWUO9}WTY1Lg)R{;S;;&F~_%^ z#NW#de=mc-W8_==CA0q@=bqyrMKx|tMyx?Sr0`Oecf6;lb4ux zlfzXbyZMRFv4P6L!HP=7p9;nQ#Aj2dWxO8e0G49$BhXUk^b(*BU&tlnvW?a}_9bI} zO43a%0~0(I#dAWweB>lgd;gQ-_r4Q2JO|}Y(d*Z0L7|ztgYYG2mnk8|B_$>Sf_~x} zsW=M9+u&az4RPUVbNGZ@(J$58Cnl32^c}s8IgdBvW&rdqX=%_4ch7jad>Jp*F1H2$ z6l1|#YL)##K311FTrY8)bpsbNl&SfIpD`H8Da z=aJ}z%b4f2CR>|jVmwRZ8ey@H?7FLTAsKS0qhE!dE;PSBYKlyz>5x8`yEtZJ*zz=u zY1v<22AZ32JzfSzEZ+D_XwiUjUa~6B43F7u+ekXz|Tb=={xQ#33i$T zN4K;c=>lR51BfFIGhN5uOJ8TFbA6@0KH{^3@-hVz27^GF@n0mm=sw6R8mL7=s3zN1 z6stz%OElq7`WY@7vHe5NnqGn*7tK%Uj|HY`8pzW*qL3!|J~i_?r|^N7y{KJ7TJ%|nzOs9ne}yHC5A-x7XH;BKvJ zHOZu!o?cpCz^)dm$2~lMQgAA# zmskmVJkE38$Xh;uSq|=({|)MK6pHM7Jh%sw*W}|_$GMXzhVI;ACpovwy#;4g=R5B7 ze0#%1)UuyoY13IEDCWLkwVaG!zN-D5xmL?N#pVfrbkFg`y?4A*azlDQBC7NA`V%|H znljwdBPq9j++rm##2gy;h3fM*kA>!MDX}$Ni8u=hPhl(30k%BBta5p3zNIXu;q;33 z{*$##6V>8EEAch_o^b6alvCf&Jp0DOWf)s_8eTESD{Uuf>EtQI|9(i`m(s+zsKLng zI+9y}WZ#87-yCmB`*b2Ko;AxWcnL<($!(D8d#})9?zOhRo!nbBmq4;(bX8D?WZI4D_K} z=7P&5YrqA!We!A}le6CDF%mqY2;aEvW>&h>R`8~8 zI5gvupZZ%UnhKBl7gf4PGXhv{G90#8R_s-YRpV#l=v6 z&10m(>$Tuvi#&z+i7b9*t^4+^gKOOfR!ckW<&*2oXz<{V1N<8q`523p82A0KR;{1S z{CfAAwJUww%S=tCtd&?sY9Ogt37PenN>xVtP_{!I!8t)Y_+Si>g?KQ4AS6Ts4ITlc zJX4JroT>q+b~KRk4AA34K$ngNQl0^79|AgSG?4NP(54}v&}bm#8KABqpx3@W3UTEb zAi1my5bqofq&x%EJp}Z#(Ll;GK*lGa-v!ChK+4NX=)ad4?7=*-f#{70=ZSxV3Bw#C z=hVQ>6oW%&IO&~dlqhxHIa8QZ3(pf_uQF57Ofy$v;rI*rjwrEojTlS~^3VcFh@1HL zJ9J!#HMJw;P)U#3bjcB#I{MXVYWf}=A0W+yXC@=BPL3s=d@J#=tOFme%4g-kk zGh3Yk)v9M$7$qKcHTr<(WB_+#hx^8M#y=bDHg`3z?;wx8zQS6 za~s&g*2lc_f2QPoJ3p9A>LE{XvAP4p@4R0UUlwKdpI-}MHs|Y`*SjAvF85{cuqZPdx2rK z=g3$45fb&X&TL6C*JFu_ke{fN)w1>!>xT9e+0#{b-7s3~YS^3kjQS?|6v}eez%x!q zK~TsXl7ip|@1B{{KQ2D-5o^Ui^R0-tT3amEz_lk@gdkmNF9ktcT)8BuSojC;dSu(y`!IIHvNe zMy%2fGZ3pZ%)z6kl^$V5Rf;Mqisfe3X|>b=J2B5S*=IQR`03PUI%!L~D&H5iDC3Fh zMSfsxWGwwkhSINOB4ErGDf0lM;jL}vqwd^VZ*9UnEcDiDAM4ItGxK=XVtw#Bl;^sh6Coa1%sUD9-x0T+J(kTn z5xC(YIH>Qun@A1ai{0tx;XV<6JwQz_1TugE9&ghlAr&s=SdjTckO!%=b^2UqLr#un zD$L)S(e0cwz093k=se0I!~f_b{MfYIL~k_TGM59$8+poX!>tcKrNNq8?$|YN2|TXM z4&jvJp1&344T5$S!EQ8dZ)0mlY4?(MVe@Rz!0Y< zwU~G@=MkkIzefE3ONGP{P*fXyV&{_rw8~-jpABr&L4jFnF@^zLUz}Sw2&^b3p^*2E)!p$-3K4~~6|1GqK05wXV8!JbH)IcC+z>XA#1 z2Yk#Psrs9sr~OUPiq3OPw2$f$b;FF~K_9C}zHmI?WA(^qjt6|q9>F5?*jOJEdgh0Q z9tNo9#zu_#F?(bV^W6_jrTIQFcSg7TY;2g zCY$>>#)l_SQQIS})92yJ(?pDzRhYRQ_i)5O5!-@2!74^zb<|WA;$pbR9Mxk&AD0Ck zvo}9H3;Ih;^glB@kBP@|XXml-_#5WL&*0crEOrY%iXtsH6J}}mKH`4#QT91G znYYoISr1LW__FKRX}+fC_INwDPR?s5_0tI>aY_2J63^-HL+$K3caY6iuJFwNUTF5^ z3wKI>M4sc{1*v$tD1MOIK1Xf7V%6eHI=C@EM!`kl%iAezG+aiz#m*L0kvZeB<~?g& zH2zm)n{yu{*x|ie=<*+NiGruhI|xKk>tXwZM>GH7T|^)nW`?hlk7zf)n0Yx4KeR+! z!JAnV2bs;3M=P!$dhWoUo;}I%cO%J(`N=Q>oJp^)+eYYy0M_kJhMOayZhLv3%Ag`f zo<-)wp!^Y(Oi!YWkSThE=5U-M{k*{J%8l&ir?Dk6+j*<4*_1kZcmJ@R8%-_

        ;40 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

        7^9 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 VRaeMkU@0$gH=M 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

        78~C4u0c|Mcm~%A7 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

        =opmf4{W72%d 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�&8556;yhu&t^K9B6J+2ZX^L%$|yr#5Bi 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 E=^#R#tAWDlwZwx;W!HnmK;|3 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

        Ex{D9f^}Y!3%o%_WyjMd{FpW7 zB?>2I?oOS8cvYN&d}zQafL|~1gWV~t0`3)O!@n3-q18%!OKq26B9D-O!;fwT)vjlg z)}WgmJtl;+Qql<-!txYD%xF1--!lVedAmsA?3P9*3MF zjte_qcXNXeIBsX}q^SFhwwZ*UA@@?ISS_)0(>fBCkth9CcQSu2W;RVYUZ zp>e?!vCsyyq#0gyl~&5YzEku;A_wx67BmHG+)6EtWyX2CSsFo6mPSyNr4baZ07Y3B zh0FccMbR6U<2P8o4|FAcdSTw3!JWp7HTy5DovmH#C0=vn=QdR-Fb@__&~E9=Lba!w zwPLC~<|?A~5=TLOHu(Cimu>!f>6c>UncOun6vo*+Kf%p33rZY;fAEiGvW(!wkG zDOoiwRVwHebPki@Ooa0kx#HejtCTBHTnHLX#>>LX{w?M{6LT}&GbYHA=)V{pd~)I= z01ZWI)}!xVo^l=y*RsCEL%ZW(uN4`||JCnX75kW(N2PC>Kj?iuoPqCC#gnz{Yzs|j zTBKx^=q1!lj+Z!aOn~DOk;U(8`K4)d*}>p3MP^ zxzs)EEbah--5(aCs$rrC#jKpGzO5DLv>?QKvp_J@b026hKNXJ%2GKn+^2|l&tBipA zq5DDR!@`aaVs)GuFI|%z3*6#q^O6|;3hTOQ_t2Fq*lbSC`qlgKRQOk%#IJml*h1^7 z46O+#Y|p<}z%6-@W`?6XmK~!0ihlL?8bI{oYYO-HL35h z=R<@#b8+T&j!mVm!F}Np+#uJz6R-QAHZ^e*8mg&v&muT0J~lm7de_v{#QUdK{#M5M z6;msppIQmWIJZ0|HPu)S{X=%8wkoepjlX|-YQ!9NK=EHg-Z;Ac39;1pFT_G^dHgr< zxLf3Utaa5BHITVlF*l|E!358GTna>>MMgAFOO3#X(skt%00pE*ogkmP zl^ny0c##v=IVH_R?NZc~uo_mOI!Z-#BPEYg_}tQer7D%Yl0w0qxl>ioh*e4}`KMX~ zQFB^V5vAb@sZaU6NW+>_PEv>JnF&$*D-muMn<~(U=9PC}F+uJrVtLHzJbrm9+_~By z#-R7r8&G8KKrY{`=rkw-A{ii$eAA%IKAHr&fItDtL>5c(-L9sCLnQ`x@@TV{Ql9qD z8=wvmUKoVo00P6qAq1fkSR>V_PHGJMGL+fijc}(*WZK}(*8{wnA<`>CYoHG`vJZWz zkyitTkY0glKhm4;xv*{qfH>jLEg{x@(2z{N9p1EeakSQj;J{$BG_PJyZ8ij=c6nN| z6U;82A%6!M)MZCl{^54D^oN+P6>-<#)>vEXe(<#G_dfmab30fp=3$JCDf~Wf({q%g zs$%#>!f|VQ>GXKrn>I$v;<%;er%i__O7U2YCTP#09{>>x)ilA%C${ep2r7lMTcQ%y9yus`- z{~|G};KAXPlYMW|5J<|DNcNj^3ADij($cnSwMNfK@Kj#t-L^6=Z{n}_euduK&^Y5v z2LqQESB!{xwYcj_<4^fuIQ#Zxo4V<{mHbDF@%|6ls@VywqiZYMiE-ZqX)!@;^Cm5H zLI*JYg_&5m}_-CwCODX zv&-m9`^@KrSmNg41+@>EW~pKBZdVti#NEdm*b}q4^NAt&_Hbhh-#|M#f8TI%%$(ge z9r3KVo2`xR<0#1w)sMKhT>YSWfT=9T8SCt=bxeXgunCegJz^zgk!FgkQE_fNe8jkS zYK>zHmDn|8HK-J+iN4Y>&he^>-Dm752WhA6!AVbLXNWV0Rj2?9rbgQv24m#GeQ`Tk5XF9Wn0!_>&u%l!%rgr83ZnwQ*l;HeH4Glsbl%9|SS6*A(o_v1Xktcq(@C(;GVg#qUir#rc_ z2d*Ddke&Ofp`giti-L^bAtT?_^J?;UJrOWq)*~V7k+UlI^xQ{wRqs)n*z(r|)mm@o zX}w*@0-G#vB#Ho65BLH9ehlyk@l~iU4U3#ZVDJLHnCdFit9-Qe)3jCb3{F$G zb6B%!GFAJQz1WW^Cz%HFKTWGbnt!PxGuD^^hcN)U;S;0`;(z+7sgIF*{m1%M*{@WL zX^Lx?Z>th~C)%*-+)*5leqbfFK?M;8x#A-7eHuM@CJj~r?jd_Aj1wBfJ%xd!_%Zxsp%ViJ@R=j*XUv&m+*&L&=MW`~? zH+z+VTZnkzkAtP`fd9n=MYIPcD}HY>?I&B;u=ZWU5Zz%pM23YRWpm4C5MIq%rSR+;?SEUX-W23HK6wV^4_hg`l9cVA3}C*l4wRZ@kX zX<)1f(JZ^=6GPEo^yWEC9vvL+mu+_TM`VlscG0iBsl}@KY#^Df0Ue0bfPwN0fis%A zuDnrCk0;%%b-5$SlwElp1C3>qY#3r>pU0ErH@SR4O|H$nT*$X~5t+Zm#@dihjYsU; z&@`3yTO0O-_C}wwQp?E_tJ{&kRz`f{Jb5o{Ry_RM?069q8yj^U>`ZDzm2_8XNi6dc z9cEB3Pi+~l(ZT)W>ED23%i3_fRSbWKAWJWl z%?TaW;Yl11tq|dC+8K90p#SQNluhcfm3)yl=z1R+Xaqwt4qdN2M{4kh)p3iz%MW1w ziZaMC&Guo(PQ1iMfbZ6=Cmpy_&yBmF4s_-0LIuN^8ojTW6b;Zq#!^iVr6I{PIMA8A zKx676l>6g43%MnAk!hmXz`EbprY0dLvWtz6fGMf)SMw9f>Nap{>h7ZZ#|!}StmI$o z8#=q1r_Qe0(IPAPNnY$|b=XRtM@SY;f)V3AZ830@Z#!iFGe6TM6KPpZ%VX(fx;}uc z`crtGV2VF(b3jCy$Rzy;>E4j2i5ShrTy5Uqg)3GmFT|+8O24cDi^51p)(sIJK^?&T zImsbHB%h+qZogG5{IIpADur51MYWVL6<6p@(!$46>&jKTE@@d$3xtD<2 zq-HSkaH#8)G!as9SIKp(x~#9tdWJ4lf>Ts(nv?9e!0ui%`%43Q$BwCpF@Q0FM3o&q z+e)56^>!2qB^e@=AGF%KwiH%Hi|Pi8S`pUtw5f)+5GMZ^?--H{Kal+HW0!=*csL;xr%`R80aVe!Vp_`(OuSU zccHgc#}^p;f5&}Dq|b4GCW-|K6>U6)gjRuZVUE@u9LNX{&`bek<{gu=0h%lg)#98> zjsAL@cQTKoCF5$Gy9@2aLG+0D%Q;wx%k_9&rZyF>(si1mxP%+!Akn9cp{4WWAw!o= zy}REYx5o(~Uya;pl+#JZgH>6OR06DE5k5Q23OS4);+zt##N?js#EOaK7vYVyHMi(7 z4Z6@A_lqAdWX^@^qK-eL)fC^#jsS{S>`gfc5^hFHofA${5P&$Wz%Wrlp?}pTjZY*s zMKeP9gawkTh?}MH1E7)S&-SA^g2I^T5&Y?-*`K`i{CP2F_fxC|X; zZ9F%TEhMS1-aSv(y&1oumPag-O#irbY&rxe* z$+`7z3E#FB-VO)!c1kMKSO$Bk*k!#cQm=#E9=mE_RKKdj*re+l!OdKC(O+7qrZ#Hut z4j#Sl0*a&<8`58ZM*>Wt9&RHGQTW2BJ92lO`n!U^px9JtViOZ5=F*49SY0~=sm2?R zdGY6JyoPp61Uq7t2XKf{AbJozSmTaAW6^$XpCeya5mysEyyzZ$hdD*xjXBZm4cAaU z1-GScg`R~If(|%>VjrKl-Q@MDsk>BpLpl0YujR6WDhPvHqF~q$7U6<~f@9I+i(XJg z0D><6W%p>`O%FR>y<=pm4%)5#4nyU~1@{>zKDfxuPOaOzY@A}PkMgIG7oF%yp9_N`bQ zr=JiqC@h|u+c=i?vS(MB&0YW9@xrX`g?I`Jh5b=?+{-}I)?%)r zEMr)H8w`o4&(!EMiyro-Rf*W_Wb`*NNd=>z$dHcA!J&)}i>mj-g5h)=^U|{khY7ng z!-_p$p<>0EP>JF`rnrdWOsG_GA6MLP#hK6u#f?y0nc_^STyYmDu0nApG+J?=P~2F> znb3H}aZbmbIYDuR*fcG6XHJYQ->P}W4@A=x)?G6pNTyqv&#Q|isG~i%Q77?Ug2{#=}RGWzmjKcO6QY< zl3<3^l_Gcv6(O3rN%&@p2=dI^RF(fq)sbzzvZecFOPW&-n;QG(q+zp_{eDv_Yh7=t z{<-W;vYb#$)8ru0i~?ibOew~*`o&FaP%M~sB+VXnPjly~;60|`aNmMKqD@u#meJe? z8sy3+X2u0%^cvN7IMoIFzPMybBE9POS_p;$pI$I7`BP3$S8@|exhYY<$W={5%mVzn-&vPZQP zs(hIGvUuoN_g4&*&FD=OB=%37-J2+=?4LNVH&FoCH<6(srZ;{4AEa;Umo8B2|9yME z^znN0^x2$;kP0M2h0FG{{U{y6@B(PQ*+q=k)zd-807KCWzPW(MKyq(4@=;mI0&V z6qohRWUX6k0M~ZUbNA$y!2Q?f_e*0^%5gXNfO**M#8R8j3WouTC%h|$JKpjc=H)#c zPa+Hgfa6ztHa^hn=}1|_1?<~yXc;(*JfU6n?kwk1lIifBgzxJcUU9tJ3yLTz_2cXH zz?7QAsiAcC{h>7H$0`}mc{hH_&qfV!Joqe|RsJcY#>s`*eLdNVeyoBJK7ZPU?Ve$} z$R2`-0>CeTivEa;fQCbn6WbhJUm+Uj89_ zQfF8jC0exG{*!Lb*};LN8@^ueM0Ylfq~nV(V%d-8)VQ)m!@92Y@moB0{Ut*hCetr& zptzMy4UQ7~l{xMUFt4UQu9+*0MYmqRTKcQ8sBz6^#n$@O^)AMwiLHfQ`~32#gA0@V zN``hFLcdM<4i!8VRPaWlt^Y<2Id57cLI=$*)&iVI}{vSb}I{nEp%l z;x=Z@oYk~_kl@5WBUR&lXRdhOrk@+&8TxYLaDOc%8!6h-mP)TTe8xz9;q#~9*Iil*L)7$s|mHUKjB!D zw~nHV#(?%d?A2fxIVm|3Cwab2K)4*`)s&&mC2O129V_u~e2atO+Qc@DTXqy0FRJ-| z#k~PPSr*I@^R{5{-vh~1yj9|w-6G$_uWAybV1sr7ijkC__t zeQrJ<=EqYbBzP^CVoSP01EdNJPcw=lU)qVb5?fUpLs_1iBSMW6>YNPh; z`nBU-1`9mWyJfiFqM86^)YiCIVFNho=@bmOxJ?iU!C&2d@$!iVG-|Dp7@uOchF)XX za?Or`kHi)O9wF=YDmd_dz-};BK#sM%Y0i8px6DzOJj}NknD3fc6WWunvGPN@Y+Ltn zm!knl_Wyl=w6R12AmOINm#hn5vXnaMj#Mp!#o2qadhr1F#xL5L!{EVQtj^am$X9>| z<6v)YUhPk}>7qHx!*tI&?R0bGB|qIAO!phui9OJ#B+J$PaKUu@BW6U5KbY>Gk7%nVXd6q$mG%R^X&)i8ci3US?`xC$q(~F?X`JJ5|Cwx*fu7}jD%7e}6 zhZs`x<6vMabrFJlE&cn*VXpD!2UulWj|r`UarTcm$(lX%3Yhip{YpIVv_ox*@@I*% zPA$NCgnJvA_}nv$XrJ+7yeD~goAEYUh*cG;ux$8q;Ef#jYjqaJ@_7A?97iCet|5c)t>@X#^I=eMA z-wf}246oT$`W%i7+fg*E+5eIK0>t`6v(jk>Np+Ju8l34syTMtuX!d zm$|g`e5a~9bL)-vZ(zRdQjo^or|st3%o4r4?T3)RO^;AZ?mBYTpL)Kr0?NBuO*Hmp ziQ^oMx*Ay%<&L%y0 z5tNUcRZ_h25ITmg369_w9)cYV*n);~oDM*Q(S!(eA;uhu(ancY5P|O}ol8DuCHC`u zFX?5MU?{IU1Uv27#>SGKwKL5AHyy9BdH8HG(1c#Hz$k^`k zGG$Bn=6NzqF}t*@bvF)US5pc_#1lifoE@fZr6QLMy_I-fL&xaDBb4+`Lemduf(Bdz z&3KzG;@-&gF+HGXjfFXTk85*nhPuYOZ?}f|_gY;Ib-qZgOnf19;}Wf2UTizgURhTv8?L04kLsw`PlV8RoBgxv%!8fwotiy z=v{t%nZ=+umQOKDtUWYI^C=EuxV765b${)YRk&8CNHD$s5m0rt%yMTgG27=n(KB~u&stmDeyg2{?OU`~|BS>*P#5p2# z^4jXQn`=wFv+U;O+CHiEP(scgZo5~^wY?b;caO_O8-$VEekURIR%s7MTR%#_yT55Ci1acs$UhXAI0=V-s{&j?aC?IST_IG;uK5^bE9>3Q z;}EChn~xk>H^bN(B;ZyX#+M>(cTTaD{3TKZ^TR}5{Qab}DuiACENy=i+l7w0Tc<|DgC z#|*?Yn`Q%N&<((C#&CDPdjMJd55TO`n*0o>EZo_`e#aYqrpac=%HwwDD|Y7f52L5# z8Q&+*6S^xY^M;?NIyLKJAZT_Zb$uxD;Q-tHezCRUeF1737=8;Gyt+C0NsZgmne^?K zW(2i4lN7qKdM&24#qMz$$<~9eEH9)XLI|Xd;UGoox|+i1Zfo)h+g;3n-Fv=2*sLni z=a;2n1eSi)-RD%k?a#k@pSmnWkyN(DAfmfJC|hIEzwGFv*5m`A;+uu$-Vt@9s-i7= z*lyl3SPfltKPn{mR*cU;T8J^N9e$bhaJbCv5RsZIf*jf-3iTL{p&zAiE<$k+O-+4c zXlGaSIC4+ZJEF=BRXC-#jDE(a>MF<(C~E^!p${Ujpk%5_zdnfX;u(EqH;*n2psHO^ zkeVD~#Y+r;Ce?a4AsFzbxxQIkgn`T!#)lMa5+-$>@24h6H5Y?rU!4*poq{s#xBbaL zrNzhxYH#!~16*376X`-pp#V(k)=+d0?#G*6x4Aq?t#@xOuHNBKePn4Z(_u&zXG{!$ z7XOiHNi|F=G*hDqv6~<0#jkzKGR(-kKj+$I z_|Y?R>2ikDw`r8KB^K=NDvYV5Y28pKq4_LFhr+-9iSP}v)HJw9oXUgIr)>90yZO3M$xZ1#aDD*{ zaqesicaM+T*^$j{;GHFDt|1%wq1jMH+7T{p+rXKu#^Qu1hds$D0E6LD9AN$*zw$ozm?`bnco((Gc(UJ?y|@(ZxFQ!jv|+Nzbmz@1X%O^Lfx*lvLC!sj>v(ZqXZ zv=ztt2ho|pS8F;>nE65=D9heAX-EMYZhyGl<8qPX4|oOoFiOR!NE6b_gkYD6rH_=v z?4SotNxlthM#mK^VeEIj2ASZS*28_Mdf93z2hFIQlc(E%N&Uf)wNFhwYBoOp(an{*M$WQ=aRYL4FW?Icnij}>1mR= z>tfc8*eF{YW|q`o+thK~38g1l50`R%vi=`8m96UVC_tfE_+$MO@iChburw=(-P$1lB*uye1PSwGygXPMf(au1(vE+adK z4@P5h0x`j5@I4q5py9(P!Af?Vqwvm6M#;}L810+Kk=@?>U43NThs1FR>18LoJJ#*5 za2-T-s)L%-`6MkN=g94jH)SkaO_$!YXjDNxV&^9V z85svaJGl@kd*{_9Smcxf;fH0V$c1T0lU2GaY0+7^#f(QUf6vWCZ1o(WVGaEn1_G*G zw$`Wmn#v>fj_Wwz6qBhV`@RIobnL2Z`5$LnY%*;svL^r z8+?#IVCaSUb|%&)81r#X)!pk0WbfP2JsWvXX)178n?}A*~$Px z_VRtOn!b(zv!mK7+)*6~?Wi7B7)#CMJcvJH_9hYwvfGcAK!g@8t4VfSO*26Fw(8-U z+P3NudYEZ$t1i>nw^f@hEc6s{2x)^2UB6W7kzqopjS204%D0x9+Lq8>q&}*56WWgS z5@x4oW3pP=h%D89X5}kR=jT-k|Ge@ruVuH|k=tfId z(g3D!={M;-#@Blx9BelgGDNwPuwBrG?h~^3Xg<4ObHRFx3liHOEZ8=fm_37dY0aG{ zpLWYnq`yYnlWRe9Yh?oKiGaXxTRk)>PhpzEva3j)^ZoC0(xQS7wf#{=dm#i+3kehc zYNjc{vabLK&oXq1K54B>bJ{7nGXRvEtpw-d#1sb+IJ{2%pLzbQhKmi?&zx#+nQ7&Y z7<9?pL&M%|52RIBSWWUT8Bblw3Ux!N41v`Y9VtT>;vUm>V^y}Ei;0@jQf@#>cfo+f zQ@=?gzvQ!OYH_sqD~a`$nJ4e((&6&gx}uLeiSG zA(7zGoM`6POXvd>kzZys1O!^aw8mrYDs868@eY=-;=MvI`GsF#Oo5 z?s1}gnwPzb1aC@3ess-b9D}HrF)jt!=wbNQZ!u}IUFZil01WU_7=X_o1DkMPuo2LJ z%cZfD*pwas$S!e=_^s3Xc_}MsCTFxNonT%09hL1-Wr(%H0@n_nK8Wha%kM%)p>@| z*PV)n9y0irgOUi@oaUCZU1m*kc09T_C~Hx>?x^fvw=n_HC&|5>?e<%2HP1Q|FmH$N zfY18-x3&9nB$(cs)HG>cAZ>=~i&(f%1qi@p$Zqv;Rti*y>;tzL1QK2FU~GwE4V9+C zw%SGWQG)P+<5rKTu_hhG>wKP8s%(EL!Z-iaP!{^%Ct6l}ij4-9s@AA#_{OM`8zb z_G5+wtv$Qs-wGi`s3_gU-SFIA_1`pmO3UM2^O{m}KuO)ihS*sioHe@y9ejpH9qNHV@UTJL%L@!b4?~%G&9_6 zQu4GSJMg(bMk2B=_tIgX0{hfByPMUj4;^NeV~GA-(J;9AnIVv3O1_FOUAi=Q-NzM>?11Bkv&cPnJ&miKe;wBc{g2FRJ?6 za1cxNpSlu*&nDQf)^Edp{qm@GgE4@5hSbI%L=c+ZZQ%S%I-XA#yj2*#!3(iVI?9N4EalEMMttv$&t;|N@Ihk zmK4;au4Ip}G|lm2_qa#3s6BdwvSmZNs(bV|E>1{JCy#NFAy8_&kFxuMK=vL2*}7SK zgOvytf7y0oGgIq6v~ih(NY=7s4~fV=53j}$u5 zj133OY!}9(yB5867qacDeTJz`ny-=V%C}0kJDE2;G*+AwveSMi0dFiybz`6`;m-FT zwe+v8jcd)fJ_1UXJ16%El_?eQ#t0GC%2M7X{^7DOS)JTHcypN4k>hLElN7=ou6OguUagNjaR}DNHHvZDEd&&W zu$N>Zp5i!_?QV6PD_+nTd5ax;+d=L z`zjS+C=9Hay)@v=njQd8;=};Q^~8r;D=fy|+UWT$+gT4VUtRBd1ChHLW;ou@)%Kdy zoKUU%jA^dDNi>pU2=2iemn+B8p~`lQy`FlN_&lbX!7}s`>->W+AAd`f)P@3aZ#yXw96w(0=!XH>-SB(M-uHahTeKK|E{Y z-)XYJ9&6*HTr0YC1ed0tMa*g<&S&`8J}xBK=|uM|dkxtD{Z&KxEVRs+BFv?#8MeFK z?DyHB#}U_&-@78_owG*P#+GW8Zf%5*Ivlzz6^6~&iH!$X)$oGjzFxUKn!D*K44(&3 z(pcNwZLRn?(lNF}52+{8B2*r$abIz)*uIhEzya2z=Cz|_5-iO^#o?;t>x#HqgL{dc z;9@WL3CI1phJr>v3pV4Ty>M9(FzR4k7jGDWWxj(Y04}IDt}~6xRl}d4#hKOhI1LGr zHuuKi^0C8&G;S$UU4=Knm6<}h0vsCUP>H^K6c30)kA0JiL9CHS z+-jVwZ}W9jX=$fUO!l=?_%xGB>a-wC`wR>#(dB5PAiUnGd{L@1(U^HOGf<(4&+{tw%EUEkXKmYMHSPv5`WH|J^FneY3;zBx}@rdoSFx%%~}r_2oYI2O9i zczq>nKufvYpO7hRZsZFw$C}yt$~_OFCMG^vzL@vy z?_Lnen=(`iT61;=60eLb3eZQq^2Afl<%QZWwI1P2NNZuJT~{M=|JWJ1rw|xfQ@$E8 z3yaK)%yIJri5Ck)t>$j7;?Q0RhO9KD&?c=kh)-7PNnTQych|TFq@qa88cYQRT3L%k zc~CwSPL1wa#Cmn#Gfw6H#PI^FMTb}$&T#kCCz1whLr`D$5cK@#A~3;{WhHMw3c>FR zjV>s};JwH%kx?)uYlVzQ(~DjW^5-0~htj#BbVO=~+TG|2u3%RNrsw%jINx6flbZ8k z9~~q&I#cT8Js6h+1vOlccCaGxUS!#)`S1Xe8=KowTFNiAbdVBYkrg|$Xnro#s!pQ^ z+M^1xGsnm)i!ZpdU`ZonHj(yo{jr;_+{4cG^sS*i0aJ^vNI7yDI6%%h9AV?gXAz!V z^f`3H^;LQ9a`b1}0`ZFr^h-gh54i0Vy49MtwdqG}fZn*_ETw zS|3J|)I2VKT-21E9A9M4mFQrHS+n)Iuk`-b7yBx`r|a`y@wowI$NfLE%pk~l>t~q3 zk7kQjK5H1D+{t&;VxJ`h7pHH|<07n`nBnZL&w*$g{S22`kE}IJr1(|%#0;m^oyv5_ z$!M!JeGiwRfVJYY>MyJG^W`2xp;4dsmCz%UINptV6A`$+GEquI?kEroGUPIh4@jGv z$GZ<~#eq)3ivu_LQv}BYSc5;zLv3yfo4di#uAQj8w~W6T@Oc=n+#0TT3liVI#B46@ z@>9=O>LOB^-GW=E26=wM$olCgMw0$_y+zNtG@tT6RePn|eop2_k8l}5|& z;aw8w^X${c+!C$*_9<$kd{HmNEdZNavg4Gh2hSNss=uP5~9mycgOd1_o3S&F|VoGYf74z1aV|Y47pm7mBRsUDZ!&u_AMtig11j0J{iRBDZuKPTGIQ*wD4_xA* zPCpFQ?4HS)Uk+m)jxFDzf=Dcz8hvZgM$O-9Q>$E_U?smWKl`@V=uh-B%A?sp>jSkb z>t54ne3@{JRUg)^H5Vk?-f};?e>^vF1a95LcsGQbn3-o)>n48qg0m0zmZu5YmFZZj z1d+bQl)-IQ@f25kr%Eoby>{O`m}+SYDlSj?jy~4w z@$b_>C3-6v|@-GKT%U{CGx9kYRd**aH|FRk?DZH+{!Gci_9 z#!;ypB}G1oA|vAp-6HG`V8_ohiBxDAIEKYZIu98ogl{6n}r$5?y(~3AJ?lpSao6;D` z`%|4$>;Bfee1Qn*Xm!%~7KuYh)5;0SYv<`;36NS>BwcnqwYDe@n0ZF}mr+YClfb-e zBA@1kRY5`8ueoSckd1_9o^kj2sqQ|z@nK20X#L(KPDjFNjw-=fSSsA8gM0DRlER2T z>S&BtO4g1(eN!bjS4!5EUIRxQx1QB?UY{7eku1ZiE)+d^LoV@V$lPyyOqBvAjXbRl zn2-B#5IV-bh(ve%DB@}ePKAp1k%wpL-}>HeW(|vkc7hsXtqoHPObEBOyKxedDj>Ej zhWNe^bPg%782p9ep8%t(7=i9JGXNeMe!Kb^-C?zile}-ni>_*LoX|0OJc9YU?R8{s zxm3^qc{9i}ooRSLPt%1RT<3NZ^k)|s9d`C$^*B6+1k34y z$YG*mz``D~SxsLWmS1Pe{SfO+F(J2OT$){>cUtk^^Q(p-zE410y@cOsEo>NEuXnlr zNxT?pDB3Zo!0^*XFDLgU50p2m4FHfvK!0Ky?$R@5G+Lr{s-IX5-6j4AD%1Ubrh}gX zjd_(>ftC1I5X8~d*Q`z|Mf8m|#D_#C#U6?|j+0EsEGM|WlASK^0i!OoHnKCAv6^O~ z5kh0x@Xc5qgrO!?-#za2THu8PwN)rg;y88Fp;}z3gsqL?@1a0(zK4b{eJe2Xc>ZXu zph@}L5O@fef@wIm^E&fuL0ltC24#2uI4c42%Uj1rqIMKKS6x` zF)El5;vp)Eug+-TkgI>q;+*(va?@sFqAOcn5gSsX2a>9Xq8fHdxuIYFjo^aZu??#R z=7Di=gh_O;QYeb&$-AwKxHNEiT$;W4_soKpc${feZHiIT+zRu6poGk}xU;ZFltof| z@i+TdAJ5bMM^`EL`$%Gq@1v17(Ll|sE@W;{B2c8g4XcW!!Hn8386}&-h&?xjOEz_% zZFV4n^wYGanSxHCt+ic9M@zWt#cwclBk;b6sRK^ewa;@O5PJKzWnxbQXdg33*`h2Y zs4BZw1Hbgh#qN=^zjz3&ExcMz8!k3S>^lXPi2d})BB4ggi5z{xrN`iixmcxH6S8?6 zF4^$N&tswch~DPnV)wC-$C2vss^W-w&uAVku6^md*vYdFw5B&iiZ~8B5SIy31M06q zA^NhUJm_U(yu|Im_O#Tc`mp*ITI{8B-i6IlHt(%+TvgE zpsn00%S1AU&A)*BKlXQzFi!cS@M$r7M4NX%huaC)0Z7l%;ff-!9G@9&TqiV|O?o<7 zJ8S3f^eJ))(NJ9fc?de$KUba`Y9rTmNzLv+ynYEYcL``u$b0ZZB@GR>)E*RL=DCWj zc>QBxMl2LJekI?@K_MFRa)K+{0ZDMuv(bQ8jFIu&} zl=G?U{%wN&_~?U}FGd2dcNh5gUD}GU3c7(`x64(Ba!&qgr+*jO-8G zvPpa?!GIp{cF0c8}aG(f@zcSNbf)eCyZfTER(vI&YtnuKBMzwL7M`;){cM&Rfh0};ygjfp(aZa!{ zc=;W%o44WC(T7i_ypd&+1f0I`Eu1M!%6yM;6tW=byJ>)sBsUa?wN!KwJyt@{S>$m- zg20R~kK@)_NS&e`Ry4?^)I7d_;j4U?ff3Rt0XE@^31=s7HADT1OMAkh(lYJtcJVwg zPhCo92_Y>vh;U#{Ex>I1R*oui{ldyr#|wCEX_=!T0Rjs+_AM)Fkav3&`_Ggm8q9ZMv$OS|*)^g}nD?klQWnE)&k33frO#kgz~h_+c* zqV$WzemdBWYh&#?A{$I0`oPc!;^Nj8HFKJ+sM<2Y4h}7ESarUzOEMsf;tzfXznsi2 zFAv0L4kvGMrx3>V@=e#SqcU+tIVCA4iMV*IMV`LutFjxBEKWZ9B#S#%EpaXLLv;xS z9_bPsWWB&Fpt_u@ctf6o!|9=mT=<$~P9ffOws=EKxg3llb?d-Lc={qsz>=qgB^|DP zgUW|Jf>HwYa??K@@Kk*}d=3wrmcNd_BqOwsLe~~Ff1rK)HSNxOm@BiZHC=gyy=2A& z3^N;3AH@QgAdojNXvyE)r8sp3ZgD$J_rJYG!jfp;-ay*W{H5|Y*Q#A9W<-wG^f?>7q1u6J@=o%+Li>HIuledxByJ{Q3Z|tg~M)nNZrbMoX z{g;yZJ<+2vtceTAcFN}D43NUEe^3)waqo9kugT4DKFiul^TS&4TIVh1Oe=oFwQ^wb zw|kUGQ;e%7CdCtE)}Jg4oCz}(|JPOB;1bEA_;0Wy`v@zg_@|H7%VvD zuX`4khe67vyR6$CwRbtC3Y7Iu1;4_(3t^VAZdJcb3BNcNi&iO#ollC@$cjrdWNYkW zmC@_B$(GG_CgQg|C4K|FHc&Vc*wM4J8P3n&TD?tjFhixdSjCxoe4A4)_bGtUKuPC* zuIa4uV%cC4e238x!HGJJ><1MXjVoR$SF14Z%-uYozbAP=CX?`J!yLXv(5+ZSW)E{CdRMt5ee-!? z$Tr=2AKb}LzmR6gs2z(HN*(NaVCZ1!Ij_!5;1zvVLX^1hW^1)Ozofp^$T&o}%3w{3 z*i44w%vZ)CA7YVR=^wf zxa*Dr(!U95{E&xd)#TG_BeeIH8^{Pw&Y;)R*LU6cFVf+od?Va1yOP`CuB-VB;&0c! z*)APU-THGn{M({*hqdApU4P7z3rz)o_d=QMfCuWCA93I53}N-6oGH?#cI{4a-s4=& zO_(eAz>A^CKAg9?DpInK_`XaLe>j`@u>MXFwLoE>)%pG7Wakk+df_HoIc3*l=cY|*Z8(-K37L2h}Y`I4|?ip zIEbCl1r>oeBcU$hmoU4cB^3@i^}iKhe3|eXY2!T!t`oD)Ct_Uo1iL`BE$!($f?3ia zr|Mk8{*kmN8o-Ua-3CPkiR*j4@nBCqS#dpQ1_S?Ke)1XtrVTfgq3yNz^aCkPPp`Rp zsti-jL=oIVD7?WM9j$twg`9djQ=}yr7#1AIPXzuh4XXeT$aqvX&qrp0Fy^-XAcl0D z(Ba4Gx6o#VSuL~fW#l5^EFsOzNtD|+Bhl^LEGt=b{c8s5wV-Os#=%WmS+GWK7L zSp|m_`0$_NpIo&HQVNGSG&33?Oii+WuWVIrKi;q3fbU!>dNhXcf+Gk~{le#|1@ebq^~PI1hi>UP=Gn4!2{&bejBCYB^qSuJWBd@64_LT?ft}2-4GBYf;;h?#I=7L5-%h+f0vNKYxpj?+%AB#Vqq)j;*nfITOJy zfolwV)ZJw;Zd&3-mb_)nhXpaL_%wc+HqM)g`GdI*y~2n+zbq@YHyaeH+8+sE!fYVW zPclOse*UGdSiQ5|F3TE8y{SFf$b4dfO;K}Mn`+3L`q#jtfzg12w&BP~=tS)^?eRy? za<3JrN?R;jWhek2gr&jM0s4mhX+H^%H$@djxD0BAz4NjZ@n6Ij6g zc3F3!*_g^sD$9*#Ej#S4==Q?XHL4n1*=;L-Tz0IevS;a|fE787-(kaAB8y+BZ6YoP z5N03ZqwJX};~Qy5#WE&3C;0U?eYpUk5ZF{`EDs;<^UTP6ttCiBUMVrzoRUWYq6_vGksu$(iDFOw zNG!l%64pJX-6Bq@G;pw=?UtG*4ZuO|_hs_M@_srrrms*fK>XWR#} zjEc0Dqm)boIl!ysf|F|L4`lo}hHVNq!)i5DEx+(;=@3{DwkTLW!vLcY9I#)rN=LEN)>?Lmq=uQ<)326@J7w-vDTVreb?Aqa=z%JTYOWS7qncSV z9aigu3b-$L1J&t4A~5!u4k8xq0Jtzte3*)p;qzzVaFWZ;8z@HoFvg{H7-!G4(V*HG zs^AX8eNwql3YqJR{>}iDaZ{waPCyu@Mr&C_{W2LT831=O{4m%GXN?>MV~#!Hg7h#l zpKzZFPrpy`UObJbE^-kY?DTV!GmX`g`{lN$c)9(olrpT!0_miSGBQ9dIWPe-KfC&N za$kCWxHrL=VyG1K>+uFqsj%;5l+>t|6>BZay&+Th+h@r7EsvA&*9XS1A|tdGxw1$j z?$!OGOY6G*(b&3_z;1!w&pH-!$Ps$0j|xiV@QarByTv>S%4lu9H^D(=pU&`(w}LE1UOfJP%3 zJyw<0QmL@zq}A1nc-WK+;`yU5CBZlkbG4?il;&GR)dm`WPSqB(?iC_@GB$^E1dYS+ z-f2=*8Bw(<5~C$91~xS}l`-N)dlREpK1)iie5m~2Abo1DPz#?OoS0VAyeibP?^A_? zvbDFK{gv;7L`Tw;JTgsd33yegy~bS$f0KrT-SJ~N3MT}a|HydsB9=Yn+*45Bxm3-s zJE0q#o0+@T@tj4OJ)zw>Tf6~6JV_G$D&){!si@jFyj7|e`X_BMColBg-8539wT$$t z*zE0_C+(;%3GctqJ$!c-!6$g<1<{dLxVOovL%!Flr*;j9?*qM4POy!UK5dx0_uOB=^_@L7d+G=nQ|x{r=nuq`m!d;fLSJR4b=!9)z(7 z*EnD(pk)HS^zI<9*gMdF_sbS%AEUzj1#{Hu>u_F>`RtQEK*qzHUnbWP*GV4yqqLSP zZ#vXQ@JR@(rX$A(Uoj0H&Nn}#NZQZ5S}^hMzuos`8v1X_eOZr&M^r5+t*AXfVHaqu z)*r0L-`qyvIea$gQB}+P6in|VpHxeK1nURO z8A#fqW?R(kBtEycysb1D)t2v!hPD%Slu9u`u!H4hqcF&Fb$xF%&}KENvy`cTk-##1 zToW@D5F#q+4_5bYPdYE?)4oBM4C_9r1&?Oh;(I`5Ysox$#ec*^)JvMSqExalW-m&~ zDW|R!IZ9f7W-Zx8PQxzahGtsedbglRu`qX7u*a(xmkFHe@puv?>nXCO*(!G2Lv^OR3-8M^0tfL~jg;z>#SzFkwoT(*##3vVQJZF3zcPsxR z2c^+v*K17&NGeTs59i7^mhl7CtIHN;NxIh5Nt!`4H7<4Q-av34Hq~i{K!PMl;EiAK ztG72K_yKO$=bM~48`nIg$b+>oe?15#0ttY9<$SqbBA}hVv14oW?(|0jbitj^b1|Q`*;E zg`CgxNzBh1`NYK4)mry?m|@`U7AsZa$Acg{1wqi{b`fMeV|I~8pAD-qDF|XF7PeA{ zfD|KqcTvOq%9?MNi68`>LQ!IMiAH0C@auea4#hM!_}t=gb8zSDx0# ze#2@Ea_E%1mw|M_T^KSfB7_JdOeo!7E%>|wU`2kADq|ue_H6jo0!NL{?`~K^P`&E(emFu@jTZ5dS1uj@-{P8)s9YW zJ{G(y+KkX~jL~1_R(ZkX80sB-!^XISd+AIgzyc>a?%gmh85Ouvt_XBiWO1~%@-ceL z%^YV32cws_sM8Pmc2-`X`e2gZll9RC#K<;=M!hA-H`}|>>f8LleURyCDGiHVJ zqFKSw;lzHlcQTA-j;IaPTe?$_4w{ff)r|gr{^O=ZnM z5W~vc;X+^{RxQ5QI$=R0)~J6Am#i^LwvZT{KHi>j|6twR6btO)@$5`QEaUBh`%#{Z zh4!g0MsvYAwSPo1TI7wXtHRZu%}~`3W|*8kvJ6|@@kf{h7Bc7oTE$AdrHRD87cO4N z>#~#QZ=R*rgdA@Pu)b6#FJ@WOnVY7hE1_mUp_e__x<#ut7!cx!wX~9S1`tcnB!jsr zYUOV1S^9)X#^SQVAeQ+5HZFf!mb%umfO)N`dO2o)q5k4aP>b`_#F65bv6`+DNmv;e zQGSrw#o3EA9Te!A-*-grLJ-?@X|*WaBihkyk_j^MZ@Krme|fBq|QM1??sIjkPb1Z+_`+8YrjBf z!-6kyjnFXWoQ&EFBlfg&0^JhQ$dK-!Df=Hi8MPRzlCAatyEo%pf(M|ENY&Cxy3QdW z0P510tHcn78-V=$=KLWp%Y z!6T5DQC+z^!|NByx(XoksXJc+&Elx3G`T*Jd5o`$;3_xT)?;I&lEXEq#O>(%>*{U} zDEG^3%MHa&kmT~XU=Oo8Lu;vKFwn4e>!&5zHkAZ_W&}-?*%AWPTB;_xYLyb!s_i9K zG$WEVhWoCV=q3{Qec4(l2gRcZPp1lyJQEcWjdz5n(W)2aw@i6$V_>e5w@Q}Bg3@T! zd+dXZ^Y1A!?QZ@o>lAu}`t^iaO&e>kP>ZRtUFMbo^Iu@hW~h;yoy~>B3>m|j=ubk80(%w7tD)qdt9k2@@_-r~+FM+2&PB)|j+8e<2zC1!P}JmT zE6$DYInjJgj{uB2e4umTwB#xEHfF)D;4 z?>tX~+~?AsY?fo~{GS0DM#dAl)h8g$jG{7;_m%949@!$z+SAVcI2!m6vXM(@?yf-d z;N}T|<_Ve26S5>qBkX$Zn~rc?s><_t;4FDT-|BGhQL>BLSp3nzQR;H%Blm1Zuu^Z1 zRYKx%r^FOE>ad~sS%I$zNL|C}^my!6;~_JowyVIg-th=dVGv?d+z}avM>k`bnqIb| z+Fj0eWEK(teI$E&p-==}-2f1@y%eG^cQ`^xCFJ$UD{yEFoBdlHREm1%;s<$fy7R#>rCx7cD{N27?Of!@7RDh;9EzB_3*LA(yY^xLq$Rlvp=Z_AOX47VwE;RO3t45_(?x9S@d zc9g4*kUsxl68U3R%a0(s;_`+Ir-$gcNO}#yL5@5f^*gPlYFph}!^H^R<0XBg)^r@W z)QxTr54tVb0QvXoE8U9eX%_s!qO)b!BYd*#Y~YF=jMVPy^{*7ay&!Pj*7%-d@wQ>= zIeDZ5=g#pb%jo_PBXlxqz6y(Me;cNLO`vzYq1Y?p zJpuFmc!yB$dpHFuQmk83X3C`$nq{cbUq6dHe04_=TCjr`BhW>p6Q-kX z5~nY6Ji!jreMYs!Lu3WKQuD7c)I+b&s5tlkZR8E4hZmvxYAtEzQ%w#+CoM6X z)&Z5_X!>}4NT9Qj&= z)9gF&XR{a*v~kf5%#H=Rl%<~?bUU=ct{E6){As7|e$m1q>Xz2>11K5VpK^a^m|M-q z5pqL&5QP97 z*S75C1IZ{Y+z2)W%dvne6zDT*2yq)OtgsjG|4#?mu*X@(Gr41}{Ktq6G@7(LQ8M5c zBitZV2q#$rP+?c>OAI)l$62vwa>rT0$0BGY@ByWS;OKtJ0}+8nzLd!WzoWfhaTTwa z8|cR6j|qPzCL}JzjToXy{+ zp4*2w3&<2dP^LAbagZT8t~;0fWX)V2%AN?6HF+*Qfruw#2rI>M* zVvicrctYx}`*L@ve<||_ZW<*M9+18mF;y`ILVcdO-aI7DZGKgnThOkjK0;f6f1q}G z#IjWNms{%6+fo%oOiSvaI!V(KqosF`3885^JP*B3#kQLVC1|carz}ejf97+Mzd&O=UxR=Vd44x4MkAx4?!Njn1X9?V zIvO5rn&=iad^^h`3tG--RPtHR(x*G)~G;V*>Do|2xjBSA0^6b)`k2l-RcrZ=Vhe0mQsL{%ASImak0o52?$RK77J2-{T1;T#5BI7Eqaj> zPK4A`A%% zr^^F!kOsDJ4lS(}_9HLK(L_fUqAlJ8JkZJt>)WFdnp)o=2+y)M4pLN+EA@_)`qa@^ z7%4@cish3!2uTJ-r1&k8ulyExzlHKE6fX}8Y+VaC)C{mo>>=LSauk)%j0ON9^j7zM>Gk60B_1Go z2lvTa=;n1~zw7M}`Ja?o=UyPl2`-FRz|NzT(sUxQTuIh)Ldb;)HLP-xLmcxJN!R14 zGw7|T$2WbSK5-Z@Wm;ucl_PmR=+4LBC1O3b|N1qg+ZZHm>?8-5PNtiR)U8kslB)gz zs(x16N&u8RQhzb^7t)?;(2w)$oQ$1R6MOb|8EnLU(3CUNSU;It*|% zm;b|`pm>HBKI)WHfcrl>6sY;0tS1Gzq*jLm+4>U=JUOqCi7W+yn(s;$Ikc!H&?k$~ zfZq9%Txy6Y2~E!X{1v%*X8^P(6^8hjQj=C%YHDs z|LNqD{0YV1jYRB)8A4mk&Fzi%3XJpQWk~~1{4}ed##VmX_4$SBhYaFBp#!xqOfKAO znZw%RIoXr|(9x1CBC65w?_;RiU`gY#B)CE;%c*-4#g}P`UAd69a;`%s&R5#mEzh4R zMVCse$TUHUi#m5{8)Pvmm-fNZq-9B!CWXw2^95a2P(tHx7; z!6sbQ_MZ8^Xmg1&ms_J-pJ7f_73$XPnd~}=6ZD136Q8AzL|vN2?pQC4eP$Q{TXHB7 z(OdmgM>MNw&wM#zJtk1gEvewE-`)X&Bjn)obSrHVG0tyOYVhtq{H8;jz+`-tOJ9(Q zaA#Ea>u_MJ4xg;&Z0+6>e_D=2F!LcY32c^#LlrE%EtVOosCu(BxtjA6GSFq8mjgz3 zUaLJ}reMM@aQjR~?A zgfAQr?ggt6XAbK!8|l$TIl^#~kq83VT46~~Q`(9yx$oPL=yYA6JBd;koFp2Kqb~rW{9IKZ7>@I7dV4e2{7`jY`NUp=LPGi&*(zm7AQp-*AzPya2cP zIa^iki74qzomab6*+ZQNLc3GZJHCq_gr-_cWj)D3`El?`kWXuofI_g{f&_vQqN9e} zcG2C*^WlMqa7+47d8_0H9PV6ILXMtF2anp_T7N;UREL|ylhz0dLY8VPXRD4|_f4W9 zeaDU;(lRF%B@BB3ZsHIX8RU!PeQ|vgb(=^+X$z{*Q5qSDQ6kx ztfIn+cFi|399ed<`RmHIJ#62G$2~T~y)xtB&%T6TSm?^MBJNnGB3hYMR21d_wrD%F zTpaaxzD4e^`5w16dgpsQ$6P96SL6i( z_WuZo)*~Otd85Lr91U#qhY9a=*?4Vb{$Sx)w7Vw4C6I7nQq`Q_!?Enwd-nFOKfUpI z1C`YL+OTc_Fy(127oM&zXqH!3-Y3-cvVyIFe0W$_lIHgurnOEyspHQoafMxw4I*07+ z9~90xKDpaC; zUgs{4w7@T~U~#-H8=@UQei2KGOm#b4nFqUh1F7xhF3VG{SRQWd zq9q%~5ti-*3}#&(QuETST_4?rr%xp)K~5>OR79(ZokHyFiVtJWt^f|p zaf^-djqWlD64qzdr5{VOxvOi>q`?_ioN*h@Za$|sj4BGGGexRY{c=HL8<&3E^&}aq zP2MLYyLonOtPan zd9H}bPl8bR8MWu426}qyJr|#|ym>7T~2`Zkc$(sA9Pj(YfD46U8mNmH9h~-xfM($k4^LGK?2j zvhan7n3sL-C`7jImr9vV7$YYWHYl{gM~J%TIH`#ENHIgti9cZXq8iw!3U*HJs}c7i zhEVcet>rnq`3S7*Pmk1{oFq;~X%}W6R;P-F+)v&qM>zGf#9 z!|9E%ML*-0_^*={|EZh^rCaTHUQy>GrQfAEP``B-8rq~S8B-1`_5|^#Be48Fkd#wO zd_$o7wdz)n0x|qf73AAZbHb82wPzq12kKDvP0DMMFq`Yyz!(XCl+#B(mlF5@w7VqO zJM<-f&E&v>Ix*EP;Rcqq2`r+7{v)@-zjGw(dmh6Vx!WzRN$!Qx>}8W!>`1j?t2F@v zYc1kT1YrO1<7L=-P)hn3q2}ZvDskIz)`K9@fY$OD2a|p)?zB9&0ZOUYcgsi<~^4S=oelkO{nwdjQZ;Y|3B5q)+0rFsB*gBZ2ceH znRFufR+9B8i_=LVrbyH6t=;YE)9snSWLd(EuYUMf@e8Jp+N&Jxm=C&;-N}ji@ zS4ryg_28D{C3uCB^WNFs#2-0{7$BE`Mzsg(1k-mtIw7!HdORr3plQd}J;5UfkO@WSWpqzW%fn?K!kwnaM7!bw z3b;)$>*}j7ZuUa17~5X>;n_1wPPHw-H*)Mt5-fQAB3T8=Uh`PZ5!*%fW=ql(H8%h56*i?#QTg7$K(F{o{YOEm2hXUcQ0iivb=rNu$Db0*I@PE^`}sY zWIFfwVvNtI`C~KgJz25&xLP>==xQzB0hmbDLBS0wlsgt}@%Q`hn%!n<4@@nQN|DU0 zlDUxMCz1`iCu`O}8|9b*f{tdnyrJ{EP%r@Q=;?&df3( zE;$p1RMl~*TSq^#)wilsq+$}Z4NMUlTcO$36xu17p0CByH&$w~H)KT|< zrw7)C18;@xSkXsv)*Ge|=8iD*@N~8-;6!d}kib;`Qk_a>mu}QnCec#U zOOuDu#L>bVAk=13Z#+1lA&~J~(aYy!a?8HjSE^H~>}qpTrhC*>M@rnAg-dpG7cG!Z z;yzs3{aKkhV>&;f6aGRihLB^WLbgo$W3dBx+c3Qe@#gQ!avs=A@4URy`5*TmIXU2a zLqXZ5-n}F}@@3@k+r5$J(xh`8eujGG56WG~^!SrXnjNuj!msz{cHO;3)JKABTr@=7 zpXu(;4Ed?ckKaD3r)EgIE@o!rnXV9%rOg0y)md{9-s$kQF>$nb;9mFx7EF7&o3-4_ z8kbvUxw!MQj!{`JJSD5UaSE#>=N9W890wpFtr^r_K0_Lf-%*Ty(BrC@`e4PSGfLd~ z2lmML(E)X5#_x#r^eItDiJM7lFIU%DUQO;|AfQVD(pIXFYb&`iwiKxH_6K<@A4!%o ztn%r6NsI!7_#LCDZ9FK;5aO@u_J%`f0l8_o49a-+U zZ>*V5t&h01p5xX!hFTx%t(6V|o(Ge#7HOEyabbGgExr9C)g!#c4YU7|(%YZp9CoKn zWBh2gmXIh-@vZ?(*llOVpOxSblJ_JgdcGr*58x`?q#P0$E3{hBA4#Hji*oG&=aqLHZu$cSn#vdRl3W=lex zRK|}^))v32sxRWxT|6;xGPk1rys`FDKpW|ShVDYmg)n6##=DTR2edoIsJvZ$kx^3` zA=8zEo-*JS+><*}5BGd*9pGLX`G^_;G_P~tV_mnGs}Ih#Jj=2&)LPjCIq1Kvlu@E& zC{r2kIW3<4(x~9LAb!_ZR|2C3G*t1RTSYtAO%-`mG3Fns;=l^3c$V#~m)^Sl zPw-6uuWr?v=JD(_@<-{PxWhbEr4Lu>qVnTJ{dA(ttKQv6??irM4SQL?~Qpd26YyFTozXP=i*@^OWoJ2~)@NP1_S1*bs# z#MPsQ;yfa>Ubl^bZ2A>Agn1tAkdpN}T5nWAglcUv-rmqZxtErLDz@4ywd?KqU&#b? z<%~B|$26}+oU-Hm{`oDe0E7JI`+8WS{x6fRw zy&J5>nhhgWQ*;*o%i+Y(`B@o3>vq|CU0c1$z#$)XGe@Z~1Dps_r$Mk*6KTmB7Ad?M zcS0o{VRJ3PUtdK}XjV~vbyy}pMpnNGs@j;YYGoxRb*tM{eZQ7ELK~z$`@e|95&Z5 zY3Nz);GirvORSdnnX4Hy@@kWE*_dmDW)%fB`$2G%H6AM(tU%xZf#OBcU>}r-{h3RL zoR?wE%eNxINL8^>@;tuBMAZyC$XM30qGE8R`?89vT^s_c$7UI`@~X$0{6!<{UX~2% zYh}?u7r_mJs9h{0yW*D!}ddXU(gB&dCmq)9T+DgO7 z>t4zJgV&-}DuPqs)_fc=$@=ZL!H7E!l9qD^;!BhoRPjSsWt+6^q+|#yIfo_IUV(m z5qd*g{NIog%vpj3fs}xG8RGc-3(f5qpI=zAp~9XTpshCXK8Tm$?G@NP_G|jKCYlaP z)7^2^UFSK7u}e`DHF5UHE+9D z&UaUMra+W9Tr;!JO6Klp7Vj>DqMQsSR7ugNg85(8pM-uO zn@I(_za&#Hq*_}&DYv&ss#-7EL3UBaQ`h?FxaFR+`W(qPiAP*tYIZkoesMe!8`f-2 z9W!$$*#%d3PxJXRI#F8zuxBG}3YT=1Y{Tk|rMO-%*=LmO)KzU>wp3PTV$qrO5mGn`T$J&s7N^kOzX&)#aBwmMfwwHyZno5Y)I zxO7Vxqu?CeowwER`CyH%Bs#cXL+usaScC!r_@cZm`}8AQYU+T>u(+RJlZ_ZH{8>@? z!6i@7f2j=emQJd~X09?foyJkG64K`utCVv2>9>5|hNs_#^M?ABmlH2k$wDLa%56;_ z;D5!1tam;-M|aK(cFxQ0oR`}4H`|eANatV=}i+9-qzD@|jnDRipW1JQfnz&!0m}$C+dhpcL+}_meQ&aPLQ*%#E z&F@XkJ2iE9Z)*OjsRe#2TS%d)5AUBt5>1_Omz)S?Hg(b8}KJ!2RlkSC_j+P+kiX_Mn|1Wa!C#l8C)O2 zrfCO>3N$6p&wCaRyyx5bTUC~G$ZO}5MIUbPh$%>!{)9BHQqPwP@)wd?K+K{f5o+{e zm2hDio?Sup;d3sqfG3Sh6GblIK-&k@FZ!Tf?1DPN2ldi4s3Uz)zv_ZI$_Mr9X;4S| zpb9_)4dU-*X-LONbR~C0Rm#61qg4-MT@cfd_kwDi4%Bfzs5nTKQAPdU9aY4G-l$gk zpkC#II?V_5>NKd+`+_=K!SPKWf;7l80J%-2UFQS)-BZSM*6Dz(_JRC?3*;Oh$RDPG zoa+O5vkPR659F4}qrSQbtTe9uj`ZSi z<4;u{7mXVq;Kjq_#)o*8PBn^_yx$kUf4|_{DgFADd^}CRe$98kU#wN0rC*Q8lZ!Kr ze^AdZ+AMigy}14Qqx-C_T=KX)xvR2qh5Fi{7G~oUy!ic6@IIwd%hbYbT*ZrEyh?eN z7wJKV>rdMC_k+wU(yk9D37v9X1P1b(?f$ZvBM|;3XFcVaN168LFVwAq207GMRK0>{ zqMa3iS7TK>K@54TZKwH3Wkm8vbrwecIVz&7#Lo{X8FjhNTtc;NQDh4b(B(UP|9>4L|ZUqQFb@ND!5s4Hy{Sc(Rgx_QQ-^KGy zvJ2fVo6UD}>mSyN1)yR8g1nEGEig@=g}#r)0aBWtW3^)7L0f-XMpL<$FO?u_HSF@6 z;K84HMUQ`Qksj~P#v_PQBoYRDW7>Z`lFDkS^E<>(mu(|vFA?@@lKns+z^^jfv=;?L zxT^Xq)}1SUB=WYp^YJYu{z@{8(J7*sZ-@+#lCq=h)0cXrKavwDr`Mj2Rk%>lP_{U@dcQ*{jx~Eb04)o|51y>ZvBi&)KBe8vol5Q<0e7jz=@@q%xN zcZkYZ)t`0qfPUm<2FotE5>v=XENf9w15Jvhww!UVGD?!EqX^uuB*Z)t@klCiFW?L$ z@D{q>%D%exWj%n)gE?1#4{JFGoX}dn%TV+?>PoaosaEm-68*CFdlGr2b_#!kwPQX- zgv*DBaM`cweo-O1|I{}mMEB3hT>VrJHV^HA?!|q_A9>nQ;ISGT;L5Eh=kr(mP7AG+ zf81=ztI$IEx1P9S-ml~cFc6EcK!Sw}xPxE(I<_!|MWdCfTT$B+)5H(xgq=5ZHuUVw`|oApY!k zQOV|XCAm_Gd9)j1v>sOP?b;tn8`1z-jOH0d6LB=*wPnTUE|>cZB)l>72muTQ6f)S$ zindTo#JPHqugZ%PN>9bO&MKBzLlF1AuiI$h}l)!=Jv>KDQ5Oa$E>9?m8dC9 zD;l9KZUiRXe6fP+aq>M=kG~tx%@1(y295@ZHi}5A6}jlLGh~{S-tTq5Z_X(y#t83x z!(`<{f`~WT0nNcCC$pG^7$TBFUT~>L=Qq^u4hK5f87^icP*JjkRuQ$(C5yXj|4R*- zwqoHN+Q6)&SzWGc&n8{7m;rOx zwqaFJkS3$%>PQu=|0`ID{uq!l0pi*WHW&#mF*Yb~WwPn;$a}VWm;HxF-gA4?IpgGw z&GSo-&65BEG9W@|16zdL+nCX)5oD_-^B11m%XJ8W2!!54|MHgo<^l3El8=903NirK z=Kn?#9{9~X5iur+gmdkSTH@zGjZxX75IBTKhjsH1PG>GP%&xFph41Sgh`dbaSZhz& zNXQ5JON5l&SL*mK)Z@FZjPJS9TDJ62{NjzxT4u>Fa(Y}bl*p_AR<1SHTozZ~P1%(< zQ-CfI;3c6-@d=Ly%;|K9_|TwLyG$a{jko7q8W>ANO>P(zWP%$aU&QrsArwqVu8f(rgBH~ulbW@Tu1F5>)! z%xD(j3R&S=qL>RTYthm!NCvUamp&)IA+%rL=UztEFY#AW#3!ALN`xRXG-HO~q1(SQQ$?+xGuwI*m?7Mp=g0ED+ffP$>jqPAM(!$xd5* zpI^L26~}kmClpthcuMQte(`y#_;a6F94(a70ROIEe7-9F=T9siJZ3i5?!Sny$o1+y>;ws^(@}qpb)G^w#lqQD(*U zJ3k2i3Fjp!vKS?871tlWY3&1qIDPBg9hYWAQ{Cr=%{TNd5c2oVg+nk(-iW5&J(p#V zx4R?Zz@BhmmqI5@qYz_5cFzu%;16$lzL{<3URLt5IWNzQ1o=KFT+(is^RP+I9v52l zOF>L+an)eKM(!uUMo}Zr7{g}G)!jSSLsYBUnzka19)r#0PegWid=R?|QtGEzQXyPv zXp2WetRS_sL{+3nC|(sF#;{eH5wPYjnrm2f7{Px%Y`&tG94F-PaI6hkcVVk&2*zJW zb~ML|zQiY1o~}KI*^FF7d`a*82w*RhOD8zyrXCjPD033>&>*eqc#hSTb-v#Dj%$C- zdYNvN>+^!#0#;v0{!swR>ENdU;5Txu zbTR<4JpNe#7P9O=4FG>U-3Z76`)2`2v9*3002)s>0y(A`V!pcW-EkdhXS3W+G_j|cD_|nwHE)v9g);=%?RwF zxl!1}cK^4^3CbJxcaM@A%;!G)Y-)jqOhEqqorb&PVySVNW0U)V#1-#BgA zm%sNn%l@k>n~)9a^yPo@x69uO`S8zgr)~e5zg_-MYHR-+?VtO%%ZpP0zkS2H8dpU_ zaQ4iW2@O`eW@=xSm5)ZlmT=$|@Ic!nO4FVDtVzR_qq+R6)IH7kEe!Lj-wlIz+mp!- zYnWH(O~}emX{!fwv+Hi1+Ug0J>P1#MFG2MptB#j}>P1!nFWK7atE3#8yV)#AX|^gX zS@x5+<5c7 z(99>#Wzt-iAK+NYvG@UTWQco?NEL_;4-&kF)9hhpC-)wd-F97`@#RC`63F$|K)uB@c;e2zWoP%<7_AAuzqJd zh>?&Y`^@g^B%UBTV|YXjUNcs%Z=s6HqQahVR0x4A?`YL?YTc{VJ;BcXjv@f^RxE41 zn2LTuMN<4bQe5Zg`RR&R^)3DjsKTc!Uevev*=%^9uK3<>_W}Osr*8e%eT!dD>*+(M zl~9LJbu2}_MYI2%%{*#u4Vxbs<_5f+<2-z4)O-W4x{AIdtdWzzSz|Z}G#npv>s8_o zJ@jJT1l_u(5T6a^HVD5Se_IX%BQ(r$4HMt>`#aw>9o>9gPrf%uzxUYJ!8#jkIY4=fI3j^-7)h+=O6|))+%*A_KwSVKCw5`gNXT36cvin zw?tC%6iXCV?#mZ;A~^}X)_rc8e-d39LflfQl`JSHV!~Q1z;gpUCi}KGaR6Dn)7|sU zj#O8c6%0r;(gCu~Z|K~`7N6?+5FNAeTjEF0XG5>QjsOi+FN*m!41)5=m~F;Xp6)JzH$OK&JzGQ#}A0CdSW&_ z-`D7f(i!dQz85Xf^MSqlPT|k`$uGEjF{~*_>o`yo|0yvYw-!9%UHB_J5l3zmR})%O zHZSofU&ZSbDU*1yrW9H_l8kF(F-u3?Xh5h<8{c70DdbTp4bWooq*qqx}F$oO==UB+}8p$&C|mwdtRZsllx(-osR}7x6m9_LVA+hV zFaW#l3Ajl&w8^`}2`aBD)XYv{-s2x;)_qY88%BVkHd^1KA6`S%l_hVwkN) znqp0yhD`U%Fav(wJi3+ZSebxAyZYAOTtgY*dYXPfL&8Fsdp@zCHW~Bao#xcS+Ajm& z?PqYV@9m9Ws$W+qLH2(rLvgGE-MmbikR@WNdF z*?kJs0--mDQwteHe1Tj>k}Su+JMy=G+q%PO>Z!Y0e1s*|%P2|MuRWf=jJbvWs!3P< z?R;C!9NlHEy&ep};r+M{UIYtJQL5ccv;KaiM*3~)fF!sW07cj&c0d6*(a`j-EU) zDAX1gS}YI%PDKEz z#)?4aE;B`8ojZ*)shwPsPNLMZje43knpT2ZYDZg^x^&oBcPYYaBGuRhHXCV1pZlx! z#2NP@*AwO$#g||#w4?T2b3NW9AW3+KL8xEcp0JjYMgFzN{U^>k+KTgJj5^=clidoM zd>0y^-qs5-*<_`#UJUboQ8cK<7-Gd|o_cdQtL*+Rh>pDe+I@Xjy{`OBtNZ$v_j-r> zdQiQt{!F#|`WIdWh+YV^#rru3**A-Bq%^mP=FpurZz&W7T7L}tmBG&VMO8*7LCVNB z@b}9+t;z_^k}}IEqng3*InBuSMoJJm2r?(}l4!11J6q^bU6y@w5SxeqFyU5!TJYXx zuuC!bZoFljRl|}@&BJplPBIU6N6i!(`qbKin7S;vA2Pcg z?~B~o?3YOhyz2&F#<@YE`N(7UQf9#vuA(1PqH9^MUh%gn?iFRdmKV-j5~C`h#Bl!;%>V zJF`o9E>7YzxqfQoUTbP0T`wl`!#dKDdESv1Eoo~tSyQYzc3OI81=S`?z=c%T30j_D zFBzF&>-ez0-nPo8VO4aaHPyf%zuG|PCxXRd?1duM zEeKMl7R%)jDn7O}j2rF3v?C0k0jR=27F0waS%)cA7HWrXx(7X#eE05h#ghRHA! z=Z*sXxP2`U|Lz;tLE6;lDah}YSIQPcZ^_tBj8y_PDI|@^* z!WaXC^Z=}8Ky!0=RFq^lJIm$e#o7ZYLcs#5?EQ?+z1*+_%tcFO2&DUq2f-Rq&3pkm zaW}jjUc_lckWNdS&+w_$B%r%9US6yOZ#0~q-+X_5_sIO>zIk#gtmfkObK}XuO5J>X zGM?n-I0?4NoULQrCg?xG#=v_3yaxbT;qgj< zcL~1=+En{idprYdkWb16ZgjsBmy2&cCn&tb$y>j$dpQ0dC=|%_7=W5wd_=)0DrSvq zq0|7BM`W9J*8NrViKA6(f#?PqGB{wuK|P131dbSLxTfZDnV&M-g>=88Na|pm5twZZ zPO#;2P03+6S|AUYIGi}Wr)9%p!Kk;hryV|#p#_oP;m_=)hkAi$b!0@Fa3 zA(7a(R{mKcB~0x*4rs8ka4jC=ve6}dj8ss!f|+v2NOgV0(JQQtOU3tTIEax&5$JF! zgq_>ObaCabH6H<1h|QvSkVzE$gS~ja&&p_en+&otTEuEuxtFPKg*=JfggXS-@gy;r zV0+U3GpXk!!_4-g-=kP9lv*fs#QxgTlP<}CcKiIBORoor+8d6P- zeB!FQm|a9DsJ3EufJY%;JZADJREoze9)%9^805?}fL9?oX2KHUvfwUf7;pi<%U<}K zy|!W~Gj4VYOQMo)fmXYF`stHoYhyng%6=>bx5+-O2B4)1#~)0v>|XMZ#|PDeY-Vrq zCc1?3&-p7E)8|Q!R~TT<2e%btdNIuG$(*QeN1-G{HkrIJfzACy4mUCKGvfojwILs! z(Q19r(Bm(<4e_|D_i?TF*dBk*dx}}*dCmq(sfCHVWno9#To%|nDSXVK%A6R19cPaX zb(q_G$;;*7vmtltGwIT{Sb>aiQsSYhqz%O*t_8G7o1AOK zJ|UiBL+R~WkbO)}vz(CFP3ZA1ImtS;;_8Rb1cc*|>mM^@0!}}tZH&`QISZ@OS^q@o z8R^nbBT$LA<+{yIEp(ozHv8&e@6q znZ);gv+t64Z}vY7wGn#x&v{^zKVaN>gf=c1%q0Z<7$~JvB`9?fw`$VHZs#=PK9@WZ zD=PbFN!!I4T{D{ztsqP5aSjMAAO*?G@swwR+jY}jesYJGOu=VK?)p-?;ELXqcO~Ua zNqO|yhn{jCAO#zgljSw&Nx~i7RGhXmiI|-cYf82i#o_~@1lJB5Q$3lfV_E8Qdqmw$ z`28;3i0_KY_O!?e^hHCJk5EH@NX3m4K9Lt{z2UPaZ3sNAn{$~+RB<3qUm7_iVn#D;5JyL}N z6_Nq=lZYK#dLm*QOS$CQ8Vzid5UAV(v1J&-kjc|(Joc@ga$>x;dd3j>TQrXMVx+G# z2A|;Xn6XiuZJ39&)w55ywm2`N?~J|L@(+!Y<9H?^hf% z4~y<1_iHr-j|&_Y@4#ge#3d39ypPuJS0e#JUbSGJdLONCIUX(nX;BLAp}zU9M7_Lvr)b0;vVALvIw)8*)56%o7ZBbcPS((9#IK)djSwz@=HeY;qJ%ZL1NvRuwT!Q&{FOLry!ku) zw)|zfpqp>7LO$mIpZlyFuB!I{D1l3tZ{znpRt`Tex~nSFT{~}}5$LZK-K795n+U1y zx*`8h3Cqg{G!U#uSS zzlzmJ%xj7YJ*2SKR zFJ^rjoR+n68l0~5!TI0A=@BR4G_xl-ElOcCh1Ab3-RPoqA&TvHVTs%(No)YqhMYjP zea?iB_&a~X2^qpdKpwG>_ZitIc$~E`^T;cVYH%Dcqsn3G!QwYSX#L1`!D*rTB_FaG zgv}W!aGP&}!bkc4x?prTzyK^?D@h-L&zY3OnwB8DDRuyJT1uG{xYS?lT2DsQHG;*` zmruarv^$N~cD$lw5eJ$rkj;%l92X`L3yFrve3ViMh5*U4U{vM2XGMmm_PvKqVyUiU$Jq?i>?e=G3g zpU_%V)C>#;=GG1TiYdNGX04%;B4;ujVGpbbye)ENi)=Ys;!*?`BsP#prMENeIgOMgjgob#T|>~YKk`?ZE#&(v^3OqYXNzn(p$)g>$$eVj zxc`3hU!?b)U4}iohp-wegX0WyU*{hD!e6Z|Uk5g(x`s6F%P7MfYu^y;AN4@8yRuam z#m-FJl5@_<%phG}tg(4f>*6q>?5CX-P+|*h#hfz{u7M_(gx#R3u zMTQa$>E_tHMotldj9Z@}7>+#L_Mm*o%((3$^&unU)^k*YI6jjG1FFG5Mz<}S%-nJ2 zhzCWzIvjdayX&CZh1^m0N0-n6-sl=;hGFKgEIeZ_FTiwbtLVm$M1gvmIGW#B_a$Yz z6I_V;dR}e=D&A}Ozsc9}ZWR88Gj09Ov^|vYQ>^t$MeoHKeMFcl7F*}rup~qvzd|{p zd*QQ3V4<`XBk)Y~M*N+C5qOFFr}N-b_UoLtsvF zxP}{b7$tLX-HrHhe1@Ct)jHD9hAZ(0w0eGXrisst_jL0^{j=S0O*B4gIE1U9nfJi+ zd?7qj!Eht6Q*VNKeY0j@*nB%|c86X!Yc^$@Gd3a6nXzePT~^rqK%Pbj>%cjs{+GQQ zE4E#7qXR_KWCTUYe73f-hWIt+25sdG!dAgga3@xGHT3hCw)(KP8irzLbt_E5h;PDS z=T6uDKXLB@A9Z!+|IZ`?28qr@6OEcm+Kp|Zvy0wZ{OA>AY6@hr+;sx&$0&=sE$R+>x=bZ1{0$TU? zf9-2uFUXwlInO!gInQ~X=iHy?p}nZhjX`g>hV!nzaQv5^W+cpcCfM>O+i(3G%VH{) z?}nDY_bn+ZPf})+zq- z_hFNVjnpR2I)19h|CvGmwdF#+6sY#xJhQRkfIm>Qgop-zd56F75S!Q2UOC{O-gUq~ zbyI`Ca7%-K+LoqL@z>OiWb(DbRdCi+^LpTRan_i1yvX+#ARgsHrd-IhT9fW6dhsfx zS2dMUlfRHU)*bL)$@9KK{!eS;hrd0|>HP&e-5+6^m)SCZ`2iZ0s6J*I^2+85JvWbP zyqI&*Vj}_hU^kVQDFyjS%yt>1z-I)sOV8)QXCJNgPg|RbN6#b4{x$M(F}=z{0ylbJ zu8ZAVs~Z;e+av97=)ck64ISn9-aA8q$B@ERy%A?0LKkw* ziuhN)+{1Gi)|Z%Hh}K7rhH`80>eb_oG99mK?>n89g<10@xWa$L+qliYa*eKNw64Xl zXC7PkzKWm^@0hp#+Ql%1Us^xN^39Bqd&KMUxn*pm9%`D3J#hb{n0|TmTHXeJ2b1a( zjypY3XD>!cwl6rpXShiZM6hTZpU2EO!Q}nXI-gRT0$|64`fUE6-+H9K@r70$U%lHj zDC)f1^INkk+w@P$zp^mMt|>-(Iso+rnGA8(fLir#3XWO5;8oq(jfcL@>L9>=t4_)r z96j~?YH+%gwwYaI(3{=qrpx_TZ!u3?p%;P%ifae((Z{_?H{|7UjI zl;_F`>{C$aD)Y7lPiNXQxN3?@tYKsL^^F(mY5)qyH)&SetyeM*Cj9KN{*ezyqTrdT==A*n-!Sf@s$F1La zG32kULl+NaQ8ScIuRRM>zqPgH1c!vVv|G_PF^(feGN6+1RW~|V(Tnpt!21LqJ6{s-tU)|-i(F{^HUgk6$m%XeAx)71FNYfl|1GeXFw zQUt?uxM^@!;nlYy9_A!D9Khe9h#6-*ci|`FfqbmiV$V z6Q!;SI*G(n(jG+KCOF$yiNqsBF507KsPxrWSSW_#*L~XCddzkfBI93jAMm00w=+6x zQat)C(^+rPS!;4F|Ka{G-C@Ro{D2M{da@2XJFCOkBS>}_4~%h0H#l6eFSEnW9@t@t z#yjYksPkH+Vl#bqHGTG_o>QdHKU#l{`$zq?hW>Ji#a>=Qc6K81DTdh%RU3(bT!z~X zgZr2K6oSQXHS{VKbJswx2I$rL&hgfDu=YaI>E7wJcxwvP)*Alab^?DV$))|80sLK; z;_q!qaL$zj7FvPv$EDByigdtzg+RX8e-NY4!P@a94qrg5L+91=G9Pjpe`Q-o9 zH7KufdHCrBEE=EIYi7!Sg@-W^P>E&>R0Ud(dk-+-zJ`O<{p5H?AL9c|q?kO_X#&;G zZwIjj_tokpo(`A>5;S4C_-9&w%tIqQPXK0T@~C95YfU&|iOR@i2%&I`pS z^e3(-27=-q3mW5%8}vW@o6ZYak@k37kNZOLFZCZ_rZx9v)WucD&5{_9)9wZYa=cAT z-eTJNE?4Tnk@W|O7?$8KdwJY6j*VP*qIDiSRVdnwc>d6y};D2nCOV zCB;ssvjWpYmH((z4PqZuYHhABRctTCu7Z`Oiy=M$&ty3nh}Gu8FKx2x6nu}tDPKp- zcgZIzlpEQGN{Jnf)^E5X9(r0kMzN)0)=*_0aq5Koo^A#`7J#ZaR0&f~73YfO5u52S z5R?*LE}>390FkK8VMnM(}q80`S$xYeeFydK!!i2Q!=`2A?4E>*PwmkwLig&yL;XtYDVkZ_*pF^uUlQp28kj4 zYLx=U2>x`Yhvl98N)c?Z#Gm>M)FNLYwlSvhI}HOOtT&)Azs!9*d{}F4ydUDIZH73~ zXSz%ppT=x@N7MA=dLRR#n?9!bH1T$$ot7&xz29e|3D+^2p&=BKTtq@puReDVU)Ngs_luSu{TBXtlFXHsrM4 z%D)Y}nw^3iAuaSM?F{}Dd|Ac}3UU@eL;TTYzK=Ke%bzd?JFqSCfJnzy2rKy| z8x0v3mfg>9ReiUndd$F}MyO?hF9%GG;*tpr9>wg!$hOBkmAakx zx(+<_zhr_CV^?=8OCUy!?wpW!8^#mQi1Lh?kdx4I$K{G*3iD|)P`U?*6ClroTv7~*qvot^tN5#>Fv)oeC3(no?tSYIG4>AcKcaEwdve)(s=%i3*mLNVm;=%U`ecW ziCZ$(<67vqHGL8_XxAG$*{kAD$t1HD=J*muiF!9_Rs04@jK*x!6ehV}62}bQvdSEy zF4Lt@b_q-kDSg2^0IcIS;q`22JXHB^Q_jIvm@SKk3I@|9%&(9}Wk|u>#N(;{YU$g^ zSk^QYFWT{iLuT+AYgIfrE6qO!{>o!1c)NdAn%qp~%_(LwUk{_=tLi)aD?{UP{%e*)oy$yM%^)#k$;LWxB`nJsBO-U%i9uPEX=2nwTau=LqX^UHIW7B9-pt-ClJ(4 zv_+Pk%yr2<*P3f!05#LYIfF5QGMX#c5e-&ci{8;VhHG)Yxi`uH8lgd4+65Gqb0qlK zSVFD6XEp_bf4cp$+xg&fSf`w}hrR7RA6tqIv&N2aJo1I{@r9LtqGvhiSZ$!b)ES)B z{`(8rX6p4jUfnaS(CUS=?^84EZ4xtRMWJewS=%dFXXUbE;%T~?(9ntTXw}{YD-euR zSY~>9{>bPD9bB!3(k6$)|_`l(NMpL;#^?zg9 z=nq`x{$8rzo}#7j(MA?f%*WVJzV_Kf^oK)JolMUm7pr`cF-IC-R7GDXYVp|Be6qG6 zSC%dymSON$PiiiB+BJnO-2P3ipQXut@IYM~rJ>|^F<&U~F*LR@_3E9`_-cCZ-SP(v zTq8luzCTl}(VbKM>6n4~s}{iQa0hYP6V(Lw75}1Npk!o>%)e;44e^SrgAjY&x<<&W zu7i>PoI50Ty5l$2e2K}Ko9};g_~{MKaJ;;=vx0uZJ9h{-_e)O45}zNf>Rss^i-_)5ft*U zQGe4fg7Hc=vp!aMCO*yMrxoxMb+(K=R284!!49=tXy=;~18bO0^I4xU9p%fVBF)=E zIhvdq66ZxOvo+RjYJ7qDVV>|U(4Q(F!$V$V%=?Xh#6_5gH*gW&V8%z?wnB~ZFZvmO zEj|BWL(o&t02~a8L(m6Ya-QX!EpsfM2MjUu&*Co9+0>KsfOqaGyn#4tv5!xC2Dr-q z2o{BIX4t;b8~pR5Dm=LORR6*nWYYiW>1?*c9cyzM#k6SM+R$mmRPR}TAaIrJG~q`%a$}7>g*`mvZy^-);N-4q}ZaA;OqWOO3bXV@pr{( z6x7;xdeb?0GG3nFbVh66r3AXzX=cF2z$v)h3~aty=YD>Q8>P&QsG}&_!$cSz{1Q?_<9>|R`^=N+@~6lBX5w39HMP&ZjnV=f{wHdQ>i!<|(P)>^-YHx#h{g(ne`V^3HK)$Ma*mAi z*$6idxLj#o-Ea=>%jw#wHwhbb@Vvp{u76E{v+0Fxen&4y%u84ojHfZOj+d9b1-r0K zz`?%;fYW8t{<-u2G5B0eUAA@vs6Tz@eV;kbn5Y}N6liY0a|NcM6ph6<0lmRby+9B z5hpqFb}>o7iHfZGYY`(GcdQsN%mh0>a%b5l;-axLjJ2ZAC}JxS=Ift(exUgdw*)ZY z&vlRvZH#fVpAGACQG6QP?+2D`5lvjH>=PL;Hkhyntp}ItBJ(V%!~cs8&RCe5YIOB( zYTr4`d0z#Mzr=SJLKgb?>tl`uozPD(*c7K^Ziz=@*XG5h6uS>5eD*C^(BH{xCuXsS z!%o}ecz!EuuAmlP9DmdA5>14MXDXn2cq>nTwSqIJg^G-H_FUNr@6*}e|t0a zdpGRePhqj_!Uj_q1~JP`X)YS>lQc>>NnR8?$aHU%?pQbo;_{x!EI75;TJ$1>f-qDV z%C%lfTuyc$Pzb$$=GqCjm^D421p zxn7`50_GmLc_F3;nVTH$(LJ&rll<)v-b_Y5&ZTU!jqD6nbdKSi_Cl@F3)C5R-AH3b zwv9RFzw=sk_`nOOc0It%ED>SB#0w0%?M!B%rU?UH6`Y}KEA%LmsCQ*dofhI8S@-7y zekTI4Ib`DKA=uty9w*{|gQtn0nyVf+T(qI7$ZVJlgyTJuN}2mDLEHC?;Lx?x$j~oL zO$K1z&0I{@WLHGgB+!ty1S;t%co-9!{-=1T=~A@^T8)d(ALg@t!Mlb3P|s>VD0UuR zb8@Ijh1g7>eca99O=Xam0Q?B7;U_r{W)idDFUi~4T~oPfP0Rbcf0Ye#a|&d63S(*k;{<)FDJ5Hwb)AupY zW=nAz9^fCOZyD8xhMm{^<+_L}`;g-~hVJt+;BPY1Z{{63oj;TRlYRarTF5aEJ#LP6 zYyX4oqrj(UQyXXOix>qoJxi_EG+`K@$KTrVn9tow;8cJ4c7EocqM6HUwrCloWP6kd zEHegb2Wy7$7XP_eG4*BsujN0clBcq^uX_&27r~^~7HeQPCkvday(|{|brwRlD{X1y zoX%y8K&`5s3Va=31)m@sH6?^jVc^!T>vWm#Rcj{^v5P58r+?As#GzhYVxJWEnHS2K zM?zM@d61JLAYg%~@$B?e6Jaq|d346j=2c*5B;Huc@1SroWO8W#RIa1!=Vv@s77XS8 zcwhflY9g^PxB4)Jxc}s3aX~d2|28*2y9MlQH-S3!c(?qS!6KRKMfc7sHFd>?Q2V8? zo_&#L9m>h$(JkzQk^1AX?yw-+ew&Zz-a*q%oKQWf^a!I`e9CbStA<8%7vH0p!`pca z`x9-p@D4Sze}g`4=rIqk4IG7j^q{#1vzDl-(JOo5Dq^8%9eq%6B~)!Uv(;#TeePZC z$!uwSoTYXo9?9d)>(9V52Uy6;be?PcOP5l)NZ5Lu8K^j-U})22t?xp&K+*X$Xk^>w zce&pFcTE_y|5_K#6~BdY^Zi$YOF<}CBqoynr8_q@zO*j%*P{U2YdLh4yP$1WTqgaJ zcj}Y$ySVF}X#I;pr&qgv3`D~w#YdeH^!5ff!*$a?YkA?)d(XPa)AX%q%utQ%rMkax z!8eKIrg{PR1qx5+kMC}6P(if(NuUg#)5R34`TvyYR<*I!!qveUYD^Il!_FFYplnEl`BPzDJ8CJEAG zm@P?&?D?2`zac}{xLn2YxXV?4D7pxKLLAoe(105zoCMr`l=DJbc`H4~eWE2=fJS5g zX84HvKNTA|Fpi7dShV_=_*F*{tK2WeeL0(V88*v*UbDWD7{yl4SBk5!RSU670(^g5 za>+4(mNb}QCx-r(NKZ}h|7refzxa7F!E^=WD8RiFCwqDby_^)zCcY%1k#LKz|KG%4 z&OUn6yLR(&F3li>|8_rd+AgnD{e`U*`2vAzzNT*EIv7RMF^0>17=Kp>ZE~wCY=x@o zB>Ax3WqLTCuk90Jc5F^WD!R0r?%l|i z?N90LA@uwj)4PzD^#R3}u~=8=JJ8>F|` zcs@2iW01bO=NkVQY|+hM561lbcP#@{?$$KvGCS9J42xF0UKO7gz()!@wu3wjTd>C6 zhCo#;WUHMwsw;ZZ`#b(XX=^*^XCgR`+MBZwBw|Gtege5CiJHN)rB7%H$EM#=+(w;p z$uj`qwN)&OsxW-4Bh=^wQL-R3;adGnH*{sPaV`6)Ingihq{zSM4v>cMSRcC2barc^ z^a2$gbkMlE^xC?5rcMy;6}RBmR+(-XDVGIw0v*u(PI5w*F`p}Dt$^h!fUd(7|B^pI zGfqFMG&@`R@Nlb?|sc#;K(hS zrpVU-t3jL?%pH@aFa7U3gT(W-1p+NJC`}EWX~t&uZ=jd)XVCaUwKq}aJpzO@ER(Q; z{NM7Y@b}iPMfZZA(CXA}?9_<~`xj0p4TI}B7A$V6)&7%K9$cfInpk0LnEzbStJu=@cGv6N5*yXbpW0@&bnIpDm+a*}TV5J{#5a&poQrQb=4+)q z-KX!`NpWE(bXyMP72cLC?&WI+?B`_ABhZB7i7fn*rx2uA-iM@$ zeZe$3%bu3m!-UpQ9CFWTDr9GIT&(2YaZbrS_NMf<1$&v;=lO4!T?j7P`s1SsaFlFz zzT-bUtV_J%iq2^Kg09Oh^5EbJlRW1};-iXrsJTW{h@f+f^;LTQM}Li6-`amR_2l^P z7!Szgdf$Us9&yfRTA?EJ{9sRC6JEAePuFM!EHhBk=V@vE|EVQ#7AuG`+5F{cu`4Qq5q-7 zHp-WbDo#dS%xfGI=Gyte*!OwGij7X5alSInnd>Q`?oy3PJjR>gO!t(c1b7Cr)xRi& zkY$Ou%MWa=_Kn5ZsK$?ypH*?EzW)sf;ceoQB~~)Bh+x-~=T3-4bA01sb93~x^{EN| zhe~p?knl~2P0vYUkmq91xHhYHs=(p1o(fUT;OuHdv~jVqIVy&FX6J~wE}c0zv2=z` z<6`r3@=l=LjzMZkuE1f&Ur{YxG|G17!n zvYU|RH}OW2Uy9T12qfEa0>7j=Bmac9!7a%~BwLojELrV}eINgJ8Lh&{-L#Sn&L~MW zY}!d0#&x-8IZLKtL$VvTH1>VWXxv;vvx;LE%KHR-td|hpm&NvA2SRB!R}hgecl8V2r_FJG=;jAR>PPlMNZs?hr*10$rrZ;TyEq3uMyYApAHlj zb}{4_9J~f)06kNSE18Kd5^1&}Dj2)79r{H0V4%C*Q3)KUwu3v#Lg; zGYjSw*gP(?1ih~WW7jO^?n)5zZn1H5Q*n2u;^w5{mZsunr{b2S;%27e?n%X6mx{YD z6*nUlcYi8wdMfVMskpjS+ykk&+EmbR_J37TSzW!LBy2>xdhjit9|pjY`Emor)WgirbWm8=i`LE)`dvirbos zD@(<_l!_}2$0qNz@jPyfjnm-DA^Jm|A)cOUB%S;wG3{QZ@fz%*P8*p>MHZ$bcc&r) z>BxO1a%&J(MC4QKqlaTRzDMLMIOjlj5qZ!?_NF4)PfbQ1O-5qb!Nl=>9(?NE+SMD3 zofoQjifPMW&}5R%<=cw(2@X4TmSGeAMGLvG?u7exE-9zhrsNy3PF+@2BS5l$ed>i)u3aQQ7N@;-)DlUC)d%`{1Id zUC)%I=DQi|8J06z9O(O@a7Y43pSk7?3S*zO*b~Q7A9s|}h z>Ecelo?$t|txu=0BU#+5TFqq8Hygh|)8_`@ck=ZN7~Pykg3V@eQ}T0yM0aa8#)DGXA@Q-- zZB{32>J~?w*=5C5-mWUy7nid`mf4}QfbN50Pr40HNWQZt#L9B~w||BePcW9tntbFQ zq6`E*rRABc_&J5N_FdU@{YJW0HqaIgghKP7TE0u|r$GLS`s;G? zNO}o3r6ei%h8vxqj`o>o|3fd61VMl`Ge=@~Llb`9tM+z72MF*{yRXotL-7aG!Cj<5 z2VG$4{vqR%U7UT_gc7GPRv1#iUTI!S?hw!#yg+>-T0hPgt-rodEwIfG(EMILS5YL6V)8BrHgZNl#NGQPtIJDKaALtadr07lvMa zGKS78h9V&*NGB!8R=ds#<*~qPXX)SVUv!>`a-CT{XoF*#T}Pl7K7=SK{SS5UmzAWB z@OG(F_<__><6WAGIw#UBgE|>B6XidQW+kNmKhvzl(ya8uX~uSmOS3_u*$A_k>18qe zNxQ5W@}V>{`aNP)!8b}Q-7c(hEC+!)^x`SbHwvr0YqGgX4ToNe&7hY{Ma3$ZMMVh3 z?k3z?k|mAeJoV6rQL*&@4;4!-70W)Himb3*D(*!Ob?@Tg9^%N#dZ!5`d>^Wo(4~1& zHYn6-D5QKe6N^QuQxOpC-{60?ei7BuoFV<sVF$@ymHobs1)U z4#D>esz3g8_v_3hlWg97Av1~8$0eB`V>3U(nIBhVeq5dTF(dOs?qO0ze?Rl%mduZZ znIG}=$DwX{gQNi7g0Tee{$*y;^30FNGCw*pKjh!VMd48QbD1A6XMVh$`LUOes`~5a zldsCzW7SgqLWsY+`yEEhs3ZrE%D2e`L({E z-z~>-oMEr1V8Bq8#B+-ve(Zn?*GC1KIn{X%{={j)oc}{*E3o8o>1Hg z>wAi7%{=wmX;$|c>(6ZbFjhDKzmu=;DKZPoZFY5k;`)~sUxZ9dQPejV>74mZAvXX~i*camO< zcwYrlhgZ47_~vQTFraav7xETf#6pv65sO! zP(2(|Vb?S4F#n5=q?U5n>c!G3O<#Z!DH*ro{j)LDHo=>ZwbJz2Z}3`9yr0xz;YuHW zY;(GGECN5e_Dl>lWvi=(-KATng&oYk)v@mD4Iaib-#a-xTACam6>C^3yORbVZK2RV zk^15HM(a7+=YG3{qsqIBhxrQ<5$8yiX=yPWjMad-gT>7~ZFDTh@TueI?DwH9yAxo@ z73!Kn+*9DrG&dUP%V#il%=4uN?r=2Za>wK0vQnO9@Bm+?*H2S3m*VFh-G|JR3UG0o@~QDenSNXH?WD&z%5((0Kt4_ zSws8|m7T23wKsAYOF)IWY@0cSyhyNCM)pMGOGcn)xri36KOB__z4cInh=}2x{ zxb7Uq^CxgEhjMtRS~dez=ENuBR-o)bDi;D3%S@14xu=v~gyHrwbw#A!0t6ou14BSX z!U*NMHt8%gce-V);S@fZd9d5T<)8SS=2}qH*_D{TimM@RQAA%1-KpR=!*Dq4?6QR> zOH(m}RcfegL?Wbo%Pb1yTWIrrhkPeyf=N9XAswOm^0VuE!RGty2h}HmH1$2#kyW3X z2cE~zKUsY+f2zLwlrP=Bn{B?e$2;6+U8qw()wsavc6FKyZwoB@`}c< z6CZXEb?#c-X`VBf&Ru4RFMv_xGyr#+M-h1W48`*USbSPGcPDv6JYSOs1P0o|tRa+N`@#1<%!kaJ&|o?K$DuZ&YN zHP!B;^7BMif$Dh`I6qzBR$HLS(`=DwBafk@z-@W8W%DR(bw*)#mWdqeOyD>R0KuIM^6VN%U^_!rN^P!ZF}70Ppw zwBgDPVdpLM6g)U1=#Q*xpa5aPeX==Sy$xTm-P9m;<$u&gw7Me_|5vH-d$8(FA;B)} zOj(`7OXM~FhuSDa4Hn|YH7$=#&?aJbDKsTTd7)o6C)m|1fEkQV+R>gD1_P9D@KFpG ztmJ)->@2UxJ@b|bUC~T7OC(z@O^ST5S)k8I*)4R@>h zK#WD*%61R}ZyvIP%2O7VKL42ZrjOzCC|Na^pMuWwL34lGeHvkL5Y;5R;F7GKhw>to zB-z$KkWL|gq%BFr45@Jcm{4WtJ0|yaH%IQR6 zNmcz{6H9|qHnG}HPAuuq|0QB&;2>g2@t#O5sp0=?Vu8W{Vs)OJSQ;Dtmxz^tgNUVp z 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

        JDmmYYG3P!n}H&9r}3 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¥#l&(}KeF$FeRpm+wh5&)^29ftu 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

        QsWhd@*k;R%3l#Djg!~8YClY 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

        SEimNa`Xb#n0o@4j^y6`oUYTQVM< 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 z zmyWsfQg7x2Z@c*YFrpSP@AEI8o$SK;B5`-z#1zh3z(%IdH#+zrUhA$$+;!?lq)Y9; zyPz*K-(7EXHs@ng8Iu#L+<&1>7>6Q${`m3pb`QAE9w?5Pj z<9Drl{Rt)9`S_)rPhaV_OQf*oivt*K>pmm(JXXaUvoG{ueU%H{aU*|p=Y>#zowr^5 zewb<1G=1+wU;0k(xJhMC-{D=(PnX#B^;zu2FwqnJx56Da{2}LKZ@TTNKfCkA>KA`( zi)i*Ra#OJD%X1r8UoxP+OE$2+(9Oa6@4*eMFBVYWQyW-cI-tJeHn2YHmSE#6=dbL) zZ1Brol z;^!FdBOU)U@YVs-MfzX(QtRQnvHlpaKH&Jz2X6szX~6i4cHsESz>gb#I}zuBT7T!= znQsBl#Qe#p^8C^K3E;(nb`kx0{w@Y@32=T9zK;J5c%j}Hha!9(e;{~KV1sA-^XI?t z=7MJfzX#tvfBpIS{T$44`ySlxc&n?jpF(qq0t z>$_f`UsZe>hamjrif;wvf1&sl0r{r*`lUWNuRFQtNv0#`ZJ-2+sl3<)E#*LSh?+kvuiB9X!K;(5jnm+^l2+A)reA1uJ zTg1He|D%$1*MLvIW#`>~Qj$Oak4O9j_;UVGKe`jg*LA;#_-XL(HY8mpS5JQY^ALYE z_$lGXb1XjM`1-o~8RAC=a6eeW*Ys>Y|M~4^m^TUVm!tpl>E7}4%LTKX9G^Qo7=!zF z^w{X(L3v)~YkH52_U}Du)`Tf@dRJC@mB_cz_;z-D?liwd>6Y2?$&>3!FP<$)@q3ji zeqHbQ%-*vmPnbS$+N8-R2NdEc9z6i-DloA>=hOQZUT+)YPnbJtT8Z(!&ad@~KV$Cn zIn!oMm@_%o6TPQTn>X3fzG8=EjGyg^Lh;Ml{_U!G-PjS>54bNd0vrN76gUca6!3W9 zWZ(?o9N_7|vw`OUF9Kc;yc&1|@OEGd_z*A+da3$~y;CH}vz+Zu__s9GMb_H$^>;v2fcpz{na1`(u;8fr&;5^`Yz{`Qx0dD~= z1pXQLFfa{#0r)O(CGczDkHGK&+@9@#6~H}!`vI$gLx4L)n713SA8>ErK;S{Z!+@iK zHNazm6M?nBQ-Je;X9CX!UJSepcs1~P;H|*hf%gC(02aG$gpT6&*}x>wIvRFh>9tV32r~=aOJ5!3lFTaPHL_Q3E26_2=-PQ!IuQhhFl9%1Bt8295xZ2ObAJ2{;!h^`C|OWx%U}cLAROz5&$zq4T$$#k%hSJ`Q{l z_$u&SpypTG%-7G9Q*ZLVui=&a{U6-}CSkYFW&VZ0OMw#SI^=Hx-T}NH_$2UE;Bw&C zz?SE6{hI?TfcpXu1|9>P43zjYkv|J~G4S`QoRrs?xsv052K);63$SH^{gUs3{I&FSv&)oc|4}YdleEW0eM_0S+A??n4^tIsY z^P_$Z^HTq0i~x!6dPZ_Rw_m=0M1D%?Z}Q`^$NhgB@OAq$1^7<=Ves?%|2zNqPX6(V zUyFRh56q9R^{ef!|igFOmPp_2kzr z;PF2jcp>mgU|sJCv#0cqyWZPTQuDIT^Fy50E>~yk2m|B2IG+YeIgL$;uj`c-{em-7rvoro{<%r*peife2$(hkZMzqDxir6_(+^NOhUCywIw zMuACSehq9f?GHBjP!YXPK`Dm#l@mFx1q=g|#~1GZX(I*==9)_XpXT5G`uTBf;W&P^ z504&vh@Y>Jo%R!3dK5^{U>)_q@XW%xMn(rz_a0F_W~4`5ekN+a+!srk*m)c$3XIvD zPXVQz#u@R+QwQ{(I(g>gS<@zJr%&E1e&j-qR|yOOGZz(Y|G3@ z{Tbe#JMQECiFlVd^0a4t-jSy)t=ey2%I%E+6F|Rq)%A|foi%yh z$oCc>J-$1|K?R z*vNzZs?4(&il4fk+nWYvfO(a`VA>xzzF%ErZ$kVrh3fP2mAUj_zpVte;Zu?GdTZki3_a1gX3F^7;_QbM{{Z? zpFC@V+g3_$J5{Ku@yA7j?mRj0Ss_vtbFTF-m_IbVA3=ffXy`Fq!}KQZu{EWdU+>z2+cQ}{c;a+80@O(3Y(w6K{X^yN3;uVouLH{b zmM6QNS8~5>0+jyg5B{#O_W_E&0q~E2y+-l(gnv5hbCqA7tX>3r0x0_S2LA!rmngsN z4&R480~CEn9)1`@J7B*HDDfkxe<|#*Dt|Tnt6^WG{Da`{@Co-{ z7%24*hJOI;Rmy)5{9|B0M)?nhe>UuOKxzLF_%DL}QstM2lQ+PAi}DWze=+R$DE~0{ zpM!lVP}(;f{?}lC6DZ?%DEuG6z7i4E#-C-v%iB z!{P4>`<_72ABBH3>@`5C{|NX`fc-?E)ISRT`LJKE_TU4*}okH{{q;PK&k&| z_@9IQC7|d#2L3l-e@pp~h5rNCGs=G){Oe%<6)59-Jp7xl=KiSwO8gl7qhLQl`Q_IB zOxVu_O8qB*e;MovptOG?{13qXi1JT@{|(sR0m}I^8U7WpuT=gi@c$|K?AD)>EN-w7!FQw#q9*dxk64gS%v9|;uwC&E7s_PFw&1pke&CxH@wI{dG~ zUa$Bw;C~zX3x{V?S}6aHG*X8@&t&Vv6e*w0t~v*EuMc4R{`zURPj z6a2R-z77A~u-^|9{<-kK0{a`ve;)kr!Tupo`saN3e}ert#lHalu4}k|w*dbinTYky?*A^)K7aeqP_7b@X?A?_A3h=jry(duS-<9z9gMDws zPryF}_Nd}t1^*n_ZRNij{ug0?1t{a!cksCE7U>h%8x+4E{9Ap+?YDrU|M#f>P}q+E zO8;B~|76%_0ww;n@Y}Fo43zq>ga0mzFhflfPWqA?Z4)B z3japd&7Q!^4|gf zIM|O?{zdTD!G0D{#%D47*T9|xO8f7E|5?~yQ2uD&0og6=N3gF1wg9iPf8T@Yu*Emr z{*FLt|EQXSvyTwE!M-I>_P^0l~j4O|FE&l9|`{`%^y2H zTmKB$>y&@5zWuVd5ZA;0N9C`o?4P|wNW=a@o_|2rzXJBv%0FP-*lho``i*C_ws>LJ-%m^)y< z8z}RmW>|C(@gIZz1)$8Y;p0YT^}h@I2SDOb8rkoVEPey~TA;L#-c8T;#dq94VW6B} z6+t&>!e)>KO)xQVqRX}M!eZPhLHL#zc{2Rf44(ti#?+E_`u&0%uzHdYIuYkQl z`RV&N-^TFo4f{~#?*jjcu-7Sn82;;FU#$F_!2eg+-vmnkg`=ah??it9 zdxPR{3VzogSbqgj^c#A2YTx0o$MXFa`7efjf%0#L`k#S)sq)kJkBGk-_I1in-&Z34 zHvfV?py;FTCy_r2drbN1`%L7&5cY)fcZYuo>`Rru2mHUl-hLhHkoa4|-v{M;KM(tx%HJCPPhkI6`P;zX=0|RK zH=yWi3x6NjtCYVT{6k?MrTp#Tp8)%b%HIM0(_lYe`8R_9I@oVje)=3XjsL^2rK@b`v&Kjq&V{wVB6EB`j|PlbK1@>_$4RMY&L5Bt^HKkU%M z$$u~GPip_6V-6z!Td;qq{RdT#BL9!DxBJE2zL3T9y9ex+^0$D0DC|+?4^=XM9_(i+ ze+&435BrVEABr$P1^Z*l-va&@V1HZrTf)B*_BG1i3jVdQ|Em0gYs_#|MtIe|5X4ben~%o7 zKGN^FQ2TFyJ*oH`!~YKK%ay+i{GY)7B~a?8?^jd(Yhe$CzMn!JDE>|0?+JS)P};XC z{6kZVV1EfH`YYgH1^XJs-v$03VgFV6cZI)uEAF3dfYScm z;ID#xf92mD{;{whqx`+$p9=d-py=NN{<*N*%HIe6g|Mf9qOTJE4`E-U{C(m774}Z8 zxt+rA2mdy(S15mf_{YM2l=2UNzZUkm^6v@%O|bt_`S*hVF4*r={=MOU81|=?zY6|0 zU|**E`@sJh?B6K=zVNqi!~N13DC4sq{1)uJfYN{TJtvy~`@=p|`Kw0`8%O>VVLw^< zM;|$42>CC7{R*HlWz*op4j)bayI@Z#{|NXWf&FRauQtzzi2oYw%YdSve&>w*t=e+? z+XKaaAlkP(?E5JHp%VttpL7dFVXpy7|4p1Xc{cgahJC)`&zmtj>zC(4cPoD=-Xi;b z^_O9P7f8>AD7Aq96WG61{+95E+Hw2Z0Oecst>Etpdyhsx*Kds;T}{urwuQZCqn~@I zHTVa@K2-VJz+VgdDazj#{?lPkH2OJyJNTb~eQBdV+x$>__}_s&)97b?@oA$*lm0gC zx&57h(*A?S9W;adTf@Gi^7k7N9ZCMZVc%c*t19=JNdDolk81QAqe+9tjvh|_6Jej# z=x2SShu22Qe?IKa6~UV1G>c$JC4&Mf{gwuUG!Q<4(x(KZgBF7QBCqvNQ43-$`-A2Vj$k>uY8_K5b^j2UFyp(yM%Kpx#t=&)gfvd>p1!9Gp- zhaAM85IP(7^OV1O+=xS|C$EHk0gz%+8drVTLF9i9_BWOP%Z<3*KLCldG5y!n^b5XU z0DeWldg>ayzh6+_z~3*3DSxUX>z6Pw#4p$P3m!%NPXH|wh{i7e_iIT(!@x}m%9t+i z#O+J|i0@xJhi>pZ*}^^47pewDp{C|Cd8uIdksE^qx0 zqW*`0G1CwlpGapqE1ijdU$lqQWR73+;fKDLGgJu7?;u%VJ^0IjlZ-vf>>!`4q=NLl z4CZeFp1_*U?)e)RM;>O(l>53`KJO{KZ-u{ct{&TP-Rg6{|1R@W_`88usrYjJW*IrY z=ofwryjsN%yY&0>=Yw~-;=3ky$e(`;c(*G)UtL5*jxQF`|1fxuDZV8IvzX)S_CE{W z3yL2pk-yTx6N*g-t^v%&molRNJK=Y6kH70jf*k#)`2)a0dx|8?Nqs`(KV%tDSYR^i_d-V)8Xr6ggFugC8*2TvGw_P{v+Ilh#U_}_rP&QTBZ zoii}U*YUfDdEB-IQvJ+#4uC(uFL?Xq@ts$P9AEeUq2R^x_z{wVl;g|#Deb=*yv2EZ zTgV1;e7%0X4c@XmzVi&o@pb=o+=Tlt45Xko{TB*Z+5fZu`SW{&*Ds%Mm%={)yrGKk zoITF=i~cyup9(xn@tvbzh<`13NyT?BAi4I-`Y-Wc0B@P%J7-U!_*-ns{ci!O&$1nt z{f}~#{No=EUXA95B3UN?=g&V6yvu-h8v^yc?0+<0`d@f=f|pY9i;bV~{|4SN#dn_l z&i3p0KMHR%_xfF`{_Vl5Q2bKk9}eCa#dq&>a{aIMp9Ef9@k`Zz6L_~OzI*rPAOB(S zo>2T^=Z}ovTj2d&@#Xn&vH9~)@V-`j`TSBbew(g5?j3+s-Zrmd=bz}`4!mB9-;XM4 zO#c11pMyumZS!)^eX{2Glyj!xihqG|y8Dhw`}44$s|7x9___Z7zG(kn0^W7NrJnI~=9LYca zFW^bx=Zo;AoM4+Ra@Sq5Ee*)uMDbq@$lqG=>jUz4R{XaE^7|}~X z{_Q^>{Dh+(J4eKkKmTzDPiVxCNG6N^{1?HmchqAW4!v^8pWnKNd;KDgP5-$jpg(^T z@GBhkWcjWMHG%y3_xbT%6Ud+cDEMhdJ=ypciIC*a zUkBc=njaA^p+CRNmOOslf&VuB?i#vmH97uPs8)CffHxFKZri+E!{>-E&wqq3m{feX zhFpBj|JuQ$*p%$-|IYvX`9FZ)VyoOdCcgXq6@UIV;8iNV`|tny^N$9v7Fcg$=caB6 z`zP?O1$M&5&#(WsM7Lam^7jFk0Lg8eSE>Bhz+0yHe&es>x7?chJq(oixjrCEuKzT@ zFL)8fcb&ck__g5072n+h{_&p!uRf3O>;ZrNFW|M`#y$U>v!GD>hd6lDQ*WD>d+f-X zi%&Uc8m;)N3^@q@c<|%EWv22%e7%3a7Q7@dV!F*e_71h_n!Njub>Ow%miv$1Y*ze& z_kX*BC;Xv?A4LD&;ET#=5x$fY90q zwm$P;I}7I@aC$)gdEh00BLeat0q?uM=SsQrU-K7(mr{JU27mrj;61DOrW+i|pZ}(VCj{FZ6nlOl?f<(E-+d1G$NvcY zm5zESzWW)XKmRB2+V|vnw90UE^Vej|;#=tX)4t#x3|t+MKLNbyz%>E+7lU^NupuD- zX7CmRzYoY?2HuCj=|$$h?Ei!(^WTJROm^du9OTAN^JV@@NkZGa{N}&ruY+#lNwUp> z-~8A7-+cIf^I!8j?7;I*ViVft<@fww^Zm{rzx|WuclL?ze$MRQ|C{*mH=>3#CV&1` zK77~hmt+5<_3z@tmvxdQ_{ZPVhu^JHJ01A*BR>2sO5~65;dd^PANAq8KZED5zXtr{ z9QD{HcGnW)&vWpIvd+BR=N?&e@hRs_=Yc<8>cNTQcmBxp8{sViZ;9|t<+gdbHRR%J z{z~u~6yNXs*ZeJexzFFY=lYk6?`%6ASAxGM@ZWjbsZ@?H^ICX^sQ6UcrvF^YpFhHf z@7I4i{wN>5U;k)XM@xwduyxj^&ET%eFfSi7LekJE`C3sc9_MYoM)ynISoIgjRd<<9%q>{FIIiq{^ zpYY}V--P13rk_Xu3;zM|mMFe!`W4`R0Nx5<*a&xPrxxYy9VS} zfVT&berzL1{Ndo$0JjF;b@~+0UkBcNpjBdg>J>^4fR_gL3dsK+yq|y-0r}wy?*Hz< z-Am-l_zeVaD3ID@(|@kyKmK#Tt5bX?SAe%b@%`q%o`3QjqF(Xc+X(;o^7-M= zF7E4}-}$5CSAiE%{9?~Pr2i*@H&yZ7dnkYX^7+LJ72ogvQ|rGNyoBPHdj32NURv?} z?mu<>Rp2!!zTf?)=5M_#kDCRgNoSjv`*U9Y{WlQ2p^9JZ^Jg-CQyn~tP02PdzxzL} zf2I%Ly$Jg2p9}tcU}cHtKk20O1bAuS0Pu^AKeI!jkHM3CRgw5oPVjr-@5bY}e-Xa) zpYZ#ER|SlKKX6bNDPl0c|HL^Ayu*R?Vg7<{t7hAtY|7+m=P4SDZ-@^YGye|~L z*!nH}U%_j;JI}xQCHB8`aaZspKh$)byYI-8>pv+cXes`Pfc$>oR{^7*e2Erny#E%S zJU>0rp~G%0E(baNGJk}BHhAYNzPk_n`EvdHz2X;}KNA0L2anW7%*!2{thxAgE@wYwizx?Chq4@K`&z}R_e-dAK z^8Q82QI9QR8Zj4No?i=p1$b+K@qqo`eh(i1&4F_Q@^=NVH?S@sKLXwmU<&h*sV zcroCaMdHi-vvlqC;4KE)0r?+;C-pr9{q%R#D6u^^escX4-WQ5bS*;jDgh8at9dzoQS|bfY8r^EdP1`(1x^`?vJrZ|#Wg zT)#EHmk;0X{U6QW&4<5JiShgU@a+=$)js_5OXMHs!}ojtN4I~J4}aSd<PVtwNxPAz)sq2UE&qnyFZW*+@JY}4ljFq#013n*+|0#I?1X91+=GDNL@4V}`*8gwtTKCIc2Z`@a{_Woiyb8tl z+yChJ!@!FwzU%E5$Nh)qp8{T;;#;l;`0KwJyrkk+mdJk)yfp9{%s&GjDV#U|L;bnm z!@vbHe?8ddS4i{t2Z9#`-VDC%)3};k`}O>v1D*{`dg}M*KMdYqfVX?<_ve2I-fH0& zS^wPaGS3MIaQ}4&E=GL!^Iz%(@B6=Fz?1I2Tl5=rCvX0V;MW0D;JdHi{=Z*yn~Fc( z1f|e8ee=#=-Tns^e=+*ck1zWdY1>l8zdIoRL-5xDQ-*K;`J~KXJ^%Xc$>TQ^xJLRv zuLkaa_jBz~Xa;yvd`^+|Q_2aRtN0Bjej)wxTwHhw#a~y1FZzYINb&1TaCQ9^sTuP* z%)IaKKBD+%y7=uQLN@5he?jptGX-h>(JPm7^H=Ww#rKZlKV*o+b@w4(ze6D_BKQBo z|3vYZ6y$H6$NyUKpDf7FkN=b6r@te*W=y0B6rp`}*x4e>iv}72ogu zTOGd!yrUK0Z~vWx7rMxyX|D9#OEI$ z=l)NDp9Xd}1Ly90DjQ2@8Rq*pJ+lY7|JF$SDxOD{d*D%!^mBaS3$HJDxf*%?x!a!` zKh2lt$C~fVJD*=^{{BAk{mwtlAFB8jEeow54FmP_1GmoLxuXz24y-is%|A&tA7q{b z4i<;tDT-eOzUqHp{%ML|6OezN;-`(UAoKS+#jiDd_t;5Gz32bUiZAwKPj+Dt8zq?d?|NVn^d`IO?I($UMr%HnK{}RQg zbg)~8?vJ24NE4ll_MNS=<6@d#(zry%xOGq+rs?Z7E>uToa_j84kd9KuB{`$8j;8cS z_C1}^?Xvwrnw;~riVSA1$-FUBI7C`Qm$8oI(~MM%=5nX~nm$jnI$my{?GLKY*&n1M z>Ci!b(vm!|b9SEk>1axSbT{?t`4RiV{4EA!r*kE30!x30j@TKjBYh1c+1Ix}NQa&u z{fvoTemc@!H_rA)Ass=_TWafndi^jGT**2F`*L7xDCY$;$h%06%v)xFXuZnL@2s6Z z7_)KqoTl}f#*b2DIM-_f)4ceH-GgEudkcTzltcu8OexCR&+#d@qUjFGX7v2l#{k&NaK zfli_L5#VfdOnZW>%&Wn?dK#fxKV9ocw^uv5$_`lbJE#7hH1<5@>1paqN^ z&Gy(ajP|j}tNu?O$9C!e_oV-A#7hH1wXCBP&;mwIWP9u+MteGAat5O{6MmrRpJ`%A8?=5o z54_s3O6xas-#P!y&}35*@iIW`WY)1eFanI7!ghNWV{$goM?dW)=yj-h$+-|j|0hPS z>-v>36Un@&S=9fH=P%azaScYcKX zw>yyRv|rjm3IOei{C7c=xoFn@kaqW_Cu{6#PraF~7iaBj#=HIYW2`?0OaM;-b~2&q zS&N^74(;2uYim*)q}D36Dw0~RXKL{uPJaFJ|Mvgyf&cG;|L=ifJ&ZiH=r_?WQ{}s^vdxw7d3|`Rl$8Q;KZv87;t<8?#XFzK2#ZAypJg-y{aQ(XdWOx5c zosm)8{|V)fw`KivfmHrV^9tJk5=UcH8;azwiF@m}rm%in`JaaF=N$UC_lOaj-L&<| z)*q>c94=Tt-D_NL+yF}X#=GCul5Ks|G!lKcF^6+q5mQe{fYll{ks~ibY0LWO&EoC z9qDKv&98Eu-x8-(4A1jkpW=(%^GxcS1>L7Q^wa$MU(tURbYJJtPxI@4MgMouz0RS3 zW)tR*-~EFX^!~?Z{#5>%=TD{bhdc24)E!9kYIGU&e=T(1 z=+HlGthqj@xYpSl=KAoG(wDy9ecq;&pSJg2`&Q|*&(N+ls(q??QoPwQQRh8A_Ji(r zijdtl;`vnxBzslmfN|m%wCxQuK94H>^^dxBCzbzj=&o_-A2)V<-u`3$f2sc6TJZc5 zl>QdH5$#Gk+DGH_pPFBx)4b=G^_Y8{ME^6;z0{$f#^--U|7jih{J0QE?W#4ea_P4N zR@BR<|Lw=Q|HI0EYA4oz29Wg6E2I8!z~@i3N+0Q=WIx0Dqsnh@%=#|@QrY?D6|mcg z=9x0|pfo^QuJj2t)AR1^bH1eVkE>$+M**q);X-ntb>W6tUqffP&)@J)tlJ^Qbx5D# zr@hba=Cy};9cW(k+d%X^PWl|m=H^Au%juacy%nLamAmiH?XLuyBH8wrYy7Cba-@a| z?|yjn0M`F3&@9)XeavTi{!{wXYW$?_kpbTNmqGW(Kq`Ned6i3l_q~HH03ZA4xA*kc z|NKDi|9T+luNf8{R4)BgUpZ3xKyUr+t66_1AjO($UggriELiu4=AP|7|E2BL!K^>3 z{H+JG{xFcr(|hkdg}9!W?h>qm(^hU*c2N?N^7N z{(xcqst;_>DE(4F!%FXV(5J=qoe~|HS!X?dxzfkKe{Xic>u-I=Ec(kM13Uq)F#_w=eoDwK;y|8gmIZE5R?t;)p)=IZb|%Bb?IE_Ca+ z-eH}>&8YU#^crqneru?-Pp;pg>&komz61UCXGi~uR>BnQY2ZWq`d-^j>4t#;KknlU z<$3(}R36{=fmDdbw`I^93(wk(;(&tV3HSI)wW-f|oX=DK9cx+tEiH}E$fEypDRNWO&Y#L)x5uHsUF+`u)DZ7} z7iDyRCR+%vb7XZLx32+6JZfJ{i;hZ9e$5ElzU0;J_BARP&F##La<_NYX{`UBKq`NW zd6jE^HO61hgYZPRZmDk5(^-FaAlXkfuX5?PWbh?m5nOn^cmF5nv3^_mZ-eed4*lnq zQGeR~L+M4-n`^`ZZ~ckO(f`W7^%>m%J%JS9^m6JC*#8Noud%^5de5JqME9B84k~|I z8TBs+xW4XjgLnTo+|BwMRQoLG-pQf=j56xC%ziOQy3|L1_-WQ3SN_S+eWF8u-!keC z`u=VBM(_TQ|HXU$^gD~^&3-`IU+i7N{vz|ouRO2!y00s=p-BE4AN{EpS$|sjM?m*j zhyJP(^soLe(NDkcK-XnK-93+^UC#r_KgYbvb$v(%tmvtmyysW?WgZ_}`HwxD=hsvq z>96eH_uznGiRPK)d#0XF594k(d+X1v!1dUKlP_kYX({9wz=xc%D!NgK_dmX&n0{z=cD z_zgTCQa~MH#S`xN)9AmAd3yfbcm?bKBaq4;)JSq1-07aD4o|_us({buj(bw+Z<}(> z|4QY547#6n=-<*qk@a7ypQO^cO6w(^qq#Y2GA0%Bk^kTXkKafj*=YP)1$}TsM31D$ zZ{3S(d=%%%=e_+6hw(U8KI`^Rg6`=K{WO06EBfoM=l(wnNZrxjyvlX`tD^-xKwA2e zyMKk+a18f>1^se>3a93`lWlKT)pv zoAO$WrEwnk;a|P=S0;J>#+3h>BOsFt_OzC`)&fWHEXZkv~T4&?s6h30o($m3T56u$fX z^5;|e^+`wG&hcYFs*C22JAUaAk`KD)S&~kO0BPuJ?)f9s_`5uh!peVz=*Q=~LJyU8 zewVs!xe@g*1}-q|!Tp;^17^(p_`15>=XV3*t_4ys+H>m^dDz|W+AsN-Dp#?dzn`4YJiqIe|H7wO|0O^w z?={ElCrcauq$(G5|E7OGso3}@p?k4IzpR1McESdw%jt6+Kjm&`bL)Q-x-$;_UVE0P z(&f_Z$i!5+=GMQ_(>#B|K$6mx{2>f{1L<*J5Pmex`cYk| zwHd#BK6%~yLn&Vll)bQ5UDk`NubkIUXT0A3$KH9sIZ?EKJV$RrKoAgth)9ukAR+=v zr~(#_A|fIN6#+#&5fppuSUC|91tnM!_4Vvn35tsSR7C8t0~XGP2q^!ZJm0z7o!i`Q zj-0~h@4oN)%XepBJ-AmwokeK-R~d&t$)eif6pJh*ScGc8m~$If~cyap8vNqD(BeBjiMx` zdi|U3^Jl;B{}(M-RPHZO8&n^)$yyXJyZT?>W+Ns z%JuI4qi2i%Jfqyr|5dw?{}vrLCBGlh7FB6d-|fj%{^zIJP@C`F^B=li@*gzHmmMJf zm!rym(+v8Lr|EzAPwxJ+mx%x4esGp2@Etu+#_^*1(v`KvdI%?aiZ0^c`9=;Aj`kM4 zyax6A2*>)0o~eG&#oD6%g(Cw*C)ASTfkTDk=y4nm50>MBA)-ffJaQPv4;MXx?_GzF z5KbH^s{IFs3x`LDYX9-0s6R?n`wtu=92g_2{U?qUj*k`9{v+drL&uA1|FMX0WW1>M zA3uTPCyHwSv6F;j6GWrrEjCd&JV|sYcU zegsvsn``Z9E?X8wNr|ct|I*lUHage04vpXQe)2kVRo(BCT6BDc9FKk>s^7bbzTrHs z>u0~^emwZQ9MAc~*-o5xqZ^FlaN!TmHsPf-N`43zF$-ox$`#~yw9rUyN`I|rJ(d2m> zG|CH)lH+l$BjFL$NArdY=h05?H*!CWY!D5#mGayHqLD-3jZz*MDjYacH1V4pPq+Ud zKH{4sK4%NhX@aO6G4Ys?vCj`j4>y!|(a~{6mG>w?V1i z$hTLrJuWcjCwQ^=)m1{HoUClB*K6wiD*OAUy8f)$GQJy7bv!vfw-4ELkc;ZighHz& z4^cFa=PxcHjzft&r*B801-XyAmuvs}{r3d@X6pT4?IU=Dy;5WBMtiz2VTBvaN6RdpzlE z`F}XCPqFXa=Uum{@~yg1>pNua<{CfxMj78Y)T&bSckb2W9o;hZ_h|}#ek^(YHUGZO z9r(W6=6{}LI?c4E9%h>7d6Uh~`OyvM)D`~$qx>&?SC}jFpz2>^?V0kQ?)u6x{AvIB zEyVw+l*izsZ{qwwRsB&J^xu7R>a$&YvuiYk|3EA9Z?9}UKIvxhe;TTa=URKFzWsHmSpY54H-PccWocNC!<*Vn5|Bq1BhubYB{!!VkPwBpYXMX=Ce6lm|=HD+<*C+Mw zHq^hdQrA`WbGG`QG^=~2x<8oLEbCCw*6UUoe;-s847T=6oj+-w{(*!sKiX*SWzIb4 z;}_t2md$@FtyQVTiw@}F7BM7Ja(1%uVIv5zCiMS4XWCiX6>2sA5MN5 zNV~Is8-u^Embk$^pS`xZkFRi^)Q=nf?|MM|FF{pL6O{krE`2@H&uh%e<#qqdjmdac z;`=q5e|4`ftN-|C&g(>Z`~M8z`uS<-bLl@*&rg4#{mp14YdxjDqh$X3@5lX5*4Ig> zS|93`P}ccT@%AlK^OL*#^HJ6JFl$fOzumL_@vJI#@_xK7us-S2tQl-2 z{tJxqrupK3KUBr3&qOlif34e#0n?m~$7H$t4|Nd#L8JVkN5ucrsA@`i4~5jDKp-+w z-dBoz+3#P7o% zPTVN;0V}?=>#P3$q;7v2akJ1wn(<4CTZVp}X8gCr{edn?Gd}p3Kf) zxa6-9s;Wh;T|I|!+sybr#EnLCte}!(FPT5x_VdK8MMtI?AAUmo>-PTX@8AA^KY#T) z{_p%LUWZX@G5&Y{=rgi(?fSgr?GRMeR@c6EA@#`rmg@E2=rsTR+NU+0&#$zD@a|6} zpZCTokK8NI7Z1bts0{m${wU8g%G>{mF8Np2@AA%nl>F)ZYE3u)IIC;P$rK6xOlKPT!1FXZ!(eks`eyhQuaS~)JhYNG16dP^u2Qjdza#83WSKLj>9 z>!thryK5ci`u2MLpd8wt4;MR@MUflkD!!^X+ zil+Pg@CoALsNd&@I&LFzn{~WpI%@5y#-N{H>G)7)tFVhUe}84n;GAaxEv#1 zuX}r}dThpDLR_8^?{$CE{+}YQ08RJ#VYe4#{5fd4&kvUor^oqEKR;~zw)k(3Dj(|n zZ)d!}?DzZ0iC^UW5C1Bf>im!9$oHf5xV5g^!+HMeZD9Rb&JdWd z=LI6Le*0-Atl#d>gY};Wd<52iu4)zRb^l0EZzK9c%6}iCGFe#S*ZBV;uKGJNz9k;l zPdy)*(*EyCzk^ZL?p@Zd=XFQ>DLh`U7=JAt*vNhT#|J%`e0~>g=q!JHwfKJ;RlTV1 zIOuh#d-eK$zFA+#r8<9gxv8-|o&I#WdH(9-1^8ZT^RKS)rk|bFe}(rY|3OrZOI%?T?2L%|8>?#{u`hw|LX5}X6pP+_xGFEwQ*nng>&TmEilTn@qK{J|D751 z-)LTXnRvggyZ^*|@t<#$w_Gdv&qh`Lmt@d?e7e44s+PUCsr$M6&s!q?Lq_@4_`cER zzmrQhiLK7pH7-?L4~^D0bl1|72VZaR^dDX+zIDxfqg<`^(q8{;U|hc%<4bQ<=-x|e zR6l_!S>$?TRtM+!bfw&^Wy$+nu2J6TQ(0djRMl5ML6Ir{jkE!uy4moj!wMRS|AbL~ z|7YSqA6515vGz>)@1AD>HT^`FXOVVVo*CBvU?x8M}(-Y(En(&Lk}+O=I%dmhWL*gG^Zi`icI1ppp zcNybP)3$2LbxU{ru8mj+!zr>q(R^?ec zssAVN9k==Ks|RP(xjU)K>=AH|id!?|15BZ}nK+57oU; zAGaPlw$(q#`Lh;Pg;O0h1fn&|cK%FC^Fml?JpYPbU;6o@n%~3P)jtzguQkHTj z_v!uI|G)oH#=jA@!jj`p)3ypL*DZ9jdmiThB>oqn%Ea~7o+45Ie=g;}iIDLnV@+Cg~H`+=4>#RJ&IMnMe zwLJ;zb@VK(U+1oX&CjofSh4C_qjlkLGQW4Cs%uMUg8 zEc0A=khA>SP2ztZs_G}#XGlki=GOJMKBGpx(BaN@yr@A>r@#EI&h;5H#+Q%p@wq3S zu0AVO*GBcXwtlhn6Kj9L+ST?%alJFu8c_F@0&DWKt$l-aV41b6<4+aWo2pp7J+`OS za2so3ylmB-Y3snN=qt$s!>wVp@RsRO- z?P*m{Z)#l~Y3=I8s9I;C%`!jw^XUZn&D7`9ooN4HG=7-mLFKV{)1SMBN_;-KZUm$NKvlI{sL*f2+QVS03CpGhWZPy>8S3cmKuTAJP4f zOVPi5PVH@*{poQcwSVx8nKNaZeMc+fy2~c8S*U>Zojb{5rm@>qp0zb^Yl0 zvaTN;U)J@bzOS(P?`c)~xBN%@ zxaU8xzq|iJeE)9qe{cr<7dmf*X8KC-6Dj;hyNUli%0uvv+hqN0Mpc8|OSBpYg!c6J z{L2j8oaRIh>+8&aVIODSgGRY(zJs+lv38ZJ;%mMI)|U6TjBh@wj;ZmbX-kE50i0b8|5$I`z@RQ+Bzr$n(q4t!2wSHv6G$iV_K@UUGg79Rr#6Lo~isd zN_C?#jli=E|3%eKk#Xc2tRHFxRS=!;817&qgOlg zpFhx9u6}#M{#;Z&H?yB3ZwCHI-dEP3%8D9arsgNz@qIYR>0kL#Th0qI&U~Z%=PdER z2~~C5S$n4ZN7HO*{$O|ik@v-a)F=;D5dRHO<-dyhkFmv?`@8u9O%V3)SzG<~FzuHFh3z`2o<@)>IRV$1C zTBxe8=HFa)JDYz!uHR~se^eb;`8T&n3xDf3YSjC;*KgHYGQRR!zm0d3_M4$9Zv(8o zh4BK&YyQoAYmOhHABh(9S)07xhx&>-OReA8JKX*H749eXhwd-mAJFS}P(AT~1ghE_ zXzl-&|Hu*P`JdTI{9lNwd*z<$j#UyF2vftZP$@7eBr7=G9`l9Oon_K)4_i^U!FY|K~syrTXWS&1xRiQ{erqU46dV(ptpodqyGavHD!q?KPcsxM=Hq zu#EozR28W4XKH<97xlDb5Ax5G`8Hb_g70BA|HB6#nz8kr=GzB>{>M1yPy3BsBL1_D z@=?7d|Hq^18q_c+D`WZB{rlCY4SzbW;41h0pN8+VP*q?38^}zppLm)Ly>PsH{a_{&ZB{9jH=X3nPyDWD9JiaeQLY-RV(sSp4!V;`gJgUYuKIY#Pn>w|;FQ$%iqIM8u4Ca}9qvcZqMaUCruq)SA|=?xX56d-M5q zC&qPvZG2X>;_V0-e>GGUsPTK)E{^|)9%bL}o`-kwz1HTxp^K+*m$J=YBkS|Nbhh(P zajw6dmz}<2lbz-2+GEa{y}!A`WPW0(DpTV#=O?s(*~Yh4Jt0bC`~Fm?e;t}vDB~=k zyznbwukqCyDdVe$s`kd|M(x_QY~xG&^}*@R@r5crm%MJ+t=J!{^H05p-O<|BIjGJ> z`+QCxCF466wThGDGv`koFUzLB^O%V(r>grnpT_q~Hvio^cNv)}|LJ-U<~rv`$H#UT z|E-Pk!eb@>zoDwWny-q+`&YW1bTx0SGa}MNd_+!l&*ueayZg`YF7>nVpWRS+8@?-! zm2s%v)a%ZF%m3_))AR4lj(-YYFXPqP7w(S^LJ^51{;%#;>azj$UXOau zN4?i$zm{8vN^Gx?7ybGm!uT@v`d~HfuSIh$!Q75nUxR~ zUpcBsZxSEgBT*Eu<7(a_^RH_vjas`iULBQ9fB#I!*H00zJh*LUe4`ZcYQEeyGv2LE zI>#PeB;#L(s@UQI!xxMHai}`p)!H+a|3>|EPyY1V6#hf2#edu=kKG~u6L+IaM2mWRKsbno z&}_7*UWx}{>S@h^BR=DEsb^}`XM7&@O!XTddq~Fr0IG(mzTcgx`8EH3MT#^Q9o}%c z`}q|NKc9RZkZqJ-|FHOik1w)RZQg3gweo9)JtKY_s3E` z2vyZivGz=@pA_AueK>fctRFKl?-TLA09EBZtUXiyV`(ZcLr^VMN3 zWPHb5ye4l;9e;ZWQjjI0`TWDa}=ErEp6R*6% z=|B4x=ltXv~Xp{T+&`wlB2yGSANrnv0~EpU9o=^YZ|{ zAGZ1Lp1r^N6M>E`GT6Cp9EBN#Ck_7vcRPK@jPg{U%V|q>_m%nC169Y>`2MZ=3Ek*^ z{>1Nbj#K-eg6}hI{%_ZXc0KH$nV*S<|M2{zcoJv zhJWQpZ3Ro5EVW-7ytQ2dBYCkKZL6Kx48H(>-SHyhiV7@wAljp{O2x@C!a?~ zZj$nFr{ziRjqkxW|MPbt{}b?iip{@z@3DoEu2^rGC*yERjO57mti1BCzyBM>_hmN! zhweiDbpjtCzxuh)qp&`Ym%;k&f;epcK7(#gYu&KS+a9Po-qPB2ySiRkH7Cu${FwXs zRrsBpUuJV(_7(r%qbff&Gx+^J^?Wm(tuTfE{GZ(YZ^L)xe#Pg{0ak~Z%741Que@ck zd;ar&5&x@=^6;VJdl0H}H70}pm!*26Uv=cNHM`T@e|($xPu$@we+b`?+Wa4DwVSE@ z$JGxLrLiSa_|Mt*!{q(st$xnmM+^@m|ETKfRBNvgQjd0gOV@voyPf&f4z&MY?{bz; z$M-ol|HoND|5pCf^?w7tZ?gFxy9@dMe2lE0uTeE$IeiBlT_HnXEYCN-pz`UxGXLSo z3(57Y`m=9+DYqX}kK?aO{n$McUvQ%EdVK$A^M9RHe`oU_yVu=+^i;|JW$0DtY;@S^ zQXWB7F4Vs#&(!&$K2J_(o3O-r{uad+$oR62^0v9+zay&ZyIm3!$CT~$ZSEmO4tzZ* zTOXPK$> zmF{IE{9p?ISueU?FS4hL|L&;r-!_B(N2>DOmqiDex*zHIXoO!NJpR}BB54o=_s zM!DDge89Lq^%!3`Qnv9GeNoKs1m(NWPu~8{aq8y0#<%}DGJoAr71zt!|E=|xmtuU0 zZtmk-b*}h-16BSPss9*TVtg6r$7m;A%sI&2w{EAI^+0{Ts(!zxskN)Tt9yGpYj1Du z>TlVodz^YsroIE-+1k~=Z!>?BR(}W4obL`7NPaq_R%kLm|JMAf{@u24Z}&XS!}kK4 z|D4WUk1^YbpZL$r?~}&*3=VSojv3|Z`<|s;|C?MW^AkeVxYYRmt@#N(?0$WT4t9=H z=fCMi;(u>c9lur=WStsBm8~F! z|GeSu{-3y5{6CGV_m3-B?;l4}3?O`o)Q?PdUvE+4c*5<)ZYh~L`%&lm3LoqA9W=@V zqoh21jA*XrqlIJm)tZ1qm&!P_M&OvC3E0%oWfDIqg^uL7sV8t;>lv`AQI4zk-%C4x zqIy1l`a1dgFhTw^_5G9C_*h``qd$Wwo<{xqt%bey(_tN#Pu%0Eiiujg8k5=-2Li?4 zUoqp~ByP14FLC<6spEejZnF{Z97F2()|bmXcSdVjT_(>F-L*rjg|&aj;T?e7>!trF zs`~DtKHu?r-|93uKV!2cK9z-#dV-h6cGC;a^HYcBH(r@sfAM9MUoGd~gZO^f=3iZ3 zy!=;7;XlN2-EZDG>Yo;Q>*D9LH_mk!=m`l)cG01 zM?Siwv8+!yyY%^`&(A=(1_pK9$HXO2RUEZ;XMFMbVaESN+^5qP4!gw)p9Ceui6CnP{(@;J7}v*5eC( z;aul^_>0lb&&NXTWnJs`&N|vzo@(9d`W5HM{OI)?p}$P6-yrSRLv_De>vOz~_F)yI z&TjGjN5>B#ZZsOS3e=^u!IPb9{9Wa%-nyP>$@s~{or9{MD=EJ8COqS>CGHk9WW_80 z&hv}&Gk$D|`^P=R<)bZ2iw^{f;&t59#Jz%A;mPw`Y4KKke(3v`j{lsvZ;W{79Hfpf zByN)tpX&TJ`_H;j)?ZDujb%Dz{;a?MuH*IC8WYz7RqI{Ff58Muz20%r!sTXsH{!ym z`ZzCj|Hb*&ab?ZFjvqG*f)_XE`GKAAtS@$2}F#QkQ(d*xrp*P1Kqw=vq?>c5gQk=*os zS!?n5b&YJ|dZX&S&vfEP6E^`3rx|}fao3>z(~Q51xP0_*E8fri>$tMczmC`E&nxtA zb)TGnuldvQ`uzFAi1%7QI(|EGb#9V%kmGawID&~at$ zU&mWr?a+4qt>XV;RC#Z!UO#%YnmEt-ytt_P`Of3M6#5i8w{=HrwL>9>W=+_5v{FU|ff!W{G47acIsP$ahpM|b^$Z>xy z@%&!De%0|$5%(fm`uQCQn{i(d_Y>emJihZYqcu4-}_W#$@||W#O0yszW!cJ+{0+P zufJCk_YNAuzw7O;HsS zwRYzmq>gVxTt_3`dH+cre-Lr~&^Gk#nm?EMA4c35R9)YdcfYT{rxG_4_51o;$CWkz zI{sSvosC-7llk|`pN_wWxTQwC*Zk@Dmxy}{P51Tpm&E;m`hESa0b>yYVBV0r{nec(>NyUNXL7vA02-nafhOQ zUw`YkvW{QJ>+z2@{CkaG$LsM=H{!jpbf$G<_` zJ4U>he;vPuxb^5sR;Mb~8Lyp`eEzYGxZM`Z`YHYSd2zgsYew8YsOl+d?aupO$?@y> zp2Q77{l5Ozab@ja$1A@(vemdl@)kr@-h5llz5YJ@qe2*4=;fclUXVRQ)sgy@xOC(vje zC#&z?s%wu9d!U|_FGE%SvV7z(cD>L1d3^q?eP~U5=$^lD^Oqz~x*{6R5&!XF=m^os zDADjS@L17M1U*SKHc3=B8$L}qJXO@pm#(LE_cNtlLsaE&Z|nSN;c@;%XS?SwW*lFp zUa+RI4g1(Ve+B1A{t7>m^6+?J_0NOV^)1!+c(0x=v1I#0(^W&eTnEy9qzN1FDdOdBw9+<69K1arvi>mQ8_i=w%JICMnf{uAM zdoRhSC)~%E`>l*GY?NPhuK1sW-i+Rk-iyZ31gd*(exAg)K|7#b(Sy+(G>YoHE;(P~ zpFmaqI;-o0?qCNsG&sEmYJTUQzt9%RU;JBV`78KdWAmTA3;CZHmHfw0mH+xa&d+M| z{H@=3Mb)DJEoXx>zdAC$`^(AuTi$wSdHibeAHG&Jbe(7v4bP!`F6Hw?b-NKbbh8|f zp$Rm6EAb1^g+@GlG8#o=Xad#!nL6$^X>U9_35}vLRG%+q{AG(Ieio{-UCEk1;|+kK zusHP+dj4)MeI6S%2s-ksJ zIa>0+!=I7-j6}^E9al(s7gXoZ>-)2z+e*({SeMVxBQSe*=huFBu5Vo{F;DWi*eK8c zc}w!V(Dl;QCy0-uucg`EYU+Q97N!{=_(lAO&@k$E91-eA(O8=Cab5pc@exL&XdDgv zMmeheMd7$U{yX*1C>loto1|RFhvAq${)d!D&^Q{}EXSj$j!)?0e@c01i)b8;Y!wb{ z6OExdKKz#)kNhnf-A=v0*5ta1XNe{%hz2U5G*F?klXbg(wKDNF&^l?hSD*S#&=zUN zx21j;v}c;}{i#0;9hYW&F7@-!e6#>9M1xf%&)KNXZw{P`=Arp$0a}O#t2*Z^3`fzp zF0Ur_!e|tYqq_eSuPt)B+&|3kr$;%i zhbxI%jeV268AFNvb1>H=hHf_fVfXl)n8Qo$FUW^{?>1&>GwNTY<)Y`p1AJP3cByMk1oiD0y$)1rvm(Qm=5!W46=c|hM`}y?Y#EnAzem$tM!PsgvL-ycz( zKd@g>Kv z;~Nv#2KD>-w2mul|2kgz-I1+n0~vQ4ROS7|vnHJBJb%mHLs9Uw{d`YLUF7l<1)NuOCX(PUMaKtEAepRm3`L65O^&Q4l^!n(5%)UPQjP`#) zXYLzLUi<3UO%y#Y{`V#NP_0uW{|(Sw;+@wo{rsc&_Z4*9KE&zvlt%54d|dMSr{mkC zh*x@(7Qf!WdH>Vp(LoZIZH5#v!|C5jd2)-L|AlELBHGy9f8n019Iv|~@XPpq&E~(}F695sS0(@Npep}8 zefUo-^LPCUsXz9S#OTAz>?HnU_>QCcd2f8J z%u52*mzh-c)pH0n&sueUzW7?&S%<3m?cgInI^Iij)CVSMZ1EKHn>W^demCNKv(10g zUC95<>m~oUqbmQkefW>B@OOTx&s);jDs^-}zrwFe{$nkrJRTLk7vK3d|GW9{zsjfo z$i?ZnxBfO#2Y3GkZ#vgc-o?V-;CsEzf0hsbtN&sDp|{=rSJ)uyrwXdpPr!%^SB zIllL?`ETdL{|`Hf|Jd+e6IIGXBSh6>wS|rnPR@rMa{O0cuR}k{{Ix{&>*Drs*f>5M zj-dK}5QSsL@i?47)%8EQZIph)s6HNp6UOmyq12C}>iL4&5^(5eDc8qiaKbnq`9rJEdwa^gYn)vGSz0qbqDXS?P(W zit}@Qj=WMn*XR81?$@{IUauy7=5>zSr9P`?)?xcM|_U<9mzEzn|;#wL6LbK#y?p z`W!`Nby@GB_mbmY*XKkPIsd;#_4WA&I8ar}_3?Ue2-Vl;FdQ+CN8uQ%u2X7@!+~nj zzCIp-W5)47b*UFdi>||P!Z;qOA@yUZt{rY5kBFE!Ke7J}6 z`kdRsd0jAD>;HhY7N4<>USR#r*PFe}?Qx4HlAo5S zS!YsHDL)NWeeUJs`B&^!fA_cibIl%0=PM6(=1FRfHT5zu|9uA$?&jy}6>&V~0D(rwei~ zmvM%Ta%e5k~{Z3rA72 zzUIp&O1-O4HU8Z*IQ~R?{Yp#s=&oOnl5t;?V*I&3%J_4Q^6)j{e=w^22eMP2e~Gtb zU9Lmj-4q|4@ApDa$fe_*^Oqld?d0Ot0)dE89&RqB%D3Bf^g+h;gfTvUS+)1<{y5$7 zWuM?2pKdkS#yL)Xe7|dDe)dPzIJ2zz$&~-7z9H)lJv5rae>B_O|6VtX|GiP=zlV?W zBm9oP>tD{S71x1W#sQ?Y)w9QB6?)7T0O z|2i~xhKx_M);PXn{NhfHtg6+jR;^lHjk{8%%KCqmS5j|&pkmgWZyescVxWput#Y-> zDmm4w>#t>1T}8chfr=GM)T^AVt-7xI2KCxxRjzRBEywiE((S1hi$BD!n%hD0I}=s; zJ^aX_BfL)V#QXl%PgJ={W1D@tbN$5TIP?1KDbDgM@qL}me?K4o*X`u~D`e;b8%-nk zs%noZ&iv}|+=Vg^^-gt`tM#JJU9Gyl)~=moeRW4wy~D=$o$mGhq4*kq>#M-{`*8(# zh|dJ7eQ2$DrqjPZUhurc6;5-OtJ6=Nt8U*NQnA18FXQ_gRpV=r!Ru4*ZmJjmTO!5y z0&mFp%$6btivN>P<$n*$f7p5%ZPvAOWUasXQUBg8oo)1VXZ{O6bNUV&<*IGvS)DF! z_mHjKWqjLFJwC7Xr`mPf!XG-vonusr6*~PI#es!0oa58w!S5t4Xq1mWNcqu22z2m?4knwFp)%>*gasDj%+BpxYdYySisuK6(SDouV zKY0yaKUqbDQk3h~bnYTOWn3ofw*%rS%B?@omfWJfB;KsQk1jvhy?ym}mem&OE#+o= z2THN^#LB&WU945VuUXhv>g)NB4j0bS1I!f;oFl4#_NnMLRy!;CK626bRdS?W1s#70 z@mGuLm)&YTs4Yyq{`c>J!=#@6J(a-m!qJJMbtTNYFw{yu3iXrYS(PiwE5f6MtL;_4 zN*i6*MfLcj^j|do^}0QRUJ{PJC#wDyw%YXgW9In3lX^wte^5B^l&HRL>hUMc@qa1x zipD=jIJ!tw{XOpFrZ04x!NT@)J*gRaSvc~xsGdJP{)939$R|>-f_idgZIQ=?6VHk2^H+~Q6qNjjlC`b+ zYo%T#9e<~ANqa4@ck9;d!y?e{5d9>*!e#f5(1(MgdNE=Z-e}2cGs3&oW z#-jRbyMD)?s7U`co&E3V`1RW}=KLqROFvmU|I>sMXN&5uz3cHum_NP#6Z=cOqWPal z{1j)r9)HZ3|3oLLS2X{}3P;9^%2nT*QO^IwKsj#Be{x8PgN4=n4|1D$j_LC#LI3*v zk36H>lZuf=!jUDSdj0AA1?oEQe~~AoUeWlk7f#F*HP?Tb_%`^8JS_E!#(x3vmpkJF z)gZx6AaUb;~Rz0<=E#aen$f~DywS^mb`;S=l)ULLOkNWD|*XMuSNBxjhU+rp3 z_^5xRRZs27t+BU%yPq5%^+Q&}YFAs-M}51Wn2-7=S?#Jlx$RlHf3=P$Tlc8Nyby{~ zKPwp=U2Zw-tsZXXd{x)0XRN|A^!dHFv@i7oab16_t^Q;yM%RzGaIYWuUakkK+5Xl( z%-Yo!-p5`)8rSVtw$)d4b^Tb1`n7HK_qNQcJ-M~Cw;x!c+YeD+jo03Ocwc+{Y^#2D zAJtB0Tl?o&tai1<9Q9*y-F{bF{rjwXYFAsRmA(B!tNmD59q(9&0vGjD?GLln|H5Lmt1WJ?ANc8oKwwsKyyI;3?fHziv9%v4&Sx(5 z^?k(pgsehV#XzOxe=1e1T%k%<)j+kP2hzFq-)h!J0W~VutW>MwZWU^0)d>Wxz{-`X zRIFN|T2}QyjVhI^R;pI9dW9NUH3PMhZ8?rqtx~OW^-47=)~rw~Yqx;9XO?KMs3-Ra zt@oGlbVRePYU=)`m%n?IbshUb)^lul)#UTuRQ0NPHDm;~k2&vOx;Qsi?sJVOPb`vp zI^VjUsY|-c`0`OTzQ$^N`i5u*q{*|4`UP{H_hX|t5V^yBeBnDJ?hMKkw6oVC;=c{5 z{I|CJd;R`=;3t32KSrN!yn${SHaI_p|H2AyoNTX}Qy}B1VjWEN-npv(Mqe4oAMt|cAv{t?Q-yXW#eSQ+%WqeV}LsgyQ4NZ`7v_!k2qtW^3HdL?MiIXJm zG*k_{nl*l}Emr7n{E5@kI{~Bl&hZxva*i`+_Q#HSz7*eA+5A`a;eW|a;$P2$Rx|I% zohtKlBC6-dE34sO%4dGAdc-+D+HYc_%#)sJ?~82y)%Ky^RAogLf*r+{MYo6|L%VMm-G5b<=-p+ zVZZ)$qI_z)`9Ge#=i2gL+eiKf`SoAU`A_BFEB`ru{rk+ju9j~8=aBc9E&p|V)&VIb+vT!{|k8! zG%UXVR`ikonSTA3bN*BL_sW0NuYa9bpPFv|o0Ioew)|K2k^fnK{g-q8Q~CGGf1Y3e zKJ%`trJMhQ$a{`0|2ZRaLSAW`@7KRqL)ti+?(^qV{=M=a^XuR6=Y{F!|7`L;%a;FY zKGy#dzy8ZP|Ec_Y}^s33-3SmjCKL^1sZl|8mZMD*s;jkNfp+kgb^U4Nm9|xW{d+ZJ3@F{}Pb&Xj`7iM6-|**!>E^#`BYED_2vzSt)bg?Z z*ZTEe&iPN}-z)zKzy7@vZj`5+|L){{kS+f~ANgPB*MB+ZKb3#4{1^K5Z{*ht)6M^6 z@_wc*|GW9f|7O4b%Q^q4{Cnj;(9GxipI!+!%G1q%9(iA4%YQu|`LE{Je>vwrm4C1N z2mSgt^6Q1^=KpQ-p0MR#dG|_NBftK=8Zriy_Wd`7f3N(9{Q5Wid11Qw4>acfi>mu? z(0T&om9{p1{d+ZJ3@F|Fr}FQW|7^eh4S!ykZvK0b_kp(jXZcwF-TnG6=lrMg@0I_s zU;kbSH_Fq^|B2-N3|s!2_{jetzy8ZP|Ec_Y)*()7p9y4m&kj8 zE&q*uE?d|dC#@wzk!eZ$Nc&)=lrMg@0I^0e*JqT+$c{s|MSWF z5?lW3`^bO3U;pKt|5X0H^1sZlesHI*{@ly z{vCkwr`4>lk83r{)z3tzc&&OITFv^}r~3CzDlV0(A45>(sZ@`{Y+v=Ow%a&wme|gp zMn2A;So89E|5sd<{BPkq?%%^yES-X(`O(9wT+flXtRsKUBYc{%% zzw_Ix9kZKdap(GveBoU8F{51hRo6GO9nHVAV0@^mUpwgI{BA38x}8+|NveVr$8%RW z$ET~szIKjNAFs8K_-KGC|J8i>ueOu;Z;9`YHvjc@A^$`0J<{fXHy{23J4yae!S_s? z|2n&n|9SXcV)Gx|h5WC=_Zpl3y1S77-|+pH&3~0$$p3CF<@&iNs;-}veE1LUBvxj%b0fZEHvh>VVbD)7 zQs~aIejda33pW3u!G{gqRr3EKzQ42iZ?X%m|84jV?km?(b^UC(3;FMa??E>Ijdmgb z6Y)L6=D*@D*d|HeN2?=1JP z-CD_YvoWf!pAB{)|6TBXh|T{VyO95*@qMDrfBjv^|M~dNv-#iChyR`B`SauWe%|K4 z#xCT4HNHQy`41g7vcK2!&zLdR<%lhfX>)3&)x_?!-{CjP&p8h@`Xyet8QJ(#x^ZoNkpEpl7syI+NE$#Dxa~aoV z#`wI}SF~68j4#g^pB_wTfH6*3f1a%CnHt_t&ietV%Ew;T{DsYm21gF|H@`@TtTDUYyRSl>m_4+Uh|jAa^w)_xYHe9=w;{lbU!&`oa5BTqwmY_OD6Ci zSmXS?$#*!e|2|3_f0_FGD4}+;KDwZKI<<<=Mq$xVSpPn__P?XLs=f68CaUJUrjP5R z-+uG_R;1oHDdw+mqI3R2#|fwMANJ@s+{d}jboGdF+{=I5s6X@-=laW@?DVbs(Q5tu z%ZcjoIu8s%&7ov`^=pPzbdJB$BK_}*^wuRj0s+IANIbyx>YQRQ5He&n@{+)36? zJA8Dv`B$G`cx^k2{|LS(*!=f7V(_T4K0omqw^w=Ob?5o3>*w6yJdgG95AppeT8IWZ z%k?FMMo=B6^{FmWFOI73A%;eb=%dSbRE_JfXLAY0pSa0=yk-OI@m*;1Un$pn{h95g z;_~+2a(~Hx8#L4TPc^Po$HQ;9ufOd1G9QJgjvt2a(Ki2?%)jo(ucq=Jy2agp6yI0c z{Ac}(>qn0>e5b$lpLKw&pK7RDKbiC&)`om)eya7eOvcltz`4GfcN71uP~|_6!Tg7P z`qtILtHfvSPyX`%G`?44$baYv=j)EqXFko0GQkV9D>Bs9GQWNA*9=toKiGZe#a#kX_6D_`*ZP z|J|taUpa%<&qmHSn!MBSo?L&jL+*Zq#_?basTbYby}oyc-ZipHe)~KtP>*+=>zzD( z{0Y`u23eIyOqe#g#5wpfd40Q_^6Ty1StF;Vd!F*iqqDa4TmHReee8j%_0i?_AX)hdP38hS44+YBmfCG&EDQT`&n_5C$L|CzeK zuBH9;Xuujz>Zc5ay)%7(4fT=vX@{!$={)L$5oUh;a%8k~e)QiV_8p(?ettw#9Pf?q zem4IjhD^%w+n-r4{tx@l!S`sJ|7lZlMw!0+a_E?UHvg0HJ=NyF!j7EZJLo^v^(oc* ziQ>EH{HFg*o!>W>bNh?Rx&4RAx&3EpzW`N#R_&j>{$=%*>t792UH?Xo9y#3a`IhN= zsn%~^7x(Mpari#L=6~=Jead|OE-{{>KZIPO#PvYK)$Xrfv%8A_gmHg;qo3seJyhjC zck=Lz`Jb8Q^WR+j2Yb5bJAR<^_*eK|XY*fe2d;l+Qp?+ag7L(<%eeCTGQQrio*>FXJ%VIRxK>Z2mJjzh-}4oUZ?d z110}^qbmQSPMDFg^UKSxS)R&&;RyHqpM>vIZT?4&9CftW?mxw;{O29z?tdV@&qIfx z7o$VbE71|?b?9jHMszHC3%UqhjNXObgKjuf=6@rq=D%VFuTSabJ;wDlZ>)R1%=Y>Y z690#y|F-}96!*8tc=z#KhVNOZ8sEVFgFSzr*UUpIj-)C`aeQ?O|KUmEKW>!YgzsBz z{*N5ocXXycUoCI{58?Ysn}6&1UEf{Be}$Zq&xUiYxy@c9&$IG=ka^23ys5-{Uup?- zaf$D)3fS^bEj`}tyQpCuY-!gtE~{-aY%j~}grY?^I*9LjaZM~ytxcNxF^ zGvT~5B;MAf<6$M2_^?$Yhx`YoIs116TQI{sV6lDt;j<*ZV1~PolRV<{&Mm!vx6cwA zS#3_jfA0AbAJOA6`^zo4{?u!DEUyWUh`V7KEn*JkhmOF&woK&j_Y;~ z(GP4Iwm*Kk^#1!;b^BU-Z)*=*dp~Qp&wp%H>G1=t`sNn49msjj>DN}2d^o^7U~$-X z%q#w|@qMS;swW@jTK|nOf1%e)_kXAvtYWR3LN4(+Z#&}?Z#l=)+^XNq+Q(Y^an^pS zwcEGIYG-|WnR|EF6EN9~C*(oTG=X!tm1yLx^7rpju zE|$CpE+zk{RrKFhjv2VmYFqsSw9qWcd*W)**fq>YIrjZu(}94_f8<)pcW5^Afc}@G z^38y{{;SvA;VUHX;mbwiX!-X3U+Y;5CEu0MDrikKh}K6NqD|43=zeHNvO*EWUG5PP0W0ghCI4{1;s&JI5R72uJwM65nSNwnF{xa~CRqbqR zkL)J-jReVeT~U9n{8!5>1OMF*yfT!T^0`(s!>m2Q`VH5Yb(}ym)60LYEU{8>qP0gG zNPfeOxL!0y|4UIuGVtH~2pLIZ+KnXoR7yU7Nen;-iiQpqZ8H)*8a)o3Eb7%^n~SM` z8G1E3&tH5vU+U$cQFJM~0(}oP{d~*uY7a|0?a@AH1f7L0L0>}Gp}|KazB?L0XQBCM z0u4SY^~2~y^kQ@ox(rRA)gF_$wrC%83_26N34IuS75x(3g4TOn+G~RjL61XcqBo(B zpwFXg&|lCRPe^-B(F4%I=omB?orNwyA4H!*-$Fk_zeoQ-D?cgy?SW>adY)&rmPa`p zKMS4+-w0m_&xLP-KZNt)kKncN$8cbo`1k{E32%mb!hga?!3Vbye^cN?;LG7-;oIS{ z@RRUjxB$Kb{tmtq-VWadH+o9^-VJBN_rQn3_rk}+%i)=D9G(rYfbW4{fS-e3gjd5W z;qT$fZ6zNSo)&*q;3jZYxEs6=JQQvTPlES_FNG(;3*jr^N8mT$RqzJ*WB8{1#NSWw zJh<{R;`e5FFZfZoEBqLI82mVV0{ka@F1!W40dCk%`d;0NJp@JsNSZ~~qUZ-(>W;0xmK2Dlyk zKHLvp10M^20MCGbfvMZlS2<`zdgGa&dz_-C)!?(j*;6?E6FN)u1;I{CyaBuiI zcr+a7B7UaA&EPBGli=IoOW;T0SK(FgYw(xw>+p8?JGk*m@w*P*A6^gVz#aA%f2Y75 z;Y;97@NIB5ybL}J{s2B4-UuH7*LX?%90|99^Wa0_|G^RXclaE56Fd*zy{q_t6s`{! zz{kKp!eihHFN>eE;fC-`xIO$F+y{Oh9s_?2p9y~gUkmSjfcU!`ZUH|F_lDnt!|(?9 zayaW1@p}c_489ZY3Eu^ehS$L};40n3&$aLo@Dlh)colpK{2lx-99SiO9)X*}Z^J#{ z0{CdSzV%&BwM~b+z_Z|U;DzwH@FVbfZ~=TiybitquJWq*yBXdKo)33{Z-H~*Tj5FY z0{9B}Q+Of#8T>H(IlKzq3V#Z3gMWelf~&tKe#3m(wi!GQ&W7)X`@;9Y$HFhd)8Uoy zb#V2AB>(roHQ*I+Yxonm4g3du8eH#n@jDgHhOdE-gs+9C!0*6U!|%d(!SBIwcq9A~ zTnPUL{|pD;5I+Z~FV9%pesDK<5PTp!3GNPG36FqpheyK8;G^KR@F@5X_!hYKo8sqI zcyD+C+!bC39}3?FkAZK8PlFf1Q8)(Q2rq{3f$xByf}e!ngqOhy_$l~T_-VMxTQZ(! z;KuN?aC`VUxHtSfJRDvQPk`g_O!zPOTKI2x5xgCK1P=6+`F;t`g4e=L;P2tR;J@Lf zaNW0Me9hpNaC7)Tcsx7=J^_xv7s6BF{rE!oRd73a0o)#b5bgjkhgYf(qpj^7_$7EF z{4%^-f%ty~ZU?V|2g9$z6XDn3%i-7IJK;Cr74Vzz=kQzbUvQiL;mY1!Y{*@!5_ev!#}`Rz<;o9%Xcy57Pz_-E&!JopT;m_bG{Ol1j z{(IpSa2#F*e*@olq}2Z%UJBPQnJ!S}<> z;T3QQ{s7(^{t<2gSA1Xmo)0&MFMvD27s3PJi{NA7D0~KdF?=O_349xTDf}pW8T=}I zIs7?%1^hewK3sE+_+JCJhChJ&!Mo?kd>jw=fX{<_!gJwI;0NJR!zBI{_-Obucr^Sw z{3BfJ1M#;JZU+AhXT!h3ec|8Xk?On57NHT)O65Z(^|56&7cHieD?@xzYly5d@Ot~JOf?=&xY@V?}L}ZFT(f3pTZBof4~pI zbw3n;|AX7X55WWAFW}?hFX0*RSMW9P*YINa8~921Tlh`*JNPSj9sDP}9hTxWo8Ba$62}gg<~g!5iUh zxaybUuP59b?gbwN9}EwJm%yjOvrmxzFNQmvD10-V4L<~ThF8H|;4k6*;jQpVCrNv| ze9!1~vDAAuWAl=feR8^H;9KL+j(=fXqbE8!gYHh38PC_Ef~6&?Y94v&O?hmV45ej|QI!F$6; z!`|_+)qtd;xqcJQp4d-wz)LzW|SeKZK8m3*iV{^;_{f9&QGo03QHPh7X5N zflq`_h0lejz;oc!;HB_X_yzcM_#-$M{sle*uJN7tod&mn&xCux)8XOp4ER*|Ecg=m zZ1`4qCj2OT4*WWNF8n2Y9=ruUAKrbP_`Lw$555rY4_^cy3rFGU@Wt?T@Fnm)@TKqy z_%iq-_;R=qz5=eeUi@7N?+MR>JHuDOgW;>;@$fb9IqkzM1lS41NxtPx-qBuZM4;{BMIBd@ufQ zrMx}70PY7bgvY|S!8737;o0ya_&zuWKMya4--GXfzlHCF|Ay~^8~-4F?}od;_rOQM z_rfQ`OW-JcAAAeE6n+%GAASpd0A3G22xt8$e*OpV1wRaThaZ7Q!;ivIxZz~EUo3(f z!H>g@;n(3k;VdCHx}1 zFZ>bQ3jP^x4OiPJe%rv!;kIx$ct7|ExE*{F+!;O(?gGz&_lNI;yTU8r1K2?@WJq{@FDQSaBp}O9ELxK`@oyvzVL28i{Jim zOLzd>6CMa31s@7efd|2t!-L`5;UVyo@L}+~@Zs?H@DXsT}d^d%Fz!2g4vgI|K5hu6T%;dSsU@K$&g zT;~t*|0=vM+;xid-yI$_Rd_i3EPM+592|w8hv&h|;RoP2`~tiJUJJhf{{+7XSK2Io zSHgS3FTvUH%kV(>H+U@kJ3Is41YZyT0pAO6hU4&`@Q3gg_!oF9T_!TZ7y_$GKJ{NkC?-fVa!d=Fe{x|BZ$?+34j+ri(%li&)0%E@=O zZh@P?x55X&Z@@$0%`>FGiSVUo310$V1}}h{oGs;#!F$04@I~+sa1^eVCH`i?E#c}j zrM+Ho4R|D66P^Osf-i%+o+I%K;Tzyb;GXA7`5SOA_zU=8_)oY$T)Tq!t$3cq?*mtY zd%~6B5pWgwRJba9DV%kIw6_4R06z*>gx`cK!{5MF;J@LjaKnn?w;J35t_}}`YrtdS zn(%bE7JL=F8+<2R8-5P11AhPq;f-)zxJD)MR}XFh?+zaf*M~>J4dBz^J>XezL-;nh z5&Q_;7=9hz6aE@*0&j))g6mZlzfIwGa5K0++#Eg@-Wxs(ZUNr_?*lJ|Tf#5G`@$c< zt>7Qw)^OD-;;#+d9BvCA1n&nAh1FFMJ;SEPOuv4txQ;0lpBfSVR0>1n&t);m+{I@DTVC_(b?}_+0o3_(u3j z_yKqp{1SW>{2_cbyb-Vz>}~6%Otu z{$7Jy!LP%;;5Xpm@SE@?_$~NC_-%MDTmUbH-+|-syYL$LJ@`j>HC(B-_{tVs#e-3BW5x)tz5&Q+*3H}lu2!911 z2Y(GuhrfZZfxm_CfWL#Eg4e+X@Ot<=cmw=5{5{+tDE@zd+rvM?{otSAG4MwC47d=U z1^)~$f`5UZfPaPGgnxs-hJS~*!kgfFb;a)=a9emY9ESgdkA}CvQ{k=fsO9t6J)4~D;mhroZqhr#t5 zi2uXkcJL8!U-(G)71# zz8ziwKM5~{3*g(}_3-U*g~sA<5!?ih!Cm3S@DcDG@X7F<@I~-l@O=1g_+j`S_%--m z_$zn`ybZn&Zm_5LT?%)E?}rbCAAlq9gYY@<|KK_BL-74@KD-is82%J~1l|Nc3fE~O z{vLzdz>mXy;3wcQ@RRVF@G|&X_$l~q_-Xig_!;;E_*u9Reh#j_m-u@gZUHZcd%|&e zB)kGX4SoT>0)7!*1h0gb!7st@z%Roa;8);^O~v0TcrW->_yG7d_(=G5cq04;9EE>} zZ-F<#55s@Jufm(*FW^7nKjAHK-DcubQB2{(eb!j0kjdyC&a;SO*U zcp$tNd_3F~o(VUDZ-AS_OW_dwBD^>J3ETqy9o`47-9r4egj>V=!eO`-d<@(go(8vp zuYudbcftF?&%y2BHE?@)BisS5wvYJh2=5Jdf_uQ(@Cf)AcnUlQz63rNo)3?O{|6rj zuY||JAHm1Ng>VF}(o+16hxda2kG(g6kFvV@$DaTS;)ZLnw)O!D1kE}L5E6zYWPwOF zlOY5Z!(?WX49w=tWPxgpwk}nysJJhsF16MTm%6Y?-L-Y8OZDd(t#zqO(bm>#YyRJJ z?zzuAGh{;aeczAo|MzoX@||<;`rP&0bI-j`htLk8Jwn$C?G<{3&_1F2gzgmjXF_)g zeVx$VLT?e;FZ8oQuN3+(La!1!BU9x!AoOIRgF@#C9TK`m=&;bsg^mav7y1OD&lWl= z^wmPgguYkkxX@1v-6QlnLiY;&rO|H3_s2rd6#6GZmkWKG&`X6rUFeX| zX9#_o&}RyLh0s40`VOJb68dqW&ldU(q1Ouinb7A5y>FJv@6UvuF7&xVJB3~+v`gso zgkB}|`9hy6^aVm+D)f4xHwwK~=tqR!CiJU9-zW6ngx)Un9y3*be=GD4guY+sSwcS` z^kShO6xuEHLqhin{jkvI2>poA*9!fp(3^#ROz3BXeq8AHg#Mk-#t|yNzZd#DLO&sN zuFy{kT`lxeLLVpe(?Z9D{)5nG3H^-FzYzLaq3;p;Iia5t`gx(>7W$7u|3~N-gg)>{ zmH!uoK2qraBlH5HUlMwm&@T%e5&9LO&k*`mp|2A9HKBha^y@rkl+sm&k(#w@H)Xe1n(F8gW$V@d(2kpd`~c2aIRpT;IV=y z2%ac-w%|pAHwxY-_y@t)1pg|y#~hXJ;evUBRf0zgb_=c%yio8q!3PAN7kpRn3&A~$ zRXT?XW(igZHVO6%{#bCG;5CA`2;L|7yx=>6{}h}sSEZLDST0yEc%0x$!Ct{r1=kDy zO7Ky^K|!NL#eaZcmSBV6a>0n;#e&xh-YxjJ;LCy^3XUmN@lO`45OfKy5IjNfM}p@I zUL&|s@M*z!1V0npZJtW!Ai*hua|9O)whFohgMz0BUM6^x;6sAX3w|J&;Z*7EBY22l zmSB@$zu={UHwoS&I4HP7@H_KWyxD>!f=z-E!2!Ybg4YY)E%=Dw>w^CfoLHvfKTOae z*d!PcTqn3u@G-$Z3cf2ipx4e&kB{V?+8v6%n_U;SS5J0;Bvv0f_;K#3SKPuE5W-2e=GQm;Ol~a6a2T} z9t%{y_7}_)oFlkUuvyS8xKc1Cc#_~c!OI0V3T_vCOz;`OHw8Zt99yaKv$x=(f-?n+ z1m_9X3c3WB3w8^x7Ccq(Ji+S(e#UPDtNcxLxRr=z9#q=!A}JzRIB_QB6zr9k>Gs6dciiqm4d4UPZeA% z_zS^}f|~^&6MRQ-^1?LMk2_7#P6Fgn;Ji*HZuNS;kaGT&G zf-egGNpOeY7lQjNRQWOm9fAu5mk6#D>=!&+@EXB;1fLXqTkvzi35!%Zdb~)*gT*~l zut;#B;4y+-f-%991uqi3M(|d_hXns5_z%H7YE^y?63h}T5o{223&sRb7raDJKgVXF zpAZ}r{F~tTqeg!ILsQ)Ig}&_!mBPXl_hVD&a0-1|O8ARY+<%oqZ%v_}6?&tj|3L~p zcCmUM?f%^q+L1!nrqC-==>8P?{1p1e6#CH=`t20@ixhg_y5#)MNTJJ9=wnmpSPH!^ zg}zm2-5wqkTG!tTDeiwwp~u%Jw~y}&t;=_IihF&EdsmA44^!MPNTF{`p&v*I|5A$k zKT_N$G$iNuP@(nn>T=Nd^aIL&D((<|Dw+=}{~F7MPQ?|%*QnD=#R2iBaZtzikV>aq zaJ!}-7QWzyG-y1c{8^Zqu+S^SUph1&mFE>4Ou-e8DR+(AAD46`{&7zzTB9kn#uY+q z)cjqcew=j@UgL&mRC*dWzMyE0bnT{;B8{pDEPwj}|u!we$In z4Q~nlSboa-USIFg3h! z&@RG%p~|CNFg1TGbbj0_oBdu%$ne&0<8zi{BD%y$mibmW8ProfuaP2t#)n;LH_*wpda ztWCeYx^&Y+dGj|l?pwL(oa3rCJ#}2|ru73yZE9+--}Hx%7jHV{yt+--oLaZ(o#Pj8 z^6ar_(-+?AO)Fk6+jL{5bJI!7W^KxC&E0g5bNZ%xUq5t{^Y#5UE&J2%oAx^8<9i>w z?JhVR__TJI_M%;@fz<2?1x#m~%bo%`2oE}PqM=(BUb z`={MXww-%;$)~4OmMr?UyX5r?PAOT?b3w_9SFSA?KliSZ7gs)B^5^foTC(m(J4)Ug zKc;luFZU`v`^AGxKkArLT5YDoP*!VsYuG=eCv}b)LKQ|9r8k^e>U# z()FtcO22deX{9fmbXMuV7oS`D@U-=%OYXU(^u9?~mR>RT7p0rc>q@VT{i^h;cWx}L zn{#XFITznndfXrGDD8UmH>Gpx?k-(C_ny+dzr3e(E&-dS(5qo&q{9i)8vxb>)x4j#Qc3X6>qqBQy}`mCfA))H~(kh(VO@E z-YJ{&wqCZm*!7#uFHiWx=5?QZxcS%PcHi>z4F_#mb8qGr(>;63CD$z6vQKo`ye}VG zHSg&we>Cr>`~P&_yZ&&?n@4Eety~^&dCq{!1?j`>CTF}Z0EEM4(FF27CR>v zmpQlosM>k+ro~SG$45ISAJ*oq%Rk=v)*P?XHFc%)uK$Fcr`^`$j8y;7+2tN^{&eh* zooB8;&H3fNXF6Z%Im`Lxook)%zy33)`N2Bp#V?%iyz#2_&gbS|dBWo=YMdi z^OaLBalZNVMa~aiSnquQ((|3ZgVs40%si2$P-gNJ;=Uw~V z)8~!7yL{f&d2f~G{4}HVjYZ9yzaQFb%X24oZ8_`BtGDEz_3V~KZ;aVG;j!;+{oATJ zTc^C*y!GRQ!dpMs?ewh=4zAz2+YheY`rtixZ0*18fvpGc@!Zxw-}~0qUq1Zl*7X;T z-PRr5Yuh_(4%)WcEr)H}J|Sz{wzCShMT<(eT|KsX+bjQS*mn88%eK9GlxN#%*95oy z_51zX4m$RfZQFix`nD^+zjoXD^UvFM^#K=eE8cL$wyHT-Z+q*H*KfOV;O1=yIPTc? z{CoGzKl4}H=0COS!TH}Se0=^D|9NWu?Z10|{xO%mJb#A&jrsc*zcasTw-4tpdis<3 z4`1}z{QKIzoIiQbF=Y$?Jg)4)E#u4XI(K5((aZNP`#5t_*_ZF^UlzXhpt42FCYR-n zKeVjvrtg>CQfrpI{_51S_1&3eN4__s%xpiR?2^Z`%l0}Vuk0Tu6_kDWP+?iAF}v&+ zImKls)t8h#a{RoqA@}^ULt4wrZYx<(_SU{tWsf~qU3T4>3(HQ)t}T0X+fijVm(`U$ zc}soSX?r%7#af%n>VI~0*&DYvm*qXwQa1MiSJ_FoEGawswAQkR7A-B?{LiIjRp+;r zT{?ML*_^YNmF@HHva)OQk12cGdra9KKR%}Hik}@*mOAEsOMhDe-CtejO7~@yM-3Vr8G$^P!M(G%eJaiM8EnuPDOHu^x&uLzCqZcN7azx(sD zJja`o&U=FSNXW#O`Z#_5Dttv5#@}r;J;#59*3Yr~%j&tu!i}EeKpRcZ@dKgB|M&2n zW}{8eN80FVpl8`=ohPuZ&)fe?pF`&x!?9JCR;Gvfu_NU<%H+9C_@z22mN1KKgP5JVoJ-0fmESDvSti3Q|6jK7Us2r}d)u zSx+_a^lOZf4;300Dt=O!uRsjecdPNaLE(mT6`C4_KX|y}5B}WG{s%LK7Jq{|60TAB z*NDHLD>_}4^1ZJs{hQ#%PNDq@H>^}RX_a6=FsQIeaJ%5fu;OowC>%UN{P!r_utuTI z&rKI9`f9<81=k9mBp4EG7iMpXUa@+R%W1Gr;r5dh zYJcVr6+Nj(;lRns?&T*cdV8YsG#Ng$}pJ?ka!Z5hUjUd}%yR zdSdwJCI5rkzvTBVp-tqs4ZQb+=HV5*4|Vw64PztX|3tgf1P<5l{H32h*L@-t1l@1@c^ zQoHYq@`SAA(DWg2NBVO$eHcc({Sk-IR6dWwOO?`_=Bc{c3mJezm)9zk1x&?RWcfmEOscza5`(cQk$~^ylxtz&X80=U;VK z<8q--9(s=5f2qTZ`%OZB`spj|e!I{^Z#~HLy+SjAKlf?(_n%y4u z{+iI&9dQKHZwdX{J!dfek>^+Lb$imJb*LVqUhy+iv~&E4n{ z`lahkj{gLq2L=Y1?iJclq;aCqHxH@uKU3%(Ln?pg2|eV$lfz#s^b^M&$MiKqFE&nP z`q$dOgx@Iij<;2X-X-+gZ-37I@6-Nwe9H6_LZA3=CXE-g`{$~Ey(RR`FTTwlJ`#F| zJm0^B9+dVxcABcM&p&^L{ZAHp-AC(~K3wQ$pH=mpBlOT+zh(D1n%N%cI(3*C3-rR*LQdgFtyF@2)YLqmg1pDDCdw{ecpjwc-KezDM>?@-Tsr4BCv zt`mBIeM24)y7LK@zpX+WhAO{Dh2FG8J@4~EUl4hbV|Y{Od3T(^^v6Q~u=^vXGcu+9 ze|{O$2ME3B52}A2F7zV@oyP8kLLYKSgz0jjKOIu#b(GLUZ@t0pE{pyR)5|se+RaS+ zg*K!ChlKvmr>cBKOPZxUVIwp;CG+nLei-mqE@<(P|CG&RL`3+UDd~cl*a_2)#zaudkMYeTs0mZEOdommA5JM+0_Sd{MkZ(KAgPkLZP3zQ;j#5YX8z8t`hpi`&4`XrO-p3g`A(8 zg)Sd_n(4cR{^(ToeA|Tn^tC(K{XrdG#+%2r`=@F=d){(q@5U=aUnc!~!q%I(AuOAr z>ak03+pq880pnDm&rI-NrYl4--0HaP!7{Io$<9*J%Frcil+wGz-1d;@`;rBSH@dPPq3jF1YK2zDw}#+cs~b zcpee@MeYCgUtdrBjF~Eb`w33icq^wnMQDfM#%;gaME)y}Q`o+OSdQt0j!Ix6&m;{QaU zO`%U0I!owvDgG}O`g`JjRZ95lQrtJDxNjCZU&7xnbh*%v2|Z5er&4HPTd-T6dj1tD z>txbzV|kIH2eN{V`iEJd;vbulG07~RQarU-1i%N#eUKezO1LgpajSxhZMV6Sx!nai)4C{@Z2e zk54!R6Z|puc%s5jEuSA+{N()nMDtUg>m1=DMXEOIvpx;~N*xa#tg1M>I3Uk|NXL6L z!Jn3mc+~6wsVKo;VU9&S9E)MRp!wXcGK;GvpRXkGtBW&*|Az3KPAJOrn-A?Pz?4K^>_H2T`pPm1@ z#W#}tzn|bI`TwWpV|=j3GqzB-DQ^pp3BGCPuh9IAjQysS zXO>SdSN>Ne_>=7X-UNTYX^S!!O<$z^pPJxLvh#mt@ll>O|Cc5BN&bJS`3C&k@^f2) zpOl|134T)ik0$s@@js{e8Oia#p5Q0N{}*83;gKg?977Sl+h%Hf|0e!=u|dIH5C zO7QdT{P9Irdn=f}h)PKLpOoO|+xdqi_yyDZspTsFQxp7rJ72ku{_l|z55~{)RQb;+ zr_gf}{B?GIrNuXr{5K}}N&b)3d>luz$J3SIC;5+QKIMno&kQc1fdqe@oqvwSNBlPb zmnHZ~{;$`3%8$+eoe6%D|KDmp<%h?m8C(NTCiv^@{Fg00;eTAReJ`WN;i4#S~#gDu5II2a%_Q}v`y-0qX5%MzO$=kX@JY{O z-@oY8{ETFNSjR*9+qTTM>1`_hA13&d?EEtl{QahNXLe8TR{k$Y@F&^%KezbMm)hdL zF~LuY|Lz1oDgFl%{G|Aw(tOhQ+TwpX!B2|+odiEA{=X&oN%0RQ_yyD3C#@xp&G zgK71^-x~ z+=sKTX+k;4u>G}5>}84Hzx2SfC*HSP`Kv-t&Z%;JF=dbPL7{*3_lqy@`_sSl@L{Fr ztxKOj>Vw)Y$_nrmf4rO$|G>P_ou3_TGH*%zBl{nGK)DZAYJWQ1Uxo=k08cWkY41Cs z4*yY_@M9;99EA@5X`1kRjxzke(u6;Bl;OWjAHHIzhqf_v{>Rs=_G5E020$D;%Jlb2 zAAX8G&eY#J{e#kke|ePYADSjS(i^eq>-5bu;a}cwboD7qY~j<5ukcciZ`zMeKi&9R zo;IX%(BadKukdA#6on3-ZhRdWDKOl0`2VT#b>!ZeNI%{9YV4u`>HMb~Uq`OJMEdE* zS30{o(nqJCZhTF)^4&Qm9X{Rox{Ktk`b#&ynmZ?%#L?;hSI1XZn(-rJl;iXAG~q`p zUv;JlKU(=JoF@E;lM6~xmtQnZ_|eXfy=lVF7-jjLlqP)MD8rwgCVbf_!zVSWuR+i~ z0QAv82kw5mQ~xHMl=ndry&`se7x4!|3R8!PS#W#ui=m<4K>?M%4u5^mkgT-K&p*1q zJ#yU#9|~QL@DJQKG_)PG4lkzka8Z*&syjQ#pUJ>gcpg&U>F{=U;@SC4C%=>QeB1lf zbLlXSt6$H#^hiy?-hR3HOy_fn@=CZ2|7(Fi9*akP?x5M}55#>@GZc=So#CF4*QoM& z!rl~4u%|zXQyoh6Qyub};ZBOpM=90@gFdg{9ru~Oet+ETbH~i6?}Q#-EbjA`n(=O* z>2U`FKCju?6Y|9U;gA{Y4)+ASoR1D4JjdehC_EcAsrlmvstxtJ1AedRb;sQ*-)3L8 zFJwldVUI5s^M|@je<;!uH|kSz-WcK35|69OrvZ<@+7~zd!AQUt^o5WzA~0)ef)QU= zwi$89J>9;T+2;#*!a<+W6b;A2o^ZfcY%Qud6A>>7#UehBztfMXe9>r_5B}xm=HY)Z z?ClBoVtL*EuI{cLe_kx=$@91)?VX*JTsvhVw>uIsswtQmj`%|KKwP$c?kEu@W@gOH z%8Zp{dS_0=BUD<2*Xc)1Q0;h->!>^EL+!?lbx)l?G=Oh8zWMl?_!{_r^5pqL+ku_# zK+I=wk+nzso_J5xXM{aQX3Q2dDlF`wDpf6q3oa#HpR|ikWLxC{b(HC)+}a|d2NLHQ znXwt{ir9Ys>iI)AymbDM#Ek)mGWFOm3`wieV7-BMk(kgyqix<3Zt3JF09E@T9MmblLrWd9XS zMFm7xHr8p(C;1oQ9fSzyAiZ~e)54)78)^bw+K#l51nIrLr7i)xlFsRGv2v@SXnSh;LTs~)2XYl|HDgv*vJb1)V; z6t)&HE?L&PjQvTtWySgIe^J%4%I{P7*1`fo2i+3U+EiE|m~VovXlX5&qR=so+$)<4 zrUH?lf+K)!{q9gMFc=N^2&qiyc7Xbp)=I))tk*+W*<4Xi=t1u#T)IfneckRLozwF4 z`n^TKswI_+X9Me7j#)(e6vx!nE?C;w(9+V-xb$$)MQ!!12Lo&BS_{4djP;&SFc%n) zc|0Y+C3UXadBE1%wmK*9Xw(~HL2kZa!6NX{9tvxLb&ZvcKLBF%4j)DQhSq|`z>12N z$~s`P%TZ7dtZ8Z~XaKtE9r;U%M!D<-tUs!*Wg&2BYh?jreQQM%=*pJLs%GFZ^$S{C zfs5-~D~|=XHqFXEj&Zie0-+tt6~AT~u>L4VkBmzMo=nICUt0x+v zusi@V9dpy{YDQ@ep+b%M;uDRyAH~<UrF7se5hRq^(Yp3Y8R6b&cli*k3&jG3Koh^bx^{eUGXlv-s;UVY25mO@8fFt$3D zhY>KZ8~r*DRT<4wVp)zOH$S%^FW~P$?Qk#3>xugVv0R8r)QAkz#5XhF(QlYWrUy4! zWyb1#aW{#mB@>N+JJi+V?(%_anwdETvtuQuF=67Kd+iO5G11O7q)i=;K0guBuJWzs zhjwP7f=$!g!_7bB%*@X%>|{Ak9?ZLP(` zgn(hqS7O#JY^pPRF)YyRfIeCJ!dkSZJ|B z3CGZI&}ri+1|MX2tbJ%)jCsOQ)ucE&uWl=pUMfer8E2%$S_-Lb@FQV1?7@TeU@aJ; zaT7V22Xdkj#01bDUmfuo?jEl{oQKDZsPe2)(-*R1Wi1@S{K=UMg!@zmsnDoBVuDcK zcp464U5MJ6LK#ZLBe}L00got&Cym8(=F8%>UFCkB)67@-se(KZLHVFqqCF8RDXF$B zDP&C7v_jMCRpDZd=Ie)xsw70^*X!AMERW`PG;36|l{QyRa*Q zuOmCS(qR`m5KpH+8jH7+NPr@uGUW-9ng_eEumBf~p0ozXg1pDac}NOJlNAP3c@i!e zigBkvoNqjc)0uCcc%td|9h+0IJeNic3?0D;D%1L{N((ZyJg4OllNN;5hL%UI4w4m8 zW3tjz#oJ%1+9;W zpu68NIDM-yvu5h4P3kJ>_j&`UVb$K|A!|AFLmkK}YONi^X4LPC8N^KHV6EWut!h`# z)#Zc8;`iv7p~=CJqN@!uoG-}osz^7~aP)i?Gu@q}TcV~0ZB7?PGb^h!S-@||=9w!( zN)}ol2;1S9pQr2&ABJ(Csps8xl11B98^E)4hVk6Uks2Gh8dP7LXjB9+xWfag7pg79 z-NfUak_ptfs>+lH46|c(+((KkHz$P`Ib7Tf`R{kkQmJX+oeSX{eNB zyclHtC{ncqdLA>VDI@)ca45&-M4}L?N=5||@uh*IaJb)*2YN2uB&pPr9HhL+A7&$} z1b+z9Jgq4H8=^JP$lBd#)T`I{+I5GbJV+U_2!-rnr1eC@F^G5}F9dz)4oKSLVJAsM zR)W_=BZ}D{Vgg2KNEW2?;y-a}i_rRUE77YHNdNRKx}4il+=w@Z#u*N_W57@aP_3$g zQna#3KFkh(oN6XpHCn41yFDHn9@OB6{HEx!)JTxfpCwP5ybvHMXJX|r)lIEk&1`72 z-1cWk3F@59;0b1i)h=d0#YgQN&yw8kRreWHvnM4Io}>G;3x*y$TO~W!tvp(q=6|FV(uJ(q;n%cT*syFmbjMu?Pp%IU}`62K}546^rE!Go> zgwgceUN4V1Bo%rKS-+fZ#xMv+(6(r`8i#^g`l}jM(HrDBcy$jyVOj)}@|jv7rabzI zNf%->Mm@|f_|1Ax65a8?N+v3-2e5j8#H|11(k}?f+$qS_3(jofNULU^xvC>ChG=Seyj- zC>Ha*)VE05#+cpd_QcV);lh2426bA&Bare>?IIoyL#V}|&%K$Pvk?!JC|r)#`okTM z`+^a4d8$|H>0F3b7^HzEg>*lbYBQIaIc6rrZO;3mlFa&&OekG!Tvw*%=3DZH)R@-D zN2&MHEdJt_3x>|xtiJcyerw)n@mC0Yq=bJI==KyEkYWr>C55bjHUeRH%m|{B(r`!m zps;R>g!u)I!lGHT=M>L%cX+VkNzfGwDyyn%?0)5UM%S82Gw*uNoLYFu!=A&ZWbAjz zlZA&&o-($i#<$Wp?dJFPcO3ZL=|wkRTXE{)8BIricbb1uetGVG`%idy?YN4px}qJ2 zWgPIy;Jg*4nMF4=L!ml0V?9Nk(fwrMqNj&RFol)T6`GXw%jZl-;a(?9KC@%eA%~n^ zytXQT%9z%Mko%1JvHDB)8oT=yd&b`0{+r33z2^=dJLb8E5BcuuwT_}`I}SeOfPW4R zj4?7k#s#VyD18&xPB#ru5*ghe73@!X>s@^G^B+<8{YN@}F`?YmS^Bew7L1vMUiQ;> zPkU?1;&ngX{lY)&UURYe=nIt-_PhVEy7TtUC_ngv@oUG8gSsC#IME;PPjoVP?xb{e z{3+!-ruAOuNk3}*Q`vqWUp3*LwXVwT{bOdl896L}(xd|^!g2KH@ku&XdwEWalNuEt zvz-1W^pZr8{_*t+`UMSjIfJF2+)?(!18-UQ#+sj$DZNg)((Cj-qWnRhiNN$ZnZx1F zg@2s>?w+~(%~#>piykOT`CoKy`OM?az5mm!9c7*TdAsbgOX+j3r7sF#K!>W4rhg?Y zwUYp|D=o^`)uXt3{b3{nP0AEZK7CPt+}BPLJN7{0SOZ~h_mH@N)h5JJ8bC4BlP4%I zWd2X`M*@i@%F&oB0U-}2<`Z2~|1$`gu*>H#V!kfYP8d)=sUM0T@ndP5^r0ybxl_wh znehxN7GAg*UMMU)af8QCXiHh8g>h6Zxw&R&@FanPMrmfq5{7Dx-IO+gojO&dm^J<0 zenU;37ctk5QBNWEYW56Gx412>o;S+EK6DXe5}oQxn^uuiSK+FM=)M|*JUynWAWBzijATM8gOG;=^SIhf zVEIT%evmd2l}e4=;SQ~)@Q`1ypUv%_YL*rpDrxdWB>Z730l7_)F)1)UYQkG>c0)B1 zWWP2+-E`BUN=f&uU1EupMOL+W?uo9B#Gy!AP4YbbCOry~+*qLEr}crT`bq1pCTeSq zhestfM;7gvs0nzc5sl+PxfOE$h6`_%1mp#GAcvxp1((t3^>y@6vqvGCGMRgz3IY>} zb%wFGMOkY1`k?Tq1VH$MJwe(Tpz?#z!jd2TWe8dhJoANv&S)lx2q#RIDqEDgR1EhQ;r4No_e+18pXIYL@k z&>|HIc6bu6Y8W6@A)ZMMe<}Vt+hK=*vLT(GD6ygG!NS_J%7E_E-?`fKVV}TD8)KEtl`#V{ zt!gBcHI*BZbCV@E(v2dEULO+YC6kfpYqoGu=&FsnLo(AF!tw@@`8p`{1$yb>2R_5RKp## z&t%;r8)iIkib4rZoECTnEzzJ0!rILpXy?|?ER;F3REIz@MQI{MR@=j9gq_eBtA-#B z80SM>&^%cWX=-oSu%N9sQ9xSzC^8yb+j7V>RdH=zBPva;Th$_-yQ`X$Da9o`ZHBOK z8IG=^!Gz6;l#(4%jouN|9^@(fYq-(pnoZcGK*dnySlR*c%Y~3NQ|41yA)^8LP!A#O zMPXM~Z8oqHbK{p646Xi#zBeG;i$`!9ZJz&yvdls}5#Z0hq3>0A&J`o1-86#R zX!E=u;-GeOCer%lH}t*h-xmz^kC1lv2yUaz^Gw9ihHp8(ncvX23F)pFA??TrZllff z0ODAOFXXKlCRs@RSuKt2&DBd0ZM1n_i#V>p_wVRO)!)$fEu{P02x&h!g4<~Gd@bU* z6W_`(jD6G+0#YB8+-kRnH%h2oXQR%?p*+5c@Ar`Qi6f*P7{P6{`K?17$Kl(Dv~CA} z6W<`x_KcAJvJu=yo8LynQH`&eZ5%=MI^3r^$#Pv81BwoS$GA#m@j=_y=7Pq0wPBVG zX`Qy0XzKurl_;zOYq54=kv-vSB8(E1l@~8;Ah07wl^#V$OM70cqXo*&4ejN+DjOT< z56qQd`2#B@S6f>f{ZYBsQDQrSH-Akrg2!?Y7WA-0p;j!>AqC3-AZ<7b1I45EsPbp6 zGj~eH>x+4!epav`NJUd^rBS1d)JVrehWBRXnjW=^!7gE{lju7qrj*0N>c$1CFtDtm zlM-=dUgV>Ek)wekB)txlbF{{!)g*peOkT*^91w)o?qs)wg*4Pzw0Ku0j$CPhFp7o? zRPW=Y`jS<+j*}u%{=J304zh`&?Iu=0&^B0`3IDw7qwPj$uV{5@{i+ISkxe=pd0-ob z=yWr{!|MDfmLE!CcP!RJJIPSTV9Spi5pu!-v3Ul21?W*JMj!l&eG;r0VNHSf(VUi5 zH`5=(RaN1lKSoYwt|P{O3|DPE9BS)f4G3Nd{V`DdK11yu;^A2-te$-MzpN+D>+&ZZ z0|VEF1`fZB!^%%K=G-uswQFA4A!)fo9y|tibbWce5ecKYDCwtg1c?v+ zRG1yGuKs%mU@RW(=QTj#2BEp*j3)w${`@oj8$H8nT7 zS{e}#+1xj}TrDjwdlasUx&^KUP4yV@>Dz#BldGz3nX9^?(pBB&a@Eu!Kdu6N9rzZy z7FREG)m1dO>X2@Ib(O2JqR!P=)8J}En8qgLdufBKsk#7P2fl^)7P*=lTU<>`7Py)# z7rUBU8t_G)kl&V;YRU`coBmYdPjv&dpFS=+)~*?pdBYv(=n3Y~HU-g5hAK~s;Zg&J z(0C#hfTpo}9T$|CwDa!;EUf) zh48-^2ZJh&%0+zk!(M0h-@G3NMlH2`HrpgkA|D(h{Td%%&{{LL4v?vzg^RBejye&K z{)>I9RkWnDWpgo_yVbl++g8+}#7u_-86s&SpaBKxsa^Z7ZvVNRTre&M3pqZZfIt)A{j*U=}xO-t3shr!v%9>d=(ddrHu`j_N{%PqKSs%^MMz$C<3Da=M_GDDF zu~>k1NV-C>35R-`H=0ONK#njr(U_wm{crfov)0N;m$4E#4e$>f6QDUL62cY^VI+v( z_;&Gkbx*Gm>A+7nHl1+rEXN-tqp>cB{!zp~Iy-xn(`qB??lWjI!f_zkZ<()IwD3ta@P;b7@yJK=S?jl_v|7AUs$cE5tnvmFsx(ejtm=>W42j=AMzo~ zZhY_%W(67dRa8`(Sry)18oRw_1&^+kY+}cA4vsRi-_}a#%$0QsWIbQEm$|Si_bsY2 z;)+zx6tnt;XUL9rb+BQIBjHHL_;MhVv8hVXp$u0FQrvZ7%+Bl25nH}4m@4DkY_I^K z0ujzbeO;3gFU@S!gi}4ILx= zvh|HB8wyZhcPlWu<~R!5mFvP>{LaOQ$QI}1V8lJ)?5HP9z8oAo`N25JJ{HnXHt(S< zR_9by=D;4Go%(Z_Pn*f)hU&8%ydJmV4fRXCR5kQ3sxq@$>YH5ECaSJ*CdOEdr79Tz z@>J zMXPEv$T*2|n3Q*7;w@&<4h6cs(Oj0D*$#wEkZHRy+?j>#H{^O3r)$2pU5KX;OD33w z>{QP7j8hg{Y)8u=y^BGf81?aT2i6EiMWxGZ4dWPw68qHN5kDaf<7^t|?uldNX`A4b z%^vxgU2x9<@XmA=hJl4?VaPu&o#Jpk={7ncEvN zDykqsc_Z20_$r)f<{_h^(M8rj(i~_V-G|W=`>-^olB`e-OA;*9?I#nJ(EER zF4`|8Hg|S@UV$Uutgk{->VsF508pjQS*K43i~(rfOPU z^Z6iJ45v?m=LRkvE?~6^C#y^7D|*Z3~g$pVN z;uYOYLFTe-^#fT8QV5-Qs;EUA_+!~aHqzlAPC`P_wl-E<>Iwr@&h|1!P(%eO%N_>u z5ysCDnF)8$7C34J>8j^aM^wq^S4M_}jBQ`Xd#w8xNUG|AF#uT}s0PbJ6N-gokP052 z=>a$cdCbJ0Z2FOnQlcLyD)>;RS-Car{3ip}iw%tp)#C(r1Jcm6x6peC9ti9V6gm!O zoLw{?h!)wmI}n|@kNo>Xjw15!4;4E0Xv#3^D=G^oDxAGPaA8Zm`MpU%%y@e$oK5Lt z?1Pk<0W+(&``O#SjvHhr+D?sXW|%7O{?Nm>@{c`Fe-*I?&% ztzhDiExrI$%A(H^7ZQ6pzFf1i2g<<^nVA)Gy%%xEvKph7s&y_BNR3I2>}ji2sS1>V zJ6T&%H`dDwthDrHC44R#3$l7v8DTurswQqqkjbejv3=Z5O(2n-oqqlQt$tGkdXC4B)R(xUi|otf+6+-3Y9t&t7})yWar^e)k8v33va=Q!;1f6_z@8-yNKc zjKilO@I-?lXXyf~UUej7L`K@4m^sC1I%dtb49P{?iDt<F;l?6@2$P7!M>iTd{zJkQ8N6Eg!euh*fC8p3ZkW0+kQqFm z6W~!z=1DO$B99o4U174pft{dorJ2Esx4}BA%?5>XB#h=8*y6Bx6UITyj}-w_(Y>); zjz}*^DLh{yz;RbW7Er2qT47?^9gBTQ=mb{Uu3H8ez>&%(2DkEVHg%fjLvWgzwkxyytqS=4VbLL18dKEN%=&Gq{ zP$u#@qmo64=ayh@&mDPg5BNH*g*)tdsYPdHp{>p?YLCy%@5e1CNgr4u&oq{@XcIG) zvQy1kt;M?EX>QA&XS zBic?Vl$Cet@6eq?z)M)5!y7I^@$~^^B$E9=H}+ddd~+iN8C2>+$kuozkGV^5i zn>ck@q7J*-oXJjfjV~HjS=GfM?MQ9AQSDek6F$_CVs}fNN0;)Jv=h;g{t8bB1|mgk z(+5FyLE#~-@zWZFa3H(}cNyzP$CAu1-N-AuSqT=lk%^X z^Ip1st`SZM5J|LZp1`^E0i8A%{kBWSk~q zzG(*8LXGtxUx|5q;gZ@aIVo!Q$1&RdvG8chhH_GrBRr>l-x`UldvlseGHJ6D%M2Q( zSUONc0#w>NNyJTR05f?rmlvgIgsSUSHRId^l+|iTQ&B*PplGt?6)}MAPy_x|K8WgM z76P%P1xE_dm8hU`%LyikcG7w)1Cn+ZUH(8ksO8&htN3S~x<8{G>SzP&WAnd|HpOT1 z8k^0}Nx6-|q*`r;)AkmoTRHDwRN=CbI5Yt<2=Z>)AG4kh57C9~3D^k8Jw(_nqY=qT zRhj5v`m@c5hmKrg<;$r16Z#s&Fm}LC zcH&!J&^kGVmg?%ou0~BE8EKcJo_7(%QvQU($YgAF2ooMoBY3(IR~4UykyA9vu^Stu zB#Yp5Lm(XHtFUNPaGM@nv;$dKc1x(__)s_PMM9Y;`XxCbrz5d(Y@o1@rE3R}Xb{9EzvwWs(ld4#$Z>X2fQ{3Qy@|we)oGc`=Nb z6@f^%d!{8f8lRq zx$uW6PzkO}M4z%yWD_eC-_7D)OkoUk=WUqx$s(r?j< zp7dMefuyIRyLL&>bto|1ro=@8dHtr#1;?K{(a`90 z97z{Enc}o336yG$-Oekzcr-|dK$DozWz#j~uEDLFWChnPna-OxhRsP;K zv#n*x0!z!C=>C{2Xbn#BaaY6`k7zrs_JsDBq)vvq0ON%cet6TL8!!t&h=$DtZI?2H zjH8w`EH-*0(Fm0rXFF*}tQHf!T$N{EYO3uq{cMJ@qikWt0*9=2jmE0_I;kwb58V6G@nL; zX(i3rXbv4w9GJxv0+nDCMK7PsBMM`X8O-IG8XXWCh%Od>k=Mw~Ey7wV*P;HvydqK!MbGPem9-WejN>DdxY`>l zfIi5yoFU4WEPBQGC)=zwc@=~1N&OiYanVkbh{V|5ql=eF09)PXUX6;cZK-h?P2o5e z6=+VnA<+p)sNVD-!~-GO-;fZ;T>)F9pgq{q?;2AUp&aEdv7BK(sa#Tj=$0N}EOp}CQo8Tdh4Gt6EPNwTyO@7#6{v3sJ zsPT0e^=@4K8HoZ{8%M#`=O~=vt-uNL7GK0@ghfC@xR)-xr&4UEQnZRw)y6O}D;7i~ z=v71LlllF)adVeL>DL=aV|}9cHLPpjYXa_AH_m_ZeYV!!Wd$_5>j@vjyt=>4Hm&hY zfB_6wq0xdL>s4hwhGEK7Ze;om+al?)ElXwp5qq;3)MNsWL4&1yt09`?IWqHPnMG|t z^XyHVrs-m+Zz@C@>0HI02qO+nR_SADZJM2J(#6)?3E7$mlkQR&+Vln;s3Mfy&TW6y!T*%|u70tY)=zV_$eF9qHx@n2EJT zYrSJ8HYu!oo@v=gzWU%R2fOyLm_;sz56+Ef;LJaltJZ{b-?R;m#X*XwO)PgWnlP?P zw*(o!va}gH*0eSki(?+(VctXX0GXc9*nw45rnes=1fQKIv5P#QM`MGE#$v8iy0k(0 zEi5SRFPK}*6^_RyTOn8!Nd|3N)SeJJi>0F_(|SwAt6BpO!P1V@IcI&OTUmn8Jfd!V zhEXMKad1+ehNqC;loy?&T>3}(R(Dsb(8^Vpo3wQp*hFE>&)W~ER9ycG6?>F#U8V*} zja|vrFne^9VnI(=YHrC&1c9Q@!+I-h;{{Ao`(=+C1 z+ZXe?%@&$Dag;k|;_`oFuA|d$EQpdFKn>mCVNN$|Y1(j;crLr=6WOd#S8xzD_4$ z8-mSOd1AIQ=3oe;1E_*g1VmAk}imLZ+VSJy@v0r3)8iuq=P}* zN6VgQw94hewCn0kc-F0+eW?s|z)(487z<#PTyJKHDOj_wHyps_*3gEui1NfM7JVyV_ac{YhOL2+eLTQHCj=(lao~(kjXK4(GW|8EM=Q83PAc+ zyQPBB%`m^X4TFJ4{lm=_sMz)~IwrbaQwuxYtE}bI7$K&lXDyz(eQFjD40nwdWp&YEL*gV(tc>6IwVTCji zM}4$i5nq+1Mq^sup|{e7h2)ja1Bu~yWmOw)5@!o-a>*t~Vrc_WS?^E;GKZ+2!=0-j z^$Ip_JF%33{BPY)jtkn=g^-j%qmC>;>267)$Y2(=%`Y*);$ulD=I#{JT6R(~>g64m zgB4zLv8Gb1ANBl}yKZilzvS#$#}FxdI|UNs7<5+4Ne_LnFu~aD<)a=bPJULS)gO(M z+F6l!E*|>SiA?chE7DFMwugB1;OC_!4@`P0o$6&0q)Z?apGwFiyuRhl!Os^5{yk6w7fQa#aI>^(?YvJrvv9 zTNHBKWZSH#AzSGfNi>NS<~xE=DPT5)QgPO-!daM&y%^7os+>x+jvy|D;^_eX41BZM z&1J=*G~(1V(WKF8)W;eZ5UsK(h7f~UF(=%aqo#PgnE?72J;BwAT%yJ(%2!oQ1tL2J zJK!c>K!awfCUBDF`27JiB0;Y_j~y4EV*kpA4JYbDEHKj0#8aMXacF^+wGEsF``H0vBuWhrA?r7^G@9+z za7kQJ4wkR_E<%Xtva*boOvHt`rW!j-VBtpsDKg}kn>%+7enW{$jTkPT z?!2PnRg2c-VTVhF$(og4-vRHWDd_{)cRJYwUJH#%bV7TBOxS8>>5b%88n3OBqV`%z z{2szj{e?hb9F1=?zO)|O6<@oj;ftXkHKc(OD_F|8~qppHb`e5lgJO!ld zINsiDFCB~@*o^V?CKUTg&|mWUnB_gvGONK*O)yJDGtGuLB4o-%>!h`Xa+GfsS5It~ zmEiy-CLt!XVl=n)yN#;0lnFu&W2#!QVwZy@*xgd&r4m;yEki*|L$|a6C=KYN>X_B! zr4oj;DA+6_`x<`ti8Ir0MbJ{YNWV)85nx=V!=QSY>FH4Upq3ED#fWU7lO-0)&`%cU z!@vQSHkkdih(h;T!fs8@aM=AicJ@p8P0bw6zpMRyiobB@FgC$6$!n42HPcV|rF<1HB%)%Ss;U;& z#L5?%#t5NQw=^Weku#sv7<7)Q`cvA8&56$Ms+x9?$6;e&7pgpbl02kVCdJ^woJ%`u zNh6C|&*{_8>RHgKP;-#=Et8JK&a-Y&y5lAMs5*v`3a?}=u@4J=rC&BR$> ziVH`Is_7&M*&KOHoV$Z*GF}RWOha*k=hNc7ls7e+A{brx-0dEcHFgTDxau#JkE19D zDj?YKM=^YmEsJP}d=V_rt3xp)dxE%Du*$oJRzq;i?sP{ef|QTjNn=Yi94JvG?}sUv z7lugmg56jg)<`irq8;oG$i`4lG+-K4$mt@i2?Nmoc*%)I87xj9E@*ZP?=dl2=w&9F z!^g7qcD%(5dT_%HN~aQ&g=V4+$Bjk!qZyt6UaM3YfCk)KiK`zl@MxDgzP}E4_e0f*H7pDljLcXLo|$wea(>60LDfHl4IX6!h!sTWR?;poWvOCCN)S{b zLSdkl;hGm1(1&5ZG4T33554}b7_Yx`7>@k>*?IXzdHDs<$(Qhd1BQaUq=lB6Ox0*Z zw>=v2X0eJeXTFCns_;dR&0n4iDHytZC^oaPRfk25+C1hEIB(tB-rTsPp{l(K*E`@{ zinP@{@>b5*+sDC?17-hV)KuVN1a<8yUP?qWzqP=nNsBJfVFfU?Z0e54wYBriyN^`h z9lnXABjY6~jZJuuli#z7g5X4y+RWbk;TUR{R8|0<)~+s>i_e)M{cE}Un<4Bt+* zM>oshas!MWaaz2~rxQa!K(`Mi4x)qb9tPHVd^fFim*BVrMsD@m7;VJIPu@Zn2DC(1R(H@H#-Qq! zw~ol54sC2a9HD7i?Fo^-Eb)HQs4s`F2gziMNV-OhyBA79Wak~rVKvZ5jnXktItFelhm0Qf8lC+5AET+I ziTB_+zkIG%NvdS3K(?GB!^rL`-ZX(lvb@_4PvKUpN9{w_x0qP{V9-^C!d_^;qES{9m-2?Fo{%14 zvEzqNN_bU_Um?6IIZ~Xa?EG=+Dk6Hk#8yT^c7o_>4b}RAs&WeQ^J?qcU}uEgIO@wd zMBhIIc7%t7F#70nH`4GUH2a5ZY74~iYUCIBS}1rYYm<)peb zJ!4|Zp2$6lN{F(G?PXm?WCL!SgIf4yk5~(-Tl_Gh=qYF-awmK4iTTNTI9l@39L)-5 zRVKU)QyMO5Cs@hgIa2*8i5**&u$@bI+8$yE6fc?yYe6d738(l*VZ}m^XlXR zr>PW-hDM+Z~Y0Sf700v+xA&QnwuGz2pNy-K1RFb);Qi@#O*b%R!-q;lN_d+5d zF;}W1eSA9Vl=v3W?JqSrXHi+n?-9pD*T2;7gBP78F9P$rojwPqg7JP_Cc|GhT!%>FrV{mL@EHNr?~XWAxzYz{6e|OuXvZm3+up;CSbJG6*EwI%A2}}6K`yx9SfYO z@OsT=yzqtywU)vHR!d7dzc@Fq-nRk=HEcs#fZzxvpG+8ZeHFGBX~ONm#buDI=}J$Q zyATQM@X1ZTw}DcCf7oZKt3R`7>PgIvn0Ty)HxrT;%<{0q$Fm0M1l1u?+RdazbmCp3 z5Z!4Y!)vAxKkdLTrPoP8_*7hoP~pzJAVx7xnvJH^3s-nNQ|Wjx^Wyb>>Qh56hajaP zrw9?0Zd1e+GPE0xx9mdPq%MrzSvHoz%ow2K&oQKfelIElTKYlC%dPB6ljRIALX#)pT5g`pjML7$r8>*XYD|zoHJ_du)jXs}qMHd)z(Cx=dg3Y&KQV*JKE zRIS&S&neO`ykmr8qf5geQQ<*Voc=K0icaSDmL7vRT<^G%1V7tZ*rPW;(*VjW5u>&8 zo|>ol<#v|rS2ew4zuZu@j73uycN*P%Ea}U@9s#|Dw=3};pn7x+dZE$Ie%T*sz;}+1 zxoCgwIQX>6O)`Kq8>7KGzhgN;KH>KQb8%sQ;$fa&1k(;>8{QTV-2e%kM4%aiQV-2t zLtU1@2KJl;>zy$vu)>8}2$|xk5@G-9G@Z`PjxzOYP;f`Nc1cBOy^cSj654)bIl4jgo_v38-{K_XvIzk?){eg{7cm;jksH8s4R#CzSTpHsKCZTOw}KskhR?4hDV zL&jA5AG}pWVab6^6cQ#kvUXRSI3!h$E*S&q=yEGX%+;=nDyW|foJ@2zS69?8H;%2u zEu60E=H+~4@q&t$Y9-Rb=+y;vi=1AqZm5!9^qgwFho__){_yTES^uF+u_jV^G3@E> zGC5mnI=|KWmISB{`JJYTBMA5vj6m2XC8#or(HTVGox)KgAfbKdP@{Mlog17tAS-C7 z3!7@&+UfPO%?lS)(0aj|iFo5Zh??@_A~GfW`2#|C2J|#xMX2l+MC(mcnjFlt>(xoo zLqk5wxSLk^R(zv~zegFUU=oP>_^u=vOG6Q)G$~kT;o<4t=wuDrS3Y!zIRbZOz~Y1= zSIQ08v@zFuQuU*nEyFOo@;$1lr}vQ|`6TZ+w1%S{{usJB-}Ru|8ggIfuEe!g_QZ7r zf;A-TvThV+#q>@tf2SW)EA%n(ZY+XGQIKo8qN}NVie>S>{@HS*3RErBphj!G)=jd zSEXvz*7d5iv~A)cCgU(ehGk-pu$cgc0ERdwgBb=h!GJNu5rj+#F#!)Yi!l%|nZyAC zN#*)w0rx#ynsfByTQeW}cPh^lg?j=@UMMnNrc84^av z$GS(yhd3^xDUkaHLUkP+p{!XiR?&jkH0`}7Q8zfAK}Dl?Y?}`?yCpwyc=7O9&ZDL) z-z_nXOTriE(ifohjv)=b6N$B>Ok{%C|QMwf_ILgdp8#2FTMATe$W&FoV`LXulX=Sp`q(Y@19;e0J_ zaM0QEo-cU@Jhjb@8swI-0z~2m-I?{hH-M$Lz6obbJWEFx(k57fxoQ|U6XmgB=b!aq>$Q2yVi>+Z@X{!hkhqW`$WOoiJENkiB){_Kk^-X^%m7tfslY^Nz z#NEm{!s?RbA=^q|s0==}kD3jW4OwA@tEa{9OSu$5EgNse1Q7i%`u76IVUD+R$nIP8 z_z{k;iD&8j>mAYS_i)_qC;HyYZ?P~zFui(KV>-shXcwsx#cnx*SL`^!(?_?~y}>G&Rw4|05zE1Bm)x4Js}7;Py1b7 zK!&3$-~~$BG2Djl-RI&5yfi2~-{_a4eQiEVtu@VaF25_yrd#J}nsTLSd8cXGv>MVr zQd$UYUCZG;-}%nHpWyg)`sx=re+TC;rtfs<`YZmfpMRb6TT0J0ii2+DtL;{$cSNJx z#{6|tCh|pL)>v{Z8l|`{#ZaH5ZBwjFw*08d6+17|U+mLFjxa~_&Jbak=J`1Ml4X(|_>Jy-#!eGRIGH{C$pt z;evYE?G?06$pZsfr@4d%+Ve`XR!u!VznG$7sMCrba)(UzPWn^CU;pOEJuR)*q;G3V z3DL629Xhow;T%DhuuEC3at1cou9W4~IZ<*mXJjqgY1ElcCX$YMr;*ObU$R$Wk~xMd zs41zRc~of)C$6oB6Bn~ueeu!;!8le30Bcnh8rRm_gN;P#d`dU^<2q9T3rSN-zsOY; z%8pa{F&L^g2C1v3i(F@2wylrCGI{;$@yvpmYwquRed&Q0;O_fH($N&|bhK2wUO+p; zX|Fl&1-SK5Q+#6hfxI1hQogr_N&tPy#V|ro*p1*A9h?NCaL2QQAi?$Uc_Lei^)Mj^ z(b&(9su$CPc<$n?ou!>Wn!h@wHvGWDcxtPWMYu zTTX-X{M?Ke%g>O*do(lm`MuX|hrHhN<64gMlhgd@DZe8ozv`7od|S=iH7V_MmWG(D zX|97TrWj1}L76Rd<2WP!rbHX1RI~AgO0z7f9LH^Q`kR=z+c@^5homs(Wl@`lqSc>> zRF;-3Uz2T&p5`}HZqD|T`2Do+CHpn7(``d*h?_Mw8csblA0|g?)u9T3Q?Ni$V&t2~ z8i@r=6X40R+k*D`Hm+FuS9#GWgPGFclP-y2)pdQ>U zG1!$C90PO37@~dDtYbYCdpqd-dgFN9fdsx;nbFiV&5Lx7hE&;*YuULkH&c8yNia@i zg>t%ADRWA5!aIEJxvT6@&O+6C@@ytVXUl?H*jupOT&8Rxo@~@lJvgs^(%9#Lxx|9p ztx9zyx9!Ttq@F94H~ewYKFzsy-aBqDKREA2sAJPi6qnb!Kyl-}Zmt#S{er>qRXH3n z*oB%b-2|gyiOm{AWbss;?N96ow{%Hmsjrgd_2*fVYjKEO9F-eA!N(eqXsSBxs7Jxq z#eF`j!@bq#OwN^tn$Ts#O z_pz00(QgBx8wR?khiAIuICPIxwKGVcI@$SwVhM*q`(CO|@-7M#yyd;rIk&tgh`PMC zlbH7VRTi{LHP6%g)GWfOTe(Dr3W5RpItII&#}5g9QPv=vVQ1OTfEwK^D{869j*p0= zZ&4K-bGhmnEgu0MdV0{Sut68mVelV{I=&)g78q%qESCltzaoFi7aeRm$fV+c1D2^k zgS!NB)L!sYlegM|^5P=S*wFJu6%%x85;zW2y<%+!h;rfs7n>HrkP^1r4jQtMoeH|NvYXjM(O9Sic1C7R00}ppSy}XR;$ZLSz ziJQ-?qDys_toh40L__N= zIkV1R6wfc?EP43LIV=AwIkbI?2G{woaqRznk_WcM^McNgbJn|Wisw^QO7;3B?nO6; zx9Lyu6Mk&=CN9)SA}7VHFbcStA_4_n*||iQCufi5_K}X~o;YitednHzzx{`PJjk_< zPyf+7_x=vYPCROy%f~CZPwyy?uK#^J^uF?bJeH|vy8Z}<1T;Xx26{-Tnx^&{=`JD6 zR$H|;W$@`L_O9(|kt1u$Gc0$leP^KAB#W{Dy`S{jq0MY}W4fjy?WKL}X-Z=6!AGWB z>`9#%Kx!MHvWvp@^=S(SsO&bbGW0(`pO&G~Y>5BQGtPJsnV z!zlJAO^bYEuOtP5H_DnbeqNe-yCy+6KQWp~fgJTY`1n$hcDfUfRFU%3ipD}fM$@Tc zbMrfMG9$$Y+O26oy`WO#IGF0E$Dl2x;^|eN|4S}j+9f1f>*h_rAHwgkkma*b_ga@a z_w0H)mk0hHA+`K|Do=Dp`TbO0D*wYU%=EqTujMCn_o?43rx7`;95hR}`5vx(7FkP3 zwM*x9yZ`xtQM%ST$a}YQLPqp z(it!n>sW5m8Hy!?&`Nzzxe``mrC-H&g4HADb4HaryHizsCs8i3NM5%yrh2E}BypOs zkgU7II&%ks7Lx|uf54dt01wVJSeYEYFg9E}dpaOTKRY#iny83lr^DFnX`2bmwKOAK zxZbJBl9Kk#wUoSXqDiY_yA#R_Wh?i((Fi@X*h9}Wsk+0QgClFR%XsXC8ocSiH$6j> z6eS6QJa4|Ctr4#VxFS z@?CSpv9{^%KYY5Rso>KdOeyyLTx18t{?GZB(C+aS&_pc{o8qhDOq!Rj^iftIQ;q;3 zSX4+~_6~DfpBNjO%GsGw-`K5>MCnpiTDOA})2(632-zewN&{e1h37dM+Dj8UvJ>|A zl>O~JX{SCapFpVIfB^|hLH`rEF5suQvk<) zwE_EJg|y49~ON~H`ZO4m3LEl`6nvAVduDHm2*3iCntD0~w{|CNoU zuJ!c1OOcZ8yRjNecX;0`82^@>g87D8;0%S+0ys5z1S(~9a9CuGXp+c=l-CL41B?W% zB!4P2S}MKqoh5l*07r4}6g%c``1zP;FOHvr$rb#R6eJ*-LIFypB?T2_=2B^@4WWjN zGJNjALBL1>my3ip&ThoXkM>h3I@b z8ADfRFP_TEnJEw@6LzPiV=Ak}f6Q55ZWaTNkpDBOW^BqTlf2zuSiy4-45d5c02~t#L%W?WRx`{<I*7c%&FY*jKWm)l5^-+InGOu~816j_HO@pojZyIp zb4cXq#DMW~k!d1%mrkEux$=u$va9xTfoSzIZV;H(ECVmV^c9QZ%yn#7BrJHIBcFq% z8Vq5-AU!Gx#9b$kk&_ZUSQ~AwmvuN`Mwl;bt)-8jd)JmTY6|;H_*O!ilqq*^yFxo6@sUI`!4z)urdg2Ng7o^kiAh z=|InktJ{lMaO3b4FI;Q&>)m5BLzRi{p$ft3%^gA9_XF|TV%E~vZoOn&EDjm`n@oN% z(>s4v<%gE{!Wrau=)FtghlIoN{)pc%z1Q`7mfmZehOqQrp(n*}Y@#w}BKSFL9W-?C z@pdGLnMIF9E*P~(fINyO09Gnv)v8Ky#TSXkFiXE0=L!>|mJ|kJ(rdCA%_z!)?B#EC ze6xDx6hphTy0SUz?p#b1Y9P<+IO=kxW?^G;bG2V-j_($MQf=gCr%$N?`Gx@gID8Jd zCh0v8h09@Tqc0nq9nCu=A+5e<1&C>NDc>{mi<@{x32&?nO>w5=7$1Vg0Z-C2`%n!| z*`6V`&NB(O)koUy-yMiY7w7Dj`^E6M((O;%B0TP|5eL5Q{@$m$2A)3XBD}WBt{YxU z0O&?&qjdf6g2CK$y+N@mmE?_(YInOv42@3>otv(lua1P_v6+#f+8AqYbZW8|&dv~E zVQg|}{QU4pK&&uQtBr&w&Q~UDgg6VtJev;Hvtu}fuZ>NNC~sL_QGy+5`wa*-3q+pX z`i+~HHnNFq`jR5k!1o+Vju!APdOYiW=%EMTg4VOa)gAG9(M|%6Z#S~>ou#hu%oUk4 zHl@FDzkS|Fl5cBTl+|7iFh~|AGkE^YKvo&AMv;}?5_r_~?KCUgx}y>k?r(KpIPQ&1 z-U-u7`7ESdi%;!XJYd*;6(B&iF8T8%6+wr@PvxoLJE@Sm6j;&))If$ZyjfdcTX*)VUr}?bl`2$`=5`g9de!84 z{yCOPg!I^<3EYG=7VmgzfyaF5G(Iv`8#)Udb2yX44>$@+kRT3H>_hSYaXP$w1`?5f;z7U^N_=l1#8GBhZ-f`;}^+v-ZSkWhi?J6Q8zG59tFh zBL4Qb-)J>N4d@h^({s=Y?;bB8e=m;`%D@f!9PkcDm`Rrkqmje6ZE3rhbMn5zCqatF!(biON|B?px3QF^mFs|>y4a!W2sKkSzcQHy}XcRo3WNCZJC??IQ4*vR|a zdkJRy$RjYmI(uJ$5)B2tIKB@%91OL~^RB$+%qjRJ?lWZ0@n26xk?vHmHN$g+HZLHK zTq)$;Qb&+acmmCJ#74_*6~r~gNKqs>3s6cnA`se#gdd?&C{?y$5Eq{{`Rkg9&INNdLUnjL?`OL}LUWgoX z;l8#cciiZ#Ng+a1F^}&E-UQqNi|Ux2ekhWtqUGI?sbdPO-gYhRZLx0g^doU5;jz_z zY%n@;zUR8i6(tZ+|}TI$9bCGWff9(p%U z0o9k$-C%>lTa@`saAFGcpSg)@cV%dTU~LhPOAO#!Hf{gDwcG06;myW@Ds4z;;6at2 zh>L~-3hYC>`tFv5SN==8O+Fg5o6*O0m(1B5N>X^%f3i~xtS|BeJg`YjEJkH2_IrQeuAJ3I7*nH9!;jy6TVR4J1w7a&Dt$b^wueeU#L%4qYnt9E&Z7Ku{(*SrWcNDjCqEi`emtJPGM=mFr>B%I z>RM;TYt&is8g>5Sm@oABeM>yQGNyON^Owc5zNPn4Bjd~!%D-*%BqHGXbAJ-&tOvVO zFmEK(_M7p^48)M82*}qu;Kbsm`ec`KrR~%};*yh!{SFgsgfxiGq-|ehSsX9$d$%K~ z|H3a+{HveL;e+4%4yJ249n07-k83822=jOjZ_GTcaB)wi6%F;ug4(EcL@u z$71H8HHFGQGbi_Fmf+^d;KX=j;5jy+@?{=?3so<`R_ZP9m&s4VBE(OoN`^YpM~;lz zzTFxw5co!`ZypbPK!F%c&bo%Wr>eLP4~WGA;tfq{tD7s?TCpXvA%7_?PN0csB}Zrg z5#nfREAnr36rMc{uPxDr@*2Mcdn45%0%a8>h&SZ>jcBwJ*~|nxvD}0CCcH1J4PDCL zSl!zGeDcG5WYb@K-d7wSN_fb;HYHWV@jE)RgbX$g3UG;Ck5BQT;APgfu<0Q_HHCuU4yKN?8eI%e&ZXh?Upa6b`6PM+FW$KHw>P*PR_h+ z-LT#g>tn=rsCramz;WQl6a;(F3C{;6?lfJ2&LU;%RO>M#Xw$@_Z+#u+>hSm2w@oqny3)1 zV0C?1|Ve zrL8<|yXl)gPtvHl-bosy4%-wbBIb#wD%&sBLAUuOIyarkme|DUEcMyX`}f2D^8UP_ zS5eaAgVM$g;cpE)O|0uIeSzyAc(c>fN|#Mh`c-5Qd%*8)69*)cG*9`W$Ms|D&41rh zX2#~Jx4-yZ9+h6tGkzymrM}A3-+P<%@5^&EU;JS6?epH@7HXq@93*tbv%Vh$=Aim* zkS@N2e&u?;iS)ysj9;?i_cf%a{*n%5`h6Ygf0^G8LUSHezaJ{4tA4_L^!t3j^;>`A zwZ>c7|K0~`#dpi)|9B}~?f0+l?R|jjRL^qzf4r2Qah-mz`(RhzU+pQ8^N*F<^>``$ z!=?1IrS$hvpM!oMx=s4c+oXTuHtGNHHtFAf&__x8-*1!uHrc}mdEk9@2{^mBRs{arGY`#)W$_ilIolhS+TJpZPYUjF_y#^Lk%eQdEcB!bZ z$~R*{&Ob~3RQGcGK2l0A&##Y`(zEghUf}f~kuQC(r}WPEa-G)msZ#pqd-)B#kl;wU z-ftQDd`mhw|L>5T>R-q{654;sW9c$Sc?D!Fr6G(Hw#B{Z*kWkeP;uR^6es2~V<*nh(Z-s}W-^ev0 zm`ZgC5xuEv4$lrJj=W@TD0SAwIe7E%$Y|yKctN(JO9wK@tGY7MflekY+bhua+nXOF9<$}^ET}isK z!X?Jd>vG#l$1m#ilE?k#$;T5v&Gjb@KZj&N2(`W*DmXh?g%-%haiG7Qoq>cVT0}EK zG%+?jMs-o4ixRHLRxIJG%_@QTX^jC3v$md7d?@umNk>(0gq-Ogl{|KGa=QmwpaqwbU0P zhqibsv9B$dQR6(g8I~~<#OILkNE{j_g9%BjP`Y7W4r)7%ykD|Rozqp;l76x8=iMn1 z?EO{zZ$>v5(t4s>%;*pI`*L(HuE#OlZEhViezPcESgBBj(LabxL_ z-0EB-lv?2j1ilH5Jy%Rw4SLqqK>!Id+|rbT3-I;B2i+mj~Fgq+Uep^XN+Zz@`40bHJ^K4OiSJi9e?b#+rS z=cCRqm@%hm!CnG}O3IRZVvWvNY#zWsYnVSX>{E6TrCo=ogdq*K1@Le2-a2Q@;%9fV z%$tqV=BWWwr^;#~(kJGhfr1}YL=-sT43qc)B+V@-DL}nq(9Lb+DA2vhU76=VGev&F z;qL`S+(mD<4K4%B7-m^P;x;92tX*M{6|h{B!0v2PV&-OS0}|8wrcWxCIMEC#10H=- zd{$?Nh?`HXb2q!1HUJ{ruCF1n)}C3bq18iuhjg*(nXtyI@65p|i{@1L zVHaqy`j@^KZTDbQ5p@-XZk#jVx0UXW{7UbRIKQj4>Q}qnGIBK;kJGaFxvV{R?n12E z1O{H{dlpWj={@t4lfK1#-=HgeppZMtp*?+X+Z=)s!XFXz*lY$Yr}c%ptkh0_SK=h& z$*!%=BeBs`I4xcXJgn92c%{+N1dq2q1LKV*mMLtSI;Gw1Y?>w|j(lVIonDm1`X1~l zMVk)K$N9>cKKr&$U;DAAWw9xlZ#0~+&@w3uj8>3EfGI-FS{T~SPMMC*iGjX>9zt3Xs)%4Z*;y<} z37E+Sf+UA+9^I*Ha$krMi%o3#UTWaGP62gsXf7Azc)G`DJ>Kp+h>XI~*RlRgUwA^D zRYP`npg;QW{pBy{`OGU{{)r#&eo4q)`t4vO&A&sXryMsq{yE1lbL`QG|C{r_;`lX=U*+iKdmlZ-7;^jr?my1?S2_L_$B%LU3C_R9 z@pByCR{vU9Xut7GYU@G2y+7ak?5}?4GynL9$@mxl&u6~l9p92TZhL3WKKR_%p6AuQ zKmW7OeC%hx@hw*mD8O>x+}pdcx3|2v*AIhmkGq>U_ioD=Z-o9E=r*eFs3vdI9kicH z&_ZfWVN{x0l9hV!Valdx%EEIpxp~YzzkclC)RDB0&vMt_zuX__SDH&Lc(@$;fiCK1 zjSBT5I~`4H=}P*8YVtPSL7iwYEu_{IMx}X^YEch9OxYA2G(^hHWA6C{MvRW6eSDU? zekO~}1~u0PSZl?`Os%(J&`h_URcBad(K{M#Yp|+pZP4IbwbTOplC3+vOm5l)Q2K-| zWgx&iLSUYrXGH>3fDu&VFY)+~{^*ZB@rh4-=tCcR-}~P8j(5C+NI2)upC29`K6>=% z%U`atLFnfamOm%tCaw|l9Rs>=s816WV7AFkSkVh01cLiLn#&#E$InFn$WcNp7fcaH zY&UxwecgokunI1Ab#)ytY42jN5_R_2(&jg=U!B*^D9*q>%@zC9ZTJEp{_L-*po{vR zqpuWo%X?AePA!vR?44d;z#1nRXCn!`CZ|}>XDtgJFwi|weX`o$*S$`_pl;$Ebzj13 zP`3!LZg)1`iKDcx-tLmgSvLVzz{xO~4QFUh;aON*uPrp<6w4c|zl7W-bUU>(p^+}J z_l#Y511oXQru(BjKNbVw7kLVCf1oZN|0h-kV<3p#eqsno6I{AK^7OvG)kjWZ0U1-otL-`a zh!%tm<~o7vvX{U7UKQs`G^c_iyK%-gRrYF%D$oORj-`gvM8g&wD9AX~lg*^(|!ZE6S|F5H|m4qI-W zBbrl#>K)$KeNdN^8oP3<-@22@zq7e0SmniOybYt>Fy64&%>PbODcDkE)pUt;Gmofm zM1}Kb)!7GK2|RT_dLFqxM=kkPGD`x8TX`=Kcwp8WN*);=1&2t^$H3k#qcvIsyNXfK!6bRxQ0C#q@e zCs<^zo|Rk?6Of{KYOt2}MCzsK8Ofr~7gkraJj;EGw{qi*C6XytD(^%Fxa#Z)uak9G zWQ5Sg*}wSC-qGV{h@o6*$oxCMu2V*g`u?t#egpwZLfU1is=%5_b_gd3JC% zDuMdeqOoH(btFYc&3&;sBDjCi@V5?SEC9TP!xj8?xOH16qk{q})5h;nT8Fu^yt=$; z_v~?E<8(f%6u`_C>M!UrCV@8oVhooSTq~@%xuFK~wFhc~Md&f|WuiKR`Wh6b< zM_fmb4XKd_d9f~g%UfdHNqnRdjA(lvb*_fZ%{!EfpH1ZymrsTGRK9cm9`w#+8jE_l zE55=C)IFZ_{azvKk-xxq?(EC(Th%VH&Fs`*a&vB=xN!wOS1C_*c4(Lkn+xSce<^2( zS@zznY7zPxB5B3j#-0BP%Q7vdb}Puf@j~*ml2;&|*&KZBhN~^khiCoLjJOM^w(*iG zrmH+n@5e;OQ~L1YTWBs>hmJwGn>#X*^PN%m$emFF%}w|dT?0ixZEt<}F+2U@cRg~k?agx8{Szku>OKmxbfw)8s!`u-t`yrfqg!|Uc5 z#0nFf)Z~TpLnJ*WshI%zF5PHsF0LA*ql=OvI2jwh$i{H7n-r!%Ba>=2P;#F`9v)zv zZ)29L#J5W5hD1%x$j+{A=i&C+)$cN7zq+0-Qi%o8s3Fu2)`?%K&5D z7SxGRnGr}ezqT_FS$lL@xjx2)RE=zE3@HruCa-8 zXJI8Ri+kpOM_mgrIzE>KCn~bKInG*r8E)%Vy)h>)6YRJ0w!(DRY>5*ojaw8LGHTaY zK(=`35?gOt@OHu4k1Nx+l;h-R5j!UTY40enw<;?3tBduX-WXWPYz>2AFb6PbJ#tZm zGe%Pq>t71q+l8Ng2hEHxoMCMi04I#v6m*(73@&l1_aWS&4(HDQ%lV@}@TLt1$$+ow zY<6&_Bg^kpx*D^!xSb)$f|<^?wsl!f;Tub^>SB@!eY&^sYMfFm6Q%aiGHGk&GnA%c zu|;_unOOU!?VVzu>VGO!?b?-av3L4jzy zqdAaVw}CHFO8%N8INBa$edUfc(twz}L*H?hDK2{AK&+>@-6GLgA@FHsr{WSB|Dx2+ z<^FCCt|tMy@pN=;K~8>R2`pBuf3kK3>b@mkt{=YtyT)5(?D7xho(^RTRoc}JFk&D? zYVl2BCxCOa(v9+TVgH5EPF~t;=qmXZD&rfrjN*Q6%ZKq#>!^kt4f!Krq-sb<+DM(M z;U#7qb4dpm+^YcIXV$VT;@Ggwdm(&Un2Qu#p%8DT~FIB=z#1?bJm|Dvs~ z#VXIEhCwndq7Hep0Niq@nFue6F0faa)2J0M;+B@5NGALZNrG%<&`}0yq&{OQ=$LDU zaGh*;(@ZcibGj*@dI*?+$iO$M=M!uL6LooOl{r;Rq&VNq5Ep^?s@FxW`VYN%3m2(K zzDdMIpPBLjHIj2UNlIOPLOK(Ctf(l`{%Jh#)gcAyOIdZCR$|aT9KFVFvhUpc`Wt%} zIllkcjlGX^eiet(KHdg{(fTF%xpr%Q!S)idgEZ28maEoaTWIlij*bj<56_;hS`!L9 z%E&{Du1!8o5S#g_osr%Iu12(i>AAd#Nq{uY1-HfdBeMelqrn^$NN9eVMl(ouV&9(I zt`l&RMxJ(w{@LM)*>HAvdWQB~d*sI6mvj8VgE#iBaeSP^#urk?DQu=m3GW)7#d;ew z)VP7UFl}r&x%`ypB>m({H7%Xn!#;;+%K!X%mFxDuXLy7-!~8x!7q4Z@_2zheglp7t zOegxDt(Nd)yl&z8h5VL~kSd?h*ve36fBM#7wK}ZpSMznKCW%ynzQuK4>Duxu{oMF$ z1#wEK%#NR%9m0y6pL23_b^D*n(ogT|&`;;X9D3G5*+)v(Ulgwu@9AY+>vtc=m)n)c zlNyZI7dij4c&+yRe!PAm^@>@;+qh6YUd7-4K3>ZQ_t(d3wf%3zYuUuTJzi^!zM+)o zZahI1GM)6Nc1@!5sp2n^DM!K=20}|46 zGSlKUv3AG%1Za#t04ur%N~HAkqx{jSnTZN9T~Q0b)zEUfH*4njO!}BxqIo8e)QgK; zl&Dnu{k)CIQ1dov*5wY7;hC;CHm)uzRP#i2GE;PBtZWu@Hiea9PP=5$=RUhi_`dOt z$C51<8bXV^<~JFTuc*i9J(+JCgYR-J#BSIcCTbps3objp5anOPINV`ya|a!t^F*`X zxuQ&|JKPJc0$H{-!ra{C`H8u)x!O!+=v+14R?_Xz)WpOHE`H2YKp3Bznx31O8XgIH zM|V{;Bk4o@{0s;Bc5V*WKyyP==Xr%!r*ZZp$I~dn_lMq|FflvS=k~d5O@)UaYJr>c zaCT(u%-LEX$n41YT%|gVi=kj%hr`s&7?m(r)kUM8n5%+7jaA0O6LYnZiRq~sF2^Pb z=!;@adliG7N34mx)p0*=&&_?&+EJYdpQ?)HTT}?qL%e5p}I;OS5U4Pat1bz zd0w+-pxYLChB+I=sy)LCTcK%-cBxvo!|#o$?8taw-GK8(31a zKC*Y2H2|N1hzd++(XvHFwF$yl40rbSplXTeCkkV-{+{j=J>3uVWLPflD7KS5J#p$X zAwlSaRRC07@+={s2bUl@pw9$ow8hJO^5A>~BmtE4oiLIV; z(`>!9gLm=9;pn0=9pE-d6i+@L`va}?Al&Q;xlVU5z1Us2pM(>MtBEo9@BxJ^B^0&F zUHdwVkAB%E*jrKsj7+pl`(B^FZv#-gFF&*X6#BuWS|Y)dmT^PsTTBcyhZZl=oKk6H zl2n4`8lIfqWOTS(fk0|tC9e-f{F-tJEuoS2N#R?z#^ob7_AY<;#$JW<1Myn-N4fq| zj@D9|(#yx6{0#Us$8T_a?5A(+tzTQ7TLM<|G)Hsru>J!yd#un-)p(I`T1SMaCyYv(KlOKzT}X~IP`FycIci% zEia>5;jU5|b!)jx-zufuO>6EZ-{E~}hiJsTMcQ30hYkrv46V&+FH^oR*q=si?k(zf z=&tOZ7WGNXzBIjiXkXf4(vIv)qq*U(eQEco9i=pDFEwoWvZ4>vHobdje;V~`Io6c# zZnA}YkSb^#=+GlAhZ$tmc{oo~KO5?QSCMA@+`@N{>`OaDM;|VwSwEB30umU%aY$+E z)t0kGT8np8I8sidHddE&MZUXwj%X;up;8)sa9BAHm)^B+9N`XN;|?NKXf;BF49~P{f2v-1X(`RdmkQq3l*YW`?YoM!BS-Gm%I6!UG}fEV=a-byj%Xr~@7^NqE~V+i zt<7mRZsBctAKXQ*LoIavJ^RzB-@QfK)Gs!NTAS0nf_x|aGzQe>@O^^tf4vOP>DHD( z8zYDBx^Lfie|F#fnSJ+9G~eIdYCuTaP55H3LHs^7pg&2{eZC*vQd@tn`W^vrx3H*F z{r&#s&G*dkrsn{qru)PDo*&-#oaxb&|H!`QckO$Amp}LVGgoPm-aj;?{Z99XG-d3k zxMen3;u%nGamkiAzsj>5_;*ZV(yClZtin!TF-K0K45Y(u&qn0xq_Vw@o`lJB5v)jA z;!f`+>}+Idb>}>o+aPS;A;aB-N$o3D3zeUnnuv92SY=X4Ow4B(_EZV6;zl;OxpX~N zxDys=VXXC-iYm&HpVm|ZZx1h*tIf9%vA9=cBVzs>c}#`~0BKK~id zz8_rd=Q%#ZQIE$Lo0hja`F@wN6>*FT#&giE!UP$u=#q1Dv>JN{ zZO}r}xVdp1kyU-=gk-HLnCjGY?>q!_1u7kj1@{SUonwTNTQsdwnw)?T>jYCq2-8t) z*XrBT>O;$BvNe-V?`E&bU60xLz`nK!)kWql?Ce0wjfpHgH!lSW0wNWiG02f{)a!IK zs&VdSBSXmcL7bzsU9xKZQk`Kho3S7kI}~a09HF83bCi zn}DUvwVk=mW#px+OA^M2HeacC8U2O8+QTq8^^oPd1N5nPJBlG_@G{28T4h)Qy`oNg z3~sRV4_Tq;I`D_(&zF$7N`SyCh!7+<%Be54ML#!+Lds(qjaHqnH~Mo*s&Mfbd6+I@ z(2zu-o5k%*^v(iWff52S#+sd}d}uH;G>s#(YN{oo(A&EDuHn9mUd0LA&fG52y<07% z5Xh}Ao2}|5@n9JWnJvX>Wv}QpRS&IU*9J)CnfNH(L|#Uj9GZg#xg!otc-5y^(;T1s zBx{`WrQc-z|F++M|L-8b`80Bk&)nE6=t_fYQ6;WeECvj08mRTaFL5`sL{#Heh}C33 zQS$G6@l87sul!QGWcj&Xn@6}}=IfS^nELjzt@5}~3i#-1g1}pQoIRdgRkaKDAEykf zWHf{Ywo1Km4ZT7{Td&2W)R#(+jUHw1f9jJ-V1atebe7TgJQ6KEP8oPvlkZ(7Ksk?Q zX8x4+HP5%$eJN;9Ye2Ri`zp4t=-IZ_0Twags9kceE{nzwkF_TwmxcR($0>1!S5xl*QVE87$W$T_xAz2MeK2j+GA(1 z<6t|H?>0OU8;RxK+if9#TSM#>ULowEtf~bGk*V0&HSOgQElLe6)_FcB9EzIqaNKn1 zzXS3aj#QJ{cI;f-Bibf{4mxO{f59>(yiuAKDCX_#!?#d>jY`u=!~7}^4z&p-$#`op zvxtp_IkwQc5CbdMaLysa7}=K|@x)>6s@gOKpA6U2#Pmjq$%p3DYW9Y#Mn@53YHcd| zZ(h}s7oYpmDzY*lrRE2~$izrRKQy%`;=zS4yLHK}ih>5V$Y;6&7XoE~X z$_=ZlDJrb`__=bnT5F8lCZ@3hf#n$aaeyp*LXZmd*)_Xz{-IlS#!WsK)kw47<_9Y* z2Rzzg#O03bOoi~fbv@@VL`asR)-*5dTi3OW1@>{=h@3-%Ll;c0XIjH^YImp-Z|28kI|D~=k$+Qi@Mh{U4P*bW2;zsLub#QD<8^ZWh9>Dq2f-|zm?I_ zaxd%<<6r0=I;-Ui@4g#?FsBdw`(NM`mVGGxN%^gQJpMw`6HQjmcf0HOeyh=&@HO=Q zSKKc10qODmL-ze6Z)!>3Z>ra!ilvJtY)Xfdp!_;+_iM@z`^EG6IM7e=yN_G>0l9Wl ze)Xdj9LJ3awC6@Em2lt0R7$_ycRl@+L!$=iMyAG+YEyM;tgtXKc?bMyq{!E#$Gu2Q zkLD65g~d9y=?Y3f04-=1=wg^0LOcpdHlHn{zZ0(T>Lf8}=Xxt_I!mZkx&|W3nd|7> zqG5sr^(vz2PMtv3O+|=Mpf2r0XC7%E_UE{W*Rd3Q6EMH^DHv7$w7-|2q`eYl_Qrgs zeZ(@AFjnH!__lwixNG_bpfEkzi2m{8YufA6qsHorEYWb1!B@R<`uqlDU}H;yE^BsH zovzn`k!MHdp)9hQ5ntJ!uY-)uJ?nQHjVocYI@?GhPXr<+m7CmMTeHZRRZ|aAPtBrX zyScv%#aW)kQYxN%;<@)JOMf7X=bo>z`;%Ebr~BS`-}g=S{8W#0O)k!k4QqbQoEd}z zc;{aWb5@pG(pQl#W;{>pJUc#^y^eEr`eJqnzRL8_M7F=Q4cci+N4kir6HR%BaR|TJ zFqDlsB_Ac*QHE(FG$~|Is#QX)lY&?YMKGj-0ylOs)qqYgyhFR?Q=#?w&U& z!;91B-9QP&?FuLBE9}0Y$)a_Q*htO`5;7xPMh~?;v$|B@R68*f+VKdzgRw8-8GcdZj@Y$M^7D_Joa>#DMM!1os5oG&diNX&Q`|9hLyG3)JDu- z1l<}XzE%kG`I_qspin~2G)7|OOM$87M-T1&2SE4UpX<+G=+A#t9$K^8sXx{(UD3G4 z)_=MFW-eexR2>;PSHnY&f3G^7uGrY6Nofd~5H9KQZSBBQ+60v`9ZP>?x|0eaQ&0)s zVi8;xUmC5y^{w`ch}Jvw5&MIXz4>|6zJ!%w<6z^Ne}9gTY7p+{j8~Br-o?<=@v~TQ z$AH{>xUw>;W_TEO0Jhtqk>W+9d`l46yNzDK5GO+uIt!kcRAZ>&y7cn3NTiz>p}Sl< z7b`92Cn+97Tz)3!x3G{jv%Cgj*Gr^V!)ID z2uB0&sE(245}w0WK${=CuU=K811UO3ko(a8BHOkeiVtPic* zIa;};jk%8CVHx0Pl{A;arciZ!x*tX!$4&pAZ$ z7i?CDfSD7!%s0UDi)nnD^F6itbeDLY+xp(Ci{;yui4|V(EIT=V`4O z1a$mt-27QS(&fcH3Bw0UF9BoE*>I$P|M;?aN?lsEjAuH?IZdt*E$=tZOOCy`2nf(< zNFT?3i5@OCv19IX?3gXkrp~uv@z?SRx7hh;F@KsXW;xTuB;R_&$i%tErBxzsms+5V zrF=k8HW3t$A?o*M%kyD=T;bFh;V@2uKXR?IuuE2{`f4%pnoEvG6}7Bt*Lx(p<-S)Rz-%{Z2llt zkIiYH6%9?95llCvxz|WcYSDH|@XV(Es>rm+-^tE+zJP%($|-y|9Y%>!muJ6fdF1{MceYvmI!2%NQ{% zg2IX`hX;iV0fz}%)VYjB69SYsUv#KPnX8Ai10};15WArW7wKi6jOkf*tImXq5N`iN zMTROpON$$9(BdK0`Mx(RyS%*OkVJ^<6~tRMTQ^r$!W0LpP-rU}!>LYsu9dY1n-fIuIPMJhU4I9&rg%6iZ6~X;X95e=jwFeK!*Op zVKg8{4(obM{YoBTqev%r+5kn0xzX}NHH)L;RR1?ItW7%R>%TMvU1GNp&(&)4;eM6VM+`;+43~|L2YZ~ z;8Ph*nqXdzT`iHp31`9cP1YP`K(fzwoH8NLnsrD( z8Da4WwR_6iu5!|^YJMh@dh0$)k)E3Zzn(ag^h)dVi9p98Ze^%neLFQ#QOA@uVELp8 zX8YL1OtHG)+xmNw4-{~xfG&bo-tXmE;Bd(#S>7drEaclpf)*8-@JUN42d!}DV zg&vTvh9&nk1e`6Od}Bspa|RW??c?&??@kXigJ zwYD!>0N}pPhfZdd_4(&Cs?{Cs&#kWp3Om2L`2iBy1By#)L1!QZyh3q~BHM6x%~^>` zsu&}2el6^tvMfwecT;K}9RrpkyTmc8s~ly|9}}k)c3vEjPSCd1`Hip(d$RZBg5^Fq zKh9k8%zY;gD3_?O2b9})f+d_Dycj*!XHNd<{=WU?#eAjm8r~sI-O*SG zjno}hpZN5^-e_D^=J=uJjOEXyZYY;`U@tWCUWkR=+6Rr)2Wh-w&I5aa%*~a%wGWo} zmlv~uMl*FcRyv*4)7-nfM7cix2j?#}fB9sb1)l$;5C5IZKdISpr~IYz$tN3iTdAFo ziUU0d1_25W!Z8fn%L*4lz@dOz6jwk$8EyLz@aNx}Q zZ|hL|L|X0tZ5>Wz|DUfzoBhygPOnIkmEY{1DlP?F%XiQQ>788x%JN@FS%I2U(K#T%?Go;4M3a5H~qAhLW{D${^l@l0?lzjN3#XA+o@a7u$S*mnvw zH+Fb9T3mNvAiDKTBTT;$pBmGbHgO7mEqmiUDr588ww{!@wZ63;dXk=? zk@-fO4Y^;p_U-!dTtOp>DO1eaGP2{G1D6dNLMvI7aDT;aE%5&w!)ivAoR3g?8-5ka zhDZ{T{ViqUZlE5)Ad34hw8vO0;P{5#$bA!H2Uq+xbV)4o#1Dy1HLPWr)U9vHIW^w3 z9J`v{+;(qu(-YIyzljMZV$Er_JjDftPL_nEAwreReAs<6M2fZN+5-<1dXveIM&eo; z4xGQQO&IU^OIhJ|0-c-f>uM(SuY$jWBS-5($E72$fc=ODU6~Ixq@o*}H5@Wh%525j zk^Z!a8sdMLo*hM3Y76h9Trovb!)G_~IfSOIq`H`F&Ww$Yh9|~{CYJH#6Qt4wO#_ov zBv0PWMb8_%<(5ZFHb{7oktH6}x`!7M!tZGDne$`AB+CBK`L|I+X6f{!R2O1EQ=f>p zTb(vMU9DMo7CYl7hNi>%U;o-K`QcxB`Hz1~c-!2M{GVT!8XC{v^vi$i(^tOvgQMT_ z*~T+ZgkSuT-8a1Do8I+(V}JO+e(k?_kG>$_Jv7FU-$p4Ff2m4!S{4$15d_q!*>%0f&O>5U zO0FxAzizjE4_JL4A;Qwq=GD-)J7E92+II76zsOU#)%D4qkhoIe5%KoJLLE+uv?&5T zh*PC&JIL4O*J{RJ+80@AJD1G*giBOpX*SSZOs1LoQk7o6Oqol#Gt@-`V~1^Q^=HOW zq)ER-zHe>dL4d7K^jr`(vtpdrszIGxG8}XHI4IYwlolWZd3PO>cBdzF!4gfi^2G)x z!I=zvvm*Dqhy?p0*T=bT2WTQ1qa`}`VLi@FFag%BUnbDioNr=4D%{Vu*WYB@~lV;VjL|sdCZvN1~ype2x`nvnE6e%pcm-Q zll!ehq3pU~jcX(_U9Ii%Ryh{|ufSI{T9Dptb!-|Z71~u0*TYe^QA24I??_^H=i-(K z{|g9ax`u0Y7>~Szs_xq63Y^%rPL(BbY!eqC=jg?DlsC;uU`_NFhE6w>2MUyV{&L31 z5_2mF3rdxbaD3#l26~ef>${_vcoKjMTVV7jx4YC~-ZtYA`en?l*Y+3XUV|WbXqOF` ziEnb|pxIyKa<)mBfbv#I)CaFiGGK5Q)TNDoOmRIFj0Xd9*k4kwR)1@Hbv|m-e-1}* zbBox2ya3wk#qnpiBiXgR#8Mxw<0R&M`(KW{d++Gs7k9k!FY)dY-_)V{$GTgMD>LTRKsw`4K`fH3 z>)Wd%*CN~^Y8=IS(Hbg;CP&j#yx@(r8WiFzoz!~sUrKyVQ^ z0?B{3_kXS{!n8OYlZL6UYrbrp=?m$LeR0(Ds31B!#A(y0ur$A zE%_-&1B68kVn0wqG0?2W|Azl2$`TRD;7Yv+3{rp8rpY{(n?bFP590a|n~=+{m|1c` zN|9DgtDpH(_AEJqZ1cJ@F@qFJ?bRp>fzBJ-O#b+6bW5{o1BPB4;5^^6tVFd^A5IiS z>=i)g&X(24XMk7EWPdzx&wN&2B}Gqt*a@wxXXI}WpK+DW1Dx)yA}NF5(!L=#WG6b$ zj7*Nqj176~V4-g>FZT5kCMuRQGdh&%J`P&)-B&6`IZmAHd&o+VYs&s0XY6xm`$WB1 zhZl0LNlS;OncN@@xqtHD{xDh7JyvtMHq3gwG(2U-VGPN?p*GBbI2P>mdQ->QgGOT; zMK;5n(AP3S8&R0TqLBbYlL)5;t}tR)+vO`ZL#R-7CN{5ut=_Y|FS|l$wOq5@6?xPr z`Y`|lVe$0XWHvS(;2!dSrdFL+;Dq~_#nt+=LKnGg9b4|4kc4XhAuapk=7wOC@&8cN)4Q>y#n4xWZ$cYFk9d%=5c*~Qoxh>-?!B4E-n};*&$=!juh^IVuE(37 zr@ULFKW0X88dV&My`EvyiN4za>dM8~Op>`8>@#QD37@kGT1I09gCc$#*ASD{MYd@= zv!&Qp=9~{nbD7iyz;g`PrLD4)!9Kdm-fURBn`|u@dng*GQiC(B1*3e~C{N>8rS5N3QjXfh!0UlScu?-hKIzq$d%J%D#J5H5D6tMM4+ZXjH^aG|pT zN++-;FUGf~5ZWex47BMSgLD}HDWq6B}t+~@kNO8FgTo4lhMq5X1q%t!+bzxG46yG5B3mAoOJ3@aW zhSQlJJ&+f zf-l#b)v=)^;okIl$9hOT*nNI@`e8IN4YWU8-U$RDIyuP0X7MmU3XZOk&NyLRicj=* zu`@iZJ>WE}QhR{kpz3_Rv^W?Ko%hj}U`UJ$`FUTc6nX4nU^V6)M z4LDqjmyF$-)}JDbM}r5*4=MX%PO zTH?>P6ZLUn6^omjmse%aP9OM^9LP$$C5j{}qSNsT_|o^aPH)eztk26XxN}j?lkaOC z(y4PO?x3XyA!@zd=6iYrfYfQL{jct;sn~=e_4hq^^1=IBN3LzHLLUrd)!mJb>>;Ef z8(Hr|5B6m}Jp=YXJ2O#ZBJ?0(frv-s3u6M*1XT2~1f!X|{u?s%CWpcU*+ccdlS>3= z>wD;o;vm5GT)b+p}uVhqKX^Hp6WZ*-P7Ll=8W zXP~d&EAupc>h}IpSvj|HZuZ2)iLvg%zR_pi*juY@j$dEAdiwNztzw%K_%r@Gb>8P0CVZpl4%A@>l1FCFuqEk~MMGHuQ38Kj%C@LO15Akxi)CuTJm7?3*Xiw#c)74$ z3-@X31#&Hdl~qtMxPm+Nwd=wh?@V*3#Q$H?9a=easB60udfT%~-fuxLh!VBA1{;Dt z1}mK_pq^HDad)=HkmQ)Xt?9YcrC|7e3DN^Fof8qm&*;pE%OnB?QW!6)BB~KufGaRO zaNFu^PS7Ig_Olklg?TY!*lJ{~ZSh4Sqytnm&;$}pTAH)LwFtLKanqQ?)V?kZengkUwbhizZHcf7yfIoAqrYTb1eIb4n|-hR9n)tmz6NeU z;26`B?%pixqC(18u=6E_kZif7)(mTfga&fBJ1Mo8a(3;G;GNx(YFxb zbj{MsCrX+pEb5r1oIZCJi5Id-cm#OW(Eomyjfu^ZaF&RBW}?1ucnO>VqRfm8P0he6 z(;h=%j@VkaG$V3Npq=mYYGrZ~SGhwYq1z#bys$$(h+xf`7F@dqfEQ_hrz_{HBWx>7 zL|_dwnAfO?A;wlYu>-r>dipu3iiV2jjZjSo>?A?}#M8cNu0wRjpjf|VWXuE`wdN(V?p6zH0kC_A{6D$C{EpX15ax1bod3;6_m zy`Rh~PIQCqNd+Egc$syi=8fkCI>SC=!sL*`7J=4+5q$sYaydj0ztmVI?pGX3Z&|%EkWAYx#UM3_TR7xq6(?a=Y)eLgG zSz_vuV&2IQEmK0SpqL9x_u=Slg`GolB&~QbZ9qkuCqoehbX+Yd9-Ct?x?f=`V3RIw ziSn^f|a>9hegs zQ^H9+TFKxP@8(0+L;z;(h()L#o}R(YEdrC6+{J56xfS0>6D7K0URG;kO^g0D>3?MA zQCEtRW8_-GE)`{-aXWjcriV*RKBwOv z_Kn`QYfs@DZM#jH8)WI3QC*r?#(prr57eXd?(F=U+Y-s6lLIp3?JIa!#x%WToMQ7TVpfi~%^#2{ zWhfJf`E)`|0q!RsbiQL{Bho*if)+sx*kNH5#Yqd+)Y%xowP_Y&7&boc&lCO-!Xwou zCx-$X5HJ@`?jzO8#Mq+&mgj2FC1j_E9uUq5;T#(4s~z?+0=$u&eKZ6GUj}sSgbF4Lk@Sh@Z*fHw2!%W0|ec zZb^e*g|j!n?O9(H0k3(V$aXP=<8{u;#PGZHcD~5d>tzaA^EsbMmDp0jRo`i`G}oRB z^!2?`a3HZn8}qzc$x$8}L(0Iu=34a(<&A7tCVMn&xs}OUuC+>zyGY_HMNsB@hx#rr z%F!?h&FZGvoQB0Wi2dy~c4t!;t%DR7TSML->KuGUZguG*HP=^~4PBc>sLjP%Sldlq z&;vqAvU$Sp71CtZG@v>%RWq-SS?+IBk3;99NOe{>ECkZV<|-(xCU!}XnE))AF7r$| zq7(`iiMS6!1#OdTdJP!-jjf;C`;L1)w|5ukAAQN^_O?0yyL&&k7flL}wJjb4oio^j z>I@9A?Uh}18M>H3JFEsBLO{HD`8(Kw4dfbFLe63#oujvZG=BR>wc9^>7MBm=ST7TN zMc<(&>{-wdS+DP6iCJ{}BDO=W=vdghz|?bQq}O}^?*xlD+~$`P{LFJlLtLaPeb3TB z$R3czq~N8{kk6C%Dk?QrIDd345aWBbxhJ{J2N+^BxbSj97#6x=bz`8Zk+DDnkTxvF z1_6;XU6r;*Ti5*!Q*UEs?4l$G^0KzMxdqcLJE~_#nJ_G2Z6-0ndNiUCao1)aK;3q^ z4x5GTf8S&r$U4oJfQOiuSOMp8WY0xKNyVWd{X<0+=V##87ejgvY-K*%;sbC4^X20H z?fe~k4`M}LPK?s9z%<3$(TDRFwU8R}u|eDd=83{Eqso#ae*jN}b(qo{4+yTQdrFJ$ z;GPpuQ~g)!$NBbo!)BU8ipq@|Yn!K_UIc}dFIHOM^%WlHm?LfRX2&PwZ!D~Y>frnt z*v&|D=5ebg7i06h?=LF@*7Hs(x-iZ)rQKbE;ecWxNGjx-hj9*s@W+q)@3Du&KLhTjswPF*Z3mz^w_Vl7E0?!YnEhP$s8!itws|vm|w?>&Y5E|C*yo(a@esI(PJW zjAdS&zE<>FhvS(y{p7p%KKzf~z4!GTI=_v3_46oJIa+(0@@|XDB?{xrAE2@D?D%^0 ztrGihWO8^MXIgOu$1Fx7AY8=w{pSNGN-={fanSBdQ9rSsX1CoaJMk-(tmuAvYUhl^&lLbG& z(~*{a2*-GG%;$oZV?sF?yuxN*%X!&UUYV80DDIfF7k13|Suro;432nWE+i{7W#V$u zE)BrZj#?Ip#w{teGj@fE>ZM?l2}uOytH)BRwqArHxMY+d*9?uCU@)&21W^d}ToN!% z5{#>gyXBKBrVton`2#km+1KEs`5qX>t6r?iWOt-UoospQ+Q!&z`HFm2hJbJ8SV=Y(WRMh6a3MdKrGjEwAZ$dM~n0Q$KrF^YkDdQ4EMn zH%a3Geu^=U{L88Dk}kg0Um3*!f~01_$1yf$o+h@|e*BWupd46go!SRVPm68Cw5rNk zBU9SG1|7urj5nRlL*==ADz(J`K;a@g=svz}0!bHB_@|UWmyySDNenuq8mZgPWdbe1 zRln{zivqKD8n(P^<__7}@#^uWCKbjDY8Qxw$r~cijRhp>wAE1iC9;F&mobjg~g;w%myhkTdMFVX{0j8p0Q5`rf95BLeGXC_b@7m8QSIj!Q| zu@8txkcLHY$|{?BK5ZOLIpnzrQI7vKZV-#xn{=~}Yrg3H1#6(* z_xaq+Z1w#-a`0m910~|{ehFkC!YK&@L7BFpXXL^mvOBwDs<;FeAv3*inQnR2>f!It zCx$6+s#eh}QS3aSDf40!>XRy5S#XGD7>EJT9mi-4?YCk*)d$9jfygN~n;2m&O%>#w z*X>yFx^Mc!4}RyLeDnj4P6G4ii5c%<8R4tDUys~oEcy>g+g|f?q3SMwizb4t?62`M zwKQjokJ73HlC;-2)NW*tJ%$70V}nz}Pacc<_iT3gXB+VM!=PO9RX3M+2>QShkcr!s zg^tGNMzNo7VS`6Bhiq3&eDF69y8%lR?G5Q&>dKd)EDNtAUxdZtued-VZFH_92!o$V zZIT8SoSRRSm>xAmFR=8l$2PznM}g3O(e5%w3Q@mzpF0|gkHz4BFGk-e_Hqvyn_M=B#@6HlCf^6B~d>iV<0*Wdc}fAbsv_P4(C+yA%k{(J9x z|3CcEAOA-`^K<{?pZ@cI`D?%NTfh4UpZ&Lg^5=Vn_vlCa;@<2?Z_{Q^hzTU25UMRgFPjd&15(oKNOZ zcw{l#IDNEj>1ejZ36En(v+hS*mAsSgn;xJfHG#SAGGzHJdRIbH*mom+Mr9s(?ArQT zqVi53h0Hq&wL>qn`JFzxyR+PR>gZ$oT6LZH372xP?{fQz`DZq_BUAYF(Y~V@lK4^r zWerDf=CP(B8*6C)IDM4n)sJT5Xc1M^IipezV&?;I+)%S;x!pFGq4()E*=h^V@5uk2d9Le=~LmQp0`g z@$OWOM!S`E`ppK&4X(ZQ_)+yk`PIxm@81~oGW-Uv{`Sxi*A2R4{@R7rC04#Qio3IQ z8Or$WkaUBImve>BOHbEdvEl75wJ>is<6sl6+-{qQe`W2q(*7#iT^0L}StJF`*x2aQ z$nWT|#x#0O#wBFtojmGZW_GH8JI_*)CU$L}iKzK-$G$pXcG77q1d``UaQY&WjBZdglZ2T7COPMkF$S+}{oP%!M-;d&YZ`WW(1}Yl@DOrcl`<-EnXs z>QJAX-yv|-YP9q9Gzn;nZ#i#CDnpG+^`sye2kwGJWx=!VDg)ZU`sz{`-^JviB7(GP z_i2djjP#1Y!)##lS(PZwA#GQyQLogd#>0xQkl`$5&V2YtARTWOV8=B!ui+N#VkT3H zf`J~tQj}x+p&J&px9uXUPLG_0>Pw`(ZCO%m#nZK2%tr*N0{kM_u!h!viQM{1D$F-b zS>M|C4yc^-U1Rlv_m|9zj5QF6m(~z>cVR}Lu;@|Rm0@7fHU^9-!hfNVLar_WpD}FI zrqXszc-v`SmMv*Q=6FSzml*+PH8!%d!x~k%5wr;e&oHf6B{{GVyECtm*O(H$@y5-z zOjf`?bjXISnIX~|e)-k!+0*g697n$VJ$rwRW0&jynvN5(PO7Ks^*tQG6>O`AYt_!w zUvxcoVWecqPllp12}vS{bP$@GZcukeQgJ6>$(OJ=E29uNS&a-WFAwLXi@UJZr|u+ZO>9Uq1U> z9uO+)InACSRuB8Pe{30;E%)7WXVK%A1rM6vzK)npHf%1bYyNVa zRe4Rbb`6JgCg^Es;CW^Dsa0jTHcPQc+>@*$OjGbXiZL z$Y5aFb<-MXyP(cF!^}v}o3xlPpx9kt-ZYIq@fYAz_u0{QfA3QrT~D{A)*bMm?f$2- zr`5jQOs(6^)HeR=+Eys#-OqdXt3>{!BJWRS9`vw(DI8SySkE*+*}2*0V1SwN5__Gn zUvWut#y+b9-2un73M$)EqoPMo9}<+U#x?rY9g)h!0ZPlDL$x*&g1jU6FMj{2;Sr3( zo~EAy`kV0B`Tul4DJ%Z&kH4&nJhPU`v~0STrPM&5UsA^4n{nJ}rT)#Ry#?We<2LsR3UoT_7AJ;G^pYOsKUQb#rlNAgk$r1)-iAAS~e)q;lwk5APS z4ww4jc9%PY^C<8QKXBTqCtM+k2?G1GKp=aVwBhF;f6rd~(0leC=By)KzoFvSJM%c` z!LL!RVq*LJb8m@P(Emn9uyPu>i-8alMWud_EtLEXKNX%115aa54apf5eau6$E1HO< zfaE+>?PW=+@LepWJ@VqKZNvOi2(I1oJo0=ZKh%L$!k*%HR2=W_)awO5%jyTVR1dX! ztgV{Du82vGm^h&5rr#TkRZLd`F;@zr&B`ONr{ zC-&?6`i6rZP0r;6BQ?d0*IFGkH4~O}r4Imn`HEy6w0C`L?urD=MpmOZfb38jGrJeE^Er%o-e;q$&WF`IW>yud*TSUS|JS4fz2QJ;dMk2F;-KN!Lk z)|Llf*xZ?4GbG-&uGl~sRM#(iq{6I}yH>08;#~lzc=(HI7meqRv=YEE59Hg0BNf~J ziZCKkZo&2lt+;bd_U-aNVRD07{i3ON4X-*m40^?S0?3+Z(-mKLcCb`Ml-((e&tx`{ zKaWjV2Q#r_zOmS`wEA2JhT9!*v^sXK?Q~q(p|(#ls4lbxTibR=wASk2&cC82Q$ zimNV{)mIjKcf^RE9l}IPS7M|2^bXsLMLdVER`AKuX$ZljFp^`-swG0GUOm2Zfu%_U z!xvvcSjjqmYlySsfoxp3aYR{w2MrnoL@n|;f6$8Vr#@rq5z3q5fd4~2i$}YxM*{09wwuMTz^|?ktj)> zj)@ATIWNCntJ;0db%Xr2j?gQSk~*rkKLI>lav8MkvpXf*EeL8XK7VY zhSYFWTQ9rZbv7D3TN`u^Hhy~~s0xv-kL}%+&2G@}K=;$Am^@&~OsOlImP1#i?)SOo z4lpbk0~x&6MFVL`A&lE$+J$YAVPfi0f>#ddytFIpOGR8XL<8CVS&`(k+kNY3AdCQK zimWdsUfAr!u$NN?KAHn?)vjzVh9PMpNuF))E4{v$F6&YAFU=<(DPw;*0u{53tswZ& zOvR~OX9V8`xzxm-O+{HX|I;XMmKc__mY>r9Z^ z7+R;>p>n=`Gcs{8z&FN&CS(%EV~l}Sxi&L&4%7?C7B0w+QvPL=J#Csc=snNbz7gFJ4xmJf zrc-NJY9MHM>7Ox&BmM|M?r{+pVP}b-Uem+b)%smMyhpl~mnrY(%M4TCA#)x=K<@%@P9%JA{3=S;7v6ge8y_ z0yEi2Fc2mamSiAd7zmj_CJO|T@&Eff_rBVs_ClD?|4H@EyUV-puIHY6?z!irvi*T( zfbfKcicnlBBz)E}p6@tJ{XLq*Z9p>6qj-MC^c7~sJ8E(k zy-3b_VSsj&RFSToa~&T*MN~ip^u3ylyma2GrUD~SQ+l;seG7>=pI+me=#8=U(OhNe zWHr13n&zkw?-Wn6AXdAi?8!E4QDM{gVPu3W9G~QD3amj(Nkg>VmEoVz-E@C6ujykA zS6#oYogbr~3W>SZ1!hoxMMzA33~6Y%|I8011N1VlG+2f7z0|K$%`6rrTbkV?p6%5S zBN!a=_p`|dQ%uGH;=w=P-mSgH)-E3MDf$uF8VAou^LjcX&T@$7J?RvFiCU+ogq*Jua=FUSaA66%)ZiIy z*@-)Pm9i6}TFpFM{LDzUGsK?^q#j<;YTeIGSfN3hfCUx-N?(1qE|*#pjj^SY!kLOh zMW8sArJiKEeb(77t!FPv`OzYrX!7uEg&AxZ3!$-iHUcCBuyt`X-R($i02C-dFfXDv7+H0GFv?O-toXJ}{$l3D>R*U|po>;yvc&=MSm z(Q0<)pja&cyW7$G8N^*-=sJw;TvK%?3)5>WEAD7vnm22749oWQl@0~ySG#=rZpZoO zB-{^v`_sWmYDPKL*=luN&O3;Cnol%*HfoJUBvDu@t|aszj2p7$r(vJYltro&TrD|g z16+wjOpB;sk=uthAf9RzqtVaDVpW|}kBwqPZXc>j$-tsTq4Uv9TjofggbMs}$mV$3 zc*dQqG6(X0m30r>OWptwOE*(~$NOO&LpKR;+G<~2;sAWGh&?d7j9whAt3)?&incj6 zhkeQ{Swe@R^PH@%olvG*KAOEfRcpx8JedJ5+EY2X!a*a= z1GVyqHZsK}HZ0aDi@!MYgb^&AVQ-Mtz^rYEW^*QZg@%W(abx1>M0QH_VsMlsKR5 z>NPFY*NnL}q=rpY-tYKu@{g1i*^iiLK#6YrPm_&%$v{vlg22|41m`!Vl=2Pm(`89m zlatp|#R`HgSQD&IgoBWlA(hh3kwisl&;aoWQ_;GDP1A-KL4z>+WCk`u6E#HQBa0oS zc~2AU&-_C(3*s(GQO*w(m@gILa z`9-O}HP6qh@O{}{9Usk=Bq9*u(`bt;v8TGizU0+nUHa84XNTDTFD@+Vu&od$YX0Fn ztb(jvIVY|Fo1MCtZYmqg8fXDWKdLmFC8dq|{B!7Dw!7mudRzs;z=olurDkpPhrM0- zi9Rezk1#ffg#2sr^HG2Kd5`;u^4T=(qkzq$e)IgedjW~cj{YF_JRyce6lv76Hj2HK zr5xKu)s;S|c8jt5c-!t0swWe>4?;IT&&ssV@PR(Z~O4K4qp`h`slvwmy z#D3j9tF4{|-z^}K53ILI-Xpp_G`>(`5lLVvG~)lJD%rTfSkcmC>Bk1*DSmZvP*VZ4 z+Cxpx?$WP3bLZFI^QwX8FYNm0pM7A@E57s2j~^WD?YZs6#mjyu4 z!wUxQIsbJJjNSE(+4&FtKF z$=Fxl^t$e;Ck%Y#S-&vxiJf2j)!+N{rDH>%`a0l9zsJ=-2KUzW;$^Z+zp^FaQ0&ZF&C#e|62j{BZxjq+j=Ur5DWn(v{Z~pD@*b z)@@%HeDe=p_Te8L`q3vge)(;;{&?}#>6etg{8#7vWId2mRV zsiuZAZ0tdBN8%>1s3eRN#y>P;#E^{w{8k15C)aF?Ir!I@)-W#=#lE=d7A5AH<(_#( zQj_%^#@gB$sTu8b`zxFy5jLu@OJG)%O)kw#aRylsWwt?{Coqm#l6vF|F5!z6qv>Q@bNLA1GFMkZ`=O!Lyw z)=O(`H`x-Y-6vC9$W?7w=RF_ZmiEua*W>Ff=GK>{k0~Q4*^mKo&T%D)P8YcKlbC_7*VDTE8n5G{?)c~!>LqKtJ++ObjU{a3RX5lWtCA|Q z^xpAFRMA4NcDVtm^mZ8Kvc)Q}v|O0$k_QLjX4dQ>xgXHAEYQA)K>Pk=n->Ri6w{J7(#XMB@M`N=0&T%OM$oaQy*Gdklgsyso=us%4oz8=pX20gvQuP#K%_S)nkJOefgLG8oWuwywyYM-by5@4O%s7 z5~{;DlXBAFO(NEMN~G?sMD`1Run~QfS^qG<0Yl`8q22jJ${w}F(l43Jc8x-t_9C}{@%o>EPZk#$f6+}O}F9T#x) zx(*#e?BQW}=RX^rWuJi3GKfVQl*%C0YMEhXATPGv<(0O0{-Ted^J+Tme9%2BJgF`k zFK?daTK3D}l3-t?kxs?vkZo(-R=^|}dr(=!zILF|>&1i{qu0b!rzUH)7@eZgd7rxe zNYjICng)>;v#&X1wp^+|Bd$)Aj=UuC)Zz`x5&h`J$Yj-;$-=7~;)cl5O5&=$SCLN9 zWIv@XUD|yc7Dqv?t(N38J=LVd#G+RETjhCGd?kb;LFvlml`h(6gnu}--FHujUJ=ZitLym@oA^;VR9jV zq6MfT=!l3Hs%T70&lOosba7MH;*fFdi5ToK!|IXM zt^pMFHzEZTDKVRGl$KVjuDrCIt5zlC!*>FGYMqo)nttedX?;Rew1hu2%d_1x1LKiV zQ7)X+S*i;8Wb|bE>zT{=3@ZzggQ9^V#ay$)Q6QZ%7V^Q_!qysD4Bssy)$<>FI@HB2pq-H%UuNAW_+HMTYAJmzE_@R8t%q5CPgk zRd;pN<*jF0Pn)w>8q(6EMA?oG^-UZ;6zL3%^!;(Zrav{(CbfN$SBnb3$h$?AVB{SX z-kH;tDU< zd8MVl>|STo`BN9B;{&GWV6UoBvAEGexq#!If@~a?&=xu-4bS?y#9Nw_&Pm$_oa(QWda{v{03%Fy!b|t&2*Z{I^5W3Wxa3TvNg}Pnj~veuVtccvZA zLn9nyGoi5D2IaFxQJVrn@k!cOkEz`DwS-^Pg?x|VyR9C(H9gkjsVy5~d1ok-Z(c$X zG@n1@W|p)Cd=`RW3`SLlf{KhpUw8i}Y_XUI6AqtMy(;c``@Hku1$}|U#a%f5lyuzwY#}FJQM&ck-@}lPQ9JAv;12F$BSFRTD^Nad2l*1Z%oXJOL~%yu zVex>>Rt=^3&M>=BfEnx$mw27w4s7EB9i13TAJ=g#FF4kOh9cq{(+8^+PMtSIthJQ& zM(J0#D3Shwrl@{{%10a*O{WD#bOOhJBanFrEN0ZZ&~R^^&8i8~L3AYV!C4RAt;Y}F z*YJsw^xKu9I3nQpmj z)432bVMIc%9*exxcezY&{u+~gEfK3CB|#}JJ46~mp2d4%_n9KqY&&lCsjZ4jKCQ%F ze|tj>+t+GkrwJqtrjuzps%2O3(TS>zF%Q-7C}|9Tb(_)#wZB-YTE0;vITs{<`Z5 z*Y#ki>bmX&xwd3-rmO9G2zcz{b#>-uJ9AhCJn-!1i7@SFco&VML8?ks5cQPiYMgdvtL|y)(jlmp|4c1J?}o;xa-b_ePnAoFTVoqGhlBAd8)iK-dOxxW z`4DZqdlk|^i%ur(gNdlhdzo3Fktq(#NJE!(lu;_7H7Q&ZUs1fy}Qltis)2~tNg z`n(^yjR{N7CHwNVPuKEU!-*gulh!drXn4V*F9uuQd;A-;*40}i57}(I1e>G~=i#^s zb8(YKWLu$1WW;#pe%-)9WEqOoPO6>oJ%Bukzxsr~>zQO77xpAYTuJ)gE794*P(4JB zLoIu~>>dv>>TA^!wT>@fW7}{rtg?!_G2ih}a#J@+5URA6?*=KtAOv~mo$Ogh|99@L z;xr@W6ydu5{rj&Q*w@#V+P^>9)^q*7{-b%%%bA#416WejuV!nE@%E3PnV~%1qoh^rxAn zLX*zy#K;JYr9D~;^K@7hE8{&>B?BT7nU~<9E6waXs2e$1XUT7to~vdu*EdspI}6}}^kg|4qH}#5^fTsLLpaP+gi$h<41CqPu`o9U zYcjt$eG($Y*a0EVK$^o6GWmeUp@DSxs0%|M>6w*zG)*1K%`6cfxr)W|No$|UNc`Pn zilA$O?o?l7w=m5hv9J(*Gt~|44!?T_YzIpizOyv!-Awo8eBU9xmvi7-mJdj*gB+1(goRHHT0Pbb25<4XD{HSP5AXsx z;8{i0TGd_Y)70ZZuX#J_2nRcKI8;~C+Q>x>v{m|+5v854J(csV-^zHzX8200(SV?Y z&&#l9tBH|->%zb@{#)Hn0T|BqSsPhbe#Y>2yLX^{KaiqYQ!&*wLf%eXtI zR&v!*)YiOI8_98ZUQ?mfJhp2xHZe7HBs+Rre`vQl1JTYac4)EbxnFw|(lJL-5Ykp_ z)#}T)08JlF0BV+~Bh=IL-)D;V{WQ$TurJH?+}EnbPkfD);g17{`e3;ac1JM*_ILa- z;TbR(%JE?Ud7F5gd(~RDzLaGwM4e|-6(eZV;#WhRN3hd7i((1MnfU{4ei>lB*;Drs zZ6RHy+JTC&P(wt~@<*Wg7a}U7Axv83ydFfKz9|9>QhqO!_vKGFvQTj^*Z=2 z(YbjdWgFr|)EpCnU7kXxDT5I`!c9L>_@L%Y9fh?Svj-6<#GA}0sbsS>4jPJQ7PuQy zQZY6q?@QNMe;_^z(ePe#4mN#fQ+$0VV4Zp~qVGiWOe1l^`8?TQobgIhyiDeUAG-I! zWB1?tpx~!~f5h)oA4Z1eBXvLdEBv8;QJez}Y2CsMCHibYNWX?Td|evV_-!F8AxgvG&b2K_VA&7$o+-_ClP(*6Lnkaj%k z=ShT&lz?Jz7D#t(7q)B&)}0omYP?lN=Gc#3DTEhnBX_E98{5BUz7JzFw`B(|tRF0E zrwyVPr;lb-!aJl~i{7fmir*BWSUN4>b>^w!v@p?-5zeKKQJAV!-iqh39X z1=WnI#3Ry`M0Z!iXs4bsobK`F(>Qw&wDQ!Exs^wvO;%!ZWo3hLY8KUN!mwMt+BmzT zB-38ZNM=%%s9xvNv#~SD?K#%> zuKDb}4~~B3k^jyoet*k5KmGmFzyE#GwhwJ_duY7)!+-eft@q6T-gn#G7rzw0?>R@y ze}7lo)%PrY@HL$ z3?nMjGHHbz%wolE9zlO(gTeDwB)a-Ea}~*XN(W6)ibO&rsQe(0UYm)6@D5c~+(3ZG zN~Ik}Qi^uKA^6ys;XQv4ks5%#M3iVLg&fU>n}!i?>&f8jpsWz5Vf#6Hs0FCvH0W77 zSbitRhofnTL;hqM?iV?&TmSLjJ<0xkfs)N=xFmWvYE4oOJBa=uVA$>nMbQK=9H$TY zwG#&o#4TXpiy7wGn$QP&^y>v*2ON$J{ES*ZYbdj#*J9vk$D+FJy4jACRbuqzc9%Jv z>e{zoa{Lc7-R_Ad+NdGGuUbr4Es=j62z;pddT%qy(?aft8X?V4@eTD}r-dHAW<&j) zoTc;H`bX)6nxsxi--rjcCn302Wl4#Gci5r`h6fwQl6}GiW5~}6`&^s)0V`YWh4|%T zbLAQ#fgHv>8;4Ijs0GSh9bkZ3*A-doD{R=4xFTw6iz_uvgdv!Gpk2Lylitwbof6YT zv}}kdtyjB;0o15TNqPDZzJ9puJ&8( z;R_$}@SY_P(er2i?&jeBOn}Z^>27v1INfA#8Z+JSm7P@QtBUm;a&-v8ePMRVdt>Vc zd)^foo2s#T68;H`+jZ|+q$tfOLASd~3SkjJCiRRL8jaZu=Qf4J-Bfjz!n2nfxosZz zk-$7o9Y`M9h(~IAL+%c?BSs?h_a^e?EcL$I#otmUQ7y=Yf9y+(?!f*_G#OZ z&*#`ruOhSssbNUHL7+{2cW7*_C(zBijZ;GDG&(TEDpjTtl^z*WS3NZ4Zz|Q-H~~13N}2@vy~5;2Srt0pU+*0Mv#~ZNP{tkNky=lKOa2vE5bqg-RZU z`jxQRZE^nJ#w?W|kBi`>EQwshc+U1Kw|q(U5*-bPAm~y^{m7&sa+p-|_x* z*1UztGFGaH_Ocm*A#cnO7O^V{s}(;;LBCdb^t`3#mk{;}fkOz?Qf(ru?G;OeEd z7EwQ17(gGQ7H~thVPFi39e@P_dsd&+xYY~3mQ994?XN6|>@lK{4A}hdML+gvDAmWC z5l=2NZ`LLPR@ig3#Bep!`HmWzupwQ2((|8`fvB@JR)=v-RXCDhDC8oI{S+`F?M%IA zRO;k`1EKmX|Em==h8iseRxr}xp+6bMq2ARsR3>{MMi~h?m_U~vgqD%DD0U=WBPZ+H z$m|rARaHccLXPAhqCEqO^u{N~4kpGX4ryQPpmB`z=xRno36>Tjjxm8fY-CzgO#^&o zceEABYRj%@nHaV>)fD3s>9Is+Jk&~vXNk;ImP}b}Vo7`0UQ?~FbdvU)p?2t*lJ9#VPu(zM-%ueO7$htjd@N!@wgpnTyP&rqjpgW_z6*Z9Ni%s?oBo(2Y8$Hd z-b66J;jhWUM)HLTV0BhmSsJO zwgDvbC~I$#qZ)A0DdR#uG0tbxObKhN&XVfGFSZjjl}e=Nb)!m=A&qT^7&C2&s2rxl`? z3RAqI8&lO}KmzFAM~{w-VX)9`Oh2KTX!5Wm`d8-53wgc(lFL)ul|>z_alT}24b{^x zOY-b)5{s1D29}D8PL(j@8whk-Qda0|$N+{WWOa-27wudQA`r&z78^>-iJnd-x(YpG z0r>>A3+Z)OJ>5#v7TFB6+$U1#p=Lc*=G4k`4#`1lVAL9*__n&iCX~)WtC$1#-#Uku)j=@?v ztf;!RnNztlGi2tUL1FM5_!ZJLv~q7@dTE+%I0#pgXPP46G`5P#tNJ--U1_w`TCThz z6|6M2RlWZd{7a0$GYXj7>|<6^xM-Brdt^2^%A{5ZPEGn2vllhuy`WAJ5f#q;^yjJ@ z3BOKM4pT@~QR8`cc$H&8Xars^Fan4S1D>uqD$-vrM18Oj-D=vMkdx`;8937UP0pwe^>ZJNc!BIkBoFW3%#>evzn zRY=YpsvtL1zl`xq@mDK5Db^ao?2n6pj@D$uwwWC1sw z<{MmM1S|HHKF7*Vh^3ZgRiI8Tq%RzRSbr}ndo@IkXlh&5aH5A)7k#(EbT0=2YMnOf z&4&xQHN<2L`}A^teK9s`;SE*YCJEg1c)h&#<7)~n9^B+OyKFMT+X{710eDP#rE~1iF(T->|P~( z?JJx95_ub=8clDOkV>G$j1}i4;h=erupCNd(x?ZeWKfGt__n<#I=4{Y9*VNN38Gnx zf?b)sI&tU`2`D{E`6T8`ct0KRjAl8$$`ynOnM$|R)L~^cfj1OlV{jJo-5+W50bW0h zNIklt*&%=-=fClD(90$3LE`ZF&G?$eK30*w&CI+|Edt)*EF)wAnAH=Y;CV3>N=CgP zVD8P^vyd>V+P*-`Vx>un^h_FEY-HZBy*JpOP+W?tepin@lp3FKfoK>?H|R_sN}~p( zu7Z6iJ>KW(iJ`%o`t+gUBZGDAXhSGW4^+s|7_mJK!sA3BJccp@6V6U1FiM9qBV)E8 zHCdFQiS*$RWSVwqhcm`vZf}bYs6F_7`U6*d@7U*0^u6PW5B?nuCJW=XRrCC8~)1ScWukN>LZWt@^*>N#5z%o7tafDdw^%{^!AD#hx-h|pAg{L zz_W0l1w0$Lo4lw66GOL+?gYkoZx?VE;ezsi0`LO-6Trt2|8n3j0FA$wh&c%;?!(;+ zJePR=K$UR}5CcxiO}wLW1BFD+AfAp6$AQ!G2QB~;#9x&^P@6N?06Qt**}!K2w*zy) zD}mF%tAKgnc{{nqoqG!IW#FZ_e+Bp?+_7!W-2jXOm2dYrUyc}1-*Jz3u1n!SwW~`w zw+$ErrjLvw^61!l^icH%b!G2K#z60fsk;QTnap9q+e5r8@J!sK*DXjo1}6d> z4lsKxd7HxT*ceRRcd@IF=MhVZ8`Mb_fXc-JDNJ0 zmH)s%pM7T_J8)F)zVxX7e)iai++!m>7LPIR^LuR2{K=-lk)8=F&tU(kmE&;VF&}T_ zHv3NB(BP2L89FkO7VIB8Z0Yrn^rYk-=}DV^=17l~BbynsbS8)U43e(@{?OQ%;%7pB zs3%`@L=^x2cLbarRgx-mS~*^^!C={%5~Jf2FC&-)bKlf-xOxKyn?88^c? z8DJMv3GSZc34{AOe*u^s>rMvP`80Fy>%7z8{s<<6yX!9RkEuxVH=ONxxw$d41w>y& z@-h#*o+|(Jc=B=}?VY>^cx*jaW^0~)FMC|{*9sD1K=o}w_5BWhBbjVkuvA^k3#QS$ zCMfl_f=3T~_emCwd*zRQz8+xTWcoJ2v26bx`+*~wI}Tq5ykmH%_vq-6Oy zMi0jZ1+(d-!I5n0P39i!8UnJ9GkUAsbPz$B?SQNkdNG6kfm%&u> z-N1=Vy6Zi1Ph`5@3rr6Wr{8DcnXZe0ne6S|3|S;+y4D19z>%&&H`q18pTX_`)!iQQ zVr4PxYd$4G&ImlOHNAAOl!g z42=!rr-g+rDTXq=x3Y*}MKP4YYNIVDhBD)6p2i29ttTEbdoGijO!s5Cs)=tJ33*ri zS|?hpU`^^s-JFz9*O;pl$NR^zkI_}t&rS5DCK#0S#zcpYtkcDIXo;1zUsQ_A>lyWI zMA(sQt*IkH#Y7JKg)%CNLMby6z_ML(X<~HNbi@m1e3uCWwy0%9>!-Z-kSckl3U|FuAb6_Z-`0J~xyb_-6rYUy%dxwKT(`ip#>ya+g3?C#R~ zOz`mr_xEU>He1}^3rZqxvNL(KEZPgb~De*-QBef zsQ6kR%6_ci5e#%)Og?VU7ncJ(Ay_?;Uw*9o`$oFDJxo7U{>z1RLCDu5T6dwdvn#)* z9lEvrTB*u~?$gs;7vQh&3Nqi>{Mpqq?+@?Ww@=~2`}P~`4X~@HcToPlgX1Z|@xfk$ zDLmw!PVS#G*mIy_aDCdl*DC>TtjYh#XwvA1zU=6z+~a|M8HWyt=I;RKqIrC1QuNj& zgIKV#ESQ<>%iP2Jn%@Pd*EhOa=lS~-&io$XxoDo>pX{1A-j&=h`YWRAL=VcH%JvyO zCOYvP-1tvxo&(R-=DRTOEkyWFbZfLOiq=`t`bz5{t;bj|+WM{vd?If8?{a{F-d+yw zeGx1xJe8eU3oy{(^C$d!^C4bDpU-y%|DFH?JwLxcxVwLW^hCcz^H4+&B=JAcJC^AJ zR!jMW1~lYGVti;Y15CE#J~}?!uWiE}Y_{k7IY4KCpg|hHiDY+Kb8HKsvwsk_OYt7aH^D{MQ>jm81 zqLqL>0qzTMe}LBocp$**1I!7Q*7ubI6bl1)PjL4HcXx1in|pm`pXCE+-viqBfR--M z(gjW{Jzze-nE(p`+B#=Flm}?#0a|&0A^o+G{+g8se=85r$^#7FT?^k`3*TJ}-(3se zT?^k`3*Vg&{`2NIeU?Rn8b%kT;XM~)08M9;0|+mgqC zxwUFnL>FlmqFGvUIZ#HqWx5#C4Q>^GC$R;Xth;- z@8YLNPGaI4%Q68UEw~a}h_I2}d?f)%v*1?IX2;22Xz`p| zb97`x}F1p2q3jKAFye&$Rv!%bxw-(9kVve+- zi#Vj<$_3;IDJOQHNt5zbNn`bHx138jtXbkuT7+YP8#+iWqchc{F<+uAOB^wv9+cKx zk+>W7%a!IyyTbb==6-%B)pNkF)Pb&2an5lx!=C^DzM%rmP3KNWM7VJe`7sAi9kw$n( zFLDP#S@`xF7W2Xo9=UH0?(Oa#3xA;IevY|${~3DN?w)6EtqXOX;eOfRxwZVfz}!J> zhw{A8hllhc_l4%G^1sNQE)4IV>0TT{9xVt7)Lwf{?a4npsO^B-wbQ+-_N<4;IZ<+t z{EFH=>IbcFp0*!^h;hT7jr~Mew$bfzOTAysg*SaW#GPgi?b~d9)%r;YJ_CDSy6XMt z^(}7SFYEm@w5!G1eA{MNzwW=yus?HS@QV6ny`Qr5;Htad(Bf_#2fiQG`_-E)e%&4V zjrpn{z0scP{px*9?hvg8&a_zy{Tab08YlH}91!Q~Zq0^uw>ci-c9zYq=nw>UerSLiTj zxtF)N-_qh1<>K7uLV3?}A2j!M+YM~Goh<_)To;D)&vvh9af<`g82%eA?w6VSy70ZT z-LJH`-`e7St-1fO7XQ~;-1nLL!V3&APTuC-S4Qsp?cwva_djgzn?w1|b|3NXRy5>a z-*n%O1wLKZh4OEAuWWIPqsw^uqNjegJCBF!c=;DCyzYK(i~Aid?q6?l-(&7N-hX?G z+v9oq%QF?CsL0!my2G8dXt+h?;SK|GyL*p!UuA&s_j-4G z8V{8Omk?e1gd{=-l|K34sHj{CSdej4JR<33^T2Tl{e{-%Et{uYiF9u;oXysWuQ zcx)T?5j8Jwb8q7JK6j>D=l2qR@2Bj~;`efXAE1xCg5R(3yPxvBlHV`#^W|tx|Md;& zzo8-RH$T#j1DpS8nog>EI-~#N5<%N`pK-) z<7uZl3p2eNjS>@)KjIxon(G8dwI*vp7^f|v>%HhF&S8Ya%%ok-wjG|4<+K4rMI@oh zav(eqI7UWCXGz*gjjvfP3koqRuFf?jB63DW1tS%hU-X9ugZu}c5|qp#)huzoG(tE! z`)v}jtT?0^RrZD|db=^=5#>c6r>-)*@pWOSh zCnUdh#-9F9JnzuIef{!(Ipc2%KRx(^!T)p1hxRVN|NIkwo_^(a*Zu4N^MPG2{%7)c z#?a?)dDj=eeD>dddDk0$i2Ld98{75eKmXuwHGJSonz?y4inNkLR-6&%Nrl z$ET6&Jm99;YPg=`w`e4ePs0(o!A*lV&Wlg4EV@Iik8|)ZrdQ`UJE-;gS#hnH|4(ds zql|1)o;;_yFStJL6{M83_PijT&#l7c$irti%pDPIsh~nIAU{9tZsWP&F64R6jTpb+ zN3s0;q8sJ8gnSbc-$3#yU&|R2>Wg_^Vz!>GRNPCsSKZ6FZ@4}2S=#gp?iJ?jxm=DJdyZ1S%FRvZSpCh> zqh7;($^Ao2T&4fT{git>+`^)JgPWuOToacp`PJO#+_l_MFA<+(9KF@eEzP@oxtHC2 z+$+$IsF!hXha)kKP}dxz>7B-T`ff}-ioNl<>PhG$@oU=Rb0-&|h34s3@8iDWdgAl+ zs1EKYp`pdU>Wm`-@2-m@OhH_>x$1;)?9adp4Rz< z@vip8=U12ACmmAj;G2c%C3izy{ICBVTbNmLH^mng7Tk^Tg}ayB@4AJ>RhNo0E4qW+ zm)vLI5HV`v9C>t~HEz-MJQv)5;d$QuSGTatsEK1b)cqkmuqF3L#)-QnE}ly|emCFx zyz$<8<99Dt+@HC-sf{ndmCCsXxKFz;a?iUjac9)TQIzifoaeH;jpvH{Z#-As5uR7w z2=|ljFY!6$4#yX#XWZA|WaZq~xi7eH7+34o_#)%zui>CAx`8-KX52m8D{ef#SekZ! z16Oa+{VjLKU3`(2>gSGBKliHpUv80c^j)_|OMQ=f(fu9wCHH;qtM2dNzUACte35?s z55|cb<$1;Z5YE$#`$z8c?*DKvxqsrm9QSK}5 zc)SQ9@ly_2o^t>0iYuqwM7+pX{;!ji`yD*bxk>H|E*2}oe~WWpf{TQ50=F$Dj^Yov z&$zR=&#|g5k%znDC>VF=@Vw}Da4))N;8S+z@x0`I$bH#ez#Wbu{#Cb==MDFdvC_<} zdkpuAdu)u|Sa(sZG?#Oaiy=Ml9?u;t!M*A(j+GYY-4kQt1Kt@I2X!W1qHkOpE0q`A zlesgNVci>@3;!Hb*c4sVY;Dwks7g)YR=1?;+G<%OK<;huN< zxUahXF^qh;V!X@=iaG9c?)n%fwcJ7O6<3OvPb|3`W1LuUhhk-F{-#*@WZvBzD{thG z1I6NrOYsc;=gx7;SoswAKgPK!cOt%YH}=%y;W}vOrIa&KIe{bFS=3g^h54tw-#Tfq~koVx=d^t{4>G5;{GnSOyACOr_aPVYUNJG z#gSg;UUqlH#Nj>_UuN{(8H2WTcg4gf-iV76`pkGGcei^+tU}5;?zDIegTY9;R%o4P z#W8&03Na2dxPRtecF&HZoYc+pTy?(~uhOsXj-go9{W8yJs^A%pGI#2qd&wpWe$z3hIO`;vPx{#EzFSQSk5 zlDN3z&*#4AUJ|R))-UB=axabRK+4N`UO}c;I|NUOSK;?Rk9*m@DpqBdd^yh*_nH{` zWZi4IpLDN?SK-0GK31iEUdeOSy^-g2_okTm;;)WZnXO(G=iHEcYpl9aareensH?Zf z(Vpkt#xt`C&nxb}xcKj{o@TssMG0imlMfzsbGg-iptP`|a4uTG9PZY=t@KZSfVx;P1s&XG-qV zu~k~_Gcj?|-x1fo#XI9DN^zfyNiO5R#I#%Tt8wjPyeqy&dH*oB2HtpgT)PVIiLcR1 z-^+c)eLi*)T=b{hi|)_3SKJr4SKR|K@$bLGz3jdeJ6SBd_r*{0*8Ah@#QaKZ9Zdd# z_y$<(FJc??;r|}fUdjjK8}#`P#W$FDz7{)$|JP%uzzN@oog$sTik+ek?~k7%hyNpX z3Y_zi_$k`%Td`B?>+Wx2r%vVE-^QldT01wcU7E+n^NjAt$7c$w?&3HHf83>U&NsWu zpf{@S^0;=Fu8PlZ6x{y!Lbd2_W)50$eeu%bjGKy=81+w&m*_3|cnMrlh?k2qZjq5y zcF&1x2k3?I>WKySviK>=^5HlLfQw0wl|3g0*{jRVifcmkAU{uMaXX>IB}z^uxr?By zwWp`eiv*Ojb62oagj6_`Ff!}Vy^^S#o^$RN=w2k>pmN2_oF<*Cp>iFv^-RC+{jq6M zyU|UP+Ck`5WX_;bk(hwObnaFtN#~vhmFV0QR3bZ

        INGA$iB{yUX+4FG4G_GYL)T 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 z

        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⪚EB`!&LHs* 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 T8H#1WW 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

        y;<#_1Dulpz~hjKa|A+ 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
        b^?$$ryRUp> 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

        N80g3!(C3}QPE+;9|FekG(UwWJ=HLaUFyW!IY~ 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�})Wr=sDZZlU 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

        B3SsMRg6`lRm{JSiz;TJAO_A{=} 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%0D<@!NN;@GoC|ra$40CV%+mpZV?H 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

        apy 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 z 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¨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%0AWbso+Z*lZ47 z0iqFO%j9?tKmJR3h_WPeE!UsS=9TcX?pQg&gmBeonf2nhMf>vw*5;*++%{%9mF`=|WwB-S zktu5V`c(gP8jrV?o1PUgz1+gzV`C+6;T>VF4#-XAiUVqoWk-85T)M(eI-O(PURhXN zmZ?dNSQ9+`0+SD$IwEVMA8&v=k0nkRvW5@;Yv1tn;vbPPDEY5aG+h6m4db+bh zY(3@MZj-6wo}J|teM2T~_#>8j{5HAfuXIY!jiY2nnDxmt3{V? zT)%Rjl@X}qtI!Nw8|@d95nJM{-MoXvEY@b5EyYzOp`3V0o-_ppo6jCUba1yiJ0?AJ zb7M_o6Y8w=2m@c17+h0?W_!LXnNgeM^o=V5V*(beX3xpx$NE2i{nu|lWC#-jMZett z_RvnVC{xAB3e5_krG-gTHY(D2`Ko>0J6dbER3bvjeOvalH%W8(Ql=HrK-rhh(Mnm1 zGh)~KghmH=&h+-9EMB`VZe3J5D|*e$bg4LrI;&WdogJST>@Ab0Zb}Q&Co35dl+2J! z9p}mK53dkcA3f>&^W^F7?XGW+wzoFg4Qf44DT>nSHz^Ei&Hnasqz^b;k&F`^&WzWv zxM>cP0Ouv{b6>oCGdowE5nNeP;HquezO`eYMwoAN=349}n;lKay@`6Ig0)~$M0D(w zm{N;w?Xty5@n45TMr6gVT|Q;W3Q0CIJux)IGn&H;Svr~#17}TN=bf&S>Ub#u)B+tR zj1tX?1|1+3Tv%CfuP9ogP=zI&^)AVF%csV8>UR+eA7a{lP{*kA*P9-7G56e%+5ka-om z!BVujrclilrDSiSi?h>eEAtF2r0LQ^qWs0_{0P79?{40Iyk+m!szNpo5tO$dArJ2q zDU-9(I0?EelUZbv8uL{woAub)3un43U3-rnQ>HN_Y5d}1Gfp>iRQb+Axz=1rLS(#@qvN%ebn#z$6#p=`*HrJLSW>-YX8oIJl zm|Cw&UT0M%G$_@qB{3<&U|#GrZ;K@A&yWQvN$Vxal~Eh<_2UaHj90o;(zYI%A{K*l|`k-Io!zHF_tV5Ys8y(&6RDO%6kv}hcEL3vcM&+ zY`?71n4%1IusCX2j#$q}6sK!=9EzwSvpzE>FEhwD#cx%FsYXaob@D4&G$U=NPf{3f zo{JvF)yKssVPH;P8b38mo*`z_64+Vw>Eg)nHA>vV5b_w(JbBXEO%l@vrWR3Ue(DHi zg%Xp(XfY$o=yEgO+Ei9uU}ndQ5l>WdiCLLrwmY}G42DNn-Fq8K{UhTATJw?!xm1ql z@gjsq)2;@qkS*tJNOP9r6-FIjq%3#hXj=CB^`i|Xd9mJ8!epl1J9o9WI-;XPH*j*s zW(dU^Yt$y+oYGv8skOqa-?zKI+KI@vlh+9?(I&PYc}6oc?KZqQzfdn#=Gy9ZH09HU zRXVOlQ&po=8}&H`K2!SllUwccQ9-~%g%S`I* z4I4zJu=vdt7S-9qJGVEKPDkG6TuV0lU}sIvx+THsV!TSn%;uiBY~)o3e1uu zs4undtt+(KtV#!BptZK!B~l!(-_cxFl1nQrGf4FDQ5?i@++tEyRp;l(wTL>ur~(nz z=JQzG z;@(p`TI+0H6DVRWe)072eXY)r1G6wnTRGe&$z`dOGE-N% zSZib}>v1%z)E%rY%+cx48&iSCkZEBj@eSWJHQ94_} z^$Kkva&{V+I<;8cY(wM{xm>0KFR(V-8(g-0OO-iCrYT16QibX?xiQyhHfpogGR>B{ z>e||pZM9W-YHf2hjyR}Yb!B;oZ#_5PhF;4SYH|y5t89q>+&m6z@_zF1iuVBQt@kMW zE1!P&3ZHi$*ZB;>qR@7#Pk)TTly!xp1>4%xoF{{rY|3aVscnLag_rd&~KK*)J zKK=cxdepp|B3YI^Hf_YA*VDIKou;I%n*kEr8b^%hb;vfp9h@@aU z6De3Poq{EEDA*k_1^Z7$!LA!ASd@i=(eo&nwUB~oN+_7Ooq~NVqhQBe6pT|v!TQxw zFhM;9yWL2^mbOqZQ!54A)rO95qhMq^%6BIPtJzJ#bR85dq?3Y8+E2kwe?!4U2PxR7 z!|3=C3O45$1*`8u$J`W*Pf)P$NebqR*7qtrLBS53q+pLvQLqtbDA<~_sLXRHuk#eF z>H@mh~0kcAbK4{(*x1eS?B+xef0|ki~f~@RXn0#H-4jFUpzr&J*8l`o>8z3zoUBm zLBZnsDA!A_>Eyy{8xmX?>~}?e>sYZE&qawr;SGEjiKV-kEP;+#-sSO z2~;fdODZm!NX0CZs94)%Dt`YfDmG&(6-)Y>in*qt*q`ZCe4qyv^PWk?wX>*r&ul6_ zb}kjy&!gi1&ZpvK3#r)D#Z>&%5-Q%Z48;$7QZf5VDyCdT#k1B>@eMwxd_O8SmP*B@ z04h%Pr{a=zRP1s9YC{keFAk<+UZGU%s|YGSIhu<3#!+!uA{85yO2uwxP_Y^Y6>nfu z@jgDPgM^ChR#35ZC=O{DijySFC>F^|^?zGH^Q2qA~rS%N>lIG8!LuqJ5L=8b#g=0$FfVL1=8gHHhfKpDwia8D1!6&1FcyM^VG&pq7K6oM30M-A zf~8>@SSH56vN1Ns#rT*I6Jt_LjwvxUrp5G_5i?{Ohb%)dj5S~NbLe0Ud#Qin7NEtd zCu3O8$$@Cq>%qS<07}g>N8J9OtN-u+gFjwg{pox4;|%ZNSh4pgY=+NBJmRxF`{(0* zB+Ewm_G?+>+rKy5_rp(e-;bkhzF2RoZ$Hm&B&TlqV*Y);Sl>WD?C*(w9}h3_>o;_R z-$zrXA2u2H!zMWWuvJ_Au#tz5jJn{5UBB;#o%`DlOC5p6&J+rkwSa;>_d{|iih_O3 zK;u7*>s9Z?{sg&_fi=iN3Op<@4aq49Q?O26Bm=8w&!;VLSvhZ|4pY_rhD%-=)n&HkC@U+@+11Pm}zK_gBN zm_o=$uO{tECs8*j3#uLllbO9*n&2P_bj7K(l&2gLUpNAOtfGVdLFHhWU^?Kvc}(2) zzXK);(@FD1Ir-zaBgtv;k#KR_0pj`}YVc+Ris75Fj<~h(5kawk1lNxliI*NGza)I9Uk4eE%gm{1ulh zc{c&1%=3Z|>Qz8=(i3J*?FUYyHJ6{irNV!;0QpU76;aEW39b0oQ2mNejyT*6{(S<$SnmRm+HWoV z-jPGP&iRqf5#jF5n@RAoGMi|zU3F{sEFhmvPohTlD+7^}mO`OVC}ehoy1Pa%fz2t2 zFjN{0r$;;^p1L-Ym*67sQoajZz4XEFr{Zp6(*YX@lKlfjllOox#+`73OXq2(u0p%0+O^AU_y0ln!Hka>&LddBoG%9^k(p zm%)==&xz;9nWX6cL9o96bdtW82^XMPvg9R~h}o~?wETer;P>P!_{%?@P#*lAcs}kR zE%am`b@9sY!N0R3$$3AIB9m4whu2>WCW`|4f#G3m;M!$UVnKj_{P1TJ!M`z<9CbVl zCO-I)Aio$xw(WdEWYqY;6U#G67Hb<#ej^4xF}?(ADt`yp@_eB0NCK2!6qCE2(FyCH z7m4<1i{Oy8L&(_^?$VxpG!Xp*G5E*Ow?qO|x$kAk;HcW^i_mZyh_Nu!kH zuy>=$)h`U>j$2I9b4dpHzBkd>U!{W*n0Bob-x40*^%IF z%4qU_<$L$^DVxZ5^tt4YACqa3yN-aaKbE?^eHOwz?Q*jCQU+O9Q$_suAOap9rl#h6 zOoxYFPbE`QDRBFW68$GSn|dBm&CV+o)JGLp8*5D9SIVuJjuqcM%vlnu|#;_ zB0{01kn^UUrmgPtB7c%x1|31eAXKaXYn!IQ1CJPR@asVGcgykaSr4WXE7mjM*;f@{ z?Xg?kKI5(s|NZOaeSRZWBzKVnGjNa!(N01Vg0kY4wC z!McM*M0>&o_xb5gV$9=iK-s<&j*4^AHo)P8=a>pG8{q<8&Ugy2hrwVx(+A4mehCYY z`j9)`90iWkQ_vdi6QLQB)9gABYQG-yXS}Op<08y;jXpkh{n7@ z+{=a$CKG+@A8Ldy)Jk z(P3!;w==5T6>kQ^+jHIm|2#G%#wL+5G#W{4J_2STJe*3<4er=px;^VBkQI~S$P@nw z$>?Aq+~R+j7*O>s;5Q!W8qm3!7!u$E#v8*)J?lJ3-%LRmpX)@C&X?RbK?y+xlU%}h z2?%lpI23w=z#i2RhpRo{{1qGFHTMUQ%l`sg{A(=y!$5(5pLt9~b=QHH=bF1$p>?+d zU-8{TzbyfizPJvgzhWeP@D}&FC%fFD)z2tXM|l!aC@y3#a7J5jnHO#9V9{%CI@o^PH;T)Z&_w8aAQpBpy` z@9329=GtXpW0?=B)= zd}txur|%N0=R1fM-~B{={kq#-S4kre&-Z}89*u^6%J-l=c_R$F=|y%v@+6}dj3%$T zroenz7OC05CQ~o&Ci>UK!Va`HCU$lunfZQ(JC(+EPrZ{!N-s_#5BME*KTRD=inBUF z=82&MulqSzkv^XMcqs&|o0&{rC}`>WHG>Z^r59M~!G;G{N0W1(hY%C*_`=6l#AV|D z12ONtmh@@T!{fi4q1IKQbtbQ~$ba(Q(k5J9O&&Zggws#|<6f}jDv@{Pfx9{;8m9GH zhg5u0NS2cr9;SlTyH)VS z>YMHlhh+qj?}@Nd_lWU~eW0dj4P0LED-k(qCdu^g06Ug{L)_p0FPI)R6Z*H^Bvxn4 zB;N!CkK+l0B7jMEClFa?J}GLOKwhP8gdGeI^60zsguKxXBozj-sP;Ya z(sw(^y{9E7S^=!zttD?C7z_s-I89`V>%h$KE`t8KtKjNBIT<_kIk>WDJsf}I3%F?4 zC^9lq1@{LJCTU0H@UMex_XA@Z{FT8bz7+olW*iNMo_!wB_s}>P@oW=0H~D*@i(7@MXtvh!(`AU2`u384I7$ zWRslW&kZ+-44s}fAdO9K?<@vy4t7wfcdvo5KbM1oExRb+t{+UYk8KC#bN(jgM5UcBoFjl8V6Us z5|d2$kSGe^k}2zh$>n)$uy@`7IPX`4vs_#bX8JXNR}mA){fk$VSueRTu{@NlPqq^$ zPF8@JG!2PKN0XtFP2{Fgmq5%gF&NFMQ+>?%) z$ku8n?algBa>s=6uph$uN1m-GJgzK+7vJmyZSVPzde;ji3?yk$;jzHu`9QL|Yyf<8 z`6D3yo96oOW@StE1ar18`3~ZVJ-i^qHw7PI|!jliw<*TCsb>%z| zI8mUXZ;Cz#xNPf51^e#;ivBs>s;?4g=Y#Da5~3!=PZ$T6iq`C!!^49h`o@7yLPP1=+=%K<@f(Cz!GLF*u&M zoSb}VFkJ9*09mqX5ZoWyO#FH<+I=Z`6WNg~C)&?k1D7{yU~S*UZrZ5Fz!fus@B>+p z^LPeeY`8_+8d^@2OjVP=`HUtP-!~HQ^m*`ZaRtciT}^tnOah}B$?&*cPCkpiM*Q3n zPa0khA$#3?*n!s1?(<9|#!dVcaBVEIWztGAa%vh`m>WR5^UL4Fod=iQ*6YK_j)enB z|F#UccqI?s>AxT7eqIX~WI1VvUXLK3tRF&N%ezH;q`2+&9G?vikHpB9$x$SqIRM7p zoeP}@RpibeM#GukttaKoF!K9p8q#x2BI(yZ5_-4Oh;zCr@T!svhyV4Grpcf|=8QS+ z>mz2teBYzQh-){&ooQL*f@cq~MPQwBH-D;F**2 zq4@xGFRd=67&cr0Cr)tTzx$37XmL5RGjSJ4zpE$4{_>a@D`_WIjo(NXdjNuMYN2hI zn?~N5_60n<>?)B#k9W5Y9R%N0T_AS(OQGYd1zk($P|5S>Zg+>}s>qKQ;>o(Tq2$YH z_h|hs!KBw}EeP8AqU+S!bogvf7e(!a|0;x0`O#CFxiQC>|QgQh@U1=;IZJZ$>xV$gwmsgxO}&hc#8N3 zriV+2`iE2^@Xc{-NT6HbJyJGRXJeHrIEzA2?^w??89Jm2AWrN zJOMLSY$EDrKXdnMtpT}{+uf}r`jd=x3izJOASc~gPtrT$$WztXuq3v|ZQ^FbA^X>m z%>zb5byyGa?1R)j=Zl3vS8^8Fz-!^dQ#ZRG^Yg*M@Ki!4(~^sPGe{_322(wv;I`rU z?k@;W5LsGHeK2CY`&V z|89~k*Xqd(=Q~15Tqk}%g@F&eAW+pf5&kKugRnG=E{4JH#{yBuKTYSNNNFVIJIqDF|`1dN9yov@hK^uJ4Z6Y@A_{06_y4kM~ z=5x?Uc%^<498r}42jCr0^m-quIc*^)9X(6rr)(uC?|nf3|MXy(eFjW^SPw&FQ%DN3 z5kuIQyB7rRr_Q8&2lReVz!^Lc4n439qLq3{Xa6X&Y6j^Z8htga%U`>ppLPN>RQ4 z-}57&mW4U3ik z>7LL&<(>D;iR!9E*V;dqE2R~qV>Z|(F@8>I!>d2n(aX#Axh|hl$BD|%+n-VlYk{Ax zd9$DawWH$meyXGO^EP^RpPmi6N7d;5wtu?k7{xdfKKuo7uzg5{$>l;g71jL~n(J$~ zros{2btsycQ!-)Bf ze0Q!RnC2Sd3pNC`gCSqP1@!c-w3zG&+TC>nsK4hecb|(qUyU9|YaV5$ z746(ZyPAK7rt5e5vrHTA8{@8*qWK1_>GnPIio)p|PfLGbrpag>G~v-RG>5*NdZ@mc z^4owF-2>9(JaLHtG-Hty0LDt(}nTJpS_G9+Sk_cHI^Zcq7Q zccoXH`#(L?z4pJKyZX2Ze)riksQ989>d2<+RO#-2sIQ;Ar;grzm-;D>*BxQqgPA{d zWz5$5)nAxNO7n4IlK5YTEOj8v5~_pF%gjtMFuRSJQf*?vu+T-J(hP-77QA z-B<60cYn&`hhf_(*yNXfP0J^DMJ<2W#fQV%bm(Zlg?_3)p$23QeefNx9&=()=Pqkb?z z)&~R3nP-G;VMh2+ZiGR#MtI9@ge?z@aQna<_-0-Xtk{?X3%NP)R#6VL?Z|;U&gH;W zzvV!$K_<8haUpDmCOA3O1Se`tu*qeD2RckJ^}GqzJv2eddlQt7z~Q?|IE`me`5oxCh&D+#Sai+cQ?99J*24|VQs80VSFU3(u3XPnE@)yu&uwNOi7jmKi!JPx^SrEL zqL2ONeII+RV*|T*ke^*}tDmjP39y|H2G|9KLH5|aLAG&Jhz1ksxu5M?)dAObB#B{I@X9wH;a0h$aw2=*6zL8yiE86Ybjcm!(P3)!4 zP3*}(ZDKQGH?tK>HnSnuZf4h^t=>vO8!g+yUcGt?yYclctU7ut8$4$#dvn`XcEe*^ zS@6(SwrP{;1s;%3*~SkGqP1AU|SG_sFw^04bJT*sbw zf$vXgVntFjGh)A?xwC}{lf2CFiI-h>sgL<`H?Xl#n49eOvrWhS?2d~A?2VKlE4nGj zEF(j#>z{8cL}8r;U7xwMVlh4vZbZD)xewzC)Kb+82wcCbg%H?s6?Xq%5W zvXQekv47sSiHXu?<~esWoAQUvY-8dU#@20N*X-HCcBE`&LqH?0C(s5l+t^gl!#j6x zW0l9Yu@zZ(|8r6A=1%tDRh{hhM>?VZqmzyMcmdo0+r_MM+)_4o-7=QczJg^|uVn9K ztY!?XEW|^X9p*Cu)Ie)*yy5-?9=-W}k{%*kAoynDyf=?9#Q>56Ua*(2N7%Q>A)T-(VmM%^2q z>twfn-^q%zwzG3yDq}CC&St}6=drV&n9rPf3)#p1#jN=9C2R(Cer&H^&i19B&1OEc zk~J+}%{IPz4x2Z14QsjfTz1ySH7seQlf89zE$i6sV(;8s$A0sun_csKJu7&zfmvT@ zWY<3KVYBaA$2zZC&u$GgF|o3leKop;?LOARHoo9xH(%~!OO|Y4dlUSi7eBjiM}T!s z39=Xd5oEVs8)C&J=s(bPJZ5JbdpNtDwg0i5U4njNI?=&|T^rf1k(;2?e-qnVzL{P5 z#%AU?XA3*<$rg6ex~;7IpIg}o|29_euWhV!S|^Kb?_}mjJ6Zm}I@#6GrBJwjJM+w+ z!XA&A!7gYjVV*5z?COQH*bV=f!)~vtV5!$*j`{dP_T*EG*~ND*VJq9J*tLbr*`oJX zutmO=Z1~YtET#Dz=6t)F#Y{YxN$1zF!7s06MsqD|n+jdLwRNm)hnwAk{_~69HL#!k zp^+VV$^#u0>)6zX*R#j(Y-0PbX=eL3wXh$~^|D5XkF8DJz!JaN!0vh4&z4^nVAECv z*_MnDoAtL4yYHq}_P5n-?7O6PCcfOx#&3Zh?3|5k!v2kHBKGtj$lc5ye`_ECs9yq^%?VLG@Ex%_f z%YSVKYk0JTJUAbls8-D9Nw&11ttl;ehtmTzOtmK|bc4gaA7F)QC<$SQ5 zO=&xuEi|rT8_r+NE@ zsgc!O?P2HLwhsE5*RyvYZeo``(#%R8Xo3DlFZ2Jx$5!mzz`8g1*;Qu;*z{>ZmXR7_ ztG^3@AGb2^FWcCT_3f->Y6qJyZDa*6ZDcbp-^8{pf==w%EiC$_Eo{?yTUqEqdja&&EMgvSCF`8Flyx4iVq0%n&RWXO zW;uUd$+oXq%`*3&!|qzNhCKxS@k07qR_%APFP^JqZ$;O!&V_F1YOiPQPd2c+FB{pC z#C2>((RwyzNfW!Pv6;n#CT`s6W!tavv9GS%z>Gihv!ho9*yk4q*$-PnY+*|)vz~)- zc~(0cIj(~}83Q`_dLz5!#ZBzcEt^>YG%$9-R+c>sW5HM3*d6C|viW;D*<&NOvtt)P zkH|l^Guzzr*zVM!Y~d%F?9CaY*rF-f?7h#%v+Jtz*e4ekvYcI$SWDAXwsYhRcJUt^ z?A?M=b~e@*TcHQVXPC>(!=WS3eim!WSjfJS7PIr;uVfQ%U&{Wzb{ShcXa#F}^lbKE zxLURldR%|~5p?zC)-L; z&)U~EvCPYx*;5akM(2YQZgYhdplZ)CU3U&sD>-FkNS{wB6O zqlFn(dfBH}_}GYNH?U7JZY)g;vR#f4d-mK`X4>4wHec7y%J1o5ZJ2vae03As_0DFt z`)^y=Ri9!!{Cpd`!QaU)In>GGnzysOgWK5==Xq@1`{%K8>;sRL64=GBC9}(?r?bF{ zVQgpa2zJh^qu2$YhcT_=*@DY++34*BY{v2;b_LE<9=vNB`#86lCEQfP4jn6Hrm}K& zd)sWL{Aw=Cex!mWKYbRv?GFptO}iJfr!K|*3xt!8KaXAW>+{&kQ9D@M3DPoUyPi7OYna1`d6|-^MOW4&PlrlD^9N%Y|&2GM8 zF3Z2Sg6%~+4Boqty@By#*Ke1w&v#X^W$Tx-vy0DW=Yn6p_55mta(ejz&Sx`=bvvu#H6?cFBF~*bsXYJLkG)wn^}^JL-K*dT|4L9DU*Y&6ux4 zH{Ls#{Ymd`jpLVIp)%q-(np6`!;sf#hvT}c{{uO(e3R1`RB1kAD+j2 zEj!qI?9$>fA6;3D@9z~qa@7sR_#9dB6JOs}d|CBf#TTCVU2(yS4;PR8)8oZm$MzI^ zYyMO`t?SRl+56rqPCKx__~^J#il2Gt%i`^uzb{^W(TU=c^`ax?QIq3byUnra@i>RQ zHOY~?I?eG^!!SqT%~_5vW47a}pXWGQS50&{7EE(oxPdvkU!Lt)vwDHUH=@cBpS9YN zb*|HK>pP8(8+Q2|S(mmu9#|zhA?vT#9+A-Yzb4PRbjgAE?ZgGsd z|4zsHDZh2x_RRy1Rd4;?G47kE9DAnib?kfMWyh${KF5^}?>Y`&`!~l~%IA*jcYo{n z?&_nCZF_ngPv2lD8Tx~z>R(?|^58gkNpNpd${oC$B77_8j)bAGo1p$;&sDToQMC$;NGWmE1V|zLJgKJY2H-o5xFDl%FlR zeCMA^9v=N#Nlf=!CBE1XO5RxYNy+F>zbx7DyYEYkPn;5Z!Hu*Upt9!bgTCFylEhZ)=4iBvo^+yyWAqMhp zaY8Yq)=Gpfp;@jVMDBmeg<{?)tqXB+O=WO#Y+U$L)5 z&nLj?yXX+FGvQ&c z2~XEEh{xB&e|_tM}db!pcYN-qGYy}FRwPKbWY6*mVKCeIMu9E}KW?vHuH>1J2Xzd(8r9r{a8i`7+7=VkS~ofa zG9@hA>rmOC>x2f485H0c)>oi6>tqJh%a z@cXAOP3`s6R1wJ+ z=ATOak-61R?$<9TtKG4_$?FVyS{h`Z*V8gk??*(f_o(>|9Iv;%c=_s8E<@$h*vgOR zGqJEwJ_E<=mrq?QC&)hSuz6rQbLy>H)~8XqOCvkpp4u4HX8<}a|IfD9jkO7Wcfjp$ z?HwEZ&Y)XXgVdD62-+YZL%&nKry&GHkGDlbB`#6h1iy~R_gXM{b7B6eRg&wyetBk7 zCZ30GaK4Qux4mn@Iw}{<--X!*bT<`QWp-nN= z*#pz<7|;Zve0tu(s#R4J3-g)-9f7=p-2A*oZ?iiuglKv7_02waLr!6Cer`ctlc(0% z%Jayp?FeEz;CDNla~p+$XBhg}EH^q^F|>PVHbH%&w;t-Kk7+@>v!$jEuS%FjM7I({ zWWd`L;Zx;p5}@iP!Ut1>rQRiIo1hz-X`CGqK^3}RxG`z|Xb_CJIbp`zvEufG4fiM1 z8D+eXfIAe4KXQvA3->5S33g#L?owpqHpMvHr^v%yim8~7&J^b1=EMr&T%lg@2^(=A z;ws@L;a=e>;Wgp!!Vw`_93_^B)#4`cCULL$jW|R)OX`%KkWNaahRY0pGfXqyXtbKP zn0ibXo3ku0S+-ecM-8{xqGMw0u`AX|LZw`(Qfd{ivPrp6*`@qK zxmCGac|dtgd0Kg1c~SYZvQPP|^0xAh@~-lp^1iZP`9S$l`AGSjazOdJ^0D%X@~QHf z^11R4<)HF~@}=^X^0o4f@~!eu<&g57^1bpe<*;%@If}b7$CTsB3FV~Hg&Q+Hm`n?J z;|YQ+=E7&4hV;EJtaYu#eA_;tQ6OZKCx5WCEhIFFYXcF z5D$olKt5I}K}wTkDO<{ya1l0Rl7bWl1Z9Ru-M4GD%cgKWq)$Hrg3{A{;^=o@snhx95GKC0Zn@dp;+4S$1L#<8uTAJ1 zT3DDrDPNwq5$sv-j%rVospp0}Tpx=*mGABMI%oKwajO5EPpQQ^m7i*S2C(kZr&B}uYCJ7?`gvO!g2-q`rQ5;eMr>SRlLLz z3!_ttt`&QsClDYO?ee*b)cwh61QMcyE^2aqQgY#0@7f|Gc4O^37D+2|D10<2OU zYDl~8TRv;)V({}aEk>}>r=c$*#@$lqmFHp&>I#AGmd&fwumWxM8dg;!ny!sTk2y`w zK%*XB>+^eSigX-WSz^$}x(y9b>G#Tf3f2dAB7gB}L90%|FU;j@oIWuMPn$Yl&uO^L z0S#@T$L041y!AmXz|-ukY10EM7M98S+Bq`Z*{a3n2xTiG!UE0fFzQAGFYvDS$W^lz z$P4FJ&Yl~A>37yepe=QR$ec|P;TwVx!An9O*ZO6iW_JVv5{|%_<#9Ga;haled{#vS z638L~X-=rco1>LZdS;(UY>PUQAEOZ>nBE(LPMAsf#CGHA`r@#u39XYRhCC0G)KOi zvW5D~K`q;zdRz3b-pVq)ltA2!7qQlVBDLMqV8dJ0lOFH*C!-4j6B z!tK}}c_AUl{W_#u@2LH-wRG!(>$R*;?XR8gWi|}+o;L=r%7!a3rGM^IK_-KDR1(F5#E0r zX#7{l3uj%sP&IpQnOwfKLN1%N5)d()a6`+b9|NTPq^<)R`>-5Ww!%V2!3=R2Z&OAvjf#fzOl4NYFoGq=}aG5}O( z9c@0U%cqF=SPwNdAttsiLvGqs{YgnQOeriBuo+QU*tg!)cJz$I`l3bnneepmg^(Es9 zTd_3fp*^_|F%Q4taPtpCk1smmI4O4B*)Ba7UZ@@cMF2u$Q3)z*o<|#vFY3DZlc%K=xGSY4z+me z>pd=vhq>}nw>FOg9bz6ALY#q;05M^C9Bj`iQPFGomPN@=Sc3DK|6B80ysOE%t_T`O zHNxBKd>X6m^J}wSbcF!w9h^Y3K~B@uu^=I36DTQ8hm$orti_TEj}aXkU3ptjXcn8r zpzx*gd-3<;mx^Gaoeq`X(&ha58lKR3kuXRM;ct+5ksx$-DZ`;3V2(6Lx)@psy6Bw1 zVv&ejsLu{0z8KaA07n4h5mXJhGMt_f8V3G~G|Q3ZUHA*ZHc0#{e8Dd}4=agSk(Xj! z_ea4c)*5S#F7c0WmBKesI7~c96h(u@Vt@fh|K~#Fe+W>HfJ*=`0FDF30(mK*18^hY zNx=JnBY=1?#B2byi_rPBk|8t-cVR7=h?Rc5c&T`=_=4NU zU?hqMfZd1%+S7{A8HaPNG;LpDx=;r_3J(eUg*0G3CJw@C@-Yd&aHWa+5pp>&rlV%r zh>?bv+CdqrCaUKzI7l-Y4HEZ2Ed+u37vB!*?RVtG!|2CL{E=qQZocs2oU$(!=_@9k zzp1A&g=9=BjUVjI1RP~AIm)K=hSC<6^`Gu1v$m%i@y{V|EAU_{54*cSv z@*6<+FZ)8z0Dd~ogTTESP*?SelDzO0<%W5E;k)^L-I3vMSG=Np3H%>h$^6(_5r+;16qlEEPWrvh(AR# z6KHvn0h(7t$q4UWliNXn5_U1kP7e`eq+9jn{uIJbeN85F82_h+>v+1!DV_gNqV%ZE zK{ch?>3F9ze=I(qKU6KBxvXN@g4s1?RaJ7Z!{_ehvY>c%*%We5m(f0DE2=`ZK@ZOR zFj%;P&Xxw)oPmIxWe;S@bzY28)Nh)+-t{;aT#qohs;W$GcKX+ceCP|5gBvR>jJ|p% z7}uzidRyEwh4v;}?{PQLBxZtOubW_R0tAFutq0EJ=eNCwzI=C^C*JCA3DRJNRUMTV zDQ1_|wbEEvC!_3DL3IbctjX8t983Gkyf#80;3Rx1Z1x$@^zoX~Rds(o1h*E`8@5I zWFSAA%Nj)9s(_lKV;gSJ1K|gBHngjGnHK951kGudER)T)HSjM9L zj3*KQ*8B%&Re1U6E|>&SiKnAP?NlhAv&kI{x~B`WJ%4h$-9>|6v(wl6>iwAZdoY`` z2~}>|rvUBu#zAu+R%xjnuUF2d#+g7rW3i}2jy1?q?cmftI6boox=)RE7D8ol*n_-v zsDvPqS>e3ce4|_WtiCp+}OcX8?S%S^kN9eLs)*dqGDk^pl2f>GM@l9GC zO?tEOir@zg7UpNT@Css^<{v1f}5F`uZzMBjCoDUs0B7CfRi;hTmw- zKVg7y9q)AJiPv6HJ_S(tYcSV2U0$M+`DNvcVTLJ%%HpXF1q4@pps{0>&kOg>e?eU2 zNw7<^mqz&MVUeZ~5q{*&-uRI?Z=A+I5{K-*2s}B$-XBkQ-?6W6erx-=b-aW(UQssL z$JK4Y&pG)8g%gV=O`bA!+L|ruE5W#08J1+C0n`Oy9USvwTRP~(s$33wnpNJ4Q(OoD z(HSriyOWmv9`NJ_l`+?X<*%~p;kLaT4F=Z*_-TfklyL4iJR07usoaImcgs>t-~ zq93~p6pzlrhwejoR|n9pKL&3^;N`#dxkqVs=cHM6v(-(nP8DWpaO@Mz9(l;W1 z4v}`9oF+~&{NFf$HU|#D%@KCpZy@t#4WGiUIZYfN{EdKXfkW^X+DW&c z$vj`fC!9Z>CeH2fp99qr40HlN$%!1Rwf)00 z&;N-{3qLyF4&;>J%!`CFVDkn2|Bd-jv$r*fiLN>!vI%h3kXx8Ix3W^Eqn|qL&bJ36 z2N;#_{1i-HO|UC<^j61h8nN@LYv7B4T}#T>R46R0Tu>O9iyD`=lR6QrLt!8#i9^Lc zvZt+{I=2`6m1b7WAy=ckbir&sA=OqjSbyk~FHN?T$Iv89bLDnA%B-6pcW9;>+6I-p zjeUF?-Pr64axdgYkDd|s16vwM3^hcPX8dwl7dg;KqN>{7Vy{4`Ak5-BrL-WB`7}H* zLEUBK%K*d*VMdL$ML1ZmNCl2l`4%HqW8qrzMH*%Re0r&3>Jx9>R}Q!v&~%uB(K3|J zO~XZ|iEl#yn5fUZSqoR-KonwB7$Es@IM?s=HR3R?im!UYZzmvB&aDc&!aKhh0Z zxh~XmWBI9WGNM9lR7hGY>LuzspWRGkuxU%RfMJbBG+^N@ zr-LdImagXu?Vz&(YeQ}C${lbyq48cQuJz}Y&@aBC&WCJFC~*3YPPP=5Wqry<2^Lop zUWrgK%YnmZG#uHoRBM(nx}`SYgT~#NG{Hs3vIk(~Z$S)ufEv%)>=CNU7FP7u7ryH7 zTwIT-j{uP_m)k*m3j!BghP4h>zUp#hjie<&7IH7H1$Y3V5@h6Tq3MbG{Dl1tj%cro zwP8I}H$D6_!Ja>{PR_|G!5Zrne?FI?h(F2~)nW*;ys`jkPYlT`3srNK=3b?`u~QjD zbLQDy_CSe%cZ20LW`q$-ZQde%t6l;UL{ZcbzAB^kK|4_6^|l>6?5+|4wB+~rh)$P! zde@3Vz>kdkdCF}bFbRBz%Z-oLVHU|}pHvkzKCh7-Ek&(TSZ5zsaL$C>HFmwR1_;2E zS6)N)S8E@VsqXki%|lqhscWB2)!@=@bs~wmq&}UbWznYU$SEduKzhgH3PM}#EwCf` zbGKk74LcR4+%>1(TUixY)v;!JZ;-v95FckKSyKWuPFk4%@fH(M225@P_RtpWCSx`4 z5VCMb1(R3IeQD;)Nsv%l?3n%5dIE%x*902F>%z+-NY&t7^XLaXwKxwy zXuLLeZEG-yD;TvamM!Z|Mjwj7Fwo!wFQhjK)ugMrTJP=y_s5l(;ArQn+Hk0`d#szZ zjm(IHB@(WsO)S)r4^+93*M*!=*o{3AzS-hz#mbAMh$u~jc!<0)j#oi z64T+y3gvwNh)Y<>`TD6U)^sfa99_{)ro1fdaCM+tHZ^fUHaB*g>aes!-Zb$6Tfhnr zlP{b&$QYIV0j;9v^krVT#ME*I@LMCaqrTYdZCx2Id_c~omZNJh;fM0+bC!&@iV%F( zcHxL&sAYoqE2T^6@HA*`>u&Le8o*ujElV5kka$6S(qi}U9ps2}K2Ke};3=Oy%dd@& zLOb>`1@}r4vO-~IRxEP*JNUSX-U-nw3|2EexN@QSh09Ks`H(K7m#Z#y`4B{RbNFE< z$(1$GJ)NMsV+J&59X2m$I>JxSAYTz(faaAV-ngsJQOkcLwC)FAvPXR9gNo0{sz z(&j=xFMaw4PKudf%NW`NCNTqkhSr7|ns)JuBn*iAV&bUftK)~U=PW2IpT}h(7UJ-L zBqHdk^W)3Ze7gfPwSbGd9EzY8N|l^|qfd!>AQlh5v<9auwHQI_qu~|{=d9MVcefI=v>Fd`>id+fD9=$3t*6T^*nZTe>%6VP zTil4!A5UvcGQHUpLj{(WNb{YC|A?ca4?JZ;d6@EDOInpfxk3B60*hHlH-OL z6~Ee1SxE;mXcerrXcxIpU{$|BszLa`9de){ycFs?E*H2IZj0e0fKMmF`2)Xk`K!vy z05Wyhz4BG%dcaEf?SwgD&8tea24p9w)L<6OsQ}3!noU%I(>!WFS6LLTaVDTV#IuQZ zL7H_q9KlCSS^i@%CqC#q2I)!wh#B_JTGo`Qfp>LKvKk5g*Ym#+2}tVx@E{Pj(j zEAbuBAa(QJ&ZG}M5oI-Mc7txx!4IB^su7m)iq`zO0wRQ|(g`p%|0x=Nyl!g#OmqKK zJUx9qJw3jb%>TOaV>eLf*dG@!@sGn-{)2PRh*D5B2_UY(W#ne}lc!o%)rUFovnYzb zFw_+E5a(YyYo;o$qrOK@sO3w`35TA_^4U4HP8w@$958fP6o{OffF_y)Y1H2-zsHi|F8T^DNh)$ox~^*r0@r`|kWrcSr0 zY{BxdXbY%TV+fcdK;{Q)VXBil#NgbIAN$d8ODoPW<%QFu9{wMt*9hKH)9fokt#BK* zofhSI6Q1UFnjfi0k7y1qxy{daoj!=>;CL7vk8a%*s(TkSpFqz;G^)8EnB&G5iIDGz z6%C>Z5-sX&U2IhZ{SeH>$O&dtwxXh-H-M_h1&8y@S12~(A$#l@30(R|r z>D83^aKa}#G}7RTQx!iW$1nuW8II3u(?Buaz2;SA-qpSEVn26e*neVAL%Q!qnjzAp zl*~eSkX?UTyq-X>^pGH6JjJRsvPbHez2+WROTmCTiJ9ZOFA&V?eRSqTVI;7c0FVKt zfKC9OohwBl;Q=J@tt6CY!W&xZvR2?DF>4TrmCdZ*!tV*#+jI)1SiKMV>Ok4hSVGxQ zQ9cCJ0qD_V|8JWp9ox2U0$bBFk=^~>OvWZHVt?p5o2`4YjxAXaeO=|706W;)&vrs* zQ5%U z3NlG3noPRyNM^cb4%bXsGe>D=wr1vNX1-^Wf)s==&=@j+%srZUP&4mG1Cjs7n)v}5irl4WC^D-sK_K%D&0LEH zBllj-d<^olW+##hPP{sg@*5rZvVm*pg@&ZcQ=`wWeB= ztkK34%OJ}z>mXCQHN`r}8gGub###+g@uq02#cGMN8IvsumJDm0InEkmm7)?%Y1U+G zf;G-$vzo2us6^8c>tJi5HP#emHCatjF(#|kXf;Mz3^q7p%#i&w&;?t`XfR18i^Xh- zw%V*w&^BU0{8ZauTZ%2&mSjt`jf~EU9uX}^XGRZ?9u}PuJv4eqbb54Jv^6?DTChT} zOdkjP)tK&=njwif9Q&+Wp_!yd?14nK0r*-3>Wbk9227lKjiBI7@ZAg;iBTsDZ~|}=&;w8a znViPs5GM|C2l|M^_v_*?{=|Wn;xHb?;YM~GsElypffEm$ zc;LhXCmuNT-Me_;(B18Ll+J*XnD9+H3uL0Lf(#gp+bJo4OoR^y3Fa)jVaB2iDKImU#t=X{AQdne zkcrUYfMI|Pz)(OYaEAki0WttX0U|Fkah(7B(dYfWCKt9f;DNxcDr{@9Sglb}xV(#?zMaq;m934;=ol2Zn!rlk)VnlWrR2FHF+#PT90HZHzDzC0ppHh2`v3J7m~8!Wr@5encShO)RQ&+-zUdv=@HY%?od!q(Bmjn>oznqnfK=Y*#KZr) z^ljkuZRYesbU75|`1k0WYH7iK3DGvus!HEPf4%f=LeH>;>6L`M zqHpRoMBmi+h-!%!5PcIrAo`~MNc0_tw1~cmu8F>>h5t9`oA}e2o{muKI-w4yxBm@! z3r}+cb~_;J8-xHV=6rX&s#tI91!IK!%iDYXbsWMcoHLc5!iZ{hpm{u9?V?EtnKX|l zljh?i0Q3+pJ^w2vN$YEU+-$}b0nD5*0fefyXzJ!MW=m8wx;pe>)C!l1dFE%*l#y!g z+Ar^>h#BS#U=4_XC!QW`Dd-a`>@a97AcAK=JBq&j(90flZjzZfM8I7Ht1TujAu)My z+K`Ola@MHP+2bbU<`))Co;tml>oe~Z)`P&bhMo9W6@HU=syLv7JrQ=|xr1O5-${T;JYq0%Uykq;n8|<)_zne(0G15M1PliZ z17rY(0)_yxkkd%O3dB7dK=YS$_?zGtkFqij~2#b&mdY(|?U+8k|)HbxtwrD#Kpq<(K#d)ucPpkM49 zM`3kjF-qoWqh!KL&uGJ#ZZ(>5lMMTRlEq-gN>zPmJtdkj;zMU6)>KA|*=RPIMYCuV zEut0Wg)&Dh!LU-aM47=TU|MMb6pda_DToH-U_}42ARDAFA$Q_aQcPStk~WYk$S6+R zMBnPZHH8z<9Ud5c9({gF^hb0?bVsy9bVM{o^h5MQv_dpPv_UjNv_dpPv_mvRv_dpP zv_dpPG)HtvbV~h$XrAb=Kiv~O6KxXR6WvljqJBVhPyK*socaOvA?jaxKOj1$en9<= z#$@VqME}(9sITdLkNN=hJEC8rQ=(0xKcX?BHKHw|C!#B&8=`HZL!vvPH==Q(O`<<_ z25aLqMs!XzN_05gNc2tgNVGmsAD})&^iFiI_W|ll)UP6GTBqMWFDufaF)oeU zh9{BQ91E;#qDnc73t$gUkhEaVtdO7SRc$k7z`%FUyBIt^<(*uRXAunR9KD5W$h9)&$%pT_fe>(WcuqLDAL zFK5p#rTos6Kb3{@qckZVxzAbkI!oO#xb*Rxt|_H*QduZJN|W3aw(-2xrME7AyOioc z<)pGue&nWj6y`5jTK4A|+v;z+`Exes^1|2G@A`(h?)u%GA8&aV?GS!S5Vr(rlptLi zuS<}R17&fb-VO@8udKBM>6VP$Tgh?R*65P?p;C7lqSWauoq6|^E^-o2kPnAH)OPf@;g)hR2IsQ(xiCg4q0z7gHUmoKzOdkK7cG!eTxfTCBFuQC7>_<=``FJ9V=<&5g77oD#aX zR>Q^JYJy(hPg3mmZ{4Q~K%HDoU7I?aRo_nxX#1bA68u&55)Qy5xE?^yMH;klSKl9O z-3ya7NYnaBDNKS-HPriH671C6+hG#a1CoG8_reL@2hj7m1~+n-dT;v@*f(hINMkMH zJ2V&$lb(4n3BFLB0_`yqT&B6the_Z8#Kb12#KjLz%@{VyK0I^un4(F=j>%I>*sR$L z7S5TwXmRzLI`_FX^$ktUK`0GqZ4-O*O5np5~?B%9G;!Ma7Cf) zti=%&J#$o*fH-t)faEI<@>E$5oX4rBNt*m7xw*tK%1SzMBSf0ioO{!O8Vu;sb?Yf< zv2eREoKr2XJ+`RF&f&e(-cV;9iBhXl5)c)DiYOAiR?8Kc3gO{^*9`>*@`jMJ1=n;` zL1!E!`aL*hkP*s^m3Y4#i>Z1T?Vh_qIU--d(S~4V=4c_&oJI?U)$X z1>|)kh}=e^R+01r5j2eDB_e8z|RF9kumkGUzL+qWm8aART7>G%Y|;$ zEEnO7P`z4(Gw51(hZilQzdcp&GpFy~xX7|=!@z&?)xzR~^??qKjne-|0LwY+!n9ALlS_*dy3a(S4zugV@-EhMMET?HFU^&7N z0QcQ+!yjQlz(q{N1JEB_a3daoT=a))nhGK*%i)8Fa3daIIl_1rT)l( z*Z)W2Gh3c*ifxQ-hHboUqHUzjVau^ive|9ZY-4Q&wh^{Wobn9CInOYh?xgecooI8c zIm&Fo3IeMO6W!N08?ELTv&|f5PO#GHP6p0%=u~I8Rkr2ZvTajsqijXC3ASQemaWh> z&NkgP+BVsiYbznrkY<=|#_49sFwILA6Dyi%V=Rc$jpGMHkqg&AcMO>ri($%d1n7_3XICW91D2WDq_tYTC`+MsmF zW{6H4k~Gv9V~UltM~pScS>ls3Qif%X8#z9IYQeO@!&5UyO|a(_PM0S#4f9S%oug!gx|cJKBL%C!b;Ty zcziwy=X)bGTc;-YuHc)U>p8Z2I;qF0E%H9-95rgLgtt#7?rl(IhBP z;eb;+lOictXey#fQE-fB6rsw?jI&&NMCvc6d76B#8a@O$9P*qwH47@sYnH95oLy5s zZ}EcJRcEb|H*c0thqGYzii$;5ix>UK)*;XN-`1F8d))4{(<1UerhNY}4JE z*{Qp`?)vV{g|(Gxywdwh`;R|HV^kEqa4RjC)HM}Ot|K3GLcRv2^OZELT}MK{Or9`F zC>C({8hbXY1gEf0@Z+@SeCVI~nQ${$#lz4?^^))x;UmnU4&wzxi>cyBF;AQ!&J~x5 zPO%00Zg+~;iMNRlh|h?B7Wa!^h{r^;lp>9iCQ37&8!v zKNzD;nWiGsJkuJ}2GfP6Uz+YWy3n07@s%ZYTSnQ zngmYx2{g-If_AkVzLg%7Hb`Tocf@uP!-b|yloV}3XM#S-|33*jbUW8end1^BxL8QE_rpCeu*we`1m!h>WQ2!=$!DA)&r(GmV+9|)Gg ze*u7I;yRF<{8s`XIt04z3*<*(k7}?RrVhH_9{4>DAoI5o_De7^-wLSJOmhDWK&EcL z74}B~WWJ%n*DyPg4(;I+42l4VnP5-mRG`kQ`;&bj7zcl9m+S~2H~CKhj0cSE2joX# zvos)vqJ!?Y7Jk(LYAXV=uLaaQC}VkwCOT z?nsmD1T@GH=K_aZrF(~2*}1c5i8@RVO%~R__Cb_B1)IL;i07$$)Cze?MZc|HX)TY!n1Y{?_htN(`zg>t=Cb_8{sQn1Y zehvtL+KEhRAA)=k08SRb1yBFbq>zBlAUWWN=8JSH$pJq!F{QIO4){UoD9tmb8_qG| z;%FB0%UB^{P4cc`J<~3ZUSfUA`g+vG(f7qINqK!Ni+Rgh6SdC9Vty8X%V5`pU&g); z*VWO#j9oHlRQi$vp z_WD@Yge3(qE3(%YyeX8vu=3YcGtUxAD++JR+CAunl_NHF1!@~#SozHC==`l|zpm;E zlr=A_{dLttWo0>usWZ>2ZCqBnb>+;nM$C9T`}ySl@hb|Snf*}Nh#3`y=Z%>%^g!%w zS<(4rIge-GmNjMQGl^G3?H;r>Eiv`^Rpi#mWe+ zjRg{>Y-WR*{PhRBkpbE-!SxR4L6`r#`Yr40TMPP5kOlSrLW8@-4S8k~=5NG)4fGo6 z`pTCT@`fmjUH^Pgj{?}4x1MI3V;{tFuA^SHT~L< zr-^I0!j26#6(XLSMMH#35Sli&sT&m#WAB3)#)8y5&Q{`a(!+#pv`ru?2F0Sp?Jsi<-dyt@I@Iq#rwf3|DkOi`o(CR{|KY(jXaS2|)Hvz(4d_;ckZ5oexv9 zQh0)B!lEZ(p|nAXx`+u6C;5?nf@-=PN&oM|^#58+|8K`6VHKT%)6rC{Xh_yoccpVz zMxU?@oF?~Tk}H$POGiA_MUrT0jwuKs|Gut_aQc)R#p%tPTyi*l)iqKpm+l&kG}U+{ zkvkfz0ySsdl@sp&dh?!Ysy&40+z2oM%m6x%9}ZUuTw6h%Boo>rMhQIzo6uv47JA}i zPED$>kIn{Yc-QubbZSy}ogjup5<_|{;M2^2?{Mi`T$)6oj&iE0(OdrmWs)%J4LXGy zG4;Sd{`jMktX20@B@lZ{58J8v>OQ*s0?8PV>;lO!kPHFI4UqhTE|WuY2P9XZ%jS?w z0m(Dyasni`NBuieR!5i3Avpw+y`gtPattIBLGlN>{0#8~l6@dq2a;%b6kh}%SRFEtUVUs)!$y$(1 z4apLa3<1d@knDgi<3O@DBwM4(&qSlt(Og!BWE)8CfMgp;u7PA9NREMI8%QpK1%h@3#oPL6j*3_z)pq6Non98^B?}*M?}}8^B?}7E6rqB;cv|Sm6V} zQ?P$XW@eo50pLSGS7tmWyhfyE!uri3G{M#k_yFmCi1a={Iv)ZyQ(B0-1#zAPkmTzG z;6Dkx4}kY1aGnBm$HfYp2@lXcJWkjQT#}KkMw(9ncMEX3%rQb2@VbW~f8cbZ3?!qn zhH#Kpw;@L822S_TI8Gy55U)!@JQL!F9c+qgD#^K9bR-s!&S_to&5)YP-w2@yITDpsHV0Od5i*PJ(1G?f-MnD(hcg=_g zwHPr_ScN0V=WEpSYt%6jb^M0f0`2q-+}*%Sg5NQ!uOlAxY8F03SUSwFVP?Vn260Ei zJPdOZ%6IP#L@IKcquDv1}m z0h?L8um$k%eR+b0hTexdf%c$Fs1LZc%COaw0)AGYPUIjMrpt+|9GZ6)o*EJf^YFg% zD^;_Z#)R&3p z>HLCt3XK)ikBN5>-ynX-c?G$FPrUI1gcI)}zVspCg0~P)Bi=-OlXw{MHsVdhLy12T zA0;030dgeX_90B-Z^T!LKSc6Y;%^@Sh#wBfXOTYfNS)vI=e3-#{6GHj@A8jc!tcv4 z!rX%Nwv#e?K6BUkgnpl-|2$p2Ai}%L|4;mbcXK|$)NGLk*&_hfQ@BBI{UdDuE&eh2 z@qLQ?%swR_PzoS>rDjr?4&*;+;5lpgQtCG$}?DI5}!gL^iEBpzM{K%x2xo~#P!m>(L2M%dBz_t$mcsXebkgLjO z;*+9Ie5@k8=hE!1fuK+$K2Q#9Ri6UX>fj?kq)(w13j677%PVhm;~R0L7})LG7?{Bm zYjn3y2sJlOs1G$Y@gV*c8K|VfUJ)|UzCIpV9!+1o6LK%~Veg27(T8CIx9nlB`ix5IG$AbOt?uKfe5RMwRKD=Krm8XH_1p2H!m*#pyXEq^y!FpTQxy z3mbfppTZ|X5D;qZ7ZhsM0_ErSDUZFpPniaDH%zj>r^{w;FdfK00YG@2`l#}Jn|VWuaGK<%I24}%P73E-4<@$?R=KoNb)4>(N7Yj3 zZ>VXI{0A+vdkxADr`yJh25RB+9pY#@5V)1ySl z#(gw{!l{;IAe{emtBCx_hYF$@k;x!=N{y1jKcxXQGVqK1xTza(0|g=Y2_r;cX+bJl z=u-CVpnrw+^7dV@>6JZ(xP2KnRyK3AU_*YeILKD<)^22~7 zm9o8FCY7Z1S~)x|_|P?pOp-x@KxA&99}m=1g8zIQ$EJni3lt;b}g= zzptWdP*Oj5ZkG#*g%$`1#dkS~c8Yl8Am4MEz&z0?YoG^8|KgvP9(^@LuJr|EXk7HE znhpDffR=jWW7NbqndpllL8qS!O@qOs67mKgQp%mEQeH2<`td+$#UllJr(~|Hv}|#c zGB^?k=c3k)sH3jD8j5ByuYi)tZMqvTj-}I*IQmKokAZpBg?Lk zAD{HB4~uTA*Ih{+p7yLnDYGgmQw6<2XA@ayIGqj-5(w6SM-=83s#+K+NbU4_ zu+?%VQ17EoZWAgiptZuY%#9NV`axF~@cG#Ka?gV8n} zr`J57<2|GKb?RX`? zqxy|1;0aw`1JrPZWM>uA~7-x`viR^WMr%P^aa-riuy)F;s-(P~*epoSg*jx7S z4ukKV34**}@#0EBUbsY%%PLmTPq`qEC+|gb1$j9>xr}czQweydmC<`?eM0@v-vR~N zb@o92Ka>ic6MEHZeJ*@5AUv#S<*k*QYgIwufx-}}V}M8%@@Z1z0RzRD>FmA!fT7Nh z57lrvZ1N{9^Q5Mg?DGmIPn1c!DYsOWm2)wK2%WxFTt%X$S`ixGgN<0;LVG{>3e60% z5oK)uIMiNCb)}?orFMr#{lFE8gmYbVA)k*vWq_>tQ-O(zk1l;cn4?Pjw7@L-rUB*B zF9H>O`JCC6s*otIE#WQ)Ur_VwA~boU(VBnsE`;xf$y`uG6|jh?nVK&yOZhP+a%1vD z;v}bFMSLIvlgp~vl`{);1%R3=Rn@of6klk}wc)#8lj?-ktL8%T33~~L-&C@WzNrib zoDI7n0w_!^(P@6aga3En4BtUs0h0-9K4cg2Vc!G$9@zK5ehBtMupd&n2Wf;NsSl+` zl&YZT4+A$;8~R&lIO9#~rVsGxnr3k%HQTW+Mn)MiU$w59tF&EdfjlnxP%A z*+&{vaT5p{eCI_9zKqZZWOV}B)`;N|Q$5UzolTyN^e(kn)LDb1;8lxJuBssnVR`|5 zwl&br>z=>|<9c@+x(qZrt50OQ{9X{HsZBaHC9qU-jE5MZ={vtUKEGGf6YT;6(+fD0 zHeb{`R{d}=9@s%TivL~RJ}4Q54yEHxdXFT`g6!6@+E1`oE2 zg04owms=tGLuJELhFu|-I(wrg(p2t-(GjzEmPJvq1o5sLUflV@QUjBXFiPK|hoh>KS-k>U!=1KWsDhX?H#uAQ z=kLH?_ysob9qr3l6_x5$wSbnA_ChtogmVd6t!tu-N8$8AQ8XJj)$$td}mG2qds zdqvS|6-A>&|Ku-5MNt68K8$%7^yoNL6r-cfNPtI)v5GN}Ul$YbXE4Ny7&XOs+_NDN z2SG+28Ux^!o}QM5GgO0UHDhc|v?hv{R7pw|#gxHOQG=7j6jPE(9FaUC*@}c^NwON` zAqLT68A7@TkhD#-NeRO;q+uE2P+Z&@Dq0N|L+02_aV!ulR2!5sI%{~eI6OW+YgG2A z?2#ks#>?o@SaC}|f}vYfj9sRaqGCQF^;nLJiuG9359Dh*D)mGk5tSI@;Vw~${g{5&$b&VX=^I^{in2#tTN@o{OnoY{+6UR(e z;O|#VV@{qlpLqYh@3Z6ZW_sRLdL&H9@aEKA1O;Lr^rE#xHz>t}<_5m$F2;zsGLjIN z08K4}1|vS*7G#e$jm{op8Z&PEILkEi_zC7h%YOsqmssEOp^^6261RXfhZ3dg3D%>X=5de&16ro4YgWh z6YQ~~iFRD{KYeorZb|GRU)_gxdI*i$4lO8xyHgMkHi+G5eBkqjB|ltO0{2G(9G6U_ z2b><-je~;{rl|PFZWnAkK}uZg(XxcyAa(ahrXEQ;+0)Y_bwiG=86rY5TgekxM0`QWrNobaG8u<#vbWpSGN(#^_(;r z3_aaPaRdkkK;4#T0K{Oztvot`fvkhoV4x0;?hef&(b1wQCPp;H#u^OJ{vpN1B_zaK z;-T$B#4DjbmY7H!Bi#^XNRLWNOTt@8Mh8wFoSJGik1$(DpuY|Qt;iY14BN1wLv3S? z!z5|!sLX=Qtl?RshL02rqD>>CQ4W*cZq2r4$Ha^qCyq{-CYlq*j7EuKW52#WF>lJY(u) zFbQL^Sd8m9rKJv$8CZ#fF8@WB@Lf0bGrR%L2~?|5?4r)6m<-(~RbntpqH+R0^dgMl z2KbYxcN4!bbX$)B_au0RQR-5u1DZ^J;BOV7qM@696`OdJUOQ64yY2$J;grB>MvPW^ z5OTzHvI{5(>;YB`&<=y!DqY4dA}EWZ99NJUiX>ekY=Irs>w{rlO)LQzuQGGGoT1$)b5O^m}5#CK*bL zi*2@2@DL_4d~rQ3(U@+urlg2zgVP6Fqm!aj#pKkaWL)wT6Qr0}DOQBCJbIbAHHDeNE7TuvK}MvlO~=pG6g}P1X1D-AcHPLHzDF4Brg?E6dRmfT}REP6ZFbK zZRClreFPlA)N}Hr)DuJez|`Gi=s8S`;UuoTc3Zl;j~o7FfFKL8A#G4cUj}v2+yLV~ zJrJ;ZVx9b1Yr^aww6V>S>i9*I#7V;&Hvd~b~Zt}Ee?C=F8n z*^~Hf(l^P5uT#G2HVu}({37+FI_Cdl$mgFy8Q7>u6r{+O}Z@4jak_t$rhzdgQt!dp3i$<4Fwd*jW**YXP{zFzdI>CeYrnPhlz z>XgYZOT|4eO^-S`W7?md?f&E5=N&IR_k&nkGJ6jzd+N!V&&+!IiSox4+uT1GE9T8H zKiob4!AHeKm5)8LKr#G&@mUMS=&lEjo=_gT_kL-~Z+oilTl%|Ycip}G$UQ55bN23) ztE3S$3ZSWJTF2*P#0k)d77HeIRtaq;U@XAfwi%K|02i!Dfu#Vrm*@dTAh)XiGXGrdzEB%5O)V8Ft0-C9$db0%=X!T~3{4d;jM&%ItO-KkL_i+OKo(!`R`` z8a`3Y#7=G5$NgSd1bzQUKEvKU6@T-8h-SWP_g=lR|APQ*LH~~apw9gL`{@6b{UPmp z;df!3-s#s1up)cE)9&nl+ggUk*uVWvOJtYPw41t;Iu20fsZ#<{Jq-w?Inpn-?Lr07 z9RPeV00slb2X%-*25J&$6O|3wlNuV$qcFACh=NjDqERF9Ji5iC$ zFzkUHps}Fxd-a|`zqiWx?e1@?VZ!&pBG|t|b8+CV;ENgz)%^zN9_?o?RNKz7eeO>^ zx=%poWA8`49UuD59|UNAu_ySxA@m;X&%0q%{5yhf-`jfet-V_5&Hl(6^0x9_QPbsU#jb`eQ{^mpS0iWw12Fx%r@-n z|3hQ{^Di{*`hBkXyOuo$ll9r>p2@dv-Lg-&V*r}8u1#;=H}H2)KK1n8j`nZ$Rl2xZ z?W9C{jk;LvG#8){x+|cnFyNI#b%$4K8Q8`V-3vO0r9kB(DfM@Qfo2D&EGO<6Tzb9R zZ8V}DJQk0aCKXV($>cK_e3%c?98>GpS5yQ7x}X;SsRf0s){v;xNV03F(L?e0^DxDtX7Vi|* z(HAp;GTqL7duRfVnl2!b+`Iex zek0}EskN5%f2YnYX`)y4ElPpuT)(k@m+qTt3`IN4;6ZZ`o9=6HGU)g0#jH^KmA!vE zjmMO9XPF7N1~e97npwWv==_|fist?uy0ZSy_8DEq{++vFBmQP`!`^<187XA=1V+X~ zCBmJdK^?LAZa_5#G_R+oK(~mbPt>uN3_HTnDQS{Ov&`Z|5gP?!I}e25maWWMhOR|p zfI4pk2@Ji6rV)Y03Uq9T+vUc6o3F;=w0LT~PQ3^73~gD^A2J60Msvtu4xqUO&|ISB zk`#rt7qwv%ZZY+yiVD3>)I-Z76H1(`oC_!t3kx*(@0u^lBJ-szMFf@Zy|~v`W`x z37}5Ho*lY<7X5Z4GVU(dZ9@#L5$wT-b9+(4mD=xV>ITbDTuT5^G7$aW?l$bH{)Soz z)(*5^tMf_3!3cr?W{Um#UG}f`LI%1m)b|_r_HVcB*20byXNNWY+AlEa!#x0+EvSFH|HB`z4`D+`Gd>A4St_mAS+a^=7XI-MGpb+SV6V90vsl`| zncmUGJ^$a2b}w!)qA}aNVzOa?77t6LRO3Khxx*hxH?`?2Y65a5*KVkE2BWpj9Y(7w z6sv3LG*!97@%q-TvTBcz$mY9gQIAAGZ5j>yFsA}x6ofE*J4#P=isxVGihGvegHl*I z{H$=Qp~Jv{&1lp>%8RV@#i2#srb=GU$iLR^TW?%X!Za`n=m3=-oSa*6ZDqYToNwWt!E!QF}<|a?`Wj8t)%S&)rj3 zU7_mUR#9&ACUc#Yl~pzVwvK$272biv2UOYJq1=>lT@H6_z_3O0#(3rYpo8ZhF|Bb> zVamKUNA`}KHe=S(IrC=Q9p3D0{2VU-5JIni0Kx36>QgWO=^u?*YqNOmIl zwz@x841a*}-lvQE%e>0*Z!zA*;de9M!}uo0-^c#@86RNmJx7ag4#7XH$G2kGNA%98 z@l6=)661l42QiLj9K%>(9LqS4@nFXBj1w3qGEQQg%s7Q{D&rxHhcX_}$9Op70>*`mix?L(E@52Ccm(4z#^sDF7*{f`VqDF5 zB;y*!wTwqG9?f_RZ^p*zv-Id2&pd;(hprny(Xl-K}ZvILJZF;Qu;DDYO918 zfK`k#5)Vp4c?hX(6OvsZq=AO;K*oa@sV`Iik25A1=Q7ehKNP=`5#3m|2gIN30u4Zf zm8@?XU`5!YlF20{^p0~k9QZ$TL8;2XvxQ6Tbv%l@}PhwR2Xj1w8Z z1u+VL4s=L&x1dr8KSJXme4fKUWdB4cA5$XDRZu43B=+M|PSrl(lQR`N7+V+@VYWlM zozM7cN3o7xWc&-`^=pb}@@;CS^NO%PG2=aq_cGqcct7IYr!KEcQp+W5s?qa##cQ1i<*qcp&3JjH4OHFcuicGLBI?F7?(00!MKcZIpYe(m5i$xS2G^TxQ1~p<57%9GakcuEaP#E$DckE zdp%(MWjvAbB*v2&PhmWj@ifNM8P8xmlkqIZvl-Vhu4g=l5zSj2TM20#CPWkcVZ5b2 zN{;#*A@wyhS#|6oq#wmmUP7|%gk)0*$rex^x+Y98;$>#lPc*6Djb>cPxQLPR(D+DW z0O4hfxQ$l*mom~gUjf(5*uvNYL|0PJVWocbBpl&^jK5=in(=%f^|P~}2*O{npX>tp zPh`A^!+*_qJcm1ZoOChLVdOME8W?F6jQmv)ifrQV^?J4bw=!;Fe1`E^#^)HHXMBP2 z4~&0g{1fAgj4v_%nek=DR~TPq{0rk>8DC?3o$(FEHyPhze4Ftd#&;RtV|<_S1I7;- zKVtlt@e{^R89!tEobe0BFB!jL{F?C_#%~$FWBi`+Z;aa*w=?cw+{w6$aW^AgM^o!( zFXKK&oN%g!A75rt=aeTfp2&C-d=?YS(+wnW(+*L3_lMOS6alC!zCD-)ycc-oHI~Qn4Mjp@UKS9UwyOaWC2}wNLuU zk&wn&qI)9ezXA=P!mme%Cp?nr4@F0&{BI2|^4-bwz5`Rrzu-`v%73R)#9d7POR?Cm zZt0^lq%@k#nf?w=_b1MO3iH2`qXVEIpA`Y+vWQ12NYV*MNm+9dyFOm82{eFO73mgA4-{MT{#ZceufN}~KHbNmFZ zm#r-SB+fsP<$IIEKVZ2J13hHbjOOqKEbrlrAg9`1fZ7h?K$sX!1`$Z|gAJ}`I%L}^ zJPAj7qqGoJQ<~o-IbVk3sZPm8lfA8gYvXwOK$iTJmuRkL`lb2QKyFu*hT@On_*%~Y z2BeZuE?RPg{i?coukHtakVTOIUu&2sBNHYZf2+}-- z{Z_(Aa~i^E7b-n4jPM|(1)h%mRE8mJDV%_?F6^N)5P8?buSNXtkpEs>4~L`uPr4CL z`>_=F!Yb1|jrddHFP^n!(!2&k=ewB06KEXNN5^pdD<~Yz zg;p@1X`KENmir2(dnIFx^V3(Gq@O=uuTk$OE@L_uGM^1xj!~RW;(RxA_;BWbG4siC z{KVFxoxYmWHF5ZPOm{rTiyS_k>0iL{G~c7P|1LUFB`^s`csu$jlA=8oZ4lK3^@}VV z^|#S*6i>DnT~GaypW-ZV&B#b}$Wc6vp%hO@@$WD{>Sqv5-MgE@BXERsVE9Nb8e=Ix z(WU(4r}!48Pi>9zzro>@mg1@3Q+}E!Q{KC{Jd~E`yvO`WJ_>sPj><>*315RFIwT*3 zmF$De;m>k@%1iX`VEO=+{@Wa1vhQzkKB7l-mvi~Zz7vi6;fOEMB3ubVrE*aG3ic;( zP2tNpKh+DxZ-%3MbWQjs9Hk?DQ5eZZerkghPh}!Kpc$xRj2lSlC=JC?dh%a`1e9*j zlp?K1t}faE-}K^qzzIcD8wigm#;-cK7`~cu0~A2<_4AAUdFP3AUZ6&E%;2K^Xhj8) zPUz_xq4I}fe~WT@7t^0Mu}J?Dd>=(+*yS(sd4=N-VENXpEAokP{%bQux|?n)hHq;r z=J&Gv8(F?3%|-g{XBX2gX1^c8ll%ggZwJf25{HdZ-Co1=dzkNbrvEX^S;O)j#qr;> z+<#*{h50|i^k;IqqZu8XKgjXxHWuYOlH;-El`3Bi%XbF=?bR35eQTGsDi)>D@K zbbcDu`Jc?ibfZz})YeZm75%tW+ejY}Ni+)>&*pgQ&(ww$rbF{Hu+)6Qe349zZ{+a% z8O>bprS|(<p z^&EbPTx=Jmc0YsVznb%pVLcFS;-BO22N+-GdWj&8=+9^RCo%nUE+35*M5C4SZDu@` z<)^WX;&0*d-N^ATa(y^CKF{GZnGd!PQ|sM_c;bIE=f8{7oxpNnc}tDIiQ{QrP5L{B z<$#Ms07`HbaT$b7aj&gS^5 zIDS5dpUC+)YK#5D??KhYxkPjmcvoc|V%FRgR8GW|!mzI>&2fxHOP z9L#!rlI8xG^?~V;8lUIPXjZ{z&qxEvcf|3HrK=J<6?|4*EM0LQm;{6kFtMUJPw zO7`bguGjByP4zsG)8q93#M91>be=F?4#1r%ogeJNRTWyeQzK%|7Q?z@3VSFXq#1*h z5q$1LAw#e#I0`4^Ow*jFxeBR=V%9hjyZxSxlRYoRO5+`xJ2j$K(#G-0%|Pun+UvD9 zXn&){&uNEgXKGhyS87+|bfHnYgLLC{J-S|; z^)y~TK|cxS57BviYoUeKL~^PR3TTy40{ z@EgO8h7E>|hDQxg8h&TkV%Tc83MG>rCrS=a{ZFU1$2O>2}i{ zIOXXcQ&clkGaGxmuF=?a!*s)S2k1uXM(GZOJPUNU>F(EU*0mZ|8CDyPRVhAWaN^vk z(~K7zuQ2`vCr61E$${$nvq}6N}F3 zv3jjO>tO2;>rm@B>kR86>tgE?>v-&>JP{UqGIlT4r316Ps2V-!#8v-e>MNUu0>;X?o@gO9ei*t7xjoRWw($RJ2y)D+W{y zthl{md&Q25ofW$(c314F*jur$qQ7FIW0GUCV~S&`;|Rwx$8yIC$4bX7j$0iY92*_C zIc|5{;lMYWHJ+MBY96h5tmg5WCu*Lod8+1jHBZ-Uso7fdOwF@3&(-|C#^f*aC;cgZ z+Mn^)`s@71`#1X^^grZ()&Cd&1)2+S>esI|S8J}(T&uZG(`aro=giIK7IUjPZysPC zXl^sNn+ICjSZ7_9Zp+n{Yb@7VuCrWkxxsR)eS>|Y{WkmU_B-r%+V8U8ZNJBUul+vz z{q_g!o9vtI*_w&YNzTd6DbA_RL!5^?4|7g)PIoHK8P1u`9_K9QZ08(juXC<*o^!sl z&w03Wf%8qzTb{Q)?|9zzyytn}^MU6>&qtn*J)d|!^?c^}-1CKJP;78)NNi|qSZsJ~ zMC^dr$k?dZfw6;Pqhn)Yh1l5GxY)t5@v#Z9iLptsWPEO7USfWtFL8KcL1JNIQDSjo zNn&Z@h{UqQ^2Cb7%EYR~>co+WHHo!}qY_6aj!EcShP4cD8PRe;%gmOZmRT*cTjsR% zw#;pr*D}AQujTNT1uY9(7PTyHS<P@G~0BW zVw+)`Y3s33UEeP~AZ?O1OAks9Ne@epNMB3eNZ(4|N#9F?*+lZVSA^4Bu|#7$kXDd zXV1uw`cFj-kH5Cdw2Gp?7i9hviD~n z$ZpDR&W;~FVRW*PDx?dULT#b0P+!Ov8VZetrb4dJTxcn@7V?Dwg@J{(LVKa3&{^mz zbQg{f`+6@@DcR~4=@4mTeDE>3rQA1B9sSoRT4di$j8)3VRXKF6tVUzUAU_BGCb`?l=6vhQ)C z+_tjqI8|;ZPKDczv*q@d?Zf$UFt?&k)QbkuD4N7F(JWfTaMVyl=J2Z#g3HnAOV|8|O9Vz)R*94rnIhl<0*;o=DK0CA)^N<2_JNE|JW5ewp2 zah!OtI9{9}P827Jlf^0GRPhk;Q1LKvnmAol#2MmDu}7RGV*eEpn?{K^oJH&t4;L4R z3&lkuc7zd^ibsgp7erhkt`t{^tHmS5HR7hxn@68M{fy~nPCsk<+0)leUqAhv>9@t_fLOd`ljidr$0FTq3I7#e`NX~Ww0_t8LA9ZhAShK1C)`< zDCI!qAZ4^NMky#`m2t|!%6MghGEteNOjf2SQ>mz7tPSCzjge^p*nURT~w-c;UF-d5gG-c{aH-d8?QK2$zZ zK2|n9>1ciV2OhkQ4Uft1`&f+NjXbbSt4@bKE z(yw&F%P(Q&zyGuT&wf?^Ykt-L`~PhJfBf11^ZS2U19aQ-v!94jPZIDC;~qx9h%831 z|3{eiAqh#c6cIwf7TnWb#WfDG-n&kz`sDLk45e>ys04(Gw8E zvOm%h4Y~cPvT!^c4TV#FpBV8bwBR2MiE)24*d0uGTz&{LPzZ&B;ef1*CnK>?JmVLo zv^N>VNFEh4K9>*{QXwhkj|JL2k}L?Zcml(IAQlypzCc`v28F1vP9KRUlJT%ugHvnj zoL)&1QjtV9+18$t^!Cnl*dK~^O0lk>FYb%mJrT(zH3lFjHf%^_0x?rM>j#&Ffieyvnv@Cl>IU|+{DW_nwcKgDjj7myp6Y*p+mmlD8 zB@&W7yO1^o=7^7i39|%WYgo1*HBwqQ7c%jwRKjX zJMNF8A%qiQx9AUpVNEtH$YxJA8<4X?gIp7BY?OpVAko;^)YOy^a=AoMl3Yolxh2_R zk%X4k*4BJJQa!*oz~xFNeaW_{F_o(9NTp)#PDdyd?hJQ!b%n#-4r>_uWH?h++6RiJ zq_R^E$Z|Aljiyp5eK;L(h66z;QmXQX(_YD!&QxLNj!YR&6OYBps(hJDZFLMA2x!gK z)#lpT+B*Eq<~mnh5Sk1I-Ld-mm^l;+x$9%@P&ONn+v2DLcQzaH*)$E>NJB%!=l3@@ z`n8P)zoAiUfo97a?Qy%kDc;oNj_2a>Tq5CcCvxuQ=H^68OS#7pDsKt3;-R^J0|&wY$Z|q%Z+EmO!j5D|M`zg4*;zv?!9V|zc@YIclE}Qs5kZ7; zfr$~q=!`Hh;gE#pj?NmwtQ);HAjcx1a8!=?!Xa4_1W^bkf}xlo1){-d3_UX-3UR;B z2LnUd#7I;OO5u1cAO*#k91leTp%6l4y+10%!+z|g1k)iVJTVb7{1BNEA?!-{B5_ep zh>|1*LOz^g2Wh-s0TRl|VB9E&qERs(mIT@FiHoVAFP4lY#HfTW5fp-H53FTE+wKk+ zq=@8A>E%=^7>x!c+2wJ$V}U>>)R74I+9QF0KN$;j`V*4ij`_kqZ>JFP#YHi!@63ce zL6laA7$pdij(Orj(l7dB@u)WxcDh4e?0FgSNg*L2N4;WL3e#e3uB3a2uOP+7_Lz8 z6ljPv%h|?OtUNV`>fDX3u4Ebq8AdcdPtMyOjE4lBRWJ)uWnHSQD(rJ)oEf=R+n7!} zQt?!6ONG-%pWr5%>l?fCwQ;L;pgU))49Ww2PJa+1lh75B<(kHZMADI|uP`;#G^WZu zZFZL@67JB{M*Ok*Ok=wt(jIgBg7v0kdpg<)4P?sQo~*MuANAR^6@iek+mR9?acmP6 z6zuUtDjIVqq)evT-WbMKQ25HKb)Y_Cj{1bE>Y9+xk!W!ToFOTdmb;olElqMh-Pvs@ zOS|f`je&Z5KGoE17~n9MJ96F8yu+BcgzTx1~#xTP_tPwCxh$yitBPPTZfe1Y=Hh|S*O^e5^Zb?BarhD5p|XSDhQ_GTQ# zR~hMw##7mFcRZD8m+E5iWY*izh&MgljnxSlY{_A*7F>babfVtw7sG-k9KmPNK0(Z9 zeL<&uN~=Gx?7-U*av4b2V3D{dSY) z8O^JBF8-FrfG@c#wL`VTwFhElb(;1r?TgyK;v+H(w&RIt6WV5Nk9LlBmG)%qI_-Mx zIoflzztUc$y+V7X_A2dfwRdXo)^5^n);_4kr++%5t_&N?*>rZDOBc`yx)XG#=+4z$ zuDe2at?owMO}d+Px9jfE-K~32_Xrj);`#(sp4PYOXXI_*!Gd?-D7;Q$oF=z}MqsGC; zp~ex$1B_#gQ;ai=hZ`3f7a5lrR~c6u*BXy99&J1Zul;CoPOa1AHhD}zlVBQR8fhA3 zI?!~GX^LsSsn4{)wAgf<>2cE*)3c^GO>ddrHN9v0$~3asXgte!ws9TShA%N*YP{0;hS6tgGUY&jndusJ)%iA++WRJa z$%svI^k%;~U{0B{SS9T;cbmtXCzz+27noO@k2J3_uQeZqL-Mrc*7B^;gyltQT5u zx884kz`Du0+4`vUaqAP-zgl0jzHWWPdVbZfsxGLyuIbxA5^_Hxq)snZ|VY$>@VZ*||)8s63+MIS+V$5`$*xu0TaeAG;AFVhqbS`op>paeR zy7LU@na;DE_d4%$-tTno%@{q&a^Azs&&=5 z>Rnk^gR9Xs(lyFeaE*0Mbsge5)ODC^nd?&5Wv*LYn_Qb+e{lWL^(WVhu9sYYc7-ri z6ug7HgS|t%L%qYi!@VQC2Y5$%M|pd^v%IstbG*IYx!!r+`QAS7;ob$_h2BNp#omA~ z=nG+#7JNf|Lw&=1!+j%s2l%G?4)J~A`_lK7?`z*TzHfcs`M&r4&9}|B-B%T;4$KP7 z4$KMk2IdCl1?C6(0*40{1QrGs1r`UE1WpXx6!>l6=D;n1TLT*c8w0lmZV%iMxHE89 z;P}u9p%X(Vg-#Bg5;`?>TIlr98KE;nXNArVtqYae%r=Xy+*V<$w9(Fy)i$^7c-slK z6KyBiPPUz5JJoiY?NM8squtTr=yY^Bx*dZYgB?R0LmlI4#@9@!nObv5&7n1i)l93I zUZd2^sF_*QQ=@b1-IZ>uyUJbd7TuCN;+EY}cg!7kC)`PQ%DvdV#C^2;827R6AaUs+e(ByJX;6Mrv0FTNnYExseZE50YbFMc3?D1Ic~ zEZrhKDm^AWE;pXr;@)*KAqf>+?sqQ`E0Tw)tG8Z1ZaFiDwd-WG0otW-FQ6 zOkJivlg%__8Z%9qT;|ZsVHszGtHIsiX%HKvhDd|l5N(Jx#2XR~5U?TLkZGuGsKaLc zS!@x}h&}&u4b2TL4Xq9Nh5-!&8y;?AO=6SO6ls#1 zqD?W}6C|3FO{u1IQ>Ll5sSX?XXPX+D=q4!F)ZEn4bYyN#Zf)+U+|jvXa>wS5%RQQV zEcbZsiQJR9r*gl`J)PT<+nReO_iXOD-0ySG=U&MDA@|4JpK>qeUdsJB_j2x)+^f02 z-KNjzit1n{rmR6 zwQp2B#B>0aqR>8DSKW=4CWv!b)3 zbE3V`xzTyi`O&`U;n4-rh0#UP#nC0vrO_jz%c9Gp*T%1l(^LK854$}TcRsCt@pQA(Pm3fnHr9*; zV?tC6;4V0Ugt zSP6UO_7K*5TyiEUV)HVgOOkwoOUMWj$(c+D!oawQRbs3jg=>w1I})|W+v2j=A$!HR ztuBq#WJB1VtZ(QR(={n~Fj^;JNx3YQb^zTmt>5iw4Eh726z~M2)h4V8`aL?Vc&CD5 zN)wGogsf;65>hM|&f@WIO?TKAkh;7=ARH6w#DudxE7wG{jV@PJ&hHVTa$6|ma;B}p z$|M%LJH%Q^2*&XIxG@t<_{0WXwbLgAU0z?cV2@=SSbUM9RxBA+K&e=Z5kvOc`l#%W zwTThzv=(<`rA`)QDdVV*H%X3`4l9nzEs=CFhQ~eA0k{;dm|=?+zwq2@S^E))r|DWw3Q8 z7Tv>kp{9mrT{@Diug8jhgEJ)H>4aQUn~<^i7$pN6KUM5Njay&2q#W z&e&ouowqI$&gZqEkU!`XqHcS*Syx*-(BG9x4D{DGR@iEc?eRog+}GIT4z^p`%Yu2k zL2hz|YO@Y+jV~?hbFxhicMnV?d}u(nXr0he1s!W*j?RIxV2iW93aiCfEK6kUiFRW^ zQ%P?U|NMuCIq2J1zs15Ouij!|6uXV1|(97yNi=5XVAn zM8E?jJY0~p5*`=eSwu`m7T5uwuTwS{u^Jingo7Z9S1ls01YV>FiqQ_q8-?xB;W>|6 z3L_3Kq{oUS))<9I5WQ88E)kF=b?^L4DAp~Il?%thvg}V`sW|AzQhHfH3PppFfu2;< zL#xR?36{+(B_v4$d*>26y>h2u6xtIml*16D#918@yTVqxSR*)vaGBN~i3tMMHj}nkb3@qakm8{-U%0g{Tb~Mr zY~d<@98V1*;ZS&B*ibKp615OO67W1MDa5i`*(PXY2}CS-CeWBk=OQ6bs4867Sm70d zaw=Tw2w@%2=f{J*NKK?R8i#51#Ps=8*q!o9ess`$F53|IR=b*f_2E!?BwZIuyY*54 zJ6mGpl06=4o8I5;6C$1Qgs(Fc!?VPOpwuLXW1&#eln4fE%NbF zp>Dq$PZcCzr$+Wgs{_dvNndV@#U0`LfW;K*GN*$fz0c+k$-zLbvms`Qlr`2lLoVz$ zhi2q0_sY?Dz9JfLY4wL2oq=!yyE?k#aYNW_(RCUnp$lz*bt7SQt`?_ zwZ;~aV&(#MvmKKp5}a0%wG|!^oDI#w-weY6-oJ9az_ZyGb%F)V>Xgul5BwB)r zf%WCh0XbdQUfmJ*dJ>f(uf}N$X5=8AHM!D>kiOQ{lE?7?Nb9SK1YJKjE(oDFZt0Bn zYP^N)#+$ezd|tedYsSAz;U;5sw@Yi$e2o>}8}#M)?yy4h72ck`6mRQJ#~b5xw!0nq zbjVYI^bVwd8R?JJm21vJx=)erb$n0QuC*ei5%2SsVYSzcRONUlxI*(T+%t%u0a_l! z7Z9%?_B+IHK-}lZ|Fsc&_d~9CkneiPa5=&{L9ZQQL8Ntp^TQT88NN)j7XEXQFOT>D z{8+BkOe?F<9D(asaQz6BehwP}H{-e&vR(z6Z{ykxS_#PG0-a+(XEQ$Zcj9^* z(!US?v%o7r;~C%{U8UwYg#8|L_TqXUunm0a{P`i^@*?!`2ErUD*T zgF2$`a}PrO2&kv~(FWc_9W6s0jX~Y~74`9k&Z?OtSTzqAt27(C=<5{&zF9RQR~h=L zS(8HE?~yl$w)8ggrM1PnEJqtjA>R;elDW)Lt;u_;A%PM7v<&ZZ6VGzZ-Dn3dpAo9<;~LkyZrlG-!{5JO{&_>a0c! zGHIencL8WVYOd5+s;e|#hpX{+ya{iTTQpZgwwJ-fjBxr!`Dlba2Hv+Cs?gTmgCBKv)BGaV_|N z1s?aKKD*(+0shw@PdDTl20G6|mKo6fY+OHqa2LwA4f^x|FILNC*4znMvhYtt9jpUB z1pj*AiFT`IH?RUS)Bzs_tu>Hg2GWsDoD6J)9^Z#Edlp@2pP?i~0xKp(fE{$EGg4g~#wYp9Jmi-S4`1ss5!uKXLH>_##yR4e~^i`Tjrb_c+ zMKxj#_`anK&uuOETcMeYcJVx{*ttlz4ej?Mq$va4MWCriynuG{Ey8Iw(StmbK>ICi z6`l#3G-0&!t>7brHtk0s!2bmNc+&>HGH|NU>_GeS;hMhv>4ZE}aD5`$=e23-WoFIs zxV{|pkHPgEYNut@;APRQL-+}hX#>J%g6F)-Ds@iqC1j<24PF4{1wB1-PJ}$Sp#Qj$W;^6CLaH60`&*P_hB|vP zfG>^@1Rt8`&^&1&WTcekpjQc;WhAX)&H^4L{M!OruyWW7!K#*gD}1!SLOpWPJn16P zDhECe9yBf=27S`laVU`H01Eyd3%muc4zj!oR{`fluDc-Xcc|w!T+^3xQ{n0nrvPU| z4w_d@gnJCMCxg!}=;;K~4X&?1`L2WB@iLU=P4Mb~ZeD3Dpez!sOr|c3Qkgh<)1kmrw0NKlI-pd_V13)IWde zzuMz|D3yA#U!PQS{5zepNNIoh=<8)YT15rghq{*r+QW3z@wKSaTcPX4=&v|NPV+8Y z6ULaWsJjHlgozcEnh#;0XV@?vd#su}#VSpq4&&~?D$UBl)tW00r5U{e{mrP(MehZ@ z<)C#T?0-GRh6|AYdbd?`7xE3Sr&emz3!lXvI^tVHsm=A{J%o_%TPWu^6m>-HJ6}F zcLT2keup%-fW~`}IgfH)g>-e$S08xJhs#06qfqu8(A8w{oC3EUd2TqE=16+Xu}zxy z!FxSuw;=yi$i54-cOv}?=+y$9PDK30;B^+{xB}&;9=`!Gaqt<9baX$o0A)XpbPT#Q z9|(ZnUg$f7>kE+g#blKx16~h8)=ME{7S{)$j5g?~1%0v${c3Uh=b<~(90y? zJ&Th{MU*>dCw6vA_R9IvjAjaG_>6 z&cDS$%HpctWkd*c>WR(B-k$wK=Pc=6zBsW0hb7}oT=h(9ItF+i$v+z>(?Uvd@ybQB zKxfHZarXS4#q)aUkYF5!yRa8$7vq5970dd1mlsdpg`9Jj_4b0y!X+!0C70tQ++lso zaRe<+#QsTv=-}HqP{7Z_WApe}T5&13F2|A6iy`)qK4=*Hz+%=?>;*oi=g4|-AkXeLOuRCtbFv6B}+&2EyPL9YKoyM zw-G8cHDDa1owH>1V%0N>PIO+_GrJch?JJ)+V(7&2a~Jl^Q{zUADoh+cejNK*u@Gw> zjuctmx2m^vjyZ%a_OeB2f^9!O%v?;a>0Pm3yG75YL(u8G=ebMTeyKf^AV-qM1}~>h zP2M*0@^9=y%F9CItaq?1Rl|N2fPI;8?)`{Sqfr2H`Fyk!RjgUm!KlBf=S@%OquMMf znmLRZJYnLb$zz7%V3eL!J$(z+-igDhf0}rBsUTw}FaNL7lIV?U7l7u94P*T92{R^+ zA6%F)aqtk5AB|yF-yEC{Un(f#4j4Xu_%KMnWF^WB(UHRyip!Uv$Im4@iQ~LsTfnM#R19f}t=7Ud zOsCW=|N9Mc%*ur;`p`p)ZLDYc3R1V~*-xkNmyajwh~vi9xXBYHmdj`TX&mPmWY=PS1%ZDAjvS;xMHA20@G3CqDcA^Hs(BaG5VrdZoBLIuLrg%g;_4Wb9 z?yecV5?yrpY#ft=^Vdt~$(K}I%Oj4sdfAe{AJ498sMy{9{ha%W!F^-MvLy?87mw~+ zyg(Iv=)xtif@(6=KMtqW|QqPg0XFr+NP|Xa_phUPJ4LT_cOnr z)jWIJyg7Y0^=(=3hXt=LczeOe3kEHowfMxvCoa8q>ElZuU-teo!*cV=^vVNQ9=Lkp z>a$m$yXMX{e_HeIQM#ieM>ici@z@o|lDIU+V@oI8wa}evagQK+5vH^+7OhItT!5Y~ z(Y%1ZLZS~HyBQAx(j9~VLWHyr9kt>2K#Xu1!s%_jFR};xbJc+-^*C`ALdsMBE%=f{Dwd{;z_bza96Y5UgmO`IX%fsdN`WXJ;vp}6>?I!=&c5dzZ#D8GmPb4 z!}+m|mKy&K!YTeGrf-sq`6Yyremf9O@f(qkg*uOWq> z!r>!vP35_c!>@##R3Eh*z6(fvUgmO~&;I9F&)=|quH*18AUDa=1)@~mcbV>TZZ}Ud zozu7;Xx~gqk8MI#Jd?{~Vfto9+GmO6dYJKS#*M7kO(+!cD`P!e%Klbvrxb^zcs^0o z?{|=k%DonWq>tB`&s&_|hcE=G`*TvdRa}lMSU+!Yx(38iJGvH*^z;>%<9=i&p49It z{suUTe~tCi&H5RJFcbyPI*M}4KsZ!@XCB4yCpbOX6RP)Z+&)n()qgR|L-j@Rcd}lx z?4QW}U>*A(;`sIKKM@_5^tzk<6|9Fk_CLyUQM)8P%wT$J**}^6rTqrqhrCqIYgk`H z8MiYo0aAUR&wBcZaUq8$mN;A`+}uWp;V4L#iD!#Q~=5SH8vb0TsgSdF0MSZh$JgHbU(G7 z4gr#U_rj5U%UP}qQ8<#P9+4!+13;fP;p|LJwi zXE4iG+FuRZ8LH`SV!G2A06dynHkU_OJG&ovzXFw@_{ z@}9)uZQxJ(l(^o8;hN;8{kW-o+nCQ;xTf-d#q=-Z`YY}Gy$_!eQaxP4^>jD;uVnvs zOy?Gs<2}}Mp6l}}rdP-9tB=b$pD_o%Bo3%P3Ce=VcgDqZaBDDA7HQci8PSv z<$XA+&-JXY7Un;d^}dVc-pTY=3@*|koj?Sv5f}4c%;h?Z^>GE)Kk0zdZGfXZaW2nj zrdQfGZvof)aa^A3SzaIVKt)(rF6w(Px9`$^hZiv47n8;Inn7AB*MqFrOIeR(H!1u8 zu16G4ZAUGrM5e$vwm++HTJ{~p%Q6!ss+^>a1*=fmKT4wiEH z&c!vgo9Ef@=W=-&=W}?N{li$^R<4%;h=+(+-!7uU{AxLV63hQO%eh%B>g8;%7rE4~ zxqaNg`t&lrecWF9SProI-{J>x)cHBpA+=$$E!3_czS=%SAjOfLf-2OyqWZd&uO|bk z{dIA@qy}(_!GZUdquUVd?*j`!8Ayv|1#4roeyvx z)B60B~G%k_cSHclJl9lA6{UnJ;X}kUZ0nnDQS1NBLfXqi}qYs?wt{N_!iJKL-U-`eqLA<$iG$ z{KWrl4ySfN=@P6TnpcrL$FMw`xu1~y6uu3P_`c8a&$9mtmg5=r@8SM;9H;v|%d?lm z_pzVG4bm&oq&gh}M`d{t;l%F^PDky8>ic6jD(7f8lDn1jqx-2kox|na#Bw88rMD4C zJT7NBF)dQV-(>nj+5bBGp$?S~?F(C~FXDS8=TCF|H{33$Us3!%j?b~bpZyoJ|0?!> z%Ki?Pzn=Z)!(S>Fl4=fzBcytv@Y^5{mE%25w}Qhz1CpFOS-;b8O?v%;!{6X?#2Kl* zQ#{o_>H9yw|1&f|eFRmg+CAzIWXGufj)SB2HxccE+RL{7dqxNw#0tp*n zfT;d|jfO>dABdvM;QgK=euzxerYSG+%)=3%S#U(3t|@LV_z=D4;fT(;Om7>6BYGb( z9ZFB~E`lRDsSK1~;P&_}r$_Tu`*9DD_)LN$`fq^`(euNR?F_?F`L=R-4Nz^ho8R@~q?ZC$OG2AdKkDgroHH@Q2D-8aKYgHOWExqWmwgynkW;@l1#4 zlYA#JeUh8#^)NO9DSmFr&*f`kycOZZC&cx!iqo|LDPJ#_XD-V}@(|C7aHJnPPn7gc z_JrtcXMIqeldg8ak^H~q`j~-h(hJ3rqw-Szaaqr9u(i2p*?Bk6|1DJ_+c9QkMA z52d4gC=%YGD#p<@xh-%c7di6(73HC8lAZip;mD6*HLM;;ylC8`G#9a4#FzY!b2&=( z^Dtzj^hl=0AIkpHxIp%nu8)PI`o4v+4oG@=m66Ioe&S2KO8e>4`V9H0J_zYYIF*s) zrF_JP!e_HSKF2lbi0X;(F+>th=JM>~_H+X16YnV;eg*PVd9F(rk=~jj|C?McI_H}7 z^#UB>1)PtrNsj;g{xuCyA0kI>kor`qPmms|T~l2VQoEuwxII*n=0oK7z)^c7dq?ex z>>nZB=Ml!>s6L{MGNZH~QhO2M2#G%-)ioi}rglNR2t`K9PyTUmBqMG+RUFSq`Kd2b zJEpv)enS16`aebhs^56!QuJxX8dM^r8fr}2owOZJw=5z1Sl?PWjd zon)Z;qIgP2X(*nMXc0f^&r~Mzlm6(sq(90>`6)exQF_t|(WSJ6hrm%Ds>f13N>Ax1 zJ=F_^Q+o1~zKB;8j`EX!$WQHt{M6pae<&Q$rFKYi9L9dq1NkW(A?bsV(h*;ZC!}~n z(kCJDC5*!np9JGHAn~F5M?$h^gfw0dQXe6C{`32f2L5-{K*^q$?0Cs;|I|)X|DyI! z{f?0ADfLH@k=i)*3+k(cA|v^!4^Y3N>yo`M*=?dj=}UIGWQR-RLCLO{>~(3JDUAyy zJ4}6zY(~jWmh3vwrf`ZUc}sSh`gciI3ZDo^X{f(bIE9fb*=H&<`AhbgYzFyD<3!2s zlm18-R9?c;_))U&R9>PbGM2`Z()d8-rudRwFWK>u-7bwcCHq_&M@sgbc#^Fw*=s60 z>7Zm^DUSRlyILAYsO(g3(hJcjjUy#{Te7nyds!McO5;UooFILa>?tAXfsp7Dmd20L zxIpQty#K2GCD};tr8=VWk)O&%NbQr#7h{YwCKyZORcYKQjT5Eu;Xn2qiu%v*|7Z=6 zO(&a6j`}zC4eBR^WLM~#`W<069QCC(#(GAwGZcOl9QC<*j5Mzy{{f8DzsUa;9QE(t zGd{-nTgI`Bw9Z5Q{SC%T7*AoG&KO|)3WcD4U3#Bl3;P=x^^D)3(3I|K#?t#SanPag zMSULx91?W4xfw>@C$#3XbYw798pMJ2=ww2F4Fq zPiq)2M>x^AgY~kJ^^ssbEaq}Ack@k8*jgX1QNsxkqDwBKe3n$u%2}pG_Y7?eomKab0w#5I-g2{@vIV=z_uuVJ~Dvz$+`TrI4xUZf@d zv@SyBy^Yh;xzAKjTS1KYoPdFb% zIsQ2=-!-NDOt%;1BK}5B|1Q&cjOD+qqd4|{&+=|zIZN*uB~cjS^A4BW+Eh&cIOq4y z`M=nE7kEprs=)I*_ulh9=iW=Ggd!AhlT< z@0_|t;ct4zncwhL?faemT6?|rT5Ip`mA?FvB>SBQvVeN{|ig~j~2Xl7XExQG|8X; zuO5&W`z_)Rt0I0z#50>-TIbtVIlmhu&HJ5C&+nn1=N~C{?nWGudj4_{ z_WX2!d43F}J-?3ro~79&ZqofGl5~EOBz?bG^zV~}4)^zM`%uC6RRzxFq?bWa6 z9LfIQS@<~o_c@Q>OP%;W=>z%Q(|=d!{}(@?B+UnbbH|O`1f3V>F zjc>^O6GbjB-|4$37#HP{HxInqZ!Y5JiypqCz`Wqd`sysPL}f-5+8*OH^WRzc`kVYV|6L{jNXeh|ODiFlE6O~&Z=cVE zbDg5<~$NP8r%}kz$Df!V&yCVOSj3>{}z3&@iZ}GW>zfbvv{SniiU-D0W z(P@$YDfp@$oKo^fiXQAO{a;q>z|X@}x;FQal-vJZ$JbnO@S4k;%P+g)m6u=B9K7sm zGGBS=b=O|Xmp)%}^_ACLfAwYY~(kGi!UHd%jYSvduB*3^)1G!^&uN ze9Gxhe%jWaGtPYWzWoRCf>(urB#%WLAz4z>AJms0^oO{tF z&p+>3=fB`3yo$H!42CPKqw(gGc0To#C!hYbweDocwAWuhb=T8R+jxpEtKi+kXP)(( z3--V0!sqTjd++lue(^=;p7X5po`1kzwD*A-x<#(d=rm+@mRv0Z#?P)lCQt> zjdvX4VMv}ldCAtEvk&csMbGA;H;ZrbIZ2E6?cL&kshqK?@;0Aj+B(XEE9d!m3J>%g z+PXC!+I;D(G3>|(6Ysp`7N3mZd7mTMbk^h*NAA9dhxOv|#q6G~%JWgPc6Epxmj^D7 z@_gdOTQ55|9y!{2(~+Y*&vkU`?!&k6XcG_mZTXn%d86j4!*9x`lD1w?^*u+A@W|TP zhqid^=M9Hqg_eOT0oky?*<@-$dH&N_Rpl4qTkke@$a30vQI$KShyC;t}6sD0(o z*6l}l*p(+&DHPN^TljP2jzdRohM;>ytT0Q?*N1MeI?SVW2fz9?mtJ*E;mGYgmnGJ3 zyyKQ5_uNWt^5G^Pc{_4Pl<=;bzy8qYO>Z52`16kqKK%JZy-e@!e)#jx`l}Cp{ut$^ z-Q;c4>kr3MonY%2#Cwm&JYF3?dc2&;e`8+f#CbAUpKeY!ro1kFlh>tB*GCpcooDKK z>C=RlwocYJNYm+ncD9{HT3;X1$=^J+y*}O8SRe5->ueKwUdEn%=(oZ5Dj0aO&VNph zzfK48z!xLoZ_ra1oHs^Pb8Jj)#xZm({sC)!TJSL+IMCGkdaTn1e5g%)c^!Pz+cs(7 zn?P2I1E&ohUAH|y0v^3GAFq?QV#3Si^Wcp&9P6cCj04{?e)7})($hLNl0Ta>dMR*1MZKLD>9@pVeFmRbFd^o7dtlGxWy_$yB`=G>cczcx;*?fC zwiTDr2K?do>_9;)J>mm9W4?=>c_^6UPgeZv`~fD-#{nNyWByL2qc(i`ANnS!z-Kxc zIlkI}9HxBrWYk&V9rC=&VbCA?3i)Bb=i8_>j=bfLG#tje?igBbOxMS~QM{UhI$Ml~ z(SAG`k0xfvgKUqcNBik$sA=_gfLNalwQ?m-*?2I43he0|{%AY|nD89GFEYUQKgUpm zsj;*@|HcDr067lxIT_XV3;3iF=Pwl7Q{@Z|4SXmLW1+nm1%A$iv>)WBP*9NPCk~;G zZ{c_(A`|TmAjywan}Dx@TAz%7p7;VC`1aSn+s!}MQ`5E*CeK8RHfpU5>q*TzGBkK!)L?`*r zuNJ>2d?j6ZDL3U80z;I-)iimY@-1}_iYhT{-M$(9-@mBg82{}bIEQ12|$3uR{*}0Nq+nsvg35UNx z$6`3!qNiPu-)ua+f${{5Frh^ryBBf6Xkweou`fNRu%ZoILHr53Y~tLw-XaNg_5P z{t;&k5b(iwBzznV7|~WO>ysC{Fu=_Ip*mxX(KyH7P?g5wRq)aN+a5Z?pXh5)Ls=UB zNR`xIVb!9Z--&u z%4Yu2_C{UVKI4dpmqKkr{zy&!7`II~Q2RIp`O65bpaqZN~AAM}tPVf8XTO#WAS36b%UZjm3k;4kt^{zv@IbgS_# z{A7H%9PrhA#>3zwKA;H1pgZ_c_)Yu7M|q&n;y)(-$aoxjJ(Q=851O3VGkHrRSR0RF zjrhZ$n4bdQ@t8b-u)l};RpeFSjp2E#{cOJ3R(gpYGkz5V;&aI@_!NE>`lH@4N<1b$ zwx{{n@q^x?Z}L0opUbPzXB1%jpnnpky7I>vjJ-(y03qmQ0%M;d7xG}h@nU?AhNrxe zeh>{p2oSqB*!jfSf$yyuX2eMOYW3ro9Q z-c3dj79pbcb{GLp`1i2S-SFnrW1PgF_|R94l6N{pe2A?^H&6gv5&kG#4wKTNj1S3R z>ixfgKdvr{0_H`RAfd*G#v2h237r2N_+Kq0uoI;cA3|%yVaxFk{#q@JcufBa%NZ1b zk>W&1?XU$OcxZbHMAnM&&`w&)@JGeJmb~>5Uln}JW0;xVVN`Hy8ya@w6RHH5?VZ^P z9|@~H^TUOs{>(`sir`oA0T8In;q!kMxOQgTXv!X0M z86UbHiT#?0_q5ct-gv;3vj4?rDAc4k`e(eE#87~`>KGU+;*BD&8UNKs(9i-)FLE}1 z3gN;wx=90?7W@qOvEFInqxOVs)FI@ge4#7;^J5{t1l1w%fh_+bf@5fpP(B3=UltA= zm6|5KqG&uB^ea;3sZc_3>80l26s)()L>n9Q7~k1no31p42dV-{da1#{rc=z$@fX;@ z54u7t83_0ui4vz=-&K7>eoV(of5_K(O!|TZjhc$$T9^fkH8u$G2xZs#2Kh) zOeOq_EJieASZ@qEfNX3ti8FcNqmE(#JjX}T7%JKtFZT7K^tQeJns}1YBVMH+^)OBD z3oGLf2840hp8X(L={^i<8M6w16nXGTd{Hyw4fhj_NBW2>D0dtTKKSBTBVLUW`0TjY zi@#K-f94nPQIqt)PBi1GSw7+o+gE?jZ|i|*JgMlTea6%JGvGUSz#nabE}aqFfj`da zLccC5_yaVTL-IlXXstt4yq)nP!-u?}+kIWsP^+N7CJvEbs;c6ay`(+(yB+|0{G>WV6Z|>yVQ|o_ z_$WVPA@kIWzxpKp#0O3rDHMT>H^e^p0pE;2ghqTI7MTxIMSD6>AN|qS$VWV3WC&Qf zXr3luXuiZt_CP%5t=IaiZ{pw6btoe`OR(_4pBBKc`e7cO)5Q!$UwEjDmYMl7kEcs} zO_@9yW4)A5< z83q5fh{3;*7x>dU@z3?7_!xg00tjFCg>%pjqwnI&Sn3n{Z+*n`fzN2P)`|Gg{X_Q= z2ff@sq@~zl_i(t-<@j+-a{mzFf*b-fe#5+)ccQv~f}Ev~LFK#M^-mUIJ0=)Ta5v9? zkRraJ0h%BKumi?Fj%i$pEsyxnjLb%klSs2(T7<0ZY34AMkrxLNyJ3z>$#`SZI>?GCsam zI)XTWtjiAy5g}Z`0%SaCo@^LBz}md01it>8D$vpZ3Os#(+#d zjUxMl>H+W(DR?2bgijY~;)0NJLAj}S{ET;J^u+#f(5t+hBTm2Qn*GrqIyxcf4VZ}k zlRpAPRVY-ypocS#bk2X|5ZV|XP&OeC3|+t%It1g`#an%{--hc2HCB|w2US=&jIjV< z-{eneA6>+U`p^fBpzxJ%>!5b=fLaNe)F{(|;SFGh|ncH&mxW0*_4$f&^APY55g zL_CJ}Y8Wt`V3p%*nqiBj8UNS=_$oH>91LTgIn^8=z0+42Ur=xS7x9MiEhax2Jc7-#f{uV)?tO_Pba4AbeBMwJh7gw7@6dEz;Ica6uuN4$eq zx}@NT`Q#TYGd{!{Wc)@`%vfYU7+(%>ft~9p#*$@AwFSl%J?BKfT&x^<&c-& zUVZ^(9PxY|Kk*4u1-y`7iEpz#MSYnW5Jf=w$XFy<RP z)u*V7_VOPypXTk@1z!xJp&H#=leabBH znMAxA8V$U}2W^oT3`Rcp^VK2CLZ9gkK8_#q(zTMIiFx@azKIX{kPjH~Uxac#M7(D~ znIGf>zVeFs67aJ<*aogN4}3JEv-UBbwpx5t)qpQPpr}Z|C-76>jKaDlKIFP`#E0x3 zDmEZHn(-dLb@qBeQjHHOH11&kht>vfGy;7lo!YH4KxwqUUSCdo94mR_Ltts2;e_^? zZWLtv2A(xO6kf)M;Ni?9kE@=?hk7NLoHwAP|8dS`dw|4i7kxyfX0C`CFH}&6eWxJ5Y3Nzff`RDdGXirxQQ(+1``_nnYh$2cFAYFNBt)ZZ($nv_mD~$XT@3hG4rid?*YlNt`bUcR1;BHBjSoc@ zQbgIfPrk_?AxjU8k0a{)YL)RI@FG5pc*^v%-M`74?%l@<=*mC^F-CYbYr|5DC+1E%DB z;D_rCYN?sa%RveV>gD4MqDt82AI-wi(mwD;Q{7k-u)Un0as9r9A-WNK5f_W61Q^EoFax&Ji93jcs5Yi^{}1aG zv7TDacC=fZ^yEw%%^$IV@qj3}95I%QyzwD}0^G=x|BT@B&=DNNxRL#{7{NY(5CKGlvkhfhO1smnB*;NP8gw6GbxQK!)m;|n1fUs{#z$;aic5JK?B zng!bfN+pD=BVQR3;qNW9#421p%Wd?Ob)fsgUMV;N715AgzaQw7)S*v)t- zaZUX(zSH!`U-1j~7&<}*)W9D`8hHtT@v-JPf^tz_0H-cU4)|u}9lZcRJV$%%y1i&W zFdHS{MFaNb0khAP>JQJ zZ5ZDUfp4}C6y<-$lC}&r|O>y`7A_z*53nVf*eAL>T55Bp1e7#5kLl7|$3rJ42y zV`$0t6ivHWHuoTfXZ!PcWbe7blV3vF~z*jPUu#ewJdez2)pL@n_}|fX_m7 z;b0-%&aX#%N=m7DZlg*37{_=qg1V?jR^YFbHGUAz@$e}wu&f6jf97Q@J{OPWyyMGH z{i5BB58a=0(F;eyASeCd@hD$}hry(s7ex>Y{J;Rgo4_~nOx$({{dwf&rUx4VaV~${ z7+A=|Z)6pl4jSQrufD*QoRkaAgI_IqZA_CM2m#BaN3^Q`Kxcb2euw|(T<}vKp$=m0 zusFVmMC=A%+<0hX41MJ1I334-;}@$-a=lRG6`dSw;n+rAa*z~6xPKY#?Z>a<#>?6{ z$mR9RGW_N7=kkh{L2p7!xi0gs<{ft%e2Vnv_$-a@g}yin-Y4b9e11g__@DeOV33z` z3tWsvTli-LSH~;um*dq<;TK#yyD>J8C&@4KE3Hw5R`#<&$x9N<5I&nZTJ3Qg>~O6& z(k>DldcE1;ka7z9{b9FnRk?B72L0Y(#D98m|1AIGR&F~IFh(JbF|O3+4@&#}9-qh@ zulBqp2gtp?_s;OZ41Wn;Rv4>4BD>Zf_xi+!RuPPHbO+#of;NTCY@eX4gCxL>^@KxL6t50{+{-Rr9HLTi@Qqmcl}|X@?g;PplF?2MppaN{s8Z}4vle##kzD2 zro+(&fBOSHmQ_aW>)qkBKcv}uZ$zOhMj&97sTz*>jhpkYh4?$R<}{l5-=mx5&Zm0%2;;I|+w&(^dbur)4cGgSGu_}XQsYVjG(sH)4_f$*=fYb97CSuR zdK8{}eWU43R{MJRq8r?z+U6luqjjtLg!t0|d?P}fuJ@9M6L7G7@X)_hu{pti5S#q~ zB`<5N^D$^Ba%lechnkrIcgBWA==9gusG4jlFRIp~Dx4>DK_j-P$7KSq3~ml_o?(Y* z4_ly}5`Sz2T>)_Rh+DBAbEQL@5DrtO%xP|FF8WwCi|ETat$J2{v?_bW^rEWHv#>2O z&-l=F+A8fwDgsIndJy&_r+bd2MyHX`Z1A5f8k9Pcb4wj5W6PtDq4p+nkQAsTTCwtJ=jd5^98#%-aQ~%rmtfn-P$+3SBeg z3;V$oL@Ut|rXVo|Q_AQX0#hX^q_Od;QKafq=b2L~c_^ctOY%@x;5?JPGv-iL=Gmyu zvzS=f%VrMeJd?4mRl`<|@h#JpK9d8bQyV|*Iq_}N~#1z*Re zu#Uf$^mnD-;i;nDBgbFu^;QANDd-n}|Ig}^KS@6@9Y4^Rjo({aOMaYS{C;n>-{oJw z-=a6+#W$#1I zL&Z;dR(|pc_vP`TV9u|t&3!9po^oO5j3-^Nde)PlH`B}dW7K8S3meByIF6Xv$y8y! zbh&b2lr!XthLKDuCmv_Z6KBaB$EaD(++xMtj@z=>@b=3v65EZ`6hdFhVw zap@1N796%DnY~0Iz{l9L!J<>vwvQ{Jk#jm=FNIw_<<){ia2Rw3y?A2z0RGV*dg@uaEN24|x)$Xk1#P;NSJDN&l^)N! zBKd=)N4>(&z$fHoKAwY_>6_(%IemXDw- z`hk0lTi_681U%k1fR3#bwZI2B1OVX(-zc7~e9B$bh^L{raPXuN`4fl}X#$@!YXBBB zgMPyknLT0+q{e1H&6Fc_b;m>?ln>A^;T3#>PT&PyEFYu`1>(63+8eWgQ-u?Bu`Uzx zP##q{@D+u0lOJCS{&P6u3Ac=2ya|T0_(&HriaauobD@{*E%$LCyPWasFmBXe<4J-R zKJlIg%UM>+MIOqRavZ)95gXy^Pr#|=hDt6B zv5%F{>nSg`9f~|0mr?1*ybigCE|U*Ek8<@K{v#*hc$VM1vLX0mq-cNao_ZGe@XG}q zo7>8FCdZIdl~&{ZJ(CJ0Ko3n#~2Y+vaK z8xeR0T>*!gLS%^CIkR+xFs1{x1W3pMIGnL>;!ioHv=feJ^v-SczW6Y&ILEx|O*YUC z)Ud&mud?IaWuCdcQ=+l)>Y&Ri3UDvSK5t^p=?@&@M&TGfB6sLhZ?We@i^?kwe$bk{kCt*S@Vy_#qkR_6 za49^EMqm2#B@X;Q&ViMIGYkC>I~?|h{gQRA8&S$U(LQURjA!r}`by`s`(79f?F|r9J%e432zrZAw9 zpNy+mR>V~V3)HK^w|4tl4nFo1ANa#UCiC*S(8UD_kSXQH8FgIroWQ=ehYI|<9U^VcdYBg-`H`5^<$x{tS>BI-{?Y@vJASwODN*QrWml1OsosV zhYd5}Ko`8Ry>!jn_qkH*xwoH*KTo+^_sEB+LVZ!@#J%bqr7_S>~LEypNqVpZAO>!5}x#0-djgr3vyBJ>%8W# zEw4Gf#0>C9JY9DOf3&O8#Y@uAb>$P|DghtZ%lw=!C~46Jj951VBhKOzYj@*B=nxnA z(B~ChrQG#tE$2Z&u8J5Vf{$nTtR8WLGZxR7H_A(U=6fxVI^Z}i>vZ_#{sK0ooQdbz zxMO`sf7$|{I5*%ki)?SX>sI*8zgTx`R{{^$gO1Jmfa?blZ#L|2#2RC^&O)}#d-efX zW3XEtas7P#+!iSZ@MnVf}^uh&Z19$h`%J^%r&t z{EuIMNvGxI4DZoWmcGbZJK`L5T}m7d0i(gHk*WAB(8W&n_H?oEVFy*ZSTDEe;sJ(j z=mLM~l0Sv6+4`%ATr_kj&%AqRa{-nqFKi8L@xxU)k zmteN0ULmi6^Bw-o*JX&2@`_L8v;6U~diODkp159V!HM$Oy2m+$9Kkc?v?zDu`^4Y5 zho;9m4hm*+(k3QdK$*!)xzFjsDzI1XJV7Oar@k`3#NTm4kHhu>x0WL({XG|^ay=O9 zFP1OD!Om1Tv-ZxT)Sub3@ z@g(z<_QXx|a$cYja9Ma+?)r;vteeM=aPr+R(V}_ zNq@oxhVZ_${tCH#>CfLa2Ug1dA=WSUpY+Sd&#`}4*B6?R@YmSG++QQ!%($NRtVi5$ zWc`)xW1p<}{jvLpKn^?aeAkcb*Q%XmzG$DBTp8yYgJB=AKia*pW3ESt^TUorT+A== z(O*Y9?OpX_1^&qS9_ztaXSu&hyaAlpKlGxp>!z?j5ho;F(24KTF4CTI;*Id_g%4PE z>{afwxvq2{#&ukl7dtQ3`dQ-~&id7`|Hf{>mk#Y{g;V#nD0jaq#?>DeJ09!J#3%N% zhhB3CIKYDs7?p^J-Aitj%gCO6L4(r6-;h`#k(eaumPWFpZs^c z;&;lri8w0ly#4~L10VIlALOEa`ZeINJ_97}io85SZ_*X9GuyIc;y6dbupq+R#)MYtOv`K(;(nt*~`1^SpSNkM+Z> zxZ{;8B<{M&TX$+j&;`APt{J`fQ`P}+3OpUD9?%7h8C^3ttW#WL1RUwh_P%I1`a^4+ zDYwcO%=wa3`NoWE!IxL&YpQVMjs4_J{q_q4Qirp=tSh-Q0(}#X?dNjg#fMRjrE%UfcjT?`-NzP=>nF~v@9KJ49f@@% zblJYHE15kBgO}{MK4tb2I~H8HJ{$AC+WT>P{pETB8DJ+S-xFQ|vuY?nJd$#^+ugfw%k9Zz?ka0blnRcGD>jKxxSe&@NN&B!f>DQ|L2TRNq zQVhGMpU@t{AM-=kUx811{l&i33D#fIwcYw_`*kJw)b&?cpGKT6K6Sm5*FD3Id7X#= zHrHLqJ=S0P$K*rOGhdfciocOA=`sF?6WYUAhsC}M{LvmGNsL_hW!CR-eO4apDc3Kt z{z6{Z*OXVTzg(~3r)-a(m9GWPygco_{xtMq`}J3>v)thc|Ai$JPR1L~-MQS-FQ>eW zU-W}Bx}bNs?fMIU(Oyq6V}u`c#rg}nyiH5`lsmg%{5WnM7jcXG60XaP6OwPXH(-eU z4H)1$taV)v{ERb{gYu9+?k_4o%f;Wb{Go;GP~!xy`{lj{`x^uYUSHW@u`Y8x#tI33aQA3yorONn)?W!n)5pFCw-u6)b)4tAPGT(vvseR`b8G#@L(Hzr z7S>tlC!CA+{4L{hyJcN>sfYF;AM3AjolUFrrQ=H+_`Bmk$NPw4pDp8V=BXBF!hJYi z-*Md(`!3ogW-xKD_F}d_qdn0>=6yt%4{TXoM`*{~_m6c!#?dj~XX~j&INmp2c-UmxUd}4iTSY zSHn&QK7}s$pgji;xL`neFs{-S>y_~PmghP#@Fd>A-m$)LpPe7tyTx@1m_ip+m2&Ih zC6vaxk_TOLJt97oL$CXm%0oMhf8$)@;&LBa!9U8&`b$4Sf1%2kDlhl(10UBh*&ZeI zfy68itV%g@2|N?8h%@AK$SdR&@S#57I|A3gLS8`!*CWF3C>P}=g`8=<>2*ua(B--U z_#scn%NgPInpt`5<0rkzH^&RQ;IE^Kzx+%%!S@9?_^xO#9j*3^FC118fqz80`eUy* zxc?5Gwx8)C<-(yy=v%ai_R>S*>QaoO-y1el?))N>9boA6(4##0?BDsg_BLuxHqE|)HOt-PeJ9?Dyq?6U|bIhKFt?P=}0j`neV5VXXMCsHUAPI9i@ zK4B+LTt+L0@+Pqki+^51ZL%zAF~jzheI{)@819yuQ|6e}(i+P&sQ~e?E;(8_aO#AG8xzJ(Uj*{Y!;17DE$Dlmo`JhMsRC)p~{mF+vvD;2jYz)FZt|sQ_InKUPMG>!nk>T$#U0m+y|1^iDG?M@C^Q=hrGK( zxk;D!@C-(YH@E{q`#q00fTO(hTUBoQU;PGh2tP#o@T+BAY5ec?_1GW4pGX%Q4dQP( zYtQh*r99v#9?Y*;|BJuZz@j~SqOJC^A1?mjBfsNZ=?y)EuChLb4{?1k@dkhRk3W<@ z?yoAZq-#!Z?kDGXtjoleb(!xM1)E_rDC;lcL}mi(msmG(|9R{BSF60g$ty`VxpbD- zuhN;}a@-H+8X6a#;yy#*cyK+p+)vx*nU{nQs;rT)Kg!CrT%6NuaorQk!Jd)pNG;I} zzW#u6$h5rUqqSiPrLpKdmZbqavcPJ=lUz` zPR>{LJEAJu=Y0;Yzr21Dt2pe8>jm@mx=Pruumia+08X(F2}l1G>w;nrb5D0>53x&W zKO!0iAN@BrW_AXjz`wQriuGU6g*|lrr5~zv=?Aq-?#JmjT6E?8iqMtqlP=-wcj|s< z(lzt@vHsHDG1r4n+U;WJW4%-DxqOqKk#E^~%X2;8dP};<;g5kMow2_c>o4sv_@>_Q z;hEU)b6of3EDz3wz1DANhrv6_8N>Dkp9&{9G%s(h%hU(?ZvT*1S*L S&ThkuHY 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%0A=k$`f)4AN2&gH&zF88H#xi4Lp z`_gr}FP+Q%zAhhrBt35R;eHq5!~H(Qhx?s~5BGZ!AMSS}KHTp|e7N6{_;9}`@!_#Z zHkRP`nX!anEXU&6Sczdw$70%8iD7KV;@Vh=VT{LOTfamsx{W0a<2)AO#!3v+b}Y(` zl^CY)Sfm>(F-+sJXg5}3n9gGnuU{e-^TrZ}={y$q#!3v+c`Wvgl^CY;So|9+F-+&N z7}zfni-Kbb!*m{tgkvR!={yz<$4U&-c`PE1l^CY;SX3M_Eu}C>qVi@PKXxT5}_gp^Q@1T9S-*@?Nzw`3pe(&YO{qD<$ z`~8;>_d75j?)P9mJQhL65{7Xci=tyChVdMWq+=z9aUF}MV_Eu}Ir55sS5B3Bx###oMtG z!wfwZbH_>yGxb>99V;=+*kiG`Um_NL#}bBFdn^Kvl^AC2u_!!NVwlcjk$9}cFrCMu z@mPsrI*&!%n>D+m9%dy<){P8+e zvucA^i{(z|Fgg&Q%$?3-w8t%(JDp1}`t~V_4#X#rc#(H3cRH6|)E&ZQS|$8x80 z=|$VI-056;k+z@Pi?d_kA*Pzn<#f6(z4$tYJKbEp*gBRw-C(`A+RyDp)iH3o#d;BS zEO$DWUNjxcovuqSl8)t0*QFOl$8x9Z(u<(|++O?~1E=fKn_G_MPS>S3w;aozu1jxj zIhH$Jm)_j6pWBO;eQ>`o^`ZUl#E16#5+B+R9(-uO7xAI}u)&A+`wt)54;XxCzvu9w zUSu2tr*r2;#j)J!{CN>^EO$DGUNjuboz9~d3CD7$bLmCFer_)Yj)Bva=*7RW-05oc z=9Xi*(-rB>Eyr@FtJ0fW_H%m?Zw#ESOK)yDmOEXS-rRC5ce*aUx#d{ybX|IL%dy<) zy7Z!3Kesox90RB8(wke3UfrEy+xcbPMDN-> z!O1_q#LIgN_+#o z2e+R-k3I6m^WL-nq4OTl`@VS(*8i+|A7s8}-g|T(G4DOwZ|{#6)g+3Lpf)oIRf`#fs=W+CX)RNS_Uy6d7Nxu9A|Y~8W%|J3b00%e z7q!dO{v4iozWoP|R-WOQ%kmtb9DkF12ljdS1~DZ?OGDu$ggtG#X2PkO{XISQo5wIc z#@Yr9?~PbZB+xJ%Mg4Zc`SD)uw2DJVqbxkANw@;8MNA#!l&S;S_Aqs@U!K(d9XMP(sTsJZ$h7)$@!LT3xdWTK|4kHLMOoo9Y-QCb(C^pWj4Bvy)(K8oALIDd?8oMKXQ8KX`v&DG$I1)(Mz48U!0g=R zh|tGYX3l(q7t!+iQ~rO#m-y-> zze&)c{f8W=_qN{NGrT>|VZi9wya_jYSmEPL%QH{R&GSMUbiVL{ONicn>mK>w$aB0d zd~soReui^&7dfkT)?;y>bM~BAd^Qq|eKTx?ZtiLG3R7BR#Gl>~8>N~T!%iKVa$OK7 zF8Sut_weq*<49!xw9EEbg{I}sj9H1En7trtKM<9R-tyXO?>+TDS$U?iRME>MPQP$@ zxgx)CFp`-6B3M_|3El~OHj-HM-q&6lFE4q%m#7!IMk#vBYINU!g=z%py*#z=kIc^M zL3wfl-ZIDus(!TTwfiCE_7n*oPNH12X8djfg!atr%t z|2<$oWa)A&t~^(n=TkbI0-aqrzcO#mE)O)9lczs?WaiLE`DU3d_QdI94}*C+G9UMR zVE4>v*Xz$bahiK+EAnWkW;r%{9tYO**QaLZ+1{@2i_`5z5-@M<;6SMHDm{CE$Fn-a z((4{#-_x2pbSSdU=(sj)N5q;_*^Y2~Lfezcck>~h#UFI3nD*?#RL? zaeis`(ghAS;8Bh*U{1>`CKR-y9M;dOCE1_NceJvyY*0KlyK-sy+)`zZ!{C<}D$7x* za0D0n>=N%;KD0ZMD)CXTi!k>zqFFu}xy*2SarWF<3Gk6i7bmt6WH%Nt_x?!00K9R4dG3z_?4uU@ zEJim1Fklz|NB4^U&3$ATIDPZ%B7g3Calg6Or^=K=A1$-^z2My@xTxJ^vN5}EUBqsn zCSJF9_Crjzpb6cH)s+%O>h|8n>E5%js3ylpxFF!F!{dib# z-kIm3Ve@2TVRQS$5tF?a_zGyhd*I+iwt~61*4+A0tpO;eH8=f;R*%Ve*1)`IR?q!d z);`(q6&P%feCWwX9wl703H`4YIDiRNO`7{~frHyH)g+i8)!dm7)!cajs(J2*r+PGJ z_YI<04C;~yG|inKW?FzBWD25J!r8o05GknbwFn_ip)-%#YcDz!v>zKrPYlKFEfJyh z49r+77&PES6sVlB7*GK7N;8|=y~fPMcS^F+UGL6@EauThcDjwnb%Jn2^J*Q-MeJQgdd08!73 z%VcjKe#B(dgLD6uRDG1ptW&6z`;eGh(-6dca?tApqJd*?Rm0KemNv{&zrEPC5CQd) zLc40BCu@x{9Q_HI{^E$T_VwwN_cSpGb@6e(w&=5d(L#*S>RpQc94C(+b5DoOm~3h0 z$=P#^&w}Xjs6Oje={*t+G1^>MS&oBFSNMeaxn8bgOS9es6QMn9CrD1iEEAz)MA6}}=#v#U=1&E_Ef98ct6@3Gik04ae^+CN+%-I;s zjd%l&pPPz~oK|@_b@-@Ve!CwJTPJM6H9aF=N9xzhgA6NvIl;2 zcK&ijZ|&eiQ%SIyf=Pj=;x~v~%3uvPVMskTF{L)W(4exEV8j7qby(OSdJ9j%d>U)4 z9A54T%VXUo*`gl&@F(Ujt}I``70gH4vEyQ^BR+F{{=%|s?bPCY#iJP%cHn*1vq=FH z_9GB~W@g{FNx@I?-r5S2baV1;0A$vJ_iZM!);QF&BqcaE=38C@oG4(IE?JKzTU6(1 zeBO!Kk1Z}8{`j0GyL|6OqE5T&qqG`y&w4Cp6R`JY}s*O z|ABLr3+F%g`9J#O|N4bL`O`o9^S^lcCw}s$cK&o}Y}^*U^RBz^IgrU_vizUVG_L)@$#7uJ@w&pl_yW%f8gLd9{8S*yz^Zj zedhe+@BHrfPVe0}fAIq!eEh`H<>i&r0dtq@}@Usn>wEIi{VJ}7X)FD39>;h z$Ona>7?gsMpd5?_W5IYZ5ljY~g3ZB}U~8}~xGmTo>bEZw>Ab-WI$)ct`L+@NL0^!8?O@1>YXLJ9tm9JD3Xg1k=IZU|+C5I1n5R4h8QG zz9V>F@SVZ?gYOC+3SJCef{2I07sHnz<)O@rnU^5wq3ny5!FAnu|3i}{xz z@u9+tg_j`oq2i0hmmv3{(u<{+Ao`(^7e`)#^jx-B$c9;@I1+}LOeV}`vtbwv{V6Hq zQnOt3tgHU?i_+}V;J^O?(9iStBmDgsf9KubC%OI-f4>lXK6p9!M(`pWzB9Zx{AO@H zSPM3g&@|FGgrp_s31qq%nU{lNkfZLX_P|Kz3&B?*tRwf`Nc153 zvYL7u8kzuGImjCfFCy7@k_!fMK_Mu;9DFYLo#3~DY$8{Q|5Q%~t?dQNdnsr24atdL zj^|A9p$|ziVet9S!PCDDg5&>`#}|X(Gd~yv3h>UL?4&$@|7AxIJj&mvwgHwVGL;qQC-+sxnZZVH0G!yjU@ zztX0i;mGF9?d2`mU87s6J@E@OrA;F{HbKCt`X?OWcm>)Y;|IyCy=);)K;_pR@o z{*J(u&uqTEoZYf3H@bB!Kfdjb!fkg>Y`?2`_vDUyf>O9?=SW6{!EyVR(cD|UZR*gj z`ySl$Uh>|tZM^W-J8zpPPHw;Jez3i7@4Mc1_l|qs{_Xp|^ZonZ{f_q>_^u!=s^+S)gNxkjFhuGH|IvTjODl9KE7>Ny#7rgn3q4C092ab--!{BM88b7P%0I&xk9NhqT0wu^~I5KP>hdQ*Ot%9(`9qUHxBzJ z%qu1L=9wl(C;5#{j^Sb_g;Wpa(Xr9;Xqkl3$?`;5y-jH(pT#kk@;NbD6obVPm?;#? zP*^OgfxO92-nA4wlu>Id&^ixi9?n=l`v89RZNZbyvmVJD&HU@&2ZEo&WB%vh)4?N| zM>EGV_tWOz9*$GCi0|DKJQKWwCzapA(|LTZ^~~>}eV=#!`9knh;au>s;Mrh4xEOpf z`04OJgkKJRE&Na6Z-hlCm9Lk_w_bl6RNdzM^-H5O!KL5_@k^f?{m-Mz!AkJy(dUBS z9R01)-yZ$U=- zLRbt-;Ye5xN5ipjJe&w8!%gAla7(x~+!o#zZVz{aJHy+K-MIODa1TEA zE#ZBk`m(o%R(kIU9|*rKd=UTpuJGH#cZcr@cZXBq9{lOva9_ATJP;lX4~6dyzaxBK z_?_YV!|%e?h5TpxMPZe!^2of<>m7^11^n$CDP^QEO3DQ3R_2pPeFX1bHaIMvF>*-% zMS9L6B}(AiLLd4Q!3o!=z5{KIQ_}X4%i#RU;Pv2*;5lSEIn=(eM(h#u%;)$o%n?K6 z^5&ik5fgxXo~Vic@@a-TF;*NM*_A2Z0doi#CML_d9pm|t+p{~jhxtM#Qwr{+L%l29 z`u{Qa9^h3}TOaq7By&ilr;4~xH7QGy=1EEl=wSv; zJ2@-6N>$r12^dO6j!86>^uzv@3|5L`DYfLZ)YOcO^i=Vml*CL=-9^X=kw>zZPg*D? zJ=OV3IySS60@AFG4of4e8QZM!=5^+b^v~1(OuiO9NTKc|@k~Nl{Hw-Dn@;`Y62ryU zz$e+OYnxD(F#(@c!!)}P&M+g9OeSh!km1eXpqiU$a;C;FcbVlTyTW)Bvt}MlLo}Nc zG_m86*_#Yv*JRH#%Pnqq;*@UCw&*eG1ycq3Pe=5K=(3ZedP+s}!uZM3DJKyC{?Z{q>uLE}^79^+N( zHS5phhYa;5x2~`bSbdrLbfGuA*LdA}!&;u)$sB2ovJP5L80uY0%`=UzMmPH0 zvy5kr=Zw#ca}3U@GGp#-&p&0OPj z%F&!rLA}>Hv$ye)`LVggbd5iZrHlpjjdS6*CAn#&xrVjFg>cxK6~v{+KsdMHK&?_M ziN~Sq%?;*8`u0ucW^;>~Y-}~Qv3{_Ot>!j!yP0QPVqR)Kj3nmUKiF-|i1CE+q_H3F zcbMhoPBYv1(OzJ;HB*ht%mVWZq8JIEh$VD^+7Xq;*jTWIcp&p(FkHFl3a>Xs)$VN5*-r zrE)0s2xBCb6X~Z^V@Y0pJWkqoqha@w!+oqR9w7hCtR6ZM z??J|mhe>0lxyrnpyl2~U?4QX)W#38ej~I^{kHOJgd!D_BoYtD_%)8(~HMR@BB*Wv7 zg=%OwGSFDv0S>exv%Ip;V+@?my5j(n|I=7*97KYW_YTuCR-h4wknCoAi@nv(HI_Ro zoRv;ZW4C?Cj@h=f#VDg}tDM!&8mGEZZtt{r*|p*$dzzto*=5!?{4u_caSbhJu33-v z^cl4(3BPA15x=$9GfS5vl--wfil>!Xl)+zFrcw`*c|GHOQ~Kw4x}8le`ZJ(3Z`Jt= zYgK9CC#37IW245W-h46w#AFhy>JC9X$P$TS>M zFB;BBVpzeQ?kx?wgR4V2j`&F>UWhp}LxlX9i8IP1DQ(7Sy0TO&4oJwBL&d}5;fSa5 zE=9lb|8PP;M>4k z6R(seGRUN@q|i@S_tLIUS=%9%X2d^+yz7y6OVVpdDLWEBmom16zowL{9{y1z(;EI8 zBbDRe-%b^tukAh`KYWES@v|VC!k!up+X4S z)?;z(i6foahF^Fm9RmVE2+AFUiVPP_DZR`w(*uYNLi%|Vj%6}=`em2A!!&m?&&Z_g z$bh1&?1(!Y@ybpGWQH9t&x~*;nX06SS5npvE^PBpLO^`Tm({t1jKDL~sCQ(a89{mx zE%`Gu)5X7nR795V&OT3BjubB=1#%S9Yq2lF}1-I)MctP%!FUQsA!&>aD`V zG9ZTZh}hssBX3^}QZghRvV3i0hKMXkFfE-5@eEQn&%rmy3obnu`d1m`;^j%9;)e9F zBOy!CeFG+M+X06RqyZ1&#M|$HPnJg#ct!@fi)QAi7namARm-UeEl2Zhazf6YUS;Iu zcp8p)b5g@pS{Rp9mJkwnPI@ENOQZ0+zF%ZZXMMjnkvK?TBcWW@z=ncY^WYM=}}-Z4NFaE?bI5Da>`pJQp+D zmCP6Y?ZJ0(+l~2oa2=4}CfwG6gQO!~m2OjTD}uNU+zIwl$d05rg?-J<_f)wQ_42Be$UfD7R1N76c-{4U1- zMa*q+yBXXDMuV#G^F;>rL6{GTvjrJ+#%()cPsIO2=mzpqoi-r9$8mca^E2QE?3$~-# z%mXl!G_w`T2vm2{T~GGVw&byj{1i`m-x3gwb+f??jIw}aGLdXy&C9O?6xO|drZ?ff z!dwnkl8)k@1T>So9Xt-&f|1|>7@Y%c2u>rQ__zgh0yhKkr1I2@=k+pS{zaTZ-1=hf z2Zmsdfk~JZ?|j1UgnkWXf`jY*e-ZNNluI1}>5o=w zUBCxmEMZj9i;2`X-!P7YHpgiScmX^G&cOc>S%>4-08Gh97JV@at5$;5l0baWira9&d5X|(Z=qX`_6L$%2uMzGK zXkX<6J)f`_Ax8(=5&QArJ<4zb^gi&}9B`Y(-7y$Z#Q-RXGkuX&W^EHh|?u7Rq4zXWQ#gYcUT{fzQOp{+p?P+R*Npx(wn!puNMJK&F^dUd}7It#oF)Q7$f zp9OfHg^mZ~%x3(SgY`i9Urx9$Nau0#qR8HSLVC~+Gf5jGF{@9w7zVGX<(CO@c=A_0 zy#rPfW(c$f;qD{9`j|h%oC7*wJ`Vgr9>bxBNOU-9sU3We|Er)Q<|{};GX9)!E$}~t z?3Mo$@HHJQ#@rP5$(Y~AL%*1ez)sPOf05^7xL*Uk3|s_S;&+_#2M?0=`PB7F(!889 zoQL^LBIc1sf6VF7I|%b0I2Zdn_??2=d*riV~%@y0*3S+%td z8;m5J^g($rba-=#H=w)Wa}<7a2$M}ZbXVRu^fFZD7r{B?qxO0TIuFH_{%MRo8yv#? z7I8JV9{{S5MpbYv?r-A03b%Eb4}jIk_*>$uPO1^+72N*7ej#DX;p02Zv%o&=Irvux ziWkE!oe{qmL5G0v2{(mwY7jmCF)u`n^`OUqC@5R+7!$y7;!K220-7t|g8f!78T%CQyYhtI1a8CqrGNQj zv+7kfgO$B3zb*bMT|o|Hf4IG?UZj`9fcgf9dixg+3PaND8~N!xLK%8VPf?aHd)meb z8VgQdT}m&~z@MOyFe{1w6=A*xsH4}XD6Q|o!$fi^#~qkk6?5ib1GCzw`X|jZb_4OOxlbP&dt>zD9>RT#{d=$n^XsBuKbX4` zeFFo=&_=;PFbEU@&ixyM0ZDjmTC{rH+ykmU;yrXP1*-8teRvjV3R(d5i>RO1HdCQZ zfWqj}n4>rsgLlDPpme$e^-n#4`l?q!J8&G>knQ&;8kf{2#f!#+=3prHbD=*S%Qy*b z4LX5VU>JV=q1Tb2`j8ula0m83=$yvmrg5m8ik+UrID&m4X>5B9`JM+4OF8=i${3I) zfQeudm<*TIvvHIA4PAd#A3p9#r_?%G5*~!_Xd6O`++e1pjD97+$7VO2L?<;f51R62o!;0 zFc?TCWaHI0#M1%Eq7Z}0`!4yY|) zi~}xc337pS@h&hQ2BhzGF`oej0LhqY_rg92RU0}Pw8bnLT>$O@TfsIk2TZ|V^Pj$$ z?*{9@Wb8kH)!;$wYoODhCqet7r2T-)K$Q#XgJVGh&=52N$;qazzL3*2{IxjX!`~#+ zJ9%SSoRr}}4reWrO#Wga)k=@4hrX!BY+oNVF@kGdG*Rd4ENnVq*2EiOa+upVtd$h!bJ~!4jzS|Z zWgzpLW9%8;j14Cq)Pu8isymKBt7>3^SgLmH{K`tj@o2PF!K7+BD<+}`4by|gw-dm# z9}bjx!ilvqYDXgBnw$ye5MQWD)ud|4$E4>(Q}|t+QxBZ)3fXm2)9NLqCuf9NTx2AL zlaI;DjHYBeRjQ_$Nl7~SlP2&Z1;1(gRAzprNUdxS+~pT$==M+7ssE6v7yYQt51bC| zLp#j0b^goYd`*ZE;5;L2r+O!4GVDu?bUV#H4nLhM=*GC-gK;I*4zt73+X&fb7!Gya z37Mb89zwF+pPe(??nt{wkTw%pyFFtMs*23ij5r8~*88UytxC;EjWU3gf@baYS)z26 zo?YW#E>OQNca2@5Zk(P8m4B7EUE`qq^MTx-0)v1a(XK>#o1y zU+P``heGMmR4?%fyp1yC_ACNi!KI22q^td#jr;KGrEOt0j zqQTFf0}IS4^*dN*M8^a5PDssKb?Wg0ygIg{dDgC@_de7&{e6gf(Y45WU4pzNzhE5I zcyJPE15O1;fBfDtE;Svx!a=!u6g~Q<=bz&;1aguUkOVApt`%VR(xg;sf0RE-289V8 zg<)7lyZmuWW<9bK!>dGoSWakIq|ul;!3nMVoO9th?c22;Q8K=yb=y{LS`X!I`qtx!*n05b5u=NTv~1U^ zO{=!8hYuTAc$Ho_8q}H_cE%K5)4A0kFA48YzSY3$XtGm`r_LaI@-$OUnZ#OQ5ScL?YYY2T4hGXzlvNFO*Rpd z=pRz(XVo9;EGZIYLyg1zh6x=VWaj%R%;!_tj}0+zPh~BT zYD^*Qjo>D55civ*w}4y0ZD1<69ozx#1b2bE!2#ml1HBjA2kr+CfCquje?0^}1brC# z2zV4c24c894t)YV38b}>nR;UXoO24}T?&1gPMW7M!a1B&3^BhCF%pIt2}4F%jZ9;_ zna1yGX@t;8p=8RJLirr}$Yj>CG= z=D}bH7z)0_Z5Z@&@H6H`;1@7~yssnQw<*U&%ymh78s;e@a52(@w)}=#JmQ#TQT1Trh?nSM%?az>XhYf!fe8RCw8?=op~xVGmHsf zBA5gwgDK!fa1*#0+ycHrTfPS0fN#NfU>5iu%m#D7TrdyN?eI@ElI;D{TL|-U{{j36 z7J!A|C-5^^1bzX(g2jNT6J<^3WK%l7!KKsZr*o1sojyOE{hM_5ThomdU?o@uR)aNQ zEm#NEgAHIK*aS9%Enq9y2DXD8pd9Q3yTER+2kZs=zl)js}q8>N~M1c#`2h<10f(D==XapJq^$kryGteBUt+WKK zfKF+(0d0Zi9_>K~&=GV3n$2_u$Ac4q&Xb-5P6ld6Y8zVF=)9c;SPdXE^-!tEEEQi# zE7kj##$TP1&j4Ydo-6{gKsKlXs)A}D2S~osG0E+JBWKCDCa48!gF2uts0WS#ydZ_l zLdYzH%tFX4gv>(7EQHKL$V_wM5HbrPvk)>1A+r!N3n8-*G7BLyommVavk)>1A+r!N z3n8-*G7BNI5HbrPvyj)Pp9DP_oC0(TP_s2w4U{eonW+cTTXyQF^uC_7OVUd7{^<=o zoq-I4Ob`KCARFkka8-~fTfc4UWTh`-$?%`#T%B+=Kuw?%-nBs;pmjn$a14k77vzHa z;8@TAGz5)6W6%UN15L8bch$5a)=#UVZ#rFb~WJKY$;>0i=J-@0~zipOWWgcA8NDCSo4| zRsa4L{*$mz2ASl45^ja~O~L*}olMG`LLV72zQjBf_phK|gKxmMK;y$O+%E^;VV?!Q z2eZK(pfTVI{N`ew2ZC`^{j>U9op9|=8tNyiU{)XTR4B~4Cd6-~A-tt03JRQ{`QyBcUNqA^f&kul&| z@+*OE#qT-H&x04hc-*c9FJgWPY{UO$=qun=@EX{K+w0Kl3AY>b8<^h&Z-KYLKHR23 z-vRG}_rUvLKkk<#WuRLr#--59Kmn*MGtD>DqiL?8KD0Vi{ix;{LI0`w#z62jA@#nk z^s+WkAF8>=Nc=S4Q12+cJK9`hAYliAB2amrF$_1&F|Gi^!8fGz2ax{FPf0i4MX!SS zgXS8V*Db{DC!o2Vbmrzx%p<_9;A-4n#Vwd?EF#^TvuFcnNEkK3WWXm{TpmuY+lW`Xa) zY@oI|2Rawb1A(3;&S}*irDqzqU!-g=fpf{zXddA=Nyb^I1#E$TYMc3l?E<7*xx~%J zO*$s2*2LTnxAq`ti_)L-Npl4BH|T}b!SB#d;Qw06bsf;#ENYjZ;iht}#{V(g=V4AF z?_?0@SPEtbNIn|~H#sNMm;!DDCz6hIa4UG6_{+gfxZezJ0ecC5EA%$70>7!y+d(%56n-U6EMTu3?@@K}TJ^KsK0rw-;|ej^>! zUJs@7*AKz5qzs|^k#jl}+5vQ)d1EQ9rxbmj-rFYBCXOaK#sWc3wg&{}H+{*!Q< z3^rn(0_|2eY;*@bz$V;!LNzw1ovtOG)?{jvy>R~*v=p3*`83cQoDR+aeZWrQ_l2$_ zUO(v3+Ga3r2J<}iPeFe&1AX`$%mf2E`{Sl$B6(;YDBWs-xg}8h)c6_bmfDfp%_tyw zsDHnbv{!;vKzg(WtOd_f-;#%9umD~cgXeI25AbS?@jf&YDmiQ>Od-4s1R5j%AnYK_ zMW7g{uZj@%GvZ7KgK>K*l41Pdq#Hvp2RanGA!0m>dnz;yq=Oqz@%8LE+!ql3ChUQp z1#L62|3432KCsgHEuOgr^it$B1De$$Vq}9VAXslo*Q9%rpW3O~r*uqhRqa&mQ)4A> zE*%~t)t05J%fO#NGL-zJ$1}-Cg)z^9p1lU8zd`(v@n^98eudK3@>G z2Ih?FnMN4gfLkV1dh!+V7lI9#BepExoOY3KlbL( zbD^5M*~AOxZAqAufsGzqjGxAgB+SV`V@C?q0U?kI(m*;;9caC;{Swth25!OpM0zM4 zlx}4K?Vn^rrIS^lRY5h71F8e*W({afPz%%sbwFKE4`>WH2C6!ZLIaseD>8{I&B;d+ zT|ie*lRCRAH)7lk?g96L`@sF+0iZXUg8uI&^h5nyZ{nQ}v=^i|l_hh{dlg#!qx$xs zJJ65)Db);ji7=xLxg@b`iIwLl<0wWVgn ziIU!V;C!GqwVb$`S4fVU8>k(r&1g(KowS1SL2^6;dmqpjNYDB~&je?Imr}yU%itC8 zDtHaN4&DHoGrS3X3%m`cfp>uVyLX}Qf%m}&;6v~c_!xWwJ_VnF=^)TE&9l@usXwaR z7pWgo`Ccc)8{kbakb3%>`j;MQjC>on!MN#-x*^a{uqXES(yap0kX+QSt1W6={5u`f z{CCD%S;pt!&kG_(z4Q!YIdlbB2_(Cf=#TX582nb@wi-y!*2o|1l^v*U?uRDo*)00} z2N(+v;C>Js0x|Hx^|VXy5%?H<0;H3lLO%o3K_IiBZK}_4DWAqYwK=u3sqk?-s7u^> z;t`yJyz+p?M#=dM!u0`?VP9w(EM?n zyTjZC+7)yIKNIF${3P?2GBb?sxb*<)1J%wY)7Ob}8DXSHlCS!+gFx+iHTaBpJ&7}y zFukCAz+SKq><0(HK~PHk*a_@yBjYDQFa`v34Xw))=dp?F%}dGeGVmF_*mN)ev(}sH z<29#~tP|G(TA!;OYRnAgY|_Ju{cVSJ>tENMg`_*0bxttv)!xVB$mm6&_0;i{S8J;C zpuyTHi$lNJAXqzTFQf|gszB{r>n_a;%SlUfRPB#w@46cP+OyVP$#39ykb~Q8?b+i7 zw*!rvTL^Op<~zYZ&1tpPyaEgd+6x-a`cm`T_nD`Sz+8DRNOO%~POG`B+N{Qs8N?}s zeh!t4zJ_XT{ta{%(AxU}czO^#1Re(CN&gY3_J4+Jy~)1Lag=8SX30}>yArDTvSg~g zA?*iAW*TdPHNIpmnFX@?g?MkHSK2pPj9L3dOQ4e1jhJr&+A~VrFOtk8%W1@u>=I=r zozmP?`ZJSq+z7unfiE%Vw~ZKGz-`#OLZ?EzK?6N2B2F>TzJ~T824hyc)m$T(*9PNd zVqZ3daGJ+!?yh<3?WEhCbeCe+7@#%Ia?D@D^LG5TAMp+59)#%$^jlOf=&9f|ptjc= zdOA1*^a1*(%TREV?Gz02hIlQCW1*|GMEBx1UG@3!7boca2uEkZU=XOJHe@F*J+?PI31h;`T&2Q)}nvYKCo7w zN$kO;F%O}i0%wDBK!0#9I1ii;E&vyTi@?R;5^yQF3>1I?pb!iMgFq1|27|#6Fcb^} zmxC+7a4-Ul1f#%ca3vT6O2Ak!4qOGU2G@Y`;977UxE|a9{sl_G(fYGsU!yPb?FY2C zaW?h;GV~SjDj3i#V!XiIQ)7qL40SPSZJ;qkYXa%pe_A_fj-kDc%434|P9CD(HSbU# zuQ{)DaSLci`*;Mu_RvCj(44L6#ovGJAzI?bH3xC8W*;sYqN>FhA?xW zWz4~}-qc>%1k4k`Brq9F0l|7xdm37w`s>ZV&S|yprTOec(hBCYX~anfZIaTBwxAto z4Ho~lV*iFROT=xRT*Ot%=p_hQM94ERAS^!3aE5XO4H4gVNm}f)h zfYE&;#+6_UC;=xlW?u)K1lAIM9e9E~#u4Wi!k>(Lu(z%K#3%8)8b7sf?bU7~y!x$E z2=@`?|CKm-n15jn`72lqmVn>D@8A!x6lh-e3E@8lONk%oS+I6GhP+N8ef_?Y50cQY zNz{8XGz9Xy@~a6n9dyC0d7akvT0eDDcJ75(i>+WPHx59S-7d!he=cEkM;=K8E{js;r37EvD!FgFD1KP5MfKN_Q_ z!IS16ml3WJ{*6Hs&=kZ-ry2CVeMVZ-LE`*O{khsy zpf?T4Q##WaXf335&a=dM4m=O~!mH-@nonrX+Yh^bBYzz~jgP@zS>j%h_OpZen%bt; zy@~VOH;B6)X#RBx_4)?&I-fbx58y|z04xM*vq5|Pn0eMR!vBQ3+Tov=f5yBBlwA|? z#>`ttE7&vBTtjm;&AYTmaw~qffeD122quB9C$Z)M-GRoH9?+hk7dYCu*@m>*f?zDv z7&sRlmIv}VMcB1B`5R&G3uhSjgP?8x zj@utV=MvP%Eyb+0z1H(udwlyP^1Kt=1?m&GC;dbNsQNRlwbYm0i=XyrPRA@A(^^3L+1h(m*`!}8 zhxnI{Rqp#&zs3-)t<>jhjw1b8iTf<(_Em{{!M~VWfQ!Jz;1X~tkUqA~W6ew0 zH6ZBEf^|T!=XkX9Egzw09|QF}<@5#XlXXXp?X_q9&Lr7tE~b66;P*MnP{EV< zzkV~h7dOpm^?QQmwd%dCVSPzZT=6(jNuy4e^8oHZsi*Q?mc`aCsc?npDc^Py)RO^gw zgx`R9BhVNS{C=lBfW4#<=-xiee-dvK;dV1O9T3el3PGTg12GQ*MW7fA219^kwuyMs z)7|8yQ+~Q1NRrb{lo~(vySjcK*7&EfuO*m4-F^;cf-k_A;4APokgf&$i|S9rqwAQdbk-wLx@yH*8{ok(CCkAWNeDtFW=nA@l?w|)y zKcG2|WF~!+eu)qDp_+U2B#idudO=SGr-9z!bkGPrY77kgO%IxRvZw4xMDtDmEKj~g z{{XszZlF8p0eXU7pn;h|eEri|6-h?(RITCF=VTa-Kx5DZGzHB-bI<~`1g$`8;GZ~_ zTqPG>vFytuSX%}CsQS1p`ipE(1ylvqKn{=$G`>m>>eIEKq<%_!7TV*fPM8{?CQ$!V z3tAi00e2vaJ3V>m+zos3!1ib=CDC~()`k}QgrFI8NQoTb2(_B(WzLv7aI*9=3o zU#Zrl^A4KdCGM%HKMmHuH8E@7M4amPdX3Rqcc>507_G56XfOV)t^O$;aiRQ_&q;7` zGMM3njnBbM@CEo1dFbjMSW`j9kE|>=bc?9+1w^&KR z@&0KiNT(0dKsv|(VUP*5dd~uZo@QgN0;&S-3Fm<7pa!T3YJu87`@wZVJ)rq@6jYXn zukC;R{UV<;7F|GB&<%74JwQ(&S@@c+*5aQS3+CZdC`B*AoC;0@y}{|=4A2Mk1^vL^ zwHNgxYBQR71$~3oeZMef{0g38O#U}`8U*b`b4Bg*Ex}*yGP&ehy}WFTg;4C(!&Y zD1VGFgK#SX#b7WP0)~QN;Bs*E-x~b>^#4zKn%GZB&-MF|JDUI| zf=R&di~U|*y03OVo?4xZ-xP2oxCz`0ZUMJ~+rU(CJNU*9^rNC)R3DmWX#THt-esg) z0JPtj--iAbB-0O1qAt2(?gpgC>W%gLWLx6QB zj&B;%6h6@Zpbz-x^fe#SdzGSoKke_wX{6D3?zf*{j`Mf?i}zp-BHn^FoH(x!(hq+3 z5Bev?JDh$fDJ|Vf;l(dr1T(nX&E`e0RMVk9NlP~!%y#ga24y|U<5!aR*XGXiR5Q#i z=T*7gyf$~5yWC*jn0w1xb6a^QZYV$5>|*vXPc!?NXPM`k7jpA$p*h&R+#G3^m{)V_ zb(uNEyv4l3yw`lleBAuE`Mmk6`Ih+}H=oWhzc#-&e=vVGe>0bxYt2pEy_Z-`!;10JVJu`O$6O;RmStLWU?2oCY+hpmHPIB_fTGaE zv0~ML;?*U*;&8KXJdGeeaYDS0k`=_Ol(lEA->&^R$9C;DsKMDCN*WIAKB>`|j{O@? z>`~O@o=#(%KHYP2h_|`D7udY_(sXn9kq@uG{o~`k`uP9i&(V1P|I|(O$M&>Wi|JL5 z?N%vs-kPM5#f&6wdOgHy*GfCU+PC7-&YMLg#(1wy{=D*+tPobpKGrkbiPX%rOs7S& zlH%r)|aby96F@*{Wt0$JV8XCUNvArOz1jvLG0?w7sRdrvNyy& z3p@;lg3-eUjU6|p*d04+lsj`jV=#ERS`9!b1 z_jywzZY`&3YL1zanPFGStie!|)U-OyHtO+dnhf6qYbB-e`k}wbGt!exmWwu>Vw=XM zm0qV_3#Se)>RhPj>l&scnR=PrNDe7(20v%CZDl7p(PmBQEA`O@Uivi59G4f<(%j}L zHF!_0s+p3(q_cJ=6DYl4XB?N!aMvK&G40y5sGYQKja5rbT&!qqGo{Bl1hLZUF`RmX zvGnT)^@3i$xal9ykXEQ(T5dDqY6#$cRNiT(7a9fSatDshIqDk+myjW4=>8W zA6l0g<$BFd)$57pq$(+4X=cwBC}dj0R-xMQfq`7!kjCl-Kmua&^z~eEo7$rZZr+kd z+7*fzW+Y~Pr085g&} z(VHSsDzmOjh_ut&XXX-%xGL}IjguYAla-xrWtmA1x^Wh1S*e%n>H($iwdNaOH4nt&Z(8>J#3k)(EG8#CTP4 zm7bX7$XN~3PVab;w46}rC5~q{B0y4)+~h36k*Dx+b@WcJSgX90Rpq@7tuUSAkMTly zTr6com(#cCE3IJ*)DH0F_KCrXJA% zl8+#JV8(dVC#2@WAbW^bbdY@YQHdBmdlIi@?`LIUrS4(x>+c_3gu>0cJlv4-H;@0~ zu6QZvQoI-wstbwFjuG4+6S}gt70WZL+NFv9iRLqn9R-t z)5E2aSf3jrvExdNTIZMU+&{Yg*1e^q`&TB_0#__eu8|xu>O__zFe4oCWX09yJ#>`| zuUZk0Z3HuK9y8Oj?;;UDojOtY?C(U+@3jb)3!5+bm^7_HZkm=_&jFvtrev%7H&83{pi8xQE>d=%CDX6*VzAKI7 z==&K?1c^nWlkZH%)-IoV^K+Fzu1#^_RcRTh#guQE8QI<)$3xBgNq9K zm6k4z>A8AoX}>KHjH6;ik3AlXY>6!$g}q;FjvSVfU3#)*MJRTL$u^mbVkSrOHL}ph zWJFA(3?ry!CYw2LFp6m>v}cCPNry;IY$^Riq_kj3tlufgk<#7w_X|`0eg#i1ZAiQB zS9)h8vM;G$zu4}pdu>XNkX@|bs9y>qrArH($bI1`e9*zzJo5x?N?BGaA_><<`>KYy>`P;jc}ruXaIiBTkI0?7o`SD~WoAaB^_w(n->Ox!X3ZKi zhU+;i;a@(j?Ir%@s&U32-3ArES}Gt_m}X^Xd6PB1?&Ce){o-6HZf+wy_$l0jt2y7{4KaO<)(;47Px+-~c!X zV&D+i4fcTjU@urn{C&_B&@C+8wt}5#=w|44=nha0wt-!x-1h|b=5c=y*bR1oU0}QH zQQW~^Gi#I*Q@0c7J}BKCwU08XZ`=jOgA+h!pvi&1qlJM-v*-+< z>E7|+L~sqb7HF*53v}<5?yb^2db-a}cTee_p>nVb>;^l<3n+)rU0{!phaGH2CN0^z|fVtV6;HO-T8%o0Kb-&`2i~ZO-#>^(Sa1tAkE=kj3fR198cn$ z(*;NMSB@Rn)%iPr7oM6BrVXJwlh3K}b^+WCr-mo<%kX1NR>R1*HF?Ip5r4y53z650T4S zE6eU|53p~x-?V@6@;X}jZH~(OQ=AC?(n~$WzDvG2fb^fD1j{IcODP6Wj;F|D8D()P z%>c^t)L+VTMB%XfU*|u=UiObX94&vpj=Q5J{n3*mYHuv^y_p+bp7QE%HfIpFvNKSZ zFIt^x4mYQoZ<-6u17;KJ0&8ley42aiK$9yp!mqI)#Sf6{LeBh_lV(l6!k16ojV9F> z&2Ra(Q#I=(ZufY|n$1-xf7KB!IUAsF(#igR(KKB8%&<|XD>(tVa%`wf0w ztGhLvl)vShTpjGu=mgbK>B*l^HX*CanKSR2>2?_~^QoChx!s?h{B*T}{a4(#qQStT z70<2+<(~TV%}>`Hc)^N?Rx}wnbj6D+%fe?6Vf!y&(7O!Ug|ckle1vv?^pa1WGv(i&jiEb*Q5HJBbcH_+AAbxk8gjlK}kRcJvh%;%$dR|hJJ}_#0lb_oG2R1DW4k+{RY*TxomX%$FyIR;XIHh3wc1)+N}*5`lW zX`*$H^|bZ2HS;grO|tH_p0TD`U;Ks7$<}?=v(`J-mw(}SigmyBob|5t)n9nO(R#po z-g?ja`Y)xp$$HRw!Fu2N#tLQEeoQJFztq*7csoAxxrq=P+Y1W0- zFl)SZi}f(ywENKd&PvO!Z8ft_;O?A@xM}BF>sIR#>t*XBYnGLsUB_x}ooJnIUCejw zuCs2l9_9OYA6wsB8QFEM7PQ+ltV?KN*V8LJX1!{CLL07J!&zBwR-3H+tTVF)WR1=$ z%epJ;sjN4%W@OFJT9&mn%c#P&bZ)NO*6re+H-G94pxu3f~xPQ9aT(iEF zRmH9EwsX6>XS)O4G44e79`|YYZFi>oqr2SQ?ppQjtg7y@ZhNw?p`;w zep*&-x0!o_+uOa!z1+Rlz14lhecAoUo#ife*Sq`NwEF2;b=>CeiSFs{#qJgEb?$BM zqwXv2$L{y;5_f~U-%YQdkyY1i;hyB4;a=hncdvJ+x{tZ9x}UhS-QV1e?g2NWemJY1 z+tNMR?c-kRj&N^qZ+9PeUvoco=eWPSo7{tLxPE5VF>WjO6t}N?nLE<`mwSi%g!{Vt znLF40!`TYpkZlpf9^X0m^ZF2K- z&&(Z=J36;4_paQha^K9Ikvl(kS?<AqH#G6cjcYeg}7bne0hJD1sA>AWx=~&bcubtq|26D%Dc?jozgXFZ`H1ZpFzAC z#GjFvPhxsU<|$tO4hngMAN&UP%6>trNBAd%S6Kr;k77R}4f)5z9N|8_B3$4e(8TbE z-QwZ>Sbm;|&57y9&EiE*P#1~zApOIXumSIf!^tg3D}j1xCWQAgQ9kkTo_|94!)e6* zW%t4)*pG0NJ2)IBZcel(h7a5msmyu~r;}G<5BLfEgR~Oue{rkCgP+=wX;yYiv{yDC zkv_Zyd@5X`Utka1L_Imj`3dYn`hh($yq88o_#kYMc4Zo*5x56wCEC3(3A}hbCD;## zCEvq-aevQG?g{q9@Q2ND{~%l#{DQcNX$ENpaT58FTkss=AEX`7#Ps8Fg75(i(m5JU%!eO{>7y$` z9qCt5jvz!?USjw}vqJdxiZo=e2vgzirxw_cq(_Di{1ijx02TJc@D*m?-?s;8_`C;U z0;-UDD(rsvzc;pM02 z=xHaqD_&xn750ks1GkEBe(FcsgS;yID*SzZj3^`3LZ2T#;vmJqTZs zx1X+GF2y*~o)|unpTNB$d=M{@${fJw#t-j@kxOEl6@Eb)3Q-aNNZBXGtq4;QK1d_* z3#jIk0W`0a89$Gb=5*PWuTRVJ;{N%f@%gL5YA)-=5e=YpWL7#p<(ovlJx^3Thysr) zognWZu4n+IBeVGNsV6Tl9odzRsM4w6J;*zVdw3k0u5=U*s2wWpd{Lz%>ZcQwJ>Wga zJBTY9JQaE*7e5^@e!lV`y&0modo(D6@{&7Ic>H=5jq{`M`Lf65IJ=*h6^5iah)=i3~wUcOk{q#SQqh#a9FU#}em*pwGFUS8ZKZR3#QN_1m1vDZBU-RXIh)r)VG(pHDB2=kDiImgnaK_3|mpQ$Bv0|GhrNdGgXxKC&wx zkCKn5^6`28@AWQTW-lG(BfIkPDEWvgA73W_xjhFu7U+toNBPLEd^}1% zqRJ=G?Lc=#RUT25M^xnz6>p-7D;hxMky-hODj$!MkErrd7?hev)YnnvBfIhuRX(E1 zM^yQUDh<&9%1379<5BVvRX)BSznS`B@ZFCVCv z57f&C>g5CV@_`023d(Re5B!3?Jim@A`XJerkErqyRX(E1M^yQUDj(6rI*>iF46^%S zP=UWZexIlO1J>95Kqs{B0al{qL2-=bunQtsNT6xDvEDDk0w z-ahs8@~HD0`TKnQcm1v6`+St;`Fxb+`FwbJb`8qz(~9}F?2?D5qT)kTe29tHK19WbsQ3^SAEM$z zRD1+=@6#jZnE#{sMm*l(wl2H)@F;wUiVsooAu2vZ#fPZ)2y`!~`#|=h;#E{(MFXf_ zWLCY1s$N7@FQVeZqwparK19WbsQ3^SAEM$T(0!l&@8>`9c!&Es*~N!P;X_n>h>8zU z@gXWcM8!wY_I&!kpGU>xd9sl_WEUSEg%45jAu2vZ#fPZ)5EUPiso_2Ux8sTO5g(%B zLsWeD`ImJK`W~N_{hy6DN?&}4iVsoo5zn`)WGHd?^#5=?A|LUge8h*S_=xA*)gPz+ z@5d|U5#EUGeklsrTO zh!2^?hp6}v6(8~wA3pWRfS?Z+A95ETqT)kTe29tX<7=OJWb0;cG5B6h*!w_)@Ud#lA0a~ zXJ&=cGC81{kr7GH$Vy9(V5pQni6oxZ@ni8_*u&{m zO5fzOfMS3z>Um#Z^}f+ce)?o9#QWf^&fe;)tU7`VJ7Uv2s;lF;l+a5c$@_|!qjT3d z@VPO*9;*~N$t$bgr&5w>srsw5yuYb@84#^d!aCU-XF~a9WcZx;X6hlHzrqE)V9p4O zAsr0%5cJ$Q&ikqyjyo%n>D{BgRNG69Zo?twgkOb0^d{p5QxgOtq*y3g6>qI|>NDu}0*(ck083TKIDBbgp7mvd7t}mhEcAX8!;qW6notZ*-k7t)d z@WdUwH*0Y7tr;17efWqcRqvzx)3e9fW*&5Q+Cz=4_HJjRxzpKZkKt7HSWW?6#SP)Z zIbD6g`P1CyY&8oxb-mqLZ|--to5Q%p^J-4-jpEByMSS&q2&er9a!ycR9xUdZ-w1BZ z8N^r2ui&KMmE5E=np>p~Icv-v&K7e3xBhH(mYe&W9roqit}~7kpe5WmHIftKyPRd_ zUT3>Kn6CiDoZY6*bN|z`!yLu8#WrxvXFX@k*K)t~cB3VyeO*o)Hs`jeCfxG0*Bs2b z^EI3&-$pK1kn%>O8D~~oaMHXn=MHOgLums}9!9+v&~*PrIwvBxa2G}q?`d<73%3BZ z<~-{G^GfdjD>rg^GiWzAEABBjb1t%&vyv9)8aHv;@p9hl8pB-@!+6(!7k5XD@Xo3K z6aV_2lD=hCi}W{`tIh4apxKcdk2-KFavg73BQblkxyjxa-Dqw{GJBjo_MV8oIkd~} z#Hq?{_6B>ST^^}PZIwI6bMkVFy~8XwcR6d#_4a}2c5WQnAK7W|a1KN^Bi}=%TdCuN zrTe4%@?x=V)cS$E_2y=Kf8MUhzQ}>n?at1~p;$S(u)lP7WN&0&=|6L?n?!bTW>dE- zZZUUo_P-Wdu?cN3xtnV%HL(@`w;B7K&79xePW^7N4?4P=S~n~uaj$(j-v=n?ORdK#yV${akK94=_nw9eh+xrNiajcE&w(A5oUC$ySYaIYI7nj&#HMQ>YD2YPd@ zH6_`H=8dEUIn<+Wi5h`4_M-1?XerIm^!CVNySc|+NqH_uGQ-e3YT1rCd+lB5?H+TT zxzpVLALXw%=8hxocC=p-(T(gK;e8`=-AoFdI8!`^w!IAr?l5=SCFHe%a&4ou8|{7e z4s>lT+;6eB*?aB%&L+ybo|dx1-h+-Da5mc;kq!EcbPq-jMRuvC>|ORg=O8U27STOR zS(Iv&xHk`ZuZQdQ?-rD59K8l#U_nOJkk&Bx*okbi>Cu`Y&*AX64^EpSx3$tOSh54iXn?2i^<^19N5?LQv5?xAr`i=hOC;Jckd*^rOH)l>{d1OuG&**%6nYq&Z z+5XD;!CB(`7+L208rcw85nUJk(phCLvcGobIg6d|Ba0&|BI_cnqdTIzqYIp0>_6>= z&acjb$RCm4qrXO%N7qNUMR!GibQao+?Qfh#&T?mNWJ%{4sjc&`^lea7HK4xN~<7_u|dv zZGd0Vu!gj7eVeTT=hX}OPU7#zZ1WFufxX7Qlu;qdDAbtSdW(1mWU28Z_hkHTZ?=En z{CiVQykEfhIM-N4uejJ;Xs@t0INzCh@-PPZivv^ZviM`g|=um&g_uK=y zh;JT!ZT@8bV$MRU>z!?k#0!mi+}igCUkjOU{)}Gygg$R}_S28d;cW=r(Xq%}ie4LWv{&0(ZS`h*Xgz8%mHQ*zsdX}M)_l#knC`M?5^FW7?~iOG=R=V@>|~^@ zZzCRObmfcZZy0x*&zbLL>C66~2dT@X33w(L_KJ#hwBl8RMdHV(XV|$_fr16w_ zCwDpD#e2cea}Vs7#*^k7=5+I6d%FFO{T+4uqVb;j3b&-b%p1ZpxoPkr-V^!2oN7O7 ze`$YBJ6vnO#+|13n4j_n(;eo6<|F1a=3D0N_CxmjwB8?Rr@uSz7=PF=nU9)}al6XP z=4<9O^EUf!`vZF}vR-EY=&W+yH&!?w^JdHQyhZS~`M&w6{fPaM{Vp}M$XQ7bu-^H| zSnE7xe`>yC-fDko-ebSadnuow*$ZjaOK3@3ozEF3zqOyS@3$YfU$tMizoLehQ1&v;MaKKnuYHTw(ubNfeoF)ey2qg%PN&$-{+<9upAX1`*;Xiu|0 zwCAI$7dm7TOO>B{5gO!Hmi-^K%c zyZ(N@{`{2jH17w!#Mf=6aiir7<4*I)*J$RczC?|mw|_GIx@xcY`t#a>`HwuT=fk}A-m@ScZfo9P@7Wc1 zpO)7!Wy1a4ZtJM{?2F|?z1J!YFIvgDvj5#v_E(P?@qE~4^dFVMd;EH;l^?eTq%1H5 z^pZPg?rd_&mb`{V?%*+nBZ^Dh;l+c;y2D1gV}};ISB@(lSL}`&=?)q`s$|&6A>5Jf zxeOaQdK`gD+<}FIuDH5zOpzC1*ofl87q9dmGoJ8V)56s(BSu}tSE-BKlEM+AhZmQ$ za0e2(B6*T29x;0C_%tK8aPXBaPx1ID7&L0!$g%(V1J(c4_o)lV6%89z;OFBNvEobB z9tW^oIBX>R7sOe1Pd?eLp(jh63PGY^4-1RR80nsL zvfH*zyAJ=M$p2M&uNYW#^{|l@g*3MQr5&F(@~Xn&!-}|5XKcyXF~x-=T6kCNj3^vA z-aV)5*>3U3tBQw@8jXHXf}W>cz<+n__|e6lrzgo1sABHi|KFr@UYE1^|36JUnq=XR{yW+v9NGZ$-psQJ^quN&+60DEg3g(VByH3k|P-%Sumoo1OfW4>I06F&Y&@) zN=j(5V`$wY)v}9cpE4T-@pdmsMh!BSuEbc7sEN+X#V#yTl9$;Y?b{BVd0_1%)lK^Y~ zfA4$uHGHY+@^k8x^;Df|GBBv8dvfo;xdwlAg^nKZ4?R!{nqyWH%RyU@Ov_VR`hc{r z_~$teN#ZTfF~#Tl%m#4L!LDlsQ# zkgic7k(5CxnJHQ54q01b4XEyEpU8US{M_^;RVP$fO13I5eLxn9k3(?y z5RqAbT9lXv;Y7XEcQIdDGRo8u;c^QRSKE|}^HZ|&pd~9$OJ&pgSCzKT(e{%OqiJzY zN)i)(|IH%zACiwg030kx90V%ryuOgl)%O!RUh7z`O&B#$#EO=TDo)JGuP3x= z$Bykf;tX6C2-Jye9TlvheU*nVoEccGa#pKS`)V6<36l*!BwW@rsCR&>NlI=yBl2rB zZKym|5g5oAhT;xL$x2}jnbG*|Bl)d@8a20}%@!1svfurve>A1nMXA7@hQY{tY2lT3}4!Lc{=U?>0wo5vLP}5K8`%Oe3I|msEiI>Q$bBv zCsHycpT6CdMs7Pk&@2d6(BQ4nblaVw)O$`tqCd7PuRc0eJ)wOIdTl#TMkS|HgPVnP z-`HI0cX&R(Tlq<2lIBBRe&UpZr7Y)tdPy=aRoSNP#RW%S7Vel)5=L|nW0lC!22v}B(J zef+S3?yoK(ZAy&DxF8$C8*k?QZ{?Cj165>CF;6cHYf3+rtk>Kgl0ox~t<{CC8q?zY z>C~!G8)7*jiw@0`lXrHns;0#Dq-)ey`1B*0)OFire%7(4RV8H=G-q=He=#PFell!K zWoZ?}*r$X9Bo$EQvz~N@cLBL{EsKU&f8twNE#RGIhSAJ!2_$~-Q~vPDbaH)G1&wMv zxT?2pIN6>0J%797W_epL+D6ChAQFeP67mX<_BWqvkAs^J+)ZWUQL@4KAg>J+7d(6AEal zVLAOsdTMU@WYfz5LA2$jaT=A|Kw`FSQIO&y$?(4bKXbf9k%$;)U@YbOq&?d=k&QBOkJL^q(Z-AZZc z`7We&^RA>%=o?K>qcUo{zLSODgo`mE)Qq;FXPeKYc! z=IW?olJHrhwwOGKcD|E94m=H}DZ@(1hMF;alZ`QC;^ZlO)88z3?-Ob&i7h85XHBVG zR?&&xP#RH>fHJ!J$WU^7a}I6&yo}EL-j~!i^`~3A3wY+WRvve=k0r`<{Ls!)=Y(?PRqVs^51Ce2MvKn(BsW_Jk%?u-#CAhDo!PamW>C;zViZ+Df0^M&FK_(BFYEV0 z)A&J8I_F0-zL9V+9skQr%`dkHs>`DO;Js^G(w0`cH4YXYq;JI5DkqDf#7$a6GhGd+ ztA{b^@unpaG>Rn`9~6?yo{KaMhQ-r~S!U`Eo9 zq7R35iv4wZK3ON}Nn44E=&@U_w3XKoYB2nh+WliX`8mykq@JmuJ|Du#=hQxQ$gy^s zZaqe8uI>w<&8L=X)V=%B56=$8wuzp=m)mqCF4a9~+J^q5UvUauY8|a{yE96&d@fbD z9bibxU&`s5?FD4W)++v|KDN}rD~!G!pH7~8Zq_{gzMRTUgXqfh^E3uI<1`x&cP7?x zHT-q;Jb^NB;Fp|oq~9_l;k!J44*O#0$l1rbG962HbCbkv?e(#-x%m024z zdit&vy_m5@^W6H9X6-r;-eh|PiBQ~9-x4e6j(4o4$MS7_(60??W_KBx)T1LW z+BcZGzN{ck65EiH>ofQ+4Yu>DhbsDR=wbd^#&3M5=B4z_@)EkXQ8zyJY;#`Ja4?-U zFrS8;Eg{W~vPo1yIK3X4K%ZP$TQ!OFrUk_hG{a4g@Q1`h$mXR3$*2oTI;CMUS@WYI z89uvGbN@*pxz{U)tm%+Sja22N*G=21oKrbexwx9&*QJ8EbobL(oZg|aJMcu4F|w<= zYx5Br<)c0Pg1d(_7nWp@bMqHy`YaD38JE(?$tQ<23A@V4k^?g}cXv=;Phm&zd-fqD zc?ezjx{&x6_9xpT&B?(Roz-rqdhjD&>(l6G#iYH(C(V%_CB(H^8BH`ltyySQLMui@ z(>3oVXfFL;L5}jn)uxN()MQKt&HV2anu4+3q|1*{#JjdTweGe**5`Q=omY`Wf=3jP z$wf`bTHjdGtkkwjF?OjY95iZHY|yN_ev1EY-z)yqqZdvTZF^e^p@d#JRY6Ahw56&1C{5UuM%4bwPa5;ZP5En86*SM95Qka4No@yX zGTU$+e_?4avc9N{EE^H4-e2iMr_9fw@*A!sK2F6?yi-mxc0J&8`@7KPSGw`$mljr8 zcTS;Paw)O7lSu9uwI!oARBE~{Zb6=YzQ=#;vPB&b){e;3eQ12aF@BojxF$y5mrkED zl#Cu3MTfM>qn<5NNCTGu-s+Q_G`iJP4kji|LN?K^ps(`9xw|PER@)(}mY!$pOBK_vR&be59rcDcd6q@4-1|)vIH8!D9`8*C zh%5Q=?w&+7w;g?cWUJaTVYDV|7}}Gx8wq=9Ob#BbpqtJY&}MdoMDBj4Za#?63p>VX zhJ+T7E4^CLJ!$#m(d~^@AN#-O`_@*F&XJG#xfA|STU=~RnZ5EVxrEu5`ckzGpn`w!#0Y&olGGBTAO?CMLZ%Sy?a;X`PT&hK|0 zIFw5ENz-xJbjZv?sb2xd8UaX zewqqe)2M=u5nGayea*=J!ofsfv`F39(TbcaHKFGkb|PEvl#l~v$N9>fmpoY+NG_Vg(eU9_H+-$=wEIP*;#H`o$HF(7irHOANH4LbO36í-B0lQejxP4!1+~MHmXVUoW{gWbCJKanWxh$ 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
        oQi&(Lw$JqL_AsAI7=@4o389gkh~?8xtQ zOm_QN+H*QC``)qbpVG0}IoDMDO~+>sO-^}G$7sJiFK~{I)2?}X{{=c$`|lf@cItTT zc{g4Ct&Z9L(;rS8pyRfCAGfWuj@@3>WzIV~e*3-izWJk$;r_Vu*diUr{p`+~TXZaU z>6#6Tbv*aN)!Fpke769_p=j@y-vq>KmK9aS31VqRj{##j`JSe z@t4&))_Z^3uV2>j-ml%ZexQ!|?)*sB9XjrN-nA)l9s3=a+crzbe>e7g?_3=N-sSZ! zQ*|8pKhE5Gv5p1*@R>XB)A8W@N}jq!$AqtcdU3Ii3;*=Ve~i$v;RAYK+fK)a&rJDd zw2l!^@(kUq^YI+lF>$a_E1@#G~Jzy22;Q~u`7Lq67VKJo>&y$AfIP>|BCmztT<_G)DJXyz^=XEGKL&uzd{?fJkblmv~ zOKP9ivFB$^nE$bkKVLJw%NK7C>iS0dYtfF|Hr?=UhcDxA?OOV`FRI?1`_=NXOTT|{ z-bwQxo0V`pyn6fEzbq}uda}(=FQ={^eC#PBa*ywwedQ@DmZqNZ{o>tucXZn3z54Mt z3O2v|`UzPt|FL*<8`qkxvrZlM+|WU9zP#fvqt9Gc+PJ3M@{11sysQ7?^WL0x(v%VB z)wCa8uKjc6KlREZ6Ox$K4{K6TDoR5Rq~GDt4@ol-A5rr3adUv1KCx2YJktSh8l&rI zn&zW%x~?wM{5X{xljfoM>UMNp%}evv7+puxG#`!Ab#<9tF5QMsny+q0*VVih^VPCwoTl0Jwe!{(d%tNO z>UDk1$F74-yL?Jb(^$Klt@F|4x*a<&JH{@by*-`Rd~|zS9y>p!rfYe0()@JaYnuA0@+4a|TbsuP+x(&N*ny<#{yq$-xqxou_=54R5<=XHP+70USHGI>pGgZuA}*BoTh7T=zldV4*c*RraHEM$x?!vRW$j2SLG z>|`Nhto2zhQ=LgMN++%T{LO0LZ(1Fgzm(uyByYX~I)}J|3hXwP@U+XEj=A$cn zEMU|FkJ4l4(WE)^^*MUu7MALm3-f0<^;wP#h|sSG^EBN`HxKc#axu3mE$ivyM)b=7 z)|$q{Ba8=7@MKCZNZf9FTytPS=|X;}ZGLI_Je~)lkMZMKD&~_)?BA*CJd0XxrHwFRvU|MM0L@wIcJk)VDeorwtH(?D_CI6F z8BxAs!M>(Fv;W^yowdEcU1@Gp=WYE@%5i<*pUYe|wu0VEDf45iRBjmU3m!6--rCI z=YE>^QrtRO`Ix!2{MGezYW|+5Ioqnf`kjlGskxl3^9!~t7y04Cc|~^=zxv9Q`##xr z+Om%ZZ|eKvgQIW$YH(>|Fy@Y}(M*PY(+)#wLFW<={KF zeBq<@q~H6{$$T#Q4c>8{9y?v5Zj2g<{JCH{&$;Fp%#*pY&^Q}(BQzu(o3rz!DB z>~p8_w4<>X@T{Y0!$*x6HF1J$cx_+P+nY_*Sian%v(>V?SNAn-KpI;E%Pl{8OUwFp zKL1m8xAHh>ZLbd2kXCM`Z)mlR(bjfZ=KJ5qPPAfIQ0CvNSL-yr-qLFa zy=KwZPrcUA>x*O2@kqb!qwg7`Agr&VOnnIU@>UVb1a+fs|Pl3o2>bobL&^8 zBtbu7-j3zHw87K4OMc|W_Xa<+-G58o&9#GnS#rPc_~CyYoci<9`%dh!s<`0d5f|#b zxsF}$PF{09!(y(*b{3B~-xF$|Cq?+SeC0IrcWUgP&6}pr5IQo6Rjg^+v}xrfJZpys z9`JzEY5HX_IU>mpJc37;^CGXY*n6AFm0L_+-e54e;_M;1Ja$}(!4>b{Ww7+Ex0LQ_ z;pCz4z@m|Tm1|d>TmikGtnsXcp$=O&?}CM0zQ4jbOoH*gOSTLdCgJ+)Cl@XnCfhHV zRq^WM!(`y^{rjhUG|XG`Y}KhxoiN<@_1|~xKl%LOx9=R|cqb7YPQJ#p`KJ22o_=pl zaj!?#?>ys&QT+x!a%lLk$2?SU-(5BDWW0Du=V9|U%*=Caw=WCr)mmt6|D?HT&px~9 zj&r~NY4GPMV~fTVoa*^$$NS*l&SGC_Je<^veTDbKji?46g$KgS)EJorJu**Q|i1)x}&`f+3dIyPA;*}Sp6?i|q64l^?@bSU4 zFFpd_LL2chconaFn>7Xw8%jIkeQ@(gUI_6~STl+?!iQk}dBPiAlnpx0XP6`21uq{* zz3>6Z6BMKf?}zaVsf)(LD=wk@8UuGurOcWR`&>p}#e3l_v|3}}#%Z(>J_;Q(L?U<> zd;x9LbXZfu@qiD(r_pvzhre9Ge#h(E9;c!McsE>ILEpniV9J%WODcK7k1FYJ_yo*Z z!m){W!x$QkSN6G1#E#P*-Up|kHF!Uqjl%c@s`^-id^oCoke_#^6smlx=hFN$=>M`6hp z_7^??!`s-uc;$;IpfT|NH|S%U4)?xIU%|)WvG20a@osqjPV&Y3U{XEh#Jk{~=pa4} z_oGAj1ibnKuBP!pIR9_-pL9Ijft>g_EM|nZ3-5(GTDzU5!)t$`F8C0<3r)p`;pvU^ zD?GzwWc6YCho-|?6vW5iPiO^RKV0r2NwQMo;q0U&S%nY4LupA8)))uBjh>z)8#Nu? zgtp>Cus9=0>hNCp1**p<;O5LEIe?GChmT2;1U>@)fig0PftMc3HxKcCxE$r-gK!P< z;KOh`D#FL$&&Z3HmF-SQ5H|PCn$(dz=Q3RWQBTo zFgHm;>fzE3Y#SehFQEuN3YVQm-8CJa?Pl9}51fFu;{9+Ts?!*F&gn_A1Mh=ZoxwIV z9Zu-PKGk@5VOPGFor#CldDH$On$;mn6A( zADoN2;{))R{?r}sf;|UNcf1Gsis=Iy423muUL6uqfK}jLf=5!@j;kBly=8^;c3H?B#w8(?}pO{ zH2xgoQKQDg!gHy6Hu11<1bsj~j375&dH+c2jt|51^OIya-USzqp?&c|ICCs*iVwgK z&+mw3I-&?Z1RtG1f5u0kVogr+g4W~xFl{=08}EX>(I&hX9y^16 zj(5YZXgl5mi%^}$z$+Kf=kY;!2dc-1;WH?Xk3vT!{U7gwub_mc!y6YTNdrCv??J9M ztP9Vqq7UFba4yQl2jGFLlB5$p0rxItzv1Js&2sh?-UUaYnRp-k@>=@5#>3;Tqd(x? zaPaj>QiJ!xk8j}It}!t8M$T^<0|%nb8UwR$<`~Dj;FKDUYrG#mhYsPRun9Hb<<=xA zy_@}x55QCJp)PI76Ar(Z^5cE56cynEa4Rat$KV%#K zN8qVp>Wg>7cTfNygZHfEJdY22Nh_#D}44J?HIXC>wkUx$sfA3+3YDaO$H;;>P>oBGerpgm)niJ`CGDMmyqN za6R(kBXH&891Hjmym$kB7w?D5(Nug8c8O4Tyax_N)p#GAfr9t|JmneM9q)#VH&O?D z5PpN!5Dety>J(b;Nx)Q^Yj6{5B{==ey;H^B+2_Pvad7-j{Y<4t}*brmpKo( z*bne)l#5Tm8L!ap_y9aDO5O2pcn2!RhvE7y)EyszZ)_!Bd<@?E7y5w4z>jJ<&hZI& z<~G_4?}6#tsW09ID^LwS06#||jfcBmr=R2FFzrq1sPXW#x2U7Wz=|KD-Z} zv7d7q-UA1GMji29xENL8gYd2c)Da(sZ=f1{4E}^x;pOurnU7X$JlufR<0CNrOX`bv z!2#cKp2vIP)o6#t!_{aHJ`A5g`|%O@9y)-JL)RgW1-!EJ541bp1Kavleyb-O$hv1Mt$-Ear z46H!w@d3DdK(a*eahNtJS+?U{aO(JEiR1n7o(aj)fDgl2laeLlc-DpYUYaa!d>HOT zMff;Oo|Y_LybC@#Jz1vUBk(g6z$akp48}@p3~Y~rcsCr1R^WZGv@}_2@Bvth*5PCD z_F2iY0Uw5E%}$mm-UFY!JXz}S5x5V<@p1U!70I$+JseR%UGP4*1f{m49bqHNz{}iZ z`4Y9mC*WCEQb)W8evb+@W`44~Uzse!@o~6j5&H`thQF(#UGO1TaTVpq2jJ9Y$r8r< zVdctX*@O?mV{S^89e5Y~_7=*C=S>2sKn?f+yd9;UK>qM0IZ1ppkel9EL{Y zeK6@``n1NtyFaD;_%M7HRpO(t9#!Gvu;w51AAAU=eU&V$@h+H$*5N&{CUJ9-kry@IJWlq!c-XkHU{pMh<0$+j3IGiI2g{Pfn3sd;lIs9=x2AB7fpN3Nd;}JCNfAHZ3v;`sNIBjOKR7dm?@~}sIO41n3E_QkFIuDN@Wt*a62?d2 zaXnHbf_KBhv#BHA3umDiJ^*j-NxkqPxG+CO68IpzzKFWCCmr60-1snj33b9pVc&i! z(jD)GrKkuWfDz=yD}P2K@zOs<79$@%2$KiUj(8XBgJ$EsFoeqS%A{iIt1<9u6vPMN zEdx`eMq}V-gQz<`0iA={w#LIev=Q%t_o7YsFq}0cMYiGt&^e6u)p*zs?Zp2olOl~811pi7Oc`L_2-e4YU>WL!55Q69(Y|;e95pUQiq%8M#1xr`cfqb`Hr@k^ zE=-|cuw6J|67|LV;pB@_WTkreI$Dj7!9QF~AI68_Gc)No_$bUROX2-;+8RENcHkrM zu{kNSM?FlhpndT!xEN)eLS10heCnbeW-p*Fco!_YhI--y@Db$2N8ndzI6eUfTt}PY zz3^`2$A{sx>p3>@et7Q~q8;&W7{8f*i&xJ2 z9sL#`fIrlc*Qo3#%qm7km(|N9FhkJb)_k2{>R1b<}wH3tEAf zi&ACs#i_Ci?}y9LI(!iJy(CpOXgu6GHB~m@YE@oqQ_O~w0Q1)7Nuz2G*H{A4fX$0y*}4`~;Tfmg*- zC5R8g`_L+U7#4p-nekqDGg^-i!7hKN%y|nf=|G0pR@n* zF*xuG_Wv2=32*#{K71k<_(TRB2 z1G(@X_*ayJk3+vBP270phRihSj*r0Sv(m(ikHQ^jqQ=7+$EV3ud;q?elO~m#4(Fee zCN=mVd@(mo!uTk>szaJ=)O0w>ohDoHet0d~fe*o*9n+*9ABU-((&QlC1!tqw&TI?* z(v|Y#`EX3GKPyc-;Y0AG?rBntcf*^JSJUAWJ0Fz z03U%LjZWi(Ahru9jiFw6KOAvEn&jer@V0Sj;=zaD=g6z^nl>p-M&p%VpqZMkX&0wS z0PlmRTtZ#&Zg>Z(!G~e?Wz+%hg8k8Uycb4M46pni?ZL~mG`Yx6zry?B^XQPqz+X|L z#!OG+ew;qmm2JUuP&>R2-iLDVVfc7Sn&jal@EcTwmzilY0D19VI0cQw`(Xw0;REn? zG!Y+$SCrECG#!3@1^ok`fOnKrUyXqqQ3xM}m(5L+)p$Q#d}W$M@Im-G+K!LGr{+_4 zd<2$M(GT$f_$xYymnH1Ct2n0cE_fG`JhlaEuBPtz5d0Fk@Ci+;rtWwbY`c^;RS#Dz zr~Nb@K99WkD17)j>W+`VS65I+d<=ef18s_z8`I>(m1(jP?}kIsD!dO?pf&ga{2N+_ zkHf#;#PN(zz_V^ilg)S!{2s;dQj;c`x6#&k7o2qm?TZh}ewyWm66SI7RxE2qZT=XgI1{FO4`mCL{27{LeOxG&kR#=s#5+0S?%tUz)m z@zD1b`w_2P{x!!iJ_x@^q)8z@0iXSrevgmBhYoQp;3M$!EQeHU41CY!;IlgR37mF< zL)PQ{@Wm4yvKb$Rubt$O?f4j6*xn)a_#pK4aYzEMyla3%a?YaeFu&L#9=sPW9_SD+ zJ_t7;A3g$$203J+#=xY(4)Nn%a0DvH``}Dei4VXfs2U%HYf%s%fhP@f$V$8$UNM~V zYdn1W9EU{kG1z?s<;Q#AvuF=K3X?`Uxc6nd@Fuh$AA&!e=a55qIo~0}FK|dkcgh1N z`y7&s_rohucYF|@I-dIC-EbHhuJQ1Ji4GZ!kH9z4RD2A!xsbZyU2q*L*BIDkl0&NS z9ytFZhpfN{;gD$#S%de%8_-642!4b%;}h^|KXuf2_&ln|N8wA;siS&0X9n$s55SvC z91IR7A9#PML)ziPFj(f0PI%>$vm8>0kHAajP%pe6-f}s0!H3{4D1etM9P&5{;v;Zz zxkGC3LAW&Fkk#tp`STsT=1><{w}3L^WAGoS9-n}H7gA=t7ycd{!iQnoMU?q$_8WW} zIq^~0XEE)9_rl|=9g>H4!&8^i_te9oXbRp38&}ZZ@N&IF9!6F82>kd4_BlQQKfIBB zj*r8WZlay=Zn*hohit+};qF@;62r&gk2Ulkyxi)LZ%~8!-_d7oqnth2Z}1u9#z*1Q z5arZ#*yi{2AG{0ZJ>ZaHya#@dCgNqSLpmbAro(Y)Hr@}fK>>US{s~p#qwpgX#3$er z4{?m(BXGhav<2P|SFGol#E0PVk2+*4-VIOKK)uw%=o1b(fLEUX0`|79=KvB z!iV6UA8@|Hhhgm=%8!r1wR9PqQgFhUbE-}0uNBW8BazNAJWhbSJvw-%3+uEl~E4tjyz=Z0 z=`s`VfhDLMAAldAN_-qu*K}Ej_rNMoxxos=#`_&BV(G+li7AY5}FE-}M_}&~%8B>Fn`Wjn4w4wSvXpYFhi{an%MN@D zHeH@B`|)x`I^*Tir4jFjFCkYUeE^*MY?Rp`(W+wXlr~7F1($##s}fLd(s)7 zLLK3k52i~FJ^_z^C|x{wH+&owYYZI!Fns{;htt+mHubOs1@HlQE2_kY;0KRVPJA4e zJ;uJ(82AWUjgP>sD2$K6572szhslpq7rYDBZD5~k41DYf=J65u8QOzSz|<$%=Nb>& zql0)i9EuWnAG|G+E)Dn)?DnU0Y1fB-1>Z()d<;JPH2o4Efxc(xOL*niXgEFruX-+B zCgOweGc;4v;fc@F$M9}=J1WPA;eDIvZ|dQ^7w9+m0K6To(R7%-nfAcDVE5NJPVpYN zwwC(hBXIFs91Hj$?DjTw(HQtcjANlMedgVC8I0U`FDyfy@Bw)DU&$9AhS%(%P4OYP zeJAzA$KZpz(iw}yw%~*BQ-1aE6;y?f!r}F_Dc%Qnpq2PIe02}~5FdjdqIH@Mui8tS z;)5_LPCMdVaKcAy8}Ek|U($~F0Q~E>>2e4khnFx4+*w2n^f)r46J9wrJ41>!9d_%G zArmznp6||(a=Z^7?3f|d_yj!f^bD!dba-y33|Xxn{)pD&rE`X?>6RfI@nQH9isGZN zU(XELj`zabdS%ESdFs3 z@jmz(^5SFgyrK*lt?BTIbEy|T0)O^VFT9M)kQWzIFMJg4K&$X^xTlIbsE2_i)C;e? za%qNa#s}g1D5f#6hMbC4YCK%K zDnml}2z>TV>WGiR+y0Ot8}K1`_ubSHABMj?$bP}gx(s>e5z3E`!3Y0DnFo*$-1Q3e z#K&RZC~blF!iP|i#=!T`aE*aiy-K^_gHUQSWC~unWgGh%AA`TXPMJ0RjSRW)-3;za z*gtSzeTHnp$Kl_;V*jg$D-!HydCJ>Czm%gmHb_z*lMD^p^47d+9KDRI0T zUWg89JnYscQyTFe=xCcM&Vj^3IVO|$^~oO|cWkC~$GhQECuWKlAAxO8&Xg${4=?DD zDFM6>`p?Lem3ZZxE}60hAArYo&6KTpH+%%e@DbQMFH`p5z3>n^fR}EW()G+tX~28n z`m-`6V-WH1U?FA0Ct%;+ncVxaF1)NSWyAa79cUsx4DTP1DO1(Ms$$BC55nhB5Fdp* z&`Nw9evU%;1UznFrmVud;d6tii^jvzgEJ+9_rZB+Gd=)=D2i9EMqBY=c>It|sl&VB zg5k7<#=sv(P)EFs%#?4DYcPHk`wex%2jGGcEsrVRNc>!&M55YhA*bn$9`~a=M$Kgfeh{O9~6hW&)}PxkmNao(;RCQFEla%W;ZjGIOu+}?y38!zmm*Ji?6Fz0 z67Pm!Xx+hEC&8M9BI4m#7k~R1MycMm-hv2S4 z*4G#q=uMe52EL1SXgW;mlO=Jy3treaOAg@uu&Ovq8t_5b>w+wColE)Q@nf?j5ATMr zPRe3zI{gannw-Ut|B@#>_o6JBiub`AQ6)YE*P&{B1ipY);G^)BOQ?%_=$y(v$GhO` zXgxj#$6uNyoA7?vzLdJ)-EbO;YdYLgM)@@!evcaQGK+PuVE>OG20o8+@liOrJWD!h zIy{U#c&W(Zev^KJ_rVhbv=QD7`yt;*_5&@nP6*XBMyLw2=~3;gu_P(ckbPSo$~i zKRy7TL+kKSn6;bo<6X)T_rMEL>iNXLYf%P1 z1fM}pd=#$ynDS{leC-qZ8$Jeq`HXtuZl&h{hB_855UDJ zfDgjUzM+lqemM0z+DJWIcZl}GN8lT1Jw66s`jP&IkHWGB>WB}(N6-$9hg;DejfWqg z{rEUc{)yuY?}Ev{W=TRl+=wzplc(}9^~JlOKQ&w2c;&~a2%muM9N97w?}n4n6pewE z$d3=go6u~02tJL<@lp6`266ZVY?qlWHF!6ij8@_OuoA7o2jNX<9Xe2#Xa`*BU@%_Jlu^c@p0IIsx|)XY-xj5;9W2eWn4fR;AuVC zF5V5l&CixxycA@MN2M`vW?{Az;{$Me?`%FNVY~3LzU*gw1U8`nUW&5iR8)y~!{<>o zJ_=L%v7hlSI0>!7`(Ye~@yZv9*`FE@GX}CfjfW#p9o`3DLos{|UO0&L@qXwWnk@%4 z9(qygSlR_%fn4|ioH2~{Ru4C#JbV=ThErd>a^$(JuO5bw53l?JO~of*!wC8nUPfli zJ*W~NhKEOG%Suf@FI&2zHFyske?E1@`{B0H)Da(p-=eJ=KZbgYqmFpxCFAKQ8V{?` zL3|L_Pso--8Uxo}#6I$||Kaf$(@*ej*avmOd*O$dWJ`B^99B)G9q~bU+@;wvT;t&^ zw$_8g&PhRTbt!N!S1pkgU;1lrb8?t2+J_z$~q5OC+ zyykYwukr9H)PRq`tM1I^dvCGw~6axt6-&U9iK0w3o)f>(|jP_z>KKHsIrM!6WoTd=P%{ zD94(n!*-9cZM+*^jP~ID@HMm_AA?zs(WdFU=bx#gro*|LsS7>;$Gt-N@qXysO8GSgK8eEk2>j?TlpmjfC)LsxcsCrojbjJz zgB2)_55SG+06q$*y-B~q`(fo<^s9-~9gf<=v4i))kqO#DJ-p`|_CG!hPyLqtjCaGI z8(AMOzjAIt>+u1&^f24Q2jMv>PT7k0!I5cB*`pr*!QqsH_%QqwHQ*C)Y`Rk#H3nXt z!PDw5Bp-MH<=_)ABhx9lco)p)VdkCiUfBOwrxdG)%g{u85T+mJl&KmI&pOd5<#-Rg z3a!u>_ywxLC*YEkoD$M>xC({wVfb8or>w_E;jO1QWfMLGUqp494&Tjn$_{)SCZ9^V z@hLMU10O$=I!vM+;ajL3J_eWMQ!jiFK7a}}2F@;^UibhU+Kc^&_rb5xM0^6? z)Y~a5@gdl^k5g9Tz3>VY!3W^5BFc>S!58~cW_%Pn`?LS?E_eq@olJe z|1}*Z4P>9=T`+-)@XDE9%7zcXDl`=zgufy`UWTwO6u`USm8eo<;EbV8sm2H3uV|&l z4|7USv>NY$(@+@ihgE1jJ_uK%4frsuM-hA+{)#r?Ww=v*KG(^2VeuoJ@+zvw$KWF) zow6Svfp3ncKAH|+7~|w&1k@eAHI8!QW3YC-Q{3v|)(KAOt{!f`ko}+@x-NFgXuPsF z^5ealhGye^a4IUt`{7a)zz5-~sniW0hVP@5_&9vQPoKm`;jS6fUDIKxgnHqXO{KIc zUdo(u8rp+*!yafq-UDw#2Q(h`ndOv2crUyZ$wib0&X`UA#0TI~l!Fh#29%4JIZhc6 za7rHD3r8$)iWl#L_b+nF6nq%oek1i#5BII4F8DaCxQTYe2VkdLXgj^X2_!t~;7j?vYVf)qebB%$UkPjb)uiQ=D)x)HFXm`8|Zuuka zj*r2!@28*RJ#Y+KiTA-JVcHTOgqJ_ylr{JO9JrRY#(UxE4^mIO2j2cL`vf0`FQFJd z3h#WBeWK}bGup4|umK&!%VSP?@^SVNJ_3`UWM5oDIbjc!gZIF(Pq9z%K6u||+8Q5* zC%wdez`J1;^5KK9;%(}V55SAxqb>1%`07sTi;uzVz4ULq3%-mt;G?j|hm;lXflHgH z3qA-pqlCu5?dT9b22bFL!wq;h9Ewt>Qcidka^i#V>!dck=RrS#*C)4;JbVb2rnHeF zd;ktfZzCh|J~%9+jri5WsVIQ=!wOWX@o*`s!Uy54s2U%F+fWc6gFQ3b$V$8i-iKD< z!|;^sHnI-yhIwd{#=y(aX1pIRK~a1V?nT@2aainZBRlY3cqxi&JWO)6kpp-a%t3M~ z`NIV$6(5Ax{$CW`dt8%c8^H0aqO=ki=K%vA5IKqPD5R96tFSD2Z7CI%hnbjIXsgIb zEvJ!Ep-wZy^GqsA)M;2`s7uLEQI}GZQmrJ#Q?5cK#d?4DAJ^ym>*;2@p98$T9w5kH zLTLxa1pD*fxvasNOuAZwtC<|yiKQX_VphlTT$sODXdh0G@RwqB97p!%d}#|7GF7w{ zjfwuUiq^0t*OjW%Ox2IouLaeb!0 zbgK3E&;WnwrY)G0#W{{+JwD7N(iSXZQfND#VRYJue%V}8+JLX+aK35{b~A;v-03g( z-{mhwv;{w7X3=h}$n}>>+JSO6_f)ONe8#2L<6<-Smv-WA#zT8>@;(02O55;drh~TQ zwEO(!ygH62hw-}O*(a`ffNM%S@jE7k_F~9`oC~dCA(Ka2aW0cjJ8;HB{!&2OF>?gx zLhE>hDWSc{H!t>Ff+I(9zN#^Cw7)dc zI==N7_g<~X{6fxAt-+U`p4CLX){im z%JWIv@Z1aj(oXwuz>A!VT7wV1#Pc+PbHu5Pk+$J|FY~#kj-%gn_DmZv{8hf@&>DU> zgReQX7ymbteX8~7Wy;lYeED_0hR}92&i0pDTEjc-?3p&>MW%`N;g~sGf7*(TOe^id zyt(Y3w%|U-r;cM&Ip?Apr@YD6&!^cx{=^t*FJ7GIFDBZD*DAO#w7lgngBUYy#>BUI z4_e0!Oabk}E6fnTxVLtwBNYSw2luk7TSUnnF88|7nw1%593er^+>J9e5O>bM-Nj* zD{pA$yl4ZCJjK^8wFcKQPTGaXnQGdLd8auCwFd9);Om%beCZ6&7;VQp&++*~n{hqU zO1tpu^V~bygJ1l~HKE<;Wx8qQPk(bCpP}*TOMI=NZRoqqb4e>_bn(2>b~OCM*92PG z^D5`58pm~W9cU|FVM=JZ?k|D=aZS`39M6=iHF%n-pnZ6O@1VR&H9qJUz~6J_9Pxdo ziFV?in*;bUUz`h`>k%OBYCT@<8NkoEO9c1LQnyz$nJAnCA^gqylJnhEH!2#k^$MGc7a|+iV`wR^b zBdudKqth-t%H+~sykO>@s`co1AJ>64;D)>aer=NV*mytpm-gVY2iPCwJlI*yKZPNmzjW%F`o#&Ib;yR|AcHzBqxxUZwI`|}Gq^;P@m}n3F zTh2Ms@@9Y}Gs9^e?_w;p8EcsW+J&w20;GucqU&v*OLZKFyu;_6T94D2YTAx(Gqtn> z%PaX9)%YIML_6_QrkQr(9Sb>M+Kg8noEI&Nd2X3*TEjF(O4ujf!T8Z;-1t8Cj&|X8 zMx)*MGm}VramrfGm$u=0CQq%$r`B;#X)8X<6sa{hgDIiyc%HG*KK%M4o=Mt+VIK!b z6|Ld)4SWu&^|*qmr=7TqX`tPBm1(4AI3n-wg5T&Iro?L;O$>=jv26(td3*W zPCf@|Gmc{Hv=!fA%4r9F#8jyD_&HNayYX+vLCdZH+4nWi2JOMu_wsDecKnU0r+sMs zmTN*Q7d7z=&<;Gkk87gV;Hdpv6SW3kYvwvk<8`pa!~b^BHq1N1xziS$^#kXw*5GcY zkoMrs$9O;5fFCl&vv$JaO`CBOQ=``77fc=P zMgu?bsh(CYU>a!$p1LtmnrR>2aZ{kQ(Pq4#@zNG7WZG#f7Bd~R4bL#=X&?5zIZ!%j z9rxZEC|$G%F9iqkXV7@ALIR~XlS1n_k4dK;_*zsTKS!ARj$4^L+KoPDIIX-hI#BXy zGuoK~wH`lVth5VvGexuqZ#J=4+JNseCA1S~#so?kZO5#>ycTW7s`Nlvs@C9T#z{-R zKYpWWAb*|3~d@aHP z#z;fOg>IEbc39 z!xc;s?ZiddTsO4_FEgdI+`)SdUHI9wpkUH9dALJRNk#=GH zg9d4#bzJnQLE6QjSUi; zI*!fbgQSA?;7MjF?ZZ(Mf~1PJ;=rea_;aN^4>-IeNa|<{elayj8fiDKeV*5%ow(B$ zBrWPVj(;gg+Gs0|pAjUTs&Sk>NP50ZW9pJ1(P$mFF*&pwyOst?E-mi`$;1P^H*Le+ zCxZApOzatN`8i0+XamkV86*zcj^8phY7JgwYH1%1YG-e>87DEVv<>$%ZE8LK#&oFl z=>L0=oTm-g#rSAB6(ld74U%r!j*Bh?@w0Kc7x?lYLHwE!$MFkBqup5K3z8JthGk5) zT7!*D4(-AGe}cq9TW~2;OgpiODN$?i0%N0nIP_|el+tD#%gmy!IN^Gb*l8QOm`Yk1 za$~Sm(Hf>OHMEX7Of7B3;f#y6;5SjhQb&7mP<$|dSCut5Bq3OuRO6tOU};s2v-=10 z16nvQd}u(hbki1mDLYttzQS?bHZWLBv>SWpun$_t6L$uSPJ8i*++fM3t@zMA!Th~g zUI$%F0j->TZ?F{7HmqTa)Nvf27c9lJ6`hQoR&Hd<)fyZ(JXk8!8gwyEbsUQy43=uz zhMo~z6I%J|=wSY=BKya;m{!_>e-s2u8|}lF9^>5A8hrloVCkf7*v3d1=Y>}bgT;@Q zCxYd+v0M|{fRo1uOE21nPfrLIO*OtYk!wQR@i;S__Tr*vxDK=f`xOU^mDcfIri8ZO zRK`Zz@B&jx`*7eCt_f|%BBnyE!F#3!^L+~WSTsD(HKmnH7#HotEleZr#>6E&1GJ9o znKs&m2bTu(XF0iU`0FyR1MNfW`@zyhD>IjK9bV;QQCrFLKr45z;=a=!d~r>%25or<{vggEN>)+K#e;^P-h4%qrT81sgd>+KMq-dCqAK z$9@?s_3Aj@wl7#3XaoMbpJ#yfVV@SR1FhrZOp{uV(|-t-X4;NDehd~bZNO)lF4~6s z8JWR3V#;xz0b0kSOepQeIVZTjv;#YsY}$v5+xT3dop|3*!D68;_&H;x-I(+<&j77s z4O2$D@R?t@KC}%Jy<7*i25XpFwFZlR<$To|O!|#;QEM>scg{sMUg-#y^R%1^mK!f} zA7^roxTcHehIZn1CWUt6#(#K*X%}8&a%j04EKy7zt>Kn#?zLKvw_oSp&;|_TCxuy6 zIqk#OLqhoe99(l;!PL-BTo4)}F4}=7n0nfaSD8jy!a`(mM2Ix2 z^>~hHp?x^Q6vD65b8YcdQiyb^l@2;cLA*TFkdL&Qj%@x8PVNu-^4j?rl!&gmB- zxwHdMFnP2W$7O_wg|?ze50L^|!gmz*#Q%Xz!5E*-Ch}dZ>#@rhsRkVg* z+{gLSZgdahd{yJv;he8pj~|Q(5fAOcn*0!HSB=;H7b53r85tsF4|Be>9iMt6MEqXk zV{vsM=Sw^B{;`}RZNc@-aN32fjD_~%Nv44I;iPdPQb^nI9Aj0-an^Xwk+x&Fm4Bu+ zT+TRXCu$QyWT`riy`K${YFfwkS3;zL_FesIJb-h;Mazc)i9ht{!VUWnwYHF&5ZM2ct+K3mB?)p1LGAXnRk1*-9SM_r4muj58l4p{(W9TaG9j)OSrhs;0Gh?Ma*v*vCvN}ZO zGG(*_gVyjI(i&Qr3R+ptRH`+2WG(lR_G0Qft_iK=DyQjd~Pr2NZat*KJGg$`#C43ns#I90X`pTJFYs! zvr0Ra--Sq%T7zvZJh!wLyN~fa(9+6l{>XEy`gjPxpTe_2TQIMk&rQ|1_*97WoWpD4 znGUW4?ZW}*d7f!AR$S!VX$LO46e4ETxab=9Of@dLA(Y=&q;XM?Q2yK~jcK=qik;SR zf3Hxfq&@hUAylepE1n7om1^3Duf~P)Ju*38e4%fsG^xhl2Zf4Pt-%R-q0&X$u=dGN zG0f#z#q+jMNuhn1K0j2T{JT(Tq#c;`Lnyx%%k{xC$Jrb0!#Hm!-{YU>3LpMGROAh=GtNHCK508{ zz8K2){%6nl$={)(tHw{Rgi5Yz9C~Y*45!UFD=JK^v>g*N!=#MX@yLB);-I~l`9zr1 zsN*<$T9~-idOZ9_n6%O!j9VTiK3c0xcZ7*X%g!*lhaXUuLtAk9?l8%t zop|J%FurF4?}f&F?1$Dc@Nk&eXaoM&5+-(9z7La&$Jrb0!(Y5%;-tO!?8z{3(KfvL zdzdt+^{3d+nJ|98nf+k+g)nKMHT?FEF!9nJoZ(~tv>lWG3gg$mIbS^XcbFJxFFtjN zbD^zx;&PaztK&HBD(6Mp@P>c6wzL7)-4HH?v&cJ;SApcH+s~!=;?| z;rssK{Ml!Y<3oYr;#BMLiXog|Yv){o!sX-OaBVzqr&+;bM}loW5W4! z)APiQkHm+I%wx~^XJWV*Xz3F!i&Mfyqn$YSj&RXw2flc3xD2Q5n4A|bR$9m7!@~LB z8O|5yKM>BJ#b!MYdXPQSW-J)Vo@pzVj%Lra9RnU`&$I#8J;|PF7v3|DJ<}Habpm^) zeb_ObJYN`_DSnl%;eHGoXHHQ?f4FpPdjiQW1&4bYytOzwqVl2a4Dj7 ze1fsjR%~R-)Oze%6fPCCIKt&#W)*G0KbUIThrvt2rJmMsA>*MPXnQwY+GypUOT*)zC#zebul8Zg7HMn<6xMb5FytI}3Ld$2oFEfVLab+F%f_7rBFT!OO zZNM#Gh09XfjeB>8OD*lel0Dof+J;(VxU|s9cbRtDiJ$J}S)yI&|1Eodo7coMOfTAp z&iy=BwDQaWo-1`6!@uV`(;5zD3TQLle2nLZHek(Ov@_JB9$Mo5`jj}PA+!SA_o-|e|;oEnrI*XGAcq^XfOIkM@XAGj&Br1@VUx4V)mo_JKBr^V*Kh|5t2?@ap{x@$)lY(`nd=hqmEL%}5mHQBaq-0nDW#nl+r_h_*5J7A2&q(S zQ2USbSI4pOMx!`s4;J_trBzX`_Ak zbC6LwXfJLy8u|YyoG*?v8O2Cj@V!{0=(H1yG~R=@VNQZk#?WS*mTKf@9&#KX){Rn5 zTd-HQQI^sMjLk7hHLc-)LyS^S%TS~A$YY;s4UQaclvdh;a~?8EJMF-L(MIv9H8}Ed zqjak^Xn4{nJslj!y0QE-?Z&+EMlsPA95KNtiK;Q@Y0iZ<_+|_HSi(NB;0Ml&wklhVl1uA2?iZt2)Nvetiswu< zMxQlGDXro43p`h}{K563NBT!f zn_7dez)0z!l@Ayq`MyCM$B>Xn>7+I69U3X!w2r}Hk<#m3j^nuSNHNh?yw4aZ>9hr> zMn_66ZNrJCNXb`?Cu1UI4DCZ*i{!swcunk)7%Ann0Ym#lN)@f){G>>!p&fWAB~lt_ z5Bm3uloqufvoj*)JZ;9`G9&r^9K1e$GJw~jUHI!D_NI>GqMS$>PCM|}osm*Nd-1;^ zky1#@&`4Q$5BpSWQ0|YEB6S?QMnuXi)%je{ha+VvZNQ|0NLfYe_~(<6Qm58D6)8bX zGp%7cGUsU>k1{^miycfi?ZfxSvZwd>Sd1OVy`VKrVGOj6 z*72M>tz5vEXb0|_5GjeY2OoNxkD)C%qnPVM+wmx)(_ZXga%mstO^M|D3a}ns&vH*` zrT00mn_7?Nsk}F>{CZlXl+Yd=W#hWhR{Z^iNU5ZKIQ=EA8*RspOfBugp`~0y+Kfk; zM%s%XOy|Cv%S315RN&)p0Ci{NCr9;BlrW z?ZwLVyf^K@j%uC(+J~z?;=a>PoLa**p=~(iQ_h_>V^A&km)7vFjgeAJ%ce;FP7Uuz z>$r=t({3ESIg($8<6h%qTO#>hI5a-~8P`NL{ z#~h}OHscD$OFJ=t7uSKdV2zv45!!`gc5@x7crWbN$ma#EpTy%1#54Lk~-RjxB5j%J#9cE(?n}H zgK4Jin0`x?w9z_N^oWuU+JU*ZM)Ch;c`x+8JxaQ11OD7AN_wr}UgMU4C^6A)T*42Z zPp6%DkjbSzI6f#!@@Omm%@oiQ93_`SqNGT5Xp~$Di;_~+;ZZV~DW`4tR78|4rLB0o zF-mG^1HKu_dC?AhH#SNdXeTamaVle{ZFu1x?hWn3m+y^|O4^QX!=uDOd-2W(xmL6phcnf* z1wUnKXcvwd!F8dn%KRvP#wX{FB_r7rZNs}Q?1?sGz$l&v+JL`~=DN{7-2G^j^jyXM z@j7Fq<*_JP#Avhwdq2)Kq;*Vsg6pOllb_;RsmAviEA7O0#&At&2M!*~GeDbh+c?gP zcH^FjQBp;FaPKowvPv~}Jj?mgK5Vh^JkVYoSjs=sX1rL&^-^o_)!9+fN!xJ&(`z;F zi~lhOnqOd*o{Wh$;2cI%Yw$BBop$5wIh-SH#|kD_t-;ZAIbYg}-Aq0$Z}6Iog*ISu zInN1g!_~|f+KDmqc}{2zKV*t&7xr4neWDFGg|X2#EMx4n9gj2Rv==KKTsPW*9gCy* z-%rjRSG~*gKs#~jdwi{+Z8+q8o(I~DLCd*rw1$7Jh>~_%Rz^ubrjyoj7t>9JHE1>e^!l~syQ#(g>QVwb51+( z>5n)U+J-|vjuIDb#(+t0_)c0752&rRBgqYg&NdD@C253zqI=ZJS5X8*Jq zCovjr!(>mCq|iD(%H+~kEdPP8W3&U)+IbGu8f<4uX&>Htiszd);KQdmH`;<)2cLJe z@*-2G)?>pNo+a9i@0{gXq8&Ko9Is28@k7Q(yKvljzP8X-tn@{R-#XUgyg#EPR5iZ& zSCk~G#;m`&Mzk4!Ve)7%{>K#1(#iXGaW1q6`(Nc;)OuWZjdP}5=zpDap$$0oU(SWL z;RpY5E@}<-lW1wAb$t4UXlYh!u--pf+GsaE8W=5|v{h+{mYyH5hoETj4~`ZSZNSKo zXi29v9LD6*791QJEqSyVuP}wQghfjqri9i}kB;W^gvRpZXsM(fn3obQ)wBhtrm`p6 zhMUvaGwniq-)L!}l@F&!OS@W+rhe>|*66HnbCYt6!wohnH1WM zW!ce^P1|w$9qdCjzC18m3RGk7LD5n~>v)(cr9F6&DW`o{m&>`(Zj2woxv2HHcqspl zcH(t2=R(Up(K7a4&V{z(lKVIpwFYDII2T&OQNyC8TdhIgsA%a`&3oaS1<{g7JCu(_ zOAf8$-H%60K5fPa3!`NWZNZnB655V~o?!oK4NhVzXdBwbNArDRXuNf5wA9cBY-HTD z2hU7n&$JISZP9!$8QvG=1@=cP4>R&1>v7eK(PE&T_}oief7*tzr920;hHo;tv;&8{ z%=M?uIOx@Av8cvjGoq!KwqU_b?ip>xUbEOgZNPe_igx4gObzYBx;fE&KXr~{{2S5I zMC-V?JX%_5CtiOuS~_T%$9yP*PoWIJpUhaJ<+Tz}e%Q%^+8Qrd>Ew(&Vj+wnuDj&|YXpV+@zgYPjO+KJASJU^=O z+lxH^vRvMXOeo_j)RA>XWEQc?l(y*Ef1LFi{U2eQ0p=OA(M2` z7Hk_~lAarQeY~D;;%6eV{(tOYq)8HKAO37HNsd~B4~*jDX$yWf+9YFWH_m*N^P%lH z_;HiWqRn`vko!f;6YSwh?u%NF`D08{OIxsQEZ3a&;`MPRX;$mUn`EMu{nIua|1|rj ztvIrX>qT4ei%DGbT3!=pPUf1^b{sr~YfhW-%ClT^TApKl3D;b$$NXtrbJ~J!&vVUb zFJ8Bq#IDxAV3G+hvVYo!eM;Fstz-MkJU_G#`@dq6M%s+8m6@c4w&U-wvQDkRM`xO( zleXg5vrOW*k!KadUN=c7t>L8E?4P#bb9R%YtH!Hyxc;=vHOV_~uy5LdUFGaw9e>j# zMe|Hjs@7xce3MkrUOZ62o@ozGd7C|}HF#?!d!`Lowt$bJ?byE1B;`Qy@}Vs zR~NHS+K!R$nk0qRuwto6a%l&4zQ?ttWtmCNF-5cw3#xbz+KT6vb3N5@oUzg*PTGzg ztN0vL$FX1y&#+pL=hkv>)N!1#j?X)_9y>nZ8gAw|wyx*7rM+1EA=izz;gyfL@3eeu zk|%0-UD}FYeZo50jqRWEtkOO_wt=rFv=<+!+)2!`^5Odo;2)+JJvCep`62Z+Nf0?2Y!~_9pg5 zyK(h?_C`CgqM5zX4y-%K-qadQKE&Q=9U~5NPiYNr^l(pU1D^SgkD-0I|0vgm_Ta|v z*&FS`s$=Ypc4A{Id)vwy9P}f5qs^Fnoac?!G57?}8?B+QjpvP4e*H7g8|}erFV7q8 z!bQKaH`;+$7$+?!O>&xX(LOxV&U@2d{PGmf6Ya(o9egg(PJHbwp9`Py>|ybF?j>!* zw=b|a+JQIu*c)xYcmCq@R2|28m-#xW8Y{2zby79%_?K%)yYa$}F;YqUFuq5OtfF1vzDWZKi>ggDnMO*Q;X)&@?t-;kZ*bnW*9rI%N8MN#le_FyG zXfG~Z6C<5!4HkSFBfYlqI(W1;MiOZ+KDC)WsN?w9XEBne8pnLW$Ed~yU$GzBfjf4^ zNGa{cKlj8)In57qmi|q=A8p3_4#Y?`ZNbM6#Yi1(#REs!C+)%9V=>aI)?>}d7&%Y7 z@ZF1CtIydpzHyCfMLY1yEwPeKOOIH2IyhGHX&Wwxjg=y`1~;a~$}HN22M5N=Qrd$T z?v0gN+K1I6W2I58!J;Q)rH!^>pUJV(N$c43Y%G5khmXZur^bqjHsB-A$4Uxq#SdR( zKeP)ky&TK;m1b|#dCym4rGR!~_G`QcZN^r6EWeh)HOHDaVx^pR;jDRl3~k5hZ?iwu z_{zdqsaK7KD`KUYw&IkJVx^t7;k2!>(ybbQ*%2$D^}Ielv@cfDX$x-np1sj7y#2RW z8ABWJxj)zsZNmdsW2KVzVAU;gQcXK?OmLhu&{ljqHcnb-2fiC0C+F1~3`vZWZd${Y zNpaHaOOE5Rv^X)T##I?{lCByL4v3Rn+Jn~z#z{UcgW{zBVBU{5;|oLMq=dHP{CneM z7VW@m_s2=4TK@q5encGK%ai?M>*H}!M|*M4#5ifDJy`R6oV3#}jF`zjX$|Mji<8jp zye4j3!ro{X9$XX0@4NG{c;Qp_L;LXOEpbvxd-3M2?147mRK`KuFzB;5SxRd-gQ=qJ z*uku#eHdNGp4A#0!Bo>0oXOOv_2}6aC$+Tl!sl`Pnie06&(w2Xv<+*&loO?b)XG+ zabKJar+s+%0QZab;MnFkvCvku9gLF#TA6i->qeXLr^9jlJ$tSjzT%0KV%m-o-*NwF z4ZmP)v>Q(y;X2bkbRFfs)5@bv1?|P%EnH{XgYiFbooOA*k8y2j2hKju$J2JKW}0Xh zMxWprrZu!PUbO}fw(~sG9(?|EoJa%bf}Kn#EgjsiGjU?1E%@EpI7y_vxak7dkapoS z7r7?14SWB|`O-Shyb>p6v>i8H=b2IKv7etNHEIn$aht|}UvNF~A%iBZv;}_%)x<}8 z(GaFd&mG(s{Fv!QyYQKC{vB<@UzkwZi{m0RG169Cz?f(U?qD?9jTe|i+J~bfHAzwH z(GjIdu3C>qlP1Gy4X4FuVx?{PVyq^mv>p94jqgXu-tgCWO{!=g-r7f#YIPj_Q#7en zjZtZu)X^F~oUTa&ZNXXnxDK=(Ycn)yq+QsSsYw&<#aps9X{HVMG1IQr;GsJ->7YG$ z%OI|sT7&Q0sqy*1xuD-&nslqSd+@b;G`>Fs`^Su7niSBwk}09BxQi*H-57B{`=B*k{V>;^cH*O>H2xct z_4qa8qCGgcfa^w^@#LdiE82(NLQPs|<-n&jIj`2>4P!a4U7Q!LoXE35JMr2SP10$3 zR+E2in&hc|L6a%3XflSj;lkIrzqA7f&ef!nHlvNHR%@`w8$83b0rxVsvw z0drUL9<&*sS*J-cZNnZP@cgSan6aLFO6&McHP=n8!E+yRe`y~Ueaz>GI*#qkDs>!- zYPj#}I6m?T*O|8Bh)=n0v;|*c8fiPO*`SGsc4Edxo&j3NpEhw0v=Yw@or7>X&qO7&2^)lc;6nb6>UNDUY-wH zxvWW(3bh6&?B~2_8(#D9Y|!$ZCQlvX^P0BexSx5BRpY*PO}c0g{&AN3yPNBS%P#Uc zNITKPm}%u?AI~st!=yjCzqF2PnS8Y#WB+2$w1)p<3TO+y#uUNZvOpo27@Lip2MLW@v70>r@XAgMlj(AC=eYj;1=S915#E^K&r!BZ4 zFJ6jh7j7C6FSAr*xib^XYgoe8YN7DdJw!I=()M`$*ey z?lbW+oOWPnG53qs@XsmSBU+y2yryzr)Nzcl#fx1vro9+16||1yOSz7;6)RunI?xVm zm>w@xv>VUA!m~*GFnkvKqc!}3saI?8=hyfc+Kb_{xo&C=uAIaDrJWc$H(osII4)&c z)Nu@bgZr+I;|=9pXWD?*7#}Tf#!GLeo7QpUym;xkmwSpo&*vGSy|~~lUW<0%kOf>j z+KfevnYQ6!CZG0T^1^s2q;=f*KI>=~KCvQRN@**8&6KP4ICvG;jW*-S)tm$EL$5Pl zYG~!a_3`3XYw(5-IWO9PD>v|L&`!Lzh0p76Ij^mJPSwYYQT3PcGG$jh-*1wA;=*sZ zzqA7f?&oumHlv3rqm`o%a8GF~US%q1Y37<7WN)+=haKj5rY&gka9>noeX)D?=632nu&8xo|B*3f)o0>3858hrPr1Zkq3xb2n% z@z8F3`L+aUrS0gvJwe*l8vMIgf}E$tKS8vB1nH!ek1;*>@m}a)47BoZ#z;$Gf;`70 z(l$KJ=(G>V7!o9xw&DS1IPJl#padzP&A5TF(k=`MPLL8>!*`f6+JS#F<+Ow($aKa* z+wn59N*xbPkQSzf_Tu*F1gWLn_-Sl{xM&v+)VNl(8E;HakOta-yZa|dBkjS*vJ#}3 zwqn9iUYFMKx4Z;tqkTC2ey$sB$9qR{-DnHmSjcsw4Y=%y1nH)o`1GU%@!QY!!Gz}$ zq!+E@4kna#h=Gp&w$*yDEzl21D^=V*cy(q?RJNsuDii;+Jj@O^!FFD(2iK`Lk~PGD+i z8#a4+HfRr;+PUv)J?{NILA>fXPVC>C?~TiPT=zw9z9w-E@e)%^OMP!yzP-2DXeT~$ zwKu=^&3oZ0#;K0upG>t{f33HqU+*oow2lu(B=YmtxVHG6DN$N!FMjuMqI9Un2?dE< z5B7kMJe4R$+KQW);j|0=#w1EUZNTTpCW=L^$G4aw+JXAGL@B0~9>zv1Pg@hEjP_yk z%ZXC1j^pH45@i)_!>+PKsix)CMEQJ1BEP23y~Y(Y6Qz-M;_5)p7j!zCKbwdvWi_eWZl;;GLiL z;qSn6-|<9kAE{GoFxJ&anrRK4NBW4DR$e;VN4jWf=_55^NzzTbuqZr9LJxC}cwA)rx2N)c zv>QwMCP}F}j%(7Bq=I(hD;Y`rd1tNzruI+b=j?I6a0yed)?jf?lDKIbCf}JP9<>IK z-jyV6v=^Illca<8;L)K;(y5N4``#ozhu8!5&P$SBw2sdYz1feL$igK40BxPLb1Lwhi5F6XP(;OuQl(n{NLe|?hpXb(>OGD&)V$DZ-j z_9QXTK6ErB@oRY8M?A%(sN?9jlk=htSj^53c@=ebP?s z`#bl7*0KC7`=K4U{u2A9UHH`%&XacIiEBwxLwj+*e=^^sZt>KH?lcid%!RfnrP1QJPZ?gDkGfrsc8velhVvL8^r!^dO zg#FWIe6%H5@@Xsn+Lp}UV`KkV^GmXn(Jp-b))fA1Ca;gj6H=sx_F~VZ6mioAyqJ
        6yn}zH?RfC+6v?MOxOGU16wz)B9+txQZD((IcxsANsx|lvQ%!sE z)fahR+K$s^^1ieUA1qIiX4-;vt5d{FyD{La6zQZ5c&I5wv{qgdKi`)kd9)jy`%|QV zR^E1${m=&d@B0*)MavH<^6SYISxWnG{;3pxub1Zs7oSOyHrk16&Zdapk2J17&$-hs zywsJ#fA8};|D?!_t0^*uwqqqzN;@$9T8fm>I*#}^MapRl?z}No8fZ7R`lU(-?Zqd1 zr1CvfxL>%5G14x4_O?{M_ZHU#*WR8gX4;7jOabl2mHw$RMjglJ15>3`t;e#URH>xx zcrYxL-vi)U;f-3VcxVF-X4+^oKFze#Hhisjs+_0oc&1OP_?_Td;rQfKG0|3xPfZn_ z)^YIQR2fd2an8_GvCqs54ETA_xQPA`043X>7re@Vw6f)k5sn zzobb6?Zp)x?BB~Cu<1;i7-g_l?Kl~%Q8WnVeWbkH6=zP7KNr@h$e>?_@B&APsF!{>d)@GIwq&mZb5 zDYOmeT<$Ao+JPIHD%ypMuk;ls?L^yE-dnB5k^l9T2HJv`Z%&sMT5d^~dsEZpygH7x z1JcFsH(m#82c?TqH7>kAUD9a>RzH+3W_27(N2E(3ZO85T=~7I)@sE-GJKBdQ$D~W8 zY8)~nT{>tp&YqplpC#dA@vgb)(vvo0)Envix&qf01LvoUi8f&FGWMX>;E2`fl1E!G z!I>^&XdUP~W)|(l>!?USGqLNHuS%m&ab0$?s&`X{iIbjRx^ITbN%sve?RF(dvIVtKS`v`*c{SNvej|) zg!Yqs)mR+gPpq^JO$q&^jMmUUv7c1X28J-B>IhP12WSW}WAy-u?S95*#X5@{<=nwB9cv<-(ppCLMJ z!O1W1&+0hNdL=^&Xgl_MJ41?T9S>CUy0iyF7qSOh!+1xAG^#atc5#LnJ9tiT>&gsC zr`>qqqYTNTJ(yXOA!BGA{kHP@v;kunJFTI&K10fBa*R($qihGeVb*wUFH z`Lq{5yUabJ-T2T|K8Cj7sT(uJM*HyNkW8tdUAQ1Flm7b0$A`oR7sx!!o6vwqfP)OzBj|aWm8NEboPv{+B5RT1IBd zH6}&%!S&u1g!O92TTYJ8i+W3A*$;&&T3MMyFl)UmsnvX-U#$!$Z0h zs^b_oQWra|VZbb!nhIIH6n@FKxrBw{+>Eo%rKoT@o*FzSzD@ zmm=DSQ=Gb#(l(sURMK{QXuZy#8D!5mxtjMuVNPoT;HSdc*ME92l z+Kc6h{iU6D;0;OrrJFY3@|6A(dXe+Rd8z#+g?6B%^%tF1US+aX_w6q+{rXEDtzmLb ze<`GOT*^3TC$77zzf{pKbej81wK|Sf_w|>0)mU88Um9r}KK^lkX``+95@Yglj`%`N zf6-LqpP%%XbXq>;y*98P+KIh3_LqFxfa5o@AKHqQr~C6gxH%Wh3K<}?XfrO17$8;Z zI6fLVKx))_ToyAx>S-tX#SY-t`*}?q9ydTbXbWEGJwQ5XA70HGAlNjH;hFc$1TeTNCE9e_lf~hq#B=CJwQrmEB0GE zK+0$xM=`bPIBxx9fYhn=IJI_wG}AV`_RRokqh&9zaezImhZI36j=l3suFtm3WHvP7c|81sCVbq1jrQQmce12Ht;e%V*fZ_JmStJup}qLQ`&rUKyD+*c zOMJA3KQLWt4I0;EiC-tj@d~5UvX*mUa%eYhc4mp0c40+LmgLh8%x%n)BHE0TZ^)Kf z+J>be+5B%C*9V)7+2VJJJ>%wtY%$U5jaQ?K8 zpZzbCue0EqV23wUQfN0m)z3Aj9XRcmP`=*-`@~z0he|tb!rdoA`FpFZNBeJ~{J9_R zi*K9`l_A=NTmA~=XTh;geDR-938r1Rd|a4>(srCVIZUjyhTDx{QmfYBnA^g{K^yS0 zyTYVZHU2p*Ox(0g50eSuVbVt%aTzm6+woLfm<-WA9F-m>5r6ZsxbZ&Ti+19g`*|JZ!}wYgUK4Mr4wD|*gx$CQhxbDJ`Y;Ki zm5CpONer!{^~*4+r$deBykV z1keurbZoc;(HYs1A%TXETS;e1auULU(BhD)tlkDb%P#i1GpW`s*C z?Zc*saA~KV_`j%dzHbN58}6MIERQwa0#ZJ_;GzWzkkO2V&WS1OzU`fUAWY#<9O#YTnpNS(L2JW zjn;7YLC*aG=ZM#T94-;G5mP?ln$tQya41~zXq&P(T&ig+?imc1dfJVjoM%t82k#s` zL)vH)%Jdo1Nh?q1&yYUahihM&A%nC7-)fm5{<4<8yE{XQE{_l+ZN=SVBBWX!$HB1? zQcug(5%N`hgf!7!Y`;4~+SD3MYl)CfTE{zIi;#ZWgy#Q5$gnz&Ne3e&WCV?0{SYCE zv=@*66d@Mchtkjc(#lJZNATS+%?5*R5B zv>n$?iIisAfq&c{DK1(G zPny5nDCG}E$}V*r-(AXk({8-1E>ikw1J*DDv>h*9&TFdUICTZ*PMdJzlab;#lIw$Y zObBhq)l4Yuz}J}w+J!GZ6)Bo({BdI>-y4y8fp0#|bx_A~;5Qd zqopcJD&|H>CvC<3)lt$-yK(-aDCwnbxR{YkIY+!`MU;%B4LH0iN&;!VkXTNvjuM^r z;ly=OQbilFYkid1X%9aA6nmhZc=I#tfi~g!7ouct7v;?Zg@VR_Et>IS-qQy*m@x-EN z$)kO^W_h$!(GFbL6wROQaPRQmebLga8l#UyvqxSB_n(cHF4~PdqGQBMyRi747#X6i zcuPl&7%t}?;r#bvB$&40sbet`O8YSPL=0c=!+P9tDu%De9)OzBeVaR$>(Yj}CaO!3eL3@)B21GEW8l+P6L z=Qz&3d!_`?I$l42rkH3W{>7xwQaw}NST<8Ev8I&~~glK1-@q34QAWkeE_EC;$H$77 z)^X1@u`)!v@tFy+;y;GTV@QNw1{COAm3#T!Sw1yAe z%KOrGOuQ{t+Gri4Z;$2wZ&`z5r^fOl*?4`NeOIiURBNzsTC9vSaF1~P^jHa|9r$H< ztZ1|s^~hMMq?NN`W2KJP@QM`Pmp0&%)L7}D?RZ6cEMJ?(aeOX|YjG9lh!=(vC=?m7+M@FTUFz<(pbLUjmG$;vC>KF`1Nw$ zcP#tI*cGu7Kx_EAJyrr~7g|^HTC{R-U96aCSsyF!zQFm?ZZzzOm1Xlfr(+<3D zC+AKZar=K`rG<9k7mSPc;*QCAZ zuHiM+aXht1lc4c@?x1ajCc(6F%^Hn=Z{iwa=33s1*0HTYlRDakjgK>G4PNo2CQYC(X1IBWmLKcUxW)S3VlY?~kxg^e|pp`73jh_TguXeg>zKL@zKAy zwzM6u{hN=S$o}!*hnG!D< zx5P^@t>e45#fyn{grTEpdYcwe;!BkqnDpE{1k z)$uY!TX9iSyo{T~8vJ52>u4`t(-ALb+K99E$4eKjVZpoc(nDMEo+I(nN89kbo_IM) zd(r$2??vl)OF#Rc%${-T@p!3HjWe!H;O`^yn)vLP1R12AxaX<_8F@YDi%*PCka4sF z{|QKtT3RL~$N=M@efaUj1Zkl?xHT|AT(lGKo{}JL+J>pOBuFo`Z4-PTGv?L}-1Y=UiadAq5gwl5WtvErM;3*bnW*v9BkH+`t+PjY*-M zXt*v>%(OC}vC&rifvKT=c+*{pQb(JxetM!b(+>O~D^Xf#56;ySrRYXp9~TuSij}tG zmqm$u*);pdb(TbN&<^ZbktnU|IPSM6N;mDs`o|KbSFORjRwnXwTbv{64T&;9D=#!B zirmC?ekM__c|TDCXd{LnN)!{V;YXh)N($}4fX~>ET7$QK&NodNfL51?~9F0BJIGt;*%tW*6<@nr#-kMpVy*Yc#?6@J{+h?k|xzyxI9Vv zX)DG&mL&dDcpaR(I!Qul8=hK|Bv#so<|mV+j@I$$h9qgHy}0CsB=OL8+~Q2)XYTQw z;3F?5iQg?8$H(4I5+m)vhu!Q`9mh}JPm(IygTBrrsiBqLgY1)5ettAbT2*7>4@uHP z>&l)rhGgki$FYa0yN&n4 z=QbuwJ?+HGt?Y-k;b+^ErJeTRH;hNE$DEh=c-o3Lv?NO}ZNmDU?3s4p?`_F4NXzTV z^2Y9D@w=V##lZGtG15l#yqhecw6f}xWHHk=Jbx%zYH8_CmXqHnO9So0F~_(*v;jBx zlEp_m@#f!o{SfwmBL1X{C*LS@LY@RL5~%Iv-2h&}N%0Cskus(`$M`lY4ZO30O zO5yLIbFFaFs1)gRX9iK!AuOA<0Mv=Qr5QbnU37*~=ic3Q{l%2H*kT7$PT9@>Nh_oqq^ z?ZX@Arpifm9OupFy{5BIT=;0JgsR4@4XI+Lb=e#g|)UYydLDvh)We`Q>> z53hPARk~;+e!+OudOZ6=s`zNxmMVY0m@0mu^!8Ml_7dktYv^oE<=>UK4w$nuRV=g> zr@oddRkR6jZs&YeV@GGIG}CUJ-o+kh4WkdS2i5q@Va}a);`~#bJ8i>7%*ZgFE9~~A zN(k-2B^Od9Q60xMjD>dKX2wc8aSu~TyRkshq?)$krcr79Q4nkJ1E!JopvgZ?nrP*` z32D+s+i;9AO*&}<-oo^$HMr=8H0h`9c-f6hLxmd2ltab9>^Xqq(BCfqY4jsMoGe|peCnGc18(tL6K4}A9HY-iWsm8aM5ZaCBnFv~9)8tYuO*FLzTNpF# z!Yy%Wl1DpnZG4(oX$L-$z%^HmS0$!NEp5bjrjge10j7zz;lA87*-E?dM`jo8!-o7c z>7X6Bttd@;XeaJxd}=*@R-7h7vcx)rjGws7$o6;mO ziZwWC3m-!paal9Z25rYB&!kDBY7BdpXM@&o4wFaQF!BZVua4u}ud-*_jgPc(ooPGT zUgz0T>oIzFnzX9*nDY+TnYQ9r`}rKCz4+a`Jlm@AkefZz9*lXP=Q)~>#WW^>)-m=V z=c10|b6q?Sv=fs*VgG6kjyselMYIvWKFsGP?Zw2;csA4;Ebiet(^ho473%O{>k%9+wqaV`87l}jvnSZ z(*_(Z=~AT{@4O_PpHs(s;qRBGOEb+E2FMAfmG)uA=ycgd>zFYnou7X|$h1hhdp+!rVeF^E(sMcU=db+gGI&LgUmk!#ASKXb?Z?$uOarl1rNlR6_ z{5d~ehE!Ll%hivvpIFvl-uiSg(pJ1@Q#wD_f%}Wj)^tgsl{dGi^EF(Y7fv~tF14z0 zOHVp~CxbQk#gAM!+KUgJ;PPGR2Gu^Zs ze`9)RANpTl|Fi+~86R!Mb<7a$!0(u0+KZ2gneX|{aZDd!7JpjDk1jQfk@leTO0$I0 z%Ea+zF{?GWjH#sU_&QTfyYN@0hW6q3Ys^wh8}agqX8xO%y-lg#25&)zU6ojuc5{4K*Q5ws7l$};n3 zU+e+v87u9;BYEtf_F_?mS?XvjCe1NR6RqQ`Rc2|XT^KgsEL&*}_dQ^iU9=mwEiy|t z?Zo?P&C*ZX@Z2)94AZjQEDzhwGA@B@h0i}`mJr&Bek;xVeh}9LbJv>rJt6jhy&KpQ z?ZpF6o5ewc^F1PM!hUib)4~2522${gi7K*+nal+?*j@>Nvi1ONMx97v2=i z`O+r*iy1ka>vn5~e9VlaJs5Udh6K?X{+9`%-MIGl42hr}SQU~XiL?!8OwABot;ZdV zg?8b@J2Iq_HsTOtqvg&F*~Zk-PW;i7A@#HmL#J_1X$>Eno*_=!fipuhq)i>i2gA6I zv>m^T$dFFji!);~q))BE^RXE+NQ;&s`xCf#DeNCTiQFSvS)Ii5M%(c2WZqjfM$hIP zX$@zlaPL&3IhE^9>v(w@=S~}NbUOD`HGZANvr2pM)f}Ex+J)iyoENR3tCahtj^mNL zc~;eWynY+^k~U(nljoB*VeE?;GE8fDZU^U*%6YwFxE8bl?aTnJ{Fm|3 zvX*_W=bEVFIHfU@ubtuA;@ymqw&6QW5begxpU9LD+JI?HD6QiV6G6+9?2$36^>~4? zs^d>(N-R@JYq)}`qV4z|Q?1rx`G!of(N^5Hk!wXeaY+-`M6Jiam|e7N%9JC`oICBs z?ay+bXcuN|%alP{$DbMhOrA*`@gnC!8}L3RhPL4cOcCwDuV2a(3+=^SF7`vaG5RfD zpVn~6f4H8s9VhM1-_yW&I?E9=@LvE@UOYLgwirk=l8dD zG1G3m=_y?*X%qgkL6DEYq*)|q@DOTDNlanUC1z9w6`Xb+mM&6XZ@9RCQ)mOff; z&XzNGX3L;zQ#L=7FNwtDVV~+aHkD;d z9qq(Btl3hpj$`VaY-yx*Y`#C6-`8Xf?yh40v>RWV$Np&-J~E&E({`Lt&H2zqJpTZD zrDZ|3%v+evpM7$FarzV4GDK^5^YhtaDByi@)r-6r?Z8)BcrV(8@4cKYZrY6l?_~3L zF?k*^z|B9?Mttl2Y>`6N;F50sH`PA(Ih#KZ=Qu7p&UI0Z`P^A z2iKnA{?ZN{{YSR+(*{iZlY33;c$yiaeR$QCIWkNearwj?ks@9bZ@3{x{Ad$?J|#!| zX)oG?bNGI2tih|NeL!M%{0+IygD&Q zT4*EICFe*hZN~>va-@y6;k>jQ*`*rO%{kIR>v%;*j&#um+|PJuH@=^l!@uirO)#k> zM+Ve-yzXB1U(9=95)(n|=wLKj`ON(}Vy2zg%ILHU|5ueGd9)X0UXB#e%B75zwqq|- zt=8as^Kl;o?=|I5AR*hxzjd$*q$TZ zv>k_5*v2?%7e2m)dqg{MVKaMEYw%KMj&#xn>}z3YF9yBBHK$D&xi?3Aw1$)3JXf?25B`%QfwTvwNvi9Ay;`2~k}H9<4d#ZNh6ya{1X#tie_b*G;X#qZPSgrM)=i-dwS% z^*B6_ebX{OSKe8eE6ubU{TFc^Xam+R$(2spj&^&l^s2_ER&tKC14pgqwbXjFuj72n zSc6NR zeWZ=(c$4#_m8brjD;=~CKWpb6(H`vEpDX>e7a#hNYf9Vkz5|?RIoBLF9%P@i6MyaE zn$tc^`hfeP1wj((+(Wh&Hia4uK1Myjke>BpYgn@^|+ns zpk3Jdd9HM+#xp;$XIlDm`CcGgTiTAZf9Bd&upfN+1pB95IOY`BmNwuIr*kEg_Fqy)2@b5euvF%xy$pUhj!veqw}Pn_TX(-r#XJe2?Rc8eXdmu; znLX1kyzI$m{%{nJM5Ih-c}ce7_Sc^Fzb?@O*NZNr#v*c+|kLqD)L+K$gMO|%nl z?dP7+COq(ap0v^)T>U3|rX6^Q@u}nJ7~*=WKa@Fp&wNb)0%z zzL;neUOF{js?{1?$<)yfTrfRf?6eK<56hP()wrK&rrqcto-Zx50V5*w`5I@=3yWj& zrHi)Wm$UN4OM5XtE?)-KaXgotFMgHWi`l%FIbV#l4U@BZEn3Gb3-ZNG8}Q=7e6gy= zlZ=h_;Z0@inKt2xihOBM$8q5t_DtKbzAB%;v%+~{Of~zYHH=u0FK*R%v?gCXv==LC z^JRdxV$70!k$YK#>z8spX$OYcxt{7c9$v}yr9D{Y$QKK3#rwA8OAT$qxaabvk=Aka z8(cTqfMt8~r9-X9l8$`oQH{$Fah|jtbC2Z9$on{sZ+)FFfwUXrPUcG}t>b;?xK^|c z{fG0Vk~ZM9f4M%ihDChEN9kd%4 zj4qHK+J-my7w|Q*Tyy;3iUR4UJ$Q~8qPcN0g&9_Bu$+X zPMh%8umZjojAsKqvkLfnUiOS5Qh6QPfT!~d#7X<`=$r!SroA}fUe1L!V)Oh037pFw zFl9l3m}wom9x9M(+JjX!1+ta4;Q-S?`|zJfc}-es`N|=tY91epUozFS7pE^~|FnjI zOA4fsHezZWdsFMNnCYOc`0MflannBRSW_S;X*Yh|P#`1c^O~5op6f~LIKTwaKK%D7 zt`W_Dz{#Es1(Ha+@!e+&q)0X9zEHr|i1A+7^>TqU&>p<;0Ov@Xu>E`Xpw{EBj9)dc zkFiI&zqE$;d%3@~4X6CT`_d*n#Dvlw%>1!{&rkM=xBSGlRcr9~W9*0KKOCjvEc>CY zc*9_U)TlLh;#`5)X&+7+;@PH+*!Nd~w9sDsN(!YzHIBZlPIA?01=(G(}!wRL6*3qtpR!$BtlzQ5T*-Qg%#YHm;rBSWHx0xo| zjT2)ErCF`V*O;xe3-e|cN*is(olJ*1j)AiZ`SViNV?=BrKfjs1p<65DdtvgLSe8^M z1GE(b3kvz~c-G^m_ZLb4?ZLTo3;FLP&IOM#DYOsW)rC?-E7vS6JAr(I(7es%fh_#@J{Z zu4QUy2R1Xcv=bB76-phg;{ek@`|z3dtW#_7)yKJ3v@BX}s#GLg}K7n8f%$ z$m`%;4z3BUVfF@|KiY~Vo47uzaoLtaiJ|Sdx0$`sZv5aGK6hvjPI->c5!!^0Z)Fd( z1D#9F&0Vulp-0oi1)(XObG49wRaXt4DG=4Obab0j)xUVt2&N@OuITB&N*;u^lZ+N)^Ih`rjFw~IYr{4-Dt`!l3lbi zH@}FVE5kj)xlA{0!@Z10t;gEpBI%{=c+CSveBWHI3C1&tk8-|vj!B_qL6MwY$h}i- zE0Q>-Qmw)79^~H9UVQUm_D{R8wT6478h6yPH`Q3Zn7z?93|zuBp^aF+lzT*5@dVRL z`>?jINcw3z{;-1krH!l`+yT zJi-LgUc8}&^QBE#&xFtp9A-?k>?o3qSGW$ej`p@9$)lBPB~K~MYIVmYG^AqGF7w#JD3{UjVBp9?ZfJ`tfOssjB%*r znDz(vn%41|b4AijJMq3hITy7aPcggHdVF(;XPb86zf3pHUjmh}fAcv=8*x9=L%T8P zAD(&IgkLayv=_t97s&vvVa31fm9}E|1wLohar~YcRO|6JDV8DHgzd~Q?Z%i9#Ue{t zk9(Psv>VMA6^kFOqlfXQmHNfSVo=BN>XF6#tXKAolP)QiVAc3JW1_t{VN|h1sN=Yg z(P%d&`xQ$Htz-ISyq{{UXYyzVb~2T;2S;9BEH$(N6PbFo9!HEWmL_!^Q~ir&t2&M+ zm=@ZHk6ckKZL}SiURlidf1+_0(@wi_km;gjOtGvt6iYAdz_V8si&q^VTP#mq%{p}) zcTeQ{)bX+Sz>UQ+j<#X-lwt`|jW-2zeQ6Wkb36N1$MLp1ip8RiH5YnZ3;F|-xOBo<2tZNM3`i={`c!9p{8R%@^}i~CO7F(HrZxQy$A zmBqypNZYWM38n4Wz(mjvY-VC;C$=&g?ZS2@k#=JjlR|s&IAf-LIJ$(r(gwVpvCt+o zGnKTCdzfn4jklC??rIHgVH#;Cjv;iMw+Gsl-V>)Ob)|C}Yw>pjuOdsvQX2wf9 zv6bnkUD(bH&~EHvPSPIiWqh<3|7HehDKD0Z%rI@lXlCSct}|K~f7*&4G2>_t&ZyuS zP;2lNCX{yJwN|bhZN#-q9__$CnMzvbaNbOfI*#90@(j>k9ALK6J}kVqn4fXP`{EaK zd7jl89ALWC8Z4a0HBoEu+ybr%Eem;OnL*lsk1|8F9e;V4|7`^yi$jc&mYQO@p9!LE zxVx5fq21WUm}w8rSj?{rw1$^2D;6tlzyPL}HsV^Qj&|VVD>+Zq*vz!hP8_w0`$QXX zas&5?HexX2p-s4j=~3%(#S`39+Kvs(FzvuU8L_kfCyV9njr@8=yRnN2rad_0>0$|? zH9W+`sNgL_0PW8UVz&>D7iFti8f ze^4x5+J>t>WY4q%-|ggCdW?PI`;3wH;OcI!KkdM;j<9Fii@sj&1+Coh4cDJ`V!`+9 znYQ9rM|qaidMx;XeX8Tw^CQ<>9mjJ6d>+yAYq4B>g8z*+VBTr2ty+&~eC$)L`Mp>+ zp5ZxP$$Oz`kp0lg&cAuKX%C)ZEVTSnEH^ThY7OQv)wC5?GBvaVo0&S=iLH#Cc40eH zPrI>;X`ns0c$jmc?Re{Xt~qVOEleBj#8LlpUbF!pWxCaRJjV3VJ{)_2&wbj6@ysBt z<3r4_T94bAk*nAbwln^;8@m_-?ZIAV9PPycCV=+gGg2afv=dWDlt>7z;~pl4cH=D< zm57-(;TFcC*5jy)OQf1M;9jOqt;e||OQeyu;e<;{WGijNkC`^wgSmbs(nVXb>ar5) zQ|oa%Gf2DeM`oDz;fN6& zdJJ31xvMoewx07<$MMYS5^17kO^JN5wnUm~FaD>I>p;74QUys(YyM)QRsVtTnm+G*v6S9z9bC%(b-&@OZ{y|nV_H~8FF zYcOR`i44&?4!p-TY~Z~xqKj)tYxt;#&o|nREBn|#?ZC?4cum@dN11?ioFm?GhHFck z@X()JL)wGiGPPV*_?v&Jj9btC@rs*D`Fo{2!R8nXwKF@e*CtjLTD*b8=-jK>`(k7g5 zE|rtC4YRUJ`7;pqfNPjR+JQ%yA=-zFDR85 z+JGCG6xxaN3QPH3(Y!B~l$1&(ZN-rlrP8U^;~kZy(np){CuWfLVat8&fp+1ExutwP z5y$b?dF+QaVJZ_$>$r&tp`Cc?eD+Bj@RI6MiBOHBA1IYX)tJTTw2mE25$(pE3rodH zyYMwzDPN0CWAB5dQb&7n^rBK}pbfZrNvSl^PE21{Do$F*{-#pdMf)&hGuNLsVdsmS z{}Vhv=>Jlw1kwh)(8_tyva?honG{;XX2wiA@mofxy_oQ7spQc*Zf1(q8ti2(Y7I_* zjdP(jY-cKIH|DmLN)>Iz5wDj@HEqB-jE%P8QKp9W;+t=jN-gce*f+Tjw1%3ilz%6s z@fg!U`*6!!rP4?{@z8%t`FB;$7ytP$=R@-aP|~=YYehS7?%So(M%yrY5BG!CFsYsE zMeA74bgT917}H04(72atODp#=KH80Q-r;$sZMgcwQvMy8kHsC`rQ%1su$?i`ZoK7F zKG$dyMleCNh9yieZN(*wiMHc0CW7{1=wa@cT95Ti9__%}KjZq-Cj5e_qP=+e|G3Vy z0i%B8+R_@PFm_tUJxo3A#xACb_TX`*nfBr3KXDCd13t>M(st}*+SPg-*UvxGM!cQz z&?by#dT0&PnO<7QQl^i#;>P3r+Cn=q>J-18sP&lr57$|(!3X^;GDO>PqQ8Z|bHIDy zM1w{ARO4HdEn=YExM8YA0%#|`c9(@eOW|JNyD=6CR%>ucyoImV<~4CchD9ROdMwSg z@b?&aUz}KMkrdj9cT`&Va~RGG;}%+^h}LoRA`3sul7@;LC*!3}n8OUvR$R&WXb1j>8KT|zBg4NC z@I9R@eEUo8FKxtl#z5=%5EDS#aXVwAUHAnPOndR72JSCyz-debt>N8_M%!@lI_?u~ z$8Agz?Zo#OEA7UkOcm|Li`H|0X#-AUYH1DcX6&>LH!=;h6F*=av<5{Lw zt?#i&B2!1}xQ4OQ4*Y|uS8KlHnllY*4L-#*sx{cjIA{;nf5kmj$8pEkJlnJj=k{{$ zv<-j$hI>l;F!wv|5pBhDfAieZ@(+9Xmvi65>)-|dG8sq96=kw;e3^vMHat41OcH4? z9>1wfEVK`YZ!eP?wLYXwUYcGejkF7Yh$@p7wFYm9FOv@1gtw)YNsnrroLwd-X(JxU zFO!j*IWO!lDU(3jhhJICB$W1|@7^*otK*nkRVJ0R73-K<+K$6>`Da?@m5CqYq74|p z?4pfWz_im=+{kp$PP}%0nYh&&Y-T#uaU5W}Xdlk3E|YFr!v@AfJMcTEhxTH~17*@n zo3M`QqwUzucxev?F5otpLfoHOmhnupmFZO5M%l}QZk!+UDWB#*Y?5vH2}o z(i*N>#`UBfc>M~_jW%MAo%5otcAjW*$5jG>wPva(EKnIKxjdM225;P_SSlQ!Z` z#zedDuKF^GQ0s9y6GPkaAfwS9%vsIzNn7!ICWZFmlr=mvvxD!Bo;N{DY~Y`OSHWW2$K#os5lEo?>cfA7-rM8mcw;0#m2f;CaSQ%la~z z%QVn7{2$|>y_otq&mXPhUdBngF|m>Rs*Yn1)2`NIz!Thi+KBl~H*LiOjEDB%?kD*e z+Ko$^c;09`7Huly`(Lsi8yJ7ufu|V*?Zd=oeodftjD3dtMQix;F7Aa|gD<|#^`u?6 z=0mOz?ZDE5TnE~U#xBm0R!;bsb5V^GKH+mvHBLCho>gOCH_sC7#mLWimS_#9e8GO6 z<(}f5U-HbT#&O5lD{aJ!PH<0Y1BUpxk7^BOon>#dj?O>0U$k=ipWGu_!=}G@F4b|I z@ejYIspI(ddHy%ri+e8cxj?&d?TB(|p&j__Mdi{)JMpD`$)@mtNKQ@0fCa&Nk19phmVXe7awiMGuM{OkXjQ^E@2bO z`TG!jEZ%rsx%km0G+$pX23p63H?v!!~rmeUuxSX$1;y4!GRxT0h zIGzn*ue3}pmm_zSOA779S4`!6{V(?&-?^(?ifA|P3oYmC=xLl2UM|(N4f|)5OAYNq zYh=09(aOT8a;aC1lVi)Jkv8JlxN>QtCB9tNB$mro+JP6%=9<$6OiJOJ(>i{T$~n*; zT#?Rs(sp#2%cYxEHszH|5A8%RGej%z&o7r@+JhrZs$z38CF6MO;I*2G=q%v;(`D6xxGX#oQ-a$ETPgwFa*(DHjWE#8Re;w&GEy zn)c$2rR7pfo6ybF(aQ5o1I-`sNdwbJJMg-)a%rZGxPWP;ZFpG)*N8UYnmIh9YCSHv zw_N(v8njlG%OI`%d>+^5dG>&N7Vs?5ZhY-Q&X;!KqK7#z+Kv}3Dwj&yfFC`|K4}kb zT3pWGjo@D3jZ4`NZNg*AI3L=FtL)q_+JUdEESHnC3m2>|mys{9H#9YHFKDHCeYu3v zI*xsUf2NK2&6Dhb_F{^IJ*YMK&jy|eS~l_wKg}L!HwJHF53~ut-OT4E?Zuax*#qsu z8PBqZZQOUfYb$$DjTgVbo@fJZ*~a_PPTcS!*HJYNzQpGO&0p>j!^_+wwH}Q-dA4a~ z;cMm6L0d8Vb*_VIoa|x`Y7G|uhdnqsj@i4|gKC_#hwDHav3M`nK^@1WeOw1x$5HQc z9cTm2b#onP8&-e7=YVRw;{eYCZNfPp@jR&GSn@IFKwI(VZazm|WDUN3xLks0H(vZX z&pd6wYkJBhk2d1VU-2Ha3(xlQxlhag%H`5NKF8I1-26SC%d``J@bWoB`|#XP{5qo6 z_w%g&!sjgQz#{|YGHyHf2!A=j=OFFFt4@_mB5lNzr}>;x$MNnnTz}ez8wUA2p`BQL zu3VhzIQ}?PF70YPUiA-qppAHPm_4ZDc=rYNpw{Dt5f%KNAFqSe7gtCyZNncgso;Bp zvL26)s^Dk#tQ9Z5avAGr7f$xCkb2sPW3H@_X4-&XkE!76p4Rer6)PljY=v~uI({|2 zLi*Hk)FxE$JgHy*E9BkD72@B*^~cB?D8zlo}lU9=Zx&8m=YTEq7fDx{zGpf{z0ue)LmuFt5DaXWZT49RC`6KW+D zl1M9$msf~|_F?0F6;h+tqjNt0Oe@oD71BcMc=FK-=}_xYmQ_d(t$g({{x{l%=5-Y^ z@@3Ye_o)gAq?JLNDg=tzpE^Tz}R08q-g^@UdSi#78@D?Xe2+Yo+lVW29xELJl(_ zvMv>Sh6YG@x$IKkd%Bc?HRw2pQ)wDL`+o_3+%$qIf(CeJMv{l+z< zt+@3RLp!mPX`wxMfoY}XbcNi;w9zJ<$GB)4Zen)PPCU%C(;obn>7e<`QE~_4rcL-H z(@8rp?su*gt>c6H_(Ua#-#^ZA|MdH6n^hu`nIcCiSV0SkbyO9QX9e6{x44=i}Pq4LnhR-2r3qIL1 z!*9r8J6M*RF}eSRU0_q6jLC;LgAeq}m}&3^@bm#0Qw%Q#>j!2`xs-#q4$7EHcrAG3 zP;`K&!Kz{CAm!j?BQjr@gJUe5S zNFA_X4snq>;0xzwOr6vLKQtFVz>C2jU5FpxE#T|(GUhe7xhP{seKce88pvnxxcS5a zo(AWa5DRz(Sh;{$zy%*F%a}#*MsVN78M7R2E}`xs@&R55{sh?!ZvlILjClc1fxkqy zz}vuIT~4kF2iH}QGw=qm;RJ@?>s;B!^vkCcOdy@C9Jo8=iZyc%8M`QS4(8IzGZ;M$wWA9w@!p-+)N@M7?) zn=@t=yb>(Ah1`Z$fD3NLx5B|`pC-QWLhwVk(HFcJ99fGW;rZavw=);uX)tdkK82^i zJ;+9Q8@TO`jM)Tl2G_45UhoF+@Vkf?JPmI8Eb)Rjf-l@nyx?u%m^HMA=YuzRY_G(de|Q@>{`=%KJPr1Eg8YZ4z|U+W|KWAu6+a~Z;gw*IW@03Dz^@@2;f>(MPvK8^ z1^B_I@f*AtO#KMoNqul6vIm|IUW&9yeegbHAG`sax}7}SNZi3YkUV%D_>mve7d!)A zg5<+1z)vIN;I-g@pOD}16!>{$I=l`{{}kWC1sjlgaKY1eU?aR3Jo0DwS?YiTcd`${ zQ{YL+8h9bNwsW$%VIpvwnpi;KksBzs9HV25`#@#1h^NPTb8N2Ty}% zBE?c4T#U?xSAuu_hItCF1AFel5AYOt>Py5LUI?Cx)WS1h8L|pq0bY%)hF5~GAZy^} zW!6$;t<(XlkoE9d@GhhQUI*TfY=k#}k0P7kjo?;fGrSp`)J87B3&C5Ft?*j#_E(sL z@H%kv?^y$-4tNo=2c7}Py++Q%)8I$`fIp=iT>U5f`BmD25511x;EmuLZ{RPu`7?RD zkDP%QgJ`v18zgMz?;E+at$|w=9`Jgc6b_`hwOxBz*~@A@LF)n;Q3|`yb#=l?1Q&~Hx8L^ z@*brQ_$OoxoFA4jS0m%$mEdk<3cL+`eAs-xe}N9*UBj^#UI*5UU~G6T_;sWL-Uz;k zEQPm$dq&|0;o$N^=9^ln4}S2_`KAtD3{K0RZ`Q#J!Pk)nIRAOQ`7*Kz-Tv=!7n2t;SJ!OM`1g> z4%~Fid@}>y2rfHrzA1%Qg8kFj1y6w!CSwmg4Sp6`1Fr)YACE0kAKZJwe6ta5PMmKJ zMYh57!Q+wb@Ivq$WCuJ0u0?jj8^E6-yWlP0DN~7u)CVs@_DX$l9b&#leQ?CI`KAXv zAG{CAlXB3UG~Wz`3(iBv!82gDlgS}?3M@gU!z;jj$V{n!%6xMcG6!A^E}1@`_dwVM z=AFtlJOy5aEQe>nhmjTVMsVbN$VGTQxDr_nuLF;GFLuJy;B;goybzp)Y=ReqpFuWD zeQ+z%2yX_TLAJnKz|?8ng9{$|zWMyNG-H7)X3RIQ!E3?aBDr5D_rSvU;|I9lOk^Cq z7<>^KFLl5(K0q!?Ie6mfw2}JYi^xo=1J0W{-^_()zJ7a_ag6<{^82VM)#y$n0y8SwSX z(RDL=R?Ig?A|v5xa2k>iF9c^Inc1AzJaWOn~%>o1;`pH2YW6h zXW%JtGO`I?2wsFV!ZY9#$X0kWxa>di6}%E0xr{Xjo)7lD7GJ?r;9_L2)B&GF%wx0# zzw=4f8R6hJE6EvnBlrw565ay-9vK5S*UvXYkbHPPc;a&W2`>a^-iY7e#o%9%DN?^0 z`;h7IT5tnW2yX<3ufT8cd~o$m_zGSJUV96<2d@Ng{WQLU*Mh&ejrjv_0axBmzfvFU zy%N8{Q{XR=weU7@(r54+ybvtE3;)0?z#pt8m*CCdjd!!Qz-z$=ki2gaJMbr;V{L)A zfcJiZJdtwnhsZQ|Gx$Uub_oZk-b+5f3&H1*Iq(+n-g?#-cmw!DWRcVdhu?=?@O*F< zvIJfXRw7H`f-fP<;BDYHzQp{3H-ar+#$LGKUy${1^I!ALLC8jUJ~(wfw!;g-tC2={ zCHN?^1>Ok$3E2ua50D$kHmL)C9@!4B1HXankow>=$WC|*_}Ev_L(0KRA7uT3SAatv zBFEtQ;6V?wrhf|#=5NG@!oi;+)8Q@P`HzwV@C-P26Fw0R4%~*l@D#ZD8SI5Of@h4_xrnUz78V_yqjWZuSv)G5FGN&=1}QPI!^L zg{Q%XkV1GPxDS~DH@`*SJ>)uEaNO^RpVS9mM~bD+OW26afwzG9FJl{Aa0N0CUJE|l z#{LU$1RvZ-ZonJBCy=%9X7Jd*5?^>4oYymJHp4UE>|R;3ML0NfP}XdR7lSV%d*E&0 zgdth87oG+O56zm~Z=(bFDl!sohGosB;aM{t-U#*@k>&sY!B^n;ky$efo(A(qWz9S( z2e%^`cnkOLCT7h>cpZ4{@maGK zUJ2egHEVWCIryn*S@W9I2is1{ntgD=>8D^z6LAEakbHPE_&PEXZl-6=WMqoe0SCW_ zHt>A#C}b8q4Gw*8))Y%Q`10x42yX-5K$gJG%&ZxQES36T&KX&=44wj4BCFta;72}) zUGNO}2C@!rK9n_ILN>x1z%gfH7d#)FiR^|KgQ*W=8(eTSvQO%OjfnXUaRCRNMGWBi z;CN&VJPl4m^5KQxOk^Cq7@UiYhiAZYWFou*T#BUOmEa0w3cMCvjZA~rf%hZR;SJ!U zNFlrtd>okpZw7yg%!IdqyOCM&HgGRe3^&DD(;JxsPk|$lx$u1ONMs&74NgTe@Ir7V zQVK5yKZ}&Z>%i|KOX1Dn*|YIKJOgf+gAMRT@bS6CLh69MF2Mir6!`TEv!+4nfIH{m zQ+Nyb%70|}ZXkMo6hCFS2Ty|+W|=$i3^=R=d*JzC{zCF?3mp7mIsS(?gO@MDx9|#Z z%E#~Odjz$cKU z@MiF@$TGOOf;o;e_}F@U3vUE}fRw_U!OaigLn#Mm zeFgu(i@^(#T6hNhJ+caJ9?Y7x$QpP9c)~+m!wbQqH((vhuqkVLAbIckuC5>@chTKW*a;M-i&OA*Mcp`4!Gd8 zTgd@z+uQVcs|(rBy(2kgPVVd-{6hlnE%FCQU^Q@Sp+WzE0HB|!TXS9 z@CI-fvK-z9ezG}hZjm}*|EGunJOzFcSugd$lBcmBUI9LVG{T#~m;TB=2yX)?{0;xW z)8G}zYw$|2z?2xXm2xnZQ(|)Af68=UGe}YH# zFEO*=X|QBKiJ2#L!1ty~Oewq&T#8h{E5YjqaSd++2M#SEhHx-%SczEyPk|GWT6h|q zg{+1bgI6GR@JjGY$U1lfID2@BX@F_-1#bfhJj*N%5fcGDQ z-{1}49b-#OA-oQ}rJ%&jh1Y`5A6{Y>!P~$`k0>$A;Emw*N206L0k0TeVphQ`!Qn^Y z2Y5bs)v+aJy_ACwPAf5u@CIV!FyoP)5eDK^A z+=FMpb8jM7g@X$|RbpD;72qAn9(Wyi-OVMeRrC*@a0`CeM&5!qAVcA`;48>TxVg2& z+=q;TH-I}oUBViMjo|3ph&4PP{A4Y@f>(lTKTF)DKKTDW#~c?9PW?RgN}c)=^DSg4 zyb;`nRKlCV_4nZiDF>fLR&}f9cb4$$TH*xHfY%~>53M$p;O~*$`PKZ+5B-@T~ipWIbH4 zVN(hJ|5vre;?4L7F4+7n)*QIt@J7}axZvYYvL?^0wwV7z;sO_}`#Ji<1-BzB&aAfB z_ZjSk3ucftaKSocJzVgPXVC#JIOloBh6|Rrq61to^-Ja#T=4x!+u7&|K7p*7Q*E)= zF8YP1z;lqydDRwg_%-W1ycS%C?1T$mwVVFomEirz$V;j%J_#QK7yJW~4;MV>H^d8` z4^BtM!wbQANFh7}E@wZ$dBV?4Ovd2P&Dcm`aGO#gVb#c#ZdZtzBM z2eKL70v_^vY*~tp;5;O=qT1r3*Vs4Vf)68$;DSHNDdjv{ZSfiSGPqz1QVADq>Q~C& zNufV@YhJ0Dv5HuL*Bn)9R(u^_fnz^V%KAh8gL9Fc@C;ZytCaPDSc998G+b~|ajBUG z7aVym_2Bv7o(oFN#3!pQUUOk7fB#DV;14sU{9P+LfRnSOX694X7LO|{HFMyCuauXX za=75PFGhcOGkEYN)Ootv;UTtydRoDx!1iyro z!yCXSkmc}Z@C9TIT(IxQ=@Xs;k3_b>)8Ls%3taGms~HQP0hb`DACpVq{m4jo1Nb;H z4K8@wQv3|B1wV&m;C0}m$TGO#E68%V`9!JdkJQ0a;5cLxT<~jHOOvw z9k>(O{*!8pZ!Dt@++15~9zs$-C7;1oBn=ll{gb6;3cMJ+3RwmhT#GD+H-KA^ydBjR z`(IaThQd?eSY#Sp@FZk9ybzp=tcMFeg=~bkfWJdF!v+6_G{Q|~sW}LF4KDa$WFNd3 zyat*1vucZDuP2A#Y49>+HC%9J6~2NOgQduNxZnfGMtB4GG_oBoxb6mgB<0`}$mXB3 zHiG5Lu@hbaRw83|k~82>k#X=AaMz8crU5Q^c`a?>6<`&z9WMANvIE`-R^DD}#y?9x z;KRr!xZo?uX1L%TD;XDF2R?Nt`SXivi%ajKExZ!E4_O5ld>vT>H>*p{1Y|Q@a5=IC zUJL#fX@j?c$9|T0J;&Y$mLX%{72wUtbhu#uyIFJKDew`b65a^Dg4_ZZyyhNsfLDT# zA=}}CW)1#?3m%Q^h6_IMIdp(GfO9`jUbT=9;8l;(54;k5?i<{DzS`pW&CGXr8vGAr z8C>wNZ)2O3gI6MJTdOUezlB)91^0fBT!IVMKVE9K!5hG>$PT#RN50QofM>vGkz0OQ zZE?*LfnO8yXh020xv*bg9}#uhCbo7;1;Cv z1?DN3_gmIecnTbktbz;fLe{|Bz>D_aAGqKZ$Zojc?3d6PE?D%kjLrN4e~C20+rXZ$ zkgLC;fAA!v;>Bu<-+?cMH-lgK6aB**z&|6)eoLP0WxgZ(;DTo&J@(K)cquXtE_e+x z9$pEqd7XU$UI%^yselXq3|R_q0r$N@PQuNfS;LXM-*Kh_Cm|`g;5U$w@J4X@J_IiK z(ZA3?TyQNi7v2DV_^;%~OVt+7{2Ts<3x3-yFb(i#a5u6YF4#Y3f!PU9ffphbFIQVE z>At`$g;#(tBW-ZOH*y!4y>P+D`YkZ2Hgp4@MYh2OFV3TXcm+6R-~zMam1>KV1~1^d zFs!%W?%@l}@>kITTs&d{zX6Khz;7aZ;DS>}E-r;CB)8$7+j@p18o|!W+Rhq!ccA?^NOl7i>kANjW%d8hXO>!S^Fe z{#0%8*C$a2-UjwNnb^Sv??QIM>%d{BkPmySE#6*;U*L7%H;`GcliT2u)36I(3EqnA zfY*XwMN)56TkKx6z>I{az_XEYaKW)N7MO|fG&mC}h6@gO{{k~t>Vp-?3b;l1D)3*1#LUVW%%J^ZtyU;Da;q3A_RP8Bzfk{Nx$f0-F^djX$!VIz3KY+@wk;D^p5_x@6C@nQHBxZvZ+bhu#U`3uYp zxZro^;zM{dc*F&?{VRR|XCQ@e!H*#`;T7Q5ku7k+K^LMYT(Ie*=m{76ahACOZvpp; zzy%L3A%Ffx4uFf0e7N8vr3=h>cq8~nWQM7+*uR`uz*FD}$UL~z@H=e zJ!&itTuy$%Q{dG|9b9l7vL4<5K89?BH-f)Ln&E=uZY2NVY4AlP)w9Opy(`ca-T=OW zEP@M;xrv;F3*LG&`2nv5*CB0i!I8HRM|eJ1f=uaEW3m5jL zYmgmq!9OA`aI=y%AIa}sV=`bJQV17(6qyMZ9DE0UhUbH4Axq)KU>Q;g7i>aSz?;Ei zSFt9;)8IMC7P#O#WE;Ezd;)2M3x4EI?1E>&TR+2G=v!m)#JidMaKS_FA>ZJF_tq^i z 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
          TbiP3A5r52sv)@s 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

          RITTS(Fs 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 Vylt`6qialcfRzUA>iBj9{XgOtnbQCO diff --git a/3rdparty/ffmpeg/readme.txt b/3rdparty/ffmpeg/readme.txt deleted file mode 100644 index e98b285..0000000 --- a/3rdparty/ffmpeg/readme.txt +++ /dev/null @@ -1,42 +0,0 @@ -The build script is to be fixed. -Right now it assumes that 32-bit MinGW is in the system path and -64-bit mingw is installed to c:\Apps\MinGW64. - -It is important that gcc is used, not g++! -Otherwise the produced DLL will likely be dependent on libgcc_s_dw2-1.dll or similar DLL. -While we want to make the DLLs with minimum dependencies: Win32 libraries + msvcrt.dll. - -ffopencv.c is really a C++ source, hence -x c++ is used. - -How to update opencv_ffmpeg.dll and opencv_ffmpeg_64.dll when a new version of FFMPEG is release? - -1. Install 32-bit MinGW + MSYS from - http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/ - Let's assume, it's installed in C:\MSYS32. -2. Install 64-bit MinGW. http://mingw-w64.sourceforge.net/ - Let's assume, it's installed in C:\MSYS64 -3. Copy C:\MSYS32\msys to C:\MSYS64\msys. Edit C:\MSYS64\msys\etc\fstab, change C:\MSYS32 to C:\MSYS64. - -4. Now you have working MSYS32 and MSYS64 environments. - Launch, one by one, C:\MSYS32\msys\msys.bat and C:\MSYS64\msys\msys.bat to create your home directories. - -4. Download ffmpeg-x.y.z.tar.gz (where x.y.z denotes the actual ffmpeg version). - Copy it to C:\MSYS{32|64}\msys\home\ directory. - -5. To build 32-bit ffmpeg libraries, run C:\MSYS32\msys\msys.bat and type the following commands: - - 5.1. tar -xzf ffmpeg-x.y.z.tar.gz - 5.2. mkdir build - 5.3. cd build - 5.4. ../ffmpeg-x.y.z/configure --enable-w32threads - 5.5. make - 5.6. make install - 5.7. cd /local/lib - 5.8. strip -g *.a - -6. Then repeat the same for 64-bit case. The output libs: libavcodec.a etc. need to be renamed to libavcodec64.a etc. - -7. Then, copy all those libs to \3rdparty\lib\, copy the headers to \3rdparty\include\ffmpeg_. - -8. Then, go to \3rdparty\ffmpeg, edit make.bat - (change paths to the actual paths to your msys32 and msys64 distributions) and then run make.bat diff --git a/3rdparty/include/dshow/_mingw_dxhelper.h b/3rdparty/include/dshow/_mingw_dxhelper.h deleted file mode 100644 index 467f3aa..0000000 --- a/3rdparty/include/dshow/_mingw_dxhelper.h +++ /dev/null @@ -1,110 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within this package. - */ - -#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS) -#define NONAMELESSUNION 1 -#endif -#if defined(NONAMELESSSTRUCT) && \ - !defined(NONAMELESSUNION) -#define NONAMELESSUNION 1 -#endif -#if defined(NONAMELESSUNION) && \ - !defined(NONAMELESSSTRUCT) -#define NONAMELESSSTRUCT 1 -#endif - -#ifndef __ANONYMOUS_DEFINED -#define __ANONYMOUS_DEFINED -#if defined(__GNUC__) || defined(__GNUG__) -#define _ANONYMOUS_UNION __extension__ -#define _ANONYMOUS_STRUCT __extension__ -#else -#define _ANONYMOUS_UNION -#define _ANONYMOUS_STRUCT -#endif -#ifndef NONAMELESSUNION -#define _UNION_NAME(x) -#define _STRUCT_NAME(x) -#else /* NONAMELESSUNION */ -#define _UNION_NAME(x) x -#define _STRUCT_NAME(x) x -#endif -#endif /* __ANONYMOUS_DEFINED */ - -#ifndef DUMMYUNIONNAME -# ifdef NONAMELESSUNION -# define DUMMYUNIONNAME u -# define DUMMYUNIONNAME1 u1 /* Wine uses this variant */ -# define DUMMYUNIONNAME2 u2 -# define DUMMYUNIONNAME3 u3 -# define DUMMYUNIONNAME4 u4 -# define DUMMYUNIONNAME5 u5 -# define DUMMYUNIONNAME6 u6 -# define DUMMYUNIONNAME7 u7 -# define DUMMYUNIONNAME8 u8 -# define DUMMYUNIONNAME9 u9 -# else /* NONAMELESSUNION */ -# define DUMMYUNIONNAME -# define DUMMYUNIONNAME1 /* Wine uses this variant */ -# define DUMMYUNIONNAME2 -# define DUMMYUNIONNAME3 -# define DUMMYUNIONNAME4 -# define DUMMYUNIONNAME5 -# define DUMMYUNIONNAME6 -# define DUMMYUNIONNAME7 -# define DUMMYUNIONNAME8 -# define DUMMYUNIONNAME9 -# endif -#endif /* DUMMYUNIONNAME */ - -#if !defined(DUMMYUNIONNAME1) /* MinGW does not define this one */ -# ifdef NONAMELESSUNION -# define DUMMYUNIONNAME1 u1 /* Wine uses this variant */ -# else -# define DUMMYUNIONNAME1 /* Wine uses this variant */ -# endif -#endif /* DUMMYUNIONNAME1 */ - -#ifndef DUMMYSTRUCTNAME -# ifdef NONAMELESSUNION -# define DUMMYSTRUCTNAME s -# define DUMMYSTRUCTNAME1 s1 /* Wine uses this variant */ -# define DUMMYSTRUCTNAME2 s2 -# define DUMMYSTRUCTNAME3 s3 -# define DUMMYSTRUCTNAME4 s4 -# define DUMMYSTRUCTNAME5 s5 -# else -# define DUMMYSTRUCTNAME -# define DUMMYSTRUCTNAME1 /* Wine uses this variant */ -# define DUMMYSTRUCTNAME2 -# define DUMMYSTRUCTNAME3 -# define DUMMYSTRUCTNAME4 -# define DUMMYSTRUCTNAME5 -# endif -#endif /* DUMMYSTRUCTNAME */ - -/* These are for compatibility with the Wine source tree */ - -#ifndef WINELIB_NAME_AW -# ifdef __MINGW_NAME_AW -# define WINELIB_NAME_AW __MINGW_NAME_AW -# else -# ifdef UNICODE -# define WINELIB_NAME_AW(func) func##W -# else -# define WINELIB_NAME_AW(func) func##A -# endif -# endif -#endif /* WINELIB_NAME_AW */ - -#ifndef DECL_WINELIB_TYPE_AW -# ifdef __MINGW_TYPEDEF_AW -# define DECL_WINELIB_TYPE_AW __MINGW_TYPEDEF_AW -# else -# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; -# endif -#endif /* DECL_WINELIB_TYPE_AW */ - diff --git a/3rdparty/include/dshow/_mingw_unicode.h b/3rdparty/include/dshow/_mingw_unicode.h deleted file mode 100644 index 38334bc..0000000 --- a/3rdparty/include/dshow/_mingw_unicode.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ - -#if !defined(_INC_CRT_UNICODE_MACROS) -/* _INC_CRT_UNICODE_MACROS defined based on UNICODE flag */ - -#if defined(UNICODE) -# define _INC_CRT_UNICODE_MACROS 1 -# define __MINGW_NAME_AW(func) func##W -# define __MINGW_NAME_AW_EXT(func,ext) func##W##ext -# define __MINGW_NAME_UAW(func) func##_W -# define __MINGW_NAME_UAW_EXT(func,ext) func##_W_##ext -# define __MINGW_STRING_AW(str) L##str /* same as TEXT() from winnt.h */ -# define __MINGW_PROCNAMEEXT_AW "W" -#else -# define _INC_CRT_UNICODE_MACROS 2 -# define __MINGW_NAME_AW(func) func##A -# define __MINGW_NAME_AW_EXT(func,ext) func##A##ext -# define __MINGW_NAME_UAW(func) func##_A -# define __MINGW_NAME_UAW_EXT(func,ext) func##_A_##ext -# define __MINGW_STRING_AW(str) str /* same as TEXT() from winnt.h */ -# define __MINGW_PROCNAMEEXT_AW "A" -#endif - -#define __MINGW_TYPEDEF_AW(type) \ - typedef __MINGW_NAME_AW(type) type; -#define __MINGW_TYPEDEF_UAW(type) \ - typedef __MINGW_NAME_UAW(type) type; - -#endif /* !defined(_INC_CRT_UNICODE_MACROS) */ diff --git a/3rdparty/include/dshow/amvideo.h b/3rdparty/include/dshow/amvideo.h deleted file mode 100644 index 401c105..0000000 --- a/3rdparty/include/dshow/amvideo.h +++ /dev/null @@ -1,1290 +0,0 @@ -/*** Autogenerated by WIDL from amvideo.idl - Do not edit ***/ - -#include -#include - -#ifndef __WIDL_AMVIDEO_H -#define __WIDL_AMVIDEO_H - -/* Forward declarations */ - -#ifndef __IDirectDrawVideo_FWD_DEFINED__ -#define __IDirectDrawVideo_FWD_DEFINED__ -typedef interface IDirectDrawVideo IDirectDrawVideo; -#endif - -#ifndef __IQualProp_FWD_DEFINED__ -#define __IQualProp_FWD_DEFINED__ -typedef interface IQualProp IQualProp; -#endif - -#ifndef __IFullScreenVideo_FWD_DEFINED__ -#define __IFullScreenVideo_FWD_DEFINED__ -typedef interface IFullScreenVideo IFullScreenVideo; -#endif - -#ifndef __IFullScreenVideoEx_FWD_DEFINED__ -#define __IFullScreenVideoEx_FWD_DEFINED__ -typedef interface IFullScreenVideoEx IFullScreenVideoEx; -#endif - -#ifndef __IBaseVideoMixer_FWD_DEFINED__ -#define __IBaseVideoMixer_FWD_DEFINED__ -typedef interface IBaseVideoMixer IBaseVideoMixer; -#endif - -/* Headers for imported files */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if 0 -typedef void *LPDIRECTDRAW; -typedef void DDSURFACEDESC; -typedef void DDCAPS; -typedef DWORD RGBQUAD; -typedef LONGLONG REFERENCE_TIME; -typedef struct __WIDL_amvideo_generated_name_00000000 { - DWORD biSize; - LONG biWidth; - LONG biHeight; - WORD biPlanes; - WORD biBitCount; - DWORD biCompression; - DWORD biSizeImage; - LONG biXPelsPerMeter; - LONG biYPelsPerMeter; - DWORD biClrUsed; - DWORD biClrImportant; -} BITMAPINFOHEADER; -typedef struct __WIDL_amvideo_generated_name_00000000 *PBITMAPINFOHEADER; -typedef struct __WIDL_amvideo_generated_name_00000000 *LPBITMAPINFOHEADER; -#endif -#include -#define AMDDS_NONE 0x00 -#define AMDDS_DCIPS 0x01 -#define AMDDS_PS 0x02 -#define AMDDS_RGBOVR 0x04 -#define AMDDS_YUVOVR 0x08 -#define AMDDS_RGBOFF 0x10 -#define AMDDS_YUVOFF 0x20 -#define AMDDS_RGBFLP 0x40 -#define AMDDS_YUVFLP 0x80 -#define AMDDS_ALL 0xFF -#define AMDDS_DEFAULT AMDDS_ALL -#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP) -#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP) -#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS) -/***************************************************************************** - * IDirectDrawVideo interface - */ -#ifndef __IDirectDrawVideo_INTERFACE_DEFINED__ -#define __IDirectDrawVideo_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) -interface IDirectDrawVideo : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE GetSwitches( - DWORD *pSwitches) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetSwitches( - DWORD Switches) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCaps( - DDCAPS *pCaps) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetEmulatedCaps( - DDCAPS *pCaps) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetSurfaceDesc( - DDSURFACEDESC *pSurfaceDesc) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetFourCCCodes( - DWORD *pCount, - DWORD *pCodes) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetDirectDraw( - LPDIRECTDRAW pDirectDraw) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDirectDraw( - LPDIRECTDRAW *ppDirectDraw) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetSurfaceType( - DWORD *pSurfaceType) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetDefault( - ) = 0; - - virtual HRESULT STDMETHODCALLTYPE UseScanLine( - LONG UseScanLine) = 0; - - virtual HRESULT STDMETHODCALLTYPE CanUseScanLine( - LONG *UseScanLine) = 0; - - virtual HRESULT STDMETHODCALLTYPE UseOverlayStretch( - LONG UseOverlayStretch) = 0; - - virtual HRESULT STDMETHODCALLTYPE CanUseOverlayStretch( - LONG *UseOverlayStretch) = 0; - - virtual HRESULT STDMETHODCALLTYPE UseWhenFullScreen( - LONG UseWhenFullScreen) = 0; - - virtual HRESULT STDMETHODCALLTYPE WillUseFullScreen( - LONG *UseWhenFullScreen) = 0; - -}; -#else -typedef struct IDirectDrawVideoVtbl { - BEGIN_INTERFACE - - /*** IUnknown methods ***/ - HRESULT (STDMETHODCALLTYPE *QueryInterface)( - IDirectDrawVideo* This, - REFIID riid, - void **ppvObject); - - ULONG (STDMETHODCALLTYPE *AddRef)( - IDirectDrawVideo* This); - - ULONG (STDMETHODCALLTYPE *Release)( - IDirectDrawVideo* This); - - /*** IDirectDrawVideo methods ***/ - HRESULT (STDMETHODCALLTYPE *GetSwitches)( - IDirectDrawVideo* This, - DWORD *pSwitches); - - HRESULT (STDMETHODCALLTYPE *SetSwitches)( - IDirectDrawVideo* This, - DWORD Switches); - - HRESULT (STDMETHODCALLTYPE *GetCaps)( - IDirectDrawVideo* This, - DDCAPS *pCaps); - - HRESULT (STDMETHODCALLTYPE *GetEmulatedCaps)( - IDirectDrawVideo* This, - DDCAPS *pCaps); - - HRESULT (STDMETHODCALLTYPE *GetSurfaceDesc)( - IDirectDrawVideo* This, - DDSURFACEDESC *pSurfaceDesc); - - HRESULT (STDMETHODCALLTYPE *GetFourCCCodes)( - IDirectDrawVideo* This, - DWORD *pCount, - DWORD *pCodes); - - HRESULT (STDMETHODCALLTYPE *SetDirectDraw)( - IDirectDrawVideo* This, - LPDIRECTDRAW pDirectDraw); - - HRESULT (STDMETHODCALLTYPE *GetDirectDraw)( - IDirectDrawVideo* This, - LPDIRECTDRAW *ppDirectDraw); - - HRESULT (STDMETHODCALLTYPE *GetSurfaceType)( - IDirectDrawVideo* This, - DWORD *pSurfaceType); - - HRESULT (STDMETHODCALLTYPE *SetDefault)( - IDirectDrawVideo* This); - - HRESULT (STDMETHODCALLTYPE *UseScanLine)( - IDirectDrawVideo* This, - LONG UseScanLine); - - HRESULT (STDMETHODCALLTYPE *CanUseScanLine)( - IDirectDrawVideo* This, - LONG *UseScanLine); - - HRESULT (STDMETHODCALLTYPE *UseOverlayStretch)( - IDirectDrawVideo* This, - LONG UseOverlayStretch); - - HRESULT (STDMETHODCALLTYPE *CanUseOverlayStretch)( - IDirectDrawVideo* This, - LONG *UseOverlayStretch); - - HRESULT (STDMETHODCALLTYPE *UseWhenFullScreen)( - IDirectDrawVideo* This, - LONG UseWhenFullScreen); - - HRESULT (STDMETHODCALLTYPE *WillUseFullScreen)( - IDirectDrawVideo* This, - LONG *UseWhenFullScreen); - - END_INTERFACE -} IDirectDrawVideoVtbl; -interface IDirectDrawVideo { - CONST_VTBL IDirectDrawVideoVtbl* lpVtbl; -}; - -#ifdef COBJMACROS -/*** IUnknown methods ***/ -#define IDirectDrawVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDirectDrawVideo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDirectDrawVideo_Release(This) (This)->lpVtbl->Release(This) -/*** IDirectDrawVideo methods ***/ -#define IDirectDrawVideo_GetSwitches(This,pSwitches) (This)->lpVtbl->GetSwitches(This,pSwitches) -#define IDirectDrawVideo_SetSwitches(This,Switches) (This)->lpVtbl->SetSwitches(This,Switches) -#define IDirectDrawVideo_GetCaps(This,pCaps) (This)->lpVtbl->GetCaps(This,pCaps) -#define IDirectDrawVideo_GetEmulatedCaps(This,pCaps) (This)->lpVtbl->GetEmulatedCaps(This,pCaps) -#define IDirectDrawVideo_GetSurfaceDesc(This,pSurfaceDesc) (This)->lpVtbl->GetSurfaceDesc(This,pSurfaceDesc) -#define IDirectDrawVideo_GetFourCCCodes(This,pCount,pCodes) (This)->lpVtbl->GetFourCCCodes(This,pCount,pCodes) -#define IDirectDrawVideo_SetDirectDraw(This,pDirectDraw) (This)->lpVtbl->SetDirectDraw(This,pDirectDraw) -#define IDirectDrawVideo_GetDirectDraw(This,ppDirectDraw) (This)->lpVtbl->GetDirectDraw(This,ppDirectDraw) -#define IDirectDrawVideo_GetSurfaceType(This,pSurfaceType) (This)->lpVtbl->GetSurfaceType(This,pSurfaceType) -#define IDirectDrawVideo_SetDefault(This) (This)->lpVtbl->SetDefault(This) -#define IDirectDrawVideo_UseScanLine(This,UseScanLine) (This)->lpVtbl->UseScanLine(This,UseScanLine) -#define IDirectDrawVideo_CanUseScanLine(This,UseScanLine) (This)->lpVtbl->CanUseScanLine(This,UseScanLine) -#define IDirectDrawVideo_UseOverlayStretch(This,UseOverlayStretch) (This)->lpVtbl->UseOverlayStretch(This,UseOverlayStretch) -#define IDirectDrawVideo_CanUseOverlayStretch(This,UseOverlayStretch) (This)->lpVtbl->CanUseOverlayStretch(This,UseOverlayStretch) -#define IDirectDrawVideo_UseWhenFullScreen(This,UseWhenFullScreen) (This)->lpVtbl->UseWhenFullScreen(This,UseWhenFullScreen) -#define IDirectDrawVideo_WillUseFullScreen(This,UseWhenFullScreen) (This)->lpVtbl->WillUseFullScreen(This,UseWhenFullScreen) -#endif - -#endif - -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSwitches_Proxy( - IDirectDrawVideo* This, - DWORD *pSwitches); -void __RPC_STUB IDirectDrawVideo_GetSwitches_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetSwitches_Proxy( - IDirectDrawVideo* This, - DWORD Switches); -void __RPC_STUB IDirectDrawVideo_SetSwitches_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetCaps_Proxy( - IDirectDrawVideo* This, - DDCAPS *pCaps); -void __RPC_STUB IDirectDrawVideo_GetCaps_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetEmulatedCaps_Proxy( - IDirectDrawVideo* This, - DDCAPS *pCaps); -void __RPC_STUB IDirectDrawVideo_GetEmulatedCaps_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSurfaceDesc_Proxy( - IDirectDrawVideo* This, - DDSURFACEDESC *pSurfaceDesc); -void __RPC_STUB IDirectDrawVideo_GetSurfaceDesc_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetFourCCCodes_Proxy( - IDirectDrawVideo* This, - DWORD *pCount, - DWORD *pCodes); -void __RPC_STUB IDirectDrawVideo_GetFourCCCodes_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetDirectDraw_Proxy( - IDirectDrawVideo* This, - LPDIRECTDRAW pDirectDraw); -void __RPC_STUB IDirectDrawVideo_SetDirectDraw_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetDirectDraw_Proxy( - IDirectDrawVideo* This, - LPDIRECTDRAW *ppDirectDraw); -void __RPC_STUB IDirectDrawVideo_GetDirectDraw_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSurfaceType_Proxy( - IDirectDrawVideo* This, - DWORD *pSurfaceType); -void __RPC_STUB IDirectDrawVideo_GetSurfaceType_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetDefault_Proxy( - IDirectDrawVideo* This); -void __RPC_STUB IDirectDrawVideo_SetDefault_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseScanLine_Proxy( - IDirectDrawVideo* This, - LONG UseScanLine); -void __RPC_STUB IDirectDrawVideo_UseScanLine_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_CanUseScanLine_Proxy( - IDirectDrawVideo* This, - LONG *UseScanLine); -void __RPC_STUB IDirectDrawVideo_CanUseScanLine_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseOverlayStretch_Proxy( - IDirectDrawVideo* This, - LONG UseOverlayStretch); -void __RPC_STUB IDirectDrawVideo_UseOverlayStretch_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_CanUseOverlayStretch_Proxy( - IDirectDrawVideo* This, - LONG *UseOverlayStretch); -void __RPC_STUB IDirectDrawVideo_CanUseOverlayStretch_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseWhenFullScreen_Proxy( - IDirectDrawVideo* This, - LONG UseWhenFullScreen); -void __RPC_STUB IDirectDrawVideo_UseWhenFullScreen_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IDirectDrawVideo_WillUseFullScreen_Proxy( - IDirectDrawVideo* This, - LONG *UseWhenFullScreen); -void __RPC_STUB IDirectDrawVideo_WillUseFullScreen_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); - -#endif /* __IDirectDrawVideo_INTERFACE_DEFINED__ */ - -/***************************************************************************** - * IQualProp interface - */ -#ifndef __IQualProp_INTERFACE_DEFINED__ -#define __IQualProp_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) -interface IQualProp : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE get_FramesDroppedInRenderer( - int *pcFrames) = 0; - - virtual HRESULT STDMETHODCALLTYPE get_FramesDrawn( - int *pcFramesDrawn) = 0; - - virtual HRESULT STDMETHODCALLTYPE get_AvgFrameRate( - int *piAvgFrameRate) = 0; - - virtual HRESULT STDMETHODCALLTYPE get_Jitter( - int *iJitter) = 0; - - virtual HRESULT STDMETHODCALLTYPE get_AvgSyncOffset( - int *piAvg) = 0; - - virtual HRESULT STDMETHODCALLTYPE get_DevSyncOffset( - int *piDev) = 0; - -}; -#else -typedef struct IQualPropVtbl { - BEGIN_INTERFACE - - /*** IUnknown methods ***/ - HRESULT (STDMETHODCALLTYPE *QueryInterface)( - IQualProp* This, - REFIID riid, - void **ppvObject); - - ULONG (STDMETHODCALLTYPE *AddRef)( - IQualProp* This); - - ULONG (STDMETHODCALLTYPE *Release)( - IQualProp* This); - - /*** IQualProp methods ***/ - HRESULT (STDMETHODCALLTYPE *get_FramesDroppedInRenderer)( - IQualProp* This, - int *pcFrames); - - HRESULT (STDMETHODCALLTYPE *get_FramesDrawn)( - IQualProp* This, - int *pcFramesDrawn); - - HRESULT (STDMETHODCALLTYPE *get_AvgFrameRate)( - IQualProp* This, - int *piAvgFrameRate); - - HRESULT (STDMETHODCALLTYPE *get_Jitter)( - IQualProp* This, - int *iJitter); - - HRESULT (STDMETHODCALLTYPE *get_AvgSyncOffset)( - IQualProp* This, - int *piAvg); - - HRESULT (STDMETHODCALLTYPE *get_DevSyncOffset)( - IQualProp* This, - int *piDev); - - END_INTERFACE -} IQualPropVtbl; -interface IQualProp { - CONST_VTBL IQualPropVtbl* lpVtbl; -}; - -#ifdef COBJMACROS -/*** IUnknown methods ***/ -#define IQualProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IQualProp_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IQualProp_Release(This) (This)->lpVtbl->Release(This) -/*** IQualProp methods ***/ -#define IQualProp_get_FramesDroppedInRenderer(This,pcFrames) (This)->lpVtbl->get_FramesDroppedInRenderer(This,pcFrames) -#define IQualProp_get_FramesDrawn(This,pcFramesDrawn) (This)->lpVtbl->get_FramesDrawn(This,pcFramesDrawn) -#define IQualProp_get_AvgFrameRate(This,piAvgFrameRate) (This)->lpVtbl->get_AvgFrameRate(This,piAvgFrameRate) -#define IQualProp_get_Jitter(This,iJitter) (This)->lpVtbl->get_Jitter(This,iJitter) -#define IQualProp_get_AvgSyncOffset(This,piAvg) (This)->lpVtbl->get_AvgSyncOffset(This,piAvg) -#define IQualProp_get_DevSyncOffset(This,piDev) (This)->lpVtbl->get_DevSyncOffset(This,piDev) -#endif - -#endif - -HRESULT STDMETHODCALLTYPE IQualProp_get_FramesDroppedInRenderer_Proxy( - IQualProp* This, - int *pcFrames); -void __RPC_STUB IQualProp_get_FramesDroppedInRenderer_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IQualProp_get_FramesDrawn_Proxy( - IQualProp* This, - int *pcFramesDrawn); -void __RPC_STUB IQualProp_get_FramesDrawn_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IQualProp_get_AvgFrameRate_Proxy( - IQualProp* This, - int *piAvgFrameRate); -void __RPC_STUB IQualProp_get_AvgFrameRate_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IQualProp_get_Jitter_Proxy( - IQualProp* This, - int *iJitter); -void __RPC_STUB IQualProp_get_Jitter_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IQualProp_get_AvgSyncOffset_Proxy( - IQualProp* This, - int *piAvg); -void __RPC_STUB IQualProp_get_AvgSyncOffset_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IQualProp_get_DevSyncOffset_Proxy( - IQualProp* This, - int *piDev); -void __RPC_STUB IQualProp_get_DevSyncOffset_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); - -#endif /* __IQualProp_INTERFACE_DEFINED__ */ - -/***************************************************************************** - * IFullScreenVideo interface - */ -#ifndef __IFullScreenVideo_INTERFACE_DEFINED__ -#define __IFullScreenVideo_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) -interface IFullScreenVideo : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE CountModes( - LONG *pModes) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetModeInfo( - LONG Mode, - LONG *pWidth, - LONG *pHeight, - LONG *pDepth) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCurrentMode( - LONG *pMode) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsModeAvailable( - LONG Mode) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsModeEnabled( - LONG Mode) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetEnabled( - LONG Mode, - LONG bEnabled) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetClipFactor( - LONG *pClipFactor) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetClipFactor( - LONG ClipFactor) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetMessageDrain( - HWND hwnd) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetMessageDrain( - HWND *hwnd) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetMonitor( - LONG Monitor) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetMonitor( - LONG *Monitor) = 0; - - virtual HRESULT STDMETHODCALLTYPE HideOnDeactivate( - LONG Hide) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsHideOnDeactivate( - ) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetCaption( - BSTR strCaption) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCaption( - BSTR *pstrCaption) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetDefault( - ) = 0; - -}; -#else -typedef struct IFullScreenVideoVtbl { - BEGIN_INTERFACE - - /*** IUnknown methods ***/ - HRESULT (STDMETHODCALLTYPE *QueryInterface)( - IFullScreenVideo* This, - REFIID riid, - void **ppvObject); - - ULONG (STDMETHODCALLTYPE *AddRef)( - IFullScreenVideo* This); - - ULONG (STDMETHODCALLTYPE *Release)( - IFullScreenVideo* This); - - /*** IFullScreenVideo methods ***/ - HRESULT (STDMETHODCALLTYPE *CountModes)( - IFullScreenVideo* This, - LONG *pModes); - - HRESULT (STDMETHODCALLTYPE *GetModeInfo)( - IFullScreenVideo* This, - LONG Mode, - LONG *pWidth, - LONG *pHeight, - LONG *pDepth); - - HRESULT (STDMETHODCALLTYPE *GetCurrentMode)( - IFullScreenVideo* This, - LONG *pMode); - - HRESULT (STDMETHODCALLTYPE *IsModeAvailable)( - IFullScreenVideo* This, - LONG Mode); - - HRESULT (STDMETHODCALLTYPE *IsModeEnabled)( - IFullScreenVideo* This, - LONG Mode); - - HRESULT (STDMETHODCALLTYPE *SetEnabled)( - IFullScreenVideo* This, - LONG Mode, - LONG bEnabled); - - HRESULT (STDMETHODCALLTYPE *GetClipFactor)( - IFullScreenVideo* This, - LONG *pClipFactor); - - HRESULT (STDMETHODCALLTYPE *SetClipFactor)( - IFullScreenVideo* This, - LONG ClipFactor); - - HRESULT (STDMETHODCALLTYPE *SetMessageDrain)( - IFullScreenVideo* This, - HWND hwnd); - - HRESULT (STDMETHODCALLTYPE *GetMessageDrain)( - IFullScreenVideo* This, - HWND *hwnd); - - HRESULT (STDMETHODCALLTYPE *SetMonitor)( - IFullScreenVideo* This, - LONG Monitor); - - HRESULT (STDMETHODCALLTYPE *GetMonitor)( - IFullScreenVideo* This, - LONG *Monitor); - - HRESULT (STDMETHODCALLTYPE *HideOnDeactivate)( - IFullScreenVideo* This, - LONG Hide); - - HRESULT (STDMETHODCALLTYPE *IsHideOnDeactivate)( - IFullScreenVideo* This); - - HRESULT (STDMETHODCALLTYPE *SetCaption)( - IFullScreenVideo* This, - BSTR strCaption); - - HRESULT (STDMETHODCALLTYPE *GetCaption)( - IFullScreenVideo* This, - BSTR *pstrCaption); - - HRESULT (STDMETHODCALLTYPE *SetDefault)( - IFullScreenVideo* This); - - END_INTERFACE -} IFullScreenVideoVtbl; -interface IFullScreenVideo { - CONST_VTBL IFullScreenVideoVtbl* lpVtbl; -}; - -#ifdef COBJMACROS -/*** IUnknown methods ***/ -#define IFullScreenVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFullScreenVideo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFullScreenVideo_Release(This) (This)->lpVtbl->Release(This) -/*** IFullScreenVideo methods ***/ -#define IFullScreenVideo_CountModes(This,pModes) (This)->lpVtbl->CountModes(This,pModes) -#define IFullScreenVideo_GetModeInfo(This,Mode,pWidth,pHeight,pDepth) (This)->lpVtbl->GetModeInfo(This,Mode,pWidth,pHeight,pDepth) -#define IFullScreenVideo_GetCurrentMode(This,pMode) (This)->lpVtbl->GetCurrentMode(This,pMode) -#define IFullScreenVideo_IsModeAvailable(This,Mode) (This)->lpVtbl->IsModeAvailable(This,Mode) -#define IFullScreenVideo_IsModeEnabled(This,Mode) (This)->lpVtbl->IsModeEnabled(This,Mode) -#define IFullScreenVideo_SetEnabled(This,Mode,bEnabled) (This)->lpVtbl->SetEnabled(This,Mode,bEnabled) -#define IFullScreenVideo_GetClipFactor(This,pClipFactor) (This)->lpVtbl->GetClipFactor(This,pClipFactor) -#define IFullScreenVideo_SetClipFactor(This,ClipFactor) (This)->lpVtbl->SetClipFactor(This,ClipFactor) -#define IFullScreenVideo_SetMessageDrain(This,hwnd) (This)->lpVtbl->SetMessageDrain(This,hwnd) -#define IFullScreenVideo_GetMessageDrain(This,hwnd) (This)->lpVtbl->GetMessageDrain(This,hwnd) -#define IFullScreenVideo_SetMonitor(This,Monitor) (This)->lpVtbl->SetMonitor(This,Monitor) -#define IFullScreenVideo_GetMonitor(This,Monitor) (This)->lpVtbl->GetMonitor(This,Monitor) -#define IFullScreenVideo_HideOnDeactivate(This,Hide) (This)->lpVtbl->HideOnDeactivate(This,Hide) -#define IFullScreenVideo_IsHideOnDeactivate(This) (This)->lpVtbl->IsHideOnDeactivate(This) -#define IFullScreenVideo_SetCaption(This,strCaption) (This)->lpVtbl->SetCaption(This,strCaption) -#define IFullScreenVideo_GetCaption(This,pstrCaption) (This)->lpVtbl->GetCaption(This,pstrCaption) -#define IFullScreenVideo_SetDefault(This) (This)->lpVtbl->SetDefault(This) -#endif - -#endif - -HRESULT STDMETHODCALLTYPE IFullScreenVideo_CountModes_Proxy( - IFullScreenVideo* This, - LONG *pModes); -void __RPC_STUB IFullScreenVideo_CountModes_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetModeInfo_Proxy( - IFullScreenVideo* This, - LONG Mode, - LONG *pWidth, - LONG *pHeight, - LONG *pDepth); -void __RPC_STUB IFullScreenVideo_GetModeInfo_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetCurrentMode_Proxy( - IFullScreenVideo* This, - LONG *pMode); -void __RPC_STUB IFullScreenVideo_GetCurrentMode_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsModeAvailable_Proxy( - IFullScreenVideo* This, - LONG Mode); -void __RPC_STUB IFullScreenVideo_IsModeAvailable_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsModeEnabled_Proxy( - IFullScreenVideo* This, - LONG Mode); -void __RPC_STUB IFullScreenVideo_IsModeEnabled_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetEnabled_Proxy( - IFullScreenVideo* This, - LONG Mode, - LONG bEnabled); -void __RPC_STUB IFullScreenVideo_SetEnabled_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetClipFactor_Proxy( - IFullScreenVideo* This, - LONG *pClipFactor); -void __RPC_STUB IFullScreenVideo_GetClipFactor_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetClipFactor_Proxy( - IFullScreenVideo* This, - LONG ClipFactor); -void __RPC_STUB IFullScreenVideo_SetClipFactor_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetMessageDrain_Proxy( - IFullScreenVideo* This, - HWND hwnd); -void __RPC_STUB IFullScreenVideo_SetMessageDrain_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetMessageDrain_Proxy( - IFullScreenVideo* This, - HWND *hwnd); -void __RPC_STUB IFullScreenVideo_GetMessageDrain_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetMonitor_Proxy( - IFullScreenVideo* This, - LONG Monitor); -void __RPC_STUB IFullScreenVideo_SetMonitor_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetMonitor_Proxy( - IFullScreenVideo* This, - LONG *Monitor); -void __RPC_STUB IFullScreenVideo_GetMonitor_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_HideOnDeactivate_Proxy( - IFullScreenVideo* This, - LONG Hide); -void __RPC_STUB IFullScreenVideo_HideOnDeactivate_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsHideOnDeactivate_Proxy( - IFullScreenVideo* This); -void __RPC_STUB IFullScreenVideo_IsHideOnDeactivate_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetCaption_Proxy( - IFullScreenVideo* This, - BSTR strCaption); -void __RPC_STUB IFullScreenVideo_SetCaption_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetCaption_Proxy( - IFullScreenVideo* This, - BSTR *pstrCaption); -void __RPC_STUB IFullScreenVideo_GetCaption_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetDefault_Proxy( - IFullScreenVideo* This); -void __RPC_STUB IFullScreenVideo_SetDefault_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); - -#endif /* __IFullScreenVideo_INTERFACE_DEFINED__ */ - -/***************************************************************************** - * IFullScreenVideoEx interface - */ -#ifndef __IFullScreenVideoEx_INTERFACE_DEFINED__ -#define __IFullScreenVideoEx_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) -interface IFullScreenVideoEx : public IFullScreenVideo -{ - virtual HRESULT STDMETHODCALLTYPE SetAcceleratorTable( - HWND hwnd, - HACCEL hAccel) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetAcceleratorTable( - HWND *phwnd, - HACCEL *phAccel) = 0; - - virtual HRESULT STDMETHODCALLTYPE KeepPixelAspectRatio( - LONG KeepAspect) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsKeepPixelAspectRatio( - LONG *pKeepAspect) = 0; - -}; -#else -typedef struct IFullScreenVideoExVtbl { - BEGIN_INTERFACE - - /*** IUnknown methods ***/ - HRESULT (STDMETHODCALLTYPE *QueryInterface)( - IFullScreenVideoEx* This, - REFIID riid, - void **ppvObject); - - ULONG (STDMETHODCALLTYPE *AddRef)( - IFullScreenVideoEx* This); - - ULONG (STDMETHODCALLTYPE *Release)( - IFullScreenVideoEx* This); - - /*** IFullScreenVideo methods ***/ - HRESULT (STDMETHODCALLTYPE *CountModes)( - IFullScreenVideoEx* This, - LONG *pModes); - - HRESULT (STDMETHODCALLTYPE *GetModeInfo)( - IFullScreenVideoEx* This, - LONG Mode, - LONG *pWidth, - LONG *pHeight, - LONG *pDepth); - - HRESULT (STDMETHODCALLTYPE *GetCurrentMode)( - IFullScreenVideoEx* This, - LONG *pMode); - - HRESULT (STDMETHODCALLTYPE *IsModeAvailable)( - IFullScreenVideoEx* This, - LONG Mode); - - HRESULT (STDMETHODCALLTYPE *IsModeEnabled)( - IFullScreenVideoEx* This, - LONG Mode); - - HRESULT (STDMETHODCALLTYPE *SetEnabled)( - IFullScreenVideoEx* This, - LONG Mode, - LONG bEnabled); - - HRESULT (STDMETHODCALLTYPE *GetClipFactor)( - IFullScreenVideoEx* This, - LONG *pClipFactor); - - HRESULT (STDMETHODCALLTYPE *SetClipFactor)( - IFullScreenVideoEx* This, - LONG ClipFactor); - - HRESULT (STDMETHODCALLTYPE *SetMessageDrain)( - IFullScreenVideoEx* This, - HWND hwnd); - - HRESULT (STDMETHODCALLTYPE *GetMessageDrain)( - IFullScreenVideoEx* This, - HWND *hwnd); - - HRESULT (STDMETHODCALLTYPE *SetMonitor)( - IFullScreenVideoEx* This, - LONG Monitor); - - HRESULT (STDMETHODCALLTYPE *GetMonitor)( - IFullScreenVideoEx* This, - LONG *Monitor); - - HRESULT (STDMETHODCALLTYPE *HideOnDeactivate)( - IFullScreenVideoEx* This, - LONG Hide); - - HRESULT (STDMETHODCALLTYPE *IsHideOnDeactivate)( - IFullScreenVideoEx* This); - - HRESULT (STDMETHODCALLTYPE *SetCaption)( - IFullScreenVideoEx* This, - BSTR strCaption); - - HRESULT (STDMETHODCALLTYPE *GetCaption)( - IFullScreenVideoEx* This, - BSTR *pstrCaption); - - HRESULT (STDMETHODCALLTYPE *SetDefault)( - IFullScreenVideoEx* This); - - /*** IFullScreenVideoEx methods ***/ - HRESULT (STDMETHODCALLTYPE *SetAcceleratorTable)( - IFullScreenVideoEx* This, - HWND hwnd, - HACCEL hAccel); - - HRESULT (STDMETHODCALLTYPE *GetAcceleratorTable)( - IFullScreenVideoEx* This, - HWND *phwnd, - HACCEL *phAccel); - - HRESULT (STDMETHODCALLTYPE *KeepPixelAspectRatio)( - IFullScreenVideoEx* This, - LONG KeepAspect); - - HRESULT (STDMETHODCALLTYPE *IsKeepPixelAspectRatio)( - IFullScreenVideoEx* This, - LONG *pKeepAspect); - - END_INTERFACE -} IFullScreenVideoExVtbl; -interface IFullScreenVideoEx { - CONST_VTBL IFullScreenVideoExVtbl* lpVtbl; -}; - -#ifdef COBJMACROS -/*** IUnknown methods ***/ -#define IFullScreenVideoEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFullScreenVideoEx_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFullScreenVideoEx_Release(This) (This)->lpVtbl->Release(This) -/*** IFullScreenVideo methods ***/ -#define IFullScreenVideoEx_CountModes(This,pModes) (This)->lpVtbl->CountModes(This,pModes) -#define IFullScreenVideoEx_GetModeInfo(This,Mode,pWidth,pHeight,pDepth) (This)->lpVtbl->GetModeInfo(This,Mode,pWidth,pHeight,pDepth) -#define IFullScreenVideoEx_GetCurrentMode(This,pMode) (This)->lpVtbl->GetCurrentMode(This,pMode) -#define IFullScreenVideoEx_IsModeAvailable(This,Mode) (This)->lpVtbl->IsModeAvailable(This,Mode) -#define IFullScreenVideoEx_IsModeEnabled(This,Mode) (This)->lpVtbl->IsModeEnabled(This,Mode) -#define IFullScreenVideoEx_SetEnabled(This,Mode,bEnabled) (This)->lpVtbl->SetEnabled(This,Mode,bEnabled) -#define IFullScreenVideoEx_GetClipFactor(This,pClipFactor) (This)->lpVtbl->GetClipFactor(This,pClipFactor) -#define IFullScreenVideoEx_SetClipFactor(This,ClipFactor) (This)->lpVtbl->SetClipFactor(This,ClipFactor) -#define IFullScreenVideoEx_SetMessageDrain(This,hwnd) (This)->lpVtbl->SetMessageDrain(This,hwnd) -#define IFullScreenVideoEx_GetMessageDrain(This,hwnd) (This)->lpVtbl->GetMessageDrain(This,hwnd) -#define IFullScreenVideoEx_SetMonitor(This,Monitor) (This)->lpVtbl->SetMonitor(This,Monitor) -#define IFullScreenVideoEx_GetMonitor(This,Monitor) (This)->lpVtbl->GetMonitor(This,Monitor) -#define IFullScreenVideoEx_HideOnDeactivate(This,Hide) (This)->lpVtbl->HideOnDeactivate(This,Hide) -#define IFullScreenVideoEx_IsHideOnDeactivate(This) (This)->lpVtbl->IsHideOnDeactivate(This) -#define IFullScreenVideoEx_SetCaption(This,strCaption) (This)->lpVtbl->SetCaption(This,strCaption) -#define IFullScreenVideoEx_GetCaption(This,pstrCaption) (This)->lpVtbl->GetCaption(This,pstrCaption) -#define IFullScreenVideoEx_SetDefault(This) (This)->lpVtbl->SetDefault(This) -/*** IFullScreenVideoEx methods ***/ -#define IFullScreenVideoEx_SetAcceleratorTable(This,hwnd,hAccel) (This)->lpVtbl->SetAcceleratorTable(This,hwnd,hAccel) -#define IFullScreenVideoEx_GetAcceleratorTable(This,phwnd,phAccel) (This)->lpVtbl->GetAcceleratorTable(This,phwnd,phAccel) -#define IFullScreenVideoEx_KeepPixelAspectRatio(This,KeepAspect) (This)->lpVtbl->KeepPixelAspectRatio(This,KeepAspect) -#define IFullScreenVideoEx_IsKeepPixelAspectRatio(This,pKeepAspect) (This)->lpVtbl->IsKeepPixelAspectRatio(This,pKeepAspect) -#endif - -#endif - -HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_SetAcceleratorTable_Proxy( - IFullScreenVideoEx* This, - HWND hwnd, - HACCEL hAccel); -void __RPC_STUB IFullScreenVideoEx_SetAcceleratorTable_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_GetAcceleratorTable_Proxy( - IFullScreenVideoEx* This, - HWND *phwnd, - HACCEL *phAccel); -void __RPC_STUB IFullScreenVideoEx_GetAcceleratorTable_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_KeepPixelAspectRatio_Proxy( - IFullScreenVideoEx* This, - LONG KeepAspect); -void __RPC_STUB IFullScreenVideoEx_KeepPixelAspectRatio_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_IsKeepPixelAspectRatio_Proxy( - IFullScreenVideoEx* This, - LONG *pKeepAspect); -void __RPC_STUB IFullScreenVideoEx_IsKeepPixelAspectRatio_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); - -#endif /* __IFullScreenVideoEx_INTERFACE_DEFINED__ */ - -/***************************************************************************** - * IBaseVideoMixer interface - */ -#ifndef __IBaseVideoMixer_INTERFACE_DEFINED__ -#define __IBaseVideoMixer_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) -interface IBaseVideoMixer : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE SetLeadPin( - int iPin) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetLeadPin( - int *piPin) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetInputPinCount( - int *piPinCount) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsUsingClock( - int *pbValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetUsingClock( - int bValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetClockPeriod( - int *pbValue) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetClockPeriod( - int bValue) = 0; - -}; -#else -typedef struct IBaseVideoMixerVtbl { - BEGIN_INTERFACE - - /*** IUnknown methods ***/ - HRESULT (STDMETHODCALLTYPE *QueryInterface)( - IBaseVideoMixer* This, - REFIID riid, - void **ppvObject); - - ULONG (STDMETHODCALLTYPE *AddRef)( - IBaseVideoMixer* This); - - ULONG (STDMETHODCALLTYPE *Release)( - IBaseVideoMixer* This); - - /*** IBaseVideoMixer methods ***/ - HRESULT (STDMETHODCALLTYPE *SetLeadPin)( - IBaseVideoMixer* This, - int iPin); - - HRESULT (STDMETHODCALLTYPE *GetLeadPin)( - IBaseVideoMixer* This, - int *piPin); - - HRESULT (STDMETHODCALLTYPE *GetInputPinCount)( - IBaseVideoMixer* This, - int *piPinCount); - - HRESULT (STDMETHODCALLTYPE *IsUsingClock)( - IBaseVideoMixer* This, - int *pbValue); - - HRESULT (STDMETHODCALLTYPE *SetUsingClock)( - IBaseVideoMixer* This, - int bValue); - - HRESULT (STDMETHODCALLTYPE *GetClockPeriod)( - IBaseVideoMixer* This, - int *pbValue); - - HRESULT (STDMETHODCALLTYPE *SetClockPeriod)( - IBaseVideoMixer* This, - int bValue); - - END_INTERFACE -} IBaseVideoMixerVtbl; -interface IBaseVideoMixer { - CONST_VTBL IBaseVideoMixerVtbl* lpVtbl; -}; - -#ifdef COBJMACROS -/*** IUnknown methods ***/ -#define IBaseVideoMixer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBaseVideoMixer_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBaseVideoMixer_Release(This) (This)->lpVtbl->Release(This) -/*** IBaseVideoMixer methods ***/ -#define IBaseVideoMixer_SetLeadPin(This,iPin) (This)->lpVtbl->SetLeadPin(This,iPin) -#define IBaseVideoMixer_GetLeadPin(This,piPin) (This)->lpVtbl->GetLeadPin(This,piPin) -#define IBaseVideoMixer_GetInputPinCount(This,piPinCount) (This)->lpVtbl->GetInputPinCount(This,piPinCount) -#define IBaseVideoMixer_IsUsingClock(This,pbValue) (This)->lpVtbl->IsUsingClock(This,pbValue) -#define IBaseVideoMixer_SetUsingClock(This,bValue) (This)->lpVtbl->SetUsingClock(This,bValue) -#define IBaseVideoMixer_GetClockPeriod(This,pbValue) (This)->lpVtbl->GetClockPeriod(This,pbValue) -#define IBaseVideoMixer_SetClockPeriod(This,bValue) (This)->lpVtbl->SetClockPeriod(This,bValue) -#endif - -#endif - -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetLeadPin_Proxy( - IBaseVideoMixer* This, - int iPin); -void __RPC_STUB IBaseVideoMixer_SetLeadPin_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetLeadPin_Proxy( - IBaseVideoMixer* This, - int *piPin); -void __RPC_STUB IBaseVideoMixer_GetLeadPin_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetInputPinCount_Proxy( - IBaseVideoMixer* This, - int *piPinCount); -void __RPC_STUB IBaseVideoMixer_GetInputPinCount_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_IsUsingClock_Proxy( - IBaseVideoMixer* This, - int *pbValue); -void __RPC_STUB IBaseVideoMixer_IsUsingClock_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetUsingClock_Proxy( - IBaseVideoMixer* This, - int bValue); -void __RPC_STUB IBaseVideoMixer_SetUsingClock_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetClockPeriod_Proxy( - IBaseVideoMixer* This, - int *pbValue); -void __RPC_STUB IBaseVideoMixer_GetClockPeriod_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); -HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetClockPeriod_Proxy( - IBaseVideoMixer* This, - int bValue); -void __RPC_STUB IBaseVideoMixer_SetClockPeriod_Stub( - IRpcStubBuffer* This, - IRpcChannelBuffer* pRpcChannelBuffer, - PRPC_MESSAGE pRpcMessage, - DWORD* pdwStubPhase); - -#endif /* __IBaseVideoMixer_INTERFACE_DEFINED__ */ - -#define iPALETTE_COLORS 256 -#define iEGA_COLORS 16 -#define iMASK_COLORS 3 -#define iTRUECOLOR 16 -#define iRED 0 -#define iGREEN 1 -#define iBLUE 2 -#define iPALETTE 8 -#define iMAXBITS 8 -typedef struct tag_TRUECOLORINFO { - DWORD dwBitMasks[3]; - RGBQUAD bmiColors[256]; -} TRUECOLORINFO; -typedef struct tagVIDEOINFOHEADER { - RECT rcSource; - RECT rcTarget; - DWORD dwBitRate; - DWORD dwBitErrorRate; - REFERENCE_TIME AvgTimePerFrame; - BITMAPINFOHEADER bmiHeader; -} VIDEOINFOHEADER; -typedef struct tagVIDEOINFO { - RECT rcSource; - RECT rcTarget; - DWORD dwBitRate; - DWORD dwBitErrorRate; - REFERENCE_TIME AvgTimePerFrame; - BITMAPINFOHEADER bmiHeader; - union { - RGBQUAD bmiColors[256]; - DWORD dwBitMasks[3]; - TRUECOLORINFO TrueColorInfo; - } DUMMYUNIONNAME; -} VIDEOINFO; -typedef struct tagMPEG1VIDEOINFO { - VIDEOINFOHEADER hdr; - DWORD dwStartTimeCode; - DWORD cbSequenceHeader; - BYTE bSequenceHeader[1]; -} MPEG1VIDEOINFO; -#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140 -#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader) -typedef struct tagAnalogVideoInfo { - RECT rcSource; - RECT rcTarget; - DWORD dwActiveWidth; - DWORD dwActiveHeight; - REFERENCE_TIME AvgTimePerFrame; -} ANALOGVIDEOINFO; -typedef enum __WIDL_amvideo_generated_name_00000001 { - AM_PROPERTY_FRAMESTEP_STEP = 0x1, - AM_PROPERTY_FRAMESTEP_CANCEL = 0x2, - AM_PROPERTY_FRAMESTEP_CANSTEP = 0x3, - AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x4 -} AM_PROPERTY_FRAMESTEP; -typedef struct _AM_FRAMESTEP_STEP { - DWORD dwFramesToStep; -} AM_FRAMESTEP_STEP; -/* Begin additional prototypes for all interfaces */ - -ULONG __RPC_USER HWND_UserSize (ULONG *, ULONG, HWND *); -unsigned char * __RPC_USER HWND_UserMarshal (ULONG *, unsigned char *, HWND *); -unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *); -void __RPC_USER HWND_UserFree (ULONG *, HWND *); -ULONG __RPC_USER BSTR_UserSize (ULONG *, ULONG, BSTR *); -unsigned char * __RPC_USER BSTR_UserMarshal (ULONG *, unsigned char *, BSTR *); -unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *); -void __RPC_USER BSTR_UserFree (ULONG *, BSTR *); - -/* End additional prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif /* __WIDL_AMVIDEO_H */ diff --git a/3rdparty/include/dshow/audevcod.h b/3rdparty/include/dshow/audevcod.h deleted file mode 100644 index cecbb0e..0000000 --- a/3rdparty/include/dshow/audevcod.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _AUDEVCOD_H -#define _AUDEVCOD_H -#if __GNUC__ >=3 -#pragma GCC system_header -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum _tagSND_DEVICE_ERROR { - SNDDEV_ERROR_Open = 1, - SNDDEV_ERROR_Close = 2, - SNDDEV_ERROR_GetCaps = 3, - SNDDEV_ERROR_PrepareHeader = 4, - SNDDEV_ERROR_UnprepareHeader = 5, - SNDDEV_ERROR_Reset = 6, - SNDDEV_ERROR_Restart = 7, - SNDDEV_ERROR_GetPosition = 8, - SNDDEV_ERROR_Write = 9, - SNDDEV_ERROR_Pause = 10, - SNDDEV_ERROR_Stop = 11, - SNDDEV_ERROR_Start = 12, - SNDDEV_ERROR_AddBuffer = 13, - SNDDEV_ERROR_Query = 14 -} SNDDEV_ERR; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/bdatypes.h b/3rdparty/include/dshow/bdatypes.h deleted file mode 100644 index d57f828..0000000 --- a/3rdparty/include/dshow/bdatypes.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _BDATYPES_H -#define _BDATYPES_H -#if __GNUC__ >= 3 -#pragma GCC system_header -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*--- DirectShow Reference - DirectShow Enumerated Types */ -typedef enum { - MEDIA_TRANSPORT_PACKET, - MEDIA_ELEMENTARY_STREAM, - MEDIA_MPEG2_PSI, - MEDIA_TRANSPORT_PAYLOAD -} MEDIA_SAMPLE_CONTENT; -/*--- DirectShow Reference - DirectShow Structures */ -typedef struct { - DWORD dwOffset; - DWORD dwPacketLength; - DWORD dwStride; -} MPEG2_TRANSPORT_STRIDE; -typedef struct { - ULONG ulPID; - MEDIA_SAMPLE_CONTENT MediaSampleContent ; -} PID_MAP; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/control.h b/3rdparty/include/dshow/control.h deleted file mode 100644 index b012239..0000000 --- a/3rdparty/include/dshow/control.h +++ /dev/null @@ -1,1467 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 475 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif - -#ifndef __control_h__ -#define __control_h__ - -#ifndef __IAMCollection_FWD_DEFINED__ -#define __IAMCollection_FWD_DEFINED__ -typedef struct IAMCollection IAMCollection; -#endif - -#ifndef __IMediaControl_FWD_DEFINED__ -#define __IMediaControl_FWD_DEFINED__ -typedef struct IMediaControl IMediaControl; -#endif - -#ifndef __IMediaEvent_FWD_DEFINED__ -#define __IMediaEvent_FWD_DEFINED__ -typedef struct IMediaEvent IMediaEvent; -#endif - -#ifndef __IMediaEventEx_FWD_DEFINED__ -#define __IMediaEventEx_FWD_DEFINED__ -typedef struct IMediaEventEx IMediaEventEx; -#endif - -#ifndef __IMediaPosition_FWD_DEFINED__ -#define __IMediaPosition_FWD_DEFINED__ -typedef struct IMediaPosition IMediaPosition; -#endif - -#ifndef __IBasicAudio_FWD_DEFINED__ -#define __IBasicAudio_FWD_DEFINED__ -typedef struct IBasicAudio IBasicAudio; -#endif - -#ifndef __IVideoWindow_FWD_DEFINED__ -#define __IVideoWindow_FWD_DEFINED__ -typedef struct IVideoWindow IVideoWindow; -#endif - -#ifndef __IBasicVideo_FWD_DEFINED__ -#define __IBasicVideo_FWD_DEFINED__ -typedef struct IBasicVideo IBasicVideo; -#endif - -#ifndef __IBasicVideo2_FWD_DEFINED__ -#define __IBasicVideo2_FWD_DEFINED__ -typedef struct IBasicVideo2 IBasicVideo2; -#endif - -#ifndef __IDeferredCommand_FWD_DEFINED__ -#define __IDeferredCommand_FWD_DEFINED__ -typedef struct IDeferredCommand IDeferredCommand; -#endif - -#ifndef __IQueueCommand_FWD_DEFINED__ -#define __IQueueCommand_FWD_DEFINED__ -typedef struct IQueueCommand IQueueCommand; -#endif - -#ifndef __FilgraphManager_FWD_DEFINED__ -#define __FilgraphManager_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class FilgraphManager FilgraphManager; -#else -typedef struct FilgraphManager FilgraphManager; -#endif -#endif - -#ifndef __IFilterInfo_FWD_DEFINED__ -#define __IFilterInfo_FWD_DEFINED__ -typedef struct IFilterInfo IFilterInfo; -#endif - -#ifndef __IRegFilterInfo_FWD_DEFINED__ -#define __IRegFilterInfo_FWD_DEFINED__ -typedef struct IRegFilterInfo IRegFilterInfo; -#endif - -#ifndef __IMediaTypeInfo_FWD_DEFINED__ -#define __IMediaTypeInfo_FWD_DEFINED__ -typedef struct IMediaTypeInfo IMediaTypeInfo; -#endif - -#ifndef __IPinInfo_FWD_DEFINED__ -#define __IPinInfo_FWD_DEFINED__ -typedef struct IPinInfo IPinInfo; -#endif - -#ifndef __IAMStats_FWD_DEFINED__ -#define __IAMStats_FWD_DEFINED__ -typedef struct IAMStats IAMStats; -#endif - -#ifdef __cplusplus -extern "C"{ -#endif - -#ifndef __MIDL_user_allocate_free_DEFINED__ -#define __MIDL_user_allocate_free_DEFINED__ - void *__RPC_API MIDL_user_allocate(size_t); - void __RPC_API MIDL_user_free(void *); -#endif - -#ifndef __QuartzTypeLib_LIBRARY_DEFINED__ -#define __QuartzTypeLib_LIBRARY_DEFINED__ - typedef double REFTIME; - typedef LONG_PTR OAEVENT; - typedef LONG_PTR OAHWND; - typedef long OAFilterState; - - DEFINE_GUID(LIBID_QuartzTypeLib,0x56a868b0,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#ifndef __IAMCollection_INTERFACE_DEFINED__ -#define __IAMCollection_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IAMCollection,0x56a868b9,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMCollection : public IDispatch { - public: - virtual HRESULT WINAPI get_Count(LONG *plCount) = 0; - virtual HRESULT WINAPI Item(long lItem,IUnknown **ppUnk) = 0; - virtual HRESULT WINAPI get__NewEnum(IUnknown **ppUnk) = 0; - }; -#else - typedef struct IAMCollectionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMCollection *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMCollection *This); - ULONG (WINAPI *Release)(IAMCollection *This); - HRESULT (WINAPI *GetTypeInfoCount)(IAMCollection *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IAMCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IAMCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IAMCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_Count)(IAMCollection *This,LONG *plCount); - HRESULT (WINAPI *Item)(IAMCollection *This,long lItem,IUnknown **ppUnk); - HRESULT (WINAPI *get__NewEnum)(IAMCollection *This,IUnknown **ppUnk); - END_INTERFACE - } IAMCollectionVtbl; - struct IAMCollection { - CONST_VTBL struct IAMCollectionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMCollection_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMCollection_Release(This) (This)->lpVtbl->Release(This) -#define IAMCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IAMCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IAMCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IAMCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IAMCollection_get_Count(This,plCount) (This)->lpVtbl->get_Count(This,plCount) -#define IAMCollection_Item(This,lItem,ppUnk) (This)->lpVtbl->Item(This,lItem,ppUnk) -#define IAMCollection_get__NewEnum(This,ppUnk) (This)->lpVtbl->get__NewEnum(This,ppUnk) -#endif -#endif - HRESULT WINAPI IAMCollection_get_Count_Proxy(IAMCollection *This,LONG *plCount); - void __RPC_STUB IAMCollection_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCollection_Item_Proxy(IAMCollection *This,long lItem,IUnknown **ppUnk); - void __RPC_STUB IAMCollection_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCollection_get__NewEnum_Proxy(IAMCollection *This,IUnknown **ppUnk); - void __RPC_STUB IAMCollection_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMediaControl_INTERFACE_DEFINED__ -#define __IMediaControl_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IMediaControl,0x56a868b1,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaControl : public IDispatch { - public: - virtual HRESULT WINAPI Run(void) = 0; - virtual HRESULT WINAPI Pause(void) = 0; - virtual HRESULT WINAPI Stop(void) = 0; - virtual HRESULT WINAPI GetState(LONG msTimeout,OAFilterState *pfs) = 0; - virtual HRESULT WINAPI RenderFile(BSTR strFilename) = 0; - virtual HRESULT WINAPI AddSourceFilter(BSTR strFilename,IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_FilterCollection(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_RegFilterCollection(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI StopWhenReady(void) = 0; - }; -#else - typedef struct IMediaControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaControl *This); - ULONG (WINAPI *Release)(IMediaControl *This); - HRESULT (WINAPI *GetTypeInfoCount)(IMediaControl *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IMediaControl *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IMediaControl *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IMediaControl *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *Run)(IMediaControl *This); - HRESULT (WINAPI *Pause)(IMediaControl *This); - HRESULT (WINAPI *Stop)(IMediaControl *This); - HRESULT (WINAPI *GetState)(IMediaControl *This,LONG msTimeout,OAFilterState *pfs); - HRESULT (WINAPI *RenderFile)(IMediaControl *This,BSTR strFilename); - HRESULT (WINAPI *AddSourceFilter)(IMediaControl *This,BSTR strFilename,IDispatch **ppUnk); - HRESULT (WINAPI *get_FilterCollection)(IMediaControl *This,IDispatch **ppUnk); - HRESULT (WINAPI *get_RegFilterCollection)(IMediaControl *This,IDispatch **ppUnk); - HRESULT (WINAPI *StopWhenReady)(IMediaControl *This); - END_INTERFACE - } IMediaControlVtbl; - struct IMediaControl { - CONST_VTBL struct IMediaControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaControl_Release(This) (This)->lpVtbl->Release(This) -#define IMediaControl_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IMediaControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IMediaControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IMediaControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IMediaControl_Run(This) (This)->lpVtbl->Run(This) -#define IMediaControl_Pause(This) (This)->lpVtbl->Pause(This) -#define IMediaControl_Stop(This) (This)->lpVtbl->Stop(This) -#define IMediaControl_GetState(This,msTimeout,pfs) (This)->lpVtbl->GetState(This,msTimeout,pfs) -#define IMediaControl_RenderFile(This,strFilename) (This)->lpVtbl->RenderFile(This,strFilename) -#define IMediaControl_AddSourceFilter(This,strFilename,ppUnk) (This)->lpVtbl->AddSourceFilter(This,strFilename,ppUnk) -#define IMediaControl_get_FilterCollection(This,ppUnk) (This)->lpVtbl->get_FilterCollection(This,ppUnk) -#define IMediaControl_get_RegFilterCollection(This,ppUnk) (This)->lpVtbl->get_RegFilterCollection(This,ppUnk) -#define IMediaControl_StopWhenReady(This) (This)->lpVtbl->StopWhenReady(This) -#endif -#endif - HRESULT WINAPI IMediaControl_Run_Proxy(IMediaControl *This); - void __RPC_STUB IMediaControl_Run_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_Pause_Proxy(IMediaControl *This); - void __RPC_STUB IMediaControl_Pause_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_Stop_Proxy(IMediaControl *This); - void __RPC_STUB IMediaControl_Stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_GetState_Proxy(IMediaControl *This,LONG msTimeout,OAFilterState *pfs); - void __RPC_STUB IMediaControl_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_RenderFile_Proxy(IMediaControl *This,BSTR strFilename); - void __RPC_STUB IMediaControl_RenderFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_AddSourceFilter_Proxy(IMediaControl *This,BSTR strFilename,IDispatch **ppUnk); - void __RPC_STUB IMediaControl_AddSourceFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_get_FilterCollection_Proxy(IMediaControl *This,IDispatch **ppUnk); - void __RPC_STUB IMediaControl_get_FilterCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_get_RegFilterCollection_Proxy(IMediaControl *This,IDispatch **ppUnk); - void __RPC_STUB IMediaControl_get_RegFilterCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaControl_StopWhenReady_Proxy(IMediaControl *This); - void __RPC_STUB IMediaControl_StopWhenReady_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMediaEvent_INTERFACE_DEFINED__ -#define __IMediaEvent_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IMediaEvent,0x56a868b6,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaEvent : public IDispatch { - public: - virtual HRESULT WINAPI GetEventHandle(OAEVENT *hEvent) = 0; - virtual HRESULT WINAPI GetEvent(long *lEventCode,LONG_PTR *lParam1,LONG_PTR *lParam2,long msTimeout) = 0; - virtual HRESULT WINAPI WaitForCompletion(long msTimeout,long *pEvCode) = 0; - virtual HRESULT WINAPI CancelDefaultHandling(long lEvCode) = 0; - virtual HRESULT WINAPI RestoreDefaultHandling(long lEvCode) = 0; - virtual HRESULT WINAPI FreeEventParams(long lEvCode,LONG_PTR lParam1,LONG_PTR lParam2) = 0; - }; -#else - typedef struct IMediaEventVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaEvent *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaEvent *This); - ULONG (WINAPI *Release)(IMediaEvent *This); - HRESULT (WINAPI *GetTypeInfoCount)(IMediaEvent *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IMediaEvent *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IMediaEvent *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IMediaEvent *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *GetEventHandle)(IMediaEvent *This,OAEVENT *hEvent); - HRESULT (WINAPI *GetEvent)(IMediaEvent *This,long *lEventCode,LONG_PTR *lParam1,LONG_PTR *lParam2,long msTimeout); - HRESULT (WINAPI *WaitForCompletion)(IMediaEvent *This,long msTimeout,long *pEvCode); - HRESULT (WINAPI *CancelDefaultHandling)(IMediaEvent *This,long lEvCode); - HRESULT (WINAPI *RestoreDefaultHandling)(IMediaEvent *This,long lEvCode); - HRESULT (WINAPI *FreeEventParams)(IMediaEvent *This,long lEvCode,LONG_PTR lParam1,LONG_PTR lParam2); - END_INTERFACE - } IMediaEventVtbl; - struct IMediaEvent { - CONST_VTBL struct IMediaEventVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaEvent_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaEvent_Release(This) (This)->lpVtbl->Release(This) -#define IMediaEvent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IMediaEvent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IMediaEvent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IMediaEvent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IMediaEvent_GetEventHandle(This,hEvent) (This)->lpVtbl->GetEventHandle(This,hEvent) -#define IMediaEvent_GetEvent(This,lEventCode,lParam1,lParam2,msTimeout) (This)->lpVtbl->GetEvent(This,lEventCode,lParam1,lParam2,msTimeout) -#define IMediaEvent_WaitForCompletion(This,msTimeout,pEvCode) (This)->lpVtbl->WaitForCompletion(This,msTimeout,pEvCode) -#define IMediaEvent_CancelDefaultHandling(This,lEvCode) (This)->lpVtbl->CancelDefaultHandling(This,lEvCode) -#define IMediaEvent_RestoreDefaultHandling(This,lEvCode) (This)->lpVtbl->RestoreDefaultHandling(This,lEvCode) -#define IMediaEvent_FreeEventParams(This,lEvCode,lParam1,lParam2) (This)->lpVtbl->FreeEventParams(This,lEvCode,lParam1,lParam2) -#endif -#endif - HRESULT WINAPI IMediaEvent_GetEventHandle_Proxy(IMediaEvent *This,OAEVENT *hEvent); - void __RPC_STUB IMediaEvent_GetEventHandle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEvent_GetEvent_Proxy(IMediaEvent *This,long *lEventCode,LONG_PTR *lParam1,LONG_PTR *lParam2,long msTimeout); - void __RPC_STUB IMediaEvent_GetEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEvent_WaitForCompletion_Proxy(IMediaEvent *This,long msTimeout,long *pEvCode); - void __RPC_STUB IMediaEvent_WaitForCompletion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEvent_CancelDefaultHandling_Proxy(IMediaEvent *This,long lEvCode); - void __RPC_STUB IMediaEvent_CancelDefaultHandling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEvent_RestoreDefaultHandling_Proxy(IMediaEvent *This,long lEvCode); - void __RPC_STUB IMediaEvent_RestoreDefaultHandling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEvent_FreeEventParams_Proxy(IMediaEvent *This,long lEvCode,LONG_PTR lParam1,LONG_PTR lParam2); - void __RPC_STUB IMediaEvent_FreeEventParams_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMediaEventEx_INTERFACE_DEFINED__ -#define __IMediaEventEx_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IMediaEventEx,0x56a868c0,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaEventEx : public IMediaEvent { - public: - virtual HRESULT WINAPI SetNotifyWindow(OAHWND hwnd,long lMsg,LONG_PTR lInstanceData) = 0; - virtual HRESULT WINAPI SetNotifyFlags(long lNoNotifyFlags) = 0; - virtual HRESULT WINAPI GetNotifyFlags(long *lplNoNotifyFlags) = 0; - }; -#else - typedef struct IMediaEventExVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaEventEx *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaEventEx *This); - ULONG (WINAPI *Release)(IMediaEventEx *This); - HRESULT (WINAPI *GetTypeInfoCount)(IMediaEventEx *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IMediaEventEx *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IMediaEventEx *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IMediaEventEx *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *GetEventHandle)(IMediaEventEx *This,OAEVENT *hEvent); - HRESULT (WINAPI *GetEvent)(IMediaEventEx *This,long *lEventCode,LONG_PTR *lParam1,LONG_PTR *lParam2,long msTimeout); - HRESULT (WINAPI *WaitForCompletion)(IMediaEventEx *This,long msTimeout,long *pEvCode); - HRESULT (WINAPI *CancelDefaultHandling)(IMediaEventEx *This,long lEvCode); - HRESULT (WINAPI *RestoreDefaultHandling)(IMediaEventEx *This,long lEvCode); - HRESULT (WINAPI *FreeEventParams)(IMediaEventEx *This,long lEvCode,LONG_PTR lParam1,LONG_PTR lParam2); - HRESULT (WINAPI *SetNotifyWindow)(IMediaEventEx *This,OAHWND hwnd,long lMsg,LONG_PTR lInstanceData); - HRESULT (WINAPI *SetNotifyFlags)(IMediaEventEx *This,long lNoNotifyFlags); - HRESULT (WINAPI *GetNotifyFlags)(IMediaEventEx *This,long *lplNoNotifyFlags); - END_INTERFACE - } IMediaEventExVtbl; - struct IMediaEventEx { - CONST_VTBL struct IMediaEventExVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaEventEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaEventEx_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaEventEx_Release(This) (This)->lpVtbl->Release(This) -#define IMediaEventEx_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IMediaEventEx_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IMediaEventEx_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IMediaEventEx_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IMediaEventEx_GetEventHandle(This,hEvent) (This)->lpVtbl->GetEventHandle(This,hEvent) -#define IMediaEventEx_GetEvent(This,lEventCode,lParam1,lParam2,msTimeout) (This)->lpVtbl->GetEvent(This,lEventCode,lParam1,lParam2,msTimeout) -#define IMediaEventEx_WaitForCompletion(This,msTimeout,pEvCode) (This)->lpVtbl->WaitForCompletion(This,msTimeout,pEvCode) -#define IMediaEventEx_CancelDefaultHandling(This,lEvCode) (This)->lpVtbl->CancelDefaultHandling(This,lEvCode) -#define IMediaEventEx_RestoreDefaultHandling(This,lEvCode) (This)->lpVtbl->RestoreDefaultHandling(This,lEvCode) -#define IMediaEventEx_FreeEventParams(This,lEvCode,lParam1,lParam2) (This)->lpVtbl->FreeEventParams(This,lEvCode,lParam1,lParam2) -#define IMediaEventEx_SetNotifyWindow(This,hwnd,lMsg,lInstanceData) (This)->lpVtbl->SetNotifyWindow(This,hwnd,lMsg,lInstanceData) -#define IMediaEventEx_SetNotifyFlags(This,lNoNotifyFlags) (This)->lpVtbl->SetNotifyFlags(This,lNoNotifyFlags) -#define IMediaEventEx_GetNotifyFlags(This,lplNoNotifyFlags) (This)->lpVtbl->GetNotifyFlags(This,lplNoNotifyFlags) -#endif -#endif - HRESULT WINAPI IMediaEventEx_SetNotifyWindow_Proxy(IMediaEventEx *This,OAHWND hwnd,long lMsg,LONG_PTR lInstanceData); - void __RPC_STUB IMediaEventEx_SetNotifyWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEventEx_SetNotifyFlags_Proxy(IMediaEventEx *This,long lNoNotifyFlags); - void __RPC_STUB IMediaEventEx_SetNotifyFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaEventEx_GetNotifyFlags_Proxy(IMediaEventEx *This,long *lplNoNotifyFlags); - void __RPC_STUB IMediaEventEx_GetNotifyFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMediaPosition_INTERFACE_DEFINED__ -#define __IMediaPosition_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IMediaPosition,0x56a868b2,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaPosition : public IDispatch { - public: - virtual HRESULT WINAPI get_Duration(REFTIME *plength) = 0; - virtual HRESULT WINAPI put_CurrentPosition(REFTIME llTime) = 0; - virtual HRESULT WINAPI get_CurrentPosition(REFTIME *pllTime) = 0; - virtual HRESULT WINAPI get_StopTime(REFTIME *pllTime) = 0; - virtual HRESULT WINAPI put_StopTime(REFTIME llTime) = 0; - virtual HRESULT WINAPI get_PrerollTime(REFTIME *pllTime) = 0; - virtual HRESULT WINAPI put_PrerollTime(REFTIME llTime) = 0; - virtual HRESULT WINAPI put_Rate(double dRate) = 0; - virtual HRESULT WINAPI get_Rate(double *pdRate) = 0; - virtual HRESULT WINAPI CanSeekForward(LONG *pCanSeekForward) = 0; - virtual HRESULT WINAPI CanSeekBackward(LONG *pCanSeekBackward) = 0; - }; -#else - typedef struct IMediaPositionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaPosition *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaPosition *This); - ULONG (WINAPI *Release)(IMediaPosition *This); - HRESULT (WINAPI *GetTypeInfoCount)(IMediaPosition *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IMediaPosition *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IMediaPosition *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IMediaPosition *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_Duration)(IMediaPosition *This,REFTIME *plength); - HRESULT (WINAPI *put_CurrentPosition)(IMediaPosition *This,REFTIME llTime); - HRESULT (WINAPI *get_CurrentPosition)(IMediaPosition *This,REFTIME *pllTime); - HRESULT (WINAPI *get_StopTime)(IMediaPosition *This,REFTIME *pllTime); - HRESULT (WINAPI *put_StopTime)(IMediaPosition *This,REFTIME llTime); - HRESULT (WINAPI *get_PrerollTime)(IMediaPosition *This,REFTIME *pllTime); - HRESULT (WINAPI *put_PrerollTime)(IMediaPosition *This,REFTIME llTime); - HRESULT (WINAPI *put_Rate)(IMediaPosition *This,double dRate); - HRESULT (WINAPI *get_Rate)(IMediaPosition *This,double *pdRate); - HRESULT (WINAPI *CanSeekForward)(IMediaPosition *This,LONG *pCanSeekForward); - HRESULT (WINAPI *CanSeekBackward)(IMediaPosition *This,LONG *pCanSeekBackward); - END_INTERFACE - } IMediaPositionVtbl; - struct IMediaPosition { - CONST_VTBL struct IMediaPositionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaPosition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaPosition_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaPosition_Release(This) (This)->lpVtbl->Release(This) -#define IMediaPosition_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IMediaPosition_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IMediaPosition_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IMediaPosition_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IMediaPosition_get_Duration(This,plength) (This)->lpVtbl->get_Duration(This,plength) -#define IMediaPosition_put_CurrentPosition(This,llTime) (This)->lpVtbl->put_CurrentPosition(This,llTime) -#define IMediaPosition_get_CurrentPosition(This,pllTime) (This)->lpVtbl->get_CurrentPosition(This,pllTime) -#define IMediaPosition_get_StopTime(This,pllTime) (This)->lpVtbl->get_StopTime(This,pllTime) -#define IMediaPosition_put_StopTime(This,llTime) (This)->lpVtbl->put_StopTime(This,llTime) -#define IMediaPosition_get_PrerollTime(This,pllTime) (This)->lpVtbl->get_PrerollTime(This,pllTime) -#define IMediaPosition_put_PrerollTime(This,llTime) (This)->lpVtbl->put_PrerollTime(This,llTime) -#define IMediaPosition_put_Rate(This,dRate) (This)->lpVtbl->put_Rate(This,dRate) -#define IMediaPosition_get_Rate(This,pdRate) (This)->lpVtbl->get_Rate(This,pdRate) -#define IMediaPosition_CanSeekForward(This,pCanSeekForward) (This)->lpVtbl->CanSeekForward(This,pCanSeekForward) -#define IMediaPosition_CanSeekBackward(This,pCanSeekBackward) (This)->lpVtbl->CanSeekBackward(This,pCanSeekBackward) -#endif -#endif - HRESULT WINAPI IMediaPosition_get_Duration_Proxy(IMediaPosition *This,REFTIME *plength); - void __RPC_STUB IMediaPosition_get_Duration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_put_CurrentPosition_Proxy(IMediaPosition *This,REFTIME llTime); - void __RPC_STUB IMediaPosition_put_CurrentPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_get_CurrentPosition_Proxy(IMediaPosition *This,REFTIME *pllTime); - void __RPC_STUB IMediaPosition_get_CurrentPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_get_StopTime_Proxy(IMediaPosition *This,REFTIME *pllTime); - void __RPC_STUB IMediaPosition_get_StopTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_put_StopTime_Proxy(IMediaPosition *This,REFTIME llTime); - void __RPC_STUB IMediaPosition_put_StopTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_get_PrerollTime_Proxy(IMediaPosition *This,REFTIME *pllTime); - void __RPC_STUB IMediaPosition_get_PrerollTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_put_PrerollTime_Proxy(IMediaPosition *This,REFTIME llTime); - void __RPC_STUB IMediaPosition_put_PrerollTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_put_Rate_Proxy(IMediaPosition *This,double dRate); - void __RPC_STUB IMediaPosition_put_Rate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_get_Rate_Proxy(IMediaPosition *This,double *pdRate); - void __RPC_STUB IMediaPosition_get_Rate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_CanSeekForward_Proxy(IMediaPosition *This,LONG *pCanSeekForward); - void __RPC_STUB IMediaPosition_CanSeekForward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaPosition_CanSeekBackward_Proxy(IMediaPosition *This,LONG *pCanSeekBackward); - void __RPC_STUB IMediaPosition_CanSeekBackward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IBasicAudio_INTERFACE_DEFINED__ -#define __IBasicAudio_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IBasicAudio,0x56a868b3,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IBasicAudio : public IDispatch { - public: - virtual HRESULT WINAPI put_Volume(long lVolume) = 0; - virtual HRESULT WINAPI get_Volume(long *plVolume) = 0; - virtual HRESULT WINAPI put_Balance(long lBalance) = 0; - virtual HRESULT WINAPI get_Balance(long *plBalance) = 0; - }; -#else - typedef struct IBasicAudioVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IBasicAudio *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IBasicAudio *This); - ULONG (WINAPI *Release)(IBasicAudio *This); - HRESULT (WINAPI *GetTypeInfoCount)(IBasicAudio *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IBasicAudio *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IBasicAudio *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IBasicAudio *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *put_Volume)(IBasicAudio *This,long lVolume); - HRESULT (WINAPI *get_Volume)(IBasicAudio *This,long *plVolume); - HRESULT (WINAPI *put_Balance)(IBasicAudio *This,long lBalance); - HRESULT (WINAPI *get_Balance)(IBasicAudio *This,long *plBalance); - END_INTERFACE - } IBasicAudioVtbl; - struct IBasicAudio { - CONST_VTBL struct IBasicAudioVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IBasicAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBasicAudio_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBasicAudio_Release(This) (This)->lpVtbl->Release(This) -#define IBasicAudio_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IBasicAudio_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IBasicAudio_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IBasicAudio_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IBasicAudio_put_Volume(This,lVolume) (This)->lpVtbl->put_Volume(This,lVolume) -#define IBasicAudio_get_Volume(This,plVolume) (This)->lpVtbl->get_Volume(This,plVolume) -#define IBasicAudio_put_Balance(This,lBalance) (This)->lpVtbl->put_Balance(This,lBalance) -#define IBasicAudio_get_Balance(This,plBalance) (This)->lpVtbl->get_Balance(This,plBalance) -#endif -#endif - HRESULT WINAPI IBasicAudio_put_Volume_Proxy(IBasicAudio *This,long lVolume); - void __RPC_STUB IBasicAudio_put_Volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicAudio_get_Volume_Proxy(IBasicAudio *This,long *plVolume); - void __RPC_STUB IBasicAudio_get_Volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicAudio_put_Balance_Proxy(IBasicAudio *This,long lBalance); - void __RPC_STUB IBasicAudio_put_Balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicAudio_get_Balance_Proxy(IBasicAudio *This,long *plBalance); - void __RPC_STUB IBasicAudio_get_Balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVideoWindow_INTERFACE_DEFINED__ -#define __IVideoWindow_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IVideoWindow,0x56a868b4,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVideoWindow : public IDispatch { - public: - virtual HRESULT WINAPI put_Caption(BSTR strCaption) = 0; - virtual HRESULT WINAPI get_Caption(BSTR *strCaption) = 0; - virtual HRESULT WINAPI put_WindowStyle(long WindowStyle) = 0; - virtual HRESULT WINAPI get_WindowStyle(long *WindowStyle) = 0; - virtual HRESULT WINAPI put_WindowStyleEx(long WindowStyleEx) = 0; - virtual HRESULT WINAPI get_WindowStyleEx(long *WindowStyleEx) = 0; - virtual HRESULT WINAPI put_AutoShow(long AutoShow) = 0; - virtual HRESULT WINAPI get_AutoShow(long *AutoShow) = 0; - virtual HRESULT WINAPI put_WindowState(long WindowState) = 0; - virtual HRESULT WINAPI get_WindowState(long *WindowState) = 0; - virtual HRESULT WINAPI put_BackgroundPalette(long BackgroundPalette) = 0; - virtual HRESULT WINAPI get_BackgroundPalette(long *pBackgroundPalette) = 0; - virtual HRESULT WINAPI put_Visible(long Visible) = 0; - virtual HRESULT WINAPI get_Visible(long *pVisible) = 0; - virtual HRESULT WINAPI put_Left(long Left) = 0; - virtual HRESULT WINAPI get_Left(long *pLeft) = 0; - virtual HRESULT WINAPI put_Width(long Width) = 0; - virtual HRESULT WINAPI get_Width(long *pWidth) = 0; - virtual HRESULT WINAPI put_Top(long Top) = 0; - virtual HRESULT WINAPI get_Top(long *pTop) = 0; - virtual HRESULT WINAPI put_Height(long Height) = 0; - virtual HRESULT WINAPI get_Height(long *pHeight) = 0; - virtual HRESULT WINAPI put_Owner(OAHWND Owner) = 0; - virtual HRESULT WINAPI get_Owner(OAHWND *Owner) = 0; - virtual HRESULT WINAPI put_MessageDrain(OAHWND Drain) = 0; - virtual HRESULT WINAPI get_MessageDrain(OAHWND *Drain) = 0; - virtual HRESULT WINAPI get_BorderColor(long *Color) = 0; - virtual HRESULT WINAPI put_BorderColor(long Color) = 0; - virtual HRESULT WINAPI get_FullScreenMode(long *FullScreenMode) = 0; - virtual HRESULT WINAPI put_FullScreenMode(long FullScreenMode) = 0; - virtual HRESULT WINAPI SetWindowForeground(long Focus) = 0; - virtual HRESULT WINAPI NotifyOwnerMessage(OAHWND hwnd,long uMsg,LONG_PTR wParam,LONG_PTR lParam) = 0; - virtual HRESULT WINAPI SetWindowPosition(long Left,long Top,long Width,long Height) = 0; - virtual HRESULT WINAPI GetWindowPosition(long *pLeft,long *pTop,long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI GetMinIdealImageSize(long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI GetMaxIdealImageSize(long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI GetRestorePosition(long *pLeft,long *pTop,long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI HideCursor(long HideCursor) = 0; - virtual HRESULT WINAPI IsCursorHidden(long *CursorHidden) = 0; - }; -#else - typedef struct IVideoWindowVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVideoWindow *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVideoWindow *This); - ULONG (WINAPI *Release)(IVideoWindow *This); - HRESULT (WINAPI *GetTypeInfoCount)(IVideoWindow *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IVideoWindow *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IVideoWindow *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IVideoWindow *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *put_Caption)(IVideoWindow *This,BSTR strCaption); - HRESULT (WINAPI *get_Caption)(IVideoWindow *This,BSTR *strCaption); - HRESULT (WINAPI *put_WindowStyle)(IVideoWindow *This,long WindowStyle); - HRESULT (WINAPI *get_WindowStyle)(IVideoWindow *This,long *WindowStyle); - HRESULT (WINAPI *put_WindowStyleEx)(IVideoWindow *This,long WindowStyleEx); - HRESULT (WINAPI *get_WindowStyleEx)(IVideoWindow *This,long *WindowStyleEx); - HRESULT (WINAPI *put_AutoShow)(IVideoWindow *This,long AutoShow); - HRESULT (WINAPI *get_AutoShow)(IVideoWindow *This,long *AutoShow); - HRESULT (WINAPI *put_WindowState)(IVideoWindow *This,long WindowState); - HRESULT (WINAPI *get_WindowState)(IVideoWindow *This,long *WindowState); - HRESULT (WINAPI *put_BackgroundPalette)(IVideoWindow *This,long BackgroundPalette); - HRESULT (WINAPI *get_BackgroundPalette)(IVideoWindow *This,long *pBackgroundPalette); - HRESULT (WINAPI *put_Visible)(IVideoWindow *This,long Visible); - HRESULT (WINAPI *get_Visible)(IVideoWindow *This,long *pVisible); - HRESULT (WINAPI *put_Left)(IVideoWindow *This,long Left); - HRESULT (WINAPI *get_Left)(IVideoWindow *This,long *pLeft); - HRESULT (WINAPI *put_Width)(IVideoWindow *This,long Width); - HRESULT (WINAPI *get_Width)(IVideoWindow *This,long *pWidth); - HRESULT (WINAPI *put_Top)(IVideoWindow *This,long Top); - HRESULT (WINAPI *get_Top)(IVideoWindow *This,long *pTop); - HRESULT (WINAPI *put_Height)(IVideoWindow *This,long Height); - HRESULT (WINAPI *get_Height)(IVideoWindow *This,long *pHeight); - HRESULT (WINAPI *put_Owner)(IVideoWindow *This,OAHWND Owner); - HRESULT (WINAPI *get_Owner)(IVideoWindow *This,OAHWND *Owner); - HRESULT (WINAPI *put_MessageDrain)(IVideoWindow *This,OAHWND Drain); - HRESULT (WINAPI *get_MessageDrain)(IVideoWindow *This,OAHWND *Drain); - HRESULT (WINAPI *get_BorderColor)(IVideoWindow *This,long *Color); - HRESULT (WINAPI *put_BorderColor)(IVideoWindow *This,long Color); - HRESULT (WINAPI *get_FullScreenMode)(IVideoWindow *This,long *FullScreenMode); - HRESULT (WINAPI *put_FullScreenMode)(IVideoWindow *This,long FullScreenMode); - HRESULT (WINAPI *SetWindowForeground)(IVideoWindow *This,long Focus); - HRESULT (WINAPI *NotifyOwnerMessage)(IVideoWindow *This,OAHWND hwnd,long uMsg,LONG_PTR wParam,LONG_PTR lParam); - HRESULT (WINAPI *SetWindowPosition)(IVideoWindow *This,long Left,long Top,long Width,long Height); - HRESULT (WINAPI *GetWindowPosition)(IVideoWindow *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *GetMinIdealImageSize)(IVideoWindow *This,long *pWidth,long *pHeight); - HRESULT (WINAPI *GetMaxIdealImageSize)(IVideoWindow *This,long *pWidth,long *pHeight); - HRESULT (WINAPI *GetRestorePosition)(IVideoWindow *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *HideCursor)(IVideoWindow *This,long HideCursor); - HRESULT (WINAPI *IsCursorHidden)(IVideoWindow *This,long *CursorHidden); - END_INTERFACE - } IVideoWindowVtbl; - struct IVideoWindow { - CONST_VTBL struct IVideoWindowVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVideoWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVideoWindow_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVideoWindow_Release(This) (This)->lpVtbl->Release(This) -#define IVideoWindow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IVideoWindow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IVideoWindow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IVideoWindow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IVideoWindow_put_Caption(This,strCaption) (This)->lpVtbl->put_Caption(This,strCaption) -#define IVideoWindow_get_Caption(This,strCaption) (This)->lpVtbl->get_Caption(This,strCaption) -#define IVideoWindow_put_WindowStyle(This,WindowStyle) (This)->lpVtbl->put_WindowStyle(This,WindowStyle) -#define IVideoWindow_get_WindowStyle(This,WindowStyle) (This)->lpVtbl->get_WindowStyle(This,WindowStyle) -#define IVideoWindow_put_WindowStyleEx(This,WindowStyleEx) (This)->lpVtbl->put_WindowStyleEx(This,WindowStyleEx) -#define IVideoWindow_get_WindowStyleEx(This,WindowStyleEx) (This)->lpVtbl->get_WindowStyleEx(This,WindowStyleEx) -#define IVideoWindow_put_AutoShow(This,AutoShow) (This)->lpVtbl->put_AutoShow(This,AutoShow) -#define IVideoWindow_get_AutoShow(This,AutoShow) (This)->lpVtbl->get_AutoShow(This,AutoShow) -#define IVideoWindow_put_WindowState(This,WindowState) (This)->lpVtbl->put_WindowState(This,WindowState) -#define IVideoWindow_get_WindowState(This,WindowState) (This)->lpVtbl->get_WindowState(This,WindowState) -#define IVideoWindow_put_BackgroundPalette(This,BackgroundPalette) (This)->lpVtbl->put_BackgroundPalette(This,BackgroundPalette) -#define IVideoWindow_get_BackgroundPalette(This,pBackgroundPalette) (This)->lpVtbl->get_BackgroundPalette(This,pBackgroundPalette) -#define IVideoWindow_put_Visible(This,Visible) (This)->lpVtbl->put_Visible(This,Visible) -#define IVideoWindow_get_Visible(This,pVisible) (This)->lpVtbl->get_Visible(This,pVisible) -#define IVideoWindow_put_Left(This,Left) (This)->lpVtbl->put_Left(This,Left) -#define IVideoWindow_get_Left(This,pLeft) (This)->lpVtbl->get_Left(This,pLeft) -#define IVideoWindow_put_Width(This,Width) (This)->lpVtbl->put_Width(This,Width) -#define IVideoWindow_get_Width(This,pWidth) (This)->lpVtbl->get_Width(This,pWidth) -#define IVideoWindow_put_Top(This,Top) (This)->lpVtbl->put_Top(This,Top) -#define IVideoWindow_get_Top(This,pTop) (This)->lpVtbl->get_Top(This,pTop) -#define IVideoWindow_put_Height(This,Height) (This)->lpVtbl->put_Height(This,Height) -#define IVideoWindow_get_Height(This,pHeight) (This)->lpVtbl->get_Height(This,pHeight) -#define IVideoWindow_put_Owner(This,Owner) (This)->lpVtbl->put_Owner(This,Owner) -#define IVideoWindow_get_Owner(This,Owner) (This)->lpVtbl->get_Owner(This,Owner) -#define IVideoWindow_put_MessageDrain(This,Drain) (This)->lpVtbl->put_MessageDrain(This,Drain) -#define IVideoWindow_get_MessageDrain(This,Drain) (This)->lpVtbl->get_MessageDrain(This,Drain) -#define IVideoWindow_get_BorderColor(This,Color) (This)->lpVtbl->get_BorderColor(This,Color) -#define IVideoWindow_put_BorderColor(This,Color) (This)->lpVtbl->put_BorderColor(This,Color) -#define IVideoWindow_get_FullScreenMode(This,FullScreenMode) (This)->lpVtbl->get_FullScreenMode(This,FullScreenMode) -#define IVideoWindow_put_FullScreenMode(This,FullScreenMode) (This)->lpVtbl->put_FullScreenMode(This,FullScreenMode) -#define IVideoWindow_SetWindowForeground(This,Focus) (This)->lpVtbl->SetWindowForeground(This,Focus) -#define IVideoWindow_NotifyOwnerMessage(This,hwnd,uMsg,wParam,lParam) (This)->lpVtbl->NotifyOwnerMessage(This,hwnd,uMsg,wParam,lParam) -#define IVideoWindow_SetWindowPosition(This,Left,Top,Width,Height) (This)->lpVtbl->SetWindowPosition(This,Left,Top,Width,Height) -#define IVideoWindow_GetWindowPosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetWindowPosition(This,pLeft,pTop,pWidth,pHeight) -#define IVideoWindow_GetMinIdealImageSize(This,pWidth,pHeight) (This)->lpVtbl->GetMinIdealImageSize(This,pWidth,pHeight) -#define IVideoWindow_GetMaxIdealImageSize(This,pWidth,pHeight) (This)->lpVtbl->GetMaxIdealImageSize(This,pWidth,pHeight) -#define IVideoWindow_GetRestorePosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetRestorePosition(This,pLeft,pTop,pWidth,pHeight) -#define IVideoWindow_HideCursor(This,HideCursor) (This)->lpVtbl->HideCursor(This,HideCursor) -#define IVideoWindow_IsCursorHidden(This,CursorHidden) (This)->lpVtbl->IsCursorHidden(This,CursorHidden) -#endif -#endif - HRESULT WINAPI IVideoWindow_put_Caption_Proxy(IVideoWindow *This,BSTR strCaption); - void __RPC_STUB IVideoWindow_put_Caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Caption_Proxy(IVideoWindow *This,BSTR *strCaption); - void __RPC_STUB IVideoWindow_get_Caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_WindowStyle_Proxy(IVideoWindow *This,long WindowStyle); - void __RPC_STUB IVideoWindow_put_WindowStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_WindowStyle_Proxy(IVideoWindow *This,long *WindowStyle); - void __RPC_STUB IVideoWindow_get_WindowStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_WindowStyleEx_Proxy(IVideoWindow *This,long WindowStyleEx); - void __RPC_STUB IVideoWindow_put_WindowStyleEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_WindowStyleEx_Proxy(IVideoWindow *This,long *WindowStyleEx); - void __RPC_STUB IVideoWindow_get_WindowStyleEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_AutoShow_Proxy(IVideoWindow *This,long AutoShow); - void __RPC_STUB IVideoWindow_put_AutoShow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_AutoShow_Proxy(IVideoWindow *This,long *AutoShow); - void __RPC_STUB IVideoWindow_get_AutoShow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_WindowState_Proxy(IVideoWindow *This,long WindowState); - void __RPC_STUB IVideoWindow_put_WindowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_WindowState_Proxy(IVideoWindow *This,long *WindowState); - void __RPC_STUB IVideoWindow_get_WindowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_BackgroundPalette_Proxy(IVideoWindow *This,long BackgroundPalette); - void __RPC_STUB IVideoWindow_put_BackgroundPalette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_BackgroundPalette_Proxy(IVideoWindow *This,long *pBackgroundPalette); - void __RPC_STUB IVideoWindow_get_BackgroundPalette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Visible_Proxy(IVideoWindow *This,long Visible); - void __RPC_STUB IVideoWindow_put_Visible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Visible_Proxy(IVideoWindow *This,long *pVisible); - void __RPC_STUB IVideoWindow_get_Visible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Left_Proxy(IVideoWindow *This,long Left); - void __RPC_STUB IVideoWindow_put_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Left_Proxy(IVideoWindow *This,long *pLeft); - void __RPC_STUB IVideoWindow_get_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Width_Proxy(IVideoWindow *This,long Width); - void __RPC_STUB IVideoWindow_put_Width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Width_Proxy(IVideoWindow *This,long *pWidth); - void __RPC_STUB IVideoWindow_get_Width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Top_Proxy(IVideoWindow *This,long Top); - void __RPC_STUB IVideoWindow_put_Top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Top_Proxy(IVideoWindow *This,long *pTop); - void __RPC_STUB IVideoWindow_get_Top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Height_Proxy(IVideoWindow *This,long Height); - void __RPC_STUB IVideoWindow_put_Height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Height_Proxy(IVideoWindow *This,long *pHeight); - void __RPC_STUB IVideoWindow_get_Height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_Owner_Proxy(IVideoWindow *This,OAHWND Owner); - void __RPC_STUB IVideoWindow_put_Owner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_Owner_Proxy(IVideoWindow *This,OAHWND *Owner); - void __RPC_STUB IVideoWindow_get_Owner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_MessageDrain_Proxy(IVideoWindow *This,OAHWND Drain); - void __RPC_STUB IVideoWindow_put_MessageDrain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_MessageDrain_Proxy(IVideoWindow *This,OAHWND *Drain); - void __RPC_STUB IVideoWindow_get_MessageDrain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_BorderColor_Proxy(IVideoWindow *This,long *Color); - void __RPC_STUB IVideoWindow_get_BorderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_BorderColor_Proxy(IVideoWindow *This,long Color); - void __RPC_STUB IVideoWindow_put_BorderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_get_FullScreenMode_Proxy(IVideoWindow *This,long *FullScreenMode); - void __RPC_STUB IVideoWindow_get_FullScreenMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_put_FullScreenMode_Proxy(IVideoWindow *This,long FullScreenMode); - void __RPC_STUB IVideoWindow_put_FullScreenMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_SetWindowForeground_Proxy(IVideoWindow *This,long Focus); - void __RPC_STUB IVideoWindow_SetWindowForeground_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_NotifyOwnerMessage_Proxy(IVideoWindow *This,OAHWND hwnd,long uMsg,LONG_PTR wParam,LONG_PTR lParam); - void __RPC_STUB IVideoWindow_NotifyOwnerMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_SetWindowPosition_Proxy(IVideoWindow *This,long Left,long Top,long Width,long Height); - void __RPC_STUB IVideoWindow_SetWindowPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_GetWindowPosition_Proxy(IVideoWindow *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - void __RPC_STUB IVideoWindow_GetWindowPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_GetMinIdealImageSize_Proxy(IVideoWindow *This,long *pWidth,long *pHeight); - void __RPC_STUB IVideoWindow_GetMinIdealImageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_GetMaxIdealImageSize_Proxy(IVideoWindow *This,long *pWidth,long *pHeight); - void __RPC_STUB IVideoWindow_GetMaxIdealImageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_GetRestorePosition_Proxy(IVideoWindow *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - void __RPC_STUB IVideoWindow_GetRestorePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_HideCursor_Proxy(IVideoWindow *This,long HideCursor); - void __RPC_STUB IVideoWindow_HideCursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoWindow_IsCursorHidden_Proxy(IVideoWindow *This,long *CursorHidden); - void __RPC_STUB IVideoWindow_IsCursorHidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IBasicVideo_INTERFACE_DEFINED__ -#define __IBasicVideo_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IBasicVideo,0x56a868b5,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IBasicVideo : public IDispatch { - public: - virtual HRESULT WINAPI get_AvgTimePerFrame(REFTIME *pAvgTimePerFrame) = 0; - virtual HRESULT WINAPI get_BitRate(long *pBitRate) = 0; - virtual HRESULT WINAPI get_BitErrorRate(long *pBitErrorRate) = 0; - virtual HRESULT WINAPI get_VideoWidth(long *pVideoWidth) = 0; - virtual HRESULT WINAPI get_VideoHeight(long *pVideoHeight) = 0; - virtual HRESULT WINAPI put_SourceLeft(long SourceLeft) = 0; - virtual HRESULT WINAPI get_SourceLeft(long *pSourceLeft) = 0; - virtual HRESULT WINAPI put_SourceWidth(long SourceWidth) = 0; - virtual HRESULT WINAPI get_SourceWidth(long *pSourceWidth) = 0; - virtual HRESULT WINAPI put_SourceTop(long SourceTop) = 0; - virtual HRESULT WINAPI get_SourceTop(long *pSourceTop) = 0; - virtual HRESULT WINAPI put_SourceHeight(long SourceHeight) = 0; - virtual HRESULT WINAPI get_SourceHeight(long *pSourceHeight) = 0; - virtual HRESULT WINAPI put_DestinationLeft(long DestinationLeft) = 0; - virtual HRESULT WINAPI get_DestinationLeft(long *pDestinationLeft) = 0; - virtual HRESULT WINAPI put_DestinationWidth(long DestinationWidth) = 0; - virtual HRESULT WINAPI get_DestinationWidth(long *pDestinationWidth) = 0; - virtual HRESULT WINAPI put_DestinationTop(long DestinationTop) = 0; - virtual HRESULT WINAPI get_DestinationTop(long *pDestinationTop) = 0; - virtual HRESULT WINAPI put_DestinationHeight(long DestinationHeight) = 0; - virtual HRESULT WINAPI get_DestinationHeight(long *pDestinationHeight) = 0; - virtual HRESULT WINAPI SetSourcePosition(long Left,long Top,long Width,long Height) = 0; - virtual HRESULT WINAPI GetSourcePosition(long *pLeft,long *pTop,long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI SetDefaultSourcePosition(void) = 0; - virtual HRESULT WINAPI SetDestinationPosition(long Left,long Top,long Width,long Height) = 0; - virtual HRESULT WINAPI GetDestinationPosition(long *pLeft,long *pTop,long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI SetDefaultDestinationPosition(void) = 0; - virtual HRESULT WINAPI GetVideoSize(long *pWidth,long *pHeight) = 0; - virtual HRESULT WINAPI GetVideoPaletteEntries(long StartIndex,long Entries,long *pRetrieved,long *pPalette) = 0; - virtual HRESULT WINAPI GetCurrentImage(long *pBufferSize,long *pDIBImage) = 0; - virtual HRESULT WINAPI IsUsingDefaultSource(void) = 0; - virtual HRESULT WINAPI IsUsingDefaultDestination(void) = 0; - }; -#else - typedef struct IBasicVideoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IBasicVideo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IBasicVideo *This); - ULONG (WINAPI *Release)(IBasicVideo *This); - HRESULT (WINAPI *GetTypeInfoCount)(IBasicVideo *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IBasicVideo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IBasicVideo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IBasicVideo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_AvgTimePerFrame)(IBasicVideo *This,REFTIME *pAvgTimePerFrame); - HRESULT (WINAPI *get_BitRate)(IBasicVideo *This,long *pBitRate); - HRESULT (WINAPI *get_BitErrorRate)(IBasicVideo *This,long *pBitErrorRate); - HRESULT (WINAPI *get_VideoWidth)(IBasicVideo *This,long *pVideoWidth); - HRESULT (WINAPI *get_VideoHeight)(IBasicVideo *This,long *pVideoHeight); - HRESULT (WINAPI *put_SourceLeft)(IBasicVideo *This,long SourceLeft); - HRESULT (WINAPI *get_SourceLeft)(IBasicVideo *This,long *pSourceLeft); - HRESULT (WINAPI *put_SourceWidth)(IBasicVideo *This,long SourceWidth); - HRESULT (WINAPI *get_SourceWidth)(IBasicVideo *This,long *pSourceWidth); - HRESULT (WINAPI *put_SourceTop)(IBasicVideo *This,long SourceTop); - HRESULT (WINAPI *get_SourceTop)(IBasicVideo *This,long *pSourceTop); - HRESULT (WINAPI *put_SourceHeight)(IBasicVideo *This,long SourceHeight); - HRESULT (WINAPI *get_SourceHeight)(IBasicVideo *This,long *pSourceHeight); - HRESULT (WINAPI *put_DestinationLeft)(IBasicVideo *This,long DestinationLeft); - HRESULT (WINAPI *get_DestinationLeft)(IBasicVideo *This,long *pDestinationLeft); - HRESULT (WINAPI *put_DestinationWidth)(IBasicVideo *This,long DestinationWidth); - HRESULT (WINAPI *get_DestinationWidth)(IBasicVideo *This,long *pDestinationWidth); - HRESULT (WINAPI *put_DestinationTop)(IBasicVideo *This,long DestinationTop); - HRESULT (WINAPI *get_DestinationTop)(IBasicVideo *This,long *pDestinationTop); - HRESULT (WINAPI *put_DestinationHeight)(IBasicVideo *This,long DestinationHeight); - HRESULT (WINAPI *get_DestinationHeight)(IBasicVideo *This,long *pDestinationHeight); - HRESULT (WINAPI *SetSourcePosition)(IBasicVideo *This,long Left,long Top,long Width,long Height); - HRESULT (WINAPI *GetSourcePosition)(IBasicVideo *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *SetDefaultSourcePosition)(IBasicVideo *This); - HRESULT (WINAPI *SetDestinationPosition)(IBasicVideo *This,long Left,long Top,long Width,long Height); - HRESULT (WINAPI *GetDestinationPosition)(IBasicVideo *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *SetDefaultDestinationPosition)(IBasicVideo *This); - HRESULT (WINAPI *GetVideoSize)(IBasicVideo *This,long *pWidth,long *pHeight); - HRESULT (WINAPI *GetVideoPaletteEntries)(IBasicVideo *This,long StartIndex,long Entries,long *pRetrieved,long *pPalette); - HRESULT (WINAPI *GetCurrentImage)(IBasicVideo *This,long *pBufferSize,long *pDIBImage); - HRESULT (WINAPI *IsUsingDefaultSource)(IBasicVideo *This); - HRESULT (WINAPI *IsUsingDefaultDestination)(IBasicVideo *This); - END_INTERFACE - } IBasicVideoVtbl; - struct IBasicVideo { - CONST_VTBL struct IBasicVideoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IBasicVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBasicVideo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBasicVideo_Release(This) (This)->lpVtbl->Release(This) -#define IBasicVideo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IBasicVideo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IBasicVideo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IBasicVideo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IBasicVideo_get_AvgTimePerFrame(This,pAvgTimePerFrame) (This)->lpVtbl->get_AvgTimePerFrame(This,pAvgTimePerFrame) -#define IBasicVideo_get_BitRate(This,pBitRate) (This)->lpVtbl->get_BitRate(This,pBitRate) -#define IBasicVideo_get_BitErrorRate(This,pBitErrorRate) (This)->lpVtbl->get_BitErrorRate(This,pBitErrorRate) -#define IBasicVideo_get_VideoWidth(This,pVideoWidth) (This)->lpVtbl->get_VideoWidth(This,pVideoWidth) -#define IBasicVideo_get_VideoHeight(This,pVideoHeight) (This)->lpVtbl->get_VideoHeight(This,pVideoHeight) -#define IBasicVideo_put_SourceLeft(This,SourceLeft) (This)->lpVtbl->put_SourceLeft(This,SourceLeft) -#define IBasicVideo_get_SourceLeft(This,pSourceLeft) (This)->lpVtbl->get_SourceLeft(This,pSourceLeft) -#define IBasicVideo_put_SourceWidth(This,SourceWidth) (This)->lpVtbl->put_SourceWidth(This,SourceWidth) -#define IBasicVideo_get_SourceWidth(This,pSourceWidth) (This)->lpVtbl->get_SourceWidth(This,pSourceWidth) -#define IBasicVideo_put_SourceTop(This,SourceTop) (This)->lpVtbl->put_SourceTop(This,SourceTop) -#define IBasicVideo_get_SourceTop(This,pSourceTop) (This)->lpVtbl->get_SourceTop(This,pSourceTop) -#define IBasicVideo_put_SourceHeight(This,SourceHeight) (This)->lpVtbl->put_SourceHeight(This,SourceHeight) -#define IBasicVideo_get_SourceHeight(This,pSourceHeight) (This)->lpVtbl->get_SourceHeight(This,pSourceHeight) -#define IBasicVideo_put_DestinationLeft(This,DestinationLeft) (This)->lpVtbl->put_DestinationLeft(This,DestinationLeft) -#define IBasicVideo_get_DestinationLeft(This,pDestinationLeft) (This)->lpVtbl->get_DestinationLeft(This,pDestinationLeft) -#define IBasicVideo_put_DestinationWidth(This,DestinationWidth) (This)->lpVtbl->put_DestinationWidth(This,DestinationWidth) -#define IBasicVideo_get_DestinationWidth(This,pDestinationWidth) (This)->lpVtbl->get_DestinationWidth(This,pDestinationWidth) -#define IBasicVideo_put_DestinationTop(This,DestinationTop) (This)->lpVtbl->put_DestinationTop(This,DestinationTop) -#define IBasicVideo_get_DestinationTop(This,pDestinationTop) (This)->lpVtbl->get_DestinationTop(This,pDestinationTop) -#define IBasicVideo_put_DestinationHeight(This,DestinationHeight) (This)->lpVtbl->put_DestinationHeight(This,DestinationHeight) -#define IBasicVideo_get_DestinationHeight(This,pDestinationHeight) (This)->lpVtbl->get_DestinationHeight(This,pDestinationHeight) -#define IBasicVideo_SetSourcePosition(This,Left,Top,Width,Height) (This)->lpVtbl->SetSourcePosition(This,Left,Top,Width,Height) -#define IBasicVideo_GetSourcePosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetSourcePosition(This,pLeft,pTop,pWidth,pHeight) -#define IBasicVideo_SetDefaultSourcePosition(This) (This)->lpVtbl->SetDefaultSourcePosition(This) -#define IBasicVideo_SetDestinationPosition(This,Left,Top,Width,Height) (This)->lpVtbl->SetDestinationPosition(This,Left,Top,Width,Height) -#define IBasicVideo_GetDestinationPosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetDestinationPosition(This,pLeft,pTop,pWidth,pHeight) -#define IBasicVideo_SetDefaultDestinationPosition(This) (This)->lpVtbl->SetDefaultDestinationPosition(This) -#define IBasicVideo_GetVideoSize(This,pWidth,pHeight) (This)->lpVtbl->GetVideoSize(This,pWidth,pHeight) -#define IBasicVideo_GetVideoPaletteEntries(This,StartIndex,Entries,pRetrieved,pPalette) (This)->lpVtbl->GetVideoPaletteEntries(This,StartIndex,Entries,pRetrieved,pPalette) -#define IBasicVideo_GetCurrentImage(This,pBufferSize,pDIBImage) (This)->lpVtbl->GetCurrentImage(This,pBufferSize,pDIBImage) -#define IBasicVideo_IsUsingDefaultSource(This) (This)->lpVtbl->IsUsingDefaultSource(This) -#define IBasicVideo_IsUsingDefaultDestination(This) (This)->lpVtbl->IsUsingDefaultDestination(This) -#endif -#endif - HRESULT WINAPI IBasicVideo_get_AvgTimePerFrame_Proxy(IBasicVideo *This,REFTIME *pAvgTimePerFrame); - void __RPC_STUB IBasicVideo_get_AvgTimePerFrame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_BitRate_Proxy(IBasicVideo *This,long *pBitRate); - void __RPC_STUB IBasicVideo_get_BitRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_BitErrorRate_Proxy(IBasicVideo *This,long *pBitErrorRate); - void __RPC_STUB IBasicVideo_get_BitErrorRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_VideoWidth_Proxy(IBasicVideo *This,long *pVideoWidth); - void __RPC_STUB IBasicVideo_get_VideoWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_VideoHeight_Proxy(IBasicVideo *This,long *pVideoHeight); - void __RPC_STUB IBasicVideo_get_VideoHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_SourceLeft_Proxy(IBasicVideo *This,long SourceLeft); - void __RPC_STUB IBasicVideo_put_SourceLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_SourceLeft_Proxy(IBasicVideo *This,long *pSourceLeft); - void __RPC_STUB IBasicVideo_get_SourceLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_SourceWidth_Proxy(IBasicVideo *This,long SourceWidth); - void __RPC_STUB IBasicVideo_put_SourceWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_SourceWidth_Proxy(IBasicVideo *This,long *pSourceWidth); - void __RPC_STUB IBasicVideo_get_SourceWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_SourceTop_Proxy(IBasicVideo *This,long SourceTop); - void __RPC_STUB IBasicVideo_put_SourceTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_SourceTop_Proxy(IBasicVideo *This,long *pSourceTop); - void __RPC_STUB IBasicVideo_get_SourceTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_SourceHeight_Proxy(IBasicVideo *This,long SourceHeight); - void __RPC_STUB IBasicVideo_put_SourceHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_SourceHeight_Proxy(IBasicVideo *This,long *pSourceHeight); - void __RPC_STUB IBasicVideo_get_SourceHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_DestinationLeft_Proxy(IBasicVideo *This,long DestinationLeft); - void __RPC_STUB IBasicVideo_put_DestinationLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_DestinationLeft_Proxy(IBasicVideo *This,long *pDestinationLeft); - void __RPC_STUB IBasicVideo_get_DestinationLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_DestinationWidth_Proxy(IBasicVideo *This,long DestinationWidth); - void __RPC_STUB IBasicVideo_put_DestinationWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_DestinationWidth_Proxy(IBasicVideo *This,long *pDestinationWidth); - void __RPC_STUB IBasicVideo_get_DestinationWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_DestinationTop_Proxy(IBasicVideo *This,long DestinationTop); - void __RPC_STUB IBasicVideo_put_DestinationTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_DestinationTop_Proxy(IBasicVideo *This,long *pDestinationTop); - void __RPC_STUB IBasicVideo_get_DestinationTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_put_DestinationHeight_Proxy(IBasicVideo *This,long DestinationHeight); - void __RPC_STUB IBasicVideo_put_DestinationHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_get_DestinationHeight_Proxy(IBasicVideo *This,long *pDestinationHeight); - void __RPC_STUB IBasicVideo_get_DestinationHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_SetSourcePosition_Proxy(IBasicVideo *This,long Left,long Top,long Width,long Height); - void __RPC_STUB IBasicVideo_SetSourcePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_GetSourcePosition_Proxy(IBasicVideo *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - void __RPC_STUB IBasicVideo_GetSourcePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_SetDefaultSourcePosition_Proxy(IBasicVideo *This); - void __RPC_STUB IBasicVideo_SetDefaultSourcePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_SetDestinationPosition_Proxy(IBasicVideo *This,long Left,long Top,long Width,long Height); - void __RPC_STUB IBasicVideo_SetDestinationPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_GetDestinationPosition_Proxy(IBasicVideo *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - void __RPC_STUB IBasicVideo_GetDestinationPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_SetDefaultDestinationPosition_Proxy(IBasicVideo *This); - void __RPC_STUB IBasicVideo_SetDefaultDestinationPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_GetVideoSize_Proxy(IBasicVideo *This,long *pWidth,long *pHeight); - void __RPC_STUB IBasicVideo_GetVideoSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_GetVideoPaletteEntries_Proxy(IBasicVideo *This,long StartIndex,long Entries,long *pRetrieved,long *pPalette); - void __RPC_STUB IBasicVideo_GetVideoPaletteEntries_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_GetCurrentImage_Proxy(IBasicVideo *This,long *pBufferSize,long *pDIBImage); - void __RPC_STUB IBasicVideo_GetCurrentImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_IsUsingDefaultSource_Proxy(IBasicVideo *This); - void __RPC_STUB IBasicVideo_IsUsingDefaultSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBasicVideo_IsUsingDefaultDestination_Proxy(IBasicVideo *This); - void __RPC_STUB IBasicVideo_IsUsingDefaultDestination_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IBasicVideo2_INTERFACE_DEFINED__ -#define __IBasicVideo2_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IBasicVideo2,0x329bb360,0xf6ea,0x11d1,0x90,0x38,0x00,0xa0,0xc9,0x69,0x72,0x98); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IBasicVideo2 : public IBasicVideo { - public: - virtual HRESULT WINAPI GetPreferredAspectRatio(long *plAspectX,long *plAspectY) = 0; - }; -#else - typedef struct IBasicVideo2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IBasicVideo2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IBasicVideo2 *This); - ULONG (WINAPI *Release)(IBasicVideo2 *This); - HRESULT (WINAPI *GetTypeInfoCount)(IBasicVideo2 *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IBasicVideo2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IBasicVideo2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IBasicVideo2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_AvgTimePerFrame)(IBasicVideo2 *This,REFTIME *pAvgTimePerFrame); - HRESULT (WINAPI *get_BitRate)(IBasicVideo2 *This,long *pBitRate); - HRESULT (WINAPI *get_BitErrorRate)(IBasicVideo2 *This,long *pBitErrorRate); - HRESULT (WINAPI *get_VideoWidth)(IBasicVideo2 *This,long *pVideoWidth); - HRESULT (WINAPI *get_VideoHeight)(IBasicVideo2 *This,long *pVideoHeight); - HRESULT (WINAPI *put_SourceLeft)(IBasicVideo2 *This,long SourceLeft); - HRESULT (WINAPI *get_SourceLeft)(IBasicVideo2 *This,long *pSourceLeft); - HRESULT (WINAPI *put_SourceWidth)(IBasicVideo2 *This,long SourceWidth); - HRESULT (WINAPI *get_SourceWidth)(IBasicVideo2 *This,long *pSourceWidth); - HRESULT (WINAPI *put_SourceTop)(IBasicVideo2 *This,long SourceTop); - HRESULT (WINAPI *get_SourceTop)(IBasicVideo2 *This,long *pSourceTop); - HRESULT (WINAPI *put_SourceHeight)(IBasicVideo2 *This,long SourceHeight); - HRESULT (WINAPI *get_SourceHeight)(IBasicVideo2 *This,long *pSourceHeight); - HRESULT (WINAPI *put_DestinationLeft)(IBasicVideo2 *This,long DestinationLeft); - HRESULT (WINAPI *get_DestinationLeft)(IBasicVideo2 *This,long *pDestinationLeft); - HRESULT (WINAPI *put_DestinationWidth)(IBasicVideo2 *This,long DestinationWidth); - HRESULT (WINAPI *get_DestinationWidth)(IBasicVideo2 *This,long *pDestinationWidth); - HRESULT (WINAPI *put_DestinationTop)(IBasicVideo2 *This,long DestinationTop); - HRESULT (WINAPI *get_DestinationTop)(IBasicVideo2 *This,long *pDestinationTop); - HRESULT (WINAPI *put_DestinationHeight)(IBasicVideo2 *This,long DestinationHeight); - HRESULT (WINAPI *get_DestinationHeight)(IBasicVideo2 *This,long *pDestinationHeight); - HRESULT (WINAPI *SetSourcePosition)(IBasicVideo2 *This,long Left,long Top,long Width,long Height); - HRESULT (WINAPI *GetSourcePosition)(IBasicVideo2 *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *SetDefaultSourcePosition)(IBasicVideo2 *This); - HRESULT (WINAPI *SetDestinationPosition)(IBasicVideo2 *This,long Left,long Top,long Width,long Height); - HRESULT (WINAPI *GetDestinationPosition)(IBasicVideo2 *This,long *pLeft,long *pTop,long *pWidth,long *pHeight); - HRESULT (WINAPI *SetDefaultDestinationPosition)(IBasicVideo2 *This); - HRESULT (WINAPI *GetVideoSize)(IBasicVideo2 *This,long *pWidth,long *pHeight); - HRESULT (WINAPI *GetVideoPaletteEntries)(IBasicVideo2 *This,long StartIndex,long Entries,long *pRetrieved,long *pPalette); - HRESULT (WINAPI *GetCurrentImage)(IBasicVideo2 *This,long *pBufferSize,long *pDIBImage); - HRESULT (WINAPI *IsUsingDefaultSource)(IBasicVideo2 *This); - HRESULT (WINAPI *IsUsingDefaultDestination)(IBasicVideo2 *This); - HRESULT (WINAPI *GetPreferredAspectRatio)(IBasicVideo2 *This,long *plAspectX,long *plAspectY); - END_INTERFACE - } IBasicVideo2Vtbl; - struct IBasicVideo2 { - CONST_VTBL struct IBasicVideo2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IBasicVideo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBasicVideo2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBasicVideo2_Release(This) (This)->lpVtbl->Release(This) -#define IBasicVideo2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IBasicVideo2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IBasicVideo2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IBasicVideo2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IBasicVideo2_get_AvgTimePerFrame(This,pAvgTimePerFrame) (This)->lpVtbl->get_AvgTimePerFrame(This,pAvgTimePerFrame) -#define IBasicVideo2_get_BitRate(This,pBitRate) (This)->lpVtbl->get_BitRate(This,pBitRate) -#define IBasicVideo2_get_BitErrorRate(This,pBitErrorRate) (This)->lpVtbl->get_BitErrorRate(This,pBitErrorRate) -#define IBasicVideo2_get_VideoWidth(This,pVideoWidth) (This)->lpVtbl->get_VideoWidth(This,pVideoWidth) -#define IBasicVideo2_get_VideoHeight(This,pVideoHeight) (This)->lpVtbl->get_VideoHeight(This,pVideoHeight) -#define IBasicVideo2_put_SourceLeft(This,SourceLeft) (This)->lpVtbl->put_SourceLeft(This,SourceLeft) -#define IBasicVideo2_get_SourceLeft(This,pSourceLeft) (This)->lpVtbl->get_SourceLeft(This,pSourceLeft) -#define IBasicVideo2_put_SourceWidth(This,SourceWidth) (This)->lpVtbl->put_SourceWidth(This,SourceWidth) -#define IBasicVideo2_get_SourceWidth(This,pSourceWidth) (This)->lpVtbl->get_SourceWidth(This,pSourceWidth) -#define IBasicVideo2_put_SourceTop(This,SourceTop) (This)->lpVtbl->put_SourceTop(This,SourceTop) -#define IBasicVideo2_get_SourceTop(This,pSourceTop) (This)->lpVtbl->get_SourceTop(This,pSourceTop) -#define IBasicVideo2_put_SourceHeight(This,SourceHeight) (This)->lpVtbl->put_SourceHeight(This,SourceHeight) -#define IBasicVideo2_get_SourceHeight(This,pSourceHeight) (This)->lpVtbl->get_SourceHeight(This,pSourceHeight) -#define IBasicVideo2_put_DestinationLeft(This,DestinationLeft) (This)->lpVtbl->put_DestinationLeft(This,DestinationLeft) -#define IBasicVideo2_get_DestinationLeft(This,pDestinationLeft) (This)->lpVtbl->get_DestinationLeft(This,pDestinationLeft) -#define IBasicVideo2_put_DestinationWidth(This,DestinationWidth) (This)->lpVtbl->put_DestinationWidth(This,DestinationWidth) -#define IBasicVideo2_get_DestinationWidth(This,pDestinationWidth) (This)->lpVtbl->get_DestinationWidth(This,pDestinationWidth) -#define IBasicVideo2_put_DestinationTop(This,DestinationTop) (This)->lpVtbl->put_DestinationTop(This,DestinationTop) -#define IBasicVideo2_get_DestinationTop(This,pDestinationTop) (This)->lpVtbl->get_DestinationTop(This,pDestinationTop) -#define IBasicVideo2_put_DestinationHeight(This,DestinationHeight) (This)->lpVtbl->put_DestinationHeight(This,DestinationHeight) -#define IBasicVideo2_get_DestinationHeight(This,pDestinationHeight) (This)->lpVtbl->get_DestinationHeight(This,pDestinationHeight) -#define IBasicVideo2_SetSourcePosition(This,Left,Top,Width,Height) (This)->lpVtbl->SetSourcePosition(This,Left,Top,Width,Height) -#define IBasicVideo2_GetSourcePosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetSourcePosition(This,pLeft,pTop,pWidth,pHeight) -#define IBasicVideo2_SetDefaultSourcePosition(This) (This)->lpVtbl->SetDefaultSourcePosition(This) -#define IBasicVideo2_SetDestinationPosition(This,Left,Top,Width,Height) (This)->lpVtbl->SetDestinationPosition(This,Left,Top,Width,Height) -#define IBasicVideo2_GetDestinationPosition(This,pLeft,pTop,pWidth,pHeight) (This)->lpVtbl->GetDestinationPosition(This,pLeft,pTop,pWidth,pHeight) -#define IBasicVideo2_SetDefaultDestinationPosition(This) (This)->lpVtbl->SetDefaultDestinationPosition(This) -#define IBasicVideo2_GetVideoSize(This,pWidth,pHeight) (This)->lpVtbl->GetVideoSize(This,pWidth,pHeight) -#define IBasicVideo2_GetVideoPaletteEntries(This,StartIndex,Entries,pRetrieved,pPalette) (This)->lpVtbl->GetVideoPaletteEntries(This,StartIndex,Entries,pRetrieved,pPalette) -#define IBasicVideo2_GetCurrentImage(This,pBufferSize,pDIBImage) (This)->lpVtbl->GetCurrentImage(This,pBufferSize,pDIBImage) -#define IBasicVideo2_IsUsingDefaultSource(This) (This)->lpVtbl->IsUsingDefaultSource(This) -#define IBasicVideo2_IsUsingDefaultDestination(This) (This)->lpVtbl->IsUsingDefaultDestination(This) -#define IBasicVideo2_GetPreferredAspectRatio(This,plAspectX,plAspectY) (This)->lpVtbl->GetPreferredAspectRatio(This,plAspectX,plAspectY) -#endif -#endif - HRESULT WINAPI IBasicVideo2_GetPreferredAspectRatio_Proxy(IBasicVideo2 *This,long *plAspectX,long *plAspectY); - void __RPC_STUB IBasicVideo2_GetPreferredAspectRatio_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDeferredCommand_INTERFACE_DEFINED__ -#define __IDeferredCommand_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IDeferredCommand,0x56a868b8,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDeferredCommand : public IUnknown { - public: - virtual HRESULT WINAPI Cancel(void) = 0; - virtual HRESULT WINAPI Confidence(LONG *pConfidence) = 0; - virtual HRESULT WINAPI Postpone(REFTIME newtime) = 0; - virtual HRESULT WINAPI GetHResult(HRESULT *phrResult) = 0; - }; -#else - typedef struct IDeferredCommandVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDeferredCommand *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDeferredCommand *This); - ULONG (WINAPI *Release)(IDeferredCommand *This); - HRESULT (WINAPI *Cancel)(IDeferredCommand *This); - HRESULT (WINAPI *Confidence)(IDeferredCommand *This,LONG *pConfidence); - HRESULT (WINAPI *Postpone)(IDeferredCommand *This,REFTIME newtime); - HRESULT (WINAPI *GetHResult)(IDeferredCommand *This,HRESULT *phrResult); - END_INTERFACE - } IDeferredCommandVtbl; - struct IDeferredCommand { - CONST_VTBL struct IDeferredCommandVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDeferredCommand_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDeferredCommand_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDeferredCommand_Release(This) (This)->lpVtbl->Release(This) -#define IDeferredCommand_Cancel(This) (This)->lpVtbl->Cancel(This) -#define IDeferredCommand_Confidence(This,pConfidence) (This)->lpVtbl->Confidence(This,pConfidence) -#define IDeferredCommand_Postpone(This,newtime) (This)->lpVtbl->Postpone(This,newtime) -#define IDeferredCommand_GetHResult(This,phrResult) (This)->lpVtbl->GetHResult(This,phrResult) -#endif -#endif - HRESULT WINAPI IDeferredCommand_Cancel_Proxy(IDeferredCommand *This); - void __RPC_STUB IDeferredCommand_Cancel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDeferredCommand_Confidence_Proxy(IDeferredCommand *This,LONG *pConfidence); - void __RPC_STUB IDeferredCommand_Confidence_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDeferredCommand_Postpone_Proxy(IDeferredCommand *This,REFTIME newtime); - void __RPC_STUB IDeferredCommand_Postpone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDeferredCommand_GetHResult_Proxy(IDeferredCommand *This,HRESULT *phrResult); - void __RPC_STUB IDeferredCommand_GetHResult_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IQueueCommand_INTERFACE_DEFINED__ -#define __IQueueCommand_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IQueueCommand,0x56a868b7,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IQueueCommand : public IUnknown { - public: - virtual HRESULT WINAPI InvokeAtStreamTime(IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr) = 0; - virtual HRESULT WINAPI InvokeAtPresentationTime(IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr) = 0; - }; -#else - typedef struct IQueueCommandVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IQueueCommand *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IQueueCommand *This); - ULONG (WINAPI *Release)(IQueueCommand *This); - HRESULT (WINAPI *InvokeAtStreamTime)(IQueueCommand *This,IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr); - HRESULT (WINAPI *InvokeAtPresentationTime)(IQueueCommand *This,IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr); - END_INTERFACE - } IQueueCommandVtbl; - struct IQueueCommand { - CONST_VTBL struct IQueueCommandVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IQueueCommand_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IQueueCommand_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IQueueCommand_Release(This) (This)->lpVtbl->Release(This) -#define IQueueCommand_InvokeAtStreamTime(This,pCmd,time,iid,dispidMethod,wFlags,cArgs,pDispParams,pvarResult,puArgErr) (This)->lpVtbl->InvokeAtStreamTime(This,pCmd,time,iid,dispidMethod,wFlags,cArgs,pDispParams,pvarResult,puArgErr) -#define IQueueCommand_InvokeAtPresentationTime(This,pCmd,time,iid,dispidMethod,wFlags,cArgs,pDispParams,pvarResult,puArgErr) (This)->lpVtbl->InvokeAtPresentationTime(This,pCmd,time,iid,dispidMethod,wFlags,cArgs,pDispParams,pvarResult,puArgErr) -#endif -#endif - HRESULT WINAPI IQueueCommand_InvokeAtStreamTime_Proxy(IQueueCommand *This,IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr); - void __RPC_STUB IQueueCommand_InvokeAtStreamTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IQueueCommand_InvokeAtPresentationTime_Proxy(IQueueCommand *This,IDeferredCommand **pCmd,REFTIME time,GUID *iid,long dispidMethod,short wFlags,long cArgs,VARIANT *pDispParams,VARIANT *pvarResult,short *puArgErr); - void __RPC_STUB IQueueCommand_InvokeAtPresentationTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - DEFINE_GUID(CLSID_FilgraphManager,0xe436ebb3,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#ifdef __cplusplus - class FilgraphManager; -#endif - -#ifndef __IFilterInfo_INTERFACE_DEFINED__ -#define __IFilterInfo_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IFilterInfo,0x56a868ba,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterInfo : public IDispatch { - public: - virtual HRESULT WINAPI FindPin(BSTR strPinID,IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_Name(BSTR *strName) = 0; - virtual HRESULT WINAPI get_VendorInfo(BSTR *strVendorInfo) = 0; - virtual HRESULT WINAPI get_Filter(IUnknown **ppUnk) = 0; - virtual HRESULT WINAPI get_Pins(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_IsFileSource(LONG *pbIsSource) = 0; - virtual HRESULT WINAPI get_Filename(BSTR *pstrFilename) = 0; - virtual HRESULT WINAPI put_Filename(BSTR strFilename) = 0; - }; -#else - typedef struct IFilterInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterInfo *This); - ULONG (WINAPI *Release)(IFilterInfo *This); - HRESULT (WINAPI *GetTypeInfoCount)(IFilterInfo *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IFilterInfo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IFilterInfo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IFilterInfo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *FindPin)(IFilterInfo *This,BSTR strPinID,IDispatch **ppUnk); - HRESULT (WINAPI *get_Name)(IFilterInfo *This,BSTR *strName); - HRESULT (WINAPI *get_VendorInfo)(IFilterInfo *This,BSTR *strVendorInfo); - HRESULT (WINAPI *get_Filter)(IFilterInfo *This,IUnknown **ppUnk); - HRESULT (WINAPI *get_Pins)(IFilterInfo *This,IDispatch **ppUnk); - HRESULT (WINAPI *get_IsFileSource)(IFilterInfo *This,LONG *pbIsSource); - HRESULT (WINAPI *get_Filename)(IFilterInfo *This,BSTR *pstrFilename); - HRESULT (WINAPI *put_Filename)(IFilterInfo *This,BSTR strFilename); - END_INTERFACE - } IFilterInfoVtbl; - struct IFilterInfo { - CONST_VTBL struct IFilterInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterInfo_Release(This) (This)->lpVtbl->Release(This) -#define IFilterInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IFilterInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IFilterInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IFilterInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IFilterInfo_FindPin(This,strPinID,ppUnk) (This)->lpVtbl->FindPin(This,strPinID,ppUnk) -#define IFilterInfo_get_Name(This,strName) (This)->lpVtbl->get_Name(This,strName) -#define IFilterInfo_get_VendorInfo(This,strVendorInfo) (This)->lpVtbl->get_VendorInfo(This,strVendorInfo) -#define IFilterInfo_get_Filter(This,ppUnk) (This)->lpVtbl->get_Filter(This,ppUnk) -#define IFilterInfo_get_Pins(This,ppUnk) (This)->lpVtbl->get_Pins(This,ppUnk) -#define IFilterInfo_get_IsFileSource(This,pbIsSource) (This)->lpVtbl->get_IsFileSource(This,pbIsSource) -#define IFilterInfo_get_Filename(This,pstrFilename) (This)->lpVtbl->get_Filename(This,pstrFilename) -#define IFilterInfo_put_Filename(This,strFilename) (This)->lpVtbl->put_Filename(This,strFilename) -#endif -#endif - HRESULT WINAPI IFilterInfo_FindPin_Proxy(IFilterInfo *This,BSTR strPinID,IDispatch **ppUnk); - void __RPC_STUB IFilterInfo_FindPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_Name_Proxy(IFilterInfo *This,BSTR *strName); - void __RPC_STUB IFilterInfo_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_VendorInfo_Proxy(IFilterInfo *This,BSTR *strVendorInfo); - void __RPC_STUB IFilterInfo_get_VendorInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_Filter_Proxy(IFilterInfo *This,IUnknown **ppUnk); - void __RPC_STUB IFilterInfo_get_Filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_Pins_Proxy(IFilterInfo *This,IDispatch **ppUnk); - void __RPC_STUB IFilterInfo_get_Pins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_IsFileSource_Proxy(IFilterInfo *This,LONG *pbIsSource); - void __RPC_STUB IFilterInfo_get_IsFileSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_get_Filename_Proxy(IFilterInfo *This,BSTR *pstrFilename); - void __RPC_STUB IFilterInfo_get_Filename_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterInfo_put_Filename_Proxy(IFilterInfo *This,BSTR strFilename); - void __RPC_STUB IFilterInfo_put_Filename_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IRegFilterInfo_INTERFACE_DEFINED__ -#define __IRegFilterInfo_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IRegFilterInfo,0x56a868bb,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IRegFilterInfo : public IDispatch { - public: - virtual HRESULT WINAPI get_Name(BSTR *strName) = 0; - virtual HRESULT WINAPI Filter(IDispatch **ppUnk) = 0; - }; -#else - typedef struct IRegFilterInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IRegFilterInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IRegFilterInfo *This); - ULONG (WINAPI *Release)(IRegFilterInfo *This); - HRESULT (WINAPI *GetTypeInfoCount)(IRegFilterInfo *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IRegFilterInfo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IRegFilterInfo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IRegFilterInfo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_Name)(IRegFilterInfo *This,BSTR *strName); - HRESULT (WINAPI *Filter)(IRegFilterInfo *This,IDispatch **ppUnk); - END_INTERFACE - } IRegFilterInfoVtbl; - struct IRegFilterInfo { - CONST_VTBL struct IRegFilterInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IRegFilterInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IRegFilterInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IRegFilterInfo_Release(This) (This)->lpVtbl->Release(This) -#define IRegFilterInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IRegFilterInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IRegFilterInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IRegFilterInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IRegFilterInfo_get_Name(This,strName) (This)->lpVtbl->get_Name(This,strName) -#define IRegFilterInfo_Filter(This,ppUnk) (This)->lpVtbl->Filter(This,ppUnk) -#endif -#endif - HRESULT WINAPI IRegFilterInfo_get_Name_Proxy(IRegFilterInfo *This,BSTR *strName); - void __RPC_STUB IRegFilterInfo_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IRegFilterInfo_Filter_Proxy(IRegFilterInfo *This,IDispatch **ppUnk); - void __RPC_STUB IRegFilterInfo_Filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMediaTypeInfo_INTERFACE_DEFINED__ -#define __IMediaTypeInfo_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IMediaTypeInfo,0x56a868bc,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaTypeInfo : public IDispatch { - public: - virtual HRESULT WINAPI get_Type(BSTR *strType) = 0; - virtual HRESULT WINAPI get_Subtype(BSTR *strType) = 0; - }; -#else - typedef struct IMediaTypeInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaTypeInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaTypeInfo *This); - ULONG (WINAPI *Release)(IMediaTypeInfo *This); - HRESULT (WINAPI *GetTypeInfoCount)(IMediaTypeInfo *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IMediaTypeInfo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IMediaTypeInfo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IMediaTypeInfo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_Type)(IMediaTypeInfo *This,BSTR *strType); - HRESULT (WINAPI *get_Subtype)(IMediaTypeInfo *This,BSTR *strType); - END_INTERFACE - } IMediaTypeInfoVtbl; - struct IMediaTypeInfo { - CONST_VTBL struct IMediaTypeInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaTypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaTypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaTypeInfo_Release(This) (This)->lpVtbl->Release(This) -#define IMediaTypeInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IMediaTypeInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IMediaTypeInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IMediaTypeInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IMediaTypeInfo_get_Type(This,strType) (This)->lpVtbl->get_Type(This,strType) -#define IMediaTypeInfo_get_Subtype(This,strType) (This)->lpVtbl->get_Subtype(This,strType) -#endif -#endif - HRESULT WINAPI IMediaTypeInfo_get_Type_Proxy(IMediaTypeInfo *This,BSTR *strType); - void __RPC_STUB IMediaTypeInfo_get_Type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaTypeInfo_get_Subtype_Proxy(IMediaTypeInfo *This,BSTR *strType); - void __RPC_STUB IMediaTypeInfo_get_Subtype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IPinInfo_INTERFACE_DEFINED__ -#define __IPinInfo_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IPinInfo,0x56a868bd,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IPinInfo : public IDispatch { - public: - virtual HRESULT WINAPI get_Pin(IUnknown **ppUnk) = 0; - virtual HRESULT WINAPI get_ConnectedTo(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_ConnectionMediaType(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_FilterInfo(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI get_Name(BSTR *ppUnk) = 0; - virtual HRESULT WINAPI get_Direction(LONG *ppDirection) = 0; - virtual HRESULT WINAPI get_PinID(BSTR *strPinID) = 0; - virtual HRESULT WINAPI get_MediaTypes(IDispatch **ppUnk) = 0; - virtual HRESULT WINAPI Connect(IUnknown *pPin) = 0; - virtual HRESULT WINAPI ConnectDirect(IUnknown *pPin) = 0; - virtual HRESULT WINAPI ConnectWithType(IUnknown *pPin,IDispatch *pMediaType) = 0; - virtual HRESULT WINAPI Disconnect(void) = 0; - virtual HRESULT WINAPI Render(void) = 0; - }; -#else - typedef struct IPinInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IPinInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IPinInfo *This); - ULONG (WINAPI *Release)(IPinInfo *This); - HRESULT (WINAPI *GetTypeInfoCount)(IPinInfo *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IPinInfo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IPinInfo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IPinInfo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *get_Pin)(IPinInfo *This,IUnknown **ppUnk); - HRESULT (WINAPI *get_ConnectedTo)(IPinInfo *This,IDispatch **ppUnk); - HRESULT (WINAPI *get_ConnectionMediaType)(IPinInfo *This,IDispatch **ppUnk); - HRESULT (WINAPI *get_FilterInfo)(IPinInfo *This,IDispatch **ppUnk); - HRESULT (WINAPI *get_Name)(IPinInfo *This,BSTR *ppUnk); - HRESULT (WINAPI *get_Direction)(IPinInfo *This,LONG *ppDirection); - HRESULT (WINAPI *get_PinID)(IPinInfo *This,BSTR *strPinID); - HRESULT (WINAPI *get_MediaTypes)(IPinInfo *This,IDispatch **ppUnk); - HRESULT (WINAPI *Connect)(IPinInfo *This,IUnknown *pPin); - HRESULT (WINAPI *ConnectDirect)(IPinInfo *This,IUnknown *pPin); - HRESULT (WINAPI *ConnectWithType)(IPinInfo *This,IUnknown *pPin,IDispatch *pMediaType); - HRESULT (WINAPI *Disconnect)(IPinInfo *This); - HRESULT (WINAPI *Render)(IPinInfo *This); - END_INTERFACE - } IPinInfoVtbl; - struct IPinInfo { - CONST_VTBL struct IPinInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IPinInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IPinInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IPinInfo_Release(This) (This)->lpVtbl->Release(This) -#define IPinInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IPinInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IPinInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IPinInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IPinInfo_get_Pin(This,ppUnk) (This)->lpVtbl->get_Pin(This,ppUnk) -#define IPinInfo_get_ConnectedTo(This,ppUnk) (This)->lpVtbl->get_ConnectedTo(This,ppUnk) -#define IPinInfo_get_ConnectionMediaType(This,ppUnk) (This)->lpVtbl->get_ConnectionMediaType(This,ppUnk) -#define IPinInfo_get_FilterInfo(This,ppUnk) (This)->lpVtbl->get_FilterInfo(This,ppUnk) -#define IPinInfo_get_Name(This,ppUnk) (This)->lpVtbl->get_Name(This,ppUnk) -#define IPinInfo_get_Direction(This,ppDirection) (This)->lpVtbl->get_Direction(This,ppDirection) -#define IPinInfo_get_PinID(This,strPinID) (This)->lpVtbl->get_PinID(This,strPinID) -#define IPinInfo_get_MediaTypes(This,ppUnk) (This)->lpVtbl->get_MediaTypes(This,ppUnk) -#define IPinInfo_Connect(This,pPin) (This)->lpVtbl->Connect(This,pPin) -#define IPinInfo_ConnectDirect(This,pPin) (This)->lpVtbl->ConnectDirect(This,pPin) -#define IPinInfo_ConnectWithType(This,pPin,pMediaType) (This)->lpVtbl->ConnectWithType(This,pPin,pMediaType) -#define IPinInfo_Disconnect(This) (This)->lpVtbl->Disconnect(This) -#define IPinInfo_Render(This) (This)->lpVtbl->Render(This) -#endif -#endif - HRESULT WINAPI IPinInfo_get_Pin_Proxy(IPinInfo *This,IUnknown **ppUnk); - void __RPC_STUB IPinInfo_get_Pin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_ConnectedTo_Proxy(IPinInfo *This,IDispatch **ppUnk); - void __RPC_STUB IPinInfo_get_ConnectedTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_ConnectionMediaType_Proxy(IPinInfo *This,IDispatch **ppUnk); - void __RPC_STUB IPinInfo_get_ConnectionMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_FilterInfo_Proxy(IPinInfo *This,IDispatch **ppUnk); - void __RPC_STUB IPinInfo_get_FilterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_Name_Proxy(IPinInfo *This,BSTR *ppUnk); - void __RPC_STUB IPinInfo_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_Direction_Proxy(IPinInfo *This,LONG *ppDirection); - void __RPC_STUB IPinInfo_get_Direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_PinID_Proxy(IPinInfo *This,BSTR *strPinID); - void __RPC_STUB IPinInfo_get_PinID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_get_MediaTypes_Proxy(IPinInfo *This,IDispatch **ppUnk); - void __RPC_STUB IPinInfo_get_MediaTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_Connect_Proxy(IPinInfo *This,IUnknown *pPin); - void __RPC_STUB IPinInfo_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_ConnectDirect_Proxy(IPinInfo *This,IUnknown *pPin); - void __RPC_STUB IPinInfo_ConnectDirect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_ConnectWithType_Proxy(IPinInfo *This,IUnknown *pPin,IDispatch *pMediaType); - void __RPC_STUB IPinInfo_ConnectWithType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_Disconnect_Proxy(IPinInfo *This); - void __RPC_STUB IPinInfo_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinInfo_Render_Proxy(IPinInfo *This); - void __RPC_STUB IPinInfo_Render_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMStats_INTERFACE_DEFINED__ -#define __IAMStats_INTERFACE_DEFINED__ - DEFINE_GUID(IID_IAMStats,0xbc9bcf80,0xdcd2,0x11d2,0xab,0xf6,0x00,0xa0,0xc9,0x05,0xf3,0x75); -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMStats : public IDispatch { - public: - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI get_Count(LONG *plCount) = 0; - virtual HRESULT WINAPI GetValueByIndex(long lIndex,BSTR *szName,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax) = 0; - virtual HRESULT WINAPI GetValueByName(BSTR szName,long *lIndex,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax) = 0; - virtual HRESULT WINAPI GetIndex(BSTR szName,long lCreate,long *plIndex) = 0; - virtual HRESULT WINAPI AddValue(long lIndex,double dValue) = 0; - }; -#else - typedef struct IAMStatsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMStats *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMStats *This); - ULONG (WINAPI *Release)(IAMStats *This); - HRESULT (WINAPI *GetTypeInfoCount)(IAMStats *This,UINT *pctinfo); - HRESULT (WINAPI *GetTypeInfo)(IAMStats *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo); - HRESULT (WINAPI *GetIDsOfNames)(IAMStats *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId); - HRESULT (WINAPI *Invoke)(IAMStats *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr); - HRESULT (WINAPI *Reset)(IAMStats *This); - HRESULT (WINAPI *get_Count)(IAMStats *This,LONG *plCount); - HRESULT (WINAPI *GetValueByIndex)(IAMStats *This,long lIndex,BSTR *szName,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax); - HRESULT (WINAPI *GetValueByName)(IAMStats *This,BSTR szName,long *lIndex,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax); - HRESULT (WINAPI *GetIndex)(IAMStats *This,BSTR szName,long lCreate,long *plIndex); - HRESULT (WINAPI *AddValue)(IAMStats *This,long lIndex,double dValue); - END_INTERFACE - } IAMStatsVtbl; - struct IAMStats { - CONST_VTBL struct IAMStatsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMStats_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMStats_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMStats_Release(This) (This)->lpVtbl->Release(This) -#define IAMStats_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo) -#define IAMStats_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo) -#define IAMStats_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) -#define IAMStats_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) -#define IAMStats_Reset(This) (This)->lpVtbl->Reset(This) -#define IAMStats_get_Count(This,plCount) (This)->lpVtbl->get_Count(This,plCount) -#define IAMStats_GetValueByIndex(This,lIndex,szName,lCount,dLast,dAverage,dStdDev,dMin,dMax) (This)->lpVtbl->GetValueByIndex(This,lIndex,szName,lCount,dLast,dAverage,dStdDev,dMin,dMax) -#define IAMStats_GetValueByName(This,szName,lIndex,lCount,dLast,dAverage,dStdDev,dMin,dMax) (This)->lpVtbl->GetValueByName(This,szName,lIndex,lCount,dLast,dAverage,dStdDev,dMin,dMax) -#define IAMStats_GetIndex(This,szName,lCreate,plIndex) (This)->lpVtbl->GetIndex(This,szName,lCreate,plIndex) -#define IAMStats_AddValue(This,lIndex,dValue) (This)->lpVtbl->AddValue(This,lIndex,dValue) -#endif -#endif - - HRESULT WINAPI IAMStats_Reset_Proxy(IAMStats *This); - void __RPC_STUB IAMStats_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStats_get_Count_Proxy(IAMStats *This,LONG *plCount); - void __RPC_STUB IAMStats_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStats_GetValueByIndex_Proxy(IAMStats *This,long lIndex,BSTR *szName,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax); - void __RPC_STUB IAMStats_GetValueByIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStats_GetValueByName_Proxy(IAMStats *This,BSTR szName,long *lIndex,long *lCount,double *dLast,double *dAverage,double *dStdDev,double *dMin,double *dMax); - void __RPC_STUB IAMStats_GetValueByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStats_GetIndex_Proxy(IAMStats *This,BSTR szName,long lCreate,long *plIndex); - void __RPC_STUB IAMStats_GetIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStats_AddValue_Proxy(IAMStats *This,long lIndex,double dValue); - void __RPC_STUB IAMStats_AddValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif -#endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/ddraw.h b/3rdparty/include/dshow/ddraw.h deleted file mode 100644 index ffe7d80..0000000 --- a/3rdparty/include/dshow/ddraw.h +++ /dev/null @@ -1,2712 +0,0 @@ -/* - * Copyright (C) the Wine project - * - * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __DDRAW_INCLUDED__ -#define __DDRAW_INCLUDED__ - -#define COM_NO_WINDOWS_H -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* defined(__cplusplus) */ - -#ifndef DIRECTDRAW_VERSION -#define DIRECTDRAW_VERSION 0x0700 -#endif /* DIRECTDRAW_VERSION */ - -/***************************************************************************** - * Predeclare the interfaces - */ -#ifndef __DDRAW_GUID_DEFINED__ -DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); -DEFINE_GUID( CLSID_DirectDraw7, 0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 ); -DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); -DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); -DEFINE_GUID( IID_IDirectDraw3, 0x618f8ad4,0x8b7a,0x11d0,0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d ); -DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); -DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); -DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 ); -DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); -DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B ); -DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); -DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 ); -DEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); -#endif - -typedef struct IDirectDraw *LPDIRECTDRAW; -typedef struct IDirectDraw2 *LPDIRECTDRAW2; -typedef struct IDirectDraw3 *LPDIRECTDRAW3; -typedef struct IDirectDraw4 *LPDIRECTDRAW4; -typedef struct IDirectDraw7 *LPDIRECTDRAW7; -typedef struct IDirectDrawClipper *LPDIRECTDRAWCLIPPER; -typedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE; -typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE; -typedef struct IDirectDrawSurface2 *LPDIRECTDRAWSURFACE2; -typedef struct IDirectDrawSurface3 *LPDIRECTDRAWSURFACE3; -typedef struct IDirectDrawSurface4 *LPDIRECTDRAWSURFACE4; -typedef struct IDirectDrawSurface7 *LPDIRECTDRAWSURFACE7; -typedef struct IDirectDrawColorControl *LPDIRECTDRAWCOLORCONTROL; -typedef struct IDirectDrawGammaControl *LPDIRECTDRAWGAMMACONTROL; - - -#define DDENUMRET_CANCEL 0 -#define DDENUMRET_OK 1 - -#define DD_OK S_OK -#define DD_FALSE S_FALSE - - -#define _FACDD 0x876 -#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) - -#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) -#define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) -#define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) -#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) -#define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) -#define DDERR_GENERIC E_FAIL -#define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) -#define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) -#define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) -#define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) -#define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) -#define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) -#define DDERR_INVALIDPARAMS E_INVALIDARG -#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) -#define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) -#define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) -#define DDERR_NO3D MAKE_DDHRESULT( 170 ) -#define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) -#define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) -#define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) -#define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) -#define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) -#define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) -#define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) -#define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) -#define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) -#define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) -#define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) -#define DDERR_NOGDI MAKE_DDHRESULT( 240 ) -#define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) -#define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) -#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) -#define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) -#define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) -#define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) -#define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) -#define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) -#define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) -#define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) -#define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) -#define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) -#define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) -#define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) -#define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) -#define DDERR_OUTOFMEMORY E_OUTOFMEMORY -#define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) -#define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) -#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) -#define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) -#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) -#define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) -#define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) -#define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) -#define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) -#define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) -#define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) -#define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) -#define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) -#define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) -#define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) -#define DDERR_UNSUPPORTED E_NOTIMPL -#define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) -#define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) -#define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) -#define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) -#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) -#define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) -#define DDERR_XALIGN MAKE_DDHRESULT( 560 ) -#define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) -#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) -#define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) -#define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) -#define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) -#define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) -#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) -#define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) -#define DDERR_NOHWND MAKE_DDHRESULT( 569 ) -#define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) -#define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) -#define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) -#define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) -#define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) -#define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) -#define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) -#define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) -#define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) -#define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) -#define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) -#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) -#define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) -#define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) -#define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) -#define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) -#define DDERR_NODC MAKE_DDHRESULT( 586 ) -#define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) -#define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) -#define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) -#define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) -#define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) -#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) -#define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) -#define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) -#define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) -#define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) -#define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) -#define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) -#define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) -#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) -#define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) -#define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) -#define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) -#define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) -#define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) -#define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) -#define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) -#define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) -#define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) -#define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) -#define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED - -/* dwFlags for Blt* */ -#define DDBLT_ALPHADEST 0x00000001 -#define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002 -#define DDBLT_ALPHADESTNEG 0x00000004 -#define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008 -#define DDBLT_ALPHAEDGEBLEND 0x00000010 -#define DDBLT_ALPHASRC 0x00000020 -#define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040 -#define DDBLT_ALPHASRCNEG 0x00000080 -#define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100 -#define DDBLT_ASYNC 0x00000200 -#define DDBLT_COLORFILL 0x00000400 -#define DDBLT_DDFX 0x00000800 -#define DDBLT_DDROPS 0x00001000 -#define DDBLT_KEYDEST 0x00002000 -#define DDBLT_KEYDESTOVERRIDE 0x00004000 -#define DDBLT_KEYSRC 0x00008000 -#define DDBLT_KEYSRCOVERRIDE 0x00010000 -#define DDBLT_ROP 0x00020000 -#define DDBLT_ROTATIONANGLE 0x00040000 -#define DDBLT_ZBUFFER 0x00080000 -#define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000 -#define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000 -#define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000 -#define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000 -#define DDBLT_WAIT 0x01000000 -#define DDBLT_DEPTHFILL 0x02000000 -#define DDBLT_DONOTWAIT 0x08000000 - -/* dwTrans for BltFast */ -#define DDBLTFAST_NOCOLORKEY 0x00000000 -#define DDBLTFAST_SRCCOLORKEY 0x00000001 -#define DDBLTFAST_DESTCOLORKEY 0x00000002 -#define DDBLTFAST_WAIT 0x00000010 -#define DDBLTFAST_DONOTWAIT 0x00000020 - -/* dwFlags for Flip */ -#define DDFLIP_WAIT 0x00000001 -#define DDFLIP_EVEN 0x00000002 /* only valid for overlay */ -#define DDFLIP_ODD 0x00000004 /* only valid for overlay */ -#define DDFLIP_NOVSYNC 0x00000008 -#define DDFLIP_STEREO 0x00000010 -#define DDFLIP_DONOTWAIT 0x00000020 -#define DDFLIP_INTERVAL2 0x02000000 -#define DDFLIP_INTERVAL3 0x03000000 -#define DDFLIP_INTERVAL4 0x04000000 - - -/* dwFlags for GetBltStatus */ -#define DDGBS_CANBLT 0x00000001 -#define DDGBS_ISBLTDONE 0x00000002 - -/* dwFlags for IDirectDrawSurface7::GetFlipStatus */ -#define DDGFS_CANFLIP 1L -#define DDGFS_ISFLIPDONE 2L - -/* dwFlags for IDirectDrawSurface7::SetPrivateData */ -#define DDSPD_IUNKNOWNPOINTER 1L -#define DDSPD_VOLATILE 2L - -/* DDSCAPS.dwCaps */ -/* reserved1, was 3d capable */ -#define DDSCAPS_RESERVED1 0x00000001 -/* surface contains alpha information */ -#define DDSCAPS_ALPHA 0x00000002 -/* this surface is a backbuffer */ -#define DDSCAPS_BACKBUFFER 0x00000004 -/* complex surface structure */ -#define DDSCAPS_COMPLEX 0x00000008 -/* part of surface flipping structure */ -#define DDSCAPS_FLIP 0x00000010 -/* this surface is the frontbuffer surface */ -#define DDSCAPS_FRONTBUFFER 0x00000020 -/* this is a plain offscreen surface */ -#define DDSCAPS_OFFSCREENPLAIN 0x00000040 -/* overlay */ -#define DDSCAPS_OVERLAY 0x00000080 -/* palette objects can be created and attached to us */ -#define DDSCAPS_PALETTE 0x00000100 -/* primary surface (the one the user looks at currently)(right eye)*/ -#define DDSCAPS_PRIMARYSURFACE 0x00000200 -/* primary surface for left eye */ -#define DDSCAPS_PRIMARYSURFACELEFT 0x00000400 -/* surface exists in systemmemory */ -#define DDSCAPS_SYSTEMMEMORY 0x00000800 -/* surface can be used as a texture */ -#define DDSCAPS_TEXTURE 0x00001000 -/* surface may be destination for 3d rendering */ -#define DDSCAPS_3DDEVICE 0x00002000 -/* surface exists in videomemory */ -#define DDSCAPS_VIDEOMEMORY 0x00004000 -/* surface changes immediately visible */ -#define DDSCAPS_VISIBLE 0x00008000 -/* write only surface */ -#define DDSCAPS_WRITEONLY 0x00010000 -/* zbuffer surface */ -#define DDSCAPS_ZBUFFER 0x00020000 -/* has its own DC */ -#define DDSCAPS_OWNDC 0x00040000 -/* surface should be able to receive live video */ -#define DDSCAPS_LIVEVIDEO 0x00080000 -/* should be able to have a hw codec decompress stuff into it */ -#define DDSCAPS_HWCODEC 0x00100000 -/* mode X (320x200 or 320x240) surface */ -#define DDSCAPS_MODEX 0x00200000 -/* one mipmap surface (1 level) */ -#define DDSCAPS_MIPMAP 0x00400000 -#define DDSCAPS_RESERVED2 0x00800000 -/* memory allocation delayed until Load() */ -#define DDSCAPS_ALLOCONLOAD 0x04000000 -/* Indicates that the surface will receive data from a video port */ -#define DDSCAPS_VIDEOPORT 0x08000000 -/* surface is in local videomemory */ -#define DDSCAPS_LOCALVIDMEM 0x10000000 -/* surface is in nonlocal videomemory */ -#define DDSCAPS_NONLOCALVIDMEM 0x20000000 -/* surface is a standard VGA mode surface (NOT ModeX) */ -#define DDSCAPS_STANDARDVGAMODE 0x40000000 -/* optimized? surface */ -#define DDSCAPS_OPTIMIZED 0x80000000 - -typedef struct _DDSCAPS { - DWORD dwCaps; /* capabilities of surface wanted */ -} DDSCAPS,*LPDDSCAPS; - -/* DDSCAPS2.dwCaps2 */ -/* indicates the surface will receive data from a video port using - deinterlacing hardware. */ -#define DDSCAPS2_HARDWAREDEINTERLACE 0x00000002 -/* indicates the surface will be locked very frequently. */ -#define DDSCAPS2_HINTDYNAMIC 0x00000004 -/* indicates surface can be re-ordered or retiled on load() */ -#define DDSCAPS2_HINTSTATIC 0x00000008 -/* indicates surface to be managed by directdraw/direct3D */ -#define DDSCAPS2_TEXTUREMANAGE 0x00000010 -/* reserved bits */ -#define DDSCAPS2_RESERVED1 0x00000020 -#define DDSCAPS2_RESERVED2 0x00000040 -/* indicates surface will never be locked again */ -#define DDSCAPS2_OPAQUE 0x00000080 -/* set at CreateSurface() time to indicate antialiasing will be used */ -#define DDSCAPS2_HINTANTIALIASING 0x00000100 -/* set at CreateSurface() time to indicate cubic environment map */ -#define DDSCAPS2_CUBEMAP 0x00000200 -/* face flags for cube maps */ -#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 -#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 -#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 -#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 -#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 -#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 -/* specifies all faces of a cube for CreateSurface() */ -#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ - DDSCAPS2_CUBEMAP_NEGATIVEX |\ - DDSCAPS2_CUBEMAP_POSITIVEY |\ - DDSCAPS2_CUBEMAP_NEGATIVEY |\ - DDSCAPS2_CUBEMAP_POSITIVEZ |\ - DDSCAPS2_CUBEMAP_NEGATIVEZ ) -/* set for mipmap sublevels on DirectX7 and later. ignored by CreateSurface() */ -#define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000 -/* indicates texture surface to be managed by Direct3D *only* */ -#define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000 -/* indicates managed surface that can safely be lost */ -#define DDSCAPS2_DONOTPERSIST 0x00040000 -/* indicates surface is part of a stereo flipping chain */ -#define DDSCAPS2_STEREOSURFACELEFT 0x00080000 - -typedef struct _DDSCAPS2 { - DWORD dwCaps; /* capabilities of surface wanted */ - DWORD dwCaps2; /* additional capabilities */ - DWORD dwCaps3; /* reserved capabilities */ - __extension__ union { - DWORD dwCaps4; /* low word is the depth for a volume texture */ - DWORD dwVolumeDepth; - } DUMMYUNIONNAME1; -} DDSCAPS2,*LPDDSCAPS2; - -typedef struct _DDSCAPSEX { - DWORD dwCaps2; - DWORD dwCaps3; - __extension__ union { - DWORD dwCaps4; - DWORD dwVolumeDepth; - } DUMMYUNIONNAME1; -} DDSCAPSEX,*LPDDSCAPSEX; - -#define DD_ROP_SPACE (256/32) /* space required to store ROP array */ - -typedef struct _DDCAPS_DX7 /* DirectX 7 version of caps struct */ -{ - DWORD dwSize; /* size of the DDDRIVERCAPS structure */ - DWORD dwCaps; /* driver specific capabilities */ - DWORD dwCaps2; /* more driver specific capabilities */ - DWORD dwCKeyCaps; /* color key capabilities of the surface */ - DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ - DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ - DWORD dwPalCaps; /* palette capabilities */ - DWORD dwSVCaps; /* stereo vision capabilities */ - DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ - DWORD dwVidMemTotal; /* total amount of video memory */ - DWORD dwVidMemFree; /* amount of free video memory */ - DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ - DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ - DWORD dwNumFourCCCodes; /* number of four cc codes */ - DWORD dwAlignBoundarySrc; /* source rectangle alignment */ - DWORD dwAlignSizeSrc; /* source rectangle byte size */ - DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ - DWORD dwAlignSizeDest; /* dest rectangle byte size */ - DWORD dwAlignStrideAlign; /* stride alignment */ - DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ - DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */ - DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ - DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ - DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ - DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ - DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ - DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ - DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ - DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ - DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ - DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ - DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ - DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ - DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ - DWORD dwCurrVideoPorts; /* current number of video ports used */ - DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ - DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ - DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ - DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ - DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ - DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ - DDSCAPS2 ddsCaps; /* surface capabilities */ -} DDCAPS_DX7,*LPDDCAPS_DX7; - -typedef struct _DDCAPS_DX6 /* DirectX 6 version of caps struct */ -{ - DWORD dwSize; /* size of the DDDRIVERCAPS structure */ - DWORD dwCaps; /* driver specific capabilities */ - DWORD dwCaps2; /* more driver specific capabilities */ - DWORD dwCKeyCaps; /* color key capabilities of the surface */ - DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ - DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ - DWORD dwPalCaps; /* palette capabilities */ - DWORD dwSVCaps; /* stereo vision capabilities */ - DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ - DWORD dwVidMemTotal; /* total amount of video memory */ - DWORD dwVidMemFree; /* amount of free video memory */ - DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ - DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ - DWORD dwNumFourCCCodes; /* number of four cc codes */ - DWORD dwAlignBoundarySrc; /* source rectangle alignment */ - DWORD dwAlignSizeSrc; /* source rectangle byte size */ - DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ - DWORD dwAlignSizeDest; /* dest rectangle byte size */ - DWORD dwAlignStrideAlign; /* stride alignment */ - DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ - DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */ - DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ - DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ - DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ - DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ - DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ - DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ - DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ - DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ - DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ - DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ - DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ - DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ - DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ - DWORD dwCurrVideoPorts; /* current number of video ports used */ - DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ - DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ - DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ - DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ - DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ - DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ - /* and one new member for DirectX 6 */ - DDSCAPS2 ddsCaps; /* surface capabilities */ -} DDCAPS_DX6,*LPDDCAPS_DX6; - -typedef struct _DDCAPS_DX5 /* DirectX5 version of caps struct */ -{ - DWORD dwSize; /* size of the DDDRIVERCAPS structure */ - DWORD dwCaps; /* driver specific capabilities */ - DWORD dwCaps2; /* more driver specific capabilities */ - DWORD dwCKeyCaps; /* color key capabilities of the surface */ - DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ - DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ - DWORD dwPalCaps; /* palette capabilities */ - DWORD dwSVCaps; /* stereo vision capabilities */ - DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ - DWORD dwVidMemTotal; /* total amount of video memory */ - DWORD dwVidMemFree; /* amount of free video memory */ - DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ - DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ - DWORD dwNumFourCCCodes; /* number of four cc codes */ - DWORD dwAlignBoundarySrc; /* source rectangle alignment */ - DWORD dwAlignSizeSrc; /* source rectangle byte size */ - DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ - DWORD dwAlignSizeDest; /* dest rectangle byte size */ - DWORD dwAlignStrideAlign; /* stride alignment */ - DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ - DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */ - DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ - DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ - DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ - DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ - DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ - DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ - DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ - DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ - DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ - DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ - DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ - DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ - /* the following are the new DirectX 5 members */ - DWORD dwMaxVideoPorts; /* maximum number of usable video ports */ - DWORD dwCurrVideoPorts; /* current number of video ports used */ - DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */ - DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */ - DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */ - DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */ - DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */ - DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */ -} DDCAPS_DX5,*LPDDCAPS_DX5; - -typedef struct _DDCAPS_DX3 /* DirectX3 version of caps struct */ -{ - DWORD dwSize; /* size of the DDDRIVERCAPS structure */ - DWORD dwCaps; /* driver specific capabilities */ - DWORD dwCaps2; /* more driver specific capabilities */ - DWORD dwCKeyCaps; /* color key capabilities of the surface */ - DWORD dwFXCaps; /* driver specific stretching and effects capabilities */ - DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */ - DWORD dwPalCaps; /* palette capabilities */ - DWORD dwSVCaps; /* stereo vision capabilities */ - DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */ - DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */ - DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */ - DWORD dwVidMemTotal; /* total amount of video memory */ - DWORD dwVidMemFree; /* amount of free video memory */ - DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */ - DWORD dwCurrVisibleOverlays; /* current number of visible overlays */ - DWORD dwNumFourCCCodes; /* number of four cc codes */ - DWORD dwAlignBoundarySrc; /* source rectangle alignment */ - DWORD dwAlignSizeSrc; /* source rectangle byte size */ - DWORD dwAlignBoundaryDest; /* dest rectangle alignment */ - DWORD dwAlignSizeDest; /* dest rectangle byte size */ - DWORD dwAlignStrideAlign; /* stride alignment */ - DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */ - DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */ - DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */ - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */ - DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */ - DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */ - DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */ - DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */ - DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */ - DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */ - DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */ - DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */ - DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */ - DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */ - DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */ - DWORD dwReserved4; - DWORD dwReserved5; - DWORD dwReserved6; -} DDCAPS_DX3,*LPDDCAPS_DX3; - -/* set caps struct according to DIRECTDRAW_VERSION */ - -#if DIRECTDRAW_VERSION <= 0x300 -typedef DDCAPS_DX3 DDCAPS; -#elif DIRECTDRAW_VERSION <= 0x500 -typedef DDCAPS_DX5 DDCAPS; -#elif DIRECTDRAW_VERSION <= 0x600 -typedef DDCAPS_DX6 DDCAPS; -#else -typedef DDCAPS_DX7 DDCAPS; -#endif - -typedef DDCAPS *LPDDCAPS; - -/* DDCAPS.dwCaps */ -#define DDCAPS_3D 0x00000001 -#define DDCAPS_ALIGNBOUNDARYDEST 0x00000002 -#define DDCAPS_ALIGNSIZEDEST 0x00000004 -#define DDCAPS_ALIGNBOUNDARYSRC 0x00000008 -#define DDCAPS_ALIGNSIZESRC 0x00000010 -#define DDCAPS_ALIGNSTRIDE 0x00000020 -#define DDCAPS_BLT 0x00000040 -#define DDCAPS_BLTQUEUE 0x00000080 -#define DDCAPS_BLTFOURCC 0x00000100 -#define DDCAPS_BLTSTRETCH 0x00000200 -#define DDCAPS_GDI 0x00000400 -#define DDCAPS_OVERLAY 0x00000800 -#define DDCAPS_OVERLAYCANTCLIP 0x00001000 -#define DDCAPS_OVERLAYFOURCC 0x00002000 -#define DDCAPS_OVERLAYSTRETCH 0x00004000 -#define DDCAPS_PALETTE 0x00008000 -#define DDCAPS_PALETTEVSYNC 0x00010000 -#define DDCAPS_READSCANLINE 0x00020000 -#define DDCAPS_STEREOVIEW 0x00040000 -#define DDCAPS_VBI 0x00080000 -#define DDCAPS_ZBLTS 0x00100000 -#define DDCAPS_ZOVERLAYS 0x00200000 -#define DDCAPS_COLORKEY 0x00400000 -#define DDCAPS_ALPHA 0x00800000 -#define DDCAPS_COLORKEYHWASSIST 0x01000000 -#define DDCAPS_NOHARDWARE 0x02000000 -#define DDCAPS_BLTCOLORFILL 0x04000000 -#define DDCAPS_BANKSWITCHED 0x08000000 -#define DDCAPS_BLTDEPTHFILL 0x10000000 -#define DDCAPS_CANCLIP 0x20000000 -#define DDCAPS_CANCLIPSTRETCHED 0x40000000 -#define DDCAPS_CANBLTSYSMEM 0x80000000 - -/* DDCAPS.dwCaps2 */ -#define DDCAPS2_CERTIFIED 0x00000001 -#define DDCAPS2_NO2DDURING3DSCENE 0x00000002 -#define DDCAPS2_VIDEOPORT 0x00000004 -#define DDCAPS2_AUTOFLIPOVERLAY 0x00000008 -#define DDCAPS2_CANBOBINTERLEAVED 0x00000010 -#define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020 -#define DDCAPS2_COLORCONTROLOVERLAY 0x00000040 -#define DDCAPS2_COLORCONTROLPRIMARY 0x00000080 -#define DDCAPS2_CANDROPZ16BIT 0x00000100 -#define DDCAPS2_NONLOCALVIDMEM 0x00000200 -#define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400 -#define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800 -#define DDCAPS2_WIDESURFACES 0x00001000 -#define DDCAPS2_CANFLIPODDEVEN 0x00002000 -#define DDCAPS2_CANBOBHARDWARE 0x00004000 -#define DDCAPS2_COPYFOURCC 0x00008000 -#define DDCAPS2_PRIMARYGAMMA 0x00020000 -#define DDCAPS2_CANRENDERWINDOWED 0x00080000 -#define DDCAPS2_CANCALIBRATEGAMMA 0x00100000 -#define DDCAPS2_FLIPINTERVAL 0x00200000 -#define DDCAPS2_FLIPNOVSYNC 0x00400000 -#define DDCAPS2_CANMANAGETEXTURE 0x00800000 -#define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000 -#define DDCAPS2_STEREO 0x02000000 -#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000 - - -/* Set/Get Colour Key Flags */ -#define DDCKEY_COLORSPACE 0x00000001 /* Struct is single colour space */ -#define DDCKEY_DESTBLT 0x00000002 /* To be used as dest for blt */ -#define DDCKEY_DESTOVERLAY 0x00000004 /* To be used as dest for CK overlays */ -#define DDCKEY_SRCBLT 0x00000008 /* To be used as src for blt */ -#define DDCKEY_SRCOVERLAY 0x00000010 /* To be used as src for CK overlays */ - -typedef struct _DDCOLORKEY -{ - DWORD dwColorSpaceLowValue;/* low boundary of color space that is to - * be treated as Color Key, inclusive - */ - DWORD dwColorSpaceHighValue;/* high boundary of color space that is - * to be treated as Color Key, inclusive - */ -} DDCOLORKEY,*LPDDCOLORKEY; - -/* ddCKEYCAPS bits */ -#define DDCKEYCAPS_DESTBLT 0x00000001 -#define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002 -#define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004 -#define DDCKEYCAPS_DESTBLTYUV 0x00000008 -#define DDCKEYCAPS_DESTOVERLAY 0x00000010 -#define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020 -#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040 -#define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080 -#define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100 -#define DDCKEYCAPS_SRCBLT 0x00000200 -#define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400 -#define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800 -#define DDCKEYCAPS_SRCBLTYUV 0x00001000 -#define DDCKEYCAPS_SRCOVERLAY 0x00002000 -#define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000 -#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000 -#define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000 -#define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000 -#define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000 - -typedef struct _DDPIXELFORMAT { - DWORD dwSize; /* 0: size of structure */ - DWORD dwFlags; /* 4: pixel format flags */ - DWORD dwFourCC; /* 8: (FOURCC code) */ - __extension__ union { - DWORD dwRGBBitCount; /* C: how many bits per pixel */ - DWORD dwYUVBitCount; /* C: how many bits per pixel */ - DWORD dwZBufferBitDepth; /* C: how many bits for z buffers */ - DWORD dwAlphaBitDepth; /* C: how many bits for alpha channels*/ - DWORD dwLuminanceBitCount; - DWORD dwBumpBitCount; - } DUMMYUNIONNAME1; - __extension__ union { - DWORD dwRBitMask; /* 10: mask for red bit*/ - DWORD dwYBitMask; /* 10: mask for Y bits*/ - DWORD dwStencilBitDepth; - DWORD dwLuminanceBitMask; - DWORD dwBumpDuBitMask; - } DUMMYUNIONNAME2; - __extension__ union { - DWORD dwGBitMask; /* 14: mask for green bits*/ - DWORD dwUBitMask; /* 14: mask for U bits*/ - DWORD dwZBitMask; - DWORD dwBumpDvBitMask; - } DUMMYUNIONNAME3; - __extension__ union { - DWORD dwBBitMask; /* 18: mask for blue bits*/ - DWORD dwVBitMask; /* 18: mask for V bits*/ - DWORD dwStencilBitMask; - DWORD dwBumpLuminanceBitMask; - } DUMMYUNIONNAME4; - __extension__ union { - DWORD dwRGBAlphaBitMask; /* 1C: mask for alpha channel */ - DWORD dwYUVAlphaBitMask; /* 1C: mask for alpha channel */ - DWORD dwLuminanceAlphaBitMask; - DWORD dwRGBZBitMask; /* 1C: mask for Z channel */ - DWORD dwYUVZBitMask; /* 1C: mask for Z channel */ - } DUMMYUNIONNAME5; - /* 20: next structure */ -} DDPIXELFORMAT,*LPDDPIXELFORMAT; - -#ifndef MAKEFOURCC -#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ - ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ - ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) -#endif /* MAKEFOURCC */ - -/* DDCAPS.dwFXCaps */ -#define DDFXCAPS_BLTALPHA 0x00000001 -#define DDFXCAPS_OVERLAYALPHA 0x00000004 -#define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010 -#define DDFXCAPS_BLTARITHSTRETCHY 0x00000020 -#define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040 -#define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080 -#define DDFXCAPS_BLTROTATION 0x00000100 -#define DDFXCAPS_BLTROTATION90 0x00000200 -#define DDFXCAPS_BLTSHRINKX 0x00000400 -#define DDFXCAPS_BLTSHRINKXN 0x00000800 -#define DDFXCAPS_BLTSHRINKY 0x00001000 -#define DDFXCAPS_BLTSHRINKYN 0x00002000 -#define DDFXCAPS_BLTSTRETCHX 0x00004000 -#define DDFXCAPS_BLTSTRETCHXN 0x00008000 -#define DDFXCAPS_BLTSTRETCHY 0x00010000 -#define DDFXCAPS_BLTSTRETCHYN 0x00020000 -#define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000 -#define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008 -#define DDFXCAPS_OVERLAYSHRINKX 0x00080000 -#define DDFXCAPS_OVERLAYSHRINKXN 0x00100000 -#define DDFXCAPS_OVERLAYSHRINKY 0x00200000 -#define DDFXCAPS_OVERLAYSHRINKYN 0x00400000 -#define DDFXCAPS_OVERLAYSTRETCHX 0x00800000 -#define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000 -#define DDFXCAPS_OVERLAYSTRETCHY 0x02000000 -#define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000 -#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000 -#define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000 - -#define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY - -/* DDCAPS.dwFXAlphaCaps */ -#define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001 -#define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002 -#define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004 -#define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008 -#define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010 -#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020 -#define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040 -#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080 -#define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100 -#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200 - -/* DDCAPS.dwPalCaps */ -#define DDPCAPS_4BIT 0x00000001 -#define DDPCAPS_8BITENTRIES 0x00000002 -#define DDPCAPS_8BIT 0x00000004 -#define DDPCAPS_INITIALIZE 0x00000008 -#define DDPCAPS_PRIMARYSURFACE 0x00000010 -#define DDPCAPS_PRIMARYSURFACELEFT 0x00000020 -#define DDPCAPS_ALLOW256 0x00000040 -#define DDPCAPS_VSYNC 0x00000080 -#define DDPCAPS_1BIT 0x00000100 -#define DDPCAPS_2BIT 0x00000200 -#define DDPCAPS_ALPHA 0x00000400 - -/* DDCAPS.dwSVCaps */ -/* the first 4 of these are now obsolete */ -#if DIRECTDRAW_VERSION >= 0x700 /* FIXME: I'm not sure when this switch occurred */ -#define DDSVCAPS_RESERVED1 0x00000001 -#define DDSVCAPS_RESERVED2 0x00000002 -#define DDSVCAPS_RESERVED3 0x00000004 -#define DDSVCAPS_RESERVED4 0x00000008 -#else -#define DDSVCAPS_ENIGMA 0x00000001 -#define DDSVCAPS_FLICKER 0x00000002 -#define DDSVCAPS_REDBLUE 0x00000004 -#define DDSVCAPS_SPLIT 0x00000008 -#endif -#define DDSVCAPS_STEREOSEQUENTIAL 0x00000010 - -/* BitDepths */ -#define DDBD_1 0x00004000 -#define DDBD_2 0x00002000 -#define DDBD_4 0x00001000 -#define DDBD_8 0x00000800 -#define DDBD_16 0x00000400 -#define DDBD_24 0x00000200 -#define DDBD_32 0x00000100 - -/* DDOVERLAYFX.dwDDFX */ -#define DDOVERFX_ARITHSTRETCHY 0x00000001 -#define DDOVERFX_MIRRORLEFTRIGHT 0x00000002 -#define DDOVERFX_MIRRORUPDOWN 0x00000004 - -/* UpdateOverlay flags */ -#define DDOVER_ALPHADEST 0x00000001 -#define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002 -#define DDOVER_ALPHADESTNEG 0x00000004 -#define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008 -#define DDOVER_ALPHAEDGEBLEND 0x00000010 -#define DDOVER_ALPHASRC 0x00000020 -#define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040 -#define DDOVER_ALPHASRCNEG 0x00000080 -#define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100 -#define DDOVER_HIDE 0x00000200 -#define DDOVER_KEYDEST 0x00000400 -#define DDOVER_KEYDESTOVERRIDE 0x00000800 -#define DDOVER_KEYSRC 0x00001000 -#define DDOVER_KEYSRCOVERRIDE 0x00002000 -#define DDOVER_SHOW 0x00004000 -#define DDOVER_ADDDIRTYRECT 0x00008000 -#define DDOVER_REFRESHDIRTYRECTS 0x00010000 -#define DDOVER_REFRESHALL 0x00020000 -#define DDOVER_DDFX 0x00080000 -#define DDOVER_AUTOFLIP 0x00100000 -#define DDOVER_BOB 0x00200000 -#define DDOVER_OVERRIDEBOBWEAVE 0x00400000 -#define DDOVER_INTERLEAVED 0x00800000 - -/* DDCOLORKEY.dwFlags */ -#define DDPF_ALPHAPIXELS 0x00000001 -#define DDPF_ALPHA 0x00000002 -#define DDPF_FOURCC 0x00000004 -#define DDPF_PALETTEINDEXED4 0x00000008 -#define DDPF_PALETTEINDEXEDTO8 0x00000010 -#define DDPF_PALETTEINDEXED8 0x00000020 -#define DDPF_RGB 0x00000040 -#define DDPF_COMPRESSED 0x00000080 -#define DDPF_RGBTOYUV 0x00000100 -#define DDPF_YUV 0x00000200 -#define DDPF_ZBUFFER 0x00000400 -#define DDPF_PALETTEINDEXED1 0x00000800 -#define DDPF_PALETTEINDEXED2 0x00001000 -#define DDPF_ZPIXELS 0x00002000 -#define DDPF_STENCILBUFFER 0x00004000 -#define DDPF_ALPHAPREMULT 0x00008000 -#define DDPF_LUMINANCE 0x00020000 -#define DDPF_BUMPLUMINANCE 0x00040000 -#define DDPF_BUMPDUDV 0x00080000 - -/* SetCooperativeLevel dwFlags */ -#define DDSCL_FULLSCREEN 0x00000001 -#define DDSCL_ALLOWREBOOT 0x00000002 -#define DDSCL_NOWINDOWCHANGES 0x00000004 -#define DDSCL_NORMAL 0x00000008 -#define DDSCL_EXCLUSIVE 0x00000010 -#define DDSCL_ALLOWMODEX 0x00000040 -#define DDSCL_SETFOCUSWINDOW 0x00000080 -#define DDSCL_SETDEVICEWINDOW 0x00000100 -#define DDSCL_CREATEDEVICEWINDOW 0x00000200 -#define DDSCL_MULTITHREADED 0x00000400 -#define DDSCL_FPUSETUP 0x00000800 -#define DDSCL_FPUPRESERVE 0x00001000 - - -/* DDSURFACEDESC.dwFlags */ -#define DDSD_CAPS 0x00000001 -#define DDSD_HEIGHT 0x00000002 -#define DDSD_WIDTH 0x00000004 -#define DDSD_PITCH 0x00000008 -#define DDSD_BACKBUFFERCOUNT 0x00000020 -#define DDSD_ZBUFFERBITDEPTH 0x00000040 -#define DDSD_ALPHABITDEPTH 0x00000080 -#define DDSD_LPSURFACE 0x00000800 -#define DDSD_PIXELFORMAT 0x00001000 -#define DDSD_CKDESTOVERLAY 0x00002000 -#define DDSD_CKDESTBLT 0x00004000 -#define DDSD_CKSRCOVERLAY 0x00008000 -#define DDSD_CKSRCBLT 0x00010000 -#define DDSD_MIPMAPCOUNT 0x00020000 -#define DDSD_REFRESHRATE 0x00040000 -#define DDSD_LINEARSIZE 0x00080000 -#define DDSD_TEXTURESTAGE 0x00100000 -#define DDSD_FVF 0x00200000 -#define DDSD_SRCVBHANDLE 0x00400000 -#define DDSD_DEPTH 0x00800000 -#define DDSD_ALL 0x00fff9ee - -/* EnumSurfaces flags */ -#define DDENUMSURFACES_ALL 0x00000001 -#define DDENUMSURFACES_MATCH 0x00000002 -#define DDENUMSURFACES_NOMATCH 0x00000004 -#define DDENUMSURFACES_CANBECREATED 0x00000008 -#define DDENUMSURFACES_DOESEXIST 0x00000010 - -/* SetDisplayMode flags */ -#define DDSDM_STANDARDVGAMODE 0x00000001 - -/* EnumDisplayModes flags */ -#define DDEDM_REFRESHRATES 0x00000001 -#define DDEDM_STANDARDVGAMODES 0x00000002 - -/* WaitForVerticalDisplay flags */ - -#define DDWAITVB_BLOCKBEGIN 0x00000001 -#define DDWAITVB_BLOCKBEGINEVENT 0x00000002 -#define DDWAITVB_BLOCKEND 0x00000004 - -typedef struct _DDSURFACEDESC -{ - DWORD dwSize; /* 0: size of the DDSURFACEDESC structure*/ - DWORD dwFlags; /* 4: determines what fields are valid*/ - DWORD dwHeight; /* 8: height of surface to be created*/ - DWORD dwWidth; /* C: width of input surface*/ - __extension__ union { - LONG lPitch; /* 10: distance to start of next line (return value only)*/ - DWORD dwLinearSize; - } DUMMYUNIONNAME1; - DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ - __extension__ union { - DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ - DWORD dwZBufferBitDepth;/*18: depth of Z buffer requested*/ - DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ - } DUMMYUNIONNAME2; - DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ - DWORD dwReserved; /* 20:reserved*/ - LPVOID lpSurface; /* 24:pointer to the associated surface memory*/ - DDCOLORKEY ddckCKDestOverlay;/* 28: CK for dest overlay use*/ - DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ - DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ - DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ - DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ - DDSCAPS ddsCaps; /* 68: direct draw surface caps */ -} DDSURFACEDESC,*LPDDSURFACEDESC; - -typedef struct _DDSURFACEDESC2 -{ - DWORD dwSize; /* 0: size of the DDSURFACEDESC2 structure*/ - DWORD dwFlags; /* 4: determines what fields are valid*/ - DWORD dwHeight; /* 8: height of surface to be created*/ - DWORD dwWidth; /* C: width of input surface*/ - __extension__ union { - LONG lPitch; /*10: distance to start of next line (return value only)*/ - DWORD dwLinearSize; /*10: formless late-allocated optimized surface size */ - } DUMMYUNIONNAME1; - DWORD dwBackBufferCount;/* 14: number of back buffers requested*/ - __extension__ union { - DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/ - DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/ - DWORD dwSrcVBHandle;/* 18:source used in VB::Optimize */ - } DUMMYUNIONNAME2; - DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/ - DWORD dwReserved; /* 20:reserved*/ - LPVOID lpSurface; /* 24:pointer to the associated surface memory*/ - __extension__ union { - DDCOLORKEY ddckCKDestOverlay; /* 28: CK for dest overlay use*/ - DWORD dwEmptyFaceColor; /* 28: color for empty cubemap faces */ - } DUMMYUNIONNAME3; - DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/ - DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/ - DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/ - - __extension__ union { - DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/ - DWORD dwFVF; /* 48: vertex format description of vertex buffers */ - } DUMMYUNIONNAME4; - DDSCAPS2 ddsCaps; /* 68: DDraw surface caps */ - DWORD dwTextureStage; /* 78: stage in multitexture cascade */ -} DDSURFACEDESC2,*LPDDSURFACEDESC2; - - -typedef struct _DDARGB { - BYTE blue; - BYTE green; - BYTE red; - BYTE alpha; -} DDARGB, *LPDDARGB; - -typedef struct _DDRGBA { - BYTE red; - BYTE green; - BYTE blue; - BYTE alpha; -} DDRGBA, *LPDDRGBA; - - -/* DDCOLORCONTROL.dwFlags */ -#define DDCOLOR_BRIGHTNESS 0x00000001 -#define DDCOLOR_CONTRAST 0x00000002 -#define DDCOLOR_HUE 0x00000004 -#define DDCOLOR_SATURATION 0x00000008 -#define DDCOLOR_SHARPNESS 0x00000010 -#define DDCOLOR_GAMMA 0x00000020 -#define DDCOLOR_COLORENABLE 0x00000040 - -typedef struct { - DWORD dwSize; - DWORD dwFlags; - LONG lBrightness; - LONG lContrast; - LONG lHue; - LONG lSaturation; - LONG lSharpness; - LONG lGamma; - LONG lColorEnable; - DWORD dwReserved1; -} DDCOLORCONTROL,*LPDDCOLORCONTROL; - -typedef struct { - WORD red[256]; - WORD green[256]; - WORD blue[256]; -} DDGAMMARAMP,*LPDDGAMMARAMP; - -typedef BOOL (CALLBACK *LPDDENUMCALLBACKA)(GUID *, LPSTR, LPSTR, LPVOID); -typedef BOOL (CALLBACK *LPDDENUMCALLBACKW)(GUID *, LPWSTR, LPWSTR, LPVOID); -DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK) - -typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID); -typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID); -typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID); -typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID); -typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID); - -typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXA)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR); -typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR); -DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX) - -HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA,LPVOID); -HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW,LPVOID); -#define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate) - -HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); -HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); -#define DirectDrawEnumerateEx WINELIB_NAME_AW(DirectDrawEnumerateEx) - -typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); -typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); -DECL_WINELIB_TYPE_AW(LPDIRECTDRAWENUMERATEEX) - -/* flags for DirectDrawEnumerateEx */ -#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001 -#define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002 -#define DDENUM_NONDISPLAYDEVICES 0x00000004 - -/* flags for DirectDrawCreate or IDirectDraw::Initialize */ -#define DDCREATE_HARDWAREONLY 1L -#define DDCREATE_EMULATIONONLY 2L - -typedef struct _DDBLTFX -{ - DWORD dwSize; /* size of structure */ - DWORD dwDDFX; /* FX operations */ - DWORD dwROP; /* Win32 raster operations */ - DWORD dwDDROP; /* Raster operations new for DirectDraw */ - DWORD dwRotationAngle; /* Rotation angle for blt */ - DWORD dwZBufferOpCode; /* ZBuffer compares */ - DWORD dwZBufferLow; /* Low limit of Z buffer */ - DWORD dwZBufferHigh; /* High limit of Z buffer */ - DWORD dwZBufferBaseDest; /* Destination base value */ - DWORD dwZDestConstBitDepth; /* Bit depth used to specify Z constant for destination */ - __extension__ union - { - DWORD dwZDestConst; /* Constant to use as Z buffer for dest */ - LPDIRECTDRAWSURFACE lpDDSZBufferDest; /* Surface to use as Z buffer for dest */ - } DUMMYUNIONNAME1; - DWORD dwZSrcConstBitDepth; /* Bit depth used to specify Z constant for source */ - __extension__ union - { - DWORD dwZSrcConst; /* Constant to use as Z buffer for src */ - LPDIRECTDRAWSURFACE lpDDSZBufferSrc; /* Surface to use as Z buffer for src */ - } DUMMYUNIONNAME2; - DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ - DWORD dwAlphaEdgeBlend; /* Alpha for edge blending */ - DWORD dwReserved; - DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ - __extension__ union - { - DWORD dwAlphaDestConst; /* Constant to use as Alpha Channel */ - LPDIRECTDRAWSURFACE lpDDSAlphaDest; /* Surface to use as Alpha Channel */ - } DUMMYUNIONNAME3; - DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ - __extension__ union - { - DWORD dwAlphaSrcConst; /* Constant to use as Alpha Channel */ - LPDIRECTDRAWSURFACE lpDDSAlphaSrc; /* Surface to use as Alpha Channel */ - } DUMMYUNIONNAME4; - __extension__ union - { - DWORD dwFillColor; /* color in RGB or Palettized */ - DWORD dwFillDepth; /* depth value for z-buffer */ - DWORD dwFillPixel; /* pixel val for RGBA or RGBZ */ - LPDIRECTDRAWSURFACE lpDDSPattern; /* Surface to use as pattern */ - } DUMMYUNIONNAME5; - DDCOLORKEY ddckDestColorkey; /* DestColorkey override */ - DDCOLORKEY ddckSrcColorkey; /* SrcColorkey override */ -} DDBLTFX,*LPDDBLTFX; - -/* dwDDFX */ -/* arithmetic stretching along y axis */ -#define DDBLTFX_ARITHSTRETCHY 0x00000001 -/* mirror on y axis */ -#define DDBLTFX_MIRRORLEFTRIGHT 0x00000002 -/* mirror on x axis */ -#define DDBLTFX_MIRRORUPDOWN 0x00000004 -/* do not tear */ -#define DDBLTFX_NOTEARING 0x00000008 -/* 180 degrees clockwise rotation */ -#define DDBLTFX_ROTATE180 0x00000010 -/* 270 degrees clockwise rotation */ -#define DDBLTFX_ROTATE270 0x00000020 -/* 90 degrees clockwise rotation */ -#define DDBLTFX_ROTATE90 0x00000040 -/* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */ -#define DDBLTFX_ZBUFFERRANGE 0x00000080 -/* add dwZBufferBaseDest to every source z value before compare */ -#define DDBLTFX_ZBUFFERBASEDEST 0x00000100 - -typedef struct _DDOVERLAYFX -{ - DWORD dwSize; /* size of structure */ - DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */ - DWORD dwAlphaEdgeBlend; /* Constant to use as alpha for edge blend */ - DWORD dwReserved; - DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */ - __extension__ union - { - DWORD dwAlphaDestConst; /* Constant to use as alpha channel for dest */ - LPDIRECTDRAWSURFACE lpDDSAlphaDest; /* Surface to use as alpha channel for dest */ - } DUMMYUNIONNAME1; - DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */ - __extension__ union - { - DWORD dwAlphaSrcConst; /* Constant to use as alpha channel for src */ - LPDIRECTDRAWSURFACE lpDDSAlphaSrc; /* Surface to use as alpha channel for src */ - } DUMMYUNIONNAME2; - DDCOLORKEY dckDestColorkey; /* DestColorkey override */ - DDCOLORKEY dckSrcColorkey; /* DestColorkey override */ - DWORD dwDDFX; /* Overlay FX */ - DWORD dwFlags; /* flags */ -} DDOVERLAYFX,*LPDDOVERLAYFX; - -typedef struct _DDBLTBATCH -{ - LPRECT lprDest; - LPDIRECTDRAWSURFACE lpDDSSrc; - LPRECT lprSrc; - DWORD dwFlags; - LPDDBLTFX lpDDBltFx; -} DDBLTBATCH,*LPDDBLTBATCH; - -#define MAX_DDDEVICEID_STRING 512 - -#define DDGDI_GETHOSTIDENTIFIER 1 - -typedef struct tagDDDEVICEIDENTIFIER { - char szDriver[MAX_DDDEVICEID_STRING]; - char szDescription[MAX_DDDEVICEID_STRING]; - LARGE_INTEGER liDriverVersion; - DWORD dwVendorId; - DWORD dwDeviceId; - DWORD dwSubSysId; - DWORD dwRevision; - GUID guidDeviceIdentifier; -} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; - -typedef struct tagDDDEVICEIDENTIFIER2 { - char szDriver[MAX_DDDEVICEID_STRING]; /* user readable driver name */ - char szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */ - LARGE_INTEGER liDriverVersion; /* driver version */ - DWORD dwVendorId; /* vendor ID, zero if unknown */ - DWORD dwDeviceId; /* chipset ID, zero if unknown */ - DWORD dwSubSysId; /* board ID, zero if unknown */ - DWORD dwRevision; /* chipset version, zero if unknown */ - GUID guidDeviceIdentifier; /* unique ID for this driver/chipset combination */ - DWORD dwWHQLLevel; /* Windows Hardware Quality Lab certification level */ -} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; - -/***************************************************************************** - * IDirectDrawPalette interface - */ -#undef INTERFACE -#define INTERFACE IDirectDrawPalette -DECLARE_INTERFACE_(IDirectDrawPalette,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawPalette methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE; - STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) PURE; - STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawPalette methods ***/ -#define IDirectDrawPalette_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->lpVtbl->GetEntries(p,a,b,c,d) -#define IDirectDrawPalette_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) -#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->lpVtbl->SetEntries(p,a,b,c,d) -#else -/*** IUnknown methods ***/ -#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawPalette_AddRef(p) (p)->AddRef() -#define IDirectDrawPalette_Release(p) (p)->Release() -/*** IDirectDrawPalette methods ***/ -#define IDirectDrawPalette_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->GetEntries(a,b,c,d) -#define IDirectDrawPalette_Initialize(p,a,b,c) (p)->Initialize(a,b,c) -#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->SetEntries(a,b,c,d) -#endif - - -/***************************************************************************** - * IDirectDrawClipper interface - */ -#define INTERFACE IDirectDrawClipper -DECLARE_INTERFACE_(IDirectDrawClipper,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawClipper methods ***/ - STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE; - STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, DWORD dwFlags) PURE; - STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE; - STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE; - STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawClipper methods ***/ -#define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->lpVtbl->GetClipList(p,a,b,c) -#define IDirectDrawClipper_GetHWnd(p,a) (p)->lpVtbl->GetHWnd(p,a) -#define IDirectDrawClipper_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->lpVtbl->IsClipListChanged(p,a) -#define IDirectDrawClipper_SetClipList(p,a,b) (p)->lpVtbl->SetClipList(p,a,b) -#define IDirectDrawClipper_SetHWnd(p,a,b) (p)->lpVtbl->SetHWnd(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawClipper_AddRef(p) (p)->AddRef() -#define IDirectDrawClipper_Release(p) (p)->Release() -/*** IDirectDrawClipper methods ***/ -#define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->GetClipList(a,b,c) -#define IDirectDrawClipper_GetHWnd(p,a) (p)->GetHWnd(a) -#define IDirectDrawClipper_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->IsClipListChanged(a) -#define IDirectDrawClipper_SetClipList(p,a,b) (p)->SetClipList(a,b) -#define IDirectDrawClipper_SetHWnd(p,a,b) (p)->SetHWnd(a,b) -#endif - - -/***************************************************************************** - * IDirectDraw interface - */ -#define INTERFACE IDirectDraw -DECLARE_INTERFACE_(IDirectDraw,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE *lplpDDSurface, IUnknown *pUnkOuter) PURE; - STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSurface, LPDIRECTDRAWSURFACE *lplpDupDDSurface) PURE; - STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; - STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *lplpGDIDDSurface) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; - STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDraw_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDraw methods ***/ -#define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) -#define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) -#define IDirectDraw_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) -#define IDirectDraw_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) -#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) -#define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) -#define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectDraw_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) -#define IDirectDraw_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) -#define IDirectDraw_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) -#define IDirectDraw_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) -#define IDirectDraw_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) -#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) -#define IDirectDraw_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->lpVtbl->SetDisplayMode(p,a,b,c) -#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDraw_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDraw_AddRef(p) (p)->AddRef() -#define IDirectDraw_Release(p) (p)->Release() -/*** IDirectDraw methods ***/ -#define IDirectDraw_Compact(p) (p)->Compact() -#define IDirectDraw_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) -#define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) -#define IDirectDraw_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) -#define IDirectDraw_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) -#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) -#define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) -#define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectDraw_GetDisplayMode(p,a) (p)->GetDisplayMode(a) -#define IDirectDraw_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) -#define IDirectDraw_GetGDISurface(p,a) (p)->GetGDISurface(a) -#define IDirectDraw_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) -#define IDirectDraw_GetScanLine(p,a) (p)->GetScanLine(a) -#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw_Initialize(p,a) (p)->Initialize(a) -#define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->SetDisplayMode(a,b,c) -#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) -#endif - - -/* flags for Lock() */ -#define DDLOCK_SURFACEMEMORYPTR 0x00000000 -#define DDLOCK_WAIT 0x00000001 -#define DDLOCK_EVENT 0x00000002 -#define DDLOCK_READONLY 0x00000010 -#define DDLOCK_WRITEONLY 0x00000020 -#define DDLOCK_NOSYSLOCK 0x00000800 -#define DDLOCK_NOOVERWRITE 0x00001000 -#define DDLOCK_DISCARDCONTENTS 0x00002000 - - -/***************************************************************************** - * IDirectDraw2 interface - */ -/* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of - * arguments of SetDisplayMode has changed ! - */ -#define INTERFACE IDirectDraw2 -DECLARE_INTERFACE_(IDirectDraw2,IUnknown) -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDraw2 methods ***/ -/*0c*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE *lplpDDSurface, IUnknown *pUnkOuter) PURE; -/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSurface, LPDIRECTDRAWSURFACE *lplpDupDDSurface) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2c*/ STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; -/*30*/ STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *lplpGDIDDSurface) PURE; -/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; -/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; - /* added in v2 */ -/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDraw2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDraw methods ***/ -#define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw2_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) -#define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) -#define IDirectDraw2_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) -#define IDirectDraw2_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) -#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) -#define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) -#define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectDraw2_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) -#define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) -#define IDirectDraw2_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) -#define IDirectDraw2_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) -#define IDirectDraw2_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) -#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) -#define IDirectDraw2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) -#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) -#else -/*** IUnknown methods ***/ -#define IDirectDraw2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDraw2_AddRef(p) (p)->AddRef() -#define IDirectDraw2_Release(p) (p)->Release() -/*** IDirectDraw methods ***/ -#define IDirectDraw2_Compact(p) (p)->Compact() -#define IDirectDraw2_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) -#define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) -#define IDirectDraw2_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) -#define IDirectDraw2_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) -#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) -#define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) -#define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw2_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectDraw2_GetDisplayMode(p,a) (p)->GetDisplayMode(a) -#define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) -#define IDirectDraw2_GetGDISurface(p,a) (p)->GetGDISurface(a) -#define IDirectDraw2_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) -#define IDirectDraw2_GetScanLine(p,a) (p)->GetScanLine(a) -#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw2_Initialize(p,a) (p)->Initialize(a) -#define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) -#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) -#endif - - -/***************************************************************************** - * IDirectDraw3 interface - */ -#define INTERFACE IDirectDraw3 -DECLARE_INTERFACE_(IDirectDraw3,IUnknown) -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDraw2 methods ***/ -/*0c*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE *lplpDDSurface, IUnknown *pUnkOuter) PURE; -/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSurface, LPDIRECTDRAWSURFACE *lplpDupDDSurface) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2c*/ STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; -/*30*/ STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *lplpGDIDDSurface) PURE; -/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; -/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; - /* added in v2 */ -/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) PURE; - /* added in v3 */ -/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC hdc, LPDIRECTDRAWSURFACE *pSurf) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDraw3_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw3_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDraw methods ***/ -#define IDirectDraw3_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw3_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) -#define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) -#define IDirectDraw3_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) -#define IDirectDraw3_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) -#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) -#define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) -#define IDirectDraw3_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectDraw3_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) -#define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) -#define IDirectDraw3_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) -#define IDirectDraw3_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) -#define IDirectDraw3_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) -#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) -#define IDirectDraw3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectDraw3_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) -#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) -/*** IDirectDraw3 methods ***/ -#define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDraw3_AddRef(p) (p)->AddRef() -#define IDirectDraw3_Release(p) (p)->Release() -/*** IDirectDraw methods ***/ -#define IDirectDraw3_Compact(p) (p)->Compact() -#define IDirectDraw3_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) -#define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) -#define IDirectDraw3_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) -#define IDirectDraw3_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) -#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) -#define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) -#define IDirectDraw3_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw3_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectDraw3_GetDisplayMode(p,a) (p)->GetDisplayMode(a) -#define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) -#define IDirectDraw3_GetGDISurface(p,a) (p)->GetGDISurface(a) -#define IDirectDraw3_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) -#define IDirectDraw3_GetScanLine(p,a) (p)->GetScanLine(a) -#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw3_Initialize(p,a) (p)->Initialize(a) -#define IDirectDraw3_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) -#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) -/*** IDirectDraw3 methods ***/ -#define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) -#endif - - -/***************************************************************************** - * IDirectDraw4 interface - */ -#define INTERFACE IDirectDraw4 -DECLARE_INTERFACE_(IDirectDraw4,IUnknown) -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDraw4 methods ***/ -/*0c*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc, LPDIRECTDRAWSURFACE4 *lplpDDSurface, IUnknown *pUnkOuter) PURE; -/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE4 lpDDSurface, LPDIRECTDRAWSURFACE4 *lplpDupDDSurface) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK2 lpEnumModesCallback) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC2 lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK2 lpEnumSurfacesCallback) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2c*/ STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; -/*30*/ STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 *lplpGDIDDSurface) PURE; -/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; -/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; - /* added in v2 */ -/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2 lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) PURE; - /* added in v4 */ -/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC hdc, LPDIRECTDRAWSURFACE4 *pSurf) PURE; -/*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE; -/*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; -/*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDraw4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDraw methods ***/ -#define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw4_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) -#define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) -#define IDirectDraw4_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) -#define IDirectDraw4_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) -#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) -#define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) -#define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw4_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectDraw4_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) -#define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) -#define IDirectDraw4_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) -#define IDirectDraw4_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) -#define IDirectDraw4_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) -#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) -#define IDirectDraw4_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) -#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) -/*** IDirectDraw4 methods ***/ -#define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) -#define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) -#define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) -#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDraw4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDraw4_AddRef(p) (p)->AddRef() -#define IDirectDraw4_Release(p) (p)->Release() -/*** IDirectDraw methods ***/ -#define IDirectDraw4_Compact(p) (p)->Compact() -#define IDirectDraw4_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) -#define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) -#define IDirectDraw4_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) -#define IDirectDraw4_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) -#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) -#define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) -#define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw4_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectDraw4_GetDisplayMode(p,a) (p)->GetDisplayMode(a) -#define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) -#define IDirectDraw4_GetGDISurface(p,a) (p)->GetGDISurface(a) -#define IDirectDraw4_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) -#define IDirectDraw4_GetScanLine(p,a) (p)->GetScanLine(a) -#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw4_Initialize(p,a) (p)->Initialize(a) -#define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) -#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) -/*** IDirectDraw2 methods ***/ -#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) -/*** IDirectDraw4 methods ***/ -#define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) -#define IDirectDraw4_RestoreAllSurfaces(pc) (p)->RestoreAllSurfaces() -#define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel() -#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) -#endif - - -/***************************************************************************** - * IDirectDraw7 interface - */ -/* Note: IDirectDraw7 cannot derive from IDirectDraw4; it is even documented - * as not interchangeable with earlier DirectDraw interfaces. - */ -#define INTERFACE IDirectDraw7 -DECLARE_INTERFACE_(IDirectDraw7,IUnknown) -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDraw7 methods ***/ -/*0c*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc, LPDIRECTDRAWSURFACE7 *lplpDDSurface, IUnknown *pUnkOuter) PURE; -/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE7 lpDDSurface, LPDIRECTDRAWSURFACE7 *lplpDupDDSurface) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK2 lpEnumModesCallback) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC2 lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK7 lpEnumSurfacesCallback) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2c*/ STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; -/*30*/ STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 *lplpGDIDDSurface) PURE; -/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; -/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; - /* added in v2 */ -/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2 lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) PURE; - /* added in v4 */ -/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC hdc, LPDIRECTDRAWSURFACE7 *pSurf) PURE; -/*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE; -/*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; -/*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags) PURE; - /* added in v7 */ -/*70*/ STDMETHOD(StartModeTest)(THIS_ LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) PURE; -/*74*/ STDMETHOD(EvaluateMode)(THIS_ DWORD dwFlags, DWORD *pTimeout) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDraw7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDraw methods ***/ -#define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw7_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) -#define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) -#define IDirectDraw7_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) -#define IDirectDraw7_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) -#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) -#define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) -#define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw7_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectDraw7_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) -#define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) -#define IDirectDraw7_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) -#define IDirectDraw7_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) -#define IDirectDraw7_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) -#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) -#define IDirectDraw7_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) -#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) -/*** added in IDirectDraw2 ***/ -#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) -/*** added in IDirectDraw4 ***/ -#define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) -#define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) -#define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) -#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) -/*** added in IDirectDraw 7 ***/ -#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c) -#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDraw7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDraw7_AddRef(p) (p)->AddRef() -#define IDirectDraw7_Release(p) (p)->Release() -/*** IDirectDraw methods ***/ -#define IDirectDraw7_Compact(p) (p)->Compact() -#define IDirectDraw7_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) -#define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) -#define IDirectDraw7_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) -#define IDirectDraw7_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) -#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) -#define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) -#define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw7_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectDraw7_GetDisplayMode(p,a) (p)->GetDisplayMode(a) -#define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) -#define IDirectDraw7_GetGDISurface(p,a) (p)->GetGDISurface(a) -#define IDirectDraw7_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) -#define IDirectDraw7_GetScanLine(p,a) (p)->GetScanLine(a) -#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw7_Initialize(p,a) (p)->Initialize(a) -#define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) -#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) -/*** added in IDirectDraw2 ***/ -#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) -/*** added in IDirectDraw4 ***/ -#define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) -#define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() -#define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel() -#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) -/*** added in IDirectDraw 7 ***/ -#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->StartModeTest(a,b,c) -#define IDirectDraw7_EvaluateMode(p,a,b) (p)->EvaluateMode(a,b) -#endif - - -/***************************************************************************** - * IDirectDrawSurface interface - */ -#define INTERFACE IDirectDrawSurface -DECLARE_INTERFACE_(IDirectDrawSurface,IUnknown) -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawSurface methods ***/ -/*0c*/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSAttachedSurface) PURE; -/*10*/ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; -/*14*/ STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; -/*18*/ STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; -/*1c*/ STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; -/*20*/ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) PURE; -/*24*/ STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; -/*28*/ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) PURE; -/*2c*/ STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; -/*30*/ STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE *lplpDDAttachedSurface) PURE; -/*34*/ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; -/*38*/ STDMETHOD(GetCaps)(THIS_ LPDDSCAPS lpDDSCaps) PURE; -/*3c*/ STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; -/*40*/ STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; -/*44*/ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; -/*48*/ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; -/*4c*/ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; -/*50*/ STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; -/*54*/ STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; -/*58*/ STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; -/*5c*/ STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) PURE; -/*60*/ STDMETHOD(IsLost)(THIS) PURE; -/*64*/ STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; -/*68*/ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; -/*6c*/ STDMETHOD(Restore)(THIS) PURE; -/*70*/ STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; -/*74*/ STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; -/*78*/ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; -/*7c*/ STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; -/*80*/ STDMETHOD(Unlock)(THIS_ LPVOID lpSurfaceData) PURE; -/*84*/ STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; -/*88*/ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; -/*8c*/ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSReference) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawSurface methods ***/ -#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) -#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface_Release(p) (p)->Release() -/*** IDirectDrawSurface methods ***/ -#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface_Restore(p) (p)->Restore() -#define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface_Unlock(p,a) (p)->Unlock(a) -#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#endif - - -/***************************************************************************** - * IDirectDrawSurface2 interface - */ -/* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters - * have been converted to LPDIRECTDRAWSURFACE2. - */ -#define INTERFACE IDirectDrawSurface2 -DECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawSurface2 methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2 lpDDSAttachedSurface) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; - STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE2 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; - STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE2 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE2 lpDDSAttachedSurface) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2 lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE2 *lplpDDAttachedSurface) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS lpDDSCaps) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID lpSurfaceData) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE2 lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE2 lpDDSReference) PURE; - /* added in v2 */ - STDMETHOD(GetDDInterface)(THIS_ LPVOID *lplpDD) PURE; - STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawSurface methods (almost) ***/ -#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface2_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface2_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) -#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface2_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface2_Release(p) (p)->Release() -/*** IDirectDrawSurface methods (almost) ***/ -#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface2_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface2_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface2_Restore(p) (p)->Restore() -#define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface2_Unlock(p,a) (p)->Unlock(a) -#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a) -#endif - - -/***************************************************************************** - * IDirectDrawSurface3 interface - */ -/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters - * have been converted to LPDIRECTDRAWSURFACE3. - */ -#define INTERFACE IDirectDrawSurface3 -DECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawSurface3 methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3 lpDDSAttachedSurface) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; - STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE3 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; - STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE3 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE3 lpDDSAttachedSurface) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3 lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE3 *lplpDDAttachedSurface) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS lpDDSCaps) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID lpSurfaceData) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE3 lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE3 lpDDSReference) PURE; - /* added in v2 */ - STDMETHOD(GetDDInterface)(THIS_ LPVOID *lplpDD) PURE; - STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; - /* added in v3 */ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC lpDDSD, DWORD dwFlags) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawSurface methods (almost) ***/ -#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface3_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface3_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) -#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface3_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface3_Release(p) (p)->Release() -/*** IDirectDrawSurface methods (almost) ***/ -#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface3_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface3_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface3_Restore(p) (p)->Restore() -#define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface3_Unlock(p,a) (p)->Unlock(a) -#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -#endif - - -/***************************************************************************** - * IDirectDrawSurface4 interface - */ -/* Cannot inherit from IDirectDrawSurface2 because DDSCAPS changed to DDSCAPS2. - */ -#define INTERFACE IDirectDrawSurface4 -DECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawSurface4 methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4 lpDDSAttachedSurface) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; - STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE4 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; - STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE4 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE4 lpDDSAttachedSurface) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK2 lpEnumSurfacesCallback) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK2 lpfnCallback) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4 lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2 lpDDSCaps, LPDIRECTDRAWSURFACE4 *lplpDDAttachedSurface) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2 lpDDSCaps) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC2 lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; - STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE4 lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE4 lpDDSReference) PURE; - /* added in v2 */ - STDMETHOD(GetDDInterface)(THIS_ LPVOID *lplpDD) PURE; - STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; - /* added in v3 */ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2 lpDDSD, DWORD dwFlags) PURE; - /* added in v4 */ - STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, LPVOID pData, DWORD cbSize, DWORD dwFlags) PURE; - STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, LPVOID pBuffer, LPDWORD pcbBufferSize) PURE; - STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE; - STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE; - STDMETHOD(ChangeUniquenessValue)(THIS) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawSurface (almost) methods ***/ -#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface4_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface4_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) -#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -/*** IDirectDrawSurface4 methods ***/ -#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) -#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) -#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) -#define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a) -#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) -#else -/*** IUnknown methods ***/ -#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface4_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface4_Release(p) (p)->Release() -/*** IDirectDrawSurface (almost) methods ***/ -#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface4_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface4_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface4_Restore(p) (p)->Restore() -#define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface4_Unlock(p,a) (p)->Unlock(a) -#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -/*** IDirectDrawSurface4 methods ***/ -#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) -#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) -#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a) -#define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a) -#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() -#endif - - -/***************************************************************************** - * IDirectDrawSurface7 interface - */ -#define INTERFACE IDirectDrawSurface7 -DECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawSurface7 methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7 lpDDSAttachedSurface) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; - STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE7 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; - STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE7 lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE7 lpDDSAttachedSurface) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK7 lpEnumSurfacesCallback) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK7 lpfnCallback) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7 lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2 lpDDSCaps, LPDIRECTDRAWSURFACE7 *lplpDDAttachedSurface) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2 lpDDSCaps) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC2 lpDDSurfaceDesc) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC2 lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; - STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE7 lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE7 lpDDSReference) PURE; - /* added in v2 */ - STDMETHOD(GetDDInterface)(THIS_ LPVOID *lplpDD) PURE; - STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE; - /* added in v3 */ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2 lpDDSD, DWORD dwFlags) PURE; - /* added in v4 */ - STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, LPVOID pData, DWORD cbSize, DWORD dwFlags) PURE; - STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, LPVOID pBuffer, LPDWORD pcbBufferSize) PURE; - STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE; - STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE; - STDMETHOD(ChangeUniquenessValue)(THIS) PURE; - /* added in v7 */ - STDMETHOD(SetPriority)(THIS_ DWORD prio) PURE; - STDMETHOD(GetPriority)(THIS_ LPDWORD prio) PURE; - STDMETHOD(SetLOD)(THIS_ DWORD lod) PURE; - STDMETHOD(GetLOD)(THIS_ LPDWORD lod) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawSurface (almost) methods ***/ -#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface7_Unlock(p,a) (p)->lpVtbl->Unlock(p,a) -#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -/*** IDirectDrawSurface4 methods ***/ -#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) -#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) -#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) -#define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a) -#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) -/*** IDirectDrawSurface7 methods ***/ -#define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) -#define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a) -#define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) -#define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface7_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface7_Release(p) (p)->Release() -/*** IDirectDrawSurface (almost) methods ***/ -#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface7_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface7_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface7_Restore(p) (p)->Restore() -#define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface7_Unlock(p,a) (p)->Unlock(a) -#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -/*** IDirectDrawSurface2 methods ***/ -#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a) -/*** IDirectDrawSurface3 methods ***/ -#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -/*** IDirectDrawSurface4 methods ***/ -#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) -#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) -#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a) -#define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a) -#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() -/*** IDirectDrawSurface7 methods ***/ -#define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a) -#define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a) -#define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a) -#define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a) -#endif - -/***************************************************************************** - * IDirectDrawColorControl interface - */ -#define INTERFACE IDirectDrawColorControl -DECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawColorControl methods ***/ - STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL lpColorControl) PURE; - STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL lpColorControl) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawColorControl methods ***/ -#define IDirectDrawColorControl_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a) -#define IDirectDrawColorControl_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawColorControl_AddRef(p) (p)->AddRef() -#define IDirectDrawColorControl_Release(p) (p)->Release() -/*** IDirectDrawColorControl methods ***/ -#define IDirectDrawColorControl_GetColorControls(p,a) (p)->GetColorControls(a) -#define IDirectDrawColorControl_SetColorControls(p,a) (p)->SetColorControls(a) -#endif - -/***************************************************************************** - * IDirectDrawGammaControl interface - */ -#define INTERFACE IDirectDrawGammaControl -DECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectDrawGammaControl methods ***/ - STDMETHOD(GetGammaRamp)(THIS_ DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp) PURE; - STDMETHOD(SetGammaRamp)(THIS_ DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectDrawGammaControl methods ***/ -#define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) -#define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawGammaControl_AddRef(p) (p)->AddRef() -#define IDirectDrawGammaControl_Release(p) (p)->Release() -/*** IDirectDrawGammaControl methods ***/ -#define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) -#define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b) -#endif - - -HRESULT WINAPI DirectDrawCreate(GUID*,LPDIRECTDRAW*,IUnknown*); -HRESULT WINAPI DirectDrawCreateEx(GUID*,LPVOID*,REFIID,IUnknown*); -HRESULT WINAPI DirectDrawCreateClipper(DWORD,LPDIRECTDRAWCLIPPER*,IUnknown*); - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - -#endif /* __DDRAW_INCLUDED__ */ diff --git a/3rdparty/include/dshow/dshow.h b/3rdparty/include/dshow/dshow.h deleted file mode 100644 index 2587b2f..0000000 --- a/3rdparty/include/dshow/dshow.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2002 Alexandre Julliard - * - * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __DSHOW_INCLUDED__ -#define __DSHOW_INCLUDED__ - -#define AM_NOVTABLE - -#ifndef __WINESRC__ -# include -# include -#else -# include -# include -# include -#endif -#include -#include -#include -/* FIXME: #include */ - -#ifndef NUMELMS -#define NUMELMS(array) (sizeof(array)/sizeof((array)[0])) -#endif - -#include -#include -#ifdef DSHOW_USE_AMAUDIO -/* FIXME: #include */ -#endif -#include -#include -#include -#include -/* FIXME: #include */ -#include -/* FIXME: #include */ - -#ifndef OATRUE -#define OATRUE (-1) -#endif -#ifndef OAFALSE -#define OAFALSE (0) -#endif - -#endif /* __DSHOW_INCLUDED__ */ diff --git a/3rdparty/include/dshow/dsound.h b/3rdparty/include/dshow/dsound.h deleted file mode 100644 index 4140a6d..0000000 --- a/3rdparty/include/dshow/dsound.h +++ /dev/null @@ -1,1199 +0,0 @@ -#include -#undef INTERFACE -/* - * Copyright (C) the Wine project - * - * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __DSOUND_INCLUDED__ -#define __DSOUND_INCLUDED__ - -#ifndef DIRECTSOUND_VERSION -#define DIRECTSOUND_VERSION 0x0900 -#endif - -#define COM_NO_WINDOWS_H -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* defined(__cplusplus) */ - -#ifndef DX_SHARED_DEFINES - -typedef float D3DVALUE, *LPD3DVALUE; - -#ifndef D3DCOLOR_DEFINED -typedef DWORD D3DCOLOR, *LPD3DCOLOR; -#define D3DCOLOR_DEFINED -#endif - -#ifndef D3DVECTOR_DEFINED -typedef struct _D3DVECTOR { - float x; - float y; - float z; -} D3DVECTOR; -#define D3DVECTOR_DEFINED -#endif - -#ifndef LPD3DVECTOR_DEFINED -typedef D3DVECTOR *LPD3DVECTOR; -#define LPD3DVECTOR_DEFINED -#endif - -#define DX_SHARED_DEFINES -#endif /* DX_SHARED_DEFINES */ - -/***************************************************************************** - * Predeclare the interfaces - */ -DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00); -DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); -DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16); -DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); -DEFINE_GUID(CLSID_DirectSoundFullDuplex,0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); - -DEFINE_GUID(IID_IDirectSound, 0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); -typedef struct IDirectSound *LPDIRECTSOUND,**LPLPDIRECTSOUND; - -DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93,0xF395,0x4834,0x9E,0xF6,0x7F,0xA9,0x9D,0xE5,0x09,0x66); -typedef struct IDirectSound8 *LPDIRECTSOUND8,**LPLPDIRECTSOUND8; - -DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); -typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER; - -DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825A449,0x7524,0x4D82,0x92,0x0F,0x50,0xE3,0x6A,0xB3,0xAB,0x1E); -typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8,**LPLPDIRECTSOUNDBUFFER8; - -DEFINE_GUID(IID_IDirectSoundNotify, 0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); -typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY,**LPLPDIRECTSOUNDNOTIFY; -#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify - -DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); -typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER; - -DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60); -typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER; - -DEFINE_GUID(IID_IDirectSoundCapture, 0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); -typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE,**LPLPDIRECTSOUNDCAPTURE; -#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture -typedef struct IDirectSoundCapture IDirectSoundCapture8,*LPDIRECTSOUNDCAPTURE8,**LPLPDIRECTSOUNDCAPTURE8; - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16); -typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER,**LPLPDIRECTSOUNDCAPTUREBUFFER; - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer8,0x00990DF4,0x0DBB,0x4872,0x83,0x3E,0x6D,0x30,0x3E,0x80,0xAE,0xB6); -typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8,**LPLPDIRECTSOUNDCAPTUREBUFFER8; - -DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xEDCB4C7A,0xDAAB,0x4216,0xA4,0x2E,0x6C,0x50,0x59,0x6D,0xDC,0x1D); -typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX,**LPLPDIRECTSOUNDFULLDUPLEX; -#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex - -DEFINE_GUID(DSDEVID_DefaultPlayback, 0xDEF00000,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); -DEFINE_GUID(DSDEVID_DefaultCapture, 0xDEF00001,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); -DEFINE_GUID(DSDEVID_DefaultVoicePlayback,0xDEF00002,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); -DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xDEF00003,0x9C6D,0x47ED,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03); - -DEFINE_GUID(DSDEVID_WinePlayback, 0x40316A1D,0x605B,0xD611,0x87,0xC6,0x00,0x80,0xAD,0x00,0x02,0xFE); - -#define _FACDS 0x878 -#define MAKE_DSHRESULT(code) MAKE_HRESULT(1,_FACDS,code) - -#define DS_OK 0 -#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) -#define DS_INCOMPLETE MAKE_HRESULT(0, _FACDS, 20) -#define DSERR_ALLOCATED MAKE_DSHRESULT(10) -#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) -#define DSERR_INVALIDPARAM E_INVALIDARG -#define DSERR_INVALIDCALL MAKE_DSHRESULT(50) -#define DSERR_GENERIC E_FAIL -#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) -#define DSERR_OUTOFMEMORY E_OUTOFMEMORY -#define DSERR_BADFORMAT MAKE_DSHRESULT(100) -#define DSERR_UNSUPPORTED E_NOTIMPL -#define DSERR_NODRIVER MAKE_DSHRESULT(120) -#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) -#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION -#define DSERR_BUFFERLOST MAKE_DSHRESULT(150) -#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) -#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) -#define DSERR_NOINTERFACE E_NOINTERFACE -#define DSERR_ACCESSDENIED E_ACCESSDENIED -#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) -#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) -#define DSERR_SENDLOOP MAKE_DSHRESULT(200) -#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) -#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) -#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) - -#define DSCAPS_PRIMARYMONO 0x00000001 -#define DSCAPS_PRIMARYSTEREO 0x00000002 -#define DSCAPS_PRIMARY8BIT 0x00000004 -#define DSCAPS_PRIMARY16BIT 0x00000008 -#define DSCAPS_CONTINUOUSRATE 0x00000010 -#define DSCAPS_EMULDRIVER 0x00000020 -#define DSCAPS_CERTIFIED 0x00000040 -#define DSCAPS_SECONDARYMONO 0x00000100 -#define DSCAPS_SECONDARYSTEREO 0x00000200 -#define DSCAPS_SECONDARY8BIT 0x00000400 -#define DSCAPS_SECONDARY16BIT 0x00000800 - -#define DSSCL_NORMAL 1 -#define DSSCL_PRIORITY 2 -#define DSSCL_EXCLUSIVE 3 -#define DSSCL_WRITEPRIMARY 4 - -typedef struct _DSCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwMinSecondarySampleRate; - DWORD dwMaxSecondarySampleRate; - DWORD dwPrimaryBuffers; - DWORD dwMaxHwMixingAllBuffers; - DWORD dwMaxHwMixingStaticBuffers; - DWORD dwMaxHwMixingStreamingBuffers; - DWORD dwFreeHwMixingAllBuffers; - DWORD dwFreeHwMixingStaticBuffers; - DWORD dwFreeHwMixingStreamingBuffers; - DWORD dwMaxHw3DAllBuffers; - DWORD dwMaxHw3DStaticBuffers; - DWORD dwMaxHw3DStreamingBuffers; - DWORD dwFreeHw3DAllBuffers; - DWORD dwFreeHw3DStaticBuffers; - DWORD dwFreeHw3DStreamingBuffers; - DWORD dwTotalHwMemBytes; - DWORD dwFreeHwMemBytes; - DWORD dwMaxContigFreeHwMemBytes; - DWORD dwUnlockTransferRateHwBuffers; - DWORD dwPlayCpuOverheadSwBuffers; - DWORD dwReserved1; - DWORD dwReserved2; -} DSCAPS,*LPDSCAPS; -typedef const DSCAPS *LPCDSCAPS; - -#define DSBPLAY_LOOPING 0x00000001 -#define DSBPLAY_LOCHARDWARE 0x00000002 -#define DSBPLAY_LOCSOFTWARE 0x00000004 -#define DSBPLAY_TERMINATEBY_TIME 0x00000008 -#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 -#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 - -#define DSBSTATUS_PLAYING 0x00000001 -#define DSBSTATUS_BUFFERLOST 0x00000002 -#define DSBSTATUS_LOOPING 0x00000004 -#define DSBSTATUS_LOCHARDWARE 0x00000008 -#define DSBSTATUS_LOCSOFTWARE 0x00000010 -#define DSBSTATUS_TERMINATED 0x00000020 - -#define DSBLOCK_FROMWRITECURSOR 0x00000001 -#define DSBLOCK_ENTIREBUFFER 0x00000002 - -#define DSBCAPS_PRIMARYBUFFER 0x00000001 -#define DSBCAPS_STATIC 0x00000002 -#define DSBCAPS_LOCHARDWARE 0x00000004 -#define DSBCAPS_LOCSOFTWARE 0x00000008 -#define DSBCAPS_CTRL3D 0x00000010 -#define DSBCAPS_CTRLFREQUENCY 0x00000020 -#define DSBCAPS_CTRLPAN 0x00000040 -#define DSBCAPS_CTRLVOLUME 0x00000080 -#define DSBCAPS_CTRLDEFAULT 0x000000E0 /* Pan + volume + frequency. */ -#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 -#define DSBCAPS_CTRLFX 0x00000200 -#define DSBCAPS_CTRLALL 0x000001F0 /* All control capabilities */ -#define DSBCAPS_STICKYFOCUS 0x00004000 -#define DSBCAPS_GLOBALFOCUS 0x00008000 -#define DSBCAPS_GETCURRENTPOSITION2 0x00010000 /* More accurate play cursor under emulation*/ -#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 -#define DSBCAPS_LOCDEFER 0x00040000 - -#define DSBSIZE_MIN 4 -#define DSBSIZE_MAX 0xFFFFFFF -#define DSBPAN_LEFT -10000 -#define DSBPAN_CENTER 0 -#define DSBPAN_RIGHT 10000 -#define DSBVOLUME_MAX 0 -#define DSBVOLUME_MIN -10000 -#define DSBFREQUENCY_MIN 100 -#define DSBFREQUENCY_MAX 200000 -#define DSBFREQUENCY_ORIGINAL 0 - -#define DSBNOTIFICATIONS_MAX 100000U - -typedef struct _DSBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwUnlockTransferRate; - DWORD dwPlayCpuOverhead; -} DSBCAPS,*LPDSBCAPS; -typedef const DSBCAPS *LPCDSBCAPS; - -#define DSSCL_NORMAL 1 -#define DSSCL_PRIORITY 2 -#define DSSCL_EXCLUSIVE 3 -#define DSSCL_WRITEPRIMARY 4 - -typedef struct _DSEFFECTDESC -{ - DWORD dwSize; - DWORD dwFlags; - GUID guidDSFXClass; - DWORD_PTR dwReserved1; - DWORD_PTR dwReserved2; -} DSEFFECTDESC,*LPDSEFFECTDESC; -typedef const DSEFFECTDESC *LPCDSEFFECTDESC; - -#define DSFX_LOCHARDWARE 0x00000001 -#define DSFX_LOCSOFTWARE 0x00000002 - -enum -{ - DSFXR_PRESENT, - DSFXR_LOCHARDWARE, - DSFXR_LOCSOFTWARE, - DSFXR_UNALLOCATED, - DSFXR_FAILED, - DSFXR_UNKNOWN, - DSFXR_SENDLOOP -}; - -typedef struct _DSBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSBUFFERDESC1,*LPDSBUFFERDESC1; -typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; - -typedef struct _DSBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; - GUID guid3DAlgorithm; -} DSBUFFERDESC,*LPDSBUFFERDESC; -typedef const DSBUFFERDESC *LPCDSBUFFERDESC; - -typedef struct _DSBPOSITIONNOTIFY -{ - DWORD dwOffset; - HANDLE hEventNotify; -} DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY; -typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; - -#define DSSPEAKER_HEADPHONE 1 -#define DSSPEAKER_MONO 2 -#define DSSPEAKER_QUAD 3 -#define DSSPEAKER_STEREO 4 -#define DSSPEAKER_SURROUND 5 -#define DSSPEAKER_5POINT1 6 -#define DSSPEAKER_7POINT1 7 - -#define DSSPEAKER_GEOMETRY_MIN 0x00000005 /* 5 degrees */ -#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A /* 10 degrees */ -#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 /* 20 degrees */ -#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 /* 180 degrees */ - -#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) -#define DSSPEAKER_CONFIG(a) ((BYTE)(a)) -#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) - -#define DS_CERTIFIED 0x00000000 -#define DS_UNCERTIFIED 0x00000001 - -typedef struct _DSCEFFECTDESC -{ - DWORD dwSize; - DWORD dwFlags; - GUID guidDSCFXClass; - GUID guidDSCFXInstance; - DWORD dwReserved1; - DWORD dwReserved2; -} DSCEFFECTDESC, *LPDSCEFFECTDESC; -typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; - -#define DSCFX_LOCHARDWARE 0x00000001 -#define DSCFX_LOCSOFTWARE 0x00000002 - -#define DSCFXR_LOCHARDWARE 0x00000010 -#define DSCFXR_LOCSOFTWARE 0x00000020 - -typedef struct _DSCBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSCBUFFERDESC1, *LPDSCBUFFERDESC1; - -typedef struct _DSCBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; - DWORD dwFXCount; - LPDSCEFFECTDESC lpDSCFXDesc; -} DSCBUFFERDESC, *LPDSCBUFFERDESC; -typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; - -typedef struct _DSCCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwFormats; - DWORD dwChannels; -} DSCCAPS, *LPDSCCAPS; -typedef const DSCCAPS *LPCDSCCAPS; - -typedef struct _DSCBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; -} DSCBCAPS, *LPDSCBCAPS; -typedef const DSCBCAPS *LPCDSCBCAPS; - -#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER -#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED -#define DSCCAPS_MULTIPLECAPTURE 0x00000001 - -#define DSCBCAPS_WAVEMAPPED 0x80000000 -#define DSCBCAPS_CTRLFX 0x00000200 - -#define DSCBLOCK_ENTIREBUFFER 0x00000001 -#define DSCBSTART_LOOPING 0x00000001 -#define DSCBPN_OFFSET_STOP 0xffffffff - -#define DSCBSTATUS_CAPTURING 0x00000001 -#define DSCBSTATUS_LOOPING 0x00000002 - -#ifndef __LPCGUID_DEFINED__ -#define __LPCGUID_DEFINED__ -typedef const GUID *LPCGUID; -#endif - -typedef WINBOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPCWSTR,LPCWSTR,LPVOID); -typedef WINBOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPCSTR,LPCSTR,LPVOID); -__MINGW_TYPEDEF_AW(LPDSENUMCALLBACK) - -extern HRESULT WINAPI DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID); -extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID); -#define DirectSoundEnumerate __MINGW_NAME_AW(DirectSoundEnumerate) -extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID); -extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID); -#define DirectSoundCaptureEnumerate __MINGW_NAME_AW(DirectSoundCaptureEnumerate) - -extern HRESULT WINAPI DirectSoundCreate8(LPCGUID lpGUID,LPDIRECTSOUND8 *ppDS8,LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice, - LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel, - LPDIRECTSOUNDFULLDUPLEX *ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter); -#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate -extern HRESULT WINAPI GetDeviceID(LPCGUID lpGuidSrc, LPGUID lpGuidDest); - - -/***************************************************************************** - * IDirectSound interface - */ -#define INTERFACE IDirectSound -DECLARE_INTERFACE_(IDirectSound,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSound methods ***/ - STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE; - STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSound_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSound methods ***/ -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) -#define IDirectSound_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a) -#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSound_AddRef(p) (p)->AddRef() -#define IDirectSound_Release(p) (p)->Release() -/*** IDirectSound methods ***/ -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectSound_Compact(p) (p)->Compact() -#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) -#define IDirectSound_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a) -#define IDirectSound_Initialize(p,a) (p)->Initialize(a) -#endif - - -/***************************************************************************** - * IDirectSound8 interface - */ -#define INTERFACE IDirectSound8 -DECLARE_INTERFACE_(IDirectSound8,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSound8 methods ***/ - STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE; - STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE; - STDMETHOD(VerifyCertification)(THIS_ LPDWORD pdwCertified) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSound8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSound8_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSound8_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSound methods ***/ -#define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) -#define IDirectSound8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) -#define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectSound8_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectSound8_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) -#define IDirectSound8_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a) -#define IDirectSound8_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -/*** IDirectSound8 methods ***/ -#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectSound8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSound8_AddRef(p) (p)->AddRef() -#define IDirectSound8_Release(p) (p)->Release() -/*** IDirectSound methods ***/ -#define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) -#define IDirectSound8_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) -#define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectSound8_Compact(p) (p)->Compact() -#define IDirectSound8_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) -#define IDirectSound8_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a) -#define IDirectSound8_Initialize(p,a) (p)->Initialize(a) -/*** IDirectSound8 methods ***/ -#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) -#endif - - -/***************************************************************************** - * IDirectSoundBuffer interface - */ -#define INTERFACE IDirectSoundBuffer -DECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundBuffer methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; - STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE; - STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE; - STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; - STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE; - STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE; - STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan)(THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop)(THIS) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE; - STDMETHOD(Restore)(THIS) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundBuffer methods ***/ -#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) -#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) -#else -/*** IUnknown methods ***/ -#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundBuffer_AddRef(p) (p)->AddRef() -#define IDirectSoundBuffer_Release(p) (p)->Release() -/*** IDirectSoundBuffer methods ***/ -#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) -#define IDirectSoundBuffer_Stop(p) (p)->Stop() -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->Restore() -#endif - - -/***************************************************************************** - * IDirectSoundBuffer8 interface - */ -#define INTERFACE IDirectSoundBuffer8 -DECLARE_INTERFACE_(IDirectSoundBuffer8,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundBuffer8 methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; - STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE; - STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE; - STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; - STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE; - STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE; - STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan)(THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop)(THIS) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetFX)(THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE; - STDMETHOD(AcquireResources)(THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE; - STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundBuffer8_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundBuffer methods ***/ -#define IDirectSoundBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundBuffer8_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) -#define IDirectSoundBuffer8_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) -#define IDirectSoundBuffer8_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) -#define IDirectSoundBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer8_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) -#define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) -#define IDirectSoundBuffer8_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) -#define IDirectSoundBuffer8_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) -#define IDirectSoundBuffer8_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) -#define IDirectSoundBuffer8_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) -#define IDirectSoundBuffer8_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#define IDirectSoundBuffer8_Restore(p) (p)->lpVtbl->Restore(p) -/*** IDirectSoundBuffer8 methods ***/ -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#else -/*** IUnknown methods ***/ -#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundBuffer8_AddRef(p) (p)->AddRef() -#define IDirectSoundBuffer8_Release(p) (p)->Release() -/*** IDirectSoundBuffer methods ***/ -#define IDirectSoundBuffer8_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundBuffer8_GetVolume(p,a) (p)->GetVolume(a) -#define IDirectSoundBuffer8_GetPan(p,a) (p)->GetPan(a) -#define IDirectSoundBuffer8_GetFrequency(p,a) (p)->GetFrequency(a) -#define IDirectSoundBuffer8_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundBuffer8_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundBuffer8_Play(p,a,b,c) (p)->Play(a,b,c) -#define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) -#define IDirectSoundBuffer8_SetFormat(p,a) (p)->SetFormat(a) -#define IDirectSoundBuffer8_SetVolume(p,a) (p)->SetVolume(a) -#define IDirectSoundBuffer8_SetPan(p,a) (p)->SetPan(a) -#define IDirectSoundBuffer8_SetFrequency(p,a) (p)->SetFrequency(a) -#define IDirectSoundBuffer8_Stop(p) (p)->Stop() -#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#define IDirectSoundBuffer8_Restore(p) (p)->Restore() -/*** IDirectSoundBuffer8 methods ***/ -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#endif - - -/***************************************************************************** - * IDirectSoundCapture interface - */ -#define INTERFACE IDirectSoundCapture -DECLARE_INTERFACE_(IDirectSoundCapture,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundCapture methods ***/ - STDMETHOD(CreateCaptureBuffer)(THIS_ LPCDSCBUFFERDESC lpcDSCBufferDesc,LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk) PURE; - STDMETHOD(GetCaps)(THIS_ LPDSCCAPS lpDSCCaps) PURE; - STDMETHOD(Initialize)(THIS_ LPCGUID lpcGUID) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundCapture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundCapture_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundCapture_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundCapture methods ***/ -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else -/*** IUnknown methods ***/ -#define IDirectSoundCapture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundCapture_AddRef(p) (p)->AddRef() -#define IDirectSoundCapture_Release(p) (p)->Release() -/*** IDirectSoundCapture methods ***/ -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) -#endif - -/***************************************************************************** - * IDirectSoundCaptureBuffer interface - */ -#define INTERFACE IDirectSoundCaptureBuffer -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundCaptureBuffer methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE; - STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; - STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE; - STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop)(THIS) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundCaptureBuffer_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundCaptureBuffer methods ***/ -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#else -/*** IUnknown methods ***/ -#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundCaptureBuffer_AddRef(p) (p)->AddRef() -#define IDirectSoundCaptureBuffer_Release(p) (p)->Release() -/*** IDirectSoundCaptureBuffer methods ***/ -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#endif - -/***************************************************************************** - * IDirectSoundCaptureBuffer8 interface - */ -#define INTERFACE IDirectSoundCaptureBuffer8 -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8,IDirectSoundCaptureBuffer) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundCaptureBuffer methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE; - STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE; - STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE; - STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop)(THIS) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE; - /*** IDirectSoundCaptureBuffer8 methods ***/ - STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; - STDMETHOD(GetFXStatus)(THIS_ DWORD dwFXCount, LPDWORD pdwFXStatus) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundCaptureBuffer8_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundCaptureBuffer methods ***/ -#define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer8_Start(p,a) (p)->lpVtbl->Start(p,a) -#define IDirectSoundCaptureBuffer8_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -/*** IDirectSoundCaptureBuffer8 methods ***/ -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundCaptureBuffer8_AddRef(p) (p)->AddRef() -#define IDirectSoundCaptureBuffer8_Release(p) (p)->Release() -/*** IDirectSoundCaptureBuffer methods ***/ -#define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer8_Start(p,a) (p)->Start(a) -#define IDirectSoundCaptureBuffer8_Stop(p) (p)->Stop() -#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -/*** IDirectSoundCaptureBuffer8 methods ***/ -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) -#endif - -/***************************************************************************** - * IDirectSoundNotify interface - */ -#define WINE_NOBUFFER 0x80000000 - -#define DSBPN_OFFSETSTOP -1 - -#define INTERFACE IDirectSoundNotify -DECLARE_INTERFACE_(IDirectSoundNotify,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundNotify methods ***/ - STDMETHOD(SetNotificationPositions)(THIS_ DWORD cPositionNotifies, LPCDSBPOSITIONNOTIFY lpcPositionNotifies) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundNotify_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundNotify_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundNotify methods ***/ -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) -#else -/*** IUnknown methods ***/ -#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundNotify_AddRef(p) (p)->AddRef() -#define IDirectSoundNotify_Release(p) (p)->Release() -/*** IDirectSoundNotify methods ***/ -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) -#endif - - -/***************************************************************************** - * IDirectSound3DListener interface - */ -#define DS3DMODE_NORMAL 0x00000000 -#define DS3DMODE_HEADRELATIVE 0x00000001 -#define DS3DMODE_DISABLE 0x00000002 - -#define DS3D_IMMEDIATE 0x00000000 -#define DS3D_DEFERRED 0x00000001 - -#define DS3D_MINDISTANCEFACTOR FLT_MIN -#define DS3D_MAXDISTANCEFACTOR FLT_MAX -#define DS3D_DEFAULTDISTANCEFACTOR 1.0f - -#define DS3D_MINROLLOFFFACTOR 0.0f -#define DS3D_MAXROLLOFFFACTOR 10.0f -#define DS3D_DEFAULTROLLOFFFACTOR 1.0f - -#define DS3D_MINDOPPLERFACTOR 0.0f -#define DS3D_MAXDOPPLERFACTOR 10.0f -#define DS3D_DEFAULTDOPPLERFACTOR 1.0f - -#define DS3D_DEFAULTMINDISTANCE 1.0f -#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f - -#define DS3D_MINCONEANGLE 0 -#define DS3D_MAXCONEANGLE 360 -#define DS3D_DEFAULTCONEANGLE 360 - -#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX - -typedef struct _DS3DLISTENER { - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - D3DVECTOR vOrientFront; - D3DVECTOR vOrientTop; - D3DVALUE flDistanceFactor; - D3DVALUE flRolloffFactor; - D3DVALUE flDopplerFactor; -} DS3DLISTENER, *LPDS3DLISTENER; - -typedef const DS3DLISTENER *LPCDS3DLISTENER; - -#define INTERFACE IDirectSound3DListener -DECLARE_INTERFACE_(IDirectSound3DListener,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSound3DListener methods ***/ - STDMETHOD(GetAllParameters)(THIS_ LPDS3DLISTENER lpListener) PURE; - STDMETHOD(GetDistanceFactor)(THIS_ LPD3DVALUE lpflDistanceFactor) PURE; - STDMETHOD(GetDopplerFactor)(THIS_ LPD3DVALUE lpflDopplerFactor) PURE; - STDMETHOD(GetOrientation)(THIS_ LPD3DVECTOR lpvOrientFront, LPD3DVECTOR lpvOrientTop) PURE; - STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE; - STDMETHOD(GetRolloffFactor)(THIS_ LPD3DVALUE lpflRolloffFactor) PURE; - STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE; - STDMETHOD(SetAllParameters)(THIS_ LPCDS3DLISTENER lpcListener, DWORD dwApply) PURE; - STDMETHOD(SetDistanceFactor)(THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; - STDMETHOD(SetDopplerFactor)(THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; - STDMETHOD(SetOrientation)(THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; - STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetRolloffFactor)(THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; - STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(CommitDeferredSettings)(THIS) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSound3DListener_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSound3DListener_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSound3DListener methods ***/ -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) -#else -/*** IUnknown methods ***/ -#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSound3DListener_AddRef(p) (p)->AddRef() -#define IDirectSound3DListener_Release(p) (p)->Release() -/*** IDirectSound3DListener methods ***/ -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() -#endif - - -/***************************************************************************** - * IDirectSound3DBuffer interface - */ -typedef struct _DS3DBUFFER { - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - DWORD dwInsideConeAngle; - DWORD dwOutsideConeAngle; - D3DVECTOR vConeOrientation; - LONG lConeOutsideVolume; - D3DVALUE flMinDistance; - D3DVALUE flMaxDistance; - DWORD dwMode; -} DS3DBUFFER, *LPDS3DBUFFER; - -typedef const DS3DBUFFER *LPCDS3DBUFFER; - -#define INTERFACE IDirectSound3DBuffer -DECLARE_INTERFACE_(IDirectSound3DBuffer,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSound3DBuffer methods ***/ - STDMETHOD(GetAllParameters)(THIS_ LPDS3DBUFFER lpDs3dBuffer) PURE; - STDMETHOD(GetConeAngles)(THIS_ LPDWORD lpdwInsideConeAngle, LPDWORD lpdwOutsideConeAngle) PURE; - STDMETHOD(GetConeOrientation)(THIS_ LPD3DVECTOR lpvOrientation) PURE; - STDMETHOD(GetConeOutsideVolume)(THIS_ LPLONG lplConeOutsideVolume) PURE; - STDMETHOD(GetMaxDistance)(THIS_ LPD3DVALUE lpflMaxDistance) PURE; - STDMETHOD(GetMinDistance)(THIS_ LPD3DVALUE lpflMinDistance) PURE; - STDMETHOD(GetMode)(THIS_ LPDWORD lpwdMode) PURE; - STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE; - STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE; - STDMETHOD(SetAllParameters)(THIS_ LPCDS3DBUFFER lpcDs3dBuffer, DWORD dwApply) PURE; - STDMETHOD(SetConeAngles)(THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; - STDMETHOD(SetConeOrientation)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetConeOutsideVolume)(THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; - STDMETHOD(SetMaxDistance)(THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; - STDMETHOD(SetMinDistance)(THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; - STDMETHOD(SetMode)(THIS_ DWORD dwMode, DWORD dwApply) PURE; - STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSound3DBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSound3DBuffer_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSound3DBuffer methods ***/ -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#else -/*** IUnknown methods ***/ -#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSound3DBuffer_AddRef(p) (p)->AddRef() -#define IDirectSound3DBuffer_Release(p) (p)->Release() -/*** IDirectSound3DBuffer methods ***/ -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#endif - -/***************************************************************************** - * IKsPropertySet interface - */ -#ifndef _IKsPropertySet_ -#define _IKsPropertySet_ - -typedef struct IKsPropertySet *LPKSPROPERTYSET; - -DEFINE_GUID(IID_IKsPropertySet,0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93); - -#define KSPROPERTY_SUPPORT_GET 1 -#define KSPROPERTY_SUPPORT_SET 2 - -#define INTERFACE IKsPropertySet -DECLARE_INTERFACE_(IKsPropertySet,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IKsPropertySet methods ***/ - STDMETHOD(Get)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3,ULONG *px4) PURE; - STDMETHOD(Set)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3) PURE; - STDMETHOD(QuerySupport)(THIS_ REFGUID rgid,ULONG x1,ULONG *px2) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IKsPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IKsPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IKsPropertySet_Release(p) (p)->lpVtbl->Release(p) -/*** IKsPropertySet methods ***/ -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) -#else -/*** IUnknown methods ***/ -#define IKsPropertySet_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IKsPropertySet_AddRef(p) (p)->AddRef() -#define IKsPropertySet_Release(p) (p)->Release() -/*** IKsPropertySet methods ***/ -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) -#endif - -#endif /* _IKsPropertySet_ */ - -/***************************************************************************** - * IDirectSoundFullDuplex interface - */ -#define INTERFACE IDirectSoundFullDuplex -DECLARE_INTERFACE_(IDirectSoundFullDuplex,IUnknown) -{ - /*** IUnknown methods ***/ - STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IDirectSoundFullDuplex methods ***/ - STDMETHOD(Initialize)(THIS_ LPCGUID pCaptureGuid,LPCGUID pRendererGuid,LPCDSCBUFFERDESC lpDscBufferDesc,LPCDSBUFFERDESC lpDsBufferDesc,HWND hWnd,DWORD dwLevel,LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; -}; -#undef INTERFACE - -#if !defined(__cplusplus) || defined(CINTERFACE) -/*** IUnknown methods ***/ -#define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectSoundFullDuplex_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectSoundFullDuplex_Release(p) (p)->lpVtbl->Release(p) -/*** IDirectSoundFullDuplex methods ***/ -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) -#else -/*** IUnknown methods ***/ -#define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectSoundFullDuplex_AddRef(p) (p)->AddRef() -#define IDirectSoundFullDuplex_Release(p) (p)->Release() -/*** IDirectSoundFullDuplex methods ***/ -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - -#endif /* __DSOUND_INCLUDED__ */ diff --git a/3rdparty/include/dshow/dvdmedia.h b/3rdparty/include/dshow/dvdmedia.h deleted file mode 100644 index 526d6bc..0000000 --- a/3rdparty/include/dshow/dvdmedia.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2008 Maarten Lankhorst - * - * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __DVDMEDIA_H__ -#define __DVDMEDIA_H__ - -#define AMCONTROL_USED 0x00000001 -#define AMCONTROL_PAD_TO_4x3 0x00000002 -#define AMCONTROL_PAD_TO_16x9 0x00000004 - -enum AM_MPEG2Level { - AM_MPEG2Level_Low = 1, - AM_MPEG2Level_Main, - AM_MPEG2Level_High1440, - AM_MPEG2Level_High -}; -enum AM_MPEG2Profile { - AM_MPEG2Profile_Simple = 1, - AM_MPEG2Profile_Main, - AM_MPEG2Profile_SNRScalable, - AM_MPEG2Profile_SpatiallyScalable, - AM_MPEG2Profile_High -}; -typedef enum { - AM_RATE_ChangeRate = 1, - AM_RATE_FullDataRateMax = 2, - AM_RATE_ReverseDecode = 3, - AM_RATE_DecoderPosition = 4, - AM_RATE_DecoderVersion = 5 -} AM_PROPERTY_DVD_RATE_CHANGE; - -typedef struct tagVIDEOINFOHEADER2 { - RECT rcSource; - RECT rcTarget; - DWORD dwBitRate; - DWORD dwBitErrorRate; - REFERENCE_TIME AvgTimePerFrame; - DWORD dwInterlaceFlags; - DWORD dwCopyProtectFlags; - DWORD dwPictAspectRatioX; - DWORD dwPictAspectRatioY; - union { - DWORD dwControlFlags; - DWORD dwReserved1; - } DUMMYUNIONNAME; - DWORD dwReserved2; - BITMAPINFOHEADER bmiHeader; -} VIDEOINFOHEADER2; - -typedef struct tagMPEG2VIDEOINFO { - VIDEOINFOHEADER2 hdr; - DWORD dwStartTimeCode; - DWORD cbSequenceHeader; - DWORD dwProfile; - DWORD dwLevel; - DWORD dwFlags; - DWORD dwSequenceHeader[1]; -} MPEG2VIDEOINFO; - -#endif /* __DVDMEDIA_H__ */ diff --git a/3rdparty/include/dshow/errors.h b/3rdparty/include/dshow/errors.h deleted file mode 100644 index 7581899..0000000 --- a/3rdparty/include/dshow/errors.h +++ /dev/null @@ -1,169 +0,0 @@ -#ifndef _ERRORS_H -#define _ERRORS_H -#if __GNUC__ >=3 -#pragma GCC system_header -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*--- DirectShow Reference - Constants and GUIDs - Error and Success Codes */ -#define VFW_S_NO_MORE_ITEMS 0x00040103 -#define VFW_S_DUPLICATE_NAME 0x0004022D -#define VFW_S_STATE_INTERMEDIATE 0x00040237 -#define VFW_S_PARTIAL_RENDER 0x00040242 -#define VFW_S_SOME_DATA_IGNORED 0x00040245 -#define VFW_S_CONNECTIONS_DEFERRED 0x00040246 -#define VFW_S_RESOURCE_NOT_NEEDED 0x00040250 -#define VFW_S_MEDIA_TYPE_IGNORED 0x00040254 -#define VFW_S_VIDEO_NOT_RENDERED 0x00040257 -#define VFW_S_AUDIO_NOT_RENDERED 0x00040258 -#define VFW_S_RPZA 0x0004025A -#define VFW_S_ESTIMATED 0x00040260 -#define VFW_S_RESERVED 0x00040263 -#define VFW_S_STREAM_OFF 0x00040267 -#define VFW_S_CANT_CUE 0x00040268 -#define VFW_S_NOPREVIEWPIN 0x0004027E -#define VFW_S_DVD_NON_ONE_SEQUENTIAL 0x00040280 -#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE 0x0004028C -#define VFW_S_DVD_NOT_ACCURATE 0x0004028D -#define VFW_E_INVALIDMEDIATYPE 0x80040200 -#define VFW_E_INVALIDSUBTYPE 0x80040201 -#define VFW_E_NEED_OWNER 0x80040202 -#define VFW_E_ENUM_OUT_OF_SYNC 0x80040203 -#define VFW_E_ALREADY_CONNECTED 0x80040204 -#define VFW_E_FILTER_ACTIVE 0x80040205 -#define VFW_E_NO_TYPES 0x80040206 -#define VFW_E_NO_ACCEPTABLE_TYPES 0x80040207 -#define VFW_E_INVALID_DIRECTION 0x80040208 -#define VFW_E_NOT_CONNECTED 0x80040209 -#define VFW_E_NO_ALLOCATOR 0x8004020A -#define VFW_E_RUNTIME_ERROR 0x8004020B -#define VFW_E_BUFFER_NOTSET 0x8004020C -#define VFW_E_BUFFER_OVERFLOW 0x8004020D -#define VFW_E_BADALIGN 0x8004020E -#define VFW_E_ALREADY_COMMITTED 0x8004020F -#define VFW_E_BUFFERS_OUTSTANDING 0x80040210 -#define VFW_E_NOT_COMMITTED 0x80040211 -#define VFW_E_SIZENOTSET 0x80040212 -#define VFW_E_NO_CLOCK 0x80040213 -#define VFW_E_NO_SINK 0x80040214 -#define VFW_E_NO_INTERFACE 0x80040215 -#define VFW_E_NOT_FOUND 0x80040216 -#define VFW_E_CANNOT_CONNECT 0x80040217 -#define VFW_E_CANNOT_RENDER 0x80040218 -#define VFW_E_CHANGING_FORMAT 0x80040219 -#define VFW_E_NO_COLOR_KEY_SET 0x8004021A -#define VFW_E_NOT_OVERLAY_CONNECTION 0x8004021B -#define VFW_E_NOT_SAMPLE_CONNECTION 0x8004021C -#define VFW_E_PALETTE_SET 0x8004021D -#define VFW_E_COLOR_KEY_SET 0x8004021E -#define VFW_E_NO_COLOR_KEY_FOUND 0x8004021F -#define VFW_E_NO_PALETTE_AVAILABLE 0x80040220 -#define VFW_E_NO_DISPLAY_PALETTE 0x80040221 -#define VFW_E_TOO_MANY_COLORS 0x80040222 -#define VFW_E_STATE_CHANGED 0x80040223 -#define VFW_E_NOT_STOPPED 0x80040224 -#define VFW_E_NOT_PAUSED 0x80040225 -#define VFW_E_NOT_RUNNING 0x80040226 -#define VFW_E_WRONG_STATE 0x80040227 -#define VFW_E_START_TIME_AFTER_END 0x80040228 -#define VFW_E_INVALID_RECT 0x80040229 -#define VFW_E_TYPE_NOT_ACCEPTED 0x8004022A -#define VFW_E_SAMPLE_REJECTED 0x8004022B -#define VFW_E_SAMPLE_REJECTED_EOS 0x8004022C -#define VFW_E_DUPLICATE_NAME 0x8004022D -#define VFW_E_TIMEOUT 0x8004022E -#define VFW_E_INVALID_FILE_FORMAT 0x8004022F -#define VFW_E_ENUM_OUT_OF_RANGE 0x80040230 -#define VFW_E_CIRCULAR_GRAPH 0x80040231 -#define VFW_E_NOT_ALLOWED_TO_SAVE 0x80040232 -#define VFW_E_TIME_ALREADY_PASSED 0x80040233 -#define VFW_E_ALREADY_CANCELLED 0x80040234 -#define VFW_E_CORRUPT_GRAPH_FILE 0x80040235 -#define VFW_E_ADVISE_ALREADY_SET 0x80040236 -#define VFW_E_NO_MODEX_AVAILABLE 0x80040238 -#define VFW_E_NO_ADVISE_SET 0x80040239 -#define VFW_E_NO_FULLSCREEN 0x8004023A -#define VFW_E_IN_FULLSCREEN_MODE 0x8004023B -#define VFW_E_UNKNOWN_FILE_TYPE 0x80040240 -#define VFW_E_CANNOT_LOAD_SOURCE_FILTER 0x80040241 -#define VFW_E_FILE_TOO_SHORT 0x80040243 -#define VFW_E_INVALID_FILE_VERSION 0x80040244 -#define VFW_E_INVALID_CLSID 0x80040247 -#define VFW_E_INVALID_MEDIA_TYPE 0x80040248 -#define VFW_E_SAMPLE_TIME_NOT_SET 0x80040249 -#define VFW_E_MEDIA_TIME_NOT_SET 0x80040251 -#define VFW_E_NO_TIME_FORMAT_SET 0x80040252 -#define VFW_E_MONO_AUDIO_HW 0x80040253 -#define VFW_E_NO_DECOMPRESSOR 0x80040255 -#define VFW_E_NO_AUDIO_HARDWARE 0x80040256 -#define VFW_E_RPZA 0x80040259 -#define VFW_E_PROCESSOR_NOT_SUITABLE 0x8004025B -#define VFW_E_UNSUPPORTED_AUDIO 0x8004025C -#define VFW_E_UNSUPPORTED_VIDEO 0x8004025D -#define VFW_E_MPEG_NOT_CONSTRAINED 0x8004025E -#define VFW_E_NOT_IN_GRAPH 0x8004025F -#define VFW_E_NO_TIME_FORMAT 0x80040261 -#define VFW_E_READ_ONLY 0x80040262 -#define VFW_E_BUFFER_UNDERFLOW 0x80040264 -#define VFW_E_UNSUPPORTED_STREAM 0x80040265 -#define VFW_E_NO_TRANSPORT 0x80040266 -#define VFW_E_BAD_VIDEOCD 0x80040269 -#define VFW_S_NO_STOP_TIME 0x80040270 -#define VFW_E_OUT_OF_VIDEO_MEMORY 0x80040271 -#define VFW_E_VP_NEGOTIATION_FAILED 0x80040272 -#define VFW_E_DDRAW_CAPS_NOT_SUITABLE 0x80040273 -#define VFW_E_NO_VP_HARDWARE 0x80040274 -#define VFW_E_NO_CAPTURE_HARDWARE 0x80040275 -#define VFW_E_DVD_OPERATION_INHIBITED 0x80040276 -#define VFW_E_DVD_INVALIDDOMAIN 0x80040277 -#define VFW_E_DVD_NO_BUTTON 0x80040278 -#define VFW_E_DVD_GRAPHNOTREADY 0x80040279 -#define VFW_E_DVD_RENDERFAIL 0x8004027A -#define VFW_E_DVD_DECNOTENOUGH 0x8004027B -#define VFW_E_DDRAW_VERSION_NOT_SUITABLE 0x8004027C -#define VFW_E_COPYPROT_FAILED 0x8004027D -#define VFW_E_TIME_EXPIRED 0x8004027F -#define VFW_E_DVD_WRONG_SPEED 0x80040281 -#define VFW_E_DVD_MENU_DOES_NOT_EXIST 0x80040282 -#define VFW_E_DVD_CMD_CANCELLED 0x80040283 -#define VFW_E_DVD_STATE_WRONG_VERSION 0x80040284 -#define VFW_E_DVD_STATE_CORRUPT 0x80040285 -#define VFW_E_DVD_STATE_WRONG_DISC 0x80040286 -#define VFW_E_DVD_INCOMPATIBLE_REGION 0x80040287 -#define VFW_E_DVD_NO_ATTRIBUTES 0x80040288 -#define VFW_E_DVD_NO_GOUP_PGC 0x80040289 -#define VFW_E_DVD_LOW_PARENTAL_LEVEL 0x8004028A -#define VFW_E_DVD_NOT_IN_KARAOKE_MODE 0x8004028B -#define VFW_E_FRAME_STEP_UNSUPPORTED 0x8004028E -#define VFW_E_DVD_STREAM_DISABLED 0x8004028F -#define VFW_E_DVD_TITLE_UNKNOWN 0x80040290 -#define VFW_E_DVD_INVALID_DISC 0x80040291 -#define VFW_E_DVD_NO_RESUME_INFORMATION 0x80040292 -#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD 0x80040293 -#define VFW_E_PIN_ALREADY_BLOCKED 0x80040294 -#define VFW_E_CERTIFICATION_FAILURE 0x80040295 -#define VFW_E_VMR_NOT_IN_MIXER_MODE 0x80040296 -#define VFW_E_VMR_NO_AP_SUPPLIED 0x80040297 -#define VFW_E_VMR_NO_DEINTERLACE_HW 0x80040298 -#define VFW_E_VMR_NO_PROCAMP_HW 0x80040299 -#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC 0x8004029A -#define VFW_E_NO_COPP_HW 0x8004029B -#define VFW_E_BAD_KEY 0x800403F2 -/*--- DirectShow Reference - Functions */ -#define MAX_ERROR_TEXT_LEN 160 -/*--- DirectShow Reference - Functions */ -DWORD WINAPI AMGetErrorTextA(HRESULT,CHAR*,DWORD); -DWORD WINAPI AMGetErrorTextW(HRESULT,WCHAR*,DWORD); -#ifdef UNICODE -#define AMGetErrorText AMGetErrorTextW -#else -#define AMGetErrorText AMGetErrorTextA -#endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/evcode.h b/3rdparty/include/dshow/evcode.h deleted file mode 100644 index 6fec511..0000000 --- a/3rdparty/include/dshow/evcode.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef _EVCODE_H -#define _EVCODE_H -#if __GNUC__ >=3 -#pragma GCC system_header -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*--- DirectShow Reference - Constants and GUIDs - Event Notification Codes */ -#define EC_ACTIVATE 0x0013 -#define EC_BUFFERING_DATA 0x0011 -#define EC_BUILT 0x0300 -#define EC_CLOCK_CHANGED 0x000D -#define EC_CLOCK_UNSET 0x0051 -#define EC_CODECAPI_EVENT 0x0057 -#define EC_COMPLETE 0x0001 -#define EC_DEVICE_LOST 0x001F -#define EC_DISPLAY_CHANGED 0x0016 -#define EC_END_OF_SEGMENT 0x001C -#define EC_ERROR_STILLPLAYING 0x0008 -#define EC_ERRORABORT 0x0003 -#define EC_EXTDEVICE_MODE_CHANGE 0x0031 -#define EC_FULLSCREEN_LOST 0x0012 -#define EC_GRAPH_CHANGED 0x0050 -#define EC_LENGTH_CHANGED 0x001E -#define EC_NEED_RESTART 0x0014 -#define EC_NOTIFY_WINDOW 0x0019 -#define EC_OLE_EVENT 0x0018 -#define EC_OPENING_FILE 0x0010 -#define EC_PALETTE_CHANGED 0x0009 -#define EC_PAUSED 0x000E -#define EC_PREPROCESS_COMPLETE 0x0056 -#define EC_QUALITY_CHANGE 0x000B -#define EC_REPAINT 0x0005 -#define EC_SEGMENT_STARTED 0x001D -#define EC_SHUTTING_DOWN 0x000C -#define EC_SNDDEV_IN_ERROR 0x0200 -#define EC_SNDDEV_OUT_ERROR 0x0201 -#define EC_STARVATION 0x0017 -#define EC_STATE_CHANGE 0x0032 -#define EC_STEP_COMPLETE 0x0024 -#define EC_STREAM_CONTROL_STARTED 0x001B -#define EC_STREAM_CONTROL_STOPPED 0x001A -#define EC_STREAM_ERROR_STILLPLAYING 0x0007 -#define EC_STREAM_ERROR_STOPPED 0x0006 -#define EC_TIMECODE_AVAILABLE 0x0030 -#define EC_UNBUILT 0x0301 -#define EC_USERABORT 0x0002 -#define EC_VIDEO_SIZE_CHANGED 0x000A -#define EC_VMR_RENDERDEVICE_SET 0x0053 -#define EC_VMR_SURFACE_FLIPPED 0x0054 -#define EC_VMR_RECONNECTION_FAILED 0x0055 -#define EC_WINDOW_DESTROYED 0x0015 -#define EC_WMT_EVENT 0x0252 -#define EC_WMT_INDEX_EVENT 0x0251 -#define EC_USER 0x8000 -/*--- DirectShow Reference - DirectShow Structures */ -typedef struct { - HRESULT hrStatus; - void *pData; -} AM_WMT_EVENT_DATA; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/ksuuids.h b/3rdparty/include/dshow/ksuuids.h deleted file mode 100644 index da64d08..0000000 --- a/3rdparty/include/dshow/ksuuids.h +++ /dev/null @@ -1,191 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ - -OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK, - 0x36523B13,0x8EE5,0x11d1,0x8C,0xA3,0x00,0x60,0xB0,0x57,0x66,0x4A) - -OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES, - 0xe06d8020,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_WMDRM_TRANSPORT, - 0x18BEC4EA,0x4676,0x450e,0xB4,0x78,0x0C,0xD8,0x4C,0x54,0xB3,0x27) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO, - 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO, - 0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_VIDEOINFO2, - 0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x0,0x0,0xc0,0xcc,0x16,0xba) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM, - 0xe06d8022,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT, - 0xe06d8023,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO, - 0xe06d802b,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3, - 0xe06d802c,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE, - 0xe06d802d,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO, - 0xe06d8032,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK, - 0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x04f,0xc3,0x1d,0x60) - -OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION, - 0xe06d802e,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI, - 0xe06d802f,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI, - 0xe06d8030,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER, - 0xe06d8031,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_MPEG2Video, - 0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_DolbyAC3, - 0xe06d80e4,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_MPEG2Audio, - 0xe06d80e5,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio, - 0xe06d80e6,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(AM_KSPROPSETID_AC3, - 0xBFABE720,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00) - -OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic, - 0xac390460,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9) - -OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt, - 0x0E8A0A40,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3) - -OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange, - 0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0) - -OUR_GUID_ENTRY(AM_KSPROPSETID_MPEG4_MediaType_Attributes, - 0xff6c4bfa,0x7a9,0x4c7b,0xa2,0x37,0x67,0x2f,0x9d,0x68,0x6,0x5f) - -OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE, - 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER, - 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR, - 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) - -OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO, - 0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO, - 0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER, - 0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) - -OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR, - 0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) - -OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO, - 0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4) - -OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC, - 0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f) - -OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER, - 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) - -OUR_GUID_ENTRY(IID_IKsInterfaceHandler, - 0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(IID_IKsDataTypeHandler, - 0x5FFBAA02L,0x49A3,0x11D0,0x9F,0x36,0x00,0xAA,0x00,0xA2,0x16,0xA1) - -OUR_GUID_ENTRY(IID_IKsPin, - 0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1) - -OUR_GUID_ENTRY(IID_IKsControl, - 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(IID_IKsPinFactory, - 0xCD5EBE6BL,0x8B6E,0x11D1,0x8A,0xE0,0x00,0xA0,0xC9,0x22,0x31,0x96) - -OUR_GUID_ENTRY(AM_INTERFACESETID_Standard, - 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) - -#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1) -OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS, - 0x455f176c,0x4b06,0x47ce,0x9a,0xef,0x8c,0xae,0xf7,0x3d,0xf7,0xb5) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VERSIONED_TABLES, - 0x1ed988b0,0x3ffc,0x4523,0x87,0x25,0x34,0x7b,0xee,0xc1,0xa8,0xa0) - -OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI, - 0xb3c7397c,0xd303,0x414d,0xb3,0x3c,0x4e,0xd2,0xc9,0xd2,0x97,0x33) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI, - 0xe9dd31a3,0x221d,0x4adb,0x85,0x32,0x9a,0xf3,0x9,0xc1,0xa4,0x8) - -OUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SI, - 0xe89ad298,0x3601,0x4b06,0xaa,0xec,0x9d,0xde,0xed,0xcc,0x5b,0xd0) - -OUR_GUID_ENTRY(MEDIASUBTYPE_TIF_SI, - 0xec232eb2,0xcb96,0x4191,0xb2,0x26,0xe,0xa1,0x29,0xf3,0x82,0x50) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA, - 0xc892e55b,0x252d,0x42b5,0xa3,0x16,0xd9,0x97,0xe7,0xa5,0xd9,0x95) -#endif -/* ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || - (NTDDI_VERSION >= NTDDI_WS03SP1) */ - -#if (NTDDI_VERSION >= NTDDI_WINXP) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE, - 0x138aa9a4,0x1ee2,0x4c5b,0x98,0x8e,0x19,0xab,0xfd,0xbc,0x8a,0x11) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_UDCR_TRANSPORT, - 0x18BEC4EA,0x4676,0x450e,0xB4,0x78,0x0C,0xD8,0x4C,0x54,0xB3,0x27) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_RAW, - 0x0d7aed42,0xcb9a,0x11db,0x97,0x5,0x0,0x50,0x56,0xc0,0x0,0x8) - -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_PROCESSED, - 0xaf748dd4,0xd80,0x11db,0x97,0x5,0x0,0x50,0x56,0xc0,0x0,0x8) - -OUR_GUID_ENTRY(MEDIASUBTYPE_DTS, - 0xe06d8033,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS, - 0xe06d8034,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea) - -OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange, - 0x3577eb09,0x9582,0x477f,0xb2,0x9c,0xb0,0xc4,0x52,0xa4,0xff,0x9a) - -OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke, - 0xae4720ae,0xaa71,0x42d8,0xb8,0x2a,0xff,0xfd,0xf5,0x8b,0x76,0xfd) - -OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep, - 0xc830acbd,0xab07,0x492f,0x88,0x52,0x45,0xb6,0x98,0x7c,0x29,0x79) -#endif /* NTDDI_VERSION >= NTDDI_WINXP */ - -#if (NTDDI_VERSION >= NTDDI_WS03SP1) -OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI, - 0x9c24a977,0x951,0x451a,0x80,0x6,0xe,0x49,0xbd,0x28,0xcd,0x5f) -#endif /* NTDDI_VERSION >= NTDDI_WS03SP1 */ - diff --git a/3rdparty/include/dshow/strmif.h b/3rdparty/include/dshow/strmif.h deleted file mode 100644 index efa23ee..0000000 --- a/3rdparty/include/dshow/strmif.h +++ /dev/null @@ -1,9392 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 475 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error This stub requires an updated version of -#endif - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif - -#ifndef __strmif_h__ -#define __strmif_h__ - -#ifndef __ICreateDevEnum_FWD_DEFINED__ -#define __ICreateDevEnum_FWD_DEFINED__ -typedef struct ICreateDevEnum ICreateDevEnum; -#endif - -#ifndef __IPin_FWD_DEFINED__ -#define __IPin_FWD_DEFINED__ -typedef struct IPin IPin; -#endif - -#ifndef __IEnumPins_FWD_DEFINED__ -#define __IEnumPins_FWD_DEFINED__ -typedef struct IEnumPins IEnumPins; -#endif - -#ifndef __IEnumMediaTypes_FWD_DEFINED__ -#define __IEnumMediaTypes_FWD_DEFINED__ -typedef struct IEnumMediaTypes IEnumMediaTypes; -#endif - -#ifndef __IFilterGraph_FWD_DEFINED__ -#define __IFilterGraph_FWD_DEFINED__ -typedef struct IFilterGraph IFilterGraph; -#endif - -#ifndef __IEnumFilters_FWD_DEFINED__ -#define __IEnumFilters_FWD_DEFINED__ -typedef struct IEnumFilters IEnumFilters; -#endif - -#ifndef __IMediaFilter_FWD_DEFINED__ -#define __IMediaFilter_FWD_DEFINED__ -typedef struct IMediaFilter IMediaFilter; -#endif - -#ifndef __IBaseFilter_FWD_DEFINED__ -#define __IBaseFilter_FWD_DEFINED__ -typedef struct IBaseFilter IBaseFilter; -#endif - -#ifndef __IReferenceClock_FWD_DEFINED__ -#define __IReferenceClock_FWD_DEFINED__ -typedef struct IReferenceClock IReferenceClock; -#endif - -#ifndef __IReferenceClock2_FWD_DEFINED__ -#define __IReferenceClock2_FWD_DEFINED__ -typedef struct IReferenceClock2 IReferenceClock2; -#endif - -#ifndef __IMediaSample_FWD_DEFINED__ -#define __IMediaSample_FWD_DEFINED__ -typedef struct IMediaSample IMediaSample; -#endif - -#ifndef __IMediaSample2_FWD_DEFINED__ -#define __IMediaSample2_FWD_DEFINED__ -typedef struct IMediaSample2 IMediaSample2; -#endif - -#ifndef __IMemAllocator_FWD_DEFINED__ -#define __IMemAllocator_FWD_DEFINED__ -typedef struct IMemAllocator IMemAllocator; -#endif - -#ifndef __IMemAllocatorCallbackTemp_FWD_DEFINED__ -#define __IMemAllocatorCallbackTemp_FWD_DEFINED__ -typedef struct IMemAllocatorCallbackTemp IMemAllocatorCallbackTemp; -#endif - -#ifndef __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__ -#define __IMemAllocatorNotifyCallbackTemp_FWD_DEFINED__ -typedef struct IMemAllocatorNotifyCallbackTemp IMemAllocatorNotifyCallbackTemp; -#endif - -#ifndef __IMemInputPin_FWD_DEFINED__ -#define __IMemInputPin_FWD_DEFINED__ -typedef struct IMemInputPin IMemInputPin; -#endif - -#ifndef __IAMovieSetup_FWD_DEFINED__ -#define __IAMovieSetup_FWD_DEFINED__ -typedef struct IAMovieSetup IAMovieSetup; -#endif - -#ifndef __IMediaSeeking_FWD_DEFINED__ -#define __IMediaSeeking_FWD_DEFINED__ -typedef struct IMediaSeeking IMediaSeeking; -#endif - -#ifndef __IEnumRegFilters_FWD_DEFINED__ -#define __IEnumRegFilters_FWD_DEFINED__ -typedef struct IEnumRegFilters IEnumRegFilters; -#endif - -#ifndef __IFilterMapper_FWD_DEFINED__ -#define __IFilterMapper_FWD_DEFINED__ -typedef struct IFilterMapper IFilterMapper; -#endif - -#ifndef __IFilterMapper2_FWD_DEFINED__ -#define __IFilterMapper2_FWD_DEFINED__ -typedef struct IFilterMapper2 IFilterMapper2; -#endif - -#ifndef __IFilterMapper3_FWD_DEFINED__ -#define __IFilterMapper3_FWD_DEFINED__ -typedef struct IFilterMapper3 IFilterMapper3; -#endif - -#ifndef __IQualityControl_FWD_DEFINED__ -#define __IQualityControl_FWD_DEFINED__ -typedef struct IQualityControl IQualityControl; -#endif - -#ifndef __IOverlayNotify_FWD_DEFINED__ -#define __IOverlayNotify_FWD_DEFINED__ -typedef struct IOverlayNotify IOverlayNotify; -#endif - -#ifndef __IOverlayNotify2_FWD_DEFINED__ -#define __IOverlayNotify2_FWD_DEFINED__ -typedef struct IOverlayNotify2 IOverlayNotify2; -#endif - -#ifndef __IOverlay_FWD_DEFINED__ -#define __IOverlay_FWD_DEFINED__ -typedef struct IOverlay IOverlay; -#endif - -#ifndef __IMediaEventSink_FWD_DEFINED__ -#define __IMediaEventSink_FWD_DEFINED__ -typedef struct IMediaEventSink IMediaEventSink; -#endif - -#ifndef __IFileSourceFilter_FWD_DEFINED__ -#define __IFileSourceFilter_FWD_DEFINED__ -typedef struct IFileSourceFilter IFileSourceFilter; -#endif - -#ifndef __IFileSinkFilter_FWD_DEFINED__ -#define __IFileSinkFilter_FWD_DEFINED__ -typedef struct IFileSinkFilter IFileSinkFilter; -#endif - -#ifndef __IFileSinkFilter2_FWD_DEFINED__ -#define __IFileSinkFilter2_FWD_DEFINED__ -typedef struct IFileSinkFilter2 IFileSinkFilter2; -#endif - -#ifndef __IGraphBuilder_FWD_DEFINED__ -#define __IGraphBuilder_FWD_DEFINED__ -typedef struct IGraphBuilder IGraphBuilder; -#endif - -#ifndef __ICaptureGraphBuilder_FWD_DEFINED__ -#define __ICaptureGraphBuilder_FWD_DEFINED__ -typedef struct ICaptureGraphBuilder ICaptureGraphBuilder; -#endif - -#ifndef __IAMCopyCaptureFileProgress_FWD_DEFINED__ -#define __IAMCopyCaptureFileProgress_FWD_DEFINED__ -typedef struct IAMCopyCaptureFileProgress IAMCopyCaptureFileProgress; -#endif - -#ifndef __ICaptureGraphBuilder2_FWD_DEFINED__ -#define __ICaptureGraphBuilder2_FWD_DEFINED__ -typedef struct ICaptureGraphBuilder2 ICaptureGraphBuilder2; -#endif - -#ifndef __IFilterGraph2_FWD_DEFINED__ -#define __IFilterGraph2_FWD_DEFINED__ -typedef struct IFilterGraph2 IFilterGraph2; -#endif - -#ifndef __IStreamBuilder_FWD_DEFINED__ -#define __IStreamBuilder_FWD_DEFINED__ -typedef struct IStreamBuilder IStreamBuilder; -#endif - -#ifndef __IAsyncReader_FWD_DEFINED__ -#define __IAsyncReader_FWD_DEFINED__ -typedef struct IAsyncReader IAsyncReader; -#endif - -#ifndef __IGraphVersion_FWD_DEFINED__ -#define __IGraphVersion_FWD_DEFINED__ -typedef struct IGraphVersion IGraphVersion; -#endif - -#ifndef __IResourceConsumer_FWD_DEFINED__ -#define __IResourceConsumer_FWD_DEFINED__ -typedef struct IResourceConsumer IResourceConsumer; -#endif - -#ifndef __IResourceManager_FWD_DEFINED__ -#define __IResourceManager_FWD_DEFINED__ -typedef struct IResourceManager IResourceManager; -#endif - -#ifndef __IDistributorNotify_FWD_DEFINED__ -#define __IDistributorNotify_FWD_DEFINED__ -typedef struct IDistributorNotify IDistributorNotify; -#endif - -#ifndef __IAMStreamControl_FWD_DEFINED__ -#define __IAMStreamControl_FWD_DEFINED__ -typedef struct IAMStreamControl IAMStreamControl; -#endif - -#ifndef __ISeekingPassThru_FWD_DEFINED__ -#define __ISeekingPassThru_FWD_DEFINED__ -typedef struct ISeekingPassThru ISeekingPassThru; -#endif - -#ifndef __IAMStreamConfig_FWD_DEFINED__ -#define __IAMStreamConfig_FWD_DEFINED__ -typedef struct IAMStreamConfig IAMStreamConfig; -#endif - -#ifndef __IConfigInterleaving_FWD_DEFINED__ -#define __IConfigInterleaving_FWD_DEFINED__ -typedef struct IConfigInterleaving IConfigInterleaving; -#endif - -#ifndef __IConfigAviMux_FWD_DEFINED__ -#define __IConfigAviMux_FWD_DEFINED__ -typedef struct IConfigAviMux IConfigAviMux; -#endif - -#ifndef __IAMVideoCompression_FWD_DEFINED__ -#define __IAMVideoCompression_FWD_DEFINED__ -typedef struct IAMVideoCompression IAMVideoCompression; -#endif - -#ifndef __IAMVfwCaptureDialogs_FWD_DEFINED__ -#define __IAMVfwCaptureDialogs_FWD_DEFINED__ -typedef struct IAMVfwCaptureDialogs IAMVfwCaptureDialogs; -#endif - -#ifndef __IAMVfwCompressDialogs_FWD_DEFINED__ -#define __IAMVfwCompressDialogs_FWD_DEFINED__ -typedef struct IAMVfwCompressDialogs IAMVfwCompressDialogs; -#endif - -#ifndef __IAMDroppedFrames_FWD_DEFINED__ -#define __IAMDroppedFrames_FWD_DEFINED__ -typedef struct IAMDroppedFrames IAMDroppedFrames; -#endif - -#ifndef __IAMAudioInputMixer_FWD_DEFINED__ -#define __IAMAudioInputMixer_FWD_DEFINED__ -typedef struct IAMAudioInputMixer IAMAudioInputMixer; -#endif - -#ifndef __IAMBufferNegotiation_FWD_DEFINED__ -#define __IAMBufferNegotiation_FWD_DEFINED__ -typedef struct IAMBufferNegotiation IAMBufferNegotiation; -#endif - -#ifndef __IAMAnalogVideoDecoder_FWD_DEFINED__ -#define __IAMAnalogVideoDecoder_FWD_DEFINED__ -typedef struct IAMAnalogVideoDecoder IAMAnalogVideoDecoder; -#endif - -#ifndef __IAMVideoProcAmp_FWD_DEFINED__ -#define __IAMVideoProcAmp_FWD_DEFINED__ -typedef struct IAMVideoProcAmp IAMVideoProcAmp; -#endif - -#ifndef __IAMCameraControl_FWD_DEFINED__ -#define __IAMCameraControl_FWD_DEFINED__ -typedef struct IAMCameraControl IAMCameraControl; -#endif - -#ifndef __IAMVideoControl_FWD_DEFINED__ -#define __IAMVideoControl_FWD_DEFINED__ -typedef struct IAMVideoControl IAMVideoControl; -#endif - -#ifndef __IAMCrossbar_FWD_DEFINED__ -#define __IAMCrossbar_FWD_DEFINED__ -typedef struct IAMCrossbar IAMCrossbar; -#endif - -#ifndef __IAMTuner_FWD_DEFINED__ -#define __IAMTuner_FWD_DEFINED__ -typedef struct IAMTuner IAMTuner; -#endif - -#ifndef __IAMTunerNotification_FWD_DEFINED__ -#define __IAMTunerNotification_FWD_DEFINED__ -typedef struct IAMTunerNotification IAMTunerNotification; -#endif - -#ifndef __IAMTVTuner_FWD_DEFINED__ -#define __IAMTVTuner_FWD_DEFINED__ -typedef struct IAMTVTuner IAMTVTuner; -#endif - -#ifndef __IBPCSatelliteTuner_FWD_DEFINED__ -#define __IBPCSatelliteTuner_FWD_DEFINED__ -typedef struct IBPCSatelliteTuner IBPCSatelliteTuner; -#endif - -#ifndef __IAMTVAudio_FWD_DEFINED__ -#define __IAMTVAudio_FWD_DEFINED__ -typedef struct IAMTVAudio IAMTVAudio; -#endif - -#ifndef __IAMTVAudioNotification_FWD_DEFINED__ -#define __IAMTVAudioNotification_FWD_DEFINED__ -typedef struct IAMTVAudioNotification IAMTVAudioNotification; -#endif - -#ifndef __IAMAnalogVideoEncoder_FWD_DEFINED__ -#define __IAMAnalogVideoEncoder_FWD_DEFINED__ -typedef struct IAMAnalogVideoEncoder IAMAnalogVideoEncoder; -#endif - -#ifndef __IKsPropertySet_FWD_DEFINED__ -#define __IKsPropertySet_FWD_DEFINED__ -typedef struct IKsPropertySet IKsPropertySet; -#endif - -#ifndef __IMediaPropertyBag_FWD_DEFINED__ -#define __IMediaPropertyBag_FWD_DEFINED__ -typedef struct IMediaPropertyBag IMediaPropertyBag; -#endif - -#ifndef __IPersistMediaPropertyBag_FWD_DEFINED__ -#define __IPersistMediaPropertyBag_FWD_DEFINED__ -typedef struct IPersistMediaPropertyBag IPersistMediaPropertyBag; -#endif - -#ifndef __IAMPhysicalPinInfo_FWD_DEFINED__ -#define __IAMPhysicalPinInfo_FWD_DEFINED__ -typedef struct IAMPhysicalPinInfo IAMPhysicalPinInfo; -#endif - -#ifndef __IAMExtDevice_FWD_DEFINED__ -#define __IAMExtDevice_FWD_DEFINED__ -typedef struct IAMExtDevice IAMExtDevice; -#endif - -#ifndef __IAMExtTransport_FWD_DEFINED__ -#define __IAMExtTransport_FWD_DEFINED__ -typedef struct IAMExtTransport IAMExtTransport; -#endif - -#ifndef __IAMTimecodeReader_FWD_DEFINED__ -#define __IAMTimecodeReader_FWD_DEFINED__ -typedef struct IAMTimecodeReader IAMTimecodeReader; -#endif - -#ifndef __IAMTimecodeGenerator_FWD_DEFINED__ -#define __IAMTimecodeGenerator_FWD_DEFINED__ -typedef struct IAMTimecodeGenerator IAMTimecodeGenerator; -#endif - -#ifndef __IAMTimecodeDisplay_FWD_DEFINED__ -#define __IAMTimecodeDisplay_FWD_DEFINED__ -typedef struct IAMTimecodeDisplay IAMTimecodeDisplay; -#endif - -#ifndef __IAMDevMemoryAllocator_FWD_DEFINED__ -#define __IAMDevMemoryAllocator_FWD_DEFINED__ -typedef struct IAMDevMemoryAllocator IAMDevMemoryAllocator; -#endif - -#ifndef __IAMDevMemoryControl_FWD_DEFINED__ -#define __IAMDevMemoryControl_FWD_DEFINED__ -typedef struct IAMDevMemoryControl IAMDevMemoryControl; -#endif - -#ifndef __IAMStreamSelect_FWD_DEFINED__ -#define __IAMStreamSelect_FWD_DEFINED__ -typedef struct IAMStreamSelect IAMStreamSelect; -#endif - -#ifndef __IAMResourceControl_FWD_DEFINED__ -#define __IAMResourceControl_FWD_DEFINED__ -typedef struct IAMResourceControl IAMResourceControl; -#endif - -#ifndef __IAMClockAdjust_FWD_DEFINED__ -#define __IAMClockAdjust_FWD_DEFINED__ -typedef struct IAMClockAdjust IAMClockAdjust; -#endif - -#ifndef __IAMFilterMiscFlags_FWD_DEFINED__ -#define __IAMFilterMiscFlags_FWD_DEFINED__ -typedef struct IAMFilterMiscFlags IAMFilterMiscFlags; -#endif - -#ifndef __IDrawVideoImage_FWD_DEFINED__ -#define __IDrawVideoImage_FWD_DEFINED__ -typedef struct IDrawVideoImage IDrawVideoImage; -#endif - -#ifndef __IDecimateVideoImage_FWD_DEFINED__ -#define __IDecimateVideoImage_FWD_DEFINED__ -typedef struct IDecimateVideoImage IDecimateVideoImage; -#endif - -#ifndef __IAMVideoDecimationProperties_FWD_DEFINED__ -#define __IAMVideoDecimationProperties_FWD_DEFINED__ -typedef struct IAMVideoDecimationProperties IAMVideoDecimationProperties; -#endif - -#ifndef __IVideoFrameStep_FWD_DEFINED__ -#define __IVideoFrameStep_FWD_DEFINED__ -typedef struct IVideoFrameStep IVideoFrameStep; -#endif - -#ifndef __IAMLatency_FWD_DEFINED__ -#define __IAMLatency_FWD_DEFINED__ -typedef struct IAMLatency IAMLatency; -#endif - -#ifndef __IAMPushSource_FWD_DEFINED__ -#define __IAMPushSource_FWD_DEFINED__ -typedef struct IAMPushSource IAMPushSource; -#endif - -#ifndef __IAMDeviceRemoval_FWD_DEFINED__ -#define __IAMDeviceRemoval_FWD_DEFINED__ -typedef struct IAMDeviceRemoval IAMDeviceRemoval; -#endif - -#ifndef __IDVEnc_FWD_DEFINED__ -#define __IDVEnc_FWD_DEFINED__ -typedef struct IDVEnc IDVEnc; -#endif - -#ifndef __IIPDVDec_FWD_DEFINED__ -#define __IIPDVDec_FWD_DEFINED__ -typedef struct IIPDVDec IIPDVDec; -#endif - -#ifndef __IDVRGB219_FWD_DEFINED__ -#define __IDVRGB219_FWD_DEFINED__ -typedef struct IDVRGB219 IDVRGB219; -#endif - -#ifndef __IDVSplitter_FWD_DEFINED__ -#define __IDVSplitter_FWD_DEFINED__ -typedef struct IDVSplitter IDVSplitter; -#endif - -#ifndef __IAMAudioRendererStats_FWD_DEFINED__ -#define __IAMAudioRendererStats_FWD_DEFINED__ -typedef struct IAMAudioRendererStats IAMAudioRendererStats; -#endif - -#ifndef __IAMGraphStreams_FWD_DEFINED__ -#define __IAMGraphStreams_FWD_DEFINED__ -typedef struct IAMGraphStreams IAMGraphStreams; -#endif - -#ifndef __IAMOverlayFX_FWD_DEFINED__ -#define __IAMOverlayFX_FWD_DEFINED__ -typedef struct IAMOverlayFX IAMOverlayFX; -#endif - -#ifndef __IAMOpenProgress_FWD_DEFINED__ -#define __IAMOpenProgress_FWD_DEFINED__ -typedef struct IAMOpenProgress IAMOpenProgress; -#endif - -#ifndef __IMpeg2Demultiplexer_FWD_DEFINED__ -#define __IMpeg2Demultiplexer_FWD_DEFINED__ -typedef struct IMpeg2Demultiplexer IMpeg2Demultiplexer; -#endif - -#ifndef __IEnumStreamIdMap_FWD_DEFINED__ -#define __IEnumStreamIdMap_FWD_DEFINED__ -typedef struct IEnumStreamIdMap IEnumStreamIdMap; -#endif - -#ifndef __IMPEG2StreamIdMap_FWD_DEFINED__ -#define __IMPEG2StreamIdMap_FWD_DEFINED__ -typedef struct IMPEG2StreamIdMap IMPEG2StreamIdMap; -#endif - -#ifndef __IRegisterServiceProvider_FWD_DEFINED__ -#define __IRegisterServiceProvider_FWD_DEFINED__ -typedef struct IRegisterServiceProvider IRegisterServiceProvider; -#endif - -#ifndef __IAMClockSlave_FWD_DEFINED__ -#define __IAMClockSlave_FWD_DEFINED__ -typedef struct IAMClockSlave IAMClockSlave; -#endif - -#ifndef __IAMGraphBuilderCallback_FWD_DEFINED__ -#define __IAMGraphBuilderCallback_FWD_DEFINED__ -typedef struct IAMGraphBuilderCallback IAMGraphBuilderCallback; -#endif - -#ifndef __ICodecAPI_FWD_DEFINED__ -#define __ICodecAPI_FWD_DEFINED__ -typedef struct ICodecAPI ICodecAPI; -#endif - -#ifndef __IGetCapabilitiesKey_FWD_DEFINED__ -#define __IGetCapabilitiesKey_FWD_DEFINED__ -typedef struct IGetCapabilitiesKey IGetCapabilitiesKey; -#endif - -#ifndef __IEncoderAPI_FWD_DEFINED__ -#define __IEncoderAPI_FWD_DEFINED__ -typedef struct IEncoderAPI IEncoderAPI; -#endif - -#ifndef __IVideoEncoder_FWD_DEFINED__ -#define __IVideoEncoder_FWD_DEFINED__ -typedef struct IVideoEncoder IVideoEncoder; -#endif - -#ifndef __IAMDecoderCaps_FWD_DEFINED__ -#define __IAMDecoderCaps_FWD_DEFINED__ -typedef struct IAMDecoderCaps IAMDecoderCaps; -#endif - -#ifndef __IAMCertifiedOutputProtection_FWD_DEFINED__ -#define __IAMCertifiedOutputProtection_FWD_DEFINED__ -typedef struct IAMCertifiedOutputProtection IAMCertifiedOutputProtection; -#endif - -#ifndef __IDvdControl_FWD_DEFINED__ -#define __IDvdControl_FWD_DEFINED__ -typedef struct IDvdControl IDvdControl; -#endif - -#ifndef __IDvdInfo_FWD_DEFINED__ -#define __IDvdInfo_FWD_DEFINED__ -typedef struct IDvdInfo IDvdInfo; -#endif - -#ifndef __IDvdCmd_FWD_DEFINED__ -#define __IDvdCmd_FWD_DEFINED__ -typedef struct IDvdCmd IDvdCmd; -#endif - -#ifndef __IDvdState_FWD_DEFINED__ -#define __IDvdState_FWD_DEFINED__ -typedef struct IDvdState IDvdState; -#endif - -#ifndef __IDvdControl2_FWD_DEFINED__ -#define __IDvdControl2_FWD_DEFINED__ -typedef struct IDvdControl2 IDvdControl2; -#endif - -#ifndef __IDvdInfo2_FWD_DEFINED__ -#define __IDvdInfo2_FWD_DEFINED__ -typedef struct IDvdInfo2 IDvdInfo2; -#endif - -#ifndef __IDvdGraphBuilder_FWD_DEFINED__ -#define __IDvdGraphBuilder_FWD_DEFINED__ -typedef struct IDvdGraphBuilder IDvdGraphBuilder; -#endif - -#ifndef __IDDrawExclModeVideo_FWD_DEFINED__ -#define __IDDrawExclModeVideo_FWD_DEFINED__ -typedef struct IDDrawExclModeVideo IDDrawExclModeVideo; -#endif - -#ifndef __IDDrawExclModeVideoCallback_FWD_DEFINED__ -#define __IDDrawExclModeVideoCallback_FWD_DEFINED__ -typedef struct IDDrawExclModeVideoCallback IDDrawExclModeVideoCallback; -#endif - -#ifndef __IPinConnection_FWD_DEFINED__ -#define __IPinConnection_FWD_DEFINED__ -typedef struct IPinConnection IPinConnection; -#endif - -#ifndef __IPinFlowControl_FWD_DEFINED__ -#define __IPinFlowControl_FWD_DEFINED__ -typedef struct IPinFlowControl IPinFlowControl; -#endif - -#ifndef __IGraphConfig_FWD_DEFINED__ -#define __IGraphConfig_FWD_DEFINED__ -typedef struct IGraphConfig IGraphConfig; -#endif - -#ifndef __IGraphConfigCallback_FWD_DEFINED__ -#define __IGraphConfigCallback_FWD_DEFINED__ -typedef struct IGraphConfigCallback IGraphConfigCallback; -#endif - -#ifndef __IFilterChain_FWD_DEFINED__ -#define __IFilterChain_FWD_DEFINED__ -typedef struct IFilterChain IFilterChain; -#endif - -#ifndef __IVMRImagePresenter_FWD_DEFINED__ -#define __IVMRImagePresenter_FWD_DEFINED__ -typedef struct IVMRImagePresenter IVMRImagePresenter; -#endif - -#ifndef __IVMRSurfaceAllocator_FWD_DEFINED__ -#define __IVMRSurfaceAllocator_FWD_DEFINED__ -typedef struct IVMRSurfaceAllocator IVMRSurfaceAllocator; -#endif - -#ifndef __IVMRSurfaceAllocatorNotify_FWD_DEFINED__ -#define __IVMRSurfaceAllocatorNotify_FWD_DEFINED__ -typedef struct IVMRSurfaceAllocatorNotify IVMRSurfaceAllocatorNotify; -#endif - -#ifndef __IVMRWindowlessControl_FWD_DEFINED__ -#define __IVMRWindowlessControl_FWD_DEFINED__ -typedef struct IVMRWindowlessControl IVMRWindowlessControl; -#endif - -#ifndef __IVMRMixerControl_FWD_DEFINED__ -#define __IVMRMixerControl_FWD_DEFINED__ -typedef struct IVMRMixerControl IVMRMixerControl; -#endif - -#ifndef __IVMRMonitorConfig_FWD_DEFINED__ -#define __IVMRMonitorConfig_FWD_DEFINED__ -typedef struct IVMRMonitorConfig IVMRMonitorConfig; -#endif - -#ifndef __IVMRFilterConfig_FWD_DEFINED__ -#define __IVMRFilterConfig_FWD_DEFINED__ -typedef struct IVMRFilterConfig IVMRFilterConfig; -#endif - -#ifndef __IVMRAspectRatioControl_FWD_DEFINED__ -#define __IVMRAspectRatioControl_FWD_DEFINED__ -typedef struct IVMRAspectRatioControl IVMRAspectRatioControl; -#endif - -#ifndef __IVMRDeinterlaceControl_FWD_DEFINED__ -#define __IVMRDeinterlaceControl_FWD_DEFINED__ -typedef struct IVMRDeinterlaceControl IVMRDeinterlaceControl; -#endif - -#ifndef __IVMRMixerBitmap_FWD_DEFINED__ -#define __IVMRMixerBitmap_FWD_DEFINED__ -typedef struct IVMRMixerBitmap IVMRMixerBitmap; -#endif - -#ifndef __IVMRImageCompositor_FWD_DEFINED__ -#define __IVMRImageCompositor_FWD_DEFINED__ -typedef struct IVMRImageCompositor IVMRImageCompositor; -#endif - -#ifndef __IVMRVideoStreamControl_FWD_DEFINED__ -#define __IVMRVideoStreamControl_FWD_DEFINED__ -typedef struct IVMRVideoStreamControl IVMRVideoStreamControl; -#endif - -#ifndef __IVMRSurface_FWD_DEFINED__ -#define __IVMRSurface_FWD_DEFINED__ -typedef struct IVMRSurface IVMRSurface; -#endif - -#ifndef __IVMRImagePresenterConfig_FWD_DEFINED__ -#define __IVMRImagePresenterConfig_FWD_DEFINED__ -typedef struct IVMRImagePresenterConfig IVMRImagePresenterConfig; -#endif - -#ifndef __IVMRImagePresenterExclModeConfig_FWD_DEFINED__ -#define __IVMRImagePresenterExclModeConfig_FWD_DEFINED__ -typedef struct IVMRImagePresenterExclModeConfig IVMRImagePresenterExclModeConfig; -#endif - -#ifndef __IVPManager_FWD_DEFINED__ -#define __IVPManager_FWD_DEFINED__ -typedef struct IVPManager IVPManager; -#endif - -#include "unknwn.h" -#include "objidl.h" -#include "oaidl.h" -#include "ocidl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __MIDL_user_allocate_free_DEFINED__ -#define __MIDL_user_allocate_free_DEFINED__ - void *__RPC_API MIDL_user_allocate(size_t); - void __RPC_API MIDL_user_free(void *); -#endif - -#define CDEF_CLASS_DEFAULT 0x0001 -#define CDEF_BYPASS_CLASS_MANAGER 0x0002 -#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008 -#define CDEF_DEVMON_CMGR_DEVICE 0x0010 -#define CDEF_DEVMON_DMO 0x0020 -#define CDEF_DEVMON_PNP_DEVICE 0x0040 -#define CDEF_DEVMON_FILTER 0x0080 -#define CDEF_DEVMON_SELECTIVE_MASK 0x00f0 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0000_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0000_v0_0_s_ifspec; -#ifndef __ICreateDevEnum_INTERFACE_DEFINED__ -#define __ICreateDevEnum_INTERFACE_DEFINED__ - EXTERN_C const IID IID_ICreateDevEnum; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct ICreateDevEnum : public IUnknown { - public: - virtual HRESULT WINAPI CreateClassEnumerator(REFCLSID clsidDeviceClass,IEnumMoniker **ppEnumMoniker,DWORD dwFlags) = 0; - }; -#else - typedef struct ICreateDevEnumVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(ICreateDevEnum *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(ICreateDevEnum *This); - ULONG (WINAPI *Release)(ICreateDevEnum *This); - HRESULT (WINAPI *CreateClassEnumerator)(ICreateDevEnum *This,REFCLSID clsidDeviceClass,IEnumMoniker **ppEnumMoniker,DWORD dwFlags); - END_INTERFACE - } ICreateDevEnumVtbl; - struct ICreateDevEnum { - CONST_VTBL struct ICreateDevEnumVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define ICreateDevEnum_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define ICreateDevEnum_AddRef(This) (This)->lpVtbl->AddRef(This) -#define ICreateDevEnum_Release(This) (This)->lpVtbl->Release(This) -#define ICreateDevEnum_CreateClassEnumerator(This,clsidDeviceClass,ppEnumMoniker,dwFlags) (This)->lpVtbl->CreateClassEnumerator(This,clsidDeviceClass,ppEnumMoniker,dwFlags) -#endif -#endif - HRESULT WINAPI ICreateDevEnum_CreateClassEnumerator_Proxy(ICreateDevEnum *This,REFCLSID clsidDeviceClass,IEnumMoniker **ppEnumMoniker,DWORD dwFlags); - void __RPC_STUB ICreateDevEnum_CreateClassEnumerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#define CHARS_IN_GUID 39 - typedef struct _AMMediaType { - GUID majortype; - GUID subtype; - WINBOOL bFixedSizeSamples; - WINBOOL bTemporalCompression; - ULONG lSampleSize; - GUID formattype; - IUnknown *pUnk; - ULONG cbFormat; - BYTE *pbFormat; - } AM_MEDIA_TYPE; - - typedef enum _PinDirection { - PINDIR_INPUT = 0,PINDIR_OUTPUT = PINDIR_INPUT + 1 - } PIN_DIRECTION; - -#define MAX_PIN_NAME 128 -#define MAX_FILTER_NAME 128 - -#ifndef __REFERENCE_TIME_DEFINED -#define __REFERENCE_TIME_DEFINED -typedef LONGLONG REFERENCE_TIME; -#endif /*__REFERENCE_TIME_DEFINED*/ - - typedef double REFTIME; - typedef DWORD_PTR HSEMAPHORE; - typedef DWORD_PTR HEVENT; - - typedef struct _AllocatorProperties { - long cBuffers; - long cbBuffer; - long cbAlign; - long cbPrefix; - } ALLOCATOR_PROPERTIES; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0117_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0117_v0_0_s_ifspec; -#ifndef __IPin_INTERFACE_DEFINED__ -#define __IPin_INTERFACE_DEFINED__ - typedef struct _PinInfo { - IBaseFilter *pFilter; - PIN_DIRECTION dir; - WCHAR achName[128]; - } PIN_INFO; - - EXTERN_C const IID IID_IPin; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IPin : public IUnknown { - public: - virtual HRESULT WINAPI Connect(IPin *pReceivePin,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI ReceiveConnection(IPin *pConnector,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI Disconnect(void) = 0; - virtual HRESULT WINAPI ConnectedTo(IPin **pPin) = 0; - virtual HRESULT WINAPI ConnectionMediaType(AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI QueryPinInfo(PIN_INFO *pInfo) = 0; - virtual HRESULT WINAPI QueryDirection(PIN_DIRECTION *pPinDir) = 0; - virtual HRESULT WINAPI QueryId(LPWSTR *Id) = 0; - virtual HRESULT WINAPI QueryAccept(const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI EnumMediaTypes(IEnumMediaTypes **ppEnum) = 0; - virtual HRESULT WINAPI QueryInternalConnections(IPin **apPin,ULONG *nPin) = 0; - virtual HRESULT WINAPI EndOfStream(void) = 0; - virtual HRESULT WINAPI BeginFlush(void) = 0; - virtual HRESULT WINAPI EndFlush(void) = 0; - virtual HRESULT WINAPI NewSegment(REFERENCE_TIME tStart,REFERENCE_TIME tStop,double dRate) = 0; - }; -#else - typedef struct IPinVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IPin *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IPin *This); - ULONG (WINAPI *Release)(IPin *This); - HRESULT (WINAPI *Connect)(IPin *This,IPin *pReceivePin,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *ReceiveConnection)(IPin *This,IPin *pConnector,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *Disconnect)(IPin *This); - HRESULT (WINAPI *ConnectedTo)(IPin *This,IPin **pPin); - HRESULT (WINAPI *ConnectionMediaType)(IPin *This,AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *QueryPinInfo)(IPin *This,PIN_INFO *pInfo); - HRESULT (WINAPI *QueryDirection)(IPin *This,PIN_DIRECTION *pPinDir); - HRESULT (WINAPI *QueryId)(IPin *This,LPWSTR *Id); - HRESULT (WINAPI *QueryAccept)(IPin *This,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *EnumMediaTypes)(IPin *This,IEnumMediaTypes **ppEnum); - HRESULT (WINAPI *QueryInternalConnections)(IPin *This,IPin **apPin,ULONG *nPin); - HRESULT (WINAPI *EndOfStream)(IPin *This); - HRESULT (WINAPI *BeginFlush)(IPin *This); - HRESULT (WINAPI *EndFlush)(IPin *This); - HRESULT (WINAPI *NewSegment)(IPin *This,REFERENCE_TIME tStart,REFERENCE_TIME tStop,double dRate); - END_INTERFACE - } IPinVtbl; - struct IPin { - CONST_VTBL struct IPinVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IPin_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IPin_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IPin_Release(This) (This)->lpVtbl->Release(This) -#define IPin_Connect(This,pReceivePin,pmt) (This)->lpVtbl->Connect(This,pReceivePin,pmt) -#define IPin_ReceiveConnection(This,pConnector,pmt) (This)->lpVtbl->ReceiveConnection(This,pConnector,pmt) -#define IPin_Disconnect(This) (This)->lpVtbl->Disconnect(This) -#define IPin_ConnectedTo(This,pPin) (This)->lpVtbl->ConnectedTo(This,pPin) -#define IPin_ConnectionMediaType(This,pmt) (This)->lpVtbl->ConnectionMediaType(This,pmt) -#define IPin_QueryPinInfo(This,pInfo) (This)->lpVtbl->QueryPinInfo(This,pInfo) -#define IPin_QueryDirection(This,pPinDir) (This)->lpVtbl->QueryDirection(This,pPinDir) -#define IPin_QueryId(This,Id) (This)->lpVtbl->QueryId(This,Id) -#define IPin_QueryAccept(This,pmt) (This)->lpVtbl->QueryAccept(This,pmt) -#define IPin_EnumMediaTypes(This,ppEnum) (This)->lpVtbl->EnumMediaTypes(This,ppEnum) -#define IPin_QueryInternalConnections(This,apPin,nPin) (This)->lpVtbl->QueryInternalConnections(This,apPin,nPin) -#define IPin_EndOfStream(This) (This)->lpVtbl->EndOfStream(This) -#define IPin_BeginFlush(This) (This)->lpVtbl->BeginFlush(This) -#define IPin_EndFlush(This) (This)->lpVtbl->EndFlush(This) -#define IPin_NewSegment(This,tStart,tStop,dRate) (This)->lpVtbl->NewSegment(This,tStart,tStop,dRate) -#endif -#endif - HRESULT WINAPI IPin_Connect_Proxy(IPin *This,IPin *pReceivePin,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IPin_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_ReceiveConnection_Proxy(IPin *This,IPin *pConnector,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IPin_ReceiveConnection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_Disconnect_Proxy(IPin *This); - void __RPC_STUB IPin_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_ConnectedTo_Proxy(IPin *This,IPin **pPin); - void __RPC_STUB IPin_ConnectedTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_ConnectionMediaType_Proxy(IPin *This,AM_MEDIA_TYPE *pmt); - void __RPC_STUB IPin_ConnectionMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_QueryPinInfo_Proxy(IPin *This,PIN_INFO *pInfo); - void __RPC_STUB IPin_QueryPinInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_QueryDirection_Proxy(IPin *This,PIN_DIRECTION *pPinDir); - void __RPC_STUB IPin_QueryDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_QueryId_Proxy(IPin *This,LPWSTR *Id); - void __RPC_STUB IPin_QueryId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_QueryAccept_Proxy(IPin *This,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IPin_QueryAccept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_EnumMediaTypes_Proxy(IPin *This,IEnumMediaTypes **ppEnum); - void __RPC_STUB IPin_EnumMediaTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_QueryInternalConnections_Proxy(IPin *This,IPin **apPin,ULONG *nPin); - void __RPC_STUB IPin_QueryInternalConnections_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_EndOfStream_Proxy(IPin *This); - void __RPC_STUB IPin_EndOfStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_BeginFlush_Proxy(IPin *This); - void __RPC_STUB IPin_BeginFlush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_EndFlush_Proxy(IPin *This); - void __RPC_STUB IPin_EndFlush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPin_NewSegment_Proxy(IPin *This,REFERENCE_TIME tStart,REFERENCE_TIME tStop,double dRate); - void __RPC_STUB IPin_NewSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IPin *PPIN; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0118_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0118_v0_0_s_ifspec; -#ifndef __IEnumPins_INTERFACE_DEFINED__ -#define __IEnumPins_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEnumPins; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEnumPins : public IUnknown { - public: - virtual HRESULT WINAPI Next(ULONG cPins,IPin **ppPins,ULONG *pcFetched) = 0; - virtual HRESULT WINAPI Skip(ULONG cPins) = 0; - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI Clone(IEnumPins **ppEnum) = 0; - }; -#else - typedef struct IEnumPinsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEnumPins *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEnumPins *This); - ULONG (WINAPI *Release)(IEnumPins *This); - HRESULT (WINAPI *Next)(IEnumPins *This,ULONG cPins,IPin **ppPins,ULONG *pcFetched); - HRESULT (WINAPI *Skip)(IEnumPins *This,ULONG cPins); - HRESULT (WINAPI *Reset)(IEnumPins *This); - HRESULT (WINAPI *Clone)(IEnumPins *This,IEnumPins **ppEnum); - END_INTERFACE - } IEnumPinsVtbl; - struct IEnumPins { - CONST_VTBL struct IEnumPinsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEnumPins_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEnumPins_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEnumPins_Release(This) (This)->lpVtbl->Release(This) -#define IEnumPins_Next(This,cPins,ppPins,pcFetched) (This)->lpVtbl->Next(This,cPins,ppPins,pcFetched) -#define IEnumPins_Skip(This,cPins) (This)->lpVtbl->Skip(This,cPins) -#define IEnumPins_Reset(This) (This)->lpVtbl->Reset(This) -#define IEnumPins_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum) -#endif -#endif - HRESULT WINAPI IEnumPins_Next_Proxy(IEnumPins *This,ULONG cPins,IPin **ppPins,ULONG *pcFetched); - void __RPC_STUB IEnumPins_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumPins_Skip_Proxy(IEnumPins *This,ULONG cPins); - void __RPC_STUB IEnumPins_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumPins_Reset_Proxy(IEnumPins *This); - void __RPC_STUB IEnumPins_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumPins_Clone_Proxy(IEnumPins *This,IEnumPins **ppEnum); - void __RPC_STUB IEnumPins_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IEnumPins *PENUMPINS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0119_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0119_v0_0_s_ifspec; -#ifndef __IEnumMediaTypes_INTERFACE_DEFINED__ -#define __IEnumMediaTypes_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEnumMediaTypes; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEnumMediaTypes : public IUnknown { - public: - virtual HRESULT WINAPI Next(ULONG cMediaTypes,AM_MEDIA_TYPE **ppMediaTypes,ULONG *pcFetched) = 0; - virtual HRESULT WINAPI Skip(ULONG cMediaTypes) = 0; - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI Clone(IEnumMediaTypes **ppEnum) = 0; - }; -#else - typedef struct IEnumMediaTypesVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEnumMediaTypes *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEnumMediaTypes *This); - ULONG (WINAPI *Release)(IEnumMediaTypes *This); - HRESULT (WINAPI *Next)(IEnumMediaTypes *This,ULONG cMediaTypes,AM_MEDIA_TYPE **ppMediaTypes,ULONG *pcFetched); - HRESULT (WINAPI *Skip)(IEnumMediaTypes *This,ULONG cMediaTypes); - HRESULT (WINAPI *Reset)(IEnumMediaTypes *This); - HRESULT (WINAPI *Clone)(IEnumMediaTypes *This,IEnumMediaTypes **ppEnum); - END_INTERFACE - } IEnumMediaTypesVtbl; - struct IEnumMediaTypes { - CONST_VTBL struct IEnumMediaTypesVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEnumMediaTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEnumMediaTypes_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEnumMediaTypes_Release(This) (This)->lpVtbl->Release(This) -#define IEnumMediaTypes_Next(This,cMediaTypes,ppMediaTypes,pcFetched) (This)->lpVtbl->Next(This,cMediaTypes,ppMediaTypes,pcFetched) -#define IEnumMediaTypes_Skip(This,cMediaTypes) (This)->lpVtbl->Skip(This,cMediaTypes) -#define IEnumMediaTypes_Reset(This) (This)->lpVtbl->Reset(This) -#define IEnumMediaTypes_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum) -#endif -#endif - HRESULT WINAPI IEnumMediaTypes_Next_Proxy(IEnumMediaTypes *This,ULONG cMediaTypes,AM_MEDIA_TYPE **ppMediaTypes,ULONG *pcFetched); - void __RPC_STUB IEnumMediaTypes_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumMediaTypes_Skip_Proxy(IEnumMediaTypes *This,ULONG cMediaTypes); - void __RPC_STUB IEnumMediaTypes_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumMediaTypes_Reset_Proxy(IEnumMediaTypes *This); - void __RPC_STUB IEnumMediaTypes_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumMediaTypes_Clone_Proxy(IEnumMediaTypes *This,IEnumMediaTypes **ppEnum); - void __RPC_STUB IEnumMediaTypes_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IEnumMediaTypes *PENUMMEDIATYPES; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0120_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0120_v0_0_s_ifspec; -#ifndef __IFilterGraph_INTERFACE_DEFINED__ -#define __IFilterGraph_INTERFACE_DEFINED__ - - EXTERN_C const IID IID_IFilterGraph; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterGraph : public IUnknown { - public: - virtual HRESULT WINAPI AddFilter(IBaseFilter *pFilter,LPCWSTR pName) = 0; - virtual HRESULT WINAPI RemoveFilter(IBaseFilter *pFilter) = 0; - virtual HRESULT WINAPI EnumFilters(IEnumFilters **ppEnum) = 0; - virtual HRESULT WINAPI FindFilterByName(LPCWSTR pName,IBaseFilter **ppFilter) = 0; - virtual HRESULT WINAPI ConnectDirect(IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI Reconnect(IPin *ppin) = 0; - virtual HRESULT WINAPI Disconnect(IPin *ppin) = 0; - virtual HRESULT WINAPI SetDefaultSyncSource(void) = 0; - }; -#else - typedef struct IFilterGraphVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterGraph *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterGraph *This); - ULONG (WINAPI *Release)(IFilterGraph *This); - HRESULT (WINAPI *AddFilter)(IFilterGraph *This,IBaseFilter *pFilter,LPCWSTR pName); - HRESULT (WINAPI *RemoveFilter)(IFilterGraph *This,IBaseFilter *pFilter); - HRESULT (WINAPI *EnumFilters)(IFilterGraph *This,IEnumFilters **ppEnum); - HRESULT (WINAPI *FindFilterByName)(IFilterGraph *This,LPCWSTR pName,IBaseFilter **ppFilter); - HRESULT (WINAPI *ConnectDirect)(IFilterGraph *This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *Reconnect)(IFilterGraph *This,IPin *ppin); - HRESULT (WINAPI *Disconnect)(IFilterGraph *This,IPin *ppin); - HRESULT (WINAPI *SetDefaultSyncSource)(IFilterGraph *This); - END_INTERFACE - } IFilterGraphVtbl; - struct IFilterGraph { - CONST_VTBL struct IFilterGraphVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterGraph_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterGraph_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterGraph_Release(This) (This)->lpVtbl->Release(This) -#define IFilterGraph_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName) -#define IFilterGraph_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter) -#define IFilterGraph_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum) -#define IFilterGraph_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter) -#define IFilterGraph_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt) -#define IFilterGraph_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin) -#define IFilterGraph_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin) -#define IFilterGraph_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This) -#endif -#endif - HRESULT WINAPI IFilterGraph_AddFilter_Proxy(IFilterGraph *This,IBaseFilter *pFilter,LPCWSTR pName); - void __RPC_STUB IFilterGraph_AddFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_RemoveFilter_Proxy(IFilterGraph *This,IBaseFilter *pFilter); - void __RPC_STUB IFilterGraph_RemoveFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_EnumFilters_Proxy(IFilterGraph *This,IEnumFilters **ppEnum); - void __RPC_STUB IFilterGraph_EnumFilters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_FindFilterByName_Proxy(IFilterGraph *This,LPCWSTR pName,IBaseFilter **ppFilter); - void __RPC_STUB IFilterGraph_FindFilterByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_ConnectDirect_Proxy(IFilterGraph *This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFilterGraph_ConnectDirect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_Reconnect_Proxy(IFilterGraph *This,IPin *ppin); - void __RPC_STUB IFilterGraph_Reconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_Disconnect_Proxy(IFilterGraph *This,IPin *ppin); - void __RPC_STUB IFilterGraph_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph_SetDefaultSyncSource_Proxy(IFilterGraph *This); - void __RPC_STUB IFilterGraph_SetDefaultSyncSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IFilterGraph *PFILTERGRAPH; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0121_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0121_v0_0_s_ifspec; -#ifndef __IEnumFilters_INTERFACE_DEFINED__ -#define __IEnumFilters_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEnumFilters; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEnumFilters : public IUnknown { - public: - virtual HRESULT WINAPI Next(ULONG cFilters,IBaseFilter **ppFilter,ULONG *pcFetched) = 0; - virtual HRESULT WINAPI Skip(ULONG cFilters) = 0; - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI Clone(IEnumFilters **ppEnum) = 0; - }; -#else - typedef struct IEnumFiltersVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEnumFilters *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEnumFilters *This); - ULONG (WINAPI *Release)(IEnumFilters *This); - HRESULT (WINAPI *Next)(IEnumFilters *This,ULONG cFilters,IBaseFilter **ppFilter,ULONG *pcFetched); - HRESULT (WINAPI *Skip)(IEnumFilters *This,ULONG cFilters); - HRESULT (WINAPI *Reset)(IEnumFilters *This); - HRESULT (WINAPI *Clone)(IEnumFilters *This,IEnumFilters **ppEnum); - END_INTERFACE - } IEnumFiltersVtbl; - struct IEnumFilters { - CONST_VTBL struct IEnumFiltersVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEnumFilters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEnumFilters_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEnumFilters_Release(This) (This)->lpVtbl->Release(This) -#define IEnumFilters_Next(This,cFilters,ppFilter,pcFetched) (This)->lpVtbl->Next(This,cFilters,ppFilter,pcFetched) -#define IEnumFilters_Skip(This,cFilters) (This)->lpVtbl->Skip(This,cFilters) -#define IEnumFilters_Reset(This) (This)->lpVtbl->Reset(This) -#define IEnumFilters_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum) -#endif -#endif - HRESULT WINAPI IEnumFilters_Next_Proxy(IEnumFilters *This,ULONG cFilters,IBaseFilter **ppFilter,ULONG *pcFetched); - void __RPC_STUB IEnumFilters_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumFilters_Skip_Proxy(IEnumFilters *This,ULONG cFilters); - void __RPC_STUB IEnumFilters_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumFilters_Reset_Proxy(IEnumFilters *This); - void __RPC_STUB IEnumFilters_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumFilters_Clone_Proxy(IEnumFilters *This,IEnumFilters **ppEnum); - void __RPC_STUB IEnumFilters_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IEnumFilters *PENUMFILTERS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0122_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0122_v0_0_s_ifspec; -#ifndef __IMediaFilter_INTERFACE_DEFINED__ -#define __IMediaFilter_INTERFACE_DEFINED__ - typedef enum _FilterState { - State_Stopped = 0,State_Paused,State_Running - } FILTER_STATE; - - EXTERN_C const IID IID_IMediaFilter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaFilter : public IPersist { - public: - virtual HRESULT WINAPI Stop(void) = 0; - virtual HRESULT WINAPI Pause(void) = 0; - virtual HRESULT WINAPI Run(REFERENCE_TIME tStart) = 0; - virtual HRESULT WINAPI GetState(DWORD dwMilliSecsTimeout,FILTER_STATE *State) = 0; - virtual HRESULT WINAPI SetSyncSource(IReferenceClock *pClock) = 0; - virtual HRESULT WINAPI GetSyncSource(IReferenceClock **pClock) = 0; - }; -#else - typedef struct IMediaFilterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaFilter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaFilter *This); - ULONG (WINAPI *Release)(IMediaFilter *This); - HRESULT (WINAPI *GetClassID)(IMediaFilter *This,CLSID *pClassID); - HRESULT (WINAPI *Stop)(IMediaFilter *This); - HRESULT (WINAPI *Pause)(IMediaFilter *This); - HRESULT (WINAPI *Run)(IMediaFilter *This,REFERENCE_TIME tStart); - HRESULT (WINAPI *GetState)(IMediaFilter *This,DWORD dwMilliSecsTimeout,FILTER_STATE *State); - HRESULT (WINAPI *SetSyncSource)(IMediaFilter *This,IReferenceClock *pClock); - HRESULT (WINAPI *GetSyncSource)(IMediaFilter *This,IReferenceClock **pClock); - END_INTERFACE - } IMediaFilterVtbl; - struct IMediaFilter { - CONST_VTBL struct IMediaFilterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaFilter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaFilter_Release(This) (This)->lpVtbl->Release(This) -#define IMediaFilter_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID) -#define IMediaFilter_Stop(This) (This)->lpVtbl->Stop(This) -#define IMediaFilter_Pause(This) (This)->lpVtbl->Pause(This) -#define IMediaFilter_Run(This,tStart) (This)->lpVtbl->Run(This,tStart) -#define IMediaFilter_GetState(This,dwMilliSecsTimeout,State) (This)->lpVtbl->GetState(This,dwMilliSecsTimeout,State) -#define IMediaFilter_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock) -#define IMediaFilter_GetSyncSource(This,pClock) (This)->lpVtbl->GetSyncSource(This,pClock) -#endif -#endif - HRESULT WINAPI IMediaFilter_Stop_Proxy(IMediaFilter *This); - void __RPC_STUB IMediaFilter_Stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaFilter_Pause_Proxy(IMediaFilter *This); - void __RPC_STUB IMediaFilter_Pause_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaFilter_Run_Proxy(IMediaFilter *This,REFERENCE_TIME tStart); - void __RPC_STUB IMediaFilter_Run_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaFilter_GetState_Proxy(IMediaFilter *This,DWORD dwMilliSecsTimeout,FILTER_STATE *State); - void __RPC_STUB IMediaFilter_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaFilter_SetSyncSource_Proxy(IMediaFilter *This,IReferenceClock *pClock); - void __RPC_STUB IMediaFilter_SetSyncSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaFilter_GetSyncSource_Proxy(IMediaFilter *This,IReferenceClock **pClock); - void __RPC_STUB IMediaFilter_GetSyncSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMediaFilter *PMEDIAFILTER; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0123_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0123_v0_0_s_ifspec; -#ifndef __IBaseFilter_INTERFACE_DEFINED__ -#define __IBaseFilter_INTERFACE_DEFINED__ - - typedef struct _FilterInfo { - WCHAR achName[128]; - IFilterGraph *pGraph; - } FILTER_INFO; - - EXTERN_C const IID IID_IBaseFilter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IBaseFilter : public IMediaFilter { - public: - virtual HRESULT WINAPI EnumPins(IEnumPins **ppEnum) = 0; - virtual HRESULT WINAPI FindPin(LPCWSTR Id,IPin **ppPin) = 0; - virtual HRESULT WINAPI QueryFilterInfo(FILTER_INFO *pInfo) = 0; - virtual HRESULT WINAPI JoinFilterGraph(IFilterGraph *pGraph,LPCWSTR pName) = 0; - virtual HRESULT WINAPI QueryVendorInfo(LPWSTR *pVendorInfo) = 0; - }; -#else - typedef struct IBaseFilterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IBaseFilter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IBaseFilter *This); - ULONG (WINAPI *Release)(IBaseFilter *This); - HRESULT (WINAPI *GetClassID)(IBaseFilter *This,CLSID *pClassID); - HRESULT (WINAPI *Stop)(IBaseFilter *This); - HRESULT (WINAPI *Pause)(IBaseFilter *This); - HRESULT (WINAPI *Run)(IBaseFilter *This,REFERENCE_TIME tStart); - HRESULT (WINAPI *GetState)(IBaseFilter *This,DWORD dwMilliSecsTimeout,FILTER_STATE *State); - HRESULT (WINAPI *SetSyncSource)(IBaseFilter *This,IReferenceClock *pClock); - HRESULT (WINAPI *GetSyncSource)(IBaseFilter *This,IReferenceClock **pClock); - HRESULT (WINAPI *EnumPins)(IBaseFilter *This,IEnumPins **ppEnum); - HRESULT (WINAPI *FindPin)(IBaseFilter *This,LPCWSTR Id,IPin **ppPin); - HRESULT (WINAPI *QueryFilterInfo)(IBaseFilter *This,FILTER_INFO *pInfo); - HRESULT (WINAPI *JoinFilterGraph)(IBaseFilter *This,IFilterGraph *pGraph,LPCWSTR pName); - HRESULT (WINAPI *QueryVendorInfo)(IBaseFilter *This,LPWSTR *pVendorInfo); - END_INTERFACE - } IBaseFilterVtbl; - struct IBaseFilter { - CONST_VTBL struct IBaseFilterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IBaseFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBaseFilter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBaseFilter_Release(This) (This)->lpVtbl->Release(This) -#define IBaseFilter_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID) -#define IBaseFilter_Stop(This) (This)->lpVtbl->Stop(This) -#define IBaseFilter_Pause(This) (This)->lpVtbl->Pause(This) -#define IBaseFilter_Run(This,tStart) (This)->lpVtbl->Run(This,tStart) -#define IBaseFilter_GetState(This,dwMilliSecsTimeout,State) (This)->lpVtbl->GetState(This,dwMilliSecsTimeout,State) -#define IBaseFilter_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock) -#define IBaseFilter_GetSyncSource(This,pClock) (This)->lpVtbl->GetSyncSource(This,pClock) -#define IBaseFilter_EnumPins(This,ppEnum) (This)->lpVtbl->EnumPins(This,ppEnum) -#define IBaseFilter_FindPin(This,Id,ppPin) (This)->lpVtbl->FindPin(This,Id,ppPin) -#define IBaseFilter_QueryFilterInfo(This,pInfo) (This)->lpVtbl->QueryFilterInfo(This,pInfo) -#define IBaseFilter_JoinFilterGraph(This,pGraph,pName) (This)->lpVtbl->JoinFilterGraph(This,pGraph,pName) -#define IBaseFilter_QueryVendorInfo(This,pVendorInfo) (This)->lpVtbl->QueryVendorInfo(This,pVendorInfo) -#endif -#endif - HRESULT WINAPI IBaseFilter_EnumPins_Proxy(IBaseFilter *This,IEnumPins **ppEnum); - void __RPC_STUB IBaseFilter_EnumPins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBaseFilter_FindPin_Proxy(IBaseFilter *This,LPCWSTR Id,IPin **ppPin); - void __RPC_STUB IBaseFilter_FindPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBaseFilter_QueryFilterInfo_Proxy(IBaseFilter *This,FILTER_INFO *pInfo); - void __RPC_STUB IBaseFilter_QueryFilterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBaseFilter_JoinFilterGraph_Proxy(IBaseFilter *This,IFilterGraph *pGraph,LPCWSTR pName); - void __RPC_STUB IBaseFilter_JoinFilterGraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBaseFilter_QueryVendorInfo_Proxy(IBaseFilter *This,LPWSTR *pVendorInfo); - void __RPC_STUB IBaseFilter_QueryVendorInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IBaseFilter *PFILTER; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0124_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0124_v0_0_s_ifspec; -#ifndef __IReferenceClock_INTERFACE_DEFINED__ -#define __IReferenceClock_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IReferenceClock; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IReferenceClock : public IUnknown { - public: - virtual HRESULT WINAPI GetTime(REFERENCE_TIME *pTime) = 0; - virtual HRESULT WINAPI AdviseTime(REFERENCE_TIME baseTime,REFERENCE_TIME streamTime,HEVENT hEvent,DWORD_PTR *pdwAdviseCookie) = 0; - virtual HRESULT WINAPI AdvisePeriodic(REFERENCE_TIME startTime,REFERENCE_TIME periodTime,HSEMAPHORE hSemaphore,DWORD_PTR *pdwAdviseCookie) = 0; - virtual HRESULT WINAPI Unadvise(DWORD_PTR dwAdviseCookie) = 0; - }; -#else - typedef struct IReferenceClockVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IReferenceClock *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IReferenceClock *This); - ULONG (WINAPI *Release)(IReferenceClock *This); - HRESULT (WINAPI *GetTime)(IReferenceClock *This,REFERENCE_TIME *pTime); - HRESULT (WINAPI *AdviseTime)(IReferenceClock *This,REFERENCE_TIME baseTime,REFERENCE_TIME streamTime,HEVENT hEvent,DWORD_PTR *pdwAdviseCookie); - HRESULT (WINAPI *AdvisePeriodic)(IReferenceClock *This,REFERENCE_TIME startTime,REFERENCE_TIME periodTime,HSEMAPHORE hSemaphore,DWORD_PTR *pdwAdviseCookie); - HRESULT (WINAPI *Unadvise)(IReferenceClock *This,DWORD_PTR dwAdviseCookie); - END_INTERFACE - } IReferenceClockVtbl; - struct IReferenceClock { - CONST_VTBL struct IReferenceClockVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IReferenceClock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IReferenceClock_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IReferenceClock_Release(This) (This)->lpVtbl->Release(This) -#define IReferenceClock_GetTime(This,pTime) (This)->lpVtbl->GetTime(This,pTime) -#define IReferenceClock_AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie) (This)->lpVtbl->AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie) -#define IReferenceClock_AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie) (This)->lpVtbl->AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie) -#define IReferenceClock_Unadvise(This,dwAdviseCookie) (This)->lpVtbl->Unadvise(This,dwAdviseCookie) -#endif -#endif - HRESULT WINAPI IReferenceClock_GetTime_Proxy(IReferenceClock *This,REFERENCE_TIME *pTime); - void __RPC_STUB IReferenceClock_GetTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IReferenceClock_AdviseTime_Proxy(IReferenceClock *This,REFERENCE_TIME baseTime,REFERENCE_TIME streamTime,HEVENT hEvent,DWORD_PTR *pdwAdviseCookie); - void __RPC_STUB IReferenceClock_AdviseTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IReferenceClock_AdvisePeriodic_Proxy(IReferenceClock *This,REFERENCE_TIME startTime,REFERENCE_TIME periodTime,HSEMAPHORE hSemaphore,DWORD_PTR *pdwAdviseCookie); - void __RPC_STUB IReferenceClock_AdvisePeriodic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IReferenceClock_Unadvise_Proxy(IReferenceClock *This,DWORD_PTR dwAdviseCookie); - void __RPC_STUB IReferenceClock_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IReferenceClock *PREFERENCECLOCK; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0125_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0125_v0_0_s_ifspec; -#ifndef __IReferenceClock2_INTERFACE_DEFINED__ -#define __IReferenceClock2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IReferenceClock2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IReferenceClock2 : public IReferenceClock { - }; -#else - typedef struct IReferenceClock2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IReferenceClock2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IReferenceClock2 *This); - ULONG (WINAPI *Release)(IReferenceClock2 *This); - HRESULT (WINAPI *GetTime)(IReferenceClock2 *This,REFERENCE_TIME *pTime); - HRESULT (WINAPI *AdviseTime)(IReferenceClock2 *This,REFERENCE_TIME baseTime,REFERENCE_TIME streamTime,HEVENT hEvent,DWORD_PTR *pdwAdviseCookie); - HRESULT (WINAPI *AdvisePeriodic)(IReferenceClock2 *This,REFERENCE_TIME startTime,REFERENCE_TIME periodTime,HSEMAPHORE hSemaphore,DWORD_PTR *pdwAdviseCookie); - HRESULT (WINAPI *Unadvise)(IReferenceClock2 *This,DWORD_PTR dwAdviseCookie); - END_INTERFACE - } IReferenceClock2Vtbl; - struct IReferenceClock2 { - CONST_VTBL struct IReferenceClock2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IReferenceClock2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IReferenceClock2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IReferenceClock2_Release(This) (This)->lpVtbl->Release(This) -#define IReferenceClock2_GetTime(This,pTime) (This)->lpVtbl->GetTime(This,pTime) -#define IReferenceClock2_AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie) (This)->lpVtbl->AdviseTime(This,baseTime,streamTime,hEvent,pdwAdviseCookie) -#define IReferenceClock2_AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie) (This)->lpVtbl->AdvisePeriodic(This,startTime,periodTime,hSemaphore,pdwAdviseCookie) -#define IReferenceClock2_Unadvise(This,dwAdviseCookie) (This)->lpVtbl->Unadvise(This,dwAdviseCookie) -#endif -#endif -#endif - - typedef IReferenceClock2 *PREFERENCECLOCK2; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0126_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0126_v0_0_s_ifspec; -#ifndef __IMediaSample_INTERFACE_DEFINED__ -#define __IMediaSample_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMediaSample; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaSample : public IUnknown { - public: - virtual HRESULT WINAPI GetPointer(BYTE **ppBuffer) = 0; - virtual long WINAPI GetSize(void) = 0; - virtual HRESULT WINAPI GetTime(REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) = 0; - virtual HRESULT WINAPI SetTime(REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd) = 0; - virtual HRESULT WINAPI IsSyncPoint(void) = 0; - virtual HRESULT WINAPI SetSyncPoint(WINBOOL bIsSyncPoint) = 0; - virtual HRESULT WINAPI IsPreroll(void) = 0; - virtual HRESULT WINAPI SetPreroll(WINBOOL bIsPreroll) = 0; - virtual long WINAPI GetActualDataLength(void) = 0; - virtual HRESULT WINAPI SetActualDataLength(long __MIDL_0010) = 0; - virtual HRESULT WINAPI GetMediaType(AM_MEDIA_TYPE **ppMediaType) = 0; - virtual HRESULT WINAPI SetMediaType(AM_MEDIA_TYPE *pMediaType) = 0; - virtual HRESULT WINAPI IsDiscontinuity(void) = 0; - virtual HRESULT WINAPI SetDiscontinuity(WINBOOL bDiscontinuity) = 0; - virtual HRESULT WINAPI GetMediaTime(LONGLONG *pTimeStart,LONGLONG *pTimeEnd) = 0; - virtual HRESULT WINAPI SetMediaTime(LONGLONG *pTimeStart,LONGLONG *pTimeEnd) = 0; - }; -#else - typedef struct IMediaSampleVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaSample *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaSample *This); - ULONG (WINAPI *Release)(IMediaSample *This); - HRESULT (WINAPI *GetPointer)(IMediaSample *This,BYTE **ppBuffer); - long (WINAPI *GetSize)(IMediaSample *This); - HRESULT (WINAPI *GetTime)(IMediaSample *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - HRESULT (WINAPI *SetTime)(IMediaSample *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - HRESULT (WINAPI *IsSyncPoint)(IMediaSample *This); - HRESULT (WINAPI *SetSyncPoint)(IMediaSample *This,WINBOOL bIsSyncPoint); - HRESULT (WINAPI *IsPreroll)(IMediaSample *This); - HRESULT (WINAPI *SetPreroll)(IMediaSample *This,WINBOOL bIsPreroll); - long (WINAPI *GetActualDataLength)(IMediaSample *This); - HRESULT (WINAPI *SetActualDataLength)(IMediaSample *This,long __MIDL_0010); - HRESULT (WINAPI *GetMediaType)(IMediaSample *This,AM_MEDIA_TYPE **ppMediaType); - HRESULT (WINAPI *SetMediaType)(IMediaSample *This,AM_MEDIA_TYPE *pMediaType); - HRESULT (WINAPI *IsDiscontinuity)(IMediaSample *This); - HRESULT (WINAPI *SetDiscontinuity)(IMediaSample *This,WINBOOL bDiscontinuity); - HRESULT (WINAPI *GetMediaTime)(IMediaSample *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - HRESULT (WINAPI *SetMediaTime)(IMediaSample *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - END_INTERFACE - } IMediaSampleVtbl; - struct IMediaSample { - CONST_VTBL struct IMediaSampleVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaSample_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaSample_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaSample_Release(This) (This)->lpVtbl->Release(This) -#define IMediaSample_GetPointer(This,ppBuffer) (This)->lpVtbl->GetPointer(This,ppBuffer) -#define IMediaSample_GetSize(This) (This)->lpVtbl->GetSize(This) -#define IMediaSample_GetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetTime(This,pTimeStart,pTimeEnd) -#define IMediaSample_SetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetTime(This,pTimeStart,pTimeEnd) -#define IMediaSample_IsSyncPoint(This) (This)->lpVtbl->IsSyncPoint(This) -#define IMediaSample_SetSyncPoint(This,bIsSyncPoint) (This)->lpVtbl->SetSyncPoint(This,bIsSyncPoint) -#define IMediaSample_IsPreroll(This) (This)->lpVtbl->IsPreroll(This) -#define IMediaSample_SetPreroll(This,bIsPreroll) (This)->lpVtbl->SetPreroll(This,bIsPreroll) -#define IMediaSample_GetActualDataLength(This) (This)->lpVtbl->GetActualDataLength(This) -#define IMediaSample_SetActualDataLength(This,__MIDL_0010) (This)->lpVtbl->SetActualDataLength(This,__MIDL_0010) -#define IMediaSample_GetMediaType(This,ppMediaType) (This)->lpVtbl->GetMediaType(This,ppMediaType) -#define IMediaSample_SetMediaType(This,pMediaType) (This)->lpVtbl->SetMediaType(This,pMediaType) -#define IMediaSample_IsDiscontinuity(This) (This)->lpVtbl->IsDiscontinuity(This) -#define IMediaSample_SetDiscontinuity(This,bDiscontinuity) (This)->lpVtbl->SetDiscontinuity(This,bDiscontinuity) -#define IMediaSample_GetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd) -#define IMediaSample_SetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd) -#endif -#endif - HRESULT WINAPI IMediaSample_GetPointer_Proxy(IMediaSample *This,BYTE **ppBuffer); - void __RPC_STUB IMediaSample_GetPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - long WINAPI IMediaSample_GetSize_Proxy(IMediaSample *This); - void __RPC_STUB IMediaSample_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_GetTime_Proxy(IMediaSample *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - void __RPC_STUB IMediaSample_GetTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetTime_Proxy(IMediaSample *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - void __RPC_STUB IMediaSample_SetTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_IsSyncPoint_Proxy(IMediaSample *This); - void __RPC_STUB IMediaSample_IsSyncPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetSyncPoint_Proxy(IMediaSample *This,WINBOOL bIsSyncPoint); - void __RPC_STUB IMediaSample_SetSyncPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_IsPreroll_Proxy(IMediaSample *This); - void __RPC_STUB IMediaSample_IsPreroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetPreroll_Proxy(IMediaSample *This,WINBOOL bIsPreroll); - void __RPC_STUB IMediaSample_SetPreroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - long WINAPI IMediaSample_GetActualDataLength_Proxy(IMediaSample *This); - void __RPC_STUB IMediaSample_GetActualDataLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetActualDataLength_Proxy(IMediaSample *This,long __MIDL_0010); - void __RPC_STUB IMediaSample_SetActualDataLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_GetMediaType_Proxy(IMediaSample *This,AM_MEDIA_TYPE **ppMediaType); - void __RPC_STUB IMediaSample_GetMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetMediaType_Proxy(IMediaSample *This,AM_MEDIA_TYPE *pMediaType); - void __RPC_STUB IMediaSample_SetMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_IsDiscontinuity_Proxy(IMediaSample *This); - void __RPC_STUB IMediaSample_IsDiscontinuity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetDiscontinuity_Proxy(IMediaSample *This,WINBOOL bDiscontinuity); - void __RPC_STUB IMediaSample_SetDiscontinuity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_GetMediaTime_Proxy(IMediaSample *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - void __RPC_STUB IMediaSample_GetMediaTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample_SetMediaTime_Proxy(IMediaSample *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - void __RPC_STUB IMediaSample_SetMediaTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMediaSample *PMEDIASAMPLE; - - enum tagAM_SAMPLE_PROPERTY_FLAGS { - AM_SAMPLE_SPLICEPOINT = 0x1,AM_SAMPLE_PREROLL = 0x2,AM_SAMPLE_DATADISCONTINUITY = 0x4,AM_SAMPLE_TYPECHANGED = 0x8,AM_SAMPLE_TIMEVALID = 0x10, - AM_SAMPLE_TIMEDISCONTINUITY = 0x40,AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,AM_SAMPLE_STOPVALID = 0x100,AM_SAMPLE_ENDOFSTREAM = 0x200,AM_STREAM_MEDIA = 0, - AM_STREAM_CONTROL = 1 - }; - typedef struct tagAM_SAMPLE2_PROPERTIES { - DWORD cbData; - DWORD dwTypeSpecificFlags; - DWORD dwSampleFlags; - LONG lActual; - REFERENCE_TIME tStart; - REFERENCE_TIME tStop; - DWORD dwStreamId; - AM_MEDIA_TYPE *pMediaType; - BYTE *pbBuffer; - LONG cbBuffer; - } AM_SAMPLE2_PROPERTIES; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0127_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0127_v0_0_s_ifspec; -#ifndef __IMediaSample2_INTERFACE_DEFINED__ -#define __IMediaSample2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMediaSample2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaSample2 : public IMediaSample { - public: - virtual HRESULT WINAPI GetProperties(DWORD cbProperties,BYTE *pbProperties) = 0; - virtual HRESULT WINAPI SetProperties(DWORD cbProperties,const BYTE *pbProperties) = 0; - }; -#else - typedef struct IMediaSample2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaSample2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaSample2 *This); - ULONG (WINAPI *Release)(IMediaSample2 *This); - HRESULT (WINAPI *GetPointer)(IMediaSample2 *This,BYTE **ppBuffer); - long (WINAPI *GetSize)(IMediaSample2 *This); - HRESULT (WINAPI *GetTime)(IMediaSample2 *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - HRESULT (WINAPI *SetTime)(IMediaSample2 *This,REFERENCE_TIME *pTimeStart,REFERENCE_TIME *pTimeEnd); - HRESULT (WINAPI *IsSyncPoint)(IMediaSample2 *This); - HRESULT (WINAPI *SetSyncPoint)(IMediaSample2 *This,WINBOOL bIsSyncPoint); - HRESULT (WINAPI *IsPreroll)(IMediaSample2 *This); - HRESULT (WINAPI *SetPreroll)(IMediaSample2 *This,WINBOOL bIsPreroll); - long (WINAPI *GetActualDataLength)(IMediaSample2 *This); - HRESULT (WINAPI *SetActualDataLength)(IMediaSample2 *This,long __MIDL_0010); - HRESULT (WINAPI *GetMediaType)(IMediaSample2 *This,AM_MEDIA_TYPE **ppMediaType); - HRESULT (WINAPI *SetMediaType)(IMediaSample2 *This,AM_MEDIA_TYPE *pMediaType); - HRESULT (WINAPI *IsDiscontinuity)(IMediaSample2 *This); - HRESULT (WINAPI *SetDiscontinuity)(IMediaSample2 *This,WINBOOL bDiscontinuity); - HRESULT (WINAPI *GetMediaTime)(IMediaSample2 *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - HRESULT (WINAPI *SetMediaTime)(IMediaSample2 *This,LONGLONG *pTimeStart,LONGLONG *pTimeEnd); - HRESULT (WINAPI *GetProperties)(IMediaSample2 *This,DWORD cbProperties,BYTE *pbProperties); - HRESULT (WINAPI *SetProperties)(IMediaSample2 *This,DWORD cbProperties,const BYTE *pbProperties); - END_INTERFACE - } IMediaSample2Vtbl; - struct IMediaSample2 { - CONST_VTBL struct IMediaSample2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaSample2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaSample2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaSample2_Release(This) (This)->lpVtbl->Release(This) -#define IMediaSample2_GetPointer(This,ppBuffer) (This)->lpVtbl->GetPointer(This,ppBuffer) -#define IMediaSample2_GetSize(This) (This)->lpVtbl->GetSize(This) -#define IMediaSample2_GetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetTime(This,pTimeStart,pTimeEnd) -#define IMediaSample2_SetTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetTime(This,pTimeStart,pTimeEnd) -#define IMediaSample2_IsSyncPoint(This) (This)->lpVtbl->IsSyncPoint(This) -#define IMediaSample2_SetSyncPoint(This,bIsSyncPoint) (This)->lpVtbl->SetSyncPoint(This,bIsSyncPoint) -#define IMediaSample2_IsPreroll(This) (This)->lpVtbl->IsPreroll(This) -#define IMediaSample2_SetPreroll(This,bIsPreroll) (This)->lpVtbl->SetPreroll(This,bIsPreroll) -#define IMediaSample2_GetActualDataLength(This) (This)->lpVtbl->GetActualDataLength(This) -#define IMediaSample2_SetActualDataLength(This,__MIDL_0010) (This)->lpVtbl->SetActualDataLength(This,__MIDL_0010) -#define IMediaSample2_GetMediaType(This,ppMediaType) (This)->lpVtbl->GetMediaType(This,ppMediaType) -#define IMediaSample2_SetMediaType(This,pMediaType) (This)->lpVtbl->SetMediaType(This,pMediaType) -#define IMediaSample2_IsDiscontinuity(This) (This)->lpVtbl->IsDiscontinuity(This) -#define IMediaSample2_SetDiscontinuity(This,bDiscontinuity) (This)->lpVtbl->SetDiscontinuity(This,bDiscontinuity) -#define IMediaSample2_GetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->GetMediaTime(This,pTimeStart,pTimeEnd) -#define IMediaSample2_SetMediaTime(This,pTimeStart,pTimeEnd) (This)->lpVtbl->SetMediaTime(This,pTimeStart,pTimeEnd) -#define IMediaSample2_GetProperties(This,cbProperties,pbProperties) (This)->lpVtbl->GetProperties(This,cbProperties,pbProperties) -#define IMediaSample2_SetProperties(This,cbProperties,pbProperties) (This)->lpVtbl->SetProperties(This,cbProperties,pbProperties) -#endif -#endif - HRESULT WINAPI IMediaSample2_GetProperties_Proxy(IMediaSample2 *This,DWORD cbProperties,BYTE *pbProperties); - void __RPC_STUB IMediaSample2_GetProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSample2_SetProperties_Proxy(IMediaSample2 *This,DWORD cbProperties,const BYTE *pbProperties); - void __RPC_STUB IMediaSample2_SetProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMediaSample2 *PMEDIASAMPLE2; - -#define AM_GBF_PREVFRAMESKIPPED 1 -#define AM_GBF_NOTASYNCPOINT 2 -#define AM_GBF_NOWAIT 4 -#define AM_GBF_NODDSURFACELOCK 8 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0128_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0128_v0_0_s_ifspec; -#ifndef __IMemAllocator_INTERFACE_DEFINED__ -#define __IMemAllocator_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMemAllocator; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMemAllocator : public IUnknown { - public: - virtual HRESULT WINAPI SetProperties(ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual) = 0; - virtual HRESULT WINAPI GetProperties(ALLOCATOR_PROPERTIES *pProps) = 0; - virtual HRESULT WINAPI Commit(void) = 0; - virtual HRESULT WINAPI Decommit(void) = 0; - virtual HRESULT WINAPI GetBuffer(IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags) = 0; - virtual HRESULT WINAPI ReleaseBuffer(IMediaSample *pBuffer) = 0; - }; -#else - typedef struct IMemAllocatorVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMemAllocator *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMemAllocator *This); - ULONG (WINAPI *Release)(IMemAllocator *This); - HRESULT (WINAPI *SetProperties)(IMemAllocator *This,ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual); - HRESULT (WINAPI *GetProperties)(IMemAllocator *This,ALLOCATOR_PROPERTIES *pProps); - HRESULT (WINAPI *Commit)(IMemAllocator *This); - HRESULT (WINAPI *Decommit)(IMemAllocator *This); - HRESULT (WINAPI *GetBuffer)(IMemAllocator *This,IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags); - HRESULT (WINAPI *ReleaseBuffer)(IMemAllocator *This,IMediaSample *pBuffer); - END_INTERFACE - } IMemAllocatorVtbl; - struct IMemAllocator { - CONST_VTBL struct IMemAllocatorVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMemAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMemAllocator_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMemAllocator_Release(This) (This)->lpVtbl->Release(This) -#define IMemAllocator_SetProperties(This,pRequest,pActual) (This)->lpVtbl->SetProperties(This,pRequest,pActual) -#define IMemAllocator_GetProperties(This,pProps) (This)->lpVtbl->GetProperties(This,pProps) -#define IMemAllocator_Commit(This) (This)->lpVtbl->Commit(This) -#define IMemAllocator_Decommit(This) (This)->lpVtbl->Decommit(This) -#define IMemAllocator_GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) (This)->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) -#define IMemAllocator_ReleaseBuffer(This,pBuffer) (This)->lpVtbl->ReleaseBuffer(This,pBuffer) -#endif -#endif - HRESULT WINAPI IMemAllocator_SetProperties_Proxy(IMemAllocator *This,ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual); - void __RPC_STUB IMemAllocator_SetProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocator_GetProperties_Proxy(IMemAllocator *This,ALLOCATOR_PROPERTIES *pProps); - void __RPC_STUB IMemAllocator_GetProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocator_Commit_Proxy(IMemAllocator *This); - void __RPC_STUB IMemAllocator_Commit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocator_Decommit_Proxy(IMemAllocator *This); - void __RPC_STUB IMemAllocator_Decommit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocator_GetBuffer_Proxy(IMemAllocator *This,IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags); - void __RPC_STUB IMemAllocator_GetBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocator_ReleaseBuffer_Proxy(IMemAllocator *This,IMediaSample *pBuffer); - void __RPC_STUB IMemAllocator_ReleaseBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMemAllocator *PMEMALLOCATOR; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0129_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0129_v0_0_s_ifspec; -#ifndef __IMemAllocatorCallbackTemp_INTERFACE_DEFINED__ -#define __IMemAllocatorCallbackTemp_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMemAllocatorCallbackTemp; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMemAllocatorCallbackTemp : public IMemAllocator { - public: - virtual HRESULT WINAPI SetNotify(IMemAllocatorNotifyCallbackTemp *pNotify) = 0; - virtual HRESULT WINAPI GetFreeCount(LONG *plBuffersFree) = 0; - }; -#else - typedef struct IMemAllocatorCallbackTempVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMemAllocatorCallbackTemp *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMemAllocatorCallbackTemp *This); - ULONG (WINAPI *Release)(IMemAllocatorCallbackTemp *This); - HRESULT (WINAPI *SetProperties)(IMemAllocatorCallbackTemp *This,ALLOCATOR_PROPERTIES *pRequest,ALLOCATOR_PROPERTIES *pActual); - HRESULT (WINAPI *GetProperties)(IMemAllocatorCallbackTemp *This,ALLOCATOR_PROPERTIES *pProps); - HRESULT (WINAPI *Commit)(IMemAllocatorCallbackTemp *This); - HRESULT (WINAPI *Decommit)(IMemAllocatorCallbackTemp *This); - HRESULT (WINAPI *GetBuffer)(IMemAllocatorCallbackTemp *This,IMediaSample **ppBuffer,REFERENCE_TIME *pStartTime,REFERENCE_TIME *pEndTime,DWORD dwFlags); - HRESULT (WINAPI *ReleaseBuffer)(IMemAllocatorCallbackTemp *This,IMediaSample *pBuffer); - HRESULT (WINAPI *SetNotify)(IMemAllocatorCallbackTemp *This,IMemAllocatorNotifyCallbackTemp *pNotify); - HRESULT (WINAPI *GetFreeCount)(IMemAllocatorCallbackTemp *This,LONG *plBuffersFree); - END_INTERFACE - } IMemAllocatorCallbackTempVtbl; - struct IMemAllocatorCallbackTemp { - CONST_VTBL struct IMemAllocatorCallbackTempVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMemAllocatorCallbackTemp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMemAllocatorCallbackTemp_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMemAllocatorCallbackTemp_Release(This) (This)->lpVtbl->Release(This) -#define IMemAllocatorCallbackTemp_SetProperties(This,pRequest,pActual) (This)->lpVtbl->SetProperties(This,pRequest,pActual) -#define IMemAllocatorCallbackTemp_GetProperties(This,pProps) (This)->lpVtbl->GetProperties(This,pProps) -#define IMemAllocatorCallbackTemp_Commit(This) (This)->lpVtbl->Commit(This) -#define IMemAllocatorCallbackTemp_Decommit(This) (This)->lpVtbl->Decommit(This) -#define IMemAllocatorCallbackTemp_GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) (This)->lpVtbl->GetBuffer(This,ppBuffer,pStartTime,pEndTime,dwFlags) -#define IMemAllocatorCallbackTemp_ReleaseBuffer(This,pBuffer) (This)->lpVtbl->ReleaseBuffer(This,pBuffer) -#define IMemAllocatorCallbackTemp_SetNotify(This,pNotify) (This)->lpVtbl->SetNotify(This,pNotify) -#define IMemAllocatorCallbackTemp_GetFreeCount(This,plBuffersFree) (This)->lpVtbl->GetFreeCount(This,plBuffersFree) -#endif -#endif - HRESULT WINAPI IMemAllocatorCallbackTemp_SetNotify_Proxy(IMemAllocatorCallbackTemp *This,IMemAllocatorNotifyCallbackTemp *pNotify); - void __RPC_STUB IMemAllocatorCallbackTemp_SetNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemAllocatorCallbackTemp_GetFreeCount_Proxy(IMemAllocatorCallbackTemp *This,LONG *plBuffersFree); - void __RPC_STUB IMemAllocatorCallbackTemp_GetFreeCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMemAllocatorNotifyCallbackTemp_INTERFACE_DEFINED__ -#define __IMemAllocatorNotifyCallbackTemp_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMemAllocatorNotifyCallbackTemp; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMemAllocatorNotifyCallbackTemp : public IUnknown { - public: - virtual HRESULT WINAPI NotifyRelease(void) = 0; - }; -#else - typedef struct IMemAllocatorNotifyCallbackTempVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMemAllocatorNotifyCallbackTemp *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMemAllocatorNotifyCallbackTemp *This); - ULONG (WINAPI *Release)(IMemAllocatorNotifyCallbackTemp *This); - HRESULT (WINAPI *NotifyRelease)(IMemAllocatorNotifyCallbackTemp *This); - END_INTERFACE - } IMemAllocatorNotifyCallbackTempVtbl; - struct IMemAllocatorNotifyCallbackTemp { - CONST_VTBL struct IMemAllocatorNotifyCallbackTempVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMemAllocatorNotifyCallbackTemp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMemAllocatorNotifyCallbackTemp_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMemAllocatorNotifyCallbackTemp_Release(This) (This)->lpVtbl->Release(This) -#define IMemAllocatorNotifyCallbackTemp_NotifyRelease(This) (This)->lpVtbl->NotifyRelease(This) -#endif -#endif - HRESULT WINAPI IMemAllocatorNotifyCallbackTemp_NotifyRelease_Proxy(IMemAllocatorNotifyCallbackTemp *This); - void __RPC_STUB IMemAllocatorNotifyCallbackTemp_NotifyRelease_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMemInputPin_INTERFACE_DEFINED__ -#define __IMemInputPin_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMemInputPin; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMemInputPin : public IUnknown { - public: - virtual HRESULT WINAPI GetAllocator(IMemAllocator **ppAllocator) = 0; - virtual HRESULT WINAPI NotifyAllocator(IMemAllocator *pAllocator,WINBOOL bReadOnly) = 0; - virtual HRESULT WINAPI GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps) = 0; - virtual HRESULT WINAPI Receive(IMediaSample *pSample) = 0; - virtual HRESULT WINAPI ReceiveMultiple(IMediaSample **pSamples,long nSamples,long *nSamplesProcessed) = 0; - virtual HRESULT WINAPI ReceiveCanBlock(void) = 0; - }; -#else - typedef struct IMemInputPinVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMemInputPin *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMemInputPin *This); - ULONG (WINAPI *Release)(IMemInputPin *This); - HRESULT (WINAPI *GetAllocator)(IMemInputPin *This,IMemAllocator **ppAllocator); - HRESULT (WINAPI *NotifyAllocator)(IMemInputPin *This,IMemAllocator *pAllocator,WINBOOL bReadOnly); - HRESULT (WINAPI *GetAllocatorRequirements)(IMemInputPin *This,ALLOCATOR_PROPERTIES *pProps); - HRESULT (WINAPI *Receive)(IMemInputPin *This,IMediaSample *pSample); - HRESULT (WINAPI *ReceiveMultiple)(IMemInputPin *This,IMediaSample **pSamples,long nSamples,long *nSamplesProcessed); - HRESULT (WINAPI *ReceiveCanBlock)(IMemInputPin *This); - END_INTERFACE - } IMemInputPinVtbl; - struct IMemInputPin { - CONST_VTBL struct IMemInputPinVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMemInputPin_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMemInputPin_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMemInputPin_Release(This) (This)->lpVtbl->Release(This) -#define IMemInputPin_GetAllocator(This,ppAllocator) (This)->lpVtbl->GetAllocator(This,ppAllocator) -#define IMemInputPin_NotifyAllocator(This,pAllocator,bReadOnly) (This)->lpVtbl->NotifyAllocator(This,pAllocator,bReadOnly) -#define IMemInputPin_GetAllocatorRequirements(This,pProps) (This)->lpVtbl->GetAllocatorRequirements(This,pProps) -#define IMemInputPin_Receive(This,pSample) (This)->lpVtbl->Receive(This,pSample) -#define IMemInputPin_ReceiveMultiple(This,pSamples,nSamples,nSamplesProcessed) (This)->lpVtbl->ReceiveMultiple(This,pSamples,nSamples,nSamplesProcessed) -#define IMemInputPin_ReceiveCanBlock(This) (This)->lpVtbl->ReceiveCanBlock(This) -#endif -#endif - HRESULT WINAPI IMemInputPin_GetAllocator_Proxy(IMemInputPin *This,IMemAllocator **ppAllocator); - void __RPC_STUB IMemInputPin_GetAllocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemInputPin_NotifyAllocator_Proxy(IMemInputPin *This,IMemAllocator *pAllocator,WINBOOL bReadOnly); - void __RPC_STUB IMemInputPin_NotifyAllocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemInputPin_GetAllocatorRequirements_Proxy(IMemInputPin *This,ALLOCATOR_PROPERTIES *pProps); - void __RPC_STUB IMemInputPin_GetAllocatorRequirements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemInputPin_Receive_Proxy(IMemInputPin *This,IMediaSample *pSample); - void __RPC_STUB IMemInputPin_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemInputPin_ReceiveMultiple_Proxy(IMemInputPin *This,IMediaSample **pSamples,long nSamples,long *nSamplesProcessed); - void __RPC_STUB IMemInputPin_ReceiveMultiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMemInputPin_ReceiveCanBlock_Proxy(IMemInputPin *This); - void __RPC_STUB IMemInputPin_ReceiveCanBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMemInputPin *PMEMINPUTPIN; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0132_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0132_v0_0_s_ifspec; -#ifndef __IAMovieSetup_INTERFACE_DEFINED__ -#define __IAMovieSetup_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMovieSetup; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMovieSetup : public IUnknown { - public: - virtual HRESULT WINAPI Register(void) = 0; - virtual HRESULT WINAPI Unregister(void) = 0; - }; -#else - typedef struct IAMovieSetupVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMovieSetup *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMovieSetup *This); - ULONG (WINAPI *Release)(IAMovieSetup *This); - HRESULT (WINAPI *Register)(IAMovieSetup *This); - HRESULT (WINAPI *Unregister)(IAMovieSetup *This); - END_INTERFACE - } IAMovieSetupVtbl; - struct IAMovieSetup { - CONST_VTBL struct IAMovieSetupVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMovieSetup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMovieSetup_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMovieSetup_Release(This) (This)->lpVtbl->Release(This) -#define IAMovieSetup_Register(This) (This)->lpVtbl->Register(This) -#define IAMovieSetup_Unregister(This) (This)->lpVtbl->Unregister(This) -#endif -#endif - HRESULT WINAPI IAMovieSetup_Register_Proxy(IAMovieSetup *This); - void __RPC_STUB IAMovieSetup_Register_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMovieSetup_Unregister_Proxy(IAMovieSetup *This); - void __RPC_STUB IAMovieSetup_Unregister_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMovieSetup *PAMOVIESETUP; - - typedef enum AM_SEEKING_SeekingFlags { - AM_SEEKING_NoPositioning = 0,AM_SEEKING_AbsolutePositioning = 0x1,AM_SEEKING_RelativePositioning = 0x2,AM_SEEKING_IncrementalPositioning = 0x3, - AM_SEEKING_PositioningBitsMask = 0x3,AM_SEEKING_SeekToKeyFrame = 0x4,AM_SEEKING_ReturnTime = 0x8,AM_SEEKING_Segment = 0x10,AM_SEEKING_NoFlush = 0x20 - } AM_SEEKING_SEEKING_FLAGS; - - typedef enum AM_SEEKING_SeekingCapabilities { - AM_SEEKING_CanSeekAbsolute = 0x1,AM_SEEKING_CanSeekForwards = 0x2,AM_SEEKING_CanSeekBackwards = 0x4,AM_SEEKING_CanGetCurrentPos = 0x8, - AM_SEEKING_CanGetStopPos = 0x10,AM_SEEKING_CanGetDuration = 0x20,AM_SEEKING_CanPlayBackwards = 0x40,AM_SEEKING_CanDoSegments = 0x80, - AM_SEEKING_Source = 0x100 - } AM_SEEKING_SEEKING_CAPABILITIES; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0133_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0133_v0_0_s_ifspec; -#ifndef __IMediaSeeking_INTERFACE_DEFINED__ -#define __IMediaSeeking_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMediaSeeking; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaSeeking : public IUnknown { - public: - virtual HRESULT WINAPI GetCapabilities(DWORD *pCapabilities) = 0; - virtual HRESULT WINAPI CheckCapabilities(DWORD *pCapabilities) = 0; - virtual HRESULT WINAPI IsFormatSupported(const GUID *pFormat) = 0; - virtual HRESULT WINAPI QueryPreferredFormat(GUID *pFormat) = 0; - virtual HRESULT WINAPI GetTimeFormat(GUID *pFormat) = 0; - virtual HRESULT WINAPI IsUsingTimeFormat(const GUID *pFormat) = 0; - virtual HRESULT WINAPI SetTimeFormat(const GUID *pFormat) = 0; - virtual HRESULT WINAPI GetDuration(LONGLONG *pDuration) = 0; - virtual HRESULT WINAPI GetStopPosition(LONGLONG *pStop) = 0; - virtual HRESULT WINAPI GetCurrentPosition(LONGLONG *pCurrent) = 0; - virtual HRESULT WINAPI ConvertTimeFormat(LONGLONG *pTarget,const GUID *pTargetFormat,LONGLONG Source,const GUID *pSourceFormat) = 0; - virtual HRESULT WINAPI SetPositions(LONGLONG *pCurrent,DWORD dwCurrentFlags,LONGLONG *pStop,DWORD dwStopFlags) = 0; - virtual HRESULT WINAPI GetPositions(LONGLONG *pCurrent,LONGLONG *pStop) = 0; - virtual HRESULT WINAPI GetAvailable(LONGLONG *pEarliest,LONGLONG *pLatest) = 0; - virtual HRESULT WINAPI SetRate(double dRate) = 0; - virtual HRESULT WINAPI GetRate(double *pdRate) = 0; - virtual HRESULT WINAPI GetPreroll(LONGLONG *pllPreroll) = 0; - }; -#else - typedef struct IMediaSeekingVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaSeeking *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaSeeking *This); - ULONG (WINAPI *Release)(IMediaSeeking *This); - HRESULT (WINAPI *GetCapabilities)(IMediaSeeking *This,DWORD *pCapabilities); - HRESULT (WINAPI *CheckCapabilities)(IMediaSeeking *This,DWORD *pCapabilities); - HRESULT (WINAPI *IsFormatSupported)(IMediaSeeking *This,const GUID *pFormat); - HRESULT (WINAPI *QueryPreferredFormat)(IMediaSeeking *This,GUID *pFormat); - HRESULT (WINAPI *GetTimeFormat)(IMediaSeeking *This,GUID *pFormat); - HRESULT (WINAPI *IsUsingTimeFormat)(IMediaSeeking *This,const GUID *pFormat); - HRESULT (WINAPI *SetTimeFormat)(IMediaSeeking *This,const GUID *pFormat); - HRESULT (WINAPI *GetDuration)(IMediaSeeking *This,LONGLONG *pDuration); - HRESULT (WINAPI *GetStopPosition)(IMediaSeeking *This,LONGLONG *pStop); - HRESULT (WINAPI *GetCurrentPosition)(IMediaSeeking *This,LONGLONG *pCurrent); - HRESULT (WINAPI *ConvertTimeFormat)(IMediaSeeking *This,LONGLONG *pTarget,const GUID *pTargetFormat,LONGLONG Source,const GUID *pSourceFormat); - HRESULT (WINAPI *SetPositions)(IMediaSeeking *This,LONGLONG *pCurrent,DWORD dwCurrentFlags,LONGLONG *pStop,DWORD dwStopFlags); - HRESULT (WINAPI *GetPositions)(IMediaSeeking *This,LONGLONG *pCurrent,LONGLONG *pStop); - HRESULT (WINAPI *GetAvailable)(IMediaSeeking *This,LONGLONG *pEarliest,LONGLONG *pLatest); - HRESULT (WINAPI *SetRate)(IMediaSeeking *This,double dRate); - HRESULT (WINAPI *GetRate)(IMediaSeeking *This,double *pdRate); - HRESULT (WINAPI *GetPreroll)(IMediaSeeking *This,LONGLONG *pllPreroll); - END_INTERFACE - } IMediaSeekingVtbl; - struct IMediaSeeking { - CONST_VTBL struct IMediaSeekingVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaSeeking_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaSeeking_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaSeeking_Release(This) (This)->lpVtbl->Release(This) -#define IMediaSeeking_GetCapabilities(This,pCapabilities) (This)->lpVtbl->GetCapabilities(This,pCapabilities) -#define IMediaSeeking_CheckCapabilities(This,pCapabilities) (This)->lpVtbl->CheckCapabilities(This,pCapabilities) -#define IMediaSeeking_IsFormatSupported(This,pFormat) (This)->lpVtbl->IsFormatSupported(This,pFormat) -#define IMediaSeeking_QueryPreferredFormat(This,pFormat) (This)->lpVtbl->QueryPreferredFormat(This,pFormat) -#define IMediaSeeking_GetTimeFormat(This,pFormat) (This)->lpVtbl->GetTimeFormat(This,pFormat) -#define IMediaSeeking_IsUsingTimeFormat(This,pFormat) (This)->lpVtbl->IsUsingTimeFormat(This,pFormat) -#define IMediaSeeking_SetTimeFormat(This,pFormat) (This)->lpVtbl->SetTimeFormat(This,pFormat) -#define IMediaSeeking_GetDuration(This,pDuration) (This)->lpVtbl->GetDuration(This,pDuration) -#define IMediaSeeking_GetStopPosition(This,pStop) (This)->lpVtbl->GetStopPosition(This,pStop) -#define IMediaSeeking_GetCurrentPosition(This,pCurrent) (This)->lpVtbl->GetCurrentPosition(This,pCurrent) -#define IMediaSeeking_ConvertTimeFormat(This,pTarget,pTargetFormat,Source,pSourceFormat) (This)->lpVtbl->ConvertTimeFormat(This,pTarget,pTargetFormat,Source,pSourceFormat) -#define IMediaSeeking_SetPositions(This,pCurrent,dwCurrentFlags,pStop,dwStopFlags) (This)->lpVtbl->SetPositions(This,pCurrent,dwCurrentFlags,pStop,dwStopFlags) -#define IMediaSeeking_GetPositions(This,pCurrent,pStop) (This)->lpVtbl->GetPositions(This,pCurrent,pStop) -#define IMediaSeeking_GetAvailable(This,pEarliest,pLatest) (This)->lpVtbl->GetAvailable(This,pEarliest,pLatest) -#define IMediaSeeking_SetRate(This,dRate) (This)->lpVtbl->SetRate(This,dRate) -#define IMediaSeeking_GetRate(This,pdRate) (This)->lpVtbl->GetRate(This,pdRate) -#define IMediaSeeking_GetPreroll(This,pllPreroll) (This)->lpVtbl->GetPreroll(This,pllPreroll) -#endif -#endif - HRESULT WINAPI IMediaSeeking_GetCapabilities_Proxy(IMediaSeeking *This,DWORD *pCapabilities); - void __RPC_STUB IMediaSeeking_GetCapabilities_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_CheckCapabilities_Proxy(IMediaSeeking *This,DWORD *pCapabilities); - void __RPC_STUB IMediaSeeking_CheckCapabilities_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_IsFormatSupported_Proxy(IMediaSeeking *This,const GUID *pFormat); - void __RPC_STUB IMediaSeeking_IsFormatSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_QueryPreferredFormat_Proxy(IMediaSeeking *This,GUID *pFormat); - void __RPC_STUB IMediaSeeking_QueryPreferredFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetTimeFormat_Proxy(IMediaSeeking *This,GUID *pFormat); - void __RPC_STUB IMediaSeeking_GetTimeFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_IsUsingTimeFormat_Proxy(IMediaSeeking *This,const GUID *pFormat); - void __RPC_STUB IMediaSeeking_IsUsingTimeFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_SetTimeFormat_Proxy(IMediaSeeking *This,const GUID *pFormat); - void __RPC_STUB IMediaSeeking_SetTimeFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetDuration_Proxy(IMediaSeeking *This,LONGLONG *pDuration); - void __RPC_STUB IMediaSeeking_GetDuration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetStopPosition_Proxy(IMediaSeeking *This,LONGLONG *pStop); - void __RPC_STUB IMediaSeeking_GetStopPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetCurrentPosition_Proxy(IMediaSeeking *This,LONGLONG *pCurrent); - void __RPC_STUB IMediaSeeking_GetCurrentPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_ConvertTimeFormat_Proxy(IMediaSeeking *This,LONGLONG *pTarget,const GUID *pTargetFormat,LONGLONG Source,const GUID *pSourceFormat); - void __RPC_STUB IMediaSeeking_ConvertTimeFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_SetPositions_Proxy(IMediaSeeking *This,LONGLONG *pCurrent,DWORD dwCurrentFlags,LONGLONG *pStop,DWORD dwStopFlags); - void __RPC_STUB IMediaSeeking_SetPositions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetPositions_Proxy(IMediaSeeking *This,LONGLONG *pCurrent,LONGLONG *pStop); - void __RPC_STUB IMediaSeeking_GetPositions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetAvailable_Proxy(IMediaSeeking *This,LONGLONG *pEarliest,LONGLONG *pLatest); - void __RPC_STUB IMediaSeeking_GetAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_SetRate_Proxy(IMediaSeeking *This,double dRate); - void __RPC_STUB IMediaSeeking_SetRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetRate_Proxy(IMediaSeeking *This,double *pdRate); - void __RPC_STUB IMediaSeeking_GetRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMediaSeeking_GetPreroll_Proxy(IMediaSeeking *This,LONGLONG *pllPreroll); - void __RPC_STUB IMediaSeeking_GetPreroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMediaSeeking *PMEDIASEEKING; - - enum tagAM_MEDIAEVENT_FLAGS { - AM_MEDIAEVENT_NONOTIFY = 0x01 - }; - - typedef struct __MIDL___MIDL_itf_strmif_0134_0001 { - CLSID Clsid; - LPWSTR Name; - } REGFILTER; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0134_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0134_v0_0_s_ifspec; -#ifndef __IEnumRegFilters_INTERFACE_DEFINED__ -#define __IEnumRegFilters_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEnumRegFilters; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEnumRegFilters : public IUnknown { - public: - virtual HRESULT WINAPI Next(ULONG cFilters,REGFILTER **apRegFilter,ULONG *pcFetched) = 0; - virtual HRESULT WINAPI Skip(ULONG cFilters) = 0; - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI Clone(IEnumRegFilters **ppEnum) = 0; - }; -#else - typedef struct IEnumRegFiltersVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEnumRegFilters *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEnumRegFilters *This); - ULONG (WINAPI *Release)(IEnumRegFilters *This); - HRESULT (WINAPI *Next)(IEnumRegFilters *This,ULONG cFilters,REGFILTER **apRegFilter,ULONG *pcFetched); - HRESULT (WINAPI *Skip)(IEnumRegFilters *This,ULONG cFilters); - HRESULT (WINAPI *Reset)(IEnumRegFilters *This); - HRESULT (WINAPI *Clone)(IEnumRegFilters *This,IEnumRegFilters **ppEnum); - END_INTERFACE - } IEnumRegFiltersVtbl; - struct IEnumRegFilters { - CONST_VTBL struct IEnumRegFiltersVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEnumRegFilters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEnumRegFilters_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEnumRegFilters_Release(This) (This)->lpVtbl->Release(This) -#define IEnumRegFilters_Next(This,cFilters,apRegFilter,pcFetched) (This)->lpVtbl->Next(This,cFilters,apRegFilter,pcFetched) -#define IEnumRegFilters_Skip(This,cFilters) (This)->lpVtbl->Skip(This,cFilters) -#define IEnumRegFilters_Reset(This) (This)->lpVtbl->Reset(This) -#define IEnumRegFilters_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum) -#endif -#endif - HRESULT WINAPI IEnumRegFilters_Next_Proxy(IEnumRegFilters *This,ULONG cFilters,REGFILTER **apRegFilter,ULONG *pcFetched); - void __RPC_STUB IEnumRegFilters_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumRegFilters_Skip_Proxy(IEnumRegFilters *This,ULONG cFilters); - void __RPC_STUB IEnumRegFilters_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumRegFilters_Reset_Proxy(IEnumRegFilters *This); - void __RPC_STUB IEnumRegFilters_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumRegFilters_Clone_Proxy(IEnumRegFilters *This,IEnumRegFilters **ppEnum); - void __RPC_STUB IEnumRegFilters_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IEnumRegFilters *PENUMREGFILTERS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0136_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0136_v0_0_s_ifspec; -#ifndef __IFilterMapper_INTERFACE_DEFINED__ -#define __IFilterMapper_INTERFACE_DEFINED__ - enum __MIDL_IFilterMapper_0001 { - MERIT_PREFERRED = 0x800000,MERIT_NORMAL = 0x600000,MERIT_UNLIKELY = 0x400000,MERIT_DO_NOT_USE = 0x200000,MERIT_SW_COMPRESSOR = 0x100000, - MERIT_HW_COMPRESSOR = 0x100050 - }; - EXTERN_C const IID IID_IFilterMapper; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterMapper : public IUnknown { - public: - virtual HRESULT WINAPI RegisterFilter(CLSID clsid,LPCWSTR Name,DWORD dwMerit) = 0; - virtual HRESULT WINAPI RegisterFilterInstance(CLSID clsid,LPCWSTR Name,CLSID *MRId) = 0; - virtual HRESULT WINAPI RegisterPin(CLSID Filter,LPCWSTR Name,WINBOOL bRendered,WINBOOL bOutput,WINBOOL bZero,WINBOOL bMany,CLSID ConnectsToFilter,LPCWSTR ConnectsToPin) = 0; - virtual HRESULT WINAPI RegisterPinType(CLSID clsFilter,LPCWSTR strName,CLSID clsMajorType,CLSID clsSubType) = 0; - virtual HRESULT WINAPI UnregisterFilter(CLSID Filter) = 0; - virtual HRESULT WINAPI UnregisterFilterInstance(CLSID MRId) = 0; - virtual HRESULT WINAPI UnregisterPin(CLSID Filter,LPCWSTR Name) = 0; - virtual HRESULT WINAPI EnumMatchingFilters(IEnumRegFilters **ppEnum,DWORD dwMerit,WINBOOL bInputNeeded,CLSID clsInMaj,CLSID clsInSub,WINBOOL bRender,WINBOOL bOututNeeded,CLSID clsOutMaj,CLSID clsOutSub) = 0; - }; -#else - typedef struct IFilterMapperVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterMapper *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterMapper *This); - ULONG (WINAPI *Release)(IFilterMapper *This); - HRESULT (WINAPI *RegisterFilter)(IFilterMapper *This,CLSID clsid,LPCWSTR Name,DWORD dwMerit); - HRESULT (WINAPI *RegisterFilterInstance)(IFilterMapper *This,CLSID clsid,LPCWSTR Name,CLSID *MRId); - HRESULT (WINAPI *RegisterPin)(IFilterMapper *This,CLSID Filter,LPCWSTR Name,WINBOOL bRendered,WINBOOL bOutput,WINBOOL bZero,WINBOOL bMany,CLSID ConnectsToFilter,LPCWSTR ConnectsToPin); - HRESULT (WINAPI *RegisterPinType)(IFilterMapper *This,CLSID clsFilter,LPCWSTR strName,CLSID clsMajorType,CLSID clsSubType); - HRESULT (WINAPI *UnregisterFilter)(IFilterMapper *This,CLSID Filter); - HRESULT (WINAPI *UnregisterFilterInstance)(IFilterMapper *This,CLSID MRId); - HRESULT (WINAPI *UnregisterPin)(IFilterMapper *This,CLSID Filter,LPCWSTR Name); - HRESULT (WINAPI *EnumMatchingFilters)(IFilterMapper *This,IEnumRegFilters **ppEnum,DWORD dwMerit,WINBOOL bInputNeeded,CLSID clsInMaj,CLSID clsInSub,WINBOOL bRender,WINBOOL bOututNeeded,CLSID clsOutMaj,CLSID clsOutSub); - END_INTERFACE - } IFilterMapperVtbl; - struct IFilterMapper { - CONST_VTBL struct IFilterMapperVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterMapper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterMapper_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterMapper_Release(This) (This)->lpVtbl->Release(This) -#define IFilterMapper_RegisterFilter(This,clsid,Name,dwMerit) (This)->lpVtbl->RegisterFilter(This,clsid,Name,dwMerit) -#define IFilterMapper_RegisterFilterInstance(This,clsid,Name,MRId) (This)->lpVtbl->RegisterFilterInstance(This,clsid,Name,MRId) -#define IFilterMapper_RegisterPin(This,Filter,Name,bRendered,bOutput,bZero,bMany,ConnectsToFilter,ConnectsToPin) (This)->lpVtbl->RegisterPin(This,Filter,Name,bRendered,bOutput,bZero,bMany,ConnectsToFilter,ConnectsToPin) -#define IFilterMapper_RegisterPinType(This,clsFilter,strName,clsMajorType,clsSubType) (This)->lpVtbl->RegisterPinType(This,clsFilter,strName,clsMajorType,clsSubType) -#define IFilterMapper_UnregisterFilter(This,Filter) (This)->lpVtbl->UnregisterFilter(This,Filter) -#define IFilterMapper_UnregisterFilterInstance(This,MRId) (This)->lpVtbl->UnregisterFilterInstance(This,MRId) -#define IFilterMapper_UnregisterPin(This,Filter,Name) (This)->lpVtbl->UnregisterPin(This,Filter,Name) -#define IFilterMapper_EnumMatchingFilters(This,ppEnum,dwMerit,bInputNeeded,clsInMaj,clsInSub,bRender,bOututNeeded,clsOutMaj,clsOutSub) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwMerit,bInputNeeded,clsInMaj,clsInSub,bRender,bOututNeeded,clsOutMaj,clsOutSub) -#endif -#endif - HRESULT WINAPI IFilterMapper_RegisterFilter_Proxy(IFilterMapper *This,CLSID clsid,LPCWSTR Name,DWORD dwMerit); - void __RPC_STUB IFilterMapper_RegisterFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_RegisterFilterInstance_Proxy(IFilterMapper *This,CLSID clsid,LPCWSTR Name,CLSID *MRId); - void __RPC_STUB IFilterMapper_RegisterFilterInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_RegisterPin_Proxy(IFilterMapper *This,CLSID Filter,LPCWSTR Name,WINBOOL bRendered,WINBOOL bOutput,WINBOOL bZero,WINBOOL bMany,CLSID ConnectsToFilter,LPCWSTR ConnectsToPin); - void __RPC_STUB IFilterMapper_RegisterPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_RegisterPinType_Proxy(IFilterMapper *This,CLSID clsFilter,LPCWSTR strName,CLSID clsMajorType,CLSID clsSubType); - void __RPC_STUB IFilterMapper_RegisterPinType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_UnregisterFilter_Proxy(IFilterMapper *This,CLSID Filter); - void __RPC_STUB IFilterMapper_UnregisterFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_UnregisterFilterInstance_Proxy(IFilterMapper *This,CLSID MRId); - void __RPC_STUB IFilterMapper_UnregisterFilterInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_UnregisterPin_Proxy(IFilterMapper *This,CLSID Filter,LPCWSTR Name); - void __RPC_STUB IFilterMapper_UnregisterPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper_EnumMatchingFilters_Proxy(IFilterMapper *This,IEnumRegFilters **ppEnum,DWORD dwMerit,WINBOOL bInputNeeded,CLSID clsInMaj,CLSID clsInSub,WINBOOL bRender,WINBOOL bOututNeeded,CLSID clsOutMaj,CLSID clsOutSub); - void __RPC_STUB IFilterMapper_EnumMatchingFilters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef struct __MIDL___MIDL_itf_strmif_0138_0001 { - const CLSID *clsMajorType; - const CLSID *clsMinorType; - } REGPINTYPES; - - typedef struct __MIDL___MIDL_itf_strmif_0138_0002 { - LPWSTR strName; - WINBOOL bRendered; - WINBOOL bOutput; - WINBOOL bZero; - WINBOOL bMany; - const CLSID *clsConnectsToFilter; - const WCHAR *strConnectsToPin; - UINT nMediaTypes; - const REGPINTYPES *lpMediaType; - } REGFILTERPINS; - - typedef struct __MIDL___MIDL_itf_strmif_0138_0003 { - CLSID clsMedium; - DWORD dw1; - DWORD dw2; - } REGPINMEDIUM; - - enum __MIDL___MIDL_itf_strmif_0138_0004 { - REG_PINFLAG_B_ZERO = 0x1,REG_PINFLAG_B_RENDERER = 0x2,REG_PINFLAG_B_MANY = 0x4,REG_PINFLAG_B_OUTPUT = 0x8 - }; - typedef struct __MIDL___MIDL_itf_strmif_0138_0005 { - DWORD dwFlags; - UINT cInstances; - UINT nMediaTypes; - const REGPINTYPES *lpMediaType; - UINT nMediums; - const REGPINMEDIUM *lpMedium; - const CLSID *clsPinCategory; - } REGFILTERPINS2; - - typedef struct __MIDL___MIDL_itf_strmif_0138_0006 { - DWORD dwVersion; - DWORD dwMerit; - union { - struct { - ULONG cPins; - const REGFILTERPINS *rgPins; - }; - struct { - ULONG cPins2; - const REGFILTERPINS2 *rgPins2; - }; - }; - } REGFILTER2; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0138_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0138_v0_0_s_ifspec; -#ifndef __IFilterMapper2_INTERFACE_DEFINED__ -#define __IFilterMapper2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFilterMapper2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterMapper2 : public IUnknown { - public: - virtual HRESULT WINAPI CreateCategory(REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description) = 0; - virtual HRESULT WINAPI UnregisterFilter(const CLSID *pclsidCategory,const OLECHAR *szInstance,REFCLSID Filter) = 0; - virtual HRESULT WINAPI RegisterFilter(REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,const OLECHAR *szInstance,const REGFILTER2 *prf2) = 0; - virtual HRESULT WINAPI EnumMatchingFilters(IEnumMoniker **ppEnum,DWORD dwFlags,WINBOOL bExactMatch,DWORD dwMerit,WINBOOL bInputNeeded,DWORD cInputTypes,const GUID *pInputTypes,const REGPINMEDIUM *pMedIn,const CLSID *pPinCategoryIn,WINBOOL bRender,WINBOOL bOutputNeeded,DWORD cOutputTypes,const GUID *pOutputTypes,const REGPINMEDIUM *pMedOut,const CLSID *pPinCategoryOut) = 0; - }; -#else - typedef struct IFilterMapper2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterMapper2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterMapper2 *This); - ULONG (WINAPI *Release)(IFilterMapper2 *This); - HRESULT (WINAPI *CreateCategory)(IFilterMapper2 *This,REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description); - HRESULT (WINAPI *UnregisterFilter)(IFilterMapper2 *This,const CLSID *pclsidCategory,const OLECHAR *szInstance,REFCLSID Filter); - HRESULT (WINAPI *RegisterFilter)(IFilterMapper2 *This,REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,const OLECHAR *szInstance,const REGFILTER2 *prf2); - HRESULT (WINAPI *EnumMatchingFilters)(IFilterMapper2 *This,IEnumMoniker **ppEnum,DWORD dwFlags,WINBOOL bExactMatch,DWORD dwMerit,WINBOOL bInputNeeded,DWORD cInputTypes,const GUID *pInputTypes,const REGPINMEDIUM *pMedIn,const CLSID *pPinCategoryIn,WINBOOL bRender,WINBOOL bOutputNeeded,DWORD cOutputTypes,const GUID *pOutputTypes,const REGPINMEDIUM *pMedOut,const CLSID *pPinCategoryOut); - END_INTERFACE - } IFilterMapper2Vtbl; - struct IFilterMapper2 { - CONST_VTBL struct IFilterMapper2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterMapper2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterMapper2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterMapper2_Release(This) (This)->lpVtbl->Release(This) -#define IFilterMapper2_CreateCategory(This,clsidCategory,dwCategoryMerit,Description) (This)->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description) -#define IFilterMapper2_UnregisterFilter(This,pclsidCategory,szInstance,Filter) (This)->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter) -#define IFilterMapper2_RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) (This)->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) -#define IFilterMapper2_EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) -#endif -#endif - HRESULT WINAPI IFilterMapper2_CreateCategory_Proxy(IFilterMapper2 *This,REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description); - void __RPC_STUB IFilterMapper2_CreateCategory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper2_UnregisterFilter_Proxy(IFilterMapper2 *This,const CLSID *pclsidCategory,const OLECHAR *szInstance,REFCLSID Filter); - void __RPC_STUB IFilterMapper2_UnregisterFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper2_RegisterFilter_Proxy(IFilterMapper2 *This,REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,const OLECHAR *szInstance,const REGFILTER2 *prf2); - void __RPC_STUB IFilterMapper2_RegisterFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterMapper2_EnumMatchingFilters_Proxy(IFilterMapper2 *This,IEnumMoniker **ppEnum,DWORD dwFlags,WINBOOL bExactMatch,DWORD dwMerit,WINBOOL bInputNeeded,DWORD cInputTypes,const GUID *pInputTypes,const REGPINMEDIUM *pMedIn,const CLSID *pPinCategoryIn,WINBOOL bRender,WINBOOL bOutputNeeded,DWORD cOutputTypes,const GUID *pOutputTypes,const REGPINMEDIUM *pMedOut,const CLSID *pPinCategoryOut); - void __RPC_STUB IFilterMapper2_EnumMatchingFilters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IFilterMapper3_INTERFACE_DEFINED__ -#define __IFilterMapper3_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFilterMapper3; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterMapper3 : public IFilterMapper2 { - public: - virtual HRESULT WINAPI GetICreateDevEnum(ICreateDevEnum **ppEnum) = 0; - }; -#else - typedef struct IFilterMapper3Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterMapper3 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterMapper3 *This); - ULONG (WINAPI *Release)(IFilterMapper3 *This); - HRESULT (WINAPI *CreateCategory)(IFilterMapper3 *This,REFCLSID clsidCategory,DWORD dwCategoryMerit,LPCWSTR Description); - HRESULT (WINAPI *UnregisterFilter)(IFilterMapper3 *This,const CLSID *pclsidCategory,const OLECHAR *szInstance,REFCLSID Filter); - HRESULT (WINAPI *RegisterFilter)(IFilterMapper3 *This,REFCLSID clsidFilter,LPCWSTR Name,IMoniker **ppMoniker,const CLSID *pclsidCategory,const OLECHAR *szInstance,const REGFILTER2 *prf2); - HRESULT (WINAPI *EnumMatchingFilters)(IFilterMapper3 *This,IEnumMoniker **ppEnum,DWORD dwFlags,WINBOOL bExactMatch,DWORD dwMerit,WINBOOL bInputNeeded,DWORD cInputTypes,const GUID *pInputTypes,const REGPINMEDIUM *pMedIn,const CLSID *pPinCategoryIn,WINBOOL bRender,WINBOOL bOutputNeeded,DWORD cOutputTypes,const GUID *pOutputTypes,const REGPINMEDIUM *pMedOut,const CLSID *pPinCategoryOut); - HRESULT (WINAPI *GetICreateDevEnum)(IFilterMapper3 *This,ICreateDevEnum **ppEnum); - END_INTERFACE - } IFilterMapper3Vtbl; - struct IFilterMapper3 { - CONST_VTBL struct IFilterMapper3Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterMapper3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterMapper3_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterMapper3_Release(This) (This)->lpVtbl->Release(This) -#define IFilterMapper3_CreateCategory(This,clsidCategory,dwCategoryMerit,Description) (This)->lpVtbl->CreateCategory(This,clsidCategory,dwCategoryMerit,Description) -#define IFilterMapper3_UnregisterFilter(This,pclsidCategory,szInstance,Filter) (This)->lpVtbl->UnregisterFilter(This,pclsidCategory,szInstance,Filter) -#define IFilterMapper3_RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) (This)->lpVtbl->RegisterFilter(This,clsidFilter,Name,ppMoniker,pclsidCategory,szInstance,prf2) -#define IFilterMapper3_EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) (This)->lpVtbl->EnumMatchingFilters(This,ppEnum,dwFlags,bExactMatch,dwMerit,bInputNeeded,cInputTypes,pInputTypes,pMedIn,pPinCategoryIn,bRender,bOutputNeeded,cOutputTypes,pOutputTypes,pMedOut,pPinCategoryOut) -#define IFilterMapper3_GetICreateDevEnum(This,ppEnum) (This)->lpVtbl->GetICreateDevEnum(This,ppEnum) -#endif -#endif - HRESULT WINAPI IFilterMapper3_GetICreateDevEnum_Proxy(IFilterMapper3 *This,ICreateDevEnum **ppEnum); - void __RPC_STUB IFilterMapper3_GetICreateDevEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagQualityMessageType { - Famine = 0,Flood = Famine + 1 - } QualityMessageType; - - typedef struct tagQuality { - QualityMessageType Type; - long Proportion; - REFERENCE_TIME Late; - REFERENCE_TIME TimeStamp; - } Quality; - - typedef IQualityControl *PQUALITYCONTROL; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0141_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0141_v0_0_s_ifspec; -#ifndef __IQualityControl_INTERFACE_DEFINED__ -#define __IQualityControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IQualityControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IQualityControl : public IUnknown { - public: - virtual HRESULT WINAPI Notify(IBaseFilter *pSelf,Quality q) = 0; - virtual HRESULT WINAPI SetSink(IQualityControl *piqc) = 0; - }; -#else - typedef struct IQualityControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IQualityControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IQualityControl *This); - ULONG (WINAPI *Release)(IQualityControl *This); - HRESULT (WINAPI *Notify)(IQualityControl *This,IBaseFilter *pSelf,Quality q); - HRESULT (WINAPI *SetSink)(IQualityControl *This,IQualityControl *piqc); - END_INTERFACE - } IQualityControlVtbl; - struct IQualityControl { - CONST_VTBL struct IQualityControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IQualityControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IQualityControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IQualityControl_Release(This) (This)->lpVtbl->Release(This) -#define IQualityControl_Notify(This,pSelf,q) (This)->lpVtbl->Notify(This,pSelf,q) -#define IQualityControl_SetSink(This,piqc) (This)->lpVtbl->SetSink(This,piqc) -#endif -#endif - HRESULT WINAPI IQualityControl_Notify_Proxy(IQualityControl *This,IBaseFilter *pSelf,Quality q); - void __RPC_STUB IQualityControl_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IQualityControl_SetSink_Proxy(IQualityControl *This,IQualityControl *piqc); - void __RPC_STUB IQualityControl_SetSink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum __MIDL___MIDL_itf_strmif_0142_0001 { - CK_NOCOLORKEY = 0,CK_INDEX = 0x1,CK_RGB = 0x2 - }; - typedef struct tagCOLORKEY { - DWORD KeyType; - DWORD PaletteIndex; - COLORREF LowColorValue; - COLORREF HighColorValue; - } COLORKEY; - - enum __MIDL___MIDL_itf_strmif_0142_0002 { - ADVISE_NONE = 0,ADVISE_CLIPPING = 0x1,ADVISE_PALETTE = 0x2,ADVISE_COLORKEY = 0x4,ADVISE_POSITION = 0x8,ADVISE_DISPLAY_CHANGE = 0x10 - }; -#define ADVISE_ALL (ADVISE_CLIPPING | ADVISE_PALETTE | ADVISE_COLORKEY | ADVISE_POSITION) -#define ADVISE_ALL2 (ADVISE_ALL | ADVISE_DISPLAY_CHANGE) - -#ifndef _WINGDI_ - typedef struct _RGNDATAHEADER { - DWORD dwSize; - DWORD iType; - DWORD nCount; - DWORD nRgnSize; - RECT rcBound; - } RGNDATAHEADER; - - typedef struct _RGNDATA { - RGNDATAHEADER rdh; - char Buffer[1]; - } RGNDATA; -#endif - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0142_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0142_v0_0_s_ifspec; -#ifndef __IOverlayNotify_INTERFACE_DEFINED__ -#define __IOverlayNotify_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IOverlayNotify; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IOverlayNotify : public IUnknown { - public: - virtual HRESULT WINAPI OnPaletteChange(DWORD dwColors,const PALETTEENTRY *pPalette) = 0; - virtual HRESULT WINAPI OnClipChange(const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData) = 0; - virtual HRESULT WINAPI OnColorKeyChange(const COLORKEY *pColorKey) = 0; - virtual HRESULT WINAPI OnPositionChange(const RECT *pSourceRect,const RECT *pDestinationRect) = 0; - }; -#else - typedef struct IOverlayNotifyVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IOverlayNotify *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IOverlayNotify *This); - ULONG (WINAPI *Release)(IOverlayNotify *This); - HRESULT (WINAPI *OnPaletteChange)(IOverlayNotify *This,DWORD dwColors,const PALETTEENTRY *pPalette); - HRESULT (WINAPI *OnClipChange)(IOverlayNotify *This,const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData); - HRESULT (WINAPI *OnColorKeyChange)(IOverlayNotify *This,const COLORKEY *pColorKey); - HRESULT (WINAPI *OnPositionChange)(IOverlayNotify *This,const RECT *pSourceRect,const RECT *pDestinationRect); - END_INTERFACE - } IOverlayNotifyVtbl; - struct IOverlayNotify { - CONST_VTBL struct IOverlayNotifyVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IOverlayNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IOverlayNotify_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IOverlayNotify_Release(This) (This)->lpVtbl->Release(This) -#define IOverlayNotify_OnPaletteChange(This,dwColors,pPalette) (This)->lpVtbl->OnPaletteChange(This,dwColors,pPalette) -#define IOverlayNotify_OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) (This)->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) -#define IOverlayNotify_OnColorKeyChange(This,pColorKey) (This)->lpVtbl->OnColorKeyChange(This,pColorKey) -#define IOverlayNotify_OnPositionChange(This,pSourceRect,pDestinationRect) (This)->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect) -#endif -#endif - HRESULT WINAPI IOverlayNotify_OnPaletteChange_Proxy(IOverlayNotify *This,DWORD dwColors,const PALETTEENTRY *pPalette); - void __RPC_STUB IOverlayNotify_OnPaletteChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlayNotify_OnClipChange_Proxy(IOverlayNotify *This,const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData); - void __RPC_STUB IOverlayNotify_OnClipChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlayNotify_OnColorKeyChange_Proxy(IOverlayNotify *This,const COLORKEY *pColorKey); - void __RPC_STUB IOverlayNotify_OnColorKeyChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlayNotify_OnPositionChange_Proxy(IOverlayNotify *This,const RECT *pSourceRect,const RECT *pDestinationRect); - void __RPC_STUB IOverlayNotify_OnPositionChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IOverlayNotify *POVERLAYNOTIFY; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0143_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0143_v0_0_s_ifspec; -#ifndef __IOverlayNotify2_INTERFACE_DEFINED__ -#define __IOverlayNotify2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IOverlayNotify2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IOverlayNotify2 : public IOverlayNotify { - public: - virtual HRESULT WINAPI OnDisplayChange(HMONITOR hMonitor) = 0; - }; -#else - typedef struct IOverlayNotify2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IOverlayNotify2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IOverlayNotify2 *This); - ULONG (WINAPI *Release)(IOverlayNotify2 *This); - HRESULT (WINAPI *OnPaletteChange)(IOverlayNotify2 *This,DWORD dwColors,const PALETTEENTRY *pPalette); - HRESULT (WINAPI *OnClipChange)(IOverlayNotify2 *This,const RECT *pSourceRect,const RECT *pDestinationRect,const RGNDATA *pRgnData); - HRESULT (WINAPI *OnColorKeyChange)(IOverlayNotify2 *This,const COLORKEY *pColorKey); - HRESULT (WINAPI *OnPositionChange)(IOverlayNotify2 *This,const RECT *pSourceRect,const RECT *pDestinationRect); - HRESULT (WINAPI *OnDisplayChange)(IOverlayNotify2 *This,HMONITOR hMonitor); - END_INTERFACE - } IOverlayNotify2Vtbl; - struct IOverlayNotify2 { - CONST_VTBL struct IOverlayNotify2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IOverlayNotify2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IOverlayNotify2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IOverlayNotify2_Release(This) (This)->lpVtbl->Release(This) -#define IOverlayNotify2_OnPaletteChange(This,dwColors,pPalette) (This)->lpVtbl->OnPaletteChange(This,dwColors,pPalette) -#define IOverlayNotify2_OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) (This)->lpVtbl->OnClipChange(This,pSourceRect,pDestinationRect,pRgnData) -#define IOverlayNotify2_OnColorKeyChange(This,pColorKey) (This)->lpVtbl->OnColorKeyChange(This,pColorKey) -#define IOverlayNotify2_OnPositionChange(This,pSourceRect,pDestinationRect) (This)->lpVtbl->OnPositionChange(This,pSourceRect,pDestinationRect) -#define IOverlayNotify2_OnDisplayChange(This,hMonitor) (This)->lpVtbl->OnDisplayChange(This,hMonitor) -#endif -#endif - HRESULT WINAPI IOverlayNotify2_OnDisplayChange_Proxy(IOverlayNotify2 *This,HMONITOR hMonitor); - void __RPC_STUB IOverlayNotify2_OnDisplayChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IOverlayNotify2 *POVERLAYNOTIFY2; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0144_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0144_v0_0_s_ifspec; -#ifndef __IOverlay_INTERFACE_DEFINED__ -#define __IOverlay_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IOverlay; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IOverlay : public IUnknown { - public: - virtual HRESULT WINAPI GetPalette(DWORD *pdwColors,PALETTEENTRY **ppPalette) = 0; - virtual HRESULT WINAPI SetPalette(DWORD dwColors,PALETTEENTRY *pPalette) = 0; - virtual HRESULT WINAPI GetDefaultColorKey(COLORKEY *pColorKey) = 0; - virtual HRESULT WINAPI GetColorKey(COLORKEY *pColorKey) = 0; - virtual HRESULT WINAPI SetColorKey(COLORKEY *pColorKey) = 0; - virtual HRESULT WINAPI GetWindowHandle(HWND *pHwnd) = 0; - virtual HRESULT WINAPI GetClipList(RECT *pSourceRect,RECT *pDestinationRect,RGNDATA **ppRgnData) = 0; - virtual HRESULT WINAPI GetVideoPosition(RECT *pSourceRect,RECT *pDestinationRect) = 0; - virtual HRESULT WINAPI Advise(IOverlayNotify *pOverlayNotify,DWORD dwInterests) = 0; - virtual HRESULT WINAPI Unadvise(void) = 0; - }; -#else - typedef struct IOverlayVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IOverlay *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IOverlay *This); - ULONG (WINAPI *Release)(IOverlay *This); - HRESULT (WINAPI *GetPalette)(IOverlay *This,DWORD *pdwColors,PALETTEENTRY **ppPalette); - HRESULT (WINAPI *SetPalette)(IOverlay *This,DWORD dwColors,PALETTEENTRY *pPalette); - HRESULT (WINAPI *GetDefaultColorKey)(IOverlay *This,COLORKEY *pColorKey); - HRESULT (WINAPI *GetColorKey)(IOverlay *This,COLORKEY *pColorKey); - HRESULT (WINAPI *SetColorKey)(IOverlay *This,COLORKEY *pColorKey); - HRESULT (WINAPI *GetWindowHandle)(IOverlay *This,HWND *pHwnd); - HRESULT (WINAPI *GetClipList)(IOverlay *This,RECT *pSourceRect,RECT *pDestinationRect,RGNDATA **ppRgnData); - HRESULT (WINAPI *GetVideoPosition)(IOverlay *This,RECT *pSourceRect,RECT *pDestinationRect); - HRESULT (WINAPI *Advise)(IOverlay *This,IOverlayNotify *pOverlayNotify,DWORD dwInterests); - HRESULT (WINAPI *Unadvise)(IOverlay *This); - END_INTERFACE - } IOverlayVtbl; - struct IOverlay { - CONST_VTBL struct IOverlayVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IOverlay_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IOverlay_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IOverlay_Release(This) (This)->lpVtbl->Release(This) -#define IOverlay_GetPalette(This,pdwColors,ppPalette) (This)->lpVtbl->GetPalette(This,pdwColors,ppPalette) -#define IOverlay_SetPalette(This,dwColors,pPalette) (This)->lpVtbl->SetPalette(This,dwColors,pPalette) -#define IOverlay_GetDefaultColorKey(This,pColorKey) (This)->lpVtbl->GetDefaultColorKey(This,pColorKey) -#define IOverlay_GetColorKey(This,pColorKey) (This)->lpVtbl->GetColorKey(This,pColorKey) -#define IOverlay_SetColorKey(This,pColorKey) (This)->lpVtbl->SetColorKey(This,pColorKey) -#define IOverlay_GetWindowHandle(This,pHwnd) (This)->lpVtbl->GetWindowHandle(This,pHwnd) -#define IOverlay_GetClipList(This,pSourceRect,pDestinationRect,ppRgnData) (This)->lpVtbl->GetClipList(This,pSourceRect,pDestinationRect,ppRgnData) -#define IOverlay_GetVideoPosition(This,pSourceRect,pDestinationRect) (This)->lpVtbl->GetVideoPosition(This,pSourceRect,pDestinationRect) -#define IOverlay_Advise(This,pOverlayNotify,dwInterests) (This)->lpVtbl->Advise(This,pOverlayNotify,dwInterests) -#define IOverlay_Unadvise(This) (This)->lpVtbl->Unadvise(This) -#endif -#endif - HRESULT WINAPI IOverlay_GetPalette_Proxy(IOverlay *This,DWORD *pdwColors,PALETTEENTRY **ppPalette); - void __RPC_STUB IOverlay_GetPalette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_SetPalette_Proxy(IOverlay *This,DWORD dwColors,PALETTEENTRY *pPalette); - void __RPC_STUB IOverlay_SetPalette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_GetDefaultColorKey_Proxy(IOverlay *This,COLORKEY *pColorKey); - void __RPC_STUB IOverlay_GetDefaultColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_GetColorKey_Proxy(IOverlay *This,COLORKEY *pColorKey); - void __RPC_STUB IOverlay_GetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_SetColorKey_Proxy(IOverlay *This,COLORKEY *pColorKey); - void __RPC_STUB IOverlay_SetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_GetWindowHandle_Proxy(IOverlay *This,HWND *pHwnd); - void __RPC_STUB IOverlay_GetWindowHandle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_GetClipList_Proxy(IOverlay *This,RECT *pSourceRect,RECT *pDestinationRect,RGNDATA **ppRgnData); - void __RPC_STUB IOverlay_GetClipList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_GetVideoPosition_Proxy(IOverlay *This,RECT *pSourceRect,RECT *pDestinationRect); - void __RPC_STUB IOverlay_GetVideoPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_Advise_Proxy(IOverlay *This,IOverlayNotify *pOverlayNotify,DWORD dwInterests); - void __RPC_STUB IOverlay_Advise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IOverlay_Unadvise_Proxy(IOverlay *This); - void __RPC_STUB IOverlay_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IOverlay *POVERLAY; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0145_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0145_v0_0_s_ifspec; -#ifndef __IMediaEventSink_INTERFACE_DEFINED__ -#define __IMediaEventSink_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMediaEventSink; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaEventSink : public IUnknown { - public: - virtual HRESULT WINAPI Notify(long EventCode,LONG_PTR EventParam1,LONG_PTR EventParam2) = 0; - }; -#else - typedef struct IMediaEventSinkVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaEventSink *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaEventSink *This); - ULONG (WINAPI *Release)(IMediaEventSink *This); - HRESULT (WINAPI *Notify)(IMediaEventSink *This,long EventCode,LONG_PTR EventParam1,LONG_PTR EventParam2); - END_INTERFACE - } IMediaEventSinkVtbl; - struct IMediaEventSink { - CONST_VTBL struct IMediaEventSinkVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaEventSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaEventSink_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaEventSink_Release(This) (This)->lpVtbl->Release(This) -#define IMediaEventSink_Notify(This,EventCode,EventParam1,EventParam2) (This)->lpVtbl->Notify(This,EventCode,EventParam1,EventParam2) -#endif -#endif - HRESULT WINAPI IMediaEventSink_Notify_Proxy(IMediaEventSink *This,long EventCode,LONG_PTR EventParam1,LONG_PTR EventParam2); - void __RPC_STUB IMediaEventSink_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IMediaEventSink *PMEDIAEVENTSINK; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0146_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0146_v0_0_s_ifspec; -#ifndef __IFileSourceFilter_INTERFACE_DEFINED__ -#define __IFileSourceFilter_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFileSourceFilter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFileSourceFilter : public IUnknown { - public: - virtual HRESULT WINAPI Load(LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI GetCurFile(LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt) = 0; - }; -#else - typedef struct IFileSourceFilterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFileSourceFilter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFileSourceFilter *This); - ULONG (WINAPI *Release)(IFileSourceFilter *This); - HRESULT (WINAPI *Load)(IFileSourceFilter *This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *GetCurFile)(IFileSourceFilter *This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt); - END_INTERFACE - } IFileSourceFilterVtbl; - struct IFileSourceFilter { - CONST_VTBL struct IFileSourceFilterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFileSourceFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFileSourceFilter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFileSourceFilter_Release(This) (This)->lpVtbl->Release(This) -#define IFileSourceFilter_Load(This,pszFileName,pmt) (This)->lpVtbl->Load(This,pszFileName,pmt) -#define IFileSourceFilter_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt) -#endif -#endif - HRESULT WINAPI IFileSourceFilter_Load_Proxy(IFileSourceFilter *This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFileSourceFilter_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFileSourceFilter_GetCurFile_Proxy(IFileSourceFilter *This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFileSourceFilter_GetCurFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IFileSourceFilter *PFILTERFILESOURCE; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0147_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0147_v0_0_s_ifspec; -#ifndef __IFileSinkFilter_INTERFACE_DEFINED__ -#define __IFileSinkFilter_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFileSinkFilter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFileSinkFilter : public IUnknown { - public: - virtual HRESULT WINAPI SetFileName(LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI GetCurFile(LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt) = 0; - }; -#else - typedef struct IFileSinkFilterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFileSinkFilter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFileSinkFilter *This); - ULONG (WINAPI *Release)(IFileSinkFilter *This); - HRESULT (WINAPI *SetFileName)(IFileSinkFilter *This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *GetCurFile)(IFileSinkFilter *This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt); - END_INTERFACE - } IFileSinkFilterVtbl; - struct IFileSinkFilter { - CONST_VTBL struct IFileSinkFilterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFileSinkFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFileSinkFilter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFileSinkFilter_Release(This) (This)->lpVtbl->Release(This) -#define IFileSinkFilter_SetFileName(This,pszFileName,pmt) (This)->lpVtbl->SetFileName(This,pszFileName,pmt) -#define IFileSinkFilter_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt) -#endif -#endif - HRESULT WINAPI IFileSinkFilter_SetFileName_Proxy(IFileSinkFilter *This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFileSinkFilter_SetFileName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFileSinkFilter_GetCurFile_Proxy(IFileSinkFilter *This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFileSinkFilter_GetCurFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IFileSinkFilter *PFILTERFILESINK; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0148_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0148_v0_0_s_ifspec; -#ifndef __IFileSinkFilter2_INTERFACE_DEFINED__ -#define __IFileSinkFilter2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFileSinkFilter2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFileSinkFilter2 : public IFileSinkFilter { - public: - virtual HRESULT WINAPI SetMode(DWORD dwFlags) = 0; - virtual HRESULT WINAPI GetMode(DWORD *pdwFlags) = 0; - }; -#else - typedef struct IFileSinkFilter2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFileSinkFilter2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFileSinkFilter2 *This); - ULONG (WINAPI *Release)(IFileSinkFilter2 *This); - HRESULT (WINAPI *SetFileName)(IFileSinkFilter2 *This,LPCOLESTR pszFileName,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *GetCurFile)(IFileSinkFilter2 *This,LPOLESTR *ppszFileName,AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *SetMode)(IFileSinkFilter2 *This,DWORD dwFlags); - HRESULT (WINAPI *GetMode)(IFileSinkFilter2 *This,DWORD *pdwFlags); - END_INTERFACE - } IFileSinkFilter2Vtbl; - struct IFileSinkFilter2 { - CONST_VTBL struct IFileSinkFilter2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFileSinkFilter2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFileSinkFilter2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFileSinkFilter2_Release(This) (This)->lpVtbl->Release(This) -#define IFileSinkFilter2_SetFileName(This,pszFileName,pmt) (This)->lpVtbl->SetFileName(This,pszFileName,pmt) -#define IFileSinkFilter2_GetCurFile(This,ppszFileName,pmt) (This)->lpVtbl->GetCurFile(This,ppszFileName,pmt) -#define IFileSinkFilter2_SetMode(This,dwFlags) (This)->lpVtbl->SetMode(This,dwFlags) -#define IFileSinkFilter2_GetMode(This,pdwFlags) (This)->lpVtbl->GetMode(This,pdwFlags) -#endif -#endif - HRESULT WINAPI IFileSinkFilter2_SetMode_Proxy(IFileSinkFilter2 *This,DWORD dwFlags); - void __RPC_STUB IFileSinkFilter2_SetMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFileSinkFilter2_GetMode_Proxy(IFileSinkFilter2 *This,DWORD *pdwFlags); - void __RPC_STUB IFileSinkFilter2_GetMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IFileSinkFilter2 *PFILESINKFILTER2; - - typedef enum __MIDL___MIDL_itf_strmif_0149_0001 { - AM_FILE_OVERWRITE = 0x1 - } AM_FILESINK_FLAGS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0149_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0149_v0_0_s_ifspec; -#ifndef __IGraphBuilder_INTERFACE_DEFINED__ -#define __IGraphBuilder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IGraphBuilder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IGraphBuilder : public IFilterGraph { - public: - virtual HRESULT WINAPI Connect(IPin *ppinOut,IPin *ppinIn) = 0; - virtual HRESULT WINAPI Render(IPin *ppinOut) = 0; - virtual HRESULT WINAPI RenderFile(LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList) = 0; - virtual HRESULT WINAPI AddSourceFilter(LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter) = 0; - virtual HRESULT WINAPI SetLogFile(DWORD_PTR hFile) = 0; - virtual HRESULT WINAPI Abort(void) = 0; - virtual HRESULT WINAPI ShouldOperationContinue(void) = 0; - }; -#else - typedef struct IGraphBuilderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IGraphBuilder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IGraphBuilder *This); - ULONG (WINAPI *Release)(IGraphBuilder *This); - HRESULT (WINAPI *AddFilter)(IGraphBuilder *This,IBaseFilter *pFilter,LPCWSTR pName); - HRESULT (WINAPI *RemoveFilter)(IGraphBuilder *This,IBaseFilter *pFilter); - HRESULT (WINAPI *EnumFilters)(IGraphBuilder *This,IEnumFilters **ppEnum); - HRESULT (WINAPI *FindFilterByName)(IGraphBuilder *This,LPCWSTR pName,IBaseFilter **ppFilter); - HRESULT (WINAPI *ConnectDirect)(IGraphBuilder *This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *Reconnect)(IGraphBuilder *This,IPin *ppin); - HRESULT (WINAPI *Disconnect)(IGraphBuilder *This,IPin *ppin); - HRESULT (WINAPI *SetDefaultSyncSource)(IGraphBuilder *This); - HRESULT (WINAPI *Connect)(IGraphBuilder *This,IPin *ppinOut,IPin *ppinIn); - HRESULT (WINAPI *Render)(IGraphBuilder *This,IPin *ppinOut); - HRESULT (WINAPI *RenderFile)(IGraphBuilder *This,LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList); - HRESULT (WINAPI *AddSourceFilter)(IGraphBuilder *This,LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter); - HRESULT (WINAPI *SetLogFile)(IGraphBuilder *This,DWORD_PTR hFile); - HRESULT (WINAPI *Abort)(IGraphBuilder *This); - HRESULT (WINAPI *ShouldOperationContinue)(IGraphBuilder *This); - END_INTERFACE - } IGraphBuilderVtbl; - struct IGraphBuilder { - CONST_VTBL struct IGraphBuilderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IGraphBuilder_Release(This) (This)->lpVtbl->Release(This) -#define IGraphBuilder_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName) -#define IGraphBuilder_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter) -#define IGraphBuilder_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum) -#define IGraphBuilder_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter) -#define IGraphBuilder_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt) -#define IGraphBuilder_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin) -#define IGraphBuilder_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin) -#define IGraphBuilder_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This) -#define IGraphBuilder_Connect(This,ppinOut,ppinIn) (This)->lpVtbl->Connect(This,ppinOut,ppinIn) -#define IGraphBuilder_Render(This,ppinOut) (This)->lpVtbl->Render(This,ppinOut) -#define IGraphBuilder_RenderFile(This,lpcwstrFile,lpcwstrPlayList) (This)->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList) -#define IGraphBuilder_AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) -#define IGraphBuilder_SetLogFile(This,hFile) (This)->lpVtbl->SetLogFile(This,hFile) -#define IGraphBuilder_Abort(This) (This)->lpVtbl->Abort(This) -#define IGraphBuilder_ShouldOperationContinue(This) (This)->lpVtbl->ShouldOperationContinue(This) -#endif -#endif - HRESULT WINAPI IGraphBuilder_Connect_Proxy(IGraphBuilder *This,IPin *ppinOut,IPin *ppinIn); - void __RPC_STUB IGraphBuilder_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_Render_Proxy(IGraphBuilder *This,IPin *ppinOut); - void __RPC_STUB IGraphBuilder_Render_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_RenderFile_Proxy(IGraphBuilder *This,LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList); - void __RPC_STUB IGraphBuilder_RenderFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_AddSourceFilter_Proxy(IGraphBuilder *This,LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter); - void __RPC_STUB IGraphBuilder_AddSourceFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_SetLogFile_Proxy(IGraphBuilder *This,DWORD_PTR hFile); - void __RPC_STUB IGraphBuilder_SetLogFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_Abort_Proxy(IGraphBuilder *This); - void __RPC_STUB IGraphBuilder_Abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphBuilder_ShouldOperationContinue_Proxy(IGraphBuilder *This); - void __RPC_STUB IGraphBuilder_ShouldOperationContinue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __ICaptureGraphBuilder_INTERFACE_DEFINED__ -#define __ICaptureGraphBuilder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_ICaptureGraphBuilder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct ICaptureGraphBuilder : public IUnknown { - public: - virtual HRESULT WINAPI SetFiltergraph(IGraphBuilder *pfg) = 0; - virtual HRESULT WINAPI GetFiltergraph(IGraphBuilder **ppfg) = 0; - virtual HRESULT WINAPI SetOutputFileName(const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink) = 0; - virtual HRESULT WINAPI FindInterface(const GUID *pCategory,IBaseFilter *pf,REFIID riid,void **ppint) = 0; - virtual HRESULT WINAPI RenderStream(const GUID *pCategory,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer) = 0; - virtual HRESULT WINAPI ControlStream(const GUID *pCategory,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie) = 0; - virtual HRESULT WINAPI AllocCapFile(LPCOLESTR lpstr,DWORDLONG dwlSize) = 0; - virtual HRESULT WINAPI CopyCaptureFile(LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback) = 0; - }; -#else - typedef struct ICaptureGraphBuilderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(ICaptureGraphBuilder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(ICaptureGraphBuilder *This); - ULONG (WINAPI *Release)(ICaptureGraphBuilder *This); - HRESULT (WINAPI *SetFiltergraph)(ICaptureGraphBuilder *This,IGraphBuilder *pfg); - HRESULT (WINAPI *GetFiltergraph)(ICaptureGraphBuilder *This,IGraphBuilder **ppfg); - HRESULT (WINAPI *SetOutputFileName)(ICaptureGraphBuilder *This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink); - HRESULT (WINAPI *FindInterface)(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pf,REFIID riid,void **ppint); - HRESULT (WINAPI *RenderStream)(ICaptureGraphBuilder *This,const GUID *pCategory,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer); - HRESULT (WINAPI *ControlStream)(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie); - HRESULT (WINAPI *AllocCapFile)(ICaptureGraphBuilder *This,LPCOLESTR lpstr,DWORDLONG dwlSize); - HRESULT (WINAPI *CopyCaptureFile)(ICaptureGraphBuilder *This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback); - END_INTERFACE - } ICaptureGraphBuilderVtbl; - struct ICaptureGraphBuilder { - CONST_VTBL struct ICaptureGraphBuilderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define ICaptureGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define ICaptureGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define ICaptureGraphBuilder_Release(This) (This)->lpVtbl->Release(This) -#define ICaptureGraphBuilder_SetFiltergraph(This,pfg) (This)->lpVtbl->SetFiltergraph(This,pfg) -#define ICaptureGraphBuilder_GetFiltergraph(This,ppfg) (This)->lpVtbl->GetFiltergraph(This,ppfg) -#define ICaptureGraphBuilder_SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) (This)->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) -#define ICaptureGraphBuilder_FindInterface(This,pCategory,pf,riid,ppint) (This)->lpVtbl->FindInterface(This,pCategory,pf,riid,ppint) -#define ICaptureGraphBuilder_RenderStream(This,pCategory,pSource,pfCompressor,pfRenderer) (This)->lpVtbl->RenderStream(This,pCategory,pSource,pfCompressor,pfRenderer) -#define ICaptureGraphBuilder_ControlStream(This,pCategory,pFilter,pstart,pstop,wStartCookie,wStopCookie) (This)->lpVtbl->ControlStream(This,pCategory,pFilter,pstart,pstop,wStartCookie,wStopCookie) -#define ICaptureGraphBuilder_AllocCapFile(This,lpstr,dwlSize) (This)->lpVtbl->AllocCapFile(This,lpstr,dwlSize) -#define ICaptureGraphBuilder_CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) (This)->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) -#endif -#endif - HRESULT WINAPI ICaptureGraphBuilder_SetFiltergraph_Proxy(ICaptureGraphBuilder *This,IGraphBuilder *pfg); - void __RPC_STUB ICaptureGraphBuilder_SetFiltergraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_GetFiltergraph_Proxy(ICaptureGraphBuilder *This,IGraphBuilder **ppfg); - void __RPC_STUB ICaptureGraphBuilder_GetFiltergraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_SetOutputFileName_Proxy(ICaptureGraphBuilder *This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink); - void __RPC_STUB ICaptureGraphBuilder_SetOutputFileName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_RemoteFindInterface_Proxy(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pf,REFIID riid,IUnknown **ppint); - void __RPC_STUB ICaptureGraphBuilder_RemoteFindInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_RenderStream_Proxy(ICaptureGraphBuilder *This,const GUID *pCategory,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer); - void __RPC_STUB ICaptureGraphBuilder_RenderStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_ControlStream_Proxy(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie); - void __RPC_STUB ICaptureGraphBuilder_ControlStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_AllocCapFile_Proxy(ICaptureGraphBuilder *This,LPCOLESTR lpstr,DWORDLONG dwlSize); - void __RPC_STUB ICaptureGraphBuilder_AllocCapFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder_CopyCaptureFile_Proxy(ICaptureGraphBuilder *This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback); - void __RPC_STUB ICaptureGraphBuilder_CopyCaptureFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMCopyCaptureFileProgress_INTERFACE_DEFINED__ -#define __IAMCopyCaptureFileProgress_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMCopyCaptureFileProgress; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMCopyCaptureFileProgress : public IUnknown { - public: - virtual HRESULT WINAPI Progress(int iProgress) = 0; - }; -#else - typedef struct IAMCopyCaptureFileProgressVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMCopyCaptureFileProgress *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMCopyCaptureFileProgress *This); - ULONG (WINAPI *Release)(IAMCopyCaptureFileProgress *This); - HRESULT (WINAPI *Progress)(IAMCopyCaptureFileProgress *This,int iProgress); - END_INTERFACE - } IAMCopyCaptureFileProgressVtbl; - struct IAMCopyCaptureFileProgress { - CONST_VTBL struct IAMCopyCaptureFileProgressVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMCopyCaptureFileProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMCopyCaptureFileProgress_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMCopyCaptureFileProgress_Release(This) (This)->lpVtbl->Release(This) -#define IAMCopyCaptureFileProgress_Progress(This,iProgress) (This)->lpVtbl->Progress(This,iProgress) -#endif -#endif - HRESULT WINAPI IAMCopyCaptureFileProgress_Progress_Proxy(IAMCopyCaptureFileProgress *This,int iProgress); - void __RPC_STUB IAMCopyCaptureFileProgress_Progress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __ICaptureGraphBuilder2_INTERFACE_DEFINED__ -#define __ICaptureGraphBuilder2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_ICaptureGraphBuilder2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct ICaptureGraphBuilder2 : public IUnknown { - public: - virtual HRESULT WINAPI SetFiltergraph(IGraphBuilder *pfg) = 0; - virtual HRESULT WINAPI GetFiltergraph(IGraphBuilder **ppfg) = 0; - virtual HRESULT WINAPI SetOutputFileName(const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink) = 0; - virtual HRESULT WINAPI FindInterface(const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,void **ppint) = 0; - virtual HRESULT WINAPI RenderStream(const GUID *pCategory,const GUID *pType,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer) = 0; - virtual HRESULT WINAPI ControlStream(const GUID *pCategory,const GUID *pType,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie) = 0; - virtual HRESULT WINAPI AllocCapFile(LPCOLESTR lpstr,DWORDLONG dwlSize) = 0; - virtual HRESULT WINAPI CopyCaptureFile(LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback) = 0; - virtual HRESULT WINAPI FindPin(IUnknown *pSource,PIN_DIRECTION pindir,const GUID *pCategory,const GUID *pType,WINBOOL fUnconnected,int num,IPin **ppPin) = 0; - }; -#else - typedef struct ICaptureGraphBuilder2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(ICaptureGraphBuilder2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(ICaptureGraphBuilder2 *This); - ULONG (WINAPI *Release)(ICaptureGraphBuilder2 *This); - HRESULT (WINAPI *SetFiltergraph)(ICaptureGraphBuilder2 *This,IGraphBuilder *pfg); - HRESULT (WINAPI *GetFiltergraph)(ICaptureGraphBuilder2 *This,IGraphBuilder **ppfg); - HRESULT (WINAPI *SetOutputFileName)(ICaptureGraphBuilder2 *This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink); - HRESULT (WINAPI *FindInterface)(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,void **ppint); - HRESULT (WINAPI *RenderStream)(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer); - HRESULT (WINAPI *ControlStream)(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie); - HRESULT (WINAPI *AllocCapFile)(ICaptureGraphBuilder2 *This,LPCOLESTR lpstr,DWORDLONG dwlSize); - HRESULT (WINAPI *CopyCaptureFile)(ICaptureGraphBuilder2 *This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback); - HRESULT (WINAPI *FindPin)(ICaptureGraphBuilder2 *This,IUnknown *pSource,PIN_DIRECTION pindir,const GUID *pCategory,const GUID *pType,WINBOOL fUnconnected,int num,IPin **ppPin); - END_INTERFACE - } ICaptureGraphBuilder2Vtbl; - struct ICaptureGraphBuilder2 { - CONST_VTBL struct ICaptureGraphBuilder2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define ICaptureGraphBuilder2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define ICaptureGraphBuilder2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define ICaptureGraphBuilder2_Release(This) (This)->lpVtbl->Release(This) -#define ICaptureGraphBuilder2_SetFiltergraph(This,pfg) (This)->lpVtbl->SetFiltergraph(This,pfg) -#define ICaptureGraphBuilder2_GetFiltergraph(This,ppfg) (This)->lpVtbl->GetFiltergraph(This,ppfg) -#define ICaptureGraphBuilder2_SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) (This)->lpVtbl->SetOutputFileName(This,pType,lpstrFile,ppf,ppSink) -#define ICaptureGraphBuilder2_FindInterface(This,pCategory,pType,pf,riid,ppint) (This)->lpVtbl->FindInterface(This,pCategory,pType,pf,riid,ppint) -#define ICaptureGraphBuilder2_RenderStream(This,pCategory,pType,pSource,pfCompressor,pfRenderer) (This)->lpVtbl->RenderStream(This,pCategory,pType,pSource,pfCompressor,pfRenderer) -#define ICaptureGraphBuilder2_ControlStream(This,pCategory,pType,pFilter,pstart,pstop,wStartCookie,wStopCookie) (This)->lpVtbl->ControlStream(This,pCategory,pType,pFilter,pstart,pstop,wStartCookie,wStopCookie) -#define ICaptureGraphBuilder2_AllocCapFile(This,lpstr,dwlSize) (This)->lpVtbl->AllocCapFile(This,lpstr,dwlSize) -#define ICaptureGraphBuilder2_CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) (This)->lpVtbl->CopyCaptureFile(This,lpwstrOld,lpwstrNew,fAllowEscAbort,pCallback) -#define ICaptureGraphBuilder2_FindPin(This,pSource,pindir,pCategory,pType,fUnconnected,num,ppPin) (This)->lpVtbl->FindPin(This,pSource,pindir,pCategory,pType,fUnconnected,num,ppPin) -#endif -#endif - HRESULT WINAPI ICaptureGraphBuilder2_SetFiltergraph_Proxy(ICaptureGraphBuilder2 *This,IGraphBuilder *pfg); - void __RPC_STUB ICaptureGraphBuilder2_SetFiltergraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_GetFiltergraph_Proxy(ICaptureGraphBuilder2 *This,IGraphBuilder **ppfg); - void __RPC_STUB ICaptureGraphBuilder2_GetFiltergraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_SetOutputFileName_Proxy(ICaptureGraphBuilder2 *This,const GUID *pType,LPCOLESTR lpstrFile,IBaseFilter **ppf,IFileSinkFilter **ppSink); - void __RPC_STUB ICaptureGraphBuilder2_SetOutputFileName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_RemoteFindInterface_Proxy(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,IUnknown **ppint); - void __RPC_STUB ICaptureGraphBuilder2_RemoteFindInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_RenderStream_Proxy(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IUnknown *pSource,IBaseFilter *pfCompressor,IBaseFilter *pfRenderer); - void __RPC_STUB ICaptureGraphBuilder2_RenderStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_ControlStream_Proxy(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pFilter,REFERENCE_TIME *pstart,REFERENCE_TIME *pstop,WORD wStartCookie,WORD wStopCookie); - void __RPC_STUB ICaptureGraphBuilder2_ControlStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_AllocCapFile_Proxy(ICaptureGraphBuilder2 *This,LPCOLESTR lpstr,DWORDLONG dwlSize); - void __RPC_STUB ICaptureGraphBuilder2_AllocCapFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_CopyCaptureFile_Proxy(ICaptureGraphBuilder2 *This,LPOLESTR lpwstrOld,LPOLESTR lpwstrNew,int fAllowEscAbort,IAMCopyCaptureFileProgress *pCallback); - void __RPC_STUB ICaptureGraphBuilder2_CopyCaptureFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICaptureGraphBuilder2_FindPin_Proxy(ICaptureGraphBuilder2 *This,IUnknown *pSource,PIN_DIRECTION pindir,const GUID *pCategory,const GUID *pType,WINBOOL fUnconnected,int num,IPin **ppPin); - void __RPC_STUB ICaptureGraphBuilder2_FindPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_RENSDEREXFLAGS { - AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x1 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0153_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0153_v0_0_s_ifspec; -#ifndef __IFilterGraph2_INTERFACE_DEFINED__ -#define __IFilterGraph2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFilterGraph2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterGraph2 : public IGraphBuilder { - public: - virtual HRESULT WINAPI AddSourceFilterForMoniker(IMoniker *pMoniker,IBindCtx *pCtx,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter) = 0; - virtual HRESULT WINAPI ReconnectEx(IPin *ppin,const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI RenderEx(IPin *pPinOut,DWORD dwFlags,DWORD *pvContext) = 0; - }; -#else - typedef struct IFilterGraph2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterGraph2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterGraph2 *This); - ULONG (WINAPI *Release)(IFilterGraph2 *This); - HRESULT (WINAPI *AddFilter)(IFilterGraph2 *This,IBaseFilter *pFilter,LPCWSTR pName); - HRESULT (WINAPI *RemoveFilter)(IFilterGraph2 *This,IBaseFilter *pFilter); - HRESULT (WINAPI *EnumFilters)(IFilterGraph2 *This,IEnumFilters **ppEnum); - HRESULT (WINAPI *FindFilterByName)(IFilterGraph2 *This,LPCWSTR pName,IBaseFilter **ppFilter); - HRESULT (WINAPI *ConnectDirect)(IFilterGraph2 *This,IPin *ppinOut,IPin *ppinIn,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *Reconnect)(IFilterGraph2 *This,IPin *ppin); - HRESULT (WINAPI *Disconnect)(IFilterGraph2 *This,IPin *ppin); - HRESULT (WINAPI *SetDefaultSyncSource)(IFilterGraph2 *This); - HRESULT (WINAPI *Connect)(IFilterGraph2 *This,IPin *ppinOut,IPin *ppinIn); - HRESULT (WINAPI *Render)(IFilterGraph2 *This,IPin *ppinOut); - HRESULT (WINAPI *RenderFile)(IFilterGraph2 *This,LPCWSTR lpcwstrFile,LPCWSTR lpcwstrPlayList); - HRESULT (WINAPI *AddSourceFilter)(IFilterGraph2 *This,LPCWSTR lpcwstrFileName,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter); - HRESULT (WINAPI *SetLogFile)(IFilterGraph2 *This,DWORD_PTR hFile); - HRESULT (WINAPI *Abort)(IFilterGraph2 *This); - HRESULT (WINAPI *ShouldOperationContinue)(IFilterGraph2 *This); - HRESULT (WINAPI *AddSourceFilterForMoniker)(IFilterGraph2 *This,IMoniker *pMoniker,IBindCtx *pCtx,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter); - HRESULT (WINAPI *ReconnectEx)(IFilterGraph2 *This,IPin *ppin,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *RenderEx)(IFilterGraph2 *This,IPin *pPinOut,DWORD dwFlags,DWORD *pvContext); - END_INTERFACE - } IFilterGraph2Vtbl; - struct IFilterGraph2 { - CONST_VTBL struct IFilterGraph2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterGraph2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterGraph2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterGraph2_Release(This) (This)->lpVtbl->Release(This) -#define IFilterGraph2_AddFilter(This,pFilter,pName) (This)->lpVtbl->AddFilter(This,pFilter,pName) -#define IFilterGraph2_RemoveFilter(This,pFilter) (This)->lpVtbl->RemoveFilter(This,pFilter) -#define IFilterGraph2_EnumFilters(This,ppEnum) (This)->lpVtbl->EnumFilters(This,ppEnum) -#define IFilterGraph2_FindFilterByName(This,pName,ppFilter) (This)->lpVtbl->FindFilterByName(This,pName,ppFilter) -#define IFilterGraph2_ConnectDirect(This,ppinOut,ppinIn,pmt) (This)->lpVtbl->ConnectDirect(This,ppinOut,ppinIn,pmt) -#define IFilterGraph2_Reconnect(This,ppin) (This)->lpVtbl->Reconnect(This,ppin) -#define IFilterGraph2_Disconnect(This,ppin) (This)->lpVtbl->Disconnect(This,ppin) -#define IFilterGraph2_SetDefaultSyncSource(This) (This)->lpVtbl->SetDefaultSyncSource(This) -#define IFilterGraph2_Connect(This,ppinOut,ppinIn) (This)->lpVtbl->Connect(This,ppinOut,ppinIn) -#define IFilterGraph2_Render(This,ppinOut) (This)->lpVtbl->Render(This,ppinOut) -#define IFilterGraph2_RenderFile(This,lpcwstrFile,lpcwstrPlayList) (This)->lpVtbl->RenderFile(This,lpcwstrFile,lpcwstrPlayList) -#define IFilterGraph2_AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilter(This,lpcwstrFileName,lpcwstrFilterName,ppFilter) -#define IFilterGraph2_SetLogFile(This,hFile) (This)->lpVtbl->SetLogFile(This,hFile) -#define IFilterGraph2_Abort(This) (This)->lpVtbl->Abort(This) -#define IFilterGraph2_ShouldOperationContinue(This) (This)->lpVtbl->ShouldOperationContinue(This) -#define IFilterGraph2_AddSourceFilterForMoniker(This,pMoniker,pCtx,lpcwstrFilterName,ppFilter) (This)->lpVtbl->AddSourceFilterForMoniker(This,pMoniker,pCtx,lpcwstrFilterName,ppFilter) -#define IFilterGraph2_ReconnectEx(This,ppin,pmt) (This)->lpVtbl->ReconnectEx(This,ppin,pmt) -#define IFilterGraph2_RenderEx(This,pPinOut,dwFlags,pvContext) (This)->lpVtbl->RenderEx(This,pPinOut,dwFlags,pvContext) -#endif -#endif - HRESULT WINAPI IFilterGraph2_AddSourceFilterForMoniker_Proxy(IFilterGraph2 *This,IMoniker *pMoniker,IBindCtx *pCtx,LPCWSTR lpcwstrFilterName,IBaseFilter **ppFilter); - void __RPC_STUB IFilterGraph2_AddSourceFilterForMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph2_ReconnectEx_Proxy(IFilterGraph2 *This,IPin *ppin,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IFilterGraph2_ReconnectEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterGraph2_RenderEx_Proxy(IFilterGraph2 *This,IPin *pPinOut,DWORD dwFlags,DWORD *pvContext); - void __RPC_STUB IFilterGraph2_RenderEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IStreamBuilder_INTERFACE_DEFINED__ -#define __IStreamBuilder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IStreamBuilder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IStreamBuilder : public IUnknown { - public: - virtual HRESULT WINAPI Render(IPin *ppinOut,IGraphBuilder *pGraph) = 0; - virtual HRESULT WINAPI Backout(IPin *ppinOut,IGraphBuilder *pGraph) = 0; - }; -#else - typedef struct IStreamBuilderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IStreamBuilder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IStreamBuilder *This); - ULONG (WINAPI *Release)(IStreamBuilder *This); - HRESULT (WINAPI *Render)(IStreamBuilder *This,IPin *ppinOut,IGraphBuilder *pGraph); - HRESULT (WINAPI *Backout)(IStreamBuilder *This,IPin *ppinOut,IGraphBuilder *pGraph); - END_INTERFACE - } IStreamBuilderVtbl; - struct IStreamBuilder { - CONST_VTBL struct IStreamBuilderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IStreamBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IStreamBuilder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IStreamBuilder_Release(This) (This)->lpVtbl->Release(This) -#define IStreamBuilder_Render(This,ppinOut,pGraph) (This)->lpVtbl->Render(This,ppinOut,pGraph) -#define IStreamBuilder_Backout(This,ppinOut,pGraph) (This)->lpVtbl->Backout(This,ppinOut,pGraph) -#endif -#endif - HRESULT WINAPI IStreamBuilder_Render_Proxy(IStreamBuilder *This,IPin *ppinOut,IGraphBuilder *pGraph); - void __RPC_STUB IStreamBuilder_Render_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IStreamBuilder_Backout_Proxy(IStreamBuilder *This,IPin *ppinOut,IGraphBuilder *pGraph); - void __RPC_STUB IStreamBuilder_Backout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAsyncReader_INTERFACE_DEFINED__ -#define __IAsyncReader_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAsyncReader; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAsyncReader : public IUnknown { - public: - virtual HRESULT WINAPI RequestAllocator(IMemAllocator *pPreferred,ALLOCATOR_PROPERTIES *pProps,IMemAllocator **ppActual) = 0; - virtual HRESULT WINAPI Request(IMediaSample *pSample,DWORD_PTR dwUser) = 0; - virtual HRESULT WINAPI WaitForNext(DWORD dwTimeout,IMediaSample **ppSample,DWORD_PTR *pdwUser) = 0; - virtual HRESULT WINAPI SyncReadAligned(IMediaSample *pSample) = 0; - virtual HRESULT WINAPI SyncRead(LONGLONG llPosition,LONG lLength,BYTE *pBuffer) = 0; - virtual HRESULT WINAPI Length(LONGLONG *pTotal,LONGLONG *pAvailable) = 0; - virtual HRESULT WINAPI BeginFlush(void) = 0; - virtual HRESULT WINAPI EndFlush(void) = 0; - }; -#else - typedef struct IAsyncReaderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAsyncReader *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAsyncReader *This); - ULONG (WINAPI *Release)(IAsyncReader *This); - HRESULT (WINAPI *RequestAllocator)(IAsyncReader *This,IMemAllocator *pPreferred,ALLOCATOR_PROPERTIES *pProps,IMemAllocator **ppActual); - HRESULT (WINAPI *Request)(IAsyncReader *This,IMediaSample *pSample,DWORD_PTR dwUser); - HRESULT (WINAPI *WaitForNext)(IAsyncReader *This,DWORD dwTimeout,IMediaSample **ppSample,DWORD_PTR *pdwUser); - HRESULT (WINAPI *SyncReadAligned)(IAsyncReader *This,IMediaSample *pSample); - HRESULT (WINAPI *SyncRead)(IAsyncReader *This,LONGLONG llPosition,LONG lLength,BYTE *pBuffer); - HRESULT (WINAPI *Length)(IAsyncReader *This,LONGLONG *pTotal,LONGLONG *pAvailable); - HRESULT (WINAPI *BeginFlush)(IAsyncReader *This); - HRESULT (WINAPI *EndFlush)(IAsyncReader *This); - END_INTERFACE - } IAsyncReaderVtbl; - struct IAsyncReader { - CONST_VTBL struct IAsyncReaderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAsyncReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAsyncReader_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAsyncReader_Release(This) (This)->lpVtbl->Release(This) -#define IAsyncReader_RequestAllocator(This,pPreferred,pProps,ppActual) (This)->lpVtbl->RequestAllocator(This,pPreferred,pProps,ppActual) -#define IAsyncReader_Request(This,pSample,dwUser) (This)->lpVtbl->Request(This,pSample,dwUser) -#define IAsyncReader_WaitForNext(This,dwTimeout,ppSample,pdwUser) (This)->lpVtbl->WaitForNext(This,dwTimeout,ppSample,pdwUser) -#define IAsyncReader_SyncReadAligned(This,pSample) (This)->lpVtbl->SyncReadAligned(This,pSample) -#define IAsyncReader_SyncRead(This,llPosition,lLength,pBuffer) (This)->lpVtbl->SyncRead(This,llPosition,lLength,pBuffer) -#define IAsyncReader_Length(This,pTotal,pAvailable) (This)->lpVtbl->Length(This,pTotal,pAvailable) -#define IAsyncReader_BeginFlush(This) (This)->lpVtbl->BeginFlush(This) -#define IAsyncReader_EndFlush(This) (This)->lpVtbl->EndFlush(This) -#endif -#endif - HRESULT WINAPI IAsyncReader_RequestAllocator_Proxy(IAsyncReader *This,IMemAllocator *pPreferred,ALLOCATOR_PROPERTIES *pProps,IMemAllocator **ppActual); - void __RPC_STUB IAsyncReader_RequestAllocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_Request_Proxy(IAsyncReader *This,IMediaSample *pSample,DWORD_PTR dwUser); - void __RPC_STUB IAsyncReader_Request_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_WaitForNext_Proxy(IAsyncReader *This,DWORD dwTimeout,IMediaSample **ppSample,DWORD_PTR *pdwUser); - void __RPC_STUB IAsyncReader_WaitForNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_SyncReadAligned_Proxy(IAsyncReader *This,IMediaSample *pSample); - void __RPC_STUB IAsyncReader_SyncReadAligned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_SyncRead_Proxy(IAsyncReader *This,LONGLONG llPosition,LONG lLength,BYTE *pBuffer); - void __RPC_STUB IAsyncReader_SyncRead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_Length_Proxy(IAsyncReader *This,LONGLONG *pTotal,LONGLONG *pAvailable); - void __RPC_STUB IAsyncReader_Length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_BeginFlush_Proxy(IAsyncReader *This); - void __RPC_STUB IAsyncReader_BeginFlush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAsyncReader_EndFlush_Proxy(IAsyncReader *This); - void __RPC_STUB IAsyncReader_EndFlush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IGraphVersion_INTERFACE_DEFINED__ -#define __IGraphVersion_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IGraphVersion; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IGraphVersion : public IUnknown { - public: - virtual HRESULT WINAPI QueryVersion(LONG *pVersion) = 0; - }; -#else - typedef struct IGraphVersionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IGraphVersion *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IGraphVersion *This); - ULONG (WINAPI *Release)(IGraphVersion *This); - HRESULT (WINAPI *QueryVersion)(IGraphVersion *This,LONG *pVersion); - END_INTERFACE - } IGraphVersionVtbl; - struct IGraphVersion { - CONST_VTBL struct IGraphVersionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IGraphVersion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IGraphVersion_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IGraphVersion_Release(This) (This)->lpVtbl->Release(This) -#define IGraphVersion_QueryVersion(This,pVersion) (This)->lpVtbl->QueryVersion(This,pVersion) -#endif -#endif - HRESULT WINAPI IGraphVersion_QueryVersion_Proxy(IGraphVersion *This,LONG *pVersion); - void __RPC_STUB IGraphVersion_QueryVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IResourceConsumer_INTERFACE_DEFINED__ -#define __IResourceConsumer_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IResourceConsumer; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IResourceConsumer : public IUnknown { - public: - virtual HRESULT WINAPI AcquireResource(LONG idResource) = 0; - virtual HRESULT WINAPI ReleaseResource(LONG idResource) = 0; - }; -#else - typedef struct IResourceConsumerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IResourceConsumer *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IResourceConsumer *This); - ULONG (WINAPI *Release)(IResourceConsumer *This); - HRESULT (WINAPI *AcquireResource)(IResourceConsumer *This,LONG idResource); - HRESULT (WINAPI *ReleaseResource)(IResourceConsumer *This,LONG idResource); - END_INTERFACE - } IResourceConsumerVtbl; - struct IResourceConsumer { - CONST_VTBL struct IResourceConsumerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IResourceConsumer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IResourceConsumer_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IResourceConsumer_Release(This) (This)->lpVtbl->Release(This) -#define IResourceConsumer_AcquireResource(This,idResource) (This)->lpVtbl->AcquireResource(This,idResource) -#define IResourceConsumer_ReleaseResource(This,idResource) (This)->lpVtbl->ReleaseResource(This,idResource) -#endif -#endif - HRESULT WINAPI IResourceConsumer_AcquireResource_Proxy(IResourceConsumer *This,LONG idResource); - void __RPC_STUB IResourceConsumer_AcquireResource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceConsumer_ReleaseResource_Proxy(IResourceConsumer *This,LONG idResource); - void __RPC_STUB IResourceConsumer_ReleaseResource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IResourceManager_INTERFACE_DEFINED__ -#define __IResourceManager_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IResourceManager; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IResourceManager : public IUnknown { - public: - virtual HRESULT WINAPI Register(LPCWSTR pName,LONG cResource,LONG *plToken) = 0; - virtual HRESULT WINAPI RegisterGroup(LPCWSTR pName,LONG cResource,LONG *palTokens,LONG *plToken) = 0; - virtual HRESULT WINAPI RequestResource(LONG idResource,IUnknown *pFocusObject,IResourceConsumer *pConsumer) = 0; - virtual HRESULT WINAPI NotifyAcquire(LONG idResource,IResourceConsumer *pConsumer,HRESULT hr) = 0; - virtual HRESULT WINAPI NotifyRelease(LONG idResource,IResourceConsumer *pConsumer,WINBOOL bStillWant) = 0; - virtual HRESULT WINAPI CancelRequest(LONG idResource,IResourceConsumer *pConsumer) = 0; - virtual HRESULT WINAPI SetFocus(IUnknown *pFocusObject) = 0; - virtual HRESULT WINAPI ReleaseFocus(IUnknown *pFocusObject) = 0; - }; -#else - typedef struct IResourceManagerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IResourceManager *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IResourceManager *This); - ULONG (WINAPI *Release)(IResourceManager *This); - HRESULT (WINAPI *Register)(IResourceManager *This,LPCWSTR pName,LONG cResource,LONG *plToken); - HRESULT (WINAPI *RegisterGroup)(IResourceManager *This,LPCWSTR pName,LONG cResource,LONG *palTokens,LONG *plToken); - HRESULT (WINAPI *RequestResource)(IResourceManager *This,LONG idResource,IUnknown *pFocusObject,IResourceConsumer *pConsumer); - HRESULT (WINAPI *NotifyAcquire)(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer,HRESULT hr); - HRESULT (WINAPI *NotifyRelease)(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer,WINBOOL bStillWant); - HRESULT (WINAPI *CancelRequest)(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer); - HRESULT (WINAPI *SetFocus)(IResourceManager *This,IUnknown *pFocusObject); - HRESULT (WINAPI *ReleaseFocus)(IResourceManager *This,IUnknown *pFocusObject); - END_INTERFACE - } IResourceManagerVtbl; - struct IResourceManager { - CONST_VTBL struct IResourceManagerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IResourceManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IResourceManager_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IResourceManager_Release(This) (This)->lpVtbl->Release(This) -#define IResourceManager_Register(This,pName,cResource,plToken) (This)->lpVtbl->Register(This,pName,cResource,plToken) -#define IResourceManager_RegisterGroup(This,pName,cResource,palTokens,plToken) (This)->lpVtbl->RegisterGroup(This,pName,cResource,palTokens,plToken) -#define IResourceManager_RequestResource(This,idResource,pFocusObject,pConsumer) (This)->lpVtbl->RequestResource(This,idResource,pFocusObject,pConsumer) -#define IResourceManager_NotifyAcquire(This,idResource,pConsumer,hr) (This)->lpVtbl->NotifyAcquire(This,idResource,pConsumer,hr) -#define IResourceManager_NotifyRelease(This,idResource,pConsumer,bStillWant) (This)->lpVtbl->NotifyRelease(This,idResource,pConsumer,bStillWant) -#define IResourceManager_CancelRequest(This,idResource,pConsumer) (This)->lpVtbl->CancelRequest(This,idResource,pConsumer) -#define IResourceManager_SetFocus(This,pFocusObject) (This)->lpVtbl->SetFocus(This,pFocusObject) -#define IResourceManager_ReleaseFocus(This,pFocusObject) (This)->lpVtbl->ReleaseFocus(This,pFocusObject) -#endif -#endif - HRESULT WINAPI IResourceManager_Register_Proxy(IResourceManager *This,LPCWSTR pName,LONG cResource,LONG *plToken); - void __RPC_STUB IResourceManager_Register_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_RegisterGroup_Proxy(IResourceManager *This,LPCWSTR pName,LONG cResource,LONG *palTokens,LONG *plToken); - void __RPC_STUB IResourceManager_RegisterGroup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_RequestResource_Proxy(IResourceManager *This,LONG idResource,IUnknown *pFocusObject,IResourceConsumer *pConsumer); - void __RPC_STUB IResourceManager_RequestResource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_NotifyAcquire_Proxy(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer,HRESULT hr); - void __RPC_STUB IResourceManager_NotifyAcquire_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_NotifyRelease_Proxy(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer,WINBOOL bStillWant); - void __RPC_STUB IResourceManager_NotifyRelease_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_CancelRequest_Proxy(IResourceManager *This,LONG idResource,IResourceConsumer *pConsumer); - void __RPC_STUB IResourceManager_CancelRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_SetFocus_Proxy(IResourceManager *This,IUnknown *pFocusObject); - void __RPC_STUB IResourceManager_SetFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IResourceManager_ReleaseFocus_Proxy(IResourceManager *This,IUnknown *pFocusObject); - void __RPC_STUB IResourceManager_ReleaseFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDistributorNotify_INTERFACE_DEFINED__ -#define __IDistributorNotify_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDistributorNotify; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDistributorNotify : public IUnknown { - public: - virtual HRESULT WINAPI Stop(void) = 0; - virtual HRESULT WINAPI Pause(void) = 0; - virtual HRESULT WINAPI Run(REFERENCE_TIME tStart) = 0; - virtual HRESULT WINAPI SetSyncSource(IReferenceClock *pClock) = 0; - virtual HRESULT WINAPI NotifyGraphChange(void) = 0; - }; -#else - typedef struct IDistributorNotifyVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDistributorNotify *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDistributorNotify *This); - ULONG (WINAPI *Release)(IDistributorNotify *This); - HRESULT (WINAPI *Stop)(IDistributorNotify *This); - HRESULT (WINAPI *Pause)(IDistributorNotify *This); - HRESULT (WINAPI *Run)(IDistributorNotify *This,REFERENCE_TIME tStart); - HRESULT (WINAPI *SetSyncSource)(IDistributorNotify *This,IReferenceClock *pClock); - HRESULT (WINAPI *NotifyGraphChange)(IDistributorNotify *This); - END_INTERFACE - } IDistributorNotifyVtbl; - struct IDistributorNotify { - CONST_VTBL struct IDistributorNotifyVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDistributorNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDistributorNotify_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDistributorNotify_Release(This) (This)->lpVtbl->Release(This) -#define IDistributorNotify_Stop(This) (This)->lpVtbl->Stop(This) -#define IDistributorNotify_Pause(This) (This)->lpVtbl->Pause(This) -#define IDistributorNotify_Run(This,tStart) (This)->lpVtbl->Run(This,tStart) -#define IDistributorNotify_SetSyncSource(This,pClock) (This)->lpVtbl->SetSyncSource(This,pClock) -#define IDistributorNotify_NotifyGraphChange(This) (This)->lpVtbl->NotifyGraphChange(This) -#endif -#endif - HRESULT WINAPI IDistributorNotify_Stop_Proxy(IDistributorNotify *This); - void __RPC_STUB IDistributorNotify_Stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDistributorNotify_Pause_Proxy(IDistributorNotify *This); - void __RPC_STUB IDistributorNotify_Pause_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDistributorNotify_Run_Proxy(IDistributorNotify *This,REFERENCE_TIME tStart); - void __RPC_STUB IDistributorNotify_Run_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDistributorNotify_SetSyncSource_Proxy(IDistributorNotify *This,IReferenceClock *pClock); - void __RPC_STUB IDistributorNotify_SetSyncSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDistributorNotify_NotifyGraphChange_Proxy(IDistributorNotify *This); - void __RPC_STUB IDistributorNotify_NotifyGraphChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0160_0001 { - AM_STREAM_INFO_START_DEFINED = 0x1,AM_STREAM_INFO_STOP_DEFINED = 0x2,AM_STREAM_INFO_DISCARDING = 0x4,AM_STREAM_INFO_STOP_SEND_EXTRA = 0x10 - } AM_STREAM_INFO_FLAGS; - - typedef struct __MIDL___MIDL_itf_strmif_0160_0002 { - REFERENCE_TIME tStart; - REFERENCE_TIME tStop; - DWORD dwStartCookie; - DWORD dwStopCookie; - DWORD dwFlags; - } AM_STREAM_INFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0160_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0160_v0_0_s_ifspec; -#ifndef __IAMStreamControl_INTERFACE_DEFINED__ -#define __IAMStreamControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMStreamControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMStreamControl : public IUnknown { - public: - virtual HRESULT WINAPI StartAt(const REFERENCE_TIME *ptStart,DWORD dwCookie) = 0; - virtual HRESULT WINAPI StopAt(const REFERENCE_TIME *ptStop,WINBOOL bSendExtra,DWORD dwCookie) = 0; - virtual HRESULT WINAPI GetInfo(AM_STREAM_INFO *pInfo) = 0; - }; -#else - typedef struct IAMStreamControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMStreamControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMStreamControl *This); - ULONG (WINAPI *Release)(IAMStreamControl *This); - HRESULT (WINAPI *StartAt)(IAMStreamControl *This,const REFERENCE_TIME *ptStart,DWORD dwCookie); - HRESULT (WINAPI *StopAt)(IAMStreamControl *This,const REFERENCE_TIME *ptStop,WINBOOL bSendExtra,DWORD dwCookie); - HRESULT (WINAPI *GetInfo)(IAMStreamControl *This,AM_STREAM_INFO *pInfo); - END_INTERFACE - } IAMStreamControlVtbl; - struct IAMStreamControl { - CONST_VTBL struct IAMStreamControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMStreamControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMStreamControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMStreamControl_Release(This) (This)->lpVtbl->Release(This) -#define IAMStreamControl_StartAt(This,ptStart,dwCookie) (This)->lpVtbl->StartAt(This,ptStart,dwCookie) -#define IAMStreamControl_StopAt(This,ptStop,bSendExtra,dwCookie) (This)->lpVtbl->StopAt(This,ptStop,bSendExtra,dwCookie) -#define IAMStreamControl_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo) -#endif -#endif - HRESULT WINAPI IAMStreamControl_StartAt_Proxy(IAMStreamControl *This,const REFERENCE_TIME *ptStart,DWORD dwCookie); - void __RPC_STUB IAMStreamControl_StartAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamControl_StopAt_Proxy(IAMStreamControl *This,const REFERENCE_TIME *ptStop,WINBOOL bSendExtra,DWORD dwCookie); - void __RPC_STUB IAMStreamControl_StopAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamControl_GetInfo_Proxy(IAMStreamControl *This,AM_STREAM_INFO *pInfo); - void __RPC_STUB IAMStreamControl_GetInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __ISeekingPassThru_INTERFACE_DEFINED__ -#define __ISeekingPassThru_INTERFACE_DEFINED__ - EXTERN_C const IID IID_ISeekingPassThru; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct ISeekingPassThru : public IUnknown { - public: - virtual HRESULT WINAPI Init(WINBOOL bSupportRendering,IPin *pPin) = 0; - }; -#else - typedef struct ISeekingPassThruVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(ISeekingPassThru *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(ISeekingPassThru *This); - ULONG (WINAPI *Release)(ISeekingPassThru *This); - HRESULT (WINAPI *Init)(ISeekingPassThru *This,WINBOOL bSupportRendering,IPin *pPin); - END_INTERFACE - } ISeekingPassThruVtbl; - struct ISeekingPassThru { - CONST_VTBL struct ISeekingPassThruVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define ISeekingPassThru_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define ISeekingPassThru_AddRef(This) (This)->lpVtbl->AddRef(This) -#define ISeekingPassThru_Release(This) (This)->lpVtbl->Release(This) -#define ISeekingPassThru_Init(This,bSupportRendering,pPin) (This)->lpVtbl->Init(This,bSupportRendering,pPin) -#endif -#endif - HRESULT WINAPI ISeekingPassThru_Init_Proxy(ISeekingPassThru *This,WINBOOL bSupportRendering,IPin *pPin); - void __RPC_STUB ISeekingPassThru_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMStreamConfig_INTERFACE_DEFINED__ -#define __IAMStreamConfig_INTERFACE_DEFINED__ - typedef struct _VIDEO_STREAM_CONFIG_CAPS { - GUID guid; - ULONG VideoStandard; - SIZE InputSize; - SIZE MinCroppingSize; - SIZE MaxCroppingSize; - int CropGranularityX; - int CropGranularityY; - int CropAlignX; - int CropAlignY; - SIZE MinOutputSize; - SIZE MaxOutputSize; - int OutputGranularityX; - int OutputGranularityY; - int StretchTapsX; - int StretchTapsY; - int ShrinkTapsX; - int ShrinkTapsY; - LONGLONG MinFrameInterval; - LONGLONG MaxFrameInterval; - LONG MinBitsPerSecond; - LONG MaxBitsPerSecond; - } VIDEO_STREAM_CONFIG_CAPS; - - typedef struct _AUDIO_STREAM_CONFIG_CAPS { - GUID guid; - ULONG MinimumChannels; - ULONG MaximumChannels; - ULONG ChannelsGranularity; - ULONG MinimumBitsPerSample; - ULONG MaximumBitsPerSample; - ULONG BitsPerSampleGranularity; - ULONG MinimumSampleFrequency; - ULONG MaximumSampleFrequency; - ULONG SampleFrequencyGranularity; - } AUDIO_STREAM_CONFIG_CAPS; - - EXTERN_C const IID IID_IAMStreamConfig; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMStreamConfig : public IUnknown { - public: - virtual HRESULT WINAPI SetFormat(AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI GetFormat(AM_MEDIA_TYPE **ppmt) = 0; - virtual HRESULT WINAPI GetNumberOfCapabilities(int *piCount,int *piSize) = 0; - virtual HRESULT WINAPI GetStreamCaps(int iIndex,AM_MEDIA_TYPE **ppmt,BYTE *pSCC) = 0; - }; -#else - typedef struct IAMStreamConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMStreamConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMStreamConfig *This); - ULONG (WINAPI *Release)(IAMStreamConfig *This); - HRESULT (WINAPI *SetFormat)(IAMStreamConfig *This,AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *GetFormat)(IAMStreamConfig *This,AM_MEDIA_TYPE **ppmt); - HRESULT (WINAPI *GetNumberOfCapabilities)(IAMStreamConfig *This,int *piCount,int *piSize); - HRESULT (WINAPI *GetStreamCaps)(IAMStreamConfig *This,int iIndex,AM_MEDIA_TYPE **ppmt,BYTE *pSCC); - END_INTERFACE - } IAMStreamConfigVtbl; - struct IAMStreamConfig { - CONST_VTBL struct IAMStreamConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMStreamConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMStreamConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMStreamConfig_Release(This) (This)->lpVtbl->Release(This) -#define IAMStreamConfig_SetFormat(This,pmt) (This)->lpVtbl->SetFormat(This,pmt) -#define IAMStreamConfig_GetFormat(This,ppmt) (This)->lpVtbl->GetFormat(This,ppmt) -#define IAMStreamConfig_GetNumberOfCapabilities(This,piCount,piSize) (This)->lpVtbl->GetNumberOfCapabilities(This,piCount,piSize) -#define IAMStreamConfig_GetStreamCaps(This,iIndex,ppmt,pSCC) (This)->lpVtbl->GetStreamCaps(This,iIndex,ppmt,pSCC) -#endif -#endif - HRESULT WINAPI IAMStreamConfig_SetFormat_Proxy(IAMStreamConfig *This,AM_MEDIA_TYPE *pmt); - void __RPC_STUB IAMStreamConfig_SetFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamConfig_GetFormat_Proxy(IAMStreamConfig *This,AM_MEDIA_TYPE **ppmt); - void __RPC_STUB IAMStreamConfig_GetFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamConfig_GetNumberOfCapabilities_Proxy(IAMStreamConfig *This,int *piCount,int *piSize); - void __RPC_STUB IAMStreamConfig_GetNumberOfCapabilities_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamConfig_GetStreamCaps_Proxy(IAMStreamConfig *This,int iIndex,AM_MEDIA_TYPE **ppmt,BYTE *pSCC); - void __RPC_STUB IAMStreamConfig_GetStreamCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IConfigInterleaving_INTERFACE_DEFINED__ -#define __IConfigInterleaving_INTERFACE_DEFINED__ - typedef enum __MIDL_IConfigInterleaving_0001 { - INTERLEAVE_NONE = 0, - INTERLEAVE_CAPTURE,INTERLEAVE_FULL,INTERLEAVE_NONE_BUFFERED - } InterleavingMode; - - EXTERN_C const IID IID_IConfigInterleaving; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IConfigInterleaving : public IUnknown { - public: - virtual HRESULT WINAPI put_Mode(InterleavingMode mode) = 0; - virtual HRESULT WINAPI get_Mode(InterleavingMode *pMode) = 0; - virtual HRESULT WINAPI put_Interleaving(const REFERENCE_TIME *prtInterleave,const REFERENCE_TIME *prtPreroll) = 0; - virtual HRESULT WINAPI get_Interleaving(REFERENCE_TIME *prtInterleave,REFERENCE_TIME *prtPreroll) = 0; - }; -#else - typedef struct IConfigInterleavingVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IConfigInterleaving *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IConfigInterleaving *This); - ULONG (WINAPI *Release)(IConfigInterleaving *This); - HRESULT (WINAPI *put_Mode)(IConfigInterleaving *This,InterleavingMode mode); - HRESULT (WINAPI *get_Mode)(IConfigInterleaving *This,InterleavingMode *pMode); - HRESULT (WINAPI *put_Interleaving)(IConfigInterleaving *This,const REFERENCE_TIME *prtInterleave,const REFERENCE_TIME *prtPreroll); - HRESULT (WINAPI *get_Interleaving)(IConfigInterleaving *This,REFERENCE_TIME *prtInterleave,REFERENCE_TIME *prtPreroll); - END_INTERFACE - } IConfigInterleavingVtbl; - struct IConfigInterleaving { - CONST_VTBL struct IConfigInterleavingVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IConfigInterleaving_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IConfigInterleaving_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IConfigInterleaving_Release(This) (This)->lpVtbl->Release(This) -#define IConfigInterleaving_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode) -#define IConfigInterleaving_get_Mode(This,pMode) (This)->lpVtbl->get_Mode(This,pMode) -#define IConfigInterleaving_put_Interleaving(This,prtInterleave,prtPreroll) (This)->lpVtbl->put_Interleaving(This,prtInterleave,prtPreroll) -#define IConfigInterleaving_get_Interleaving(This,prtInterleave,prtPreroll) (This)->lpVtbl->get_Interleaving(This,prtInterleave,prtPreroll) -#endif -#endif - HRESULT WINAPI IConfigInterleaving_put_Mode_Proxy(IConfigInterleaving *This,InterleavingMode mode); - void __RPC_STUB IConfigInterleaving_put_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigInterleaving_get_Mode_Proxy(IConfigInterleaving *This,InterleavingMode *pMode); - void __RPC_STUB IConfigInterleaving_get_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigInterleaving_put_Interleaving_Proxy(IConfigInterleaving *This,const REFERENCE_TIME *prtInterleave,const REFERENCE_TIME *prtPreroll); - void __RPC_STUB IConfigInterleaving_put_Interleaving_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigInterleaving_get_Interleaving_Proxy(IConfigInterleaving *This,REFERENCE_TIME *prtInterleave,REFERENCE_TIME *prtPreroll); - void __RPC_STUB IConfigInterleaving_get_Interleaving_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IConfigAviMux_INTERFACE_DEFINED__ -#define __IConfigAviMux_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IConfigAviMux; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IConfigAviMux : public IUnknown { - public: - virtual HRESULT WINAPI SetMasterStream(LONG iStream) = 0; - virtual HRESULT WINAPI GetMasterStream(LONG *pStream) = 0; - virtual HRESULT WINAPI SetOutputCompatibilityIndex(WINBOOL fOldIndex) = 0; - virtual HRESULT WINAPI GetOutputCompatibilityIndex(WINBOOL *pfOldIndex) = 0; - }; -#else - typedef struct IConfigAviMuxVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IConfigAviMux *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IConfigAviMux *This); - ULONG (WINAPI *Release)(IConfigAviMux *This); - HRESULT (WINAPI *SetMasterStream)(IConfigAviMux *This,LONG iStream); - HRESULT (WINAPI *GetMasterStream)(IConfigAviMux *This,LONG *pStream); - HRESULT (WINAPI *SetOutputCompatibilityIndex)(IConfigAviMux *This,WINBOOL fOldIndex); - HRESULT (WINAPI *GetOutputCompatibilityIndex)(IConfigAviMux *This,WINBOOL *pfOldIndex); - END_INTERFACE - } IConfigAviMuxVtbl; - struct IConfigAviMux { - CONST_VTBL struct IConfigAviMuxVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IConfigAviMux_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IConfigAviMux_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IConfigAviMux_Release(This) (This)->lpVtbl->Release(This) -#define IConfigAviMux_SetMasterStream(This,iStream) (This)->lpVtbl->SetMasterStream(This,iStream) -#define IConfigAviMux_GetMasterStream(This,pStream) (This)->lpVtbl->GetMasterStream(This,pStream) -#define IConfigAviMux_SetOutputCompatibilityIndex(This,fOldIndex) (This)->lpVtbl->SetOutputCompatibilityIndex(This,fOldIndex) -#define IConfigAviMux_GetOutputCompatibilityIndex(This,pfOldIndex) (This)->lpVtbl->GetOutputCompatibilityIndex(This,pfOldIndex) -#endif -#endif - HRESULT WINAPI IConfigAviMux_SetMasterStream_Proxy(IConfigAviMux *This,LONG iStream); - void __RPC_STUB IConfigAviMux_SetMasterStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigAviMux_GetMasterStream_Proxy(IConfigAviMux *This,LONG *pStream); - void __RPC_STUB IConfigAviMux_GetMasterStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigAviMux_SetOutputCompatibilityIndex_Proxy(IConfigAviMux *This,WINBOOL fOldIndex); - void __RPC_STUB IConfigAviMux_SetOutputCompatibilityIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IConfigAviMux_GetOutputCompatibilityIndex_Proxy(IConfigAviMux *This,WINBOOL *pfOldIndex); - void __RPC_STUB IConfigAviMux_GetOutputCompatibilityIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0167_0001 { - CompressionCaps_CanQuality = 0x1,CompressionCaps_CanCrunch = 0x2,CompressionCaps_CanKeyFrame = 0x4,CompressionCaps_CanBFrame = 0x8, - CompressionCaps_CanWindow = 0x10 - } CompressionCaps; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0167_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0167_v0_0_s_ifspec; -#ifndef __IAMVideoCompression_INTERFACE_DEFINED__ -#define __IAMVideoCompression_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVideoCompression; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVideoCompression : public IUnknown { - public: - virtual HRESULT WINAPI put_KeyFrameRate(long KeyFrameRate) = 0; - virtual HRESULT WINAPI get_KeyFrameRate(long *pKeyFrameRate) = 0; - virtual HRESULT WINAPI put_PFramesPerKeyFrame(long PFramesPerKeyFrame) = 0; - virtual HRESULT WINAPI get_PFramesPerKeyFrame(long *pPFramesPerKeyFrame) = 0; - virtual HRESULT WINAPI put_Quality(double Quality) = 0; - virtual HRESULT WINAPI get_Quality(double *pQuality) = 0; - virtual HRESULT WINAPI put_WindowSize(DWORDLONG WindowSize) = 0; - virtual HRESULT WINAPI get_WindowSize(DWORDLONG *pWindowSize) = 0; - virtual HRESULT WINAPI GetInfo(WCHAR *pszVersion,int *pcbVersion,LPWSTR pszDescription,int *pcbDescription,long *pDefaultKeyFrameRate,long *pDefaultPFramesPerKey,double *pDefaultQuality,long *pCapabilities) = 0; - virtual HRESULT WINAPI OverrideKeyFrame(long FrameNumber) = 0; - virtual HRESULT WINAPI OverrideFrameSize(long FrameNumber,long Size) = 0; - }; -#else - typedef struct IAMVideoCompressionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVideoCompression *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVideoCompression *This); - ULONG (WINAPI *Release)(IAMVideoCompression *This); - HRESULT (WINAPI *put_KeyFrameRate)(IAMVideoCompression *This,long KeyFrameRate); - HRESULT (WINAPI *get_KeyFrameRate)(IAMVideoCompression *This,long *pKeyFrameRate); - HRESULT (WINAPI *put_PFramesPerKeyFrame)(IAMVideoCompression *This,long PFramesPerKeyFrame); - HRESULT (WINAPI *get_PFramesPerKeyFrame)(IAMVideoCompression *This,long *pPFramesPerKeyFrame); - HRESULT (WINAPI *put_Quality)(IAMVideoCompression *This,double Quality); - HRESULT (WINAPI *get_Quality)(IAMVideoCompression *This,double *pQuality); - HRESULT (WINAPI *put_WindowSize)(IAMVideoCompression *This,DWORDLONG WindowSize); - HRESULT (WINAPI *get_WindowSize)(IAMVideoCompression *This,DWORDLONG *pWindowSize); - HRESULT (WINAPI *GetInfo)(IAMVideoCompression *This,WCHAR *pszVersion,int *pcbVersion,LPWSTR pszDescription,int *pcbDescription,long *pDefaultKeyFrameRate,long *pDefaultPFramesPerKey,double *pDefaultQuality,long *pCapabilities); - HRESULT (WINAPI *OverrideKeyFrame)(IAMVideoCompression *This,long FrameNumber); - HRESULT (WINAPI *OverrideFrameSize)(IAMVideoCompression *This,long FrameNumber,long Size); - END_INTERFACE - } IAMVideoCompressionVtbl; - struct IAMVideoCompression { - CONST_VTBL struct IAMVideoCompressionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVideoCompression_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVideoCompression_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVideoCompression_Release(This) (This)->lpVtbl->Release(This) -#define IAMVideoCompression_put_KeyFrameRate(This,KeyFrameRate) (This)->lpVtbl->put_KeyFrameRate(This,KeyFrameRate) -#define IAMVideoCompression_get_KeyFrameRate(This,pKeyFrameRate) (This)->lpVtbl->get_KeyFrameRate(This,pKeyFrameRate) -#define IAMVideoCompression_put_PFramesPerKeyFrame(This,PFramesPerKeyFrame) (This)->lpVtbl->put_PFramesPerKeyFrame(This,PFramesPerKeyFrame) -#define IAMVideoCompression_get_PFramesPerKeyFrame(This,pPFramesPerKeyFrame) (This)->lpVtbl->get_PFramesPerKeyFrame(This,pPFramesPerKeyFrame) -#define IAMVideoCompression_put_Quality(This,Quality) (This)->lpVtbl->put_Quality(This,Quality) -#define IAMVideoCompression_get_Quality(This,pQuality) (This)->lpVtbl->get_Quality(This,pQuality) -#define IAMVideoCompression_put_WindowSize(This,WindowSize) (This)->lpVtbl->put_WindowSize(This,WindowSize) -#define IAMVideoCompression_get_WindowSize(This,pWindowSize) (This)->lpVtbl->get_WindowSize(This,pWindowSize) -#define IAMVideoCompression_GetInfo(This,pszVersion,pcbVersion,pszDescription,pcbDescription,pDefaultKeyFrameRate,pDefaultPFramesPerKey,pDefaultQuality,pCapabilities) (This)->lpVtbl->GetInfo(This,pszVersion,pcbVersion,pszDescription,pcbDescription,pDefaultKeyFrameRate,pDefaultPFramesPerKey,pDefaultQuality,pCapabilities) -#define IAMVideoCompression_OverrideKeyFrame(This,FrameNumber) (This)->lpVtbl->OverrideKeyFrame(This,FrameNumber) -#define IAMVideoCompression_OverrideFrameSize(This,FrameNumber,Size) (This)->lpVtbl->OverrideFrameSize(This,FrameNumber,Size) -#endif -#endif - HRESULT WINAPI IAMVideoCompression_put_KeyFrameRate_Proxy(IAMVideoCompression *This,long KeyFrameRate); - void __RPC_STUB IAMVideoCompression_put_KeyFrameRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_get_KeyFrameRate_Proxy(IAMVideoCompression *This,long *pKeyFrameRate); - void __RPC_STUB IAMVideoCompression_get_KeyFrameRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_put_PFramesPerKeyFrame_Proxy(IAMVideoCompression *This,long PFramesPerKeyFrame); - void __RPC_STUB IAMVideoCompression_put_PFramesPerKeyFrame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_get_PFramesPerKeyFrame_Proxy(IAMVideoCompression *This,long *pPFramesPerKeyFrame); - void __RPC_STUB IAMVideoCompression_get_PFramesPerKeyFrame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_put_Quality_Proxy(IAMVideoCompression *This,double Quality); - void __RPC_STUB IAMVideoCompression_put_Quality_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_get_Quality_Proxy(IAMVideoCompression *This,double *pQuality); - void __RPC_STUB IAMVideoCompression_get_Quality_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_put_WindowSize_Proxy(IAMVideoCompression *This,DWORDLONG WindowSize); - void __RPC_STUB IAMVideoCompression_put_WindowSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_get_WindowSize_Proxy(IAMVideoCompression *This,DWORDLONG *pWindowSize); - void __RPC_STUB IAMVideoCompression_get_WindowSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_GetInfo_Proxy(IAMVideoCompression *This,WCHAR *pszVersion,int *pcbVersion,LPWSTR pszDescription,int *pcbDescription,long *pDefaultKeyFrameRate,long *pDefaultPFramesPerKey,double *pDefaultQuality,long *pCapabilities); - void __RPC_STUB IAMVideoCompression_GetInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_OverrideKeyFrame_Proxy(IAMVideoCompression *This,long FrameNumber); - void __RPC_STUB IAMVideoCompression_OverrideKeyFrame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoCompression_OverrideFrameSize_Proxy(IAMVideoCompression *This,long FrameNumber,long Size); - void __RPC_STUB IAMVideoCompression_OverrideFrameSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0168_0001 { - VfwCaptureDialog_Source = 0x1,VfwCaptureDialog_Format = 0x2,VfwCaptureDialog_Display = 0x4 - } VfwCaptureDialogs; - - typedef enum __MIDL___MIDL_itf_strmif_0168_0002 { - VfwCompressDialog_Config = 0x1,VfwCompressDialog_About = 0x2,VfwCompressDialog_QueryConfig = 0x4,VfwCompressDialog_QueryAbout = 0x8 - } VfwCompressDialogs; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0168_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0168_v0_0_s_ifspec; -#ifndef __IAMVfwCaptureDialogs_INTERFACE_DEFINED__ -#define __IAMVfwCaptureDialogs_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVfwCaptureDialogs; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVfwCaptureDialogs : public IUnknown { - public: - virtual HRESULT WINAPI HasDialog(int iDialog) = 0; - virtual HRESULT WINAPI ShowDialog(int iDialog,HWND hwnd) = 0; - virtual HRESULT WINAPI SendDriverMessage(int iDialog,int uMsg,long dw1,long dw2) = 0; - }; -#else - typedef struct IAMVfwCaptureDialogsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVfwCaptureDialogs *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVfwCaptureDialogs *This); - ULONG (WINAPI *Release)(IAMVfwCaptureDialogs *This); - HRESULT (WINAPI *HasDialog)(IAMVfwCaptureDialogs *This,int iDialog); - HRESULT (WINAPI *ShowDialog)(IAMVfwCaptureDialogs *This,int iDialog,HWND hwnd); - HRESULT (WINAPI *SendDriverMessage)(IAMVfwCaptureDialogs *This,int iDialog,int uMsg,long dw1,long dw2); - END_INTERFACE - } IAMVfwCaptureDialogsVtbl; - struct IAMVfwCaptureDialogs { - CONST_VTBL struct IAMVfwCaptureDialogsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVfwCaptureDialogs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVfwCaptureDialogs_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVfwCaptureDialogs_Release(This) (This)->lpVtbl->Release(This) -#define IAMVfwCaptureDialogs_HasDialog(This,iDialog) (This)->lpVtbl->HasDialog(This,iDialog) -#define IAMVfwCaptureDialogs_ShowDialog(This,iDialog,hwnd) (This)->lpVtbl->ShowDialog(This,iDialog,hwnd) -#define IAMVfwCaptureDialogs_SendDriverMessage(This,iDialog,uMsg,dw1,dw2) (This)->lpVtbl->SendDriverMessage(This,iDialog,uMsg,dw1,dw2) -#endif -#endif - HRESULT WINAPI IAMVfwCaptureDialogs_HasDialog_Proxy(IAMVfwCaptureDialogs *This,int iDialog); - void __RPC_STUB IAMVfwCaptureDialogs_HasDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVfwCaptureDialogs_ShowDialog_Proxy(IAMVfwCaptureDialogs *This,int iDialog,HWND hwnd); - void __RPC_STUB IAMVfwCaptureDialogs_ShowDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVfwCaptureDialogs_SendDriverMessage_Proxy(IAMVfwCaptureDialogs *This,int iDialog,int uMsg,long dw1,long dw2); - void __RPC_STUB IAMVfwCaptureDialogs_SendDriverMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMVfwCompressDialogs_INTERFACE_DEFINED__ -#define __IAMVfwCompressDialogs_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVfwCompressDialogs; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVfwCompressDialogs : public IUnknown { - public: - virtual HRESULT WINAPI ShowDialog(int iDialog,HWND hwnd) = 0; - virtual HRESULT WINAPI GetState(LPVOID pState,int *pcbState) = 0; - virtual HRESULT WINAPI SetState(LPVOID pState,int cbState) = 0; - virtual HRESULT WINAPI SendDriverMessage(int uMsg,long dw1,long dw2) = 0; - }; -#else - typedef struct IAMVfwCompressDialogsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVfwCompressDialogs *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVfwCompressDialogs *This); - ULONG (WINAPI *Release)(IAMVfwCompressDialogs *This); - HRESULT (WINAPI *ShowDialog)(IAMVfwCompressDialogs *This,int iDialog,HWND hwnd); - HRESULT (WINAPI *GetState)(IAMVfwCompressDialogs *This,LPVOID pState,int *pcbState); - HRESULT (WINAPI *SetState)(IAMVfwCompressDialogs *This,LPVOID pState,int cbState); - HRESULT (WINAPI *SendDriverMessage)(IAMVfwCompressDialogs *This,int uMsg,long dw1,long dw2); - END_INTERFACE - } IAMVfwCompressDialogsVtbl; - struct IAMVfwCompressDialogs { - CONST_VTBL struct IAMVfwCompressDialogsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVfwCompressDialogs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVfwCompressDialogs_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVfwCompressDialogs_Release(This) (This)->lpVtbl->Release(This) -#define IAMVfwCompressDialogs_ShowDialog(This,iDialog,hwnd) (This)->lpVtbl->ShowDialog(This,iDialog,hwnd) -#define IAMVfwCompressDialogs_GetState(This,pState,pcbState) (This)->lpVtbl->GetState(This,pState,pcbState) -#define IAMVfwCompressDialogs_SetState(This,pState,cbState) (This)->lpVtbl->SetState(This,pState,cbState) -#define IAMVfwCompressDialogs_SendDriverMessage(This,uMsg,dw1,dw2) (This)->lpVtbl->SendDriverMessage(This,uMsg,dw1,dw2) -#endif -#endif - HRESULT WINAPI IAMVfwCompressDialogs_ShowDialog_Proxy(IAMVfwCompressDialogs *This,int iDialog,HWND hwnd); - void __RPC_STUB IAMVfwCompressDialogs_ShowDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVfwCompressDialogs_GetState_Proxy(IAMVfwCompressDialogs *This,LPVOID pState,int *pcbState); - void __RPC_STUB IAMVfwCompressDialogs_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVfwCompressDialogs_SetState_Proxy(IAMVfwCompressDialogs *This,LPVOID pState,int cbState); - void __RPC_STUB IAMVfwCompressDialogs_SetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVfwCompressDialogs_SendDriverMessage_Proxy(IAMVfwCompressDialogs *This,int uMsg,long dw1,long dw2); - void __RPC_STUB IAMVfwCompressDialogs_SendDriverMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMDroppedFrames_INTERFACE_DEFINED__ -#define __IAMDroppedFrames_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMDroppedFrames; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMDroppedFrames : public IUnknown { - public: - virtual HRESULT WINAPI GetNumDropped(long *plDropped) = 0; - virtual HRESULT WINAPI GetNumNotDropped(long *plNotDropped) = 0; - virtual HRESULT WINAPI GetDroppedInfo(long lSize,long *plArray,long *plNumCopied) = 0; - virtual HRESULT WINAPI GetAverageFrameSize(long *plAverageSize) = 0; - }; -#else - typedef struct IAMDroppedFramesVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMDroppedFrames *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMDroppedFrames *This); - ULONG (WINAPI *Release)(IAMDroppedFrames *This); - HRESULT (WINAPI *GetNumDropped)(IAMDroppedFrames *This,long *plDropped); - HRESULT (WINAPI *GetNumNotDropped)(IAMDroppedFrames *This,long *plNotDropped); - HRESULT (WINAPI *GetDroppedInfo)(IAMDroppedFrames *This,long lSize,long *plArray,long *plNumCopied); - HRESULT (WINAPI *GetAverageFrameSize)(IAMDroppedFrames *This,long *plAverageSize); - END_INTERFACE - } IAMDroppedFramesVtbl; - struct IAMDroppedFrames { - CONST_VTBL struct IAMDroppedFramesVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMDroppedFrames_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMDroppedFrames_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMDroppedFrames_Release(This) (This)->lpVtbl->Release(This) -#define IAMDroppedFrames_GetNumDropped(This,plDropped) (This)->lpVtbl->GetNumDropped(This,plDropped) -#define IAMDroppedFrames_GetNumNotDropped(This,plNotDropped) (This)->lpVtbl->GetNumNotDropped(This,plNotDropped) -#define IAMDroppedFrames_GetDroppedInfo(This,lSize,plArray,plNumCopied) (This)->lpVtbl->GetDroppedInfo(This,lSize,plArray,plNumCopied) -#define IAMDroppedFrames_GetAverageFrameSize(This,plAverageSize) (This)->lpVtbl->GetAverageFrameSize(This,plAverageSize) -#endif -#endif - HRESULT WINAPI IAMDroppedFrames_GetNumDropped_Proxy(IAMDroppedFrames *This,long *plDropped); - void __RPC_STUB IAMDroppedFrames_GetNumDropped_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDroppedFrames_GetNumNotDropped_Proxy(IAMDroppedFrames *This,long *plNotDropped); - void __RPC_STUB IAMDroppedFrames_GetNumNotDropped_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDroppedFrames_GetDroppedInfo_Proxy(IAMDroppedFrames *This,long lSize,long *plArray,long *plNumCopied); - void __RPC_STUB IAMDroppedFrames_GetDroppedInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDroppedFrames_GetAverageFrameSize_Proxy(IAMDroppedFrames *This,long *plAverageSize); - void __RPC_STUB IAMDroppedFrames_GetAverageFrameSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#define AMF_AUTOMATICGAIN -1.0 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0171_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0171_v0_0_s_ifspec; -#ifndef __IAMAudioInputMixer_INTERFACE_DEFINED__ -#define __IAMAudioInputMixer_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMAudioInputMixer; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMAudioInputMixer : public IUnknown { - public: - virtual HRESULT WINAPI put_Enable(WINBOOL fEnable) = 0; - virtual HRESULT WINAPI get_Enable(WINBOOL *pfEnable) = 0; - virtual HRESULT WINAPI put_Mono(WINBOOL fMono) = 0; - virtual HRESULT WINAPI get_Mono(WINBOOL *pfMono) = 0; - virtual HRESULT WINAPI put_MixLevel(double Level) = 0; - virtual HRESULT WINAPI get_MixLevel(double *pLevel) = 0; - virtual HRESULT WINAPI put_Pan(double Pan) = 0; - virtual HRESULT WINAPI get_Pan(double *pPan) = 0; - virtual HRESULT WINAPI put_Loudness(WINBOOL fLoudness) = 0; - virtual HRESULT WINAPI get_Loudness(WINBOOL *pfLoudness) = 0; - virtual HRESULT WINAPI put_Treble(double Treble) = 0; - virtual HRESULT WINAPI get_Treble(double *pTreble) = 0; - virtual HRESULT WINAPI get_TrebleRange(double *pRange) = 0; - virtual HRESULT WINAPI put_Bass(double Bass) = 0; - virtual HRESULT WINAPI get_Bass(double *pBass) = 0; - virtual HRESULT WINAPI get_BassRange(double *pRange) = 0; - }; -#else - typedef struct IAMAudioInputMixerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMAudioInputMixer *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMAudioInputMixer *This); - ULONG (WINAPI *Release)(IAMAudioInputMixer *This); - HRESULT (WINAPI *put_Enable)(IAMAudioInputMixer *This,WINBOOL fEnable); - HRESULT (WINAPI *get_Enable)(IAMAudioInputMixer *This,WINBOOL *pfEnable); - HRESULT (WINAPI *put_Mono)(IAMAudioInputMixer *This,WINBOOL fMono); - HRESULT (WINAPI *get_Mono)(IAMAudioInputMixer *This,WINBOOL *pfMono); - HRESULT (WINAPI *put_MixLevel)(IAMAudioInputMixer *This,double Level); - HRESULT (WINAPI *get_MixLevel)(IAMAudioInputMixer *This,double *pLevel); - HRESULT (WINAPI *put_Pan)(IAMAudioInputMixer *This,double Pan); - HRESULT (WINAPI *get_Pan)(IAMAudioInputMixer *This,double *pPan); - HRESULT (WINAPI *put_Loudness)(IAMAudioInputMixer *This,WINBOOL fLoudness); - HRESULT (WINAPI *get_Loudness)(IAMAudioInputMixer *This,WINBOOL *pfLoudness); - HRESULT (WINAPI *put_Treble)(IAMAudioInputMixer *This,double Treble); - HRESULT (WINAPI *get_Treble)(IAMAudioInputMixer *This,double *pTreble); - HRESULT (WINAPI *get_TrebleRange)(IAMAudioInputMixer *This,double *pRange); - HRESULT (WINAPI *put_Bass)(IAMAudioInputMixer *This,double Bass); - HRESULT (WINAPI *get_Bass)(IAMAudioInputMixer *This,double *pBass); - HRESULT (WINAPI *get_BassRange)(IAMAudioInputMixer *This,double *pRange); - END_INTERFACE - } IAMAudioInputMixerVtbl; - struct IAMAudioInputMixer { - CONST_VTBL struct IAMAudioInputMixerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMAudioInputMixer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMAudioInputMixer_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMAudioInputMixer_Release(This) (This)->lpVtbl->Release(This) -#define IAMAudioInputMixer_put_Enable(This,fEnable) (This)->lpVtbl->put_Enable(This,fEnable) -#define IAMAudioInputMixer_get_Enable(This,pfEnable) (This)->lpVtbl->get_Enable(This,pfEnable) -#define IAMAudioInputMixer_put_Mono(This,fMono) (This)->lpVtbl->put_Mono(This,fMono) -#define IAMAudioInputMixer_get_Mono(This,pfMono) (This)->lpVtbl->get_Mono(This,pfMono) -#define IAMAudioInputMixer_put_MixLevel(This,Level) (This)->lpVtbl->put_MixLevel(This,Level) -#define IAMAudioInputMixer_get_MixLevel(This,pLevel) (This)->lpVtbl->get_MixLevel(This,pLevel) -#define IAMAudioInputMixer_put_Pan(This,Pan) (This)->lpVtbl->put_Pan(This,Pan) -#define IAMAudioInputMixer_get_Pan(This,pPan) (This)->lpVtbl->get_Pan(This,pPan) -#define IAMAudioInputMixer_put_Loudness(This,fLoudness) (This)->lpVtbl->put_Loudness(This,fLoudness) -#define IAMAudioInputMixer_get_Loudness(This,pfLoudness) (This)->lpVtbl->get_Loudness(This,pfLoudness) -#define IAMAudioInputMixer_put_Treble(This,Treble) (This)->lpVtbl->put_Treble(This,Treble) -#define IAMAudioInputMixer_get_Treble(This,pTreble) (This)->lpVtbl->get_Treble(This,pTreble) -#define IAMAudioInputMixer_get_TrebleRange(This,pRange) (This)->lpVtbl->get_TrebleRange(This,pRange) -#define IAMAudioInputMixer_put_Bass(This,Bass) (This)->lpVtbl->put_Bass(This,Bass) -#define IAMAudioInputMixer_get_Bass(This,pBass) (This)->lpVtbl->get_Bass(This,pBass) -#define IAMAudioInputMixer_get_BassRange(This,pRange) (This)->lpVtbl->get_BassRange(This,pRange) -#endif -#endif - HRESULT WINAPI IAMAudioInputMixer_put_Enable_Proxy(IAMAudioInputMixer *This,WINBOOL fEnable); - void __RPC_STUB IAMAudioInputMixer_put_Enable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Enable_Proxy(IAMAudioInputMixer *This,WINBOOL *pfEnable); - void __RPC_STUB IAMAudioInputMixer_get_Enable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_Mono_Proxy(IAMAudioInputMixer *This,WINBOOL fMono); - void __RPC_STUB IAMAudioInputMixer_put_Mono_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Mono_Proxy(IAMAudioInputMixer *This,WINBOOL *pfMono); - void __RPC_STUB IAMAudioInputMixer_get_Mono_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_MixLevel_Proxy(IAMAudioInputMixer *This,double Level); - void __RPC_STUB IAMAudioInputMixer_put_MixLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_MixLevel_Proxy(IAMAudioInputMixer *This,double *pLevel); - void __RPC_STUB IAMAudioInputMixer_get_MixLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_Pan_Proxy(IAMAudioInputMixer *This,double Pan); - void __RPC_STUB IAMAudioInputMixer_put_Pan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Pan_Proxy(IAMAudioInputMixer *This,double *pPan); - void __RPC_STUB IAMAudioInputMixer_get_Pan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_Loudness_Proxy(IAMAudioInputMixer *This,WINBOOL fLoudness); - void __RPC_STUB IAMAudioInputMixer_put_Loudness_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Loudness_Proxy(IAMAudioInputMixer *This,WINBOOL *pfLoudness); - void __RPC_STUB IAMAudioInputMixer_get_Loudness_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_Treble_Proxy(IAMAudioInputMixer *This,double Treble); - void __RPC_STUB IAMAudioInputMixer_put_Treble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Treble_Proxy(IAMAudioInputMixer *This,double *pTreble); - void __RPC_STUB IAMAudioInputMixer_get_Treble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_TrebleRange_Proxy(IAMAudioInputMixer *This,double *pRange); - void __RPC_STUB IAMAudioInputMixer_get_TrebleRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_put_Bass_Proxy(IAMAudioInputMixer *This,double Bass); - void __RPC_STUB IAMAudioInputMixer_put_Bass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_Bass_Proxy(IAMAudioInputMixer *This,double *pBass); - void __RPC_STUB IAMAudioInputMixer_get_Bass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAudioInputMixer_get_BassRange_Proxy(IAMAudioInputMixer *This,double *pRange); - void __RPC_STUB IAMAudioInputMixer_get_BassRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMBufferNegotiation_INTERFACE_DEFINED__ -#define __IAMBufferNegotiation_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMBufferNegotiation; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMBufferNegotiation : public IUnknown { - public: - virtual HRESULT WINAPI SuggestAllocatorProperties(const ALLOCATOR_PROPERTIES *pprop) = 0; - virtual HRESULT WINAPI GetAllocatorProperties(ALLOCATOR_PROPERTIES *pprop) = 0; - }; -#else - typedef struct IAMBufferNegotiationVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMBufferNegotiation *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMBufferNegotiation *This); - ULONG (WINAPI *Release)(IAMBufferNegotiation *This); - HRESULT (WINAPI *SuggestAllocatorProperties)(IAMBufferNegotiation *This,const ALLOCATOR_PROPERTIES *pprop); - HRESULT (WINAPI *GetAllocatorProperties)(IAMBufferNegotiation *This,ALLOCATOR_PROPERTIES *pprop); - END_INTERFACE - } IAMBufferNegotiationVtbl; - struct IAMBufferNegotiation { - CONST_VTBL struct IAMBufferNegotiationVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMBufferNegotiation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMBufferNegotiation_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMBufferNegotiation_Release(This) (This)->lpVtbl->Release(This) -#define IAMBufferNegotiation_SuggestAllocatorProperties(This,pprop) (This)->lpVtbl->SuggestAllocatorProperties(This,pprop) -#define IAMBufferNegotiation_GetAllocatorProperties(This,pprop) (This)->lpVtbl->GetAllocatorProperties(This,pprop) -#endif -#endif - HRESULT WINAPI IAMBufferNegotiation_SuggestAllocatorProperties_Proxy(IAMBufferNegotiation *This,const ALLOCATOR_PROPERTIES *pprop); - void __RPC_STUB IAMBufferNegotiation_SuggestAllocatorProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMBufferNegotiation_GetAllocatorProperties_Proxy(IAMBufferNegotiation *This,ALLOCATOR_PROPERTIES *pprop); - void __RPC_STUB IAMBufferNegotiation_GetAllocatorProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagAnalogVideoStandard { - AnalogVideo_None = 0,AnalogVideo_NTSC_M = 0x1,AnalogVideo_NTSC_M_J = 0x2,AnalogVideo_NTSC_433 = 0x4,AnalogVideo_PAL_B = 0x10, - AnalogVideo_PAL_D = 0x20,AnalogVideo_PAL_G = 0x40,AnalogVideo_PAL_H = 0x80,AnalogVideo_PAL_I = 0x100,AnalogVideo_PAL_M = 0x200, - AnalogVideo_PAL_N = 0x400,AnalogVideo_PAL_60 = 0x800,AnalogVideo_SECAM_B = 0x1000,AnalogVideo_SECAM_D = 0x2000,AnalogVideo_SECAM_G = 0x4000, - AnalogVideo_SECAM_H = 0x8000,AnalogVideo_SECAM_K = 0x10000,AnalogVideo_SECAM_K1 = 0x20000,AnalogVideo_SECAM_L = 0x40000,AnalogVideo_SECAM_L1 = 0x80000, - AnalogVideo_PAL_N_COMBO = 0x100000,AnalogVideoMask_MCE_NTSC = AnalogVideo_NTSC_M | AnalogVideo_NTSC_M_J | AnalogVideo_NTSC_433 | AnalogVideo_PAL_M | AnalogVideo_PAL_N | AnalogVideo_PAL_60 | AnalogVideo_PAL_N_COMBO,AnalogVideoMask_MCE_PAL = AnalogVideo_PAL_B | AnalogVideo_PAL_D | AnalogVideo_PAL_G | AnalogVideo_PAL_H | AnalogVideo_PAL_I,AnalogVideoMask_MCE_SECAM = AnalogVideo_SECAM_B | AnalogVideo_SECAM_D | AnalogVideo_SECAM_G | AnalogVideo_SECAM_H | AnalogVideo_SECAM_K | AnalogVideo_SECAM_K1 | AnalogVideo_SECAM_L | AnalogVideo_SECAM_L1 - } AnalogVideoStandard; - - typedef enum tagTunerInputType { - TunerInputCable = 0,TunerInputAntenna = TunerInputCable + 1 - } TunerInputType; - -#define AnalogVideo_NTSC_Mask 0x00000007 -#define AnalogVideo_PAL_Mask 0x00100FF0 -#define AnalogVideo_SECAM_Mask 0x000FF000 - - typedef enum __MIDL___MIDL_itf_strmif_0173_0001 { - VideoCopyProtectionMacrovisionBasic = 0,VideoCopyProtectionMacrovisionCBI = VideoCopyProtectionMacrovisionBasic + 1 - } VideoCopyProtectionType; - - typedef enum tagPhysicalConnectorType { - PhysConn_Video_Tuner = 1, - PhysConn_Video_Composite,PhysConn_Video_SVideo,PhysConn_Video_RGB, - PhysConn_Video_YRYBY,PhysConn_Video_SerialDigital,PhysConn_Video_ParallelDigital, - PhysConn_Video_SCSI,PhysConn_Video_AUX,PhysConn_Video_1394,PhysConn_Video_USB, - PhysConn_Video_VideoDecoder,PhysConn_Video_VideoEncoder,PhysConn_Video_SCART,PhysConn_Video_Black, - PhysConn_Audio_Tuner = 0x1000,PhysConn_Audio_Line = 0x1001,PhysConn_Audio_Mic = 0x1002, - PhysConn_Audio_AESDigital = 0x1003,PhysConn_Audio_SPDIFDigital = 0x1004, - PhysConn_Audio_SCSI = 0x1005,PhysConn_Audio_AUX = 0x1006,PhysConn_Audio_1394 = 0x1007, - PhysConn_Audio_USB = 0x1008,PhysConn_Audio_AudioDecoder = 0x1009 - } PhysicalConnectorType; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0173_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0173_v0_0_s_ifspec; -#ifndef __IAMAnalogVideoDecoder_INTERFACE_DEFINED__ -#define __IAMAnalogVideoDecoder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMAnalogVideoDecoder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMAnalogVideoDecoder : public IUnknown { - public: - virtual HRESULT WINAPI get_AvailableTVFormats(long *lAnalogVideoStandard) = 0; - virtual HRESULT WINAPI put_TVFormat(long lAnalogVideoStandard) = 0; - virtual HRESULT WINAPI get_TVFormat(long *plAnalogVideoStandard) = 0; - virtual HRESULT WINAPI get_HorizontalLocked(long *plLocked) = 0; - virtual HRESULT WINAPI put_VCRHorizontalLocking(long lVCRHorizontalLocking) = 0; - virtual HRESULT WINAPI get_VCRHorizontalLocking(long *plVCRHorizontalLocking) = 0; - virtual HRESULT WINAPI get_NumberOfLines(long *plNumberOfLines) = 0; - virtual HRESULT WINAPI put_OutputEnable(long lOutputEnable) = 0; - virtual HRESULT WINAPI get_OutputEnable(long *plOutputEnable) = 0; - }; -#else - typedef struct IAMAnalogVideoDecoderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMAnalogVideoDecoder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMAnalogVideoDecoder *This); - ULONG (WINAPI *Release)(IAMAnalogVideoDecoder *This); - HRESULT (WINAPI *get_AvailableTVFormats)(IAMAnalogVideoDecoder *This,long *lAnalogVideoStandard); - HRESULT (WINAPI *put_TVFormat)(IAMAnalogVideoDecoder *This,long lAnalogVideoStandard); - HRESULT (WINAPI *get_TVFormat)(IAMAnalogVideoDecoder *This,long *plAnalogVideoStandard); - HRESULT (WINAPI *get_HorizontalLocked)(IAMAnalogVideoDecoder *This,long *plLocked); - HRESULT (WINAPI *put_VCRHorizontalLocking)(IAMAnalogVideoDecoder *This,long lVCRHorizontalLocking); - HRESULT (WINAPI *get_VCRHorizontalLocking)(IAMAnalogVideoDecoder *This,long *plVCRHorizontalLocking); - HRESULT (WINAPI *get_NumberOfLines)(IAMAnalogVideoDecoder *This,long *plNumberOfLines); - HRESULT (WINAPI *put_OutputEnable)(IAMAnalogVideoDecoder *This,long lOutputEnable); - HRESULT (WINAPI *get_OutputEnable)(IAMAnalogVideoDecoder *This,long *plOutputEnable); - END_INTERFACE - } IAMAnalogVideoDecoderVtbl; - struct IAMAnalogVideoDecoder { - CONST_VTBL struct IAMAnalogVideoDecoderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMAnalogVideoDecoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMAnalogVideoDecoder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMAnalogVideoDecoder_Release(This) (This)->lpVtbl->Release(This) -#define IAMAnalogVideoDecoder_get_AvailableTVFormats(This,lAnalogVideoStandard) (This)->lpVtbl->get_AvailableTVFormats(This,lAnalogVideoStandard) -#define IAMAnalogVideoDecoder_put_TVFormat(This,lAnalogVideoStandard) (This)->lpVtbl->put_TVFormat(This,lAnalogVideoStandard) -#define IAMAnalogVideoDecoder_get_TVFormat(This,plAnalogVideoStandard) (This)->lpVtbl->get_TVFormat(This,plAnalogVideoStandard) -#define IAMAnalogVideoDecoder_get_HorizontalLocked(This,plLocked) (This)->lpVtbl->get_HorizontalLocked(This,plLocked) -#define IAMAnalogVideoDecoder_put_VCRHorizontalLocking(This,lVCRHorizontalLocking) (This)->lpVtbl->put_VCRHorizontalLocking(This,lVCRHorizontalLocking) -#define IAMAnalogVideoDecoder_get_VCRHorizontalLocking(This,plVCRHorizontalLocking) (This)->lpVtbl->get_VCRHorizontalLocking(This,plVCRHorizontalLocking) -#define IAMAnalogVideoDecoder_get_NumberOfLines(This,plNumberOfLines) (This)->lpVtbl->get_NumberOfLines(This,plNumberOfLines) -#define IAMAnalogVideoDecoder_put_OutputEnable(This,lOutputEnable) (This)->lpVtbl->put_OutputEnable(This,lOutputEnable) -#define IAMAnalogVideoDecoder_get_OutputEnable(This,plOutputEnable) (This)->lpVtbl->get_OutputEnable(This,plOutputEnable) -#endif -#endif - HRESULT WINAPI IAMAnalogVideoDecoder_get_AvailableTVFormats_Proxy(IAMAnalogVideoDecoder *This,long *lAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoDecoder_get_AvailableTVFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_put_TVFormat_Proxy(IAMAnalogVideoDecoder *This,long lAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoDecoder_put_TVFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_get_TVFormat_Proxy(IAMAnalogVideoDecoder *This,long *plAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoDecoder_get_TVFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_get_HorizontalLocked_Proxy(IAMAnalogVideoDecoder *This,long *plLocked); - void __RPC_STUB IAMAnalogVideoDecoder_get_HorizontalLocked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_put_VCRHorizontalLocking_Proxy(IAMAnalogVideoDecoder *This,long lVCRHorizontalLocking); - void __RPC_STUB IAMAnalogVideoDecoder_put_VCRHorizontalLocking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_get_VCRHorizontalLocking_Proxy(IAMAnalogVideoDecoder *This,long *plVCRHorizontalLocking); - void __RPC_STUB IAMAnalogVideoDecoder_get_VCRHorizontalLocking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_get_NumberOfLines_Proxy(IAMAnalogVideoDecoder *This,long *plNumberOfLines); - void __RPC_STUB IAMAnalogVideoDecoder_get_NumberOfLines_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_put_OutputEnable_Proxy(IAMAnalogVideoDecoder *This,long lOutputEnable); - void __RPC_STUB IAMAnalogVideoDecoder_put_OutputEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoDecoder_get_OutputEnable_Proxy(IAMAnalogVideoDecoder *This,long *plOutputEnable); - void __RPC_STUB IAMAnalogVideoDecoder_get_OutputEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagVideoProcAmpProperty { - VideoProcAmp_Brightness = 0, - VideoProcAmp_Contrast,VideoProcAmp_Hue,VideoProcAmp_Saturation,VideoProcAmp_Sharpness, - VideoProcAmp_Gamma,VideoProcAmp_ColorEnable,VideoProcAmp_WhiteBalance, - VideoProcAmp_BacklightCompensation,VideoProcAmp_Gain - } VideoProcAmpProperty; - - typedef enum tagVideoProcAmpFlags { - VideoProcAmp_Flags_Auto = 0x1,VideoProcAmp_Flags_Manual = 0x2 - } VideoProcAmpFlags; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0174_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0174_v0_0_s_ifspec; -#ifndef __IAMVideoProcAmp_INTERFACE_DEFINED__ -#define __IAMVideoProcAmp_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVideoProcAmp; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVideoProcAmp : public IUnknown { - public: - virtual HRESULT WINAPI GetRange(long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags) = 0; - virtual HRESULT WINAPI Set(long Property,long lValue,long Flags) = 0; - virtual HRESULT WINAPI Get(long Property,long *lValue,long *Flags) = 0; - }; -#else - typedef struct IAMVideoProcAmpVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVideoProcAmp *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVideoProcAmp *This); - ULONG (WINAPI *Release)(IAMVideoProcAmp *This); - HRESULT (WINAPI *GetRange)(IAMVideoProcAmp *This,long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags); - HRESULT (WINAPI *Set)(IAMVideoProcAmp *This,long Property,long lValue,long Flags); - HRESULT (WINAPI *Get)(IAMVideoProcAmp *This,long Property,long *lValue,long *Flags); - END_INTERFACE - } IAMVideoProcAmpVtbl; - struct IAMVideoProcAmp { - CONST_VTBL struct IAMVideoProcAmpVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVideoProcAmp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVideoProcAmp_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVideoProcAmp_Release(This) (This)->lpVtbl->Release(This) -#define IAMVideoProcAmp_GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags) (This)->lpVtbl->GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags) -#define IAMVideoProcAmp_Set(This,Property,lValue,Flags) (This)->lpVtbl->Set(This,Property,lValue,Flags) -#define IAMVideoProcAmp_Get(This,Property,lValue,Flags) (This)->lpVtbl->Get(This,Property,lValue,Flags) -#endif -#endif - HRESULT WINAPI IAMVideoProcAmp_GetRange_Proxy(IAMVideoProcAmp *This,long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags); - void __RPC_STUB IAMVideoProcAmp_GetRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoProcAmp_Set_Proxy(IAMVideoProcAmp *This,long Property,long lValue,long Flags); - void __RPC_STUB IAMVideoProcAmp_Set_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoProcAmp_Get_Proxy(IAMVideoProcAmp *This,long Property,long *lValue,long *Flags); - void __RPC_STUB IAMVideoProcAmp_Get_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagCameraControlProperty { - CameraControl_Pan = 0, - CameraControl_Tilt,CameraControl_Roll,CameraControl_Zoom,CameraControl_Exposure, - CameraControl_Iris,CameraControl_Focus - } CameraControlProperty; - - typedef enum tagCameraControlFlags { - CameraControl_Flags_Auto = 0x1,CameraControl_Flags_Manual = 0x2 - } CameraControlFlags; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0175_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0175_v0_0_s_ifspec; -#ifndef __IAMCameraControl_INTERFACE_DEFINED__ -#define __IAMCameraControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMCameraControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMCameraControl : public IUnknown { - public: - virtual HRESULT WINAPI GetRange(long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags) = 0; - virtual HRESULT WINAPI Set(long Property,long lValue,long Flags) = 0; - virtual HRESULT WINAPI Get(long Property,long *lValue,long *Flags) = 0; - }; -#else - typedef struct IAMCameraControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMCameraControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMCameraControl *This); - ULONG (WINAPI *Release)(IAMCameraControl *This); - HRESULT (WINAPI *GetRange)(IAMCameraControl *This,long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags); - HRESULT (WINAPI *Set)(IAMCameraControl *This,long Property,long lValue,long Flags); - HRESULT (WINAPI *Get)(IAMCameraControl *This,long Property,long *lValue,long *Flags); - END_INTERFACE - } IAMCameraControlVtbl; - struct IAMCameraControl { - CONST_VTBL struct IAMCameraControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMCameraControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMCameraControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMCameraControl_Release(This) (This)->lpVtbl->Release(This) -#define IAMCameraControl_GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags) (This)->lpVtbl->GetRange(This,Property,pMin,pMax,pSteppingDelta,pDefault,pCapsFlags) -#define IAMCameraControl_Set(This,Property,lValue,Flags) (This)->lpVtbl->Set(This,Property,lValue,Flags) -#define IAMCameraControl_Get(This,Property,lValue,Flags) (This)->lpVtbl->Get(This,Property,lValue,Flags) -#endif -#endif - HRESULT WINAPI IAMCameraControl_GetRange_Proxy(IAMCameraControl *This,long Property,long *pMin,long *pMax,long *pSteppingDelta,long *pDefault,long *pCapsFlags); - void __RPC_STUB IAMCameraControl_GetRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCameraControl_Set_Proxy(IAMCameraControl *This,long Property,long lValue,long Flags); - void __RPC_STUB IAMCameraControl_Set_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCameraControl_Get_Proxy(IAMCameraControl *This,long Property,long *lValue,long *Flags); - void __RPC_STUB IAMCameraControl_Get_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagVideoControlFlags { - VideoControlFlag_FlipHorizontal = 0x1,VideoControlFlag_FlipVertical = 0x2,VideoControlFlag_ExternalTriggerEnable = 0x4,VideoControlFlag_Trigger = 0x8 - } VideoControlFlags; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0176_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0176_v0_0_s_ifspec; -#ifndef __IAMVideoControl_INTERFACE_DEFINED__ -#define __IAMVideoControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVideoControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVideoControl : public IUnknown { - public: - virtual HRESULT WINAPI GetCaps(IPin *pPin,long *pCapsFlags) = 0; - virtual HRESULT WINAPI SetMode(IPin *pPin,long Mode) = 0; - virtual HRESULT WINAPI GetMode(IPin *pPin,long *Mode) = 0; - virtual HRESULT WINAPI GetCurrentActualFrameRate(IPin *pPin,LONGLONG *ActualFrameRate) = 0; - virtual HRESULT WINAPI GetMaxAvailableFrameRate(IPin *pPin,long iIndex,SIZE Dimensions,LONGLONG *MaxAvailableFrameRate) = 0; - virtual HRESULT WINAPI GetFrameRateList(IPin *pPin,long iIndex,SIZE Dimensions,long *ListSize,LONGLONG **FrameRates) = 0; - }; -#else - typedef struct IAMVideoControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVideoControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVideoControl *This); - ULONG (WINAPI *Release)(IAMVideoControl *This); - HRESULT (WINAPI *GetCaps)(IAMVideoControl *This,IPin *pPin,long *pCapsFlags); - HRESULT (WINAPI *SetMode)(IAMVideoControl *This,IPin *pPin,long Mode); - HRESULT (WINAPI *GetMode)(IAMVideoControl *This,IPin *pPin,long *Mode); - HRESULT (WINAPI *GetCurrentActualFrameRate)(IAMVideoControl *This,IPin *pPin,LONGLONG *ActualFrameRate); - HRESULT (WINAPI *GetMaxAvailableFrameRate)(IAMVideoControl *This,IPin *pPin,long iIndex,SIZE Dimensions,LONGLONG *MaxAvailableFrameRate); - HRESULT (WINAPI *GetFrameRateList)(IAMVideoControl *This,IPin *pPin,long iIndex,SIZE Dimensions,long *ListSize,LONGLONG **FrameRates); - END_INTERFACE - } IAMVideoControlVtbl; - struct IAMVideoControl { - CONST_VTBL struct IAMVideoControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVideoControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVideoControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVideoControl_Release(This) (This)->lpVtbl->Release(This) -#define IAMVideoControl_GetCaps(This,pPin,pCapsFlags) (This)->lpVtbl->GetCaps(This,pPin,pCapsFlags) -#define IAMVideoControl_SetMode(This,pPin,Mode) (This)->lpVtbl->SetMode(This,pPin,Mode) -#define IAMVideoControl_GetMode(This,pPin,Mode) (This)->lpVtbl->GetMode(This,pPin,Mode) -#define IAMVideoControl_GetCurrentActualFrameRate(This,pPin,ActualFrameRate) (This)->lpVtbl->GetCurrentActualFrameRate(This,pPin,ActualFrameRate) -#define IAMVideoControl_GetMaxAvailableFrameRate(This,pPin,iIndex,Dimensions,MaxAvailableFrameRate) (This)->lpVtbl->GetMaxAvailableFrameRate(This,pPin,iIndex,Dimensions,MaxAvailableFrameRate) -#define IAMVideoControl_GetFrameRateList(This,pPin,iIndex,Dimensions,ListSize,FrameRates) (This)->lpVtbl->GetFrameRateList(This,pPin,iIndex,Dimensions,ListSize,FrameRates) -#endif -#endif - HRESULT WINAPI IAMVideoControl_GetCaps_Proxy(IAMVideoControl *This,IPin *pPin,long *pCapsFlags); - void __RPC_STUB IAMVideoControl_GetCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoControl_SetMode_Proxy(IAMVideoControl *This,IPin *pPin,long Mode); - void __RPC_STUB IAMVideoControl_SetMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoControl_GetMode_Proxy(IAMVideoControl *This,IPin *pPin,long *Mode); - void __RPC_STUB IAMVideoControl_GetMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoControl_GetCurrentActualFrameRate_Proxy(IAMVideoControl *This,IPin *pPin,LONGLONG *ActualFrameRate); - void __RPC_STUB IAMVideoControl_GetCurrentActualFrameRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoControl_GetMaxAvailableFrameRate_Proxy(IAMVideoControl *This,IPin *pPin,long iIndex,SIZE Dimensions,LONGLONG *MaxAvailableFrameRate); - void __RPC_STUB IAMVideoControl_GetMaxAvailableFrameRate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoControl_GetFrameRateList_Proxy(IAMVideoControl *This,IPin *pPin,long iIndex,SIZE Dimensions,long *ListSize,LONGLONG **FrameRates); - void __RPC_STUB IAMVideoControl_GetFrameRateList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMCrossbar_INTERFACE_DEFINED__ -#define __IAMCrossbar_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMCrossbar; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMCrossbar : public IUnknown { - public: - virtual HRESULT WINAPI get_PinCounts(long *OutputPinCount,long *InputPinCount) = 0; - virtual HRESULT WINAPI CanRoute(long OutputPinIndex,long InputPinIndex) = 0; - virtual HRESULT WINAPI Route(long OutputPinIndex,long InputPinIndex) = 0; - virtual HRESULT WINAPI get_IsRoutedTo(long OutputPinIndex,long *InputPinIndex) = 0; - virtual HRESULT WINAPI get_CrossbarPinInfo(WINBOOL IsInputPin,long PinIndex,long *PinIndexRelated,long *PhysicalType) = 0; - }; -#else - typedef struct IAMCrossbarVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMCrossbar *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMCrossbar *This); - ULONG (WINAPI *Release)(IAMCrossbar *This); - HRESULT (WINAPI *get_PinCounts)(IAMCrossbar *This,long *OutputPinCount,long *InputPinCount); - HRESULT (WINAPI *CanRoute)(IAMCrossbar *This,long OutputPinIndex,long InputPinIndex); - HRESULT (WINAPI *Route)(IAMCrossbar *This,long OutputPinIndex,long InputPinIndex); - HRESULT (WINAPI *get_IsRoutedTo)(IAMCrossbar *This,long OutputPinIndex,long *InputPinIndex); - HRESULT (WINAPI *get_CrossbarPinInfo)(IAMCrossbar *This,WINBOOL IsInputPin,long PinIndex,long *PinIndexRelated,long *PhysicalType); - END_INTERFACE - } IAMCrossbarVtbl; - struct IAMCrossbar { - CONST_VTBL struct IAMCrossbarVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMCrossbar_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMCrossbar_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMCrossbar_Release(This) (This)->lpVtbl->Release(This) -#define IAMCrossbar_get_PinCounts(This,OutputPinCount,InputPinCount) (This)->lpVtbl->get_PinCounts(This,OutputPinCount,InputPinCount) -#define IAMCrossbar_CanRoute(This,OutputPinIndex,InputPinIndex) (This)->lpVtbl->CanRoute(This,OutputPinIndex,InputPinIndex) -#define IAMCrossbar_Route(This,OutputPinIndex,InputPinIndex) (This)->lpVtbl->Route(This,OutputPinIndex,InputPinIndex) -#define IAMCrossbar_get_IsRoutedTo(This,OutputPinIndex,InputPinIndex) (This)->lpVtbl->get_IsRoutedTo(This,OutputPinIndex,InputPinIndex) -#define IAMCrossbar_get_CrossbarPinInfo(This,IsInputPin,PinIndex,PinIndexRelated,PhysicalType) (This)->lpVtbl->get_CrossbarPinInfo(This,IsInputPin,PinIndex,PinIndexRelated,PhysicalType) -#endif -#endif - HRESULT WINAPI IAMCrossbar_get_PinCounts_Proxy(IAMCrossbar *This,long *OutputPinCount,long *InputPinCount); - void __RPC_STUB IAMCrossbar_get_PinCounts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCrossbar_CanRoute_Proxy(IAMCrossbar *This,long OutputPinIndex,long InputPinIndex); - void __RPC_STUB IAMCrossbar_CanRoute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCrossbar_Route_Proxy(IAMCrossbar *This,long OutputPinIndex,long InputPinIndex); - void __RPC_STUB IAMCrossbar_Route_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCrossbar_get_IsRoutedTo_Proxy(IAMCrossbar *This,long OutputPinIndex,long *InputPinIndex); - void __RPC_STUB IAMCrossbar_get_IsRoutedTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCrossbar_get_CrossbarPinInfo_Proxy(IAMCrossbar *This,WINBOOL IsInputPin,long PinIndex,long *PinIndexRelated,long *PhysicalType); - void __RPC_STUB IAMCrossbar_get_CrossbarPinInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagAMTunerSubChannel { - AMTUNER_SUBCHAN_NO_TUNE = -2,AMTUNER_SUBCHAN_DEFAULT = -1 - } AMTunerSubChannel; - - typedef enum tagAMTunerSignalStrength { - AMTUNER_HASNOSIGNALSTRENGTH = -1,AMTUNER_NOSIGNAL = 0,AMTUNER_SIGNALPRESENT = 1 - } AMTunerSignalStrength; - - typedef enum tagAMTunerModeType { - AMTUNER_MODE_DEFAULT = 0,AMTUNER_MODE_TV = 0x1,AMTUNER_MODE_FM_RADIO = 0x2,AMTUNER_MODE_AM_RADIO = 0x4,AMTUNER_MODE_DSS = 0x8 - } AMTunerModeType; - - typedef enum tagAMTunerEventType { - AMTUNER_EVENT_CHANGED = 0x1 - } AMTunerEventType; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0178_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0178_v0_0_s_ifspec; -#ifndef __IAMTuner_INTERFACE_DEFINED__ -#define __IAMTuner_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTuner; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTuner : public IUnknown { - public: - virtual HRESULT WINAPI put_Channel(long lChannel,long lVideoSubChannel,long lAudioSubChannel) = 0; - virtual HRESULT WINAPI get_Channel(long *plChannel,long *plVideoSubChannel,long *plAudioSubChannel) = 0; - virtual HRESULT WINAPI ChannelMinMax(long *lChannelMin,long *lChannelMax) = 0; - virtual HRESULT WINAPI put_CountryCode(long lCountryCode) = 0; - virtual HRESULT WINAPI get_CountryCode(long *plCountryCode) = 0; - virtual HRESULT WINAPI put_TuningSpace(long lTuningSpace) = 0; - virtual HRESULT WINAPI get_TuningSpace(long *plTuningSpace) = 0; - virtual HRESULT WINAPI Logon(HANDLE hCurrentUser) = 0; - virtual HRESULT WINAPI Logout(void) = 0; - virtual HRESULT WINAPI SignalPresent(long *plSignalStrength) = 0; - virtual HRESULT WINAPI put_Mode(AMTunerModeType lMode) = 0; - virtual HRESULT WINAPI get_Mode(AMTunerModeType *plMode) = 0; - virtual HRESULT WINAPI GetAvailableModes(long *plModes) = 0; - virtual HRESULT WINAPI RegisterNotificationCallBack(IAMTunerNotification *pNotify,long lEvents) = 0; - virtual HRESULT WINAPI UnRegisterNotificationCallBack(IAMTunerNotification *pNotify) = 0; - }; -#else - typedef struct IAMTunerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTuner *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTuner *This); - ULONG (WINAPI *Release)(IAMTuner *This); - HRESULT (WINAPI *put_Channel)(IAMTuner *This,long lChannel,long lVideoSubChannel,long lAudioSubChannel); - HRESULT (WINAPI *get_Channel)(IAMTuner *This,long *plChannel,long *plVideoSubChannel,long *plAudioSubChannel); - HRESULT (WINAPI *ChannelMinMax)(IAMTuner *This,long *lChannelMin,long *lChannelMax); - HRESULT (WINAPI *put_CountryCode)(IAMTuner *This,long lCountryCode); - HRESULT (WINAPI *get_CountryCode)(IAMTuner *This,long *plCountryCode); - HRESULT (WINAPI *put_TuningSpace)(IAMTuner *This,long lTuningSpace); - HRESULT (WINAPI *get_TuningSpace)(IAMTuner *This,long *plTuningSpace); - HRESULT (WINAPI *Logon)(IAMTuner *This,HANDLE hCurrentUser); - HRESULT (WINAPI *Logout)(IAMTuner *This); - HRESULT (WINAPI *SignalPresent)(IAMTuner *This,long *plSignalStrength); - HRESULT (WINAPI *put_Mode)(IAMTuner *This,AMTunerModeType lMode); - HRESULT (WINAPI *get_Mode)(IAMTuner *This,AMTunerModeType *plMode); - HRESULT (WINAPI *GetAvailableModes)(IAMTuner *This,long *plModes); - HRESULT (WINAPI *RegisterNotificationCallBack)(IAMTuner *This,IAMTunerNotification *pNotify,long lEvents); - HRESULT (WINAPI *UnRegisterNotificationCallBack)(IAMTuner *This,IAMTunerNotification *pNotify); - END_INTERFACE - } IAMTunerVtbl; - struct IAMTuner { - CONST_VTBL struct IAMTunerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTuner_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTuner_Release(This) (This)->lpVtbl->Release(This) -#define IAMTuner_put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) (This)->lpVtbl->put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) -#define IAMTuner_get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) (This)->lpVtbl->get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) -#define IAMTuner_ChannelMinMax(This,lChannelMin,lChannelMax) (This)->lpVtbl->ChannelMinMax(This,lChannelMin,lChannelMax) -#define IAMTuner_put_CountryCode(This,lCountryCode) (This)->lpVtbl->put_CountryCode(This,lCountryCode) -#define IAMTuner_get_CountryCode(This,plCountryCode) (This)->lpVtbl->get_CountryCode(This,plCountryCode) -#define IAMTuner_put_TuningSpace(This,lTuningSpace) (This)->lpVtbl->put_TuningSpace(This,lTuningSpace) -#define IAMTuner_get_TuningSpace(This,plTuningSpace) (This)->lpVtbl->get_TuningSpace(This,plTuningSpace) -#define IAMTuner_Logon(This,hCurrentUser) (This)->lpVtbl->Logon(This,hCurrentUser) -#define IAMTuner_Logout(This) (This)->lpVtbl->Logout(This) -#define IAMTuner_SignalPresent(This,plSignalStrength) (This)->lpVtbl->SignalPresent(This,plSignalStrength) -#define IAMTuner_put_Mode(This,lMode) (This)->lpVtbl->put_Mode(This,lMode) -#define IAMTuner_get_Mode(This,plMode) (This)->lpVtbl->get_Mode(This,plMode) -#define IAMTuner_GetAvailableModes(This,plModes) (This)->lpVtbl->GetAvailableModes(This,plModes) -#define IAMTuner_RegisterNotificationCallBack(This,pNotify,lEvents) (This)->lpVtbl->RegisterNotificationCallBack(This,pNotify,lEvents) -#define IAMTuner_UnRegisterNotificationCallBack(This,pNotify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,pNotify) -#endif -#endif - HRESULT WINAPI IAMTuner_put_Channel_Proxy(IAMTuner *This,long lChannel,long lVideoSubChannel,long lAudioSubChannel); - void __RPC_STUB IAMTuner_put_Channel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_get_Channel_Proxy(IAMTuner *This,long *plChannel,long *plVideoSubChannel,long *plAudioSubChannel); - void __RPC_STUB IAMTuner_get_Channel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_ChannelMinMax_Proxy(IAMTuner *This,long *lChannelMin,long *lChannelMax); - void __RPC_STUB IAMTuner_ChannelMinMax_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_put_CountryCode_Proxy(IAMTuner *This,long lCountryCode); - void __RPC_STUB IAMTuner_put_CountryCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_get_CountryCode_Proxy(IAMTuner *This,long *plCountryCode); - void __RPC_STUB IAMTuner_get_CountryCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_put_TuningSpace_Proxy(IAMTuner *This,long lTuningSpace); - void __RPC_STUB IAMTuner_put_TuningSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_get_TuningSpace_Proxy(IAMTuner *This,long *plTuningSpace); - void __RPC_STUB IAMTuner_get_TuningSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_Logon_Proxy(IAMTuner *This,HANDLE hCurrentUser); - void __RPC_STUB IAMTuner_Logon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_Logout_Proxy(IAMTuner *This); - void __RPC_STUB IAMTuner_Logout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_SignalPresent_Proxy(IAMTuner *This,long *plSignalStrength); - void __RPC_STUB IAMTuner_SignalPresent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_put_Mode_Proxy(IAMTuner *This,AMTunerModeType lMode); - void __RPC_STUB IAMTuner_put_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_get_Mode_Proxy(IAMTuner *This,AMTunerModeType *plMode); - void __RPC_STUB IAMTuner_get_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_GetAvailableModes_Proxy(IAMTuner *This,long *plModes); - void __RPC_STUB IAMTuner_GetAvailableModes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_RegisterNotificationCallBack_Proxy(IAMTuner *This,IAMTunerNotification *pNotify,long lEvents); - void __RPC_STUB IAMTuner_RegisterNotificationCallBack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTuner_UnRegisterNotificationCallBack_Proxy(IAMTuner *This,IAMTunerNotification *pNotify); - void __RPC_STUB IAMTuner_UnRegisterNotificationCallBack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMTunerNotification_INTERFACE_DEFINED__ -#define __IAMTunerNotification_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTunerNotification; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTunerNotification : public IUnknown { - public: - virtual HRESULT WINAPI OnEvent(AMTunerEventType Event) = 0; - }; -#else - typedef struct IAMTunerNotificationVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTunerNotification *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTunerNotification *This); - ULONG (WINAPI *Release)(IAMTunerNotification *This); - HRESULT (WINAPI *OnEvent)(IAMTunerNotification *This,AMTunerEventType Event); - END_INTERFACE - } IAMTunerNotificationVtbl; - struct IAMTunerNotification { - CONST_VTBL struct IAMTunerNotificationVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTunerNotification_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTunerNotification_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTunerNotification_Release(This) (This)->lpVtbl->Release(This) -#define IAMTunerNotification_OnEvent(This,Event) (This)->lpVtbl->OnEvent(This,Event) -#endif -#endif - HRESULT WINAPI IAMTunerNotification_OnEvent_Proxy(IAMTunerNotification *This,AMTunerEventType Event); - void __RPC_STUB IAMTunerNotification_OnEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMTVTuner_INTERFACE_DEFINED__ -#define __IAMTVTuner_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTVTuner; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTVTuner : public IAMTuner { - public: - virtual HRESULT WINAPI get_AvailableTVFormats(long *lAnalogVideoStandard) = 0; - virtual HRESULT WINAPI get_TVFormat(long *plAnalogVideoStandard) = 0; - virtual HRESULT WINAPI AutoTune(long lChannel,long *plFoundSignal) = 0; - virtual HRESULT WINAPI StoreAutoTune(void) = 0; - virtual HRESULT WINAPI get_NumInputConnections(long *plNumInputConnections) = 0; - virtual HRESULT WINAPI put_InputType(long lIndex,TunerInputType InputType) = 0; - virtual HRESULT WINAPI get_InputType(long lIndex,TunerInputType *pInputType) = 0; - virtual HRESULT WINAPI put_ConnectInput(long lIndex) = 0; - virtual HRESULT WINAPI get_ConnectInput(long *plIndex) = 0; - virtual HRESULT WINAPI get_VideoFrequency(long *lFreq) = 0; - virtual HRESULT WINAPI get_AudioFrequency(long *lFreq) = 0; - }; -#else - typedef struct IAMTVTunerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTVTuner *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTVTuner *This); - ULONG (WINAPI *Release)(IAMTVTuner *This); - HRESULT (WINAPI *put_Channel)(IAMTVTuner *This,long lChannel,long lVideoSubChannel,long lAudioSubChannel); - HRESULT (WINAPI *get_Channel)(IAMTVTuner *This,long *plChannel,long *plVideoSubChannel,long *plAudioSubChannel); - HRESULT (WINAPI *ChannelMinMax)(IAMTVTuner *This,long *lChannelMin,long *lChannelMax); - HRESULT (WINAPI *put_CountryCode)(IAMTVTuner *This,long lCountryCode); - HRESULT (WINAPI *get_CountryCode)(IAMTVTuner *This,long *plCountryCode); - HRESULT (WINAPI *put_TuningSpace)(IAMTVTuner *This,long lTuningSpace); - HRESULT (WINAPI *get_TuningSpace)(IAMTVTuner *This,long *plTuningSpace); - HRESULT (WINAPI *Logon)(IAMTVTuner *This,HANDLE hCurrentUser); - HRESULT (WINAPI *Logout)(IAMTVTuner *This); - HRESULT (WINAPI *SignalPresent)(IAMTVTuner *This,long *plSignalStrength); - HRESULT (WINAPI *put_Mode)(IAMTVTuner *This,AMTunerModeType lMode); - HRESULT (WINAPI *get_Mode)(IAMTVTuner *This,AMTunerModeType *plMode); - HRESULT (WINAPI *GetAvailableModes)(IAMTVTuner *This,long *plModes); - HRESULT (WINAPI *RegisterNotificationCallBack)(IAMTVTuner *This,IAMTunerNotification *pNotify,long lEvents); - HRESULT (WINAPI *UnRegisterNotificationCallBack)(IAMTVTuner *This,IAMTunerNotification *pNotify); - HRESULT (WINAPI *get_AvailableTVFormats)(IAMTVTuner *This,long *lAnalogVideoStandard); - HRESULT (WINAPI *get_TVFormat)(IAMTVTuner *This,long *plAnalogVideoStandard); - HRESULT (WINAPI *AutoTune)(IAMTVTuner *This,long lChannel,long *plFoundSignal); - HRESULT (WINAPI *StoreAutoTune)(IAMTVTuner *This); - HRESULT (WINAPI *get_NumInputConnections)(IAMTVTuner *This,long *plNumInputConnections); - HRESULT (WINAPI *put_InputType)(IAMTVTuner *This,long lIndex,TunerInputType InputType); - HRESULT (WINAPI *get_InputType)(IAMTVTuner *This,long lIndex,TunerInputType *pInputType); - HRESULT (WINAPI *put_ConnectInput)(IAMTVTuner *This,long lIndex); - HRESULT (WINAPI *get_ConnectInput)(IAMTVTuner *This,long *plIndex); - HRESULT (WINAPI *get_VideoFrequency)(IAMTVTuner *This,long *lFreq); - HRESULT (WINAPI *get_AudioFrequency)(IAMTVTuner *This,long *lFreq); - END_INTERFACE - } IAMTVTunerVtbl; - struct IAMTVTuner { - CONST_VTBL struct IAMTVTunerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTVTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTVTuner_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTVTuner_Release(This) (This)->lpVtbl->Release(This) -#define IAMTVTuner_put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) (This)->lpVtbl->put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) -#define IAMTVTuner_get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) (This)->lpVtbl->get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) -#define IAMTVTuner_ChannelMinMax(This,lChannelMin,lChannelMax) (This)->lpVtbl->ChannelMinMax(This,lChannelMin,lChannelMax) -#define IAMTVTuner_put_CountryCode(This,lCountryCode) (This)->lpVtbl->put_CountryCode(This,lCountryCode) -#define IAMTVTuner_get_CountryCode(This,plCountryCode) (This)->lpVtbl->get_CountryCode(This,plCountryCode) -#define IAMTVTuner_put_TuningSpace(This,lTuningSpace) (This)->lpVtbl->put_TuningSpace(This,lTuningSpace) -#define IAMTVTuner_get_TuningSpace(This,plTuningSpace) (This)->lpVtbl->get_TuningSpace(This,plTuningSpace) -#define IAMTVTuner_Logon(This,hCurrentUser) (This)->lpVtbl->Logon(This,hCurrentUser) -#define IAMTVTuner_Logout(This) (This)->lpVtbl->Logout(This) -#define IAMTVTuner_SignalPresent(This,plSignalStrength) (This)->lpVtbl->SignalPresent(This,plSignalStrength) -#define IAMTVTuner_put_Mode(This,lMode) (This)->lpVtbl->put_Mode(This,lMode) -#define IAMTVTuner_get_Mode(This,plMode) (This)->lpVtbl->get_Mode(This,plMode) -#define IAMTVTuner_GetAvailableModes(This,plModes) (This)->lpVtbl->GetAvailableModes(This,plModes) -#define IAMTVTuner_RegisterNotificationCallBack(This,pNotify,lEvents) (This)->lpVtbl->RegisterNotificationCallBack(This,pNotify,lEvents) -#define IAMTVTuner_UnRegisterNotificationCallBack(This,pNotify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,pNotify) -#define IAMTVTuner_get_AvailableTVFormats(This,lAnalogVideoStandard) (This)->lpVtbl->get_AvailableTVFormats(This,lAnalogVideoStandard) -#define IAMTVTuner_get_TVFormat(This,plAnalogVideoStandard) (This)->lpVtbl->get_TVFormat(This,plAnalogVideoStandard) -#define IAMTVTuner_AutoTune(This,lChannel,plFoundSignal) (This)->lpVtbl->AutoTune(This,lChannel,plFoundSignal) -#define IAMTVTuner_StoreAutoTune(This) (This)->lpVtbl->StoreAutoTune(This) -#define IAMTVTuner_get_NumInputConnections(This,plNumInputConnections) (This)->lpVtbl->get_NumInputConnections(This,plNumInputConnections) -#define IAMTVTuner_put_InputType(This,lIndex,InputType) (This)->lpVtbl->put_InputType(This,lIndex,InputType) -#define IAMTVTuner_get_InputType(This,lIndex,pInputType) (This)->lpVtbl->get_InputType(This,lIndex,pInputType) -#define IAMTVTuner_put_ConnectInput(This,lIndex) (This)->lpVtbl->put_ConnectInput(This,lIndex) -#define IAMTVTuner_get_ConnectInput(This,plIndex) (This)->lpVtbl->get_ConnectInput(This,plIndex) -#define IAMTVTuner_get_VideoFrequency(This,lFreq) (This)->lpVtbl->get_VideoFrequency(This,lFreq) -#define IAMTVTuner_get_AudioFrequency(This,lFreq) (This)->lpVtbl->get_AudioFrequency(This,lFreq) -#endif -#endif - HRESULT WINAPI IAMTVTuner_get_AvailableTVFormats_Proxy(IAMTVTuner *This,long *lAnalogVideoStandard); - void __RPC_STUB IAMTVTuner_get_AvailableTVFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_TVFormat_Proxy(IAMTVTuner *This,long *plAnalogVideoStandard); - void __RPC_STUB IAMTVTuner_get_TVFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_AutoTune_Proxy(IAMTVTuner *This,long lChannel,long *plFoundSignal); - void __RPC_STUB IAMTVTuner_AutoTune_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_StoreAutoTune_Proxy(IAMTVTuner *This); - void __RPC_STUB IAMTVTuner_StoreAutoTune_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_NumInputConnections_Proxy(IAMTVTuner *This,long *plNumInputConnections); - void __RPC_STUB IAMTVTuner_get_NumInputConnections_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_put_InputType_Proxy(IAMTVTuner *This,long lIndex,TunerInputType InputType); - void __RPC_STUB IAMTVTuner_put_InputType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_InputType_Proxy(IAMTVTuner *This,long lIndex,TunerInputType *pInputType); - void __RPC_STUB IAMTVTuner_get_InputType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_put_ConnectInput_Proxy(IAMTVTuner *This,long lIndex); - void __RPC_STUB IAMTVTuner_put_ConnectInput_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_ConnectInput_Proxy(IAMTVTuner *This,long *plIndex); - void __RPC_STUB IAMTVTuner_get_ConnectInput_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_VideoFrequency_Proxy(IAMTVTuner *This,long *lFreq); - void __RPC_STUB IAMTVTuner_get_VideoFrequency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVTuner_get_AudioFrequency_Proxy(IAMTVTuner *This,long *lFreq); - void __RPC_STUB IAMTVTuner_get_AudioFrequency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IBPCSatelliteTuner_INTERFACE_DEFINED__ -#define __IBPCSatelliteTuner_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IBPCSatelliteTuner; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IBPCSatelliteTuner : public IAMTuner { - public: - virtual HRESULT WINAPI get_DefaultSubChannelTypes(long *plDefaultVideoType,long *plDefaultAudioType) = 0; - virtual HRESULT WINAPI put_DefaultSubChannelTypes(long lDefaultVideoType,long lDefaultAudioType) = 0; - virtual HRESULT WINAPI IsTapingPermitted(void) = 0; - }; -#else - typedef struct IBPCSatelliteTunerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IBPCSatelliteTuner *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IBPCSatelliteTuner *This); - ULONG (WINAPI *Release)(IBPCSatelliteTuner *This); - HRESULT (WINAPI *put_Channel)(IBPCSatelliteTuner *This,long lChannel,long lVideoSubChannel,long lAudioSubChannel); - HRESULT (WINAPI *get_Channel)(IBPCSatelliteTuner *This,long *plChannel,long *plVideoSubChannel,long *plAudioSubChannel); - HRESULT (WINAPI *ChannelMinMax)(IBPCSatelliteTuner *This,long *lChannelMin,long *lChannelMax); - HRESULT (WINAPI *put_CountryCode)(IBPCSatelliteTuner *This,long lCountryCode); - HRESULT (WINAPI *get_CountryCode)(IBPCSatelliteTuner *This,long *plCountryCode); - HRESULT (WINAPI *put_TuningSpace)(IBPCSatelliteTuner *This,long lTuningSpace); - HRESULT (WINAPI *get_TuningSpace)(IBPCSatelliteTuner *This,long *plTuningSpace); - HRESULT (WINAPI *Logon)(IBPCSatelliteTuner *This,HANDLE hCurrentUser); - HRESULT (WINAPI *Logout)(IBPCSatelliteTuner *This); - HRESULT (WINAPI *SignalPresent)(IBPCSatelliteTuner *This,long *plSignalStrength); - HRESULT (WINAPI *put_Mode)(IBPCSatelliteTuner *This,AMTunerModeType lMode); - HRESULT (WINAPI *get_Mode)(IBPCSatelliteTuner *This,AMTunerModeType *plMode); - HRESULT (WINAPI *GetAvailableModes)(IBPCSatelliteTuner *This,long *plModes); - HRESULT (WINAPI *RegisterNotificationCallBack)(IBPCSatelliteTuner *This,IAMTunerNotification *pNotify,long lEvents); - HRESULT (WINAPI *UnRegisterNotificationCallBack)(IBPCSatelliteTuner *This,IAMTunerNotification *pNotify); - HRESULT (WINAPI *get_DefaultSubChannelTypes)(IBPCSatelliteTuner *This,long *plDefaultVideoType,long *plDefaultAudioType); - HRESULT (WINAPI *put_DefaultSubChannelTypes)(IBPCSatelliteTuner *This,long lDefaultVideoType,long lDefaultAudioType); - HRESULT (WINAPI *IsTapingPermitted)(IBPCSatelliteTuner *This); - END_INTERFACE - } IBPCSatelliteTunerVtbl; - struct IBPCSatelliteTuner { - CONST_VTBL struct IBPCSatelliteTunerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IBPCSatelliteTuner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IBPCSatelliteTuner_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IBPCSatelliteTuner_Release(This) (This)->lpVtbl->Release(This) -#define IBPCSatelliteTuner_put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) (This)->lpVtbl->put_Channel(This,lChannel,lVideoSubChannel,lAudioSubChannel) -#define IBPCSatelliteTuner_get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) (This)->lpVtbl->get_Channel(This,plChannel,plVideoSubChannel,plAudioSubChannel) -#define IBPCSatelliteTuner_ChannelMinMax(This,lChannelMin,lChannelMax) (This)->lpVtbl->ChannelMinMax(This,lChannelMin,lChannelMax) -#define IBPCSatelliteTuner_put_CountryCode(This,lCountryCode) (This)->lpVtbl->put_CountryCode(This,lCountryCode) -#define IBPCSatelliteTuner_get_CountryCode(This,plCountryCode) (This)->lpVtbl->get_CountryCode(This,plCountryCode) -#define IBPCSatelliteTuner_put_TuningSpace(This,lTuningSpace) (This)->lpVtbl->put_TuningSpace(This,lTuningSpace) -#define IBPCSatelliteTuner_get_TuningSpace(This,plTuningSpace) (This)->lpVtbl->get_TuningSpace(This,plTuningSpace) -#define IBPCSatelliteTuner_Logon(This,hCurrentUser) (This)->lpVtbl->Logon(This,hCurrentUser) -#define IBPCSatelliteTuner_Logout(This) (This)->lpVtbl->Logout(This) -#define IBPCSatelliteTuner_SignalPresent(This,plSignalStrength) (This)->lpVtbl->SignalPresent(This,plSignalStrength) -#define IBPCSatelliteTuner_put_Mode(This,lMode) (This)->lpVtbl->put_Mode(This,lMode) -#define IBPCSatelliteTuner_get_Mode(This,plMode) (This)->lpVtbl->get_Mode(This,plMode) -#define IBPCSatelliteTuner_GetAvailableModes(This,plModes) (This)->lpVtbl->GetAvailableModes(This,plModes) -#define IBPCSatelliteTuner_RegisterNotificationCallBack(This,pNotify,lEvents) (This)->lpVtbl->RegisterNotificationCallBack(This,pNotify,lEvents) -#define IBPCSatelliteTuner_UnRegisterNotificationCallBack(This,pNotify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,pNotify) -#define IBPCSatelliteTuner_get_DefaultSubChannelTypes(This,plDefaultVideoType,plDefaultAudioType) (This)->lpVtbl->get_DefaultSubChannelTypes(This,plDefaultVideoType,plDefaultAudioType) -#define IBPCSatelliteTuner_put_DefaultSubChannelTypes(This,lDefaultVideoType,lDefaultAudioType) (This)->lpVtbl->put_DefaultSubChannelTypes(This,lDefaultVideoType,lDefaultAudioType) -#define IBPCSatelliteTuner_IsTapingPermitted(This) (This)->lpVtbl->IsTapingPermitted(This) -#endif -#endif - HRESULT WINAPI IBPCSatelliteTuner_get_DefaultSubChannelTypes_Proxy(IBPCSatelliteTuner *This,long *plDefaultVideoType,long *plDefaultAudioType); - void __RPC_STUB IBPCSatelliteTuner_get_DefaultSubChannelTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBPCSatelliteTuner_put_DefaultSubChannelTypes_Proxy(IBPCSatelliteTuner *This,long lDefaultVideoType,long lDefaultAudioType); - void __RPC_STUB IBPCSatelliteTuner_put_DefaultSubChannelTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IBPCSatelliteTuner_IsTapingPermitted_Proxy(IBPCSatelliteTuner *This); - void __RPC_STUB IBPCSatelliteTuner_IsTapingPermitted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum tagTVAudioMode { - AMTVAUDIO_MODE_MONO = 0x1,AMTVAUDIO_MODE_STEREO = 0x2,AMTVAUDIO_MODE_LANG_A = 0x10,AMTVAUDIO_MODE_LANG_B = 0x20,AMTVAUDIO_MODE_LANG_C = 0x40 - } TVAudioMode; - - typedef enum tagAMTVAudioEventType { - AMTVAUDIO_EVENT_CHANGED = 0x1 - } AMTVAudioEventType; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0182_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0182_v0_0_s_ifspec; -#ifndef __IAMTVAudio_INTERFACE_DEFINED__ -#define __IAMTVAudio_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTVAudio; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTVAudio : public IUnknown { - public: - virtual HRESULT WINAPI GetHardwareSupportedTVAudioModes(long *plModes) = 0; - virtual HRESULT WINAPI GetAvailableTVAudioModes(long *plModes) = 0; - virtual HRESULT WINAPI get_TVAudioMode(long *plMode) = 0; - virtual HRESULT WINAPI put_TVAudioMode(long lMode) = 0; - virtual HRESULT WINAPI RegisterNotificationCallBack(IAMTunerNotification *pNotify,long lEvents) = 0; - virtual HRESULT WINAPI UnRegisterNotificationCallBack(IAMTunerNotification *pNotify) = 0; - }; -#else - typedef struct IAMTVAudioVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTVAudio *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTVAudio *This); - ULONG (WINAPI *Release)(IAMTVAudio *This); - HRESULT (WINAPI *GetHardwareSupportedTVAudioModes)(IAMTVAudio *This,long *plModes); - HRESULT (WINAPI *GetAvailableTVAudioModes)(IAMTVAudio *This,long *plModes); - HRESULT (WINAPI *get_TVAudioMode)(IAMTVAudio *This,long *plMode); - HRESULT (WINAPI *put_TVAudioMode)(IAMTVAudio *This,long lMode); - HRESULT (WINAPI *RegisterNotificationCallBack)(IAMTVAudio *This,IAMTunerNotification *pNotify,long lEvents); - HRESULT (WINAPI *UnRegisterNotificationCallBack)(IAMTVAudio *This,IAMTunerNotification *pNotify); - END_INTERFACE - } IAMTVAudioVtbl; - struct IAMTVAudio { - CONST_VTBL struct IAMTVAudioVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTVAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTVAudio_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTVAudio_Release(This) (This)->lpVtbl->Release(This) -#define IAMTVAudio_GetHardwareSupportedTVAudioModes(This,plModes) (This)->lpVtbl->GetHardwareSupportedTVAudioModes(This,plModes) -#define IAMTVAudio_GetAvailableTVAudioModes(This,plModes) (This)->lpVtbl->GetAvailableTVAudioModes(This,plModes) -#define IAMTVAudio_get_TVAudioMode(This,plMode) (This)->lpVtbl->get_TVAudioMode(This,plMode) -#define IAMTVAudio_put_TVAudioMode(This,lMode) (This)->lpVtbl->put_TVAudioMode(This,lMode) -#define IAMTVAudio_RegisterNotificationCallBack(This,pNotify,lEvents) (This)->lpVtbl->RegisterNotificationCallBack(This,pNotify,lEvents) -#define IAMTVAudio_UnRegisterNotificationCallBack(This,pNotify) (This)->lpVtbl->UnRegisterNotificationCallBack(This,pNotify) -#endif -#endif - HRESULT WINAPI IAMTVAudio_GetHardwareSupportedTVAudioModes_Proxy(IAMTVAudio *This,long *plModes); - void __RPC_STUB IAMTVAudio_GetHardwareSupportedTVAudioModes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVAudio_GetAvailableTVAudioModes_Proxy(IAMTVAudio *This,long *plModes); - void __RPC_STUB IAMTVAudio_GetAvailableTVAudioModes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVAudio_get_TVAudioMode_Proxy(IAMTVAudio *This,long *plMode); - void __RPC_STUB IAMTVAudio_get_TVAudioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVAudio_put_TVAudioMode_Proxy(IAMTVAudio *This,long lMode); - void __RPC_STUB IAMTVAudio_put_TVAudioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVAudio_RegisterNotificationCallBack_Proxy(IAMTVAudio *This,IAMTunerNotification *pNotify,long lEvents); - void __RPC_STUB IAMTVAudio_RegisterNotificationCallBack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTVAudio_UnRegisterNotificationCallBack_Proxy(IAMTVAudio *This,IAMTunerNotification *pNotify); - void __RPC_STUB IAMTVAudio_UnRegisterNotificationCallBack_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMTVAudioNotification_INTERFACE_DEFINED__ -#define __IAMTVAudioNotification_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTVAudioNotification; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTVAudioNotification : public IUnknown { - public: - virtual HRESULT WINAPI OnEvent(AMTVAudioEventType Event) = 0; - }; -#else - typedef struct IAMTVAudioNotificationVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTVAudioNotification *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTVAudioNotification *This); - ULONG (WINAPI *Release)(IAMTVAudioNotification *This); - HRESULT (WINAPI *OnEvent)(IAMTVAudioNotification *This,AMTVAudioEventType Event); - END_INTERFACE - } IAMTVAudioNotificationVtbl; - struct IAMTVAudioNotification { - CONST_VTBL struct IAMTVAudioNotificationVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTVAudioNotification_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTVAudioNotification_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTVAudioNotification_Release(This) (This)->lpVtbl->Release(This) -#define IAMTVAudioNotification_OnEvent(This,Event) (This)->lpVtbl->OnEvent(This,Event) -#endif -#endif - HRESULT WINAPI IAMTVAudioNotification_OnEvent_Proxy(IAMTVAudioNotification *This,AMTVAudioEventType Event); - void __RPC_STUB IAMTVAudioNotification_OnEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMAnalogVideoEncoder_INTERFACE_DEFINED__ -#define __IAMAnalogVideoEncoder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMAnalogVideoEncoder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMAnalogVideoEncoder : public IUnknown { - public: - virtual HRESULT WINAPI get_AvailableTVFormats(long *lAnalogVideoStandard) = 0; - virtual HRESULT WINAPI put_TVFormat(long lAnalogVideoStandard) = 0; - virtual HRESULT WINAPI get_TVFormat(long *plAnalogVideoStandard) = 0; - virtual HRESULT WINAPI put_CopyProtection(long lVideoCopyProtection) = 0; - virtual HRESULT WINAPI get_CopyProtection(long *lVideoCopyProtection) = 0; - virtual HRESULT WINAPI put_CCEnable(long lCCEnable) = 0; - virtual HRESULT WINAPI get_CCEnable(long *lCCEnable) = 0; - }; -#else - typedef struct IAMAnalogVideoEncoderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMAnalogVideoEncoder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMAnalogVideoEncoder *This); - ULONG (WINAPI *Release)(IAMAnalogVideoEncoder *This); - HRESULT (WINAPI *get_AvailableTVFormats)(IAMAnalogVideoEncoder *This,long *lAnalogVideoStandard); - HRESULT (WINAPI *put_TVFormat)(IAMAnalogVideoEncoder *This,long lAnalogVideoStandard); - HRESULT (WINAPI *get_TVFormat)(IAMAnalogVideoEncoder *This,long *plAnalogVideoStandard); - HRESULT (WINAPI *put_CopyProtection)(IAMAnalogVideoEncoder *This,long lVideoCopyProtection); - HRESULT (WINAPI *get_CopyProtection)(IAMAnalogVideoEncoder *This,long *lVideoCopyProtection); - HRESULT (WINAPI *put_CCEnable)(IAMAnalogVideoEncoder *This,long lCCEnable); - HRESULT (WINAPI *get_CCEnable)(IAMAnalogVideoEncoder *This,long *lCCEnable); - END_INTERFACE - } IAMAnalogVideoEncoderVtbl; - struct IAMAnalogVideoEncoder { - CONST_VTBL struct IAMAnalogVideoEncoderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMAnalogVideoEncoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMAnalogVideoEncoder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMAnalogVideoEncoder_Release(This) (This)->lpVtbl->Release(This) -#define IAMAnalogVideoEncoder_get_AvailableTVFormats(This,lAnalogVideoStandard) (This)->lpVtbl->get_AvailableTVFormats(This,lAnalogVideoStandard) -#define IAMAnalogVideoEncoder_put_TVFormat(This,lAnalogVideoStandard) (This)->lpVtbl->put_TVFormat(This,lAnalogVideoStandard) -#define IAMAnalogVideoEncoder_get_TVFormat(This,plAnalogVideoStandard) (This)->lpVtbl->get_TVFormat(This,plAnalogVideoStandard) -#define IAMAnalogVideoEncoder_put_CopyProtection(This,lVideoCopyProtection) (This)->lpVtbl->put_CopyProtection(This,lVideoCopyProtection) -#define IAMAnalogVideoEncoder_get_CopyProtection(This,lVideoCopyProtection) (This)->lpVtbl->get_CopyProtection(This,lVideoCopyProtection) -#define IAMAnalogVideoEncoder_put_CCEnable(This,lCCEnable) (This)->lpVtbl->put_CCEnable(This,lCCEnable) -#define IAMAnalogVideoEncoder_get_CCEnable(This,lCCEnable) (This)->lpVtbl->get_CCEnable(This,lCCEnable) -#endif -#endif - HRESULT WINAPI IAMAnalogVideoEncoder_get_AvailableTVFormats_Proxy(IAMAnalogVideoEncoder *This,long *lAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoEncoder_get_AvailableTVFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_put_TVFormat_Proxy(IAMAnalogVideoEncoder *This,long lAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoEncoder_put_TVFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_get_TVFormat_Proxy(IAMAnalogVideoEncoder *This,long *plAnalogVideoStandard); - void __RPC_STUB IAMAnalogVideoEncoder_get_TVFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_put_CopyProtection_Proxy(IAMAnalogVideoEncoder *This,long lVideoCopyProtection); - void __RPC_STUB IAMAnalogVideoEncoder_put_CopyProtection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_get_CopyProtection_Proxy(IAMAnalogVideoEncoder *This,long *lVideoCopyProtection); - void __RPC_STUB IAMAnalogVideoEncoder_get_CopyProtection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_put_CCEnable_Proxy(IAMAnalogVideoEncoder *This,long lCCEnable); - void __RPC_STUB IAMAnalogVideoEncoder_put_CCEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMAnalogVideoEncoder_get_CCEnable_Proxy(IAMAnalogVideoEncoder *This,long *lCCEnable); - void __RPC_STUB IAMAnalogVideoEncoder_get_CCEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0185_0001 { - AMPROPERTY_PIN_CATEGORY = 0,AMPROPERTY_PIN_MEDIUM = AMPROPERTY_PIN_CATEGORY + 1 - } AMPROPERTY_PIN; - -#ifndef _IKsPropertySet_ -#define _IKsPropertySet_ -#define KSPROPERTY_SUPPORT_GET 1 -#define KSPROPERTY_SUPPORT_SET 2 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0185_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0185_v0_0_s_ifspec; -#ifndef __IKsPropertySet_INTERFACE_DEFINED__ -#define __IKsPropertySet_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IKsPropertySet; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IKsPropertySet : public IUnknown { - public: - virtual HRESULT WINAPI Set(REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData) = 0; - virtual HRESULT WINAPI Get(REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData,DWORD *pcbReturned) = 0; - virtual HRESULT WINAPI QuerySupported(REFGUID guidPropSet,DWORD dwPropID,DWORD *pTypeSupport) = 0; - }; -#else - typedef struct IKsPropertySetVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IKsPropertySet *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IKsPropertySet *This); - ULONG (WINAPI *Release)(IKsPropertySet *This); - HRESULT (WINAPI *Set)(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData); - HRESULT (WINAPI *Get)(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData,DWORD *pcbReturned); - HRESULT (WINAPI *QuerySupported)(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,DWORD *pTypeSupport); - END_INTERFACE - } IKsPropertySetVtbl; - struct IKsPropertySet { - CONST_VTBL struct IKsPropertySetVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IKsPropertySet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IKsPropertySet_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IKsPropertySet_Release(This) (This)->lpVtbl->Release(This) -#define IKsPropertySet_Set(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData) (This)->lpVtbl->Set(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData) -#define IKsPropertySet_Get(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned) (This)->lpVtbl->Get(This,guidPropSet,dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned) -#define IKsPropertySet_QuerySupported(This,guidPropSet,dwPropID,pTypeSupport) (This)->lpVtbl->QuerySupported(This,guidPropSet,dwPropID,pTypeSupport) -#endif -#endif - HRESULT WINAPI IKsPropertySet_RemoteSet_Proxy(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,byte *pInstanceData,DWORD cbInstanceData,byte *pPropData,DWORD cbPropData); - void __RPC_STUB IKsPropertySet_RemoteSet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IKsPropertySet_RemoteGet_Proxy(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,byte *pInstanceData,DWORD cbInstanceData,byte *pPropData,DWORD cbPropData,DWORD *pcbReturned); - void __RPC_STUB IKsPropertySet_RemoteGet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IKsPropertySet_QuerySupported_Proxy(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,DWORD *pTypeSupport); - void __RPC_STUB IKsPropertySet_QuerySupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif -#endif - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0186_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0186_v0_0_s_ifspec; -#ifndef __IMediaPropertyBag_INTERFACE_DEFINED__ -#define __IMediaPropertyBag_INTERFACE_DEFINED__ - typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG; - - EXTERN_C const IID IID_IMediaPropertyBag; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMediaPropertyBag : public IPropertyBag { - public: - virtual HRESULT WINAPI EnumProperty(ULONG iProperty,VARIANT *pvarPropertyName,VARIANT *pvarPropertyValue) = 0; - }; -#else - typedef struct IMediaPropertyBagVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMediaPropertyBag *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMediaPropertyBag *This); - ULONG (WINAPI *Release)(IMediaPropertyBag *This); - HRESULT (WINAPI *Read)(IMediaPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog); - HRESULT (WINAPI *Write)(IMediaPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar); - HRESULT (WINAPI *EnumProperty)(IMediaPropertyBag *This,ULONG iProperty,VARIANT *pvarPropertyName,VARIANT *pvarPropertyValue); - END_INTERFACE - } IMediaPropertyBagVtbl; - struct IMediaPropertyBag { - CONST_VTBL struct IMediaPropertyBagVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMediaPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMediaPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMediaPropertyBag_Release(This) (This)->lpVtbl->Release(This) -#define IMediaPropertyBag_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog) -#define IMediaPropertyBag_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar) -#define IMediaPropertyBag_EnumProperty(This,iProperty,pvarPropertyName,pvarPropertyValue) (This)->lpVtbl->EnumProperty(This,iProperty,pvarPropertyName,pvarPropertyValue) -#endif -#endif - HRESULT WINAPI IMediaPropertyBag_EnumProperty_Proxy(IMediaPropertyBag *This,ULONG iProperty,VARIANT *pvarPropertyName,VARIANT *pvarPropertyValue); - void __RPC_STUB IMediaPropertyBag_EnumProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IPersistMediaPropertyBag_INTERFACE_DEFINED__ -#define __IPersistMediaPropertyBag_INTERFACE_DEFINED__ - typedef IPersistMediaPropertyBag *LPPERSISTMEDIAPROPERTYBAG; - - EXTERN_C const IID IID_IPersistMediaPropertyBag; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IPersistMediaPropertyBag : public IPersist { - public: - virtual HRESULT WINAPI InitNew(void) = 0; - virtual HRESULT WINAPI Load(IMediaPropertyBag *pPropBag,IErrorLog *pErrorLog) = 0; - virtual HRESULT WINAPI Save(IMediaPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties) = 0; - }; -#else - typedef struct IPersistMediaPropertyBagVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IPersistMediaPropertyBag *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IPersistMediaPropertyBag *This); - ULONG (WINAPI *Release)(IPersistMediaPropertyBag *This); - HRESULT (WINAPI *GetClassID)(IPersistMediaPropertyBag *This,CLSID *pClassID); - HRESULT (WINAPI *InitNew)(IPersistMediaPropertyBag *This); - HRESULT (WINAPI *Load)(IPersistMediaPropertyBag *This,IMediaPropertyBag *pPropBag,IErrorLog *pErrorLog); - HRESULT (WINAPI *Save)(IPersistMediaPropertyBag *This,IMediaPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties); - END_INTERFACE - } IPersistMediaPropertyBagVtbl; - struct IPersistMediaPropertyBag { - CONST_VTBL struct IPersistMediaPropertyBagVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IPersistMediaPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IPersistMediaPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IPersistMediaPropertyBag_Release(This) (This)->lpVtbl->Release(This) -#define IPersistMediaPropertyBag_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID) -#define IPersistMediaPropertyBag_InitNew(This) (This)->lpVtbl->InitNew(This) -#define IPersistMediaPropertyBag_Load(This,pPropBag,pErrorLog) (This)->lpVtbl->Load(This,pPropBag,pErrorLog) -#define IPersistMediaPropertyBag_Save(This,pPropBag,fClearDirty,fSaveAllProperties) (This)->lpVtbl->Save(This,pPropBag,fClearDirty,fSaveAllProperties) -#endif -#endif - HRESULT WINAPI IPersistMediaPropertyBag_InitNew_Proxy(IPersistMediaPropertyBag *This); - void __RPC_STUB IPersistMediaPropertyBag_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPersistMediaPropertyBag_Load_Proxy(IPersistMediaPropertyBag *This,IMediaPropertyBag *pPropBag,IErrorLog *pErrorLog); - void __RPC_STUB IPersistMediaPropertyBag_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPersistMediaPropertyBag_Save_Proxy(IPersistMediaPropertyBag *This,IMediaPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties); - void __RPC_STUB IPersistMediaPropertyBag_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMPhysicalPinInfo_INTERFACE_DEFINED__ -#define __IAMPhysicalPinInfo_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMPhysicalPinInfo; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMPhysicalPinInfo : public IUnknown { - public: - virtual HRESULT WINAPI GetPhysicalType(long *pType,LPOLESTR *ppszType) = 0; - }; -#else - typedef struct IAMPhysicalPinInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMPhysicalPinInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMPhysicalPinInfo *This); - ULONG (WINAPI *Release)(IAMPhysicalPinInfo *This); - HRESULT (WINAPI *GetPhysicalType)(IAMPhysicalPinInfo *This,long *pType,LPOLESTR *ppszType); - END_INTERFACE - } IAMPhysicalPinInfoVtbl; - struct IAMPhysicalPinInfo { - CONST_VTBL struct IAMPhysicalPinInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMPhysicalPinInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMPhysicalPinInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMPhysicalPinInfo_Release(This) (This)->lpVtbl->Release(This) -#define IAMPhysicalPinInfo_GetPhysicalType(This,pType,ppszType) (This)->lpVtbl->GetPhysicalType(This,pType,ppszType) -#endif -#endif - HRESULT WINAPI IAMPhysicalPinInfo_GetPhysicalType_Proxy(IAMPhysicalPinInfo *This,long *pType,LPOLESTR *ppszType); - void __RPC_STUB IAMPhysicalPinInfo_GetPhysicalType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMPhysicalPinInfo *PAMPHYSICALPININFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0338_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0338_v0_0_s_ifspec; -#ifndef __IAMExtDevice_INTERFACE_DEFINED__ -#define __IAMExtDevice_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMExtDevice; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMExtDevice : public IUnknown { - public: - virtual HRESULT WINAPI GetCapability(long Capability,long *pValue,double *pdblValue) = 0; - virtual HRESULT WINAPI get_ExternalDeviceID(LPOLESTR *ppszData) = 0; - virtual HRESULT WINAPI get_ExternalDeviceVersion(LPOLESTR *ppszData) = 0; - virtual HRESULT WINAPI put_DevicePower(long PowerMode) = 0; - virtual HRESULT WINAPI get_DevicePower(long *pPowerMode) = 0; - virtual HRESULT WINAPI Calibrate(HEVENT hEvent,long Mode,long *pStatus) = 0; - virtual HRESULT WINAPI put_DevicePort(long DevicePort) = 0; - virtual HRESULT WINAPI get_DevicePort(long *pDevicePort) = 0; - }; -#else - typedef struct IAMExtDeviceVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMExtDevice *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMExtDevice *This); - ULONG (WINAPI *Release)(IAMExtDevice *This); - HRESULT (WINAPI *GetCapability)(IAMExtDevice *This,long Capability,long *pValue,double *pdblValue); - HRESULT (WINAPI *get_ExternalDeviceID)(IAMExtDevice *This,LPOLESTR *ppszData); - HRESULT (WINAPI *get_ExternalDeviceVersion)(IAMExtDevice *This,LPOLESTR *ppszData); - HRESULT (WINAPI *put_DevicePower)(IAMExtDevice *This,long PowerMode); - HRESULT (WINAPI *get_DevicePower)(IAMExtDevice *This,long *pPowerMode); - HRESULT (WINAPI *Calibrate)(IAMExtDevice *This,HEVENT hEvent,long Mode,long *pStatus); - HRESULT (WINAPI *put_DevicePort)(IAMExtDevice *This,long DevicePort); - HRESULT (WINAPI *get_DevicePort)(IAMExtDevice *This,long *pDevicePort); - END_INTERFACE - } IAMExtDeviceVtbl; - struct IAMExtDevice { - CONST_VTBL struct IAMExtDeviceVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMExtDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMExtDevice_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMExtDevice_Release(This) (This)->lpVtbl->Release(This) -#define IAMExtDevice_GetCapability(This,Capability,pValue,pdblValue) (This)->lpVtbl->GetCapability(This,Capability,pValue,pdblValue) -#define IAMExtDevice_get_ExternalDeviceID(This,ppszData) (This)->lpVtbl->get_ExternalDeviceID(This,ppszData) -#define IAMExtDevice_get_ExternalDeviceVersion(This,ppszData) (This)->lpVtbl->get_ExternalDeviceVersion(This,ppszData) -#define IAMExtDevice_put_DevicePower(This,PowerMode) (This)->lpVtbl->put_DevicePower(This,PowerMode) -#define IAMExtDevice_get_DevicePower(This,pPowerMode) (This)->lpVtbl->get_DevicePower(This,pPowerMode) -#define IAMExtDevice_Calibrate(This,hEvent,Mode,pStatus) (This)->lpVtbl->Calibrate(This,hEvent,Mode,pStatus) -#define IAMExtDevice_put_DevicePort(This,DevicePort) (This)->lpVtbl->put_DevicePort(This,DevicePort) -#define IAMExtDevice_get_DevicePort(This,pDevicePort) (This)->lpVtbl->get_DevicePort(This,pDevicePort) -#endif -#endif - HRESULT WINAPI IAMExtDevice_GetCapability_Proxy(IAMExtDevice *This,long Capability,long *pValue,double *pdblValue); - void __RPC_STUB IAMExtDevice_GetCapability_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_get_ExternalDeviceID_Proxy(IAMExtDevice *This,LPOLESTR *ppszData); - void __RPC_STUB IAMExtDevice_get_ExternalDeviceID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_get_ExternalDeviceVersion_Proxy(IAMExtDevice *This,LPOLESTR *ppszData); - void __RPC_STUB IAMExtDevice_get_ExternalDeviceVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_put_DevicePower_Proxy(IAMExtDevice *This,long PowerMode); - void __RPC_STUB IAMExtDevice_put_DevicePower_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_get_DevicePower_Proxy(IAMExtDevice *This,long *pPowerMode); - void __RPC_STUB IAMExtDevice_get_DevicePower_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_Calibrate_Proxy(IAMExtDevice *This,HEVENT hEvent,long Mode,long *pStatus); - void __RPC_STUB IAMExtDevice_Calibrate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_put_DevicePort_Proxy(IAMExtDevice *This,long DevicePort); - void __RPC_STUB IAMExtDevice_put_DevicePort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtDevice_get_DevicePort_Proxy(IAMExtDevice *This,long *pDevicePort); - void __RPC_STUB IAMExtDevice_get_DevicePort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMExtDevice *PEXTDEVICE; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0339_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0339_v0_0_s_ifspec; -#ifndef __IAMExtTransport_INTERFACE_DEFINED__ -#define __IAMExtTransport_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMExtTransport; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMExtTransport : public IUnknown { - public: - virtual HRESULT WINAPI GetCapability(long Capability,long *pValue,double *pdblValue) = 0; - virtual HRESULT WINAPI put_MediaState(long State) = 0; - virtual HRESULT WINAPI get_MediaState(long *pState) = 0; - virtual HRESULT WINAPI put_LocalControl(long State) = 0; - virtual HRESULT WINAPI get_LocalControl(long *pState) = 0; - virtual HRESULT WINAPI GetStatus(long StatusItem,long *pValue) = 0; - virtual HRESULT WINAPI GetTransportBasicParameters(long Param,long *pValue,LPOLESTR *ppszData) = 0; - virtual HRESULT WINAPI SetTransportBasicParameters(long Param,long Value,LPCOLESTR pszData) = 0; - virtual HRESULT WINAPI GetTransportVideoParameters(long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetTransportVideoParameters(long Param,long Value) = 0; - virtual HRESULT WINAPI GetTransportAudioParameters(long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetTransportAudioParameters(long Param,long Value) = 0; - virtual HRESULT WINAPI put_Mode(long Mode) = 0; - virtual HRESULT WINAPI get_Mode(long *pMode) = 0; - virtual HRESULT WINAPI put_Rate(double dblRate) = 0; - virtual HRESULT WINAPI get_Rate(double *pdblRate) = 0; - virtual HRESULT WINAPI GetChase(long *pEnabled,long *pOffset,HEVENT *phEvent) = 0; - virtual HRESULT WINAPI SetChase(long Enable,long Offset,HEVENT hEvent) = 0; - virtual HRESULT WINAPI GetBump(long *pSpeed,long *pDuration) = 0; - virtual HRESULT WINAPI SetBump(long Speed,long Duration) = 0; - virtual HRESULT WINAPI get_AntiClogControl(long *pEnabled) = 0; - virtual HRESULT WINAPI put_AntiClogControl(long Enable) = 0; - virtual HRESULT WINAPI GetEditPropertySet(long EditID,long *pState) = 0; - virtual HRESULT WINAPI SetEditPropertySet(long *pEditID,long State) = 0; - virtual HRESULT WINAPI GetEditProperty(long EditID,long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetEditProperty(long EditID,long Param,long Value) = 0; - virtual HRESULT WINAPI get_EditStart(long *pValue) = 0; - virtual HRESULT WINAPI put_EditStart(long Value) = 0; - }; -#else - typedef struct IAMExtTransportVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMExtTransport *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMExtTransport *This); - ULONG (WINAPI *Release)(IAMExtTransport *This); - HRESULT (WINAPI *GetCapability)(IAMExtTransport *This,long Capability,long *pValue,double *pdblValue); - HRESULT (WINAPI *put_MediaState)(IAMExtTransport *This,long State); - HRESULT (WINAPI *get_MediaState)(IAMExtTransport *This,long *pState); - HRESULT (WINAPI *put_LocalControl)(IAMExtTransport *This,long State); - HRESULT (WINAPI *get_LocalControl)(IAMExtTransport *This,long *pState); - HRESULT (WINAPI *GetStatus)(IAMExtTransport *This,long StatusItem,long *pValue); - HRESULT (WINAPI *GetTransportBasicParameters)(IAMExtTransport *This,long Param,long *pValue,LPOLESTR *ppszData); - HRESULT (WINAPI *SetTransportBasicParameters)(IAMExtTransport *This,long Param,long Value,LPCOLESTR pszData); - HRESULT (WINAPI *GetTransportVideoParameters)(IAMExtTransport *This,long Param,long *pValue); - HRESULT (WINAPI *SetTransportVideoParameters)(IAMExtTransport *This,long Param,long Value); - HRESULT (WINAPI *GetTransportAudioParameters)(IAMExtTransport *This,long Param,long *pValue); - HRESULT (WINAPI *SetTransportAudioParameters)(IAMExtTransport *This,long Param,long Value); - HRESULT (WINAPI *put_Mode)(IAMExtTransport *This,long Mode); - HRESULT (WINAPI *get_Mode)(IAMExtTransport *This,long *pMode); - HRESULT (WINAPI *put_Rate)(IAMExtTransport *This,double dblRate); - HRESULT (WINAPI *get_Rate)(IAMExtTransport *This,double *pdblRate); - HRESULT (WINAPI *GetChase)(IAMExtTransport *This,long *pEnabled,long *pOffset,HEVENT *phEvent); - HRESULT (WINAPI *SetChase)(IAMExtTransport *This,long Enable,long Offset,HEVENT hEvent); - HRESULT (WINAPI *GetBump)(IAMExtTransport *This,long *pSpeed,long *pDuration); - HRESULT (WINAPI *SetBump)(IAMExtTransport *This,long Speed,long Duration); - HRESULT (WINAPI *get_AntiClogControl)(IAMExtTransport *This,long *pEnabled); - HRESULT (WINAPI *put_AntiClogControl)(IAMExtTransport *This,long Enable); - HRESULT (WINAPI *GetEditPropertySet)(IAMExtTransport *This,long EditID,long *pState); - HRESULT (WINAPI *SetEditPropertySet)(IAMExtTransport *This,long *pEditID,long State); - HRESULT (WINAPI *GetEditProperty)(IAMExtTransport *This,long EditID,long Param,long *pValue); - HRESULT (WINAPI *SetEditProperty)(IAMExtTransport *This,long EditID,long Param,long Value); - HRESULT (WINAPI *get_EditStart)(IAMExtTransport *This,long *pValue); - HRESULT (WINAPI *put_EditStart)(IAMExtTransport *This,long Value); - END_INTERFACE - } IAMExtTransportVtbl; - struct IAMExtTransport { - CONST_VTBL struct IAMExtTransportVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMExtTransport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMExtTransport_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMExtTransport_Release(This) (This)->lpVtbl->Release(This) -#define IAMExtTransport_GetCapability(This,Capability,pValue,pdblValue) (This)->lpVtbl->GetCapability(This,Capability,pValue,pdblValue) -#define IAMExtTransport_put_MediaState(This,State) (This)->lpVtbl->put_MediaState(This,State) -#define IAMExtTransport_get_MediaState(This,pState) (This)->lpVtbl->get_MediaState(This,pState) -#define IAMExtTransport_put_LocalControl(This,State) (This)->lpVtbl->put_LocalControl(This,State) -#define IAMExtTransport_get_LocalControl(This,pState) (This)->lpVtbl->get_LocalControl(This,pState) -#define IAMExtTransport_GetStatus(This,StatusItem,pValue) (This)->lpVtbl->GetStatus(This,StatusItem,pValue) -#define IAMExtTransport_GetTransportBasicParameters(This,Param,pValue,ppszData) (This)->lpVtbl->GetTransportBasicParameters(This,Param,pValue,ppszData) -#define IAMExtTransport_SetTransportBasicParameters(This,Param,Value,pszData) (This)->lpVtbl->SetTransportBasicParameters(This,Param,Value,pszData) -#define IAMExtTransport_GetTransportVideoParameters(This,Param,pValue) (This)->lpVtbl->GetTransportVideoParameters(This,Param,pValue) -#define IAMExtTransport_SetTransportVideoParameters(This,Param,Value) (This)->lpVtbl->SetTransportVideoParameters(This,Param,Value) -#define IAMExtTransport_GetTransportAudioParameters(This,Param,pValue) (This)->lpVtbl->GetTransportAudioParameters(This,Param,pValue) -#define IAMExtTransport_SetTransportAudioParameters(This,Param,Value) (This)->lpVtbl->SetTransportAudioParameters(This,Param,Value) -#define IAMExtTransport_put_Mode(This,Mode) (This)->lpVtbl->put_Mode(This,Mode) -#define IAMExtTransport_get_Mode(This,pMode) (This)->lpVtbl->get_Mode(This,pMode) -#define IAMExtTransport_put_Rate(This,dblRate) (This)->lpVtbl->put_Rate(This,dblRate) -#define IAMExtTransport_get_Rate(This,pdblRate) (This)->lpVtbl->get_Rate(This,pdblRate) -#define IAMExtTransport_GetChase(This,pEnabled,pOffset,phEvent) (This)->lpVtbl->GetChase(This,pEnabled,pOffset,phEvent) -#define IAMExtTransport_SetChase(This,Enable,Offset,hEvent) (This)->lpVtbl->SetChase(This,Enable,Offset,hEvent) -#define IAMExtTransport_GetBump(This,pSpeed,pDuration) (This)->lpVtbl->GetBump(This,pSpeed,pDuration) -#define IAMExtTransport_SetBump(This,Speed,Duration) (This)->lpVtbl->SetBump(This,Speed,Duration) -#define IAMExtTransport_get_AntiClogControl(This,pEnabled) (This)->lpVtbl->get_AntiClogControl(This,pEnabled) -#define IAMExtTransport_put_AntiClogControl(This,Enable) (This)->lpVtbl->put_AntiClogControl(This,Enable) -#define IAMExtTransport_GetEditPropertySet(This,EditID,pState) (This)->lpVtbl->GetEditPropertySet(This,EditID,pState) -#define IAMExtTransport_SetEditPropertySet(This,pEditID,State) (This)->lpVtbl->SetEditPropertySet(This,pEditID,State) -#define IAMExtTransport_GetEditProperty(This,EditID,Param,pValue) (This)->lpVtbl->GetEditProperty(This,EditID,Param,pValue) -#define IAMExtTransport_SetEditProperty(This,EditID,Param,Value) (This)->lpVtbl->SetEditProperty(This,EditID,Param,Value) -#define IAMExtTransport_get_EditStart(This,pValue) (This)->lpVtbl->get_EditStart(This,pValue) -#define IAMExtTransport_put_EditStart(This,Value) (This)->lpVtbl->put_EditStart(This,Value) -#endif -#endif - HRESULT WINAPI IAMExtTransport_GetCapability_Proxy(IAMExtTransport *This,long Capability,long *pValue,double *pdblValue); - void __RPC_STUB IAMExtTransport_GetCapability_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_MediaState_Proxy(IAMExtTransport *This,long State); - void __RPC_STUB IAMExtTransport_put_MediaState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_MediaState_Proxy(IAMExtTransport *This,long *pState); - void __RPC_STUB IAMExtTransport_get_MediaState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_LocalControl_Proxy(IAMExtTransport *This,long State); - void __RPC_STUB IAMExtTransport_put_LocalControl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_LocalControl_Proxy(IAMExtTransport *This,long *pState); - void __RPC_STUB IAMExtTransport_get_LocalControl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetStatus_Proxy(IAMExtTransport *This,long StatusItem,long *pValue); - void __RPC_STUB IAMExtTransport_GetStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetTransportBasicParameters_Proxy(IAMExtTransport *This,long Param,long *pValue,LPOLESTR *ppszData); - void __RPC_STUB IAMExtTransport_GetTransportBasicParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetTransportBasicParameters_Proxy(IAMExtTransport *This,long Param,long Value,LPCOLESTR pszData); - void __RPC_STUB IAMExtTransport_SetTransportBasicParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetTransportVideoParameters_Proxy(IAMExtTransport *This,long Param,long *pValue); - void __RPC_STUB IAMExtTransport_GetTransportVideoParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetTransportVideoParameters_Proxy(IAMExtTransport *This,long Param,long Value); - void __RPC_STUB IAMExtTransport_SetTransportVideoParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetTransportAudioParameters_Proxy(IAMExtTransport *This,long Param,long *pValue); - void __RPC_STUB IAMExtTransport_GetTransportAudioParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetTransportAudioParameters_Proxy(IAMExtTransport *This,long Param,long Value); - void __RPC_STUB IAMExtTransport_SetTransportAudioParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_Mode_Proxy(IAMExtTransport *This,long Mode); - void __RPC_STUB IAMExtTransport_put_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_Mode_Proxy(IAMExtTransport *This,long *pMode); - void __RPC_STUB IAMExtTransport_get_Mode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_Rate_Proxy(IAMExtTransport *This,double dblRate); - void __RPC_STUB IAMExtTransport_put_Rate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_Rate_Proxy(IAMExtTransport *This,double *pdblRate); - void __RPC_STUB IAMExtTransport_get_Rate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetChase_Proxy(IAMExtTransport *This,long *pEnabled,long *pOffset,HEVENT *phEvent); - void __RPC_STUB IAMExtTransport_GetChase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetChase_Proxy(IAMExtTransport *This,long Enable,long Offset,HEVENT hEvent); - void __RPC_STUB IAMExtTransport_SetChase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetBump_Proxy(IAMExtTransport *This,long *pSpeed,long *pDuration); - void __RPC_STUB IAMExtTransport_GetBump_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetBump_Proxy(IAMExtTransport *This,long Speed,long Duration); - void __RPC_STUB IAMExtTransport_SetBump_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_AntiClogControl_Proxy(IAMExtTransport *This,long *pEnabled); - void __RPC_STUB IAMExtTransport_get_AntiClogControl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_AntiClogControl_Proxy(IAMExtTransport *This,long Enable); - void __RPC_STUB IAMExtTransport_put_AntiClogControl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetEditPropertySet_Proxy(IAMExtTransport *This,long EditID,long *pState); - void __RPC_STUB IAMExtTransport_GetEditPropertySet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetEditPropertySet_Proxy(IAMExtTransport *This,long *pEditID,long State); - void __RPC_STUB IAMExtTransport_SetEditPropertySet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_GetEditProperty_Proxy(IAMExtTransport *This,long EditID,long Param,long *pValue); - void __RPC_STUB IAMExtTransport_GetEditProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_SetEditProperty_Proxy(IAMExtTransport *This,long EditID,long Param,long Value); - void __RPC_STUB IAMExtTransport_SetEditProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_get_EditStart_Proxy(IAMExtTransport *This,long *pValue); - void __RPC_STUB IAMExtTransport_get_EditStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMExtTransport_put_EditStart_Proxy(IAMExtTransport *This,long Value); - void __RPC_STUB IAMExtTransport_put_EditStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMExtTransport *PIAMEXTTRANSPORT; - -#ifndef TIMECODE_DEFINED -#define TIMECODE_DEFINED - typedef union _timecode { - struct { - WORD wFrameRate; - WORD wFrameFract; - DWORD dwFrames; - }; - DWORDLONG qw; - } TIMECODE; -#endif - - typedef TIMECODE *PTIMECODE; - - typedef struct tagTIMECODE_SAMPLE { - LONGLONG qwTick; - TIMECODE timecode; - DWORD dwUser; - DWORD dwFlags; - } TIMECODE_SAMPLE; - - typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0340_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0340_v0_0_s_ifspec; -#ifndef __IAMTimecodeReader_INTERFACE_DEFINED__ -#define __IAMTimecodeReader_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTimecodeReader; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTimecodeReader : public IUnknown { - public: - virtual HRESULT WINAPI GetTCRMode(long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetTCRMode(long Param,long Value) = 0; - virtual HRESULT WINAPI put_VITCLine(long Line) = 0; - virtual HRESULT WINAPI get_VITCLine(long *pLine) = 0; - virtual HRESULT WINAPI GetTimecode(PTIMECODE_SAMPLE pTimecodeSample) = 0; - }; -#else - typedef struct IAMTimecodeReaderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTimecodeReader *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTimecodeReader *This); - ULONG (WINAPI *Release)(IAMTimecodeReader *This); - HRESULT (WINAPI *GetTCRMode)(IAMTimecodeReader *This,long Param,long *pValue); - HRESULT (WINAPI *SetTCRMode)(IAMTimecodeReader *This,long Param,long Value); - HRESULT (WINAPI *put_VITCLine)(IAMTimecodeReader *This,long Line); - HRESULT (WINAPI *get_VITCLine)(IAMTimecodeReader *This,long *pLine); - HRESULT (WINAPI *GetTimecode)(IAMTimecodeReader *This,PTIMECODE_SAMPLE pTimecodeSample); - END_INTERFACE - } IAMTimecodeReaderVtbl; - struct IAMTimecodeReader { - CONST_VTBL struct IAMTimecodeReaderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTimecodeReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTimecodeReader_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTimecodeReader_Release(This) (This)->lpVtbl->Release(This) -#define IAMTimecodeReader_GetTCRMode(This,Param,pValue) (This)->lpVtbl->GetTCRMode(This,Param,pValue) -#define IAMTimecodeReader_SetTCRMode(This,Param,Value) (This)->lpVtbl->SetTCRMode(This,Param,Value) -#define IAMTimecodeReader_put_VITCLine(This,Line) (This)->lpVtbl->put_VITCLine(This,Line) -#define IAMTimecodeReader_get_VITCLine(This,pLine) (This)->lpVtbl->get_VITCLine(This,pLine) -#define IAMTimecodeReader_GetTimecode(This,pTimecodeSample) (This)->lpVtbl->GetTimecode(This,pTimecodeSample) -#endif -#endif - HRESULT WINAPI IAMTimecodeReader_GetTCRMode_Proxy(IAMTimecodeReader *This,long Param,long *pValue); - void __RPC_STUB IAMTimecodeReader_GetTCRMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeReader_SetTCRMode_Proxy(IAMTimecodeReader *This,long Param,long Value); - void __RPC_STUB IAMTimecodeReader_SetTCRMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeReader_put_VITCLine_Proxy(IAMTimecodeReader *This,long Line); - void __RPC_STUB IAMTimecodeReader_put_VITCLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeReader_get_VITCLine_Proxy(IAMTimecodeReader *This,long *pLine); - void __RPC_STUB IAMTimecodeReader_get_VITCLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeReader_GetTimecode_Proxy(IAMTimecodeReader *This,PTIMECODE_SAMPLE pTimecodeSample); - void __RPC_STUB IAMTimecodeReader_GetTimecode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMTimecodeReader *PIAMTIMECODEREADER; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0341_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0341_v0_0_s_ifspec; -#ifndef __IAMTimecodeGenerator_INTERFACE_DEFINED__ -#define __IAMTimecodeGenerator_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTimecodeGenerator; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTimecodeGenerator : public IUnknown { - public: - virtual HRESULT WINAPI GetTCGMode(long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetTCGMode(long Param,long Value) = 0; - virtual HRESULT WINAPI put_VITCLine(long Line) = 0; - virtual HRESULT WINAPI get_VITCLine(long *pLine) = 0; - virtual HRESULT WINAPI SetTimecode(PTIMECODE_SAMPLE pTimecodeSample) = 0; - virtual HRESULT WINAPI GetTimecode(PTIMECODE_SAMPLE pTimecodeSample) = 0; - }; -#else - typedef struct IAMTimecodeGeneratorVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTimecodeGenerator *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTimecodeGenerator *This); - ULONG (WINAPI *Release)(IAMTimecodeGenerator *This); - HRESULT (WINAPI *GetTCGMode)(IAMTimecodeGenerator *This,long Param,long *pValue); - HRESULT (WINAPI *SetTCGMode)(IAMTimecodeGenerator *This,long Param,long Value); - HRESULT (WINAPI *put_VITCLine)(IAMTimecodeGenerator *This,long Line); - HRESULT (WINAPI *get_VITCLine)(IAMTimecodeGenerator *This,long *pLine); - HRESULT (WINAPI *SetTimecode)(IAMTimecodeGenerator *This,PTIMECODE_SAMPLE pTimecodeSample); - HRESULT (WINAPI *GetTimecode)(IAMTimecodeGenerator *This,PTIMECODE_SAMPLE pTimecodeSample); - END_INTERFACE - } IAMTimecodeGeneratorVtbl; - struct IAMTimecodeGenerator { - CONST_VTBL struct IAMTimecodeGeneratorVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTimecodeGenerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTimecodeGenerator_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTimecodeGenerator_Release(This) (This)->lpVtbl->Release(This) -#define IAMTimecodeGenerator_GetTCGMode(This,Param,pValue) (This)->lpVtbl->GetTCGMode(This,Param,pValue) -#define IAMTimecodeGenerator_SetTCGMode(This,Param,Value) (This)->lpVtbl->SetTCGMode(This,Param,Value) -#define IAMTimecodeGenerator_put_VITCLine(This,Line) (This)->lpVtbl->put_VITCLine(This,Line) -#define IAMTimecodeGenerator_get_VITCLine(This,pLine) (This)->lpVtbl->get_VITCLine(This,pLine) -#define IAMTimecodeGenerator_SetTimecode(This,pTimecodeSample) (This)->lpVtbl->SetTimecode(This,pTimecodeSample) -#define IAMTimecodeGenerator_GetTimecode(This,pTimecodeSample) (This)->lpVtbl->GetTimecode(This,pTimecodeSample) -#endif -#endif - HRESULT WINAPI IAMTimecodeGenerator_GetTCGMode_Proxy(IAMTimecodeGenerator *This,long Param,long *pValue); - void __RPC_STUB IAMTimecodeGenerator_GetTCGMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeGenerator_SetTCGMode_Proxy(IAMTimecodeGenerator *This,long Param,long Value); - void __RPC_STUB IAMTimecodeGenerator_SetTCGMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeGenerator_put_VITCLine_Proxy(IAMTimecodeGenerator *This,long Line); - void __RPC_STUB IAMTimecodeGenerator_put_VITCLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeGenerator_get_VITCLine_Proxy(IAMTimecodeGenerator *This,long *pLine); - void __RPC_STUB IAMTimecodeGenerator_get_VITCLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeGenerator_SetTimecode_Proxy(IAMTimecodeGenerator *This,PTIMECODE_SAMPLE pTimecodeSample); - void __RPC_STUB IAMTimecodeGenerator_SetTimecode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeGenerator_GetTimecode_Proxy(IAMTimecodeGenerator *This,PTIMECODE_SAMPLE pTimecodeSample); - void __RPC_STUB IAMTimecodeGenerator_GetTimecode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMTimecodeGenerator *PIAMTIMECODEGENERATOR; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0342_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0342_v0_0_s_ifspec; -#ifndef __IAMTimecodeDisplay_INTERFACE_DEFINED__ -#define __IAMTimecodeDisplay_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMTimecodeDisplay; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMTimecodeDisplay : public IUnknown { - public: - virtual HRESULT WINAPI GetTCDisplayEnable(long *pState) = 0; - virtual HRESULT WINAPI SetTCDisplayEnable(long State) = 0; - virtual HRESULT WINAPI GetTCDisplay(long Param,long *pValue) = 0; - virtual HRESULT WINAPI SetTCDisplay(long Param,long Value) = 0; - }; -#else - typedef struct IAMTimecodeDisplayVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMTimecodeDisplay *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMTimecodeDisplay *This); - ULONG (WINAPI *Release)(IAMTimecodeDisplay *This); - HRESULT (WINAPI *GetTCDisplayEnable)(IAMTimecodeDisplay *This,long *pState); - HRESULT (WINAPI *SetTCDisplayEnable)(IAMTimecodeDisplay *This,long State); - HRESULT (WINAPI *GetTCDisplay)(IAMTimecodeDisplay *This,long Param,long *pValue); - HRESULT (WINAPI *SetTCDisplay)(IAMTimecodeDisplay *This,long Param,long Value); - END_INTERFACE - } IAMTimecodeDisplayVtbl; - struct IAMTimecodeDisplay { - CONST_VTBL struct IAMTimecodeDisplayVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMTimecodeDisplay_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMTimecodeDisplay_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMTimecodeDisplay_Release(This) (This)->lpVtbl->Release(This) -#define IAMTimecodeDisplay_GetTCDisplayEnable(This,pState) (This)->lpVtbl->GetTCDisplayEnable(This,pState) -#define IAMTimecodeDisplay_SetTCDisplayEnable(This,State) (This)->lpVtbl->SetTCDisplayEnable(This,State) -#define IAMTimecodeDisplay_GetTCDisplay(This,Param,pValue) (This)->lpVtbl->GetTCDisplay(This,Param,pValue) -#define IAMTimecodeDisplay_SetTCDisplay(This,Param,Value) (This)->lpVtbl->SetTCDisplay(This,Param,Value) -#endif -#endif - HRESULT WINAPI IAMTimecodeDisplay_GetTCDisplayEnable_Proxy(IAMTimecodeDisplay *This,long *pState); - void __RPC_STUB IAMTimecodeDisplay_GetTCDisplayEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeDisplay_SetTCDisplayEnable_Proxy(IAMTimecodeDisplay *This,long State); - void __RPC_STUB IAMTimecodeDisplay_SetTCDisplayEnable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeDisplay_GetTCDisplay_Proxy(IAMTimecodeDisplay *This,long Param,long *pValue); - void __RPC_STUB IAMTimecodeDisplay_GetTCDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMTimecodeDisplay_SetTCDisplay_Proxy(IAMTimecodeDisplay *This,long Param,long Value); - void __RPC_STUB IAMTimecodeDisplay_SetTCDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMTimecodeDisplay *PIAMTIMECODEDISPLAY; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0343_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0343_v0_0_s_ifspec; -#ifndef __IAMDevMemoryAllocator_INTERFACE_DEFINED__ -#define __IAMDevMemoryAllocator_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMDevMemoryAllocator; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMDevMemoryAllocator : public IUnknown { - public: - virtual HRESULT WINAPI GetInfo(DWORD *pdwcbTotalFree,DWORD *pdwcbLargestFree,DWORD *pdwcbTotalMemory,DWORD *pdwcbMinimumChunk) = 0; - virtual HRESULT WINAPI CheckMemory(const BYTE *pBuffer) = 0; - virtual HRESULT WINAPI Alloc(BYTE **ppBuffer,DWORD *pdwcbBuffer) = 0; - virtual HRESULT WINAPI Free(BYTE *pBuffer) = 0; - virtual HRESULT WINAPI GetDevMemoryObject(IUnknown **ppUnkInnner,IUnknown *pUnkOuter) = 0; - }; -#else - typedef struct IAMDevMemoryAllocatorVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMDevMemoryAllocator *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMDevMemoryAllocator *This); - ULONG (WINAPI *Release)(IAMDevMemoryAllocator *This); - HRESULT (WINAPI *GetInfo)(IAMDevMemoryAllocator *This,DWORD *pdwcbTotalFree,DWORD *pdwcbLargestFree,DWORD *pdwcbTotalMemory,DWORD *pdwcbMinimumChunk); - HRESULT (WINAPI *CheckMemory)(IAMDevMemoryAllocator *This,const BYTE *pBuffer); - HRESULT (WINAPI *Alloc)(IAMDevMemoryAllocator *This,BYTE **ppBuffer,DWORD *pdwcbBuffer); - HRESULT (WINAPI *Free)(IAMDevMemoryAllocator *This,BYTE *pBuffer); - HRESULT (WINAPI *GetDevMemoryObject)(IAMDevMemoryAllocator *This,IUnknown **ppUnkInnner,IUnknown *pUnkOuter); - END_INTERFACE - } IAMDevMemoryAllocatorVtbl; - struct IAMDevMemoryAllocator { - CONST_VTBL struct IAMDevMemoryAllocatorVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMDevMemoryAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMDevMemoryAllocator_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMDevMemoryAllocator_Release(This) (This)->lpVtbl->Release(This) -#define IAMDevMemoryAllocator_GetInfo(This,pdwcbTotalFree,pdwcbLargestFree,pdwcbTotalMemory,pdwcbMinimumChunk) (This)->lpVtbl->GetInfo(This,pdwcbTotalFree,pdwcbLargestFree,pdwcbTotalMemory,pdwcbMinimumChunk) -#define IAMDevMemoryAllocator_CheckMemory(This,pBuffer) (This)->lpVtbl->CheckMemory(This,pBuffer) -#define IAMDevMemoryAllocator_Alloc(This,ppBuffer,pdwcbBuffer) (This)->lpVtbl->Alloc(This,ppBuffer,pdwcbBuffer) -#define IAMDevMemoryAllocator_Free(This,pBuffer) (This)->lpVtbl->Free(This,pBuffer) -#define IAMDevMemoryAllocator_GetDevMemoryObject(This,ppUnkInnner,pUnkOuter) (This)->lpVtbl->GetDevMemoryObject(This,ppUnkInnner,pUnkOuter) -#endif -#endif - HRESULT WINAPI IAMDevMemoryAllocator_GetInfo_Proxy(IAMDevMemoryAllocator *This,DWORD *pdwcbTotalFree,DWORD *pdwcbLargestFree,DWORD *pdwcbTotalMemory,DWORD *pdwcbMinimumChunk); - void __RPC_STUB IAMDevMemoryAllocator_GetInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryAllocator_CheckMemory_Proxy(IAMDevMemoryAllocator *This,const BYTE *pBuffer); - void __RPC_STUB IAMDevMemoryAllocator_CheckMemory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryAllocator_Alloc_Proxy(IAMDevMemoryAllocator *This,BYTE **ppBuffer,DWORD *pdwcbBuffer); - void __RPC_STUB IAMDevMemoryAllocator_Alloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryAllocator_Free_Proxy(IAMDevMemoryAllocator *This,BYTE *pBuffer); - void __RPC_STUB IAMDevMemoryAllocator_Free_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryAllocator_GetDevMemoryObject_Proxy(IAMDevMemoryAllocator *This,IUnknown **ppUnkInnner,IUnknown *pUnkOuter); - void __RPC_STUB IAMDevMemoryAllocator_GetDevMemoryObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMDevMemoryAllocator *PAMDEVMEMORYALLOCATOR; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0344_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0344_v0_0_s_ifspec; -#ifndef __IAMDevMemoryControl_INTERFACE_DEFINED__ -#define __IAMDevMemoryControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMDevMemoryControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMDevMemoryControl : public IUnknown { - public: - virtual HRESULT WINAPI QueryWriteSync(void) = 0; - virtual HRESULT WINAPI WriteSync(void) = 0; - virtual HRESULT WINAPI GetDevId(DWORD *pdwDevId) = 0; - }; -#else - typedef struct IAMDevMemoryControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMDevMemoryControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMDevMemoryControl *This); - ULONG (WINAPI *Release)(IAMDevMemoryControl *This); - HRESULT (WINAPI *QueryWriteSync)(IAMDevMemoryControl *This); - HRESULT (WINAPI *WriteSync)(IAMDevMemoryControl *This); - HRESULT (WINAPI *GetDevId)(IAMDevMemoryControl *This,DWORD *pdwDevId); - END_INTERFACE - } IAMDevMemoryControlVtbl; - struct IAMDevMemoryControl { - CONST_VTBL struct IAMDevMemoryControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMDevMemoryControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMDevMemoryControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMDevMemoryControl_Release(This) (This)->lpVtbl->Release(This) -#define IAMDevMemoryControl_QueryWriteSync(This) (This)->lpVtbl->QueryWriteSync(This) -#define IAMDevMemoryControl_WriteSync(This) (This)->lpVtbl->WriteSync(This) -#define IAMDevMemoryControl_GetDevId(This,pdwDevId) (This)->lpVtbl->GetDevId(This,pdwDevId) -#endif -#endif - HRESULT WINAPI IAMDevMemoryControl_QueryWriteSync_Proxy(IAMDevMemoryControl *This); - void __RPC_STUB IAMDevMemoryControl_QueryWriteSync_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryControl_WriteSync_Proxy(IAMDevMemoryControl *This); - void __RPC_STUB IAMDevMemoryControl_WriteSync_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDevMemoryControl_GetDevId_Proxy(IAMDevMemoryControl *This,DWORD *pdwDevId); - void __RPC_STUB IAMDevMemoryControl_GetDevId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMDevMemoryControl *PAMDEVMEMORYCONTROL; - - enum _AMSTREAMSELECTINFOFLAGS { - AMSTREAMSELECTINFO_ENABLED = 0x1,AMSTREAMSELECTINFO_EXCLUSIVE = 0x2 - }; - - enum _AMSTREAMSELECTENABLEFLAGS { - AMSTREAMSELECTENABLE_ENABLE = 0x1,AMSTREAMSELECTENABLE_ENABLEALL = 0x2 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0345_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0345_v0_0_s_ifspec; -#ifndef __IAMStreamSelect_INTERFACE_DEFINED__ -#define __IAMStreamSelect_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMStreamSelect; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMStreamSelect : public IUnknown { - public: - virtual HRESULT WINAPI Count(DWORD *pcStreams) = 0; - virtual HRESULT WINAPI Info(long lIndex,AM_MEDIA_TYPE **ppmt,DWORD *pdwFlags,LCID *plcid,DWORD *pdwGroup,WCHAR **ppszName,IUnknown **ppObject,IUnknown **ppUnk) = 0; - virtual HRESULT WINAPI Enable(long lIndex,DWORD dwFlags) = 0; - }; -#else - typedef struct IAMStreamSelectVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMStreamSelect *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMStreamSelect *This); - ULONG (WINAPI *Release)(IAMStreamSelect *This); - HRESULT (WINAPI *Count)(IAMStreamSelect *This,DWORD *pcStreams); - HRESULT (WINAPI *Info)(IAMStreamSelect *This,long lIndex,AM_MEDIA_TYPE **ppmt,DWORD *pdwFlags,LCID *plcid,DWORD *pdwGroup,WCHAR **ppszName,IUnknown **ppObject,IUnknown **ppUnk); - HRESULT (WINAPI *Enable)(IAMStreamSelect *This,long lIndex,DWORD dwFlags); - END_INTERFACE - } IAMStreamSelectVtbl; - struct IAMStreamSelect { - CONST_VTBL struct IAMStreamSelectVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMStreamSelect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMStreamSelect_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMStreamSelect_Release(This) (This)->lpVtbl->Release(This) -#define IAMStreamSelect_Count(This,pcStreams) (This)->lpVtbl->Count(This,pcStreams) -#define IAMStreamSelect_Info(This,lIndex,ppmt,pdwFlags,plcid,pdwGroup,ppszName,ppObject,ppUnk) (This)->lpVtbl->Info(This,lIndex,ppmt,pdwFlags,plcid,pdwGroup,ppszName,ppObject,ppUnk) -#define IAMStreamSelect_Enable(This,lIndex,dwFlags) (This)->lpVtbl->Enable(This,lIndex,dwFlags) -#endif -#endif - HRESULT WINAPI IAMStreamSelect_Count_Proxy(IAMStreamSelect *This,DWORD *pcStreams); - void __RPC_STUB IAMStreamSelect_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamSelect_Info_Proxy(IAMStreamSelect *This,long lIndex,AM_MEDIA_TYPE **ppmt,DWORD *pdwFlags,LCID *plcid,DWORD *pdwGroup,WCHAR **ppszName,IUnknown **ppObject,IUnknown **ppUnk); - void __RPC_STUB IAMStreamSelect_Info_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMStreamSelect_Enable_Proxy(IAMStreamSelect *This,long lIndex,DWORD dwFlags); - void __RPC_STUB IAMStreamSelect_Enable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef IAMStreamSelect *PAMSTREAMSELECT; - - enum _AMRESCTL_RESERVEFLAGS { - AMRESCTL_RESERVEFLAGS_RESERVE = 0,AMRESCTL_RESERVEFLAGS_UNRESERVE = 0x1 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0346_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0346_v0_0_s_ifspec; -#ifndef __IAMResourceControl_INTERFACE_DEFINED__ -#define __IAMResourceControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMResourceControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMResourceControl : public IUnknown { - public: - virtual HRESULT WINAPI Reserve(DWORD dwFlags,PVOID pvReserved) = 0; - }; -#else - typedef struct IAMResourceControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMResourceControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMResourceControl *This); - ULONG (WINAPI *Release)(IAMResourceControl *This); - HRESULT (WINAPI *Reserve)(IAMResourceControl *This,DWORD dwFlags,PVOID pvReserved); - END_INTERFACE - } IAMResourceControlVtbl; - struct IAMResourceControl { - CONST_VTBL struct IAMResourceControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMResourceControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMResourceControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMResourceControl_Release(This) (This)->lpVtbl->Release(This) -#define IAMResourceControl_Reserve(This,dwFlags,pvReserved) (This)->lpVtbl->Reserve(This,dwFlags,pvReserved) -#endif -#endif - HRESULT WINAPI IAMResourceControl_Reserve_Proxy(IAMResourceControl *This,DWORD dwFlags,PVOID pvReserved); - void __RPC_STUB IAMResourceControl_Reserve_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMClockAdjust_INTERFACE_DEFINED__ -#define __IAMClockAdjust_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMClockAdjust; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMClockAdjust : public IUnknown { - public: - virtual HRESULT WINAPI SetClockDelta(REFERENCE_TIME rtDelta) = 0; - }; -#else - typedef struct IAMClockAdjustVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMClockAdjust *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMClockAdjust *This); - ULONG (WINAPI *Release)(IAMClockAdjust *This); - HRESULT (WINAPI *SetClockDelta)(IAMClockAdjust *This,REFERENCE_TIME rtDelta); - END_INTERFACE - } IAMClockAdjustVtbl; - struct IAMClockAdjust { - CONST_VTBL struct IAMClockAdjustVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMClockAdjust_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMClockAdjust_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMClockAdjust_Release(This) (This)->lpVtbl->Release(This) -#define IAMClockAdjust_SetClockDelta(This,rtDelta) (This)->lpVtbl->SetClockDelta(This,rtDelta) -#endif -#endif - HRESULT WINAPI IAMClockAdjust_SetClockDelta_Proxy(IAMClockAdjust *This,REFERENCE_TIME rtDelta); - void __RPC_STUB IAMClockAdjust_SetClockDelta_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_FILTER_MISC_FLAGS { - AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0348_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0348_v0_0_s_ifspec; -#ifndef __IAMFilterMiscFlags_INTERFACE_DEFINED__ -#define __IAMFilterMiscFlags_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMFilterMiscFlags; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMFilterMiscFlags : public IUnknown { - public: - virtual ULONG WINAPI GetMiscFlags(void) = 0; - }; -#else - typedef struct IAMFilterMiscFlagsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMFilterMiscFlags *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMFilterMiscFlags *This); - ULONG (WINAPI *Release)(IAMFilterMiscFlags *This); - ULONG (WINAPI *GetMiscFlags)(IAMFilterMiscFlags *This); - END_INTERFACE - } IAMFilterMiscFlagsVtbl; - struct IAMFilterMiscFlags { - CONST_VTBL struct IAMFilterMiscFlagsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMFilterMiscFlags_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMFilterMiscFlags_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMFilterMiscFlags_Release(This) (This)->lpVtbl->Release(This) -#define IAMFilterMiscFlags_GetMiscFlags(This) (This)->lpVtbl->GetMiscFlags(This) -#endif -#endif - ULONG WINAPI IAMFilterMiscFlags_GetMiscFlags_Proxy(IAMFilterMiscFlags *This); - void __RPC_STUB IAMFilterMiscFlags_GetMiscFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDrawVideoImage_INTERFACE_DEFINED__ -#define __IDrawVideoImage_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDrawVideoImage; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDrawVideoImage : public IUnknown { - public: - virtual HRESULT WINAPI DrawVideoImageBegin(void) = 0; - virtual HRESULT WINAPI DrawVideoImageEnd(void) = 0; - virtual HRESULT WINAPI DrawVideoImageDraw(HDC hdc,LPRECT lprcSrc,LPRECT lprcDst) = 0; - }; -#else - typedef struct IDrawVideoImageVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDrawVideoImage *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDrawVideoImage *This); - ULONG (WINAPI *Release)(IDrawVideoImage *This); - HRESULT (WINAPI *DrawVideoImageBegin)(IDrawVideoImage *This); - HRESULT (WINAPI *DrawVideoImageEnd)(IDrawVideoImage *This); - HRESULT (WINAPI *DrawVideoImageDraw)(IDrawVideoImage *This,HDC hdc,LPRECT lprcSrc,LPRECT lprcDst); - END_INTERFACE - } IDrawVideoImageVtbl; - struct IDrawVideoImage { - CONST_VTBL struct IDrawVideoImageVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDrawVideoImage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDrawVideoImage_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDrawVideoImage_Release(This) (This)->lpVtbl->Release(This) -#define IDrawVideoImage_DrawVideoImageBegin(This) (This)->lpVtbl->DrawVideoImageBegin(This) -#define IDrawVideoImage_DrawVideoImageEnd(This) (This)->lpVtbl->DrawVideoImageEnd(This) -#define IDrawVideoImage_DrawVideoImageDraw(This,hdc,lprcSrc,lprcDst) (This)->lpVtbl->DrawVideoImageDraw(This,hdc,lprcSrc,lprcDst) -#endif -#endif - HRESULT WINAPI IDrawVideoImage_DrawVideoImageBegin_Proxy(IDrawVideoImage *This); - void __RPC_STUB IDrawVideoImage_DrawVideoImageBegin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDrawVideoImage_DrawVideoImageEnd_Proxy(IDrawVideoImage *This); - void __RPC_STUB IDrawVideoImage_DrawVideoImageEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDrawVideoImage_DrawVideoImageDraw_Proxy(IDrawVideoImage *This,HDC hdc,LPRECT lprcSrc,LPRECT lprcDst); - void __RPC_STUB IDrawVideoImage_DrawVideoImageDraw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDecimateVideoImage_INTERFACE_DEFINED__ -#define __IDecimateVideoImage_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDecimateVideoImage; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDecimateVideoImage : public IUnknown { - public: - virtual HRESULT WINAPI SetDecimationImageSize(long lWidth,long lHeight) = 0; - virtual HRESULT WINAPI ResetDecimationImageSize(void) = 0; - }; -#else - typedef struct IDecimateVideoImageVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDecimateVideoImage *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDecimateVideoImage *This); - ULONG (WINAPI *Release)(IDecimateVideoImage *This); - HRESULT (WINAPI *SetDecimationImageSize)(IDecimateVideoImage *This,long lWidth,long lHeight); - HRESULT (WINAPI *ResetDecimationImageSize)(IDecimateVideoImage *This); - END_INTERFACE - } IDecimateVideoImageVtbl; - struct IDecimateVideoImage { - CONST_VTBL struct IDecimateVideoImageVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDecimateVideoImage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDecimateVideoImage_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDecimateVideoImage_Release(This) (This)->lpVtbl->Release(This) -#define IDecimateVideoImage_SetDecimationImageSize(This,lWidth,lHeight) (This)->lpVtbl->SetDecimationImageSize(This,lWidth,lHeight) -#define IDecimateVideoImage_ResetDecimationImageSize(This) (This)->lpVtbl->ResetDecimationImageSize(This) -#endif -#endif - HRESULT WINAPI IDecimateVideoImage_SetDecimationImageSize_Proxy(IDecimateVideoImage *This,long lWidth,long lHeight); - void __RPC_STUB IDecimateVideoImage_SetDecimationImageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDecimateVideoImage_ResetDecimationImageSize_Proxy(IDecimateVideoImage *This); - void __RPC_STUB IDecimateVideoImage_ResetDecimationImageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum _DECIMATION_USAGE { - DECIMATION_LEGACY = 0, - DECIMATION_USE_DECODER_ONLY,DECIMATION_USE_VIDEOPORT_ONLY,DECIMATION_USE_OVERLAY_ONLY, - DECIMATION_DEFAULT - } DECIMATION_USAGE; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0351_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0351_v0_0_s_ifspec; -#ifndef __IAMVideoDecimationProperties_INTERFACE_DEFINED__ -#define __IAMVideoDecimationProperties_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMVideoDecimationProperties; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMVideoDecimationProperties : public IUnknown { - public: - virtual HRESULT WINAPI QueryDecimationUsage(DECIMATION_USAGE *lpUsage) = 0; - virtual HRESULT WINAPI SetDecimationUsage(DECIMATION_USAGE Usage) = 0; - }; -#else - typedef struct IAMVideoDecimationPropertiesVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMVideoDecimationProperties *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMVideoDecimationProperties *This); - ULONG (WINAPI *Release)(IAMVideoDecimationProperties *This); - HRESULT (WINAPI *QueryDecimationUsage)(IAMVideoDecimationProperties *This,DECIMATION_USAGE *lpUsage); - HRESULT (WINAPI *SetDecimationUsage)(IAMVideoDecimationProperties *This,DECIMATION_USAGE Usage); - END_INTERFACE - } IAMVideoDecimationPropertiesVtbl; - struct IAMVideoDecimationProperties { - CONST_VTBL struct IAMVideoDecimationPropertiesVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMVideoDecimationProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMVideoDecimationProperties_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMVideoDecimationProperties_Release(This) (This)->lpVtbl->Release(This) -#define IAMVideoDecimationProperties_QueryDecimationUsage(This,lpUsage) (This)->lpVtbl->QueryDecimationUsage(This,lpUsage) -#define IAMVideoDecimationProperties_SetDecimationUsage(This,Usage) (This)->lpVtbl->SetDecimationUsage(This,Usage) -#endif -#endif - HRESULT WINAPI IAMVideoDecimationProperties_QueryDecimationUsage_Proxy(IAMVideoDecimationProperties *This,DECIMATION_USAGE *lpUsage); - void __RPC_STUB IAMVideoDecimationProperties_QueryDecimationUsage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMVideoDecimationProperties_SetDecimationUsage_Proxy(IAMVideoDecimationProperties *This,DECIMATION_USAGE Usage); - void __RPC_STUB IAMVideoDecimationProperties_SetDecimationUsage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVideoFrameStep_INTERFACE_DEFINED__ -#define __IVideoFrameStep_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVideoFrameStep; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVideoFrameStep : public IUnknown { - public: - virtual HRESULT WINAPI Step(DWORD dwFrames,IUnknown *pStepObject) = 0; - virtual HRESULT WINAPI CanStep(long bMultiple,IUnknown *pStepObject) = 0; - virtual HRESULT WINAPI CancelStep(void) = 0; - }; -#else - typedef struct IVideoFrameStepVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVideoFrameStep *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVideoFrameStep *This); - ULONG (WINAPI *Release)(IVideoFrameStep *This); - HRESULT (WINAPI *Step)(IVideoFrameStep *This,DWORD dwFrames,IUnknown *pStepObject); - HRESULT (WINAPI *CanStep)(IVideoFrameStep *This,long bMultiple,IUnknown *pStepObject); - HRESULT (WINAPI *CancelStep)(IVideoFrameStep *This); - END_INTERFACE - } IVideoFrameStepVtbl; - struct IVideoFrameStep { - CONST_VTBL struct IVideoFrameStepVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVideoFrameStep_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVideoFrameStep_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVideoFrameStep_Release(This) (This)->lpVtbl->Release(This) -#define IVideoFrameStep_Step(This,dwFrames,pStepObject) (This)->lpVtbl->Step(This,dwFrames,pStepObject) -#define IVideoFrameStep_CanStep(This,bMultiple,pStepObject) (This)->lpVtbl->CanStep(This,bMultiple,pStepObject) -#define IVideoFrameStep_CancelStep(This) (This)->lpVtbl->CancelStep(This) -#endif -#endif - HRESULT WINAPI IVideoFrameStep_Step_Proxy(IVideoFrameStep *This,DWORD dwFrames,IUnknown *pStepObject); - void __RPC_STUB IVideoFrameStep_Step_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoFrameStep_CanStep_Proxy(IVideoFrameStep *This,long bMultiple,IUnknown *pStepObject); - void __RPC_STUB IVideoFrameStep_CanStep_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVideoFrameStep_CancelStep_Proxy(IVideoFrameStep *This); - void __RPC_STUB IVideoFrameStep_CancelStep_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_PUSHSOURCE_FLAGS { - AM_PUSHSOURCECAPS_INTERNAL_RM = 0x1,AM_PUSHSOURCECAPS_NOT_LIVE = 0x2,AM_PUSHSOURCECAPS_PRIVATE_CLOCK = 0x4, - AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = 0x10000,AM_PUSHSOURCEREQS_USE_CLOCK_CHAIN = 0x20000 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0353_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0353_v0_0_s_ifspec; -#ifndef __IAMLatency_INTERFACE_DEFINED__ -#define __IAMLatency_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMLatency; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMLatency : public IUnknown { - public: - virtual HRESULT WINAPI GetLatency(REFERENCE_TIME *prtLatency) = 0; - }; -#else - typedef struct IAMLatencyVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMLatency *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMLatency *This); - ULONG (WINAPI *Release)(IAMLatency *This); - HRESULT (WINAPI *GetLatency)(IAMLatency *This,REFERENCE_TIME *prtLatency); - END_INTERFACE - } IAMLatencyVtbl; - struct IAMLatency { - CONST_VTBL struct IAMLatencyVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMLatency_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMLatency_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMLatency_Release(This) (This)->lpVtbl->Release(This) -#define IAMLatency_GetLatency(This,prtLatency) (This)->lpVtbl->GetLatency(This,prtLatency) -#endif -#endif - HRESULT WINAPI IAMLatency_GetLatency_Proxy(IAMLatency *This,REFERENCE_TIME *prtLatency); - void __RPC_STUB IAMLatency_GetLatency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMPushSource_INTERFACE_DEFINED__ -#define __IAMPushSource_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMPushSource; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMPushSource : public IAMLatency { - public: - virtual HRESULT WINAPI GetPushSourceFlags(ULONG *pFlags) = 0; - virtual HRESULT WINAPI SetPushSourceFlags(ULONG Flags) = 0; - virtual HRESULT WINAPI SetStreamOffset(REFERENCE_TIME rtOffset) = 0; - virtual HRESULT WINAPI GetStreamOffset(REFERENCE_TIME *prtOffset) = 0; - virtual HRESULT WINAPI GetMaxStreamOffset(REFERENCE_TIME *prtMaxOffset) = 0; - virtual HRESULT WINAPI SetMaxStreamOffset(REFERENCE_TIME rtMaxOffset) = 0; - }; -#else - typedef struct IAMPushSourceVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMPushSource *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMPushSource *This); - ULONG (WINAPI *Release)(IAMPushSource *This); - HRESULT (WINAPI *GetLatency)(IAMPushSource *This,REFERENCE_TIME *prtLatency); - HRESULT (WINAPI *GetPushSourceFlags)(IAMPushSource *This,ULONG *pFlags); - HRESULT (WINAPI *SetPushSourceFlags)(IAMPushSource *This,ULONG Flags); - HRESULT (WINAPI *SetStreamOffset)(IAMPushSource *This,REFERENCE_TIME rtOffset); - HRESULT (WINAPI *GetStreamOffset)(IAMPushSource *This,REFERENCE_TIME *prtOffset); - HRESULT (WINAPI *GetMaxStreamOffset)(IAMPushSource *This,REFERENCE_TIME *prtMaxOffset); - HRESULT (WINAPI *SetMaxStreamOffset)(IAMPushSource *This,REFERENCE_TIME rtMaxOffset); - END_INTERFACE - } IAMPushSourceVtbl; - struct IAMPushSource { - CONST_VTBL struct IAMPushSourceVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMPushSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMPushSource_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMPushSource_Release(This) (This)->lpVtbl->Release(This) -#define IAMPushSource_GetLatency(This,prtLatency) (This)->lpVtbl->GetLatency(This,prtLatency) -#define IAMPushSource_GetPushSourceFlags(This,pFlags) (This)->lpVtbl->GetPushSourceFlags(This,pFlags) -#define IAMPushSource_SetPushSourceFlags(This,Flags) (This)->lpVtbl->SetPushSourceFlags(This,Flags) -#define IAMPushSource_SetStreamOffset(This,rtOffset) (This)->lpVtbl->SetStreamOffset(This,rtOffset) -#define IAMPushSource_GetStreamOffset(This,prtOffset) (This)->lpVtbl->GetStreamOffset(This,prtOffset) -#define IAMPushSource_GetMaxStreamOffset(This,prtMaxOffset) (This)->lpVtbl->GetMaxStreamOffset(This,prtMaxOffset) -#define IAMPushSource_SetMaxStreamOffset(This,rtMaxOffset) (This)->lpVtbl->SetMaxStreamOffset(This,rtMaxOffset) -#endif -#endif - HRESULT WINAPI IAMPushSource_GetPushSourceFlags_Proxy(IAMPushSource *This,ULONG *pFlags); - void __RPC_STUB IAMPushSource_GetPushSourceFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMPushSource_SetPushSourceFlags_Proxy(IAMPushSource *This,ULONG Flags); - void __RPC_STUB IAMPushSource_SetPushSourceFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMPushSource_SetStreamOffset_Proxy(IAMPushSource *This,REFERENCE_TIME rtOffset); - void __RPC_STUB IAMPushSource_SetStreamOffset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMPushSource_GetStreamOffset_Proxy(IAMPushSource *This,REFERENCE_TIME *prtOffset); - void __RPC_STUB IAMPushSource_GetStreamOffset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMPushSource_GetMaxStreamOffset_Proxy(IAMPushSource *This,REFERENCE_TIME *prtMaxOffset); - void __RPC_STUB IAMPushSource_GetMaxStreamOffset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMPushSource_SetMaxStreamOffset_Proxy(IAMPushSource *This,REFERENCE_TIME rtMaxOffset); - void __RPC_STUB IAMPushSource_SetMaxStreamOffset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMDeviceRemoval_INTERFACE_DEFINED__ -#define __IAMDeviceRemoval_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMDeviceRemoval; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMDeviceRemoval : public IUnknown { - public: - virtual HRESULT WINAPI DeviceInfo(CLSID *pclsidInterfaceClass,WCHAR **pwszSymbolicLink) = 0; - virtual HRESULT WINAPI Reassociate(void) = 0; - virtual HRESULT WINAPI Disassociate(void) = 0; - }; -#else - typedef struct IAMDeviceRemovalVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMDeviceRemoval *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMDeviceRemoval *This); - ULONG (WINAPI *Release)(IAMDeviceRemoval *This); - HRESULT (WINAPI *DeviceInfo)(IAMDeviceRemoval *This,CLSID *pclsidInterfaceClass,WCHAR **pwszSymbolicLink); - HRESULT (WINAPI *Reassociate)(IAMDeviceRemoval *This); - HRESULT (WINAPI *Disassociate)(IAMDeviceRemoval *This); - END_INTERFACE - } IAMDeviceRemovalVtbl; - struct IAMDeviceRemoval { - CONST_VTBL struct IAMDeviceRemovalVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMDeviceRemoval_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMDeviceRemoval_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMDeviceRemoval_Release(This) (This)->lpVtbl->Release(This) -#define IAMDeviceRemoval_DeviceInfo(This,pclsidInterfaceClass,pwszSymbolicLink) (This)->lpVtbl->DeviceInfo(This,pclsidInterfaceClass,pwszSymbolicLink) -#define IAMDeviceRemoval_Reassociate(This) (This)->lpVtbl->Reassociate(This) -#define IAMDeviceRemoval_Disassociate(This) (This)->lpVtbl->Disassociate(This) -#endif -#endif - HRESULT WINAPI IAMDeviceRemoval_DeviceInfo_Proxy(IAMDeviceRemoval *This,CLSID *pclsidInterfaceClass,WCHAR **pwszSymbolicLink); - void __RPC_STUB IAMDeviceRemoval_DeviceInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDeviceRemoval_Reassociate_Proxy(IAMDeviceRemoval *This); - void __RPC_STUB IAMDeviceRemoval_Reassociate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMDeviceRemoval_Disassociate_Proxy(IAMDeviceRemoval *This); - void __RPC_STUB IAMDeviceRemoval_Disassociate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef struct __MIDL___MIDL_itf_strmif_0355_0001 { - DWORD dwDVAAuxSrc; - DWORD dwDVAAuxCtl; - DWORD dwDVAAuxSrc1; - DWORD dwDVAAuxCtl1; - DWORD dwDVVAuxSrc; - DWORD dwDVVAuxCtl; - DWORD dwDVReserved[2]; - } DVINFO; - - typedef struct __MIDL___MIDL_itf_strmif_0355_0001 *PDVINFO; - - enum _DVENCODERRESOLUTION { - DVENCODERRESOLUTION_720x480 = 2012,DVENCODERRESOLUTION_360x240 = 2013,DVENCODERRESOLUTION_180x120 = 2014,DVENCODERRESOLUTION_88x60 = 2015 - }; - - enum _DVENCODERVIDEOFORMAT { - DVENCODERVIDEOFORMAT_NTSC = 2000,DVENCODERVIDEOFORMAT_PAL = 2001 - }; - - enum _DVENCODERFORMAT { - DVENCODERFORMAT_DVSD = 2007,DVENCODERFORMAT_DVHD = 2008,DVENCODERFORMAT_DVSL = 2009 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0355_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0355_v0_0_s_ifspec; -#ifndef __IDVEnc_INTERFACE_DEFINED__ -#define __IDVEnc_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDVEnc; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDVEnc : public IUnknown { - public: - virtual HRESULT WINAPI get_IFormatResolution(int *VideoFormat,int *DVFormat,int *Resolution,BYTE fDVInfo,DVINFO *sDVInfo) = 0; - virtual HRESULT WINAPI put_IFormatResolution(int VideoFormat,int DVFormat,int Resolution,BYTE fDVInfo,DVINFO *sDVInfo) = 0; - }; -#else - typedef struct IDVEncVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDVEnc *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDVEnc *This); - ULONG (WINAPI *Release)(IDVEnc *This); - HRESULT (WINAPI *get_IFormatResolution)(IDVEnc *This,int *VideoFormat,int *DVFormat,int *Resolution,BYTE fDVInfo,DVINFO *sDVInfo); - HRESULT (WINAPI *put_IFormatResolution)(IDVEnc *This,int VideoFormat,int DVFormat,int Resolution,BYTE fDVInfo,DVINFO *sDVInfo); - END_INTERFACE - } IDVEncVtbl; - struct IDVEnc { - CONST_VTBL struct IDVEncVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDVEnc_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDVEnc_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDVEnc_Release(This) (This)->lpVtbl->Release(This) -#define IDVEnc_get_IFormatResolution(This,VideoFormat,DVFormat,Resolution,fDVInfo,sDVInfo) (This)->lpVtbl->get_IFormatResolution(This,VideoFormat,DVFormat,Resolution,fDVInfo,sDVInfo) -#define IDVEnc_put_IFormatResolution(This,VideoFormat,DVFormat,Resolution,fDVInfo,sDVInfo) (This)->lpVtbl->put_IFormatResolution(This,VideoFormat,DVFormat,Resolution,fDVInfo,sDVInfo) -#endif -#endif - HRESULT WINAPI IDVEnc_get_IFormatResolution_Proxy(IDVEnc *This,int *VideoFormat,int *DVFormat,int *Resolution,BYTE fDVInfo,DVINFO *sDVInfo); - void __RPC_STUB IDVEnc_get_IFormatResolution_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDVEnc_put_IFormatResolution_Proxy(IDVEnc *This,int VideoFormat,int DVFormat,int Resolution,BYTE fDVInfo,DVINFO *sDVInfo); - void __RPC_STUB IDVEnc_put_IFormatResolution_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _DVDECODERRESOLUTION { - DVDECODERRESOLUTION_720x480 = 1000,DVDECODERRESOLUTION_360x240 = 1001,DVDECODERRESOLUTION_180x120 = 1002,DVDECODERRESOLUTION_88x60 = 1003 - }; - - enum _DVRESOLUTION { - DVRESOLUTION_FULL = 1000,DVRESOLUTION_HALF = 1001,DVRESOLUTION_QUARTER = 1002,DVRESOLUTION_DC = 1003 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0356_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0356_v0_0_s_ifspec; -#ifndef __IIPDVDec_INTERFACE_DEFINED__ -#define __IIPDVDec_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IIPDVDec; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IIPDVDec : public IUnknown { - public: - virtual HRESULT WINAPI get_IPDisplay(int *displayPix) = 0; - virtual HRESULT WINAPI put_IPDisplay(int displayPix) = 0; - }; -#else - typedef struct IIPDVDecVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IIPDVDec *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IIPDVDec *This); - ULONG (WINAPI *Release)(IIPDVDec *This); - HRESULT (WINAPI *get_IPDisplay)(IIPDVDec *This,int *displayPix); - HRESULT (WINAPI *put_IPDisplay)(IIPDVDec *This,int displayPix); - END_INTERFACE - } IIPDVDecVtbl; - struct IIPDVDec { - CONST_VTBL struct IIPDVDecVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IIPDVDec_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IIPDVDec_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IIPDVDec_Release(This) (This)->lpVtbl->Release(This) -#define IIPDVDec_get_IPDisplay(This,displayPix) (This)->lpVtbl->get_IPDisplay(This,displayPix) -#define IIPDVDec_put_IPDisplay(This,displayPix) (This)->lpVtbl->put_IPDisplay(This,displayPix) -#endif -#endif - HRESULT WINAPI IIPDVDec_get_IPDisplay_Proxy(IIPDVDec *This,int *displayPix); - void __RPC_STUB IIPDVDec_get_IPDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IIPDVDec_put_IPDisplay_Proxy(IIPDVDec *This,int displayPix); - void __RPC_STUB IIPDVDec_put_IPDisplay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDVRGB219_INTERFACE_DEFINED__ -#define __IDVRGB219_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDVRGB219; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDVRGB219 : public IUnknown { - public: - virtual HRESULT WINAPI SetRGB219(WINBOOL bState) = 0; - }; -#else - typedef struct IDVRGB219Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDVRGB219 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDVRGB219 *This); - ULONG (WINAPI *Release)(IDVRGB219 *This); - HRESULT (WINAPI *SetRGB219)(IDVRGB219 *This,WINBOOL bState); - END_INTERFACE - } IDVRGB219Vtbl; - struct IDVRGB219 { - CONST_VTBL struct IDVRGB219Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDVRGB219_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDVRGB219_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDVRGB219_Release(This) (This)->lpVtbl->Release(This) -#define IDVRGB219_SetRGB219(This,bState) (This)->lpVtbl->SetRGB219(This,bState) -#endif -#endif - HRESULT WINAPI IDVRGB219_SetRGB219_Proxy(IDVRGB219 *This,WINBOOL bState); - void __RPC_STUB IDVRGB219_SetRGB219_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDVSplitter_INTERFACE_DEFINED__ -#define __IDVSplitter_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDVSplitter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDVSplitter : public IUnknown { - public: - virtual HRESULT WINAPI DiscardAlternateVideoFrames(int nDiscard) = 0; - }; -#else - typedef struct IDVSplitterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDVSplitter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDVSplitter *This); - ULONG (WINAPI *Release)(IDVSplitter *This); - HRESULT (WINAPI *DiscardAlternateVideoFrames)(IDVSplitter *This,int nDiscard); - END_INTERFACE - } IDVSplitterVtbl; - struct IDVSplitter { - CONST_VTBL struct IDVSplitterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDVSplitter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDVSplitter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDVSplitter_Release(This) (This)->lpVtbl->Release(This) -#define IDVSplitter_DiscardAlternateVideoFrames(This,nDiscard) (This)->lpVtbl->DiscardAlternateVideoFrames(This,nDiscard) -#endif -#endif - HRESULT WINAPI IDVSplitter_DiscardAlternateVideoFrames_Proxy(IDVSplitter *This,int nDiscard); - void __RPC_STUB IDVSplitter_DiscardAlternateVideoFrames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_AUDIO_RENDERER_STAT_PARAM { - AM_AUDREND_STAT_PARAM_BREAK_COUNT = 1, - AM_AUDREND_STAT_PARAM_SLAVE_MODE,AM_AUDREND_STAT_PARAM_SILENCE_DUR, - AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR,AM_AUDREND_STAT_PARAM_DISCONTINUITIES, - AM_AUDREND_STAT_PARAM_SLAVE_RATE,AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR, - AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR,AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR, - AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR,AM_AUDREND_STAT_PARAM_BUFFERFULLNESS, - AM_AUDREND_STAT_PARAM_JITTER - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0359_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0359_v0_0_s_ifspec; -#ifndef __IAMAudioRendererStats_INTERFACE_DEFINED__ -#define __IAMAudioRendererStats_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMAudioRendererStats; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMAudioRendererStats : public IUnknown { - public: - virtual HRESULT WINAPI GetStatParam(DWORD dwParam,DWORD *pdwParam1,DWORD *pdwParam2) = 0; - }; -#else - typedef struct IAMAudioRendererStatsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMAudioRendererStats *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMAudioRendererStats *This); - ULONG (WINAPI *Release)(IAMAudioRendererStats *This); - HRESULT (WINAPI *GetStatParam)(IAMAudioRendererStats *This,DWORD dwParam,DWORD *pdwParam1,DWORD *pdwParam2); - END_INTERFACE - } IAMAudioRendererStatsVtbl; - struct IAMAudioRendererStats { - CONST_VTBL struct IAMAudioRendererStatsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMAudioRendererStats_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMAudioRendererStats_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMAudioRendererStats_Release(This) (This)->lpVtbl->Release(This) -#define IAMAudioRendererStats_GetStatParam(This,dwParam,pdwParam1,pdwParam2) (This)->lpVtbl->GetStatParam(This,dwParam,pdwParam1,pdwParam2) -#endif -#endif - HRESULT WINAPI IAMAudioRendererStats_GetStatParam_Proxy(IAMAudioRendererStats *This,DWORD dwParam,DWORD *pdwParam1,DWORD *pdwParam2); - void __RPC_STUB IAMAudioRendererStats_GetStatParam_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_INTF_SEARCH_FLAGS { - AM_INTF_SEARCH_INPUT_PIN = 0x1,AM_INTF_SEARCH_OUTPUT_PIN = 0x2,AM_INTF_SEARCH_FILTER = 0x4 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0361_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0361_v0_0_s_ifspec; -#ifndef __IAMGraphStreams_INTERFACE_DEFINED__ -#define __IAMGraphStreams_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMGraphStreams; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMGraphStreams : public IUnknown { - public: - virtual HRESULT WINAPI FindUpstreamInterface(IPin *pPin,REFIID riid,void **ppvInterface,DWORD dwFlags) = 0; - virtual HRESULT WINAPI SyncUsingStreamOffset(WINBOOL bUseStreamOffset) = 0; - virtual HRESULT WINAPI SetMaxGraphLatency(REFERENCE_TIME rtMaxGraphLatency) = 0; - }; -#else - typedef struct IAMGraphStreamsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMGraphStreams *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMGraphStreams *This); - ULONG (WINAPI *Release)(IAMGraphStreams *This); - HRESULT (WINAPI *FindUpstreamInterface)(IAMGraphStreams *This,IPin *pPin,REFIID riid,void **ppvInterface,DWORD dwFlags); - HRESULT (WINAPI *SyncUsingStreamOffset)(IAMGraphStreams *This,WINBOOL bUseStreamOffset); - HRESULT (WINAPI *SetMaxGraphLatency)(IAMGraphStreams *This,REFERENCE_TIME rtMaxGraphLatency); - END_INTERFACE - } IAMGraphStreamsVtbl; - struct IAMGraphStreams { - CONST_VTBL struct IAMGraphStreamsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMGraphStreams_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMGraphStreams_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMGraphStreams_Release(This) (This)->lpVtbl->Release(This) -#define IAMGraphStreams_FindUpstreamInterface(This,pPin,riid,ppvInterface,dwFlags) (This)->lpVtbl->FindUpstreamInterface(This,pPin,riid,ppvInterface,dwFlags) -#define IAMGraphStreams_SyncUsingStreamOffset(This,bUseStreamOffset) (This)->lpVtbl->SyncUsingStreamOffset(This,bUseStreamOffset) -#define IAMGraphStreams_SetMaxGraphLatency(This,rtMaxGraphLatency) (This)->lpVtbl->SetMaxGraphLatency(This,rtMaxGraphLatency) -#endif -#endif - HRESULT WINAPI IAMGraphStreams_FindUpstreamInterface_Proxy(IAMGraphStreams *This,IPin *pPin,REFIID riid,void **ppvInterface,DWORD dwFlags); - void __RPC_STUB IAMGraphStreams_FindUpstreamInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMGraphStreams_SyncUsingStreamOffset_Proxy(IAMGraphStreams *This,WINBOOL bUseStreamOffset); - void __RPC_STUB IAMGraphStreams_SyncUsingStreamOffset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMGraphStreams_SetMaxGraphLatency_Proxy(IAMGraphStreams *This,REFERENCE_TIME rtMaxGraphLatency); - void __RPC_STUB IAMGraphStreams_SetMaxGraphLatency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum AMOVERLAYFX { - AMOVERFX_NOFX = 0,AMOVERFX_MIRRORLEFTRIGHT = 0x2,AMOVERFX_MIRRORUPDOWN = 0x4,AMOVERFX_DEINTERLACE = 0x8 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0362_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0362_v0_0_s_ifspec; -#ifndef __IAMOverlayFX_INTERFACE_DEFINED__ -#define __IAMOverlayFX_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMOverlayFX; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMOverlayFX : public IUnknown { - public: - virtual HRESULT WINAPI QueryOverlayFXCaps(DWORD *lpdwOverlayFXCaps) = 0; - virtual HRESULT WINAPI SetOverlayFX(DWORD dwOverlayFX) = 0; - virtual HRESULT WINAPI GetOverlayFX(DWORD *lpdwOverlayFX) = 0; - }; -#else - typedef struct IAMOverlayFXVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMOverlayFX *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMOverlayFX *This); - ULONG (WINAPI *Release)(IAMOverlayFX *This); - HRESULT (WINAPI *QueryOverlayFXCaps)(IAMOverlayFX *This,DWORD *lpdwOverlayFXCaps); - HRESULT (WINAPI *SetOverlayFX)(IAMOverlayFX *This,DWORD dwOverlayFX); - HRESULT (WINAPI *GetOverlayFX)(IAMOverlayFX *This,DWORD *lpdwOverlayFX); - END_INTERFACE - } IAMOverlayFXVtbl; - struct IAMOverlayFX { - CONST_VTBL struct IAMOverlayFXVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMOverlayFX_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMOverlayFX_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMOverlayFX_Release(This) (This)->lpVtbl->Release(This) -#define IAMOverlayFX_QueryOverlayFXCaps(This,lpdwOverlayFXCaps) (This)->lpVtbl->QueryOverlayFXCaps(This,lpdwOverlayFXCaps) -#define IAMOverlayFX_SetOverlayFX(This,dwOverlayFX) (This)->lpVtbl->SetOverlayFX(This,dwOverlayFX) -#define IAMOverlayFX_GetOverlayFX(This,lpdwOverlayFX) (This)->lpVtbl->GetOverlayFX(This,lpdwOverlayFX) -#endif -#endif - HRESULT WINAPI IAMOverlayFX_QueryOverlayFXCaps_Proxy(IAMOverlayFX *This,DWORD *lpdwOverlayFXCaps); - void __RPC_STUB IAMOverlayFX_QueryOverlayFXCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMOverlayFX_SetOverlayFX_Proxy(IAMOverlayFX *This,DWORD dwOverlayFX); - void __RPC_STUB IAMOverlayFX_SetOverlayFX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMOverlayFX_GetOverlayFX_Proxy(IAMOverlayFX *This,DWORD *lpdwOverlayFX); - void __RPC_STUB IAMOverlayFX_GetOverlayFX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMOpenProgress_INTERFACE_DEFINED__ -#define __IAMOpenProgress_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMOpenProgress; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMOpenProgress : public IUnknown { - public: - virtual HRESULT WINAPI QueryProgress(LONGLONG *pllTotal,LONGLONG *pllCurrent) = 0; - virtual HRESULT WINAPI AbortOperation(void) = 0; - }; -#else - typedef struct IAMOpenProgressVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMOpenProgress *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMOpenProgress *This); - ULONG (WINAPI *Release)(IAMOpenProgress *This); - HRESULT (WINAPI *QueryProgress)(IAMOpenProgress *This,LONGLONG *pllTotal,LONGLONG *pllCurrent); - HRESULT (WINAPI *AbortOperation)(IAMOpenProgress *This); - END_INTERFACE - } IAMOpenProgressVtbl; - struct IAMOpenProgress { - CONST_VTBL struct IAMOpenProgressVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMOpenProgress_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMOpenProgress_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMOpenProgress_Release(This) (This)->lpVtbl->Release(This) -#define IAMOpenProgress_QueryProgress(This,pllTotal,pllCurrent) (This)->lpVtbl->QueryProgress(This,pllTotal,pllCurrent) -#define IAMOpenProgress_AbortOperation(This) (This)->lpVtbl->AbortOperation(This) -#endif -#endif - HRESULT WINAPI IAMOpenProgress_QueryProgress_Proxy(IAMOpenProgress *This,LONGLONG *pllTotal,LONGLONG *pllCurrent); - void __RPC_STUB IAMOpenProgress_QueryProgress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMOpenProgress_AbortOperation_Proxy(IAMOpenProgress *This); - void __RPC_STUB IAMOpenProgress_AbortOperation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMpeg2Demultiplexer_INTERFACE_DEFINED__ -#define __IMpeg2Demultiplexer_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMpeg2Demultiplexer; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMpeg2Demultiplexer : public IUnknown { - public: - virtual HRESULT WINAPI CreateOutputPin(AM_MEDIA_TYPE *pMediaType,LPWSTR pszPinName,IPin **ppIPin) = 0; - virtual HRESULT WINAPI SetOutputPinMediaType(LPWSTR pszPinName,AM_MEDIA_TYPE *pMediaType) = 0; - virtual HRESULT WINAPI DeleteOutputPin(LPWSTR pszPinName) = 0; - }; -#else - typedef struct IMpeg2DemultiplexerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMpeg2Demultiplexer *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMpeg2Demultiplexer *This); - ULONG (WINAPI *Release)(IMpeg2Demultiplexer *This); - HRESULT (WINAPI *CreateOutputPin)(IMpeg2Demultiplexer *This,AM_MEDIA_TYPE *pMediaType,LPWSTR pszPinName,IPin **ppIPin); - HRESULT (WINAPI *SetOutputPinMediaType)(IMpeg2Demultiplexer *This,LPWSTR pszPinName,AM_MEDIA_TYPE *pMediaType); - HRESULT (WINAPI *DeleteOutputPin)(IMpeg2Demultiplexer *This,LPWSTR pszPinName); - END_INTERFACE - } IMpeg2DemultiplexerVtbl; - struct IMpeg2Demultiplexer { - CONST_VTBL struct IMpeg2DemultiplexerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMpeg2Demultiplexer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMpeg2Demultiplexer_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMpeg2Demultiplexer_Release(This) (This)->lpVtbl->Release(This) -#define IMpeg2Demultiplexer_CreateOutputPin(This,pMediaType,pszPinName,ppIPin) (This)->lpVtbl->CreateOutputPin(This,pMediaType,pszPinName,ppIPin) -#define IMpeg2Demultiplexer_SetOutputPinMediaType(This,pszPinName,pMediaType) (This)->lpVtbl->SetOutputPinMediaType(This,pszPinName,pMediaType) -#define IMpeg2Demultiplexer_DeleteOutputPin(This,pszPinName) (This)->lpVtbl->DeleteOutputPin(This,pszPinName) -#endif -#endif - HRESULT WINAPI IMpeg2Demultiplexer_CreateOutputPin_Proxy(IMpeg2Demultiplexer *This,AM_MEDIA_TYPE *pMediaType,LPWSTR pszPinName,IPin **ppIPin); - void __RPC_STUB IMpeg2Demultiplexer_CreateOutputPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMpeg2Demultiplexer_SetOutputPinMediaType_Proxy(IMpeg2Demultiplexer *This,LPWSTR pszPinName,AM_MEDIA_TYPE *pMediaType); - void __RPC_STUB IMpeg2Demultiplexer_SetOutputPinMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMpeg2Demultiplexer_DeleteOutputPin_Proxy(IMpeg2Demultiplexer *This,LPWSTR pszPinName); - void __RPC_STUB IMpeg2Demultiplexer_DeleteOutputPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#define MPEG2_PROGRAM_STREAM_MAP 0x00000000 -#define MPEG2_PROGRAM_ELEMENTARY_STREAM 0x00000001 -#define MPEG2_PROGRAM_DIRECTORY_PES_PACKET 0x00000002 -#define MPEG2_PROGRAM_PACK_HEADER 0x00000003 -#define MPEG2_PROGRAM_PES_STREAM 0x00000004 -#define MPEG2_PROGRAM_SYSTEM_HEADER 0x00000005 -#define SUBSTREAM_FILTER_VAL_NONE 0x10000000 - - typedef struct __MIDL___MIDL_itf_strmif_0365_0001 { - ULONG stream_id; - DWORD dwMediaSampleContent; - ULONG ulSubstreamFilterValue; - int iDataOffset; - } STREAM_ID_MAP; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0365_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0365_v0_0_s_ifspec; -#ifndef __IEnumStreamIdMap_INTERFACE_DEFINED__ -#define __IEnumStreamIdMap_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEnumStreamIdMap; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEnumStreamIdMap : public IUnknown { - public: - virtual HRESULT WINAPI Next(ULONG cRequest,STREAM_ID_MAP *pStreamIdMap,ULONG *pcReceived) = 0; - virtual HRESULT WINAPI Skip(ULONG cRecords) = 0; - virtual HRESULT WINAPI Reset(void) = 0; - virtual HRESULT WINAPI Clone(IEnumStreamIdMap **ppIEnumStreamIdMap) = 0; - }; -#else - typedef struct IEnumStreamIdMapVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEnumStreamIdMap *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEnumStreamIdMap *This); - ULONG (WINAPI *Release)(IEnumStreamIdMap *This); - HRESULT (WINAPI *Next)(IEnumStreamIdMap *This,ULONG cRequest,STREAM_ID_MAP *pStreamIdMap,ULONG *pcReceived); - HRESULT (WINAPI *Skip)(IEnumStreamIdMap *This,ULONG cRecords); - HRESULT (WINAPI *Reset)(IEnumStreamIdMap *This); - HRESULT (WINAPI *Clone)(IEnumStreamIdMap *This,IEnumStreamIdMap **ppIEnumStreamIdMap); - END_INTERFACE - } IEnumStreamIdMapVtbl; - struct IEnumStreamIdMap { - CONST_VTBL struct IEnumStreamIdMapVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEnumStreamIdMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEnumStreamIdMap_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEnumStreamIdMap_Release(This) (This)->lpVtbl->Release(This) -#define IEnumStreamIdMap_Next(This,cRequest,pStreamIdMap,pcReceived) (This)->lpVtbl->Next(This,cRequest,pStreamIdMap,pcReceived) -#define IEnumStreamIdMap_Skip(This,cRecords) (This)->lpVtbl->Skip(This,cRecords) -#define IEnumStreamIdMap_Reset(This) (This)->lpVtbl->Reset(This) -#define IEnumStreamIdMap_Clone(This,ppIEnumStreamIdMap) (This)->lpVtbl->Clone(This,ppIEnumStreamIdMap) -#endif -#endif - HRESULT WINAPI IEnumStreamIdMap_Next_Proxy(IEnumStreamIdMap *This,ULONG cRequest,STREAM_ID_MAP *pStreamIdMap,ULONG *pcReceived); - void __RPC_STUB IEnumStreamIdMap_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumStreamIdMap_Skip_Proxy(IEnumStreamIdMap *This,ULONG cRecords); - void __RPC_STUB IEnumStreamIdMap_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumStreamIdMap_Reset_Proxy(IEnumStreamIdMap *This); - void __RPC_STUB IEnumStreamIdMap_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEnumStreamIdMap_Clone_Proxy(IEnumStreamIdMap *This,IEnumStreamIdMap **ppIEnumStreamIdMap); - void __RPC_STUB IEnumStreamIdMap_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IMPEG2StreamIdMap_INTERFACE_DEFINED__ -#define __IMPEG2StreamIdMap_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IMPEG2StreamIdMap; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IMPEG2StreamIdMap : public IUnknown { - public: - virtual HRESULT WINAPI MapStreamId(ULONG ulStreamId,DWORD MediaSampleContent,ULONG ulSubstreamFilterValue,int iDataOffset) = 0; - virtual HRESULT WINAPI UnmapStreamId(ULONG culStreamId,ULONG *pulStreamId) = 0; - virtual HRESULT WINAPI EnumStreamIdMap(IEnumStreamIdMap **ppIEnumStreamIdMap) = 0; - }; -#else - typedef struct IMPEG2StreamIdMapVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IMPEG2StreamIdMap *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IMPEG2StreamIdMap *This); - ULONG (WINAPI *Release)(IMPEG2StreamIdMap *This); - HRESULT (WINAPI *MapStreamId)(IMPEG2StreamIdMap *This,ULONG ulStreamId,DWORD MediaSampleContent,ULONG ulSubstreamFilterValue,int iDataOffset); - HRESULT (WINAPI *UnmapStreamId)(IMPEG2StreamIdMap *This,ULONG culStreamId,ULONG *pulStreamId); - HRESULT (WINAPI *EnumStreamIdMap)(IMPEG2StreamIdMap *This,IEnumStreamIdMap **ppIEnumStreamIdMap); - END_INTERFACE - } IMPEG2StreamIdMapVtbl; - struct IMPEG2StreamIdMap { - CONST_VTBL struct IMPEG2StreamIdMapVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IMPEG2StreamIdMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IMPEG2StreamIdMap_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IMPEG2StreamIdMap_Release(This) (This)->lpVtbl->Release(This) -#define IMPEG2StreamIdMap_MapStreamId(This,ulStreamId,MediaSampleContent,ulSubstreamFilterValue,iDataOffset) (This)->lpVtbl->MapStreamId(This,ulStreamId,MediaSampleContent,ulSubstreamFilterValue,iDataOffset) -#define IMPEG2StreamIdMap_UnmapStreamId(This,culStreamId,pulStreamId) (This)->lpVtbl->UnmapStreamId(This,culStreamId,pulStreamId) -#define IMPEG2StreamIdMap_EnumStreamIdMap(This,ppIEnumStreamIdMap) (This)->lpVtbl->EnumStreamIdMap(This,ppIEnumStreamIdMap) -#endif -#endif - HRESULT WINAPI IMPEG2StreamIdMap_MapStreamId_Proxy(IMPEG2StreamIdMap *This,ULONG ulStreamId,DWORD MediaSampleContent,ULONG ulSubstreamFilterValue,int iDataOffset); - void __RPC_STUB IMPEG2StreamIdMap_MapStreamId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMPEG2StreamIdMap_UnmapStreamId_Proxy(IMPEG2StreamIdMap *This,ULONG culStreamId,ULONG *pulStreamId); - void __RPC_STUB IMPEG2StreamIdMap_UnmapStreamId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IMPEG2StreamIdMap_EnumStreamIdMap_Proxy(IMPEG2StreamIdMap *This,IEnumStreamIdMap **ppIEnumStreamIdMap); - void __RPC_STUB IMPEG2StreamIdMap_EnumStreamIdMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IRegisterServiceProvider_INTERFACE_DEFINED__ -#define __IRegisterServiceProvider_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IRegisterServiceProvider; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IRegisterServiceProvider : public IUnknown { - public: - virtual HRESULT WINAPI RegisterService(REFGUID guidService,IUnknown *pUnkObject) = 0; - }; -#else - typedef struct IRegisterServiceProviderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IRegisterServiceProvider *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IRegisterServiceProvider *This); - ULONG (WINAPI *Release)(IRegisterServiceProvider *This); - HRESULT (WINAPI *RegisterService)(IRegisterServiceProvider *This,REFGUID guidService,IUnknown *pUnkObject); - END_INTERFACE - } IRegisterServiceProviderVtbl; - struct IRegisterServiceProvider { - CONST_VTBL struct IRegisterServiceProviderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IRegisterServiceProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IRegisterServiceProvider_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IRegisterServiceProvider_Release(This) (This)->lpVtbl->Release(This) -#define IRegisterServiceProvider_RegisterService(This,guidService,pUnkObject) (This)->lpVtbl->RegisterService(This,guidService,pUnkObject) -#endif -#endif - HRESULT WINAPI IRegisterServiceProvider_RegisterService_Proxy(IRegisterServiceProvider *This,REFGUID guidService,IUnknown *pUnkObject); - void __RPC_STUB IRegisterServiceProvider_RegisterService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMClockSlave_INTERFACE_DEFINED__ -#define __IAMClockSlave_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMClockSlave; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMClockSlave : public IUnknown { - public: - virtual HRESULT WINAPI SetErrorTolerance(DWORD dwTolerance) = 0; - virtual HRESULT WINAPI GetErrorTolerance(DWORD *pdwTolerance) = 0; - }; -#else - typedef struct IAMClockSlaveVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMClockSlave *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMClockSlave *This); - ULONG (WINAPI *Release)(IAMClockSlave *This); - HRESULT (WINAPI *SetErrorTolerance)(IAMClockSlave *This,DWORD dwTolerance); - HRESULT (WINAPI *GetErrorTolerance)(IAMClockSlave *This,DWORD *pdwTolerance); - END_INTERFACE - } IAMClockSlaveVtbl; - struct IAMClockSlave { - CONST_VTBL struct IAMClockSlaveVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMClockSlave_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMClockSlave_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMClockSlave_Release(This) (This)->lpVtbl->Release(This) -#define IAMClockSlave_SetErrorTolerance(This,dwTolerance) (This)->lpVtbl->SetErrorTolerance(This,dwTolerance) -#define IAMClockSlave_GetErrorTolerance(This,pdwTolerance) (This)->lpVtbl->GetErrorTolerance(This,pdwTolerance) -#endif -#endif - HRESULT WINAPI IAMClockSlave_SetErrorTolerance_Proxy(IAMClockSlave *This,DWORD dwTolerance); - void __RPC_STUB IAMClockSlave_SetErrorTolerance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMClockSlave_GetErrorTolerance_Proxy(IAMClockSlave *This,DWORD *pdwTolerance); - void __RPC_STUB IAMClockSlave_GetErrorTolerance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IAMGraphBuilderCallback_INTERFACE_DEFINED__ -#define __IAMGraphBuilderCallback_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMGraphBuilderCallback; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMGraphBuilderCallback : public IUnknown { - public: - virtual HRESULT WINAPI SelectedFilter(IMoniker *pMon) = 0; - virtual HRESULT WINAPI CreatedFilter(IBaseFilter *pFil) = 0; - }; -#else - typedef struct IAMGraphBuilderCallbackVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMGraphBuilderCallback *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMGraphBuilderCallback *This); - ULONG (WINAPI *Release)(IAMGraphBuilderCallback *This); - HRESULT (WINAPI *SelectedFilter)(IAMGraphBuilderCallback *This,IMoniker *pMon); - HRESULT (WINAPI *CreatedFilter)(IAMGraphBuilderCallback *This,IBaseFilter *pFil); - END_INTERFACE - } IAMGraphBuilderCallbackVtbl; - struct IAMGraphBuilderCallback { - CONST_VTBL struct IAMGraphBuilderCallbackVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMGraphBuilderCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMGraphBuilderCallback_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMGraphBuilderCallback_Release(This) (This)->lpVtbl->Release(This) -#define IAMGraphBuilderCallback_SelectedFilter(This,pMon) (This)->lpVtbl->SelectedFilter(This,pMon) -#define IAMGraphBuilderCallback_CreatedFilter(This,pFil) (This)->lpVtbl->CreatedFilter(This,pFil) -#endif -#endif - HRESULT WINAPI IAMGraphBuilderCallback_SelectedFilter_Proxy(IAMGraphBuilderCallback *This,IMoniker *pMon); - void __RPC_STUB IAMGraphBuilderCallback_SelectedFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMGraphBuilderCallback_CreatedFilter_Proxy(IAMGraphBuilderCallback *This,IBaseFilter *pFil); - void __RPC_STUB IAMGraphBuilderCallback_CreatedFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifdef __cplusplus -#ifndef _IAMFilterGraphCallback_ -#define _IAMFilterGraphCallback_ - //EXTERN_GUID(IID_IAMFilterGraphCallback,0x56a868fd,0x0ad4,0x11ce,0xb0,0xa3,0x0,0x20,0xaf,0x0b,0xa7,0x70); - struct IAMFilterGraphCallback : public IUnknown { - virtual HRESULT UnableToRender(IPin *pPin) = 0; - }; -#endif -#endif - struct CodecAPIEventData { - GUID guid; - DWORD dataLength; - DWORD reserved[3]; - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0370_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0370_v0_0_s_ifspec; -#ifndef __ICodecAPI_INTERFACE_DEFINED__ -#define __ICodecAPI_INTERFACE_DEFINED__ - EXTERN_C const IID IID_ICodecAPI; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct ICodecAPI : public IUnknown { - public: - virtual HRESULT WINAPI IsSupported(const GUID *Api) = 0; - virtual HRESULT WINAPI IsModifiable(const GUID *Api) = 0; - virtual HRESULT WINAPI GetParameterRange(const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta) = 0; - virtual HRESULT WINAPI GetParameterValues(const GUID *Api,VARIANT **Values,ULONG *ValuesCount) = 0; - virtual HRESULT WINAPI GetDefaultValue(const GUID *Api,VARIANT *Value) = 0; - virtual HRESULT WINAPI GetValue(const GUID *Api,VARIANT *Value) = 0; - virtual HRESULT WINAPI SetValue(const GUID *Api,VARIANT *Value) = 0; - virtual HRESULT WINAPI RegisterForEvent(const GUID *Api,LONG_PTR userData) = 0; - virtual HRESULT WINAPI UnregisterForEvent(const GUID *Api) = 0; - virtual HRESULT WINAPI SetAllDefaults(void) = 0; - virtual HRESULT WINAPI SetValueWithNotify(const GUID *Api,VARIANT *Value,GUID **ChangedParam,ULONG *ChangedParamCount) = 0; - virtual HRESULT WINAPI SetAllDefaultsWithNotify(GUID **ChangedParam,ULONG *ChangedParamCount) = 0; - virtual HRESULT WINAPI GetAllSettings(IStream *__MIDL_0016) = 0; - virtual HRESULT WINAPI SetAllSettings(IStream *__MIDL_0017) = 0; - virtual HRESULT WINAPI SetAllSettingsWithNotify(IStream *__MIDL_0018,GUID **ChangedParam,ULONG *ChangedParamCount) = 0; - }; -#else - typedef struct ICodecAPIVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(ICodecAPI *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(ICodecAPI *This); - ULONG (WINAPI *Release)(ICodecAPI *This); - HRESULT (WINAPI *IsSupported)(ICodecAPI *This,const GUID *Api); - HRESULT (WINAPI *IsModifiable)(ICodecAPI *This,const GUID *Api); - HRESULT (WINAPI *GetParameterRange)(ICodecAPI *This,const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta); - HRESULT (WINAPI *GetParameterValues)(ICodecAPI *This,const GUID *Api,VARIANT **Values,ULONG *ValuesCount); - HRESULT (WINAPI *GetDefaultValue)(ICodecAPI *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *GetValue)(ICodecAPI *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *SetValue)(ICodecAPI *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *RegisterForEvent)(ICodecAPI *This,const GUID *Api,LONG_PTR userData); - HRESULT (WINAPI *UnregisterForEvent)(ICodecAPI *This,const GUID *Api); - HRESULT (WINAPI *SetAllDefaults)(ICodecAPI *This); - HRESULT (WINAPI *SetValueWithNotify)(ICodecAPI *This,const GUID *Api,VARIANT *Value,GUID **ChangedParam,ULONG *ChangedParamCount); - HRESULT (WINAPI *SetAllDefaultsWithNotify)(ICodecAPI *This,GUID **ChangedParam,ULONG *ChangedParamCount); - HRESULT (WINAPI *GetAllSettings)(ICodecAPI *This,IStream *__MIDL_0016); - HRESULT (WINAPI *SetAllSettings)(ICodecAPI *This,IStream *__MIDL_0017); - HRESULT (WINAPI *SetAllSettingsWithNotify)(ICodecAPI *This,IStream *__MIDL_0018,GUID **ChangedParam,ULONG *ChangedParamCount); - END_INTERFACE - } ICodecAPIVtbl; - struct ICodecAPI { - CONST_VTBL struct ICodecAPIVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define ICodecAPI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define ICodecAPI_AddRef(This) (This)->lpVtbl->AddRef(This) -#define ICodecAPI_Release(This) (This)->lpVtbl->Release(This) -#define ICodecAPI_IsSupported(This,Api) (This)->lpVtbl->IsSupported(This,Api) -#define ICodecAPI_IsModifiable(This,Api) (This)->lpVtbl->IsModifiable(This,Api) -#define ICodecAPI_GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) (This)->lpVtbl->GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) -#define ICodecAPI_GetParameterValues(This,Api,Values,ValuesCount) (This)->lpVtbl->GetParameterValues(This,Api,Values,ValuesCount) -#define ICodecAPI_GetDefaultValue(This,Api,Value) (This)->lpVtbl->GetDefaultValue(This,Api,Value) -#define ICodecAPI_GetValue(This,Api,Value) (This)->lpVtbl->GetValue(This,Api,Value) -#define ICodecAPI_SetValue(This,Api,Value) (This)->lpVtbl->SetValue(This,Api,Value) -#define ICodecAPI_RegisterForEvent(This,Api,userData) (This)->lpVtbl->RegisterForEvent(This,Api,userData) -#define ICodecAPI_UnregisterForEvent(This,Api) (This)->lpVtbl->UnregisterForEvent(This,Api) -#define ICodecAPI_SetAllDefaults(This) (This)->lpVtbl->SetAllDefaults(This) -#define ICodecAPI_SetValueWithNotify(This,Api,Value,ChangedParam,ChangedParamCount) (This)->lpVtbl->SetValueWithNotify(This,Api,Value,ChangedParam,ChangedParamCount) -#define ICodecAPI_SetAllDefaultsWithNotify(This,ChangedParam,ChangedParamCount) (This)->lpVtbl->SetAllDefaultsWithNotify(This,ChangedParam,ChangedParamCount) -#define ICodecAPI_GetAllSettings(This,__MIDL_0016) (This)->lpVtbl->GetAllSettings(This,__MIDL_0016) -#define ICodecAPI_SetAllSettings(This,__MIDL_0017) (This)->lpVtbl->SetAllSettings(This,__MIDL_0017) -#define ICodecAPI_SetAllSettingsWithNotify(This,__MIDL_0018,ChangedParam,ChangedParamCount) (This)->lpVtbl->SetAllSettingsWithNotify(This,__MIDL_0018,ChangedParam,ChangedParamCount) -#endif -#endif - HRESULT WINAPI ICodecAPI_IsSupported_Proxy(ICodecAPI *This,const GUID *Api); - void __RPC_STUB ICodecAPI_IsSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_IsModifiable_Proxy(ICodecAPI *This,const GUID *Api); - void __RPC_STUB ICodecAPI_IsModifiable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_GetParameterRange_Proxy(ICodecAPI *This,const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta); - void __RPC_STUB ICodecAPI_GetParameterRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_GetParameterValues_Proxy(ICodecAPI *This,const GUID *Api,VARIANT **Values,ULONG *ValuesCount); - void __RPC_STUB ICodecAPI_GetParameterValues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_GetDefaultValue_Proxy(ICodecAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB ICodecAPI_GetDefaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_GetValue_Proxy(ICodecAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB ICodecAPI_GetValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetValue_Proxy(ICodecAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB ICodecAPI_SetValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_RegisterForEvent_Proxy(ICodecAPI *This,const GUID *Api,LONG_PTR userData); - void __RPC_STUB ICodecAPI_RegisterForEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_UnregisterForEvent_Proxy(ICodecAPI *This,const GUID *Api); - void __RPC_STUB ICodecAPI_UnregisterForEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetAllDefaults_Proxy(ICodecAPI *This); - void __RPC_STUB ICodecAPI_SetAllDefaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetValueWithNotify_Proxy(ICodecAPI *This,const GUID *Api,VARIANT *Value,GUID **ChangedParam,ULONG *ChangedParamCount); - void __RPC_STUB ICodecAPI_SetValueWithNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetAllDefaultsWithNotify_Proxy(ICodecAPI *This,GUID **ChangedParam,ULONG *ChangedParamCount); - void __RPC_STUB ICodecAPI_SetAllDefaultsWithNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_GetAllSettings_Proxy(ICodecAPI *This,IStream *__MIDL_0016); - void __RPC_STUB ICodecAPI_GetAllSettings_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetAllSettings_Proxy(ICodecAPI *This,IStream *__MIDL_0017); - void __RPC_STUB ICodecAPI_SetAllSettings_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI ICodecAPI_SetAllSettingsWithNotify_Proxy(ICodecAPI *This,IStream *__MIDL_0018,GUID **ChangedParam,ULONG *ChangedParamCount); - void __RPC_STUB ICodecAPI_SetAllSettingsWithNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IGetCapabilitiesKey_INTERFACE_DEFINED__ -#define __IGetCapabilitiesKey_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IGetCapabilitiesKey; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IGetCapabilitiesKey : public IUnknown { - public: - virtual HRESULT WINAPI GetCapabilitiesKey(HKEY *pHKey) = 0; - }; -#else - typedef struct IGetCapabilitiesKeyVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IGetCapabilitiesKey *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IGetCapabilitiesKey *This); - ULONG (WINAPI *Release)(IGetCapabilitiesKey *This); - HRESULT (WINAPI *GetCapabilitiesKey)(IGetCapabilitiesKey *This,HKEY *pHKey); - END_INTERFACE - } IGetCapabilitiesKeyVtbl; - struct IGetCapabilitiesKey { - CONST_VTBL struct IGetCapabilitiesKeyVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IGetCapabilitiesKey_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IGetCapabilitiesKey_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IGetCapabilitiesKey_Release(This) (This)->lpVtbl->Release(This) -#define IGetCapabilitiesKey_GetCapabilitiesKey(This,pHKey) (This)->lpVtbl->GetCapabilitiesKey(This,pHKey) -#endif -#endif - HRESULT WINAPI IGetCapabilitiesKey_GetCapabilitiesKey_Proxy(IGetCapabilitiesKey *This,HKEY *pHKey); - void __RPC_STUB IGetCapabilitiesKey_GetCapabilitiesKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IEncoderAPI_INTERFACE_DEFINED__ -#define __IEncoderAPI_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IEncoderAPI; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IEncoderAPI : public IUnknown { - public: - virtual HRESULT WINAPI IsSupported(const GUID *Api) = 0; - virtual HRESULT WINAPI IsAvailable(const GUID *Api) = 0; - virtual HRESULT WINAPI GetParameterRange(const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta) = 0; - virtual HRESULT WINAPI GetParameterValues(const GUID *Api,VARIANT **Values,ULONG *ValuesCount) = 0; - virtual HRESULT WINAPI GetDefaultValue(const GUID *Api,VARIANT *Value) = 0; - virtual HRESULT WINAPI GetValue(const GUID *Api,VARIANT *Value) = 0; - virtual HRESULT WINAPI SetValue(const GUID *Api,VARIANT *Value) = 0; - }; -#else - typedef struct IEncoderAPIVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IEncoderAPI *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IEncoderAPI *This); - ULONG (WINAPI *Release)(IEncoderAPI *This); - HRESULT (WINAPI *IsSupported)(IEncoderAPI *This,const GUID *Api); - HRESULT (WINAPI *IsAvailable)(IEncoderAPI *This,const GUID *Api); - HRESULT (WINAPI *GetParameterRange)(IEncoderAPI *This,const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta); - HRESULT (WINAPI *GetParameterValues)(IEncoderAPI *This,const GUID *Api,VARIANT **Values,ULONG *ValuesCount); - HRESULT (WINAPI *GetDefaultValue)(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *GetValue)(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *SetValue)(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - END_INTERFACE - } IEncoderAPIVtbl; - struct IEncoderAPI { - CONST_VTBL struct IEncoderAPIVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IEncoderAPI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IEncoderAPI_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IEncoderAPI_Release(This) (This)->lpVtbl->Release(This) -#define IEncoderAPI_IsSupported(This,Api) (This)->lpVtbl->IsSupported(This,Api) -#define IEncoderAPI_IsAvailable(This,Api) (This)->lpVtbl->IsAvailable(This,Api) -#define IEncoderAPI_GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) (This)->lpVtbl->GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) -#define IEncoderAPI_GetParameterValues(This,Api,Values,ValuesCount) (This)->lpVtbl->GetParameterValues(This,Api,Values,ValuesCount) -#define IEncoderAPI_GetDefaultValue(This,Api,Value) (This)->lpVtbl->GetDefaultValue(This,Api,Value) -#define IEncoderAPI_GetValue(This,Api,Value) (This)->lpVtbl->GetValue(This,Api,Value) -#define IEncoderAPI_SetValue(This,Api,Value) (This)->lpVtbl->SetValue(This,Api,Value) -#endif -#endif - HRESULT WINAPI IEncoderAPI_IsSupported_Proxy(IEncoderAPI *This,const GUID *Api); - void __RPC_STUB IEncoderAPI_IsSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_IsAvailable_Proxy(IEncoderAPI *This,const GUID *Api); - void __RPC_STUB IEncoderAPI_IsAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_GetParameterRange_Proxy(IEncoderAPI *This,const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta); - void __RPC_STUB IEncoderAPI_GetParameterRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_GetParameterValues_Proxy(IEncoderAPI *This,const GUID *Api,VARIANT **Values,ULONG *ValuesCount); - void __RPC_STUB IEncoderAPI_GetParameterValues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_GetDefaultValue_Proxy(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB IEncoderAPI_GetDefaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_GetValue_Proxy(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB IEncoderAPI_GetValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IEncoderAPI_SetValue_Proxy(IEncoderAPI *This,const GUID *Api,VARIANT *Value); - void __RPC_STUB IEncoderAPI_SetValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVideoEncoder_INTERFACE_DEFINED__ -#define __IVideoEncoder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVideoEncoder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVideoEncoder : public IEncoderAPI { - public: - }; -#else - typedef struct IVideoEncoderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVideoEncoder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVideoEncoder *This); - ULONG (WINAPI *Release)(IVideoEncoder *This); - HRESULT (WINAPI *IsSupported)(IVideoEncoder *This,const GUID *Api); - HRESULT (WINAPI *IsAvailable)(IVideoEncoder *This,const GUID *Api); - HRESULT (WINAPI *GetParameterRange)(IVideoEncoder *This,const GUID *Api,VARIANT *ValueMin,VARIANT *ValueMax,VARIANT *SteppingDelta); - HRESULT (WINAPI *GetParameterValues)(IVideoEncoder *This,const GUID *Api,VARIANT **Values,ULONG *ValuesCount); - HRESULT (WINAPI *GetDefaultValue)(IVideoEncoder *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *GetValue)(IVideoEncoder *This,const GUID *Api,VARIANT *Value); - HRESULT (WINAPI *SetValue)(IVideoEncoder *This,const GUID *Api,VARIANT *Value); - END_INTERFACE - } IVideoEncoderVtbl; - struct IVideoEncoder { - CONST_VTBL struct IVideoEncoderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVideoEncoder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVideoEncoder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVideoEncoder_Release(This) (This)->lpVtbl->Release(This) -#define IVideoEncoder_IsSupported(This,Api) (This)->lpVtbl->IsSupported(This,Api) -#define IVideoEncoder_IsAvailable(This,Api) (This)->lpVtbl->IsAvailable(This,Api) -#define IVideoEncoder_GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) (This)->lpVtbl->GetParameterRange(This,Api,ValueMin,ValueMax,SteppingDelta) -#define IVideoEncoder_GetParameterValues(This,Api,Values,ValuesCount) (This)->lpVtbl->GetParameterValues(This,Api,Values,ValuesCount) -#define IVideoEncoder_GetDefaultValue(This,Api,Value) (This)->lpVtbl->GetDefaultValue(This,Api,Value) -#define IVideoEncoder_GetValue(This,Api,Value) (This)->lpVtbl->GetValue(This,Api,Value) -#define IVideoEncoder_SetValue(This,Api,Value) (This)->lpVtbl->SetValue(This,Api,Value) -#endif -#endif -#endif - -#ifndef __ENCODER_API_DEFINES__ -#define __ENCODER_API_DEFINES__ - typedef enum __MIDL___MIDL_itf_strmif_0374_0001 { - ConstantBitRate = 0, - VariableBitRateAverage,VariableBitRatePeak - } VIDEOENCODER_BITRATE_MODE; -#endif -#define AM_GETDECODERCAP_QUERY_VMR_SUPPORT 0x00000001 -#define VMR_NOTSUPPORTED 0x00000000 -#define VMR_SUPPORTED 0x00000001 -#define AM_QUERY_DECODER_VMR_SUPPORT 0x00000001 -#define AM_QUERY_DECODER_DXVA_1_SUPPORT 0x00000002 -#define AM_QUERY_DECODER_DVD_SUPPORT 0x00000003 -#define AM_QUERY_DECODER_ATSC_SD_SUPPORT 0x00000004 -#define AM_QUERY_DECODER_ATSC_HD_SUPPORT 0x00000005 -#define AM_GETDECODERCAP_QUERY_VMR9_SUPPORT 0x00000006 -#define DECODER_CAP_NOTSUPPORTED 0x00000000 -#define DECODER_CAP_SUPPORTED 0x00000001 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0374_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0374_v0_0_s_ifspec; -#ifndef __IAMDecoderCaps_INTERFACE_DEFINED__ -#define __IAMDecoderCaps_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMDecoderCaps; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMDecoderCaps : public IUnknown { - public: - virtual HRESULT WINAPI GetDecoderCaps(DWORD dwCapIndex,DWORD *lpdwCap) = 0; - }; -#else - typedef struct IAMDecoderCapsVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMDecoderCaps *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMDecoderCaps *This); - ULONG (WINAPI *Release)(IAMDecoderCaps *This); - HRESULT (WINAPI *GetDecoderCaps)(IAMDecoderCaps *This,DWORD dwCapIndex,DWORD *lpdwCap); - END_INTERFACE - } IAMDecoderCapsVtbl; - struct IAMDecoderCaps { - CONST_VTBL struct IAMDecoderCapsVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMDecoderCaps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMDecoderCaps_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMDecoderCaps_Release(This) (This)->lpVtbl->Release(This) -#define IAMDecoderCaps_GetDecoderCaps(This,dwCapIndex,lpdwCap) (This)->lpVtbl->GetDecoderCaps(This,dwCapIndex,lpdwCap) -#endif -#endif - HRESULT WINAPI IAMDecoderCaps_GetDecoderCaps_Proxy(IAMDecoderCaps *This,DWORD dwCapIndex,DWORD *lpdwCap); - void __RPC_STUB IAMDecoderCaps_GetDecoderCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef struct _AMCOPPSignature { - BYTE Signature[256]; - } AMCOPPSignature; - - typedef struct _AMCOPPCommand { - GUID macKDI; - GUID guidCommandID; - DWORD dwSequence; - DWORD cbSizeData; - BYTE CommandData[4056]; - } AMCOPPCommand; - - typedef struct _AMCOPPCommand *LPAMCOPPCommand; - - typedef struct _AMCOPPStatusInput { - GUID rApp; - GUID guidStatusRequestID; - DWORD dwSequence; - DWORD cbSizeData; - BYTE StatusData[4056]; - } AMCOPPStatusInput; - - typedef struct _AMCOPPStatusInput *LPAMCOPPStatusInput; - - typedef struct _AMCOPPStatusOutput { - GUID macKDI; - DWORD cbSizeData; - BYTE COPPStatus[4076]; - } AMCOPPStatusOutput; - - typedef struct _AMCOPPStatusOutput *LPAMCOPPStatusOutput; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0375_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0375_v0_0_s_ifspec; -#ifndef __IAMCertifiedOutputProtection_INTERFACE_DEFINED__ -#define __IAMCertifiedOutputProtection_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IAMCertifiedOutputProtection; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IAMCertifiedOutputProtection : public IUnknown { - public: - virtual HRESULT WINAPI KeyExchange(GUID *pRandom,BYTE **VarLenCertGH,DWORD *pdwLengthCertGH) = 0; - virtual HRESULT WINAPI SessionSequenceStart(AMCOPPSignature *pSig) = 0; - virtual HRESULT WINAPI ProtectionCommand(const AMCOPPCommand *cmd) = 0; - virtual HRESULT WINAPI ProtectionStatus(const AMCOPPStatusInput *pStatusInput,AMCOPPStatusOutput *pStatusOutput) = 0; - }; -#else - typedef struct IAMCertifiedOutputProtectionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IAMCertifiedOutputProtection *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IAMCertifiedOutputProtection *This); - ULONG (WINAPI *Release)(IAMCertifiedOutputProtection *This); - HRESULT (WINAPI *KeyExchange)(IAMCertifiedOutputProtection *This,GUID *pRandom,BYTE **VarLenCertGH,DWORD *pdwLengthCertGH); - HRESULT (WINAPI *SessionSequenceStart)(IAMCertifiedOutputProtection *This,AMCOPPSignature *pSig); - HRESULT (WINAPI *ProtectionCommand)(IAMCertifiedOutputProtection *This,const AMCOPPCommand *cmd); - HRESULT (WINAPI *ProtectionStatus)(IAMCertifiedOutputProtection *This,const AMCOPPStatusInput *pStatusInput,AMCOPPStatusOutput *pStatusOutput); - END_INTERFACE - } IAMCertifiedOutputProtectionVtbl; - struct IAMCertifiedOutputProtection { - CONST_VTBL struct IAMCertifiedOutputProtectionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IAMCertifiedOutputProtection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IAMCertifiedOutputProtection_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IAMCertifiedOutputProtection_Release(This) (This)->lpVtbl->Release(This) -#define IAMCertifiedOutputProtection_KeyExchange(This,pRandom,VarLenCertGH,pdwLengthCertGH) (This)->lpVtbl->KeyExchange(This,pRandom,VarLenCertGH,pdwLengthCertGH) -#define IAMCertifiedOutputProtection_SessionSequenceStart(This,pSig) (This)->lpVtbl->SessionSequenceStart(This,pSig) -#define IAMCertifiedOutputProtection_ProtectionCommand(This,cmd) (This)->lpVtbl->ProtectionCommand(This,cmd) -#define IAMCertifiedOutputProtection_ProtectionStatus(This,pStatusInput,pStatusOutput) (This)->lpVtbl->ProtectionStatus(This,pStatusInput,pStatusOutput) -#endif -#endif - HRESULT WINAPI IAMCertifiedOutputProtection_KeyExchange_Proxy(IAMCertifiedOutputProtection *This,GUID *pRandom,BYTE **VarLenCertGH,DWORD *pdwLengthCertGH); - void __RPC_STUB IAMCertifiedOutputProtection_KeyExchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCertifiedOutputProtection_SessionSequenceStart_Proxy(IAMCertifiedOutputProtection *This,AMCOPPSignature *pSig); - void __RPC_STUB IAMCertifiedOutputProtection_SessionSequenceStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCertifiedOutputProtection_ProtectionCommand_Proxy(IAMCertifiedOutputProtection *This,const AMCOPPCommand *cmd); - void __RPC_STUB IAMCertifiedOutputProtection_ProtectionCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IAMCertifiedOutputProtection_ProtectionStatus_Proxy(IAMCertifiedOutputProtection *This,const AMCOPPStatusInput *pStatusInput,AMCOPPStatusOutput *pStatusOutput); - void __RPC_STUB IAMCertifiedOutputProtection_ProtectionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#include - - typedef enum tagDVD_DOMAIN { - DVD_DOMAIN_FirstPlay = 1, - DVD_DOMAIN_VideoManagerMenu,DVD_DOMAIN_VideoTitleSetMenu,DVD_DOMAIN_Title, - DVD_DOMAIN_Stop - } DVD_DOMAIN; - - typedef enum tagDVD_MENU_ID { - DVD_MENU_Title = 2,DVD_MENU_Root = 3,DVD_MENU_Subpicture = 4,DVD_MENU_Audio = 5, - DVD_MENU_Angle = 6,DVD_MENU_Chapter = 7 - } DVD_MENU_ID; - - typedef enum tagDVD_DISC_SIDE { - DVD_SIDE_A = 1,DVD_SIDE_B = 2 - } DVD_DISC_SIDE; - - typedef enum tagDVD_PREFERRED_DISPLAY_MODE { - DISPLAY_CONTENT_DEFAULT = 0,DISPLAY_16x9 = 1,DISPLAY_4x3_PANSCAN_PREFERRED = 2,DISPLAY_4x3_LETTERBOX_PREFERRED = 3 - } DVD_PREFERRED_DISPLAY_MODE; - - typedef WORD DVD_REGISTER; - typedef DVD_REGISTER GPRMARRAY[16]; - typedef DVD_REGISTER SPRMARRAY[24]; - - typedef struct tagDVD_ATR { - ULONG ulCAT; - BYTE pbATRI[768]; - } DVD_ATR; - - typedef BYTE DVD_VideoATR[2]; - typedef BYTE DVD_AudioATR[8]; - typedef BYTE DVD_SubpictureATR[6]; - - typedef enum tagDVD_FRAMERATE { - DVD_FPS_25 = 1,DVD_FPS_30NonDrop = 3 - } DVD_FRAMERATE; - - typedef struct tagDVD_TIMECODE { - ULONG Hours1 :4; - ULONG Hours10 :4; - ULONG Minutes1 :4; - ULONG Minutes10:4; - ULONG Seconds1 :4; - ULONG Seconds10:4; - ULONG Frames1 :4; - ULONG Frames10 :2; - ULONG FrameRateCode: 2; - } DVD_TIMECODE; - - typedef enum tagDVD_TIMECODE_FLAGS { - DVD_TC_FLAG_25fps = 0x1,DVD_TC_FLAG_30fps = 0x2,DVD_TC_FLAG_DropFrame = 0x4,DVD_TC_FLAG_Interpolated = 0x8 - } DVD_TIMECODE_FLAGS; - - typedef struct tagDVD_HMSF_TIMECODE { - BYTE bHours; - BYTE bMinutes; - BYTE bSeconds; - BYTE bFrames; - } DVD_HMSF_TIMECODE; - - typedef struct tagDVD_PLAYBACK_LOCATION2 { - ULONG TitleNum; - ULONG ChapterNum; - DVD_HMSF_TIMECODE TimeCode; - ULONG TimeCodeFlags; - } DVD_PLAYBACK_LOCATION2; - - typedef struct tagDVD_PLAYBACK_LOCATION { - ULONG TitleNum; - ULONG ChapterNum; - ULONG TimeCode; - } DVD_PLAYBACK_LOCATION; - - typedef DWORD VALID_UOP_SOMTHING_OR_OTHER; - - typedef enum __MIDL___MIDL_itf_strmif_0376_0001 { - UOP_FLAG_Play_Title_Or_AtTime = 0x1,UOP_FLAG_Play_Chapter = 0x2,UOP_FLAG_Play_Title = 0x4,UOP_FLAG_Stop = 0x8,UOP_FLAG_ReturnFromSubMenu = 0x10, - UOP_FLAG_Play_Chapter_Or_AtTime = 0x20,UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x40,UOP_FLAG_PlayNext_Chapter = 0x80,UOP_FLAG_Play_Forwards = 0x100, - UOP_FLAG_Play_Backwards = 0x200,UOP_FLAG_ShowMenu_Title = 0x400,UOP_FLAG_ShowMenu_Root = 0x800,UOP_FLAG_ShowMenu_SubPic = 0x1000, - UOP_FLAG_ShowMenu_Audio = 0x2000,UOP_FLAG_ShowMenu_Angle = 0x4000,UOP_FLAG_ShowMenu_Chapter = 0x8000,UOP_FLAG_Resume = 0x10000, - UOP_FLAG_Select_Or_Activate_Button = 0x20000,UOP_FLAG_Still_Off = 0x40000,UOP_FLAG_Pause_On = 0x80000,UOP_FLAG_Select_Audio_Stream = 0x100000, - UOP_FLAG_Select_SubPic_Stream = 0x200000,UOP_FLAG_Select_Angle = 0x400000,UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x800000, - UOP_FLAG_Select_Video_Mode_Preference = 0x1000000 - } VALID_UOP_FLAG; - - typedef enum __MIDL___MIDL_itf_strmif_0376_0002 { - DVD_CMD_FLAG_None = 0,DVD_CMD_FLAG_Flush = 0x1,DVD_CMD_FLAG_SendEvents = 0x2,DVD_CMD_FLAG_Block = 0x4,DVD_CMD_FLAG_StartWhenRendered = 0x8, - DVD_CMD_FLAG_EndAfterRendered = 0x10 - } DVD_CMD_FLAGS; - - typedef enum __MIDL___MIDL_itf_strmif_0376_0003 { - DVD_ResetOnStop = 1,DVD_NotifyParentalLevelChange = 2,DVD_HMSF_TimeCodeEvents = 3,DVD_AudioDuringFFwdRew = 4 - } DVD_OPTION_FLAG; - - typedef enum __MIDL___MIDL_itf_strmif_0376_0004 { - DVD_Relative_Upper = 1,DVD_Relative_Lower = 2,DVD_Relative_Left = 3,DVD_Relative_Right = 4 - } DVD_RELATIVE_BUTTON; - - typedef enum tagDVD_PARENTAL_LEVEL { - DVD_PARENTAL_LEVEL_8 = 0x8000,DVD_PARENTAL_LEVEL_7 = 0x4000,DVD_PARENTAL_LEVEL_6 = 0x2000,DVD_PARENTAL_LEVEL_5 = 0x1000, - DVD_PARENTAL_LEVEL_4 = 0x800,DVD_PARENTAL_LEVEL_3 = 0x400,DVD_PARENTAL_LEVEL_2 = 0x200,DVD_PARENTAL_LEVEL_1 = 0x100 - } DVD_PARENTAL_LEVEL; - - typedef enum tagDVD_AUDIO_LANG_EXT { - DVD_AUD_EXT_NotSpecified = 0,DVD_AUD_EXT_Captions = 1,DVD_AUD_EXT_VisuallyImpaired = 2,DVD_AUD_EXT_DirectorComments1 = 3, - DVD_AUD_EXT_DirectorComments2 = 4 - } DVD_AUDIO_LANG_EXT; - - typedef enum tagDVD_SUBPICTURE_LANG_EXT { - DVD_SP_EXT_NotSpecified = 0,DVD_SP_EXT_Caption_Normal = 1,DVD_SP_EXT_Caption_Big = 2,DVD_SP_EXT_Caption_Children = 3,DVD_SP_EXT_CC_Normal = 5, - DVD_SP_EXT_CC_Big = 6,DVD_SP_EXT_CC_Children = 7,DVD_SP_EXT_Forced = 9,DVD_SP_EXT_DirectorComments_Normal = 13,DVD_SP_EXT_DirectorComments_Big = 14, - DVD_SP_EXT_DirectorComments_Children = 15 - } DVD_SUBPICTURE_LANG_EXT; - - typedef enum tagDVD_AUDIO_APPMODE { - DVD_AudioMode_None = 0,DVD_AudioMode_Karaoke = 1,DVD_AudioMode_Surround = 2,DVD_AudioMode_Other = 3 - } DVD_AUDIO_APPMODE; - - typedef enum tagDVD_AUDIO_FORMAT { - DVD_AudioFormat_AC3 = 0,DVD_AudioFormat_MPEG1 = 1,DVD_AudioFormat_MPEG1_DRC = 2,DVD_AudioFormat_MPEG2 = 3,DVD_AudioFormat_MPEG2_DRC = 4, - DVD_AudioFormat_LPCM = 5,DVD_AudioFormat_DTS = 6,DVD_AudioFormat_SDDS = 7,DVD_AudioFormat_Other = 8 - } DVD_AUDIO_FORMAT; - - typedef enum tagDVD_KARAOKE_DOWNMIX { - DVD_Mix_0to0 = 0x1,DVD_Mix_1to0 = 0x2,DVD_Mix_2to0 = 0x4,DVD_Mix_3to0 = 0x8,DVD_Mix_4to0 = 0x10,DVD_Mix_Lto0 = 0x20,DVD_Mix_Rto0 = 0x40, - DVD_Mix_0to1 = 0x100,DVD_Mix_1to1 = 0x200,DVD_Mix_2to1 = 0x400,DVD_Mix_3to1 = 0x800,DVD_Mix_4to1 = 0x1000,DVD_Mix_Lto1 = 0x2000, - DVD_Mix_Rto1 = 0x4000 - } DVD_KARAOKE_DOWNMIX; - - typedef struct tagDVD_AudioAttributes { - DVD_AUDIO_APPMODE AppMode; - BYTE AppModeData; - DVD_AUDIO_FORMAT AudioFormat; - LCID Language; - DVD_AUDIO_LANG_EXT LanguageExtension; - WINBOOL fHasMultichannelInfo; - DWORD dwFrequency; - BYTE bQuantization; - BYTE bNumberOfChannels; - DWORD dwReserved[2]; - } DVD_AudioAttributes; - - typedef struct tagDVD_MUA_MixingInfo { - WINBOOL fMixTo0; - WINBOOL fMixTo1; - WINBOOL fMix0InPhase; - WINBOOL fMix1InPhase; - DWORD dwSpeakerPosition; - } DVD_MUA_MixingInfo; - - typedef struct tagDVD_MUA_Coeff { - double log2_alpha; - double log2_beta; - } DVD_MUA_Coeff; - - typedef struct tagDVD_MultichannelAudioAttributes { - DVD_MUA_MixingInfo Info[8]; - DVD_MUA_Coeff Coeff[8]; - } DVD_MultichannelAudioAttributes; - - typedef enum tagDVD_KARAOKE_CONTENTS { - DVD_Karaoke_GuideVocal1 = 0x1,DVD_Karaoke_GuideVocal2 = 0x2,DVD_Karaoke_GuideMelody1 = 0x4,DVD_Karaoke_GuideMelody2 = 0x8, - DVD_Karaoke_GuideMelodyA = 0x10,DVD_Karaoke_GuideMelodyB = 0x20,DVD_Karaoke_SoundEffectA = 0x40,DVD_Karaoke_SoundEffectB = 0x80 - } DVD_KARAOKE_CONTENTS; - - typedef enum tagDVD_KARAOKE_ASSIGNMENT { - DVD_Assignment_reserved0 = 0,DVD_Assignment_reserved1 = 1,DVD_Assignment_LR = 2,DVD_Assignment_LRM = 3,DVD_Assignment_LR1 = 4, - DVD_Assignment_LRM1 = 5,DVD_Assignment_LR12 = 6,DVD_Assignment_LRM12 = 7 - } DVD_KARAOKE_ASSIGNMENT; - - typedef struct tagDVD_KaraokeAttributes { - BYTE bVersion; - WINBOOL fMasterOfCeremoniesInGuideVocal1; - WINBOOL fDuet; - DVD_KARAOKE_ASSIGNMENT ChannelAssignment; - WORD wChannelContents[8]; - } DVD_KaraokeAttributes; - - typedef enum tagDVD_VIDEO_COMPRESSION { - DVD_VideoCompression_Other = 0,DVD_VideoCompression_MPEG1 = 1,DVD_VideoCompression_MPEG2 = 2 - } DVD_VIDEO_COMPRESSION; - - typedef struct tagDVD_VideoAttributes { - WINBOOL fPanscanPermitted; - WINBOOL fLetterboxPermitted; - ULONG ulAspectX; - ULONG ulAspectY; - ULONG ulFrameRate; - ULONG ulFrameHeight; - DVD_VIDEO_COMPRESSION Compression; - WINBOOL fLine21Field1InGOP; - WINBOOL fLine21Field2InGOP; - ULONG ulSourceResolutionX; - ULONG ulSourceResolutionY; - WINBOOL fIsSourceLetterboxed; - WINBOOL fIsFilmMode; - } DVD_VideoAttributes; - - typedef enum tagDVD_SUBPICTURE_TYPE { - DVD_SPType_NotSpecified = 0,DVD_SPType_Language = 1,DVD_SPType_Other = 2 - } DVD_SUBPICTURE_TYPE; - - typedef enum tagDVD_SUBPICTURE_CODING { - DVD_SPCoding_RunLength = 0,DVD_SPCoding_Extended = 1,DVD_SPCoding_Other = 2 - } DVD_SUBPICTURE_CODING; - - typedef struct tagDVD_SubpictureAttributes { - DVD_SUBPICTURE_TYPE Type; - DVD_SUBPICTURE_CODING CodingMode; - LCID Language; - DVD_SUBPICTURE_LANG_EXT LanguageExtension; - } DVD_SubpictureAttributes; - - typedef enum tagDVD_TITLE_APPMODE { - DVD_AppMode_Not_Specified = 0,DVD_AppMode_Karaoke = 1,DVD_AppMode_Other = 3 - } DVD_TITLE_APPMODE; - - typedef struct tagDVD_TitleMainAttributes { - DVD_TITLE_APPMODE AppMode; - DVD_VideoAttributes VideoAttributes; - ULONG ulNumberOfAudioStreams; - DVD_AudioAttributes AudioAttributes[8]; - DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8]; - ULONG ulNumberOfSubpictureStreams; - DVD_SubpictureAttributes SubpictureAttributes[32]; - } DVD_TitleAttributes; - - typedef struct tagDVD_MenuAttributes { - WINBOOL fCompatibleRegion[8]; - DVD_VideoAttributes VideoAttributes; - WINBOOL fAudioPresent; - DVD_AudioAttributes AudioAttributes; - WINBOOL fSubpicturePresent; - DVD_SubpictureAttributes SubpictureAttributes; - } DVD_MenuAttributes; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0376_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0376_v0_0_s_ifspec; -#ifndef __IDvdControl_INTERFACE_DEFINED__ -#define __IDvdControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdControl : public IUnknown { - public: - virtual HRESULT WINAPI TitlePlay(ULONG ulTitle) = 0; - virtual HRESULT WINAPI ChapterPlay(ULONG ulTitle,ULONG ulChapter) = 0; - virtual HRESULT WINAPI TimePlay(ULONG ulTitle,ULONG bcdTime) = 0; - virtual HRESULT WINAPI StopForResume(void) = 0; - virtual HRESULT WINAPI GoUp(void) = 0; - virtual HRESULT WINAPI TimeSearch(ULONG bcdTime) = 0; - virtual HRESULT WINAPI ChapterSearch(ULONG ulChapter) = 0; - virtual HRESULT WINAPI PrevPGSearch(void) = 0; - virtual HRESULT WINAPI TopPGSearch(void) = 0; - virtual HRESULT WINAPI NextPGSearch(void) = 0; - virtual HRESULT WINAPI ForwardScan(double dwSpeed) = 0; - virtual HRESULT WINAPI BackwardScan(double dwSpeed) = 0; - virtual HRESULT WINAPI MenuCall(DVD_MENU_ID MenuID) = 0; - virtual HRESULT WINAPI Resume(void) = 0; - virtual HRESULT WINAPI UpperButtonSelect(void) = 0; - virtual HRESULT WINAPI LowerButtonSelect(void) = 0; - virtual HRESULT WINAPI LeftButtonSelect(void) = 0; - virtual HRESULT WINAPI RightButtonSelect(void) = 0; - virtual HRESULT WINAPI ButtonActivate(void) = 0; - virtual HRESULT WINAPI ButtonSelectAndActivate(ULONG ulButton) = 0; - virtual HRESULT WINAPI StillOff(void) = 0; - virtual HRESULT WINAPI PauseOn(void) = 0; - virtual HRESULT WINAPI PauseOff(void) = 0; - virtual HRESULT WINAPI MenuLanguageSelect(LCID Language) = 0; - virtual HRESULT WINAPI AudioStreamChange(ULONG ulAudio) = 0; - virtual HRESULT WINAPI SubpictureStreamChange(ULONG ulSubPicture,WINBOOL bDisplay) = 0; - virtual HRESULT WINAPI AngleChange(ULONG ulAngle) = 0; - virtual HRESULT WINAPI ParentalLevelSelect(ULONG ulParentalLevel) = 0; - virtual HRESULT WINAPI ParentalCountrySelect(WORD wCountry) = 0; - virtual HRESULT WINAPI KaraokeAudioPresentationModeChange(ULONG ulMode) = 0; - virtual HRESULT WINAPI VideoModePreferrence(ULONG ulPreferredDisplayMode) = 0; - virtual HRESULT WINAPI SetRoot(LPCWSTR pszPath) = 0; - virtual HRESULT WINAPI MouseActivate(POINT point) = 0; - virtual HRESULT WINAPI MouseSelect(POINT point) = 0; - virtual HRESULT WINAPI ChapterPlayAutoStop(ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay) = 0; - }; -#else - typedef struct IDvdControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdControl *This); - ULONG (WINAPI *Release)(IDvdControl *This); - HRESULT (WINAPI *TitlePlay)(IDvdControl *This,ULONG ulTitle); - HRESULT (WINAPI *ChapterPlay)(IDvdControl *This,ULONG ulTitle,ULONG ulChapter); - HRESULT (WINAPI *TimePlay)(IDvdControl *This,ULONG ulTitle,ULONG bcdTime); - HRESULT (WINAPI *StopForResume)(IDvdControl *This); - HRESULT (WINAPI *GoUp)(IDvdControl *This); - HRESULT (WINAPI *TimeSearch)(IDvdControl *This,ULONG bcdTime); - HRESULT (WINAPI *ChapterSearch)(IDvdControl *This,ULONG ulChapter); - HRESULT (WINAPI *PrevPGSearch)(IDvdControl *This); - HRESULT (WINAPI *TopPGSearch)(IDvdControl *This); - HRESULT (WINAPI *NextPGSearch)(IDvdControl *This); - HRESULT (WINAPI *ForwardScan)(IDvdControl *This,double dwSpeed); - HRESULT (WINAPI *BackwardScan)(IDvdControl *This,double dwSpeed); - HRESULT (WINAPI *MenuCall)(IDvdControl *This,DVD_MENU_ID MenuID); - HRESULT (WINAPI *Resume)(IDvdControl *This); - HRESULT (WINAPI *UpperButtonSelect)(IDvdControl *This); - HRESULT (WINAPI *LowerButtonSelect)(IDvdControl *This); - HRESULT (WINAPI *LeftButtonSelect)(IDvdControl *This); - HRESULT (WINAPI *RightButtonSelect)(IDvdControl *This); - HRESULT (WINAPI *ButtonActivate)(IDvdControl *This); - HRESULT (WINAPI *ButtonSelectAndActivate)(IDvdControl *This,ULONG ulButton); - HRESULT (WINAPI *StillOff)(IDvdControl *This); - HRESULT (WINAPI *PauseOn)(IDvdControl *This); - HRESULT (WINAPI *PauseOff)(IDvdControl *This); - HRESULT (WINAPI *MenuLanguageSelect)(IDvdControl *This,LCID Language); - HRESULT (WINAPI *AudioStreamChange)(IDvdControl *This,ULONG ulAudio); - HRESULT (WINAPI *SubpictureStreamChange)(IDvdControl *This,ULONG ulSubPicture,WINBOOL bDisplay); - HRESULT (WINAPI *AngleChange)(IDvdControl *This,ULONG ulAngle); - HRESULT (WINAPI *ParentalLevelSelect)(IDvdControl *This,ULONG ulParentalLevel); - HRESULT (WINAPI *ParentalCountrySelect)(IDvdControl *This,WORD wCountry); - HRESULT (WINAPI *KaraokeAudioPresentationModeChange)(IDvdControl *This,ULONG ulMode); - HRESULT (WINAPI *VideoModePreferrence)(IDvdControl *This,ULONG ulPreferredDisplayMode); - HRESULT (WINAPI *SetRoot)(IDvdControl *This,LPCWSTR pszPath); - HRESULT (WINAPI *MouseActivate)(IDvdControl *This,POINT point); - HRESULT (WINAPI *MouseSelect)(IDvdControl *This,POINT point); - HRESULT (WINAPI *ChapterPlayAutoStop)(IDvdControl *This,ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay); - END_INTERFACE - } IDvdControlVtbl; - struct IDvdControl { - CONST_VTBL struct IDvdControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdControl_Release(This) (This)->lpVtbl->Release(This) -#define IDvdControl_TitlePlay(This,ulTitle) (This)->lpVtbl->TitlePlay(This,ulTitle) -#define IDvdControl_ChapterPlay(This,ulTitle,ulChapter) (This)->lpVtbl->ChapterPlay(This,ulTitle,ulChapter) -#define IDvdControl_TimePlay(This,ulTitle,bcdTime) (This)->lpVtbl->TimePlay(This,ulTitle,bcdTime) -#define IDvdControl_StopForResume(This) (This)->lpVtbl->StopForResume(This) -#define IDvdControl_GoUp(This) (This)->lpVtbl->GoUp(This) -#define IDvdControl_TimeSearch(This,bcdTime) (This)->lpVtbl->TimeSearch(This,bcdTime) -#define IDvdControl_ChapterSearch(This,ulChapter) (This)->lpVtbl->ChapterSearch(This,ulChapter) -#define IDvdControl_PrevPGSearch(This) (This)->lpVtbl->PrevPGSearch(This) -#define IDvdControl_TopPGSearch(This) (This)->lpVtbl->TopPGSearch(This) -#define IDvdControl_NextPGSearch(This) (This)->lpVtbl->NextPGSearch(This) -#define IDvdControl_ForwardScan(This,dwSpeed) (This)->lpVtbl->ForwardScan(This,dwSpeed) -#define IDvdControl_BackwardScan(This,dwSpeed) (This)->lpVtbl->BackwardScan(This,dwSpeed) -#define IDvdControl_MenuCall(This,MenuID) (This)->lpVtbl->MenuCall(This,MenuID) -#define IDvdControl_Resume(This) (This)->lpVtbl->Resume(This) -#define IDvdControl_UpperButtonSelect(This) (This)->lpVtbl->UpperButtonSelect(This) -#define IDvdControl_LowerButtonSelect(This) (This)->lpVtbl->LowerButtonSelect(This) -#define IDvdControl_LeftButtonSelect(This) (This)->lpVtbl->LeftButtonSelect(This) -#define IDvdControl_RightButtonSelect(This) (This)->lpVtbl->RightButtonSelect(This) -#define IDvdControl_ButtonActivate(This) (This)->lpVtbl->ButtonActivate(This) -#define IDvdControl_ButtonSelectAndActivate(This,ulButton) (This)->lpVtbl->ButtonSelectAndActivate(This,ulButton) -#define IDvdControl_StillOff(This) (This)->lpVtbl->StillOff(This) -#define IDvdControl_PauseOn(This) (This)->lpVtbl->PauseOn(This) -#define IDvdControl_PauseOff(This) (This)->lpVtbl->PauseOff(This) -#define IDvdControl_MenuLanguageSelect(This,Language) (This)->lpVtbl->MenuLanguageSelect(This,Language) -#define IDvdControl_AudioStreamChange(This,ulAudio) (This)->lpVtbl->AudioStreamChange(This,ulAudio) -#define IDvdControl_SubpictureStreamChange(This,ulSubPicture,bDisplay) (This)->lpVtbl->SubpictureStreamChange(This,ulSubPicture,bDisplay) -#define IDvdControl_AngleChange(This,ulAngle) (This)->lpVtbl->AngleChange(This,ulAngle) -#define IDvdControl_ParentalLevelSelect(This,ulParentalLevel) (This)->lpVtbl->ParentalLevelSelect(This,ulParentalLevel) -#define IDvdControl_ParentalCountrySelect(This,wCountry) (This)->lpVtbl->ParentalCountrySelect(This,wCountry) -#define IDvdControl_KaraokeAudioPresentationModeChange(This,ulMode) (This)->lpVtbl->KaraokeAudioPresentationModeChange(This,ulMode) -#define IDvdControl_VideoModePreferrence(This,ulPreferredDisplayMode) (This)->lpVtbl->VideoModePreferrence(This,ulPreferredDisplayMode) -#define IDvdControl_SetRoot(This,pszPath) (This)->lpVtbl->SetRoot(This,pszPath) -#define IDvdControl_MouseActivate(This,point) (This)->lpVtbl->MouseActivate(This,point) -#define IDvdControl_MouseSelect(This,point) (This)->lpVtbl->MouseSelect(This,point) -#define IDvdControl_ChapterPlayAutoStop(This,ulTitle,ulChapter,ulChaptersToPlay) (This)->lpVtbl->ChapterPlayAutoStop(This,ulTitle,ulChapter,ulChaptersToPlay) -#endif -#endif - HRESULT WINAPI IDvdControl_TitlePlay_Proxy(IDvdControl *This,ULONG ulTitle); - void __RPC_STUB IDvdControl_TitlePlay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ChapterPlay_Proxy(IDvdControl *This,ULONG ulTitle,ULONG ulChapter); - void __RPC_STUB IDvdControl_ChapterPlay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_TimePlay_Proxy(IDvdControl *This,ULONG ulTitle,ULONG bcdTime); - void __RPC_STUB IDvdControl_TimePlay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_StopForResume_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_StopForResume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_GoUp_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_GoUp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_TimeSearch_Proxy(IDvdControl *This,ULONG bcdTime); - void __RPC_STUB IDvdControl_TimeSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ChapterSearch_Proxy(IDvdControl *This,ULONG ulChapter); - void __RPC_STUB IDvdControl_ChapterSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_PrevPGSearch_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_PrevPGSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_TopPGSearch_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_TopPGSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_NextPGSearch_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_NextPGSearch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ForwardScan_Proxy(IDvdControl *This,double dwSpeed); - void __RPC_STUB IDvdControl_ForwardScan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_BackwardScan_Proxy(IDvdControl *This,double dwSpeed); - void __RPC_STUB IDvdControl_BackwardScan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_MenuCall_Proxy(IDvdControl *This,DVD_MENU_ID MenuID); - void __RPC_STUB IDvdControl_MenuCall_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_Resume_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_Resume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_UpperButtonSelect_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_UpperButtonSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_LowerButtonSelect_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_LowerButtonSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_LeftButtonSelect_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_LeftButtonSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_RightButtonSelect_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_RightButtonSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ButtonActivate_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_ButtonActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ButtonSelectAndActivate_Proxy(IDvdControl *This,ULONG ulButton); - void __RPC_STUB IDvdControl_ButtonSelectAndActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_StillOff_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_StillOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_PauseOn_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_PauseOn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_PauseOff_Proxy(IDvdControl *This); - void __RPC_STUB IDvdControl_PauseOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_MenuLanguageSelect_Proxy(IDvdControl *This,LCID Language); - void __RPC_STUB IDvdControl_MenuLanguageSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_AudioStreamChange_Proxy(IDvdControl *This,ULONG ulAudio); - void __RPC_STUB IDvdControl_AudioStreamChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_SubpictureStreamChange_Proxy(IDvdControl *This,ULONG ulSubPicture,WINBOOL bDisplay); - void __RPC_STUB IDvdControl_SubpictureStreamChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_AngleChange_Proxy(IDvdControl *This,ULONG ulAngle); - void __RPC_STUB IDvdControl_AngleChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ParentalLevelSelect_Proxy(IDvdControl *This,ULONG ulParentalLevel); - void __RPC_STUB IDvdControl_ParentalLevelSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ParentalCountrySelect_Proxy(IDvdControl *This,WORD wCountry); - void __RPC_STUB IDvdControl_ParentalCountrySelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_KaraokeAudioPresentationModeChange_Proxy(IDvdControl *This,ULONG ulMode); - void __RPC_STUB IDvdControl_KaraokeAudioPresentationModeChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_VideoModePreferrence_Proxy(IDvdControl *This,ULONG ulPreferredDisplayMode); - void __RPC_STUB IDvdControl_VideoModePreferrence_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_SetRoot_Proxy(IDvdControl *This,LPCWSTR pszPath); - void __RPC_STUB IDvdControl_SetRoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_MouseActivate_Proxy(IDvdControl *This,POINT point); - void __RPC_STUB IDvdControl_MouseActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_MouseSelect_Proxy(IDvdControl *This,POINT point); - void __RPC_STUB IDvdControl_MouseSelect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl_ChapterPlayAutoStop_Proxy(IDvdControl *This,ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay); - void __RPC_STUB IDvdControl_ChapterPlayAutoStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDvdInfo_INTERFACE_DEFINED__ -#define __IDvdInfo_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdInfo; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdInfo : public IUnknown { - public: - virtual HRESULT WINAPI GetCurrentDomain(DVD_DOMAIN *pDomain) = 0; - virtual HRESULT WINAPI GetCurrentLocation(DVD_PLAYBACK_LOCATION *pLocation) = 0; - virtual HRESULT WINAPI GetTotalTitleTime(ULONG *pulTotalTime) = 0; - virtual HRESULT WINAPI GetCurrentButton(ULONG *pulButtonsAvailable,ULONG *pulCurrentButton) = 0; - virtual HRESULT WINAPI GetCurrentAngle(ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle) = 0; - virtual HRESULT WINAPI GetCurrentAudio(ULONG *pulStreamsAvailable,ULONG *pulCurrentStream) = 0; - virtual HRESULT WINAPI GetCurrentSubpicture(ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pIsDisabled) = 0; - virtual HRESULT WINAPI GetCurrentUOPS(VALID_UOP_SOMTHING_OR_OTHER *pUOP) = 0; - virtual HRESULT WINAPI GetAllSPRMs(SPRMARRAY *pRegisterArray) = 0; - virtual HRESULT WINAPI GetAllGPRMs(GPRMARRAY *pRegisterArray) = 0; - virtual HRESULT WINAPI GetAudioLanguage(ULONG ulStream,LCID *pLanguage) = 0; - virtual HRESULT WINAPI GetSubpictureLanguage(ULONG ulStream,LCID *pLanguage) = 0; - virtual HRESULT WINAPI GetTitleAttributes(ULONG ulTitle,DVD_ATR *pATR) = 0; - virtual HRESULT WINAPI GetVMGAttributes(DVD_ATR *pATR) = 0; - virtual HRESULT WINAPI GetCurrentVideoAttributes(DVD_VideoATR *pATR) = 0; - virtual HRESULT WINAPI GetCurrentAudioAttributes(DVD_AudioATR *pATR) = 0; - virtual HRESULT WINAPI GetCurrentSubpictureAttributes(DVD_SubpictureATR *pATR) = 0; - virtual HRESULT WINAPI GetCurrentVolumeInfo(ULONG *pulNumOfVol,ULONG *pulThisVolNum,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles) = 0; - virtual HRESULT WINAPI GetDVDTextInfo(BYTE *pTextManager,ULONG ulBufSize,ULONG *pulActualSize) = 0; - virtual HRESULT WINAPI GetPlayerParentalLevel(ULONG *pulParentalLevel,ULONG *pulCountryCode) = 0; - virtual HRESULT WINAPI GetNumberOfChapters(ULONG ulTitle,ULONG *pulNumberOfChapters) = 0; - virtual HRESULT WINAPI GetTitleParentalLevels(ULONG ulTitle,ULONG *pulParentalLevels) = 0; - virtual HRESULT WINAPI GetRoot(LPSTR pRoot,ULONG ulBufSize,ULONG *pulActualSize) = 0; - }; -#else - typedef struct IDvdInfoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdInfo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdInfo *This); - ULONG (WINAPI *Release)(IDvdInfo *This); - HRESULT (WINAPI *GetCurrentDomain)(IDvdInfo *This,DVD_DOMAIN *pDomain); - HRESULT (WINAPI *GetCurrentLocation)(IDvdInfo *This,DVD_PLAYBACK_LOCATION *pLocation); - HRESULT (WINAPI *GetTotalTitleTime)(IDvdInfo *This,ULONG *pulTotalTime); - HRESULT (WINAPI *GetCurrentButton)(IDvdInfo *This,ULONG *pulButtonsAvailable,ULONG *pulCurrentButton); - HRESULT (WINAPI *GetCurrentAngle)(IDvdInfo *This,ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle); - HRESULT (WINAPI *GetCurrentAudio)(IDvdInfo *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream); - HRESULT (WINAPI *GetCurrentSubpicture)(IDvdInfo *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pIsDisabled); - HRESULT (WINAPI *GetCurrentUOPS)(IDvdInfo *This,VALID_UOP_SOMTHING_OR_OTHER *pUOP); - HRESULT (WINAPI *GetAllSPRMs)(IDvdInfo *This,SPRMARRAY *pRegisterArray); - HRESULT (WINAPI *GetAllGPRMs)(IDvdInfo *This,GPRMARRAY *pRegisterArray); - HRESULT (WINAPI *GetAudioLanguage)(IDvdInfo *This,ULONG ulStream,LCID *pLanguage); - HRESULT (WINAPI *GetSubpictureLanguage)(IDvdInfo *This,ULONG ulStream,LCID *pLanguage); - HRESULT (WINAPI *GetTitleAttributes)(IDvdInfo *This,ULONG ulTitle,DVD_ATR *pATR); - HRESULT (WINAPI *GetVMGAttributes)(IDvdInfo *This,DVD_ATR *pATR); - HRESULT (WINAPI *GetCurrentVideoAttributes)(IDvdInfo *This,DVD_VideoATR *pATR); - HRESULT (WINAPI *GetCurrentAudioAttributes)(IDvdInfo *This,DVD_AudioATR *pATR); - HRESULT (WINAPI *GetCurrentSubpictureAttributes)(IDvdInfo *This,DVD_SubpictureATR *pATR); - HRESULT (WINAPI *GetCurrentVolumeInfo)(IDvdInfo *This,ULONG *pulNumOfVol,ULONG *pulThisVolNum,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles); - HRESULT (WINAPI *GetDVDTextInfo)(IDvdInfo *This,BYTE *pTextManager,ULONG ulBufSize,ULONG *pulActualSize); - HRESULT (WINAPI *GetPlayerParentalLevel)(IDvdInfo *This,ULONG *pulParentalLevel,ULONG *pulCountryCode); - HRESULT (WINAPI *GetNumberOfChapters)(IDvdInfo *This,ULONG ulTitle,ULONG *pulNumberOfChapters); - HRESULT (WINAPI *GetTitleParentalLevels)(IDvdInfo *This,ULONG ulTitle,ULONG *pulParentalLevels); - HRESULT (WINAPI *GetRoot)(IDvdInfo *This,LPSTR pRoot,ULONG ulBufSize,ULONG *pulActualSize); - END_INTERFACE - } IDvdInfoVtbl; - struct IDvdInfo { - CONST_VTBL struct IDvdInfoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdInfo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdInfo_Release(This) (This)->lpVtbl->Release(This) -#define IDvdInfo_GetCurrentDomain(This,pDomain) (This)->lpVtbl->GetCurrentDomain(This,pDomain) -#define IDvdInfo_GetCurrentLocation(This,pLocation) (This)->lpVtbl->GetCurrentLocation(This,pLocation) -#define IDvdInfo_GetTotalTitleTime(This,pulTotalTime) (This)->lpVtbl->GetTotalTitleTime(This,pulTotalTime) -#define IDvdInfo_GetCurrentButton(This,pulButtonsAvailable,pulCurrentButton) (This)->lpVtbl->GetCurrentButton(This,pulButtonsAvailable,pulCurrentButton) -#define IDvdInfo_GetCurrentAngle(This,pulAnglesAvailable,pulCurrentAngle) (This)->lpVtbl->GetCurrentAngle(This,pulAnglesAvailable,pulCurrentAngle) -#define IDvdInfo_GetCurrentAudio(This,pulStreamsAvailable,pulCurrentStream) (This)->lpVtbl->GetCurrentAudio(This,pulStreamsAvailable,pulCurrentStream) -#define IDvdInfo_GetCurrentSubpicture(This,pulStreamsAvailable,pulCurrentStream,pIsDisabled) (This)->lpVtbl->GetCurrentSubpicture(This,pulStreamsAvailable,pulCurrentStream,pIsDisabled) -#define IDvdInfo_GetCurrentUOPS(This,pUOP) (This)->lpVtbl->GetCurrentUOPS(This,pUOP) -#define IDvdInfo_GetAllSPRMs(This,pRegisterArray) (This)->lpVtbl->GetAllSPRMs(This,pRegisterArray) -#define IDvdInfo_GetAllGPRMs(This,pRegisterArray) (This)->lpVtbl->GetAllGPRMs(This,pRegisterArray) -#define IDvdInfo_GetAudioLanguage(This,ulStream,pLanguage) (This)->lpVtbl->GetAudioLanguage(This,ulStream,pLanguage) -#define IDvdInfo_GetSubpictureLanguage(This,ulStream,pLanguage) (This)->lpVtbl->GetSubpictureLanguage(This,ulStream,pLanguage) -#define IDvdInfo_GetTitleAttributes(This,ulTitle,pATR) (This)->lpVtbl->GetTitleAttributes(This,ulTitle,pATR) -#define IDvdInfo_GetVMGAttributes(This,pATR) (This)->lpVtbl->GetVMGAttributes(This,pATR) -#define IDvdInfo_GetCurrentVideoAttributes(This,pATR) (This)->lpVtbl->GetCurrentVideoAttributes(This,pATR) -#define IDvdInfo_GetCurrentAudioAttributes(This,pATR) (This)->lpVtbl->GetCurrentAudioAttributes(This,pATR) -#define IDvdInfo_GetCurrentSubpictureAttributes(This,pATR) (This)->lpVtbl->GetCurrentSubpictureAttributes(This,pATR) -#define IDvdInfo_GetCurrentVolumeInfo(This,pulNumOfVol,pulThisVolNum,pSide,pulNumOfTitles) (This)->lpVtbl->GetCurrentVolumeInfo(This,pulNumOfVol,pulThisVolNum,pSide,pulNumOfTitles) -#define IDvdInfo_GetDVDTextInfo(This,pTextManager,ulBufSize,pulActualSize) (This)->lpVtbl->GetDVDTextInfo(This,pTextManager,ulBufSize,pulActualSize) -#define IDvdInfo_GetPlayerParentalLevel(This,pulParentalLevel,pulCountryCode) (This)->lpVtbl->GetPlayerParentalLevel(This,pulParentalLevel,pulCountryCode) -#define IDvdInfo_GetNumberOfChapters(This,ulTitle,pulNumberOfChapters) (This)->lpVtbl->GetNumberOfChapters(This,ulTitle,pulNumberOfChapters) -#define IDvdInfo_GetTitleParentalLevels(This,ulTitle,pulParentalLevels) (This)->lpVtbl->GetTitleParentalLevels(This,ulTitle,pulParentalLevels) -#define IDvdInfo_GetRoot(This,pRoot,ulBufSize,pulActualSize) (This)->lpVtbl->GetRoot(This,pRoot,ulBufSize,pulActualSize) -#endif -#endif - HRESULT WINAPI IDvdInfo_GetCurrentDomain_Proxy(IDvdInfo *This,DVD_DOMAIN *pDomain); - void __RPC_STUB IDvdInfo_GetCurrentDomain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentLocation_Proxy(IDvdInfo *This,DVD_PLAYBACK_LOCATION *pLocation); - void __RPC_STUB IDvdInfo_GetCurrentLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetTotalTitleTime_Proxy(IDvdInfo *This,ULONG *pulTotalTime); - void __RPC_STUB IDvdInfo_GetTotalTitleTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentButton_Proxy(IDvdInfo *This,ULONG *pulButtonsAvailable,ULONG *pulCurrentButton); - void __RPC_STUB IDvdInfo_GetCurrentButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentAngle_Proxy(IDvdInfo *This,ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle); - void __RPC_STUB IDvdInfo_GetCurrentAngle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentAudio_Proxy(IDvdInfo *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream); - void __RPC_STUB IDvdInfo_GetCurrentAudio_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentSubpicture_Proxy(IDvdInfo *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pIsDisabled); - void __RPC_STUB IDvdInfo_GetCurrentSubpicture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentUOPS_Proxy(IDvdInfo *This,VALID_UOP_SOMTHING_OR_OTHER *pUOP); - void __RPC_STUB IDvdInfo_GetCurrentUOPS_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetAllSPRMs_Proxy(IDvdInfo *This,SPRMARRAY *pRegisterArray); - void __RPC_STUB IDvdInfo_GetAllSPRMs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetAllGPRMs_Proxy(IDvdInfo *This,GPRMARRAY *pRegisterArray); - void __RPC_STUB IDvdInfo_GetAllGPRMs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetAudioLanguage_Proxy(IDvdInfo *This,ULONG ulStream,LCID *pLanguage); - void __RPC_STUB IDvdInfo_GetAudioLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetSubpictureLanguage_Proxy(IDvdInfo *This,ULONG ulStream,LCID *pLanguage); - void __RPC_STUB IDvdInfo_GetSubpictureLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetTitleAttributes_Proxy(IDvdInfo *This,ULONG ulTitle,DVD_ATR *pATR); - void __RPC_STUB IDvdInfo_GetTitleAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetVMGAttributes_Proxy(IDvdInfo *This,DVD_ATR *pATR); - void __RPC_STUB IDvdInfo_GetVMGAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentVideoAttributes_Proxy(IDvdInfo *This,DVD_VideoATR *pATR); - void __RPC_STUB IDvdInfo_GetCurrentVideoAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentAudioAttributes_Proxy(IDvdInfo *This,DVD_AudioATR *pATR); - void __RPC_STUB IDvdInfo_GetCurrentAudioAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentSubpictureAttributes_Proxy(IDvdInfo *This,DVD_SubpictureATR *pATR); - void __RPC_STUB IDvdInfo_GetCurrentSubpictureAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetCurrentVolumeInfo_Proxy(IDvdInfo *This,ULONG *pulNumOfVol,ULONG *pulThisVolNum,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles); - void __RPC_STUB IDvdInfo_GetCurrentVolumeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetDVDTextInfo_Proxy(IDvdInfo *This,BYTE *pTextManager,ULONG ulBufSize,ULONG *pulActualSize); - void __RPC_STUB IDvdInfo_GetDVDTextInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetPlayerParentalLevel_Proxy(IDvdInfo *This,ULONG *pulParentalLevel,ULONG *pulCountryCode); - void __RPC_STUB IDvdInfo_GetPlayerParentalLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetNumberOfChapters_Proxy(IDvdInfo *This,ULONG ulTitle,ULONG *pulNumberOfChapters); - void __RPC_STUB IDvdInfo_GetNumberOfChapters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetTitleParentalLevels_Proxy(IDvdInfo *This,ULONG ulTitle,ULONG *pulParentalLevels); - void __RPC_STUB IDvdInfo_GetTitleParentalLevels_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo_GetRoot_Proxy(IDvdInfo *This,LPSTR pRoot,ULONG ulBufSize,ULONG *pulActualSize); - void __RPC_STUB IDvdInfo_GetRoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDvdCmd_INTERFACE_DEFINED__ -#define __IDvdCmd_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdCmd; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdCmd : public IUnknown { - public: - virtual HRESULT WINAPI WaitForStart(void) = 0; - virtual HRESULT WINAPI WaitForEnd(void) = 0; - }; -#else - typedef struct IDvdCmdVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdCmd *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdCmd *This); - ULONG (WINAPI *Release)(IDvdCmd *This); - HRESULT (WINAPI *WaitForStart)(IDvdCmd *This); - HRESULT (WINAPI *WaitForEnd)(IDvdCmd *This); - END_INTERFACE - } IDvdCmdVtbl; - struct IDvdCmd { - CONST_VTBL struct IDvdCmdVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdCmd_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdCmd_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdCmd_Release(This) (This)->lpVtbl->Release(This) -#define IDvdCmd_WaitForStart(This) (This)->lpVtbl->WaitForStart(This) -#define IDvdCmd_WaitForEnd(This) (This)->lpVtbl->WaitForEnd(This) -#endif -#endif - HRESULT WINAPI IDvdCmd_WaitForStart_Proxy(IDvdCmd *This); - void __RPC_STUB IDvdCmd_WaitForStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdCmd_WaitForEnd_Proxy(IDvdCmd *This); - void __RPC_STUB IDvdCmd_WaitForEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDvdState_INTERFACE_DEFINED__ -#define __IDvdState_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdState; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdState : public IUnknown { - public: - virtual HRESULT WINAPI GetDiscID(ULONGLONG *pullUniqueID) = 0; - virtual HRESULT WINAPI GetParentalLevel(ULONG *pulParentalLevel) = 0; - }; -#else - typedef struct IDvdStateVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdState *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdState *This); - ULONG (WINAPI *Release)(IDvdState *This); - HRESULT (WINAPI *GetDiscID)(IDvdState *This,ULONGLONG *pullUniqueID); - HRESULT (WINAPI *GetParentalLevel)(IDvdState *This,ULONG *pulParentalLevel); - END_INTERFACE - } IDvdStateVtbl; - struct IDvdState { - CONST_VTBL struct IDvdStateVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdState_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdState_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdState_Release(This) (This)->lpVtbl->Release(This) -#define IDvdState_GetDiscID(This,pullUniqueID) (This)->lpVtbl->GetDiscID(This,pullUniqueID) -#define IDvdState_GetParentalLevel(This,pulParentalLevel) (This)->lpVtbl->GetParentalLevel(This,pulParentalLevel) -#endif -#endif - HRESULT WINAPI IDvdState_GetDiscID_Proxy(IDvdState *This,ULONGLONG *pullUniqueID); - void __RPC_STUB IDvdState_GetDiscID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdState_GetParentalLevel_Proxy(IDvdState *This,ULONG *pulParentalLevel); - void __RPC_STUB IDvdState_GetParentalLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDvdControl2_INTERFACE_DEFINED__ -#define __IDvdControl2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdControl2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdControl2 : public IUnknown { - public: - virtual HRESULT WINAPI PlayTitle(ULONG ulTitle,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayChapterInTitle(ULONG ulTitle,ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayAtTimeInTitle(ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI Stop(void) = 0; - virtual HRESULT WINAPI ReturnFromSubmenu(DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayAtTime(DVD_HMSF_TIMECODE *pTime,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayChapter(ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayPrevChapter(DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI ReplayChapter(DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayNextChapter(DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayForwards(double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayBackwards(double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI ShowMenu(DVD_MENU_ID MenuID,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI Resume(DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SelectRelativeButton(DVD_RELATIVE_BUTTON buttonDir) = 0; - virtual HRESULT WINAPI ActivateButton(void) = 0; - virtual HRESULT WINAPI SelectButton(ULONG ulButton) = 0; - virtual HRESULT WINAPI SelectAndActivateButton(ULONG ulButton) = 0; - virtual HRESULT WINAPI StillOff(void) = 0; - virtual HRESULT WINAPI Pause(WINBOOL bState) = 0; - virtual HRESULT WINAPI SelectAudioStream(ULONG ulAudio,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SelectSubpictureStream(ULONG ulSubPicture,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SetSubpictureState(WINBOOL bState,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SelectAngle(ULONG ulAngle,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SelectParentalLevel(ULONG ulParentalLevel) = 0; - virtual HRESULT WINAPI SelectParentalCountry(BYTE bCountry[2]) = 0; - virtual HRESULT WINAPI SelectKaraokeAudioPresentationMode(ULONG ulMode) = 0; - virtual HRESULT WINAPI SelectVideoModePreference(ULONG ulPreferredDisplayMode) = 0; - virtual HRESULT WINAPI SetDVDDirectory(LPCWSTR pszwPath) = 0; - virtual HRESULT WINAPI ActivateAtPosition(POINT point) = 0; - virtual HRESULT WINAPI SelectAtPosition(POINT point) = 0; - virtual HRESULT WINAPI PlayChaptersAutoStop(ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI AcceptParentalLevelChange(WINBOOL bAccept) = 0; - virtual HRESULT WINAPI SetOption(DVD_OPTION_FLAG flag,WINBOOL fState) = 0; - virtual HRESULT WINAPI SetState(IDvdState *pState,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI PlayPeriodInTitleAutoStop(ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DVD_HMSF_TIMECODE *pEndTime,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SetGPRM(ULONG ulIndex,WORD wValue,DWORD dwFlags,IDvdCmd **ppCmd) = 0; - virtual HRESULT WINAPI SelectDefaultMenuLanguage(LCID Language) = 0; - virtual HRESULT WINAPI SelectDefaultAudioLanguage(LCID Language,DVD_AUDIO_LANG_EXT audioExtension) = 0; - virtual HRESULT WINAPI SelectDefaultSubpictureLanguage(LCID Language,DVD_SUBPICTURE_LANG_EXT subpictureExtension) = 0; - }; -#else - typedef struct IDvdControl2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdControl2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdControl2 *This); - ULONG (WINAPI *Release)(IDvdControl2 *This); - HRESULT (WINAPI *PlayTitle)(IDvdControl2 *This,ULONG ulTitle,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayChapterInTitle)(IDvdControl2 *This,ULONG ulTitle,ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayAtTimeInTitle)(IDvdControl2 *This,ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *Stop)(IDvdControl2 *This); - HRESULT (WINAPI *ReturnFromSubmenu)(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayAtTime)(IDvdControl2 *This,DVD_HMSF_TIMECODE *pTime,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayChapter)(IDvdControl2 *This,ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayPrevChapter)(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *ReplayChapter)(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayNextChapter)(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayForwards)(IDvdControl2 *This,double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayBackwards)(IDvdControl2 *This,double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *ShowMenu)(IDvdControl2 *This,DVD_MENU_ID MenuID,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *Resume)(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SelectRelativeButton)(IDvdControl2 *This,DVD_RELATIVE_BUTTON buttonDir); - HRESULT (WINAPI *ActivateButton)(IDvdControl2 *This); - HRESULT (WINAPI *SelectButton)(IDvdControl2 *This,ULONG ulButton); - HRESULT (WINAPI *SelectAndActivateButton)(IDvdControl2 *This,ULONG ulButton); - HRESULT (WINAPI *StillOff)(IDvdControl2 *This); - HRESULT (WINAPI *Pause)(IDvdControl2 *This,WINBOOL bState); - HRESULT (WINAPI *SelectAudioStream)(IDvdControl2 *This,ULONG ulAudio,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SelectSubpictureStream)(IDvdControl2 *This,ULONG ulSubPicture,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SetSubpictureState)(IDvdControl2 *This,WINBOOL bState,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SelectAngle)(IDvdControl2 *This,ULONG ulAngle,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SelectParentalLevel)(IDvdControl2 *This,ULONG ulParentalLevel); - HRESULT (WINAPI *SelectParentalCountry)(IDvdControl2 *This,BYTE bCountry[2]); - HRESULT (WINAPI *SelectKaraokeAudioPresentationMode)(IDvdControl2 *This,ULONG ulMode); - HRESULT (WINAPI *SelectVideoModePreference)(IDvdControl2 *This,ULONG ulPreferredDisplayMode); - HRESULT (WINAPI *SetDVDDirectory)(IDvdControl2 *This,LPCWSTR pszwPath); - HRESULT (WINAPI *ActivateAtPosition)(IDvdControl2 *This,POINT point); - HRESULT (WINAPI *SelectAtPosition)(IDvdControl2 *This,POINT point); - HRESULT (WINAPI *PlayChaptersAutoStop)(IDvdControl2 *This,ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *AcceptParentalLevelChange)(IDvdControl2 *This,WINBOOL bAccept); - HRESULT (WINAPI *SetOption)(IDvdControl2 *This,DVD_OPTION_FLAG flag,WINBOOL fState); - HRESULT (WINAPI *SetState)(IDvdControl2 *This,IDvdState *pState,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *PlayPeriodInTitleAutoStop)(IDvdControl2 *This,ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DVD_HMSF_TIMECODE *pEndTime,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SetGPRM)(IDvdControl2 *This,ULONG ulIndex,WORD wValue,DWORD dwFlags,IDvdCmd **ppCmd); - HRESULT (WINAPI *SelectDefaultMenuLanguage)(IDvdControl2 *This,LCID Language); - HRESULT (WINAPI *SelectDefaultAudioLanguage)(IDvdControl2 *This,LCID Language,DVD_AUDIO_LANG_EXT audioExtension); - HRESULT (WINAPI *SelectDefaultSubpictureLanguage)(IDvdControl2 *This,LCID Language,DVD_SUBPICTURE_LANG_EXT subpictureExtension); - END_INTERFACE - } IDvdControl2Vtbl; - struct IDvdControl2 { - CONST_VTBL struct IDvdControl2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdControl2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdControl2_Release(This) (This)->lpVtbl->Release(This) -#define IDvdControl2_PlayTitle(This,ulTitle,dwFlags,ppCmd) (This)->lpVtbl->PlayTitle(This,ulTitle,dwFlags,ppCmd) -#define IDvdControl2_PlayChapterInTitle(This,ulTitle,ulChapter,dwFlags,ppCmd) (This)->lpVtbl->PlayChapterInTitle(This,ulTitle,ulChapter,dwFlags,ppCmd) -#define IDvdControl2_PlayAtTimeInTitle(This,ulTitle,pStartTime,dwFlags,ppCmd) (This)->lpVtbl->PlayAtTimeInTitle(This,ulTitle,pStartTime,dwFlags,ppCmd) -#define IDvdControl2_Stop(This) (This)->lpVtbl->Stop(This) -#define IDvdControl2_ReturnFromSubmenu(This,dwFlags,ppCmd) (This)->lpVtbl->ReturnFromSubmenu(This,dwFlags,ppCmd) -#define IDvdControl2_PlayAtTime(This,pTime,dwFlags,ppCmd) (This)->lpVtbl->PlayAtTime(This,pTime,dwFlags,ppCmd) -#define IDvdControl2_PlayChapter(This,ulChapter,dwFlags,ppCmd) (This)->lpVtbl->PlayChapter(This,ulChapter,dwFlags,ppCmd) -#define IDvdControl2_PlayPrevChapter(This,dwFlags,ppCmd) (This)->lpVtbl->PlayPrevChapter(This,dwFlags,ppCmd) -#define IDvdControl2_ReplayChapter(This,dwFlags,ppCmd) (This)->lpVtbl->ReplayChapter(This,dwFlags,ppCmd) -#define IDvdControl2_PlayNextChapter(This,dwFlags,ppCmd) (This)->lpVtbl->PlayNextChapter(This,dwFlags,ppCmd) -#define IDvdControl2_PlayForwards(This,dSpeed,dwFlags,ppCmd) (This)->lpVtbl->PlayForwards(This,dSpeed,dwFlags,ppCmd) -#define IDvdControl2_PlayBackwards(This,dSpeed,dwFlags,ppCmd) (This)->lpVtbl->PlayBackwards(This,dSpeed,dwFlags,ppCmd) -#define IDvdControl2_ShowMenu(This,MenuID,dwFlags,ppCmd) (This)->lpVtbl->ShowMenu(This,MenuID,dwFlags,ppCmd) -#define IDvdControl2_Resume(This,dwFlags,ppCmd) (This)->lpVtbl->Resume(This,dwFlags,ppCmd) -#define IDvdControl2_SelectRelativeButton(This,buttonDir) (This)->lpVtbl->SelectRelativeButton(This,buttonDir) -#define IDvdControl2_ActivateButton(This) (This)->lpVtbl->ActivateButton(This) -#define IDvdControl2_SelectButton(This,ulButton) (This)->lpVtbl->SelectButton(This,ulButton) -#define IDvdControl2_SelectAndActivateButton(This,ulButton) (This)->lpVtbl->SelectAndActivateButton(This,ulButton) -#define IDvdControl2_StillOff(This) (This)->lpVtbl->StillOff(This) -#define IDvdControl2_Pause(This,bState) (This)->lpVtbl->Pause(This,bState) -#define IDvdControl2_SelectAudioStream(This,ulAudio,dwFlags,ppCmd) (This)->lpVtbl->SelectAudioStream(This,ulAudio,dwFlags,ppCmd) -#define IDvdControl2_SelectSubpictureStream(This,ulSubPicture,dwFlags,ppCmd) (This)->lpVtbl->SelectSubpictureStream(This,ulSubPicture,dwFlags,ppCmd) -#define IDvdControl2_SetSubpictureState(This,bState,dwFlags,ppCmd) (This)->lpVtbl->SetSubpictureState(This,bState,dwFlags,ppCmd) -#define IDvdControl2_SelectAngle(This,ulAngle,dwFlags,ppCmd) (This)->lpVtbl->SelectAngle(This,ulAngle,dwFlags,ppCmd) -#define IDvdControl2_SelectParentalLevel(This,ulParentalLevel) (This)->lpVtbl->SelectParentalLevel(This,ulParentalLevel) -#define IDvdControl2_SelectParentalCountry(This,bCountry) (This)->lpVtbl->SelectParentalCountry(This,bCountry) -#define IDvdControl2_SelectKaraokeAudioPresentationMode(This,ulMode) (This)->lpVtbl->SelectKaraokeAudioPresentationMode(This,ulMode) -#define IDvdControl2_SelectVideoModePreference(This,ulPreferredDisplayMode) (This)->lpVtbl->SelectVideoModePreference(This,ulPreferredDisplayMode) -#define IDvdControl2_SetDVDDirectory(This,pszwPath) (This)->lpVtbl->SetDVDDirectory(This,pszwPath) -#define IDvdControl2_ActivateAtPosition(This,point) (This)->lpVtbl->ActivateAtPosition(This,point) -#define IDvdControl2_SelectAtPosition(This,point) (This)->lpVtbl->SelectAtPosition(This,point) -#define IDvdControl2_PlayChaptersAutoStop(This,ulTitle,ulChapter,ulChaptersToPlay,dwFlags,ppCmd) (This)->lpVtbl->PlayChaptersAutoStop(This,ulTitle,ulChapter,ulChaptersToPlay,dwFlags,ppCmd) -#define IDvdControl2_AcceptParentalLevelChange(This,bAccept) (This)->lpVtbl->AcceptParentalLevelChange(This,bAccept) -#define IDvdControl2_SetOption(This,flag,fState) (This)->lpVtbl->SetOption(This,flag,fState) -#define IDvdControl2_SetState(This,pState,dwFlags,ppCmd) (This)->lpVtbl->SetState(This,pState,dwFlags,ppCmd) -#define IDvdControl2_PlayPeriodInTitleAutoStop(This,ulTitle,pStartTime,pEndTime,dwFlags,ppCmd) (This)->lpVtbl->PlayPeriodInTitleAutoStop(This,ulTitle,pStartTime,pEndTime,dwFlags,ppCmd) -#define IDvdControl2_SetGPRM(This,ulIndex,wValue,dwFlags,ppCmd) (This)->lpVtbl->SetGPRM(This,ulIndex,wValue,dwFlags,ppCmd) -#define IDvdControl2_SelectDefaultMenuLanguage(This,Language) (This)->lpVtbl->SelectDefaultMenuLanguage(This,Language) -#define IDvdControl2_SelectDefaultAudioLanguage(This,Language,audioExtension) (This)->lpVtbl->SelectDefaultAudioLanguage(This,Language,audioExtension) -#define IDvdControl2_SelectDefaultSubpictureLanguage(This,Language,subpictureExtension) (This)->lpVtbl->SelectDefaultSubpictureLanguage(This,Language,subpictureExtension) -#endif -#endif - HRESULT WINAPI IDvdControl2_PlayTitle_Proxy(IDvdControl2 *This,ULONG ulTitle,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayTitle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayChapterInTitle_Proxy(IDvdControl2 *This,ULONG ulTitle,ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayChapterInTitle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayAtTimeInTitle_Proxy(IDvdControl2 *This,ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayAtTimeInTitle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_Stop_Proxy(IDvdControl2 *This); - void __RPC_STUB IDvdControl2_Stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_ReturnFromSubmenu_Proxy(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_ReturnFromSubmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayAtTime_Proxy(IDvdControl2 *This,DVD_HMSF_TIMECODE *pTime,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayAtTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayChapter_Proxy(IDvdControl2 *This,ULONG ulChapter,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayChapter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayPrevChapter_Proxy(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayPrevChapter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_ReplayChapter_Proxy(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_ReplayChapter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayNextChapter_Proxy(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayNextChapter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayForwards_Proxy(IDvdControl2 *This,double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayForwards_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayBackwards_Proxy(IDvdControl2 *This,double dSpeed,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayBackwards_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_ShowMenu_Proxy(IDvdControl2 *This,DVD_MENU_ID MenuID,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_ShowMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_Resume_Proxy(IDvdControl2 *This,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_Resume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectRelativeButton_Proxy(IDvdControl2 *This,DVD_RELATIVE_BUTTON buttonDir); - void __RPC_STUB IDvdControl2_SelectRelativeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_ActivateButton_Proxy(IDvdControl2 *This); - void __RPC_STUB IDvdControl2_ActivateButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectButton_Proxy(IDvdControl2 *This,ULONG ulButton); - void __RPC_STUB IDvdControl2_SelectButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectAndActivateButton_Proxy(IDvdControl2 *This,ULONG ulButton); - void __RPC_STUB IDvdControl2_SelectAndActivateButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_StillOff_Proxy(IDvdControl2 *This); - void __RPC_STUB IDvdControl2_StillOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_Pause_Proxy(IDvdControl2 *This,WINBOOL bState); - void __RPC_STUB IDvdControl2_Pause_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectAudioStream_Proxy(IDvdControl2 *This,ULONG ulAudio,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SelectAudioStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectSubpictureStream_Proxy(IDvdControl2 *This,ULONG ulSubPicture,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SelectSubpictureStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SetSubpictureState_Proxy(IDvdControl2 *This,WINBOOL bState,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SetSubpictureState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectAngle_Proxy(IDvdControl2 *This,ULONG ulAngle,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SelectAngle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectParentalLevel_Proxy(IDvdControl2 *This,ULONG ulParentalLevel); - void __RPC_STUB IDvdControl2_SelectParentalLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectParentalCountry_Proxy(IDvdControl2 *This,BYTE bCountry[2]); - void __RPC_STUB IDvdControl2_SelectParentalCountry_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectKaraokeAudioPresentationMode_Proxy(IDvdControl2 *This,ULONG ulMode); - void __RPC_STUB IDvdControl2_SelectKaraokeAudioPresentationMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectVideoModePreference_Proxy(IDvdControl2 *This,ULONG ulPreferredDisplayMode); - void __RPC_STUB IDvdControl2_SelectVideoModePreference_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SetDVDDirectory_Proxy(IDvdControl2 *This,LPCWSTR pszwPath); - void __RPC_STUB IDvdControl2_SetDVDDirectory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_ActivateAtPosition_Proxy(IDvdControl2 *This,POINT point); - void __RPC_STUB IDvdControl2_ActivateAtPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectAtPosition_Proxy(IDvdControl2 *This,POINT point); - void __RPC_STUB IDvdControl2_SelectAtPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayChaptersAutoStop_Proxy(IDvdControl2 *This,ULONG ulTitle,ULONG ulChapter,ULONG ulChaptersToPlay,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayChaptersAutoStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_AcceptParentalLevelChange_Proxy(IDvdControl2 *This,WINBOOL bAccept); - void __RPC_STUB IDvdControl2_AcceptParentalLevelChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SetOption_Proxy(IDvdControl2 *This,DVD_OPTION_FLAG flag,WINBOOL fState); - void __RPC_STUB IDvdControl2_SetOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SetState_Proxy(IDvdControl2 *This,IDvdState *pState,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_PlayPeriodInTitleAutoStop_Proxy(IDvdControl2 *This,ULONG ulTitle,DVD_HMSF_TIMECODE *pStartTime,DVD_HMSF_TIMECODE *pEndTime,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_PlayPeriodInTitleAutoStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SetGPRM_Proxy(IDvdControl2 *This,ULONG ulIndex,WORD wValue,DWORD dwFlags,IDvdCmd **ppCmd); - void __RPC_STUB IDvdControl2_SetGPRM_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectDefaultMenuLanguage_Proxy(IDvdControl2 *This,LCID Language); - void __RPC_STUB IDvdControl2_SelectDefaultMenuLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectDefaultAudioLanguage_Proxy(IDvdControl2 *This,LCID Language,DVD_AUDIO_LANG_EXT audioExtension); - void __RPC_STUB IDvdControl2_SelectDefaultAudioLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdControl2_SelectDefaultSubpictureLanguage_Proxy(IDvdControl2 *This,LCID Language,DVD_SUBPICTURE_LANG_EXT subpictureExtension); - void __RPC_STUB IDvdControl2_SelectDefaultSubpictureLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum DVD_TextStringType { - DVD_Struct_Volume = 0x1,DVD_Struct_Title = 0x2,DVD_Struct_ParentalID = 0x3,DVD_Struct_PartOfTitle = 0x4,DVD_Struct_Cell = 0x5, - DVD_Stream_Audio = 0x10,DVD_Stream_Subpicture = 0x11,DVD_Stream_Angle = 0x12,DVD_Channel_Audio = 0x20,DVD_General_Name = 0x30, - DVD_General_Comments = 0x31,DVD_Title_Series = 0x38,DVD_Title_Movie = 0x39,DVD_Title_Video = 0x3a,DVD_Title_Album = 0x3b,DVD_Title_Song = 0x3c, - DVD_Title_Other = 0x3f,DVD_Title_Sub_Series = 0x40,DVD_Title_Sub_Movie = 0x41,DVD_Title_Sub_Video = 0x42,DVD_Title_Sub_Album = 0x43, - DVD_Title_Sub_Song = 0x44,DVD_Title_Sub_Other = 0x47,DVD_Title_Orig_Series = 0x48,DVD_Title_Orig_Movie = 0x49,DVD_Title_Orig_Video = 0x4a, - DVD_Title_Orig_Album = 0x4b,DVD_Title_Orig_Song = 0x4c,DVD_Title_Orig_Other = 0x4f,DVD_Other_Scene = 0x50,DVD_Other_Cut = 0x51,DVD_Other_Take = 0x52 - }; - - enum DVD_TextCharSet { - DVD_CharSet_Unicode = 0,DVD_CharSet_ISO646 = 1,DVD_CharSet_JIS_Roman_Kanji = 2,DVD_CharSet_ISO8859_1 = 3, - DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4 - }; -#define DVD_TITLE_MENU 0x000 -#define DVD_STREAM_DATA_CURRENT 0x800 -#define DVD_STREAM_DATA_VMGM 0x400 -#define DVD_STREAM_DATA_VTSM 0x401 -#define DVD_DEFAULT_AUDIO_STREAM 0x0f - - typedef struct tagDVD_DECODER_CAPS { - DWORD dwSize; - DWORD dwAudioCaps; - double dFwdMaxRateVideo; - double dFwdMaxRateAudio; - double dFwdMaxRateSP; - double dBwdMaxRateVideo; - double dBwdMaxRateAudio; - double dBwdMaxRateSP; - DWORD dwRes1; - DWORD dwRes2; - DWORD dwRes3; - DWORD dwRes4; - } DVD_DECODER_CAPS; - -#define DVD_AUDIO_CAPS_AC3 0x00000001 -#define DVD_AUDIO_CAPS_MPEG2 0x00000002 -#define DVD_AUDIO_CAPS_LPCM 0x00000004 -#define DVD_AUDIO_CAPS_DTS 0x00000008 -#define DVD_AUDIO_CAPS_SDDS 0x00000010 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0387_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0387_v0_0_s_ifspec; -#ifndef __IDvdInfo2_INTERFACE_DEFINED__ -#define __IDvdInfo2_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdInfo2; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdInfo2 : public IUnknown { - public: - virtual HRESULT WINAPI GetCurrentDomain(DVD_DOMAIN *pDomain) = 0; - virtual HRESULT WINAPI GetCurrentLocation(DVD_PLAYBACK_LOCATION2 *pLocation) = 0; - virtual HRESULT WINAPI GetTotalTitleTime(DVD_HMSF_TIMECODE *pTotalTime,ULONG *ulTimeCodeFlags) = 0; - virtual HRESULT WINAPI GetCurrentButton(ULONG *pulButtonsAvailable,ULONG *pulCurrentButton) = 0; - virtual HRESULT WINAPI GetCurrentAngle(ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle) = 0; - virtual HRESULT WINAPI GetCurrentAudio(ULONG *pulStreamsAvailable,ULONG *pulCurrentStream) = 0; - virtual HRESULT WINAPI GetCurrentSubpicture(ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pbIsDisabled) = 0; - virtual HRESULT WINAPI GetCurrentUOPS(ULONG *pulUOPs) = 0; - virtual HRESULT WINAPI GetAllSPRMs(SPRMARRAY *pRegisterArray) = 0; - virtual HRESULT WINAPI GetAllGPRMs(GPRMARRAY *pRegisterArray) = 0; - virtual HRESULT WINAPI GetAudioLanguage(ULONG ulStream,LCID *pLanguage) = 0; - virtual HRESULT WINAPI GetSubpictureLanguage(ULONG ulStream,LCID *pLanguage) = 0; - virtual HRESULT WINAPI GetTitleAttributes(ULONG ulTitle,DVD_MenuAttributes *pMenu,DVD_TitleAttributes *pTitle) = 0; - virtual HRESULT WINAPI GetVMGAttributes(DVD_MenuAttributes *pATR) = 0; - virtual HRESULT WINAPI GetCurrentVideoAttributes(DVD_VideoAttributes *pATR) = 0; - virtual HRESULT WINAPI GetAudioAttributes(ULONG ulStream,DVD_AudioAttributes *pATR) = 0; - virtual HRESULT WINAPI GetKaraokeAttributes(ULONG ulStream,DVD_KaraokeAttributes *pAttributes) = 0; - virtual HRESULT WINAPI GetSubpictureAttributes(ULONG ulStream,DVD_SubpictureAttributes *pATR) = 0; - virtual HRESULT WINAPI GetDVDVolumeInfo(ULONG *pulNumOfVolumes,ULONG *pulVolume,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles) = 0; - virtual HRESULT WINAPI GetDVDTextNumberOfLanguages(ULONG *pulNumOfLangs) = 0; - virtual HRESULT WINAPI GetDVDTextLanguageInfo(ULONG ulLangIndex,ULONG *pulNumOfStrings,LCID *pLangCode,enum DVD_TextCharSet *pbCharacterSet) = 0; - virtual HRESULT WINAPI GetDVDTextStringAsNative(ULONG ulLangIndex,ULONG ulStringIndex,BYTE *pbBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType) = 0; - virtual HRESULT WINAPI GetDVDTextStringAsUnicode(ULONG ulLangIndex,ULONG ulStringIndex,WCHAR *pchwBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType) = 0; - virtual HRESULT WINAPI GetPlayerParentalLevel(ULONG *pulParentalLevel,BYTE pbCountryCode[2]) = 0; - virtual HRESULT WINAPI GetNumberOfChapters(ULONG ulTitle,ULONG *pulNumOfChapters) = 0; - virtual HRESULT WINAPI GetTitleParentalLevels(ULONG ulTitle,ULONG *pulParentalLevels) = 0; - virtual HRESULT WINAPI GetDVDDirectory(LPWSTR pszwPath,ULONG ulMaxSize,ULONG *pulActualSize) = 0; - virtual HRESULT WINAPI IsAudioStreamEnabled(ULONG ulStreamNum,WINBOOL *pbEnabled) = 0; - virtual HRESULT WINAPI GetDiscID(LPCWSTR pszwPath,ULONGLONG *pullDiscID) = 0; - virtual HRESULT WINAPI GetState(IDvdState **pStateData) = 0; - virtual HRESULT WINAPI GetMenuLanguages(LCID *pLanguages,ULONG ulMaxLanguages,ULONG *pulActualLanguages) = 0; - virtual HRESULT WINAPI GetButtonAtPosition(POINT point,ULONG *pulButtonIndex) = 0; - virtual HRESULT WINAPI GetCmdFromEvent(LONG_PTR lParam1,IDvdCmd **pCmdObj) = 0; - virtual HRESULT WINAPI GetDefaultMenuLanguage(LCID *pLanguage) = 0; - virtual HRESULT WINAPI GetDefaultAudioLanguage(LCID *pLanguage,DVD_AUDIO_LANG_EXT *pAudioExtension) = 0; - virtual HRESULT WINAPI GetDefaultSubpictureLanguage(LCID *pLanguage,DVD_SUBPICTURE_LANG_EXT *pSubpictureExtension) = 0; - virtual HRESULT WINAPI GetDecoderCaps(DVD_DECODER_CAPS *pCaps) = 0; - virtual HRESULT WINAPI GetButtonRect(ULONG ulButton,RECT *pRect) = 0; - virtual HRESULT WINAPI IsSubpictureStreamEnabled(ULONG ulStreamNum,WINBOOL *pbEnabled) = 0; - }; -#else - typedef struct IDvdInfo2Vtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdInfo2 *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdInfo2 *This); - ULONG (WINAPI *Release)(IDvdInfo2 *This); - HRESULT (WINAPI *GetCurrentDomain)(IDvdInfo2 *This,DVD_DOMAIN *pDomain); - HRESULT (WINAPI *GetCurrentLocation)(IDvdInfo2 *This,DVD_PLAYBACK_LOCATION2 *pLocation); - HRESULT (WINAPI *GetTotalTitleTime)(IDvdInfo2 *This,DVD_HMSF_TIMECODE *pTotalTime,ULONG *ulTimeCodeFlags); - HRESULT (WINAPI *GetCurrentButton)(IDvdInfo2 *This,ULONG *pulButtonsAvailable,ULONG *pulCurrentButton); - HRESULT (WINAPI *GetCurrentAngle)(IDvdInfo2 *This,ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle); - HRESULT (WINAPI *GetCurrentAudio)(IDvdInfo2 *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream); - HRESULT (WINAPI *GetCurrentSubpicture)(IDvdInfo2 *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pbIsDisabled); - HRESULT (WINAPI *GetCurrentUOPS)(IDvdInfo2 *This,ULONG *pulUOPs); - HRESULT (WINAPI *GetAllSPRMs)(IDvdInfo2 *This,SPRMARRAY *pRegisterArray); - HRESULT (WINAPI *GetAllGPRMs)(IDvdInfo2 *This,GPRMARRAY *pRegisterArray); - HRESULT (WINAPI *GetAudioLanguage)(IDvdInfo2 *This,ULONG ulStream,LCID *pLanguage); - HRESULT (WINAPI *GetSubpictureLanguage)(IDvdInfo2 *This,ULONG ulStream,LCID *pLanguage); - HRESULT (WINAPI *GetTitleAttributes)(IDvdInfo2 *This,ULONG ulTitle,DVD_MenuAttributes *pMenu,DVD_TitleAttributes *pTitle); - HRESULT (WINAPI *GetVMGAttributes)(IDvdInfo2 *This,DVD_MenuAttributes *pATR); - HRESULT (WINAPI *GetCurrentVideoAttributes)(IDvdInfo2 *This,DVD_VideoAttributes *pATR); - HRESULT (WINAPI *GetAudioAttributes)(IDvdInfo2 *This,ULONG ulStream,DVD_AudioAttributes *pATR); - HRESULT (WINAPI *GetKaraokeAttributes)(IDvdInfo2 *This,ULONG ulStream,DVD_KaraokeAttributes *pAttributes); - HRESULT (WINAPI *GetSubpictureAttributes)(IDvdInfo2 *This,ULONG ulStream,DVD_SubpictureAttributes *pATR); - HRESULT (WINAPI *GetDVDVolumeInfo)(IDvdInfo2 *This,ULONG *pulNumOfVolumes,ULONG *pulVolume,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles); - HRESULT (WINAPI *GetDVDTextNumberOfLanguages)(IDvdInfo2 *This,ULONG *pulNumOfLangs); - HRESULT (WINAPI *GetDVDTextLanguageInfo)(IDvdInfo2 *This,ULONG ulLangIndex,ULONG *pulNumOfStrings,LCID *pLangCode,enum DVD_TextCharSet *pbCharacterSet); - HRESULT (WINAPI *GetDVDTextStringAsNative)(IDvdInfo2 *This,ULONG ulLangIndex,ULONG ulStringIndex,BYTE *pbBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType); - HRESULT (WINAPI *GetDVDTextStringAsUnicode)(IDvdInfo2 *This,ULONG ulLangIndex,ULONG ulStringIndex,WCHAR *pchwBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType); - HRESULT (WINAPI *GetPlayerParentalLevel)(IDvdInfo2 *This,ULONG *pulParentalLevel,BYTE pbCountryCode[2]); - HRESULT (WINAPI *GetNumberOfChapters)(IDvdInfo2 *This,ULONG ulTitle,ULONG *pulNumOfChapters); - HRESULT (WINAPI *GetTitleParentalLevels)(IDvdInfo2 *This,ULONG ulTitle,ULONG *pulParentalLevels); - HRESULT (WINAPI *GetDVDDirectory)(IDvdInfo2 *This,LPWSTR pszwPath,ULONG ulMaxSize,ULONG *pulActualSize); - HRESULT (WINAPI *IsAudioStreamEnabled)(IDvdInfo2 *This,ULONG ulStreamNum,WINBOOL *pbEnabled); - HRESULT (WINAPI *GetDiscID)(IDvdInfo2 *This,LPCWSTR pszwPath,ULONGLONG *pullDiscID); - HRESULT (WINAPI *GetState)(IDvdInfo2 *This,IDvdState **pStateData); - HRESULT (WINAPI *GetMenuLanguages)(IDvdInfo2 *This,LCID *pLanguages,ULONG ulMaxLanguages,ULONG *pulActualLanguages); - HRESULT (WINAPI *GetButtonAtPosition)(IDvdInfo2 *This,POINT point,ULONG *pulButtonIndex); - HRESULT (WINAPI *GetCmdFromEvent)(IDvdInfo2 *This,LONG_PTR lParam1,IDvdCmd **pCmdObj); - HRESULT (WINAPI *GetDefaultMenuLanguage)(IDvdInfo2 *This,LCID *pLanguage); - HRESULT (WINAPI *GetDefaultAudioLanguage)(IDvdInfo2 *This,LCID *pLanguage,DVD_AUDIO_LANG_EXT *pAudioExtension); - HRESULT (WINAPI *GetDefaultSubpictureLanguage)(IDvdInfo2 *This,LCID *pLanguage,DVD_SUBPICTURE_LANG_EXT *pSubpictureExtension); - HRESULT (WINAPI *GetDecoderCaps)(IDvdInfo2 *This,DVD_DECODER_CAPS *pCaps); - HRESULT (WINAPI *GetButtonRect)(IDvdInfo2 *This,ULONG ulButton,RECT *pRect); - HRESULT (WINAPI *IsSubpictureStreamEnabled)(IDvdInfo2 *This,ULONG ulStreamNum,WINBOOL *pbEnabled); - END_INTERFACE - } IDvdInfo2Vtbl; - struct IDvdInfo2 { - CONST_VTBL struct IDvdInfo2Vtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdInfo2_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdInfo2_Release(This) (This)->lpVtbl->Release(This) -#define IDvdInfo2_GetCurrentDomain(This,pDomain) (This)->lpVtbl->GetCurrentDomain(This,pDomain) -#define IDvdInfo2_GetCurrentLocation(This,pLocation) (This)->lpVtbl->GetCurrentLocation(This,pLocation) -#define IDvdInfo2_GetTotalTitleTime(This,pTotalTime,ulTimeCodeFlags) (This)->lpVtbl->GetTotalTitleTime(This,pTotalTime,ulTimeCodeFlags) -#define IDvdInfo2_GetCurrentButton(This,pulButtonsAvailable,pulCurrentButton) (This)->lpVtbl->GetCurrentButton(This,pulButtonsAvailable,pulCurrentButton) -#define IDvdInfo2_GetCurrentAngle(This,pulAnglesAvailable,pulCurrentAngle) (This)->lpVtbl->GetCurrentAngle(This,pulAnglesAvailable,pulCurrentAngle) -#define IDvdInfo2_GetCurrentAudio(This,pulStreamsAvailable,pulCurrentStream) (This)->lpVtbl->GetCurrentAudio(This,pulStreamsAvailable,pulCurrentStream) -#define IDvdInfo2_GetCurrentSubpicture(This,pulStreamsAvailable,pulCurrentStream,pbIsDisabled) (This)->lpVtbl->GetCurrentSubpicture(This,pulStreamsAvailable,pulCurrentStream,pbIsDisabled) -#define IDvdInfo2_GetCurrentUOPS(This,pulUOPs) (This)->lpVtbl->GetCurrentUOPS(This,pulUOPs) -#define IDvdInfo2_GetAllSPRMs(This,pRegisterArray) (This)->lpVtbl->GetAllSPRMs(This,pRegisterArray) -#define IDvdInfo2_GetAllGPRMs(This,pRegisterArray) (This)->lpVtbl->GetAllGPRMs(This,pRegisterArray) -#define IDvdInfo2_GetAudioLanguage(This,ulStream,pLanguage) (This)->lpVtbl->GetAudioLanguage(This,ulStream,pLanguage) -#define IDvdInfo2_GetSubpictureLanguage(This,ulStream,pLanguage) (This)->lpVtbl->GetSubpictureLanguage(This,ulStream,pLanguage) -#define IDvdInfo2_GetTitleAttributes(This,ulTitle,pMenu,pTitle) (This)->lpVtbl->GetTitleAttributes(This,ulTitle,pMenu,pTitle) -#define IDvdInfo2_GetVMGAttributes(This,pATR) (This)->lpVtbl->GetVMGAttributes(This,pATR) -#define IDvdInfo2_GetCurrentVideoAttributes(This,pATR) (This)->lpVtbl->GetCurrentVideoAttributes(This,pATR) -#define IDvdInfo2_GetAudioAttributes(This,ulStream,pATR) (This)->lpVtbl->GetAudioAttributes(This,ulStream,pATR) -#define IDvdInfo2_GetKaraokeAttributes(This,ulStream,pAttributes) (This)->lpVtbl->GetKaraokeAttributes(This,ulStream,pAttributes) -#define IDvdInfo2_GetSubpictureAttributes(This,ulStream,pATR) (This)->lpVtbl->GetSubpictureAttributes(This,ulStream,pATR) -#define IDvdInfo2_GetDVDVolumeInfo(This,pulNumOfVolumes,pulVolume,pSide,pulNumOfTitles) (This)->lpVtbl->GetDVDVolumeInfo(This,pulNumOfVolumes,pulVolume,pSide,pulNumOfTitles) -#define IDvdInfo2_GetDVDTextNumberOfLanguages(This,pulNumOfLangs) (This)->lpVtbl->GetDVDTextNumberOfLanguages(This,pulNumOfLangs) -#define IDvdInfo2_GetDVDTextLanguageInfo(This,ulLangIndex,pulNumOfStrings,pLangCode,pbCharacterSet) (This)->lpVtbl->GetDVDTextLanguageInfo(This,ulLangIndex,pulNumOfStrings,pLangCode,pbCharacterSet) -#define IDvdInfo2_GetDVDTextStringAsNative(This,ulLangIndex,ulStringIndex,pbBuffer,ulMaxBufferSize,pulActualSize,pType) (This)->lpVtbl->GetDVDTextStringAsNative(This,ulLangIndex,ulStringIndex,pbBuffer,ulMaxBufferSize,pulActualSize,pType) -#define IDvdInfo2_GetDVDTextStringAsUnicode(This,ulLangIndex,ulStringIndex,pchwBuffer,ulMaxBufferSize,pulActualSize,pType) (This)->lpVtbl->GetDVDTextStringAsUnicode(This,ulLangIndex,ulStringIndex,pchwBuffer,ulMaxBufferSize,pulActualSize,pType) -#define IDvdInfo2_GetPlayerParentalLevel(This,pulParentalLevel,pbCountryCode) (This)->lpVtbl->GetPlayerParentalLevel(This,pulParentalLevel,pbCountryCode) -#define IDvdInfo2_GetNumberOfChapters(This,ulTitle,pulNumOfChapters) (This)->lpVtbl->GetNumberOfChapters(This,ulTitle,pulNumOfChapters) -#define IDvdInfo2_GetTitleParentalLevels(This,ulTitle,pulParentalLevels) (This)->lpVtbl->GetTitleParentalLevels(This,ulTitle,pulParentalLevels) -#define IDvdInfo2_GetDVDDirectory(This,pszwPath,ulMaxSize,pulActualSize) (This)->lpVtbl->GetDVDDirectory(This,pszwPath,ulMaxSize,pulActualSize) -#define IDvdInfo2_IsAudioStreamEnabled(This,ulStreamNum,pbEnabled) (This)->lpVtbl->IsAudioStreamEnabled(This,ulStreamNum,pbEnabled) -#define IDvdInfo2_GetDiscID(This,pszwPath,pullDiscID) (This)->lpVtbl->GetDiscID(This,pszwPath,pullDiscID) -#define IDvdInfo2_GetState(This,pStateData) (This)->lpVtbl->GetState(This,pStateData) -#define IDvdInfo2_GetMenuLanguages(This,pLanguages,ulMaxLanguages,pulActualLanguages) (This)->lpVtbl->GetMenuLanguages(This,pLanguages,ulMaxLanguages,pulActualLanguages) -#define IDvdInfo2_GetButtonAtPosition(This,point,pulButtonIndex) (This)->lpVtbl->GetButtonAtPosition(This,point,pulButtonIndex) -#define IDvdInfo2_GetCmdFromEvent(This,lParam1,pCmdObj) (This)->lpVtbl->GetCmdFromEvent(This,lParam1,pCmdObj) -#define IDvdInfo2_GetDefaultMenuLanguage(This,pLanguage) (This)->lpVtbl->GetDefaultMenuLanguage(This,pLanguage) -#define IDvdInfo2_GetDefaultAudioLanguage(This,pLanguage,pAudioExtension) (This)->lpVtbl->GetDefaultAudioLanguage(This,pLanguage,pAudioExtension) -#define IDvdInfo2_GetDefaultSubpictureLanguage(This,pLanguage,pSubpictureExtension) (This)->lpVtbl->GetDefaultSubpictureLanguage(This,pLanguage,pSubpictureExtension) -#define IDvdInfo2_GetDecoderCaps(This,pCaps) (This)->lpVtbl->GetDecoderCaps(This,pCaps) -#define IDvdInfo2_GetButtonRect(This,ulButton,pRect) (This)->lpVtbl->GetButtonRect(This,ulButton,pRect) -#define IDvdInfo2_IsSubpictureStreamEnabled(This,ulStreamNum,pbEnabled) (This)->lpVtbl->IsSubpictureStreamEnabled(This,ulStreamNum,pbEnabled) -#endif -#endif - HRESULT WINAPI IDvdInfo2_GetCurrentDomain_Proxy(IDvdInfo2 *This,DVD_DOMAIN *pDomain); - void __RPC_STUB IDvdInfo2_GetCurrentDomain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentLocation_Proxy(IDvdInfo2 *This,DVD_PLAYBACK_LOCATION2 *pLocation); - void __RPC_STUB IDvdInfo2_GetCurrentLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetTotalTitleTime_Proxy(IDvdInfo2 *This,DVD_HMSF_TIMECODE *pTotalTime,ULONG *ulTimeCodeFlags); - void __RPC_STUB IDvdInfo2_GetTotalTitleTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentButton_Proxy(IDvdInfo2 *This,ULONG *pulButtonsAvailable,ULONG *pulCurrentButton); - void __RPC_STUB IDvdInfo2_GetCurrentButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentAngle_Proxy(IDvdInfo2 *This,ULONG *pulAnglesAvailable,ULONG *pulCurrentAngle); - void __RPC_STUB IDvdInfo2_GetCurrentAngle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentAudio_Proxy(IDvdInfo2 *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream); - void __RPC_STUB IDvdInfo2_GetCurrentAudio_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentSubpicture_Proxy(IDvdInfo2 *This,ULONG *pulStreamsAvailable,ULONG *pulCurrentStream,WINBOOL *pbIsDisabled); - void __RPC_STUB IDvdInfo2_GetCurrentSubpicture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentUOPS_Proxy(IDvdInfo2 *This,ULONG *pulUOPs); - void __RPC_STUB IDvdInfo2_GetCurrentUOPS_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetAllSPRMs_Proxy(IDvdInfo2 *This,SPRMARRAY *pRegisterArray); - void __RPC_STUB IDvdInfo2_GetAllSPRMs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetAllGPRMs_Proxy(IDvdInfo2 *This,GPRMARRAY *pRegisterArray); - void __RPC_STUB IDvdInfo2_GetAllGPRMs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetAudioLanguage_Proxy(IDvdInfo2 *This,ULONG ulStream,LCID *pLanguage); - void __RPC_STUB IDvdInfo2_GetAudioLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetSubpictureLanguage_Proxy(IDvdInfo2 *This,ULONG ulStream,LCID *pLanguage); - void __RPC_STUB IDvdInfo2_GetSubpictureLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetTitleAttributes_Proxy(IDvdInfo2 *This,ULONG ulTitle,DVD_MenuAttributes *pMenu,DVD_TitleAttributes *pTitle); - void __RPC_STUB IDvdInfo2_GetTitleAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetVMGAttributes_Proxy(IDvdInfo2 *This,DVD_MenuAttributes *pATR); - void __RPC_STUB IDvdInfo2_GetVMGAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCurrentVideoAttributes_Proxy(IDvdInfo2 *This,DVD_VideoAttributes *pATR); - void __RPC_STUB IDvdInfo2_GetCurrentVideoAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetAudioAttributes_Proxy(IDvdInfo2 *This,ULONG ulStream,DVD_AudioAttributes *pATR); - void __RPC_STUB IDvdInfo2_GetAudioAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetKaraokeAttributes_Proxy(IDvdInfo2 *This,ULONG ulStream,DVD_KaraokeAttributes *pAttributes); - void __RPC_STUB IDvdInfo2_GetKaraokeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetSubpictureAttributes_Proxy(IDvdInfo2 *This,ULONG ulStream,DVD_SubpictureAttributes *pATR); - void __RPC_STUB IDvdInfo2_GetSubpictureAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDVolumeInfo_Proxy(IDvdInfo2 *This,ULONG *pulNumOfVolumes,ULONG *pulVolume,DVD_DISC_SIDE *pSide,ULONG *pulNumOfTitles); - void __RPC_STUB IDvdInfo2_GetDVDVolumeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDTextNumberOfLanguages_Proxy(IDvdInfo2 *This,ULONG *pulNumOfLangs); - void __RPC_STUB IDvdInfo2_GetDVDTextNumberOfLanguages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDTextLanguageInfo_Proxy(IDvdInfo2 *This,ULONG ulLangIndex,ULONG *pulNumOfStrings,LCID *pLangCode,enum DVD_TextCharSet *pbCharacterSet); - void __RPC_STUB IDvdInfo2_GetDVDTextLanguageInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDTextStringAsNative_Proxy(IDvdInfo2 *This,ULONG ulLangIndex,ULONG ulStringIndex,BYTE *pbBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType); - void __RPC_STUB IDvdInfo2_GetDVDTextStringAsNative_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDTextStringAsUnicode_Proxy(IDvdInfo2 *This,ULONG ulLangIndex,ULONG ulStringIndex,WCHAR *pchwBuffer,ULONG ulMaxBufferSize,ULONG *pulActualSize,enum DVD_TextStringType *pType); - void __RPC_STUB IDvdInfo2_GetDVDTextStringAsUnicode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetPlayerParentalLevel_Proxy(IDvdInfo2 *This,ULONG *pulParentalLevel,BYTE pbCountryCode[2]); - void __RPC_STUB IDvdInfo2_GetPlayerParentalLevel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetNumberOfChapters_Proxy(IDvdInfo2 *This,ULONG ulTitle,ULONG *pulNumOfChapters); - void __RPC_STUB IDvdInfo2_GetNumberOfChapters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetTitleParentalLevels_Proxy(IDvdInfo2 *This,ULONG ulTitle,ULONG *pulParentalLevels); - void __RPC_STUB IDvdInfo2_GetTitleParentalLevels_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDVDDirectory_Proxy(IDvdInfo2 *This,LPWSTR pszwPath,ULONG ulMaxSize,ULONG *pulActualSize); - void __RPC_STUB IDvdInfo2_GetDVDDirectory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_IsAudioStreamEnabled_Proxy(IDvdInfo2 *This,ULONG ulStreamNum,WINBOOL *pbEnabled); - void __RPC_STUB IDvdInfo2_IsAudioStreamEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDiscID_Proxy(IDvdInfo2 *This,LPCWSTR pszwPath,ULONGLONG *pullDiscID); - void __RPC_STUB IDvdInfo2_GetDiscID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetState_Proxy(IDvdInfo2 *This,IDvdState **pStateData); - void __RPC_STUB IDvdInfo2_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetMenuLanguages_Proxy(IDvdInfo2 *This,LCID *pLanguages,ULONG ulMaxLanguages,ULONG *pulActualLanguages); - void __RPC_STUB IDvdInfo2_GetMenuLanguages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetButtonAtPosition_Proxy(IDvdInfo2 *This,POINT point,ULONG *pulButtonIndex); - void __RPC_STUB IDvdInfo2_GetButtonAtPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetCmdFromEvent_Proxy(IDvdInfo2 *This,LONG_PTR lParam1,IDvdCmd **pCmdObj); - void __RPC_STUB IDvdInfo2_GetCmdFromEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDefaultMenuLanguage_Proxy(IDvdInfo2 *This,LCID *pLanguage); - void __RPC_STUB IDvdInfo2_GetDefaultMenuLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDefaultAudioLanguage_Proxy(IDvdInfo2 *This,LCID *pLanguage,DVD_AUDIO_LANG_EXT *pAudioExtension); - void __RPC_STUB IDvdInfo2_GetDefaultAudioLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDefaultSubpictureLanguage_Proxy(IDvdInfo2 *This,LCID *pLanguage,DVD_SUBPICTURE_LANG_EXT *pSubpictureExtension); - void __RPC_STUB IDvdInfo2_GetDefaultSubpictureLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetDecoderCaps_Proxy(IDvdInfo2 *This,DVD_DECODER_CAPS *pCaps); - void __RPC_STUB IDvdInfo2_GetDecoderCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_GetButtonRect_Proxy(IDvdInfo2 *This,ULONG ulButton,RECT *pRect); - void __RPC_STUB IDvdInfo2_GetButtonRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdInfo2_IsSubpictureStreamEnabled_Proxy(IDvdInfo2 *This,ULONG ulStreamNum,WINBOOL *pbEnabled); - void __RPC_STUB IDvdInfo2_IsSubpictureStreamEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum _AM_DVD_GRAPH_FLAGS { - AM_DVD_HWDEC_PREFER = 0x1,AM_DVD_HWDEC_ONLY = 0x2,AM_DVD_SWDEC_PREFER = 0x4,AM_DVD_SWDEC_ONLY = 0x8,AM_DVD_NOVPE = 0x100, - AM_DVD_VMR9_ONLY = 0x800 - } AM_DVD_GRAPH_FLAGS; - - typedef enum _AM_DVD_STREAM_FLAGS { - AM_DVD_STREAM_VIDEO = 0x1,AM_DVD_STREAM_AUDIO = 0x2,AM_DVD_STREAM_SUBPIC = 0x4 - } AM_DVD_STREAM_FLAGS; - - typedef struct __MIDL___MIDL_itf_strmif_0389_0001 { - HRESULT hrVPEStatus; - WINBOOL bDvdVolInvalid; - WINBOOL bDvdVolUnknown; - WINBOOL bNoLine21In; - WINBOOL bNoLine21Out; - int iNumStreams; - int iNumStreamsFailed; - DWORD dwFailedStreamsFlag; - } AM_DVD_RENDERSTATUS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0389_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0389_v0_0_s_ifspec; -#ifndef __IDvdGraphBuilder_INTERFACE_DEFINED__ -#define __IDvdGraphBuilder_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDvdGraphBuilder; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDvdGraphBuilder : public IUnknown { - public: - virtual HRESULT WINAPI GetFiltergraph(IGraphBuilder **ppGB) = 0; - virtual HRESULT WINAPI GetDvdInterface(REFIID riid,void **ppvIF) = 0; - virtual HRESULT WINAPI RenderDvdVideoVolume(LPCWSTR lpcwszPathName,DWORD dwFlags,AM_DVD_RENDERSTATUS *pStatus) = 0; - }; -#else - typedef struct IDvdGraphBuilderVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDvdGraphBuilder *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDvdGraphBuilder *This); - ULONG (WINAPI *Release)(IDvdGraphBuilder *This); - HRESULT (WINAPI *GetFiltergraph)(IDvdGraphBuilder *This,IGraphBuilder **ppGB); - HRESULT (WINAPI *GetDvdInterface)(IDvdGraphBuilder *This,REFIID riid,void **ppvIF); - HRESULT (WINAPI *RenderDvdVideoVolume)(IDvdGraphBuilder *This,LPCWSTR lpcwszPathName,DWORD dwFlags,AM_DVD_RENDERSTATUS *pStatus); - END_INTERFACE - } IDvdGraphBuilderVtbl; - struct IDvdGraphBuilder { - CONST_VTBL struct IDvdGraphBuilderVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDvdGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDvdGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDvdGraphBuilder_Release(This) (This)->lpVtbl->Release(This) -#define IDvdGraphBuilder_GetFiltergraph(This,ppGB) (This)->lpVtbl->GetFiltergraph(This,ppGB) -#define IDvdGraphBuilder_GetDvdInterface(This,riid,ppvIF) (This)->lpVtbl->GetDvdInterface(This,riid,ppvIF) -#define IDvdGraphBuilder_RenderDvdVideoVolume(This,lpcwszPathName,dwFlags,pStatus) (This)->lpVtbl->RenderDvdVideoVolume(This,lpcwszPathName,dwFlags,pStatus) -#endif -#endif - HRESULT WINAPI IDvdGraphBuilder_GetFiltergraph_Proxy(IDvdGraphBuilder *This,IGraphBuilder **ppGB); - void __RPC_STUB IDvdGraphBuilder_GetFiltergraph_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdGraphBuilder_GetDvdInterface_Proxy(IDvdGraphBuilder *This,REFIID riid,void **ppvIF); - void __RPC_STUB IDvdGraphBuilder_GetDvdInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDvdGraphBuilder_RenderDvdVideoVolume_Proxy(IDvdGraphBuilder *This,LPCWSTR lpcwszPathName,DWORD dwFlags,AM_DVD_RENDERSTATUS *pStatus); - void __RPC_STUB IDvdGraphBuilder_RenderDvdVideoVolume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IDDrawExclModeVideo_INTERFACE_DEFINED__ -#define __IDDrawExclModeVideo_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDDrawExclModeVideo; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDDrawExclModeVideo : public IUnknown { - public: - virtual HRESULT WINAPI SetDDrawObject(IDirectDraw *pDDrawObject) = 0; - virtual HRESULT WINAPI GetDDrawObject(IDirectDraw **ppDDrawObject,WINBOOL *pbUsingExternal) = 0; - virtual HRESULT WINAPI SetDDrawSurface(IDirectDrawSurface *pDDrawSurface) = 0; - virtual HRESULT WINAPI GetDDrawSurface(IDirectDrawSurface **ppDDrawSurface,WINBOOL *pbUsingExternal) = 0; - virtual HRESULT WINAPI SetDrawParameters(const RECT *prcSource,const RECT *prcTarget) = 0; - virtual HRESULT WINAPI GetNativeVideoProps(DWORD *pdwVideoWidth,DWORD *pdwVideoHeight,DWORD *pdwPictAspectRatioX,DWORD *pdwPictAspectRatioY) = 0; - virtual HRESULT WINAPI SetCallbackInterface(IDDrawExclModeVideoCallback *pCallback,DWORD dwFlags) = 0; - }; -#else - typedef struct IDDrawExclModeVideoVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDDrawExclModeVideo *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDDrawExclModeVideo *This); - ULONG (WINAPI *Release)(IDDrawExclModeVideo *This); - HRESULT (WINAPI *SetDDrawObject)(IDDrawExclModeVideo *This,IDirectDraw *pDDrawObject); - HRESULT (WINAPI *GetDDrawObject)(IDDrawExclModeVideo *This,IDirectDraw **ppDDrawObject,WINBOOL *pbUsingExternal); - HRESULT (WINAPI *SetDDrawSurface)(IDDrawExclModeVideo *This,IDirectDrawSurface *pDDrawSurface); - HRESULT (WINAPI *GetDDrawSurface)(IDDrawExclModeVideo *This,IDirectDrawSurface **ppDDrawSurface,WINBOOL *pbUsingExternal); - HRESULT (WINAPI *SetDrawParameters)(IDDrawExclModeVideo *This,const RECT *prcSource,const RECT *prcTarget); - HRESULT (WINAPI *GetNativeVideoProps)(IDDrawExclModeVideo *This,DWORD *pdwVideoWidth,DWORD *pdwVideoHeight,DWORD *pdwPictAspectRatioX,DWORD *pdwPictAspectRatioY); - HRESULT (WINAPI *SetCallbackInterface)(IDDrawExclModeVideo *This,IDDrawExclModeVideoCallback *pCallback,DWORD dwFlags); - END_INTERFACE - } IDDrawExclModeVideoVtbl; - struct IDDrawExclModeVideo { - CONST_VTBL struct IDDrawExclModeVideoVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDDrawExclModeVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDDrawExclModeVideo_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDDrawExclModeVideo_Release(This) (This)->lpVtbl->Release(This) -#define IDDrawExclModeVideo_SetDDrawObject(This,pDDrawObject) (This)->lpVtbl->SetDDrawObject(This,pDDrawObject) -#define IDDrawExclModeVideo_GetDDrawObject(This,ppDDrawObject,pbUsingExternal) (This)->lpVtbl->GetDDrawObject(This,ppDDrawObject,pbUsingExternal) -#define IDDrawExclModeVideo_SetDDrawSurface(This,pDDrawSurface) (This)->lpVtbl->SetDDrawSurface(This,pDDrawSurface) -#define IDDrawExclModeVideo_GetDDrawSurface(This,ppDDrawSurface,pbUsingExternal) (This)->lpVtbl->GetDDrawSurface(This,ppDDrawSurface,pbUsingExternal) -#define IDDrawExclModeVideo_SetDrawParameters(This,prcSource,prcTarget) (This)->lpVtbl->SetDrawParameters(This,prcSource,prcTarget) -#define IDDrawExclModeVideo_GetNativeVideoProps(This,pdwVideoWidth,pdwVideoHeight,pdwPictAspectRatioX,pdwPictAspectRatioY) (This)->lpVtbl->GetNativeVideoProps(This,pdwVideoWidth,pdwVideoHeight,pdwPictAspectRatioX,pdwPictAspectRatioY) -#define IDDrawExclModeVideo_SetCallbackInterface(This,pCallback,dwFlags) (This)->lpVtbl->SetCallbackInterface(This,pCallback,dwFlags) -#endif -#endif - HRESULT WINAPI IDDrawExclModeVideo_SetDDrawObject_Proxy(IDDrawExclModeVideo *This,IDirectDraw *pDDrawObject); - void __RPC_STUB IDDrawExclModeVideo_SetDDrawObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_GetDDrawObject_Proxy(IDDrawExclModeVideo *This,IDirectDraw **ppDDrawObject,WINBOOL *pbUsingExternal); - void __RPC_STUB IDDrawExclModeVideo_GetDDrawObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_SetDDrawSurface_Proxy(IDDrawExclModeVideo *This,IDirectDrawSurface *pDDrawSurface); - void __RPC_STUB IDDrawExclModeVideo_SetDDrawSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_GetDDrawSurface_Proxy(IDDrawExclModeVideo *This,IDirectDrawSurface **ppDDrawSurface,WINBOOL *pbUsingExternal); - void __RPC_STUB IDDrawExclModeVideo_GetDDrawSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_SetDrawParameters_Proxy(IDDrawExclModeVideo *This,const RECT *prcSource,const RECT *prcTarget); - void __RPC_STUB IDDrawExclModeVideo_SetDrawParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_GetNativeVideoProps_Proxy(IDDrawExclModeVideo *This,DWORD *pdwVideoWidth,DWORD *pdwVideoHeight,DWORD *pdwPictAspectRatioX,DWORD *pdwPictAspectRatioY); - void __RPC_STUB IDDrawExclModeVideo_GetNativeVideoProps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideo_SetCallbackInterface_Proxy(IDDrawExclModeVideo *This,IDDrawExclModeVideoCallback *pCallback,DWORD dwFlags); - void __RPC_STUB IDDrawExclModeVideo_SetCallbackInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_OVERLAY_NOTIFY_FLAGS { - AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = 0x1,AM_OVERLAY_NOTIFY_SOURCE_CHANGE = 0x2,AM_OVERLAY_NOTIFY_DEST_CHANGE = 0x4 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0391_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0391_v0_0_s_ifspec; -#ifndef __IDDrawExclModeVideoCallback_INTERFACE_DEFINED__ -#define __IDDrawExclModeVideoCallback_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IDDrawExclModeVideoCallback; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IDDrawExclModeVideoCallback : public IUnknown { - public: - virtual HRESULT WINAPI OnUpdateOverlay(WINBOOL bBefore,DWORD dwFlags,WINBOOL bOldVisible,const RECT *prcOldSrc,const RECT *prcOldDest,WINBOOL bNewVisible,const RECT *prcNewSrc,const RECT *prcNewDest) = 0; - virtual HRESULT WINAPI OnUpdateColorKey(const COLORKEY *pKey,DWORD dwColor) = 0; - virtual HRESULT WINAPI OnUpdateSize(DWORD dwWidth,DWORD dwHeight,DWORD dwARWidth,DWORD dwARHeight) = 0; - }; -#else - typedef struct IDDrawExclModeVideoCallbackVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IDDrawExclModeVideoCallback *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IDDrawExclModeVideoCallback *This); - ULONG (WINAPI *Release)(IDDrawExclModeVideoCallback *This); - HRESULT (WINAPI *OnUpdateOverlay)(IDDrawExclModeVideoCallback *This,WINBOOL bBefore,DWORD dwFlags,WINBOOL bOldVisible,const RECT *prcOldSrc,const RECT *prcOldDest,WINBOOL bNewVisible,const RECT *prcNewSrc,const RECT *prcNewDest); - HRESULT (WINAPI *OnUpdateColorKey)(IDDrawExclModeVideoCallback *This,const COLORKEY *pKey,DWORD dwColor); - HRESULT (WINAPI *OnUpdateSize)(IDDrawExclModeVideoCallback *This,DWORD dwWidth,DWORD dwHeight,DWORD dwARWidth,DWORD dwARHeight); - END_INTERFACE - } IDDrawExclModeVideoCallbackVtbl; - struct IDDrawExclModeVideoCallback { - CONST_VTBL struct IDDrawExclModeVideoCallbackVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IDDrawExclModeVideoCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IDDrawExclModeVideoCallback_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IDDrawExclModeVideoCallback_Release(This) (This)->lpVtbl->Release(This) -#define IDDrawExclModeVideoCallback_OnUpdateOverlay(This,bBefore,dwFlags,bOldVisible,prcOldSrc,prcOldDest,bNewVisible,prcNewSrc,prcNewDest) (This)->lpVtbl->OnUpdateOverlay(This,bBefore,dwFlags,bOldVisible,prcOldSrc,prcOldDest,bNewVisible,prcNewSrc,prcNewDest) -#define IDDrawExclModeVideoCallback_OnUpdateColorKey(This,pKey,dwColor) (This)->lpVtbl->OnUpdateColorKey(This,pKey,dwColor) -#define IDDrawExclModeVideoCallback_OnUpdateSize(This,dwWidth,dwHeight,dwARWidth,dwARHeight) (This)->lpVtbl->OnUpdateSize(This,dwWidth,dwHeight,dwARWidth,dwARHeight) -#endif -#endif - HRESULT WINAPI IDDrawExclModeVideoCallback_OnUpdateOverlay_Proxy(IDDrawExclModeVideoCallback *This,WINBOOL bBefore,DWORD dwFlags,WINBOOL bOldVisible,const RECT *prcOldSrc,const RECT *prcOldDest,WINBOOL bNewVisible,const RECT *prcNewSrc,const RECT *prcNewDest); - void __RPC_STUB IDDrawExclModeVideoCallback_OnUpdateOverlay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideoCallback_OnUpdateColorKey_Proxy(IDDrawExclModeVideoCallback *This,const COLORKEY *pKey,DWORD dwColor); - void __RPC_STUB IDDrawExclModeVideoCallback_OnUpdateColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IDDrawExclModeVideoCallback_OnUpdateSize_Proxy(IDDrawExclModeVideoCallback *This,DWORD dwWidth,DWORD dwHeight,DWORD dwARWidth,DWORD dwARHeight); - void __RPC_STUB IDDrawExclModeVideoCallback_OnUpdateSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0392_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0392_v0_0_s_ifspec; -#ifndef __IPinConnection_INTERFACE_DEFINED__ -#define __IPinConnection_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IPinConnection; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IPinConnection : public IUnknown { - public: - virtual HRESULT WINAPI DynamicQueryAccept(const AM_MEDIA_TYPE *pmt) = 0; - virtual HRESULT WINAPI NotifyEndOfStream(HANDLE hNotifyEvent) = 0; - virtual HRESULT WINAPI IsEndPin(void) = 0; - virtual HRESULT WINAPI DynamicDisconnect(void) = 0; - }; -#else - typedef struct IPinConnectionVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IPinConnection *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IPinConnection *This); - ULONG (WINAPI *Release)(IPinConnection *This); - HRESULT (WINAPI *DynamicQueryAccept)(IPinConnection *This,const AM_MEDIA_TYPE *pmt); - HRESULT (WINAPI *NotifyEndOfStream)(IPinConnection *This,HANDLE hNotifyEvent); - HRESULT (WINAPI *IsEndPin)(IPinConnection *This); - HRESULT (WINAPI *DynamicDisconnect)(IPinConnection *This); - END_INTERFACE - } IPinConnectionVtbl; - struct IPinConnection { - CONST_VTBL struct IPinConnectionVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IPinConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IPinConnection_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IPinConnection_Release(This) (This)->lpVtbl->Release(This) -#define IPinConnection_DynamicQueryAccept(This,pmt) (This)->lpVtbl->DynamicQueryAccept(This,pmt) -#define IPinConnection_NotifyEndOfStream(This,hNotifyEvent) (This)->lpVtbl->NotifyEndOfStream(This,hNotifyEvent) -#define IPinConnection_IsEndPin(This) (This)->lpVtbl->IsEndPin(This) -#define IPinConnection_DynamicDisconnect(This) (This)->lpVtbl->DynamicDisconnect(This) -#endif -#endif - HRESULT WINAPI IPinConnection_DynamicQueryAccept_Proxy(IPinConnection *This,const AM_MEDIA_TYPE *pmt); - void __RPC_STUB IPinConnection_DynamicQueryAccept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinConnection_NotifyEndOfStream_Proxy(IPinConnection *This,HANDLE hNotifyEvent); - void __RPC_STUB IPinConnection_NotifyEndOfStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinConnection_IsEndPin_Proxy(IPinConnection *This); - void __RPC_STUB IPinConnection_IsEndPin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IPinConnection_DynamicDisconnect_Proxy(IPinConnection *This); - void __RPC_STUB IPinConnection_DynamicDisconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IPinFlowControl_INTERFACE_DEFINED__ -#define __IPinFlowControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IPinFlowControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IPinFlowControl : public IUnknown { - public: - virtual HRESULT WINAPI Block(DWORD dwBlockFlags,HANDLE hEvent) = 0; - }; -#else - typedef struct IPinFlowControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IPinFlowControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IPinFlowControl *This); - ULONG (WINAPI *Release)(IPinFlowControl *This); - HRESULT (WINAPI *Block)(IPinFlowControl *This,DWORD dwBlockFlags,HANDLE hEvent); - END_INTERFACE - } IPinFlowControlVtbl; - struct IPinFlowControl { - CONST_VTBL struct IPinFlowControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IPinFlowControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IPinFlowControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IPinFlowControl_Release(This) (This)->lpVtbl->Release(This) -#define IPinFlowControl_Block(This,dwBlockFlags,hEvent) (This)->lpVtbl->Block(This,dwBlockFlags,hEvent) -#endif -#endif - HRESULT WINAPI IPinFlowControl_Block_Proxy(IPinFlowControl *This,DWORD dwBlockFlags,HANDLE hEvent); - void __RPC_STUB IPinFlowControl_Block_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS { - AM_PIN_FLOW_CONTROL_BLOCK = 0x1 - }; - typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS { - AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x1,AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x2, - AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x4 - } AM_GRAPH_CONFIG_RECONNECT_FLAGS; - - enum _REM_FILTER_FLAGS { - REMFILTERF_LEAVECONNECTED = 0x1 - }; - - typedef enum _AM_FILTER_FLAGS { - AM_FILTER_FLAGS_REMOVABLE = 0x1 - } AM_FILTER_FLAGS; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0394_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0394_v0_0_s_ifspec; -#ifndef __IGraphConfig_INTERFACE_DEFINED__ -#define __IGraphConfig_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IGraphConfig; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IGraphConfig : public IUnknown { - public: - virtual HRESULT WINAPI Reconnect(IPin *pOutputPin,IPin *pInputPin,const AM_MEDIA_TYPE *pmtFirstConnection,IBaseFilter *pUsingFilter,HANDLE hAbortEvent,DWORD dwFlags) = 0; - virtual HRESULT WINAPI Reconfigure(IGraphConfigCallback *pCallback,PVOID pvContext,DWORD dwFlags,HANDLE hAbortEvent) = 0; - virtual HRESULT WINAPI AddFilterToCache(IBaseFilter *pFilter) = 0; - virtual HRESULT WINAPI EnumCacheFilter(IEnumFilters **pEnum) = 0; - virtual HRESULT WINAPI RemoveFilterFromCache(IBaseFilter *pFilter) = 0; - virtual HRESULT WINAPI GetStartTime(REFERENCE_TIME *prtStart) = 0; - virtual HRESULT WINAPI PushThroughData(IPin *pOutputPin,IPinConnection *pConnection,HANDLE hEventAbort) = 0; - virtual HRESULT WINAPI SetFilterFlags(IBaseFilter *pFilter,DWORD dwFlags) = 0; - virtual HRESULT WINAPI GetFilterFlags(IBaseFilter *pFilter,DWORD *pdwFlags) = 0; - virtual HRESULT WINAPI RemoveFilterEx(IBaseFilter *pFilter,DWORD Flags) = 0; - }; -#else - typedef struct IGraphConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IGraphConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IGraphConfig *This); - ULONG (WINAPI *Release)(IGraphConfig *This); - HRESULT (WINAPI *Reconnect)(IGraphConfig *This,IPin *pOutputPin,IPin *pInputPin,const AM_MEDIA_TYPE *pmtFirstConnection,IBaseFilter *pUsingFilter,HANDLE hAbortEvent,DWORD dwFlags); - HRESULT (WINAPI *Reconfigure)(IGraphConfig *This,IGraphConfigCallback *pCallback,PVOID pvContext,DWORD dwFlags,HANDLE hAbortEvent); - HRESULT (WINAPI *AddFilterToCache)(IGraphConfig *This,IBaseFilter *pFilter); - HRESULT (WINAPI *EnumCacheFilter)(IGraphConfig *This,IEnumFilters **pEnum); - HRESULT (WINAPI *RemoveFilterFromCache)(IGraphConfig *This,IBaseFilter *pFilter); - HRESULT (WINAPI *GetStartTime)(IGraphConfig *This,REFERENCE_TIME *prtStart); - HRESULT (WINAPI *PushThroughData)(IGraphConfig *This,IPin *pOutputPin,IPinConnection *pConnection,HANDLE hEventAbort); - HRESULT (WINAPI *SetFilterFlags)(IGraphConfig *This,IBaseFilter *pFilter,DWORD dwFlags); - HRESULT (WINAPI *GetFilterFlags)(IGraphConfig *This,IBaseFilter *pFilter,DWORD *pdwFlags); - HRESULT (WINAPI *RemoveFilterEx)(IGraphConfig *This,IBaseFilter *pFilter,DWORD Flags); - END_INTERFACE - } IGraphConfigVtbl; - struct IGraphConfig { - CONST_VTBL struct IGraphConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IGraphConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IGraphConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IGraphConfig_Release(This) (This)->lpVtbl->Release(This) -#define IGraphConfig_Reconnect(This,pOutputPin,pInputPin,pmtFirstConnection,pUsingFilter,hAbortEvent,dwFlags) (This)->lpVtbl->Reconnect(This,pOutputPin,pInputPin,pmtFirstConnection,pUsingFilter,hAbortEvent,dwFlags) -#define IGraphConfig_Reconfigure(This,pCallback,pvContext,dwFlags,hAbortEvent) (This)->lpVtbl->Reconfigure(This,pCallback,pvContext,dwFlags,hAbortEvent) -#define IGraphConfig_AddFilterToCache(This,pFilter) (This)->lpVtbl->AddFilterToCache(This,pFilter) -#define IGraphConfig_EnumCacheFilter(This,pEnum) (This)->lpVtbl->EnumCacheFilter(This,pEnum) -#define IGraphConfig_RemoveFilterFromCache(This,pFilter) (This)->lpVtbl->RemoveFilterFromCache(This,pFilter) -#define IGraphConfig_GetStartTime(This,prtStart) (This)->lpVtbl->GetStartTime(This,prtStart) -#define IGraphConfig_PushThroughData(This,pOutputPin,pConnection,hEventAbort) (This)->lpVtbl->PushThroughData(This,pOutputPin,pConnection,hEventAbort) -#define IGraphConfig_SetFilterFlags(This,pFilter,dwFlags) (This)->lpVtbl->SetFilterFlags(This,pFilter,dwFlags) -#define IGraphConfig_GetFilterFlags(This,pFilter,pdwFlags) (This)->lpVtbl->GetFilterFlags(This,pFilter,pdwFlags) -#define IGraphConfig_RemoveFilterEx(This,pFilter,Flags) (This)->lpVtbl->RemoveFilterEx(This,pFilter,Flags) -#endif -#endif - HRESULT WINAPI IGraphConfig_Reconnect_Proxy(IGraphConfig *This,IPin *pOutputPin,IPin *pInputPin,const AM_MEDIA_TYPE *pmtFirstConnection,IBaseFilter *pUsingFilter,HANDLE hAbortEvent,DWORD dwFlags); - void __RPC_STUB IGraphConfig_Reconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_Reconfigure_Proxy(IGraphConfig *This,IGraphConfigCallback *pCallback,PVOID pvContext,DWORD dwFlags,HANDLE hAbortEvent); - void __RPC_STUB IGraphConfig_Reconfigure_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_AddFilterToCache_Proxy(IGraphConfig *This,IBaseFilter *pFilter); - void __RPC_STUB IGraphConfig_AddFilterToCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_EnumCacheFilter_Proxy(IGraphConfig *This,IEnumFilters **pEnum); - void __RPC_STUB IGraphConfig_EnumCacheFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_RemoveFilterFromCache_Proxy(IGraphConfig *This,IBaseFilter *pFilter); - void __RPC_STUB IGraphConfig_RemoveFilterFromCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_GetStartTime_Proxy(IGraphConfig *This,REFERENCE_TIME *prtStart); - void __RPC_STUB IGraphConfig_GetStartTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_PushThroughData_Proxy(IGraphConfig *This,IPin *pOutputPin,IPinConnection *pConnection,HANDLE hEventAbort); - void __RPC_STUB IGraphConfig_PushThroughData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_SetFilterFlags_Proxy(IGraphConfig *This,IBaseFilter *pFilter,DWORD dwFlags); - void __RPC_STUB IGraphConfig_SetFilterFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_GetFilterFlags_Proxy(IGraphConfig *This,IBaseFilter *pFilter,DWORD *pdwFlags); - void __RPC_STUB IGraphConfig_GetFilterFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IGraphConfig_RemoveFilterEx_Proxy(IGraphConfig *This,IBaseFilter *pFilter,DWORD Flags); - void __RPC_STUB IGraphConfig_RemoveFilterEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IGraphConfigCallback_INTERFACE_DEFINED__ -#define __IGraphConfigCallback_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IGraphConfigCallback; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IGraphConfigCallback : public IUnknown { - public: - virtual HRESULT WINAPI Reconfigure(PVOID pvContext,DWORD dwFlags) = 0; - }; -#else - typedef struct IGraphConfigCallbackVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IGraphConfigCallback *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IGraphConfigCallback *This); - ULONG (WINAPI *Release)(IGraphConfigCallback *This); - HRESULT (WINAPI *Reconfigure)(IGraphConfigCallback *This,PVOID pvContext,DWORD dwFlags); - END_INTERFACE - } IGraphConfigCallbackVtbl; - struct IGraphConfigCallback { - CONST_VTBL struct IGraphConfigCallbackVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IGraphConfigCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IGraphConfigCallback_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IGraphConfigCallback_Release(This) (This)->lpVtbl->Release(This) -#define IGraphConfigCallback_Reconfigure(This,pvContext,dwFlags) (This)->lpVtbl->Reconfigure(This,pvContext,dwFlags) -#endif -#endif - HRESULT WINAPI IGraphConfigCallback_Reconfigure_Proxy(IGraphConfigCallback *This,PVOID pvContext,DWORD dwFlags); - void __RPC_STUB IGraphConfigCallback_Reconfigure_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IFilterChain_INTERFACE_DEFINED__ -#define __IFilterChain_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IFilterChain; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IFilterChain : public IUnknown { - public: - virtual HRESULT WINAPI StartChain(IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) = 0; - virtual HRESULT WINAPI PauseChain(IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) = 0; - virtual HRESULT WINAPI StopChain(IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) = 0; - virtual HRESULT WINAPI RemoveChain(IBaseFilter *pStartFilter,IBaseFilter *pEndFilter) = 0; - }; -#else - typedef struct IFilterChainVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IFilterChain *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IFilterChain *This); - ULONG (WINAPI *Release)(IFilterChain *This); - HRESULT (WINAPI *StartChain)(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - HRESULT (WINAPI *PauseChain)(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - HRESULT (WINAPI *StopChain)(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - HRESULT (WINAPI *RemoveChain)(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - END_INTERFACE - } IFilterChainVtbl; - struct IFilterChain { - CONST_VTBL struct IFilterChainVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IFilterChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IFilterChain_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IFilterChain_Release(This) (This)->lpVtbl->Release(This) -#define IFilterChain_StartChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->StartChain(This,pStartFilter,pEndFilter) -#define IFilterChain_PauseChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->PauseChain(This,pStartFilter,pEndFilter) -#define IFilterChain_StopChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->StopChain(This,pStartFilter,pEndFilter) -#define IFilterChain_RemoveChain(This,pStartFilter,pEndFilter) (This)->lpVtbl->RemoveChain(This,pStartFilter,pEndFilter) -#endif -#endif - HRESULT WINAPI IFilterChain_StartChain_Proxy(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - void __RPC_STUB IFilterChain_StartChain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterChain_PauseChain_Proxy(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - void __RPC_STUB IFilterChain_PauseChain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterChain_StopChain_Proxy(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - void __RPC_STUB IFilterChain_StopChain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IFilterChain_RemoveChain_Proxy(IFilterChain *This,IBaseFilter *pStartFilter,IBaseFilter *pEndFilter); - void __RPC_STUB IFilterChain_RemoveChain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifdef MINGW_HAS_DDRAW_H -#include -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0397_0002 { - VMRSample_SyncPoint = 0x1,VMRSample_Preroll = 0x2,VMRSample_Discontinuity = 0x4,VMRSample_TimeValid = 0x8,VMRSample_SrcDstRectsValid = 0x10 - } VMRPresentationFlags; - - typedef struct tagVMRPRESENTATIONINFO { - DWORD dwFlags; - LPDIRECTDRAWSURFACE7 lpSurf; - REFERENCE_TIME rtStart; - REFERENCE_TIME rtEnd; - SIZE szAspectRatio; - RECT rcSrc; - RECT rcDst; - DWORD dwTypeSpecificFlags; - DWORD dwInterlaceFlags; - } VMRPRESENTATIONINFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0397_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0397_v0_0_s_ifspec; -#ifndef __IVMRImagePresenter_INTERFACE_DEFINED__ -#define __IVMRImagePresenter_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRImagePresenter; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRImagePresenter : public IUnknown { - public: - virtual HRESULT WINAPI StartPresenting(DWORD_PTR dwUserID) = 0; - virtual HRESULT WINAPI StopPresenting(DWORD_PTR dwUserID) = 0; - virtual HRESULT WINAPI PresentImage(DWORD_PTR dwUserID,VMRPRESENTATIONINFO *lpPresInfo) = 0; - }; -#else - typedef struct IVMRImagePresenterVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRImagePresenter *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRImagePresenter *This); - ULONG (WINAPI *Release)(IVMRImagePresenter *This); - HRESULT (WINAPI *StartPresenting)(IVMRImagePresenter *This,DWORD_PTR dwUserID); - HRESULT (WINAPI *StopPresenting)(IVMRImagePresenter *This,DWORD_PTR dwUserID); - HRESULT (WINAPI *PresentImage)(IVMRImagePresenter *This,DWORD_PTR dwUserID,VMRPRESENTATIONINFO *lpPresInfo); - END_INTERFACE - } IVMRImagePresenterVtbl; - struct IVMRImagePresenter { - CONST_VTBL struct IVMRImagePresenterVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRImagePresenter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRImagePresenter_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRImagePresenter_Release(This) (This)->lpVtbl->Release(This) -#define IVMRImagePresenter_StartPresenting(This,dwUserID) (This)->lpVtbl->StartPresenting(This,dwUserID) -#define IVMRImagePresenter_StopPresenting(This,dwUserID) (This)->lpVtbl->StopPresenting(This,dwUserID) -#define IVMRImagePresenter_PresentImage(This,dwUserID,lpPresInfo) (This)->lpVtbl->PresentImage(This,dwUserID,lpPresInfo) -#endif -#endif - HRESULT WINAPI IVMRImagePresenter_StartPresenting_Proxy(IVMRImagePresenter *This,DWORD_PTR dwUserID); - void __RPC_STUB IVMRImagePresenter_StartPresenting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImagePresenter_StopPresenting_Proxy(IVMRImagePresenter *This,DWORD_PTR dwUserID); - void __RPC_STUB IVMRImagePresenter_StopPresenting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImagePresenter_PresentImage_Proxy(IVMRImagePresenter *This,DWORD_PTR dwUserID,VMRPRESENTATIONINFO *lpPresInfo); - void __RPC_STUB IVMRImagePresenter_PresentImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0398_0001 { - AMAP_PIXELFORMAT_VALID = 0x1,AMAP_3D_TARGET = 0x2,AMAP_ALLOW_SYSMEM = 0x4,AMAP_FORCE_SYSMEM = 0x8,AMAP_DIRECTED_FLIP = 0x10,AMAP_DXVA_TARGET = 0x20 - } VMRSurfaceAllocationFlags; - - typedef struct tagVMRALLOCATIONINFO { - DWORD dwFlags; - LPBITMAPINFOHEADER lpHdr; - LPDDPIXELFORMAT lpPixFmt; - SIZE szAspectRatio; - DWORD dwMinBuffers; - DWORD dwMaxBuffers; - DWORD dwInterlaceFlags; - SIZE szNativeSize; - } VMRALLOCATIONINFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0398_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0398_v0_0_s_ifspec; -#ifndef __IVMRSurfaceAllocator_INTERFACE_DEFINED__ -#define __IVMRSurfaceAllocator_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRSurfaceAllocator; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRSurfaceAllocator : public IUnknown { - public: - virtual HRESULT WINAPI AllocateSurface(DWORD_PTR dwUserID,VMRALLOCATIONINFO *lpAllocInfo,DWORD *lpdwActualBuffers,LPDIRECTDRAWSURFACE7 *lplpSurface) = 0; - virtual HRESULT WINAPI FreeSurface(DWORD_PTR dwID) = 0; - virtual HRESULT WINAPI PrepareSurface(DWORD_PTR dwUserID,LPDIRECTDRAWSURFACE7 lpSurface,DWORD dwSurfaceFlags) = 0; - virtual HRESULT WINAPI AdviseNotify(IVMRSurfaceAllocatorNotify *lpIVMRSurfAllocNotify) = 0; - }; -#else - typedef struct IVMRSurfaceAllocatorVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRSurfaceAllocator *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRSurfaceAllocator *This); - ULONG (WINAPI *Release)(IVMRSurfaceAllocator *This); - HRESULT (WINAPI *AllocateSurface)(IVMRSurfaceAllocator *This,DWORD_PTR dwUserID,VMRALLOCATIONINFO *lpAllocInfo,DWORD *lpdwActualBuffers,LPDIRECTDRAWSURFACE7 *lplpSurface); - HRESULT (WINAPI *FreeSurface)(IVMRSurfaceAllocator *This,DWORD_PTR dwID); - HRESULT (WINAPI *PrepareSurface)(IVMRSurfaceAllocator *This,DWORD_PTR dwUserID,LPDIRECTDRAWSURFACE7 lpSurface,DWORD dwSurfaceFlags); - HRESULT (WINAPI *AdviseNotify)(IVMRSurfaceAllocator *This,IVMRSurfaceAllocatorNotify *lpIVMRSurfAllocNotify); - END_INTERFACE - } IVMRSurfaceAllocatorVtbl; - struct IVMRSurfaceAllocator { - CONST_VTBL struct IVMRSurfaceAllocatorVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRSurfaceAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRSurfaceAllocator_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRSurfaceAllocator_Release(This) (This)->lpVtbl->Release(This) -#define IVMRSurfaceAllocator_AllocateSurface(This,dwUserID,lpAllocInfo,lpdwActualBuffers,lplpSurface) (This)->lpVtbl->AllocateSurface(This,dwUserID,lpAllocInfo,lpdwActualBuffers,lplpSurface) -#define IVMRSurfaceAllocator_FreeSurface(This,dwID) (This)->lpVtbl->FreeSurface(This,dwID) -#define IVMRSurfaceAllocator_PrepareSurface(This,dwUserID,lpSurface,dwSurfaceFlags) (This)->lpVtbl->PrepareSurface(This,dwUserID,lpSurface,dwSurfaceFlags) -#define IVMRSurfaceAllocator_AdviseNotify(This,lpIVMRSurfAllocNotify) (This)->lpVtbl->AdviseNotify(This,lpIVMRSurfAllocNotify) -#endif -#endif - HRESULT WINAPI IVMRSurfaceAllocator_AllocateSurface_Proxy(IVMRSurfaceAllocator *This,DWORD_PTR dwUserID,VMRALLOCATIONINFO *lpAllocInfo,DWORD *lpdwActualBuffers,LPDIRECTDRAWSURFACE7 *lplpSurface); - void __RPC_STUB IVMRSurfaceAllocator_AllocateSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocator_FreeSurface_Proxy(IVMRSurfaceAllocator *This,DWORD_PTR dwID); - void __RPC_STUB IVMRSurfaceAllocator_FreeSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocator_PrepareSurface_Proxy(IVMRSurfaceAllocator *This,DWORD_PTR dwUserID,LPDIRECTDRAWSURFACE7 lpSurface,DWORD dwSurfaceFlags); - void __RPC_STUB IVMRSurfaceAllocator_PrepareSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocator_AdviseNotify_Proxy(IVMRSurfaceAllocator *This,IVMRSurfaceAllocatorNotify *lpIVMRSurfAllocNotify); - void __RPC_STUB IVMRSurfaceAllocator_AdviseNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRSurfaceAllocatorNotify_INTERFACE_DEFINED__ -#define __IVMRSurfaceAllocatorNotify_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRSurfaceAllocatorNotify; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRSurfaceAllocatorNotify : public IUnknown { - public: - virtual HRESULT WINAPI AdviseSurfaceAllocator(DWORD_PTR dwUserID,IVMRSurfaceAllocator *lpIVRMSurfaceAllocator) = 0; - virtual HRESULT WINAPI SetDDrawDevice(LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor) = 0; - virtual HRESULT WINAPI ChangeDDrawDevice(LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor) = 0; - virtual HRESULT WINAPI RestoreDDrawSurfaces(void) = 0; - virtual HRESULT WINAPI NotifyEvent(LONG EventCode,LONG_PTR Param1,LONG_PTR Param2) = 0; - virtual HRESULT WINAPI SetBorderColor(COLORREF clrBorder) = 0; - }; -#else - typedef struct IVMRSurfaceAllocatorNotifyVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRSurfaceAllocatorNotify *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRSurfaceAllocatorNotify *This); - ULONG (WINAPI *Release)(IVMRSurfaceAllocatorNotify *This); - HRESULT (WINAPI *AdviseSurfaceAllocator)(IVMRSurfaceAllocatorNotify *This,DWORD_PTR dwUserID,IVMRSurfaceAllocator *lpIVRMSurfaceAllocator); - HRESULT (WINAPI *SetDDrawDevice)(IVMRSurfaceAllocatorNotify *This,LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor); - HRESULT (WINAPI *ChangeDDrawDevice)(IVMRSurfaceAllocatorNotify *This,LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor); - HRESULT (WINAPI *RestoreDDrawSurfaces)(IVMRSurfaceAllocatorNotify *This); - HRESULT (WINAPI *NotifyEvent)(IVMRSurfaceAllocatorNotify *This,LONG EventCode,LONG_PTR Param1,LONG_PTR Param2); - HRESULT (WINAPI *SetBorderColor)(IVMRSurfaceAllocatorNotify *This,COLORREF clrBorder); - END_INTERFACE - } IVMRSurfaceAllocatorNotifyVtbl; - struct IVMRSurfaceAllocatorNotify { - CONST_VTBL struct IVMRSurfaceAllocatorNotifyVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRSurfaceAllocatorNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRSurfaceAllocatorNotify_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRSurfaceAllocatorNotify_Release(This) (This)->lpVtbl->Release(This) -#define IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator(This,dwUserID,lpIVRMSurfaceAllocator) (This)->lpVtbl->AdviseSurfaceAllocator(This,dwUserID,lpIVRMSurfaceAllocator) -#define IVMRSurfaceAllocatorNotify_SetDDrawDevice(This,lpDDrawDevice,hMonitor) (This)->lpVtbl->SetDDrawDevice(This,lpDDrawDevice,hMonitor) -#define IVMRSurfaceAllocatorNotify_ChangeDDrawDevice(This,lpDDrawDevice,hMonitor) (This)->lpVtbl->ChangeDDrawDevice(This,lpDDrawDevice,hMonitor) -#define IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces(This) (This)->lpVtbl->RestoreDDrawSurfaces(This) -#define IVMRSurfaceAllocatorNotify_NotifyEvent(This,EventCode,Param1,Param2) (This)->lpVtbl->NotifyEvent(This,EventCode,Param1,Param2) -#define IVMRSurfaceAllocatorNotify_SetBorderColor(This,clrBorder) (This)->lpVtbl->SetBorderColor(This,clrBorder) -#endif -#endif - HRESULT WINAPI IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator_Proxy(IVMRSurfaceAllocatorNotify *This,DWORD_PTR dwUserID,IVMRSurfaceAllocator *lpIVRMSurfaceAllocator); - void __RPC_STUB IVMRSurfaceAllocatorNotify_AdviseSurfaceAllocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocatorNotify_SetDDrawDevice_Proxy(IVMRSurfaceAllocatorNotify *This,LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor); - void __RPC_STUB IVMRSurfaceAllocatorNotify_SetDDrawDevice_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocatorNotify_ChangeDDrawDevice_Proxy(IVMRSurfaceAllocatorNotify *This,LPDIRECTDRAW7 lpDDrawDevice,HMONITOR hMonitor); - void __RPC_STUB IVMRSurfaceAllocatorNotify_ChangeDDrawDevice_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces_Proxy(IVMRSurfaceAllocatorNotify *This); - void __RPC_STUB IVMRSurfaceAllocatorNotify_RestoreDDrawSurfaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocatorNotify_NotifyEvent_Proxy(IVMRSurfaceAllocatorNotify *This,LONG EventCode,LONG_PTR Param1,LONG_PTR Param2); - void __RPC_STUB IVMRSurfaceAllocatorNotify_NotifyEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurfaceAllocatorNotify_SetBorderColor_Proxy(IVMRSurfaceAllocatorNotify *This,COLORREF clrBorder); - void __RPC_STUB IVMRSurfaceAllocatorNotify_SetBorderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0400_0001 { - VMR_ARMODE_NONE = 0,VMR_ARMODE_LETTER_BOX = VMR_ARMODE_NONE + 1 - } VMR_ASPECT_RATIO_MODE; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0400_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0400_v0_0_s_ifspec; -#ifndef __IVMRWindowlessControl_INTERFACE_DEFINED__ -#define __IVMRWindowlessControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRWindowlessControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRWindowlessControl : public IUnknown { - public: - virtual HRESULT WINAPI GetNativeVideoSize(LONG *lpWidth,LONG *lpHeight,LONG *lpARWidth,LONG *lpARHeight) = 0; - virtual HRESULT WINAPI GetMinIdealVideoSize(LONG *lpWidth,LONG *lpHeight) = 0; - virtual HRESULT WINAPI GetMaxIdealVideoSize(LONG *lpWidth,LONG *lpHeight) = 0; - virtual HRESULT WINAPI SetVideoPosition(const LPRECT lpSRCRect,const LPRECT lpDSTRect) = 0; - virtual HRESULT WINAPI GetVideoPosition(LPRECT lpSRCRect,LPRECT lpDSTRect) = 0; - virtual HRESULT WINAPI GetAspectRatioMode(DWORD *lpAspectRatioMode) = 0; - virtual HRESULT WINAPI SetAspectRatioMode(DWORD AspectRatioMode) = 0; - virtual HRESULT WINAPI SetVideoClippingWindow(HWND hwnd) = 0; - virtual HRESULT WINAPI RepaintVideo(HWND hwnd,HDC hdc) = 0; - virtual HRESULT WINAPI DisplayModeChanged(void) = 0; - virtual HRESULT WINAPI GetCurrentImage(BYTE **lpDib) = 0; - virtual HRESULT WINAPI SetBorderColor(COLORREF Clr) = 0; - virtual HRESULT WINAPI GetBorderColor(COLORREF *lpClr) = 0; - virtual HRESULT WINAPI SetColorKey(COLORREF Clr) = 0; - virtual HRESULT WINAPI GetColorKey(COLORREF *lpClr) = 0; - }; -#else - typedef struct IVMRWindowlessControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRWindowlessControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRWindowlessControl *This); - ULONG (WINAPI *Release)(IVMRWindowlessControl *This); - HRESULT (WINAPI *GetNativeVideoSize)(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight,LONG *lpARWidth,LONG *lpARHeight); - HRESULT (WINAPI *GetMinIdealVideoSize)(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight); - HRESULT (WINAPI *GetMaxIdealVideoSize)(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight); - HRESULT (WINAPI *SetVideoPosition)(IVMRWindowlessControl *This,const LPRECT lpSRCRect,const LPRECT lpDSTRect); - HRESULT (WINAPI *GetVideoPosition)(IVMRWindowlessControl *This,LPRECT lpSRCRect,LPRECT lpDSTRect); - HRESULT (WINAPI *GetAspectRatioMode)(IVMRWindowlessControl *This,DWORD *lpAspectRatioMode); - HRESULT (WINAPI *SetAspectRatioMode)(IVMRWindowlessControl *This,DWORD AspectRatioMode); - HRESULT (WINAPI *SetVideoClippingWindow)(IVMRWindowlessControl *This,HWND hwnd); - HRESULT (WINAPI *RepaintVideo)(IVMRWindowlessControl *This,HWND hwnd,HDC hdc); - HRESULT (WINAPI *DisplayModeChanged)(IVMRWindowlessControl *This); - HRESULT (WINAPI *GetCurrentImage)(IVMRWindowlessControl *This,BYTE **lpDib); - HRESULT (WINAPI *SetBorderColor)(IVMRWindowlessControl *This,COLORREF Clr); - HRESULT (WINAPI *GetBorderColor)(IVMRWindowlessControl *This,COLORREF *lpClr); - HRESULT (WINAPI *SetColorKey)(IVMRWindowlessControl *This,COLORREF Clr); - HRESULT (WINAPI *GetColorKey)(IVMRWindowlessControl *This,COLORREF *lpClr); - END_INTERFACE - } IVMRWindowlessControlVtbl; - struct IVMRWindowlessControl { - CONST_VTBL struct IVMRWindowlessControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRWindowlessControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRWindowlessControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRWindowlessControl_Release(This) (This)->lpVtbl->Release(This) -#define IVMRWindowlessControl_GetNativeVideoSize(This,lpWidth,lpHeight,lpARWidth,lpARHeight) (This)->lpVtbl->GetNativeVideoSize(This,lpWidth,lpHeight,lpARWidth,lpARHeight) -#define IVMRWindowlessControl_GetMinIdealVideoSize(This,lpWidth,lpHeight) (This)->lpVtbl->GetMinIdealVideoSize(This,lpWidth,lpHeight) -#define IVMRWindowlessControl_GetMaxIdealVideoSize(This,lpWidth,lpHeight) (This)->lpVtbl->GetMaxIdealVideoSize(This,lpWidth,lpHeight) -#define IVMRWindowlessControl_SetVideoPosition(This,lpSRCRect,lpDSTRect) (This)->lpVtbl->SetVideoPosition(This,lpSRCRect,lpDSTRect) -#define IVMRWindowlessControl_GetVideoPosition(This,lpSRCRect,lpDSTRect) (This)->lpVtbl->GetVideoPosition(This,lpSRCRect,lpDSTRect) -#define IVMRWindowlessControl_GetAspectRatioMode(This,lpAspectRatioMode) (This)->lpVtbl->GetAspectRatioMode(This,lpAspectRatioMode) -#define IVMRWindowlessControl_SetAspectRatioMode(This,AspectRatioMode) (This)->lpVtbl->SetAspectRatioMode(This,AspectRatioMode) -#define IVMRWindowlessControl_SetVideoClippingWindow(This,hwnd) (This)->lpVtbl->SetVideoClippingWindow(This,hwnd) -#define IVMRWindowlessControl_RepaintVideo(This,hwnd,hdc) (This)->lpVtbl->RepaintVideo(This,hwnd,hdc) -#define IVMRWindowlessControl_DisplayModeChanged(This) (This)->lpVtbl->DisplayModeChanged(This) -#define IVMRWindowlessControl_GetCurrentImage(This,lpDib) (This)->lpVtbl->GetCurrentImage(This,lpDib) -#define IVMRWindowlessControl_SetBorderColor(This,Clr) (This)->lpVtbl->SetBorderColor(This,Clr) -#define IVMRWindowlessControl_GetBorderColor(This,lpClr) (This)->lpVtbl->GetBorderColor(This,lpClr) -#define IVMRWindowlessControl_SetColorKey(This,Clr) (This)->lpVtbl->SetColorKey(This,Clr) -#define IVMRWindowlessControl_GetColorKey(This,lpClr) (This)->lpVtbl->GetColorKey(This,lpClr) -#endif -#endif - HRESULT WINAPI IVMRWindowlessControl_GetNativeVideoSize_Proxy(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight,LONG *lpARWidth,LONG *lpARHeight); - void __RPC_STUB IVMRWindowlessControl_GetNativeVideoSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetMinIdealVideoSize_Proxy(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight); - void __RPC_STUB IVMRWindowlessControl_GetMinIdealVideoSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetMaxIdealVideoSize_Proxy(IVMRWindowlessControl *This,LONG *lpWidth,LONG *lpHeight); - void __RPC_STUB IVMRWindowlessControl_GetMaxIdealVideoSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_SetVideoPosition_Proxy(IVMRWindowlessControl *This,const LPRECT lpSRCRect,const LPRECT lpDSTRect); - void __RPC_STUB IVMRWindowlessControl_SetVideoPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetVideoPosition_Proxy(IVMRWindowlessControl *This,LPRECT lpSRCRect,LPRECT lpDSTRect); - void __RPC_STUB IVMRWindowlessControl_GetVideoPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetAspectRatioMode_Proxy(IVMRWindowlessControl *This,DWORD *lpAspectRatioMode); - void __RPC_STUB IVMRWindowlessControl_GetAspectRatioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_SetAspectRatioMode_Proxy(IVMRWindowlessControl *This,DWORD AspectRatioMode); - void __RPC_STUB IVMRWindowlessControl_SetAspectRatioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_SetVideoClippingWindow_Proxy(IVMRWindowlessControl *This,HWND hwnd); - void __RPC_STUB IVMRWindowlessControl_SetVideoClippingWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_RepaintVideo_Proxy(IVMRWindowlessControl *This,HWND hwnd,HDC hdc); - void __RPC_STUB IVMRWindowlessControl_RepaintVideo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_DisplayModeChanged_Proxy(IVMRWindowlessControl *This); - void __RPC_STUB IVMRWindowlessControl_DisplayModeChanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetCurrentImage_Proxy(IVMRWindowlessControl *This,BYTE **lpDib); - void __RPC_STUB IVMRWindowlessControl_GetCurrentImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_SetBorderColor_Proxy(IVMRWindowlessControl *This,COLORREF Clr); - void __RPC_STUB IVMRWindowlessControl_SetBorderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetBorderColor_Proxy(IVMRWindowlessControl *This,COLORREF *lpClr); - void __RPC_STUB IVMRWindowlessControl_GetBorderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_SetColorKey_Proxy(IVMRWindowlessControl *This,COLORREF Clr); - void __RPC_STUB IVMRWindowlessControl_SetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRWindowlessControl_GetColorKey_Proxy(IVMRWindowlessControl *This,COLORREF *lpClr); - void __RPC_STUB IVMRWindowlessControl_GetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0401_0001 { - MixerPref_NoDecimation = 0x1,MixerPref_DecimateOutput = 0x2,MixerPref_ARAdjustXorY = 0x4,MixerPref_DecimationReserved = 0x8, - MixerPref_DecimateMask = 0xf,MixerPref_BiLinearFiltering = 0x10,MixerPref_PointFiltering = 0x20,MixerPref_FilteringMask = 0xf0, - MixerPref_RenderTargetRGB = 0x100,MixerPref_RenderTargetYUV = 0x1000,MixerPref_RenderTargetYUV420 = 0x200,MixerPref_RenderTargetYUV422 = 0x400, - MixerPref_RenderTargetYUV444 = 0x800,MixerPref_RenderTargetReserved = 0xe000,MixerPref_RenderTargetMask = 0xff00, - MixerPref_DynamicSwitchToBOB = 0x10000,MixerPref_DynamicDecimateBy2 = 0x20000,MixerPref_DynamicReserved = 0xc0000, - MixerPref_DynamicMask = 0xf0000 - } VMRMixerPrefs; - - typedef struct _NORMALIZEDRECT { - float left; - float top; - float right; - float bottom; - } NORMALIZEDRECT; - - typedef struct _NORMALIZEDRECT *PNORMALIZEDRECT; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0401_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0401_v0_0_s_ifspec; -#ifndef __IVMRMixerControl_INTERFACE_DEFINED__ -#define __IVMRMixerControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRMixerControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRMixerControl : public IUnknown { - public: - virtual HRESULT WINAPI SetAlpha(DWORD dwStreamID,float Alpha) = 0; - virtual HRESULT WINAPI GetAlpha(DWORD dwStreamID,float *pAlpha) = 0; - virtual HRESULT WINAPI SetZOrder(DWORD dwStreamID,DWORD dwZ) = 0; - virtual HRESULT WINAPI GetZOrder(DWORD dwStreamID,DWORD *pZ) = 0; - virtual HRESULT WINAPI SetOutputRect(DWORD dwStreamID,const NORMALIZEDRECT *pRect) = 0; - virtual HRESULT WINAPI GetOutputRect(DWORD dwStreamID,NORMALIZEDRECT *pRect) = 0; - virtual HRESULT WINAPI SetBackgroundClr(COLORREF ClrBkg) = 0; - virtual HRESULT WINAPI GetBackgroundClr(COLORREF *lpClrBkg) = 0; - virtual HRESULT WINAPI SetMixingPrefs(DWORD dwMixerPrefs) = 0; - virtual HRESULT WINAPI GetMixingPrefs(DWORD *pdwMixerPrefs) = 0; - }; -#else - typedef struct IVMRMixerControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRMixerControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRMixerControl *This); - ULONG (WINAPI *Release)(IVMRMixerControl *This); - HRESULT (WINAPI *SetAlpha)(IVMRMixerControl *This,DWORD dwStreamID,float Alpha); - HRESULT (WINAPI *GetAlpha)(IVMRMixerControl *This,DWORD dwStreamID,float *pAlpha); - HRESULT (WINAPI *SetZOrder)(IVMRMixerControl *This,DWORD dwStreamID,DWORD dwZ); - HRESULT (WINAPI *GetZOrder)(IVMRMixerControl *This,DWORD dwStreamID,DWORD *pZ); - HRESULT (WINAPI *SetOutputRect)(IVMRMixerControl *This,DWORD dwStreamID,const NORMALIZEDRECT *pRect); - HRESULT (WINAPI *GetOutputRect)(IVMRMixerControl *This,DWORD dwStreamID,NORMALIZEDRECT *pRect); - HRESULT (WINAPI *SetBackgroundClr)(IVMRMixerControl *This,COLORREF ClrBkg); - HRESULT (WINAPI *GetBackgroundClr)(IVMRMixerControl *This,COLORREF *lpClrBkg); - HRESULT (WINAPI *SetMixingPrefs)(IVMRMixerControl *This,DWORD dwMixerPrefs); - HRESULT (WINAPI *GetMixingPrefs)(IVMRMixerControl *This,DWORD *pdwMixerPrefs); - END_INTERFACE - } IVMRMixerControlVtbl; - struct IVMRMixerControl { - CONST_VTBL struct IVMRMixerControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRMixerControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRMixerControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRMixerControl_Release(This) (This)->lpVtbl->Release(This) -#define IVMRMixerControl_SetAlpha(This,dwStreamID,Alpha) (This)->lpVtbl->SetAlpha(This,dwStreamID,Alpha) -#define IVMRMixerControl_GetAlpha(This,dwStreamID,pAlpha) (This)->lpVtbl->GetAlpha(This,dwStreamID,pAlpha) -#define IVMRMixerControl_SetZOrder(This,dwStreamID,dwZ) (This)->lpVtbl->SetZOrder(This,dwStreamID,dwZ) -#define IVMRMixerControl_GetZOrder(This,dwStreamID,pZ) (This)->lpVtbl->GetZOrder(This,dwStreamID,pZ) -#define IVMRMixerControl_SetOutputRect(This,dwStreamID,pRect) (This)->lpVtbl->SetOutputRect(This,dwStreamID,pRect) -#define IVMRMixerControl_GetOutputRect(This,dwStreamID,pRect) (This)->lpVtbl->GetOutputRect(This,dwStreamID,pRect) -#define IVMRMixerControl_SetBackgroundClr(This,ClrBkg) (This)->lpVtbl->SetBackgroundClr(This,ClrBkg) -#define IVMRMixerControl_GetBackgroundClr(This,lpClrBkg) (This)->lpVtbl->GetBackgroundClr(This,lpClrBkg) -#define IVMRMixerControl_SetMixingPrefs(This,dwMixerPrefs) (This)->lpVtbl->SetMixingPrefs(This,dwMixerPrefs) -#define IVMRMixerControl_GetMixingPrefs(This,pdwMixerPrefs) (This)->lpVtbl->GetMixingPrefs(This,pdwMixerPrefs) -#endif -#endif - HRESULT WINAPI IVMRMixerControl_SetAlpha_Proxy(IVMRMixerControl *This,DWORD dwStreamID,float Alpha); - void __RPC_STUB IVMRMixerControl_SetAlpha_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_GetAlpha_Proxy(IVMRMixerControl *This,DWORD dwStreamID,float *pAlpha); - void __RPC_STUB IVMRMixerControl_GetAlpha_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_SetZOrder_Proxy(IVMRMixerControl *This,DWORD dwStreamID,DWORD dwZ); - void __RPC_STUB IVMRMixerControl_SetZOrder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_GetZOrder_Proxy(IVMRMixerControl *This,DWORD dwStreamID,DWORD *pZ); - void __RPC_STUB IVMRMixerControl_GetZOrder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_SetOutputRect_Proxy(IVMRMixerControl *This,DWORD dwStreamID,const NORMALIZEDRECT *pRect); - void __RPC_STUB IVMRMixerControl_SetOutputRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_GetOutputRect_Proxy(IVMRMixerControl *This,DWORD dwStreamID,NORMALIZEDRECT *pRect); - void __RPC_STUB IVMRMixerControl_GetOutputRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_SetBackgroundClr_Proxy(IVMRMixerControl *This,COLORREF ClrBkg); - void __RPC_STUB IVMRMixerControl_SetBackgroundClr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_GetBackgroundClr_Proxy(IVMRMixerControl *This,COLORREF *lpClrBkg); - void __RPC_STUB IVMRMixerControl_GetBackgroundClr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_SetMixingPrefs_Proxy(IVMRMixerControl *This,DWORD dwMixerPrefs); - void __RPC_STUB IVMRMixerControl_SetMixingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerControl_GetMixingPrefs_Proxy(IVMRMixerControl *This,DWORD *pdwMixerPrefs); - - void __RPC_STUB IVMRMixerControl_GetMixingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifdef __cplusplus - typedef struct tagVMRGUID { - ::GUID *pGUID; - ::GUID GUID; - } VMRGUID; -#else - typedef struct tagVMRGUID { - GUID *pGUID; - GUID GUID; - } VMRGUID; -#endif - - typedef struct tagVMRMONITORINFO { - VMRGUID guid; - RECT rcMonitor; - HMONITOR hMon; - DWORD dwFlags; - wchar_t szDevice[32]; - wchar_t szDescription[256]; - LARGE_INTEGER liDriverVersion; - DWORD dwVendorId; - DWORD dwDeviceId; - DWORD dwSubSysId; - DWORD dwRevision; - } VMRMONITORINFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0402_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0402_v0_0_s_ifspec; -#ifndef __IVMRMonitorConfig_INTERFACE_DEFINED__ -#define __IVMRMonitorConfig_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRMonitorConfig; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRMonitorConfig : public IUnknown { - public: - virtual HRESULT WINAPI SetMonitor(const VMRGUID *pGUID) = 0; - virtual HRESULT WINAPI GetMonitor(VMRGUID *pGUID) = 0; - virtual HRESULT WINAPI SetDefaultMonitor(const VMRGUID *pGUID) = 0; - virtual HRESULT WINAPI GetDefaultMonitor(VMRGUID *pGUID) = 0; - virtual HRESULT WINAPI GetAvailableMonitors(VMRMONITORINFO *pInfo,DWORD dwMaxInfoArraySize,DWORD *pdwNumDevices) = 0; - }; -#else - typedef struct IVMRMonitorConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRMonitorConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRMonitorConfig *This); - ULONG (WINAPI *Release)(IVMRMonitorConfig *This); - HRESULT (WINAPI *SetMonitor)(IVMRMonitorConfig *This,const VMRGUID *pGUID); - HRESULT (WINAPI *GetMonitor)(IVMRMonitorConfig *This,VMRGUID *pGUID); - HRESULT (WINAPI *SetDefaultMonitor)(IVMRMonitorConfig *This,const VMRGUID *pGUID); - HRESULT (WINAPI *GetDefaultMonitor)(IVMRMonitorConfig *This,VMRGUID *pGUID); - HRESULT (WINAPI *GetAvailableMonitors)(IVMRMonitorConfig *This,VMRMONITORINFO *pInfo,DWORD dwMaxInfoArraySize,DWORD *pdwNumDevices); - END_INTERFACE - } IVMRMonitorConfigVtbl; - struct IVMRMonitorConfig { - CONST_VTBL struct IVMRMonitorConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRMonitorConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRMonitorConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRMonitorConfig_Release(This) (This)->lpVtbl->Release(This) -#define IVMRMonitorConfig_SetMonitor(This,pGUID) (This)->lpVtbl->SetMonitor(This,pGUID) -#define IVMRMonitorConfig_GetMonitor(This,pGUID) (This)->lpVtbl->GetMonitor(This,pGUID) -#define IVMRMonitorConfig_SetDefaultMonitor(This,pGUID) (This)->lpVtbl->SetDefaultMonitor(This,pGUID) -#define IVMRMonitorConfig_GetDefaultMonitor(This,pGUID) (This)->lpVtbl->GetDefaultMonitor(This,pGUID) -#define IVMRMonitorConfig_GetAvailableMonitors(This,pInfo,dwMaxInfoArraySize,pdwNumDevices) (This)->lpVtbl->GetAvailableMonitors(This,pInfo,dwMaxInfoArraySize,pdwNumDevices) -#endif -#endif - HRESULT WINAPI IVMRMonitorConfig_SetMonitor_Proxy(IVMRMonitorConfig *This,const VMRGUID *pGUID); - void __RPC_STUB IVMRMonitorConfig_SetMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMonitorConfig_GetMonitor_Proxy(IVMRMonitorConfig *This,VMRGUID *pGUID); - void __RPC_STUB IVMRMonitorConfig_GetMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMonitorConfig_SetDefaultMonitor_Proxy(IVMRMonitorConfig *This,const VMRGUID *pGUID); - void __RPC_STUB IVMRMonitorConfig_SetDefaultMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMonitorConfig_GetDefaultMonitor_Proxy(IVMRMonitorConfig *This,VMRGUID *pGUID); - void __RPC_STUB IVMRMonitorConfig_GetDefaultMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMonitorConfig_GetAvailableMonitors_Proxy(IVMRMonitorConfig *This,VMRMONITORINFO *pInfo,DWORD dwMaxInfoArraySize,DWORD *pdwNumDevices); - void __RPC_STUB IVMRMonitorConfig_GetAvailableMonitors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0403_0001 { - RenderPrefs_RestrictToInitialMonitor = 0,RenderPrefs_ForceOffscreen = 0x1,RenderPrefs_ForceOverlays = 0x2,RenderPrefs_AllowOverlays = 0, - RenderPrefs_AllowOffscreen = 0,RenderPrefs_DoNotRenderColorKeyAndBorder = 0x8,RenderPrefs_Reserved = 0x10,RenderPrefs_PreferAGPMemWhenMixing = 0x20, - RenderPrefs_Mask = 0x3f - } VMRRenderPrefs; - - typedef enum __MIDL___MIDL_itf_strmif_0403_0002 { - VMRMode_Windowed = 0x1,VMRMode_Windowless = 0x2,VMRMode_Renderless = 0x4,VMRMode_Mask = 0x7 - } VMRMode; - - enum __MIDL___MIDL_itf_strmif_0403_0003 { - MAX_NUMBER_OF_STREAMS = 16 - }; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0403_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0403_v0_0_s_ifspec; -#ifndef __IVMRFilterConfig_INTERFACE_DEFINED__ -#define __IVMRFilterConfig_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRFilterConfig; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRFilterConfig : public IUnknown { - public: - virtual HRESULT WINAPI SetImageCompositor(IVMRImageCompositor *lpVMRImgCompositor) = 0; - virtual HRESULT WINAPI SetNumberOfStreams(DWORD dwMaxStreams) = 0; - virtual HRESULT WINAPI GetNumberOfStreams(DWORD *pdwMaxStreams) = 0; - virtual HRESULT WINAPI SetRenderingPrefs(DWORD dwRenderFlags) = 0; - virtual HRESULT WINAPI GetRenderingPrefs(DWORD *pdwRenderFlags) = 0; - virtual HRESULT WINAPI SetRenderingMode(DWORD Mode) = 0; - virtual HRESULT WINAPI GetRenderingMode(DWORD *pMode) = 0; - }; -#else - typedef struct IVMRFilterConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRFilterConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRFilterConfig *This); - ULONG (WINAPI *Release)(IVMRFilterConfig *This); - HRESULT (WINAPI *SetImageCompositor)(IVMRFilterConfig *This,IVMRImageCompositor *lpVMRImgCompositor); - HRESULT (WINAPI *SetNumberOfStreams)(IVMRFilterConfig *This,DWORD dwMaxStreams); - HRESULT (WINAPI *GetNumberOfStreams)(IVMRFilterConfig *This,DWORD *pdwMaxStreams); - HRESULT (WINAPI *SetRenderingPrefs)(IVMRFilterConfig *This,DWORD dwRenderFlags); - HRESULT (WINAPI *GetRenderingPrefs)(IVMRFilterConfig *This,DWORD *pdwRenderFlags); - HRESULT (WINAPI *SetRenderingMode)(IVMRFilterConfig *This,DWORD Mode); - HRESULT (WINAPI *GetRenderingMode)(IVMRFilterConfig *This,DWORD *pMode); - END_INTERFACE - } IVMRFilterConfigVtbl; - struct IVMRFilterConfig { - CONST_VTBL struct IVMRFilterConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRFilterConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRFilterConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRFilterConfig_Release(This) (This)->lpVtbl->Release(This) -#define IVMRFilterConfig_SetImageCompositor(This,lpVMRImgCompositor) (This)->lpVtbl->SetImageCompositor(This,lpVMRImgCompositor) -#define IVMRFilterConfig_SetNumberOfStreams(This,dwMaxStreams) (This)->lpVtbl->SetNumberOfStreams(This,dwMaxStreams) -#define IVMRFilterConfig_GetNumberOfStreams(This,pdwMaxStreams) (This)->lpVtbl->GetNumberOfStreams(This,pdwMaxStreams) -#define IVMRFilterConfig_SetRenderingPrefs(This,dwRenderFlags) (This)->lpVtbl->SetRenderingPrefs(This,dwRenderFlags) -#define IVMRFilterConfig_GetRenderingPrefs(This,pdwRenderFlags) (This)->lpVtbl->GetRenderingPrefs(This,pdwRenderFlags) -#define IVMRFilterConfig_SetRenderingMode(This,Mode) (This)->lpVtbl->SetRenderingMode(This,Mode) -#define IVMRFilterConfig_GetRenderingMode(This,pMode) (This)->lpVtbl->GetRenderingMode(This,pMode) -#endif -#endif - HRESULT WINAPI IVMRFilterConfig_SetImageCompositor_Proxy(IVMRFilterConfig *This,IVMRImageCompositor *lpVMRImgCompositor); - void __RPC_STUB IVMRFilterConfig_SetImageCompositor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_SetNumberOfStreams_Proxy(IVMRFilterConfig *This,DWORD dwMaxStreams); - void __RPC_STUB IVMRFilterConfig_SetNumberOfStreams_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_GetNumberOfStreams_Proxy(IVMRFilterConfig *This,DWORD *pdwMaxStreams); - void __RPC_STUB IVMRFilterConfig_GetNumberOfStreams_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_SetRenderingPrefs_Proxy(IVMRFilterConfig *This,DWORD dwRenderFlags); - void __RPC_STUB IVMRFilterConfig_SetRenderingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_GetRenderingPrefs_Proxy(IVMRFilterConfig *This,DWORD *pdwRenderFlags); - void __RPC_STUB IVMRFilterConfig_GetRenderingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_SetRenderingMode_Proxy(IVMRFilterConfig *This,DWORD Mode); - void __RPC_STUB IVMRFilterConfig_SetRenderingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRFilterConfig_GetRenderingMode_Proxy(IVMRFilterConfig *This,DWORD *pMode); - void __RPC_STUB IVMRFilterConfig_GetRenderingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRAspectRatioControl_INTERFACE_DEFINED__ -#define __IVMRAspectRatioControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRAspectRatioControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRAspectRatioControl : public IUnknown { - public: - virtual HRESULT WINAPI GetAspectRatioMode(LPDWORD lpdwARMode) = 0; - virtual HRESULT WINAPI SetAspectRatioMode(DWORD dwARMode) = 0; - }; -#else - typedef struct IVMRAspectRatioControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRAspectRatioControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRAspectRatioControl *This); - ULONG (WINAPI *Release)(IVMRAspectRatioControl *This); - HRESULT (WINAPI *GetAspectRatioMode)(IVMRAspectRatioControl *This,LPDWORD lpdwARMode); - HRESULT (WINAPI *SetAspectRatioMode)(IVMRAspectRatioControl *This,DWORD dwARMode); - END_INTERFACE - } IVMRAspectRatioControlVtbl; - struct IVMRAspectRatioControl { - CONST_VTBL struct IVMRAspectRatioControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRAspectRatioControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRAspectRatioControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRAspectRatioControl_Release(This) (This)->lpVtbl->Release(This) -#define IVMRAspectRatioControl_GetAspectRatioMode(This,lpdwARMode) (This)->lpVtbl->GetAspectRatioMode(This,lpdwARMode) -#define IVMRAspectRatioControl_SetAspectRatioMode(This,dwARMode) (This)->lpVtbl->SetAspectRatioMode(This,dwARMode) -#endif -#endif - HRESULT WINAPI IVMRAspectRatioControl_GetAspectRatioMode_Proxy(IVMRAspectRatioControl *This,LPDWORD lpdwARMode); - void __RPC_STUB IVMRAspectRatioControl_GetAspectRatioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRAspectRatioControl_SetAspectRatioMode_Proxy(IVMRAspectRatioControl *This,DWORD dwARMode); - void __RPC_STUB IVMRAspectRatioControl_SetAspectRatioMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef enum __MIDL___MIDL_itf_strmif_0405_0001 { - DeinterlacePref_NextBest = 0x1,DeinterlacePref_BOB = 0x2,DeinterlacePref_Weave = 0x4,DeinterlacePref_Mask = 0x7 - } VMRDeinterlacePrefs; - - typedef enum __MIDL___MIDL_itf_strmif_0405_0002 { - DeinterlaceTech_Unknown = 0,DeinterlaceTech_BOBLineReplicate = 0x1,DeinterlaceTech_BOBVerticalStretch = 0x2,DeinterlaceTech_MedianFiltering = 0x4, - DeinterlaceTech_EdgeFiltering = 0x10,DeinterlaceTech_FieldAdaptive = 0x20,DeinterlaceTech_PixelAdaptive = 0x40, - DeinterlaceTech_MotionVectorSteered = 0x80 - } VMRDeinterlaceTech; - - typedef struct _VMRFrequency { - DWORD dwNumerator; - DWORD dwDenominator; - } VMRFrequency; - - typedef struct _VMRVideoDesc { - DWORD dwSize; - DWORD dwSampleWidth; - DWORD dwSampleHeight; - WINBOOL SingleFieldPerSample; - DWORD dwFourCC; - VMRFrequency InputSampleFreq; - VMRFrequency OutputFrameFreq; - } VMRVideoDesc; - - typedef struct _VMRDeinterlaceCaps { - DWORD dwSize; - DWORD dwNumPreviousOutputFrames; - DWORD dwNumForwardRefSamples; - DWORD dwNumBackwardRefSamples; - VMRDeinterlaceTech DeinterlaceTechnology; - } VMRDeinterlaceCaps; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0405_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0405_v0_0_s_ifspec; -#ifndef __IVMRDeinterlaceControl_INTERFACE_DEFINED__ -#define __IVMRDeinterlaceControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRDeinterlaceControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRDeinterlaceControl : public IUnknown { - public: - virtual HRESULT WINAPI GetNumberOfDeinterlaceModes(VMRVideoDesc *lpVideoDescription,LPDWORD lpdwNumDeinterlaceModes,LPGUID lpDeinterlaceModes) = 0; - virtual HRESULT WINAPI GetDeinterlaceModeCaps(LPGUID lpDeinterlaceMode,VMRVideoDesc *lpVideoDescription,VMRDeinterlaceCaps *lpDeinterlaceCaps) = 0; - virtual HRESULT WINAPI GetDeinterlaceMode(DWORD dwStreamID,LPGUID lpDeinterlaceMode) = 0; - virtual HRESULT WINAPI SetDeinterlaceMode(DWORD dwStreamID,LPGUID lpDeinterlaceMode) = 0; - virtual HRESULT WINAPI GetDeinterlacePrefs(LPDWORD lpdwDeinterlacePrefs) = 0; - virtual HRESULT WINAPI SetDeinterlacePrefs(DWORD dwDeinterlacePrefs) = 0; - virtual HRESULT WINAPI GetActualDeinterlaceMode(DWORD dwStreamID,LPGUID lpDeinterlaceMode) = 0; - }; -#else - typedef struct IVMRDeinterlaceControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRDeinterlaceControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRDeinterlaceControl *This); - ULONG (WINAPI *Release)(IVMRDeinterlaceControl *This); - HRESULT (WINAPI *GetNumberOfDeinterlaceModes)(IVMRDeinterlaceControl *This,VMRVideoDesc *lpVideoDescription,LPDWORD lpdwNumDeinterlaceModes,LPGUID lpDeinterlaceModes); - HRESULT (WINAPI *GetDeinterlaceModeCaps)(IVMRDeinterlaceControl *This,LPGUID lpDeinterlaceMode,VMRVideoDesc *lpVideoDescription,VMRDeinterlaceCaps *lpDeinterlaceCaps); - HRESULT (WINAPI *GetDeinterlaceMode)(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - HRESULT (WINAPI *SetDeinterlaceMode)(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - HRESULT (WINAPI *GetDeinterlacePrefs)(IVMRDeinterlaceControl *This,LPDWORD lpdwDeinterlacePrefs); - HRESULT (WINAPI *SetDeinterlacePrefs)(IVMRDeinterlaceControl *This,DWORD dwDeinterlacePrefs); - HRESULT (WINAPI *GetActualDeinterlaceMode)(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - END_INTERFACE - } IVMRDeinterlaceControlVtbl; - struct IVMRDeinterlaceControl { - CONST_VTBL struct IVMRDeinterlaceControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRDeinterlaceControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRDeinterlaceControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRDeinterlaceControl_Release(This) (This)->lpVtbl->Release(This) -#define IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes(This,lpVideoDescription,lpdwNumDeinterlaceModes,lpDeinterlaceModes) (This)->lpVtbl->GetNumberOfDeinterlaceModes(This,lpVideoDescription,lpdwNumDeinterlaceModes,lpDeinterlaceModes) -#define IVMRDeinterlaceControl_GetDeinterlaceModeCaps(This,lpDeinterlaceMode,lpVideoDescription,lpDeinterlaceCaps) (This)->lpVtbl->GetDeinterlaceModeCaps(This,lpDeinterlaceMode,lpVideoDescription,lpDeinterlaceCaps) -#define IVMRDeinterlaceControl_GetDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) (This)->lpVtbl->GetDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) -#define IVMRDeinterlaceControl_SetDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) (This)->lpVtbl->SetDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) -#define IVMRDeinterlaceControl_GetDeinterlacePrefs(This,lpdwDeinterlacePrefs) (This)->lpVtbl->GetDeinterlacePrefs(This,lpdwDeinterlacePrefs) -#define IVMRDeinterlaceControl_SetDeinterlacePrefs(This,dwDeinterlacePrefs) (This)->lpVtbl->SetDeinterlacePrefs(This,dwDeinterlacePrefs) -#define IVMRDeinterlaceControl_GetActualDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) (This)->lpVtbl->GetActualDeinterlaceMode(This,dwStreamID,lpDeinterlaceMode) -#endif -#endif - HRESULT WINAPI IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes_Proxy(IVMRDeinterlaceControl *This,VMRVideoDesc *lpVideoDescription,LPDWORD lpdwNumDeinterlaceModes,LPGUID lpDeinterlaceModes); - void __RPC_STUB IVMRDeinterlaceControl_GetNumberOfDeinterlaceModes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_GetDeinterlaceModeCaps_Proxy(IVMRDeinterlaceControl *This,LPGUID lpDeinterlaceMode,VMRVideoDesc *lpVideoDescription,VMRDeinterlaceCaps *lpDeinterlaceCaps); - void __RPC_STUB IVMRDeinterlaceControl_GetDeinterlaceModeCaps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_GetDeinterlaceMode_Proxy(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - void __RPC_STUB IVMRDeinterlaceControl_GetDeinterlaceMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_SetDeinterlaceMode_Proxy(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - void __RPC_STUB IVMRDeinterlaceControl_SetDeinterlaceMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_GetDeinterlacePrefs_Proxy(IVMRDeinterlaceControl *This,LPDWORD lpdwDeinterlacePrefs); - void __RPC_STUB IVMRDeinterlaceControl_GetDeinterlacePrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_SetDeinterlacePrefs_Proxy(IVMRDeinterlaceControl *This,DWORD dwDeinterlacePrefs); - void __RPC_STUB IVMRDeinterlaceControl_SetDeinterlacePrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRDeinterlaceControl_GetActualDeinterlaceMode_Proxy(IVMRDeinterlaceControl *This,DWORD dwStreamID,LPGUID lpDeinterlaceMode); - void __RPC_STUB IVMRDeinterlaceControl_GetActualDeinterlaceMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef struct _VMRALPHABITMAP { - DWORD dwFlags; - HDC hdc; - LPDIRECTDRAWSURFACE7 pDDS; - RECT rSrc; - NORMALIZEDRECT rDest; - FLOAT fAlpha; - COLORREF clrSrcKey; - } VMRALPHABITMAP; - - typedef struct _VMRALPHABITMAP *PVMRALPHABITMAP; - -#define VMRBITMAP_DISABLE 0x00000001 -#define VMRBITMAP_HDC 0x00000002 -#define VMRBITMAP_ENTIREDDS 0x00000004 -#define VMRBITMAP_SRCCOLORKEY 0x00000008 -#define VMRBITMAP_SRCRECT 0x00000010 - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0406_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0406_v0_0_s_ifspec; -#ifndef __IVMRMixerBitmap_INTERFACE_DEFINED__ -#define __IVMRMixerBitmap_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRMixerBitmap; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRMixerBitmap : public IUnknown { - public: - virtual HRESULT WINAPI SetAlphaBitmap(const VMRALPHABITMAP *pBmpParms) = 0; - virtual HRESULT WINAPI UpdateAlphaBitmapParameters(PVMRALPHABITMAP pBmpParms) = 0; - virtual HRESULT WINAPI GetAlphaBitmapParameters(PVMRALPHABITMAP pBmpParms) = 0; - }; -#else - typedef struct IVMRMixerBitmapVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRMixerBitmap *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRMixerBitmap *This); - ULONG (WINAPI *Release)(IVMRMixerBitmap *This); - HRESULT (WINAPI *SetAlphaBitmap)(IVMRMixerBitmap *This,const VMRALPHABITMAP *pBmpParms); - HRESULT (WINAPI *UpdateAlphaBitmapParameters)(IVMRMixerBitmap *This,PVMRALPHABITMAP pBmpParms); - HRESULT (WINAPI *GetAlphaBitmapParameters)(IVMRMixerBitmap *This,PVMRALPHABITMAP pBmpParms); - END_INTERFACE - } IVMRMixerBitmapVtbl; - struct IVMRMixerBitmap { - CONST_VTBL struct IVMRMixerBitmapVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRMixerBitmap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRMixerBitmap_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRMixerBitmap_Release(This) (This)->lpVtbl->Release(This) -#define IVMRMixerBitmap_SetAlphaBitmap(This,pBmpParms) (This)->lpVtbl->SetAlphaBitmap(This,pBmpParms) -#define IVMRMixerBitmap_UpdateAlphaBitmapParameters(This,pBmpParms) (This)->lpVtbl->UpdateAlphaBitmapParameters(This,pBmpParms) -#define IVMRMixerBitmap_GetAlphaBitmapParameters(This,pBmpParms) (This)->lpVtbl->GetAlphaBitmapParameters(This,pBmpParms) -#endif -#endif - HRESULT WINAPI IVMRMixerBitmap_SetAlphaBitmap_Proxy(IVMRMixerBitmap *This,const VMRALPHABITMAP *pBmpParms); - void __RPC_STUB IVMRMixerBitmap_SetAlphaBitmap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerBitmap_UpdateAlphaBitmapParameters_Proxy(IVMRMixerBitmap *This,PVMRALPHABITMAP pBmpParms); - void __RPC_STUB IVMRMixerBitmap_UpdateAlphaBitmapParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRMixerBitmap_GetAlphaBitmapParameters_Proxy(IVMRMixerBitmap *This,PVMRALPHABITMAP pBmpParms); - void __RPC_STUB IVMRMixerBitmap_GetAlphaBitmapParameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - typedef struct _VMRVIDEOSTREAMINFO { - LPDIRECTDRAWSURFACE7 pddsVideoSurface; - DWORD dwWidth; - DWORD dwHeight; - DWORD dwStrmID; - FLOAT fAlpha; - DDCOLORKEY ddClrKey; - NORMALIZEDRECT rNormal; - } VMRVIDEOSTREAMINFO; - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0407_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0407_v0_0_s_ifspec; -#ifndef __IVMRImageCompositor_INTERFACE_DEFINED__ -#define __IVMRImageCompositor_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRImageCompositor; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRImageCompositor : public IUnknown { - public: - virtual HRESULT WINAPI InitCompositionTarget(IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget) = 0; - virtual HRESULT WINAPI TermCompositionTarget(IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget) = 0; - virtual HRESULT WINAPI SetStreamMediaType(DWORD dwStrmID,AM_MEDIA_TYPE *pmt,WINBOOL fTexture) = 0; - virtual HRESULT WINAPI CompositeImage(IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget,AM_MEDIA_TYPE *pmtRenderTarget,REFERENCE_TIME rtStart,REFERENCE_TIME rtEnd,DWORD dwClrBkGnd,VMRVIDEOSTREAMINFO *pVideoStreamInfo,UINT cStreams) = 0; - }; -#else - typedef struct IVMRImageCompositorVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRImageCompositor *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRImageCompositor *This); - ULONG (WINAPI *Release)(IVMRImageCompositor *This); - HRESULT (WINAPI *InitCompositionTarget)(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget); - HRESULT (WINAPI *TermCompositionTarget)(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget); - HRESULT (WINAPI *SetStreamMediaType)(IVMRImageCompositor *This,DWORD dwStrmID,AM_MEDIA_TYPE *pmt,WINBOOL fTexture); - HRESULT (WINAPI *CompositeImage)(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget,AM_MEDIA_TYPE *pmtRenderTarget,REFERENCE_TIME rtStart,REFERENCE_TIME rtEnd,DWORD dwClrBkGnd,VMRVIDEOSTREAMINFO *pVideoStreamInfo,UINT cStreams); - END_INTERFACE - } IVMRImageCompositorVtbl; - struct IVMRImageCompositor { - CONST_VTBL struct IVMRImageCompositorVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRImageCompositor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRImageCompositor_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRImageCompositor_Release(This) (This)->lpVtbl->Release(This) -#define IVMRImageCompositor_InitCompositionTarget(This,pD3DDevice,pddsRenderTarget) (This)->lpVtbl->InitCompositionTarget(This,pD3DDevice,pddsRenderTarget) -#define IVMRImageCompositor_TermCompositionTarget(This,pD3DDevice,pddsRenderTarget) (This)->lpVtbl->TermCompositionTarget(This,pD3DDevice,pddsRenderTarget) -#define IVMRImageCompositor_SetStreamMediaType(This,dwStrmID,pmt,fTexture) (This)->lpVtbl->SetStreamMediaType(This,dwStrmID,pmt,fTexture) -#define IVMRImageCompositor_CompositeImage(This,pD3DDevice,pddsRenderTarget,pmtRenderTarget,rtStart,rtEnd,dwClrBkGnd,pVideoStreamInfo,cStreams) (This)->lpVtbl->CompositeImage(This,pD3DDevice,pddsRenderTarget,pmtRenderTarget,rtStart,rtEnd,dwClrBkGnd,pVideoStreamInfo,cStreams) -#endif -#endif - HRESULT WINAPI IVMRImageCompositor_InitCompositionTarget_Proxy(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget); - void __RPC_STUB IVMRImageCompositor_InitCompositionTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImageCompositor_TermCompositionTarget_Proxy(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget); - void __RPC_STUB IVMRImageCompositor_TermCompositionTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImageCompositor_SetStreamMediaType_Proxy(IVMRImageCompositor *This,DWORD dwStrmID,AM_MEDIA_TYPE *pmt,WINBOOL fTexture); - void __RPC_STUB IVMRImageCompositor_SetStreamMediaType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImageCompositor_CompositeImage_Proxy(IVMRImageCompositor *This,IUnknown *pD3DDevice,LPDIRECTDRAWSURFACE7 pddsRenderTarget,AM_MEDIA_TYPE *pmtRenderTarget,REFERENCE_TIME rtStart,REFERENCE_TIME rtEnd,DWORD dwClrBkGnd,VMRVIDEOSTREAMINFO *pVideoStreamInfo,UINT cStreams); - void __RPC_STUB IVMRImageCompositor_CompositeImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRVideoStreamControl_INTERFACE_DEFINED__ -#define __IVMRVideoStreamControl_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRVideoStreamControl; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRVideoStreamControl : public IUnknown { - public: - virtual HRESULT WINAPI SetColorKey(LPDDCOLORKEY lpClrKey) = 0; - virtual HRESULT WINAPI GetColorKey(LPDDCOLORKEY lpClrKey) = 0; - virtual HRESULT WINAPI SetStreamActiveState(WINBOOL fActive) = 0; - virtual HRESULT WINAPI GetStreamActiveState(WINBOOL *lpfActive) = 0; - }; -#else - typedef struct IVMRVideoStreamControlVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRVideoStreamControl *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRVideoStreamControl *This); - ULONG (WINAPI *Release)(IVMRVideoStreamControl *This); - HRESULT (WINAPI *SetColorKey)(IVMRVideoStreamControl *This,LPDDCOLORKEY lpClrKey); - HRESULT (WINAPI *GetColorKey)(IVMRVideoStreamControl *This,LPDDCOLORKEY lpClrKey); - HRESULT (WINAPI *SetStreamActiveState)(IVMRVideoStreamControl *This,WINBOOL fActive); - HRESULT (WINAPI *GetStreamActiveState)(IVMRVideoStreamControl *This,WINBOOL *lpfActive); - END_INTERFACE - } IVMRVideoStreamControlVtbl; - struct IVMRVideoStreamControl { - CONST_VTBL struct IVMRVideoStreamControlVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRVideoStreamControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRVideoStreamControl_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRVideoStreamControl_Release(This) (This)->lpVtbl->Release(This) -#define IVMRVideoStreamControl_SetColorKey(This,lpClrKey) (This)->lpVtbl->SetColorKey(This,lpClrKey) -#define IVMRVideoStreamControl_GetColorKey(This,lpClrKey) (This)->lpVtbl->GetColorKey(This,lpClrKey) -#define IVMRVideoStreamControl_SetStreamActiveState(This,fActive) (This)->lpVtbl->SetStreamActiveState(This,fActive) -#define IVMRVideoStreamControl_GetStreamActiveState(This,lpfActive) (This)->lpVtbl->GetStreamActiveState(This,lpfActive) -#endif -#endif - HRESULT WINAPI IVMRVideoStreamControl_SetColorKey_Proxy(IVMRVideoStreamControl *This,LPDDCOLORKEY lpClrKey); - void __RPC_STUB IVMRVideoStreamControl_SetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRVideoStreamControl_GetColorKey_Proxy(IVMRVideoStreamControl *This,LPDDCOLORKEY lpClrKey); - void __RPC_STUB IVMRVideoStreamControl_GetColorKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRVideoStreamControl_SetStreamActiveState_Proxy(IVMRVideoStreamControl *This,WINBOOL fActive); - void __RPC_STUB IVMRVideoStreamControl_SetStreamActiveState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRVideoStreamControl_GetStreamActiveState_Proxy(IVMRVideoStreamControl *This,WINBOOL *lpfActive); - void __RPC_STUB IVMRVideoStreamControl_GetStreamActiveState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRSurface_INTERFACE_DEFINED__ -#define __IVMRSurface_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRSurface; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRSurface : public IUnknown { - public: - virtual HRESULT WINAPI IsSurfaceLocked(void) = 0; - virtual HRESULT WINAPI LockSurface(BYTE **lpSurface) = 0; - virtual HRESULT WINAPI UnlockSurface(void) = 0; - virtual HRESULT WINAPI GetSurface(LPDIRECTDRAWSURFACE7 *lplpSurface) = 0; - }; -#else - typedef struct IVMRSurfaceVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRSurface *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRSurface *This); - ULONG (WINAPI *Release)(IVMRSurface *This); - HRESULT (WINAPI *IsSurfaceLocked)(IVMRSurface *This); - HRESULT (WINAPI *LockSurface)(IVMRSurface *This,BYTE **lpSurface); - HRESULT (WINAPI *UnlockSurface)(IVMRSurface *This); - HRESULT (WINAPI *GetSurface)(IVMRSurface *This,LPDIRECTDRAWSURFACE7 *lplpSurface); - END_INTERFACE - } IVMRSurfaceVtbl; - struct IVMRSurface { - CONST_VTBL struct IVMRSurfaceVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRSurface_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRSurface_Release(This) (This)->lpVtbl->Release(This) -#define IVMRSurface_IsSurfaceLocked(This) (This)->lpVtbl->IsSurfaceLocked(This) -#define IVMRSurface_LockSurface(This,lpSurface) (This)->lpVtbl->LockSurface(This,lpSurface) -#define IVMRSurface_UnlockSurface(This) (This)->lpVtbl->UnlockSurface(This) -#define IVMRSurface_GetSurface(This,lplpSurface) (This)->lpVtbl->GetSurface(This,lplpSurface) -#endif -#endif - HRESULT WINAPI IVMRSurface_IsSurfaceLocked_Proxy(IVMRSurface *This); - void __RPC_STUB IVMRSurface_IsSurfaceLocked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurface_LockSurface_Proxy(IVMRSurface *This,BYTE **lpSurface); - void __RPC_STUB IVMRSurface_LockSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurface_UnlockSurface_Proxy(IVMRSurface *This); - void __RPC_STUB IVMRSurface_UnlockSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRSurface_GetSurface_Proxy(IVMRSurface *This,LPDIRECTDRAWSURFACE7 *lplpSurface); - void __RPC_STUB IVMRSurface_GetSurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRImagePresenterConfig_INTERFACE_DEFINED__ -#define __IVMRImagePresenterConfig_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRImagePresenterConfig; - -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRImagePresenterConfig : public IUnknown { - public: - virtual HRESULT WINAPI SetRenderingPrefs(DWORD dwRenderFlags) = 0; - virtual HRESULT WINAPI GetRenderingPrefs(DWORD *dwRenderFlags) = 0; - }; -#else - typedef struct IVMRImagePresenterConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRImagePresenterConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRImagePresenterConfig *This); - ULONG (WINAPI *Release)(IVMRImagePresenterConfig *This); - HRESULT (WINAPI *SetRenderingPrefs)(IVMRImagePresenterConfig *This,DWORD dwRenderFlags); - HRESULT (WINAPI *GetRenderingPrefs)(IVMRImagePresenterConfig *This,DWORD *dwRenderFlags); - END_INTERFACE - } IVMRImagePresenterConfigVtbl; - struct IVMRImagePresenterConfig { - CONST_VTBL struct IVMRImagePresenterConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRImagePresenterConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRImagePresenterConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRImagePresenterConfig_Release(This) (This)->lpVtbl->Release(This) -#define IVMRImagePresenterConfig_SetRenderingPrefs(This,dwRenderFlags) (This)->lpVtbl->SetRenderingPrefs(This,dwRenderFlags) -#define IVMRImagePresenterConfig_GetRenderingPrefs(This,dwRenderFlags) (This)->lpVtbl->GetRenderingPrefs(This,dwRenderFlags) -#endif -#endif - HRESULT WINAPI IVMRImagePresenterConfig_SetRenderingPrefs_Proxy(IVMRImagePresenterConfig *This,DWORD dwRenderFlags); - void __RPC_STUB IVMRImagePresenterConfig_SetRenderingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImagePresenterConfig_GetRenderingPrefs_Proxy(IVMRImagePresenterConfig *This,DWORD *dwRenderFlags); - void __RPC_STUB IVMRImagePresenterConfig_GetRenderingPrefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVMRImagePresenterExclModeConfig_INTERFACE_DEFINED__ -#define __IVMRImagePresenterExclModeConfig_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVMRImagePresenterExclModeConfig; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVMRImagePresenterExclModeConfig : public IVMRImagePresenterConfig { - public: - virtual HRESULT WINAPI SetXlcModeDDObjAndPrimarySurface(LPDIRECTDRAW7 lpDDObj,LPDIRECTDRAWSURFACE7 lpPrimarySurf) = 0; - virtual HRESULT WINAPI GetXlcModeDDObjAndPrimarySurface(LPDIRECTDRAW7 *lpDDObj,LPDIRECTDRAWSURFACE7 *lpPrimarySurf) = 0; - }; -#else - typedef struct IVMRImagePresenterExclModeConfigVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVMRImagePresenterExclModeConfig *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVMRImagePresenterExclModeConfig *This); - ULONG (WINAPI *Release)(IVMRImagePresenterExclModeConfig *This); - HRESULT (WINAPI *SetRenderingPrefs)(IVMRImagePresenterExclModeConfig *This,DWORD dwRenderFlags); - HRESULT (WINAPI *GetRenderingPrefs)(IVMRImagePresenterExclModeConfig *This,DWORD *dwRenderFlags); - HRESULT (WINAPI *SetXlcModeDDObjAndPrimarySurface)(IVMRImagePresenterExclModeConfig *This,LPDIRECTDRAW7 lpDDObj,LPDIRECTDRAWSURFACE7 lpPrimarySurf); - HRESULT (WINAPI *GetXlcModeDDObjAndPrimarySurface)(IVMRImagePresenterExclModeConfig *This,LPDIRECTDRAW7 *lpDDObj,LPDIRECTDRAWSURFACE7 *lpPrimarySurf); - END_INTERFACE - } IVMRImagePresenterExclModeConfigVtbl; - struct IVMRImagePresenterExclModeConfig { - CONST_VTBL struct IVMRImagePresenterExclModeConfigVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVMRImagePresenterExclModeConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVMRImagePresenterExclModeConfig_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVMRImagePresenterExclModeConfig_Release(This) (This)->lpVtbl->Release(This) -#define IVMRImagePresenterExclModeConfig_SetRenderingPrefs(This,dwRenderFlags) (This)->lpVtbl->SetRenderingPrefs(This,dwRenderFlags) -#define IVMRImagePresenterExclModeConfig_GetRenderingPrefs(This,dwRenderFlags) (This)->lpVtbl->GetRenderingPrefs(This,dwRenderFlags) -#define IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface(This,lpDDObj,lpPrimarySurf) (This)->lpVtbl->SetXlcModeDDObjAndPrimarySurface(This,lpDDObj,lpPrimarySurf) -#define IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface(This,lpDDObj,lpPrimarySurf) (This)->lpVtbl->GetXlcModeDDObjAndPrimarySurface(This,lpDDObj,lpPrimarySurf) -#endif -#endif - HRESULT WINAPI IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface_Proxy(IVMRImagePresenterExclModeConfig *This,LPDIRECTDRAW7 lpDDObj,LPDIRECTDRAWSURFACE7 lpPrimarySurf); - void __RPC_STUB IVMRImagePresenterExclModeConfig_SetXlcModeDDObjAndPrimarySurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface_Proxy(IVMRImagePresenterExclModeConfig *This,LPDIRECTDRAW7 *lpDDObj,LPDIRECTDRAWSURFACE7 *lpPrimarySurf); - void __RPC_STUB IVMRImagePresenterExclModeConfig_GetXlcModeDDObjAndPrimarySurface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - -#ifndef __IVPManager_INTERFACE_DEFINED__ -#define __IVPManager_INTERFACE_DEFINED__ - EXTERN_C const IID IID_IVPManager; -#if defined(__cplusplus) && !defined(CINTERFACE) - struct IVPManager : public IUnknown { - public: - virtual HRESULT WINAPI SetVideoPortIndex(DWORD dwVideoPortIndex) = 0; - virtual HRESULT WINAPI GetVideoPortIndex(DWORD *pdwVideoPortIndex) = 0; - }; -#else - typedef struct IVPManagerVtbl { - BEGIN_INTERFACE - HRESULT (WINAPI *QueryInterface)(IVPManager *This,REFIID riid,void **ppvObject); - ULONG (WINAPI *AddRef)(IVPManager *This); - ULONG (WINAPI *Release)(IVPManager *This); - HRESULT (WINAPI *SetVideoPortIndex)(IVPManager *This,DWORD dwVideoPortIndex); - HRESULT (WINAPI *GetVideoPortIndex)(IVPManager *This,DWORD *pdwVideoPortIndex); - END_INTERFACE - } IVPManagerVtbl; - struct IVPManager { - CONST_VTBL struct IVPManagerVtbl *lpVtbl; - }; -#ifdef COBJMACROS -#define IVPManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) -#define IVPManager_AddRef(This) (This)->lpVtbl->AddRef(This) -#define IVPManager_Release(This) (This)->lpVtbl->Release(This) -#define IVPManager_SetVideoPortIndex(This,dwVideoPortIndex) (This)->lpVtbl->SetVideoPortIndex(This,dwVideoPortIndex) -#define IVPManager_GetVideoPortIndex(This,pdwVideoPortIndex) (This)->lpVtbl->GetVideoPortIndex(This,pdwVideoPortIndex) -#endif -#endif - HRESULT WINAPI IVPManager_SetVideoPortIndex_Proxy(IVPManager *This,DWORD dwVideoPortIndex); - void __RPC_STUB IVPManager_SetVideoPortIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); - HRESULT WINAPI IVPManager_GetVideoPortIndex_Proxy(IVPManager *This,DWORD *pdwVideoPortIndex); - void __RPC_STUB IVPManager_GetVideoPortIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase); -#endif - - extern RPC_IF_HANDLE __MIDL_itf_strmif_0413_v0_0_c_ifspec; - extern RPC_IF_HANDLE __MIDL_itf_strmif_0413_v0_0_s_ifspec; - - unsigned long __RPC_API VARIANT_UserSize(unsigned long *,unsigned long,VARIANT *); - unsigned char *__RPC_API VARIANT_UserMarshal(unsigned long *,unsigned char *,VARIANT *); - unsigned char *__RPC_API VARIANT_UserUnmarshal(unsigned long *,unsigned char *,VARIANT *); - void __RPC_API VARIANT_UserFree(unsigned long *,VARIANT *); - - HRESULT WINAPI ICaptureGraphBuilder_FindInterface_Proxy(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pf,REFIID riid,void **ppint); - HRESULT WINAPI ICaptureGraphBuilder_FindInterface_Stub(ICaptureGraphBuilder *This,const GUID *pCategory,IBaseFilter *pf,REFIID riid,IUnknown **ppint); - HRESULT WINAPI ICaptureGraphBuilder2_FindInterface_Proxy(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,void **ppint); - HRESULT WINAPI ICaptureGraphBuilder2_FindInterface_Stub(ICaptureGraphBuilder2 *This,const GUID *pCategory,const GUID *pType,IBaseFilter *pf,REFIID riid,IUnknown **ppint); - HRESULT WINAPI IKsPropertySet_Set_Proxy(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData); - HRESULT WINAPI IKsPropertySet_Set_Stub(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,byte *pInstanceData,DWORD cbInstanceData,byte *pPropData,DWORD cbPropData); - HRESULT WINAPI IKsPropertySet_Get_Proxy(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,LPVOID pInstanceData,DWORD cbInstanceData,LPVOID pPropData,DWORD cbPropData,DWORD *pcbReturned); - HRESULT WINAPI IKsPropertySet_Get_Stub(IKsPropertySet *This,REFGUID guidPropSet,DWORD dwPropID,byte *pInstanceData,DWORD cbInstanceData,byte *pPropData,DWORD cbPropData,DWORD *pcbReturned); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/3rdparty/include/dshow/uuids.h b/3rdparty/include/dshow/uuids.h deleted file mode 100644 index 53cdefd..0000000 --- a/3rdparty/include/dshow/uuids.h +++ /dev/null @@ -1,368 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER.PD within this package. - */ -#ifndef OUR_GUID_ENTRY -#define OUR_GUID_ENTRY(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8); -#endif - -#define MEDIATYPE_NULL GUID_NULL -#define MEDIASUBTYPE_NULL GUID_NULL - -OUR_GUID_ENTRY(MEDIASUBTYPE_None,0xe436eb8e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIATYPE_Video,0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_Audio,0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_Text,0x73747874,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_Midi,0x7364696D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_Stream,0xe436eb83,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIATYPE_Interleaved,0x73766169,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_File,0x656c6966,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_ScriptCommand,0x73636d64,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data,0x670aea80,0x3a82,0x11d0,0xb7,0x9b,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(MEDIATYPE_VBI,0xf72a76e1,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(MEDIATYPE_Timecode,0x482dee3,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIATYPE_LMRT,0x74726c6d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIATYPE_URL_STREAM,0x736c7275,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_CLPL,0x4C504C43,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_YUYV,0x56595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IYUV,0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_YVU9,0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Y411,0x31313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Y41P,0x50313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_YUY2,0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_YVYU,0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_UYVY,0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Y211,0x31313259,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_CLJR,0x524a4c43,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IF09,0x39304649,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_CPLA,0x414c5043,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_MJPG,0x47504A4D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ,0x4A4D5654,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_WAKE,0x454B4157,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_CFCC,0x43434643,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IJPG,0x47504A49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Plum,0x6D756C50,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_DVCS,0x53435644,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_DVSD,0x44535644,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_MDVF,0x4656444D,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB1,0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB4,0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB8,0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB565,0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB555,0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB24,0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32,0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555,0x297c55af,0xe209,0x4cb3,0xb7,0x57,0xc7,0x6d,0x6b,0x9c,0x88,0xa8) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444,0x6e6415e6,0x5c24,0x425f,0x93,0xcd,0x80,0x10,0x2b,0x3d,0x1c,0xca) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32,0x773c9ac0,0x3274,0x11d0,0xb7,0x24,0x0,0xaa,0x0,0x6c,0x1a,0x1) -OUR_GUID_ENTRY(MEDIASUBTYPE_A2R10G10B10,0x2f8bb76d,0xb644,0x4550,0xac,0xf3,0xd3,0x0c,0xaa,0x65,0xd5,0xc5) -OUR_GUID_ENTRY(MEDIASUBTYPE_A2B10G10R10,0x576f7893,0xbdf6,0x48c4,0x87,0x5f,0xae,0x7b,0x81,0x83,0x45,0x67) -OUR_GUID_ENTRY(MEDIASUBTYPE_AYUV,0x56555941,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_AI44,0x34344941,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IA44,0x34344149,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX7_RT,0x32335237,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX7_RT,0x36315237,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX7_RT,0x38384137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX7_RT,0x34344137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX7_RT,0x35314137,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX9_RT,0x32335239,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX9_RT,0x36315239,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX9_RT,0x38384139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX9_RT,0x34344139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX9_RT,0x35314139,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) - -#define MEDIASUBTYPE_HASALPHA(mt) (((mt).subtype==MEDIASUBTYPE_ARGB4444) || ((mt).subtype==MEDIASUBTYPE_ARGB32) || ((mt).subtype==MEDIASUBTYPE_AYUV) || ((mt).subtype==MEDIASUBTYPE_AI44) || ((mt).subtype==MEDIASUBTYPE_IA44) || ((mt).subtype==MEDIASUBTYPE_ARGB1555) || ((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT)) -#define MEDIASUBTYPE_HASALPHA7(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT)) -#define MEDIASUBTYPE_D3D_DX7_RT(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_RGB32_D3D_DX7_RT) || ((mt).subtype==MEDIASUBTYPE_RGB16_D3D_DX7_RT)) -#define MEDIASUBTYPE_HASALPHA9(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT)) -#define MEDIASUBTYPE_D3D_DX9_RT(mt) (((mt).subtype==MEDIASUBTYPE_ARGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB4444_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_ARGB1555_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_RGB32_D3D_DX9_RT) || ((mt).subtype==MEDIASUBTYPE_RGB16_D3D_DX9_RT)) - -OUR_GUID_ENTRY(MEDIASUBTYPE_YV12,0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_NV12,0x3231564E,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IMC1,0x31434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IMC2,0x32434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IMC3,0x33434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IMC4,0x34434D49,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_S340,0x30343353,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_S342,0x32343353,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Overlay,0xe436eb7f,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet,0xe436eb80,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload,0xe436eb81,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload,0x00000050,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71) -OUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream,0xe436eb82,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System,0xe436eb84,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD,0xe436eb85,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video,0xe436eb86,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio,0xe436eb87,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_Avi,0xe436eb88,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_Asf,0x3db80f90,0x9412,0x11d1,0xad,0xed,0x0,0x0,0xf8,0x75,0x4b,0x99) -OUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie,0xe436eb89,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza,0x617a7072,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc,0x20636d73,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_QTRle,0x20656c72,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg,0x6765706a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete,0xe436eb8a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_PCM,0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_WAVE,0xe436eb8b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_AU,0xe436eb8c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_AIFF,0xe436eb8d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(MEDIASUBTYPE_dvsd,0x64737664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_dvhd,0x64687664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_dvsl,0x6c737664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_dv25,0x35327664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_dv50,0x30357664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_dvh1,0x31687664,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair,0x6e8d4a22,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket,0x6e8d4a23,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData,0x6e8d4a24,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(MEDIASUBTYPE_TELETEXT,0xf72a76e3,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(MEDIASUBTYPE_WSS,0x2791D576,0x8E7A,0x466F,0x9E,0x90,0x5D,0x3F,0x30,0x83,0x73,0x8B) -OUR_GUID_ENTRY(MEDIASUBTYPE_VPS,0xa1b3f620,0x9792,0x4d8d,0x81,0xa4,0x86,0xaf,0x25,0x77,0x20,0x90) -OUR_GUID_ENTRY(MEDIASUBTYPE_DRM_Audio,0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_IEEE_FLOAT,0x00000003,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3_SPDIF,0x00000092,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_RAW_SPORT,0x00000240,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_SPDIF_TAG_241h,0x00000241,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71) -OUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo,0xa0af4f81,0xe163,0x11d0,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio,0xa0af4f82,0xe163,0x11d0,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo,0x5a9b6a40,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI,0x5a9b6a41,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder,0xBF87B6E0,0x8C27,0x11d0,0xB3,0xF0,0x0,0xAA,0x00,0x37,0x61,0xC5) -OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2,0xBF87B6E1,0x8C27,0x11d0,0xB3,0xF0,0x0,0xAA,0x00,0x37,0x61,0xC5) -OUR_GUID_ENTRY(CLSID_ProtoFilterGraph,0xe436ebb0,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_SystemClock,0xe436ebb1,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_FilterMapper,0xe436ebb2,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_FilterGraph,0xe436ebb3,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_FilterGraphNoThread,0xe436ebb8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_MPEG1Doc,0xe4bbd160,0x4269,0x11ce,0x83,0x8d,0x0,0xaa,0x0,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_FileSource,0x701722e0,0x8ae3,0x11ce,0xa8,0x5c,0x00,0xaa,0x00,0x2f,0xea,0xb5) -OUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer,0x26c25940,0x4ca9,0x11ce,0xa8,0x28,0x0,0xaa,0x0,0x2f,0xea,0xb5) -OUR_GUID_ENTRY(CLSID_MPEG1Splitter,0x336475d0,0x942a,0x11ce,0xa8,0x70,0x00,0xaa,0x00,0x2f,0xea,0xb5) -OUR_GUID_ENTRY(CLSID_CMpegVideoCodec,0xfeb50740,0x7bef,0x11ce,0x9b,0xd9,0x0,0x0,0xe2,0x2,0x59,0x9c) -OUR_GUID_ENTRY(CLSID_CMpegAudioCodec,0x4a2286e0,0x7bef,0x11ce,0x9b,0xd9,0x0,0x0,0xe2,0x2,0x59,0x9c) -OUR_GUID_ENTRY(CLSID_TextRender,0xe30629d3,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66) -OUR_GUID_ENTRY(CLSID_InfTee,0xf8388a40,0xd5bb,0x11d0,0xbe,0x5a,0x0,0x80,0xc7,0x6,0x56,0x8e) -OUR_GUID_ENTRY(CLSID_AviSplitter,0x1b544c20,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e) -OUR_GUID_ENTRY(CLSID_AviReader,0x1b544c21,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e) -OUR_GUID_ENTRY(CLSID_VfwCapture,0x1b544c22,0xfd0b,0x11ce,0x8c,0x63,0x0,0xaa,0x00,0x44,0xb5,0x1e) -OUR_GUID_ENTRY(CLSID_CaptureProperties,0x1B544c22,0xFD0B,0x11ce,0x8C,0x63,0x00,0xAA,0x00,0x44,0xB5,0x1F) -OUR_GUID_ENTRY(CLSID_FGControl,0xe436ebb4,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_MOVReader,0x44584800,0xf8ee,0x11ce,0xb2,0xd4,0x00,0xdd,0x1,0x10,0x1b,0x85) -OUR_GUID_ENTRY(CLSID_QuickTimeParser,0xd51bd5a0,0x7548,0x11cf,0xa5,0x20,0x0,0x80,0xc7,0x7e,0xf5,0x8a) -OUR_GUID_ENTRY(CLSID_QTDec,0xfdfe9681,0x74a3,0x11d0,0xaf,0xa7,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_AVIDoc,0xd3588ab0,0x0781,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0xb,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_VideoRenderer,0x70e102b0,0x5556,0x11ce,0x97,0xc0,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_Colour,0x1643e180,0x90f5,0x11ce,0x97,0xd5,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_Dither,0x1da08500,0x9edc,0x11cf,0xbc,0x10,0x00,0xaa,0x00,0xac,0x74,0xf6) -OUR_GUID_ENTRY(CLSID_ModexRenderer,0x7167665,0x5011,0x11cf,0xbf,0x33,0x0,0xaa,0x0,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_AudioRender,0xe30629d1,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66) -OUR_GUID_ENTRY(CLSID_AudioProperties,0x05589faf,0xc356,0x11ce,0xbf,0x01,0x0,0xaa,0x0,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_DSoundRender,0x79376820,0x07D0,0x11CF,0xA2,0x4D,0x0,0x20,0xAF,0xD7,0x97,0x67) -OUR_GUID_ENTRY(CLSID_AudioRecord,0xe30629d2,0x27e5,0x11ce,0x87,0x5d,0x0,0x60,0x8c,0xb7,0x80,0x66) -OUR_GUID_ENTRY(CLSID_AudioInputMixerProperties,0x2ca8ca52,0x3c3f,0x11d2,0xb7,0x3d,0x0,0xc0,0x4f,0xb6,0xbd,0x3d) -OUR_GUID_ENTRY(CLSID_AVIDec,0xcf49d4e0,0x1115,0x11ce,0xb0,0x3a,0x0,0x20,0xaf,0xb,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_AVIDraw,0xa888df60,0x1e90,0x11cf,0xac,0x98,0x0,0xaa,0x0,0x4c,0xf,0xa9) -OUR_GUID_ENTRY(CLSID_ACMWrapper,0x6a08cf80,0x0e18,0x11cf,0xa2,0x4d,0x0,0x20,0xaf,0xd7,0x97,0x67) -OUR_GUID_ENTRY(CLSID_AsyncReader,0xe436ebb5,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_URLReader,0xe436ebb6,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_PersistMonikerPID,0xe436ebb7,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70) -OUR_GUID_ENTRY(CLSID_AVICo,0xd76e2820,0x1563,0x11cf,0xac,0x98,0x0,0xaa,0x0,0x4c,0xf,0xa9) -OUR_GUID_ENTRY(CLSID_FileWriter,0x8596e5f0,0xda5,0x11d0,0xbd,0x21,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AviDest,0xe2510970,0xf137,0x11ce,0x8b,0x67,0x0,0xaa,0x0,0xa3,0xf1,0xa6) -OUR_GUID_ENTRY(CLSID_AviMuxProptyPage,0xc647b5c0,0x157c,0x11d0,0xbd,0x23,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AviMuxProptyPage1,0xa9ae910,0x85c0,0x11d0,0xbd,0x42,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AVIMIDIRender,0x07b65360,0xc445,0x11ce,0xaf,0xde,0x00,0xaa,0x00,0x6c,0x14,0xf4) -OUR_GUID_ENTRY(CLSID_WMAsfReader,0x187463a0,0x5bb7,0x11d3,0xac,0xbe,0x0,0x80,0xc7,0x5e,0x24,0x6e) -OUR_GUID_ENTRY(CLSID_WMAsfWriter,0x7c23220e,0x55bb,0x11d3,0x8b,0x16,0x0,0xc0,0x4f,0xb6,0xbd,0x3d) -OUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer,0xafb6c280,0x2c41,0x11d3,0x8a,0x60,0x00,0x00,0xf8,0x1e,0x0e,0x4a) -OUR_GUID_ENTRY(CLSID_MMSPLITTER,0x3ae86b20,0x7be8,0x11d1,0xab,0xe6,0x00,0xa0,0xc9,0x05,0xf3,0x75) -OUR_GUID_ENTRY(CLSID_StreamBufferSink,0x2db47ae5,0xcf39,0x43c2,0xb4,0xd6,0xc,0xd8,0xd9,0x9,0x46,0xf4) -OUR_GUID_ENTRY(CLSID_StreamBufferSource,0xc9f5fe02,0xf851,0x4eb5,0x99,0xee,0xad,0x60,0x2a,0xf1,0xe6,0x19) -OUR_GUID_ENTRY(CLSID_StreamBufferConfig,0xfa8a68b2,0xc864,0x4ba2,0xad,0x53,0xd3,0x87,0x6a,0x87,0x49,0x4b) -OUR_GUID_ENTRY(CLSID_Mpeg2VideoStreamAnalyzer,0x6cfad761,0x735d,0x4aa5,0x8a,0xfc,0xaf,0x91,0xa7,0xd6,0x1e,0xba) -OUR_GUID_ENTRY(CLSID_StreamBufferRecordingAttributes,0xccaa63ac,0x1057,0x4778,0xae,0x92,0x12,0x6,0xab,0x9a,0xce,0xe6) -OUR_GUID_ENTRY(CLSID_StreamBufferComposeRecording,0xd682c4ba,0xa90a,0x42fe,0xb9,0xe1,0x3,0x10,0x98,0x49,0xc4,0x23) -OUR_GUID_ENTRY(CLSID_DVVideoCodec,0xb1b77c00,0xc3e4,0x11cf,0xaf,0x79,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_DVVideoEnc,0x13aa3650,0xbb6f,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_DVSplitter,0x4eb31670,0x9fc6,0x11cf,0xaf,0x6e,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_DVMux,0x129d7e40,0xc10d,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_SeekingPassThru,0x60af76c,0x68dd,0x11d0,0x8f,0xc1,0x0,0xc0,0x4f,0xd9,0x18,0x9d) -OUR_GUID_ENTRY(CLSID_Line21Decoder,0x6e8d4a20,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(CLSID_Line21Decoder2,0xe4206432,0x01a1,0x4bee,0xb3,0xe1,0x37,0x02,0xc8,0xed,0xc5,0x74) -OUR_GUID_ENTRY(CLSID_OverlayMixer,0xcd8743a1,0x3736,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(CLSID_VBISurfaces,0x814b9800,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(CLSID_WSTDecoder,0x70bc06e0,0x5666,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33) -OUR_GUID_ENTRY(CLSID_MjpegDec,0x301056d0,0x6dff,0x11d2,0x9e,0xeb,0x0,0x60,0x8,0x3,0x9e,0x37) -OUR_GUID_ENTRY(CLSID_MJPGEnc,0xb80ab0a0,0x7416,0x11d2,0x9e,0xeb,0x0,0x60,0x8,0x3,0x9e,0x37) -OUR_GUID_ENTRY(CLSID_SystemDeviceEnum,0x62BE5D10,0x60EB,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_CDeviceMoniker,0x4315D437,0x5B8C,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory,0x860BB310,0x5D01,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_CVidCapClassManager,0x860BB310,0x5D01,0x11d0,0xBD,0x3B,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory,0x083863F1,0x70DE,0x11d0,0xBD,0x40,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_CQzFilterClassManager,0x083863F1,0x70DE,0x11d0,0xBD,0x40,0x00,0xA0,0xC9,0x11,0xCE,0x86) -OUR_GUID_ENTRY(CLSID_VideoCompressorCategory,0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_CIcmCoClassManager,0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AudioCompressorCategory,0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_CAcmCoClassManager,0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory,0x33d9a762,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_CWaveinClassManager,0x33d9a762,0x90c8,0x11d0,0xbd,0x43,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_AudioRendererCategory,0xe0f158e1,0xcb04,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_CWaveOutClassManager,0xe0f158e1,0xcb04,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_MidiRendererCategory,0x4EfE2452,0x168A,0x11d1,0xBC,0x76,0x0,0xc0,0x4F,0xB9,0x45,0x3B) -OUR_GUID_ENTRY(CLSID_CMidiOutClassManager,0x4EfE2452,0x168A,0x11d1,0xBC,0x76,0x0,0xc0,0x4F,0xB9,0x45,0x3B) -OUR_GUID_ENTRY(CLSID_TransmitCategory,0xcc7bfb41,0xf175,0x11d1,0xa3,0x92,0x0,0xe0,0x29,0x1f,0x39,0x59) -OUR_GUID_ENTRY(CLSID_DeviceControlCategory,0xcc7bfb46,0xf175,0x11d1,0xa3,0x92,0x0,0xe0,0x29,0x1f,0x39,0x59) -OUR_GUID_ENTRY(CLSID_ActiveMovieCategories,0xda4e3da0,0xd07d,0x11d0,0xbd,0x50,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory,0x2721AE20,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00) -OUR_GUID_ENTRY(CLSID_MediaEncoderCategory,0x7D22E920,0x5CA9,0x4787,0x8C,0x2B,0xA6,0x77,0x9B,0xD1,0x17,0x81) -OUR_GUID_ENTRY(CLSID_MediaMultiplexerCategory,0x236C9559,0xADCE,0x4736,0xBF,0x72,0xBA,0xB3,0x4E,0x39,0x21,0x96) -OUR_GUID_ENTRY(CLSID_FilterMapper2,0xcda42200,0xbd88,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_MemoryAllocator,0x1e651cc0,0xb199,0x11d0,0x82,0x12,0x00,0xc0,0x4f,0xc3,0x2c,0x45) -OUR_GUID_ENTRY(CLSID_MediaPropertyBag,0xcdbd8d00,0xc193,0x11d0,0xbd,0x4e,0x0,0xa0,0xc9,0x11,0xce,0x86) -OUR_GUID_ENTRY(CLSID_DvdGraphBuilder,0xFCC152B7,0xF372,0x11d0,0x8E,0x00,0x00,0xC0,0x4F,0xD7,0xC0,0x8B) -OUR_GUID_ENTRY(CLSID_DVDNavigator,0x9b8c4620,0x2c1a,0x11d0,0x84,0x93,0x0,0xa0,0x24,0x38,0xad,0x48) -OUR_GUID_ENTRY(CLSID_DVDState,0xf963c5cf,0xa659,0x4a93,0x96,0x38,0xca,0xf3,0xcd,0x27,0x7d,0x13) -OUR_GUID_ENTRY(CLSID_SmartTee,0xcc58e280,0x8aa1,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5) -OUR_GUID_ENTRY(FORMAT_None,0x0F6417D6,0xc318,0x11d0,0xa4,0x3f,0x00,0xa0,0xc9,0x22,0x31,0x96) -OUR_GUID_ENTRY(FORMAT_VideoInfo,0x05589f80,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(FORMAT_VideoInfo2,0xf72a76A0,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(FORMAT_WaveFormatEx,0x05589f81,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(FORMAT_MPEGVideo,0x05589f82,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(FORMAT_MPEGStreams,0x05589f83,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(FORMAT_DvInfo,0x05589f84,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_DirectDrawProperties,0x944d4c00,0xdd52,0x11ce,0xbf,0x0e,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(CLSID_PerformanceProperties,0x59ce6880,0xacf8,0x11cf,0xb5,0x6e,0x00,0x80,0xc7,0xc4,0xb6,0x8a) -OUR_GUID_ENTRY(CLSID_QualityProperties,0x418afb70,0xf8b8,0x11ce,0xaa,0xc6,0x00,0x20,0xaf,0x0b,0x99,0xa3) -OUR_GUID_ENTRY(IID_IBaseVideoMixer,0x61ded640,0xe912,0x11ce,0xa0,0x99,0x00,0xaa,0x00,0x47,0x9a,0x58) -OUR_GUID_ENTRY(IID_IDirectDrawVideo,0x36d39eb0,0xdd75,0x11ce,0xbf,0x0e,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(IID_IQualProp,0x1bd0ecb0,0xf8e2,0x11ce,0xaa,0xc6,0x00,0x20,0xaf,0x0b,0x99,0xa3) -OUR_GUID_ENTRY(CLSID_VPObject,0xce292861,0xfc88,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IVPObject,0xce292862,0xfc88,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IVPControl,0x25df12c1,0x3de0,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(CLSID_VPVBIObject,0x814b9801,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(IID_IVPVBIObject,0x814b9802,0x1c88,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(IID_IVPConfig,0xbc29a660,0x30e3,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IVPNotify,0xc76794a1,0xd6c5,0x11d0,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IVPNotify2,0xebf47183,0x8764,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IVPVBIConfig,0xec529b00,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(IID_IVPVBINotify,0xec529b01,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a) -OUR_GUID_ENTRY(IID_IMixerPinConfig,0x593cdde1,0x759,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -OUR_GUID_ENTRY(IID_IMixerPinConfig2,0xebf47182,0x8764,0x11d1,0x9e,0x69,0x0,0xc0,0x4f,0xd7,0xc1,0x5b) -#ifndef __DDRAW_INCLUDED__ -OUR_GUID_ENTRY(CLSID_DirectDraw,0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35) -OUR_GUID_ENTRY(CLSID_DirectDrawClipper,0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56) -OUR_GUID_ENTRY(IID_IDirectDraw,0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60) -OUR_GUID_ENTRY(IID_IDirectDraw2,0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56) -OUR_GUID_ENTRY(IID_IDirectDrawSurface,0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60) -OUR_GUID_ENTRY(IID_IDirectDrawSurface2,0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27) -OUR_GUID_ENTRY(IID_IDirectDrawSurface3,0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB) -OUR_GUID_ENTRY(IID_IDirectDrawSurface4,0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B) -OUR_GUID_ENTRY(IID_IDirectDrawSurface7,0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b) -OUR_GUID_ENTRY(IID_IDirectDrawPalette,0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60) -OUR_GUID_ENTRY(IID_IDirectDrawClipper,0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60) -OUR_GUID_ENTRY(IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8) -#endif -#ifndef __DVP_INCLUDED__ -OUR_GUID_ENTRY(IID_IDDVideoPortContainer,0x6C142760,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60) -#endif -#ifndef __DDKM_INCLUDED__ -OUR_GUID_ENTRY(IID_IDirectDrawKernel,0x8D56C120,0x6A08,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8) -OUR_GUID_ENTRY(IID_IDirectDrawSurfaceKernel,0x60755DA0,0x6A40,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8) -#endif -OUR_GUID_ENTRY(CLSID_ModexProperties,0x0618aa30,0x6bc4,0x11cf,0xbf,0x36,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(IID_IFullScreenVideo,0xdd1d7110,0x7836,0x11cf,0xbf,0x47,0x00,0xaa,0x00,0x55,0x59,0x5a) -OUR_GUID_ENTRY(IID_IFullScreenVideoEx,0x53479470,0xf1dd,0x11cf,0xbc,0x42,0x00,0xaa,0x00,0xac,0x74,0xf6) -OUR_GUID_ENTRY(CLSID_DVDecPropertiesPage,0x101193c0,0xbfe,0x11d0,0xaf,0x91,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_DVEncPropertiesPage,0x4150f050,0xbb6f,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(CLSID_DVMuxPropertyPage,0x4db880e0,0xc10d,0x11d0,0xaf,0xb9,0x0,0xaa,0x0,0xb6,0x7a,0x42) -OUR_GUID_ENTRY(IID_IAMDirectSound,0x546f4260,0xd53e,0x11cf,0xb3,0xf0,0x0,0xaa,0x0,0x37,0x61,0xc5) -OUR_GUID_ENTRY(IID_IMpegAudioDecoder,0xb45dd570,0x3c77,0x11d1,0xab,0xe1,0x00,0xa0,0xc9,0x05,0xf3,0x75) -OUR_GUID_ENTRY(IID_IAMLine21Decoder,0x6e8d4a21,0x310c,0x11d0,0xb7,0x9a,0x0,0xaa,0x0,0x37,0x67,0xa7) -OUR_GUID_ENTRY(IID_IAMWstDecoder,0xc056de21,0x75c2,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33) -OUR_GUID_ENTRY(CLSID_WstDecoderPropertyPage,0x4e27f80,0x91e4,0x11d3,0xa1,0x84,0x0,0x10,0x5a,0xef,0x9f,0x33) -OUR_GUID_ENTRY(FORMAT_AnalogVideo,0x482dde0,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIATYPE_AnalogVideo,0x482dde1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M,0x482dde2,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B,0x482dde5,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D,0x482dde6,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G,0x482dde7,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H,0x482dde8,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I,0x482dde9,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M,0x482ddea,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N,0x482ddeb,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N_COMBO,0x482ddec,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B,0x482ddf0,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D,0x482ddf1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G,0x482ddf2,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H,0x482ddf3,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K,0x482ddf4,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1,0x482ddf5,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L,0x482ddf6,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(MEDIATYPE_AnalogAudio,0x482dee1,0x7817,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) - -#include "dshow/ksuuids.h" - -OUR_GUID_ENTRY(TIME_FORMAT_NONE,0L,0,0,0,0,0,0,0,0,0,0) -OUR_GUID_ENTRY(TIME_FORMAT_FRAME,0x7b785570,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6) -OUR_GUID_ENTRY(TIME_FORMAT_BYTE,0x7b785571,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6) -OUR_GUID_ENTRY(TIME_FORMAT_SAMPLE,0x7b785572,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6) -OUR_GUID_ENTRY(TIME_FORMAT_FIELD,0x7b785573,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6) -OUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME,0x7b785574,0x8c82,0x11cf,0xbc,0xc,0x0,0xaa,0x0,0xac,0x74,0xf6) -OUR_GUID_ENTRY(AMPROPSETID_Pin,0x9b00f101,0x1567,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5) -OUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE,0xfb6c4281,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW,0xfb6c4282,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN,0xfb6c4283,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_VBI,0xfb6c4284,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT,0xfb6c4285,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_NABTS,0xfb6c4286,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_EDS,0xfb6c4287,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT,0xfb6c4288,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_CC,0xfb6c4289,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_STILL,0xfb6c428a,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE,0xfb6c428b,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI,0xfb6c428c,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba) -OUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY,0xac798be0,0x98e3,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5) -OUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY,0xac798be1,0x98e3,0x11d1,0xb3,0xf1,0x0,0xaa,0x0,0x37,0x61,0xc5) -OUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage,0x266eee41,0x6c63,0x11cf,0x8a,0x3,0x0,0xaa,0x0,0x6e,0xcb,0x65) -OUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage,0x71f96461,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage,0x71f96463,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage,0x71f96464,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_CameraControlPropertyPage,0x71f96465,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage,0x71f96466,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage,0x71f96467,0x78f3,0x11d0,0xa1,0x8c,0x0,0xa0,0xc9,0x11,0x89,0x56) -OUR_GUID_ENTRY(CLSID_AudioRendererAdvancedProperties,0x37e92a92,0xd9aa,0x11d2,0xbf,0x84,0x8e,0xf2,0xb1,0x55,0x5a,0xed) -OUR_GUID_ENTRY(CLSID_VideoMixingRenderer,0xB87BEB7B,0x8D29,0x423f,0xAE,0x4D,0x65,0x82,0xC1,0x01,0x75,0xAC) -OUR_GUID_ENTRY(CLSID_VideoRendererDefault,0x6BC1CFFA,0x8FC1,0x4261,0xAC,0x22,0xCF,0xB4,0xCC,0x38,0xDB,0x50) -OUR_GUID_ENTRY(CLSID_AllocPresenter,0x99d54f63,0x1a69,0x41ae,0xaa,0x4d,0xc9,0x76,0xeb,0x3f,0x07,0x13) -OUR_GUID_ENTRY(CLSID_AllocPresenterDDXclMode,0x4444ac9e,0x242e,0x471b,0xa3,0xc7,0x45,0xdc,0xd4,0x63,0x52,0xbc) -OUR_GUID_ENTRY(CLSID_VideoPortManager,0x6f26a6cd,0x967b,0x47fd,0x87,0x4a,0x7a,0xed,0x2c,0x9d,0x25,0xa2) -OUR_GUID_ENTRY(CLSID_VideoMixingRenderer9,0x51b4abf3,0x748f,0x4e3b,0xa2,0x76,0xc8,0x28,0x33,0x0e,0x92,0x6a) -OUR_GUID_ENTRY(CLSID_ATSCNetworkProvider,0x0dad2fdd,0x5fd7,0x11d3,0x8f,0x50,0x00,0xc0,0x4f,0x79,0x71,0xe2) -OUR_GUID_ENTRY(CLSID_ATSCNetworkPropertyPage,0xe3444d16,0x5ac4,0x4386,0x88,0xdf,0x13,0xfd,0x23,0x0e,0x1d,0xda) -OUR_GUID_ENTRY(CLSID_DVBSNetworkProvider,0xfa4b375a,0x45b4,0x4d45,0x84,0x40,0x26,0x39,0x57,0xb1,0x16,0x23) -OUR_GUID_ENTRY(CLSID_DVBTNetworkProvider,0x216c62df,0x6d7f,0x4e9a,0x85,0x71,0x5,0xf1,0x4e,0xdb,0x76,0x6a) -OUR_GUID_ENTRY(CLSID_DVBCNetworkProvider,0xdc0c0fe7,0x485,0x4266,0xb9,0x3f,0x68,0xfb,0xf8,0xe,0xd8,0x34) -OUR_GUID_ENTRY(CLSID_DShowTVEFilter,0x05500280,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8) -OUR_GUID_ENTRY(CLSID_TVEFilterTuneProperties,0x05500281,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8) -OUR_GUID_ENTRY(CLSID_TVEFilterCCProperties,0x05500282,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8) -OUR_GUID_ENTRY(CLSID_TVEFilterStatsProperties,0x05500283,0xFAA5,0x4DF9,0x82,0x46,0xBF,0xC2,0x3A,0xC5,0xCE,0xA8) -OUR_GUID_ENTRY(CLSID_IVideoEncoderProxy,0xb43c4eec,0x8c32,0x4791,0x91,0x2,0x50,0x8a,0xda,0x5e,0xe8,0xe7) -OUR_GUID_ENTRY(CLSID_ICodecAPIProxy,0x7ff0997a,0x1999,0x4286,0xa7,0x3c,0x62,0x2b,0x88,0x14,0xe7,0xeb) -OUR_GUID_ENTRY(CLSID_IVideoEncoderCodecAPIProxy,0xb05dabd9,0x56e5,0x4fdc,0xaf,0xa4,0x8a,0x47,0xe9,0x1f,0x1c,0x9c) - -#ifndef __ENCODER_API_GUIDS__ -#define __ENCODER_API_GUIDS__ -OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE,0x49cc4c43,0xca83,0x4ad4,0xa9,0xaf,0xf3,0x69,0x6a,0xf6,0x66,0xdf) -OUR_GUID_ENTRY(ENCAPIPARAM_PEAK_BITRATE,0x703f16a9,0x3d48,0x44a1,0xb0,0x77,0x1,0x8d,0xff,0x91,0x5d,0x19) -OUR_GUID_ENTRY(ENCAPIPARAM_BITRATE_MODE,0xee5fb25c,0xc713,0x40d1,0x9d,0x58,0xc0,0xd7,0x24,0x1e,0x25,0xf) -OUR_GUID_ENTRY(CODECAPI_CHANGELISTS,0x62b12acf,0xf6b0,0x47d9,0x94,0x56,0x96,0xf2,0x2c,0x4e,0x0b,0x9d) -OUR_GUID_ENTRY(CODECAPI_VIDEO_ENCODER,0x7112e8e1,0x3d03,0x47ef,0x8e,0x60,0x03,0xf1,0xcf,0x53,0x73,0x01) -OUR_GUID_ENTRY(CODECAPI_AUDIO_ENCODER,0xb9d19a3e,0xf897,0x429c,0xbc,0x46,0x81,0x38,0xb7,0x27,0x2b,0x2d) -OUR_GUID_ENTRY(CODECAPI_SETALLDEFAULTS,0x6c5e6a7c,0xacf8,0x4f55,0xa9,0x99,0x1a,0x62,0x81,0x09,0x05,0x1b) -OUR_GUID_ENTRY(CODECAPI_ALLSETTINGS,0x6a577e92,0x83e1,0x4113,0xad,0xc2,0x4f,0xce,0xc3,0x2f,0x83,0xa1) -OUR_GUID_ENTRY(CODECAPI_SUPPORTSEVENTS,0x0581af97,0x7693,0x4dbd,0x9d,0xca,0x3f,0x9e,0xbd,0x65,0x85,0xa1) -OUR_GUID_ENTRY(CODECAPI_CURRENTCHANGELIST,0x1cb14e83,0x7d72,0x4657,0x83,0xfd,0x47,0xa2,0xc5,0xb9,0xd1,0x3d) -#endif - -#undef OUR_GUID_ENTRY diff --git a/3rdparty/include/ffmpeg_/libavcodec/avcodec.h b/3rdparty/include/ffmpeg_/libavcodec/avcodec.h deleted file mode 100644 index f0ccfee..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/avcodec.h +++ /dev/null @@ -1,4863 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include -#include "libavutil/samplefmt.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/cpu.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "libavcodec/version.h" -/** - * @defgroup libavc Encoding/Decoding Library - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - * - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of a existing codec ID changes (that would break ABI), - * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec. - * This ensures that 2 forks can independently add AVCodecIDs without producing conflicts. - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_MPEG2VIDEO_XVMC, - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, - AV_CODEC_ID_IFF_BYTERUN1, - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, - AV_CODEC_ID_V410, - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130_DEPRECATED, - AV_CODEC_ID_G2M_DEPRECATED, - - AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'), - AV_CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), - AV_CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), - AV_CODEC_ID_EXR = MKBETAG('0','E','X','R'), - AV_CODEC_ID_AVRP = MKBETAG('A','V','R','P'), - - AV_CODEC_ID_012V = MKBETAG('0','1','2','V'), - AV_CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), - AV_CODEC_ID_AVUI = MKBETAG('A','V','U','I'), - AV_CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), - AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'), - AV_CODEC_ID_V308 = MKBETAG('V','3','0','8'), - AV_CODEC_ID_V408 = MKBETAG('V','4','0','8'), - AV_CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), - AV_CODEC_ID_SANM = MKBETAG('S','A','N','M'), - AV_CODEC_ID_PAF_VIDEO = MKBETAG('P','A','F','V'), - AV_CODEC_ID_AVRN = MKBETAG('A','V','R','n'), - AV_CODEC_ID_CPIA = MKBETAG('C','P','I','A'), - AV_CODEC_ID_XFACE = MKBETAG('X','F','A','C'), - AV_CODEC_ID_SGIRLE = MKBETAG('S','G','I','R'), - AV_CODEC_ID_MVC1 = MKBETAG('M','V','C','1'), - AV_CODEC_ID_MVC2 = MKBETAG('M','V','C','2'), - AV_CODEC_ID_SNOW = MKBETAG('S','N','O','W'), - AV_CODEC_ID_WEBP = MKBETAG('W','E','B','P'), - AV_CODEC_ID_SMVJPEG = MKBETAG('S','M','V','J'), - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR = MKBETAG(24,'P','S','P'), - AV_CODEC_ID_PCM_S32LE_PLANAR = MKBETAG(32,'P','S','P'), - AV_CODEC_ID_PCM_S16BE_PLANAR = MKBETAG('P','S','P',16), - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_VIMA = MKBETAG('V','I','M','A'), - AV_CODEC_ID_ADPCM_AFC = MKBETAG('A','F','C',' '), - AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '), - AV_CODEC_ID_ADPCM_DTK = MKBETAG('D','T','K',' '), - AV_CODEC_ID_ADPCM_IMA_RAD = MKBETAG('R','A','D',' '), - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_VOXWARE, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS_DEPRECATED, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK_DEPRECATED, - AV_CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), - AV_CODEC_ID_SONIC = MKBETAG('S','O','N','C'), - AV_CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), - AV_CODEC_ID_PAF_AUDIO = MKBETAG('P','A','F','A'), - AV_CODEC_ID_OPUS = MKBETAG('O','P','U','S'), - AV_CODEC_ID_TAK = MKBETAG('t','B','a','K'), - AV_CODEC_ID_EVRC = MKBETAG('s','e','v','c'), - AV_CODEC_ID_SMV = MKBETAG('s','s','m','v'), - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - AV_CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), - AV_CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), - AV_CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), - AV_CODEC_ID_SAMI = MKBETAG('S','A','M','I'), - AV_CODEC_ID_REALTEXT = MKBETAG('R','T','X','T'), - AV_CODEC_ID_SUBVIEWER1 = MKBETAG('S','b','V','1'), - AV_CODEC_ID_SUBVIEWER = MKBETAG('S','u','b','V'), - AV_CODEC_ID_SUBRIP = MKBETAG('S','R','i','p'), - AV_CODEC_ID_WEBVTT = MKBETAG('W','V','T','T'), - AV_CODEC_ID_MPL2 = MKBETAG('M','P','L','2'), - AV_CODEC_ID_VPLAYER = MKBETAG('V','P','l','r'), - AV_CODEC_ID_PJS = MKBETAG('P','h','J','S'), - AV_CODEC_ID_ASS = MKBETAG('A','S','S',' '), ///< ASS as defined in Matroska - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - AV_CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), - AV_CODEC_ID_XBIN = MKBETAG('X','B','I','N'), - AV_CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), - AV_CODEC_ID_OTF = MKBETAG( 0 ,'O','T','F'), - AV_CODEC_ID_SMPTE_KLV = MKBETAG('K','L','V','A'), - AV_CODEC_ID_DVD_NAV = MKBETAG('D','N','A','V'), - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - -#if FF_API_CODEC_ID -#include "old_codec_ids.h" -#endif -}; - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_get_descriptor() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
          - * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define FF_INPUT_BUFFER_PADDING_SIZE 16 - -/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. - */ -#define FF_MIN_BUFFER_SIZE 16384 - - -/** - * @ingroup lavc_encoding - * motion estimation type. - */ -enum Motion_Est_ID { - ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed - ME_FULL, - ME_LOG, - ME_PHODS, - ME_EPZS, ///< enhanced predictive zonal search - ME_X1, ///< reserved for experiments - ME_HEX, ///< hexagon based search - ME_UMH, ///< uneven multi-hexagon search - ME_TESA, ///< transformed exhaustive search algorithm - ME_ITER=50, ///< iterative search -}; - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVColorPrimaries{ - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_BT470M = 4, - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above - AVCOL_PRI_FILM = 8, - AVCOL_PRI_NB , ///< Not part of ABI -}; - -enum AVColorTransferCharacteristic{ - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_NB , ///< Not part of ABI -}; - -enum AVColorSpace{ - AVCOL_SPC_RGB = 0, - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_FCC = 4, - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above - AVCOL_SPC_SMPTE240M = 7, - AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_NB , ///< Not part of ABI -}; -#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG - -enum AVColorRange{ - AVCOL_RANGE_UNSPECIFIED = 0, - AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges - AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges - AVCOL_RANGE_NB , ///< Not part of ABI -}; - -/** - * X X 3 4 X X are luma samples, - * 1 2 1-6 are possible chroma positions - * X X 5 6 X 0 is undefined/unknown position - */ -enum AVChromaLocation{ - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default - AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263 - AVCHROMA_LOC_TOPLEFT = 3, ///< DV - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB , ///< Not part of ABI -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -#define FF_MAX_B_FRAMES 16 - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define CODEC_FLAG_UNALIGNED 0x0001 -#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale. -#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263. -#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC. -#define CODEC_FLAG_GMC 0x0020 ///< Use GMC. -#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>. -/** - * The parent program guarantees that the input for B-frames containing - * streams is not written to for at least s->max_b_frames+1 frames, if - * this is not set the input will be copied. - */ -#define CODEC_FLAG_INPUT_PRESERVED 0x0100 -#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode. -#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode. -#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale. -#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges. -#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding. -#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random - location instead of only at frame boundaries. */ -#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization. -#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT. -#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay. -#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe. -#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT). -/* Fx : Flag for h263+ extra options */ -#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction -#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter -#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation -#define CODEC_FLAG_CLOSED_GOP 0x80000000 -#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks. -#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding. -#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata. -#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!! -#define CODEC_FLAG2_IGNORE_CROP 0x00010000 ///< Discard cropping information from SPS. - -#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. -#define CODEC_FLAG2_SHOW_ALL 0x00400000 ///< Show all frames before the first keyframe - -/* Unsupported options : - * Syntax Arithmetic coding (SAC) - * Reference Picture Selection - * Independent Segment Decoding */ -/* /Fx */ -/* codec capabilities */ - -#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback. -/** - * Codec uses get_buffer() for allocating buffers and supports custom allocators. - * If not set, it might not use get_buffer() at all or use operations that - * assume the buffer was allocated by avcodec_default_get_buffer. - */ -#define CODEC_CAP_DR1 0x0002 -#define CODEC_CAP_TRUNCATED 0x0008 -/* Codec can export data for HW decoding (XvMC). */ -#define CODEC_CAP_HWACCEL 0x0010 -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define CODEC_CAP_DELAY 0x0020 -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define CODEC_CAP_SMALL_LAST_FRAME 0x0040 -/** - * Codec can export data for HW decoding (VDPAU). - */ -#define CODEC_CAP_HWACCEL_VDPAU 0x0080 -/** - * Codec can output multiple frames per AVPacket - * Normally demuxers return one frame at a time, demuxers which do not do - * are connected to a parser to split what they return into proper frames. - * This flag is reserved to the very rare category of codecs which have a - * bitstream that cannot be split into frames without timeconsuming - * operations like full decoding. Demuxers carring such bitstreams thus - * may return multiple frames in a packet. This has many disadvantages like - * prohibiting stream copy in many cases thus it should only be considered - * as a last resort. - */ -#define CODEC_CAP_SUBFRAMES 0x0100 -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define CODEC_CAP_EXPERIMENTAL 0x0200 -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define CODEC_CAP_CHANNEL_CONF 0x0400 - -/** - * Codec is able to deal with negative linesizes - */ -#define CODEC_CAP_NEG_LINESIZES 0x0800 - -/** - * Codec supports frame-level multithreading. - */ -#define CODEC_CAP_FRAME_THREADS 0x1000 -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define CODEC_CAP_SLICE_THREADS 0x2000 -/** - * Codec supports changed parameters at any point. - */ -#define CODEC_CAP_PARAM_CHANGE 0x4000 -/** - * Codec supports avctx->thread_count == 0 (auto). - */ -#define CODEC_CAP_AUTO_THREADS 0x8000 -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000 -/** - * Codec is intra only. - */ -#define CODEC_CAP_INTRA_ONLY 0x40000000 -/** - * Codec is lossless. - */ -#define CODEC_CAP_LOSSLESS 0x80000000 - -//The following defines may change, don't expect compatibility if you use them. -#define MB_TYPE_INTRA4x4 0x0001 -#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific -#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific -#define MB_TYPE_16x16 0x0008 -#define MB_TYPE_16x8 0x0010 -#define MB_TYPE_8x16 0x0020 -#define MB_TYPE_8x8 0x0040 -#define MB_TYPE_INTERLACED 0x0080 -#define MB_TYPE_DIRECT2 0x0100 //FIXME -#define MB_TYPE_ACPRED 0x0200 -#define MB_TYPE_GMC 0x0400 -#define MB_TYPE_SKIP 0x0800 -#define MB_TYPE_P0L0 0x1000 -#define MB_TYPE_P1L0 0x2000 -#define MB_TYPE_P0L1 0x4000 -#define MB_TYPE_P1L1 0x8000 -#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0) -#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1) -#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1) -#define MB_TYPE_QUANT 0x00010000 -#define MB_TYPE_CBP 0x00020000 -//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan{ - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -}AVPanScan; - -#define FF_QSCALE_TYPE_MPEG1 0 -#define FF_QSCALE_TYPE_MPEG2 1 -#define FF_QSCALE_TYPE_H264 2 -#define FF_QSCALE_TYPE_VP56 3 - -#if FF_API_GET_BUFFER -#define FF_BUFFER_TYPE_INTERNAL 1 -#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user) -#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared. -#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything. - -#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore). -#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer. -#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content. -#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update). -#endif - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ -enum AVPacketSideDataType { - AV_PKT_DATA_PALETTE, - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) - * s32le channel_count - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) - * u64le channel_layout - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * Recommmends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES=70, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=mail/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, -}; - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. - * - * AVPacket is one of the few structs in FFmpeg, whose size is a part of public - * ABI. Thus it may be allocated on stack and no new fields can be added to it - * without libavcodec and libavformat major bump. - * - * The semantics of data ownership depends on the buf or destruct (deprecated) - * fields. If either is set, the packet data is dynamically allocated and is - * valid indefinitely until av_free_packet() is called (which in turn calls - * av_buffer_unref()/the destruct callback to free the data). If neither is set, - * the packet data is typically backed by some static buffer somewhere and is - * only valid for a limited time (e.g. until the next read call when demuxing). - * - * The side data is always allocated with av_malloc() and is freed in - * av_free_packet(). - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - struct { - uint8_t *data; - int size; - enum AVPacketSideDataType type; - } *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int duration; -#if FF_API_DESTRUCT_PACKET - attribute_deprecated - void (*destruct)(struct AVPacket *); - attribute_deprecated - void *priv; -#endif - int64_t pos; ///< byte position in stream, -1 if unknown - - /** - * Time difference in AVStream->time_base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field is not the display duration of the current packet. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. - */ - int64_t convergence_duration; -} AVPacket; -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; -/** - * @} - */ - -struct AVCodecInternal; - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, //< Top coded_first, top displayed first - AV_FIELD_BB, //< Bottom coded first, bottom displayed first - AV_FIELD_TB, //< Top coded first, bottom displayed first - AV_FIELD_BT, //< Bottom coded first, top displayed first -}; - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - char codec_name[32]; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - /** - * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * - encoding: unused - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int stream_codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream. - */ - int bit_rate; - - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - /** - * CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * some codecs need / can use extradata like Huffman tables. - * mjpeg: Huffman tables - * rv10: additional flags - * mpeg4: global headers (they can be in the bitstream or here) - * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger - * than extradata_size to avoid problems if it is read with the bitstream reader. - * The bytewise contents of extradata must not depend on the architecture or CPU endianness. - * - encoding: Set/allocated/freed by libavcodec. - * - decoding: Set/allocated/freed by user. - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * - encoding: MUST be set by user. - * - decoding: Set by libavcodec. - */ - AVRational time_base; - - /** - * For some codecs, the time base is closer to the field rate than the frame rate. - * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration - * if no telecine is used ... - * - * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. - */ - int ticks_per_frame; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this is the number of "priming" samples added to the - * beginning of the stream. The decoded output will be delayed by this - * many samples relative to the input to the encoder. Note that this - * field is purely informational and does not directly affect the pts - * output by the encoder, which should always be based on the actual - * presentation time, including any delay. - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required. - */ - int coded_width, coded_height; - -#define FF_ASPECT_EXTENDED 15 - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec if known - */ - enum AVPixelFormat pix_fmt; - - /** - * Motion estimation algorithm used for video coding. - * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), - * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] - * - encoding: MUST be set by user. - * - decoding: unused - */ - int me_method; - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * callback to negotiate the pixelFormat - * @param fmt is the list of formats which are supported by the codec, - * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. - * The first is always the native one. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - - /** obsolete FIXME remove */ - int rc_strategy; -#define FF_RC_STRATEGY_XVID 1 - - int b_frame_strategy; - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - - /** - * 0-> h263 quant 1-> mpeg quant - * - encoding: Set by user. - * - decoding: unused - */ - int mpeg_quant; - - /** - * qscale factor between P and I-frames - * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - */ - int slice_count; - /** - * prediction method (needed for huffyuv) - * - encoding: Set by user. - * - decoding: unused - */ - int prediction_method; -#define FF_PRED_LEFT 0 -#define FF_PRED_PLANE 1 -#define FF_PRED_MEDIAN 2 - - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). - */ - int *slice_offset; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - - /** - * prepass for motion estimation - * - encoding: Set by user. - * - decoding: unused - */ - int pre_me; - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * DTG active format information (additional aspect ratio - * information only used in DVB MPEG-2 transport streams) - * 0 if not set. - * - * - encoding: unused - * - decoding: Set by decoder. - */ - int dtg_active_format; -#define FF_DTG_AFD_SAME 8 -#define FF_DTG_AFD_4_3 9 -#define FF_DTG_AFD_16_9 10 -#define FF_DTG_AFD_14_9 11 -#define FF_DTG_AFD_4_3_SP_14_9 13 -#define FF_DTG_AFD_16_9_SP_14_9 14 -#define FF_DTG_AFD_SP_4_3 15 - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * intra quantizer bias - * - encoding: Set by user. - * - decoding: unused - */ - int intra_quant_bias; -#define FF_DEFAULT_QUANT_BIAS 999999 - - /** - * inter quantizer bias - * - encoding: Set by user. - * - decoding: unused - */ - int inter_quant_bias; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * XVideo Motion Acceleration - * - encoding: forbidden - * - decoding: set by decoder - */ - int xvmc_acceleration; - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. - */ - uint16_t *inter_matrix; - - /** - * scene change detection threshold - * 0 is default, larger means fewer detected scene changes. - * - encoding: Set by user. - * - decoding: unused - */ - int scenechange_threshold; - - /** - * noise reduction strength - * - encoding: Set by user. - * - decoding: unused - */ - int noise_reduction; - - /** - * Motion estimation threshold below which no motion estimation is - * performed, but instead the user specified motion vectors are used. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_threshold; - - /** - * Macroblock threshold below which the user specified macroblock types will be used. - * - encoding: Set by user. - * - decoding: unused - */ - int mb_threshold; - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: unused - */ - int intra_dc_precision; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * Border processing masking, raises the quantizer for mbs on the borders - * of the picture. - * - encoding: Set by user. - * - decoding: unused - */ - float border_masking; - - /** - * minimum MB lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_penalty_compensation; - - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - - /** - * - * - encoding: Set by user. - * - decoding: unused - */ - int brd_scale; - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - - /** - * chroma qp offset from luma - * - encoding: Set by user. - * - decoding: unused - */ - int chromaoffset; - - /** - * Multiplied by qscale for each frame and added to scene_change_score. - * - encoding: Set by user. - * - decoding: unused - */ - int scenechange_factor; - - /** - * - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - - /** - * Adjust sensitivity of b_frame_strategy 1. - * - encoding: Set by user. - * - decoding: unused - */ - int b_sensitivity; - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /* audio only */ - int sample_rate; ///< samples per second - int channels; ///< number of audio channels - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int frame_number; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - -#if FF_API_REQUEST_CHANNELS - /** - * Decoder should decode to this many channels if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - * @deprecated Deprecated in favor of request_channel_layout. - */ - int request_channels; -#endif - - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. - */ - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - */ - uint64_t request_channel_layout; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - -#if FF_API_GET_BUFFER - /** - * Called at the beginning of each frame to get a buffer for it. - * - * The function will set AVFrame.data[], AVFrame.linesize[]. - * AVFrame.extended_data[] must also be set, but it should be the same as - * AVFrame.data[] except for planar audio with more channels than can fit - * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as - * many data pointers as it can hold. - * - * if CODEC_CAP_DR1 is not set then get_buffer() must call - * avcodec_default_get_buffer() instead of providing buffers allocated by - * some other means. - * - * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't - * need it. avcodec_default_get_buffer() aligns the output buffer properly, - * but if get_buffer() is overridden then alignment considerations should - * be taken into account. - * - * @see avcodec_default_get_buffer() - * - * Video: - * - * If pic.reference is set then the frame will be read later by libavcodec. - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * If frame multithreading is used and thread_safe_callbacks is set, - * it may be called from a different thread, but not from more than one at - * once. Does not need to be reentrant. - * - * @see release_buffer(), reget_buffer() - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * Decoders cannot use the buffer after returning from - * avcodec_decode_audio4(), so they will not call release_buffer(), as it - * is assumed to be released immediately upon return. In some rare cases, - * a decoder may need to call get_buffer() more than once in a single - * call to avcodec_decode_audio4(). In that case, when get_buffer() is - * called again after it has already been called once, the previously - * acquired buffer is assumed to be released at that time and may not be - * reused by the decoder. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - * - * @deprecated use get_buffer2() - */ - attribute_deprecated - int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); - - /** - * Called to release buffers which were allocated with get_buffer. - * A released buffer can be reused in get_buffer(). - * pic.data[*] must be set to NULL. - * May be called from a different thread if frame multithreading is used, - * but not by more than one thread at once, so does not need to be reentrant. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - * - * @deprecated custom freeing callbacks should be set from get_buffer2() - */ - attribute_deprecated - void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); - - /** - * Called at the beginning of a frame to get cr buffer for it. - * Buffer type (size, hints) must be the same. libavcodec won't check it. - * libavcodec will pass previous buffer in pic, function should return - * same buffer or new buffer with old frame "painted" into it. - * If pic.data[0] == NULL must behave like get_buffer(). - * if CODEC_CAP_DR1 is not set then reget_buffer() must call - * avcodec_default_reget_buffer() instead of providing buffers allocated by - * some other means. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - attribute_deprecated - int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic); -#endif - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise exended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * - * If CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * If CODEC_FLAG_EMU_EDGE is not set in s->flags, the buffer must contain an - * edge of the size returned by avcodec_get_edge_width() on all sides. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * If frame multithreading is used and thread_safe_callbacks is set, - * this callback may be called from a different thread, but not from more - * than one at once. Does not need to be reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - - /** - * If non-zero, the decoded audio and video frames returned from - * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted - * and are valid indefinitely. The caller must free them with - * av_frame_unref() when they are not needed anymore. - * Otherwise, the decoded frames must not be freed by the caller and are - * only valid until the next decode call. - * - * - encoding: unused - * - decoding: set by the caller before avcodec_open2(). - */ - int refcounted_frames; - - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * ratecontrol qmin qmax limiting method - * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax. - * - encoding: Set by user. - * - decoding: unused - */ - float rc_qsquish; - - float rc_qmod_amp; - int rc_qmod_freq; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: unused - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * rate control equation - * - encoding: Set by user - * - decoding: unused - */ - const char *rc_eq; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int rc_min_rate; - - float rc_buffer_aggressivity; - - /** - * initial complexity for pass1 ratecontrol - * - encoding: Set by user. - * - decoding: unused - */ - float rc_initial_cplx; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - -#define FF_CODER_TYPE_VLC 0 -#define FF_CODER_TYPE_AC 1 -#define FF_CODER_TYPE_RAW 2 -#define FF_CODER_TYPE_RLE 3 -#define FF_CODER_TYPE_DEFLATE 4 - /** - * coder type - * - encoding: Set by user. - * - decoding: unused - */ - int coder_type; - - /** - * context model - * - encoding: Set by user. - * - decoding: unused - */ - int context_model; - - /** - * minimum Lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int lmin; - - /** - * maximum Lagrange multipler - * - encoding: Set by user. - * - decoding: unused - */ - int lmax; - - /** - * frame skip threshold - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_threshold; - - /** - * frame skip factor - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_factor; - - /** - * frame skip exponent - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_exp; - - /** - * frame skip comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int frame_skip_cmp; - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int min_prediction_order; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int max_prediction_order; - - /** - * GOP timecode frame start number - * - encoding: Set by user, in non drop frame format - * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) - */ - int64_t timecode_frame_start; - - /* The RTP callback: This function is called */ - /* every time the encoder has a packet to send. */ - /* It depends on the encoder if the data starts */ - /* with a Start Code (it should). H.263 does. */ - /* mb_nb contains the number of macroblocks */ - /* encoded in the RTP payload. */ - void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); - - int rtp_payload_size; /* The size of the RTP payload: the coder will */ - /* do its best to deliver a chunk with size */ - /* below rtp_payload_size, the chunk will start */ - /* with a start code on some codecs like H.263. */ - /* This doesn't take account of any particular */ - /* headers inside the transmitted RTP payload. */ - - /* statistics, used for 2-pass encoding */ - int mv_bits; - int header_bits; - int i_tex_bits; - int p_tex_bits; - int i_count; - int p_count; - int skip_count; - int misc_bits; - - /** - * number of bits used for the previously encoded frame - * - encoding: Set by libavcodec. - * - decoding: unused - */ - int frame_bits; - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_OLD_MSMPEG4 2 -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default. -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 - - /** - * strictly follow the standard (MPEG4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - */ - int strict_std_compliance; -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_MV 32 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_PTS 0x00000200 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_VIS_QP 0x00002000 -#define FF_DEBUG_VIS_MB_TYPE 0x00004000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug_mv; -#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames -#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames -#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * - encoding: unused - * - decoding: Set by user. - */ - int err_recognition; -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) -#define AV_EF_BUFFER (1<<2) -#define AV_EF_EXPLODE (1<<3) - -#define AV_EF_CAREFUL (1<<16) -#define AV_EF_COMPLIANT (1<<17) -#define AV_EF_AGGRESSIVE (1<<18) - - - /** - * opaque 64bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * @deprecated in favor of pkt_pts - * - encoding: unused - * - decoding: Set by user. - */ - int64_t reordered_opaque; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - struct AVHWAccel *hwaccel; - - /** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - */ - void *hwaccel_context; - - /** - * error - * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SH4 9 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_IPP 13 -#define FF_IDCT_XVIDMMX 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_SIMPLEVIS 18 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_SIMPLEALPHA 23 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - -#if FF_API_LOWRES - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_lowres(avctx) - */ - int lowres; -#endif - - /** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - AVFrame *coded_frame; - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - - /** - * Set by the client if its custom get_buffer() callback can be called - * synchronously from another thread, which allows faster multithreaded decoding. - * draw_horiz_band() will be called from other threads regardless of this setting. - * Ignored if the default get_buffer() is used. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_safe_callbacks; - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * thread opaque - * Can be used by execute() to store some per AVCodecContext stuff. - * - encoding: set by execute() - * - decoding: set by execute() - */ - void *thread_opaque; - - /** - * noise vs. sse weight for the nsse comparsion function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int profile; -#define FF_PROFILE_UNKNOWN -99 -#define FF_PROFILE_RESERVED -100 - -#define FF_PROFILE_AAC_MAIN 0 -#define FF_PROFILE_AAC_LOW 1 -#define FF_PROFILE_AAC_SSR 2 -#define FF_PROFILE_AAC_LTP 3 -#define FF_PROFILE_AAC_HE 4 -#define FF_PROFILE_AAC_HE_V2 28 -#define FF_PROFILE_AAC_LD 22 -#define FF_PROFILE_AAC_ELD 38 -#define FF_PROFILE_MPEG2_AAC_LOW 128 -#define FF_PROFILE_MPEG2_AAC_HE 131 - -#define FF_PROFILE_DTS 20 -#define FF_PROFILE_DTS_ES 30 -#define FF_PROFILE_DTS_96_24 40 -#define FF_PROFILE_DTS_HD_HRA 50 -#define FF_PROFILE_DTS_HD_MA 60 - -#define FF_PROFILE_MPEG2_422 0 -#define FF_PROFILE_MPEG2_HIGH 1 -#define FF_PROFILE_MPEG2_SS 2 -#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -#define FF_PROFILE_MPEG2_MAIN 4 -#define FF_PROFILE_MPEG2_SIMPLE 5 - -#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define FF_PROFILE_H264_BASELINE 66 -#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) -#define FF_PROFILE_H264_MAIN 77 -#define FF_PROFILE_H264_EXTENDED 88 -#define FF_PROFILE_H264_HIGH 100 -#define FF_PROFILE_H264_HIGH_10 110 -#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_HIGH_422 122 -#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_HIGH_444 144 -#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) -#define FF_PROFILE_H264_CAVLC_444 44 - -#define FF_PROFILE_VC1_SIMPLE 0 -#define FF_PROFILE_VC1_MAIN 1 -#define FF_PROFILE_VC1_COMPLEX 2 -#define FF_PROFILE_VC1_ADVANCED 3 - -#define FF_PROFILE_MPEG4_SIMPLE 0 -#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define FF_PROFILE_MPEG4_CORE 2 -#define FF_PROFILE_MPEG4_MAIN 3 -#define FF_PROFILE_MPEG4_N_BIT 4 -#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define FF_PROFILE_MPEG4_HYBRID 8 -#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 0 -#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 1 -#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 2 -#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 - - /** - * level - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int level; -#define FF_LEVEL_UNKNOWN -99 - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - encoding: Set/allocated/freed by user (before avcodec_open2()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) - */ - uint8_t *subtitle_header; - int subtitle_header_size; - - /** - * Simulates errors in the bitstream to test error concealment. - * - encoding: Set by user. - * - decoding: unused - */ - int error_rate; - - /** - * Current packet as passed into the decoder, to avoid having - * to pass the packet into every function. Currently only valid - * inside lavc and get/release_buffer callbacks. - * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts - * - encoding: unused - */ - AVPacket *pkt; - - /** - * VBV delay coded in the last frame (in periods of a 27 MHz clock). - * Used for compliant TS muxing. - * - encoding: Set by libavcodec. - * - decoding: unused. - */ - uint64_t vbv_delay; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_pkt_timebase(avctx) - * - encoding unused. - * - decoding set by user. - */ - AVRational pkt_timebase; - - /** - * AVCodecDescriptor - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_codec_descriptor(avctx) - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const AVCodecDescriptor *codec_descriptor; - -#if !FF_API_LOWRES - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_lowres(avctx) - */ - int lowres; -#endif - - /** - * Current statistics for PTS correction. - * - decoding: maintained and used by libavcodec, not intended to be used by user apps - * - encoding: unused - */ - int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far - int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far - int64_t pts_correction_last_pts; /// PTS of the last frame - int64_t pts_correction_last_dts; /// DTS of the last frame - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv - -} AVCodecContext; - -AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); -void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); - -const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); -void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); - -int av_codec_get_lowres(const AVCodecContext *avctx); -void av_codec_set_lowres(AVCodecContext *avctx, int val); - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -typedef struct AVCodecDefault AVCodecDefault; - -struct AVSubtitle; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see CODEC_CAP_* - */ - int capabilities; - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavcodec and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int priv_data_size; - struct AVCodec *next; - /** - * @name Frame-level threading support functions - * @{ - */ - /** - * If defined, called on thread contexts when they are created. - * If the codec allocates writable tables in init(), re-allocate them here. - * priv_data will be set to a copy of the original. - */ - int (*init_thread_copy)(AVCodecContext *); - /** - * Copy necessary context variables from a previous thread context to the current one. - * If not defined, the next thread will start automatically; otherwise, the codec - * must call ff_thread_finish_setup(). - * - * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. - */ - int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src); - /** @} */ - - /** - * Private codec-specific defaults. - */ - const AVCodecDefault *defaults; - - /** - * Initialize codec static data, called from avcodec_register(). - */ - void (*init_static_data)(struct AVCodec *codec); - - int (*init)(AVCodecContext *); - int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size, - const struct AVSubtitle *sub); - /** - * Encode data to an AVPacket. - * - * @param avctx codec context - * @param avpkt output AVPacket (may contain a user-provided buffer) - * @param[in] frame AVFrame containing the raw data to be encoded - * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a - * non-empty packet was returned in avpkt. - * @return 0 on success, negative error code on failure - */ - int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, - int *got_packet_ptr); - int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); - int (*close)(AVCodecContext *); - /** - * Flush buffers. - * Will be called when seeking - */ - void (*flush)(AVCodecContext *); -} AVCodec; - -/** - * AVHWAccel. - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see FF_HWACCEL_CODEC_CAP_* - */ - int capabilities; - - struct AVHWAccel *next; - - /** - * Called at the beginning of each frame or field picture. - * - * Meaningful frame information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * Note that buf can be NULL along with buf_size set to 0. - * Otherwise, this means the whole frame is available at this point. - * - * @param avctx the codec context - * @param buf the frame data buffer base - * @param buf_size the size of the frame in bytes - * @return zero if successful, a negative value otherwise - */ - int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Callback for each slice. - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. - * - * @param avctx the codec context - * @param buf the slice data buffer base - * @param buf_size the size of the slice in bytes - * @return zero if successful, a negative value otherwise - */ - int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); - - /** - * Called at the end of each frame or field picture. - * - * The whole picture is parsed at this point and can now be sent - * to the hardware accelerator. This function is mandatory. - * - * @param avctx the codec context - * @return zero if successful, a negative value otherwise - */ - int (*end_frame)(AVCodecContext *avctx); - - /** - * Size of HW accelerator private data. - * - * Private data is allocated with av_mallocz() before - * AVCodecContext.get_buffer() and deallocated after - * AVCodecContext.release_buffer(). - */ - int priv_data_size; -} AVHWAccel; - -/** - * @defgroup lavc_picture AVPicture - * - * Functions for working with AVPicture - * @{ - */ - -/** - * four components are given, that's all. - * the last component is alpha - */ -typedef struct AVPicture { - uint8_t *data[AV_NUM_DATA_POINTERS]; - int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line -} AVPicture; - -/** - * @} - */ - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - - /** - * data+linesize for the bitmap of this subtitle. - * can be set for text/ass as well once they where rendered - */ - AVPicture pict; - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -/** - * If c is NULL, returns the first registered codec, - * if c is non-NULL, returns the next registered codec after c, - * or NULL if c is the last one. - */ -AVCodec *av_codec_next(const AVCodec *c); - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -/** - * Register the codec codec and initialize libavcodec. - * - * @warning either this function or avcodec_register_all() must be called - * before any other libavcodec functions. - * - * @see avcodec_register_all() - */ -void avcodec_register(AVCodec *codec); - -/** - * Register all the codecs, parsers and bitstream filters which were enabled at - * configuration time. If you do not call this function you can select exactly - * which formats you want to support, by using the individual registration - * functions. - * - * @see avcodec_register - * @see av_register_codec_parser - * @see av_register_bitstream_filter - */ -void avcodec_register_all(void); - - -#if FF_API_ALLOC_CONTEXT -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct can be deallocated by simply calling av_free(). - * - * @return An AVCodecContext filled with default values or NULL on failure. - * @see avcodec_get_context_defaults - * - * @deprecated use avcodec_alloc_context3() - */ -attribute_deprecated -AVCodecContext *avcodec_alloc_context(void); - -/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! - * we WILL change its arguments and name a few times! */ -attribute_deprecated -AVCodecContext *avcodec_alloc_context2(enum AVMediaType); - -/** - * Set the fields of the given AVCodecContext to default values. - * - * @param s The AVCodecContext of which the fields should be set to default values. - * @deprecated use avcodec_get_context_defaults3 - */ -attribute_deprecated -void avcodec_get_context_defaults(AVCodecContext *s); - -/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! - * we WILL change its arguments and name a few times! */ -attribute_deprecated -void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType); -#endif - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct can be deallocated by calling avcodec_close() on it followed - * by av_free(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - * @see avcodec_get_context_defaults - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Set the fields of the given AVCodecContext to default values corresponding - * to the given codec (defaults may be codec-dependent). - * - * Do not call this function if a non-NULL codec has been passed - * to avcodec_alloc_context3() that allocated this AVCodecContext. - * If codec is non-NULL, it is illegal to call avcodec_open2() with a - * different codec on this AVCodecContext. - */ -int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -/** - * Get the AVClass for AVFrame. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_frame_class(void); - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -/** - * Copy the settings of the source AVCodecContext into the destination - * AVCodecContext. The resulting destination codec context will be - * unopened, i.e. you are required to call avcodec_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - */ -int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using avcodec_free_frame(). - * - * @return An AVFrame filled with default values or NULL on failure. - * @see avcodec_get_frame_defaults - */ -AVFrame *avcodec_alloc_frame(void); - -/** - * Set the fields of the given AVFrame to default values. - * - * @param frame The AVFrame of which the fields should be set to default values. - */ -void avcodec_get_frame_defaults(AVFrame *frame); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. - * - * @param frame frame to be freed. The pointer will be set to NULL. - * - * @warning this function does NOT free the data buffers themselves - * (it does not know how, since they might have been allocated with - * a custom get_buffer()). - */ -void avcodec_free_frame(AVFrame **frame); - -#if FF_API_AVCODEC_OPEN -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated. - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @code - * avcodec_register_all(); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open(context, codec) < 0) - * exit(1); - * @endcode - * - * @param avctx The context which will be set up to use the given codec. - * @param codec The codec to use within the context. - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close - * - * @deprecated use avcodec_open2 - */ -attribute_deprecated -int avcodec_open(AVCodecContext *avctx, AVCodec *codec); -#endif - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * @warning This function is not thread safe! - * - * @code - * avcodec_register_all(); - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * avcodec_get_context_defaults3() for this context, then this - * parameter MUST be either NULL or equal to the previously passed - * codec. - * @param options A dictionary filled with AVCodecContext and codec-private options. - * On return this object will be filled with options that were not found. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_find(). - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Close a given AVCodecContext and free all the data associated with it - * (but not the AVCodecContext itself). - * - * Calling this function on an AVCodecContext that hasn't been opened will free - * the codec-specific data allocated in avcodec_alloc_context3() / - * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will - * do nothing. - */ -int avcodec_close(AVCodecContext *avctx); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_packet - * @{ - */ - -#if FF_API_DESTRUCT_PACKET -/** - * Default packet destructor. - * @deprecated use the AVBuffer API instead - */ -attribute_deprecated -void av_destruct_packet(AVPacket *pkt); -#endif - -/** - * Initialize optional fields of a packet with default values. - * - * Note, this does not touch the data and size members, which have to be - * initialized separately. - * - * @param pkt packet - */ -void av_init_packet(AVPacket *pkt); - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * buf and destruct fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + FF_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -/** - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. - */ -int av_dup_packet(AVPacket *pkt); - -/** - * Copy packet, including contents - * - * @return 0 on success, negative AVERROR on fail - */ -int av_copy_packet(AVPacket *dst, AVPacket *src); - -/** - * Copy packet side data - * - * @return 0 on success, negative AVERROR on fail - */ -int av_copy_packet_side_data(AVPacket *dst, AVPacket *src); - -/** - * Free a packet. - * - * @param pkt packet to free - */ -void av_free_packet(AVPacket *pkt); - -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int size); - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size pointer for side information size to store (optional) - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int *size); - -int av_packet_merge_side_data(AVPacket *pkt); - -int av_packet_split_side_data(AVPacket *pkt); - - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_decoder_by_name(const char *name); - -#if FF_API_GET_BUFFER -attribute_deprecated int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); -attribute_deprecated void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); -attribute_deprecated int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic); -#endif - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * Return the amount of padding in pixels which the get_buffer callback must - * provide around the edge of the image for codecs which do not have the - * CODEC_FLAG_EMU_EDGE flag. - * - * @return Required padding in pixels. - */ -unsigned avcodec_get_edge_width(void); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with CODEC_CAP_DR1 has been opened. - * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased - * according to avcodec_get_edge_width() before. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with CODEC_CAP_DR1 has been opened. - * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased - * according to avcodec_get_edge_width() before. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -#if FF_API_OLD_DECODE_AUDIO -/** - * Wrapper function which calls avcodec_decode_audio4. - * - * @deprecated Use avcodec_decode_audio4 instead. - * - * Decode the audio frame of size avpkt->size from avpkt->data into samples. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. In this case, - * avcodec_decode_audio3 has to be called again with an AVPacket that contains - * the remaining data in order to decode the second frame etc. - * If no frame - * could be outputted, frame_size_ptr is zero. Otherwise, it is the - * decompressed frame size in bytes. - * - * @warning You must set frame_size_ptr to the allocated size of the - * output buffer before calling avcodec_decode_audio3(). - * - * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @warning You must not provide a custom get_buffer() when using - * avcodec_decode_audio3(). Doing so will override it with - * avcodec_default_get_buffer. Use avcodec_decode_audio4() instead, - * which does allow the application to provide a custom get_buffer(). - * - * @note You might have to align the input buffer avpkt->data and output buffer - * samples. The alignment requirements depend on the CPU: On some CPUs it isn't - * necessary at all, on others it won't work at all if not aligned and on others - * it will work but it will have an impact on performance. - * - * In practice, avpkt->data should have 4 byte alignment at minimum and - * samples should be 16 byte aligned unless the CPU doesn't need it - * (AltiVec and SSE do). - * - * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @param avctx the codec context - * @param[out] samples the output buffer, sample type in avctx->sample_fmt - * If the sample format is planar, each channel plane will - * be the same size, with no padding between channels. - * @param[in,out] frame_size_ptr the output buffer size in bytes - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields. - * All decoders are designed to use the least fields possible though. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame data was decompressed (used) from the input AVPacket. - */ -attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples, - int *frame_size_ptr, - AVPacket *avpkt); -#endif - -/** - * Decode the audio frame of size avpkt->size from avpkt->data into frame. - * - * Some decoders may support multiple frames in a single AVPacket. Such - * decoders would then just decode the first frame. In this case, - * avcodec_decode_audio4 has to be called again with an AVPacket containing - * the remaining data in order to decode the second frame, etc... - * Even if no frames are returned, the packet needs to be fed to the decoder - * with remaining data until it is completely consumed or an error occurs. - * - * @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note You might have to align the input buffer. The alignment requirements - * depend on the CPU and the decoder. - * - * @param avctx the codec context - * @param[out] frame The AVFrame in which to store decoded audio samples. - * The decoder will allocate a buffer for the decoded frame by - * calling the AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing the decoder. - * The caller may not write to it. - * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is - * non-zero. - * @param[in] avpkt The input AVPacket containing the input buffer. - * At least avpkt->data and avpkt->size should be set. Some - * decoders might also require additional fields to be set. - * @return A negative error code is returned if an error occurred during - * decoding, otherwise the number of bytes consumed from the input - * AVPacket is returned. - */ -int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, const AVPacket *avpkt); - -/** - * Decode the video frame of size avpkt->size from avpkt->data into picture. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. - * - * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer buf should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @note You might have to align the input buffer avpkt->data. - * The alignment requirements depend on the CPU: on some CPUs it isn't - * necessary at all, on others it won't work at all if not aligned and on others - * it will work but it will have an impact on performance. - * - * In practice, avpkt->data should have 4 byte alignment at minimum. - * - * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use av_frame_alloc() to get an AVFrame. The codec will - * allocate memory for the actual bitmap by calling the - * AVCodecContext.get_buffer2() callback. - * When AVCodecContext.refcounted_frames is set to 1, the frame is - * reference counted and the returned reference belongs to the - * caller. The caller must release the frame using av_frame_unref() - * when the frame is no longer needed. The caller may safely write - * to the frame if av_frame_is_writable() returns 1. - * When AVCodecContext.refcounted_frames is set to 0, the returned - * reference belongs to the decoder and is valid only until the - * next call to this function or until closing the decoder. The - * caller may not write to it. - * - * @param[in] avpkt The input AVpacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields like - * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least - * fields possible. - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. - */ -int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt); - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expect to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * @param avctx the codec context - * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be - freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt); - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - - /** - * Time difference in stream time base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field is not the display duration of the current frame. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. - */ - int64_t convergence_duration; - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[5]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); - struct AVCodecParser *next; -} AVCodecParser; - -AVCodecParser *av_parser_next(AVCodecParser *c); - -void av_register_codec_parser(AVCodecParser *parser); -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -/** - * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed - * @deprecated use AVBitStreamFilter - */ -int av_parser_change(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -AVCodec *avcodec_find_encoder_by_name(const char *name); - -#if FF_API_OLD_ENCODE_AUDIO -/** - * Encode an audio frame from samples into buf. - * - * @deprecated Use avcodec_encode_audio2 instead. - * - * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. - * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user - * will know how much space is needed because it depends on the value passed - * in buf_size as described below. In that case a lower value can be used. - * - * @param avctx the codec context - * @param[out] buf the output buffer - * @param[in] buf_size the output buffer size - * @param[in] samples the input buffer containing the samples - * The number of samples read from this buffer is frame_size*channels, - * both of which are defined in avctx. - * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of - * samples read from samples is equal to: - * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) - * This also implies that av_get_bits_per_sample() must not return 0 for these - * codecs. - * @return On error a negative value is returned, on success zero or the number - * of bytes used to encode the data read from the input buffer. - */ -int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, - uint8_t *buf, int buf_size, - const short *samples); -#endif - -/** - * Encode a frame of audio. - * - * Takes input samples from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay, split, and combine input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. If avpkt->data and - * avpkt->size are set, avpkt->destruct must also be set. All - * other AVPacket fields will be reset by the encoder using - * av_init_packet(). If avpkt->data is NULL, the encoder will - * allocate it. The encoder will set avpkt->size to the size - * of the output packet. - * - * If this function fails or produces no output, avpkt will be - * freed using av_free_packet() (i.e. avpkt->destruct will be - * called to free the user supplied buffer). - * @param[in] frame AVFrame containing the raw audio data to be encoded. - * May be NULL when flushing an encoder that has the - * CODEC_CAP_DELAY capability set. - * If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - */ -int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -#if FF_API_OLD_ENCODE_VIDEO -/** - * @deprecated use avcodec_encode_video2() instead. - * - * Encode a video frame from pict into buf. - * The input picture should be - * stored using a specific format, namely avctx.pix_fmt. - * - * @param avctx the codec context - * @param[out] buf the output buffer for the bitstream of encoded frame - * @param[in] buf_size the size of the output buffer in bytes - * @param[in] pict the input picture to encode - * @return On error a negative value is returned, on success zero or the number - * of bytes used from the output buffer. - */ -attribute_deprecated -int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVFrame *pict); -#endif - -/** - * Encode a frame of video. - * - * Takes input raw video data from frame and writes the next output packet, if - * available, to avpkt. The output packet does not necessarily contain data for - * the most recent frame, as encoders can delay and reorder input frames - * internally as needed. - * - * @param avctx codec context - * @param avpkt output AVPacket. - * The user can supply an output buffer by setting - * avpkt->data and avpkt->size prior to calling the - * function, but if the size of the user-provided data is not - * large enough, encoding will fail. All other AVPacket fields - * will be reset by the encoder using av_init_packet(). If - * avpkt->data is NULL, the encoder will allocate it. - * The encoder will set avpkt->size to the size of the - * output packet. The returned data (if any) belongs to the - * caller, he is responsible for freeing it. - * - * If this function fails or produces no output, avpkt will be - * freed using av_free_packet() (i.e. avpkt->destruct will be - * called to free the user supplied buffer). - * @param[in] frame AVFrame containing the raw video data to be encoded. - * May be NULL when flushing an encoder that has the - * CODEC_CAP_DELAY capability set. - * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the - * output packet is non-empty, and to 0 if it is - * empty. If the function returns an error, the - * packet can be assumed to be invalid, and the - * value of got_packet_ptr is undefined and should - * not be used. - * @return 0 on success, negative error code on failure - */ -int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet_ptr); - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -#if FF_API_AVCODEC_RESAMPLE -/** - * @defgroup lavc_resample Audio resampling - * @ingroup libavc - * @deprecated use libswresample instead - * - * @{ - */ -struct ReSampleContext; -struct AVResampleContext; - -typedef struct ReSampleContext ReSampleContext; - -/** - * Initialize audio resampling context. - * - * @param output_channels number of output channels - * @param input_channels number of input channels - * @param output_rate output sample rate - * @param input_rate input sample rate - * @param sample_fmt_out requested output sample format - * @param sample_fmt_in input sample format - * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency - * @param log2_phase_count log2 of the number of entries in the polyphase filterbank - * @param linear if 1 then the used FIR filter will be linearly interpolated - between the 2 closest, if 0 the closest will be used - * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate - * @return allocated ReSampleContext, NULL if error occurred - */ -attribute_deprecated -ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, - int output_rate, int input_rate, - enum AVSampleFormat sample_fmt_out, - enum AVSampleFormat sample_fmt_in, - int filter_length, int log2_phase_count, - int linear, double cutoff); - -attribute_deprecated -int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); - -/** - * Free resample context. - * - * @param s a non-NULL pointer to a resample context previously - * created with av_audio_resample_init() - */ -attribute_deprecated -void audio_resample_close(ReSampleContext *s); - - -/** - * Initialize an audio resampler. - * Note, if either rate is not an integer then simply scale both rates up so they are. - * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq - * @param log2_phase_count log2 of the number of entries in the polyphase filterbank - * @param linear If 1 then the used FIR filter will be linearly interpolated - between the 2 closest, if 0 the closest will be used - * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate - */ -attribute_deprecated -struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); - -/** - * Resample an array of samples using a previously configured context. - * @param src an array of unconsumed samples - * @param consumed the number of samples of src which have been consumed are returned here - * @param src_size the number of unconsumed samples available - * @param dst_size the amount of space in samples available in dst - * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. - * @return the number of samples written in dst or -1 if an error occurred - */ -attribute_deprecated -int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); - - -/** - * Compensate samplerate/timestamp drift. The compensation is done by changing - * the resampler parameters, so no audible clicks or similar distortions occur - * @param compensation_distance distance in output samples over which the compensation should be performed - * @param sample_delta number of output samples which should be output less - * - * example: av_resample_compensate(c, 10, 500) - * here instead of 510 samples only 500 samples would be output - * - * note, due to rounding the actual compensation might be slightly different, - * especially if the compensation_distance is large and the in_rate used during init is small - */ -attribute_deprecated -void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); -attribute_deprecated -void av_resample_close(struct AVResampleContext *c); - -/** - * @} - */ -#endif - -/** - * @addtogroup lavc_picture - * @{ - */ - -/** - * Allocate memory for a picture. Call avpicture_free() to free it. - * - * @see avpicture_fill() - * - * @param picture the picture to be filled in - * @param pix_fmt the format of the picture - * @param width the width of the picture - * @param height the height of the picture - * @return zero if successful, a negative value if not - */ -int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Free a picture previously allocated by avpicture_alloc(). - * The data buffer used by the AVPicture is freed, but the AVPicture structure - * itself is not. - * - * @param picture the AVPicture to be freed - */ -void avpicture_free(AVPicture *picture); - -/** - * Fill in the AVPicture fields, always assume a linesize alignment of - * 1. - * - * @see av_image_fill_arrays() - */ -int avpicture_fill(AVPicture *picture, const uint8_t *ptr, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Copy pixel data from an AVPicture into a buffer, always assume a - * linesize alignment of 1. - * - * @see av_image_copy_to_buffer() - */ -int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, - int width, int height, - unsigned char *dest, int dest_size); - -/** - * Calculate the size in bytes that a picture of the given width and height - * would occupy if stored in the given picture format. - * Always assume a linesize alignment of 1. - * - * @see av_image_get_buffer_size(). - */ -int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); - -#if FF_API_DEINTERLACE -/** - * deinterlace - if not supported return -1 - * - * @deprecated - use yadif (in libavfilter) instead - */ -attribute_deprecated -int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); -#endif -/** - * Copy image src to dst. Wraps av_image_copy(). - */ -void av_picture_copy(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Crop image top and left side. - */ -int av_picture_crop(AVPicture *dst, const AVPicture *src, - enum AVPixelFormat pix_fmt, int top_band, int left_band); - -/** - * Pad image. - */ -int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, - int padtop, int padbottom, int padleft, int padright, int *color); - -/** - * @} - */ - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample - * for one that returns a failure code and continues in case of invalid - * pix_fmts. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w - * @param[out] v_shift store log2_chroma_h - * - * @see av_pix_fmt_get_chroma_sub_sample - */ - -void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * avcodec_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format and a selection of two destination pixel formats. When converting from - * one pixel format to another, information loss may occur. For example, when converting - * from RGB24 to GRAY, the color information will be lost. Similarly, other losses occur when - * converting from some formats to other formats. avcodec_find_best_pix_fmt_of_2() selects which of - * the given pixel formats should be used to suffer the least amount of loss. - * - * If one of the destination formats is AV_PIX_FMT_NONE the other pixel format (if valid) will be - * returned. - * - * @code - * src_pix_fmt = AV_PIX_FMT_YUV420P; - * dst_pix_fmt1= AV_PIX_FMT_RGB24; - * dst_pix_fmt2= AV_PIX_FMT_GRAY8; - * dst_pix_fmt3= AV_PIX_FMT_RGB8; - * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored. - * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss); - * dst_pix_fmt = avcodec_find_best_pix_fmt_of_2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss); - * @endcode - * - * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from - * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from - * @param[in] src_pix_fmt Source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e. - * NULL or value of zero means we care about all losses. Out: the loss - * that occurs when converting from src to selected dst pixel format. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -attribute_deprecated -#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); -#else -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -#endif - - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -void avcodec_set_dimensions(AVCodecContext *s, int width, int height); - -/** - * Put a string representing the codec tag codec_tag in buf. - * - * @param buf_size size in bytes of buf - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null - */ -size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Flush buffers, should be called when seeking or when switching to a different stream. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - - -typedef struct AVBitStreamFilterContext { - void *priv_data; - struct AVBitStreamFilter *filter; - AVCodecParserContext *parser; - struct AVBitStreamFilterContext *next; -} AVBitStreamFilterContext; - - -typedef struct AVBitStreamFilter { - const char *name; - int priv_data_size; - int (*filter)(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); - void (*close)(AVBitStreamFilterContext *bsfc); - struct AVBitStreamFilter *next; -} AVBitStreamFilter; - -/** - * Register a bitstream filter. - * - * The filter will be accessible to the application code through - * av_bitstream_filter_next() or can be directly initialized with - * av_bitstream_filter_init(). - * - * @see avcodec_register_all() - */ -void av_register_bitstream_filter(AVBitStreamFilter *bsf); - -/** - * Create and initialize a bitstream filter context given a bitstream - * filter name. - * - * The returned context must be freed with av_bitstream_filter_close(). - * - * @param name the name of the bitstream filter - * @return a bitstream filter context if a matching filter was found - * and successfully initialized, NULL otherwise - */ -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); - -/** - * Filter bitstream. - * - * This function filters the buffer buf with size buf_size, and places the - * filtered buffer in the buffer pointed to by poutbuf. - * - * The output buffer must be freed by the caller. - * - * @param bsfc bitstream filter context created by av_bitstream_filter_init() - * @param avctx AVCodecContext accessed by the filter, may be NULL. - * If specified, this must point to the encoder context of the - * output stream the packet is sent to. - * @param args arguments which specify the filter configuration, may be NULL - * @param poutbuf pointer which is updated to point to the filtered buffer - * @param poutbuf_size pointer which is updated to the filtered buffer size in bytes - * @param buf buffer containing the data to filter - * @param buf_size size in bytes of buf - * @param keyframe set to non-zero if the buffer to filter corresponds to a key-frame packet data - * @return >= 0 in case of success, or a negative error code in case of failure - * - * If the return value is positive, an output buffer is allocated and - * is availble in *poutbuf, and is distinct from the input buffer. - * - * If the return value is 0, the output output buffer is not allocated - * and the output buffer should be considered identical to the input - * buffer, or in case *poutbuf was set it points to the input buffer - * (not necessarily to its starting address). - */ -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe); - -/** - * Release bitstream filter context. - * - * @param bsf the bitstream filter context created with - * av_bitstream_filter_init(), can be NULL - */ -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); - -/** - * If f is NULL, return the first registered bitstream filter, - * if f is non-NULL, return the next registered bitstream filter - * after f, or NULL if f is the last one. - * - * This function can be used to iterate over all registered bitstream - * filters. - */ -AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); - -/* memory */ - -/** - * Reallocate the given block if it is not large enough, otherwise do nothing. - * - * @see av_realloc - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special - * handling to avoid memleaks is necessary. - * - * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer - * @param size size of the buffer *ptr points to - * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and - * *size 0 if an error occurred. - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * FF_INPUT_BUFFER_PADDING_SIZE at the end which will will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#if FF_API_MISSING_SAMPLE -/** - * Log a generic warning message about a missing feature. This function is - * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) - * only, and would normally not be used by applications. - * @param[in] avc a pointer to an arbitrary struct of which the first field is - * a pointer to an AVClass struct - * @param[in] feature string containing the name of the missing feature - * @param[in] want_sample indicates if samples are wanted which exhibit this feature. - * If want_sample is non-zero, additional verbage will be added to the log - * message which tells the user how to report samples to the development - * mailing list. - * @deprecated Use avpriv_report_missing_feature() instead. - */ -attribute_deprecated -void av_log_missing_feature(void *avc, const char *feature, int want_sample); - -/** - * Log a generic warning message asking for a sample. This function is - * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) - * only, and would normally not be used by applications. - * @param[in] avc a pointer to an arbitrary struct of which the first field is - * a pointer to an AVClass struct - * @param[in] msg string containing an optional message, or NULL if no message - * @deprecated Use avpriv_request_sample() instead. - */ -attribute_deprecated -void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); -#endif /* FF_API_MISSING_SAMPLE */ - -/** - * Register the hardware accelerator hwaccel. - */ -void av_register_hwaccel(AVHWAccel *hwaccel); - -/** - * If hwaccel is NULL, returns the first registered hardware accelerator, - * if hwaccel is non-NULL, returns the next registered hardware accelerator - * after hwaccel, or NULL if hwaccel is the last one. - */ -AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel); - - -/** - * Lock operation used by lockmgr - */ -enum AVLockOp { - AV_LOCK_CREATE, ///< Create a mutex - AV_LOCK_OBTAIN, ///< Lock the mutex - AV_LOCK_RELEASE, ///< Unlock the mutex - AV_LOCK_DESTROY, ///< Free mutex resources -}; - -/** - * Register a user provided lock manager supporting the operations - * specified by AVLockOp. mutex points to a (void *) where the - * lockmgr should store/get a pointer to a user allocated mutex. It's - * NULL upon AV_LOCK_CREATE and != NULL for all other ops. - * - * @param cb User defined callback. Note: FFmpeg may invoke calls to this - * callback during the call to av_lockmgr_register(). - * Thus, the application must be prepared to handle that. - * If cb is set to NULL the lockmgr will be unregistered. - * Also note that during unregistration the previously registered - * lockmgr callback may also be invoked. - */ -int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/avfft.h b/3rdparty/include/ffmpeg_/libavcodec/avfft.h deleted file mode 100644 index 2d20a45..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/avfft.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - */ -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - */ -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - */ -void av_fft_calc(FFTContext *s, FFTComplex *z); - -void av_fft_end(FFTContext *s); - -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - */ -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -void av_rdft_calc(RDFTContext *s, FFTSample *data); -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * - * @note the first element of the input of DST-I is ignored - */ -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -void av_dct_calc(DCTContext *s, FFTSample *data); -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVFFT_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/dxva2.h b/3rdparty/include/ffmpeg_/libavcodec/dxva2.h deleted file mode 100644 index ac39e06..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/dxva2.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA_H -#define AVCODEC_DXVA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 -#undef _WIN32_WINNT -#endif - -#if !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x0600 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/old_codec_ids.h b/3rdparty/include/ffmpeg_/libavcodec/old_codec_ids.h deleted file mode 100644 index d8a8f74..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/old_codec_ids.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_OLD_CODEC_IDS_H -#define AVCODEC_OLD_CODEC_IDS_H - -#include "libavutil/common.h" - -/* - * This header exists to prevent new codec IDs from being accidentally added to - * the deprecated list. - * Do not include it directly. It will be removed on next major bump - * - * Do not add new items to this list. Use the AVCodecID enum instead. - */ - - CODEC_ID_NONE = AV_CODEC_ID_NONE, - - /* video codecs */ - CODEC_ID_MPEG1VIDEO, - CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - CODEC_ID_MPEG2VIDEO_XVMC, - CODEC_ID_H261, - CODEC_ID_H263, - CODEC_ID_RV10, - CODEC_ID_RV20, - CODEC_ID_MJPEG, - CODEC_ID_MJPEGB, - CODEC_ID_LJPEG, - CODEC_ID_SP5X, - CODEC_ID_JPEGLS, - CODEC_ID_MPEG4, - CODEC_ID_RAWVIDEO, - CODEC_ID_MSMPEG4V1, - CODEC_ID_MSMPEG4V2, - CODEC_ID_MSMPEG4V3, - CODEC_ID_WMV1, - CODEC_ID_WMV2, - CODEC_ID_H263P, - CODEC_ID_H263I, - CODEC_ID_FLV1, - CODEC_ID_SVQ1, - CODEC_ID_SVQ3, - CODEC_ID_DVVIDEO, - CODEC_ID_HUFFYUV, - CODEC_ID_CYUV, - CODEC_ID_H264, - CODEC_ID_INDEO3, - CODEC_ID_VP3, - CODEC_ID_THEORA, - CODEC_ID_ASV1, - CODEC_ID_ASV2, - CODEC_ID_FFV1, - CODEC_ID_4XM, - CODEC_ID_VCR1, - CODEC_ID_CLJR, - CODEC_ID_MDEC, - CODEC_ID_ROQ, - CODEC_ID_INTERPLAY_VIDEO, - CODEC_ID_XAN_WC3, - CODEC_ID_XAN_WC4, - CODEC_ID_RPZA, - CODEC_ID_CINEPAK, - CODEC_ID_WS_VQA, - CODEC_ID_MSRLE, - CODEC_ID_MSVIDEO1, - CODEC_ID_IDCIN, - CODEC_ID_8BPS, - CODEC_ID_SMC, - CODEC_ID_FLIC, - CODEC_ID_TRUEMOTION1, - CODEC_ID_VMDVIDEO, - CODEC_ID_MSZH, - CODEC_ID_ZLIB, - CODEC_ID_QTRLE, - CODEC_ID_TSCC, - CODEC_ID_ULTI, - CODEC_ID_QDRAW, - CODEC_ID_VIXL, - CODEC_ID_QPEG, - CODEC_ID_PNG, - CODEC_ID_PPM, - CODEC_ID_PBM, - CODEC_ID_PGM, - CODEC_ID_PGMYUV, - CODEC_ID_PAM, - CODEC_ID_FFVHUFF, - CODEC_ID_RV30, - CODEC_ID_RV40, - CODEC_ID_VC1, - CODEC_ID_WMV3, - CODEC_ID_LOCO, - CODEC_ID_WNV1, - CODEC_ID_AASC, - CODEC_ID_INDEO2, - CODEC_ID_FRAPS, - CODEC_ID_TRUEMOTION2, - CODEC_ID_BMP, - CODEC_ID_CSCD, - CODEC_ID_MMVIDEO, - CODEC_ID_ZMBV, - CODEC_ID_AVS, - CODEC_ID_SMACKVIDEO, - CODEC_ID_NUV, - CODEC_ID_KMVC, - CODEC_ID_FLASHSV, - CODEC_ID_CAVS, - CODEC_ID_JPEG2000, - CODEC_ID_VMNC, - CODEC_ID_VP5, - CODEC_ID_VP6, - CODEC_ID_VP6F, - CODEC_ID_TARGA, - CODEC_ID_DSICINVIDEO, - CODEC_ID_TIERTEXSEQVIDEO, - CODEC_ID_TIFF, - CODEC_ID_GIF, - CODEC_ID_DXA, - CODEC_ID_DNXHD, - CODEC_ID_THP, - CODEC_ID_SGI, - CODEC_ID_C93, - CODEC_ID_BETHSOFTVID, - CODEC_ID_PTX, - CODEC_ID_TXD, - CODEC_ID_VP6A, - CODEC_ID_AMV, - CODEC_ID_VB, - CODEC_ID_PCX, - CODEC_ID_SUNRAST, - CODEC_ID_INDEO4, - CODEC_ID_INDEO5, - CODEC_ID_MIMIC, - CODEC_ID_RL2, - CODEC_ID_ESCAPE124, - CODEC_ID_DIRAC, - CODEC_ID_BFI, - CODEC_ID_CMV, - CODEC_ID_MOTIONPIXELS, - CODEC_ID_TGV, - CODEC_ID_TGQ, - CODEC_ID_TQI, - CODEC_ID_AURA, - CODEC_ID_AURA2, - CODEC_ID_V210X, - CODEC_ID_TMV, - CODEC_ID_V210, - CODEC_ID_DPX, - CODEC_ID_MAD, - CODEC_ID_FRWU, - CODEC_ID_FLASHSV2, - CODEC_ID_CDGRAPHICS, - CODEC_ID_R210, - CODEC_ID_ANM, - CODEC_ID_BINKVIDEO, - CODEC_ID_IFF_ILBM, - CODEC_ID_IFF_BYTERUN1, - CODEC_ID_KGV1, - CODEC_ID_YOP, - CODEC_ID_VP8, - CODEC_ID_PICTOR, - CODEC_ID_ANSI, - CODEC_ID_A64_MULTI, - CODEC_ID_A64_MULTI5, - CODEC_ID_R10K, - CODEC_ID_MXPEG, - CODEC_ID_LAGARITH, - CODEC_ID_PRORES, - CODEC_ID_JV, - CODEC_ID_DFA, - CODEC_ID_WMV3IMAGE, - CODEC_ID_VC1IMAGE, - CODEC_ID_UTVIDEO, - CODEC_ID_BMV_VIDEO, - CODEC_ID_VBLE, - CODEC_ID_DXTORY, - CODEC_ID_V410, - CODEC_ID_XWD, - CODEC_ID_CDXL, - CODEC_ID_XBM, - CODEC_ID_ZEROCODEC, - CODEC_ID_MSS1, - CODEC_ID_MSA1, - CODEC_ID_TSCC2, - CODEC_ID_MTS2, - CODEC_ID_CLLC, - CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), - CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), - CODEC_ID_EXR = MKBETAG('0','E','X','R'), - CODEC_ID_AVRP = MKBETAG('A','V','R','P'), - - CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), - CODEC_ID_AVUI = MKBETAG('A','V','U','I'), - CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), - CODEC_ID_V308 = MKBETAG('V','3','0','8'), - CODEC_ID_V408 = MKBETAG('V','4','0','8'), - CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), - CODEC_ID_SANM = MKBETAG('S','A','N','M'), - CODEC_ID_PAF_VIDEO = MKBETAG('P','A','F','V'), - CODEC_ID_SNOW = AV_CODEC_ID_SNOW, - - /* various PCM "codecs" */ - CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - CODEC_ID_PCM_S16LE = 0x10000, - CODEC_ID_PCM_S16BE, - CODEC_ID_PCM_U16LE, - CODEC_ID_PCM_U16BE, - CODEC_ID_PCM_S8, - CODEC_ID_PCM_U8, - CODEC_ID_PCM_MULAW, - CODEC_ID_PCM_ALAW, - CODEC_ID_PCM_S32LE, - CODEC_ID_PCM_S32BE, - CODEC_ID_PCM_U32LE, - CODEC_ID_PCM_U32BE, - CODEC_ID_PCM_S24LE, - CODEC_ID_PCM_S24BE, - CODEC_ID_PCM_U24LE, - CODEC_ID_PCM_U24BE, - CODEC_ID_PCM_S24DAUD, - CODEC_ID_PCM_ZORK, - CODEC_ID_PCM_S16LE_PLANAR, - CODEC_ID_PCM_DVD, - CODEC_ID_PCM_F32BE, - CODEC_ID_PCM_F32LE, - CODEC_ID_PCM_F64BE, - CODEC_ID_PCM_F64LE, - CODEC_ID_PCM_BLURAY, - CODEC_ID_PCM_LXF, - CODEC_ID_S302M, - CODEC_ID_PCM_S8_PLANAR, - - /* various ADPCM codecs */ - CODEC_ID_ADPCM_IMA_QT = 0x11000, - CODEC_ID_ADPCM_IMA_WAV, - CODEC_ID_ADPCM_IMA_DK3, - CODEC_ID_ADPCM_IMA_DK4, - CODEC_ID_ADPCM_IMA_WS, - CODEC_ID_ADPCM_IMA_SMJPEG, - CODEC_ID_ADPCM_MS, - CODEC_ID_ADPCM_4XM, - CODEC_ID_ADPCM_XA, - CODEC_ID_ADPCM_ADX, - CODEC_ID_ADPCM_EA, - CODEC_ID_ADPCM_G726, - CODEC_ID_ADPCM_CT, - CODEC_ID_ADPCM_SWF, - CODEC_ID_ADPCM_YAMAHA, - CODEC_ID_ADPCM_SBPRO_4, - CODEC_ID_ADPCM_SBPRO_3, - CODEC_ID_ADPCM_SBPRO_2, - CODEC_ID_ADPCM_THP, - CODEC_ID_ADPCM_IMA_AMV, - CODEC_ID_ADPCM_EA_R1, - CODEC_ID_ADPCM_EA_R3, - CODEC_ID_ADPCM_EA_R2, - CODEC_ID_ADPCM_IMA_EA_SEAD, - CODEC_ID_ADPCM_IMA_EA_EACS, - CODEC_ID_ADPCM_EA_XAS, - CODEC_ID_ADPCM_EA_MAXIS_XA, - CODEC_ID_ADPCM_IMA_ISS, - CODEC_ID_ADPCM_G722, - CODEC_ID_ADPCM_IMA_APC, - CODEC_ID_VIMA = MKBETAG('V','I','M','A'), - - /* AMR */ - CODEC_ID_AMR_NB = 0x12000, - CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - CODEC_ID_RA_144 = 0x13000, - CODEC_ID_RA_288, - - /* various DPCM codecs */ - CODEC_ID_ROQ_DPCM = 0x14000, - CODEC_ID_INTERPLAY_DPCM, - CODEC_ID_XAN_DPCM, - CODEC_ID_SOL_DPCM, - - /* audio codecs */ - CODEC_ID_MP2 = 0x15000, - CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - CODEC_ID_AAC, - CODEC_ID_AC3, - CODEC_ID_DTS, - CODEC_ID_VORBIS, - CODEC_ID_DVAUDIO, - CODEC_ID_WMAV1, - CODEC_ID_WMAV2, - CODEC_ID_MACE3, - CODEC_ID_MACE6, - CODEC_ID_VMDAUDIO, - CODEC_ID_FLAC, - CODEC_ID_MP3ADU, - CODEC_ID_MP3ON4, - CODEC_ID_SHORTEN, - CODEC_ID_ALAC, - CODEC_ID_WESTWOOD_SND1, - CODEC_ID_GSM, ///< as in Berlin toast format - CODEC_ID_QDM2, - CODEC_ID_COOK, - CODEC_ID_TRUESPEECH, - CODEC_ID_TTA, - CODEC_ID_SMACKAUDIO, - CODEC_ID_QCELP, - CODEC_ID_WAVPACK, - CODEC_ID_DSICINAUDIO, - CODEC_ID_IMC, - CODEC_ID_MUSEPACK7, - CODEC_ID_MLP, - CODEC_ID_GSM_MS, /* as found in WAV */ - CODEC_ID_ATRAC3, - CODEC_ID_VOXWARE, - CODEC_ID_APE, - CODEC_ID_NELLYMOSER, - CODEC_ID_MUSEPACK8, - CODEC_ID_SPEEX, - CODEC_ID_WMAVOICE, - CODEC_ID_WMAPRO, - CODEC_ID_WMALOSSLESS, - CODEC_ID_ATRAC3P, - CODEC_ID_EAC3, - CODEC_ID_SIPR, - CODEC_ID_MP1, - CODEC_ID_TWINVQ, - CODEC_ID_TRUEHD, - CODEC_ID_MP4ALS, - CODEC_ID_ATRAC1, - CODEC_ID_BINKAUDIO_RDFT, - CODEC_ID_BINKAUDIO_DCT, - CODEC_ID_AAC_LATM, - CODEC_ID_QDMC, - CODEC_ID_CELT, - CODEC_ID_G723_1, - CODEC_ID_G729, - CODEC_ID_8SVX_EXP, - CODEC_ID_8SVX_FIB, - CODEC_ID_BMV_AUDIO, - CODEC_ID_RALF, - CODEC_ID_IAC, - CODEC_ID_ILBC, - CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), - CODEC_ID_SONIC = MKBETAG('S','O','N','C'), - CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), - CODEC_ID_PAF_AUDIO = MKBETAG('P','A','F','A'), - CODEC_ID_OPUS = MKBETAG('O','P','U','S'), - - /* subtitle codecs */ - CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - CODEC_ID_DVD_SUBTITLE = 0x17000, - CODEC_ID_DVB_SUBTITLE, - CODEC_ID_TEXT, ///< raw UTF-8 text - CODEC_ID_XSUB, - CODEC_ID_SSA, - CODEC_ID_MOV_TEXT, - CODEC_ID_HDMV_PGS_SUBTITLE, - CODEC_ID_DVB_TELETEXT, - CODEC_ID_SRT, - CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), - CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), - CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), - CODEC_ID_SAMI = MKBETAG('S','A','M','I'), - CODEC_ID_REALTEXT = MKBETAG('R','T','X','T'), - CODEC_ID_SUBVIEWER = MKBETAG('S','u','b','V'), - - /* other specific kind of codecs (generally used for attachments) */ - CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - CODEC_ID_TTF = 0x18000, - CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), - CODEC_ID_XBIN = MKBETAG('X','B','I','N'), - CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), - CODEC_ID_OTF = MKBETAG( 0 ,'O','T','F'), - - CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it - - CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - -#endif /* AVCODEC_OLD_CODEC_IDS_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/vaapi.h b/3rdparty/include/ffmpeg_/libavcodec/vaapi.h deleted file mode 100644 index 815a27e..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/vaapi.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Video Acceleration API (shared data between FFmpeg and the video player) - * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 - * - * Copyright (C) 2008-2009 Splitted-Desktop Systems - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VAAPI_H -#define AVCODEC_VAAPI_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vaapi - * Public libavcodec VA API header. - */ - -#include - -/** - * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding - * @ingroup lavc_codec_hwaccel - * @{ - */ - -/** - * This structure is used to share data between the FFmpeg library and - * the client video application. - * This shall be zero-allocated and available as - * AVCodecContext.hwaccel_context. All user members can be set once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - */ -struct vaapi_context { - /** - * Window system dependent data - * - * - encoding: unused - * - decoding: Set by user - */ - void *display; - - /** - * Configuration ID - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t config_id; - - /** - * Context ID (video decode pipeline) - * - * - encoding: unused - * - decoding: Set by user - */ - uint32_t context_id; - - /** - * VAPictureParameterBuffer ID - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - uint32_t pic_param_buf_id; - - /** - * VAIQMatrixBuffer ID - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - uint32_t iq_matrix_buf_id; - - /** - * VABitPlaneBuffer ID (for VC-1 decoding) - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - uint32_t bitplane_buf_id; - - /** - * Slice parameter/data buffer IDs - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - uint32_t *slice_buf_ids; - - /** - * Number of effective slice buffer IDs to send to the HW - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - unsigned int n_slice_buf_ids; - - /** - * Size of pre-allocated slice_buf_ids - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - unsigned int slice_buf_ids_alloc; - - /** - * Pointer to VASliceParameterBuffers - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - void *slice_params; - - /** - * Size of a VASliceParameterBuffer element - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - unsigned int slice_param_size; - - /** - * Size of pre-allocated slice_params - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - unsigned int slice_params_alloc; - - /** - * Number of slices currently filled in - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - unsigned int slice_count; - - /** - * Pointer to slice data buffer base - * - encoding: unused - * - decoding: Set by libavcodec - */ - const uint8_t *slice_data; - - /** - * Current size of slice data - * - * - encoding: unused - * - decoding: Set by libavcodec - */ - uint32_t slice_data_size; -}; - -/* @} */ - -#endif /* AVCODEC_VAAPI_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/vda.h b/3rdparty/include/ffmpeg_/libavcodec/vda.h deleted file mode 100644 index b3d6399..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/vda.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * VDA HW acceleration - * - * copyright (c) 2011 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDA_H -#define AVCODEC_VDA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vda - * Public libavcodec VDA header. - */ - -#include - -// emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes -// http://openradar.appspot.com/8026390 -#undef __GNUC_STDC_INLINE__ - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/version.h" - -/** - * @defgroup lavc_codec_hwaccel_vda VDA - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -/** - * This structure is used to provide the necessary configurations and data - * to the VDA FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct vda_context { - /** - * VDA decoder object. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - VDADecoder decoder; - - /** - * The Core Video pixel buffer that contains the current image data. - * - * encoding: unused - * decoding: Set by libavcodec. Unset by user. - */ - CVPixelBufferRef cv_buffer; - - /** - * Use the hardware decoder in synchronous mode. - * - * encoding: unused - * decoding: Set by user. - */ - int use_sync_decoding; - - /** - * The frame width. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ - int width; - - /** - * The frame height. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ - int height; - - /** - * The frame format. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ - int format; - - /** - * The pixel format for output image buffers. - * - * - encoding: unused - * - decoding: Set/Unset by user. - */ - OSType cv_pix_fmt_type; - - /** - * The current bitstream buffer. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - uint8_t *priv_bitstream; - - /** - * The current size of the bitstream. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - int priv_bitstream_size; - - /** - * The reference size used for fast reallocation. - * - * - encoding: unused - * - decoding: Set/Unset by libavcodec. - */ - int priv_allocated_size; - - /** - * Use av_buffer to manage buffer. - * When the flag is set, the CVPixelBuffers returned by the decoder will - * be released automatically, so you have to retain them if necessary. - * Not setting this flag may cause memory leak. - * - * encoding: unused - * decoding: Set by user. - */ - int use_ref_buffer; -}; - -/** Create the video decoder. */ -int ff_vda_create_decoder(struct vda_context *vda_ctx, - uint8_t *extradata, - int extradata_size); - -/** Destroy the video decoder. */ -int ff_vda_destroy_decoder(struct vda_context *vda_ctx); - -/** - * @} - */ - -#endif /* AVCODEC_VDA_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/vdpau.h b/3rdparty/include/ffmpeg_/libavcodec/vdpau.h deleted file mode 100644 index a8d708c..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/vdpau.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include -#include -#include "libavutil/avconfig.h" - -union FFVdpPictureInfo { - VdpPictureInfoH264 h264; - VdpPictureInfoMPEG1Or2 mpeg; - VdpPictureInfoVC1 vc1; - VdpPictureInfoMPEG4Part2 mpeg4; -}; - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * The user shall zero-allocate the structure and make it available as - * AVCodecContext.hwaccel_context. Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - /** - * VDPAU picture information - * - * Set by libavcodec. - */ - union FFVdpPictureInfo info; - - /** - * Allocated size of the bitstream_buffers table. - * - * Set by libavcodec. - */ - int bitstream_buffers_allocated; - - /** - * Useful bitstream buffers in the bitstream buffers table. - * - * Set by libavcodec. - */ - int bitstream_buffers_used; - - /** - * Table of bitstream buffers. - * The user is responsible for freeing this buffer using av_freep(). - * - * Set by libavcodec. - */ - VdpBitstreamBuffer *bitstream_buffers; -} AVVDPAUContext; - - -/** @brief The videoSurface is used for rendering. */ -#define FF_VDPAU_STATE_USED_FOR_RENDER 1 - -/** - * @brief The videoSurface is needed for reference/prediction. - * The codec manipulates this. - */ -#define FF_VDPAU_STATE_USED_FOR_REFERENCE 2 - -/** - * @brief This structure is used as a callback between the FFmpeg - * decoder (vd_) and presentation (vo_) module. - * This is used for defining a video frame containing surface, - * picture parameter, bitstream information etc which are passed - * between the FFmpeg decoder and its clients. - */ -struct vdpau_render_state { - VdpVideoSurface surface; ///< Used as rendered surface, never changed. - - int state; ///< Holds FF_VDPAU_STATE_* values. - -#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI - /** picture parameter information for all supported codecs */ - union FFVdpPictureInfo info; -#endif - - /** Describe size/location of the compressed video data. - Set to 0 when freeing bitstream_buffers. */ - int bitstream_buffers_allocated; - int bitstream_buffers_used; - /** The user is responsible for freeing this buffer using av_freep(). */ - VdpBitstreamBuffer *bitstream_buffers; - -#if !AV_HAVE_INCOMPATIBLE_LIBAV_ABI - /** picture parameter information for all supported codecs */ - union FFVdpPictureInfo info; -#endif -}; - -/* @}*/ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/version.h b/3rdparty/include/ffmpeg_/libavcodec/version.h deleted file mode 100644 index 3283446..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/version.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/avutil.h" - -#define LIBAVCODEC_VERSION_MAJOR 55 -#define LIBAVCODEC_VERSION_MINOR 18 -#define LIBAVCODEC_VERSION_MICRO 102 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_REQUEST_CHANNELS -#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_ALLOC_CONTEXT -#define FF_API_ALLOC_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 55) -#endif -#ifndef FF_API_AVCODEC_OPEN -#define FF_API_AVCODEC_OPEN (LIBAVCODEC_VERSION_MAJOR < 55) -#endif -#ifndef FF_API_OLD_DECODE_AUDIO -#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_OLD_TIMECODE -#define FF_API_OLD_TIMECODE (LIBAVCODEC_VERSION_MAJOR < 55) -#endif - -#ifndef FF_API_OLD_ENCODE_AUDIO -#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_OLD_ENCODE_VIDEO -#define FF_API_OLD_ENCODE_VIDEO (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_CODEC_ID -#define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_AVCODEC_RESAMPLE -#define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_DEINTERLACE -#define FF_API_DEINTERLACE (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_DESTRUCT_PACKET -#define FF_API_DESTRUCT_PACKET (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_GET_BUFFER -#define FF_API_GET_BUFFER (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_MISSING_SAMPLE -#define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_LOWRES -#define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 56) -#endif - -#endif /* AVCODEC_VERSION_H */ diff --git a/3rdparty/include/ffmpeg_/libavcodec/xvmc.h b/3rdparty/include/ffmpeg_/libavcodec/xvmc.h deleted file mode 100644 index b2bf518..0000000 --- a/3rdparty/include/ffmpeg_/libavcodec/xvmc.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2003 Ivan Kalvachev - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_XVMC_H -#define AVCODEC_XVMC_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_xvmc - * Public libavcodec XvMC header. - */ - -#include - -#include "avcodec.h" - -/** - * @defgroup lavc_codec_hwaccel_xvmc XvMC - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct - the number is 1337 speak for the letters IDCT MCo (motion compensation) */ - -struct xvmc_pix_fmt { - /** The field contains the special constant value AV_XVMC_ID. - It is used as a test that the application correctly uses the API, - and that there is no corruption caused by pixel routines. - - application - set during initialization - - libavcodec - unchanged - */ - int xvmc_id; - - /** Pointer to the block array allocated by XvMCCreateBlocks(). - The array has to be freed by XvMCDestroyBlocks(). - Each group of 64 values represents one data block of differential - pixel information (in MoCo mode) or coefficients for IDCT. - - application - set the pointer during initialization - - libavcodec - fills coefficients/pixel data into the array - */ - short* data_blocks; - - /** Pointer to the macroblock description array allocated by - XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - - application - set the pointer during initialization - - libavcodec - fills description data into the array - */ - XvMCMacroBlock* mv_blocks; - - /** Number of macroblock descriptions that can be stored in the mv_blocks - array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_mv_blocks; - - /** Number of blocks that can be stored at once in the data_blocks array. - - application - set during initialization - - libavcodec - unchanged - */ - int allocated_data_blocks; - - /** Indicate that the hardware would interpret data_blocks as IDCT - coefficients and perform IDCT on them. - - application - set during initialization - - libavcodec - unchanged - */ - int idct; - - /** In MoCo mode it indicates that intra macroblocks are assumed to be in - unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - - application - set during initialization - - libavcodec - unchanged - */ - int unsigned_intra; - - /** Pointer to the surface allocated by XvMCCreateSurface(). - It has to be freed by XvMCDestroySurface() on application exit. - It identifies the frame and its state on the video hardware. - - application - set during initialization - - libavcodec - unchanged - */ - XvMCSurface* p_surface; - -/** Set by the decoder before calling ff_draw_horiz_band(), - needed by the XvMCRenderSurface function. */ -//@{ - /** Pointer to the surface used as past reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_past_surface; - - /** Pointer to the surface used as future reference - - application - unchanged - - libavcodec - set - */ - XvMCSurface* p_future_surface; - - /** top/bottom field or frame - - application - unchanged - - libavcodec - set - */ - unsigned int picture_structure; - - /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - - application - unchanged - - libavcodec - set - */ - unsigned int flags; -//}@ - - /** Number of macroblock descriptions in the mv_blocks array - that have already been passed to the hardware. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may increment it - with filled_mb_block_num or zero both. - - libavcodec - unchanged - */ - int start_mv_blocks_num; - - /** Number of new macroblock descriptions in the mv_blocks array (after - start_mv_blocks_num) that are filled by libavcodec and have to be - passed to the hardware. - - application - zeroes it on get_buffer() or after successful - ff_draw_horiz_band(). - - libavcodec - increment with one of each stored MB - */ - int filled_mv_blocks_num; - - /** Number of the next free data block; one data block consists of - 64 short values in the data_blocks array. - All blocks before this one have already been claimed by placing their - position into the corresponding block description structure field, - that are part of the mv_blocks array. - - application - zeroes it on get_buffer(). - A successful ff_draw_horiz_band() may zero it together - with start_mb_blocks_num. - - libavcodec - each decoded macroblock increases it by the number - of coded blocks it contains. - */ - int next_free_data_block_num; -}; - -/** - * @} - */ - -#endif /* AVCODEC_XVMC_H */ diff --git a/3rdparty/include/ffmpeg_/libavdevice/avdevice.h b/3rdparty/include/ffmpeg_/libavdevice/avdevice.h deleted file mode 100644 index 93a044f..0000000 --- a/3rdparty/include/ffmpeg_/libavdevice/avdevice.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_AVDEVICE_H -#define AVDEVICE_AVDEVICE_H - -#include "version.h" - -/** - * @file - * @ingroup lavd - * Main libavdevice API header - */ - -/** - * @defgroup lavd Special devices muxing/demuxing library - * @{ - * Libavdevice is a complementary library to @ref libavf "libavformat". It - * provides various "special" platform-specific muxers and demuxers, e.g. for - * grabbing devices, audio capture and playback etc. As a consequence, the - * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own - * I/O functions). The filename passed to avformat_open_input() often does not - * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for x11grab it is the display name. - * - * To use libavdevice, simply call avdevice_register_all() to register all - * compiled muxers and demuxers. They all use standard libavformat API. - * @} - */ - -#include "libavformat/avformat.h" - -/** - * Return the LIBAVDEVICE_VERSION_INT constant. - */ -unsigned avdevice_version(void); - -/** - * Return the libavdevice build-time configuration. - */ -const char *avdevice_configuration(void); - -/** - * Return the libavdevice license. - */ -const char *avdevice_license(void); - -/** - * Initialize libavdevice and register all the input and output devices. - * @warning This function is not thread safe. - */ -void avdevice_register_all(void); - -#endif /* AVDEVICE_AVDEVICE_H */ diff --git a/3rdparty/include/ffmpeg_/libavdevice/version.h b/3rdparty/include/ffmpeg_/libavdevice/version.h deleted file mode 100644 index 1e18f51..0000000 --- a/3rdparty/include/ffmpeg_/libavdevice/version.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVDEVICE_VERSION_H -#define AVDEVICE_VERSION_H - -/** - * @file - * @ingroup lavd - * Libavdevice version macros - */ - -#include "libavutil/avutil.h" - -#define LIBAVDEVICE_VERSION_MAJOR 55 -#define LIBAVDEVICE_VERSION_MINOR 3 -#define LIBAVDEVICE_VERSION_MICRO 100 - -#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \ - LIBAVDEVICE_VERSION_MINOR, \ - LIBAVDEVICE_VERSION_MICRO) -#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT - -#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#endif /* AVDEVICE_VERSION_H */ diff --git a/3rdparty/include/ffmpeg_/libavformat/avformat.h b/3rdparty/include/ffmpeg_/libavformat/avformat.h deleted file mode 100644 index 04fad94..0000000 --- a/3rdparty/include/ffmpeg_/libavformat/avformat.h +++ /dev/null @@ -1,2181 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf I/O and Muxing/Demuxing Library - * @{ - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). Before using lavf, you need to call - * av_register_all() to register all compiled muxers, demuxers and protocols. - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * registered input/output formats using the av_iformat_next() / - * av_oformat_next() functions. The protocols layer is not part of the public - * API, so you can only get the names of supported protocols with the - * avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * Lavf allows to configure muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL or filename, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * AVDictionaryEntry *e; - * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_decode_video2(), avcodec_decode_audio4() or - * avcodec_decode_subtitle2() if the caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * If AVPacket.buf is set on the returned packet, then the packet is - * allocated dynamically and the user may keep it indefinitely. - * Otherwise, if AVPacket.buf is NULL, the packet data is backed by a - * static storage somewhere inside the demuxer and the packet is only valid - * until the next av_read_frame() call or closing the file. If the caller - * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy - * of it. - * In both cases, the packet must be freed with av_free_packet() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - * - */ - -#include -#include /* FILE */ -#include "libavcodec/avcodec.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version.h" - -struct AVFormatContext; - - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* fractional numbers for exact pts handling */ - -/** - * The exact value of the fractional number is: 'val + num / den'. - * num is assumed to be 0 <= num < den. - */ -typedef struct AVFrac { - int64_t val, num, den; -} AVFrac; - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for - raw picture data. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ -#if LIBAVFORMAT_VERSION_MAJOR <= 54 -#define AVFMT_TS_NONSTRICT 0x8020000 //we try to be compatible to the ABIs of ffmpeg and major forks -#else -#define AVFMT_TS_NONSTRICT 0x20000 -#endif - /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, - * AVFMT_TS_NONSTRICT - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - struct AVOutputFormat *next; - /** - * size of private data so that it can be allocated in the wrapper - */ - int priv_data_size; - - int (*write_header)(struct AVFormatContext *); - /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, - * pkt can be NULL in order to flush data buffered in the muxer. - * When flushing, return 0 if there still is more data to flush, - * or 1 if everything was flushed and there is no more buffered - * data. - */ - int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); - int (*write_trailer)(struct AVFormatContext *); - /** - * Currently only used to set pixel format if not YUV420P. - */ - int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, - AVPacket *in, int flush); - /** - * Test if the given codec can be stored in this container. - * - * @return 1 if the codec is supported, 0 if it is not. - * A negative number if unknown. - * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC - */ - int (*query_codec)(enum AVCodecID id, int std_compliance); - - void (*get_output_timestamp)(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /***************************************************************** - * No fields below this line are part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - struct AVInputFormat *next; - - /** - * Raw demuxers store their codec ID here. - */ - int raw_codec_id; - - /** - * Size of private data so that it can be allocated in the wrapper. - */ - int priv_data_size; - - /** - * Tell if a given file has a chance of being parsed as this format. - * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes - * big so you do not have to check for that unless you need more. - */ - int (*read_probe)(AVProbeData *); - - /** - * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. Only used in raw format right - * now. 'avformat_new_stream' should be called to create new streams. - */ - int (*read_header)(struct AVFormatContext *); - - /** - * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'avformat_new_stream' can be called only if the flag - * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a - * background thread). - * @return 0 on success, < 0 on error. - * When returning an error, pkt must not have been allocated - * or must be freed before returning - */ - int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); - - /** - * Close the stream. The AVFormatContext and AVStreams are not - * freed by this function - */ - int (*read_close)(struct AVFormatContext *); - - /** - * Seek to a given timestamp relative to the frames in - * stream component stream_index. - * @param stream_index Must not be -1. - * @param flags Selects which direction should be preferred if no exact - * match is available. - * @return >= 0 on success (but not necessarily the new offset) - */ - int (*read_seek)(struct AVFormatContext *, - int stream_index, int64_t timestamp, int flags); - - /** - * Get the next timestamp in stream[stream_index].time_base units. - * @return the timestamp or AV_NOPTS_VALUE if an error occurred - */ - int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, - int64_t *pos, int64_t pos_limit); - - /** - * Start/resume playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_play)(struct AVFormatContext *); - - /** - * Pause playing - only meaningful if using a network-based format - * (RTSP). - */ - int (*read_pause)(struct AVFormatContext *); - - /** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - */ - int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW=MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -#define AV_DISPOSITION_DEFAULT 0x0001 -#define AV_DISPOSITION_DUB 0x0002 -#define AV_DISPOSITION_ORIGINAL 0x0004 -#define AV_DISPOSITION_COMMENT 0x0008 -#define AV_DISPOSITION_LYRICS 0x0010 -#define AV_DISPOSITION_KARAOKE 0x0020 - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED 0x0040 -#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ -#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ -#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The single packet associated with it will be returned - * among the first few packets read from the file unless seeking takes place. - * It can also be accessed at any time in AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC 0x0400 - -/** - * To specify text track kind (different from subtitles default). - */ -#define AV_DISPOSITION_CAPTIONS 0x10000 -#define AV_DISPOSITION_DESCRIPTIONS 0x20000 -#define AV_DISPOSITION_METADATA 0x40000 - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; - /** - * Codec context associated with this stream. Allocated and freed by - * libavformat. - * - * - decoding: The demuxer exports codec information stored in the headers - * here. - * - encoding: The user sets codec information, the muxer writes it to the - * output. Mandatory fields as specified in AVCodecContext - * documentation must be set even if this AVCodecContext is - * not actually used for encoding. - */ - AVCodecContext *codec; - void *priv_data; - - /** - * encoding: pts generation when outputting stream - */ - struct AVFrac pts; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: set by libavformat in avformat_write_header. The muxer may use the - * user-provided value of @ref AVCodecContext.time_base "codec->time_base" - * as a hint. - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - int disposition; /**< AV_DISPOSITION_* bit field */ - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * Stream information used internally by av_find_stream_info() - */ -#define MAX_STD_TIMEBASES (60*12+6) - struct { - int64_t last_dts; - int64_t duration_gcd; - int duration_count; - double (*duration_error)[2][MAX_STD_TIMEBASES]; - int64_t codec_info_duration; - int64_t codec_info_duration_fields; - int found_decoder; - - int64_t last_duration; - - /** - * Those are used for average framerate estimation. - */ - int64_t fps_first_dts; - int fps_first_dts_idx; - int64_t fps_last_dts; - int fps_last_dts_idx; - - } *info; - - int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ - - // Timestamp generation support: - /** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - */ - int64_t reference_dts; - int64_t first_dts; - int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; - - /** - * Number of packets to buffer for codec probing - */ -#define MAX_PROBE_PACKETS 2500 - int probe_packets; - - /** - * Number of frames that have been demuxed during av_find_stream_info() - */ - int codec_info_nb_frames; - - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - - /** - * last packet in packet_buffer for this stream when muxing. - */ - struct AVPacketList *last_in_packet_buffer; - AVProbeData probe_data; -#define MAX_REORDER_DELAY 16 - int64_t pts_buffer[MAX_REORDER_DELAY+1]; - - AVIndexEntry *index_entries; /**< Only used if the format does not - support seeking natively. */ - int nb_index_entries; - unsigned int index_entries_allocated_size; - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - * - * Code outside avformat should access this field using: - * av_stream_get/set_r_frame_rate(stream) - */ - AVRational r_frame_rate; - - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - - int64_t interleaver_chunk_size; - int64_t interleaver_chunk_duration; - - /** - * stream probing state - * -1 -> probing finished - * 0 -> no probing requested - * rest -> perform probing with request_probe being the minimum score to accept. - * NOT PART OF PUBLIC API - */ - int request_probe; - /** - * Indicates that everything up to the next keyframe - * should be discarded. - */ - int skip_to_keyframe; - - /** - * Number of samples to skip at the start of the frame decoded from the next packet. - */ - int skip_samples; - - /** - * Number of internally decoded frames, used internally in libavformat, do not access - * its lifetime differs from info which is why it is not in that structure. - */ - int nb_decoded_frames; - - /** - * Timestamp offset added to timestamps before muxing - * NOT PART OF PUBLIC API - */ - int64_t mux_ts_offset; - - /** - * Internal data to check for wrapping of the time stamp - */ - int64_t pts_wrap_reference; - - /** - * Options for behavior, when a wrap is detected. - * - * Defined by AV_PTS_WRAP_ values. - * - * If correction is enabled, there are two possibilities: - * If the first time stamp is near the wrap point, the wrap offset - * will be subtracted, which will create negative time stamps. - * Otherwise the offset will be added. - */ - int pts_wrap_behavior; - -} AVStream; - -AVRational av_stream_get_r_frame_rate(const AVStream *s); -void av_stream_set_r_frame_rate(AVStream *s, AVRational r); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ - -typedef struct AVChapter { - int id; ///< unique ID to identify the chapter - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - */ -typedef struct AVFormatContext { - /** - * A class for logging and AVOptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * Can only be iformat or oformat, not both at the same time. - * - * decoding: set by avformat_open_input(). - * encoding: set by the user. - */ - struct AVInputFormat *iformat; - struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - */ - void *priv_data; - - /** - * I/O context. - * - * decoding: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * encoding: set by the user. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ - - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * decoding: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * encoding: streams are created by the user before avformat_write_header(). - */ - unsigned int nb_streams; - AVStream **streams; - - char filename[1024]; /**< input or output filename */ - - /** - * Decoding: position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - */ - int64_t duration; - - /** - * Decoding: total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int bit_rate; - - unsigned int packet_size; - int max_delay; - - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) -#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. - - /** - * decoding: size of data to probe; encoding: unused. - */ - unsigned int probesize; - - /** - * decoding: maximum time (in AV_TIME_BASE units) during which the input should - * be analyzed in avformat_find_stream_info(). - */ - int max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * muxing : unused - * demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - unsigned int nb_chapters; - AVChapter **chapters; - - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the unix epoch (00:00 1st January 1970). That is, pts=0 - * in the stream was captured at this real world time. - * - encoding: Set by user. - * - decoding: Unused. - */ - int64_t start_time_realtime; - - /** - * decoding: number of frames used to probe fps - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * - encoding: unused - * - decoding: Set by user. - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * decoding: set by the user before avformat_open_input(). - * encoding: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * Transport stream id. - * This will be moved into demuxer private options. Thus no API/ABI compatibility - */ - int ts_id; - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user via AVOptions (NO direct access) - * - decoding: unused - */ - int audio_preload; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user via AVOptions (NO direct access) - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user via AVOptions (NO direct access) - * - decoding: unused - */ - int max_chunk_size; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user via AVOptions (NO direct access) - */ - int use_wallclock_as_timestamps; - - /** - * Avoid negative timestamps during muxing. - * 0 -> allow negative timestamps - * 1 -> avoid negative timestamps - * -1 -> choose automatically (default) - * Note, this only works when interleave_packet_per_dts is in use. - * - encoding: Set by user via AVOptions (NO direct access) - * - decoding: unused - */ - int avoid_negative_ts; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user via AVOptions (NO direct access) - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user via AVOptions (NO direct access) - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user via AVOptions (NO direct access) - */ - unsigned int skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user via AVOPtions (NO direct access) - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user via AVOPtions (NO direct access) - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user via AVOptions (NO direct access) - * - decoding: unused - */ - int flush_packets; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - - /** - * This buffer is only needed when packets were already buffered but - * not decoded, for example to get the codec parameters in MPEG - * streams. - */ - struct AVPacketList *packet_buffer; - struct AVPacketList *packet_buffer_end; - - /* av_seek_frame() support */ - int64_t data_offset; /**< offset of the first packet */ - - /** - * Raw packets from the demuxer, prior to parsing and decoding. - * This buffer is used for buffering packets until the codec can - * be identified, as parsing cannot be done without knowing the - * codec. - */ - struct AVPacketList *raw_packet_buffer; - struct AVPacketList *raw_packet_buffer_end; - /** - * Packets split by the parser get queued here. - */ - struct AVPacketList *parse_queue; - struct AVPacketList *parse_queue_end; - /** - * Remaining size available for raw_packet_buffer, in bytes. - */ -#define RAW_PACKET_BUFFER_SIZE 2500000 - int raw_packet_buffer_remaining_size; - - /** - * Offset to remap timestamps to be non-negative. - * Expressed in timebase units. - * @see AVStream.mux_ts_offset - */ - int64_t offset; - - /** - * Timebase for the timestamp offset. - */ - AVRational offset_timebase; - - /** - * IO repositioned flag. - * This is set by avformat when the underlaying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; -} AVFormatContext; - -/** - * Returns the method used to set ctx->duration. - * - * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. - */ -enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); - -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; - - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -/** - * Initialize libavformat and register all the muxers, demuxers and - * protocols. If you do not call this function, then you can select - * exactly which formats you want to support. - * - * @see av_register_input_format() - * @see av_register_output_format() - */ -void av_register_all(void); - -void av_register_input_format(AVInputFormat *format); -void av_register_output_format(AVOutputFormat *format); - -/** - * Do global initialization of network components. This is optional, - * but recommended, since it avoids the overhead of implicitly - * doing the setup for each session. - * - * Calling this function will become mandatory if using network - * protocols at some major version bump. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. - */ -int avformat_network_deinit(void); - -/** - * If f is NULL, returns the first registered input format, - * if f is non-NULL, returns the next registered input format after f - * or NULL if f is the last one. - */ -AVInputFormat *av_iformat_next(AVInputFormat *f); - -/** - * If f is NULL, returns the first registered output format, - * if f is non-NULL, returns the next registered output format after f - * or NULL if f is the last one. - */ -AVOutputFormat *av_oformat_next(AVOutputFormat *f); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * @param c If non-NULL, the AVCodecContext corresponding to the new stream - * will be initialized to use this codec. This is needed for e.g. codec-specific - * defaults to be set, so codec should be provided if it is known. - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -#if FF_API_PKT_DUMP -attribute_deprecated void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload); -attribute_deprecated void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, - int dump_payload); -#endif - -#if FF_API_ALLOC_OUTPUT_CONTEXT -/** - * @deprecated deprecated in favor of avformat_alloc_output_context2() - */ -attribute_deprecated -AVFormatContext *avformat_alloc_output_context(const char *format, - AVOutputFormat *oformat, - const char *filename); -#endif - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param *ctx is set to the created format context, or to NULL in - * case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param filename the filename of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, - const char *filename, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with av_close_input_file(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). - * May be a pointer to NULL, in which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed on failure. - * @param filename Name of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, a negative AVERROR on failure. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options); - -attribute_deprecated -int av_demuxer_open(AVFormatContext *ic); - -#if FF_API_FORMAT_PARAMETERS -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @return >=0 if OK, AVERROR_xxx on error - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - * - * @deprecated use avformat_find_stream_info. - */ -attribute_deprecated -int av_find_stream_info(AVFormatContext *ic); -#endif - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - AVCodec **decoder_ret, - int flags); - -#if FF_API_READ_PACKET -/** - * @deprecated use AVFMT_FLAG_NOFILLIN | AVFMT_FLAG_NOPARSE to read raw - * unprocessed packets - * - * Read a transport packet from a media file. - * - * This function is obsolete and should never be used. - * Use av_read_frame() instead. - * - * @param s media file handle - * @param pkt is filled - * @return 0 if OK, AVERROR_xxx on error - */ -attribute_deprecated -int av_read_packet(AVFormatContext *s, AVPacket *pkt); -#endif - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * If pkt->buf is NULL, then the packet is valid until the next - * av_read_frame() or until av_close_input_file(). Otherwise the packet is valid - * indefinitely. In both cases the packet must be freed with - * av_free_packet when it is no longer needed. For video, the packet contains - * exactly one frame. For audio, it contains an integer number of frames if each - * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames - * have a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * @param stream_index If stream_index is (-1), a default - * stream is selected, and timestamp is automatically converted - * from AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units - * or, if no stream is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - * Thus do not use this yet. It may change at any time, do not expect - * ABI compatibility yet! - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -#if FF_API_CLOSE_INPUT_FILE -/** - * @deprecated use avformat_close_input() - * Close a media file (but not its codecs). - * - * @param s media file handle - */ -attribute_deprecated -void av_close_input_file(AVFormatContext *s); -#endif - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#if FF_API_NEW_STREAM -/** - * Add a new stream to a media file. - * - * Can only be called in the read_header() function. If the flag - * AVFMTCTX_NOHEADER is in the format context, then new streams - * can be added in read_packet too. - * - * @param s media file handle - * @param id file-format-dependent stream ID - */ -attribute_deprecated -AVStream *av_new_stream(AVFormatContext *s, int id); -#endif - -#if FF_API_SET_PTS_INFO -/** - * @deprecated this function is not supposed to be called outside of lavf - */ -attribute_deprecated -void av_set_pts_info(AVStream *s, int pts_wrap_bits, - unsigned int pts_num, unsigned int pts_den); -#endif - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with avformat_alloc_context(). - * Its oformat field must be set to the desired output format; - * Its pb field must be set to an already opened AVIOContext. - * @param options An AVDictionary filled with AVFormatContext and muxer-private options. - * On return this parameter will be destroyed and replaced with a dict containing - * options that were not found. May be NULL. - * - * @return 0 on success, negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next. - */ -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * The packet shall contain one audio or video frame. - * The packet must be correctly interleaved according to the container - * specification, if not then av_interleaved_write_frame must be used. - * - * @param s media file handle - * @param pkt The packet, which contains the stream_index, buf/buf_size, - * dts/pts, ... - * This can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, - * for muxers that buffer up data internally before writing it - * to the output. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * The packet must contain one audio or video frame. - * If the packets are already correctly interleaved, the application should - * call av_write_frame() instead as it is slightly faster. It is also important - * to keep in mind that completely non-interleaved input will need huge amounts - * of memory to interleave with this, so it is preferable to interleave at the - * demuxer level. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. pkt->buf must be set - * to a valid AVBufferRef describing the packet data. Libavformat takes - * ownership of this reference and will unref it when it sees fit. The caller - * must not access the data through this reference after this function returns. - * This can be NULL (at any time, not just at the end), to flush the - * interleaving queues. - * Packet's @ref AVPacket.stream_index "stream_index" field must be set to the - * index of the corresponding stream in @ref AVFormatContext.streams - * "s.streams". - * It is very strongly recommended that timing information (@ref AVPacket.pts - * "pts", @ref AVPacket.dts "dts" @ref AVPacket.duration "duration") is set to - * correct values. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it - * Note: some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, AVPacket *pkt, int dump_payload, AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload, - AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are - * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the - * following code: - * @code - * uint32_t tag = MKTAG('H', '2', '6', '4'); - * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; - * enum AVCodecID id = av_codec_get_id(table, tag); - * @endcode - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/3rdparty/include/ffmpeg_/libavformat/avio.h b/3rdparty/include/ffmpeg_/libavformat/avio.h deleted file mode 100644 index 5bdbc62..0000000 --- a/3rdparty/include/ffmpeg_/libavformat/avio.h +++ /dev/null @@ -1,481 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include - -#include "libavutil/common.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version.h" - - -#define AVIO_SEEKABLE_NORMAL 0x0001 /**< Seeking works like for a local file */ - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Bytestream IO Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int must_flush; /**< true if the next seek should flush */ - int eof_reached; /**< true if eof reached */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - int error; /**< contains the error code or 0 if no error happened */ - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * max filesize, used to limit allocations - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t maxsize; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * Bytes read statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int64_t bytes_read; - - /** - * seek statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int seek_count; - - /** - * writeout statistic - * This field is internal to libavformat and access from outside is not allowed. - */ - int writeout_count; -} AVIOContext; - -/* unbuffered I/O */ - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with av_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Passing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Oring this flag as into the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * feof() equivalent for AVIOContext. - * @return non zero if and only if end of file - */ -int url_feof(AVIOContext *s); - -/** @warning currently size is limited */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Force flushing of buffered data to the output s. - * - * Force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of FF_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -#endif /* AVFORMAT_AVIO_H */ diff --git a/3rdparty/include/ffmpeg_/libavformat/version.h b/3rdparty/include/ffmpeg_/libavformat/version.h deleted file mode 100644 index fd00994..0000000 --- a/3rdparty/include/ffmpeg_/libavformat/version.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/avutil.h" - -#define LIBAVFORMAT_VERSION_MAJOR 55 -#define LIBAVFORMAT_VERSION_MINOR 12 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_OLD_AVIO -#define FF_API_OLD_AVIO (LIBAVFORMAT_VERSION_MAJOR < 55) -#endif -#ifndef FF_API_PKT_DUMP -#define FF_API_PKT_DUMP (LIBAVFORMAT_VERSION_MAJOR < 54) -#endif -#ifndef FF_API_ALLOC_OUTPUT_CONTEXT -#define FF_API_ALLOC_OUTPUT_CONTEXT (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_FORMAT_PARAMETERS -#define FF_API_FORMAT_PARAMETERS (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_NEW_STREAM -#define FF_API_NEW_STREAM (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_SET_PTS_INFO -#define FF_API_SET_PTS_INFO (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_CLOSE_INPUT_FILE -#define FF_API_CLOSE_INPUT_FILE (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_READ_PACKET -#define FF_API_READ_PACKET (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_ASS_SSA -#define FF_API_ASS_SSA (LIBAVFORMAT_VERSION_MAJOR < 56) -#endif -#ifndef FF_API_R_FRAME_RATE -#define FF_API_R_FRAME_RATE 1 -#endif -#endif /* AVFORMAT_VERSION_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/adler32.h b/3rdparty/include/ffmpeg_/libavutil/adler32.h deleted file mode 100644 index 8c08d2b..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/adler32.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include "attributes.h" - -/** - * @defgroup lavu_adler32 Adler32 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, - unsigned int len) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/aes.h b/3rdparty/include/ffmpeg_/libavutil/aes.h deleted file mode 100644 index 09efbda..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * @param count number of 16 byte blocks - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/attributes.h b/3rdparty/include/ffmpeg_/libavutil/attributes.h deleted file mode 100644 index 64b46f6..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/attributes.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#ifndef av_restrict -#define av_restrict restrict -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - - -#if defined(__GNUC__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#ifdef __GNUC__ -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/audio_fifo.h b/3rdparty/include/ffmpeg_/libavutil/audio_fifo.h deleted file mode 100644 index 55a538e..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/audio_fifo.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of Libav. - * - * Libav 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. - * - * Libav 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 Libav; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "avutil.h" -#include "fifo.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/audioconvert.h b/3rdparty/include/ffmpeg_/libavutil/audioconvert.h deleted file mode 100644 index 300a67c..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/audioconvert.h +++ /dev/null @@ -1,6 +0,0 @@ - -#include "version.h" - -#if FF_API_AUDIOCONVERT -#include "channel_layout.h" -#endif diff --git a/3rdparty/include/ffmpeg_/libavutil/avassert.h b/3rdparty/include/ffmpeg_/libavutil/avassert.h deleted file mode 100644 index 41f5e0e..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/avassert.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#include "avutil.h" -#include "log.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speedloss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#else -#define av_assert2(cond) ((void)0) -#endif - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/avconfig.h b/3rdparty/include/ffmpeg_/libavutil/avconfig.h deleted file mode 100644 index f6685b7..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/avconfig.h +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated by ffconf */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 1 -#define AV_HAVE_INCOMPATIBLE_LIBAV_ABI 0 -#define AV_HAVE_INCOMPATIBLE_FORK_ABI 0 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/avstring.h b/3rdparty/include/ffmpeg_/libavutil/avstring.h deleted file mode 100644 index 438ef79..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/avstring.h +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include "attributes.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -/** - * Convert a number to a av_malloced string. - */ -char *av_d2str(double d); - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -int av_isdigit(int c); - -/** - * Locale-independent conversion of ASCII isgraph. - */ -int av_isgraph(int c); - -/** - * Locale-independent conversion of ASCII isspace. - */ -int av_isspace(int c); - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -int av_isxdigit(int c); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - - -/** - * Thread safe basename. - * @param path the path, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the path, on DOS both \ and / are considered separators. - * @return the path with the separator replaced by the string terminator or ".". - * @note the function may change the input string. - */ -const char *av_dirname(char *path); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE 0x01 - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT 0x02 - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/avutil.h b/3rdparty/include/ffmpeg_/libavutil/avutil.h deleted file mode 100644 index 4986f4f..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/avutil.h +++ /dev/null @@ -1,314 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * external API header - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref lpp "libpostproc" post processing library - * @li @ref lsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu Common utility functions - * - * @brief - * libavutil contains the code shared across all the other FFmpeg - * libraries - * - * @note In order to use the functions provided by avutil you must include - * the specific header. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Maths - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup lavu_internal Internal - * - * Not exported functions, for internal usage only - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/blowfish.h b/3rdparty/include/ffmpeg_/libavutil/blowfish.h deleted file mode 100644 index 0b00453..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/blowfish.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/bprint.h b/3rdparty/include/ffmpeg_/libavutil/bprint.h deleted file mode 100644 index dc86f12..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/bprint.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include "attributes.h" -#include "avstring.h" - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ -#define FF_PAD_STRUCTURE(size, ...) \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct { __VA_ARGS__ })]; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local "char buf[512]". - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, buf->len can be greater than buf->size and records the - * total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The size_max field determines several possible behaviours: - * - * size_max = -1 (= UINT_MAX) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - * size_max = 0 prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using size_init = size_max = len + 1). - * - * size_max = 1 is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ -typedef struct AVBPrint { - FF_PAD_STRUCTURE(1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; - ) -} AVBPrint; - -/** - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -#define AV_BPRINT_SIZE_AUTOMATIC 1 -#define AV_BPRINT_SIZE_COUNT_ONLY 0 - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * 0 means do not write anything, just count the length; - * 1 is replaced by the maximum value for automatic storage; - * any large value means that the internal buffer will be - * reallocated as needed up to that limit; -1 is converted to - * UINT_MAX, the largest limit possible. - * Check also AV_BPRINT_SIZE_* macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * param buf bprint buffer to use - * param fmt date and time format string, see strftime() - * param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#endif /* AVUTIL_BPRINT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/bswap.h b/3rdparty/include/ffmpeg_/libavutil/bswap.h deleted file mode 100644 index 06f6548..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/bswap.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_AVR32 -# include "avr32/bswap.h" -#elif ARCH_BFIN -# include "bfin/bswap.h" -#elif ARCH_SH4 -# include "sh4/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/buffer.h b/3rdparty/include/ffmpeg_/libavutil/buffer.h deleted file mode 100644 index b4399fd..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/buffer.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ - int size; -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -AVBufferRef *av_buffer_alloc(int size); - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -AVBufferRef *av_buffer_allocz(int size); - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -AVBufferRef *av_buffer_create(uint8_t *data, int size, - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -int av_buffer_realloc(AVBufferRef **buf, int size); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - * @see av_buffer_pool_can_uninit() - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/channel_layout.h b/3rdparty/include/ffmpeg_/libavutil/channel_layout.h deleted file mode 100644 index 2906098..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/channel_layout.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include - -/** - * @file - * audio channel layout utility functions - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup channel_masks Audio channel masks - * - * A channel layout is a 64-bits integer with a bit set for every channel. - * The number of bits set must be equal to the number of channels. - * The value 0 means that the channel layout is not known. - * @note this data structure is not powerful enough to handle channels - * combinations that have the same channel multiple times, such as - * dual-mono. - * - * @{ - */ -#define AV_CH_FRONT_LEFT 0x00000001 -#define AV_CH_FRONT_RIGHT 0x00000002 -#define AV_CH_FRONT_CENTER 0x00000004 -#define AV_CH_LOW_FREQUENCY 0x00000008 -#define AV_CH_BACK_LEFT 0x00000010 -#define AV_CH_BACK_RIGHT 0x00000020 -#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 -#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 -#define AV_CH_BACK_CENTER 0x00000100 -#define AV_CH_SIDE_LEFT 0x00000200 -#define AV_CH_SIDE_RIGHT 0x00000400 -#define AV_CH_TOP_CENTER 0x00000800 -#define AV_CH_TOP_FRONT_LEFT 0x00001000 -#define AV_CH_TOP_FRONT_CENTER 0x00002000 -#define AV_CH_TOP_FRONT_RIGHT 0x00004000 -#define AV_CH_TOP_BACK_LEFT 0x00008000 -#define AV_CH_TOP_BACK_CENTER 0x00010000 -#define AV_CH_TOP_BACK_RIGHT 0x00020000 -#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. -#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. -#define AV_CH_WIDE_LEFT 0x0000000080000000ULL -#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL -#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL -#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL -#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL - -/** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output - to be the native codec channel order. */ -#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL - -/** - * @} - * @defgroup channel_mask_c Audio channel convenience macros - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_NB -}; - -/** - * @} - */ - -/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, - * separated by '+' or '|': - * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, - * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); - * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, - * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, optionally followed by 'c', yielding - * the default channel layout for that number of channels (@see - * av_get_default_channel_layout); - * - a channel layout mask, in hexadecimal starting with "0x" (see the - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" - */ -uint64_t av_get_channel_layout(const char *name); - -/** - * Return a description of a channel layout. - * If nb_channels is <= 0, it is guessed from the channel_layout. - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer - */ -void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - -struct AVBPrint; -/** - * Append a description of a channel layout to a bprint buffer. - */ -void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - -/** - * Return the number of channels in the channel layout. - */ -int av_get_channel_layout_nb_channels(uint64_t channel_layout); - -/** - * Return default channel layout for a given number of channels. - */ -int64_t av_get_default_channel_layout(int nb_channels); - -/** - * Get the index of a channel in channel_layout. - * - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. - */ -int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - -/** - * Get the channel with the given index in channel_layout. - */ -uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - -/** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. - */ -const char *av_get_channel_name(uint64_t channel); - -/** - * Get the description of a given channel. - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error - */ -const char *av_get_channel_description(uint64_t channel); - -/** - * Get the value and name of a standard channel layout. - * - * @param[in] index index in an internal list, starting at 0 - * @param[out] layout channel layout mask - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits - */ -int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); - -/** - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/common.h b/3rdparty/include/ffmpeg_/libavutil/common.h deleted file mode 100644 index c7c32fd..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/common.h +++ /dev/null @@ -1,459 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "version.h" -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* assume a>0 and b>0 */ -#define FF_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) -#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) -#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) -#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) - -#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) -#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) -#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) - -/* misc math functions */ - -/** - * Reverse the order of the bits of an 8-bits unsigned integer. - */ -#if FF_API_AV_REVERSE -extern attribute_deprecated const uint8_t av_reverse[256]; -#endif - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - -/* Pull in unguarded fallback defines at the end of this file. */ -#include "common.h" - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (-a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (-a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (a>>63) ^ 0x7FFFFFFF; - else return (int32_t)a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1<> 31 & ((1<= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a double value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount(x >> 32); -} - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= GET_BYTE;\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - ERROR\ - while (val & top) {\ - int tmp= GET_BYTE - 128;\ - if(tmp>>6)\ - ERROR\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = GET_16BIT;\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = GET_16BIT - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - ERROR\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* AVUTIL_COMMON_H */ - -/* - * The following definitions are outside the multiple inclusion guard - * to ensure they are immediately available in intmath.h. - */ - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif diff --git a/3rdparty/include/ffmpeg_/libavutil/cpu.h b/3rdparty/include/ffmpeg_/libavutil/cpu.h deleted file mode 100644 index df8ef87..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/cpu.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include "attributes.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -// #if LIBAVUTIL_VERSION_MAJOR <52 -#define AV_CPU_FLAG_CMOV 0x1001000 ///< supports cmov instruction -// #else -// #define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -// #endif - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in a application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Set a mask on flags returned by av_get_cpu_flags(). - * This function is mainly useful for testing. - * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - * - * @warning this function is not thread safe. - */ -attribute_deprecated void av_set_cpu_flags_mask(int mask); - -/** - * Parse CPU flags from a string. - * - * The returned flags contain the specified flags as well as related unspecified flags. - * - * This function exists only for compatibility with libav. - * Please use av_parse_cpu_caps() when possible. - * @return a combination of AV_CPU_* flags, negative on error. - */ -attribute_deprecated -int av_parse_cpu_flags(const char *s); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/* The following CPU-specific functions shall not be called directly. */ -int ff_get_cpu_flags_arm(void); -int ff_get_cpu_flags_ppc(void); -int ff_get_cpu_flags_x86(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/crc.h b/3rdparty/include/ffmpeg_/libavutil/crc.h deleted file mode 100644 index 1bb0cc7..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/crc.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_crc32 CRC32 - * @ingroup lavu_crypto - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param crc CRC of previous blocks if any or initial value for CRC - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/dict.h b/3rdparty/include/ffmpeg_/libavutil/dict.h deleted file mode 100644 index 38f03a4..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/dict.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key:value pairs. To create - * an AVDictionary, simply pass an address of a NULL pointer to - * av_dict_set(). NULL can be used as an empty dictionary wherever - * a pointer to an AVDictionary is required. - * Use av_dict_get() to retrieve an entry or iterate over all - * entries and finally av_dict_free() to free the dictionary - * and all its contents. - * - * @code - * AVDictionary *d = NULL; // "create" an empty dictionary - * av_dict_set(&d, "foo", "bar", 0); // add an entry - * - * char *k = av_strdup("key"); // if your strings are already allocated, - * char *v = av_strdup("value"); // you can avoid copying them like this - * av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - * - * AVDictionaryEntry *t = NULL; - * while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { - * <....> // iterate over all entries in d - * } - * - * av_dict_free(&d); - * @endcode - * - */ - -#define AV_DICT_MATCH_CASE 1 -#define AV_DICT_IGNORE_SUFFIX 2 -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() and children. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() and chilren. */ -#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param flags Allows case as well as suffix-insensitive comparisons. - * @return Found entry or NULL, changing key or value leads to undefined behavior. - */ -AVDictionaryEntry * -av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key entry key to add to *pm (will be av_strduped depending on flags) - * @param value entry value to add to *pm (will be av_strduped depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Parse the key/value pairs list and add to a dictionary. - * - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @param flags flags to use when adding to dictionary. - * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting entries in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - */ -void av_dict_copy(AVDictionary **dst, AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/error.h b/3rdparty/include/ffmpeg_/libavutil/error.h deleted file mode 100644 index f3fd7bb..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/error.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/eval.h b/3rdparty/include/ffmpeg_/libavutil/eval.h deleted file mode 100644 index a1d1fe3..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/eval.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -#include "avutil.h" - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_ctx parent logging context - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_ctx parent logging context - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value for - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/fifo.h b/3rdparty/include/ffmpeg_/libavutil/fifo.h deleted file mode 100644 index 849b9a6..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/fifo.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * a very simple circular buffer FIFO implementation - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; - uint32_t rndx, wndx; -} AVFifoBuffer; - -/** - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure - */ -AVFifoBuffer *av_fifo_alloc(unsigned int size); - -/** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free - */ -void av_fifo_free(AVFifoBuffer *f); - -/** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset - */ -void av_fifo_reset(AVFifoBuffer *f); - -/** - * Return the amount of data in bytes in the AVFifoBuffer, that is the - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size - */ -int av_fifo_size(AVFifoBuffer *f); - -/** - * Return the amount of space in bytes in the AVFifoBuffer, that is the - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size - */ -int av_fifo_space(AVFifoBuffer *f); - -/** - * Feed data from an AVFifoBuffer to a user-supplied callback. - * @param f AVFifoBuffer to read from - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination - */ -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - -/** - * Feed data from a user-supplied callback to an AVFifoBuffer. - * @param f AVFifoBuffer to write to - * @param src data source; non-const since it may be used as a - * modifiable context by the function defined in func - * @param size number of bytes to write - * @param func generic write function; the first parameter is src, - * the second is dest_buf, the third is dest_buf_size. - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. - * @return the number of bytes written to the FIFO - */ -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - -/** - * Resize an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - -/** - * Enlarge an AVFifoBuffer. - * In case of reallocation failure, the old FIFO is kept unchanged. - * The new fifo size may be larger than the requested size. - * - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise - */ -int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - -/** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes - */ -void av_fifo_drain(AVFifoBuffer *f, int size); - -/** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. - * - * @param f AVFifoBuffer to peek at, f must be non-NULL - * @param offs an offset in bytes, its absolute value must be less - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). - */ -static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) -{ - uint8_t *ptr = f->rptr + offs; - if (ptr >= f->end) - ptr = f->buffer + (ptr - f->end); - else if (ptr < f->buffer) - ptr = f->end - (f->buffer - ptr); - return ptr; -} - -#endif /* AVUTIL_FIFO_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/file.h b/3rdparty/include/ffmpeg_/libavutil/file.h deleted file mode 100644 index a7364fe..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/file.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include - -#include "avutil.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * The returned buffer must be released with av_file_unmap(). - * - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -/** - * Wrapper to work around the lack of mkstemp() on mingw. - * Also, tries to create file in /tmp first, if possible. - * *prefix can be a character constant; *filename will be allocated internally. - * @return file descriptor of opened file (or -1 on error) - * and opened file name in **filename. - * @note On very old libcs it is necessary to set a secure umask before - * calling this, av_tempfile() can't call umask itself as it is used in - * libraries and could interfere with the calling application. - */ -int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); - -#endif /* AVUTIL_FILE_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/frame.h b/3rdparty/include/ffmpeg_/libavutil/frame.h deleted file mode 100644 index 39a664f..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/frame.h +++ /dev/null @@ -1,607 +0,0 @@ -/* - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include - -#include "libavcodec/version.h" - -#include "avutil.h" -#include "buffer.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, -}; - -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; - int size; - AVDictionary *metadata; -} AVFrameSideData; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * Similarly fields that are marked as to be only accessed by - * av_opt_ptr() can be reordered. This allows 2 forks to add fields - * without breaking compatibility with each other. - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, size in bytes of each picture line. - * For audio, size in bytes of each plane. - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiplies of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * width and height of the video frame - */ - int width, height; - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * 1 -> keyframe, 0-> not - */ - int key_frame; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - -#if FF_API_AVFRAME_LAVC - attribute_deprecated - uint8_t *base[AV_NUM_DATA_POINTERS]; -#endif - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - - /** - * PTS copied from the AVPacket that was decoded to produce this frame. - */ - int64_t pkt_pts; - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isnt used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * picture number in bitstream order - */ - int coded_picture_number; - /** - * picture number in display order - */ - int display_picture_number; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - -#if FF_API_AVFRAME_LAVC - attribute_deprecated - int reference; - - /** - * QP table - */ - attribute_deprecated - int8_t *qscale_table; - /** - * QP store stride - */ - attribute_deprecated - int qstride; - - attribute_deprecated - int qscale_type; - - /** - * mbskip_table[mb]>=1 if MB didn't change - * stride= mb_width = (width+15)>>4 - */ - attribute_deprecated - uint8_t *mbskip_table; - - /** - * motion vector table - * @code - * example: - * int mv_sample_log2= 4 - motion_subsample_log2; - * int mb_width= (width+15)>>4; - * int mv_stride= (mb_width << mv_sample_log2) + 1; - * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; - * @endcode - */ - attribute_deprecated - int16_t (*motion_val[2])[2]; - - /** - * macroblock type table - * mb_type_base + mb_width + 2 - */ - attribute_deprecated - uint32_t *mb_type; - - /** - * DCT coefficients - */ - attribute_deprecated - short *dct_coeff; - - /** - * motion reference frame index - * the order in which these are stored can depend on the codec. - */ - attribute_deprecated - int8_t *ref_index[2]; -#endif - - /** - * for some private data of the user - */ - void *opaque; - - /** - * error - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - -#if FF_API_AVFRAME_LAVC - attribute_deprecated - int type; -#endif - - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) - */ - int repeat_pict; - - /** - * The content of the picture is interlaced. - */ - int interlaced_frame; - - /** - * If the content is interlaced, is top field displayed first. - */ - int top_field_first; - - /** - * Tell user application that palette has changed from previous frame. - */ - int palette_has_changed; - -#if FF_API_AVFRAME_LAVC - attribute_deprecated - int buffer_hints; - - /** - * Pan scan. - */ - attribute_deprecated - struct AVPanScan *pan_scan; -#endif - - /** - * reordered opaque 64bit (generally an integer or a double precision float - * PTS but can be anything). - * The user sets AVCodecContext.reordered_opaque to represent the input at - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque - * @deprecated in favor of pkt_pts - */ - int64_t reordered_opaque; - -#if FF_API_AVFRAME_LAVC - /** - * @deprecated this field is unused - */ - attribute_deprecated void *hwaccel_picture_private; - - attribute_deprecated - struct AVCodecContext *owner; - attribute_deprecated - void *thread_opaque; - - /** - * log2 of the size of the block which a single vector in motion_val represents: - * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) - */ - attribute_deprecated - uint8_t motion_subsample_log2; -#endif - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * Channel layout of the audio data. - */ - uint64_t channel_layout; - - /** - * AVBuffer references backing the data for this frame. If all elements of - * this array are NULL, then this frame is not reference counted. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * Code outside libavcodec should access this field using: - * av_frame_get_best_effort_timestamp(frame) - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * reordered pos from the last AVPacket that has been input into the decoder - * Code outside libavcodec should access this field using: - * av_frame_get_pkt_pos(frame) - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_pos; - - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * Code outside libavcodec should access this field using: - * av_frame_get_pkt_duration(frame) - * - encoding: unused - * - decoding: Read by user. - */ - int64_t pkt_duration; - - /** - * metadata. - * Code outside libavcodec should access this field using: - * av_frame_get_metadata(frame) - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * Code outside libavcodec should access this field using: - * av_frame_get_decode_error_flags(frame) - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 - - /** - * number of audio channels, only used for audio. - * Code outside libavcodec should access this field using: - * av_frame_get_channels(frame) - * - encoding: unused - * - decoding: Read by user. - */ - int channels; - - /** - * size of the corresponding packet containing the compressed - * frame. It must be accessed using av_frame_get_pkt_size() and - * av_frame_set_pkt_size(). - * It is set to a negative value if unknown. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int pkt_size; - - /** - * Not to be accessed directly from outside libavutil - */ - AVBufferRef *qp_table_buf; -} AVFrame; - -/** - * Accessors for some AVFrame fields. - * The position of these field in the structure is not part of the ABI, - * they should not be accessed directly outside libavcodec. - */ -int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); -void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); -int64_t av_frame_get_pkt_duration (const AVFrame *frame); -void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); -int64_t av_frame_get_pkt_pos (const AVFrame *frame); -void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); -int64_t av_frame_get_channel_layout (const AVFrame *frame); -void av_frame_set_channel_layout (AVFrame *frame, int64_t val); -int av_frame_get_channels (const AVFrame *frame); -void av_frame_set_channels (AVFrame *frame, int val); -int av_frame_get_sample_rate (const AVFrame *frame); -void av_frame_set_sample_rate (AVFrame *frame, int val); -AVDictionary *av_frame_get_metadata (const AVFrame *frame); -void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); -int av_frame_get_decode_error_flags (const AVFrame *frame); -void av_frame_set_decode_error_flags (AVFrame *frame, int val); -int av_frame_get_pkt_size(const AVFrame *frame); -void av_frame_set_pkt_size(AVFrame *frame, int val); -AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); -int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); -int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Setup a new reference to the data described by an given frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everythnig contained in src to dst and reset src. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and channel_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @param frame frame in which to store the new buffers. - * @param align required buffer size alignment - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, - int size); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(AVFrame *frame, - enum AVFrameSideDataType type); - -#endif /* AVUTIL_FRAME_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/hmac.h b/3rdparty/include/ffmpeg_/libavutil/hmac.h deleted file mode 100644 index d36d4de..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/hmac.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224 = 10, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/imgutils.h b/3rdparty/include/ffmpeg_/libavutil/imgutils.h deleted file mode 100644 index ab32d66..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/imgutils.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include "avutil.h" -#include "pixdesc.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst_linesize linesize for the image plane in dst - * @param src_linesize linesize for the image plane in src - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_linesizes linesizes for the image in dst_data - * @param src_linesizes linesizes for the image in src_data - */ -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesizes linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param[in] align the assumed linesize alignment - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesizes linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/intfloat.h b/3rdparty/include/ffmpeg_/libavutil/intfloat.h deleted file mode 100644 index 38d26ad..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of Libav. - * - * Libav 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. - * - * Libav 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 Libav; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/intfloat_readwrite.h b/3rdparty/include/ffmpeg_/libavutil/intfloat_readwrite.h deleted file mode 100644 index 9709f4d..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/intfloat_readwrite.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_READWRITE_H -#define AVUTIL_INTFLOAT_READWRITE_H - -#include -#include "attributes.h" - -/* IEEE 80 bits extended float */ -typedef struct AVExtFloat { - uint8_t exponent[2]; - uint8_t mantissa[8]; -} AVExtFloat; - -attribute_deprecated double av_int2dbl(int64_t v) av_const; -attribute_deprecated float av_int2flt(int32_t v) av_const; -attribute_deprecated double av_ext2dbl(const AVExtFloat ext) av_const; -attribute_deprecated int64_t av_dbl2int(double d) av_const; -attribute_deprecated int32_t av_flt2int(float d) av_const; -attribute_deprecated AVExtFloat av_dbl2ext(double d) av_const; - -#endif /* AVUTIL_INTFLOAT_READWRITE_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/intreadwrite.h b/3rdparty/include/ffmpeg_/libavutil/intreadwrite.h deleted file mode 100644 index 7ee6977..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/intreadwrite.h +++ /dev/null @@ -1,621 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/intreadwrite.h" -#elif ARCH_AVR32 -# include "avr32/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_TOMI -# include "tomi/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) && !defined(__TI_COMPILER_VERSION__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(__DECC) - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, darg) do { \ - unsigned d = (darg); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, darg) do { \ - unsigned d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, darg) do { \ - unsigned d = (darg); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, darg) do { \ - unsigned d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/lfg.h b/3rdparty/include/ffmpeg_/libavutil/lfg.h deleted file mode 100644 index ec90562..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/lfg.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - return c->state[c->index++ & 63]; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - return c->state[c->index++ & 63] = 2*a*b+a+b; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/log.h b/3rdparty/include/ffmpeg_/libavutil/log.h deleted file mode 100644 index 7ea95fa..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/log.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "avutil.h" -#include "attributes.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_NB, ///< not part of ABI/API -}AVClassCategory; - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * a pointer to the first option specified in the class if any or NULL - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added without requiring major - * version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where log_level_offset is stored. - * 0 means there is no such variable - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an av_log() implementation - * could then leverage to display the parent context. - * The offset can be NULL. - */ - int parent_log_context_offset; - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - - /** - * Return an AVClass corresponding to the next potential - * AVOptions-enabled child. - * - * The difference between child_next and this is that - * child_next iterates over _already existing_ objects, while - * child_class_next iterates over _all possible_ children. - */ - const struct AVClass* (*child_class_next)(const struct AVClass *prev); - - /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) - */ - AVClassCategory category; - - /** - * Callback to return the category. - * available since version (51 << 16 | 59 << 8 | 100) - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - * available since version (52.12) - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); -} AVClass; - -/* av_log API */ - -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -#define AV_LOG_INFO 32 -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -#define AV_LOG_MAX_OFFSET (AV_LOG_DEBUG - AV_LOG_QUIET) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different av_vlog callback - * function. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @see av_vlog - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -void av_vlog(void *avcl, int level, const char *fmt, va_list); -int av_log_get_level(void); -void av_log_set_level(int); -void av_log_set_callback(void (*)(void*, int, const char*, va_list)); -void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formated line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * av_dlog macros - * Useful to print debug messages that shouldn't get compiled in normally. - */ - -#ifdef DEBUG -# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__) -#else -# define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) -#endif - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 -void av_log_set_flags(int arg); - -#endif /* AVUTIL_LOG_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/lzo.h b/3rdparty/include/ffmpeg_/libavutil/lzo.h deleted file mode 100644 index c034039..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/mathematics.h b/3rdparty/include/ffmpeg_/libavutil/mathematics.h deleted file mode 100644 index 71f0392..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/mathematics.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * @{ - */ - - -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - AV_ROUND_PASS_MINMAX = 8192, ///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE -}; - -/** - * Return the greatest common divisor of a and b. - * If both a and b are 0 or either or both are <0 then behavior is - * undefined. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * A simple a*b/c isn't possible as it can overflow. - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * A simple a*b/c isn't possible as it can overflow. - * - * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is - * INT64_MIN or INT64_MAX then a is passed through unchanged. - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is - * INT64_MIN or INT64_MAX then a is passed through unchanged. - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding) av_const; - -/** - * Compare 2 timestamps each in its own timebases. - * The result of the function is undefined if one of the timestamps - * is outside the int64_t range when represented in the others timebase. - * @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare 2 integers modulo mod. - * That is we compare integers a and b for which only the least - * significant log2(mod) bits are known. - * - * @param mod must be a power of 2 - * @return a negative value if a is smaller than b - * a positive value if a is greater than b - * 0 if a equals b - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * @param in_ts Input timestamp - * @param in_tb Input timesbase - * @param fs_tb Duration and *last timebase - * @param duration duration till the next call - * @param out_tb Output timesbase - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/md5.h b/3rdparty/include/ffmpeg_/libavutil/md5.h deleted file mode 100644 index 79702c8..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/md5.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/mem.h b/3rdparty/include/ffmpeg_/libavutil/mem.h deleted file mode 100644 index fb23a69..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/mem.h +++ /dev/null @@ -1,307 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" -#include "error.h" -#include "avutil.h" - -/** - * @addtogroup lavu_mem - * @{ - */ - - -#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v -#elif defined(__TI_COMPILER_VERSION__) - #define DECLARE_ALIGNED(n,t,v) \ - AV_PRAGMA(DATA_ALIGN(v,n)) \ - t __attribute__((aligned(n))) v - #define DECLARE_ASM_CONST(n,t,v) \ - AV_PRAGMA(DATA_ALIGN(v,n)) \ - static const t __attribute__((aligned(n))) v -#elif defined(__GNUC__) - #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v - #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v -#elif defined(_MSC_VER) - #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v - #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v -#else - #define DECLARE_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * Allocate a block of size bytes with alignment suitable for all - * memory accesses (including vectors if available on the CPU). - * @param size Size in bytes for the memory block to be allocated. - * @return Pointer to the allocated block, NULL if the block cannot - * be allocated. - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Helper function to allocate a block of size * nmemb bytes with - * using av_malloc() - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, NULL if the block cannot - * be allocated. - * @see av_malloc() - */ -av_alloc_size(1, 2) static inline void *av_malloc_array(size_t nmemb, size_t size) -{ - if (size <= 0 || nmemb >= INT_MAX / size) - return NULL; - return av_malloc(nmemb * size); -} - -/** - * Allocate or reallocate a block of memory. - * If ptr is NULL and size > 0, allocate a new block. If - * size is zero, free the memory block pointed to by ptr. - * @param ptr Pointer to a memory block already allocated with - * av_malloc(z)() or av_realloc() or NULL. - * @param size Size in bytes for the memory block to be allocated or - * reallocated. - * @return Pointer to a newly reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block. - * @see av_fast_realloc() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate or reallocate a block of memory. - * This function does the same thing as av_realloc, except: - * - It takes two arguments and checks the result of the multiplication for - * integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic "buf = realloc(buf); if (!buf) return -1;". - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate or reallocate an array. - * If ptr is NULL and nmemb > 0, allocate a new block. If - * nmemb is zero, free the memory block pointed to by ptr. - * @param ptr Pointer to a memory block already allocated with - * av_malloc(z)() or av_realloc() or NULL. - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to a newly reallocated block or NULL if the block - * cannot be reallocated or the function is used to free the memory block. - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate or reallocate an array. - * If *ptr is NULL and nmemb > 0, allocate a new block. If - * nmemb is zero, free the memory block pointed to by ptr. - * @param ptr Pointer to a pointer to a memory block already allocated - * with av_malloc(z)() or av_realloc(), or pointer to a pointer to NULL. - * The pointer is updated on success, or freed on failure. - * @param nmemb Number of elements - * @param size Size of the single element - * @return Zero on success, an AVERROR error code on failure. - */ -av_alloc_size(2, 3) int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Free a memory block which has been allocated with av_malloc(z)() or - * av_realloc(). - * @param ptr Pointer to the memory block which should be freed. - * @note ptr = NULL is explicitly allowed. - * @note It is recommended that you use av_freep() instead. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Allocate a block of size bytes with alignment suitable for all - * memory accesses (including vectors if available on the CPU) and - * zero all the bytes of the block. - * @param size Size in bytes for the memory block to be allocated. - * @return Pointer to the allocated block, NULL if it cannot be allocated. - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a block of nmemb * size bytes with alignment suitable for all - * memory accesses (including vectors if available on the CPU) and - * zero all the bytes of the block. - * The allocation will fail if nmemb * size is greater than or equal - * to INT_MAX. - * @param nmemb - * @param size - * @return Pointer to the allocated block, NULL if it cannot be allocated. - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; - -/** - * Helper function to allocate a block of size * nmemb bytes with - * using av_mallocz() - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, NULL if the block cannot - * be allocated. - * @see av_mallocz() - * @see av_malloc_array() - */ -av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t size) -{ - if (size <= 0 || nmemb >= INT_MAX / size) - return NULL; - return av_mallocz(nmemb * size); -} - -/** - * Duplicate the string s. - * @param s string to be duplicated - * @return Pointer to a newly allocated string containing a - * copy of s or NULL if the string cannot be allocated. - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate the buffer p. - * @param p buffer to be duplicated - * @return Pointer to a newly allocated buffer containing a - * copy of p or NULL if the buffer cannot be allocated. - */ -void *av_memdup(const void *p, size_t size); - -/** - * Free a memory block which has been allocated with av_malloc(z)() or - * av_realloc() and set the pointer pointing to it to NULL. - * @param ptr Pointer to the pointer to the memory block which should - * be freed. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Add an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by nb_ptr - * is incremented. - * In case of failure, the array is freed, *tab_ptr is set to NULL and - * *nb_ptr is set to 0. - * - * @param tab_ptr pointer to the array to grow - * @param nb_ptr pointer to the number of elements in the array - * @param elem element to add - * @see av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size elem_size to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by nb_ptr - * is incremented. - * In case of failure, the array is freed, *tab_ptr is set to NULL and - * *nb_ptr is set to 0. - * - * @param tab_ptr pointer to the array to grow - * @param nb_ptr pointer to the number of elements in the array - * @param elem_size size in bytes of the elements in the array - * @param elem_data pointer to the data of the element to add. If NULL, the space of - * the new added element is not filled. - * @return pointer to the data of the element to copy in the new allocated space. - * If NULL, the new allocated space is left uninitialized." - * @see av_dynarray_add() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * Multiply two size_t values checking for overflow. - * @return 0 if success, AVERROR(EINVAL) if overflow. - */ -static inline int av_size_mult(size_t a, size_t b, size_t *r) -{ - size_t t = a * b; - /* Hack inspired from glibc: only try the division if nelem and elsize - * are both greater than sqrt(SIZE_MAX). */ - if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) - return AVERROR(EINVAL); - *r = t; - return 0; -} - -/** - * Set the maximum size that may me allocated in one block. - */ -void av_max_alloc(size_t max); - -/** - * @brief deliberately overlapping memcpy implementation - * @param dst destination buffer - * @param back how many bytes back we start (the initial size of the overlapping window), must be > 0 - * @param cnt number of bytes to copy, must be >= 0 - * - * cnt > back is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of back. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/murmur3.h b/3rdparty/include/ffmpeg_/libavutil/murmur3.h deleted file mode 100644 index f29ed97..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/murmur3.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include - -struct AVMurMur3 *av_murmur3_alloc(void); -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); -void av_murmur3_init(struct AVMurMur3 *c); -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/old_pix_fmts.h b/3rdparty/include/ffmpeg_/libavutil/old_pix_fmts.h deleted file mode 100644 index 57b6992..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/old_pix_fmts.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * copyright (c) 2006-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OLD_PIX_FMTS_H -#define AVUTIL_OLD_PIX_FMTS_H - -/* - * This header exists to prevent new pixel formats from being accidentally added - * to the deprecated list. - * Do not include it directly. It will be removed on next major bump - * - * Do not add new items to this list. Use the AVPixelFormat enum instead. - */ - PIX_FMT_NONE = AV_PIX_FMT_NONE, - PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - PIX_FMT_GRAY8, ///< Y , 8bpp - PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette - PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range - PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range - PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range - PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing - PIX_FMT_XVMC_MPEG2_IDCT, - PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range - PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 - PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 - - PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 - PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 - - PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - - PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 - PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 - PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 - PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 - PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha - PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian - - //the following 10 formats have the disadvantage of needing 1 format for each bit depth, thus - //If you want to support multiple bit depths, then using PIX_FMT_YUV420P16* with the bpp stored separately - //is better - PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_VDA_VLD, ///< hardware decoding through VDA - -#ifdef AV_PIX_FMT_ABI_GIT_MASTER - PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -#endif - PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big endian - PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little endian - PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big endian - PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little endian - PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big endian - PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little endian - -#ifndef AV_PIX_FMT_ABI_GIT_MASTER - PIX_FMT_RGBA64BE=0x123, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -#endif - PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB... - PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... - PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... - PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... - PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - - PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big endian - PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little endian - PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big endian - PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little endian - - PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -#endif /* AVUTIL_OLD_PIX_FMTS_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/opt.h b/3rdparty/include/ffmpeg_/libavutil/opt.h deleted file mode 100644 index 2344aa7..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/opt.h +++ /dev/null @@ -1,754 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_malloc(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_next() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_next(const AVClass *prev) - * { - * return prev ? NULL : &child_class; - * } - * @endcode - * Putting child_next() and child_class_next() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_next() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_next() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_next() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_next() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This allows to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -enum AVOptionType{ - AV_OPT_TYPE_FLAGS, - AV_OPT_TYPE_INT, - AV_OPT_TYPE_INT64, - AV_OPT_TYPE_DOUBLE, - AV_OPT_TYPE_FLOAT, - AV_OPT_TYPE_STRING, - AV_OPT_TYPE_RATIONAL, - AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - AV_OPT_TYPE_CONST = 128, - AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'), - AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'), - AV_OPT_TYPE_VIDEO_RATE = MKBETAG('V','R','A','T'), ///< offset must point to AVRational - AV_OPT_TYPE_DURATION = MKBETAG('D','U','R',' '), - AV_OPT_TYPE_COLOR = MKBETAG('C','O','L','R'), -#if FF_API_OLD_AVOPTIONS - FF_OPT_TYPE_FLAGS = 0, - FF_OPT_TYPE_INT, - FF_OPT_TYPE_INT64, - FF_OPT_TYPE_DOUBLE, - FF_OPT_TYPE_FLOAT, - FF_OPT_TYPE_STRING, - FF_OPT_TYPE_RATIONAL, - FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - FF_OPT_TYPE_CONST=128, -#endif -}; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - int flags; -#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding -#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding -#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ... -#define AV_OPT_FLAG_AUDIO_PARAM 8 -#define AV_OPT_FLAG_VIDEO_PARAM 16 -#define AV_OPT_FLAG_SUBTITLE_PARAM 32 -#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering -//FIXME think about enc-audio, ... style flags - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - double value_min, value_max; ///< For string ranges this represents the min/max length, for dimensions this represents the min/max pixel count - double component_min, component_max; ///< For string this represents the unicode range for chars, 0-127 limits to ASCII - int is_range; ///< if set to 1 the struct encodes a range, if set to 0 a single value -} AVOptionRange; - -/** - * List of AVOptionRange structs - */ -typedef struct AVOptionRanges { - AVOptionRange **range; - int nb_ranges; -} AVOptionRanges; - - -#if FF_API_FIND_OPT -/** - * Look for an option in obj. Look only for the options which - * have the flags set as specified in mask and flags (that is, - * for which it is the case that opt->flags & mask == flags). - * - * @param[in] obj a pointer to a struct whose first element is a - * pointer to an AVClass - * @param[in] name the name of the option to look for - * @param[in] unit the unit of the option to look for, or any if NULL - * @return a pointer to the option found, or NULL if no option - * has been found - * - * @deprecated use av_opt_find. - */ -attribute_deprecated -const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags); -#endif - -#if FF_API_OLD_AVOPTIONS -/** - * Set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an - * AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. If the field is not of a string - * type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * @param[out] o_out if non-NULL put here a pointer to the AVOption - * found - * @param alloc this parameter is currently ignored - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - * @deprecated use av_opt_set() - */ -attribute_deprecated -int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out); - -attribute_deprecated const AVOption *av_set_double(void *obj, const char *name, double n); -attribute_deprecated const AVOption *av_set_q(void *obj, const char *name, AVRational n); -attribute_deprecated const AVOption *av_set_int(void *obj, const char *name, int64_t n); - -double av_get_double(void *obj, const char *name, const AVOption **o_out); -AVRational av_get_q(void *obj, const char *name, const AVOption **o_out); -int64_t av_get_int(void *obj, const char *name, const AVOption **o_out); -attribute_deprecated const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len); -attribute_deprecated const AVOption *av_next_option(void *obj, const AVOption *last); -#endif - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -#if FF_API_OLD_AVOPTIONS -attribute_deprecated -void av_opt_set_defaults2(void *s, int mask, int flags); -#endif - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); -/** - * Free all string and binary options in obj. - */ -void av_opt_free(void *obj); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#define AV_OPT_SEARCH_CHILDREN 0x0001 /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ 0x0002 - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_set_string3(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param prev result of a previous call to this function or NULL - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double(void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); - -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) -/** - * @} - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return 0 on success, a negative error code otherwise - */ -/** - * @note the returned string will av_malloc()ed and must be av_free()ed by the caller - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double(void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -/** - * @} - */ -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - */ -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * - * The result must be freed with av_opt_freep_ranges. - * - * @return >= 0 on success, a negative errro code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * - * The result must be freed with av_opt_free_ranges. - * - * @return >= 0 on success, a negative errro code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/parseutils.h b/3rdparty/include/ffmpeg_/libavutil/parseutils.h deleted file mode 100644 index 3eb35fc..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/parseutils.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * In particular it actually supports the parameters: - * - %H: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - %J: hours as a decimal number, in the range '0' through INT_MAX - * - %M: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %S: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - %Y: the year as a decimal number, using the Gregorian calendar - * - %m: the month as a decimal number, in the range '1' through '12' - * - %d: the day of the month as a decimal number, in the range '1' - * through '31' - * - %%: a literal '%' - * - * @return a pointer to the first character not processed in this - * function call, or NULL in case the function fails to match all of - * the fmt string and therefore an error occurred - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/pixdesc.h b/3rdparty/include/ffmpeg_/libavutil/pixdesc.h deleted file mode 100644 index f4482e8..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/pixdesc.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include -#include "pixfmt.h" - -typedef struct AVComponentDescriptor{ - uint16_t plane :2; ///< which of the 4 planes contains the component - - /** - * Number of elements between 2 horizontally consecutive pixels minus 1. - * Elements are bits for bitstream formats, bytes otherwise. - */ - uint16_t step_minus1 :3; - - /** - * Number of elements before the component of the first pixel plus 1. - * Elements are bits for bitstream formats, bytes otherwise. - */ - uint16_t offset_plus1 :3; - uint16_t shift :3; ///< number of least significant bits that must be shifted away to get the value - uint16_t depth_minus1 :4; ///< number of bits in the component minus 1 -}AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor{ - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = -((-luma_width) >> log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; ///< chroma_width = -((-luma_width )>>log2_chroma_w) - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= -((-luma_height) >> log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - uint8_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 2 or 4 components, then alpha is last. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components, - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - */ - AVComponentDescriptor comp[4]; -}AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) -/** - * The pixel format is "pseudo-paletted". This means that FFmpeg treats it as - * paletted internally, but the palette is generated by the decoder and is not - * stored in the file. - */ -#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) -/** - * The pixel format has an alpha channel. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -#if FF_API_PIX_FMT -/** - * @deprecate use the AV_PIX_FMT_FLAG_* flags - */ -#define PIX_FMT_BE AV_PIX_FMT_FLAG_BE -#define PIX_FMT_PAL AV_PIX_FMT_FLAG_PAL -#define PIX_FMT_BITSTREAM AV_PIX_FMT_FLAG_BITSTREAM -#define PIX_FMT_HWACCEL AV_PIX_FMT_FLAG_HWACCEL -#define PIX_FMT_PLANAR AV_PIX_FMT_FLAG_PLANAR -#define PIX_FMT_RGB AV_PIX_FMT_FLAG_RGB -#define PIX_FMT_PSEUDOPAL AV_PIX_FMT_FLAG_PSEUDOPAL -#define PIX_FMT_ALPHA AV_PIX_FMT_FLAG_ALPHA -#endif - -#if FF_API_PIX_FMT_DESC -/** - * The array of all the pixel format descriptors. - */ -extern const AVPixFmtDescriptor av_pix_fmt_descriptors[]; -#endif - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - */ -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4], - const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - */ -void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4], - const AVPixFmtDescriptor *desc, int x, int y, int c, int w); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or an header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt); - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * See avcodec_get_chroma_sub_sample() for a function that asserts a - * valid pixel format instead of returning an error code. - * Its recommanded that you use avcodec_get_chroma_sub_sample unless - * you do check the return code! - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w - * @param[out] v_shift store log2_chroma_h - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -void ff_check_pixfmt_descriptors(void); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/pixfmt.h b/3rdparty/include/ffmpeg_/libavutil/pixfmt.h deleted file mode 100644 index ae32a8f..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/pixfmt.h +++ /dev/null @@ -1,366 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - * - */ - -#include "libavutil/avconfig.h" -#include "libavutil/version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Pixel format. - * - * @note - * PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @par - * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8bit per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - * - * @note - * Make sure that all newly added big-endian formats have pix_fmt & 1 == 1 - * and that all newly added little-endian formats have pix_fmt & 1 == 0. - * This allows simpler detection of big vs little-endian. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing - AV_PIX_FMT_XVMC_MPEG2_IDCT, - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) - AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 - - AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers - AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers - AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 - AV_PIX_FMT_GRAY8A, ///< 8bit gray, 8bit alpha - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian - - //the following 10 formats have the disadvantage of needing 1 format for each bit depth, thus - //If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately - //is better - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA - -#ifdef AV_PIX_FMT_ABI_GIT_MASTER - AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -#endif - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - - /** - * duplicated pixel formats for compatibility with libav. - * FFmpeg supports these formats since May 8 2012 and Jan 28 2012 (commits f9ca1ac7 and 143a5c55) - * Libav added them Oct 12 2012 with incompatible values (commit 6d5600e85) - */ - AV_PIX_FMT_YUVA422P_LIBAV, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P_LIBAV, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 - AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 - -#ifndef AV_PIX_FMT_ABI_GIT_MASTER - AV_PIX_FMT_RGBA64BE=0x123, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -#endif - AV_PIX_FMT_0RGB=0x123+4, ///< packed RGB 8:8:8, 32bpp, 0RGB0RGB... - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of PIX_FMT_YUV411P and setting color_range - AV_PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions - -#if FF_API_PIX_FMT -#include "old_pix_fmts.h" -#endif -}; - -#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI -#define AV_PIX_FMT_YUVA422P AV_PIX_FMT_YUVA422P_LIBAV -#define AV_PIX_FMT_YUVA444P AV_PIX_FMT_YUVA444P_LIBAV -#endif - - -#define AV_PIX_FMT_Y400A AV_PIX_FMT_GRAY8A -#define AV_PIX_FMT_GBR24P AV_PIX_FMT_GBRP - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) - -#if FF_API_PIX_FMT -#define PixelFormat AVPixelFormat - -#define PIX_FMT_Y400A AV_PIX_FMT_Y400A -#define PIX_FMT_GBR24P AV_PIX_FMT_GBR24P - -#define PIX_FMT_NE(be, le) AV_PIX_FMT_NE(be, le) - -#define PIX_FMT_RGB32 AV_PIX_FMT_RGB32 -#define PIX_FMT_RGB32_1 AV_PIX_FMT_RGB32_1 -#define PIX_FMT_BGR32 AV_PIX_FMT_BGR32 -#define PIX_FMT_BGR32_1 AV_PIX_FMT_BGR32_1 -#define PIX_FMT_0RGB32 AV_PIX_FMT_0RGB32 -#define PIX_FMT_0BGR32 AV_PIX_FMT_0BGR32 - -#define PIX_FMT_GRAY16 AV_PIX_FMT_GRAY16 -#define PIX_FMT_RGB48 AV_PIX_FMT_RGB48 -#define PIX_FMT_RGB565 AV_PIX_FMT_RGB565 -#define PIX_FMT_RGB555 AV_PIX_FMT_RGB555 -#define PIX_FMT_RGB444 AV_PIX_FMT_RGB444 -#define PIX_FMT_BGR48 AV_PIX_FMT_BGR48 -#define PIX_FMT_BGR565 AV_PIX_FMT_BGR565 -#define PIX_FMT_BGR555 AV_PIX_FMT_BGR555 -#define PIX_FMT_BGR444 AV_PIX_FMT_BGR444 - -#define PIX_FMT_YUV420P9 AV_PIX_FMT_YUV420P9 -#define PIX_FMT_YUV422P9 AV_PIX_FMT_YUV422P9 -#define PIX_FMT_YUV444P9 AV_PIX_FMT_YUV444P9 -#define PIX_FMT_YUV420P10 AV_PIX_FMT_YUV420P10 -#define PIX_FMT_YUV422P10 AV_PIX_FMT_YUV422P10 -#define PIX_FMT_YUV444P10 AV_PIX_FMT_YUV444P10 -#define PIX_FMT_YUV420P12 AV_PIX_FMT_YUV420P12 -#define PIX_FMT_YUV422P12 AV_PIX_FMT_YUV422P12 -#define PIX_FMT_YUV444P12 AV_PIX_FMT_YUV444P12 -#define PIX_FMT_YUV420P14 AV_PIX_FMT_YUV420P14 -#define PIX_FMT_YUV422P14 AV_PIX_FMT_YUV422P14 -#define PIX_FMT_YUV444P14 AV_PIX_FMT_YUV444P14 -#define PIX_FMT_YUV420P16 AV_PIX_FMT_YUV420P16 -#define PIX_FMT_YUV422P16 AV_PIX_FMT_YUV422P16 -#define PIX_FMT_YUV444P16 AV_PIX_FMT_YUV444P16 - -#define PIX_FMT_RGBA64 AV_PIX_FMT_RGBA64 -#define PIX_FMT_BGRA64 AV_PIX_FMT_BGRA64 -#define PIX_FMT_GBRP9 AV_PIX_FMT_GBRP9 -#define PIX_FMT_GBRP10 AV_PIX_FMT_GBRP10 -#define PIX_FMT_GBRP12 AV_PIX_FMT_GBRP12 -#define PIX_FMT_GBRP14 AV_PIX_FMT_GBRP14 -#define PIX_FMT_GBRP16 AV_PIX_FMT_GBRP16 -#endif - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/random_seed.h b/3rdparty/include/ffmpeg_/libavutil/random_seed.h deleted file mode 100644 index 0462a04..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/random_seed.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/rational.h b/3rdparty/include/ffmpeg_/libavutil/rational.h deleted file mode 100644 index 417e29e..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/rational.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * rational numbers - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @addtogroup lavu_math - * @{ - */ - -/** - * rational number numerator/denominator - */ -typedef struct AVRational{ - int num; ///< numerator - int den; ///< denominator -} AVRational; - -/** - * Compare two rationals. - * @param a first rational - * @param b second rational - * @return 0 if a==b, 1 if a>b, -1 if a>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert rational to double. - * @param a rational to convert - * @return (double) a - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * This is useful for framerate calculations. - * @param dst_num destination numerator - * @param dst_den destination denominator - * @param num source numerator - * @param den source denominator - * @param max the maximum allowed for dst_num & dst_den - * @return 1 if exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b first rational - * @param c second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b first rational - * @param c second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b first rational - * @param c second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b first rational - * @param c second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * inf is expressed as {1,0} or {-1,0} depending on the sign. - * - * @param d double to convert - * @param max the maximum allowed numerator and denominator - * @return (AVRational) d - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * @return 1 if q1 is nearer to q than q2, -1 if q2 is nearer - * than q1, 0 if they have the same distance. - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the nearest value in q_list to q. - * @param q_list an array of rationals terminated by {0, 0} - * @return the index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/ripemd.h b/3rdparty/include/ffmpeg_/libavutil/ripemd.h deleted file mode 100644 index 7b0c8bc..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/ripemd.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/samplefmt.h b/3rdparty/include/ffmpeg_/libavutil/samplefmt.h deleted file mode 100644 index db17d43..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/samplefmt.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -#include "avutil.h" -#include "attributes.h" - -/** - * Audio Sample Formats - * - * @par - * The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * @par - * The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * @par - * The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -#if FF_API_GET_BITS_PER_SAMPLE_FMT -/** - * @deprecated Use av_get_bytes_per_sample() instead. - */ -attribute_deprecated -int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt); -#endif - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return minimum size in bytes required for the buffer in case - * of success at the next bump - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/sha.h b/3rdparty/include/ffmpeg_/libavutil/sha.h deleted file mode 100644 index bf4377e..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/sha.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/sha512.h b/3rdparty/include/ffmpeg_/libavutil/sha512.h deleted file mode 100644 index 7b08701..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/sha512.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include - -#include "attributes.h" -#include "version.h" - -/** - * @defgroup lavu_sha512 SHA512 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/time.h b/3rdparty/include/ffmpeg_/libavutil/time.h deleted file mode 100644 index 90eb436..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/time.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/timecode.h b/3rdparty/include/ffmpeg_/libavutil/timecode.h deleted file mode 100644 index 56e3975..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/timecode.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 16 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, 30 or 60 - * @return adjusted frame number - * @warning adjustment is only valid in NTSC 29.97 and 59.94 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF), binary group flags (BGF) and biphase mark polarity - * correction (PC) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Load timecode string in buf. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/timestamp.h b/3rdparty/include/ffmpeg_/libavutil/timestamp.h deleted file mode 100644 index f63a08c..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/timestamp.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "common.h" - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%"PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/3rdparty/include/ffmpeg_/libavutil/version.h b/3rdparty/include/ffmpeg_/libavutil/version.h deleted file mode 100644 index b03aa4a..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/version.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -/** - * @defgroup preproc_misc Preprocessor String Macros - * - * String manipulation macros - * - * @{ - */ - -#define AV_STRINGIFY(s) AV_TOSTRING(s) -#define AV_TOSTRING(s) #s - -#define AV_GLUE(a, b) a ## b -#define AV_JOIN(a, b) AV_GLUE(a, b) - -#define AV_PRAGMA(s) _Pragma(#s) - -/** - * @} - */ - -/** - * @defgroup version_utils Library Version Macros - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * @} - */ - - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compiletime and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 38 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @} - * - * @defgroup depr_guards Deprecation guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @{ - */ - -#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT -#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_FIND_OPT -#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_OLD_AVOPTIONS -#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_PIX_FMT -#define FF_API_PIX_FMT (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_CONTEXT_SIZE -#define FF_API_CONTEXT_SIZE (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_PIX_FMT_DESC -#define FF_API_PIX_FMT_DESC (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_AV_REVERSE -#define FF_API_AV_REVERSE (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_AUDIOCONVERT -#define FF_API_AUDIOCONVERT (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_CPU_FLAG_MMX2 -#define FF_API_CPU_FLAG_MMX2 (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_SAMPLES_UTILS_RETURN_ZERO -#define FF_API_SAMPLES_UTILS_RETURN_ZERO (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_LLS_PRIVATE -#define FF_API_LLS_PRIVATE (LIBAVUTIL_VERSION_MAJOR < 53) -#endif -#ifndef FF_API_AVFRAME_LAVC -#define FF_API_AVFRAME_LAVC (LIBAVUTIL_VERSION_MAJOR < 53) -#endif - -/** - * @} - */ - -#endif /* AVUTIL_VERSION_H */ - diff --git a/3rdparty/include/ffmpeg_/libavutil/xtea.h b/3rdparty/include/ffmpeg_/libavutil/xtea.h deleted file mode 100644 index 0899c92..0000000 --- a/3rdparty/include/ffmpeg_/libavutil/xtea.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/3rdparty/include/ffmpeg_/libswscale/swscale.h b/3rdparty/include/ffmpeg_/libswscale/swscale.h deleted file mode 100644 index 42702b7..0000000 --- a/3rdparty/include/ffmpeg_/libswscale/swscale.h +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup lsws - * external API header - */ - -/** - * @defgroup lsws Libswscale - * @{ - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version.h" - -/** - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/* values for the flags, the stuff on the command line is different */ -#define SWS_FAST_BILINEAR 1 -#define SWS_BILINEAR 2 -#define SWS_BICUBIC 4 -#define SWS_X 8 -#define SWS_POINT 0x10 -#define SWS_AREA 0x20 -#define SWS_BICUBLIN 0x40 -#define SWS_GAUSS 0x80 -#define SWS_SINC 0x100 -#define SWS_LANCZOS 0x200 -#define SWS_SPLINE 0x400 - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_PRINT_INFO 0x1000 - -//the following 3 flags are not completely implemented -//internal chrominace subsampling info -#define SWS_FULL_CHR_H_INT 0x2000 -//input subsampling info -#define SWS_FULL_CHR_H_INP 0x4000 -#define SWS_DIRECT_BGR 0x8000 -#define SWS_ACCURATE_RND 0x40000 -#define SWS_BITEXACT 0x80000 -#define SWS_ERROR_DIFFUSION 0x800000 - -#if FF_API_SWS_CPU_CAPS -/** - * CPU caps are autodetected now, those flags - * are only provided for API compatibility. - */ -#define SWS_CPU_CAPS_MMX 0x80000000 -#define SWS_CPU_CAPS_MMXEXT 0x20000000 -#define SWS_CPU_CAPS_MMX2 0x20000000 -#define SWS_CPU_CAPS_3DNOW 0x40000000 -#define SWS_CPU_CAPS_ALTIVEC 0x10000000 -#define SWS_CPU_CAPS_BFIN 0x01000000 -#define SWS_CPU_CAPS_SSE2 0x02000000 -#endif - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -struct SwsContext; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Allocate an empty SwsContext. This must be filled and passed to - * sws_init_context(). For filling see AVOptions, options.c and - * sws_setColorspaceDetails(). - */ -struct SwsContext *sws_alloc_context(void); - -/** - * Initialize the swscaler context sws_context. - * - * @return zero or positive value on success, a negative value on - * error - */ -int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(struct SwsContext *swsContext); - -#if FF_API_SWS_GETCONTEXT -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - * @deprecated Use sws_getCachedContext() instead. - */ -struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); -#endif - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * @return -1 if not supported - */ -int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return -1 if not supported - */ -int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Allocate and return a vector with length coefficients, all - * with the same value c. - */ -SwsVector *sws_getConstVec(double c, int length); - -/** - * Allocate and return a vector with just one coefficient, with - * value 1.0. - */ -SwsVector *sws_getIdentityVec(void); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); -void sws_convVec(SwsVector *a, SwsVector *b); -void sws_addVec(SwsVector *a, SwsVector *b); -void sws_subVec(SwsVector *a, SwsVector *b); -void sws_shiftVec(SwsVector *a, int shift); - -/** - * Allocate and return a clone of the vector a, that is a vector - * with the same coefficients as a. - */ -SwsVector *sws_cloneVec(SwsVector *a); - -/** - * Print with av_log() a textual representation of the vector a - * if log_level <= av_log_level. - */ -void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -struct SwsContext *sws_getCachedContext(struct SwsContext *context, - int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Get the AVClass for swsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/3rdparty/include/ffmpeg_/libswscale/version.h b/3rdparty/include/ffmpeg_/libswscale/version.h deleted file mode 100644 index f635e3d..0000000 --- a/3rdparty/include/ffmpeg_/libswscale/version.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg 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. - * - * FFmpeg 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 FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/avutil.h" - -#define LIBSWSCALE_VERSION_MAJOR 2 -#define LIBSWSCALE_VERSION_MINOR 3 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#ifndef FF_API_SWS_GETCONTEXT -#define FF_API_SWS_GETCONTEXT (LIBSWSCALE_VERSION_MAJOR < 3) -#endif -#ifndef FF_API_SWS_CPU_CAPS -#define FF_API_SWS_CPU_CAPS (LIBSWSCALE_VERSION_MAJOR < 3) -#endif -#ifndef FF_API_SWS_FORMAT_NAME -#define FF_API_SWS_FORMAT_NAME (LIBSWSCALE_VERSION_MAJOR < 3) -#endif - -#endif /* SWSCALE_VERSION_H */ diff --git a/3rdparty/include/msc_inttypes.h b/3rdparty/include/msc_inttypes.h deleted file mode 100644 index 352fbc7..0000000 --- a/3rdparty/include/msc_inttypes.h +++ /dev/null @@ -1,301 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (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 _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/3rdparty/include/msc_stdint.h b/3rdparty/include/msc_stdint.h deleted file mode 100644 index 7ac71fc..0000000 --- a/3rdparty/include/msc_stdint.h +++ /dev/null @@ -1,219 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (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 _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#include - -// For Visual Studio 6 in C++ mode wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#if (_MSC_VER < 1300) && defined(__cplusplus) - extern "C++" { -#endif -# include -#if (_MSC_VER < 1300) && defined(__cplusplus) - } -#endif - -#if defined __GNUC__ || _MSC_VER >= 1600 -#include "stdint.h" -#else - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types -typedef __int8 int8_t; -typedef __int16 int16_t; -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef int intptr_t; - typedef unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN _I8_MIN -#define INT8_MAX _I8_MAX -#define INT16_MIN _I16_MIN -#define INT16_MAX _I16_MAX -#define INT32_MIN _I32_MIN -#define INT32_MAX _I32_MAX -#define INT64_MIN _I64_MIN -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val -#define INT16_C(val) val -#define INT32_C(val) val##L -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val -#define UINT16_C(val) val -#define UINT32_C(val) val##UL -#define UINT64_C(val) val##Ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - -#endif - -#endif // _MSC_STDINT_H_ ] diff --git a/3rdparty/readme.txt b/3rdparty/readme.txt deleted file mode 100644 index ca46fbd..0000000 --- a/3rdparty/readme.txt +++ /dev/null @@ -1,76 +0,0 @@ -This folder contains libraries and headers of a few very popular still image codecs -used by highgui module. -The libraries and headers are preferably to build Win32 and Win64 versions of OpenCV. -On UNIX systems all the libraries are automatically detected by configure script. -In order to use these versions of libraries instead of system ones on UNIX systems you -should use BUILD_ CMake flags (for example, BUILD_PNG for the libpng library). - ------------------------------------------------------------------------------------- -libjpeg 8d (8.4) - The Independent JPEG Group's JPEG software. - Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. - See IGJ home page http://www.ijg.org - for details and links to the source code - - HAVE_JPEG preprocessor flag must be set to make highgui use libjpeg. - On UNIX systems configure script takes care of it. ------------------------------------------------------------------------------------- -libpng 1.5.12 - Portable Network Graphics library. - Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson. - See libpng home page http://www.libpng.org - for details and links to the source code - - HAVE_PNG preprocessor flag must be set to make highgui use libpng. - On UNIX systems configure script takes care of it. ------------------------------------------------------------------------------------- -libtiff 4.0.2 - Tag Image File Format (TIFF) Software - Copyright (c) 1988-1997 Sam Leffler - Copyright (c) 1991-1997 Silicon Graphics, Inc. - See libtiff home page http://www.remotesensing.org/libtiff/ - for details and links to the source code - - HAVE_TIFF preprocessor flag must be set to make highgui use libtiff. - On UNIX systems configure script takes care of it. - In this build support for ZIP (LZ77 compression) is turned on. ------------------------------------------------------------------------------------- -zlib 1.2.7 - General purpose LZ77 compression library - Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler. - See zlib home page http://www.zlib.net - for details and links to the source code - - No preprocessor definition is needed to make highgui use this library - - it is included automatically if either libpng or libtiff are used. ------------------------------------------------------------------------------------- -jasper-1.900.1 - JasPer is a collection of software - (i.e., a library and application programs) for the coding - and manipulation of images. This software can handle image data in a - variety of formats. One such format supported by JasPer is the JPEG-2000 - format defined in ISO/IEC 15444-1. - - Copyright (c) 1999-2000 Image Power, Inc. - Copyright (c) 1999-2000 The University of British Columbia - Copyright (c) 2001-2003 Michael David Adams - - The JasPer license can be found in src/libjasper. - - OpenCV on Windows uses pre-built libjasper library - (lib/libjasper*). To get the latest source code, - please, visit the project homepage: - http://www.ece.uvic.ca/~mdadams/jasper/ ------------------------------------------------------------------------------------- -openexr-1.7.1 - OpenEXR is a high dynamic-range (HDR) image file format developed - by Industrial Light & Magic for use in computer imaging applications. - - Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm - Entertainment Company Ltd. Portions contributed and copyright held by - others as indicated. All rights reserved. - - The project homepage: http://www.openexr.com ------------------------------------------------------------------------------------- -ffmpeg-0.8.0 - FFmpeg is a complete, cross-platform solution to record, - convert and stream audio and video. It includes libavcodec - - the leading audio/video codec library, and also libavformat, libavutils and - other helper libraries that are used by OpenCV (in highgui module) to - read and write video files. - - The project homepage: http://ffmpeg.org/ ------------------------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 1d7e081..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,1001 +0,0 @@ -# ---------------------------------------------------------------------------- -# Root CMake file for OpenCV -# -# From the off-tree build directory, invoke: -# $ cmake -# -# -# - OCT-2008: Initial version -# -# ---------------------------------------------------------------------------- - -set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) - -# Following block can broke build in case of cross-compilng -# but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command -# so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE -if(NOT CMAKE_TOOLCHAIN_FILE) - # it _must_ go before project(OpenCV) in order to work - if(WIN32) - set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory") - else() - set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory") - endif() -else(NOT CMAKE_TOOLCHAIN_FILE) - #Android: set output folder to ${CMAKE_BINARY_DIR} - set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" ) - # any crosscompiling - set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory") -endif(NOT CMAKE_TOOLCHAIN_FILE) - -# -------------------------------------------------------------- -# Top level OpenCV project -# -------------------------------------------------------------- -if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3) - cmake_minimum_required(VERSION 2.8.8) -elseif(IOS) - cmake_minimum_required(VERSION 2.8.0) -else() - cmake_minimum_required(VERSION 2.6.3) -endif() - -if(POLICY CMP0017) - cmake_policy(SET CMP0017 NEW) -endif() - -if(POLICY CMP0022) - cmake_policy(SET CMP0022 OLD) -endif() - -# must go before the project command -set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE) -if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8") - set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} ) -endif() - -project(OpenCV CXX C) - -if(MSVC) - set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE) -endif() - -include(cmake/OpenCVUtils.cmake) - -ocv_clear_vars(OpenCVModules_TARGETS) - -# ---------------------------------------------------------------------------- -# Break in case of popular CMake configuration mistakes -# ---------------------------------------------------------------------------- -if(NOT CMAKE_SIZEOF_VOID_P GREATER 0) - message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform. - Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.") -endif() - -# ---------------------------------------------------------------------------- -# Detect compiler and target platform architecture -# ---------------------------------------------------------------------------- -include(cmake/OpenCVDetectCXXCompiler.cmake) - -# Add these standard paths to the search paths for FIND_LIBRARY -# to find libraries from these locations first -if(UNIX AND NOT ANDROID) - if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8) - if(EXISTS /lib64) - list(APPEND CMAKE_LIBRARY_PATH /lib64) - else() - list(APPEND CMAKE_LIBRARY_PATH /lib) - endif() - if(EXISTS /usr/lib64) - list(APPEND CMAKE_LIBRARY_PATH /usr/lib64) - else() - list(APPEND CMAKE_LIBRARY_PATH /usr/lib) - endif() - elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4) - if(EXISTS /lib32) - list(APPEND CMAKE_LIBRARY_PATH /lib32) - else() - list(APPEND CMAKE_LIBRARY_PATH /lib) - endif() - if(EXISTS /usr/lib32) - list(APPEND CMAKE_LIBRARY_PATH /usr/lib32) - else() - list(APPEND CMAKE_LIBRARY_PATH /usr/lib) - endif() - endif() -endif() - -# Add these standard paths to the search paths for FIND_PATH -# to find include files from these locations first -if(MINGW) - if(EXISTS /mingw) - list(APPEND CMAKE_INCLUDE_PATH /mingw) - endif() - if(EXISTS /mingw32) - list(APPEND CMAKE_INCLUDE_PATH /mingw32) - endif() - if(EXISTS /mingw64) - list(APPEND CMAKE_INCLUDE_PATH /mingw64) - endif() -endif() - -# ---------------------------------------------------------------------------- -# OpenCV cmake options -# ---------------------------------------------------------------------------- - -# Optional 3rd party components -# =================================================== -OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS) -OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE ) -OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) -OCV_OPTION(WITH_VTK "Include VTK library support (and build opencv_viz module eiher)" OFF IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) -OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) -OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) ) -OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON) -OCV_OPTION(WITH_VFW "Include Video for Windows support" ON IF WIN32 ) -OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS)) -OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) -OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) -OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE ) -OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) ) -OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) ) -OCV_OPTION(WITH_JPEG "Include JPEG support" ON) -OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) ) -OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID) ) -OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_PNG "Include PNG support" ON) -OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_GIGEAPI "Include Smartek GigE support" ON IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_QT "Build with Qt Backend support" OFF IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_WIN32UI "Build with Win32 UI Backend support" ON IF WIN32 ) -OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O insted of QTKit" OFF IF APPLE ) -OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS) ) -OCV_OPTION(WITH_OPENMP "Include OpenMP support" OFF) -OCV_OPTION(WITH_CSTRIPES "Include C= support" OFF IF WIN32 ) -OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) ) -OCV_OPTION(WITH_UNICAP "Include Unicap support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) ) -OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) ) -OCV_OPTION(WITH_LIBV4L "Use libv4l for Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) ) -OCV_OPTION(WITH_DSHOW "Build HighGUI with DirectShow support" ON IF (WIN32 AND NOT ARM) ) -OCV_OPTION(WITH_MSMF "Build HighGUI with Media Foundation support" OFF IF WIN32 ) -OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF (NOT ANDROID AND NOT APPLE) ) -OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) ) -OCV_OPTION(WITH_OPENCL "Include OpenCL Runtime support" ON IF (NOT IOS) ) -OCV_OPTION(WITH_OPENCLAMDFFT "Include AMD OpenCL FFT library support" ON IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_OPENCLAMDBLAS "Include AMD OpenCL BLAS library support" ON IF (NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_INTELPERC "Include Intel Perceptual Computing support" OFF IF WIN32 ) - -# OpenCV build components -# =================================================== -OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) ) -OCV_OPTION(BUILD_opencv_apps "Build utility applications (used for example to train classifiers)" (NOT ANDROID) IF (NOT IOS) ) -OCV_OPTION(BUILD_ANDROID_EXAMPLES "Build examples for Android platform" ON IF ANDROID ) -OCV_OPTION(BUILD_DOCS "Create build rules for OpenCV Documentation" OFF ) -OCV_OPTION(BUILD_EXAMPLES "Build all examples" OFF ) -OCV_OPTION(BUILD_PACKAGE "Enables 'make package_source' command" ON ) -OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" OFF) -OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" ON IF (NOT IOS) ) -OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSCV only)" ON ) -OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC ) -OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE ) -OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) - -# 3rd party libs -OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE ) -OCV_OPTION(BUILD_TIFF "Build libtiff from source" WIN32 OR ANDROID OR APPLE ) -OCV_OPTION(BUILD_JASPER "Build libjasper from source" WIN32 OR ANDROID OR APPLE ) -OCV_OPTION(BUILD_JPEG "Build libjpeg from source" WIN32 OR ANDROID OR APPLE ) -OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR ANDROID OR APPLE ) -OCV_OPTION(BUILD_OPENEXR "Build openexr from source" WIN32 OR ANDROID OR APPLE ) -OCV_OPTION(BUILD_TBB "Download and build TBB from source" ANDROID ) - -# OpenCV installation options -# =================================================== -OCV_OPTION(INSTALL_CREATE_DISTRIB "Change install rules to build the distribution package" OFF ) -OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF ) -OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF ) -OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID ) -OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) ) -OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binaries and test data" OFF) - -# OpenCV build options -# =================================================== -OCV_OPTION(ENABLE_DYNAMIC_CUDA "Enabled dynamic CUDA linkage" ON IF ANDROID ) -OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) ) -OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) IF (CMAKE_VERSION VERSION_GREATER "2.8.0") ) -OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(ENABLE_COVERAGE "Enable coverage collection with GCov" OFF IF CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) ) -OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) ) -OCV_OPTION(ENABLE_FAST_MATH "Enable -ffast-math (not recommended for GCC 4.6.x)" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSE "Enable SSE instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSE2 "Enable SSE2 instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSE3 "Enable SSE3 instructions" ON IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_AVX "Enable AVX instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) ) -OCV_OPTION(ENABLE_NEON "Enable NEON instructions" OFF IF CMAKE_COMPILER_IS_GNUCXX AND ARM ) -OCV_OPTION(ENABLE_VFPV3 "Enable VFPv3-D32 instructions" OFF IF CMAKE_COMPILER_IS_GNUCXX AND ARM ) -OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF ) -OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF ) -OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 ) -OCV_OPTION(ENABLE_WINRT_MODE_NATIVE "Build with Windows Runtime native C++ support" OFF IF WIN32 ) - -# uncategorized options -# =================================================== -OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF ) - -# backward compatibility -# =================================================== -include(cmake/OpenCVLegacyOptions.cmake OPTIONAL) - - -# ---------------------------------------------------------------------------- -# Get actual OpenCV version number from sources -# ---------------------------------------------------------------------------- -include(cmake/OpenCVVersion.cmake) - - -# ---------------------------------------------------------------------------- -# Build & install layouts -# ---------------------------------------------------------------------------- - -# Save libs and executables in the same place -set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" ) - -if (ANDROID) - if (ANDROID_ABI MATCHES "NEON") - set(ENABLE_NEON ON) - endif() - if (ANDROID_ABI MATCHES "VFPV3") - set(ENABLE_VFPV3 ON) - endif() -endif() - -if(WIN32) - if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH) - set(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/") - else() - message(STATUS "Can't detect runtime and/or arch") - set(OpenCV_INSTALL_BINARIES_PREFIX "") - endif() -elseif(ANDROID) - set(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/") -else() - set(OpenCV_INSTALL_BINARIES_PREFIX "") -endif() - -if(ANDROID) - set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}") -else() - set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples") -endif() - -if(ANDROID) - set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}") -else() - set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin") -endif() - -if(NOT OPENCV_TEST_INSTALL_PATH) - set(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}") -endif() - -if(ANDROID) - set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}") - set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}") - set(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME}) - set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME}) - set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni) - set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include) - set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native) -else() - set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib") - set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}") - if(WIN32) - if(OpenCV_STATIC) - set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}") - else() - set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}") - endif() - set(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}") - set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native) - else() - set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX}) - set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}) - set(OPENCV_SAMPLES_SRC_INSTALL_PATH share/OpenCV/samples) - endif() - set(OPENCV_INCLUDE_INSTALL_PATH "include") - - math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}") - if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX) - set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv) - else() - set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV) - endif() -endif() - -set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}") -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - -if(INSTALL_TO_MANGLED_PATHS) - set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION}) -endif() - -if(WIN32) - # Postfix of DLLs: - set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}") - set(OPENCV_DEBUG_POSTFIX d) -else() - # Postfix of so's: - set(OPENCV_DLLVERSION "") - set(OPENCV_DEBUG_POSTFIX "") -endif() - -if(DEFINED CMAKE_DEBUG_POSTFIX) - set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}") -endif() - -if(CMAKE_VERBOSE) - set(CMAKE_VERBOSE_MAKEFILE 1) -endif() - - -# ---------------------------------------------------------------------------- -# Path for build/platform -specific headers -# ---------------------------------------------------------------------------- -set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h") -ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}) - -# ---------------------------------------------------------------------------- -# Path for additional modules -# ---------------------------------------------------------------------------- -set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules") - -# ---------------------------------------------------------------------------- -# Autodetect if we are in a GIT repository -# ---------------------------------------------------------------------------- - -# don't use FindGit because it requires CMake 2.8.2 -set(git_names git eg) # eg = easy git -# Prefer .cmd variants on Windows unless running in a Makefile in the MSYS shell -if(CMAKE_HOST_WIN32) - if(NOT CMAKE_GENERATOR MATCHES "MSYS") - set(git_names git.cmd git eg.cmd eg) - endif() -endif() - -find_host_program(GIT_EXECUTABLE NAMES ${git_names} PATH_SUFFIXES Git/cmd Git/bin DOC "git command line client") -mark_as_advanced(GIT_EXECUTABLE) - -if(GIT_EXECUTABLE) - execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty --match "2.[0-9].[0-9]*" - WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}" - OUTPUT_VARIABLE OPENCV_VCSVERSION - RESULT_VARIABLE GIT_RESULT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(NOT GIT_RESULT EQUAL 0) - set(OPENCV_VCSVERSION "unknown") - endif() -else() - # We don't have git: - set(OPENCV_VCSVERSION "unknown") -endif() - - -# ---------------------------------------------------------------------------- -# OpenCV compiler and linker options -# ---------------------------------------------------------------------------- -# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release: -if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "") - set(CMAKE_BUILD_TYPE Release) -endif() - -include(cmake/OpenCVCompilerOptions.cmake) - - -# ---------------------------------------------------------------------------- -# Use statically or dynamically linked CRT? -# Default: dynamic -# ---------------------------------------------------------------------------- -if(MSVC) - include(cmake/OpenCVCRTLinkage.cmake) -endif(MSVC) - -if(WIN32 AND NOT MINGW) - add_definitions(-D_VARIADIC_MAX=10) -endif(WIN32 AND NOT MINGW) - - -# ---------------------------------------------------------------------------- -# CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC.. -# ---------------------------------------------------------------------------- -if(UNIX) - include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL) - include(CheckFunctionExists) - include(CheckIncludeFile) - - if(NOT APPLE) - CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD) - if(ANDROID) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log) - elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly") - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread) - else() - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt) - endif() - else() - set(HAVE_LIBPTHREAD YES) - endif() -endif() - -include(cmake/OpenCVPCHSupport.cmake) -include(cmake/OpenCVModule.cmake) - -# ---------------------------------------------------------------------------- -# Detect endianness of build platform -# ---------------------------------------------------------------------------- - -if(CMAKE_SYSTEM_NAME STREQUAL iOS) - # test_big_endian needs try_compile, which doesn't work for iOS - # http://public.kitware.com/Bug/view.php?id=12288 - set(WORDS_BIGENDIAN 0) -else() - include(TestBigEndian) - test_big_endian(WORDS_BIGENDIAN) -endif() - -# ---------------------------------------------------------------------------- -# Detect 3rd-party libraries -# ---------------------------------------------------------------------------- - -include(cmake/OpenCVFindLibsGrfmt.cmake) -include(cmake/OpenCVFindLibsGUI.cmake) -include(cmake/OpenCVFindLibsVideo.cmake) - -# ---------------------------------------------------------------------------- -# Detect other 3rd-party libraries/tools -# ---------------------------------------------------------------------------- - -# --- Python Support --- -include(cmake/OpenCVDetectPython.cmake) - -# --- Java Support --- -include(cmake/OpenCVDetectApacheAnt.cmake) -if(ANDROID) - include(cmake/OpenCVDetectAndroidSDK.cmake) - - if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13) - message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.") - endif() -else() - find_package(JNI) -endif() - -if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13)) - SET(CAN_BUILD_ANDROID_PROJECTS TRUE) -else() - SET(CAN_BUILD_ANDROID_PROJECTS FALSE) -endif() - -# --- OpenCL --- -if(WITH_OPENCL) - include(cmake/OpenCVDetectOpenCL.cmake) -endif() - -# --- VTK support --- -include(cmake/OpenCVDetectVTK.cmake) - -# ---------------------------------------------------------------------------- -# Add CUDA libraries (needed for apps/tools, samples) -# ---------------------------------------------------------------------------- -if(NOT HAVE_CUDA) - set(ENABLE_DYNAMIC_CUDA OFF) -endif() - -if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) - if(HAVE_CUBLAS) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY}) - endif() - if(HAVE_CUFFT) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY}) - endif() -endif() - -# ---------------------------------------------------------------------------- -# Solution folders: -# ---------------------------------------------------------------------------- -if(ENABLE_SOLUTION_FOLDERS) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) - set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets") -endif() - -# Extra OpenCV targets: uninstall, package_source, perf, etc. -include(cmake/OpenCVExtraTargets.cmake) - - -# ---------------------------------------------------------------------------- -# Process subdirectories -# ---------------------------------------------------------------------------- - -# opencv.hpp and legacy headers -add_subdirectory(include) - -# OpenCV modules -add_subdirectory(modules) - -# various data that is used by cv libraries and/or demo applications. -add_subdirectory(data) - - -# ---------------------------------------------------------------------------- -# Finalization: generate configuration-based files -# ---------------------------------------------------------------------------- -ocv_track_build_dependencies() - -# Generate platform-dependent and configuration-dependent headers -include(cmake/OpenCVGenHeaders.cmake) - -# Generate opencv.pc for pkg-config command -include(cmake/OpenCVGenPkgconfig.cmake) - -# Generate OpenCV.mk for ndk-build (Android build tool) -include(cmake/OpenCVGenAndroidMK.cmake) - -# Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects -include(cmake/OpenCVGenConfig.cmake) - -# Generate Info.plist for the IOS framework -include(cmake/OpenCVGenInfoPlist.cmake) - -if(NOT OPENCV_LICENSE_FILE) - set(OPENCV_LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE) -endif() - -# for UNIX it does not make sense as LICENSE and readme will be part of the package automatically -if(ANDROID OR NOT UNIX) - install(FILES ${OPENCV_LICENSE_FILE} - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ - DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs) - if(OPENCV_README_FILE) - install(FILES ${OPENCV_README_FILE} - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ - DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs) - endif() -endif() - -# ---------------------------------------------------------------------------- -# Summary: -# ---------------------------------------------------------------------------- -status("") -status("General configuration for OpenCV ${OPENCV_VERSION} =====================================") -if(OPENCV_VCSVERSION) - status(" Version control:" ${OPENCV_VCSVERSION}) -endif() - -# ========================== build platform ========================== -status("") -status(" Platform:") -status(" Host:" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR}) -if(CMAKE_CROSSCOMPILING) - status(" Target:" ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}) -endif() -status(" CMake:" ${CMAKE_VERSION}) -status(" CMake generator:" ${CMAKE_GENERATOR}) -status(" CMake build tool:" ${CMAKE_BUILD_TOOL}) -if(MSVC) - status(" MSVC:" ${MSVC_VERSION}) -endif() -if(CMAKE_GENERATOR MATCHES Xcode) - status(" Xcode:" ${XCODE_VERSION}) -endif() -if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio") - status(" Configuration:" ${CMAKE_BUILD_TYPE}) -endif() - -# ========================== C/C++ options ========================== -if(CMAKE_CXX_COMPILER_VERSION) - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})") -elseif(CMAKE_COMPILER_IS_CLANGCXX) - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})") -elseif(CMAKE_COMPILER_IS_GNUCXX) - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})") -else() - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") -endif() -string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR) - -status("") -status(" C/C++:") -status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO) -status(" C++ Compiler:" ${OPENCV_COMPILER_STR}) -status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}) -status(" C++ flags (Debug):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}) -status(" C Compiler:" ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}) -status(" C flags (Release):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}) -status(" C flags (Debug):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}) -if(WIN32) - status(" Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}) - status(" Linker flags (Debug):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}) -else() - status(" Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}) - status(" Linker flags (Debug):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}) -endif() -status(" Precompiled headers:" PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO) - -# ========================== OpenCV modules ========================== -status("") -status(" Libdir" ${libdir}) -status(" OpenCV_ARCH" ${OpenCV_ARCH}) -status(" OpenCV_RUNTIME" ${OpenCV_RUNTIME}) -status(" OpenCV_STATIC" ${OpenCV_STATIC}) -status(" OpenCV_LIB_PATH" ${OpenCV_LIB_PATH}) -status(" OpenCV modules:") -string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST "${OPENCV_MODULES_BUILD}") -string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST "${OPENCV_MODULES_DISABLED_USER}") -string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}") -set(OPENCV_MODULES_DISABLED_AUTO_ST "") -foreach(m ${OPENCV_MODULES_DISABLED_AUTO}) - set(__mdeps "") - foreach(d ${OPENCV_MODULE_${m}_DEPS}) - if(d MATCHES "^opencv_" AND NOT HAVE_${d}) - list(APPEND __mdeps ${d}) - endif() - endforeach() - if(__mdeps) - list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})") - else() - list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}") - endif() -endforeach() -string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST "${OPENCV_MODULES_DISABLED_AUTO_ST}") - -status(" To be built:" OPENCV_MODULES_BUILD THEN ${OPENCV_MODULES_BUILD_ST} ELSE "-") -status(" Disabled:" OPENCV_MODULES_DISABLED_USER THEN ${OPENCV_MODULES_DISABLED_USER_ST} ELSE "-") -status(" Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO THEN ${OPENCV_MODULES_DISABLED_AUTO_ST} ELSE "-") -status(" Unavailable:" OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-") - -# ========================== Android details ========================== -if(ANDROID) - status("") - status(" Android: ") - status(" Android ABI:" ${ANDROID_ABI}) - status(" STL type:" ${ANDROID_STL}) - status(" Native API level:" android-${ANDROID_NATIVE_API_LEVEL}) - android_get_compatible_target(android_sdk_target_status ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 11) - status(" SDK target:" "${android_sdk_target_status}") - if(BUILD_WITH_ANDROID_NDK) - status(" Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})") - elseif(BUILD_WITH_STANDALONE_TOOLCHAIN) - status(" Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}") - endif() - status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO) - status(" Google Play package:" BUILD_ANDROID_PACKAGE THEN YES ELSE NO) - status(" Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO) -endif() - -# ================== Windows RT features ================== -if(WIN32) -status("") - status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO) - if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE) - status(" Windows SDK v8.0:" ${WINDOWS_SDK_PATH}) - status(" Visual Studio 2012:" ${VISUAL_STUDIO_PATH}) - endif() -endif(WIN32) - -# ========================== GUI ========================== -status("") -status(" GUI: ") - -if(HAVE_QT5) - status(" QT 5.x:" HAVE_QT THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO) - status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO) -elseif(HAVE_QT) - status(" QT 4.x:" HAVE_QT THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO) - status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO) -else() - if(DEFINED WITH_QT) - status(" QT:" NO) - endif() - if(DEFINED WITH_WIN32UI) - status(" Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO) - else() - if(APPLE) - if(WITH_CARBON) - status(" Carbon:" YES) - else() - status(" Cocoa:" YES) - endif() - else() - status(" GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO) - status(" GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO) - status(" GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO) - endif() - endif() -endif() - -status(" OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO) -status(" VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO) - -# ========================== MEDIA IO ========================== -status("") -status(" Media I/O: ") -status(" ZLib:" BUILD_ZLIB THEN "build (ver ${ZLIB_VERSION_STRING})" ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})") - -if(WITH_JPEG) - status(" JPEG:" JPEG_FOUND THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})" ELSE "build (ver ${JPEG_LIB_VERSION})") -else() - status(" JPEG:" "NO") -endif() -if(WITH_PNG) - status(" PNG:" PNG_FOUND THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})" ELSE "build (ver ${PNG_VERSION})") -else() - status(" PNG:" "NO") -endif() -if(WITH_TIFF) - if(TIFF_VERSION_STRING AND TIFF_FOUND) - status(" TIFF:" "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})") - else() - status(" TIFF:" TIFF_FOUND THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})" ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})") - endif() -else() - status(" TIFF:" "NO") -endif() -if(WITH_JASPER) - status(" JPEG 2000:" JASPER_FOUND THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})") -else() - status(" JPEG 2000:" "NO") -endif() -if(WITH_OPENEXR) - status(" OpenEXR:" OPENEXR_FOUND THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})") -else() - status(" OpenEXR:" "NO") -endif() - -# ========================== VIDEO IO ========================== -status("") -status(" Video I/O:") - -if (DEFINED WITH_VFW) - status(" Video for Windows:" HAVE_VFW THEN YES ELSE NO) -endif(DEFINED WITH_VFW) - -if(DEFINED WITH_1394) - status(" DC1394 1.x:" HAVE_DC1394 THEN "YES (ver ${ALIASOF_libdc1394_VERSION})" ELSE NO) - status(" DC1394 2.x:" HAVE_DC1394_2 THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO) -endif(DEFINED WITH_1394) - -if(ANDROID) - if(HAVE_opencv_androidcamera) - status(" AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER - THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries") - else() - status(" AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)") - endif() -endif() - -if(DEFINED WITH_AVFOUNDATION) - status(" AVFoundation:" WITH_AVFOUNDATION THEN YES ELSE NO) -endif(DEFINED WITH_AVFOUNDATION) - -if(DEFINED WITH_FFMPEG) - if(WIN32) - status(" FFMPEG:" WITH_FFMPEG THEN "YES (prebuilt binaries)" ELSE NO) - else() - status(" FFMPEG:" HAVE_FFMPEG THEN YES ELSE NO) - endif() - status(" codec:" HAVE_FFMPEG_CODEC THEN "YES (ver ${ALIASOF_libavcodec_VERSION})" ELSE NO) - status(" format:" HAVE_FFMPEG_FORMAT THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO) - status(" util:" HAVE_FFMPEG_UTIL THEN "YES (ver ${ALIASOF_libavutil_VERSION})" ELSE NO) - status(" swscale:" HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})" ELSE NO) - status(" gentoo-style:" HAVE_GENTOO_FFMPEG THEN YES ELSE NO) -endif(DEFINED WITH_FFMPEG) - -if(DEFINED WITH_GSTREAMER) - status(" GStreamer:" HAVE_GSTREAMER THEN "" ELSE NO) - if(HAVE_GSTREAMER) - status(" base:" "YES (ver ${ALIASOF_gstreamer-base-0.10_VERSION})") - status(" app:" "YES (ver ${ALIASOF_gstreamer-app-0.10_VERSION})") - status(" video:" "YES (ver ${ALIASOF_gstreamer-video-0.10_VERSION})") - endif() -endif(DEFINED WITH_GSTREAMER) - -if(DEFINED WITH_OPENNI) - status(" OpenNI:" HAVE_OPENNI THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})" - ELSE NO) - status(" OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE - THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})" ELSE NO) -endif(DEFINED WITH_OPENNI) - -if(DEFINED WITH_PVAPI) - status(" PvAPI:" HAVE_PVAPI THEN YES ELSE NO) -endif(DEFINED WITH_PVAPI) - -if(DEFINED WITH_GIGEAPI) - status(" GigEVisionSDK:" HAVE_GIGE_API THEN YES ELSE NO) -endif(DEFINED WITH_GIGEAPI) - -if(DEFINED WITH_QUICKTIME) - status(" QuickTime:" HAVE_QUICKTIME THEN YES ELSE NO) - status(" QTKit:" HAVE_QTKIT THEN YES ELSE NO) -endif(DEFINED WITH_QUICKTIME) - -if(DEFINED WITH_UNICAP) - status(" UniCap:" HAVE_UNICAP THEN "YES (ver ${ALIASOF_libunicap_VERSION})" ELSE NO) - status(" UniCap ucil:" HAVE_UNICAP_UCIL THEN "YES (ver ${ALIASOF_libucil_VERSION})" ELSE NO) -endif(DEFINED WITH_UNICAP) - -if(DEFINED WITH_V4L) - if(HAVE_CAMV4L) - set(HAVE_CAMV4L_STR "YES") - else() - set(HAVE_CAMV4L_STR "NO") - endif() - if(HAVE_CAMV4L2) - set(HAVE_CAMV4L2_STR "YES") - elseif(HAVE_VIDEOIO) - set(HAVE_CAMV4L2_STR "YES(videoio)") - else() - set(HAVE_CAMV4L2_STR "NO") - endif() - status(" V4L/V4L2:" HAVE_LIBV4L THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})" - ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}") -endif(DEFINED WITH_V4L) - -if(DEFINED WITH_DSHOW) - status(" DirectShow:" HAVE_DSHOW THEN YES ELSE NO) -endif(DEFINED WITH_DSHOW) - -if(DEFINED WITH_MSMF) - status(" Media Foundation:" HAVE_MSMF THEN YES ELSE NO) -endif(DEFINED WITH_MSMF) - -if(DEFINED WITH_XIMEA) - status(" XIMEA:" HAVE_XIMEA THEN YES ELSE NO) -endif(DEFINED WITH_XIMEA) - -if(DEFINED WITH_XINE) - status(" Xine:" HAVE_XINE THEN "YES (ver ${ALIASOF_libxine_VERSION})" ELSE NO) -endif(DEFINED WITH_XINE) - -if(DEFINED WITH_INTELPERC) - status(" Intel PerC:" HAVE_INTELPERC THEN "YES" ELSE NO) -endif(DEFINED WITH_INTELPERC) - - -# ========================== Other third-party libraries ========================== -status("") -status(" Other third-party libraries:") - -if(WITH_IPP AND IPP_FOUND) - status(" Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]") - status(" at:" "${IPP_ROOT_DIR}") -else() - status(" Use IPP:" WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO) -endif() - -status(" Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO) -status(" Use TBB:" HAVE_TBB THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO) -status(" Use OpenMP:" HAVE_OPENMP THEN YES ELSE NO) -status(" Use GCD" HAVE_GCD THEN YES ELSE NO) -status(" Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO) -status(" Use C=:" HAVE_CSTRIPES THEN YES ELSE NO) -status(" Use Cuda:" HAVE_CUDA THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO) -status(" Use OpenCL:" HAVE_OPENCL THEN YES ELSE NO) - -if(HAVE_CUDA) - status("") - status(" NVIDIA CUDA") - - status(" Use CUFFT:" HAVE_CUFFT THEN YES ELSE NO) - status(" Use CUBLAS:" HAVE_CUBLAS THEN YES ELSE NO) - status(" USE NVCUVID:" HAVE_NVCUVID THEN YES ELSE NO) - status(" NVIDIA GPU arch:" ${OPENCV_CUDA_ARCH_BIN}) - status(" NVIDIA PTX archs:" ${OPENCV_CUDA_ARCH_PTX}) - status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO) -endif() - -if(HAVE_OPENCL) - status("") - status(" OpenCL:") - if(HAVE_OPENCL_STATIC) - set(__opencl_ver "static") - else() - set(__opencl_ver "dynamic") - endif() - status(" Version:" ${__opencl_ver}) - if(OPENCL_INCLUDE_DIR) - status(" Include path:" ${OPENCL_INCLUDE_DIRS}) - endif() - if(OPENCL_LIBRARIES) - set(__libs "") - foreach(l ${OPENCL_LIBRARIES}) - if(TARGET ${l}) - get_target_property(p ${l} LOCATION) - if(p MATCHES NOTFOUND) - list(APPEND __libs "${l}") - else() - list(APPEND __libs "${p}") - endif() - else() - list(APPEND __libs "${l}") - endif() - endforeach() - status(" libraries:" ${__libs}) - endif() - status(" Use AMD FFT:" HAVE_CLAMDFFT THEN YES ELSE NO) - status(" Use AMD BLAS:" HAVE_CLAMDBLAS THEN YES ELSE NO) -endif() - -# ========================== python ========================== -status("") -status(" Python:") -status(" Interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})" ELSE NO) -if(BUILD_opencv_python) - if(PYTHONLIBS_VERSION_STRING) - status(" Libraries:" HAVE_opencv_python THEN "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE NO) - else() - status(" Libraries:" HAVE_opencv_python THEN ${PYTHON_LIBRARIES} ELSE NO) - endif() - status(" numpy:" PYTHON_USE_NUMPY THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)") - status(" packages path:" PYTHON_EXECUTABLE THEN "${PYTHON_PACKAGES_PATH}" ELSE "-") -endif() - -# ========================== java ========================== -status("") -status(" Java:") -status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO) -if(NOT ANDROID) - status(" JNI:" JNI_INCLUDE_DIRS THEN "${JNI_INCLUDE_DIRS}" ELSE NO) -endif() -status(" Java tests:" BUILD_TESTS AND (CAN_BUILD_ANDROID_PROJECTS OR HAVE_opencv_java) THEN YES ELSE NO) - -# ========================== documentation ========================== -if(BUILD_DOCS) - status("") - status(" Documentation:") - if(HAVE_SPHINX) - status(" Build Documentation:" PDFLATEX_COMPILER THEN YES ELSE "YES (only HTML and without math expressions)") - else() - status(" Build Documentation:" NO) - endif() - status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO) - status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO) -endif() - -# ========================== samples and tests ========================== -status("") -status(" Tests and samples:") -status(" Tests:" BUILD_TESTS AND HAVE_opencv_ts THEN YES ELSE NO) -status(" Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts NO) -status(" C/C++ Examples:" BUILD_EXAMPLES THEN YES ELSE NO) - -# ========================== auxiliary ========================== -status("") -status(" Install path:" "${CMAKE_INSTALL_PREFIX}") -status("") -status(" cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}") -status("-----------------------------------------------------------------") -status("") - -ocv_finalize_status() - -# ---------------------------------------------------------------------------- -# Warn in the case of in-source build -# ---------------------------------------------------------------------------- -if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") - message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree") -endif() - -# ---------------------------------------------------------------------------- -# CPack stuff -# ---------------------------------------------------------------------------- - -include(cmake/OpenCVPackaging.cmake) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 5e32d88..0000000 --- a/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -By downloading, copying, installing or using the software you agree to this license. -If you do not agree to this license, do not download, install, -copy or use the software. - - - License Agreement - For Open Source Computer Vision Library - (3-clause BSD License) - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must 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 names of the copyright holders nor the names of the 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 copyright holders or contributors be liable for any direct, -indirect, incidental, special, exemplary, or consequential damages -(including, but not limited to, procurement of substitute goods or services; -loss of use, data, or profits; or business interruption) however caused -and on any theory of liability, whether in contract, strict liability, -or tort (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/README.md b/README.md deleted file mode 100644 index 3a26ad8..0000000 --- a/README.md +++ /dev/null @@ -1,22 +0,0 @@ -### OpenCV: Open Source Computer Vision Library - -[![Gittip](http://img.shields.io/gittip/OpenCV.png)](https://www.gittip.com/OpenCV/) - -#### Resources - -* Homepage: -* Docs: -* Q&A forum: -* Issue tracking: - -#### Contributing - -Please read before starting work on a pull request: - -Summary of guidelines: - -* One pull request per issue; -* Choose the right base branch; -* Include tests and documentation; -* Clean up "oops" commits before submitting; -* Follow the coding style guide. diff --git a/cmake/CMakeParseArguments.cmake b/cmake/CMakeParseArguments.cmake deleted file mode 100644 index 7ce4c49..0000000 --- a/cmake/CMakeParseArguments.cmake +++ /dev/null @@ -1,138 +0,0 @@ -# CMAKE_PARSE_ARGUMENTS( args...) -# -# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for -# parsing the arguments given to that macro or function. -# It processes the arguments and defines a set of variables which hold the -# values of the respective options. -# -# The argument contains all options for the respective macro, -# i.e. keywords which can be used when calling the macro without any value -# following, like e.g. the OPTIONAL keyword of the install() command. -# -# The argument contains all keywords for this macro -# which are followed by one value, like e.g. DESTINATION keyword of the -# install() command. -# -# The argument contains all keywords for this macro -# which can be followed by more than one value, like e.g. the TARGETS or -# FILES keywords of the install() command. -# -# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the -# keywords listed in , and -# a variable composed of the given -# followed by "_" and the name of the respective keyword. -# These variables will then hold the respective value from the argument list. -# For the keywords this will be TRUE or FALSE. -# -# All remaining arguments are collected in a variable -# _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether -# your macro was called with unrecognized parameters. -# -# As an example here a my_install() macro, which takes similar arguments as the -# real install() command: -# -# function(MY_INSTALL) -# set(options OPTIONAL FAST) -# set(oneValueArgs DESTINATION RENAME) -# set(multiValueArgs TARGETS CONFIGURATIONS) -# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) -# ... -# -# Assume my_install() has been called like this: -# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) -# -# After the cmake_parse_arguments() call the macro will have set the following -# variables: -# MY_INSTALL_OPTIONAL = TRUE -# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() -# MY_INSTALL_DESTINATION = "bin" -# MY_INSTALL_RENAME = "" (was not used) -# MY_INSTALL_TARGETS = "foo;bar" -# MY_INSTALL_CONFIGURATIONS = "" (was not used) -# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" -# -# You can the continue and process these variables. -# -# Keywords terminate lists of values, e.g. if directly after a one_value_keyword -# another recognized keyword follows, this is interpreted as the beginning of -# the new option. -# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in -# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would -# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. - -#============================================================================= -# Copyright 2010 Alexander Neundorf -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - - -if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) - return() -endif() -set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) - - -function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) - # first set all result variables to empty/FALSE - foreach(arg_name ${_singleArgNames} ${_multiArgNames}) - set(${prefix}_${arg_name}) - endforeach(arg_name) - - foreach(option ${_optionNames}) - set(${prefix}_${option} FALSE) - endforeach(option) - - set(${prefix}_UNPARSED_ARGUMENTS) - - set(insideValues FALSE) - set(currentArgName) - - # now iterate over all arguments and fill the result variables - foreach(currentArg ${ARGN}) - list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword - - if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) - if(insideValues) - if("${insideValues}" STREQUAL "SINGLE") - set(${prefix}_${currentArgName} ${currentArg}) - set(insideValues FALSE) - elseif("${insideValues}" STREQUAL "MULTI") - list(APPEND ${prefix}_${currentArgName} ${currentArg}) - endif() - else(insideValues) - list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) - endif(insideValues) - else() - if(NOT ${optionIndex} EQUAL -1) - set(${prefix}_${currentArg} TRUE) - set(insideValues FALSE) - elseif(NOT ${singleArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "SINGLE") - elseif(NOT ${multiArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "MULTI") - endif() - endif() - - endforeach(currentArg) - - # propagate the result variables to the caller: - foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) - set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) - endforeach(arg_name) - set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) - -endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) diff --git a/cmake/FindCUDA.cmake b/cmake/FindCUDA.cmake deleted file mode 100644 index e7ece0e..0000000 --- a/cmake/FindCUDA.cmake +++ /dev/null @@ -1,1796 +0,0 @@ -#.rst: -# FindCUDA -# -------- -# -# Tools for building CUDA C files: libraries and build dependencies. -# -# This script locates the NVIDIA CUDA C tools. It should work on linux, -# windows, and mac and should be reasonably up to date with CUDA C -# releases. -# -# This script makes use of the standard find_package arguments of -# , REQUIRED and QUIET. CUDA_FOUND will report if an -# acceptable version of CUDA was found. -# -# The script will prompt the user to specify CUDA_TOOLKIT_ROOT_DIR if -# the prefix cannot be determined by the location of nvcc in the system -# path and REQUIRED is specified to find_package(). To use a different -# installed version of the toolkit set the environment variable -# CUDA_BIN_PATH before running cmake (e.g. -# CUDA_BIN_PATH=/usr/local/cuda1.0 instead of the default -# /usr/local/cuda) or set CUDA_TOOLKIT_ROOT_DIR after configuring. If -# you change the value of CUDA_TOOLKIT_ROOT_DIR, various components that -# depend on the path will be relocated. -# -# It might be necessary to set CUDA_TOOLKIT_ROOT_DIR manually on certain -# platforms, or to use a cuda runtime not installed in the default -# location. In newer versions of the toolkit the cuda library is -# included with the graphics driver- be sure that the driver version -# matches what is needed by the cuda runtime version. -# -# The following variables affect the behavior of the macros in the -# script (in alphebetical order). Note that any of these flags can be -# changed multiple times in the same directory before calling -# CUDA_ADD_EXECUTABLE, CUDA_ADD_LIBRARY, CUDA_COMPILE, CUDA_COMPILE_PTX -# or CUDA_WRAP_SRCS. -# -# :: -# -# CUDA_64_BIT_DEVICE_CODE (Default matches host bit size) -# -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code. -# Note that making this different from the host code when generating object -# or C files from CUDA code just won't work, because size_t gets defined by -# nvcc in the generated source. If you compile to PTX and then load the -# file yourself, you can mix bit sizes between device and host. -# -# -# -# :: -# -# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON) -# -- Set to ON if you want the custom build rule to be attached to the source -# file in Visual Studio. Turn OFF if you add the same cuda file to multiple -# targets. -# -# -# -# :: -# -# This allows the user to build the target from the CUDA file; however, bad -# things can happen if the CUDA source file is added to multiple targets. -# When performing parallel builds it is possible for the custom build -# command to be run more than once and in parallel causing cryptic build -# errors. VS runs the rules for every source file in the target, and a -# source can have only one rule no matter how many projects it is added to. -# When the rule is run from multiple targets race conditions can occur on -# the generated file. Eventually everything will get built, but if the user -# is unaware of this behavior, there may be confusion. It would be nice if -# this script could detect the reuse of source files across multiple targets -# and turn the option off for the user, but no good solution could be found. -# -# -# -# :: -# -# CUDA_BUILD_CUBIN (Default OFF) -# -- Set to ON to enable and extra compilation pass with the -cubin option in -# Device mode. The output is parsed and register, shared memory usage is -# printed during build. -# -# -# -# :: -# -# CUDA_BUILD_EMULATION (Default OFF for device mode) -# -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files -# when CUDA_BUILD_EMULATION is TRUE. -# -# -# -# :: -# -# CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR) -# -- Set to the path you wish to have the generated files placed. If it is -# blank output files will be placed in CMAKE_CURRENT_BINARY_DIR. -# Intermediate files will always be placed in -# CMAKE_CURRENT_BINARY_DIR/CMakeFiles. -# -# -# -# :: -# -# CUDA_HOST_COMPILATION_CPP (Default ON) -# -- Set to OFF for C compilation of host code. -# -# -# -# :: -# -# CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER, $(VCInstallDir)/bin for VS) -# -- Set the host compiler to be used by nvcc. Ignored if -ccbin or -# --compiler-bindir is already present in the CUDA_NVCC_FLAGS or -# CUDA_NVCC_FLAGS_ variables. For Visual Studio targets -# $(VCInstallDir)/bin is a special value that expands out to the path when -# the command is run from withing VS. -# -# -# -# :: -# -# CUDA_NVCC_FLAGS -# CUDA_NVCC_FLAGS_ -# -- Additional NVCC command line arguments. NOTE: multiple arguments must be -# semi-colon delimited (e.g. --compiler-options;-Wall) -# -# -# -# :: -# -# CUDA_PROPAGATE_HOST_FLAGS (Default ON) -# -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration -# dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the -# host compiler through nvcc's -Xcompiler flag. This helps make the -# generated host code match the rest of the system better. Sometimes -# certain flags give nvcc problems, and this will help you turn the flag -# propagation off. This does not affect the flags supplied directly to nvcc -# via CUDA_NVCC_FLAGS or through the OPTION flags specified through -# CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for -# shared library compilation are not affected by this flag. -# -# -# -# :: -# -# CUDA_SEPARABLE_COMPILATION (Default OFF) -# -- If set this will enable separable compilation for all CUDA runtime object -# files. If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY -# (e.g. calling CUDA_WRAP_SRCS directly), -# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called. -# -# -# -# :: -# -# CUDA_VERBOSE_BUILD (Default OFF) -# -- Set to ON to see all the commands used when building the CUDA file. When -# using a Makefile generator the value defaults to VERBOSE (run make -# VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will -# always print the output. -# -# -# -# The script creates the following macros (in alphebetical order): -# -# :: -# -# CUDA_ADD_CUFFT_TO_TARGET( cuda_target ) -# -- Adds the cufft library to the target (can be any target). Handles whether -# you are in emulation mode or not. -# -# -# -# :: -# -# CUDA_ADD_CUBLAS_TO_TARGET( cuda_target ) -# -- Adds the cublas library to the target (can be any target). Handles -# whether you are in emulation mode or not. -# -# -# -# :: -# -# CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ... -# [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) -# -- Creates an executable "cuda_target" which is made up of the files -# specified. All of the non CUDA C files are compiled using the standard -# build rules specified by CMAKE and the cuda files are compiled to object -# files using nvcc and the host compiler. In addition CUDA_INCLUDE_DIRS is -# added automatically to include_directories(). Some standard CMake target -# calls can be used on the target after calling this macro -# (e.g. set_target_properties and target_link_libraries), but setting -# properties that adjust compilation flags will not affect code compiled by -# nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE, -# CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS. -# -# -# -# :: -# -# CUDA_ADD_LIBRARY( cuda_target file0 file1 ... -# [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) -# -- Same as CUDA_ADD_EXECUTABLE except that a library is created. -# -# -# -# :: -# -# CUDA_BUILD_CLEAN_TARGET() -# -- Creates a convience target that deletes all the dependency files -# generated. You should make clean after running this target to ensure the -# dependency files get regenerated. -# -# -# -# :: -# -# CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE] -# [OPTIONS ...] ) -# -- Returns a list of generated files from the input source files to be used -# with ADD_LIBRARY or ADD_EXECUTABLE. -# -# -# -# :: -# -# CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] ) -# -- Returns a list of PTX files generated from the input source files. -# -# -# -# :: -# -# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var -# cuda_target -# object_files ) -# -- Compute the name of the intermediate link file used for separable -# compilation. This file name is typically passed into -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS. output_file_var is produced -# based on cuda_target the list of objects files that need separable -# compilation as specified by object_files. If the object_files list is -# empty, then output_file_var will be empty. This function is called -# automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE. Note that -# this is a function and not a macro. -# -# -# -# :: -# -# CUDA_INCLUDE_DIRECTORIES( path0 path1 ... ) -# -- Sets the directories that should be passed to nvcc -# (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu -# files. -# -# -# -# -# -# :: -# -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target -# nvcc_flags object_files) -# -# -# -# :: -# -# -- Generates the link object required by separable compilation from the given -# object files. This is called automatically for CUDA_ADD_EXECUTABLE and -# CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS -# directly. When called from CUDA_ADD_LIBRARY or CUDA_ADD_EXECUTABLE the -# nvcc_flags passed in are the same as the flags passed in via the OPTIONS -# argument. The only nvcc flag added automatically is the bitness flag as -# specified by CUDA_64_BIT_DEVICE_CODE. Note that this is a function -# instead of a macro. -# -# -# -# :: -# -# CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ... -# [STATIC | SHARED | MODULE] [OPTIONS ...] ) -# -- This is where all the magic happens. CUDA_ADD_EXECUTABLE, -# CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this -# function under the hood. -# -# -# -# :: -# -# Given the list of files (file0 file1 ... fileN) this macro generates -# custom commands that generate either PTX or linkable objects (use "PTX" or -# "OBJ" for the format argument to switch). Files that don't end with .cu -# or have the HEADER_FILE_ONLY property are ignored. -# -# -# -# :: -# -# The arguments passed in after OPTIONS are extra command line options to -# give to nvcc. You can also specify per configuration options by -# specifying the name of the configuration followed by the options. General -# options must preceed configuration specific options. Not all -# configurations need to be specified, only the ones provided will be used. -# -# -# -# :: -# -# OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag" -# DEBUG -g -# RELEASE --use_fast_math -# RELWITHDEBINFO --use_fast_math;-g -# MINSIZEREL --use_fast_math -# -# -# -# :: -# -# For certain configurations (namely VS generating object files with -# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will -# be produced for the given cuda file. This is because when you add the -# cuda file to Visual Studio it knows that this file produces an object file -# and will link in the resulting object file automatically. -# -# -# -# :: -# -# This script will also generate a separate cmake script that is used at -# build time to invoke nvcc. This is for several reasons. -# -# -# -# :: -# -# 1. nvcc can return negative numbers as return values which confuses -# Visual Studio into thinking that the command succeeded. The script now -# checks the error codes and produces errors when there was a problem. -# -# -# -# :: -# -# 2. nvcc has been known to not delete incomplete results when it -# encounters problems. This confuses build systems into thinking the -# target was generated when in fact an unusable file exists. The script -# now deletes the output files if there was an error. -# -# -# -# :: -# -# 3. By putting all the options that affect the build into a file and then -# make the build rule dependent on the file, the output files will be -# regenerated when the options change. -# -# -# -# :: -# -# This script also looks at optional arguments STATIC, SHARED, or MODULE to -# determine when to target the object compilation for a shared library. -# BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in -# CUDA_ADD_LIBRARY. On some systems special flags are added for building -# objects intended for shared libraries. A preprocessor macro, -# _EXPORTS is defined when a shared library compilation is -# detected. -# -# -# -# :: -# -# Flags passed into add_definitions with -D or /D are passed along to nvcc. -# -# -# -# The script defines the following variables: -# -# :: -# -# CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc. -# CUDA_VERSION_MINOR -- The minor version. -# CUDA_VERSION -# CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR -# -# -# -# :: -# -# CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set). -# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the -# SDK. This script will not directly support finding -# specific libraries or headers, as that isn't -# supported by NVIDIA. If you want to change -# libraries when the path changes see the -# FindCUDA.cmake script for an example of how to clear -# these variables. There are also examples of how to -# use the CUDA_SDK_ROOT_DIR to locate headers or -# libraries, if you so choose (at your own risk). -# CUDA_INCLUDE_DIRS -- Include directory for cuda headers. Added automatically -# for CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY. -# CUDA_LIBRARIES -- Cuda RT library. -# CUDA_CUFFT_LIBRARIES -- Device or emulation library for the Cuda FFT -# implementation (alternative to: -# CUDA_ADD_CUFFT_TO_TARGET macro) -# CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS -# implementation (alterative to: -# CUDA_ADD_CUBLAS_TO_TARGET macro). -# CUDA_cupti_LIBRARY -- CUDA Profiling Tools Interface library. -# Only available for CUDA version 4.0+. -# CUDA_curand_LIBRARY -- CUDA Random Number Generation library. -# Only available for CUDA version 3.2+. -# CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library. -# Only available for CUDA version 3.2+. -# CUDA_npp_LIBRARY -- NVIDIA Performance Primitives library. -# Only available for CUDA version 4.0+. -# CUDA_nppc_LIBRARY -- NVIDIA Performance Primitives library (core). -# Only available for CUDA version 5.5+. -# CUDA_nppi_LIBRARY -- NVIDIA Performance Primitives library (image processing). -# Only available for CUDA version 5.5+. -# CUDA_npps_LIBRARY -- NVIDIA Performance Primitives library (signal processing). -# Only available for CUDA version 5.5+. -# CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library. -# Only available for CUDA version 3.2+. -# Windows only. -# CUDA_nvcuvid_LIBRARY -- CUDA Video Decoder library. -# Only available for CUDA version 3.2+. -# Windows only. -# -# -# -# -# -# :: -# -# James Bigler, NVIDIA Corp (nvidia.com - jbigler) -# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html -# -# -# -# :: -# -# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. -# -# -# -# :: -# -# Copyright (c) 2007-2009 -# Scientific Computing and Imaging Institute, University of Utah -# -# -# -# :: -# -# This code is licensed under the MIT License. See the FindCUDA.cmake script -# for the text of the license. - -# The MIT License -# -# License for the specific language governing rights and limitations under -# 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 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, -# 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. -# -############################################################################### - -# FindCUDA.cmake - -# We need to have at least this version to support the VERSION_LESS argument to 'if' (2.6.2) and unset (2.6.3) -cmake_policy(PUSH) -cmake_minimum_required(VERSION 2.6.3) -cmake_policy(POP) - -# This macro helps us find the location of helper files we will need the full path to -macro(CUDA_FIND_HELPER_FILE _name _extension) - set(_full_name "${_name}.${_extension}") - # CMAKE_CURRENT_LIST_FILE contains the full path to the file currently being - # processed. Using this variable, we can pull out the current path, and - # provide a way to get access to the other files we need local to here. - get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) - set(CUDA_${_name} "${CMAKE_CURRENT_LIST_DIR}/FindCUDA/${_full_name}") - if(NOT EXISTS "${CUDA_${_name}}") - set(error_message "${_full_name} not found in ${CMAKE_CURRENT_LIST_DIR}/FindCUDA") - if(CUDA_FIND_REQUIRED) - message(FATAL_ERROR "${error_message}") - else() - if(NOT CUDA_FIND_QUIETLY) - message(STATUS "${error_message}") - endif() - endif() - endif() - # Set this variable as internal, so the user isn't bugged with it. - set(CUDA_${_name} ${CUDA_${_name}} CACHE INTERNAL "Location of ${_full_name}" FORCE) -endmacro() - -##################################################################### -## CUDA_INCLUDE_NVCC_DEPENDENCIES -## - -# So we want to try and include the dependency file if it exists. If -# it doesn't exist then we need to create an empty one, so we can -# include it. - -# If it does exist, then we need to check to see if all the files it -# depends on exist. If they don't then we should clear the dependency -# file and regenerate it later. This covers the case where a header -# file has disappeared or moved. - -macro(CUDA_INCLUDE_NVCC_DEPENDENCIES dependency_file) - set(CUDA_NVCC_DEPEND) - set(CUDA_NVCC_DEPEND_REGENERATE FALSE) - - - # Include the dependency file. Create it first if it doesn't exist . The - # INCLUDE puts a dependency that will force CMake to rerun and bring in the - # new info when it changes. DO NOT REMOVE THIS (as I did and spent a few - # hours figuring out why it didn't work. - if(NOT EXISTS ${dependency_file}) - file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n") - endif() - # Always include this file to force CMake to run again next - # invocation and rebuild the dependencies. - #message("including dependency_file = ${dependency_file}") - include(${dependency_file}) - - # Now we need to verify the existence of all the included files - # here. If they aren't there we need to just blank this variable and - # make the file regenerate again. -# if(DEFINED CUDA_NVCC_DEPEND) -# message("CUDA_NVCC_DEPEND set") -# else() -# message("CUDA_NVCC_DEPEND NOT set") -# endif() - if(CUDA_NVCC_DEPEND) - #message("CUDA_NVCC_DEPEND found") - foreach(f ${CUDA_NVCC_DEPEND}) - # message("searching for ${f}") - if(NOT EXISTS ${f}) - #message("file ${f} not found") - set(CUDA_NVCC_DEPEND_REGENERATE TRUE) - endif() - endforeach() - else() - #message("CUDA_NVCC_DEPEND false") - # No dependencies, so regenerate the file. - set(CUDA_NVCC_DEPEND_REGENERATE TRUE) - endif() - - #message("CUDA_NVCC_DEPEND_REGENERATE = ${CUDA_NVCC_DEPEND_REGENERATE}") - # No incoming dependencies, so we need to generate them. Make the - # output depend on the dependency file itself, which should cause the - # rule to re-run. - if(CUDA_NVCC_DEPEND_REGENERATE) - set(CUDA_NVCC_DEPEND ${dependency_file}) - #message("Generating an empty dependency_file: ${dependency_file}") - file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n") - endif() - -endmacro() - -############################################################################### -############################################################################### -# Setup variables' defaults -############################################################################### -############################################################################### - -# Allow the user to specify if the device code is supposed to be 32 or 64 bit. -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON) -else() - set(CUDA_64_BIT_DEVICE_CODE_DEFAULT OFF) -endif() -option(CUDA_64_BIT_DEVICE_CODE "Compile device code in 64 bit mode" ${CUDA_64_BIT_DEVICE_CODE_DEFAULT}) - -# Attach the build rule to the source file in VS. This option -option(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE "Attach the build rule to the CUDA source file. Enable only when the CUDA source file is added to at most one target." ON) - -# Prints out extra information about the cuda file during compilation -option(CUDA_BUILD_CUBIN "Generate and parse .cubin files in Device mode." OFF) - -# Set whether we are using emulation or device mode. -option(CUDA_BUILD_EMULATION "Build in Emulation mode" OFF) - -# Where to put the generated output. -set(CUDA_GENERATED_OUTPUT_DIR "" CACHE PATH "Directory to put all the output files. If blank it will default to the CMAKE_CURRENT_BINARY_DIR") - -# Parse HOST_COMPILATION mode. -option(CUDA_HOST_COMPILATION_CPP "Generated file extension" ON) - -# Extra user settable flags -set(CUDA_NVCC_FLAGS "" CACHE STRING "Semi-colon delimit multiple arguments.") - -if(CMAKE_GENERATOR MATCHES "Visual Studio") - set(CUDA_HOST_COMPILER "$(VCInstallDir)bin" CACHE FILEPATH "Host side compiler used by NVCC") -else() - set(CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}" CACHE FILEPATH "Host side compiler used by NVCC") -endif() - -# Propagate the host flags to the host compiler via -Xcompiler -option(CUDA_PROPAGATE_HOST_FLAGS "Propage C/CXX_FLAGS and friends to the host compiler via -Xcompile" ON) - -# Enable CUDA_SEPARABLE_COMPILATION -option(CUDA_SEPARABLE_COMPILATION "Compile CUDA objects with separable compilation enabled. Requires CUDA 5.0+" OFF) - -# Specifies whether the commands used when compiling the .cu file will be printed out. -option(CUDA_VERBOSE_BUILD "Print out the commands run while compiling the CUDA source file. With the Makefile generator this defaults to VERBOSE variable specified on the command line, but can be forced on with this option." OFF) - -mark_as_advanced( - CUDA_64_BIT_DEVICE_CODE - CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE - CUDA_GENERATED_OUTPUT_DIR - CUDA_HOST_COMPILATION_CPP - CUDA_NVCC_FLAGS - CUDA_PROPAGATE_HOST_FLAGS - ) - -# Makefile and similar generators don't define CMAKE_CONFIGURATION_TYPES, so we -# need to add another entry for the CMAKE_BUILD_TYPE. We also need to add the -# standerd set of 4 build types (Debug, MinSizeRel, Release, and RelWithDebInfo) -# for completeness. We need run this loop in order to accomodate the addition -# of extra configuration types. Duplicate entries will be removed by -# REMOVE_DUPLICATES. -set(CUDA_configuration_types ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} Debug MinSizeRel Release RelWithDebInfo) -list(REMOVE_DUPLICATES CUDA_configuration_types) -foreach(config ${CUDA_configuration_types}) - string(TOUPPER ${config} config_upper) - set(CUDA_NVCC_FLAGS_${config_upper} "" CACHE STRING "Semi-colon delimit multiple arguments.") - mark_as_advanced(CUDA_NVCC_FLAGS_${config_upper}) -endforeach() - -############################################################################### -############################################################################### -# Locate CUDA, Set Build Type, etc. -############################################################################### -############################################################################### - -macro(cuda_unset_include_and_libraries) - unset(CUDA_TOOLKIT_INCLUDE CACHE) - unset(CUDA_CUDART_LIBRARY CACHE) - unset(CUDA_CUDA_LIBRARY CACHE) - # Make sure you run this before you unset CUDA_VERSION. - if(CUDA_VERSION VERSION_EQUAL "3.0") - # This only existed in the 3.0 version of the CUDA toolkit - unset(CUDA_CUDARTEMU_LIBRARY CACHE) - endif() - unset(CUDA_cupti_LIBRARY CACHE) - unset(CUDA_cublas_LIBRARY CACHE) - unset(CUDA_cublasemu_LIBRARY CACHE) - unset(CUDA_cufft_LIBRARY CACHE) - unset(CUDA_cufftemu_LIBRARY CACHE) - unset(CUDA_curand_LIBRARY CACHE) - unset(CUDA_cusparse_LIBRARY CACHE) - unset(CUDA_npp_LIBRARY CACHE) - unset(CUDA_nppc_LIBRARY CACHE) - unset(CUDA_nppi_LIBRARY CACHE) - unset(CUDA_npps_LIBRARY CACHE) - unset(CUDA_nvcuvenc_LIBRARY CACHE) - unset(CUDA_nvcuvid_LIBRARY CACHE) -endmacro() - -# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed, -# if they have then clear the cache variables, so that will be detected again. -if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}") - unset(CUDA_TOOLKIT_TARGET_DIR CACHE) - unset(CUDA_NVCC_EXECUTABLE CACHE) - unset(CUDA_VERSION CACHE) - cuda_unset_include_and_libraries() -endif() - -if(NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}") - cuda_unset_include_and_libraries() -endif() - -if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}") - # No specific variables to catch. Use this kind of code before calling - # find_package(CUDA) to clean up any variables that may depend on this path. - - # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE) - # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE) -endif() - -# Search for the cuda distribution. -if(NOT CUDA_TOOLKIT_ROOT_DIR) - - # Search in the CUDA_BIN_PATH first. - find_path(CUDA_TOOLKIT_ROOT_DIR - NAMES nvcc nvcc.exe - PATHS - ENV CUDA_PATH - ENV CUDA_BIN_PATH - PATH_SUFFIXES bin bin64 - DOC "Toolkit location." - NO_DEFAULT_PATH - ) - # Now search default paths - find_path(CUDA_TOOLKIT_ROOT_DIR - NAMES nvcc nvcc.exe - PATHS /usr/local/bin - /usr/local/cuda/bin - DOC "Toolkit location." - ) - - if (CUDA_TOOLKIT_ROOT_DIR) - string(REGEX REPLACE "[/\\\\]?bin[64]*[/\\\\]?$" "" CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR}) - # We need to force this back into the cache. - set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR} CACHE PATH "Toolkit location." FORCE) - endif() - if (NOT EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) - if(CUDA_FIND_REQUIRED) - message(FATAL_ERROR "Specify CUDA_TOOLKIT_ROOT_DIR") - elseif(NOT CUDA_FIND_QUIETLY) - message("CUDA_TOOLKIT_ROOT_DIR not found or specified") - endif() - endif () -endif () - -# CUDA_NVCC_EXECUTABLE -find_program(CUDA_NVCC_EXECUTABLE - NAMES nvcc - PATHS "${CUDA_TOOLKIT_ROOT_DIR}" - ENV CUDA_PATH - ENV CUDA_BIN_PATH - PATH_SUFFIXES bin bin64 - NO_DEFAULT_PATH - ) -# Search default search paths, after we search our own set of paths. -find_program(CUDA_NVCC_EXECUTABLE nvcc) -mark_as_advanced(CUDA_NVCC_EXECUTABLE) - -if(CUDA_NVCC_EXECUTABLE AND NOT CUDA_VERSION) - # Compute the version. - execute_process (COMMAND ${CUDA_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT) - string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR ${NVCC_OUT}) - string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR ${NVCC_OUT}) - set(CUDA_VERSION "${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}" CACHE STRING "Version of CUDA as computed from nvcc.") - mark_as_advanced(CUDA_VERSION) -else() - # Need to set these based off of the cached value - string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR "${CUDA_VERSION}") - string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR "${CUDA_VERSION}") -endif() - -# Always set this convenience variable -set(CUDA_VERSION_STRING "${CUDA_VERSION}") - -# Support for arm cross compilation with CUDA 5.5 -set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}") -if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") - if(ANDROID AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-androideabi") - set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-androideabi") - elseif(EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf") - set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf") - endif() -endif() -set(CUDA_TOOLKIT_TARGET_DIR "${__cuda_toolkit_target_dir_initial}" CACHE PATH "Toolkit target location.") -mark_as_advanced(CUDA_TOOLKIT_TARGET_DIR) - -# Target CPU architecture -if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") - set(_cuda_target_cpu_arch_initial "ARM") -else() - set(_cuda_target_cpu_arch_initial "") -endif() -set(CUDA_TARGET_CPU_ARCH ${_cuda_target_cpu_arch_initial} CACHE STRING "Specify the name of the class of CPU architecture for which the input files must be compiled.") -mark_as_advanced(CUDA_TARGET_CPU_ARCH) - -# CUDA_TOOLKIT_INCLUDE -find_path(CUDA_TOOLKIT_INCLUDE - device_functions.h # Header included in toolkit - PATHS "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}" - ENV CUDA_PATH - ENV CUDA_INC_PATH - PATH_SUFFIXES include - NO_DEFAULT_PATH - ) -# Search default search paths, after we search our own set of paths. -find_path(CUDA_TOOLKIT_INCLUDE device_functions.h) -mark_as_advanced(CUDA_TOOLKIT_INCLUDE) - -# Set the user list of include dir to nothing to initialize it. -set (CUDA_NVCC_INCLUDE_ARGS_USER "") -set (CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_INCLUDE}) - -macro(cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext ) - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - # CUDA 3.2+ on Windows moved the library directories, so we need the new - # and old paths. - set(_cuda_64bit_lib_dir "${_path_ext}lib/x64" "${_path_ext}lib64" "${_path_ext}libx64" ) - endif() - # CUDA 3.2+ on Windows moved the library directories, so we need to new - # (lib/Win32) and the old path (lib). - find_library(${_var} - NAMES ${_names} - PATHS "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}" - ENV CUDA_PATH - ENV CUDA_LIB_PATH - PATH_SUFFIXES ${_cuda_64bit_lib_dir} "${_path_ext}lib/Win32" "${_path_ext}lib" "${_path_ext}libWin32" - DOC ${_doc} - NO_DEFAULT_PATH - ) - # Search default search paths, after we search our own set of paths. - find_library(${_var} - NAMES ${_names} - PATHS "/usr/lib/nvidia-current" - DOC ${_doc} - ) -endmacro() - -macro(cuda_find_library_local_first _var _names _doc) - cuda_find_library_local_first_with_path_ext( "${_var}" "${_names}" "${_doc}" "" ) -endmacro() - -macro(find_library_local_first _var _names _doc ) - cuda_find_library_local_first( "${_var}" "${_names}" "${_doc}" "" ) -endmacro() - - -# CUDA_LIBRARIES -cuda_find_library_local_first(CUDA_CUDART_LIBRARY cudart "\"cudart\" library") -if(CUDA_VERSION VERSION_EQUAL "3.0") - # The cudartemu library only existed for the 3.0 version of CUDA. - cuda_find_library_local_first(CUDA_CUDARTEMU_LIBRARY cudartemu "\"cudartemu\" library") - mark_as_advanced( - CUDA_CUDARTEMU_LIBRARY - ) -endif() - -# CUPTI library showed up in cuda toolkit 4.0 -if(NOT CUDA_VERSION VERSION_LESS "4.0") - cuda_find_library_local_first_with_path_ext(CUDA_cupti_LIBRARY cupti "\"cupti\" library" "extras/CUPTI/") - mark_as_advanced(CUDA_cupti_LIBRARY) -endif() - -# If we are using emulation mode and we found the cudartemu library then use -# that one instead of cudart. -if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY) - set(CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY}) -else() - set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY}) -endif() -if(APPLE) - # We need to add the path to cudart to the linker using rpath, since the - # library name for the cuda libraries is prepended with @rpath. - if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY) - get_filename_component(_cuda_path_to_cudart "${CUDA_CUDARTEMU_LIBRARY}" PATH) - else() - get_filename_component(_cuda_path_to_cudart "${CUDA_CUDART_LIBRARY}" PATH) - endif() - if(_cuda_path_to_cudart) - list(APPEND CUDA_LIBRARIES -Wl,-rpath "-Wl,${_cuda_path_to_cudart}") - endif() -endif() - -# 1.1 toolkit on linux doesn't appear to have a separate library on -# some platforms. -cuda_find_library_local_first(CUDA_CUDA_LIBRARY cuda "\"cuda\" library (older versions only).") - -mark_as_advanced( - CUDA_CUDA_LIBRARY - CUDA_CUDART_LIBRARY - ) - -####################### -# Look for some of the toolkit helper libraries -macro(FIND_CUDA_HELPER_LIBS _name) - cuda_find_library_local_first(CUDA_${_name}_LIBRARY ${_name} "\"${_name}\" library") - mark_as_advanced(CUDA_${_name}_LIBRARY) -endmacro() - -####################### -# Disable emulation for v3.1 onward -if(CUDA_VERSION VERSION_GREATER "3.0") - if(CUDA_BUILD_EMULATION) - message(FATAL_ERROR "CUDA_BUILD_EMULATION is not supported in version 3.1 and onwards. You must disable it to proceed. You have version ${CUDA_VERSION}.") - endif() -endif() - -# Search for additional CUDA toolkit libraries. -if(CUDA_VERSION VERSION_LESS "3.1") - # Emulation libraries aren't available in version 3.1 onward. - find_cuda_helper_libs(cufftemu) - find_cuda_helper_libs(cublasemu) -endif() -find_cuda_helper_libs(cufft) -find_cuda_helper_libs(cublas) -if(NOT CUDA_VERSION VERSION_LESS "3.2") - # cusparse showed up in version 3.2 - find_cuda_helper_libs(cusparse) - find_cuda_helper_libs(curand) - if (WIN32) - find_cuda_helper_libs(nvcuvenc) - find_cuda_helper_libs(nvcuvid) - endif() -endif() -if(CUDA_VERSION VERSION_GREATER "5.0") - # In CUDA 5.5 NPP was splitted onto 3 separate libraries. - find_cuda_helper_libs(nppc) - find_cuda_helper_libs(nppi) - find_cuda_helper_libs(npps) - set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}") -elseif(NOT CUDA_VERSION VERSION_LESS "4.0") - find_cuda_helper_libs(npp) -endif() - -if (CUDA_BUILD_EMULATION) - set(CUDA_CUFFT_LIBRARIES ${CUDA_cufftemu_LIBRARY}) - set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY}) -else() - set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY}) - set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY}) -endif() - -######################## -# Look for the SDK stuff. As of CUDA 3.0 NVSDKCUDA_ROOT has been replaced with -# NVSDKCOMPUTE_ROOT with the old CUDA C contents moved into the C subdirectory -find_path(CUDA_SDK_ROOT_DIR common/inc/cutil.h - HINTS - "$ENV{NVSDKCOMPUTE_ROOT}/C" - ENV NVSDKCUDA_ROOT - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" - PATHS - "/Developer/GPU\ Computing/C" - ) - -# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the -# environment variables. -set(CUDA_SDK_SEARCH_PATH - "${CUDA_SDK_ROOT_DIR}" - "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2" - "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2" - "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK" - "$ENV{HOME}/NVIDIA_CUDA_SDK" - "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX" - "/Developer/CUDA" - ) - -# Example of how to find an include file from the CUDA_SDK_ROOT_DIR - -# find_path(CUDA_CUT_INCLUDE_DIR -# cutil.h -# PATHS ${CUDA_SDK_SEARCH_PATH} -# PATH_SUFFIXES "common/inc" -# DOC "Location of cutil.h" -# NO_DEFAULT_PATH -# ) -# # Now search system paths -# find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h") - -# mark_as_advanced(CUDA_CUT_INCLUDE_DIR) - - -# Example of how to find a library in the CUDA_SDK_ROOT_DIR - -# # cutil library is called cutil64 for 64 bit builds on windows. We don't want -# # to get these confused, so we are setting the name based on the word size of -# # the build. - -# if(CMAKE_SIZEOF_VOID_P EQUAL 8) -# set(cuda_cutil_name cutil64) -# else() -# set(cuda_cutil_name cutil32) -# endif() - -# find_library(CUDA_CUT_LIBRARY -# NAMES cutil ${cuda_cutil_name} -# PATHS ${CUDA_SDK_SEARCH_PATH} -# # The new version of the sdk shows up in common/lib, but the old one is in lib -# PATH_SUFFIXES "common/lib" "lib" -# DOC "Location of cutil library" -# NO_DEFAULT_PATH -# ) -# # Now search system paths -# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library") -# mark_as_advanced(CUDA_CUT_LIBRARY) -# set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY}) - - - -############################# -# Check for required components -set(CUDA_FOUND TRUE) - -set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL - "This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE) -set(CUDA_TOOLKIT_TARGET_DIR_INTERNAL "${CUDA_TOOLKIT_TARGET_DIR}" CACHE INTERNAL - "This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully." FORCE) -set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL - "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(CUDA - REQUIRED_VARS - CUDA_TOOLKIT_ROOT_DIR - CUDA_NVCC_EXECUTABLE - CUDA_INCLUDE_DIRS - CUDA_CUDART_LIBRARY - VERSION_VAR - CUDA_VERSION - ) - - - -############################################################################### -############################################################################### -# Macros -############################################################################### -############################################################################### - -############################################################################### -# Add include directories to pass to the nvcc command. -macro(CUDA_INCLUDE_DIRECTORIES) - foreach(dir ${ARGN}) - list(APPEND CUDA_NVCC_INCLUDE_ARGS_USER -I${dir}) - endforeach() -endmacro() - - -############################################################################## -cuda_find_helper_file(parse_cubin cmake) -cuda_find_helper_file(make2cmake cmake) -cuda_find_helper_file(run_nvcc cmake) - -############################################################################## -# Separate the OPTIONS out from the sources -# -macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options) - set( ${_sources} ) - set( ${_cmake_options} ) - set( ${_options} ) - set( _found_options FALSE ) - foreach(arg ${ARGN}) - if(arg STREQUAL "OPTIONS") - set( _found_options TRUE ) - elseif( - arg STREQUAL "WIN32" OR - arg STREQUAL "MACOSX_BUNDLE" OR - arg STREQUAL "EXCLUDE_FROM_ALL" OR - arg STREQUAL "STATIC" OR - arg STREQUAL "SHARED" OR - arg STREQUAL "MODULE" - ) - list(APPEND ${_cmake_options} ${arg}) - else() - if ( _found_options ) - list(APPEND ${_options} ${arg}) - else() - # Assume this is a file - list(APPEND ${_sources} ${arg}) - endif() - endif() - endforeach() -endmacro() - -############################################################################## -# Parse the OPTIONS from ARGN and set the variables prefixed by _option_prefix -# -macro(CUDA_PARSE_NVCC_OPTIONS _option_prefix) - set( _found_config ) - foreach(arg ${ARGN}) - # Determine if we are dealing with a perconfiguration flag - foreach(config ${CUDA_configuration_types}) - string(TOUPPER ${config} config_upper) - if (arg STREQUAL "${config_upper}") - set( _found_config _${arg}) - # Set arg to nothing to keep it from being processed further - set( arg ) - endif() - endforeach() - - if ( arg ) - list(APPEND ${_option_prefix}${_found_config} "${arg}") - endif() - endforeach() -endmacro() - -############################################################################## -# Helper to add the include directory for CUDA only once -function(CUDA_ADD_CUDA_INCLUDE_ONCE) - get_directory_property(_include_directories INCLUDE_DIRECTORIES) - set(_add TRUE) - if(_include_directories) - foreach(dir ${_include_directories}) - if("${dir}" STREQUAL "${CUDA_INCLUDE_DIRS}") - set(_add FALSE) - endif() - endforeach() - endif() - if(_add) - include_directories(${CUDA_INCLUDE_DIRS}) - endif() -endfunction() - -function(CUDA_BUILD_SHARED_LIBRARY shared_flag) - set(cmake_args ${ARGN}) - # If SHARED, MODULE, or STATIC aren't already in the list of arguments, then - # add SHARED or STATIC based on the value of BUILD_SHARED_LIBS. - list(FIND cmake_args SHARED _cuda_found_SHARED) - list(FIND cmake_args MODULE _cuda_found_MODULE) - list(FIND cmake_args STATIC _cuda_found_STATIC) - if( _cuda_found_SHARED GREATER -1 OR - _cuda_found_MODULE GREATER -1 OR - _cuda_found_STATIC GREATER -1) - set(_cuda_build_shared_libs) - else() - if (BUILD_SHARED_LIBS) - set(_cuda_build_shared_libs SHARED) - else() - set(_cuda_build_shared_libs STATIC) - endif() - endif() - set(${shared_flag} ${_cuda_build_shared_libs} PARENT_SCOPE) -endfunction() - -############################################################################## -# Helper to avoid clashes of files with the same basename but different paths. -# This doesn't attempt to do exactly what CMake internals do, which is to only -# add this path when there is a conflict, since by the time a second collision -# in names is detected it's already too late to fix the first one. For -# consistency sake the relative path will be added to all files. -function(CUDA_COMPUTE_BUILD_PATH path build_path) - #message("CUDA_COMPUTE_BUILD_PATH([${path}] ${build_path})") - # Only deal with CMake style paths from here on out - file(TO_CMAKE_PATH "${path}" bpath) - if (IS_ABSOLUTE "${bpath}") - # Absolute paths are generally unnessary, especially if something like - # file(GLOB_RECURSE) is used to pick up the files. - - string(FIND "${bpath}" "${CMAKE_CURRENT_BINARY_DIR}" _binary_dir_pos) - if (_binary_dir_pos EQUAL 0) - file(RELATIVE_PATH bpath "${CMAKE_CURRENT_BINARY_DIR}" "${bpath}") - else() - file(RELATIVE_PATH bpath "${CMAKE_CURRENT_SOURCE_DIR}" "${bpath}") - endif() - endif() - - # This recipie is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the - # CMake source. - - # Remove leading / - string(REGEX REPLACE "^[/]+" "" bpath "${bpath}") - # Avoid absolute paths by removing ':' - string(REPLACE ":" "_" bpath "${bpath}") - # Avoid relative paths that go up the tree - string(REPLACE "../" "__/" bpath "${bpath}") - # Avoid spaces - string(REPLACE " " "_" bpath "${bpath}") - - # Strip off the filename. I wait until here to do it, since removin the - # basename can make a path that looked like path/../basename turn into - # path/.. (notice the trailing slash). - get_filename_component(bpath "${bpath}" PATH) - - set(${build_path} "${bpath}" PARENT_SCOPE) - #message("${build_path} = ${bpath}") -endfunction() - -############################################################################## -# This helper macro populates the following variables and setups up custom -# commands and targets to invoke the nvcc compiler to generate C or PTX source -# dependent upon the format parameter. The compiler is invoked once with -M -# to generate a dependency file and a second time with -cuda or -ptx to generate -# a .cpp or .ptx file. -# INPUT: -# cuda_target - Target name -# format - PTX or OBJ -# FILE1 .. FILEN - The remaining arguments are the sources to be wrapped. -# OPTIONS - Extra options to NVCC -# OUTPUT: -# generated_files - List of generated files -############################################################################## -############################################################################## - -macro(CUDA_WRAP_SRCS cuda_target format generated_files) - - # If CMake doesn't support separable compilation, complain - if(CUDA_SEPARABLE_COMPILATION AND CMAKE_VERSION VERSION_LESS "2.8.10.1") - message(SEND_ERROR "CUDA_SEPARABLE_COMPILATION isn't supported for CMake versions less than 2.8.10.1") - endif() - - # Set up all the command line flags here, so that they can be overridden on a per target basis. - - set(nvcc_flags "") - - # Emulation if the card isn't present. - if (CUDA_BUILD_EMULATION) - # Emulation. - set(nvcc_flags ${nvcc_flags} --device-emulation -D_DEVICEEMU -g) - else() - # Device mode. No flags necessary. - endif() - - if(CUDA_HOST_COMPILATION_CPP) - set(CUDA_C_OR_CXX CXX) - else() - if(CUDA_VERSION VERSION_LESS "3.0") - set(nvcc_flags ${nvcc_flags} --host-compilation C) - else() - message(WARNING "--host-compilation flag is deprecated in CUDA version >= 3.0. Removing --host-compilation C flag" ) - endif() - set(CUDA_C_OR_CXX C) - endif() - - set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION}) - - if(CUDA_64_BIT_DEVICE_CODE) - set(nvcc_flags ${nvcc_flags} -m64) - else() - set(nvcc_flags ${nvcc_flags} -m32) - endif() - - if(CUDA_TARGET_CPU_ARCH) - set(nvcc_flags ${nvcc_flags} "--target-cpu-architecture=${CUDA_TARGET_CPU_ARCH}") - endif() - - # This needs to be passed in at this stage, because VS needs to fill out the - # value of VCInstallDir from within VS. Note that CCBIN is only used if - # -ccbin or --compiler-bindir isn't used and CUDA_HOST_COMPILER matches - # $(VCInstallDir)/bin. - if(CMAKE_GENERATOR MATCHES "Visual Studio") - set(ccbin_flags -D "\"CCBIN:PATH=$(VCInstallDir)bin\"" ) - else() - set(ccbin_flags) - endif() - - # Figure out which configure we will use and pass that in as an argument to - # the script. We need to defer the decision until compilation time, because - # for VS projects we won't know if we are making a debug or release build - # until build time. - if(CMAKE_GENERATOR MATCHES "Visual Studio") - set( CUDA_build_configuration "$(ConfigurationName)" ) - else() - set( CUDA_build_configuration "${CMAKE_BUILD_TYPE}") - endif() - - # Initialize our list of includes with the user ones followed by the CUDA system ones. - set(CUDA_NVCC_INCLUDE_ARGS ${CUDA_NVCC_INCLUDE_ARGS_USER} "-I${CUDA_INCLUDE_DIRS}") - # Get the include directories for this directory and use them for our nvcc command. - # Remove duplicate entries which may be present since include_directories - # in CMake >= 2.8.8 does not remove them. - get_directory_property(CUDA_NVCC_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES) - list(REMOVE_DUPLICATES CUDA_NVCC_INCLUDE_DIRECTORIES) - if(CUDA_NVCC_INCLUDE_DIRECTORIES) - foreach(dir ${CUDA_NVCC_INCLUDE_DIRECTORIES}) - list(APPEND CUDA_NVCC_INCLUDE_ARGS -I${dir}) - endforeach() - endif() - - # Reset these variables - set(CUDA_WRAP_OPTION_NVCC_FLAGS) - foreach(config ${CUDA_configuration_types}) - string(TOUPPER ${config} config_upper) - set(CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}) - endforeach() - - CUDA_GET_SOURCES_AND_OPTIONS(_cuda_wrap_sources _cuda_wrap_cmake_options _cuda_wrap_options ${ARGN}) - CUDA_PARSE_NVCC_OPTIONS(CUDA_WRAP_OPTION_NVCC_FLAGS ${_cuda_wrap_options}) - - # Figure out if we are building a shared library. BUILD_SHARED_LIBS is - # respected in CUDA_ADD_LIBRARY. - set(_cuda_build_shared_libs FALSE) - # SHARED, MODULE - list(FIND _cuda_wrap_cmake_options SHARED _cuda_found_SHARED) - list(FIND _cuda_wrap_cmake_options MODULE _cuda_found_MODULE) - if(_cuda_found_SHARED GREATER -1 OR _cuda_found_MODULE GREATER -1) - set(_cuda_build_shared_libs TRUE) - endif() - # STATIC - list(FIND _cuda_wrap_cmake_options STATIC _cuda_found_STATIC) - if(_cuda_found_STATIC GREATER -1) - set(_cuda_build_shared_libs FALSE) - endif() - - # CUDA_HOST_FLAGS - if(_cuda_build_shared_libs) - # If we are setting up code for a shared library, then we need to add extra flags for - # compiling objects for shared libraries. - set(CUDA_HOST_SHARED_FLAGS ${CMAKE_SHARED_LIBRARY_${CUDA_C_OR_CXX}_FLAGS}) - else() - set(CUDA_HOST_SHARED_FLAGS) - endif() - # Only add the CMAKE_{C,CXX}_FLAGS if we are propagating host flags. We - # always need to set the SHARED_FLAGS, though. - if(CUDA_PROPAGATE_HOST_FLAGS) - set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CMAKE_${CUDA_C_OR_CXX}_FLAGS} ${CUDA_HOST_SHARED_FLAGS})") - else() - set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CUDA_HOST_SHARED_FLAGS})") - endif() - - set(_cuda_nvcc_flags_config "# Build specific configuration flags") - # Loop over all the configuration types to generate appropriate flags for run_nvcc.cmake - foreach(config ${CUDA_configuration_types}) - string(TOUPPER ${config} config_upper) - # CMAKE_FLAGS are strings and not lists. By not putting quotes around CMAKE_FLAGS - # we convert the strings to lists (like we want). - - if(CUDA_PROPAGATE_HOST_FLAGS) - # nvcc chokes on -g3 in versions previous to 3.0, so replace it with -g - set(_cuda_fix_g3 FALSE) - - if(CMAKE_COMPILER_IS_GNUCC) - if (CUDA_VERSION VERSION_LESS "3.0" OR - CUDA_VERSION VERSION_EQUAL "4.1" OR - CUDA_VERSION VERSION_EQUAL "4.2" - ) - set(_cuda_fix_g3 TRUE) - endif() - endif() - if(_cuda_fix_g3) - string(REPLACE "-g3" "-g" _cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}") - else() - set(_cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}") - endif() - - set(_cuda_host_flags "${_cuda_host_flags}\nset(CMAKE_HOST_FLAGS_${config_upper} ${_cuda_C_FLAGS})") - endif() - - # Note that if we ever want CUDA_NVCC_FLAGS_ to be string (instead of a list - # like it is currently), we can remove the quotes around the - # ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_ variable. - set(_cuda_nvcc_flags_config "${_cuda_nvcc_flags_config}\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})") - endforeach() - - # Get the list of definitions from the directory property - get_directory_property(CUDA_NVCC_DEFINITIONS COMPILE_DEFINITIONS) - if(CUDA_NVCC_DEFINITIONS) - foreach(_definition ${CUDA_NVCC_DEFINITIONS}) - list(APPEND nvcc_flags "-D${_definition}") - endforeach() - endif() - - if(_cuda_build_shared_libs) - list(APPEND nvcc_flags "-D${cuda_target}_EXPORTS") - endif() - - # Reset the output variable - set(_cuda_wrap_generated_files "") - - # Iterate over the macro arguments and create custom - # commands for all the .cu files. - foreach(file ${ARGN}) - # Ignore any file marked as a HEADER_FILE_ONLY - get_source_file_property(_is_header ${file} HEADER_FILE_ONLY) - if(${file} MATCHES ".*\\.cu$" AND NOT _is_header) - - # Allow per source file overrides of the format. - get_source_file_property(_cuda_source_format ${file} CUDA_SOURCE_PROPERTY_FORMAT) - if(NOT _cuda_source_format) - set(_cuda_source_format ${format}) - endif() - - if( ${_cuda_source_format} MATCHES "PTX" ) - set( compile_to_ptx ON ) - elseif( ${_cuda_source_format} MATCHES "OBJ") - set( compile_to_ptx OFF ) - else() - message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS for file '${file}': '${_cuda_source_format}'. Use OBJ or PTX.") - endif() - - - if(compile_to_ptx) - # Don't use any of the host compilation flags for PTX targets. - set(CUDA_HOST_FLAGS) - set(CUDA_NVCC_FLAGS_CONFIG) - else() - set(CUDA_HOST_FLAGS ${_cuda_host_flags}) - set(CUDA_NVCC_FLAGS_CONFIG ${_cuda_nvcc_flags_config}) - endif() - - # Determine output directory - cuda_compute_build_path("${file}" cuda_build_path) - set(cuda_compile_intermediate_directory "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${cuda_build_path}") - if(CUDA_GENERATED_OUTPUT_DIR) - set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}") - else() - if ( compile_to_ptx ) - set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}") - else() - set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}") - endif() - endif() - - # Add a custom target to generate a c or ptx file. ###################### - - get_filename_component( basename ${file} NAME ) - if( compile_to_ptx ) - set(generated_file_path "${cuda_compile_output_dir}") - set(generated_file_basename "${cuda_target}_generated_${basename}.ptx") - set(format_flag "-ptx") - file(MAKE_DIRECTORY "${cuda_compile_output_dir}") - else() - set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}") - set(generated_file_basename "${cuda_target}_generated_${basename}${generated_extension}") - if(CUDA_SEPARABLE_COMPILATION) - set(format_flag "-dc") - else() - set(format_flag "-c") - endif() - endif() - - # Set all of our file names. Make sure that whatever filenames that have - # generated_file_path in them get passed in through as a command line - # argument, so that the ${CMAKE_CFG_INTDIR} gets expanded at run time - # instead of configure time. - set(generated_file "${generated_file_path}/${generated_file_basename}") - set(cmake_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.depend") - set(NVCC_generated_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.NVCC-depend") - set(generated_cubin_file "${generated_file_path}/${generated_file_basename}.cubin.txt") - set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake") - - # Setup properties for obj files: - if( NOT compile_to_ptx ) - set_source_files_properties("${generated_file}" - PROPERTIES - EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked. - ) - endif() - - # Don't add CMAKE_CURRENT_SOURCE_DIR if the path is already an absolute path. - get_filename_component(file_path "${file}" PATH) - if(IS_ABSOLUTE "${file_path}") - set(source_file "${file}") - else() - set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}") - endif() - - if( NOT compile_to_ptx AND CUDA_SEPARABLE_COMPILATION) - list(APPEND ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS "${generated_file}") - endif() - - # Bring in the dependencies. Creates a variable CUDA_NVCC_DEPEND ####### - cuda_include_nvcc_dependencies(${cmake_dependency_file}) - - # Convience string for output ########################################### - if(CUDA_BUILD_EMULATION) - set(cuda_build_type "Emulation") - else() - set(cuda_build_type "Device") - endif() - - # Build the NVCC made dependency file ################################### - set(build_cubin OFF) - if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN ) - if ( NOT compile_to_ptx ) - set ( build_cubin ON ) - endif() - endif() - - # Configure the build script - configure_file("${CUDA_run_nvcc}" "${custom_target_script}" @ONLY) - - # So if a user specifies the same cuda file as input more than once, you - # can have bad things happen with dependencies. Here we check an option - # to see if this is the behavior they want. - if(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE) - set(main_dep MAIN_DEPENDENCY ${source_file}) - else() - set(main_dep DEPENDS ${source_file}) - endif() - - if(CUDA_VERBOSE_BUILD) - set(verbose_output ON) - elseif(CMAKE_GENERATOR MATCHES "Makefiles") - set(verbose_output "$(VERBOSE)") - else() - set(verbose_output OFF) - endif() - - # Create up the comment string - file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}") - if(compile_to_ptx) - set(cuda_build_comment_string "Building NVCC ptx file ${generated_file_relative_path}") - else() - set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}") - endif() - - # Build the generated file and dependency file ########################## - add_custom_command( - OUTPUT ${generated_file} - # These output files depend on the source_file and the contents of cmake_dependency_file - ${main_dep} - DEPENDS ${CUDA_NVCC_DEPEND} - DEPENDS ${custom_target_script} - # Make sure the output directory exists before trying to write to it. - COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_file_path}" - COMMAND ${CMAKE_COMMAND} ARGS - -D verbose:BOOL=${verbose_output} - ${ccbin_flags} - -D build_configuration:STRING=${CUDA_build_configuration} - -D "generated_file:STRING=${generated_file}" - -D "generated_cubin_file:STRING=${generated_cubin_file}" - -P "${custom_target_script}" - WORKING_DIRECTORY "${cuda_compile_intermediate_directory}" - COMMENT "${cuda_build_comment_string}" - ) - - # Make sure the build system knows the file is generated. - set_source_files_properties(${generated_file} PROPERTIES GENERATED TRUE) - - list(APPEND _cuda_wrap_generated_files ${generated_file}) - - # Add the other files that we want cmake to clean on a cleanup ########## - list(APPEND CUDA_ADDITIONAL_CLEAN_FILES "${cmake_dependency_file}") - list(REMOVE_DUPLICATES CUDA_ADDITIONAL_CLEAN_FILES) - set(CUDA_ADDITIONAL_CLEAN_FILES ${CUDA_ADDITIONAL_CLEAN_FILES} CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.") - - endif() - endforeach() - - # Set the return parameter - set(${generated_files} ${_cuda_wrap_generated_files}) -endmacro() - -function(_cuda_get_important_host_flags important_flags flag_string) - if(CMAKE_GENERATOR MATCHES "Visual Studio") - string(REGEX MATCHALL "/M[DT][d]?" flags ${flag_string}) - list(APPEND ${important_flags} ${flags}) - else() - string(REGEX MATCHALL "-fPIC" flags ${flag_string}) - list(APPEND ${important_flags} ${flags}) - endif() - set(${important_flags} ${${important_flags}} PARENT_SCOPE) -endfunction() - -############################################################################### -############################################################################### -# Separable Compilation Link -############################################################################### -############################################################################### - -# Compute the filename to be used by CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS -function(CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME output_file_var cuda_target object_files) - if (object_files) - set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION}) - set(output_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${CMAKE_CFG_INTDIR}/${cuda_target}_intermediate_link${generated_extension}") - else() - set(output_file) - endif() - - set(${output_file_var} "${output_file}" PARENT_SCOPE) -endfunction() - -# Setup the build rule for the separable compilation intermediate link file. -function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options object_files) - if (object_files) - - set_source_files_properties("${output_file}" - PROPERTIES - EXTERNAL_OBJECT TRUE # This is an object file not to be compiled, but only - # be linked. - GENERATED TRUE # This file is generated during the build - ) - - # For now we are ignoring all the configuration specific flags. - set(nvcc_flags) - CUDA_PARSE_NVCC_OPTIONS(nvcc_flags ${options}) - if(CUDA_64_BIT_DEVICE_CODE) - list(APPEND nvcc_flags -m64) - else() - list(APPEND nvcc_flags -m32) - endif() - # If -ccbin, --compiler-bindir has been specified, don't do anything. Otherwise add it here. - list( FIND nvcc_flags "-ccbin" ccbin_found0 ) - list( FIND nvcc_flags "--compiler-bindir" ccbin_found1 ) - if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 ) - list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"") - endif() - set(flags) - foreach(config ${CUDA_configuration_types}) - string(TOUPPER ${config} config_upper) - set(important_host_flags) - _cuda_get_important_host_flags(important_host_flags ${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}) - foreach(f ${important_host_flags}) - list(APPEND flags $<$:-Xcompiler> $<$:${f}>) - endforeach() - endforeach() - file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}") - - # Some generators don't handle the multiple levels of custom command - # dependencies correctly (obj1 depends on file1, obj2 depends on obj1), so - # we work around that issue by compiling the intermediate link object as a - # pre-link custom command in that situation. - set(do_obj_build_rule TRUE) - if (MSVC_VERSION GREATER 1599) - # VS 2010 and 2012 have this problem. If future versions fix this issue, - # it should still work, it just won't be as nice as the other method. - set(do_obj_build_rule FALSE) - endif() - - if (do_obj_build_rule) - add_custom_command( - OUTPUT ${output_file} - DEPENDS ${object_files} - COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} -dlink ${object_files} -o ${output_file} - ${flags} - COMMENT "Building NVCC intermediate link file ${output_file_relative_path}" - ) - else() - add_custom_command( - TARGET ${cuda_target} - PRE_LINK - COMMAND ${CMAKE_COMMAND} -E echo "Building NVCC intermediate link file ${output_file_relative_path}" - COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} ${flags} -dlink ${object_files} -o "${output_file}" - ) - endif() - endif() -endfunction() - -############################################################################### -############################################################################### -# ADD LIBRARY -############################################################################### -############################################################################### -macro(CUDA_ADD_LIBRARY cuda_target) - - CUDA_ADD_CUDA_INCLUDE_ONCE() - - # Separate the sources from the options - CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) - CUDA_BUILD_SHARED_LIBRARY(_cuda_shared_flag ${ARGN}) - # Create custom commands and targets for each file. - CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} - ${_cmake_options} ${_cuda_shared_flag} - OPTIONS ${_options} ) - - # Compute the file name of the intermedate link file used for separable - # compilation. - CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}") - - # Add the library. - add_library(${cuda_target} ${_cmake_options} - ${_generated_files} - ${_sources} - ${link_file} - ) - - # Add a link phase for the separable compilation if it has been enabled. If - # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS - # variable will have been defined. - CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}") - - target_link_libraries(${cuda_target} - ${CUDA_LIBRARIES} - ) - - # We need to set the linker language based on what the expected generated file - # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP. - set_target_properties(${cuda_target} - PROPERTIES - LINKER_LANGUAGE ${CUDA_C_OR_CXX} - ) - -endmacro() - - -############################################################################### -############################################################################### -# ADD EXECUTABLE -############################################################################### -############################################################################### -macro(CUDA_ADD_EXECUTABLE cuda_target) - - CUDA_ADD_CUDA_INCLUDE_ONCE() - - # Separate the sources from the options - CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) - # Create custom commands and targets for each file. - CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} OPTIONS ${_options} ) - - # Compute the file name of the intermedate link file used for separable - # compilation. - CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}") - - # Add the library. - add_executable(${cuda_target} ${_cmake_options} - ${_generated_files} - ${_sources} - ${link_file} - ) - - # Add a link phase for the separable compilation if it has been enabled. If - # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS - # variable will have been defined. - CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}") - - target_link_libraries(${cuda_target} - ${CUDA_LIBRARIES} - ) - - # We need to set the linker language based on what the expected generated file - # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP. - set_target_properties(${cuda_target} - PROPERTIES - LINKER_LANGUAGE ${CUDA_C_OR_CXX} - ) - -endmacro() - - -############################################################################### -############################################################################### -# CUDA COMPILE -############################################################################### -############################################################################### -macro(CUDA_COMPILE generated_files) - - # Separate the sources from the options - CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) - # Create custom commands and targets for each file. - CUDA_WRAP_SRCS( cuda_compile OBJ _generated_files ${_sources} ${_cmake_options} - OPTIONS ${_options} ) - - set( ${generated_files} ${_generated_files}) - -endmacro() - - -############################################################################### -############################################################################### -# CUDA COMPILE PTX -############################################################################### -############################################################################### -macro(CUDA_COMPILE_PTX generated_files) - - # Separate the sources from the options - CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) - # Create custom commands and targets for each file. - CUDA_WRAP_SRCS( cuda_compile_ptx PTX _generated_files ${_sources} ${_cmake_options} - OPTIONS ${_options} ) - - set( ${generated_files} ${_generated_files}) - -endmacro() - -############################################################################### -############################################################################### -# CUDA ADD CUFFT TO TARGET -############################################################################### -############################################################################### -macro(CUDA_ADD_CUFFT_TO_TARGET target) - if (CUDA_BUILD_EMULATION) - target_link_libraries(${target} ${CUDA_cufftemu_LIBRARY}) - else() - target_link_libraries(${target} ${CUDA_cufft_LIBRARY}) - endif() -endmacro() - -############################################################################### -############################################################################### -# CUDA ADD CUBLAS TO TARGET -############################################################################### -############################################################################### -macro(CUDA_ADD_CUBLAS_TO_TARGET target) - if (CUDA_BUILD_EMULATION) - target_link_libraries(${target} ${CUDA_cublasemu_LIBRARY}) - else() - target_link_libraries(${target} ${CUDA_cublas_LIBRARY}) - endif() -endmacro() - -############################################################################### -############################################################################### -# CUDA BUILD CLEAN TARGET -############################################################################### -############################################################################### -macro(CUDA_BUILD_CLEAN_TARGET) - # Call this after you add all your CUDA targets, and you will get a convience - # target. You should also make clean after running this target to get the - # build system to generate all the code again. - - set(cuda_clean_target_name clean_cuda_depends) - if (CMAKE_GENERATOR MATCHES "Visual Studio") - string(TOUPPER ${cuda_clean_target_name} cuda_clean_target_name) - endif() - add_custom_target(${cuda_clean_target_name} - COMMAND ${CMAKE_COMMAND} -E remove ${CUDA_ADDITIONAL_CLEAN_FILES}) - - # Clear out the variable, so the next time we configure it will be empty. - # This is useful so that the files won't persist in the list after targets - # have been removed. - set(CUDA_ADDITIONAL_CLEAN_FILES "" CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.") -endmacro() diff --git a/cmake/FindCUDA/make2cmake.cmake b/cmake/FindCUDA/make2cmake.cmake deleted file mode 100644 index 1b53d17..0000000 --- a/cmake/FindCUDA/make2cmake.cmake +++ /dev/null @@ -1,93 +0,0 @@ -# James Bigler, NVIDIA Corp (nvidia.com - jbigler) -# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html -# -# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. -# -# Copyright (c) 2007-2009 -# Scientific Computing and Imaging Institute, University of Utah -# -# This code is licensed under the MIT License. See the FindCUDA.cmake script -# for the text of the license. - -# The MIT License -# -# License for the specific language governing rights and limitations under -# 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 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, -# 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. -# - -####################################################################### -# This converts a file written in makefile syntax into one that can be included -# by CMake. - -file(READ ${input_file} depend_text) - -if (${depend_text} MATCHES ".+") - - # message("FOUND DEPENDS") - - # Remember, four backslashes is escaped to one backslash in the string. - string(REGEX REPLACE "\\\\ " " " depend_text ${depend_text}) - - # This works for the nvcc -M generated dependency files. - string(REGEX REPLACE "^.* : " "" depend_text ${depend_text}) - string(REGEX REPLACE "[ \\\\]*\n" ";" depend_text ${depend_text}) - - set(dependency_list "") - - foreach(file ${depend_text}) - - string(REGEX REPLACE "^ +" "" file ${file}) - - # OK, now if we had a UNC path, nvcc has a tendency to only output the first '/' - # instead of '//'. Here we will test to see if the file exists, if it doesn't then - # try to prepend another '/' to the path and test again. If it still fails remove the - # path. - - if(NOT EXISTS "${file}") - if (EXISTS "/${file}") - set(file "/${file}") - else() - message(WARNING " Removing non-existent dependency file: ${file}") - set(file "") - endif() - endif() - - if(NOT IS_DIRECTORY "${file}") - # If softlinks start to matter, we should change this to REALPATH. For now we need - # to flatten paths, because nvcc can generate stuff like /bin/../include instead of - # just /include. - get_filename_component(file_absolute "${file}" ABSOLUTE) - list(APPEND dependency_list "${file_absolute}") - endif() - - endforeach() - -else() - # message("FOUND NO DEPENDS") -endif() - -# Remove the duplicate entries and sort them. -list(REMOVE_DUPLICATES dependency_list) -list(SORT dependency_list) - -foreach(file ${dependency_list}) - set(cuda_nvcc_depend "${cuda_nvcc_depend} \"${file}\"\n") -endforeach() - -file(WRITE ${output_file} "# Generated by: make2cmake.cmake\nSET(CUDA_NVCC_DEPEND\n ${cuda_nvcc_depend})\n\n") diff --git a/cmake/FindCUDA/parse_cubin.cmake b/cmake/FindCUDA/parse_cubin.cmake deleted file mode 100644 index e1905cf..0000000 --- a/cmake/FindCUDA/parse_cubin.cmake +++ /dev/null @@ -1,110 +0,0 @@ -# James Bigler, NVIDIA Corp (nvidia.com - jbigler) -# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html -# -# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. -# -# Copyright (c) 2007-2009 -# Scientific Computing and Imaging Institute, University of Utah -# -# This code is licensed under the MIT License. See the FindCUDA.cmake script -# for the text of the license. - -# The MIT License -# -# License for the specific language governing rights and limitations under -# 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 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, -# 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. -# - -####################################################################### -# Parses a .cubin file produced by nvcc and reports statistics about the file. - - -file(READ ${input_file} file_text) - -if (${file_text} MATCHES ".+") - - # Remember, four backslashes is escaped to one backslash in the string. - string(REGEX REPLACE ";" "\\\\;" file_text ${file_text}) - string(REGEX REPLACE "\ncode" ";code" file_text ${file_text}) - - list(LENGTH file_text len) - - foreach(line ${file_text}) - - # Only look at "code { }" blocks. - if(line MATCHES "^code") - - # Break into individual lines. - string(REGEX REPLACE "\n" ";" line ${line}) - - foreach(entry ${line}) - - # Extract kernel names. - if (${entry} MATCHES "[^g]name = ([^ ]+)") - string(REGEX REPLACE ".* = ([^ ]+)" "\\1" entry ${entry}) - - # Check to see if the kernel name starts with "_" - set(skip FALSE) - # if (${entry} MATCHES "^_") - # Skip the rest of this block. - # message("Skipping ${entry}") - # set(skip TRUE) - # else () - message("Kernel: ${entry}") - # endif () - - endif() - - # Skip the rest of the block if necessary - if(NOT skip) - - # Registers - if (${entry} MATCHES "reg([ ]+)=([ ]+)([^ ]+)") - string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) - message("Registers: ${entry}") - endif() - - # Local memory - if (${entry} MATCHES "lmem([ ]+)=([ ]+)([^ ]+)") - string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) - message("Local: ${entry}") - endif() - - # Shared memory - if (${entry} MATCHES "smem([ ]+)=([ ]+)([^ ]+)") - string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) - message("Shared: ${entry}") - endif() - - if (${entry} MATCHES "^}") - message("") - endif() - - endif() - - - endforeach() - - endif() - - endforeach() - -else() - # message("FOUND NO DEPENDS") -endif() diff --git a/cmake/FindCUDA/run_nvcc.cmake b/cmake/FindCUDA/run_nvcc.cmake deleted file mode 100644 index f0aac84..0000000 --- a/cmake/FindCUDA/run_nvcc.cmake +++ /dev/null @@ -1,288 +0,0 @@ -# James Bigler, NVIDIA Corp (nvidia.com - jbigler) -# -# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. -# -# This code is licensed under the MIT License. See the FindCUDA.cmake script -# for the text of the license. - -# The MIT License -# -# License for the specific language governing rights and limitations under -# 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 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, -# 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. - - -########################################################################## -# This file runs the nvcc commands to produce the desired output file along with -# the dependency file needed by CMake to compute dependencies. In addition the -# file checks the output of each command and if the command fails it deletes the -# output files. - -# Input variables -# -# verbose:BOOL=<> OFF: Be as quiet as possible (default) -# ON : Describe each step -# -# build_configuration:STRING=<> Typically one of Debug, MinSizeRel, Release, or -# RelWithDebInfo, but it should match one of the -# entries in CUDA_HOST_FLAGS. This is the build -# configuration used when compiling the code. If -# blank or unspecified Debug is assumed as this is -# what CMake does. -# -# generated_file:STRING=<> File to generate. This argument must be passed in. -# -# generated_cubin_file:STRING=<> File to generate. This argument must be passed -# in if build_cubin is true. - -if(NOT generated_file) - message(FATAL_ERROR "You must specify generated_file on the command line") -endif() - -# Set these up as variables to make reading the generated file easier -set(CMAKE_COMMAND "@CMAKE_COMMAND@") # path -set(source_file "@source_file@") # path -set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") # path -set(cmake_dependency_file "@cmake_dependency_file@") # path -set(CUDA_make2cmake "@CUDA_make2cmake@") # path -set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path -set(build_cubin @build_cubin@) # bool -set(CUDA_HOST_COMPILER "@CUDA_HOST_COMPILER@") # bool -# We won't actually use these variables for now, but we need to set this, in -# order to force this file to be run again if it changes. -set(generated_file_path "@generated_file_path@") # path -set(generated_file_internal "@generated_file@") # path -set(generated_cubin_file_internal "@generated_cubin_file@") # path - -set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path -set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list -@CUDA_NVCC_FLAGS_CONFIG@ -set(nvcc_flags @nvcc_flags@) # list -set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@") # list (needs to be in quotes to handle spaces properly). -set(format_flag "@format_flag@") # string - -if(build_cubin AND NOT generated_cubin_file) - message(FATAL_ERROR "You must specify generated_cubin_file on the command line") -endif() - -# This is the list of host compilation flags. It C or CXX should already have -# been chosen by FindCUDA.cmake. -@CUDA_HOST_FLAGS@ - -# Take the compiler flags and package them up to be sent to the compiler via -Xcompiler -set(nvcc_host_compiler_flags "") -# If we weren't given a build_configuration, use Debug. -if(NOT build_configuration) - set(build_configuration Debug) -endif() -string(TOUPPER "${build_configuration}" build_configuration) -#message("CUDA_NVCC_HOST_COMPILER_FLAGS = ${CUDA_NVCC_HOST_COMPILER_FLAGS}") -foreach(flag ${CMAKE_HOST_FLAGS} ${CMAKE_HOST_FLAGS_${build_configuration}}) - # Extra quotes are added around each flag to help nvcc parse out flags with spaces. - set(nvcc_host_compiler_flags "${nvcc_host_compiler_flags},\"${flag}\"") -endforeach() -if (nvcc_host_compiler_flags) - set(nvcc_host_compiler_flags "-Xcompiler" ${nvcc_host_compiler_flags}) -endif() -#message("nvcc_host_compiler_flags = \"${nvcc_host_compiler_flags}\"") -# Add the build specific configuration flags -list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}}) - -# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority -list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 ) -list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 ) -if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 ) - if (CUDA_HOST_COMPILER STREQUAL "$(VCInstallDir)bin" AND DEFINED CCBIN) - set(CCBIN -ccbin "${CCBIN}") - else() - set(CCBIN -ccbin "${CUDA_HOST_COMPILER}") - endif() -endif() - -# cuda_execute_process - Executes a command with optional command echo and status message. -# -# status - Status message to print if verbose is true -# command - COMMAND argument from the usual execute_process argument structure -# ARGN - Remaining arguments are the command with arguments -# -# CUDA_result - return value from running the command -# -# Make this a macro instead of a function, so that things like RESULT_VARIABLE -# and other return variables are present after executing the process. -macro(cuda_execute_process status command) - set(_command ${command}) - if(NOT _command STREQUAL "COMMAND") - message(FATAL_ERROR "Malformed call to cuda_execute_process. Missing COMMAND as second argument. (command = ${command})") - endif() - if(verbose) - execute_process(COMMAND "${CMAKE_COMMAND}" -E echo -- ${status}) - # Now we need to build up our command string. We are accounting for quotes - # and spaces, anything else is left up to the user to fix if they want to - # copy and paste a runnable command line. - set(cuda_execute_process_string) - foreach(arg ${ARGN}) - # If there are quotes, excape them, so they come through. - string(REPLACE "\"" "\\\"" arg ${arg}) - # Args with spaces need quotes around them to get them to be parsed as a single argument. - if(arg MATCHES " ") - list(APPEND cuda_execute_process_string "\"${arg}\"") - else() - list(APPEND cuda_execute_process_string ${arg}) - endif() - endforeach() - # Echo the command - execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${cuda_execute_process_string}) - endif() - # Run the command - execute_process(COMMAND ${ARGN} RESULT_VARIABLE CUDA_result ) -endmacro() - -# Delete the target file -cuda_execute_process( - "Removing ${generated_file}" - COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}" - ) - -# For CUDA 2.3 and below, -G -M doesn't work, so remove the -G flag -# for dependency generation and hope for the best. -set(depends_CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}") -set(CUDA_VERSION @CUDA_VERSION@) -if(CUDA_VERSION VERSION_LESS "3.0") - cmake_policy(PUSH) - # CMake policy 0007 NEW states that empty list elements are not - # ignored. I'm just setting it to avoid the warning that's printed. - cmake_policy(SET CMP0007 NEW) - # Note that this will remove all occurances of -G. - list(REMOVE_ITEM depends_CUDA_NVCC_FLAGS "-G") - cmake_policy(POP) -endif() - -# nvcc doesn't define __CUDACC__ for some reason when generating dependency files. This -# can cause incorrect dependencies when #including files based on this macro which is -# defined in the generating passes of nvcc invokation. We will go ahead and manually -# define this for now until a future version fixes this bug. -set(CUDACC_DEFINE -D__CUDACC__) - -# Generate the dependency file -cuda_execute_process( - "Generating dependency file: ${NVCC_generated_dependency_file}" - COMMAND "${CUDA_NVCC_EXECUTABLE}" - -M - ${CUDACC_DEFINE} - "${source_file}" - -o "${NVCC_generated_dependency_file}" - ${CCBIN} - ${nvcc_flags} - ${nvcc_host_compiler_flags} - ${depends_CUDA_NVCC_FLAGS} - -DNVCC - ${CUDA_NVCC_INCLUDE_ARGS} - ) - -if(CUDA_result) - message(FATAL_ERROR "Error generating ${generated_file}") -endif() - -# Generate the cmake readable dependency file to a temp file. Don't put the -# quotes just around the filenames for the input_file and output_file variables. -# CMake will pass the quotes through and not be able to find the file. -cuda_execute_process( - "Generating temporary cmake readable file: ${cmake_dependency_file}.tmp" - COMMAND "${CMAKE_COMMAND}" - -D "input_file:FILEPATH=${NVCC_generated_dependency_file}" - -D "output_file:FILEPATH=${cmake_dependency_file}.tmp" - -P "${CUDA_make2cmake}" - ) - -if(CUDA_result) - message(FATAL_ERROR "Error generating ${generated_file}") -endif() - -# Copy the file if it is different -cuda_execute_process( - "Copy if different ${cmake_dependency_file}.tmp to ${cmake_dependency_file}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${cmake_dependency_file}.tmp" "${cmake_dependency_file}" - ) - -if(CUDA_result) - message(FATAL_ERROR "Error generating ${generated_file}") -endif() - -# Delete the temporary file -cuda_execute_process( - "Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}" - COMMAND "${CMAKE_COMMAND}" -E remove "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}" - ) - -if(CUDA_result) - message(FATAL_ERROR "Error generating ${generated_file}") -endif() - -# Generate the code -cuda_execute_process( - "Generating ${generated_file}" - COMMAND "${CUDA_NVCC_EXECUTABLE}" - "${source_file}" - ${format_flag} -o "${generated_file}" - ${CCBIN} - ${nvcc_flags} - ${nvcc_host_compiler_flags} - ${CUDA_NVCC_FLAGS} - -DNVCC - ${CUDA_NVCC_INCLUDE_ARGS} - ) - -if(CUDA_result) - # Since nvcc can sometimes leave half done files make sure that we delete the output file. - cuda_execute_process( - "Removing ${generated_file}" - COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}" - ) - message(FATAL_ERROR "Error generating file ${generated_file}") -else() - if(verbose) - message("Generated ${generated_file} successfully.") - endif() -endif() - -# Cubin resource report commands. -if( build_cubin ) - # Run with -cubin to produce resource usage report. - cuda_execute_process( - "Generating ${generated_cubin_file}" - COMMAND "${CUDA_NVCC_EXECUTABLE}" - "${source_file}" - ${CUDA_NVCC_FLAGS} - ${nvcc_flags} - ${CCBIN} - ${nvcc_host_compiler_flags} - -DNVCC - -cubin - -o "${generated_cubin_file}" - ${CUDA_NVCC_INCLUDE_ARGS} - ) - - # Execute the parser script. - cuda_execute_process( - "Executing the parser script" - COMMAND "${CMAKE_COMMAND}" - -D "input_file:STRING=${generated_cubin_file}" - -P "${CUDA_parse_cubin}" - ) - -endif() diff --git a/cmake/OpenCVCRTLinkage.cmake b/cmake/OpenCVCRTLinkage.cmake deleted file mode 100644 index 5265e3e..0000000 --- a/cmake/OpenCVCRTLinkage.cmake +++ /dev/null @@ -1,107 +0,0 @@ -if(NOT MSVC) - message(FATAL_ERROR "CRT options are available only for MSVC") -endif() - -#INCLUDE (CheckIncludeFiles) - -set(HAVE_WINRT FALSE) - -# search Windows Platform SDK -message(STATUS "Checking for Windows Platform SDK") -GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE) -if(WINDOWS_SDK_PATH STREQUAL "") - set(HAVE_MSPDK FALSE) - message(STATUS "Windows Platform SDK 8.0 was not found") -else() - set(HAVE_MSPDK TRUE) -endif() - -#search for Visual Studio 11.0 install directory -message(STATUS "Checking for Visual Studio 2012") -GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE) -if(VISUAL_STUDIO_PATH STREQUAL "") - set(HAVE_MSVC2012 FALSE) - message(STATUS "Visual Studio 2012 was not found") -else() - set(HAVE_MSVC2012 TRUE) -endif() - -try_compile(HAVE_WINRT_SDK - "${OpenCV_BINARY_DIR}" - "${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp") - -if(ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK) - set(HAVE_WINRT TRUE) - set(HAVE_WINRT_CX TRUE) -elseif(ENABLE_WINRT_MODE_NATIVE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK) - set(HAVE_WINRT TRUE) - set(HAVE_WINRT_CX FALSE) -endif() - -if(HAVE_WINRT) - add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /appcontainer") -endif() - -if(NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT) - foreach(flag_var - CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${flag_var} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - endif() - if(${flag_var} MATCHES "/MDd") - string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") - endif() - endforeach(flag_var) - - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib") -else() - foreach(flag_var - CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${flag_var} MATCHES "/MT") - string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}") - endif() - if(${flag_var} MATCHES "/MTd") - string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}") - endif() - endforeach(flag_var) -endif() - -if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8 AND NOT ${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} LESS 8.6) - include(ProcessorCount) - ProcessorCount(N) - if(NOT N EQUAL 0) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP${N} ") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP${N} ") - endif() -endif() - -if(NOT BUILD_WITH_DEBUG_INFO AND NOT MSVC) - string(REPLACE "/debug" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/DEBUG" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") - - string(REPLACE "/debug" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/DEBUG" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}") - - string(REPLACE "/debug" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}") - string(REPLACE "/DEBUG" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}") - string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}") - - string(REPLACE "/Zi" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") - string(REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") -endif() diff --git a/cmake/OpenCVCompilerOptions.cmake b/cmake/OpenCVCompilerOptions.cmake deleted file mode 100644 index d525609..0000000 --- a/cmake/OpenCVCompilerOptions.cmake +++ /dev/null @@ -1,309 +0,0 @@ -if(MINGW OR (X86 AND UNIX AND NOT APPLE)) - # mingw compiler is known to produce unstable SSE code with -O3 hence we are trying to use -O2 instead - if(CMAKE_COMPILER_IS_GNUCXX) - foreach(flags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) - string(REPLACE "-O3" "-O2" ${flags} "${${flags}}") - endforeach() - endif() - - if(CMAKE_COMPILER_IS_GNUCC) - foreach(flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_DEBUG) - string(REPLACE "-O3" "-O2" ${flags} "${${flags}}") - endforeach() - endif() -endif() - -if(MSVC) - string(REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT}") - if(CMAKE_CXX_FLAGS STREQUAL CMAKE_CXX_FLAGS_INIT) - # override cmake default exception handling option - string(REPLACE "/EHsc" "/EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Flags used by the compiler during all build types." FORCE) - endif() -endif() - -set(OPENCV_EXTRA_FLAGS "") -set(OPENCV_EXTRA_C_FLAGS "") -set(OPENCV_EXTRA_CXX_FLAGS "") -set(OPENCV_EXTRA_FLAGS_RELEASE "") -set(OPENCV_EXTRA_FLAGS_DEBUG "") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS "") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "") - -macro(add_extra_compiler_option option) - if(CMAKE_BUILD_TYPE) - set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE}) - endif() - ocv_check_flag_support(CXX "${option}" _varname "${OPENCV_EXTRA_CXX_FLAGS} ${ARGN}") - if(${_varname}) - set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} ${option}") - endif() - - ocv_check_flag_support(C "${option}" _varname "${OPENCV_EXTRA_C_FLAGS} ${ARGN}") - if(${_varname}) - set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} ${option}") - endif() -endmacro() - -# OpenCV fails some tests when 'char' is 'unsigned' by default -add_extra_compiler_option(-fsigned-char) - -if(MINGW) - # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838 - # here we are trying to workaround the problem - add_extra_compiler_option(-mstackrealign) - if(NOT HAVE_CXX_MSTACKREALIGN) - add_extra_compiler_option(-mpreferred-stack-boundary=2) - endif() -endif() - -if(OPENCV_CAN_BREAK_BINARY_COMPATIBILITY) - add_definitions(-DOPENCV_CAN_BREAK_BINARY_COMPATIBILITY) -endif() - -if(CMAKE_COMPILER_IS_GNUCXX) - # High level of warnings. - add_extra_compiler_option(-W) - add_extra_compiler_option(-Wall) - add_extra_compiler_option(-Werror=return-type) - if(OPENCV_CAN_BREAK_BINARY_COMPATIBILITY) - add_extra_compiler_option(-Werror=non-virtual-dtor) - endif() - add_extra_compiler_option(-Werror=address) - add_extra_compiler_option(-Werror=sequence-point) - add_extra_compiler_option(-Wformat) - add_extra_compiler_option(-Werror=format-security -Wformat) - add_extra_compiler_option(-Wmissing-declarations) - add_extra_compiler_option(-Wmissing-prototypes) - add_extra_compiler_option(-Wstrict-prototypes) - add_extra_compiler_option(-Wundef) - add_extra_compiler_option(-Winit-self) - add_extra_compiler_option(-Wpointer-arith) - add_extra_compiler_option(-Wshadow) - add_extra_compiler_option(-Wsign-promo) - - if(ENABLE_NOISY_WARNINGS) - add_extra_compiler_option(-Wcast-align) - add_extra_compiler_option(-Wstrict-aliasing=2) - else() - add_extra_compiler_option(-Wno-narrowing) - add_extra_compiler_option(-Wno-delete-non-virtual-dtor) - add_extra_compiler_option(-Wno-unnamed-type-template-args) - endif() - add_extra_compiler_option(-fdiagnostics-show-option) - - # The -Wno-long-long is required in 64bit systems when including sytem headers. - if(X86_64) - add_extra_compiler_option(-Wno-long-long) - endif() - - # We need pthread's - if(UNIX AND NOT ANDROID AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX)) - add_extra_compiler_option(-pthread) - endif() - - if(OPENCV_WARNINGS_ARE_ERRORS) - add_extra_compiler_option(-Werror) - endif() - - if(X86 AND NOT MINGW64 AND NOT X86_64 AND NOT APPLE) - add_extra_compiler_option(-march=i686) - endif() - - # Other optimizations - if(ENABLE_OMIT_FRAME_POINTER) - add_extra_compiler_option(-fomit-frame-pointer) - else() - add_extra_compiler_option(-fno-omit-frame-pointer) - endif() - if(ENABLE_FAST_MATH) - add_extra_compiler_option(-ffast-math) - endif() - if(ENABLE_POWERPC) - add_extra_compiler_option("-mcpu=G3 -mtune=G5") - endif() - if(ENABLE_SSE) - add_extra_compiler_option(-msse) - endif() - if(ENABLE_SSE2) - add_extra_compiler_option(-msse2) - endif() - if (ENABLE_NEON) - add_extra_compiler_option("-mfpu=neon") - endif() - if (ENABLE_VFPV3 AND NOT ENABLE_NEON) - add_extra_compiler_option("-mfpu=vfpv3") - endif() - - # SSE3 and further should be disabled under MingW because it generates compiler errors - if(NOT MINGW) - if(ENABLE_AVX) - add_extra_compiler_option(-mavx) - endif() - - # GCC depresses SSEx instructions when -mavx is used. Instead, it generates new AVX instructions or AVX equivalence for all SSEx instructions when needed. - if(NOT OPENCV_EXTRA_CXX_FLAGS MATCHES "-mavx") - if(ENABLE_SSE3) - add_extra_compiler_option(-msse3) - endif() - - if(ENABLE_SSSE3) - add_extra_compiler_option(-mssse3) - endif() - - if(ENABLE_SSE41) - add_extra_compiler_option(-msse4.1) - endif() - - if(ENABLE_SSE42) - add_extra_compiler_option(-msse4.2) - endif() - endif() - endif(NOT MINGW) - - if(X86 OR X86_64) - if(NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4) - if(OPENCV_EXTRA_CXX_FLAGS MATCHES "-m(sse2|avx)") - add_extra_compiler_option(-mfpmath=sse)# !! important - be on the same wave with x64 compilers - else() - add_extra_compiler_option(-mfpmath=387) - endif() - endif() - endif() - - # Profiling? - if(ENABLE_PROFILING) - add_extra_compiler_option("-pg -g") - # turn off incompatible options - foreach(flags CMAKE_CXX_FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG - OPENCV_EXTRA_FLAGS_RELEASE OPENCV_EXTRA_FLAGS_DEBUG OPENCV_EXTRA_C_FLAGS OPENCV_EXTRA_CXX_FLAGS) - string(REPLACE "-fomit-frame-pointer" "" ${flags} "${${flags}}") - string(REPLACE "-ffunction-sections" "" ${flags} "${${flags}}") - endforeach() - elseif(NOT APPLE AND NOT ANDROID) - # Remove unreferenced functions: function level linking - add_extra_compiler_option(-ffunction-sections) - endif() - - if(ENABLE_COVERAGE) - set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} --coverage") - set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} --coverage") - endif() - - set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} -DNDEBUG") - set(OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG") -endif() - -if(MSVC) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS") - # 64-bit portability warnings, in MSVC80 - if(MSVC80) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Wp64") - endif() - - if(BUILD_WITH_DEBUG_INFO) - set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug") - endif() - - # Remove unreferenced functions: function level linking - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Gy") - if(NOT MSVC_VERSION LESS 1400) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /bigobj") - endif() - if(BUILD_WITH_DEBUG_INFO) - set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} /Zi") - endif() - - if(ENABLE_AVX AND NOT MSVC_VERSION LESS 1600) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:AVX") - endif() - - if(ENABLE_SSE4_1 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:") - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE4.1") - endif() - - if(ENABLE_SSE3 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:") - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE3") - endif() - - if(NOT MSVC64) - # 64-bit MSVC compiler uses SSE/SSE2 by default - if(ENABLE_SSE2 AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:") - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE2") - endif() - if(ENABLE_SSE AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:") - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE") - endif() - endif() - - if(ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1 OR ENABLE_AVX) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Oi") - endif() - - if(X86 OR X86_64) - if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND ENABLE_SSE2) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /fp:fast") # !! important - be on the same wave with x64 compilers - endif() - endif() - - if(OPENCV_WARNINGS_ARE_ERRORS) - set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /WX") - endif() -endif() - -# Extra link libs if the user selects building static libs: -if(NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID) - # Android does not need these settings because they are already set by toolchain file - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} stdc++) - set(OPENCV_EXTRA_FLAGS "-fPIC ${OPENCV_EXTRA_FLAGS}") -endif() - -# Add user supplied extra options (optimization, etc...) -# ========================================================== -set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS}" CACHE INTERNAL "Extra compiler options") -set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS}" CACHE INTERNAL "Extra compiler options for C sources") -set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS}" CACHE INTERNAL "Extra compiler options for C++ sources") -set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE}" CACHE INTERNAL "Extra compiler options for Release build") -set(OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG}" CACHE INTERNAL "Extra compiler options for Debug build") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS "${OPENCV_EXTRA_EXE_LINKER_FLAGS}" CACHE INTERNAL "Extra linker flags") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" CACHE INTERNAL "Extra linker flags for Release build") -set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" CACHE INTERNAL "Extra linker flags for Debug build") - -#combine all "extra" options -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_C_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}") - -if(MSVC) - # avoid warnings from MSVC about overriding the /W* option - # we replace /W3 with /W4 only for C++ files, - # since all the 3rd-party libraries OpenCV uses are in C, - # and we do not care about their warnings. - string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") - string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") - - if(NOT ENABLE_NOISY_WARNINGS AND MSVC_VERSION EQUAL 1400) - ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4510 /wd4610 /wd4312 /wd4201 /wd4244 /wd4328 /wd4267) - endif() - - # allow extern "C" functions throw exceptions - foreach(flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) - string(REPLACE "/EHsc-" "/EHs" ${flags} "${${flags}}") - string(REPLACE "/EHsc" "/EHs" ${flags} "${${flags}}") - - string(REPLACE "/Zm1000" "" ${flags} "${${flags}}") - endforeach() - - if(NOT ENABLE_NOISY_WARNINGS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251") #class 'std::XXX' needs to have dll-interface to be used by clients of YYY - endif() -endif() diff --git a/cmake/OpenCVConfig.cmake b/cmake/OpenCVConfig.cmake deleted file mode 100644 index 2d80f76..0000000 --- a/cmake/OpenCVConfig.cmake +++ /dev/null @@ -1,168 +0,0 @@ -# =================================================================================== -# The OpenCV CMake configuration file -# -# ** File generated automatically, do not modify ** -# -# Usage from an external project: -# In your CMakeLists.txt, add these lines: -# -# FIND_PACKAGE(OpenCV REQUIRED) -# TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${OpenCV_LIBS}) -# -# Or you can search for specific OpenCV modules: -# -# FIND_PACKAGE(OpenCV REQUIRED core highgui) -# -# If the module is found then OPENCV__FOUND is set to TRUE. -# -# This file will define the following variables: -# - OpenCV_LIBS : The list of libraries to links against. -# - OpenCV_LIB_DIR : The directory(es) where lib files are. Calling LINK_DIRECTORIES -# with this path is NOT needed. -# - OpenCV_INCLUDE_DIRS : The OpenCV include directories. -# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability -# - OpenCV_ANDROID_NATIVE_API_LEVEL : Minimum required level of Android API -# - OpenCV_VERSION : The version of this OpenCV build. Example: "2.4.0" -# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION. Example: "2" -# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION. Example: "4" -# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION. Example: "0" -# -# Advanced variables: -# - OpenCV_SHARED -# - OpenCV_CONFIG_PATH -# - OpenCV_LIB_COMPONENTS -# -# =================================================================================== -# -# Windows pack specific options: -# - OpenCV_STATIC -# - OpenCV_CUDA - -if(CMAKE_VERSION VERSION_GREATER 2.6) - get_property(OpenCV_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) - if(NOT ";${OpenCV_LANGUAGES};" MATCHES ";CXX;") - enable_language(CXX) - endif() -endif() - -if(NOT DEFINED OpenCV_STATIC) - # look for global setting - if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) - set(OpenCV_STATIC OFF) - else() - set(OpenCV_STATIC ON) - endif() -endif() - -if(NOT DEFINED OpenCV_CUDA) - # if user' app uses CUDA, then it probably wants CUDA-enabled OpenCV binaries - if(CUDA_FOUND) - set(OpenCV_CUDA ON) - endif() -endif() - -if(MSVC) - if(CMAKE_CL_64) - set(OpenCV_ARCH x64) - set(OpenCV_TBB_ARCH intel64) - else() - set(OpenCV_ARCH x86) - set(OpenCV_TBB_ARCH ia32) - endif() - if(MSVC_VERSION EQUAL 1400) - set(OpenCV_RUNTIME vc8) - elseif(MSVC_VERSION EQUAL 1500) - set(OpenCV_RUNTIME vc9) - elseif(MSVC_VERSION EQUAL 1600) - set(OpenCV_RUNTIME vc10) - elseif(MSVC_VERSION EQUAL 1700) - set(OpenCV_RUNTIME vc11) - elseif(MSVC_VERSION EQUAL 1800) - set(OpenCV_RUNTIME vc12) - endif() -elseif(MINGW) - set(OpenCV_RUNTIME mingw) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine - OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64") - set(MINGW64 1) - set(OpenCV_ARCH x64) - else() - set(OpenCV_ARCH x86) - endif() -endif() - -if(CMAKE_VERSION VERSION_GREATER 2.6.2) - unset(OpenCV_CONFIG_PATH CACHE) -endif() - -if(NOT OpenCV_FIND_QUIETLY) - message(STATUS "OpenCV ARCH: ${OpenCV_ARCH}") - message(STATUS "OpenCV RUNTIME: ${OpenCV_RUNTIME}") - message(STATUS "OpenCV STATIC: ${OpenCV_STATIC}") -endif() - -get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE) -if(OpenCV_RUNTIME AND OpenCV_ARCH) - if(OpenCV_STATIC AND EXISTS "${OpenCV_CONFIG_PATH}/${OpenCV_ARCH}/${OpenCV_RUNTIME}/staticlib/OpenCVConfig.cmake") - if(OpenCV_CUDA AND EXISTS "${OpenCV_CONFIG_PATH}/gpu/${OpenCV_ARCH}/${OpenCV_RUNTIME}/staticlib/OpenCVConfig.cmake") - set(OpenCV_LIB_PATH "${OpenCV_CONFIG_PATH}/gpu/${OpenCV_ARCH}/${OpenCV_RUNTIME}/staticlib") - else() - set(OpenCV_LIB_PATH "${OpenCV_CONFIG_PATH}/${OpenCV_ARCH}/${OpenCV_RUNTIME}/staticlib") - endif() - elseif(EXISTS "${OpenCV_CONFIG_PATH}/${OpenCV_ARCH}/${OpenCV_RUNTIME}/lib/OpenCVConfig.cmake") - if(OpenCV_CUDA AND EXISTS "${OpenCV_CONFIG_PATH}/gpu/${OpenCV_ARCH}/${OpenCV_RUNTIME}/lib/OpenCVConfig.cmake") - set(OpenCV_LIB_PATH "${OpenCV_CONFIG_PATH}/gpu/${OpenCV_ARCH}/${OpenCV_RUNTIME}/lib") - else() - set(OpenCV_LIB_PATH "${OpenCV_CONFIG_PATH}/${OpenCV_ARCH}/${OpenCV_RUNTIME}/lib") - endif() - endif() -endif() - -if(OpenCV_LIB_PATH AND EXISTS "${OpenCV_LIB_PATH}/OpenCVConfig.cmake") - set(OpenCV_LIB_DIR_OPT "${OpenCV_LIB_PATH}" CACHE PATH "Path where release OpenCV libraries are located" FORCE) - set(OpenCV_LIB_DIR_DBG "${OpenCV_LIB_PATH}" CACHE PATH "Path where debug OpenCV libraries are located" FORCE) - set(OpenCV_3RDPARTY_LIB_DIR_OPT "${OpenCV_LIB_PATH}" CACHE PATH "Path where release 3rdpaty OpenCV dependencies are located" FORCE) - set(OpenCV_3RDPARTY_LIB_DIR_DBG "${OpenCV_LIB_PATH}" CACHE PATH "Path where debug 3rdpaty OpenCV dependencies are located" FORCE) - - include("${OpenCV_LIB_PATH}/OpenCVConfig.cmake") - - if(OpenCV_CUDA) - set(_OpenCV_LIBS "") - foreach(_lib ${OpenCV_LIBS}) - string(REPLACE "${OpenCV_CONFIG_PATH}/gpu/${OpenCV_ARCH}/${OpenCV_RUNTIME}" "${OpenCV_CONFIG_PATH}/${OpenCV_ARCH}/${OpenCV_RUNTIME}" _lib2 "${_lib}") - if(NOT EXISTS "${_lib}" AND EXISTS "${_lib2}") - list(APPEND _OpenCV_LIBS "${_lib2}") - else() - list(APPEND _OpenCV_LIBS "${_lib}") - endif() - endforeach() - set(OpenCV_LIBS ${_OpenCV_LIBS}) - endif() - set(OpenCV_FOUND TRUE CACHE BOOL "" FORCE) - set(OPENCV_FOUND TRUE CACHE BOOL "" FORCE) - - if(NOT OpenCV_FIND_QUIETLY) - message(STATUS "Found OpenCV ${OpenCV_VERSION} in ${OpenCV_LIB_PATH}") - if(NOT OpenCV_LIB_PATH MATCHES "/staticlib") - get_filename_component(_OpenCV_LIB_PATH "${OpenCV_LIB_PATH}/../bin" ABSOLUTE) - file(TO_NATIVE_PATH "${_OpenCV_LIB_PATH}" _OpenCV_LIB_PATH) - message(STATUS "You might need to add ${_OpenCV_LIB_PATH} to your PATH to be able to run your applications.") - if(OpenCV_LIB_PATH MATCHES "/gpu/") - string(REPLACE "\\gpu" "" _OpenCV_LIB_PATH2 "${_OpenCV_LIB_PATH}") - message(STATUS "GPU support is enabled so you might also need ${_OpenCV_LIB_PATH2} in your PATH (it must go after the ${_OpenCV_LIB_PATH}).") - endif() - endif() - endif() -else() - if(NOT OpenCV_FIND_QUIETLY) - message(WARNING -"Found OpenCV Windows Pack but it has not binaries compatible with your configuration. -You should manually point CMake variable OpenCV_DIR to your build of OpenCV library." - ) - endif() - set(OpenCV_FOUND FALSE CACHE BOOL "" FORCE) - set(OPENCV_FOUND FALSE CACHE BOOL "" FORCE) -endif() diff --git a/cmake/OpenCVDetectAndroidSDK.cmake b/cmake/OpenCVDetectAndroidSDK.cmake deleted file mode 100644 index 2737589..0000000 --- a/cmake/OpenCVDetectAndroidSDK.cmake +++ /dev/null @@ -1,413 +0,0 @@ -if(EXISTS "${ANDROID_EXECUTABLE}") - set(ANDROID_SDK_DETECT_QUIET TRUE) -endif() - -file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH) -file(TO_CMAKE_PATH "$ENV{HOME}" HOME_ENV_PATH) - -if(CMAKE_HOST_WIN32) - set(ANDROID_SDK_OS windows) -elseif(CMAKE_HOST_APPLE) - set(ANDROID_SDK_OS macosx) -else() - set(ANDROID_SDK_OS linux) -endif() - -#find android SDK: search in ANDROID_SDK first -find_host_program(ANDROID_EXECUTABLE - NAMES android.bat android - PATH_SUFFIXES tools - PATHS - ENV ANDROID_SDK - DOC "Android SDK location" - NO_DEFAULT_PATH - ) - -# Now search default paths -find_host_program(ANDROID_EXECUTABLE - NAMES android.bat android - PATH_SUFFIXES android-sdk-${ANDROID_SDK_OS}/tools - android-sdk-${ANDROID_SDK_OS}_x86/tools - android-sdk-${ANDROID_SDK_OS}_86/tools - android-sdk/tools - PATHS /opt - "${HOME_ENV_PATH}/NVPACK" - "$ENV{SystemDrive}/NVPACK" - "${ProgramFiles_ENV_PATH}/Android" - DOC "Android SDK location" - ) - -if(ANDROID_EXECUTABLE) - if(NOT ANDROID_SDK_DETECT_QUIET) - message(STATUS "Found android tool: ${ANDROID_EXECUTABLE}") - endif() - - get_filename_component(ANDROID_SDK_TOOLS_PATH "${ANDROID_EXECUTABLE}" PATH) - - #read source.properties - if(EXISTS "${ANDROID_SDK_TOOLS_PATH}/source.properties") - file(STRINGS "${ANDROID_SDK_TOOLS_PATH}/source.properties" ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES REGEX "^[ ]*[^#].*$") - foreach(line ${ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES}) - string(REPLACE "\\:" ":" line ${line}) - string(REPLACE "=" ";" line ${line}) - list(GET line 0 line_name) - list(GET line 1 line_value) - string(REPLACE "." "_" line_name ${line_name}) - SET(ANDROID_TOOLS_${line_name} "${line_value}" CACHE INTERNAL "from ${ANDROID_SDK_TOOLS_PATH}/source.properties") - MARK_AS_ADVANCED(ANDROID_TOOLS_${line_name}) - endforeach() - endif() - - #fix missing revision (SDK tools before r9 don't set revision number correctly) - if(NOT ANDROID_TOOLS_Pkg_Revision) - SET(ANDROID_TOOLS_Pkg_Revision "Unknown" CACHE INTERNAL "") - MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Revision) - endif() - - #fix missing description - if(NOT ANDROID_TOOLS_Pkg_Desc) - SET(ANDROID_TOOLS_Pkg_Desc "Android SDK Tools, revision ${ANDROID_TOOLS_Pkg_Revision}." CACHE INTERNAL "") - MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Desc) - endif() - - #warn about outdated SDK - if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13) - SET(ANDROID_TOOLS_Pkg_Desc "${ANDROID_TOOLS_Pkg_Desc} It is recommended to update your SDK tools to revision 14 or newer." CACHE INTERNAL "") - endif() - - if(ANDROID_TOOLS_Pkg_Revision GREATER 13) - SET(ANDROID_PROJECT_PROPERTIES_FILE project.properties) - SET(ANDROID_ANT_PROPERTIES_FILE ant.properties) - else() - SET(ANDROID_PROJECT_PROPERTIES_FILE default.properties) - SET(ANDROID_ANT_PROPERTIES_FILE build.properties) - endif() - - set(ANDROID_MANIFEST_FILE AndroidManifest.xml) - set(ANDROID_LIB_PROJECT_FILES build.xml local.properties proguard-project.txt ${ANDROID_PROJECT_PROPERTIES_FILE}) - set(ANDROID_PROJECT_FILES ${ANDROID_LIB_PROJECT_FILES}) - - #get installed targets - if(ANDROID_TOOLS_Pkg_Revision GREATER 11) - execute_process(COMMAND ${ANDROID_EXECUTABLE} list target -c - RESULT_VARIABLE ANDROID_PROCESS - OUTPUT_VARIABLE ANDROID_SDK_TARGETS - ERROR_VARIABLE ANDROID_PROCESS_ERRORS - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - string(REGEX MATCHALL "[^\n]+" ANDROID_SDK_TARGETS "${ANDROID_SDK_TARGETS}") - else() - #old SDKs (r11 and older) don't provide compact list - execute_process(COMMAND ${ANDROID_EXECUTABLE} list target - RESULT_VARIABLE ANDROID_PROCESS - OUTPUT_VARIABLE ANDROID_SDK_TARGETS_FULL - ERROR_VARIABLE ANDROID_PROCESS_ERRORS - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - string(REGEX MATCHALL "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" ANDROID_SDK_TARGETS_FULL "${ANDROID_SDK_TARGETS_FULL}") - - SET(ANDROID_SDK_TARGETS "") - if(ANDROID_PROCESS EQUAL 0) - foreach(line ${ANDROID_SDK_TARGETS_FULL}) - string(REGEX REPLACE "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" "\\2" line "${line}") - list(APPEND ANDROID_SDK_TARGETS "${line}") - endforeach() - endif() - endif() - - if(NOT ANDROID_PROCESS EQUAL 0) - message(ERROR "Failed to get list of installed Android targets.") - set(ANDROID_EXECUTABLE "ANDROID_EXECUTABLE-NOTFOUND") - endif() - - # clear ANDROID_SDK_TARGET if no target is provided by user - if(NOT ANDROID_SDK_TARGET) - set(ANDROID_SDK_TARGET "" CACHE STRING "Android SDK target for the OpenCV Java API and samples") - endif() - if(ANDROID_SDK_TARGETS AND CMAKE_VERSION VERSION_GREATER "2.8") - set_property( CACHE ANDROID_SDK_TARGET PROPERTY STRINGS ${ANDROID_SDK_TARGETS} ) - endif() -endif(ANDROID_EXECUTABLE) - -# finds minimal installed SDK target compatible with provided names or API levels -# usage: -# get_compatible_android_api_level(VARIABLE [level1] [level2] ...) -macro(android_get_compatible_target VAR) - set(${VAR} "${VAR}-NOTFOUND") - if(ANDROID_SDK_TARGETS) - list(GET ANDROID_SDK_TARGETS 0 __lvl) - string(REGEX MATCH "[0-9]+$" __lvl "${__lvl}") - - #find minimal level mathing to all provided levels - foreach(lvl ${ARGN}) - string(REGEX MATCH "[0-9]+$" __level "${lvl}") - if(__level GREATER __lvl) - set(__lvl ${__level}) - endif() - endforeach() - - #search for compatible levels - foreach(lvl ${ANDROID_SDK_TARGETS}) - string(REGEX MATCH "[0-9]+$" __level "${lvl}") - if(__level EQUAL __lvl) - #look for exact match - foreach(usrlvl ${ARGN}) - if("${usrlvl}" STREQUAL "${lvl}") - set(${VAR} "${lvl}") - break() - endif() - endforeach() - if("${${VAR}}" STREQUAL "${lvl}") - break() #exact match was found - elseif(NOT ${VAR}) - set(${VAR} "${lvl}") - endif() - elseif(__level GREATER __lvl) - if(NOT ${VAR}) - set(${VAR} "${lvl}") - endif() - break() - endif() - endforeach() - - unset(__lvl) - unset(__level) - endif() -endmacro() - -unset(__android_project_chain CACHE) - -# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11) -macro(add_android_project target path) - # parse arguments - set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST EMBED_CUDA FORCE_EMBED_OPENCV) - set(__varname "android_proj_") - foreach(v ${android_proj_arglist}) - set(${__varname}${v} "") - endforeach() - foreach(arg ${ARGN}) - set(__var "${__varname}") - foreach(v ${android_proj_arglist}) - if("${v}" STREQUAL "${arg}") - set(__varname "android_proj_${v}") - break() - endif() - endforeach() - if(__var STREQUAL __varname) - list(APPEND ${__var} "${arg}") - endif() - endforeach() - - # get compatible SDK target - android_get_compatible_target(android_proj_sdk_target ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET}) - - if(NOT android_proj_sdk_target) - message(WARNING "Can not find any SDK target compatible with: ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET} - The project ${target} will not be build") - endif() - - # check native dependencies - if(android_proj_IGNORE_JAVA) - ocv_check_dependencies(${android_proj_NATIVE_DEPS}) - else() - ocv_check_dependencies(${android_proj_NATIVE_DEPS} opencv_java) - endif() - - if(EXISTS "${path}/jni/Android.mk" ) - # find if native_app_glue is used - file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" ) - if(NATIVE_APP_GLUE) - if(ANDROID_NATIVE_API_LEVEL LESS 9 OR NOT EXISTS "${ANDROID_NDK}/sources/android/native_app_glue") - set(OCV_DEPENDENCIES_FOUND FALSE) - endif() - endif() - endif() - - if(OCV_DEPENDENCIES_FOUND AND android_proj_sdk_target AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND ANDROID_TOOLS_Pkg_Revision GREATER 13 AND EXISTS "${path}/${ANDROID_MANIFEST_FILE}") - - project(${target}) - set(android_proj_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/.build") - - # get project sources - file(GLOB_RECURSE android_proj_files RELATIVE "${path}" "${path}/res/*" "${path}/src/*") - - if(NOT android_proj_IGNORE_MANIFEST) - list(APPEND android_proj_files ${ANDROID_MANIFEST_FILE}) - endif() - - # copy sources out from the build tree - set(android_proj_file_deps "") - foreach(f ${android_proj_files}) - add_custom_command( - OUTPUT "${android_proj_bin_dir}/${f}" - COMMAND ${CMAKE_COMMAND} -E copy "${path}/${f}" "${android_proj_bin_dir}/${f}" - MAIN_DEPENDENCY "${path}/${f}" - COMMENT "Copying ${f}") - list(APPEND android_proj_file_deps "${path}/${f}" "${android_proj_bin_dir}/${f}") - endforeach() - - set(android_proj_lib_deps_commands "") - set(android_proj_target_files ${ANDROID_PROJECT_FILES}) - ocv_list_add_prefix(android_proj_target_files "${android_proj_bin_dir}/") - - # process Android library dependencies - foreach(dep ${android_proj_LIBRARY_DEPS}) - file(RELATIVE_PATH __dep "${android_proj_bin_dir}" "${dep}") - list(APPEND android_proj_lib_deps_commands - COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --library "${__dep}") - endforeach() - - # fix Android project - add_custom_command( - OUTPUT ${android_proj_target_files} - COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files} - COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --target "${android_proj_sdk_target}" --name "${target}" - ${android_proj_lib_deps_commands} - MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" - DEPENDS "${path}/${ANDROID_MANIFEST_FILE}" - COMMENT "Updating Android project at ${path}. SDK target: ${android_proj_sdk_target}" - ) - - list(APPEND android_proj_file_deps ${android_proj_target_files}) - - # build native part - file(GLOB_RECURSE android_proj_jni_files "${path}/jni/*.c" "${path}/jni/*.h" "${path}/jni/*.cpp" "${path}/jni/*.hpp") - ocv_list_filterout(android_proj_jni_files "\\\\.svn") - - if(android_proj_jni_files AND EXISTS ${path}/jni/Android.mk AND NOT DEFINED JNI_LIB_NAME) - # find local module name in Android.mk file to build native lib - file(STRINGS "${path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) - string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") - - if(JNI_LIB_NAME) - ocv_include_modules_recurse(${android_proj_NATIVE_DEPS}) - ocv_include_directories("${path}/jni") - - if (NATIVE_APP_GLUE) - include_directories(${ANDROID_NDK}/sources/android/native_app_glue) - list(APPEND android_proj_jni_files ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) - ocv_warnings_disable(CMAKE_C_FLAGS -Wstrict-prototypes -Wunused-parameter -Wmissing-prototypes) - set(android_proj_NATIVE_DEPS ${android_proj_NATIVE_DEPS} android) - endif() - - add_library(${JNI_LIB_NAME} MODULE ${android_proj_jni_files}) - target_link_libraries(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_proj_NATIVE_DEPS}) - - set_target_properties(${JNI_LIB_NAME} PROPERTIES - OUTPUT_NAME "${JNI_LIB_NAME}" - LIBRARY_OUTPUT_DIRECTORY "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}" - ) - - get_target_property(android_proj_jni_location "${JNI_LIB_NAME}" LOCATION) - if (NOT (CMAKE_BUILD_TYPE MATCHES "debug")) - add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}") - endif() - endif() - - # copy opencv_java, tbb if it is shared and dynamicuda if present if FORCE_EMBED_OPENCV flag is set - if(android_proj_FORCE_EMBED_OPENCV) - set(native_deps ${android_proj_NATIVE_DEPS}) - # filter out gpu module as it is always static library on Android - list(REMOVE_ITEM native_deps "opencv_gpu") - if(ENABLE_DYNAMIC_CUDA) - list(APPEND native_deps "opencv_dynamicuda") - endif() - foreach(lib ${native_deps}) - get_property(f TARGET ${lib} PROPERTY LOCATION) - get_filename_component(f_name ${f} NAME) - add_custom_command( - OUTPUT "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}" - COMMAND ${CMAKE_COMMAND} -E copy "${f}" "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}" - DEPENDS "${lib}" VERBATIM - COMMENT "Embedding ${f}") - list(APPEND android_proj_file_deps "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}") - endforeach() - endif() - - # copy all needed CUDA libs to project if EMBED_CUDA flag is present - if(android_proj_EMBED_CUDA) - set(android_proj_culibs ${CUDA_npp_LIBRARY_ABS} ${CUDA_LIBRARIES_ABS}) - if(HAVE_CUFFT) - list(INSERT android_proj_culibs 0 ${CUDA_cufft_LIBRARY_ABS}) - endif() - if(HAVE_CUBLAS) - list(INSERT android_proj_culibs 0 ${CUDA_cublas_LIBRARY_ABS}) - endif() - foreach(lib ${android_proj_culibs}) - get_filename_component(f "${lib}" NAME) - add_custom_command( - OUTPUT "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}" - COMMAND ${CMAKE_COMMAND} -E copy "${lib}" "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}" - DEPENDS "${lib}" VERBATIM - COMMENT "Embedding ${f}") - list(APPEND android_proj_file_deps "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}") - endforeach() - endif() - endif() - - # build java part - if(android_proj_IGNORE_JAVA) - add_custom_command( - OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk" - COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug - COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk - WORKING_DIRECTORY "${android_proj_bin_dir}" - MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" - DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME}) - else() - add_custom_command( - OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk" - COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug - COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk - WORKING_DIRECTORY "${android_proj_bin_dir}" - MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" - DEPENDS "${OpenCV_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java # as we are part of OpenCV we can just force this dependency - DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME}) - endif() - - unset(JNI_LIB_NAME) - - add_custom_target(${target} ALL SOURCES "${android_proj_bin_dir}/bin/${target}-debug.apk" ) - if(NOT android_proj_IGNORE_JAVA) - add_dependencies(${target} opencv_java) - endif() - if(android_proj_native_deps) - add_dependencies(${target} ${android_proj_native_deps}) - endif() - - if(__android_project_chain) - add_dependencies(${target} ${__android_project_chain}) - endif() - set(__android_project_chain ${target} CACHE INTERNAL "auxiliary variable used for Android progects chaining") - - # put the final .apk to the OpenCV's bin folder - add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${android_proj_bin_dir}/bin/${target}-debug.apk" "${OpenCV_BINARY_DIR}/bin/${target}.apk") - if(INSTALL_ANDROID_EXAMPLES AND "${target}" MATCHES "^example-") - #apk - install(FILES "${OpenCV_BINARY_DIR}/bin/${target}.apk" DESTINATION "samples" COMPONENT samples) - get_filename_component(sample_dir "${path}" NAME) - #java part - list(REMOVE_ITEM android_proj_files ${ANDROID_MANIFEST_FILE}) - foreach(f ${android_proj_files} ${ANDROID_MANIFEST_FILE}) - get_filename_component(install_subdir "${f}" PATH) - install(FILES "${android_proj_bin_dir}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT samples) - endforeach() - #jni part + eclipse files - file(GLOB_RECURSE jni_files RELATIVE "${path}" "${path}/jni/*" "${path}/.cproject") - ocv_list_filterout(jni_files "\\\\.svn") - foreach(f ${jni_files} ".classpath" ".project" ".settings/org.eclipse.jdt.core.prefs") - get_filename_component(install_subdir "${f}" PATH) - install(FILES "${path}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT samples) - endforeach() - #update proj - if(android_proj_lib_deps_commands) - set(inst_lib_opt " --library ../../sdk/java") - endif() - install(CODE "EXECUTE_PROCESS(COMMAND ${ANDROID_EXECUTABLE} --silent update project --path . --target \"${android_proj_sdk_target}\" --name \"${target}\" ${inst_lib_opt} - WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}\" - )" COMPONENT samples) - #empty 'gen' - install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}/gen\")" COMPONENT samples) - endif() - endif() -endmacro() diff --git a/cmake/OpenCVDetectApacheAnt.cmake b/cmake/OpenCVDetectApacheAnt.cmake deleted file mode 100644 index 7b7e9a6..0000000 --- a/cmake/OpenCVDetectApacheAnt.cmake +++ /dev/null @@ -1,31 +0,0 @@ -file(TO_CMAKE_PATH "$ENV{ANT_DIR}" ANT_DIR_ENV_PATH) -file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH) - -if(CMAKE_HOST_WIN32) - set(ANT_NAME ant.bat) -else() - set(ANT_NAME ant) -endif() - -find_host_program(ANT_EXECUTABLE NAMES ${ANT_NAME} - PATHS "${ANT_DIR_ENV_PATH}/bin" "${ProgramFiles_ENV_PATH}/apache-ant/bin" - NO_DEFAULT_PATH - ) - -find_host_program(ANT_EXECUTABLE NAMES ${ANT_NAME}) - -if(ANT_EXECUTABLE) - execute_process(COMMAND ${ANT_EXECUTABLE} -version - RESULT_VARIABLE ANT_ERROR_LEVEL - OUTPUT_VARIABLE ANT_VERSION_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - if (ANT_ERROR_LEVEL) - unset(ANT_EXECUTABLE) - unset(ANT_EXECUTABLE CACHE) - else() - string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" ANT_VERSION "${ANT_VERSION_FULL}") - set(ANT_VERSION "${ANT_VERSION}" CACHE INTERNAL "Detected ant vesion") - - message(STATUS "Found apache ant ${ANT_VERSION}: ${ANT_EXECUTABLE}") - endif() -endif() diff --git a/cmake/OpenCVDetectCStripes.cmake b/cmake/OpenCVDetectCStripes.cmake deleted file mode 100644 index 279a339..0000000 --- a/cmake/OpenCVDetectCStripes.cmake +++ /dev/null @@ -1,11 +0,0 @@ -if(WIN32) - find_path( CSTRIPES_LIB_DIR - NAMES "С=.lib" - DOC "The path to C= lib and dll") - if(CSTRIPES_LIB_DIR) - ocv_include_directories("${CSTRIPES_LIB_DIR}/..") - link_directories("${CSTRIPES_LIB_DIR}") - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} "C=") - set(HAVE_CSTRIPES 1) - endif() -endif() diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake deleted file mode 100644 index 24fbb03..0000000 --- a/cmake/OpenCVDetectCUDA.cmake +++ /dev/null @@ -1,260 +0,0 @@ -if(${CMAKE_VERSION} VERSION_LESS "2.8.3") - message(STATUS "WITH_CUDA flag requires CMake 2.8.3 or newer. CUDA support is disabled.") - return() -endif() - -if(WIN32 AND NOT MSVC) - message(STATUS "CUDA compilation is disabled (due to only Visual Studio compiler supported on your platform).") - return() -endif() - -if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - message(STATUS "CUDA compilation is disabled (due to Clang unsupported on your platform).") - return() -endif() - -set(CMAKE_MODULE_PATH "${OpenCV_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) - -foreach(var INCLUDE LIBRARY PROGRAM) - set(__old_frpm_${var} "${CMAKE_FIND_ROOT_PATH_MODE_${var}}") -endforeach() - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) - -find_package(CUDA 4.2 QUIET) - -foreach(var INCLUDE LIBRARY PROGRAM) - set(CMAKE_FIND_ROOT_PATH_MODE_${var} "${__old_frpm_${var}}") -endforeach() - -list(REMOVE_AT CMAKE_MODULE_PATH 0) - -if(CUDA_FOUND) - set(HAVE_CUDA 1) - - if(WITH_CUFFT) - set(HAVE_CUFFT 1) - endif() - - if(WITH_CUBLAS) - set(HAVE_CUBLAS 1) - endif() - - if(WITH_NVCUVID) - find_cuda_helper_libs(nvcuvid) - set(HAVE_NVCUVID 1) - endif() - - message(STATUS "CUDA detected: " ${CUDA_VERSION}) - - set(_generations "Fermi" "Kepler") - if(NOT CMAKE_CROSSCOMPILING) - list(APPEND _generations "Auto") - endif() - set(CUDA_GENERATION "" CACHE STRING "Build CUDA device code only for specific GPU architecture. Leave empty to build for all architectures.") - if( CMAKE_VERSION VERSION_GREATER "2.8" ) - set_property( CACHE CUDA_GENERATION PROPERTY STRINGS "" ${_generations} ) - endif() - - if(CUDA_GENERATION) - if(NOT ";${_generations};" MATCHES ";${CUDA_GENERATION};") - string(REPLACE ";" ", " _generations "${_generations}") - message(FATAL_ERROR "ERROR: ${_generations} Generations are suppered.") - endif() - unset(CUDA_ARCH_BIN CACHE) - unset(CUDA_ARCH_PTX CACHE) - endif() - - set(__cuda_arch_ptx "") - if(CUDA_GENERATION STREQUAL "Fermi") - set(__cuda_arch_bin "2.0 2.1(2.0)") - elseif(CUDA_GENERATION STREQUAL "Kepler") - if(${CUDA_VERSION} VERSION_LESS "5.0") - set(__cuda_arch_bin "3.0") - else() - set(__cuda_arch_bin "3.0 3.5") - endif() - elseif(CUDA_GENERATION STREQUAL "Auto") - execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/" - RESULT_VARIABLE _nvcc_res OUTPUT_VARIABLE _nvcc_out - ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT _nvcc_res EQUAL 0) - message(STATUS "Automatic detection of CUDA generation failed. Going to build for all known architectures.") - else() - set(__cuda_arch_bin "${_nvcc_out}") - string(REPLACE "2.1" "2.1(2.0)" __cuda_arch_bin "${__cuda_arch_bin}") - endif() - endif() - - if(NOT DEFINED __cuda_arch_bin) - if(ANDROID) - set(__cuda_arch_bin "3.2") - set(__cuda_arch_ptx "") - else() - if(${CUDA_VERSION} VERSION_LESS "5.0") - set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0") - else() - set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5") - endif() - set(__cuda_arch_ptx "3.0") - endif() - endif() - - set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported") - set(CUDA_ARCH_PTX ${__cuda_arch_ptx} CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for") - - string(REGEX REPLACE "\\." "" ARCH_BIN_NO_POINTS "${CUDA_ARCH_BIN}") - string(REGEX REPLACE "\\." "" ARCH_PTX_NO_POINTS "${CUDA_ARCH_PTX}") - - # Ckeck if user specified 1.0 compute capability: we don't support it - string(REGEX MATCH "1.0" HAS_ARCH_10 "${CUDA_ARCH_BIN} ${CUDA_ARCH_PTX}") - set(CUDA_ARCH_BIN_OR_PTX_10 0) - if(NOT ${HAS_ARCH_10} STREQUAL "") - set(CUDA_ARCH_BIN_OR_PTX_10 1) - endif() - - # NVCC flags to be set - set(NVCC_FLAGS_EXTRA "") - - # These vars will be passed into the templates - set(OPENCV_CUDA_ARCH_BIN "") - set(OPENCV_CUDA_ARCH_PTX "") - set(OPENCV_CUDA_ARCH_FEATURES "") - - # Tell NVCC to add binaries for the specified GPUs - string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_BIN_NO_POINTS}") - foreach(ARCH IN LISTS ARCH_LIST) - if(ARCH MATCHES "([0-9]+)\\(([0-9]+)\\)") - # User explicitly specified PTX for the concrete BIN - set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1}) - set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${CMAKE_MATCH_1}") - set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${CMAKE_MATCH_2}") - else() - # User didn't explicitly specify PTX for the concrete BIN, we assume PTX=BIN - set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=sm_${ARCH}) - set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${ARCH}") - set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${ARCH}") - endif() - endforeach() - - # Tell NVCC to add PTX intermediate code for the specified architectures - string(REGEX MATCHALL "[0-9]+" ARCH_LIST "${ARCH_PTX_NO_POINTS}") - foreach(ARCH IN LISTS ARCH_LIST) - set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=compute_${ARCH}) - set(OPENCV_CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX} ${ARCH}") - set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${ARCH}") - endforeach() - - # These vars will be processed in other scripts - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA}) - set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}") - - if(ANDROID) - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xptxas;-dlcm=ca") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-target-os-variant=Android") - endif() - - message(STATUS "CUDA NVCC target flags: ${CUDA_NVCC_FLAGS}") - - OCV_OPTION(CUDA_FAST_MATH "Enable --use_fast_math for CUDA compiler " OFF) - - if(CUDA_FAST_MATH) - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --use_fast_math) - endif() - - mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD CUDA_SDK_ROOT_DIR) - - macro(ocv_cuda_compile VAR) - foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) - set(${var}_backup_in_cuda_compile_ "${${var}}") - - # we remove /EHa as it generates warnings under windows - string(REPLACE "/EHa" "" ${var} "${${var}}") - - # we remove -ggdb3 flag as it leads to preprocessor errors when compiling CUDA files (CUDA 4.1) - string(REPLACE "-ggdb3" "" ${var} "${${var}}") - - # we remove -Wsign-promo as it generates warnings under linux - string(REPLACE "-Wsign-promo" "" ${var} "${${var}}") - - # we remove -Wno-sign-promo as it generates warnings under linux - string(REPLACE "-Wno-sign-promo" "" ${var} "${${var}}") - - # we remove -Wno-delete-non-virtual-dtor because it's used for C++ compiler - # but NVCC uses C compiler by default - string(REPLACE "-Wno-delete-non-virtual-dtor" "" ${var} "${${var}}") - - # we remove -frtti because it's used for C++ compiler - # but NVCC uses C compiler by default - string(REPLACE "-frtti" "" ${var} "${${var}}") - endforeach() - - if(BUILD_SHARED_LIBS) - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -Xcompiler -DCVAPI_EXPORTS) - endif() - - if(UNIX OR APPLE) - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -Xcompiler -fPIC) - endif() - if(APPLE) - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -Xcompiler -fno-finite-math-only) - endif() - - # disabled because of multiple warnings during building nvcc auto generated files - if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_GCC_REGEX_VERSION VERSION_GREATER "4.6.0") - ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-but-set-variable) - endif() - - CUDA_COMPILE(${VAR} ${ARGN}) - - foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) - set(${var} "${${var}_backup_in_cuda_compile_}") - unset(${var}_backup_in_cuda_compile_) - endforeach() - endmacro() -else() - unset(CUDA_ARCH_BIN CACHE) - unset(CUDA_ARCH_PTX CACHE) -endif() - -if(HAVE_CUDA) - set(CUDA_LIBS_PATH "") - foreach(p ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) - get_filename_component(_tmp ${p} PATH) - list(APPEND CUDA_LIBS_PATH ${_tmp}) - endforeach() - - if(HAVE_CUBLAS) - foreach(p ${CUDA_cublas_LIBRARY}) - get_filename_component(_tmp ${p} PATH) - list(APPEND CUDA_LIBS_PATH ${_tmp}) - endforeach() - endif() - - if(HAVE_CUFFT) - foreach(p ${CUDA_cufft_LIBRARY}) - get_filename_component(_tmp ${p} PATH) - list(APPEND CUDA_LIBS_PATH ${_tmp}) - endforeach() - endif() - - list(REMOVE_DUPLICATES CUDA_LIBS_PATH) - link_directories(${CUDA_LIBS_PATH}) - - set(CUDA_LIBRARIES_ABS ${CUDA_LIBRARIES}) - ocv_convert_to_lib_name(CUDA_LIBRARIES ${CUDA_LIBRARIES}) - set(CUDA_npp_LIBRARY_ABS ${CUDA_npp_LIBRARY}) - ocv_convert_to_lib_name(CUDA_npp_LIBRARY ${CUDA_npp_LIBRARY}) - if(HAVE_CUBLAS) - set(CUDA_cublas_LIBRARY_ABS ${CUDA_cublas_LIBRARY}) - ocv_convert_to_lib_name(CUDA_cublas_LIBRARY ${CUDA_cublas_LIBRARY}) - endif() - - if(HAVE_CUFFT) - set(CUDA_cufft_LIBRARY_ABS ${CUDA_cufft_LIBRARY}) - ocv_convert_to_lib_name(CUDA_cufft_LIBRARY ${CUDA_cufft_LIBRARY}) - endif() -endif() \ No newline at end of file diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake deleted file mode 100644 index 819c2e0..0000000 --- a/cmake/OpenCVDetectCXXCompiler.cmake +++ /dev/null @@ -1,154 +0,0 @@ -# ---------------------------------------------------------------------------- -# Detect Microsoft compiler: -# ---------------------------------------------------------------------------- -if(CMAKE_CL_64) - set(MSVC64 1) -endif() - -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_COMPILER_IS_GNUCXX 1) - set(CMAKE_COMPILER_IS_CLANGCXX 1) -endif() -if(CMAKE_C_COMPILER_ID STREQUAL "Clang") - set(CMAKE_COMPILER_IS_GNUCC 1) - set(CMAKE_COMPILER_IS_CLANGCC 1) -endif() - -if((CMAKE_COMPILER_IS_CLANGCXX OR CMAKE_COMPILER_IS_CLANGCC) AND NOT CMAKE_GENERATOR MATCHES "Xcode") - set(ENABLE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE) -endif() - -# ---------------------------------------------------------------------------- -# Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ): -# see include/opencv/cxtypes.h file for related ICC & CV_ICC defines. -# NOTE: The system needs to determine if the '-fPIC' option needs to be added -# for the 3rdparty static libs being compiled. The CMakeLists.txt files -# in 3rdparty use the CV_ICC definition being set here to determine if -# the -fPIC flag should be used. -# ---------------------------------------------------------------------------- -if(UNIX) - if (__ICL) - set(CV_ICC __ICL) - elseif(__ICC) - set(CV_ICC __ICC) - elseif(__ECL) - set(CV_ICC __ECL) - elseif(__ECC) - set(CV_ICC __ECC) - elseif(__INTEL_COMPILER) - set(CV_ICC __INTEL_COMPILER) - elseif(CMAKE_C_COMPILER MATCHES "icc") - set(CV_ICC icc_matches_c_compiler) - endif() -endif() - -if(MSVC AND CMAKE_C_COMPILER MATCHES "icc") - set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS) -endif() - -# ---------------------------------------------------------------------------- -# Detect GNU version: -# ---------------------------------------------------------------------------- -if(CMAKE_COMPILER_IS_CLANGCXX) - set(CMAKE_GCC_REGEX_VERSION "4.2.1") - set(CMAKE_OPENCV_GCC_VERSION_MAJOR 4) - set(CMAKE_OPENCV_GCC_VERSION_MINOR 2) - set(CMAKE_OPENCV_GCC_VERSION 42) - set(CMAKE_OPENCV_GCC_VERSION_NUM 402) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v - ERROR_VARIABLE CMAKE_OPENCV_CLANG_VERSION_FULL - ERROR_STRIP_TRAILING_WHITESPACE) - - string(REGEX MATCH "version.*$" CMAKE_OPENCV_CLANG_VERSION_FULL "${CMAKE_OPENCV_CLANG_VERSION_FULL}") - string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_CLANG_REGEX_VERSION "${CMAKE_OPENCV_CLANG_VERSION_FULL}") - -elseif(CMAKE_COMPILER_IS_GNUCXX) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion - OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v - ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)" - # Look for the version number - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - if(NOT CMAKE_GCC_REGEX_VERSION) - string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - endif() - - # Split the three parts: - string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}") - - list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR) - list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR) - - set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR}) - math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}") - message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})") - - if(WIN32) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine - OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64") - set(MINGW64 1) - endif() - endif() -endif() - -if(MSVC64 OR MINGW64) - set(X86_64 1) -elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING)) - set(X86 1) -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") - set(X86_64 1) -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*") - set(X86 1) -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*|ARM.*") - set(ARM 1) -endif() - - -# Similar code is existed in OpenCVConfig.cmake -if(NOT DEFINED OpenCV_STATIC) - # look for global setting - if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) - set(OpenCV_STATIC OFF) - else() - set(OpenCV_STATIC ON) - endif() -endif() - -if(MSVC) - if(CMAKE_CL_64) - set(OpenCV_ARCH x64) - else() - set(OpenCV_ARCH x86) - endif() - if(MSVC_VERSION EQUAL 1400) - set(OpenCV_RUNTIME vc8) - elseif(MSVC_VERSION EQUAL 1500) - set(OpenCV_RUNTIME vc9) - elseif(MSVC_VERSION EQUAL 1600) - set(OpenCV_RUNTIME vc10) - elseif(MSVC_VERSION EQUAL 1700) - set(OpenCV_RUNTIME vc11) - elseif(MSVC_VERSION EQUAL 1800) - set(OpenCV_RUNTIME vc12) - endif() -elseif(MINGW) - set(OpenCV_RUNTIME mingw) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine - OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64") - set(MINGW64 1) - set(OpenCV_ARCH x64) - else() - set(OpenCV_ARCH x86) - endif() -endif() diff --git a/cmake/OpenCVDetectOpenCL.cmake b/cmake/OpenCVDetectOpenCL.cmake deleted file mode 100644 index f732546..0000000 --- a/cmake/OpenCVDetectOpenCL.cmake +++ /dev/null @@ -1,76 +0,0 @@ -if(APPLE) - set(OPENCL_FOUND YES) - set(OPENCL_LIBRARY "-framework OpenCL" CACHE STRING "OpenCL library") - set(OPENCL_INCLUDE_DIR "" CACHE STRING "OpenCL include directory") - mark_as_advanced(OPENCL_INCLUDE_DIR OPENCL_LIBRARY) - set(HAVE_OPENCL_STATIC ON) -else(APPLE) - set(OPENCL_FOUND YES) - set(HAVE_OPENCL_STATIC OFF) - set(OPENCL_INCLUDE_DIR "${OpenCV_SOURCE_DIR}/3rdparty/include/opencl/1.2") -endif(APPLE) - -if(OPENCL_FOUND) - if(NOT HAVE_OPENCL_STATIC) - try_compile(__VALID_OPENCL - "${OpenCV_BINARY_DIR}" - "${OpenCV_SOURCE_DIR}/cmake/checks/opencl.cpp" - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${OPENCL_INCLUDE_DIR}" - OUTPUT_VARIABLE TRY_OUT - ) - if(NOT TRY_OUT MATCHES "OpenCL is valid") - message(WARNING "Can't use OpenCL") - return() - endif() - endif() - - set(HAVE_OPENCL 1) - - if(HAVE_OPENCL_STATIC) - set(OPENCL_LIBRARIES "${OPENCL_LIBRARY}") - else() - unset(OPENCL_LIBRARIES) - endif() - - set(OPENCL_INCLUDE_DIRS ${OPENCL_INCLUDE_DIR}) - - if(WITH_OPENCLAMDFFT) - find_path(CLAMDFFT_ROOT_DIR - NAMES include/clAmdFft.h - PATHS ENV CLAMDFFT_PATH ENV ProgramFiles - PATH_SUFFIXES clAmdFft AMD/clAmdFft - DOC "AMD FFT root directory" - NO_DEFAULT_PATH) - - find_path(CLAMDFFT_INCLUDE_DIR - NAMES clAmdFft.h - HINTS ${CLAMDFFT_ROOT_DIR} - PATH_SUFFIXES include - DOC "clAmdFft include directory") - - if(CLAMDFFT_INCLUDE_DIR) - set(HAVE_CLAMDFFT 1) - list(APPEND OPENCL_INCLUDE_DIRS "${CLAMDFFT_INCLUDE_DIR}") - endif() - endif() - - if(WITH_OPENCLAMDBLAS) - find_path(CLAMDBLAS_ROOT_DIR - NAMES include/clAmdBlas.h - PATHS ENV CLAMDBLAS_PATH ENV ProgramFiles - PATH_SUFFIXES clAmdBlas AMD/clAmdBlas - DOC "AMD FFT root directory" - NO_DEFAULT_PATH) - - find_path(CLAMDBLAS_INCLUDE_DIR - NAMES clAmdBlas.h - HINTS ${CLAMDBLAS_ROOT_DIR} - PATH_SUFFIXES include - DOC "clAmdFft include directory") - - if(CLAMDBLAS_INCLUDE_DIR) - set(HAVE_CLAMDBLAS 1) - list(APPEND OPENCL_INCLUDE_DIRS "${CLAMDBLAS_INCLUDE_DIR}") - endif() - endif() -endif() diff --git a/cmake/OpenCVDetectPython.cmake b/cmake/OpenCVDetectPython.cmake deleted file mode 100644 index d02b759..0000000 --- a/cmake/OpenCVDetectPython.cmake +++ /dev/null @@ -1,134 +0,0 @@ -if(WIN32 AND NOT PYTHON_EXECUTABLE) - # search for executable with the same bitness as resulting binaries - # standard FindPythonInterp always prefers executable from system path - # this is really important because we are using the interpreter for numpy search and for choosing the install location - foreach(_CURRENT_VERSION ${Python_ADDITIONAL_VERSIONS} 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0) - find_host_program(PYTHON_EXECUTABLE - NAMES python${_CURRENT_VERSION} python - PATHS - [HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Python\\\\PythonCore\\\\${_CURRENT_VERSION}\\\\InstallPath] - [HKEY_CURRENT_USER\\\\SOFTWARE\\\\Python\\\\PythonCore\\\\${_CURRENT_VERSION}\\\\InstallPath] - NO_SYSTEM_ENVIRONMENT_PATH - ) - endforeach() -endif() -find_host_package(PythonInterp 2.0) - -unset(PYTHON_USE_NUMPY CACHE) -unset(HAVE_SPHINX CACHE) -if(PYTHON_EXECUTABLE) - if(PYTHON_VERSION_STRING) - set(PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}") - set(PYTHON_VERSION_FULL "${PYTHON_VERSION_STRING}") - else() - execute_process(COMMAND ${PYTHON_EXECUTABLE} --version - ERROR_VARIABLE PYTHON_VERSION_FULL - ERROR_STRIP_TRAILING_WHITESPACE) - - string(REGEX MATCH "[0-9]+.[0-9]+" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}") - endif() - - if("${PYTHON_VERSION_FULL}" MATCHES "[0-9]+.[0-9]+.[0-9]+") - set(PYTHON_VERSION_FULL "${CMAKE_MATCH_0}") - elseif("${PYTHON_VERSION_FULL}" MATCHES "[0-9]+.[0-9]+") - set(PYTHON_VERSION_FULL "${CMAKE_MATCH_0}") - else() - unset(PYTHON_VERSION_FULL) - endif() - - if(NOT ANDROID AND NOT IOS) - ocv_check_environment_variables(PYTHON_LIBRARY PYTHON_INCLUDE_DIR) - if(CMAKE_VERSION VERSION_GREATER 2.8.8 AND PYTHON_VERSION_FULL) - find_host_package(PythonLibs ${PYTHON_VERSION_FULL} EXACT) - else() - find_host_package(PythonLibs ${PYTHON_VERSION_FULL}) - endif() - # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND - if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH) - set(PYTHONLIBS_FOUND ON) - endif() - endif() - - if(NOT ANDROID AND NOT IOS) - if(CMAKE_HOST_UNIX) - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_python_lib()" - RESULT_VARIABLE PYTHON_CVPY_PROCESS - OUTPUT_VARIABLE PYTHON_STD_PACKAGES_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE) - if("${PYTHON_STD_PACKAGES_PATH}" MATCHES "site-packages") - set(_PYTHON_PACKAGES_PATH "python${PYTHON_VERSION_MAJOR_MINOR}/site-packages") - else() #debian based assumed, install to the dist-packages. - set(_PYTHON_PACKAGES_PATH "python${PYTHON_VERSION_MAJOR_MINOR}/dist-packages") - endif() - if(EXISTS "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${PYTHON_PACKAGES_PATH}") - set(_PYTHON_PACKAGES_PATH "lib${LIB_SUFFIX}/${_PYTHON_PACKAGES_PATH}") - else() - set(_PYTHON_PACKAGES_PATH "lib/${_PYTHON_PACKAGES_PATH}") - endif() - elseif(CMAKE_HOST_WIN32) - get_filename_component(PYTHON_PATH "${PYTHON_EXECUTABLE}" PATH) - file(TO_CMAKE_PATH "${PYTHON_PATH}" PYTHON_PATH) - if(NOT EXISTS "${PYTHON_PATH}/Lib/site-packages") - unset(PYTHON_PATH) - get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE) - if(NOT PYTHON_PATH) - get_filename_component(PYTHON_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE) - endif() - file(TO_CMAKE_PATH "${PYTHON_PATH}" PYTHON_PATH) - endif() - set(_PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages") - endif() - SET(PYTHON_PACKAGES_PATH "${_PYTHON_PACKAGES_PATH}" CACHE PATH "Where to install the python packages.") - - if(NOT PYTHON_NUMPY_INCLUDE_DIR) - if(CMAKE_CROSSCOMPILING) - message(STATUS "Cannot probe for Python/Numpy support (because we are cross-compiling OpenCV)") - message(STATUS "If you want to enable Python/Numpy support, set the following variables:") - message(STATUS " PYTHON_INCLUDE_PATH") - message(STATUS " PYTHON_LIBRARIES") - message(STATUS " PYTHON_NUMPY_INCLUDE_DIR") - else() - # Attempt to discover the NumPy include directory. If this succeeds, then build python API with NumPy - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.environ['DISTUTILS_USE_SDK']='1'; import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]" - RESULT_VARIABLE PYTHON_NUMPY_PROCESS - OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(NOT PYTHON_NUMPY_PROCESS EQUAL 0) - unset(PYTHON_NUMPY_INCLUDE_DIR) - endif() - endif() - endif() - - if(PYTHON_NUMPY_INCLUDE_DIR) - file(TO_CMAKE_PATH "${PYTHON_NUMPY_INCLUDE_DIR}" _PYTHON_NUMPY_INCLUDE_DIR) - set(PYTHON_NUMPY_INCLUDE_DIR ${_PYTHON_NUMPY_INCLUDE_DIR} CACHE PATH "Path to numpy headers") - set(PYTHON_USE_NUMPY TRUE) - if(CMAKE_CROSSCOMPILING) - if(NOT PYTHON_NUMPY_VERSION) - set(PYTHON_NUMPY_VERSION "undefined - cannot be probed because of the cross-compilation") - endif() - else() - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.version.version" - RESULT_VARIABLE PYTHON_NUMPY_PROCESS - OUTPUT_VARIABLE PYTHON_NUMPY_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() - endif() - endif(NOT ANDROID AND NOT IOS) - - if(BUILD_DOCS) - find_host_program(SPHINX_BUILD sphinx-build) - if(SPHINX_BUILD) - execute_process(COMMAND "${SPHINX_BUILD}" - OUTPUT_QUIET - ERROR_VARIABLE SPHINX_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(SPHINX_OUTPUT MATCHES "Sphinx v([0-9][^ \n]*)") - set(SPHINX_VERSION "${CMAKE_MATCH_1}") - set(HAVE_SPHINX 1) - message(STATUS "Found Sphinx ${SPHINX_VERSION}: ${SPHINX_BUILD}") - endif() - endif() - endif(BUILD_DOCS) -endif(PYTHON_EXECUTABLE) diff --git a/cmake/OpenCVDetectTBB.cmake b/cmake/OpenCVDetectTBB.cmake deleted file mode 100644 index fe8e100..0000000 --- a/cmake/OpenCVDetectTBB.cmake +++ /dev/null @@ -1,90 +0,0 @@ -if(BUILD_TBB) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/tbb") - include_directories(SYSTEM ${TBB_INCLUDE_DIRS}) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb) - add_definitions(-DTBB_USE_GCC_BUILTINS=1 -D__TBB_GCC_BUILTIN_ATOMICS_PRESENT=1) - if(tbb_need_GENERIC_DWORD_LOAD_STORE) - add_definitions(-D__TBB_USE_GENERIC_DWORD_LOAD_STORE=1) - endif() - set(HAVE_TBB 1) -elseif(UNIX AND NOT APPLE) - PKG_CHECK_MODULES(TBB tbb) - - if(TBB_FOUND) - set(HAVE_TBB 1) - if(NOT ${TBB_INCLUDE_DIRS} STREQUAL "") - ocv_include_directories(${TBB_INCLUDE_DIRS}) - endif() - link_directories(${TBB_LIBRARY_DIRS}) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${TBB_LIBRARIES}) - endif() -endif() - -if(NOT HAVE_TBB) - set(TBB_DEFAULT_INCLUDE_DIRS - "/opt/intel/tbb/include" "/usr/local/include" "/usr/include" - "C:/Program Files/Intel/TBB" "C:/Program Files (x86)/Intel/TBB" - "C:/Program Files (x86)/tbb/include" - "C:/Program Files (x86)/tbb/include" - "${CMAKE_INSTALL_PREFIX}/include") - - find_path(TBB_INCLUDE_DIRS "tbb/tbb.h" PATHS ${TBB_INCLUDE_DIR} ${TBB_DEFAULT_INCLUDE_DIRS} DOC "The path to TBB headers") - if(TBB_INCLUDE_DIRS) - if(UNIX) - set(TBB_LIB_DIR "${TBB_INCLUDE_DIRS}/../lib" CACHE PATH "Full path of TBB library directory") - link_directories("${TBB_LIB_DIR}") - endif() - if(APPLE) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libtbb.dylib) - elseif(ANDROID) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb) - add_definitions(-DTBB_USE_GCC_BUILTINS) - elseif (UNIX) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb) - elseif (WIN32) - if(CMAKE_COMPILER_IS_GNUCXX) - set(TBB_LIB_DIR "${TBB_INCLUDE_DIRS}/../lib" CACHE PATH "Full path of TBB library directory") - link_directories("${TBB_LIB_DIR}") - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb) - else() - get_filename_component(_TBB_LIB_PATH "${TBB_INCLUDE_DIRS}/../lib" ABSOLUTE) - - if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64*|x86_64* OR MSVC64) - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/intel64") - else() - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/ia32") - endif() - - if(MSVC80) - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc8") - elseif(MSVC90) - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc9") - elseif(MSVC10) - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc10") - elseif(MSVC11) - set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc11") - endif() - set(TBB_LIB_DIR "${_TBB_LIB_PATH}" CACHE PATH "Full path of TBB library directory") - link_directories("${TBB_LIB_DIR}") - endif() - endif() - - set(HAVE_TBB 1) - if(NOT "${TBB_INCLUDE_DIRS}" STREQUAL "") - ocv_include_directories("${TBB_INCLUDE_DIRS}") - endif() - endif(TBB_INCLUDE_DIRS) -endif(NOT HAVE_TBB) - -# get TBB version -if(HAVE_TBB) - find_file(TBB_STDDEF_PATH tbb/tbb_stddef.h "${TBB_INCLUDE_DIRS}") - mark_as_advanced(TBB _STDDEF_PATH) -endif() -if(HAVE_TBB AND TBB_STDDEF_PATH) - ocv_parse_header("${TBB_STDDEF_PATH}" TBB_VERSION_LINES TBB_VERSION_MAJOR TBB_VERSION_MINOR TBB_INTERFACE_VERSION) -else() - unset(TBB_VERSION_MAJOR) - unset(TBB_VERSION_MINOR) - unset(TBB_INTERFACE_VERSION) -endif() diff --git a/cmake/OpenCVDetectVTK.cmake b/cmake/OpenCVDetectVTK.cmake deleted file mode 100644 index 2b55a9c..0000000 --- a/cmake/OpenCVDetectVTK.cmake +++ /dev/null @@ -1,53 +0,0 @@ -if(NOT WITH_VTK OR ANDROID OR IOS) - return() -endif() - -# VTK 6.x components -find_package(VTK QUIET COMPONENTS vtkRenderingOpenGL vtkInteractionStyle vtkRenderingLOD vtkIOPLY vtkFiltersTexture vtkRenderingFreeType vtkIOExport NO_MODULE) - -# VTK 5.x components -if(NOT VTK_FOUND) - find_package(VTK QUIET COMPONENTS vtkCommon NO_MODULE) -endif() - -if(NOT VTK_FOUND) - set(HAVE_VTK OFF) - message(STATUS "VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file") - return() -endif() - -# Don't support ealier VTKs -if(${VTK_VERSION} VERSION_LESS "5.8.0") - message(STATUS "VTK support is disabled. VTK ver. 5.8.0 is minimum required, but found VTK ver. ${VTK_VERSION}") - return() -endif() - -# Different Qt versions can't be linked together -if(HAVE_QT5 AND ${VTK_VERSION} VERSION_LESS "6.0.0") - if(VTK_USE_QT) - message(STATUS "VTK support is disabled. Incompatible combination: OpenCV + Qt5 and VTK ver.${VTK_VERSION} + Qt4") - endif() -endif() - -# Different Qt versions can't be linked together. VTK 6.0.0 doesn't provide a way to get Qt version it was linked with -if(HAVE_QT5 AND ${VTK_VERSION} VERSION_EQUAL "6.0.0" AND NOT DEFINED FORCE_VTK) - message(STATUS "VTK support is disabled. Possible incompatible combination: OpenCV+Qt5, and VTK ver.${VTK_VERSION} with Qt4") - message(STATUS "If it is known that VTK was compiled without Qt4, please define '-DFORCE_VTK=TRUE' flag in CMake") - return() -endif() - -# Different Qt versions can't be linked together -if(HAVE_QT AND ${VTK_VERSION} VERSION_GREATER "6.0.0" AND NOT ${VTK_QT_VERSION} STREQUAL "") - if(HAVE_QT5 AND ${VTK_QT_VERSION} EQUAL "4") - message(STATUS "VTK support is disabled. Incompatible combination: OpenCV + Qt5 and VTK ver.${VTK_VERSION} + Qt4") - return() - endif() - - if(NOT HAVE_QT5 AND ${VTK_QT_VERSION} EQUAL "5") - message(STATUS "VTK support is disabled. Incompatible combination: OpenCV + Qt4 and VTK ver.${VTK_VERSION} + Qt5") - return() - endif() -endif() - -set(HAVE_VTK ON) -message(STATUS "Found VTK ver. ${VTK_VERSION} (usefile: ${VTK_USE_FILE})") diff --git a/cmake/OpenCVExtraTargets.cmake b/cmake/OpenCVExtraTargets.cmake deleted file mode 100644 index ecb2a3b..0000000 --- a/cmake/OpenCVExtraTargets.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# ---------------------------------------------------------------------------- -# Uninstall target, for "make uninstall" -# ---------------------------------------------------------------------------- -CONFIGURE_FILE( - "${OpenCV_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - @ONLY) - -ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") -if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(uninstall PROPERTIES FOLDER "CMakeTargets") -endif() - - -# ---------------------------------------------------------------------------- -# target building all OpenCV modules -# ---------------------------------------------------------------------------- -add_custom_target(opencv_modules) -if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(opencv_modules PROPERTIES FOLDER "extra") -endif() - - -# ---------------------------------------------------------------------------- -# targets building all tests -# ---------------------------------------------------------------------------- -if(BUILD_TESTS) - add_custom_target(opencv_tests) - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(opencv_tests PROPERTIES FOLDER "extra") - endif() -endif() -if(BUILD_PERF_TESTS) - add_custom_target(opencv_perf_tests) - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(opencv_perf_tests PROPERTIES FOLDER "extra") - endif() -endif() diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake deleted file mode 100644 index db02e6a..0000000 --- a/cmake/OpenCVFindIPP.cmake +++ /dev/null @@ -1,376 +0,0 @@ -# -# The script to detect Intel(R) Integrated Performance Primitives (IPP) -# installation/package -# -# This will try to find Intel IPP libraries, and include path by automatic -# search through typical install locations and if failed it will -# examine IPPROOT environment variable. -# Note, IPPROOT is not set by IPP installer, it should be set manually. -# -# On return this will define: -# -# IPP_FOUND - True if Intel IPP found -# IPP_ROOT_DIR - root of IPP installation -# IPP_INCLUDE_DIRS - IPP include folder -# IPP_LIBRARY_DIRS - IPP libraries folder -# IPP_LIBRARIES - IPP libraries names that are used by OpenCV -# IPP_LATEST_VERSION_STR - string with the newest detected IPP version -# IPP_LATEST_VERSION_MAJOR - numbers of IPP version (MAJOR.MINOR.BUILD) -# IPP_LATEST_VERSION_MINOR -# IPP_LATEST_VERSION_BUILD -# -# Created: 30 Dec 2010 by Vladimir Dudnik (vladimir.dudnik@intel.com) -# - -set(IPP_FOUND) -set(IPP_VERSION_STR "5.3.0.0") # will not detect earlier versions -set(IPP_VERSION_MAJOR 0) -set(IPP_VERSION_MINOR 0) -set(IPP_VERSION_BUILD 0) -set(IPP_ROOT_DIR) -set(IPP_INCLUDE_DIRS) -set(IPP_LIBRARY_DIRS) -set(IPP_LIBRARIES) -set(IPP_LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) -set(IPP_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(IPP_PREFIX "ipp") -set(IPP_SUFFIX "_l") -set(IPPCORE "core") # core functionality -set(IPPS "s") # signal processing -set(IPPI "i") # image processing -set(IPPCC "cc") # color conversion -set(IPPCV "cv") # computer vision -set(IPPVM "vm") # vector math - - -set(IPP_X64 0) -if (CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) - set(IPP_X64 1) -endif() -if (CMAKE_CL_64) - set(IPP_X64 1) -endif() - -# ------------------------------------------------------------------------ -# This function detect IPP version by analyzing ippversion.h file -# Note, ippversion.h file was inroduced since IPP 5.3 -# ------------------------------------------------------------------------ -function(get_ipp_version _ROOT_DIR) - set(_VERSION_STR) - set(_MAJOR) - set(_MINOR) - set(_BUILD) - - # read IPP version info from file - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR1 REGEX "IPP_VERSION_MAJOR") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR2 REGEX "IPP_VERSION_MINOR") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR3 REGEX "IPP_VERSION_BUILD") - if("${STR3}" STREQUAL "") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR3 REGEX "IPP_VERSION_UPDATE") - endif() - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR4 REGEX "IPP_VERSION_STR") - - # extract info and assign to variables - string(REGEX MATCHALL "[0-9]+" _MAJOR ${STR1}) - string(REGEX MATCHALL "[0-9]+" _MINOR ${STR2}) - string(REGEX MATCHALL "[0-9]+" _BUILD ${STR3}) - string(REGEX MATCHALL "[0-9]+[.]+[0-9]+[^\"]+|[0-9]+[.]+[0-9]+" _VERSION_STR ${STR4}) - - # export info to parent scope - set(IPP_VERSION_STR ${_VERSION_STR} PARENT_SCOPE) - set(IPP_VERSION_MAJOR ${_MAJOR} PARENT_SCOPE) - set(IPP_VERSION_MINOR ${_MINOR} PARENT_SCOPE) - set(IPP_VERSION_BUILD ${_BUILD} PARENT_SCOPE) - - message(STATUS "found IPP: ${_MAJOR}.${_MINOR}.${_BUILD} [${_VERSION_STR}]") - message(STATUS "at: ${_ROOT_DIR}") - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This is auxiliary function called from set_ipp_variables() -# to set IPP_LIBRARIES variable in IPP 6.x style (IPP 5.3 should also work) -# ------------------------------------------------------------------------ -function(set_ipp_old_libraries) - set(IPP_PREFIX "ipp") - set(IPP_SUFFIX) # old style static core libs suffix - set(IPP_ARCH) # architecture suffix - set(IPP_DISP "emerged") # old style dipatcher and cpu-specific - set(IPP_MRGD "merged") # static libraries - set(IPPCORE "core") # core functionality - set(IPPSP "s") # signal processing - set(IPPIP "i") # image processing - set(IPPCC "cc") # color conversion - set(IPPCV "cv") # computer vision - set(IPPVM "vm") # vector math - - if (IPP_X64) - set(IPP_ARCH "em64t") - endif() - - if(WIN32) - set(IPP_SUFFIX "l") - endif() - - set(IPP_LIBRARIES - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_MRGD}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_DISP}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_MRGD}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_DISP}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_MRGD}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_DISP}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_MRGD}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_DISP}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_MRGD}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_DISP}${IPP_ARCH}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_ARCH}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - PARENT_SCOPE) - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This is auxiliary function called from set_ipp_variables() -# to set IPP_LIBRARIES variable in IPP 7.x and 8.x style -# ------------------------------------------------------------------------ -function(set_ipp_new_libraries _LATEST_VERSION) - set(IPP_PREFIX "ipp") - - if(${_LATEST_VERSION} VERSION_LESS "8.0") - set(IPP_SUFFIX "_l") # static not threaded libs suffix IPP 7.x - else() - if(WIN32) - set(IPP_SUFFIX "mt") # static not threaded libs suffix IPP 8.x for Windows - else() - set(IPP_SUFFIX "") # static not threaded libs suffix IPP 8.x for Linux/OS X - endif() - endif() - set(IPPCORE "core") # core functionality - set(IPPSP "s") # signal processing - set(IPPIP "i") # image processing - set(IPPCC "cc") # color conversion - set(IPPCV "cv") # computer vision - set(IPPVM "vm") # vector math - - set(IPP_LIBRARIES - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPI}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPS}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - ${IPP_LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_SUFFIX}${IPP_LIB_SUFFIX}) - - if (UNIX) - set(IPP_LIBRARIES - ${IPP_LIBRARIES} - ${IPP_LIB_PREFIX}irc${CMAKE_SHARED_LIBRARY_SUFFIX} - ${IPP_LIB_PREFIX}imf${CMAKE_SHARED_LIBRARY_SUFFIX} - ${IPP_LIB_PREFIX}svml${CMAKE_SHARED_LIBRARY_SUFFIX}) - endif() - set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This function will set -# IPP_INCLUDE_DIRS, IPP_LIBRARY_DIRS and IPP_LIBRARIES variables depending -# on IPP version parameter. -# Since IPP 7.0 version library names and install folder structure -# was changed -# ------------------------------------------------------------------------ -function(set_ipp_variables _LATEST_VERSION) - if(${_LATEST_VERSION} VERSION_LESS "7.0") -# message(STATUS "old") - - # set INCLUDE and LIB folders - set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib PARENT_SCOPE) - - if (IPP_X64) - if(NOT EXISTS ${IPP_ROOT_DIR}/../em64t) - message(SEND_ERROR "IPP EM64T libraries not found") - endif() - else() - if(NOT EXISTS ${IPP_ROOT_DIR}/../ia32) - message(SEND_ERROR "IPP IA32 libraries not found") - endif() - endif() - - # set IPP_LIBRARIES variable (6.x lib names) - set_ipp_old_libraries() - set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) - message(STATUS "IPP libs: ${IPP_LIBRARIES}") - - else() -# message(STATUS "new") - - # set INCLUDE and LIB folders - set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) - - if (APPLE) - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib) - elseif (IPP_X64) - if(NOT EXISTS ${IPP_ROOT_DIR}/lib/intel64) - message(SEND_ERROR "IPP EM64T libraries not found") - endif() - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/intel64) - else() - if(NOT EXISTS ${IPP_ROOT_DIR}/lib/ia32) - message(SEND_ERROR "IPP IA32 libraries not found") - endif() - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/ia32) - endif() - - if (UNIX) - get_filename_component(INTEL_COMPILER_LIBRARY_DIR ${IPP_ROOT_DIR}/../lib REALPATH) - if (IPP_X64) - if(NOT EXISTS ${INTEL_COMPILER_LIBRARY_DIR}/intel64) - message(SEND_ERROR "Intel compiler EM64T libraries not found") - endif() - set(IPP_LIBRARY_DIRS - ${IPP_LIBRARY_DIRS} - ${INTEL_COMPILER_LIBRARY_DIR}/intel64) - else() - if(NOT EXISTS ${INTEL_COMPILER_LIBRARY_DIR}/ia32) - message(SEND_ERROR "Intel compiler IA32 libraries not found") - endif() - set(IPP_LIBRARY_DIRS - ${IPP_LIBRARY_DIRS} - ${INTEL_COMPILER_LIBRARY_DIR}/ia32) - endif() - endif() - set(IPP_LIBRARY_DIRS ${IPP_LIBRARY_DIRS} PARENT_SCOPE) - - # set IPP_LIBRARIES variable (7.x or 8.x lib names) - set_ipp_new_libraries(${_LATEST_VERSION}) - set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) - message(STATUS "IPP libs: ${IPP_LIBRARIES}") - - endif() - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This section will look for IPP through IPPROOT env variable -# Note, IPPROOT is not set by IPP installer, you may need to set it manually -# ------------------------------------------------------------------------ -find_path( - IPP_H_PATH - NAMES ippversion.h - PATHS $ENV{IPPROOT} - PATH_SUFFIXES include - DOC "The path to Intel(R) IPP header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) - -if(IPP_H_PATH) - set(IPP_FOUND 1) - - # traverse up to IPPROOT level - get_filename_component(IPP_ROOT_DIR ${IPP_H_PATH} PATH) - - # extract IPP version info - get_ipp_version(${IPP_ROOT_DIR}) - - # keep info in the same vars for auto search and search by IPPROOT - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) - set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) - set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) - - # set IPP INCLUDE, LIB dirs and library names - set_ipp_variables(${IPP_LATEST_VERSION_STR}) -endif() - - -if(NOT IPP_FOUND) - # reset var from previous search - set(IPP_H_PATH) - - - # ------------------------------------------------------------------------ - # This section will look for IPP through system program folders - # Note, if several IPP installations found the newest version will be - # selected - # ------------------------------------------------------------------------ - foreach(curdir ${CMAKE_SYSTEM_PREFIX_PATH}) - set(curdir ${curdir}/intel) - file(TO_CMAKE_PATH ${curdir} CURDIR) - - if(EXISTS ${curdir}) - file(GLOB_RECURSE IPP_H_DIR ${curdir}/ippversion.h) - - if(IPP_H_DIR) - set(IPP_FOUND 1) - endif() - - # init IPP_LATEST_VERSION version with oldest detectable version (5.3.0.0) - # IPP prior 5.3 did not have ippversion.h file - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - - # look through all dirs where ippversion.h was found - foreach(item ${IPP_H_DIR}) - - # traverse up to IPPROOT level - get_filename_component(_FILE_PATH ${item} PATH) - get_filename_component(_ROOT_DIR ${_FILE_PATH} PATH) - - # extract IPP version info - get_ipp_version(${_ROOT_DIR}) - - # remember the latest version (if many found) - if(${IPP_LATEST_VERSION_STR} VERSION_LESS ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) - set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) - set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) - set(IPP_ROOT_DIR ${_ROOT_DIR}) - endif() - endforeach() - endif() - endforeach() -endif() - -if(IPP_FOUND) - # set IPP INCLUDE, LIB dirs and library names - set_ipp_variables(${IPP_LATEST_VERSION_STR}) - - # set CACHE variable IPP_H_PATH, - # path to IPP header files for the latest version - find_path( - IPP_H_PATH - NAMES ippversion.h - PATHS ${IPP_ROOT_DIR} - PATH_SUFFIXES include - DOC "The path to Intel(R) IPP header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) -endif() - -if(WIN32 AND MINGW AND NOT IPP_LATEST_VERSION_MAJOR LESS 7) - # Since IPP built with Microsoft compiler and /GS option - # ====================================================== - # From Windows SDK 7.1 - # (usually in "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib"), - # to avoid undefined reference to __security_cookie and _chkstk: - set(MSV_RUNTMCHK "RunTmChk") - set(IPP_LIBRARIES ${IPP_LIBRARIES} ${MSV_RUNTMCHK}${IPP_LIB_SUFFIX}) - - # To avoid undefined reference to _alldiv and _chkstk - # =================================================== - # NB: it may require a recompilation of w32api (after having modified - # the file ntdll.def) to export the required functions - # See http://code.opencv.org/issues/1906 for additional details - set(MSV_NTDLL "ntdll") - set(IPP_LIBRARIES ${IPP_LIBRARIES} ${MSV_NTDLL}${IPP_LIB_SUFFIX}) -endif() diff --git a/cmake/OpenCVFindIntelPerCSDK.cmake b/cmake/OpenCVFindIntelPerCSDK.cmake deleted file mode 100644 index 7243105..0000000 --- a/cmake/OpenCVFindIntelPerCSDK.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# Main variables: -# INTELPERC_LIBRARIES and INTELPERC_INCLUDE to link Intel Perceptial Computing SDK modules -# HAVE_INTELPERC for conditional compilation OpenCV with/without Intel Perceptial Computing SDK - -if(X86_64) - find_path(INTELPERC_INCLUDE_DIR "pxcsession.h" PATHS "$ENV{PCSDK_DIR}include" DOC "Path to Intel Perceptual Computing SDK interface headers") - find_file(INTELPERC_LIBRARIES "libpxc.lib" PATHS "$ENV{PCSDK_DIR}lib/x64" DOC "Path to Intel Perceptual Computing SDK interface libraries") -else() - find_path(INTELPERC_INCLUDE_DIR "pxcsession.h" PATHS "$ENV{PCSDK_DIR}include" DOC "Path to Intel Perceptual Computing SDK interface headers") - find_file(INTELPERC_LIBRARIES "libpxc.lib" PATHS "$ENV{PCSDK_DIR}lib/Win32" DOC "Path to Intel Perceptual Computing SDK interface libraries") -endif() - -if(INTELPERC_INCLUDE_DIR AND INTELPERC_LIBRARIES) - set(HAVE_INTELPERC TRUE) -else() - set(HAVE_INTELPERC FALSE) - message(WARNING "Intel Perceptual Computing SDK library directory (set by INTELPERC_LIB_DIR variable) is not found or does not have Intel Perceptual Computing SDK libraries.") -endif() #if(INTELPERC_INCLUDE_DIR AND INTELPERC_LIBRARIES) - -mark_as_advanced(FORCE INTELPERC_LIBRARIES INTELPERC_INCLUDE_DIR) \ No newline at end of file diff --git a/cmake/OpenCVFindLATEX.cmake b/cmake/OpenCVFindLATEX.cmake deleted file mode 100644 index fb324ce..0000000 --- a/cmake/OpenCVFindLATEX.cmake +++ /dev/null @@ -1,114 +0,0 @@ -# - Find Latex -# This module finds if Latex is installed and determines where the -# executables are. This code sets the following variables: -# -# LATEX_COMPILER: path to the LaTeX compiler -# PDFLATEX_COMPILER: path to the PdfLaTeX compiler -# BIBTEX_COMPILER: path to the BibTeX compiler -# MAKEINDEX_COMPILER: path to the MakeIndex compiler -# DVIPS_CONVERTER: path to the DVIPS converter -# PS2PDF_CONVERTER: path to the PS2PDF converter -# LATEX2HTML_CONVERTER: path to the LaTeX2Html converter -# - -IF (WIN32) - - # Try to find the MikTex binary path (look for its package manager). - - FIND_PATH(MIKTEX_BINARY_PATH mpm.exe - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin" - DOC - "Path to the MikTex binary directory." - ) - MARK_AS_ADVANCED(MIKTEX_BINARY_PATH) - - # Try to find the GhostScript binary path (look for gswin32). - - GET_FILENAME_COMPONENT(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00 - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\8.00;GS_DLL]" PATH - ) - - GET_FILENAME_COMPONENT(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04 - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\7.04;GS_DLL]" PATH - ) - - FIND_PATH(GHOSTSCRIPT_BINARY_PATH gswin32.exe - ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00} - ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04} - DOC "Path to the GhostScript binary directory." - ) - MARK_AS_ADVANCED(GHOSTSCRIPT_BINARY_PATH) - - FIND_PATH(GHOSTSCRIPT_LIBRARY_PATH ps2pdf13.bat - "${GHOSTSCRIPT_BINARY_PATH}/../lib" - DOC "Path to the GhostScript library directory." - ) - MARK_AS_ADVANCED(GHOSTSCRIPT_LIBRARY_PATH) - -ENDIF (WIN32) - -FIND_HOST_PROGRAM(LATEX_COMPILER - NAMES latex - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -FIND_HOST_PROGRAM(PDFLATEX_COMPILER - NAMES pdflatex - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -FIND_HOST_PROGRAM(BIBTEX_COMPILER - NAMES bibtex - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -FIND_HOST_PROGRAM(MAKEINDEX_COMPILER - NAMES makeindex - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -FIND_HOST_PROGRAM(DVIPS_CONVERTER - NAMES dvips - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -FIND_HOST_PROGRAM(DVIPDF_CONVERTER - NAMES dvipdfm dvipdft dvipdf - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - -IF (WIN32) - FIND_HOST_PROGRAM(PS2PDF_CONVERTER - NAMES ps2pdf14.bat - PATHS ${GHOSTSCRIPT_LIBRARY_PATH} - ) -ELSE (WIN32) - FIND_HOST_PROGRAM(PS2PDF_CONVERTER - NAMES ps2pdf14 ps2pdf - PATHS /usr/bin /usr/texbin - ) -ENDIF (WIN32) - -FIND_HOST_PROGRAM(LATEX2HTML_CONVERTER - NAMES latex2html - PATHS ${MIKTEX_BINARY_PATH} - /usr/bin /usr/texbin -) - - -MARK_AS_ADVANCED( - LATEX_COMPILER - PDFLATEX_COMPILER - BIBTEX_COMPILER - MAKEINDEX_COMPILER - DVIPS_CONVERTER - DVIPDF_CONVERTER - PS2PDF_CONVERTER - LATEX2HTML_CONVERTER -) diff --git a/cmake/OpenCVFindLibsGUI.cmake b/cmake/OpenCVFindLibsGUI.cmake deleted file mode 100644 index fb75344..0000000 --- a/cmake/OpenCVFindLibsGUI.cmake +++ /dev/null @@ -1,75 +0,0 @@ -# ---------------------------------------------------------------------------- -# Detect 3rd-party GUI libraries -# ---------------------------------------------------------------------------- - -#--- Win32 UI --- -ocv_clear_vars(HAVE_WIN32UI) -if(WITH_WIN32UI) - try_compile(HAVE_WIN32UI - "${OpenCV_BINARY_DIR}" - "${OpenCV_SOURCE_DIR}/cmake/checks/win32uitest.cpp" - CMAKE_FLAGS "-DLINK_LIBRARIES:STRING=user32;gdi32") -endif() - -# --- QT4 --- -ocv_clear_vars(HAVE_QT HAVE_QT5) -if(WITH_QT) - if(NOT CMAKE_VERSION VERSION_LESS 2.8.3 AND NOT WITH_QT EQUAL 4) - find_package(Qt5Core) - find_package(Qt5Gui) - find_package(Qt5Widgets) - find_package(Qt5Test) - find_package(Qt5Concurrent) - if(Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5Widgets_FOUND AND Qt5Test_FOUND AND Qt5Concurrent_FOUND) - set(HAVE_QT5 ON) - set(HAVE_QT ON) - find_package(Qt5OpenGL) - if(Qt5OpenGL_FOUND) - set(QT_QTOPENGL_FOUND ON) - endif() - endif() - endif() - - if(NOT HAVE_QT) - find_package(Qt4 REQUIRED QtCore QtGui QtTest) - if(QT4_FOUND) - set(HAVE_QT TRUE) - endif() - endif() -endif() - -# --- GTK --- -ocv_clear_vars(HAVE_GTK HAVE_GTHREAD HAVE_GTKGLEXT) -if(WITH_GTK AND NOT HAVE_QT) - CHECK_MODULE(gtk+-2.0 HAVE_GTK) - CHECK_MODULE(gthread-2.0 HAVE_GTHREAD) - if(WITH_OPENGL) - CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT) - endif() -endif() - -# --- OpenGl --- -ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL) -if(WITH_OPENGL) - if(WITH_WIN32UI OR (HAVE_QT AND QT_QTOPENGL_FOUND) OR HAVE_GTKGLEXT) - find_package (OpenGL QUIET) - if(OPENGL_FOUND) - set(HAVE_OPENGL TRUE) - list(APPEND OPENCV_LINKER_LIBS ${OPENGL_LIBRARIES}) - if(QT_QTOPENGL_FOUND) - set(HAVE_QT_OPENGL TRUE) - else() - ocv_include_directories(${OPENGL_INCLUDE_DIR}) - endif() - endif() - endif() -endif(WITH_OPENGL) - -# --- Carbon & Cocoa --- -if(APPLE) - if(WITH_CARBON) - set(HAVE_CARBON YES) - elseif(NOT IOS) - set(HAVE_COCOA YES) - endif() -endif() diff --git a/cmake/OpenCVFindLibsGrfmt.cmake b/cmake/OpenCVFindLibsGrfmt.cmake deleted file mode 100644 index f27a302..0000000 --- a/cmake/OpenCVFindLibsGrfmt.cmake +++ /dev/null @@ -1,175 +0,0 @@ -# ---------------------------------------------------------------------------- -# Detect 3rd-party image IO libraries -# ---------------------------------------------------------------------------- - -# --- zlib (required) --- -if(BUILD_ZLIB) - ocv_clear_vars(ZLIB_FOUND) -else() - include(FindZLIB) - if(ZLIB_FOUND AND ANDROID) - if(ZLIB_LIBRARY STREQUAL "${ANDROID_SYSROOT}/usr/lib/libz.so") - set(ZLIB_LIBRARY z) - set(ZLIB_LIBRARIES z) - endif() - endif() -endif() - -if(NOT ZLIB_FOUND) - ocv_clear_vars(ZLIB_LIBRARY ZLIB_LIBRARIES ZLIB_INCLUDE_DIR) - - set(ZLIB_LIBRARY zlib) - set(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/zlib") - set(ZLIB_INCLUDE_DIR "${${ZLIB_LIBRARY}_SOURCE_DIR}" "${${ZLIB_LIBRARY}_BINARY_DIR}") - - ocv_parse_header2(ZLIB "${${ZLIB_LIBRARY}_SOURCE_DIR}/zlib.h" ZLIB_VERSION) -endif() - -# --- libtiff (optional, should be searched after zlib) --- -if(WITH_TIFF) - if(BUILD_TIFF) - ocv_clear_vars(TIFF_FOUND) - else() - include(FindTIFF) - if(TIFF_FOUND) - ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION) - endif() - endif() - - if(NOT TIFF_FOUND) - ocv_clear_vars(TIFF_LIBRARY TIFF_LIBRARIES TIFF_INCLUDE_DIR) - - set(TIFF_LIBRARY libtiff) - set(TIFF_LIBRARIES ${TIFF_LIBRARY}) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libtiff") - set(TIFF_INCLUDE_DIR "${${TIFF_LIBRARY}_SOURCE_DIR}" "${${TIFF_LIBRARY}_BINARY_DIR}") - ocv_parse_header("${${TIFF_LIBRARY}_SOURCE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION) - endif() - - if(TIFF_VERSION_CLASSIC AND NOT TIFF_VERSION) - set(TIFF_VERSION ${TIFF_VERSION_CLASSIC}) - endif() - - if(TIFF_BIGTIFF_VERSION AND NOT TIFF_VERSION_BIG) - set(TIFF_VERSION_BIG ${TIFF_BIGTIFF_VERSION}) - endif() - - if(NOT TIFF_VERSION_STRING AND TIFF_INCLUDE_DIR) - list(GET TIFF_INCLUDE_DIR 0 _TIFF_INCLUDE_DIR) - if(EXISTS "${_TIFF_INCLUDE_DIR}/tiffvers.h") - file(STRINGS "${_TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*") - string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" "\\1" TIFF_VERSION_STRING "${tiff_version_str}") - unset(tiff_version_str) - endif() - unset(_TIFF_INCLUDE_DIR) - endif() - - set(HAVE_TIFF YES) -endif() - -# --- libjpeg (optional) --- -if(WITH_JPEG) - if(BUILD_JPEG) - ocv_clear_vars(JPEG_FOUND) - else() - include(FindJPEG) - endif() - - if(NOT JPEG_FOUND) - ocv_clear_vars(JPEG_LIBRARY JPEG_LIBRARIES JPEG_INCLUDE_DIR) - - set(JPEG_LIBRARY libjpeg) - set(JPEG_LIBRARIES ${JPEG_LIBRARY}) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjpeg") - set(JPEG_INCLUDE_DIR "${${JPEG_LIBRARY}_SOURCE_DIR}") - endif() - - ocv_parse_header("${JPEG_INCLUDE_DIR}/jpeglib.h" JPEG_VERSION_LINES JPEG_LIB_VERSION) - set(HAVE_JPEG YES) -endif() - -# --- libjasper (optional, should be searched after libjpeg) --- -if(WITH_JASPER) - if(BUILD_JASPER) - ocv_clear_vars(JASPER_FOUND) - else() - include(FindJasper) - endif() - - if(NOT JASPER_FOUND) - ocv_clear_vars(JASPER_LIBRARY JASPER_LIBRARIES JASPER_INCLUDE_DIR) - - set(JASPER_LIBRARY libjasper) - set(JASPER_LIBRARIES ${JASPER_LIBRARY}) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libjasper") - set(JASPER_INCLUDE_DIR "${${JASPER_LIBRARY}_SOURCE_DIR}") - endif() - - set(HAVE_JASPER YES) - - if(NOT JASPER_VERSION_STRING) - ocv_parse_header2(JASPER "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" JAS_VERSION "") - endif() -endif() - -# --- libpng (optional, should be searched after zlib) --- -if(WITH_PNG) - if(BUILD_PNG) - ocv_clear_vars(PNG_FOUND) - else() - include(FindPNG) - if(PNG_FOUND) - include(CheckIncludeFile) - check_include_file("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" HAVE_LIBPNG_PNG_H) - if(HAVE_LIBPNG_PNG_H) - ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/libpng/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) - else() - ocv_parse_header("${PNG_PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) - endif() - endif() - endif() - - if(NOT PNG_FOUND) - ocv_clear_vars(PNG_LIBRARY PNG_LIBRARIES PNG_INCLUDE_DIR PNG_PNG_INCLUDE_DIR HAVE_LIBPNG_PNG_H PNG_DEFINITIONS) - - set(PNG_LIBRARY libpng) - set(PNG_LIBRARIES ${PNG_LIBRARY}) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/libpng") - set(PNG_INCLUDE_DIR "${${PNG_LIBRARY}_SOURCE_DIR}") - set(PNG_DEFINITIONS "") - ocv_parse_header("${PNG_INCLUDE_DIR}/png.h" PNG_VERSION_LINES PNG_LIBPNG_VER_MAJOR PNG_LIBPNG_VER_MINOR PNG_LIBPNG_VER_RELEASE) - endif() - - set(HAVE_PNG YES) - set(PNG_VERSION "${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}") -endif() - -# --- OpenEXR (optional) --- -if(WITH_OPENEXR) - if(BUILD_OPENEXR) - ocv_clear_vars(OPENEXR_FOUND) - else() - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake") - endif() - - if(NOT OPENEXR_FOUND) - ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) - - set(OPENEXR_LIBRARIES IlmImf) - set(OPENEXR_ILMIMF_LIBRARY IlmImf) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr") - endif() - - set(HAVE_OPENEXR YES) -endif() - -#cmake 2.8.2 bug - it fails to determine zlib version -if(ZLIB_FOUND) - ocv_parse_header2(ZLIB "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_VERSION) -endif() - -# --- Apple ImageIO --- -if(WITH_IMAGEIO) - set(HAVE_IMAGEIO YES) -endif() diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake deleted file mode 100644 index 33ea36f..0000000 --- a/cmake/OpenCVFindLibsPerf.cmake +++ /dev/null @@ -1,74 +0,0 @@ -# ---------------------------------------------------------------------------- -# Detect other 3rd-party performance and math libraries -# ---------------------------------------------------------------------------- - -# --- TBB --- -if(WITH_TBB) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake") -endif(WITH_TBB) - -# --- IPP --- -ocv_clear_vars(IPP_FOUND) -if(WITH_IPP) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake") - if(IPP_FOUND) - add_definitions(-DHAVE_IPP) - ocv_include_directories(${IPP_INCLUDE_DIRS}) - link_directories(${IPP_LIBRARY_DIRS}) - set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES}) - endif() -endif(WITH_IPP) - -# --- CUDA --- -if(WITH_CUDA) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDA.cmake") -endif(WITH_CUDA) - -# --- Eigen --- -if(WITH_EIGEN) - find_path(EIGEN_INCLUDE_PATH "Eigen/Core" - PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 - PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2 - DOC "The path to Eigen3/Eigen2 headers" - CMAKE_FIND_ROOT_PATH_BOTH) - - if(EIGEN_INCLUDE_PATH) - ocv_include_directories(${EIGEN_INCLUDE_PATH}) - ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION) - set(HAVE_EIGEN 1) - endif() -endif(WITH_EIGEN) - -# --- C= --- -if(WITH_CSTRIPES AND NOT HAVE_TBB) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCStripes.cmake") -else() - set(HAVE_CSTRIPES 0) -endif() - -# --- OpenMP --- -if(WITH_OPENMP AND NOT HAVE_TBB AND NOT HAVE_CSTRIPES) - find_package(OpenMP) - if(OPENMP_FOUND) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - endif() - set(HAVE_OPENMP "${OPENMP_FOUND}") -endif() - -# --- GCD --- -if(APPLE AND NOT HAVE_TBB AND NOT HAVE_CSTRIPES AND NOT HAVE_OPENMP) - set(HAVE_GCD 1) -else() - set(HAVE_GCD 0) -endif() - -# --- Concurrency --- -if(MSVC AND NOT HAVE_TBB AND NOT HAVE_CSTRIPES AND NOT HAVE_OPENMP) - set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/concurrencytest.cpp") - file(WRITE "${_fname}" "#if _MSC_VER < 1600\n#error\n#endif\nint main() { return 0; }\n") - try_compile(HAVE_CONCURRENCY "${CMAKE_BINARY_DIR}" "${_fname}") - file(REMOVE "${_fname}") -else() - set(HAVE_CONCURRENCY 0) -endif() diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake deleted file mode 100644 index a797f04..0000000 --- a/cmake/OpenCVFindLibsVideo.cmake +++ /dev/null @@ -1,257 +0,0 @@ -# ---------------------------------------------------------------------------- -# Detect 3rd-party video IO libraries -# ---------------------------------------------------------------------------- - -ocv_clear_vars(HAVE_VFW) -if(WITH_VFW) - try_compile(HAVE_VFW - "${OpenCV_BINARY_DIR}" - "${OpenCV_SOURCE_DIR}/cmake/checks/vfwtest.cpp" - CMAKE_FLAGS "-DLINK_LIBRARIES:STRING=vfw32") -endif(WITH_VFW) - -# --- GStreamer --- -ocv_clear_vars(HAVE_GSTREAMER) -if(WITH_GSTREAMER) - CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER) - if(HAVE_GSTREAMER) - CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER) - endif() - if(HAVE_GSTREAMER) - CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER) - endif() -endif(WITH_GSTREAMER) - -# --- unicap --- -ocv_clear_vars(HAVE_UNICAP) -if(WITH_UNICAP) - CHECK_MODULE(libunicap HAVE_UNICAP_) - CHECK_MODULE(libucil HAVE_UNICAP_UCIL) - if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL) - set(HAVE_UNICAP TRUE) - endif() -endif(WITH_UNICAP) - -# --- PvApi --- -ocv_clear_vars(HAVE_PVAPI) -if(WITH_PVAPI) - find_path(PVAPI_INCLUDE_PATH "PvApi.h" - PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432 - PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc" - DOC "The path to PvAPI header") - - if(PVAPI_INCLUDE_PATH) - if(X86 AND NOT WIN32) - set(PVAPI_SDK_SUBDIR x86) - elseif(X86_64) - set(PVAPI_SDK_SUBDIR x64) - elseif(ARM) - set(PVAPI_SDK_SUBDIR arm) - endif() - - get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE) - if(PVAPI_SDK_SUBDIR) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}") - endif() - if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}") - endif() - - if(WIN32) - if(MINGW) - set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall") - endif(MINGW) - set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/PvAPI.lib" CACHE PATH "The PvAPI library") - else(WIN32) - set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library") - endif(WIN32) - if(EXISTS "${PVAPI_LIBRARY}") - set(HAVE_PVAPI TRUE) - endif() - endif(PVAPI_INCLUDE_PATH) -endif(WITH_PVAPI) - -# --- GigEVisionSDK --- -ocv_clear_vars(HAVE_GIGE_API) -if(WITH_GIGEAPI) - find_path(GIGEAPI_INCLUDE_PATH "GigEVisionSDK.h" - PATHS /usr/local /var /opt /usr ENV ProgramFiles ENV ProgramW6432 - PATH_SUFFIXES include "Smartek Vision Technologies/GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_c" - DOC "The path to Smartek GigEVisionSDK header") - FIND_LIBRARY(GIGEAPI_LIBRARIES NAMES GigEVisionSDK) - if(GIGEAPI_LIBRARIES AND GIGEAPI_INCLUDE_PATH) - set(HAVE_GIGE_API TRUE) - endif() -endif(WITH_GIGEAPI) - -# --- Dc1394 --- -ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2) -if(WITH_1394) - if(WIN32 AND MINGW) - find_path(CMU1394_INCLUDE_PATH "/1394common.h" - PATH_SUFFIXES include - DOC "The path to cmu1394 headers") - find_path(DC1394_2_INCLUDE_PATH "/dc1394/dc1394.h" - PATH_SUFFIXES include - DOC "The path to DC1394 2.x headers") - if(CMU1394_INCLUDE_PATH AND DC1394_2_INCLUDE_PATH) - set(CMU1394_LIB_DIR "${CMU1394_INCLUDE_PATH}/../lib" CACHE PATH "Full path of CMU1394 library directory") - set(DC1394_2_LIB_DIR "${DC1394_2_INCLUDE_PATH}/../lib" CACHE PATH "Full path of DC1394 2.x library directory") - if(EXISTS "${CMU1394_LIB_DIR}/lib1394camera.a" AND EXISTS "${DC1394_2_LIB_DIR}/libdc1394.a") - set(HAVE_DC1394_2 TRUE) - endif() - endif() - if(HAVE_DC1394_2) - ocv_parse_pkg("libdc1394-2" "${DC1394_2_LIB_DIR}/pkgconfig" "") - ocv_include_directories(${DC1394_2_INCLUDE_PATH}) - set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} - "${DC1394_2_LIB_DIR}/libdc1394.a" - "${CMU1394_LIB_DIR}/lib1394camera.a") - endif(HAVE_DC1394_2) - else(WIN32 AND MINGW) - CHECK_MODULE(libdc1394-2 HAVE_DC1394_2) - if(NOT HAVE_DC1394_2) - CHECK_MODULE(libdc1394 HAVE_DC1394) - endif() - endif(WIN32 AND MINGW) -endif(WITH_1394) - -# --- xine --- -ocv_clear_vars(HAVE_XINE) -if(WITH_XINE) - CHECK_MODULE(libxine HAVE_XINE) -endif(WITH_XINE) - -# --- V4L --- -ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_VIDEOIO) -if(WITH_V4L) - if(WITH_LIBV4L) - CHECK_MODULE(libv4l1 HAVE_LIBV4L) - endif() - CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L) - CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2) - CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO) -endif(WITH_V4L) - -# --- OpenNI --- -ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE) -if(WITH_OPENNI) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake") -endif(WITH_OPENNI) - -# --- XIMEA --- -ocv_clear_vars(HAVE_XIMEA) -if(WITH_XIMEA) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake") - if(XIMEA_FOUND) - set(HAVE_XIMEA TRUE) - endif() -endif(WITH_XIMEA) - -# --- FFMPEG --- -ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG) -if(WITH_FFMPEG) - if(WIN32 AND NOT ARM) - include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake") - elseif(UNIX) - CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC) - CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT) - CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL) - CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE) - - CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG) - CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG) - if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG) - if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE) - set(HAVE_GENTOO_FFMPEG TRUE) - endif() - endif() - if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE) - set(HAVE_FFMPEG TRUE) - endif() - - if(HAVE_FFMPEG) - # Find the bzip2 library because it is required on some systems - FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2) - if(NOT BZIP2_LIBRARIES) - # Do an other trial - FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib) - endif() - endif(HAVE_FFMPEG) - endif() - - if(APPLE) - find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h" - PATHS /usr/local /usr /opt - PATH_SUFFIXES include - DOC "The path to FFMPEG headers") - if(FFMPEG_INCLUDE_DIR) - set(HAVE_GENTOO_FFMPEG TRUE) - set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory") - if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a") - set(HAVE_FFMPEG_CODEC 1) - set(ALIASOF_libavcodec_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a") - set(HAVE_FFMPEG_FORMAT 1) - set(ALIASOF_libavformat_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a") - set(HAVE_FFMPEG_UTIL 1) - set(ALIASOF_libavutil_VERSION "Unknown") - if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a") - set(HAVE_FFMPEG_SWSCALE 1) - set(ALIASOF_libswscale_VERSION "Unknown") - set(HAVE_FFMPEG 1) - endif() - endif() - endif() - endif() - endif(FFMPEG_INCLUDE_DIR) - if(HAVE_FFMPEG) - set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a" - "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a" - "${FFMPEG_LIB_DIR}/libswscale.a") - ocv_include_directories(${FFMPEG_INCLUDE_DIR}) - endif() - endif(APPLE) -endif(WITH_FFMPEG) - -# --- VideoInput/DirectShow --- -if(WITH_DSHOW) - # always have VideoInput on Windows - set(HAVE_DSHOW 1) -endif(WITH_DSHOW) - -# --- VideoInput/Microsoft Media Foundation --- -if(WITH_MSMF) - check_include_file(Mfapi.h HAVE_MSMF) -endif(WITH_MSMF) - -# --- Extra HighGUI libs on Windows --- -if(WIN32) - list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32 vfw32) - if(MINGW64) - list(APPEND HIGHGUI_LIBRARIES avifil32 avicap32 winmm msvfw32) - list(REMOVE_ITEM HIGHGUI_LIBRARIES vfw32) - elseif(MINGW) - list(APPEND HIGHGUI_LIBRARIES winmm) - endif() -endif(WIN32) - -# --- Apple AV Foundation --- -if(WITH_AVFOUNDATION) - set(HAVE_AVFOUNDATION YES) -endif() - -# --- QuickTime --- -if (NOT IOS) - if(WITH_QUICKTIME) - set(HAVE_QUICKTIME YES) - elseif(APPLE) - set(HAVE_QTKIT YES) - endif() -endif() - -# --- Intel Perceptual Computing SDK --- -if(WITH_INTELPERC) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake") -endif(WITH_INTELPERC) diff --git a/cmake/OpenCVFindOpenEXR.cmake b/cmake/OpenCVFindOpenEXR.cmake deleted file mode 100644 index c0a4680..0000000 --- a/cmake/OpenCVFindOpenEXR.cmake +++ /dev/null @@ -1,108 +0,0 @@ -# The script is taken from http://code.google.com/p/nvidia-texture-tools/ - -# -# Try to find OpenEXR's libraries, and include path. -# Once done this will define: -# -# OPENEXR_FOUND = OpenEXR found. -# OPENEXR_INCLUDE_PATHS = OpenEXR include directories. -# OPENEXR_LIBRARIES = libraries that are needed to use OpenEXR. -# - -SET(OPENEXR_LIBRARIES "") -SET(OPENEXR_LIBSEARCH_SUFFIXES "") -file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH) - -if(WIN32) - SET(OPENEXR_ROOT "C:/Deploy" CACHE STRING "Path to the OpenEXR \"Deploy\" folder") - if(CMAKE_CL_64) - SET(OPENEXR_LIBSEARCH_SUFFIXES x64/Release x64 x64/Debug) - elseif(MSVC) - SET(OPENEXR_LIBSEARCH_SUFFIXES Win32/Release Win32 Win32/Debug) - endif() -else() - set(OPENEXR_ROOT "") -endif() - -SET(LIBRARY_PATHS - /usr/lib - /usr/local/lib - /sw/lib - /opt/local/lib - "${ProgramFiles_ENV_PATH}/OpenEXR/lib/static" - "${OPENEXR_ROOT}/lib") - -FIND_PATH(OPENEXR_INCLUDE_PATH ImfRgbaFile.h - PATH_SUFFIXES OpenEXR - PATHS - /usr/include - /usr/local/include - /sw/include - /opt/local/include - "${ProgramFiles_ENV_PATH}/OpenEXR/include" - "${OPENEXR_ROOT}/include") - -FIND_LIBRARY(OPENEXR_HALF_LIBRARY - NAMES Half - PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES} - PATHS ${LIBRARY_PATHS}) - -FIND_LIBRARY(OPENEXR_IEX_LIBRARY - NAMES Iex - PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES} - PATHS ${LIBRARY_PATHS}) - -FIND_LIBRARY(OPENEXR_IMATH_LIBRARY - NAMES Imath - PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES} - PATHS ${LIBRARY_PATHS}) - -FIND_LIBRARY(OPENEXR_ILMIMF_LIBRARY - NAMES IlmImf - PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES} - PATHS ${LIBRARY_PATHS}) - -FIND_LIBRARY(OPENEXR_ILMTHREAD_LIBRARY - NAMES IlmThread - PATH_SUFFIXES ${OPENEXR_LIBSEARCH_SUFFIXES} - PATHS ${LIBRARY_PATHS}) - -IF (OPENEXR_INCLUDE_PATH AND OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY) - SET(OPENEXR_FOUND TRUE) - SET(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATH} CACHE PATH "The include paths needed to use OpenEXR") - SET(OPENEXR_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} CACHE STRING "The libraries needed to use OpenEXR" FORCE) -ENDIF () - -IF(OPENEXR_FOUND) - IF(NOT OPENEXR_FIND_QUIETLY) - MESSAGE(STATUS "Found OpenEXR: ${OPENEXR_ILMIMF_LIBRARY}") - ENDIF() - if(PKG_CONFIG_FOUND AND NOT OPENEXR_VERSION) - get_filename_component(OPENEXR_LIB_PATH "${OPENEXR_ILMIMF_LIBRARY}" PATH) - if(EXISTS "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc") - execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --modversion "${OPENEXR_LIB_PATH}/pkgconfig/OpenEXR.pc" - RESULT_VARIABLE PKG_CONFIG_PROCESS - OUTPUT_VARIABLE OPENEXR_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) - if(NOT PKG_CONFIG_PROCESS EQUAL 0) - SET(OPENEXR_VERSION "Unknown") - endif() - endif() - endif() - if(NOT OPENEXR_VERSION) - SET(OPENEXR_VERSION "Unknown") - endif() -ELSE() - IF(OPENEXR_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find OpenEXR library") - ENDIF() -ENDIF() - -MARK_AS_ADVANCED( - OPENEXR_INCLUDE_PATHS - OPENEXR_LIBRARIES - OPENEXR_ILMIMF_LIBRARY - OPENEXR_IMATH_LIBRARY - OPENEXR_IEX_LIBRARY - OPENEXR_HALF_LIBRARY - OPENEXR_ILMTHREAD_LIBRARY) diff --git a/cmake/OpenCVFindOpenNI.cmake b/cmake/OpenCVFindOpenNI.cmake deleted file mode 100644 index 7541868..0000000 --- a/cmake/OpenCVFindOpenNI.cmake +++ /dev/null @@ -1,89 +0,0 @@ -# Main variables: -# OPENNI_LIBRARY and OPENNI_INCLUDES to link OpenCV modules with OpenNI -# HAVE_OPENNI for conditional compilation OpenCV with/without OpenNI - -if(NOT "${OPENNI_LIB_DIR}" STREQUAL "${OPENNI_LIB_DIR_INTERNAL}") - unset(OPENNI_LIBRARY CACHE) - unset(OPENNI_LIB_DIR CACHE) -endif() - -if(NOT "${OPENNI_INCLUDE_DIR}" STREQUAL "${OPENNI_INCLUDE_DIR_INTERNAL}") - unset(OPENNI_INCLUDES CACHE) - unset(OPENNI_INCLUDE_DIR CACHE) -endif() - -if(NOT "${OPENNI_PRIME_SENSOR_MODULE_BIN_DIR}" STREQUAL "${OPENNI_PRIME_SENSOR_MODULE_BIN_DIR_INTERNAL}") - unset(OPENNI_PRIME_SENSOR_MODULE CACHE) - unset(OPENNI_PRIME_SENSOR_MODULE_BIN_DIR CACHE) -endif() - -if(WIN32) - if(NOT (MSVC64 OR MINGW64)) - find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALL_PATH}Include" DOC "OpenNI c++ interface header") - find_library(OPENNI_LIBRARY "OpenNI" PATHS $ENV{OPEN_NI_LIB} DOC "OpenNI library") - else() - find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALL_PATH64}Include" DOC "OpenNI c++ interface header") - find_library(OPENNI_LIBRARY "OpenNI64" PATHS $ENV{OPEN_NI_LIB64} DOC "OpenNI library") - endif() -elseif(UNIX OR APPLE) - find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "/usr/include/ni" "/usr/include/openni" DOC "OpenNI c++ interface header") - find_library(OPENNI_LIBRARY "OpenNI" PATHS "/usr/lib" DOC "OpenNI library") -endif() - -if(OPENNI_LIBRARY AND OPENNI_INCLUDES) - set(HAVE_OPENNI TRUE) - # the check: are PrimeSensor Modules for OpenNI installed - if(WIN32) - if(NOT (MSVC64 OR MINGW64)) - find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH}../PrimeSense/Sensor/Bin" "$ENV{OPEN_NI_INSTALL_PATH}../PrimeSense/SensorKinect/Bin" DOC "Core library of PrimeSensor Modules for OpenNI") - else() - find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore64.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/Sensor/Bin64" "$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/SensorKinect/Bin64" DOC "Core library of PrimeSensor Modules for OpenNI") - endif() - elseif(UNIX OR APPLE) - find_library(OPENNI_PRIME_SENSOR_MODULE "XnCore" PATHS "/usr/lib" DOC "Core library of PrimeSensor Modules for OpenNI") - endif() - - if(OPENNI_PRIME_SENSOR_MODULE) - set(HAVE_OPENNI_PRIME_SENSOR_MODULE TRUE) - endif() -endif() #if(OPENNI_LIBRARY AND OPENNI_INCLUDES) - -get_filename_component(OPENNI_LIB_DIR "${OPENNI_LIBRARY}" PATH) -get_filename_component(OPENNI_INCLUDE_DIR ${OPENNI_INCLUDES} PATH) -get_filename_component(OPENNI_PRIME_SENSOR_MODULE_BIN_DIR "${OPENNI_PRIME_SENSOR_MODULE}" PATH) - -if(HAVE_OPENNI) - set(OPENNI_LIB_DIR "${OPENNI_LIB_DIR}" CACHE PATH "Path to OpenNI libraries" FORCE) - set(OPENNI_INCLUDE_DIR "${OPENNI_INCLUDE_DIR}" CACHE PATH "Path to OpenNI headers" FORCE) - set(OPENNI_PRIME_SENSOR_MODULE_BIN_DIR "${OPENNI_PRIME_SENSOR_MODULE_BIN_DIR}" CACHE PATH "Path to OpenNI PrimeSensor Module binaries" FORCE) -endif() - -if(OPENNI_LIBRARY) - set(OPENNI_LIB_DIR_INTERNAL "${OPENNI_LIB_DIR}" CACHE INTERNAL "This is the value of the last time OPENNI_LIB_DIR was set successfully." FORCE) -else() - message( WARNING, " OpenNI library directory (set by OPENNI_LIB_DIR variable) is not found or does not have OpenNI libraries." ) -endif() - -if(OPENNI_INCLUDES) - set(OPENNI_INCLUDE_DIR_INTERNAL "${OPENNI_INCLUDE_DIR}" CACHE INTERNAL "This is the value of the last time OPENNI_INCLUDE_DIR was set successfully." FORCE) -else() - message( WARNING, " OpenNI include directory (set by OPENNI_INCLUDE_DIR variable) is not found or does not have OpenNI include files." ) -endif() - -if(OPENNI_PRIME_SENSOR_MODULE) - set(OPENNI_PRIME_SENSOR_MODULE_BIN_DIR_INTERNAL "${OPENNI_PRIME_SENSOR_MODULE_BIN_DIR}" CACHE INTERNAL "This is the value of the last time OPENNI_PRIME_SENSOR_MODULE_BIN_DIR was set successfully." FORCE) -else() - message( WARNING, " PrimeSensor Module binaries directory (set by OPENNI_PRIME_SENSOR_MODULE_BIN_DIR variable) is not found or does not have PrimeSensor Module binaries." ) -endif() - -mark_as_advanced(FORCE OPENNI_PRIME_SENSOR_MODULE) -mark_as_advanced(FORCE OPENNI_LIBRARY) -mark_as_advanced(FORCE OPENNI_INCLUDES) - -if(HAVE_OPENNI) - ocv_parse_header("${OPENNI_INCLUDE_DIR}/XnVersion.h" OPENNI_VERSION_LINES XN_MAJOR_VERSION XN_MINOR_VERSION XN_MAINTENANCE_VERSION XN_BUILD_VERSION) - if(XN_MAJOR_VERSION) - set(OPENNI_VERSION_STRING ${XN_MAJOR_VERSION}.${XN_MINOR_VERSION}.${XN_MAINTENANCE_VERSION} CACHE INTERNAL "OpenNI version") - set(OPENNI_VERSION_BUILD ${XN_BUILD_VERSION} CACHE INTERNAL "OpenNI build version") - endif() -endif() diff --git a/cmake/OpenCVFindPkgConfig.cmake b/cmake/OpenCVFindPkgConfig.cmake deleted file mode 100644 index 7e439fd..0000000 --- a/cmake/OpenCVFindPkgConfig.cmake +++ /dev/null @@ -1,365 +0,0 @@ -# -# OpenCV note: the file has been extracted from CMake 2.6.2 distribution. -# It is used to build OpenCV with CMake 2.4.x -# - -# - a pkg-config module for CMake -# -# Usage: -# pkg_check_modules( [REQUIRED] []*) -# checks for all the given modules -# -# pkg_search_module( [REQUIRED] []*) -# checks for given modules and uses the first working one -# -# When the 'REQUIRED' argument was set, macros will fail with an error -# when module(s) could not be found -# -# It sets the following variables: -# PKG_CONFIG_FOUND ... true if pkg-config works on the system -# PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program -# _FOUND ... set to 1 if module(s) exist -# -# For the following variables two sets of values exist; first one is the -# common one and has the given PREFIX. The second set contains flags -# which are given out when pkgconfig was called with the '--static' -# option. -# _LIBRARIES ... only the libraries (w/o the '-l') -# _LIBRARY_DIRS ... the paths of the libraries (w/o the '-L') -# _LDFLAGS ... all required linker flags -# _LDFLAGS_OTHER ... all other linker flags -# _INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I') -# _CFLAGS ... all required cflags -# _CFLAGS_OTHER ... the other compiler flags -# -# = for common case -# = _STATIC for static linking -# -# There are some special variables whose prefix depends on the count -# of given modules. When there is only one module, stays -# unchanged. When there are multiple modules, the prefix will be -# changed to _: -# _VERSION ... version of the module -# _PREFIX ... prefix-directory of the module -# _INCLUDEDIR ... include-dir of the module -# _LIBDIR ... lib-dir of the module -# -# = when |MODULES| == 1, else -# = _ -# -# A parameter can have the following formats: -# {MODNAME} ... matches any version -# {MODNAME}>={VERSION} ... at least version is required -# {MODNAME}={VERSION} ... exactly version is required -# {MODNAME}<={VERSION} ... modules must not be newer than -# -# Examples -# pkg_check_modules (GLIB2 glib-2.0) -# -# pkg_check_modules (GLIB2 glib-2.0>=2.10) -# requires at least version 2.10 of glib2 and defines e.g. -# GLIB2_VERSION=2.10.3 -# -# pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0) -# requires both glib2 and gtk2, and defines e.g. -# FOO_glib-2.0_VERSION=2.10.3 -# FOO_gtk+-2.0_VERSION=2.8.20 -# -# pkg_check_modules (XRENDER REQUIRED xrender) -# defines e.g.: -# XRENDER_LIBRARIES=Xrender;X11 -# XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp -# -# pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) - - -# Copyright (C) 2006 Enrico Scholz -# -# Redistribution and use, with or without modification, are permitted -# provided that the following conditions are met: -# -# 1. Redistributions must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# 2. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior -# written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -### Common stuff #### -set(PKG_CONFIG_VERSION 1) -set(PKG_CONFIG_FOUND 0) - -find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable") -mark_as_advanced(PKG_CONFIG_EXECUTABLE) - -if(PKG_CONFIG_EXECUTABLE) - set(PKG_CONFIG_FOUND 1) -endif(PKG_CONFIG_EXECUTABLE) - - -# Unsets the given variables -macro(_pkgconfig_unset var) - set(${var} "" CACHE INTERNAL "") -endmacro(_pkgconfig_unset) - -macro(_pkgconfig_set var value) - set(${var} ${value} CACHE INTERNAL "") -endmacro(_pkgconfig_set) - -# Invokes pkgconfig, cleans up the result and sets variables -macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp) - set(_pkgconfig_invoke_result) - - execute_process( - COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist} - OUTPUT_VARIABLE _pkgconfig_invoke_result - RESULT_VARIABLE _pkgconfig_failed) - - if (_pkgconfig_failed) - set(_pkgconfig_${_varname} "") - _pkgconfig_unset(${_prefix}_${_varname}) - else(_pkgconfig_failed) - string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") - string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") - - if (NOT ${_regexp} STREQUAL "") - string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") - endif(NOT ${_regexp} STREQUAL "") - - separate_arguments(_pkgconfig_invoke_result) - - #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}") - set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result}) - _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}") - endif(_pkgconfig_failed) -endmacro(_pkgconfig_invoke) - -# Invokes pkgconfig two times; once without '--static' and once with -# '--static' -macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) - _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN}) - _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN}) -endmacro(_pkgconfig_invoke_dyn) - -# Splits given arguments into options and a package list -macro(_pkgconfig_parse_options _result _is_req) - set(${_is_req} 0) - - foreach(_pkg ${ARGN}) - if (_pkg STREQUAL "REQUIRED") - set(${_is_req} 1) - endif (_pkg STREQUAL "REQUIRED") - endforeach(_pkg ${ARGN}) - - set(${_result} ${ARGN}) - list(REMOVE_ITEM ${_result} "REQUIRED") -endmacro(_pkgconfig_parse_options) - -### -macro(_pkg_check_modules_internal _is_required _is_silent _prefix) - _pkgconfig_unset(${_prefix}_FOUND) - _pkgconfig_unset(${_prefix}_VERSION) - _pkgconfig_unset(${_prefix}_PREFIX) - _pkgconfig_unset(${_prefix}_INCLUDEDIR) - _pkgconfig_unset(${_prefix}_LIBDIR) - _pkgconfig_unset(${_prefix}_LIBS) - _pkgconfig_unset(${_prefix}_LIBS_L) - _pkgconfig_unset(${_prefix}_LIBS_PATHS) - _pkgconfig_unset(${_prefix}_LIBS_OTHER) - _pkgconfig_unset(${_prefix}_CFLAGS) - _pkgconfig_unset(${_prefix}_CFLAGS_I) - _pkgconfig_unset(${_prefix}_CFLAGS_OTHER) - _pkgconfig_unset(${_prefix}_STATIC_LIBDIR) - _pkgconfig_unset(${_prefix}_STATIC_LIBS) - _pkgconfig_unset(${_prefix}_STATIC_LIBS_L) - _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS) - _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER) - _pkgconfig_unset(${_prefix}_STATIC_CFLAGS) - _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I) - _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER) - - # create a better addressable variable of the modules and calculate its size - set(_pkg_check_modules_list ${ARGN}) - list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt) - - if(PKG_CONFIG_EXECUTABLE) - # give out status message telling checked module - if (NOT ${_is_silent}) - if (_pkg_check_modules_cnt EQUAL 1) - message(STATUS "checking for module '${_pkg_check_modules_list}'") - else(_pkg_check_modules_cnt EQUAL 1) - message(STATUS "checking for modules '${_pkg_check_modules_list}'") - endif(_pkg_check_modules_cnt EQUAL 1) - endif(NOT ${_is_silent}) - - set(_pkg_check_modules_packages) - set(_pkg_check_modules_failed) - - # iterate through module list and check whether they exist and match the required version - foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list}) - set(_pkg_check_modules_exist_query) - - # check whether version is given - if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") - string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") - string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}") - string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}") - else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") - set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") - set(_pkg_check_modules_pkg_op) - set(_pkg_check_modules_pkg_ver) - endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") - - # handle the operands - if (_pkg_check_modules_pkg_op STREQUAL ">=") - list(APPEND _pkg_check_modules_exist_query --atleast-version) - endif(_pkg_check_modules_pkg_op STREQUAL ">=") - - if (_pkg_check_modules_pkg_op STREQUAL "=") - list(APPEND _pkg_check_modules_exist_query --exact-version) - endif(_pkg_check_modules_pkg_op STREQUAL "=") - - if (_pkg_check_modules_pkg_op STREQUAL "<=") - list(APPEND _pkg_check_modules_exist_query --max-version) - endif(_pkg_check_modules_pkg_op STREQUAL "<=") - - # create the final query which is of the format: - # * --atleast-version - # * --exact-version - # * --max-version - # * --exists - if (_pkg_check_modules_pkg_op) - list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}") - else(_pkg_check_modules_pkg_op) - list(APPEND _pkg_check_modules_exist_query --exists) - endif(_pkg_check_modules_pkg_op) - - _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION) - _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX) - _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR) - _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR) - - list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}") - list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") - - # execute the query - execute_process( - COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query} - RESULT_VARIABLE _pkgconfig_retval) - - # evaluate result and tell failures - if (_pkgconfig_retval) - if(NOT ${_is_silent}) - message(STATUS " package '${_pkg_check_modules_pkg}' not found") - endif(NOT ${_is_silent}) - - set(_pkg_check_modules_failed 1) - endif(_pkgconfig_retval) - endforeach(_pkg_check_modules_pkg) - - if(_pkg_check_modules_failed) - # fail when requested - if (${_is_required}) - message(SEND_ERROR "A required package was not found") - endif (${_is_required}) - else(_pkg_check_modules_failed) - # when we are here, we checked whether requested modules - # exist. Now, go through them and set variables - - _pkgconfig_set(${_prefix}_FOUND 1) - list(LENGTH _pkg_check_modules_packages pkg_count) - - # iterate through all modules again and set individual variables - foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages}) - # handle case when there is only one package required - if (pkg_count EQUAL 1) - set(_pkg_check_prefix "${_prefix}") - else(pkg_count EQUAL 1) - set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") - endif(pkg_count EQUAL 1) - - _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) - _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) - _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) - _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) - - message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") - endforeach(_pkg_check_modules_pkg) - - # set variables which are combined for multiple modules - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l ) - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L ) - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs ) - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other ) - - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I ) - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) - _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) - endif(_pkg_check_modules_failed) - else(PKG_CONFIG_EXECUTABLE) - if (${_is_required}) - message(SEND_ERROR "pkg-config tool not found") - endif (${_is_required}) - endif(PKG_CONFIG_EXECUTABLE) -endmacro(_pkg_check_modules_internal) - -### -### User visible macros start here -### - -### -macro(pkg_check_modules _prefix _module0) - # check cached value - if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) - _pkgconfig_parse_options (_pkg_modules _pkg_is_required "${_module0}" ${ARGN}) - _pkg_check_modules_internal("${_pkg_is_required}" 0 "${_prefix}" ${_pkg_modules}) - - _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) - endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) -endmacro(pkg_check_modules) - -### -macro(pkg_search_module _prefix _module0) - # check cached value - if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) - set(_pkg_modules_found 0) - _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required "${_module0}" ${ARGN}) - - message(STATUS "checking for one of the modules '${_pkg_modules_alt}'") - - # iterate through all modules and stop at the first working one. - foreach(_pkg_alt ${_pkg_modules_alt}) - if(NOT _pkg_modules_found) - _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}") - endif(NOT _pkg_modules_found) - - if (${_prefix}_FOUND) - set(_pkg_modules_found 1) - endif(${_prefix}_FOUND) - endforeach(_pkg_alt) - - if (NOT ${_prefix}_FOUND) - if(${_pkg_is_required}) - message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") - endif(${_pkg_is_required}) - endif(NOT ${_prefix}_FOUND) - - _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) - endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) -endmacro(pkg_search_module) - -### Local Variables: -### mode: cmake -### End: diff --git a/cmake/OpenCVFindXimea.cmake b/cmake/OpenCVFindXimea.cmake deleted file mode 100644 index 5f85a13..0000000 --- a/cmake/OpenCVFindXimea.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# - Find XIMEA -# This module finds if XIMEA Software package is installed -# and determines where the binaries and header files are. -# This code sets the following variables: -# -# XIMEA_FOUND - True if XIMEA API found -# XIMEA_PATH: - Path to the XIMEA API folder -# XIMEA_LIBRARY_DIR - XIMEA libraries folder -# -# Created: 5 Aug 2011 by Marian Zajko (marian.zajko@ximea.com) -# Updated: 25 June 2012 by Igor Kuzmin (parafin@ximea.com) -# Updated: 22 October 2012 by Marian Zajko (marian.zajko@ximea.com) -# - -set(XIMEA_FOUND) -set(XIMEA_PATH) -set(XIMEA_LIBRARY_DIR) - -if(WIN32) - # Try to find the XIMEA API path in registry. - GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE) - - if(EXISTS ${XIMEA_PATH}) - set(XIMEA_FOUND 1) - # set LIB folders - if(X86_64) - set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x64") - else() - set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}/x86") - endif() - else() - set(XIMEA_FOUND 0) - endif() -else() - if(EXISTS /opt/XIMEA) - set(XIMEA_FOUND 1) - # set folders - set(XIMEA_PATH /opt/XIMEA/include) - else() - set(XIMEA_FOUND 0) - endif() -endif() - -mark_as_advanced(FORCE XIMEA_FOUND) -mark_as_advanced(FORCE XIMEA_PATH) -mark_as_advanced(FORCE XIMEA_LIBRARY_DIR) diff --git a/cmake/OpenCVGenAndroidMK.cmake b/cmake/OpenCVGenAndroidMK.cmake deleted file mode 100644 index 2622d2a..0000000 --- a/cmake/OpenCVGenAndroidMK.cmake +++ /dev/null @@ -1,146 +0,0 @@ -if(ANDROID) - # -------------------------------------------------------------------------------------------- - # Installation for Android ndk-build makefile: OpenCV.mk - # Part 1/2: ${BIN_DIR}/OpenCV.mk -> For use *without* "make install" - # Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install" - # ------------------------------------------------------------------------------------------- - - # build type - if(BUILD_SHARED_LIBS) - set(OPENCV_LIBTYPE_CONFIGMAKE "SHARED") - else() - set(OPENCV_LIBTYPE_CONFIGMAKE "STATIC") - endif() - - if(BUILD_FAT_JAVA_LIB) - set(OPENCV_LIBTYPE_CONFIGMAKE "SHARED") - set(OPENCV_STATIC_LIBTYPE_CONFIGMAKE "STATIC") - else() - set(OPENCV_STATIC_LIBTYPE_CONFIGMAKE ${OPENCV_LIBTYPE_CONFIGMAKE}) - endif() - - # setup lists of camera libs - foreach(abi ARMEABI ARMEABI_V7A X86 MIPS) - ANDROID_GET_ABI_RAWNAME(${abi} ndkabi) - if(BUILD_ANDROID_CAMERA_WRAPPER) - if(ndkabi STREQUAL ANDROID_NDK_ABI_NAME) - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "native_camera_r${ANDROID_VERSION}") - else() - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "") - endif() - elseif(HAVE_opencv_androidcamera) - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "") - file(GLOB OPENCV_CAMERA_LIBS "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ndkabi}/libnative_camera_r*.so") - if(OPENCV_CAMERA_LIBS) - list(SORT OPENCV_CAMERA_LIBS) - endif() - foreach(cam_lib ${OPENCV_CAMERA_LIBS}) - get_filename_component(cam_lib "${cam_lib}" NAME) - string(REGEX REPLACE "lib(native_camera_r[0-9]+\\.[0-9]+\\.[0-9]+)\\.so" "\\1" cam_lib "${cam_lib}") - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "${OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE} ${cam_lib}") - endforeach() - endif() - endforeach() - - # build the list of opencv libs and dependencies for all modules - set(OPENCV_MODULES_CONFIGMAKE "") - set(OPENCV_HAVE_GPU_MODULE_CONFIGMAKE "off") - set(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "") - set(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE "") - foreach(m ${OPENCV_MODULES_PUBLIC}) - list(INSERT OPENCV_MODULES_CONFIGMAKE 0 ${${m}_MODULE_DEPS_${ocv_optkind}} ${m}) - if(${m}_EXTRA_DEPS_${ocv_optkind}) - list(INSERT OPENCV_EXTRA_COMPONENTS_CONFIGMAKE 0 ${${m}_EXTRA_DEPS_${ocv_optkind}}) - endif() - endforeach() - - # remove CUDA runtime and NPP from regular deps - # it can be added separately if needed. - ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "cusparse") - ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "cufft") - ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "cublas") - ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "npp") - ocv_list_filterout(OPENCV_EXTRA_COMPONENTS_CONFIGMAKE "cudart") - - if(HAVE_CUDA) - # CUDA runtime libraries and are required always - set(culibs ${CUDA_LIBRARIES}) - - # right now NPP is requared always too - list(INSERT culibs 0 ${CUDA_npp_LIBRARY}) - - if(HAVE_CUFFT) - list(INSERT culibs 0 ${CUDA_cufft_LIBRARY}) - endif() - - if(HAVE_CUBLAS) - list(INSERT culibs 0 ${CUDA_cublas_LIBRARY}) - endif() - endif() - - ocv_convert_to_lib_name(CUDA_RUNTIME_LIBS_CONFIGMAKE ${culibs}) - - # split 3rdparty libs and modules - foreach(mod ${OPENCV_MODULES_CONFIGMAKE}) - if(NOT mod MATCHES "^opencv_.+$") - list(INSERT OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE 0 ${mod}) - endif() - endforeach() - if(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE) - list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE}) - endif() - - if(ENABLE_DYNAMIC_CUDA) - set(OPENCV_DYNAMICUDA_MODULE_CONFIGMAKE "dynamicuda") - endif() - - # GPU module enabled separately - list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE "opencv_gpu") - list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE "opencv_dynamicuda") - - if(HAVE_opencv_gpu) - set(OPENCV_HAVE_GPU_MODULE_CONFIGMAKE "on") - endif() - - # convert CMake lists to makefile literals - foreach(lst OPENCV_MODULES_CONFIGMAKE OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE OPENCV_EXTRA_COMPONENTS_CONFIGMAKE) - ocv_list_unique(${lst}) - ocv_list_reverse(${lst}) - string(REPLACE ";" " " ${lst} "${${lst}}") - endforeach() - string(REPLACE "opencv_" "" OPENCV_MODULES_CONFIGMAKE "${OPENCV_MODULES_CONFIGMAKE}") - string(REPLACE ";" " " CUDA_RUNTIME_LIBS_CONFIGMAKE "${CUDA_RUNTIME_LIBS_CONFIGMAKE}") - - # prepare 3rd-party component list without TBB for armeabi and mips platforms. TBB is useless there. - set(OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE}) - foreach(mod ${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB}) - string(REPLACE "tbb" "" OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB "${OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB}") - endforeach() - - if(BUILD_FAT_JAVA_LIB) - set(OPENCV_LIBS_CONFIGMAKE java) - else() - set(OPENCV_LIBS_CONFIGMAKE "${OPENCV_MODULES_CONFIGMAKE}") - endif() - - # ------------------------------------------------------------------------------------------- - # Part 1/2: ${BIN_DIR}/OpenCV.mk -> For use *without* "make install" - # ------------------------------------------------------------------------------------------- - set(OPENCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"") - set(OPENCV_BASE_INCLUDE_DIR_CONFIGCMAKE "\"${OpenCV_SOURCE_DIR}\"") - set(OPENCV_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/lib/\$(OPENCV_TARGET_ARCH_ABI)") - set(OPENCV_3RDPARTY_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/3rdparty/lib/\$(OPENCV_TARGET_ARCH_ABI)") - - configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" @ONLY) - - # ------------------------------------------------------------------------------------------- - # Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install" - # ------------------------------------------------------------------------------------------- - set(OPENCV_INCLUDE_DIRS_CONFIGCMAKE "\"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/include/opencv\" \"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/include\"") - set(OPENCV_BASE_INCLUDE_DIR_CONFIGCMAKE "") - set(OPENCV_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../libs/\$(OPENCV_TARGET_ARCH_ABI)") - set(OPENCV_3RDPARTY_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../3rdparty/libs/\$(OPENCV_TARGET_ARCH_ABI)") - - configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" @ONLY) - install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk DESTINATION ${OPENCV_CONFIG_INSTALL_PATH} COMPONENT dev) -endif(ANDROID) diff --git a/cmake/OpenCVGenConfig.cmake b/cmake/OpenCVGenConfig.cmake deleted file mode 100644 index cdf418e..0000000 --- a/cmake/OpenCVGenConfig.cmake +++ /dev/null @@ -1,145 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Installation for CMake Module: OpenCVConfig.cmake -# Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install" -# Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install" -# Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages -# ------------------------------------------------------------------------------------------- - -if(INSTALL_TO_MANGLED_PATHS) - set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE TRUE) -else() - set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE FALSE) -endif() - -if(NOT OpenCV_CUDA_CC) - set(OpenCV_CUDA_CC_CONFIGCMAKE "\"\"") - set(OpenCV_CUDA_VERSION "") -else() - set(OpenCV_CUDA_CC_CONFIGCMAKE "${OpenCV_CUDA_CC}") - set(OpenCV_CUDA_VERSION ${CUDA_VERSION_STRING}) -endif() - -if(NOT ANDROID_NATIVE_API_LEVEL) - set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE 0) -else() - set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE "${ANDROID_NATIVE_API_LEVEL}") -endif() - -if(CMAKE_GENERATOR MATCHES "Visual" OR CMAKE_GENERATOR MATCHES "Xcode") - set(OpenCV_ADD_DEBUG_RELEASE_CONFIGCMAKE TRUE) -else() - set(OpenCV_ADD_DEBUG_RELEASE_CONFIGCMAKE FALSE) -endif() - - - -if(WIN32) - if(MINGW) - set(OPENCV_LINK_LIBRARY_SUFFIX ".dll.a") - else() - set(OPENCV_LINK_LIBRARY_SUFFIX ".lib") - endif() -endif() - -#build list of modules available for the OpenCV user -set(OpenCV_LIB_COMPONENTS "") -foreach(m ${OPENCV_MODULES_PUBLIC}) - list(INSERT OpenCV_LIB_COMPONENTS 0 ${${m}_MODULE_DEPS_OPT} ${m}) -endforeach() -ocv_list_unique(OpenCV_LIB_COMPONENTS) -set(OPENCV_MODULES_CONFIGCMAKE ${OpenCV_LIB_COMPONENTS}) -ocv_list_filterout(OpenCV_LIB_COMPONENTS "^opencv_") -if(OpenCV_LIB_COMPONENTS) - list(REMOVE_ITEM OPENCV_MODULES_CONFIGCMAKE ${OpenCV_LIB_COMPONENTS}) -endif() - -if(BUILD_FAT_JAVA_LIB AND HAVE_opencv_java) - list(APPEND OPENCV_MODULES_CONFIGCMAKE opencv_java) -endif() - -# ------------------------------------------------------------------------------------------- -# Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install" -# ------------------------------------------------------------------------------------------- -set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"") - -set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "") -foreach(m ${OPENCV_MODULES_BUILD}) - if(EXISTS "${OPENCV_MODULE_${m}_LOCATION}/include") - list(APPEND OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "${OPENCV_MODULE_${m}_LOCATION}/include") - endif() -endforeach() - -if(ANDROID AND NOT BUILD_SHARED_LIBS AND HAVE_TBB) - #export TBB headers location because static linkage of TBB might be troublesome if application wants to use TBB itself - list(APPEND OpenCV2_INCLUDE_DIRS_CONFIGCMAKE ${TBB_INCLUDE_DIRS}) -endif() - -set(modules_file_suffix "") -if(ANDROID) - # the REPLACE here is needed, because OpenCVModules_armeabi.cmake includes - # OpenCVModules_armeabi-*.cmake, which would match OpenCVModules_armeabi-v7a*.cmake. - string(REPLACE - _ modules_file_suffix "_${ANDROID_NDK_ABI_NAME}") -endif() - -export(TARGETS ${OpenCVModules_TARGETS} FILE "${CMAKE_BINARY_DIR}/OpenCVModules${modules_file_suffix}.cmake") - -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" @ONLY) -#support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work. -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" @ONLY) - -# -------------------------------------------------------------------------------------------- -# Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install" -# ------------------------------------------------------------------------------------------- -set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}/opencv" "\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}\"") - -set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"") -if(INSTALL_TO_MANGLED_PATHS) - string(REPLACE "OpenCV" "OpenCV-${OPENCV_VERSION}" OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE "${OPENCV_3P_LIB_INSTALL_PATH}") - set(OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE}\"") -endif() - -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" @ONLY) -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" @ONLY) - -if(UNIX) # ANDROID configuration is created here also - #http://www.vtk.org/Wiki/CMake/Tutorials/Packaging reference - # For a command "find_package( [major[.minor]] [EXACT] [REQUIRED|QUIET])" - # cmake will look in the following dir on unix: - # /(share|lib)/cmake/*/ (U) - # /(share|lib)/*/ (U) - # /(share|lib)/*/(cmake|CMake)/ (U) - if(INSTALL_TO_MANGLED_PATHS) - install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/ COMPONENT dev) - install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/ COMPONENT dev) - install(EXPORT OpenCVModules DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}-${OPENCV_VERSION}/ FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev) - else() - install(FILES "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev) - install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev) - install(EXPORT OpenCVModules DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev) - endif() -endif() - -if(ANDROID) - install(FILES "${OpenCV_SOURCE_DIR}/platforms/android/android.toolchain.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev) -endif() - -# -------------------------------------------------------------------------------------------- -# Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages -# -------------------------------------------------------------------------------------------- -if(WIN32) - set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/include\" \"\${OpenCV_CONFIG_PATH}/include/opencv\"") - set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"") - - exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL) - configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" @ONLY) - configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" @ONLY) - if(BUILD_SHARED_LIBS) - install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib" COMPONENT dev) - install(EXPORT OpenCVModules DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib" FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev) - else() - install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" COMPONENT dev) - install(EXPORT OpenCVModules DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev) - endif() - install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}" COMPONENT dev) - install(FILES "${OpenCV_SOURCE_DIR}/cmake/OpenCVConfig.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/" COMPONENT dev) -endif() diff --git a/cmake/OpenCVGenHeaders.cmake b/cmake/OpenCVGenHeaders.cmake deleted file mode 100644 index c892a92..0000000 --- a/cmake/OpenCVGenHeaders.cmake +++ /dev/null @@ -1,26 +0,0 @@ -# platform-specific config file -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/cvconfig.h.in" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h") - -# ---------------------------------------------------------------------------- -# opencv_modules.hpp based on actual modules list -# ---------------------------------------------------------------------------- -set(OPENCV_MODULE_DEFINITIONS_CONFIGMAKE "") - -set(OPENCV_MOD_LIST ${OPENCV_MODULES_PUBLIC}) -ocv_list_sort(OPENCV_MOD_LIST) -foreach(m ${OPENCV_MOD_LIST}) - string(TOUPPER "${m}" m) - set(OPENCV_MODULE_DEFINITIONS_CONFIGMAKE "${OPENCV_MODULE_DEFINITIONS_CONFIGMAKE}#define HAVE_${m}\n") -endforeach() - -set(OPENCV_MODULE_DEFINITIONS_CONFIGMAKE "${OPENCV_MODULE_DEFINITIONS_CONFIGMAKE}\n") - -#set(OPENCV_MOD_LIST ${OPENCV_MODULES_DISABLED_USER} ${OPENCV_MODULES_DISABLED_AUTO} ${OPENCV_MODULES_DISABLED_FORCE}) -#ocv_list_sort(OPENCV_MOD_LIST) -#foreach(m ${OPENCV_MOD_LIST}) -# string(TOUPPER "${m}" m) -# set(OPENCV_MODULE_DEFINITIONS_CONFIGMAKE "${OPENCV_MODULE_DEFINITIONS_CONFIGMAKE}#undef HAVE_${m}\n") -#endforeach() - -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/opencv_modules.hpp.in" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp") -install(FILES "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp" DESTINATION ${OPENCV_INCLUDE_INSTALL_PATH}/opencv2 COMPONENT dev) diff --git a/cmake/OpenCVGenInfoPlist.cmake b/cmake/OpenCVGenInfoPlist.cmake deleted file mode 100644 index 97c674c..0000000 --- a/cmake/OpenCVGenInfoPlist.cmake +++ /dev/null @@ -1,4 +0,0 @@ -if(IOS) - configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.plist.in" - "${CMAKE_BINARY_DIR}/ios/Info.plist") -endif() diff --git a/cmake/OpenCVGenPkgconfig.cmake b/cmake/OpenCVGenPkgconfig.cmake deleted file mode 100644 index ad0fdc2..0000000 --- a/cmake/OpenCVGenPkgconfig.cmake +++ /dev/null @@ -1,90 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# according to man pkg-config -# The package name specified on the pkg-config command line is defined to -# be the name of the metadata file, minus the .pc extension. If a library -# can install multiple versions simultaneously, it must give each version -# its own name (for example, GTK 1.2 might have the package name "gtk+" -# while GTK 2.0 has "gtk+-2.0"). -# -# ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install" -# ------------------------------------------------------------------------------------------- -set(prefix "${CMAKE_INSTALL_PREFIX}") -set(exec_prefix "\${prefix}") -set(libdir "\${prefix}/${OPENCV_LIB_INSTALL_PATH}") #TODO: need link paths for OpenCV_EXTRA_COMPONENTS -set(includedir "\${prefix}/${OPENCV_INCLUDE_INSTALL_PATH}") -MESSAGE(STATUS "share lib path: ${libdir}") - -if(CMAKE_BUILD_TYPE MATCHES "Release") - set(ocv_optkind OPT) -else() - set(ocv_optkind DBG) -endif() - -#build the list of opencv libs and dependencies for all modules -set(OpenCV_LIB_COMPONENTS "") -set(OpenCV_EXTRA_COMPONENTS "") -foreach(m ${OPENCV_MODULES_PUBLIC}) - list(INSERT OpenCV_LIB_COMPONENTS 0 ${${m}_MODULE_DEPS_${ocv_optkind}} ${m}) - if(${m}_EXTRA_DEPS_${ocv_optkind}) - list(INSERT OpenCV_EXTRA_COMPONENTS 0 ${${m}_EXTRA_DEPS_${ocv_optkind}}) - endif() -endforeach() - -ocv_list_unique(OpenCV_LIB_COMPONENTS) -ocv_list_unique(OpenCV_EXTRA_COMPONENTS) -ocv_list_reverse(OpenCV_LIB_COMPONENTS) -ocv_list_reverse(OpenCV_EXTRA_COMPONENTS) - -#build the list of components -set(OpenCV_LIB_COMPONENTS_ "-L\${libdir}") -foreach(CVLib ${OpenCV_LIB_COMPONENTS}) - get_target_property(libpath ${CVLib} LOCATION_${CMAKE_BUILD_TYPE}) - get_filename_component(libname "${libpath}" NAME) - - if(INSTALL_TO_MANGLED_PATHS) - set(libname "${libname}.${OPENCV_VERSION}") - endif() - - #need better solution.... - if(libpath MATCHES "3rdparty") - set(installDir "share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}") - else() - set(installDir "${OPENCV_LIB_INSTALL_PATH}") - endif() - - string(REPLACE "libopencv" "-lopencv" libname "${libname}") - string(REPLACE ".a" "" libname "${libname}") - string(REPLACE ".so" "" libname "${libname}") - string(REPLACE ".dylib" "" libname "${libname}") - set(OpenCV_LIB_COMPONENTS_ "${OpenCV_LIB_COMPONENTS_} ${libname}") -endforeach() - -# add extra dependencies required for OpenCV -set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_}) -if(OpenCV_EXTRA_COMPONENTS) - foreach(extra_component ${OpenCV_EXTRA_COMPONENTS}) - - if(extra_component MATCHES "^-[lL]" OR extra_component MATCHES "[\\/]") - set(maybe_l_prefix "") - else() - set(maybe_l_prefix "-l") - endif() - - set(OpenCV_LIB_COMPONENTS "${OpenCV_LIB_COMPONENTS} ${maybe_l_prefix}${extra_component}") - - endforeach() -endif() - -#generate the .pc file -if(INSTALL_TO_MANGLED_PATHS) - set(OPENCV_PC_FILE_NAME "opencv-${OPENCV_VERSION}.pc") -else() - set(OPENCV_PC_FILE_NAME opencv.pc) -endif() -configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/opencv-XXX.pc.in" - "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" - @ONLY) - -if(UNIX AND NOT ANDROID) - install(FILES ${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME} DESTINATION ${OPENCV_LIB_INSTALL_PATH}/pkgconfig COMPONENT dev) -endif() diff --git a/cmake/OpenCVLegacyOptions.cmake b/cmake/OpenCVLegacyOptions.cmake deleted file mode 100644 index d74bd6e..0000000 --- a/cmake/OpenCVLegacyOptions.cmake +++ /dev/null @@ -1,24 +0,0 @@ -macro(ocv_legacy_option old superseded_by) - if(DEFINED ${old}) - if(ARGV2) - set(${superseded_by} ${${old}} CACHE ${ARGV2} "Set via depricated ${old}" FORCE) - else() - set(${superseded_by} ${${old}} CACHE BOOL "Set via depricated ${old}" FORCE) - endif() - unset(${old} CACHE) - endif() -endmacro() - -ocv_legacy_option(BUILD_NEW_PYTHON_SUPPORT BUILD_opencv_python) -ocv_legacy_option(BUILD_JAVA_SUPPORT BUILD_opencv_java) -ocv_legacy_option(WITH_ANDROID_CAMERA BUILD_opencv_androidcamera) -ocv_legacy_option(WITH_VIDEOINPUT WITH_DSHOW) - -if(DEFINED OPENCV_BUILD_3RDPARTY_LIBS) - set(BUILD_ZLIB ${OPENCV_BUILD_3RDPARTY_LIBS} CACHE BOOL "Set via depricated OPENCV_BUILD_3RDPARTY_LIBS" FORCE) - set(BUILD_TIFF ${OPENCV_BUILD_3RDPARTY_LIBS} CACHE BOOL "Set via depricated OPENCV_BUILD_3RDPARTY_LIBS" FORCE) - set(BUILD_JASPER ${OPENCV_BUILD_3RDPARTY_LIBS} CACHE BOOL "Set via depricated OPENCV_BUILD_3RDPARTY_LIBS" FORCE) - set(BUILD_JPEG ${OPENCV_BUILD_3RDPARTY_LIBS} CACHE BOOL "Set via depricated OPENCV_BUILD_3RDPARTY_LIBS" FORCE) - set(BUILD_PNG ${OPENCV_BUILD_3RDPARTY_LIBS} CACHE BOOL "Set via depricated OPENCV_BUILD_3RDPARTY_LIBS" FORCE) - unset(OPENCV_BUILD_3RDPARTY_LIBS CACHE) -endif() diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake deleted file mode 100644 index 79e5086..0000000 --- a/cmake/OpenCVModule.cmake +++ /dev/null @@ -1,922 +0,0 @@ -# Local variables (set for each module): -# -# name - short name in lower case i.e. core -# the_module - full name in lower case i.e. opencv_core - -# Global variables: -# -# OPENCV_MODULE_${the_module}_LOCATION -# OPENCV_MODULE_${the_module}_DESCRIPTION -# OPENCV_MODULE_${the_module}_CLASS - PUBLIC|INTERNAL|BINDINGS -# OPENCV_MODULE_${the_module}_HEADERS -# OPENCV_MODULE_${the_module}_SOURCES -# OPENCV_MODULE_${the_module}_DEPS - final flattened set of module dependencies -# OPENCV_MODULE_${the_module}_DEPS_EXT - non-module dependencies -# OPENCV_MODULE_${the_module}_REQ_DEPS -# OPENCV_MODULE_${the_module}_OPT_DEPS -# OPENCV_MODULE_${the_module}_PRIVATE_REQ_DEPS -# OPENCV_MODULE_${the_module}_PRIVATE_OPT_DEPS -# HAVE_${the_module} - for fast check of module availability - -# To control the setup of the module you could also set: -# the_description - text to be used as current module description -# OPENCV_MODULE_TYPE - STATIC|SHARED - set to force override global settings for current module -# OPENCV_MODULE_IS_PART_OF_WORLD - ON|OFF (default ON) - should the module be added to the opencv_world? -# BUILD_${the_module}_INIT - ON|OFF (default ON) - initial value for BUILD_${the_module} - -# The verbose template for OpenCV module: -# -# ocv_add_module(modname ) -# ocv_glob_module_sources(([EXCLUDE_CUDA] ) -# or glob them manually and ocv_set_module_sources(...) -# ocv_module_include_directories() -# ocv_create_module() -# -# ocv_add_precompiled_headers(${the_module}) -# -# ocv_add_accuracy_tests() -# ocv_add_perf_tests() -# ocv_add_samples() -# -# -# If module have no "extra" then you can define it in one line: -# -# ocv_define_module(modname ) - -# clean flags for modules enabled on previous cmake run -# this is necessary to correctly handle modules removal -foreach(mod ${OPENCV_MODULES_BUILD} ${OPENCV_MODULES_DISABLED_USER} ${OPENCV_MODULES_DISABLED_AUTO} ${OPENCV_MODULES_DISABLED_FORCE}) - if(HAVE_${mod}) - unset(HAVE_${mod} CACHE) - endif() - unset(OPENCV_MODULE_${mod}_REQ_DEPS CACHE) - unset(OPENCV_MODULE_${mod}_OPT_DEPS CACHE) - unset(OPENCV_MODULE_${mod}_PRIVATE_REQ_DEPS CACHE) - unset(OPENCV_MODULE_${mod}_PRIVATE_OPT_DEPS CACHE) -endforeach() - -# clean modules info which needs to be recalculated -set(OPENCV_MODULES_PUBLIC "" CACHE INTERNAL "List of OpenCV modules marked for export") -set(OPENCV_MODULES_BUILD "" CACHE INTERNAL "List of OpenCV modules included into the build") -set(OPENCV_MODULES_DISABLED_USER "" CACHE INTERNAL "List of OpenCV modules explicitly disabled by user") -set(OPENCV_MODULES_DISABLED_AUTO "" CACHE INTERNAL "List of OpenCV modules implicitly disabled due to dependencies") -set(OPENCV_MODULES_DISABLED_FORCE "" CACHE INTERNAL "List of OpenCV modules which can not be build in current configuration") - -# adds dependencies to OpenCV module -# Usage: -# add_dependencies(opencv_ [REQUIRED] [] [OPTIONAL ]) -# Notes: -# * - can include full names of modules or full pathes to shared/static libraries or cmake targets -macro(ocv_add_dependencies full_modname) - #we don't clean the dependencies here to allow this macro several times for every module - foreach(d "REQUIRED" ${ARGN}) - if(d STREQUAL "REQUIRED") - set(__depsvar OPENCV_MODULE_${full_modname}_REQ_DEPS) - elseif(d STREQUAL "OPTIONAL") - set(__depsvar OPENCV_MODULE_${full_modname}_OPT_DEPS) - elseif(d STREQUAL "PRIVATE_REQUIRED") - set(__depsvar OPENCV_MODULE_${full_modname}_PRIVATE_REQ_DEPS) - elseif(d STREQUAL "PRIVATE_OPTIONAL") - set(__depsvar OPENCV_MODULE_${full_modname}_PRIVATE_OPT_DEPS) - else() - list(APPEND ${__depsvar} "${d}") - endif() - endforeach() - unset(__depsvar) - - ocv_list_unique(OPENCV_MODULE_${full_modname}_REQ_DEPS) - ocv_list_unique(OPENCV_MODULE_${full_modname}_OPT_DEPS) - ocv_list_unique(OPENCV_MODULE_${full_modname}_PRIVATE_REQ_DEPS) - ocv_list_unique(OPENCV_MODULE_${full_modname}_PRIVATE_OPT_DEPS) - - set(OPENCV_MODULE_${full_modname}_REQ_DEPS ${OPENCV_MODULE_${full_modname}_REQ_DEPS} - CACHE INTERNAL "Required dependencies of ${full_modname} module") - set(OPENCV_MODULE_${full_modname}_OPT_DEPS ${OPENCV_MODULE_${full_modname}_OPT_DEPS} - CACHE INTERNAL "Optional dependencies of ${full_modname} module") - set(OPENCV_MODULE_${full_modname}_PRIVATE_REQ_DEPS ${OPENCV_MODULE_${full_modname}_PRIVATE_REQ_DEPS} - CACHE INTERNAL "Required private dependencies of ${full_modname} module") - set(OPENCV_MODULE_${full_modname}_PRIVATE_OPT_DEPS ${OPENCV_MODULE_${full_modname}_PRIVATE_OPT_DEPS} - CACHE INTERNAL "Optional private dependencies of ${full_modname} module") -endmacro() - -# declare new OpenCV module in current folder -# Usage: -# ocv_add_module( [INTERNAL|BINDINGS] [REQUIRED] [] [OPTIONAL ]) -# Example: -# ocv_add_module(yaom INTERNAL opencv_core opencv_highgui opencv_flann OPTIONAL opencv_gpu) -macro(ocv_add_module _name) - string(TOLOWER "${_name}" name) - string(REGEX REPLACE "^opencv_" "" ${name} "${name}") - set(the_module opencv_${name}) - - # the first pass - collect modules info, the second pass - create targets - if(OPENCV_INITIAL_PASS) - #guard agains redefinition - if(";${OPENCV_MODULES_BUILD};${OPENCV_MODULES_DISABLED_USER};" MATCHES ";${the_module};") - message(FATAL_ERROR "Redefinition of the ${the_module} module. - at: ${CMAKE_CURRENT_SOURCE_DIR} - previously defined at: ${OPENCV_MODULE_${the_module}_LOCATION} -") - endif() - - if(NOT DEFINED the_description) - set(the_description "The ${name} OpenCV module") - endif() - - if(NOT DEFINED BUILD_${the_module}_INIT) - set(BUILD_${the_module}_INIT ON) - endif() - - # create option to enable/disable this module - option(BUILD_${the_module} "Include ${the_module} module into the OpenCV build" ${BUILD_${the_module}_INIT}) - - # remember the module details - set(OPENCV_MODULE_${the_module}_DESCRIPTION "${the_description}" CACHE INTERNAL "Brief description of ${the_module} module") - set(OPENCV_MODULE_${the_module}_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "Location of ${the_module} module sources") - - # parse list of dependencies - if("${ARGV1}" STREQUAL "INTERNAL" OR "${ARGV1}" STREQUAL "BINDINGS") - set(OPENCV_MODULE_${the_module}_CLASS "${ARGV1}" CACHE INTERNAL "The category of the module") - set(__ocv_argn__ ${ARGN}) - list(REMOVE_AT __ocv_argn__ 0) - ocv_add_dependencies(${the_module} ${__ocv_argn__}) - unset(__ocv_argn__) - else() - set(OPENCV_MODULE_${the_module}_CLASS "PUBLIC" CACHE INTERNAL "The category of the module") - ocv_add_dependencies(${the_module} ${ARGN}) - if(BUILD_${the_module}) - set(OPENCV_MODULES_PUBLIC ${OPENCV_MODULES_PUBLIC} "${the_module}" CACHE INTERNAL "List of OpenCV modules marked for export") - endif() - endif() - - # add self to the world dependencies - if(NOT DEFINED OPENCV_MODULE_IS_PART_OF_WORLD AND NOT OPENCV_MODULE_${the_module}_CLASS STREQUAL "BINDINGS" OR OPENCV_MODULE_IS_PART_OF_WORLD) - ocv_add_dependencies(opencv_world OPTIONAL ${the_module}) - endif() - - if(BUILD_${the_module}) - set(OPENCV_MODULES_BUILD ${OPENCV_MODULES_BUILD} "${the_module}" CACHE INTERNAL "List of OpenCV modules included into the build") - else() - set(OPENCV_MODULES_DISABLED_USER ${OPENCV_MODULES_DISABLED_USER} "${the_module}" CACHE INTERNAL "List of OpenCV modules explicitly disabled by user") - endif() - - # TODO: add submodules if any - - # stop processing of current file - return() - else(OPENCV_INITIAL_PASS) - if(NOT BUILD_${the_module}) - return() # extra protection from redefinition - endif() - project(${the_module}) - endif(OPENCV_INITIAL_PASS) -endmacro() - -# excludes module from current configuration -macro(ocv_module_disable module) - set(__modname ${module}) - if(NOT __modname MATCHES "^opencv_") - set(__modname opencv_${module}) - endif() - list(APPEND OPENCV_MODULES_DISABLED_FORCE "${__modname}") - set(HAVE_${__modname} OFF CACHE INTERNAL "Module ${__modname} can not be built in current configuration") - set(OPENCV_MODULE_${__modname}_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "Location of ${__modname} module sources") - set(OPENCV_MODULES_DISABLED_FORCE "${OPENCV_MODULES_DISABLED_FORCE}" CACHE INTERNAL "List of OpenCV modules which can not be build in current configuration") - if(BUILD_${__modname}) - # touch variable controlling build of the module to suppress "unused variable" CMake warning - endif() - unset(__modname) - return() # leave the current folder -endmacro() - - -# collect modules from specified directories -# NB: must be called only once! -macro(ocv_glob_modules) - if(DEFINED OPENCV_INITIAL_PASS) - message(FATAL_ERROR "OpenCV has already loaded its modules. Calling ocv_glob_modules second time is not allowed.") - endif() - set(__directories_observed "") - - # collect modules - set(OPENCV_INITIAL_PASS ON) - foreach(__path ${ARGN}) - get_filename_component(__path "${__path}" ABSOLUTE) - - list(FIND __directories_observed "${__path}" __pathIdx) - if(__pathIdx GREATER -1) - message(FATAL_ERROR "The directory ${__path} is observed for OpenCV modules second time.") - endif() - list(APPEND __directories_observed "${__path}") - - file(GLOB __ocvmodules RELATIVE "${__path}" "${__path}/*") - if(__ocvmodules) - list(SORT __ocvmodules) - foreach(mod ${__ocvmodules}) - get_filename_component(__modpath "${__path}/${mod}" ABSOLUTE) - if(EXISTS "${__modpath}/CMakeLists.txt") - - list(FIND __directories_observed "${__modpath}" __pathIdx) - if(__pathIdx GREATER -1) - message(FATAL_ERROR "The module from ${__modpath} is already loaded.") - endif() - list(APPEND __directories_observed "${__modpath}") - - if(OCV_MODULE_RELOCATE_ON_INITIAL_PASS) - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}") - file(COPY "${__modpath}/CMakeLists.txt" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}") - add_subdirectory("${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}" "${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}") - if("${OPENCV_MODULE_opencv_${mod}_LOCATION}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}") - set(OPENCV_MODULE_opencv_${mod}_LOCATION "${__modpath}" CACHE PATH "" FORCE) - endif() - else() - add_subdirectory("${__modpath}" "${CMAKE_CURRENT_BINARY_DIR}/${mod}/.${mod}") - endif() - endif() - endforeach() - endif() - endforeach() - ocv_clear_vars(__ocvmodules __directories_observed __path __modpath __pathIdx) - - # resolve dependencies - __ocv_resolve_dependencies() - - # create modules - set(OPENCV_INITIAL_PASS OFF PARENT_SCOPE) - set(OPENCV_INITIAL_PASS OFF) - foreach(m ${OPENCV_MODULES_BUILD}) - if(m MATCHES "^opencv_") - string(REGEX REPLACE "^opencv_" "" __shortname "${m}") - add_subdirectory("${OPENCV_MODULE_${m}_LOCATION}" "${CMAKE_CURRENT_BINARY_DIR}/${__shortname}") - else() - message(WARNING "Check module name: ${m}") - add_subdirectory("${OPENCV_MODULE_${m}_LOCATION}" "${CMAKE_CURRENT_BINARY_DIR}/${m}") - endif() - endforeach() - unset(__shortname) -endmacro() - - -# disables OpenCV module with missing dependencies -function(__ocv_module_turn_off the_module) - list(REMOVE_ITEM OPENCV_MODULES_DISABLED_AUTO "${the_module}") - list(APPEND OPENCV_MODULES_DISABLED_AUTO "${the_module}") - list(REMOVE_ITEM OPENCV_MODULES_BUILD "${the_module}") - list(REMOVE_ITEM OPENCV_MODULES_PUBLIC "${the_module}") - set(HAVE_${the_module} OFF CACHE INTERNAL "Module ${the_module} can not be built in current configuration") - - set(OPENCV_MODULES_DISABLED_AUTO "${OPENCV_MODULES_DISABLED_AUTO}" CACHE INTERNAL "") - set(OPENCV_MODULES_BUILD "${OPENCV_MODULES_BUILD}" CACHE INTERNAL "") - set(OPENCV_MODULES_PUBLIC "${OPENCV_MODULES_PUBLIC}" CACHE INTERNAL "") -endfunction() - -# sort modules by dependencies -function(__ocv_sort_modules_by_deps __lst) - ocv_list_sort(${__lst}) - set(${__lst}_ORDERED ${${__lst}} CACHE INTERNAL "") - set(__result "") - foreach (m ${${__lst}}) - list(LENGTH __result __lastindex) - set(__index ${__lastindex}) - foreach (__d ${__result}) - set(__deps "${OPENCV_MODULE_${__d}_DEPS}") - if(";${__deps};" MATCHES ";${m};") - list(FIND __result "${__d}" __i) - if(__i LESS "${__index}") - set(__index "${__i}") - endif() - endif() - endforeach() - if(__index STREQUAL __lastindex) - list(APPEND __result "${m}") - else() - list(INSERT __result ${__index} "${m}") - endif() - endforeach() - set(${__lst} "${__result}" PARENT_SCOPE) -endfunction() - -# resolve dependensies -function(__ocv_resolve_dependencies) - foreach(m ${OPENCV_MODULES_DISABLED_USER}) - set(HAVE_${m} OFF CACHE INTERNAL "Module ${m} will not be built in current configuration") - endforeach() - foreach(m ${OPENCV_MODULES_BUILD}) - set(HAVE_${m} ON CACHE INTERNAL "Module ${m} will be built in current configuration") - endforeach() - - # disable MODULES with unresolved dependencies - set(has_changes ON) - while(has_changes) - set(has_changes OFF) - foreach(m ${OPENCV_MODULES_BUILD}) - set(__deps ${OPENCV_MODULE_${m}_REQ_DEPS} ${OPENCV_MODULE_${m}_PRIVATE_REQ_DEPS}) - while(__deps) - ocv_list_pop_front(__deps d) - string(TOLOWER "${d}" upper_d) - if(NOT (HAVE_${d} OR HAVE_${upper_d} OR TARGET ${d} OR EXISTS ${d})) - if(d MATCHES "^opencv_") # TODO Remove this condition in the future and use HAVE_ variables only - message(STATUS "Module ${m} disabled because ${d} dependency can't be resolved!") - __ocv_module_turn_off(${m}) - set(has_changes ON) - break() - else() - message(STATUS "Assume that non-module dependency is available: ${d} (for module ${m})") - endif() - endif() - endwhile() - endforeach() - endwhile() - -# message(STATUS "List of active modules: ${OPENCV_MODULES_BUILD}") - - foreach(m ${OPENCV_MODULES_BUILD}) - set(deps_${m} ${OPENCV_MODULE_${m}_REQ_DEPS}) - foreach(d ${OPENCV_MODULE_${m}_OPT_DEPS}) - if(NOT (";${deps_${m}};" MATCHES ";${d};")) - if(HAVE_${d} OR TARGET ${d}) - list(APPEND deps_${m} ${d}) - endif() - endif() - endforeach() -# message(STATUS "Initial deps of ${m} (w/o private deps): ${deps_${m}}") - endforeach() - - # propagate dependencies - set(has_changes ON) - while(has_changes) - set(has_changes OFF) - foreach(m2 ${OPENCV_MODULES_BUILD}) # transfer deps of m2 to m - foreach(m ${OPENCV_MODULES_BUILD}) - if((NOT m STREQUAL m2) AND ";${deps_${m}};" MATCHES ";${m2};") - foreach(d ${deps_${m2}}) - if(NOT (";${deps_${m}};" MATCHES ";${d};")) -# message(STATUS " Transfer dependency ${d} from ${m2} to ${m}") - list(APPEND deps_${m} ${d}) - set(has_changes ON) - endif() - endforeach() - endif() - endforeach() - endforeach() - endwhile() - - # process private deps - foreach(m ${OPENCV_MODULES_BUILD}) - foreach(d ${OPENCV_MODULE_${m}_PRIVATE_REQ_DEPS}) - if(NOT (";${deps_${m}};" MATCHES ";${d};")) - list(APPEND deps_${m} ${d}) - endif() - endforeach() - foreach(d ${OPENCV_MODULE_${m}_PRIVATE_OPT_DEPS}) - if(NOT (";${deps_${m}};" MATCHES ";${d};")) - if(HAVE_${d} OR TARGET ${d}) - list(APPEND deps_${m} ${d}) - endif() - endif() - endforeach() - endforeach() - - ocv_list_sort(OPENCV_MODULES_BUILD) - - foreach(m ${OPENCV_MODULES_BUILD}) -# message(STATUS "FULL deps of ${m}: ${deps_${m}}") - set(OPENCV_MODULE_${m}_DEPS ${deps_${m}}) - set(OPENCV_MODULE_${m}_DEPS_EXT ${deps_${m}}) - ocv_list_filterout(OPENCV_MODULE_${m}_DEPS_EXT "^opencv_[^ ]+$") - if(OPENCV_MODULE_${m}_DEPS_EXT AND OPENCV_MODULE_${m}_DEPS) - list(REMOVE_ITEM OPENCV_MODULE_${m}_DEPS ${OPENCV_MODULE_${m}_DEPS_EXT}) - endif() - endforeach() - - # reorder dependencies - foreach(m ${OPENCV_MODULES_BUILD}) - __ocv_sort_modules_by_deps(OPENCV_MODULE_${m}_DEPS) - ocv_list_sort(OPENCV_MODULE_${m}_DEPS_EXT) - - set(OPENCV_MODULE_${m}_DEPS ${OPENCV_MODULE_${m}_DEPS} CACHE INTERNAL "Flattened dependencies of ${m} module") - set(OPENCV_MODULE_${m}_DEPS_EXT ${OPENCV_MODULE_${m}_DEPS_EXT} CACHE INTERNAL "Extra dependencies of ${m} module") - -# message(STATUS " module deps: ${OPENCV_MODULE_${m}_DEPS}") -# message(STATUS " extra deps: ${OPENCV_MODULE_${m}_DEPS_EXT}") - endforeach() - - __ocv_sort_modules_by_deps(OPENCV_MODULES_BUILD) - - set(OPENCV_MODULES_PUBLIC ${OPENCV_MODULES_PUBLIC} CACHE INTERNAL "List of OpenCV modules marked for export") - set(OPENCV_MODULES_BUILD ${OPENCV_MODULES_BUILD} CACHE INTERNAL "List of OpenCV modules included into the build") - set(OPENCV_MODULES_DISABLED_AUTO ${OPENCV_MODULES_DISABLED_AUTO} CACHE INTERNAL "List of OpenCV modules implicitly disabled due to dependencies") -endfunction() - - -# setup include paths for the list of passed modules -macro(ocv_include_modules) - foreach(d ${ARGN}) - if(d MATCHES "^opencv_" AND HAVE_${d}) - if (EXISTS "${OPENCV_MODULE_${d}_LOCATION}/include") - ocv_include_directories("${OPENCV_MODULE_${d}_LOCATION}/include") - endif() - elseif(EXISTS "${d}") - ocv_include_directories("${d}") - endif() - endforeach() -endmacro() - -# setup include paths for the list of passed modules and recursively add dependent modules -macro(ocv_include_modules_recurse) - foreach(d ${ARGN}) - if(d MATCHES "^opencv_" AND HAVE_${d}) - if (EXISTS "${OPENCV_MODULE_${d}_LOCATION}/include") - ocv_include_directories("${OPENCV_MODULE_${d}_LOCATION}/include") - endif() - if(OPENCV_MODULE_${d}_DEPS) - ocv_include_modules(${OPENCV_MODULE_${d}_DEPS}) - endif() - elseif(EXISTS "${d}") - ocv_include_directories("${d}") - endif() - endforeach() -endmacro() - -# setup include path for OpenCV headers for specified module -# ocv_module_include_directories() -macro(ocv_module_include_directories) - ocv_include_directories("${OPENCV_MODULE_${the_module}_LOCATION}/include" - "${OPENCV_MODULE_${the_module}_LOCATION}/src" - "${CMAKE_CURRENT_BINARY_DIR}" # for precompiled headers - ) - ocv_include_modules(${OPENCV_MODULE_${the_module}_DEPS} ${ARGN}) -endmacro() - - -# sets header and source files for the current module -# NB: all files specified as headers will be installed -# Usage: -# ocv_set_module_sources([HEADERS] [SOURCES] ) -macro(ocv_set_module_sources) - set(OPENCV_MODULE_${the_module}_HEADERS "") - set(OPENCV_MODULE_${the_module}_SOURCES "") - - foreach(f "HEADERS" ${ARGN}) - if(f STREQUAL "HEADERS" OR f STREQUAL "SOURCES") - set(__filesvar "OPENCV_MODULE_${the_module}_${f}") - else() - list(APPEND ${__filesvar} "${f}") - endif() - endforeach() - - # the hacky way to embeed any files into the OpenCV without modification of its build system - if(COMMAND ocv_get_module_external_sources) - ocv_get_module_external_sources() - endif() - - # use full paths for module to be independent from the module location - ocv_convert_to_full_paths(OPENCV_MODULE_${the_module}_HEADERS) - - set(OPENCV_MODULE_${the_module}_HEADERS ${OPENCV_MODULE_${the_module}_HEADERS} CACHE INTERNAL "List of header files for ${the_module}") - set(OPENCV_MODULE_${the_module}_SOURCES ${OPENCV_MODULE_${the_module}_SOURCES} CACHE INTERNAL "List of source files for ${the_module}") -endmacro() - -# finds and sets headers and sources for the standard OpenCV module -# Usage: -# ocv_glob_module_sources([EXCLUDE_CUDA] ) -macro(ocv_glob_module_sources) - set(_argn ${ARGN}) - list(FIND _argn "EXCLUDE_CUDA" exclude_cuda) - if(NOT exclude_cuda EQUAL -1) - list(REMOVE_AT _argn ${exclude_cuda}) - endif() - - file(GLOB_RECURSE lib_srcs "src/*.cpp") - file(GLOB_RECURSE lib_int_hdrs "src/*.hpp" "src/*.h") - file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h") - file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h") - file(GLOB_RECURSE lib_srcs_apple "src/*.mm") - if (APPLE) - list(APPEND lib_srcs ${lib_srcs_apple}) - endif() - - if (exclude_cuda EQUAL -1) - file(GLOB lib_cuda_srcs "src/cuda/*.cu") - set(cuda_objs "") - set(lib_cuda_hdrs "") - if(HAVE_CUDA) - ocv_include_directories(${CUDA_INCLUDE_DIRS}) - file(GLOB lib_cuda_hdrs "src/cuda/*.hpp") - - ocv_cuda_compile(cuda_objs ${lib_cuda_srcs} ${lib_cuda_hdrs}) - source_group("Src\\Cuda" FILES ${lib_cuda_srcs} ${lib_cuda_hdrs}) - endif() - else() - set(cuda_objs "") - set(lib_cuda_srcs "") - set(lib_cuda_hdrs "") - endif() - - source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs}) - - file(GLOB cl_kernels "src/opencl/*.cl") - if(HAVE_opencv_ocl AND cl_kernels) - ocv_include_directories(${OPENCL_INCLUDE_DIRS}) - add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.cpp" "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.hpp" - COMMAND ${CMAKE_COMMAND} -DCL_DIR="${CMAKE_CURRENT_SOURCE_DIR}/src/opencl" -DOUTPUT="${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.cpp" -P "${OpenCV_SOURCE_DIR}/cmake/cl2cpp.cmake" - DEPENDS ${cl_kernels} "${OpenCV_SOURCE_DIR}/cmake/cl2cpp.cmake") - source_group("OpenCL" FILES ${cl_kernels} "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.cpp" "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.hpp") - list(APPEND lib_srcs ${cl_kernels} "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.cpp" "${CMAKE_CURRENT_BINARY_DIR}/opencl_kernels.hpp") - endif() - - source_group("Include" FILES ${lib_hdrs}) - source_group("Include\\detail" FILES ${lib_hdrs_detail}) - - ocv_set_module_sources(${_argn} HEADERS ${lib_hdrs} ${lib_hdrs_detail} - SOURCES ${lib_srcs} ${lib_int_hdrs} ${cuda_objs} ${lib_cuda_srcs} ${lib_cuda_hdrs}) -endmacro() - -# creates OpenCV module in current folder -# creates new target, configures standard dependencies, compilers flags, install rules -# Usage: -# ocv_create_module() -# ocv_create_module(SKIP_LINK) -macro(ocv_create_module) - # The condition we ought to be testing here is whether ocv_add_precompiled_headers will - # be called at some point in the future. We can't look into the future, though, - # so this will have to do. - if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/precomp.hpp") - get_native_precompiled_header(${the_module} precomp.hpp) - endif() - - add_library(${the_module} ${OPENCV_MODULE_TYPE} ${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES} - "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp" - ${${the_module}_pch}) - - if(NOT "${ARGN}" STREQUAL "SKIP_LINK") - target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS}) - target_link_libraries(${the_module} LINK_INTERFACE_LIBRARIES ${OPENCV_MODULE_${the_module}_DEPS}) - target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN}) - endif() - - add_dependencies(opencv_modules ${the_module}) - - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_module} PROPERTIES FOLDER "modules") - endif() - - set_target_properties(${the_module} PROPERTIES - OUTPUT_NAME "${the_module}${OPENCV_DLLVERSION}" - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - INSTALL_NAME_DIR lib - ) - - # For dynamic link numbering convenions - if(NOT ANDROID) - # Android SDK build scripts can include only .so files into final .apk - # As result we should not set version properties for Android - set_target_properties(${the_module} PROPERTIES - VERSION ${OPENCV_LIBVERSION} - SOVERSION ${OPENCV_SOVERSION} - ) - endif() - - if((NOT DEFINED OPENCV_MODULE_TYPE AND BUILD_SHARED_LIBS) - OR (DEFINED OPENCV_MODULE_TYPE AND OPENCV_MODULE_TYPE STREQUAL SHARED)) - set_target_properties(${the_module} PROPERTIES DEFINE_SYMBOL CVAPI_EXPORTS) - endif() - - if(MSVC) - if(CMAKE_CROSSCOMPILING) - set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:secchk") - endif() - set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:libc /DEBUG") - endif() - - ocv_install_target(${the_module} EXPORT OpenCVModules - RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs - LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs - ARCHIVE DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT dev - ) - - # only "public" headers need to be installed - if(OPENCV_MODULE_${the_module}_HEADERS AND ";${OPENCV_MODULES_PUBLIC};" MATCHES ";${the_module};") - foreach(hdr ${OPENCV_MODULE_${the_module}_HEADERS}) - string(REGEX REPLACE "^.*opencv2/" "opencv2/" hdr2 "${hdr}") - if(hdr2 MATCHES "^(opencv2/.*)/[^/]+.h(..)?$") - install(FILES ${hdr} DESTINATION "${OPENCV_INCLUDE_INSTALL_PATH}/${CMAKE_MATCH_1}" COMPONENT dev) - endif() - endforeach() - endif() -endmacro() - -# opencv precompiled headers macro (can add pch to modules and tests) -# this macro must be called after any "add_definitions" commands, otherwise precompiled headers will not work -# Usage: -# ocv_add_precompiled_headers(${the_module}) -macro(ocv_add_precompiled_headers the_target) - if("${the_target}" MATCHES "^opencv_test_.*$") - SET(pch_path "test/test_") - elseif("${the_target}" MATCHES "^opencv_perf_.*$") - SET(pch_path "perf/perf_") - else() - SET(pch_path "src/") - endif() - ocv_add_precompiled_header_to_target(${the_target} "${CMAKE_CURRENT_SOURCE_DIR}/${pch_path}precomp.hpp") - unset(pch_path) -endmacro() - -# short command for adding simple OpenCV module -# see ocv_add_module for argument details -# Usage: -# ocv_define_module(module_name [INTERNAL] [EXCLUDE_CUDA] [REQUIRED] [] [OPTIONAL ]) -macro(ocv_define_module module_name) - set(_argn ${ARGN}) - set(exclude_cuda "") - foreach(arg ${_argn}) - if("${arg}" STREQUAL "EXCLUDE_CUDA") - set(exclude_cuda "${arg}") - list(REMOVE_ITEM _argn ${arg}) - endif() - endforeach() - - ocv_add_module(${module_name} ${_argn}) - ocv_module_include_directories() - ocv_glob_module_sources(${exclude_cuda}) - ocv_create_module() - ocv_add_precompiled_headers(${the_module}) - - ocv_add_accuracy_tests() - ocv_add_perf_tests() - ocv_add_samples() -endmacro() - -# ensures that all passed modules are available -# sets OCV_DEPENDENCIES_FOUND variable to TRUE/FALSE -macro(ocv_check_dependencies) - set(OCV_DEPENDENCIES_FOUND TRUE) - foreach(d ${ARGN}) - if(d MATCHES "^opencv_[^ ]+$" AND NOT HAVE_${d}) - set(OCV_DEPENDENCIES_FOUND FALSE) - break() - endif() - endforeach() -endmacro() - -# auxiliary macro to parse arguments of ocv_add_accuracy_tests and ocv_add_perf_tests commands -macro(__ocv_parse_test_sources tests_type) - set(OPENCV_${tests_type}_${the_module}_SOURCES "") - set(OPENCV_${tests_type}_${the_module}_DEPS "") - set(__file_group_name "") - set(__file_group_sources "") - foreach(arg "DEPENDS_ON" ${ARGN} "FILES") - if(arg STREQUAL "FILES") - set(__currentvar "__file_group_sources") - if(__file_group_name AND __file_group_sources) - source_group("${__file_group_name}" FILES ${__file_group_sources}) - list(APPEND OPENCV_${tests_type}_${the_module}_SOURCES ${__file_group_sources}) - endif() - set(__file_group_name "") - set(__file_group_sources "") - elseif(arg STREQUAL "DEPENDS_ON") - set(__currentvar "OPENCV_TEST_${the_module}_DEPS") - elseif("${__currentvar}" STREQUAL "__file_group_sources" AND NOT __file_group_name) - set(__file_group_name "${arg}") - else() - list(APPEND ${__currentvar} "${arg}") - endif() - endforeach() - unset(__file_group_name) - unset(__file_group_sources) - unset(__currentvar) -endmacro() - -# this is a command for adding OpenCV performance tests to the module -# ocv_add_perf_tests() -function(ocv_add_perf_tests) - set(perf_path "${CMAKE_CURRENT_SOURCE_DIR}/perf") - if(BUILD_PERF_TESTS AND EXISTS "${perf_path}") - __ocv_parse_test_sources(PERF ${ARGN}) - - # opencv_highgui is required for imread/imwrite - set(perf_deps ${the_module} opencv_ts opencv_highgui ${OPENCV_PERF_${the_module}_DEPS} ${OPENCV_MODULE_opencv_ts_DEPS}) - ocv_check_dependencies(${perf_deps}) - - if(OCV_DEPENDENCIES_FOUND) - set(the_target "opencv_perf_${name}") - # project(${the_target}) - - ocv_module_include_directories(${perf_deps} "${perf_path}") - - if(NOT OPENCV_PERF_${the_module}_SOURCES) - file(GLOB perf_srcs "${perf_path}/*.cpp") - file(GLOB perf_hdrs "${perf_path}/*.hpp" "${perf_path}/*.h") - source_group("Src" FILES ${perf_srcs}) - source_group("Include" FILES ${perf_hdrs}) - set(OPENCV_PERF_${the_module}_SOURCES ${perf_srcs} ${perf_hdrs}) - endif() - - get_native_precompiled_header(${the_target} perf_precomp.hpp) - - add_executable(${the_target} ${OPENCV_PERF_${the_module}_SOURCES} ${${the_target}_pch}) - target_link_libraries(${the_target} ${OPENCV_MODULE_${the_module}_DEPS} ${perf_deps} ${OPENCV_LINKER_LIBS}) - add_dependencies(opencv_perf_tests ${the_target}) - - # Additional target properties - set_target_properties(${the_target} PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}" - ) - - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_target} PROPERTIES FOLDER "tests performance") - endif() - - ocv_add_precompiled_headers(${the_target}) - - else(OCV_DEPENDENCIES_FOUND) - # TODO: warn about unsatisfied dependencies - endif(OCV_DEPENDENCIES_FOUND) - if(INSTALL_TESTS) - install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests) - endif() - endif() -endfunction() - -# this is a command for adding OpenCV accuracy/regression tests to the module -# ocv_add_accuracy_tests([FILES ] [DEPENDS_ON] ) -function(ocv_add_accuracy_tests) - set(test_path "${CMAKE_CURRENT_SOURCE_DIR}/test") - ocv_check_dependencies(${test_deps}) - if(BUILD_TESTS AND EXISTS "${test_path}") - __ocv_parse_test_sources(TEST ${ARGN}) - - # opencv_highgui is required for imread/imwrite - set(test_deps ${the_module} opencv_ts opencv_highgui ${OPENCV_TEST_${the_module}_DEPS} ${OPENCV_MODULE_opencv_ts_DEPS}) - ocv_check_dependencies(${test_deps}) - - if(OCV_DEPENDENCIES_FOUND) - set(the_target "opencv_test_${name}") - # project(${the_target}) - - ocv_module_include_directories(${test_deps} "${test_path}") - - if(NOT OPENCV_TEST_${the_module}_SOURCES) - file(GLOB test_srcs "${test_path}/*.cpp") - file(GLOB test_hdrs "${test_path}/*.hpp" "${test_path}/*.h") - source_group("Src" FILES ${test_srcs}) - source_group("Include" FILES ${test_hdrs}) - set(OPENCV_TEST_${the_module}_SOURCES ${test_srcs} ${test_hdrs}) - endif() - - get_native_precompiled_header(${the_target} test_precomp.hpp) - add_executable(${the_target} ${OPENCV_TEST_${the_module}_SOURCES} ${${the_target}_pch}) - - target_link_libraries(${the_target} ${OPENCV_MODULE_${the_module}_DEPS} ${test_deps} ${OPENCV_LINKER_LIBS}) - add_dependencies(opencv_tests ${the_target}) - - # Additional target properties - set_target_properties(${the_target} PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}" - ) - - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_target} PROPERTIES FOLDER "tests accuracy") - endif() - - enable_testing() - get_target_property(LOC ${the_target} LOCATION) - add_test(${the_target} "${LOC}") - - ocv_add_precompiled_headers(${the_target}) - else(OCV_DEPENDENCIES_FOUND) - # TODO: warn about unsatisfied dependencies - endif(OCV_DEPENDENCIES_FOUND) - - if(INSTALL_TESTS) - install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests) - endif() - endif() -endfunction() - -function(ocv_add_samples) - set(samples_path "${CMAKE_CURRENT_SOURCE_DIR}/samples") - string(REGEX REPLACE "^opencv_" "" module_id ${the_module}) - - if(BUILD_EXAMPLES AND EXISTS "${samples_path}") - set(samples_deps ${the_module} ${OPENCV_MODULE_${the_module}_DEPS} opencv_highgui ${ARGN}) - ocv_check_dependencies(${samples_deps}) - - if(OCV_DEPENDENCIES_FOUND) - file(GLOB sample_sources "${samples_path}/*.cpp") - ocv_include_modules(${OPENCV_MODULE_${the_module}_DEPS}) - - foreach(source ${sample_sources}) - get_filename_component(name "${source}" NAME_WE) - set(the_target "example_${module_id}_${name}") - - add_executable(${the_target} "${source}") - target_link_libraries(${the_target} ${samples_deps}) - - set_target_properties(${the_target} PROPERTIES PROJECT_LABEL "(sample) ${name}") - - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_target} PROPERTIES - OUTPUT_NAME "${module_id}-example-${name}" - FOLDER "samples/${module_id}") - endif() - - if(WIN32) - install(TARGETS ${the_target} RUNTIME DESTINATION "samples/${module_id}" COMPONENT samples) - endif() - endforeach() - endif() - endif() - - if(INSTALL_C_EXAMPLES AND NOT WIN32 AND EXISTS "${samples_path}") - file(GLOB sample_files "${samples_path}/*") - install(FILES ${sample_files} - DESTINATION ${OPENCV_SAMPLES_SRC_INSTALL_PATH}/${module_id} - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ COMPONENT samples) - endif() -endfunction() - -# internal macro; finds all link dependencies of the module -# should be used at the end of CMake processing -macro(__ocv_track_module_link_dependencies the_module optkind) - set(${the_module}_MODULE_DEPS_${optkind} "") - set(${the_module}_EXTRA_DEPS_${optkind} "") - - get_target_property(__module_type ${the_module} TYPE) - if(__module_type STREQUAL "STATIC_LIBRARY") - #in case of static library we have to inherit its dependencies (in right order!!!) - if(NOT DEFINED ${the_module}_LIB_DEPENDS_${optkind}) - ocv_split_libs_list(${the_module}_LIB_DEPENDS ${the_module}_LIB_DEPENDS_DBG ${the_module}_LIB_DEPENDS_OPT) - endif() - - set(__resolved_deps "") - set(__mod_depends ${${the_module}_LIB_DEPENDS_${optkind}}) - set(__has_cycle FALSE) - - while(__mod_depends) - list(GET __mod_depends 0 __dep) - list(REMOVE_AT __mod_depends 0) - if(__dep STREQUAL the_module) - set(__has_cycle TRUE) - else()#if("${OPENCV_MODULES_BUILD}" MATCHES "(^|;)${__dep}(;|$)") - ocv_regex_escape(__rdep "${__dep}") - if(__resolved_deps MATCHES "(^|;)${__rdep}(;|$)") - #all dependencies of this module are already resolved - list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${__dep}") - else() - get_target_property(__module_type ${__dep} TYPE) - if(__module_type STREQUAL "STATIC_LIBRARY") - if(NOT DEFINED ${__dep}_LIB_DEPENDS_${optkind}) - ocv_split_libs_list(${__dep}_LIB_DEPENDS ${__dep}_LIB_DEPENDS_DBG ${__dep}_LIB_DEPENDS_OPT) - endif() - list(INSERT __mod_depends 0 ${${__dep}_LIB_DEPENDS_${optkind}} ${__dep}) - list(APPEND __resolved_deps "${__dep}") - elseif(NOT __module_type) - list(APPEND ${the_module}_EXTRA_DEPS_${optkind} "${__dep}") - endif() - endif() - #else() - # get_target_property(__dep_location "${__dep}" LOCATION) - endif() - endwhile() - - ocv_list_unique(${the_module}_MODULE_DEPS_${optkind}) - #ocv_list_reverse(${the_module}_MODULE_DEPS_${optkind}) - ocv_list_unique(${the_module}_EXTRA_DEPS_${optkind}) - #ocv_list_reverse(${the_module}_EXTRA_DEPS_${optkind}) - - if(__has_cycle) - # not sure if it can work - list(APPEND ${the_module}_MODULE_DEPS_${optkind} "${the_module}") - endif() - - unset(__dep_location) - unset(__mod_depends) - unset(__resolved_deps) - unset(__has_cycle) - unset(__rdep) - endif()#STATIC_LIBRARY - unset(__module_type) - - #message("${the_module}_MODULE_DEPS_${optkind}") - #message(" ${${the_module}_MODULE_DEPS_${optkind}}") - #message(" ${OPENCV_MODULE_${the_module}_DEPS}") - #message("") - #message("${the_module}_EXTRA_DEPS_${optkind}") - #message(" ${${the_module}_EXTRA_DEPS_${optkind}}") - #message("") -endmacro() - -# creates lists of build dependencies needed for external projects -macro(ocv_track_build_dependencies) - foreach(m ${OPENCV_MODULES_BUILD}) - __ocv_track_module_link_dependencies("${m}" OPT) - __ocv_track_module_link_dependencies("${m}" DBG) - endforeach() -endmacro() diff --git a/cmake/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake deleted file mode 100644 index 328386a..0000000 --- a/cmake/OpenCVPCHSupport.cmake +++ /dev/null @@ -1,353 +0,0 @@ -# taken from http://public.kitware.com/Bug/view.php?id=1260 and slightly adjusted - -# - Try to find precompiled headers support for GCC 3.4 and 4.x -# Once done this will define: -# -# Variable: -# PCHSupport_FOUND -# -# Macro: -# ADD_PRECOMPILED_HEADER _targetName _input _dowarn -# ADD_PRECOMPILED_HEADER_TO_TARGET _targetName _input _pch_output_to_use _dowarn -# ADD_NATIVE_PRECOMPILED_HEADER _targetName _input _dowarn -# GET_NATIVE_PRECOMPILED_HEADER _targetName _input - -IF(CMAKE_COMPILER_IS_GNUCXX) - - EXEC_PROGRAM( - ${CMAKE_CXX_COMPILER} - ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion - OUTPUT_VARIABLE gcc_compiler_version) - #MESSAGE("GCC Version: ${gcc_compiler_version}") - IF(gcc_compiler_version VERSION_GREATER "4.2.-1") - SET(PCHSupport_FOUND TRUE) - ENDIF() - - SET(_PCH_include_prefix "-I") - SET(_PCH_isystem_prefix "-isystem") - SET(_PCH_define_prefix "-D") - -ELSEIF(CMAKE_GENERATOR MATCHES "^Visual.*$") - SET(PCHSupport_FOUND TRUE) - SET(_PCH_include_prefix "/I") - SET(_PCH_isystem_prefix "/I") - SET(_PCH_define_prefix "/D") -ELSE() - SET(PCHSupport_FOUND FALSE) -ENDIF() - -MACRO(_PCH_GET_COMPILE_FLAGS _out_compile_flags) - - STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name) - SET(${_out_compile_flags} ${${_flags_var_name}} ) - - IF(CMAKE_COMPILER_IS_GNUCXX) - - GET_TARGET_PROPERTY(_targetType ${_PCH_current_target} TYPE) - IF(${_targetType} STREQUAL SHARED_LIBRARY AND NOT WIN32) - LIST(APPEND ${_out_compile_flags} "-fPIC") - ENDIF() - - ELSE() - ## TODO ... ? or does it work out of the box - ENDIF() - - GET_DIRECTORY_PROPERTY(DIRINC INCLUDE_DIRECTORIES ) - FOREACH(item ${DIRINC}) - if(item MATCHES "^${OpenCV_SOURCE_DIR}/modules/") - LIST(APPEND ${_out_compile_flags} "${_PCH_include_prefix}\"${item}\"") - else() - LIST(APPEND ${_out_compile_flags} "${_PCH_isystem_prefix}\"${item}\"") - endif() - ENDFOREACH(item) - - GET_DIRECTORY_PROPERTY(_directory_flags DEFINITIONS) - GET_DIRECTORY_PROPERTY(_global_definitions DIRECTORY ${OpenCV_SOURCE_DIR} DEFINITIONS) - #MESSAGE("_directory_flags ${_directory_flags} ${_global_definitions}" ) - LIST(APPEND ${_out_compile_flags} ${_directory_flags}) - LIST(APPEND ${_out_compile_flags} ${_global_definitions}) - LIST(APPEND ${_out_compile_flags} ${CMAKE_CXX_FLAGS}) - - SEPARATE_ARGUMENTS(${_out_compile_flags}) - -ENDMACRO(_PCH_GET_COMPILE_FLAGS) - - -MACRO(_PCH_WRITE_PCHDEP_CXX _targetName _include_file _dephelp) - - SET(${_dephelp} ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch_dephelp.cxx) - IF(CMAKE_HOST_WIN32) - ADD_CUSTOM_COMMAND( - OUTPUT "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "#include \\\"${_include_file}\\\"" > "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "int testfunction();" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "int testfunction()" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "{" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo " return 0;" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "}" >> "${${_dephelp}}" - DEPENDS "${_include_file}" - ) - else() - ADD_CUSTOM_COMMAND( - OUTPUT "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "\\#include \\\"${_include_file}\\\"" > "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "int testfunction\\(\\)\\;" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "int testfunction\\(\\)" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "{" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo " \\return 0\\;" >> "${${_dephelp}}" - COMMAND ${CMAKE_COMMAND} -E echo "}" >> "${${_dephelp}}" - DEPENDS "${_include_file}" - ) - endif() - -ENDMACRO(_PCH_WRITE_PCHDEP_CXX ) - -MACRO(_PCH_GET_COMPILE_COMMAND out_command _input _output) - - FILE(TO_NATIVE_PATH ${_input} _native_input) - FILE(TO_NATIVE_PATH ${_output} _native_output) - - IF(CMAKE_COMPILER_IS_GNUCXX) - IF(CMAKE_CXX_COMPILER_ARG1) - # remove leading space in compiler argument - STRING(REGEX REPLACE "^ +" "" pchsupport_compiler_cxx_arg1 ${CMAKE_CXX_COMPILER_ARG1}) - - SET(${out_command} - ${CMAKE_CXX_COMPILER} ${pchsupport_compiler_cxx_arg1} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input} - ) - ELSE(CMAKE_CXX_COMPILER_ARG1) - SET(${out_command} - ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input} - ) - ENDIF(CMAKE_CXX_COMPILER_ARG1) - ELSE(CMAKE_COMPILER_IS_GNUCXX) - - SET(_dummy_str "#include <${_input}>") - FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pch_dummy.cpp ${_dummy_str}) - - SET(${out_command} - ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} /c /Fp${_native_output} /Yc${_native_input} pch_dummy.cpp - ) - #/out:${_output} - - ENDIF(CMAKE_COMPILER_IS_GNUCXX) - -ENDMACRO(_PCH_GET_COMPILE_COMMAND ) - - -MACRO(_PCH_GET_TARGET_COMPILE_FLAGS _cflags _header_name _pch_path _dowarn ) - - FILE(TO_NATIVE_PATH ${_pch_path} _native_pch_path) - - IF(CMAKE_COMPILER_IS_GNUCXX) - # for use with distcc and gcc >4.0.1 if preprocessed files are accessible - # on all remote machines set - # PCH_ADDITIONAL_COMPILER_FLAGS to -fpch-preprocess - # if you want warnings for invalid header files (which is very inconvenient - # if you have different versions of the headers for different build types - # you may set _pch_dowarn - IF (_dowarn) - SET(${_cflags} "${PCH_ADDITIONAL_COMPILER_FLAGS} -include \"${CMAKE_CURRENT_BINARY_DIR}/${_header_name}\" -Winvalid-pch " ) - ELSE (_dowarn) - SET(${_cflags} "${PCH_ADDITIONAL_COMPILER_FLAGS} -include \"${CMAKE_CURRENT_BINARY_DIR}/${_header_name}\" " ) - ENDIF (_dowarn) - - ELSE(CMAKE_COMPILER_IS_GNUCXX) - - set(${_cflags} "/Fp${_native_pch_path} /Yu${_header_name}" ) - - ENDIF(CMAKE_COMPILER_IS_GNUCXX) - -ENDMACRO(_PCH_GET_TARGET_COMPILE_FLAGS ) - - -MACRO(GET_PRECOMPILED_HEADER_OUTPUT _targetName _input _output) - - GET_FILENAME_COMPONENT(_name ${_input} NAME) - GET_FILENAME_COMPONENT(_path ${_input} PATH) - SET(${_output} "${CMAKE_CURRENT_BINARY_DIR}/${_name}.gch/${_targetName}_${CMAKE_BUILD_TYPE}.gch") - -ENDMACRO(GET_PRECOMPILED_HEADER_OUTPUT _targetName _input) - - -MACRO(ADD_PRECOMPILED_HEADER_TO_TARGET _targetName _input _pch_output_to_use ) - - # to do: test whether compiler flags match between target _targetName - # and _pch_output_to_use - GET_FILENAME_COMPONENT(_name ${_input} NAME) - - IF(ARGN STREQUAL "0") - SET(_dowarn 0) - ELSE() - SET(_dowarn 1) - ENDIF() - - _PCH_GET_TARGET_COMPILE_FLAGS(_target_cflags ${_name} ${_pch_output_to_use} ${_dowarn}) - #MESSAGE("Add flags ${_target_cflags} to ${_targetName} " ) - - GET_TARGET_PROPERTY(_sources ${_targetName} SOURCES) - FOREACH(src ${_sources}) - if(NOT "${src}" MATCHES "\\.mm$") - get_source_file_property(_flags "${src}" COMPILE_FLAGS) - if(_flags) - set(_flags "${_flags} ${_target_cflags}") - else() - set(_flags "${_target_cflags}") - endif() - - set_source_files_properties("${src}" PROPERTIES COMPILE_FLAGS "${_flags}") - endif() - ENDFOREACH() - - ADD_CUSTOM_TARGET(pch_Generate_${_targetName} - DEPENDS ${_pch_output_to_use} - ) - - ADD_DEPENDENCIES(${_targetName} pch_Generate_${_targetName} ) - -ENDMACRO(ADD_PRECOMPILED_HEADER_TO_TARGET) - -MACRO(ADD_PRECOMPILED_HEADER _targetName _input) - - SET(_PCH_current_target ${_targetName}) - - IF(NOT CMAKE_BUILD_TYPE) - MESSAGE(FATAL_ERROR - "This is the ADD_PRECOMPILED_HEADER macro. " - "You must set CMAKE_BUILD_TYPE!" - ) - ENDIF() - - IF(ARGN STREQUAL "0") - SET(_dowarn 0) - ELSE() - SET(_dowarn 1) - ENDIF() - - GET_FILENAME_COMPONENT(_name ${_input} NAME) - GET_FILENAME_COMPONENT(_path ${_input} PATH) - GET_PRECOMPILED_HEADER_OUTPUT( ${_targetName} ${_input} _output) - - _PCH_WRITE_PCHDEP_CXX(${_targetName} "${_input}" _pch_dephelp_cxx) - - ADD_LIBRARY(${_targetName}_pch_dephelp STATIC "${_pch_dephelp_cxx}" "${_input}" ) - - set_target_properties(${_targetName}_pch_dephelp PROPERTIES - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_PATH}" - ) - - _PCH_GET_COMPILE_FLAGS(_compile_FLAGS) - - get_target_property(type ${_targetName} TYPE) - if(type STREQUAL "SHARED_LIBRARY") - get_target_property(__DEFINES ${_targetName} DEFINE_SYMBOL) - if(NOT __DEFINES MATCHES __DEFINES-NOTFOUND) - list(APPEND _compile_FLAGS "${_PCH_define_prefix}${__DEFINES}") - endif() - endif() - - #MESSAGE("_compile_FLAGS: ${_compile_FLAGS}") - #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}") - - ADD_CUSTOM_COMMAND( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_name}" - COMMAND ${CMAKE_COMMAND} -E copy "${_input}" "${CMAKE_CURRENT_BINARY_DIR}/${_name}" # ensure same directory! Required by gcc - DEPENDS "${_input}" - ) - - #message("_command ${_input} ${_output}") - _PCH_GET_COMPILE_COMMAND(_command ${CMAKE_CURRENT_BINARY_DIR}/${_name} ${_output} ) - - GET_FILENAME_COMPONENT(_outdir ${_output} PATH) - ADD_CUSTOM_COMMAND( - OUTPUT "${_output}" - COMMAND ${CMAKE_COMMAND} -E make_directory "${_outdir}" - COMMAND ${_command} - DEPENDS "${_input}" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_name}" - DEPENDS ${_targetName}_pch_dephelp - ) - - ADD_PRECOMPILED_HEADER_TO_TARGET(${_targetName} ${_input} ${_output} ${_dowarn}) - -ENDMACRO(ADD_PRECOMPILED_HEADER) - - -# Generates the use of precompiled in a target, -# without using depency targets (2 extra for each target) -# Using Visual, must also add ${_targetName}_pch to sources -# Not needed by Xcode - -MACRO(GET_NATIVE_PRECOMPILED_HEADER _targetName _input) - - if(CMAKE_GENERATOR MATCHES "^Visual.*$") - set(_dummy_str "#include \"${_input}\"\n") - - set(${_targetName}_pch ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch.cpp) - if(EXISTS ${${_targetName}_pch}) - # Check if contents is the same, if not rewrite - # todo - else() - FILE(WRITE ${${_targetName}_pch} ${_dummy_str}) - endif() - endif() - -ENDMACRO(GET_NATIVE_PRECOMPILED_HEADER) - - -MACRO(ADD_NATIVE_PRECOMPILED_HEADER _targetName _input) - - IF(ARGN STREQUAL "0") - SET(_dowarn 0) - ELSE() - SET(_dowarn 1) - ENDIF() - - if(CMAKE_GENERATOR MATCHES "^Visual.*$") - - # Auto include the precompile (useful for moc processing, since the use of - # precompiled is specified at the target level - # and I don't want to specifiy /F- for each moc/res/ui generated files (using Qt) - - GET_TARGET_PROPERTY(oldProps ${_targetName} COMPILE_FLAGS) - if (oldProps MATCHES NOTFOUND) - SET(oldProps "") - endif() - - SET(newProperties "${oldProps} /Yu\"${_input}\" /FI\"${_input}\"") - SET_TARGET_PROPERTIES(${_targetName} PROPERTIES COMPILE_FLAGS "${newProperties}") - - #also inlude ${oldProps} to have the same compile options - SET_SOURCE_FILES_PROPERTIES(${${_targetName}_pch} PROPERTIES COMPILE_FLAGS "${oldProps} /Yc\"${_input}\"") - - elseif (CMAKE_GENERATOR MATCHES Xcode) - - # For Xcode, cmake needs my patch to process - # GCC_PREFIX_HEADER and GCC_PRECOMPILE_PREFIX_HEADER as target properties - - # When buiding out of the tree, precompiled may not be located - # Use full path instead. - GET_FILENAME_COMPONENT(fullPath ${_input} ABSOLUTE) - - SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${fullPath}") - SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES") - - else() - - #Fallback to the "old" precompiled suppport - #ADD_PRECOMPILED_HEADER(${_targetName} ${_input} ${_dowarn}) - - endif() - -ENDMACRO(ADD_NATIVE_PRECOMPILED_HEADER) - -macro(ocv_add_precompiled_header_to_target the_target pch_header) - if(PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS AND EXISTS "${pch_header}") - if(CMAKE_GENERATOR MATCHES "^Visual" OR CMAKE_GENERATOR MATCHES Xcode) - add_native_precompiled_header(${the_target} ${pch_header}) - elseif(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_GENERATOR MATCHES "Makefiles|Ninja") - add_precompiled_header(${the_target} ${pch_header}) - endif() - endif() -endmacro() diff --git a/cmake/OpenCVPackaging.cmake b/cmake/OpenCVPackaging.cmake deleted file mode 100644 index 91f5940..0000000 --- a/cmake/OpenCVPackaging.cmake +++ /dev/null @@ -1,110 +0,0 @@ -if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") -set(CPACK_set_DESTDIR "on") - -if(NOT OPENCV_CUSTOM_PACKAGE_INFO) - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open Computer Vision Library") - set(CPACK_PACKAGE_DESCRIPTION -"OpenCV (Open Source Computer Vision Library) is an open source computer vision -and machine learning software library. OpenCV was built to provide a common -infrastructure for computer vision applications and to accelerate the use of -machine perception in the commercial products. Being a BSD-licensed product, -OpenCV makes it easy for businesses to utilize and modify the code.") - set(CPACK_PACKAGE_VENDOR "OpenCV Foundation") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") - set(CPACK_PACKAGE_CONTACT "admin@opencv.org") - set(CPACK_PACKAGE_VERSION_MAJOR "${OPENCV_VERSION_MAJOR}") - set(CPACK_PACKAGE_VERSION_MINOR "${OPENCV_VERSION_MINOR}") - set(CPACK_PACKAGE_VERSION_PATCH "${OPENCV_VERSION_PATCH}") - set(CPACK_PACKAGE_VERSION "${OPENCV_VCSVERSION}") -endif(NOT OPENCV_CUSTOM_PACKAGE_INFO) - -#arch -if(X86) - set(CPACK_DEBIAN_ARCHITECTURE "i386") - set(CPACK_RPM_PACKAGE_ARCHITECTURE "i686") -elseif(X86_64) - set(CPACK_DEBIAN_ARCHITECTURE "amd64") - set(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64") -elseif(ARM) - set(CPACK_DEBIAN_ARCHITECTURE "armhf") - set(CPACK_RPM_PACKAGE_ARCHITECTURE "armhf") -else() - set(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) - set(CPACK_RPM_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) -endif() - -if(CPACK_GENERATOR STREQUAL "DEB") - set(OPENCV_PACKAGE_ARCH_SUFFIX ${CPACK_DEBIAN_ARCHITECTURE}) -elseif(CPACK_GENERATOR STREQUAL "RPM") - set(OPENCV_PACKAGE_ARCH_SUFFIX ${CPACK_RPM_PACKAGE_ARCHITECTURE}) -else() - set(OPENCV_PACKAGE_ARCH_SUFFIX ${CMAKE_SYSTEM_PROCESSOR}) -endif() - -set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VCSVERSION}-${OPENCV_PACKAGE_ARCH_SUFFIX}") -set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VCSVERSION}-${OPENCV_PACKAGE_ARCH_SUFFIX}") - -#rpm options -set(CPACK_RPM_COMPONENT_INSTALL TRUE) -set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}) -set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION}) -set(CPACK_RPM_PACKAGE_URL "http://opencv.org") -set(CPACK_RPM_PACKAGE_LICENSE "BSD") - -#deb options -set(CPACK_DEB_COMPONENT_INSTALL TRUE) -set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") -set(CPACK_DEBIAN_PACKAGE_SECTION "libs") -set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://opencv.org") - -#depencencies -set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS TRUE) -set(CPACK_COMPONENT_samples_DEPENDS libs) -set(CPACK_COMPONENT_dev_DEPENDS libs) -set(CPACK_COMPONENT_docs_DEPENDS libs) -set(CPACK_COMPONENT_java_DEPENDS libs) -set(CPACK_COMPONENT_python_DEPENDS libs) -set(CPACK_COMPONENT_tests_DEPENDS libs) - -if(HAVE_CUDA) - string(REPLACE "." "-" cuda_version_suffix ${CUDA_VERSION}) - set(CPACK_DEB_libs_PACKAGE_DEPENDS "cuda-core-libs-${cuda_version_suffix}, cuda-extra-libs-${cuda_version_suffix}") - set(CPACK_COMPONENT_dev_DEPENDS libs) - set(CPACK_DEB_dev_PACKAGE_DEPENDS "cuda-headers-${cuda_version_suffix}") -endif() - -if(NOT OPENCV_CUSTOM_PACKAGE_INFO) - set(CPACK_COMPONENT_libs_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}") - set(CPACK_COMPONENT_libs_DESCRIPTION "Open Computer Vision Library") - - set(CPACK_COMPONENT_python_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-python") - set(CPACK_COMPONENT_python_DESCRIPTION "Python bindings for Open Source Computer Vision Library") - - set(CPACK_COMPONENT_java_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-java") - set(CPACK_COMPONENT_java_DESCRIPTION "Java bindings for Open Source Computer Vision Library") - - set(CPACK_COMPONENT_dev_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-dev") - set(CPACK_COMPONENT_dev_DESCRIPTION "Development files for Open Source Computer Vision Library") - - set(CPACK_COMPONENT_docs_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-docs") - set(CPACK_COMPONENT_docs_DESCRIPTION "Documentation for Open Source Computer Vision Library") - - set(CPACK_COMPONENT_samples_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-samples") - set(CPACK_COMPONENT_samples_DESCRIPTION "Samples for Open Source Computer Vision Library") - - set(CPACK_COMPONENT_tests_DISPLAY_NAME "lib${CMAKE_PROJECT_NAME}-tests") - set(CPACK_COMPONENT_tests_DESCRIPTION "Accuracy and performance tests for Open Source Computer Vision Library") -endif(NOT OPENCV_CUSTOM_PACKAGE_INFO) - -if(NOT OPENCV_CUSTOM_PACKAGE_LAYOUT) - set(CPACK_libs_COMPONENT_INSTALL TRUE) - set(CPACK_dev_COMPONENT_INSTALL TRUE) - set(CPACK_docs_COMPONENT_INSTALL TRUE) - set(CPACK_python_COMPONENT_INSTALL TRUE) - set(CPACK_java_COMPONENT_INSTALL TRUE) - set(CPACK_samples_COMPONENT_INSTALL TRUE) -endif(NOT OPENCV_CUSTOM_PACKAGE_LAYOUT) - -include(CPack) - -ENDif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") \ No newline at end of file diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake deleted file mode 100644 index 9fa94bb..0000000 --- a/cmake/OpenCVUtils.cmake +++ /dev/null @@ -1,621 +0,0 @@ -# Search packages for host system instead of packages for target system -# in case of cross compilation thess macro should be defined by toolchain file -if(NOT COMMAND find_host_package) - macro(find_host_package) - find_package(${ARGN}) - endmacro() -endif() -if(NOT COMMAND find_host_program) - macro(find_host_program) - find_program(${ARGN}) - endmacro() -endif() - -# assert macro -# Note: it doesn't support lists in arguments -# Usage samples: -# ocv_assert(MyLib_FOUND) -# ocv_assert(DEFINED MyLib_INCLUDE_DIRS) -macro(ocv_assert) - if(NOT (${ARGN})) - string(REPLACE ";" " " __assert_msg "${ARGN}") - message(AUTHOR_WARNING "Assertion failed: ${__assert_msg}") - endif() -endmacro() - -macro(ocv_check_environment_variables) - foreach(_var ${ARGN}) - if(NOT DEFINED ${_var} AND DEFINED ENV{${_var}}) - set(__value "$ENV{${_var}}") - file(TO_CMAKE_PATH "${__value}" __value) # Assume that we receive paths - set(${_var} "${__value}") - message(STATUS "Update variable ${_var} from environment: ${${_var}}") - endif() - endforeach() -endmacro() - -# adds include directories in such way that directories from the OpenCV source tree go first -function(ocv_include_directories) - set(__add_before "") - foreach(dir ${ARGN}) - get_filename_component(__abs_dir "${dir}" ABSOLUTE) - if("${__abs_dir}" MATCHES "^${OpenCV_SOURCE_DIR}" OR "${__abs_dir}" MATCHES "^${OpenCV_BINARY_DIR}") - list(APPEND __add_before "${dir}") - else() - include_directories(AFTER SYSTEM "${dir}") - endif() - endforeach() - include_directories(BEFORE ${__add_before}) -endfunction() - -# clears all passed variables -macro(ocv_clear_vars) - foreach(_var ${ARGN}) - unset(${_var} CACHE) - endforeach() -endmacro() - -set(OCV_COMPILER_FAIL_REGEX - "command line option .* is valid for .* but not for C\\+\\+" # GNU - "command line option .* is valid for .* but not for C" # GNU - "unrecognized .*option" # GNU - "unknown .*option" # Clang - "ignoring unknown option" # MSVC - "warning D9002" # MSVC, any lang - "option .*not supported" # Intel - "[Uu]nknown option" # HP - "[Ww]arning: [Oo]ption" # SunPro - "command option .* is not recognized" # XL - "not supported in this configuration; ignored" # AIX - "File with unknown suffix passed to linker" # PGI - "WARNING: unknown flag:" # Open64 - ) - -MACRO(ocv_check_compiler_flag LANG FLAG RESULT) - if(NOT DEFINED ${RESULT}) - if("_${LANG}_" MATCHES "_CXX_") - set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx") - if("${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") - FILE(WRITE "${_fname}" "int main() { return 0; }\n") - else() - FILE(WRITE "${_fname}" "#pragma\nint main() { return 0; }\n") - endif() - elseif("_${LANG}_" MATCHES "_C_") - set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c") - if("${CMAKE_C_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_C_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") - FILE(WRITE "${_fname}" "int main(void) { return 0; }\n") - else() - FILE(WRITE "${_fname}" "#pragma\nint main(void) { return 0; }\n") - endif() - elseif("_${LANG}_" MATCHES "_OBJCXX_") - set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm") - if("${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") - FILE(WRITE "${_fname}" "int main() { return 0; }\n") - else() - FILE(WRITE "${_fname}" "#pragma\nint main() { return 0; }\n") - endif() - else() - unset(_fname) - endif() - if(_fname) - MESSAGE(STATUS "Performing Test ${RESULT}") - TRY_COMPILE(${RESULT} - "${CMAKE_BINARY_DIR}" - "${_fname}" - COMPILE_DEFINITIONS "${FLAG}" - OUTPUT_VARIABLE OUTPUT) - - FOREACH(_regex ${OCV_COMPILER_FAIL_REGEX}) - IF("${OUTPUT}" MATCHES "${_regex}") - SET(${RESULT} 0) - break() - ENDIF() - ENDFOREACH() - - IF(${RESULT}) - SET(${RESULT} 1 CACHE INTERNAL "Test ${RESULT}") - MESSAGE(STATUS "Performing Test ${RESULT} - Success") - ELSE(${RESULT}) - MESSAGE(STATUS "Performing Test ${RESULT} - Failed") - SET(${RESULT} "" CACHE INTERNAL "Test ${RESULT}") - ENDIF(${RESULT}) - else() - SET(${RESULT} 0) - endif() - endif() -ENDMACRO() - -macro(ocv_check_flag_support lang flag varname) - if("_${lang}_" MATCHES "_CXX_") - set(_lang CXX) - elseif("_${lang}_" MATCHES "_C_") - set(_lang C) - elseif("_${lang}_" MATCHES "_OBJCXX_") - set(_lang OBJCXX) - else() - set(_lang ${lang}) - endif() - - string(TOUPPER "${flag}" ${varname}) - string(REGEX REPLACE "^(/|-)" "HAVE_${_lang}_" ${varname} "${${varname}}") - string(REGEX REPLACE " -|-|=| |\\." "_" ${varname} "${${varname}}") - - ocv_check_compiler_flag("${_lang}" "${ARGN} ${flag}" ${${varname}}) -endmacro() - -# turns off warnings -macro(ocv_warnings_disable) - if(NOT ENABLE_NOISY_WARNINGS) - set(_flag_vars "") - set(_msvc_warnings "") - set(_gxx_warnings "") - foreach(arg ${ARGN}) - if(arg MATCHES "^CMAKE_") - list(APPEND _flag_vars ${arg}) - elseif(arg MATCHES "^/wd") - list(APPEND _msvc_warnings ${arg}) - elseif(arg MATCHES "^-W") - list(APPEND _gxx_warnings ${arg}) - endif() - endforeach() - if(MSVC AND _msvc_warnings AND _flag_vars) - foreach(var ${_flag_vars}) - foreach(warning ${_msvc_warnings}) - set(${var} "${${var}} ${warning}") - endforeach() - endforeach() - elseif((CMAKE_COMPILER_IS_GNUCXX OR (UNIX AND CV_ICC)) AND _gxx_warnings AND _flag_vars) - foreach(var ${_flag_vars}) - foreach(warning ${_gxx_warnings}) - if(NOT warning MATCHES "^-Wno-") - string(REPLACE "${warning}" "" ${var} "${${var}}") - string(REPLACE "-W" "-Wno-" warning "${warning}") - endif() - ocv_check_flag_support(${var} "${warning}" _varname) - if(${_varname}) - set(${var} "${${var}} ${warning}") - endif() - endforeach() - endforeach() - endif() - unset(_flag_vars) - unset(_msvc_warnings) - unset(_gxx_warnings) - endif(NOT ENABLE_NOISY_WARNINGS) -endmacro() - -# Provides an option that the user can optionally select. -# Can accept condition to control when option is available for user. -# Usage: -# option( "help string describing the option" [IF ]) -macro(OCV_OPTION variable description value) - set(__value ${value}) - set(__condition "") - set(__varname "__value") - foreach(arg ${ARGN}) - if(arg STREQUAL "IF" OR arg STREQUAL "if") - set(__varname "__condition") - else() - list(APPEND ${__varname} ${arg}) - endif() - endforeach() - unset(__varname) - if("${__condition}" STREQUAL "") - set(__condition 2 GREATER 1) - endif() - - if(${__condition}) - if("${__value}" MATCHES ";") - if(${__value}) - option(${variable} "${description}" ON) - else() - option(${variable} "${description}" OFF) - endif() - elseif(DEFINED ${__value}) - if(${__value}) - option(${variable} "${description}" ON) - else() - option(${variable} "${description}" OFF) - endif() - else() - option(${variable} "${description}" ${__value}) - endif() - else() - unset(${variable} CACHE) - endif() - unset(__condition) - unset(__value) -endmacro() - - -# Macros that checks if module have been installed. -# After it adds module to build and define -# constants passed as second arg -macro(CHECK_MODULE module_name define) - set(${define} 0) - if(PKG_CONFIG_FOUND) - set(ALIAS ALIASOF_${module_name}) - set(ALIAS_FOUND ${ALIAS}_FOUND) - set(ALIAS_INCLUDE_DIRS ${ALIAS}_INCLUDE_DIRS) - set(ALIAS_LIBRARY_DIRS ${ALIAS}_LIBRARY_DIRS) - set(ALIAS_LIBRARIES ${ALIAS}_LIBRARIES) - - PKG_CHECK_MODULES(${ALIAS} ${module_name}) - - if(${ALIAS_FOUND}) - set(${define} 1) - foreach(P "${ALIAS_INCLUDE_DIRS}") - if(${P}) - list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}}) - endif() - endforeach() - - foreach(P "${ALIAS_LIBRARY_DIRS}") - if(${P}) - list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}}) - endif() - endforeach() - - list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}}) - endif() - endif() -endmacro() - - -set(OPENCV_BUILD_INFO_FILE "${OpenCV_BINARY_DIR}/version_string.tmp") -file(REMOVE "${OPENCV_BUILD_INFO_FILE}") -function(ocv_output_status msg) - message(STATUS "${msg}") - string(REPLACE "\\" "\\\\" msg "${msg}") - string(REPLACE "\"" "\\\"" msg "${msg}") - file(APPEND "${OPENCV_BUILD_INFO_FILE}" "\"${msg}\\n\"\n") -endfunction() - -macro(ocv_finalize_status) - if(NOT OPENCV_SKIP_STATUS_FINALIZATION) - if(TARGET opencv_core) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OPENCV_BUILD_INFO_FILE}" "${opencv_core_BINARY_DIR}/version_string.inc" OUTPUT_QUIET) - endif() - endif() -endmacro() - - -# Status report function. -# Automatically align right column and selects text based on condition. -# Usage: -# status() -# status( [ ...]) -# status( THEN ELSE ) -function(status text) - set(status_cond) - set(status_then) - set(status_else) - - set(status_current_name "cond") - foreach(arg ${ARGN}) - if(arg STREQUAL "THEN") - set(status_current_name "then") - elseif(arg STREQUAL "ELSE") - set(status_current_name "else") - else() - list(APPEND status_${status_current_name} ${arg}) - endif() - endforeach() - - if(DEFINED status_cond) - set(status_placeholder_length 32) - string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder) - string(LENGTH "${text}" status_text_length) - if(status_text_length LESS status_placeholder_length) - string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text) - elseif(DEFINED status_then OR DEFINED status_else) - ocv_output_status("${text}") - set(status_text "${status_placeholder}") - else() - set(status_text "${text}") - endif() - - if(DEFINED status_then OR DEFINED status_else) - if(${status_cond}) - string(REPLACE ";" " " status_then "${status_then}") - string(REGEX REPLACE "^[ \t]+" "" status_then "${status_then}") - ocv_output_status("${status_text} ${status_then}") - else() - string(REPLACE ";" " " status_else "${status_else}") - string(REGEX REPLACE "^[ \t]+" "" status_else "${status_else}") - ocv_output_status("${status_text} ${status_else}") - endif() - else() - string(REPLACE ";" " " status_cond "${status_cond}") - string(REGEX REPLACE "^[ \t]+" "" status_cond "${status_cond}") - ocv_output_status("${status_text} ${status_cond}") - endif() - else() - ocv_output_status("${text}") - endif() -endfunction() - - -# splits cmake libraries list of format "general;item1;debug;item2;release;item3" to two lists -macro(ocv_split_libs_list lst lstdbg lstopt) - set(${lstdbg} "") - set(${lstopt} "") - set(perv_keyword "") - foreach(word ${${lst}}) - if(word STREQUAL "debug" OR word STREQUAL "optimized") - set(perv_keyword ${word}) - elseif(word STREQUAL "general") - set(perv_keyword "") - elseif(perv_keyword STREQUAL "debug") - list(APPEND ${lstdbg} "${word}") - set(perv_keyword "") - elseif(perv_keyword STREQUAL "optimized") - list(APPEND ${lstopt} "${word}") - set(perv_keyword "") - else() - list(APPEND ${lstdbg} "${word}") - list(APPEND ${lstopt} "${word}") - set(perv_keyword "") - endif() - endforeach() -endmacro() - - -# remove all matching elements from the list -macro(ocv_list_filterout lst regex) - foreach(item ${${lst}}) - if(item MATCHES "${regex}") - list(REMOVE_ITEM ${lst} "${item}") - endif() - endforeach() -endmacro() - - -# stable & safe duplicates removal macro -macro(ocv_list_unique __lst) - if(${__lst}) - list(REMOVE_DUPLICATES ${__lst}) - endif() -endmacro() - - -# safe list reversal macro -macro(ocv_list_reverse __lst) - if(${__lst}) - list(REVERSE ${__lst}) - endif() -endmacro() - - -# safe list sorting macro -macro(ocv_list_sort __lst) - if(${__lst}) - list(SORT ${__lst}) - endif() -endmacro() - - -# add prefix to each item in the list -macro(ocv_list_add_prefix LST PREFIX) - set(__tmp "") - foreach(item ${${LST}}) - list(APPEND __tmp "${PREFIX}${item}") - endforeach() - set(${LST} ${__tmp}) - unset(__tmp) -endmacro() - - -# add suffix to each item in the list -macro(ocv_list_add_suffix LST SUFFIX) - set(__tmp "") - foreach(item ${${LST}}) - list(APPEND __tmp "${item}${SUFFIX}") - endforeach() - set(${LST} ${__tmp}) - unset(__tmp) -endmacro() - - -# gets and removes the first element from list -macro(ocv_list_pop_front LST VAR) - if(${LST}) - list(GET ${LST} 0 ${VAR}) - list(REMOVE_AT ${LST} 0) - else() - set(${VAR} "") - endif() -endmacro() - - -# simple regex escaping routine (does not cover all cases!!!) -macro(ocv_regex_escape var regex) - string(REGEX REPLACE "([+.*^$])" "\\\\1" ${var} "${regex}") -endmacro() - - -# convert list of paths to full paths -macro(ocv_convert_to_full_paths VAR) - if(${VAR}) - set(__tmp "") - foreach(path ${${VAR}}) - get_filename_component(${VAR} "${path}" ABSOLUTE) - list(APPEND __tmp "${${VAR}}") - endforeach() - set(${VAR} ${__tmp}) - unset(__tmp) - endif() -endmacro() - - -# convert list of paths to libraries names without lib prefix -macro(ocv_convert_to_lib_name var) - set(__tmp "") - foreach(path ${ARGN}) - get_filename_component(__tmp_name "${path}" NAME_WE) - string(REGEX REPLACE "^lib" "" __tmp_name ${__tmp_name}) - list(APPEND __tmp "${__tmp_name}") - endforeach() - set(${var} ${__tmp}) - unset(__tmp) - unset(__tmp_name) -endmacro() - - -# add install command -function(ocv_install_target) - install(TARGETS ${ARGN}) - - set(isPackage 0) - unset(__package) - unset(__target) - foreach(e ${ARGN}) - if(NOT DEFINED __target) - set(__target "${e}") - endif() - if(isPackage EQUAL 1) - set(__package "${e}") - break() - endif() - if(e STREQUAL "EXPORT") - set(isPackage 1) - endif() - endforeach() - - if(DEFINED __package) - list(APPEND ${__package}_TARGETS ${__target}) - set(${__package}_TARGETS "${${__package}_TARGETS}" CACHE INTERNAL "List of ${__package} targets") - endif() - - if(INSTALL_CREATE_DISTRIB) - if(MSVC AND NOT BUILD_SHARED_LIBS) - set(__target "${ARGV0}") - - set(isArchive 0) - set(isDst 0) - unset(__dst) - foreach(e ${ARGN}) - if(isDst EQUAL 1) - set(__dst "${e}") - break() - endif() - if(isArchive EQUAL 1 AND e STREQUAL "DESTINATION") - set(isDst 1) - endif() - if(e STREQUAL "ARCHIVE") - set(isArchive 1) - else() - set(isArchive 0) - endif() - endforeach() - -# message(STATUS "Process ${__target} dst=${__dst}...") - if(DEFINED __dst) - get_target_property(fname ${__target} LOCATION_DEBUG) - if(fname MATCHES "\\.lib$") - string(REGEX REPLACE "\\.lib$" ".pdb" fname "${fname}") - install(FILES ${fname} DESTINATION ${__dst} CONFIGURATIONS Debug) - endif() - - get_target_property(fname ${__target} LOCATION_RELEASE) - if(fname MATCHES "\\.lib$") - string(REGEX REPLACE "\\.lib$" ".pdb" fname "${fname}") - install(FILES ${fname} DESTINATION ${__dst} CONFIGURATIONS Release) - endif() - endif() - endif() - endif() -endfunction() - - -# read set of version defines from the header file -macro(ocv_parse_header FILENAME FILE_VAR) - set(vars_regex "") - set(__parnet_scope OFF) - set(__add_cache OFF) - foreach(name ${ARGN}) - if("${name}" STREQUAL "PARENT_SCOPE") - set(__parnet_scope ON) - elseif("${name}" STREQUAL "CACHE") - set(__add_cache ON) - elseif(vars_regex) - set(vars_regex "${vars_regex}|${name}") - else() - set(vars_regex "${name}") - endif() - endforeach() - if(EXISTS "${FILENAME}") - file(STRINGS "${FILENAME}" ${FILE_VAR} REGEX "#define[ \t]+(${vars_regex})[ \t]+[0-9]+" ) - else() - unset(${FILE_VAR}) - endif() - foreach(name ${ARGN}) - if(NOT "${name}" STREQUAL "PARENT_SCOPE" AND NOT "${name}" STREQUAL "CACHE") - if(${FILE_VAR}) - if(${FILE_VAR} MATCHES ".+[ \t]${name}[ \t]+([0-9]+).*") - string(REGEX REPLACE ".+[ \t]${name}[ \t]+([0-9]+).*" "\\1" ${name} "${${FILE_VAR}}") - else() - set(${name} "") - endif() - if(__add_cache) - set(${name} ${${name}} CACHE INTERNAL "${name} parsed from ${FILENAME}" FORCE) - elseif(__parnet_scope) - set(${name} "${${name}}" PARENT_SCOPE) - endif() - else() - unset(${name} CACHE) - endif() - endif() - endforeach() -endmacro() - -# read single version define from the header file -macro(ocv_parse_header2 LIBNAME HDR_PATH VARNAME) - ocv_clear_vars(${LIBNAME}_VERSION_MAJOR - ${LIBNAME}_VERSION_MAJOR - ${LIBNAME}_VERSION_MINOR - ${LIBNAME}_VERSION_PATCH - ${LIBNAME}_VERSION_TWEAK - ${LIBNAME}_VERSION_STRING) - set(${LIBNAME}_H "") - if(EXISTS "${HDR_PATH}") - file(STRINGS "${HDR_PATH}" ${LIBNAME}_H REGEX "^#define[ \t]+${VARNAME}[ \t]+\"[^\"]*\".*$" LIMIT_COUNT 1) - endif() - - if(${LIBNAME}_H) - string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MAJOR "${${LIBNAME}_H}") - string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MINOR "${${LIBNAME}_H}") - string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_PATCH "${${LIBNAME}_H}") - set(${LIBNAME}_VERSION_MAJOR ${${LIBNAME}_VERSION_MAJOR} ${ARGN}) - set(${LIBNAME}_VERSION_MINOR ${${LIBNAME}_VERSION_MINOR} ${ARGN}) - set(${LIBNAME}_VERSION_PATCH ${${LIBNAME}_VERSION_PATCH} ${ARGN}) - set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_MAJOR}.${${LIBNAME}_VERSION_MINOR}.${${LIBNAME}_VERSION_PATCH}") - - # append a TWEAK version if it exists: - set(${LIBNAME}_VERSION_TWEAK "") - if("${${LIBNAME}_H}" MATCHES "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$") - set(${LIBNAME}_VERSION_TWEAK "${CMAKE_MATCH_1}" ${ARGN}) - endif() - if(${LIBNAME}_VERSION_TWEAK) - set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}.${${LIBNAME}_VERSION_TWEAK}" ${ARGN}) - else() - set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}" ${ARGN}) - endif() - endif() -endmacro() - -# read single version info from the pkg file -macro(ocv_parse_pkg LIBNAME PKG_PATH SCOPE) - if(EXISTS "${PKG_PATH}/${LIBNAME}.pc") - file(STRINGS "${PKG_PATH}/${LIBNAME}.pc" line_to_parse REGEX "^Version:[ \t]+[0-9.]*.*$" LIMIT_COUNT 1) - STRING(REGEX REPLACE ".*Version: ([^ ]+).*" "\\1" ALIASOF_${LIBNAME}_VERSION "${line_to_parse}" ) - endif() -endmacro() - -################################################################################################ -# short command to setup source group -function(ocv_source_group group) - cmake_parse_arguments(OCV_SOURCE_GROUP "" "" "GLOB" ${ARGN}) - file(GLOB srcs ${OCV_SOURCE_GROUP_GLOB}) - source_group(${group} FILES ${srcs}) -endfunction() diff --git a/cmake/OpenCVVersion.cmake b/cmake/OpenCVVersion.cmake deleted file mode 100644 index 03de980..0000000 --- a/cmake/OpenCVVersion.cmake +++ /dev/null @@ -1,19 +0,0 @@ -SET(OPENCV_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/modules/core/include/opencv2/core/version.hpp") -FILE(STRINGS "${OPENCV_VERSION_FILE}" OPENCV_VERSION_PARTS REGEX "#define CV_VERSION_[A-Z]+[ ]+[0-9]+" ) - -string(REGEX REPLACE ".+CV_VERSION_EPOCH[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_MAJOR "${OPENCV_VERSION_PARTS}") -string(REGEX REPLACE ".+CV_VERSION_MAJOR[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_MINOR "${OPENCV_VERSION_PARTS}") -string(REGEX REPLACE ".+CV_VERSION_MINOR[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_PATCH "${OPENCV_VERSION_PARTS}") -string(REGEX REPLACE ".+CV_VERSION_REVISION[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_TWEAK "${OPENCV_VERSION_PARTS}") - -set(OPENCV_VERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}") -if(OPENCV_VERSION_TWEAK GREATER 0) - set(OPENCV_VERSION "${OPENCV_VERSION}.${OPENCV_VERSION_TWEAK}") -endif() - -set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}") -set(OPENCV_LIBVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}") - -# create a dependency on version file -# we never use output of the following command but cmake will rerun automatically if the version file changes -configure_file("${OPENCV_VERSION_FILE}" "${CMAKE_BINARY_DIR}/junk/version.junk" COPYONLY) diff --git a/cmake/checks/OpenCVDetectCudaArch.cu b/cmake/checks/OpenCVDetectCudaArch.cu deleted file mode 100644 index 9d7086c..0000000 --- a/cmake/checks/OpenCVDetectCudaArch.cu +++ /dev/null @@ -1,14 +0,0 @@ -#include -int main() -{ - int count = 0; - if (cudaSuccess != cudaGetDeviceCount(&count)){return -1;} - if (count == 0) {return -1;} - for (int device = 0; device < count; ++device) - { - cudaDeviceProp prop; - if (cudaSuccess != cudaGetDeviceProperties(&prop, device)){ continue;} - printf("%d.%d ", prop.major, prop.minor); - } - return 0; -} diff --git a/cmake/checks/opencl.cpp b/cmake/checks/opencl.cpp deleted file mode 100644 index 95a36f3..0000000 --- a/cmake/checks/opencl.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#if defined __APPLE__ -#include -#else -#include -#endif - -#ifndef _MSC_VER -#ifdef CL_VERSION_1_2 -#error OpenCL is valid -#else -#error OpenCL check failed -#endif -#else -#ifdef CL_VERSION_1_2 -#pragma message ("OpenCL is valid") -#else -#pragma message ("OpenCL check failed") -#endif -#endif - -int main(int /*argc*/, char** /*argv*/) -{ - return 0; -} diff --git a/cmake/checks/vfwtest.cpp b/cmake/checks/vfwtest.cpp deleted file mode 100644 index 8d8ecb2..0000000 --- a/cmake/checks/vfwtest.cpp +++ /dev/null @@ -1,10 +0,0 @@ - -#include -#include - -int main() -{ - AVIFileInit(); - AVIFileExit(); - return 0; -} diff --git a/cmake/checks/win32uitest.cpp b/cmake/checks/win32uitest.cpp deleted file mode 100644 index f475e1c..0000000 --- a/cmake/checks/win32uitest.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include - -int main(int argc, char** argv) -{ - CreateWindow(NULL /*lpClassName*/, NULL /*lpWindowName*/, 0 /*dwStyle*/, 0 /*x*/, - 0 /*y*/, 0 /*nWidth*/, 0 /*nHeight*/, NULL /*hWndParent*/, NULL /*hMenu*/, - NULL /*hInstance*/, NULL /*lpParam*/); - DeleteDC(NULL); - - return 0; -} diff --git a/cmake/checks/winrttest.cpp b/cmake/checks/winrttest.cpp deleted file mode 100644 index 9ec0c9a..0000000 --- a/cmake/checks/winrttest.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int main(int, char**) -{ - return 0; -} diff --git a/cmake/cl2cpp.cmake b/cmake/cl2cpp.cmake deleted file mode 100644 index 1916c3e..0000000 --- a/cmake/cl2cpp.cmake +++ /dev/null @@ -1,68 +0,0 @@ -file(GLOB cl_list "${CL_DIR}/*.cl" ) -list(SORT cl_list) - -string(REPLACE ".cpp" ".hpp" OUTPUT_HPP "${OUTPUT}") -get_filename_component(OUTPUT_HPP_NAME "${OUTPUT_HPP}" NAME) - -set(STR_CPP "// This file is auto-generated. Do not edit! - -#include \"precomp.hpp\" -#include \"${OUTPUT_HPP_NAME}\" - -namespace cv -{ -namespace ocl -{ -") - -set(STR_HPP "// This file is auto-generated. Do not edit! - -#include \"opencv2/ocl/private/util.hpp\" - -namespace cv -{ -namespace ocl -{ - -") - -foreach(cl ${cl_list}) - get_filename_component(cl_filename "${cl}" NAME_WE) - #message("${cl_filename}") - - file(READ "${cl}" lines) - - string(REPLACE "\r" "" lines "${lines}\n") - string(REPLACE "\t" " " lines "${lines}") - - string(REGEX REPLACE "/\\*([^*]/|\\*[^/]|[^*/])*\\*/" "" lines "${lines}") # multiline comments - string(REGEX REPLACE "/\\*([^\n])*\\*/" "" lines "${lines}") # single-line comments - string(REGEX REPLACE "[ ]*//[^\n]*\n" "\n" lines "${lines}") # single-line comments - string(REGEX REPLACE "\n[ ]*(\n[ ]*)*" "\n" lines "${lines}") # empty lines & leading whitespace - string(REGEX REPLACE "^\n" "" lines "${lines}") # leading new line - - string(REPLACE "\\" "\\\\" lines "${lines}") - string(REPLACE "\"" "\\\"" lines "${lines}") - string(REPLACE "\n" "\\n\"\n\"" lines "${lines}") - - string(REGEX REPLACE "\"$" "" lines "${lines}") # unneeded " at the eof - - string(MD5 hash "${lines}") - - set(STR_CPP "${STR_CPP}const struct ProgramEntry ${cl_filename}={\"${cl_filename}\",\n\"${lines}, \"${hash}\"};\n") - set(STR_HPP "${STR_HPP}extern const struct ProgramEntry ${cl_filename};\n") -endforeach() - -set(STR_CPP "${STR_CPP}}\n}\n") -set(STR_HPP "${STR_HPP}}\n}\n") - -file(WRITE "${OUTPUT}" "${STR_CPP}") - -if(EXISTS "${OUTPUT_HPP}") - file(READ "${OUTPUT_HPP}" hpp_lines) -endif() -if("${hpp_lines}" STREQUAL "${STR_HPP}") - message(STATUS "${OUTPUT_HPP} contains same content") -else() - file(WRITE "${OUTPUT_HPP}" "${STR_HPP}") -endif() diff --git a/cmake/templates/OpenCV.mk.in b/cmake/templates/OpenCV.mk.in deleted file mode 100644 index 77229ec..0000000 --- a/cmake/templates/OpenCV.mk.in +++ /dev/null @@ -1,211 +0,0 @@ -# In order to compile your application under cygwin -# you might need to define NDK_USE_CYGPATH=1 before calling the ndk-build - -USER_LOCAL_PATH:=$(LOCAL_PATH) - -USER_LOCAL_C_INCLUDES:=$(LOCAL_C_INCLUDES) -USER_LOCAL_CFLAGS:=$(LOCAL_CFLAGS) -USER_LOCAL_STATIC_LIBRARIES:=$(LOCAL_STATIC_LIBRARIES) -USER_LOCAL_SHARED_LIBRARIES:=$(LOCAL_SHARED_LIBRARIES) -USER_LOCAL_LDLIBS:=$(LOCAL_LDLIBS) - -LOCAL_PATH:=$(subst ?,,$(firstword ?$(subst \, ,$(subst /, ,$(call my-dir))))) - -OPENCV_TARGET_ARCH_ABI:=$(TARGET_ARCH_ABI) -OPENCV_THIS_DIR:=$(patsubst $(LOCAL_PATH)\\%,%,$(patsubst $(LOCAL_PATH)/%,%,$(call my-dir))) -OPENCV_MK_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) -OPENCV_LIBS_DIR:=@OPENCV_LIBS_DIR_CONFIGCMAKE@ -OPENCV_3RDPARTY_LIBS_DIR:=@OPENCV_3RDPARTY_LIBS_DIR_CONFIGCMAKE@ -OPENCV_BASEDIR:=@OPENCV_BASE_INCLUDE_DIR_CONFIGCMAKE@ -OPENCV_LOCAL_C_INCLUDES:=@OPENCV_INCLUDE_DIRS_CONFIGCMAKE@ -OPENCV_MODULES:=@OPENCV_MODULES_CONFIGMAKE@ - -OPENCV_HAVE_GPU_MODULE:=@OPENCV_HAVE_GPU_MODULE_CONFIGMAKE@ -OPENCV_USE_GPU_MODULE:= - -ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) - ifeq ($(OPENCV_HAVE_GPU_MODULE),on) - ifneq ($(CUDA_TOOLKIT_DIR),) - OPENCV_USE_GPU_MODULE:=on - endif - endif - OPENCV_DYNAMICUDA_MODULE:=@OPENCV_DYNAMICUDA_MODULE_CONFIGMAKE@ -else - OPENCV_DYNAMICUDA_MODULE:= -endif - -CUDA_RUNTIME_LIBS:=@CUDA_RUNTIME_LIBS_CONFIGMAKE@ - -ifeq ($(OPENCV_LIB_TYPE),) - OPENCV_LIB_TYPE:=@OPENCV_LIBTYPE_CONFIGMAKE@ -endif - -ifeq ($(OPENCV_LIB_TYPE),SHARED) - OPENCV_LIBS:=@OPENCV_LIBS_CONFIGMAKE@ - OPENCV_LIB_TYPE:=@OPENCV_LIBTYPE_CONFIGMAKE@ -else - OPENCV_LIBS:=$(OPENCV_MODULES) - OPENCV_LIB_TYPE:=@OPENCV_STATIC_LIBTYPE_CONFIGMAKE@ -endif - -ifeq ($(OPENCV_LIB_TYPE),SHARED) - OPENCV_3RDPARTY_COMPONENTS:= - OPENCV_EXTRA_COMPONENTS:= -else - ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) - OPENCV_3RDPARTY_COMPONENTS:=@OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE@ - OPENCV_EXTRA_COMPONENTS:=@OPENCV_EXTRA_COMPONENTS_CONFIGMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),x86) - OPENCV_3RDPARTY_COMPONENTS:=@OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE@ - OPENCV_EXTRA_COMPONENTS:=@OPENCV_EXTRA_COMPONENTS_CONFIGMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),armeabi) - OPENCV_3RDPARTY_COMPONENTS:=@OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE_NO_TBB@ - OPENCV_EXTRA_COMPONENTS:=@OPENCV_EXTRA_COMPONENTS_CONFIGMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),mips) - OPENCV_3RDPARTY_COMPONENTS:=@OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE@ - OPENCV_EXTRA_COMPONENTS:=@OPENCV_EXTRA_COMPONENTS_CONFIGMAKE@ - endif -endif - -ifeq ($(OPENCV_CAMERA_MODULES),on) - ifeq ($(TARGET_ARCH_ABI),armeabi) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_ARMEABI_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_ARMEABI_V7A_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),x86) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_X86_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),mips) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_MIPS_CONFIGCMAKE@ - endif -else - OPENCV_CAMERA_MODULES:= -endif - -ifeq ($(OPENCV_LIB_TYPE),SHARED) - OPENCV_LIB_SUFFIX:=so -else - OPENCV_LIB_SUFFIX:=a - OPENCV_INSTALL_MODULES:=on -endif - -define add_opencv_module - include $(CLEAR_VARS) - LOCAL_MODULE:=opencv_$1 - LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/libopencv_$1.$(OPENCV_LIB_SUFFIX) - include $(PREBUILT_$(OPENCV_LIB_TYPE)_LIBRARY) -endef - -define add_cuda_module - include $(CLEAR_VARS) - LOCAL_MODULE:=$1 - LOCAL_SRC_FILES:=$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib/lib$1.so - include $(PREBUILT_SHARED_LIBRARY) -endef - -define add_opencv_3rdparty_component - include $(CLEAR_VARS) - LOCAL_MODULE:=$1 - LOCAL_SRC_FILES:=$(OPENCV_3RDPARTY_LIBS_DIR)/lib$1.a - include $(PREBUILT_STATIC_LIBRARY) -endef - -define add_opencv_camera_module - include $(CLEAR_VARS) - LOCAL_MODULE:=$1 - LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/lib$1.so - include $(PREBUILT_SHARED_LIBRARY) -endef - -ifeq ($(OPENCV_MK_$(OPENCV_TARGET_ARCH_ABI)_ALREADY_INCLUDED),) - ifeq ($(OPENCV_INSTALL_MODULES),on) - $(foreach module,$(OPENCV_LIBS),$(eval $(call add_opencv_module,$(module)))) - ifneq ($(OPENCV_DYNAMICUDA_MODULE),) - ifeq ($(OPENCV_LIB_TYPE),SHARED) - $(eval $(call add_opencv_module,$(OPENCV_DYNAMICUDA_MODULE))) - endif - endif - endif - - ifeq ($(OPENCV_USE_GPU_MODULE),on) - ifeq ($(INSTALL_CUDA_LIBRARIES),on) - $(foreach module,$(CUDA_RUNTIME_LIBS),$(eval $(call add_cuda_module,$(module)))) - endif - endif - - $(foreach module,$(OPENCV_3RDPARTY_COMPONENTS),$(eval $(call add_opencv_3rdparty_component,$(module)))) - $(foreach module,$(OPENCV_CAMERA_MODULES),$(eval $(call add_opencv_camera_module,$(module)))) - - ifneq ($(OPENCV_BASEDIR),) - OPENCV_LOCAL_C_INCLUDES += $(foreach mod, $(OPENCV_MODULES), $(OPENCV_BASEDIR)/modules/$(mod)/include) - ifeq ($(OPENCV_USE_GPU_MODULE),on) - OPENCV_LOCAL_C_INCLUDES += $(OPENCV_BASEDIR)/modules/gpu/include - endif - endif - - #turn off module installation to prevent their redefinition - OPENCV_MK_$(OPENCV_TARGET_ARCH_ABI)_ALREADY_INCLUDED:=on -endif - -ifeq ($(OPENCV_MK_$(OPENCV_TARGET_ARCH_ABI)_GPU_ALREADY_INCLUDED),) - ifeq ($(OPENCV_USE_GPU_MODULE),on) - include $(CLEAR_VARS) - LOCAL_MODULE:=opencv_gpu - LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/libopencv_gpu.a - include $(PREBUILT_STATIC_LIBRARY) - endif - OPENCV_MK_$(OPENCV_TARGET_ARCH_ABI)_GPU_ALREADY_INCLUDED:=on -endif - -ifeq ($(OPENCV_LOCAL_CFLAGS),) - OPENCV_LOCAL_CFLAGS := -fPIC -DANDROID -fsigned-char -endif - -include $(CLEAR_VARS) - -LOCAL_C_INCLUDES:=$(USER_LOCAL_C_INCLUDES) -LOCAL_CFLAGS:=$(USER_LOCAL_CFLAGS) -LOCAL_STATIC_LIBRARIES:=$(USER_LOCAL_STATIC_LIBRARIES) -LOCAL_SHARED_LIBRARIES:=$(USER_LOCAL_SHARED_LIBRARIES) -LOCAL_LDLIBS:=$(USER_LOCAL_LDLIBS) - -LOCAL_C_INCLUDES += $(OPENCV_LOCAL_C_INCLUDES) -LOCAL_CFLAGS += $(OPENCV_LOCAL_CFLAGS) - -ifeq ($(OPENCV_USE_GPU_MODULE),on) - LOCAL_C_INCLUDES += $(CUDA_TOOLKIT_DIR)/include -endif - -ifeq ($(OPENCV_INSTALL_MODULES),on) - LOCAL_$(OPENCV_LIB_TYPE)_LIBRARIES += $(foreach mod, $(OPENCV_LIBS), opencv_$(mod)) - ifeq ($(OPENCV_LIB_TYPE),SHARED) - ifneq ($(OPENCV_DYNAMICUDA_MODULE),) - LOCAL_$(OPENCV_LIB_TYPE)_LIBRARIES += $(OPENCV_DYNAMICUDA_MODULE) - endif - endif -else - LOCAL_LDLIBS += -L$(call host-path,$(LOCAL_PATH)/$(OPENCV_LIBS_DIR)) $(foreach lib, $(OPENCV_LIBS), -lopencv_$(lib)) -endif - -ifeq ($(OPENCV_LIB_TYPE),STATIC) - LOCAL_STATIC_LIBRARIES += $(OPENCV_3RDPARTY_COMPONENTS) -endif - -LOCAL_LDLIBS += $(foreach lib,$(OPENCV_EXTRA_COMPONENTS), -l$(lib)) - -ifeq ($(OPENCV_USE_GPU_MODULE),on) - ifeq ($(INSTALL_CUDA_LIBRARIES),on) - LOCAL_SHARED_LIBRARIES += $(foreach mod, $(CUDA_RUNTIME_LIBS), $(mod)) - else - LOCAL_LDLIBS += -L$(CUDA_TOOLKIT_DIR)/targets/armv7-linux-androideabi/lib $(foreach lib, $(CUDA_RUNTIME_LIBS), -l$(lib)) - endif - LOCAL_STATIC_LIBRARIES+=libopencv_gpu -endif - -#restore the LOCAL_PATH -LOCAL_PATH:=$(USER_LOCAL_PATH) diff --git a/cmake/templates/OpenCVConfig-version.cmake.in b/cmake/templates/OpenCVConfig-version.cmake.in deleted file mode 100644 index 0b432a0..0000000 --- a/cmake/templates/OpenCVConfig-version.cmake.in +++ /dev/null @@ -1,14 +0,0 @@ -set(OpenCV_VERSION @OPENCV_VERSION@) -set(PACKAGE_VERSION ${OpenCV_VERSION}) - -set(PACKAGE_VERSION_EXACT False) -set(PACKAGE_VERSION_COMPATIBLE False) - -if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) - set(PACKAGE_VERSION_EXACT True) - set(PACKAGE_VERSION_COMPATIBLE True) -endif() - -if(PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION) - set(PACKAGE_VERSION_COMPATIBLE True) -endif() diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in deleted file mode 100644 index 3b01110..0000000 --- a/cmake/templates/OpenCVConfig.cmake.in +++ /dev/null @@ -1,337 +0,0 @@ -# =================================================================================== -# The OpenCV CMake configuration file -# -# ** File generated automatically, do not modify ** -# -# Usage from an external project: -# In your CMakeLists.txt, add these lines: -# -# FIND_PACKAGE(OpenCV REQUIRED) -# TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${OpenCV_LIBS}) -# -# Or you can search for specific OpenCV modules: -# -# FIND_PACKAGE(OpenCV REQUIRED core highgui) -# -# If the module is found then OPENCV__FOUND is set to TRUE. -# -# This file will define the following variables: -# - OpenCV_LIBS : The list of all imported targets for OpenCV modules. -# - OpenCV_INCLUDE_DIRS : The OpenCV include directories. -# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability. -# - OpenCV_ANDROID_NATIVE_API_LEVEL : Minimum required level of Android API. -# - OpenCV_VERSION : The version of this OpenCV build: "@OPENCV_VERSION@" -# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION: "@OPENCV_VERSION_MAJOR@" -# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION: "@OPENCV_VERSION_MINOR@" -# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION: "@OPENCV_VERSION_PATCH@" -# - OpenCV_VERSION_TWEAK : Tweak version part of OpenCV_VERSION: "@OPENCV_VERSION_TWEAK@" -# -# Advanced variables: -# - OpenCV_SHARED : Use OpenCV as shared library -# - OpenCV_CONFIG_PATH : Path to this OpenCVConfig.cmake -# - OpenCV_INSTALL_PATH : OpenCV location (not set on Windows) -# - OpenCV_LIB_COMPONENTS : Present OpenCV modules list -# - OpenCV_USE_MANGLED_PATHS : Mangled OpenCV path flag -# - OpenCV_MODULES_SUFFIX : The suffix for OpenCVModules-XXX.cmake file -# - OpenCV_HAVE_ANDROID_CAMERA : Presence of Android native camera wrappers -# -# =================================================================================== - -if(NOT DEFINED OpenCV_MODULES_SUFFIX) - if(ANDROID) - string(REPLACE - _ OpenCV_MODULES_SUFFIX "_${ANDROID_NDK_ABI_NAME}") - else() - set(OpenCV_MODULES_SUFFIX "") - endif() -endif() - -if(NOT TARGET opencv_core) - include(${CMAKE_CURRENT_LIST_DIR}/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake) -endif() - -# TODO All things below should be reviewed. What is about of moving this code into related modules (special vars/hooks/files) - -# Version Compute Capability from which OpenCV has been compiled is remembered -set(OpenCV_COMPUTE_CAPABILITIES @OpenCV_CUDA_CC_CONFIGCMAKE@) - -set(OpenCV_CUDA_VERSION @OpenCV_CUDA_VERSION@) -set(OpenCV_USE_CUBLAS @HAVE_CUBLAS@) -set(OpenCV_USE_CUFFT @HAVE_CUFFT@) -set(OpenCV_USE_NVCUVID @HAVE_NVCUVID@) - -# Android API level from which OpenCV has been compiled is remembered -set(OpenCV_ANDROID_NATIVE_API_LEVEL @OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE@) - -# Some additional settings are required if OpenCV is built as static libs -set(OpenCV_SHARED @BUILD_SHARED_LIBS@) - -# Enables mangled install paths, that help with side by side installs -set(OpenCV_USE_MANGLED_PATHS @OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE@) - -# Extract the directory where *this* file has been installed (determined at cmake run-time) -get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE) - -if(NOT WIN32 OR OpenCV_ANDROID_NATIVE_API_LEVEL GREATER 0) - if(OpenCV_ANDROID_NATIVE_API_LEVEL GREATER 0) - set(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../../..") - else() - set(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../..") - endif() - # Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings - if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 2.8) - get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_INSTALL_PATH}" ABSOLUTE) - else() - get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_INSTALL_PATH}" REALPATH) - endif() -endif() - -# Presence of Android native camera wrappers -set(OpenCV_HAVE_ANDROID_CAMERA @HAVE_opencv_androidcamera@) - -# ====================================================== -# Include directories to add to the user project: -# ====================================================== - -# Provide the include directories to the caller -set(OpenCV_INCLUDE_DIRS @OpenCV_INCLUDE_DIRS_CONFIGCMAKE@) -include_directories(${OpenCV_INCLUDE_DIRS}) - -# ====================================================== -# Link directories to add to the user project: -# ====================================================== - -# Provide the libs directories to the caller -set(OpenCV_LIB_DIR_OPT @OpenCV_LIB_DIRS_CONFIGCMAKE@ CACHE PATH "Path where release OpenCV libraries are located") -set(OpenCV_LIB_DIR_DBG @OpenCV_LIB_DIRS_CONFIGCMAKE@ CACHE PATH "Path where debug OpenCV libraries are located") -set(OpenCV_3RDPARTY_LIB_DIR_OPT @OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE@ CACHE PATH "Path where release 3rdpaty OpenCV dependencies are located") -set(OpenCV_3RDPARTY_LIB_DIR_DBG @OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE@ CACHE PATH "Path where debug 3rdpaty OpenCV dependencies are located") -mark_as_advanced(FORCE OpenCV_LIB_DIR_OPT OpenCV_LIB_DIR_DBG OpenCV_3RDPARTY_LIB_DIR_OPT OpenCV_3RDPARTY_LIB_DIR_DBG OpenCV_CONFIG_PATH) - -# ====================================================== -# Version variables: -# ====================================================== -SET(OpenCV_VERSION @OPENCV_VERSION@) -SET(OpenCV_VERSION_MAJOR @OPENCV_VERSION_MAJOR@) -SET(OpenCV_VERSION_MINOR @OPENCV_VERSION_MINOR@) -SET(OpenCV_VERSION_PATCH @OPENCV_VERSION_PATCH@) -SET(OpenCV_VERSION_TWEAK @OPENCV_VERSION_TWEAK@) - -# ==================================================================== -# Link libraries: e.g. opencv_core;opencv_imgproc; etc... -# ==================================================================== - -SET(OpenCV_LIB_COMPONENTS @OPENCV_MODULES_CONFIGCMAKE@) - -# ============================================================== -# Extra include directories, needed by OpenCV 2 new structure -# ============================================================== -SET(OpenCV2_INCLUDE_DIRS @OpenCV2_INCLUDE_DIRS_CONFIGCMAKE@) -if(OpenCV2_INCLUDE_DIRS) - include_directories(${OpenCV2_INCLUDE_DIRS}) - list(APPEND OpenCV_INCLUDE_DIRS ${OpenCV2_INCLUDE_DIRS}) - - set(OpenCV_ADD_DEBUG_RELEASE @OpenCV_ADD_DEBUG_RELEASE_CONFIGCMAKE@) - if(OpenCV_ADD_DEBUG_RELEASE) - set(OpenCV_LIB_DIR_OPT "${OpenCV_LIB_DIR_OPT}/Release") - set(OpenCV_LIB_DIR_DBG "${OpenCV_LIB_DIR_DBG}/Debug") - set(OpenCV_3RDPARTY_LIB_DIR_OPT "${OpenCV_3RDPARTY_LIB_DIR_OPT}/Release") - set(OpenCV_3RDPARTY_LIB_DIR_DBG "${OpenCV_3RDPARTY_LIB_DIR_DBG}/Debug") - endif() -endif() - -# ============================================================== -# Check OpenCV availability -# ============================================================== -if(ANDROID AND OpenCV_ANDROID_NATIVE_API_LEVEL GREATER ANDROID_NATIVE_API_LEVEL) - message(FATAL_ERROR "Minimum required by OpenCV API level is android-${OpenCV_ANDROID_NATIVE_API_LEVEL}") - #always FATAL_ERROR because we can't say to the caller that OpenCV is not found - #http://www.mail-archive.com/cmake@cmake.org/msg37831.html - if(OpenCV_FIND_REQUIRED) - message(FATAL_ERROR "Minimum required by OpenCV API level is android-${OpenCV_ANDROID_NATIVE_API_LEVEL}") - elseif(NOT OpenCV_FIND_QUIETLY) - message(WARNING "Minimum required by OpenCV API level is android-${OpenCV_ANDROID_NATIVE_API_LEVEL}") - endif() - set(OpenCV_FOUND "OpenCV_FOUND-NOTFOUND") - return()#Android toolchain requires CMake > 2.6 -endif() - -# ============================================================== -# Form list of modules (components) to find -# ============================================================== -if(NOT OpenCV_FIND_COMPONENTS) - set(OpenCV_FIND_COMPONENTS ${OpenCV_LIB_COMPONENTS}) - list(REMOVE_ITEM OpenCV_FIND_COMPONENTS opencv_java) - if(GTest_FOUND OR GTEST_FOUND) - list(REMOVE_ITEM OpenCV_FIND_COMPONENTS opencv_ts) - endif() -endif() - -# expand short module names and see if requested components exist -set(OpenCV_FIND_COMPONENTS_ "") -foreach(__cvcomponent ${OpenCV_FIND_COMPONENTS}) - if(NOT __cvcomponent MATCHES "^opencv_") - set(__cvcomponent opencv_${__cvcomponent}) - endif() - list(FIND OpenCV_LIB_COMPONENTS ${__cvcomponent} __cvcomponentIdx) - if(__cvcomponentIdx LESS 0) - #requested component is not found... - if(OpenCV_FIND_REQUIRED) - message(FATAL_ERROR "${__cvcomponent} is required but was not found") - elseif(NOT OpenCV_FIND_QUIETLY) - message(WARNING "${__cvcomponent} is required but was not found") - endif() - #indicate that module is NOT found - string(TOUPPER "${__cvcomponent}" __cvcomponent) - set(${__cvcomponent}_FOUND "${__cvcomponent}_FOUND-NOTFOUND") - else() - list(APPEND OpenCV_FIND_COMPONENTS_ ${__cvcomponent}) - # Not using list(APPEND) here, because OpenCV_LIBS may not exist yet. - # Also not clearing OpenCV_LIBS anywhere, so that multiple calls - # to find_package(OpenCV) with different component lists add up. - set(OpenCV_LIBS ${OpenCV_LIBS} "${__cvcomponent}") - #indicate that module is found - string(TOUPPER "${__cvcomponent}" __cvcomponent) - set(${__cvcomponent}_FOUND 1) - endif() -endforeach() -set(OpenCV_FIND_COMPONENTS ${OpenCV_FIND_COMPONENTS_}) - -# ============================================================== -# Resolve dependencies -# ============================================================== -if(OpenCV_USE_MANGLED_PATHS) - set(OpenCV_LIB_SUFFIX ".${OpenCV_VERSION_MAJOR}.${OpenCV_VERSION_MINOR}.${OpenCV_VERSION_PATCH}") -else() - set(OpenCV_LIB_SUFFIX "") -endif() - -foreach(__opttype OPT DBG) - SET(OpenCV_LIBS_${__opttype} "${OpenCV_LIBS}") - SET(OpenCV_EXTRA_LIBS_${__opttype} "") - - # CUDA - if(OpenCV_CUDA_VERSION) - if(NOT CUDA_FOUND) - find_package(CUDA ${OpenCV_CUDA_VERSION} EXACT REQUIRED) - else() - if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION) - message(FATAL_ERROR "OpenCV static library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") - endif() - endif() - - set(OpenCV_CUDA_LIBS_ABSPATH ${CUDA_LIBRARIES}) - - if(${CUDA_VERSION} VERSION_LESS "5.5") - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_npp_LIBRARY}) - else() - find_cuda_helper_libs(nppc) - find_cuda_helper_libs(nppi) - find_cuda_helper_libs(npps) - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nppc_LIBRARY} ${CUDA_nppi_LIBRARY} ${CUDA_npps_LIBRARY}) - endif() - - if(OpenCV_USE_CUBLAS) - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUBLAS_LIBRARIES}) - endif() - - if(OpenCV_USE_CUFFT) - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_CUFFT_LIBRARIES}) - endif() - - if(OpenCV_USE_NVCUVID) - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvid_LIBRARIES}) - endif() - - if(WIN32) - list(APPEND OpenCV_CUDA_LIBS_ABSPATH ${CUDA_nvcuvenc_LIBRARIES}) - endif() - - set(OpenCV_CUDA_LIBS_RELPATH "") - foreach(l ${OpenCV_CUDA_LIBS_ABSPATH}) - get_filename_component(_tmp ${l} PATH) - list(APPEND OpenCV_CUDA_LIBS_RELPATH ${_tmp}) - endforeach() - - list(REMOVE_DUPLICATES OpenCV_CUDA_LIBS_RELPATH) - link_directories(${OpenCV_CUDA_LIBS_RELPATH}) - endif() -endforeach() - -# ============================================================== -# Android camera helper macro -# ============================================================== -if(OpenCV_HAVE_ANDROID_CAMERA) - macro(COPY_NATIVE_CAMERA_LIBS target) - get_target_property(target_location ${target} LOCATION) - get_filename_component(target_location "${target_location}" PATH) - file(GLOB camera_wrappers "${OpenCV_LIB_DIR_OPT}/libnative_camera_r*.so") - foreach(wrapper ${camera_wrappers}) - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${target_location}" - ) - endforeach() - endmacro() -endif() - -# ============================================================== -# Compatibility stuff -# ============================================================== -if(CMAKE_BUILD_TYPE MATCHES "Debug") - SET(OpenCV_LIB_DIR ${OpenCV_LIB_DIR_DBG} ${OpenCV_3RDPARTY_LIB_DIR_DBG}) -else() - SET(OpenCV_LIB_DIR ${OpenCV_LIB_DIR_OPT} ${OpenCV_3RDPARTY_LIB_DIR_OPT}) -endif() -set(OpenCV_LIBRARIES ${OpenCV_LIBS}) - -if(CMAKE_CROSSCOMPILING AND OpenCV_SHARED AND (CMAKE_SYSTEM_NAME MATCHES "Linux")) - foreach(dir ${OpenCV_LIB_DIR}) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath-link,${dir}") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath-link,${dir}") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-rpath-link,${dir}") - endforeach() -endif() - - - -# -# Some macroses for samples -# -macro(ocv_check_dependencies) - set(OCV_DEPENDENCIES_FOUND TRUE) - foreach(d ${ARGN}) - if(NOT TARGET ${d}) - set(OCV_DEPENDENCIES_FOUND FALSE) - break() - endif() - endforeach() -endmacro() - -# adds include directories in such way that directories from the OpenCV source tree go first -function(ocv_include_directories) - set(__add_before "") - file(TO_CMAKE_PATH "${OpenCV_DIR}" __baseDir) - foreach(dir ${ARGN}) - get_filename_component(__abs_dir "${dir}" ABSOLUTE) - if("${__abs_dir}" MATCHES "^${__baseDir}") - list(APPEND __add_before "${dir}") - else() - include_directories(AFTER SYSTEM "${dir}") - endif() - endforeach() - include_directories(BEFORE ${__add_before}) -endfunction() - -macro(ocv_include_modules) - include_directories(BEFORE "${OpenCV_INCLUDE_DIRS}") -endmacro() - -# remove all matching elements from the list -macro(ocv_list_filterout lst regex) - foreach(item ${${lst}}) - if(item MATCHES "${regex}") - list(REMOVE_ITEM ${lst} "${item}") - endif() - endforeach() -endmacro() diff --git a/cmake/templates/cmake_uninstall.cmake.in b/cmake/templates/cmake_uninstall.cmake.in deleted file mode 100644 index 0e63d70..0000000 --- a/cmake/templates/cmake_uninstall.cmake.in +++ /dev/null @@ -1,25 +0,0 @@ -# ----------------------------------------------- -# File that provides "make uninstall" target -# We use the file 'install_manifest.txt' -# ----------------------------------------------- -IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") -ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - -FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) -STRING(REGEX REPLACE "\n" ";" files "${files}") -FOREACH(file ${files}) - MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") - IF(EXISTS "$ENV{DESTDIR}${file}") - EXEC_PROGRAM( - "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - IF(NOT "${rm_retval}" STREQUAL 0) - MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") - ENDIF(NOT "${rm_retval}" STREQUAL 0) - ELSE(EXISTS "$ENV{DESTDIR}${file}") - MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") - ENDIF(EXISTS "$ENV{DESTDIR}${file}") -ENDFOREACH(file) diff --git a/cmake/templates/cvconfig.h.in b/cmake/templates/cvconfig.h.in deleted file mode 100644 index d1c9e65..0000000 --- a/cmake/templates/cvconfig.h.in +++ /dev/null @@ -1,166 +0,0 @@ -/* OpenCV compiled as static or dynamic libs */ -#cmakedefine BUILD_SHARED_LIBS - -/* Compile for 'real' NVIDIA GPU architectures */ -#define CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN}" - -/* Create PTX or BIN for 1.0 compute capability */ -#cmakedefine CUDA_ARCH_BIN_OR_PTX_10 - -/* NVIDIA GPU features are used */ -#define CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES}" - -/* Compile for 'virtual' NVIDIA PTX architectures */ -#define CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX}" - -/* AVFoundation video libraries */ -#cmakedefine HAVE_AVFOUNDATION - -/* V4L capturing support */ -#cmakedefine HAVE_CAMV4L - -/* V4L2 capturing support */ -#cmakedefine HAVE_CAMV4L2 - -/* Carbon windowing environment */ -#cmakedefine HAVE_CARBON - -/* AMD's Basic Linear Algebra Subprograms Library*/ -#cmakedefine HAVE_CLAMDBLAS - -/* AMD's OpenCL Fast Fourier Transform Library*/ -#cmakedefine HAVE_CLAMDFFT - -/* Cocoa API */ -#cmakedefine HAVE_COCOA - -/* C= */ -#cmakedefine HAVE_CSTRIPES - -/* NVidia Cuda Basic Linear Algebra Subprograms (BLAS) API*/ -#cmakedefine HAVE_CUBLAS - -/* NVidia Cuda Runtime API*/ -#cmakedefine HAVE_CUDA - -/* NVidia Cuda Fast Fourier Transform (FFT) API*/ -#cmakedefine HAVE_CUFFT - -/* IEEE1394 capturing support */ -#cmakedefine HAVE_DC1394 - -/* IEEE1394 capturing support - libdc1394 v2.x */ -#cmakedefine HAVE_DC1394_2 - -/* DirectShow Video Capture library */ -#cmakedefine HAVE_DSHOW - -/* Eigen Matrix & Linear Algebra Library */ -#cmakedefine HAVE_EIGEN - -/* FFMpeg video library */ -#cmakedefine HAVE_FFMPEG - -/* ffmpeg's libswscale */ -#cmakedefine HAVE_FFMPEG_SWSCALE - -/* ffmpeg in Gentoo */ -#cmakedefine HAVE_GENTOO_FFMPEG - -/* GStreamer multimedia framework */ -#cmakedefine HAVE_GSTREAMER - -/* GTK+ 2.0 Thread support */ -#cmakedefine HAVE_GTHREAD - -/* Windows Runtime support */ -#cmakedefine HAVE_WINRT - -/* Win32 UI */ -#cmakedefine HAVE_WIN32UI - -/* GTK+ 2.x toolkit */ -#cmakedefine HAVE_GTK - -/* Apple ImageIO Framework */ -#cmakedefine HAVE_IMAGEIO - -/* Intel Perceptual Computing SDK library */ -#cmakedefine HAVE_INTELPERC - -/* Intel Integrated Performance Primitives */ -#cmakedefine HAVE_IPP - -/* JPEG-2000 codec */ -#cmakedefine HAVE_JASPER - -/* IJG JPEG codec */ -#cmakedefine HAVE_JPEG - -/* libpng/png.h needs to be included */ -#cmakedefine HAVE_LIBPNG_PNG_H - -/* V4L/V4L2 capturing support via libv4l */ -#cmakedefine HAVE_LIBV4L - -/* Microsoft Media Foundation Capture library */ -#cmakedefine HAVE_MSMF - -/* NVidia Video Decoding API*/ -#cmakedefine HAVE_NVCUVID - -/* OpenCL Support */ -#cmakedefine HAVE_OPENCL -#cmakedefine HAVE_OPENCL_STATIC - -/* OpenEXR codec */ -#cmakedefine HAVE_OPENEXR - -/* OpenGL support*/ -#cmakedefine HAVE_OPENGL - -/* OpenNI library */ -#cmakedefine HAVE_OPENNI - -/* PNG codec */ -#cmakedefine HAVE_PNG - -/* Qt support */ -#cmakedefine HAVE_QT - -/* Qt OpenGL support */ -#cmakedefine HAVE_QT_OPENGL - -/* QuickTime video libraries */ -#cmakedefine HAVE_QUICKTIME - -/* QTKit video libraries */ -#cmakedefine HAVE_QTKIT - -/* Intel Threading Building Blocks */ -#cmakedefine HAVE_TBB - -/* TIFF codec */ -#cmakedefine HAVE_TIFF - -/* Unicap video capture library */ -#cmakedefine HAVE_UNICAP - -/* Video for Windows support */ -#cmakedefine HAVE_VFW - -/* V4L2 capturing support in videoio.h */ -#cmakedefine HAVE_VIDEOIO - -/* Win32 UI */ -#cmakedefine HAVE_WIN32UI - -/* XIMEA camera support */ -#cmakedefine HAVE_XIMEA - -/* Xine video library */ -#cmakedefine HAVE_XINE - -/* Define if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#cmakedefine WORDS_BIGENDIAN diff --git a/cmake/templates/opencv-XXX.pc.in b/cmake/templates/opencv-XXX.pc.in deleted file mode 100644 index c9dedb0..0000000 --- a/cmake/templates/opencv-XXX.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -# Package Information for pkg-config - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir_old=@includedir@/opencv -includedir_new=@includedir@ - -Name: OpenCV -Description: Open Source Computer Vision Library -Version: @OPENCV_VERSION@ -Libs: @OpenCV_LIB_COMPONENTS@ -Cflags: -I${includedir_old} -I${includedir_new} diff --git a/cmake/templates/opencv_modules.hpp.in b/cmake/templates/opencv_modules.hpp.in deleted file mode 100644 index 1498715..0000000 --- a/cmake/templates/opencv_modules.hpp.in +++ /dev/null @@ -1,9 +0,0 @@ -/* - * ** File generated automatically, do not modify ** - * - * This file defines the list of modules available in current build configuration - * - * -*/ - -@OPENCV_MODULE_DEFINITIONS_CONFIGMAKE@ diff --git a/cmake/templates/opencv_run_all_tests_android.sh.in b/cmake/templates/opencv_run_all_tests_android.sh.in deleted file mode 100644 index 93373fa..0000000 --- a/cmake/templates/opencv_run_all_tests_android.sh.in +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh - -BASE_DIR=`dirname $0` -OPENCV_TEST_PATH=$BASE_DIR/@TEST_PATH@ -OPENCV_TEST_DATA_PATH=$BASE_DIR/sdk/etc/testdata/ - -if [ $# -ne 1 ]; then - echo "Device architecture is not preset in command line" - echo "Tests are available for architectures: `ls -m ${OPENCV_TEST_PATH}`" - echo "Usage: $0 " - return 1 -else - TARGET_ARCH=$1 -fi - -if [ -z `which adb` ]; then - echo "adb command was not found in PATH" - return 1 -fi - -adb push $OPENCV_TEST_DATA_PATH /sdcard/opencv_testdata - -adb shell "mkdir -p /data/local/tmp/opencv_test" -SUMMARY_STATUS=0 -for t in "$OPENCV_TEST_PATH/$TARGET_ARCH/"opencv_test_* "$OPENCV_TEST_PATH/$TARGET_ARCH/"opencv_perf_*; -do - test_name=`basename "$t"` - report="$test_name-`date --rfc-3339=date`.xml" - adb push $t /data/local/tmp/opencv_test/ - adb shell "export OPENCV_TEST_DATA_PATH=/sdcard/opencv_testdata && /data/local/tmp/opencv_test/$test_name --perf_min_samples=1 --perf_force_samples=1 --gtest_output=xml:/data/local/tmp/opencv_test/$report" - adb pull "/data/local/tmp/opencv_test/$report" $report - TEST_STATUS=0 - if [ -e $report ]; then - if [ `grep -c " - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_> - 0 8 20 12 -1. - <_> - 0 14 20 6 2. - 0 - 0.1296395957469940 - -0.7730420827865601 - 0.6835014820098877 - <_> - - <_> - - - - <_> - 9 1 4 15 -1. - <_> - 9 6 4 5 3. - 0 - -0.0463268086314201 - 0.5735275149345398 - -0.4909768998622894 - <_> - - <_> - - - - <_> - 6 10 9 2 -1. - <_> - 9 10 3 2 3. - 0 - -0.0161730907857418 - 0.6025434136390686 - -0.3161070942878723 - <_> - - <_> - - - - <_> - 7 0 10 9 -1. - <_> - 7 3 10 3 3. - 0 - -0.0458288416266441 - 0.6417754888534546 - -0.1554504036903381 - <_> - - <_> - - - - <_> - 12 2 2 18 -1. - <_> - 12 8 2 6 3. - 0 - -0.0537596195936203 - 0.5421931743621826 - -0.2048082947731018 - <_> - - <_> - - - - <_> - 8 6 8 6 -1. - <_> - 8 9 8 3 2. - 0 - 0.0341711901128292 - -0.2338819056749344 - 0.4841090142726898 - -1.4562760591506958 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 0 17 18 -1. - <_> - 2 6 17 6 3. - 0 - -0.2172762006521225 - 0.7109889984130859 - -0.5936073064804077 - <_> - - <_> - - - - <_> - 10 10 1 8 -1. - <_> - 10 14 1 4 2. - 0 - 0.0120719699189067 - -0.2824048101902008 - 0.5901355147361755 - <_> - - <_> - - - - <_> - 7 10 9 2 -1. - <_> - 10 10 3 2 3. - 0 - -0.0178541392087936 - 0.5313752293586731 - -0.2275896072387695 - <_> - - <_> - - - - <_> - 5 1 6 6 -1. - <_> - 5 3 6 2 3. - 0 - 0.0223336108028889 - -0.1755609959363937 - 0.6335613727569580 - <_> - - <_> - - - - <_> - 3 1 15 9 -1. - <_> - 3 4 15 3 3. - 0 - -0.0914200171828270 - 0.6156309247016907 - -0.1689953058958054 - <_> - - <_> - - - - <_> - 6 3 9 6 -1. - <_> - 6 5 9 2 3. - 0 - 0.0289736501872540 - -0.1225007995963097 - 0.7440117001533508 - <_> - - <_> - - - - <_> - 8 17 6 3 -1. - <_> - 10 17 2 3 3. - 0 - 7.8203463926911354e-003 - 0.1697437018156052 - -0.6544165015220642 - <_> - - <_> - - - - <_> - 9 10 9 1 -1. - <_> - 12 10 3 1 3. - 0 - 0.0203404892235994 - -0.1255664974451065 - 0.8271045088768005 - <_> - - <_> - - - - <_> - 1 7 6 11 -1. - <_> - 3 7 2 11 3. - 0 - -0.0119261499494314 - 0.3860568106174469 - -0.2099234014749527 - <_> - - <_> - - - - <_> - 9 18 3 1 -1. - <_> - 10 18 1 1 3. - 0 - -9.7281101625412703e-004 - -0.6376119256019592 - 0.1295239031314850 - <_> - - <_> - - - - <_> - 16 16 1 2 -1. - <_> - 16 17 1 1 2. - 0 - 1.8322050891583785e-005 - -0.3463147878646851 - 0.2292426973581314 - <_> - - <_> - - - - <_> - 9 17 6 3 -1. - <_> - 11 17 2 3 3. - 0 - -8.0854417756199837e-003 - -0.6366580128669739 - 0.1307865977287293 - -1.2550230026245117 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 5 18 -1. - <_> - 8 6 5 6 3. - 0 - -0.1181226968765259 - 0.6784452199935913 - -0.5004578232765198 - <_> - - <_> - - - - <_> - 6 7 9 7 -1. - <_> - 9 7 3 7 3. - 0 - -0.0343327596783638 - 0.6718636155128479 - -0.3574487864971161 - <_> - - <_> - - - - <_> - 14 6 6 10 -1. - <_> - 16 6 2 10 3. - 0 - -0.0215307995676994 - 0.7222070097923279 - -0.1819241940975189 - <_> - - <_> - - - - <_> - 9 8 9 5 -1. - <_> - 12 8 3 5 3. - 0 - -0.0219099707901478 - 0.6652938723564148 - -0.2751022875308991 - <_> - - <_> - - - - <_> - 3 7 9 6 -1. - <_> - 6 7 3 6 3. - 0 - -0.0287135392427444 - 0.6995570063591003 - -0.1961558014154434 - <_> - - <_> - - - - <_> - 1 7 6 6 -1. - <_> - 3 7 2 6 3. - 0 - -0.0114674801006913 - 0.5926734805107117 - -0.2209735065698624 - <_> - - <_> - - - - <_> - 16 0 4 18 -1. - <_> - 16 6 4 6 3. - 0 - -0.0226111691445112 - 0.3448306918144226 - -0.3837955892086029 - <_> - - <_> - - - - <_> - 0 17 3 3 -1. - <_> - 0 18 3 1 3. - 0 - -1.9308089977130294e-003 - -0.7944571971893311 - 0.1562865972518921 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 17 0 1 1 2. - 0 - 5.6419910833938047e-005 - -0.3089601099491119 - 0.3543108999729157 - -1.3728189468383789 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 8 20 12 -1. - <_> - 0 14 20 6 2. - 0 - 0.1988652050495148 - -0.5286070108413696 - 0.3553672134876251 - <_> - - <_> - - - - <_> - 6 6 9 8 -1. - <_> - 9 6 3 8 3. - 0 - -0.0360089391469955 - 0.4210968911647797 - -0.3934898078441620 - <_> - - <_> - - - - <_> - 5 3 12 9 -1. - <_> - 5 6 12 3 3. - 0 - -0.0775698497891426 - 0.4799154102802277 - -0.2512216866016388 - <_> - - <_> - - - - <_> - 4 16 1 2 -1. - <_> - 4 17 1 1 2. - 0 - 8.2630853285081685e-005 - -0.3847548961639404 - 0.3184922039508820 - <_> - - <_> - - - - <_> - 18 10 2 1 -1. - <_> - 19 10 1 1 2. - 0 - 3.2773229759186506e-004 - -0.2642731964588165 - 0.3254724144935608 - <_> - - <_> - - - - <_> - 9 8 6 5 -1. - <_> - 11 8 2 5 3. - 0 - -0.0185748506337404 - 0.4673658907413483 - -0.1506727039813995 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -7.0008762122597545e-005 - 0.2931315004825592 - -0.2536509931087494 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 8 8 2 6 3. - 0 - -0.0185521300882101 - 0.4627366065979004 - -0.1314805001020432 - <_> - - <_> - - - - <_> - 11 7 6 7 -1. - <_> - 13 7 2 7 3. - 0 - -0.0130304200574756 - 0.4162721931934357 - -0.1775148957967758 - <_> - - <_> - - - - <_> - 19 14 1 2 -1. - <_> - 19 15 1 1 2. - 0 - 6.5694141085259616e-005 - -0.2803510129451752 - 0.2668074071407318 - <_> - - <_> - - - - <_> - 6 17 1 2 -1. - <_> - 6 18 1 1 2. - 0 - 1.7005260451696813e-004 - -0.2702724933624268 - 0.2398165017366409 - <_> - - <_> - - - - <_> - 14 7 2 7 -1. - <_> - 15 7 1 7 2. - 0 - -3.3129199873656034e-003 - 0.4441143870353699 - -0.1442888975143433 - <_> - - <_> - - - - <_> - 6 8 2 4 -1. - <_> - 7 8 1 4 2. - 0 - 1.7583490116521716e-003 - -0.1612619012594223 - 0.4294076859951019 - <_> - - <_> - - - - <_> - 5 8 12 6 -1. - <_> - 5 10 12 2 3. - 0 - -0.0251947492361069 - 0.4068729877471924 - -0.1820258051156998 - <_> - - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - 1.4031709870323539e-003 - 0.0847597867250443 - -0.8001856803894043 - <_> - - <_> - - - - <_> - 6 7 3 6 -1. - <_> - 7 7 1 6 3. - 0 - -7.3991729877889156e-003 - 0.5576609969139099 - -0.1184315979480743 - -1.2879480123519897 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 7 9 12 -1. - <_> - 9 7 3 12 3. - 0 - -0.0299430806189775 - 0.3581081032752991 - -0.3848763108253479 - <_> - - <_> - - - - <_> - 6 2 11 12 -1. - <_> - 6 6 11 4 3. - 0 - -0.1256738007068634 - 0.3931693136692047 - -0.3001225888729096 - <_> - - <_> - - - - <_> - 1 12 5 8 -1. - <_> - 1 16 5 4 2. - 0 - 5.3635272197425365e-003 - -0.4390861988067627 - 0.1925701051950455 - <_> - - <_> - - - - <_> - 14 7 6 7 -1. - <_> - 16 7 2 7 3. - 0 - -8.0971820279955864e-003 - 0.3990666866302490 - -0.2340787053108215 - <_> - - <_> - - - - <_> - 10 8 6 6 -1. - <_> - 12 8 2 6 3. - 0 - -0.0165979098528624 - 0.4209528863430023 - -0.2267484068870544 - <_> - - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 16 19 4 1 2. - 0 - -2.0199299324303865e-003 - -0.7415673136711121 - 0.1260118931531906 - <_> - - <_> - - - - <_> - 18 17 2 3 -1. - <_> - 18 18 2 1 3. - 0 - -1.5202340437099338e-003 - -0.7615460157394409 - 0.0863736122846603 - <_> - - <_> - - - - <_> - 9 7 3 7 -1. - <_> - 10 7 1 7 3. - 0 - -4.9663940444588661e-003 - 0.4218223989009857 - -0.1790491938591003 - <_> - - <_> - - - - <_> - 5 6 6 8 -1. - <_> - 7 6 2 8 3. - 0 - -0.0192076005041599 - 0.4689489901065826 - -0.1437875032424927 - <_> - - <_> - - - - <_> - 2 6 6 11 -1. - <_> - 4 6 2 11 3. - 0 - -0.0122226802632213 - 0.3284207880496979 - -0.2180214971303940 - <_> - - <_> - - - - <_> - 8 10 12 8 -1. - <_> - 8 14 12 4 2. - 0 - 0.0575486682355404 - -0.3676880896091461 - 0.2435711026191711 - <_> - - <_> - - - - <_> - 7 17 6 3 -1. - <_> - 9 17 2 3 3. - 0 - -9.5794079825282097e-003 - -0.7224506735801697 - 0.0636645630002022 - <_> - - <_> - - - - <_> - 10 9 3 3 -1. - <_> - 11 9 1 3 3. - 0 - -2.9545740690082312e-003 - 0.3584643900394440 - -0.1669632941484451 - <_> - - <_> - - - - <_> - 8 8 3 6 -1. - <_> - 9 8 1 6 3. - 0 - -4.2017991654574871e-003 - 0.3909480869770050 - -0.1204179003834724 - <_> - - <_> - - - - <_> - 7 0 6 5 -1. - <_> - 9 0 2 5 3. - 0 - -0.0136249903589487 - -0.5876771807670593 - 0.0884047299623489 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - 6.2853112467564642e-005 - -0.2634845972061157 - 0.2141927927732468 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 19 4 1 2. - 0 - -2.6782939676195383e-003 - -0.7839016914367676 - 0.0805269628763199 - <_> - - <_> - - - - <_> - 4 1 11 9 -1. - <_> - 4 4 11 3 3. - 0 - -0.0705971792340279 - 0.4146926105022430 - -0.1398995965719223 - <_> - - <_> - - - - <_> - 3 1 14 9 -1. - <_> - 3 4 14 3 3. - 0 - 0.0920936465263367 - -0.1305518001317978 - 0.5043578147888184 - <_> - - <_> - - - - <_> - 0 9 6 4 -1. - <_> - 2 9 2 4 3. - 0 - -8.8004386052489281e-003 - 0.3660975098609924 - -0.1403664946556091 - <_> - - <_> - - - - <_> - 18 13 1 2 -1. - <_> - 18 14 1 1 2. - 0 - 7.5080977694597095e-005 - -0.2970443964004517 - 0.2070294022560120 - <_> - - <_> - - - - <_> - 13 5 3 11 -1. - <_> - 14 5 1 11 3. - 0 - -2.9870450962334871e-003 - 0.3561570048332214 - -0.1544596999883652 - <_> - - <_> - - - - <_> - 0 18 8 2 -1. - <_> - 0 18 4 1 2. - <_> - 4 19 4 1 2. - 0 - -2.6441509835422039e-003 - -0.5435351729393005 - 0.1029511019587517 - -1.2179850339889526 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 8 12 5 -1. - <_> - 9 8 4 5 3. - 0 - -0.0478624701499939 - 0.4152823984622955 - -0.3418582081794739 - <_> - - <_> - - - - <_> - 4 7 11 10 -1. - <_> - 4 12 11 5 2. - 0 - 0.0873505324125290 - -0.3874978125095367 - 0.2420420050621033 - <_> - - <_> - - - - <_> - 14 9 6 4 -1. - <_> - 16 9 2 4 3. - 0 - -0.0168494991958141 - 0.5308247804641724 - -0.1728291064500809 - <_> - - <_> - - - - <_> - 0 7 6 8 -1. - <_> - 3 7 3 8 2. - 0 - -0.0288700293749571 - 0.3584350943565369 - -0.2240259051322937 - <_> - - <_> - - - - <_> - 0 16 3 3 -1. - <_> - 0 17 3 1 3. - 0 - 2.5679389946162701e-003 - 0.1499049961566925 - -0.6560940742492676 - <_> - - <_> - - - - <_> - 7 11 12 1 -1. - <_> - 11 11 4 1 3. - 0 - -0.0241166595369577 - 0.5588967800140381 - -0.1481028050184250 - <_> - - <_> - - - - <_> - 4 8 9 4 -1. - <_> - 7 8 3 4 3. - 0 - -0.0328266583383083 - 0.4646868109703064 - -0.1078552976250649 - <_> - - <_> - - - - <_> - 5 16 6 4 -1. - <_> - 7 16 2 4 3. - 0 - -0.0152330603450537 - -0.7395442724227905 - 0.0562368817627430 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -3.0209511169232428e-004 - -0.4554882049560547 - 0.0970698371529579 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 7.5365108205005527e-004 - 0.0951472967863083 - -0.5489501953125000 - <_> - - <_> - - - - <_> - 4 9 4 10 -1. - <_> - 4 9 2 5 2. - <_> - 6 14 2 5 2. - 0 - -0.0106389503926039 - 0.4091297090053558 - -0.1230840981006622 - <_> - - <_> - - - - <_> - 4 8 6 4 -1. - <_> - 6 8 2 4 3. - 0 - -7.5217830017209053e-003 - 0.4028914868831635 - -0.1604878008365631 - <_> - - <_> - - - - <_> - 10 2 2 18 -1. - <_> - 10 8 2 6 3. - 0 - -0.1067709997296333 - 0.6175932288169861 - -0.0730911865830421 - <_> - - <_> - - - - <_> - 0 5 8 6 -1. - <_> - 0 5 4 3 2. - <_> - 4 8 4 3 2. - 0 - 0.0162569191306829 - -0.1310368031263351 - 0.3745365142822266 - <_> - - <_> - - - - <_> - 6 0 6 5 -1. - <_> - 8 0 2 5 3. - 0 - -0.0206793602555990 - -0.7140290737152100 - 0.0523900091648102 - <_> - - <_> - - - - <_> - 18 0 2 14 -1. - <_> - 18 7 2 7 2. - 0 - 0.0170523691922426 - 0.1282286047935486 - -0.3108068108558655 - <_> - - <_> - - - - <_> - 8 18 4 2 -1. - <_> - 10 18 2 2 2. - 0 - -5.7122060097754002e-003 - -0.6055650711059570 - 0.0818847566843033 - <_> - - <_> - - - - <_> - 1 17 6 3 -1. - <_> - 1 18 6 1 3. - 0 - 2.0851430235779844e-005 - -0.2681298851966858 - 0.1445384025573731 - <_> - - <_> - - - - <_> - 11 8 3 5 -1. - <_> - 12 8 1 5 3. - 0 - 7.9284431412816048e-003 - -0.0787953510880470 - 0.5676258206367493 - <_> - - <_> - - - - <_> - 11 8 3 4 -1. - <_> - 12 8 1 4 3. - 0 - -2.5217379443347454e-003 - 0.3706862926483154 - -0.1362057030200958 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - -0.0224261991679668 - -0.6870499849319458 - 0.0510628595948219 - <_> - - <_> - - - - <_> - 1 7 6 7 -1. - <_> - 3 7 2 7 3. - 0 - -7.6451441273093224e-003 - 0.2349222004413605 - -0.1790595948696137 - <_> - - <_> - - - - <_> - 0 13 1 3 -1. - <_> - 0 14 1 1 3. - 0 - -1.1175329564139247e-003 - -0.5986905097961426 - 0.0743244364857674 - <_> - - <_> - - - - <_> - 3 2 9 6 -1. - <_> - 3 4 9 2 3. - 0 - 0.0192127898335457 - -0.1570255011320114 - 0.2973746955394745 - <_> - - <_> - - - - <_> - 8 6 9 2 -1. - <_> - 8 7 9 1 2. - 0 - 5.6293429806828499e-003 - -0.0997690185904503 - 0.4213027060031891 - <_> - - <_> - - - - <_> - 0 14 3 6 -1. - <_> - 0 16 3 2 3. - 0 - -9.5671862363815308e-003 - -0.6085879802703857 - 0.0735062584280968 - <_> - - <_> - - - - <_> - 1 11 6 4 -1. - <_> - 3 11 2 4 3. - 0 - 0.0112179601565003 - -0.1032081022858620 - 0.4190984964370728 - -1.2905240058898926 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 9 9 3 -1. - <_> - 9 9 3 3 3. - 0 - -0.0174864400178194 - 0.3130728006362915 - -0.3368118107318878 - <_> - - <_> - - - - <_> - 6 0 9 6 -1. - <_> - 6 2 9 2 3. - 0 - 0.0307146497070789 - -0.1876619011163712 - 0.5378080010414124 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 8 7 6 2 3. - 0 - -0.0221887193620205 - 0.3663788139820099 - -0.1612481027841568 - <_> - - <_> - - - - <_> - 1 12 2 1 -1. - <_> - 2 12 1 1 2. - 0 - -5.0700771680567414e-005 - 0.2124571055173874 - -0.2844462096691132 - <_> - - <_> - - - - <_> - 10 10 6 2 -1. - <_> - 12 10 2 2 3. - 0 - -7.0170420221984386e-003 - 0.3954311013221741 - -0.1317359060049057 - <_> - - <_> - - - - <_> - 13 8 6 6 -1. - <_> - 15 8 2 6 3. - 0 - -6.8563609384000301e-003 - 0.3037385940551758 - -0.2065781950950623 - <_> - - <_> - - - - <_> - 6 16 6 4 -1. - <_> - 8 16 2 4 3. - 0 - -0.0141292596235871 - -0.7650300860404968 - 0.0982131883502007 - <_> - - <_> - - - - <_> - 8 0 9 9 -1. - <_> - 8 3 9 3 3. - 0 - -0.0479154810309410 - 0.4830738902091980 - -0.1300680935382843 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 4.7032979637151584e-005 - -0.2521657049655914 - 0.2438668012619019 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 1.0221180273219943e-003 - 0.0688576027750969 - -0.6586114168167114 - <_> - - <_> - - - - <_> - 7 10 3 3 -1. - <_> - 8 10 1 3 3. - 0 - -2.6056109927594662e-003 - 0.4294202923774719 - -0.1302246004343033 - <_> - - <_> - - - - <_> - 9 14 2 2 -1. - <_> - 9 14 1 1 2. - <_> - 10 15 1 1 2. - 0 - 5.4505340813193470e-005 - -0.1928862035274506 - 0.2895849943161011 - <_> - - <_> - - - - <_> - 9 14 2 2 -1. - <_> - 9 14 1 1 2. - <_> - 10 15 1 1 2. - 0 - -6.6721157054416835e-005 - 0.3029071092605591 - -0.1985436975955963 - <_> - - <_> - - - - <_> - 0 8 19 12 -1. - <_> - 0 14 19 6 2. - 0 - 0.2628143131732941 - -0.2329394072294235 - 0.2369246035814285 - <_> - - <_> - - - - <_> - 7 6 9 14 -1. - <_> - 10 6 3 14 3. - 0 - -0.0235696695744991 - 0.1940104067325592 - -0.2848461866378784 - <_> - - <_> - - - - <_> - 13 8 3 4 -1. - <_> - 14 8 1 4 3. - 0 - -3.9120172150433064e-003 - 0.5537897944450378 - -0.0956656783819199 - <_> - - <_> - - - - <_> - 4 17 1 3 -1. - <_> - 4 18 1 1 3. - 0 - 5.0788799853762612e-005 - -0.2391265928745270 - 0.2179948985576630 - <_> - - <_> - - - - <_> - 4 9 6 3 -1. - <_> - 6 9 2 3 3. - 0 - -7.8732017427682877e-003 - 0.4069742858409882 - -0.1276804059743881 - <_> - - <_> - - - - <_> - 2 18 5 2 -1. - <_> - 2 19 5 1 2. - 0 - -1.6778609715402126e-003 - -0.5774465799331665 - 0.0973247885704041 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -2.6832430739887059e-004 - 0.2902188003063202 - -0.1683126986026764 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 7.8687182394787669e-005 - -0.1955157071352005 - 0.2772096991539002 - <_> - - <_> - - - - <_> - 5 10 13 2 -1. - <_> - 5 11 13 1 2. - 0 - 0.0129535002633929 - -0.0968383178114891 - 0.4032387137413025 - <_> - - <_> - - - - <_> - 10 8 1 9 -1. - <_> - 10 11 1 3 3. - 0 - -0.0130439596250653 - 0.4719856977462769 - -0.0892875492572784 - <_> - - <_> - - - - <_> - 15 8 2 12 -1. - <_> - 15 8 1 6 2. - <_> - 16 14 1 6 2. - 0 - 3.0261781066656113e-003 - -0.1362338066101074 - 0.3068627119064331 - <_> - - <_> - - - - <_> - 4 0 3 5 -1. - <_> - 5 0 1 5 3. - 0 - -6.0438038781285286e-003 - -0.7795410156250000 - 0.0573163107037544 - <_> - - <_> - - - - <_> - 12 6 3 7 -1. - <_> - 13 6 1 7 3. - 0 - -2.2507249377667904e-003 - 0.3087705969810486 - -0.1500630974769592 - <_> - - <_> - - - - <_> - 7 16 6 4 -1. - <_> - 9 16 2 4 3. - 0 - 0.0158268101513386 - 0.0645518898963928 - -0.7245556712150574 - <_> - - <_> - - - - <_> - 9 16 2 1 -1. - <_> - 10 16 1 1 2. - 0 - 6.5864507632795721e-005 - -0.1759884059429169 - 0.2321038991212845 - -1.1600480079650879 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 10 9 2 -1. - <_> - 9 10 3 2 3. - 0 - -0.0278548691421747 - 0.4551844894886017 - -0.1809991002082825 - <_> - - <_> - - - - <_> - 0 6 15 14 -1. - <_> - 0 13 15 7 2. - 0 - 0.1289504021406174 - -0.5256553292274475 - 0.1618890017271042 - <_> - - <_> - - - - <_> - 9 1 5 6 -1. - <_> - 9 3 5 2 3. - 0 - 0.0244031809270382 - -0.1497496068477631 - 0.4235737919807434 - <_> - - <_> - - - - <_> - 3 9 3 4 -1. - <_> - 4 9 1 4 3. - 0 - -2.4458570405840874e-003 - 0.3294866979122162 - -0.1744769066572189 - <_> - - <_> - - - - <_> - 5 7 3 6 -1. - <_> - 6 7 1 6 3. - 0 - -3.5336529836058617e-003 - 0.4742664098739624 - -0.0736183598637581 - <_> - - <_> - - - - <_> - 17 16 1 2 -1. - <_> - 17 17 1 1 2. - 0 - 5.1358150813030079e-005 - -0.3042193055152893 - 0.1563327014446259 - <_> - - <_> - - - - <_> - 9 8 6 12 -1. - <_> - 11 8 2 12 3. - 0 - -0.0162256807088852 - 0.2300218045711517 - -0.2035982012748718 - <_> - - <_> - - - - <_> - 6 10 6 1 -1. - <_> - 8 10 2 1 3. - 0 - -4.6007009223103523e-003 - 0.4045926928520203 - -0.1348544061183929 - <_> - - <_> - - - - <_> - 7 17 9 3 -1. - <_> - 10 17 3 3 3. - 0 - -0.0219289995729923 - -0.6872448921203613 - 0.0806842669844627 - <_> - - <_> - - - - <_> - 14 18 6 2 -1. - <_> - 14 19 6 1 2. - 0 - -2.8971210122108459e-003 - -0.6961960792541504 - 0.0485452190041542 - <_> - - <_> - - - - <_> - 9 5 3 14 -1. - <_> - 10 5 1 14 3. - 0 - -4.4074649922549725e-003 - 0.2516626119613648 - -0.1623664945363998 - <_> - - <_> - - - - <_> - 8 16 9 4 -1. - <_> - 11 16 3 4 3. - 0 - 0.0284371692687273 - 0.0603942610323429 - -0.6674445867538452 - <_> - - <_> - - - - <_> - 0 0 4 14 -1. - <_> - 0 7 4 7 2. - 0 - 0.0832128822803497 - 0.0643579214811325 - -0.5362604260444641 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 1 2 3 3. - 0 - -0.0124193299561739 - -0.7081686258316040 - 0.0575266107916832 - <_> - - <_> - - - - <_> - 6 8 3 4 -1. - <_> - 7 8 1 4 3. - 0 - -4.6992599964141846e-003 - 0.5125433206558228 - -0.0873508006334305 - <_> - - <_> - - - - <_> - 4 8 3 4 -1. - <_> - 5 8 1 4 3. - 0 - -7.8025809489190578e-004 - 0.2668766081333160 - -0.1796150952577591 - <_> - - <_> - - - - <_> - 5 1 6 5 -1. - <_> - 7 1 2 5 3. - 0 - -0.0197243392467499 - -0.6756373047828674 - 0.0729419067502022 - <_> - - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - 1.0269250487908721e-003 - 0.0539193190634251 - -0.5554018020629883 - <_> - - <_> - - - - <_> - 7 0 6 6 -1. - <_> - 7 2 6 2 3. - 0 - -0.0259571895003319 - 0.5636252760887146 - -0.0718983933329582 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 19 4 1 2. - 0 - -1.2552699772641063e-003 - -0.5034663081169128 - 0.0896914526820183 - <_> - - <_> - - - - <_> - 12 3 8 12 -1. - <_> - 12 7 8 4 3. - 0 - -0.0499705784022808 - 0.1768511980772018 - -0.2230195999145508 - <_> - - <_> - - - - <_> - 12 9 3 4 -1. - <_> - 13 9 1 4 3. - 0 - -2.9899610672146082e-003 - 0.3912242054939270 - -0.1014975011348724 - <_> - - <_> - - - - <_> - 12 8 3 5 -1. - <_> - 13 8 1 5 3. - 0 - 4.8546842299401760e-003 - -0.1177017986774445 - 0.4219093918800354 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 17 0 1 1 2. - 0 - 1.0448860120959580e-004 - -0.1733397990465164 - 0.2234444022178650 - <_> - - <_> - - - - <_> - 5 17 1 3 -1. - <_> - 5 18 1 1 3. - 0 - 5.9689260524464771e-005 - -0.2340963035821915 - 0.1655824035406113 - <_> - - <_> - - - - <_> - 10 2 3 6 -1. - <_> - 10 4 3 2 3. - 0 - -0.0134239196777344 - 0.4302381873130798 - -0.0997236520051956 - <_> - - <_> - - - - <_> - 4 17 2 3 -1. - <_> - 4 18 2 1 3. - 0 - 2.2581999655812979e-003 - 0.0727209895849228 - -0.5750101804733276 - <_> - - <_> - - - - <_> - 12 7 1 9 -1. - <_> - 12 10 1 3 3. - 0 - -0.0125462803989649 - 0.3618457913398743 - -0.1145701035857201 - <_> - - <_> - - - - <_> - 7 6 3 9 -1. - <_> - 8 6 1 9 3. - 0 - -2.8705769218504429e-003 - 0.2821053862571716 - -0.1236755028367043 - <_> - - <_> - - - - <_> - 17 13 3 6 -1. - <_> - 17 15 3 2 3. - 0 - 0.0197856407612562 - 0.0478767491877079 - -0.8066623806953430 - <_> - - <_> - - - - <_> - 7 7 3 8 -1. - <_> - 8 7 1 8 3. - 0 - 4.7588930465281010e-003 - -0.1092538982629776 - 0.3374697864055634 - <_> - - <_> - - - - <_> - 5 0 3 5 -1. - <_> - 6 0 1 5 3. - 0 - -6.9974269717931747e-003 - -0.8029593825340271 - 0.0457067005336285 - <_> - - <_> - - - - <_> - 4 6 9 8 -1. - <_> - 7 6 3 8 3. - 0 - -0.0130334803834558 - 0.1868043988943100 - -0.1768891066312790 - <_> - - <_> - - - - <_> - 2 9 3 3 -1. - <_> - 3 9 1 3 3. - 0 - -1.3742579612880945e-003 - 0.2772547900676727 - -0.1280900985002518 - <_> - - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 16 19 4 1 2. - 0 - 2.7657810132950544e-003 - 0.0907589420676231 - -0.4259473979473114 - <_> - - <_> - - - - <_> - 17 10 3 10 -1. - <_> - 17 15 3 5 2. - 0 - 2.8941841446794569e-004 - -0.3881632983684540 - 0.0892677977681160 - -1.2257250547409058 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 10 9 2 4 3. - 0 - -0.0144692296162248 - 0.3750782907009125 - -0.2492828965187073 - <_> - - <_> - - - - <_> - 5 2 10 12 -1. - <_> - 5 6 10 4 3. - 0 - -0.1331762969493866 - 0.3016637861728668 - -0.2241407036781311 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 8 9 2 3 3. - 0 - -0.0101321600377560 - 0.3698559105396271 - -0.1785001009702683 - <_> - - <_> - - - - <_> - 11 7 3 7 -1. - <_> - 12 7 1 7 3. - 0 - -7.8511182218790054e-003 - 0.4608676135540009 - -0.1293139010667801 - <_> - - <_> - - - - <_> - 12 8 6 4 -1. - <_> - 14 8 2 4 3. - 0 - -0.0142958397045732 - 0.4484142959117889 - -0.1022624000906944 - <_> - - <_> - - - - <_> - 14 8 6 5 -1. - <_> - 16 8 2 5 3. - 0 - -5.9606940485537052e-003 - 0.2792798876762390 - -0.1532382965087891 - <_> - - <_> - - - - <_> - 12 12 2 4 -1. - <_> - 12 14 2 2 2. - 0 - 0.0109327696263790 - -0.1514174044132233 - 0.3988964855670929 - <_> - - <_> - - - - <_> - 3 15 1 2 -1. - <_> - 3 16 1 1 2. - 0 - 5.0430990086169913e-005 - -0.2268157005310059 - 0.2164438962936401 - <_> - - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - -5.8431681245565414e-003 - 0.4542014896869659 - -0.1258715987205505 - <_> - - <_> - - - - <_> - 10 0 6 6 -1. - <_> - 12 0 2 6 3. - 0 - -0.0223462097346783 - -0.6269019246101379 - 0.0824031233787537 - <_> - - <_> - - - - <_> - 10 6 3 8 -1. - <_> - 11 6 1 8 3. - 0 - -4.8836669884622097e-003 - 0.2635925114154816 - -0.1468663066625595 - <_> - - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 18 1 1 2. - 0 - 7.5506002758629620e-005 - -0.2450702041387558 - 0.1667888015508652 - <_> - - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 16 17 1 1 3. - 0 - -4.9026997294276953e-004 - -0.4264996051788330 - 0.0899735614657402 - <_> - - <_> - - - - <_> - 11 11 1 2 -1. - <_> - 11 12 1 1 2. - 0 - 1.4861579984426498e-003 - -0.1204025000333786 - 0.3009765148162842 - <_> - - <_> - - - - <_> - 3 7 6 9 -1. - <_> - 5 7 2 9 3. - 0 - -0.0119883399456739 - 0.2785247862339020 - -0.1224434003233910 - <_> - - <_> - - - - <_> - 4 18 9 1 -1. - <_> - 7 18 3 1 3. - 0 - 0.0105022396892309 - 0.0404527597129345 - -0.7405040860176086 - <_> - - <_> - - - - <_> - 0 11 4 9 -1. - <_> - 0 14 4 3 3. - 0 - -0.0309630092233419 - -0.6284269094467163 - 0.0480137616395950 - <_> - - <_> - - - - <_> - 9 17 6 3 -1. - <_> - 11 17 2 3 3. - 0 - 0.0114145204424858 - 0.0394052118062973 - -0.7167412042617798 - <_> - - <_> - - - - <_> - 7 8 6 12 -1. - <_> - 9 8 2 12 3. - 0 - -0.0123370001092553 - 0.1994132995605469 - -0.1927430033683777 - <_> - - <_> - - - - <_> - 6 8 3 4 -1. - <_> - 7 8 1 4 3. - 0 - -5.9942267835140228e-003 - 0.5131816267967224 - -0.0616580583155155 - <_> - - <_> - - - - <_> - 3 17 1 3 -1. - <_> - 3 18 1 1 3. - 0 - -1.1923230485990644e-003 - -0.7260529994964600 - 0.0506527200341225 - <_> - - <_> - - - - <_> - 11 9 6 4 -1. - <_> - 13 9 2 4 3. - 0 - -7.4582789093255997e-003 - 0.2960307896137238 - -0.1175478994846344 - <_> - - <_> - - - - <_> - 6 1 3 2 -1. - <_> - 7 1 1 2 3. - 0 - 2.7877509128302336e-003 - 0.0450687110424042 - -0.6953541040420532 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -2.2503209766000509e-004 - 0.2004725039005280 - -0.1577524989843369 - <_> - - <_> - - - - <_> - 1 0 2 14 -1. - <_> - 1 0 1 7 2. - <_> - 2 7 1 7 2. - 0 - -5.0367889925837517e-003 - 0.2929981946945190 - -0.1170049980282784 - <_> - - <_> - - - - <_> - 5 5 11 8 -1. - <_> - 5 9 11 4 2. - 0 - 0.0747421607375145 - -0.1139231994748116 - 0.3025662004947662 - <_> - - <_> - - - - <_> - 9 3 5 6 -1. - <_> - 9 5 5 2 3. - 0 - 0.0202555190771818 - -0.1051589027047157 - 0.4067046046257019 - <_> - - <_> - - - - <_> - 7 9 5 10 -1. - <_> - 7 14 5 5 2. - 0 - 0.0442145094275475 - -0.2763164043426514 - 0.1236386969685555 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 2 2. - 0 - -8.7259558495134115e-004 - 0.2435503005981445 - -0.1330094933509827 - <_> - - <_> - - - - <_> - 0 18 8 2 -1. - <_> - 0 19 8 1 2. - 0 - -2.4453739169985056e-003 - -0.5386617183685303 - 0.0625106468796730 - <_> - - <_> - - - - <_> - 7 17 1 3 -1. - <_> - 7 18 1 1 3. - 0 - 8.2725353422574699e-005 - -0.2077220976352692 - 0.1627043932676315 - <_> - - <_> - - - - <_> - 7 2 11 6 -1. - <_> - 7 4 11 2 3. - 0 - -0.0366271100938320 - 0.3656840920448303 - -0.0903302803635597 - <_> - - <_> - - - - <_> - 8 3 9 3 -1. - <_> - 8 4 9 1 3. - 0 - 3.0996399000287056e-003 - -0.1318302005529404 - 0.2535429894924164 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 10 2 1 2. - 0 - -2.4709280114620924e-003 - -0.5685349702835083 - 0.0535054318606853 - <_> - - <_> - - - - <_> - 0 5 3 6 -1. - <_> - 0 7 3 2 3. - 0 - -0.0141146704554558 - -0.4859901070594788 - 0.0584852509200573 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 8.4537261864170432e-004 - -0.0800936371088028 - 0.4026564955711365 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 8 6 1 6 3. - 0 - -7.1098632179200649e-003 - 0.4470323920249939 - -0.0629474371671677 - <_> - - <_> - - - - <_> - 12 1 6 4 -1. - <_> - 14 1 2 4 3. - 0 - -0.0191259607672691 - -0.6642286777496338 - 0.0498227700591087 - <_> - - <_> - - - - <_> - 9 11 6 8 -1. - <_> - 11 11 2 8 3. - 0 - -5.0773010589182377e-003 - 0.1737940013408661 - -0.1685059964656830 - <_> - - <_> - - - - <_> - 17 15 3 3 -1. - <_> - 17 16 3 1 3. - 0 - -2.9198289848864079e-003 - -0.6011028289794922 - 0.0574279390275478 - <_> - - <_> - - - - <_> - 6 6 3 9 -1. - <_> - 6 9 3 3 3. - 0 - -0.0249021500349045 - 0.2339798063039780 - -0.1181845963001251 - <_> - - <_> - - - - <_> - 0 5 8 6 -1. - <_> - 0 5 4 3 2. - <_> - 4 8 4 3 2. - 0 - 0.0201477799564600 - -0.0894598215818405 - 0.3602440059185028 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - 1.7597640398889780e-003 - 0.0494584403932095 - -0.6310262084007263 - <_> - - <_> - - - - <_> - 17 0 2 6 -1. - <_> - 18 0 1 6 2. - 0 - 1.3812039978802204e-003 - -0.1521805971860886 - 0.1897173970937729 - <_> - - <_> - - - - <_> - 10 17 6 3 -1. - <_> - 12 17 2 3 3. - 0 - -0.0109045403078198 - -0.5809738039970398 - 0.0448627285659313 - <_> - - <_> - - - - <_> - 13 15 2 2 -1. - <_> - 13 15 1 1 2. - <_> - 14 16 1 1 2. - 0 - 7.5157178798690438e-005 - -0.1377734988927841 - 0.1954316049814224 - <_> - - <_> - - - - <_> - 4 0 12 3 -1. - <_> - 4 1 12 1 3. - 0 - 3.8649770431220531e-003 - -0.1030222997069359 - 0.2537496984004974 - -1.2863140106201172 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 10 9 -1. - <_> - 5 6 10 3 3. - 0 - -0.1021588966250420 - 0.4168125987052918 - -0.1665562987327576 - <_> - - <_> - - - - <_> - 7 7 9 7 -1. - <_> - 10 7 3 7 3. - 0 - -0.0519398190081120 - 0.3302395045757294 - -0.2071571052074432 - <_> - - <_> - - - - <_> - 5 8 9 6 -1. - <_> - 8 8 3 6 3. - 0 - -0.0427177809178829 - 0.2609373033046722 - -0.1601389050483704 - <_> - - <_> - - - - <_> - 0 16 6 2 -1. - <_> - 0 17 6 1 2. - 0 - 4.3890418601222336e-004 - -0.3475053012371063 - 0.1391891986131668 - <_> - - <_> - - - - <_> - 12 6 7 14 -1. - <_> - 12 13 7 7 2. - 0 - 0.0242643896490335 - -0.4255205988883972 - 0.1357838064432144 - <_> - - <_> - - - - <_> - 13 7 6 8 -1. - <_> - 15 7 2 8 3. - 0 - -0.0238205995410681 - 0.3174980878829956 - -0.1665204018354416 - <_> - - <_> - - - - <_> - 2 10 6 3 -1. - <_> - 4 10 2 3 3. - 0 - -7.0518180727958679e-003 - 0.3094717860221863 - -0.1333830058574677 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -6.8517157342284918e-004 - -0.6008226275444031 - 0.0877470001578331 - <_> - - <_> - - - - <_> - 7 1 6 2 -1. - <_> - 7 2 6 1 2. - 0 - 5.3705149330198765e-003 - -0.1231144964694977 - 0.3833355009555817 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 2 6 2 2. - 0 - -0.0134035395458341 - 0.3387736976146698 - -0.1014048978686333 - <_> - - <_> - - - - <_> - 8 18 6 2 -1. - <_> - 10 18 2 2 3. - 0 - -6.6856360062956810e-003 - -0.6119359731674194 - 0.0477402210235596 - <_> - - <_> - - - - <_> - 7 6 5 2 -1. - <_> - 7 7 5 1 2. - 0 - -4.2887418530881405e-003 - 0.2527579069137573 - -0.1443451046943665 - <_> - - <_> - - - - <_> - 6 7 3 6 -1. - <_> - 7 7 1 6 3. - 0 - -0.0108767496421933 - 0.5477573275566101 - -0.0594554804265499 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 3.7882640026509762e-004 - 0.0834103003144264 - -0.4422636926174164 - <_> - - <_> - - - - <_> - 16 8 3 7 -1. - <_> - 17 8 1 7 3. - 0 - -2.4550149682909250e-003 - 0.2333099991083145 - -0.1396448016166687 - <_> - - <_> - - - - <_> - 0 16 2 3 -1. - <_> - 0 17 2 1 3. - 0 - 1.2721839593723416e-003 - 0.0604802891612053 - -0.4945608973503113 - <_> - - <_> - - - - <_> - 5 19 6 1 -1. - <_> - 7 19 2 1 3. - 0 - -4.8933159559965134e-003 - -0.6683326959609985 - 0.0462184995412827 - <_> - - <_> - - - - <_> - 9 5 6 6 -1. - <_> - 9 7 6 2 3. - 0 - 0.0264499895274639 - -0.0732353627681732 - 0.4442596137523651 - <_> - - <_> - - - - <_> - 0 10 2 4 -1. - <_> - 0 12 2 2 2. - 0 - -3.3706070389598608e-003 - -0.4246433973312378 - 0.0686765611171722 - <_> - - <_> - - - - <_> - 0 9 4 3 -1. - <_> - 2 9 2 3 2. - 0 - -2.9559480026364326e-003 - 0.1621803939342499 - -0.1822299957275391 - <_> - - <_> - - - - <_> - 1 10 6 9 -1. - <_> - 3 10 2 9 3. - 0 - 0.0306199099868536 - -0.0586433410644531 - 0.5326362848281860 - <_> - - <_> - - - - <_> - 9 0 6 2 -1. - <_> - 11 0 2 2 3. - 0 - -9.5765907317399979e-003 - -0.6056268215179443 - 0.0533459894359112 - <_> - - <_> - - - - <_> - 14 1 2 1 -1. - <_> - 15 1 1 1 2. - 0 - 6.6372493165545166e-005 - -0.1668083965778351 - 0.1928416043519974 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 10 1 2 2. - 0 - 5.0975950434803963e-003 - 0.0441195107996464 - -0.5745884180068970 - <_> - - <_> - - - - <_> - 15 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 3.7112718564458191e-004 - -0.1108639985322952 - 0.2310539036989212 - <_> - - <_> - - - - <_> - 7 5 3 6 -1. - <_> - 8 5 1 6 3. - 0 - -8.6607588455080986e-003 - 0.4045628905296326 - -0.0624460913240910 - <_> - - <_> - - - - <_> - 19 17 1 3 -1. - <_> - 19 18 1 1 3. - 0 - 8.7489158613607287e-004 - 0.0648751482367516 - -0.4487104117870331 - <_> - - <_> - - - - <_> - 7 10 3 1 -1. - <_> - 8 10 1 1 3. - 0 - 1.1120870476588607e-003 - -0.0938614606857300 - 0.3045391142368317 - <_> - - <_> - - - - <_> - 12 1 6 6 -1. - <_> - 14 1 2 6 3. - 0 - -0.0238378196954727 - -0.5888742804527283 - 0.0466594211757183 - <_> - - <_> - - - - <_> - 15 5 2 1 -1. - <_> - 16 5 1 1 2. - 0 - 2.2272899514064193e-004 - -0.1489859968423843 - 0.1770195066928864 - <_> - - <_> - - - - <_> - 8 2 7 4 -1. - <_> - 8 4 7 2 2. - 0 - 0.0244674701243639 - -0.0557896010577679 - 0.4920830130577087 - <_> - - <_> - - - - <_> - 4 0 14 15 -1. - <_> - 4 5 14 5 3. - 0 - -0.1423932015895844 - 0.1519200056791306 - -0.1877889931201935 - <_> - - <_> - - - - <_> - 7 8 6 6 -1. - <_> - 9 8 2 6 3. - 0 - -0.0201231203973293 - 0.2178010046482086 - -0.1208190023899078 - <_> - - <_> - - - - <_> - 11 17 1 3 -1. - <_> - 11 18 1 1 3. - 0 - 1.1513679783092812e-004 - -0.1685658991336823 - 0.1645192950963974 - <_> - - <_> - - - - <_> - 12 16 2 4 -1. - <_> - 12 16 1 2 2. - <_> - 13 18 1 2 2. - 0 - -2.7556740678846836e-003 - -0.6944203972816467 - 0.0394494682550430 - <_> - - <_> - - - - <_> - 10 13 2 1 -1. - <_> - 11 13 1 1 2. - 0 - -7.5843912782147527e-005 - 0.1894136965274811 - -0.1518384069204330 - <_> - - <_> - - - - <_> - 11 8 3 3 -1. - <_> - 12 8 1 3 3. - 0 - -7.0697711780667305e-003 - 0.4706459939479828 - -0.0579276196658611 - <_> - - <_> - - - - <_> - 2 0 6 8 -1. - <_> - 4 0 2 8 3. - 0 - -0.0373931787908077 - -0.7589244842529297 - 0.0341160483658314 - <_> - - <_> - - - - <_> - 3 5 6 6 -1. - <_> - 3 5 3 3 2. - <_> - 6 8 3 3 2. - 0 - -0.0159956105053425 - 0.3067046999931335 - -0.0875255763530731 - <_> - - <_> - - - - <_> - 10 8 3 3 -1. - <_> - 11 8 1 3 3. - 0 - -3.1183990649878979e-003 - 0.2619537115097046 - -0.0912148877978325 - <_> - - <_> - - - - <_> - 5 17 4 2 -1. - <_> - 5 18 4 1 2. - 0 - 1.0651360498741269e-003 - -0.1742756068706513 - 0.1527764052152634 - <_> - - <_> - - - - <_> - 8 16 5 2 -1. - <_> - 8 17 5 1 2. - 0 - -1.6029420075938106e-003 - 0.3561263084411621 - -0.0766299962997437 - <_> - - <_> - - - - <_> - 0 4 3 3 -1. - <_> - 0 5 3 1 3. - 0 - 4.3619908392429352e-003 - 0.0493569709360600 - -0.5922877192497253 - <_> - - <_> - - - - <_> - 6 3 6 2 -1. - <_> - 8 3 2 2 3. - 0 - -0.0107799097895622 - -0.6392217874526978 - 0.0332045406103134 - <_> - - <_> - - - - <_> - 4 4 9 3 -1. - <_> - 7 4 3 3 3. - 0 - -4.3590869754552841e-003 - 0.1610738933086395 - -0.1522132009267807 - <_> - - <_> - - - - <_> - 0 13 1 4 -1. - <_> - 0 15 1 2 2. - 0 - 7.4596069753170013e-003 - 0.0331729613244534 - -0.7500774264335632 - <_> - - <_> - - - - <_> - 0 17 8 3 -1. - <_> - 0 18 8 1 3. - 0 - 8.1385448575019836e-003 - 0.0263252798467875 - -0.7173116207122803 - <_> - - <_> - - - - <_> - 6 1 11 6 -1. - <_> - 6 3 11 2 3. - 0 - -0.0333384908735752 - 0.3353661000728607 - -0.0708035901188850 - -1.1189440488815308 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 10 6 2 -1. - <_> - 6 10 2 2 3. - 0 - 0.0195539798587561 - -0.1043972000479698 - 0.5312895178794861 - <_> - - <_> - - - - <_> - 10 8 1 12 -1. - <_> - 10 14 1 6 2. - 0 - 0.0221229195594788 - -0.2474727034568787 - 0.2084725052118301 - <_> - - <_> - - - - <_> - 5 8 3 4 -1. - <_> - 6 8 1 4 3. - 0 - -4.1829389519989491e-003 - 0.3828943967819214 - -0.1471157968044281 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - -8.6381728760898113e-004 - -0.6263288855552673 - 0.1199325993657112 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - 7.9958612332120538e-004 - 0.0925734713673592 - -0.5516883134841919 - <_> - - <_> - - - - <_> - 13 8 3 4 -1. - <_> - 14 8 1 4 3. - 0 - 9.1527570039033890e-003 - -0.0729298070073128 - 0.5551251173019409 - <_> - - <_> - - - - <_> - 1 5 5 4 -1. - <_> - 1 7 5 2 2. - 0 - -3.9388681761920452e-003 - 0.2019603997468948 - -0.2091203927993774 - <_> - - <_> - - - - <_> - 18 14 1 2 -1. - <_> - 18 15 1 1 2. - 0 - 1.4613410166930407e-004 - -0.2786181867122650 - 0.1381741017103195 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 4 2. - 0 - -3.1691689509898424e-003 - 0.3668589890003204 - -0.0763082429766655 - <_> - - <_> - - - - <_> - 10 6 6 8 -1. - <_> - 12 6 2 8 3. - 0 - -0.0221893899142742 - 0.3909659981727600 - -0.1097154021263123 - <_> - - <_> - - - - <_> - 8 6 6 10 -1. - <_> - 10 6 2 10 3. - 0 - -7.4523608200252056e-003 - 0.1283859014511108 - -0.2415986955165863 - <_> - - <_> - - - - <_> - 17 16 1 3 -1. - <_> - 17 17 1 1 3. - 0 - 7.7997002517804503e-004 - 0.0719780698418617 - -0.4397650063037872 - <_> - - <_> - - - - <_> - 1 7 2 10 -1. - <_> - 2 7 1 10 2. - 0 - -4.6783639118075371e-003 - 0.2156984955072403 - -0.1420592069625855 - <_> - - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - -0.0151886399835348 - 0.3645878136157990 - -0.0826759263873100 - <_> - - <_> - - - - <_> - 0 8 5 12 -1. - <_> - 0 14 5 6 2. - 0 - 5.0619798712432384e-003 - -0.3438040912151337 - 0.0920682325959206 - <_> - - <_> - - - - <_> - 0 11 1 3 -1. - <_> - 0 12 1 1 3. - 0 - -1.7351920250803232e-003 - -0.6172549724578857 - 0.0492144785821438 - <_> - - <_> - - - - <_> - 6 16 6 4 -1. - <_> - 8 16 2 4 3. - 0 - -0.0124234501272440 - -0.5855895280838013 - 0.0461126007139683 - <_> - - <_> - - - - <_> - 0 6 2 6 -1. - <_> - 0 8 2 2 3. - 0 - -0.0130314296111465 - -0.5971078872680664 - 0.0406724587082863 - <_> - - <_> - - - - <_> - 11 18 2 1 -1. - <_> - 12 18 1 1 2. - 0 - -1.2369629694148898e-003 - -0.6833416819572449 - 0.0331561788916588 - <_> - - <_> - - - - <_> - 5 1 9 2 -1. - <_> - 5 2 9 1 2. - 0 - 6.1022108420729637e-003 - -0.0947292372584343 - 0.3010224103927612 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 6.6952849738299847e-004 - 0.0818168669939041 - -0.3519603013992310 - <_> - - <_> - - - - <_> - 15 9 3 3 -1. - <_> - 16 9 1 3 3. - 0 - -1.7970580374822021e-003 - 0.2371897995471954 - -0.1176870986819267 - <_> - - <_> - - - - <_> - 18 16 1 3 -1. - <_> - 18 17 1 1 3. - 0 - -7.1074528386816382e-004 - -0.4476378858089447 - 0.0576824806630611 - <_> - - <_> - - - - <_> - 11 10 6 1 -1. - <_> - 13 10 2 1 3. - 0 - -5.9126471169292927e-003 - 0.4342541098594666 - -0.0668685734272003 - <_> - - <_> - - - - <_> - 1 3 4 4 -1. - <_> - 3 3 2 4 2. - 0 - -3.3132149837911129e-003 - 0.1815001070499420 - -0.1418032050132752 - <_> - - <_> - - - - <_> - 11 2 1 18 -1. - <_> - 11 8 1 6 3. - 0 - -0.0608146600425243 - 0.4722171127796173 - -0.0614106394350529 - <_> - - <_> - - - - <_> - 9 1 5 12 -1. - <_> - 9 5 5 4 3. - 0 - -0.0967141836881638 - 0.2768316864967346 - -0.0944900363683701 - <_> - - <_> - - - - <_> - 12 0 8 1 -1. - <_> - 16 0 4 1 2. - 0 - 3.9073550142347813e-003 - -0.1227853000164032 - 0.2105740010738373 - <_> - - <_> - - - - <_> - 8 6 3 10 -1. - <_> - 9 6 1 10 3. - 0 - -9.0431869029998779e-003 - 0.3564156889915466 - -0.0778062269091606 - <_> - - <_> - - - - <_> - 19 2 1 6 -1. - <_> - 19 4 1 2 3. - 0 - -4.8800031654536724e-003 - -0.4103479087352753 - 0.0696943774819374 - <_> - - <_> - - - - <_> - 18 6 2 2 -1. - <_> - 18 7 2 1 2. - 0 - -4.3547428213059902e-003 - -0.7301788926124573 - 0.0366551503539085 - <_> - - <_> - - - - <_> - 7 7 3 4 -1. - <_> - 8 7 1 4 3. - 0 - -9.6500627696514130e-003 - 0.5518112778663635 - -0.0531680807471275 - <_> - - <_> - - - - <_> - 5 0 6 5 -1. - <_> - 7 0 2 5 3. - 0 - -0.0173973105847836 - -0.5708423256874085 - 0.0502140894532204 - <_> - - <_> - - - - <_> - 0 3 7 3 -1. - <_> - 0 4 7 1 3. - 0 - -6.8304329179227352e-003 - -0.4618028104305267 - 0.0502026900649071 - <_> - - <_> - - - - <_> - 1 6 2 1 -1. - <_> - 2 6 1 1 2. - 0 - 3.3255619928240776e-004 - -0.0953627303242683 - 0.2598375976085663 - <_> - - <_> - - - - <_> - 4 8 2 10 -1. - <_> - 4 8 1 5 2. - <_> - 5 13 1 5 2. - 0 - -2.3100529797375202e-003 - 0.2287247031927109 - -0.1053353026509285 - <_> - - <_> - - - - <_> - 2 18 18 2 -1. - <_> - 2 18 9 1 2. - <_> - 11 19 9 1 2. - 0 - -7.5426651164889336e-003 - -0.5699051022529602 - 0.0488634593784809 - <_> - - <_> - - - - <_> - 2 7 4 4 -1. - <_> - 2 7 2 2 2. - <_> - 4 9 2 2 2. - 0 - -5.2723060362040997e-003 - 0.3514518141746521 - -0.0823901072144508 - <_> - - <_> - - - - <_> - 17 3 3 4 -1. - <_> - 18 3 1 4 3. - 0 - -4.8578968271613121e-003 - -0.6041762232780457 - 0.0445394404232502 - <_> - - <_> - - - - <_> - 16 9 2 8 -1. - <_> - 16 9 1 4 2. - <_> - 17 13 1 4 2. - 0 - 1.5867310576140881e-003 - -0.1034090965986252 - 0.2328201979398727 - <_> - - <_> - - - - <_> - 15 7 1 6 -1. - <_> - 15 9 1 2 3. - 0 - -4.7427811659872532e-003 - 0.2849028110504150 - -0.0980904996395111 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 14 3 2 1 2. - 0 - -1.3515240279957652e-003 - 0.2309643030166626 - -0.1136184036731720 - <_> - - <_> - - - - <_> - 17 0 2 3 -1. - <_> - 17 1 2 1 3. - 0 - 2.2526069078594446e-003 - 0.0644783228635788 - -0.4220589101314545 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - -3.8038659840822220e-004 - -0.3807620108127594 - 0.0600432902574539 - <_> - - <_> - - - - <_> - 10 4 4 3 -1. - <_> - 10 5 4 1 3. - 0 - 4.9043921753764153e-003 - -0.0761049985885620 - 0.3323217034339905 - <_> - - <_> - - - - <_> - 0 2 8 6 -1. - <_> - 4 2 4 6 2. - 0 - -9.0969670563936234e-003 - 0.1428779065608978 - -0.1688780039548874 - <_> - - <_> - - - - <_> - 7 14 6 6 -1. - <_> - 7 16 6 2 3. - 0 - -6.9317929446697235e-003 - 0.2725540995597839 - -0.0928795635700226 - <_> - - <_> - - - - <_> - 11 15 2 2 -1. - <_> - 11 16 2 1 2. - 0 - 1.1471060570329428e-003 - -0.1527305990457535 - 0.1970240026712418 - <_> - - <_> - - - - <_> - 7 1 9 4 -1. - <_> - 10 1 3 4 3. - 0 - -0.0376628898084164 - -0.5932043790817261 - 0.0407386012375355 - <_> - - <_> - - - - <_> - 9 7 3 7 -1. - <_> - 10 7 1 7 3. - 0 - -6.8165571428835392e-003 - 0.2549408972263336 - -0.0940819606184959 - <_> - - <_> - - - - <_> - 6 17 2 2 -1. - <_> - 6 17 1 1 2. - <_> - 7 18 1 1 2. - 0 - 6.6205562325194478e-004 - 0.0467957183718681 - -0.4845437109470367 - <_> - - <_> - - - - <_> - 4 6 3 9 -1. - <_> - 5 6 1 9 3. - 0 - -4.2202551849186420e-003 - 0.2468214929103851 - -0.0946739763021469 - <_> - - <_> - - - - <_> - 0 10 19 10 -1. - <_> - 0 15 19 5 2. - 0 - -0.0689865127205849 - -0.6651480197906494 - 0.0359263904392719 - <_> - - <_> - - - - <_> - 5 17 6 1 -1. - <_> - 7 17 2 1 3. - 0 - 6.1707608401775360e-003 - 0.0258333198726177 - -0.7268627285957336 - <_> - - <_> - - - - <_> - 0 12 6 3 -1. - <_> - 3 12 3 3 2. - 0 - 0.0105362497270107 - -0.0818289965391159 - 0.2976079881191254 - -1.1418989896774292 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 5 18 5 -1. - <_> - 8 5 6 5 3. - 0 - -0.0627587288618088 - 0.2789908051490784 - -0.2965610921382904 - <_> - - <_> - - - - <_> - 1 15 6 4 -1. - <_> - 1 17 6 2 2. - 0 - 3.4516479354351759e-003 - -0.3463588058948517 - 0.2090384066104889 - <_> - - <_> - - - - <_> - 14 10 6 6 -1. - <_> - 16 10 2 6 3. - 0 - -7.8699486330151558e-003 - 0.2414488941431046 - -0.1920557022094727 - <_> - - <_> - - - - <_> - 0 14 4 3 -1. - <_> - 0 15 4 1 3. - 0 - -3.4624869003891945e-003 - -0.5915178060531616 - 0.1248644962906838 - <_> - - <_> - - - - <_> - 1 7 6 11 -1. - <_> - 3 7 2 11 3. - 0 - -9.4818761572241783e-003 - 0.1839154064655304 - -0.2485826015472412 - <_> - - <_> - - - - <_> - 13 17 7 2 -1. - <_> - 13 18 7 1 2. - 0 - 2.3226840130519122e-004 - -0.3304725885391235 - 0.1099926009774208 - <_> - - <_> - - - - <_> - 0 14 2 3 -1. - <_> - 0 15 2 1 3. - 0 - 1.8101120367646217e-003 - 0.0987440124154091 - -0.4963478147983551 - <_> - - <_> - - - - <_> - 0 0 6 2 -1. - <_> - 3 0 3 2 2. - 0 - -5.4422430694103241e-003 - 0.2934441864490509 - -0.1309475004673004 - <_> - - <_> - - - - <_> - 0 1 6 3 -1. - <_> - 3 1 3 3 2. - 0 - 7.4148122221231461e-003 - -0.1476269960403442 - 0.3327716886997223 - <_> - - <_> - - - - <_> - 0 8 2 6 -1. - <_> - 0 10 2 2 3. - 0 - -0.0155651401728392 - -0.6840490102767944 - 0.0998726934194565 - <_> - - <_> - - - - <_> - 1 2 6 14 -1. - <_> - 1 2 3 7 2. - <_> - 4 9 3 7 2. - 0 - 0.0287205204367638 - -0.1483328044414520 - 0.3090257942676544 - <_> - - <_> - - - - <_> - 17 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 18 6 1 1 2. - 0 - 9.6687392215244472e-005 - -0.1743104010820389 - 0.2140295952558518 - <_> - - <_> - - - - <_> - 11 10 9 4 -1. - <_> - 14 10 3 4 3. - 0 - 0.0523710586130619 - -0.0701568573713303 - 0.4922299087047577 - <_> - - <_> - - - - <_> - 2 9 12 4 -1. - <_> - 6 9 4 4 3. - 0 - -0.0864856913685799 - 0.5075724720954895 - -0.0752942115068436 - <_> - - <_> - - - - <_> - 7 10 12 2 -1. - <_> - 11 10 4 2 3. - 0 - -0.0421698689460754 - 0.4568096101284027 - -0.0902199000120163 - <_> - - <_> - - - - <_> - 2 13 1 2 -1. - <_> - 2 14 1 1 2. - 0 - 4.5369830331765115e-005 - -0.2653827965259552 - 0.1618953943252564 - <_> - - <_> - - - - <_> - 16 7 4 3 -1. - <_> - 16 8 4 1 3. - 0 - 5.2918000146746635e-003 - 0.0748901516199112 - -0.5405467152595520 - <_> - - <_> - - - - <_> - 19 16 1 3 -1. - <_> - 19 17 1 1 3. - 0 - -7.5511651812121272e-004 - -0.4926199018955231 - 0.0587239488959312 - <_> - - <_> - - - - <_> - 18 11 1 2 -1. - <_> - 18 12 1 1 2. - 0 - 7.5108138844370842e-005 - -0.2143210023641586 - 0.1407776027917862 - <_> - - <_> - - - - <_> - 12 7 8 2 -1. - <_> - 12 7 4 1 2. - <_> - 16 8 4 1 2. - 0 - 4.9981209449470043e-003 - -0.0905473381280899 - 0.3571606874465942 - <_> - - <_> - - - - <_> - 14 9 2 4 -1. - <_> - 15 9 1 4 2. - 0 - -1.4929979806765914e-003 - 0.2562345862388611 - -0.1422906965017319 - <_> - - <_> - - - - <_> - 14 2 6 4 -1. - <_> - 14 2 3 2 2. - <_> - 17 4 3 2 2. - 0 - 2.7239411137998104e-003 - -0.1564925014972687 - 0.2108871042728424 - <_> - - <_> - - - - <_> - 14 0 6 1 -1. - <_> - 17 0 3 1 2. - 0 - 2.2218320518732071e-003 - -0.1507298946380615 - 0.2680186927318573 - <_> - - <_> - - - - <_> - 3 12 2 1 -1. - <_> - 4 12 1 1 2. - 0 - -7.3993072146549821e-004 - 0.2954699099063873 - -0.1069239005446434 - <_> - - <_> - - - - <_> - 17 2 3 1 -1. - <_> - 18 2 1 1 3. - 0 - 2.0113459322601557e-003 - 0.0506143495440483 - -0.7168337106704712 - <_> - - <_> - - - - <_> - 1 16 18 2 -1. - <_> - 7 16 6 2 3. - 0 - 0.0114528704434633 - -0.1271906942129135 - 0.2415277957916260 - <_> - - <_> - - - - <_> - 2 19 8 1 -1. - <_> - 6 19 4 1 2. - 0 - -1.0782170575112104e-003 - 0.2481300979852676 - -0.1346119940280914 - <_> - - <_> - - - - <_> - 1 17 4 3 -1. - <_> - 1 18 4 1 3. - 0 - 3.3417691010981798e-003 - 0.0535783097147942 - -0.5227416753768921 - <_> - - <_> - - - - <_> - 19 13 1 2 -1. - <_> - 19 14 1 1 2. - 0 - 6.9398651248775423e-005 - -0.2169874012470245 - 0.1281217932701111 - <_> - - <_> - - - - <_> - 9 16 10 4 -1. - <_> - 9 16 5 2 2. - <_> - 14 18 5 2 2. - 0 - -4.0982551872730255e-003 - 0.2440188974142075 - -0.1157058998942375 - <_> - - <_> - - - - <_> - 12 9 2 4 -1. - <_> - 12 9 1 2 2. - <_> - 13 11 1 2 2. - 0 - -1.6289720078930259e-003 - 0.2826147079467773 - -0.1065946966409683 - <_> - - <_> - - - - <_> - 19 11 1 9 -1. - <_> - 19 14 1 3 3. - 0 - 0.0139848599210382 - 0.0427158996462822 - -0.7364631295204163 - -1.1255199909210205 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 14 14 -1. - <_> - 6 13 14 7 2. - 0 - 0.1641651988029480 - -0.4896030128002167 - 0.1760770976543427 - <_> - - <_> - - - - <_> - 2 17 4 2 -1. - <_> - 2 18 4 1 2. - 0 - 8.3413062384352088e-004 - -0.2822043001651764 - 0.2419957965612412 - <_> - - <_> - - - - <_> - 0 2 1 3 -1. - <_> - 0 3 1 1 3. - 0 - -1.7193210078403354e-003 - -0.7148588895797730 - 0.0861622169613838 - <_> - - <_> - - - - <_> - 0 12 1 3 -1. - <_> - 0 13 1 1 3. - 0 - -1.5654950402677059e-003 - -0.7297238111495972 - 0.0940706729888916 - <_> - - <_> - - - - <_> - 15 15 4 4 -1. - <_> - 15 17 4 2 2. - 0 - 1.9124479731544852e-003 - -0.3118715882301331 - 0.1814339011907578 - <_> - - <_> - - - - <_> - 2 5 18 7 -1. - <_> - 8 5 6 7 3. - 0 - -0.1351236999034882 - 0.2957729995250702 - -0.2217925041913986 - <_> - - <_> - - - - <_> - 1 16 5 3 -1. - <_> - 1 17 5 1 3. - 0 - -4.0300549007952213e-003 - -0.6659513711929321 - 0.0854310169816017 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 0 5 2 1 3. - 0 - -2.8640460222959518e-003 - -0.6208636164665222 - 0.0531060211360455 - <_> - - <_> - - - - <_> - 0 6 2 6 -1. - <_> - 1 6 1 6 2. - 0 - -1.4065420255064964e-003 - 0.2234628945589066 - -0.2021100968122482 - <_> - - <_> - - - - <_> - 16 14 4 3 -1. - <_> - 16 15 4 1 3. - 0 - -3.5820449702441692e-003 - -0.5403040051460266 - 0.0682136192917824 - <_> - - <_> - - - - <_> - 0 0 10 6 -1. - <_> - 0 0 5 3 2. - <_> - 5 3 5 3 2. - 0 - 0.0415444709360600 - -0.0652158409357071 - 0.6210923194885254 - <_> - - <_> - - - - <_> - 2 2 3 6 -1. - <_> - 3 2 1 6 3. - 0 - -9.1709550470113754e-003 - -0.7555329799652100 - 0.0526404492557049 - <_> - - <_> - - - - <_> - 2 0 3 10 -1. - <_> - 3 0 1 10 3. - 0 - 6.1552738770842552e-003 - 0.0909394025802612 - -0.4424613118171692 - <_> - - <_> - - - - <_> - 5 5 2 2 -1. - <_> - 5 6 2 1 2. - 0 - -1.0043520014733076e-003 - 0.2429233044385910 - -0.1866979002952576 - <_> - - <_> - - - - <_> - 12 6 4 4 -1. - <_> - 12 8 4 2 2. - 0 - 0.0115198297426105 - -0.1176315024495125 - 0.3672345876693726 - <_> - - <_> - - - - <_> - 13 5 7 3 -1. - <_> - 13 6 7 1 3. - 0 - -8.9040733873844147e-003 - -0.4893133044242859 - 0.1089702025055885 - <_> - - <_> - - - - <_> - 10 13 1 2 -1. - <_> - 10 14 1 1 2. - 0 - 5.3973670583218336e-004 - -0.2185039967298508 - 0.1848998963832855 - <_> - - <_> - - - - <_> - 16 16 4 2 -1. - <_> - 18 16 2 2 2. - 0 - 1.3727260520681739e-003 - -0.1507291048765183 - 0.2917312979698181 - <_> - - <_> - - - - <_> - 16 12 4 7 -1. - <_> - 18 12 2 7 2. - 0 - -0.0108073903247714 - 0.4289745092391968 - -0.1028013974428177 - <_> - - <_> - - - - <_> - 16 17 1 3 -1. - <_> - 16 18 1 1 3. - 0 - 1.2670770520344377e-003 - 0.0741921588778496 - -0.6420825123786926 - <_> - - <_> - - - - <_> - 19 9 1 3 -1. - <_> - 19 10 1 1 3. - 0 - 2.2991129662841558e-003 - 0.0471002794802189 - -0.7233523130416870 - <_> - - <_> - - - - <_> - 18 7 2 6 -1. - <_> - 19 7 1 6 2. - 0 - 2.7187510859221220e-003 - -0.1708686947822571 - 0.2351350933313370 - <_> - - <_> - - - - <_> - 8 1 3 4 -1. - <_> - 9 1 1 4 3. - 0 - -6.6619180142879486e-003 - -0.7897542715072632 - 0.0450846701860428 - <_> - - <_> - - - - <_> - 14 0 6 9 -1. - <_> - 16 0 2 9 3. - 0 - -0.0482666492462158 - -0.6957991719245911 - 0.0419760793447495 - <_> - - <_> - - - - <_> - 4 2 10 2 -1. - <_> - 9 2 5 2 2. - 0 - 0.0152146900072694 - -0.1081828027963638 - 0.3646062016487122 - <_> - - <_> - - - - <_> - 2 12 8 4 -1. - <_> - 2 12 4 2 2. - <_> - 6 14 4 2 2. - 0 - -6.0080131515860558e-003 - 0.3097099065780640 - -0.1135921031236649 - <_> - - <_> - - - - <_> - 0 4 7 3 -1. - <_> - 0 5 7 1 3. - 0 - 6.6127157770097256e-003 - 0.0806653425097466 - -0.4665853083133698 - <_> - - <_> - - - - <_> - 14 14 3 3 -1. - <_> - 15 14 1 3 3. - 0 - -7.9607013612985611e-003 - -0.8720194101333618 - 0.0367745906114578 - <_> - - <_> - - - - <_> - 0 3 4 3 -1. - <_> - 2 3 2 3 2. - 0 - 3.8847199175506830e-003 - -0.1166628971695900 - 0.3307026922702789 - <_> - - <_> - - - - <_> - 1 0 2 7 -1. - <_> - 2 0 1 7 2. - 0 - -1.0988810099661350e-003 - 0.2387257069349289 - -0.1765675991773605 - -1.1729990243911743 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 15 16 4 4 -1. - <_> - 15 18 4 2 2. - 0 - 3.5903379321098328e-003 - -0.2368807941675186 - 0.2463164031505585 - <_> - - <_> - - - - <_> - 5 8 12 4 -1. - <_> - 5 10 12 2 2. - 0 - 6.4815930090844631e-003 - -0.3137362003326416 - 0.1867575943470001 - <_> - - <_> - - - - <_> - 3 17 1 2 -1. - <_> - 3 18 1 1 2. - 0 - 7.3048402555286884e-005 - -0.2764435112476349 - 0.1649623960256577 - <_> - - <_> - - - - <_> - 6 1 3 4 -1. - <_> - 7 1 1 4 3. - 0 - -3.8514640182256699e-003 - -0.5601450800895691 - 0.1129473969340324 - <_> - - <_> - - - - <_> - 6 2 3 4 -1. - <_> - 7 2 1 4 3. - 0 - 3.8588210009038448e-003 - 0.0398489981889725 - -0.5807185769081116 - <_> - - <_> - - - - <_> - 6 8 9 12 -1. - <_> - 9 8 3 12 3. - 0 - -0.0246512200683355 - 0.1675501018762589 - -0.2534367144107819 - <_> - - <_> - - - - <_> - 8 1 8 6 -1. - <_> - 8 3 8 2 3. - 0 - 0.0472455210983753 - -0.1066208034753799 - 0.3945198059082031 - <_> - - <_> - - - - <_> - 14 2 6 3 -1. - <_> - 17 2 3 3 2. - 0 - 6.5964651294052601e-003 - -0.1774425059556961 - 0.2728019058704376 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - -1.3177490327507257e-003 - -0.5427265167236328 - 0.0486065894365311 - <_> - - <_> - - - - <_> - 10 0 10 2 -1. - <_> - 15 0 5 2 2. - 0 - -5.0261709839105606e-003 - 0.2439424991607666 - -0.1314364969730377 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 0 1 2 3. - 0 - 3.4632768947631121e-003 - 0.0690493434667587 - -0.7033624053001404 - <_> - - <_> - - - - <_> - 3 19 10 1 -1. - <_> - 8 19 5 1 2. - 0 - 2.1692588925361633e-003 - -0.1328946053981781 - 0.2209852933883667 - <_> - - <_> - - - - <_> - 0 4 7 16 -1. - <_> - 0 12 7 8 2. - 0 - 0.0293958708643913 - -0.2853052020072937 - 0.1354399025440216 - <_> - - <_> - - - - <_> - 2 16 1 3 -1. - <_> - 2 17 1 1 3. - 0 - -9.6181448316201568e-004 - -0.5804138183593750 - 0.0374506488442421 - <_> - - <_> - - - - <_> - 7 8 12 6 -1. - <_> - 11 8 4 6 3. - 0 - -0.1082099974155426 - 0.3946728110313416 - -0.0786559432744980 - <_> - - <_> - - - - <_> - 14 9 6 7 -1. - <_> - 16 9 2 7 3. - 0 - -0.0180248692631722 - 0.2735562920570374 - -0.1341529935598373 - <_> - - <_> - - - - <_> - 12 17 6 1 -1. - <_> - 14 17 2 1 3. - 0 - 6.2509840354323387e-003 - 0.0233880598098040 - -0.8008859157562256 - <_> - - <_> - - - - <_> - 16 1 3 1 -1. - <_> - 17 1 1 1 3. - 0 - -1.6088379779830575e-003 - -0.5676252245903015 - 0.0412156693637371 - <_> - - <_> - - - - <_> - 0 17 8 2 -1. - <_> - 0 17 4 1 2. - <_> - 4 18 4 1 2. - 0 - 7.7564752427861094e-004 - -0.1489126980304718 - 0.1908618062734604 - <_> - - <_> - - - - <_> - 17 0 2 1 -1. - <_> - 18 0 1 1 2. - 0 - 8.7122338300105184e-005 - -0.1555753052234650 - 0.1942822039127350 - <_> - - <_> - - - - <_> - 4 15 6 5 -1. - <_> - 6 15 2 5 3. - 0 - -0.0207553207874298 - -0.6300653219223023 - 0.0361343808472157 - <_> - - <_> - - - - <_> - 7 2 8 2 -1. - <_> - 7 3 8 1 2. - 0 - -6.2931738793849945e-003 - 0.2560924887657166 - -0.1058826968073845 - <_> - - <_> - - - - <_> - 4 1 8 4 -1. - <_> - 4 3 8 2 2. - 0 - 0.0108441496267915 - -0.1012485027313232 - 0.3032212853431702 - <_> - - <_> - - - - <_> - 5 19 2 1 -1. - <_> - 6 19 1 1 2. - 0 - -6.3752777350600809e-005 - 0.1911157965660095 - -0.1384923011064529 - <_> - - <_> - - - - <_> - 5 19 2 1 -1. - <_> - 6 19 1 1 2. - 0 - 6.6480963141657412e-005 - -0.1520525068044663 - 0.2170630991458893 - <_> - - <_> - - - - <_> - 16 17 1 3 -1. - <_> - 16 18 1 1 3. - 0 - 1.3560829684138298e-003 - 0.0494317896664143 - -0.6427984237670898 - <_> - - <_> - - - - <_> - 0 11 2 3 -1. - <_> - 1 11 1 3 2. - 0 - -9.0662558795884252e-004 - 0.1798201054334641 - -0.1404460966587067 - <_> - - <_> - - - - <_> - 0 19 4 1 -1. - <_> - 2 19 2 1 2. - 0 - 1.0473709553480148e-003 - -0.1093354970216751 - 0.2426594048738480 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 2 18 2 2 2. - 0 - -1.0243969736620784e-003 - 0.2716268002986908 - -0.1182091981172562 - <_> - - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - -1.2024149764329195e-003 - -0.7015110254287720 - 0.0394898988306522 - <_> - - <_> - - - - <_> - 5 7 11 2 -1. - <_> - 5 8 11 1 2. - 0 - 7.6911649666726589e-003 - -0.0922189131379128 - 0.3104628920555115 - <_> - - <_> - - - - <_> - 9 2 4 10 -1. - <_> - 9 7 4 5 2. - 0 - -0.1396654993295670 - 0.6897938847541809 - -0.0397061184048653 - <_> - - <_> - - - - <_> - 0 2 4 3 -1. - <_> - 0 3 4 1 3. - 0 - 2.1276050247251987e-003 - 0.0972776114940643 - -0.2884179949760437 - <_> - - <_> - - - - <_> - 10 19 10 1 -1. - <_> - 15 19 5 1 2. - 0 - -2.7594310231506824e-003 - 0.2416867017745972 - -0.1127782016992569 - <_> - - <_> - - - - <_> - 11 17 8 3 -1. - <_> - 15 17 4 3 2. - 0 - 5.2236132323741913e-003 - -0.1143027991056442 - 0.2425678074359894 - <_> - - <_> - - - - <_> - 8 19 3 1 -1. - <_> - 9 19 1 1 3. - 0 - -1.2590440455824137e-003 - -0.5967938899993897 - 0.0476639606058598 - <_> - - <_> - - - - <_> - 14 0 3 4 -1. - <_> - 15 0 1 4 3. - 0 - -3.7192099262028933e-003 - -0.4641413092613220 - 0.0528476908802986 - <_> - - <_> - - - - <_> - 10 6 4 3 -1. - <_> - 10 7 4 1 3. - 0 - 5.9696151874959469e-003 - -0.0732442885637283 - 0.3874309062957764 - <_> - - <_> - - - - <_> - 0 8 3 2 -1. - <_> - 0 9 3 1 2. - 0 - -5.1776720210909843e-003 - -0.7419322729110718 - 0.0404967106878757 - <_> - - <_> - - - - <_> - 7 12 3 6 -1. - <_> - 7 14 3 2 3. - 0 - 5.0035100430250168e-003 - -0.1388880014419556 - 0.1876762062311173 - <_> - - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - -5.2013457752764225e-004 - -0.5494061708450317 - 0.0494178496301174 - <_> - - <_> - - - - <_> - 0 12 4 4 -1. - <_> - 2 12 2 4 2. - 0 - 5.3168768063187599e-003 - -0.0824829787015915 - 0.3174056112766266 - <_> - - <_> - - - - <_> - 1 8 6 7 -1. - <_> - 3 8 2 7 3. - 0 - -0.0147745897993445 - 0.2081609964370728 - -0.1211555972695351 - <_> - - <_> - - - - <_> - 0 8 4 5 -1. - <_> - 2 8 2 5 2. - 0 - -0.0414164513349533 - -0.8243780732154846 - 0.0333291888237000 - -1.0368299484252930 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 19 16 1 3 -1. - <_> - 19 17 1 1 3. - 0 - 9.0962520334869623e-004 - 0.0845799669623375 - -0.5611841082572937 - <_> - - <_> - - - - <_> - 1 5 18 6 -1. - <_> - 7 5 6 6 3. - 0 - -0.0561397895216942 - 0.1534174978733063 - -0.2696731984615326 - <_> - - <_> - - - - <_> - 2 15 4 2 -1. - <_> - 2 16 4 1 2. - 0 - 1.0292009683325887e-003 - -0.2048998028039932 - 0.2015317976474762 - <_> - - <_> - - - - <_> - 18 6 2 11 -1. - <_> - 19 6 1 11 2. - 0 - 2.8783010784536600e-003 - -0.1735114008188248 - 0.2129794955253601 - <_> - - <_> - - - - <_> - 0 12 2 6 -1. - <_> - 0 14 2 2 3. - 0 - -7.4144392274320126e-003 - -0.5962486863136292 - 0.0470779500901699 - <_> - - <_> - - - - <_> - 12 5 3 2 -1. - <_> - 12 6 3 1 2. - 0 - -1.4831849839538336e-003 - 0.1902461051940918 - -0.1598639041185379 - <_> - - <_> - - - - <_> - 1 3 2 3 -1. - <_> - 1 4 2 1 3. - 0 - 4.5968941412866116e-003 - 0.0314471311867237 - -0.6869434118270874 - <_> - - <_> - - - - <_> - 16 14 4 4 -1. - <_> - 16 16 4 2 2. - 0 - 2.4255330208688974e-003 - -0.2360935956239700 - 0.1103610992431641 - <_> - - <_> - - - - <_> - 6 8 12 5 -1. - <_> - 10 8 4 5 3. - 0 - -0.0849505662918091 - 0.2310716062784195 - -0.1377653032541275 - <_> - - <_> - - - - <_> - 13 7 2 7 -1. - <_> - 14 7 1 7 2. - 0 - -5.0145681016147137e-003 - 0.3867610991001129 - -0.0562173798680305 - <_> - - <_> - - - - <_> - 1 8 2 6 -1. - <_> - 2 8 1 6 2. - 0 - -2.1482061129063368e-003 - 0.1819159984588623 - -0.1761569976806641 - <_> - - <_> - - - - <_> - 15 0 3 7 -1. - <_> - 16 0 1 7 3. - 0 - -0.0103967702016234 - -0.7535138130187988 - 0.0240919701755047 - <_> - - <_> - - - - <_> - 4 2 6 2 -1. - <_> - 6 2 2 2 3. - 0 - -0.0134667502716184 - -0.7211886048316956 - 0.0349493697285652 - <_> - - <_> - - - - <_> - 0 9 20 9 -1. - <_> - 0 12 20 3 3. - 0 - -0.0844354778528214 - -0.3379263877868652 - 0.0711138173937798 - <_> - - <_> - - - - <_> - 10 14 2 2 -1. - <_> - 10 15 2 1 2. - 0 - 2.4771490134298801e-003 - -0.1176510974764824 - 0.2254198938608170 - <_> - - <_> - - - - <_> - 6 5 10 4 -1. - <_> - 6 7 10 2 2. - 0 - 0.0158280506730080 - -0.0695362165570259 - 0.3139536976814270 - <_> - - <_> - - - - <_> - 6 1 5 9 -1. - <_> - 6 4 5 3 3. - 0 - 0.0649169832468033 - -0.0750435888767242 - 0.4067733883857727 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - 2.9652469675056636e-004 - 0.0739533603191376 - -0.3454400897026062 - <_> - - <_> - - - - <_> - 0 14 2 4 -1. - <_> - 0 16 2 2 2. - 0 - 1.3129520229995251e-003 - -0.1690943986177445 - 0.1525837033987045 - <_> - - <_> - - - - <_> - 10 8 2 5 -1. - <_> - 11 8 1 5 2. - 0 - -5.8032129891216755e-003 - 0.3526014983654022 - -0.0834440663456917 - <_> - - <_> - - - - <_> - 3 7 12 7 -1. - <_> - 7 7 4 7 3. - 0 - -0.1479167938232422 - 0.4300465881824493 - -0.0573099292814732 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 3 0 3 6 2. - 0 - -0.0165841504931450 - 0.2343268990516663 - -0.1090764030814171 - <_> - - <_> - - - - <_> - 1 0 4 4 -1. - <_> - 3 0 2 4 2. - 0 - 3.0183270573616028e-003 - -0.1360093951225281 - 0.2640928924083710 - <_> - - <_> - - - - <_> - 0 0 6 8 -1. - <_> - 2 0 2 8 3. - 0 - -0.0364719182252884 - -0.6280974149703980 - 0.0435451082885265 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -7.3119226726703346e-005 - 0.1647063046693802 - -0.1646378040313721 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - -3.6719450727105141e-003 - -0.4742136001586914 - 0.0485869199037552 - <_> - - <_> - - - - <_> - 5 4 2 4 -1. - <_> - 5 6 2 2 2. - 0 - -4.0151178836822510e-003 - 0.1822218000888825 - -0.1409751027822495 - <_> - - <_> - - - - <_> - 2 10 9 1 -1. - <_> - 5 10 3 1 3. - 0 - 0.0199480205774307 - -0.0697876587510109 - 0.3670746088027954 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - 7.6699437340721488e-004 - 0.0557292997837067 - -0.4458543062210083 - <_> - - <_> - - - - <_> - 0 17 2 3 -1. - <_> - 0 18 2 1 3. - 0 - -1.1806039838120341e-003 - -0.4687662124633789 - 0.0489022210240364 - <_> - - <_> - - - - <_> - 0 15 16 3 -1. - <_> - 8 15 8 3 2. - 0 - 0.0158473495393991 - -0.1212020963430405 - 0.2056653052568436 - <_> - - <_> - - - - <_> - 0 5 4 1 -1. - <_> - 2 5 2 1 2. - 0 - -1.1985700111836195e-003 - 0.2026209980249405 - -0.1282382011413574 - <_> - - <_> - - - - <_> - 1 0 6 20 -1. - <_> - 3 0 2 20 3. - 0 - -0.1096495985984802 - -0.8661919236183167 - 0.0303518492728472 - <_> - - <_> - - - - <_> - 2 5 4 6 -1. - <_> - 2 5 2 3 2. - <_> - 4 8 2 3 2. - 0 - -9.2532606795430183e-003 - 0.2934311926364899 - -0.0853619500994682 - <_> - - <_> - - - - <_> - 9 16 6 3 -1. - <_> - 11 16 2 3 3. - 0 - 0.0146865304559469 - 0.0327986218035221 - -0.7755656242370606 - <_> - - <_> - - - - <_> - 11 17 6 1 -1. - <_> - 14 17 3 1 2. - 0 - -1.3514430029317737e-003 - 0.2442699968814850 - -0.1150325015187264 - <_> - - <_> - - - - <_> - 3 17 15 2 -1. - <_> - 8 17 5 2 3. - 0 - -4.3728090822696686e-003 - 0.2168767005205154 - -0.1398448050022125 - <_> - - <_> - - - - <_> - 18 0 2 3 -1. - <_> - 18 1 2 1 3. - 0 - 3.4263390116393566e-003 - 0.0456142202019691 - -0.5456771254539490 - <_> - - <_> - - - - <_> - 13 1 7 4 -1. - <_> - 13 3 7 2 2. - 0 - -3.8404068909585476e-003 - 0.1494950056076050 - -0.1506250947713852 - <_> - - <_> - - - - <_> - 13 6 4 4 -1. - <_> - 13 6 2 2 2. - <_> - 15 8 2 2 2. - 0 - 3.7988980766385794e-003 - -0.0873016268014908 - 0.2548153102397919 - <_> - - <_> - - - - <_> - 17 6 3 4 -1. - <_> - 17 8 3 2 2. - 0 - -2.0094281062483788e-003 - 0.1725907027721405 - -0.1428847014904022 - <_> - - <_> - - - - <_> - 14 9 2 2 -1. - <_> - 15 9 1 2 2. - 0 - -2.4370709434151649e-003 - 0.2684809863567352 - -0.0818982198834419 - <_> - - <_> - - - - <_> - 17 17 1 3 -1. - <_> - 17 18 1 1 3. - 0 - 1.0485399980098009e-003 - 0.0461132600903511 - -0.4724327921867371 - <_> - - <_> - - - - <_> - 3 19 8 1 -1. - <_> - 7 19 4 1 2. - 0 - 1.7460780218243599e-003 - -0.1103043034672737 - 0.2037972956895828 - <_> - - <_> - - - - <_> - 0 9 3 6 -1. - <_> - 0 12 3 3 2. - 0 - 5.8608627878129482e-003 - -0.1561965942382813 - 0.1592743992805481 - <_> - - <_> - - - - <_> - 4 7 15 5 -1. - <_> - 9 7 5 5 3. - 0 - -0.0277249794453382 - 0.1134911999106407 - -0.2188514024019241 - <_> - - <_> - - - - <_> - 6 9 9 5 -1. - <_> - 9 9 3 5 3. - 0 - 0.0470806397497654 - -0.0416887290775776 - 0.5363004803657532 - <_> - - <_> - - - - <_> - 8 1 6 2 -1. - <_> - 10 1 2 2 3. - 0 - -7.9283770173788071e-003 - -0.5359513163566589 - 0.0442375093698502 - <_> - - <_> - - - - <_> - 4 0 12 2 -1. - <_> - 10 0 6 2 2. - 0 - -0.0128805404528975 - 0.2323794960975647 - -0.1024625003337860 - <_> - - <_> - - - - <_> - 7 0 10 3 -1. - <_> - 12 0 5 3 2. - 0 - 0.0236047692596912 - -0.0882914364337921 - 0.3056105971336365 - <_> - - <_> - - - - <_> - 5 0 9 6 -1. - <_> - 5 2 9 2 3. - 0 - 0.0159022007137537 - -0.1223810985684395 - 0.1784912049770355 - <_> - - <_> - - - - <_> - 8 3 6 4 -1. - <_> - 8 5 6 2 2. - 0 - 7.9939495772123337e-003 - -0.0837290063500404 - 0.3231959044933319 - <_> - - <_> - - - - <_> - 17 4 2 3 -1. - <_> - 17 5 2 1 3. - 0 - 5.7100867852568626e-003 - 0.0384792089462280 - -0.6813815236091614 - -1.0492420196533203 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 4 3 -1. - <_> - 5 3 4 1 3. - 0 - 2.2480720654129982e-003 - -0.1641687005758286 - 0.4164853096008301 - <_> - - <_> - - - - <_> - 5 9 2 6 -1. - <_> - 6 9 1 6 2. - 0 - 4.5813550241291523e-003 - -0.1246595978736877 - 0.4038512110710144 - <_> - - <_> - - - - <_> - 14 10 2 6 -1. - <_> - 15 10 1 6 2. - 0 - -1.6073239967226982e-003 - 0.2608245909214020 - -0.2028252035379410 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 7 5 3 1 3. - 0 - 2.5205370038747787e-003 - -0.1055722981691361 - 0.3666911125183106 - <_> - - <_> - - - - <_> - 12 4 8 2 -1. - <_> - 12 4 4 1 2. - <_> - 16 5 4 1 2. - 0 - 2.4119189474731684e-003 - -0.1387760043144226 - 0.2995991110801697 - <_> - - <_> - - - - <_> - 15 8 1 6 -1. - <_> - 15 10 1 2 3. - 0 - 5.7156179100275040e-003 - -0.0776834636926651 - 0.4848192036151886 - <_> - - <_> - - - - <_> - 4 17 11 3 -1. - <_> - 4 18 11 1 3. - 0 - 3.1093840952962637e-003 - -0.1122900024056435 - 0.2921550869941711 - <_> - - <_> - - - - <_> - 3 0 16 20 -1. - <_> - 3 10 16 10 2. - 0 - -0.0868366286158562 - -0.3677960038185120 - 0.0725972428917885 - <_> - - <_> - - - - <_> - 12 4 4 6 -1. - <_> - 12 6 4 2 3. - 0 - 5.2652182057499886e-003 - -0.1089029014110565 - 0.3179126083850861 - <_> - - <_> - - - - <_> - 11 0 6 6 -1. - <_> - 13 0 2 6 3. - 0 - -0.0199135299772024 - -0.5337343811988831 - 0.0705857127904892 - <_> - - <_> - - - - <_> - 13 1 6 4 -1. - <_> - 13 1 3 2 2. - <_> - 16 3 3 2 2. - 0 - 3.8297839928418398e-003 - -0.1357591003179550 - 0.2278887927532196 - <_> - - <_> - - - - <_> - 11 0 6 4 -1. - <_> - 13 0 2 4 3. - 0 - 0.0104318596422672 - 0.0887979120016098 - -0.4795897006988525 - <_> - - <_> - - - - <_> - 8 6 6 9 -1. - <_> - 10 6 2 9 3. - 0 - -0.0200404394418001 - 0.1574553996324539 - -0.1777157038450241 - <_> - - <_> - - - - <_> - 7 0 3 4 -1. - <_> - 8 0 1 4 3. - 0 - -5.2967290394008160e-003 - -0.6843491792678833 - 0.0356714613735676 - <_> - - <_> - - - - <_> - 0 17 14 2 -1. - <_> - 0 17 7 1 2. - <_> - 7 18 7 1 2. - 0 - -2.1624139044433832e-003 - 0.2831803858280182 - -0.0985112786293030 - <_> - - <_> - - - - <_> - 6 18 2 2 -1. - <_> - 6 18 1 1 2. - <_> - 7 19 1 1 2. - 0 - -3.5464888787828386e-004 - -0.3707734048366547 - 0.0809329524636269 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -1.8152060511056334e-004 - -0.3220703005790710 - 0.0775510594248772 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 18 1 1 2. - <_> - 18 19 1 1 2. - 0 - -2.7563021285459399e-004 - -0.3244127929210663 - 0.0879494771361351 - <_> - - <_> - - - - <_> - 5 7 1 9 -1. - <_> - 5 10 1 3 3. - 0 - 6.3823810778558254e-003 - -0.0889247134327888 - 0.3172721862792969 - <_> - - <_> - - - - <_> - 5 3 6 4 -1. - <_> - 7 3 2 4 3. - 0 - 0.0111509095877409 - 0.0710198432207108 - -0.4049403965473175 - <_> - - <_> - - - - <_> - 1 9 6 2 -1. - <_> - 1 9 3 1 2. - <_> - 4 10 3 1 2. - 0 - -1.0593760525807738e-003 - 0.2605066895484924 - -0.1176564022898674 - <_> - - <_> - - - - <_> - 6 9 2 3 -1. - <_> - 7 9 1 3 2. - 0 - 2.3906480055302382e-003 - -0.0843886211514473 - 0.3123055100440979 - <_> - - <_> - - - - <_> - 6 8 6 12 -1. - <_> - 8 8 2 12 3. - 0 - -0.0110007496550679 - 0.1915224939584732 - -0.1521002054214478 - <_> - - <_> - - - - <_> - 4 18 2 2 -1. - <_> - 4 18 1 1 2. - <_> - 5 19 1 1 2. - 0 - -2.4643228971399367e-004 - -0.3176515996456146 - 0.0865822583436966 - <_> - - <_> - - - - <_> - 9 1 6 6 -1. - <_> - 9 3 6 2 3. - 0 - 0.0230532698333263 - -0.1008976027369499 - 0.2576929032802582 - <_> - - <_> - - - - <_> - 6 17 6 2 -1. - <_> - 6 18 6 1 2. - 0 - -2.2135660983622074e-003 - 0.4568921029567719 - -0.0524047911167145 - <_> - - <_> - - - - <_> - 3 18 16 2 -1. - <_> - 3 19 16 1 2. - 0 - -9.7139709396287799e-004 - -0.3551838099956513 - 0.0800943821668625 - <_> - - <_> - - - - <_> - 3 0 3 11 -1. - <_> - 4 0 1 11 3. - 0 - 1.5676229959353805e-003 - 0.1009142026305199 - -0.2160304039716721 - <_> - - <_> - - - - <_> - 13 18 3 1 -1. - <_> - 14 18 1 1 3. - 0 - 7.5460801599547267e-004 - 0.0578961782157421 - -0.4046111106872559 - <_> - - <_> - - - - <_> - 6 0 9 6 -1. - <_> - 6 2 9 2 3. - 0 - -0.0206989701837301 - 0.3154363036155701 - -0.0807130485773087 - <_> - - <_> - - - - <_> - 1 2 12 4 -1. - <_> - 1 2 6 2 2. - <_> - 7 4 6 2 2. - 0 - -0.0206199400126934 - 0.2718166112899780 - -0.0763586163520813 - <_> - - <_> - - - - <_> - 3 3 6 4 -1. - <_> - 5 3 2 4 3. - 0 - 0.0216111298650503 - 0.0394934490323067 - -0.5942965149879456 - <_> - - <_> - - - - <_> - 12 0 8 1 -1. - <_> - 16 0 4 1 2. - 0 - 6.5676742233335972e-003 - -0.0983536690473557 - 0.2364927977323532 - <_> - - <_> - - - - <_> - 9 0 6 2 -1. - <_> - 11 0 2 2 3. - 0 - -8.8434796780347824e-003 - -0.5252342820167542 - 0.0430999211966991 - <_> - - <_> - - - - <_> - 3 3 12 1 -1. - <_> - 9 3 6 1 2. - 0 - -9.4260741025209427e-003 - 0.2466513067483902 - -0.0941307172179222 - <_> - - <_> - - - - <_> - 2 7 6 2 -1. - <_> - 2 7 3 1 2. - <_> - 5 8 3 1 2. - 0 - -1.9830230157822371e-003 - 0.2674370110034943 - -0.0900693163275719 - <_> - - <_> - - - - <_> - 0 8 4 6 -1. - <_> - 0 10 4 2 3. - 0 - -1.7358399927616119e-003 - 0.1594001948833466 - -0.1578941047191620 - <_> - - <_> - - - - <_> - 9 6 3 7 -1. - <_> - 10 6 1 7 3. - 0 - -0.0135138696059585 - 0.4079233109951019 - -0.0642231181263924 - <_> - - <_> - - - - <_> - 9 6 6 13 -1. - <_> - 11 6 2 13 3. - 0 - -0.0193940103054047 - 0.1801564991474152 - -0.1373140066862106 - <_> - - <_> - - - - <_> - 11 12 6 1 -1. - <_> - 13 12 2 1 3. - 0 - -3.2684770412743092e-003 - 0.2908039093017578 - -0.0801619067788124 - <_> - - <_> - - - - <_> - 18 9 2 6 -1. - <_> - 18 12 2 3 2. - 0 - 4.1773589327931404e-004 - -0.2141298055648804 - 0.1127343997359276 - <_> - - <_> - - - - <_> - 17 2 3 9 -1. - <_> - 18 2 1 9 3. - 0 - -7.6351119205355644e-003 - -0.4536595940589905 - 0.0546250604093075 - <_> - - <_> - - - - <_> - 13 8 4 6 -1. - <_> - 13 8 2 3 2. - <_> - 15 11 2 3 2. - 0 - -8.3652976900339127e-003 - 0.2647292017936707 - -0.0943341106176376 - <_> - - <_> - - - - <_> - 4 2 12 6 -1. - <_> - 10 2 6 6 2. - 0 - 0.0277684498578310 - -0.1013671010732651 - 0.2074397951364517 - <_> - - <_> - - - - <_> - 4 14 16 6 -1. - <_> - 12 14 8 6 2. - 0 - -0.0548912286758423 - 0.2884030938148499 - -0.0753120407462120 - <_> - - <_> - - - - <_> - 6 19 10 1 -1. - <_> - 11 19 5 1 2. - 0 - 2.5793339591473341e-003 - -0.1108852997422218 - 0.2172496020793915 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - 6.6196516854688525e-005 - -0.1887210011482239 - 0.1444068998098373 - <_> - - <_> - - - - <_> - 4 14 10 3 -1. - <_> - 4 15 10 1 3. - 0 - 5.0907251425087452e-003 - -0.0776012316346169 - 0.2939837872982025 - <_> - - <_> - - - - <_> - 6 0 12 12 -1. - <_> - 6 4 12 4 3. - 0 - -0.1044425964355469 - 0.2013310939073563 - -0.1090397015213966 - <_> - - <_> - - - - <_> - 5 7 4 2 -1. - <_> - 5 7 2 1 2. - <_> - 7 8 2 1 2. - 0 - -6.7273090826347470e-004 - 0.1794590055942535 - -0.1202367022633553 - <_> - - <_> - - - - <_> - 17 5 3 2 -1. - <_> - 18 5 1 2 3. - 0 - 3.2412849832326174e-003 - 0.0406881310045719 - -0.5460057258605957 - -1.1122100353240967 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 13 6 3 -1. - <_> - 8 14 6 1 3. - 0 - 5.2965320646762848e-003 - -0.1215452998876572 - 0.6442037224769592 - <_> - - <_> - - - - <_> - 8 13 5 3 -1. - <_> - 8 14 5 1 3. - 0 - -2.5326260365545750e-003 - 0.5123322010040283 - -0.1110825985670090 - <_> - - <_> - - - - <_> - 13 2 1 18 -1. - <_> - 13 11 1 9 2. - 0 - -2.9183230362832546e-003 - -0.5061542987823486 - 0.1150197982788086 - <_> - - <_> - - - - <_> - 6 10 9 2 -1. - <_> - 9 10 3 2 3. - 0 - -0.0236923396587372 - 0.3716728091239929 - -0.1467268019914627 - <_> - - <_> - - - - <_> - 11 0 7 4 -1. - <_> - 11 2 7 2 2. - 0 - 0.0201774705201387 - -0.1738884001970291 - 0.4775949120521545 - <_> - - <_> - - - - <_> - 1 0 6 8 -1. - <_> - 3 0 2 8 3. - 0 - -0.0217232108116150 - -0.4388009011745453 - 0.1357689946889877 - <_> - - <_> - - - - <_> - 9 15 3 3 -1. - <_> - 9 16 3 1 3. - 0 - 2.8369780629873276e-003 - -0.1251206994056702 - 0.4678902924060822 - <_> - - <_> - - - - <_> - 9 17 9 3 -1. - <_> - 9 18 9 1 3. - 0 - 2.7148420922458172e-003 - -0.0880188569426537 - 0.3686651885509491 - <_> - - <_> - - - - <_> - 12 12 3 3 -1. - <_> - 12 13 3 1 3. - 0 - 3.2625689636915922e-003 - -0.0853353068232536 - 0.5164473056793213 - <_> - - <_> - - - - <_> - 4 1 3 5 -1. - <_> - 5 1 1 5 3. - 0 - -3.5618850961327553e-003 - -0.4450393021106720 - 0.0917381718754768 - <_> - - <_> - - - - <_> - 10 14 2 3 -1. - <_> - 10 15 2 1 3. - 0 - 1.9227749435231090e-003 - -0.1107731014490128 - 0.3941699862480164 - <_> - - <_> - - - - <_> - 18 17 2 2 -1. - <_> - 18 17 1 1 2. - <_> - 19 18 1 1 2. - 0 - -3.5111969918943942e-004 - -0.3777570128440857 - 0.1216617003083229 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 1.9121779769193381e-004 - 0.0748160183429718 - -0.4076710045337677 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - -2.6525629800744355e-004 - -0.3315171897411346 - 0.1129112020134926 - <_> - - <_> - - - - <_> - 4 10 9 1 -1. - <_> - 7 10 3 1 3. - 0 - 0.0200867000967264 - -0.0615981183946133 - 0.5612881779670715 - <_> - - <_> - - - - <_> - 3 9 6 5 -1. - <_> - 5 9 2 5 3. - 0 - 0.0367832481861115 - -0.0602513886988163 - 0.5219249129295349 - <_> - - <_> - - - - <_> - 18 8 1 12 -1. - <_> - 18 14 1 6 2. - 0 - 1.3941619545221329e-003 - -0.3550305068492889 - 0.1086302027106285 - <_> - - <_> - - - - <_> - 0 2 8 6 -1. - <_> - 0 2 4 3 2. - <_> - 4 5 4 3 2. - 0 - -0.0151816699653864 - 0.2273965030908585 - -0.1625299006700516 - <_> - - <_> - - - - <_> - 9 4 3 3 -1. - <_> - 9 5 3 1 3. - 0 - 4.6796840615570545e-003 - -0.0575350411236286 - 0.4812423884868622 - <_> - - <_> - - - - <_> - 3 18 2 2 -1. - <_> - 3 18 1 1 2. - <_> - 4 19 1 1 2. - 0 - -1.7988319450523704e-004 - -0.3058767020702362 - 0.1086815968155861 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 6 5 4 1 3. - 0 - -3.5850999411195517e-003 - 0.3859694004058838 - -0.0921940729022026 - <_> - - <_> - - - - <_> - 16 7 4 2 -1. - <_> - 16 7 2 1 2. - <_> - 18 8 2 1 2. - 0 - 1.0793360415846109e-003 - -0.1119038984179497 - 0.3112520873546600 - <_> - - <_> - - - - <_> - 5 17 1 3 -1. - <_> - 5 18 1 1 3. - 0 - 7.3285802500322461e-005 - -0.2023991048336029 - 0.1558668017387390 - <_> - - <_> - - - - <_> - 2 0 15 20 -1. - <_> - 2 10 15 10 2. - 0 - 0.1367873996496201 - -0.2167285978794098 - 0.1442039012908936 - <_> - - <_> - - - - <_> - 8 11 6 4 -1. - <_> - 8 11 3 2 2. - <_> - 11 13 3 2 2. - 0 - -0.0117292599752545 - 0.4350377023220062 - -0.0748865306377411 - <_> - - <_> - - - - <_> - 8 16 4 3 -1. - <_> - 8 17 4 1 3. - 0 - 3.9230841211974621e-003 - -0.0502893291413784 - 0.5883116126060486 - <_> - - <_> - - - - <_> - 8 18 2 2 -1. - <_> - 8 18 1 1 2. - <_> - 9 19 1 1 2. - 0 - -2.9819121118634939e-004 - -0.3823240101337433 - 0.0924511328339577 - <_> - - <_> - - - - <_> - 2 16 13 3 -1. - <_> - 2 17 13 1 3. - 0 - -4.7992770560085773e-003 - 0.4848878979682922 - -0.0731365233659744 - <_> - - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - -3.0155890271998942e-004 - -0.3575735986232758 - 0.1058188006281853 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 1 2 3 3. - 0 - 0.0103907696902752 - 0.0529204681515694 - -0.5724965929985046 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -9.4488041941076517e-004 - 0.4496682882308960 - -0.0830755233764648 - <_> - - <_> - - - - <_> - 14 7 4 2 -1. - <_> - 14 7 2 1 2. - <_> - 16 8 2 1 2. - 0 - 1.2651870492845774e-003 - -0.0966954380273819 - 0.3130227029323578 - <_> - - <_> - - - - <_> - 4 0 14 1 -1. - <_> - 11 0 7 1 2. - 0 - 0.0170945394784212 - -0.0812489762902260 - 0.3611383140087128 - <_> - - <_> - - - - <_> - 10 4 8 2 -1. - <_> - 10 4 4 1 2. - <_> - 14 5 4 1 2. - 0 - 2.5973359588533640e-003 - -0.1133835017681122 - 0.2223394960165024 - <_> - - <_> - - - - <_> - 8 2 3 2 -1. - <_> - 9 2 1 2 3. - 0 - 1.4527440071105957e-003 - 0.0697504431009293 - -0.3672071099281311 - <_> - - <_> - - - - <_> - 12 11 6 3 -1. - <_> - 12 12 6 1 3. - 0 - 4.7638658434152603e-003 - -0.0657889619469643 - 0.3832854032516480 - <_> - - <_> - - - - <_> - 1 5 1 4 -1. - <_> - 1 7 1 2 2. - 0 - -6.2501081265509129e-003 - -0.7075446844100952 - 0.0383501984179020 - <_> - - <_> - - - - <_> - 1 1 1 18 -1. - <_> - 1 7 1 6 3. - 0 - -3.1765329185873270e-003 - 0.1375540047883987 - -0.2324002981185913 - <_> - - <_> - - - - <_> - 11 13 3 2 -1. - <_> - 11 14 3 1 2. - 0 - 3.2191169448196888e-003 - -0.1293545067310333 - 0.2273788005113602 - <_> - - <_> - - - - <_> - 0 1 12 2 -1. - <_> - 0 1 6 1 2. - <_> - 6 2 6 1 2. - 0 - -5.6365579366683960e-003 - 0.3806715011596680 - -0.0672468394041061 - <_> - - <_> - - - - <_> - 10 18 2 2 -1. - <_> - 10 18 1 1 2. - <_> - 11 19 1 1 2. - 0 - -2.3844049428589642e-004 - -0.3112238049507141 - 0.0838383585214615 - <_> - - <_> - - - - <_> - 4 5 4 4 -1. - <_> - 4 5 2 2 2. - <_> - 6 7 2 2 2. - 0 - -4.1017560288310051e-003 - 0.2606728076934815 - -0.1044974029064179 - <_> - - <_> - - - - <_> - 6 7 1 3 -1. - <_> - 6 8 1 1 3. - 0 - 1.3336989795789123e-003 - -0.0582501403987408 - 0.4768244028091431 - <_> - - <_> - - - - <_> - 14 10 6 2 -1. - <_> - 16 10 2 2 3. - 0 - -1.2090239906683564e-003 - 0.1483450978994370 - -0.1732946932315826 - -1.2529590129852295 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 16 8 3 6 -1. - <_> - 17 8 1 6 3. - 0 - -3.1760931015014648e-003 - 0.3333333134651184 - -0.1664234995841980 - <_> - - <_> - - - - <_> - 4 10 6 2 -1. - <_> - 6 10 2 2 3. - 0 - 0.0248580798506737 - -0.0727288722991943 - 0.5667458176612854 - <_> - - <_> - - - - <_> - 6 5 3 7 -1. - <_> - 7 5 1 7 3. - 0 - -7.7597280032932758e-003 - 0.4625856876373291 - -0.0931121781468391 - <_> - - <_> - - - - <_> - 0 13 6 6 -1. - <_> - 0 16 6 3 2. - 0 - 7.8239021822810173e-003 - -0.2741461098194122 - 0.1324304938316345 - <_> - - <_> - - - - <_> - 12 5 1 9 -1. - <_> - 12 8 1 3 3. - 0 - -0.0109488395974040 - 0.2234548032283783 - -0.1496544927358627 - <_> - - <_> - - - - <_> - 5 9 3 3 -1. - <_> - 6 9 1 3 3. - 0 - -3.4349008928984404e-003 - 0.3872498869895935 - -0.0661217272281647 - <_> - - <_> - - - - <_> - 7 5 6 13 -1. - <_> - 9 5 2 13 3. - 0 - -0.0311562903225422 - 0.2407827973365784 - -0.1140690967440605 - <_> - - <_> - - - - <_> - 19 8 1 10 -1. - <_> - 19 13 1 5 2. - 0 - 1.1100519914180040e-003 - -0.2820797860622406 - 0.1327542960643768 - <_> - - <_> - - - - <_> - 11 18 6 1 -1. - <_> - 13 18 2 1 3. - 0 - 3.1762740109115839e-003 - 0.0345859304070473 - -0.5137431025505066 - <_> - - <_> - - - - <_> - 9 7 6 12 -1. - <_> - 11 7 2 12 3. - 0 - -0.0279774591326714 - 0.2392677962779999 - -0.1325591951608658 - <_> - - <_> - - - - <_> - 12 7 6 6 -1. - <_> - 14 7 2 6 3. - 0 - -0.0230979397892952 - 0.3901962041854858 - -0.0784780085086823 - <_> - - <_> - - - - <_> - 15 8 3 4 -1. - <_> - 16 8 1 4 3. - 0 - -3.9731930010020733e-003 - 0.3069106936454773 - -0.0706014037132263 - <_> - - <_> - - - - <_> - 6 11 4 2 -1. - <_> - 6 12 4 1 2. - 0 - 3.0335749033838511e-003 - -0.1400219053030014 - 0.1913485974073410 - <_> - - <_> - - - - <_> - 1 6 6 8 -1. - <_> - 3 6 2 8 3. - 0 - -0.0108443703502417 - 0.1654873043298721 - -0.1565777957439423 - <_> - - <_> - - - - <_> - 11 15 6 5 -1. - <_> - 13 15 2 5 3. - 0 - -0.0181505102664232 - -0.6324359178543091 - 0.0395618192851543 - <_> - - <_> - - - - <_> - 15 17 4 2 -1. - <_> - 15 18 4 1 2. - 0 - 7.1052298881113529e-004 - -0.1851557046175003 - 0.1340880990028381 - <_> - - <_> - - - - <_> - 13 11 6 1 -1. - <_> - 15 11 2 1 3. - 0 - 0.0108933402225375 - -0.0267302300781012 - 0.6097180247306824 - <_> - - <_> - - - - <_> - 5 18 2 2 -1. - <_> - 5 18 1 1 2. - <_> - 6 19 1 1 2. - 0 - -2.8780900174751878e-004 - -0.3006514012813568 - 0.0731714591383934 - <_> - - <_> - - - - <_> - 4 8 4 4 -1. - <_> - 4 8 2 2 2. - <_> - 6 10 2 2 2. - 0 - -3.5855069290846586e-003 - 0.2621760964393616 - -0.0797140970826149 - <_> - - <_> - - - - <_> - 11 7 9 3 -1. - <_> - 11 8 9 1 3. - 0 - -0.0197592806071043 - -0.5903922915458679 - 0.0406989715993404 - <_> - - <_> - - - - <_> - 0 3 10 4 -1. - <_> - 0 3 5 2 2. - <_> - 5 5 5 2 2. - 0 - -0.0108452104032040 - 0.1636455953121185 - -0.1258606016635895 - <_> - - <_> - - - - <_> - 7 18 6 1 -1. - <_> - 9 18 2 1 3. - 0 - -4.3183090165257454e-003 - -0.5747488141059876 - 0.0376443117856979 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - 1.4913700288161635e-003 - 0.0609134696424007 - -0.3022292852401733 - <_> - - <_> - - - - <_> - 0 0 6 8 -1. - <_> - 0 0 3 4 2. - <_> - 3 4 3 4 2. - 0 - 0.0156756993383169 - -0.0731459110975266 - 0.2937945127487183 - <_> - - <_> - - - - <_> - 7 6 3 8 -1. - <_> - 8 6 1 8 3. - 0 - -0.0110335601493716 - 0.3931880891323090 - -0.0470843203365803 - <_> - - <_> - - - - <_> - 13 7 7 3 -1. - <_> - 13 8 7 1 3. - 0 - 8.8555756956338882e-003 - 0.0376013815402985 - -0.4910849034786224 - <_> - - <_> - - - - <_> - 3 3 2 2 -1. - <_> - 3 4 2 1 2. - 0 - -8.9665671112015843e-004 - 0.1795202046632767 - -0.1108623966574669 - <_> - - <_> - - - - <_> - 0 3 3 3 -1. - <_> - 0 4 3 1 3. - 0 - -3.0592409893870354e-003 - -0.4442946016788483 - 0.0510054305195808 - <_> - - <_> - - - - <_> - 9 3 5 2 -1. - <_> - 9 4 5 1 2. - 0 - 6.3201179727911949e-003 - -0.0528410896658897 - 0.3719710111618042 - <_> - - <_> - - - - <_> - 6 5 9 4 -1. - <_> - 9 5 3 4 3. - 0 - 0.0206828303635120 - 0.0576671697199345 - -0.3690159916877747 - <_> - - <_> - - - - <_> - 3 10 12 3 -1. - <_> - 7 10 4 3 3. - 0 - 0.0998226627707481 - -0.0373770184814930 - 0.5816559195518494 - <_> - - <_> - - - - <_> - 8 7 3 6 -1. - <_> - 9 7 1 6 3. - 0 - -6.5854229032993317e-003 - 0.2850944101810455 - -0.0609780699014664 - <_> - - <_> - - - - <_> - 5 5 6 5 -1. - <_> - 8 5 3 5 2. - 0 - -0.0609003007411957 - -0.5103176832199097 - 0.0377874001860619 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 0 6 2 1 3. - 0 - -2.9991709161549807e-003 - -0.4794301092624664 - 0.0388338901102543 - <_> - - <_> - - - - <_> - 9 7 3 4 -1. - <_> - 10 7 1 4 3. - 0 - -9.8906438797712326e-003 - 0.4060907959938049 - -0.0478696487843990 - <_> - - <_> - - - - <_> - 1 0 6 15 -1. - <_> - 3 0 2 15 3. - 0 - -0.0826889276504517 - -0.7067118287086487 - 0.0274877492338419 - <_> - - <_> - - - - <_> - 15 1 3 5 -1. - <_> - 16 1 1 5 3. - 0 - 5.0060399807989597e-003 - 0.0282084401696920 - -0.5290969014167786 - <_> - - <_> - - - - <_> - 9 2 3 10 -1. - <_> - 10 2 1 10 3. - 0 - 6.1695030890405178e-003 - -0.0545548610389233 - 0.3283798098564148 - <_> - - <_> - - - - <_> - 8 8 6 12 -1. - <_> - 10 8 2 12 3. - 0 - -3.3914761152118444e-003 - 0.0921176671981812 - -0.2163711041212082 - <_> - - <_> - - - - <_> - 16 4 3 4 -1. - <_> - 16 6 3 2 2. - 0 - -2.6131230406463146e-003 - 0.1365101933479309 - -0.1378113031387329 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 8.0490659456700087e-004 - -0.0686371102929115 - 0.3358106911182404 - <_> - - <_> - - - - <_> - 13 0 6 9 -1. - <_> - 13 3 6 3 3. - 0 - -0.0381065085530281 - 0.2944543063640595 - -0.0682392269372940 - <_> - - <_> - - - - <_> - 7 17 1 3 -1. - <_> - 7 18 1 1 3. - 0 - 7.2450799052603543e-005 - -0.1675013005733490 - 0.1217823028564453 - <_> - - <_> - - - - <_> - 12 1 4 2 -1. - <_> - 12 2 4 1 2. - 0 - 1.5837959945201874e-003 - -0.0920428484678268 - 0.2134899049997330 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 17 4 1 1 3. - 0 - 1.2924340553581715e-003 - 0.0629172325134277 - -0.3617450892925263 - <_> - - <_> - - - - <_> - 0 16 9 3 -1. - <_> - 0 17 9 1 3. - 0 - 9.9146775901317596e-003 - 0.0195340607315302 - -0.8101503849029541 - <_> - - <_> - - - - <_> - 3 6 2 4 -1. - <_> - 3 6 1 2 2. - <_> - 4 8 1 2 2. - 0 - -1.7086310544982553e-003 - 0.2552523910999298 - -0.0682294592261314 - <_> - - <_> - - - - <_> - 13 18 3 1 -1. - <_> - 14 18 1 1 3. - 0 - 2.1844399161636829e-003 - 0.0233140494674444 - -0.8429678082466126 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 2 18 2 2 2. - 0 - -3.4244330599904060e-003 - 0.2721368968486786 - -0.0763952285051346 - <_> - - <_> - - - - <_> - 1 19 2 1 -1. - <_> - 2 19 1 1 2. - 0 - 2.7591470279730856e-004 - -0.1074284017086029 - 0.2288897037506104 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 19 4 1 2. - 0 - -6.0005177510902286e-004 - -0.2985421121120453 - 0.0634797364473343 - <_> - - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - -2.5001438916660845e-004 - -0.2717896997928619 - 0.0696150064468384 - <_> - - <_> - - - - <_> - 4 8 3 5 -1. - <_> - 5 8 1 5 3. - 0 - 6.8751391954720020e-003 - -0.0571858994662762 - 0.3669595122337341 - <_> - - <_> - - - - <_> - 2 1 6 7 -1. - <_> - 4 1 2 7 3. - 0 - 0.0127619002014399 - 0.0679556876420975 - -0.2853415012359619 - <_> - - <_> - - - - <_> - 3 6 2 8 -1. - <_> - 3 6 1 4 2. - <_> - 4 10 1 4 2. - 0 - -1.4752789866179228e-003 - 0.2068066000938416 - -0.1005939021706581 - <_> - - <_> - - - - <_> - 4 5 11 10 -1. - <_> - 4 10 11 5 2. - 0 - 0.1213881969451904 - -0.0971267968416214 - 0.1978961974382401 - <_> - - <_> - - - - <_> - 0 13 20 2 -1. - <_> - 10 13 10 2 2. - 0 - -0.0500812791287899 - 0.2841717898845673 - -0.0678799971938133 - <_> - - <_> - - - - <_> - 1 13 16 3 -1. - <_> - 9 13 8 3 2. - 0 - 0.0314549505710602 - -0.0894686728715897 - 0.2129842042922974 - <_> - - <_> - - - - <_> - 16 4 4 4 -1. - <_> - 16 4 2 2 2. - <_> - 18 6 2 2 2. - 0 - 1.8878319533541799e-003 - -0.1165644004940987 - 0.1666352003812790 - <_> - - <_> - - - - <_> - 16 0 4 12 -1. - <_> - 16 0 2 6 2. - <_> - 18 6 2 6 2. - 0 - -5.7211960665881634e-003 - 0.2370214015245438 - -0.0907766073942184 - <_> - - <_> - - - - <_> - 14 15 3 1 -1. - <_> - 15 15 1 1 3. - 0 - -1.8076719425152987e-004 - 0.1795192956924439 - -0.1079348027706146 - <_> - - <_> - - - - <_> - 3 4 12 10 -1. - <_> - 3 9 12 5 2. - 0 - -0.1976184993982315 - 0.4567429125308991 - -0.0404801592230797 - <_> - - <_> - - - - <_> - 9 18 2 2 -1. - <_> - 9 18 1 1 2. - <_> - 10 19 1 1 2. - 0 - -2.3846809926908463e-004 - -0.2373300939798355 - 0.0759221613407135 - <_> - - <_> - - - - <_> - 9 18 2 2 -1. - <_> - 9 18 1 1 2. - <_> - 10 19 1 1 2. - 0 - 2.1540730085689574e-004 - 0.0816880166530609 - -0.2868503034114838 - <_> - - <_> - - - - <_> - 13 4 2 14 -1. - <_> - 13 4 1 7 2. - <_> - 14 11 1 7 2. - 0 - 0.0101630901917815 - -0.0412500202655792 - 0.4803834855556488 - <_> - - <_> - - - - <_> - 4 2 6 4 -1. - <_> - 7 2 3 4 2. - 0 - -7.2184870950877666e-003 - 0.1745858043432236 - -0.1014650017023087 - <_> - - <_> - - - - <_> - 0 0 18 20 -1. - <_> - 0 0 9 10 2. - <_> - 9 10 9 10 2. - 0 - 0.2426317036151886 - 0.0534264817833900 - -0.3231852948665619 - <_> - - <_> - - - - <_> - 15 11 1 2 -1. - <_> - 15 12 1 1 2. - 0 - 6.9304101634770632e-004 - -0.1149917989969254 - 0.1479393988847733 - <_> - - <_> - - - - <_> - 16 10 2 4 -1. - <_> - 16 10 1 2 2. - <_> - 17 12 1 2 2. - 0 - 3.5475199110805988e-003 - -0.0394249781966209 - 0.5312618017196655 - <_> - - <_> - - - - <_> - 18 17 2 2 -1. - <_> - 18 17 1 1 2. - <_> - 19 18 1 1 2. - 0 - 2.1403690334409475e-004 - 0.0697538331151009 - -0.2731958031654358 - <_> - - <_> - - - - <_> - 9 17 1 2 -1. - <_> - 9 18 1 1 2. - 0 - -5.7119462871924043e-004 - 0.3436990082263947 - -0.0576990097761154 - <_> - - <_> - - - - <_> - 8 4 9 6 -1. - <_> - 11 4 3 6 3. - 0 - -6.6290069371461868e-003 - 0.1175848990678787 - -0.1502013951539993 - -1.1188739538192749 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 9 9 10 -1. - <_> - 9 9 3 10 3. - 0 - -0.0265134498476982 - 0.2056864053010941 - -0.2647390067577362 - <_> - - <_> - - - - <_> - 5 0 5 4 -1. - <_> - 5 2 5 2 2. - 0 - 9.7727458924055099e-003 - -0.1119284033775330 - 0.3257054984569550 - <_> - - <_> - - - - <_> - 5 7 11 4 -1. - <_> - 5 9 11 2 2. - 0 - 0.0322903506457806 - -0.0985747575759888 - 0.3177917003631592 - <_> - - <_> - - - - <_> - 2 4 2 14 -1. - <_> - 3 4 1 14 2. - 0 - -2.8103240765631199e-003 - 0.1521389931440353 - -0.1968640983104706 - <_> - - <_> - - - - <_> - 8 6 3 5 -1. - <_> - 9 6 1 5 3. - 0 - -0.0109914299100637 - 0.5140765905380249 - -0.0437072105705738 - <_> - - <_> - - - - <_> - 8 4 3 9 -1. - <_> - 9 4 1 9 3. - 0 - 6.3133831135928631e-003 - -0.0927810221910477 - 0.3470247089862824 - <_> - - <_> - - - - <_> - 0 8 20 6 -1. - <_> - 0 10 20 2 3. - 0 - 0.0871059820055962 - 0.0300536490976810 - -0.8281481862068176 - <_> - - <_> - - - - <_> - 14 16 6 1 -1. - <_> - 17 16 3 1 2. - 0 - 1.1799359926953912e-003 - -0.1292842030525208 - 0.2064612060785294 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 19 2 1 2. - 0 - -9.3056890182197094e-004 - -0.5002143979072571 - 0.0936669930815697 - <_> - - <_> - - - - <_> - 8 17 6 3 -1. - <_> - 10 17 2 3 3. - 0 - -0.0136871701106429 - -0.7935814857482910 - -6.6733639687299728e-003 - <_> - - <_> - - - - <_> - 4 1 9 15 -1. - <_> - 7 1 3 15 3. - 0 - -0.0759174525737762 - 0.3046964108943939 - -0.0796558931469917 - <_> - - <_> - - - - <_> - 11 5 3 12 -1. - <_> - 12 5 1 12 3. - 0 - -2.8559709899127483e-003 - 0.2096146047115326 - -0.1273255050182343 - <_> - - <_> - - - - <_> - 0 15 4 3 -1. - <_> - 0 16 4 1 3. - 0 - -4.0231510065495968e-003 - -0.6581727862358093 - 0.0506836399435997 - <_> - - <_> - - - - <_> - 0 0 15 1 -1. - <_> - 5 0 5 1 3. - 0 - 0.0175580400973558 - -0.0853826925158501 - 0.3617455959320068 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 8 0 2 4 3. - 0 - 0.0219882391393185 - 0.0629436969757080 - -0.7089633941650391 - <_> - - <_> - - - - <_> - 2 0 9 3 -1. - <_> - 5 0 3 3 3. - 0 - -2.8599589131772518e-003 - 0.1468378007411957 - -0.1646597981452942 - <_> - - <_> - - - - <_> - 13 6 3 7 -1. - <_> - 14 6 1 7 3. - 0 - -0.0100308498367667 - 0.4957993924617767 - -0.0271883402019739 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 7 4 1 2. - 0 - -6.9560329429805279e-003 - 0.2797777950763702 - -0.0779533311724663 - <_> - - <_> - - - - <_> - 6 18 6 1 -1. - <_> - 8 18 2 1 3. - 0 - -3.8356808945536613e-003 - -0.5816398262977600 - 0.0357399396598339 - <_> - - <_> - - - - <_> - 18 6 2 2 -1. - <_> - 18 7 2 1 2. - 0 - -3.2647319603711367e-003 - -0.4994508028030396 - 0.0469864904880524 - <_> - - <_> - - - - <_> - 6 4 7 3 -1. - <_> - 6 5 7 1 3. - 0 - -7.8412350267171860e-003 - 0.3453283011913300 - -0.0688104033470154 - <_> - - <_> - - - - <_> - 12 7 3 1 -1. - <_> - 13 7 1 1 3. - 0 - -8.1718113506212831e-005 - 0.1504171043634415 - -0.1414667963981628 - <_> - - <_> - - - - <_> - 15 1 2 10 -1. - <_> - 15 1 1 5 2. - <_> - 16 6 1 5 2. - 0 - -3.2448628917336464e-003 - 0.2272451072931290 - -0.0928602069616318 - <_> - - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 0 19 2 1 2. - 0 - -7.8561151167377830e-004 - -0.4431901872158051 - 0.0578124411404133 - <_> - - <_> - - - - <_> - 19 4 1 8 -1. - <_> - 19 8 1 4 2. - 0 - -6.2474247533828020e-004 - 0.1395238935947418 - -0.1466871947050095 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - -3.2942948746494949e-004 - -0.2990157008171082 - 0.0760667398571968 - <_> - - <_> - - - - <_> - 0 15 6 4 -1. - <_> - 0 15 3 2 2. - <_> - 3 17 3 2 2. - 0 - 1.2605739757418633e-003 - -0.1612560003995895 - 0.1395380049943924 - <_> - - <_> - - - - <_> - 19 0 1 18 -1. - <_> - 19 6 1 6 3. - 0 - -0.0516670197248459 - -0.5314283967018127 - 0.0407195203006268 - <_> - - <_> - - - - <_> - 10 2 6 2 -1. - <_> - 12 2 2 2 3. - 0 - -0.0152856195345521 - -0.7820637822151184 - 0.0271837692707777 - <_> - - <_> - - - - <_> - 2 8 12 2 -1. - <_> - 6 8 4 2 3. - 0 - 0.0690298229455948 - -0.0364270210266113 - 0.7110251784324646 - <_> - - <_> - - - - <_> - 16 0 4 1 -1. - <_> - 18 0 2 1 2. - 0 - 1.4522749697789550e-003 - -0.0968905165791512 - 0.2166842073202133 - <_> - - <_> - - - - <_> - 8 4 2 6 -1. - <_> - 8 7 2 3 2. - 0 - -2.4765590205788612e-003 - 0.1164531037211418 - -0.1822797954082489 - <_> - - <_> - - - - <_> - 14 5 2 10 -1. - <_> - 15 5 1 10 2. - 0 - -1.5134819550439715e-003 - 0.1786397993564606 - -0.1221496984362602 - <_> - - <_> - - - - <_> - 13 4 2 2 -1. - <_> - 13 5 2 1 2. - 0 - -1.5099470037966967e-003 - 0.1808623969554901 - -0.1144606992602348 - <_> - - <_> - - - - <_> - 11 1 3 6 -1. - <_> - 11 3 3 2 3. - 0 - -6.7054620012640953e-003 - 0.2510659992694855 - -0.0918714627623558 - <_> - - <_> - - - - <_> - 6 9 12 2 -1. - <_> - 10 9 4 2 3. - 0 - -0.0140752000734210 - 0.1370750963687897 - -0.1733350008726120 - <_> - - <_> - - - - <_> - 9 16 4 2 -1. - <_> - 9 17 4 1 2. - 0 - -2.2400720044970512e-003 - 0.4009298086166382 - -0.0475768782198429 - <_> - - <_> - - - - <_> - 5 14 15 4 -1. - <_> - 5 16 15 2 2. - 0 - 0.0197823699563742 - -0.1904035061597824 - 0.1492341011762619 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 17 2 1 2. - 0 - 2.6002870872616768e-003 - 0.0469717681407928 - -0.4330765902996063 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - -5.3445628145709634e-004 - -0.4374423027038574 - 0.0415201894938946 - <_> - - <_> - - - - <_> - 6 4 3 8 -1. - <_> - 7 4 1 8 3. - 0 - -0.0174665097147226 - 0.6581817269325256 - -0.0344474911689758 - <_> - - <_> - - - - <_> - 5 9 3 1 -1. - <_> - 6 9 1 1 3. - 0 - -2.0425589755177498e-003 - 0.3965792953968048 - -0.0440524294972420 - <_> - - <_> - - - - <_> - 0 8 1 6 -1. - <_> - 0 10 1 2 3. - 0 - 2.6661779265850782e-003 - 0.0587709583342075 - -0.3280636966228485 - <_> - - <_> - - - - <_> - 11 2 9 6 -1. - <_> - 14 2 3 6 3. - 0 - -0.0559823699295521 - -0.5173547267913818 - 0.0357918404042721 - <_> - - <_> - - - - <_> - 12 2 6 4 -1. - <_> - 14 2 2 4 3. - 0 - -1.5066330088302493e-003 - 0.1512386947870255 - -0.1252018064260483 - <_> - - <_> - - - - <_> - 1 7 2 4 -1. - <_> - 1 9 2 2 2. - 0 - -0.0114723695442081 - -0.6293053030967712 - 0.0347043313086033 - <_> - - <_> - - - - <_> - 13 1 6 4 -1. - <_> - 13 3 6 2 2. - 0 - 0.0234096292406321 - -0.0580633506178856 - 0.3866822123527527 - <_> - - <_> - - - - <_> - 4 10 2 10 -1. - <_> - 4 10 1 5 2. - <_> - 5 15 1 5 2. - 0 - -2.3243729956448078e-003 - 0.1875409930944443 - -0.0983946695923805 - <_> - - <_> - - - - <_> - 2 16 9 3 -1. - <_> - 5 16 3 3 3. - 0 - -0.0290392991155386 - -0.5448690056800842 - 0.0409263409674168 - <_> - - <_> - - - - <_> - 1 2 3 9 -1. - <_> - 2 2 1 9 3. - 0 - -0.0144746499136090 - -0.6724839210510254 - 0.0231288503855467 - <_> - - <_> - - - - <_> - 19 7 1 4 -1. - <_> - 19 9 1 2 2. - 0 - -5.2086091600358486e-003 - -0.4327144026756287 - 0.0437806509435177 - <_> - - <_> - - - - <_> - 14 11 6 8 -1. - <_> - 14 11 3 4 2. - <_> - 17 15 3 4 2. - 0 - 4.9382899887859821e-003 - -0.1087862029671669 - 0.1934258937835693 - <_> - - <_> - - - - <_> - 15 12 4 6 -1. - <_> - 15 12 2 3 2. - <_> - 17 15 2 3 2. - 0 - -4.3193930760025978e-003 - 0.2408093065023422 - -0.1038080006837845 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 2.3705669445917010e-004 - -0.0873490720987320 - 0.2046623975038528 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - 4.7858079778961837e-004 - 0.0456245802342892 - -0.3885467052459717 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - -8.5342838428914547e-004 - -0.5507794022560120 - 0.0358258895576000 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 1 1 2. - <_> - 3 4 1 1 2. - 0 - 5.4772121075075120e-005 - -0.1122523993253708 - 0.1750351935625076 - <_> - - <_> - - - - <_> - 10 10 3 3 -1. - <_> - 11 10 1 3 3. - 0 - -3.8445889949798584e-003 - 0.2452670037746429 - -0.0811325684189796 - <_> - - <_> - - - - <_> - 5 9 7 8 -1. - <_> - 5 13 7 4 2. - 0 - -0.0401284582912922 - -0.6312270760536194 - 0.0269726701080799 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - -1.7886360001284629e-004 - 0.1985509991645813 - -0.1033368036150932 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - 1.7668239888735116e-004 - -0.0913590118288994 - 0.1984872072935104 - <_> - - <_> - - - - <_> - 9 8 10 3 -1. - <_> - 14 8 5 3 2. - 0 - 0.0727633833885193 - 0.0500755794346333 - -0.3385263085365295 - <_> - - <_> - - - - <_> - 6 7 4 8 -1. - <_> - 6 7 2 4 2. - <_> - 8 11 2 4 2. - 0 - 0.0101816300302744 - -0.0932299792766571 - 0.2005959004163742 - <_> - - <_> - - - - <_> - 1 6 4 3 -1. - <_> - 1 7 4 1 3. - 0 - 2.4409969337284565e-003 - 0.0646366328001022 - -0.2692174017429352 - <_> - - <_> - - - - <_> - 6 10 6 10 -1. - <_> - 8 10 2 10 3. - 0 - -3.6227488890290260e-003 - 0.1316989064216614 - -0.1251484006643295 - <_> - - <_> - - - - <_> - 4 6 3 6 -1. - <_> - 5 6 1 6 3. - 0 - -1.3635610230267048e-003 - 0.1635046005249023 - -0.1066593974828720 - -1.0888810157775879 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 10 2 2 2. - <_> - 5 12 2 2 2. - 0 - -9.6991164609789848e-003 - 0.6112532019615173 - -0.0662253126502037 - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 10 2 2 2. - <_> - 5 12 2 2 2. - 0 - -9.6426531672477722e-003 - -1. - 2.7699959464371204e-003 - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 10 2 2 2. - <_> - 5 12 2 2 2. - 0 - -9.6381865441799164e-003 - 1. - -2.9904270195402205e-004 - <_> - - <_> - - - - <_> - 14 8 2 6 -1. - <_> - 15 8 1 6 2. - 0 - -4.2553939856588840e-003 - 0.2846438884735107 - -0.1554012000560761 - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 10 2 2 2. - <_> - 5 12 2 2 2. - 0 - -9.6223521977663040e-003 - -1. - 0.0439991801977158 - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 10 2 2 2. - <_> - 5 12 2 2 2. - 0 - -9.1231241822242737e-003 - 0.8686934113502502 - -2.7267890982329845e-003 - <_> - - <_> - - - - <_> - 12 4 3 9 -1. - <_> - 13 4 1 9 3. - 0 - -8.6240433156490326e-003 - 0.4535248875617981 - -0.0860713794827461 - <_> - - <_> - - - - <_> - 12 3 1 12 -1. - <_> - 12 7 1 4 3. - 0 - -8.9324144646525383e-003 - 0.1337555944919586 - -0.2601251900196075 - <_> - - <_> - - - - <_> - 2 0 18 1 -1. - <_> - 8 0 6 1 3. - 0 - -0.0142078101634979 - 0.3207764029502869 - -0.0972264111042023 - <_> - - <_> - - - - <_> - 10 0 10 6 -1. - <_> - 10 0 5 3 2. - <_> - 15 3 5 3 2. - 0 - 0.0259110108017921 - -0.1296408027410507 - 0.2621864974498749 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 17 2 1 2. - 0 - 2.0531509653665125e-004 - -0.1240428015589714 - 0.2106295973062515 - <_> - - <_> - - - - <_> - 3 5 4 2 -1. - <_> - 3 5 2 1 2. - <_> - 5 6 2 1 2. - 0 - -5.4795680625829846e-005 - 0.1197429969906807 - -0.2320127934217453 - <_> - - <_> - - - - <_> - 11 8 3 3 -1. - <_> - 12 8 1 3 3. - 0 - 6.8555199541151524e-003 - -0.0632761269807816 - 0.4104425013065338 - <_> - - <_> - - - - <_> - 11 7 3 5 -1. - <_> - 12 7 1 5 3. - 0 - -0.0122530404478312 - 0.5488333106040955 - -0.0397311002016068 - <_> - - <_> - - - - <_> - 3 19 15 1 -1. - <_> - 8 19 5 1 3. - 0 - -3.9058770053088665e-003 - 0.2419098019599915 - -0.0970960110425949 - <_> - - <_> - - - - <_> - 8 13 3 2 -1. - <_> - 8 14 3 1 2. - 0 - 2.7560980524867773e-003 - -0.1256967931985855 - 0.1945665031671524 - <_> - - <_> - - - - <_> - 2 12 8 4 -1. - <_> - 2 12 4 2 2. - <_> - 6 14 4 2 2. - 0 - -7.7662160620093346e-003 - 0.2976570129394531 - -0.0968181565403938 - <_> - - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - 3.8997188676148653e-004 - 0.0621884018182755 - -0.4204089939594269 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 8 0 1 2 3. - 0 - 3.3579880837351084e-003 - 0.0474981404840946 - -0.6321688294410706 - <_> - - <_> - - - - <_> - 6 7 2 5 -1. - <_> - 7 7 1 5 2. - 0 - -0.0167455393821001 - 0.7109813094139099 - -0.0391573496162891 - <_> - - <_> - - - - <_> - 18 0 2 17 -1. - <_> - 19 0 1 17 2. - 0 - -6.5409899689257145e-003 - -0.3504317104816437 - 0.0706169530749321 - <_> - - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 16 17 1 1 3. - 0 - 3.0016340315341949e-004 - 0.0919024571776390 - -0.2461867034435272 - <_> - - <_> - - - - <_> - 14 8 3 7 -1. - <_> - 15 8 1 7 3. - 0 - 0.0149189904332161 - -0.0519094504415989 - 0.5663604140281677 - <_> - - <_> - - - - <_> - 10 17 2 2 -1. - <_> - 10 17 1 1 2. - <_> - 11 18 1 1 2. - 0 - 4.8153079114854336e-004 - 0.0646595582365990 - -0.3659060895442963 - <_> - - <_> - - - - <_> - 4 9 1 3 -1. - <_> - 4 10 1 1 3. - 0 - -3.0211321427486837e-004 - 0.1792656928300858 - -0.1141066029667854 - <_> - - <_> - - - - <_> - 18 10 2 3 -1. - <_> - 18 11 2 1 3. - 0 - 3.8521419628523290e-004 - 0.1034561991691589 - -0.2007246017456055 - <_> - - <_> - - - - <_> - 12 1 3 10 -1. - <_> - 13 1 1 10 3. - 0 - 8.0837132409214973e-003 - -0.0660734623670578 - 0.3028424978256226 - <_> - - <_> - - - - <_> - 8 12 9 1 -1. - <_> - 11 12 3 1 3. - 0 - -0.0228049699217081 - 0.5296235084533691 - -0.0401189997792244 - <_> - - <_> - - - - <_> - 5 18 2 2 -1. - <_> - 5 18 1 1 2. - <_> - 6 19 1 1 2. - 0 - 1.9440450705587864e-004 - 0.0818548202514648 - -0.2466336041688919 - <_> - - <_> - - - - <_> - 19 6 1 9 -1. - <_> - 19 9 1 3 3. - 0 - -0.0128480903804302 - -0.3497331142425537 - 0.0569162294268608 - <_> - - <_> - - - - <_> - 4 7 2 4 -1. - <_> - 4 7 1 2 2. - <_> - 5 9 1 2 2. - 0 - -1.0937290498986840e-003 - 0.2336868047714233 - -0.0916048064827919 - <_> - - <_> - - - - <_> - 1 4 6 14 -1. - <_> - 3 4 2 14 3. - 0 - 1.0032650316134095e-003 - 0.1185218021273613 - -0.1846919059753418 - <_> - - <_> - - - - <_> - 10 5 9 3 -1. - <_> - 13 5 3 3 3. - 0 - -0.0446884296834469 - -0.6436246037483215 - 0.0303632691502571 - <_> - - <_> - - - - <_> - 18 7 2 6 -1. - <_> - 18 9 2 2 3. - 0 - 8.1657543778419495e-003 - 0.0436746589839458 - -0.4300208985805512 - <_> - - <_> - - - - <_> - 5 6 2 7 -1. - <_> - 6 6 1 7 2. - 0 - -0.0117178102955222 - 0.4178147912025452 - -0.0482336990535259 - <_> - - <_> - - - - <_> - 10 4 6 8 -1. - <_> - 13 4 3 8 2. - 0 - 0.0842771306633949 - 0.0534612797200680 - -0.3795219063758850 - <_> - - <_> - - - - <_> - 0 8 2 9 -1. - <_> - 0 11 2 3 3. - 0 - 0.0142118399962783 - 0.0449009388685226 - -0.4298149943351746 - <_> - - <_> - - - - <_> - 0 7 5 3 -1. - <_> - 0 8 5 1 3. - 0 - 1.5028340276330709e-003 - 0.0822276398539543 - -0.2470639944076538 - <_> - - <_> - - - - <_> - 8 1 7 2 -1. - <_> - 8 2 7 1 2. - 0 - 0.0100035797804594 - -0.0572216697037220 - 0.3460937142372131 - <_> - - <_> - - - - <_> - 7 5 3 5 -1. - <_> - 8 5 1 5 3. - 0 - -9.0706320479512215e-003 - 0.4505808949470520 - -0.0427953191101551 - <_> - - <_> - - - - <_> - 19 2 1 2 -1. - <_> - 19 3 1 1 2. - 0 - -3.3141620224341750e-004 - 0.1833691000938416 - -0.1075994968414307 - <_> - - <_> - - - - <_> - 6 7 10 11 -1. - <_> - 11 7 5 11 2. - 0 - 0.1972327977418900 - -0.0303638298064470 - 0.6642342805862427 - <_> - - <_> - - - - <_> - 9 19 6 1 -1. - <_> - 11 19 2 1 3. - 0 - -7.1258801035583019e-003 - -0.8922504782676697 - 0.0256699901074171 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 7 0 4 1 3. - 0 - 8.6921341717243195e-003 - -0.0707643702626228 - 0.2821052968502045 - <_> - - <_> - - - - <_> - 4 1 6 5 -1. - <_> - 6 1 2 5 3. - 0 - 8.9262127876281738e-003 - 0.0710782334208488 - -0.3023256063461304 - <_> - - <_> - - - - <_> - 6 12 12 6 -1. - <_> - 10 12 4 6 3. - 0 - 0.0572860091924667 - 0.0509741306304932 - -0.3919695019721985 - <_> - - <_> - - - - <_> - 16 13 2 3 -1. - <_> - 16 14 2 1 3. - 0 - 3.7920880131423473e-003 - 0.0338419415056705 - -0.5101628899574280 - <_> - - <_> - - - - <_> - 7 14 4 2 -1. - <_> - 7 15 4 1 2. - 0 - -1.4508679741993546e-003 - 0.3087914884090424 - -0.0638450831174850 - <_> - - <_> - - - - <_> - 7 14 2 2 -1. - <_> - 7 15 2 1 2. - 0 - 9.8390132188796997e-004 - -0.1302956938743591 - 0.1460441052913666 - <_> - - <_> - - - - <_> - 3 10 2 4 -1. - <_> - 3 10 1 2 2. - <_> - 4 12 1 2 2. - 0 - -1.7221809830516577e-003 - 0.2915700972080231 - -0.0685495585203171 - <_> - - <_> - - - - <_> - 0 3 2 6 -1. - <_> - 0 5 2 2 3. - 0 - 0.0109482500702143 - 0.0343514084815979 - -0.4770225882530212 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - -1.7176309484057128e-005 - 0.1605526953935623 - -0.1169084012508392 - <_> - - <_> - - - - <_> - 16 4 4 3 -1. - <_> - 16 5 4 1 3. - 0 - -5.4884208366274834e-003 - -0.4341588914394379 - 0.0461062416434288 - <_> - - <_> - - - - <_> - 5 10 2 4 -1. - <_> - 5 10 1 2 2. - <_> - 6 12 1 2 2. - 0 - -3.0975250992923975e-003 - 0.3794333934783936 - -0.0568605512380600 - <_> - - <_> - - - - <_> - 5 11 13 2 -1. - <_> - 5 12 13 1 2. - 0 - 6.4182081259787083e-003 - -0.1585821062326431 - 0.1233541965484619 - <_> - - <_> - - - - <_> - 10 2 3 11 -1. - <_> - 11 2 1 11 3. - 0 - 0.0118312397971749 - -0.0409292913973331 - 0.4587895870208740 - <_> - - <_> - - - - <_> - 10 2 4 4 -1. - <_> - 10 4 4 2 2. - 0 - 0.0135404998436570 - -0.0537255592644215 - 0.3505612015724182 - <_> - - <_> - - - - <_> - 8 8 6 2 -1. - <_> - 10 8 2 2 3. - 0 - -2.5932150892913342e-003 - 0.1101052016019821 - -0.1675221025943756 - <_> - - <_> - - - - <_> - 11 2 3 3 -1. - <_> - 12 2 1 3 3. - 0 - 1.6856270376592875e-003 - 0.0665743574500084 - -0.3083502054214478 - <_> - - <_> - - - - <_> - 6 18 14 2 -1. - <_> - 6 18 7 1 2. - <_> - 13 19 7 1 2. - 0 - 2.6524690911173820e-003 - 0.0663184821605682 - -0.2786133885383606 - <_> - - <_> - - - - <_> - 17 7 1 12 -1. - <_> - 17 11 1 4 3. - 0 - -7.7341729775071144e-003 - 0.1971835941076279 - -0.1078291982412338 - <_> - - <_> - - - - <_> - 10 5 10 3 -1. - <_> - 10 6 10 1 3. - 0 - 5.0944271497428417e-003 - 0.0853374898433685 - -0.2484700977802277 - <_> - - <_> - - - - <_> - 6 1 3 3 -1. - <_> - 7 1 1 3 3. - 0 - -2.9162371065467596e-003 - -0.4747635126113892 - 0.0335664898157120 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - 3.0121419113129377e-003 - -0.0475753806531429 - 0.4258680045604706 - <_> - - <_> - - - - <_> - 10 14 2 6 -1. - <_> - 10 16 2 2 3. - 0 - 3.1694869976490736e-003 - -0.1051945015788078 - 0.1716345995664597 - <_> - - <_> - - - - <_> - 4 1 12 14 -1. - <_> - 8 1 4 14 3. - 0 - 0.2232756018638611 - -0.0143702095374465 - 0.9248365163803101 - <_> - - <_> - - - - <_> - 14 1 6 14 -1. - <_> - 16 1 2 14 3. - 0 - -0.0955850481987000 - -0.7420663833618164 - 0.0278189703822136 - <_> - - <_> - - - - <_> - 3 16 2 2 -1. - <_> - 3 16 1 1 2. - <_> - 4 17 1 1 2. - 0 - 3.4773729566950351e-005 - -0.1276578009128571 - 0.1292666941881180 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 17 2 1 2. - 0 - 7.2459770308341831e-005 - -0.1651857942342758 - 0.1003680974245071 - -1.0408929586410522 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_> - 15 6 4 6 -1. - <_> - 15 6 2 3 2. - <_> - 17 9 2 3 2. - 0 - -6.5778270363807678e-003 - 0.3381525874137878 - -0.1528190970420837 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 12 6 2 1 2. - 0 - -1.0922809597104788e-003 - 0.2228236943483353 - -0.1930849999189377 - <_> - - <_> - - - - <_> - 7 6 6 13 -1. - <_> - 9 6 2 13 3. - 0 - -0.0297595895826817 - 0.2595987021923065 - -0.1540940999984741 - <_> - - <_> - - - - <_> - 1 9 6 5 -1. - <_> - 3 9 2 5 3. - 0 - -0.0131475403904915 - 0.1903381049633026 - -0.1654399931430817 - <_> - - <_> - - - - <_> - 0 5 3 4 -1. - <_> - 0 7 3 2 2. - 0 - -1.4396329643204808e-003 - 0.2007171064615250 - -0.1233894005417824 - <_> - - <_> - - - - <_> - 4 1 16 2 -1. - <_> - 4 1 8 1 2. - <_> - 12 2 8 1 2. - 0 - -3.5928250290453434e-003 - 0.2398552000522614 - -0.1292214989662170 - <_> - - <_> - - - - <_> - 1 18 4 2 -1. - <_> - 1 18 2 1 2. - <_> - 3 19 2 1 2. - 0 - -1.5314699849113822e-003 - -0.4901489913463593 - 0.1027503013610840 - <_> - - <_> - - - - <_> - 7 7 3 4 -1. - <_> - 8 7 1 4 3. - 0 - -6.2372139655053616e-003 - 0.3121463954448700 - -0.1140562966465950 - <_> - - <_> - - - - <_> - 3 4 9 3 -1. - <_> - 6 4 3 3 3. - 0 - -0.0333646498620510 - -0.4952087998390198 - 0.0513284504413605 - <_> - - <_> - - - - <_> - 4 6 6 10 -1. - <_> - 6 6 2 10 3. - 0 - -0.0228276997804642 - 0.3255882859230042 - -0.0650893077254295 - <_> - - <_> - - - - <_> - 9 0 8 10 -1. - <_> - 13 0 4 10 2. - 0 - -0.0861990973353386 - -0.6764633059501648 - 0.0269856993108988 - <_> - - <_> - - - - <_> - 8 0 8 1 -1. - <_> - 12 0 4 1 2. - 0 - -2.1065981127321720e-003 - 0.2245243042707443 - -0.1261022984981537 - <_> - - <_> - - - - <_> - 6 2 8 16 -1. - <_> - 6 2 4 8 2. - <_> - 10 10 4 8 2. - 0 - 0.0391201488673687 - 0.1132939979434013 - -0.2686063051223755 - <_> - - <_> - - - - <_> - 14 10 2 10 -1. - <_> - 14 10 1 5 2. - <_> - 15 15 1 5 2. - 0 - 3.5082739777863026e-003 - -0.1135995984077454 - 0.2564977109432221 - <_> - - <_> - - - - <_> - 12 11 1 2 -1. - <_> - 12 12 1 1 2. - 0 - 5.9289898490533233e-004 - -0.1494296938180924 - 0.1640983968973160 - <_> - - <_> - - - - <_> - 16 0 3 8 -1. - <_> - 17 0 1 8 3. - 0 - 7.1766850305721164e-004 - 0.0999056920409203 - -0.2196796983480454 - <_> - - <_> - - - - <_> - 14 0 6 10 -1. - <_> - 17 0 3 10 2. - 0 - -0.0218036007136106 - -0.3171172142028809 - 0.0828895866870880 - <_> - - <_> - - - - <_> - 16 0 3 5 -1. - <_> - 17 0 1 5 3. - 0 - -3.2962779514491558e-003 - -0.3804872930049896 - 0.0608193799853325 - <_> - - <_> - - - - <_> - 4 5 11 2 -1. - <_> - 4 6 11 1 2. - 0 - 2.4196270387619734e-003 - -0.0960130169987679 - 0.2854058146476746 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -4.4187481398694217e-004 - 0.2212793976068497 - -0.0974349081516266 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 0 1 2 1 3. - 0 - 3.4523929934948683e-003 - 0.0375531204044819 - -0.5796905159950256 - <_> - - <_> - - - - <_> - 11 6 6 11 -1. - <_> - 13 6 2 11 3. - 0 - -0.0218346007168293 - 0.2956213951110840 - -0.0800483003258705 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -2.1309500152710825e-004 - 0.2281450927257538 - -0.1011418998241425 - <_> - - <_> - - - - <_> - 19 7 1 2 -1. - <_> - 19 8 1 1 2. - 0 - -1.6166249988600612e-003 - -0.5054119825363159 - 0.0447645410895348 - <_> - - <_> - - - - <_> - 17 0 3 9 -1. - <_> - 18 0 1 9 3. - 0 - 7.5959609821438789e-003 - 0.0459865406155586 - -0.4119768142700195 - <_> - - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - 3.8601809646934271e-003 - -0.0865631699562073 - 0.2480999976396561 - <_> - - <_> - - - - <_> - 0 1 14 2 -1. - <_> - 0 1 7 1 2. - <_> - 7 2 7 1 2. - 0 - 6.0622231103479862e-003 - -0.0755573734641075 - 0.2843326032161713 - <_> - - <_> - - - - <_> - 3 1 3 2 -1. - <_> - 4 1 1 2 3. - 0 - -1.7097420059144497e-003 - -0.3529582023620606 - 0.0584104992449284 - <_> - - <_> - - - - <_> - 4 0 15 2 -1. - <_> - 9 0 5 2 3. - 0 - 0.0165155790746212 - -0.0804869532585144 - 0.2353743016719818 - <_> - - <_> - - - - <_> - 10 2 6 1 -1. - <_> - 12 2 2 1 3. - 0 - 4.8465100117027760e-003 - 0.0418952181935310 - -0.4844304919242859 - <_> - - <_> - - - - <_> - 9 4 6 11 -1. - <_> - 11 4 2 11 3. - 0 - -0.0311671700328588 - 0.1919230967760086 - -0.1026815995573998 - <_> - - <_> - - - - <_> - 2 16 2 4 -1. - <_> - 2 18 2 2 2. - 0 - 6.1892281519249082e-004 - -0.2108577042818070 - 0.0938869267702103 - <_> - - <_> - - - - <_> - 6 17 6 3 -1. - <_> - 8 17 2 3 3. - 0 - 0.0119463102892041 - 0.0390961691737175 - -0.6224862933158875 - <_> - - <_> - - - - <_> - 7 9 6 2 -1. - <_> - 9 9 2 2 3. - 0 - -7.5677200220525265e-003 - 0.1593683958053589 - -0.1225078031420708 - <_> - - <_> - - - - <_> - 6 8 9 2 -1. - <_> - 9 8 3 2 3. - 0 - -0.0537474118173122 - -0.5562217831611633 - 0.0411900095641613 - <_> - - <_> - - - - <_> - 6 6 2 10 -1. - <_> - 6 6 1 5 2. - <_> - 7 11 1 5 2. - 0 - 0.0155135300010443 - -0.0398268811404705 - 0.6240072846412659 - <_> - - <_> - - - - <_> - 0 11 2 3 -1. - <_> - 0 12 2 1 3. - 0 - 1.5246650436893106e-003 - 0.0701386779546738 - -0.3078907132148743 - <_> - - <_> - - - - <_> - 11 15 4 1 -1. - <_> - 13 15 2 1 2. - 0 - -4.8315100139006972e-004 - 0.1788765937089920 - -0.1095862016081810 - <_> - - <_> - - - - <_> - 6 17 1 2 -1. - <_> - 6 18 1 1 2. - 0 - 2.7374739293009043e-003 - 0.0274785906076431 - -0.8848956823348999 - <_> - - <_> - - - - <_> - 0 0 6 20 -1. - <_> - 2 0 2 20 3. - 0 - -0.0657877177000046 - -0.4643214046955109 - 0.0350371487438679 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 4 10 1 2 2. - 0 - 1.2409730115905404e-003 - -0.0964792370796204 - 0.2877922058105469 - <_> - - <_> - - - - <_> - 4 7 3 5 -1. - <_> - 5 7 1 5 3. - 0 - 8.1398809561505914e-004 - 0.1151171997189522 - -0.1676616072654724 - <_> - - <_> - - - - <_> - 3 12 6 2 -1. - <_> - 5 12 2 2 3. - 0 - 0.0239018201828003 - -0.0326031893491745 - 0.6001734733581543 - <_> - - <_> - - - - <_> - 6 15 7 4 -1. - <_> - 6 17 7 2 2. - 0 - 0.0275566000491381 - -0.0661373436450958 - 0.2999447882175446 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - -3.8070970913395286e-004 - -0.3388118147850037 - 0.0644507706165314 - <_> - - <_> - - - - <_> - 15 1 3 16 -1. - <_> - 16 1 1 16 3. - 0 - -1.3335429830476642e-003 - 0.1458866000175476 - -0.1321762055158615 - <_> - - <_> - - - - <_> - 6 16 6 3 -1. - <_> - 8 16 2 3 3. - 0 - -9.3507990241050720e-003 - -0.5117782950401306 - 0.0349694713950157 - <_> - - <_> - - - - <_> - 15 14 3 2 -1. - <_> - 15 15 3 1 2. - 0 - 7.6215229928493500e-003 - 0.0232495293021202 - -0.6961941123008728 - <_> - - <_> - - - - <_> - 12 16 1 2 -1. - <_> - 12 17 1 1 2. - 0 - -5.3407860832521692e-005 - 0.2372737973928452 - -0.0869107097387314 - <_> - - <_> - - - - <_> - 0 2 4 4 -1. - <_> - 0 2 2 2 2. - <_> - 2 4 2 2 2. - 0 - -1.5332329785451293e-003 - 0.1922841072082520 - -0.1042239964008331 - <_> - - <_> - - - - <_> - 1 1 6 4 -1. - <_> - 1 1 3 2 2. - <_> - 4 3 3 2 2. - 0 - 4.3135890737175941e-003 - -0.0962195470929146 - 0.2560121119022369 - <_> - - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - -2.3042880638968199e-004 - -0.3156475126743317 - 0.0588385984301567 - <_> - - <_> - - - - <_> - 4 7 2 3 -1. - <_> - 4 8 2 1 3. - 0 - -7.8411828726530075e-003 - -0.6634092926979065 - 0.0245009995996952 - <_> - - <_> - - - - <_> - 1 0 9 14 -1. - <_> - 1 7 9 7 2. - 0 - 0.1710374057292938 - 0.0338314995169640 - -0.4561594128608704 - <_> - - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -1.6011140542104840e-003 - 0.2157489061355591 - -0.0836225301027298 - <_> - - <_> - - - - <_> - 3 9 4 3 -1. - <_> - 5 9 2 3 2. - 0 - -0.0105357803404331 - 0.2455231994390488 - -0.0823844894766808 - <_> - - <_> - - - - <_> - 0 9 2 4 -1. - <_> - 0 11 2 2 2. - 0 - -5.8351638726890087e-003 - -0.4780732989311218 - 0.0440862216055393 - <_> - - <_> - - - - <_> - 16 6 3 10 -1. - <_> - 17 6 1 10 3. - 0 - -0.0187061093747616 - -0.6002402901649475 - 0.0214100405573845 - <_> - - <_> - - - - <_> - 16 11 2 1 -1. - <_> - 17 11 1 1 2. - 0 - -9.3307439237833023e-004 - 0.2432359009981155 - -0.0741657167673111 - -1.0566600561141968 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 7 4 4 -1. - <_> - 5 9 4 2 2. - 0 - 0.0106462296098471 - -0.1386138945817947 - 0.2649407088756561 - <_> - - <_> - - - - <_> - 10 11 9 2 -1. - <_> - 13 11 3 2 3. - 0 - 0.0352982692420483 - -0.0758217275142670 - 0.3902106881141663 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 16 11 1 1 2. - 0 - 7.5638387352228165e-004 - -0.0955214425921440 - 0.2906199991703033 - <_> - - <_> - - - - <_> - 10 6 6 14 -1. - <_> - 10 13 6 7 2. - 0 - 0.0924977064132690 - -0.2770423889160156 - 0.0794747024774551 - <_> - - <_> - - - - <_> - 14 7 3 5 -1. - <_> - 15 7 1 5 3. - 0 - -2.9340879991650581e-003 - 0.2298953980207443 - -0.0785500109195709 - <_> - - <_> - - - - <_> - 6 11 12 3 -1. - <_> - 10 11 4 3 3. - 0 - -0.0865358486771584 - 0.4774481058120728 - -6.8231220357120037e-003 - <_> - - <_> - - - - <_> - 17 16 1 2 -1. - <_> - 17 17 1 1 2. - 0 - 5.4699288739357144e-005 - -0.2264260947704315 - 0.0881921127438545 - <_> - - <_> - - - - <_> - 8 5 5 4 -1. - <_> - 8 7 5 2 2. - 0 - -0.0365925207734108 - 0.2735387086868286 - -0.0986067429184914 - <_> - - <_> - - - - <_> - 11 6 4 2 -1. - <_> - 11 7 4 1 2. - 0 - 2.6469118893146515e-003 - -0.0440839789807796 - 0.3144528865814209 - <_> - - <_> - - - - <_> - 3 4 8 2 -1. - <_> - 3 4 4 1 2. - <_> - 7 5 4 1 2. - 0 - -4.4271810911595821e-003 - 0.2382272928953171 - -0.0867842733860016 - <_> - - <_> - - - - <_> - 0 8 6 6 -1. - <_> - 2 8 2 6 3. - 0 - -5.1882481202483177e-003 - 0.1504276990890503 - -0.1267210990190506 - <_> - - <_> - - - - <_> - 7 4 6 2 -1. - <_> - 7 5 6 1 2. - 0 - 4.5530400238931179e-003 - -0.0559450201690197 - 0.3650163114070892 - <_> - - <_> - - - - <_> - 7 3 6 3 -1. - <_> - 9 3 2 3 3. - 0 - 0.0145624103024602 - 0.0363977700471878 - -0.5355919003486633 - <_> - - <_> - - - - <_> - 2 17 3 3 -1. - <_> - 2 18 3 1 3. - 0 - 6.8677567469421774e-005 - -0.1747962981462479 - 0.1106870993971825 - <_> - - <_> - - - - <_> - 3 10 6 1 -1. - <_> - 5 10 2 1 3. - 0 - -5.9744901955127716e-003 - 0.3107787072658539 - -0.0665302276611328 - <_> - - <_> - - - - <_> - 7 2 6 2 -1. - <_> - 9 2 2 2 3. - 0 - -5.8691250160336494e-003 - -0.3190149068832398 - 0.0639318302273750 - <_> - - <_> - - - - <_> - 4 11 9 1 -1. - <_> - 7 11 3 1 3. - 0 - -0.0111403102055192 - 0.2436479032039642 - -0.0809351801872253 - <_> - - <_> - - - - <_> - 7 7 11 12 -1. - <_> - 7 13 11 6 2. - 0 - -0.0586435310542583 - -0.7608326077461243 - 0.0308096297085285 - <_> - - <_> - - - - <_> - 3 2 3 4 -1. - <_> - 4 2 1 4 3. - 0 - -4.6097282320261002e-003 - -0.4531502127647400 - 0.0298790596425533 - <_> - - <_> - - - - <_> - 9 7 9 3 -1. - <_> - 12 7 3 3 3. - 0 - -9.3032103031873703e-003 - 0.1451337933540344 - -0.1103316992521286 - <_> - - <_> - - - - <_> - 15 11 2 6 -1. - <_> - 15 11 1 3 2. - <_> - 16 14 1 3 2. - 0 - 1.3253629440441728e-003 - -0.0976989567279816 - 0.1964644044637680 - <_> - - <_> - - - - <_> - 0 5 5 3 -1. - <_> - 0 6 5 1 3. - 0 - 4.9800761044025421e-003 - 0.0336480811238289 - -0.3979220986366272 - <_> - - <_> - - - - <_> - 8 1 6 12 -1. - <_> - 10 1 2 12 3. - 0 - -7.6542161405086517e-003 - 0.0908419936895370 - -0.1596754938364029 - <_> - - <_> - - - - <_> - 3 7 15 13 -1. - <_> - 8 7 5 13 3. - 0 - -0.3892059028148651 - -0.6657109260559082 - 0.0190288294106722 - <_> - - <_> - - - - <_> - 0 9 9 9 -1. - <_> - 0 12 9 3 3. - 0 - -0.1001966968178749 - -0.5755926966667175 - 0.0242827795445919 - <_> - - <_> - - - - <_> - 16 0 3 8 -1. - <_> - 17 0 1 8 3. - 0 - 7.3541211895644665e-004 - 0.0879198014736176 - -0.1619534045457840 - <_> - - <_> - - - - <_> - 16 2 4 2 -1. - <_> - 18 2 2 2 2. - 0 - -3.4802639856934547e-003 - 0.2606449127197266 - -0.0602008104324341 - <_> - - <_> - - - - <_> - 13 0 6 5 -1. - <_> - 16 0 3 5 2. - 0 - 8.4000425413250923e-003 - -0.1097972989082336 - 0.1570730954408646 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 1 1 2 3. - 0 - 2.3786011151969433e-003 - 0.0360582396388054 - -0.4727719128131867 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 12 8 1 2 3. - 0 - 7.3831682093441486e-003 - -0.0357563607394695 - 0.4949859082698822 - <_> - - <_> - - - - <_> - 1 8 2 12 -1. - <_> - 1 8 1 6 2. - <_> - 2 14 1 6 2. - 0 - 3.2115620560944080e-003 - -0.1012556031346321 - 0.1574798971414566 - <_> - - <_> - - - - <_> - 0 1 6 12 -1. - <_> - 2 1 2 12 3. - 0 - -0.0782096683979034 - -0.7662708163261414 - 0.0229658298194408 - <_> - - <_> - - - - <_> - 19 17 1 3 -1. - <_> - 19 18 1 1 3. - 0 - 5.3303989261621609e-005 - -0.1341435015201569 - 0.1111491993069649 - <_> - - <_> - - - - <_> - 11 3 3 10 -1. - <_> - 12 3 1 10 3. - 0 - -9.6419155597686768e-003 - 0.2506802976131439 - -0.0666081383824348 - <_> - - <_> - - - - <_> - 8 1 9 8 -1. - <_> - 11 1 3 8 3. - 0 - -0.0710926726460457 - -0.4005681872367859 - 0.0402977913618088 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - 3.5171560011804104e-004 - 0.0418611802160740 - -0.3296119868755341 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -3.3458150574006140e-004 - -0.2602983117103577 - 0.0678927376866341 - <_> - - <_> - - - - <_> - 6 13 2 6 -1. - <_> - 6 15 2 2 3. - 0 - -4.1451421566307545e-003 - 0.2396769970655441 - -0.0720933377742767 - <_> - - <_> - - - - <_> - 9 14 2 2 -1. - <_> - 9 15 2 1 2. - 0 - 3.1754500232636929e-003 - -0.0712352693080902 - 0.2412845045328140 - <_> - - <_> - - - - <_> - 14 10 2 4 -1. - <_> - 14 10 1 2 2. - <_> - 15 12 1 2 2. - 0 - -5.5184490047395229e-003 - 0.5032023787498474 - -0.0296866800636053 - <_> - - <_> - - - - <_> - 0 15 2 2 -1. - <_> - 0 15 1 1 2. - <_> - 1 16 1 1 2. - 0 - -3.0242869979701936e-004 - 0.2487905025482178 - -0.0567585788667202 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -1.3125919504091144e-003 - 0.3174780011177063 - -0.0418458618223667 - <_> - - <_> - - - - <_> - 11 18 2 2 -1. - <_> - 11 18 1 1 2. - <_> - 12 19 1 1 2. - 0 - -2.7123570907860994e-004 - -0.2704207003116608 - 0.0568289905786514 - <_> - - <_> - - - - <_> - 0 0 6 4 -1. - <_> - 0 0 3 2 2. - <_> - 3 2 3 2 2. - 0 - -7.3241777718067169e-003 - 0.2755667865276337 - -0.0542529709637165 - <_> - - <_> - - - - <_> - 4 1 6 6 -1. - <_> - 6 1 2 6 3. - 0 - -0.0168517101556063 - -0.3485291004180908 - 0.0453689992427826 - <_> - - <_> - - - - <_> - 15 13 5 4 -1. - <_> - 15 15 5 2 2. - 0 - 0.0299021005630493 - 0.0316210798919201 - -0.4311437010765076 - <_> - - <_> - - - - <_> - 7 17 6 1 -1. - <_> - 9 17 2 1 3. - 0 - 2.8902660124003887e-003 - 0.0380299612879753 - -0.3702709972858429 - <_> - - <_> - - - - <_> - 16 19 4 1 -1. - <_> - 18 19 2 1 2. - 0 - -1.9242949783802032e-003 - 0.2480027973651886 - -0.0593332983553410 - <_> - - <_> - - - - <_> - 16 16 4 4 -1. - <_> - 18 16 2 4 2. - 0 - 4.9354149959981441e-003 - -0.0830684006214142 - 0.2204380929470062 - <_> - - <_> - - - - <_> - 7 8 9 4 -1. - <_> - 10 8 3 4 3. - 0 - 0.0820756033062935 - -0.0194134395569563 - 0.6908928751945496 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - -2.4699489586055279e-004 - -0.2466056942939758 - 0.0647764503955841 - <_> - - <_> - - - - <_> - 2 9 2 4 -1. - <_> - 2 9 1 2 2. - <_> - 3 11 1 2 2. - 0 - -1.8365769647061825e-003 - 0.2883616089820862 - -0.0533904582262039 - <_> - - <_> - - - - <_> - 0 3 8 4 -1. - <_> - 0 3 4 2 2. - <_> - 4 5 4 2 2. - 0 - -4.9553811550140381e-003 - 0.1274082958698273 - -0.1255941987037659 - <_> - - <_> - - - - <_> - 0 1 8 1 -1. - <_> - 4 1 4 1 2. - 0 - -8.3086621016263962e-003 - 0.2347811013460159 - -0.0716764926910400 - <_> - - <_> - - - - <_> - 0 5 8 9 -1. - <_> - 4 5 4 9 2. - 0 - -0.1087991967797279 - -0.2599223852157593 - 0.0586897395551205 - <_> - - <_> - - - - <_> - 7 18 6 2 -1. - <_> - 9 18 2 2 3. - 0 - -9.6786450594663620e-003 - -0.7072042822837830 - 0.0187492594122887 - <_> - - <_> - - - - <_> - 0 4 1 12 -1. - <_> - 0 8 1 4 3. - 0 - -0.0271368306130171 - -0.5838422775268555 - 0.0216841306537390 - <_> - - <_> - - - - <_> - 19 13 1 6 -1. - <_> - 19 15 1 2 3. - 0 - -6.5389778465032578e-003 - -0.5974891185760498 - 0.0214803107082844 - <_> - - <_> - - - - <_> - 2 8 6 8 -1. - <_> - 4 8 2 8 3. - 0 - -0.0120956301689148 - 0.1326903998851776 - -0.0997227206826210 - <_> - - <_> - - - - <_> - 0 0 9 17 -1. - <_> - 3 0 3 17 3. - 0 - -0.1677609980106354 - -0.5665506720542908 - 0.0321230888366699 - <_> - - <_> - - - - <_> - 7 9 6 8 -1. - <_> - 9 9 2 8 3. - 0 - -0.0132625503465533 - 0.1149559020996094 - -0.1173838973045349 - <_> - - <_> - - - - <_> - 5 10 9 4 -1. - <_> - 8 10 3 4 3. - 0 - 0.0767445191740990 - -0.0314132310450077 - 0.5993549227714539 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 5 1 8 1 3. - 0 - 5.0785229541361332e-003 - -0.0529119409620762 - 0.2334239929914475 - <_> - - <_> - - - - <_> - 16 6 4 4 -1. - <_> - 16 6 2 2 2. - <_> - 18 8 2 2 2. - 0 - 3.1800279393792152e-003 - -0.0777343884110451 - 0.1765290945768356 - <_> - - <_> - - - - <_> - 17 4 2 8 -1. - <_> - 17 4 1 4 2. - <_> - 18 8 1 4 2. - 0 - -1.7729829996824265e-003 - 0.1959162950515747 - -0.0797521993517876 - <_> - - <_> - - - - <_> - 2 16 1 3 -1. - <_> - 2 17 1 1 3. - 0 - -4.8560940194875002e-004 - -0.2880037128925324 - 0.0490471199154854 - <_> - - <_> - - - - <_> - 2 16 1 3 -1. - <_> - 2 17 1 1 3. - 0 - 3.6554320831783116e-004 - 0.0679228976368904 - -0.2249943017959595 - <_> - - <_> - - - - <_> - 11 0 1 3 -1. - <_> - 11 1 1 1 3. - 0 - -2.6938671362586319e-004 - 0.1658217012882233 - -0.0897440984845161 - <_> - - <_> - - - - <_> - 11 2 9 7 -1. - <_> - 14 2 3 7 3. - 0 - 0.0786842331290245 - 0.0260816793888807 - -0.5569373965263367 - <_> - - <_> - - - - <_> - 10 2 3 6 -1. - <_> - 11 2 1 6 3. - 0 - -7.3774810880422592e-004 - 0.1403687000274658 - -0.1180030032992363 - <_> - - <_> - - - - <_> - 5 9 15 2 -1. - <_> - 5 10 15 1 2. - 0 - 0.0239578299224377 - 0.0304707400500774 - -0.4615997970104218 - <_> - - <_> - - - - <_> - 8 16 6 2 -1. - <_> - 8 17 6 1 2. - 0 - -1.6239080578088760e-003 - 0.2632707953453064 - -0.0567653700709343 - <_> - - <_> - - - - <_> - 9 16 10 2 -1. - <_> - 9 16 5 1 2. - <_> - 14 17 5 1 2. - 0 - -9.0819748584181070e-004 - 0.1546245962381363 - -0.1108706966042519 - <_> - - <_> - - - - <_> - 9 17 2 2 -1. - <_> - 9 17 1 1 2. - <_> - 10 18 1 1 2. - 0 - 3.9806248969398439e-004 - 0.0556303709745407 - -0.2833195924758911 - <_> - - <_> - - - - <_> - 10 15 6 4 -1. - <_> - 10 15 3 2 2. - <_> - 13 17 3 2 2. - 0 - 2.0506449509412050e-003 - -0.0916048362851143 - 0.1758553981781006 - <_> - - <_> - - - - <_> - 4 5 15 12 -1. - <_> - 9 5 5 12 3. - 0 - 0.0267425496131182 - 0.0620030313730240 - -0.2448700070381165 - <_> - - <_> - - - - <_> - 11 13 2 3 -1. - <_> - 11 14 2 1 3. - 0 - -2.1497008856385946e-003 - 0.2944929897785187 - -0.0532181486487389 - <_> - - <_> - - - - <_> - 8 13 7 3 -1. - <_> - 8 14 7 1 3. - 0 - 5.6671658530831337e-003 - -0.0642982423305511 - 0.2490568011999130 - <_> - - <_> - - - - <_> - 1 12 1 2 -1. - <_> - 1 13 1 1 2. - 0 - 6.8317902332637459e-005 - -0.1681963056325913 - 0.0965485796332359 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - 1.7600439605303109e-004 - 0.0653080120682716 - -0.2426788061857224 - <_> - - <_> - - - - <_> - 1 19 18 1 -1. - <_> - 7 19 6 1 3. - 0 - 4.1861608624458313e-003 - -0.0979885831475258 - 0.1805288940668106 - <_> - - <_> - - - - <_> - 1 17 6 1 -1. - <_> - 4 17 3 1 2. - 0 - -2.1808340679854155e-003 - 0.1923127025365830 - -0.0941239297389984 - <_> - - <_> - - - - <_> - 1 3 1 12 -1. - <_> - 1 9 1 6 2. - 0 - 0.0217304006218910 - 0.0355785116553307 - -0.4508853852748871 - <_> - - <_> - - - - <_> - 0 9 3 6 -1. - <_> - 0 11 3 2 3. - 0 - -0.0147802699357271 - -0.4392701089382172 - 0.0317355915904045 - <_> - - <_> - - - - <_> - 5 4 3 10 -1. - <_> - 6 4 1 10 3. - 0 - -3.6145891062915325e-003 - 0.1981147974729538 - -0.0777014195919037 - <_> - - <_> - - - - <_> - 6 17 2 1 -1. - <_> - 7 17 1 1 2. - 0 - 1.8892709631472826e-003 - 0.0199624393135309 - -0.7204172015190125 - <_> - - <_> - - - - <_> - 1 0 6 12 -1. - <_> - 3 0 2 12 3. - 0 - -1.3822480104863644e-003 - 0.0984669476747513 - -0.1488108038902283 - <_> - - <_> - - - - <_> - 4 7 9 2 -1. - <_> - 7 7 3 2 3. - 0 - -3.9505911991000175e-003 - 0.1159323006868362 - -0.1279197037220001 - -0.9769343137741089 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 11 9 1 -1. - <_> - 9 11 3 1 3. - 0 - -0.0193955395370722 - 0.4747475087642670 - -0.1172109022736549 - <_> - - <_> - - - - <_> - 17 10 2 10 -1. - <_> - 17 15 2 5 2. - 0 - 0.0131189199164510 - -0.2555212974548340 - 0.1637880057096481 - <_> - - <_> - - - - <_> - 4 10 2 10 -1. - <_> - 4 10 1 5 2. - <_> - 5 15 1 5 2. - 0 - -5.1606801571324468e-004 - 0.1945261955261231 - -0.1744889020919800 - <_> - - <_> - - - - <_> - 12 3 3 12 -1. - <_> - 13 3 1 12 3. - 0 - -0.0131841599941254 - 0.4418145120143890 - -0.0900487527251244 - <_> - - <_> - - - - <_> - 15 3 4 6 -1. - <_> - 15 3 2 3 2. - <_> - 17 6 2 3 2. - 0 - 3.4657081123441458e-003 - -0.1347709000110626 - 0.1805634051561356 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 8 1 3 3. - 0 - 6.2980200164020061e-003 - -0.0541649796068668 - 0.3603338003158569 - <_> - - <_> - - - - <_> - 4 14 2 4 -1. - <_> - 4 16 2 2 2. - 0 - 1.6879989998415112e-003 - -0.1999794989824295 - 0.1202159970998764 - <_> - - <_> - - - - <_> - 6 16 1 3 -1. - <_> - 6 17 1 1 3. - 0 - 3.6039709812030196e-004 - 0.1052414029836655 - -0.2411606013774872 - <_> - - <_> - - - - <_> - 1 1 2 3 -1. - <_> - 2 1 1 3 2. - 0 - -1.5276849735528231e-003 - 0.2813552916049957 - -0.0689648166298866 - <_> - - <_> - - - - <_> - 0 2 4 1 -1. - <_> - 2 2 2 1 2. - 0 - 3.5033570602536201e-003 - -0.0825195834040642 - 0.4071359038352966 - <_> - - <_> - - - - <_> - 8 17 12 3 -1. - <_> - 12 17 4 3 3. - 0 - -4.7337161377072334e-003 - 0.1972700953483582 - -0.1171014010906220 - <_> - - <_> - - - - <_> - 9 16 6 4 -1. - <_> - 11 16 2 4 3. - 0 - -0.0115571497008204 - -0.5606111288070679 - 0.0681709572672844 - <_> - - <_> - - - - <_> - 4 6 3 6 -1. - <_> - 4 9 3 3 2. - 0 - -0.0274457205086946 - 0.4971862137317658 - -0.0623801499605179 - <_> - - <_> - - - - <_> - 6 2 12 9 -1. - <_> - 6 5 12 3 3. - 0 - -0.0528257787227631 - 0.1692122071981430 - -0.1309355050325394 - <_> - - <_> - - - - <_> - 6 0 14 20 -1. - <_> - 6 0 7 10 2. - <_> - 13 10 7 10 2. - 0 - -0.2984969913959503 - -0.6464967131614685 - 0.0400768183171749 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -2.6307269581593573e-004 - 0.2512794137001038 - -0.0894948393106461 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - 2.3261709429789335e-004 - -0.0868439897894859 - 0.2383197993040085 - <_> - - <_> - - - - <_> - 19 8 1 3 -1. - <_> - 19 9 1 1 3. - 0 - 2.3631360090803355e-004 - 0.1155446022748947 - -0.1893634945154190 - <_> - - <_> - - - - <_> - 13 4 1 2 -1. - <_> - 13 5 1 1 2. - 0 - 2.0742209162563086e-003 - -0.0485948510468006 - 0.5748599171638489 - <_> - - <_> - - - - <_> - 0 4 4 2 -1. - <_> - 0 5 4 1 2. - 0 - -7.0308889262378216e-003 - -0.5412080883979797 - 0.0487437509000301 - <_> - - <_> - - - - <_> - 19 5 1 6 -1. - <_> - 19 7 1 2 3. - 0 - 8.2652270793914795e-003 - 0.0264945197850466 - -0.6172845959663391 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 17 0 1 1 2. - 0 - 2.0042760297656059e-004 - -0.1176863014698029 - 0.1633386015892029 - <_> - - <_> - - - - <_> - 13 1 1 3 -1. - <_> - 13 2 1 1 3. - 0 - 1.6470040427520871e-003 - -0.0599549189209938 - 0.3517970144748688 - <_> - - <_> - - - - <_> - 17 17 1 3 -1. - <_> - 17 18 1 1 3. - 0 - -3.5642538568936288e-004 - -0.3442029953002930 - 0.0649482533335686 - <_> - - <_> - - - - <_> - 5 4 8 8 -1. - <_> - 5 4 4 4 2. - <_> - 9 8 4 4 2. - 0 - -0.0309358704835176 - 0.1997970044612885 - -0.0976936966180801 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - -6.3578772824257612e-004 - -0.3148139119148254 - 0.0594250410795212 - <_> - - <_> - - - - <_> - 0 0 8 6 -1. - <_> - 0 0 4 3 2. - <_> - 4 3 4 3 2. - 0 - -0.0118621801957488 - 0.2004369050264359 - -0.0894475430250168 - <_> - - <_> - - - - <_> - 6 3 4 2 -1. - <_> - 6 4 4 1 2. - 0 - 7.1508930996060371e-003 - -0.0390060618519783 - 0.5332716107368469 - <_> - - <_> - - - - <_> - 1 0 3 3 -1. - <_> - 1 1 3 1 3. - 0 - -2.0059191156178713e-003 - -0.2846972048282623 - 0.0707236081361771 - <_> - - <_> - - - - <_> - 6 1 7 2 -1. - <_> - 6 2 7 1 2. - 0 - 3.6412389017641544e-003 - -0.1066031977534294 - 0.2494480013847351 - <_> - - <_> - - - - <_> - 2 6 12 6 -1. - <_> - 6 6 4 6 3. - 0 - -0.1346742957830429 - 0.4991008043289185 - -0.0403322204947472 - <_> - - <_> - - - - <_> - 1 16 9 2 -1. - <_> - 4 16 3 2 3. - 0 - -2.2547659464180470e-003 - 0.1685169041156769 - -0.1111928001046181 - <_> - - <_> - - - - <_> - 7 15 6 4 -1. - <_> - 9 15 2 4 3. - 0 - 4.3842289596796036e-003 - 0.0861394926905632 - -0.2743177115917206 - <_> - - <_> - - - - <_> - 6 15 12 1 -1. - <_> - 12 15 6 1 2. - 0 - -7.3361168615520000e-003 - 0.2487521022558212 - -0.0959191620349884 - <_> - - <_> - - - - <_> - 17 17 1 3 -1. - <_> - 17 18 1 1 3. - 0 - 6.4666912658140063e-004 - 0.0674315765500069 - -0.3375408053398132 - <_> - - <_> - - - - <_> - 17 15 2 2 -1. - <_> - 17 15 1 1 2. - <_> - 18 16 1 1 2. - 0 - 2.2983769304119051e-004 - -0.0839030519127846 - 0.2458409965038300 - <_> - - <_> - - - - <_> - 3 13 3 3 -1. - <_> - 3 14 3 1 3. - 0 - 6.7039071582257748e-003 - 0.0290793292224407 - -0.6905593872070313 - <_> - - <_> - - - - <_> - 10 17 1 3 -1. - <_> - 10 18 1 1 3. - 0 - 5.0734888645820320e-005 - -0.1569671928882599 - 0.1196542978286743 - <_> - - <_> - - - - <_> - 4 0 14 8 -1. - <_> - 11 0 7 8 2. - 0 - -0.2033555954694748 - -0.6950634717941284 - 0.0275075193494558 - <_> - - <_> - - - - <_> - 2 0 12 2 -1. - <_> - 6 0 4 2 3. - 0 - 9.4939414411783218e-003 - -0.0874493718147278 - 0.2396833002567291 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 4 0 2 3 2. - 0 - -2.4055240210145712e-003 - 0.2115096002817154 - -0.1314893066883087 - <_> - - <_> - - - - <_> - 13 1 1 2 -1. - <_> - 13 2 1 1 2. - 0 - -1.1342419747961685e-004 - 0.1523378938436508 - -0.1272590011358261 - <_> - - <_> - - - - <_> - 7 5 3 6 -1. - <_> - 8 5 1 6 3. - 0 - 0.0149922100827098 - -0.0341279692947865 - 0.5062407255172730 - <_> - - <_> - - - - <_> - 18 2 2 2 -1. - <_> - 18 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - 7.4068200774490833e-004 - 0.0487647503614426 - -0.4022532105445862 - <_> - - <_> - - - - <_> - 15 1 2 14 -1. - <_> - 16 1 1 14 2. - 0 - -4.2459447868168354e-003 - 0.2155476063489914 - -0.0871269926428795 - <_> - - <_> - - - - <_> - 15 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 6.8655109498649836e-004 - -0.0754187181591988 - 0.2640590965747833 - <_> - - <_> - - - - <_> - 3 1 6 3 -1. - <_> - 5 1 2 3 3. - 0 - -0.0167514607310295 - -0.6772903203964233 - 0.0329187288880348 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - -2.6301678735762835e-004 - 0.2272586971521378 - -0.0905348733067513 - <_> - - <_> - - - - <_> - 5 17 2 2 -1. - <_> - 5 17 1 1 2. - <_> - 6 18 1 1 2. - 0 - 4.3398610432632267e-004 - 0.0558943785727024 - -0.3559266924858093 - <_> - - <_> - - - - <_> - 9 10 6 10 -1. - <_> - 11 10 2 10 3. - 0 - -0.0201501492410898 - 0.1916276067495346 - -0.0949299708008766 - <_> - - <_> - - - - <_> - 10 17 6 3 -1. - <_> - 12 17 2 3 3. - 0 - -0.0144521296024323 - -0.6851034164428711 - 0.0254221707582474 - <_> - - <_> - - - - <_> - 14 5 2 10 -1. - <_> - 14 10 2 5 2. - 0 - -0.0211497396230698 - 0.3753319084644318 - -0.0514965802431107 - <_> - - <_> - - - - <_> - 11 12 6 2 -1. - <_> - 11 13 6 1 2. - 0 - 0.0211377702653408 - 0.0290830805897713 - -0.8943036794662476 - <_> - - <_> - - - - <_> - 8 1 1 3 -1. - <_> - 8 2 1 1 3. - 0 - 1.1524349683895707e-003 - -0.0696949362754822 - 0.2729980051517487 - <_> - - <_> - - - - <_> - 12 15 2 2 -1. - <_> - 12 15 1 1 2. - <_> - 13 16 1 1 2. - 0 - -1.9070580310653895e-004 - 0.1822811961174011 - -0.0983670726418495 - <_> - - <_> - - - - <_> - 6 8 6 4 -1. - <_> - 6 8 3 2 2. - <_> - 9 10 3 2 2. - 0 - -0.0363496318459511 - -0.8369309902191162 - 0.0250557605177164 - <_> - - <_> - - - - <_> - 7 5 3 5 -1. - <_> - 8 5 1 5 3. - 0 - -9.0632075443863869e-003 - 0.4146350026130676 - -0.0544134490191936 - <_> - - <_> - - - - <_> - 0 5 7 3 -1. - <_> - 0 6 7 1 3. - 0 - -2.0535490475594997e-003 - -0.1975031048059464 - 0.1050689965486527 - -1.0129359960556030 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 9 6 6 -1. - <_> - 9 9 2 6 3. - 0 - -0.0227170195430517 - 0.2428855001926422 - -0.1474552005529404 - <_> - - <_> - - - - <_> - 5 7 8 8 -1. - <_> - 5 11 8 4 2. - 0 - 0.0255059506744146 - -0.2855173945426941 - 0.1083720996975899 - <_> - - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -2.6640091091394424e-003 - 0.2927573025226593 - -0.1037271022796631 - <_> - - <_> - - - - <_> - 10 11 6 1 -1. - <_> - 12 11 2 1 3. - 0 - -3.8115289062261581e-003 - 0.2142689973115921 - -0.1381113976240158 - <_> - - <_> - - - - <_> - 13 6 6 11 -1. - <_> - 15 6 2 11 3. - 0 - -0.0167326908558607 - 0.2655026018619537 - -0.0439113304018974 - <_> - - <_> - - - - <_> - 8 17 2 2 -1. - <_> - 8 17 1 1 2. - <_> - 9 18 1 1 2. - 0 - 4.9277010839432478e-004 - 0.0211045593023300 - -0.4297136068344116 - <_> - - <_> - - - - <_> - 4 12 12 1 -1. - <_> - 8 12 4 1 3. - 0 - -0.0366911105811596 - 0.5399242043495178 - -0.0436488017439842 - <_> - - <_> - - - - <_> - 11 17 3 2 -1. - <_> - 11 18 3 1 2. - 0 - 1.2615970335900784e-003 - -0.1293386965990067 - 0.1663877069950104 - <_> - - <_> - - - - <_> - 8 17 6 1 -1. - <_> - 10 17 2 1 3. - 0 - -8.4106856957077980e-003 - -0.9469841122627258 - 0.0214658491313457 - <_> - - <_> - - - - <_> - 4 1 14 6 -1. - <_> - 4 3 14 2 3. - 0 - 0.0649027228355408 - -0.0717277601361275 - 0.2661347985267639 - <_> - - <_> - - - - <_> - 14 2 2 12 -1. - <_> - 14 8 2 6 2. - 0 - 0.0303050000220537 - -0.0827824920415878 - 0.2769432067871094 - <_> - - <_> - - - - <_> - 12 13 3 2 -1. - <_> - 12 14 3 1 2. - 0 - 2.5875340215861797e-003 - -0.1296616941690445 - 0.1775663048028946 - <_> - - <_> - - - - <_> - 6 1 6 1 -1. - <_> - 8 1 2 1 3. - 0 - -7.0240451022982597e-003 - -0.6424317955970764 - 0.0399432107806206 - <_> - - <_> - - - - <_> - 10 6 6 1 -1. - <_> - 12 6 2 1 3. - 0 - -1.0099769569933414e-003 - 0.1417661011219025 - -0.1165997013449669 - <_> - - <_> - - - - <_> - 3 19 2 1 -1. - <_> - 4 19 1 1 2. - 0 - -4.1179071558872238e-005 - 0.1568766981363297 - -0.1112734004855156 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -4.7293151146732271e-004 - -0.3355455994606018 - 0.0459777303040028 - <_> - - <_> - - - - <_> - 16 11 3 7 -1. - <_> - 17 11 1 7 3. - 0 - -1.7178079579025507e-003 - 0.1695290952920914 - -0.1057806983590126 - <_> - - <_> - - - - <_> - 19 5 1 6 -1. - <_> - 19 8 1 3 2. - 0 - -0.0133331697434187 - -0.5825781226158142 - 0.0309784300625324 - <_> - - <_> - - - - <_> - 9 8 4 3 -1. - <_> - 9 9 4 1 3. - 0 - -1.8783430568873882e-003 - 0.1426687985658646 - -0.1113125979900360 - <_> - - <_> - - - - <_> - 16 8 4 4 -1. - <_> - 16 8 2 2 2. - <_> - 18 10 2 2 2. - 0 - -6.5765981562435627e-003 - 0.2756136059761047 - -0.0531003288924694 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 1 1 2. - <_> - 3 9 1 1 2. - 0 - -7.7210381277836859e-005 - 0.1324024051427841 - -0.1116779968142510 - <_> - - <_> - - - - <_> - 3 5 6 4 -1. - <_> - 3 5 3 2 2. - <_> - 6 7 3 2 2. - 0 - 0.0219685398042202 - -0.0269681606441736 - 0.5006716847419739 - <_> - - <_> - - - - <_> - 2 3 8 16 -1. - <_> - 2 3 4 8 2. - <_> - 6 11 4 8 2. - 0 - -0.0274457503110170 - -0.2408674061298370 - 0.0604782700538635 - <_> - - <_> - - - - <_> - 17 17 1 3 -1. - <_> - 17 18 1 1 3. - 0 - 7.8305849456228316e-005 - -0.1333488970994949 - 0.1012346968054771 - <_> - - <_> - - - - <_> - 7 2 8 11 -1. - <_> - 11 2 4 11 2. - 0 - 0.0701906830072403 - -0.0548637807369232 - 0.2480994015932083 - <_> - - <_> - - - - <_> - 13 3 6 14 -1. - <_> - 16 3 3 14 2. - 0 - -0.0719021335244179 - -0.3784669041633606 - 0.0422109998762608 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 6 9 6 2 3. - 0 - -0.1078097969293594 - -0.3748658895492554 - 0.0428334400057793 - <_> - - <_> - - - - <_> - 6 10 14 3 -1. - <_> - 6 11 14 1 3. - 0 - 1.4364200178533792e-003 - 0.0804763585329056 - -0.1726378947496414 - <_> - - <_> - - - - <_> - 10 9 9 3 -1. - <_> - 13 9 3 3 3. - 0 - 0.0682891905307770 - -0.0355957895517349 - 0.4076131880283356 - <_> - - <_> - - - - <_> - 3 5 4 6 -1. - <_> - 3 5 2 3 2. - <_> - 5 8 2 3 2. - 0 - -6.8037179298698902e-003 - 0.1923379004001617 - -0.0823680236935616 - <_> - - <_> - - - - <_> - 3 7 3 7 -1. - <_> - 4 7 1 7 3. - 0 - -5.6193489581346512e-004 - 0.1305712014436722 - -0.1435514986515045 - <_> - - <_> - - - - <_> - 2 8 11 6 -1. - <_> - 2 10 11 2 3. - 0 - -0.0582766495645046 - -0.3012543916702271 - 0.0528196506202221 - <_> - - <_> - - - - <_> - 8 9 6 3 -1. - <_> - 8 10 6 1 3. - 0 - -6.1205718666315079e-003 - 0.2204390019178391 - -0.0756917521357536 - <_> - - <_> - - - - <_> - 3 3 3 11 -1. - <_> - 4 3 1 11 3. - 0 - -0.0135943097993732 - -0.3904936015605927 - 0.0418571084737778 - <_> - - <_> - - - - <_> - 0 19 6 1 -1. - <_> - 3 19 3 1 2. - 0 - 1.3626200379803777e-003 - -0.0953634232282639 - 0.1497032046318054 - <_> - - <_> - - - - <_> - 18 18 1 2 -1. - <_> - 18 19 1 1 2. - 0 - -1.5074219845701009e-004 - -0.2394558042287827 - 0.0647983327507973 - <_> - - <_> - - - - <_> - 8 0 12 6 -1. - <_> - 8 0 6 3 2. - <_> - 14 3 6 3 2. - 0 - -0.0774142593145370 - 0.5594198107719421 - -0.0245168805122375 - <_> - - <_> - - - - <_> - 19 5 1 3 -1. - <_> - 19 6 1 1 3. - 0 - 9.2117872554808855e-004 - 0.0549288615584373 - -0.2793481051921845 - <_> - - <_> - - - - <_> - 5 8 2 1 -1. - <_> - 6 8 1 1 2. - 0 - 1.0250780032947659e-003 - -0.0621673092246056 - 0.2497636973857880 - <_> - - <_> - - - - <_> - 13 11 2 1 -1. - <_> - 14 11 1 1 2. - 0 - -8.1174750812351704e-004 - 0.2343793958425522 - -0.0657258108258247 - <_> - - <_> - - - - <_> - 3 6 15 13 -1. - <_> - 8 6 5 13 3. - 0 - 0.0834310203790665 - 0.0509548000991344 - -0.3102098107337952 - <_> - - <_> - - - - <_> - 4 3 6 2 -1. - <_> - 6 3 2 2 3. - 0 - -9.2014456167817116e-003 - -0.3924253880977631 - 0.0329269506037235 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -2.9086650465615094e-004 - -0.3103975057601929 - 0.0497118197381496 - <_> - - <_> - - - - <_> - 7 8 2 6 -1. - <_> - 8 8 1 6 2. - 0 - 7.7576898038387299e-003 - -0.0440407507121563 - 0.3643135130405426 - <_> - - <_> - - - - <_> - 3 0 6 19 -1. - <_> - 5 0 2 19 3. - 0 - -0.1246609017252922 - -0.8195707798004150 - 0.0191506408154964 - <_> - - <_> - - - - <_> - 3 1 6 5 -1. - <_> - 5 1 2 5 3. - 0 - 0.0132425501942635 - 0.0389888398349285 - -0.3323068022727966 - <_> - - <_> - - - - <_> - 17 14 3 6 -1. - <_> - 17 16 3 2 3. - 0 - -6.6770128905773163e-003 - -0.3579013943672180 - 0.0404602102935314 - <_> - - <_> - - - - <_> - 17 13 2 6 -1. - <_> - 18 13 1 6 2. - 0 - -2.7479929849505424e-003 - 0.2525390088558197 - -0.0564278215169907 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 18 18 1 2 2. - 0 - 8.2659651525318623e-004 - -0.0719886571168900 - 0.2278047949075699 - <_> - - <_> - - - - <_> - 11 14 9 4 -1. - <_> - 14 14 3 4 3. - 0 - -0.0501534007489681 - -0.6303647160530090 - 0.0274620503187180 - <_> - - <_> - - - - <_> - 15 8 4 6 -1. - <_> - 15 8 2 3 2. - <_> - 17 11 2 3 2. - 0 - 7.4203149415552616e-003 - -0.0666107162833214 - 0.2778733968734741 - <_> - - <_> - - - - <_> - 1 16 1 3 -1. - <_> - 1 17 1 1 3. - 0 - -6.7951780511066318e-004 - -0.3632706105709076 - 0.0427954308688641 - <_> - - <_> - - - - <_> - 7 0 3 14 -1. - <_> - 8 0 1 14 3. - 0 - -1.9305750029161572e-003 - 0.1419623047113419 - -0.1075998023152351 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 13 0 1 1 2. - 0 - -3.8132671033963561e-004 - 0.2159176021814346 - -0.0702026635408401 - <_> - - <_> - - - - <_> - 7 9 6 5 -1. - <_> - 10 9 3 5 2. - 0 - -0.0709903463721275 - 0.4526660144329071 - -0.0407504811882973 - <_> - - <_> - - - - <_> - 15 5 4 9 -1. - <_> - 17 5 2 9 2. - 0 - -0.0533680804073811 - -0.6767405867576599 - 0.0192883405834436 - <_> - - <_> - - - - <_> - 11 0 6 6 -1. - <_> - 13 0 2 6 3. - 0 - -0.0200648494064808 - -0.4336543083190918 - 0.0318532884120941 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 1.1976360110566020e-003 - -0.0265598706901073 - 0.5079718232154846 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - -2.2697300300933421e-004 - 0.1801259964704514 - -0.0836065486073494 - <_> - - <_> - - - - <_> - 13 2 2 18 -1. - <_> - 13 11 2 9 2. - 0 - 0.0152626996859908 - -0.2023892998695374 - 0.0674220174551010 - <_> - - <_> - - - - <_> - 8 4 8 10 -1. - <_> - 8 9 8 5 2. - 0 - -0.2081176936626434 - 0.6694386005401611 - -0.0224521104246378 - <_> - - <_> - - - - <_> - 8 3 2 3 -1. - <_> - 8 4 2 1 3. - 0 - 1.5514369588345289e-003 - -0.0751218423247337 - 0.1732691973447800 - <_> - - <_> - - - - <_> - 11 1 6 9 -1. - <_> - 11 4 6 3 3. - 0 - -0.0529240109026432 - 0.2499251961708069 - -0.0628791674971581 - <_> - - <_> - - - - <_> - 15 4 5 6 -1. - <_> - 15 6 5 2 3. - 0 - -0.0216488502919674 - -0.2919428050518036 - 0.0526144914329052 - <_> - - <_> - - - - <_> - 12 18 2 2 -1. - <_> - 12 18 1 1 2. - <_> - 13 19 1 1 2. - 0 - -2.2905069636180997e-004 - -0.2211730033159256 - 0.0631683394312859 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - 5.0170070608146489e-005 - -0.1151070967316628 - 0.1161144003272057 - <_> - - <_> - - - - <_> - 12 19 2 1 -1. - <_> - 13 19 1 1 2. - 0 - -1.6416069411206990e-004 - 0.1587152034044266 - -0.0826006010174751 - <_> - - <_> - - - - <_> - 8 10 6 6 -1. - <_> - 10 10 2 6 3. - 0 - -0.0120032895356417 - 0.1221809014678001 - -0.1122969985008240 - <_> - - <_> - - - - <_> - 14 2 6 5 -1. - <_> - 16 2 2 5 3. - 0 - -0.0177841000258923 - -0.3507278859615326 - 0.0313419215381145 - <_> - - <_> - - - - <_> - 9 5 2 6 -1. - <_> - 9 7 2 2 3. - 0 - -6.3457582145929337e-003 - 0.1307806968688965 - -0.1057441011071205 - <_> - - <_> - - - - <_> - 1 15 2 2 -1. - <_> - 2 15 1 2 2. - 0 - -7.9523242311552167e-004 - 0.1720467060804367 - -0.0860019922256470 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -3.1029590172693133e-004 - -0.2843317091464996 - 0.0518171191215515 - <_> - - <_> - - - - <_> - 10 14 4 6 -1. - <_> - 10 16 4 2 3. - 0 - -0.0170537102967501 - 0.3924242854118347 - -0.0401432700455189 - <_> - - <_> - - - - <_> - 9 7 3 2 -1. - <_> - 10 7 1 2 3. - 0 - 4.6504959464073181e-003 - -0.0318375602364540 - 0.4123769998550415 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 6 9 3 1 2. - <_> - 9 10 3 1 2. - 0 - -0.0103587601333857 - -0.5699319839477539 - 0.0292483791708946 - <_> - - <_> - - - - <_> - 0 2 1 12 -1. - <_> - 0 6 1 4 3. - 0 - -0.0221962407231331 - -0.4560528993606567 - 0.0262859892100096 - <_> - - <_> - - - - <_> - 4 0 15 1 -1. - <_> - 9 0 5 1 3. - 0 - -7.0536029525101185e-003 - 0.1599832028150559 - -0.0915948599576950 - <_> - - <_> - - - - <_> - 9 0 8 2 -1. - <_> - 9 0 4 1 2. - <_> - 13 1 4 1 2. - 0 - -5.7094299700111151e-004 - -0.1407632976770401 - 0.1028741970658302 - <_> - - <_> - - - - <_> - 12 2 8 1 -1. - <_> - 16 2 4 1 2. - 0 - -2.2152599412947893e-003 - 0.1659359931945801 - -0.0852739885449409 - <_> - - <_> - - - - <_> - 7 1 10 6 -1. - <_> - 7 3 10 2 3. - 0 - -0.0280848909169436 - 0.2702234089374542 - -0.0558738112449646 - <_> - - <_> - - - - <_> - 18 6 2 3 -1. - <_> - 18 7 2 1 3. - 0 - 2.1515151020139456e-003 - 0.0424728915095329 - -0.3200584948062897 - <_> - - <_> - - - - <_> - 4 12 2 2 -1. - <_> - 4 12 1 1 2. - <_> - 5 13 1 1 2. - 0 - -2.9733829433098435e-004 - 0.1617716997861862 - -0.0851155892014503 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0166947804391384 - -0.4285877048969269 - 0.0305416099727154 - <_> - - <_> - - - - <_> - 0 9 9 6 -1. - <_> - 3 9 3 6 3. - 0 - 0.1198299005627632 - -0.0162772908806801 - 0.7984678149223328 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 18 18 1 2 2. - 0 - -3.5499420482665300e-004 - 0.1593593955039978 - -0.0832728818058968 - <_> - - <_> - - - - <_> - 11 2 6 16 -1. - <_> - 13 2 2 16 3. - 0 - -0.0182262696325779 - 0.1952728033065796 - -0.0739398896694183 - <_> - - <_> - - - - <_> - 2 4 15 13 -1. - <_> - 7 4 5 13 3. - 0 - -4.0238600922748446e-004 - 0.0791018083691597 - -0.2080612927675247 - <_> - - <_> - - - - <_> - 16 2 3 10 -1. - <_> - 17 2 1 10 3. - 0 - 4.0892060496844351e-004 - 0.1003663018345833 - -0.1512821018695831 - <_> - - <_> - - - - <_> - 6 10 2 1 -1. - <_> - 7 10 1 1 2. - 0 - 9.5368112670257688e-004 - -0.0730116665363312 - 0.2175202071666718 - <_> - - <_> - - - - <_> - 1 1 18 16 -1. - <_> - 10 1 9 16 2. - 0 - 0.4308179914951325 - -0.0274506993591785 - 0.5706158280372620 - <_> - - <_> - - - - <_> - 14 4 3 15 -1. - <_> - 15 4 1 15 3. - 0 - 5.3564831614494324e-004 - 0.1158754006028175 - -0.1279056072235107 - <_> - - <_> - - - - <_> - 19 13 1 2 -1. - <_> - 19 14 1 1 2. - 0 - 2.4430730263702571e-005 - -0.1681662946939468 - 0.0804499834775925 - <_> - - <_> - - - - <_> - 2 6 5 8 -1. - <_> - 2 10 5 4 2. - 0 - -0.0553456507623196 - 0.4533894956111908 - -0.0312227793037891 - -0.9774749279022217 - 22 - -1 - diff --git a/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml b/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml deleted file mode 100644 index 64070d9..0000000 --- a/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml +++ /dev/null @@ -1,33158 +0,0 @@ - - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_> - 8 7 12 1 -1. - <_> - 8 7 6 1 2. - 1 - -0.0269871093332767 - 2 - 1 - <_> - - - - <_> - 4 7 8 6 -1. - <_> - 6 7 4 6 2. - 0 - 0.0506705306470394 - -0.8039547204971314 - 0.6049140095710754 - <_> - - - - <_> - 5 3 12 12 -1. - <_> - 9 7 4 4 9. - 0 - -0.1291539072990418 - 0.9054458141326904 - 0.0440708100795746 - <_> - - <_> - - - - <_> - 1 8 12 12 -1. - <_> - 1 14 12 6 2. - 0 - 0.0888277366757393 - 2 - 1 - <_> - - - - <_> - 5 9 9 5 -1. - <_> - 8 9 3 5 3. - 0 - -0.0203982405364513 - 0.7921888232231140 - 0.0406922996044159 - <_> - - - - <_> - 5 7 9 6 -1. - <_> - 8 7 3 6 3. - 0 - -0.0612617582082748 - 0.4258536100387573 - -0.7032520771026611 - <_> - - <_> - - - - <_> - 2 0 18 15 -1. - <_> - 2 5 18 5 3. - 0 - -0.2049081027507782 - 2 - 1 - <_> - - - - <_> - 7 1 9 9 -1. - <_> - 7 4 9 3 3. - 0 - 0.0949330478906631 - -0.4401764869689941 - 0.5364052057266235 - <_> - - - - <_> - 8 19 3 1 -1. - <_> - 9 19 1 1 3. - 0 - 1.2091030366718769e-003 - 0.6877645850181580 - -0.5587934851646423 - <_> - - <_> - - - - <_> - 5 17 2 2 -1. - <_> - 5 17 1 1 2. - <_> - 6 18 1 1 2. - 0 - 9.2227972345426679e-004 - 1 - -0.7268440127372742 - <_> - - - - <_> - 5 17 2 2 -1. - <_> - 5 17 1 1 2. - <_> - 6 18 1 1 2. - 0 - -7.2678289143368602e-004 - -0.5802800059318543 - 2 - <_> - - - - <_> - 10 18 3 1 -1. - <_> - 11 18 1 1 3. - 0 - 6.8421510513871908e-004 - 0.5617753267288208 - -0.2983418107032776 - <_> - - <_> - - - - <_> - 7 7 9 7 -1. - <_> - 10 7 3 7 3. - 0 - -0.0511505901813507 - 0.5984076261520386 - 1 - <_> - - - - <_> - 6 8 12 5 -1. - <_> - 9 8 6 5 2. - 0 - 0.0616220608353615 - 2 - 0.7474393248558044 - <_> - - - - <_> - 13 1 6 7 -1. - <_> - 13 1 3 7 2. - 1 - 0.0728734731674194 - -0.4970377981662750 - 0.2812925875186920 - -1.6473180055618286 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 12 15 -1. - <_> - 9 7 4 5 9. - 0 - -0.4199487864971161 - 2 - 1 - <_> - - - - <_> - 6 5 14 1 -1. - <_> - 6 5 7 1 2. - 1 - -0.0561862885951996 - 0.2758620083332062 - -0.6462321877479553 - <_> - - - - <_> - 9 9 10 1 -1. - <_> - 9 9 5 1 2. - 1 - -0.0237111095339060 - 0.8524125218391419 - 8.3703370764851570e-003 - <_> - - <_> - - - - <_> - 2 9 9 3 -1. - <_> - 5 9 3 3 3. - 0 - 0.0405234396457672 - 1 - 0.7427021861076355 - <_> - - - - <_> - 0 8 20 12 -1. - <_> - 0 14 20 6 2. - 0 - 0.2738890051841736 - -0.4928669035434723 - 2 - <_> - - - - <_> - 0 5 4 13 -1. - <_> - 2 5 2 13 2. - 0 - -0.0142938001081347 - 0.7178478837013245 - -0.0422239787876606 - <_> - - <_> - - - - <_> - 11 18 3 2 -1. - <_> - 12 18 1 2 3. - 0 - -2.1144729107618332e-003 - -0.8019660115242004 - 1 - <_> - - - - <_> - 11 18 3 1 -1. - <_> - 12 18 1 1 3. - 0 - 1.0659949621185660e-003 - 2 - -0.6602591276168823 - <_> - - - - <_> - 11 19 3 1 -1. - <_> - 12 19 1 1 3. - 0 - 1.0812469990924001e-003 - 0.4791637063026428 - -0.5164529085159302 - <_> - - <_> - - - - <_> - 10 9 9 3 -1. - <_> - 13 9 3 3 3. - 0 - 0.0301982890814543 - 1 - 0.5132756233215332 - <_> - - - - <_> - 5 8 8 7 -1. - <_> - 7 8 4 7 2. - 0 - 0.0405695512890816 - 2 - 0.6664149761199951 - <_> - - - - <_> - 8 6 9 8 -1. - <_> - 11 6 3 8 3. - 0 - 0.0706797391176224 - -0.4529865980148315 - 0.5548071861267090 - <_> - - <_> - - - - <_> - 4 18 2 2 -1. - <_> - 4 18 1 1 2. - <_> - 5 19 1 1 2. - 0 - -7.8928138827905059e-004 - -0.7252629995346069 - 1 - <_> - - - - <_> - 4 18 2 2 -1. - <_> - 4 18 1 1 2. - <_> - 5 19 1 1 2. - 0 - 8.0574717139825225e-004 - 2 - -0.5647987127304077 - <_> - - - - <_> - 7 6 8 14 -1. - <_> - 9 6 4 14 2. - 0 - -0.0209765601903200 - 0.6999353766441345 - 0.0685004666447639 - <_> - - <_> - - - - <_> - 16 13 4 3 -1. - <_> - 15 14 4 1 3. - 1 - 0.0127949602901936 - 1 - -0.8640956878662109 - <_> - - - - <_> - 16 13 4 2 -1. - <_> - 16 13 2 2 2. - 1 - -8.1120636314153671e-003 - 0.4444836080074310 - 2 - <_> - - - - <_> - 5 6 6 14 -1. - <_> - 7 6 2 14 3. - 0 - -0.0155065301805735 - 0.3667531013488770 - -0.2918907105922699 - <_> - - <_> - - - - <_> - 0 7 8 11 -1. - <_> - 2 7 4 11 2. - 0 - -0.0129156503826380 - 2 - 1 - <_> - - - - <_> - 0 7 8 7 -1. - <_> - 2 7 4 7 2. - 0 - 6.6297221928834915e-003 - -0.4756678044795990 - 0.1035035029053688 - <_> - - - - <_> - 2 16 3 1 -1. - <_> - 3 17 1 1 3. - 1 - -3.6532930098474026e-003 - -0.6172305941581726 - 0.5438253283500671 - -1.4257860183715820 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 0 15 18 -1. - <_> - 8 6 5 6 9. - 0 - -0.7873197197914124 - 0.7126883864402771 - 1 - <_> - - - - <_> - 0 6 20 14 -1. - <_> - 0 13 20 7 2. - 0 - 0.1690800935029984 - -0.7190899848937988 - 2 - <_> - - - - <_> - 6 7 9 7 -1. - <_> - 9 7 3 7 3. - 0 - -0.0403696894645691 - 0.4414893090724945 - -0.4225192964076996 - <_> - - <_> - - - - <_> - 3 9 6 2 -1. - <_> - 5 9 2 2 3. - 0 - 0.0191323608160019 - 1 - 0.6918622851371765 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - 6.4184539951384068e-004 - 2 - -0.7611696720123291 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - -7.8941037645563483e-004 - -0.6814042925834656 - 0.1600991934537888 - <_> - - <_> - - - - <_> - 14 8 6 5 -1. - <_> - 16 8 2 5 3. - 0 - -7.1503049694001675e-003 - 1 - 2 - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 16 19 4 1 2. - 0 - -2.3156129755079746e-003 - -0.5591660737991333 - 0.5128449797630310 - <_> - - - - <_> - 8 8 9 12 -1. - <_> - 11 8 3 12 3. - 0 - -0.0415212698280811 - 0.2442256957292557 - -0.4688340127468109 - <_> - - <_> - - - - <_> - 8 18 3 1 -1. - <_> - 9 18 1 1 3. - 0 - 9.1200548922643065e-004 - 1 - -0.6952788829803467 - <_> - - - - <_> - 8 18 3 2 -1. - <_> - 9 18 1 2 3. - 0 - -1.5798299573361874e-003 - -0.6350964903831482 - 2 - <_> - - - - <_> - 0 8 4 11 -1. - <_> - 2 8 2 11 2. - 0 - -0.0115736499428749 - 0.6468638181686401 - 6.9198559504002333e-004 - <_> - - <_> - - - - <_> - 10 0 10 1 -1. - <_> - 15 0 5 1 2. - 0 - 2.1843519061803818e-003 - 2 - 1 - <_> - - - - <_> - 13 1 3 3 -1. - <_> - 14 1 1 3 3. - 0 - 2.9345690272748470e-003 - 0.4563289880752564 - -0.5884143710136414 - <_> - - - - <_> - 2 8 12 12 -1. - <_> - 6 8 4 12 3. - 0 - -0.0587881505489349 - 0.2670420110225678 - -0.3834899067878723 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -5.5392808280885220e-004 - -0.4891336858272553 - 1 - <_> - - - - <_> - 18 18 1 2 -1. - <_> - 18 19 1 1 2. - 0 - -5.3035060409456491e-004 - -0.3842155039310455 - 2 - <_> - - - - <_> - 8 10 6 5 -1. - <_> - 10 10 2 5 3. - 0 - -6.8775108084082603e-003 - 0.6684569716453552 - 0.0931582599878311 - <_> - - <_> - - - - <_> - 13 17 3 2 -1. - <_> - 14 17 1 2 3. - 0 - 1.6710379859432578e-003 - 1 - -0.6036937236785889 - <_> - - - - <_> - 0 4 6 12 -1. - <_> - 0 8 6 4 3. - 0 - 1.4162790030241013e-003 - 2 - -0.3041876852512360 - <_> - - - - <_> - 0 8 5 4 -1. - <_> - 0 9 5 2 2. - 0 - 7.7876187860965729e-003 - 0.3969906866550446 - -0.6668758988380432 - <_> - - <_> - - - - <_> - 13 6 4 6 -1. - <_> - 14 7 2 6 2. - 1 - -0.0129167800769210 - 1 - 2 - <_> - - - - <_> - 4 2 3 2 -1. - <_> - 5 2 1 2 3. - 0 - -3.0156269203871489e-003 - -0.7123972773551941 - 0.4625298976898193 - <_> - - - - <_> - 11 2 8 17 -1. - <_> - 13 2 4 17 2. - 0 - -0.0197859406471252 - 0.2833831906318665 - -0.3531793057918549 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 0 1 3 3. - 0 - 3.3207770902663469e-003 - 1 - -0.7329139709472656 - <_> - - - - <_> - 10 5 9 13 -1. - <_> - 13 5 3 13 3. - 0 - 0.0296062398701906 - 2 - 0.4953075945377350 - <_> - - - - <_> - 5 8 8 6 -1. - <_> - 7 8 4 6 2. - 0 - 0.0446147881448269 - -0.1950280964374542 - 0.7981641888618469 - -1.4711019992828369 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 15 18 -1. - <_> - 8 7 5 6 9. - 0 - -0.9236614108085632 - 0.7691580057144165 - 1 - <_> - - - - <_> - 6 7 9 8 -1. - <_> - 9 7 3 8 3. - 0 - -0.0481939390301704 - 2 - -0.5136122703552246 - <_> - - - - <_> - 0 6 20 14 -1. - <_> - 0 13 20 7 2. - 0 - 0.2866987884044647 - -0.2967190146446228 - 0.6202818751335144 - <_> - - <_> - - - - <_> - 1 7 6 7 -1. - <_> - 3 7 2 7 3. - 0 - -0.0130381602793932 - 1 - 2 - <_> - - - - <_> - 9 19 3 1 -1. - <_> - 10 19 1 1 3. - 0 - -1.4749659458175302e-003 - -0.7129424810409546 - 0.5911517739295960 - <_> - - - - <_> - 4 6 9 7 -1. - <_> - 7 6 3 7 3. - 0 - -0.0469217486679554 - 0.3130356073379517 - -0.3674969077110291 - <_> - - <_> - - - - <_> - 18 10 1 10 -1. - <_> - 18 15 1 5 2. - 0 - 2.4459899868816137e-003 - -0.4693000018596649 - 1 - <_> - - - - <_> - 12 16 2 4 -1. - <_> - 12 16 1 2 2. - <_> - 13 18 1 2 2. - 0 - -2.5321498978883028e-003 - -0.7745016217231751 - 2 - <_> - - - - <_> - 12 19 4 1 -1. - <_> - 13 19 2 1 2. - 0 - 1.4651260571554303e-003 - 0.3641478121280670 - -0.5744588971138001 - <_> - - <_> - - - - <_> - 9 5 6 15 -1. - <_> - 11 5 2 15 3. - 0 - -0.0113074202090502 - 1 - 2 - <_> - - - - <_> - 10 18 4 1 -1. - <_> - 11 18 2 1 2. - 0 - -1.2048849603161216e-003 - -0.5572764873504639 - 0.4787167012691498 - <_> - - - - <_> - 1 0 12 16 -1. - <_> - 5 0 4 16 3. - 0 - -0.0627528727054596 - 0.2278853058815002 - -0.4366796910762787 - <_> - - <_> - - - - <_> - 0 13 3 3 -1. - <_> - 0 14 3 1 3. - 0 - -4.0173111483454704e-003 - -0.7356877923011780 - 1 - <_> - - - - <_> - 1 13 1 3 -1. - <_> - 1 14 1 1 3. - 0 - 1.5160309849306941e-003 - 2 - -0.5848069787025452 - <_> - - - - <_> - 14 0 6 1 -1. - <_> - 17 0 3 1 2. - 0 - 1.9954680465161800e-003 - 0.0215440206229687 - 0.5587568879127502 - <_> - - <_> - - - - <_> - 12 0 3 3 -1. - <_> - 13 0 1 3 3. - 0 - 3.4435209818184376e-003 - 1 - -0.7656589746475220 - <_> - - - - <_> - 12 1 3 2 -1. - <_> - 13 1 1 2 3. - 0 - -2.6550020556896925e-003 - -0.6544749736785889 - 2 - <_> - - - - <_> - 14 2 6 13 -1. - <_> - 16 2 2 13 3. - 0 - -0.0114076901227236 - 0.5363308191299439 - -0.0388491712510586 - <_> - - <_> - - - - <_> - 12 4 6 1 -1. - <_> - 14 6 2 1 3. - 1 - -2.3805440869182348e-003 - 1 - 2 - <_> - - - - <_> - 15 6 5 2 -1. - <_> - 15 7 5 1 2. - 0 - 6.6475258208811283e-003 - 0.3398441076278687 - -0.6502509117126465 - <_> - - - - <_> - 9 0 5 12 -1. - <_> - 9 4 5 4 3. - 0 - 0.1401824057102203 - -0.3249109089374542 - 0.7506706714630127 - <_> - - <_> - - - - <_> - 6 1 13 9 -1. - <_> - 6 4 13 3 3. - 0 - -0.0623583607375622 - 0.4577716886997223 - 1 - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 0 1 2 3. - 0 - 1.3628599699586630e-003 - 2 - -0.6320266127586365 - <_> - - - - <_> - 6 0 4 2 -1. - <_> - 6 0 2 2 2. - 1 - -4.4609848409891129e-003 - 0.4059796035289764 - -0.2085406929254532 - <_> - - <_> - - - - <_> - 4 2 3 3 -1. - <_> - 3 3 3 1 3. - 1 - -0.0100468397140503 - -0.7478982806205750 - 1 - <_> - - - - <_> - 7 1 13 6 -1. - <_> - 5 3 13 2 3. - 1 - -0.0292748194187880 - 2 - -0.1799547970294952 - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - 7.7389390207827091e-003 - 0.4778284132480621 - -0.6511334180831909 - <_> - - <_> - - - - <_> - 17 0 3 1 -1. - <_> - 18 0 1 1 3. - 0 - 1.4774020528420806e-003 - 1 - -0.6626989841461182 - <_> - - - - <_> - 1 12 5 6 -1. - <_> - 1 15 5 3 2. - 0 - 0.0149898203089833 - -0.1669555008411408 - 2 - <_> - - - - <_> - 5 14 3 1 -1. - <_> - 6 15 1 1 3. - 1 - 4.5073241926729679e-003 - 0.3870205879211426 - -0.7340937256813049 - <_> - - <_> - - - - <_> - 0 7 7 3 -1. - <_> - 0 8 7 1 3. - 0 - 1.4901049435138702e-003 - 1 - -0.3428083956241608 - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 9 2 2 2. - 0 - 8.9141662465408444e-004 - 2 - -0.2803674042224884 - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 6 3 4 1 3. - 1 - -0.0115582197904587 - -0.4252395927906036 - 0.4525966942310333 - <_> - - <_> - - - - <_> - 6 7 6 10 -1. - <_> - 8 7 2 10 3. - 0 - -0.0200119502842426 - 0.4013311862945557 - 1 - <_> - - - - <_> - 2 5 8 12 -1. - <_> - 4 5 4 12 2. - 0 - -0.0170923005789518 - 0.3697001039981842 - 2 - <_> - - - - <_> - 4 0 12 4 -1. - <_> - 4 2 12 2 2. - 0 - -0.0676851719617844 - 0.7443867921829224 - -0.3825584053993225 - -1.3850779533386230 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 8 8 12 -1. - <_> - 9 8 4 12 2. - 0 - -0.0209111496806145 - 1 - 2 - <_> - - - - <_> - 8 6 11 14 -1. - <_> - 8 13 11 7 2. - 0 - 0.1430570930242539 - -0.3496556878089905 - 0.7013456225395203 - <_> - - - - <_> - 16 9 4 9 -1. - <_> - 18 9 2 9 2. - 0 - 0.0119250295683742 - -0.6040462851524353 - 0.0856159031391144 - <_> - - <_> - - - - <_> - 12 9 6 2 -1. - <_> - 14 9 2 2 3. - 0 - 0.0247420091181993 - 1 - 0.8536558747291565 - <_> - - - - <_> - 6 1 10 6 -1. - <_> - 6 3 10 2 3. - 0 - 0.0457321181893349 - 2 - 0.4187641143798828 - <_> - - - - <_> - 5 0 4 5 -1. - <_> - 5 0 2 5 2. - 1 - 0.0432044304907322 - -0.3909491896629334 - 0.2738798856735230 - <_> - - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - -7.2548422031104565e-004 - -0.6201112270355225 - 1 - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - 1.4243220211938024e-003 - 2 - -0.6158943772315979 - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 12 0 4 2 3. - 0 - -5.3335479460656643e-003 - 0.6059644818305969 - 0.0158404801040888 - <_> - - <_> - - - - <_> - 0 8 6 5 -1. - <_> - 2 8 2 5 3. - 0 - -7.1891010738909245e-003 - 1 - -0.2085282951593399 - <_> - - - - <_> - 8 18 4 1 -1. - <_> - 9 18 2 1 2. - 0 - 1.8233320442959666e-003 - 2 - -0.8133838176727295 - <_> - - - - <_> - 10 18 2 1 -1. - <_> - 11 18 1 1 2. - 0 - 1.6109029529616237e-003 - 0.5678064823150635 - -0.8704625964164734 - <_> - - <_> - - - - <_> - 7 2 9 3 -1. - <_> - 10 5 3 3 3. - 1 - -0.0483502782881260 - 2 - 1 - <_> - - - - <_> - 8 3 5 6 -1. - <_> - 8 5 5 2 3. - 0 - 0.0317461714148521 - -0.3533582091331482 - 0.4407657086849213 - <_> - - - - <_> - 0 14 1 3 -1. - <_> - 0 15 1 1 3. - 0 - 1.9233829807490110e-003 - 0.4073063135147095 - -0.5959256887435913 - <_> - - <_> - - - - <_> - 12 17 3 2 -1. - <_> - 13 17 1 2 3. - 0 - 1.3614529743790627e-003 - 1 - -0.5530725121498108 - <_> - - - - <_> - 12 17 3 3 -1. - <_> - 13 17 1 3 3. - 0 - -3.6934199742972851e-003 - -0.7316309809684753 - 2 - <_> - - - - <_> - 7 9 1 4 -1. - <_> - 6 10 1 2 2. - 1 - -8.5378461517393589e-004 - 0.4389067888259888 - -0.0630091726779938 - <_> - - <_> - - - - <_> - 12 7 8 8 -1. - <_> - 14 7 4 8 2. - 0 - -0.0109507702291012 - 0.3926307857036591 - 1 - <_> - - - - <_> - 7 10 4 6 -1. - <_> - 5 12 4 2 3. - 1 - -7.2186449542641640e-003 - 0.2722525000572205 - 2 - <_> - - - - <_> - 0 6 4 10 -1. - <_> - 2 6 2 10 2. - 0 - 0.0185482893139124 - -0.4120861887931824 - 0.6379063725471497 - <_> - - <_> - - - - <_> - 19 9 1 3 -1. - <_> - 19 10 1 1 3. - 0 - 1.0859060566872358e-003 - 1 - -0.5085721015930176 - <_> - - - - <_> - 16 1 4 15 -1. - <_> - 17 2 2 15 2. - 1 - -6.5618362277746201e-003 - 0.3538672924041748 - 2 - <_> - - - - <_> - 14 5 6 7 -1. - <_> - 16 7 2 7 3. - 1 - -0.0617774203419685 - 0.5756828188896179 - -0.2847724854946137 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 4.9480778397992253e-004 - 1 - -0.4958389103412628 - <_> - - - - <_> - 0 7 4 6 -1. - <_> - 0 9 4 2 3. - 0 - 0.0116068804636598 - 2 - -0.5132020115852356 - <_> - - - - <_> - 16 9 4 4 -1. - <_> - 17 9 2 4 2. - 0 - -1.6142609529197216e-003 - 0.5266572833061218 - 0.0309171602129936 - <_> - - <_> - - - - <_> - 0 15 1 3 -1. - <_> - 0 16 1 1 3. - 0 - 2.0437680650502443e-003 - 1 - -0.7094858884811401 - <_> - - - - <_> - 7 5 10 3 -1. - <_> - 6 6 10 1 3. - 1 - -8.2394909113645554e-003 - 0.3418981134891510 - 2 - <_> - - - - <_> - 9 7 9 7 -1. - <_> - 12 7 3 7 3. - 0 - -0.0396992117166519 - 0.4738334119319916 - -0.2506085038185120 - <_> - - <_> - - - - <_> - 14 4 6 8 -1. - <_> - 14 6 6 4 2. - 0 - -8.0377282574772835e-004 - 1 - 2 - <_> - - - - <_> - 17 6 3 1 -1. - <_> - 18 7 1 1 3. - 1 - -5.4273242130875587e-003 - -0.5138400793075562 - 0.2975271046161652 - <_> - - - - <_> - 17 1 3 8 -1. - <_> - 17 3 3 4 2. - 0 - -5.2662738598883152e-003 - 0.1457702964544296 - -0.4600752890110016 - <_> - - <_> - - - - <_> - 0 10 1 3 -1. - <_> - 0 11 1 1 3. - 0 - 6.3841522205621004e-004 - 1 - -0.3641282916069031 - <_> - - - - <_> - 5 2 3 1 -1. - <_> - 6 2 1 1 3. - 0 - -1.5458120033144951e-003 - -0.5808160901069641 - 2 - <_> - - - - <_> - 5 2 3 1 -1. - <_> - 6 2 1 1 3. - 0 - 1.1863360414281487e-003 - 0.2929860949516296 - -0.5142071843147278 - -1.4432040452957153 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 2 9 15 -1. - <_> - 9 7 3 5 9. - 0 - -0.2774501144886017 - 1 - 2 - <_> - - - - <_> - 0 9 6 3 -1. - <_> - 2 9 2 3 3. - 0 - -3.1200000084936619e-003 - 0.8326563835144043 - 0.1023318991065025 - <_> - - - - <_> - 9 6 6 9 -1. - <_> - 11 9 2 3 9. - 0 - -0.0802809223532677 - 0.2377357929944992 - -0.6454666256904602 - <_> - - <_> - - - - <_> - 4 3 12 9 -1. - <_> - 4 6 12 3 3. - 0 - -0.0693915486335754 - 0.4600824117660523 - 1 - <_> - - - - <_> - 8 5 6 4 -1. - <_> - 8 6 6 2 2. - 0 - 5.3355181589722633e-003 - 2 - 0.2913798987865448 - <_> - - - - <_> - 0 1 17 8 -1. - <_> - 0 3 17 4 2. - 0 - -0.0541896186769009 - 0.4702672958374023 - -0.5772340297698975 - <_> - - <_> - - - - <_> - 2 10 9 1 -1. - <_> - 5 10 3 1 3. - 0 - 0.0185629595071077 - 1 - 0.7055550217628479 - <_> - - - - <_> - 2 11 9 8 -1. - <_> - 2 15 9 4 2. - 0 - 0.0463057309389114 - -0.5283988118171692 - 2 - <_> - - - - <_> - 14 0 6 15 -1. - <_> - 16 0 2 15 3. - 0 - -8.8262781500816345e-003 - 0.4395360946655273 - -0.1388749033212662 - <_> - - <_> - - - - <_> - 17 6 2 9 -1. - <_> - 17 9 2 3 3. - 0 - -2.8772179502993822e-003 - 1 - -0.2747583091259003 - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 15 17 1 1 3. - 1 - -2.6457069907337427e-003 - -0.5774679780006409 - 2 - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 3.3441530540585518e-003 - 0.3661524057388306 - -0.6358674168586731 - <_> - - <_> - - - - <_> - 6 0 12 15 -1. - <_> - 10 0 4 15 3. - 0 - -0.0837423726916313 - 2 - 1 - <_> - - - - <_> - 7 8 12 6 -1. - <_> - 11 8 4 6 3. - 0 - 0.1016476973891258 - -0.2966451942920685 - 0.5614004731178284 - <_> - - - - <_> - 11 18 4 1 -1. - <_> - 12 18 2 1 2. - 0 - -2.1541758906096220e-003 - -0.7544627189636231 - 0.3960126042366028 - <_> - - <_> - - - - <_> - 8 18 4 1 -1. - <_> - 9 18 2 1 2. - 0 - -1.7133549554273486e-003 - -0.7374163269996643 - 1 - <_> - - - - <_> - 7 0 8 4 -1. - <_> - 7 2 8 2 2. - 0 - 0.0138994101434946 - 2 - 0.4824739098548889 - <_> - - - - <_> - 8 0 12 8 -1. - <_> - 8 2 12 4 2. - 0 - -0.0284981206059456 - 0.4197104871273041 - -0.2002128958702087 - <_> - - <_> - - - - <_> - 4 9 6 3 -1. - <_> - 6 9 2 3 3. - 0 - -4.9728769809007645e-003 - 0.3763135075569153 - 1 - <_> - - - - <_> - 0 4 9 12 -1. - <_> - 3 8 3 4 9. - 0 - -0.0347518809139729 - 2 - -0.4479779005050659 - <_> - - - - <_> - 6 18 1 2 -1. - <_> - 6 19 1 1 2. - 0 - -8.7171117775142193e-004 - -0.6999509930610657 - 0.1564090996980667 - <_> - - <_> - - - - <_> - 9 2 4 2 -1. - <_> - 10 2 2 2 2. - 0 - -3.3666230738162994e-003 - -0.6772192120552063 - 1 - <_> - - - - <_> - 6 1 8 17 -1. - <_> - 8 1 4 17 2. - 0 - -0.0213788300752640 - 0.3395152986049652 - 2 - <_> - - - - <_> - 13 9 4 4 -1. - <_> - 14 10 2 4 2. - 1 - -0.0118692498654127 - 0.5405067205429077 - -0.2407158017158508 - <_> - - <_> - - - - <_> - 7 1 4 3 -1. - <_> - 8 1 2 3 2. - 0 - -4.4268160127103329e-003 - -0.7396550774574280 - 1 - <_> - - - - <_> - 12 8 6 4 -1. - <_> - 14 8 2 4 3. - 0 - 0.0414053983986378 - 2 - 0.8290563821792603 - <_> - - - - <_> - 13 1 7 15 -1. - <_> - 13 6 7 5 3. - 0 - -0.0378844104707241 - 0.1703073978424072 - -0.2449869960546494 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 18 1 1 2. - <_> - 18 19 1 1 2. - 0 - 3.7567419349215925e-004 - 1 - -0.4510369896888733 - <_> - - - - <_> - 3 6 4 10 -1. - <_> - 4 6 2 10 2. - 0 - -3.7140299100428820e-003 - 0.3834812939167023 - 2 - <_> - - - - <_> - 6 4 4 11 -1. - <_> - 7 4 2 11 2. - 0 - -6.1806719750165939e-003 - 0.3609752058982849 - -0.2064443975687027 - <_> - - <_> - - - - <_> - 7 18 4 1 -1. - <_> - 8 18 2 1 2. - 0 - -1.2373559875413775e-003 - -0.5816687941551209 - 1 - <_> - - - - <_> - 15 0 4 2 -1. - <_> - 15 0 4 1 2. - 1 - -2.1339580416679382e-003 - 0.4166969060897827 - 2 - <_> - - - - <_> - 8 0 10 3 -1. - <_> - 8 1 10 1 3. - 0 - 2.8985869139432907e-003 - -0.2472126036882401 - 0.3505684137344360 - <_> - - <_> - - - - <_> - 8 0 12 3 -1. - <_> - 12 1 4 1 9. - 0 - -4.4636861421167850e-003 - 1 - 2 - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 0 1 2 3. - 0 - 1.6411510296165943e-003 - 0.3562541007995606 - -0.4104009866714478 - <_> - - - - <_> - 16 10 4 6 -1. - <_> - 17 11 2 6 2. - 1 - -7.3051019571721554e-003 - 0.2021612972021103 - -0.3423452079296112 - -1.5415630340576172 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 4 5 6 -1. - <_> - 9 6 5 2 3. - 1 - -0.0519426092505455 - 1 - 2 - <_> - - - - <_> - 12 3 6 10 -1. - <_> - 14 5 2 10 3. - 1 - -0.0472685284912586 - 0.8819893002510071 - 0.0648292377591133 - <_> - - - - <_> - 9 7 5 3 -1. - <_> - 8 8 5 1 3. - 1 - -7.8969672322273254e-003 - 0.0886627584695816 - -0.5900781154632568 - <_> - - <_> - - - - <_> - 4 10 2 1 -1. - <_> - 5 10 1 1 2. - 0 - 9.0199249098077416e-004 - 1 - 0.5904089808464050 - <_> - - - - <_> - 4 2 16 16 -1. - <_> - 4 6 16 8 2. - 0 - -0.1728982031345367 - 2 - -0.5202903151512146 - <_> - - - - <_> - 15 8 4 6 -1. - <_> - 16 8 2 6 2. - 0 - -2.3374119773507118e-003 - 0.5298172831535339 - -0.1498585045337677 - <_> - - <_> - - - - <_> - 15 7 2 6 -1. - <_> - 15 7 1 6 2. - 1 - -0.0175349507480860 - 0.5326902866363525 - 1 - <_> - - - - <_> - 6 17 1 2 -1. - <_> - 6 18 1 1 2. - 0 - 5.8875310060102493e-005 - -0.4570972025394440 - 2 - <_> - - - - <_> - 7 4 12 12 -1. - <_> - 11 8 4 4 9. - 0 - -0.3224102854728699 - 0.5738016963005066 - -0.1286648064851761 - <_> - - <_> - - - - <_> - 18 16 1 2 -1. - <_> - 18 17 1 1 2. - 0 - 8.3220787928439677e-005 - 1 - 2 - <_> - - - - <_> - 17 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - -1.1180160072399303e-004 - 0.0900062099099159 - -0.5635238885879517 - <_> - - - - <_> - 6 4 3 6 -1. - <_> - 7 5 1 6 3. - 1 - -0.0103449802845716 - 0.6327341794967651 - 0.0500642694532871 - <_> - - <_> - - - - <_> - 4 10 4 1 -1. - <_> - 5 10 2 1 2. - 0 - -9.4440882094204426e-004 - 0.4438664019107819 - 1 - <_> - - - - <_> - 6 10 6 9 -1. - <_> - 8 10 2 9 3. - 0 - -3.7474210839718580e-003 - 2 - -0.3499991893768311 - <_> - - - - <_> - 1 8 2 12 -1. - <_> - 1 14 2 6 2. - 0 - 4.0574651211500168e-003 - -0.4529821872711182 - 0.3092019855976105 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 17 0 1 1 2. - 0 - 5.5205920943990350e-005 - 1 - 2 - <_> - - - - <_> - 8 2 7 9 -1. - <_> - 8 5 7 3 3. - 0 - -0.0756782889366150 - 0.3554409146308899 - -0.3604736030101776 - <_> - - - - <_> - 0 0 20 20 -1. - <_> - 0 0 10 10 2. - <_> - 10 10 10 10 2. - 0 - -0.3097536861896515 - -0.6495401859283447 - 0.3067927956581116 - <_> - - <_> - - - - <_> - 18 6 1 2 -1. - <_> - 18 7 1 1 2. - 0 - -7.9595847637392581e-005 - 1 - 2 - <_> - - - - <_> - 18 5 2 1 -1. - <_> - 18 5 1 1 2. - 1 - 4.0613119490444660e-003 - 0.3385047018527985 - -0.5327190160751343 - <_> - - - - <_> - 7 4 10 6 -1. - <_> - 7 6 10 2 3. - 0 - 0.0432408712804317 - -0.3259232938289642 - 0.5507627129554749 - <_> - - <_> - - - - <_> - 15 9 3 3 -1. - <_> - 16 10 1 3 3. - 1 - -6.7015928216278553e-003 - 0.5010917186737061 - 1 - <_> - - - - <_> - 17 18 3 2 -1. - <_> - 17 19 3 1 2. - 0 - -1.0451120324432850e-003 - -0.5888198018074036 - 2 - <_> - - - - <_> - 15 9 3 2 -1. - <_> - 16 10 1 2 3. - 1 - 8.3967261016368866e-003 - -0.0952375978231430 - 0.5651699900627136 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -6.5531006839592010e-005 - 2 - 1 - <_> - - - - <_> - 1 14 1 2 -1. - <_> - 1 15 1 1 2. - 0 - 7.8218057751655579e-005 - -0.4655671119689941 - 0.0545097813010216 - <_> - - - - <_> - 0 18 20 1 -1. - <_> - 10 18 10 1 2. - 0 - 0.0329881682991982 - 0.3524878919124603 - -0.5272294878959656 - <_> - - <_> - - - - <_> - 9 7 6 2 -1. - <_> - 9 7 6 1 2. - 1 - -0.0141614498570561 - 0.3681178092956543 - 1 - <_> - - - - <_> - 10 9 6 5 -1. - <_> - 12 9 2 5 3. - 0 - 0.0315004400908947 - 2 - 0.5204042196273804 - <_> - - - - <_> - 11 8 4 5 -1. - <_> - 12 8 2 5 2. - 0 - -2.1956730633974075e-003 - 0.1160352975130081 - -0.3098528087139130 - <_> - - <_> - - - - <_> - 18 0 2 18 -1. - <_> - 18 9 2 9 2. - 0 - -0.0400998890399933 - -0.4514637887477875 - 1 - <_> - - - - <_> - 3 15 9 3 -1. - <_> - 6 16 3 1 9. - 0 - -0.0325696393847466 - -0.6439204812049866 - 2 - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 15 17 1 1 3. - 1 - -4.2014168575406075e-003 - -0.8259450197219849 - 0.1925954073667526 - <_> - - <_> - - - - <_> - 2 16 9 4 -1. - <_> - 2 17 9 2 2. - 0 - 2.0385689567774534e-003 - 2 - 1 - <_> - - - - <_> - 0 18 5 2 -1. - <_> - 0 19 5 1 2. - 0 - -1.6212540213018656e-003 - -0.3772337138652802 - 0.3391883075237274 - <_> - - - - <_> - 17 7 2 3 -1. - <_> - 16 8 2 1 3. - 1 - -8.6220083758234978e-003 - 0.4898692071437836 - -0.2753207087516785 - <_> - - <_> - - - - <_> - 17 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - 9.2185800895094872e-005 - 1 - 0.2422374933958054 - <_> - - - - <_> - 16 18 2 1 -1. - <_> - 17 18 1 1 2. - 0 - -7.1932889113668352e-005 - 2 - -0.4218919873237610 - <_> - - - - <_> - 17 18 1 2 -1. - <_> - 17 19 1 1 2. - 0 - 4.4952900498174131e-004 - 0.2940784096717835 - -0.4402804970741272 - -1.4762729406356812 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 10 9 2 -1. - <_> - 9 10 3 2 3. - 0 - -0.0196384508162737 - 1 - 2 - <_> - - - - <_> - 2 8 18 12 -1. - <_> - 2 14 18 6 2. - 0 - 0.1136429980397224 - -0.3244445025920868 - 0.7460201978683472 - <_> - - - - <_> - 12 6 3 3 -1. - <_> - 11 7 3 1 3. - 1 - -0.0101121496409178 - 0.3333333134651184 - -0.5643565058708191 - <_> - - <_> - - - - <_> - 15 8 3 3 -1. - <_> - 16 9 1 3 3. - 1 - 0.0121308797970414 - 1 - 0.7221491932868958 - <_> - - - - <_> - 2 3 17 12 -1. - <_> - 2 6 17 6 2. - 0 - -0.1595885008573532 - 2 - -0.3927459120750427 - <_> - - - - <_> - 2 7 4 9 -1. - <_> - 3 7 2 9 2. - 0 - -2.3524949792772532e-003 - 0.5615249276161194 - -0.1376848071813583 - <_> - - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -4.1118920780718327e-003 - 0.6355608105659485 - 1 - <_> - - - - <_> - 1 6 12 9 -1. - <_> - 5 9 4 3 9. - 0 - -0.1783290058374405 - 0.3337314128875732 - 2 - <_> - - - - <_> - 8 2 1 8 -1. - <_> - 8 4 1 4 2. - 0 - -7.8500732779502869e-003 - 0.3953677117824554 - -0.3338043093681335 - <_> - - <_> - - - - <_> - 3 16 2 1 -1. - <_> - 4 16 1 1 2. - 0 - -4.6880490117473528e-005 - 2 - 1 - <_> - - - - <_> - 3 16 2 1 -1. - <_> - 4 16 1 1 2. - 0 - 5.2934719860786572e-005 - -0.6611827015876770 - -0.0482321903109550 - <_> - - - - <_> - 4 17 1 3 -1. - <_> - 4 18 1 1 3. - 0 - 2.0851430235779844e-005 - -0.0988383591175079 - 0.4452841877937317 - <_> - - <_> - - - - <_> - 6 17 9 3 -1. - <_> - 9 17 3 3 3. - 0 - -0.0184252895414829 - -0.6569089889526367 - 1 - <_> - - - - <_> - 14 8 3 4 -1. - <_> - 15 9 1 4 3. - 1 - -7.6133902184665203e-003 - 0.5341367721557617 - 2 - <_> - - - - <_> - 17 8 3 6 -1. - <_> - 18 9 1 6 3. - 1 - -6.0353721491992474e-003 - 0.3617104887962341 - -0.2047843039035797 - <_> - - <_> - - - - <_> - 16 17 1 3 -1. - <_> - 16 18 1 1 3. - 0 - 4.3712720071198419e-005 - 2 - 1 - <_> - - - - <_> - 14 18 3 2 -1. - <_> - 14 19 3 1 2. - 0 - -7.8823999501764774e-004 - -0.4532682895660400 - 0.3551769852638245 - <_> - - - - <_> - 6 8 3 3 -1. - <_> - 7 8 1 3 3. - 0 - -4.5693209394812584e-003 - 0.6172103285789490 - -0.2970770001411438 - <_> - - <_> - - - - <_> - 3 0 16 11 -1. - <_> - 7 0 8 11 2. - 0 - -0.0380585715174675 - 1 - 2 - <_> - - - - <_> - 1 0 18 20 -1. - <_> - 1 5 18 10 2. - 0 - -0.1179768964648247 - 0.3500399887561798 - -0.2725766897201538 - <_> - - - - <_> - 15 5 4 4 -1. - <_> - 15 5 2 2 2. - <_> - 17 7 2 2 2. - 0 - 4.6841651201248169e-003 - -0.3255917131900787 - 0.3773747086524963 - <_> - - <_> - - - - <_> - 15 10 2 1 -1. - <_> - 16 10 1 1 2. - 0 - -2.6372840511612594e-004 - 1 - 2 - <_> - - - - <_> - 7 18 6 2 -1. - <_> - 9 18 2 2 3. - 0 - 6.2580420635640621e-003 - 0.3742173910140991 - -0.5892670154571533 - <_> - - - - <_> - 15 10 2 1 -1. - <_> - 16 10 1 1 2. - 0 - 5.6767999922158197e-005 - -0.4885902106761932 - -0.0186237301677465 - <_> - - <_> - - - - <_> - 2 0 18 4 -1. - <_> - 2 1 18 2 2. - 0 - 9.2742107808589935e-003 - 1 - 0.3093354105949402 - <_> - - - - <_> - 5 0 9 4 -1. - <_> - 5 1 9 2 2. - 0 - -3.8514519110321999e-003 - 2 - -0.3451372981071472 - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -5.3287498303689063e-005 - 0.5234032869338989 - -0.0911594033241272 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - 9.8315975628793240e-004 - 1 - -0.5018535256385803 - <_> - - - - <_> - 18 0 2 2 -1. - <_> - 18 1 2 1 2. - 0 - 8.2858657697215676e-004 - 2 - -0.3052954971790314 - <_> - - - - <_> - 17 0 2 4 -1. - <_> - 17 0 1 4 2. - 1 - 0.0112297898158431 - 0.2621921002864838 - -0.4796982109546661 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 3 3 3 2 2. - 1 - -0.0103276399895549 - -0.5631508231163025 - 1 - <_> - - - - <_> - 0 4 6 11 -1. - <_> - 2 4 2 11 3. - 0 - -6.9197742268443108e-003 - 0.3122507035732269 - 2 - <_> - - - - <_> - 0 4 8 4 -1. - <_> - 0 4 4 2 2. - <_> - 4 6 4 2 2. - 0 - -5.0027170218527317e-003 - 0.1782077997922897 - -0.3009114861488342 - <_> - - <_> - - - - <_> - 4 3 1 2 -1. - <_> - 4 4 1 1 2. - 0 - -1.1156810069223866e-004 - 0.1888367980718613 - 1 - <_> - - - - <_> - 0 1 6 4 -1. - <_> - 0 1 3 2 2. - <_> - 3 3 3 2 2. - 0 - 4.2464961297810078e-003 - -0.4010157883167267 - 2 - <_> - - - - <_> - 3 5 4 2 -1. - <_> - 3 5 2 1 2. - <_> - 5 6 2 1 2. - 0 - -4.7280951548600569e-005 - 0.4650590121746063 - -0.2986364066600800 - <_> - - <_> - - - - <_> - 4 9 4 1 -1. - <_> - 5 9 2 1 2. - 0 - -1.8891280051320791e-003 - 0.5696374773979187 - 1 - <_> - - - - <_> - 8 15 2 2 -1. - <_> - 8 15 1 1 2. - <_> - 9 16 1 1 2. - 0 - -5.8536308642942458e-005 - 0.1800824999809265 - 2 - <_> - - - - <_> - 8 15 2 2 -1. - <_> - 8 15 1 1 2. - <_> - 9 16 1 1 2. - 0 - 2.0671950551331975e-005 - -0.5865960121154785 - -5.4875258356332779e-003 - <_> - - <_> - - - - <_> - 2 18 5 2 -1. - <_> - 2 19 5 1 2. - 0 - -1.1267509544268250e-003 - -0.4026159942150116 - 1 - <_> - - - - <_> - 4 12 10 8 -1. - <_> - 4 14 10 4 2. - 0 - 0.0213784407824278 - 2 - 0.3923035860061646 - <_> - - - - <_> - 9 7 5 3 -1. - <_> - 8 8 5 1 3. - 1 - -0.0125460401177406 - 0.4947456121444702 - -0.1732252985239029 - <_> - - <_> - - - - <_> - 2 18 6 2 -1. - <_> - 2 18 3 1 2. - <_> - 5 19 3 1 2. - 0 - -7.2257901774719357e-004 - -0.3038032948970795 - 1 - <_> - - - - <_> - 6 16 12 4 -1. - <_> - 6 17 12 2 2. - 0 - 6.4563672058284283e-003 - 2 - 0.4717349112033844 - <_> - - - - <_> - 10 9 1 4 -1. - <_> - 10 11 1 2 2. - 0 - 4.9086650833487511e-003 - -0.1638054996728897 - 0.3770849108695984 - -1.4963719844818115 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 9 12 3 -1. - <_> - 9 10 4 1 9. - 0 - -0.0726175606250763 - 2 - 1 - <_> - - - - <_> - 9 7 3 3 -1. - <_> - 10 8 1 1 9. - 0 - -6.9059380330145359e-003 - 0.2660279870033264 - -0.4932517111301422 - <_> - - - - <_> - 1 6 19 14 -1. - <_> - 1 13 19 7 2. - 0 - 0.2172794938087463 - -0.1076923012733460 - 0.8266112208366394 - <_> - - <_> - - - - <_> - 15 9 4 2 -1. - <_> - 16 9 2 2 2. - 0 - -2.0319509785622358e-003 - 1 - 2 - <_> - - - - <_> - 8 9 3 8 -1. - <_> - 8 13 3 4 2. - 0 - 0.0289315897971392 - -0.0379631407558918 - 0.8023043870925903 - <_> - - - - <_> - 6 8 4 3 -1. - <_> - 7 8 2 3 2. - 0 - -4.6076569706201553e-003 - 0.4246839880943298 - -0.2937937974929810 - <_> - - <_> - - - - <_> - 5 1 8 4 -1. - <_> - 5 2 8 2 2. - 0 - 6.9408868439495564e-003 - 1 - 2 - <_> - - - - <_> - 8 1 3 4 -1. - <_> - 8 2 3 2 2. - 0 - -5.9231962077319622e-003 - 0.4173704981803894 - -0.2555258870124817 - <_> - - - - <_> - 2 10 18 10 -1. - <_> - 2 15 18 5 2. - 0 - 0.0511281602084637 - -0.3861986100673676 - 0.4707686007022858 - <_> - - <_> - - - - <_> - 8 8 5 3 -1. - <_> - 7 9 5 1 3. - 1 - 0.0152013301849365 - 1 - 0.5435479879379273 - <_> - - - - <_> - 7 9 7 2 -1. - <_> - 7 9 7 1 2. - 1 - -0.0180963408201933 - 0.2665114104747772 - 2 - <_> - - - - <_> - 5 17 1 3 -1. - <_> - 5 18 1 1 3. - 0 - 7.9378951340913773e-005 - -0.4392774999141693 - 2.5831260718405247e-003 - <_> - - <_> - - - - <_> - 7 18 13 2 -1. - <_> - 7 19 13 1 2. - 0 - -5.3462558425962925e-003 - -0.6630896925926209 - 1 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 2 1 2. - 1 - -6.9701080210506916e-003 - -0.7031068205833435 - 2 - <_> - - - - <_> - 3 14 1 2 -1. - <_> - 3 15 1 1 2. - 0 - 8.4738981968257576e-005 - -0.1788080930709839 - 0.2599329948425293 - <_> - - <_> - - - - <_> - 12 9 3 4 -1. - <_> - 13 9 1 4 3. - 0 - -2.8513800352811813e-003 - 0.4505367875099182 - 1 - <_> - - - - <_> - 12 9 3 2 -1. - <_> - 13 9 1 2 3. - 0 - 2.2954840678721666e-003 - 2 - 0.3056051135063171 - <_> - - - - <_> - 7 9 2 3 -1. - <_> - 6 10 2 1 3. - 1 - -3.5036220215260983e-003 - 0.1504087001085281 - -0.3328307867050171 - <_> - - <_> - - - - <_> - 10 3 9 12 -1. - <_> - 10 7 9 4 3. - 0 - -0.0695702284574509 - 1 - 2 - <_> - - - - <_> - 15 5 2 1 -1. - <_> - 16 5 1 1 2. - 0 - 5.9261121350573376e-005 - -0.0368997193872929 - 0.4092730879783630 - <_> - - - - <_> - 1 0 15 9 -1. - <_> - 1 3 15 3 3. - 0 - -0.0590583495795727 - 0.1382637023925781 - -0.3821440935134888 - <_> - - <_> - - - - <_> - 3 15 2 3 -1. - <_> - 3 15 1 3 2. - 1 - -8.9645627886056900e-003 - -0.5813472867012024 - 1 - <_> - - - - <_> - 2 16 1 2 -1. - <_> - 2 17 1 1 2. - 0 - 4.9211819714400917e-005 - -0.1848174035549164 - 2 - <_> - - - - <_> - 12 1 8 4 -1. - <_> - 11 2 8 2 2. - 1 - 9.9640293046832085e-003 - 0.0876854732632637 - 0.5850980281829834 - <_> - - <_> - - - - <_> - 6 5 3 6 -1. - <_> - 7 6 1 6 3. - 1 - -0.0193026997148991 - 0.5326346158981323 - 1 - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -4.3869198998436332e-004 - 0.2889113128185272 - 2 - <_> - - - - <_> - 17 7 3 1 -1. - <_> - 18 7 1 1 3. - 0 - 6.5669846662785858e-005 - -0.3349359929561615 - 0.0595667511224747 - <_> - - <_> - - - - <_> - 12 0 6 5 -1. - <_> - 14 0 2 5 3. - 0 - -0.0202245190739632 - -0.6553608179092407 - 1 - <_> - - - - <_> - 17 0 2 1 -1. - <_> - 18 0 1 1 2. - 0 - 8.7082196841947734e-005 - -0.1221178993582726 - 2 - <_> - - - - <_> - 10 1 6 5 -1. - <_> - 12 1 2 5 3. - 0 - -0.0162027198821306 - -0.4707683920860291 - 0.3099077045917511 - <_> - - <_> - - - - <_> - 17 14 3 2 -1. - <_> - 17 14 3 1 2. - 1 - 4.4353529810905457e-003 - 1 - -0.5403993129730225 - <_> - - - - <_> - 5 10 4 1 -1. - <_> - 6 10 2 1 2. - 0 - -9.0544822160154581e-004 - 0.4287880063056946 - 2 - <_> - - - - <_> - 3 8 3 6 -1. - <_> - 4 8 1 6 3. - 0 - -1.4297979651018977e-003 - 0.2232273966073990 - -0.1819442063570023 - <_> - - <_> - - - - <_> - 8 16 5 4 -1. - <_> - 8 17 5 2 2. - 0 - 3.2359519973397255e-003 - 1 - 2 - <_> - - - - <_> - 14 15 2 2 -1. - <_> - 14 15 1 1 2. - <_> - 15 16 1 1 2. - 0 - 1.0716189717641100e-004 - -0.2921822071075440 - 0.1391046047210693 - <_> - - - - <_> - 4 18 1 2 -1. - <_> - 4 19 1 1 2. - 0 - -5.8802281273528934e-004 - -0.4692608118057251 - 0.3808549940586090 - <_> - - <_> - - - - <_> - 8 15 2 3 -1. - <_> - 8 15 1 3 2. - 1 - -9.0546347200870514e-003 - -0.5042654275894165 - 1 - <_> - - - - <_> - 19 0 1 20 -1. - <_> - 19 10 1 10 2. - 0 - -8.6048766970634460e-003 - -0.2755903005599976 - 2 - <_> - - - - <_> - 7 9 8 1 -1. - <_> - 9 9 4 1 2. - 0 - -1.2719300575554371e-003 - 0.3602210879325867 - -0.0264849700033665 - <_> - - <_> - - - - <_> - 14 10 3 1 -1. - <_> - 15 10 1 1 3. - 0 - -3.9098240085877478e-004 - 0.2665173113346100 - 1 - <_> - - - - <_> - 15 11 2 1 -1. - <_> - 16 11 1 1 2. - 0 - -3.6405251012183726e-004 - 0.1472164988517761 - 2 - <_> - - - - <_> - 18 11 2 8 -1. - <_> - 18 11 1 4 2. - <_> - 19 15 1 4 2. - 0 - -6.6685711499303579e-004 - -0.4971973896026611 - -0.0615798495709896 - <_> - - <_> - - - - <_> - 6 1 8 4 -1. - <_> - 8 1 4 4 2. - 0 - -0.0248455703258514 - -0.7082098126411438 - 1 - <_> - - - - <_> - 6 0 5 4 -1. - <_> - 5 1 5 2 2. - 1 - -0.0154363997280598 - -0.4720689058303833 - 2 - <_> - - - - <_> - 6 5 12 15 -1. - <_> - 10 10 4 5 9. - 0 - -0.5657231211662293 - 0.6396523118019104 - 0.0520693287253380 - <_> - - <_> - - - - <_> - 7 2 8 9 -1. - <_> - 7 5 8 3 3. - 0 - -0.0574801415205002 - 0.2929739058017731 - 1 - <_> - - - - <_> - 2 1 10 3 -1. - <_> - 2 2 10 1 3. - 0 - -0.0146138202399015 - 0.6012967228889465 - 2 - <_> - - - - <_> - 2 5 15 12 -1. - <_> - 7 9 5 4 9. - 0 - -0.3399373888969421 - 0.0190412998199463 - -0.3325459957122803 - <_> - - <_> - - - - <_> - 7 8 3 6 -1. - <_> - 8 8 1 6 3. - 0 - -3.1427140347659588e-003 - 2 - 1 - <_> - - - - <_> - 7 6 3 7 -1. - <_> - 8 6 1 7 3. - 0 - 2.1966299973428249e-003 - -0.2297272980213165 - 0.2236734032630920 - <_> - - - - <_> - 4 16 9 4 -1. - <_> - 7 16 3 4 3. - 0 - -0.0248585902154446 - -0.5621296763420105 - 0.3954285979270935 - <_> - - <_> - - - - <_> - 15 18 5 2 -1. - <_> - 15 19 5 1 2. - 0 - -1.6135630430653691e-003 - -0.4825679063796997 - 1 - <_> - - - - <_> - 15 16 1 4 -1. - <_> - 15 17 1 2 2. - 0 - 1.1416019697207958e-004 - 2 - 0.2687731981277466 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - 1.3170539750717580e-004 - -0.3907892107963562 - 0.1715344041585922 - <_> - - <_> - - - - <_> - 6 15 2 2 -1. - <_> - 6 15 1 1 2. - <_> - 7 16 1 1 2. - 0 - -8.5256207967177033e-005 - 0.2175457030534744 - 1 - <_> - - - - <_> - 6 15 2 2 -1. - <_> - 6 15 1 1 2. - <_> - 7 16 1 1 2. - 0 - 6.4925159676931798e-005 - -0.4746862053871155 - 2 - <_> - - - - <_> - 8 16 8 3 -1. - <_> - 10 16 4 3 2. - 0 - -0.0126896398141980 - -0.6653857827186585 - 0.1234709024429321 - -1.5243699550628662 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 9 10 4 1 3. - 0 - -0.0298446398228407 - 2 - 1 - <_> - - - - <_> - 6 2 9 15 -1. - <_> - 9 7 3 5 9. - 0 - -0.4548766016960144 - 0.3922204077243805 - -0.3931488096714020 - <_> - - - - <_> - 17 6 1 14 -1. - <_> - 17 13 1 7 2. - 0 - 2.7445149607956409e-003 - -0.1592357009649277 - 0.8269670009613037 - <_> - - <_> - - - - <_> - 9 7 3 3 -1. - <_> - 8 8 3 1 3. - 1 - -0.0105846701189876 - 2 - 1 - <_> - - - - <_> - 16 5 4 3 -1. - <_> - 15 6 4 1 3. - 1 - -0.0163083802908659 - 0.4595468938350678 - -0.2162012010812759 - <_> - - - - <_> - 13 7 4 9 -1. - <_> - 13 7 2 9 2. - 1 - -0.0487874411046505 - 0.7510365247726440 - 0.0745579674839973 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 3 10 2 1 2. - 1 - -2.9621229041367769e-003 - 1 - -0.2445227056741715 - <_> - - - - <_> - 0 4 3 15 -1. - <_> - 0 9 3 5 3. - 0 - 0.0173005294054747 - 2 - -0.3309040963649750 - <_> - - - - <_> - 7 8 9 6 -1. - <_> - 10 8 3 6 3. - 0 - -0.0167311690747738 - 0.5375185012817383 - 0.0291538201272488 - <_> - - <_> - - - - <_> - 5 17 9 2 -1. - <_> - 8 17 3 2 3. - 0 - 0.0123261800035834 - 1 - -0.5482481122016907 - <_> - - - - <_> - 7 2 6 18 -1. - <_> - 7 11 6 9 2. - 0 - 0.0549282990396023 - -0.2195277065038681 - 2 - <_> - - - - <_> - 15 9 2 10 -1. - <_> - 15 9 1 5 2. - <_> - 16 14 1 5 2. - 0 - 2.7763319667428732e-003 - 0.0364636890590191 - 0.5063378214836121 - <_> - - <_> - - - - <_> - 12 7 6 4 -1. - <_> - 14 9 2 4 3. - 1 - -0.0451169982552528 - 0.4233931005001068 - 1 - <_> - - - - <_> - 13 8 3 2 -1. - <_> - 14 9 1 2 3. - 1 - 0.0112079400569201 - 2 - 0.3998400866985321 - <_> - - - - <_> - 17 4 3 2 -1. - <_> - 18 5 1 2 3. - 1 - -5.7006389833986759e-003 - -0.5972918272018433 - -0.0985576510429382 - <_> - - <_> - - - - <_> - 10 5 8 2 -1. - <_> - 10 6 8 1 2. - 0 - -5.3951311856508255e-003 - 1 - 2 - <_> - - - - <_> - 18 4 2 2 -1. - <_> - 18 4 1 2 2. - 1 - 7.8587066382169724e-003 - 0.3473469018936157 - -0.4728192090988159 - <_> - - - - <_> - 7 4 7 4 -1. - <_> - 7 5 7 2 2. - 0 - 0.0106666395440698 - -0.2331566959619522 - 0.2436001002788544 - <_> - - <_> - - - - <_> - 1 15 6 4 -1. - <_> - 1 17 6 2 2. - 0 - 2.8001810424029827e-003 - 2 - 1 - <_> - - - - <_> - 0 13 2 6 -1. - <_> - 0 15 2 2 3. - 0 - -7.9198479652404785e-003 - -0.4835455119609833 - 0.1832112073898315 - <_> - - - - <_> - 10 13 4 2 -1. - <_> - 10 13 4 1 2. - 1 - -2.3832279257476330e-003 - 0.0321684814989567 - -0.5047625899314880 - <_> - - <_> - - - - <_> - 16 14 2 4 -1. - <_> - 15 15 2 2 2. - 1 - -9.7674019634723663e-003 - -0.7441521286964417 - 1 - <_> - - - - <_> - 7 4 3 4 -1. - <_> - 8 5 1 4 3. - 1 - -0.0138972597196698 - 0.4542512893676758 - 2 - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - -6.4803068526089191e-003 - 0.4829286932945252 - -0.1025857031345367 - <_> - - <_> - - - - <_> - 4 1 2 4 -1. - <_> - 3 2 2 2 2. - 1 - 9.4482619315385818e-003 - 1 - -0.5332602262496948 - <_> - - - - <_> - 2 1 2 3 -1. - <_> - 3 1 1 3 2. - 0 - -7.0351187605410814e-004 - 0.2943583130836487 - 2 - <_> - - - - <_> - 1 2 8 4 -1. - <_> - 1 2 4 2 2. - <_> - 5 4 4 2 2. - 0 - -4.2770579457283020e-003 - 0.1550199985504150 - -0.3086796998977661 - <_> - - <_> - - - - <_> - 6 0 4 4 -1. - <_> - 7 0 2 4 2. - 0 - 5.8752358891069889e-003 - 1 - -0.6049131751060486 - <_> - - - - <_> - 6 4 3 5 -1. - <_> - 7 5 1 5 3. - 1 - 9.5629561692476273e-003 - 2 - 0.4403988122940064 - <_> - - - - <_> - 3 5 1 2 -1. - <_> - 3 6 1 1 2. - 0 - -6.8425266363192350e-005 - 0.1020627021789551 - -0.2562403082847595 - <_> - - <_> - - - - <_> - 6 8 3 3 -1. - <_> - 7 8 1 3 3. - 0 - 5.4002371616661549e-003 - 1 - 0.4537158012390137 - <_> - - - - <_> - 5 16 3 1 -1. - <_> - 6 17 1 1 3. - 1 - 2.9745819047093391e-003 - 2 - -0.6096798777580261 - <_> - - - - <_> - 6 9 4 4 -1. - <_> - 7 9 2 4 2. - 0 - -2.5536341127008200e-003 - 0.2211160957813263 - -0.1280117034912109 - <_> - - <_> - - - - <_> - 9 11 9 2 -1. - <_> - 9 12 9 1 2. - 0 - 4.0425839833915234e-003 - -0.1926402002573013 - 1 - <_> - - - - <_> - 5 2 7 2 -1. - <_> - 5 3 7 1 2. - 0 - 7.6407291926443577e-003 - 2 - 0.6117882132530212 - <_> - - - - <_> - 12 18 8 2 -1. - <_> - 12 19 8 1 2. - 0 - -1.0939979692921042e-003 - -0.3797368109226227 - 0.1643894016742706 - <_> - - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 2 1 2 2. - 0 - -1.1377089685993269e-004 - 1 - 2 - <_> - - - - <_> - 14 1 6 2 -1. - <_> - 17 1 3 2 2. - 0 - 5.2979402244091034e-003 - -0.0277704801410437 - 0.4301962852478027 - <_> - - - - <_> - 14 2 6 4 -1. - <_> - 14 2 3 2 2. - <_> - 17 4 3 2 2. - 0 - 2.9510098975151777e-003 - -0.3791233897209168 - 0.1013085022568703 - <_> - - <_> - - - - <_> - 7 7 3 6 -1. - <_> - 8 7 1 6 3. - 0 - 6.3235480338335037e-003 - 1 - 0.4041346013545990 - <_> - - - - <_> - 11 6 5 4 -1. - <_> - 11 7 5 2 2. - 0 - 3.9955950342118740e-003 - -0.1509774029254913 - 2 - <_> - - - - <_> - 17 7 3 3 -1. - <_> - 18 7 1 3 3. - 0 - -5.3595582721754909e-004 - 0.5952280163764954 - -0.0343801714479923 - <_> - - <_> - - - - <_> - 15 16 1 2 -1. - <_> - 15 16 1 1 2. - 1 - 3.6193430423736572e-003 - 1 - -0.7445452213287354 - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 1 4 2 2. - 0 - 3.4626820124685764e-003 - 2 - 0.2850461006164551 - <_> - - - - <_> - 6 1 8 8 -1. - <_> - 6 3 8 4 2. - 0 - 0.0290308594703674 - -0.1856544017791748 - 0.1582998931407929 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 6.0747697716578841e-004 - 1 - -0.3378897011280060 - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - 9.4140451401472092e-003 - 2 - -0.3675057888031006 - <_> - - - - <_> - 10 0 6 5 -1. - <_> - 12 0 2 5 3. - 0 - -0.0222306102514267 - -0.6420571804046631 - 0.1752641052007675 - <_> - - <_> - - - - <_> - 7 7 4 7 -1. - <_> - 8 7 2 7 2. - 0 - -4.6881791204214096e-003 - 2 - 1 - <_> - - - - <_> - 9 3 2 8 -1. - <_> - 10 3 1 8 2. - 0 - -3.9184167981147766e-003 - 0.1647686958312988 - -0.2272956073284149 - <_> - - - - <_> - 6 1 4 4 -1. - <_> - 7 2 2 4 2. - 1 - -6.3269808888435364e-003 - 0.5738862752914429 - 0.0579312816262245 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -3.7428940413519740e-004 - -0.3528814017772675 - 1 - <_> - - - - <_> - 17 2 3 1 -1. - <_> - 18 3 1 1 3. - 1 - 2.8672320768237114e-003 - 2 - -0.4141938984394074 - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 2.4337199283763766e-004 - 0.2002764046192169 - -0.2826314866542816 - <_> - - <_> - - - - <_> - 17 13 3 4 -1. - <_> - 16 14 3 2 2. - 1 - -9.1555183753371239e-003 - -0.5450873970985413 - 1 - <_> - - - - <_> - 3 10 4 3 -1. - <_> - 4 10 2 3 2. - 0 - -1.2892490485683084e-003 - 0.2532123923301697 - 2 - <_> - - - - <_> - 0 8 4 5 -1. - <_> - 1 8 2 5 2. - 0 - -1.6453899443149567e-003 - 0.1763567030429840 - -0.2305361926555634 - <_> - - <_> - - - - <_> - 4 8 14 12 -1. - <_> - 4 14 14 6 2. - 0 - -0.0764855369925499 - -0.7048028707504273 - 1 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 17 16 1 2 2. - 0 - 3.8297360879369080e-004 - 2 - 0.2237505018711090 - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 17 18 2 2 2. - 0 - -2.6448920834809542e-004 - 0.1425154060125351 - -0.2460895031690598 - <_> - - <_> - - - - <_> - 17 1 3 4 -1. - <_> - 18 2 1 4 3. - 1 - -7.9496540129184723e-003 - -0.4212369918823242 - 1 - <_> - - - - <_> - 3 0 4 7 -1. - <_> - 4 0 2 7 2. - 0 - -7.7398279681801796e-003 - -0.4647572934627533 - 2 - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 8 1 2 3 3. - 0 - -0.0104679800570011 - -0.4731298089027405 - 0.1359892934560776 - <_> - - <_> - - - - <_> - 12 8 4 4 -1. - <_> - 13 8 2 4 2. - 0 - 9.4248689711093903e-003 - 1 - 0.3558753132820129 - <_> - - - - <_> - 6 1 5 2 -1. - <_> - 6 2 5 1 2. - 0 - -3.7210211157798767e-003 - 2 - -0.1589923948049545 - <_> - - - - <_> - 1 7 5 12 -1. - <_> - 1 13 5 6 2. - 0 - -0.0165391005575657 - -0.6114267110824585 - 0.3377831876277924 - <_> - - <_> - - - - <_> - 8 17 6 3 -1. - <_> - 10 18 2 1 9. - 0 - 0.0182581394910812 - 1 - -0.7012097239494324 - <_> - - - - <_> - 12 4 3 12 -1. - <_> - 13 4 1 12 3. - 0 - -6.1498139984905720e-003 - 0.3841418921947479 - 2 - <_> - - - - <_> - 3 11 8 1 -1. - <_> - 5 13 4 1 2. - 1 - 0.0143966302275658 - 0.0228735599666834 - -0.4802901148796082 - <_> - - <_> - - - - <_> - 7 2 9 6 -1. - <_> - 5 4 9 2 3. - 1 - -0.0489275082945824 - 1 - -0.1221953034400940 - <_> - - - - <_> - 14 1 1 2 -1. - <_> - 14 1 1 1 2. - 1 - -4.9874751130118966e-004 - 0.4489968121051788 - 2 - <_> - - - - <_> - 0 1 16 1 -1. - <_> - 8 1 8 1 2. - 0 - -0.0123383998870850 - 0.5830662250518799 - -0.1559246033430100 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 9 8 1 2 3. - 0 - 4.9237860366702080e-003 - 1 - 0.5788943767547607 - <_> - - - - <_> - 0 14 1 2 -1. - <_> - 0 15 1 1 2. - 0 - 6.4515617850702256e-005 - -0.2225205004215241 - 2 - <_> - - - - <_> - 11 5 3 8 -1. - <_> - 11 7 3 4 2. - 0 - -9.0754460543394089e-003 - 0.2511818110942841 - -0.1191598027944565 - <_> - - <_> - - - - <_> - 7 9 3 3 -1. - <_> - 6 10 3 1 3. - 1 - -2.2913129068911076e-003 - 0.2020304948091507 - 1 - <_> - - - - <_> - 0 5 6 11 -1. - <_> - 2 5 2 11 3. - 0 - -0.0116182295605540 - 2 - -0.2499044984579086 - <_> - - - - <_> - 1 0 4 14 -1. - <_> - 2 0 2 14 2. - 0 - -0.0262312907725573 - -0.7285898923873901 - 0.2248336970806122 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - 2.1525719785131514e-004 - 1 - -0.3023762106895447 - <_> - - - - <_> - 16 0 3 3 -1. - <_> - 17 1 1 3 3. - 1 - 5.4147760383784771e-003 - 2 - -0.3446780145168304 - <_> - - - - <_> - 19 5 1 4 -1. - <_> - 19 7 1 2 2. - 0 - -6.8281739950180054e-003 - -0.5147011876106262 - 0.1876202970743179 - -1.3592849969863892 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 10 6 1 -1. - <_> - 5 10 2 1 3. - 0 - 8.8577903807163239e-003 - 1 - 2 - <_> - - - - <_> - 6 10 3 1 -1. - <_> - 7 10 1 1 3. - 0 - 2.2660400718450546e-003 - -0.3619781136512756 - 0.3453562855720520 - <_> - - - - <_> - 8 7 2 10 -1. - <_> - 8 12 2 5 2. - 0 - 0.0155092002823949 - -0.2281450033187866 - 0.8052160143852234 - <_> - - <_> - - - - <_> - 12 9 6 2 -1. - <_> - 14 9 2 2 3. - 0 - 0.0197306293994188 - 1 - 2 - <_> - - - - <_> - 18 3 1 12 -1. - <_> - 14 7 1 4 3. - 1 - -0.0528041310608387 - 0.2216223031282425 - -0.2630726099014282 - <_> - - - - <_> - 13 3 2 8 -1. - <_> - 11 5 2 4 2. - 1 - -0.0341235511004925 - 0.8768774271011353 - 0.1514794975519180 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - -4.4995918869972229e-003 - -0.5152047872543335 - 1 - <_> - - - - <_> - 0 3 6 4 -1. - <_> - 0 3 3 2 2. - <_> - 3 5 3 2 2. - 0 - -3.8060150109231472e-003 - 0.3156319856643677 - 2 - <_> - - - - <_> - 3 2 2 1 -1. - <_> - 4 2 1 1 2. - 0 - -6.5935899328906089e-005 - 0.1105265021324158 - -0.3001616001129150 - <_> - - <_> - - - - <_> - 12 8 3 5 -1. - <_> - 13 8 1 5 3. - 0 - 9.5838904380798340e-003 - 1 - 0.5280817747116089 - <_> - - - - <_> - 15 15 2 3 -1. - <_> - 14 16 2 1 3. - 1 - 4.2877299711108208e-003 - 2 - -0.6369404196739197 - <_> - - - - <_> - 0 18 3 2 -1. - <_> - 0 19 3 1 2. - 0 - 3.2141651026904583e-003 - 0.0359101705253124 - -0.5433439016342163 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -7.9250690760090947e-004 - -0.4786733984947205 - 1 - <_> - - - - <_> - 5 6 2 2 -1. - <_> - 5 7 2 1 2. - 0 - -1.5514569822698832e-003 - 2 - -0.0914622768759727 - <_> - - - - <_> - 2 7 16 2 -1. - <_> - 6 7 8 2 2. - 0 - -0.0177905503660440 - 0.4561277925968170 - 0.0106282597407699 - <_> - - <_> - - - - <_> - 16 8 4 7 -1. - <_> - 17 8 2 7 2. - 0 - -2.5881261099129915e-003 - 2 - 1 - <_> - - - - <_> - 14 9 4 5 -1. - <_> - 15 9 2 5 2. - 0 - -2.7412150520831347e-003 - 0.1619894951581955 - -0.2911323904991150 - <_> - - - - <_> - 0 6 3 14 -1. - <_> - 0 13 3 7 2. - 0 - 4.4753181282430887e-004 - -0.2848221957683563 - 0.3390209078788757 - <_> - - <_> - - - - <_> - 17 3 3 1 -1. - <_> - 18 4 1 1 3. - 1 - -3.6593680270016193e-003 - -0.5108960270881653 - 1 - <_> - - - - <_> - 18 5 2 1 -1. - <_> - 18 5 1 1 2. - 1 - 2.4432500358670950e-003 - 2 - -0.3215484917163849 - <_> - - - - <_> - 18 0 2 18 -1. - <_> - 18 6 2 6 3. - 0 - -0.0135464100167155 - 0.2735697925090790 - -0.1206268966197968 - <_> - - <_> - - - - <_> - 4 0 13 12 -1. - <_> - 4 3 13 6 2. - 0 - 0.1124157011508942 - 1 - 0.3650527894496918 - <_> - - - - <_> - 12 9 4 2 -1. - <_> - 13 9 2 2 2. - 0 - -4.5845299027860165e-003 - 0.4477399885654450 - 2 - <_> - - - - <_> - 4 2 3 3 -1. - <_> - 3 3 3 1 3. - 1 - 6.3416222110390663e-003 - -0.0975437536835670 - -0.6169824004173279 - <_> - - <_> - - - - <_> - 8 10 6 3 -1. - <_> - 10 10 2 3 3. - 0 - -9.1398190706968307e-003 - 2 - 1 - <_> - - - - <_> - 11 5 4 6 -1. - <_> - 11 5 2 6 2. - 1 - -0.0823714733123779 - 0.6147822737693787 - -0.1761246025562286 - <_> - - - - <_> - 10 2 4 2 -1. - <_> - 11 2 2 2 2. - 0 - 3.1728888861835003e-003 - 0.2746239900588989 - -0.5383396148681641 - <_> - - <_> - - - - <_> - 4 16 2 4 -1. - <_> - 4 18 2 2 2. - 0 - 8.2914117956534028e-004 - 2 - 1 - <_> - - - - <_> - 5 18 8 2 -1. - <_> - 9 18 4 2 2. - 0 - -0.0170792303979397 - -0.4366978108882904 - 0.1793588995933533 - <_> - - - - <_> - 19 9 1 8 -1. - <_> - 19 9 1 4 2. - 1 - -4.8665981739759445e-003 - -0.0620177090167999 - -0.5914124846458435 - <_> - - <_> - - - - <_> - 0 15 5 3 -1. - <_> - 0 16 5 1 3. - 0 - -3.3614661078900099e-003 - -0.4343728125095367 - 1 - <_> - - - - <_> - 19 4 1 15 -1. - <_> - 19 9 1 5 3. - 0 - -0.0444822013378143 - -0.6815791726112366 - 2 - <_> - - - - <_> - 7 19 4 1 -1. - <_> - 8 19 2 1 2. - 0 - -1.8765870481729507e-003 - -0.6866797208786011 - 0.1165793016552925 - <_> - - <_> - - - - <_> - 6 2 12 4 -1. - <_> - 6 3 12 2 2. - 0 - 0.0231923200190067 - 1 - 0.4077670872211456 - <_> - - - - <_> - 4 1 11 6 -1. - <_> - 4 3 11 2 3. - 0 - -0.0450414307415485 - 0.3713751137256622 - 2 - <_> - - - - <_> - 0 14 2 4 -1. - <_> - 0 15 2 2 2. - 0 - 2.3778830654919147e-003 - -0.0711813867092133 - -0.5389872789382935 - <_> - - <_> - - - - <_> - 1 9 4 5 -1. - <_> - 2 9 2 5 2. - 0 - -1.3468379620462656e-003 - 1 - 2 - <_> - - - - <_> - 4 5 2 4 -1. - <_> - 3 6 2 2 2. - 1 - 4.3169260025024414e-003 - 0.2318418025970459 - -0.3844893872737885 - <_> - - - - <_> - 1 17 6 3 -1. - <_> - 3 18 2 1 9. - 0 - 4.5682261697947979e-003 - -0.2485719025135040 - 0.1251966953277588 - <_> - - <_> - - - - <_> - 11 0 6 6 -1. - <_> - 13 0 2 6 3. - 0 - 0.0110577996820211 - 1 - -0.3822847008705139 - <_> - - - - <_> - 17 18 3 2 -1. - <_> - 17 19 3 1 2. - 0 - -6.6700251772999763e-004 - -0.2738777995109558 - 2 - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 4.8536141548538581e-005 - -0.0296645890921354 - 0.2838588953018189 - <_> - - <_> - - - - <_> - 3 7 15 3 -1. - <_> - 8 8 5 1 9. - 0 - -0.0399723909795284 - 2 - 1 - <_> - - - - <_> - 10 8 3 3 -1. - <_> - 11 9 1 1 9. - 0 - -0.0168807804584503 - 0.6357060074806213 - -0.1918942034244537 - <_> - - - - <_> - 0 10 6 8 -1. - <_> - 0 12 6 4 2. - 0 - -0.0560820512473583 - -0.9009236097335815 - 0.1914550960063934 - <_> - - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 10 8 1 3 3. - 0 - 3.4141261130571365e-003 - 1 - 0.4213257133960724 - <_> - - - - <_> - 10 7 3 8 -1. - <_> - 11 7 1 8 3. - 0 - 9.1075859963893890e-003 - 2 - 0.5507156252861023 - <_> - - - - <_> - 12 4 4 1 -1. - <_> - 13 4 2 1 2. - 0 - -1.3897320022806525e-003 - -0.5044754147529602 - -0.0408022701740265 - <_> - - <_> - - - - <_> - 2 1 11 4 -1. - <_> - 2 2 11 2 2. - 0 - 0.0172317195683718 - 2 - 1 - <_> - - - - <_> - 0 3 3 4 -1. - <_> - 0 4 3 2 2. - 0 - -2.0052720792591572e-003 - -0.3156726956367493 - 0.5516824722290039 - <_> - - - - <_> - 17 0 3 2 -1. - <_> - 17 1 3 1 2. - 0 - 3.5111181205138564e-004 - 0.0567363388836384 - -0.2655394971370697 - <_> - - <_> - - - - <_> - 19 14 1 4 -1. - <_> - 19 15 1 2 2. - 0 - -2.0616729743778706e-003 - -0.4963766038417816 - 1 - <_> - - - - <_> - 1 16 2 4 -1. - <_> - 2 16 1 4 2. - 0 - -1.0434100404381752e-003 - 0.2562547922134399 - 2 - <_> - - - - <_> - 3 13 4 3 -1. - <_> - 2 14 4 1 3. - 1 - 2.0041360985487700e-003 - -0.2363777011632919 - 0.1256282031536102 - <_> - - <_> - - - - <_> - 0 14 4 3 -1. - <_> - 0 15 4 1 3. - 0 - -4.6680038794875145e-003 - -0.5133150815963745 - 1 - <_> - - - - <_> - 9 3 5 4 -1. - <_> - 9 4 5 2 2. - 0 - 0.0103520900011063 - 2 - 0.3521429896354675 - <_> - - - - <_> - 12 0 8 4 -1. - <_> - 12 1 8 2 2. - 0 - 2.9808359686285257e-003 - -0.1662887930870056 - 0.1664941012859345 - <_> - - <_> - - - - <_> - 18 0 2 5 -1. - <_> - 18 0 1 5 2. - 1 - 0.0108351903036237 - 1 - -0.3892920911312103 - <_> - - - - <_> - 14 3 1 4 -1. - <_> - 14 5 1 2 2. - 0 - -3.8211939390748739e-003 - 0.3546645939350128 - 2 - <_> - - - - <_> - 5 15 3 2 -1. - <_> - 6 16 1 2 3. - 1 - -3.4161040093749762e-003 - -0.4581452012062073 - 0.0458530187606812 - <_> - - <_> - - - - <_> - 9 7 4 8 -1. - <_> - 10 7 2 8 2. - 0 - -5.8807642199099064e-003 - 2 - 1 - <_> - - - - <_> - 14 5 1 12 -1. - <_> - 10 9 1 4 3. - 1 - -0.0349138900637627 - 0.1024037972092629 - -0.2594524919986725 - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 4 1 2 1 3. - 1 - 4.8959217965602875e-003 - 0.2677854895591736 - -0.4895980060100555 - <_> - - <_> - - - - <_> - 18 1 2 2 -1. - <_> - 18 1 2 1 2. - 1 - 5.8120768517255783e-003 - 1 - 0.3037706017494202 - <_> - - - - <_> - 6 8 9 2 -1. - <_> - 6 9 9 1 2. - 0 - 3.5575949586927891e-003 - -0.1806481927633286 - 2 - <_> - - - - <_> - 7 8 13 4 -1. - <_> - 7 9 13 2 2. - 0 - 2.5241500698029995e-003 - 0.4148091077804565 - -0.1979449987411499 - <_> - - <_> - - - - <_> - 6 7 3 4 -1. - <_> - 7 8 1 4 3. - 1 - 0.0154929701238871 - 1 - 0.4780220985412598 - <_> - - - - <_> - 9 18 2 2 -1. - <_> - 9 18 1 1 2. - <_> - 10 19 1 1 2. - 0 - 2.3261269961949438e-004 - 2 - -0.3089103996753693 - <_> - - - - <_> - 6 18 6 2 -1. - <_> - 6 18 3 1 2. - <_> - 9 19 3 1 2. - 0 - -2.1607619710266590e-003 - -0.4022316038608551 - 0.1109884977340698 - <_> - - <_> - - - - <_> - 5 6 3 4 -1. - <_> - 6 7 1 4 3. - 1 - 3.5326189827173948e-003 - 1 - 0.2248906046152115 - <_> - - - - <_> - 5 8 2 12 -1. - <_> - 5 8 1 6 2. - <_> - 6 14 1 6 2. - 0 - -3.3474999945610762e-003 - 0.1663186997175217 - 2 - <_> - - - - <_> - 19 0 1 8 -1. - <_> - 19 0 1 4 2. - 1 - 0.0291682109236717 - -0.0740267783403397 - -0.4574469923973084 - <_> - - <_> - - - - <_> - 1 11 4 6 -1. - <_> - 1 13 4 2 3. - 0 - -0.0162425003945827 - -0.4349718987941742 - 1 - <_> - - - - <_> - 6 12 4 4 -1. - <_> - 6 12 2 4 2. - 1 - -7.5024510733783245e-003 - 0.1664609014987946 - 2 - <_> - - - - <_> - 18 13 1 6 -1. - <_> - 18 16 1 3 2. - 0 - 1.7816389445215464e-003 - -0.3915584981441498 - 0.0805713534355164 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - -7.2545823059044778e-005 - 2 - 1 - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 6.1626458773389459e-005 - -0.4167973101139069 - 6.0808397829532623e-003 - <_> - - - - <_> - 14 15 4 4 -1. - <_> - 14 15 2 2 2. - <_> - 16 17 2 2 2. - 0 - -4.3781189015135169e-004 - 0.3192054927349091 - -0.0775062665343285 - <_> - - <_> - - - - <_> - 4 3 1 2 -1. - <_> - 4 4 1 1 2. - 0 - -3.0576970311813056e-004 - 1 - 2 - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 5 4 3 2 2. - 1 - -0.0131078995764256 - -0.3646284043788910 - 0.2239166051149368 - <_> - - - - <_> - 2 1 3 1 -1. - <_> - 3 2 1 1 3. - 1 - -7.4203108670189977e-004 - 0.0683436170220375 - -0.2959760129451752 - <_> - - <_> - - - - <_> - 6 8 3 5 -1. - <_> - 7 8 1 5 3. - 0 - -7.7575328759849072e-003 - 0.4574872851371765 - 1 - <_> - - - - <_> - 8 9 1 8 -1. - <_> - 8 11 1 4 2. - 0 - 3.0043099541217089e-003 - 2 - 0.1805900037288666 - <_> - - - - <_> - 14 10 4 4 -1. - <_> - 14 10 2 4 2. - 1 - -0.0585617609322071 - 0.2655555903911591 - -0.2038139998912811 - <_> - - <_> - - - - <_> - 5 16 9 3 -1. - <_> - 8 16 3 3 3. - 0 - -0.0252952892333269 - -0.5870481133460999 - 1 - <_> - - - - <_> - 14 11 6 6 -1. - <_> - 14 13 6 2 3. - 0 - -0.0498106591403484 - -0.8444283008575440 - 2 - <_> - - - - <_> - 9 16 5 2 -1. - <_> - 9 17 5 1 2. - 0 - -2.4564980994910002e-003 - 0.4401744008064270 - 3.7946549709886312e-003 - -1.3664239645004272 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 8 10 6 1 2. - 0 - -0.0237959995865822 - 2 - 1 - <_> - - - - <_> - 1 5 18 5 -1. - <_> - 7 5 6 5 3. - 0 - -0.0429167188704014 - 2.1881549619138241e-003 - -0.4964042007923126 - <_> - - - - <_> - 15 9 2 3 -1. - <_> - 16 9 1 3 2. - 0 - -9.9466904066503048e-004 - 0.8371809720993042 - -0.0302797593176365 - <_> - - <_> - - - - <_> - 0 14 20 6 -1. - <_> - 0 17 20 3 2. - 0 - 0.0138956503942609 - -0.3949576914310455 - 1 - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -2.2832138929516077e-003 - 2 - -0.0386893004179001 - <_> - - - - <_> - 5 1 12 15 -1. - <_> - 9 6 4 5 9. - 0 - -0.4844757914543152 - 0.8393334746360779 - 0.2311190962791443 - <_> - - <_> - - - - <_> - 0 0 20 1 -1. - <_> - 5 0 10 1 2. - 0 - -7.3761418461799622e-003 - 0.2309499979019165 - 1 - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 3.3793840557336807e-003 - 2 - 0.0916085317730904 - <_> - - - - <_> - 0 0 10 6 -1. - <_> - 5 0 5 6 2. - 0 - -0.0334152691066265 - 0.1146292984485626 - -0.5480918288230896 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 2 1 4 1 3. - 1 - -7.6022851280868053e-003 - -0.5795956850051880 - 1 - <_> - - - - <_> - 2 0 15 6 -1. - <_> - 7 2 5 2 9. - 0 - 0.0762296169996262 - 2 - 0.3466677963733673 - <_> - - - - <_> - 0 2 6 4 -1. - <_> - 3 2 3 4 2. - 0 - -3.7729479372501373e-003 - 0.1189967021346092 - -0.2798354029655457 - <_> - - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 15 10 1 1 2. - 0 - -4.2590490193106234e-004 - 2 - 1 - <_> - - - - <_> - 2 7 6 9 -1. - <_> - 4 7 2 9 3. - 0 - -9.4475867226719856e-003 - 0.1440328955650330 - -0.2805388867855072 - <_> - - - - <_> - 1 0 15 18 -1. - <_> - 6 6 5 6 9. - 0 - -0.8022003173828125 - 0.6643000841140747 - 0.0548347681760788 - <_> - - <_> - - - - <_> - 3 5 1 3 -1. - <_> - 2 6 1 1 3. - 1 - -2.8851430397480726e-003 - -0.3883669972419739 - 1 - <_> - - - - <_> - 19 12 1 3 -1. - <_> - 19 13 1 1 3. - 0 - -1.2341480469331145e-003 - -0.3673455119132996 - 2 - <_> - - - - <_> - 19 13 1 2 -1. - <_> - 19 14 1 1 2. - 0 - 4.8669218813301995e-005 - -0.0789823234081268 - 0.3018474876880646 - <_> - - <_> - - - - <_> - 7 5 7 12 -1. - <_> - 7 8 7 6 2. - 0 - -0.1649180054664612 - 0.3888623118400574 - 1 - <_> - - - - <_> - 15 9 3 2 -1. - <_> - 15 10 3 1 2. - 0 - 1.0784890037029982e-003 - -0.2447739988565445 - 2 - <_> - - - - <_> - 16 9 4 4 -1. - <_> - 17 9 2 4 2. - 0 - -2.8511860873550177e-003 - 0.4575313925743103 - -0.0534997694194317 - <_> - - <_> - - - - <_> - 10 15 9 2 -1. - <_> - 13 15 3 2 3. - 0 - -3.2212301157414913e-003 - 2 - 1 - <_> - - - - <_> - 2 15 10 1 -1. - <_> - 7 15 5 1 2. - 0 - 3.4995030146092176e-003 - -0.2430385053157806 - 0.1588134020566940 - <_> - - - - <_> - 15 13 4 3 -1. - <_> - 14 14 4 1 3. - 1 - -0.0100987795740366 - -0.5581660866737366 - 0.3219622969627380 - <_> - - <_> - - - - <_> - 3 17 2 3 -1. - <_> - 4 17 1 3 2. - 0 - -6.6468201112002134e-004 - 0.2457288950681686 - 1 - <_> - - - - <_> - 12 18 8 2 -1. - <_> - 16 18 4 2 2. - 0 - -3.6263898946344852e-003 - 0.1809433996677399 - 2 - <_> - - - - <_> - 8 7 12 6 -1. - <_> - 12 7 4 6 3. - 0 - -0.0767914205789566 - 0.2663452923297882 - -0.3505102992057800 - <_> - - <_> - - - - <_> - 18 16 1 2 -1. - <_> - 18 16 1 1 2. - 1 - -2.7685859240591526e-003 - -0.4350436031818390 - 1 - <_> - - - - <_> - 17 11 3 9 -1. - <_> - 17 14 3 3 3. - 0 - 0.0256765298545361 - 2 - -0.3514328002929688 - <_> - - - - <_> - 16 9 4 2 -1. - <_> - 17 10 2 2 2. - 1 - -4.6753739006817341e-003 - 0.4104990959167481 - 0.0331448204815388 - <_> - - <_> - - - - <_> - 16 0 4 7 -1. - <_> - 17 0 2 7 2. - 0 - 6.7022559233009815e-003 - 1 - -0.4973830878734589 - <_> - - - - <_> - 5 2 2 18 -1. - <_> - 5 11 2 9 2. - 0 - 0.0162080004811287 - -0.1794546991586685 - 2 - <_> - - - - <_> - 5 9 8 9 -1. - <_> - 7 9 4 9 2. - 0 - -0.0110248699784279 - 0.4045715034008026 - -0.0430775806307793 - <_> - - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - 7.7911361586302519e-004 - 2 - 1 - <_> - - - - <_> - 5 5 15 9 -1. - <_> - 10 8 5 3 9. - 0 - -0.1813969016075134 - 0.5186663866043091 - -0.0753649696707726 - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 19 4 1 2. - 0 - -1.2972550466656685e-003 - -0.5064393281936646 - -0.0172262992709875 - <_> - - <_> - - - - <_> - 0 12 10 3 -1. - <_> - 0 13 10 1 3. - 0 - 0.0204316601157188 - 1 - -0.7058460116386414 - <_> - - - - <_> - 1 14 1 2 -1. - <_> - 1 15 1 1 2. - 0 - 1.6622639959678054e-003 - 2 - -0.4510225057601929 - <_> - - - - <_> - 5 1 4 2 -1. - <_> - 6 1 2 2 2. - 0 - -2.7155179996043444e-003 - -0.4459821879863739 - 0.1388610005378723 - <_> - - <_> - - - - <_> - 2 13 1 2 -1. - <_> - 2 14 1 1 2. - 0 - 4.2074210796272382e-005 - -0.2217022925615311 - 1 - <_> - - - - <_> - 0 13 7 3 -1. - <_> - 0 14 7 1 3. - 0 - 9.3489577993750572e-003 - 2 - -0.4655444920063019 - <_> - - - - <_> - 15 6 3 5 -1. - <_> - 16 7 1 5 3. - 1 - -0.0132266096770763 - 0.5485987067222595 - 0.0679701790213585 - <_> - - <_> - - - - <_> - 13 10 2 1 -1. - <_> - 14 10 1 1 2. - 0 - -1.5071720117703080e-003 - 0.4648112952709198 - 1 - <_> - - - - <_> - 5 3 3 5 -1. - <_> - 6 4 1 5 3. - 1 - 8.7646767497062683e-003 - 2 - 0.2799291014671326 - <_> - - - - <_> - 5 3 3 5 -1. - <_> - 6 4 1 5 3. - 1 - -0.0105426497757435 - 0.2123970985412598 - -0.2251451015472412 - <_> - - <_> - - - - <_> - 17 5 3 2 -1. - <_> - 18 6 1 2 3. - 1 - -6.4357798546552658e-003 - -0.4181163012981415 - 1 - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 7.8919027000665665e-003 - 2 - -0.6221169829368591 - <_> - - - - <_> - 11 5 2 1 -1. - <_> - 12 5 1 1 2. - 0 - -7.8666176705155522e-005 - 0.2718409001827240 - -0.0429345592856407 - <_> - - <_> - - - - <_> - 16 6 3 3 -1. - <_> - 15 7 3 1 3. - 1 - 8.2855960354208946e-003 - 1 - 0.3466930985450745 - <_> - - - - <_> - 2 16 1 4 -1. - <_> - 2 17 1 2 2. - 0 - 5.4834279580973089e-005 - 2 - 0.0720087885856628 - <_> - - - - <_> - 2 13 5 2 -1. - <_> - 2 13 5 1 2. - 1 - 2.4197530001401901e-003 - -0.3777442872524262 - 0.1787102967500687 - <_> - - <_> - - - - <_> - 12 5 1 2 -1. - <_> - 12 6 1 1 2. - 0 - -6.7930121440440416e-004 - 2 - 1 - <_> - - - - <_> - 10 3 6 4 -1. - <_> - 10 4 6 2 2. - 0 - -5.6035388261079788e-003 - 0.1681724041700363 - -0.2765980958938599 - <_> - - - - <_> - 13 8 4 6 -1. - <_> - 13 8 2 3 2. - <_> - 15 11 2 3 2. - 0 - 8.4534510970115662e-003 - 0.0695867314934731 - 0.6728498935699463 - <_> - - <_> - - - - <_> - 6 15 3 2 -1. - <_> - 7 16 1 2 3. - 1 - 4.4707441702485085e-003 - 1 - -0.4218375980854034 - <_> - - - - <_> - 16 10 4 3 -1. - <_> - 17 11 2 3 2. - 1 - -9.1664772480726242e-003 - 0.3631944060325623 - 2 - <_> - - - - <_> - 1 2 6 8 -1. - <_> - 4 2 3 8 2. - 0 - -0.0711680129170418 - -0.5952010750770569 - 0.0233220793306828 - <_> - - <_> - - - - <_> - 4 0 15 1 -1. - <_> - 9 0 5 1 3. - 0 - -3.6344379186630249e-003 - 1 - 2 - <_> - - - - <_> - 15 13 2 2 -1. - <_> - 15 13 2 1 2. - 1 - -5.8278841897845268e-003 - -0.3510842025279999 - 0.2736631035804749 - <_> - - - - <_> - 14 2 6 1 -1. - <_> - 17 2 3 1 2. - 0 - -2.5245670694857836e-003 - 0.1498972028493881 - -0.2493329048156738 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 1 1 3 3. - 1 - 5.6592230685055256e-003 - 1 - -0.3473316133022308 - <_> - - - - <_> - 18 7 2 1 -1. - <_> - 18 7 1 1 2. - 1 - 4.0714079514145851e-003 - 2 - -0.4735985994338989 - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 3 4 3 2 2. - 1 - -0.0119215501472354 - -0.4001652896404266 - 0.1576768010854721 - <_> - - <_> - - - - <_> - 16 8 4 4 -1. - <_> - 16 9 4 2 2. - 0 - 9.8874024115502834e-004 - 1 - 2 - <_> - - - - <_> - 7 4 2 4 -1. - <_> - 6 5 2 2 2. - 1 - 1.4633700484409928e-003 - 0.2103355973958969 - -0.1531770974397659 - <_> - - - - <_> - 16 14 4 6 -1. - <_> - 18 14 2 6 2. - 0 - -7.6617081649601460e-003 - 0.2348176985979080 - -0.3718707859516144 - <_> - - <_> - - - - <_> - 7 9 6 3 -1. - <_> - 9 10 2 1 9. - 0 - -0.0177705697715282 - 2 - 1 - <_> - - - - <_> - 8 9 3 4 -1. - <_> - 9 9 1 4 3. - 0 - 8.8388901203870773e-003 - -0.1641412973403931 - 0.4824588894844055 - <_> - - - - <_> - 8 0 6 3 -1. - <_> - 10 0 2 3 3. - 0 - -0.0100585296750069 - -0.5438815951347351 - 0.2812717854976654 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - 2.8392190579324961e-003 - 1 - -0.3857780098915100 - <_> - - - - <_> - 18 16 1 3 -1. - <_> - 18 17 1 1 3. - 0 - -7.8546267468482256e-004 - -0.3286094963550568 - 2 - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 4.2725168896140531e-005 - -0.0466547682881355 - 0.2774116992950440 - <_> - - <_> - - - - <_> - 17 5 3 3 -1. - <_> - 16 6 3 1 3. - 1 - 5.1506902091205120e-003 - 1 - 0.2734803855419159 - <_> - - - - <_> - 12 8 1 6 -1. - <_> - 10 10 1 2 3. - 1 - -8.3640925586223602e-003 - 0.1431567072868347 - 2 - <_> - - - - <_> - 10 3 6 12 -1. - <_> - 12 3 2 12 3. - 0 - -8.8340323418378830e-003 - 0.0540493614971638 - -0.3626655936241150 - -1.3621879816055298 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 6 5 14 -1. - <_> - 8 13 5 7 2. - 0 - 0.1711488962173462 - 1 - 2 - <_> - - - - <_> - 1 17 19 2 -1. - <_> - 1 18 19 1 2. - 0 - 3.2740959431976080e-003 - -0.5564535856246948 - 0.0550181306898594 - <_> - - - - <_> - 14 7 2 4 -1. - <_> - 14 9 2 2 2. - 0 - 4.8062200658023357e-003 - 0.0111902002245188 - 0.7955148816108704 - <_> - - <_> - - - - <_> - 3 13 2 4 -1. - <_> - 3 15 2 2 2. - 0 - 1.8143800552934408e-003 - 2 - 1 - <_> - - - - <_> - 1 2 18 12 -1. - <_> - 7 6 6 4 9. - 0 - -0.4279597103595734 - 0.5840831995010376 - -0.0139401797205210 - <_> - - - - <_> - 0 0 4 5 -1. - <_> - 2 0 2 5 2. - 0 - -6.3261981122195721e-003 - 0.1665998995304108 - -0.5016152262687683 - <_> - - <_> - - - - <_> - 14 14 6 6 -1. - <_> - 17 14 3 6 2. - 0 - 0.0107020195573568 - 1 - 2 - <_> - - - - <_> - 4 16 16 3 -1. - <_> - 8 16 8 3 2. - 0 - 7.3792198672890663e-003 - -0.4065352082252502 - 0.1287705004215241 - <_> - - - - <_> - 8 17 8 1 -1. - <_> - 10 17 4 1 2. - 0 - 4.8895571380853653e-003 - 0.4399087131023407 - -0.7899739742279053 - <_> - - <_> - - - - <_> - 4 7 4 4 -1. - <_> - 4 9 4 2 2. - 0 - 0.0100123202428222 - 1 - 2 - <_> - - - - <_> - 0 0 18 9 -1. - <_> - 6 3 6 3 9. - 0 - 0.3435631096363068 - -0.2561636865139008 - 0.4637744128704071 - <_> - - - - <_> - 0 9 6 2 -1. - <_> - 2 9 2 2 3. - 0 - -7.2859530337154865e-003 - 0.5801448822021484 - -0.0546094514429569 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - -1.5099609736353159e-003 - -0.6405451893806458 - 1 - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 17 0 1 1 2. - 0 - 2.9597719549201429e-004 - 2 - 0.3895671069622040 - <_> - - - - <_> - 18 14 1 2 -1. - <_> - 18 15 1 1 2. - 0 - 1.0984730033669621e-004 - -0.3411337137222290 - 0.1111171990633011 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 0 1 2 3. - 0 - -3.2580990809947252e-003 - -0.7341446280479431 - 1 - <_> - - - - <_> - 6 14 3 1 -1. - <_> - 7 15 1 1 3. - 1 - -3.8750080857425928e-003 - -0.6350858211517334 - 2 - <_> - - - - <_> - 0 11 7 3 -1. - <_> - 0 12 7 1 3. - 0 - 0.0145424697548151 - 0.1763252019882202 - -0.6669527292251587 - <_> - - <_> - - - - <_> - 1 14 19 3 -1. - <_> - 1 15 19 1 3. - 0 - 0.0266160704195499 - 1 - -0.7583190202713013 - <_> - - - - <_> - 15 1 3 5 -1. - <_> - 16 1 1 5 3. - 0 - 5.2236141636967659e-003 - 2 - -0.6262210011482239 - <_> - - - - <_> - 14 2 6 4 -1. - <_> - 14 2 3 2 2. - <_> - 17 4 3 2 2. - 0 - 5.8677811175584793e-003 - -0.0318109504878521 - 0.4103187918663025 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 2 2. - 0 - -1.0499180061742663e-003 - 2 - 1 - <_> - - - - <_> - 14 11 3 4 -1. - <_> - 14 13 3 2 2. - 0 - 2.3986180312931538e-003 - -0.5293647050857544 - 0.0226202793419361 - <_> - - - - <_> - 16 5 3 15 -1. - <_> - 17 5 1 15 3. - 0 - 0.0110095301643014 - 0.3052845001220703 - -0.7465983033180237 - <_> - - <_> - - - - <_> - 6 10 14 3 -1. - <_> - 6 11 14 1 3. - 0 - -0.0239578895270824 - -0.5802757143974304 - 1 - <_> - - - - <_> - 2 17 12 3 -1. - <_> - 6 17 4 3 3. - 0 - -3.6849190946668386e-003 - 0.3098559081554413 - 2 - <_> - - - - <_> - 0 16 16 2 -1. - <_> - 4 16 8 2 2. - 0 - 3.4864700865000486e-003 - -0.3149890899658203 - 0.1321973055601120 - <_> - - <_> - - - - <_> - 7 3 6 16 -1. - <_> - 7 7 6 8 2. - 0 - -0.1915034055709839 - 0.4364647865295410 - 1 - <_> - - - - <_> - 7 1 12 3 -1. - <_> - 10 1 6 3 2. - 0 - -8.0496361479163170e-003 - 0.1716579943895340 - 2 - <_> - - - - <_> - 13 1 4 4 -1. - <_> - 13 3 4 2 2. - 0 - 0.0122363399714231 - -0.3638201951980591 - 0.2396752983331680 - <_> - - <_> - - - - <_> - 6 18 3 2 -1. - <_> - 7 18 1 2 3. - 0 - -2.0347100216895342e-003 - -0.5976858139038086 - 1 - <_> - - - - <_> - 2 2 3 5 -1. - <_> - 3 2 1 5 3. - 0 - -5.5528031662106514e-003 - -0.5416460037231445 - 2 - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 11 0 1 3 3. - 0 - -3.2379259355366230e-003 - -0.5387029051780701 - 0.1844422966241837 - <_> - - <_> - - - - <_> - 10 0 10 4 -1. - <_> - 10 0 5 2 2. - <_> - 15 2 5 2 2. - 0 - 9.0606305748224258e-003 - 1 - 0.3103973865509033 - <_> - - - - <_> - 0 16 6 3 -1. - <_> - 3 16 3 3 2. - 0 - -4.1239038109779358e-003 - 0.1805239021778107 - 2 - <_> - - - - <_> - 0 17 6 3 -1. - <_> - 3 17 3 3 2. - 0 - 3.5246899351477623e-003 - -0.4734764099121094 - 0.0153494598343968 - <_> - - <_> - - - - <_> - 16 1 3 2 -1. - <_> - 17 2 1 2 3. - 1 - 5.2378959953784943e-003 - 1 - -0.4585973918437958 - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 3 2 3 1 3. - 1 - -9.4280708581209183e-003 - -0.6332333087921143 - 2 - <_> - - - - <_> - 6 0 4 5 -1. - <_> - 7 0 2 5 2. - 0 - -7.9351589083671570e-003 - -0.6153936982154846 - 0.1692043989896774 - <_> - - <_> - - - - <_> - 4 17 3 3 -1. - <_> - 5 18 1 1 9. - 0 - -7.7211041934788227e-003 - -0.6586161255836487 - 1 - <_> - - - - <_> - 4 15 3 3 -1. - <_> - 5 16 1 1 9. - 0 - 9.0800300240516663e-003 - 2 - -0.7144613862037659 - <_> - - - - <_> - 1 10 6 1 -1. - <_> - 3 10 2 1 3. - 0 - -4.3125250376760960e-003 - 0.3433657884597778 - -0.0462658591568470 - <_> - - <_> - - - - <_> - 0 3 20 2 -1. - <_> - 5 3 10 2 2. - 0 - 0.0231790505349636 - 1 - 0.3633871078491211 - <_> - - - - <_> - 2 1 15 4 -1. - <_> - 7 1 5 4 3. - 0 - -0.0213900804519653 - 0.1827684044837952 - 2 - <_> - - - - <_> - 1 10 18 8 -1. - <_> - 10 10 9 8 2. - 0 - -0.2376140952110291 - 0.6167513728141785 - -0.3426147103309631 - <_> - - <_> - - - - <_> - 16 7 1 4 -1. - <_> - 16 9 1 2 2. - 0 - 2.1705040708184242e-003 - 1 - 0.3005678951740265 - <_> - - - - <_> - 17 9 2 1 -1. - <_> - 18 9 1 1 2. - 0 - 7.8210679930634797e-005 - -0.3411675989627838 - 2 - <_> - - - - <_> - 17 5 3 7 -1. - <_> - 18 5 1 7 3. - 0 - 5.5145919322967529e-003 - 0.2338685989379883 - -0.4215052127838135 - -1.3905019760131836 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 8 10 6 1 2. - 0 - -0.0227433796972036 - 1 - 2 - <_> - - - - <_> - 15 9 2 6 -1. - <_> - 15 9 1 3 2. - <_> - 16 12 1 3 2. - 0 - 1.8450849456712604e-003 - -0.0895522683858871 - 0.7477834224700928 - <_> - - - - <_> - 1 6 16 10 -1. - <_> - 1 11 16 5 2. - 0 - 0.1333817988634110 - -0.4450423121452332 - -0.0175809208303690 - <_> - - <_> - - - - <_> - 1 12 19 8 -1. - <_> - 1 16 19 4 2. - 0 - 0.0636084899306297 - -0.3773922026157379 - 1 - <_> - - - - <_> - 4 4 12 9 -1. - <_> - 8 7 4 3 9. - 0 - -0.2519995868206024 - 0.4908803105354309 - 2 - <_> - - - - <_> - 5 2 9 9 -1. - <_> - 5 5 9 3 3. - 0 - -0.1214423030614853 - 0.6382591724395752 - -0.1182217001914978 - <_> - - <_> - - - - <_> - 13 0 3 6 -1. - <_> - 14 0 1 6 3. - 0 - 2.6287150103598833e-003 - 1 - -0.4692674875259399 - <_> - - - - <_> - 19 16 1 3 -1. - <_> - 18 17 1 1 3. - 1 - 3.0568530783057213e-003 - 2 - -0.6510121822357178 - <_> - - - - <_> - 17 17 1 2 -1. - <_> - 17 18 1 1 2. - 0 - 8.1901780504267663e-005 - -0.1163925975561142 - 0.3018881976604462 - <_> - - <_> - - - - <_> - 0 9 4 2 -1. - <_> - 2 9 2 2 2. - 0 - -1.6189720481634140e-003 - 1 - -0.2089190930128098 - <_> - - - - <_> - 3 0 3 19 -1. - <_> - 4 0 1 19 3. - 0 - 1.8283469835296273e-003 - 2 - -0.1985930055379868 - <_> - - - - <_> - 4 13 4 1 -1. - <_> - 5 14 2 1 2. - 1 - -3.9073298685252666e-003 - -0.3445425927639008 - 0.3714081943035126 - <_> - - <_> - - - - <_> - 16 0 4 1 -1. - <_> - 18 0 2 1 2. - 0 - 8.3928240928798914e-004 - -0.1535657048225403 - 1 - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 11 0 2 4 2. - 0 - 3.7175789475440979e-003 - 2 - -0.5090423822402954 - <_> - - - - <_> - 9 0 3 5 -1. - <_> - 10 0 1 5 3. - 0 - 5.1694628782570362e-003 - 0.3561800122261047 - -0.5577322840690613 - <_> - - <_> - - - - <_> - 3 4 1 3 -1. - <_> - 2 5 1 1 3. - 1 - 2.5797619018703699e-003 - 1 - -0.4209643900394440 - <_> - - - - <_> - 3 4 2 3 -1. - <_> - 2 5 2 1 3. - 1 - -6.0318140313029289e-003 - -0.4399986863136292 - 2 - <_> - - - - <_> - 5 14 3 3 -1. - <_> - 6 15 1 3 3. - 1 - 6.4257727935910225e-003 - 0.1887357980012894 - -0.4519174993038178 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 1 2 2. - 1 - 3.4354510717093945e-003 - 1 - 0.2739546895027161 - <_> - - - - <_> - 0 2 6 1 -1. - <_> - 3 2 3 1 2. - 0 - 2.3672808893024921e-003 - 2 - 0.2380850017070770 - <_> - - - - <_> - 0 2 4 5 -1. - <_> - 2 2 2 5 2. - 0 - -2.0294289570301771e-003 - -0.0475861504673958 - -0.4815962910652161 - <_> - - <_> - - - - <_> - 2 0 4 4 -1. - <_> - 3 0 2 4 2. - 0 - -4.8436429351568222e-003 - -0.4932515025138855 - 1 - <_> - - - - <_> - 6 16 3 1 -1. - <_> - 7 17 1 1 3. - 1 - 3.0318649951368570e-003 - 2 - -0.4710946083068848 - <_> - - - - <_> - 16 3 4 2 -1. - <_> - 17 4 2 2 2. - 1 - -0.0116912499070168 - -0.5876376032829285 - 0.1484048962593079 - <_> - - <_> - - - - <_> - 16 19 2 1 -1. - <_> - 17 19 1 1 2. - 0 - 6.5642758272588253e-005 - 1 - 0.2078777998685837 - <_> - - - - <_> - 17 18 2 1 -1. - <_> - 18 18 1 1 2. - 0 - -6.9199966674204916e-005 - 2 - -0.4219917058944702 - <_> - - - - <_> - 17 16 1 3 -1. - <_> - 17 17 1 1 3. - 0 - -2.8953890432603657e-004 - -0.3465768992900848 - 0.2480928003787994 - <_> - - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 9 9 3 1 3. - 0 - 4.0080421604216099e-003 - 1 - 2 - <_> - - - - <_> - 2 17 5 2 -1. - <_> - 2 18 5 1 2. - 0 - 5.0496991025283933e-004 - -0.2973163127899170 - 0.0631331875920296 - <_> - - - - <_> - 6 10 8 3 -1. - <_> - 8 10 4 3 2. - 0 - -8.1637818366289139e-003 - 0.6349964141845703 - -0.1496534943580627 - <_> - - <_> - - - - <_> - 17 15 2 3 -1. - <_> - 16 16 2 1 3. - 1 - 4.9255997873842716e-003 - 1 - -0.5870906710624695 - <_> - - - - <_> - 6 8 5 2 -1. - <_> - 6 8 5 1 2. - 1 - -0.0199859905987978 - 0.4194697141647339 - 2 - <_> - - - - <_> - 11 0 3 4 -1. - <_> - 11 2 3 2 2. - 0 - 6.5322928130626678e-003 - -0.1339398026466370 - 0.2613128125667572 - <_> - - <_> - - - - <_> - 17 2 3 3 -1. - <_> - 18 3 1 3 3. - 1 - 5.1231118850409985e-003 - 1 - -0.3639743030071259 - <_> - - - - <_> - 16 4 3 2 -1. - <_> - 16 5 3 1 2. - 0 - -4.0335211087949574e-004 - 2 - -0.1177612021565437 - <_> - - - - <_> - 14 0 6 6 -1. - <_> - 14 0 3 3 2. - <_> - 17 3 3 3 2. - 0 - 2.9234900139272213e-003 - -0.0125295100733638 - 0.4613231122493744 - <_> - - <_> - - - - <_> - 6 2 10 4 -1. - <_> - 6 4 10 2 2. - 0 - 0.0359676703810692 - 1 - 0.4599137902259827 - <_> - - - - <_> - 5 6 9 2 -1. - <_> - 5 7 9 1 2. - 0 - 6.5072569996118546e-003 - 2 - 0.3218939006328583 - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 7 7 6 1 3. - 0 - -0.0108210500329733 - 0.3042351901531220 - -0.2076997011899948 - <_> - - <_> - - - - <_> - 17 0 3 1 -1. - <_> - 18 1 1 1 3. - 1 - -3.7279170937836170e-003 - -0.4705623984336853 - 1 - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 14 0 6 2 2. - 0 - -8.9352466166019440e-003 - 0.3136189877986908 - 2 - <_> - - - - <_> - 16 2 4 2 -1. - <_> - 18 2 2 2 2. - 0 - 3.9792140014469624e-003 - -0.1855935007333756 - 0.3081119060516357 - <_> - - <_> - - - - <_> - 9 4 4 1 -1. - <_> - 10 4 2 1 2. - 0 - 1.9110339926555753e-003 - 1 - -0.4499742984771729 - <_> - - - - <_> - 5 4 2 3 -1. - <_> - 4 5 2 1 3. - 1 - -6.8130958825349808e-003 - -0.4466395080089569 - 2 - <_> - - - - <_> - 16 8 4 8 -1. - <_> - 17 8 2 8 2. - 0 - -6.4241990912705660e-004 - 0.2537398934364319 - -0.0677948668599129 - <_> - - <_> - - - - <_> - 1 19 16 1 -1. - <_> - 9 19 8 1 2. - 0 - 4.8487721942365170e-003 - 1 - 0.2177778035402298 - <_> - - - - <_> - 4 19 12 1 -1. - <_> - 10 19 6 1 2. - 0 - -2.2816660348325968e-003 - 0.0741510093212128 - 2 - <_> - - - - <_> - 2 19 4 1 -1. - <_> - 4 19 2 1 2. - 0 - -1.1166459880769253e-003 - 0.1376267969608307 - -0.4571655094623566 - <_> - - <_> - - - - <_> - 12 5 2 8 -1. - <_> - 12 7 2 4 2. - 0 - -5.7191308587789536e-003 - 1 - -0.2020619958639145 - <_> - - - - <_> - 8 10 1 2 -1. - <_> - 8 10 1 1 2. - 1 - 1.9458220340311527e-003 - 2 - 0.5161374211311340 - <_> - - - - <_> - 15 3 3 12 -1. - <_> - 16 3 1 12 3. - 0 - 1.7544110305607319e-003 - 0.1820991933345795 - -0.2492770999670029 - <_> - - <_> - - - - <_> - 16 14 4 3 -1. - <_> - 16 15 4 1 3. - 0 - 6.5033212304115295e-003 - 1 - -0.6083135008811951 - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 4 0 1 2 3. - 0 - 2.3260021116584539e-003 - 2 - -0.4578379094600678 - <_> - - - - <_> - 13 13 3 6 -1. - <_> - 14 13 1 6 3. - 0 - -5.0675291568040848e-003 - -0.4626454114913940 - 0.1311458945274353 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 2 1 2. - 1 - -1.4921430265530944e-003 - 1 - 2 - <_> - - - - <_> - 1 8 1 9 -1. - <_> - 1 11 1 3 3. - 0 - -0.0137552004307508 - -0.4348564147949219 - 0.2038159966468811 - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 2 9 1 2 2. - 0 - 6.3531019259244204e-004 - -0.3248085975646973 - 0.1967971026897430 - <_> - - <_> - - - - <_> - 13 9 2 3 -1. - <_> - 12 10 2 1 3. - 1 - -1.0971709853038192e-003 - 1 - 2 - <_> - - - - <_> - 10 14 4 6 -1. - <_> - 11 14 2 6 2. - 0 - 2.1464130841195583e-003 - 0.2235444039106369 - -0.2503635883331299 - <_> - - - - <_> - 11 6 4 8 -1. - <_> - 12 6 2 8 2. - 0 - 0.0103435898199677 - -0.2750056982040405 - 0.3284736871719360 - <_> - - <_> - - - - <_> - 5 6 14 14 -1. - <_> - 5 13 14 7 2. - 0 - -0.1307681053876877 - -0.7797464132308960 - 1 - <_> - - - - <_> - 6 4 8 3 -1. - <_> - 6 5 8 1 3. - 0 - -8.7650436908006668e-003 - 0.3835664987564087 - 2 - <_> - - - - <_> - 1 16 1 3 -1. - <_> - 1 17 1 1 3. - 0 - -3.0066180624999106e-004 - -0.3084929883480072 - 0.0557130500674248 - <_> - - <_> - - - - <_> - 5 1 4 3 -1. - <_> - 4 2 4 1 3. - 1 - -0.0107763102278113 - -0.5307996869087219 - 1 - <_> - - - - <_> - 17 3 3 3 -1. - <_> - 16 4 3 1 3. - 1 - 7.3227831162512302e-003 - 2 - 0.3077637851238251 - <_> - - - - <_> - 15 3 5 15 -1. - <_> - 15 8 5 5 3. - 0 - -0.2126387953758240 - -0.6519067287445068 - 2.3253040853887796e-003 - <_> - - <_> - - - - <_> - 15 9 4 6 -1. - <_> - 15 9 2 3 2. - <_> - 17 12 2 3 2. - 0 - 6.5717170946300030e-003 - 1 - 0.2429659962654114 - <_> - - - - <_> - 16 7 3 3 -1. - <_> - 15 8 3 1 3. - 1 - -0.0163672100752592 - 0.4086779057979584 - 2 - <_> - - - - <_> - 11 5 6 9 -1. - <_> - 13 5 2 9 3. - 0 - -0.0150867896154523 - 0.1529923975467682 - -0.2556149959564209 - <_> - - <_> - - - - <_> - 16 15 2 3 -1. - <_> - 15 16 2 1 3. - 1 - 4.5563760213553905e-003 - 1 - 2 - <_> - - - - <_> - 0 17 7 3 -1. - <_> - 0 18 7 1 3. - 0 - 7.2980518452823162e-003 - 0.0862513035535812 - -0.5142557024955750 - <_> - - - - <_> - 16 8 4 7 -1. - <_> - 17 9 2 7 2. - 1 - 0.0239712093025446 - -0.6849169731140137 - 0.3926008045673370 - <_> - - <_> - - - - <_> - 15 16 1 3 -1. - <_> - 14 17 1 1 3. - 1 - 3.5279770381748676e-003 - 1 - -0.5898901820182800 - <_> - - - - <_> - 12 17 8 1 -1. - <_> - 16 17 4 1 2. - 0 - -5.4452237673103809e-003 - 0.4199798107147217 - 2 - <_> - - - - <_> - 14 16 2 4 -1. - <_> - 14 18 2 2 2. - 0 - 8.1267702626064420e-004 - -0.2560532987117767 - 0.0793930068612099 - -1.3378640413284302 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 10 12 1 -1. - <_> - 8 10 4 1 3. - 0 - -0.0276914592832327 - 1 - 2 - <_> - - - - <_> - 4 9 2 2 -1. - <_> - 5 9 1 2 2. - 0 - 1.3043059734627604e-003 - -0.1303724944591522 - 0.7810835838317871 - <_> - - - - <_> - 7 10 9 2 -1. - <_> - 10 10 3 2 3. - 0 - -0.0194304604083300 - 0.0144807295873761 - -0.3718458116054535 - <_> - - <_> - - - - <_> - 5 3 13 9 -1. - <_> - 5 6 13 3 3. - 0 - -0.1223504021763802 - 2 - 1 - <_> - - - - <_> - 6 7 5 2 -1. - <_> - 6 8 5 1 2. - 0 - -9.8456647247076035e-003 - 0.2843722999095917 - -0.2367583066225052 - <_> - - - - <_> - 5 5 12 14 -1. - <_> - 9 5 4 14 3. - 0 - -0.0743500962853432 - 0.5817487835884094 - -0.0280415508896112 - <_> - - <_> - - - - <_> - 18 8 2 10 -1. - <_> - 18 13 2 5 2. - 0 - 5.4055661894381046e-003 - -0.3374863862991333 - 1 - <_> - - - - <_> - 8 1 4 4 -1. - <_> - 9 1 2 4 2. - 0 - -3.7805580068379641e-003 - -0.4623272120952606 - 2 - <_> - - - - <_> - 0 0 20 7 -1. - <_> - 5 0 10 7 2. - 0 - -0.0629970878362656 - 0.4207010865211487 - -1.6759809805080295e-003 - <_> - - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 11 0 2 4 2. - 0 - -5.5793630890548229e-003 - -0.6461235284805298 - 1 - <_> - - - - <_> - 13 1 3 2 -1. - <_> - 14 1 1 2 3. - 0 - -2.2814329713582993e-003 - -0.4679610133171082 - 2 - <_> - - - - <_> - 12 0 8 1 -1. - <_> - 16 0 4 1 2. - 0 - 3.9111520163714886e-003 - -0.0255948100239038 - 0.3346031010150909 - <_> - - <_> - - - - <_> - 0 3 4 6 -1. - <_> - 0 3 2 3 2. - <_> - 2 6 2 3 2. - 0 - -3.5144959110766649e-003 - 2 - 1 - <_> - - - - <_> - 1 0 4 5 -1. - <_> - 3 0 2 5 2. - 0 - -5.8226250112056732e-003 - 0.1114350035786629 - -0.3054972887039185 - <_> - - - - <_> - 4 5 1 3 -1. - <_> - 3 6 1 1 3. - 1 - -3.5309740342199802e-003 - -0.3778940141201019 - 0.2932415902614594 - <_> - - <_> - - - - <_> - 4 14 4 2 -1. - <_> - 4 14 2 2 2. - 1 - -1.6653330530971289e-003 - 2 - 1 - <_> - - - - <_> - 3 13 16 7 -1. - <_> - 11 13 8 7 2. - 0 - -0.0533260181546211 - 0.1723686009645462 - -0.3902606070041657 - <_> - - - - <_> - 5 1 9 4 -1. - <_> - 5 2 9 2 2. - 0 - 8.0891316756606102e-003 - -0.0162908006459475 - 0.3943473100662231 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 5 1 1 3 3. - 0 - -3.7783260922878981e-003 - -0.5994725823402405 - 1 - <_> - - - - <_> - 0 0 10 1 -1. - <_> - 5 0 5 1 2. - 0 - 6.9123809225857258e-003 - 2 - 0.3475525975227356 - <_> - - - - <_> - 8 6 5 4 -1. - <_> - 7 7 5 2 2. - 1 - -0.0216761007905006 - 0.3396619856357575 - -0.1272906959056854 - <_> - - <_> - - - - <_> - 18 4 2 2 -1. - <_> - 18 4 1 2 2. - 1 - 4.8390422016382217e-003 - 1 - -0.3686085939407349 - <_> - - - - <_> - 11 7 3 3 -1. - <_> - 12 8 1 1 9. - 0 - -8.3583313971757889e-003 - 0.3608345091342926 - 2 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - 3.7209360743872821e-004 - 0.0551498308777809 - -0.3888871073722839 - <_> - - <_> - - - - <_> - 3 5 1 3 -1. - <_> - 2 6 1 1 3. - 1 - 2.4114940315485001e-003 - 1 - -0.3484646081924439 - <_> - - - - <_> - 7 10 2 3 -1. - <_> - 6 11 2 1 3. - 1 - -2.2250239271670580e-003 - 0.2563999891281128 - 2 - <_> - - - - <_> - 0 5 2 14 -1. - <_> - 0 12 2 7 2. - 0 - 5.9994249604642391e-003 - -0.3308643996715546 - 0.0639430880546570 - <_> - - <_> - - - - <_> - 14 12 5 2 -1. - <_> - 14 13 5 1 2. - 0 - 0.0126534597948194 - 1 - -0.6538289189338684 - <_> - - - - <_> - 5 4 3 5 -1. - <_> - 6 5 1 5 3. - 1 - 9.6980258822441101e-003 - 2 - 0.3273011147975922 - <_> - - - - <_> - 0 8 20 6 -1. - <_> - 0 10 20 2 3. - 0 - 0.0466881617903709 - 6.1174212023615837e-003 - -0.5096886754035950 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 15 10 1 2 2. - 1 - 1.7876239726319909e-003 - 1 - 0.2580803036689758 - <_> - - - - <_> - 1 15 14 2 -1. - <_> - 8 15 7 2 2. - 0 - 0.0123152304440737 - 2 - 0.1836757063865662 - <_> - - - - <_> - 2 14 4 5 -1. - <_> - 4 14 2 5 2. - 0 - -5.9714429080486298e-003 - 0.0930178835988045 - -0.3348929882049561 - <_> - - <_> - - - - <_> - 17 15 2 3 -1. - <_> - 16 16 2 1 3. - 1 - -4.6226778067648411e-003 - -0.6085343956947327 - 1 - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 7 0 2 4 3. - 0 - -0.0189499892294407 - -0.6218826770782471 - 2 - <_> - - - - <_> - 6 0 14 20 -1. - <_> - 6 10 14 10 2. - 0 - -0.2678753137588501 - -0.4450582861900330 - 0.1146159991621971 - <_> - - <_> - - - - <_> - 13 1 1 9 -1. - <_> - 13 4 1 3 3. - 0 - 5.3505371324717999e-003 - 1 - 2 - <_> - - - - <_> - 15 0 1 4 -1. - <_> - 15 1 1 2 2. - 0 - 2.8202211251482368e-004 - -0.3321433067321777 - 0.1135293990373612 - <_> - - - - <_> - 13 3 2 2 -1. - <_> - 14 3 1 2 2. - 0 - -2.1514539548661560e-004 - 0.3994983136653900 - -0.0724125802516937 - <_> - - <_> - - - - <_> - 16 18 3 2 -1. - <_> - 16 19 3 1 2. - 0 - -7.1091961581259966e-004 - -0.3457595109939575 - 1 - <_> - - - - <_> - 17 17 2 3 -1. - <_> - 17 18 2 1 3. - 0 - 3.9453650970244780e-005 - -0.1411426067352295 - 2 - <_> - - - - <_> - 4 6 8 6 -1. - <_> - 4 6 4 3 2. - <_> - 8 9 4 3 2. - 0 - -0.0156620703637600 - 0.4707077145576477 - 0.0871639028191566 - <_> - - <_> - - - - <_> - 0 3 18 3 -1. - <_> - 6 3 6 3 3. - 0 - -0.0298166107386351 - 2 - 1 - <_> - - - - <_> - 16 1 3 2 -1. - <_> - 17 1 1 2 3. - 0 - 8.2333059981465340e-004 - -0.0149779003113508 - -0.4176484048366547 - <_> - - - - <_> - 4 7 4 3 -1. - <_> - 4 7 2 3 2. - 1 - -4.9664578400552273e-003 - 0.4401878118515015 - -2.0097310189157724e-003 - <_> - - <_> - - - - <_> - 0 17 20 3 -1. - <_> - 5 17 10 3 2. - 0 - 9.6796536818146706e-003 - 1 - 2 - <_> - - - - <_> - 15 16 4 2 -1. - <_> - 17 16 2 2 2. - 0 - 1.4388150302693248e-003 - -0.2845151126384735 - 0.1168095991015434 - <_> - - - - <_> - 5 13 2 5 -1. - <_> - 5 13 1 5 2. - 1 - -6.5185758285224438e-004 - 0.3425802886486054 - -0.2702035903930664 - <_> - - <_> - - - - <_> - 1 8 10 1 -1. - <_> - 1 8 5 1 2. - 1 - -0.0468712188303471 - -0.3965913057327271 - 1 - <_> - - - - <_> - 9 15 9 5 -1. - <_> - 12 15 3 5 3. - 0 - -0.0228672102093697 - -0.3472704887390137 - 2 - <_> - - - - <_> - 15 8 4 7 -1. - <_> - 16 8 2 7 2. - 0 - -1.1887500295415521e-003 - 0.2603670954704285 - -0.0428488589823246 - <_> - - <_> - - - - <_> - 12 4 3 1 -1. - <_> - 13 4 1 1 3. - 0 - 4.3433779501356184e-004 - 1 - -0.2283560931682587 - <_> - - - - <_> - 15 3 4 11 -1. - <_> - 16 3 2 11 2. - 0 - -0.0206000600010157 - -0.5013595223426819 - 2 - <_> - - - - <_> - 3 15 3 1 -1. - <_> - 4 16 1 1 3. - 1 - 3.2824440859258175e-003 - 0.1668307036161423 - -0.5025215744972229 - <_> - - <_> - - - - <_> - 13 8 3 4 -1. - <_> - 14 9 1 4 3. - 1 - -0.0190873108804226 - 0.4138129949569702 - 1 - <_> - - - - <_> - 4 2 12 2 -1. - <_> - 10 2 6 2 2. - 0 - -0.0112160202115774 - 0.1549807041883469 - 2 - <_> - - - - <_> - 2 1 16 7 -1. - <_> - 10 1 8 7 2. - 0 - 0.0777101665735245 - -0.2989561855792999 - 0.1754198074340820 - <_> - - <_> - - - - <_> - 12 1 3 4 -1. - <_> - 12 2 3 2 2. - 0 - 3.1873160041868687e-003 - -0.0854795798659325 - 1 - <_> - - - - <_> - 10 8 10 12 -1. - <_> - 10 12 10 4 3. - 0 - -0.1065699011087418 - -0.5129529237747192 - 2 - <_> - - - - <_> - 17 0 3 8 -1. - <_> - 17 4 3 4 2. - 0 - -0.0517798885703087 - -0.5017983913421631 - 0.3846678137779236 - <_> - - <_> - - - - <_> - 6 2 3 2 -1. - <_> - 7 2 1 2 3. - 0 - 1.5107400249689817e-003 - 1 - -0.3387457132339478 - <_> - - - - <_> - 4 1 3 8 -1. - <_> - 5 1 1 8 3. - 0 - 3.1244980636984110e-003 - 2 - -0.2165389955043793 - <_> - - - - <_> - 4 18 6 2 -1. - <_> - 7 18 3 2 2. - 0 - -1.3240240514278412e-003 - 0.3359499871730804 - -0.0120858000591397 - <_> - - <_> - - - - <_> - 8 0 2 6 -1. - <_> - 8 0 1 6 2. - 1 - -0.0169750303030014 - 0.5149319767951965 - 1 - <_> - - - - <_> - 2 1 3 14 -1. - <_> - 3 1 1 14 3. - 0 - 7.9635268775746226e-004 - 2 - -0.2236790955066681 - <_> - - - - <_> - 17 0 3 9 -1. - <_> - 18 0 1 9 3. - 0 - -8.4425378590822220e-003 - -0.5463718175888062 - 0.1247764974832535 - <_> - - <_> - - - - <_> - 6 5 3 5 -1. - <_> - 7 6 1 5 3. - 1 - 0.0147975198924541 - 1 - 0.4093017876148224 - <_> - - - - <_> - 6 8 2 5 -1. - <_> - 7 8 1 5 2. - 0 - 3.8537830114364624e-003 - 2 - 0.2596664130687714 - <_> - - - - <_> - 5 8 9 11 -1. - <_> - 8 8 3 11 3. - 0 - -0.0256849396973848 - 0.0465078204870224 - -0.3138757944107056 - <_> - - <_> - - - - <_> - 7 16 3 4 -1. - <_> - 8 16 1 4 3. - 0 - -1.9678380340337753e-003 - -0.3434877097606659 - 1 - <_> - - - - <_> - 10 12 3 6 -1. - <_> - 11 12 1 6 3. - 0 - 1.9392849644646049e-003 - 2 - -0.2307102978229523 - <_> - - - - <_> - 8 17 6 2 -1. - <_> - 10 17 2 2 3. - 0 - -5.7980217970907688e-003 - -0.4230223000049591 - 0.1847063004970551 - <_> - - <_> - - - - <_> - 12 0 8 4 -1. - <_> - 12 0 4 2 2. - <_> - 16 2 4 2 2. - 0 - 6.0432781465351582e-003 - 1 - 0.2098508030176163 - <_> - - - - <_> - 19 0 1 2 -1. - <_> - 19 1 1 1 2. - 0 - 2.2162510140333325e-004 - 2 - -0.3434562981128693 - <_> - - - - <_> - 18 1 2 1 -1. - <_> - 19 1 1 1 2. - 0 - -2.5901809567585588e-004 - -0.4024589955806732 - 0.0962833613157272 - <_> - - <_> - - - - <_> - 5 6 1 3 -1. - <_> - 4 7 1 1 3. - 1 - -4.6646450646221638e-003 - -0.4014798104763031 - 1 - <_> - - - - <_> - 6 6 2 1 -1. - <_> - 6 6 1 1 2. - 1 - 1.8331389874219894e-003 - -0.0741280466318130 - 2 - <_> - - - - <_> - 0 7 2 3 -1. - <_> - 0 8 2 1 3. - 0 - -5.4393261671066284e-003 - -0.7130433917045593 - 0.2514117062091827 - <_> - - <_> - - - - <_> - 14 7 2 5 -1. - <_> - 15 7 1 5 2. - 0 - -4.2101307772099972e-003 - 1 - 2 - <_> - - - - <_> - 16 5 2 7 -1. - <_> - 16 5 1 7 2. - 1 - -8.6573585867881775e-003 - 0.5525010824203491 - -0.0883102416992188 - <_> - - - - <_> - 14 8 4 6 -1. - <_> - 15 9 2 6 2. - 1 - -0.0256198290735483 - 0.4051348865032196 - -0.1208684965968132 - <_> - - <_> - - - - <_> - 4 8 4 4 -1. - <_> - 4 8 2 4 2. - 1 - -9.3565601855516434e-003 - 0.1485918015241623 - 1 - <_> - - - - <_> - 16 1 4 2 -1. - <_> - 18 1 2 2 2. - 0 - -9.7968382760882378e-004 - 0.1527637988328934 - 2 - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 14 0 6 2 2. - 0 - 0.0450819917023182 - -0.3300775885581970 - 0.4955345094203949 - <_> - - <_> - - - - <_> - 7 2 4 1 -1. - <_> - 8 2 2 1 2. - 0 - 2.0435510668903589e-003 - 1 - -0.5489503145217896 - <_> - - - - <_> - 18 7 2 3 -1. - <_> - 18 8 2 1 3. - 0 - -5.1532210782170296e-003 - -0.5994563102722168 - 2 - <_> - - - - <_> - 13 3 4 4 -1. - <_> - 13 4 4 2 2. - 0 - 2.5609789881855249e-003 - -0.0361974090337753 - 0.2546384930610657 - <_> - - <_> - - - - <_> - 0 8 17 4 -1. - <_> - 0 9 17 2 2. - 0 - -2.8830259107053280e-003 - 2 - 1 - <_> - - - - <_> - 11 8 1 4 -1. - <_> - 11 9 1 2 2. - 0 - 2.4457499966956675e-004 - 0.3666768074035645 - -0.0893483608961105 - <_> - - - - <_> - 12 8 8 2 -1. - <_> - 12 8 4 1 2. - <_> - 16 9 4 1 2. - 0 - 3.4641250967979431e-003 - -0.2252389043569565 - 0.1634045988321304 - -1.2140669822692871 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 10 6 1 -1. - <_> - 14 10 2 1 3. - 0 - 6.3124410808086395e-003 - 2 - 1 - <_> - - - - <_> - 5 8 2 5 -1. - <_> - 5 8 1 5 2. - 1 - -2.9899911023676395e-003 - 0.8207129836082459 - 0.0564621984958649 - <_> - - - - <_> - 12 9 2 1 -1. - <_> - 12 9 1 1 2. - 1 - -5.2643599919974804e-003 - 0.1824080049991608 - -0.4248731136322022 - <_> - - <_> - - - - <_> - 5 10 3 1 -1. - <_> - 6 10 1 1 3. - 0 - 2.4592089466750622e-003 - 1 - 2 - <_> - - - - <_> - 0 6 20 14 -1. - <_> - 0 13 20 7 2. - 0 - 0.4271934926509857 - -0.3385855853557587 - 0.1510023027658463 - <_> - - - - <_> - 9 5 4 8 -1. - <_> - 9 5 4 4 2. - 1 - 0.0302951093763113 - 0.7872424125671387 - -0.5837361812591553 - <_> - - <_> - - - - <_> - 6 1 9 2 -1. - <_> - 6 2 9 1 2. - 0 - 5.7569369673728943e-003 - 1 - 0.4281027019023895 - <_> - - - - <_> - 7 1 8 4 -1. - <_> - 7 2 8 2 2. - 0 - -9.9140219390392303e-003 - 0.3532198965549469 - 2 - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 8.0783478915691376e-003 - -0.4010753929615021 - 0.1252329051494598 - <_> - - <_> - - - - <_> - 0 1 9 7 -1. - <_> - 3 1 3 7 3. - 0 - -0.0358294509351254 - -0.3896307051181793 - 1 - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - 0.0306645501405001 - 2 - 0.6770191788673401 - <_> - - - - <_> - 6 4 10 3 -1. - <_> - 5 5 10 1 3. - 1 - -0.0135759301483631 - 0.3078981041908264 - -0.1121499016880989 - <_> - - <_> - - - - <_> - 12 0 8 7 -1. - <_> - 14 0 4 7 2. - 0 - -0.0311886090785265 - -0.5055090785026550 - 1 - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 10 0 2 6 3. - 0 - -0.0178854204714298 - -0.5299097895622253 - 2 - <_> - - - - <_> - 1 14 4 1 -1. - <_> - 1 14 2 1 2. - 1 - 2.3879480431787670e-004 - 0.2611249089241028 - -0.1288256049156189 - <_> - - <_> - - - - <_> - 5 9 3 4 -1. - <_> - 6 10 1 4 3. - 1 - 8.5746757686138153e-003 - 1 - 0.4892117977142334 - <_> - - - - <_> - 5 17 10 3 -1. - <_> - 5 18 10 1 3. - 0 - 2.3016470950096846e-003 - 2 - 0.1597906053066254 - <_> - - - - <_> - 7 14 6 4 -1. - <_> - 7 15 6 2 2. - 0 - 4.6683140099048615e-003 - -0.3868542015552521 - 0.2400287985801697 - <_> - - <_> - - - - <_> - 8 13 7 3 -1. - <_> - 8 14 7 1 3. - 0 - 5.3485399112105370e-003 - 1 - 0.3482562899589539 - <_> - - - - <_> - 8 7 8 3 -1. - <_> - 7 8 8 1 3. - 1 - 0.0237267091870308 - 2 - 0.5232967138290405 - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -3.0209170654416084e-004 - -0.4404784142971039 - -0.0333583392202854 - <_> - - <_> - - - - <_> - 9 3 9 6 -1. - <_> - 7 5 9 2 3. - 1 - -0.1688126027584076 - -0.6563115715980530 - 1 - <_> - - - - <_> - 18 18 1 2 -1. - <_> - 18 19 1 1 2. - 0 - -1.8069280486088246e-004 - -0.2755700945854187 - 2 - <_> - - - - <_> - 16 11 4 1 -1. - <_> - 17 12 2 1 2. - 1 - -2.7342080138623714e-003 - 0.4099690020084381 - 0.0312450490891933 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 5 1 4 1 3. - 0 - -3.1896680593490601e-003 - 2 - 1 - <_> - - - - <_> - 13 10 4 1 -1. - <_> - 14 10 2 1 2. - 0 - -1.6777559649199247e-003 - 0.3167428076267242 - -0.1304755955934525 - <_> - - - - <_> - 15 7 2 10 -1. - <_> - 15 7 1 5 2. - <_> - 16 12 1 5 2. - 0 - 7.5925810961052775e-004 - 0.0823821797966957 - 0.7472177743911743 - <_> - - <_> - - - - <_> - 6 0 3 20 -1. - <_> - 6 10 3 10 2. - 0 - 0.0176041796803474 - 1 - 2 - <_> - - - - <_> - 4 4 9 16 -1. - <_> - 4 8 9 8 2. - 0 - -0.2593610882759094 - 0.2695355117321014 - -0.3399210870265961 - <_> - - - - <_> - 2 9 3 3 -1. - <_> - 3 9 1 3 3. - 0 - -2.4794649798423052e-003 - 0.5064327120780945 - 0.0279949903488159 - <_> - - <_> - - - - <_> - 3 1 9 6 -1. - <_> - 6 1 3 6 3. - 0 - -0.0572446398437023 - -0.6963682174682617 - 1 - <_> - - - - <_> - 5 18 1 2 -1. - <_> - 5 19 1 1 2. - 0 - -2.9133851057849824e-004 - -0.3191956877708435 - 2 - <_> - - - - <_> - 4 0 6 5 -1. - <_> - 6 0 2 5 3. - 0 - 0.0308086797595024 - 0.1323781013488770 - -0.7674993872642517 - <_> - - <_> - - - - <_> - 16 8 3 7 -1. - <_> - 17 9 1 7 3. - 1 - 0.0280466601252556 - 1 - 0.6983258724212647 - <_> - - - - <_> - 15 3 3 7 -1. - <_> - 16 4 1 7 3. - 1 - -3.7829200737178326e-003 - 2 - -0.2143892049789429 - <_> - - - - <_> - 18 3 1 15 -1. - <_> - 18 8 1 5 3. - 0 - -0.0139114698395133 - 0.3377845883369446 - -0.0969437137246132 - <_> - - <_> - - - - <_> - 5 10 4 1 -1. - <_> - 6 10 2 1 2. - 0 - -9.6410012338310480e-004 - 0.2730368077754974 - 1 - <_> - - - - <_> - 7 8 3 12 -1. - <_> - 8 8 1 12 3. - 0 - -4.1028819978237152e-003 - 0.1893198043107987 - 2 - <_> - - - - <_> - 14 6 4 2 -1. - <_> - 14 6 2 1 2. - <_> - 16 7 2 1 2. - 0 - 7.6512782834470272e-004 - -0.3208284974098206 - 0.0818710774183273 - <_> - - <_> - - - - <_> - 5 18 2 2 -1. - <_> - 5 18 1 1 2. - <_> - 6 19 1 1 2. - 0 - -2.2203559638001025e-004 - -0.2967920005321503 - 1 - <_> - - - - <_> - 8 18 2 2 -1. - <_> - 8 18 1 1 2. - <_> - 9 19 1 1 2. - 0 - -2.5135980104096234e-004 - -0.2725948095321655 - 2 - <_> - - - - <_> - 3 18 2 2 -1. - <_> - 3 18 1 1 2. - <_> - 4 19 1 1 2. - 0 - -1.7842829402070493e-004 - -0.2255162000656128 - 0.2910535037517548 - <_> - - <_> - - - - <_> - 6 4 3 6 -1. - <_> - 7 5 1 6 3. - 1 - 0.0226796790957451 - 1 - 0.6059411168098450 - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -1.4839429641142488e-003 - 0.5834652781486511 - 2 - <_> - - - - <_> - 0 8 12 3 -1. - <_> - 6 8 6 3 2. - 0 - -0.0977759063243866 - -0.5198913812637329 - -0.0213510394096375 - <_> - - <_> - - - - <_> - 9 10 6 2 -1. - <_> - 11 10 2 2 3. - 0 - -2.1942430175840855e-003 - 2 - 1 - <_> - - - - <_> - 8 5 9 8 -1. - <_> - 11 5 3 8 3. - 0 - 0.0962721705436707 - -0.2386004030704498 - 0.4520868062973023 - <_> - - - - <_> - 16 8 4 12 -1. - <_> - 16 14 4 6 2. - 0 - 2.5899629108607769e-003 - -0.3229970932006836 - 0.2317180931568146 - <_> - - <_> - - - - <_> - 9 16 10 4 -1. - <_> - 9 17 10 2 2. - 0 - 5.4749320261180401e-003 - 1 - 0.2666141986846924 - <_> - - - - <_> - 12 0 1 20 -1. - <_> - 12 10 1 10 2. - 0 - -0.0149764101952314 - -0.4752564132213593 - 2 - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 9 10 1 1 9. - 0 - -7.3499558493494987e-003 - 0.3693670034408569 - -0.1043708026409149 - <_> - - <_> - - - - <_> - 5 4 3 2 -1. - <_> - 6 4 1 2 3. - 0 - 8.0258701927959919e-004 - 1 - -0.2654511928558350 - <_> - - - - <_> - 4 0 4 5 -1. - <_> - 5 0 2 5 2. - 0 - -3.1779240816831589e-003 - -0.2674618065357208 - 2 - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - -1.6361019515898079e-004 - -0.1390241980552673 - 0.2970061004161835 - <_> - - <_> - - - - <_> - 4 10 5 3 -1. - <_> - 3 11 5 1 3. - 1 - -3.0408808961510658e-003 - 1 - -0.1060713976621628 - <_> - - - - <_> - 0 0 4 12 -1. - <_> - 1 0 2 12 2. - 0 - -0.0129456296563149 - -0.4286445081233978 - 2 - <_> - - - - <_> - 7 1 8 14 -1. - <_> - 9 1 4 14 2. - 0 - -0.0179836507886648 - 0.5325013995170593 - 6.2068658880889416e-003 - <_> - - <_> - - - - <_> - 5 14 7 3 -1. - <_> - 5 15 7 1 3. - 0 - 3.5721210297197104e-003 - 1 - 0.2864323854446411 - <_> - - - - <_> - 15 7 4 2 -1. - <_> - 15 7 2 1 2. - <_> - 17 8 2 1 2. - 0 - 3.3481561113148928e-003 - 2 - 0.5270841717720032 - <_> - - - - <_> - 8 18 3 1 -1. - <_> - 9 18 1 1 3. - 0 - -2.7103780303150415e-004 - -0.4008390009403229 - -0.0115977097302675 - <_> - - <_> - - - - <_> - 1 9 6 6 -1. - <_> - 1 12 6 3 2. - 0 - -0.0353154800832272 - -0.6424800157546997 - 1 - <_> - - - - <_> - 9 4 5 3 -1. - <_> - 8 5 5 1 3. - 1 - -3.3448180183768272e-003 - 0.1679971069097519 - 2 - <_> - - - - <_> - 14 6 6 2 -1. - <_> - 14 6 3 2 2. - 1 - -0.0362117998301983 - -0.4404557943344116 - 7.2158249095082283e-003 - <_> - - <_> - - - - <_> - 8 18 3 2 -1. - <_> - 9 18 1 2 3. - 0 - 9.7624881891533732e-004 - 1 - -0.3322376906871796 - <_> - - - - <_> - 9 16 2 2 -1. - <_> - 9 16 1 1 2. - <_> - 10 17 1 1 2. - 0 - 3.9304429083131254e-004 - 2 - -0.2951816916465759 - <_> - - - - <_> - 0 8 13 8 -1. - <_> - 0 10 13 4 2. - 0 - -0.0909601002931595 - -0.2659667134284973 - 0.1909102052450180 - <_> - - <_> - - - - <_> - 12 6 4 7 -1. - <_> - 13 6 2 7 2. - 0 - -9.7260335460305214e-003 - 0.4341684877872467 - 1 - <_> - - - - <_> - 5 6 5 3 -1. - <_> - 5 7 5 1 3. - 0 - 6.3109961338341236e-003 - 2 - 0.3677924871444702 - <_> - - - - <_> - 11 18 2 2 -1. - <_> - 11 18 1 1 2. - <_> - 12 19 1 1 2. - 0 - -1.8113269470632076e-004 - -0.3860920071601868 - -0.0214635804295540 - -1.3826370239257813 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 9 6 2 -1. - <_> - 14 9 2 2 3. - 0 - 0.0210841801017523 - 2 - 1 - <_> - - - - <_> - 0 9 6 2 -1. - <_> - 2 9 2 2 3. - 0 - -2.1115990821272135e-003 - 0.7790507078170776 - -0.0917176082730293 - <_> - - - - <_> - 2 7 4 6 -1. - <_> - 3 7 2 6 2. - 0 - -3.7253301125019789e-003 - 0.0356180481612682 - -0.3550969958305359 - <_> - - <_> - - - - <_> - 6 4 10 4 -1. - <_> - 6 6 10 2 2. - 0 - -0.0492248684167862 - 2 - 1 - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 9 7 2 2 2. - 0 - -0.0122567899525166 - 0.2337438017129898 - -0.2072678953409195 - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 2 2. - 0 - -1.7591969808563590e-003 - 0.7123113274574280 - 0.1546854972839356 - <_> - - <_> - - - - <_> - 0 15 20 4 -1. - <_> - 5 15 10 4 2. - 0 - -0.0130725698545575 - 1 - -0.1741334944963455 - <_> - - - - <_> - 10 9 1 8 -1. - <_> - 10 13 1 4 2. - 0 - 0.0107139898464084 - -0.1303748935461044 - 2 - <_> - - - - <_> - 8 17 4 3 -1. - <_> - 9 17 2 3 2. - 0 - 2.7589630335569382e-003 - 0.4328486919403076 - -0.6620224118232727 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - -7.0322921965271235e-004 - -0.4283882081508637 - 1 - <_> - - - - <_> - 18 6 2 1 -1. - <_> - 18 6 1 1 2. - 1 - 3.2859561033546925e-003 - 2 - -0.4592688083648682 - <_> - - - - <_> - 0 15 1 4 -1. - <_> - 0 16 1 2 2. - 0 - -1.5731799649074674e-003 - -0.4618245959281921 - 0.1785615980625153 - <_> - - <_> - - - - <_> - 7 16 6 2 -1. - <_> - 9 16 2 2 3. - 0 - -6.4174369908869267e-003 - -0.5426235198974609 - 1 - <_> - - - - <_> - 5 10 3 1 -1. - <_> - 6 10 1 1 3. - 0 - 1.6610589809715748e-003 - -0.0642739832401276 - 2 - <_> - - - - <_> - 4 16 8 4 -1. - <_> - 6 16 4 4 2. - 0 - 0.0150998104363680 - 0.4024465978145599 - -0.6233041882514954 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - 1.6554270405322313e-003 - 1 - -0.4595316052436829 - <_> - - - - <_> - 1 7 4 1 -1. - <_> - 2 8 2 1 2. - 1 - -3.3705390524119139e-003 - 0.3076973855495453 - 2 - <_> - - - - <_> - 5 4 1 8 -1. - <_> - 5 8 1 4 2. - 0 - -0.0105688702315092 - 0.2830668985843658 - -0.1551387012004852 - <_> - - <_> - - - - <_> - 7 1 5 4 -1. - <_> - 7 3 5 2 2. - 0 - -0.0154609903693199 - 2 - 1 - <_> - - - - <_> - 7 1 5 4 -1. - <_> - 7 3 5 2 2. - 0 - 0.0105630801990628 - -0.2353373020887375 - 0.1786361038684845 - <_> - - - - <_> - 18 0 2 4 -1. - <_> - 18 1 2 2 2. - 0 - -2.5313820224255323e-003 - -0.3978996872901917 - 0.3467324972152710 - <_> - - <_> - - - - <_> - 0 0 8 3 -1. - <_> - 4 0 4 3 2. - 0 - -0.0113705396652222 - 1 - 2 - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - 5.1206751959398389e-004 - 0.3586297035217285 - -0.2671576142311096 - <_> - - - - <_> - 14 0 6 1 -1. - <_> - 17 0 3 1 2. - 0 - 2.0633509848266840e-003 - -0.2380741983652115 - 0.0895444527268410 - <_> - - <_> - - - - <_> - 6 2 3 3 -1. - <_> - 5 3 3 1 3. - 1 - 6.1831250786781311e-003 - 1 - -0.3458926081657410 - <_> - - - - <_> - 13 4 2 2 -1. - <_> - 13 5 2 1 2. - 0 - -1.5297930222004652e-003 - 2 - -0.0577442608773708 - <_> - - - - <_> - 18 4 2 3 -1. - <_> - 18 5 2 1 3. - 0 - -1.4521819539368153e-003 - -0.2264368981122971 - 0.3349255919456482 - <_> - - <_> - - - - <_> - 17 0 3 4 -1. - <_> - 18 1 1 4 3. - 1 - 9.1494834050536156e-003 - 1 - -0.4510245919227600 - <_> - - - - <_> - 16 1 4 4 -1. - <_> - 17 2 2 4 2. - 1 - -7.8258356079459190e-003 - -0.2057424038648605 - 2 - <_> - - - - <_> - 6 9 6 9 -1. - <_> - 8 9 2 9 3. - 0 - -9.1795083135366440e-003 - 0.2806491851806641 - -0.0194000694900751 - <_> - - <_> - - - - <_> - 6 8 2 5 -1. - <_> - 7 8 1 5 2. - 0 - 5.2864141762256622e-003 - 1 - 0.3874262869358063 - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - -0.0118954097852111 - 0.3312286138534546 - 2 - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -2.9768719105049968e-004 - -0.4147309958934784 - -0.0460053011775017 - <_> - - <_> - - - - <_> - 15 13 5 4 -1. - <_> - 15 14 5 2 2. - 0 - -9.9406214430928230e-003 - -0.6051043868064880 - 1 - <_> - - - - <_> - 19 11 1 2 -1. - <_> - 19 12 1 1 2. - 0 - 1.8322050891583785e-005 - -0.1504936069250107 - 2 - <_> - - - - <_> - 12 8 3 2 -1. - <_> - 13 9 1 2 3. - 1 - -8.9074727147817612e-003 - 0.4375177025794983 - 0.0445320010185242 - <_> - - <_> - - - - <_> - 15 15 1 2 -1. - <_> - 15 16 1 1 2. - 0 - 2.7458940166980028e-004 - 1 - 2 - <_> - - - - <_> - 14 15 2 3 -1. - <_> - 15 15 1 3 2. - 0 - -1.0605080024106428e-004 - 0.0342435203492641 - -0.3191792070865631 - <_> - - - - <_> - 14 4 4 3 -1. - <_> - 13 5 4 1 3. - 1 - 0.0134314503520727 - 0.0542852804064751 - 0.5108212828636169 - <_> - - <_> - - - - <_> - 3 17 1 3 -1. - <_> - 3 18 1 1 3. - 0 - 1.7373449736624025e-005 - -0.1385859996080399 - 1 - <_> - - - - <_> - 2 18 6 2 -1. - <_> - 2 19 6 1 2. - 0 - 2.6647070626495406e-005 - 2 - 0.2907449901103973 - <_> - - - - <_> - 2 16 3 3 -1. - <_> - 2 17 3 1 3. - 0 - 2.8135200409451500e-005 - -0.5269315838813782 - 0.0616778694093227 - <_> - - <_> - - - - <_> - 16 0 4 19 -1. - <_> - 17 0 2 19 2. - 0 - -1.4079789980314672e-004 - 1 - -0.1432975977659226 - <_> - - - - <_> - 5 16 6 4 -1. - <_> - 7 16 2 4 3. - 0 - -0.0103112598881125 - -0.4795865118503571 - 2 - <_> - - - - <_> - 5 6 6 6 -1. - <_> - 7 8 2 2 9. - 0 - -0.0278668403625488 - 0.3822689950466156 - 0.0106300497427583 - <_> - - <_> - - - - <_> - 17 0 2 2 -1. - <_> - 17 0 2 1 2. - 1 - 5.8228662237524986e-003 - 1 - 0.2977659106254578 - <_> - - - - <_> - 8 1 12 2 -1. - <_> - 14 1 6 2 2. - 0 - -8.7669547647237778e-003 - 2 - -0.1812476068735123 - <_> - - - - <_> - 0 0 20 2 -1. - <_> - 0 1 20 1 2. - 0 - -2.8466230724006891e-003 - -0.2423758953809738 - 0.3013916015625000 - <_> - - <_> - - - - <_> - 18 0 2 2 -1. - <_> - 18 0 1 2 2. - 1 - 6.4540808089077473e-003 - 1 - -0.4791144132614136 - <_> - - - - <_> - 17 2 3 3 -1. - <_> - 18 3 1 3 3. - 1 - 6.9421119987964630e-003 - 2 - -0.3898383080959320 - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 2 1 4 1 3. - 1 - -7.1991360746324062e-003 - -0.3809966146945953 - 0.1302327960729599 - <_> - - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - 0.0130202602595091 - 1 - 0.4958218038082123 - <_> - - - - <_> - 12 0 1 6 -1. - <_> - 12 2 1 2 3. - 0 - -0.0101138101890683 - 0.4556333124637604 - 2 - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - -0.0191832892596722 - 0.3351813852787018 - -0.1193813011050224 - <_> - - <_> - - - - <_> - 9 13 2 2 -1. - <_> - 9 14 2 1 2. - 0 - 1.0314499959349632e-003 - 1 - 2 - <_> - - - - <_> - 15 15 2 2 -1. - <_> - 16 15 1 2 2. - 0 - 5.7669691159389913e-005 - -0.3597772121429443 - 0.0260546803474426 - <_> - - - - <_> - 15 12 5 6 -1. - <_> - 15 15 5 3 2. - 0 - 0.0504474304616451 - 0.1676117032766342 - -0.2897059917449951 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 3.7453400436788797e-003 - 1 - -0.4643307924270630 - <_> - - - - <_> - 15 14 2 2 -1. - <_> - 15 14 1 1 2. - <_> - 16 15 1 1 2. - 0 - 4.7667181206634268e-005 - 2 - 0.1861021071672440 - <_> - - - - <_> - 15 14 2 2 -1. - <_> - 15 14 1 1 2. - <_> - 16 15 1 1 2. - 0 - -5.3708041377831250e-005 - 0.0562889389693737 - -0.4242719113826752 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 2 2. - 1 - -6.5939482301473618e-003 - -0.4742371141910553 - 1 - <_> - - - - <_> - 13 0 6 6 -1. - <_> - 15 0 2 6 3. - 0 - -0.0215480793267488 - -0.4293774068355560 - 2 - <_> - - - - <_> - 15 3 5 3 -1. - <_> - 14 4 5 1 3. - 1 - 0.0131881395354867 - 0.0116776097565889 - 0.4244090020656586 - <_> - - <_> - - - - <_> - 5 15 10 2 -1. - <_> - 10 15 5 2 2. - 0 - 0.0120911896228790 - 1 - 0.2361122965812683 - <_> - - - - <_> - 9 16 2 1 -1. - <_> - 10 16 1 1 2. - 0 - -6.2589373555965722e-005 - 2 - -0.2182220071554184 - <_> - - - - <_> - 2 14 4 2 -1. - <_> - 2 14 4 1 2. - 1 - 1.9446300575509667e-003 - -0.0254042092710733 - 0.4290224015712738 - <_> - - <_> - - - - <_> - 17 14 3 3 -1. - <_> - 16 15 3 1 3. - 1 - 7.7299331314861774e-003 - 1 - -0.5352454781532288 - <_> - - - - <_> - 18 14 1 4 -1. - <_> - 17 15 1 2 2. - 1 - -3.7915860302746296e-003 - -0.4354627132415772 - 2 - <_> - - - - <_> - 1 13 5 3 -1. - <_> - 1 14 5 1 3. - 0 - 4.3860040605068207e-003 - 0.1257684975862503 - -0.2814899981021881 - <_> - - <_> - - - - <_> - 3 12 1 2 -1. - <_> - 3 12 1 1 2. - 1 - -9.4350852305069566e-004 - 1 - -0.1702273041009903 - <_> - - - - <_> - 18 4 2 4 -1. - <_> - 18 6 2 2 2. - 0 - -1.1670179665088654e-003 - 0.2614187002182007 - 2 - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 0 1 1 2. - 1 - 2.9260620940476656e-003 - -0.1743763983249664 - 0.3853029906749725 - <_> - - <_> - - - - <_> - 1 14 8 2 -1. - <_> - 1 15 8 1 2. - 0 - 0.0145933004096150 - 1 - -0.5510435104370117 - <_> - - - - <_> - 16 2 4 3 -1. - <_> - 15 3 4 1 3. - 1 - 7.9177077859640121e-003 - 2 - 0.2770389020442963 - <_> - - - - <_> - 16 2 2 4 -1. - <_> - 16 4 2 2 2. - 0 - -3.1372120138257742e-003 - 0.1309324055910111 - -0.1695434004068375 - <_> - - <_> - - - - <_> - 19 5 1 3 -1. - <_> - 19 6 1 1 3. - 0 - -9.2021061573177576e-004 - 1 - 2 - <_> - - - - <_> - 11 6 4 6 -1. - <_> - 12 6 2 6 2. - 0 - -0.0104462597519159 - 0.4446859955787659 - -0.3947739899158478 - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 5 9 2 3 3. - 0 - -8.3597414195537567e-003 - 0.3490968048572540 - -0.0108871804550290 - <_> - - <_> - - - - <_> - 2 8 4 12 -1. - <_> - 2 8 2 6 2. - <_> - 4 14 2 6 2. - 0 - -9.7741633653640747e-003 - 0.2115772068500519 - 1 - <_> - - - - <_> - 12 5 6 1 -1. - <_> - 12 5 3 1 2. - 1 - 0.0125870797783136 - -0.1454294025897980 - 2 - <_> - - - - <_> - 7 9 12 5 -1. - <_> - 13 9 6 5 2. - 0 - -1.4933859929442406e-003 - -0.1509823054075241 - 0.5079010128974915 - <_> - - <_> - - - - <_> - 13 9 6 3 -1. - <_> - 13 10 6 1 3. - 0 - -5.0530377775430679e-003 - -0.2384579032659531 - 1 - <_> - - - - <_> - 19 18 1 2 -1. - <_> - 19 19 1 1 2. - 0 - -2.5890849065035582e-004 - -0.2515332102775574 - 2 - <_> - - - - <_> - 19 17 1 3 -1. - <_> - 19 18 1 1 3. - 0 - 4.8418638471048325e-005 - -0.0245332103222609 - 0.3037635087966919 - <_> - - <_> - - - - <_> - 15 9 2 4 -1. - <_> - 15 9 1 2 2. - <_> - 16 11 1 2 2. - 0 - 2.3038890212774277e-003 - 1 - 0.2812586128711700 - <_> - - - - <_> - 16 5 4 3 -1. - <_> - 16 6 4 1 3. - 0 - 3.6540660075843334e-003 - 2 - -0.3696573972702026 - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 4 1 3 1 3. - 1 - -3.3346249256283045e-003 - -0.3026607930660248 - 0.0882874205708504 - <_> - - <_> - - - - <_> - 10 1 6 3 -1. - <_> - 12 1 2 3 3. - 0 - -0.0119753498584032 - -0.4636023938655853 - 1 - <_> - - - - <_> - 13 9 3 1 -1. - <_> - 14 9 1 1 3. - 0 - -1.8564870115369558e-003 - 0.3994201123714447 - 2 - <_> - - - - <_> - 0 2 6 4 -1. - <_> - 0 2 3 2 2. - <_> - 3 4 3 2 2. - 0 - 1.5760740498080850e-003 - -0.1105775013566017 - 0.1678290963172913 - <_> - - <_> - - - - <_> - 0 8 19 4 -1. - <_> - 0 9 19 2 2. - 0 - 0.0412103496491909 - 1 - -0.6894599199295044 - <_> - - - - <_> - 7 5 3 6 -1. - <_> - 8 7 1 2 9. - 0 - -0.0106351096183062 - 2 - -0.0958253890275955 - <_> - - - - <_> - 4 4 1 3 -1. - <_> - 3 5 1 1 3. - 1 - -3.3335660118609667e-003 - -0.4643732011318207 - 0.2210482060909271 - <_> - - <_> - - - - <_> - 0 2 4 4 -1. - <_> - 0 2 2 2 2. - <_> - 2 4 2 2 2. - 0 - -2.4082309100776911e-003 - 0.2012844979763031 - 1 - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 6 1 1 1 9. - 0 - 5.5890781804919243e-003 - 2 - -0.5231484174728394 - <_> - - - - <_> - 19 2 1 3 -1. - <_> - 19 3 1 1 3. - 0 - 1.2177750468254089e-003 - 0.0313679501414299 - -0.4103857874870300 - <_> - - <_> - - - - <_> - 7 6 5 3 -1. - <_> - 7 7 5 1 3. - 0 - 8.6324941366910934e-003 - 1 - 0.3174157142639160 - <_> - - - - <_> - 7 5 1 4 -1. - <_> - 6 6 1 2 2. - 1 - 3.8473210297524929e-003 - 2 - -0.4385162889957428 - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 15 10 1 1 2. - 0 - -1.8842349527403712e-003 - 0.3814085125923157 - -0.0601031705737114 - -1.2412749528884888 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 10 9 2 -1. - <_> - 9 10 3 2 3. - 0 - -0.0236759595572948 - 1 - -0.3530888855457306 - <_> - - - - <_> - 15 5 2 6 -1. - <_> - 15 5 1 3 2. - <_> - 16 8 1 3 2. - 0 - -2.0480139646679163e-003 - 0.6987838745117188 - 2 - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 6 10 1 2 2. - 0 - 8.1840698840096593e-004 - -0.2836767137050629 - 0.4166736900806427 - <_> - - <_> - - - - <_> - 6 10 2 2 -1. - <_> - 6 10 1 1 2. - <_> - 7 11 1 1 2. - 0 - 1.2784999562427402e-003 - 1 - 2 - <_> - - - - <_> - 5 9 4 2 -1. - <_> - 6 9 2 2 2. - 0 - -3.4423400647938251e-003 - 0.3380788862705231 - -0.1665703952312470 - <_> - - - - <_> - 12 10 4 4 -1. - <_> - 12 10 4 2 2. - 1 - -7.4483961798250675e-003 - 0.6459196805953980 - -0.2201852947473526 - <_> - - <_> - - - - <_> - 0 9 3 10 -1. - <_> - 0 14 3 5 2. - 0 - 0.0111794704571366 - -0.3255267143249512 - 1 - <_> - - - - <_> - 3 3 15 9 -1. - <_> - 8 6 5 3 9. - 0 - -0.2319609969854355 - 2 - -0.0831679776310921 - <_> - - - - <_> - 8 1 8 18 -1. - <_> - 8 1 4 9 2. - <_> - 12 10 4 9 2. - 0 - -0.0431337095797062 - -0.1617254018783569 - 0.4620975852012634 - <_> - - <_> - - - - <_> - 3 6 3 11 -1. - <_> - 4 6 1 11 3. - 0 - -1.9728920597117394e-004 - 1 - -0.1566779017448425 - <_> - - - - <_> - 11 8 4 3 -1. - <_> - 12 8 2 3 2. - 0 - -2.3259329609572887e-003 - 0.3691489994525909 - 2 - <_> - - - - <_> - 17 8 2 3 -1. - <_> - 16 9 2 1 3. - 1 - -0.0103200804442167 - 0.4801501929759979 - -0.0890616029500961 - <_> - - <_> - - - - <_> - 3 1 6 5 -1. - <_> - 5 1 2 5 3. - 0 - -0.0200409702956676 - -0.5696743726730347 - 1 - <_> - - - - <_> - 6 18 2 2 -1. - <_> - 6 18 1 1 2. - <_> - 7 19 1 1 2. - 0 - -2.4495070101693273e-004 - -0.2371329963207245 - 2 - <_> - - - - <_> - 9 18 3 2 -1. - <_> - 10 18 1 2 3. - 0 - -1.1836830526590347e-003 - -0.3467139005661011 - 0.1447501927614212 - <_> - - <_> - - - - <_> - 15 6 4 9 -1. - <_> - 16 6 2 9 2. - 0 - -2.6744368951767683e-003 - 1 - -0.1266171038150787 - <_> - - - - <_> - 6 9 6 5 -1. - <_> - 8 9 2 5 3. - 0 - -5.1904888823628426e-003 - 2 - -0.0646489933133125 - <_> - - - - <_> - 15 4 3 15 -1. - <_> - 16 4 1 15 3. - 0 - -0.0198881290853024 - -0.4544137120246887 - 0.3984945118427277 - <_> - - <_> - - - - <_> - 14 4 2 16 -1. - <_> - 14 12 2 8 2. - 0 - -5.7462421245872974e-003 - -0.3676187098026276 - 1 - <_> - - - - <_> - 12 2 4 2 -1. - <_> - 12 3 4 1 2. - 0 - 4.4583589769899845e-003 - 2 - 0.3843587040901184 - <_> - - - - <_> - 19 5 1 6 -1. - <_> - 19 8 1 3 2. - 0 - -0.0125189498066902 - -0.6190282702445984 - 0.0190506093204021 - <_> - - <_> - - - - <_> - 5 0 9 6 -1. - <_> - 5 2 9 2 3. - 0 - -0.0777342766523361 - 0.5540528297424316 - 1 - <_> - - - - <_> - 6 3 3 3 -1. - <_> - 5 4 3 1 3. - 1 - 6.7193829454481602e-003 - 2 - -0.4130884110927582 - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 5 1 1 3. - 1 - 1.6520710196346045e-003 - 0.0732806622982025 - -0.2858909070491791 - <_> - - <_> - - - - <_> - 8 5 9 4 -1. - <_> - 8 6 9 2 2. - 0 - 0.0212263502180576 - 1 - 0.3687183856964111 - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 8 8 4 1 3. - 1 - 0.0112314503639936 - 2 - 0.3559111058712006 - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 0 18 1 1 2. - <_> - 1 19 1 1 2. - 0 - -1.8163130152970552e-004 - -0.3378145992755890 - -8.1584807485342026e-003 - <_> - - <_> - - - - <_> - 0 9 10 4 -1. - <_> - 0 10 10 2 2. - 0 - 0.0287261605262756 - 1 - -0.7275102138519287 - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 16 9 3 1 3. - 1 - 5.0780461169779301e-003 - 2 - 0.2664999961853027 - <_> - - - - <_> - 14 4 3 16 -1. - <_> - 15 4 1 16 3. - 0 - -5.1352521404623985e-004 - 0.1107368022203445 - -0.1820607930421829 - <_> - - <_> - - - - <_> - 15 4 4 1 -1. - <_> - 16 5 2 1 2. - 1 - -3.8125980645418167e-003 - -0.2837412953376770 - 1 - <_> - - - - <_> - 14 6 4 2 -1. - <_> - 14 6 2 1 2. - <_> - 16 7 2 1 2. - 0 - 9.1425428399816155e-004 - 2 - 0.2425926029682159 - <_> - - - - <_> - 15 5 5 3 -1. - <_> - 15 6 5 1 3. - 0 - 1.0090490104630589e-003 - 0.0601511783897877 - -0.2703930139541626 - <_> - - <_> - - - - <_> - 0 0 6 20 -1. - <_> - 2 0 2 20 3. - 0 - -0.0785531401634216 - -0.5580484271049500 - 1 - <_> - - - - <_> - 1 7 4 9 -1. - <_> - 2 7 2 9 2. - 0 - -6.5192081965506077e-003 - 0.2555760145187378 - 2 - <_> - - - - <_> - 1 19 4 1 -1. - <_> - 3 19 2 1 2. - 0 - 2.0706290379166603e-003 - -0.1060080006718636 - 0.2722511887550354 - <_> - - <_> - - - - <_> - 2 0 5 2 -1. - <_> - 2 0 5 1 2. - 1 - 0.0135557800531387 - 1 - -0.4807383120059967 - <_> - - - - <_> - 18 16 1 2 -1. - <_> - 18 17 1 1 2. - 0 - 7.0873757067602128e-005 - -0.1349904984235764 - 2 - <_> - - - - <_> - 7 9 3 1 -1. - <_> - 8 9 1 1 3. - 0 - -1.4444560511037707e-003 - 0.4376215040683746 - 0.0483292602002621 - <_> - - <_> - - - - <_> - 5 5 1 8 -1. - <_> - 5 7 1 4 2. - 0 - -3.6353049799799919e-003 - 1 - -0.1274320930242539 - <_> - - - - <_> - 9 9 3 2 -1. - <_> - 10 10 1 2 3. - 1 - -2.7163419872522354e-003 - 0.3370848894119263 - 2 - <_> - - - - <_> - 9 5 2 7 -1. - <_> - 10 5 1 7 2. - 0 - -7.4552530422806740e-003 - 0.5489431023597717 - -0.1023833006620407 - <_> - - <_> - - - - <_> - 0 17 11 3 -1. - <_> - 0 18 11 1 3. - 0 - 1.8306199926882982e-003 - 1 - 2 - <_> - - - - <_> - 6 14 5 4 -1. - <_> - 6 15 5 2 2. - 0 - 3.5198179539293051e-003 - -0.2461228072643280 - 0.1589493006467819 - <_> - - - - <_> - 3 18 1 2 -1. - <_> - 3 19 1 1 2. - 0 - -3.0126908677630126e-004 - -0.2778500020503998 - 0.2390199005603790 - <_> - - <_> - - - - <_> - 2 7 11 2 -1. - <_> - 2 8 11 1 2. - 0 - 3.1999459024518728e-003 - 2 - 1 - <_> - - - - <_> - 7 7 3 6 -1. - <_> - 7 9 3 2 3. - 0 - 1.4862619573250413e-003 - 0.4773843884468079 - -0.0313458889722824 - <_> - - - - <_> - 12 0 8 3 -1. - <_> - 14 0 4 3 2. - 0 - -1.3004139764234424e-003 - 0.0710472464561462 - -0.2155686020851135 - <_> - - <_> - - - - <_> - 2 2 16 1 -1. - <_> - 10 2 8 1 2. - 0 - 0.0155830001458526 - 1 - 0.2718724906444550 - <_> - - - - <_> - 10 0 6 3 -1. - <_> - 12 0 2 3 3. - 0 - 7.6356581412255764e-003 - 2 - -0.5107421875000000 - <_> - - - - <_> - 11 8 7 4 -1. - <_> - 11 9 7 2 2. - 0 - -1.4318820321932435e-003 - -0.1514018028974533 - 0.1420744955539703 - <_> - - <_> - - - - <_> - 8 7 4 3 -1. - <_> - 8 8 4 1 3. - 0 - -6.7814798094332218e-003 - 1 - 2 - <_> - - - - <_> - 5 8 11 12 -1. - <_> - 5 12 11 4 3. - 0 - -0.1180920004844666 - -0.6956285834312439 - 0.3327071070671082 - <_> - - - - <_> - 11 7 6 3 -1. - <_> - 13 9 2 3 3. - 1 - -0.0282771904021502 - 0.1113525032997131 - -0.1749171018600464 - <_> - - <_> - - - - <_> - 3 2 15 6 -1. - <_> - 3 4 15 2 3. - 0 - -0.0370332412421703 - 0.2888549864292145 - 1 - <_> - - - - <_> - 3 0 3 9 -1. - <_> - 4 0 1 9 3. - 0 - -4.9177031032741070e-003 - -0.4096606075763702 - 2 - <_> - - - - <_> - 8 18 2 2 -1. - <_> - 8 18 1 1 2. - <_> - 9 19 1 1 2. - 0 - -2.7518879505805671e-004 - -0.3116033077239990 - 0.0609950199723244 - <_> - - <_> - - - - <_> - 15 0 4 1 -1. - <_> - 16 0 2 1 2. - 0 - -2.3584270384162664e-003 - -0.5984649062156677 - 1 - <_> - - - - <_> - 17 0 3 2 -1. - <_> - 17 0 3 1 2. - 1 - -3.5775059368461370e-003 - 0.2460305988788605 - 2 - <_> - - - - <_> - 10 0 9 6 -1. - <_> - 13 0 3 6 3. - 0 - -4.1078119538724422e-003 - 0.0851800069212914 - -0.2062902003526688 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 16 7 1 6 3. - 1 - 0.0153008503839374 - 1 - 0.3005751073360443 - <_> - - - - <_> - 14 7 5 3 -1. - <_> - 14 8 5 1 3. - 0 - -0.0154834799468517 - -0.6835088133811951 - 2 - <_> - - - - <_> - 16 11 4 4 -1. - <_> - 17 12 2 4 2. - 1 - -5.7852710597217083e-003 - 0.2010021060705185 - -0.0906077399849892 - <_> - - <_> - - - - <_> - 16 10 4 5 -1. - <_> - 17 11 2 5 2. - 1 - 0.0144483102485538 - 1 - 0.2673301100730896 - <_> - - - - <_> - 10 4 9 3 -1. - <_> - 13 4 3 3 3. - 0 - -0.0313303098082542 - -0.5228815078735352 - 2 - <_> - - - - <_> - 5 9 2 4 -1. - <_> - 5 9 1 2 2. - <_> - 6 11 1 2 2. - 0 - -3.0594000127166510e-003 - 0.4095020890235901 - -0.0658239796757698 - <_> - - <_> - - - - <_> - 18 6 2 8 -1. - <_> - 19 6 1 8 2. - 0 - -1.8781309481710196e-003 - -0.2546320855617523 - 1 - <_> - - - - <_> - 19 3 1 15 -1. - <_> - 19 8 1 5 3. - 0 - -5.8503728359937668e-003 - 2 - -0.1226999983191490 - <_> - - - - <_> - 8 9 12 2 -1. - <_> - 14 9 6 2 2. - 0 - 2.6462681125849485e-003 - -0.0792164579033852 - 0.2920346856117249 - <_> - - <_> - - - - <_> - 18 1 2 10 -1. - <_> - 19 1 1 10 2. - 0 - 1.3989449944347143e-003 - 0.1214852035045624 - 1 - <_> - - - - <_> - 5 4 3 4 -1. - <_> - 6 5 1 4 3. - 1 - 9.7635984420776367e-003 - 2 - 0.2711051106452942 - <_> - - - - <_> - 4 4 4 3 -1. - <_> - 5 5 2 3 2. - 1 - -9.4864349812269211e-003 - 0.1017689034342766 - -0.3215374052524567 - <_> - - <_> - - - - <_> - 10 18 4 1 -1. - <_> - 11 18 2 1 2. - 0 - 1.5739769442006946e-003 - 1 - -0.5990861058235169 - <_> - - - - <_> - 0 4 3 3 -1. - <_> - 0 5 3 1 3. - 0 - 4.9365921877324581e-003 - 2 - -0.3875274062156677 - <_> - - - - <_> - 8 5 4 1 -1. - <_> - 9 5 2 1 2. - 0 - -5.0848699174821377e-004 - -0.1305653005838394 - 0.1271194070577622 - <_> - - <_> - - - - <_> - 12 8 8 8 -1. - <_> - 12 10 8 4 2. - 0 - -0.0963752716779709 - -0.6882132887840271 - 1 - <_> - - - - <_> - 7 7 8 7 -1. - <_> - 11 7 4 7 2. - 0 - -0.0803755968809128 - 0.4142817854881287 - 2 - <_> - - - - <_> - 11 7 4 4 -1. - <_> - 10 8 4 2 2. - 1 - -5.4449690505862236e-003 - 0.0821799263358116 - -0.1803694069385529 - <_> - - <_> - - - - <_> - 5 5 9 3 -1. - <_> - 4 6 9 1 3. - 1 - -7.6126731000840664e-003 - 0.1751305013895035 - 1 - <_> - - - - <_> - 6 9 4 3 -1. - <_> - 5 10 4 1 3. - 1 - -3.1007949728518724e-003 - 2 - -0.2153412997722626 - <_> - - - - <_> - 12 4 8 6 -1. - <_> - 10 6 8 2 3. - 1 - -0.0207996107637882 - 0.2902660965919495 - -0.2175351977348328 - <_> - - <_> - - - - <_> - 9 3 10 5 -1. - <_> - 9 3 5 5 2. - 1 - -0.1721380054950714 - 0.2273959070444107 - 1 - <_> - - - - <_> - 15 11 4 2 -1. - <_> - 16 11 2 2 2. - 0 - -1.7464880365878344e-003 - 0.1324007064104080 - 2 - <_> - - - - <_> - 8 8 8 10 -1. - <_> - 8 8 4 5 2. - <_> - 12 13 4 5 2. - 0 - -0.0684165209531784 - -0.6243054270744324 - -0.1054963991045952 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 15 1 4 1 3. - 1 - -0.0190705303102732 - 0.5503386855125427 - 1 - <_> - - - - <_> - 17 18 1 2 -1. - <_> - 17 19 1 1 2. - 0 - -2.8794098761864007e-004 - -0.3456557989120483 - 2 - <_> - - - - <_> - 13 18 7 2 -1. - <_> - 13 19 7 1 2. - 0 - 7.3958968278020620e-004 - 0.1893478035926819 - -0.0887412428855896 - <_> - - <_> - - - - <_> - 5 5 1 4 -1. - <_> - 4 6 1 2 2. - 1 - -7.5153419747948647e-003 - -0.4579710066318512 - 1 - <_> - - - - <_> - 2 4 2 4 -1. - <_> - 2 6 2 2 2. - 0 - -1.2848030310124159e-003 - 0.1282548010349274 - 2 - <_> - - - - <_> - 1 3 4 4 -1. - <_> - 1 3 2 2 2. - <_> - 3 5 2 2 2. - 0 - 1.2194210430607200e-003 - -0.2963027954101563 - 0.1925449967384338 - <_> - - <_> - - - - <_> - 0 0 7 12 -1. - <_> - 0 6 7 6 2. - 0 - -0.1616967022418976 - 1 - 2 - <_> - - - - <_> - 1 0 15 4 -1. - <_> - 1 1 15 2 2. - 0 - 0.0147475600242615 - -0.4486814141273499 - 0.1394135057926178 - <_> - - - - <_> - 14 3 3 14 -1. - <_> - 15 3 1 14 3. - 0 - -8.4396981401368976e-004 - 0.2038775980472565 - -0.0569351091980934 - <_> - - <_> - - - - <_> - 19 16 1 2 -1. - <_> - 19 16 1 1 2. - 1 - -1.2965890346094966e-004 - 1 - -0.1472209990024567 - <_> - - - - <_> - 3 4 4 6 -1. - <_> - 3 7 4 3 2. - 0 - -0.0137764196842909 - 0.2403997033834457 - 2 - <_> - - - - <_> - 9 5 5 3 -1. - <_> - 9 6 5 1 3. - 0 - -9.4375656917691231e-003 - 0.5507773756980896 - -0.1587789058685303 - <_> - - <_> - - - - <_> - 17 16 2 1 -1. - <_> - 18 16 1 1 2. - 0 - 1.1291690316284075e-004 - 1 - 0.1376917958259583 - <_> - - - - <_> - 8 17 12 3 -1. - <_> - 11 17 6 3 2. - 0 - 6.6032530739903450e-003 - -0.2590306997299194 - 2 - <_> - - - - <_> - 1 12 3 3 -1. - <_> - 1 13 3 1 3. - 0 - 2.0985701121389866e-003 - 0.2329708933830261 - -0.3715226054191589 - <_> - - <_> - - - - <_> - 7 17 8 2 -1. - <_> - 11 17 4 2 2. - 0 - -1.8329389858990908e-003 - 2 - 1 - <_> - - - - <_> - 13 17 4 2 -1. - <_> - 13 18 4 1 2. - 0 - -1.6420709434896708e-003 - 0.3599174916744232 - -0.1540133953094482 - <_> - - - - <_> - 11 17 6 3 -1. - <_> - 13 17 2 3 3. - 0 - 6.7886798642575741e-003 - 0.1858129054307938 - -0.6726999878883362 - <_> - - <_> - - - - <_> - 6 8 3 4 -1. - <_> - 6 10 3 2 2. - 0 - 1.6932019498199224e-003 - -0.1325549930334091 - 1 - <_> - - - - <_> - 6 8 3 6 -1. - <_> - 7 10 1 2 9. - 0 - -0.0100552495568991 - 0.3814426064491272 - 2 - <_> - - - - <_> - 7 4 3 5 -1. - <_> - 8 4 1 5 3. - 0 - -3.1679549720138311e-003 - 0.3222404122352600 - -0.0853457227349281 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 18 1 1 2. - <_> - 17 19 1 1 2. - 0 - 2.4724518880248070e-004 - 2 - 1 - <_> - - - - <_> - 12 0 8 1 -1. - <_> - 14 0 4 1 2. - 0 - -2.4610899854451418e-003 - 0.2450456023216248 - -0.4206804931163788 - <_> - - - - <_> - 16 17 2 2 -1. - <_> - 16 17 1 1 2. - <_> - 17 18 1 1 2. - 0 - 4.2370590381324291e-004 - 0.0967313721776009 - -0.3669528067111969 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 2 1 2 1 2. - 1 - -2.3991330526769161e-003 - 1 - 2 - <_> - - - - <_> - 3 0 5 10 -1. - <_> - 3 5 5 5 2. - 0 - -0.1054356992244721 - -0.7381129860877991 - 0.2855102121829987 - <_> - - - - <_> - 4 2 3 2 -1. - <_> - 4 3 3 1 2. - 0 - -2.9867719858884811e-003 - 0.1929198950529099 - -0.1480572968721390 - <_> - - <_> - - - - <_> - 8 9 8 2 -1. - <_> - 10 9 4 2 2. - 0 - -4.0492648258805275e-003 - 0.1076650023460388 - 1 - <_> - - - - <_> - 13 10 2 3 -1. - <_> - 14 10 1 3 2. - 0 - -1.1622729944065213e-003 - 2 - -0.2770144939422607 - <_> - - - - <_> - 11 6 1 10 -1. - <_> - 11 6 1 5 2. - 1 - -0.0278573296964169 - 0.3959366083145142 - -0.2095472067594528 - <_> - - <_> - - - - <_> - 5 15 12 2 -1. - <_> - 11 15 6 2 2. - 0 - 8.1511605530977249e-003 - 2 - 1 - <_> - - - - <_> - 6 3 14 2 -1. - <_> - 6 3 14 1 2. - 1 - 0.0151263196021318 - 0.0686264634132385 - 0.5377206802368164 - <_> - - - - <_> - 15 1 5 10 -1. - <_> - 15 6 5 5 2. - 0 - -0.1102060005068779 - -0.4916143119335175 - -0.0447802394628525 - <_> - - <_> - - - - <_> - 18 10 2 2 -1. - <_> - 18 10 2 1 2. - 1 - -1.6588929574936628e-003 - 1 - 2 - <_> - - - - <_> - 12 4 8 3 -1. - <_> - 14 6 4 3 2. - 1 - -0.0345302782952785 - 0.3673436939716339 - -0.0255865901708603 - <_> - - - - <_> - 2 0 16 2 -1. - <_> - 2 0 8 1 2. - <_> - 10 1 8 1 2. - 0 - 1.0060180211439729e-003 - 0.0274656191468239 - -0.3497331142425537 - <_> - - <_> - - - - <_> - 0 11 4 8 -1. - <_> - 0 13 4 4 2. - 0 - -0.0288439095020294 - -0.6510087847709656 - 1 - <_> - - - - <_> - 8 16 2 2 -1. - <_> - 8 16 1 1 2. - <_> - 9 17 1 1 2. - 0 - 2.4647780810482800e-004 - 2 - -0.1841081976890564 - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 6 0 6 1 2. - <_> - 12 1 6 1 2. - 0 - -7.4189889710396528e-004 - -0.0909421071410179 - 0.2252171933650971 - -1.2084549665451050 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 8 6 3 -1. - <_> - 2 8 2 3 3. - 0 - -0.0124075999483466 - 1 - 2 - <_> - - - - <_> - 2 2 13 2 -1. - <_> - 2 2 13 1 2. - 1 - -0.0119028203189373 - 0.6896551847457886 - -0.1357915997505188 - <_> - - - - <_> - 0 7 20 13 -1. - <_> - 5 7 10 13 2. - 0 - -0.0552386492490768 - -0.0443371683359146 - -0.4544630050659180 - <_> - - <_> - - - - <_> - 15 10 4 2 -1. - <_> - 15 10 2 1 2. - <_> - 17 11 2 1 2. - 0 - 3.3332619350403547e-003 - 1 - 2 - <_> - - - - <_> - 16 12 2 6 -1. - <_> - 16 15 2 3 2. - 0 - 4.8620607703924179e-003 - -0.3187302947044373 - 0.0701810494065285 - <_> - - - - <_> - 17 11 1 3 -1. - <_> - 16 12 1 1 3. - 1 - -3.1632129102945328e-003 - -0.3216075897216797 - 0.7013186812400818 - <_> - - <_> - - - - <_> - 0 0 16 9 -1. - <_> - 0 3 16 3 3. - 0 - 0.1859204024076462 - 1 - 0.3419271111488342 - <_> - - - - <_> - 0 15 6 4 -1. - <_> - 0 17 6 2 2. - 0 - 3.1807690393179655e-003 - -0.3331351876258850 - 2 - <_> - - - - <_> - 14 5 3 6 -1. - <_> - 14 7 3 2 3. - 0 - -9.4139128923416138e-003 - 0.3209159076213837 - -0.1249106004834175 - <_> - - <_> - - - - <_> - 16 8 3 5 -1. - <_> - 17 8 1 5 3. - 0 - 6.5205397550016642e-004 - 1 - -0.2381155937910080 - <_> - - - - <_> - 7 10 6 8 -1. - <_> - 9 10 2 8 3. - 0 - -5.0521180965006351e-003 - 2 - -0.1415542066097260 - <_> - - - - <_> - 14 11 5 4 -1. - <_> - 13 12 5 2 2. - 1 - 7.6105687767267227e-003 - 0.3218216896057129 - -0.2479781061410904 - <_> - - <_> - - - - <_> - 14 9 4 3 -1. - <_> - 15 9 2 3 2. - 0 - -1.6043110517784953e-003 - 0.1988386064767838 - 1 - <_> - - - - <_> - 5 9 9 1 -1. - <_> - 8 9 3 1 3. - 0 - -0.0274497494101524 - -0.6958116888999939 - 2 - <_> - - - - <_> - 16 1 3 6 -1. - <_> - 17 1 1 6 3. - 0 - 5.6960887741297483e-004 - 0.0507239289581776 - -0.2921861112117767 - <_> - - <_> - - - - <_> - 10 3 10 2 -1. - <_> - 10 3 5 1 2. - <_> - 15 4 5 1 2. - 0 - 2.7564789634197950e-003 - 1 - 0.2091111987829208 - <_> - - - - <_> - 2 1 18 1 -1. - <_> - 8 1 6 1 3. - 0 - -0.0110589200630784 - 2 - -0.2451695054769516 - <_> - - - - <_> - 14 3 5 4 -1. - <_> - 13 4 5 2 2. - 1 - 5.1102549768984318e-003 - -0.1065843999385834 - 0.4021154940128326 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 0 2 4 2. - 0 - 4.5064617879688740e-003 - 1 - -0.4630064070224762 - <_> - - - - <_> - 12 1 4 5 -1. - <_> - 13 1 2 5 2. - 0 - 4.2800018563866615e-003 - 2 - -0.3939634859561920 - <_> - - - - <_> - 9 9 7 3 -1. - <_> - 9 10 7 1 3. - 0 - 7.8124259598553181e-003 - 0.1413034051656723 - -0.2867102026939392 - <_> - - <_> - - - - <_> - 19 3 1 16 -1. - <_> - 19 11 1 8 2. - 0 - 0.0448360592126846 - 1 - -0.5025771260261536 - <_> - - - - <_> - 4 0 16 3 -1. - <_> - 8 0 8 3 2. - 0 - 0.0179867409169674 - 2 - 0.3131875991821289 - <_> - - - - <_> - 8 0 12 3 -1. - <_> - 12 0 4 3 3. - 0 - -6.0726520605385303e-003 - 0.0985042825341225 - -0.2250078022480011 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - -0.0185787305235863 - -0.5145397782325745 - 1 - <_> - - - - <_> - 12 4 5 8 -1. - <_> - 12 8 5 4 2. - 0 - 0.0357174314558506 - 2 - 0.3184826970100403 - <_> - - - - <_> - 6 9 2 4 -1. - <_> - 5 10 2 2 2. - 1 - -1.8269789870828390e-003 - 0.1409046947956085 - -0.1866911053657532 - <_> - - <_> - - - - <_> - 13 6 2 3 -1. - <_> - 12 7 2 1 3. - 1 - -5.4818098433315754e-003 - 0.1932141035795212 - 1 - <_> - - - - <_> - 10 5 3 1 -1. - <_> - 11 5 1 1 3. - 0 - -6.0164718888700008e-004 - -0.3816767036914825 - 2 - <_> - - - - <_> - 10 6 4 5 -1. - <_> - 11 6 2 5 2. - 0 - 9.9322739988565445e-003 - -0.0585194192826748 - 0.4897005856037140 - <_> - - <_> - - - - <_> - 15 17 4 2 -1. - <_> - 17 17 2 2 2. - 0 - 1.4053160557523370e-003 - 2 - 1 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 2 1 2. - 1 - 5.2271760068833828e-003 - 0.2507211863994598 - -0.6575474739074707 - <_> - - - - <_> - 15 7 3 6 -1. - <_> - 13 9 3 2 3. - 1 - -0.0149310501292348 - 0.0556698516011238 - -0.2466907948255539 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 1 2 3 2. - 1 - -0.0128263598307967 - 1 - 2 - <_> - - - - <_> - 0 2 6 3 -1. - <_> - 2 3 2 1 9. - 0 - -0.0275873504579067 - -0.3222570121288300 - 0.5648475289344788 - <_> - - - - <_> - 2 15 3 2 -1. - <_> - 3 16 1 2 3. - 1 - -4.7543710097670555e-003 - -0.4914292991161346 - -8.8634714484214783e-003 - <_> - - <_> - - - - <_> - 19 8 1 2 -1. - <_> - 19 9 1 1 2. - 0 - -2.7212230488657951e-003 - -0.5790050029754639 - 1 - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 8 8 2 2 2. - 0 - 6.6132671199738979e-003 - 2 - 0.4555436074733734 - <_> - - - - <_> - 4 8 9 2 -1. - <_> - 7 8 3 2 3. - 0 - -0.0114358402788639 - 0.1525050997734070 - -0.1216759979724884 - <_> - - <_> - - - - <_> - 6 10 11 6 -1. - <_> - 6 13 11 3 2. - 0 - -0.0190959908068180 - -0.4441640079021454 - 1 - <_> - - - - <_> - 0 8 20 5 -1. - <_> - 5 8 10 5 2. - 0 - -0.1267229020595551 - 2 - 0.1162242963910103 - <_> - - - - <_> - 8 12 6 3 -1. - <_> - 10 12 2 3 3. - 0 - -0.0183735191822052 - 0.4124867916107178 - -0.3030383884906769 - <_> - - <_> - - - - <_> - 2 2 14 18 -1. - <_> - 9 2 7 18 2. - 0 - -0.3242569863796234 - 0.4472106099128723 - 1 - <_> - - - - <_> - 10 3 1 8 -1. - <_> - 8 5 1 4 2. - 1 - -3.8764779455959797e-003 - 0.0759313032031059 - 2 - <_> - - - - <_> - 0 14 8 2 -1. - <_> - 2 14 4 2 2. - 0 - -7.5138150714337826e-004 - 0.0119768800213933 - -0.3627575933933258 - <_> - - <_> - - - - <_> - 6 13 3 3 -1. - <_> - 7 14 1 3 3. - 1 - 6.7106341011822224e-003 - 1 - -0.3952117860317230 - <_> - - - - <_> - 3 2 4 3 -1. - <_> - 2 3 4 1 3. - 1 - -6.5366760827600956e-003 - -0.3031159937381744 - 2 - <_> - - - - <_> - 5 6 3 1 -1. - <_> - 6 6 1 1 3. - 0 - -5.5684632388874888e-004 - -0.1583296060562134 - 0.1712387949228287 - <_> - - <_> - - - - <_> - 2 5 9 1 -1. - <_> - 5 5 3 1 3. - 0 - -3.9269351400434971e-003 - 0.2003450989723206 - 1 - <_> - - - - <_> - 6 2 8 3 -1. - <_> - 6 3 8 1 3. - 0 - -0.0163224693387747 - 0.4127106964588165 - 2 - <_> - - - - <_> - 1 0 16 5 -1. - <_> - 5 0 8 5 2. - 0 - 0.0550387613475323 - -0.1792605072259903 - 0.2630352973937988 - <_> - - <_> - - - - <_> - 8 3 3 2 -1. - <_> - 9 3 1 2 3. - 0 - 1.0095089673995972e-003 - 1 - 2 - <_> - - - - <_> - 0 0 20 1 -1. - <_> - 5 0 10 1 2. - 0 - -9.8581332713365555e-003 - 0.2488421946763992 - -0.0392008610069752 - <_> - - - - <_> - 9 4 3 4 -1. - <_> - 9 5 3 2 2. - 0 - -7.0780781097710133e-003 - 0.3724318146705627 - -0.3773984909057617 - <_> - - <_> - - - - <_> - 18 4 1 2 -1. - <_> - 18 4 1 1 2. - 1 - 2.1169960964471102e-003 - 1 - 0.1766545027494431 - <_> - - - - <_> - 8 0 9 4 -1. - <_> - 11 3 3 4 3. - 1 - 0.1588390022516251 - 2 - 0.7263122200965881 - <_> - - - - <_> - 5 12 9 2 -1. - <_> - 8 12 3 2 3. - 0 - -0.0424889884889126 - 0.4856871962547302 - -0.1442703008651733 - <_> - - <_> - - - - <_> - 3 15 2 2 -1. - <_> - 3 15 1 1 2. - <_> - 4 16 1 1 2. - 0 - -9.4166352937463671e-005 - 0.1704587936401367 - 1 - <_> - - - - <_> - 3 15 2 2 -1. - <_> - 3 15 1 1 2. - <_> - 4 16 1 1 2. - 0 - 8.1764090282376856e-005 - -0.3194082975387573 - 2 - <_> - - - - <_> - 8 13 3 4 -1. - <_> - 9 14 1 4 3. - 1 - 5.4165818728506565e-003 - 0.0998466610908508 - -0.4105955064296722 - <_> - - <_> - - - - <_> - 8 13 3 4 -1. - <_> - 9 14 1 4 3. - 1 - -6.1865211464464664e-003 - -0.3849251866340637 - 1 - <_> - - - - <_> - 14 17 1 3 -1. - <_> - 14 18 1 1 3. - 0 - 6.5089072450064123e-005 - 2 - 0.1631945967674255 - <_> - - - - <_> - 15 16 1 2 -1. - <_> - 15 17 1 1 2. - 0 - -6.8352972448337823e-005 - 0.2118214070796967 - -0.2531152069568634 - <_> - - <_> - - - - <_> - 13 18 3 2 -1. - <_> - 13 19 3 1 2. - 0 - -4.0968839311972260e-004 - 1 - 2 - <_> - - - - <_> - 13 17 6 2 -1. - <_> - 13 18 6 1 2. - 0 - 3.5239830613136292e-003 - -0.1185958012938500 - -0.7978060841560364 - <_> - - - - <_> - 5 19 2 1 -1. - <_> - 6 19 1 1 2. - 0 - -8.3400387666188180e-005 - 0.2294069975614548 - -0.0387824587523937 - <_> - - <_> - - - - <_> - 2 9 2 4 -1. - <_> - 2 11 2 2 2. - 0 - -2.7096238918602467e-003 - 1 - 2 - <_> - - - - <_> - 5 1 3 3 -1. - <_> - 4 2 3 1 3. - 1 - -6.8883160129189491e-003 - -0.5997892022132874 - 0.3474820852279663 - <_> - - - - <_> - 3 10 1 2 -1. - <_> - 3 11 1 1 2. - 0 - 1.1571759823709726e-003 - -0.1540699005126953 - 0.1357392072677612 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 8 9 3 1 2. - 0 - 9.5913361292332411e-004 - -0.1023603007197380 - 1 - <_> - - - - <_> - 2 5 7 2 -1. - <_> - 2 6 7 1 2. - 0 - -0.0183335691690445 - -0.5540021061897278 - 2 - <_> - - - - <_> - 0 0 12 3 -1. - <_> - 3 0 6 3 2. - 0 - 0.0242580901831388 - 0.1427007019519806 - 0.7207757830619812 - <_> - - <_> - - - - <_> - 12 5 5 4 -1. - <_> - 12 5 5 2 2. - 1 - 0.0105414101853967 - 2 - 1 - <_> - - - - <_> - 17 1 3 17 -1. - <_> - 18 1 1 17 3. - 0 - 9.1231325641274452e-003 - 0.1921480000019074 - -0.3619061112403870 - <_> - - - - <_> - 7 12 2 2 -1. - <_> - 7 13 2 1 2. - 0 - -1.4598550042137504e-003 - 0.2895075082778931 - -0.1876741051673889 - <_> - - <_> - - - - <_> - 19 4 1 8 -1. - <_> - 19 6 1 4 2. - 0 - -0.0118190702050924 - -0.5365375876426697 - 1 - <_> - - - - <_> - 11 3 6 3 -1. - <_> - 14 3 3 3 2. - 0 - -0.0324460007250309 - -0.6871374845504761 - 2 - <_> - - - - <_> - 3 0 17 2 -1. - <_> - 3 1 17 1 2. - 0 - -2.3319718893617392e-003 - -0.0887513682246208 - 0.1599199026823044 - <_> - - <_> - - - - <_> - 15 1 3 4 -1. - <_> - 15 3 3 2 2. - 0 - -6.5151029266417027e-003 - 1 - 2 - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 8 1 2 2. - 1 - 2.5015550199896097e-003 - 0.0682858899235725 - 0.5796269178390503 - <_> - - - - <_> - 7 17 4 2 -1. - <_> - 9 17 2 2 2. - 0 - 7.8799802577123046e-004 - -0.1912872046232224 - 0.0972898602485657 - <_> - - <_> - - - - <_> - 6 1 6 1 -1. - <_> - 8 1 2 1 3. - 0 - 6.0783070512115955e-003 - 1 - -0.6114767193794251 - <_> - - - - <_> - 13 3 2 10 -1. - <_> - 13 3 1 5 2. - <_> - 14 8 1 5 2. - 0 - -8.7201576679944992e-003 - 0.4764815866947174 - 2 - <_> - - - - <_> - 18 1 2 4 -1. - <_> - 18 1 1 2 2. - <_> - 19 3 1 2 2. - 0 - 3.5847601247951388e-004 - 0.0901171192526817 - -0.1677066981792450 - <_> - - <_> - - - - <_> - 15 2 4 8 -1. - <_> - 16 3 2 8 2. - 1 - -0.0131786298006773 - 1 - -0.1275572031736374 - <_> - - - - <_> - 17 3 3 14 -1. - <_> - 17 3 3 7 2. - 1 - -0.0853650718927383 - 0.2692433893680573 - 2 - <_> - - - - <_> - 8 7 4 3 -1. - <_> - 9 7 2 3 2. - 0 - 3.3002009149640799e-003 - -0.1848026961088181 - 0.5876078009605408 - <_> - - <_> - - - - <_> - 8 9 4 3 -1. - <_> - 7 10 4 1 3. - 1 - -0.0116014601662755 - 0.3384912014007568 - 1 - <_> - - - - <_> - 10 13 3 3 -1. - <_> - 11 14 1 3 3. - 1 - 9.9076535552740097e-003 - 2 - -0.5580905079841614 - <_> - - - - <_> - 7 15 7 4 -1. - <_> - 7 16 7 2 2. - 0 - 4.3782261200249195e-003 - -0.0789330974221230 - 0.2238557934761047 - <_> - - <_> - - - - <_> - 6 0 10 4 -1. - <_> - 6 1 10 2 2. - 0 - -0.0470821782946587 - 0.6891711950302124 - 1 - <_> - - - - <_> - 15 14 3 1 -1. - <_> - 16 15 1 1 3. - 1 - -3.2685339101590216e-004 - 0.1213957965373993 - 2 - <_> - - - - <_> - 4 10 3 2 -1. - <_> - 4 11 3 1 2. - 0 - 7.8715756535530090e-003 - -0.0758802965283394 - -0.6519117951393127 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - -3.9275310700759292e-004 - 1 - 2 - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -3.4211258753202856e-004 - -0.3408266901969910 - 0.3723052144050598 - <_> - - - - <_> - 11 12 2 4 -1. - <_> - 11 12 1 2 2. - <_> - 12 14 1 2 2. - 0 - 5.6030962150543928e-004 - 0.0182758700102568 - -0.2719259858131409 - <_> - - <_> - - - - <_> - 10 8 3 8 -1. - <_> - 11 9 1 8 3. - 1 - -0.0244393497705460 - -0.3489474058151245 - 1 - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - 0.0121281202882528 - -4.1957078501582146e-003 - 2 - <_> - - - - <_> - 11 11 3 2 -1. - <_> - 11 12 3 1 2. - 0 - 2.2948130499571562e-003 - -0.0208413004875183 - 0.8015155792236328 - <_> - - <_> - - - - <_> - 6 17 14 2 -1. - <_> - 6 17 7 1 2. - <_> - 13 18 7 1 2. - 0 - -3.6386020947247744e-003 - 1 - 2 - <_> - - - - <_> - 2 18 8 2 -1. - <_> - 2 18 4 1 2. - <_> - 6 19 4 1 2. - 0 - -6.3949287869036198e-004 - -0.2538977861404419 - 0.3660629093647003 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - 2.0897389913443476e-004 - -0.1417797952890396 - 0.1414828002452850 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -6.7888460762333125e-005 - 2 - 1 - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 3.9580671000294387e-004 - -0.2080799937248230 - 0.2369098067283630 - <_> - - - - <_> - 14 14 4 2 -1. - <_> - 15 14 2 2 2. - 0 - 1.2493260437622666e-003 - 0.2467972040176392 - -0.2203249931335449 - <_> - - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - -4.6679278602823615e-004 - -0.3399092853069305 - 1 - <_> - - - - <_> - 19 15 1 3 -1. - <_> - 18 16 1 1 3. - 1 - 1.1740219779312611e-003 - 0.1215322017669678 - 2 - <_> - - - - <_> - 16 8 4 6 -1. - <_> - 16 8 2 3 2. - <_> - 18 11 2 3 2. - 0 - -7.1949949488043785e-003 - 0.3354294002056122 - -0.3917897939682007 - <_> - - <_> - - - - <_> - 6 17 2 2 -1. - <_> - 6 17 1 1 2. - <_> - 7 18 1 1 2. - 0 - 3.2422799267806113e-004 - 1 - -0.2559385895729065 - <_> - - - - <_> - 3 7 6 3 -1. - <_> - 5 9 2 3 3. - 1 - 0.0243748798966408 - 2 - 0.4243488013744354 - <_> - - - - <_> - 3 0 3 18 -1. - <_> - 4 0 1 18 3. - 0 - 2.6271429378539324e-003 - 0.1023764014244080 - -0.2690742015838623 - -1.2229189872741699 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 4 10 4 -1. - <_> - 7 5 10 2 2. - 1 - -0.0185865405946970 - 1 - -0.3652325868606567 - <_> - - - - <_> - 3 9 4 6 -1. - <_> - 3 9 2 3 2. - <_> - 5 12 2 3 2. - 0 - -7.4109081178903580e-003 - 0.7742745280265808 - 2 - <_> - - - - <_> - 10 1 8 7 -1. - <_> - 12 3 4 7 2. - 1 - -0.0537111498415470 - 0.2421368062496185 - -0.3780384063720703 - <_> - - <_> - - - - <_> - 14 8 3 1 -1. - <_> - 15 9 1 1 3. - 1 - 6.9198510609567165e-003 - 1 - 2 - <_> - - - - <_> - 16 3 3 12 -1. - <_> - 17 7 1 4 9. - 0 - -0.0307591892778873 - 0.1352369040250778 - -0.2795734107494354 - <_> - - - - <_> - 5 12 3 3 -1. - <_> - 6 13 1 3 3. - 1 - -8.9597534388303757e-003 - -0.6068031787872315 - 0.6957908272743225 - <_> - - <_> - - - - <_> - 0 1 17 6 -1. - <_> - 0 3 17 2 3. - 0 - 0.0718162879347801 - 1 - 0.3064750134944916 - <_> - - - - <_> - 0 18 18 2 -1. - <_> - 6 18 6 2 3. - 0 - -0.0116229997947812 - 2 - -0.2269039005041122 - <_> - - - - <_> - 2 15 3 2 -1. - <_> - 2 15 3 1 2. - 1 - -1.0627550072968006e-003 - 0.4437439143657684 - -0.3182457983493805 - <_> - - <_> - - - - <_> - 18 1 2 6 -1. - <_> - 19 1 1 6 2. - 0 - -7.3452957440167665e-004 - -0.2268460988998413 - 1 - <_> - - - - <_> - 11 7 8 4 -1. - <_> - 11 7 8 2 2. - 1 - -0.0493037104606628 - 0.3425320088863373 - 2 - <_> - - - - <_> - 6 10 3 3 -1. - <_> - 7 11 1 1 9. - 0 - -3.2011170405894518e-003 - 0.3091321885585785 - -0.2007824033498764 - <_> - - <_> - - - - <_> - 5 5 3 8 -1. - <_> - 6 5 1 8 3. - 0 - 0.0147066498175263 - 2 - 1 - <_> - - - - <_> - 2 8 10 2 -1. - <_> - 2 8 5 2 2. - 1 - -0.1179851964116097 - -0.9451779127120972 - 0.5742821097373962 - <_> - - - - <_> - 2 9 6 5 -1. - <_> - 4 9 2 5 3. - 0 - -0.0166953597217798 - 0.2456703037023544 - -0.1170765012502670 - <_> - - <_> - - - - <_> - 8 7 5 3 -1. - <_> - 7 8 5 1 3. - 1 - -6.8853241391479969e-003 - 1 - 2 - <_> - - - - <_> - 2 8 3 10 -1. - <_> - 3 8 1 10 3. - 0 - 7.8145717270672321e-004 - 0.3950872123241425 - -0.1002305969595909 - <_> - - - - <_> - 4 2 15 9 -1. - <_> - 4 5 15 3 3. - 0 - 0.2758679091930389 - -0.1465985029935837 - 0.7794203162193298 - <_> - - <_> - - - - <_> - 9 7 9 3 -1. - <_> - 8 8 9 1 3. - 1 - -0.0264236796647310 - -0.3286024928092957 - 1 - <_> - - - - <_> - 2 12 4 3 -1. - <_> - 2 13 4 1 3. - 0 - 1.8955089617520571e-003 - 0.1504637002944946 - 2 - <_> - - - - <_> - 5 12 6 1 -1. - <_> - 5 12 3 1 2. - 1 - -5.7396688498556614e-003 - -0.4049299061298370 - 0.1525736004114151 - <_> - - <_> - - - - <_> - 9 9 3 3 -1. - <_> - 10 10 1 1 9. - 0 - -7.8677870333194733e-003 - 0.2202492952346802 - 1 - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - -1.9029570103157312e-004 - -0.3722215890884399 - 2 - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 0 18 1 1 2. - <_> - 1 19 1 1 2. - 0 - 2.9406580142676830e-004 - 0.1035036966204643 - -0.3607507050037384 - <_> - - <_> - - - - <_> - 6 6 8 3 -1. - <_> - 8 6 4 3 2. - 0 - -6.1921158339828253e-004 - 2 - 1 - <_> - - - - <_> - 9 7 9 6 -1. - <_> - 12 7 3 6 3. - 0 - -0.0466256998479366 - 0.2524962127208710 - -0.3234030902385712 - <_> - - - - <_> - 5 16 1 4 -1. - <_> - 5 17 1 2 2. - 0 - 8.0430079833604395e-005 - -0.0877122431993485 - 0.2522406876087189 - <_> - - <_> - - - - <_> - 9 9 4 1 -1. - <_> - 10 9 2 1 2. - 0 - 2.9532159678637981e-003 - 1 - 0.4817107915878296 - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 15 1 2 4 2. - 0 - -4.5338911004364491e-003 - -0.4518854916095734 - 2 - <_> - - - - <_> - 0 0 6 3 -1. - <_> - 3 0 3 3 2. - 0 - -0.0115440804511309 - 0.2543467879295349 - -0.0841404199600220 - <_> - - <_> - - - - <_> - 0 0 4 3 -1. - <_> - 2 0 2 3 2. - 0 - 1.3043760554865003e-003 - -0.1012134999036789 - 1 - <_> - - - - <_> - 0 12 8 2 -1. - <_> - 2 12 4 2 2. - 0 - -3.4115801099687815e-003 - 0.5219349861145020 - 2 - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - -1.5855060191825032e-003 - 0.6892321109771729 - -0.1057000011205673 - <_> - - <_> - - - - <_> - 11 6 9 3 -1. - <_> - 10 7 9 1 3. - 1 - -0.0298677496612072 - -0.4336254894733429 - 1 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -2.5652049225755036e-004 - 2 - -0.0334308892488480 - <_> - - - - <_> - 16 14 3 3 -1. - <_> - 15 15 3 1 3. - 1 - -3.9234450086951256e-003 - -0.2556918859481812 - 0.4426513016223908 - <_> - - <_> - - - - <_> - 11 4 1 3 -1. - <_> - 11 5 1 1 3. - 0 - 4.6491571702063084e-003 - 1 - 0.6287816762924194 - <_> - - - - <_> - 0 6 12 9 -1. - <_> - 0 9 12 3 3. - 0 - -0.2772760987281799 - 0.7100644707679749 - 2 - <_> - - - - <_> - 1 9 18 10 -1. - <_> - 10 9 9 10 2. - 0 - -0.2244834005832672 - 0.3052004873752594 - -0.0929472818970680 - <_> - - <_> - - - - <_> - 12 3 5 10 -1. - <_> - 12 8 5 5 2. - 0 - 0.0387046895921230 - 2 - 1 - <_> - - - - <_> - 1 6 12 14 -1. - <_> - 1 13 12 7 2. - 0 - 8.2667707465589046e-004 - -0.7130023837089539 - 0.3403679132461548 - <_> - - - - <_> - 13 5 2 1 -1. - <_> - 13 5 1 1 2. - 1 - 3.5339579335413873e-004 - -0.2796030938625336 - 0.0412891283631325 - <_> - - <_> - - - - <_> - 0 0 16 3 -1. - <_> - 0 1 16 1 3. - 0 - 0.0126039599999785 - 1 - 2 - <_> - - - - <_> - 1 11 2 1 -1. - <_> - 1 11 1 1 2. - 1 - -5.5078358855098486e-005 - 0.0658447295427322 - -0.2029519975185394 - <_> - - - - <_> - 14 5 6 5 -1. - <_> - 16 5 2 5 3. - 0 - 9.1213081032037735e-003 - 0.5057839751243591 - -0.2880715131759644 - <_> - - <_> - - - - <_> - 16 8 3 4 -1. - <_> - 16 10 3 2 2. - 0 - -4.0084728971123695e-003 - 0.2149105966091156 - 1 - <_> - - - - <_> - 18 9 2 4 -1. - <_> - 17 10 2 2 2. - 1 - 4.4780140742659569e-003 - 2 - 0.2184965014457703 - <_> - - - - <_> - 18 18 1 2 -1. - <_> - 18 19 1 1 2. - 0 - -4.7284600441344082e-004 - -0.6747183203697205 - -0.1088806986808777 - <_> - - <_> - - - - <_> - 5 5 2 1 -1. - <_> - 6 5 1 1 2. - 0 - -3.7310249172151089e-004 - 0.1715130954980850 - 1 - <_> - - - - <_> - 7 2 12 2 -1. - <_> - 7 2 6 1 2. - <_> - 13 3 6 1 2. - 0 - -0.0109225101768970 - 0.4233599007129669 - 2 - <_> - - - - <_> - 6 0 12 6 -1. - <_> - 9 0 6 6 2. - 0 - 0.0254968907684088 - -0.2346432954072952 - 0.1987193971872330 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 3 1 3 1 3. - 1 - 7.0709688588976860e-003 - 1 - -0.4355168044567108 - <_> - - - - <_> - 12 19 4 1 -1. - <_> - 14 19 2 1 2. - 0 - 3.5252509405836463e-004 - -0.0617644004523754 - 2 - <_> - - - - <_> - 12 11 1 2 -1. - <_> - 12 12 1 1 2. - 0 - 5.8937398716807365e-004 - -0.0795122608542442 - 0.4049384891986847 - <_> - - <_> - - - - <_> - 0 0 20 2 -1. - <_> - 5 0 10 2 2. - 0 - -8.7519101798534393e-003 - 2 - 1 - <_> - - - - <_> - 13 0 4 2 -1. - <_> - 15 0 2 2 2. - 0 - -9.4158039428293705e-004 - 0.0711115673184395 - -0.3181458115577698 - <_> - - - - <_> - 17 1 3 12 -1. - <_> - 18 5 1 4 9. - 0 - -0.0883662477135658 - -0.5979667901992798 - 0.1942894011735916 - <_> - - <_> - - - - <_> - 0 0 10 2 -1. - <_> - 5 0 5 2 2. - 0 - 4.5438520610332489e-003 - 2 - 1 - <_> - - - - <_> - 4 15 12 2 -1. - <_> - 10 15 6 2 2. - 0 - -0.0130414701998234 - -0.2185557931661606 - 0.3056387007236481 - <_> - - - - <_> - 10 1 3 2 -1. - <_> - 10 2 3 1 2. - 0 - 3.2197220716625452e-003 - -0.1901039928197861 - 0.1879674047231674 - <_> - - <_> - - - - <_> - 5 2 15 6 -1. - <_> - 10 4 5 2 9. - 0 - 0.0323706604540348 - 1 - -0.1613540053367615 - <_> - - - - <_> - 7 6 3 5 -1. - <_> - 8 6 1 5 3. - 0 - 8.7954197078943253e-003 - 2 - 0.6625928282737732 - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 16 3 1 3 3. - 1 - -8.5182236507534981e-003 - -0.3873386979103088 - 0.1308877021074295 - <_> - - <_> - - - - <_> - 6 2 9 6 -1. - <_> - 4 4 9 2 3. - 1 - -0.0542100295424461 - 1 - 2 - <_> - - - - <_> - 15 9 2 1 -1. - <_> - 15 9 1 1 2. - 1 - 2.9004408861510456e-004 - -1.8559680320322514e-003 - 0.5009918808937073 - <_> - - - - <_> - 3 8 4 6 -1. - <_> - 3 8 2 3 2. - <_> - 5 11 2 3 2. - 0 - -0.0126700000837445 - 0.2972706854343414 - -0.1653084009885788 - <_> - - <_> - - - - <_> - 2 7 16 10 -1. - <_> - 2 12 16 5 2. - 0 - 0.3799552917480469 - 1 - 0.4228976070880890 - <_> - - - - <_> - 7 3 9 16 -1. - <_> - 10 3 3 16 3. - 0 - -0.0480718500912189 - 0.1101149022579193 - 2 - <_> - - - - <_> - 15 9 1 6 -1. - <_> - 13 11 1 2 3. - 1 - 6.4968131482601166e-003 - -0.2605041861534119 - 0.1724424064159393 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 2 1 2. - 1 - -2.0901230163872242e-003 - 1 - -0.1485445946455002 - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 10 5 2 3 2. - 1 - -6.2400829046964645e-003 - 0.3584120869636536 - 2 - <_> - - - - <_> - 13 13 4 4 -1. - <_> - 13 15 4 2 2. - 0 - 8.5770338773727417e-003 - -0.2148167937994003 - 0.2150458991527557 - <_> - - <_> - - - - <_> - 3 1 4 3 -1. - <_> - 4 2 2 3 2. - 1 - -6.6754068247973919e-003 - 1 - 2 - <_> - - - - <_> - 0 7 3 5 -1. - <_> - 1 7 1 5 3. - 0 - -3.8183759897947311e-003 - -0.2390535026788712 - 0.4471901059150696 - <_> - - - - <_> - 3 0 3 6 -1. - <_> - 3 2 3 2 3. - 0 - 5.5124791106209159e-004 - -0.2530725896358490 - 0.0343074202537537 - <_> - - <_> - - - - <_> - 4 9 15 4 -1. - <_> - 4 10 15 2 2. - 0 - 9.0955598279833794e-003 - 2 - 1 - <_> - - - - <_> - 3 0 12 20 -1. - <_> - 3 10 12 10 2. - 0 - 0.1117129027843475 - -0.6515430808067322 - -0.0266023892909288 - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 1 18 1 2 2. - 0 - -1.7274810234084725e-003 - 0.6179165244102478 - 0.0271436106413603 - <_> - - <_> - - - - <_> - 16 0 3 8 -1. - <_> - 17 0 1 8 3. - 0 - 7.5292278779670596e-004 - 1 - 2 - <_> - - - - <_> - 16 3 3 4 -1. - <_> - 17 3 1 4 3. - 0 - -3.1208951259031892e-004 - -0.0550610087811947 - 0.2793945074081421 - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 0 0 1 3 2. - <_> - 1 3 1 3 2. - 0 - 1.3574779732152820e-003 - -0.2949683964252472 - 0.2376942038536072 - <_> - - <_> - - - - <_> - 16 10 4 5 -1. - <_> - 17 11 2 5 2. - 1 - 0.0260011292994022 - 1 - 0.4836978018283844 - <_> - - - - <_> - 8 14 12 3 -1. - <_> - 12 15 4 1 9. - 0 - -5.1486152224242687e-003 - 2 - -0.1456281989812851 - <_> - - - - <_> - 5 13 12 4 -1. - <_> - 8 13 6 4 2. - 0 - -0.0411377511918545 - -0.4842303097248077 - 0.1962431073188782 - <_> - - <_> - - - - <_> - 3 9 4 3 -1. - <_> - 4 9 2 3 2. - 0 - 0.0129211796447635 - 1 - 0.6053820848464966 - <_> - - - - <_> - 0 14 3 3 -1. - <_> - 0 15 3 1 3. - 0 - 2.9845361132174730e-003 - 2 - -0.4682064056396484 - <_> - - - - <_> - 14 3 1 14 -1. - <_> - 14 3 1 7 2. - 1 - 0.0127328000962734 - -0.0295403394848108 - 0.3618508875370026 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 0 1 1 3. - 0 - -1.0869900143006817e-004 - 0.1660649031400681 - 1 - <_> - - - - <_> - 8 9 8 1 -1. - <_> - 10 9 4 1 2. - 0 - -8.9501799084246159e-004 - 0.0355176217854023 - 2 - <_> - - - - <_> - 16 8 3 2 -1. - <_> - 17 9 1 2 3. - 1 - 5.3637558594346046e-003 - -0.3598144948482513 - 0.4222416877746582 - <_> - - <_> - - - - <_> - 14 7 6 4 -1. - <_> - 14 8 6 2 2. - 0 - 0.0149093698710203 - 1 - -0.6630871295928955 - <_> - - - - <_> - 0 14 1 3 -1. - <_> - 0 15 1 1 3. - 0 - -1.0603530099615455e-003 - -0.3890351951122284 - 2 - <_> - - - - <_> - 18 8 1 3 -1. - <_> - 18 9 1 1 3. - 0 - -3.6916081444360316e-004 - -0.1129944026470184 - 0.1601088941097260 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -3.8595579098910093e-004 - 0.1996158063411713 - 1 - <_> - - - - <_> - 15 0 3 17 -1. - <_> - 16 0 1 17 3. - 0 - 5.9791578678414226e-004 - 2 - -0.2548043131828308 - <_> - - - - <_> - 11 15 6 4 -1. - <_> - 13 15 2 4 3. - 0 - 0.0104272998869419 - 0.1082042008638382 - -0.5406097173690796 - -1.2001949548721313 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 10 6 1 -1. - <_> - 14 10 2 1 3. - 0 - 8.5305199027061462e-003 - -0.2341289967298508 - 1 - <_> - - - - <_> - 9 7 1 4 -1. - <_> - 9 7 1 2 2. - 1 - -7.0295208133757114e-003 - 2 - -0.1327330023050308 - <_> - - - - <_> - 9 10 1 10 -1. - <_> - 9 15 1 5 2. - 0 - 0.0111814597621560 - -0.1030640974640846 - 0.8199384808540344 - <_> - - <_> - - - - <_> - 4 6 16 14 -1. - <_> - 8 6 8 14 2. - 0 - -0.0333477109670639 - 1 - -0.2050410956144333 - <_> - - - - <_> - 1 6 6 11 -1. - <_> - 3 6 2 11 3. - 0 - -5.7895448990166187e-003 - 2 - -0.0721388235688210 - <_> - - - - <_> - 5 6 3 6 -1. - <_> - 5 9 3 3 2. - 0 - 7.5207999907433987e-003 - 0.0925254523754120 - 0.6461619138717651 - <_> - - <_> - - - - <_> - 14 0 4 9 -1. - <_> - 15 0 2 9 2. - 0 - 5.1975441165268421e-003 - 1 - -0.3614475131034851 - <_> - - - - <_> - 9 13 3 6 -1. - <_> - 10 13 1 6 3. - 0 - 2.7103458996862173e-003 - 2 - -0.3431979119777679 - <_> - - - - <_> - 11 3 6 7 -1. - <_> - 13 5 2 7 3. - 1 - -0.0580999217927456 - 0.3215152919292450 - -0.0302325803786516 - <_> - - <_> - - - - <_> - 18 12 1 2 -1. - <_> - 18 13 1 1 2. - 0 - 4.1742541361600161e-004 - 1 - 2 - <_> - - - - <_> - 17 0 2 1 -1. - <_> - 18 0 1 1 2. - 0 - 5.8975181309506297e-004 - -0.2661269903182983 - 0.1444268971681595 - <_> - - - - <_> - 1 2 15 3 -1. - <_> - 1 3 15 1 3. - 0 - 0.0135781299322844 - 0.0362939909100533 - 0.4427740871906281 - <_> - - <_> - - - - <_> - 3 1 3 5 -1. - <_> - 4 1 1 5 3. - 0 - -3.9278618060052395e-003 - -0.4220382869243622 - 1 - <_> - - - - <_> - 4 3 6 3 -1. - <_> - 6 3 2 3 3. - 0 - -0.0164654608815908 - -0.5703601241111755 - 2 - <_> - - - - <_> - 7 1 6 5 -1. - <_> - 9 1 2 5 3. - 0 - -9.0516731142997742e-003 - -0.2434397041797638 - 0.1290111988782883 - <_> - - <_> - - - - <_> - 13 7 2 5 -1. - <_> - 14 7 1 5 2. - 0 - -4.0202909149229527e-003 - 0.3033615946769714 - 1 - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 2 1 2. - 1 - 1.9786891061812639e-003 - -0.1188737973570824 - 2 - <_> - - - - <_> - 2 10 12 4 -1. - <_> - 2 12 12 2 2. - 0 - -0.0211679209023714 - -0.5320934057235718 - 0.3761829137802124 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 2 6 3 1 3. - 1 - -0.0133149595931172 - -0.4772897958755493 - 1 - <_> - - - - <_> - 11 6 6 6 -1. - <_> - 9 8 6 2 3. - 1 - -0.0307342801243067 - 2 - -0.1017197966575623 - <_> - - - - <_> - 4 5 9 12 -1. - <_> - 7 9 3 4 9. - 0 - -0.4937672019004822 - -0.4974538087844849 - 0.1996598988771439 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 11 7 1 1 3. - 1 - -2.2439099848270416e-003 - 1 - -0.1081750020384789 - <_> - - - - <_> - 11 1 5 9 -1. - <_> - 11 4 5 3 3. - 0 - -0.0432838611304760 - 0.6458026170730591 - 2 - <_> - - - - <_> - 10 7 4 1 -1. - <_> - 11 7 2 1 2. - 0 - -9.8785851150751114e-005 - 0.2698537111282349 - -0.1504461020231247 - <_> - - <_> - - - - <_> - 0 0 10 6 -1. - <_> - 0 0 5 3 2. - <_> - 5 3 5 3 2. - 0 - 0.0284351296722889 - 1 - 0.2988390028476715 - <_> - - - - <_> - 2 0 3 6 -1. - <_> - 2 2 3 2 3. - 0 - 2.7237860485911369e-003 - -0.1879711002111435 - 2 - <_> - - - - <_> - 6 6 4 3 -1. - <_> - 7 6 2 3 2. - 0 - -4.7562850522808731e-004 - 0.2843309938907623 - -0.1208563968539238 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 4 1 2 1 3. - 1 - 3.8944541011005640e-003 - 1 - -0.2747336030006409 - <_> - - - - <_> - 13 15 2 3 -1. - <_> - 12 16 2 1 3. - 1 - 4.3390938080847263e-003 - 2 - -0.3716388046741486 - <_> - - - - <_> - 10 2 8 4 -1. - <_> - 12 2 4 4 2. - 0 - -0.0202638395130634 - -0.3540920913219452 - 0.1319790929555893 - <_> - - <_> - - - - <_> - 6 8 2 6 -1. - <_> - 4 10 2 2 3. - 1 - -0.0554325692355633 - -0.6383696794509888 - 1 - <_> - - - - <_> - 18 0 2 4 -1. - <_> - 17 1 2 2 2. - 1 - 5.4974798113107681e-003 - 2 - 0.2411834001541138 - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 10 0 4 2 3. - 0 - -4.8123318701982498e-003 - 0.1241810992360115 - -0.1853886991739273 - <_> - - <_> - - - - <_> - 2 0 18 2 -1. - <_> - 2 0 9 1 2. - <_> - 11 1 9 1 2. - 0 - 1.4174300013110042e-003 - 2 - 1 - <_> - - - - <_> - 17 8 3 2 -1. - <_> - 18 9 1 2 3. - 1 - -3.3114890102297068e-003 - 0.1094727963209152 - -0.3143823146820068 - <_> - - - - <_> - 5 2 3 3 -1. - <_> - 4 3 3 1 3. - 1 - -9.4083733856678009e-003 - -0.5081250071525574 - 0.1270896941423416 - <_> - - <_> - - - - <_> - 18 0 2 20 -1. - <_> - 19 0 1 20 2. - 0 - 0.0160732604563236 - 1 - -0.3289127051830292 - <_> - - - - <_> - 16 11 4 5 -1. - <_> - 17 12 2 5 2. - 1 - -3.9989468641579151e-003 - 0.2334906011819840 - 2 - <_> - - - - <_> - 7 0 6 1 -1. - <_> - 10 0 3 1 2. - 0 - 1.0122359963133931e-003 - -0.1782709956169128 - 0.1680624037981033 - <_> - - <_> - - - - <_> - 15 11 3 2 -1. - <_> - 16 12 1 2 3. - 1 - 0.0156548805534840 - 1 - 0.6614280939102173 - <_> - - - - <_> - 13 11 7 2 -1. - <_> - 13 11 7 1 2. - 1 - 0.0134161701425910 - 2 - -0.5672596096992493 - <_> - - - - <_> - 0 1 2 17 -1. - <_> - 1 1 1 17 2. - 0 - 2.4865430314093828e-003 - 0.0703968182206154 - -0.2169540971517563 - <_> - - <_> - - - - <_> - 4 4 2 3 -1. - <_> - 3 5 2 1 3. - 1 - -4.5016291551291943e-003 - -0.2900192141532898 - 1 - <_> - - - - <_> - 18 5 1 8 -1. - <_> - 18 9 1 4 2. - 0 - -0.0203104894608259 - -0.5547152757644653 - 2 - <_> - - - - <_> - 13 7 2 1 -1. - <_> - 13 7 1 1 2. - 1 - 2.0448309369385242e-003 - -7.5903441756963730e-003 - 0.3011254966259003 - <_> - - <_> - - - - <_> - 7 4 12 2 -1. - <_> - 7 4 6 1 2. - <_> - 13 5 6 1 2. - 0 - 3.3151761163026094e-003 - 2 - 1 - <_> - - - - <_> - 6 18 6 2 -1. - <_> - 9 18 3 2 2. - 0 - -0.0117674097418785 - -0.6593903899192810 - 0.1951629966497421 - <_> - - - - <_> - 0 1 20 4 -1. - <_> - 5 1 10 4 2. - 0 - -0.0904577821493149 - 0.2378368973731995 - -0.1613368988037109 - <_> - - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 15 10 1 1 2. - 0 - -9.4386242562904954e-004 - 0.2026513069868088 - 1 - <_> - - - - <_> - 5 4 10 10 -1. - <_> - 10 4 5 10 2. - 0 - -0.0553004294633865 - 0.1321810036897659 - 2 - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 1.8430839991196990e-003 - -0.0852324664592743 - -0.5063471198081970 - <_> - - <_> - - - - <_> - 3 13 4 3 -1. - <_> - 3 13 2 3 2. - 1 - -4.4628758914768696e-003 - 2 - 1 - <_> - - - - <_> - 16 19 4 1 -1. - <_> - 18 19 2 1 2. - 0 - 9.7493419889360666e-004 - -0.2713629007339478 - 0.1594334989786148 - <_> - - - - <_> - 3 14 4 2 -1. - <_> - 4 14 2 2 2. - 0 - -3.1454759300686419e-004 - 0.2796511054039002 - -0.0326710604131222 - <_> - - <_> - - - - <_> - 8 7 6 3 -1. - <_> - 10 9 2 3 3. - 1 - -0.0164477992802858 - 1 - 2 - <_> - - - - <_> - 12 2 8 6 -1. - <_> - 12 4 8 2 3. - 0 - 0.0237773805856705 - -4.1435249149799347e-003 - 0.3519138991832733 - <_> - - - - <_> - 0 0 6 1 -1. - <_> - 3 0 3 1 2. - 0 - 2.8008338995277882e-003 - -0.2279102951288223 - 0.1885368973016739 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 1.7503320123068988e-004 - 1 - -0.2137672007083893 - <_> - - - - <_> - 17 17 2 3 -1. - <_> - 17 18 2 1 3. - 0 - 1.3492659491021186e-004 - -0.1350656002759934 - 2 - <_> - - - - <_> - 18 16 1 2 -1. - <_> - 18 17 1 1 2. - 0 - 4.8691541451262310e-005 - -0.2700988054275513 - 0.3277894854545593 - <_> - - <_> - - - - <_> - 15 9 2 4 -1. - <_> - 15 9 1 2 2. - <_> - 16 11 1 2 2. - 0 - 2.4542049504816532e-003 - 1 - 0.2636328041553497 - <_> - - - - <_> - 4 10 16 4 -1. - <_> - 4 11 16 2 2. - 0 - -0.0232322607189417 - -0.3830558955669403 - 2 - <_> - - - - <_> - 16 5 3 3 -1. - <_> - 15 6 3 1 3. - 1 - 5.2798539400100708e-003 - -0.0779421404004097 - 0.2402105033397675 - <_> - - <_> - - - - <_> - 16 12 4 4 -1. - <_> - 17 13 2 4 2. - 1 - 7.0398352108895779e-003 - 1 - 0.2097240984439850 - <_> - - - - <_> - 18 3 2 15 -1. - <_> - 18 8 2 5 3. - 0 - 0.0408946387469769 - 2 - -0.7098786830902100 - <_> - - - - <_> - 13 4 1 12 -1. - <_> - 13 4 1 6 2. - 1 - -0.0797724798321724 - 0.5700777173042297 - -0.0693547129631042 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - 6.4237392507493496e-004 - 1 - -0.4032141864299774 - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - 1.8864229787141085e-003 - 0.0845034867525101 - 2 - <_> - - - - <_> - 5 4 1 2 -1. - <_> - 5 5 1 1 2. - 0 - -2.5151949375867844e-003 - 0.7396385073661804 - -0.3700400888919830 - <_> - - <_> - - - - <_> - 2 2 3 18 -1. - <_> - 3 2 1 18 3. - 0 - 9.2179048806428909e-004 - 2 - 1 - <_> - - - - <_> - 7 9 2 3 -1. - <_> - 6 10 2 1 3. - 1 - -6.6281789913773537e-003 - 0.2424131035804749 - -0.2556374967098236 - <_> - - - - <_> - 8 2 7 4 -1. - <_> - 8 3 7 2 2. - 0 - -0.0124479699879885 - 0.4564546942710877 - 0.0358751006424427 - <_> - - <_> - - - - <_> - 16 0 4 1 -1. - <_> - 16 0 2 1 2. - 1 - 9.8073864355683327e-003 - 1 - -0.3572869002819061 - <_> - - - - <_> - 0 17 20 2 -1. - <_> - 5 17 10 2 2. - 0 - 0.0117522301152349 - 2 - 0.2247792035341263 - <_> - - - - <_> - 1 18 6 1 -1. - <_> - 4 18 3 1 2. - 0 - -4.5835418859496713e-004 - 0.0926368832588196 - -0.2275944054126740 - <_> - - <_> - - - - <_> - 5 18 6 2 -1. - <_> - 8 18 3 2 2. - 0 - 0.0125219095498323 - 1 - -0.5092602968215942 - <_> - - - - <_> - 9 8 3 2 -1. - <_> - 10 8 1 2 3. - 0 - 5.4397471249103546e-003 - 2 - 0.4663091003894806 - <_> - - - - <_> - 11 1 3 1 -1. - <_> - 12 1 1 1 3. - 0 - -5.8840587735176086e-004 - -0.2532685101032257 - 0.0485853999853134 - <_> - - <_> - - - - <_> - 0 18 20 2 -1. - <_> - 0 18 10 1 2. - <_> - 10 19 10 1 2. - 0 - -8.6136013269424438e-003 - -0.4680160880088806 - 1 - <_> - - - - <_> - 15 9 1 2 -1. - <_> - 15 10 1 1 2. - 0 - 4.8513390356674790e-004 - 2 - 0.1541222929954529 - <_> - - - - <_> - 17 1 2 1 -1. - <_> - 18 1 1 1 2. - 0 - -5.7645072229206562e-004 - 0.3352608084678650 - -0.1342514008283615 - <_> - - <_> - - - - <_> - 15 0 4 1 -1. - <_> - 17 0 2 1 2. - 0 - 1.5327259898185730e-003 - -0.0846559330821037 - 1 - <_> - - - - <_> - 19 0 1 2 -1. - <_> - 19 1 1 1 2. - 0 - 1.6712940123397857e-004 - 2 - -0.2951262891292572 - <_> - - - - <_> - 2 18 18 2 -1. - <_> - 2 18 9 1 2. - <_> - 11 19 9 1 2. - 0 - 5.0148408627137542e-004 - 0.4422815144062042 - 7.0311659947037697e-003 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -7.2751182597130537e-004 - 0.3696536123752594 - 1 - <_> - - - - <_> - 16 15 1 3 -1. - <_> - 15 16 1 1 3. - 1 - 1.6298179980367422e-003 - 2 - -0.3190909922122955 - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - -6.5518761985003948e-003 - -0.5043709278106690 - 0.0487048700451851 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 7 5 2 3 2. - 1 - -0.0182713493704796 - 0.2677851021289825 - 1 - <_> - - - - <_> - 3 5 12 12 -1. - <_> - 7 9 4 4 9. - 0 - -0.3105793893337250 - 2 - -0.1564695984125137 - <_> - - - - <_> - 7 12 3 4 -1. - <_> - 8 12 1 4 3. - 0 - 8.6849008221179247e-004 - 0.2213014066219330 - -0.2330964952707291 - <_> - - <_> - - - - <_> - 17 4 3 3 -1. - <_> - 18 5 1 3 3. - 1 - -0.0107902800664306 - -0.4155437946319580 - 1 - <_> - - - - <_> - 17 16 2 1 -1. - <_> - 17 16 1 1 2. - 1 - -6.7156221484765410e-004 - 2 - -0.0802800208330154 - <_> - - - - <_> - 7 6 1 2 -1. - <_> - 7 6 1 1 2. - 1 - 7.9050064086914063e-003 - 0.1747072041034699 - -0.7785257101058960 - <_> - - <_> - - - - <_> - 1 0 12 1 -1. - <_> - 7 0 6 1 2. - 0 - 0.0123526602983475 - 2 - 1 - <_> - - - - <_> - 0 7 18 8 -1. - <_> - 6 7 6 8 3. - 0 - 0.0627035498619080 - 0.4316090047359467 - -0.3922486901283264 - <_> - - - - <_> - 13 14 4 6 -1. - <_> - 14 14 2 6 2. - 0 - -7.1864388883113861e-003 - -0.5800396800041199 - -0.0258382204920053 - <_> - - <_> - - - - <_> - 6 10 3 3 -1. - <_> - 5 11 3 1 3. - 1 - -3.8558109663426876e-003 - 0.1596350073814392 - 1 - <_> - - - - <_> - 16 2 4 2 -1. - <_> - 18 2 2 2 2. - 0 - -1.5419459668919444e-003 - 0.1674184054136276 - 2 - <_> - - - - <_> - 9 13 8 4 -1. - <_> - 13 13 4 4 2. - 0 - -2.2120370995253325e-003 - 0.0291761104017496 - -0.2882241904735565 - <_> - - <_> - - - - <_> - 12 0 6 20 -1. - <_> - 12 10 6 10 2. - 0 - -0.0214345902204514 - -0.2261314988136292 - 1 - <_> - - - - <_> - 18 0 2 8 -1. - <_> - 19 0 1 8 2. - 0 - -1.9107710104435682e-003 - 2 - 0.1030728965997696 - <_> - - - - <_> - 18 5 2 14 -1. - <_> - 18 12 2 7 2. - 0 - 0.0358044281601906 - 0.0753818526864052 - -0.6326709985733032 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 1.4067400479689240e-003 - 1 - 0.3705731928348541 - <_> - - - - <_> - 9 13 8 4 -1. - <_> - 9 15 8 2 2. - 0 - 9.6554737538099289e-003 - -0.2045467048883438 - 2 - <_> - - - - <_> - 0 10 14 10 -1. - <_> - 0 15 14 5 2. - 0 - 0.2405883073806763 - 0.2073563933372498 - -0.1266141980886459 - <_> - - <_> - - - - <_> - 1 8 14 4 -1. - <_> - 1 9 14 2 2. - 0 - 5.2541731856763363e-003 - 1 - -0.2381245046854019 - <_> - - - - <_> - 2 8 11 4 -1. - <_> - 2 9 11 2 2. - 0 - -1.1480560060590506e-003 - -0.0188075695186853 - 2 - <_> - - - - <_> - 4 0 6 2 -1. - <_> - 4 0 3 1 2. - <_> - 7 1 3 1 2. - 0 - 5.2387482719495893e-004 - 0.5843573808670044 - -0.0700021088123322 - <_> - - <_> - - - - <_> - 8 16 4 2 -1. - <_> - 9 16 2 2 2. - 0 - 8.9346221648156643e-004 - 1 - -0.2034371942281723 - <_> - - - - <_> - 7 4 4 12 -1. - <_> - 7 8 4 4 3. - 0 - -0.1466477960348129 - 0.4242913126945496 - 2 - <_> - - - - <_> - 17 10 2 6 -1. - <_> - 17 10 1 6 2. - 1 - 6.4734317129477859e-004 - -0.0725101232528687 - 0.2421600967645645 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - 3.7285720463842154e-003 - 1 - -0.4169087111949921 - <_> - - - - <_> - 16 7 4 1 -1. - <_> - 17 7 2 1 2. - 0 - 1.0364309855503961e-004 - 2 - 0.1709198951721191 - <_> - - - - <_> - 17 3 2 8 -1. - <_> - 17 3 1 4 2. - <_> - 18 7 1 4 2. - 0 - -4.3523311614990234e-003 - 0.3136849999427795 - -0.1338775008916855 - <_> - - <_> - - - - <_> - 9 8 10 8 -1. - <_> - 9 8 5 4 2. - <_> - 14 12 5 4 2. - 0 - -0.0826440304517746 - 1 - 2 - <_> - - - - <_> - 9 14 3 1 -1. - <_> - 10 14 1 1 3. - 0 - -8.3868228830397129e-004 - 0.6718220114707947 - -0.4542999863624573 - <_> - - - - <_> - 9 0 6 14 -1. - <_> - 11 0 2 14 3. - 0 - -0.0261234194040298 - 0.2189783006906509 - -0.0323770903050900 - <_> - - <_> - - - - <_> - 11 11 4 1 -1. - <_> - 12 12 2 1 2. - 1 - 5.2059517474845052e-004 - 2 - 1 - <_> - - - - <_> - 2 14 9 6 -1. - <_> - 5 14 3 6 3. - 0 - -0.0291544608771801 - -0.3632850050926209 - 0.1683413982391357 - <_> - - - - <_> - 14 2 6 1 -1. - <_> - 17 2 3 1 2. - 0 - -1.1165169999003410e-003 - 0.1581884026527405 - -0.2313404977321625 - <_> - - <_> - - - - <_> - 2 16 9 2 -1. - <_> - 5 16 3 2 3. - 0 - -1.1460180394351482e-003 - 1 - -0.1223717033863068 - <_> - - - - <_> - 4 5 3 8 -1. - <_> - 4 9 3 4 2. - 0 - 0.0208730306476355 - 2 - 0.4071544110774994 - <_> - - - - <_> - 1 1 7 4 -1. - <_> - 1 3 7 2 2. - 0 - 0.0404765792191029 - -0.0487191304564476 - 0.6135951280593872 - -1.2273980379104614 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 5 9 2 3 3. - 0 - 0.0231525506824255 - 2 - 1 - <_> - - - - <_> - 13 9 4 2 -1. - <_> - 14 9 2 2 2. - 0 - 9.4490228220820427e-003 - 0.1621754020452499 - 0.8945853710174561 - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 1.2632790021598339e-003 - -0.2992058992385864 - 0.2411431074142456 - <_> - - <_> - - - - <_> - 13 7 4 7 -1. - <_> - 13 7 2 7 2. - 1 - -0.0632881969213486 - 1 - 2 - <_> - - - - <_> - 19 6 1 4 -1. - <_> - 18 7 1 2 2. - 1 - -5.4630772210657597e-003 - 0.5872638821601868 - 0.0286706294864416 - <_> - - - - <_> - 1 14 4 2 -1. - <_> - 3 14 2 2 2. - 0 - -5.3964817197993398e-004 - 0.0210434291511774 - -0.3309636116027832 - <_> - - <_> - - - - <_> - 0 2 16 16 -1. - <_> - 0 6 16 8 2. - 0 - -0.4357495009899139 - 0.2923555076122284 - 1 - <_> - - - - <_> - 1 1 6 1 -1. - <_> - 4 1 3 1 2. - 0 - -2.2997299674898386e-003 - 0.1057410016655922 - 2 - <_> - - - - <_> - 6 9 2 3 -1. - <_> - 7 9 1 3 2. - 0 - 2.8589849825948477e-003 - -0.3337055146694183 - 0.1699037998914719 - <_> - - <_> - - - - <_> - 16 5 4 9 -1. - <_> - 17 5 2 9 2. - 0 - -0.0218918491154909 - -0.6286152005195618 - 1 - <_> - - - - <_> - 7 12 3 5 -1. - <_> - 8 13 1 5 3. - 1 - -9.2662516981363297e-003 - -0.4396972060203552 - 2 - <_> - - - - <_> - 5 6 3 4 -1. - <_> - 6 7 1 4 3. - 1 - -0.0166252795606852 - 0.4039447903633118 - 1.1343320365995169e-003 - <_> - - <_> - - - - <_> - 16 1 4 1 -1. - <_> - 18 1 2 1 2. - 0 - 2.4849560577422380e-003 - 2 - 1 - <_> - - - - <_> - 8 0 12 16 -1. - <_> - 8 0 6 8 2. - <_> - 14 8 6 8 2. - 0 - -0.0180932208895683 - -0.1591285020112991 - 0.4453854858875275 - <_> - - - - <_> - 4 5 13 2 -1. - <_> - 4 5 13 1 2. - 1 - -0.0156092597171664 - 0.0692782625555992 - -0.2265599966049194 - <_> - - <_> - - - - <_> - 17 17 1 2 -1. - <_> - 17 17 1 1 2. - 1 - -4.3753669597208500e-003 - -0.7110478281974793 - 1 - <_> - - - - <_> - 17 18 3 2 -1. - <_> - 17 19 3 1 2. - 0 - -1.3602689432445914e-004 - -0.1658290028572083 - 2 - <_> - - - - <_> - 16 10 3 3 -1. - <_> - 17 10 1 3 3. - 0 - 3.8207470788620412e-004 - 0.2140810936689377 - -0.1231082975864410 - <_> - - <_> - - - - <_> - 11 4 3 2 -1. - <_> - 11 5 3 1 2. - 0 - -5.7698809541761875e-003 - 0.2580862045288086 - 1 - <_> - - - - <_> - 8 2 8 4 -1. - <_> - 8 3 8 2 2. - 0 - -6.5253339707851410e-003 - 0.2006817013025284 - 2 - <_> - - - - <_> - 14 3 5 9 -1. - <_> - 14 6 5 3 3. - 0 - -0.0831495970487595 - -0.6400523781776428 - -0.0962928533554077 - <_> - - <_> - - - - <_> - 0 18 9 2 -1. - <_> - 0 19 9 1 2. - 0 - -1.7492580227553844e-003 - -0.2799693048000336 - 1 - <_> - - - - <_> - 17 3 3 1 -1. - <_> - 18 4 1 1 3. - 1 - -3.5885178949683905e-003 - -0.4255706071853638 - 2 - <_> - - - - <_> - 13 12 5 3 -1. - <_> - 12 13 5 1 3. - 1 - 2.8363720048218966e-003 - 0.1710563004016876 - -0.1154818981885910 - <_> - - <_> - - - - <_> - 10 13 4 2 -1. - <_> - 10 14 4 1 2. - 0 - 3.7369329947978258e-003 - 2 - 1 - <_> - - - - <_> - 8 8 3 3 -1. - <_> - 7 9 3 1 3. - 1 - 0.0203982908278704 - 0.0751420035958290 - 0.7144914865493774 - <_> - - - - <_> - 16 3 3 3 -1. - <_> - 15 4 3 1 3. - 1 - -0.0186053290963173 - 0.6674553751945496 - -0.1301171928644180 - <_> - - <_> - - - - <_> - 15 18 4 1 -1. - <_> - 17 18 2 1 2. - 0 - 1.2047400232404470e-003 - 1 - 0.1993627995252609 - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 0 1 3 2. - 1 - -4.1799237951636314e-003 - 0.2062533944845200 - 2 - <_> - - - - <_> - 11 10 3 2 -1. - <_> - 12 10 1 2 3. - 0 - 5.3556780330836773e-003 - -0.2184738963842392 - 0.3918460011482239 - <_> - - <_> - - - - <_> - 0 2 2 18 -1. - <_> - 0 2 1 9 2. - <_> - 1 11 1 9 2. - 0 - -2.3561089765280485e-003 - 1 - 2 - <_> - - - - <_> - 1 8 8 7 -1. - <_> - 3 8 4 7 2. - 0 - -0.0597407482564449 - 0.6495192050933838 - -0.2614704966545105 - <_> - - - - <_> - 12 18 4 2 -1. - <_> - 12 18 2 1 2. - <_> - 14 19 2 1 2. - 0 - 1.4918210217729211e-003 - 0.1180087998509407 - -0.3651857972145081 - <_> - - <_> - - - - <_> - 3 4 16 12 -1. - <_> - 7 4 8 12 2. - 0 - -0.2646600902080536 - -0.4700730144977570 - 1 - <_> - - - - <_> - 5 8 6 1 -1. - <_> - 7 8 2 1 3. - 0 - -6.3644978217780590e-004 - 0.1539365053176880 - 2 - <_> - - - - <_> - 7 4 12 8 -1. - <_> - 11 4 4 8 3. - 0 - -0.1079884022474289 - 0.2816798985004425 - -0.1963696032762528 - <_> - - <_> - - - - <_> - 8 16 2 2 -1. - <_> - 8 16 1 1 2. - <_> - 9 17 1 1 2. - 0 - -3.6950930370949209e-004 - -0.2569453120231628 - 1 - <_> - - - - <_> - 3 4 3 3 -1. - <_> - 2 5 3 1 3. - 1 - -7.9222144559025764e-003 - -0.3608905971050263 - 2 - <_> - - - - <_> - 8 5 3 6 -1. - <_> - 9 7 1 2 9. - 0 - -7.1997018530964851e-003 - 0.2118722051382065 - -0.0603044107556343 - <_> - - <_> - - - - <_> - 2 5 18 2 -1. - <_> - 8 5 6 2 3. - 0 - 0.0278659500181675 - 1 - 0.2754226028919220 - <_> - - - - <_> - 14 8 1 2 -1. - <_> - 14 9 1 1 2. - 0 - 1.0313779785064980e-004 - -0.2111312001943588 - 2 - <_> - - - - <_> - 5 1 4 1 -1. - <_> - 6 1 2 1 2. - 0 - 9.8026450723409653e-004 - 0.1296983063220978 - -0.3592596948146820 - <_> - - <_> - - - - <_> - 1 9 17 3 -1. - <_> - 1 10 17 1 3. - 0 - 0.0108691602945328 - 1 - -0.2870922088623047 - <_> - - - - <_> - 1 17 9 3 -1. - <_> - 1 18 9 1 3. - 0 - 1.9162669777870178e-003 - 2 - 0.1922376006841660 - <_> - - - - <_> - 4 16 6 2 -1. - <_> - 4 17 6 1 2. - 0 - -6.9466588320210576e-004 - 0.2680231034755707 - -0.1589346975088120 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 1 1 2. - <_> - 4 9 1 1 2. - 0 - -1.5737100038677454e-003 - 0.4845055937767029 - 1 - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 16 9 3 1 3. - 1 - 2.8489651158452034e-003 - 2 - 0.1473242044448853 - <_> - - - - <_> - 7 3 4 2 -1. - <_> - 8 3 2 2 2. - 0 - 1.2300360249355435e-003 - -0.0220786295831203 - -0.3536359965801239 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - -1.7871359596028924e-003 - 0.1513085961341858 - 1 - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 1 4 1 4 2. - 0 - -7.5124297291040421e-004 - -0.2584514915943146 - 2 - <_> - - - - <_> - 6 3 1 12 -1. - <_> - 6 9 1 6 2. - 0 - -0.0158108696341515 - 0.3902400135993958 - -0.0832490324974060 - <_> - - <_> - - - - <_> - 0 7 4 2 -1. - <_> - 0 8 4 1 2. - 0 - -8.5817109793424606e-003 - 2 - 1 - <_> - - - - <_> - 2 0 5 16 -1. - <_> - 2 8 5 8 2. - 0 - 0.1492594033479691 - 0.0652851834893227 - -0.4483678042888641 - <_> - - - - <_> - 11 0 3 6 -1. - <_> - 9 2 3 2 3. - 1 - 0.0509733483195305 - -0.5980225205421448 - 0.7631481289863586 - <_> - - <_> - - - - <_> - 5 16 12 1 -1. - <_> - 8 16 6 1 2. - 0 - -1.4699130551889539e-003 - 2 - 1 - <_> - - - - <_> - 9 8 3 2 -1. - <_> - 10 8 1 2 3. - 0 - 1.8571510445326567e-003 - -0.1585713028907776 - 0.2062346935272217 - <_> - - - - <_> - 14 8 3 6 -1. - <_> - 15 9 1 6 3. - 1 - 2.7572319377213717e-003 - -0.0153697002679110 - 0.3574141860008240 - <_> - - <_> - - - - <_> - 13 8 4 7 -1. - <_> - 14 9 2 7 2. - 1 - -0.0124948704615235 - 0.2164631038904190 - 1 - <_> - - - - <_> - 16 7 3 4 -1. - <_> - 15 8 3 2 2. - 1 - -0.0205422304570675 - 0.3518325984477997 - 2 - <_> - - - - <_> - 13 1 1 16 -1. - <_> - 13 9 1 8 2. - 0 - 9.8408637568354607e-003 - -0.2510798871517181 - 0.0245974194258451 - <_> - - <_> - - - - <_> - 7 17 8 1 -1. - <_> - 9 17 4 1 2. - 0 - 7.5531061738729477e-003 - 1 - -0.7717052102088928 - <_> - - - - <_> - 9 10 3 5 -1. - <_> - 10 11 1 5 3. - 1 - 8.6472760885953903e-003 - 2 - -0.2653510868549347 - <_> - - - - <_> - 4 11 6 3 -1. - <_> - 6 13 2 3 3. - 1 - -0.0233432706445456 - -0.3110235929489136 - 0.1075194031000137 - <_> - - <_> - - - - <_> - 3 16 1 2 -1. - <_> - 3 16 1 1 2. - 1 - -2.3739689495414495e-003 - 0.2483355998992920 - 1 - <_> - - - - <_> - 5 13 3 4 -1. - <_> - 4 14 3 2 2. - 1 - 4.5531010255217552e-003 - 2 - 0.1276661008596420 - <_> - - - - <_> - 7 5 8 8 -1. - <_> - 9 5 4 8 2. - 0 - -0.0178197398781776 - -0.0215389095246792 - -0.3353056907653809 - <_> - - <_> - - - - <_> - 17 5 2 4 -1. - <_> - 17 5 1 4 2. - 1 - -0.0182177107781172 - -0.4191550016403198 - 1 - <_> - - - - <_> - 0 14 3 4 -1. - <_> - 0 15 3 2 2. - 0 - -4.5768721029162407e-003 - -0.4393653869628906 - 2 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - -1.8008370534516871e-004 - -0.1269751936197281 - 0.1353927999734879 - <_> - - <_> - - - - <_> - 6 16 6 4 -1. - <_> - 8 16 2 4 3. - 0 - -7.6008588075637817e-003 - -0.3382278978824616 - 1 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - 4.5034091453999281e-004 - 2 - 0.3159990906715393 - <_> - - - - <_> - 9 17 2 1 -1. - <_> - 10 17 1 1 2. - 0 - 2.7170981047675014e-004 - -0.0756601467728615 - 0.2307509928941727 - <_> - - <_> - - - - <_> - 14 5 5 8 -1. - <_> - 14 7 5 4 2. - 0 - -0.0597398914396763 - -0.3995823860168457 - 1 - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 8 2 1 2. - 0 - -2.4159778840839863e-003 - 2 - -0.0291774198412895 - <_> - - - - <_> - 9 11 2 7 -1. - <_> - 10 11 1 7 2. - 0 - 7.5702499598264694e-003 - 0.3620199859142304 - -0.7877599000930786 - <_> - - <_> - - - - <_> - 2 5 1 2 -1. - <_> - 2 5 1 1 2. - 1 - 4.8360861837863922e-003 - 1 - -0.4798456132411957 - <_> - - - - <_> - 4 6 11 3 -1. - <_> - 4 7 11 1 3. - 0 - -0.0197947490960360 - 0.3172172009944916 - 2 - <_> - - - - <_> - 5 4 8 3 -1. - <_> - 5 5 8 1 3. - 0 - -5.3176241926848888e-003 - 0.2197144925594330 - -0.0853022336959839 - <_> - - <_> - - - - <_> - 0 8 20 3 -1. - <_> - 0 9 20 1 3. - 0 - 3.5097550135105848e-003 - 2 - 1 - <_> - - - - <_> - 15 8 3 3 -1. - <_> - 15 9 3 1 3. - 0 - -1.6063610091805458e-003 - 0.3470580875873566 - -0.3219808042049408 - <_> - - - - <_> - 17 9 3 1 -1. - <_> - 18 9 1 1 3. - 0 - 1.8238229677081108e-003 - 0.0975737273693085 - -0.4178476929664612 - <_> - - <_> - - - - <_> - 15 6 5 3 -1. - <_> - 15 7 5 1 3. - 0 - 2.2058039903640747e-003 - 2 - 1 - <_> - - - - <_> - 9 15 8 2 -1. - <_> - 9 15 4 1 2. - <_> - 13 16 4 1 2. - 0 - 2.5601179804652929e-003 - -0.2986601889133453 - 0.3208585977554321 - <_> - - - - <_> - 0 3 1 4 -1. - <_> - 0 4 1 2 2. - 0 - 2.2490289993584156e-003 - 0.1041122972965241 - -0.3094179034233093 - <_> - - <_> - - - - <_> - 9 3 5 2 -1. - <_> - 9 4 5 1 2. - 0 - 2.2417849395424128e-003 - 1 - 2 - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 15 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - 9.5781440904829651e-005 - -0.1986119002103806 - 0.0804844871163368 - <_> - - - - <_> - 12 0 4 12 -1. - <_> - 12 0 2 12 2. - 1 - -0.1019918993115425 - -0.6657344102859497 - 0.2654593884944916 - <_> - - <_> - - - - <_> - 10 6 8 2 -1. - <_> - 10 7 8 1 2. - 0 - 2.9278239235281944e-003 - 2 - 1 - <_> - - - - <_> - 15 3 2 13 -1. - <_> - 16 3 1 13 2. - 0 - -2.3058110382407904e-003 - 0.4671154916286469 - -0.0232933796942234 - <_> - - - - <_> - 11 11 5 2 -1. - <_> - 11 11 5 1 2. - 1 - -3.5818710457533598e-003 - 0.0197561495006084 - -0.2589983940124512 - <_> - - <_> - - - - <_> - 0 0 6 2 -1. - <_> - 3 0 3 2 2. - 0 - 4.8302081413567066e-003 - 2 - 1 - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - -2.7483499143272638e-003 - -0.3690997064113617 - 0.2965056896209717 - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -4.5970390783622861e-004 - 0.1048004031181335 - -0.1618452966213226 - <_> - - <_> - - - - <_> - 3 0 16 5 -1. - <_> - 7 0 8 5 2. - 0 - -0.0101613495498896 - 2 - 1 - <_> - - - - <_> - 18 10 1 2 -1. - <_> - 18 10 1 1 2. - 1 - 3.2342320773750544e-003 - -0.1552353054285049 - 0.4881691038608551 - <_> - - - - <_> - 4 6 2 4 -1. - <_> - 4 7 2 2 2. - 0 - -1.1368689592927694e-003 - 0.2815929055213928 - -0.0627904012799263 - <_> - - <_> - - - - <_> - 13 5 2 1 -1. - <_> - 13 5 1 1 2. - 1 - 1.1411249870434403e-003 - 1 - 0.1208174973726273 - <_> - - - - <_> - 0 5 8 2 -1. - <_> - 0 5 4 1 2. - <_> - 4 6 4 1 2. - 0 - 2.8695389628410339e-003 - 2 - 0.2099259942770004 - <_> - - - - <_> - 7 7 10 13 -1. - <_> - 12 7 5 13 2. - 0 - 0.2473116964101791 - -0.2419752925634384 - 0.6499055027961731 - <_> - - <_> - - - - <_> - 17 3 3 2 -1. - <_> - 18 4 1 2 3. - 1 - 2.7829511091113091e-003 - 2 - 1 - <_> - - - - <_> - 2 0 9 2 -1. - <_> - 2 1 9 1 2. - 0 - -0.0137017201632261 - 0.4553816914558411 - -0.3384790122509003 - <_> - - - - <_> - 4 8 12 6 -1. - <_> - 4 10 12 2 3. - 0 - 0.0487684011459351 - 0.0896881222724915 - -0.3157638013362885 - <_> - - <_> - - - - <_> - 13 8 3 2 -1. - <_> - 14 9 1 2 3. - 1 - 0.0173298008739948 - 1 - 0.4255819022655487 - <_> - - - - <_> - 10 9 3 8 -1. - <_> - 11 9 1 8 3. - 0 - 0.0148996300995350 - 2 - 0.6171193122863770 - <_> - - - - <_> - 13 13 4 6 -1. - <_> - 14 13 2 6 2. - 0 - -5.4528238251805305e-003 - -0.4093998968601227 - -0.0152154499664903 - <_> - - <_> - - - - <_> - 7 0 6 1 -1. - <_> - 9 0 2 1 3. - 0 - -4.6164509840309620e-003 - -0.3599287867546082 - 1 - <_> - - - - <_> - 11 1 4 2 -1. - <_> - 11 2 4 1 2. - 0 - 2.2072680294513702e-003 - 2 - 0.2005150020122528 - <_> - - - - <_> - 13 0 6 3 -1. - <_> - 13 1 6 1 3. - 0 - 1.1780969798564911e-003 - -0.1771039962768555 - 0.1328358054161072 - <_> - - <_> - - - - <_> - 7 18 2 1 -1. - <_> - 8 18 1 1 2. - 0 - -2.1226529497653246e-004 - 2 - 1 - <_> - - - - <_> - 6 15 6 4 -1. - <_> - 6 16 6 2 2. - 0 - 6.6969380713999271e-003 - -0.1455882936716080 - 0.3031922876834869 - <_> - - - - <_> - 13 15 2 3 -1. - <_> - 12 16 2 1 3. - 1 - 4.8628589138388634e-003 - 0.2114765942096710 - -0.6505087018013001 - <_> - - <_> - - - - <_> - 0 18 20 2 -1. - <_> - 0 18 10 1 2. - <_> - 10 19 10 1 2. - 0 - 1.2855669483542442e-003 - 1 - -0.1425379961729050 - <_> - - - - <_> - 2 18 18 2 -1. - <_> - 2 18 9 1 2. - <_> - 11 19 9 1 2. - 0 - -9.8538002930581570e-004 - -0.0493023693561554 - 2 - <_> - - - - <_> - 4 0 3 17 -1. - <_> - 5 0 1 17 3. - 0 - 3.6161120515316725e-003 - 0.4549635052680969 - -0.1239833980798721 - <_> - - <_> - - - - <_> - 4 9 4 4 -1. - <_> - 4 9 2 2 2. - <_> - 6 11 2 2 2. - 0 - 7.4739390984177589e-003 - 1 - 0.2563121020793915 - <_> - - - - <_> - 6 10 2 4 -1. - <_> - 5 11 2 2 2. - 1 - 0.0147643499076366 - 2 - 0.5857235193252564 - <_> - - - - <_> - 12 2 2 12 -1. - <_> - 12 2 1 12 2. - 1 - 5.4328311234712601e-003 - 0.0325299315154552 - -0.2218718975782394 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -2.7086320915259421e-004 - 1 - 2 - <_> - - - - <_> - 1 9 2 4 -1. - <_> - 1 9 1 2 2. - <_> - 2 11 1 2 2. - 0 - 4.2132260277867317e-003 - 0.2617512047290802 - -0.5954037904739380 - <_> - - - - <_> - 15 17 2 1 -1. - <_> - 16 17 1 1 2. - 0 - 1.9583420362323523e-004 - -0.1915947049856186 - 0.0915200263261795 - <_> - - <_> - - - - <_> - 14 6 3 4 -1. - <_> - 15 7 1 4 3. - 1 - -7.1442658081650734e-003 - 0.1301265060901642 - 1 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - 2.3744559439364821e-004 - 2 - -0.3883144855499268 - <_> - - - - <_> - 15 14 2 1 -1. - <_> - 16 14 1 1 2. - 0 - -8.4380080807022750e-005 - 0.2103091031312943 - -0.1458714008331299 - <_> - - <_> - - - - <_> - 2 3 18 10 -1. - <_> - 2 3 9 5 2. - <_> - 11 8 9 5 2. - 0 - 0.1216180026531220 - 1 - 0.2558324933052063 - <_> - - - - <_> - 15 17 2 2 -1. - <_> - 15 17 1 1 2. - <_> - 16 18 1 1 2. - 0 - 6.9275178248062730e-005 - 2 - 0.1127222031354904 - <_> - - - - <_> - 6 1 3 10 -1. - <_> - 7 1 1 10 3. - 0 - -0.0159046594053507 - 0.7211254239082336 - -0.1938516050577164 - -1.1990439891815186 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 9 6 2 -1. - <_> - 5 9 2 2 3. - 0 - 0.0178999304771423 - 2 - 1 - <_> - - - - <_> - 15 10 4 2 -1. - <_> - 15 10 2 1 2. - <_> - 17 11 2 1 2. - 0 - 1.5925300540402532e-003 - 0.0461346395313740 - 0.8378713130950928 - <_> - - - - <_> - 0 11 1 4 -1. - <_> - 0 13 1 2 2. - 0 - 1.8896949477493763e-003 - -0.3689903914928436 - 0.0187077093869448 - <_> - - <_> - - - - <_> - 7 7 9 13 -1. - <_> - 10 7 3 13 3. - 0 - -0.0413366481661797 - 1 - -0.1998350024223328 - <_> - - - - <_> - 8 5 11 6 -1. - <_> - 8 7 11 2 3. - 0 - -0.0407375991344452 - 0.5520309805870056 - 2 - <_> - - - - <_> - 7 15 3 3 -1. - <_> - 8 15 1 3 3. - 0 - -1.4306500088423491e-003 - -0.5408322811126709 - 0.1318338066339493 - <_> - - <_> - - - - <_> - 0 9 2 11 -1. - <_> - 1 9 1 11 2. - 0 - 1.4656609855592251e-003 - 2 - 1 - <_> - - - - <_> - 4 8 4 2 -1. - <_> - 5 8 2 2 2. - 0 - -1.3589359587058425e-003 - 0.1747702956199646 - -0.4528546035289764 - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 7 2 1 2. - 1 - -1.5437849797308445e-003 - 0.2215467989444733 - -0.1143703013658524 - <_> - - <_> - - - - <_> - 5 1 5 4 -1. - <_> - 5 2 5 2 2. - 0 - 6.6659757867455482e-003 - 2 - 1 - <_> - - - - <_> - 15 10 4 3 -1. - <_> - 16 10 2 3 2. - 0 - -1.7080729594454169e-003 - 0.5613545179367065 - -7.5875748880207539e-003 - <_> - - - - <_> - 0 1 16 3 -1. - <_> - 0 2 16 1 3. - 0 - -0.0360501594841480 - 0.6939113736152649 - -0.1337317973375320 - <_> - - <_> - - - - <_> - 8 9 4 3 -1. - <_> - 9 10 2 3 2. - 1 - -7.1983798407018185e-003 - 0.1885589957237244 - 1 - <_> - - - - <_> - 18 17 2 3 -1. - <_> - 18 18 2 1 3. - 0 - -6.5796967828646302e-004 - -0.4713008105754852 - 2 - <_> - - - - <_> - 5 13 4 6 -1. - <_> - 5 13 2 3 2. - <_> - 7 16 2 3 2. - 0 - -1.2115390272811055e-003 - 0.1938109993934631 - -0.1470918953418732 - <_> - - <_> - - - - <_> - 0 0 3 17 -1. - <_> - 1 0 1 17 3. - 0 - -0.0102727701887488 - -0.4113506972789764 - 1 - <_> - - - - <_> - 10 7 3 3 -1. - <_> - 9 8 3 1 3. - 1 - -7.0025851018726826e-003 - 2 - -0.0881777480244637 - <_> - - - - <_> - 9 7 3 3 -1. - <_> - 10 8 1 3 3. - 1 - -0.0249338597059250 - -0.6346430182456970 - 0.2540309131145477 - <_> - - <_> - - - - <_> - 7 5 5 6 -1. - <_> - 7 8 5 3 2. - 0 - 7.7693387866020203e-003 - 2 - 1 - <_> - - - - <_> - 12 4 2 9 -1. - <_> - 12 7 2 3 3. - 0 - -0.0448855496942997 - -0.4544571936130524 - 0.3388448953628540 - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 0 1 2 3. - 0 - 1.9916899036616087e-003 - -0.0530123300850391 - -0.5726923942565918 - <_> - - <_> - - - - <_> - 11 8 3 3 -1. - <_> - 12 9 1 1 9. - 0 - -0.0147834504023194 - 0.3736591935157776 - 1 - <_> - - - - <_> - 4 16 2 3 -1. - <_> - 4 17 2 1 3. - 0 - 1.1688449885696173e-003 - 2 - -0.3016490936279297 - <_> - - - - <_> - 6 10 14 3 -1. - <_> - 6 11 14 1 3. - 0 - -1.2033269740641117e-004 - 0.1495850980281830 - -0.1401439011096954 - <_> - - <_> - - - - <_> - 0 10 14 4 -1. - <_> - 0 11 14 2 2. - 0 - -0.0437300391495228 - -0.7007855772972107 - 1 - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - -0.0178551804274321 - 0.8003244996070862 - 2 - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 2 1 3 3. - 0 - 8.3651271415874362e-004 - 0.0788257569074631 - -0.2035211026668549 - <_> - - <_> - - - - <_> - 17 17 2 2 -1. - <_> - 17 17 1 1 2. - <_> - 18 18 1 1 2. - 0 - -6.6671593231149018e-005 - 2 - 1 - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -9.8805947345681489e-005 - -0.3720112144947052 - 0.0136403096839786 - <_> - - - - <_> - 17 16 1 3 -1. - <_> - 17 17 1 1 3. - 0 - -2.7336759376339614e-004 - -0.1621610969305039 - 0.2611390054225922 - <_> - - <_> - - - - <_> - 6 8 2 1 -1. - <_> - 6 8 1 1 2. - 1 - 4.2468630708754063e-003 - 1 - 0.2884271144866943 - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 8 1 1 3. - 1 - -4.9197040498256683e-003 - 2 - -0.1078727990388870 - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - -0.0141166700050235 - -0.7010453939437866 - 0.3365927934646606 - <_> - - <_> - - - - <_> - 3 9 3 10 -1. - <_> - 4 9 1 10 3. - 0 - -4.4507419806905091e-004 - 1 - 2 - <_> - - - - <_> - 5 15 6 3 -1. - <_> - 7 15 2 3 3. - 0 - -0.0120754400268197 - -0.7098736763000488 - 0.1517615020275116 - <_> - - - - <_> - 0 4 2 12 -1. - <_> - 0 4 1 6 2. - <_> - 1 10 1 6 2. - 0 - -2.3437689524143934e-003 - -0.4089004099369049 - -0.0170915406197309 - <_> - - <_> - - - - <_> - 4 2 2 10 -1. - <_> - 5 2 1 10 2. - 0 - 0.0162486806511879 - 1 - -0.6064110994338989 - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 5 9 1 1 2. - 0 - 1.9177920185029507e-003 - 2 - 0.3667005002498627 - <_> - - - - <_> - 14 7 4 6 -1. - <_> - 15 8 2 6 2. - 1 - -0.0103595601394773 - 0.1981362998485565 - -0.1102034971117973 - <_> - - <_> - - - - <_> - 17 5 3 2 -1. - <_> - 18 6 1 2 3. - 1 - 2.9234820976853371e-003 - 2 - 1 - <_> - - - - <_> - 2 10 16 5 -1. - <_> - 10 10 8 5 2. - 0 - 0.0343232005834579 - -0.4638245105743408 - 0.1546909958124161 - <_> - - - - <_> - 7 17 2 2 -1. - <_> - 7 17 1 1 2. - <_> - 8 18 1 1 2. - 0 - 1.8238219490740448e-004 - -0.0250765793025494 - 0.2705084979534149 - <_> - - <_> - - - - <_> - 4 17 4 1 -1. - <_> - 6 17 2 1 2. - 0 - -8.5055502131581306e-004 - 0.1745920032262802 - 1 - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 9 6 1 3 3. - 0 - 4.7644949518144131e-003 - 2 - 0.4094217121601105 - <_> - - - - <_> - 16 10 1 4 -1. - <_> - 16 12 1 2 2. - 0 - -2.5098009500652552e-003 - 0.3960174024105072 - -0.1766722947359085 - <_> - - <_> - - - - <_> - 17 13 2 3 -1. - <_> - 16 14 2 1 3. - 1 - -5.0978600047528744e-003 - -0.4439386129379273 - 1 - <_> - - - - <_> - 3 8 13 10 -1. - <_> - 3 13 13 5 2. - 0 - -0.0520951710641384 - -0.6636319756507874 - 2 - <_> - - - - <_> - 9 6 9 1 -1. - <_> - 12 9 3 1 3. - 1 - 0.0352931506931782 - 0.0278010293841362 - 0.5674421191215515 - <_> - - <_> - - - - <_> - 2 5 15 6 -1. - <_> - 7 7 5 2 9. - 0 - -0.3693830966949463 - -0.5428128242492676 - 1 - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 1 1 2 3. - 1 - 5.7077431119978428e-003 - 2 - -0.3800724148750305 - <_> - - - - <_> - 0 17 6 3 -1. - <_> - 0 18 6 1 3. - 0 - 5.1315332530066371e-004 - -0.0755631625652313 - 0.1811268925666809 - <_> - - <_> - - - - <_> - 11 1 2 2 -1. - <_> - 11 1 1 2 2. - 1 - -8.1165106967091560e-003 - 0.4375719130039215 - 1 - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 12 5 1 1 2. - <_> - 13 6 1 1 2. - 0 - 2.4742930690990761e-005 - -0.1625289022922516 - 2 - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 12 0 4 2 3. - 0 - -8.3282394334673882e-003 - 0.2923378050327301 - -0.0525309517979622 - <_> - - <_> - - - - <_> - 10 9 3 3 -1. - <_> - 11 10 1 1 9. - 0 - -9.9733080714941025e-003 - 0.2301850020885468 - 1 - <_> - - - - <_> - 12 18 8 2 -1. - <_> - 12 19 8 1 2. - 0 - -1.6291439533233643e-003 - -0.3883445858955383 - 2 - <_> - - - - <_> - 8 18 9 2 -1. - <_> - 8 19 9 1 2. - 0 - 2.3081828840076923e-003 - 0.1543828994035721 - -0.1624809950590134 - <_> - - <_> - - - - <_> - 6 0 9 4 -1. - <_> - 6 1 9 2 2. - 0 - 7.0326360873878002e-003 - -0.0825225785374641 - 1 - <_> - - - - <_> - 3 8 12 4 -1. - <_> - 3 9 12 2 2. - 0 - -8.7802913039922714e-003 - 2 - 0.3275951147079468 - <_> - - - - <_> - 13 4 2 9 -1. - <_> - 10 7 2 3 3. - 1 - -0.1104435026645660 - 0.6319488883018494 - -0.2139869034290314 - <_> - - <_> - - - - <_> - 5 15 12 4 -1. - <_> - 5 15 6 2 2. - <_> - 11 17 6 2 2. - 0 - 6.3772657886147499e-003 - -0.0657749623060226 - 1 - <_> - - - - <_> - 6 3 14 10 -1. - <_> - 13 3 7 10 2. - 0 - -0.1442766040563583 - -0.5236160159111023 - 2 - <_> - - - - <_> - 9 2 6 2 -1. - <_> - 11 2 2 2 3. - 0 - 5.2613671869039536e-003 - 0.3768759965896606 - -0.3729720115661621 - <_> - - <_> - - - - <_> - 11 16 3 1 -1. - <_> - 12 16 1 1 3. - 0 - -9.3407719396054745e-004 - -0.3596082031726837 - 1 - <_> - - - - <_> - 15 16 2 4 -1. - <_> - 15 16 1 2 2. - <_> - 16 18 1 2 2. - 0 - 7.0944131584838033e-004 - 2 - 0.2992331981658936 - <_> - - - - <_> - 3 11 14 4 -1. - <_> - 3 11 7 2 2. - <_> - 10 13 7 2 2. - 0 - -0.0209672898054123 - -0.3073948025703430 - 0.0402094498276711 - <_> - - <_> - - - - <_> - 1 19 16 1 -1. - <_> - 5 19 8 1 2. - 0 - 3.0113470274955034e-003 - 1 - 2 - <_> - - - - <_> - 3 18 2 1 -1. - <_> - 4 18 1 1 2. - 0 - -1.6325850447174162e-004 - 0.0819600969552994 - -0.2398902028799057 - <_> - - - - <_> - 12 7 1 8 -1. - <_> - 10 9 1 4 2. - 1 - 3.9222151972353458e-003 - 0.3235664963722229 - -0.1214002966880798 - <_> - - <_> - - - - <_> - 18 3 2 16 -1. - <_> - 18 3 1 8 2. - <_> - 19 11 1 8 2. - 0 - 1.9476639572530985e-003 - 1 - -0.2012659013271332 - <_> - - - - <_> - 0 9 20 3 -1. - <_> - 5 9 10 3 2. - 0 - -0.1116667017340660 - -0.3185023069381714 - 2 - <_> - - - - <_> - 7 15 2 3 -1. - <_> - 7 15 1 3 2. - 1 - -8.8221747428178787e-003 - -0.4077777862548828 - 0.1749819070100784 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 4.4771569082513452e-004 - 1 - 0.2282689958810806 - <_> - - - - <_> - 5 5 12 11 -1. - <_> - 9 5 4 11 3. - 0 - -0.1538947969675064 - 0.2334679961204529 - 2 - <_> - - - - <_> - 14 0 4 14 -1. - <_> - 14 0 4 7 2. - 1 - 0.0995200872421265 - -0.1920678019523621 - 0.1927147954702377 - <_> - - <_> - - - - <_> - 15 1 2 8 -1. - <_> - 16 1 1 8 2. - 0 - -7.3821679688990116e-003 - -0.4625790119171143 - 1 - <_> - - - - <_> - 0 1 3 4 -1. - <_> - 0 2 3 2 2. - 0 - 3.8805850781500340e-003 - 2 - -0.2373351007699966 - <_> - - - - <_> - 5 9 9 9 -1. - <_> - 8 12 3 3 9. - 0 - 0.1633975952863693 - 0.0558625683188438 - 0.6196528077125549 - <_> - - <_> - - - - <_> - 12 7 4 6 -1. - <_> - 10 9 4 2 3. - 1 - -0.0880774110555649 - -0.3803322017192841 - 1 - <_> - - - - <_> - 5 5 8 9 -1. - <_> - 7 5 4 9 2. - 0 - -0.0359460189938545 - 0.2692562043666840 - 2 - <_> - - - - <_> - 2 3 16 2 -1. - <_> - 10 3 8 2 2. - 0 - -0.0164416208863258 - 0.1450808942317963 - -0.1621935963630676 - <_> - - <_> - - - - <_> - 7 1 4 3 -1. - <_> - 8 1 2 3 2. - 0 - -4.3592150323092937e-003 - -0.5106449723243713 - 1 - <_> - - - - <_> - 8 1 12 3 -1. - <_> - 11 1 6 3 2. - 0 - 0.0104855000972748 - 2 - 0.2832477092742920 - <_> - - - - <_> - 18 1 1 2 -1. - <_> - 18 2 1 1 2. - 0 - -6.1118233134038746e-005 - 0.0764861479401588 - -0.1980006992816925 - <_> - - <_> - - - - <_> - 6 9 8 2 -1. - <_> - 8 9 4 2 2. - 0 - -0.0471047796308994 - -0.7268381714820862 - 1 - <_> - - - - <_> - 5 7 2 4 -1. - <_> - 5 7 1 2 2. - <_> - 6 9 1 2 2. - 0 - 4.4213151559233665e-003 - 2 - 0.3963114917278290 - <_> - - - - <_> - 2 15 9 1 -1. - <_> - 5 15 3 1 3. - 0 - 7.0402962155640125e-003 - 0.0189202297478914 - -0.3701989948749542 - <_> - - <_> - - - - <_> - 3 10 6 9 -1. - <_> - 5 13 2 3 9. - 0 - 0.1425011008977890 - 1 - 0.8802040219306946 - <_> - - - - <_> - 0 9 7 3 -1. - <_> - 0 10 7 1 3. - 0 - -5.7172770611941814e-003 - 2 - 0.0435956716537476 - <_> - - - - <_> - 0 9 16 1 -1. - <_> - 8 9 8 1 2. - 0 - -0.0464815311133862 - 0.7650650143623352 - -0.2761993110179901 - <_> - - <_> - - - - <_> - 6 1 12 3 -1. - <_> - 5 2 12 1 3. - 1 - -0.0448387488722801 - -0.5154064297676086 - 1 - <_> - - - - <_> - 9 9 9 1 -1. - <_> - 12 9 3 1 3. - 0 - 0.0309579093009233 - 2 - 0.5906879901885986 - <_> - - - - <_> - 12 10 4 10 -1. - <_> - 14 10 2 10 2. - 0 - -8.7462607771158218e-003 - -0.2289946973323822 - 0.0638332962989807 - <_> - - <_> - - - - <_> - 5 10 4 8 -1. - <_> - 5 10 2 4 2. - <_> - 7 14 2 4 2. - 0 - -0.0157421696931124 - 1 - 2 - <_> - - - - <_> - 0 0 16 10 -1. - <_> - 0 0 8 5 2. - <_> - 8 5 8 5 2. - 0 - -0.0266405902802944 - 0.7833927869796753 - -0.0287424307316542 - <_> - - - - <_> - 5 15 2 4 -1. - <_> - 5 15 1 2 2. - <_> - 6 17 1 2 2. - 0 - 1.8860519630834460e-003 - -5.8971941471099854e-003 - -0.5225452780723572 - <_> - - <_> - - - - <_> - 14 2 6 16 -1. - <_> - 17 2 3 16 2. - 0 - 0.0900170207023621 - 1 - -0.2776674926280975 - <_> - - - - <_> - 7 5 6 1 -1. - <_> - 9 5 2 1 3. - 0 - 4.1232812218368053e-003 - 2 - -0.3348559141159058 - <_> - - - - <_> - 18 12 2 2 -1. - <_> - 18 12 1 2 2. - 1 - -3.1369640491902828e-003 - 0.2329771071672440 - -0.0251014791429043 - <_> - - <_> - - - - <_> - 16 0 3 18 -1. - <_> - 17 6 1 6 9. - 0 - -0.1906867027282715 - -0.4954926967620850 - 1 - <_> - - - - <_> - 0 2 20 3 -1. - <_> - 10 2 10 3 2. - 0 - -0.1257802993059158 - -0.4126330912113190 - 2 - <_> - - - - <_> - 1 19 2 1 -1. - <_> - 2 19 1 1 2. - 0 - -4.1931928717531264e-004 - 0.3146471977233887 - -1.8672699807211757e-003 - <_> - - <_> - - - - <_> - 8 0 6 3 -1. - <_> - 11 0 3 3 2. - 0 - -3.2330630347132683e-003 - 0.1256123930215836 - 1 - <_> - - - - <_> - 7 0 8 3 -1. - <_> - 11 0 4 3 2. - 0 - 1.7340299673378468e-003 - -0.3480119109153748 - 2 - <_> - - - - <_> - 18 9 1 6 -1. - <_> - 18 9 1 3 2. - 1 - -0.0220271795988083 - 0.4481570124626160 - -0.0723131969571114 - -1.1545649766921997 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 5 10 2 1 9. - 0 - 0.0334225483238697 - 2 - 1 - <_> - - - - <_> - 15 9 2 6 -1. - <_> - 15 9 1 3 2. - <_> - 16 12 1 3 2. - 0 - 8.5403252160176635e-004 - -0.1324736028909683 - 0.7673912048339844 - <_> - - - - <_> - 12 6 4 1 -1. - <_> - 13 7 2 1 2. - 1 - -7.3585510253906250e-003 - 0.1387142986059189 - -0.3141536116600037 - <_> - - <_> - - - - <_> - 1 6 18 14 -1. - <_> - 7 6 6 14 3. - 0 - -0.1022270023822784 - 1 - -0.2030275017023087 - <_> - - - - <_> - 15 10 4 2 -1. - <_> - 15 10 2 1 2. - <_> - 17 11 2 1 2. - 0 - 3.4475249703973532e-003 - 2 - 0.6843457221984863 - <_> - - - - <_> - 14 8 6 7 -1. - <_> - 16 8 2 7 3. - 0 - -0.0176455806940794 - 0.4240447878837585 - -0.0439768098294735 - <_> - - <_> - - - - <_> - 0 10 2 10 -1. - <_> - 1 10 1 10 2. - 0 - 3.2828699331730604e-003 - 1 - -0.3299095928668976 - <_> - - - - <_> - 18 0 2 12 -1. - <_> - 19 0 1 12 2. - 0 - -2.6843189261853695e-003 - -0.3545944988727570 - 2 - <_> - - - - <_> - 4 7 10 1 -1. - <_> - 4 7 5 1 2. - 1 - 2.6746080256998539e-003 - 0.2009472995996475 - -0.2563773989677429 - <_> - - <_> - - - - <_> - 12 1 6 2 -1. - <_> - 12 2 6 1 2. - 0 - 4.3111201375722885e-003 - 2 - 1 - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 8 8 3 1 2. - 1 - -0.0100819598883390 - 0.6356294155120850 - 7.2961407713592052e-003 - <_> - - - - <_> - 14 10 4 3 -1. - <_> - 13 11 4 1 3. - 1 - -0.0126214595511556 - -0.4796228110790253 - -0.0238742306828499 - <_> - - <_> - - - - <_> - 10 7 5 6 -1. - <_> - 10 10 5 3 2. - 0 - 0.0658511966466904 - 1 - -0.4399583041667938 - <_> - - - - <_> - 11 5 5 8 -1. - <_> - 9 7 5 4 2. - 1 - 0.0660912394523621 - 2 - 0.5881723165512085 - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 16 2 1 3 2. - 1 - 0.0106161599978805 - 0.0441447496414185 - -0.5287160277366638 - <_> - - <_> - - - - <_> - 4 2 13 9 -1. - <_> - 4 5 13 3 3. - 0 - -0.1707732975482941 - 0.3545449078083038 - 1 - <_> - - - - <_> - 9 2 6 2 -1. - <_> - 11 2 2 2 3. - 0 - 7.3064928874373436e-003 - 2 - -0.4871669113636017 - <_> - - - - <_> - 0 0 9 2 -1. - <_> - 0 1 9 1 2. - 0 - -0.0162329506129026 - 0.5102052092552185 - -0.0434316098690033 - <_> - - <_> - - - - <_> - 11 2 3 12 -1. - <_> - 12 2 1 12 3. - 0 - 0.0174571499228477 - 1 - 0.6051520109176636 - <_> - - - - <_> - 19 17 1 3 -1. - <_> - 19 18 1 1 3. - 0 - 1.8004700905294158e-005 - -0.1725002974271774 - 2 - <_> - - - - <_> - 19 18 1 2 -1. - <_> - 19 19 1 1 2. - 0 - -1.8200390331912786e-004 - -0.1930534988641739 - 0.1970009952783585 - <_> - - <_> - - - - <_> - 13 4 2 4 -1. - <_> - 13 4 1 2 2. - <_> - 14 6 1 2 2. - 0 - 1.9662559498101473e-004 - 1 - 2 - <_> - - - - <_> - 14 7 1 4 -1. - <_> - 13 8 1 2 2. - 1 - -0.0111326295882463 - 0.5084788799285889 - -0.1996293962001801 - <_> - - - - <_> - 1 10 3 1 -1. - <_> - 2 10 1 1 3. - 0 - 2.1626690868288279e-003 - 0.1647807061672211 - -0.4268808960914612 - <_> - - <_> - - - - <_> - 18 9 1 4 -1. - <_> - 17 10 1 2 2. - 1 - 7.7909911051392555e-003 - 1 - 0.4067958891391754 - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 8 9 3 2 2. - <_> - 11 11 3 2 2. - 0 - -0.0172339193522930 - -0.3794116079807282 - 2 - <_> - - - - <_> - 0 9 15 3 -1. - <_> - 0 10 15 1 3. - 0 - 0.0129388095811009 - 0.0505899190902710 - -0.3916378021240234 - <_> - - <_> - - - - <_> - 16 6 4 3 -1. - <_> - 15 7 4 1 3. - 1 - -0.0173870604485273 - 0.3160330057144165 - 1 - <_> - - - - <_> - 11 8 9 4 -1. - <_> - 11 9 9 2 2. - 0 - -2.5230729952454567e-003 - -0.1728754043579102 - 2 - <_> - - - - <_> - 16 5 1 6 -1. - <_> - 16 5 1 3 2. - 1 - 6.4417538233101368e-003 - -0.0904296115040779 - 0.3188948035240173 - <_> - - <_> - - - - <_> - 7 17 4 3 -1. - <_> - 8 17 2 3 2. - 0 - -6.1783548444509506e-003 - -0.8673452734947205 - 1 - <_> - - - - <_> - 4 5 1 4 -1. - <_> - 3 6 1 2 2. - 1 - -6.8178442306816578e-003 - -0.4489268958568573 - 2 - <_> - - - - <_> - 17 16 3 4 -1. - <_> - 17 17 3 2 2. - 0 - 1.2576530571095645e-004 - -0.0914771929383278 - 0.1524305045604706 - <_> - - <_> - - - - <_> - 14 17 4 3 -1. - <_> - 14 18 4 1 3. - 0 - 3.7562008947134018e-003 - 1 - -0.3925963938236237 - <_> - - - - <_> - 6 3 8 3 -1. - <_> - 6 4 8 1 3. - 0 - -7.1173519827425480e-003 - 2 - -0.0193430203944445 - <_> - - - - <_> - 9 4 1 8 -1. - <_> - 9 6 1 4 2. - 0 - -4.5744940871372819e-004 - 0.5856549739837647 - -3.0873420182615519e-003 - <_> - - <_> - - - - <_> - 14 0 6 1 -1. - <_> - 17 0 3 1 2. - 0 - 1.8661000067368150e-003 - 1 - 0.1292482018470764 - <_> - - - - <_> - 15 3 2 1 -1. - <_> - 15 3 1 1 2. - 1 - 4.5793029130436480e-004 - -0.3067753016948700 - 2 - <_> - - - - <_> - 16 1 3 4 -1. - <_> - 17 1 1 4 3. - 0 - -7.0905109168961644e-004 - -0.2763735055923462 - 0.1831604987382889 - <_> - - <_> - - - - <_> - 16 5 2 4 -1. - <_> - 17 5 1 4 2. - 0 - 1.6472890274599195e-003 - 1 - 2 - <_> - - - - <_> - 12 7 2 3 -1. - <_> - 12 8 2 1 3. - 0 - 3.3973839599639177e-003 - 0.0338318087160587 - 0.5398290157318115 - <_> - - - - <_> - 17 3 3 7 -1. - <_> - 18 3 1 7 3. - 0 - 1.0479029733687639e-003 - -0.3497217893600464 - 0.0340495593845844 - <_> - - <_> - - - - <_> - 15 7 5 2 -1. - <_> - 15 8 5 1 2. - 0 - -1.2611759593710303e-003 - 1 - -0.1080186963081360 - <_> - - - - <_> - 16 7 3 1 -1. - <_> - 17 8 1 1 3. - 1 - -1.3892400311306119e-003 - -0.0580673106014729 - 2 - <_> - - - - <_> - 0 10 3 6 -1. - <_> - 1 10 1 6 3. - 0 - -2.3636990226805210e-003 - -0.1187075003981590 - 0.4269065856933594 - <_> - - <_> - - - - <_> - 8 4 8 13 -1. - <_> - 10 4 4 13 2. - 0 - 0.0779760628938675 - 1 - 0.6127132177352905 - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 6 10 1 2 2. - 0 - 2.6837061159312725e-003 - 2 - 0.2089346945285797 - <_> - - - - <_> - 5 10 6 3 -1. - <_> - 7 11 2 1 9. - 0 - -0.0182154104113579 - 0.2202773988246918 - -0.1441258043050766 - <_> - - <_> - - - - <_> - 5 9 3 2 -1. - <_> - 6 9 1 2 3. - 0 - -7.1908776590134948e-005 - 0.1383648067712784 - 1 - <_> - - - - <_> - 6 7 9 3 -1. - <_> - 9 8 3 1 9. - 0 - -0.0487381592392921 - 2 - -0.1830586940050125 - <_> - - - - <_> - 0 6 4 6 -1. - <_> - 1 6 2 6 2. - 0 - 0.0104421498253942 - 0.2634834945201874 - -0.6350445151329041 - <_> - - <_> - - - - <_> - 10 17 1 3 -1. - <_> - 10 18 1 1 3. - 0 - 9.3731992819812149e-005 - 1 - 2 - <_> - - - - <_> - 8 16 4 2 -1. - <_> - 8 17 4 1 2. - 0 - -8.5826592112425715e-005 - 0.1404695957899094 - -0.2672165930271149 - <_> - - - - <_> - 1 18 10 2 -1. - <_> - 1 18 5 1 2. - <_> - 6 19 5 1 2. - 0 - -8.0251938197761774e-004 - -0.1293610036373138 - 0.2332673966884613 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 6 0 2 2 2. - 0 - -4.1836570017039776e-003 - -0.6015346050262451 - 1 - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 10 7 2 3 3. - 1 - -0.0727506130933762 - 2 - 0.0697076469659805 - <_> - - - - <_> - 6 5 7 9 -1. - <_> - 6 8 7 3 3. - 0 - -0.2173843979835510 - 0.5672767162322998 - -0.4585438966751099 - <_> - - <_> - - - - <_> - 16 12 2 4 -1. - <_> - 16 14 2 2 2. - 0 - 0.0116480998694897 - 2 - 1 - <_> - - - - <_> - 9 7 10 6 -1. - <_> - 9 7 5 3 2. - <_> - 14 10 5 3 2. - 0 - -0.0627012625336647 - 0.7899761795997620 - -0.3938801884651184 - <_> - - - - <_> - 9 5 8 4 -1. - <_> - 8 6 8 2 2. - 1 - 0.0216129794716835 - 0.0770598724484444 - -0.3848417997360230 - <_> - - <_> - - - - <_> - 3 14 6 6 -1. - <_> - 3 16 6 2 3. - 0 - 0.0140849500894547 - 2 - 1 - <_> - - - - <_> - 5 14 6 6 -1. - <_> - 5 14 3 3 2. - <_> - 8 17 3 3 2. - 0 - -0.0195486191660166 - -0.8654221892356873 - 0.3049587011337280 - <_> - - - - <_> - 2 7 4 6 -1. - <_> - 3 7 2 6 2. - 0 - -3.8142129778862000e-003 - 0.0908238589763641 - -0.1585984975099564 - <_> - - <_> - - - - <_> - 2 0 3 20 -1. - <_> - 3 0 1 20 3. - 0 - -0.0101528400555253 - 1 - 0.0449998304247856 - <_> - - - - <_> - 4 7 10 3 -1. - <_> - 4 7 5 3 2. - 1 - -0.0726965665817261 - -0.5691456794738770 - 2 - <_> - - - - <_> - 1 10 4 6 -1. - <_> - 1 10 2 3 2. - <_> - 3 13 2 3 2. - 0 - 6.2066782265901566e-003 - -0.2067396938800812 - 0.9026889204978943 - <_> - - <_> - - - - <_> - 4 9 2 10 -1. - <_> - 4 14 2 5 2. - 0 - 0.0691054835915565 - 1 - -0.5945181250572205 - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -1.4375509927049279e-003 - 0.4036371111869812 - 2 - <_> - - - - <_> - 0 18 6 2 -1. - <_> - 0 19 6 1 2. - 0 - -1.2960369931533933e-003 - -0.3194175064563751 - 0.0359844416379929 - <_> - - <_> - - - - <_> - 19 0 1 10 -1. - <_> - 19 0 1 5 2. - 1 - 0.0618669502437115 - 1 - -0.2778705060482025 - <_> - - - - <_> - 9 2 2 12 -1. - <_> - 9 5 2 6 2. - 0 - -0.0120857404544950 - 2 - -0.1351190060377121 - <_> - - - - <_> - 4 14 2 4 -1. - <_> - 3 15 2 2 2. - 1 - 2.4474540259689093e-003 - -0.0118337199091911 - 0.3794530034065247 - <_> - - <_> - - - - <_> - 8 17 4 1 -1. - <_> - 9 17 2 1 2. - 0 - -5.3315522382035851e-004 - -0.2255983054637909 - 1 - <_> - - - - <_> - 1 9 10 4 -1. - <_> - 1 9 5 2 2. - <_> - 6 11 5 2 2. - 0 - 0.0438313595950603 - 2 - -0.4712449014186859 - <_> - - - - <_> - 5 4 3 1 -1. - <_> - 6 4 1 1 3. - 0 - 3.1255939393304288e-004 - 0.1732459962368012 - -0.1078950017690659 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -3.2911780290305614e-003 - 0.7749202251434326 - 1 - <_> - - - - <_> - 13 7 3 3 -1. - <_> - 14 8 1 1 9. - 0 - -5.8774580247700214e-003 - 2 - -0.0827562063932419 - <_> - - - - <_> - 6 2 6 1 -1. - <_> - 9 2 3 1 2. - 0 - 1.7906239954754710e-003 - 0.0224716607481241 - 0.5206152796745300 - <_> - - <_> - - - - <_> - 8 0 12 7 -1. - <_> - 12 0 4 7 3. - 0 - -0.0282942093908787 - 1 - 2 - <_> - - - - <_> - 16 0 4 4 -1. - <_> - 16 0 2 4 2. - 1 - -0.0207379590719938 - -0.2719640135765076 - 0.2441193014383316 - <_> - - - - <_> - 2 0 16 7 -1. - <_> - 10 0 8 7 2. - 0 - 0.0604380518198013 - -0.1886623054742813 - 0.1210281029343605 - <_> - - <_> - - - - <_> - 7 1 8 2 -1. - <_> - 9 1 4 2 2. - 0 - 0.0106239402666688 - 1 - -0.4354805052280426 - <_> - - - - <_> - 4 6 12 1 -1. - <_> - 7 9 6 1 2. - 1 - -0.0521783605217934 - 0.5596138238906860 - 2 - <_> - - - - <_> - 3 17 6 3 -1. - <_> - 5 17 2 3 3. - 0 - -0.0100805498659611 - -0.4701203107833862 - 0.0358675904572010 - <_> - - <_> - - - - <_> - 0 19 12 1 -1. - <_> - 4 19 4 1 3. - 0 - -1.8482849700376391e-003 - 0.1697973012924194 - 1 - <_> - - - - <_> - 12 14 8 1 -1. - <_> - 14 14 4 1 2. - 0 - -1.9860679458361119e-004 - 0.0711328312754631 - 2 - <_> - - - - <_> - 4 10 12 6 -1. - <_> - 8 12 4 2 9. - 0 - 0.1355244964361191 - -0.2627255916595459 - 0.6101660728454590 - <_> - - <_> - - - - <_> - 12 4 8 6 -1. - <_> - 14 4 4 6 2. - 0 - -0.0159106291830540 - 1 - 2 - <_> - - - - <_> - 9 2 2 8 -1. - <_> - 9 2 1 8 2. - 1 - 0.0260222908109427 - -0.3087277114391327 - 0.4995445907115936 - <_> - - - - <_> - 1 18 19 2 -1. - <_> - 1 19 19 1 2. - 0 - 4.9573001451790333e-003 - 0.1657734960317612 - -0.0966539680957794 - <_> - - <_> - - - - <_> - 9 18 3 2 -1. - <_> - 10 18 1 2 3. - 0 - -7.6060830906499177e-005 - 0.1428806036710739 - 1 - <_> - - - - <_> - 10 3 8 3 -1. - <_> - 10 3 4 3 2. - 1 - -0.0751244574785233 - 0.2572224140167236 - 2 - <_> - - - - <_> - 4 0 9 1 -1. - <_> - 7 0 3 1 3. - 0 - -1.2995740398764610e-003 - 0.0536076202988625 - -0.2859834134578705 - <_> - - <_> - - - - <_> - 9 2 8 1 -1. - <_> - 13 2 4 1 2. - 0 - -2.2266160231083632e-003 - 2 - 1 - <_> - - - - <_> - 7 1 10 2 -1. - <_> - 7 2 10 1 2. - 0 - -0.0178640093654394 - 0.4011777937412262 - -0.1537975072860718 - <_> - - - - <_> - 0 11 3 3 -1. - <_> - 1 12 1 1 9. - 0 - -7.8721214085817337e-003 - -0.5309259891510010 - 0.2048681974411011 - <_> - - <_> - - - - <_> - 0 10 12 9 -1. - <_> - 4 10 4 9 3. - 0 - 7.2514810599386692e-003 - 2 - 1 - <_> - - - - <_> - 4 0 6 3 -1. - <_> - 6 0 2 3 3. - 0 - -3.3152610994875431e-003 - 0.4345374107360840 - 9.4297742471098900e-003 - <_> - - - - <_> - 17 2 3 2 -1. - <_> - 18 2 1 2 3. - 0 - 1.1477110092528164e-004 - -0.2559975087642670 - 0.0845300182700157 - <_> - - <_> - - - - <_> - 14 10 4 4 -1. - <_> - 14 10 2 4 2. - 1 - -0.0816278830170631 - 0.6330761909484863 - 1 - <_> - - - - <_> - 7 10 2 3 -1. - <_> - 6 11 2 1 3. - 1 - -3.0422580894082785e-003 - 0.1466089934110642 - 2 - <_> - - - - <_> - 4 5 1 2 -1. - <_> - 4 5 1 1 2. - 1 - 9.5837161643430591e-004 - -0.2002328038215637 - 0.0918232128024101 - <_> - - <_> - - - - <_> - 0 0 4 1 -1. - <_> - 2 0 2 1 2. - 0 - -2.9197218827903271e-004 - 0.1174108013510704 - 1 - <_> - - - - <_> - 1 18 3 2 -1. - <_> - 1 19 3 1 2. - 0 - -4.1077801142819226e-004 - -0.4092074036598206 - 2 - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 0 2 4 2 3. - 0 - -3.4885460045188665e-003 - -0.3931092023849487 - 0.0910947769880295 - <_> - - <_> - - - - <_> - 0 10 12 10 -1. - <_> - 0 10 6 5 2. - <_> - 6 15 6 5 2. - 0 - -0.0804583877325058 - -0.3972836136817932 - 1 - <_> - - - - <_> - 7 15 6 2 -1. - <_> - 7 16 6 1 2. - 0 - 0.0148096196353436 - 2 - -0.6790196895599365 - <_> - - - - <_> - 14 8 6 3 -1. - <_> - 13 9 6 1 3. - 1 - -0.0258316490799189 - -0.4843156933784485 - 0.0728643834590912 - <_> - - <_> - - - - <_> - 6 0 1 2 -1. - <_> - 6 0 1 1 2. - 1 - -6.8509988486766815e-003 - -0.6245741844177246 - 1 - <_> - - - - <_> - 17 1 2 2 -1. - <_> - 17 1 1 2 2. - 1 - 7.2365561500191689e-003 - 2 - -0.4125021100044251 - <_> - - - - <_> - 15 10 1 2 -1. - <_> - 15 11 1 1 2. - 0 - -1.5076539712026715e-003 - 0.4203371107578278 - 4.4630239717662334e-003 - <_> - - <_> - - - - <_> - 16 9 3 6 -1. - <_> - 17 10 1 6 3. - 1 - 0.0314083211123943 - 1 - 0.5399547815322876 - <_> - - - - <_> - 2 8 16 9 -1. - <_> - 6 8 8 9 2. - 0 - -0.1517816036939621 - -0.3085573911666870 - 2 - <_> - - - - <_> - 12 1 6 3 -1. - <_> - 14 1 2 3 3. - 0 - -0.0140147600322962 - -0.5055071115493774 - 0.0475267507135868 - <_> - - <_> - - - - <_> - 9 6 9 4 -1. - <_> - 9 6 9 2 2. - 1 - -0.1447951942682266 - -0.6749972105026245 - 1 - <_> - - - - <_> - 3 17 2 2 -1. - <_> - 4 17 1 2 2. - 0 - -3.5547069273889065e-004 - 2 - -0.0696272179484367 - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - 3.9468570612370968e-003 - 0.2031012028455734 - -0.5764027833938599 - -1.1791440248489380 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 9 10 4 1 3. - 0 - -0.0370291210711002 - 1 - 2 - <_> - - - - <_> - 15 9 4 4 -1. - <_> - 15 9 2 2 2. - <_> - 17 11 2 2 2. - 0 - 3.5863209050148726e-003 - 9.5846345648169518e-003 - 0.7999265789985657 - <_> - - - - <_> - 4 10 4 1 -1. - <_> - 5 10 2 1 2. - 0 - 2.0645149052143097e-003 - -0.2924740910530090 - 0.1464221030473709 - <_> - - <_> - - - - <_> - 13 9 3 2 -1. - <_> - 14 9 1 2 3. - 0 - 5.5934679694473743e-003 - 2 - 1 - <_> - - - - <_> - 2 12 13 8 -1. - <_> - 2 16 13 4 2. - 0 - 0.0221766307950020 - -0.3940382003784180 - 0.5429170727729797 - <_> - - - - <_> - 16 17 1 3 -1. - <_> - 16 18 1 1 3. - 0 - 4.8479600081918761e-005 - -0.2406370937824249 - 0.0902139768004417 - <_> - - <_> - - - - <_> - 9 5 3 6 -1. - <_> - 10 7 1 2 9. - 0 - -0.0127223897725344 - 1 - -0.1755008995532990 - <_> - - - - <_> - 1 9 12 4 -1. - <_> - 1 10 12 2 2. - 0 - 0.0116103496402502 - 2 - -0.3178780078887940 - <_> - - - - <_> - 12 2 6 17 -1. - <_> - 14 2 2 17 3. - 0 - 0.0825203433632851 - 0.2879857122898102 - -0.4405286908149719 - <_> - - <_> - - - - <_> - 8 18 8 2 -1. - <_> - 10 18 4 2 2. - 0 - -0.0142084099352360 - -0.8258489966392517 - 1 - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 2 18 2 2 2. - 0 - -8.1465748371556401e-004 - 0.1952175945043564 - 2 - <_> - - - - <_> - 10 15 10 4 -1. - <_> - 10 15 5 2 2. - <_> - 15 17 5 2 2. - 0 - -5.5117108859121799e-003 - 0.1862213015556335 - -0.1941747963428497 - <_> - - <_> - - - - <_> - 15 1 3 14 -1. - <_> - 16 1 1 14 3. - 0 - 1.0232779895886779e-003 - 1 - -0.1756493002176285 - <_> - - - - <_> - 3 8 6 12 -1. - <_> - 3 14 6 6 2. - 0 - -0.0649678632616997 - -0.6919707059860230 - 2 - <_> - - - - <_> - 4 8 1 2 -1. - <_> - 4 9 1 1 2. - 0 - 2.5218280497938395e-003 - 0.0694763734936714 - 0.6793208718299866 - <_> - - <_> - - - - <_> - 3 8 12 6 -1. - <_> - 7 10 4 2 9. - 0 - 0.1509754955768585 - 1 - 0.4614242017269135 - <_> - - - - <_> - 18 3 2 7 -1. - <_> - 19 3 1 7 2. - 0 - 4.3899910524487495e-003 - 0.0428428389132023 - 2 - <_> - - - - <_> - 16 5 4 6 -1. - <_> - 14 7 4 2 3. - 1 - 9.9906846880912781e-003 - -0.4255102872848511 - 0.0328340306878090 - <_> - - <_> - - - - <_> - 14 9 2 4 -1. - <_> - 13 10 2 2 2. - 1 - -0.0218954402953386 - -0.4762736856937408 - 1 - <_> - - - - <_> - 0 1 20 2 -1. - <_> - 10 1 10 2 2. - 0 - -0.0760505273938179 - -0.3634809851646423 - 2 - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 3 0 3 5 2. - 0 - -9.6018705517053604e-003 - 0.2462527006864548 - -0.0147368600592017 - <_> - - <_> - - - - <_> - 18 0 2 1 -1. - <_> - 19 0 1 1 2. - 0 - 6.1576829466503114e-005 - -0.1297238022089005 - 1 - <_> - - - - <_> - 13 9 1 3 -1. - <_> - 12 10 1 1 3. - 1 - -2.2094589658081532e-003 - 0.3234235942363739 - 2 - <_> - - - - <_> - 8 12 6 2 -1. - <_> - 10 12 2 2 3. - 0 - -0.0130343995988369 - 0.4993732869625092 - -0.1389435976743698 - <_> - - <_> - - - - <_> - 2 1 6 6 -1. - <_> - 4 1 2 6 3. - 0 - -0.0204114299267530 - -0.4582552015781403 - 1 - <_> - - - - <_> - 4 1 6 12 -1. - <_> - 4 4 6 6 2. - 0 - -0.0683601871132851 - 2 - -0.0532020106911659 - <_> - - - - <_> - 3 3 2 3 -1. - <_> - 2 4 2 1 3. - 1 - -4.1714729741215706e-003 - -0.3381547033786774 - 0.2820979952812195 - <_> - - <_> - - - - <_> - 7 9 2 3 -1. - <_> - 6 10 2 1 3. - 1 - -2.2963550873100758e-003 - 1 - -0.0875581130385399 - <_> - - - - <_> - 2 4 14 5 -1. - <_> - 9 4 7 5 2. - 0 - -0.0734226703643799 - 0.5838512778282166 - 2 - <_> - - - - <_> - 10 0 9 4 -1. - <_> - 13 3 3 4 3. - 1 - 0.0351193211972713 - -0.0783735290169716 - 0.5228450894355774 - <_> - - <_> - - - - <_> - 0 15 3 3 -1. - <_> - 0 16 3 1 3. - 0 - -2.3843089584261179e-003 - -0.3607513010501862 - 1 - <_> - - - - <_> - 5 17 2 3 -1. - <_> - 5 18 2 1 3. - 0 - 5.8223021915182471e-004 - 2 - 0.2103656977415085 - <_> - - - - <_> - 7 12 2 8 -1. - <_> - 7 14 2 4 2. - 0 - 5.1109357737004757e-003 - -0.1943690925836563 - 0.1368142068386078 - <_> - - <_> - - - - <_> - 3 18 5 2 -1. - <_> - 3 19 5 1 2. - 0 - -6.9154787342995405e-004 - -0.2396291047334671 - 1 - <_> - - - - <_> - 18 10 1 2 -1. - <_> - 18 10 1 1 2. - 1 - -5.5549171520397067e-004 - 2 - -0.1085866019129753 - <_> - - - - <_> - 0 0 1 18 -1. - <_> - 0 9 1 9 2. - 0 - -7.5950571335852146e-003 - -0.0913985818624496 - 0.2757810950279236 - <_> - - <_> - - - - <_> - 8 1 4 2 -1. - <_> - 8 2 4 1 2. - 0 - 2.8131629806011915e-003 - -0.0737454965710640 - 1 - <_> - - - - <_> - 10 8 5 4 -1. - <_> - 10 8 5 2 2. - 1 - -0.0452725403010845 - 0.3989123106002808 - 2 - <_> - - - - <_> - 5 11 6 1 -1. - <_> - 7 11 2 1 3. - 0 - -2.6697120629251003e-003 - 0.3744007050991058 - -0.2597860991954804 - <_> - - <_> - - - - <_> - 14 8 4 12 -1. - <_> - 14 12 4 4 3. - 0 - -0.0108492197468877 - 2 - 1 - <_> - - - - <_> - 1 6 2 4 -1. - <_> - 1 8 2 2 2. - 0 - -0.0167768504470587 - -0.6767866015434265 - -0.0492378585040569 - <_> - - - - <_> - 13 14 6 3 -1. - <_> - 15 15 2 1 9. - 0 - -0.0196302197873592 - -0.4786553084850311 - 0.2230004966259003 - <_> - - <_> - - - - <_> - 10 12 4 8 -1. - <_> - 10 16 4 4 2. - 0 - 0.0709011703729630 - 1 - -0.2892636954784393 - <_> - - - - <_> - 5 11 2 2 -1. - <_> - 6 11 1 2 2. - 0 - 7.0403231075033545e-004 - -0.0535750314593315 - 2 - <_> - - - - <_> - 7 14 8 2 -1. - <_> - 7 15 8 1 2. - 0 - 3.3363080583512783e-003 - -8.7073008762672544e-004 - 0.4088867008686066 - <_> - - <_> - - - - <_> - 17 6 2 2 -1. - <_> - 17 6 1 2 2. - 1 - 9.3207405880093575e-003 - 1 - -0.5339909195899963 - <_> - - - - <_> - 5 1 3 2 -1. - <_> - 5 1 3 1 2. - 1 - 0.0115120597183704 - 2 - -0.5217738747596741 - <_> - - - - <_> - 0 16 2 3 -1. - <_> - 0 17 2 1 3. - 0 - -1.8639869813341647e-004 - -0.1125406995415688 - 0.1309698969125748 - <_> - - <_> - - - - <_> - 7 0 5 3 -1. - <_> - 7 1 5 1 3. - 0 - 1.5442570438608527e-003 - -0.0836661010980606 - 1 - <_> - - - - <_> - 0 0 16 2 -1. - <_> - 0 1 16 1 2. - 0 - 2.5775749236345291e-003 - 0.3254413008689880 - 2 - <_> - - - - <_> - 5 8 4 2 -1. - <_> - 5 8 2 1 2. - <_> - 7 9 2 1 2. - 0 - -1.2664040550589561e-003 - 0.3037044107913971 - -0.2605242133140564 - <_> - - <_> - - - - <_> - 14 5 6 2 -1. - <_> - 14 5 3 1 2. - <_> - 17 6 3 1 2. - 0 - 3.2941689714789391e-003 - 1 - 0.2150689065456390 - <_> - - - - <_> - 2 1 2 4 -1. - <_> - 3 1 1 4 2. - 0 - -2.3375200107693672e-003 - 0.1973852962255478 - 2 - <_> - - - - <_> - 2 7 1 2 -1. - <_> - 2 8 1 1 2. - 0 - -7.7096500899642706e-004 - 0.0699861720204353 - -0.1983956992626190 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 0 1 2 2. - <_> - 1 2 1 2 2. - 0 - -2.7190460241399705e-004 - 1 - 0.0832138881087303 - <_> - - - - <_> - 8 0 8 10 -1. - <_> - 8 0 4 5 2. - <_> - 12 5 4 5 2. - 0 - 0.0272373892366886 - -0.2842944860458374 - 2 - <_> - - - - <_> - 3 3 2 8 -1. - <_> - 3 5 2 4 2. - 0 - -0.0150807797908783 - 0.6894015073776245 - -0.0576281510293484 - <_> - - <_> - - - - <_> - 7 9 9 2 -1. - <_> - 10 9 3 2 3. - 0 - -0.0657309368252754 - -0.5248283147811890 - 1 - <_> - - - - <_> - 6 3 2 3 -1. - <_> - 6 3 1 3 2. - 1 - -7.4283648282289505e-003 - 0.3952344954013825 - 2 - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 11 14 2 1 2. - 0 - 3.4652319736778736e-003 - -0.0736907795071602 - 0.2080066055059433 - <_> - - <_> - - - - <_> - 16 2 4 5 -1. - <_> - 17 2 2 5 2. - 0 - -0.0126130199059844 - -0.6889349222183228 - 1 - <_> - - - - <_> - 7 10 12 6 -1. - <_> - 11 12 4 2 9. - 0 - 0.2328812032938004 - 2 - 0.7079027295112610 - <_> - - - - <_> - 14 6 2 7 -1. - <_> - 15 6 1 7 2. - 0 - 0.0219035092741251 - -7.7761108987033367e-003 - 0.8437221050262451 - <_> - - <_> - - - - <_> - 18 16 1 3 -1. - <_> - 18 17 1 1 3. - 0 - 1.0629750322550535e-003 - 1 - -0.3424642086029053 - <_> - - - - <_> - 18 9 2 2 -1. - <_> - 18 9 1 1 2. - <_> - 19 10 1 1 2. - 0 - 1.8193929281551391e-004 - 0.1065779030323029 - 2 - <_> - - - - <_> - 16 7 4 4 -1. - <_> - 16 7 2 2 2. - <_> - 18 9 2 2 2. - 0 - 1.4717869926244020e-003 - -0.3197098970413208 - 0.0705775693058968 - <_> - - <_> - - - - <_> - 14 10 6 6 -1. - <_> - 14 10 3 3 2. - <_> - 17 13 3 3 2. - 0 - 7.5306659564375877e-003 - 1 - 2 - <_> - - - - <_> - 8 16 2 4 -1. - <_> - 8 17 2 2 2. - 0 - 1.7505730502307415e-003 - -0.1546027958393097 - 0.2133508026599884 - <_> - - - - <_> - 18 11 2 8 -1. - <_> - 18 11 1 4 2. - <_> - 19 15 1 4 2. - 0 - 3.8401300553232431e-003 - 0.2380007058382034 - -0.4105584025382996 - <_> - - <_> - - - - <_> - 7 4 6 12 -1. - <_> - 7 8 6 4 3. - 0 - -0.2504155039787293 - 1 - 2 - <_> - - - - <_> - 0 7 20 9 -1. - <_> - 5 7 10 9 2. - 0 - -0.2044478952884674 - -0.3792730867862701 - 0.4987036883831024 - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - -0.0123830400407314 - 0.4634347856044769 - -0.0676133036613464 - <_> - - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 5 4 3 2 2. - 1 - 1.9026029622182250e-003 - 2 - 1 - <_> - - - - <_> - 14 3 3 12 -1. - <_> - 14 3 3 6 2. - 1 - -0.1670543998479843 - 0.3535686135292053 - -0.2480345964431763 - <_> - - - - <_> - 11 5 8 6 -1. - <_> - 11 7 8 2 3. - 0 - -0.0869375914335251 - -0.5678138136863709 - 0.1012118980288506 - <_> - - <_> - - - - <_> - 17 7 3 5 -1. - <_> - 18 8 1 5 3. - 1 - -0.0103149497881532 - 1 - -0.0525304488837719 - <_> - - - - <_> - 3 11 6 6 -1. - <_> - 5 13 2 2 9. - 0 - 4.5044738799333572e-003 - 2 - -0.0900711566209793 - <_> - - - - <_> - 15 6 4 5 -1. - <_> - 15 6 2 5 2. - 1 - 0.0151721201837063 - 0.7175869941711426 - -0.0377409495413303 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 7 10 3 1 3. - 1 - -5.6233601644635201e-003 - 0.2332572042942047 - 1 - <_> - - - - <_> - 6 7 9 2 -1. - <_> - 9 10 3 2 3. - 1 - 0.0545678585767746 - 2 - 0.4864645898342133 - <_> - - - - <_> - 7 8 2 12 -1. - <_> - 7 8 1 6 2. - <_> - 8 14 1 6 2. - 0 - 9.7008212469518185e-004 - -0.2460052967071533 - 0.0242243092507124 - <_> - - <_> - - - - <_> - 5 17 3 2 -1. - <_> - 6 17 1 2 3. - 0 - -2.7179729659110308e-003 - -0.5363339185714722 - 1 - <_> - - - - <_> - 4 5 3 4 -1. - <_> - 5 6 1 4 3. - 1 - -0.0204196404665709 - 2 - -0.0113616501912475 - <_> - - - - <_> - 11 1 6 10 -1. - <_> - 11 1 6 5 2. - 1 - -0.0333077609539032 - 0.6739841103553772 - -0.1406348943710327 - <_> - - <_> - - - - <_> - 2 6 6 1 -1. - <_> - 2 6 3 1 2. - 1 - -0.0255001801997423 - -0.3617782890796661 - 1 - <_> - - - - <_> - 16 6 1 6 -1. - <_> - 14 8 1 2 3. - 1 - -0.0406299084424973 - -0.5457913279533386 - 2 - <_> - - - - <_> - 14 6 1 3 -1. - <_> - 13 7 1 1 3. - 1 - -9.0600941330194473e-003 - 0.5220224261283875 - 0.0227364692837000 - <_> - - <_> - - - - <_> - 0 6 18 3 -1. - <_> - 6 7 6 1 9. - 0 - -0.2563566863536835 - -0.8332834839820862 - 1 - <_> - - - - <_> - 14 7 6 3 -1. - <_> - 14 7 3 3 2. - 1 - -0.0953407511115074 - 2 - -0.0168354399502277 - <_> - - - - <_> - 7 12 4 3 -1. - <_> - 7 12 2 3 2. - 1 - -5.9463721700012684e-003 - 0.5690956711769104 - -0.2497300952672958 - <_> - - <_> - - - - <_> - 18 8 2 8 -1. - <_> - 18 8 1 4 2. - <_> - 19 12 1 4 2. - 0 - -9.2139927437528968e-004 - 2 - 1 - <_> - - - - <_> - 15 1 4 2 -1. - <_> - 16 2 2 2 2. - 1 - -6.8437340669333935e-003 - -0.3673509061336517 - 0.1601510941982269 - <_> - - - - <_> - 14 0 2 10 -1. - <_> - 14 0 1 5 2. - <_> - 15 5 1 5 2. - 0 - -8.2487165927886963e-003 - 0.5268660187721252 - -0.1515123993158341 - <_> - - <_> - - - - <_> - 10 1 2 6 -1. - <_> - 10 1 1 3 2. - <_> - 11 4 1 3 2. - 0 - 4.7555859200656414e-003 - 1 - -0.4270030856132507 - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 17 2 1 3 2. - 0 - 9.3567231670022011e-004 - 2 - 0.1732777059078217 - <_> - - - - <_> - 12 2 4 1 -1. - <_> - 14 2 2 1 2. - 0 - -6.3907768344506621e-004 - 0.1315557062625885 - -0.1864600032567978 - <_> - - <_> - - - - <_> - 0 1 4 2 -1. - <_> - 0 2 4 1 2. - 0 - -5.6550311855971813e-003 - 0.3129703998565674 - 1 - <_> - - - - <_> - 12 11 3 4 -1. - <_> - 13 12 1 4 3. - 1 - -0.0122124599292874 - 0.4675086140632629 - 2 - <_> - - - - <_> - 8 12 8 7 -1. - <_> - 10 12 4 7 2. - 0 - -0.0105503397062421 - -0.2446123063564301 - 0.0165020301938057 - <_> - - <_> - - - - <_> - 2 5 6 8 -1. - <_> - 4 5 2 8 3. - 0 - -7.5216998811811209e-004 - -0.1007530018687248 - 1 - <_> - - - - <_> - 18 17 2 2 -1. - <_> - 18 17 1 1 2. - <_> - 19 18 1 1 2. - 0 - 3.0214080470614135e-004 - 2 - -0.2886560857295990 - <_> - - - - <_> - 5 14 1 2 -1. - <_> - 5 15 1 1 2. - 0 - 2.8510420816019177e-004 - -0.0118444999679923 - 0.3669173121452332 - <_> - - <_> - - - - <_> - 1 10 6 1 -1. - <_> - 3 10 2 1 3. - 0 - -4.4020009227097034e-003 - 1 - -0.0771671384572983 - <_> - - - - <_> - 6 6 6 12 -1. - <_> - 9 6 3 12 2. - 0 - 0.0355682186782360 - 2 - -0.4433585107326508 - <_> - - - - <_> - 18 2 2 12 -1. - <_> - 18 2 1 6 2. - <_> - 19 8 1 6 2. - 0 - 6.4601990743540227e-005 - 0.0137816602364182 - 0.4531911909580231 - <_> - - <_> - - - - <_> - 2 16 9 3 -1. - <_> - 2 17 9 1 3. - 0 - 9.3313469551503658e-004 - 1 - -0.1205907016992569 - <_> - - - - <_> - 10 9 10 9 -1. - <_> - 10 12 10 3 3. - 0 - -0.0878381431102753 - -0.4673660993576050 - 2 - <_> - - - - <_> - 13 14 3 4 -1. - <_> - 13 15 3 2 2. - 0 - 2.8037109877914190e-003 - 0.0715188309550285 - 0.4459312856197357 - <_> - - <_> - - - - <_> - 8 9 1 3 -1. - <_> - 8 10 1 1 3. - 0 - 2.3915059864521027e-003 - 1 - -0.3327791988849640 - <_> - - - - <_> - 2 16 5 3 -1. - <_> - 2 17 5 1 3. - 0 - -1.8183189677074552e-003 - 2 - 0.0914784073829651 - <_> - - - - <_> - 11 19 6 1 -1. - <_> - 13 19 2 1 3. - 0 - 1.9244100258219987e-004 - 0.0491212792694569 - -0.4526689052581787 - <_> - - <_> - - - - <_> - 9 1 6 15 -1. - <_> - 11 6 2 5 9. - 0 - 0.2178990989923477 - 1 - 0.7489240169525147 - <_> - - - - <_> - 15 10 2 8 -1. - <_> - 15 10 1 4 2. - <_> - 16 14 1 4 2. - 0 - 1.0331439552828670e-003 - -0.1063700020313263 - 2 - <_> - - - - <_> - 0 7 6 12 -1. - <_> - 2 11 2 4 9. - 0 - -0.1413833051919937 - -0.4297462999820709 - 0.1617968976497650 - <_> - - <_> - - - - <_> - 11 2 9 4 -1. - <_> - 11 2 9 2 2. - 1 - -0.0591066889464855 - -0.4077411890029907 - 1 - <_> - - - - <_> - 5 9 2 3 -1. - <_> - 5 9 1 3 2. - 1 - 7.8279376029968262e-003 - 2 - 0.3923799097537994 - <_> - - - - <_> - 14 8 3 4 -1. - <_> - 15 8 1 4 3. - 0 - -3.1304039293900132e-004 - 0.1396436989307404 - -0.0975623577833176 - <_> - - <_> - - - - <_> - 2 13 18 4 -1. - <_> - 11 13 9 4 2. - 0 - -0.0649378001689911 - 0.2259044051170349 - 1 - <_> - - - - <_> - 0 0 20 14 -1. - <_> - 10 0 10 14 2. - 0 - -0.2173981070518494 - -0.3448418080806732 - 2 - <_> - - - - <_> - 0 9 6 11 -1. - <_> - 2 9 2 11 3. - 0 - -0.0202571507543325 - 0.2472362965345383 - -0.0666092634201050 - <_> - - <_> - - - - <_> - 2 0 3 17 -1. - <_> - 3 0 1 17 3. - 0 - -0.0115484995767474 - 1 - 2 - <_> - - - - <_> - 1 0 18 7 -1. - <_> - 7 0 6 7 3. - 0 - -0.0678114071488380 - 0.1942711025476456 - -0.5872799754142761 - <_> - - - - <_> - 7 3 4 6 -1. - <_> - 9 3 2 6 2. - 0 - -0.0349533893167973 - 0.7895535826683044 - 0.0152971902862191 - <_> - - <_> - - - - <_> - 6 0 14 20 -1. - <_> - 6 0 7 10 2. - <_> - 13 10 7 10 2. - 0 - -0.1718046963214874 - -0.2961244881153107 - 1 - <_> - - - - <_> - 18 6 2 2 -1. - <_> - 18 6 1 1 2. - <_> - 19 7 1 1 2. - 0 - -2.5918710161931813e-004 - 2 - 0.1028172001242638 - <_> - - - - <_> - 13 9 4 3 -1. - <_> - 14 10 2 3 2. - 1 - 0.0127416402101517 - -0.3070206046104431 - 0.2169245034456253 - <_> - - <_> - - - - <_> - 10 11 2 6 -1. - <_> - 8 13 2 2 3. - 1 - -0.0312585905194283 - 0.5734878778457642 - 1 - <_> - - - - <_> - 18 15 2 1 -1. - <_> - 18 15 1 1 2. - 1 - 3.5533700138330460e-003 - 2 - 0.5047500729560852 - <_> - - - - <_> - 8 16 4 2 -1. - <_> - 9 16 2 2 2. - 0 - -9.2502118786796927e-004 - -0.2668665945529938 - 9.2138834297657013e-003 - <_> - - <_> - - - - <_> - 6 17 4 1 -1. - <_> - 7 17 2 1 2. - 0 - -1.2170480331405997e-003 - -0.3917261958122253 - 1 - <_> - - - - <_> - 7 0 12 5 -1. - <_> - 10 0 6 5 2. - 0 - -0.0220239497721195 - 0.2069057971239090 - 2 - <_> - - - - <_> - 6 4 9 3 -1. - <_> - 6 5 9 1 3. - 0 - 0.0295492298901081 - -0.0603583417832851 - 0.6975278854370117 - <_> - - <_> - - - - <_> - 15 0 4 2 -1. - <_> - 15 1 4 1 2. - 0 - -7.2058511432260275e-004 - 1 - 2 - <_> - - - - <_> - 6 0 9 20 -1. - <_> - 6 5 9 10 2. - 0 - -0.2562567889690399 - -0.3376376032829285 - 0.0572218708693981 - <_> - - - - <_> - 0 7 11 12 -1. - <_> - 0 13 11 6 2. - 0 - 0.3281723856925964 - 0.0182681605219841 - 0.4586629867553711 - <_> - - <_> - - - - <_> - 1 8 10 1 -1. - <_> - 1 8 5 1 2. - 1 - -0.0524789504706860 - -0.3749239146709442 - 1 - <_> - - - - <_> - 12 1 2 10 -1. - <_> - 12 6 2 5 2. - 0 - -0.0722610726952553 - 0.5687894821166992 - 2 - <_> - - - - <_> - 18 5 1 6 -1. - <_> - 18 8 1 3 2. - 0 - -0.0107512399554253 - -0.3282316029071808 - 0.0504475384950638 - -1.0878429412841797 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 9 10 4 1 3. - 0 - -0.0364755988121033 - 1 - 2 - <_> - - - - <_> - 11 12 9 4 -1. - <_> - 14 12 3 4 3. - 0 - 0.0125702396035194 - 0.7885584235191345 - -0.0583554282784462 - <_> - - - - <_> - 12 8 7 4 -1. - <_> - 11 9 7 2 2. - 1 - -5.3332238458096981e-003 - 6.4850552007555962e-003 - -0.3841140866279602 - <_> - - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -3.8449079729616642e-003 - 1 - 2 - <_> - - - - <_> - 15 8 2 8 -1. - <_> - 15 8 1 4 2. - <_> - 16 12 1 4 2. - 0 - 1.8065240001305938e-003 - -0.0883801206946373 - 0.6635612249374390 - <_> - - - - <_> - 1 16 9 2 -1. - <_> - 1 17 9 1 2. - 0 - 4.4460720382630825e-003 - -0.2265107035636902 - 0.1216852962970734 - <_> - - <_> - - - - <_> - 5 2 14 12 -1. - <_> - 5 5 14 6 2. - 0 - -0.1544134020805359 - 1 - -0.1778910011053085 - <_> - - - - <_> - 2 10 2 10 -1. - <_> - 2 15 2 5 2. - 0 - 0.0289659798145294 - 2 - 0.3892947137355804 - <_> - - - - <_> - 1 0 12 5 -1. - <_> - 5 0 4 5 3. - 0 - -0.0181120708584785 - 0.4213728904724121 - -0.2065168023109436 - <_> - - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 17 1 1 2. - 1 - -3.0437670648097992e-003 - -0.4553112089633942 - 1 - <_> - - - - <_> - 12 1 8 2 -1. - <_> - 12 1 4 1 2. - <_> - 16 2 4 1 2. - 0 - -2.7257429901510477e-003 - 0.2557618021965027 - 2 - <_> - - - - <_> - 3 5 8 6 -1. - <_> - 5 5 4 6 2. - 0 - -0.0155355799943209 - 0.2946321964263916 - -0.1257286071777344 - <_> - - <_> - - - - <_> - 5 1 4 4 -1. - <_> - 4 2 4 2 2. - 1 - -0.0141823999583721 - -0.4784142971038818 - 1 - <_> - - - - <_> - 6 3 1 14 -1. - <_> - 6 10 1 7 2. - 0 - 2.8875279240310192e-003 - -0.1473912000656128 - 2 - <_> - - - - <_> - 15 10 2 10 -1. - <_> - 15 10 1 5 2. - <_> - 16 15 1 5 2. - 0 - 1.9505630480125546e-003 - -0.0116891004145145 - 0.3870835900306702 - <_> - - <_> - - - - <_> - 10 2 9 4 -1. - <_> - 13 2 3 4 3. - 0 - -4.1997907683253288e-003 - 2 - 1 - <_> - - - - <_> - 15 6 1 9 -1. - <_> - 15 9 1 3 3. - 0 - -0.0123431896790862 - 0.2106676995754242 - -0.2423882931470871 - <_> - - - - <_> - 3 2 6 2 -1. - <_> - 5 2 2 2 3. - 0 - -6.5799211151897907e-003 - -0.4170933961868286 - 0.1908935010433197 - <_> - - <_> - - - - <_> - 15 5 4 2 -1. - <_> - 15 5 2 1 2. - <_> - 17 6 2 1 2. - 0 - 2.0319439936429262e-003 - 1 - 0.2752510905265808 - <_> - - - - <_> - 8 2 6 4 -1. - <_> - 8 3 6 2 2. - 0 - -0.0226531494408846 - 0.6185734868049622 - 2 - <_> - - - - <_> - 17 18 1 2 -1. - <_> - 17 19 1 1 2. - 0 - -2.4583860067650676e-004 - -0.3790388107299805 - -0.0193958599120378 - <_> - - <_> - - - - <_> - 1 13 6 3 -1. - <_> - 3 14 2 1 9. - 0 - -1.1686830548569560e-003 - 0.1391365975141525 - 1 - <_> - - - - <_> - 2 16 14 2 -1. - <_> - 2 16 7 1 2. - <_> - 9 17 7 1 2. - 0 - 3.6638419260270894e-004 - -0.2607316970825195 - 2 - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 5 0 1 3 2. - 0 - -5.7184919569408521e-005 - 0.3036144077777863 - -0.1714784055948257 - <_> - - <_> - - - - <_> - 8 6 3 1 -1. - <_> - 9 7 1 1 3. - 1 - -2.3458409123122692e-003 - 2 - 1 - <_> - - - - <_> - 11 6 2 3 -1. - <_> - 10 7 2 1 3. - 1 - -7.0121302269399166e-003 - 0.1751028001308441 - -0.1713269054889679 - <_> - - - - <_> - 4 11 10 2 -1. - <_> - 4 12 10 1 2. - 0 - 0.0233181491494179 - 0.2286964058876038 - -0.3754465878009796 - <_> - - <_> - - - - <_> - 0 8 15 6 -1. - <_> - 0 10 15 2 3. - 0 - 0.0272935591638088 - 1 - -0.2868689000606537 - <_> - - - - <_> - 3 18 8 1 -1. - <_> - 5 18 4 1 2. - 0 - -7.4272030033171177e-003 - -0.6916741132736206 - 2 - <_> - - - - <_> - 14 2 3 2 -1. - <_> - 15 3 1 2 3. - 1 - -7.8977271914482117e-003 - -0.4157652854919434 - 0.1069445013999939 - <_> - - <_> - - - - <_> - 17 1 3 4 -1. - <_> - 18 1 1 4 3. - 0 - -3.6563118919730186e-003 - -0.4258097112178803 - 1 - <_> - - - - <_> - 8 17 4 2 -1. - <_> - 10 17 2 2 2. - 0 - 1.5060990117490292e-003 - 2 - 0.2382732927799225 - <_> - - - - <_> - 12 8 2 3 -1. - <_> - 11 9 2 1 3. - 1 - -0.0222113896161318 - -0.6281852722167969 - -0.0129952495917678 - <_> - - <_> - - - - <_> - 5 7 4 2 -1. - <_> - 5 7 2 1 2. - <_> - 7 8 2 1 2. - 0 - -1.0182500118389726e-003 - 1 - 2 - <_> - - - - <_> - 3 12 6 5 -1. - <_> - 6 12 3 5 2. - 0 - 0.0276243705302477 - 0.2095236033201218 - -0.3960365056991577 - <_> - - - - <_> - 7 7 10 6 -1. - <_> - 7 9 10 2 3. - 0 - -0.0302671492099762 - -0.2925708889961243 - 0.0169497393071651 - <_> - - <_> - - - - <_> - 4 3 9 16 -1. - <_> - 7 3 3 16 3. - 0 - 0.0826865285634995 - 1 - 0.3386377990245819 - <_> - - - - <_> - 5 10 6 8 -1. - <_> - 5 12 6 4 2. - 0 - 0.0646551474928856 - 2 - 0.6164727807044983 - <_> - - - - <_> - 17 7 2 3 -1. - <_> - 17 7 1 3 2. - 1 - 2.7647409588098526e-003 - -0.1426669955253601 - 0.1238693967461586 - <_> - - <_> - - - - <_> - 16 0 1 12 -1. - <_> - 16 6 1 6 2. - 0 - -0.0311290994286537 - -0.3793180882930756 - 1 - <_> - - - - <_> - 13 4 5 2 -1. - <_> - 13 5 5 1 2. - 0 - -1.5587930101901293e-003 - 2 - -0.0929088592529297 - <_> - - - - <_> - 17 4 3 3 -1. - <_> - 17 5 3 1 3. - 0 - -5.9767777565866709e-004 - -0.1053064987063408 - 0.2994554936885834 - <_> - - <_> - - - - <_> - 10 1 9 6 -1. - <_> - 13 1 3 6 3. - 0 - -0.0501030795276165 - -0.4467842876911163 - 1 - <_> - - - - <_> - 7 7 13 4 -1. - <_> - 7 8 13 2 2. - 0 - 0.0257102306932211 - 2 - -0.4354937970638275 - <_> - - - - <_> - 13 11 6 2 -1. - <_> - 13 11 3 1 2. - <_> - 16 12 3 1 2. - 0 - -8.8613387197256088e-004 - 0.2097813934087753 - -0.0386379286646843 - <_> - - <_> - - - - <_> - 10 2 5 3 -1. - <_> - 10 3 5 1 3. - 0 - -6.0174837708473206e-003 - 0.2975271940231323 - 1 - <_> - - - - <_> - 1 8 4 2 -1. - <_> - 1 8 2 1 2. - <_> - 3 9 2 1 2. - 0 - 6.2055201269686222e-003 - 2 - 0.6669222712516785 - <_> - - - - <_> - 19 8 1 4 -1. - <_> - 19 9 1 2 2. - 0 - 2.7212419081479311e-004 - 0.0216719508171082 - -0.2713978886604309 - <_> - - <_> - - - - <_> - 4 9 3 2 -1. - <_> - 5 10 1 2 3. - 1 - -0.0136854397132993 - 0.4700508117675781 - 1 - <_> - - - - <_> - 4 4 15 9 -1. - <_> - 9 7 5 3 9. - 0 - -0.6164845824241638 - -0.5266693830490112 - 2 - <_> - - - - <_> - 8 0 9 11 -1. - <_> - 11 0 3 11 3. - 0 - -0.0262534096837044 - 0.1348302066326141 - -0.1063914969563484 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -4.1545720887370408e-004 - 1 - 2 - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 16 17 1 1 3. - 0 - -3.6237420863471925e-004 - -0.1858880966901779 - 0.5272755026817322 - <_> - - - - <_> - 14 16 3 3 -1. - <_> - 14 17 3 1 3. - 0 - 5.5113807320594788e-004 - 0.0453800112009048 - -0.2313341945409775 - <_> - - <_> - - - - <_> - 12 12 4 6 -1. - <_> - 13 12 2 6 2. - 0 - -3.1878859736025333e-003 - 1 - 2 - <_> - - - - <_> - 10 10 1 6 -1. - <_> - 8 12 1 2 3. - 1 - -6.2446491792798042e-003 - 0.2847540080547333 - -0.4058375954627991 - <_> - - - - <_> - 8 19 12 1 -1. - <_> - 11 19 6 1 2. - 0 - -2.1054609678685665e-003 - 0.2600018978118897 - -0.0163566097617149 - <_> - - <_> - - - - <_> - 14 16 2 2 -1. - <_> - 14 16 1 1 2. - <_> - 15 17 1 1 2. - 0 - 2.2513020667247474e-004 - 1 - -0.1877741962671280 - <_> - - - - <_> - 4 8 1 4 -1. - <_> - 3 9 1 2 2. - 1 - -5.1745050586760044e-003 - 2 - 0.1281276047229767 - <_> - - - - <_> - 6 9 4 2 -1. - <_> - 6 9 2 1 2. - <_> - 8 10 2 1 2. - 0 - -2.7152549009770155e-003 - 0.3443149030208588 - -0.4265809953212738 - <_> - - <_> - - - - <_> - 2 2 6 1 -1. - <_> - 2 2 3 1 2. - 1 - 0.0278465300798416 - 1 - -0.2855379879474640 - <_> - - - - <_> - 12 8 3 1 -1. - <_> - 13 8 1 1 3. - 0 - 4.3891910463571548e-003 - 2 - 0.6445503830909729 - <_> - - - - <_> - 13 3 2 6 -1. - <_> - 13 3 1 3 2. - <_> - 14 6 1 3 2. - 0 - 1.9749049097299576e-003 - -0.0828649625182152 - 0.1712259054183960 - <_> - - <_> - - - - <_> - 7 9 3 5 -1. - <_> - 8 9 1 5 3. - 0 - -3.1317298999056220e-004 - 1 - -0.1244347989559174 - <_> - - - - <_> - 6 1 2 17 -1. - <_> - 7 1 1 17 2. - 0 - -0.0154862804338336 - -0.1839528977870941 - 2 - <_> - - - - <_> - 15 1 4 11 -1. - <_> - 17 1 2 11 2. - 0 - 9.5049021765589714e-003 - 0.3449529111385346 - -0.0202865190804005 - <_> - - <_> - - - - <_> - 12 9 2 1 -1. - <_> - 13 9 1 1 2. - 0 - -3.7190609145909548e-004 - 2 - 1 - <_> - - - - <_> - 14 6 3 3 -1. - <_> - 15 6 1 3 3. - 0 - 2.9666710179299116e-003 - 4.3022842146456242e-003 - -0.3443658947944641 - <_> - - - - <_> - 1 6 2 4 -1. - <_> - 1 6 1 2 2. - <_> - 2 8 1 2 2. - 0 - -5.8068940415978432e-003 - -0.8413407206535339 - 0.2839236855506897 - <_> - - <_> - - - - <_> - 3 7 2 12 -1. - <_> - 3 7 1 6 2. - <_> - 4 13 1 6 2. - 0 - -5.5204080417752266e-003 - 2 - 1 - <_> - - - - <_> - 2 18 2 2 -1. - <_> - 2 18 1 1 2. - <_> - 3 19 1 1 2. - 0 - -1.3792069512419403e-004 - -0.2630021870136261 - 0.0267065204679966 - <_> - - - - <_> - 8 9 4 7 -1. - <_> - 8 9 2 7 2. - 1 - -0.0371873192489147 - -0.2924501895904541 - 0.4064193964004517 - <_> - - <_> - - - - <_> - 19 5 1 4 -1. - <_> - 19 7 1 2 2. - 0 - -5.0016207387670875e-004 - 1 - -0.1196566969156265 - <_> - - - - <_> - 5 18 3 2 -1. - <_> - 5 19 3 1 2. - 0 - -1.5453010564669967e-003 - -0.4256510138511658 - 2 - <_> - - - - <_> - 8 14 8 5 -1. - <_> - 10 14 4 5 2. - 0 - 1.9056679448112845e-003 - 0.2972406148910523 - -0.0479630492627621 - <_> - - <_> - - - - <_> - 0 16 8 3 -1. - <_> - 4 16 4 3 2. - 0 - 7.2636879049241543e-003 - -0.0645833164453506 - 1 - <_> - - - - <_> - 2 4 1 4 -1. - <_> - 2 5 1 2 2. - 0 - 1.9141070079058409e-003 - 2 - -0.3514733016490936 - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - 1.2875479296781123e-004 - 0.1119623035192490 - 0.5728499293327332 - <_> - - <_> - - - - <_> - 7 17 8 3 -1. - <_> - 9 17 4 3 2. - 0 - -0.0100926300510764 - -0.3782644867897034 - 1 - <_> - - - - <_> - 7 19 8 1 -1. - <_> - 9 19 4 1 2. - 0 - -7.8368087997660041e-004 - 0.2328823953866959 - 2 - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 0 0 3 3 2. - <_> - 3 3 3 3 2. - 0 - -9.8703950643539429e-003 - 0.2151077985763550 - -0.1269751936197281 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 9 5 1 1 2. - <_> - 10 6 1 1 2. - 0 - -1.0650960030034184e-003 - -0.3217842876911163 - 1 - <_> - - - - <_> - 8 17 1 3 -1. - <_> - 8 18 1 1 3. - 0 - 8.5762650996912271e-005 - -0.0888321101665497 - 2 - <_> - - - - <_> - 8 18 12 2 -1. - <_> - 8 18 6 1 2. - <_> - 14 19 6 1 2. - 0 - 8.1163638969883323e-004 - 0.3036557137966156 - -0.0837790071964264 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 9 2 1 2. - 1 - -4.8947618342936039e-003 - 0.1628282070159912 - 1 - <_> - - - - <_> - 8 18 3 2 -1. - <_> - 8 19 3 1 2. - 0 - 5.5883510503917933e-004 - 2 - -0.2539525926113129 - <_> - - - - <_> - 0 2 2 18 -1. - <_> - 1 2 1 18 2. - 0 - -1.9008320523425937e-003 - -0.1388822048902512 - 0.2991946041584015 - <_> - - <_> - - - - <_> - 0 19 12 1 -1. - <_> - 3 19 6 1 2. - 0 - -2.0215269178152084e-003 - 1 - 2 - <_> - - - - <_> - 3 12 6 1 -1. - <_> - 3 12 3 1 2. - 1 - -4.4383360072970390e-003 - 0.3925105929374695 - -0.0430695787072182 - <_> - - - - <_> - 6 11 14 5 -1. - <_> - 13 11 7 5 2. - 0 - 0.0684899091720581 - 2.4472021032124758e-003 - -0.2961803972721100 - <_> - - <_> - - - - <_> - 13 4 6 10 -1. - <_> - 15 4 2 10 3. - 0 - 0.0503062792122364 - 1 - 0.4224973022937775 - <_> - - - - <_> - 0 0 6 1 -1. - <_> - 3 0 3 1 2. - 0 - -5.6435600854456425e-003 - 2 - -0.0929016768932343 - <_> - - - - <_> - 15 7 1 12 -1. - <_> - 15 10 1 6 2. - 0 - -8.9875478297472000e-003 - 0.6678596138954163 - 0.0629851967096329 - <_> - - <_> - - - - <_> - 14 9 4 2 -1. - <_> - 15 9 2 2 2. - 0 - -7.9090101644396782e-004 - 1 - 2 - <_> - - - - <_> - 6 9 9 11 -1. - <_> - 9 9 3 11 3. - 0 - -0.0253009591251612 - 0.3084985017776489 - -0.0636082515120506 - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - 7.8745762584730983e-004 - -0.1488312035799027 - 0.2623400092124939 - <_> - - <_> - - - - <_> - 2 3 6 13 -1. - <_> - 5 3 3 13 2. - 0 - 0.0764041766524315 - 1 - -0.4597732126712799 - <_> - - - - <_> - 16 7 4 3 -1. - <_> - 16 8 4 1 3. - 0 - -7.9231243580579758e-003 - -0.3936483860015869 - 2 - <_> - - - - <_> - 6 7 2 6 -1. - <_> - 7 7 1 6 2. - 0 - 1.9256339874118567e-003 - -6.4516498241573572e-004 - 0.2857345938682556 - <_> - - <_> - - - - <_> - 17 0 3 1 -1. - <_> - 18 1 1 1 3. - 1 - 3.3896900713443756e-003 - 1 - -0.4161860048770905 - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - 2.6566439191810787e-004 - 0.0872396975755692 - 2 - <_> - - - - <_> - 12 2 8 2 -1. - <_> - 12 2 4 1 2. - <_> - 16 3 4 1 2. - 0 - -7.0364158600568771e-003 - 0.5490266084671021 - -0.3165821135044098 - <_> - - <_> - - - - <_> - 4 1 10 4 -1. - <_> - 4 2 10 2 2. - 0 - 0.0277348607778549 - 1 - 0.3568336069583893 - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 3.3155460841953754e-003 - 0.0205454006791115 - 2 - <_> - - - - <_> - 12 7 3 8 -1. - <_> - 10 9 3 4 2. - 1 - 0.0548077486455441 - -0.3797985017299652 - 0.8219966292381287 - <_> - - <_> - - - - <_> - 1 15 2 2 -1. - <_> - 1 15 1 1 2. - <_> - 2 16 1 1 2. - 0 - -3.1911249971017241e-004 - 0.2349838018417358 - 1 - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - -2.3244849580805749e-004 - 0.1597696989774704 - 2 - <_> - - - - <_> - 0 8 2 12 -1. - <_> - 0 11 2 6 2. - 0 - 0.0243891999125481 - -0.1695279031991959 - 0.3883773982524872 - <_> - - <_> - - - - <_> - 10 6 4 8 -1. - <_> - 10 6 2 4 2. - <_> - 12 10 2 4 2. - 0 - 0.0375212803483009 - 1 - -0.5300439000129700 - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 12 6 1 2 2. - <_> - 13 8 1 2 2. - 0 - 5.3981738165020943e-004 - -0.0929491966962814 - 2 - <_> - - - - <_> - 3 12 4 2 -1. - <_> - 3 12 2 2 2. - 1 - -1.1914219940081239e-003 - 0.2577297985553742 - -0.1280487030744553 - <_> - - <_> - - - - <_> - 7 9 8 1 -1. - <_> - 9 9 4 1 2. - 0 - -0.0196286998689175 - -0.4574907124042511 - 1 - <_> - - - - <_> - 3 1 3 16 -1. - <_> - 4 1 1 16 3. - 0 - -2.6430340949445963e-003 - 2 - -0.0666390731930733 - <_> - - - - <_> - 8 10 6 9 -1. - <_> - 10 10 2 9 3. - 0 - -0.0104924999177456 - 0.3781771063804627 - -7.0677888579666615e-003 - <_> - - <_> - - - - <_> - 16 14 3 3 -1. - <_> - 17 14 1 3 3. - 0 - -8.1244978355243802e-004 - 1 - 0.0715442225337029 - <_> - - - - <_> - 14 8 6 12 -1. - <_> - 14 11 6 6 2. - 0 - 0.0143083697184920 - 2 - -0.4697304964065552 - <_> - - - - <_> - 14 19 6 1 -1. - <_> - 16 19 2 1 3. - 0 - -2.6346129016019404e-004 - 0.3292655944824219 - -0.2332254052162170 - <_> - - <_> - - - - <_> - 5 8 8 5 -1. - <_> - 9 8 4 5 2. - 0 - 0.0959079265594482 - 1 - 0.9999045729637146 - <_> - - - - <_> - 9 3 8 3 -1. - <_> - 11 5 4 3 2. - 1 - -0.1287204027175903 - 0.5759937167167664 - 2 - <_> - - - - <_> - 9 9 6 10 -1. - <_> - 9 14 6 5 2. - 0 - -0.0319114513695240 - -0.7334852814674377 - -0.0180634502321482 - <_> - - <_> - - - - <_> - 16 8 3 2 -1. - <_> - 17 8 1 2 3. - 0 - 3.7128551048226655e-004 - 1 - 2 - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 4 0 1 2 3. - 0 - -2.8491979464888573e-003 - -0.5432965159416199 - 0.1075500994920731 - <_> - - - - <_> - 13 10 2 1 -1. - <_> - 14 10 1 1 2. - 0 - -4.2754760943353176e-004 - 0.2207192033529282 - -0.2616069912910461 - <_> - - <_> - - - - <_> - 17 17 2 3 -1. - <_> - 17 18 2 1 3. - 0 - 9.7452866612002254e-005 - 1 - 2 - <_> - - - - <_> - 15 14 2 2 -1. - <_> - 15 14 1 1 2. - <_> - 16 15 1 1 2. - 0 - 5.2659702487289906e-004 - -0.2048878073692322 - 0.3193565011024475 - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 16 18 2 1 2. - <_> - 18 19 2 1 2. - 0 - 5.9415772557258606e-004 - 0.1521144956350327 - -0.2879998981952667 - <_> - - <_> - - - - <_> - 4 17 3 2 -1. - <_> - 5 17 1 2 3. - 0 - -2.1307960560079664e-004 - 0.1520628035068512 - 1 - <_> - - - - <_> - 1 0 11 2 -1. - <_> - 1 1 11 1 2. - 0 - -1.2103560147807002e-003 - -0.2391826063394547 - 2 - <_> - - - - <_> - 2 0 10 2 -1. - <_> - 2 1 10 1 2. - 0 - 1.2572610285133123e-003 - 0.3735337853431702 - -0.0815976932644844 - -1.1713529825210571 - 24 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 10 12 1 -1. - <_> - 8 10 4 1 3. - 0 - -0.0310079604387283 - 1 - 2 - <_> - - - - <_> - 2 9 4 6 -1. - <_> - 2 9 2 3 2. - <_> - 4 12 2 3 2. - 0 - -3.1969440169632435e-003 - 0.6885427832603455 - -0.0548366494476795 - <_> - - - - <_> - 15 6 4 14 -1. - <_> - 15 6 2 7 2. - <_> - 17 13 2 7 2. - 0 - -2.0676921121776104e-003 - -0.3597443997859955 - -0.0309737604111433 - <_> - - <_> - - - - <_> - 10 2 6 12 -1. - <_> - 12 6 2 4 9. - 0 - -0.1112271994352341 - 1 - -0.1570387929677963 - <_> - - - - <_> - 8 5 6 15 -1. - <_> - 10 10 2 5 9. - 0 - 0.0148440496996045 - 2 - -0.2041358053684235 - <_> - - - - <_> - 17 8 3 5 -1. - <_> - 18 9 1 5 3. - 1 - -3.4631208982318640e-003 - 0.6624599099159241 - 0.1553433984518051 - <_> - - <_> - - - - <_> - 10 6 6 6 -1. - <_> - 12 8 2 6 3. - 1 - -0.1232047006487846 - -0.5276066064834595 - 1 - <_> - - - - <_> - 17 8 3 12 -1. - <_> - 18 8 1 12 3. - 0 - 0.0111032901331782 - 2 - -0.4793223142623901 - <_> - - - - <_> - 5 8 3 4 -1. - <_> - 5 10 3 2 2. - 0 - 4.7404197975993156e-003 - -0.1007478013634682 - 0.1624976992607117 - <_> - - <_> - - - - <_> - 16 0 4 6 -1. - <_> - 16 0 2 3 2. - <_> - 18 3 2 3 2. - 0 - -5.8416109532117844e-003 - 1 - 2 - <_> - - - - <_> - 15 0 5 10 -1. - <_> - 15 5 5 5 2. - 0 - -0.0516660287976265 - -0.3759180903434753 - 0.3733876943588257 - <_> - - - - <_> - 14 8 2 3 -1. - <_> - 15 8 1 3 2. - 0 - -3.9447061717510223e-003 - 0.2434733957052231 - -0.1452299952507019 - <_> - - <_> - - - - <_> - 3 1 14 3 -1. - <_> - 2 2 14 1 3. - 1 - -0.0363209396600723 - -0.3680419921875000 - 1 - <_> - - - - <_> - 0 0 2 13 -1. - <_> - 1 0 1 13 2. - 0 - 3.7123491056263447e-003 - 0.1009477972984314 - 2 - <_> - - - - <_> - 2 8 6 12 -1. - <_> - 4 8 2 12 3. - 0 - -0.0282427798956633 - 0.4247690141201019 - -0.4382835030555725 - <_> - - <_> - - - - <_> - 8 7 6 5 -1. - <_> - 10 9 2 5 3. - 1 - -0.0202501695603132 - 1 - 2 - <_> - - - - <_> - 9 8 1 12 -1. - <_> - 9 12 1 4 3. - 0 - 0.0307808406651020 - 0.1635501980781555 - -0.6377022862434387 - <_> - - - - <_> - 1 0 2 4 -1. - <_> - 2 0 1 4 2. - 0 - 2.5205970741808414e-003 - -0.1989925950765610 - 0.3125874102115631 - <_> - - <_> - - - - <_> - 6 8 8 2 -1. - <_> - 8 8 4 2 2. - 0 - -0.0424862615764141 - -0.6110476851463318 - 1 - <_> - - - - <_> - 4 6 4 6 -1. - <_> - 5 6 2 6 2. - 0 - 0.0302566401660442 - 2 - 0.7769976258277893 - <_> - - - - <_> - 12 1 4 6 -1. - <_> - 13 1 2 6 2. - 0 - 1.2559810420498252e-003 - 0.0682232677936554 - -0.1840278953313828 - <_> - - <_> - - - - <_> - 3 0 9 2 -1. - <_> - 3 0 9 1 2. - 1 - -0.0181112308055162 - 0.3739083111286163 - 1 - <_> - - - - <_> - 12 0 4 2 -1. - <_> - 12 1 4 1 2. - 0 - -7.0966721978038549e-004 - 2 - 0.0716732218861580 - <_> - - - - <_> - 14 18 2 2 -1. - <_> - 14 19 2 1 2. - 0 - 2.0517550874501467e-003 - -0.2372370958328247 - 0.4230437874794006 - <_> - - <_> - - - - <_> - 12 3 8 4 -1. - <_> - 12 5 8 2 2. - 0 - -0.0669398307800293 - -0.6446484923362732 - 1 - <_> - - - - <_> - 4 11 1 2 -1. - <_> - 4 11 1 1 2. - 1 - -8.4355175495147705e-003 - -0.5966771841049194 - 2 - <_> - - - - <_> - 8 4 9 6 -1. - <_> - 11 4 3 6 3. - 0 - -0.0766460075974464 - -0.3536089062690735 - 0.0767010301351547 - <_> - - <_> - - - - <_> - 5 10 2 6 -1. - <_> - 5 10 1 3 2. - <_> - 6 13 1 3 2. - 0 - -1.8152770353481174e-003 - 0.1709956973791122 - 1 - <_> - - - - <_> - 5 10 4 3 -1. - <_> - 6 10 2 3 2. - 0 - -2.7247369289398193e-003 - 0.1626299023628235 - 2 - <_> - - - - <_> - 12 4 3 1 -1. - <_> - 13 4 1 1 3. - 0 - -5.4963980801403522e-004 - -0.4476447105407715 - -0.0742559134960175 - <_> - - <_> - - - - <_> - 2 11 18 6 -1. - <_> - 2 13 18 2 3. - 0 - -0.0413364097476006 - -0.3007929027080536 - 1 - <_> - - - - <_> - 8 6 10 14 -1. - <_> - 8 6 5 7 2. - <_> - 13 13 5 7 2. - 0 - -0.1262717992067337 - -0.2194923013448715 - 2 - <_> - - - - <_> - 2 2 12 2 -1. - <_> - 2 2 6 1 2. - <_> - 8 3 6 1 2. - 0 - -4.9632410518825054e-003 - 0.3171538114547730 - 0.0165228899568319 - <_> - - <_> - - - - <_> - 10 7 6 10 -1. - <_> - 10 7 3 5 2. - <_> - 13 12 3 5 2. - 0 - -0.0682557895779610 - 0.3762927949428558 - 1 - <_> - - - - <_> - 1 2 4 4 -1. - <_> - 3 2 2 4 2. - 0 - 0.0172566995024681 - 2 - 0.6070305109024048 - <_> - - - - <_> - 3 0 13 2 -1. - <_> - 3 1 13 1 2. - 0 - 1.8318969523534179e-003 - 0.0448393002152443 - -0.1828462034463882 - <_> - - <_> - - - - <_> - 3 2 11 3 -1. - <_> - 3 3 11 1 3. - 0 - 6.2703560106456280e-003 - 1 - 0.1501232981681824 - <_> - - - - <_> - 14 8 3 4 -1. - <_> - 14 9 3 2 2. - 0 - 6.4142688643187284e-004 - 2 - -0.2438793927431107 - <_> - - - - <_> - 9 8 10 4 -1. - <_> - 9 9 10 2 2. - 0 - -1.2087869690731168e-003 - -0.0964861363172531 - 0.4525228142738342 - <_> - - <_> - - - - <_> - 6 8 6 12 -1. - <_> - 8 8 2 12 3. - 0 - -0.0130876302719116 - 1 - 2 - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 5 8 1 1 9. - 0 - -2.0685649942606688e-003 - 0.3450832068920136 - -0.0412324890494347 - <_> - - - - <_> - 1 5 12 15 -1. - <_> - 4 5 6 15 2. - 0 - -0.0996085479855537 - -0.5494565963745117 - -0.0519966594874859 - <_> - - <_> - - - - <_> - 8 8 8 2 -1. - <_> - 10 8 4 2 2. - 0 - -3.6486559547483921e-003 - 1 - 2 - <_> - - - - <_> - 18 0 2 6 -1. - <_> - 19 0 1 6 2. - 0 - -2.8182850219309330e-003 - -0.3346072137355804 - 0.1543830931186676 - <_> - - - - <_> - 6 1 12 5 -1. - <_> - 12 1 6 5 2. - 0 - 0.0553684607148170 - -0.2000892013311386 - 0.2683075964450836 - <_> - - <_> - - - - <_> - 8 1 6 4 -1. - <_> - 10 1 2 4 3. - 0 - -7.4223391711711884e-003 - -0.2599068880081177 - 1 - <_> - - - - <_> - 17 5 3 2 -1. - <_> - 18 6 1 2 3. - 1 - -4.4916807673871517e-003 - 2 - 0.0985599681735039 - <_> - - - - <_> - 11 1 6 9 -1. - <_> - 8 4 6 3 3. - 1 - -0.0606218315660954 - -0.3548181056976318 - 0.4171189963817596 - <_> - - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - 2.3197410337161273e-004 - 1 - 2 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -2.6323291240260005e-004 - 0.1180073022842407 - -0.1846902072429657 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 1 1 2. - <_> - 17 17 1 1 2. - 0 - 1.8173559510614723e-004 - 0.3364588916301727 - -0.1644365042448044 - <_> - - <_> - - - - <_> - 18 16 1 3 -1. - <_> - 18 17 1 1 3. - 0 - -4.3080520117655396e-004 - 1 - 2 - <_> - - - - <_> - 5 7 8 2 -1. - <_> - 9 7 4 2 2. - 0 - 8.4635447710752487e-003 - -0.3505653142929077 - 0.3397991955280304 - <_> - - - - <_> - 8 3 1 16 -1. - <_> - 8 11 1 8 2. - 0 - 3.2700230367481709e-003 - -0.1930505037307739 - 0.1052542999386787 - <_> - - <_> - - - - <_> - 17 2 2 8 -1. - <_> - 17 2 1 8 2. - 1 - 0.0123295998200774 - 2 - 1 - <_> - - - - <_> - 5 3 4 2 -1. - <_> - 7 3 2 2 2. - 0 - 3.2368130632676184e-004 - -0.0707827582955360 - 0.4269120097160339 - <_> - - - - <_> - 14 6 3 3 -1. - <_> - 15 7 1 1 9. - 0 - -7.1359151042997837e-003 - 0.2450741976499558 - -0.1130456998944283 - <_> - - <_> - - - - <_> - 2 0 8 9 -1. - <_> - 4 0 4 9 2. - 0 - -0.0389145202934742 - -0.4140121936798096 - 1 - <_> - - - - <_> - 16 0 3 8 -1. - <_> - 17 0 1 8 3. - 0 - 6.6584121668711305e-004 - 2 - -0.1295423060655594 - <_> - - - - <_> - 16 0 3 8 -1. - <_> - 17 0 1 8 3. - 0 - -9.3276530969887972e-004 - -0.0287156794220209 - 0.2964037954807282 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 18 18 1 2 2. - 0 - 9.1005821013823152e-004 - 2 - 1 - <_> - - - - <_> - 11 10 8 4 -1. - <_> - 13 10 4 4 2. - 0 - 7.4173710308969021e-003 - 0.0152255203574896 - 0.5187808871269226 - <_> - - - - <_> - 17 5 2 2 -1. - <_> - 17 6 2 1 2. - 0 - -5.9348379727452993e-004 - 0.0631586909294128 - -0.1679065972566605 - <_> - - <_> - - - - <_> - 12 9 4 3 -1. - <_> - 13 9 2 3 2. - 0 - -1.6713090008124709e-003 - 0.1884631961584091 - 1 - <_> - - - - <_> - 15 7 3 7 -1. - <_> - 16 7 1 7 3. - 0 - -3.2247399212792516e-004 - 2 - -0.2279613018035889 - <_> - - - - <_> - 1 5 4 6 -1. - <_> - 2 5 2 6 2. - 0 - -3.3846818841993809e-003 - 0.3056324124336243 - -0.0810670405626297 - <_> - - <_> - - - - <_> - 2 2 18 10 -1. - <_> - 2 2 9 5 2. - <_> - 11 7 9 5 2. - 0 - 0.0951890796422958 - 1 - 0.1982122957706451 - <_> - - - - <_> - 8 4 2 3 -1. - <_> - 9 4 1 3 2. - 0 - 9.7679207101464272e-004 - 2 - 0.1467107981443405 - <_> - - - - <_> - 3 3 12 2 -1. - <_> - 6 6 6 2 2. - 1 - -0.1089377030730248 - -0.6990993022918701 - -0.1148874014616013 - <_> - - <_> - - - - <_> - 5 3 12 6 -1. - <_> - 9 3 4 6 3. - 0 - -0.0174487791955471 - 1 - 2 - <_> - - - - <_> - 15 7 2 3 -1. - <_> - 15 8 2 1 3. - 0 - -9.9434393632691354e-005 - 0.2406286001205444 - -0.0894873514771461 - <_> - - - - <_> - 5 9 4 6 -1. - <_> - 5 12 4 3 2. - 0 - 0.0642500296235085 - -0.1715205013751984 - 0.5131412744522095 - <_> - - <_> - - - - <_> - 1 15 6 4 -1. - <_> - 1 15 3 2 2. - <_> - 4 17 3 2 2. - 0 - 5.9518171474337578e-003 - 1 - 0.2330159991979599 - <_> - - - - <_> - 2 9 2 6 -1. - <_> - 3 9 1 6 2. - 0 - -9.0886192629113793e-004 - 0.0588105693459511 - 2 - <_> - - - - <_> - 1 18 3 2 -1. - <_> - 1 19 3 1 2. - 0 - -5.1080051343888044e-004 - -0.5024080872535706 - -0.0809629186987877 - <_> - - <_> - - - - <_> - 16 9 3 2 -1. - <_> - 17 10 1 2 3. - 1 - -0.0154671696946025 - -0.4401049017906189 - 1 - <_> - - - - <_> - 7 10 3 4 -1. - <_> - 6 11 3 2 2. - 1 - 0.0232218205928802 - 2 - 0.5154699087142944 - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 3.9248089888133109e-004 - -0.0522902905941010 - 0.2155570983886719 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -1.1872940231114626e-003 - 0.2868247032165527 - 1 - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 16 5 1 1 2. - <_> - 17 6 1 1 2. - 0 - -1.1692909756675363e-003 - 0.3987117111682892 - 2 - <_> - - - - <_> - 0 1 2 8 -1. - <_> - 0 1 1 4 2. - <_> - 1 5 1 4 2. - 0 - -1.8374159699305892e-003 - -0.2427344024181366 - 0.0259740799665451 - <_> - - <_> - - - - <_> - 7 17 6 3 -1. - <_> - 9 17 2 3 3. - 0 - -3.9783148095011711e-003 - -0.2522419989109039 - 1 - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -4.7793678822927177e-004 - 2 - 0.1049927994608879 - <_> - - - - <_> - 2 13 2 6 -1. - <_> - 2 13 1 3 2. - <_> - 3 16 1 3 2. - 0 - 5.3964089602231979e-004 - -0.4149760007858276 - 0.1063556969165802 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - -4.2262359056621790e-004 - 0.2108917981386185 - 1 - <_> - - - - <_> - 2 10 16 10 -1. - <_> - 2 15 16 5 2. - 0 - -0.1013846024870873 - -0.9310188293457031 - 2 - <_> - - - - <_> - 10 18 4 2 -1. - <_> - 12 18 2 2 2. - 0 - -9.2142065986990929e-003 - -0.8245233893394470 - -0.0246822796761990 - <_> - - <_> - - - - <_> - 6 6 4 8 -1. - <_> - 7 6 2 8 2. - 0 - 0.0431043095886707 - 1 - 0.9042475223541260 - <_> - - - - <_> - 9 10 3 1 -1. - <_> - 10 11 1 1 3. - 1 - -5.3224200382828712e-003 - -0.2732084095478058 - 2 - <_> - - - - <_> - 1 13 4 3 -1. - <_> - 3 13 2 3 2. - 0 - 3.7746389862149954e-003 - -0.0295430198311806 - 0.2735638916492462 - <_> - - <_> - - - - <_> - 5 11 7 2 -1. - <_> - 5 12 7 1 2. - 0 - 0.0238505005836487 - 1 - -0.5100737810134888 - <_> - - - - <_> - 1 9 3 3 -1. - <_> - 1 10 3 1 3. - 0 - -8.8544972240924835e-003 - 0.4889008998870850 - 2 - <_> - - - - <_> - 10 7 6 6 -1. - <_> - 12 9 2 2 9. - 0 - -0.1369116008281708 - -0.5536224246025085 - 0.0250627398490906 - <_> - - <_> - - - - <_> - 5 7 2 4 -1. - <_> - 4 8 2 2 2. - 1 - -0.0252747293561697 - -0.7366992235183716 - 1 - <_> - - - - <_> - 5 10 2 4 -1. - <_> - 5 10 1 2 2. - <_> - 6 12 1 2 2. - 0 - 2.6481070090085268e-003 - 2 - 0.2628318965435028 - <_> - - - - <_> - 14 16 2 2 -1. - <_> - 14 16 1 1 2. - <_> - 15 17 1 1 2. - 0 - -2.0161429711151868e-004 - -0.2414816021919251 - 0.0516459494829178 - <_> - - <_> - - - - <_> - 2 9 2 10 -1. - <_> - 2 9 1 5 2. - <_> - 3 14 1 5 2. - 0 - -0.0118983704596758 - -0.6380466222763062 - 1 - <_> - - - - <_> - 14 17 4 2 -1. - <_> - 14 18 4 1 2. - 0 - -1.9360600272193551e-003 - 0.3912102878093720 - 2 - <_> - - - - <_> - 4 16 1 3 -1. - <_> - 3 17 1 1 3. - 1 - 2.1037699189037085e-003 - -0.0529235601425171 - 0.2392546981573105 - <_> - - <_> - - - - <_> - 13 12 4 3 -1. - <_> - 14 13 2 3 2. - 1 - -0.0136466203257442 - 0.4553191959857941 - 1 - <_> - - - - <_> - 16 6 4 1 -1. - <_> - 17 7 2 1 2. - 1 - -8.8408291339874268e-003 - -0.5277683138847351 - 2 - <_> - - - - <_> - 11 0 9 6 -1. - <_> - 11 3 9 3 2. - 0 - 0.0372209809720516 - -0.0524236895143986 - 0.2147915065288544 - <_> - - <_> - - - - <_> - 16 13 3 3 -1. - <_> - 15 14 3 1 3. - 1 - -4.2580282315611839e-003 - 1 - 2 - <_> - - - - <_> - 0 7 3 6 -1. - <_> - 1 9 1 2 9. - 0 - -4.6129771508276463e-003 - -0.5809140205383301 - 0.0926668867468834 - <_> - - - - <_> - 11 5 7 2 -1. - <_> - 11 6 7 1 2. - 0 - 5.9317899867892265e-003 - -6.7499437136575580e-004 - 0.3676652908325195 - <_> - - <_> - - - - <_> - 6 17 6 3 -1. - <_> - 6 18 6 1 3. - 0 - 9.4187082722783089e-003 - 1 - -0.6134232282638550 - <_> - - - - <_> - 15 17 3 3 -1. - <_> - 16 18 1 1 9. - 0 - -4.1941772215068340e-003 - -0.3831070065498352 - 2 - <_> - - - - <_> - 7 4 6 1 -1. - <_> - 9 4 2 1 3. - 0 - 5.1073678769171238e-003 - 0.0672549977898598 - -0.3977394998073578 - <_> - - <_> - - - - <_> - 8 10 6 3 -1. - <_> - 10 10 2 3 3. - 0 - -5.5304579436779022e-003 - 1 - -0.1292635947465897 - <_> - - - - <_> - 1 5 1 4 -1. - <_> - 1 6 1 2 2. - 0 - -6.0295849107205868e-004 - 2 - 0.1872463971376419 - <_> - - - - <_> - 12 6 1 4 -1. - <_> - 12 8 1 2 2. - 0 - -7.0414398796856403e-003 - 0.4765154123306274 - -0.2323850989341736 - <_> - - <_> - - - - <_> - 2 6 3 1 -1. - <_> - 3 7 1 1 3. - 1 - -1.3096419861540198e-003 - 1 - -0.0836836099624634 - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 8 1 1 2. - 0 - 3.2035118783824146e-004 - 2 - 0.4480341076850891 - <_> - - - - <_> - 2 2 12 1 -1. - <_> - 8 2 6 1 2. - 0 - -3.3677490428090096e-003 - 0.2618486881256104 - -0.2117661982774735 - <_> - - <_> - - - - <_> - 18 0 2 4 -1. - <_> - 18 0 1 4 2. - 1 - -0.0134199298918247 - -0.5172548890113831 - 1 - <_> - - - - <_> - 1 6 2 1 -1. - <_> - 1 6 1 1 2. - 1 - 4.5043388381600380e-003 - 2 - -0.2485482990741730 - <_> - - - - <_> - 4 6 1 4 -1. - <_> - 4 7 1 2 2. - 0 - -7.8677892452105880e-004 - 0.2202686071395874 - -0.0299894604831934 - <_> - - <_> - - - - <_> - 1 3 19 9 -1. - <_> - 1 6 19 3 3. - 0 - -0.4046784937381744 - -0.8687620759010315 - 1 - <_> - - - - <_> - 0 0 4 20 -1. - <_> - 0 5 4 10 2. - 0 - -0.1647205054759979 - -0.2633104920387268 - 2 - <_> - - - - <_> - 0 9 12 2 -1. - <_> - 6 9 6 2 2. - 0 - -0.0432119593024254 - -0.1299685984849930 - 0.1273909956216812 - <_> - - <_> - - - - <_> - 6 8 6 11 -1. - <_> - 8 8 2 11 3. - 0 - -1.7417479539290071e-003 - 0.0828012526035309 - 1 - <_> - - - - <_> - 9 7 9 1 -1. - <_> - 12 7 3 1 3. - 0 - -8.3949731197208166e-004 - 2 - -0.3846581876277924 - <_> - - - - <_> - 4 3 3 8 -1. - <_> - 5 3 1 8 3. - 0 - 1.5101189492270350e-003 - 0.1393309980630875 - -0.3560276925563812 - <_> - - <_> - - - - <_> - 7 3 2 11 -1. - <_> - 8 3 1 11 2. - 0 - 3.6241519264876842e-003 - 1 - 0.2384703010320664 - <_> - - - - <_> - 18 4 2 1 -1. - <_> - 18 4 1 1 2. - 1 - 1.6943299851845950e-004 - 2 - 0.0565829016268253 - <_> - - - - <_> - 3 8 4 9 -1. - <_> - 5 8 2 9 2. - 0 - -0.0554350689053535 - 0.8527231812477112 - -0.1908454000949860 - <_> - - <_> - - - - <_> - 16 5 1 12 -1. - <_> - 12 9 1 4 3. - 1 - -0.0235116202384233 - 1 - -0.1322612017393112 - <_> - - - - <_> - 2 19 2 1 -1. - <_> - 3 19 1 1 2. - 0 - -2.2539960627909750e-004 - 2 - -2.0941901020705700e-003 - <_> - - - - <_> - 2 1 6 6 -1. - <_> - 5 1 3 6 2. - 0 - 0.0166103690862656 - 0.4079250097274780 - -0.2924768924713135 - <_> - - <_> - - - - <_> - 11 0 8 1 -1. - <_> - 15 0 4 1 2. - 0 - -6.3177421689033508e-003 - 0.2493789941072464 - 1 - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 16 0 2 1 2. - 0 - 8.5653591668233275e-004 - -0.1568960994482040 - 2 - <_> - - - - <_> - 5 4 12 1 -1. - <_> - 11 4 6 1 2. - 0 - -0.0116383396089077 - 0.4269311130046845 - -0.0134939197450876 - <_> - - <_> - - - - <_> - 10 6 8 2 -1. - <_> - 10 6 4 1 2. - <_> - 14 7 4 1 2. - 0 - -5.1630330272018909e-003 - 0.2823359966278076 - 1 - <_> - - - - <_> - 6 0 9 3 -1. - <_> - 5 1 9 1 3. - 1 - 4.8902099952101707e-003 - 2 - -0.2274976968765259 - <_> - - - - <_> - 0 8 4 6 -1. - <_> - 2 8 2 6 2. - 0 - -0.0299032703042030 - -0.3131870031356812 - 0.0724510774016380 - <_> - - <_> - - - - <_> - 2 8 3 12 -1. - <_> - 3 8 1 12 3. - 0 - 3.1764109735377133e-004 - 1 - -0.1349464952945709 - <_> - - - - <_> - 1 17 7 3 -1. - <_> - 1 18 7 1 3. - 0 - 5.2735407371073961e-004 - -0.0948395580053329 - 2 - <_> - - - - <_> - 1 16 8 2 -1. - <_> - 1 17 8 1 2. - 0 - 3.4350980422459543e-004 - -0.2873711884021759 - 0.2640861868858337 - -1.0940879583358765 - 25 - -1 - <_> - - - <_> - - <_> - - - - <_> - 15 9 2 6 -1. - <_> - 15 9 1 3 2. - <_> - 16 12 1 3 2. - 0 - 2.0928289741277695e-003 - -0.2405983060598373 - 1 - <_> - - - - <_> - 5 10 12 1 -1. - <_> - 8 10 6 1 2. - 0 - -0.0206675492227077 - 2 - -0.0839496999979019 - <_> - - - - <_> - 14 11 4 3 -1. - <_> - 15 11 2 3 2. - 0 - 4.1186730377376080e-003 - 0.7529411911964417 - -0.2501004040241242 - <_> - - <_> - - - - <_> - 2 2 3 15 -1. - <_> - 3 7 1 5 9. - 0 - -0.0770380571484566 - 2 - 1 - <_> - - - - <_> - 4 5 3 9 -1. - <_> - 5 8 1 3 9. - 0 - 0.0685263872146606 - -0.1604792028665543 - 0.5806050896644592 - <_> - - - - <_> - 1 8 12 2 -1. - <_> - 7 8 6 2 2. - 0 - -9.1197844594717026e-003 - 0.4088833034038544 - -0.0237115398049355 - <_> - - <_> - - - - <_> - 15 15 4 5 -1. - <_> - 17 15 2 5 2. - 0 - 3.8453419692814350e-003 - 2 - 1 - <_> - - - - <_> - 10 13 9 7 -1. - <_> - 13 13 3 7 3. - 0 - -0.0406481996178627 - -0.3622738122940064 - 0.2818987071514130 - <_> - - - - <_> - 9 5 5 3 -1. - <_> - 8 6 5 1 3. - 1 - -0.0351547896862030 - -0.6393272280693054 - -0.0883111804723740 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 2 8 2 2. - 0 - 0.0171937495470047 - 1 - 0.2161983996629715 - <_> - - - - <_> - 6 3 2 6 -1. - <_> - 4 5 2 2 3. - 1 - -0.0318345390260220 - -0.6110637784004211 - 2 - <_> - - - - <_> - 10 10 1 4 -1. - <_> - 10 11 1 2 2. - 0 - 5.9677828103303909e-003 - -1.3163220137357712e-003 - -0.6781039834022522 - <_> - - <_> - - - - <_> - 1 17 5 3 -1. - <_> - 1 18 5 1 3. - 0 - 1.7432730237487704e-004 - -0.1666038036346436 - 1 - <_> - - - - <_> - 2 4 10 1 -1. - <_> - 2 4 5 1 2. - 1 - -0.0104279099032283 - 0.3009907901287079 - 2 - <_> - - - - <_> - 4 18 1 2 -1. - <_> - 4 19 1 1 2. - 0 - -1.4324070070870221e-004 - -0.3695777058601379 - 0.0759430825710297 - <_> - - <_> - - - - <_> - 5 7 1 3 -1. - <_> - 5 8 1 1 3. - 0 - -1.0312269441783428e-003 - 1 - -0.0839846506714821 - <_> - - - - <_> - 6 11 4 3 -1. - <_> - 6 11 2 3 2. - 1 - -8.9528188109397888e-003 - 0.3335874974727631 - 2 - <_> - - - - <_> - 17 16 3 4 -1. - <_> - 17 18 3 2 2. - 0 - 5.4365568794310093e-003 - -0.2566685080528259 - 0.3691180944442749 - <_> - - <_> - - - - <_> - 6 11 11 4 -1. - <_> - 6 12 11 2 2. - 0 - 2.0321870688349009e-003 - 1 - -0.1162813007831574 - <_> - - - - <_> - 6 5 6 1 -1. - <_> - 8 5 2 1 3. - 0 - 1.9954480230808258e-003 - 2 - -0.2247720956802368 - <_> - - - - <_> - 17 12 2 8 -1. - <_> - 17 16 2 4 2. - 0 - 0.0169222392141819 - 0.3650409877300263 - 0.0186716709285975 - <_> - - <_> - - - - <_> - 17 6 2 4 -1. - <_> - 17 8 2 2 2. - 0 - -1.4152450021356344e-003 - 1 - 2 - <_> - - - - <_> - 10 8 6 2 -1. - <_> - 10 9 6 1 2. - 0 - 8.0416322452947497e-004 - -0.0443723797798157 - 0.2629714012145996 - <_> - - - - <_> - 5 8 3 12 -1. - <_> - 5 12 3 4 3. - 0 - 0.0621917918324471 - -0.1499744951725006 - 0.5675997734069824 - <_> - - <_> - - - - <_> - 19 7 1 4 -1. - <_> - 19 9 1 2 2. - 0 - -4.4721928425133228e-003 - -0.2952510118484497 - 1 - <_> - - - - <_> - 1 10 6 1 -1. - <_> - 3 10 2 1 3. - 0 - -0.0192474406212568 - -0.7094137072563171 - 2 - <_> - - - - <_> - 7 10 3 2 -1. - <_> - 7 10 3 1 2. - 1 - 5.2884127944707870e-003 - 4.9494709819555283e-003 - 0.3656916022300720 - <_> - - <_> - - - - <_> - 2 2 8 11 -1. - <_> - 6 2 4 11 2. - 0 - 0.0915298089385033 - 1 - -0.4758870899677277 - <_> - - - - <_> - 18 4 2 7 -1. - <_> - 18 4 1 7 2. - 1 - -0.0393091887235641 - -0.4955871999263763 - 2 - <_> - - - - <_> - 11 3 2 8 -1. - <_> - 11 7 2 4 2. - 0 - -0.0691776722669601 - 0.7818046808242798 - 0.0351777710020542 - <_> - - <_> - - - - <_> - 16 6 3 3 -1. - <_> - 15 7 3 1 3. - 1 - 0.0195012707263231 - 1 - 0.4510774016380310 - <_> - - - - <_> - 10 8 3 7 -1. - <_> - 11 9 1 7 3. - 1 - -5.4460992105305195e-003 - 0.0951542928814888 - 2 - <_> - - - - <_> - 14 9 2 6 -1. - <_> - 15 9 1 6 2. - 0 - 0.0104959895834327 - -0.1681549996137619 - 0.5101565718650818 - <_> - - <_> - - - - <_> - 9 17 6 1 -1. - <_> - 11 17 2 1 3. - 0 - 5.7117962278425694e-003 - 1 - -0.7465574145317078 - <_> - - - - <_> - 11 4 9 9 -1. - <_> - 14 7 3 3 9. - 0 - -0.2743963897228241 - -0.6031035184860230 - 2 - <_> - - - - <_> - 14 7 4 7 -1. - <_> - 15 7 2 7 2. - 0 - -4.5373341999948025e-003 - 0.2324519008398056 - -0.0412625484168530 - <_> - - <_> - - - - <_> - 16 2 3 6 -1. - <_> - 17 2 1 6 3. - 0 - 4.7711891238577664e-004 - 1 - -0.1540262997150421 - <_> - - - - <_> - 14 13 2 7 -1. - <_> - 15 13 1 7 2. - 0 - -6.9821202196180820e-003 - -0.5260319113731384 - 2 - <_> - - - - <_> - 0 4 18 12 -1. - <_> - 6 8 6 4 9. - 0 - -1.0556570291519165 - -0.5047724843025208 - 0.1489613950252533 - <_> - - <_> - - - - <_> - 3 6 7 9 -1. - <_> - 3 9 7 3 3. - 0 - -0.1786863058805466 - 0.6133384704589844 - 1 - <_> - - - - <_> - 17 4 3 4 -1. - <_> - 18 4 1 4 3. - 0 - 9.6028903499245644e-005 - -0.1257037073373795 - 2 - <_> - - - - <_> - 5 15 3 3 -1. - <_> - 6 15 1 3 3. - 0 - 1.4864769764244556e-003 - 0.1585548967123032 - -0.3241975009441376 - <_> - - <_> - - - - <_> - 0 12 2 1 -1. - <_> - 1 12 1 1 2. - 0 - -2.7532540843822062e-004 - 2 - 1 - <_> - - - - <_> - 5 8 11 4 -1. - <_> - 5 9 11 2 2. - 0 - 1.9395699491724372e-003 - 0.2230170071125031 - -0.1449283063411713 - <_> - - - - <_> - 8 13 4 7 -1. - <_> - 9 13 2 7 2. - 0 - -3.0006670858711004e-003 - 0.2536461949348450 - -0.1906004995107651 - <_> - - <_> - - - - <_> - 7 7 5 2 -1. - <_> - 7 8 5 1 2. - 0 - 2.6949180755764246e-003 - 2 - 1 - <_> - - - - <_> - 5 9 14 3 -1. - <_> - 5 10 14 1 3. - 0 - -0.0273548904806376 - -0.6969723105430603 - 0.2698681056499481 - <_> - - - - <_> - 15 9 5 4 -1. - <_> - 15 10 5 2 2. - 0 - -0.0262785498052835 - 0.8340002894401550 - -0.0814751833677292 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 12 10 3 1 3. - 1 - -1.1615309631451964e-003 - 0.0991860702633858 - 1 - <_> - - - - <_> - 4 11 4 4 -1. - <_> - 3 12 4 2 2. - 1 - -7.9284235835075378e-003 - 0.2984429001808167 - 2 - <_> - - - - <_> - 13 7 2 13 -1. - <_> - 14 7 1 13 2. - 0 - -4.0769609622657299e-003 - 0.1143684014678001 - -0.3525969088077545 - <_> - - <_> - - - - <_> - 8 8 5 2 -1. - <_> - 8 9 5 1 2. - 0 - 1.3272130163386464e-003 - 2 - 1 - <_> - - - - <_> - 5 14 6 4 -1. - <_> - 7 14 2 4 3. - 0 - 9.6542192623019218e-003 - 0.1869167983531952 - -0.3328953087329865 - <_> - - - - <_> - 6 16 3 1 -1. - <_> - 7 17 1 1 3. - 1 - -1.8561830511316657e-003 - -0.4854961037635803 - -0.0408838614821434 - <_> - - <_> - - - - <_> - 1 0 18 3 -1. - <_> - 7 1 6 1 9. - 0 - 0.0859222933650017 - 1 - 0.3638261854648590 - <_> - - - - <_> - 8 0 2 15 -1. - <_> - 8 5 2 5 3. - 0 - -0.0888733267784119 - -0.3376666009426117 - 2 - <_> - - - - <_> - 13 1 2 4 -1. - <_> - 13 2 2 2 2. - 0 - -2.7235411107540131e-003 - 0.2419946044683456 - -0.0420818105340004 - <_> - - <_> - - - - <_> - 11 11 9 4 -1. - <_> - 11 12 9 2 2. - 0 - -0.0130497701466084 - -0.3009203970432282 - 1 - <_> - - - - <_> - 2 11 3 2 -1. - <_> - 2 11 3 1 2. - 1 - -3.2052190508693457e-003 - 2 - -0.1007675006985664 - <_> - - - - <_> - 3 5 1 3 -1. - <_> - 2 6 1 1 3. - 1 - -3.4975090529769659e-003 - -0.4027841091156006 - 0.1751174032688141 - <_> - - <_> - - - - <_> - 4 17 16 1 -1. - <_> - 8 17 8 1 2. - 0 - 3.6366239655762911e-003 - 1 - 2 - <_> - - - - <_> - 4 16 8 3 -1. - <_> - 8 16 4 3 2. - 0 - -0.0115860803052783 - 0.1779648959636688 - -0.1634896993637085 - <_> - - - - <_> - 4 2 4 1 -1. - <_> - 6 2 2 1 2. - 0 - 3.9760980871506035e-004 - 6.7020449787378311e-003 - 0.4413064122200012 - <_> - - <_> - - - - <_> - 6 4 9 3 -1. - <_> - 6 5 9 1 3. - 0 - -0.0258807502686977 - 0.6071990728378296 - 1 - <_> - - - - <_> - 6 1 4 1 -1. - <_> - 7 1 2 1 2. - 0 - 1.0445900261402130e-003 - 2 - -0.3221668004989624 - <_> - - - - <_> - 3 0 7 3 -1. - <_> - 2 1 7 1 3. - 1 - -4.7445381060242653e-003 - 0.1865433007478714 - -0.0586008094251156 - <_> - - <_> - - - - <_> - 6 9 3 2 -1. - <_> - 7 9 1 2 3. - 0 - 7.0085371844470501e-003 - 1 - 0.3121924996376038 - <_> - - - - <_> - 18 3 2 10 -1. - <_> - 18 3 1 5 2. - <_> - 19 8 1 5 2. - 0 - -7.0238402113318443e-003 - -0.4785158932209015 - 2 - <_> - - - - <_> - 0 9 10 4 -1. - <_> - 0 9 5 2 2. - <_> - 5 11 5 2 2. - 0 - 8.1113204360008240e-003 - -0.1146916970610619 - 0.1400589048862457 - <_> - - <_> - - - - <_> - 0 3 8 6 -1. - <_> - 0 3 4 3 2. - <_> - 4 6 4 3 2. - 0 - -0.0409088805317879 - 1 - 2 - <_> - - - - <_> - 14 8 6 4 -1. - <_> - 14 10 6 2 2. - 0 - 6.7115128040313721e-003 - 0.1193569004535675 - -0.4955360889434815 - <_> - - - - <_> - 17 6 1 2 -1. - <_> - 17 6 1 1 2. - 1 - 4.7661857679486275e-003 - 2.9291590908542275e-004 - 0.3052360117435455 - <_> - - <_> - - - - <_> - 14 4 1 10 -1. - <_> - 14 9 1 5 2. - 0 - 8.2969013601541519e-003 - 2 - 1 - <_> - - - - <_> - 16 15 2 1 -1. - <_> - 16 15 1 1 2. - 1 - -1.4058559900149703e-003 - 0.3839569985866547 - -5.8064288459718227e-003 - <_> - - - - <_> - 4 11 4 8 -1. - <_> - 5 11 2 8 2. - 0 - 3.8165580481290817e-003 - 8.5270447016227990e-005 - -0.3176873028278351 - <_> - - <_> - - - - <_> - 6 13 8 1 -1. - <_> - 8 13 4 1 2. - 0 - -0.0159888491034508 - 0.5860596895217896 - 1 - <_> - - - - <_> - 13 0 6 11 -1. - <_> - 16 0 3 11 2. - 0 - -0.0425258092582226 - 2 - 0.0152009697631001 - <_> - - - - <_> - 10 1 8 12 -1. - <_> - 10 4 8 6 2. - 0 - 0.1034146994352341 - -0.4269818067550659 - 0.9107682108879089 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - 1.5279020590241998e-004 - 1 - -0.1834954023361206 - <_> - - - - <_> - 0 15 2 4 -1. - <_> - 0 16 2 2 2. - 0 - 4.4353670091368258e-004 - 0.1838672012090683 - 2 - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - -2.1845809533260763e-004 - -0.3045887053012848 - 0.0966794490814209 - <_> - - <_> - - - - <_> - 10 3 10 4 -1. - <_> - 10 3 5 2 2. - <_> - 15 5 5 2 2. - 0 - -6.9333161227405071e-003 - 0.1982986927032471 - 1 - <_> - - - - <_> - 16 7 3 3 -1. - <_> - 15 8 3 1 3. - 1 - 0.0268246307969093 - 2 - 0.5770410895347595 - <_> - - - - <_> - 1 0 12 6 -1. - <_> - 4 0 6 6 2. - 0 - 0.0288271196186543 - -0.1359346956014633 - 0.1809305995702744 - <_> - - <_> - - - - <_> - 7 0 12 8 -1. - <_> - 10 0 6 8 2. - 0 - 0.0344938188791275 - 1 - 0.2778271138668060 - <_> - - - - <_> - 5 8 2 3 -1. - <_> - 5 8 1 3 2. - 1 - -3.9107841439545155e-003 - 0.1009998023509979 - 2 - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 16 11 1 1 2. - <_> - 17 12 1 1 2. - 0 - 2.0955900254193693e-004 - -0.0168890506029129 - -0.3467237949371338 - <_> - - <_> - - - - <_> - 15 0 3 12 -1. - <_> - 16 0 1 12 3. - 0 - -0.0115038100630045 - 1 - 2 - <_> - - - - <_> - 14 1 3 5 -1. - <_> - 15 2 1 5 3. - 1 - -5.8503649197518826e-003 - 0.2906965017318726 - -0.5793504714965820 - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 18 1 1 2. - <_> - 19 19 1 1 2. - 0 - -1.9477239402476698e-004 - -0.1554740071296692 - 0.0877076685428619 - <_> - - <_> - - - - <_> - 6 15 2 2 -1. - <_> - 6 15 1 1 2. - <_> - 7 16 1 1 2. - 0 - -2.4192599812522531e-004 - 1 - 2 - <_> - - - - <_> - 4 16 2 2 -1. - <_> - 4 16 1 1 2. - <_> - 5 17 1 1 2. - 0 - -8.7722227908670902e-004 - -0.4995898008346558 - 0.2286749929189682 - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 8 9 3 1 3. - 1 - -8.8649448007345200e-003 - 0.1481774002313614 - -0.1403902024030685 - <_> - - <_> - - - - <_> - 3 8 3 8 -1. - <_> - 3 10 3 4 2. - 0 - 6.6976482048630714e-003 - 1 - -0.1773800998926163 - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - 1.6602370305918157e-004 - 2 - 0.2565073072910309 - <_> - - - - <_> - 17 4 1 8 -1. - <_> - 17 4 1 4 2. - 1 - 0.0568600408732891 - 0.0173611994832754 - -0.7402126193046570 - <_> - - <_> - - - - <_> - 3 15 10 4 -1. - <_> - 3 15 5 2 2. - <_> - 8 17 5 2 2. - 0 - 0.0240988899022341 - 1 - -0.5394067764282227 - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - 8.0347352195531130e-004 - 2 - 0.1438513994216919 - <_> - - - - <_> - 8 5 8 7 -1. - <_> - 8 5 4 7 2. - 1 - 0.0697244033217430 - -0.1067522987723351 - 0.5421742200851440 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 9.0714782709255815e-004 - 1 - 0.2437620013952255 - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -7.3141716711688787e-005 - 0.0733250379562378 - 2 - <_> - - - - <_> - 15 10 2 3 -1. - <_> - 14 11 2 1 3. - 1 - -1.5573799610137939e-003 - 0.0498461984097958 - -0.3109464049339294 - <_> - - <_> - - - - <_> - 11 9 2 3 -1. - <_> - 11 10 2 1 3. - 0 - -0.0138679901137948 - -0.6642689108848572 - 1 - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 17 9 3 1 3. - 0 - 1.1202249443158507e-003 - 0.0706584379076958 - 2 - <_> - - - - <_> - 4 1 2 12 -1. - <_> - 4 4 2 6 2. - 0 - -0.0372063294053078 - 0.4209175109863281 - -0.2558520138263702 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 11 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - -4.2576639680191875e-004 - 1 - 2 - <_> - - - - <_> - 5 2 9 12 -1. - <_> - 5 8 9 6 2. - 0 - 0.0549342595040798 - -0.3053053021430969 - 0.2711814939975739 - <_> - - - - <_> - 13 5 6 4 -1. - <_> - 13 5 3 2 2. - <_> - 16 7 3 2 2. - 0 - 9.6833100542426109e-004 - -0.0670412927865982 - 0.1727688014507294 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - 7.9393703490495682e-003 - -0.0536972694098949 - 1 - <_> - - - - <_> - 3 5 10 12 -1. - <_> - 3 5 5 6 2. - <_> - 8 11 5 6 2. - 0 - 0.0507579483091831 - 0.4010989069938660 - 2 - <_> - - - - <_> - 0 9 9 6 -1. - <_> - 3 11 3 2 9. - 0 - -0.0321335606276989 - 0.4355114102363586 - -0.4193628132343292 - <_> - - <_> - - - - <_> - 1 4 8 7 -1. - <_> - 5 4 4 7 2. - 0 - 0.0996339321136475 - 1 - -0.6199988722801209 - <_> - - - - <_> - 15 7 4 5 -1. - <_> - 16 7 2 5 2. - 0 - -4.5324079692363739e-003 - 0.1698444932699204 - 2 - <_> - - - - <_> - 18 6 2 4 -1. - <_> - 19 6 1 4 2. - 0 - 7.6392642222344875e-004 - 0.1053330004215241 - -0.2190054953098297 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 9 1 3 2. - 1 - -0.0131202703341842 - 1 - -0.0513724684715271 - <_> - - - - <_> - 3 2 3 17 -1. - <_> - 4 2 1 17 3. - 0 - -1.2095270212739706e-003 - 2 - -0.1217354014515877 - <_> - - - - <_> - 18 9 2 10 -1. - <_> - 18 14 2 5 2. - 0 - -6.0685798525810242e-003 - -0.3241882026195526 - 0.6556087732315064 - <_> - - <_> - - - - <_> - 6 0 14 4 -1. - <_> - 5 1 14 2 2. - 1 - -0.0443298891186714 - -0.2650349140167236 - 1 - <_> - - - - <_> - 17 8 3 1 -1. - <_> - 18 9 1 1 3. - 1 - -0.0113345496356487 - -0.7620555758476257 - 2 - <_> - - - - <_> - 8 13 4 3 -1. - <_> - 9 13 2 3 2. - 0 - -9.7028171876445413e-004 - -0.0955015122890472 - 0.1526336073875427 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 5 9 6 1 3. - 1 - -8.4918709471821785e-003 - 0.1997373998165131 - 1 - <_> - - - - <_> - 10 7 10 1 -1. - <_> - 10 7 5 1 2. - 1 - -0.0698465034365654 - 0.3132502138614655 - 2 - <_> - - - - <_> - 9 7 6 5 -1. - <_> - 12 7 3 5 2. - 0 - 0.0924663618206978 - -0.1173335984349251 - 0.7785034775733948 - <_> - - <_> - - - - <_> - 13 5 1 12 -1. - <_> - 13 5 1 6 2. - 1 - -0.0957997590303421 - 0.7844203710556030 - 1 - <_> - - - - <_> - 1 13 6 5 -1. - <_> - 4 13 3 5 2. - 0 - 5.1276460289955139e-003 - 2 - 0.1538922041654587 - <_> - - - - <_> - 4 6 4 3 -1. - <_> - 5 7 2 3 2. - 1 - 6.1059608124196529e-003 - -0.1357762068510056 - 0.2157524973154068 - <_> - - <_> - - - - <_> - 3 16 2 3 -1. - <_> - 4 16 1 3 2. - 0 - -5.5722601246088743e-004 - 2 - 1 - <_> - - - - <_> - 7 2 5 4 -1. - <_> - 7 2 5 2 2. - 1 - 0.0527722910046577 - -0.1353441029787064 - 0.2937805950641632 - <_> - - - - <_> - 3 13 3 7 -1. - <_> - 4 13 1 7 3. - 0 - -3.7010889500379562e-003 - -0.1729241013526917 - 0.2380526959896088 - <_> - - <_> - - - - <_> - 16 6 1 3 -1. - <_> - 16 7 1 1 3. - 0 - -1.3051830464974046e-003 - 1 - -0.0550203695893288 - <_> - - - - <_> - 1 6 8 3 -1. - <_> - 5 6 4 3 2. - 0 - -0.0409033484756947 - -0.3094097077846527 - 2 - <_> - - - - <_> - 14 9 3 4 -1. - <_> - 13 10 3 2 2. - 1 - -6.3687269575893879e-003 - 0.6578310132026672 - 0.0926436334848404 - <_> - - <_> - - - - <_> - 8 10 4 5 -1. - <_> - 9 10 2 5 2. - 0 - 1.4673050027340651e-003 - 2 - 1 - <_> - - - - <_> - 0 11 13 6 -1. - <_> - 0 14 13 3 2. - 0 - 0.0530805401504040 - 0.1134286969900131 - -0.3880166113376617 - <_> - - - - <_> - 2 3 1 2 -1. - <_> - 2 3 1 1 2. - 1 - 4.5696222223341465e-003 - 0.0872357115149498 - -0.5533301234245300 - <_> - - <_> - - - - <_> - 3 15 12 4 -1. - <_> - 6 15 6 4 2. - 0 - 2.7171480469405651e-003 - 2 - 1 - <_> - - - - <_> - 6 7 4 13 -1. - <_> - 7 7 2 13 2. - 0 - -7.5547560118138790e-003 - 0.4638605117797852 - 0.0220955107361078 - <_> - - - - <_> - 17 15 2 2 -1. - <_> - 17 15 1 1 2. - <_> - 18 16 1 1 2. - 0 - 2.1428259788081050e-004 - -0.1748296022415161 - 0.1678411960601807 - <_> - - <_> - - - - <_> - 12 15 5 2 -1. - <_> - 12 16 5 1 2. - 0 - 1.1644139885902405e-003 - 1 - 2 - <_> - - - - <_> - 13 12 1 6 -1. - <_> - 13 14 1 2 3. - 0 - 2.7417868841439486e-003 - -0.3065463900566101 - 0.0574645698070526 - <_> - - - - <_> - 15 0 1 9 -1. - <_> - 12 3 1 3 3. - 1 - 0.0515555888414383 - 0.1389189064502716 - -0.4436255097389221 - -1.1282010078430176 - 26 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 9 2 6 -1. - <_> - 4 9 1 3 2. - <_> - 5 12 1 3 2. - 0 - -1.9345199689269066e-003 - 1 - -0.2903842926025391 - <_> - - - - <_> - 12 10 6 1 -1. - <_> - 14 10 2 1 3. - 0 - 5.4789008572697639e-003 - -0.0496000312268734 - 2 - <_> - - - - <_> - 11 11 2 3 -1. - <_> - 11 11 1 3 2. - 1 - 1.3723999727517366e-003 - 0.8141210079193115 - -0.4188863039016724 - <_> - - <_> - - - - <_> - 12 9 6 2 -1. - <_> - 14 9 2 2 3. - 0 - 0.0264951102435589 - 1 - 2 - <_> - - - - <_> - 12 6 2 12 -1. - <_> - 12 6 2 6 2. - 1 - -0.1369757950305939 - 0.2446302026510239 - -0.1482565999031067 - <_> - - - - <_> - 11 11 2 8 -1. - <_> - 11 11 1 4 2. - <_> - 12 15 1 4 2. - 0 - -3.0566600617021322e-004 - 0.6578198075294495 - -0.0792365968227386 - <_> - - <_> - - - - <_> - 5 3 6 3 -1. - <_> - 7 3 2 3 3. - 0 - -0.0199251398444176 - -0.7239953875541687 - 1 - <_> - - - - <_> - 8 7 12 6 -1. - <_> - 8 9 12 2 3. - 0 - -0.1342795938253403 - 0.5649064779281616 - 2 - <_> - - - - <_> - 3 15 1 2 -1. - <_> - 3 15 1 1 2. - 1 - -1.0180550161749125e-003 - 0.1079113036394119 - -0.1449317038059235 - <_> - - <_> - - - - <_> - 12 1 8 3 -1. - <_> - 14 1 4 3 2. - 0 - -1.6956209437921643e-003 - 2 - 1 - <_> - - - - <_> - 0 0 12 7 -1. - <_> - 4 0 4 7 3. - 0 - -0.0392320081591606 - 0.2044267952442169 - -0.2248439937829971 - <_> - - - - <_> - 18 2 2 6 -1. - <_> - 18 2 1 3 2. - <_> - 19 5 1 3 2. - 0 - -1.1985700111836195e-003 - -0.0983124002814293 - 0.2521767914295197 - <_> - - <_> - - - - <_> - 4 0 6 16 -1. - <_> - 4 0 3 8 2. - <_> - 7 8 3 8 2. - 0 - 0.0566372983157635 - 1 - 0.4215654134750366 - <_> - - - - <_> - 3 16 6 4 -1. - <_> - 5 16 2 4 3. - 0 - -0.0140888104215264 - -0.5442442297935486 - 2 - <_> - - - - <_> - 4 7 6 3 -1. - <_> - 3 8 6 1 3. - 1 - 0.0197420194745064 - -0.0430385097861290 - 0.3966085016727448 - <_> - - <_> - - - - <_> - 11 6 5 3 -1. - <_> - 10 7 5 1 3. - 1 - -0.0377900190651417 - -0.5374689102172852 - 1 - <_> - - - - <_> - 3 3 12 8 -1. - <_> - 3 7 12 4 2. - 0 - -0.2127849012613297 - 0.2974278032779694 - 2 - <_> - - - - <_> - 12 8 2 3 -1. - <_> - 12 9 2 1 3. - 0 - -7.5766840018332005e-004 - -0.1723908931016922 - 0.0943711698055267 - <_> - - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 6 10 1 2 2. - 0 - 1.0515520116314292e-003 - -0.0946061983704567 - 1 - <_> - - - - <_> - 17 4 1 14 -1. - <_> - 17 4 1 7 2. - 1 - -0.0469673387706280 - 0.3804990947246552 - 2 - <_> - - - - <_> - 5 10 2 3 -1. - <_> - 5 10 1 3 2. - 1 - -6.6702580079436302e-003 - -0.3673529028892517 - 0.1813481003046036 - <_> - - <_> - - - - <_> - 6 5 4 9 -1. - <_> - 7 5 2 9 2. - 0 - -8.8434442877769470e-003 - 0.1973361968994141 - 1 - <_> - - - - <_> - 7 5 12 1 -1. - <_> - 7 5 6 1 2. - 1 - -0.0751628577709198 - 0.2871936857700348 - 2 - <_> - - - - <_> - 2 16 2 2 -1. - <_> - 2 16 1 1 2. - <_> - 3 17 1 1 2. - 0 - 6.0678281442960724e-005 - -0.2148146927356720 - 0.0454047694802284 - <_> - - <_> - - - - <_> - 15 5 3 3 -1. - <_> - 16 6 1 3 3. - 1 - -0.0261573195457459 - -0.5991541147232056 - 1 - <_> - - - - <_> - 10 7 3 8 -1. - <_> - 11 8 1 8 3. - 1 - -0.0252653900533915 - -0.3297339975833893 - 2 - <_> - - - - <_> - 7 3 3 3 -1. - <_> - 7 4 3 1 3. - 0 - -5.3271669894456863e-003 - 0.4338879883289337 - 0.0128962500020862 - <_> - - <_> - - - - <_> - 13 3 5 6 -1. - <_> - 13 5 5 2 3. - 0 - -0.0463506989181042 - -0.4439637064933777 - 1 - <_> - - - - <_> - 0 15 5 3 -1. - <_> - 0 16 5 1 3. - 0 - 8.5780251538380980e-004 - 2 - -0.1040856018662453 - <_> - - - - <_> - 2 18 18 1 -1. - <_> - 11 18 9 1 2. - 0 - 8.7990947067737579e-003 - 0.0267966501414776 - 0.3459241092205048 - <_> - - <_> - - - - <_> - 11 14 4 2 -1. - <_> - 13 14 2 2 2. - 0 - -8.6540228221565485e-004 - 2 - 1 - <_> - - - - <_> - 3 15 7 2 -1. - <_> - 3 16 7 1 2. - 0 - 1.4915770152583718e-003 - -0.3035647869110107 - 0.0245681907981634 - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 12 10 3 1 3. - 1 - -0.0179942604154348 - -0.3627789020538330 - 0.2386412024497986 - <_> - - <_> - - - - <_> - 13 0 3 12 -1. - <_> - 14 1 1 12 3. - 1 - 0.0311420597136021 - 1 - 0.3871073126792908 - <_> - - - - <_> - 9 5 3 5 -1. - <_> - 10 5 1 5 3. - 0 - -0.0139366202056408 - 0.5235136747360230 - 2 - <_> - - - - <_> - 18 14 2 4 -1. - <_> - 18 14 1 2 2. - <_> - 19 16 1 2 2. - 0 - -2.1907410700805485e-004 - -0.1773063987493515 - 0.0542970187962055 - <_> - - <_> - - - - <_> - 16 19 4 1 -1. - <_> - 18 19 2 1 2. - 0 - -1.5399450203403831e-003 - 2 - 1 - <_> - - - - <_> - 17 15 2 5 -1. - <_> - 18 15 1 5 2. - 0 - 2.0680578891187906e-003 - -0.1253232061862946 - 0.1558393985033035 - <_> - - - - <_> - 0 17 6 3 -1. - <_> - 0 18 6 1 3. - 0 - 6.5148430876433849e-003 - 0.2785494029521942 - -0.6919667124748230 - <_> - - <_> - - - - <_> - 0 4 1 14 -1. - <_> - 0 11 1 7 2. - 0 - 0.0390564016997814 - 1 - -0.4368160963058472 - <_> - - - - <_> - 5 11 3 5 -1. - <_> - 6 12 1 5 3. - 1 - -4.0204878896474838e-003 - 2 - 0.0837361887097359 - <_> - - - - <_> - 12 8 3 1 -1. - <_> - 13 8 1 1 3. - 0 - 2.9492459725588560e-003 - -0.2313725948333740 - 0.5877181887626648 - <_> - - <_> - - - - <_> - 18 0 2 7 -1. - <_> - 19 0 1 7 2. - 0 - 4.0582148358225822e-003 - 2 - 1 - <_> - - - - <_> - 3 8 6 10 -1. - <_> - 3 13 6 5 2. - 0 - 0.0545317307114601 - 0.2705658078193665 - -0.3651250004768372 - <_> - - - - <_> - 17 0 2 5 -1. - <_> - 18 0 1 5 2. - 0 - 2.4824589490890503e-003 - -2.2614318877458572e-003 - 0.3562797904014587 - <_> - - <_> - - - - <_> - 18 0 2 12 -1. - <_> - 18 0 2 6 2. - 1 - -0.0459675006568432 - -0.3647234141826630 - 1 - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 2 1 3 1 2. - 1 - -7.7245971187949181e-003 - -0.3595615923404694 - 2 - <_> - - - - <_> - 1 1 5 12 -1. - <_> - 1 4 5 6 2. - 0 - 0.0105091398581862 - -1.1801080545410514e-003 - 0.2665889859199524 - <_> - - <_> - - - - <_> - 2 5 1 14 -1. - <_> - 2 12 1 7 2. - 0 - 0.0275093708187342 - 2 - 1 - <_> - - - - <_> - 6 0 9 7 -1. - <_> - 9 0 3 7 3. - 0 - -0.0384853184223175 - -0.5831285715103149 - 0.2442165017127991 - <_> - - - - <_> - 16 1 4 6 -1. - <_> - 16 1 2 3 2. - <_> - 18 4 2 3 2. - 0 - 8.4051601588726044e-003 - -0.1206799000501633 - 0.2052854001522064 - <_> - - <_> - - - - <_> - 16 0 4 6 -1. - <_> - 16 0 2 3 2. - <_> - 18 3 2 3 2. - 0 - -4.0405229665338993e-003 - 1 - 2 - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 1 1 1 2. - 0 - 1.5476900443900377e-004 - 0.3129818141460419 - -0.2559778094291687 - <_> - - - - <_> - 17 1 1 3 -1. - <_> - 17 2 1 1 3. - 0 - 2.4814540665829554e-005 - -0.2201624959707260 - 0.0547624789178371 - <_> - - <_> - - - - <_> - 1 8 3 4 -1. - <_> - 1 9 3 2 2. - 0 - -2.0571500062942505e-003 - 1 - 2 - <_> - - - - <_> - 6 0 4 15 -1. - <_> - 8 0 2 15 2. - 0 - -0.0254000294953585 - 0.1587581932544708 - -0.2569526135921478 - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -9.7940629348158836e-004 - -0.4863390922546387 - 0.1370093971490860 - <_> - - <_> - - - - <_> - 3 7 6 3 -1. - <_> - 5 8 2 1 9. - 0 - 2.1806131117045879e-003 - 1 - -0.1520625948905945 - <_> - - - - <_> - 0 5 12 12 -1. - <_> - 4 5 4 12 3. - 0 - -0.0354556888341904 - 2 - 0.2207909971475601 - <_> - - - - <_> - 14 9 1 3 -1. - <_> - 13 10 1 1 3. - 1 - 7.0310868322849274e-003 - -0.1035237982869148 - 0.7839106917381287 - <_> - - <_> - - - - <_> - 4 4 2 2 -1. - <_> - 4 5 2 1 2. - 0 - -1.9015279831364751e-003 - 2 - 1 - <_> - - - - <_> - 6 4 2 10 -1. - <_> - 6 9 2 5 2. - 0 - -0.0275232102721930 - 0.2267062962055206 - -0.1404857933521271 - <_> - - - - <_> - 14 6 6 14 -1. - <_> - 14 6 3 7 2. - <_> - 17 13 3 7 2. - 0 - 0.0111403800547123 - 0.0380153395235538 - 0.4557718932628632 - <_> - - <_> - - - - <_> - 6 7 11 8 -1. - <_> - 6 11 11 4 2. - 0 - -0.0140770599246025 - -0.3449122011661530 - 1 - <_> - - - - <_> - 17 8 3 5 -1. - <_> - 18 9 1 5 3. - 1 - -7.5063481926918030e-003 - 0.2452898025512695 - 2 - <_> - - - - <_> - 10 4 10 2 -1. - <_> - 10 4 5 1 2. - <_> - 15 5 5 1 2. - 0 - 3.4938179887831211e-003 - -0.1337188035249710 - 0.1503683030605316 - <_> - - <_> - - - - <_> - 5 1 8 8 -1. - <_> - 5 5 8 4 2. - 0 - 0.0505389906466007 - 1 - 0.3967787921428680 - <_> - - - - <_> - 19 16 1 4 -1. - <_> - 19 18 1 2 2. - 0 - 5.9616268845275044e-004 - -0.1666477024555206 - 2 - <_> - - - - <_> - 19 0 1 10 -1. - <_> - 19 5 1 5 2. - 0 - -0.0204257499426603 - -0.3469902873039246 - 0.1385073959827423 - <_> - - <_> - - - - <_> - 17 0 3 3 -1. - <_> - 17 1 3 1 3. - 0 - -5.2063791081309319e-003 - -0.3667221963405609 - 1 - <_> - - - - <_> - 9 2 3 1 -1. - <_> - 10 2 1 1 3. - 0 - -7.5247389031574130e-004 - -0.2641856968402863 - 2 - <_> - - - - <_> - 2 0 18 5 -1. - <_> - 8 0 6 5 3. - 0 - -0.0548328086733818 - 0.2729527056217194 - -3.5999810788780451e-003 - <_> - - <_> - - - - <_> - 15 8 3 9 -1. - <_> - 15 11 3 3 3. - 0 - 0.0173843093216419 - 1 - 2 - <_> - - - - <_> - 13 11 1 8 -1. - <_> - 13 13 1 4 2. - 0 - 8.1398971378803253e-003 - -0.0950326099991798 - 0.3222743868827820 - <_> - - - - <_> - 10 14 8 3 -1. - <_> - 14 14 4 3 2. - 0 - 5.3603048436343670e-003 - -0.0185867697000504 - 0.4857772886753082 - <_> - - <_> - - - - <_> - 7 8 2 8 -1. - <_> - 7 8 1 4 2. - <_> - 8 12 1 4 2. - 0 - -6.7889019846916199e-003 - 0.4356415867805481 - 1 - <_> - - - - <_> - 2 18 4 2 -1. - <_> - 2 18 2 1 2. - <_> - 4 19 2 1 2. - 0 - -2.6219699066132307e-004 - -0.1897449046373367 - 2 - <_> - - - - <_> - 5 5 2 3 -1. - <_> - 4 6 2 1 3. - 1 - -6.3086668960750103e-003 - -0.3214514851570129 - 0.0999888032674789 - <_> - - <_> - - - - <_> - 15 1 4 1 -1. - <_> - 17 1 2 1 2. - 0 - -7.5333809945732355e-004 - 1 - -0.0643247812986374 - <_> - - - - <_> - 7 1 4 3 -1. - <_> - 6 2 4 1 3. - 1 - -5.1618018187582493e-004 - 0.4032961130142212 - 2 - <_> - - - - <_> - 3 1 6 19 -1. - <_> - 6 1 3 19 2. - 0 - 0.0499719604849815 - -0.1061998978257179 - 0.7884200811386108 - <_> - - <_> - - - - <_> - 8 3 5 8 -1. - <_> - 8 7 5 4 2. - 0 - -0.1677663028240204 - 0.8323891758918762 - 1 - <_> - - - - <_> - 0 0 20 2 -1. - <_> - 0 0 10 1 2. - <_> - 10 1 10 1 2. - 0 - 1.5873169759288430e-003 - 2 - -0.1416179984807968 - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 7 0 4 1 2. - <_> - 11 1 4 1 2. - 0 - -1.5413289656862617e-003 - -0.1122547015547752 - 0.2163020074367523 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 4 7 1 1 9. - 0 - -6.0930051840841770e-003 - 1 - 2 - <_> - - - - <_> - 1 6 2 8 -1. - <_> - 1 6 1 4 2. - <_> - 2 10 1 4 2. - 0 - 0.0120933195576072 - 0.2833209931850433 - -0.7547317147254944 - <_> - - - - <_> - 18 9 2 3 -1. - <_> - 17 10 2 1 3. - 1 - -0.0103540001437068 - 0.3117344081401825 - -0.0831472128629684 - <_> - - <_> - - - - <_> - 16 2 4 12 -1. - <_> - 13 5 4 6 2. - 1 - -0.2250819057226181 - 1 - 2 - <_> - - - - <_> - 8 0 7 20 -1. - <_> - 8 5 7 10 2. - 0 - -0.3941977918148041 - 0.7275367975234985 - -0.4720552861690521 - <_> - - - - <_> - 11 6 4 3 -1. - <_> - 11 7 4 1 3. - 0 - -7.0281741209328175e-003 - 0.2674250900745392 - -0.0236754398792982 - <_> - - <_> - - - - <_> - 12 2 4 12 -1. - <_> - 12 8 4 6 2. - 0 - -0.1097738966345787 - 0.3299573957920075 - 1 - <_> - - - - <_> - 11 9 7 4 -1. - <_> - 11 10 7 2 2. - 0 - -0.0189812593162060 - -0.4110780060291290 - 2 - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 10 1 1 2. - 0 - -1.5975029673427343e-003 - 0.3910059928894043 - -0.0300548002123833 - <_> - - <_> - - - - <_> - 6 9 5 3 -1. - <_> - 6 10 5 1 3. - 0 - 3.3699660561978817e-003 - 2 - 1 - <_> - - - - <_> - 8 6 12 2 -1. - <_> - 12 6 4 2 3. - 0 - 0.0286084003746510 - -0.2675782144069672 - 0.5492280721664429 - <_> - - - - <_> - 0 11 4 4 -1. - <_> - 0 11 2 2 2. - <_> - 2 13 2 2 2. - 0 - 0.0112349800765514 - 0.0797982066869736 - -0.4934751987457275 - <_> - - <_> - - - - <_> - 0 9 4 8 -1. - <_> - 0 9 2 4 2. - <_> - 2 13 2 4 2. - 0 - 0.0100052701309323 - 2 - 1 - <_> - - - - <_> - 14 7 3 10 -1. - <_> - 14 7 3 5 2. - 1 - -0.1333305984735489 - 0.4337550997734070 - 0.0145957004278898 - <_> - - - - <_> - 0 1 2 7 -1. - <_> - 1 1 1 7 2. - 0 - 1.0838189627975225e-003 - 9.0088322758674622e-003 - -0.2667393088340759 - <_> - - <_> - - - - <_> - 1 1 8 2 -1. - <_> - 1 1 4 1 2. - <_> - 5 2 4 1 2. - 0 - 1.8866240279749036e-003 - 1 - 0.1635895073413849 - <_> - - - - <_> - 0 2 4 10 -1. - <_> - 2 2 2 10 2. - 0 - -0.0195943191647530 - 2 - 0.0234282407909632 - <_> - - - - <_> - 15 11 4 9 -1. - <_> - 16 11 2 9 2. - 0 - -4.0433141402900219e-003 - 0.1810539066791534 - -0.3762851953506470 - <_> - - <_> - - - - <_> - 8 1 12 3 -1. - <_> - 8 1 6 3 2. - 1 - -0.1328396052122116 - 1 - 2 - <_> - - - - <_> - 0 1 3 6 -1. - <_> - 1 1 1 6 3. - 0 - 3.8986348954495043e-005 - -0.0479175411164761 - 0.5767279863357544 - <_> - - - - <_> - 2 15 3 1 -1. - <_> - 3 15 1 1 3. - 0 - 3.0710658757016063e-004 - -0.1020087972283363 - 0.1361324042081833 - <_> - - <_> - - - - <_> - 2 1 11 3 -1. - <_> - 2 2 11 1 3. - 0 - -0.0400101505219936 - 0.7034252882003784 - 1 - <_> - - - - <_> - 6 6 1 2 -1. - <_> - 6 7 1 1 2. - 0 - -1.1752990540117025e-003 - 0.1145721971988678 - 2 - <_> - - - - <_> - 13 8 3 3 -1. - <_> - 14 9 1 3 3. - 1 - -4.5838830992579460e-003 - 0.0706219375133514 - -0.2159709036350250 - <_> - - <_> - - - - <_> - 0 3 12 6 -1. - <_> - 4 5 4 2 9. - 0 - 0.0532997399568558 - 1 - -0.1644563972949982 - <_> - - - - <_> - 2 6 9 3 -1. - <_> - 5 6 3 3 3. - 0 - 0.0199610106647015 - 2 - 0.4041951000690460 - <_> - - - - <_> - 1 5 5 4 -1. - <_> - 1 6 5 2 2. - 0 - -0.0149942701682448 - -0.4986104071140289 - 0.0618227683007717 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 15 0 1 2 2. - 0 - 4.2854552157223225e-003 - 1 - -0.7274947762489319 - <_> - - - - <_> - 5 0 15 2 -1. - <_> - 10 0 5 2 3. - 0 - -0.0139912702143192 - 0.1566503942012787 - 2 - <_> - - - - <_> - 10 5 8 1 -1. - <_> - 14 5 4 1 2. - 0 - 9.9598374217748642e-003 - -0.1215270981192589 - 0.2437576055526733 - <_> - - <_> - - - - <_> - 0 15 12 3 -1. - <_> - 4 16 4 1 9. - 0 - -0.0614636912941933 - -0.4915964007377625 - 1 - <_> - - - - <_> - 7 16 2 1 -1. - <_> - 8 16 1 1 2. - 0 - 8.1084080738946795e-004 - 2 - 0.4031282067298889 - <_> - - - - <_> - 0 8 2 12 -1. - <_> - 1 8 1 12 2. - 0 - 1.4836339978501201e-003 - 0.0529072396457195 - -0.2097142040729523 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - 2.8651900356635451e-004 - -0.0589058399200439 - 1 - <_> - - - - <_> - 11 2 2 10 -1. - <_> - 11 2 1 5 2. - <_> - 12 7 1 5 2. - 0 - -4.9405667232349515e-004 - 2 - 0.3814454972743988 - <_> - - - - <_> - 7 1 2 13 -1. - <_> - 8 1 1 13 2. - 0 - -1.3786340132355690e-003 - -0.4463802874088287 - 0.4143705964088440 - <_> - - <_> - - - - <_> - 15 14 2 4 -1. - <_> - 14 15 2 2 2. - 1 - 9.0396329760551453e-003 - 1 - -0.5897920727729797 - <_> - - - - <_> - 13 7 2 1 -1. - <_> - 13 7 1 1 2. - 1 - 1.5593219723086804e-004 - 2 - 0.1446985006332398 - <_> - - - - <_> - 6 8 10 2 -1. - <_> - 6 8 5 1 2. - <_> - 11 9 5 1 2. - 0 - -0.0114924497902393 - -0.6230595111846924 - -0.0280794203281403 - <_> - - <_> - - - - <_> - 7 6 8 4 -1. - <_> - 7 7 8 2 2. - 0 - -0.0100586703047156 - 0.1306374967098236 - 1 - <_> - - - - <_> - 9 5 4 2 -1. - <_> - 9 6 4 1 2. - 0 - 2.8506040107458830e-003 - -0.1589691042900085 - 2 - <_> - - - - <_> - 4 9 10 2 -1. - <_> - 4 9 5 1 2. - <_> - 9 10 5 1 2. - 0 - -0.0105501404032111 - -0.5857840180397034 - 0.4151665866374970 - <_> - - <_> - - - - <_> - 14 4 6 2 -1. - <_> - 16 6 2 2 3. - 1 - -0.0268342494964600 - -0.2398269027471542 - 1 - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 10 3 1 2 3. - 1 - -6.7446259781718254e-003 - -0.3073124885559082 - 2 - <_> - - - - <_> - 14 1 2 12 -1. - <_> - 15 1 1 12 2. - 0 - -1.9539019558578730e-003 - 0.2654568850994110 - -2.7655568555928767e-004 - <_> - - <_> - - - - <_> - 6 0 12 14 -1. - <_> - 10 0 4 14 3. - 0 - -0.1529643982648850 - 1 - 2 - <_> - - - - <_> - 16 5 3 4 -1. - <_> - 16 5 3 2 2. - 1 - 0.0135474000126123 - 0.5479670166969299 - 7.3741371743381023e-003 - <_> - - - - <_> - 0 3 3 3 -1. - <_> - 1 4 1 1 9. - 0 - 4.4966558925807476e-003 - -3.9956450928002596e-004 - -0.3418357074260712 - <_> - - <_> - - - - <_> - 5 5 8 6 -1. - <_> - 9 5 4 6 2. - 0 - -0.0962591767311096 - -0.3498184978961945 - 1 - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 10 7 2 2 2. - 0 - 6.0006431303918362e-003 - 2 - 0.4897741079330444 - <_> - - - - <_> - 0 18 18 2 -1. - <_> - 0 19 18 1 2. - 0 - 4.8557221889495850e-003 - 0.0927255600690842 - -0.1306017935276032 - <_> - - <_> - - - - <_> - 3 18 16 2 -1. - <_> - 3 19 16 1 2. - 0 - -1.2333790073171258e-003 - 1 - 2 - <_> - - - - <_> - 13 17 6 3 -1. - <_> - 13 18 6 1 3. - 0 - -4.2365258559584618e-004 - 0.2470467984676361 - -0.3914980888366699 - <_> - - - - <_> - 1 17 17 3 -1. - <_> - 1 18 17 1 3. - 0 - 8.3003565669059753e-003 - 9.2340186238288879e-003 - 0.4034841954708099 - -1.0841189622879028 - 27 - -1 - <_> - - - <_> - - <_> - - - - <_> - 15 8 1 4 -1. - <_> - 15 9 1 2 2. - 0 - 2.8592639137059450e-003 - 2 - 1 - <_> - - - - <_> - 1 9 6 6 -1. - <_> - 1 9 3 3 2. - <_> - 4 12 3 3 2. - 0 - -0.0155356796458364 - 0.8263546824455261 - 0.0227937400341034 - <_> - - - - <_> - 8 15 12 2 -1. - <_> - 12 15 4 2 3. - 0 - -2.3885839618742466e-003 - 0.0672957226634026 - -0.3147684931755066 - <_> - - <_> - - - - <_> - 4 10 2 1 -1. - <_> - 5 10 1 1 2. - 0 - 1.4029210433363914e-003 - -0.1029068976640701 - 1 - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 5 11 1 1 2. - 1 - -4.5515298843383789e-003 - -0.3236832916736603 - 2 - <_> - - - - <_> - 9 0 6 17 -1. - <_> - 11 0 2 17 3. - 0 - 9.4592738896608353e-003 - 0.5425099134445190 - -0.3034853041172028 - <_> - - <_> - - - - <_> - 4 1 4 8 -1. - <_> - 4 1 2 4 2. - <_> - 6 5 2 4 2. - 0 - 5.4062008857727051e-003 - 1 - -0.2848654985427856 - <_> - - - - <_> - 6 13 2 2 -1. - <_> - 6 13 1 2 2. - 1 - -2.6852379087358713e-003 - 0.2602491974830627 - 2 - <_> - - - - <_> - 2 19 2 1 -1. - <_> - 3 19 1 1 2. - 0 - -6.2019047618377954e-005 - 0.1682700067758560 - -0.2385973036289215 - <_> - - <_> - - - - <_> - 0 1 19 3 -1. - <_> - 0 2 19 1 3. - 0 - 0.0241470802575350 - 1 - 0.4824096858501434 - <_> - - - - <_> - 4 8 13 6 -1. - <_> - 4 11 13 3 2. - 0 - 1.3977369526401162e-003 - -0.3623018860816956 - 2 - <_> - - - - <_> - 4 2 10 3 -1. - <_> - 4 3 10 1 3. - 0 - 0.0201642792671919 - -0.0361465811729431 - 0.5047339797019959 - <_> - - <_> - - - - <_> - 4 4 15 9 -1. - <_> - 9 7 5 3 9. - 0 - -0.6124429106712341 - -0.4822031855583191 - 1 - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 6 2 2 1 2. - 1 - 9.0631619095802307e-003 - 2 - -0.5785940289497376 - <_> - - - - <_> - 8 2 3 18 -1. - <_> - 8 11 3 9 2. - 0 - 0.1781190931797028 - 0.0850123614072800 - -0.6336212158203125 - <_> - - <_> - - - - <_> - 3 16 1 3 -1. - <_> - 3 17 1 1 3. - 0 - 2.6881069061346352e-004 - 1 - -0.1607538014650345 - <_> - - - - <_> - 3 12 15 2 -1. - <_> - 3 13 15 1 2. - 0 - -0.0121805602684617 - -0.6573411822319031 - 2 - <_> - - - - <_> - 3 16 6 4 -1. - <_> - 3 16 3 2 2. - <_> - 6 18 3 2 2. - 0 - 4.0606390684843063e-003 - 0.0540125593543053 - 0.4981768131256104 - <_> - - <_> - - - - <_> - 16 0 2 9 -1. - <_> - 17 0 1 9 2. - 0 - -3.6952861119061708e-003 - -0.2982620000839233 - 1 - <_> - - - - <_> - 17 9 2 3 -1. - <_> - 17 10 2 1 3. - 0 - -6.8888221867382526e-003 - 0.6143739223480225 - 2 - <_> - - - - <_> - 14 4 4 4 -1. - <_> - 13 5 4 2 2. - 1 - 2.7258940972387791e-003 - -0.0830650478601456 - 0.1806645989418030 - <_> - - <_> - - - - <_> - 11 3 6 6 -1. - <_> - 11 3 3 3 2. - <_> - 14 6 3 3 2. - 0 - 9.8391417413949966e-003 - 2 - 1 - <_> - - - - <_> - 3 15 1 4 -1. - <_> - 3 17 1 2 2. - 0 - 1.4573390362784266e-003 - -0.0488020703196526 - 0.2965075075626373 - <_> - - - - <_> - 2 0 2 1 -1. - <_> - 3 0 1 1 2. - 0 - -2.3016060004010797e-004 - 0.0835834369063377 - -0.2445777952671051 - <_> - - <_> - - - - <_> - 4 9 3 2 -1. - <_> - 5 9 1 2 3. - 0 - -1.3347089989110827e-003 - 1 - 2 - <_> - - - - <_> - 7 5 6 9 -1. - <_> - 9 8 2 3 9. - 0 - -0.2351624965667725 - -0.3978005945682526 - 0.2920047044754028 - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 11 7 1 2 2. - 1 - -3.1839110888540745e-003 - 0.1548459976911545 - -0.1391118019819260 - <_> - - <_> - - - - <_> - 0 11 5 9 -1. - <_> - 0 14 5 3 3. - 0 - -0.0594988390803337 - -0.8024157881736755 - 1 - <_> - - - - <_> - 8 10 4 1 -1. - <_> - 9 10 2 1 2. - 0 - 2.9865070246160030e-004 - 2 - -0.1793211996555328 - <_> - - - - <_> - 4 3 1 4 -1. - <_> - 3 4 1 2 2. - 1 - -2.1592311095446348e-003 - -0.1970307976007462 - 0.1590138971805573 - <_> - - <_> - - - - <_> - 1 2 18 12 -1. - <_> - 1 2 9 6 2. - <_> - 10 8 9 6 2. - 0 - -0.0877276435494423 - 0.2339181005954742 - 1 - <_> - - - - <_> - 5 2 1 4 -1. - <_> - 5 2 1 2 2. - 1 - 1.8073969986289740e-003 - -0.1977723985910416 - 2 - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 1 2 1 2 2. - 0 - -3.0411710031330585e-004 - -0.2278759926557541 - 0.2348029017448425 - <_> - - <_> - - - - <_> - 4 2 12 4 -1. - <_> - 4 3 12 2 2. - 0 - -0.0367789305746555 - 0.6347193717956543 - 1 - <_> - - - - <_> - 7 7 3 3 -1. - <_> - 8 7 1 3 3. - 0 - -8.4806662052869797e-003 - 0.3432014882564545 - 2 - <_> - - - - <_> - 4 6 6 6 -1. - <_> - 6 6 2 6 3. - 0 - 0.0445268191397190 - -3.2206610776484013e-003 - -0.3305779099464417 - <_> - - <_> - - - - <_> - 0 6 2 3 -1. - <_> - 0 7 2 1 3. - 0 - -1.1732319835573435e-003 - 1 - 2 - <_> - - - - <_> - 17 11 3 3 -1. - <_> - 17 12 3 1 3. - 0 - 1.4339870540425181e-003 - -0.3289462924003601 - 0.2681246101856232 - <_> - - - - <_> - 16 0 3 9 -1. - <_> - 17 0 1 9 3. - 0 - 7.7017117291688919e-004 - 0.1572207957506180 - -0.1208091974258423 - <_> - - <_> - - - - <_> - 13 1 2 2 -1. - <_> - 14 1 1 2 2. - 0 - 5.0579622620716691e-004 - 1 - 0.1691720932722092 - <_> - - - - <_> - 4 5 8 9 -1. - <_> - 8 5 4 9 2. - 0 - -0.1610991954803467 - 0.5483856797218323 - 2 - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 11 0 1 2 2. - 0 - -9.3872181605547667e-004 - 0.1343251019716263 - -0.1849029958248138 - <_> - - <_> - - - - <_> - 10 3 4 4 -1. - <_> - 10 3 2 2 2. - <_> - 12 5 2 2 2. - 0 - 0.0105522796511650 - 1 - -0.4074558913707733 - <_> - - - - <_> - 5 0 8 1 -1. - <_> - 7 2 4 1 2. - 1 - 0.0411572083830833 - 2 - 0.7532612085342407 - <_> - - - - <_> - 0 3 2 12 -1. - <_> - 0 3 1 6 2. - <_> - 1 9 1 6 2. - 0 - -1.3245060108602047e-003 - -0.1137211993336678 - 0.1174445971846581 - <_> - - <_> - - - - <_> - 5 8 2 4 -1. - <_> - 4 9 2 2 2. - 1 - -7.3126708157360554e-003 - 1 - -0.0731876567006111 - <_> - - - - <_> - 0 1 1 12 -1. - <_> - 0 4 1 6 2. - 0 - -0.0158473607152700 - -0.4724876880645752 - 2 - <_> - - - - <_> - 16 11 3 6 -1. - <_> - 16 14 3 3 2. - 0 - -5.2730008028447628e-003 - -0.3943318128585815 - 0.3205418884754181 - <_> - - <_> - - - - <_> - 6 9 1 3 -1. - <_> - 5 10 1 1 3. - 1 - -0.0101639302447438 - -0.5209981799125671 - 1 - <_> - - - - <_> - 13 0 4 18 -1. - <_> - 14 0 2 18 2. - 0 - -0.0142695996910334 - 0.4447200894355774 - 2 - <_> - - - - <_> - 15 11 2 2 -1. - <_> - 16 11 1 2 2. - 0 - -2.8677590307779610e-004 - 0.1078782007098198 - -0.1323933005332947 - <_> - - <_> - - - - <_> - 15 16 3 3 -1. - <_> - 15 17 3 1 3. - 0 - -4.4711050577461720e-004 - 1 - 2 - <_> - - - - <_> - 16 9 4 1 -1. - <_> - 17 10 2 1 2. - 1 - 6.9207558408379555e-003 - -0.2118450999259949 - 0.7103831171989441 - <_> - - - - <_> - 4 0 8 2 -1. - <_> - 4 0 4 1 2. - <_> - 8 1 4 1 2. - 0 - -4.7490649740211666e-004 - -0.0903684124350548 - 0.1933932006359100 - <_> - - <_> - - - - <_> - 9 15 8 4 -1. - <_> - 11 15 4 4 2. - 0 - -0.0141922300681472 - -0.3877499103546143 - 1 - <_> - - - - <_> - 15 18 2 2 -1. - <_> - 15 18 1 1 2. - <_> - 16 19 1 1 2. - 0 - -5.9010402765125036e-004 - 0.4224196970462799 - 2 - <_> - - - - <_> - 15 2 4 4 -1. - <_> - 15 2 2 2 2. - <_> - 17 4 2 2 2. - 0 - 2.2904858924448490e-003 - -0.0804035365581512 - 0.1733590066432953 - <_> - - <_> - - - - <_> - 19 5 1 12 -1. - <_> - 19 8 1 6 2. - 0 - -0.0251043997704983 - -0.6031293869018555 - 1 - <_> - - - - <_> - 15 14 5 3 -1. - <_> - 15 15 5 1 3. - 0 - -9.7052762284874916e-003 - -0.6572173833847046 - 2 - <_> - - - - <_> - 15 18 2 2 -1. - <_> - 16 18 1 2 2. - 0 - 2.7441041311249137e-004 - -0.0520428605377674 - 0.1807800978422165 - <_> - - <_> - - - - <_> - 15 18 2 1 -1. - <_> - 16 18 1 1 2. - 0 - -2.6883379905484617e-004 - 0.1848616003990173 - 1 - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 0 0 9 1 2. - <_> - 9 1 9 1 2. - 0 - 8.5731758736073971e-004 - 0.0367018096148968 - 2 - <_> - - - - <_> - 5 6 2 4 -1. - <_> - 5 7 2 2 2. - 0 - -7.1471570990979671e-003 - 0.3801917135715485 - -0.3131479024887085 - <_> - - <_> - - - - <_> - 16 11 2 3 -1. - <_> - 15 12 2 1 3. - 1 - -5.9650279581546783e-003 - -0.3751834928989410 - 1 - <_> - - - - <_> - 8 4 4 7 -1. - <_> - 9 5 2 7 2. - 1 - 6.5897651948034763e-003 - 2 - 0.2194893062114716 - <_> - - - - <_> - 5 8 2 4 -1. - <_> - 5 9 2 2 2. - 0 - 5.0898519111797214e-004 - 0.0588558688759804 - -0.2683170139789581 - <_> - - <_> - - - - <_> - 8 9 4 2 -1. - <_> - 9 10 2 2 2. - 1 - -0.0194063801318407 - -0.4021354019641876 - 1 - <_> - - - - <_> - 11 10 3 3 -1. - <_> - 12 10 1 3 3. - 0 - 0.0106824999675155 - 2 - 0.6616470813751221 - <_> - - - - <_> - 15 0 2 5 -1. - <_> - 16 0 1 5 2. - 0 - 5.9157088398933411e-003 - 0.0367188192903996 - -0.4788692891597748 - <_> - - <_> - - - - <_> - 4 8 3 1 -1. - <_> - 5 9 1 1 3. - 1 - -4.9229031428694725e-003 - 0.2202643007040024 - 1 - <_> - - - - <_> - 9 5 1 4 -1. - <_> - 9 7 1 2 2. - 0 - -0.0124171702191234 - -0.4981400072574616 - 2 - <_> - - - - <_> - 12 11 2 1 -1. - <_> - 13 11 1 1 2. - 0 - 5.5979369208216667e-003 - -0.0401416011154652 - 0.7933250069618225 - <_> - - <_> - - - - <_> - 9 3 5 10 -1. - <_> - 9 8 5 5 2. - 0 - -0.1843589991331101 - 0.8239216208457947 - 1 - <_> - - - - <_> - 4 13 9 4 -1. - <_> - 4 15 9 2 2. - 0 - 0.0642805770039558 - 2 - -0.5153368711471558 - <_> - - - - <_> - 15 2 2 1 -1. - <_> - 16 2 1 1 2. - 0 - -1.6670690383762121e-003 - -0.5789753794670105 - 0.0310206506401300 - <_> - - <_> - - - - <_> - 7 1 13 6 -1. - <_> - 7 3 13 2 3. - 0 - 0.0474757887423038 - 1 - 0.1585211008787155 - <_> - - - - <_> - 3 0 15 2 -1. - <_> - 3 1 15 1 2. - 0 - 2.5915699079632759e-003 - 2 - -0.2813214957714081 - <_> - - - - <_> - 4 0 12 2 -1. - <_> - 4 1 12 1 2. - 0 - -6.8349228240549564e-004 - -0.0844962075352669 - 0.3408535122871399 - <_> - - <_> - - - - <_> - 17 2 2 4 -1. - <_> - 17 3 2 2 2. - 0 - -8.0965347588062286e-003 - 0.6438406109809876 - 1 - <_> - - - - <_> - 5 6 4 6 -1. - <_> - 5 6 2 3 2. - <_> - 7 9 2 3 2. - 0 - 0.0207502692937851 - 2 - 0.4547908902168274 - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 2.0832920563407242e-004 - -0.1073665991425514 - 0.1325784027576447 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 16 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - -3.6361071397550404e-004 - 0.1899598985910416 - 1 - <_> - - - - <_> - 7 18 13 2 -1. - <_> - 7 19 13 1 2. - 0 - -6.1230720020830631e-003 - -0.5525259971618652 - 2 - <_> - - - - <_> - 16 2 1 6 -1. - <_> - 16 4 1 2 3. - 0 - -4.2420169338583946e-003 - 0.2955805063247681 - -0.0718816965818405 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 1 1 2. - <_> - 18 17 1 1 2. - 0 - -3.2453850144520402e-004 - -0.2169762998819351 - 1 - <_> - - - - <_> - 4 4 5 2 -1. - <_> - 4 4 5 1 2. - 1 - 0.0121402600780129 - 2 - -0.3175399899482727 - <_> - - - - <_> - 14 17 2 2 -1. - <_> - 14 17 1 1 2. - <_> - 15 18 1 1 2. - 0 - -1.8192020070273429e-004 - -0.1177702993154526 - 0.1720840930938721 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 15 1 2 1 2. - 1 - -3.0392920598387718e-003 - 0.1813199073076248 - 1 - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - 2.8347579063847661e-004 - 2 - 0.1475231945514679 - <_> - - - - <_> - 6 10 3 7 -1. - <_> - 7 10 1 7 3. - 0 - -2.0839450880885124e-003 - 0.1260271966457367 - -0.2344800978899002 - <_> - - <_> - - - - <_> - 12 9 6 5 -1. - <_> - 15 9 3 5 2. - 0 - -0.0157358907163143 - 2 - 1 - <_> - - - - <_> - 7 4 3 6 -1. - <_> - 7 4 3 3 2. - 1 - -0.0597833395004272 - -0.3762426972389221 - 0.1045283973217011 - <_> - - - - <_> - 2 6 8 10 -1. - <_> - 2 11 8 5 2. - 0 - 0.0811482965946198 - -0.4633106887340546 - 0.0149304503574967 - <_> - - <_> - - - - <_> - 3 13 2 3 -1. - <_> - 3 14 2 1 3. - 0 - 5.8228247798979282e-003 - 1 - -0.7126113176345825 - <_> - - - - <_> - 1 11 4 2 -1. - <_> - 1 12 4 1 2. - 0 - -5.7364261010661721e-004 - 2 - -0.0392931401729584 - <_> - - - - <_> - 5 16 15 4 -1. - <_> - 5 17 15 2 2. - 0 - -3.6678448668681085e-004 - -0.1019888967275620 - 0.4737910032272339 - <_> - - <_> - - - - <_> - 15 6 2 4 -1. - <_> - 15 7 2 2 2. - 0 - -9.1290572891011834e-004 - 1 - 2 - <_> - - - - <_> - 6 2 9 3 -1. - <_> - 6 3 9 1 3. - 0 - 0.0125617701560259 - 0.0353643409907818 - 0.4816335141658783 - <_> - - - - <_> - 15 16 2 2 -1. - <_> - 15 16 1 1 2. - <_> - 16 17 1 1 2. - 0 - -7.6223909854888916e-004 - 0.4651660919189453 - -0.1513921022415161 - <_> - - <_> - - - - <_> - 8 2 10 3 -1. - <_> - 8 3 10 1 3. - 0 - 1.8540889723226428e-003 - 0.1185353025794029 - 1 - <_> - - - - <_> - 18 8 2 4 -1. - <_> - 17 9 2 2 2. - 1 - -0.0181880593299866 - 0.5080518722534180 - 2 - <_> - - - - <_> - 2 5 1 12 -1. - <_> - 2 11 1 6 2. - 0 - 0.0256486795842648 - -0.2364062964916229 - 0.2699171900749207 - <_> - - <_> - - - - <_> - 17 13 3 6 -1. - <_> - 18 15 1 2 9. - 0 - -0.0259394701570272 - -0.6130409240722656 - 1 - <_> - - - - <_> - 13 5 3 2 -1. - <_> - 14 5 1 2 3. - 0 - 9.7436201758682728e-004 - 2 - -0.1675136983394623 - <_> - - - - <_> - 3 2 3 2 -1. - <_> - 4 2 1 2 3. - 0 - -1.2310179881751537e-003 - -0.2617937028408051 - 0.1271860003471375 - <_> - - <_> - - - - <_> - 4 4 12 5 -1. - <_> - 7 4 6 5 2. - 0 - -0.0707698613405228 - 0.3649967014789581 - 1 - <_> - - - - <_> - 5 15 2 2 -1. - <_> - 5 15 1 1 2. - <_> - 6 16 1 1 2. - 0 - 6.8592047318816185e-004 - 2 - 0.3191641867160797 - <_> - - - - <_> - 10 0 8 3 -1. - <_> - 12 0 4 3 2. - 0 - 7.2288517840206623e-003 - -0.1132650971412659 - 0.2313845008611679 - <_> - - <_> - - - - <_> - 11 0 8 6 -1. - <_> - 13 0 4 6 2. - 0 - -4.7549661248922348e-003 - 0.1224955022335053 - 1 - <_> - - - - <_> - 4 1 12 8 -1. - <_> - 10 1 6 8 2. - 0 - 0.0385606810450554 - -0.2296983003616333 - 2 - <_> - - - - <_> - 18 10 2 3 -1. - <_> - 17 11 2 1 3. - 1 - 3.3737360499799252e-003 - -0.0293230693787336 - 0.7321509122848511 - <_> - - <_> - - - - <_> - 12 1 6 3 -1. - <_> - 14 1 2 3 3. - 0 - -0.0146719701588154 - -0.5239514708518982 - 1 - <_> - - - - <_> - 1 16 1 3 -1. - <_> - 1 17 1 1 3. - 0 - 3.5087150172330439e-004 - 0.0981159806251526 - 2 - <_> - - - - <_> - 10 9 1 2 -1. - <_> - 10 10 1 1 2. - 0 - -2.0783280488103628e-003 - 0.4035033881664276 - -0.2295967042446137 - <_> - - <_> - - - - <_> - 19 13 1 4 -1. - <_> - 19 13 1 2 2. - 1 - -3.7065339274704456e-003 - 1 - -0.0920629724860191 - <_> - - - - <_> - 9 6 3 6 -1. - <_> - 9 9 3 3 2. - 0 - 0.0401503294706345 - 2 - -0.7132080197334290 - <_> - - - - <_> - 2 9 18 10 -1. - <_> - 2 9 9 5 2. - <_> - 11 14 9 5 2. - 0 - -0.0612767115235329 - 0.4461534023284912 - 0.0587144382297993 - <_> - - <_> - - - - <_> - 11 4 5 6 -1. - <_> - 11 4 5 3 2. - 1 - -0.0997300967574120 - 1 - 2 - <_> - - - - <_> - 17 0 2 4 -1. - <_> - 17 1 2 2 2. - 0 - -7.7125482494011521e-004 - -0.1424691975116730 - 0.5118741989135742 - <_> - - - - <_> - 2 3 3 4 -1. - <_> - 3 3 1 4 3. - 0 - 1.3902420178055763e-003 - 0.0180412400513887 - -0.2572959065437317 - <_> - - <_> - - - - <_> - 19 0 1 10 -1. - <_> - 19 5 1 5 2. - 0 - -0.0253048893064260 - -0.3936561048030853 - 1 - <_> - - - - <_> - 1 7 6 6 -1. - <_> - 1 7 3 3 2. - <_> - 4 10 3 3 2. - 0 - 0.0251762606203556 - -0.0172982700169086 - 2 - <_> - - - - <_> - 15 2 3 12 -1. - <_> - 11 6 3 4 3. - 1 - -0.2778967916965485 - -0.5146418213844299 - 0.4142223894596100 - <_> - - <_> - - - - <_> - 3 9 7 6 -1. - <_> - 3 11 7 2 3. - 0 - 0.0461887195706367 - 1 - -0.4154655039310455 - <_> - - - - <_> - 8 8 1 3 -1. - <_> - 8 9 1 1 3. - 0 - -1.7873500473797321e-003 - 0.2935892045497894 - 2 - <_> - - - - <_> - 4 13 6 6 -1. - <_> - 4 15 6 2 3. - 0 - -0.0120765501633286 - 0.3050153851509094 - -0.0831891372799873 - <_> - - <_> - - - - <_> - 1 13 4 3 -1. - <_> - 1 14 4 1 3. - 0 - -5.4004848934710026e-003 - -0.4824295938014984 - 1 - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 7 1 2 2 2. - <_> - 9 3 2 2 2. - 0 - -9.4532333314418793e-003 - -0.4186420142650604 - 2 - <_> - - - - <_> - 2 4 2 2 -1. - <_> - 2 4 1 1 2. - <_> - 3 5 1 1 2. - 0 - -1.6526769613847136e-003 - -0.4769079089164734 - 0.0699551627039909 - <_> - - <_> - - - - <_> - 2 4 16 3 -1. - <_> - 2 5 16 1 3. - 0 - -0.0311533100903034 - 0.6263319253921509 - 1 - <_> - - - - <_> - 0 6 17 3 -1. - <_> - 0 7 17 1 3. - 0 - 5.1554460078477859e-003 - 2 - -0.2215293049812317 - <_> - - - - <_> - 5 6 10 3 -1. - <_> - 5 7 10 1 3. - 0 - -2.7182319900020957e-004 - -0.0289269406348467 - 0.3649964034557343 - -1.1084890365600586 - 28 - -1 - diff --git a/data/haarcascades/haarcascade_frontalface_alt.xml b/data/haarcascades/haarcascade_frontalface_alt.xml deleted file mode 100644 index 5a6f275..0000000 --- a/data/haarcascades/haarcascade_frontalface_alt.xml +++ /dev/null @@ -1,26161 +0,0 @@ - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_>3 7 14 4 -1. - <_>3 9 14 2 2. - 0 - 4.0141958743333817e-003 - 0.0337941907346249 - 0.8378106951713562 - <_> - - <_> - - - - <_>1 2 18 4 -1. - <_>7 2 6 4 3. - 0 - 0.0151513395830989 - 0.1514132022857666 - 0.7488812208175659 - <_> - - <_> - - - - <_>1 7 15 9 -1. - <_>1 10 15 3 3. - 0 - 4.2109931819140911e-003 - 0.0900492817163467 - 0.6374819874763489 - 0.8226894140243530 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>5 6 2 6 -1. - <_>5 9 2 3 2. - 0 - 1.6227109590545297e-003 - 0.0693085864186287 - 0.7110946178436279 - <_> - - <_> - - - - <_>7 5 6 3 -1. - <_>9 5 2 3 3. - 0 - 2.2906649392098188e-003 - 0.1795803010463715 - 0.6668692231178284 - <_> - - <_> - - - - <_>4 0 12 9 -1. - <_>4 3 12 3 3. - 0 - 5.0025708042085171e-003 - 0.1693672984838486 - 0.6554006934165955 - <_> - - <_> - - - - <_>6 9 10 8 -1. - <_>6 13 10 4 2. - 0 - 7.9659894108772278e-003 - 0.5866332054138184 - 0.0914145186543465 - <_> - - <_> - - - - <_>3 6 14 8 -1. - <_>3 10 14 4 2. - 0 - -3.5227010957896709e-003 - 0.1413166970014572 - 0.6031895875930786 - <_> - - <_> - - - - <_>14 1 6 10 -1. - <_>14 1 3 10 2. - 0 - 0.0366676896810532 - 0.3675672113895416 - 0.7920318245887756 - <_> - - <_> - - - - <_>7 8 5 12 -1. - <_>7 12 5 4 3. - 0 - 9.3361474573612213e-003 - 0.6161385774612427 - 0.2088509947061539 - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>7 1 6 3 3. - 0 - 8.6961314082145691e-003 - 0.2836230993270874 - 0.6360273957252502 - <_> - - <_> - - - - <_>1 8 17 2 -1. - <_>1 9 17 1 2. - 0 - 1.1488880263641477e-003 - 0.2223580926656723 - 0.5800700783729553 - <_> - - <_> - - - - <_>16 6 4 2 -1. - <_>16 7 4 1 2. - 0 - -2.1484689787030220e-003 - 0.2406464070081711 - 0.5787054896354675 - <_> - - <_> - - - - <_>5 17 2 2 -1. - <_>5 18 2 1 2. - 0 - 2.1219060290604830e-003 - 0.5559654831886292 - 0.1362237036228180 - <_> - - <_> - - - - <_>14 2 6 12 -1. - <_>14 2 3 12 2. - 0 - -0.0939491465687752 - 0.8502737283706665 - 0.4717740118503571 - <_> - - <_> - - - - <_>4 0 4 12 -1. - <_>4 0 2 6 2. - <_>6 6 2 6 2. - 0 - 1.3777789426967502e-003 - 0.5993673801422119 - 0.2834529876708984 - <_> - - <_> - - - - <_>2 11 18 8 -1. - <_>8 11 6 8 3. - 0 - 0.0730631574988365 - 0.4341886043548584 - 0.7060034275054932 - <_> - - <_> - - - - <_>5 7 10 2 -1. - <_>5 8 10 1 2. - 0 - 3.6767389974556863e-004 - 0.3027887940406799 - 0.6051574945449829 - <_> - - <_> - - - - <_>15 11 5 3 -1. - <_>15 12 5 1 3. - 0 - -6.0479710809886456e-003 - 0.1798433959484100 - 0.5675256848335266 - 6.9566087722778320 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>5 3 10 9 -1. - <_>5 6 10 3 3. - 0 - -0.0165106896311045 - 0.6644225120544434 - 0.1424857974052429 - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - 2.7052499353885651e-003 - 0.6325352191925049 - 0.1288477033376694 - <_> - - <_> - - - - <_>3 5 4 12 -1. - <_>3 9 4 4 3. - 0 - 2.8069869149476290e-003 - 0.1240288019180298 - 0.6193193197250366 - <_> - - <_> - - - - <_>4 5 12 5 -1. - <_>8 5 4 5 3. - 0 - -1.5402400167658925e-003 - 0.1432143002748489 - 0.5670015811920166 - <_> - - <_> - - - - <_>5 6 10 8 -1. - <_>5 10 10 4 2. - 0 - -5.6386279175058007e-004 - 0.1657433062791824 - 0.5905207991600037 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>8 3 6 3 3. - 0 - 1.9253729842603207e-003 - 0.2695507109165192 - 0.5738824009895325 - <_> - - <_> - - - - <_>9 12 1 8 -1. - <_>9 16 1 4 2. - 0 - -5.0214841030538082e-003 - 0.1893538981676102 - 0.5782774090766907 - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 2.6365420781075954e-003 - 0.2309329062700272 - 0.5695425868034363 - <_> - - <_> - - - - <_>7 0 6 17 -1. - <_>9 0 2 17 3. - 0 - -1.5127769438549876e-003 - 0.2759602069854736 - 0.5956642031669617 - <_> - - <_> - - - - <_>9 0 6 4 -1. - <_>11 0 2 4 3. - 0 - -0.0101574398577213 - 0.1732538044452667 - 0.5522047281265259 - <_> - - <_> - - - - <_>5 1 6 4 -1. - <_>7 1 2 4 3. - 0 - -0.0119536602869630 - 0.1339409947395325 - 0.5559014081954956 - <_> - - <_> - - - - <_>12 1 6 16 -1. - <_>14 1 2 16 3. - 0 - 4.8859491944313049e-003 - 0.3628703951835632 - 0.6188849210739136 - <_> - - <_> - - - - <_>0 5 18 8 -1. - <_>0 5 9 4 2. - <_>9 9 9 4 2. - 0 - -0.0801329165697098 - 0.0912110507488251 - 0.5475944876670837 - <_> - - <_> - - - - <_>8 15 10 4 -1. - <_>13 15 5 2 2. - <_>8 17 5 2 2. - 0 - 1.0643280111253262e-003 - 0.3715142905712128 - 0.5711399912834168 - <_> - - <_> - - - - <_>3 1 4 8 -1. - <_>3 1 2 4 2. - <_>5 5 2 4 2. - 0 - -1.3419450260698795e-003 - 0.5953313708305359 - 0.3318097889423370 - <_> - - <_> - - - - <_>3 6 14 10 -1. - <_>10 6 7 5 2. - <_>3 11 7 5 2. - 0 - -0.0546011403203011 - 0.1844065934419632 - 0.5602846145629883 - <_> - - <_> - - - - <_>2 1 6 16 -1. - <_>4 1 2 16 3. - 0 - 2.9071690514683723e-003 - 0.3594244122505188 - 0.6131715178489685 - <_> - - <_> - - - - <_>0 18 20 2 -1. - <_>0 19 20 1 2. - 0 - 7.4718717951327562e-004 - 0.5994353294372559 - 0.3459562957286835 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 4.3013808317482471e-003 - 0.4172652065753937 - 0.6990845203399658 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 4.5017572119832039e-003 - 0.4509715139865875 - 0.7801457047462463 - <_> - - <_> - - - - <_>0 12 9 6 -1. - <_>0 14 9 2 3. - 0 - 0.0241385009139776 - 0.5438212752342224 - 0.1319826990365982 - 9.4985427856445313 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>5 7 3 4 -1. - <_>5 9 3 2 2. - 0 - 1.9212230108678341e-003 - 0.1415266990661621 - 0.6199870705604553 - <_> - - <_> - - - - <_>9 3 2 16 -1. - <_>9 11 2 8 2. - 0 - -1.2748669541906565e-004 - 0.6191074252128601 - 0.1884928941726685 - <_> - - <_> - - - - <_>3 6 13 8 -1. - <_>3 10 13 4 2. - 0 - 5.1409931620582938e-004 - 0.1487396955490112 - 0.5857927799224854 - <_> - - <_> - - - - <_>12 3 8 2 -1. - <_>12 3 4 2 2. - 0 - 4.1878609918057919e-003 - 0.2746909856796265 - 0.6359239816665649 - <_> - - <_> - - - - <_>8 8 4 12 -1. - <_>8 12 4 4 3. - 0 - 5.1015717908740044e-003 - 0.5870851278305054 - 0.2175628989934921 - <_> - - <_> - - - - <_>11 3 8 6 -1. - <_>15 3 4 3 2. - <_>11 6 4 3 2. - 0 - -2.1448440384119749e-003 - 0.5880944728851318 - 0.2979590892791748 - <_> - - <_> - - - - <_>7 1 6 19 -1. - <_>9 1 2 19 3. - 0 - -2.8977119363844395e-003 - 0.2373327016830444 - 0.5876647233963013 - <_> - - <_> - - - - <_>9 0 6 4 -1. - <_>11 0 2 4 3. - 0 - -0.0216106791049242 - 0.1220654994249344 - 0.5194202065467835 - <_> - - <_> - - - - <_>3 1 9 3 -1. - <_>6 1 3 3 3. - 0 - -4.6299318782985210e-003 - 0.2631230950355530 - 0.5817409157752991 - <_> - - <_> - - - - <_>8 15 10 4 -1. - <_>13 15 5 2 2. - <_>8 17 5 2 2. - 0 - 5.9393711853772402e-004 - 0.3638620078563690 - 0.5698544979095459 - <_> - - <_> - - - - <_>0 3 6 10 -1. - <_>3 3 3 10 2. - 0 - 0.0538786612451077 - 0.4303531050682068 - 0.7559366226196289 - <_> - - <_> - - - - <_>3 4 15 15 -1. - <_>3 9 15 5 3. - 0 - 1.8887349870055914e-003 - 0.2122603058815002 - 0.5613427162170410 - <_> - - <_> - - - - <_>6 5 8 6 -1. - <_>6 7 8 2 3. - 0 - -2.3635339457541704e-003 - 0.5631849169731140 - 0.2642767131328583 - <_> - - <_> - - - - <_>4 4 12 10 -1. - <_>10 4 6 5 2. - <_>4 9 6 5 2. - 0 - 0.0240177996456623 - 0.5797107815742493 - 0.2751705944538117 - <_> - - <_> - - - - <_>6 4 4 4 -1. - <_>8 4 2 4 2. - 0 - 2.0543030404951423e-004 - 0.2705242037773132 - 0.5752568840980530 - <_> - - <_> - - - - <_>15 11 1 2 -1. - <_>15 12 1 1 2. - 0 - 8.4790197433903813e-004 - 0.5435624718666077 - 0.2334876954555512 - <_> - - <_> - - - - <_>3 11 2 2 -1. - <_>3 12 2 1 2. - 0 - 1.4091329649090767e-003 - 0.5319424867630005 - 0.2063155025243759 - <_> - - <_> - - - - <_>16 11 1 3 -1. - <_>16 12 1 1 3. - 0 - 1.4642629539594054e-003 - 0.5418980717658997 - 0.3068861067295075 - <_> - - <_> - - - - <_>3 15 6 4 -1. - <_>3 15 3 2 2. - <_>6 17 3 2 2. - 0 - 1.6352549428120255e-003 - 0.3695372939109802 - 0.6112868189811707 - <_> - - <_> - - - - <_>6 7 8 2 -1. - <_>6 8 8 1 2. - 0 - 8.3172752056270838e-004 - 0.3565036952495575 - 0.6025236248970032 - <_> - - <_> - - - - <_>3 11 1 3 -1. - <_>3 12 1 1 3. - 0 - -2.0998890977352858e-003 - 0.1913982033729553 - 0.5362827181816101 - <_> - - <_> - - - - <_>6 0 12 2 -1. - <_>6 1 12 1 2. - 0 - -7.4213981861248612e-004 - 0.3835555016994476 - 0.5529310107231140 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 3.2655049581080675e-003 - 0.4312896132469177 - 0.7101895809173584 - <_> - - <_> - - - - <_>7 15 6 2 -1. - <_>7 16 6 1 2. - 0 - 8.9134991867467761e-004 - 0.3984830975532532 - 0.6391963958740234 - <_> - - <_> - - - - <_>0 5 4 6 -1. - <_>0 7 4 2 3. - 0 - -0.0152841797098517 - 0.2366732954978943 - 0.5433713793754578 - <_> - - <_> - - - - <_>4 12 12 2 -1. - <_>8 12 4 2 3. - 0 - 4.8381411470472813e-003 - 0.5817500948905945 - 0.3239189088344574 - <_> - - <_> - - - - <_>6 3 1 9 -1. - <_>6 6 1 3 3. - 0 - -9.1093179071322083e-004 - 0.5540593862533569 - 0.2911868989467621 - <_> - - <_> - - - - <_>10 17 3 2 -1. - <_>11 17 1 2 3. - 0 - -6.1275060288608074e-003 - 0.1775255054235458 - 0.5196629166603088 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -4.4576259097084403e-004 - 0.3024170100688934 - 0.5533593893051148 - <_> - - <_> - - - - <_>7 6 6 4 -1. - <_>9 6 2 4 3. - 0 - 0.0226465407758951 - 0.4414930939674377 - 0.6975377202033997 - <_> - - <_> - - - - <_>7 17 3 2 -1. - <_>8 17 1 2 3. - 0 - -1.8804960418492556e-003 - 0.2791394889354706 - 0.5497952103614807 - <_> - - <_> - - - - <_>10 17 3 3 -1. - <_>11 17 1 3 3. - 0 - 7.0889107882976532e-003 - 0.5263199210166931 - 0.2385547012090683 - <_> - - <_> - - - - <_>8 12 3 2 -1. - <_>8 13 3 1 2. - 0 - 1.7318050377070904e-003 - 0.4319379031658173 - 0.6983600854873657 - <_> - - <_> - - - - <_>9 3 6 2 -1. - <_>11 3 2 2 3. - 0 - -6.8482700735330582e-003 - 0.3082042932510376 - 0.5390920042991638 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>3 13 14 2 2. - 0 - -1.5062530110299122e-005 - 0.5521922111511231 - 0.3120366036891937 - <_> - - <_> - - - - <_>1 10 18 4 -1. - <_>10 10 9 2 2. - <_>1 12 9 2 2. - 0 - 0.0294755697250366 - 0.5401322841644287 - 0.1770603060722351 - <_> - - <_> - - - - <_>0 10 3 3 -1. - <_>0 11 3 1 3. - 0 - 8.1387329846620560e-003 - 0.5178617835044861 - 0.1211019009351730 - <_> - - <_> - - - - <_>9 1 6 6 -1. - <_>11 1 2 6 3. - 0 - 0.0209429506212473 - 0.5290294289588928 - 0.3311221897602081 - <_> - - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - -9.5665529370307922e-003 - 0.7471994161605835 - 0.4451968967914581 - 18.4129695892333980 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 18 9 -1. - <_>1 3 18 3 3. - 0 - -2.8206960996612906e-004 - 0.2064086049795151 - 0.6076732277870178 - <_> - - <_> - - - - <_>12 10 2 6 -1. - <_>12 13 2 3 2. - 0 - 1.6790600493550301e-003 - 0.5851997137069702 - 0.1255383938550949 - <_> - - <_> - - - - <_>0 5 19 8 -1. - <_>0 9 19 4 2. - 0 - 6.9827912375330925e-004 - 0.0940184295177460 - 0.5728961229324341 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 7.8959012171253562e-004 - 0.1781987994909287 - 0.5694308876991272 - <_> - - <_> - - - - <_>5 3 6 1 -1. - <_>7 3 2 1 3. - 0 - -2.8560499195009470e-003 - 0.1638399064540863 - 0.5788664817810059 - <_> - - <_> - - - - <_>11 3 6 1 -1. - <_>13 3 2 1 3. - 0 - -3.8122469559311867e-003 - 0.2085440009832382 - 0.5508564710617065 - <_> - - <_> - - - - <_>5 10 4 6 -1. - <_>5 13 4 3 2. - 0 - 1.5896620461717248e-003 - 0.5702760815620422 - 0.1857215017080307 - <_> - - <_> - - - - <_>11 3 6 1 -1. - <_>13 3 2 1 3. - 0 - 0.0100783398374915 - 0.5116943120956421 - 0.2189770042896271 - <_> - - <_> - - - - <_>4 4 12 6 -1. - <_>4 6 12 2 3. - 0 - -0.0635263025760651 - 0.7131379842758179 - 0.4043813049793243 - <_> - - <_> - - - - <_>15 12 2 6 -1. - <_>15 14 2 2 3. - 0 - -9.1031491756439209e-003 - 0.2567181885242462 - 0.5463973283767700 - <_> - - <_> - - - - <_>9 3 2 2 -1. - <_>10 3 1 2 2. - 0 - -2.4035000242292881e-003 - 0.1700665950775147 - 0.5590974092483521 - <_> - - <_> - - - - <_>9 3 3 1 -1. - <_>10 3 1 1 3. - 0 - 1.5226360410451889e-003 - 0.5410556793212891 - 0.2619054019451141 - <_> - - <_> - - - - <_>1 1 4 14 -1. - <_>3 1 2 14 2. - 0 - 0.0179974399507046 - 0.3732436895370483 - 0.6535220742225647 - <_> - - <_> - - - - <_>9 0 4 4 -1. - <_>11 0 2 2 2. - <_>9 2 2 2 2. - 0 - -6.4538191072642803e-003 - 0.2626481950283051 - 0.5537446141242981 - <_> - - <_> - - - - <_>7 5 1 14 -1. - <_>7 12 1 7 2. - 0 - -0.0118807600811124 - 0.2003753930330277 - 0.5544745922088623 - <_> - - <_> - - - - <_>19 0 1 4 -1. - <_>19 2 1 2 2. - 0 - 1.2713660253211856e-003 - 0.5591902732849121 - 0.3031975924968720 - <_> - - <_> - - - - <_>5 5 6 4 -1. - <_>8 5 3 4 2. - 0 - 1.1376109905540943e-003 - 0.2730407118797302 - 0.5646508932113648 - <_> - - <_> - - - - <_>9 18 3 2 -1. - <_>10 18 1 2 3. - 0 - -4.2651998810470104e-003 - 0.1405909061431885 - 0.5461820960044861 - <_> - - <_> - - - - <_>8 18 3 2 -1. - <_>9 18 1 2 3. - 0 - -2.9602861031889915e-003 - 0.1795035004615784 - 0.5459290146827698 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 7 12 2 3. - 0 - -8.8448226451873779e-003 - 0.5736783146858215 - 0.2809219956398010 - <_> - - <_> - - - - <_>3 12 2 6 -1. - <_>3 14 2 2 3. - 0 - -6.6430689767003059e-003 - 0.2370675951242447 - 0.5503826141357422 - <_> - - <_> - - - - <_>10 8 2 12 -1. - <_>10 12 2 4 3. - 0 - 3.9997808635234833e-003 - 0.5608199834823608 - 0.3304282128810883 - <_> - - <_> - - - - <_>7 18 3 2 -1. - <_>8 18 1 2 3. - 0 - -4.1221720166504383e-003 - 0.1640105992555618 - 0.5378993153572083 - <_> - - <_> - - - - <_>9 0 6 2 -1. - <_>11 0 2 2 3. - 0 - 0.0156249096617103 - 0.5227649211883545 - 0.2288603931665421 - <_> - - <_> - - - - <_>5 11 9 3 -1. - <_>5 12 9 1 3. - 0 - -0.0103564197197557 - 0.7016193866729736 - 0.4252927899360657 - <_> - - <_> - - - - <_>9 0 6 2 -1. - <_>11 0 2 2 3. - 0 - -8.7960809469223022e-003 - 0.2767347097396851 - 0.5355830192565918 - <_> - - <_> - - - - <_>1 1 18 5 -1. - <_>7 1 6 5 3. - 0 - 0.1622693985700607 - 0.4342240095138550 - 0.7442579269409180 - <_> - - <_> - - - - <_>8 0 4 4 -1. - <_>10 0 2 2 2. - <_>8 2 2 2 2. - 0 - 4.5542530715465546e-003 - 0.5726485848426819 - 0.2582125067710877 - <_> - - <_> - - - - <_>3 12 1 3 -1. - <_>3 13 1 1 3. - 0 - -2.1309209987521172e-003 - 0.2106848061084747 - 0.5361018776893616 - <_> - - <_> - - - - <_>8 14 5 3 -1. - <_>8 15 5 1 3. - 0 - -0.0132084200158715 - 0.7593790888786316 - 0.4552468061447144 - <_> - - <_> - - - - <_>5 4 10 12 -1. - <_>5 4 5 6 2. - <_>10 10 5 6 2. - 0 - -0.0659966766834259 - 0.1252475976943970 - 0.5344039797782898 - <_> - - <_> - - - - <_>9 6 9 12 -1. - <_>9 10 9 4 3. - 0 - 7.9142656177282333e-003 - 0.3315384089946747 - 0.5601043105125427 - <_> - - <_> - - - - <_>2 2 12 14 -1. - <_>2 2 6 7 2. - <_>8 9 6 7 2. - 0 - 0.0208942797034979 - 0.5506049990653992 - 0.2768838107585907 - 15.3241395950317380 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 1.1961159761995077e-003 - 0.1762690991163254 - 0.6156241297721863 - <_> - - <_> - - - - <_>7 4 6 4 -1. - <_>7 6 6 2 2. - 0 - -1.8679830245673656e-003 - 0.6118106842041016 - 0.1832399964332581 - <_> - - <_> - - - - <_>4 5 11 8 -1. - <_>4 9 11 4 2. - 0 - -1.9579799845814705e-004 - 0.0990442633628845 - 0.5723816156387329 - <_> - - <_> - - - - <_>3 10 16 4 -1. - <_>3 12 16 2 2. - 0 - -8.0255657667294145e-004 - 0.5579879879951477 - 0.2377282977104187 - <_> - - <_> - - - - <_>0 0 16 2 -1. - <_>0 1 16 1 2. - 0 - -2.4510810617357492e-003 - 0.2231457978487015 - 0.5858935117721558 - <_> - - <_> - - - - <_>7 5 6 2 -1. - <_>9 5 2 2 3. - 0 - 5.0361850298941135e-004 - 0.2653993964195252 - 0.5794103741645813 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 4.0293349884450436e-003 - 0.5803827047348023 - 0.2484865039587021 - <_> - - <_> - - - - <_>10 5 8 15 -1. - <_>10 10 8 5 3. - 0 - -0.0144517095759511 - 0.1830351948738098 - 0.5484204888343811 - <_> - - <_> - - - - <_>3 14 8 6 -1. - <_>3 14 4 3 2. - <_>7 17 4 3 2. - 0 - 2.0380979403853416e-003 - 0.3363558948040009 - 0.6051092743873596 - <_> - - <_> - - - - <_>14 2 2 2 -1. - <_>14 3 2 1 2. - 0 - -1.6155190533027053e-003 - 0.2286642044782639 - 0.5441246032714844 - <_> - - <_> - - - - <_>1 10 7 6 -1. - <_>1 13 7 3 2. - 0 - 3.3458340913057327e-003 - 0.5625913143157959 - 0.2392338067293167 - <_> - - <_> - - - - <_>15 4 4 3 -1. - <_>15 4 2 3 2. - 0 - 1.6379579901695251e-003 - 0.3906993865966797 - 0.5964621901512146 - <_> - - <_> - - - - <_>2 9 14 6 -1. - <_>2 9 7 3 2. - <_>9 12 7 3 2. - 0 - 0.0302512105554342 - 0.5248482227325440 - 0.1575746983289719 - <_> - - <_> - - - - <_>5 7 10 4 -1. - <_>5 9 10 2 2. - 0 - 0.0372519902884960 - 0.4194310903549194 - 0.6748418807983398 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>6 9 4 4 2. - <_>10 13 4 4 2. - 0 - -0.0251097902655602 - 0.1882549971342087 - 0.5473451018333435 - <_> - - <_> - - - - <_>14 1 3 2 -1. - <_>14 2 3 1 2. - 0 - -5.3099058568477631e-003 - 0.1339973062276840 - 0.5227110981941223 - <_> - - <_> - - - - <_>1 4 4 2 -1. - <_>3 4 2 2 2. - 0 - 1.2086479691788554e-003 - 0.3762088119983673 - 0.6109635829925537 - <_> - - <_> - - - - <_>11 10 2 8 -1. - <_>11 14 2 4 2. - 0 - -0.0219076797366142 - 0.2663142979145050 - 0.5404006838798523 - <_> - - <_> - - - - <_>0 0 5 3 -1. - <_>0 1 5 1 3. - 0 - 5.4116579703986645e-003 - 0.5363578796386719 - 0.2232273072004318 - <_> - - <_> - - - - <_>2 5 18 8 -1. - <_>11 5 9 4 2. - <_>2 9 9 4 2. - 0 - 0.0699463263154030 - 0.5358232855796814 - 0.2453698068857193 - <_> - - <_> - - - - <_>6 6 1 6 -1. - <_>6 9 1 3 2. - 0 - 3.4520021290518343e-004 - 0.2409671992063522 - 0.5376930236816406 - <_> - - <_> - - - - <_>19 1 1 3 -1. - <_>19 2 1 1 3. - 0 - 1.2627709656953812e-003 - 0.5425856709480286 - 0.3155693113803864 - <_> - - <_> - - - - <_>7 6 6 6 -1. - <_>9 6 2 6 3. - 0 - 0.0227195098996162 - 0.4158405959606171 - 0.6597865223884583 - <_> - - <_> - - - - <_>19 1 1 3 -1. - <_>19 2 1 1 3. - 0 - -1.8111000536009669e-003 - 0.2811253070831299 - 0.5505244731903076 - <_> - - <_> - - - - <_>3 13 2 3 -1. - <_>3 14 2 1 3. - 0 - 3.3469670452177525e-003 - 0.5260028243064880 - 0.1891465038061142 - <_> - - <_> - - - - <_>8 4 8 12 -1. - <_>12 4 4 6 2. - <_>8 10 4 6 2. - 0 - 4.0791751234792173e-004 - 0.5673509240150452 - 0.3344210088253021 - <_> - - <_> - - - - <_>5 2 6 3 -1. - <_>7 2 2 3 3. - 0 - 0.0127347996458411 - 0.5343592166900635 - 0.2395612001419067 - <_> - - <_> - - - - <_>6 1 9 10 -1. - <_>6 6 9 5 2. - 0 - -7.3119727894663811e-003 - 0.6010890007019043 - 0.4022207856178284 - <_> - - <_> - - - - <_>0 4 6 12 -1. - <_>2 4 2 12 3. - 0 - -0.0569487512111664 - 0.8199151158332825 - 0.4543190896511078 - <_> - - <_> - - - - <_>15 13 2 3 -1. - <_>15 14 2 1 3. - 0 - -5.0116591155529022e-003 - 0.2200281023979187 - 0.5357710719108582 - <_> - - <_> - - - - <_>7 14 5 3 -1. - <_>7 15 5 1 3. - 0 - 6.0334368608891964e-003 - 0.4413081109523773 - 0.7181751132011414 - <_> - - <_> - - - - <_>15 13 3 3 -1. - <_>15 14 3 1 3. - 0 - 3.9437441155314445e-003 - 0.5478860735893250 - 0.2791733145713806 - <_> - - <_> - - - - <_>6 14 8 3 -1. - <_>6 15 8 1 3. - 0 - -3.6591119132936001e-003 - 0.6357867717742920 - 0.3989723920822144 - <_> - - <_> - - - - <_>15 13 3 3 -1. - <_>15 14 3 1 3. - 0 - -3.8456181064248085e-003 - 0.3493686020374298 - 0.5300664901733398 - <_> - - <_> - - - - <_>2 13 3 3 -1. - <_>2 14 3 1 3. - 0 - -7.1926261298358440e-003 - 0.1119614988565445 - 0.5229672789573669 - <_> - - <_> - - - - <_>4 7 12 12 -1. - <_>10 7 6 6 2. - <_>4 13 6 6 2. - 0 - -0.0527989417314529 - 0.2387102991342545 - 0.5453451275825501 - <_> - - <_> - - - - <_>9 7 2 6 -1. - <_>10 7 1 6 2. - 0 - -7.9537667334079742e-003 - 0.7586917877197266 - 0.4439376890659332 - <_> - - <_> - - - - <_>8 9 5 2 -1. - <_>8 10 5 1 2. - 0 - -2.7344180271029472e-003 - 0.2565476894378662 - 0.5489321947097778 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -1.8507939530536532e-003 - 0.6734347939491272 - 0.4252474904060364 - <_> - - <_> - - - - <_>9 6 2 8 -1. - <_>9 10 2 4 2. - 0 - 0.0159189198166132 - 0.5488352775573731 - 0.2292661964893341 - <_> - - <_> - - - - <_>7 7 3 6 -1. - <_>8 7 1 6 3. - 0 - -1.2687679845839739e-003 - 0.6104331016540527 - 0.4022389948368073 - <_> - - <_> - - - - <_>11 3 3 3 -1. - <_>12 3 1 3 3. - 0 - 6.2883910723030567e-003 - 0.5310853123664856 - 0.1536193042993546 - <_> - - <_> - - - - <_>5 4 6 1 -1. - <_>7 4 2 1 3. - 0 - -6.2259892001748085e-003 - 0.1729111969470978 - 0.5241606235504150 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 7 10 1 3. - 0 - -0.0121325999498367 - 0.6597759723663330 - 0.4325182139873505 - 21.0106391906738280 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>7 3 6 9 -1. - <_>7 6 6 3 3. - 0 - -3.9184908382594585e-003 - 0.6103435158729553 - 0.1469330936670303 - <_> - - <_> - - - - <_>6 7 9 1 -1. - <_>9 7 3 1 3. - 0 - 1.5971299726516008e-003 - 0.2632363140583038 - 0.5896466970443726 - <_> - - <_> - - - - <_>2 8 16 8 -1. - <_>2 12 16 4 2. - 0 - 0.0177801102399826 - 0.5872874259948731 - 0.1760361939668655 - <_> - - <_> - - - - <_>14 6 2 6 -1. - <_>14 9 2 3 2. - 0 - 6.5334769897162914e-004 - 0.1567801982164383 - 0.5596066117286682 - <_> - - <_> - - - - <_>1 5 6 15 -1. - <_>1 10 6 5 3. - 0 - -2.8353091329336166e-004 - 0.1913153976202011 - 0.5732036232948303 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>10 3 6 3 3. - 0 - 1.6104689566418529e-003 - 0.2914913892745972 - 0.5623080730438232 - <_> - - <_> - - - - <_>6 6 7 14 -1. - <_>6 13 7 7 2. - 0 - -0.0977506190538406 - 0.1943476945161820 - 0.5648233294487000 - <_> - - <_> - - - - <_>13 7 3 6 -1. - <_>13 9 3 2 3. - 0 - 5.5182358482852578e-004 - 0.3134616911411285 - 0.5504639744758606 - <_> - - <_> - - - - <_>1 8 15 4 -1. - <_>6 8 5 4 3. - 0 - -0.0128582203760743 - 0.2536481916904450 - 0.5760142803192139 - <_> - - <_> - - - - <_>11 2 3 10 -1. - <_>11 7 3 5 2. - 0 - 4.1530239395797253e-003 - 0.5767722129821777 - 0.3659774065017700 - <_> - - <_> - - - - <_>3 7 4 6 -1. - <_>3 9 4 2 3. - 0 - 1.7092459602281451e-003 - 0.2843191027641296 - 0.5918939113616943 - <_> - - <_> - - - - <_>13 3 6 10 -1. - <_>15 3 2 10 3. - 0 - 7.5217359699308872e-003 - 0.4052427113056183 - 0.6183109283447266 - <_> - - <_> - - - - <_>5 7 8 10 -1. - <_>5 7 4 5 2. - <_>9 12 4 5 2. - 0 - 2.2479810286313295e-003 - 0.5783755183219910 - 0.3135401010513306 - <_> - - <_> - - - - <_>4 4 12 12 -1. - <_>10 4 6 6 2. - <_>4 10 6 6 2. - 0 - 0.0520062111318111 - 0.5541312098503113 - 0.1916636973619461 - <_> - - <_> - - - - <_>1 4 6 9 -1. - <_>3 4 2 9 3. - 0 - 0.0120855299755931 - 0.4032655954360962 - 0.6644591093063355 - <_> - - <_> - - - - <_>11 3 2 5 -1. - <_>11 3 1 5 2. - 0 - 1.4687820112158079e-005 - 0.3535977900028229 - 0.5709382891654968 - <_> - - <_> - - - - <_>7 3 2 5 -1. - <_>8 3 1 5 2. - 0 - 7.1395188570022583e-006 - 0.3037444949150085 - 0.5610269904136658 - <_> - - <_> - - - - <_>10 14 2 3 -1. - <_>10 15 2 1 3. - 0 - -4.6001640148460865e-003 - 0.7181087136268616 - 0.4580326080322266 - <_> - - <_> - - - - <_>5 12 6 2 -1. - <_>8 12 3 2 2. - 0 - 2.0058949012309313e-003 - 0.5621951818466187 - 0.2953684031963348 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 4.5050270855426788e-003 - 0.4615387916564941 - 0.7619017958641052 - <_> - - <_> - - - - <_>4 11 12 6 -1. - <_>4 14 12 3 2. - 0 - 0.0117468303069472 - 0.5343837141990662 - 0.1772529035806656 - <_> - - <_> - - - - <_>11 11 5 9 -1. - <_>11 14 5 3 3. - 0 - -0.0583163388073444 - 0.1686245948076248 - 0.5340772271156311 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>6 16 3 1 2. - 0 - 2.3629379575140774e-004 - 0.3792056143283844 - 0.6026803851127625 - <_> - - <_> - - - - <_>11 0 3 5 -1. - <_>12 0 1 5 3. - 0 - -7.8156180679798126e-003 - 0.1512867063283920 - 0.5324323773384094 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>8 5 3 7 2. - 0 - -0.0108761601150036 - 0.2081822007894516 - 0.5319945216178894 - <_> - - <_> - - - - <_>13 0 1 9 -1. - <_>13 3 1 3 3. - 0 - -2.7745519764721394e-003 - 0.4098246991634369 - 0.5210328102111816 - <_> - - <_> - - - - <_>3 2 4 8 -1. - <_>3 2 2 4 2. - <_>5 6 2 4 2. - 0 - -7.8276381827890873e-004 - 0.5693274140357971 - 0.3478842079639435 - <_> - - <_> - - - - <_>13 12 4 6 -1. - <_>13 14 4 2 3. - 0 - 0.0138704096898437 - 0.5326750874519348 - 0.2257698029279709 - <_> - - <_> - - - - <_>3 12 4 6 -1. - <_>3 14 4 2 3. - 0 - -0.0236749108880758 - 0.1551305055618286 - 0.5200707912445068 - <_> - - <_> - - - - <_>13 11 3 4 -1. - <_>13 13 3 2 2. - 0 - -1.4879409718560055e-005 - 0.5500566959381104 - 0.3820176124572754 - <_> - - <_> - - - - <_>4 4 4 3 -1. - <_>4 5 4 1 3. - 0 - 3.6190641112625599e-003 - 0.4238683879375458 - 0.6639748215675354 - <_> - - <_> - - - - <_>7 5 11 8 -1. - <_>7 9 11 4 2. - 0 - -0.0198171101510525 - 0.2150038033723831 - 0.5382357835769653 - <_> - - <_> - - - - <_>7 8 3 4 -1. - <_>8 8 1 4 3. - 0 - -3.8154039066284895e-003 - 0.6675711274147034 - 0.4215297102928162 - <_> - - <_> - - - - <_>9 1 6 1 -1. - <_>11 1 2 1 3. - 0 - -4.9775829538702965e-003 - 0.2267289012670517 - 0.5386328101158142 - <_> - - <_> - - - - <_>5 5 3 3 -1. - <_>5 6 3 1 3. - 0 - 2.2441020701080561e-003 - 0.4308691024780273 - 0.6855735778808594 - <_> - - <_> - - - - <_>0 9 20 6 -1. - <_>10 9 10 3 2. - <_>0 12 10 3 2. - 0 - 0.0122824599966407 - 0.5836614966392517 - 0.3467479050159454 - <_> - - <_> - - - - <_>8 6 3 5 -1. - <_>9 6 1 5 3. - 0 - -2.8548699337989092e-003 - 0.7016944885253906 - 0.4311453998088837 - <_> - - <_> - - - - <_>11 0 1 3 -1. - <_>11 1 1 1 3. - 0 - -3.7875669077038765e-003 - 0.2895345091819763 - 0.5224946141242981 - <_> - - <_> - - - - <_>4 2 4 2 -1. - <_>4 3 4 1 2. - 0 - -1.2201230274513364e-003 - 0.2975570857524872 - 0.5481644868850708 - <_> - - <_> - - - - <_>12 6 4 3 -1. - <_>12 7 4 1 3. - 0 - 0.0101605998352170 - 0.4888817965984345 - 0.8182697892189026 - <_> - - <_> - - - - <_>5 0 6 4 -1. - <_>7 0 2 4 3. - 0 - -0.0161745697259903 - 0.1481492966413498 - 0.5239992737770081 - <_> - - <_> - - - - <_>9 7 3 8 -1. - <_>10 7 1 8 3. - 0 - 0.0192924607545137 - 0.4786309897899628 - 0.7378190755844116 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - -3.2479539513587952e-003 - 0.7374222874641419 - 0.4470643997192383 - <_> - - <_> - - - - <_>6 7 14 4 -1. - <_>13 7 7 2 2. - <_>6 9 7 2 2. - 0 - -9.3803480267524719e-003 - 0.3489154875278473 - 0.5537996292114258 - <_> - - <_> - - - - <_>0 5 3 6 -1. - <_>0 7 3 2 3. - 0 - -0.0126061299815774 - 0.2379686981439591 - 0.5315443277359009 - <_> - - <_> - - - - <_>13 11 3 4 -1. - <_>13 13 3 2 2. - 0 - -0.0256219301372766 - 0.1964688003063202 - 0.5138769745826721 - <_> - - <_> - - - - <_>4 11 3 4 -1. - <_>4 13 3 2 2. - 0 - -7.5741496402770281e-005 - 0.5590522885322571 - 0.3365853130817413 - <_> - - <_> - - - - <_>5 9 12 8 -1. - <_>11 9 6 4 2. - <_>5 13 6 4 2. - 0 - -0.0892108827829361 - 0.0634046569466591 - 0.5162634849548340 - <_> - - <_> - - - - <_>9 12 1 3 -1. - <_>9 13 1 1 3. - 0 - -2.7670480776578188e-003 - 0.7323467731475830 - 0.4490706026554108 - <_> - - <_> - - - - <_>10 15 2 4 -1. - <_>10 17 2 2 2. - 0 - 2.7152578695677221e-004 - 0.4114834964275360 - 0.5985518097877502 - 23.9187908172607420 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>7 7 6 1 -1. - <_>9 7 2 1 3. - 0 - 1.4786219689995050e-003 - 0.2663545012474060 - 0.6643316745758057 - <_> - - <_> - - - - <_>12 3 6 6 -1. - <_>15 3 3 3 2. - <_>12 6 3 3 2. - 0 - -1.8741659587249160e-003 - 0.6143848896026611 - 0.2518512904644013 - <_> - - <_> - - - - <_>0 4 10 6 -1. - <_>0 6 10 2 3. - 0 - -1.7151009524241090e-003 - 0.5766341090202332 - 0.2397463023662567 - <_> - - <_> - - - - <_>8 3 8 14 -1. - <_>12 3 4 7 2. - <_>8 10 4 7 2. - 0 - -1.8939269939437509e-003 - 0.5682045817375183 - 0.2529144883155823 - <_> - - <_> - - - - <_>4 4 7 15 -1. - <_>4 9 7 5 3. - 0 - -5.3006052039563656e-003 - 0.1640675961971283 - 0.5556079745292664 - <_> - - <_> - - - - <_>12 2 6 8 -1. - <_>15 2 3 4 2. - <_>12 6 3 4 2. - 0 - -0.0466625317931175 - 0.6123154163360596 - 0.4762830138206482 - <_> - - <_> - - - - <_>2 2 6 8 -1. - <_>2 2 3 4 2. - <_>5 6 3 4 2. - 0 - -7.9431332414969802e-004 - 0.5707858800888062 - 0.2839404046535492 - <_> - - <_> - - - - <_>2 13 18 7 -1. - <_>8 13 6 7 3. - 0 - 0.0148916700854898 - 0.4089672863483429 - 0.6006367206573486 - <_> - - <_> - - - - <_>4 3 8 14 -1. - <_>4 3 4 7 2. - <_>8 10 4 7 2. - 0 - -1.2046529445797205e-003 - 0.5712450742721558 - 0.2705289125442505 - <_> - - <_> - - - - <_>18 1 2 6 -1. - <_>18 3 2 2 3. - 0 - 6.0619381256401539e-003 - 0.5262504220008850 - 0.3262225985527039 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -2.5286648888140917e-003 - 0.6853830814361572 - 0.4199256896972656 - <_> - - <_> - - - - <_>18 1 2 6 -1. - <_>18 3 2 2 3. - 0 - -5.9010218828916550e-003 - 0.3266282081604004 - 0.5434812903404236 - <_> - - <_> - - - - <_>0 1 2 6 -1. - <_>0 3 2 2 3. - 0 - 5.6702760048210621e-003 - 0.5468410849571228 - 0.2319003939628601 - <_> - - <_> - - - - <_>1 5 18 6 -1. - <_>1 7 18 2 3. - 0 - -3.0304100364446640e-003 - 0.5570667982101440 - 0.2708238065242767 - <_> - - <_> - - - - <_>0 2 6 7 -1. - <_>3 2 3 7 2. - 0 - 2.9803649522364140e-003 - 0.3700568974018097 - 0.5890625715255737 - <_> - - <_> - - - - <_>7 3 6 14 -1. - <_>7 10 6 7 2. - 0 - -0.0758405104279518 - 0.2140070050954819 - 0.5419948101043701 - <_> - - <_> - - - - <_>3 7 13 10 -1. - <_>3 12 13 5 2. - 0 - 0.0192625392228365 - 0.5526772141456604 - 0.2726590037345886 - <_> - - <_> - - - - <_>11 15 2 2 -1. - <_>11 16 2 1 2. - 0 - 1.8888259364757687e-004 - 0.3958011865615845 - 0.6017209887504578 - <_> - - <_> - - - - <_>2 11 16 4 -1. - <_>2 11 8 2 2. - <_>10 13 8 2 2. - 0 - 0.0293695498257875 - 0.5241373777389526 - 0.1435758024454117 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 1.0417619487270713e-003 - 0.3385409116744995 - 0.5929983258247376 - <_> - - <_> - - - - <_>6 10 3 9 -1. - <_>6 13 3 3 3. - 0 - 2.6125640142709017e-003 - 0.5485377907752991 - 0.3021597862243652 - <_> - - <_> - - - - <_>14 6 1 6 -1. - <_>14 9 1 3 2. - 0 - 9.6977467183023691e-004 - 0.3375276029109955 - 0.5532032847404480 - <_> - - <_> - - - - <_>5 10 4 1 -1. - <_>7 10 2 1 2. - 0 - 5.9512659208849072e-004 - 0.5631743073463440 - 0.3359399139881134 - <_> - - <_> - - - - <_>3 8 15 5 -1. - <_>8 8 5 5 3. - 0 - -0.1015655994415283 - 0.0637350380420685 - 0.5230425000190735 - <_> - - <_> - - - - <_>1 6 5 4 -1. - <_>1 8 5 2 2. - 0 - 0.0361566990613937 - 0.5136963129043579 - 0.1029528975486755 - <_> - - <_> - - - - <_>3 1 17 6 -1. - <_>3 3 17 2 3. - 0 - 3.4624140243977308e-003 - 0.3879320025444031 - 0.5558289289474487 - <_> - - <_> - - - - <_>6 7 8 2 -1. - <_>10 7 4 2 2. - 0 - 0.0195549800992012 - 0.5250086784362793 - 0.1875859946012497 - <_> - - <_> - - - - <_>9 7 3 2 -1. - <_>10 7 1 2 3. - 0 - -2.3121440317481756e-003 - 0.6672028899192810 - 0.4679641127586365 - <_> - - <_> - - - - <_>8 7 3 2 -1. - <_>9 7 1 2 3. - 0 - -1.8605289515107870e-003 - 0.7163379192352295 - 0.4334670901298523 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>8 10 4 1 2. - 0 - -9.4026362057775259e-004 - 0.3021360933780670 - 0.5650203227996826 - <_> - - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -5.2418331615626812e-003 - 0.1820009052753449 - 0.5250256061553955 - <_> - - <_> - - - - <_>9 5 6 4 -1. - <_>9 5 3 4 2. - 0 - 1.1729019752237946e-004 - 0.3389188051223755 - 0.5445973277091980 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 1.1878840159624815e-003 - 0.4085349142551422 - 0.6253563165664673 - <_> - - <_> - - - - <_>4 7 12 6 -1. - <_>10 7 6 3 2. - <_>4 10 6 3 2. - 0 - -0.0108813596889377 - 0.3378399014472961 - 0.5700082778930664 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 1.7354859737679362e-003 - 0.4204635918140411 - 0.6523038744926453 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>9 8 3 1 3. - 0 - -6.5119052305817604e-003 - 0.2595216035842896 - 0.5428143739700317 - <_> - - <_> - - - - <_>7 4 3 8 -1. - <_>8 4 1 8 3. - 0 - -1.2136430013924837e-003 - 0.6165143847465515 - 0.3977893888950348 - <_> - - <_> - - - - <_>10 0 3 6 -1. - <_>11 0 1 6 3. - 0 - -0.0103542404249310 - 0.1628028005361557 - 0.5219504833221436 - <_> - - <_> - - - - <_>6 3 4 8 -1. - <_>8 3 2 8 2. - 0 - 5.5858830455690622e-004 - 0.3199650943279266 - 0.5503574013710022 - <_> - - <_> - - - - <_>14 3 6 13 -1. - <_>14 3 3 13 2. - 0 - 0.0152996499091387 - 0.4103994071483612 - 0.6122388243675232 - <_> - - <_> - - - - <_>8 13 3 6 -1. - <_>8 16 3 3 2. - 0 - -0.0215882100164890 - 0.1034912988543510 - 0.5197384953498840 - <_> - - <_> - - - - <_>14 3 6 13 -1. - <_>14 3 3 13 2. - 0 - -0.1283462941646576 - 0.8493865132331848 - 0.4893102943897247 - <_> - - <_> - - - - <_>0 7 10 4 -1. - <_>0 7 5 2 2. - <_>5 9 5 2 2. - 0 - -2.2927189711481333e-003 - 0.3130157887935638 - 0.5471575260162354 - <_> - - <_> - - - - <_>14 3 6 13 -1. - <_>14 3 3 13 2. - 0 - 0.0799151062965393 - 0.4856320917606354 - 0.6073989272117615 - <_> - - <_> - - - - <_>0 3 6 13 -1. - <_>3 3 3 13 2. - 0 - -0.0794410929083824 - 0.8394674062728882 - 0.4624533057212830 - <_> - - <_> - - - - <_>9 1 4 1 -1. - <_>9 1 2 1 2. - 0 - -5.2800010889768600e-003 - 0.1881695985794067 - 0.5306698083877564 - <_> - - <_> - - - - <_>8 0 2 1 -1. - <_>9 0 1 1 2. - 0 - 1.0463109938427806e-003 - 0.5271229147911072 - 0.2583065927028656 - <_> - - <_> - - - - <_>10 16 4 4 -1. - <_>12 16 2 2 2. - <_>10 18 2 2 2. - 0 - 2.6317298761568964e-004 - 0.4235304892063141 - 0.5735440850257874 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>10 6 1 3 2. - 0 - -3.6173160187900066e-003 - 0.6934396028518677 - 0.4495444893836975 - <_> - - <_> - - - - <_>4 5 12 2 -1. - <_>8 5 4 2 3. - 0 - 0.0114218797534704 - 0.5900921225547791 - 0.4138193130493164 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -1.9963278900831938e-003 - 0.6466382741928101 - 0.4327239990234375 - 24.5278797149658200 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>6 4 8 6 -1. - <_>6 6 8 2 3. - 0 - -9.9691245704889297e-003 - 0.6142324209213257 - 0.2482212036848068 - <_> - - <_> - - - - <_>9 5 2 12 -1. - <_>9 11 2 6 2. - 0 - 7.3073059320449829e-004 - 0.5704951882362366 - 0.2321965992450714 - <_> - - <_> - - - - <_>4 6 6 8 -1. - <_>4 10 6 4 2. - 0 - 6.4045301405712962e-004 - 0.2112251967191696 - 0.5814933180809021 - <_> - - <_> - - - - <_>12 2 8 5 -1. - <_>12 2 4 5 2. - 0 - 4.5424019917845726e-003 - 0.2950482070446014 - 0.5866311788558960 - <_> - - <_> - - - - <_>0 8 18 3 -1. - <_>0 9 18 1 3. - 0 - 9.2477443104144186e-005 - 0.2990990877151489 - 0.5791326761245728 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -8.6603146046400070e-003 - 0.2813029885292053 - 0.5635542273521423 - <_> - - <_> - - - - <_>0 2 8 5 -1. - <_>4 2 4 5 2. - 0 - 8.0515816807746887e-003 - 0.3535369038581848 - 0.6054757237434387 - <_> - - <_> - - - - <_>13 11 3 4 -1. - <_>13 13 3 2 2. - 0 - 4.3835240649059415e-004 - 0.5596532225608826 - 0.2731510996818543 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -9.8168973636347800e-005 - 0.5978031754493713 - 0.3638561069965363 - <_> - - <_> - - - - <_>11 3 3 1 -1. - <_>12 3 1 1 3. - 0 - -1.1298790341243148e-003 - 0.2755252122879028 - 0.5432729125022888 - <_> - - <_> - - - - <_>7 13 5 3 -1. - <_>7 14 5 1 3. - 0 - 6.4356150105595589e-003 - 0.4305641949176788 - 0.7069833278656006 - <_> - - <_> - - - - <_>11 11 7 6 -1. - <_>11 14 7 3 2. - 0 - -0.0568293295800686 - 0.2495242953300476 - 0.5294997096061707 - <_> - - <_> - - - - <_>2 11 7 6 -1. - <_>2 14 7 3 2. - 0 - 4.0668169967830181e-003 - 0.5478553175926209 - 0.2497723996639252 - <_> - - <_> - - - - <_>12 14 2 6 -1. - <_>12 16 2 2 3. - 0 - 4.8164798499783501e-005 - 0.3938601016998291 - 0.5706356167793274 - <_> - - <_> - - - - <_>8 14 3 3 -1. - <_>8 15 3 1 3. - 0 - 6.1795017682015896e-003 - 0.4407606124877930 - 0.7394766807556152 - <_> - - <_> - - - - <_>11 0 3 5 -1. - <_>12 0 1 5 3. - 0 - 6.4985752105712891e-003 - 0.5445243120193481 - 0.2479152977466583 - <_> - - <_> - - - - <_>6 1 4 9 -1. - <_>8 1 2 9 2. - 0 - -1.0211090557277203e-003 - 0.2544766962528229 - 0.5338971018791199 - <_> - - <_> - - - - <_>10 3 6 1 -1. - <_>12 3 2 1 3. - 0 - -5.4247528314590454e-003 - 0.2718858122825623 - 0.5324069261550903 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>8 10 3 2 2. - 0 - -1.0559899965301156e-003 - 0.3178288042545319 - 0.5534508824348450 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 6.6465808777138591e-004 - 0.4284219145774841 - 0.6558194160461426 - <_> - - <_> - - - - <_>5 18 4 2 -1. - <_>5 19 4 1 2. - 0 - -2.7524109464138746e-004 - 0.5902860760688782 - 0.3810262978076935 - <_> - - <_> - - - - <_>2 1 18 6 -1. - <_>2 3 18 2 3. - 0 - 4.2293202131986618e-003 - 0.3816489875316620 - 0.5709385871887207 - <_> - - <_> - - - - <_>6 0 3 2 -1. - <_>7 0 1 2 3. - 0 - -3.2868210691958666e-003 - 0.1747743934392929 - 0.5259544253349304 - <_> - - <_> - - - - <_>13 8 6 2 -1. - <_>16 8 3 1 2. - <_>13 9 3 1 2. - 0 - 1.5611879643984139e-004 - 0.3601722121238709 - 0.5725612044334412 - <_> - - <_> - - - - <_>6 10 3 6 -1. - <_>6 13 3 3 2. - 0 - -7.3621381488919724e-006 - 0.5401858091354370 - 0.3044497072696686 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>10 13 10 2 2. - <_>0 15 10 2 2. - 0 - -0.0147672500461340 - 0.3220770061016083 - 0.5573434829711914 - <_> - - <_> - - - - <_>7 7 6 5 -1. - <_>9 7 2 5 3. - 0 - 0.0244895908981562 - 0.4301528036594391 - 0.6518812775611877 - <_> - - <_> - - - - <_>11 0 2 2 -1. - <_>11 1 2 1 2. - 0 - -3.7652091123163700e-004 - 0.3564583063125610 - 0.5598236918449402 - <_> - - <_> - - - - <_>1 8 6 2 -1. - <_>1 8 3 1 2. - <_>4 9 3 1 2. - 0 - 7.3657688517414499e-006 - 0.3490782976150513 - 0.5561897754669190 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>10 2 10 1 2. - <_>0 3 10 1 2. - 0 - -0.0150999398902059 - 0.1776272058486939 - 0.5335299968719482 - <_> - - <_> - - - - <_>7 14 5 3 -1. - <_>7 15 5 1 3. - 0 - -3.8316650316119194e-003 - 0.6149687767028809 - 0.4221394062042236 - <_> - - <_> - - - - <_>7 13 6 6 -1. - <_>10 13 3 3 2. - <_>7 16 3 3 2. - 0 - 0.0169254001230001 - 0.5413014888763428 - 0.2166585028171539 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -3.0477850232273340e-003 - 0.6449490785598755 - 0.4354617893695831 - <_> - - <_> - - - - <_>16 11 1 6 -1. - <_>16 13 1 2 3. - 0 - 3.2140589319169521e-003 - 0.5400155186653137 - 0.3523217141628265 - <_> - - <_> - - - - <_>3 11 1 6 -1. - <_>3 13 1 2 3. - 0 - -4.0023201145231724e-003 - 0.2774524092674255 - 0.5338417291641235 - <_> - - <_> - - - - <_>4 4 14 12 -1. - <_>11 4 7 6 2. - <_>4 10 7 6 2. - 0 - 7.4182129465043545e-003 - 0.5676739215850830 - 0.3702817857265472 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -8.8764587417244911e-003 - 0.7749221920967102 - 0.4583688974380493 - <_> - - <_> - - - - <_>12 3 3 3 -1. - <_>13 3 1 3 3. - 0 - 2.7311739977449179e-003 - 0.5338721871376038 - 0.3996661007404327 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 7 8 1 3. - 0 - -2.5082379579544067e-003 - 0.5611963272094727 - 0.3777498900890350 - <_> - - <_> - - - - <_>12 3 3 3 -1. - <_>13 3 1 3 3. - 0 - -8.0541074275970459e-003 - 0.2915228903293610 - 0.5179182887077332 - <_> - - <_> - - - - <_>3 1 4 10 -1. - <_>3 1 2 5 2. - <_>5 6 2 5 2. - 0 - -9.7938813269138336e-004 - 0.5536432862281799 - 0.3700192868709564 - <_> - - <_> - - - - <_>5 7 10 2 -1. - <_>5 7 5 2 2. - 0 - -5.8745909482240677e-003 - 0.3754391074180603 - 0.5679376125335693 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -4.4936719350516796e-003 - 0.7019699215888977 - 0.4480949938297272 - <_> - - <_> - - - - <_>15 12 2 3 -1. - <_>15 13 2 1 3. - 0 - -5.4389229044318199e-003 - 0.2310364991426468 - 0.5313386917114258 - <_> - - <_> - - - - <_>7 8 3 4 -1. - <_>8 8 1 4 3. - 0 - -7.5094640487805009e-004 - 0.5864868760108948 - 0.4129343032836914 - <_> - - <_> - - - - <_>13 4 1 12 -1. - <_>13 10 1 6 2. - 0 - 1.4528800420521293e-005 - 0.3732407093048096 - 0.5619621276855469 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>4 5 6 6 2. - <_>10 11 6 6 2. - 0 - 0.0407580696046352 - 0.5312091112136841 - 0.2720521986484528 - <_> - - <_> - - - - <_>7 14 7 3 -1. - <_>7 15 7 1 3. - 0 - 6.6505931317806244e-003 - 0.4710015952587128 - 0.6693493723869324 - <_> - - <_> - - - - <_>3 12 2 3 -1. - <_>3 13 2 1 3. - 0 - 4.5759351924061775e-003 - 0.5167819261550903 - 0.1637275964021683 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>10 2 7 1 2. - <_>3 3 7 1 2. - 0 - 6.5269311890006065e-003 - 0.5397608876228333 - 0.2938531935214996 - <_> - - <_> - - - - <_>0 1 3 10 -1. - <_>1 1 1 10 3. - 0 - -0.0136603796854615 - 0.7086488008499146 - 0.4532200098037720 - <_> - - <_> - - - - <_>9 0 6 5 -1. - <_>11 0 2 5 3. - 0 - 0.0273588690906763 - 0.5206481218338013 - 0.3589231967926025 - <_> - - <_> - - - - <_>5 7 6 2 -1. - <_>8 7 3 2 2. - 0 - 6.2197551596909761e-004 - 0.3507075905799866 - 0.5441123247146606 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>7 6 6 5 2. - 0 - -3.3077080734074116e-003 - 0.5859522819519043 - 0.4024891853332520 - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>7 1 6 3 3. - 0 - -0.0106311095878482 - 0.6743267178535461 - 0.4422602951526642 - <_> - - <_> - - - - <_>16 3 3 6 -1. - <_>16 5 3 2 3. - 0 - 0.0194416493177414 - 0.5282716155052185 - 0.1797904968261719 - 27.1533508300781250 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>6 3 7 6 -1. - <_>6 6 7 3 2. - 0 - -5.5052167735993862e-003 - 0.5914731025695801 - 0.2626559138298035 - <_> - - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 1.9562279339879751e-003 - 0.2312581986188889 - 0.5741627216339111 - <_> - - <_> - - - - <_>0 4 17 10 -1. - <_>0 9 17 5 2. - 0 - -8.8924784213304520e-003 - 0.1656530052423477 - 0.5626654028892517 - <_> - - <_> - - - - <_>3 4 15 16 -1. - <_>3 12 15 8 2. - 0 - 0.0836383774876595 - 0.5423449873924255 - 0.1957294940948486 - <_> - - <_> - - - - <_>7 15 6 4 -1. - <_>7 17 6 2 2. - 0 - 1.2282270472496748e-003 - 0.3417904078960419 - 0.5992503762245178 - <_> - - <_> - - - - <_>15 2 4 9 -1. - <_>15 2 2 9 2. - 0 - 5.7629169896245003e-003 - 0.3719581961631775 - 0.6079903841018677 - <_> - - <_> - - - - <_>2 3 3 2 -1. - <_>2 4 3 1 2. - 0 - -1.6417410224676132e-003 - 0.2577486038208008 - 0.5576915740966797 - <_> - - <_> - - - - <_>13 6 7 9 -1. - <_>13 9 7 3 3. - 0 - 3.4113149158656597e-003 - 0.2950749099254608 - 0.5514171719551086 - <_> - - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - -0.0110693201422691 - 0.7569358944892883 - 0.4477078914642334 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>10 2 10 3 2. - <_>0 5 10 3 2. - 0 - 0.0348659716546535 - 0.5583708882331848 - 0.2669621109962463 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 6.5701099811121821e-004 - 0.5627313256263733 - 0.2988890111446381 - <_> - - <_> - - - - <_>13 10 3 4 -1. - <_>13 12 3 2 2. - 0 - -0.0243391301482916 - 0.2771185040473938 - 0.5108863115310669 - <_> - - <_> - - - - <_>4 10 3 4 -1. - <_>4 12 3 2 2. - 0 - 5.9435202274471521e-004 - 0.5580651760101318 - 0.3120341897010803 - <_> - - <_> - - - - <_>7 5 6 3 -1. - <_>9 5 2 3 3. - 0 - 2.2971509024500847e-003 - 0.3330250084400177 - 0.5679075717926025 - <_> - - <_> - - - - <_>7 6 6 8 -1. - <_>7 10 6 4 2. - 0 - -3.7801829166710377e-003 - 0.2990534901618958 - 0.5344808101654053 - <_> - - <_> - - - - <_>0 11 20 6 -1. - <_>0 14 20 3 2. - 0 - -0.1342066973447800 - 0.1463858932256699 - 0.5392568111419678 - <_> - - <_> - - - - <_>4 13 4 6 -1. - <_>4 13 2 3 2. - <_>6 16 2 3 2. - 0 - 7.5224548345431685e-004 - 0.3746953904628754 - 0.5692734718322754 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>10 0 4 6 2. - <_>6 6 4 6 2. - 0 - -0.0405455417931080 - 0.2754747867584229 - 0.5484297871589661 - <_> - - <_> - - - - <_>2 0 15 2 -1. - <_>2 1 15 1 2. - 0 - 1.2572970008477569e-003 - 0.3744584023952484 - 0.5756075978279114 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -7.4249948374927044e-003 - 0.7513859272003174 - 0.4728231132030487 - <_> - - <_> - - - - <_>3 12 1 2 -1. - <_>3 13 1 1 2. - 0 - 5.0908129196614027e-004 - 0.5404896736145020 - 0.2932321131229401 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -1.2808450264856219e-003 - 0.6169779896736145 - 0.4273349046707153 - <_> - - <_> - - - - <_>7 3 3 1 -1. - <_>8 3 1 1 3. - 0 - -1.8348860321566463e-003 - 0.2048496007919312 - 0.5206472277641296 - <_> - - <_> - - - - <_>17 7 3 6 -1. - <_>17 9 3 2 3. - 0 - 0.0274848695844412 - 0.5252984762191773 - 0.1675522029399872 - <_> - - <_> - - - - <_>7 2 3 2 -1. - <_>8 2 1 2 3. - 0 - 2.2372419480234385e-003 - 0.5267782807350159 - 0.2777658104896545 - <_> - - <_> - - - - <_>11 4 5 3 -1. - <_>11 5 5 1 3. - 0 - -8.8635291904211044e-003 - 0.6954557895660400 - 0.4812048971652985 - <_> - - <_> - - - - <_>4 4 5 3 -1. - <_>4 5 5 1 3. - 0 - 4.1753971017897129e-003 - 0.4291887879371643 - 0.6349195837974548 - <_> - - <_> - - - - <_>19 3 1 2 -1. - <_>19 4 1 1 2. - 0 - -1.7098189564421773e-003 - 0.2930536866188049 - 0.5361248850822449 - <_> - - <_> - - - - <_>5 5 4 3 -1. - <_>5 6 4 1 3. - 0 - 6.5328548662364483e-003 - 0.4495325088500977 - 0.7409694194793701 - <_> - - <_> - - - - <_>17 7 3 6 -1. - <_>17 9 3 2 3. - 0 - -9.5372907817363739e-003 - 0.3149119913578033 - 0.5416501760482788 - <_> - - <_> - - - - <_>0 7 3 6 -1. - <_>0 9 3 2 3. - 0 - 0.0253109894692898 - 0.5121892094612122 - 0.1311707943677902 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 0.0364609695971012 - 0.5175911784172058 - 0.2591339945793152 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 6 5 2 3. - 0 - 0.0208543296903372 - 0.5137140154838562 - 0.1582316011190414 - <_> - - <_> - - - - <_>10 5 6 2 -1. - <_>12 5 2 2 3. - 0 - -8.7207747856155038e-004 - 0.5574309825897217 - 0.4398978948593140 - <_> - - <_> - - - - <_>4 5 6 2 -1. - <_>6 5 2 2 3. - 0 - -1.5227000403683633e-005 - 0.5548940896987915 - 0.3708069920539856 - <_> - - <_> - - - - <_>8 1 4 6 -1. - <_>8 3 4 2 3. - 0 - -8.4316509310156107e-004 - 0.3387419879436493 - 0.5554211139678955 - <_> - - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 3.6037859972566366e-003 - 0.5358061790466309 - 0.3411171138286591 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 7 8 1 3. - 0 - -6.8057891912758350e-003 - 0.6125202775001526 - 0.4345862865447998 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0470216609537601 - 0.2358165979385376 - 0.5193738937377930 - <_> - - <_> - - - - <_>16 0 4 15 -1. - <_>16 0 2 15 2. - 0 - -0.0369541086256504 - 0.7323111295700073 - 0.4760943949222565 - <_> - - <_> - - - - <_>1 10 3 2 -1. - <_>1 11 3 1 2. - 0 - 1.0439479956403375e-003 - 0.5419455170631409 - 0.3411330878734589 - <_> - - <_> - - - - <_>14 4 1 10 -1. - <_>14 9 1 5 2. - 0 - -2.1050689974799752e-004 - 0.2821694016456604 - 0.5554947257041931 - <_> - - <_> - - - - <_>0 1 4 12 -1. - <_>2 1 2 12 2. - 0 - -0.0808315873146057 - 0.9129930138587952 - 0.4697434902191162 - <_> - - <_> - - - - <_>11 11 4 2 -1. - <_>11 11 2 2 2. - 0 - -3.6579059087671340e-004 - 0.6022670269012451 - 0.3978292942047119 - <_> - - <_> - - - - <_>5 11 4 2 -1. - <_>7 11 2 2 2. - 0 - -1.2545920617412776e-004 - 0.5613213181495667 - 0.3845539987087250 - <_> - - <_> - - - - <_>3 8 15 5 -1. - <_>8 8 5 5 3. - 0 - -0.0687864869832993 - 0.2261611968278885 - 0.5300496816635132 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>3 0 3 10 2. - 0 - 0.0124157899990678 - 0.4075691998004913 - 0.5828812122344971 - <_> - - <_> - - - - <_>11 4 3 2 -1. - <_>12 4 1 2 3. - 0 - -4.7174817882478237e-003 - 0.2827253937721252 - 0.5267757773399353 - <_> - - <_> - - - - <_>8 12 3 8 -1. - <_>8 16 3 4 2. - 0 - 0.0381368584930897 - 0.5074741244316101 - 0.1023615971207619 - <_> - - <_> - - - - <_>8 14 5 3 -1. - <_>8 15 5 1 3. - 0 - -2.8168049175292253e-003 - 0.6169006824493408 - 0.4359692931175232 - <_> - - <_> - - - - <_>7 14 4 3 -1. - <_>7 15 4 1 3. - 0 - 8.1303603947162628e-003 - 0.4524433016777039 - 0.7606095075607300 - <_> - - <_> - - - - <_>11 4 3 2 -1. - <_>12 4 1 2 3. - 0 - 6.0056019574403763e-003 - 0.5240408778190613 - 0.1859712004661560 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>3 15 7 2 2. - <_>10 17 7 2 2. - 0 - 0.0191393196582794 - 0.5209379196166992 - 0.2332071959972382 - <_> - - <_> - - - - <_>2 2 16 4 -1. - <_>10 2 8 2 2. - <_>2 4 8 2 2. - 0 - 0.0164457596838474 - 0.5450702905654907 - 0.3264234960079193 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>3 8 3 12 2. - 0 - -0.0373568907380104 - 0.6999046802520752 - 0.4533241987228394 - <_> - - <_> - - - - <_>5 7 10 2 -1. - <_>5 7 5 2 2. - 0 - -0.0197279006242752 - 0.2653664946556091 - 0.5412809848785400 - <_> - - <_> - - - - <_>9 7 2 5 -1. - <_>10 7 1 5 2. - 0 - 6.6972579807043076e-003 - 0.4480566084384918 - 0.7138652205467224 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 7.4457528535276651e-004 - 0.4231350123882294 - 0.5471320152282715 - <_> - - <_> - - - - <_>0 13 8 2 -1. - <_>0 14 8 1 2. - 0 - 1.1790640419349074e-003 - 0.5341702103614807 - 0.3130455017089844 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 0.0349806100130081 - 0.5118659734725952 - 0.3430530130863190 - <_> - - <_> - - - - <_>1 7 6 4 -1. - <_>1 7 3 2 2. - <_>4 9 3 2 2. - 0 - 5.6859792675822973e-004 - 0.3532187044620514 - 0.5468639731407166 - <_> - - <_> - - - - <_>12 6 1 12 -1. - <_>12 12 1 6 2. - 0 - -0.0113406497985125 - 0.2842353880405426 - 0.5348700881004334 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>10 5 1 6 2. - 0 - -6.6228108480572701e-003 - 0.6883640289306641 - 0.4492664933204651 - <_> - - <_> - - - - <_>14 12 2 3 -1. - <_>14 13 2 1 3. - 0 - -8.0160330981016159e-003 - 0.1709893941879273 - 0.5224308967590332 - <_> - - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - 1.4206819469109178e-003 - 0.5290846228599548 - 0.2993383109569550 - <_> - - <_> - - - - <_>8 12 4 3 -1. - <_>8 13 4 1 3. - 0 - -2.7801711112260818e-003 - 0.6498854160308838 - 0.4460499882698059 - <_> - - <_> - - - - <_>5 2 2 4 -1. - <_>5 2 1 2 2. - <_>6 4 1 2 2. - 0 - -1.4747589593753219e-003 - 0.3260438144207001 - 0.5388113260269165 - <_> - - <_> - - - - <_>5 5 11 3 -1. - <_>5 6 11 1 3. - 0 - -0.0238303393125534 - 0.7528941035270691 - 0.4801219999790192 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 6.9369790144264698e-003 - 0.5335165858268738 - 0.3261427879333496 - <_> - - <_> - - - - <_>12 13 8 5 -1. - <_>12 13 4 5 2. - 0 - 8.2806255668401718e-003 - 0.4580394029617310 - 0.5737829804420471 - <_> - - <_> - - - - <_>7 6 1 12 -1. - <_>7 12 1 6 2. - 0 - -0.0104395002126694 - 0.2592320144176483 - 0.5233827829360962 - 34.5541114807128910 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 6 3 -1. - <_>4 2 3 3 2. - 0 - 7.2006587870419025e-003 - 0.3258886039257050 - 0.6849808096885681 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>12 5 3 5 2. - <_>9 10 3 5 2. - 0 - -2.8593589086085558e-003 - 0.5838881134986877 - 0.2537829875946045 - <_> - - <_> - - - - <_>5 5 8 12 -1. - <_>5 5 4 6 2. - <_>9 11 4 6 2. - 0 - 6.8580528022721410e-004 - 0.5708081722259522 - 0.2812424004077911 - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 7.9580191522836685e-003 - 0.2501051127910614 - 0.5544260740280151 - <_> - - <_> - - - - <_>4 2 2 2 -1. - <_>4 3 2 1 2. - 0 - -1.2124150525778532e-003 - 0.2385368049144745 - 0.5433350205421448 - <_> - - <_> - - - - <_>4 18 12 2 -1. - <_>8 18 4 2 3. - 0 - 7.9426132142543793e-003 - 0.3955070972442627 - 0.6220757961273193 - <_> - - <_> - - - - <_>7 4 4 16 -1. - <_>7 12 4 8 2. - 0 - 2.4630590341985226e-003 - 0.5639708042144775 - 0.2992357909679413 - <_> - - <_> - - - - <_>7 6 7 8 -1. - <_>7 10 7 4 2. - 0 - -6.0396599583327770e-003 - 0.2186512947082520 - 0.5411676764488220 - <_> - - <_> - - - - <_>6 3 3 1 -1. - <_>7 3 1 1 3. - 0 - -1.2988339876756072e-003 - 0.2350706011056900 - 0.5364584922790527 - <_> - - <_> - - - - <_>11 15 2 4 -1. - <_>11 17 2 2 2. - 0 - 2.2299369447864592e-004 - 0.3804112970829010 - 0.5729606151580811 - <_> - - <_> - - - - <_>3 5 4 8 -1. - <_>3 9 4 4 2. - 0 - 1.4654280385002494e-003 - 0.2510167956352234 - 0.5258268713951111 - <_> - - <_> - - - - <_>7 1 6 12 -1. - <_>7 7 6 6 2. - 0 - -8.1210042117163539e-004 - 0.5992823839187622 - 0.3851158916950226 - <_> - - <_> - - - - <_>4 6 6 2 -1. - <_>6 6 2 2 3. - 0 - -1.3836020370945334e-003 - 0.5681396126747131 - 0.3636586964130402 - <_> - - <_> - - - - <_>16 4 4 6 -1. - <_>16 6 4 2 3. - 0 - -0.0279364492744207 - 0.1491317003965378 - 0.5377560257911682 - <_> - - <_> - - - - <_>3 3 5 2 -1. - <_>3 4 5 1 2. - 0 - -4.6919551095925272e-004 - 0.3692429959774017 - 0.5572484731674194 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -4.9829659983515739e-003 - 0.6758509278297424 - 0.4532504081726074 - <_> - - <_> - - - - <_>2 16 4 2 -1. - <_>2 17 4 1 2. - 0 - 1.8815309740602970e-003 - 0.5368022918701172 - 0.2932539880275726 - <_> - - <_> - - - - <_>7 13 6 6 -1. - <_>10 13 3 3 2. - <_>7 16 3 3 2. - 0 - -0.0190675500780344 - 0.1649377048015595 - 0.5330067276954651 - <_> - - <_> - - - - <_>7 0 3 4 -1. - <_>8 0 1 4 3. - 0 - -4.6906559728085995e-003 - 0.1963925957679749 - 0.5119361877441406 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 5.9777139686048031e-003 - 0.4671171903610230 - 0.7008398175239563 - <_> - - <_> - - - - <_>0 4 4 6 -1. - <_>0 6 4 2 3. - 0 - -0.0333031304180622 - 0.1155416965484619 - 0.5104162096977234 - <_> - - <_> - - - - <_>5 6 12 3 -1. - <_>9 6 4 3 3. - 0 - 0.0907441079616547 - 0.5149660110473633 - 0.1306173056364059 - <_> - - <_> - - - - <_>7 6 6 14 -1. - <_>9 6 2 14 3. - 0 - 9.3555898638442159e-004 - 0.3605481088161469 - 0.5439859032630920 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 0.0149016501381993 - 0.4886212050914764 - 0.7687569856643677 - <_> - - <_> - - - - <_>6 12 2 4 -1. - <_>6 14 2 2 2. - 0 - 6.1594118596985936e-004 - 0.5356813073158264 - 0.3240939080715179 - <_> - - <_> - - - - <_>10 12 7 6 -1. - <_>10 14 7 2 3. - 0 - -0.0506709888577461 - 0.1848621964454651 - 0.5230404138565064 - <_> - - <_> - - - - <_>1 0 15 2 -1. - <_>1 1 15 1 2. - 0 - 6.8665749859064817e-004 - 0.3840579986572266 - 0.5517945885658264 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 8.3712432533502579e-003 - 0.4288564026355743 - 0.6131753921508789 - <_> - - <_> - - - - <_>5 3 3 1 -1. - <_>6 3 1 1 3. - 0 - -1.2953069526702166e-003 - 0.2913674116134644 - 0.5280737876892090 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0419416800141335 - 0.7554799914360046 - 0.4856030941009522 - <_> - - <_> - - - - <_>0 3 20 10 -1. - <_>0 8 20 5 2. - 0 - -0.0235293805599213 - 0.2838279902935028 - 0.5256081223487854 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 0.0408574491739273 - 0.4870935082435608 - 0.6277297139167786 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0254068691283464 - 0.7099707722663879 - 0.4575029015541077 - <_> - - <_> - - - - <_>19 15 1 2 -1. - <_>19 16 1 1 2. - 0 - -4.1415440500713885e-004 - 0.4030886888504028 - 0.5469412207603455 - <_> - - <_> - - - - <_>0 2 4 8 -1. - <_>2 2 2 8 2. - 0 - 0.0218241196125746 - 0.4502024054527283 - 0.6768701076507568 - <_> - - <_> - - - - <_>2 1 18 4 -1. - <_>11 1 9 2 2. - <_>2 3 9 2 2. - 0 - 0.0141140399500728 - 0.5442860722541809 - 0.3791700005531311 - <_> - - <_> - - - - <_>8 12 1 2 -1. - <_>8 13 1 1 2. - 0 - 6.7214590671937913e-005 - 0.4200463891029358 - 0.5873476266860962 - <_> - - <_> - - - - <_>5 2 10 6 -1. - <_>10 2 5 3 2. - <_>5 5 5 3 2. - 0 - -7.9417638480663300e-003 - 0.3792561888694763 - 0.5585265755653381 - <_> - - <_> - - - - <_>9 7 2 4 -1. - <_>10 7 1 4 2. - 0 - -7.2144409641623497e-003 - 0.7253103852272034 - 0.4603548943996429 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 2.5817339774221182e-003 - 0.4693301916122437 - 0.5900238752365112 - <_> - - <_> - - - - <_>4 5 12 8 -1. - <_>8 5 4 8 3. - 0 - 0.1340931951999664 - 0.5149213075637817 - 0.1808844953775406 - <_> - - <_> - - - - <_>15 15 4 3 -1. - <_>15 16 4 1 3. - 0 - 2.2962710354477167e-003 - 0.5399743914604187 - 0.3717867136001587 - <_> - - <_> - - - - <_>8 18 3 1 -1. - <_>9 18 1 1 3. - 0 - -2.1575849968940020e-003 - 0.2408495992422104 - 0.5148863792419434 - <_> - - <_> - - - - <_>9 13 4 3 -1. - <_>9 14 4 1 3. - 0 - -4.9196188338100910e-003 - 0.6573588252067566 - 0.4738740026950836 - <_> - - <_> - - - - <_>7 13 4 3 -1. - <_>7 14 4 1 3. - 0 - 1.6267469618469477e-003 - 0.4192821979522705 - 0.6303114295005798 - <_> - - <_> - - - - <_>19 15 1 2 -1. - <_>19 16 1 1 2. - 0 - 3.3413388882763684e-004 - 0.5540298223495483 - 0.3702101111412048 - <_> - - <_> - - - - <_>0 15 8 4 -1. - <_>0 17 8 2 2. - 0 - -0.0266980808228254 - 0.1710917949676514 - 0.5101410746574402 - <_> - - <_> - - - - <_>9 3 6 4 -1. - <_>11 3 2 4 3. - 0 - -0.0305618792772293 - 0.1904218047857285 - 0.5168793797492981 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 2.8511548880487680e-003 - 0.4447506964206696 - 0.6313853859901428 - <_> - - <_> - - - - <_>3 14 14 6 -1. - <_>3 16 14 2 3. - 0 - -0.0362114794552326 - 0.2490727007389069 - 0.5377349257469177 - <_> - - <_> - - - - <_>6 3 6 6 -1. - <_>6 6 6 3 2. - 0 - -2.4115189444273710e-003 - 0.5381243228912354 - 0.3664236962795258 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>5 14 10 3 2. - 0 - -7.7253201743587852e-004 - 0.5530232191085815 - 0.3541550040245056 - <_> - - <_> - - - - <_>3 10 3 4 -1. - <_>4 10 1 4 3. - 0 - 2.9481729143299162e-004 - 0.4132699072360992 - 0.5667243003845215 - <_> - - <_> - - - - <_>13 9 2 2 -1. - <_>13 9 1 2 2. - 0 - -6.2334560789167881e-003 - 0.0987872332334518 - 0.5198668837547302 - <_> - - <_> - - - - <_>5 3 6 4 -1. - <_>7 3 2 4 3. - 0 - -0.0262747295200825 - 0.0911274924874306 - 0.5028107166290283 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 5.3212260827422142e-003 - 0.4726648926734924 - 0.6222720742225647 - <_> - - <_> - - - - <_>2 12 2 3 -1. - <_>2 13 2 1 3. - 0 - -4.1129058226943016e-003 - 0.2157457023859024 - 0.5137804746627808 - <_> - - <_> - - - - <_>9 8 3 12 -1. - <_>9 12 3 4 3. - 0 - 3.2457809429615736e-003 - 0.5410770773887634 - 0.3721776902675629 - <_> - - <_> - - - - <_>3 14 4 6 -1. - <_>3 14 2 3 2. - <_>5 17 2 3 2. - 0 - -0.0163597092032433 - 0.7787874937057495 - 0.4685291945934296 - <_> - - <_> - - - - <_>16 15 2 2 -1. - <_>16 16 2 1 2. - 0 - 3.2166109303943813e-004 - 0.5478987097740173 - 0.4240373969078064 - <_> - - <_> - - - - <_>2 15 2 2 -1. - <_>2 16 2 1 2. - 0 - 6.4452440710738301e-004 - 0.5330560803413391 - 0.3501324951648712 - <_> - - <_> - - - - <_>8 12 4 3 -1. - <_>8 13 4 1 3. - 0 - -7.8909732401371002e-003 - 0.6923521161079407 - 0.4726569056510925 - <_> - - <_> - - - - <_>0 7 20 1 -1. - <_>10 7 10 1 2. - 0 - 0.0483362115919590 - 0.5055900216102600 - 0.0757492035627365 - <_> - - <_> - - - - <_>7 6 8 3 -1. - <_>7 6 4 3 2. - 0 - -7.5178127735853195e-004 - 0.3783741891384125 - 0.5538573861122131 - <_> - - <_> - - - - <_>5 7 8 2 -1. - <_>9 7 4 2 2. - 0 - -2.4953910615295172e-003 - 0.3081651031970978 - 0.5359612107276917 - <_> - - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - -2.2385010961443186e-003 - 0.6633958816528320 - 0.4649342894554138 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -1.7988430336117744e-003 - 0.6596844792366028 - 0.4347187876701355 - <_> - - <_> - - - - <_>11 1 3 5 -1. - <_>12 1 1 5 3. - 0 - 8.7860915809869766e-003 - 0.5231832861900330 - 0.2315579950809479 - <_> - - <_> - - - - <_>6 2 3 6 -1. - <_>7 2 1 6 3. - 0 - 3.6715380847454071e-003 - 0.5204250216484070 - 0.2977376878261566 - <_> - - <_> - - - - <_>14 14 6 5 -1. - <_>14 14 3 5 2. - 0 - -0.0353364497423172 - 0.7238878011703491 - 0.4861505031585693 - <_> - - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - -6.9189240457490087e-004 - 0.3105022013187408 - 0.5229824781417847 - <_> - - <_> - - - - <_>10 7 1 3 -1. - <_>10 8 1 1 3. - 0 - -3.3946109469980001e-003 - 0.3138968050479889 - 0.5210173726081848 - <_> - - <_> - - - - <_>6 6 2 2 -1. - <_>6 6 1 1 2. - <_>7 7 1 1 2. - 0 - 9.8569283727556467e-004 - 0.4536580145359039 - 0.6585097908973694 - <_> - - <_> - - - - <_>2 11 18 4 -1. - <_>11 11 9 2 2. - <_>2 13 9 2 2. - 0 - -0.0501631014049053 - 0.1804454028606415 - 0.5198916792869568 - <_> - - <_> - - - - <_>6 6 2 2 -1. - <_>6 6 1 1 2. - <_>7 7 1 1 2. - 0 - -2.2367259953171015e-003 - 0.7255702018737793 - 0.4651359021663666 - <_> - - <_> - - - - <_>0 15 20 2 -1. - <_>0 16 20 1 2. - 0 - 7.4326287722215056e-004 - 0.4412921071052551 - 0.5898545980453491 - <_> - - <_> - - - - <_>4 14 2 3 -1. - <_>4 15 2 1 3. - 0 - -9.3485182151198387e-004 - 0.3500052988529205 - 0.5366017818450928 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 0.0174979399889708 - 0.4912194907665253 - 0.8315284848213196 - <_> - - <_> - - - - <_>8 7 2 3 -1. - <_>8 8 2 1 3. - 0 - -1.5200000489130616e-003 - 0.3570275902748108 - 0.5370560288429260 - <_> - - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - 7.8003940870985389e-004 - 0.4353772103786469 - 0.5967335104942322 - 39.1072883605957030 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -9.9945552647113800e-003 - 0.6162583231925964 - 0.3054533004760742 - <_> - - <_> - - - - <_>9 7 6 4 -1. - <_>12 7 3 2 2. - <_>9 9 3 2 2. - 0 - -1.1085229925811291e-003 - 0.5818294882774353 - 0.3155578076839447 - <_> - - <_> - - - - <_>4 7 3 6 -1. - <_>4 9 3 2 3. - 0 - 1.0364380432292819e-003 - 0.2552052140235901 - 0.5692911744117737 - <_> - - <_> - - - - <_>11 15 4 4 -1. - <_>13 15 2 2 2. - <_>11 17 2 2 2. - 0 - 6.8211311008781195e-004 - 0.3685089945793152 - 0.5934931039810181 - <_> - - <_> - - - - <_>7 8 4 2 -1. - <_>7 9 4 1 2. - 0 - -6.8057340104132891e-004 - 0.2332392036914825 - 0.5474792122840881 - <_> - - <_> - - - - <_>13 1 4 3 -1. - <_>13 1 2 3 2. - 0 - 2.6068789884448051e-004 - 0.3257457017898560 - 0.5667545795440674 - <_> - - <_> - - - - <_>5 15 4 4 -1. - <_>5 15 2 2 2. - <_>7 17 2 2 2. - 0 - 5.1607372006401420e-004 - 0.3744716942310333 - 0.5845472812652588 - <_> - - <_> - - - - <_>9 5 4 7 -1. - <_>9 5 2 7 2. - 0 - 8.5007521556690335e-004 - 0.3420371115207672 - 0.5522807240486145 - <_> - - <_> - - - - <_>5 6 8 3 -1. - <_>9 6 4 3 2. - 0 - -1.8607829697430134e-003 - 0.2804419994354248 - 0.5375424027442932 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -1.5033970121294260e-003 - 0.2579050958156586 - 0.5498952269554138 - <_> - - <_> - - - - <_>7 15 5 3 -1. - <_>7 16 5 1 3. - 0 - 2.3478909861296415e-003 - 0.4175156056880951 - 0.6313710808753967 - <_> - - <_> - - - - <_>11 10 4 3 -1. - <_>11 10 2 3 2. - 0 - -2.8880240279249847e-004 - 0.5865169763565064 - 0.4052666127681732 - <_> - - <_> - - - - <_>6 9 8 10 -1. - <_>6 14 8 5 2. - 0 - 8.9405477046966553e-003 - 0.5211141109466553 - 0.2318654060363770 - <_> - - <_> - - - - <_>10 11 6 2 -1. - <_>10 11 3 2 2. - 0 - -0.0193277392536402 - 0.2753432989120483 - 0.5241525769233704 - <_> - - <_> - - - - <_>4 11 6 2 -1. - <_>7 11 3 2 2. - 0 - -2.0202060113660991e-004 - 0.5722978711128235 - 0.3677195906639099 - <_> - - <_> - - - - <_>11 3 8 1 -1. - <_>11 3 4 1 2. - 0 - 2.1179069299250841e-003 - 0.4466108083724976 - 0.5542430877685547 - <_> - - <_> - - - - <_>6 3 3 2 -1. - <_>7 3 1 2 3. - 0 - -1.7743760254234076e-003 - 0.2813253104686737 - 0.5300959944725037 - <_> - - <_> - - - - <_>14 5 6 5 -1. - <_>14 5 3 5 2. - 0 - 4.2234458960592747e-003 - 0.4399709999561310 - 0.5795428156852722 - <_> - - <_> - - - - <_>7 5 2 12 -1. - <_>7 11 2 6 2. - 0 - -0.0143752200528979 - 0.2981117963790894 - 0.5292059183120728 - <_> - - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - -0.0153491804376245 - 0.7705215215682983 - 0.4748171865940094 - <_> - - <_> - - - - <_>4 1 2 3 -1. - <_>5 1 1 3 2. - 0 - 1.5152279956964776e-005 - 0.3718844056129456 - 0.5576897263526917 - <_> - - <_> - - - - <_>18 3 2 6 -1. - <_>18 5 2 2 3. - 0 - -9.1293919831514359e-003 - 0.3615196049213409 - 0.5286766886711121 - <_> - - <_> - - - - <_>0 3 2 6 -1. - <_>0 5 2 2 3. - 0 - 2.2512159775942564e-003 - 0.5364704728126526 - 0.3486298024654388 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -4.9696918576955795e-003 - 0.6927651762962341 - 0.4676836133003235 - <_> - - <_> - - - - <_>7 13 4 3 -1. - <_>7 14 4 1 3. - 0 - -0.0128290103748441 - 0.7712153792381287 - 0.4660735130310059 - <_> - - <_> - - - - <_>18 0 2 6 -1. - <_>18 2 2 2 3. - 0 - -9.3660065904259682e-003 - 0.3374983966350555 - 0.5351287722587585 - <_> - - <_> - - - - <_>0 0 2 6 -1. - <_>0 2 2 2 3. - 0 - 3.2452319283038378e-003 - 0.5325189828872681 - 0.3289610147476196 - <_> - - <_> - - - - <_>8 14 6 3 -1. - <_>8 15 6 1 3. - 0 - -0.0117235602810979 - 0.6837652921676636 - 0.4754300117492676 - <_> - - <_> - - - - <_>7 4 2 4 -1. - <_>8 4 1 4 2. - 0 - 2.9257940695970319e-005 - 0.3572087883949280 - 0.5360502004623413 - <_> - - <_> - - - - <_>8 5 4 6 -1. - <_>8 7 4 2 3. - 0 - -2.2244219508138485e-005 - 0.5541427135467529 - 0.3552064001560211 - <_> - - <_> - - - - <_>6 4 2 2 -1. - <_>7 4 1 2 2. - 0 - 5.0881509669125080e-003 - 0.5070844292640686 - 0.1256462037563324 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>10 14 7 2 2. - <_>3 16 7 2 2. - 0 - 0.0274296794086695 - 0.5269560217857361 - 0.1625818014144898 - <_> - - <_> - - - - <_>6 15 6 2 -1. - <_>6 15 3 1 2. - <_>9 16 3 1 2. - 0 - -6.4142867922782898e-003 - 0.7145588994026184 - 0.4584197103977203 - <_> - - <_> - - - - <_>14 15 6 2 -1. - <_>14 16 6 1 2. - 0 - 3.3479959238320589e-003 - 0.5398612022399902 - 0.3494696915149689 - <_> - - <_> - - - - <_>2 12 12 8 -1. - <_>2 16 12 4 2. - 0 - -0.0826354920864105 - 0.2439192980527878 - 0.5160226225852966 - <_> - - <_> - - - - <_>7 7 7 2 -1. - <_>7 8 7 1 2. - 0 - 1.0261740535497665e-003 - 0.3886891901493073 - 0.5767908096313477 - <_> - - <_> - - - - <_>0 2 18 2 -1. - <_>0 3 18 1 2. - 0 - -1.6307090409100056e-003 - 0.3389458060264587 - 0.5347700715065002 - <_> - - <_> - - - - <_>9 6 2 5 -1. - <_>9 6 1 5 2. - 0 - 2.4546680506318808e-003 - 0.4601413905620575 - 0.6387246847152710 - <_> - - <_> - - - - <_>7 5 3 8 -1. - <_>8 5 1 8 3. - 0 - -9.9476519972085953e-004 - 0.5769879221916199 - 0.4120396077632904 - <_> - - <_> - - - - <_>9 6 3 4 -1. - <_>10 6 1 4 3. - 0 - 0.0154091902077198 - 0.4878709018230438 - 0.7089822292327881 - <_> - - <_> - - - - <_>4 13 3 2 -1. - <_>4 14 3 1 2. - 0 - 1.1784400558099151e-003 - 0.5263553261756897 - 0.2895244956016541 - <_> - - <_> - - - - <_>9 4 6 3 -1. - <_>11 4 2 3 3. - 0 - -0.0277019198983908 - 0.1498828977346420 - 0.5219606757164002 - <_> - - <_> - - - - <_>5 4 6 3 -1. - <_>7 4 2 3 3. - 0 - -0.0295053999871016 - 0.0248933192342520 - 0.4999816119670868 - <_> - - <_> - - - - <_>14 11 5 2 -1. - <_>14 12 5 1 2. - 0 - 4.5159430010244250e-004 - 0.5464622974395752 - 0.4029662907123566 - <_> - - <_> - - - - <_>1 2 6 9 -1. - <_>3 2 2 9 3. - 0 - 7.1772639639675617e-003 - 0.4271056950092316 - 0.5866296887397766 - <_> - - <_> - - - - <_>14 6 6 13 -1. - <_>14 6 3 13 2. - 0 - -0.0741820484399796 - 0.6874179244041443 - 0.4919027984142304 - <_> - - <_> - - - - <_>3 6 14 8 -1. - <_>3 6 7 4 2. - <_>10 10 7 4 2. - 0 - -0.0172541607171297 - 0.3370676040649414 - 0.5348739027976990 - <_> - - <_> - - - - <_>16 0 4 11 -1. - <_>16 0 2 11 2. - 0 - 0.0148515598848462 - 0.4626792967319489 - 0.6129904985427856 - <_> - - <_> - - - - <_>3 4 12 12 -1. - <_>3 4 6 6 2. - <_>9 10 6 6 2. - 0 - 0.0100020002573729 - 0.5346122980117798 - 0.3423453867435455 - <_> - - <_> - - - - <_>11 4 5 3 -1. - <_>11 5 5 1 3. - 0 - 2.0138120744377375e-003 - 0.4643830060958862 - 0.5824304223060608 - <_> - - <_> - - - - <_>4 11 4 2 -1. - <_>4 12 4 1 2. - 0 - 1.5135470312088728e-003 - 0.5196396112442017 - 0.2856149971485138 - <_> - - <_> - - - - <_>10 7 2 2 -1. - <_>10 7 1 2 2. - 0 - 3.1381431035697460e-003 - 0.4838162958621979 - 0.5958529710769653 - <_> - - <_> - - - - <_>8 7 2 2 -1. - <_>9 7 1 2 2. - 0 - -5.1450440660119057e-003 - 0.8920302987098694 - 0.4741412103176117 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -4.4736708514392376e-003 - 0.2033942937850952 - 0.5337278842926025 - <_> - - <_> - - - - <_>5 6 3 3 -1. - <_>5 7 3 1 3. - 0 - 1.9628470763564110e-003 - 0.4571633934974670 - 0.6725863218307495 - <_> - - <_> - - - - <_>10 0 3 3 -1. - <_>11 0 1 3 3. - 0 - 5.4260450415313244e-003 - 0.5271108150482178 - 0.2845670878887177 - <_> - - <_> - - - - <_>5 6 6 2 -1. - <_>5 6 3 1 2. - <_>8 7 3 1 2. - 0 - 4.9611460417509079e-004 - 0.4138312935829163 - 0.5718597769737244 - <_> - - <_> - - - - <_>12 16 4 3 -1. - <_>12 17 4 1 3. - 0 - 9.3728788197040558e-003 - 0.5225151181221008 - 0.2804847061634064 - <_> - - <_> - - - - <_>3 12 3 2 -1. - <_>3 13 3 1 2. - 0 - 6.0500897234305739e-004 - 0.5236768722534180 - 0.3314523994922638 - <_> - - <_> - - - - <_>9 12 3 2 -1. - <_>9 13 3 1 2. - 0 - 5.6792551185935736e-004 - 0.4531059861183167 - 0.6276971101760864 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 0.0246443394571543 - 0.5130851864814758 - 0.2017143964767456 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -0.0102904504165053 - 0.7786595225334168 - 0.4876641035079956 - <_> - - <_> - - - - <_>4 4 5 3 -1. - <_>4 5 5 1 3. - 0 - 2.0629419013857841e-003 - 0.4288598895072937 - 0.5881264209747315 - <_> - - <_> - - - - <_>12 16 4 3 -1. - <_>12 17 4 1 3. - 0 - -5.0519481301307678e-003 - 0.3523977994918823 - 0.5286008715629578 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -5.7692620903253555e-003 - 0.6841086149215698 - 0.4588094055652618 - <_> - - <_> - - - - <_>9 0 2 2 -1. - <_>9 1 2 1 2. - 0 - -4.5789941214025021e-004 - 0.3565520048141480 - 0.5485978126525879 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>8 10 4 1 2. - 0 - -7.5918837683275342e-004 - 0.3368793129920960 - 0.5254197120666504 - <_> - - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -1.7737259622663260e-003 - 0.3422161042690277 - 0.5454015135765076 - <_> - - <_> - - - - <_>0 13 6 3 -1. - <_>2 13 2 3 3. - 0 - -8.5610467940568924e-003 - 0.6533612012863159 - 0.4485856890678406 - <_> - - <_> - - - - <_>16 14 3 2 -1. - <_>16 15 3 1 2. - 0 - 1.7277270089834929e-003 - 0.5307580232620239 - 0.3925352990627289 - <_> - - <_> - - - - <_>1 18 18 2 -1. - <_>7 18 6 2 3. - 0 - -0.0281996093690395 - 0.6857458949089050 - 0.4588584005832672 - <_> - - <_> - - - - <_>16 14 3 2 -1. - <_>16 15 3 1 2. - 0 - -1.7781109781935811e-003 - 0.4037851095199585 - 0.5369856953620911 - <_> - - <_> - - - - <_>1 14 3 2 -1. - <_>1 15 3 1 2. - 0 - 3.3177141449414194e-004 - 0.5399798750877380 - 0.3705750107765198 - <_> - - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - 2.6385399978607893e-003 - 0.4665437042713165 - 0.6452730894088745 - <_> - - <_> - - - - <_>5 14 8 3 -1. - <_>5 15 8 1 3. - 0 - -2.1183069329708815e-003 - 0.5914781093597412 - 0.4064677059650421 - <_> - - <_> - - - - <_>10 6 4 14 -1. - <_>10 6 2 14 2. - 0 - -0.0147732896730304 - 0.3642038106918335 - 0.5294762849807739 - <_> - - <_> - - - - <_>6 6 4 14 -1. - <_>8 6 2 14 2. - 0 - -0.0168154407292604 - 0.2664231956005096 - 0.5144972801208496 - <_> - - <_> - - - - <_>13 5 2 3 -1. - <_>13 6 2 1 3. - 0 - -6.3370140269398689e-003 - 0.6779531240463257 - 0.4852097928524017 - <_> - - <_> - - - - <_>7 16 6 1 -1. - <_>9 16 2 1 3. - 0 - -4.4560048991115764e-005 - 0.5613964796066284 - 0.4153054058551788 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - -1.0240620467811823e-003 - 0.5964478254318237 - 0.4566304087638855 - <_> - - <_> - - - - <_>7 0 3 3 -1. - <_>8 0 1 3 3. - 0 - -2.3161689750850201e-003 - 0.2976115047931671 - 0.5188159942626953 - <_> - - <_> - - - - <_>4 0 16 18 -1. - <_>4 9 16 9 2. - 0 - 0.5321757197380066 - 0.5187839269638062 - 0.2202631980180740 - <_> - - <_> - - - - <_>1 1 16 14 -1. - <_>1 8 16 7 2. - 0 - -0.1664305031299591 - 0.1866022944450378 - 0.5060343146324158 - <_> - - <_> - - - - <_>3 9 15 4 -1. - <_>8 9 5 4 3. - 0 - 0.1125352978706360 - 0.5212125182151794 - 0.1185022965073586 - <_> - - <_> - - - - <_>6 12 7 3 -1. - <_>6 13 7 1 3. - 0 - 9.3046864494681358e-003 - 0.4589937031269074 - 0.6826149225234985 - <_> - - <_> - - - - <_>14 15 2 3 -1. - <_>14 16 2 1 3. - 0 - -4.6255099587142467e-003 - 0.3079940974712372 - 0.5225008726119995 - <_> - - <_> - - - - <_>2 3 16 14 -1. - <_>2 3 8 7 2. - <_>10 10 8 7 2. - 0 - -0.1111646965146065 - 0.2101044058799744 - 0.5080801844596863 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - -0.0108884396031499 - 0.5765355229377747 - 0.4790464043617249 - <_> - - <_> - - - - <_>4 15 2 3 -1. - <_>4 16 2 1 3. - 0 - 5.8564301580190659e-003 - 0.5065100193023682 - 0.1563598960638046 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - 0.0548543892800808 - 0.4966914951801300 - 0.7230510711669922 - <_> - - <_> - - - - <_>1 1 8 3 -1. - <_>1 2 8 1 3. - 0 - -0.0111973397433758 - 0.2194979041814804 - 0.5098798274993897 - <_> - - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - 4.4069071300327778e-003 - 0.4778401851654053 - 0.6770902872085571 - <_> - - <_> - - - - <_>5 11 5 9 -1. - <_>5 14 5 3 3. - 0 - -0.0636652931571007 - 0.1936362981796265 - 0.5081024169921875 - <_> - - <_> - - - - <_>16 0 4 11 -1. - <_>16 0 2 11 2. - 0 - -9.8081491887569427e-003 - 0.5999063253402710 - 0.4810341000556946 - <_> - - <_> - - - - <_>7 0 6 1 -1. - <_>9 0 2 1 3. - 0 - -2.1717099007219076e-003 - 0.3338333964347839 - 0.5235472917556763 - <_> - - <_> - - - - <_>16 3 3 7 -1. - <_>17 3 1 7 3. - 0 - -0.0133155202493072 - 0.6617069840431213 - 0.4919213056564331 - <_> - - <_> - - - - <_>1 3 3 7 -1. - <_>2 3 1 7 3. - 0 - 2.5442079640924931e-003 - 0.4488744139671326 - 0.6082184910774231 - <_> - - <_> - - - - <_>7 8 6 12 -1. - <_>7 12 6 4 3. - 0 - 0.0120378397405148 - 0.5409392118453980 - 0.3292432129383087 - <_> - - <_> - - - - <_>0 0 4 11 -1. - <_>2 0 2 11 2. - 0 - -0.0207010507583618 - 0.6819120049476624 - 0.4594995975494385 - <_> - - <_> - - - - <_>14 0 6 20 -1. - <_>14 0 3 20 2. - 0 - 0.0276082791388035 - 0.4630792140960693 - 0.5767282843589783 - <_> - - <_> - - - - <_>0 3 1 2 -1. - <_>0 4 1 1 2. - 0 - 1.2370620388537645e-003 - 0.5165379047393799 - 0.2635016143321991 - <_> - - <_> - - - - <_>5 5 10 8 -1. - <_>10 5 5 4 2. - <_>5 9 5 4 2. - 0 - -0.0376693382859230 - 0.2536393105983734 - 0.5278980135917664 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 7 6 2 2. - <_>10 9 6 2 2. - 0 - -1.8057259730994701e-003 - 0.3985156118869782 - 0.5517500042915344 - 50.6104812622070310 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>2 1 6 4 -1. - <_>5 1 3 4 2. - 0 - 4.4299028813838959e-003 - 0.2891018092632294 - 0.6335226297378540 - <_> - - <_> - - - - <_>9 7 6 4 -1. - <_>12 7 3 2 2. - <_>9 9 3 2 2. - 0 - -2.3813319858163595e-003 - 0.6211789250373840 - 0.3477487862110138 - <_> - - <_> - - - - <_>5 6 2 6 -1. - <_>5 9 2 3 2. - 0 - 2.2915711160749197e-003 - 0.2254412025213242 - 0.5582118034362793 - <_> - - <_> - - - - <_>9 16 6 4 -1. - <_>12 16 3 2 2. - <_>9 18 3 2 2. - 0 - 9.9457940086722374e-004 - 0.3711710870265961 - 0.5930070877075195 - <_> - - <_> - - - - <_>9 4 2 12 -1. - <_>9 10 2 6 2. - 0 - 7.7164667891338468e-004 - 0.5651720166206360 - 0.3347995877265930 - <_> - - <_> - - - - <_>7 1 6 18 -1. - <_>9 1 2 18 3. - 0 - -1.1386410333216190e-003 - 0.3069126009941101 - 0.5508630871772766 - <_> - - <_> - - - - <_>4 12 12 2 -1. - <_>8 12 4 2 3. - 0 - -1.6403039626311511e-004 - 0.5762827992439270 - 0.3699047863483429 - <_> - - <_> - - - - <_>8 8 6 2 -1. - <_>8 9 6 1 2. - 0 - 2.9793529392918572e-005 - 0.2644244134426117 - 0.5437911152839661 - <_> - - <_> - - - - <_>8 0 3 6 -1. - <_>9 0 1 6 3. - 0 - 8.5774902254343033e-003 - 0.5051138997077942 - 0.1795724928379059 - <_> - - <_> - - - - <_>11 18 3 2 -1. - <_>11 19 3 1 2. - 0 - -2.6032689493149519e-004 - 0.5826969146728516 - 0.4446826875209808 - <_> - - <_> - - - - <_>1 1 17 4 -1. - <_>1 3 17 2 2. - 0 - -6.1404630541801453e-003 - 0.3113852143287659 - 0.5346971750259399 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - -0.0230869501829147 - 0.3277946114540100 - 0.5331197977066040 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -0.0142436502501369 - 0.7381709814071655 - 0.4588063061237335 - <_> - - <_> - - - - <_>12 3 2 17 -1. - <_>12 3 1 17 2. - 0 - 0.0194871295243502 - 0.5256630778312683 - 0.2274471968412399 - <_> - - <_> - - - - <_>4 7 6 1 -1. - <_>6 7 2 1 3. - 0 - -9.6681108698248863e-004 - 0.5511230826377869 - 0.3815006911754608 - <_> - - <_> - - - - <_>18 3 2 3 -1. - <_>18 4 2 1 3. - 0 - 3.1474709976464510e-003 - 0.5425636768341065 - 0.2543726861476898 - <_> - - <_> - - - - <_>8 4 3 4 -1. - <_>8 6 3 2 2. - 0 - -1.8026070029009134e-004 - 0.5380191802978516 - 0.3406304121017456 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>4 10 12 5 2. - 0 - -6.0266260989010334e-003 - 0.3035801947116852 - 0.5420572161674500 - <_> - - <_> - - - - <_>5 18 4 2 -1. - <_>7 18 2 2 2. - 0 - 4.4462960795499384e-004 - 0.3990997076034546 - 0.5660110116004944 - <_> - - <_> - - - - <_>17 2 3 6 -1. - <_>17 4 3 2 3. - 0 - 2.2609760053455830e-003 - 0.5562806725502014 - 0.3940688073635101 - <_> - - <_> - - - - <_>7 7 6 6 -1. - <_>9 7 2 6 3. - 0 - 0.0511330589652061 - 0.4609653949737549 - 0.7118561863899231 - <_> - - <_> - - - - <_>17 2 3 6 -1. - <_>17 4 3 2 3. - 0 - -0.0177863091230392 - 0.2316166013479233 - 0.5322144031524658 - <_> - - <_> - - - - <_>8 0 3 4 -1. - <_>9 0 1 4 3. - 0 - -4.9679628573358059e-003 - 0.2330771982669830 - 0.5122029185295105 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 2.0667689386755228e-003 - 0.4657444059848785 - 0.6455488204956055 - <_> - - <_> - - - - <_>0 12 6 3 -1. - <_>0 13 6 1 3. - 0 - 7.4413768015801907e-003 - 0.5154392123222351 - 0.2361633926630020 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -3.6277279723435640e-003 - 0.6219773292541504 - 0.4476661086082459 - <_> - - <_> - - - - <_>3 12 2 3 -1. - <_>3 13 2 1 3. - 0 - -5.3530759178102016e-003 - 0.1837355047464371 - 0.5102208256721497 - <_> - - <_> - - - - <_>5 6 12 7 -1. - <_>9 6 4 7 3. - 0 - 0.1453091949224472 - 0.5145987272262573 - 0.1535930931568146 - <_> - - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 2.4394490756094456e-003 - 0.5343660116195679 - 0.3624661862850189 - <_> - - <_> - - - - <_>14 6 1 3 -1. - <_>14 7 1 1 3. - 0 - -3.1283390708267689e-003 - 0.6215007901191711 - 0.4845592081546783 - <_> - - <_> - - - - <_>2 0 3 14 -1. - <_>3 0 1 14 3. - 0 - 1.7940260004252195e-003 - 0.4299261868000031 - 0.5824198126792908 - <_> - - <_> - - - - <_>12 14 5 6 -1. - <_>12 16 5 2 3. - 0 - 0.0362538211047649 - 0.5260334014892578 - 0.1439467966556549 - <_> - - <_> - - - - <_>4 14 5 6 -1. - <_>4 16 5 2 3. - 0 - -5.1746722310781479e-003 - 0.3506538867950440 - 0.5287045240402222 - <_> - - <_> - - - - <_>11 10 2 2 -1. - <_>12 10 1 1 2. - <_>11 11 1 1 2. - 0 - 6.5383297624066472e-004 - 0.4809640944004059 - 0.6122040152549744 - <_> - - <_> - - - - <_>5 0 3 14 -1. - <_>6 0 1 14 3. - 0 - -0.0264802295714617 - 0.1139362007379532 - 0.5045586228370667 - <_> - - <_> - - - - <_>10 15 2 3 -1. - <_>10 16 2 1 3. - 0 - -3.0440660193562508e-003 - 0.6352095007896423 - 0.4794734120368958 - <_> - - <_> - - - - <_>0 2 2 3 -1. - <_>0 3 2 1 3. - 0 - 3.6993520334362984e-003 - 0.5131118297576904 - 0.2498510926961899 - <_> - - <_> - - - - <_>5 11 12 6 -1. - <_>5 14 12 3 2. - 0 - -3.6762931267730892e-004 - 0.5421394705772400 - 0.3709532022476196 - <_> - - <_> - - - - <_>6 11 3 9 -1. - <_>6 14 3 3 3. - 0 - -0.0413822606205940 - 0.1894959956407547 - 0.5081691741943359 - <_> - - <_> - - - - <_>11 10 2 2 -1. - <_>12 10 1 1 2. - <_>11 11 1 1 2. - 0 - -1.0532729793339968e-003 - 0.6454367041587830 - 0.4783608913421631 - <_> - - <_> - - - - <_>5 6 1 3 -1. - <_>5 7 1 1 3. - 0 - -2.1648600231856108e-003 - 0.6215031147003174 - 0.4499826133251190 - <_> - - <_> - - - - <_>4 9 13 3 -1. - <_>4 10 13 1 3. - 0 - -5.6747748749330640e-004 - 0.3712610900402069 - 0.5419334769248962 - <_> - - <_> - - - - <_>1 7 15 6 -1. - <_>6 7 5 6 3. - 0 - 0.1737584024667740 - 0.5023643970489502 - 0.1215742006897926 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>8 5 4 6 3. - 0 - -2.9049699660390615e-003 - 0.3240267932415009 - 0.5381883978843689 - <_> - - <_> - - - - <_>8 10 4 3 -1. - <_>8 11 4 1 3. - 0 - 1.2299539521336555e-003 - 0.4165507853031158 - 0.5703486204147339 - <_> - - <_> - - - - <_>15 14 1 3 -1. - <_>15 15 1 1 3. - 0 - -5.4329237900674343e-004 - 0.3854042887687683 - 0.5547549128532410 - <_> - - <_> - - - - <_>1 11 5 3 -1. - <_>1 12 5 1 3. - 0 - -8.3297258242964745e-003 - 0.2204494029283524 - 0.5097082853317261 - <_> - - <_> - - - - <_>7 1 7 12 -1. - <_>7 7 7 6 2. - 0 - -1.0417630255687982e-004 - 0.5607066154479981 - 0.4303036034107208 - <_> - - <_> - - - - <_>0 1 6 10 -1. - <_>0 1 3 5 2. - <_>3 6 3 5 2. - 0 - 0.0312047004699707 - 0.4621657133102417 - 0.6982004046440125 - <_> - - <_> - - - - <_>16 1 4 3 -1. - <_>16 2 4 1 3. - 0 - 7.8943502157926559e-003 - 0.5269594192504883 - 0.2269068062305450 - <_> - - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - -4.3645310215651989e-003 - 0.6359223127365112 - 0.4537956118583679 - <_> - - <_> - - - - <_>12 2 3 5 -1. - <_>13 2 1 5 3. - 0 - 7.6793059706687927e-003 - 0.5274767875671387 - 0.2740483880043030 - <_> - - <_> - - - - <_>0 3 4 6 -1. - <_>0 5 4 2 3. - 0 - -0.0254311393946409 - 0.2038519978523254 - 0.5071732997894287 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 8.2000601105391979e-004 - 0.4587455093860626 - 0.6119868159294128 - <_> - - <_> - - - - <_>8 18 3 1 -1. - <_>9 18 1 1 3. - 0 - 2.9284600168466568e-003 - 0.5071274042129517 - 0.2028204947710037 - <_> - - <_> - - - - <_>11 10 2 2 -1. - <_>12 10 1 1 2. - <_>11 11 1 1 2. - 0 - 4.5256470912136137e-005 - 0.4812104105949402 - 0.5430821776390076 - <_> - - <_> - - - - <_>7 10 2 2 -1. - <_>7 10 1 1 2. - <_>8 11 1 1 2. - 0 - 1.3158309739083052e-003 - 0.4625813961029053 - 0.6779323220252991 - <_> - - <_> - - - - <_>11 11 4 4 -1. - <_>11 13 4 2 2. - 0 - 1.5870389761403203e-003 - 0.5386291742324829 - 0.3431465029716492 - <_> - - <_> - - - - <_>8 12 3 8 -1. - <_>9 12 1 8 3. - 0 - -0.0215396601706743 - 0.0259425006806850 - 0.5003222823143005 - <_> - - <_> - - - - <_>13 0 6 3 -1. - <_>13 1 6 1 3. - 0 - 0.0143344802781940 - 0.5202844738960266 - 0.1590632945299149 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>9 8 1 4 3. - 0 - -8.3881383761763573e-003 - 0.7282481193542481 - 0.4648044109344482 - <_> - - <_> - - - - <_>5 7 10 10 -1. - <_>10 7 5 5 2. - <_>5 12 5 5 2. - 0 - 9.1906841844320297e-003 - 0.5562356710433960 - 0.3923191130161285 - <_> - - <_> - - - - <_>3 18 8 2 -1. - <_>3 18 4 1 2. - <_>7 19 4 1 2. - 0 - -5.8453059755265713e-003 - 0.6803392767906189 - 0.4629127979278565 - <_> - - <_> - - - - <_>10 2 6 8 -1. - <_>12 2 2 8 3. - 0 - -0.0547077991068363 - 0.2561671137809753 - 0.5206125974655151 - <_> - - <_> - - - - <_>4 2 6 8 -1. - <_>6 2 2 8 3. - 0 - 9.1142775490880013e-003 - 0.5189620256423950 - 0.3053877055644989 - <_> - - <_> - - - - <_>11 0 3 7 -1. - <_>12 0 1 7 3. - 0 - -0.0155750000849366 - 0.1295074969530106 - 0.5169094800949097 - <_> - - <_> - - - - <_>7 11 2 1 -1. - <_>8 11 1 1 2. - 0 - -1.2050600344082341e-004 - 0.5735098123550415 - 0.4230825006961823 - <_> - - <_> - - - - <_>15 14 1 3 -1. - <_>15 15 1 1 3. - 0 - 1.2273970060050488e-003 - 0.5289878249168396 - 0.4079791903495789 - <_> - - <_> - - - - <_>7 15 2 2 -1. - <_>7 15 1 1 2. - <_>8 16 1 1 2. - 0 - -1.2186600361019373e-003 - 0.6575639843940735 - 0.4574409127235413 - <_> - - <_> - - - - <_>15 14 1 3 -1. - <_>15 15 1 1 3. - 0 - -3.3256649039685726e-003 - 0.3628047108650208 - 0.5195019841194153 - <_> - - <_> - - - - <_>6 0 3 7 -1. - <_>7 0 1 7 3. - 0 - -0.0132883097976446 - 0.1284265965223312 - 0.5043488740921021 - <_> - - <_> - - - - <_>18 1 2 7 -1. - <_>18 1 1 7 2. - 0 - -3.3839771058410406e-003 - 0.6292240023612976 - 0.4757505953311920 - <_> - - <_> - - - - <_>2 0 8 20 -1. - <_>2 10 8 10 2. - 0 - -0.2195422053337097 - 0.1487731933593750 - 0.5065013766288757 - <_> - - <_> - - - - <_>3 0 15 6 -1. - <_>3 2 15 2 3. - 0 - 4.9111708067357540e-003 - 0.4256102144718170 - 0.5665838718414307 - <_> - - <_> - - - - <_>4 3 12 2 -1. - <_>4 4 12 1 2. - 0 - -1.8744950648397207e-004 - 0.4004144072532654 - 0.5586857199668884 - <_> - - <_> - - - - <_>16 0 4 5 -1. - <_>16 0 2 5 2. - 0 - -5.2178641781210899e-003 - 0.6009116172790527 - 0.4812706112861633 - <_> - - <_> - - - - <_>7 0 3 4 -1. - <_>8 0 1 4 3. - 0 - -1.1111519997939467e-003 - 0.3514933884143829 - 0.5287089943885803 - <_> - - <_> - - - - <_>16 0 4 5 -1. - <_>16 0 2 5 2. - 0 - 4.4036400504410267e-003 - 0.4642275869846344 - 0.5924085974693298 - <_> - - <_> - - - - <_>1 7 6 13 -1. - <_>3 7 2 13 3. - 0 - 0.1229949966073036 - 0.5025529265403748 - 0.0691524818539619 - <_> - - <_> - - - - <_>16 0 4 5 -1. - <_>16 0 2 5 2. - 0 - -0.0123135102912784 - 0.5884591937065125 - 0.4934012889862061 - <_> - - <_> - - - - <_>0 0 4 5 -1. - <_>2 0 2 5 2. - 0 - 4.1471039876341820e-003 - 0.4372239112854004 - 0.5893477797508240 - <_> - - <_> - - - - <_>14 12 3 6 -1. - <_>14 14 3 2 3. - 0 - -3.5502649843692780e-003 - 0.4327551126480103 - 0.5396270155906677 - <_> - - <_> - - - - <_>3 12 3 6 -1. - <_>3 14 3 2 3. - 0 - -0.0192242693156004 - 0.1913134008646011 - 0.5068330764770508 - <_> - - <_> - - - - <_>16 1 4 3 -1. - <_>16 2 4 1 3. - 0 - 1.4395059552043676e-003 - 0.5308178067207336 - 0.4243533015251160 - <_> - - <_> - - - - <_>8 7 2 10 -1. - <_>8 7 1 5 2. - <_>9 12 1 5 2. - 0 - -6.7751999013125896e-003 - 0.6365395784378052 - 0.4540086090564728 - <_> - - <_> - - - - <_>11 11 4 4 -1. - <_>11 13 4 2 2. - 0 - 7.0119630545377731e-003 - 0.5189834237098694 - 0.3026199936866760 - <_> - - <_> - - - - <_>0 1 4 3 -1. - <_>0 2 4 1 3. - 0 - 5.4014651104807854e-003 - 0.5105062127113342 - 0.2557682991027832 - <_> - - <_> - - - - <_>13 4 1 3 -1. - <_>13 5 1 1 3. - 0 - 9.0274988906458020e-004 - 0.4696914851665497 - 0.5861827731132507 - <_> - - <_> - - - - <_>7 15 3 5 -1. - <_>8 15 1 5 3. - 0 - 0.0114744501188397 - 0.5053645968437195 - 0.1527177989482880 - <_> - - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - -6.7023430019617081e-003 - 0.6508980989456177 - 0.4890604019165039 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -2.0462959073483944e-003 - 0.6241816878318787 - 0.4514600038528442 - <_> - - <_> - - - - <_>10 6 4 14 -1. - <_>10 6 2 14 2. - 0 - -9.9951568990945816e-003 - 0.3432781100273132 - 0.5400953888893127 - <_> - - <_> - - - - <_>0 5 5 6 -1. - <_>0 7 5 2 3. - 0 - -0.0357007086277008 - 0.1878059059381485 - 0.5074077844619751 - <_> - - <_> - - - - <_>9 5 6 4 -1. - <_>9 5 3 4 2. - 0 - 4.5584561303257942e-004 - 0.3805277049541473 - 0.5402569770812988 - <_> - - <_> - - - - <_>0 0 18 10 -1. - <_>6 0 6 10 3. - 0 - -0.0542606003582478 - 0.6843714714050293 - 0.4595097005367279 - <_> - - <_> - - - - <_>10 6 4 14 -1. - <_>10 6 2 14 2. - 0 - 6.0600461438298225e-003 - 0.5502905249595642 - 0.4500527977943420 - <_> - - <_> - - - - <_>6 6 4 14 -1. - <_>8 6 2 14 2. - 0 - -6.4791832119226456e-003 - 0.3368858098983765 - 0.5310757160186768 - <_> - - <_> - - - - <_>13 4 1 3 -1. - <_>13 5 1 1 3. - 0 - -1.4939469983801246e-003 - 0.6487640142440796 - 0.4756175875663757 - <_> - - <_> - - - - <_>5 1 2 3 -1. - <_>6 1 1 3 2. - 0 - 1.4610530342906713e-005 - 0.4034579098224640 - 0.5451064109802246 - <_> - - <_> - - - - <_>18 1 2 18 -1. - <_>19 1 1 9 2. - <_>18 10 1 9 2. - 0 - -7.2321938350796700e-003 - 0.6386873722076416 - 0.4824739992618561 - <_> - - <_> - - - - <_>2 1 4 3 -1. - <_>2 2 4 1 3. - 0 - -4.0645818226039410e-003 - 0.2986421883106232 - 0.5157335996627808 - <_> - - <_> - - - - <_>18 1 2 18 -1. - <_>19 1 1 9 2. - <_>18 10 1 9 2. - 0 - 0.0304630808532238 - 0.5022199749946594 - 0.7159956097602844 - <_> - - <_> - - - - <_>1 14 4 6 -1. - <_>1 14 2 3 2. - <_>3 17 2 3 2. - 0 - -8.0544911324977875e-003 - 0.6492452025413513 - 0.4619275033473969 - <_> - - <_> - - - - <_>10 11 7 6 -1. - <_>10 13 7 2 3. - 0 - 0.0395051389932632 - 0.5150570869445801 - 0.2450613975524902 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - 8.4530208259820938e-003 - 0.4573669135570526 - 0.6394037008285523 - <_> - - <_> - - - - <_>11 0 3 4 -1. - <_>12 0 1 4 3. - 0 - -1.1688120430335402e-003 - 0.3865512013435364 - 0.5483661293983460 - <_> - - <_> - - - - <_>5 10 5 6 -1. - <_>5 13 5 3 2. - 0 - 2.8070670086890459e-003 - 0.5128579139709473 - 0.2701480090618134 - <_> - - <_> - - - - <_>14 6 1 8 -1. - <_>14 10 1 4 2. - 0 - 4.7365209320560098e-004 - 0.4051581919193268 - 0.5387461185455322 - <_> - - <_> - - - - <_>1 7 18 6 -1. - <_>1 7 9 3 2. - <_>10 10 9 3 2. - 0 - 0.0117410803213716 - 0.5295950174331665 - 0.3719413876533508 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>9 7 1 2 2. - 0 - 3.1833238899707794e-003 - 0.4789406955242157 - 0.6895126104354858 - <_> - - <_> - - - - <_>5 9 4 5 -1. - <_>7 9 2 5 2. - 0 - 7.0241501089185476e-004 - 0.5384489297866821 - 0.3918080925941467 - 54.6200714111328130 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>7 6 6 3 -1. - <_>9 6 2 3 3. - 0 - 0.0170599296689034 - 0.3948527872562408 - 0.7142534852027893 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - 0.0218408405780792 - 0.3370316028594971 - 0.6090016961097717 - <_> - - <_> - - - - <_>7 15 2 4 -1. - <_>7 17 2 2 2. - 0 - 2.4520049919374287e-004 - 0.3500576019287109 - 0.5987902283668518 - <_> - - <_> - - - - <_>1 0 19 9 -1. - <_>1 3 19 3 3. - 0 - 8.3272606134414673e-003 - 0.3267528116703033 - 0.5697240829467773 - <_> - - <_> - - - - <_>3 7 3 6 -1. - <_>3 9 3 2 3. - 0 - 5.7148298947140574e-004 - 0.3044599890708923 - 0.5531656742095947 - <_> - - <_> - - - - <_>13 7 4 4 -1. - <_>15 7 2 2 2. - <_>13 9 2 2 2. - 0 - 6.7373987985774875e-004 - 0.3650012016296387 - 0.5672631263732910 - <_> - - <_> - - - - <_>3 7 4 4 -1. - <_>3 7 2 2 2. - <_>5 9 2 2 2. - 0 - 3.4681590477703139e-005 - 0.3313541114330292 - 0.5388727188110352 - <_> - - <_> - - - - <_>9 6 10 8 -1. - <_>9 10 10 4 2. - 0 - -5.8563398197293282e-003 - 0.2697942852973938 - 0.5498778820037842 - <_> - - <_> - - - - <_>3 8 14 12 -1. - <_>3 14 14 6 2. - 0 - 8.5102273151278496e-003 - 0.5269358158111572 - 0.2762879133224487 - <_> - - <_> - - - - <_>6 5 10 12 -1. - <_>11 5 5 6 2. - <_>6 11 5 6 2. - 0 - -0.0698172077536583 - 0.2909603118896484 - 0.5259246826171875 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -8.6113670840859413e-004 - 0.5892577171325684 - 0.4073697924613953 - <_> - - <_> - - - - <_>9 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 9.7149249631911516e-004 - 0.3523564040660858 - 0.5415862202644348 - <_> - - <_> - - - - <_>9 4 2 4 -1. - <_>9 6 2 2 2. - 0 - -1.4727490452060010e-005 - 0.5423017740249634 - 0.3503156006336212 - <_> - - <_> - - - - <_>9 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 0.0484202913939953 - 0.5193945765495300 - 0.3411195874214172 - <_> - - <_> - - - - <_>5 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 1.3257140526548028e-003 - 0.3157769143581390 - 0.5335376262664795 - <_> - - <_> - - - - <_>11 2 6 1 -1. - <_>13 2 2 1 3. - 0 - 1.4922149603080470e-005 - 0.4451299905776978 - 0.5536553859710693 - <_> - - <_> - - - - <_>3 2 6 1 -1. - <_>5 2 2 1 3. - 0 - -2.7173398993909359e-003 - 0.3031741976737976 - 0.5248088836669922 - <_> - - <_> - - - - <_>13 5 2 3 -1. - <_>13 6 2 1 3. - 0 - 2.9219500720500946e-003 - 0.4781453013420105 - 0.6606041789054871 - <_> - - <_> - - - - <_>0 10 1 4 -1. - <_>0 12 1 2 2. - 0 - -1.9804988987743855e-003 - 0.3186308145523071 - 0.5287625193595886 - <_> - - <_> - - - - <_>13 5 2 3 -1. - <_>13 6 2 1 3. - 0 - -4.0012109093368053e-003 - 0.6413596868515015 - 0.4749928116798401 - <_> - - <_> - - - - <_>8 18 3 2 -1. - <_>9 18 1 2 3. - 0 - -4.3491991236805916e-003 - 0.1507498025894165 - 0.5098996758460999 - <_> - - <_> - - - - <_>6 15 9 2 -1. - <_>6 16 9 1 2. - 0 - 1.3490889687091112e-003 - 0.4316158890724182 - 0.5881167054176331 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 0.0185970701277256 - 0.4735553860664368 - 0.9089794158935547 - <_> - - <_> - - - - <_>18 4 2 4 -1. - <_>18 6 2 2 2. - 0 - -1.8562379991635680e-003 - 0.3553189039230347 - 0.5577837228775024 - <_> - - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - 2.2940430790185928e-003 - 0.4500094950199127 - 0.6580877900123596 - <_> - - <_> - - - - <_>15 16 3 2 -1. - <_>15 17 3 1 2. - 0 - 2.9982850537635386e-004 - 0.5629242062568665 - 0.3975878953933716 - <_> - - <_> - - - - <_>0 0 3 9 -1. - <_>0 3 3 3 3. - 0 - 3.5455459728837013e-003 - 0.5381547212600708 - 0.3605485856533051 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>9 8 3 1 3. - 0 - 9.6104722470045090e-003 - 0.5255997180938721 - 0.1796745955944061 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - -6.2783220782876015e-003 - 0.2272856980562210 - 0.5114030241966248 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>9 5 1 6 2. - 0 - 3.4598479978740215e-003 - 0.4626308083534241 - 0.6608219146728516 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -1.3112019514665008e-003 - 0.6317539811134338 - 0.4436857998371124 - <_> - - <_> - - - - <_>7 6 8 12 -1. - <_>11 6 4 6 2. - <_>7 12 4 6 2. - 0 - 2.6876179035753012e-003 - 0.5421109795570374 - 0.4054022133350372 - <_> - - <_> - - - - <_>5 6 8 12 -1. - <_>5 6 4 6 2. - <_>9 12 4 6 2. - 0 - 3.9118169806897640e-003 - 0.5358477830886841 - 0.3273454904556274 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -0.0142064504325390 - 0.7793576717376709 - 0.4975781142711639 - <_> - - <_> - - - - <_>2 16 3 2 -1. - <_>2 17 3 1 2. - 0 - 7.1705528534948826e-004 - 0.5297319889068604 - 0.3560903966426849 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 1.6635019565001130e-003 - 0.4678094089031220 - 0.5816481709480286 - <_> - - <_> - - - - <_>2 12 6 6 -1. - <_>2 14 6 2 3. - 0 - 3.3686188980937004e-003 - 0.5276734232902527 - 0.3446420133113861 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - 0.0127995302900672 - 0.4834679961204529 - 0.7472159266471863 - <_> - - <_> - - - - <_>6 14 6 3 -1. - <_>6 15 6 1 3. - 0 - 3.3901201095432043e-003 - 0.4511859118938446 - 0.6401721239089966 - <_> - - <_> - - - - <_>14 15 5 3 -1. - <_>14 16 5 1 3. - 0 - 4.7070779837667942e-003 - 0.5335658788681030 - 0.3555220961570740 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.4819339849054813e-003 - 0.4250707030296326 - 0.5772724151611328 - <_> - - <_> - - - - <_>14 15 5 3 -1. - <_>14 16 5 1 3. - 0 - -6.9995759986341000e-003 - 0.3003320097923279 - 0.5292900204658508 - <_> - - <_> - - - - <_>5 3 6 2 -1. - <_>7 3 2 2 3. - 0 - 0.0159390103071928 - 0.5067319273948669 - 0.1675581932067871 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 7.6377349905669689e-003 - 0.4795069992542267 - 0.7085601091384888 - <_> - - <_> - - - - <_>1 15 5 3 -1. - <_>1 16 5 1 3. - 0 - 6.7334040068089962e-003 - 0.5133113265037537 - 0.2162470072507858 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>10 13 2 3 2. - <_>8 16 2 3 2. - 0 - -0.0128588099032640 - 0.1938841938972473 - 0.5251371860504150 - <_> - - <_> - - - - <_>7 8 3 3 -1. - <_>8 8 1 3 3. - 0 - -6.2270800117403269e-004 - 0.5686538219451904 - 0.4197868108749390 - <_> - - <_> - - - - <_>12 0 5 4 -1. - <_>12 2 5 2 2. - 0 - -5.2651681471616030e-004 - 0.4224168956279755 - 0.5429695844650269 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>0 2 10 1 2. - <_>10 3 10 1 2. - 0 - 0.0110750999301672 - 0.5113775134086609 - 0.2514517903327942 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0367282517254353 - 0.7194662094116211 - 0.4849618971347809 - <_> - - <_> - - - - <_>4 3 6 1 -1. - <_>6 3 2 1 3. - 0 - -2.8207109426148236e-004 - 0.3840261995792389 - 0.5394446253776550 - <_> - - <_> - - - - <_>4 18 13 2 -1. - <_>4 19 13 1 2. - 0 - -2.7489690110087395e-003 - 0.5937088727951050 - 0.4569182097911835 - <_> - - <_> - - - - <_>2 10 3 6 -1. - <_>2 12 3 2 3. - 0 - 0.0100475195795298 - 0.5138576030731201 - 0.2802298069000244 - <_> - - <_> - - - - <_>14 12 6 8 -1. - <_>17 12 3 4 2. - <_>14 16 3 4 2. - 0 - -8.1497840583324432e-003 - 0.6090037226676941 - 0.4636121094226837 - <_> - - <_> - - - - <_>4 13 10 6 -1. - <_>4 13 5 3 2. - <_>9 16 5 3 2. - 0 - -6.8833888508379459e-003 - 0.3458611071109772 - 0.5254660248756409 - <_> - - <_> - - - - <_>14 12 1 2 -1. - <_>14 13 1 1 2. - 0 - -1.4039360394235700e-005 - 0.5693104267120361 - 0.4082083106040955 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 1.5498419525101781e-003 - 0.4350537061691284 - 0.5806517004966736 - <_> - - <_> - - - - <_>14 12 2 2 -1. - <_>14 13 2 1 2. - 0 - -6.7841499112546444e-003 - 0.1468873023986816 - 0.5182775259017944 - <_> - - <_> - - - - <_>4 12 2 2 -1. - <_>4 13 2 1 2. - 0 - 2.1705629478674382e-004 - 0.5293524265289307 - 0.3456174135208130 - <_> - - <_> - - - - <_>8 12 9 2 -1. - <_>8 13 9 1 2. - 0 - 3.1198898795992136e-004 - 0.4652450978755951 - 0.5942413806915283 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 5.4507530294358730e-003 - 0.4653508961200714 - 0.7024846076965332 - <_> - - <_> - - - - <_>11 10 3 6 -1. - <_>11 13 3 3 2. - 0 - -2.5818689027801156e-004 - 0.5497295260429382 - 0.3768967092037201 - <_> - - <_> - - - - <_>5 6 9 12 -1. - <_>5 12 9 6 2. - 0 - -0.0174425393342972 - 0.3919087946414948 - 0.5457497835159302 - <_> - - <_> - - - - <_>11 10 3 6 -1. - <_>11 13 3 3 2. - 0 - -0.0453435294330120 - 0.1631357073783875 - 0.5154908895492554 - <_> - - <_> - - - - <_>6 10 3 6 -1. - <_>6 13 3 3 2. - 0 - 1.9190689781680703e-003 - 0.5145897865295410 - 0.2791895866394043 - <_> - - <_> - - - - <_>5 4 11 3 -1. - <_>5 5 11 1 3. - 0 - -6.0177869163453579e-003 - 0.6517636179924011 - 0.4756332933902741 - <_> - - <_> - - - - <_>7 1 5 10 -1. - <_>7 6 5 5 2. - 0 - -4.0720738470554352e-003 - 0.5514652729034424 - 0.4092685878276825 - <_> - - <_> - - - - <_>2 8 18 2 -1. - <_>2 9 18 1 2. - 0 - 3.9855059003457427e-004 - 0.3165240883827210 - 0.5285550951957703 - <_> - - <_> - - - - <_>7 17 5 3 -1. - <_>7 18 5 1 3. - 0 - -6.5418570302426815e-003 - 0.6853377819061279 - 0.4652808904647827 - <_> - - <_> - - - - <_>5 9 12 1 -1. - <_>9 9 4 1 3. - 0 - 3.4845089539885521e-003 - 0.5484588146209717 - 0.4502759873867035 - <_> - - <_> - - - - <_>0 14 6 6 -1. - <_>0 14 3 3 2. - <_>3 17 3 3 2. - 0 - -0.0136967804282904 - 0.6395779848098755 - 0.4572555124759674 - <_> - - <_> - - - - <_>5 9 12 1 -1. - <_>9 9 4 1 3. - 0 - -0.0173471402376890 - 0.2751072943210602 - 0.5181614756584168 - <_> - - <_> - - - - <_>3 9 12 1 -1. - <_>7 9 4 1 3. - 0 - -4.0885428898036480e-003 - 0.3325636088848114 - 0.5194984078407288 - <_> - - <_> - - - - <_>14 10 6 7 -1. - <_>14 10 3 7 2. - 0 - -9.4687901437282562e-003 - 0.5942280888557434 - 0.4851819872856140 - <_> - - <_> - - - - <_>1 0 16 2 -1. - <_>1 1 16 1 2. - 0 - 1.7084840219467878e-003 - 0.4167110919952393 - 0.5519806146621704 - <_> - - <_> - - - - <_>10 9 10 9 -1. - <_>10 12 10 3 3. - 0 - 9.4809094443917274e-003 - 0.5433894991874695 - 0.4208514988422394 - <_> - - <_> - - - - <_>0 1 10 2 -1. - <_>5 1 5 2 2. - 0 - -4.7389650717377663e-003 - 0.6407189965248108 - 0.4560655057430267 - <_> - - <_> - - - - <_>17 3 2 3 -1. - <_>17 4 2 1 3. - 0 - 6.5761050209403038e-003 - 0.5214555263519287 - 0.2258227020502091 - <_> - - <_> - - - - <_>1 3 2 3 -1. - <_>1 4 2 1 3. - 0 - -2.1690549328923225e-003 - 0.3151527941226959 - 0.5156704783439636 - <_> - - <_> - - - - <_>9 7 3 6 -1. - <_>10 7 1 6 3. - 0 - 0.0146601703017950 - 0.4870837032794952 - 0.6689941287040710 - <_> - - <_> - - - - <_>6 5 4 3 -1. - <_>8 5 2 3 2. - 0 - 1.7231999663636088e-004 - 0.3569748997688294 - 0.5251078009605408 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>9 5 2 6 3. - 0 - -0.0218037609010935 - 0.8825920820236206 - 0.4966329932212830 - <_> - - <_> - - - - <_>3 4 12 12 -1. - <_>3 4 6 6 2. - <_>9 10 6 6 2. - 0 - -0.0947361066937447 - 0.1446162015199661 - 0.5061113834381104 - <_> - - <_> - - - - <_>9 2 6 15 -1. - <_>11 2 2 15 3. - 0 - 5.5825551971793175e-003 - 0.5396478772163391 - 0.4238066077232361 - <_> - - <_> - - - - <_>2 2 6 17 -1. - <_>4 2 2 17 3. - 0 - 1.9517090404406190e-003 - 0.4170410931110382 - 0.5497786998748779 - <_> - - <_> - - - - <_>14 10 6 7 -1. - <_>14 10 3 7 2. - 0 - 0.0121499001979828 - 0.4698367118835449 - 0.5664274096488953 - <_> - - <_> - - - - <_>0 10 6 7 -1. - <_>3 10 3 7 2. - 0 - -7.5169620104134083e-003 - 0.6267772912979126 - 0.4463135898113251 - <_> - - <_> - - - - <_>9 2 6 15 -1. - <_>11 2 2 15 3. - 0 - -0.0716679096221924 - 0.3097011148929596 - 0.5221003293991089 - <_> - - <_> - - - - <_>5 2 6 15 -1. - <_>7 2 2 15 3. - 0 - -0.0882924199104309 - 0.0811238884925842 - 0.5006365180015564 - <_> - - <_> - - - - <_>17 9 3 6 -1. - <_>17 11 3 2 3. - 0 - 0.0310630798339844 - 0.5155503749847412 - 0.1282255947589874 - <_> - - <_> - - - - <_>6 7 6 6 -1. - <_>8 7 2 6 3. - 0 - 0.0466218404471874 - 0.4699777960777283 - 0.7363960742950440 - <_> - - <_> - - - - <_>1 10 18 6 -1. - <_>10 10 9 3 2. - <_>1 13 9 3 2. - 0 - -0.0121894897893071 - 0.3920530080795288 - 0.5518996715545654 - <_> - - <_> - - - - <_>0 9 10 9 -1. - <_>0 12 10 3 3. - 0 - 0.0130161102861166 - 0.5260658264160156 - 0.3685136139392853 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - -3.4952899441123009e-003 - 0.6339294910430908 - 0.4716280996799469 - <_> - - <_> - - - - <_>5 12 3 4 -1. - <_>5 14 3 2 2. - 0 - -4.4015039748046547e-005 - 0.5333027243614197 - 0.3776184916496277 - <_> - - <_> - - - - <_>3 3 16 12 -1. - <_>3 9 16 6 2. - 0 - -0.1096649020910263 - 0.1765342056751251 - 0.5198346972465515 - <_> - - <_> - - - - <_>1 1 12 12 -1. - <_>1 1 6 6 2. - <_>7 7 6 6 2. - 0 - -9.0279558207839727e-004 - 0.5324159860610962 - 0.3838908076286316 - <_> - - <_> - - - - <_>10 4 2 4 -1. - <_>11 4 1 2 2. - <_>10 6 1 2 2. - 0 - 7.1126641705632210e-004 - 0.4647929966449738 - 0.5755224227905273 - <_> - - <_> - - - - <_>0 9 10 2 -1. - <_>0 9 5 1 2. - <_>5 10 5 1 2. - 0 - -3.1250279862433672e-003 - 0.3236708939075470 - 0.5166770815849304 - <_> - - <_> - - - - <_>9 11 3 3 -1. - <_>9 12 3 1 3. - 0 - 2.4144679773598909e-003 - 0.4787439107894898 - 0.6459717750549316 - <_> - - <_> - - - - <_>3 12 9 2 -1. - <_>3 13 9 1 2. - 0 - 4.4391240226104856e-004 - 0.4409308135509491 - 0.6010255813598633 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -2.2611189342569560e-004 - 0.4038113951683044 - 0.5493255853652954 - 50.1697311401367190 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>3 4 13 6 -1. - <_>3 6 13 2 3. - 0 - -0.0469012893736362 - 0.6600171923637390 - 0.3743801116943359 - <_> - - <_> - - - - <_>9 7 6 4 -1. - <_>12 7 3 2 2. - <_>9 9 3 2 2. - 0 - -1.4568349579349160e-003 - 0.5783991217613220 - 0.3437797129154205 - <_> - - <_> - - - - <_>1 0 6 8 -1. - <_>4 0 3 8 2. - 0 - 5.5598369799554348e-003 - 0.3622266948223114 - 0.5908216238021851 - <_> - - <_> - - - - <_>9 5 2 12 -1. - <_>9 11 2 6 2. - 0 - 7.3170487303286791e-004 - 0.5500419139862061 - 0.2873558104038239 - <_> - - <_> - - - - <_>4 4 3 10 -1. - <_>4 9 3 5 2. - 0 - 1.3318009441718459e-003 - 0.2673169970512390 - 0.5431019067764282 - <_> - - <_> - - - - <_>6 17 8 3 -1. - <_>6 18 8 1 3. - 0 - 2.4347059661522508e-004 - 0.3855027854442596 - 0.5741388797760010 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -3.0512469820678234e-003 - 0.5503209829330444 - 0.3462845087051392 - <_> - - <_> - - - - <_>13 2 3 2 -1. - <_>13 3 3 1 2. - 0 - -6.8657199153676629e-004 - 0.3291221857070923 - 0.5429509282112122 - <_> - - <_> - - - - <_>7 5 4 5 -1. - <_>9 5 2 5 2. - 0 - 1.4668200165033340e-003 - 0.3588382005691528 - 0.5351811051368713 - <_> - - <_> - - - - <_>12 14 3 6 -1. - <_>12 16 3 2 3. - 0 - 3.2021870720200241e-004 - 0.4296841919422150 - 0.5700234174728394 - <_> - - <_> - - - - <_>1 11 8 2 -1. - <_>1 12 8 1 2. - 0 - 7.4122188379988074e-004 - 0.5282164812088013 - 0.3366870880126953 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - 3.8330298848450184e-003 - 0.4559567868709564 - 0.6257336139678955 - <_> - - <_> - - - - <_>0 5 3 6 -1. - <_>0 7 3 2 3. - 0 - -0.0154564399272203 - 0.2350116968154907 - 0.5129452943801880 - <_> - - <_> - - - - <_>13 2 3 2 -1. - <_>13 3 3 1 2. - 0 - 2.6796779129654169e-003 - 0.5329415202140808 - 0.4155062139034271 - <_> - - <_> - - - - <_>4 14 4 6 -1. - <_>4 14 2 3 2. - <_>6 17 2 3 2. - 0 - 2.8296569362282753e-003 - 0.4273087978363037 - 0.5804538130760193 - <_> - - <_> - - - - <_>13 2 3 2 -1. - <_>13 3 3 1 2. - 0 - -3.9444249123334885e-003 - 0.2912611961364746 - 0.5202686190605164 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - 2.7179559692740440e-003 - 0.5307688117027283 - 0.3585677146911621 - <_> - - <_> - - - - <_>14 0 6 8 -1. - <_>17 0 3 4 2. - <_>14 4 3 4 2. - 0 - 5.9077627956867218e-003 - 0.4703775048255920 - 0.5941585898399353 - <_> - - <_> - - - - <_>7 17 3 2 -1. - <_>8 17 1 2 3. - 0 - -4.2240349575877190e-003 - 0.2141567021608353 - 0.5088796019554138 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 4.0725888684391975e-003 - 0.4766413867473602 - 0.6841061115264893 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 0 4 6 2. - <_>10 6 4 6 2. - 0 - 0.0101495301350951 - 0.5360798835754395 - 0.3748497068881989 - <_> - - <_> - - - - <_>14 0 2 10 -1. - <_>15 0 1 5 2. - <_>14 5 1 5 2. - 0 - -1.8864999583456665e-004 - 0.5720130205154419 - 0.3853805065155029 - <_> - - <_> - - - - <_>5 3 8 6 -1. - <_>5 3 4 3 2. - <_>9 6 4 3 2. - 0 - -4.8864358104765415e-003 - 0.3693122863769531 - 0.5340958833694458 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 0.0261584799736738 - 0.4962374866008759 - 0.6059989929199219 - <_> - - <_> - - - - <_>9 14 1 2 -1. - <_>9 15 1 1 2. - 0 - 4.8560759751126170e-004 - 0.4438945949077606 - 0.6012468934059143 - <_> - - <_> - - - - <_>15 10 4 3 -1. - <_>15 11 4 1 3. - 0 - 0.0112687097862363 - 0.5244250297546387 - 0.1840388029813767 - <_> - - <_> - - - - <_>8 14 2 3 -1. - <_>8 15 2 1 3. - 0 - -2.8114619199186563e-003 - 0.6060283780097961 - 0.4409897029399872 - <_> - - <_> - - - - <_>3 13 14 4 -1. - <_>10 13 7 2 2. - <_>3 15 7 2 2. - 0 - -5.6112729944288731e-003 - 0.3891170918941498 - 0.5589237213134766 - <_> - - <_> - - - - <_>1 10 4 3 -1. - <_>1 11 4 1 3. - 0 - 8.5680093616247177e-003 - 0.5069345831871033 - 0.2062619030475617 - <_> - - <_> - - - - <_>9 11 6 1 -1. - <_>11 11 2 1 3. - 0 - -3.8172779022715986e-004 - 0.5882201790809631 - 0.4192610979080200 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -1.7680290329735726e-004 - 0.5533605813980103 - 0.4003368914127350 - <_> - - <_> - - - - <_>3 5 16 15 -1. - <_>3 10 16 5 3. - 0 - 6.5112537704408169e-003 - 0.3310146927833557 - 0.5444191098213196 - <_> - - <_> - - - - <_>6 12 4 2 -1. - <_>8 12 2 2 2. - 0 - -6.5948683186434209e-005 - 0.5433831810951233 - 0.3944905996322632 - <_> - - <_> - - - - <_>4 4 12 10 -1. - <_>10 4 6 5 2. - <_>4 9 6 5 2. - 0 - 6.9939051754772663e-003 - 0.5600358247756958 - 0.4192714095115662 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -4.6744439750909805e-003 - 0.6685466766357422 - 0.4604960978031158 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>10 12 2 4 2. - <_>8 16 2 4 2. - 0 - 0.0115898502990603 - 0.5357121229171753 - 0.2926830053329468 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 0.0130078401416540 - 0.4679817855358124 - 0.7307463288307190 - <_> - - <_> - - - - <_>12 2 3 2 -1. - <_>13 2 1 2 3. - 0 - -1.1008579749614000e-003 - 0.3937501013278961 - 0.5415065288543701 - <_> - - <_> - - - - <_>8 15 3 2 -1. - <_>8 16 3 1 2. - 0 - 6.0472649056464434e-004 - 0.4242376089096069 - 0.5604041218757629 - <_> - - <_> - - - - <_>6 0 9 14 -1. - <_>9 0 3 14 3. - 0 - -0.0144948400557041 - 0.3631210029125214 - 0.5293182730674744 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>10 6 1 3 2. - 0 - -5.3056948818266392e-003 - 0.6860452294349670 - 0.4621821045875549 - <_> - - <_> - - - - <_>10 8 2 3 -1. - <_>10 9 2 1 3. - 0 - -8.1829127157106996e-004 - 0.3944096863269806 - 0.5420439243316650 - <_> - - <_> - - - - <_>0 9 4 6 -1. - <_>0 11 4 2 3. - 0 - -0.0190775208175182 - 0.1962621957063675 - 0.5037891864776611 - <_> - - <_> - - - - <_>6 0 8 2 -1. - <_>6 1 8 1 2. - 0 - 3.5549470339901745e-004 - 0.4086259007453919 - 0.5613973140716553 - <_> - - <_> - - - - <_>6 14 7 3 -1. - <_>6 15 7 1 3. - 0 - 1.9679730758070946e-003 - 0.4489121139049530 - 0.5926123261451721 - <_> - - <_> - - - - <_>8 10 8 9 -1. - <_>8 13 8 3 3. - 0 - 6.9189141504466534e-003 - 0.5335925817489624 - 0.3728385865688324 - <_> - - <_> - - - - <_>5 2 3 2 -1. - <_>6 2 1 2 3. - 0 - 2.9872779268771410e-003 - 0.5111321210861206 - 0.2975643873214722 - <_> - - <_> - - - - <_>14 1 6 8 -1. - <_>17 1 3 4 2. - <_>14 5 3 4 2. - 0 - -6.2264618463814259e-003 - 0.5541489720344544 - 0.4824537932872772 - <_> - - <_> - - - - <_>0 1 6 8 -1. - <_>0 1 3 4 2. - <_>3 5 3 4 2. - 0 - 0.0133533002808690 - 0.4586423933506012 - 0.6414797902107239 - <_> - - <_> - - - - <_>1 2 18 6 -1. - <_>10 2 9 3 2. - <_>1 5 9 3 2. - 0 - 0.0335052385926247 - 0.5392425060272217 - 0.3429994881153107 - <_> - - <_> - - - - <_>9 3 2 1 -1. - <_>10 3 1 1 2. - 0 - -2.5294460356235504e-003 - 0.1703713983297348 - 0.5013315081596375 - <_> - - <_> - - - - <_>13 2 4 6 -1. - <_>15 2 2 3 2. - <_>13 5 2 3 2. - 0 - -1.2801629491150379e-003 - 0.5305461883544922 - 0.4697405099868774 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 7.0687388069927692e-003 - 0.4615545868873596 - 0.6436504721641541 - <_> - - <_> - - - - <_>13 5 1 3 -1. - <_>13 6 1 1 3. - 0 - 9.6880499040707946e-004 - 0.4833599030971527 - 0.6043894290924072 - <_> - - <_> - - - - <_>2 16 5 3 -1. - <_>2 17 5 1 3. - 0 - 3.9647659286856651e-003 - 0.5187637209892273 - 0.3231816887855530 - <_> - - <_> - - - - <_>13 2 4 6 -1. - <_>15 2 2 3 2. - <_>13 5 2 3 2. - 0 - -0.0220577307045460 - 0.4079256951808929 - 0.5200980901718140 - <_> - - <_> - - - - <_>3 2 4 6 -1. - <_>3 2 2 3 2. - <_>5 5 2 3 2. - 0 - -6.6906312713399529e-004 - 0.5331609249114990 - 0.3815600872039795 - <_> - - <_> - - - - <_>13 5 1 2 -1. - <_>13 6 1 1 2. - 0 - -6.7009328631684184e-004 - 0.5655422210693359 - 0.4688901901245117 - <_> - - <_> - - - - <_>5 5 2 2 -1. - <_>5 6 2 1 2. - 0 - 7.4284552829340100e-004 - 0.4534381031990051 - 0.6287400126457214 - <_> - - <_> - - - - <_>13 9 2 2 -1. - <_>13 9 1 2 2. - 0 - 2.2227810695767403e-003 - 0.5350633263587952 - 0.3303655982017517 - <_> - - <_> - - - - <_>5 9 2 2 -1. - <_>6 9 1 2 2. - 0 - -5.4130521602928638e-003 - 0.1113687008619309 - 0.5005434751510620 - <_> - - <_> - - - - <_>13 17 3 2 -1. - <_>13 18 3 1 2. - 0 - -1.4520040167553816e-005 - 0.5628737807273865 - 0.4325133860111237 - <_> - - <_> - - - - <_>6 16 4 4 -1. - <_>6 16 2 2 2. - <_>8 18 2 2 2. - 0 - 2.3369169502984732e-004 - 0.4165835082530975 - 0.5447791218757629 - <_> - - <_> - - - - <_>9 16 2 3 -1. - <_>9 17 2 1 3. - 0 - 4.2894547805190086e-003 - 0.4860391020774841 - 0.6778649091720581 - <_> - - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - 5.9103150852024555e-003 - 0.5262305140495300 - 0.3612113893032074 - <_> - - <_> - - - - <_>9 14 2 6 -1. - <_>9 17 2 3 2. - 0 - 0.0129005396738648 - 0.5319377183914185 - 0.3250288069248200 - <_> - - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - 4.6982979401946068e-003 - 0.4618245065212250 - 0.6665925979614258 - <_> - - <_> - - - - <_>1 10 18 6 -1. - <_>1 12 18 2 3. - 0 - 0.0104398597031832 - 0.5505670905113220 - 0.3883604109287262 - <_> - - <_> - - - - <_>8 11 4 2 -1. - <_>8 12 4 1 2. - 0 - 3.0443191062659025e-003 - 0.4697853028774262 - 0.7301844954490662 - <_> - - <_> - - - - <_>7 9 6 2 -1. - <_>7 10 6 1 2. - 0 - -6.1593751888722181e-004 - 0.3830839097499847 - 0.5464984178543091 - <_> - - <_> - - - - <_>8 8 2 3 -1. - <_>8 9 2 1 3. - 0 - -3.4247159492224455e-003 - 0.2566300034523010 - 0.5089530944824219 - <_> - - <_> - - - - <_>17 5 3 4 -1. - <_>18 5 1 4 3. - 0 - -9.3538565561175346e-003 - 0.6469966173171997 - 0.4940795898437500 - <_> - - <_> - - - - <_>1 19 18 1 -1. - <_>7 19 6 1 3. - 0 - 0.0523389987647533 - 0.4745982885360718 - 0.7878770828247070 - <_> - - <_> - - - - <_>9 0 3 2 -1. - <_>10 0 1 2 3. - 0 - 3.5765620414167643e-003 - 0.5306664705276489 - 0.2748498022556305 - <_> - - <_> - - - - <_>1 8 1 6 -1. - <_>1 10 1 2 3. - 0 - 7.1555317845195532e-004 - 0.5413125753402710 - 0.4041908979415894 - <_> - - <_> - - - - <_>12 17 8 3 -1. - <_>12 17 4 3 2. - 0 - -0.0105166798457503 - 0.6158512234687805 - 0.4815283119678497 - <_> - - <_> - - - - <_>0 5 3 4 -1. - <_>1 5 1 4 3. - 0 - 7.7347927726805210e-003 - 0.4695805907249451 - 0.7028980851173401 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -4.3226778507232666e-003 - 0.2849566042423248 - 0.5304684042930603 - <_> - - <_> - - - - <_>7 11 2 2 -1. - <_>7 11 1 1 2. - <_>8 12 1 1 2. - 0 - -2.5534399319440126e-003 - 0.7056984901428223 - 0.4688892066478729 - <_> - - <_> - - - - <_>11 3 2 5 -1. - <_>11 3 1 5 2. - 0 - 1.0268510231981054e-004 - 0.3902932107448578 - 0.5573464035987854 - <_> - - <_> - - - - <_>7 3 2 5 -1. - <_>8 3 1 5 2. - 0 - 7.1395188570022583e-006 - 0.3684231936931610 - 0.5263987779617310 - <_> - - <_> - - - - <_>15 13 2 3 -1. - <_>15 14 2 1 3. - 0 - -1.6711989883333445e-003 - 0.3849175870418549 - 0.5387271046638489 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>5 7 2 1 3. - 0 - 4.9260449595749378e-003 - 0.4729771912097931 - 0.7447251081466675 - <_> - - <_> - - - - <_>4 19 15 1 -1. - <_>9 19 5 1 3. - 0 - 4.3908702209591866e-003 - 0.4809181094169617 - 0.5591921806335449 - <_> - - <_> - - - - <_>1 19 15 1 -1. - <_>6 19 5 1 3. - 0 - -0.0177936293184757 - 0.6903678178787231 - 0.4676927030086517 - <_> - - <_> - - - - <_>15 13 2 3 -1. - <_>15 14 2 1 3. - 0 - 2.0469669252634048e-003 - 0.5370690226554871 - 0.3308162093162537 - <_> - - <_> - - - - <_>5 0 4 15 -1. - <_>7 0 2 15 2. - 0 - 0.0298914890736341 - 0.5139865279197693 - 0.3309059143066406 - <_> - - <_> - - - - <_>9 6 2 5 -1. - <_>9 6 1 5 2. - 0 - 1.5494900289922953e-003 - 0.4660237133502960 - 0.6078342795372009 - <_> - - <_> - - - - <_>9 5 2 7 -1. - <_>10 5 1 7 2. - 0 - 1.4956969534978271e-003 - 0.4404835999011993 - 0.5863919854164124 - <_> - - <_> - - - - <_>16 11 3 3 -1. - <_>16 12 3 1 3. - 0 - 9.5885928021743894e-004 - 0.5435971021652222 - 0.4208523035049439 - <_> - - <_> - - - - <_>1 11 3 3 -1. - <_>1 12 3 1 3. - 0 - 4.9643701640889049e-004 - 0.5370578169822693 - 0.4000622034072876 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 7 8 1 3. - 0 - -2.7280810754746199e-003 - 0.5659412741661072 - 0.4259642958641052 - <_> - - <_> - - - - <_>0 15 6 2 -1. - <_>0 16 6 1 2. - 0 - 2.3026480339467525e-003 - 0.5161657929420471 - 0.3350869119167328 - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>7 0 6 6 3. - 0 - 0.2515163123607636 - 0.4869661927223206 - 0.7147309780120850 - <_> - - <_> - - - - <_>6 0 3 4 -1. - <_>7 0 1 4 3. - 0 - -4.6328022144734859e-003 - 0.2727448940277100 - 0.5083789825439453 - <_> - - <_> - - - - <_>14 10 4 10 -1. - <_>16 10 2 5 2. - <_>14 15 2 5 2. - 0 - -0.0404344908893108 - 0.6851438879966736 - 0.5021767020225525 - <_> - - <_> - - - - <_>3 2 3 2 -1. - <_>4 2 1 2 3. - 0 - 1.4972220014897175e-005 - 0.4284465014934540 - 0.5522555112838745 - <_> - - <_> - - - - <_>11 2 2 2 -1. - <_>11 3 2 1 2. - 0 - -2.4050309730228037e-004 - 0.4226118922233582 - 0.5390074849128723 - <_> - - <_> - - - - <_>2 10 4 10 -1. - <_>2 10 2 5 2. - <_>4 15 2 5 2. - 0 - 0.0236578397452831 - 0.4744631946086884 - 0.7504366040229797 - <_> - - <_> - - - - <_>0 13 20 6 -1. - <_>10 13 10 3 2. - <_>0 16 10 3 2. - 0 - -8.1449104472994804e-003 - 0.4245058894157410 - 0.5538362860679627 - <_> - - <_> - - - - <_>0 5 2 15 -1. - <_>1 5 1 15 2. - 0 - -3.6992130335420370e-003 - 0.5952357053756714 - 0.4529713094234467 - <_> - - <_> - - - - <_>1 7 18 4 -1. - <_>10 7 9 2 2. - <_>1 9 9 2 2. - 0 - -6.7718601785600185e-003 - 0.4137794077396393 - 0.5473399758338928 - <_> - - <_> - - - - <_>0 0 2 17 -1. - <_>1 0 1 17 2. - 0 - 4.2669530957937241e-003 - 0.4484114944934845 - 0.5797994136810303 - <_> - - <_> - - - - <_>2 6 16 6 -1. - <_>10 6 8 3 2. - <_>2 9 8 3 2. - 0 - 1.7791989957913756e-003 - 0.5624858736991882 - 0.4432444870471954 - <_> - - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - 1.6774770338088274e-003 - 0.4637751877307892 - 0.6364241838455200 - <_> - - <_> - - - - <_>8 15 4 2 -1. - <_>8 16 4 1 2. - 0 - 1.1732629500329494e-003 - 0.4544503092765808 - 0.5914415717124939 - <_> - - <_> - - - - <_>5 2 8 2 -1. - <_>5 2 4 1 2. - <_>9 3 4 1 2. - 0 - 8.6998171173036098e-004 - 0.5334752798080444 - 0.3885917961597443 - <_> - - <_> - - - - <_>6 11 8 6 -1. - <_>6 14 8 3 2. - 0 - 7.6378340600058436e-004 - 0.5398585200309753 - 0.3744941949844360 - <_> - - <_> - - - - <_>9 13 2 2 -1. - <_>9 14 2 1 2. - 0 - 1.5684569370932877e-004 - 0.4317873120307922 - 0.5614616274833679 - <_> - - <_> - - - - <_>18 4 2 6 -1. - <_>18 6 2 2 3. - 0 - -0.0215113703161478 - 0.1785925030708313 - 0.5185542702674866 - <_> - - <_> - - - - <_>9 12 2 2 -1. - <_>9 13 2 1 2. - 0 - 1.3081369979772717e-004 - 0.4342499077320099 - 0.5682849884033203 - <_> - - <_> - - - - <_>18 4 2 6 -1. - <_>18 6 2 2 3. - 0 - 0.0219920407980680 - 0.5161716938018799 - 0.2379394024610519 - <_> - - <_> - - - - <_>9 13 1 3 -1. - <_>9 14 1 1 3. - 0 - -8.0136500764638186e-004 - 0.5986763238906860 - 0.4466426968574524 - <_> - - <_> - - - - <_>18 4 2 6 -1. - <_>18 6 2 2 3. - 0 - -8.2736099138855934e-003 - 0.4108217954635620 - 0.5251057147979736 - <_> - - <_> - - - - <_>0 4 2 6 -1. - <_>0 6 2 2 3. - 0 - 3.6831789184361696e-003 - 0.5173814296722412 - 0.3397518098354340 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - -7.9525681212544441e-003 - 0.6888983249664307 - 0.4845924079418182 - <_> - - <_> - - - - <_>3 13 2 3 -1. - <_>3 14 2 1 3. - 0 - 1.5382299898192286e-003 - 0.5178567171096802 - 0.3454113900661469 - <_> - - <_> - - - - <_>13 13 4 3 -1. - <_>13 14 4 1 3. - 0 - -0.0140435304492712 - 0.1678421050310135 - 0.5188667774200440 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.4315890148282051e-003 - 0.4368256926536560 - 0.5655773878097534 - <_> - - <_> - - - - <_>5 2 10 6 -1. - <_>5 4 10 2 3. - 0 - -0.0340142287313938 - 0.7802296280860901 - 0.4959217011928558 - <_> - - <_> - - - - <_>3 13 4 3 -1. - <_>3 14 4 1 3. - 0 - -0.0120272999629378 - 0.1585101038217545 - 0.5032231807708740 - <_> - - <_> - - - - <_>3 7 15 5 -1. - <_>8 7 5 5 3. - 0 - 0.1331661939620972 - 0.5163304805755615 - 0.2755128145217896 - <_> - - <_> - - - - <_>3 7 12 2 -1. - <_>7 7 4 2 3. - 0 - -1.5221949433907866e-003 - 0.3728317916393280 - 0.5214552283287048 - <_> - - <_> - - - - <_>10 3 3 9 -1. - <_>11 3 1 9 3. - 0 - -9.3929271679371595e-004 - 0.5838379263877869 - 0.4511165022850037 - <_> - - <_> - - - - <_>8 6 4 6 -1. - <_>10 6 2 6 2. - 0 - 0.0277197398245335 - 0.4728286862373352 - 0.7331544756889343 - <_> - - <_> - - - - <_>9 7 4 3 -1. - <_>9 8 4 1 3. - 0 - 3.1030150130391121e-003 - 0.5302202105522156 - 0.4101563096046448 - <_> - - <_> - - - - <_>0 9 4 9 -1. - <_>2 9 2 9 2. - 0 - 0.0778612196445465 - 0.4998334050178528 - 0.1272961944341660 - <_> - - <_> - - - - <_>9 13 3 5 -1. - <_>10 13 1 5 3. - 0 - -0.0158549398183823 - 0.0508333593606949 - 0.5165656208992004 - <_> - - <_> - - - - <_>7 7 6 3 -1. - <_>9 7 2 3 3. - 0 - -4.9725300632417202e-003 - 0.6798133850097656 - 0.4684231877326965 - <_> - - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - -9.7676506265997887e-004 - 0.6010771989822388 - 0.4788931906223297 - <_> - - <_> - - - - <_>5 7 8 2 -1. - <_>9 7 4 2 2. - 0 - -2.4647710379213095e-003 - 0.3393397927284241 - 0.5220503807067871 - <_> - - <_> - - - - <_>5 9 12 2 -1. - <_>9 9 4 2 3. - 0 - -6.7937700077891350e-003 - 0.4365136921405792 - 0.5239663124084473 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>10 6 5 3 2. - 0 - 0.0326080210506916 - 0.5052723884582520 - 0.2425214946269989 - <_> - - <_> - - - - <_>10 12 3 1 -1. - <_>11 12 1 1 3. - 0 - -5.8514421107247472e-004 - 0.5733973979949951 - 0.4758574068546295 - <_> - - <_> - - - - <_>0 1 11 15 -1. - <_>0 6 11 5 3. - 0 - -0.0296326000243425 - 0.3892289102077484 - 0.5263597965240479 - 66.6691207885742190 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>7 0 6 6 3. - 0 - 0.0465508513152599 - 0.3276950120925903 - 0.6240522861480713 - <_> - - <_> - - - - <_>7 7 6 1 -1. - <_>9 7 2 1 3. - 0 - 7.9537127166986465e-003 - 0.4256485104560852 - 0.6942939162254334 - <_> - - <_> - - - - <_>5 16 6 4 -1. - <_>5 16 3 2 2. - <_>8 18 3 2 2. - 0 - 6.8221561377868056e-004 - 0.3711487054824829 - 0.5900732874870300 - <_> - - <_> - - - - <_>6 5 9 8 -1. - <_>6 9 9 4 2. - 0 - -1.9348249770700932e-004 - 0.2041133940219879 - 0.5300545096397400 - <_> - - <_> - - - - <_>5 10 2 6 -1. - <_>5 13 2 3 2. - 0 - -2.6710508973337710e-004 - 0.5416126251220703 - 0.3103179037570953 - <_> - - <_> - - - - <_>7 6 8 10 -1. - <_>11 6 4 5 2. - <_>7 11 4 5 2. - 0 - 2.7818060480058193e-003 - 0.5277832746505737 - 0.3467069864273071 - <_> - - <_> - - - - <_>5 6 8 10 -1. - <_>5 6 4 5 2. - <_>9 11 4 5 2. - 0 - -4.6779078547842801e-004 - 0.5308231115341187 - 0.3294492065906525 - <_> - - <_> - - - - <_>9 5 2 2 -1. - <_>9 6 2 1 2. - 0 - -3.0335160772665404e-005 - 0.5773872733116150 - 0.3852097094058991 - <_> - - <_> - - - - <_>5 12 8 2 -1. - <_>5 13 8 1 2. - 0 - 7.8038009814918041e-004 - 0.4317438900470734 - 0.6150057911872864 - <_> - - <_> - - - - <_>10 2 8 2 -1. - <_>10 3 8 1 2. - 0 - -4.2553851380944252e-003 - 0.2933903932571411 - 0.5324292778968811 - <_> - - <_> - - - - <_>4 0 2 10 -1. - <_>4 0 1 5 2. - <_>5 5 1 5 2. - 0 - -2.4735610350035131e-004 - 0.5468844771385193 - 0.3843030035495758 - <_> - - <_> - - - - <_>9 10 2 2 -1. - <_>9 11 2 1 2. - 0 - -1.4724259381182492e-004 - 0.4281542897224426 - 0.5755587220191956 - <_> - - <_> - - - - <_>2 8 15 3 -1. - <_>2 9 15 1 3. - 0 - 1.1864770203828812e-003 - 0.3747301101684570 - 0.5471466183662415 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 2.3936580400913954e-003 - 0.4537783861160278 - 0.6111528873443604 - <_> - - <_> - - - - <_>7 2 3 2 -1. - <_>8 2 1 2 3. - 0 - -1.5390539774671197e-003 - 0.2971341907978058 - 0.5189538002014160 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -7.1968790143728256e-003 - 0.6699066758155823 - 0.4726476967334747 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -4.1499789222143590e-004 - 0.3384954035282135 - 0.5260317921638489 - <_> - - <_> - - - - <_>17 2 3 6 -1. - <_>17 4 3 2 3. - 0 - 4.4359830208122730e-003 - 0.5399122238159180 - 0.3920140862464905 - <_> - - <_> - - - - <_>1 5 3 4 -1. - <_>2 5 1 4 3. - 0 - 2.6606200262904167e-003 - 0.4482578039169312 - 0.6119617819786072 - <_> - - <_> - - - - <_>14 8 4 6 -1. - <_>14 10 4 2 3. - 0 - -1.5287200221791863e-003 - 0.3711237907409668 - 0.5340266227722168 - <_> - - <_> - - - - <_>1 4 3 8 -1. - <_>2 4 1 8 3. - 0 - -4.7397250309586525e-003 - 0.6031088232994080 - 0.4455145001411438 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>8 16 4 3 2. - 0 - -0.0148291299119592 - 0.2838754057884216 - 0.5341861844062805 - <_> - - <_> - - - - <_>3 14 2 2 -1. - <_>3 15 2 1 2. - 0 - 9.2275557108223438e-004 - 0.5209547281265259 - 0.3361653983592987 - <_> - - <_> - - - - <_>14 8 4 6 -1. - <_>14 10 4 2 3. - 0 - 0.0835298076272011 - 0.5119969844818115 - 0.0811644494533539 - <_> - - <_> - - - - <_>2 8 4 6 -1. - <_>2 10 4 2 3. - 0 - -7.5633148662745953e-004 - 0.3317120075225830 - 0.5189831256866455 - <_> - - <_> - - - - <_>10 14 1 6 -1. - <_>10 17 1 3 2. - 0 - 9.8403859883546829e-003 - 0.5247598290443420 - 0.2334959059953690 - <_> - - <_> - - - - <_>7 5 3 6 -1. - <_>8 5 1 6 3. - 0 - -1.5953830443322659e-003 - 0.5750094056129456 - 0.4295622110366821 - <_> - - <_> - - - - <_>11 2 2 6 -1. - <_>12 2 1 3 2. - <_>11 5 1 3 2. - 0 - 3.4766020689858124e-005 - 0.4342445135116577 - 0.5564029216766357 - <_> - - <_> - - - - <_>6 6 6 5 -1. - <_>8 6 2 5 3. - 0 - 0.0298629105091095 - 0.4579147100448608 - 0.6579188108444214 - <_> - - <_> - - - - <_>17 1 3 6 -1. - <_>17 3 3 2 3. - 0 - 0.0113255903124809 - 0.5274311900138855 - 0.3673888146877289 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -8.7828645482659340e-003 - 0.7100368738174439 - 0.4642167091369629 - <_> - - <_> - - - - <_>9 18 3 2 -1. - <_>10 18 1 2 3. - 0 - 4.3639959767460823e-003 - 0.5279216170310974 - 0.2705877125263214 - <_> - - <_> - - - - <_>8 18 3 2 -1. - <_>9 18 1 2 3. - 0 - 4.1804728098213673e-003 - 0.5072525143623352 - 0.2449083030223846 - <_> - - <_> - - - - <_>12 3 5 2 -1. - <_>12 4 5 1 2. - 0 - -4.5668511302210391e-004 - 0.4283105134963989 - 0.5548691153526306 - <_> - - <_> - - - - <_>7 1 5 12 -1. - <_>7 7 5 6 2. - 0 - -3.7140368949621916e-003 - 0.5519387722015381 - 0.4103653132915497 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0253042895346880 - 0.6867002248764038 - 0.4869889020919800 - <_> - - <_> - - - - <_>4 2 2 2 -1. - <_>4 3 2 1 2. - 0 - -3.4454080741852522e-004 - 0.3728874027729034 - 0.5287693142890930 - <_> - - <_> - - - - <_>11 14 4 2 -1. - <_>13 14 2 1 2. - <_>11 15 2 1 2. - 0 - -8.3935231668874621e-004 - 0.6060152053833008 - 0.4616062045097351 - <_> - - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 0.0172800496220589 - 0.5049635767936707 - 0.1819823980331421 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -6.3595077954232693e-003 - 0.1631239950656891 - 0.5232778787612915 - <_> - - <_> - - - - <_>5 5 1 3 -1. - <_>5 6 1 1 3. - 0 - 1.0298109846189618e-003 - 0.4463278055191040 - 0.6176549196243286 - <_> - - <_> - - - - <_>10 10 6 1 -1. - <_>10 10 3 1 2. - 0 - 1.0117109632119536e-003 - 0.5473384857177734 - 0.4300698935985565 - <_> - - <_> - - - - <_>4 10 6 1 -1. - <_>7 10 3 1 2. - 0 - -0.0103088002651930 - 0.1166985034942627 - 0.5000867247581482 - <_> - - <_> - - - - <_>9 17 3 3 -1. - <_>9 18 3 1 3. - 0 - 5.4682018235325813e-003 - 0.4769287109375000 - 0.6719213724136353 - <_> - - <_> - - - - <_>4 14 1 3 -1. - <_>4 15 1 1 3. - 0 - -9.1696460731327534e-004 - 0.3471089899539948 - 0.5178164839744568 - <_> - - <_> - - - - <_>12 5 3 3 -1. - <_>12 6 3 1 3. - 0 - 2.3922820109874010e-003 - 0.4785236120223999 - 0.6216310858726502 - <_> - - <_> - - - - <_>4 5 12 3 -1. - <_>4 6 12 1 3. - 0 - -7.5573818758130074e-003 - 0.5814796090126038 - 0.4410085082054138 - <_> - - <_> - - - - <_>9 8 2 3 -1. - <_>9 9 2 1 3. - 0 - -7.7024032361805439e-004 - 0.3878000080585480 - 0.5465722084045410 - <_> - - <_> - - - - <_>4 9 3 3 -1. - <_>5 9 1 3 3. - 0 - -8.7125990539789200e-003 - 0.1660051047801971 - 0.4995836019515991 - <_> - - <_> - - - - <_>6 0 9 17 -1. - <_>9 0 3 17 3. - 0 - -0.0103063201531768 - 0.4093391001224518 - 0.5274233818054199 - <_> - - <_> - - - - <_>9 12 1 3 -1. - <_>9 13 1 1 3. - 0 - -2.0940979011356831e-003 - 0.6206194758415222 - 0.4572280049324036 - <_> - - <_> - - - - <_>9 5 2 15 -1. - <_>9 10 2 5 3. - 0 - 6.8099051713943481e-003 - 0.5567759275436401 - 0.4155600070953369 - <_> - - <_> - - - - <_>8 14 2 3 -1. - <_>8 15 2 1 3. - 0 - -1.0746059706434608e-003 - 0.5638927817344666 - 0.4353024959564209 - <_> - - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - 2.1550289820879698e-003 - 0.4826265871524811 - 0.6749758124351502 - <_> - - <_> - - - - <_>7 1 6 5 -1. - <_>9 1 2 5 3. - 0 - 0.0317423194646835 - 0.5048379898071289 - 0.1883248984813690 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>0 0 10 2 2. - 0 - -0.0783827230334282 - 0.2369548976421356 - 0.5260158181190491 - <_> - - <_> - - - - <_>2 13 5 3 -1. - <_>2 14 5 1 3. - 0 - 5.7415119372308254e-003 - 0.5048828721046448 - 0.2776469886302948 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -2.9014600440859795e-003 - 0.6238604784011841 - 0.4693317115306854 - <_> - - <_> - - - - <_>2 5 9 15 -1. - <_>2 10 9 5 3. - 0 - -2.6427931152284145e-003 - 0.3314141929149628 - 0.5169777274131775 - <_> - - <_> - - - - <_>5 0 12 10 -1. - <_>11 0 6 5 2. - <_>5 5 6 5 2. - 0 - -0.1094966009259224 - 0.2380045056343079 - 0.5183441042900085 - <_> - - <_> - - - - <_>5 1 2 3 -1. - <_>6 1 1 3 2. - 0 - 7.4075913289561868e-005 - 0.4069635868072510 - 0.5362150073051453 - <_> - - <_> - - - - <_>10 7 6 1 -1. - <_>12 7 2 1 3. - 0 - -5.0593802006915212e-004 - 0.5506706237792969 - 0.4374594092369080 - <_> - - <_> - - - - <_>3 1 2 10 -1. - <_>3 1 1 5 2. - <_>4 6 1 5 2. - 0 - -8.2131777890026569e-004 - 0.5525709986686707 - 0.4209375977516174 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - -6.0276539443293586e-005 - 0.5455474853515625 - 0.4748266041278839 - <_> - - <_> - - - - <_>4 13 4 6 -1. - <_>4 15 4 2 3. - 0 - 6.8065142259001732e-003 - 0.5157995820045471 - 0.3424577116966248 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - 1.7202789895236492e-003 - 0.5013207793235779 - 0.6331263780593872 - <_> - - <_> - - - - <_>5 7 2 1 -1. - <_>6 7 1 1 2. - 0 - -1.3016929733566940e-004 - 0.5539718270301819 - 0.4226869940757752 - <_> - - <_> - - - - <_>2 12 18 4 -1. - <_>11 12 9 2 2. - <_>2 14 9 2 2. - 0 - -4.8016388900578022e-003 - 0.4425095021724701 - 0.5430780053138733 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>5 7 1 1 2. - <_>6 8 1 1 2. - 0 - -2.5399310979992151e-003 - 0.7145782113075256 - 0.4697605073451996 - <_> - - <_> - - - - <_>16 3 4 2 -1. - <_>16 4 4 1 2. - 0 - -1.4278929447755218e-003 - 0.4070445001125336 - 0.5399605035781860 - <_> - - <_> - - - - <_>0 2 2 18 -1. - <_>0 2 1 9 2. - <_>1 11 1 9 2. - 0 - -0.0251425504684448 - 0.7884690761566162 - 0.4747352004051209 - <_> - - <_> - - - - <_>1 2 18 4 -1. - <_>10 2 9 2 2. - <_>1 4 9 2 2. - 0 - -3.8899609353393316e-003 - 0.4296191930770874 - 0.5577110052108765 - <_> - - <_> - - - - <_>9 14 1 3 -1. - <_>9 15 1 1 3. - 0 - 4.3947459198534489e-003 - 0.4693162143230438 - 0.7023944258689880 - <_> - - <_> - - - - <_>2 12 18 4 -1. - <_>11 12 9 2 2. - <_>2 14 9 2 2. - 0 - 0.0246784202754498 - 0.5242322087287903 - 0.3812510073184967 - <_> - - <_> - - - - <_>0 12 18 4 -1. - <_>0 12 9 2 2. - <_>9 14 9 2 2. - 0 - 0.0380476787686348 - 0.5011739730834961 - 0.1687828004360199 - <_> - - <_> - - - - <_>11 4 5 3 -1. - <_>11 5 5 1 3. - 0 - 7.9424865543842316e-003 - 0.4828582108020783 - 0.6369568109512329 - <_> - - <_> - - - - <_>6 4 7 3 -1. - <_>6 5 7 1 3. - 0 - -1.5110049862414598e-003 - 0.5906485915184021 - 0.4487667977809906 - <_> - - <_> - - - - <_>13 17 3 3 -1. - <_>13 18 3 1 3. - 0 - 6.4201741479337215e-003 - 0.5241097807884216 - 0.2990570068359375 - <_> - - <_> - - - - <_>8 1 3 4 -1. - <_>9 1 1 4 3. - 0 - -2.9802159406244755e-003 - 0.3041465878486633 - 0.5078489780426025 - <_> - - <_> - - - - <_>11 4 2 4 -1. - <_>11 4 1 4 2. - 0 - -7.4580078944563866e-004 - 0.4128139019012451 - 0.5256826281547546 - <_> - - <_> - - - - <_>0 17 9 3 -1. - <_>3 17 3 3 3. - 0 - -0.0104709500446916 - 0.5808395147323608 - 0.4494296014308929 - <_> - - <_> - - - - <_>11 0 2 8 -1. - <_>12 0 1 4 2. - <_>11 4 1 4 2. - 0 - 9.3369204550981522e-003 - 0.5246552824974060 - 0.2658948898315430 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>0 8 3 6 2. - <_>3 14 3 6 2. - 0 - 0.0279369000345469 - 0.4674955010414124 - 0.7087256908416748 - <_> - - <_> - - - - <_>10 7 4 12 -1. - <_>10 13 4 6 2. - 0 - 7.4277678504586220e-003 - 0.5409486889839172 - 0.3758518099784851 - <_> - - <_> - - - - <_>5 3 8 14 -1. - <_>5 10 8 7 2. - 0 - -0.0235845092684031 - 0.3758639991283417 - 0.5238550901412964 - <_> - - <_> - - - - <_>14 10 6 1 -1. - <_>14 10 3 1 2. - 0 - 1.1452640173956752e-003 - 0.4329578876495361 - 0.5804247260093689 - <_> - - <_> - - - - <_>0 4 10 4 -1. - <_>0 6 10 2 2. - 0 - -4.3468660442158580e-004 - 0.5280618071556091 - 0.3873069882392883 - <_> - - <_> - - - - <_>10 0 5 8 -1. - <_>10 4 5 4 2. - 0 - 0.0106485402211547 - 0.4902113080024719 - 0.5681251883506775 - <_> - - <_> - - - - <_>8 1 4 8 -1. - <_>8 1 2 4 2. - <_>10 5 2 4 2. - 0 - -3.9418050437234342e-004 - 0.5570880174636841 - 0.4318251013755798 - <_> - - <_> - - - - <_>9 11 6 1 -1. - <_>11 11 2 1 3. - 0 - -1.3270479394122958e-004 - 0.5658439993858337 - 0.4343554973602295 - <_> - - <_> - - - - <_>8 9 3 4 -1. - <_>9 9 1 4 3. - 0 - -2.0125510636717081e-003 - 0.6056739091873169 - 0.4537523984909058 - <_> - - <_> - - - - <_>18 4 2 6 -1. - <_>18 6 2 2 3. - 0 - 2.4854319635778666e-003 - 0.5390477180480957 - 0.4138010144233704 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>9 8 1 4 3. - 0 - 1.8237880431115627e-003 - 0.4354828894138336 - 0.5717188715934753 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -0.0166566595435143 - 0.3010913133621216 - 0.5216122865676880 - <_> - - <_> - - - - <_>7 13 6 1 -1. - <_>9 13 2 1 3. - 0 - 8.0349558265879750e-004 - 0.5300151109695435 - 0.3818396925926209 - <_> - - <_> - - - - <_>12 11 3 6 -1. - <_>12 13 3 2 3. - 0 - 3.4170378930866718e-003 - 0.5328028798103333 - 0.4241400063037872 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -3.6222729249857366e-004 - 0.5491728186607361 - 0.4186977148056030 - <_> - - <_> - - - - <_>1 4 18 10 -1. - <_>10 4 9 5 2. - <_>1 9 9 5 2. - 0 - -0.1163002029061317 - 0.1440722048282623 - 0.5226451158523560 - <_> - - <_> - - - - <_>8 6 4 9 -1. - <_>8 9 4 3 3. - 0 - -0.0146950101479888 - 0.7747725248336792 - 0.4715717136859894 - <_> - - <_> - - - - <_>8 6 4 3 -1. - <_>8 7 4 1 3. - 0 - 2.1972130052745342e-003 - 0.5355433821678162 - 0.3315644860267639 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -4.6965209185145795e-004 - 0.5767235159873962 - 0.4458136856555939 - <_> - - <_> - - - - <_>14 15 4 3 -1. - <_>14 16 4 1 3. - 0 - 6.5144998952746391e-003 - 0.5215674042701721 - 0.3647888898849487 - <_> - - <_> - - - - <_>5 10 3 10 -1. - <_>6 10 1 10 3. - 0 - 0.0213000606745481 - 0.4994204938411713 - 0.1567950993776321 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 3.1881409231573343e-003 - 0.4742200076580048 - 0.6287270188331604 - <_> - - <_> - - - - <_>0 8 1 6 -1. - <_>0 10 1 2 3. - 0 - 9.0019777417182922e-004 - 0.5347954034805298 - 0.3943752050399780 - <_> - - <_> - - - - <_>10 15 1 3 -1. - <_>10 16 1 1 3. - 0 - -5.1772277802228928e-003 - 0.6727191805839539 - 0.5013138055801392 - <_> - - <_> - - - - <_>2 15 4 3 -1. - <_>2 16 4 1 3. - 0 - -4.3764649890363216e-003 - 0.3106675148010254 - 0.5128793120384216 - <_> - - <_> - - - - <_>18 3 2 8 -1. - <_>19 3 1 4 2. - <_>18 7 1 4 2. - 0 - 2.6299960445612669e-003 - 0.4886310100555420 - 0.5755215883255005 - <_> - - <_> - - - - <_>0 3 2 8 -1. - <_>0 3 1 4 2. - <_>1 7 1 4 2. - 0 - -2.0458688959479332e-003 - 0.6025794148445129 - 0.4558076858520508 - <_> - - <_> - - - - <_>3 7 14 10 -1. - <_>10 7 7 5 2. - <_>3 12 7 5 2. - 0 - 0.0694827064871788 - 0.5240747928619385 - 0.2185259014368057 - <_> - - <_> - - - - <_>0 7 19 3 -1. - <_>0 8 19 1 3. - 0 - 0.0240489393472672 - 0.5011867284774780 - 0.2090622037649155 - <_> - - <_> - - - - <_>12 6 3 3 -1. - <_>12 7 3 1 3. - 0 - 3.1095340382307768e-003 - 0.4866712093353272 - 0.7108548283576965 - <_> - - <_> - - - - <_>0 6 1 3 -1. - <_>0 7 1 1 3. - 0 - -1.2503260513767600e-003 - 0.3407891094684601 - 0.5156195163726807 - <_> - - <_> - - - - <_>12 6 3 3 -1. - <_>12 7 3 1 3. - 0 - -1.0281190043315291e-003 - 0.5575572252273560 - 0.4439432024955750 - <_> - - <_> - - - - <_>5 6 3 3 -1. - <_>5 7 3 1 3. - 0 - -8.8893622159957886e-003 - 0.6402000784873962 - 0.4620442092418671 - <_> - - <_> - - - - <_>8 2 4 2 -1. - <_>8 3 4 1 2. - 0 - -6.1094801640138030e-004 - 0.3766441941261292 - 0.5448899865150452 - <_> - - <_> - - - - <_>6 3 4 12 -1. - <_>8 3 2 12 2. - 0 - -5.7686357758939266e-003 - 0.3318648934364319 - 0.5133677124977112 - <_> - - <_> - - - - <_>13 6 2 3 -1. - <_>13 7 2 1 3. - 0 - 1.8506490159779787e-003 - 0.4903570115566254 - 0.6406934857368469 - <_> - - <_> - - - - <_>0 10 20 4 -1. - <_>0 12 20 2 2. - 0 - -0.0997994691133499 - 0.1536051034927368 - 0.5015562176704407 - <_> - - <_> - - - - <_>2 0 17 14 -1. - <_>2 7 17 7 2. - 0 - -0.3512834906578064 - 0.0588231310248375 - 0.5174378752708435 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - -0.0452445708215237 - 0.6961488723754883 - 0.4677872955799103 - <_> - - <_> - - - - <_>14 6 6 4 -1. - <_>14 6 3 4 2. - 0 - 0.0714815780520439 - 0.5167986154556274 - 0.1038092970848084 - <_> - - <_> - - - - <_>0 6 6 4 -1. - <_>3 6 3 4 2. - 0 - 2.1895780228078365e-003 - 0.4273078143596649 - 0.5532060861587524 - <_> - - <_> - - - - <_>13 2 7 2 -1. - <_>13 3 7 1 2. - 0 - -5.9242651332169771e-004 - 0.4638943970203400 - 0.5276389122009277 - <_> - - <_> - - - - <_>0 2 7 2 -1. - <_>0 3 7 1 2. - 0 - 1.6788389766588807e-003 - 0.5301648974418640 - 0.3932034969329834 - <_> - - <_> - - - - <_>6 11 14 2 -1. - <_>13 11 7 1 2. - <_>6 12 7 1 2. - 0 - -2.2163488902151585e-003 - 0.5630694031715393 - 0.4757033884525299 - <_> - - <_> - - - - <_>8 5 2 2 -1. - <_>8 5 1 1 2. - <_>9 6 1 1 2. - 0 - 1.1568699846975505e-004 - 0.4307535886764526 - 0.5535702705383301 - <_> - - <_> - - - - <_>13 9 2 3 -1. - <_>13 9 1 3 2. - 0 - -7.2017288766801357e-003 - 0.1444882005453110 - 0.5193064212799072 - <_> - - <_> - - - - <_>1 1 3 12 -1. - <_>2 1 1 12 3. - 0 - 8.9081272017210722e-004 - 0.4384432137012482 - 0.5593621134757996 - <_> - - <_> - - - - <_>17 4 1 3 -1. - <_>17 5 1 1 3. - 0 - 1.9605009583756328e-004 - 0.5340415835380554 - 0.4705956876277924 - <_> - - <_> - - - - <_>2 4 1 3 -1. - <_>2 5 1 1 3. - 0 - 5.2022142335772514e-004 - 0.5213856101036072 - 0.3810079097747803 - <_> - - <_> - - - - <_>14 5 1 3 -1. - <_>14 6 1 1 3. - 0 - 9.4588572392240167e-004 - 0.4769414961338043 - 0.6130738854408264 - <_> - - <_> - - - - <_>7 16 2 3 -1. - <_>7 17 2 1 3. - 0 - 9.1698471806012094e-005 - 0.4245009124279022 - 0.5429363250732422 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>10 13 2 3 2. - <_>8 16 2 3 2. - 0 - 2.1833200007677078e-003 - 0.5457730889320374 - 0.4191075861454010 - <_> - - <_> - - - - <_>5 5 1 3 -1. - <_>5 6 1 1 3. - 0 - -8.6039671441540122e-004 - 0.5764588713645935 - 0.4471659958362579 - <_> - - <_> - - - - <_>16 0 4 20 -1. - <_>16 0 2 20 2. - 0 - -0.0132362395524979 - 0.6372823119163513 - 0.4695009887218475 - <_> - - <_> - - - - <_>5 1 2 6 -1. - <_>5 1 1 3 2. - <_>6 4 1 3 2. - 0 - 4.3376701069064438e-004 - 0.5317873954772949 - 0.3945829868316650 - 67.6989212036132810 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -0.0248471498489380 - 0.6555516719818115 - 0.3873311877250671 - <_> - - <_> - - - - <_>15 2 4 12 -1. - <_>15 2 2 12 2. - 0 - 6.1348611488938332e-003 - 0.3748072087764740 - 0.5973997712135315 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 6.4498498104512691e-003 - 0.5425491929054260 - 0.2548811137676239 - <_> - - <_> - - - - <_>14 5 1 8 -1. - <_>14 9 1 4 2. - 0 - 6.3491211039945483e-004 - 0.2462442070245743 - 0.5387253761291504 - <_> - - <_> - - - - <_>1 4 14 10 -1. - <_>1 4 7 5 2. - <_>8 9 7 5 2. - 0 - 1.4023890253156424e-003 - 0.5594322085380554 - 0.3528657853603363 - <_> - - <_> - - - - <_>11 6 6 14 -1. - <_>14 6 3 7 2. - <_>11 13 3 7 2. - 0 - 3.0044000595808029e-004 - 0.3958503901958466 - 0.5765938162803650 - <_> - - <_> - - - - <_>3 6 6 14 -1. - <_>3 6 3 7 2. - <_>6 13 3 7 2. - 0 - 1.0042409849120304e-004 - 0.3698996901512146 - 0.5534998178482056 - <_> - - <_> - - - - <_>4 9 15 2 -1. - <_>9 9 5 2 3. - 0 - -5.0841490738093853e-003 - 0.3711090981960297 - 0.5547800064086914 - <_> - - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -0.0195372607558966 - 0.7492755055427551 - 0.4579297006130219 - <_> - - <_> - - - - <_>6 3 14 4 -1. - <_>13 3 7 2 2. - <_>6 5 7 2 2. - 0 - -7.4532740654831287e-006 - 0.5649787187576294 - 0.3904069960117340 - <_> - - <_> - - - - <_>1 9 15 2 -1. - <_>6 9 5 2 3. - 0 - -3.6079459823668003e-003 - 0.3381088078022003 - 0.5267801284790039 - <_> - - <_> - - - - <_>6 11 8 9 -1. - <_>6 14 8 3 3. - 0 - 2.0697501022368670e-003 - 0.5519291162490845 - 0.3714388906955719 - <_> - - <_> - - - - <_>7 4 3 8 -1. - <_>8 4 1 8 3. - 0 - -4.6463840408250690e-004 - 0.5608214735984802 - 0.4113566875457764 - <_> - - <_> - - - - <_>14 6 2 6 -1. - <_>14 9 2 3 2. - 0 - 7.5490452582016587e-004 - 0.3559206128120422 - 0.5329356193542481 - <_> - - <_> - - - - <_>5 7 6 4 -1. - <_>5 7 3 2 2. - <_>8 9 3 2 2. - 0 - -9.8322238773107529e-004 - 0.5414795875549316 - 0.3763205111026764 - <_> - - <_> - - - - <_>1 1 18 19 -1. - <_>7 1 6 19 3. - 0 - -0.0199406407773495 - 0.6347903013229370 - 0.4705299139022827 - <_> - - <_> - - - - <_>1 2 6 5 -1. - <_>4 2 3 5 2. - 0 - 3.7680300883948803e-003 - 0.3913489878177643 - 0.5563716292381287 - <_> - - <_> - - - - <_>12 17 6 2 -1. - <_>12 18 6 1 2. - 0 - -9.4528505578637123e-003 - 0.2554892897605896 - 0.5215116739273071 - <_> - - <_> - - - - <_>2 17 6 2 -1. - <_>2 18 6 1 2. - 0 - 2.9560849070549011e-003 - 0.5174679160118103 - 0.3063920140266419 - <_> - - <_> - - - - <_>17 3 3 6 -1. - <_>17 5 3 2 3. - 0 - 9.1078737750649452e-003 - 0.5388448238372803 - 0.2885963022708893 - <_> - - <_> - - - - <_>8 17 3 3 -1. - <_>8 18 3 1 3. - 0 - 1.8219229532405734e-003 - 0.4336043000221252 - 0.5852196812629700 - <_> - - <_> - - - - <_>10 13 2 6 -1. - <_>10 16 2 3 2. - 0 - 0.0146887395530939 - 0.5287361741065979 - 0.2870005965232849 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -0.0143879903480411 - 0.7019448876380920 - 0.4647370874881744 - <_> - - <_> - - - - <_>17 3 3 6 -1. - <_>17 5 3 2 3. - 0 - -0.0189866498112679 - 0.2986552119255066 - 0.5247011780738831 - <_> - - <_> - - - - <_>8 13 2 3 -1. - <_>8 14 2 1 3. - 0 - 1.1527639580890536e-003 - 0.4323473870754242 - 0.5931661725044251 - <_> - - <_> - - - - <_>9 3 6 2 -1. - <_>11 3 2 2 3. - 0 - 0.0109336702153087 - 0.5286864042282105 - 0.3130319118499756 - <_> - - <_> - - - - <_>0 3 3 6 -1. - <_>0 5 3 2 3. - 0 - -0.0149327302351594 - 0.2658419013023377 - 0.5084077119827271 - <_> - - <_> - - - - <_>8 5 4 6 -1. - <_>8 7 4 2 3. - 0 - -2.9970539617352188e-004 - 0.5463526844978333 - 0.3740724027156830 - <_> - - <_> - - - - <_>5 5 3 2 -1. - <_>5 6 3 1 2. - 0 - 4.1677621193230152e-003 - 0.4703496992588043 - 0.7435721755027771 - <_> - - <_> - - - - <_>10 1 3 4 -1. - <_>11 1 1 4 3. - 0 - -6.3905320130288601e-003 - 0.2069258987903595 - 0.5280538201332092 - <_> - - <_> - - - - <_>1 2 5 9 -1. - <_>1 5 5 3 3. - 0 - 4.5029609464108944e-003 - 0.5182648897171021 - 0.3483543097972870 - <_> - - <_> - - - - <_>13 6 2 3 -1. - <_>13 7 2 1 3. - 0 - -9.2040365561842918e-003 - 0.6803777217864990 - 0.4932360053062439 - <_> - - <_> - - - - <_>0 6 14 3 -1. - <_>7 6 7 3 2. - 0 - 0.0813272595405579 - 0.5058398842811585 - 0.2253051996231079 - <_> - - <_> - - - - <_>2 11 18 8 -1. - <_>2 15 18 4 2. - 0 - -0.1507928073406220 - 0.2963424921035767 - 0.5264679789543152 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>5 7 2 1 3. - 0 - 3.3179009333252907e-003 - 0.4655495882034302 - 0.7072932124137878 - <_> - - <_> - - - - <_>10 6 4 2 -1. - <_>12 6 2 1 2. - <_>10 7 2 1 2. - 0 - 7.7402801252901554e-004 - 0.4780347943305969 - 0.5668237805366516 - <_> - - <_> - - - - <_>6 6 4 2 -1. - <_>6 6 2 1 2. - <_>8 7 2 1 2. - 0 - 6.8199541419744492e-004 - 0.4286996126174927 - 0.5722156763076782 - <_> - - <_> - - - - <_>10 1 3 4 -1. - <_>11 1 1 4 3. - 0 - 5.3671570494771004e-003 - 0.5299307107925415 - 0.3114621937274933 - <_> - - <_> - - - - <_>7 1 2 7 -1. - <_>8 1 1 7 2. - 0 - 9.7018666565418243e-005 - 0.3674638867378235 - 0.5269461870193481 - <_> - - <_> - - - - <_>4 2 15 14 -1. - <_>4 9 15 7 2. - 0 - -0.1253408938646317 - 0.2351492047309876 - 0.5245791077613831 - <_> - - <_> - - - - <_>8 7 3 2 -1. - <_>9 7 1 2 3. - 0 - -5.2516269497573376e-003 - 0.7115936875343323 - 0.4693767130374908 - <_> - - <_> - - - - <_>2 3 18 4 -1. - <_>11 3 9 2 2. - <_>2 5 9 2 2. - 0 - -7.8342109918594360e-003 - 0.4462651014328003 - 0.5409085750579834 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - -1.1310069821774960e-003 - 0.5945618748664856 - 0.4417662024497986 - <_> - - <_> - - - - <_>13 9 2 3 -1. - <_>13 9 1 3 2. - 0 - 1.7601120052859187e-003 - 0.5353249907493591 - 0.3973453044891357 - <_> - - <_> - - - - <_>5 2 6 2 -1. - <_>7 2 2 2 3. - 0 - -8.1581249833106995e-004 - 0.3760268092155457 - 0.5264726877212524 - <_> - - <_> - - - - <_>9 5 2 7 -1. - <_>9 5 1 7 2. - 0 - -3.8687589112669230e-003 - 0.6309912800788879 - 0.4749819934368134 - <_> - - <_> - - - - <_>5 9 2 3 -1. - <_>6 9 1 3 2. - 0 - 1.5207129763439298e-003 - 0.5230181813240051 - 0.3361223936080933 - <_> - - <_> - - - - <_>6 0 14 18 -1. - <_>6 9 14 9 2. - 0 - 0.5458673834800720 - 0.5167139768600464 - 0.1172635033726692 - <_> - - <_> - - - - <_>2 16 6 3 -1. - <_>2 17 6 1 3. - 0 - 0.0156501904129982 - 0.4979439079761505 - 0.1393294930458069 - <_> - - <_> - - - - <_>9 7 3 6 -1. - <_>10 7 1 6 3. - 0 - -0.0117318602278829 - 0.7129650712013245 - 0.4921196103096008 - <_> - - <_> - - - - <_>7 8 4 3 -1. - <_>7 9 4 1 3. - 0 - -6.1765122227370739e-003 - 0.2288102954626083 - 0.5049701929092407 - <_> - - <_> - - - - <_>7 12 6 3 -1. - <_>7 13 6 1 3. - 0 - 2.2457661107182503e-003 - 0.4632433950901032 - 0.6048725843429565 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -5.1915869116783142e-003 - 0.6467421054840088 - 0.4602192938327789 - <_> - - <_> - - - - <_>7 12 6 2 -1. - <_>9 12 2 2 3. - 0 - -0.0238278806209564 - 0.1482000946998596 - 0.5226079225540161 - <_> - - <_> - - - - <_>5 11 4 6 -1. - <_>5 14 4 3 2. - 0 - 1.0284580057486892e-003 - 0.5135489106178284 - 0.3375957012176514 - <_> - - <_> - - - - <_>11 12 7 2 -1. - <_>11 13 7 1 2. - 0 - -0.0100788502022624 - 0.2740561068058014 - 0.5303567051887512 - <_> - - <_> - - - - <_>6 10 8 6 -1. - <_>6 10 4 3 2. - <_>10 13 4 3 2. - 0 - 2.6168930344283581e-003 - 0.5332670807838440 - 0.3972454071044922 - <_> - - <_> - - - - <_>11 10 3 4 -1. - <_>11 12 3 2 2. - 0 - 5.4385367548093200e-004 - 0.5365604162216187 - 0.4063411951065064 - <_> - - <_> - - - - <_>9 16 2 3 -1. - <_>9 17 2 1 3. - 0 - 5.3510512225329876e-003 - 0.4653759002685547 - 0.6889045834541321 - <_> - - <_> - - - - <_>13 3 1 9 -1. - <_>13 6 1 3 3. - 0 - -1.5274790348485112e-003 - 0.5449501276016235 - 0.3624723851680756 - <_> - - <_> - - - - <_>1 13 14 6 -1. - <_>1 15 14 2 3. - 0 - -0.0806244164705276 - 0.1656087040901184 - 0.5000287294387817 - <_> - - <_> - - - - <_>13 6 1 6 -1. - <_>13 9 1 3 2. - 0 - 0.0221920292824507 - 0.5132731199264526 - 0.2002808004617691 - <_> - - <_> - - - - <_>0 4 3 8 -1. - <_>1 4 1 8 3. - 0 - 7.3100631125271320e-003 - 0.4617947936058044 - 0.6366536021232605 - <_> - - <_> - - - - <_>18 0 2 18 -1. - <_>18 0 1 18 2. - 0 - -6.4063072204589844e-003 - 0.5916250944137573 - 0.4867860972881317 - <_> - - <_> - - - - <_>2 3 6 2 -1. - <_>2 4 6 1 2. - 0 - -7.6415040530264378e-004 - 0.3888409137725830 - 0.5315797924995422 - <_> - - <_> - - - - <_>9 0 8 6 -1. - <_>9 2 8 2 3. - 0 - 7.6734489994123578e-004 - 0.4159064888954163 - 0.5605279803276062 - <_> - - <_> - - - - <_>6 6 1 6 -1. - <_>6 9 1 3 2. - 0 - 6.1474501853808761e-004 - 0.3089022040367127 - 0.5120148062705994 - <_> - - <_> - - - - <_>14 8 6 3 -1. - <_>14 9 6 1 3. - 0 - -5.0105270929634571e-003 - 0.3972199857234955 - 0.5207306146621704 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>1 0 1 18 2. - 0 - -8.6909132078289986e-003 - 0.6257408261299133 - 0.4608575999736786 - <_> - - <_> - - - - <_>1 18 18 2 -1. - <_>10 18 9 1 2. - <_>1 19 9 1 2. - 0 - -0.0163914598524570 - 0.2085209935903549 - 0.5242266058921814 - <_> - - <_> - - - - <_>3 15 2 2 -1. - <_>3 16 2 1 2. - 0 - 4.0973909199237823e-004 - 0.5222427248954773 - 0.3780320882797241 - <_> - - <_> - - - - <_>8 14 5 3 -1. - <_>8 15 5 1 3. - 0 - -2.5242289993911982e-003 - 0.5803927183151245 - 0.4611890017986298 - <_> - - <_> - - - - <_>8 14 2 3 -1. - <_>8 15 2 1 3. - 0 - 5.0945312250405550e-004 - 0.4401271939277649 - 0.5846015810966492 - <_> - - <_> - - - - <_>12 3 3 3 -1. - <_>13 3 1 3 3. - 0 - 1.9656419754028320e-003 - 0.5322325229644775 - 0.4184590876102448 - <_> - - <_> - - - - <_>7 5 6 2 -1. - <_>9 5 2 2 3. - 0 - 5.6298897834494710e-004 - 0.3741844892501831 - 0.5234565734863281 - <_> - - <_> - - - - <_>15 5 5 2 -1. - <_>15 6 5 1 2. - 0 - -6.7946797935292125e-004 - 0.4631041884422302 - 0.5356478095054627 - <_> - - <_> - - - - <_>0 5 5 2 -1. - <_>0 6 5 1 2. - 0 - 7.2856349870562553e-003 - 0.5044670104980469 - 0.2377564013004303 - <_> - - <_> - - - - <_>17 14 1 6 -1. - <_>17 17 1 3 2. - 0 - -0.0174594894051552 - 0.7289121150970459 - 0.5050435066223145 - <_> - - <_> - - - - <_>2 9 9 3 -1. - <_>5 9 3 3 3. - 0 - -0.0254217498004436 - 0.6667134761810303 - 0.4678100049495697 - <_> - - <_> - - - - <_>12 3 3 3 -1. - <_>13 3 1 3 3. - 0 - -1.5647639520466328e-003 - 0.4391759037971497 - 0.5323626995086670 - <_> - - <_> - - - - <_>0 0 4 18 -1. - <_>2 0 2 18 2. - 0 - 0.0114443600177765 - 0.4346440136432648 - 0.5680012106895447 - <_> - - <_> - - - - <_>17 6 1 3 -1. - <_>17 7 1 1 3. - 0 - -6.7352550104260445e-004 - 0.4477140903472900 - 0.5296812057495117 - <_> - - <_> - - - - <_>2 14 1 6 -1. - <_>2 17 1 3 2. - 0 - 9.3194209039211273e-003 - 0.4740200042724609 - 0.7462607026100159 - <_> - - <_> - - - - <_>19 8 1 2 -1. - <_>19 9 1 1 2. - 0 - 1.3328490604180843e-004 - 0.5365061759948731 - 0.4752134978771210 - <_> - - <_> - - - - <_>5 3 3 3 -1. - <_>6 3 1 3 3. - 0 - -7.8815799206495285e-003 - 0.1752219051122665 - 0.5015255212783814 - <_> - - <_> - - - - <_>9 16 2 3 -1. - <_>9 17 2 1 3. - 0 - -5.7985680177807808e-003 - 0.7271236777305603 - 0.4896200895309448 - <_> - - <_> - - - - <_>2 6 1 3 -1. - <_>2 7 1 1 3. - 0 - -3.8922499516047537e-004 - 0.4003908932209015 - 0.5344941020011902 - <_> - - <_> - - - - <_>12 4 8 2 -1. - <_>16 4 4 1 2. - <_>12 5 4 1 2. - 0 - -1.9288610201328993e-003 - 0.5605612993240356 - 0.4803955852985382 - <_> - - <_> - - - - <_>0 4 8 2 -1. - <_>0 4 4 1 2. - <_>4 5 4 1 2. - 0 - 8.4214154630899429e-003 - 0.4753246903419495 - 0.7623608708381653 - <_> - - <_> - - - - <_>2 16 18 4 -1. - <_>2 18 18 2 2. - 0 - 8.1655876711010933e-003 - 0.5393261909484863 - 0.4191643893718720 - <_> - - <_> - - - - <_>7 15 2 4 -1. - <_>7 17 2 2 2. - 0 - 4.8280550981871784e-004 - 0.4240800142288208 - 0.5399821996688843 - <_> - - <_> - - - - <_>4 0 14 3 -1. - <_>4 1 14 1 3. - 0 - -2.7186630759388208e-003 - 0.4244599938392639 - 0.5424923896789551 - <_> - - <_> - - - - <_>0 0 4 20 -1. - <_>2 0 2 20 2. - 0 - -0.0125072300434113 - 0.5895841717720032 - 0.4550411105155945 - <_> - - <_> - - - - <_>12 4 4 8 -1. - <_>14 4 2 4 2. - <_>12 8 2 4 2. - 0 - -0.0242865197360516 - 0.2647134959697723 - 0.5189179778099060 - <_> - - <_> - - - - <_>6 7 2 2 -1. - <_>6 7 1 1 2. - <_>7 8 1 1 2. - 0 - -2.9676330741494894e-003 - 0.7347682714462280 - 0.4749749898910523 - <_> - - <_> - - - - <_>10 6 2 3 -1. - <_>10 7 2 1 3. - 0 - -0.0125289997085929 - 0.2756049931049347 - 0.5177599787712097 - <_> - - <_> - - - - <_>8 7 3 2 -1. - <_>8 8 3 1 2. - 0 - -1.0104000102728605e-003 - 0.3510560989379883 - 0.5144724249839783 - <_> - - <_> - - - - <_>8 2 6 12 -1. - <_>8 8 6 6 2. - 0 - -2.1348530426621437e-003 - 0.5637925863265991 - 0.4667319953441620 - <_> - - <_> - - - - <_>4 0 11 12 -1. - <_>4 4 11 4 3. - 0 - 0.0195642597973347 - 0.4614573121070862 - 0.6137639880180359 - <_> - - <_> - - - - <_>14 9 6 11 -1. - <_>16 9 2 11 3. - 0 - -0.0971463471651077 - 0.2998378872871399 - 0.5193555951118469 - <_> - - <_> - - - - <_>0 14 4 3 -1. - <_>0 15 4 1 3. - 0 - 4.5014568604528904e-003 - 0.5077884793281555 - 0.3045755922794342 - <_> - - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - 6.3706971704959869e-003 - 0.4861018955707550 - 0.6887500882148743 - <_> - - <_> - - - - <_>5 11 3 2 -1. - <_>5 12 3 1 2. - 0 - -9.0721528977155685e-003 - 0.1673395931720734 - 0.5017563104629517 - <_> - - <_> - - - - <_>9 15 3 3 -1. - <_>10 15 1 3 3. - 0 - -5.3537208586931229e-003 - 0.2692756950855255 - 0.5242633223533630 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>9 8 1 4 3. - 0 - -0.0109328404068947 - 0.7183864116668701 - 0.4736028909683228 - <_> - - <_> - - - - <_>9 15 3 3 -1. - <_>10 15 1 3 3. - 0 - 8.2356072962284088e-003 - 0.5223966836929321 - 0.2389862984418869 - <_> - - <_> - - - - <_>7 7 3 2 -1. - <_>8 7 1 2 3. - 0 - -1.0038160253316164e-003 - 0.5719355940818787 - 0.4433943033218384 - <_> - - <_> - - - - <_>2 10 16 4 -1. - <_>10 10 8 2 2. - <_>2 12 8 2 2. - 0 - 4.0859128348529339e-003 - 0.5472841858863831 - 0.4148836135864258 - <_> - - <_> - - - - <_>2 3 4 17 -1. - <_>4 3 2 17 2. - 0 - 0.1548541933298111 - 0.4973812103271484 - 0.0610615983605385 - <_> - - <_> - - - - <_>15 13 2 7 -1. - <_>15 13 1 7 2. - 0 - 2.0897459762636572e-004 - 0.4709174036979675 - 0.5423889160156250 - <_> - - <_> - - - - <_>2 2 6 1 -1. - <_>5 2 3 1 2. - 0 - 3.3316991175524890e-004 - 0.4089626967906952 - 0.5300992131233215 - <_> - - <_> - - - - <_>5 2 12 4 -1. - <_>9 2 4 4 3. - 0 - -0.0108134001493454 - 0.6104369759559631 - 0.4957334101200104 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 0 4 6 2. - <_>10 6 4 6 2. - 0 - 0.0456560105085373 - 0.5069689154624939 - 0.2866660058498383 - <_> - - <_> - - - - <_>13 7 2 2 -1. - <_>14 7 1 1 2. - <_>13 8 1 1 2. - 0 - 1.2569549726322293e-003 - 0.4846917092800140 - 0.6318171024322510 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 14 20 2 3. - 0 - -0.1201507002115250 - 0.0605261400341988 - 0.4980959892272949 - <_> - - <_> - - - - <_>14 7 2 3 -1. - <_>14 7 1 3 2. - 0 - -1.0533799650147557e-004 - 0.5363109707832336 - 0.4708042144775391 - <_> - - <_> - - - - <_>0 8 9 12 -1. - <_>3 8 3 12 3. - 0 - -0.2070319056510925 - 0.0596603304147720 - 0.4979098141193390 - <_> - - <_> - - - - <_>3 0 16 2 -1. - <_>3 0 8 2 2. - 0 - 1.2909180077258497e-004 - 0.4712977111339569 - 0.5377997756004334 - <_> - - <_> - - - - <_>6 15 3 3 -1. - <_>6 16 3 1 3. - 0 - 3.8818528992123902e-004 - 0.4363538026809692 - 0.5534191131591797 - <_> - - <_> - - - - <_>8 15 6 3 -1. - <_>8 16 6 1 3. - 0 - -2.9243610333651304e-003 - 0.5811185836791992 - 0.4825215935707092 - <_> - - <_> - - - - <_>0 10 1 6 -1. - <_>0 12 1 2 3. - 0 - 8.3882332546636462e-004 - 0.5311700105667114 - 0.4038138985633850 - <_> - - <_> - - - - <_>10 9 4 3 -1. - <_>10 10 4 1 3. - 0 - -1.9061550265178084e-003 - 0.3770701885223389 - 0.5260015130043030 - <_> - - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - 8.9514348655939102e-003 - 0.4766167998313904 - 0.7682183980941773 - <_> - - <_> - - - - <_>5 7 10 1 -1. - <_>5 7 5 1 2. - 0 - 0.0130834598094225 - 0.5264462828636169 - 0.3062222003936768 - <_> - - <_> - - - - <_>4 0 12 19 -1. - <_>10 0 6 19 2. - 0 - -0.2115933001041412 - 0.6737198233604431 - 0.4695810079574585 - <_> - - <_> - - - - <_>0 6 20 6 -1. - <_>10 6 10 3 2. - <_>0 9 10 3 2. - 0 - 3.1493250280618668e-003 - 0.5644835233688355 - 0.4386953115463257 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - 3.9754100725986063e-004 - 0.4526061117649078 - 0.5895630121231079 - <_> - - <_> - - - - <_>15 6 2 2 -1. - <_>16 6 1 1 2. - <_>15 7 1 1 2. - 0 - -1.3814480043947697e-003 - 0.6070582270622253 - 0.4942413866519928 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - -5.8122188784182072e-004 - 0.5998213291168213 - 0.4508252143859863 - <_> - - <_> - - - - <_>14 4 1 12 -1. - <_>14 10 1 6 2. - 0 - -2.3905329871922731e-003 - 0.4205588996410370 - 0.5223848223686218 - <_> - - <_> - - - - <_>2 5 16 10 -1. - <_>2 5 8 5 2. - <_>10 10 8 5 2. - 0 - 0.0272689294070005 - 0.5206447243690491 - 0.3563301861286163 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -3.7658358924090862e-003 - 0.3144704103469849 - 0.5218814015388489 - <_> - - <_> - - - - <_>1 4 2 2 -1. - <_>1 5 2 1 2. - 0 - -1.4903489500284195e-003 - 0.3380196094512940 - 0.5124437212944031 - <_> - - <_> - - - - <_>5 0 15 5 -1. - <_>10 0 5 5 3. - 0 - -0.0174282304942608 - 0.5829960703849793 - 0.4919725954532623 - <_> - - <_> - - - - <_>0 0 15 5 -1. - <_>5 0 5 5 3. - 0 - -0.0152780301868916 - 0.6163144707679749 - 0.4617887139320374 - <_> - - <_> - - - - <_>11 2 2 17 -1. - <_>11 2 1 17 2. - 0 - 0.0319956094026566 - 0.5166357159614563 - 0.1712764054536820 - <_> - - <_> - - - - <_>7 2 2 17 -1. - <_>8 2 1 17 2. - 0 - -3.8256710395216942e-003 - 0.3408012092113495 - 0.5131387710571289 - <_> - - <_> - - - - <_>15 11 2 9 -1. - <_>15 11 1 9 2. - 0 - -8.5186436772346497e-003 - 0.6105518937110901 - 0.4997941851615906 - <_> - - <_> - - - - <_>3 11 2 9 -1. - <_>4 11 1 9 2. - 0 - 9.0641621500253677e-004 - 0.4327270984649658 - 0.5582311153411865 - <_> - - <_> - - - - <_>5 16 14 4 -1. - <_>5 16 7 4 2. - 0 - 0.0103448498994112 - 0.4855653047561646 - 0.5452420115470886 - 69.2298736572265630 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 18 1 -1. - <_>7 4 6 1 3. - 0 - 7.8981826081871986e-003 - 0.3332524895668030 - 0.5946462154388428 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 1.6170160379260778e-003 - 0.3490641117095947 - 0.5577868819236755 - <_> - - <_> - - - - <_>9 8 2 12 -1. - <_>9 12 2 4 3. - 0 - -5.5449741194024682e-004 - 0.5542566180229187 - 0.3291530013084412 - <_> - - <_> - - - - <_>12 1 6 6 -1. - <_>12 3 6 2 3. - 0 - 1.5428980113938451e-003 - 0.3612579107284546 - 0.5545979142189026 - <_> - - <_> - - - - <_>5 2 6 6 -1. - <_>5 2 3 3 2. - <_>8 5 3 3 2. - 0 - -1.0329450014978647e-003 - 0.3530139029026032 - 0.5576140284538269 - <_> - - <_> - - - - <_>9 16 6 4 -1. - <_>12 16 3 2 2. - <_>9 18 3 2 2. - 0 - 7.7698158565908670e-004 - 0.3916778862476349 - 0.5645321011543274 - <_> - - <_> - - - - <_>1 2 18 3 -1. - <_>7 2 6 3 3. - 0 - 0.1432030051946640 - 0.4667482078075409 - 0.7023633122444153 - <_> - - <_> - - - - <_>7 4 9 10 -1. - <_>7 9 9 5 2. - 0 - -7.3866490274667740e-003 - 0.3073684871196747 - 0.5289257764816284 - <_> - - <_> - - - - <_>5 9 4 4 -1. - <_>7 9 2 4 2. - 0 - -6.2936742324382067e-004 - 0.5622118115425110 - 0.4037049114704132 - <_> - - <_> - - - - <_>11 10 3 6 -1. - <_>11 13 3 3 2. - 0 - 7.8893528552725911e-004 - 0.5267661213874817 - 0.3557874858379364 - <_> - - <_> - - - - <_>7 11 5 3 -1. - <_>7 12 5 1 3. - 0 - -0.0122280502691865 - 0.6668320894241333 - 0.4625549912452698 - <_> - - <_> - - - - <_>7 11 6 6 -1. - <_>10 11 3 3 2. - <_>7 14 3 3 2. - 0 - 3.5420239437371492e-003 - 0.5521438121795654 - 0.3869673013687134 - <_> - - <_> - - - - <_>0 0 10 9 -1. - <_>0 3 10 3 3. - 0 - -1.0585320414975286e-003 - 0.3628678023815155 - 0.5320926904678345 - <_> - - <_> - - - - <_>13 14 1 6 -1. - <_>13 16 1 2 3. - 0 - 1.4935660146875307e-005 - 0.4632444977760315 - 0.5363323092460632 - <_> - - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 5.2537708543241024e-003 - 0.5132231712341309 - 0.3265708982944489 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -8.2338023930788040e-003 - 0.6693689823150635 - 0.4774140119552612 - <_> - - <_> - - - - <_>6 14 1 6 -1. - <_>6 16 1 2 3. - 0 - 2.1866810129722580e-005 - 0.4053862094879150 - 0.5457931160926819 - <_> - - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - -3.8150229956954718e-003 - 0.6454995870590210 - 0.4793178141117096 - <_> - - <_> - - - - <_>6 4 3 3 -1. - <_>7 4 1 3 3. - 0 - 1.1105879675596952e-003 - 0.5270407199859619 - 0.3529678881168366 - <_> - - <_> - - - - <_>9 0 11 3 -1. - <_>9 1 11 1 3. - 0 - -5.7707689702510834e-003 - 0.3803547024726868 - 0.5352957844734192 - <_> - - <_> - - - - <_>0 6 20 3 -1. - <_>0 7 20 1 3. - 0 - -3.0158339068293571e-003 - 0.5339403152465820 - 0.3887133002281189 - <_> - - <_> - - - - <_>10 1 1 2 -1. - <_>10 2 1 1 2. - 0 - -8.5453689098358154e-004 - 0.3564616143703461 - 0.5273603796958923 - <_> - - <_> - - - - <_>9 6 2 6 -1. - <_>10 6 1 6 2. - 0 - 0.0110505102202296 - 0.4671907126903534 - 0.6849737763404846 - <_> - - <_> - - - - <_>5 8 12 1 -1. - <_>9 8 4 1 3. - 0 - 0.0426058396697044 - 0.5151473283767700 - 0.0702200904488564 - <_> - - <_> - - - - <_>3 8 12 1 -1. - <_>7 8 4 1 3. - 0 - -3.0781750101596117e-003 - 0.3041661083698273 - 0.5152602195739746 - <_> - - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - -5.4815728217363358e-003 - 0.6430295705795288 - 0.4897229969501495 - <_> - - <_> - - - - <_>3 9 6 2 -1. - <_>6 9 3 2 2. - 0 - 3.1881860923022032e-003 - 0.5307493209838867 - 0.3826209902763367 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - 3.5947180003859103e-004 - 0.4650047123432159 - 0.5421904921531677 - <_> - - <_> - - - - <_>7 0 6 1 -1. - <_>9 0 2 1 3. - 0 - -4.0705031715333462e-003 - 0.2849679887294769 - 0.5079116225242615 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - -0.0145941702648997 - 0.2971645891666412 - 0.5128461718559265 - <_> - - <_> - - - - <_>7 10 2 1 -1. - <_>8 10 1 1 2. - 0 - -1.1947689927183092e-004 - 0.5631098151206970 - 0.4343082010746002 - <_> - - <_> - - - - <_>6 4 9 13 -1. - <_>9 4 3 13 3. - 0 - -6.9344649091362953e-004 - 0.4403578042984009 - 0.5359959006309509 - <_> - - <_> - - - - <_>6 8 4 2 -1. - <_>6 9 4 1 2. - 0 - 1.4834799912932795e-005 - 0.3421008884906769 - 0.5164697766304016 - <_> - - <_> - - - - <_>16 2 4 6 -1. - <_>16 2 2 6 2. - 0 - 9.0296985581517220e-003 - 0.4639343023300171 - 0.6114075183868408 - <_> - - <_> - - - - <_>0 17 6 3 -1. - <_>0 18 6 1 3. - 0 - -8.0640818923711777e-003 - 0.2820158898830414 - 0.5075494050979614 - <_> - - <_> - - - - <_>10 10 3 10 -1. - <_>10 15 3 5 2. - 0 - 0.0260621197521687 - 0.5208905935287476 - 0.2688778042793274 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - 0.0173146594315767 - 0.4663713872432709 - 0.6738539934158325 - <_> - - <_> - - - - <_>10 4 4 3 -1. - <_>10 4 2 3 2. - 0 - 0.0226666405797005 - 0.5209349989891052 - 0.2212723940610886 - <_> - - <_> - - - - <_>8 4 3 8 -1. - <_>9 4 1 8 3. - 0 - -2.1965929772704840e-003 - 0.6063101291656494 - 0.4538190066814423 - <_> - - <_> - - - - <_>6 6 9 13 -1. - <_>9 6 3 13 3. - 0 - -9.5282476395368576e-003 - 0.4635204970836639 - 0.5247430801391602 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 0 4 6 2. - <_>10 6 4 6 2. - 0 - 8.0943619832396507e-003 - 0.5289440155029297 - 0.3913882076740265 - <_> - - <_> - - - - <_>14 2 6 8 -1. - <_>16 2 2 8 3. - 0 - -0.0728773325681686 - 0.7752001881599426 - 0.4990234971046448 - <_> - - <_> - - - - <_>6 0 3 6 -1. - <_>7 0 1 6 3. - 0 - -6.9009521976113319e-003 - 0.2428039014339447 - 0.5048090219497681 - <_> - - <_> - - - - <_>14 2 6 8 -1. - <_>16 2 2 8 3. - 0 - -0.0113082397729158 - 0.5734364986419678 - 0.4842376112937927 - <_> - - <_> - - - - <_>0 5 6 6 -1. - <_>0 8 6 3 2. - 0 - 0.0596132017672062 - 0.5029836297035217 - 0.2524977028369904 - <_> - - <_> - - - - <_>9 12 6 2 -1. - <_>12 12 3 1 2. - <_>9 13 3 1 2. - 0 - -2.8624620754271746e-003 - 0.6073045134544373 - 0.4898459911346436 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - 4.4781449250876904e-003 - 0.5015289187431335 - 0.2220316976308823 - <_> - - <_> - - - - <_>11 6 2 2 -1. - <_>12 6 1 1 2. - <_>11 7 1 1 2. - 0 - -1.7513240454718471e-003 - 0.6614428758621216 - 0.4933868944644928 - <_> - - <_> - - - - <_>1 9 18 2 -1. - <_>7 9 6 2 3. - 0 - 0.0401634201407433 - 0.5180878043174744 - 0.3741044998168945 - <_> - - <_> - - - - <_>11 6 2 2 -1. - <_>12 6 1 1 2. - <_>11 7 1 1 2. - 0 - 3.4768949262797832e-004 - 0.4720416963100433 - 0.5818032026290894 - <_> - - <_> - - - - <_>3 4 12 8 -1. - <_>7 4 4 8 3. - 0 - 2.6551650371402502e-003 - 0.3805010914802551 - 0.5221335887908936 - <_> - - <_> - - - - <_>13 11 5 3 -1. - <_>13 12 5 1 3. - 0 - -8.7706279009580612e-003 - 0.2944166064262390 - 0.5231295228004456 - <_> - - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - -5.5122091434895992e-003 - 0.7346177101135254 - 0.4722816944122315 - <_> - - <_> - - - - <_>14 7 2 3 -1. - <_>14 7 1 3 2. - 0 - 6.8672042107209563e-004 - 0.5452876091003418 - 0.4242413043975830 - <_> - - <_> - - - - <_>5 4 1 3 -1. - <_>5 5 1 1 3. - 0 - 5.6019669864326715e-004 - 0.4398862123489380 - 0.5601285099983215 - <_> - - <_> - - - - <_>13 4 2 3 -1. - <_>13 5 2 1 3. - 0 - 2.4143769405782223e-003 - 0.4741686880588532 - 0.6136621832847595 - <_> - - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - -1.5680900542065501e-003 - 0.6044552922248840 - 0.4516409933567047 - <_> - - <_> - - - - <_>9 8 2 3 -1. - <_>9 9 2 1 3. - 0 - -3.6827491130679846e-003 - 0.2452459037303925 - 0.5294982194900513 - <_> - - <_> - - - - <_>8 9 2 2 -1. - <_>8 10 2 1 2. - 0 - -2.9409190756268799e-004 - 0.3732838034629822 - 0.5251451134681702 - <_> - - <_> - - - - <_>15 14 1 4 -1. - <_>15 16 1 2 2. - 0 - 4.2847759323194623e-004 - 0.5498809814453125 - 0.4065535068511963 - <_> - - <_> - - - - <_>3 12 2 2 -1. - <_>3 13 2 1 2. - 0 - -4.8817070201039314e-003 - 0.2139908969402313 - 0.4999957084655762 - <_> - - <_> - - - - <_>12 15 2 2 -1. - <_>13 15 1 1 2. - <_>12 16 1 1 2. - 0 - 2.7272020815871656e-004 - 0.4650287032127380 - 0.5813428759574890 - <_> - - <_> - - - - <_>9 13 2 2 -1. - <_>9 14 2 1 2. - 0 - 2.0947199664078653e-004 - 0.4387486875057221 - 0.5572792887687683 - <_> - - <_> - - - - <_>4 11 14 9 -1. - <_>4 14 14 3 3. - 0 - 0.0485011897981167 - 0.5244972705841065 - 0.3212889134883881 - <_> - - <_> - - - - <_>7 13 4 3 -1. - <_>7 14 4 1 3. - 0 - -4.5166411437094212e-003 - 0.6056813001632690 - 0.4545882046222687 - <_> - - <_> - - - - <_>15 14 1 4 -1. - <_>15 16 1 2 2. - 0 - -0.0122916800901294 - 0.2040929049253464 - 0.5152214169502258 - <_> - - <_> - - - - <_>4 14 1 4 -1. - <_>4 16 1 2 2. - 0 - 4.8549679922871292e-004 - 0.5237604975700378 - 0.3739503026008606 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>16 0 2 13 3. - 0 - 0.0305560491979122 - 0.4960533976554871 - 0.5938246250152588 - <_> - - <_> - - - - <_>4 1 2 12 -1. - <_>4 1 1 6 2. - <_>5 7 1 6 2. - 0 - -1.5105320198927075e-004 - 0.5351303815841675 - 0.4145204126834869 - <_> - - <_> - - - - <_>11 14 6 6 -1. - <_>14 14 3 3 2. - <_>11 17 3 3 2. - 0 - 2.4937440175563097e-003 - 0.4693366885185242 - 0.5514941215515137 - <_> - - <_> - - - - <_>3 14 6 6 -1. - <_>3 14 3 3 2. - <_>6 17 3 3 2. - 0 - -0.0123821301385760 - 0.6791396737098694 - 0.4681667983531952 - <_> - - <_> - - - - <_>14 17 3 2 -1. - <_>14 18 3 1 2. - 0 - -5.1333461888134480e-003 - 0.3608739078044891 - 0.5229160189628601 - <_> - - <_> - - - - <_>3 17 3 2 -1. - <_>3 18 3 1 2. - 0 - 5.1919277757406235e-004 - 0.5300073027610779 - 0.3633613884449005 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>16 0 2 13 3. - 0 - 0.1506042033433914 - 0.5157316923141480 - 0.2211782038211823 - <_> - - <_> - - - - <_>0 0 6 13 -1. - <_>2 0 2 13 3. - 0 - 7.7144149690866470e-003 - 0.4410496950149536 - 0.5776609182357788 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 9.4443522393703461e-003 - 0.5401855111122131 - 0.3756650090217590 - <_> - - <_> - - - - <_>6 15 2 2 -1. - <_>6 15 1 1 2. - <_>7 16 1 1 2. - 0 - 2.5006249779835343e-004 - 0.4368270933628082 - 0.5607374906539917 - <_> - - <_> - - - - <_>6 11 8 6 -1. - <_>10 11 4 3 2. - <_>6 14 4 3 2. - 0 - -3.3077150583267212e-003 - 0.4244799017906189 - 0.5518230795860291 - <_> - - <_> - - - - <_>7 6 2 2 -1. - <_>7 6 1 1 2. - <_>8 7 1 1 2. - 0 - 7.4048910755664110e-004 - 0.4496962130069733 - 0.5900576710700989 - <_> - - <_> - - - - <_>2 2 16 6 -1. - <_>10 2 8 3 2. - <_>2 5 8 3 2. - 0 - 0.0440920516848564 - 0.5293493270874023 - 0.3156355023384094 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 3.3639909233897924e-003 - 0.4483296871185303 - 0.5848662257194519 - <_> - - <_> - - - - <_>11 7 3 10 -1. - <_>11 12 3 5 2. - 0 - -3.9760079234838486e-003 - 0.4559507071971893 - 0.5483639240264893 - <_> - - <_> - - - - <_>6 7 3 10 -1. - <_>6 12 3 5 2. - 0 - 2.7716930489987135e-003 - 0.5341786146163940 - 0.3792484104633331 - <_> - - <_> - - - - <_>10 7 3 2 -1. - <_>11 7 1 2 3. - 0 - -2.4123019829858094e-004 - 0.5667188763618469 - 0.4576973021030426 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 4.9425667384639382e-004 - 0.4421244859695435 - 0.5628787279129028 - <_> - - <_> - - - - <_>10 1 1 3 -1. - <_>10 2 1 1 3. - 0 - -3.8876468897797167e-004 - 0.4288370907306671 - 0.5391063094139099 - <_> - - <_> - - - - <_>1 2 4 18 -1. - <_>1 2 2 9 2. - <_>3 11 2 9 2. - 0 - -0.0500488989055157 - 0.6899513006210327 - 0.4703742861747742 - <_> - - <_> - - - - <_>12 4 4 12 -1. - <_>12 10 4 6 2. - 0 - -0.0366354808211327 - 0.2217779010534287 - 0.5191826224327087 - <_> - - <_> - - - - <_>0 0 1 6 -1. - <_>0 2 1 2 3. - 0 - 2.4273579474538565e-003 - 0.5136224031448364 - 0.3497397899627686 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - 1.9558030180633068e-003 - 0.4826192855834961 - 0.6408380866050720 - <_> - - <_> - - - - <_>8 7 4 3 -1. - <_>8 8 4 1 3. - 0 - -1.7494610510766506e-003 - 0.3922835886478424 - 0.5272685289382935 - <_> - - <_> - - - - <_>10 7 3 2 -1. - <_>11 7 1 2 3. - 0 - 0.0139550799503922 - 0.5078201889991760 - 0.8416504859924316 - <_> - - <_> - - - - <_>7 7 3 2 -1. - <_>8 7 1 2 3. - 0 - -2.1896739781368524e-004 - 0.5520489811897278 - 0.4314234852790833 - <_> - - <_> - - - - <_>9 4 6 1 -1. - <_>11 4 2 1 3. - 0 - -1.5131309628486633e-003 - 0.3934605121612549 - 0.5382571220397949 - <_> - - <_> - - - - <_>8 7 2 3 -1. - <_>9 7 1 3 2. - 0 - -4.3622800149023533e-003 - 0.7370628714561462 - 0.4736475944519043 - <_> - - <_> - - - - <_>12 7 8 6 -1. - <_>16 7 4 3 2. - <_>12 10 4 3 2. - 0 - 0.0651605874300003 - 0.5159279704093933 - 0.3281595110893250 - <_> - - <_> - - - - <_>0 7 8 6 -1. - <_>0 7 4 3 2. - <_>4 10 4 3 2. - 0 - -2.3567399475723505e-003 - 0.3672826886177063 - 0.5172886252403259 - <_> - - <_> - - - - <_>18 2 2 10 -1. - <_>19 2 1 5 2. - <_>18 7 1 5 2. - 0 - 0.0151466596871614 - 0.5031493902206421 - 0.6687604188919067 - <_> - - <_> - - - - <_>0 2 6 4 -1. - <_>3 2 3 4 2. - 0 - -0.0228509604930878 - 0.6767519712448120 - 0.4709596931934357 - <_> - - <_> - - - - <_>9 4 6 1 -1. - <_>11 4 2 1 3. - 0 - 4.8867650330066681e-003 - 0.5257998108863831 - 0.4059878885746002 - <_> - - <_> - - - - <_>7 15 2 2 -1. - <_>7 15 1 1 2. - <_>8 16 1 1 2. - 0 - 1.7619599821045995e-003 - 0.4696272909641266 - 0.6688278913497925 - <_> - - <_> - - - - <_>11 13 1 6 -1. - <_>11 16 1 3 2. - 0 - -1.2942519970238209e-003 - 0.4320712983608246 - 0.5344281792640686 - <_> - - <_> - - - - <_>8 13 1 6 -1. - <_>8 16 1 3 2. - 0 - 0.0109299495816231 - 0.4997706115245819 - 0.1637486070394516 - <_> - - <_> - - - - <_>14 3 2 1 -1. - <_>14 3 1 1 2. - 0 - 2.9958489903947338e-005 - 0.4282417893409729 - 0.5633224248886108 - <_> - - <_> - - - - <_>8 15 2 3 -1. - <_>8 16 2 1 3. - 0 - -6.5884361974895000e-003 - 0.6772121191024780 - 0.4700526893138886 - <_> - - <_> - - - - <_>12 15 7 4 -1. - <_>12 17 7 2 2. - 0 - 3.2527779694646597e-003 - 0.5313397049903870 - 0.4536148905754089 - <_> - - <_> - - - - <_>4 14 12 3 -1. - <_>4 15 12 1 3. - 0 - -4.0435739792883396e-003 - 0.5660061836242676 - 0.4413388967514038 - <_> - - <_> - - - - <_>10 3 3 2 -1. - <_>11 3 1 2 3. - 0 - -1.2523540062829852e-003 - 0.3731913864612579 - 0.5356451869010925 - <_> - - <_> - - - - <_>4 12 2 2 -1. - <_>4 13 2 1 2. - 0 - 1.9246719602961093e-004 - 0.5189986228942871 - 0.3738811016082764 - <_> - - <_> - - - - <_>10 11 4 6 -1. - <_>10 14 4 3 2. - 0 - -0.0385896712541580 - 0.2956373989582062 - 0.5188810825347900 - <_> - - <_> - - - - <_>7 13 2 2 -1. - <_>7 13 1 1 2. - <_>8 14 1 1 2. - 0 - 1.5489870565943420e-004 - 0.4347135126590729 - 0.5509533286094666 - <_> - - <_> - - - - <_>4 11 14 4 -1. - <_>11 11 7 2 2. - <_>4 13 7 2 2. - 0 - -0.0337638482451439 - 0.3230330049991608 - 0.5195475816726685 - <_> - - <_> - - - - <_>1 18 18 2 -1. - <_>7 18 6 2 3. - 0 - -8.2657067105174065e-003 - 0.5975489020347595 - 0.4552114009857178 - <_> - - <_> - - - - <_>11 18 2 2 -1. - <_>12 18 1 1 2. - <_>11 19 1 1 2. - 0 - 1.4481440302915871e-005 - 0.4745678007602692 - 0.5497426986694336 - <_> - - <_> - - - - <_>7 18 2 2 -1. - <_>7 18 1 1 2. - <_>8 19 1 1 2. - 0 - 1.4951299817766994e-005 - 0.4324473142623901 - 0.5480644106864929 - <_> - - <_> - - - - <_>12 18 8 2 -1. - <_>12 19 8 1 2. - 0 - -0.0187417995184660 - 0.1580052971839905 - 0.5178533196449280 - <_> - - <_> - - - - <_>7 14 6 2 -1. - <_>7 15 6 1 2. - 0 - 1.7572239739820361e-003 - 0.4517636895179749 - 0.5773764252662659 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>10 12 2 4 2. - <_>8 16 2 4 2. - 0 - -3.1391119118779898e-003 - 0.4149647951126099 - 0.5460842251777649 - <_> - - <_> - - - - <_>4 9 3 3 -1. - <_>4 10 3 1 3. - 0 - 6.6656779381446540e-005 - 0.4039090871810913 - 0.5293084979057312 - <_> - - <_> - - - - <_>7 10 6 2 -1. - <_>9 10 2 2 3. - 0 - 6.7743421532213688e-003 - 0.4767651855945587 - 0.6121956110000610 - <_> - - <_> - - - - <_>5 0 4 15 -1. - <_>7 0 2 15 2. - 0 - -7.3868161998689175e-003 - 0.3586258888244629 - 0.5187280774116516 - <_> - - <_> - - - - <_>8 6 12 14 -1. - <_>12 6 4 14 3. - 0 - 0.0140409301966429 - 0.4712139964103699 - 0.5576155781745911 - <_> - - <_> - - - - <_>5 16 3 3 -1. - <_>5 17 3 1 3. - 0 - -5.5258329957723618e-003 - 0.2661027014255524 - 0.5039281249046326 - <_> - - <_> - - - - <_>8 1 12 19 -1. - <_>12 1 4 19 3. - 0 - 0.3868423998355866 - 0.5144339799880981 - 0.2525899112224579 - <_> - - <_> - - - - <_>3 0 3 2 -1. - <_>3 1 3 1 2. - 0 - 1.1459240340627730e-004 - 0.4284994900226593 - 0.5423371195793152 - <_> - - <_> - - - - <_>10 12 4 5 -1. - <_>10 12 2 5 2. - 0 - -0.0184675697237253 - 0.3885835111141205 - 0.5213062167167664 - <_> - - <_> - - - - <_>6 12 4 5 -1. - <_>8 12 2 5 2. - 0 - -4.5907011372037232e-004 - 0.5412563085556030 - 0.4235909879207611 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - 1.2527540093287826e-003 - 0.4899305105209351 - 0.6624091267585754 - <_> - - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 1.4910609461367130e-003 - 0.5286778211593628 - 0.4040051996707916 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - -7.5435562757775187e-004 - 0.6032990217208862 - 0.4795120060443878 - <_> - - <_> - - - - <_>7 6 4 10 -1. - <_>7 11 4 5 2. - 0 - -6.9478838704526424e-003 - 0.4084401130676270 - 0.5373504161834717 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - 2.8092920547351241e-004 - 0.4846062958240509 - 0.5759382247924805 - <_> - - <_> - - - - <_>2 13 5 2 -1. - <_>2 14 5 1 2. - 0 - 9.6073717577382922e-004 - 0.5164741277694702 - 0.3554979860782623 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - -2.6883929967880249e-004 - 0.5677582025527954 - 0.4731765985488892 - <_> - - <_> - - - - <_>7 11 2 2 -1. - <_>7 11 1 1 2. - <_>8 12 1 1 2. - 0 - 2.1599370520561934e-003 - 0.4731487035751343 - 0.7070567011833191 - <_> - - <_> - - - - <_>14 13 3 3 -1. - <_>14 14 3 1 3. - 0 - 5.6235301308333874e-003 - 0.5240243077278137 - 0.2781791985034943 - <_> - - <_> - - - - <_>3 13 3 3 -1. - <_>3 14 3 1 3. - 0 - -5.0243991427123547e-003 - 0.2837013900279999 - 0.5062304139137268 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - -9.7611639648675919e-003 - 0.7400717735290527 - 0.4934569001197815 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - 4.1515100747346878e-003 - 0.5119131207466126 - 0.3407008051872253 - <_> - - <_> - - - - <_>13 5 3 3 -1. - <_>13 6 3 1 3. - 0 - 6.2465080991387367e-003 - 0.4923788011074066 - 0.6579058766365051 - <_> - - <_> - - - - <_>0 9 5 3 -1. - <_>0 10 5 1 3. - 0 - -7.0597478188574314e-003 - 0.2434711009263992 - 0.5032842159271240 - <_> - - <_> - - - - <_>13 5 3 3 -1. - <_>13 6 3 1 3. - 0 - -2.0587709732353687e-003 - 0.5900310873985291 - 0.4695087075233460 - <_> - - <_> - - - - <_>9 12 2 8 -1. - <_>9 12 1 4 2. - <_>10 16 1 4 2. - 0 - -2.4146060459315777e-003 - 0.3647317886352539 - 0.5189201831817627 - <_> - - <_> - - - - <_>11 7 2 2 -1. - <_>12 7 1 1 2. - <_>11 8 1 1 2. - 0 - -1.4817609917372465e-003 - 0.6034948229789734 - 0.4940128028392792 - <_> - - <_> - - - - <_>0 16 6 4 -1. - <_>3 16 3 4 2. - 0 - -6.3016400672495365e-003 - 0.5818989872932434 - 0.4560427963733673 - <_> - - <_> - - - - <_>10 6 2 3 -1. - <_>10 7 2 1 3. - 0 - 3.4763428848236799e-003 - 0.5217475891113281 - 0.3483993113040924 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>9 7 2 2 3. - 0 - -0.0222508702427149 - 0.2360700070858002 - 0.5032082796096802 - <_> - - <_> - - - - <_>12 15 8 4 -1. - <_>12 15 4 4 2. - 0 - -0.0306125506758690 - 0.6499186754226685 - 0.4914919137954712 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>4 14 4 6 2. - 0 - 0.0130574796348810 - 0.4413323104381561 - 0.5683764219284058 - <_> - - <_> - - - - <_>9 0 3 2 -1. - <_>10 0 1 2 3. - 0 - -6.0095742810517550e-004 - 0.4359731078147888 - 0.5333483219146729 - <_> - - <_> - - - - <_>4 15 4 2 -1. - <_>6 15 2 2 2. - 0 - -4.1514250915497541e-004 - 0.5504062771797180 - 0.4326060116291046 - <_> - - <_> - - - - <_>12 7 3 13 -1. - <_>13 7 1 13 3. - 0 - -0.0137762902304530 - 0.4064112901687622 - 0.5201548933982849 - <_> - - <_> - - - - <_>5 7 3 13 -1. - <_>6 7 1 13 3. - 0 - -0.0322965085506439 - 0.0473519712686539 - 0.4977194964885712 - <_> - - <_> - - - - <_>9 6 3 9 -1. - <_>9 9 3 3 3. - 0 - 0.0535569787025452 - 0.4881733059883118 - 0.6666939258575440 - <_> - - <_> - - - - <_>4 4 7 12 -1. - <_>4 10 7 6 2. - 0 - 8.1889545544981956e-003 - 0.5400037169456482 - 0.4240820109844208 - <_> - - <_> - - - - <_>12 12 2 2 -1. - <_>13 12 1 1 2. - <_>12 13 1 1 2. - 0 - 2.1055320394225419e-004 - 0.4802047908306122 - 0.5563852787017822 - <_> - - <_> - - - - <_>6 12 2 2 -1. - <_>6 12 1 1 2. - <_>7 13 1 1 2. - 0 - -2.4382730480283499e-003 - 0.7387793064117432 - 0.4773685038089752 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>10 9 2 1 2. - <_>8 10 2 1 2. - 0 - 3.2835570164024830e-003 - 0.5288546085357666 - 0.3171291947364807 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - 2.3729570675641298e-003 - 0.4750812947750092 - 0.7060170769691467 - <_> - - <_> - - - - <_>16 6 3 2 -1. - <_>16 7 3 1 2. - 0 - -1.4541699783876538e-003 - 0.3811730146408081 - 0.5330739021301270 - 79.2490768432617190 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>0 7 19 4 -1. - <_>0 9 19 2 2. - 0 - 0.0557552389800549 - 0.4019156992435455 - 0.6806036829948425 - <_> - - <_> - - - - <_>10 2 10 1 -1. - <_>10 2 5 1 2. - 0 - 2.4730248842388391e-003 - 0.3351148962974548 - 0.5965719819068909 - <_> - - <_> - - - - <_>9 4 2 12 -1. - <_>9 10 2 6 2. - 0 - -3.5031698644161224e-004 - 0.5557708144187927 - 0.3482286930084229 - <_> - - <_> - - - - <_>12 18 4 1 -1. - <_>12 18 2 1 2. - 0 - 5.4167630150914192e-004 - 0.4260858893394470 - 0.5693380832672119 - <_> - - <_> - - - - <_>1 7 6 4 -1. - <_>1 7 3 2 2. - <_>4 9 3 2 2. - 0 - 7.7193678589537740e-004 - 0.3494240045547485 - 0.5433688759803772 - <_> - - <_> - - - - <_>12 0 6 13 -1. - <_>14 0 2 13 3. - 0 - -1.5999219613149762e-003 - 0.4028499126434326 - 0.5484359264373779 - <_> - - <_> - - - - <_>2 0 6 13 -1. - <_>4 0 2 13 3. - 0 - -1.1832080053864047e-004 - 0.3806901872158051 - 0.5425465106964111 - <_> - - <_> - - - - <_>10 5 8 8 -1. - <_>10 9 8 4 2. - 0 - 3.2909031142480671e-004 - 0.2620100080966950 - 0.5429521799087524 - <_> - - <_> - - - - <_>8 3 2 5 -1. - <_>9 3 1 5 2. - 0 - 2.9518108931370080e-004 - 0.3799768984317780 - 0.5399264097213745 - <_> - - <_> - - - - <_>8 4 9 1 -1. - <_>11 4 3 1 3. - 0 - 9.0466710389591753e-005 - 0.4433645009994507 - 0.5440226197242737 - <_> - - <_> - - - - <_>3 4 9 1 -1. - <_>6 4 3 1 3. - 0 - 1.5007190086180344e-005 - 0.3719654977321625 - 0.5409119725227356 - <_> - - <_> - - - - <_>1 0 18 10 -1. - <_>7 0 6 10 3. - 0 - 0.1393561065196991 - 0.5525395870208740 - 0.4479042887687683 - <_> - - <_> - - - - <_>7 17 5 3 -1. - <_>7 18 5 1 3. - 0 - 1.6461990308016539e-003 - 0.4264501035213471 - 0.5772169828414917 - <_> - - <_> - - - - <_>7 11 6 1 -1. - <_>9 11 2 1 3. - 0 - 4.9984431825578213e-004 - 0.4359526038169861 - 0.5685871243476868 - <_> - - <_> - - - - <_>2 2 3 2 -1. - <_>2 3 3 1 2. - 0 - -1.0971280280500650e-003 - 0.3390136957168579 - 0.5205408930778503 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 6.6919892560690641e-004 - 0.4557456076145172 - 0.5980659723281860 - <_> - - <_> - - - - <_>6 10 3 6 -1. - <_>6 13 3 3 2. - 0 - 8.6471042595803738e-004 - 0.5134841203689575 - 0.2944033145904541 - <_> - - <_> - - - - <_>11 4 2 4 -1. - <_>11 4 1 4 2. - 0 - -2.7182599296793342e-004 - 0.3906578123569489 - 0.5377181172370911 - <_> - - <_> - - - - <_>7 4 2 4 -1. - <_>8 4 1 4 2. - 0 - 3.0249499104684219e-005 - 0.3679609894752502 - 0.5225688815116882 - <_> - - <_> - - - - <_>9 6 2 4 -1. - <_>9 6 1 4 2. - 0 - -8.5225896909832954e-003 - 0.7293102145195007 - 0.4892365038394928 - <_> - - <_> - - - - <_>6 13 8 3 -1. - <_>6 14 8 1 3. - 0 - 1.6705560265108943e-003 - 0.4345324933528900 - 0.5696138143539429 - <_> - - <_> - - - - <_>9 15 3 4 -1. - <_>10 15 1 4 3. - 0 - -7.1433838456869125e-003 - 0.2591280043125153 - 0.5225623846054077 - <_> - - <_> - - - - <_>9 2 2 17 -1. - <_>10 2 1 17 2. - 0 - -0.0163193698972464 - 0.6922279000282288 - 0.4651575982570648 - <_> - - <_> - - - - <_>7 0 6 1 -1. - <_>9 0 2 1 3. - 0 - 4.8034260980784893e-003 - 0.5352262854576111 - 0.3286302983760834 - <_> - - <_> - - - - <_>8 15 3 4 -1. - <_>9 15 1 4 3. - 0 - -7.5421929359436035e-003 - 0.2040544003248215 - 0.5034546256065369 - <_> - - <_> - - - - <_>7 13 7 3 -1. - <_>7 14 7 1 3. - 0 - -0.0143631100654602 - 0.6804888844490051 - 0.4889059066772461 - <_> - - <_> - - - - <_>8 16 3 3 -1. - <_>9 16 1 3 3. - 0 - 8.9063588529825211e-004 - 0.5310695767402649 - 0.3895480930805206 - <_> - - <_> - - - - <_>6 2 8 10 -1. - <_>6 7 8 5 2. - 0 - -4.4060191139578819e-003 - 0.5741562843322754 - 0.4372426867485046 - <_> - - <_> - - - - <_>2 5 8 8 -1. - <_>2 9 8 4 2. - 0 - -1.8862540309783071e-004 - 0.2831785976886749 - 0.5098205208778381 - <_> - - <_> - - - - <_>14 16 2 2 -1. - <_>14 17 2 1 2. - 0 - -3.7979281041771173e-003 - 0.3372507989406586 - 0.5246580243110657 - <_> - - <_> - - - - <_>4 16 2 2 -1. - <_>4 17 2 1 2. - 0 - 1.4627049677073956e-004 - 0.5306674242019653 - 0.3911710083484650 - <_> - - <_> - - - - <_>10 11 4 6 -1. - <_>10 14 4 3 2. - 0 - -4.9164638767251745e-005 - 0.5462496280670166 - 0.3942720890045166 - <_> - - <_> - - - - <_>6 11 4 6 -1. - <_>6 14 4 3 2. - 0 - -0.0335825011134148 - 0.2157824039459229 - 0.5048211812973023 - <_> - - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - -3.5339309833943844e-003 - 0.6465312242507935 - 0.4872696995735169 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 5.0144111737608910e-003 - 0.4617668092250824 - 0.6248074769973755 - <_> - - <_> - - - - <_>10 0 4 6 -1. - <_>12 0 2 3 2. - <_>10 3 2 3 2. - 0 - 0.0188173707574606 - 0.5220689177513123 - 0.2000052034854889 - <_> - - <_> - - - - <_>0 3 20 2 -1. - <_>0 4 20 1 2. - 0 - -1.3434339780360460e-003 - 0.4014537930488586 - 0.5301619768142700 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>16 0 4 1 2. - <_>12 1 4 1 2. - 0 - 1.7557960236445069e-003 - 0.4794039130210877 - 0.5653169751167297 - <_> - - <_> - - - - <_>2 12 10 8 -1. - <_>2 16 10 4 2. - 0 - -0.0956374630331993 - 0.2034195065498352 - 0.5006706714630127 - <_> - - <_> - - - - <_>17 7 2 10 -1. - <_>18 7 1 5 2. - <_>17 12 1 5 2. - 0 - -0.0222412291914225 - 0.7672473192214966 - 0.5046340227127075 - <_> - - <_> - - - - <_>1 7 2 10 -1. - <_>1 7 1 5 2. - <_>2 12 1 5 2. - 0 - -0.0155758196488023 - 0.7490342259407044 - 0.4755851030349731 - <_> - - <_> - - - - <_>15 10 3 6 -1. - <_>15 12 3 2 3. - 0 - 5.3599118255078793e-003 - 0.5365303754806519 - 0.4004670977592468 - <_> - - <_> - - - - <_>4 4 6 2 -1. - <_>6 4 2 2 3. - 0 - -0.0217634998261929 - 0.0740154981613159 - 0.4964174926280975 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - -0.1656159013509750 - 0.2859103083610535 - 0.5218086242675781 - <_> - - <_> - - - - <_>0 0 8 2 -1. - <_>0 0 4 1 2. - <_>4 1 4 1 2. - 0 - 1.6461320046801120e-004 - 0.4191615879535675 - 0.5380793213844299 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -8.9077502489089966e-003 - 0.6273192763328552 - 0.4877404868602753 - <_> - - <_> - - - - <_>1 13 6 2 -1. - <_>1 14 6 1 2. - 0 - 8.6346449097618461e-004 - 0.5159940719604492 - 0.3671025931835175 - <_> - - <_> - - - - <_>10 8 3 4 -1. - <_>11 8 1 4 3. - 0 - -1.3751760125160217e-003 - 0.5884376764297485 - 0.4579083919525147 - <_> - - <_> - - - - <_>6 1 6 1 -1. - <_>8 1 2 1 3. - 0 - -1.4081239933148026e-003 - 0.3560509979724884 - 0.5139945149421692 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -3.9342888630926609e-003 - 0.5994288921356201 - 0.4664272069931030 - <_> - - <_> - - - - <_>1 6 18 2 -1. - <_>10 6 9 2 2. - 0 - -0.0319669283926487 - 0.3345462083816528 - 0.5144183039665222 - <_> - - <_> - - - - <_>15 11 1 2 -1. - <_>15 12 1 1 2. - 0 - -1.5089280168467667e-005 - 0.5582656264305115 - 0.4414057135581970 - <_> - - <_> - - - - <_>6 5 1 2 -1. - <_>6 6 1 1 2. - 0 - 5.1994470413774252e-004 - 0.4623680114746094 - 0.6168993711471558 - <_> - - <_> - - - - <_>13 4 1 3 -1. - <_>13 5 1 1 3. - 0 - -3.4220460802316666e-003 - 0.6557074785232544 - 0.4974805116653442 - <_> - - <_> - - - - <_>2 15 1 2 -1. - <_>2 16 1 1 2. - 0 - 1.7723299970384687e-004 - 0.5269501805305481 - 0.3901908099651337 - <_> - - <_> - - - - <_>12 4 4 3 -1. - <_>12 5 4 1 3. - 0 - 1.5716759953647852e-003 - 0.4633373022079468 - 0.5790457725524902 - <_> - - <_> - - - - <_>0 0 7 3 -1. - <_>0 1 7 1 3. - 0 - -8.9041329920291901e-003 - 0.2689608037471771 - 0.5053591132164002 - <_> - - <_> - - - - <_>9 12 6 2 -1. - <_>9 12 3 2 2. - 0 - 4.0677518700249493e-004 - 0.5456603169441223 - 0.4329898953437805 - <_> - - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - 6.7604780197143555e-003 - 0.4648993909358978 - 0.6689761877059937 - <_> - - <_> - - - - <_>18 4 2 3 -1. - <_>18 5 2 1 3. - 0 - 2.9100088868290186e-003 - 0.5309703946113586 - 0.3377839922904968 - <_> - - <_> - - - - <_>3 0 8 6 -1. - <_>3 2 8 2 3. - 0 - 1.3885459629818797e-003 - 0.4074738919734955 - 0.5349133014678955 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>10 2 10 3 2. - <_>0 5 10 3 2. - 0 - -0.0767642632126808 - 0.1992176026105881 - 0.5228242278099060 - <_> - - <_> - - - - <_>4 7 2 4 -1. - <_>5 7 1 4 2. - 0 - -2.2688310127705336e-004 - 0.5438501834869385 - 0.4253072142601013 - <_> - - <_> - - - - <_>3 10 15 2 -1. - <_>8 10 5 2 3. - 0 - -6.3094152137637138e-003 - 0.4259178936481476 - 0.5378909707069397 - <_> - - <_> - - - - <_>3 0 12 11 -1. - <_>9 0 6 11 2. - 0 - -0.1100727990269661 - 0.6904156804084778 - 0.4721749126911163 - <_> - - <_> - - - - <_>13 0 2 6 -1. - <_>13 0 1 6 2. - 0 - 2.8619659133255482e-004 - 0.4524914920330048 - 0.5548306107521057 - <_> - - <_> - - - - <_>0 19 2 1 -1. - <_>1 19 1 1 2. - 0 - 2.9425329557852820e-005 - 0.5370373725891113 - 0.4236463904380798 - <_> - - <_> - - - - <_>16 10 4 10 -1. - <_>18 10 2 5 2. - <_>16 15 2 5 2. - 0 - -0.0248865708708763 - 0.6423557996749878 - 0.4969303905963898 - <_> - - <_> - - - - <_>4 8 10 3 -1. - <_>4 9 10 1 3. - 0 - 0.0331488512456417 - 0.4988475143909454 - 0.1613811999559403 - <_> - - <_> - - - - <_>14 12 3 3 -1. - <_>14 13 3 1 3. - 0 - 7.8491691965609789e-004 - 0.5416026115417481 - 0.4223009049892426 - <_> - - <_> - - - - <_>0 10 4 10 -1. - <_>0 10 2 5 2. - <_>2 15 2 5 2. - 0 - 4.7087189741432667e-003 - 0.4576328992843628 - 0.6027557849884033 - <_> - - <_> - - - - <_>18 3 2 6 -1. - <_>18 5 2 2 3. - 0 - 2.4144479539245367e-003 - 0.5308973193168640 - 0.4422498941421509 - <_> - - <_> - - - - <_>6 6 1 3 -1. - <_>6 7 1 1 3. - 0 - 1.9523180089890957e-003 - 0.4705634117126465 - 0.6663324832916260 - <_> - - <_> - - - - <_>7 7 7 2 -1. - <_>7 8 7 1 2. - 0 - 1.3031980488449335e-003 - 0.4406126141548157 - 0.5526962280273438 - <_> - - <_> - - - - <_>0 3 2 6 -1. - <_>0 5 2 2 3. - 0 - 4.4735497795045376e-003 - 0.5129023790359497 - 0.3301498889923096 - <_> - - <_> - - - - <_>11 1 3 1 -1. - <_>12 1 1 1 3. - 0 - -2.6652868837118149e-003 - 0.3135471045970917 - 0.5175036191940308 - <_> - - <_> - - - - <_>5 0 2 6 -1. - <_>6 0 1 6 2. - 0 - 1.3666770246345550e-004 - 0.4119370877742767 - 0.5306876897811890 - <_> - - <_> - - - - <_>1 1 18 14 -1. - <_>7 1 6 14 3. - 0 - -0.0171264503151178 - 0.6177806258201599 - 0.4836578965187073 - <_> - - <_> - - - - <_>4 6 8 3 -1. - <_>8 6 4 3 2. - 0 - -2.6601430727168918e-004 - 0.3654330968856812 - 0.5169736742973328 - <_> - - <_> - - - - <_>9 12 6 2 -1. - <_>9 12 3 2 2. - 0 - -0.0229323804378510 - 0.3490915000438690 - 0.5163992047309876 - <_> - - <_> - - - - <_>5 12 6 2 -1. - <_>8 12 3 2 2. - 0 - 2.3316550068557262e-003 - 0.5166299939155579 - 0.3709389865398407 - <_> - - <_> - - - - <_>10 7 3 5 -1. - <_>11 7 1 5 3. - 0 - 0.0169256608933210 - 0.5014736056327820 - 0.8053988218307495 - <_> - - <_> - - - - <_>7 7 3 5 -1. - <_>8 7 1 5 3. - 0 - -8.9858826249837875e-003 - 0.6470788717269898 - 0.4657020866870880 - <_> - - <_> - - - - <_>13 0 3 10 -1. - <_>14 0 1 10 3. - 0 - -0.0118746999651194 - 0.3246378898620606 - 0.5258755087852478 - <_> - - <_> - - - - <_>4 11 3 2 -1. - <_>4 12 3 1 2. - 0 - 1.9350569345988333e-004 - 0.5191941857337952 - 0.3839643895626068 - <_> - - <_> - - - - <_>17 3 3 6 -1. - <_>18 3 1 6 3. - 0 - 5.8713490143418312e-003 - 0.4918133914470673 - 0.6187043190002441 - <_> - - <_> - - - - <_>1 8 18 10 -1. - <_>1 13 18 5 2. - 0 - -0.2483879029750824 - 0.1836802959442139 - 0.4988150000572205 - <_> - - <_> - - - - <_>13 0 3 10 -1. - <_>14 0 1 10 3. - 0 - 0.0122560001909733 - 0.5227053761482239 - 0.3632029891014099 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 8.3990179700776935e-004 - 0.4490250051021576 - 0.5774148106575012 - <_> - - <_> - - - - <_>16 3 3 7 -1. - <_>17 3 1 7 3. - 0 - 2.5407369248569012e-003 - 0.4804787039756775 - 0.5858299136161804 - <_> - - <_> - - - - <_>4 0 3 10 -1. - <_>5 0 1 10 3. - 0 - -0.0148224299773574 - 0.2521049976348877 - 0.5023537278175354 - <_> - - <_> - - - - <_>16 3 3 7 -1. - <_>17 3 1 7 3. - 0 - -5.7973959483206272e-003 - 0.5996695756912231 - 0.4853715002536774 - <_> - - <_> - - - - <_>0 9 1 2 -1. - <_>0 10 1 1 2. - 0 - 7.2662148158997297e-004 - 0.5153716802597046 - 0.3671779930591583 - <_> - - <_> - - - - <_>18 1 2 10 -1. - <_>18 1 1 10 2. - 0 - -0.0172325801104307 - 0.6621719002723694 - 0.4994656145572662 - <_> - - <_> - - - - <_>0 1 2 10 -1. - <_>1 1 1 10 2. - 0 - 7.8624086454510689e-003 - 0.4633395075798035 - 0.6256101727485657 - <_> - - <_> - - - - <_>10 16 3 4 -1. - <_>11 16 1 4 3. - 0 - -4.7343620099127293e-003 - 0.3615573048591614 - 0.5281885266304016 - <_> - - <_> - - - - <_>2 8 3 3 -1. - <_>3 8 1 3 3. - 0 - 8.3048478700220585e-004 - 0.4442889094352722 - 0.5550957918167114 - <_> - - <_> - - - - <_>11 0 2 6 -1. - <_>12 0 1 3 2. - <_>11 3 1 3 2. - 0 - 7.6602199114859104e-003 - 0.5162935256958008 - 0.2613354921340942 - <_> - - <_> - - - - <_>7 0 2 6 -1. - <_>7 0 1 3 2. - <_>8 3 1 3 2. - 0 - -4.1048377752304077e-003 - 0.2789632081985474 - 0.5019031763076782 - <_> - - <_> - - - - <_>16 3 3 7 -1. - <_>17 3 1 7 3. - 0 - 4.8512578941881657e-003 - 0.4968984127044678 - 0.5661668181419373 - <_> - - <_> - - - - <_>1 3 3 7 -1. - <_>2 3 1 7 3. - 0 - 9.9896453320980072e-004 - 0.4445607960224152 - 0.5551813244819641 - <_> - - <_> - - - - <_>14 1 6 16 -1. - <_>16 1 2 16 3. - 0 - -0.2702363133430481 - 0.0293882098048925 - 0.5151314139366150 - <_> - - <_> - - - - <_>0 1 6 16 -1. - <_>2 1 2 16 3. - 0 - -0.0130906803533435 - 0.5699399709701538 - 0.4447459876537323 - <_> - - <_> - - - - <_>2 0 16 8 -1. - <_>10 0 8 4 2. - <_>2 4 8 4 2. - 0 - -9.4342790544033051e-003 - 0.4305466115474701 - 0.5487895011901856 - <_> - - <_> - - - - <_>6 8 5 3 -1. - <_>6 9 5 1 3. - 0 - -1.5482039889320731e-003 - 0.3680317103862763 - 0.5128080844879150 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 5.3746132180094719e-003 - 0.4838916957378388 - 0.6101555824279785 - <_> - - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - 1.5786769799888134e-003 - 0.5325223207473755 - 0.4118548035621643 - <_> - - <_> - - - - <_>9 6 2 4 -1. - <_>9 6 1 4 2. - 0 - 3.6856050137430429e-003 - 0.4810948073863983 - 0.6252303123474121 - <_> - - <_> - - - - <_>0 7 15 1 -1. - <_>5 7 5 1 3. - 0 - 9.3887019902467728e-003 - 0.5200229883193970 - 0.3629410862922669 - <_> - - <_> - - - - <_>8 2 7 9 -1. - <_>8 5 7 3 3. - 0 - 0.0127926301211119 - 0.4961709976196289 - 0.6738016009330750 - <_> - - <_> - - - - <_>1 7 16 4 -1. - <_>1 7 8 2 2. - <_>9 9 8 2 2. - 0 - -3.3661040943115950e-003 - 0.4060279130935669 - 0.5283598899841309 - <_> - - <_> - - - - <_>6 12 8 2 -1. - <_>6 13 8 1 2. - 0 - 3.9771420415490866e-004 - 0.4674113988876343 - 0.5900775194168091 - <_> - - <_> - - - - <_>8 11 3 3 -1. - <_>8 12 3 1 3. - 0 - 1.4868030557408929e-003 - 0.4519116878509522 - 0.6082053780555725 - <_> - - <_> - - - - <_>4 5 14 10 -1. - <_>11 5 7 5 2. - <_>4 10 7 5 2. - 0 - -0.0886867493391037 - 0.2807899117469788 - 0.5180991888046265 - <_> - - <_> - - - - <_>4 12 3 2 -1. - <_>4 13 3 1 2. - 0 - -7.4296112870797515e-005 - 0.5295584201812744 - 0.4087625145912170 - <_> - - <_> - - - - <_>9 11 6 1 -1. - <_>11 11 2 1 3. - 0 - -1.4932939848222304e-005 - 0.5461400151252747 - 0.4538542926311493 - <_> - - <_> - - - - <_>4 9 7 6 -1. - <_>4 11 7 2 3. - 0 - 5.9162238612771034e-003 - 0.5329161286354065 - 0.4192134141921997 - <_> - - <_> - - - - <_>7 10 6 3 -1. - <_>7 11 6 1 3. - 0 - 1.1141640134155750e-003 - 0.4512017965316773 - 0.5706217288970947 - <_> - - <_> - - - - <_>9 11 2 2 -1. - <_>9 12 2 1 2. - 0 - 8.9249362645205110e-005 - 0.4577805995941162 - 0.5897638201713562 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - 2.5319510605186224e-003 - 0.5299603939056397 - 0.3357639014720917 - <_> - - <_> - - - - <_>6 4 6 1 -1. - <_>8 4 2 1 3. - 0 - 0.0124262003228068 - 0.4959059059619904 - 0.1346601992845535 - <_> - - <_> - - - - <_>9 11 6 1 -1. - <_>11 11 2 1 3. - 0 - 0.0283357501029968 - 0.5117079019546509 - 6.1043637106195092e-004 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - 6.6165882162749767e-003 - 0.4736349880695343 - 0.7011628150939941 - <_> - - <_> - - - - <_>10 16 3 4 -1. - <_>11 16 1 4 3. - 0 - 8.0468766391277313e-003 - 0.5216417908668518 - 0.3282819986343384 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -1.1193980462849140e-003 - 0.5809860825538635 - 0.4563739001750946 - <_> - - <_> - - - - <_>2 12 16 8 -1. - <_>2 16 16 4 2. - 0 - 0.0132775902748108 - 0.5398362278938294 - 0.4103901088237763 - <_> - - <_> - - - - <_>0 15 15 2 -1. - <_>0 16 15 1 2. - 0 - 4.8794739996083081e-004 - 0.4249286055564880 - 0.5410590767860413 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 6 5 2 3. - 0 - 0.0112431701272726 - 0.5269963741302490 - 0.3438215851783752 - <_> - - <_> - - - - <_>9 5 2 4 -1. - <_>10 5 1 4 2. - 0 - -8.9896668214350939e-004 - 0.5633075833320618 - 0.4456613063812256 - <_> - - <_> - - - - <_>8 10 9 6 -1. - <_>8 12 9 2 3. - 0 - 6.6677159629762173e-003 - 0.5312889218330383 - 0.4362679123878479 - <_> - - <_> - - - - <_>2 19 15 1 -1. - <_>7 19 5 1 3. - 0 - 0.0289472993463278 - 0.4701794981956482 - 0.6575797796249390 - <_> - - <_> - - - - <_>10 16 3 4 -1. - <_>11 16 1 4 3. - 0 - -0.0234000496566296 - 0. - 0.5137398838996887 - <_> - - <_> - - - - <_>0 15 20 4 -1. - <_>0 17 20 2 2. - 0 - -0.0891170501708984 - 0.0237452797591686 - 0.4942430853843689 - <_> - - <_> - - - - <_>10 16 3 4 -1. - <_>11 16 1 4 3. - 0 - -0.0140546001493931 - 0.3127323091030121 - 0.5117511153221130 - <_> - - <_> - - - - <_>7 16 3 4 -1. - <_>8 16 1 4 3. - 0 - 8.1239398568868637e-003 - 0.5009049177169800 - 0.2520025968551636 - <_> - - <_> - - - - <_>9 16 3 3 -1. - <_>9 17 3 1 3. - 0 - -4.9964650534093380e-003 - 0.6387143731117249 - 0.4927811920642853 - <_> - - <_> - - - - <_>8 11 4 6 -1. - <_>8 14 4 3 2. - 0 - 3.1253970228135586e-003 - 0.5136849880218506 - 0.3680452108383179 - <_> - - <_> - - - - <_>9 6 2 12 -1. - <_>9 10 2 4 3. - 0 - 6.7669642157852650e-003 - 0.5509843826293945 - 0.4363631904125214 - <_> - - <_> - - - - <_>8 17 4 3 -1. - <_>8 18 4 1 3. - 0 - -2.3711440153419971e-003 - 0.6162335276603699 - 0.4586946964263916 - <_> - - <_> - - - - <_>9 18 8 2 -1. - <_>13 18 4 1 2. - <_>9 19 4 1 2. - 0 - -5.3522791713476181e-003 - 0.6185457706451416 - 0.4920490980148315 - <_> - - <_> - - - - <_>1 18 8 2 -1. - <_>1 19 8 1 2. - 0 - -0.0159688591957092 - 0.1382617950439453 - 0.4983252882957459 - <_> - - <_> - - - - <_>13 5 6 15 -1. - <_>15 5 2 15 3. - 0 - 4.7676060348749161e-003 - 0.4688057899475098 - 0.5490046143531799 - <_> - - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - -2.4714691098779440e-003 - 0.2368514984846115 - 0.5003952980041504 - <_> - - <_> - - - - <_>9 5 2 3 -1. - <_>9 5 1 3 2. - 0 - -7.1033788844943047e-004 - 0.5856394171714783 - 0.4721533060073853 - <_> - - <_> - - - - <_>1 5 6 15 -1. - <_>3 5 2 15 3. - 0 - -0.1411755979061127 - 0.0869000628590584 - 0.4961591064929962 - <_> - - <_> - - - - <_>4 1 14 8 -1. - <_>11 1 7 4 2. - <_>4 5 7 4 2. - 0 - 0.1065180972218514 - 0.5138837099075317 - 0.1741005033254623 - <_> - - <_> - - - - <_>2 4 4 16 -1. - <_>2 4 2 8 2. - <_>4 12 2 8 2. - 0 - -0.0527447499334812 - 0.7353636026382446 - 0.4772881865501404 - <_> - - <_> - - - - <_>12 4 3 12 -1. - <_>12 10 3 6 2. - 0 - -4.7431760467588902e-003 - 0.3884406089782715 - 0.5292701721191406 - <_> - - <_> - - - - <_>4 5 10 12 -1. - <_>4 5 5 6 2. - <_>9 11 5 6 2. - 0 - 9.9676765967160463e-004 - 0.5223492980003357 - 0.4003424048423767 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 8.0284131690859795e-003 - 0.4959106147289276 - 0.7212964296340942 - <_> - - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - 8.6025858763605356e-004 - 0.4444884061813355 - 0.5538476109504700 - <_> - - <_> - - - - <_>12 2 4 10 -1. - <_>14 2 2 5 2. - <_>12 7 2 5 2. - 0 - 9.3191501218825579e-004 - 0.5398371219635010 - 0.4163244068622589 - <_> - - <_> - - - - <_>6 4 7 3 -1. - <_>6 5 7 1 3. - 0 - -2.5082060601562262e-003 - 0.5854265093803406 - 0.4562500119209290 - <_> - - <_> - - - - <_>2 0 18 2 -1. - <_>11 0 9 1 2. - <_>2 1 9 1 2. - 0 - -2.1378761157393456e-003 - 0.4608069062232971 - 0.5280259251594544 - <_> - - <_> - - - - <_>0 0 18 2 -1. - <_>0 0 9 1 2. - <_>9 1 9 1 2. - 0 - -2.1546049974858761e-003 - 0.3791126906871796 - 0.5255997180938721 - <_> - - <_> - - - - <_>13 13 4 6 -1. - <_>15 13 2 3 2. - <_>13 16 2 3 2. - 0 - -7.6214009895920753e-003 - 0.5998609066009522 - 0.4952073991298676 - <_> - - <_> - - - - <_>3 13 4 6 -1. - <_>3 13 2 3 2. - <_>5 16 2 3 2. - 0 - 2.2055360022932291e-003 - 0.4484206140041351 - 0.5588530898094177 - <_> - - <_> - - - - <_>10 12 2 6 -1. - <_>10 15 2 3 2. - 0 - 1.2586950324475765e-003 - 0.5450747013092041 - 0.4423840939998627 - <_> - - <_> - - - - <_>5 9 10 10 -1. - <_>5 9 5 5 2. - <_>10 14 5 5 2. - 0 - -5.0926720723509789e-003 - 0.4118275046348572 - 0.5263035893440247 - <_> - - <_> - - - - <_>11 4 4 2 -1. - <_>13 4 2 1 2. - <_>11 5 2 1 2. - 0 - -2.5095739401876926e-003 - 0.5787907838821411 - 0.4998494982719421 - <_> - - <_> - - - - <_>7 12 6 8 -1. - <_>10 12 3 8 2. - 0 - -0.0773275569081306 - 0.8397865891456604 - 0.4811120033264160 - <_> - - <_> - - - - <_>12 2 4 10 -1. - <_>14 2 2 5 2. - <_>12 7 2 5 2. - 0 - -0.0414858199656010 - 0.2408611029386520 - 0.5176993012428284 - <_> - - <_> - - - - <_>8 11 2 1 -1. - <_>9 11 1 1 2. - 0 - 1.0355669655837119e-004 - 0.4355360865592957 - 0.5417054295539856 - <_> - - <_> - - - - <_>10 5 1 12 -1. - <_>10 9 1 4 3. - 0 - 1.3255809899419546e-003 - 0.5453971028327942 - 0.4894095063209534 - <_> - - <_> - - - - <_>0 11 6 9 -1. - <_>3 11 3 9 2. - 0 - -8.0598732456564903e-003 - 0.5771024227142334 - 0.4577918946743012 - <_> - - <_> - - - - <_>12 2 4 10 -1. - <_>14 2 2 5 2. - <_>12 7 2 5 2. - 0 - 0.0190586205571890 - 0.5169867873191834 - 0.3400475084781647 - <_> - - <_> - - - - <_>4 2 4 10 -1. - <_>4 2 2 5 2. - <_>6 7 2 5 2. - 0 - -0.0350578911602497 - 0.2203243970870972 - 0.5000503063201904 - <_> - - <_> - - - - <_>11 4 4 2 -1. - <_>13 4 2 1 2. - <_>11 5 2 1 2. - 0 - 5.7296059094369411e-003 - 0.5043408274650574 - 0.6597570776939392 - <_> - - <_> - - - - <_>0 14 6 3 -1. - <_>0 15 6 1 3. - 0 - -0.0116483299061656 - 0.2186284959316254 - 0.4996652901172638 - <_> - - <_> - - - - <_>11 4 4 2 -1. - <_>13 4 2 1 2. - <_>11 5 2 1 2. - 0 - 1.4544479781761765e-003 - 0.5007681846618652 - 0.5503727793693543 - <_> - - <_> - - - - <_>6 1 3 2 -1. - <_>7 1 1 2 3. - 0 - -2.5030909455381334e-004 - 0.4129841029644013 - 0.5241670012474060 - <_> - - <_> - - - - <_>11 4 4 2 -1. - <_>13 4 2 1 2. - <_>11 5 2 1 2. - 0 - -8.2907272735610604e-004 - 0.5412868261337280 - 0.4974496066570282 - <_> - - <_> - - - - <_>5 4 4 2 -1. - <_>5 4 2 1 2. - <_>7 5 2 1 2. - 0 - 1.0862209601327777e-003 - 0.4605529904365540 - 0.5879228711128235 - <_> - - <_> - - - - <_>13 0 2 12 -1. - <_>14 0 1 6 2. - <_>13 6 1 6 2. - 0 - 2.0000500080641359e-004 - 0.5278854966163635 - 0.4705209136009216 - <_> - - <_> - - - - <_>6 0 3 10 -1. - <_>7 0 1 10 3. - 0 - 2.9212920926511288e-003 - 0.5129609704017639 - 0.3755536973476410 - <_> - - <_> - - - - <_>3 0 17 8 -1. - <_>3 4 17 4 2. - 0 - 0.0253874007612467 - 0.4822691977024078 - 0.5790768265724182 - <_> - - <_> - - - - <_>0 4 20 4 -1. - <_>0 6 20 2 2. - 0 - -3.1968469265848398e-003 - 0.5248395204544067 - 0.3962840139865875 - 87.6960296630859380 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>0 3 8 2 -1. - <_>4 3 4 2 2. - 0 - 5.8031738735735416e-003 - 0.3498983979225159 - 0.5961983203887940 - <_> - - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - -9.0003069490194321e-003 - 0.6816636919975281 - 0.4478552043437958 - <_> - - <_> - - - - <_>5 7 6 4 -1. - <_>5 7 3 2 2. - <_>8 9 3 2 2. - 0 - -1.1549659539014101e-003 - 0.5585706233978272 - 0.3578251004219055 - <_> - - <_> - - - - <_>8 3 4 9 -1. - <_>8 6 4 3 3. - 0 - -1.1069850297644734e-003 - 0.5365036129951477 - 0.3050428032875061 - <_> - - <_> - - - - <_>8 15 1 4 -1. - <_>8 17 1 2 2. - 0 - 1.0308309720130637e-004 - 0.3639095127582550 - 0.5344635844230652 - <_> - - <_> - - - - <_>4 5 12 7 -1. - <_>8 5 4 7 3. - 0 - -5.0984839908778667e-003 - 0.2859157025814056 - 0.5504264831542969 - <_> - - <_> - - - - <_>4 2 4 10 -1. - <_>4 2 2 5 2. - <_>6 7 2 5 2. - 0 - 8.2572200335562229e-004 - 0.5236523747444153 - 0.3476041853427887 - <_> - - <_> - - - - <_>3 0 17 2 -1. - <_>3 1 17 1 2. - 0 - 9.9783325567841530e-003 - 0.4750322103500366 - 0.6219646930694580 - <_> - - <_> - - - - <_>2 2 16 15 -1. - <_>2 7 16 5 3. - 0 - -0.0374025292694569 - 0.3343375921249390 - 0.5278062820434570 - <_> - - <_> - - - - <_>15 2 5 2 -1. - <_>15 3 5 1 2. - 0 - 4.8548257909715176e-003 - 0.5192180871963501 - 0.3700444102287293 - <_> - - <_> - - - - <_>9 3 2 2 -1. - <_>10 3 1 2 2. - 0 - -1.8664470408111811e-003 - 0.2929843962192535 - 0.5091944932937622 - <_> - - <_> - - - - <_>4 5 16 15 -1. - <_>4 10 16 5 3. - 0 - 0.0168888904154301 - 0.3686845898628235 - 0.5431225895881653 - <_> - - <_> - - - - <_>7 13 5 6 -1. - <_>7 16 5 3 2. - 0 - -5.8372621424496174e-003 - 0.3632183969020844 - 0.5221335887908936 - <_> - - <_> - - - - <_>10 7 3 2 -1. - <_>11 7 1 2 3. - 0 - -1.4713739510625601e-003 - 0.5870683789253235 - 0.4700650870800018 - <_> - - <_> - - - - <_>8 3 3 1 -1. - <_>9 3 1 1 3. - 0 - -1.1522950371727347e-003 - 0.3195894956588745 - 0.5140954256057739 - <_> - - <_> - - - - <_>9 16 3 3 -1. - <_>9 17 3 1 3. - 0 - -4.2560300789773464e-003 - 0.6301859021186829 - 0.4814921021461487 - <_> - - <_> - - - - <_>0 2 5 2 -1. - <_>0 3 5 1 2. - 0 - -6.7378291860222816e-003 - 0.1977048069238663 - 0.5025808215141296 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - 0.0113826701417565 - 0.4954132139682770 - 0.6867045760154724 - <_> - - <_> - - - - <_>1 7 12 1 -1. - <_>5 7 4 1 3. - 0 - 5.1794708706438541e-003 - 0.5164427757263184 - 0.3350647985935211 - <_> - - <_> - - - - <_>7 5 6 14 -1. - <_>7 12 6 7 2. - 0 - -0.1174378991127014 - 0.2315246015787125 - 0.5234413743019104 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 0 4 5 2. - <_>4 5 4 5 2. - 0 - 0.0287034492939711 - 0.4664297103881836 - 0.6722521185874939 - <_> - - <_> - - - - <_>9 1 3 2 -1. - <_>10 1 1 2 3. - 0 - 4.8231030814349651e-003 - 0.5220875144004822 - 0.2723532915115356 - <_> - - <_> - - - - <_>8 1 3 2 -1. - <_>9 1 1 2 3. - 0 - 2.6798530016094446e-003 - 0.5079277157783508 - 0.2906948924064636 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 8.0504082143306732e-003 - 0.4885950982570648 - 0.6395021080970764 - <_> - - <_> - - - - <_>7 4 6 16 -1. - <_>7 12 6 8 2. - 0 - 4.8054959625005722e-003 - 0.5197256803512573 - 0.3656663894653320 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -2.2420159075409174e-003 - 0.6153467893600464 - 0.4763701856136322 - <_> - - <_> - - - - <_>2 3 2 6 -1. - <_>2 5 2 2 3. - 0 - -0.0137577103450894 - 0.2637344896793366 - 0.5030903220176697 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - -0.1033829972147942 - 0.2287521958351135 - 0.5182461142539978 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -9.4432085752487183e-003 - 0.6953303813934326 - 0.4694949090480804 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - 8.0271181650459766e-004 - 0.5450655221939087 - 0.4268783926963806 - <_> - - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - -4.1945669800043106e-003 - 0.6091387867927551 - 0.4571642875671387 - <_> - - <_> - - - - <_>13 11 3 6 -1. - <_>13 13 3 2 3. - 0 - 0.0109422104433179 - 0.5241063237190247 - 0.3284547030925751 - <_> - - <_> - - - - <_>3 14 2 6 -1. - <_>3 17 2 3 2. - 0 - -5.7841069065034389e-004 - 0.5387929081916809 - 0.4179368913173676 - <_> - - <_> - - - - <_>14 3 6 2 -1. - <_>14 4 6 1 2. - 0 - -2.0888620056211948e-003 - 0.4292691051959992 - 0.5301715731620789 - <_> - - <_> - - - - <_>0 8 16 2 -1. - <_>0 9 16 1 2. - 0 - 3.2383969519287348e-003 - 0.3792347908020020 - 0.5220744013786316 - <_> - - <_> - - - - <_>14 3 6 2 -1. - <_>14 4 6 1 2. - 0 - 4.9075027927756310e-003 - 0.5237283110618591 - 0.4126757979393005 - <_> - - <_> - - - - <_>0 0 5 6 -1. - <_>0 2 5 2 3. - 0 - -0.0322779417037964 - 0.1947655975818634 - 0.4994502067565918 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - -8.9711230248212814e-003 - 0.6011285185813904 - 0.4929032027721405 - <_> - - <_> - - - - <_>4 11 3 6 -1. - <_>4 13 3 2 3. - 0 - 0.0153210898861289 - 0.5009753704071045 - 0.2039822041988373 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - 2.0855569746345282e-003 - 0.4862189888954163 - 0.5721694827079773 - <_> - - <_> - - - - <_>9 5 1 3 -1. - <_>9 6 1 1 3. - 0 - 5.0615021027624607e-003 - 0.5000218749046326 - 0.1801805943250656 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - -3.7174751050770283e-003 - 0.5530117154121399 - 0.4897592961788178 - <_> - - <_> - - - - <_>6 6 8 12 -1. - <_>6 12 8 6 2. - 0 - -0.0121705001220107 - 0.4178605973720551 - 0.5383723974227905 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - 4.6248398721218109e-003 - 0.4997169971466065 - 0.5761327147483826 - <_> - - <_> - - - - <_>5 12 9 2 -1. - <_>8 12 3 2 3. - 0 - -2.1040429419372231e-004 - 0.5331807136535645 - 0.4097681045532227 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - -0.0146417804062366 - 0.5755925178527832 - 0.5051776170730591 - <_> - - <_> - - - - <_>4 5 4 3 -1. - <_>4 6 4 1 3. - 0 - 3.3199489116668701e-003 - 0.4576976895332336 - 0.6031805872917175 - <_> - - <_> - - - - <_>6 6 9 2 -1. - <_>9 6 3 2 3. - 0 - 3.7236879579722881e-003 - 0.4380396902561188 - 0.5415883064270020 - <_> - - <_> - - - - <_>4 11 1 3 -1. - <_>4 12 1 1 3. - 0 - 8.2951161311939359e-004 - 0.5163031816482544 - 0.3702219128608704 - <_> - - <_> - - - - <_>14 12 6 6 -1. - <_>14 12 3 6 2. - 0 - -0.0114084901288152 - 0.6072946786880493 - 0.4862565100193024 - <_> - - <_> - - - - <_>7 0 3 7 -1. - <_>8 0 1 7 3. - 0 - -4.5320121571421623e-003 - 0.3292475938796997 - 0.5088962912559509 - <_> - - <_> - - - - <_>9 8 3 3 -1. - <_>10 8 1 3 3. - 0 - 5.1276017911732197e-003 - 0.4829767942428589 - 0.6122708916664124 - <_> - - <_> - - - - <_>8 8 3 3 -1. - <_>9 8 1 3 3. - 0 - 9.8583158105611801e-003 - 0.4660679996013641 - 0.6556177139282227 - <_> - - <_> - - - - <_>5 10 11 3 -1. - <_>5 11 11 1 3. - 0 - 0.0369859188795090 - 0.5204849243164063 - 0.1690472066402435 - <_> - - <_> - - - - <_>5 7 10 1 -1. - <_>10 7 5 1 2. - 0 - 4.6491161920130253e-003 - 0.5167322158813477 - 0.3725225031375885 - <_> - - <_> - - - - <_>9 7 3 2 -1. - <_>10 7 1 2 3. - 0 - -4.2664702050387859e-003 - 0.6406493186950684 - 0.4987342953681946 - <_> - - <_> - - - - <_>8 7 3 2 -1. - <_>9 7 1 2 3. - 0 - -4.7956590424291790e-004 - 0.5897293090820313 - 0.4464873969554901 - <_> - - <_> - - - - <_>11 9 4 2 -1. - <_>11 9 2 2 2. - 0 - 3.6827160511165857e-003 - 0.5441560745239258 - 0.3472662866115570 - <_> - - <_> - - - - <_>5 9 4 2 -1. - <_>7 9 2 2 2. - 0 - -0.0100598800927401 - 0.2143162935972214 - 0.5004829764366150 - <_> - - <_> - - - - <_>14 10 2 4 -1. - <_>14 12 2 2 2. - 0 - -3.0361840617842972e-004 - 0.5386424064636231 - 0.4590323865413666 - <_> - - <_> - - - - <_>7 7 3 2 -1. - <_>8 7 1 2 3. - 0 - -1.4545479789376259e-003 - 0.5751184225082398 - 0.4497095048427582 - <_> - - <_> - - - - <_>14 17 6 3 -1. - <_>14 18 6 1 3. - 0 - 1.6515209572389722e-003 - 0.5421937704086304 - 0.4238520860671997 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>4 5 6 6 2. - <_>10 11 6 6 2. - 0 - -7.8468639403581619e-003 - 0.4077920913696289 - 0.5258157253265381 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - -5.1259850151836872e-003 - 0.4229275882244110 - 0.5479453206062317 - <_> - - <_> - - - - <_>0 4 15 4 -1. - <_>5 4 5 4 3. - 0 - -0.0368909612298012 - 0.6596375703811646 - 0.4674678146839142 - <_> - - <_> - - - - <_>13 2 4 1 -1. - <_>13 2 2 1 2. - 0 - 2.4035639944486320e-004 - 0.4251135885715485 - 0.5573202967643738 - <_> - - <_> - - - - <_>4 12 2 2 -1. - <_>4 13 2 1 2. - 0 - -1.5150169929256663e-005 - 0.5259246826171875 - 0.4074114859104157 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 2.2108471021056175e-003 - 0.4671722948551178 - 0.5886352062225342 - <_> - - <_> - - - - <_>9 13 2 3 -1. - <_>9 14 2 1 3. - 0 - -1.1568620102480054e-003 - 0.5711066126823425 - 0.4487161934375763 - <_> - - <_> - - - - <_>13 11 2 3 -1. - <_>13 12 2 1 3. - 0 - 4.9996292218565941e-003 - 0.5264198184013367 - 0.2898327112197876 - <_> - - <_> - - - - <_>7 12 4 4 -1. - <_>7 12 2 2 2. - <_>9 14 2 2 2. - 0 - -1.4656189596280456e-003 - 0.3891738057136536 - 0.5197871923446655 - <_> - - <_> - - - - <_>10 11 2 2 -1. - <_>11 11 1 1 2. - <_>10 12 1 1 2. - 0 - -1.1975039960816503e-003 - 0.5795872807502747 - 0.4927955865859985 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - -4.4954330660402775e-003 - 0.2377603054046631 - 0.5012555122375488 - <_> - - <_> - - - - <_>10 11 2 2 -1. - <_>11 11 1 1 2. - <_>10 12 1 1 2. - 0 - 1.4997160178609192e-004 - 0.4876626133918762 - 0.5617607831954956 - <_> - - <_> - - - - <_>0 17 6 3 -1. - <_>0 18 6 1 3. - 0 - 2.6391509454697371e-003 - 0.5168088078498840 - 0.3765509128570557 - <_> - - <_> - - - - <_>10 11 2 2 -1. - <_>11 11 1 1 2. - <_>10 12 1 1 2. - 0 - -2.9368131072260439e-004 - 0.5446649193763733 - 0.4874630868434906 - <_> - - <_> - - - - <_>8 11 2 2 -1. - <_>8 11 1 1 2. - <_>9 12 1 1 2. - 0 - 1.4211760135367513e-003 - 0.4687897861003876 - 0.6691331863403320 - <_> - - <_> - - - - <_>12 5 8 4 -1. - <_>12 5 4 4 2. - 0 - 0.0794276371598244 - 0.5193443894386292 - 0.2732945978641510 - <_> - - <_> - - - - <_>0 5 8 4 -1. - <_>4 5 4 4 2. - 0 - 0.0799375027418137 - 0.4971731007099152 - 0.1782083958387375 - <_> - - <_> - - - - <_>13 2 4 1 -1. - <_>13 2 2 1 2. - 0 - 0.0110892597585917 - 0.5165994763374329 - 0.3209475874900818 - <_> - - <_> - - - - <_>3 2 4 1 -1. - <_>5 2 2 1 2. - 0 - 1.6560709627810866e-004 - 0.4058471918106079 - 0.5307276248931885 - <_> - - <_> - - - - <_>10 0 4 2 -1. - <_>12 0 2 1 2. - <_>10 1 2 1 2. - 0 - -5.3354292176663876e-003 - 0.3445056974887848 - 0.5158129930496216 - <_> - - <_> - - - - <_>7 12 3 1 -1. - <_>8 12 1 1 3. - 0 - 1.1287260567769408e-003 - 0.4594863057136536 - 0.6075533032417297 - <_> - - <_> - - - - <_>8 11 4 8 -1. - <_>10 11 2 4 2. - <_>8 15 2 4 2. - 0 - -0.0219692196696997 - 0.1680400967597961 - 0.5228595733642578 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -2.1775320055894554e-004 - 0.3861596882343292 - 0.5215672850608826 - <_> - - <_> - - - - <_>3 18 15 2 -1. - <_>3 19 15 1 2. - 0 - 2.0200149447191507e-004 - 0.5517979264259338 - 0.4363039135932922 - <_> - - <_> - - - - <_>2 6 2 12 -1. - <_>2 6 1 6 2. - <_>3 12 1 6 2. - 0 - -0.0217331498861313 - 0.7999460101127625 - 0.4789851009845734 - <_> - - <_> - - - - <_>9 8 2 3 -1. - <_>9 9 2 1 3. - 0 - -8.4399932529777288e-004 - 0.4085975885391235 - 0.5374773144721985 - <_> - - <_> - - - - <_>7 10 3 2 -1. - <_>8 10 1 2 3. - 0 - -4.3895249837078154e-004 - 0.5470405220985413 - 0.4366143047809601 - <_> - - <_> - - - - <_>11 11 3 1 -1. - <_>12 11 1 1 3. - 0 - 1.5092400135472417e-003 - 0.4988996982574463 - 0.5842149257659912 - <_> - - <_> - - - - <_>6 11 3 1 -1. - <_>7 11 1 1 3. - 0 - -3.5547839943319559e-003 - 0.6753690242767334 - 0.4721005856990814 - <_> - - <_> - - - - <_>9 2 4 2 -1. - <_>11 2 2 1 2. - <_>9 3 2 1 2. - 0 - 4.8191400128416717e-004 - 0.5415853857994080 - 0.4357109069824219 - <_> - - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - -6.0264398343861103e-003 - 0.2258509993553162 - 0.4991880953311920 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>8 1 6 3 3. - 0 - -0.0116681400686502 - 0.6256554722785950 - 0.4927498996257782 - <_> - - <_> - - - - <_>5 1 4 14 -1. - <_>7 1 2 14 2. - 0 - -2.8718370012938976e-003 - 0.3947784900665283 - 0.5245801806449890 - <_> - - <_> - - - - <_>8 16 12 3 -1. - <_>8 16 6 3 2. - 0 - 0.0170511696487665 - 0.4752511084079742 - 0.5794224143028259 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - -0.0133520802482963 - 0.6041104793548584 - 0.4544535875320435 - <_> - - <_> - - - - <_>9 14 2 6 -1. - <_>9 17 2 3 2. - 0 - -3.9301801007241011e-004 - 0.4258275926113129 - 0.5544905066490173 - <_> - - <_> - - - - <_>9 12 1 8 -1. - <_>9 16 1 4 2. - 0 - 3.0483349692076445e-003 - 0.5233420133590698 - 0.3780272901058197 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - -4.3579288758337498e-003 - 0.6371889114379883 - 0.4838674068450928 - <_> - - <_> - - - - <_>9 6 2 12 -1. - <_>9 10 2 4 3. - 0 - 5.6661018170416355e-003 - 0.5374705791473389 - 0.4163666069507599 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - 6.0677339206449687e-005 - 0.4638795852661133 - 0.5311625003814697 - <_> - - <_> - - - - <_>0 1 4 8 -1. - <_>2 1 2 8 2. - 0 - 0.0367381609976292 - 0.4688656032085419 - 0.6466524004936218 - <_> - - <_> - - - - <_>9 1 6 2 -1. - <_>12 1 3 1 2. - <_>9 2 3 1 2. - 0 - 8.6528137326240540e-003 - 0.5204318761825562 - 0.2188657969236374 - <_> - - <_> - - - - <_>1 3 12 14 -1. - <_>1 10 12 7 2. - 0 - -0.1537135988473892 - 0.1630371958017349 - 0.4958840012550354 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>10 12 2 1 2. - <_>8 13 2 1 2. - 0 - -4.1560421232134104e-004 - 0.5774459242820740 - 0.4696458876132965 - <_> - - <_> - - - - <_>1 9 10 2 -1. - <_>1 9 5 1 2. - <_>6 10 5 1 2. - 0 - -1.2640169588848948e-003 - 0.3977175951004028 - 0.5217198133468628 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - -3.5473341122269630e-003 - 0.6046528220176697 - 0.4808315038681030 - <_> - - <_> - - - - <_>6 8 8 3 -1. - <_>6 9 8 1 3. - 0 - 3.0019069527043030e-005 - 0.3996723890304565 - 0.5228201150894165 - <_> - - <_> - - - - <_>9 15 5 3 -1. - <_>9 16 5 1 3. - 0 - 1.3113019522279501e-003 - 0.4712158143520355 - 0.5765997767448425 - <_> - - <_> - - - - <_>8 7 4 3 -1. - <_>8 8 4 1 3. - 0 - -1.3374709524214268e-003 - 0.4109584987163544 - 0.5253170132637024 - <_> - - <_> - - - - <_>7 7 6 2 -1. - <_>7 8 6 1 2. - 0 - 0.0208767093718052 - 0.5202993750572205 - 0.1757981926202774 - <_> - - <_> - - - - <_>5 7 8 2 -1. - <_>5 7 4 1 2. - <_>9 8 4 1 2. - 0 - -7.5497948564589024e-003 - 0.6566609740257263 - 0.4694975018501282 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - 0.0241885501891375 - 0.5128673911094666 - 0.3370220959186554 - <_> - - <_> - - - - <_>4 7 4 2 -1. - <_>4 8 4 1 2. - 0 - -2.9358828905969858e-003 - 0.6580786705017090 - 0.4694541096687317 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 0.0575579293072224 - 0.5146445035934448 - 0.2775259912014008 - <_> - - <_> - - - - <_>4 9 3 3 -1. - <_>5 9 1 3 3. - 0 - -1.1343370424583554e-003 - 0.3836601972579956 - 0.5192667245864868 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - 0.0168169997632504 - 0.5085592865943909 - 0.6177260875701904 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 5.0535178743302822e-003 - 0.5138763189315796 - 0.3684791922569275 - <_> - - <_> - - - - <_>17 3 3 6 -1. - <_>18 3 1 6 3. - 0 - -4.5874710194766521e-003 - 0.5989655256271362 - 0.4835202097892761 - <_> - - <_> - - - - <_>0 3 3 6 -1. - <_>1 3 1 6 3. - 0 - 1.6882460331544280e-003 - 0.4509486854076386 - 0.5723056793212891 - <_> - - <_> - - - - <_>17 14 1 2 -1. - <_>17 15 1 1 2. - 0 - -1.6554000321775675e-003 - 0.3496770858764648 - 0.5243319272994995 - <_> - - <_> - - - - <_>4 9 4 3 -1. - <_>6 9 2 3 2. - 0 - -0.0193738006055355 - 0.1120536997914314 - 0.4968712925910950 - <_> - - <_> - - - - <_>12 9 3 3 -1. - <_>12 10 3 1 3. - 0 - 0.0103744501248002 - 0.5148196816444397 - 0.4395213127136231 - <_> - - <_> - - - - <_>5 9 3 3 -1. - <_>5 10 3 1 3. - 0 - 1.4973050565458834e-004 - 0.4084999859333038 - 0.5269886851310730 - <_> - - <_> - - - - <_>9 5 6 8 -1. - <_>12 5 3 4 2. - <_>9 9 3 4 2. - 0 - -0.0429819300770760 - 0.6394104957580566 - 0.5018504261970520 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>5 5 3 4 2. - <_>8 9 3 4 2. - 0 - 8.3065936341881752e-003 - 0.4707553982734680 - 0.6698353290557861 - <_> - - <_> - - - - <_>16 1 4 6 -1. - <_>16 4 4 3 2. - 0 - -4.1285790503025055e-003 - 0.4541369080543518 - 0.5323647260665894 - <_> - - <_> - - - - <_>1 0 6 20 -1. - <_>3 0 2 20 3. - 0 - 1.7399420030415058e-003 - 0.4333961904048920 - 0.5439866185188294 - <_> - - <_> - - - - <_>12 11 3 2 -1. - <_>13 11 1 2 3. - 0 - 1.1739750334527344e-004 - 0.4579687118530273 - 0.5543426275253296 - <_> - - <_> - - - - <_>5 11 3 2 -1. - <_>6 11 1 2 3. - 0 - 1.8585780344437808e-004 - 0.4324643909931183 - 0.5426754951477051 - <_> - - <_> - - - - <_>9 4 6 1 -1. - <_>11 4 2 1 3. - 0 - 5.5587692186236382e-003 - 0.5257220864295960 - 0.3550611138343811 - <_> - - <_> - - - - <_>0 0 8 3 -1. - <_>4 0 4 3 2. - 0 - -7.9851560294628143e-003 - 0.6043018102645874 - 0.4630635976791382 - <_> - - <_> - - - - <_>15 0 2 5 -1. - <_>15 0 1 5 2. - 0 - 6.0594122624024749e-004 - 0.4598254859447479 - 0.5533195137977600 - <_> - - <_> - - - - <_>4 1 3 2 -1. - <_>5 1 1 2 3. - 0 - -2.2983040253166109e-004 - 0.4130752086639404 - 0.5322461128234863 - <_> - - <_> - - - - <_>7 0 6 15 -1. - <_>9 0 2 15 3. - 0 - 4.3740210821852088e-004 - 0.4043039977550507 - 0.5409289002418518 - <_> - - <_> - - - - <_>6 11 3 1 -1. - <_>7 11 1 1 3. - 0 - 2.9482020181603730e-004 - 0.4494963884353638 - 0.5628852248191834 - <_> - - <_> - - - - <_>12 0 3 4 -1. - <_>13 0 1 4 3. - 0 - 0.0103126596659422 - 0.5177510976791382 - 0.2704316973686218 - <_> - - <_> - - - - <_>5 4 6 1 -1. - <_>7 4 2 1 3. - 0 - -7.7241109684109688e-003 - 0.1988019049167633 - 0.4980553984642029 - <_> - - <_> - - - - <_>12 7 3 2 -1. - <_>12 8 3 1 2. - 0 - -4.6797208487987518e-003 - 0.6644750237464905 - 0.5018296241760254 - <_> - - <_> - - - - <_>0 1 4 6 -1. - <_>0 4 4 3 2. - 0 - -5.0755459815263748e-003 - 0.3898304998874664 - 0.5185269117355347 - <_> - - <_> - - - - <_>12 7 3 2 -1. - <_>12 8 3 1 2. - 0 - 2.2479740437120199e-003 - 0.4801808893680573 - 0.5660336017608643 - <_> - - <_> - - - - <_>2 16 3 3 -1. - <_>2 17 3 1 3. - 0 - 8.3327008178457618e-004 - 0.5210919976234436 - 0.3957188129425049 - <_> - - <_> - - - - <_>13 8 6 10 -1. - <_>16 8 3 5 2. - <_>13 13 3 5 2. - 0 - -0.0412793308496475 - 0.6154541969299316 - 0.5007054209709168 - <_> - - <_> - - - - <_>0 9 5 2 -1. - <_>0 10 5 1 2. - 0 - -5.0930189900100231e-004 - 0.3975942134857178 - 0.5228403806686401 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>13 11 1 1 2. - <_>12 12 1 1 2. - 0 - 1.2568780221045017e-003 - 0.4979138076305389 - 0.5939183235168457 - <_> - - <_> - - - - <_>3 15 3 3 -1. - <_>3 16 3 1 3. - 0 - 8.0048497766256332e-003 - 0.4984497129917145 - 0.1633366048336029 - <_> - - <_> - - - - <_>12 7 3 2 -1. - <_>12 8 3 1 2. - 0 - -1.1879300000146031e-003 - 0.5904964804649353 - 0.4942624866962433 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>5 8 3 1 2. - 0 - 6.1948952497914433e-004 - 0.4199557900428772 - 0.5328726172447205 - <_> - - <_> - - - - <_>9 5 9 9 -1. - <_>9 8 9 3 3. - 0 - 6.6829859279096127e-003 - 0.5418602824211121 - 0.4905889034271240 - <_> - - <_> - - - - <_>5 0 3 7 -1. - <_>6 0 1 7 3. - 0 - -3.7062340416014194e-003 - 0.3725939095020294 - 0.5138000249862671 - <_> - - <_> - - - - <_>5 2 12 5 -1. - <_>9 2 4 5 3. - 0 - -0.0397394113242626 - 0.6478961110115051 - 0.5050346851348877 - <_> - - <_> - - - - <_>6 11 2 2 -1. - <_>6 11 1 1 2. - <_>7 12 1 1 2. - 0 - 1.4085009461268783e-003 - 0.4682339131832123 - 0.6377884149551392 - <_> - - <_> - - - - <_>15 15 3 2 -1. - <_>15 16 3 1 2. - 0 - 3.9322688826359808e-004 - 0.5458530187606812 - 0.4150482118129730 - <_> - - <_> - - - - <_>2 15 3 2 -1. - <_>2 16 3 1 2. - 0 - -1.8979819724336267e-003 - 0.3690159916877747 - 0.5149704217910767 - <_> - - <_> - - - - <_>14 12 6 8 -1. - <_>17 12 3 4 2. - <_>14 16 3 4 2. - 0 - -0.0139704402536154 - 0.6050562858581543 - 0.4811357855796814 - <_> - - <_> - - - - <_>2 8 15 6 -1. - <_>7 8 5 6 3. - 0 - -0.1010081991553307 - 0.2017080038785934 - 0.4992361962795258 - <_> - - <_> - - - - <_>2 2 18 17 -1. - <_>8 2 6 17 3. - 0 - -0.0173469204455614 - 0.5713148713111877 - 0.4899486005306244 - <_> - - <_> - - - - <_>5 1 4 1 -1. - <_>7 1 2 1 2. - 0 - 1.5619759506080300e-004 - 0.4215388894081116 - 0.5392642021179199 - <_> - - <_> - - - - <_>5 2 12 5 -1. - <_>9 2 4 5 3. - 0 - 0.1343892961740494 - 0.5136151909828186 - 0.3767612874507904 - <_> - - <_> - - - - <_>3 2 12 5 -1. - <_>7 2 4 5 3. - 0 - -0.0245822407305241 - 0.7027357816696167 - 0.4747906923294067 - <_> - - <_> - - - - <_>4 9 12 4 -1. - <_>10 9 6 2 2. - <_>4 11 6 2 2. - 0 - -3.8553720805794001e-003 - 0.4317409098148346 - 0.5427716970443726 - <_> - - <_> - - - - <_>5 15 6 2 -1. - <_>5 15 3 1 2. - <_>8 16 3 1 2. - 0 - -2.3165249731391668e-003 - 0.5942698717117310 - 0.4618647992610931 - <_> - - <_> - - - - <_>10 14 2 3 -1. - <_>10 15 2 1 3. - 0 - -4.8518120311200619e-003 - 0.6191568970680237 - 0.4884895086288452 - <_> - - <_> - - - - <_>0 13 20 2 -1. - <_>0 13 10 1 2. - <_>10 14 10 1 2. - 0 - 2.4699938949197531e-003 - 0.5256664752960205 - 0.4017199873924255 - <_> - - <_> - - - - <_>4 9 12 8 -1. - <_>10 9 6 4 2. - <_>4 13 6 4 2. - 0 - 0.0454969592392445 - 0.5237867832183838 - 0.2685773968696594 - <_> - - <_> - - - - <_>8 13 3 6 -1. - <_>8 16 3 3 2. - 0 - -0.0203195996582508 - 0.2130445986986160 - 0.4979738891124725 - <_> - - <_> - - - - <_>10 12 2 2 -1. - <_>10 13 2 1 2. - 0 - 2.6994998916052282e-004 - 0.4814041852951050 - 0.5543122291564941 - <_> - - <_> - - - - <_>9 12 2 2 -1. - <_>9 12 1 1 2. - <_>10 13 1 1 2. - 0 - -1.8232699949294329e-003 - 0.6482579708099365 - 0.4709989130496979 - <_> - - <_> - - - - <_>4 11 14 4 -1. - <_>11 11 7 2 2. - <_>4 13 7 2 2. - 0 - -6.3015790656208992e-003 - 0.4581927955150604 - 0.5306236147880554 - <_> - - <_> - - - - <_>8 5 4 2 -1. - <_>8 6 4 1 2. - 0 - -2.4139499873854220e-004 - 0.5232086777687073 - 0.4051763117313385 - <_> - - <_> - - - - <_>10 10 6 3 -1. - <_>12 10 2 3 3. - 0 - -1.0330369696021080e-003 - 0.5556201934814453 - 0.4789193868637085 - <_> - - <_> - - - - <_>2 14 1 2 -1. - <_>2 15 1 1 2. - 0 - 1.8041160365100950e-004 - 0.5229442715644836 - 0.4011810123920441 - <_> - - <_> - - - - <_>13 8 6 12 -1. - <_>16 8 3 6 2. - <_>13 14 3 6 2. - 0 - -0.0614078603684902 - 0.6298682093620300 - 0.5010703206062317 - <_> - - <_> - - - - <_>1 8 6 12 -1. - <_>1 8 3 6 2. - <_>4 14 3 6 2. - 0 - -0.0695439130067825 - 0.7228280901908875 - 0.4773184061050415 - <_> - - <_> - - - - <_>10 0 6 10 -1. - <_>12 0 2 10 3. - 0 - -0.0705426633358002 - 0.2269513010978699 - 0.5182529091835022 - <_> - - <_> - - - - <_>5 11 8 4 -1. - <_>5 11 4 2 2. - <_>9 13 4 2 2. - 0 - 2.4423799477517605e-003 - 0.5237097144126892 - 0.4098151028156281 - <_> - - <_> - - - - <_>10 16 8 4 -1. - <_>14 16 4 2 2. - <_>10 18 4 2 2. - 0 - 1.5494349645450711e-003 - 0.4773750901222229 - 0.5468043088912964 - <_> - - <_> - - - - <_>7 7 6 6 -1. - <_>9 7 2 6 3. - 0 - -0.0239142198115587 - 0.7146975994110107 - 0.4783824980258942 - <_> - - <_> - - - - <_>10 2 4 10 -1. - <_>10 2 2 10 2. - 0 - -0.0124536901712418 - 0.2635296881198883 - 0.5241122841835022 - <_> - - <_> - - - - <_>6 1 4 9 -1. - <_>8 1 2 9 2. - 0 - -2.0760179904755205e-004 - 0.3623757064342499 - 0.5113608837127686 - <_> - - <_> - - - - <_>12 19 2 1 -1. - <_>12 19 1 1 2. - 0 - 2.9781080229440704e-005 - 0.4705932140350342 - 0.5432801842689514 - 90.2533493041992190 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 4 9 -1. - <_>3 2 2 9 2. - 0 - 0.0117727499455214 - 0.3860518932342529 - 0.6421167254447937 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>9 5 2 4 3. - 0 - 0.0270375702530146 - 0.4385654926300049 - 0.6754038929939270 - <_> - - <_> - - - - <_>9 4 2 4 -1. - <_>9 6 2 2 2. - 0 - -3.6419500247575343e-005 - 0.5487101078033447 - 0.3423315882682800 - <_> - - <_> - - - - <_>14 5 2 8 -1. - <_>14 9 2 4 2. - 0 - 1.9995409529656172e-003 - 0.3230532109737396 - 0.5400317907333374 - <_> - - <_> - - - - <_>7 6 5 12 -1. - <_>7 12 5 6 2. - 0 - 4.5278300531208515e-003 - 0.5091639757156372 - 0.2935043871402741 - <_> - - <_> - - - - <_>14 6 2 6 -1. - <_>14 9 2 3 2. - 0 - 4.7890920541249216e-004 - 0.4178153872489929 - 0.5344064235687256 - <_> - - <_> - - - - <_>4 6 2 6 -1. - <_>4 9 2 3 2. - 0 - 1.1720920447260141e-003 - 0.2899182140827179 - 0.5132070779800415 - <_> - - <_> - - - - <_>8 15 10 4 -1. - <_>13 15 5 2 2. - <_>8 17 5 2 2. - 0 - 9.5305702416226268e-004 - 0.4280124902725220 - 0.5560845136642456 - <_> - - <_> - - - - <_>6 18 2 2 -1. - <_>7 18 1 2 2. - 0 - 1.5099150004971307e-005 - 0.4044871926307678 - 0.5404760241508484 - <_> - - <_> - - - - <_>11 3 6 2 -1. - <_>11 4 6 1 2. - 0 - -6.0817901976406574e-004 - 0.4271768927574158 - 0.5503466129302979 - <_> - - <_> - - - - <_>2 0 16 6 -1. - <_>2 2 16 2 3. - 0 - 3.3224520739167929e-003 - 0.3962723910808563 - 0.5369734764099121 - <_> - - <_> - - - - <_>11 3 6 2 -1. - <_>11 4 6 1 2. - 0 - -1.1037490330636501e-003 - 0.4727177917957306 - 0.5237749814987183 - <_> - - <_> - - - - <_>4 11 10 3 -1. - <_>4 12 10 1 3. - 0 - -1.4350269921123981e-003 - 0.5603008270263672 - 0.4223509132862091 - <_> - - <_> - - - - <_>11 3 6 2 -1. - <_>11 4 6 1 2. - 0 - 2.0767399109899998e-003 - 0.5225917100906372 - 0.4732725918292999 - <_> - - <_> - - - - <_>3 3 6 2 -1. - <_>3 4 6 1 2. - 0 - -1.6412809782195836e-004 - 0.3999075889587402 - 0.5432739853858948 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - 8.8302437216043472e-003 - 0.4678385853767395 - 0.6027327179908752 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - -0.0105520701035857 - 0.3493967056274414 - 0.5213974714279175 - <_> - - <_> - - - - <_>9 16 3 3 -1. - <_>9 17 3 1 3. - 0 - -2.2731600329279900e-003 - 0.6185818910598755 - 0.4749062955379486 - <_> - - <_> - - - - <_>4 6 6 2 -1. - <_>6 6 2 2 3. - 0 - -8.4786332445219159e-004 - 0.5285341143608093 - 0.3843482136726379 - <_> - - <_> - - - - <_>15 11 1 3 -1. - <_>15 12 1 1 3. - 0 - 1.2081359745934606e-003 - 0.5360640883445740 - 0.3447335958480835 - <_> - - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - 2.6512730401009321e-003 - 0.4558292031288147 - 0.6193962097167969 - <_> - - <_> - - - - <_>10 9 2 2 -1. - <_>10 10 2 1 2. - 0 - -1.1012479662895203e-003 - 0.3680230081081390 - 0.5327628254890442 - <_> - - <_> - - - - <_>3 1 4 3 -1. - <_>5 1 2 3 2. - 0 - 4.9561518244445324e-004 - 0.3960595130920410 - 0.5274940729141235 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -0.0439017713069916 - 0.7020444869995117 - 0.4992839097976685 - <_> - - <_> - - - - <_>0 0 20 1 -1. - <_>10 0 10 1 2. - 0 - 0.0346903502941132 - 0.5049164295196533 - 0.2766602933406830 - <_> - - <_> - - - - <_>15 11 1 3 -1. - <_>15 12 1 1 3. - 0 - -2.7442190330475569e-003 - 0.2672632932662964 - 0.5274971127510071 - <_> - - <_> - - - - <_>0 4 3 4 -1. - <_>1 4 1 4 3. - 0 - 3.3316588960587978e-003 - 0.4579482972621918 - 0.6001101732254028 - <_> - - <_> - - - - <_>16 3 3 6 -1. - <_>16 5 3 2 3. - 0 - -0.0200445707887411 - 0.3171594142913818 - 0.5235717892646790 - <_> - - <_> - - - - <_>1 3 3 6 -1. - <_>1 5 3 2 3. - 0 - 1.3492030557245016e-003 - 0.5265362858772278 - 0.4034324884414673 - <_> - - <_> - - - - <_>6 2 12 6 -1. - <_>12 2 6 3 2. - <_>6 5 6 3 2. - 0 - 2.9702018946409225e-003 - 0.5332456827163696 - 0.4571984112262726 - <_> - - <_> - - - - <_>8 10 4 3 -1. - <_>8 11 4 1 3. - 0 - 6.3039981760084629e-003 - 0.4593310952186585 - 0.6034635901451111 - <_> - - <_> - - - - <_>4 2 14 6 -1. - <_>11 2 7 3 2. - <_>4 5 7 3 2. - 0 - -0.0129365902394056 - 0.4437963962554932 - 0.5372971296310425 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - 4.0148729458451271e-003 - 0.4680323898792267 - 0.6437833905220032 - <_> - - <_> - - - - <_>15 13 2 3 -1. - <_>15 14 2 1 3. - 0 - -2.6401679497212172e-003 - 0.3709631860256195 - 0.5314332842826843 - <_> - - <_> - - - - <_>8 12 4 3 -1. - <_>8 13 4 1 3. - 0 - 0.0139184398576617 - 0.4723555147647858 - 0.7130808830261231 - <_> - - <_> - - - - <_>15 11 1 3 -1. - <_>15 12 1 1 3. - 0 - -4.5087869511917233e-004 - 0.4492394030094147 - 0.5370404124259949 - <_> - - <_> - - - - <_>7 13 5 2 -1. - <_>7 14 5 1 2. - 0 - 2.5384349282830954e-004 - 0.4406864047050476 - 0.5514402985572815 - <_> - - <_> - - - - <_>7 12 6 3 -1. - <_>7 13 6 1 3. - 0 - 2.2710000630468130e-003 - 0.4682416915893555 - 0.5967984199523926 - <_> - - <_> - - - - <_>5 11 4 4 -1. - <_>5 13 4 2 2. - 0 - 2.4120779708027840e-003 - 0.5079392194747925 - 0.3018598854541779 - <_> - - <_> - - - - <_>11 4 3 3 -1. - <_>12 4 1 3 3. - 0 - -3.6025670851813629e-005 - 0.5601037144660950 - 0.4471096992492676 - <_> - - <_> - - - - <_>6 4 3 3 -1. - <_>7 4 1 3 3. - 0 - -7.4905529618263245e-003 - 0.2207535058259964 - 0.4989944100379944 - <_> - - <_> - - - - <_>16 5 3 6 -1. - <_>17 5 1 6 3. - 0 - -0.0175131205469370 - 0.6531215906143189 - 0.5017648935317993 - <_> - - <_> - - - - <_>3 6 12 7 -1. - <_>7 6 4 7 3. - 0 - 0.1428163051605225 - 0.4967963099479675 - 0.1482062041759491 - <_> - - <_> - - - - <_>16 5 3 6 -1. - <_>17 5 1 6 3. - 0 - 5.5345268920063972e-003 - 0.4898946881294251 - 0.5954223871231079 - <_> - - <_> - - - - <_>3 13 2 3 -1. - <_>3 14 2 1 3. - 0 - -9.6323591424152255e-004 - 0.3927116990089417 - 0.5196074247360230 - <_> - - <_> - - - - <_>16 5 3 6 -1. - <_>17 5 1 6 3. - 0 - -2.0370010752230883e-003 - 0.5613325238227844 - 0.4884858131408691 - <_> - - <_> - - - - <_>1 5 3 6 -1. - <_>2 5 1 6 3. - 0 - 1.6614829655736685e-003 - 0.4472880065441132 - 0.5578880906105042 - <_> - - <_> - - - - <_>1 9 18 1 -1. - <_>7 9 6 1 3. - 0 - -3.1188090797513723e-003 - 0.3840532898902893 - 0.5397477746009827 - <_> - - <_> - - - - <_>0 9 8 7 -1. - <_>4 9 4 7 2. - 0 - -6.4000617712736130e-003 - 0.5843983888626099 - 0.4533218145370483 - <_> - - <_> - - - - <_>12 11 8 2 -1. - <_>12 12 8 1 2. - 0 - 3.1319601112045348e-004 - 0.5439221858978272 - 0.4234727919101715 - <_> - - <_> - - - - <_>0 11 8 2 -1. - <_>0 12 8 1 2. - 0 - -0.0182220991700888 - 0.1288464963436127 - 0.4958404898643494 - <_> - - <_> - - - - <_>9 13 2 3 -1. - <_>9 14 2 1 3. - 0 - 8.7969247251749039e-003 - 0.4951297938823700 - 0.7153480052947998 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>4 10 6 2 2. - <_>10 12 6 2 2. - 0 - -4.2395070195198059e-003 - 0.3946599960327148 - 0.5194936990737915 - <_> - - <_> - - - - <_>9 3 3 7 -1. - <_>10 3 1 7 3. - 0 - 9.7086271271109581e-003 - 0.4897503852844238 - 0.6064900159835815 - <_> - - <_> - - - - <_>7 2 3 5 -1. - <_>8 2 1 5 3. - 0 - -3.9934171363711357e-003 - 0.3245440125465393 - 0.5060828924179077 - <_> - - <_> - - - - <_>9 12 4 6 -1. - <_>11 12 2 3 2. - <_>9 15 2 3 2. - 0 - -0.0167850591242313 - 0.1581953018903732 - 0.5203778743743897 - <_> - - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - 0.0182720907032490 - 0.4680935144424439 - 0.6626979112625122 - <_> - - <_> - - - - <_>15 4 4 2 -1. - <_>15 5 4 1 2. - 0 - 5.6872838176786900e-003 - 0.5211697816848755 - 0.3512184917926788 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -1.0739039862528443e-003 - 0.5768386125564575 - 0.4529845118522644 - <_> - - <_> - - - - <_>14 2 6 4 -1. - <_>14 4 6 2 2. - 0 - -3.7093870341777802e-003 - 0.4507763087749481 - 0.5313581228256226 - <_> - - <_> - - - - <_>7 16 6 1 -1. - <_>9 16 2 1 3. - 0 - -2.1110709349159151e-004 - 0.5460820198059082 - 0.4333376884460449 - <_> - - <_> - - - - <_>15 13 2 3 -1. - <_>15 14 2 1 3. - 0 - 1.0670139454305172e-003 - 0.5371856093406677 - 0.4078390896320343 - <_> - - <_> - - - - <_>8 7 3 10 -1. - <_>9 7 1 10 3. - 0 - 3.5943021066486835e-003 - 0.4471287131309509 - 0.5643836259841919 - <_> - - <_> - - - - <_>11 10 2 6 -1. - <_>11 12 2 2 3. - 0 - -5.1776031032204628e-003 - 0.4499393105506897 - 0.5280330181121826 - <_> - - <_> - - - - <_>6 10 4 1 -1. - <_>8 10 2 1 2. - 0 - -2.5414369883947074e-004 - 0.5516173243522644 - 0.4407708048820496 - <_> - - <_> - - - - <_>10 9 2 2 -1. - <_>10 10 2 1 2. - 0 - 6.3522560521960258e-003 - 0.5194190144538879 - 0.2465227991342545 - <_> - - <_> - - - - <_>8 9 2 2 -1. - <_>8 10 2 1 2. - 0 - -4.4205080484971404e-004 - 0.3830705881118774 - 0.5139682292938232 - <_> - - <_> - - - - <_>12 7 2 2 -1. - <_>13 7 1 1 2. - <_>12 8 1 1 2. - 0 - 7.4488727841526270e-004 - 0.4891090989112854 - 0.5974786877632141 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>5 7 1 1 2. - <_>6 8 1 1 2. - 0 - -3.5116379149258137e-003 - 0.7413681745529175 - 0.4768764972686768 - <_> - - <_> - - - - <_>13 0 3 14 -1. - <_>14 0 1 14 3. - 0 - -0.0125409103929996 - 0.3648819029331207 - 0.5252826809883118 - <_> - - <_> - - - - <_>4 0 3 14 -1. - <_>5 0 1 14 3. - 0 - 9.4931852072477341e-003 - 0.5100492835044861 - 0.3629586994647980 - <_> - - <_> - - - - <_>13 4 3 14 -1. - <_>14 4 1 14 3. - 0 - 0.0129611501470208 - 0.5232442021369934 - 0.4333561062812805 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 4.7209449112415314e-003 - 0.4648149013519287 - 0.6331052780151367 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -2.3119079414755106e-003 - 0.5930309891700745 - 0.4531058073043823 - <_> - - <_> - - - - <_>4 2 3 16 -1. - <_>5 2 1 16 3. - 0 - -2.8262299019843340e-003 - 0.3870477974414825 - 0.5257101058959961 - <_> - - <_> - - - - <_>7 2 8 10 -1. - <_>7 7 8 5 2. - 0 - -1.4311339473351836e-003 - 0.5522503256797791 - 0.4561854898929596 - <_> - - <_> - - - - <_>6 14 7 3 -1. - <_>6 15 7 1 3. - 0 - 1.9378310535103083e-003 - 0.4546220898628235 - 0.5736966729164124 - <_> - - <_> - - - - <_>9 2 10 12 -1. - <_>14 2 5 6 2. - <_>9 8 5 6 2. - 0 - 2.6343559147790074e-004 - 0.5345739126205444 - 0.4571875035762787 - <_> - - <_> - - - - <_>6 7 8 2 -1. - <_>6 8 8 1 2. - 0 - 7.8257522545754910e-004 - 0.3967815935611725 - 0.5220187902450562 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>8 16 4 3 2. - 0 - -0.0195504408329725 - 0.2829642891883850 - 0.5243508219718933 - <_> - - <_> - - - - <_>6 6 1 3 -1. - <_>6 7 1 1 3. - 0 - 4.3914958951063454e-004 - 0.4590066969394684 - 0.5899090170860291 - <_> - - <_> - - - - <_>16 2 4 6 -1. - <_>16 4 4 2 3. - 0 - 0.0214520003646612 - 0.5231410861015320 - 0.2855378985404968 - <_> - - <_> - - - - <_>6 6 4 2 -1. - <_>6 6 2 1 2. - <_>8 7 2 1 2. - 0 - 5.8973580598831177e-004 - 0.4397256970405579 - 0.5506421923637390 - <_> - - <_> - - - - <_>16 2 4 6 -1. - <_>16 4 4 2 3. - 0 - -0.0261576101183891 - 0.3135079145431519 - 0.5189175009727478 - <_> - - <_> - - - - <_>0 2 4 6 -1. - <_>0 4 4 2 3. - 0 - -0.0139598604291677 - 0.3213272988796234 - 0.5040717720985413 - <_> - - <_> - - - - <_>9 6 2 6 -1. - <_>9 6 1 6 2. - 0 - -6.3699018210172653e-003 - 0.6387544870376587 - 0.4849506914615631 - <_> - - <_> - - - - <_>3 4 6 10 -1. - <_>3 9 6 5 2. - 0 - -8.5613820701837540e-003 - 0.2759132087230682 - 0.5032019019126892 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>9 5 1 6 2. - 0 - 9.6622901037335396e-004 - 0.4685640931129456 - 0.5834879279136658 - <_> - - <_> - - - - <_>3 13 2 3 -1. - <_>3 14 2 1 3. - 0 - 7.6550268568098545e-004 - 0.5175207257270813 - 0.3896422088146210 - <_> - - <_> - - - - <_>13 13 3 2 -1. - <_>13 14 3 1 2. - 0 - -8.1833340227603912e-003 - 0.2069136947393417 - 0.5208122134208679 - <_> - - <_> - - - - <_>2 16 10 4 -1. - <_>2 16 5 2 2. - <_>7 18 5 2 2. - 0 - -9.3976939097046852e-003 - 0.6134091019630432 - 0.4641222953796387 - <_> - - <_> - - - - <_>5 6 10 6 -1. - <_>10 6 5 3 2. - <_>5 9 5 3 2. - 0 - 4.8028980381786823e-003 - 0.5454108119010925 - 0.4395219981670380 - <_> - - <_> - - - - <_>7 14 1 3 -1. - <_>7 15 1 1 3. - 0 - -3.5680569708347321e-003 - 0.6344485282897949 - 0.4681093990802765 - <_> - - <_> - - - - <_>14 16 6 3 -1. - <_>14 17 6 1 3. - 0 - 4.0733120404183865e-003 - 0.5292683243751526 - 0.4015620052814484 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.2568129459396005e-003 - 0.4392988085746765 - 0.5452824831008911 - <_> - - <_> - - - - <_>7 4 10 3 -1. - <_>7 5 10 1 3. - 0 - -2.9065010603517294e-003 - 0.5898832082748413 - 0.4863379895687103 - <_> - - <_> - - - - <_>0 4 5 4 -1. - <_>0 6 5 2 2. - 0 - -2.4409340694546700e-003 - 0.4069364964962006 - 0.5247421860694885 - <_> - - <_> - - - - <_>13 11 3 9 -1. - <_>13 14 3 3 3. - 0 - 0.0248307008296251 - 0.5182725787162781 - 0.3682524859905243 - <_> - - <_> - - - - <_>4 11 3 9 -1. - <_>4 14 3 3 3. - 0 - -0.0488540083169937 - 0.1307577937841415 - 0.4961281120777130 - <_> - - <_> - - - - <_>9 7 2 1 -1. - <_>9 7 1 1 2. - 0 - -1.6110379947349429e-003 - 0.6421005725860596 - 0.4872662127017975 - <_> - - <_> - - - - <_>5 0 6 17 -1. - <_>7 0 2 17 3. - 0 - -0.0970094799995422 - 0.0477693490684032 - 0.4950988888740540 - <_> - - <_> - - - - <_>10 3 6 3 -1. - <_>10 3 3 3 2. - 0 - 1.1209240183234215e-003 - 0.4616267085075378 - 0.5354745984077454 - <_> - - <_> - - - - <_>2 2 15 4 -1. - <_>7 2 5 4 3. - 0 - -1.3064090162515640e-003 - 0.6261854171752930 - 0.4638805985450745 - <_> - - <_> - - - - <_>8 2 8 2 -1. - <_>12 2 4 1 2. - <_>8 3 4 1 2. - 0 - 4.5771620352752507e-004 - 0.5384417772293091 - 0.4646640121936798 - <_> - - <_> - - - - <_>8 1 3 6 -1. - <_>8 3 3 2 3. - 0 - -6.3149951165542006e-004 - 0.3804047107696533 - 0.5130257010459900 - <_> - - <_> - - - - <_>9 17 2 2 -1. - <_>9 18 2 1 2. - 0 - 1.4505970466416329e-004 - 0.4554310142993927 - 0.5664461851119995 - <_> - - <_> - - - - <_>0 0 2 14 -1. - <_>1 0 1 14 2. - 0 - -0.0164745505899191 - 0.6596958041191101 - 0.4715859889984131 - <_> - - <_> - - - - <_>12 0 7 3 -1. - <_>12 1 7 1 3. - 0 - 0.0133695797994733 - 0.5195466279983521 - 0.3035964965820313 - <_> - - <_> - - - - <_>1 14 1 2 -1. - <_>1 15 1 1 2. - 0 - 1.0271780047332868e-004 - 0.5229176282882690 - 0.4107066094875336 - <_> - - <_> - - - - <_>14 12 2 8 -1. - <_>15 12 1 4 2. - <_>14 16 1 4 2. - 0 - -5.5311559699475765e-003 - 0.6352887749671936 - 0.4960907101631165 - <_> - - <_> - - - - <_>1 0 7 3 -1. - <_>1 1 7 1 3. - 0 - -2.6187049224972725e-003 - 0.3824546039104462 - 0.5140984058380127 - <_> - - <_> - - - - <_>14 12 2 8 -1. - <_>15 12 1 4 2. - <_>14 16 1 4 2. - 0 - 5.0834268331527710e-003 - 0.4950439929962158 - 0.6220818758010864 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 0 4 6 2. - <_>10 6 4 6 2. - 0 - 0.0798181593418121 - 0.4952335953712463 - 0.1322475969791412 - <_> - - <_> - - - - <_>6 1 8 9 -1. - <_>6 4 8 3 3. - 0 - -0.0992265865206718 - 0.7542728781700134 - 0.5008416771888733 - <_> - - <_> - - - - <_>5 2 2 2 -1. - <_>5 3 2 1 2. - 0 - -6.5174017800018191e-004 - 0.3699302971363068 - 0.5130121111869812 - <_> - - <_> - - - - <_>13 14 6 6 -1. - <_>16 14 3 3 2. - <_>13 17 3 3 2. - 0 - -0.0189968496561050 - 0.6689178943634033 - 0.4921202957630158 - <_> - - <_> - - - - <_>0 17 20 2 -1. - <_>0 17 10 1 2. - <_>10 18 10 1 2. - 0 - 0.0173468999564648 - 0.4983300864696503 - 0.1859198063611984 - <_> - - <_> - - - - <_>10 3 2 6 -1. - <_>11 3 1 3 2. - <_>10 6 1 3 2. - 0 - 5.5082101607695222e-004 - 0.4574424028396606 - 0.5522121787071228 - <_> - - <_> - - - - <_>5 12 6 2 -1. - <_>8 12 3 2 2. - 0 - 2.0056050270795822e-003 - 0.5131744742393494 - 0.3856469988822937 - <_> - - <_> - - - - <_>10 7 6 13 -1. - <_>10 7 3 13 2. - 0 - -7.7688191086053848e-003 - 0.4361700117588043 - 0.5434309244155884 - <_> - - <_> - - - - <_>5 15 10 5 -1. - <_>10 15 5 5 2. - 0 - 0.0508782789111137 - 0.4682720899581909 - 0.6840639710426331 - <_> - - <_> - - - - <_>10 4 4 10 -1. - <_>10 4 2 10 2. - 0 - -2.2901780903339386e-003 - 0.4329245090484619 - 0.5306099057197571 - <_> - - <_> - - - - <_>5 7 2 1 -1. - <_>6 7 1 1 2. - 0 - -1.5715380141045898e-004 - 0.5370057225227356 - 0.4378164112567902 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>10 3 3 7 2. - 0 - 0.1051924005150795 - 0.5137274265289307 - 0.0673614665865898 - <_> - - <_> - - - - <_>4 3 6 7 -1. - <_>7 3 3 7 2. - 0 - 2.7198919560760260e-003 - 0.4112060964107513 - 0.5255665183067322 - <_> - - <_> - - - - <_>1 7 18 5 -1. - <_>7 7 6 5 3. - 0 - 0.0483377799391747 - 0.5404623746871948 - 0.4438967108726502 - <_> - - <_> - - - - <_>3 17 4 3 -1. - <_>5 17 2 3 2. - 0 - 9.5703761326149106e-004 - 0.4355969130992889 - 0.5399510860443115 - <_> - - <_> - - - - <_>8 14 12 6 -1. - <_>14 14 6 3 2. - <_>8 17 6 3 2. - 0 - -0.0253712590783834 - 0.5995175242424011 - 0.5031024813652039 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>0 13 10 2 2. - <_>10 15 10 2 2. - 0 - 0.0524579510092735 - 0.4950287938117981 - 0.1398351043462753 - <_> - - <_> - - - - <_>4 5 14 2 -1. - <_>11 5 7 1 2. - <_>4 6 7 1 2. - 0 - -0.0123656298965216 - 0.6397299170494080 - 0.4964106082916260 - <_> - - <_> - - - - <_>1 2 10 12 -1. - <_>1 2 5 6 2. - <_>6 8 5 6 2. - 0 - -0.1458971947431564 - 0.1001669988036156 - 0.4946322143077850 - <_> - - <_> - - - - <_>6 1 14 3 -1. - <_>6 2 14 1 3. - 0 - -0.0159086007624865 - 0.3312329947948456 - 0.5208340883255005 - <_> - - <_> - - - - <_>8 16 2 3 -1. - <_>8 17 2 1 3. - 0 - 3.9486068999394774e-004 - 0.4406363964080811 - 0.5426102876663208 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -5.2454001270234585e-003 - 0.2799589931964874 - 0.5189967155456543 - <_> - - <_> - - - - <_>5 15 4 2 -1. - <_>5 15 2 1 2. - <_>7 16 2 1 2. - 0 - -5.0421799533069134e-003 - 0.6987580060958862 - 0.4752142131328583 - <_> - - <_> - - - - <_>10 15 1 3 -1. - <_>10 16 1 1 3. - 0 - 2.9812189750373363e-003 - 0.4983288943767548 - 0.6307479739189148 - <_> - - <_> - - - - <_>8 16 4 4 -1. - <_>8 16 2 2 2. - <_>10 18 2 2 2. - 0 - -7.2884308174252510e-003 - 0.2982333004474640 - 0.5026869773864746 - <_> - - <_> - - - - <_>6 11 8 6 -1. - <_>6 14 8 3 2. - 0 - 1.5094350092113018e-003 - 0.5308442115783691 - 0.3832970857620239 - <_> - - <_> - - - - <_>2 13 5 2 -1. - <_>2 14 5 1 2. - 0 - -9.3340799212455750e-003 - 0.2037964016199112 - 0.4969817101955414 - <_> - - <_> - - - - <_>13 14 6 6 -1. - <_>16 14 3 3 2. - <_>13 17 3 3 2. - 0 - 0.0286671407520771 - 0.5025696754455566 - 0.6928027272224426 - <_> - - <_> - - - - <_>1 9 18 4 -1. - <_>7 9 6 4 3. - 0 - 0.1701968014240265 - 0.4960052967071533 - 0.1476442962884903 - <_> - - <_> - - - - <_>13 14 6 6 -1. - <_>16 14 3 3 2. - <_>13 17 3 3 2. - 0 - -3.2614478841423988e-003 - 0.5603063702583313 - 0.4826056063175201 - <_> - - <_> - - - - <_>0 2 1 6 -1. - <_>0 4 1 2 3. - 0 - 5.5769277969375253e-004 - 0.5205562114715576 - 0.4129633009433746 - <_> - - <_> - - - - <_>5 0 15 20 -1. - <_>5 10 15 10 2. - 0 - 0.3625833988189697 - 0.5221652984619141 - 0.3768612146377564 - <_> - - <_> - - - - <_>1 14 6 6 -1. - <_>1 14 3 3 2. - <_>4 17 3 3 2. - 0 - -0.0116151301190257 - 0.6022682785987854 - 0.4637489914894104 - <_> - - <_> - - - - <_>8 14 4 6 -1. - <_>10 14 2 3 2. - <_>8 17 2 3 2. - 0 - -4.0795197710394859e-003 - 0.4070447087287903 - 0.5337479114532471 - <_> - - <_> - - - - <_>7 11 2 1 -1. - <_>8 11 1 1 2. - 0 - 5.7204300537705421e-004 - 0.4601835012435913 - 0.5900393128395081 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - 6.7543348995968699e-004 - 0.5398252010345459 - 0.4345428943634033 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - 6.3295697327703238e-004 - 0.5201563239097595 - 0.4051358997821808 - <_> - - <_> - - - - <_>12 14 4 6 -1. - <_>14 14 2 3 2. - <_>12 17 2 3 2. - 0 - 1.2435320531949401e-003 - 0.4642387926578522 - 0.5547441244125366 - <_> - - <_> - - - - <_>4 14 4 6 -1. - <_>4 14 2 3 2. - <_>6 17 2 3 2. - 0 - -4.7363857738673687e-003 - 0.6198567152023315 - 0.4672552049160004 - <_> - - <_> - - - - <_>13 14 2 6 -1. - <_>14 14 1 3 2. - <_>13 17 1 3 2. - 0 - -6.4658462069928646e-003 - 0.6837332844734192 - 0.5019000768661499 - <_> - - <_> - - - - <_>5 14 2 6 -1. - <_>5 14 1 3 2. - <_>6 17 1 3 2. - 0 - 3.5017321351915598e-004 - 0.4344803094863892 - 0.5363622903823853 - <_> - - <_> - - - - <_>7 0 6 12 -1. - <_>7 4 6 4 3. - 0 - 1.5754920605104417e-004 - 0.4760079085826874 - 0.5732020735740662 - <_> - - <_> - - - - <_>0 7 12 2 -1. - <_>4 7 4 2 3. - 0 - 9.9774366244673729e-003 - 0.5090985894203186 - 0.3635039925575256 - <_> - - <_> - - - - <_>10 3 3 13 -1. - <_>11 3 1 13 3. - 0 - -4.1464529931545258e-004 - 0.5570064783096314 - 0.4593802094459534 - <_> - - <_> - - - - <_>7 3 3 13 -1. - <_>8 3 1 13 3. - 0 - -3.5888899583369493e-004 - 0.5356845855712891 - 0.4339134991168976 - <_> - - <_> - - - - <_>10 8 6 3 -1. - <_>10 9 6 1 3. - 0 - 4.0463250479660928e-004 - 0.4439803063869476 - 0.5436776876449585 - <_> - - <_> - - - - <_>3 11 3 2 -1. - <_>4 11 1 2 3. - 0 - -8.2184787606820464e-004 - 0.4042294919490814 - 0.5176299214363098 - <_> - - <_> - - - - <_>13 12 6 8 -1. - <_>16 12 3 4 2. - <_>13 16 3 4 2. - 0 - 5.9467419050633907e-003 - 0.4927651882171631 - 0.5633779764175415 - <_> - - <_> - - - - <_>7 6 6 5 -1. - <_>9 6 2 5 3. - 0 - -0.0217533893883228 - 0.8006293773651123 - 0.4800840914249420 - <_> - - <_> - - - - <_>17 11 2 7 -1. - <_>17 11 1 7 2. - 0 - -0.0145403798669577 - 0.3946054875850678 - 0.5182222723960877 - <_> - - <_> - - - - <_>3 13 8 2 -1. - <_>7 13 4 2 2. - 0 - -0.0405107699334621 - 0.0213249903172255 - 0.4935792982578278 - <_> - - <_> - - - - <_>6 9 8 3 -1. - <_>6 10 8 1 3. - 0 - -5.8458268176764250e-004 - 0.4012795984745026 - 0.5314025282859802 - <_> - - <_> - - - - <_>4 3 4 3 -1. - <_>4 4 4 1 3. - 0 - 5.5151800625026226e-003 - 0.4642418920993805 - 0.5896260738372803 - <_> - - <_> - - - - <_>11 3 4 3 -1. - <_>11 4 4 1 3. - 0 - -6.0626221820712090e-003 - 0.6502159237861633 - 0.5016477704048157 - <_> - - <_> - - - - <_>1 4 17 12 -1. - <_>1 8 17 4 3. - 0 - 0.0945358425378799 - 0.5264708995819092 - 0.4126827120780945 - <_> - - <_> - - - - <_>11 3 4 3 -1. - <_>11 4 4 1 3. - 0 - 4.7315051779150963e-003 - 0.4879199862480164 - 0.5892447829246521 - <_> - - <_> - - - - <_>4 8 6 3 -1. - <_>4 9 6 1 3. - 0 - -5.2571471314877272e-004 - 0.3917280137538910 - 0.5189412832260132 - <_> - - <_> - - - - <_>12 3 5 3 -1. - <_>12 4 5 1 3. - 0 - -2.5464049540460110e-003 - 0.5837599039077759 - 0.4985705912113190 - <_> - - <_> - - - - <_>1 11 2 7 -1. - <_>2 11 1 7 2. - 0 - -0.0260756891220808 - 0.1261983960866928 - 0.4955821931362152 - <_> - - <_> - - - - <_>15 12 2 8 -1. - <_>16 12 1 4 2. - <_>15 16 1 4 2. - 0 - -5.4779709316790104e-003 - 0.5722513794898987 - 0.5010265707969666 - <_> - - <_> - - - - <_>4 8 11 3 -1. - <_>4 9 11 1 3. - 0 - 5.1337741315364838e-003 - 0.5273262262344360 - 0.4226376116275787 - <_> - - <_> - - - - <_>9 13 6 2 -1. - <_>12 13 3 1 2. - <_>9 14 3 1 2. - 0 - 4.7944980906322598e-004 - 0.4450066983699799 - 0.5819587111473084 - <_> - - <_> - - - - <_>6 13 4 3 -1. - <_>6 14 4 1 3. - 0 - -2.1114079281687737e-003 - 0.5757653117179871 - 0.4511714875698090 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>10 12 1 3 3. - 0 - -0.0131799904629588 - 0.1884381026029587 - 0.5160734057426453 - <_> - - <_> - - - - <_>5 3 3 3 -1. - <_>5 4 3 1 3. - 0 - -4.7968099825084209e-003 - 0.6589789986610413 - 0.4736118912696838 - <_> - - <_> - - - - <_>9 4 2 3 -1. - <_>9 5 2 1 3. - 0 - 6.7483168095350266e-003 - 0.5259429812431335 - 0.3356395065784454 - <_> - - <_> - - - - <_>0 2 16 3 -1. - <_>0 3 16 1 3. - 0 - 1.4623369788751006e-003 - 0.5355271100997925 - 0.4264092147350311 - <_> - - <_> - - - - <_>15 12 2 8 -1. - <_>16 12 1 4 2. - <_>15 16 1 4 2. - 0 - 4.7645159065723419e-003 - 0.5034406781196594 - 0.5786827802658081 - <_> - - <_> - - - - <_>3 12 2 8 -1. - <_>3 12 1 4 2. - <_>4 16 1 4 2. - 0 - 6.8066660314798355e-003 - 0.4756605029106140 - 0.6677829027175903 - <_> - - <_> - - - - <_>14 13 3 6 -1. - <_>14 15 3 2 3. - 0 - 3.6608621012419462e-003 - 0.5369611978530884 - 0.4311546981334686 - <_> - - <_> - - - - <_>3 13 3 6 -1. - <_>3 15 3 2 3. - 0 - 0.0214496403932571 - 0.4968641996383667 - 0.1888816058635712 - <_> - - <_> - - - - <_>6 5 10 2 -1. - <_>11 5 5 1 2. - <_>6 6 5 1 2. - 0 - 4.1678901761770248e-003 - 0.4930733144283295 - 0.5815368890762329 - <_> - - <_> - - - - <_>2 14 14 6 -1. - <_>2 17 14 3 2. - 0 - 8.6467564105987549e-003 - 0.5205205082893372 - 0.4132595062255859 - <_> - - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - -3.6114078829996288e-004 - 0.5483555197715759 - 0.4800927937030792 - <_> - - <_> - - - - <_>4 16 2 2 -1. - <_>4 16 1 1 2. - <_>5 17 1 1 2. - 0 - 1.0808729566633701e-003 - 0.4689902067184448 - 0.6041421294212341 - <_> - - <_> - - - - <_>10 6 2 3 -1. - <_>10 7 2 1 3. - 0 - 5.7719959877431393e-003 - 0.5171142220497131 - 0.3053277134895325 - <_> - - <_> - - - - <_>0 17 20 2 -1. - <_>0 17 10 1 2. - <_>10 18 10 1 2. - 0 - 1.5720770461484790e-003 - 0.5219978094100952 - 0.4178803861141205 - <_> - - <_> - - - - <_>13 6 1 3 -1. - <_>13 7 1 1 3. - 0 - -1.9307859474793077e-003 - 0.5860369801521301 - 0.4812920093536377 - <_> - - <_> - - - - <_>8 13 3 2 -1. - <_>9 13 1 2 3. - 0 - -7.8926272690296173e-003 - 0.1749276965856552 - 0.4971733987331390 - <_> - - <_> - - - - <_>12 2 3 3 -1. - <_>13 2 1 3 3. - 0 - -2.2224679123610258e-003 - 0.4342589080333710 - 0.5212848186492920 - <_> - - <_> - - - - <_>3 18 2 2 -1. - <_>3 18 1 1 2. - <_>4 19 1 1 2. - 0 - 1.9011989934369922e-003 - 0.4765186905860901 - 0.6892055273056030 - <_> - - <_> - - - - <_>9 16 3 4 -1. - <_>10 16 1 4 3. - 0 - 2.7576119173318148e-003 - 0.5262191295623779 - 0.4337486028671265 - <_> - - <_> - - - - <_>6 6 1 3 -1. - <_>6 7 1 1 3. - 0 - 5.1787449046969414e-003 - 0.4804069101810455 - 0.7843729257583618 - <_> - - <_> - - - - <_>13 1 5 2 -1. - <_>13 2 5 1 2. - 0 - -9.0273341629654169e-004 - 0.4120846986770630 - 0.5353423953056335 - <_> - - <_> - - - - <_>7 14 6 2 -1. - <_>7 14 3 1 2. - <_>10 15 3 1 2. - 0 - 5.1797959022223949e-003 - 0.4740372896194458 - 0.6425960063934326 - <_> - - <_> - - - - <_>11 3 3 4 -1. - <_>12 3 1 4 3. - 0 - -0.0101140001788735 - 0.2468792051076889 - 0.5175017714500427 - <_> - - <_> - - - - <_>1 13 12 6 -1. - <_>5 13 4 6 3. - 0 - -0.0186170600354671 - 0.5756294131278992 - 0.4628978967666626 - <_> - - <_> - - - - <_>14 11 5 2 -1. - <_>14 12 5 1 2. - 0 - 5.9225959703326225e-003 - 0.5169625878334045 - 0.3214271068572998 - <_> - - <_> - - - - <_>2 15 14 4 -1. - <_>2 15 7 2 2. - <_>9 17 7 2 2. - 0 - -6.2945079989731312e-003 - 0.3872014880180359 - 0.5141636729240418 - <_> - - <_> - - - - <_>3 7 14 2 -1. - <_>10 7 7 1 2. - <_>3 8 7 1 2. - 0 - 6.5353019163012505e-003 - 0.4853048920631409 - 0.6310489773750305 - <_> - - <_> - - - - <_>1 11 4 2 -1. - <_>1 12 4 1 2. - 0 - 1.0878399480134249e-003 - 0.5117315053939819 - 0.3723258972167969 - <_> - - <_> - - - - <_>14 0 6 14 -1. - <_>16 0 2 14 3. - 0 - -0.0225422400981188 - 0.5692740082740784 - 0.4887112975120544 - <_> - - <_> - - - - <_>4 11 1 3 -1. - <_>4 12 1 1 3. - 0 - -3.0065660830587149e-003 - 0.2556012868881226 - 0.5003992915153503 - <_> - - <_> - - - - <_>14 0 6 14 -1. - <_>16 0 2 14 3. - 0 - 7.4741272255778313e-003 - 0.4810872972011566 - 0.5675926804542542 - <_> - - <_> - - - - <_>1 10 3 7 -1. - <_>2 10 1 7 3. - 0 - 0.0261623207479715 - 0.4971194863319397 - 0.1777237057685852 - <_> - - <_> - - - - <_>8 12 9 2 -1. - <_>8 13 9 1 2. - 0 - 9.4352738233283162e-004 - 0.4940010905265808 - 0.5491250753402710 - <_> - - <_> - - - - <_>0 6 20 1 -1. - <_>10 6 10 1 2. - 0 - 0.0333632417023182 - 0.5007612109184265 - 0.2790724039077759 - <_> - - <_> - - - - <_>8 4 4 4 -1. - <_>8 4 2 4 2. - 0 - -0.0151186501607299 - 0.7059578895568848 - 0.4973031878471375 - <_> - - <_> - - - - <_>0 0 2 2 -1. - <_>0 1 2 1 2. - 0 - 9.8648946732282639e-004 - 0.5128620266914368 - 0.3776761889457703 - 104.7491989135742200 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>5 3 10 9 -1. - <_>5 6 10 3 3. - 0 - -0.0951507985591888 - 0.6470757126808167 - 0.4017286896705627 - <_> - - <_> - - - - <_>15 2 4 10 -1. - <_>15 2 2 10 2. - 0 - 6.2702340073883533e-003 - 0.3999822139739990 - 0.5746449232101440 - <_> - - <_> - - - - <_>8 2 2 7 -1. - <_>9 2 1 7 2. - 0 - 3.0018089455552399e-004 - 0.3558770120143890 - 0.5538809895515442 - <_> - - <_> - - - - <_>7 4 12 1 -1. - <_>11 4 4 1 3. - 0 - 1.1757409665733576e-003 - 0.4256534874439240 - 0.5382617712020874 - <_> - - <_> - - - - <_>3 4 9 1 -1. - <_>6 4 3 1 3. - 0 - 4.4235268433112651e-005 - 0.3682908117771149 - 0.5589926838874817 - <_> - - <_> - - - - <_>15 10 1 4 -1. - <_>15 12 1 2 2. - 0 - -2.9936920327600092e-005 - 0.5452470183372498 - 0.4020367860794067 - <_> - - <_> - - - - <_>4 10 6 4 -1. - <_>7 10 3 4 2. - 0 - 3.0073199886828661e-003 - 0.5239058136940002 - 0.3317843973636627 - <_> - - <_> - - - - <_>15 9 1 6 -1. - <_>15 12 1 3 2. - 0 - -0.0105138896033168 - 0.4320689141750336 - 0.5307983756065369 - <_> - - <_> - - - - <_>7 17 6 3 -1. - <_>7 18 6 1 3. - 0 - 8.3476826548576355e-003 - 0.4504637122154236 - 0.6453298926353455 - <_> - - <_> - - - - <_>14 3 2 16 -1. - <_>15 3 1 8 2. - <_>14 11 1 8 2. - 0 - -3.1492270063608885e-003 - 0.4313425123691559 - 0.5370525121688843 - <_> - - <_> - - - - <_>4 9 1 6 -1. - <_>4 12 1 3 2. - 0 - -1.4435649973165710e-005 - 0.5326603055000305 - 0.3817971944808960 - <_> - - <_> - - - - <_>12 1 5 2 -1. - <_>12 2 5 1 2. - 0 - -4.2855090578086674e-004 - 0.4305163919925690 - 0.5382009744644165 - <_> - - <_> - - - - <_>6 18 4 2 -1. - <_>6 18 2 1 2. - <_>8 19 2 1 2. - 0 - 1.5062429883982986e-004 - 0.4235970973968506 - 0.5544965267181397 - <_> - - <_> - - - - <_>2 4 16 10 -1. - <_>10 4 8 5 2. - <_>2 9 8 5 2. - 0 - 0.0715598315000534 - 0.5303059816360474 - 0.2678802907466888 - <_> - - <_> - - - - <_>6 5 1 10 -1. - <_>6 10 1 5 2. - 0 - 8.4095180500298738e-004 - 0.3557108938694000 - 0.5205433964729309 - <_> - - <_> - - - - <_>4 8 15 2 -1. - <_>9 8 5 2 3. - 0 - 0.0629865005612373 - 0.5225362777709961 - 0.2861376106739044 - <_> - - <_> - - - - <_>1 8 15 2 -1. - <_>6 8 5 2 3. - 0 - -3.3798629883676767e-003 - 0.3624185919761658 - 0.5201697945594788 - <_> - - <_> - - - - <_>9 5 3 6 -1. - <_>9 7 3 2 3. - 0 - -1.1810739670181647e-004 - 0.5474476814270020 - 0.3959893882274628 - <_> - - <_> - - - - <_>5 7 8 2 -1. - <_>9 7 4 2 2. - 0 - -5.4505601292476058e-004 - 0.3740422129631043 - 0.5215715765953064 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -1.8454910023137927e-003 - 0.5893052220344544 - 0.4584448933601379 - <_> - - <_> - - - - <_>1 0 16 3 -1. - <_>1 1 16 1 3. - 0 - -4.3832371011376381e-004 - 0.4084582030773163 - 0.5385351181030273 - <_> - - <_> - - - - <_>11 2 7 2 -1. - <_>11 3 7 1 2. - 0 - -2.4000830017030239e-003 - 0.3777455091476440 - 0.5293580293655396 - <_> - - <_> - - - - <_>5 1 10 18 -1. - <_>5 7 10 6 3. - 0 - -0.0987957417964935 - 0.2963612079620361 - 0.5070089101791382 - <_> - - <_> - - - - <_>17 4 3 2 -1. - <_>18 4 1 2 3. - 0 - 3.1798239797353745e-003 - 0.4877632856369019 - 0.6726443767547607 - <_> - - <_> - - - - <_>8 13 1 3 -1. - <_>8 14 1 1 3. - 0 - 3.2406419632025063e-004 - 0.4366911053657532 - 0.5561109781265259 - <_> - - <_> - - - - <_>3 14 14 6 -1. - <_>3 16 14 2 3. - 0 - -0.0325472503900528 - 0.3128157854080200 - 0.5308616161346436 - <_> - - <_> - - - - <_>0 2 3 4 -1. - <_>1 2 1 4 3. - 0 - -7.7561130747199059e-003 - 0.6560224890708923 - 0.4639872014522553 - <_> - - <_> - - - - <_>12 1 5 2 -1. - <_>12 2 5 1 2. - 0 - 0.0160272493958473 - 0.5172680020332336 - 0.3141897916793823 - <_> - - <_> - - - - <_>3 1 5 2 -1. - <_>3 2 5 1 2. - 0 - 7.1002350523485802e-006 - 0.4084446132183075 - 0.5336294770240784 - <_> - - <_> - - - - <_>10 13 2 3 -1. - <_>10 14 2 1 3. - 0 - 7.3422808200120926e-003 - 0.4966922104358673 - 0.6603465080261231 - <_> - - <_> - - - - <_>8 13 2 3 -1. - <_>8 14 2 1 3. - 0 - -1.6970280557870865e-003 - 0.5908237099647522 - 0.4500182867050171 - <_> - - <_> - - - - <_>14 12 2 3 -1. - <_>14 13 2 1 3. - 0 - 2.4118260480463505e-003 - 0.5315160751342773 - 0.3599720895290375 - <_> - - <_> - - - - <_>7 2 2 3 -1. - <_>7 3 2 1 3. - 0 - -5.5300937965512276e-003 - 0.2334040999412537 - 0.4996814131736755 - <_> - - <_> - - - - <_>5 6 10 4 -1. - <_>10 6 5 2 2. - <_>5 8 5 2 2. - 0 - -2.6478730142116547e-003 - 0.5880935788154602 - 0.4684734046459198 - <_> - - <_> - - - - <_>9 13 1 6 -1. - <_>9 16 1 3 2. - 0 - 0.0112956296652555 - 0.4983777105808258 - 0.1884590983390808 - <_> - - <_> - - - - <_>10 12 2 2 -1. - <_>11 12 1 1 2. - <_>10 13 1 1 2. - 0 - -6.6952878842130303e-004 - 0.5872138142585754 - 0.4799019992351532 - <_> - - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - 1.4410680159926414e-003 - 0.5131189227104187 - 0.3501011133193970 - <_> - - <_> - - - - <_>14 4 6 6 -1. - <_>14 6 6 2 3. - 0 - 2.4637870956212282e-003 - 0.5339372158050537 - 0.4117639064788818 - <_> - - <_> - - - - <_>8 17 2 3 -1. - <_>8 18 2 1 3. - 0 - 3.3114518737420440e-004 - 0.4313383102416992 - 0.5398246049880981 - <_> - - <_> - - - - <_>16 4 4 6 -1. - <_>16 6 4 2 3. - 0 - -0.0335572697222233 - 0.2675336897373200 - 0.5179154872894287 - <_> - - <_> - - - - <_>0 4 4 6 -1. - <_>0 6 4 2 3. - 0 - 0.0185394193977118 - 0.4973869919776917 - 0.2317177057266235 - <_> - - <_> - - - - <_>14 6 2 3 -1. - <_>14 6 1 3 2. - 0 - -2.9698139405809343e-004 - 0.5529708266258240 - 0.4643664062023163 - <_> - - <_> - - - - <_>4 9 8 1 -1. - <_>8 9 4 1 2. - 0 - -4.5577259152196348e-004 - 0.5629584193229675 - 0.4469191133975983 - <_> - - <_> - - - - <_>8 12 4 3 -1. - <_>8 13 4 1 3. - 0 - -0.0101589802652597 - 0.6706212759017944 - 0.4925918877124786 - <_> - - <_> - - - - <_>5 12 10 6 -1. - <_>5 14 10 2 3. - 0 - -2.2413829356082715e-005 - 0.5239421725273132 - 0.3912901878356934 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - 7.2034963523037732e-005 - 0.4799438118934631 - 0.5501788854598999 - <_> - - <_> - - - - <_>8 15 4 2 -1. - <_>8 16 4 1 2. - 0 - -6.9267209619283676e-003 - 0.6930009722709656 - 0.4698084890842438 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - -7.6997838914394379e-003 - 0.4099623858928680 - 0.5480883121490479 - <_> - - <_> - - - - <_>7 12 4 6 -1. - <_>7 12 2 3 2. - <_>9 15 2 3 2. - 0 - -7.3130549862980843e-003 - 0.3283475935459137 - 0.5057886242866516 - <_> - - <_> - - - - <_>10 11 3 1 -1. - <_>11 11 1 1 3. - 0 - 1.9650589674711227e-003 - 0.4978047013282776 - 0.6398249864578247 - <_> - - <_> - - - - <_>9 7 2 10 -1. - <_>9 7 1 5 2. - <_>10 12 1 5 2. - 0 - 7.1647600270807743e-003 - 0.4661160111427307 - 0.6222137212753296 - <_> - - <_> - - - - <_>8 0 6 6 -1. - <_>10 0 2 6 3. - 0 - -0.0240786392241716 - 0.2334644943475723 - 0.5222162008285523 - <_> - - <_> - - - - <_>3 11 2 6 -1. - <_>3 13 2 2 3. - 0 - -0.0210279691964388 - 0.1183653995394707 - 0.4938226044178009 - <_> - - <_> - - - - <_>16 12 1 2 -1. - <_>16 13 1 1 2. - 0 - 3.6017020465806127e-004 - 0.5325019955635071 - 0.4116711020469666 - <_> - - <_> - - - - <_>1 14 6 6 -1. - <_>1 14 3 3 2. - <_>4 17 3 3 2. - 0 - -0.0172197297215462 - 0.6278762221336365 - 0.4664269089698792 - <_> - - <_> - - - - <_>13 1 3 6 -1. - <_>14 1 1 6 3. - 0 - -7.8672142699360847e-003 - 0.3403415083885193 - 0.5249736905097961 - <_> - - <_> - - - - <_>8 8 2 2 -1. - <_>8 9 2 1 2. - 0 - -4.4777389848604798e-004 - 0.3610411882400513 - 0.5086259245872498 - <_> - - <_> - - - - <_>9 9 3 3 -1. - <_>10 9 1 3 3. - 0 - 5.5486010387539864e-003 - 0.4884265959262848 - 0.6203498244285584 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - -6.9461148232221603e-003 - 0.2625930011272430 - 0.5011097192764282 - <_> - - <_> - - - - <_>14 0 2 3 -1. - <_>14 0 1 3 2. - 0 - 1.3569870498031378e-004 - 0.4340794980525971 - 0.5628312230110169 - <_> - - <_> - - - - <_>1 0 18 9 -1. - <_>7 0 6 9 3. - 0 - -0.0458802506327629 - 0.6507998704910278 - 0.4696274995803833 - <_> - - <_> - - - - <_>11 5 4 15 -1. - <_>11 5 2 15 2. - 0 - -0.0215825606137514 - 0.3826502859592438 - 0.5287616848945618 - <_> - - <_> - - - - <_>5 5 4 15 -1. - <_>7 5 2 15 2. - 0 - -0.0202095396816731 - 0.3233368098735809 - 0.5074477195739746 - <_> - - <_> - - - - <_>14 0 2 3 -1. - <_>14 0 1 3 2. - 0 - 5.8496710844337940e-003 - 0.5177603960037231 - 0.4489670991897583 - <_> - - <_> - - - - <_>4 0 2 3 -1. - <_>5 0 1 3 2. - 0 - -5.7476379879517481e-005 - 0.4020850956439972 - 0.5246363878250122 - <_> - - <_> - - - - <_>11 12 2 2 -1. - <_>12 12 1 1 2. - <_>11 13 1 1 2. - 0 - -1.1513100471347570e-003 - 0.6315072178840637 - 0.4905154109001160 - <_> - - <_> - - - - <_>7 12 2 2 -1. - <_>7 12 1 1 2. - <_>8 13 1 1 2. - 0 - 1.9862831104546785e-003 - 0.4702459871768951 - 0.6497151255607605 - <_> - - <_> - - - - <_>12 0 3 4 -1. - <_>13 0 1 4 3. - 0 - -5.2719512023031712e-003 - 0.3650383949279785 - 0.5227652788162231 - <_> - - <_> - - - - <_>4 11 3 3 -1. - <_>4 12 3 1 3. - 0 - 1.2662699446082115e-003 - 0.5166100859642029 - 0.3877618014812470 - <_> - - <_> - - - - <_>12 7 4 2 -1. - <_>12 8 4 1 2. - 0 - -6.2919440679252148e-003 - 0.7375894188880920 - 0.5023847818374634 - <_> - - <_> - - - - <_>8 10 3 2 -1. - <_>9 10 1 2 3. - 0 - 6.7360111279413104e-004 - 0.4423226118087769 - 0.5495585799217224 - <_> - - <_> - - - - <_>9 9 3 2 -1. - <_>10 9 1 2 3. - 0 - -1.0523450328037143e-003 - 0.5976396203041077 - 0.4859583079814911 - <_> - - <_> - - - - <_>8 9 3 2 -1. - <_>9 9 1 2 3. - 0 - -4.4216238893568516e-004 - 0.5955939292907715 - 0.4398930966854096 - <_> - - <_> - - - - <_>12 0 3 4 -1. - <_>13 0 1 4 3. - 0 - 1.1747940443456173e-003 - 0.5349888205528259 - 0.4605058133602142 - <_> - - <_> - - - - <_>5 0 3 4 -1. - <_>6 0 1 4 3. - 0 - 5.2457437850534916e-003 - 0.5049191117286682 - 0.2941577136516571 - <_> - - <_> - - - - <_>4 14 12 4 -1. - <_>10 14 6 2 2. - <_>4 16 6 2 2. - 0 - -0.0245397202670574 - 0.2550177872180939 - 0.5218586921691895 - <_> - - <_> - - - - <_>8 13 2 3 -1. - <_>8 14 2 1 3. - 0 - 7.3793041519820690e-004 - 0.4424861073493958 - 0.5490816235542297 - <_> - - <_> - - - - <_>10 10 3 8 -1. - <_>10 14 3 4 2. - 0 - 1.4233799884095788e-003 - 0.5319514274597168 - 0.4081355929374695 - <_> - - <_> - - - - <_>8 10 4 8 -1. - <_>8 10 2 4 2. - <_>10 14 2 4 2. - 0 - -2.4149110540747643e-003 - 0.4087659120559692 - 0.5238950252532959 - <_> - - <_> - - - - <_>10 8 3 1 -1. - <_>11 8 1 1 3. - 0 - -1.2165299849584699e-003 - 0.5674579143524170 - 0.4908052980899811 - <_> - - <_> - - - - <_>9 12 1 6 -1. - <_>9 15 1 3 2. - 0 - -1.2438809499144554e-003 - 0.4129425883293152 - 0.5256118178367615 - <_> - - <_> - - - - <_>10 8 3 1 -1. - <_>11 8 1 1 3. - 0 - 6.1942739412188530e-003 - 0.5060194134712219 - 0.7313653230667114 - <_> - - <_> - - - - <_>7 8 3 1 -1. - <_>8 8 1 1 3. - 0 - -1.6607169527560472e-003 - 0.5979632139205933 - 0.4596369862556458 - <_> - - <_> - - - - <_>5 2 15 14 -1. - <_>5 9 15 7 2. - 0 - -0.0273162592202425 - 0.4174365103244782 - 0.5308842062950134 - <_> - - <_> - - - - <_>2 1 2 10 -1. - <_>2 1 1 5 2. - <_>3 6 1 5 2. - 0 - -1.5845570014789701e-003 - 0.5615804791450501 - 0.4519486129283905 - <_> - - <_> - - - - <_>14 14 2 3 -1. - <_>14 15 2 1 3. - 0 - -1.5514739789068699e-003 - 0.4076187014579773 - 0.5360785126686096 - <_> - - <_> - - - - <_>2 7 3 3 -1. - <_>3 7 1 3 3. - 0 - 3.8446558755822480e-004 - 0.4347293972969055 - 0.5430442094802856 - <_> - - <_> - - - - <_>17 4 3 3 -1. - <_>17 5 3 1 3. - 0 - -0.0146722598001361 - 0.1659304946660996 - 0.5146093964576721 - <_> - - <_> - - - - <_>0 4 3 3 -1. - <_>0 5 3 1 3. - 0 - 8.1608882173895836e-003 - 0.4961819052696228 - 0.1884745955467224 - <_> - - <_> - - - - <_>13 5 6 2 -1. - <_>16 5 3 1 2. - <_>13 6 3 1 2. - 0 - 1.1121659772470593e-003 - 0.4868263900279999 - 0.6093816161155701 - <_> - - <_> - - - - <_>4 19 12 1 -1. - <_>8 19 4 1 3. - 0 - -7.2603770531713963e-003 - 0.6284325122833252 - 0.4690375924110413 - <_> - - <_> - - - - <_>12 12 2 4 -1. - <_>12 14 2 2 2. - 0 - -2.4046430189628154e-004 - 0.5575000047683716 - 0.4046044051647186 - <_> - - <_> - - - - <_>3 15 1 3 -1. - <_>3 16 1 1 3. - 0 - -2.3348190006799996e-004 - 0.4115762114524841 - 0.5252848267555237 - <_> - - <_> - - - - <_>11 16 6 4 -1. - <_>11 16 3 4 2. - 0 - 5.5736480280756950e-003 - 0.4730072915554047 - 0.5690100789070129 - <_> - - <_> - - - - <_>2 10 3 10 -1. - <_>3 10 1 10 3. - 0 - 0.0306237693876028 - 0.4971886873245239 - 0.1740095019340515 - <_> - - <_> - - - - <_>12 8 2 4 -1. - <_>12 8 1 4 2. - 0 - 9.2074798885732889e-004 - 0.5372117757797241 - 0.4354872107505798 - <_> - - <_> - - - - <_>6 8 2 4 -1. - <_>7 8 1 4 2. - 0 - -4.3550739064812660e-005 - 0.5366883873939514 - 0.4347316920757294 - <_> - - <_> - - - - <_>10 14 2 3 -1. - <_>10 14 1 3 2. - 0 - -6.6452710889279842e-003 - 0.3435518145561218 - 0.5160533189773560 - <_> - - <_> - - - - <_>5 1 10 3 -1. - <_>10 1 5 3 2. - 0 - 0.0432219989597797 - 0.4766792058944702 - 0.7293652892112732 - <_> - - <_> - - - - <_>10 7 3 2 -1. - <_>11 7 1 2 3. - 0 - 2.2331769578158855e-003 - 0.5029315948486328 - 0.5633171200752258 - <_> - - <_> - - - - <_>5 6 9 2 -1. - <_>8 6 3 2 3. - 0 - 3.1829739455133677e-003 - 0.4016092121601105 - 0.5192136764526367 - <_> - - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - -1.8027749320026487e-004 - 0.4088315963745117 - 0.5417919754981995 - <_> - - <_> - - - - <_>2 11 16 6 -1. - <_>2 11 8 3 2. - <_>10 14 8 3 2. - 0 - -5.2934689447283745e-003 - 0.4075677096843720 - 0.5243561863899231 - <_> - - <_> - - - - <_>12 7 2 2 -1. - <_>13 7 1 1 2. - <_>12 8 1 1 2. - 0 - 1.2750959722325206e-003 - 0.4913282990455627 - 0.6387010812759399 - <_> - - <_> - - - - <_>9 5 2 3 -1. - <_>9 6 2 1 3. - 0 - 4.3385322205722332e-003 - 0.5031672120094299 - 0.2947346866130829 - <_> - - <_> - - - - <_>9 7 3 2 -1. - <_>10 7 1 2 3. - 0 - 8.5250744596123695e-003 - 0.4949789047241211 - 0.6308869123458862 - <_> - - <_> - - - - <_>5 1 8 12 -1. - <_>5 7 8 6 2. - 0 - -9.4266352243721485e-004 - 0.5328366756439209 - 0.4285649955272675 - <_> - - <_> - - - - <_>13 5 2 2 -1. - <_>13 6 2 1 2. - 0 - 1.3609660090878606e-003 - 0.4991525113582611 - 0.5941501259803772 - <_> - - <_> - - - - <_>5 5 2 2 -1. - <_>5 6 2 1 2. - 0 - 4.4782509212382138e-004 - 0.4573504030704498 - 0.5854480862617493 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 1.3360050506889820e-003 - 0.4604358971118927 - 0.5849052071571350 - <_> - - <_> - - - - <_>4 14 2 3 -1. - <_>4 15 2 1 3. - 0 - -6.0967548051849008e-004 - 0.3969388902187347 - 0.5229423046112061 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -2.3656780831515789e-003 - 0.5808320045471191 - 0.4898357093334198 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.0734340175986290e-003 - 0.4351210892200470 - 0.5470039248466492 - <_> - - <_> - - - - <_>9 14 2 6 -1. - <_>10 14 1 3 2. - <_>9 17 1 3 2. - 0 - 2.1923359017819166e-003 - 0.5355060100555420 - 0.3842903971672058 - <_> - - <_> - - - - <_>8 14 3 2 -1. - <_>9 14 1 2 3. - 0 - 5.4968618787825108e-003 - 0.5018138885498047 - 0.2827191948890686 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>11 5 2 6 3. - 0 - -0.0753688216209412 - 0.1225076019763947 - 0.5148826837539673 - <_> - - <_> - - - - <_>5 5 6 6 -1. - <_>7 5 2 6 3. - 0 - 0.0251344703137875 - 0.4731766879558563 - 0.7025446295738220 - <_> - - <_> - - - - <_>13 13 1 2 -1. - <_>13 14 1 1 2. - 0 - -2.9358599931583740e-005 - 0.5430532097816467 - 0.4656086862087250 - <_> - - <_> - - - - <_>0 2 10 2 -1. - <_>0 3 10 1 2. - 0 - -5.8355910005047917e-004 - 0.4031040072441101 - 0.5190119743347168 - <_> - - <_> - - - - <_>13 13 1 2 -1. - <_>13 14 1 1 2. - 0 - -2.6639450807124376e-003 - 0.4308126866817474 - 0.5161771178245544 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>5 7 1 1 2. - <_>6 8 1 1 2. - 0 - -1.3804089976474643e-003 - 0.6219829916954041 - 0.4695515930652618 - <_> - - <_> - - - - <_>13 5 2 7 -1. - <_>13 5 1 7 2. - 0 - 1.2313219485804439e-003 - 0.5379363894462585 - 0.4425831139087677 - <_> - - <_> - - - - <_>6 13 1 2 -1. - <_>6 14 1 1 2. - 0 - -1.4644179827882908e-005 - 0.5281640291213989 - 0.4222503006458283 - <_> - - <_> - - - - <_>11 0 3 7 -1. - <_>12 0 1 7 3. - 0 - -0.0128188095986843 - 0.2582092881202698 - 0.5179932713508606 - <_> - - <_> - - - - <_>0 3 2 16 -1. - <_>0 3 1 8 2. - <_>1 11 1 8 2. - 0 - 0.0228521898388863 - 0.4778693020343781 - 0.7609264254570007 - <_> - - <_> - - - - <_>11 0 3 7 -1. - <_>12 0 1 7 3. - 0 - 8.2305970136076212e-004 - 0.5340992212295532 - 0.4671724140644074 - <_> - - <_> - - - - <_>6 0 3 7 -1. - <_>7 0 1 7 3. - 0 - 0.0127701200544834 - 0.4965761005878449 - 0.1472366005182266 - <_> - - <_> - - - - <_>11 16 8 4 -1. - <_>11 16 4 4 2. - 0 - -0.0500515103340149 - 0.6414994001388550 - 0.5016592144966126 - <_> - - <_> - - - - <_>1 16 8 4 -1. - <_>5 16 4 4 2. - 0 - 0.0157752707600594 - 0.4522320032119751 - 0.5685362219810486 - <_> - - <_> - - - - <_>13 5 2 7 -1. - <_>13 5 1 7 2. - 0 - -0.0185016207396984 - 0.2764748930931091 - 0.5137959122657776 - <_> - - <_> - - - - <_>5 5 2 7 -1. - <_>6 5 1 7 2. - 0 - 2.4626250378787518e-003 - 0.5141941905021668 - 0.3795408010482788 - <_> - - <_> - - - - <_>18 6 2 14 -1. - <_>18 13 2 7 2. - 0 - 0.0629161670804024 - 0.5060648918151856 - 0.6580433845520020 - <_> - - <_> - - - - <_>6 10 3 4 -1. - <_>6 12 3 2 2. - 0 - -2.1648500478477217e-005 - 0.5195388197898865 - 0.4019886851310730 - <_> - - <_> - - - - <_>14 7 1 2 -1. - <_>14 8 1 1 2. - 0 - 2.1180990152060986e-003 - 0.4962365031242371 - 0.5954458713531494 - <_> - - <_> - - - - <_>0 1 18 6 -1. - <_>0 1 9 3 2. - <_>9 4 9 3 2. - 0 - -0.0166348908096552 - 0.3757933080196381 - 0.5175446867942810 - <_> - - <_> - - - - <_>14 7 1 2 -1. - <_>14 8 1 1 2. - 0 - -2.8899470344185829e-003 - 0.6624013781547546 - 0.5057178735733032 - <_> - - <_> - - - - <_>0 6 2 14 -1. - <_>0 13 2 7 2. - 0 - 0.0767832621932030 - 0.4795796871185303 - 0.8047714829444885 - <_> - - <_> - - - - <_>17 0 3 12 -1. - <_>18 0 1 12 3. - 0 - 3.9170677773654461e-003 - 0.4937882125377655 - 0.5719941854476929 - <_> - - <_> - - - - <_>0 6 18 3 -1. - <_>0 7 18 1 3. - 0 - -0.0726706013083458 - 0.0538945607841015 - 0.4943903982639313 - <_> - - <_> - - - - <_>6 0 14 16 -1. - <_>6 8 14 8 2. - 0 - 0.5403950214385986 - 0.5129774212837219 - 0.1143338978290558 - <_> - - <_> - - - - <_>0 0 3 12 -1. - <_>1 0 1 12 3. - 0 - 2.9510019812732935e-003 - 0.4528343975543976 - 0.5698574185371399 - <_> - - <_> - - - - <_>13 0 3 7 -1. - <_>14 0 1 7 3. - 0 - 3.4508369863033295e-003 - 0.5357726812362671 - 0.4218730926513672 - <_> - - <_> - - - - <_>5 7 1 2 -1. - <_>5 8 1 1 2. - 0 - -4.2077939724549651e-004 - 0.5916172862052918 - 0.4637925922870636 - <_> - - <_> - - - - <_>14 4 6 6 -1. - <_>14 6 6 2 3. - 0 - 3.3051050268113613e-003 - 0.5273385047912598 - 0.4382042884826660 - <_> - - <_> - - - - <_>5 7 7 2 -1. - <_>5 8 7 1 2. - 0 - 4.7735060798004270e-004 - 0.4046528041362763 - 0.5181884765625000 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>8 9 6 3 3. - 0 - -0.0259285103529692 - 0.7452235817909241 - 0.5089386105537415 - <_> - - <_> - - - - <_>5 4 6 1 -1. - <_>7 4 2 1 3. - 0 - -2.9729790985584259e-003 - 0.3295435905456543 - 0.5058795213699341 - <_> - - <_> - - - - <_>13 0 6 4 -1. - <_>16 0 3 2 2. - <_>13 2 3 2 2. - 0 - 5.8508329093456268e-003 - 0.4857144057750702 - 0.5793024897575378 - <_> - - <_> - - - - <_>1 2 18 12 -1. - <_>1 6 18 4 3. - 0 - -0.0459675192832947 - 0.4312731027603149 - 0.5380653142929077 - <_> - - <_> - - - - <_>3 2 17 12 -1. - <_>3 6 17 4 3. - 0 - 0.1558596044778824 - 0.5196170210838318 - 0.1684713959693909 - <_> - - <_> - - - - <_>5 14 7 3 -1. - <_>5 15 7 1 3. - 0 - 0.0151648297905922 - 0.4735757112503052 - 0.6735026836395264 - <_> - - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - -1.0604249546304345e-003 - 0.5822926759719849 - 0.4775702953338623 - <_> - - <_> - - - - <_>3 14 3 3 -1. - <_>3 15 3 1 3. - 0 - 6.6476291976869106e-003 - 0.4999198913574219 - 0.2319535017013550 - <_> - - <_> - - - - <_>14 4 6 6 -1. - <_>14 6 6 2 3. - 0 - -0.0122311301529408 - 0.4750893115997315 - 0.5262982249259949 - <_> - - <_> - - - - <_>0 4 6 6 -1. - <_>0 6 6 2 3. - 0 - 5.6528882123529911e-003 - 0.5069767832756043 - 0.3561818897724152 - <_> - - <_> - - - - <_>12 5 4 3 -1. - <_>12 6 4 1 3. - 0 - 1.2977829901501536e-003 - 0.4875693917274475 - 0.5619062781333923 - <_> - - <_> - - - - <_>4 5 4 3 -1. - <_>4 6 4 1 3. - 0 - 0.0107815898954868 - 0.4750770032405853 - 0.6782308220863342 - <_> - - <_> - - - - <_>18 0 2 6 -1. - <_>18 2 2 2 3. - 0 - 2.8654779307544231e-003 - 0.5305461883544922 - 0.4290736019611359 - <_> - - <_> - - - - <_>8 1 4 9 -1. - <_>10 1 2 9 2. - 0 - 2.8663428965955973e-003 - 0.4518479108810425 - 0.5539351105690002 - <_> - - <_> - - - - <_>6 6 8 2 -1. - <_>6 6 4 2 2. - 0 - -5.1983320154249668e-003 - 0.4149119853973389 - 0.5434188842773438 - <_> - - <_> - - - - <_>6 5 4 2 -1. - <_>6 5 2 1 2. - <_>8 6 2 1 2. - 0 - 5.3739990107715130e-003 - 0.4717896878719330 - 0.6507657170295715 - <_> - - <_> - - - - <_>10 5 2 3 -1. - <_>10 6 2 1 3. - 0 - -0.0146415298804641 - 0.2172164022922516 - 0.5161777138710022 - <_> - - <_> - - - - <_>9 5 1 3 -1. - <_>9 6 1 1 3. - 0 - -1.5042580344015732e-005 - 0.5337383747100830 - 0.4298836886882782 - <_> - - <_> - - - - <_>9 10 2 2 -1. - <_>9 11 2 1 2. - 0 - -1.1875660129589960e-004 - 0.4604594111442566 - 0.5582447052001953 - <_> - - <_> - - - - <_>0 8 4 3 -1. - <_>0 9 4 1 3. - 0 - 0.0169955305755138 - 0.4945895075798035 - 0.0738800764083862 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>6 3 8 3 2. - 0 - -0.0350959412753582 - 0.7005509138107300 - 0.4977591037750244 - <_> - - <_> - - - - <_>1 0 6 4 -1. - <_>1 0 3 2 2. - <_>4 2 3 2 2. - 0 - 2.4217350874096155e-003 - 0.4466265141963959 - 0.5477694272994995 - <_> - - <_> - - - - <_>13 0 3 7 -1. - <_>14 0 1 7 3. - 0 - -9.6340337768197060e-004 - 0.4714098870754242 - 0.5313338041305542 - <_> - - <_> - - - - <_>9 16 2 2 -1. - <_>9 17 2 1 2. - 0 - 1.6391130338888615e-004 - 0.4331546127796173 - 0.5342242121696472 - <_> - - <_> - - - - <_>11 4 6 10 -1. - <_>11 9 6 5 2. - 0 - -0.0211414601653814 - 0.2644700109958649 - 0.5204498767852783 - <_> - - <_> - - - - <_>0 10 19 2 -1. - <_>0 11 19 1 2. - 0 - 8.7775202700868249e-004 - 0.5208349823951721 - 0.4152742922306061 - <_> - - <_> - - - - <_>9 5 8 9 -1. - <_>9 8 8 3 3. - 0 - -0.0279439203441143 - 0.6344125270843506 - 0.5018811821937561 - <_> - - <_> - - - - <_>4 0 3 7 -1. - <_>5 0 1 7 3. - 0 - 6.7297378554940224e-003 - 0.5050438046455383 - 0.3500863909721375 - <_> - - <_> - - - - <_>8 6 4 12 -1. - <_>10 6 2 6 2. - <_>8 12 2 6 2. - 0 - 0.0232810396701097 - 0.4966318011283875 - 0.6968677043914795 - <_> - - <_> - - - - <_>0 2 6 4 -1. - <_>0 4 6 2 2. - 0 - -0.0116449799388647 - 0.3300260007381439 - 0.5049629807472229 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 0.0157643090933561 - 0.4991598129272461 - 0.7321153879165649 - <_> - - <_> - - - - <_>8 0 3 7 -1. - <_>9 0 1 7 3. - 0 - -1.3611479662358761e-003 - 0.3911735117435455 - 0.5160670876502991 - <_> - - <_> - - - - <_>9 5 3 4 -1. - <_>10 5 1 4 3. - 0 - -8.1522337859496474e-004 - 0.5628911256790161 - 0.4949719011783600 - <_> - - <_> - - - - <_>8 5 3 4 -1. - <_>9 5 1 4 3. - 0 - -6.0066272271797061e-004 - 0.5853595137596130 - 0.4550595879554749 - <_> - - <_> - - - - <_>7 6 6 1 -1. - <_>9 6 2 1 3. - 0 - 4.9715518252924085e-004 - 0.4271470010280609 - 0.5443599224090576 - <_> - - <_> - - - - <_>7 14 4 4 -1. - <_>7 14 2 2 2. - <_>9 16 2 2 2. - 0 - 2.3475370835512877e-003 - 0.5143110752105713 - 0.3887656927108765 - <_> - - <_> - - - - <_>13 14 4 6 -1. - <_>15 14 2 3 2. - <_>13 17 2 3 2. - 0 - -8.9261569082736969e-003 - 0.6044502258300781 - 0.4971720874309540 - <_> - - <_> - - - - <_>7 8 1 8 -1. - <_>7 12 1 4 2. - 0 - -0.0139199104160070 - 0.2583160996437073 - 0.5000367760658264 - <_> - - <_> - - - - <_>16 0 2 8 -1. - <_>17 0 1 4 2. - <_>16 4 1 4 2. - 0 - 1.0209949687123299e-003 - 0.4857374131679535 - 0.5560358166694641 - <_> - - <_> - - - - <_>2 0 2 8 -1. - <_>2 0 1 4 2. - <_>3 4 1 4 2. - 0 - -2.7441629208624363e-003 - 0.5936884880065918 - 0.4645777046680450 - <_> - - <_> - - - - <_>6 1 14 3 -1. - <_>6 2 14 1 3. - 0 - -0.0162001308053732 - 0.3163014948368073 - 0.5193495154380798 - <_> - - <_> - - - - <_>7 9 3 10 -1. - <_>7 14 3 5 2. - 0 - 4.3331980705261230e-003 - 0.5061224102973938 - 0.3458878993988037 - <_> - - <_> - - - - <_>9 14 2 2 -1. - <_>9 15 2 1 2. - 0 - 5.8497930876910686e-004 - 0.4779017865657806 - 0.5870177745819092 - <_> - - <_> - - - - <_>7 7 6 8 -1. - <_>7 11 6 4 2. - 0 - -2.2466450463980436e-003 - 0.4297851026058197 - 0.5374773144721985 - <_> - - <_> - - - - <_>9 7 3 6 -1. - <_>9 10 3 3 2. - 0 - 2.3146099410951138e-003 - 0.5438671708106995 - 0.4640969932079315 - <_> - - <_> - - - - <_>7 13 3 3 -1. - <_>7 14 3 1 3. - 0 - 8.7679121643304825e-003 - 0.4726893007755280 - 0.6771789789199829 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -2.2448020172305405e-004 - 0.4229173064231873 - 0.5428048968315125 - <_> - - <_> - - - - <_>0 1 18 2 -1. - <_>6 1 6 2 3. - 0 - -7.4336021207273006e-003 - 0.6098880767822266 - 0.4683673977851868 - <_> - - <_> - - - - <_>7 1 6 14 -1. - <_>7 8 6 7 2. - 0 - -2.3189240600913763e-003 - 0.5689436793327332 - 0.4424242079257965 - <_> - - <_> - - - - <_>1 9 18 1 -1. - <_>7 9 6 1 3. - 0 - -2.1042178850620985e-003 - 0.3762221038341522 - 0.5187087059020996 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>9 7 1 2 2. - 0 - 4.6034841216169298e-004 - 0.4699405133724213 - 0.5771207213401794 - <_> - - <_> - - - - <_>9 3 2 9 -1. - <_>10 3 1 9 2. - 0 - 1.0547629790380597e-003 - 0.4465216994285584 - 0.5601701736450195 - <_> - - <_> - - - - <_>18 14 2 3 -1. - <_>18 15 2 1 3. - 0 - 8.7148818420246243e-004 - 0.5449805259704590 - 0.3914709091186523 - <_> - - <_> - - - - <_>7 11 3 1 -1. - <_>8 11 1 1 3. - 0 - 3.3364820410497487e-004 - 0.4564009010791779 - 0.5645738840103149 - <_> - - <_> - - - - <_>10 8 3 4 -1. - <_>11 8 1 4 3. - 0 - -1.4853250468149781e-003 - 0.5747377872467041 - 0.4692778885364533 - <_> - - <_> - - - - <_>7 14 3 6 -1. - <_>8 14 1 6 3. - 0 - 3.0251620337367058e-003 - 0.5166196823120117 - 0.3762814104557037 - <_> - - <_> - - - - <_>10 8 3 4 -1. - <_>11 8 1 4 3. - 0 - 5.0280741415917873e-003 - 0.5002111792564392 - 0.6151527166366577 - <_> - - <_> - - - - <_>7 8 3 4 -1. - <_>8 8 1 4 3. - 0 - -5.8164511574432254e-004 - 0.5394598245620728 - 0.4390751123428345 - <_> - - <_> - - - - <_>7 9 6 9 -1. - <_>7 12 6 3 3. - 0 - 0.0451415292918682 - 0.5188326835632324 - 0.2063035964965820 - <_> - - <_> - - - - <_>0 14 2 3 -1. - <_>0 15 2 1 3. - 0 - -1.0795620037242770e-003 - 0.3904685080051422 - 0.5137907266616821 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - 1.5995999274309725e-004 - 0.4895322918891907 - 0.5427504181861877 - <_> - - <_> - - - - <_>4 3 8 3 -1. - <_>8 3 4 3 2. - 0 - -0.0193592701107264 - 0.6975228786468506 - 0.4773507118225098 - <_> - - <_> - - - - <_>0 4 20 6 -1. - <_>0 4 10 6 2. - 0 - 0.2072550952434540 - 0.5233635902404785 - 0.3034991919994354 - <_> - - <_> - - - - <_>9 14 1 3 -1. - <_>9 15 1 1 3. - 0 - -4.1953290929086506e-004 - 0.5419396758079529 - 0.4460186064243317 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 2.2582069505006075e-003 - 0.4815764129161835 - 0.6027408838272095 - <_> - - <_> - - - - <_>0 15 14 4 -1. - <_>0 17 14 2 2. - 0 - -6.7811207845807076e-003 - 0.3980278968811035 - 0.5183305740356445 - <_> - - <_> - - - - <_>1 14 18 6 -1. - <_>1 17 18 3 2. - 0 - 0.0111543098464608 - 0.5431231856346130 - 0.4188759922981262 - <_> - - <_> - - - - <_>0 0 10 6 -1. - <_>0 0 5 3 2. - <_>5 3 5 3 2. - 0 - 0.0431624315679073 - 0.4738228023052216 - 0.6522961258888245 - 105.7611007690429700 - 20 - -1 - diff --git a/data/haarcascades/haarcascade_frontalface_alt2.xml b/data/haarcascades/haarcascade_frontalface_alt2.xml deleted file mode 100644 index caa86f6..0000000 --- a/data/haarcascades/haarcascade_frontalface_alt2.xml +++ /dev/null @@ -1,23550 +0,0 @@ - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_>2 7 16 4 -1. - <_>2 9 16 2 2. - 0 - 4.3272329494357109e-003 - 0.0383819006383419 - 1 - <_> - - - - <_>8 4 3 14 -1. - <_>8 11 3 7 2. - 0 - 0.0130761601030827 - 0.8965256810188294 - 0.2629314064979553 - <_> - - <_> - - - - <_>13 6 1 6 -1. - <_>13 9 1 3 2. - 0 - 5.2434601821005344e-004 - 0.1021663025021553 - 1 - <_> - - - - <_>4 2 12 8 -1. - <_>8 2 4 8 3. - 0 - 4.4573000632226467e-003 - 0.1238401979207993 - 0.6910383105278015 - <_> - - <_> - - - - <_>6 3 1 9 -1. - <_>6 6 1 3 3. - 0 - -9.2708261217921972e-004 - 1 - 0.1953697055578232 - <_> - - - - <_>3 7 14 9 -1. - <_>3 10 14 3 3. - 0 - 3.3989109215326607e-004 - 0.2101441025733948 - 0.8258674740791321 - 0.3506923019886017 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>4 7 4 4 -1. - <_>4 9 4 2 2. - 0 - 2.3025739938020706e-003 - 0.1018375977873802 - 1 - <_> - - - - <_>9 4 2 16 -1. - <_>9 12 2 8 2. - 0 - 4.4174338690936565e-003 - 0.8219057917594910 - 0.1956554949283600 - <_> - - <_> - - - - <_>1 1 18 5 -1. - <_>7 1 6 5 3. - 0 - 0.0222032107412815 - 0.2205407023429871 - 1 - <_> - - - - <_>4 5 13 8 -1. - <_>4 9 13 4 2. - 0 - -1.7283110355492681e-004 - 0.0732632577419281 - 0.5931484103202820 - <_> - - <_> - - - - <_>1 7 16 9 -1. - <_>1 10 16 3 3. - 0 - 4.3567270040512085e-003 - 0.1844114959239960 - 1 - <_> - - - - <_>2 0 15 4 -1. - <_>2 2 15 2 2. - 0 - -2.6032889727503061e-003 - 0.4032213985919952 - 0.8066521286964417 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>9 5 2 4 3. - 0 - 1.7309630056843162e-003 - 0.2548328042030335 - 1 - <_> - - - - <_>6 3 8 9 -1. - <_>6 6 8 3 3. - 0 - -7.8146401792764664e-003 - 0.6057069897651672 - 0.2779063880443573 - <_> - - <_> - - - - <_>8 12 3 8 -1. - <_>8 16 3 4 2. - 0 - -8.7343417108058929e-003 - 0.2889980077743530 - 1 - <_> - - - - <_>3 16 2 2 -1. - <_>3 17 2 1 2. - 0 - 9.4522320432588458e-004 - 0.7616587281227112 - 0.3495643138885498 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>14 1 3 12 2. - 0 - 0.0494148582220078 - 1 - 0.8151652812957764 - <_> - - - - <_>4 4 12 6 -1. - <_>8 4 4 6 3. - 0 - 4.4891750440001488e-003 - 0.2808783054351807 - 0.6027774810791016 - <_> - - <_> - - - - <_>0 2 6 15 -1. - <_>3 2 3 15 2. - 0 - 0.0603136196732521 - 1 - 0.7607501745223999 - <_> - - - - <_>5 4 9 6 -1. - <_>5 6 9 2 3. - 0 - -1.0762850288301706e-003 - 0.4444035887718201 - 0.1437312066555023 - <_> - - <_> - - - - <_>13 11 6 3 -1. - <_>13 12 6 1 3. - 0 - -9.5083238556981087e-003 - 1 - 0.5318170189857483 - <_> - - - - <_>12 12 6 4 -1. - <_>12 14 6 2 2. - 0 - 7.6601309701800346e-003 - 0.5411052107810974 - 0.2180687040090561 - <_> - - <_> - - - - <_>1 11 6 3 -1. - <_>1 12 6 1 3. - 0 - 7.6467678882181644e-003 - 1 - 0.1158960014581680 - <_> - - - - <_>2 5 5 8 -1. - <_>2 9 5 4 2. - 0 - -8.4662932204082608e-004 - 0.2340679019689560 - 0.5990381836891174 - 3.4721779823303223 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -4.8506218008697033e-003 - 1 - 0.1805496066808701 - <_> - - - - <_>2 4 16 12 -1. - <_>2 8 16 4 3. - 0 - -4.6141650527715683e-003 - 0.2177893966436386 - 0.8018236756324768 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>8 5 4 6 3. - 0 - -2.4301309604197741e-003 - 0.1141354963183403 - 1 - <_> - - - - <_>13 7 2 9 -1. - <_>13 10 2 3 3. - 0 - 4.1787960799410939e-004 - 0.1203093975782394 - 0.6108530759811401 - <_> - - <_> - - - - <_>5 7 2 9 -1. - <_>5 10 2 3 3. - 0 - 1.0010929545387626e-003 - 0.2079959958791733 - 1 - <_> - - - - <_>7 1 6 8 -1. - <_>9 1 2 8 3. - 0 - 1.0577100329101086e-003 - 0.3302054107189179 - 0.7511094212532044 - <_> - - <_> - - - - <_>12 0 4 12 -1. - <_>14 0 2 6 2. - <_>12 6 2 6 2. - 0 - 1.2376549420878291e-003 - 1 - 0.2768222093582153 - <_> - - - - <_>5 8 10 2 -1. - <_>5 9 10 1 2. - 0 - 3.5315038985572755e-004 - 0.1668293029069901 - 0.5829476714134216 - <_> - - <_> - - - - <_>5 1 6 4 -1. - <_>7 1 2 4 3. - 0 - -0.0119536602869630 - 0.1508788019418716 - 1 - <_> - - - - <_>0 3 9 12 -1. - <_>3 3 3 12 3. - 0 - 1.4182999730110168e-003 - 0.4391227960586548 - 0.7646595239639282 - <_> - - <_> - - - - <_>9 8 3 12 -1. - <_>9 12 3 4 3. - 0 - 3.4642980899661779e-003 - 1 - 0.2651556134223938 - <_> - - - - <_>0 5 20 15 -1. - <_>0 10 20 5 3. - 0 - -0.0149489501491189 - 0.2298053056001663 - 0.5442165732383728 - <_> - - <_> - - - - <_>2 2 6 8 -1. - <_>2 2 3 4 2. - <_>5 6 3 4 2. - 0 - -1.0506849503144622e-003 - 1 - 0.3622843921184540 - <_> - - - - <_>2 1 6 2 -1. - <_>2 2 6 1 2. - 0 - -4.0782918222248554e-003 - 0.2601259946823120 - 0.7233657836914063 - <_> - - <_> - - - - <_>10 15 6 4 -1. - <_>13 15 3 2 2. - <_>10 17 3 2 2. - 0 - 5.4242828628048301e-004 - 0.3849678933620453 - 1 - <_> - - - - <_>12 14 2 6 -1. - <_>12 16 2 2 3. - 0 - -7.3204059153795242e-003 - 0.2965512871742249 - 0.5480309128761292 - <_> - - <_> - - - - <_>5 15 4 4 -1. - <_>5 15 2 2 2. - <_>7 17 2 2 2. - 0 - 1.1421289527788758e-003 - 0.4104770123958588 - 1 - <_> - - - - <_>7 18 1 2 -1. - <_>7 19 1 1 2. - 0 - 1.1783400550484657e-003 - 0.7239024043083191 - 0.2787283957004547 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>10 5 6 5 2. - <_>4 10 6 5 2. - 0 - 0.0440771095454693 - 0.5640516281127930 - 1 - <_> - - - - <_>7 4 8 12 -1. - <_>11 4 4 6 2. - <_>7 10 4 6 2. - 0 - 3.7900090683251619e-003 - 0.5947548151016235 - 0.3312020003795624 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -2.4291418958455324e-003 - 0.6603232026100159 - 1 - <_> - - - - <_>3 3 12 12 -1. - <_>3 3 6 6 2. - <_>9 9 6 6 2. - 0 - 9.4262324273586273e-003 - 0.4680665135383606 - 0.2064338028430939 - <_> - - <_> - - - - <_>15 11 5 3 -1. - <_>15 12 5 1 3. - 0 - 8.0630257725715637e-003 - 0.5298851132392883 - 1 - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - 5.2240812219679356e-003 - 0.5281602740287781 - 0.1909549981355667 - <_> - - <_> - - - - <_>0 11 5 3 -1. - <_>0 12 5 1 3. - 0 - -7.0630568079650402e-003 - 0.1380645930767059 - 1 - <_> - - - - <_>7 18 3 2 -1. - <_>8 18 1 2 3. - 0 - 5.6897541508078575e-003 - 0.5490636825561523 - 0.1260281056165695 - <_> - - <_> - - - - <_>2 8 16 2 -1. - <_>2 9 16 1 2. - 0 - 1.2472929665818810e-003 - 0.2372663021087647 - 1 - <_> - - - - <_>9 6 5 12 -1. - <_>9 12 5 6 2. - 0 - 0.0495434887707233 - 0.5240166187286377 - 0.1769216060638428 - 5.9844889640808105 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>6 3 8 6 -1. - <_>6 6 8 3 2. - 0 - -4.9326149746775627e-003 - 1 - 0.1998064965009689 - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 2.7918140403926373e-005 - 0.2299380004405975 - 0.7393211126327515 - <_> - - <_> - - - - <_>10 9 6 8 -1. - <_>10 13 6 4 2. - 0 - 3.0876200180500746e-003 - 1 - 0.1533840000629425 - <_> - - - - <_>12 5 3 10 -1. - <_>12 10 3 5 2. - 0 - 7.4669660534709692e-006 - 0.2036858946084976 - 0.5854915976524353 - <_> - - <_> - - - - <_>4 6 3 9 -1. - <_>4 9 3 3 3. - 0 - 1.8739729421213269e-003 - 0.2049895972013474 - 1 - <_> - - - - <_>7 4 6 4 -1. - <_>9 4 2 4 3. - 0 - 9.3380251200869679e-004 - 0.3234199881553650 - 0.7323014140129089 - <_> - - <_> - - - - <_>12 3 8 3 -1. - <_>12 3 4 3 2. - 0 - 1.9151850137859583e-003 - 0.3045149147510529 - 1 - <_> - - - - <_>15 0 3 6 -1. - <_>15 3 3 3 2. - 0 - -5.9683797881007195e-003 - 0.2932133972644806 - 0.5621296167373657 - <_> - - <_> - - - - <_>2 12 10 8 -1. - <_>2 12 5 4 2. - <_>7 16 5 4 2. - 0 - -7.2115601506084204e-004 - 0.3658036887645721 - 1 - <_> - - - - <_>5 5 6 8 -1. - <_>5 9 6 4 2. - 0 - -5.9663117863237858e-003 - 0.2712155878543854 - 0.7226334810256958 - <_> - - <_> - - - - <_>12 3 8 3 -1. - <_>12 3 4 3 2. - 0 - 0.0308741796761751 - 0.4419837892055512 - 1 - <_> - - - - <_>15 0 3 6 -1. - <_>15 3 3 3 2. - 0 - -0.0110997101292014 - 0.3612976968288422 - 0.5251451134681702 - <_> - - <_> - - - - <_>0 3 8 3 -1. - <_>4 3 4 3 2. - 0 - 2.1164179779589176e-003 - 0.3628616929054260 - 1 - <_> - - - - <_>2 1 4 4 -1. - <_>2 3 4 2 2. - 0 - -9.4317439943552017e-003 - 0.1601095050573349 - 0.7052276730537415 - <_> - - <_> - - - - <_>10 2 3 2 -1. - <_>11 2 1 2 3. - 0 - -3.5266019403934479e-003 - 0.1301288008689880 - 1 - <_> - - - - <_>10 3 3 1 -1. - <_>11 3 1 1 3. - 0 - -1.6907559474930167e-003 - 0.1786323934793472 - 0.5521529912948608 - <_> - - <_> - - - - <_>7 15 3 4 -1. - <_>7 17 3 2 2. - 0 - 4.6470930101349950e-004 - 0.3487383127212524 - 1 - <_> - - - - <_>4 13 3 6 -1. - <_>4 15 3 2 3. - 0 - -0.0102155702188611 - 0.2673991024494171 - 0.6667919158935547 - <_> - - <_> - - - - <_>10 5 1 14 -1. - <_>10 12 1 7 2. - 0 - 1.2634709710255265e-003 - 1 - 0.3437863886356354 - <_> - - - - <_>5 4 10 6 -1. - <_>5 6 10 2 3. - 0 - -0.0118752997368574 - 0.5995336174964905 - 0.3497717976570129 - <_> - - <_> - - - - <_>5 0 6 3 -1. - <_>7 0 2 3 3. - 0 - -0.0107323396950960 - 0.2150489985942841 - 1 - <_> - - - - <_>6 0 3 5 -1. - <_>7 0 1 5 3. - 0 - 7.1836481802165508e-003 - 0.6271436214447022 - 0.2519541978836060 - <_> - - <_> - - - - <_>7 15 6 5 -1. - <_>9 15 2 5 3. - 0 - -0.0283408891409636 - 0.0824118927121162 - 1 - <_> - - - - <_>9 10 2 6 -1. - <_>9 12 2 2 3. - 0 - -4.5813230099156499e-004 - 0.5910056829452515 - 0.3705201148986816 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - 4.2940340936183929e-003 - 1 - 0.1594727933406830 - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 0.0107510797679424 - 0.5980480909347534 - 0.2832508087158203 - <_> - - <_> - - - - <_>9 6 3 7 -1. - <_>10 6 1 7 3. - 0 - 0.0224651191383600 - 1 - 0.7877091169357300 - <_> - - - - <_>16 3 4 9 -1. - <_>16 6 4 3 3. - 0 - -0.0579885393381119 - 0.1555740982294083 - 0.5239657163619995 - <_> - - <_> - - - - <_>8 6 3 7 -1. - <_>9 6 1 7 3. - 0 - 7.2110891342163086e-003 - 1 - 0.6620365977287293 - <_> - - - - <_>0 5 18 8 -1. - <_>0 5 9 4 2. - <_>9 9 9 4 2. - 0 - -0.0483675710856915 - 0.1424719989299774 - 0.4429833889007568 - <_> - - <_> - - - - <_>13 5 2 10 -1. - <_>13 10 2 5 2. - 0 - -0.0144180599600077 - 0.1588540971279144 - 1 - <_> - - - - <_>12 10 2 6 -1. - <_>12 13 2 3 2. - 0 - -0.0231563895940781 - 0.2375798970460892 - 0.5217134952545166 - <_> - - <_> - - - - <_>7 0 3 5 -1. - <_>8 0 1 5 3. - 0 - 7.6985340565443039e-003 - 1 - 0.1941725015640259 - <_> - - - - <_>6 5 8 6 -1. - <_>6 7 8 2 3. - 0 - -5.6248619221150875e-003 - 0.6278405785560608 - 0.3746044933795929 - <_> - - <_> - - - - <_>10 3 6 14 -1. - <_>13 3 3 7 2. - <_>10 10 3 7 2. - 0 - -7.2936748620122671e-004 - 1 - 0.3840922117233276 - <_> - - - - <_>13 5 1 8 -1. - <_>13 9 1 4 2. - 0 - 6.1783898854628205e-004 - 0.3106493055820465 - 0.5537847280502319 - <_> - - <_> - - - - <_>4 3 6 14 -1. - <_>4 3 3 7 2. - <_>7 10 3 7 2. - 0 - -4.5803939428878948e-005 - 1 - 0.3444449007511139 - <_> - - - - <_>6 5 1 8 -1. - <_>6 9 1 4 2. - 0 - -1.4719359569426160e-005 - 0.2729552090167999 - 0.6428951025009155 - 8.5117864608764648 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>8 1 1 6 -1. - <_>8 3 1 2 3. - 0 - -1.3469370314851403e-003 - 0.1657086014747620 - 1 - <_> - - - - <_>2 0 15 2 -1. - <_>2 1 15 1 2. - 0 - -2.4774789344519377e-003 - 0.2273851037025452 - 0.6989349722862244 - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 5.2632777951657772e-003 - 0.1512074023485184 - 1 - <_> - - - - <_>10 10 6 8 -1. - <_>10 14 6 4 2. - 0 - 4.9075339920818806e-003 - 0.5564470291137695 - 0.1605442017316818 - <_> - - <_> - - - - <_>7 1 3 2 -1. - <_>8 1 1 2 3. - 0 - -2.3254349362105131e-003 - 0.1880259066820145 - 1 - <_> - - - - <_>8 1 2 2 -1. - <_>9 1 1 2 2. - 0 - -1.4665479538962245e-003 - 0.3122498989105225 - 0.7165396213531494 - <_> - - <_> - - - - <_>4 3 12 9 -1. - <_>4 6 12 3 3. - 0 - -0.1231169030070305 - 1 - 0.3859583139419556 - <_> - - - - <_>6 5 9 5 -1. - <_>9 5 3 5 3. - 0 - 2.2108340635895729e-003 - 0.2455293983221054 - 0.5695710182189941 - <_> - - <_> - - - - <_>5 5 9 5 -1. - <_>8 5 3 5 3. - 0 - 2.0661531016230583e-003 - 0.2716520130634308 - 1 - <_> - - - - <_>4 6 6 12 -1. - <_>4 10 6 4 3. - 0 - 3.6130280932411551e-004 - 0.2293362021446228 - 0.7208629846572876 - <_> - - <_> - - - - <_>13 0 6 18 -1. - <_>13 0 3 18 2. - 0 - 0.0799578726291656 - 1 - 0.7833620905876160 - <_> - - - - <_>10 8 1 12 -1. - <_>10 12 1 4 3. - 0 - 2.6064720004796982e-003 - 0.5545232295989990 - 0.2550689876079559 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 6.5699010156095028e-003 - 1 - 0.1819390058517456 - <_> - - - - <_>1 2 4 6 -1. - <_>3 2 2 6 2. - 0 - 1.6259610420092940e-003 - 0.3529875874519348 - 0.6552819013595581 - <_> - - <_> - - - - <_>9 18 3 2 -1. - <_>10 18 1 2 3. - 0 - 3.6204981151968241e-003 - 0.5462309718132019 - 1 - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - -4.4391951523721218e-003 - 0.1359843015670776 - 0.5415815114974976 - <_> - - <_> - - - - <_>2 8 2 6 -1. - <_>2 10 2 2 3. - 0 - -9.0540945529937744e-003 - 0.1115119978785515 - 1 - <_> - - - - <_>7 5 6 6 -1. - <_>7 7 6 2 3. - 0 - -4.6067481162026525e-004 - 0.5846719741821289 - 0.2598348855972290 - <_> - - <_> - - - - <_>7 19 6 1 -1. - <_>9 19 2 1 3. - 0 - -5.6621041148900986e-003 - 0.1610569059848785 - 1 - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - 5.1165837794542313e-003 - 0.5376678705215454 - 0.1739455014467239 - <_> - - <_> - - - - <_>8 3 3 1 -1. - <_>9 3 1 1 3. - 0 - -2.1362339612096548e-003 - 0.1902073025703430 - 1 - <_> - - - - <_>2 2 16 2 -1. - <_>2 2 8 1 2. - <_>10 3 8 1 2. - 0 - -5.4809921421110630e-003 - 0.3272008001804352 - 0.6364840865135193 - <_> - - <_> - - - - <_>8 11 5 3 -1. - <_>8 12 5 1 3. - 0 - -8.1061907112598419e-003 - 0.6914852857589722 - 1 - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - 6.0048708692193031e-003 - 0.4327326118946075 - 0.6963843107223511 - <_> - - <_> - - - - <_>0 1 6 15 -1. - <_>2 1 2 15 3. - 0 - -0.0870285481214523 - 0.8594133853912354 - 1 - <_> - - - - <_>2 12 2 3 -1. - <_>2 13 2 1 3. - 0 - -4.7809639945626259e-003 - 0.0973944664001465 - 0.4587030112743378 - <_> - - <_> - - - - <_>16 13 1 3 -1. - <_>16 14 1 1 3. - 0 - -2.2166660055518150e-003 - 0.2554625868797302 - 1 - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 1.3642730191349983e-003 - 0.3319090902805328 - 0.5964102745056152 - <_> - - <_> - - - - <_>7 13 3 6 -1. - <_>7 16 3 3 2. - 0 - -9.0077864006161690e-003 - 0.2666594982147217 - 1 - <_> - - - - <_>7 5 1 14 -1. - <_>7 12 1 7 2. - 0 - -0.0154941203072667 - 0.1848185956478119 - 0.6245970726013184 - <_> - - <_> - - - - <_>15 12 2 3 -1. - <_>15 13 2 1 3. - 0 - -4.2165028862655163e-003 - 1 - 0.5379927158355713 - <_> - - - - <_>10 5 3 14 -1. - <_>10 12 3 7 2. - 0 - 0.0432497598230839 - 0.5183029174804688 - 0.2170419991016388 - <_> - - <_> - - - - <_>6 10 2 6 -1. - <_>6 13 2 3 2. - 0 - 2.8786511393263936e-004 - 1 - 0.2613384127616882 - <_> - - - - <_>6 5 1 8 -1. - <_>6 9 1 4 2. - 0 - 1.2373150093480945e-003 - 0.2786532044410706 - 0.5908988118171692 - <_> - - <_> - - - - <_>13 11 2 1 -1. - <_>13 11 1 1 2. - 0 - 1.9528300035744905e-003 - 1 - 0.2612869143486023 - <_> - - - - <_>12 1 6 10 -1. - <_>15 1 3 5 2. - <_>12 6 3 5 2. - 0 - -1.4947060262784362e-003 - 0.5915412902832031 - 0.3455781936645508 - <_> - - <_> - - - - <_>3 12 2 3 -1. - <_>3 13 2 1 3. - 0 - 3.5878680646419525e-003 - 1 - 0.1587052047252655 - <_> - - - - <_>9 18 2 1 -1. - <_>10 18 1 1 2. - 0 - -2.5938691105693579e-003 - 0.1270411014556885 - 0.5979428887367249 - 8.4680156707763672 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 17 9 -1. - <_>1 3 17 3 3. - 0 - 3.5810680128633976e-003 - 0.1995104998350143 - 1 - <_> - - - - <_>1 2 8 8 -1. - <_>1 2 4 4 2. - <_>5 6 4 4 2. - 0 - -2.8552350122481585e-003 - 0.7373070120811462 - 0.2921737134456635 - <_> - - <_> - - - - <_>9 5 6 4 -1. - <_>9 5 3 4 2. - 0 - 1.9758539274334908e-003 - 0.1956419944763184 - 1 - <_> - - - - <_>10 9 7 10 -1. - <_>10 14 7 5 2. - 0 - 3.2583118882030249e-003 - 0.5692046880722046 - 0.1839064955711365 - <_> - - <_> - - - - <_>5 5 6 4 -1. - <_>8 5 3 4 2. - 0 - 2.3711679386906326e-004 - 0.2171667069196701 - 1 - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 2.5942500215023756e-003 - 0.2719989120960236 - 0.7150244116783142 - <_> - - <_> - - - - <_>6 5 9 10 -1. - <_>6 10 9 5 2. - 0 - -0.0250324495136738 - 0.1825183928012848 - 1 - <_> - - - - <_>8 4 4 12 -1. - <_>8 10 4 6 2. - 0 - 6.3087949529290199e-003 - 0.5699837803840637 - 0.3509852886199951 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 7 8 1 3. - 0 - -3.2494920305907726e-003 - 1 - 0.4023926854133606 - <_> - - - - <_>3 13 10 6 -1. - <_>3 13 5 3 2. - <_>8 16 5 3 2. - 0 - -0.0148857301101089 - 0.3604095876216888 - 0.7291995286941528 - <_> - - <_> - - - - <_>15 1 4 11 -1. - <_>15 1 2 11 2. - 0 - 8.0623216927051544e-003 - 1 - 0.6491490006446838 - <_> - - - - <_>5 7 10 10 -1. - <_>10 7 5 5 2. - <_>5 12 5 5 2. - 0 - 0.0274056792259216 - 0.5518993139266968 - 0.2659681141376495 - <_> - - <_> - - - - <_>1 1 4 11 -1. - <_>3 1 2 11 2. - 0 - 0.0343686006963253 - 1 - 0.6712512969970703 - <_> - - - - <_>1 5 8 12 -1. - <_>1 11 8 6 2. - 0 - -0.0272929705679417 - 0.1691378057003021 - 0.4326277971267700 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 7.4452121043577790e-004 - 0.3405100107192993 - 1 - <_> - - - - <_>11 10 7 4 -1. - <_>11 12 7 2 2. - 0 - 7.0336280623450875e-004 - 0.5516793131828308 - 0.3311387896537781 - <_> - - <_> - - - - <_>0 4 20 12 -1. - <_>0 4 10 6 2. - <_>10 10 10 6 2. - 0 - -0.1227546036243439 - 0.1675315052270889 - 1 - <_> - - - - <_>1 5 6 15 -1. - <_>1 10 6 5 3. - 0 - 3.2559928949922323e-003 - 0.3615751862525940 - 0.6420782804489136 - <_> - - <_> - - - - <_>11 10 3 8 -1. - <_>11 14 3 4 2. - 0 - -0.0320903994143009 - 0.2921079099178314 - 1 - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - 3.2957999501377344e-003 - 0.5613031983375549 - 0.3357860147953033 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -3.2273170072585344e-003 - 0.6970642805099487 - 1 - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 1.1171669466421008e-003 - 0.3541150093078613 - 0.6144006252288818 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>10 14 7 2 2. - <_>3 16 7 2 2. - 0 - -0.0172799509018660 - 1 - 0.5537180900573731 - <_> - - - - <_>18 7 2 4 -1. - <_>18 9 2 2 2. - 0 - 0.0117412004619837 - 0.5341957211494446 - 0.2757104933261871 - <_> - - <_> - - - - <_>3 12 6 6 -1. - <_>3 14 6 2 3. - 0 - 4.6405228786170483e-003 - 1 - 0.2489521056413651 - <_> - - - - <_>0 4 3 6 -1. - <_>0 6 3 2 3. - 0 - -0.0169130302965641 - 0.1711928993463516 - 0.5523952841758728 - <_> - - <_> - - - - <_>9 14 3 3 -1. - <_>9 15 3 1 3. - 0 - 0.0100601697340608 - 1 - 0.8273450732231140 - <_> - - - - <_>10 7 10 4 -1. - <_>15 7 5 2 2. - <_>10 9 5 2 2. - 0 - -6.0715491417795420e-004 - 0.3779391050338745 - 0.5476251840591431 - <_> - - <_> - - - - <_>7 2 6 8 -1. - <_>7 6 6 4 2. - 0 - -1.0865400545299053e-003 - 1 - 0.3296540975570679 - <_> - - - - <_>6 3 6 2 -1. - <_>8 3 2 2 3. - 0 - 8.9362077414989471e-003 - 0.6062883734703064 - 0.2434220016002655 - <_> - - <_> - - - - <_>10 6 3 5 -1. - <_>11 6 1 5 3. - 0 - -2.6372660067863762e-004 - 1 - 0.3814094960689545 - <_> - - - - <_>9 0 6 19 -1. - <_>11 0 2 19 3. - 0 - 0.0131100500002503 - 0.5517616271972656 - 0.3726893067359924 - <_> - - <_> - - - - <_>3 12 1 2 -1. - <_>3 13 1 1 2. - 0 - -2.9806280508637428e-003 - 0.1229664012789726 - 1 - <_> - - - - <_>7 14 5 3 -1. - <_>7 15 5 1 3. - 0 - -4.1619571857154369e-003 - 0.7252274751663208 - 0.4973455071449280 - <_> - - <_> - - - - <_>2 1 18 4 -1. - <_>11 1 9 2 2. - <_>2 3 9 2 2. - 0 - 0.0338423289358616 - 0.5348312854766846 - 1 - <_> - - - - <_>10 5 3 8 -1. - <_>11 5 1 8 3. - 0 - -1.2564560165628791e-003 - 0.5851914882659912 - 0.4384166896343231 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>0 1 9 2 2. - <_>9 3 9 2 2. - 0 - -0.0196352303028107 - 0.2297834008932114 - 1 - <_> - - - - <_>7 5 3 8 -1. - <_>8 5 1 8 3. - 0 - -9.9625496659427881e-004 - 0.6295937895774841 - 0.4131599068641663 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>9 7 2 2 3. - 0 - -0.0231271106749773 - 0.1695459038019180 - 1 - <_> - - - - <_>10 8 5 2 -1. - <_>10 9 5 1 2. - 0 - 0.0235257092863321 - 0.5174130201339722 - 0.0595193915069103 - <_> - - <_> - - - - <_>2 10 15 1 -1. - <_>7 10 5 1 3. - 0 - -0.0193565208464861 - 0.1357247978448868 - 1 - <_> - - - - <_>2 7 2 6 -1. - <_>2 9 2 2 3. - 0 - -4.1787112131714821e-003 - 0.2996628880500794 - 0.5791695117950440 - <_> - - <_> - - - - <_>9 14 3 3 -1. - <_>9 15 3 1 3. - 0 - 3.1488779932260513e-003 - 1 - 0.6592589020729065 - <_> - - - - <_>9 7 4 10 -1. - <_>9 12 4 5 2. - 0 - 7.3972279205918312e-003 - 0.5307171940803528 - 0.3795121014118195 - <_> - - <_> - - - - <_>0 8 8 2 -1. - <_>0 8 4 1 2. - <_>4 9 4 1 2. - 0 - 7.1955118983169086e-006 - 0.3128314912319183 - 1 - <_> - - - - <_>5 9 10 8 -1. - <_>5 9 5 4 2. - <_>10 13 5 4 2. - 0 - 0.0471144095063210 - 0.5537893176078796 - 0.1027309000492096 - <_> - - <_> - - - - <_>9 7 2 4 -1. - <_>9 7 1 4 2. - 0 - 7.2878710925579071e-003 - 0.4660859107971191 - 1 - <_> - - - - <_>9 6 3 4 -1. - <_>10 6 1 4 3. - 0 - -6.1887511983513832e-003 - 0.7158858180046082 - 0.4724448919296265 - <_> - - <_> - - - - <_>8 3 2 1 -1. - <_>9 3 1 1 2. - 0 - 2.9757320880889893e-003 - 1 - 0.0593456886708736 - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -1.8449809867888689e-003 - 0.7027301788330078 - 0.4718731045722961 - <_> - - <_> - - - - <_>12 0 4 14 -1. - <_>14 0 2 7 2. - <_>12 7 2 7 2. - 0 - 1.0239540279144421e-004 - 0.5894734263420105 - 1 - <_> - - - - <_>12 5 6 9 -1. - <_>12 5 3 9 2. - 0 - 2.4277009069919586e-003 - 0.4862355887889862 - 0.5247588157653809 - <_> - - <_> - - - - <_>0 2 6 16 -1. - <_>3 2 3 16 2. - 0 - -0.0647513121366501 - 0.6917471289634705 - 1 - <_> - - - - <_>1 12 4 2 -1. - <_>1 13 4 1 2. - 0 - 3.9380151429213583e-004 - 0.4669617116451263 - 0.2382405996322632 - 12.5784997940063480 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>7 7 6 1 -1. - <_>9 7 2 1 3. - 0 - 1.4397440245375037e-003 - 0.2773470878601074 - 1 - <_> - - - - <_>8 3 4 9 -1. - <_>8 6 4 3 3. - 0 - -5.4068560712039471e-004 - 0.7427154779434204 - 0.2479735016822815 - <_> - - <_> - - - - <_>12 10 4 6 -1. - <_>12 13 4 3 2. - 0 - -7.1237959673453588e-006 - 1 - 0.2199503034353256 - <_> - - - - <_>8 1 8 16 -1. - <_>12 1 4 8 2. - <_>8 9 4 8 2. - 0 - -2.3661039303988218e-003 - 0.5889989733695984 - 0.2595716118812561 - <_> - - <_> - - - - <_>4 6 3 6 -1. - <_>4 9 3 3 2. - 0 - 1.7343269428238273e-003 - 0.1860125958919525 - 1 - <_> - - - - <_>1 3 6 2 -1. - <_>4 3 3 2 2. - 0 - 1.5874590026214719e-003 - 0.4151870906352997 - 0.7103474140167236 - <_> - - <_> - - - - <_>9 8 3 12 -1. - <_>9 12 3 4 3. - 0 - 3.7285638973116875e-003 - 1 - 0.2527967095375061 - <_> - - - - <_>10 9 7 10 -1. - <_>10 14 7 5 2. - 0 - -0.1288381963968277 - 0.1393000930547714 - 0.5254514813423157 - <_> - - <_> - - - - <_>3 9 7 10 -1. - <_>3 14 7 5 2. - 0 - 7.9412180930376053e-003 - 1 - 0.2487729042768478 - <_> - - - - <_>7 5 1 14 -1. - <_>7 12 1 7 2. - 0 - -0.0126617299392819 - 0.2710700035095215 - 0.6618837714195252 - <_> - - <_> - - - - <_>13 14 1 6 -1. - <_>13 16 1 2 3. - 0 - 3.0146789868013002e-005 - 0.3812825977802277 - 1 - <_> - - - - <_>14 12 3 6 -1. - <_>14 14 3 2 3. - 0 - -0.0163301602005959 - 0.2326432019472122 - 0.5263010859489441 - <_> - - <_> - - - - <_>6 14 1 6 -1. - <_>6 16 1 2 3. - 0 - 1.4622770322603174e-005 - 0.4293332099914551 - 1 - <_> - - - - <_>3 12 3 6 -1. - <_>3 14 3 2 3. - 0 - -0.0208586603403091 - 0.1600403934717178 - 0.6782314777374268 - <_> - - <_> - - - - <_>8 13 5 3 -1. - <_>8 14 5 1 3. - 0 - 2.8194559272378683e-003 - 1 - 0.6679294109344482 - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 3.7899368908256292e-003 - 0.4587705135345459 - 0.7176238894462585 - <_> - - <_> - - - - <_>5 1 10 8 -1. - <_>5 1 5 4 2. - <_>10 5 5 4 2. - 0 - 0.0353446416556835 - 1 - 0.1864075064659119 - <_> - - - - <_>6 4 5 4 -1. - <_>6 6 5 2 2. - 0 - -1.1571600334718823e-003 - 0.5538259744644165 - 0.3150450885295868 - <_> - - <_> - - - - <_>1 10 18 1 -1. - <_>7 10 6 1 3. - 0 - -5.8742752298712730e-003 - 0.2828791141510010 - 1 - <_> - - - - <_>11 10 4 3 -1. - <_>11 10 2 3 2. - 0 - -1.5201780115603469e-005 - 0.5870224237442017 - 0.3704823851585388 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -2.2681879636365920e-004 - 1 - 0.4218930900096893 - <_> - - - - <_>3 13 2 3 -1. - <_>3 14 2 1 3. - 0 - 3.7845689803361893e-003 - 0.6667001247406006 - 0.2461182028055191 - <_> - - <_> - - - - <_>12 12 3 4 -1. - <_>12 14 3 2 2. - 0 - -8.5295992903411388e-005 - 1 - 0.3557587862014771 - <_> - - - - <_>11 10 5 6 -1. - <_>11 12 5 2 3. - 0 - -0.0443948917090893 - 0.1665547043085098 - 0.5234848856925964 - <_> - - <_> - - - - <_>0 8 16 2 -1. - <_>0 9 16 1 2. - 0 - 1.0126030538231134e-003 - 0.2884612977504730 - 1 - <_> - - - - <_>2 1 3 4 -1. - <_>2 3 3 2 2. - 0 - -7.6327780261635780e-003 - 0.2969340085983276 - 0.6080111265182495 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 4.0330411866307259e-003 - 0.4536390006542206 - 1 - <_> - - - - <_>5 6 12 6 -1. - <_>9 6 4 6 3. - 0 - 0.1367668956518173 - 0.5177264213562012 - 0.1449182033538818 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -5.0060478970408440e-003 - 0.7616909742355347 - 1 - <_> - - - - <_>3 6 12 6 -1. - <_>7 6 4 6 3. - 0 - -0.0124758398160338 - 0.2159706056118012 - 0.5460187792778015 - <_> - - <_> - - - - <_>10 5 6 5 -1. - <_>12 5 2 5 3. - 0 - -9.4012258341535926e-004 - 1 - 0.3926295936107636 - <_> - - - - <_>5 7 10 2 -1. - <_>5 7 5 2 2. - 0 - -0.0121919801458716 - 0.3478881120681763 - 0.5542662739753723 - <_> - - <_> - - - - <_>4 5 6 5 -1. - <_>6 5 2 5 3. - 0 - -5.4959481349214911e-004 - 0.6064276099205017 - 1 - <_> - - - - <_>9 3 2 10 -1. - <_>9 8 2 5 2. - 0 - -2.1802430273965001e-004 - 0.5697407126426697 - 0.1779713928699493 - <_> - - <_> - - - - <_>3 1 16 2 -1. - <_>11 1 8 1 2. - <_>3 2 8 1 2. - 0 - 6.9115799851715565e-003 - 0.5379372239112854 - 1 - <_> - - - - <_>9 9 3 2 -1. - <_>9 10 3 1 2. - 0 - -9.7631698008626699e-004 - 0.3327839076519013 - 0.5461531281471252 - <_> - - <_> - - - - <_>1 1 16 2 -1. - <_>1 1 8 1 2. - <_>9 2 8 1 2. - 0 - -8.7870173156261444e-003 - 0.2116160988807678 - 1 - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - -1.6761029837653041e-003 - 0.6635823249816895 - 0.4365859031677246 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>10 5 6 5 2. - <_>4 10 6 5 2. - 0 - -0.0556949488818645 - 1 - 0.5387424826622009 - <_> - - - - <_>7 13 6 6 -1. - <_>10 13 3 3 2. - <_>7 16 3 3 2. - 0 - -0.0198443792760372 - 0.1602804958820343 - 0.5330458879470825 - <_> - - <_> - - - - <_>8 9 3 2 -1. - <_>8 10 3 1 2. - 0 - -7.4751611100509763e-004 - 0.2917476892471314 - 1 - <_> - - - - <_>7 2 6 4 -1. - <_>9 2 2 4 3. - 0 - 0.0230328906327486 - 0.5608124136924744 - 0.1997981071472168 - <_> - - <_> - - - - <_>6 6 9 3 -1. - <_>6 7 9 1 3. - 0 - -3.0700280331075191e-003 - 1 - 0.3938314020633698 - <_> - - - - <_>10 7 6 1 -1. - <_>12 7 2 1 3. - 0 - -1.1636839481070638e-003 - 0.5757436156272888 - 0.4239456951618195 - <_> - - <_> - - - - <_>0 0 18 6 -1. - <_>6 0 6 6 3. - 0 - 0.2246433943510056 - 1 - 0.7676553130149841 - <_> - - - - <_>6 10 2 6 -1. - <_>6 13 2 3 2. - 0 - 1.4412109740078449e-003 - 0.5353866219520569 - 0.2514776885509491 - <_> - - <_> - - - - <_>11 12 3 6 -1. - <_>11 15 3 3 2. - 0 - -0.0300112497061491 - 0.2364903986454010 - 1 - <_> - - - - <_>4 4 12 12 -1. - <_>10 4 6 6 2. - <_>4 10 6 6 2. - 0 - -0.0530789606273174 - 0.2385863959789276 - 0.5414664745330811 - <_> - - <_> - - - - <_>1 2 3 6 -1. - <_>2 2 1 6 3. - 0 - 2.0800929050892591e-003 - 1 - 0.6511614918708801 - <_> - - - - <_>1 5 3 7 -1. - <_>2 5 1 7 3. - 0 - -4.0738182142376900e-003 - 0.6030414104461670 - 0.3587701022624970 - <_> - - <_> - - - - <_>4 13 12 4 -1. - <_>10 13 6 2 2. - <_>4 15 6 2 2. - 0 - -0.0195293705910444 - 1 - 0.5423592925071716 - <_> - - - - <_>3 3 17 12 -1. - <_>3 9 17 6 2. - 0 - -0.0533094704151154 - 0.2360953986644745 - 0.5401757955551148 - <_> - - <_> - - - - <_>3 3 14 12 -1. - <_>3 3 7 6 2. - <_>10 9 7 6 2. - 0 - -0.0348495617508888 - 0.2836985886096954 - 1 - <_> - - - - <_>2 11 16 9 -1. - <_>2 14 16 3 3. - 0 - -0.1265845000743866 - 0.1813516020774841 - 0.5421046018600464 - <_> - - <_> - - - - <_>9 14 3 6 -1. - <_>9 17 3 3 2. - 0 - 7.3325118137290701e-006 - 0.3980365991592407 - 1 - <_> - - - - <_>8 14 4 6 -1. - <_>10 14 2 3 2. - <_>8 17 2 3 2. - 0 - -0.0118438703939319 - 0.2616384923458099 - 0.5237730145454407 - <_> - - <_> - - - - <_>6 2 6 1 -1. - <_>8 2 2 1 3. - 0 - -4.8470678739249706e-003 - 0.2438108026981354 - 1 - <_> - - - - <_>9 5 2 5 -1. - <_>10 5 1 5 2. - 0 - 8.1693977117538452e-003 - 0.5327146053314209 - 0.8190376758575440 - <_> - - <_> - - - - <_>9 8 3 5 -1. - <_>10 8 1 5 3. - 0 - -6.4716790802776814e-003 - 1 - 0.4679693877696991 - <_> - - - - <_>9 12 6 1 -1. - <_>9 12 3 1 2. - 0 - -1.5188479665084742e-005 - 0.5563911795616150 - 0.4367586076259613 - <_> - - <_> - - - - <_>8 8 3 5 -1. - <_>9 8 1 5 3. - 0 - 3.0696711037307978e-003 - 1 - 0.6664348840713501 - <_> - - - - <_>6 10 4 3 -1. - <_>8 10 2 3 2. - 0 - -1.6296720423270017e-004 - 0.5594611167907715 - 0.3042711913585663 - 14.5467500686645510 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>0 4 20 6 -1. - <_>0 6 20 2 3. - 0 - -9.8275858908891678e-003 - 1 - 0.2116018980741501 - <_> - - - - <_>1 3 8 6 -1. - <_>1 3 4 3 2. - <_>5 6 4 3 2. - 0 - -4.1693858802318573e-003 - 0.6924685239791870 - 0.3043777048587799 - <_> - - <_> - - - - <_>7 15 6 4 -1. - <_>7 17 6 2 2. - 0 - 3.5341319744475186e-004 - 0.3183285892009735 - 1 - <_> - - - - <_>3 10 14 10 -1. - <_>3 15 14 5 2. - 0 - 4.8054549843072891e-003 - 0.5456559062004089 - 0.2522268891334534 - <_> - - <_> - - - - <_>6 4 4 4 -1. - <_>8 4 2 4 2. - 0 - 2.1071180526632816e-004 - 0.2902618050575256 - 1 - <_> - - - - <_>0 4 20 10 -1. - <_>0 9 20 5 2. - 0 - -2.8318869881331921e-003 - 0.3130455911159515 - 0.6884937286376953 - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - -7.5633679443853907e-006 - 1 - 0.2962465882301331 - <_> - - - - <_>2 0 16 4 -1. - <_>2 2 16 2 2. - 0 - -8.2888139877468348e-004 - 0.3099626004695892 - 0.5752515196800232 - <_> - - <_> - - - - <_>4 12 6 8 -1. - <_>4 12 3 4 2. - <_>7 16 3 4 2. - 0 - 1.6209259629249573e-003 - 0.3993195891380310 - 1 - <_> - - - - <_>0 5 6 7 -1. - <_>3 5 3 7 2. - 0 - 9.1338958591222763e-003 - 0.4827372133731842 - 0.7537832856178284 - <_> - - <_> - - - - <_>10 7 10 4 -1. - <_>15 7 5 2 2. - <_>10 9 5 2 2. - 0 - -4.1212290525436401e-003 - 0.2616927027702332 - 1 - <_> - - - - <_>5 8 12 1 -1. - <_>9 8 4 1 3. - 0 - -2.5447290390729904e-003 - 0.3108702898025513 - 0.5491235852241516 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -6.2652782071381807e-004 - 0.3239691853523254 - 1 - <_> - - - - <_>9 4 2 4 -1. - <_>9 6 2 2 2. - 0 - -3.6596331483451650e-005 - 0.6517410874366760 - 0.4178912043571472 - <_> - - <_> - - - - <_>9 6 3 6 -1. - <_>10 6 1 6 3. - 0 - 0.0138827199116349 - 1 - 0.6771203875541687 - <_> - - - - <_>12 7 6 4 -1. - <_>15 7 3 2 2. - <_>12 9 3 2 2. - 0 - 1.0493700392544270e-003 - 0.4159511029720306 - 0.5652891993522644 - <_> - - <_> - - - - <_>8 6 3 6 -1. - <_>9 6 1 6 3. - 0 - 0.0182153601199389 - 1 - 0.7689601182937622 - <_> - - - - <_>1 6 18 6 -1. - <_>1 6 9 3 2. - <_>10 9 9 3 2. - 0 - -0.0113345803692937 - 0.2873323857784271 - 0.4988932907581329 - <_> - - <_> - - - - <_>9 1 3 3 -1. - <_>10 1 1 3 3. - 0 - -4.1097560897469521e-003 - 1 - 0.5463008284568787 - <_> - - - - <_>10 8 5 2 -1. - <_>10 9 5 1 2. - 0 - 4.2612891411408782e-004 - 0.3631235063076019 - 0.5512552261352539 - <_> - - <_> - - - - <_>8 1 3 3 -1. - <_>9 1 1 3 3. - 0 - 6.0301548801362514e-003 - 1 - 0.1143767014145851 - <_> - - - - <_>5 8 5 2 -1. - <_>5 9 5 1 2. - 0 - 3.3587709185667336e-004 - 0.2891078889369965 - 0.5447341799736023 - <_> - - <_> - - - - <_>8 6 8 8 -1. - <_>12 6 4 4 2. - <_>8 10 4 4 2. - 0 - 6.2279507983475924e-004 - 1 - 0.3023431897163391 - <_> - - - - <_>5 7 10 2 -1. - <_>5 7 5 2 2. - 0 - -0.0258371196687222 - 0.2167005985975266 - 0.5278152823448181 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>4 5 6 5 2. - <_>10 10 6 5 2. - 0 - 0.0217749103903770 - 1 - 0.3254834115505219 - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - 1.7682299949228764e-003 - 0.5263050794601440 - 0.7526329159736633 - <_> - - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -0.0137938102707267 - 0.7410330176353455 - 1 - <_> - - - - <_>9 14 3 3 -1. - <_>9 15 3 1 3. - 0 - -5.0852829590439796e-003 - 0.6836609840393066 - 0.4579071104526520 - <_> - - <_> - - - - <_>8 14 3 3 -1. - <_>8 15 3 1 3. - 0 - 6.1795017682015896e-003 - 1 - 0.7449936270713806 - <_> - - - - <_>1 10 8 9 -1. - <_>1 13 8 3 3. - 0 - 0.0100303199142218 - 0.4860779941082001 - 0.2361457049846649 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -6.4201927743852139e-003 - 0.1467327028512955 - 1 - <_> - - - - <_>12 3 3 3 -1. - <_>13 3 1 3 3. - 0 - -5.6961281225085258e-003 - 0.2347819954156876 - 0.5323377251625061 - <_> - - <_> - - - - <_>5 3 3 3 -1. - <_>6 3 1 3 3. - 0 - -7.1498160250484943e-003 - 0.1477057039737701 - 1 - <_> - - - - <_>5 6 2 12 -1. - <_>5 10 2 4 3. - 0 - 2.4450740311294794e-003 - 0.3498533964157105 - 0.5803561806678772 - <_> - - <_> - - - - <_>1 11 18 4 -1. - <_>10 11 9 2 2. - <_>1 13 9 2 2. - 0 - -0.0375034101307392 - 1 - 0.5259550809860230 - <_> - - - - <_>7 12 6 2 -1. - <_>7 13 6 1 2. - 0 - 4.7799441381357610e-004 - 0.4362882971763611 - 0.6208922863006592 - <_> - - <_> - - - - <_>6 0 3 6 -1. - <_>7 0 1 6 3. - 0 - -7.0806080475449562e-003 - 0.2039460986852646 - 1 - <_> - - - - <_>0 11 18 4 -1. - <_>0 11 9 2 2. - <_>9 13 9 2 2. - 0 - 0.0328180007636547 - 0.5198358893394470 - 0.1371196061372757 - <_> - - <_> - - - - <_>7 12 6 2 -1. - <_>7 13 6 1 2. - 0 - 6.5188988810405135e-004 - 1 - 0.6323429942131043 - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - 4.6485587954521179e-003 - 0.4720163047313690 - 0.6567087173461914 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -1.9827929791063070e-003 - 0.6053060293197632 - 1 - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - -1.6011310508474708e-003 - 0.5090519189834595 - 0.3116933107376099 - <_> - - <_> - - - - <_>13 3 4 2 -1. - <_>13 4 4 1 2. - 0 - -3.0539939180016518e-003 - 0.3429804146289825 - 1 - <_> - - - - <_>4 0 12 2 -1. - <_>4 1 12 1 2. - 0 - 4.3212040327489376e-004 - 0.3838402926921845 - 0.5775598287582398 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>6 9 4 4 2. - <_>10 13 4 4 2. - 0 - -0.0274521205574274 - 0.2143469005823135 - 1 - <_> - - - - <_>1 11 6 2 -1. - <_>1 12 6 1 2. - 0 - 9.3099439982324839e-004 - 0.5952966213226318 - 0.3760158121585846 - <_> - - <_> - - - - <_>2 5 18 8 -1. - <_>11 5 9 4 2. - <_>2 9 9 4 2. - 0 - 6.7144189961254597e-003 - 0.5692626833915710 - 1 - <_> - - - - <_>7 1 6 10 -1. - <_>7 6 6 5 2. - 0 - -3.3701690845191479e-003 - 0.5784304141998291 - 0.3974282145500183 - <_> - - <_> - - - - <_>0 3 3 6 -1. - <_>0 5 3 2 3. - 0 - -0.0189039595425129 - 0.1818892955780029 - 1 - <_> - - - - <_>4 5 4 3 -1. - <_>4 6 4 1 3. - 0 - -6.5850871615111828e-003 - 0.6849110126495361 - 0.4351584017276764 - <_> - - <_> - - - - <_>19 3 1 6 -1. - <_>19 5 1 2 3. - 0 - 5.8810501359403133e-003 - 1 - 0.2726660966873169 - <_> - - - - <_>6 15 8 2 -1. - <_>6 16 8 1 2. - 0 - 8.0092082498595119e-004 - 0.4236431121826172 - 0.5844675898551941 - <_> - - <_> - - - - <_>0 3 1 6 -1. - <_>0 5 1 2 3. - 0 - 1.8510579830035567e-003 - 1 - 0.3371320962905884 - <_> - - - - <_>5 5 3 3 -1. - <_>5 6 3 1 3. - 0 - 6.3273650594055653e-003 - 0.5270221829414368 - 0.8053650856018066 - <_> - - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -3.3820930402725935e-003 - 0.2866018116474152 - 1 - <_> - - - - <_>10 6 6 3 -1. - <_>12 6 2 3 3. - 0 - -1.9292969955131412e-003 - 0.5888946056365967 - 0.3895787000656128 - <_> - - <_> - - - - <_>8 13 2 6 -1. - <_>8 16 2 3 2. - 0 - 0.0149952201172709 - 1 - 0.2177816927433014 - <_> - - - - <_>9 11 2 8 -1. - <_>9 15 2 4 2. - 0 - -0.0263307504355907 - 0.1775317043066025 - 0.5671470165252686 - <_> - - <_> - - - - <_>10 6 6 3 -1. - <_>12 6 2 3 3. - 0 - -4.1734222322702408e-003 - 1 - 0.4652962088584900 - <_> - - - - <_>5 15 15 5 -1. - <_>10 15 5 5 3. - 0 - 0.0272683501243591 - 0.4768311083316803 - 0.5695238709449768 - <_> - - <_> - - - - <_>2 14 2 2 -1. - <_>2 15 2 1 2. - 0 - 9.8880263976752758e-004 - 1 - 0.3397401869297028 - <_> - - - - <_>4 7 6 2 -1. - <_>6 7 2 2 3. - 0 - -1.0528849670663476e-003 - 0.6250041127204895 - 0.4288412034511566 - <_> - - <_> - - - - <_>8 3 6 1 -1. - <_>10 3 2 1 3. - 0 - 5.2288072183728218e-003 - 0.5347762107849121 - 1 - <_> - - - - <_>1 0 18 12 -1. - <_>7 0 6 12 3. - 0 - 0.0303954593837261 - 0.4115518927574158 - 0.5660753846168518 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>4 14 4 6 2. - 0 - -0.0791139304637909 - 0.7881323099136353 - 1 - <_> - - - - <_>0 15 15 5 -1. - <_>5 15 5 5 3. - 0 - 0.0182316694408655 - 0.3604339957237244 - 0.5569505095481873 - <_> - - <_> - - - - <_>8 3 6 1 -1. - <_>10 3 2 1 3. - 0 - 5.2288072183728218e-003 - 0.5416644215583801 - 1 - <_> - - - - <_>11 11 3 6 -1. - <_>11 14 3 3 2. - 0 - 4.3922828626818955e-004 - 0.5507156848907471 - 0.3882277011871338 - <_> - - <_> - - - - <_>6 3 6 1 -1. - <_>8 3 2 1 3. - 0 - -8.6501962505280972e-004 - 0.3185850977897644 - 1 - <_> - - - - <_>6 11 3 6 -1. - <_>6 14 3 3 2. - 0 - 1.0326979681849480e-003 - 0.5578364133834839 - 0.3219245970249176 - <_> - - <_> - - - - <_>9 6 3 4 -1. - <_>10 6 1 4 3. - 0 - -7.2997747920453548e-003 - 0.7073233127593994 - 1 - <_> - - - - <_>12 10 4 7 -1. - <_>12 10 2 7 2. - 0 - -9.3629042385146022e-004 - 0.5558015704154968 - 0.4613842070102692 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -6.0483231209218502e-003 - 0.6869289875030518 - 1 - <_> - - - - <_>4 6 4 7 -1. - <_>6 6 2 7 2. - 0 - 6.7529221996665001e-003 - 0.4870317876338959 - 0.2650370895862579 - <_> - - <_> - - - - <_>10 3 4 12 -1. - <_>10 3 2 12 2. - 0 - 0.0530780293047428 - 0.5281515121459961 - 1 - <_> - - - - <_>10 8 3 4 -1. - <_>11 8 1 4 3. - 0 - -1.0225810110569000e-003 - 0.6085882186889648 - 0.4304867982864380 - <_> - - <_> - - - - <_>1 0 18 14 -1. - <_>7 0 6 14 3. - 0 - 0.0312706492841244 - 1 - 0.5445832014083862 - <_> - - - - <_>2 8 6 11 -1. - <_>5 8 3 11 2. - 0 - -6.3522169366478920e-003 - 0.5328335762023926 - 0.2364324033260346 - 18.5722503662109380 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 15 4 -1. - <_>1 6 15 2 2. - 0 - -6.2215630896389484e-003 - 1 - 0.2625581026077271 - <_> - - - - <_>5 5 10 8 -1. - <_>5 9 10 4 2. - 0 - 2.1097389981150627e-003 - 0.1564992964267731 - 0.6792883276939392 - <_> - - <_> - - - - <_>14 2 6 8 -1. - <_>14 2 3 8 2. - 0 - 0.0108458595350385 - 0.3485808968544006 - 1 - <_> - - - - <_>11 6 6 14 -1. - <_>14 6 3 7 2. - <_>11 13 3 7 2. - 0 - 6.4230401767417789e-004 - 0.3698255121707916 - 0.5921658277511597 - <_> - - <_> - - - - <_>9 5 2 12 -1. - <_>9 11 2 6 2. - 0 - 7.3311722371727228e-004 - 1 - 0.3007084131240845 - <_> - - - - <_>3 7 4 6 -1. - <_>3 9 4 2 3. - 0 - 1.0134200565516949e-003 - 0.3624922931194305 - 0.7072426080703735 - <_> - - <_> - - - - <_>14 3 6 6 -1. - <_>14 3 3 6 2. - 0 - 0.0110935596749187 - 0.4416702091693878 - 1 - <_> - - - - <_>15 2 4 4 -1. - <_>15 4 4 2 2. - 0 - -7.9127531498670578e-003 - 0.3028708100318909 - 0.5417376160621643 - <_> - - <_> - - - - <_>0 2 6 7 -1. - <_>3 2 3 7 2. - 0 - 0.0129053099080920 - 0.4374504089355469 - 1 - <_> - - - - <_>3 6 6 14 -1. - <_>3 6 3 7 2. - <_>6 13 3 7 2. - 0 - -4.2430912144482136e-003 - 0.4401589930057526 - 0.7565190792083740 - <_> - - <_> - - - - <_>4 6 16 8 -1. - <_>4 10 16 4 2. - 0 - -2.1304309484548867e-004 - 0.2310786992311478 - 1 - <_> - - - - <_>10 12 2 8 -1. - <_>10 16 2 4 2. - 0 - -2.2308640182018280e-003 - 0.3568195998668671 - 0.5749999284744263 - <_> - - <_> - - - - <_>7 0 6 20 -1. - <_>9 0 2 20 3. - 0 - 2.6400520000606775e-003 - 0.3593688905239105 - 1 - <_> - - - - <_>1 7 16 12 -1. - <_>1 7 8 6 2. - <_>9 13 8 6 2. - 0 - 0.0751010328531265 - 0.6363567709922791 - 0.2327028959989548 - <_> - - <_> - - - - <_>9 11 3 3 -1. - <_>9 12 3 1 3. - 0 - -7.7012968249619007e-003 - 0.7074623703956604 - 1 - <_> - - - - <_>11 9 4 5 -1. - <_>11 9 2 5 2. - 0 - 1.5588370151817799e-003 - 0.5700237154960632 - 0.3590450882911682 - <_> - - <_> - - - - <_>3 3 1 2 -1. - <_>3 4 1 1 2. - 0 - -4.7687938786111772e-004 - 0.2805441021919251 - 1 - <_> - - - - <_>7 17 5 3 -1. - <_>7 18 5 1 3. - 0 - 8.4234727546572685e-004 - 0.4125418961048126 - 0.6177995800971985 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>10 12 2 4 2. - <_>8 16 2 4 2. - 0 - -0.0128251099959016 - 1 - 0.5403078198432922 - <_> - - - - <_>7 4 10 12 -1. - <_>12 4 5 6 2. - <_>7 10 5 6 2. - 0 - -6.5156567143276334e-004 - 0.5633643865585327 - 0.3356539011001587 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -0.0120061598718166 - 0.7109510898590088 - 1 - <_> - - - - <_>5 9 4 5 -1. - <_>7 9 2 5 2. - 0 - 1.3213419588282704e-003 - 0.4903850853443146 - 0.2824583053588867 - <_> - - <_> - - - - <_>9 9 8 2 -1. - <_>9 9 4 2 2. - 0 - -0.0203074403107166 - 0.1891369968652725 - 1 - <_> - - - - <_>14 15 5 2 -1. - <_>14 16 5 1 2. - 0 - 4.0180929936468601e-003 - 0.5377966165542603 - 0.3119494915008545 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 4.5315311290323734e-003 - 1 - 0.7206758260726929 - <_> - - - - <_>1 7 8 4 -1. - <_>1 7 4 2 2. - <_>5 9 4 2 2. - 0 - -4.4381739571690559e-003 - 0.1854667961597443 - 0.4981732964515686 - <_> - - <_> - - - - <_>19 3 1 2 -1. - <_>19 4 1 1 2. - 0 - 1.5692010056227446e-003 - 1 - 0.2638274133205414 - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -4.9516442231833935e-003 - 0.6871067285537720 - 0.4714686870574951 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>3 14 7 2 2. - <_>10 16 7 2 2. - 0 - -0.0274296794086695 - 0.1548285037279129 - 1 - <_> - - - - <_>5 0 10 2 -1. - <_>5 1 10 1 2. - 0 - 1.4181969454512000e-003 - 0.4376842975616455 - 0.6327368021011353 - <_> - - <_> - - - - <_>11 14 4 6 -1. - <_>11 16 4 2 3. - 0 - -0.0130789401009679 - 0.3166814148426056 - 1 - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -3.5092779435217381e-003 - 0.6199743747711182 - 0.4379687011241913 - <_> - - <_> - - - - <_>7 13 6 6 -1. - <_>7 13 3 3 2. - <_>10 16 3 3 2. - 0 - 0.0189207307994366 - 1 - 0.1470714062452316 - <_> - - - - <_>0 2 1 6 -1. - <_>0 4 1 2 3. - 0 - 2.1683350205421448e-003 - 0.5809459090232849 - 0.3431949019432068 - <_> - - <_> - - - - <_>6 7 8 2 -1. - <_>6 8 8 1 2. - 0 - 1.6401590546593070e-003 - 0.3959457874298096 - 1 - <_> - - - - <_>9 7 6 1 -1. - <_>9 7 3 1 2. - 0 - 1.4005920093040913e-004 - 0.3240025043487549 - 0.5646647214889526 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>7 6 6 5 2. - 0 - -3.3137591090053320e-003 - 1 - 0.4274528026580811 - <_> - - - - <_>0 2 6 2 -1. - <_>0 3 6 1 2. - 0 - -2.9459029901772738e-003 - 0.3341667950153351 - 0.6627960205078125 - <_> - - <_> - - - - <_>11 4 2 4 -1. - <_>11 4 1 4 2. - 0 - 1.3612229668069631e-004 - 0.4046927988529205 - 1 - <_> - - - - <_>11 10 3 6 -1. - <_>11 13 3 3 2. - 0 - 6.0512032359838486e-004 - 0.5484058260917664 - 0.3569940924644470 - <_> - - <_> - - - - <_>3 9 8 2 -1. - <_>7 9 4 2 2. - 0 - -0.0175139904022217 - 0.1824150979518890 - 1 - <_> - - - - <_>0 0 4 6 -1. - <_>2 0 2 6 2. - 0 - -0.0187350306659937 - 0.7971820235252380 - 0.5068569183349609 - <_> - - <_> - - - - <_>7 0 6 2 -1. - <_>9 0 2 2 3. - 0 - 0.0120656499639153 - 1 - 0.2167007029056549 - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - -2.6544178836047649e-003 - 0.6584178805351257 - 0.4628243148326874 - <_> - - <_> - - - - <_>3 12 1 2 -1. - <_>3 13 1 1 2. - 0 - 1.4501289697363973e-003 - 1 - 0.2090252041816711 - <_> - - - - <_>4 5 11 3 -1. - <_>4 6 11 1 3. - 0 - 0.0109540196135640 - 0.5112305283546448 - 0.7784575819969177 - <_> - - <_> - - - - <_>11 4 2 4 -1. - <_>11 4 1 4 2. - 0 - 0.0157717093825340 - 0.5132359266281128 - 1 - <_> - - - - <_>8 3 6 3 -1. - <_>10 3 2 3 3. - 0 - -0.0142526896670461 - 0.1742414981126785 - 0.5267148017883301 - <_> - - <_> - - - - <_>7 4 2 4 -1. - <_>8 4 1 4 2. - 0 - 3.0411860279855318e-005 - 0.3418447971343994 - 1 - <_> - - - - <_>6 3 6 3 -1. - <_>8 3 2 3 3. - 0 - 0.0234862994402647 - 0.5631265044212341 - 0.2006393969058991 - <_> - - <_> - - - - <_>11 4 4 3 -1. - <_>11 5 4 1 3. - 0 - 5.2205449901521206e-003 - 1 - 0.6249648928642273 - <_> - - - - <_>11 8 2 8 -1. - <_>11 12 2 4 2. - 0 - -0.0258124303072691 - 0.3203228116035461 - 0.5199329853057861 - <_> - - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -1.9526650430634618e-003 - 0.6140705943107605 - 1 - <_> - - - - <_>9 7 2 5 -1. - <_>10 7 1 5 2. - 0 - -8.1470049917697906e-003 - 0.6592895984649658 - 0.3711124956607819 - <_> - - <_> - - - - <_>14 11 1 6 -1. - <_>14 13 1 2 3. - 0 - 3.2962448894977570e-003 - 1 - 0.2952111959457398 - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -1.3961310032755136e-003 - 0.3320803940296173 - 0.5528414845466614 - <_> - - <_> - - - - <_>0 3 2 2 -1. - <_>0 4 2 1 2. - 0 - -4.1055441834032536e-003 - 0.1710550040006638 - 1 - <_> - - - - <_>4 14 5 6 -1. - <_>4 16 5 2 3. - 0 - -0.0108887795358896 - 0.3359434902667999 - 0.5674905180931091 - <_> - - <_> - - - - <_>11 4 4 3 -1. - <_>11 5 4 1 3. - 0 - -7.6768421567976475e-003 - 1 - 0.4773241877555847 - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -9.7729787230491638e-003 - 0.8081045150756836 - 0.4845828115940094 - <_> - - <_> - - - - <_>5 4 4 3 -1. - <_>5 5 4 1 3. - 0 - 6.0439710505306721e-003 - 1 - 0.6784002184867859 - <_> - - - - <_>5 15 4 2 -1. - <_>7 15 2 2 2. - 0 - -4.6134641161188483e-004 - 0.5514639019966126 - 0.3642359972000122 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0579923614859581 - 1 - 0.1254435032606125 - <_> - - - - <_>9 10 3 3 -1. - <_>9 11 3 1 3. - 0 - 5.9384980704635382e-004 - 0.4424878954887390 - 0.5728461742401123 - <_> - - <_> - - - - <_>1 6 2 6 -1. - <_>1 8 2 2 3. - 0 - -6.2353480607271194e-003 - 0.2805041968822479 - 1 - <_> - - - - <_>2 4 8 15 -1. - <_>2 9 8 5 3. - 0 - -0.0127849299460649 - 0.1950912028551102 - 0.5652924776077271 - <_> - - <_> - - - - <_>9 12 3 2 -1. - <_>9 13 3 1 2. - 0 - 4.1973669431172311e-004 - 1 - 0.6166483759880066 - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - 8.0646801507100463e-004 - 0.4526579976081848 - 0.5944486856460571 - <_> - - <_> - - - - <_>7 6 3 5 -1. - <_>8 6 1 5 3. - 0 - -1.6339010326191783e-003 - 1 - 0.4086942076683044 - <_> - - - - <_>5 3 6 2 -1. - <_>7 3 2 2 3. - 0 - -4.8299999907612801e-003 - 0.2793526947498322 - 0.6444935202598572 - <_> - - <_> - - - - <_>6 1 8 10 -1. - <_>10 1 4 5 2. - <_>6 6 4 5 2. - 0 - -6.3992068171501160e-003 - 1 - 0.5671656131744385 - <_> - - - - <_>0 0 20 10 -1. - <_>10 0 10 5 2. - <_>0 5 10 5 2. - 0 - 0.1081919968128204 - 0.5311812162399292 - 0.2614356875419617 - <_> - - <_> - - - - <_>6 3 3 1 -1. - <_>7 3 1 1 3. - 0 - 6.5056560561060905e-004 - 1 - 0.2996774017810822 - <_> - - - - <_>0 2 6 8 -1. - <_>2 2 2 8 3. - 0 - 0.0206112507730722 - 0.4489943087100983 - 0.6888279914855957 - <_> - - <_> - - - - <_>11 10 3 4 -1. - <_>11 12 3 2 2. - 0 - -0.0251290500164032 - 1 - 0.5196864008903503 - <_> - - - - <_>12 6 3 8 -1. - <_>12 10 3 4 2. - 0 - 1.7922939732670784e-003 - 0.3466995954513550 - 0.5533587932586670 - <_> - - <_> - - - - <_>6 10 3 4 -1. - <_>6 12 3 2 2. - 0 - 1.5626220265403390e-003 - 1 - 0.3081440031528473 - <_> - - - - <_>5 6 3 8 -1. - <_>5 10 3 4 2. - 0 - -6.1898730928078294e-004 - 0.2693870961666107 - 0.5544489026069641 - <_> - - <_> - - - - <_>2 6 18 6 -1. - <_>11 6 9 3 2. - <_>2 9 9 3 2. - 0 - 4.8111421056091785e-003 - 0.5587847828865051 - 1 - <_> - - - - <_>7 14 7 3 -1. - <_>7 15 7 1 3. - 0 - 2.2484229411929846e-003 - 0.4672113060951233 - 0.6090825200080872 - <_> - - <_> - - - - <_>0 0 2 12 -1. - <_>1 0 1 12 2. - 0 - -0.0301472395658493 - 0.9027591943740845 - 1 - <_> - - - - <_>1 2 18 16 -1. - <_>1 10 18 8 2. - 0 - 0.2754867970943451 - 0.4719834923744202 - 0.2196920067071915 - <_> - - <_> - - - - <_>9 13 5 3 -1. - <_>9 14 5 1 3. - 0 - 3.6894630175083876e-003 - 1 - 0.6273009181022644 - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 7.2957701049745083e-003 - 0.4839217960834503 - 0.6909062266349793 - <_> - - <_> - - - - <_>0 6 18 6 -1. - <_>0 6 9 3 2. - <_>9 9 9 3 2. - 0 - -0.0562110692262650 - 0.1738487929105759 - 1 - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -2.6478560175746679e-003 - 0.6304144859313965 - 0.4474301934242249 - <_> - - <_> - - - - <_>17 4 1 3 -1. - <_>17 5 1 1 3. - 0 - -1.4534000074490905e-003 - 1 - 0.5302538275718689 - <_> - - - - <_>12 11 1 9 -1. - <_>12 14 1 3 3. - 0 - 2.8540920466184616e-003 - 0.5338397026062012 - 0.3796882927417755 - <_> - - <_> - - - - <_>2 4 1 3 -1. - <_>2 5 1 1 3. - 0 - 5.8243022067472339e-004 - 1 - 0.3269836902618408 - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - 9.2509482055902481e-004 - 0.4554812014102936 - 0.6358348131179810 - 21.5781192779541020 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 18 3 -1. - <_>7 2 6 3 3. - 0 - 0.0198064409196377 - 0.2809725105762482 - 1 - <_> - - - - <_>0 1 20 6 -1. - <_>0 3 20 2 3. - 0 - 7.0395611692219973e-004 - 0.3119826018810272 - 0.7090306282043457 - <_> - - <_> - - - - <_>7 5 6 3 -1. - <_>9 5 2 3 3. - 0 - 2.5563780218362808e-003 - 0.2981947958469391 - 1 - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 1.0824160417541862e-003 - 0.3020560145378113 - 0.5808811187744141 - <_> - - <_> - - - - <_>3 1 4 10 -1. - <_>3 1 2 5 2. - <_>5 6 2 5 2. - 0 - -9.2893769033253193e-004 - 1 - 0.3738102912902832 - <_> - - - - <_>0 4 19 10 -1. - <_>0 9 19 5 2. - 0 - -0.0180097296833992 - 0.2163126021623612 - 0.6619253754615784 - <_> - - <_> - - - - <_>9 8 3 12 -1. - <_>9 12 3 4 3. - 0 - 2.3500190582126379e-003 - 1 - 0.2910403907299042 - <_> - - - - <_>11 18 5 2 -1. - <_>11 19 5 1 2. - 0 - 8.1822491483762860e-004 - 0.5578622817993164 - 0.3366627991199493 - <_> - - <_> - - - - <_>5 16 6 4 -1. - <_>5 16 3 2 2. - <_>8 18 3 2 2. - 0 - 6.2095321482047439e-004 - 0.4072425961494446 - 1 - <_> - - - - <_>5 18 3 2 -1. - <_>5 19 3 1 2. - 0 - 9.6780969761312008e-004 - 0.6859595775604248 - 0.3105461895465851 - <_> - - <_> - - - - <_>13 11 3 2 -1. - <_>13 12 3 1 2. - 0 - 4.8000211245380342e-004 - 1 - 0.3337332904338837 - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 9.0538640506565571e-005 - 0.3370958864688873 - 0.5451210737228394 - <_> - - <_> - - - - <_>1 2 18 6 -1. - <_>1 2 9 3 2. - <_>10 5 9 3 2. - 0 - -0.0439147986471653 - 0.2625670135021210 - 1 - <_> - - - - <_>3 5 14 6 -1. - <_>3 7 14 2 3. - 0 - -5.6501338258385658e-003 - 0.6050462722778320 - 0.3232415020465851 - <_> - - <_> - - - - <_>18 1 2 6 -1. - <_>18 3 2 2 3. - 0 - 3.8661491125822067e-003 - 1 - 0.3262613117694855 - <_> - - - - <_>9 11 6 1 -1. - <_>11 11 2 1 3. - 0 - -6.3069426687434316e-005 - 0.5817307829856873 - 0.4164389967918396 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>3 2 3 11 2. - 0 - 0.0525337383151054 - 1 - 0.7095398902893066 - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - 1.3818660518154502e-003 - 0.5292875766754150 - 0.2541388869285584 - <_> - - <_> - - - - <_>6 12 9 2 -1. - <_>9 12 3 2 3. - 0 - -8.9264067355543375e-004 - 1 - 0.4085341095924377 - <_> - - - - <_>9 4 6 15 -1. - <_>9 4 3 15 2. - 0 - 0.0855795070528984 - 0.5263236165046692 - 0.3003202974796295 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -1.8343339615967125e-004 - 1 - 0.4029205143451691 - <_> - - - - <_>5 4 6 15 -1. - <_>8 4 3 15 2. - 0 - -9.7924815490841866e-003 - 0.3521319925785065 - 0.6664004921913147 - <_> - - <_> - - - - <_>14 12 6 7 -1. - <_>14 12 3 7 2. - 0 - 0.0144286202266812 - 0.4593566060066223 - 1 - <_> - - - - <_>18 3 2 9 -1. - <_>18 6 2 3 3. - 0 - -0.0456870011985302 - 0.1474756002426148 - 0.5178632140159607 - <_> - - <_> - - - - <_>8 1 3 1 -1. - <_>9 1 1 1 3. - 0 - -2.5763090234249830e-003 - 0.1837278008460999 - 1 - <_> - - - - <_>0 12 6 7 -1. - <_>3 12 3 7 2. - 0 - -0.0383018590509892 - 0.8082658052444458 - 0.5166687965393066 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>16 7 3 2 2. - <_>13 9 3 2 2. - 0 - 2.8978290501981974e-003 - 0.4798013865947723 - 1 - <_> - - - - <_>8 0 10 2 -1. - <_>8 1 10 1 2. - 0 - -2.5165060069411993e-003 - 0.3346295952796936 - 0.5444449186325073 - <_> - - <_> - - - - <_>1 7 6 4 -1. - <_>1 7 3 2 2. - <_>4 9 3 2 2. - 0 - 5.6281982688233256e-004 - 0.3589026927947998 - 1 - <_> - - - - <_>1 2 3 3 -1. - <_>1 3 3 1 3. - 0 - 3.6684391088783741e-003 - 0.5983129739761353 - 0.2983964085578919 - <_> - - <_> - - - - <_>9 13 4 3 -1. - <_>9 14 4 1 3. - 0 - 2.1319789811968803e-003 - 1 - 0.6163223981857300 - <_> - - - - <_>12 13 7 2 -1. - <_>12 14 7 1 2. - 0 - 7.6037310063838959e-003 - 0.5217130184173584 - 0.2054159045219421 - <_> - - <_> - - - - <_>5 12 9 2 -1. - <_>8 12 3 2 3. - 0 - -1.1668079969240353e-004 - 1 - 0.3446668982505798 - <_> - - - - <_>6 10 4 8 -1. - <_>6 14 4 4 2. - 0 - 3.1659509986639023e-003 - 0.5597484707832336 - 0.2673786878585815 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0225694999098778 - 0.6900268197059631 - 1 - <_> - - - - <_>12 0 5 2 -1. - <_>12 1 5 1 2. - 0 - 2.7129601221531630e-004 - 0.4486638903617859 - 0.5508785247802734 - <_> - - <_> - - - - <_>7 7 1 12 -1. - <_>7 13 1 6 2. - 0 - -0.0154344597831368 - 0.2048323005437851 - 1 - <_> - - - - <_>6 2 3 4 -1. - <_>7 2 1 4 3. - 0 - -8.4861656650900841e-003 - 0.1254952996969223 - 0.5060356259346008 - <_> - - <_> - - - - <_>0 13 20 6 -1. - <_>0 15 20 2 3. - 0 - -0.1180747002363205 - 0.0676330626010895 - 1 - <_> - - - - <_>8 5 12 2 -1. - <_>14 5 6 1 2. - <_>8 6 6 1 2. - 0 - -1.2300079688429832e-003 - 0.5660700798034668 - 0.4292201101779938 - <_> - - <_> - - - - <_>8 14 2 3 -1. - <_>8 15 2 1 3. - 0 - -7.0290351286530495e-003 - 0.7136403918266296 - 1 - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 8.9325206354260445e-003 - 0.4338876008987427 - 0.7060875296592712 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - -0.0477359816431999 - 1 - 0.5268685221672058 - <_> - - - - <_>6 0 8 12 -1. - <_>10 0 4 6 2. - <_>6 6 4 6 2. - 0 - -0.0441555790603161 - 0.2580580115318298 - 0.5406960844993591 - <_> - - <_> - - - - <_>0 15 9 4 -1. - <_>0 17 9 2 2. - 0 - -0.0259834807366133 - 0.1905054003000259 - 1 - <_> - - - - <_>9 0 2 5 -1. - <_>10 0 1 5 2. - 0 - -4.7885831445455551e-003 - 0.2551892995834351 - 0.5339077115058899 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>9 5 1 6 2. - 0 - 6.7423451691865921e-003 - 0.4693309962749481 - 1 - <_> - - - - <_>17 2 3 6 -1. - <_>17 4 3 2 3. - 0 - 0.0116547504439950 - 0.5261964201927185 - 0.3145434856414795 - <_> - - <_> - - - - <_>3 11 2 3 -1. - <_>3 12 2 1 3. - 0 - -5.6982729583978653e-003 - 0.1756853014230728 - 1 - <_> - - - - <_>7 13 3 3 -1. - <_>7 14 3 1 3. - 0 - -7.2983349673449993e-003 - 0.7774729728698731 - 0.5124292969703674 - <_> - - <_> - - - - <_>14 12 5 3 -1. - <_>14 13 5 1 3. - 0 - 7.9091778025031090e-003 - 0.5284559726715088 - 1 - <_> - - - - <_>4 8 14 3 -1. - <_>4 9 14 1 3. - 0 - -1.5874979726504534e-004 - 0.3887802064418793 - 0.5501173734664917 - <_> - - <_> - - - - <_>1 12 5 3 -1. - <_>1 13 5 1 3. - 0 - -6.2235877849161625e-003 - 0.2489829063415527 - 1 - <_> - - - - <_>1 15 12 2 -1. - <_>1 15 6 1 2. - <_>7 16 6 1 2. - 0 - 1.3308860361576080e-003 - 0.4262146055698395 - 0.5935062170028687 - <_> - - <_> - - - - <_>12 11 4 2 -1. - <_>12 12 4 1 2. - 0 - 5.2055278792977333e-003 - 1 - 0.2545222938060761 - <_> - - - - <_>9 8 3 5 -1. - <_>10 8 1 5 3. - 0 - 0.0140651697292924 - 0.4851990044116974 - 0.7021418809890747 - <_> - - <_> - - - - <_>9 5 2 6 -1. - <_>10 5 1 6 2. - 0 - -6.7384149879217148e-003 - 0.7143270969390869 - 1 - <_> - - - - <_>0 2 3 6 -1. - <_>0 4 3 2 3. - 0 - 3.3406780567020178e-003 - 0.5175725221633911 - 0.2808643877506256 - <_> - - <_> - - - - <_>12 11 4 2 -1. - <_>12 12 4 1 2. - 0 - -0.0118806995451450 - 1 - 0.5173221826553345 - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - 1.4226379571482539e-003 - 0.4502865970134735 - 0.5795695185661316 - <_> - - <_> - - - - <_>4 11 4 2 -1. - <_>4 12 4 1 2. - 0 - 2.9858129564672709e-003 - 1 - 0.1915116012096405 - <_> - - - - <_>8 8 3 5 -1. - <_>9 8 1 5 3. - 0 - -2.0481580868363380e-003 - 0.6502432227134705 - 0.4559315145015717 - <_> - - <_> - - - - <_>9 3 3 1 -1. - <_>10 3 1 1 3. - 0 - 1.7122729914262891e-003 - 0.5376247167587280 - 1 - <_> - - - - <_>16 5 3 8 -1. - <_>17 5 1 8 3. - 0 - -0.0169808696955442 - 0.7056233286857605 - 0.4914605915546417 - <_> - - <_> - - - - <_>8 3 3 1 -1. - <_>9 3 1 1 3. - 0 - -1.1290470138192177e-003 - 0.2678706049919128 - 1 - <_> - - - - <_>1 5 3 8 -1. - <_>2 5 1 8 3. - 0 - 2.8620059601962566e-003 - 0.4410853981971741 - 0.6368319988250732 - <_> - - <_> - - - - <_>10 1 3 3 -1. - <_>11 1 1 3 3. - 0 - -3.8065758999437094e-003 - 0.2763563990592957 - 1 - <_> - - - - <_>17 5 2 4 -1. - <_>17 5 1 4 2. - 0 - 5.9090270660817623e-003 - 0.4867301881313324 - 0.6728776097297669 - <_> - - <_> - - - - <_>2 8 14 3 -1. - <_>2 9 14 1 3. - 0 - 1.1004370171576738e-003 - 0.4070514142513275 - 1 - <_> - - - - <_>9 7 1 3 -1. - <_>9 8 1 1 3. - 0 - -2.3396299220621586e-003 - 0.2604948878288269 - 0.6154860258102417 - <_> - - <_> - - - - <_>6 1 8 10 -1. - <_>6 6 8 5 2. - 0 - -3.6068160552531481e-003 - 0.5731999874114990 - 1 - <_> - - - - <_>13 0 6 8 -1. - <_>16 0 3 4 2. - <_>13 4 3 4 2. - 0 - 0.0408311896026134 - 0.4973376989364624 - 0.7387006878852844 - <_> - - <_> - - - - <_>1 5 2 4 -1. - <_>2 5 1 4 2. - 0 - -7.1082250215113163e-003 - 0.6984751224517822 - 1 - <_> - - - - <_>4 2 12 2 -1. - <_>4 3 12 1 2. - 0 - -9.3759730225428939e-004 - 0.2691167891025543 - 0.4741779863834381 - <_> - - <_> - - - - <_>8 8 4 4 -1. - <_>8 10 4 2 2. - 0 - -1.6740820137783885e-003 - 0.3551014065742493 - 1 - <_> - - - - <_>5 6 12 4 -1. - <_>9 6 4 4 3. - 0 - 0.0882877036929131 - 0.5244613885879517 - 0.2096650004386902 - <_> - - <_> - - - - <_>1 2 8 1 -1. - <_>5 2 4 1 2. - 0 - 8.2009629113599658e-004 - 0.4131096899509430 - 1 - <_> - - - - <_>1 1 6 10 -1. - <_>3 1 2 10 3. - 0 - -7.6624617213383317e-004 - 0.4620293080806732 - 0.6775410175323486 - <_> - - <_> - - - - <_>8 6 8 2 -1. - <_>8 6 4 2 2. - 0 - 6.5769668435677886e-004 - 1 - 0.5628275275230408 - <_> - - - - <_>10 7 6 6 -1. - <_>12 7 2 6 3. - 0 - -2.1304790861904621e-003 - 0.5576859712600708 - 0.4577650129795075 - <_> - - <_> - - - - <_>4 6 8 2 -1. - <_>8 6 4 2 2. - 0 - -3.7317050737328827e-004 - 1 - 0.4959256052970886 - <_> - - - - <_>4 7 6 6 -1. - <_>6 7 2 6 3. - 0 - -0.0111722303554416 - 0.5625635981559753 - 0.2047107964754105 - <_> - - <_> - - - - <_>3 14 16 4 -1. - <_>3 16 16 2 2. - 0 - 0.0434352196753025 - 1 - 0.2242148071527481 - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 9.6736161503940821e-004 - 0.4533343911170960 - 0.6199932098388672 - <_> - - <_> - - - - <_>8 12 3 3 -1. - <_>8 13 3 1 3. - 0 - -3.1452889088541269e-003 - 0.6662756204605103 - 1 - <_> - - - - <_>5 12 6 1 -1. - <_>8 12 3 1 2. - 0 - 1.5233129961416125e-003 - 0.5007988214492798 - 0.2384992986917496 - <_> - - <_> - - - - <_>18 10 2 3 -1. - <_>18 11 2 1 3. - 0 - 2.0854279864579439e-003 - 1 - 0.3753500878810883 - <_> - - - - <_>16 8 4 6 -1. - <_>16 10 4 2 3. - 0 - 0.0360982008278370 - 0.5177171230316162 - 0.1634493023157120 - <_> - - <_> - - - - <_>8 3 2 1 -1. - <_>9 3 1 1 2. - 0 - 1.6179570229724050e-003 - 1 - 0.2587381899356842 - <_> - - - - <_>7 1 3 9 -1. - <_>8 1 1 9 3. - 0 - -6.2132300809025764e-004 - 0.6299533843994141 - 0.4658789932727814 - <_> - - <_> - - - - <_>5 11 11 6 -1. - <_>5 14 11 3 2. - 0 - 7.1878539165481925e-004 - 1 - 0.3354076147079468 - <_> - - - - <_>12 2 3 14 -1. - <_>12 9 3 7 2. - 0 - -0.0393395200371742 - 0.2154128998517990 - 0.5235713720321655 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -1.0988829890266061e-003 - 0.6468896865844727 - 1 - <_> - - - - <_>3 5 12 5 -1. - <_>7 5 4 5 3. - 0 - 2.1191420964896679e-003 - 0.2893089056015015 - 0.5254815816879273 - 22.5852909088134770 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 6 3 -1. - <_>4 2 3 3 2. - 0 - 5.2359891124069691e-003 - 0.3299711048603058 - 1 - <_> - - - - <_>5 5 6 10 -1. - <_>5 5 3 5 2. - <_>8 10 3 5 2. - 0 - -2.2169889416545630e-003 - 0.7041593194007874 - 0.3235465884208679 - <_> - - <_> - - - - <_>16 18 2 2 -1. - <_>16 18 1 2 2. - 0 - -8.2303592935204506e-003 - 1 - 0.4961170852184296 - <_> - - - - <_>16 18 2 2 -1. - <_>16 18 1 2 2. - 0 - -8.2303592935204506e-003 - 0.7128043174743652 - 0.4961170852184296 - <_> - - <_> - - - - <_>8 4 2 5 -1. - <_>9 4 1 5 2. - 0 - 4.5343261444941163e-004 - 0.3208472132682800 - 1 - <_> - - - - <_>8 4 1 4 -1. - <_>8 6 1 2 2. - 0 - -4.1777061414904892e-004 - 0.6613916754722595 - 0.3551332950592041 - <_> - - <_> - - - - <_>7 15 12 4 -1. - <_>13 15 6 2 2. - <_>7 17 6 2 2. - 0 - 2.7823769487440586e-003 - 0.3710134923458099 - 1 - <_> - - - - <_>11 18 6 2 -1. - <_>11 19 6 1 2. - 0 - -6.0361868236213923e-005 - 0.5746393799781799 - 0.3894880115985870 - <_> - - <_> - - - - <_>7 7 4 10 -1. - <_>7 12 4 5 2. - 0 - 3.5061789676547050e-003 - 1 - 0.3054102957248688 - <_> - - - - <_>5 6 10 8 -1. - <_>5 10 10 4 2. - 0 - 1.7013119941111654e-004 - 0.2885577976703644 - 0.6487745046615601 - <_> - - <_> - - - - <_>11 1 6 12 -1. - <_>14 1 3 6 2. - <_>11 7 3 6 2. - 0 - -2.3378930054605007e-003 - 1 - 0.3174431025981903 - <_> - - - - <_>5 8 12 1 -1. - <_>9 8 4 1 3. - 0 - -2.1369170863181353e-003 - 0.3820919990539551 - 0.5232893228530884 - <_> - - <_> - - - - <_>4 7 3 6 -1. - <_>4 9 3 2 3. - 0 - 1.0250400518998504e-003 - 0.3622795045375824 - 1 - <_> - - - - <_>4 11 3 4 -1. - <_>4 13 3 2 2. - 0 - -4.4726220949087292e-005 - 0.6538959145545960 - 0.4003680944442749 - <_> - - <_> - - - - <_>14 16 2 2 -1. - <_>14 17 2 1 2. - 0 - 5.7102291611954570e-004 - 1 - 0.3893173038959503 - <_> - - - - <_>15 15 2 2 -1. - <_>15 16 2 1 2. - 0 - 5.7743012439459562e-004 - 0.5614532828330994 - 0.3687644004821777 - <_> - - <_> - - - - <_>7 12 6 2 -1. - <_>7 13 6 1 2. - 0 - 7.9692091094329953e-004 - 1 - 0.6443027853965759 - <_> - - - - <_>8 13 4 2 -1. - <_>8 14 4 1 2. - 0 - 3.5945948911830783e-004 - 0.3380852937698364 - 0.5824648141860962 - <_> - - <_> - - - - <_>11 1 6 12 -1. - <_>14 1 3 6 2. - <_>11 7 3 6 2. - 0 - 4.3973900028504431e-004 - 1 - 0.3938767015933991 - <_> - - - - <_>12 2 4 2 -1. - <_>12 3 4 1 2. - 0 - -8.9061429025605321e-004 - 0.3427971005439758 - 0.5515698790550232 - <_> - - <_> - - - - <_>3 10 12 6 -1. - <_>3 10 6 3 2. - <_>9 13 6 3 2. - 0 - 5.4110242053866386e-003 - 1 - 0.3803538084030151 - <_> - - - - <_>3 1 6 12 -1. - <_>3 1 3 6 2. - <_>6 7 3 6 2. - 0 - -8.5764907998964190e-004 - 0.6439505219459534 - 0.4168345928192139 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - -0.0220006499439478 - 0.6654601097106934 - 1 - <_> - - - - <_>5 1 10 8 -1. - <_>10 1 5 4 2. - <_>5 5 5 4 2. - 0 - -7.8731682151556015e-003 - 0.4182722866535187 - 0.5604724287986755 - <_> - - <_> - - - - <_>0 6 4 14 -1. - <_>0 6 2 7 2. - <_>2 13 2 7 2. - 0 - -0.0274444594979286 - 0.6586862802505493 - 1 - <_> - - - - <_>1 15 12 4 -1. - <_>1 15 6 2 2. - <_>7 17 6 2 2. - 0 - 1.9792269449681044e-003 - 0.3244912028312683 - 0.4882870018482208 - <_> - - <_> - - - - <_>10 17 3 3 -1. - <_>11 17 1 3 3. - 0 - -5.6783691979944706e-003 - 0.2229079008102417 - 1 - <_> - - - - <_>11 2 2 6 -1. - <_>12 2 1 3 2. - <_>11 5 1 3 2. - 0 - 1.5057219570735469e-005 - 0.4107285141944885 - 0.5747591257095337 - <_> - - <_> - - - - <_>7 17 3 3 -1. - <_>8 17 1 3 3. - 0 - -5.4136710241436958e-003 - 0.2065797001123428 - 1 - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 5.3679239936172962e-003 - 0.4926423132419586 - 0.7139484882354736 - <_> - - <_> - - - - <_>10 15 4 2 -1. - <_>12 15 2 1 2. - <_>10 16 2 1 2. - 0 - -3.1426660716533661e-003 - 0.6780086755752564 - 1 - <_> - - - - <_>13 13 4 3 -1. - <_>13 14 4 1 3. - 0 - 0.0109073901548982 - 0.5214930176734924 - 0.1143995970487595 - <_> - - <_> - - - - <_>3 13 4 3 -1. - <_>3 14 4 1 3. - 0 - 5.8436761610209942e-003 - 1 - 0.1937526017427445 - <_> - - - - <_>7 2 2 6 -1. - <_>7 2 1 3 2. - <_>8 5 1 3 2. - 0 - 9.0507230197545141e-005 - 0.3812577128410339 - 0.5514187812805176 - <_> - - <_> - - - - <_>2 1 16 3 -1. - <_>2 2 16 1 3. - 0 - -0.0163457896560431 - 0.2474023997783661 - 1 - <_> - - - - <_>10 15 4 2 -1. - <_>12 15 2 1 2. - <_>10 16 2 1 2. - 0 - 1.5987500082701445e-003 - 0.4817782938480377 - 0.5923079848289490 - <_> - - <_> - - - - <_>6 15 4 2 -1. - <_>6 15 2 1 2. - <_>8 16 2 1 2. - 0 - -4.0257978253066540e-003 - 0.7508208751678467 - 1 - <_> - - - - <_>3 0 13 3 -1. - <_>3 1 13 1 3. - 0 - -6.7750471644103527e-003 - 0.2879810929298401 - 0.5199695229530335 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - -3.2470689620822668e-003 - 0.3044910132884979 - 1 - <_> - - - - <_>6 7 9 2 -1. - <_>6 8 9 1 2. - 0 - 1.5409620245918632e-003 - 0.4063482880592346 - 0.5676562786102295 - <_> - - <_> - - - - <_>8 14 3 6 -1. - <_>9 14 1 6 3. - 0 - -0.0128581197932363 - 0.0967175588011742 - 1 - <_> - - - - <_>9 10 2 2 -1. - <_>9 11 2 1 2. - 0 - -1.4824670506641269e-004 - 0.4537833034992218 - 0.6115375161170960 - <_> - - <_> - - - - <_>9 7 2 5 -1. - <_>9 7 1 5 2. - 0 - -9.0210810303688049e-003 - 1 - 0.4807750880718231 - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0287950299680233 - 0.3403795063495636 - 0.5255529284477234 - <_> - - <_> - - - - <_>9 7 2 5 -1. - <_>10 7 1 5 2. - 0 - 9.0210810303688049e-003 - 1 - 0.7505835890769959 - <_> - - - - <_>5 6 10 3 -1. - <_>10 6 5 3 2. - 0 - 7.4121179059147835e-003 - 0.5455446839332581 - 0.3226068913936615 - <_> - - <_> - - - - <_>13 9 2 2 -1. - <_>13 9 1 2 2. - 0 - -3.7217529024928808e-003 - 0.2311848998069763 - 1 - <_> - - - - <_>4 3 12 11 -1. - <_>8 3 4 11 3. - 0 - 0.1986588984727860 - 0.5271047949790955 - 0.1469929963350296 - <_> - - <_> - - - - <_>7 1 2 7 -1. - <_>8 1 1 7 2. - 0 - 1.5208719560177997e-005 - 0.3678138852119446 - 1 - <_> - - - - <_>7 4 3 8 -1. - <_>8 4 1 8 3. - 0 - -3.9089918136596680e-003 - 0.7131929993629456 - 0.4993866980075836 - <_> - - <_> - - - - <_>13 9 2 2 -1. - <_>13 9 1 2 2. - 0 - 2.5106288958340883e-003 - 0.5312054157257080 - 1 - <_> - - - - <_>11 6 2 2 -1. - <_>12 6 1 1 2. - <_>11 7 1 1 2. - 0 - 2.3921660613268614e-004 - 0.4689378142356873 - 0.5714021921157837 - <_> - - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - 6.9443131797015667e-003 - 1 - 0.6948797702789307 - <_> - - - - <_>6 5 1 3 -1. - <_>6 6 1 1 3. - 0 - 1.2065629707649350e-003 - 0.4004504978656769 - 0.5874881744384766 - <_> - - <_> - - - - <_>13 9 2 2 -1. - <_>13 9 1 2 2. - 0 - 2.5106288958340883e-003 - 0.5329571962356567 - 1 - <_> - - - - <_>16 14 3 3 -1. - <_>16 15 3 1 3. - 0 - 1.7514040227979422e-003 - 0.5545849204063416 - 0.3449581861495972 - <_> - - <_> - - - - <_>5 9 2 2 -1. - <_>6 9 1 2 2. - 0 - -4.1978210210800171e-003 - 0.1217183023691177 - 1 - <_> - - - - <_>1 14 3 3 -1. - <_>1 15 3 1 3. - 0 - 1.3092850567772985e-003 - 0.5375049710273743 - 0.3415625095367432 - <_> - - <_> - - - - <_>13 1 1 6 -1. - <_>13 3 1 2 3. - 0 - 6.7396182566881180e-004 - 0.4195179045200348 - 1 - <_> - - - - <_>13 3 7 2 -1. - <_>13 4 7 1 2. - 0 - -0.0105307102203369 - 0.3460753858089447 - 0.5155860185623169 - <_> - - <_> - - - - <_>0 6 20 14 -1. - <_>0 13 20 7 2. - 0 - -0.4067229926586151 - 0.0580656789243221 - 1 - <_> - - - - <_>0 4 3 6 -1. - <_>0 6 3 2 3. - 0 - -0.0263145491480827 - 0.1473449021577835 - 0.5559378266334534 - <_> - - <_> - - - - <_>10 1 9 6 -1. - <_>10 3 9 2 3. - 0 - 2.2557149641215801e-003 - 1 - 0.5477715134620667 - <_> - - - - <_>8 0 12 5 -1. - <_>8 0 6 5 2. - 0 - 0.0121548604220152 - 0.4207791090011597 - 0.5621880888938904 - <_> - - <_> - - - - <_>0 0 18 5 -1. - <_>6 0 6 5 3. - 0 - -0.0184365399181843 - 0.6447147130966187 - 1 - <_> - - - - <_>1 1 9 6 -1. - <_>1 3 9 2 3. - 0 - 5.3676147945225239e-004 - 0.2765127122402191 - 0.4888595938682556 - <_> - - <_> - - - - <_>15 15 2 2 -1. - <_>15 16 2 1 2. - 0 - -2.6265541091561317e-003 - 1 - 0.5264691114425659 - <_> - - - - <_>13 16 3 4 -1. - <_>13 18 3 2 2. - 0 - -5.1119807176291943e-004 - 0.5785310268402100 - 0.4291102886199951 - <_> - - <_> - - - - <_>3 15 2 2 -1. - <_>3 16 2 1 2. - 0 - 4.1454841266386211e-004 - 1 - 0.3455410897731781 - <_> - - - - <_>4 16 3 4 -1. - <_>4 18 3 2 2. - 0 - -5.5028748465701938e-004 - 0.6026918888092041 - 0.4143893122673035 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - -1.0347720235586166e-003 - 0.6095293760299683 - 1 - <_> - - - - <_>9 13 5 3 -1. - <_>9 14 5 1 3. - 0 - -3.3966631162911654e-003 - 0.6108282208442688 - 0.4707720875740051 - <_> - - <_> - - - - <_>0 0 3 6 -1. - <_>0 2 3 2 3. - 0 - 3.1795909162610769e-003 - 1 - 0.3244366943836212 - <_> - - - - <_>4 1 6 3 -1. - <_>6 1 2 3 3. - 0 - -1.6528950072824955e-004 - 0.3830757141113281 - 0.5734326243400574 - <_> - - <_> - - - - <_>9 13 4 3 -1. - <_>9 14 4 1 3. - 0 - 8.3725210279226303e-003 - 1 - 0.6610919237136841 - <_> - - - - <_>8 15 5 3 -1. - <_>8 16 5 1 3. - 0 - -2.5799809955060482e-003 - 0.6139307022094727 - 0.4686149954795837 - <_> - - <_> - - - - <_>8 3 3 2 -1. - <_>9 3 1 2 3. - 0 - 9.0194388758391142e-004 - 1 - 0.3520022034645081 - <_> - - - - <_>1 8 18 2 -1. - <_>1 9 18 1 2. - 0 - 3.6952210939489305e-004 - 0.2578754127025604 - 0.5467242002487183 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - 9.9746137857437134e-004 - 0.4820146858692169 - 1 - <_> - - - - <_>8 13 6 3 -1. - <_>8 14 6 1 3. - 0 - -3.6688039544969797e-003 - 0.5710150003433228 - 0.4831911027431488 - <_> - - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - -8.9501030743122101e-004 - 0.6133679151535034 - 1 - <_> - - - - <_>4 13 12 4 -1. - <_>4 13 6 2 2. - <_>10 15 6 2 2. - 0 - 5.1904921419918537e-003 - 0.4928582906723023 - 0.2581309080123901 - <_> - - <_> - - - - <_>10 7 2 2 -1. - <_>10 7 1 2 2. - 0 - 4.2274440056644380e-004 - 0.4471124112606049 - 1 - <_> - - - - <_>13 4 2 8 -1. - <_>14 4 1 4 2. - <_>13 8 1 4 2. - 0 - 8.5176713764667511e-003 - 0.5161024928092957 - 0.3316533863544464 - <_> - - <_> - - - - <_>0 5 4 6 -1. - <_>0 7 4 2 3. - 0 - -0.0366236083209515 - 0.0926062166690826 - 1 - <_> - - - - <_>8 7 2 2 -1. - <_>9 7 1 2 2. - 0 - -4.1103712283074856e-003 - 0.8522114753723145 - 0.5137907862663269 - <_> - - <_> - - - - <_>13 0 3 7 -1. - <_>14 0 1 7 3. - 0 - -6.6017331555485725e-003 - 1 - 0.5459060072898865 - <_> - - - - <_>11 2 2 14 -1. - <_>11 2 1 14 2. - 0 - 0.0255786404013634 - 0.5219352841377258 - 0.1927185952663422 - <_> - - <_> - - - - <_>4 0 3 7 -1. - <_>5 0 1 7 3. - 0 - 0.0114474399015307 - 1 - 0.1916002035140991 - <_> - - - - <_>5 5 8 12 -1. - <_>5 5 4 6 2. - <_>9 11 4 6 2. - 0 - 7.2427501436322927e-004 - 0.5231571197509766 - 0.3535340130329132 - <_> - - <_> - - - - <_>11 4 6 3 -1. - <_>11 5 6 1 3. - 0 - 9.7127500921487808e-003 - 1 - 0.6464101076126099 - <_> - - - - <_>12 3 4 3 -1. - <_>12 4 4 1 3. - 0 - -0.0113375699147582 - 0.7383037805557251 - 0.4964743852615356 - <_> - - <_> - - - - <_>5 5 10 12 -1. - <_>5 5 5 6 2. - <_>10 11 5 6 2. - 0 - -8.1453882157802582e-003 - 0.3611705899238586 - 1 - <_> - - - - <_>3 6 12 3 -1. - <_>9 6 6 3 2. - 0 - -8.5570756345987320e-003 - 0.3421907126903534 - 0.5943511724472046 - <_> - - <_> - - - - <_>9 6 2 7 -1. - <_>9 6 1 7 2. - 0 - 2.2993308957666159e-003 - 0.4550104141235352 - 1 - <_> - - - - <_>9 5 2 4 -1. - <_>9 5 1 4 2. - 0 - 3.8430930580943823e-003 - 0.4716862142086029 - 0.6656190752983093 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>9 7 1 3 3. - 0 - -9.9116540513932705e-004 - 1 - 0.4592716991901398 - <_> - - - - <_>5 1 6 4 -1. - <_>7 1 2 4 3. - 0 - 0.0254964698106050 - 0.6563401222229004 - 0.1258835047483444 - <_> - - <_> - - - - <_>13 16 7 3 -1. - <_>13 17 7 1 3. - 0 - -0.0157483592629433 - 1 - 0.5239502191543579 - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -0.0180461201816797 - 0.8015851974487305 - 0.5007957816123962 - <_> - - <_> - - - - <_>0 16 7 3 -1. - <_>0 17 7 1 3. - 0 - 0.0103233903646469 - 1 - 0.2274820059537888 - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.6452240524813533e-003 - 0.4351946115493774 - 0.5867627859115601 - <_> - - <_> - - - - <_>12 9 8 10 -1. - <_>12 9 4 10 2. - 0 - 0.0158811490982771 - 0.4465051889419556 - 1 - <_> - - - - <_>8 10 12 5 -1. - <_>12 10 4 5 3. - 0 - 0.0105865197256207 - 0.4544458091259003 - 0.5707110762596130 - <_> - - <_> - - - - <_>0 9 8 10 -1. - <_>4 9 4 10 2. - 0 - -0.0215316899120808 - 0.6527643799781799 - 1 - <_> - - - - <_>0 10 12 5 -1. - <_>4 10 4 5 3. - 0 - 5.2480469457805157e-003 - 0.3444727957248688 - 0.5324636101722717 - 25.6093006134033200 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>2 3 6 2 -1. - <_>5 3 3 2 2. - 0 - 1.8219340126961470e-003 - 0.3108788132667542 - 1 - <_> - - - - <_>0 0 17 9 -1. - <_>0 3 17 3 3. - 0 - 8.1313941627740860e-003 - 0.3133237063884735 - 0.6645867228507996 - <_> - - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 1.7055979697033763e-003 - 0.2640131115913391 - 1 - <_> - - - - <_>10 4 6 4 -1. - <_>12 4 2 4 3. - 0 - -7.4483548814896494e-005 - 0.5647205114364624 - 0.3485372960567474 - <_> - - <_> - - - - <_>0 10 20 4 -1. - <_>0 12 20 2 2. - 0 - 3.8342390325851738e-004 - 1 - 0.3140654861927033 - <_> - - - - <_>4 3 6 5 -1. - <_>6 3 2 5 3. - 0 - 3.1868910882622004e-003 - 0.6489198803901672 - 0.3887729048728943 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1604432016611099 - 1 - 0.7216529846191406 - <_> - - - - <_>13 9 2 3 -1. - <_>13 9 1 3 2. - 0 - -6.7285560071468353e-003 - 0.1653137952089310 - 0.5139825940132141 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 7.2638481469766703e-006 - 0.3140619993209839 - 1 - <_> - - - - <_>3 17 4 2 -1. - <_>3 18 4 1 2. - 0 - 5.5551197146996856e-004 - 0.5993698835372925 - 0.3317398130893707 - <_> - - <_> - - - - <_>9 4 8 10 -1. - <_>9 9 8 5 2. - 0 - -0.0108223203569651 - 0.2652938067913055 - 1 - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -4.5834020711481571e-003 - 0.1849568933248520 - 0.5313957929611206 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>8 6 4 4 2. - 0 - -3.0205070506781340e-003 - 1 - 0.4040099978446960 - <_> - - - - <_>3 4 14 12 -1. - <_>3 4 7 6 2. - <_>10 10 7 6 2. - 0 - 0.0778646171092987 - 0.6158189773559570 - 0.1786486953496933 - <_> - - <_> - - - - <_>7 7 6 4 -1. - <_>9 7 2 4 3. - 0 - 0.0264943800866604 - 0.4511089920997620 - 1 - <_> - - - - <_>6 7 9 4 -1. - <_>6 9 9 2 2. - 0 - 0.0369121097028255 - 0.4528219997882843 - 0.5972282886505127 - <_> - - <_> - - - - <_>2 10 3 3 -1. - <_>2 11 3 1 3. - 0 - 5.7857790961861610e-003 - 1 - 0.2533892095088959 - <_> - - - - <_>4 6 2 9 -1. - <_>4 9 2 3 3. - 0 - 9.3849771656095982e-004 - 0.3410412073135376 - 0.5923643708229065 - <_> - - <_> - - - - <_>9 11 3 3 -1. - <_>9 12 3 1 3. - 0 - -0.0110031999647617 - 0.6958044171333313 - 1 - <_> - - - - <_>3 1 15 2 -1. - <_>3 2 15 1 2. - 0 - -1.1737640015780926e-003 - 0.3851084113121033 - 0.5408189296722412 - <_> - - <_> - - - - <_>9 8 2 3 -1. - <_>9 9 2 1 3. - 0 - -3.6596669815480709e-003 - 0.2009308934211731 - 1 - <_> - - - - <_>9 6 2 5 -1. - <_>10 6 1 5 2. - 0 - -2.4822750128805637e-003 - 0.6295393109321594 - 0.4395040869712830 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -4.4606071896851063e-003 - 0.2405299991369247 - 1 - <_> - - - - <_>4 10 12 10 -1. - <_>4 15 12 5 2. - 0 - -3.5969649907201529e-003 - 0.5450174212455750 - 0.3782357871532440 - <_> - - <_> - - - - <_>0 10 4 2 -1. - <_>0 11 4 1 2. - 0 - -3.6222559865564108e-003 - 0.3033896982669830 - 1 - <_> - - - - <_>5 15 9 2 -1. - <_>5 16 9 1 2. - 0 - 1.2059339787811041e-003 - 0.4633778929710388 - 0.6335952281951904 - <_> - - <_> - - - - <_>8 14 6 3 -1. - <_>8 15 6 1 3. - 0 - 4.3124938383698463e-003 - 1 - 0.6598826050758362 - <_> - - - - <_>8 16 4 3 -1. - <_>8 17 4 1 3. - 0 - -4.4961250387132168e-003 - 0.6621696949005127 - 0.4755246937274933 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>8 10 4 1 2. - 0 - -1.3860689941793680e-003 - 0.2801201045513153 - 1 - <_> - - - - <_>3 3 14 2 -1. - <_>3 4 14 1 2. - 0 - -5.1588460337370634e-004 - 0.3829489052295685 - 0.5623626708984375 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - 7.0330002927221358e-005 - 0.4536342918872833 - 1 - <_> - - - - <_>4 12 12 1 -1. - <_>8 12 4 1 3. - 0 - -2.0976549421902746e-004 - 0.5608139038085938 - 0.4265779852867127 - <_> - - <_> - - - - <_>0 2 1 2 -1. - <_>0 3 1 1 2. - 0 - 1.3642259873449802e-003 - 1 - 0.2637091875076294 - <_> - - - - <_>7 4 4 6 -1. - <_>9 4 2 6 2. - 0 - 1.5483660390600562e-003 - 0.4170750975608826 - 0.5932987928390503 - <_> - - <_> - - - - <_>0 2 20 14 -1. - <_>10 2 10 7 2. - <_>0 9 10 7 2. - 0 - 0.1917960941791534 - 0.5256764292716980 - 1 - <_> - - - - <_>14 6 1 3 -1. - <_>14 7 1 1 3. - 0 - -4.4776909053325653e-003 - 0.6632621884346008 - 0.4892588853836060 - <_> - - <_> - - - - <_>0 4 20 12 -1. - <_>0 4 10 6 2. - <_>10 10 10 6 2. - 0 - -0.1264917999505997 - 0.1499778926372528 - 1 - <_> - - - - <_>8 12 1 2 -1. - <_>8 13 1 1 2. - 0 - 6.5253327193204314e-005 - 0.4233320057392120 - 0.5756040215492249 - <_> - - <_> - - - - <_>9 18 3 2 -1. - <_>10 18 1 2 3. - 0 - 4.1856421157717705e-003 - 0.5288826823234558 - 1 - <_> - - - - <_>9 17 6 2 -1. - <_>11 17 2 2 3. - 0 - 2.7478230185806751e-004 - 0.4524017870426178 - 0.5604125261306763 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>5 7 2 1 3. - 0 - -2.2906810045242310e-003 - 0.5578274130821228 - 1 - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 1.6744500026106834e-003 - 0.3323057889938355 - 0.5558788180351257 - <_> - - <_> - - - - <_>14 15 3 2 -1. - <_>14 16 3 1 2. - 0 - 1.2349759927019477e-003 - 1 - 0.3653947114944458 - <_> - - - - <_>11 3 3 4 -1. - <_>12 3 1 4 3. - 0 - -8.7158754467964172e-003 - 0.1924533993005753 - 0.5313649773597717 - <_> - - <_> - - - - <_>3 15 3 2 -1. - <_>3 16 3 1 2. - 0 - 4.6613621525466442e-003 - 1 - 0.2027730941772461 - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -8.5815992206335068e-003 - 0.7636060118675232 - 0.5140826106071472 - <_> - - <_> - - - - <_>9 13 3 7 -1. - <_>10 13 1 7 3. - 0 - 0.0143521204590797 - 0.5252975821495056 - 1 - <_> - - - - <_>12 12 5 3 -1. - <_>12 13 5 1 3. - 0 - -7.7948719263076782e-003 - 0.2632937133312225 - 0.5328689217567444 - <_> - - <_> - - - - <_>8 18 3 2 -1. - <_>9 18 1 2 3. - 0 - -3.4155680332332850e-003 - 0.2416087985038757 - 1 - <_> - - - - <_>4 7 12 4 -1. - <_>4 7 6 2 2. - <_>10 9 6 2 2. - 0 - -4.2639090679585934e-003 - 0.3936544954776764 - 0.5478742122650147 - <_> - - <_> - - - - <_>6 19 14 1 -1. - <_>6 19 7 1 2. - 0 - 8.7177697569131851e-003 - 0.4788199067115784 - 1 - <_> - - - - <_>16 14 3 2 -1. - <_>16 15 3 1 2. - 0 - -3.2232629600912333e-003 - 0.3631612062454224 - 0.5288316011428833 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - -0.0421883687376976 - 0.6931139230728149 - 1 - <_> - - - - <_>1 0 4 10 -1. - <_>1 0 2 5 2. - <_>3 5 2 5 2. - 0 - 0.0198757499456406 - 0.4520100057125092 - 0.6855055093765259 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 5 5 2 3. - 0 - -0.0311345104128122 - 1 - 0.5300424098968506 - <_> - - - - <_>9 5 2 15 -1. - <_>9 10 2 5 3. - 0 - 5.7032387703657150e-003 - 0.5606892108917236 - 0.4230622947216034 - <_> - - <_> - - - - <_>0 3 5 6 -1. - <_>0 5 5 2 3. - 0 - 5.2733682096004486e-003 - 1 - 0.3247228860855103 - <_> - - - - <_>6 0 3 2 -1. - <_>7 0 1 2 3. - 0 - -3.1231069006025791e-003 - 0.1985695958137512 - 0.5349872708320618 - <_> - - <_> - - - - <_>12 8 8 2 -1. - <_>16 8 4 1 2. - <_>12 9 4 1 2. - 0 - 4.6453849063254893e-004 - 0.4207508862018585 - 1 - <_> - - - - <_>5 8 12 1 -1. - <_>9 8 4 1 3. - 0 - 0.0303558893501759 - 0.5153458714485169 - 0.3118101060390472 - <_> - - <_> - - - - <_>3 13 3 3 -1. - <_>3 14 3 1 3. - 0 - -4.2992769740521908e-003 - 0.3274506926536560 - 1 - <_> - - - - <_>5 13 3 2 -1. - <_>5 14 3 1 2. - 0 - 1.9509199773892760e-004 - 0.5953078269958496 - 0.4225521087646484 - <_> - - <_> - - - - <_>9 15 3 3 -1. - <_>9 16 3 1 3. - 0 - -7.7784480527043343e-003 - 0.7211179733276367 - 1 - <_> - - - - <_>7 15 7 3 -1. - <_>7 16 7 1 3. - 0 - 0.0169175993651152 - 0.4936591982841492 - 0.7030277252197266 - <_> - - <_> - - - - <_>3 14 11 6 -1. - <_>3 16 11 2 3. - 0 - -0.0519485697150230 - 0.1425534933805466 - 1 - <_> - - - - <_>0 19 14 1 -1. - <_>7 19 7 1 2. - 0 - -5.4751220159232616e-003 - 0.6059331893920898 - 0.4393995106220245 - <_> - - <_> - - - - <_>9 17 6 2 -1. - <_>11 17 2 2 3. - 0 - 1.5210839592327829e-005 - 0.4488849937915802 - 1 - <_> - - - - <_>12 11 6 2 -1. - <_>14 11 2 2 3. - 0 - 1.0235579684376717e-003 - 0.4256550073623657 - 0.5795438289642334 - <_> - - <_> - - - - <_>5 17 6 2 -1. - <_>7 17 2 2 3. - 0 - -1.0427719826111570e-004 - 0.4246039986610413 - 1 - <_> - - - - <_>0 1 9 10 -1. - <_>3 1 3 10 3. - 0 - 8.7853781878948212e-003 - 0.4958009123802185 - 0.6759430766105652 - <_> - - <_> - - - - <_>10 1 3 3 -1. - <_>11 1 1 3 3. - 0 - 3.4012699034065008e-003 - 0.5423480868339539 - 1 - <_> - - - - <_>9 5 6 4 -1. - <_>9 5 3 4 2. - 0 - 5.8582378551363945e-004 - 0.3636542856693268 - 0.5464348793029785 - <_> - - <_> - - - - <_>7 1 3 3 -1. - <_>8 1 1 3 3. - 0 - -2.2973360028117895e-003 - 0.2548818886280060 - 1 - <_> - - - - <_>0 4 4 11 -1. - <_>2 4 2 11 2. - 0 - -0.0143301896750927 - 0.6587656736373901 - 0.4532802104949951 - <_> - - <_> - - - - <_>9 5 6 4 -1. - <_>9 5 3 4 2. - 0 - 9.8565965890884399e-004 - 0.3822771012783051 - 1 - <_> - - - - <_>6 0 8 10 -1. - <_>10 0 4 5 2. - <_>6 5 4 5 2. - 0 - -0.0466407611966133 - 0.3077321946620941 - 0.5244132876396179 - <_> - - <_> - - - - <_>6 6 5 14 -1. - <_>6 13 5 7 2. - 0 - -0.1190730035305023 - 0.1033862978219986 - 1 - <_> - - - - <_>8 5 4 14 -1. - <_>8 12 4 7 2. - 0 - 0.0193332806229591 - 0.5554745197296143 - 0.3221316933631897 - <_> - - <_> - - - - <_>7 7 6 5 -1. - <_>9 7 2 5 3. - 0 - 0.0314278490841389 - 0.4682379066944122 - 1 - <_> - - - - <_>9 3 3 9 -1. - <_>9 6 3 3 3. - 0 - 2.0082130504306406e-004 - 0.5373070240020752 - 0.3800666928291321 - <_> - - <_> - - - - <_>8 1 3 3 -1. - <_>9 1 1 3 3. - 0 - -6.2584900297224522e-003 - 0.1799207031726837 - 1 - <_> - - - - <_>9 6 2 4 -1. - <_>10 6 1 4 2. - 0 - 8.2861045375466347e-003 - 0.5095068812370300 - 0.7544605135917664 - <_> - - <_> - - - - <_>10 8 6 9 -1. - <_>10 8 3 9 2. - 0 - 2.0529709290713072e-003 - 0.5628644824028015 - 1 - <_> - - - - <_>16 4 3 8 -1. - <_>17 4 1 8 3. - 0 - 3.2524869311600924e-003 - 0.4801689088344574 - 0.5802102088928223 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - -0.0318849012255669 - 0.1742745041847229 - 1 - <_> - - - - <_>5 5 6 4 -1. - <_>8 5 3 4 2. - 0 - 1.8379340181127191e-003 - 0.3466596901416779 - 0.5107154846191406 - <_> - - <_> - - - - <_>9 8 4 2 -1. - <_>9 9 4 1 2. - 0 - -4.8512680223211646e-004 - 1 - 0.5326086282730103 - <_> - - - - <_>11 7 2 2 -1. - <_>11 7 1 2 2. - 0 - -2.5407879147678614e-003 - 0.6342775225639343 - 0.4992693066596985 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 12 2 4 2. - <_>10 16 2 4 2. - 0 - -5.1559060811996460e-003 - 0.3433429002761841 - 1 - <_> - - - - <_>0 1 4 9 -1. - <_>0 4 4 3 3. - 0 - -0.0449687503278255 - 0.1868136972188950 - 0.5215464830398560 - <_> - - <_> - - - - <_>9 10 3 3 -1. - <_>9 11 3 1 3. - 0 - 5.8984281495213509e-003 - 1 - 0.6229305267333984 - <_> - - - - <_>8 11 4 2 -1. - <_>8 12 4 1 2. - 0 - 3.2763120252639055e-003 - 0.4935772120952606 - 0.7217944860458374 - <_> - - <_> - - - - <_>7 8 4 2 -1. - <_>7 9 4 1 2. - 0 - -1.0161520185647532e-004 - 1 - 0.5007976293563843 - <_> - - - - <_>7 8 6 1 -1. - <_>9 8 2 1 3. - 0 - -1.6290300118271261e-004 - 0.6024149060249329 - 0.2329508066177368 - <_> - - <_> - - - - <_>16 0 4 9 -1. - <_>16 0 2 9 2. - 0 - 9.0541364625096321e-003 - 0.4510416984558106 - 1 - <_> - - - - <_>16 0 3 6 -1. - <_>16 3 3 3 2. - 0 - 0.0353984907269478 - 0.5141996741294861 - 0.2860291898250580 - <_> - - <_> - - - - <_>0 0 4 9 -1. - <_>2 0 2 9 2. - 0 - 5.6469351984560490e-003 - 0.4704925119876862 - 1 - <_> - - - - <_>1 0 3 6 -1. - <_>1 3 3 3 2. - 0 - -2.4807190056890249e-003 - 0.4179851114749908 - 0.6726647019386292 - <_> - - <_> - - - - <_>9 7 6 9 -1. - <_>11 7 2 9 3. - 0 - -4.1088787838816643e-003 - 0.5809801816940308 - 1 - <_> - - - - <_>10 6 3 6 -1. - <_>11 6 1 6 3. - 0 - -2.0714469719678164e-003 - 0.6074783802032471 - 0.4524059891700745 - <_> - - <_> - - - - <_>1 2 18 2 -1. - <_>1 2 9 1 2. - <_>10 3 9 1 2. - 0 - -2.8939060866832733e-003 - 0.3383519947528839 - 1 - <_> - - - - <_>5 8 6 8 -1. - <_>7 8 2 8 3. - 0 - 1.3467279495671391e-003 - 0.5696910023689270 - 0.3970845043659210 - <_> - - <_> - - - - <_>9 0 6 16 -1. - <_>11 0 2 16 3. - 0 - -0.0907791331410408 - 0.1502701938152313 - 1 - <_> - - - - <_>14 1 6 18 -1. - <_>17 1 3 9 2. - <_>14 10 3 9 2. - 0 - -0.0831717625260353 - 0.7573670744895935 - 0.4936437010765076 - <_> - - <_> - - - - <_>2 9 2 3 -1. - <_>2 10 2 1 3. - 0 - -1.4107000315561891e-003 - 0.3390932977199554 - 1 - <_> - - - - <_>0 1 6 18 -1. - <_>0 1 3 9 2. - <_>3 10 3 9 2. - 0 - 0.0556687600910664 - 0.5025097131729126 - 0.7422083020210266 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - 0.0577015392482281 - 0.5197371840476990 - 1 - <_> - - - - <_>2 1 18 18 -1. - <_>2 10 18 9 2. - 0 - -0.4250329136848450 - 0.0973469167947769 - 0.5185739994049072 - <_> - - <_> - - - - <_>6 3 3 1 -1. - <_>7 3 1 1 3. - 0 - -4.4380719191394746e-004 - 0.3649350106716156 - 1 - <_> - - - - <_>4 12 2 2 -1. - <_>4 13 2 1 2. - 0 - 1.7924769781529903e-004 - 0.5619279146194458 - 0.3760297000408173 - <_> - - <_> - - - - <_>8 13 5 3 -1. - <_>8 14 5 1 3. - 0 - 5.0382469780743122e-003 - 1 - 0.6328445076942444 - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 0.0151911703869700 - 0.4936082065105438 - 0.7426524758338928 - <_> - - <_> - - - - <_>3 12 5 3 -1. - <_>3 13 5 1 3. - 0 - -0.0123003898188472 - 0.1389349997043610 - 1 - <_> - - - - <_>6 3 3 4 -1. - <_>7 3 1 4 3. - 0 - 1.5168030513450503e-003 - 0.5091962218284607 - 0.3482648134231567 - <_> - - <_> - - - - <_>11 10 2 2 -1. - <_>12 10 1 1 2. - <_>11 11 1 1 2. - 0 - 9.5754547510296106e-004 - 1 - 0.6036316752433777 - <_> - - - - <_>5 8 12 1 -1. - <_>9 8 4 1 3. - 0 - -0.0189622007310390 - 0.2319173067808151 - 0.5116652846336365 - <_> - - <_> - - - - <_>8 4 4 8 -1. - <_>10 4 2 8 2. - 0 - -0.0222722608596087 - 0.6555022001266480 - 1 - <_> - - - - <_>6 6 8 5 -1. - <_>10 6 4 5 2. - 0 - -0.0251452308148146 - 0.1326071023941040 - 0.4674034118652344 - <_> - - <_> - - - - <_>10 4 6 4 -1. - <_>12 4 2 4 3. - 0 - 0.0195339005440474 - 0.5182027220726013 - 1 - <_> - - - - <_>12 7 2 2 -1. - <_>13 7 1 1 2. - <_>12 8 1 1 2. - 0 - -1.1231349781155586e-003 - 0.6318243145942688 - 0.4825519025325775 - <_> - - <_> - - - - <_>3 5 10 8 -1. - <_>3 9 10 4 2. - 0 - -1.4861139934509993e-003 - 0.2918671071529388 - 1 - <_> - - - - <_>7 1 2 12 -1. - <_>7 7 2 6 2. - 0 - 3.5002888762392104e-004 - 0.5621371269226074 - 0.4249213039875031 - <_> - - <_> - - - - <_>12 7 2 2 -1. - <_>13 7 1 1 2. - <_>12 8 1 1 2. - 0 - -1.1231349781155586e-003 - 1 - 0.4813745021820068 - <_> - - - - <_>11 13 1 6 -1. - <_>11 16 1 3 2. - 0 - 0.0104097397997975 - 0.5184006094932556 - 0.2051223069429398 - <_> - - <_> - - - - <_>5 1 6 15 -1. - <_>7 1 2 15 3. - 0 - -0.0878325626254082 - 0.1179921999573708 - 1 - <_> - - - - <_>6 7 2 2 -1. - <_>6 7 1 1 2. - <_>7 8 1 1 2. - 0 - 1.6584879485890269e-003 - 0.4987811148166657 - 0.6973755955696106 - <_> - - <_> - - - - <_>17 5 2 2 -1. - <_>17 6 2 1 2. - 0 - -2.3008750285953283e-003 - 1 - 0.5339831113815308 - <_> - - - - <_>10 3 4 10 -1. - <_>12 3 2 5 2. - <_>10 8 2 5 2. - 0 - 0.0330261699855328 - 0.5033289194107056 - 0.6851906776428223 - <_> - - <_> - - - - <_>1 5 2 2 -1. - <_>1 6 2 1 2. - 0 - -1.3585069682449102e-003 - 0.3002822101116180 - 1 - <_> - - - - <_>7 10 2 2 -1. - <_>7 10 1 1 2. - <_>8 11 1 1 2. - 0 - 7.8067491995170712e-004 - 0.4593083858489990 - 0.6440045237541199 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>10 12 7 2 2. - <_>3 14 7 2 2. - 0 - -0.0180257596075535 - 1 - 0.5311291217803955 - <_> - - - - <_>9 15 3 2 -1. - <_>9 16 3 1 2. - 0 - 1.2354910140857100e-003 - 0.4729106128215790 - 0.5721461176872253 - <_> - - <_> - - - - <_>1 13 3 3 -1. - <_>1 14 3 1 3. - 0 - -9.2583027435466647e-004 - 0.3662332892417908 - 1 - <_> - - - - <_>0 3 1 2 -1. - <_>0 4 1 1 2. - 0 - 8.0123997759073973e-004 - 0.5361989736557007 - 0.3008632957935333 - 32.6471290588378910 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>7 7 6 1 -1. - <_>9 7 2 1 3. - 0 - 2.4914839304983616e-003 - 0.3422389030456543 - 1 - <_> - - - - <_>0 4 16 6 -1. - <_>0 6 16 2 3. - 0 - -0.0504885986447334 - 0.7703458070755005 - 0.4516390860080719 - <_> - - <_> - - - - <_>9 3 2 14 -1. - <_>9 10 2 7 2. - 0 - -7.7838351717218757e-004 - 1 - 0.3256342113018036 - <_> - - - - <_>12 0 4 3 -1. - <_>12 0 2 3 2. - 0 - 2.3572890495415777e-004 - 0.3406555950641632 - 0.5897027254104614 - <_> - - <_> - - - - <_>4 18 12 2 -1. - <_>8 18 4 2 3. - 0 - 4.5575071126222610e-003 - 0.4306578934192658 - 1 - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - 8.1241987645626068e-003 - 0.7149587273597717 - 0.4345684945583344 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -4.4612158671952784e-004 - 0.3295974135398865 - 1 - <_> - - - - <_>14 1 2 8 -1. - <_>15 1 1 4 2. - <_>14 5 1 4 2. - 0 - -2.8972938889637589e-004 - 0.5845620036125183 - 0.3526687920093536 - <_> - - <_> - - - - <_>3 4 9 1 -1. - <_>6 4 3 1 3. - 0 - 7.1604831646254752e-006 - 0.4081954956054688 - 1 - <_> - - - - <_>3 3 4 2 -1. - <_>3 4 4 1 2. - 0 - -3.8497708737850189e-004 - 0.4203113019466400 - 0.6634126901626587 - <_> - - <_> - - - - <_>11 15 2 4 -1. - <_>11 17 2 2 2. - 0 - 1.9489860278554261e-004 - 0.3942466974258423 - 1 - <_> - - - - <_>14 13 2 6 -1. - <_>14 15 2 2 3. - 0 - -0.0170838497579098 - 0.2294072061777115 - 0.5238960981369019 - <_> - - <_> - - - - <_>6 6 1 6 -1. - <_>6 9 1 3 2. - 0 - 8.3513697609305382e-004 - 0.3026031851768494 - 1 - <_> - - - - <_>6 10 8 8 -1. - <_>6 14 8 4 2. - 0 - 7.5499608647078276e-004 - 0.6032196283340454 - 0.3412458896636963 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 8.0216713249683380e-003 - 1 - 0.7306240797042847 - <_> - - - - <_>10 11 4 8 -1. - <_>10 15 4 4 2. - 0 - -0.0389305092394352 - 0.3599325120449066 - 0.5234380960464478 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -7.0348767621908337e-005 - 1 - 0.3493758141994476 - <_> - - - - <_>5 4 6 10 -1. - <_>8 4 3 10 2. - 0 - -8.5350573062896729e-003 - 0.2746109068393707 - 0.5626586079597473 - <_> - - <_> - - - - <_>14 2 6 3 -1. - <_>14 3 6 1 3. - 0 - 0.0108544500544667 - 0.5282226204872131 - 1 - <_> - - - - <_>9 12 3 2 -1. - <_>9 13 3 1 2. - 0 - 4.5329501153901219e-004 - 0.4522049129009247 - 0.6054301857948303 - <_> - - <_> - - - - <_>8 1 4 6 -1. - <_>8 3 4 2 3. - 0 - 1.8117150466423482e-004 - 0.3306862115859985 - 1 - <_> - - - - <_>3 5 13 8 -1. - <_>3 9 13 4 2. - 0 - 4.6641560038551688e-004 - 0.1455000042915344 - 0.5384927988052368 - <_> - - <_> - - - - <_>12 5 5 3 -1. - <_>12 6 5 1 3. - 0 - -8.4854792803525925e-003 - 1 - 0.4814155995845795 - <_> - - - - <_>5 14 15 6 -1. - <_>5 16 15 2 3. - 0 - -0.0189343094825745 - 0.3563741147518158 - 0.5405145287513733 - <_> - - <_> - - - - <_>3 5 5 3 -1. - <_>3 6 5 1 3. - 0 - 4.9814549274742603e-003 - 1 - 0.6957743167877197 - <_> - - - - <_>9 14 2 6 -1. - <_>9 14 1 3 2. - <_>10 17 1 3 2. - 0 - 3.4286780282855034e-003 - 0.5050892829895020 - 0.2316994965076447 - <_> - - <_> - - - - <_>9 12 3 2 -1. - <_>9 13 3 1 2. - 0 - 4.4203791185282171e-004 - 1 - 0.6018581986427307 - <_> - - - - <_>9 13 3 2 -1. - <_>9 14 3 1 2. - 0 - 2.3822550429031253e-004 - 0.4755082130432129 - 0.5585237741470337 - <_> - - <_> - - - - <_>0 2 6 3 -1. - <_>0 3 6 1 3. - 0 - -6.4261639490723610e-003 - 0.2282465994358063 - 1 - <_> - - - - <_>0 1 9 11 -1. - <_>3 1 3 11 3. - 0 - 9.9637769162654877e-003 - 0.4040588140487671 - 0.5650169849395752 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>10 13 2 3 2. - <_>8 16 2 3 2. - 0 - 0.0136540504172444 - 0.5267739295959473 - 1 - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -9.9892877042293549e-003 - 0.6794049739837647 - 0.4797033965587616 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>3 12 7 2 2. - <_>10 14 7 2 2. - 0 - 0.0365586318075657 - 1 - 0.0884257331490517 - <_> - - - - <_>7 14 1 4 -1. - <_>7 16 1 2 2. - 0 - 4.8999379941960797e-005 - 0.4020788073539734 - 0.5457332134246826 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>10 13 2 3 2. - <_>8 16 2 3 2. - 0 - 0.0136540504172444 - 0.5267612934112549 - 1 - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - 1.8802779959514737e-003 - 0.4806052148342133 - 0.6394364833831787 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>8 13 2 3 2. - <_>10 16 2 3 2. - 0 - -0.0136540504172444 - 0.1724810004234314 - 1 - <_> - - - - <_>9 14 1 3 -1. - <_>9 15 1 1 3. - 0 - 1.2778700329363346e-003 - 0.4479824006557465 - 0.6310008764266968 - <_> - - <_> - - - - <_>10 15 2 3 -1. - <_>10 16 2 1 3. - 0 - 9.8843395244330168e-004 - 1 - 0.5948169231414795 - <_> - - - - <_>11 16 1 2 -1. - <_>11 17 1 1 2. - 0 - 1.4511500012304168e-005 - 0.4854174852371216 - 0.5309361219406128 - <_> - - <_> - - - - <_>9 0 2 2 -1. - <_>9 1 2 1 2. - 0 - -2.2775429533794522e-004 - 0.3183631896972656 - 1 - <_> - - - - <_>0 1 5 8 -1. - <_>0 5 5 4 2. - 0 - -0.0147537402808666 - 0.3084976077079773 - 0.5352026224136353 - <_> - - <_> - - - - <_>10 14 2 3 -1. - <_>10 15 2 1 3. - 0 - -3.4148250706493855e-003 - 0.6115326881408691 - 1 - <_> - - - - <_>10 13 2 3 -1. - <_>10 14 2 1 3. - 0 - 7.5806681998074055e-003 - 0.4951646029949188 - 0.7061331272125244 - <_> - - <_> - - - - <_>0 3 16 6 -1. - <_>0 6 16 3 2. - 0 - -5.7734688743948936e-003 - 1 - 0.3754220902919769 - <_> - - - - <_>4 1 2 2 -1. - <_>5 1 1 2 2. - 0 - 7.4033669079653919e-005 - 0.4115517139434815 - 0.5889444947242737 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -8.2278084009885788e-003 - 0.0956105664372444 - 1 - <_> - - - - <_>10 8 2 12 -1. - <_>10 12 2 4 3. - 0 - 5.3380909375846386e-003 - 0.5300508737564087 - 0.3961898088455200 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - -2.7049109339714050e-003 - 0.6481869220733643 - 1 - <_> - - - - <_>5 0 6 8 -1. - <_>7 0 2 8 3. - 0 - 7.7341338619589806e-003 - 0.5110440254211426 - 0.3121519088745117 - <_> - - <_> - - - - <_>9 7 3 6 -1. - <_>10 7 1 6 3. - 0 - 0.0108866095542908 - 0.4801428914070129 - 1 - <_> - - - - <_>8 12 10 8 -1. - <_>8 16 10 4 2. - 0 - 0.0110386600717902 - 0.5429710149765015 - 0.4162363111972809 - <_> - - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - -0.0100541999563575 - 0.7329335212707520 - 1 - <_> - - - - <_>4 7 12 2 -1. - <_>10 7 6 2 2. - 0 - 7.7072880230844021e-003 - 0.5356872081756592 - 0.3455547094345093 - <_> - - <_> - - - - <_>8 6 8 3 -1. - <_>8 6 4 3 2. - 0 - -5.8278098003938794e-004 - 0.3655022084712982 - 1 - <_> - - - - <_>16 15 3 3 -1. - <_>16 16 3 1 3. - 0 - -2.5739220436662436e-003 - 0.3776760101318359 - 0.5391774773597717 - <_> - - <_> - - - - <_>4 6 12 3 -1. - <_>10 6 6 3 2. - 0 - -7.0167761296033859e-003 - 0.4039304852485657 - 1 - <_> - - - - <_>7 8 3 5 -1. - <_>8 8 1 5 3. - 0 - -1.7727289814502001e-003 - 0.6950443983078003 - 0.4981116950511932 - <_> - - <_> - - - - <_>0 10 20 2 -1. - <_>10 10 10 1 2. - <_>0 11 10 1 2. - 0 - -0.0163182895630598 - 1 - 0.5296732783317566 - <_> - - - - <_>11 16 9 4 -1. - <_>14 16 3 4 3. - 0 - -0.0116630000993609 - 0.5842639803886414 - 0.4789502918720245 - <_> - - <_> - - - - <_>0 5 3 4 -1. - <_>1 5 1 4 3. - 0 - 2.5881489273160696e-003 - 1 - 0.6092178821563721 - <_> - - - - <_>8 15 4 2 -1. - <_>8 15 2 1 2. - <_>10 16 2 1 2. - 0 - -3.7328999023884535e-003 - 0.6721742749214172 - 0.4066894054412842 - <_> - - <_> - - - - <_>1 8 19 3 -1. - <_>1 9 19 1 3. - 0 - -1.4355930034071207e-003 - 0.3585087954998016 - 1 - <_> - - - - <_>15 16 3 3 -1. - <_>15 17 3 1 3. - 0 - 1.8340899841859937e-003 - 0.5371158123016357 - 0.4033507108688355 - <_> - - <_> - - - - <_>0 4 20 10 -1. - <_>0 4 10 5 2. - <_>10 9 10 5 2. - 0 - 0.1228028982877731 - 1 - 0.1547572016716003 - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - 0.0502287000417709 - 0.5433843731880188 - 0.0842926725745201 - <_> - - <_> - - - - <_>8 6 6 6 -1. - <_>10 6 2 6 3. - 0 - -0.0214370004832745 - 1 - 0.4860053956508637 - <_> - - - - <_>16 4 4 6 -1. - <_>16 6 4 2 3. - 0 - -0.0310096200555563 - 0.1833010017871857 - 0.5207554101943970 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -0.0129737202078104 - 0.7048240900039673 - 1 - <_> - - - - <_>7 13 4 3 -1. - <_>7 14 4 1 3. - 0 - 1.5818020328879356e-003 - 0.4170587062835693 - 0.5865163803100586 - <_> - - <_> - - - - <_>13 13 6 2 -1. - <_>13 14 6 1 2. - 0 - -9.7806248813867569e-003 - 1 - 0.5307918190956116 - <_> - - - - <_>14 12 2 3 -1. - <_>14 13 2 1 3. - 0 - 1.1735740117728710e-003 - 0.5522453188896179 - 0.3507165014743805 - <_> - - <_> - - - - <_>1 13 6 2 -1. - <_>1 14 6 1 2. - 0 - 1.4651629608124495e-003 - 1 - 0.3042651116847992 - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - 2.3532148916274309e-003 - 0.5339323282241821 - 0.2806236147880554 - <_> - - <_> - - - - <_>17 4 3 5 -1. - <_>18 4 1 5 3. - 0 - -6.1809681355953217e-003 - 0.6410133242607117 - 1 - <_> - - - - <_>5 5 14 8 -1. - <_>12 5 7 4 2. - <_>5 9 7 4 2. - 0 - 6.5688649192452431e-004 - 0.5620871186256409 - 0.4390318989753723 - <_> - - <_> - - - - <_>6 8 6 5 -1. - <_>8 8 2 5 3. - 0 - 0.0262280106544495 - 1 - 0.6445556879043579 - <_> - - - - <_>0 4 4 6 -1. - <_>0 6 4 2 3. - 0 - -0.0179581101983786 - 0.2002713978290558 - 0.4624665081501007 - <_> - - <_> - - - - <_>9 1 3 6 -1. - <_>10 1 1 6 3. - 0 - -7.6468721963465214e-003 - 1 - 0.5263200998306274 - <_> - - - - <_>10 4 6 3 -1. - <_>10 5 6 1 3. - 0 - -2.7482809964567423e-003 - 0.5873981118202210 - 0.4836600124835968 - <_> - - <_> - - - - <_>8 1 3 6 -1. - <_>9 1 1 6 3. - 0 - 0.0138518502935767 - 1 - 0.1566130965948105 - <_> - - - - <_>4 4 6 3 -1. - <_>4 5 6 1 3. - 0 - 2.6369190309196711e-003 - 0.4270178973674774 - 0.5806660056114197 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -3.1513599678874016e-003 - 0.6215866208076477 - 1 - <_> - - - - <_>12 11 4 2 -1. - <_>12 12 4 1 2. - 0 - -1.4788460248382762e-005 - 0.5576642751693726 - 0.4122002124786377 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>0 2 10 3 2. - <_>10 5 10 3 2. - 0 - -0.0736769884824753 - 0.1536709964275360 - 1 - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -3.0912780202925205e-003 - 0.6344268918037415 - 0.4507412016391754 - <_> - - <_> - - - - <_>2 10 16 4 -1. - <_>10 10 8 2 2. - <_>2 12 8 2 2. - 0 - 7.9240966588258743e-003 - 0.5457975268363953 - 1 - <_> - - - - <_>3 10 16 6 -1. - <_>11 10 8 3 2. - <_>3 13 8 3 2. - 0 - 8.5778040811419487e-003 - 0.5401657223701477 - 0.3890799880027771 - <_> - - <_> - - - - <_>1 10 16 6 -1. - <_>1 10 8 3 2. - <_>9 13 8 3 2. - 0 - 5.5403169244527817e-003 - 1 - 0.3555611073970795 - <_> - - - - <_>4 7 2 4 -1. - <_>5 7 1 4 2. - 0 - -1.1886510037584230e-004 - 0.5836750268936157 - 0.4274316132068634 - <_> - - <_> - - - - <_>11 16 9 4 -1. - <_>14 16 3 4 3. - 0 - -0.0184083692729473 - 0.5860440135002136 - 1 - <_> - - - - <_>3 16 14 4 -1. - <_>10 16 7 2 2. - <_>3 18 7 2 2. - 0 - -2.3490579333156347e-003 - 0.4498957991600037 - 0.5498198866844177 - <_> - - <_> - - - - <_>0 16 9 4 -1. - <_>3 16 3 4 3. - 0 - -7.6157399453222752e-003 - 1 - 0.4100992977619171 - <_> - - - - <_>1 14 6 6 -1. - <_>1 14 3 3 2. - <_>4 17 3 3 2. - 0 - -3.3190969843417406e-003 - 0.6701378822326660 - 0.4353001117706299 - <_> - - <_> - - - - <_>9 0 2 1 -1. - <_>9 0 1 1 2. - 0 - -9.4642979092895985e-004 - 1 - 0.5391176939010620 - <_> - - - - <_>6 7 8 10 -1. - <_>10 7 4 5 2. - <_>6 12 4 5 2. - 0 - 8.7858550250530243e-003 - 0.5504050254821777 - 0.3990935087203980 - <_> - - <_> - - - - <_>2 15 1 2 -1. - <_>2 16 1 1 2. - 0 - 1.6395459533669055e-004 - 1 - 0.3592933118343353 - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - -2.3508940357714891e-003 - 0.4034172892570496 - 0.5806077122688294 - <_> - - <_> - - - - <_>7 8 6 2 -1. - <_>7 9 6 1 2. - 0 - 7.5449963333085179e-005 - 1 - 0.5412384867668152 - <_> - - - - <_>9 2 2 15 -1. - <_>9 7 2 5 3. - 0 - 0.0270184893161058 - 0.4944922924041748 - 0.5589436292648315 - <_> - - <_> - - - - <_>5 6 2 2 -1. - <_>5 7 2 1 2. - 0 - 8.4561208495870233e-004 - 1 - 0.5809218287467957 - <_> - - - - <_>6 6 8 3 -1. - <_>6 7 8 1 3. - 0 - -1.1687109945341945e-003 - 0.4746957123279572 - 0.2845895886421204 - <_> - - <_> - - - - <_>12 13 5 6 -1. - <_>12 15 5 2 3. - 0 - 0.0228975005447865 - 1 - 0.2414411008358002 - <_> - - - - <_>0 0 20 18 -1. - <_>0 9 20 9 2. - 0 - 0.7087926268577576 - 0.5195764899253845 - 0.1030092015862465 - <_> - - <_> - - - - <_>5 1 6 6 -1. - <_>7 1 2 6 3. - 0 - 0.0374838300049305 - 1 - 0.1814638972282410 - <_> - - - - <_>5 1 4 9 -1. - <_>7 1 2 9 2. - 0 - 1.2827500468119979e-003 - 0.4246071875095367 - 0.5707973241806030 - <_> - - <_> - - - - <_>1 19 18 1 -1. - <_>7 19 6 1 3. - 0 - -5.1718312315642834e-003 - 0.6143323183059692 - 1 - <_> - - - - <_>14 16 5 2 -1. - <_>14 17 5 1 2. - 0 - 2.7545939665287733e-003 - 0.5205671191215515 - 0.4220441877841950 - <_> - - <_> - - - - <_>0 5 15 10 -1. - <_>0 10 15 5 2. - 0 - -3.6072919610887766e-003 - 0.3182592093944550 - 1 - <_> - - - - <_>7 15 4 2 -1. - <_>7 15 2 1 2. - <_>9 16 2 1 2. - 0 - -2.5258748792111874e-004 - 0.5710468292236328 - 0.4226093888282776 - <_> - - <_> - - - - <_>14 11 2 2 -1. - <_>14 12 2 1 2. - 0 - -7.0514748804271221e-003 - 1 - 0.5162829756736755 - <_> - - - - <_>9 8 3 3 -1. - <_>9 9 3 1 3. - 0 - -5.4323761723935604e-003 - 0.2666288912296295 - 0.5214679837226868 - <_> - - <_> - - - - <_>4 11 2 2 -1. - <_>4 12 2 1 2. - 0 - -1.4652940080850385e-005 - 1 - 0.3981761038303375 - <_> - - - - <_>8 8 3 3 -1. - <_>8 9 3 1 3. - 0 - -1.8556920113041997e-003 - 0.3322763144969940 - 0.5705834031105042 - <_> - - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - 4.7609540633857250e-003 - 1 - 0.6636558175086975 - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - 1.5676260227337480e-003 - 0.5505567789077759 - 0.4420661926269531 - <_> - - <_> - - - - <_>1 9 4 10 -1. - <_>1 9 2 5 2. - <_>3 14 2 5 2. - 0 - 5.4239919409155846e-003 - 1 - 0.5959938168525696 - <_> - - - - <_>0 12 6 8 -1. - <_>2 12 2 8 3. - 0 - -6.4692399464547634e-003 - 0.5369594097137451 - 0.3744339942932129 - <_> - - <_> - - - - <_>9 1 4 2 -1. - <_>11 1 2 1 2. - <_>9 2 2 1 2. - 0 - -7.8038539504632354e-004 - 0.4103595018386841 - 1 - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - 0.0450864508748055 - 0.5177506804466248 - 0.1878100037574768 - <_> - - <_> - - - - <_>7 0 2 3 -1. - <_>7 1 2 1 3. - 0 - -5.1405387930572033e-003 - 0.2352892011404038 - 1 - <_> - - - - <_>7 14 6 3 -1. - <_>9 14 2 3 3. - 0 - -0.0212361291050911 - 0.1708751022815704 - 0.5424973964691162 - <_> - - <_> - - - - <_>9 6 6 4 -1. - <_>11 6 2 4 3. - 0 - -2.3763340432196856e-003 - 0.5836530923843384 - 1 - <_> - - - - <_>8 10 8 3 -1. - <_>8 10 4 3 2. - 0 - 0.0541225895285606 - 0.5117433071136475 - 0.1865931004285812 - <_> - - <_> - - - - <_>6 10 4 3 -1. - <_>8 10 2 3 2. - 0 - -5.3492980077862740e-004 - 0.5108693242073059 - 1 - <_> - - - - <_>6 8 3 5 -1. - <_>7 8 1 5 3. - 0 - -5.8454048121348023e-004 - 0.4775491058826447 - 0.2439853996038437 - 30.6721305847167970 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>0 4 8 1 -1. - <_>4 4 4 1 2. - 0 - 3.0031939968466759e-003 - 0.3349649906158447 - 1 - <_> - - - - <_>8 2 2 6 -1. - <_>8 2 1 3 2. - <_>9 5 1 3 2. - 0 - 6.9161207647994161e-004 - 0.4518367946147919 - 0.7289354205131531 - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 0.0112127903848886 - 0.2950800955295563 - 1 - <_> - - - - <_>12 10 3 6 -1. - <_>12 13 3 3 2. - 0 - -7.6108198845759034e-004 - 0.5669054985046387 - 0.2830851078033447 - <_> - - <_> - - - - <_>8 15 1 4 -1. - <_>8 17 1 2 2. - 0 - 1.1984579759882763e-004 - 0.4090577960014343 - 1 - <_> - - - - <_>5 16 2 4 -1. - <_>5 18 2 2 2. - 0 - -1.9725349557120353e-004 - 0.6951494216918945 - 0.4637868106365204 - <_> - - <_> - - - - <_>6 2 8 12 -1. - <_>6 6 8 4 3. - 0 - -5.5180420167744160e-003 - 1 - 0.3167675137519836 - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 1.2148249661549926e-003 - 0.3316706120967865 - 0.5396397709846497 - <_> - - <_> - - - - <_>7 0 6 1 -1. - <_>9 0 2 1 3. - 0 - -4.2497441172599792e-003 - 0.2600573897361755 - 1 - <_> - - - - <_>8 11 3 3 -1. - <_>8 12 3 1 3. - 0 - -9.4915721565485001e-003 - 0.7484294772148132 - 0.5073192119598389 - <_> - - <_> - - - - <_>12 11 3 6 -1. - <_>12 14 3 3 2. - 0 - 6.5378600265830755e-004 - 1 - 0.3952010869979858 - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - -4.9741100519895554e-004 - 0.5880274772644043 - 0.3552120029926300 - <_> - - <_> - - - - <_>5 7 10 12 -1. - <_>5 7 5 6 2. - <_>10 13 5 6 2. - 0 - -0.0430792495608330 - 0.2434878051280975 - 1 - <_> - - - - <_>4 4 2 10 -1. - <_>4 9 2 5 2. - 0 - -5.1999092102050781e-004 - 0.3195562958717346 - 0.5585454702377319 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 7 1 3 2. - 0 - -4.5451628975570202e-003 - 1 - 0.4845289885997772 - <_> - - - - <_>11 9 6 2 -1. - <_>11 9 3 2 2. - 0 - -7.9610403627157211e-003 - 0.3801181018352509 - 0.5358511805534363 - <_> - - <_> - - - - <_>4 7 2 2 -1. - <_>5 7 1 2 2. - 0 - -3.1919340835884213e-004 - 1 - 0.4356329143047333 - <_> - - - - <_>0 2 4 6 -1. - <_>0 4 4 2 3. - 0 - -0.0192238893359900 - 0.2613066136837006 - 0.6155496239662170 - <_> - - <_> - - - - <_>10 7 3 4 -1. - <_>11 7 1 4 3. - 0 - -1.3076990144327283e-003 - 0.5942062139511108 - 1 - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - 0.0198250394314528 - 0.4945428073406220 - 0.7384855151176453 - <_> - - <_> - - - - <_>9 1 1 3 -1. - <_>9 2 1 1 3. - 0 - -2.2013280540704727e-003 - 0.2214481979608536 - 1 - <_> - - - - <_>0 6 16 6 -1. - <_>0 6 8 3 2. - <_>8 9 8 3 2. - 0 - -7.8596705570816994e-003 - 0.3600977063179016 - 0.5298550128936768 - <_> - - <_> - - - - <_>10 15 3 3 -1. - <_>10 16 3 1 3. - 0 - 1.4142199652269483e-003 - 1 - 0.5776566267013550 - <_> - - - - <_>9 14 4 3 -1. - <_>9 15 4 1 3. - 0 - -0.0112327598035336 - 0.6934456825256348 - 0.4827207028865814 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 2.9746301006525755e-003 - 1 - 0.3216677010059357 - <_> - - - - <_>3 0 14 2 -1. - <_>3 1 14 1 2. - 0 - 5.3283828310668468e-004 - 0.3962500095367432 - 0.5680363774299622 - <_> - - <_> - - - - <_>9 14 3 3 -1. - <_>9 15 3 1 3. - 0 - 0.0101052597165108 - 1 - 0.7567418217658997 - <_> - - - - <_>10 15 3 3 -1. - <_>10 16 3 1 3. - 0 - -0.0116536999121308 - 0.6523556709289551 - 0.5027053952217102 - <_> - - <_> - - - - <_>9 13 2 6 -1. - <_>9 16 2 3 2. - 0 - -7.0609981194138527e-003 - 0.2538770139217377 - 1 - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - 2.2343141026794910e-003 - 0.4387277066707611 - 0.6177632212638855 - <_> - - <_> - - - - <_>12 11 3 6 -1. - <_>12 14 3 3 2. - 0 - -0.0298022795468569 - 1 - 0.5201140046119690 - <_> - - - - <_>8 12 5 2 -1. - <_>8 13 5 1 2. - 0 - 1.1611840454861522e-003 - 0.4647909998893738 - 0.6184254884719849 - <_> - - <_> - - - - <_>5 11 3 6 -1. - <_>5 14 3 3 2. - 0 - 9.4824447296559811e-004 - 1 - 0.3040994107723236 - <_> - - - - <_>8 12 3 2 -1. - <_>8 13 3 1 2. - 0 - 4.1284630424343050e-004 - 0.4518808126449585 - 0.6245782971382141 - <_> - - <_> - - - - <_>11 13 7 6 -1. - <_>11 15 7 2 3. - 0 - -0.0312035400420427 - 0.2788935899734497 - 1 - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - 2.7652881108224392e-003 - 0.4698500037193298 - 0.6502454280853272 - <_> - - <_> - - - - <_>3 13 14 4 -1. - <_>3 13 7 2 2. - <_>10 15 7 2 2. - 0 - 0.0256447792053223 - 1 - 0.1805171072483063 - <_> - - - - <_>8 14 4 6 -1. - <_>8 14 2 3 2. - <_>10 17 2 3 2. - 0 - -7.5331530533730984e-003 - 0.3208068907260895 - 0.5522022843360901 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 3.2047149725258350e-003 - 1 - 0.6436933875083923 - <_> - - - - <_>7 16 6 2 -1. - <_>9 16 2 2 3. - 0 - -2.4282479716930538e-004 - 0.5676705241203308 - 0.4509103894233704 - <_> - - <_> - - - - <_>7 7 6 2 -1. - <_>7 8 6 1 2. - 0 - -6.1979342717677355e-004 - 0.3122146129608154 - 1 - <_> - - - - <_>3 9 13 3 -1. - <_>3 10 13 1 3. - 0 - -8.0101029016077518e-004 - 0.2965193986892700 - 0.5230494737625122 - <_> - - <_> - - - - <_>9 8 3 4 -1. - <_>9 10 3 2 2. - 0 - -9.1816839994862676e-004 - 1 - 0.5464711785316467 - <_> - - - - <_>8 10 4 3 -1. - <_>8 11 4 1 3. - 0 - 1.2239529751241207e-003 - 0.4618502855300903 - 0.5679548978805542 - <_> - - <_> - - - - <_>7 7 3 4 -1. - <_>8 7 1 4 3. - 0 - -6.8743730662390590e-004 - 0.5430880188941956 - 1 - <_> - - - - <_>8 7 3 5 -1. - <_>9 7 1 5 3. - 0 - -1.8252469599246979e-003 - 0.5433623194694519 - 0.3385221064090729 - <_> - - <_> - - - - <_>12 3 3 4 -1. - <_>13 3 1 4 3. - 0 - -7.4570789001882076e-003 - 1 - 0.5265594720840454 - <_> - - - - <_>9 7 2 3 -1. - <_>9 7 1 3 2. - 0 - 5.3775748237967491e-003 - 0.4857215881347656 - 0.6815124154090881 - <_> - - <_> - - - - <_>5 3 3 4 -1. - <_>6 3 1 4 3. - 0 - 3.7602309603244066e-003 - 1 - 0.2832160890102387 - <_> - - - - <_>3 7 12 1 -1. - <_>7 7 4 1 3. - 0 - 8.7752222316339612e-004 - 0.3966830968856812 - 0.5512480735778809 - <_> - - <_> - - - - <_>12 5 3 3 -1. - <_>12 6 3 1 3. - 0 - 5.5084479972720146e-003 - 1 - 0.6784620285034180 - <_> - - - - <_>11 2 6 2 -1. - <_>11 3 6 1 2. - 0 - -7.5949047459289432e-004 - 0.3906503021717072 - 0.5457202792167664 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 2 7 1 2. - <_>10 3 7 1 2. - 0 - 1.6352660022675991e-003 - 1 - 0.3640204071998596 - <_> - - - - <_>6 1 7 14 -1. - <_>6 8 7 7 2. - 0 - -1.2750849418807775e-004 - 0.5829724073410034 - 0.4194979965686798 - <_> - - <_> - - - - <_>8 0 12 5 -1. - <_>8 0 6 5 2. - 0 - 0.0220676101744175 - 0.4606702923774719 - 1 - <_> - - - - <_>1 9 18 1 -1. - <_>7 9 6 1 3. - 0 - -0.0192037895321846 - 0.3261483013629913 - 0.5236080884933472 - <_> - - <_> - - - - <_>0 0 10 5 -1. - <_>5 0 5 5 2. - 0 - -0.0129981096833944 - 0.7022112011909485 - 1 - <_> - - - - <_>2 5 8 15 -1. - <_>2 10 8 5 3. - 0 - -3.1332690268754959e-003 - 0.2870470881462097 - 0.5076476931571960 - <_> - - <_> - - - - <_>12 5 3 3 -1. - <_>12 6 3 1 3. - 0 - -5.2937557920813560e-003 - 1 - 0.4709520936012268 - <_> - - - - <_>13 4 2 3 -1. - <_>13 5 2 1 3. - 0 - 2.1857069805264473e-003 - 0.4708291888237000 - 0.6169841885566711 - <_> - - <_> - - - - <_>2 15 4 3 -1. - <_>2 16 4 1 3. - 0 - -4.5750709250569344e-003 - 0.3114252984523773 - 1 - <_> - - - - <_>5 6 10 3 -1. - <_>10 6 5 3 2. - 0 - -0.0451521389186382 - 0.1851435005664825 - 0.5504814982414246 - <_> - - <_> - - - - <_>11 6 2 2 -1. - <_>12 6 1 1 2. - <_>11 7 1 1 2. - 0 - -2.7783559635281563e-003 - 1 - 0.4937348067760468 - <_> - - - - <_>12 4 4 3 -1. - <_>12 5 4 1 3. - 0 - -2.5752480141818523e-003 - 0.6152948141098023 - 0.4735499918460846 - <_> - - <_> - - - - <_>7 6 2 2 -1. - <_>7 6 1 1 2. - <_>8 7 1 1 2. - 0 - 1.1614130344241858e-003 - 1 - 0.6510571837425232 - <_> - - - - <_>4 4 4 3 -1. - <_>4 5 4 1 3. - 0 - 2.3350189439952374e-003 - 0.4088341891765595 - 0.5684152245521545 - <_> - - <_> - - - - <_>11 4 3 3 -1. - <_>12 4 1 3 3. - 0 - 3.8499289657920599e-003 - 1 - 0.3025828897953033 - <_> - - - - <_>9 3 2 1 -1. - <_>9 3 1 1 2. - 0 - 2.4529630318284035e-003 - 0.5232502818107605 - 0.2017620950937271 - <_> - - <_> - - - - <_>4 5 5 3 -1. - <_>4 6 5 1 3. - 0 - 3.6731390282511711e-003 - 1 - 0.6428425908088684 - <_> - - - - <_>4 6 4 3 -1. - <_>4 7 4 1 3. - 0 - 2.1937100682407618e-003 - 0.4328865110874176 - 0.6420509815216065 - <_> - - <_> - - - - <_>11 4 3 3 -1. - <_>12 4 1 3 3. - 0 - -6.4666871912777424e-003 - 1 - 0.5254065990447998 - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -5.7186251506209373e-003 - 0.2490984052419663 - 0.5287619233131409 - <_> - - <_> - - - - <_>6 4 3 3 -1. - <_>7 4 1 3 3. - 0 - 9.9941878579556942e-004 - 1 - 0.3329795897006989 - <_> - - - - <_>4 14 1 3 -1. - <_>4 15 1 1 3. - 0 - -7.8276498243212700e-004 - 0.3598344922065735 - 0.5498340725898743 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 7 1 3 2. - 0 - 4.3231188319623470e-003 - 0.4818705022335053 - 1 - <_> - - - - <_>17 0 3 2 -1. - <_>17 1 3 1 2. - 0 - 4.0838290005922318e-003 - 0.5266330242156982 - 0.3105789124965668 - <_> - - <_> - - - - <_>8 10 2 9 -1. - <_>8 13 2 3 3. - 0 - 3.0515898833982646e-004 - 1 - 0.3995291888713837 - <_> - - - - <_>0 8 18 2 -1. - <_>0 9 18 1 2. - 0 - 1.2640280183404684e-003 - 0.3228437900543213 - 0.5819215178489685 - <_> - - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - -0.0101526603102684 - 0.8026071190834045 - 1 - <_> - - - - <_>8 7 4 3 -1. - <_>8 8 4 1 3. - 0 - -2.6863690000027418e-003 - 0.3875617086887360 - 0.5466570854187012 - <_> - - <_> - - - - <_>1 14 6 6 -1. - <_>1 14 3 3 2. - <_>4 17 3 3 2. - 0 - -9.0515613555908203e-003 - 1 - 0.4372057914733887 - <_> - - - - <_>0 18 6 2 -1. - <_>0 19 6 1 2. - 0 - -6.3204211182892323e-003 - 0.1126551032066345 - 0.6395416259765625 - <_> - - <_> - - - - <_>12 9 4 3 -1. - <_>12 9 2 3 2. - 0 - 2.6117300149053335e-003 - 0.5423989295959473 - 1 - <_> - - - - <_>9 8 3 8 -1. - <_>10 8 1 8 3. - 0 - 0.0143390195444226 - 0.4979273080825806 - 0.6042236089706421 - <_> - - <_> - - - - <_>4 9 4 3 -1. - <_>6 9 2 3 2. - 0 - 2.8452780097723007e-003 - 1 - 0.3491092026233673 - <_> - - - - <_>4 18 6 1 -1. - <_>6 18 2 1 3. - 0 - 1.4783289771003183e-005 - 0.4195067882537842 - 0.5775966048240662 - <_> - - <_> - - - - <_>9 7 3 2 -1. - <_>10 7 1 2 3. - 0 - 8.1814555451273918e-003 - 0.4885987043380737 - 1 - <_> - - - - <_>6 7 8 12 -1. - <_>10 7 4 6 2. - <_>6 13 4 6 2. - 0 - 6.6321990452706814e-003 - 0.5444468259811401 - 0.4420995116233826 - <_> - - <_> - - - - <_>8 7 3 2 -1. - <_>9 7 1 2 3. - 0 - -2.2483461070805788e-003 - 0.6699792146682739 - 1 - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - 0.0123745603486896 - 0.4478605985641480 - 0.6564893722534180 - <_> - - <_> - - - - <_>3 16 14 4 -1. - <_>10 16 7 2 2. - <_>3 18 7 2 2. - 0 - -6.6516688093543053e-003 - 1 - 0.5511878728866577 - <_> - - - - <_>1 14 18 4 -1. - <_>10 14 9 2 2. - <_>1 16 9 2 2. - 0 - -8.5750613361597061e-003 - 0.4017445147037506 - 0.5405536293983460 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - 6.5078441984951496e-003 - 1 - 0.2294393032789230 - <_> - - - - <_>0 4 20 12 -1. - <_>0 4 10 6 2. - <_>10 10 10 6 2. - 0 - 0.0286752097308636 - 0.5177900195121765 - 0.3567756116390228 - <_> - - <_> - - - - <_>5 5 10 12 -1. - <_>10 5 5 6 2. - <_>5 11 5 6 2. - 0 - 7.0673860609531403e-003 - 0.5564699769020081 - 1 - <_> - - - - <_>10 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 1.2367829913273454e-003 - 0.3627698123455048 - 0.5572413802146912 - <_> - - <_> - - - - <_>8 11 4 3 -1. - <_>8 12 4 1 3. - 0 - 7.4818679131567478e-003 - 1 - 0.6784911155700684 - <_> - - - - <_>8 12 3 3 -1. - <_>8 13 3 1 3. - 0 - 4.7109839506447315e-003 - 0.4121252894401550 - 0.6072235703468323 - <_> - - <_> - - - - <_>13 13 5 6 -1. - <_>13 15 5 2 3. - 0 - -6.9405790418386459e-003 - 1 - 0.5459766983985901 - <_> - - - - <_>7 0 6 6 -1. - <_>9 0 2 6 3. - 0 - 0.0333020985126495 - 0.5276706814765930 - 0.2374915927648544 - <_> - - <_> - - - - <_>2 13 5 6 -1. - <_>2 15 5 2 3. - 0 - 0.0361046306788921 - 1 - 0.0724927932024002 - <_> - - - - <_>0 4 2 12 -1. - <_>0 4 1 6 2. - <_>1 10 1 6 2. - 0 - 0.0196746494621038 - 0.4626345932483673 - 0.8208963274955750 - <_> - - <_> - - - - <_>9 19 3 1 -1. - <_>10 19 1 1 3. - 0 - 3.4766150638461113e-003 - 0.5208731889724731 - 1 - <_> - - - - <_>18 0 2 6 -1. - <_>18 2 2 2 3. - 0 - 1.3987369602546096e-003 - 0.5484414100646973 - 0.4230034947395325 - <_> - - <_> - - - - <_>0 3 1 6 -1. - <_>0 5 1 2 3. - 0 - 4.0974249131977558e-003 - 1 - 0.2780553102493286 - <_> - - - - <_>0 0 3 6 -1. - <_>0 2 3 2 3. - 0 - 2.6973790954798460e-003 - 0.5403831005096436 - 0.3790988922119141 - <_> - - <_> - - - - <_>17 2 3 7 -1. - <_>18 2 1 7 3. - 0 - -5.6591699831187725e-003 - 1 - 0.4798336029052734 - <_> - - - - <_>10 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 3.9460969856008887e-004 - 0.3766950070858002 - 0.5429229140281677 - <_> - - <_> - - - - <_>0 2 3 7 -1. - <_>1 2 1 7 3. - 0 - 2.1750570740550756e-003 - 1 - 0.6207162737846375 - <_> - - - - <_>6 2 4 8 -1. - <_>8 2 2 8 2. - 0 - 1.4614439569413662e-003 - 0.3357945084571838 - 0.5142632126808167 - <_> - - <_> - - - - <_>13 0 1 4 -1. - <_>13 2 1 2 2. - 0 - -5.3006567759439349e-004 - 1 - 0.5344640016555786 - <_> - - - - <_>5 1 12 5 -1. - <_>9 1 4 5 3. - 0 - 0.1486930996179581 - 0.5159608125686646 - 0.2561823129653931 - <_> - - <_> - - - - <_>6 0 1 4 -1. - <_>6 2 1 2 2. - 0 - -5.8816498494707048e-005 - 1 - 0.5123091936111450 - <_> - - - - <_>3 1 12 5 -1. - <_>7 1 4 5 3. - 0 - -1.6275369562208652e-003 - 0.6017646193504334 - 0.3109371960163117 - <_> - - <_> - - - - <_>9 12 3 8 -1. - <_>10 12 1 8 3. - 0 - -0.0128818098455668 - 0.2712287008762360 - 1 - <_> - - - - <_>7 13 6 1 -1. - <_>9 13 2 1 3. - 0 - 9.4982917653396726e-004 - 0.5442442297935486 - 0.4028888046741486 - <_> - - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -0.0123159997165203 - 1 - 0.4736065864562988 - <_> - - - - <_>5 16 7 3 -1. - <_>5 17 7 1 3. - 0 - 9.0286601334810257e-003 - 0.7451434731483460 - 0.3487991988658905 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 14 20 2 3. - 0 - -0.0868761166930199 - 0.2290333062410355 - 1 - <_> - - - - <_>4 18 14 2 -1. - <_>4 19 14 1 2. - 0 - -1.5107560102478601e-005 - 0.5517889857292175 - 0.4393149018287659 - <_> - - <_> - - - - <_>8 12 3 8 -1. - <_>9 12 1 8 3. - 0 - -0.0174576602876186 - 0.0901679024100304 - 1 - <_> - - - - <_>7 13 3 3 -1. - <_>7 14 3 1 3. - 0 - -2.5219470262527466e-003 - 0.6233540177345276 - 0.4789459109306335 - <_> - - <_> - - - - <_>5 5 12 10 -1. - <_>11 5 6 5 2. - <_>5 10 6 5 2. - 0 - 1.0656520025804639e-003 - 0.5489696264266968 - 1 - <_> - - - - <_>8 1 5 10 -1. - <_>8 6 5 5 2. - 0 - -4.2540300637483597e-003 - 0.5579808950424194 - 0.4375877976417542 - <_> - - <_> - - - - <_>5 4 9 12 -1. - <_>5 10 9 6 2. - 0 - -9.0349102392792702e-003 - 0.3579156100749970 - 1 - <_> - - - - <_>7 13 6 6 -1. - <_>7 15 6 2 3. - 0 - -1.5230999561026692e-003 - 0.5613660216331482 - 0.3939043879508972 - <_> - - <_> - - - - <_>8 4 5 16 -1. - <_>8 12 5 8 2. - 0 - 2.8441150207072496e-003 - 1 - 0.3901554942131043 - <_> - - - - <_>8 12 4 6 -1. - <_>8 15 4 3 2. - 0 - -3.2824429217725992e-003 - 0.4528619050979614 - 0.5441343188285828 - <_> - - <_> - - - - <_>7 13 2 2 -1. - <_>7 13 1 1 2. - <_>8 14 1 1 2. - 0 - 3.2161718991119415e-005 - 1 - 0.5803111791610718 - <_> - - - - <_>7 12 2 2 -1. - <_>7 12 1 1 2. - <_>8 13 1 1 2. - 0 - 3.0118400900391862e-005 - 0.3336850106716156 - 0.5504856109619141 - <_> - - <_> - - - - <_>18 0 2 14 -1. - <_>18 0 1 14 2. - 0 - -5.6150099262595177e-003 - 0.6124789118766785 - 1 - <_> - - - - <_>12 11 7 2 -1. - <_>12 12 7 1 2. - 0 - -0.0173892099410295 - 0.0872716307640076 - 0.5204588174819946 - <_> - - <_> - - - - <_>1 18 1 2 -1. - <_>1 19 1 1 2. - 0 - -4.4361080654198304e-005 - 0.3935329020023346 - 1 - <_> - - - - <_>2 18 1 2 -1. - <_>2 19 1 1 2. - 0 - 1.0354899859521538e-004 - 0.5918853878974915 - 0.4119614064693451 - <_> - - <_> - - - - <_>9 7 2 1 -1. - <_>9 7 1 1 2. - 0 - 1.5939630102366209e-003 - 0.4839623868465424 - 1 - <_> - - - - <_>9 6 2 3 -1. - <_>9 6 1 3 2. - 0 - 2.5440789759159088e-003 - 0.4787364900112152 - 0.6360663175582886 - <_> - - <_> - - - - <_>3 1 2 2 -1. - <_>4 1 1 2 2. - 0 - 1.5083180187502876e-005 - 0.4231117069721222 - 1 - <_> - - - - <_>3 0 3 2 -1. - <_>3 1 3 1 2. - 0 - -9.9282202427275479e-005 - 0.4274589121341705 - 0.6094048023223877 - <_> - - <_> - - - - <_>12 10 3 4 -1. - <_>12 12 3 2 2. - 0 - 5.5371708003804088e-004 - 1 - 0.4271987974643707 - <_> - - - - <_>7 7 8 2 -1. - <_>7 8 8 1 2. - 0 - 1.9186759600415826e-003 - 0.4497107863426209 - 0.5549122095108032 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>8 10 3 2 2. - 0 - -5.0764222396537662e-004 - 1 - 0.5477195978164673 - <_> - - - - <_>7 12 6 3 -1. - <_>7 13 6 1 3. - 0 - 1.7236480489373207e-003 - 0.2882922887802124 - 0.5615127086639404 - 34.6770782470703120 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 10 3 -1. - <_>5 2 5 3 2. - 0 - 0.0130921695381403 - 0.3338870108127594 - 1 - <_> - - - - <_>0 1 20 6 -1. - <_>0 3 20 2 3. - 0 - 4.1446479735895991e-004 - 0.3099352121353149 - 0.6677492260932922 - <_> - - <_> - - - - <_>7 6 6 3 -1. - <_>9 6 2 3 3. - 0 - 0.0218357294797897 - 0.4369049072265625 - 1 - <_> - - - - <_>3 7 14 4 -1. - <_>3 9 14 2 2. - 0 - 0.0483239404857159 - 0.4301724135875702 - 0.6153885126113892 - <_> - - <_> - - - - <_>5 7 3 6 -1. - <_>5 9 3 2 3. - 0 - 1.6091950237751007e-003 - 0.3387326002120972 - 1 - <_> - - - - <_>8 8 3 12 -1. - <_>8 12 3 4 3. - 0 - 1.3469760306179523e-003 - 0.6248713731765747 - 0.3594130873680115 - <_> - - <_> - - - - <_>9 17 6 2 -1. - <_>12 17 3 1 2. - <_>9 18 3 1 2. - 0 - 1.7729059618432075e-004 - 0.3868424892425537 - 1 - <_> - - - - <_>10 17 4 3 -1. - <_>10 18 4 1 3. - 0 - 3.6743620876222849e-004 - 0.4409345090389252 - 0.5476474165916443 - <_> - - <_> - - - - <_>4 2 4 2 -1. - <_>4 3 4 1 2. - 0 - -1.2352119665592909e-003 - 0.3260171115398407 - 1 - <_> - - - - <_>7 3 6 14 -1. - <_>9 3 2 14 3. - 0 - 1.1705530341714621e-003 - 0.4111348986625671 - 0.6088163852691650 - <_> - - <_> - - - - <_>15 13 1 6 -1. - <_>15 16 1 3 2. - 0 - -2.9695429475395940e-005 - 1 - 0.4269422888755798 - <_> - - - - <_>13 14 2 6 -1. - <_>13 16 2 2 3. - 0 - 2.7050738572143018e-004 - 0.4306466877460480 - 0.5810514092445374 - <_> - - <_> - - - - <_>4 11 5 6 -1. - <_>4 14 5 3 2. - 0 - -7.9626210208516568e-005 - 1 - 0.3669143021106720 - <_> - - - - <_>4 17 4 2 -1. - <_>6 17 2 2 2. - 0 - 3.3152441028505564e-004 - 0.4610663950443268 - 0.6290590167045593 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 6 10 2 2. - 0 - -0.0523058287799358 - 1 - 0.5328689813613892 - <_> - - - - <_>6 5 10 12 -1. - <_>11 5 5 6 2. - <_>6 11 5 6 2. - 0 - 0.0268804691731930 - 0.5213261246681213 - 0.3231219947338104 - <_> - - <_> - - - - <_>4 0 2 12 -1. - <_>4 0 1 6 2. - <_>5 6 1 6 2. - 0 - -2.4203000066336244e-004 - 1 - 0.3568570017814636 - <_> - - - - <_>4 1 6 2 -1. - <_>6 1 2 2 3. - 0 - -1.6424639616161585e-003 - 0.3440661132335663 - 0.5625604987144470 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - -2.6830288697965443e-004 - 1 - 0.4561173021793366 - <_> - - - - <_>5 5 15 6 -1. - <_>5 7 15 2 3. - 0 - -2.2649629972875118e-003 - 0.5321351885795593 - 0.3674154877662659 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 10 9 1 2. - <_>10 11 9 1 2. - 0 - 0.0156272090971470 - 1 - 0.2029353976249695 - <_> - - - - <_>1 6 15 7 -1. - <_>6 6 5 7 3. - 0 - 0.1621132045984268 - 0.5563033223152161 - 0.2618849873542786 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -3.7391691002994776e-003 - 0.6062194705009460 - 1 - <_> - - - - <_>9 14 3 3 -1. - <_>9 15 3 1 3. - 0 - -2.0878419745713472e-003 - 0.5950763821601868 - 0.4545117020606995 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 2.3334210272878408e-003 - 1 - 0.6435524225234985 - <_> - - - - <_>8 13 3 2 -1. - <_>8 14 3 1 2. - 0 - 6.5116386394947767e-005 - 0.3520734012126923 - 0.5179778933525085 - <_> - - <_> - - - - <_>15 14 5 3 -1. - <_>15 15 5 1 3. - 0 - 7.4625718407332897e-003 - 0.5326688289642334 - 1 - <_> - - - - <_>0 14 20 1 -1. - <_>0 14 10 1 2. - 0 - -0.0220326893031597 - 0.3491981029510498 - 0.5429236888885498 - <_> - - <_> - - - - <_>0 14 6 3 -1. - <_>0 15 6 1 3. - 0 - -8.3081610500812531e-003 - 0.2084023058414459 - 1 - <_> - - - - <_>5 3 4 2 -1. - <_>5 4 4 1 2. - 0 - -4.3259368976578116e-004 - 0.3965272009372711 - 0.5425453782081604 - <_> - - <_> - - - - <_>0 6 20 1 -1. - <_>0 6 10 1 2. - 0 - -0.0322092287242413 - 1 - 0.5306411981582642 - <_> - - - - <_>6 3 10 14 -1. - <_>11 3 5 7 2. - <_>6 10 5 7 2. - 0 - -9.0424838708713651e-004 - 0.5450385808944702 - 0.4256696999073029 - <_> - - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 2.2727500181645155e-003 - 1 - 0.5968611240386963 - <_> - - - - <_>6 3 8 6 -1. - <_>6 3 4 3 2. - <_>10 6 4 3 2. - 0 - 5.9820008464157581e-003 - 0.4758140146732330 - 0.3150944113731384 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - -5.8856618124991655e-004 - 1 - 0.4847748875617981 - <_> - - - - <_>6 3 10 14 -1. - <_>11 3 5 7 2. - <_>6 10 5 7 2. - 0 - -8.8227191008627415e-004 - 0.5426316261291504 - 0.4338341057300568 - <_> - - <_> - - - - <_>5 7 2 1 -1. - <_>6 7 1 1 2. - 0 - -7.4473457061685622e-005 - 1 - 0.4287509918212891 - <_> - - - - <_>4 3 10 14 -1. - <_>4 3 5 7 2. - <_>9 10 5 7 2. - 0 - 3.9148979703895748e-004 - 0.6345185041427612 - 0.4101851880550385 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>9 7 1 2 2. - 0 - -3.6939629353582859e-003 - 1 - 0.4849104881286621 - <_> - - - - <_>0 3 20 1 -1. - <_>0 3 10 1 2. - 0 - -0.0112078497186303 - 0.4146336913108826 - 0.5471264123916626 - <_> - - <_> - - - - <_>2 1 10 3 -1. - <_>2 2 10 1 3. - 0 - -0.0103374095633626 - 0.2877183854579926 - 1 - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - 3.6883640568703413e-003 - 0.5101901888847351 - 0.7216951251029968 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -3.8984280545264482e-003 - 1 - 0.5276182293891907 - <_> - - - - <_>9 7 3 6 -1. - <_>10 7 1 6 3. - 0 - -5.9986729174852371e-003 - 0.6618459820747376 - 0.4841631054878235 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - 4.5043681748211384e-003 - 1 - 0.1874157935380936 - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - 0.0177995301783085 - 0.4616934955120087 - 0.7088965773582459 - <_> - - <_> - - - - <_>16 3 4 6 -1. - <_>16 5 4 2 3. - 0 - -0.0184625703841448 - 0.3001979887485504 - 1 - <_> - - - - <_>15 6 2 12 -1. - <_>16 6 1 6 2. - <_>15 12 1 6 2. - 0 - 1.4931300029275008e-005 - 0.4561808109283447 - 0.5610787868499756 - <_> - - <_> - - - - <_>1 4 18 10 -1. - <_>1 4 9 5 2. - <_>10 9 9 5 2. - 0 - -0.0860212296247482 - 0.2341700941324234 - 1 - <_> - - - - <_>9 4 2 4 -1. - <_>9 6 2 2 2. - 0 - -6.0818758356617764e-005 - 0.5672286152839661 - 0.4199964106082916 - <_> - - <_> - - - - <_>12 5 3 2 -1. - <_>12 6 3 1 2. - 0 - 1.2670679716393352e-003 - 1 - 0.6207482218742371 - <_> - - - - <_>5 12 10 4 -1. - <_>5 14 10 2 2. - 0 - 1.3699879636988044e-003 - 0.5394958853721619 - 0.3823862969875336 - <_> - - <_> - - - - <_>5 5 3 2 -1. - <_>5 6 3 1 2. - 0 - 3.3162781037390232e-003 - 1 - 0.7061681151390076 - <_> - - - - <_>4 6 12 6 -1. - <_>8 6 4 6 3. - 0 - -1.4532039640471339e-003 - 0.3065513074398041 - 0.4827373027801514 - <_> - - <_> - - - - <_>14 4 6 6 -1. - <_>14 6 6 2 3. - 0 - -0.0714920610189438 - 1 - 0.5193122029304504 - <_> - - - - <_>16 0 4 6 -1. - <_>18 0 2 3 2. - <_>16 3 2 3 2. - 0 - 1.9857978913933039e-003 - 0.4642435014247894 - 0.5807694792747498 - <_> - - <_> - - - - <_>0 4 6 6 -1. - <_>0 6 6 2 3. - 0 - 6.2516499310731888e-003 - 1 - 0.2949813902378082 - <_> - - - - <_>0 0 4 6 -1. - <_>0 0 2 3 2. - <_>2 3 2 3 2. - 0 - 2.7005500160157681e-003 - 0.4585886895656586 - 0.6022353768348694 - <_> - - <_> - - - - <_>12 0 8 5 -1. - <_>12 0 4 5 2. - 0 - 0.0111303897574544 - 0.4357841014862061 - 1 - <_> - - - - <_>16 0 4 17 -1. - <_>16 0 2 17 2. - 0 - 0.0150928497314453 - 0.4561539888381958 - 0.6119061708450317 - <_> - - <_> - - - - <_>1 0 18 20 -1. - <_>7 0 6 20 3. - 0 - -0.0279433000832796 - 0.6537144184112549 - 1 - <_> - - - - <_>6 0 2 5 -1. - <_>7 0 1 5 2. - 0 - 4.4036991312168539e-005 - 0.3474723100662231 - 0.5336967706680298 - <_> - - <_> - - - - <_>0 6 20 1 -1. - <_>0 6 10 1 2. - 0 - -0.0122327702119946 - 0.3731676042079926 - 1 - <_> - - - - <_>8 7 6 4 -1. - <_>10 7 2 4 3. - 0 - -6.8591412855312228e-004 - 0.5717229247093201 - 0.4793379008769989 - <_> - - <_> - - - - <_>1 1 16 4 -1. - <_>1 1 8 2 2. - <_>9 3 8 2 2. - 0 - -3.8992990739643574e-003 - 0.4056436121463776 - 1 - <_> - - - - <_>7 2 4 2 -1. - <_>7 2 2 1 2. - <_>9 3 2 1 2. - 0 - 4.9113907152786851e-004 - 0.6174048185348511 - 0.4471754133701325 - <_> - - <_> - - - - <_>7 4 9 3 -1. - <_>7 5 9 1 3. - 0 - 8.2117747515439987e-003 - 1 - 0.6179698109626770 - <_> - - - - <_>10 4 5 12 -1. - <_>10 10 5 6 2. - 0 - -0.0455644801259041 - 0.2285494953393936 - 0.5249565839767456 - <_> - - <_> - - - - <_>3 12 2 3 -1. - <_>3 13 2 1 3. - 0 - -5.3631910122931004e-003 - 0.1784950047731400 - 1 - <_> - - - - <_>8 8 3 5 -1. - <_>9 8 1 5 3. - 0 - -0.0122749703004956 - 0.7261952757835388 - 0.4550398886203766 - <_> - - <_> - - - - <_>13 9 2 3 -1. - <_>13 9 1 3 2. - 0 - 5.4185991175472736e-003 - 0.5252990722656250 - 1 - <_> - - - - <_>15 11 2 2 -1. - <_>15 12 2 1 2. - 0 - 8.1846961984410882e-004 - 0.5445222258567810 - 0.3272218108177185 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>5 7 2 1 3. - 0 - 4.1358140297234058e-003 - 1 - 0.7013831734657288 - <_> - - - - <_>2 11 6 2 -1. - <_>2 12 6 1 2. - 0 - 3.9578010910190642e-004 - 0.4965943992137909 - 0.3295598030090332 - <_> - - <_> - - - - <_>15 11 4 3 -1. - <_>15 12 4 1 3. - 0 - 4.6887691132724285e-003 - 0.5362641811370850 - 1 - <_> - - - - <_>16 0 4 17 -1. - <_>16 0 2 17 2. - 0 - -0.0182554405182600 - 0.6496108770370483 - 0.4757137000560761 - <_> - - <_> - - - - <_>1 11 4 3 -1. - <_>1 12 4 1 3. - 0 - -6.2736468389630318e-003 - 0.2343741059303284 - 1 - <_> - - - - <_>9 11 1 3 -1. - <_>9 12 1 1 3. - 0 - 2.4320168886333704e-003 - 0.4620118141174316 - 0.6898419260978699 - <_> - - <_> - - - - <_>10 9 6 7 -1. - <_>10 9 3 7 2. - 0 - -0.0496176294982433 - 0.2100719958543778 - 1 - <_> - - - - <_>8 15 4 2 -1. - <_>8 16 4 1 2. - 0 - 1.1701210169121623e-003 - 0.4621528983116150 - 0.5797135829925537 - <_> - - <_> - - - - <_>4 9 6 7 -1. - <_>7 9 3 7 2. - 0 - -0.0452372916042805 - 0.2118262052536011 - 1 - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 4.7563421539962292e-003 - 0.4884614944458008 - 0.6872498989105225 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>10 2 10 1 2. - <_>0 3 10 1 2. - 0 - -0.0148359695449471 - 1 - 0.5275105834007263 - <_> - - - - <_>6 7 8 2 -1. - <_>6 8 8 1 2. - 0 - 7.7436608262360096e-004 - 0.4172320961952210 - 0.5491139888763428 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>0 2 10 1 2. - <_>10 3 10 1 2. - 0 - 0.0148359695449471 - 1 - 0.2124876976013184 - <_> - - - - <_>3 1 2 10 -1. - <_>3 1 1 5 2. - <_>4 6 1 5 2. - 0 - -8.0892542609944940e-004 - 0.5495215058326721 - 0.4207795858383179 - <_> - - <_> - - - - <_>13 4 1 10 -1. - <_>13 9 1 5 2. - 0 - 7.7517668250948191e-004 - 0.3321942090988159 - 1 - <_> - - - - <_>9 8 4 3 -1. - <_>9 9 4 1 3. - 0 - -6.7618978209793568e-003 - 0.2212958037853241 - 0.5232653021812439 - <_> - - <_> - - - - <_>2 11 16 4 -1. - <_>2 11 8 2 2. - <_>10 13 8 2 2. - 0 - -0.0401358604431152 - 0.1101796030998230 - 1 - <_> - - - - <_>5 1 3 5 -1. - <_>6 1 1 5 3. - 0 - -3.3651469275355339e-003 - 0.3810100853443146 - 0.5617291927337647 - <_> - - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - 7.4713007779791951e-004 - 1 - 0.5795056819915772 - <_> - - - - <_>9 11 2 2 -1. - <_>9 12 2 1 2. - 0 - -4.2727389372885227e-003 - 0.6392269134521484 - 0.4711438119411469 - <_> - - <_> - - - - <_>0 10 20 2 -1. - <_>0 11 20 1 2. - 0 - 3.6202510818839073e-003 - 1 - 0.3409883975982666 - <_> - - - - <_>1 7 6 4 -1. - <_>1 7 3 2 2. - <_>4 9 3 2 2. - 0 - 4.7307618660852313e-004 - 0.3659302890300751 - 0.5388171076774597 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0330949090421200 - 1 - 0.7170385718345642 - <_> - - - - <_>14 1 6 4 -1. - <_>16 1 2 4 3. - 0 - -0.0115441195666790 - 0.6386818289756775 - 0.4681304097175598 - <_> - - <_> - - - - <_>6 3 2 14 -1. - <_>6 10 2 7 2. - 0 - -7.4234469793736935e-003 - 0.3263700902462006 - 1 - <_> - - - - <_>6 1 7 12 -1. - <_>6 7 7 6 2. - 0 - -4.2252950370311737e-003 - 0.5767819285392761 - 0.4346418082714081 - <_> - - <_> - - - - <_>5 0 15 5 -1. - <_>10 0 5 5 3. - 0 - 0.0181331094354391 - 0.4697827994823456 - 1 - <_> - - - - <_>15 0 4 10 -1. - <_>15 0 2 10 2. - 0 - 7.0903049781918526e-003 - 0.4437389075756073 - 0.6061668992042542 - <_> - - <_> - - - - <_>1 0 18 3 -1. - <_>7 0 6 3 3. - 0 - -0.0132729401811957 - 0.6558511257171631 - 1 - <_> - - - - <_>0 0 17 2 -1. - <_>0 1 17 1 2. - 0 - 1.4632199599873275e-004 - 0.3376353979110718 - 0.5091655254364014 - <_> - - <_> - - - - <_>10 0 3 3 -1. - <_>11 0 1 3 3. - 0 - -3.5790191031992435e-003 - 0.2947883903980255 - 1 - <_> - - - - <_>10 0 3 12 -1. - <_>11 0 1 12 3. - 0 - -4.6997101162560284e-004 - 0.5556982159614563 - 0.4665456116199493 - <_> - - <_> - - - - <_>1 3 4 16 -1. - <_>1 3 2 8 2. - <_>3 11 2 8 2. - 0 - -0.0481794402003288 - 0.7338355779647827 - 1 - <_> - - - - <_>7 0 3 3 -1. - <_>8 0 1 3 3. - 0 - -9.2581362696364522e-004 - 0.3543871939182282 - 0.5285149812698364 - <_> - - <_> - - - - <_>9 13 2 6 -1. - <_>9 16 2 3 2. - 0 - -0.0147807300090790 - 0.1944441944360733 - 1 - <_> - - - - <_>9 0 6 13 -1. - <_>11 0 2 13 3. - 0 - -0.1002745032310486 - 0.0990492925047874 - 0.5139853954315186 - <_> - - <_> - - - - <_>7 7 3 2 -1. - <_>8 7 1 2 3. - 0 - -9.3848101096227765e-004 - 0.5827109813690186 - 1 - <_> - - - - <_>8 2 1 12 -1. - <_>8 6 1 4 3. - 0 - -2.8861360624432564e-003 - 0.3441427946090698 - 0.5148838758468628 - <_> - - <_> - - - - <_>4 10 12 6 -1. - <_>10 10 6 3 2. - <_>4 13 6 3 2. - 0 - -0.0436827614903450 - 1 - 0.5207998156547546 - <_> - - - - <_>13 5 2 3 -1. - <_>13 6 2 1 3. - 0 - 2.6115700602531433e-003 - 0.4835503101348877 - 0.6322219967842102 - <_> - - <_> - - - - <_>4 10 12 6 -1. - <_>4 10 6 3 2. - <_>10 13 6 3 2. - 0 - 0.0436827614903450 - 1 - 0.1364538073539734 - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - 1.7179530113935471e-003 - 0.4537320137023926 - 0.6066750884056091 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0339649096131325 - 1 - 0.4968374967575073 - <_> - - - - <_>9 6 2 4 -1. - <_>9 6 1 4 2. - 0 - -1.0993590112775564e-003 - 0.5831680893898010 - 0.4688239991664887 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0543010793626308 - 1 - 0.7568289041519165 - <_> - - - - <_>9 6 2 4 -1. - <_>10 6 1 4 2. - 0 - 1.0993590112775564e-003 - 0.4330148100852966 - 0.5768468976020813 - <_> - - <_> - - - - <_>12 9 2 3 -1. - <_>12 9 1 3 2. - 0 - -1.4954120160837192e-005 - 1 - 0.4443281888961792 - <_> - - - - <_>0 6 20 1 -1. - <_>0 6 10 1 2. - 0 - 0.0314158685505390 - 0.5274472832679749 - 0.3037855923175812 - <_> - - <_> - - - - <_>5 7 10 2 -1. - <_>10 7 5 2 2. - 0 - 0.0108318496495485 - 1 - 0.3581720888614655 - <_> - - - - <_>1 16 4 3 -1. - <_>1 17 4 1 3. - 0 - 8.6545711383223534e-004 - 0.5937584042549133 - 0.4294629991054535 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 2.2743160370737314e-003 - 1 - 0.5954576730728149 - <_> - - - - <_>10 3 5 3 -1. - <_>10 4 5 1 3. - 0 - 3.9340821094810963e-003 - 0.4792222976684570 - 0.5856133103370667 - <_> - - <_> - - - - <_>3 9 14 8 -1. - <_>3 9 7 4 2. - <_>10 13 7 4 2. - 0 - 8.1451907753944397e-003 - 1 - 0.3573477864265442 - <_> - - - - <_>6 8 8 10 -1. - <_>6 8 4 5 2. - <_>10 13 4 5 2. - 0 - -5.2763288840651512e-003 - 0.4026022851467133 - 0.5764743089675903 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -8.3787851035594940e-003 - 1 - 0.4981333017349243 - <_> - - - - <_>10 3 5 3 -1. - <_>10 4 5 1 3. - 0 - 1.5621910570189357e-003 - 0.4736588001251221 - 0.5583608150482178 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - 3.2318739686161280e-003 - 1 - 0.6167436838150024 - <_> - - - - <_>5 3 5 3 -1. - <_>5 4 5 1 3. - 0 - 6.6804019734263420e-003 - 0.4131424129009247 - 0.6280695199966431 - <_> - - <_> - - - - <_>13 16 2 3 -1. - <_>13 17 2 1 3. - 0 - -3.3396480139344931e-003 - 0.3446358144283295 - 1 - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - -0.2093348056077957 - 0.1038658022880554 - 0.5204489231109619 - <_> - - <_> - - - - <_>3 14 3 3 -1. - <_>3 15 3 1 3. - 0 - 6.3805822283029556e-003 - 1 - 0.2167402058839798 - <_> - - - - <_>7 15 5 3 -1. - <_>7 16 5 1 3. - 0 - -6.0137799009680748e-003 - 0.6738399267196655 - 0.4896650910377502 - <_> - - <_> - - - - <_>12 9 2 3 -1. - <_>12 9 1 3 2. - 0 - -8.1756077706813812e-003 - 1 - 0.5177915096282959 - <_> - - - - <_>15 13 2 6 -1. - <_>15 13 1 6 2. - 0 - 6.3951779156923294e-004 - 0.4819645881652832 - 0.5464438199996948 - <_> - - <_> - - - - <_>6 9 2 3 -1. - <_>7 9 1 3 2. - 0 - 1.0127760469913483e-003 - 1 - 0.3423596024513245 - <_> - - - - <_>3 13 2 6 -1. - <_>4 13 1 6 2. - 0 - 4.9784599104896188e-004 - 0.4488461017608643 - 0.5912671089172363 - <_> - - <_> - - - - <_>11 4 2 4 -1. - <_>11 4 1 4 2. - 0 - 1.3596490316558629e-004 - 1 - 0.5568863153457642 - <_> - - - - <_>13 4 2 5 -1. - <_>13 4 1 5 2. - 0 - 0.0135716600343585 - 0.5161067843437195 - 0.1713000982999802 - <_> - - <_> - - - - <_>7 4 2 4 -1. - <_>8 4 1 4 2. - 0 - 3.0259079721872695e-005 - 1 - 0.4916203916072846 - <_> - - - - <_>5 4 2 5 -1. - <_>6 4 1 5 2. - 0 - -3.2625840976834297e-003 - 0.6404662728309631 - 0.2859084904193878 - <_> - - <_> - - - - <_>19 6 1 2 -1. - <_>19 7 1 1 2. - 0 - -1.9217010412830859e-004 - 1 - 0.5459282994270325 - <_> - - - - <_>12 7 8 13 -1. - <_>12 7 4 13 2. - 0 - 0.0219938792288303 - 0.4715713858604431 - 0.5690075159072876 - <_> - - <_> - - - - <_>0 6 1 2 -1. - <_>0 7 1 1 2. - 0 - 7.8907777788117528e-004 - 1 - 0.3279826939105988 - <_> - - - - <_>6 15 4 3 -1. - <_>6 16 4 1 3. - 0 - 5.0893891602754593e-004 - 0.4302007853984833 - 0.5696045160293579 - <_> - - <_> - - - - <_>11 8 2 2 -1. - <_>11 9 2 1 2. - 0 - 1.1662710312521085e-004 - 1 - 0.5387235283851624 - <_> - - - - <_>11 7 2 4 -1. - <_>11 7 1 4 2. - 0 - 8.0604078248143196e-003 - 0.5021423101425171 - 0.5965322256088257 - <_> - - <_> - - - - <_>4 13 2 3 -1. - <_>4 14 2 1 3. - 0 - 9.5925969071686268e-004 - 1 - 0.3473494052886963 - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - -0.0195261295884848 - 0.6475545167922974 - 0.4643782079219818 - 36.7265014648437500 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 18 5 -1. - <_>7 0 6 5 3. - 0 - 0.0412424392998219 - 0.3393315076828003 - 1 - <_> - - - - <_>5 7 3 4 -1. - <_>5 9 3 2 2. - 0 - 0.0156267099082470 - 0.5104100108146668 - 0.7772815227508545 - <_> - - <_> - - - - <_>10 6 2 2 -1. - <_>10 6 1 2 2. - 0 - 2.9947189614176750e-004 - 0.3664673864841461 - 1 - <_> - - - - <_>6 4 14 4 -1. - <_>13 4 7 2 2. - <_>6 6 7 2 2. - 0 - -1.0037609608843923e-003 - 0.5405650734901428 - 0.3926205039024353 - <_> - - <_> - - - - <_>5 16 6 4 -1. - <_>5 16 3 2 2. - <_>8 18 3 2 2. - 0 - 6.8128242855891585e-004 - 0.4251519143581390 - 1 - <_> - - - - <_>7 15 2 4 -1. - <_>7 17 2 2 2. - 0 - 1.3098999625071883e-004 - 0.4135144948959351 - 0.6925746202468872 - <_> - - <_> - - - - <_>8 5 5 14 -1. - <_>8 12 5 7 2. - 0 - 3.1696720980107784e-003 - 1 - 0.3455873131752014 - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -2.0587369799613953e-003 - 0.2234193980693817 - 0.5286118984222412 - <_> - - <_> - - - - <_>7 5 3 7 -1. - <_>8 5 1 7 3. - 0 - -4.6395038953050971e-004 - 1 - 0.4206520020961762 - <_> - - - - <_>0 0 3 9 -1. - <_>0 3 3 3 3. - 0 - 3.5089480224996805e-003 - 0.6502981781959534 - 0.4117597937583923 - <_> - - <_> - - - - <_>8 6 8 8 -1. - <_>12 6 4 4 2. - <_>8 10 4 4 2. - 0 - -2.3975980002433062e-003 - 1 - 0.3673301041126251 - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 1.0901279747486115e-003 - 0.2906238138675690 - 0.5445111989974976 - <_> - - <_> - - - - <_>4 3 6 1 -1. - <_>6 3 2 1 3. - 0 - -1.6524370585102588e-004 - 0.4233515858650208 - 1 - <_> - - - - <_>9 1 2 6 -1. - <_>9 3 2 2 3. - 0 - -4.1602319106459618e-004 - 0.3886361122131348 - 0.6269165873527527 - <_> - - <_> - - - - <_>10 5 6 4 -1. - <_>12 5 2 4 3. - 0 - -2.3739910102449358e-004 - 0.5524451136589050 - 1 - <_> - - - - <_>9 5 2 12 -1. - <_>9 9 2 4 3. - 0 - 0.0247397609055042 - 0.4960095882415772 - 0.5373491048812866 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - -0.0153428399935365 - 0.6849405169487000 - 1 - <_> - - - - <_>8 12 4 3 -1. - <_>8 13 4 1 3. - 0 - 0.0115404697135091 - 0.4037235081195831 - 0.6786940097808838 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>12 3 2 7 3. - 0 - 6.4230621792376041e-003 - 1 - 0.3814676105976105 - <_> - - - - <_>3 10 16 6 -1. - <_>3 12 16 2 3. - 0 - 0.0129778096452355 - 0.5527058839797974 - 0.3744955956935883 - <_> - - <_> - - - - <_>5 5 3 10 -1. - <_>5 10 3 5 2. - 0 - 1.1063399724662304e-003 - 0.3520928919315338 - 1 - <_> - - - - <_>6 10 3 6 -1. - <_>6 13 3 3 2. - 0 - 1.3743690215051174e-003 - 0.5641903281211853 - 0.3075025975704193 - <_> - - <_> - - - - <_>17 2 2 12 -1. - <_>17 2 1 12 2. - 0 - 0.0162337794899940 - 0.4888828098773956 - 1 - <_> - - - - <_>16 6 2 14 -1. - <_>16 13 2 7 2. - 0 - -8.1519351806491613e-004 - 0.5456321239471436 - 0.4743550121784210 - <_> - - <_> - - - - <_>3 11 12 9 -1. - <_>3 14 12 3 3. - 0 - -0.0907824933528900 - 0.2925248146057129 - 1 - <_> - - - - <_>0 2 4 12 -1. - <_>2 2 2 12 2. - 0 - 0.0116652101278305 - 0.4688454866409302 - 0.6230347752571106 - <_> - - <_> - - - - <_>18 0 2 18 -1. - <_>18 0 1 18 2. - 0 - -0.0232864096760750 - 0.6895843148231506 - 1 - <_> - - - - <_>16 12 3 2 -1. - <_>16 13 3 1 2. - 0 - 2.1559339947998524e-003 - 0.5355802178382874 - 0.3423466086387634 - <_> - - <_> - - - - <_>0 2 2 15 -1. - <_>1 2 1 15 2. - 0 - -4.3167220428586006e-003 - 0.5937076210975647 - 1 - <_> - - - - <_>1 10 2 4 -1. - <_>1 12 2 2 2. - 0 - 1.5610599657520652e-003 - 0.4708659946918488 - 0.2736997008323669 - <_> - - <_> - - - - <_>11 1 2 18 -1. - <_>11 1 1 18 2. - 0 - 0.0140766398981214 - 0.5287156105041504 - 1 - <_> - - - - <_>3 2 14 2 -1. - <_>10 2 7 1 2. - <_>3 3 7 1 2. - 0 - 7.1018589660525322e-003 - 0.5336192846298218 - 0.3224813938140869 - <_> - - <_> - - - - <_>7 1 2 18 -1. - <_>8 1 1 18 2. - 0 - -4.8221647739410400e-003 - 0.2983910143375397 - 1 - <_> - - - - <_>6 1 8 12 -1. - <_>6 7 8 6 2. - 0 - -5.3852899000048637e-003 - 0.5623999238014221 - 0.4295912086963654 - <_> - - <_> - - - - <_>8 14 4 3 -1. - <_>8 15 4 1 3. - 0 - 7.3483278974890709e-003 - 1 - 0.6813961267471314 - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -3.5707519855350256e-003 - 0.5857968926429749 - 0.4603429138660431 - <_> - - <_> - - - - <_>0 13 5 2 -1. - <_>0 14 5 1 2. - 0 - 2.3340100888162851e-003 - 1 - 0.2744851112365723 - <_> - - - - <_>9 0 2 6 -1. - <_>9 0 1 3 2. - <_>10 3 1 3 2. - 0 - 4.7432780265808105e-003 - 0.5047526955604553 - 0.2362741976976395 - <_> - - <_> - - - - <_>9 0 2 6 -1. - <_>10 0 1 3 2. - <_>9 3 1 3 2. - 0 - 6.5055489540100098e-003 - 0.5242248177528381 - 1 - <_> - - - - <_>9 7 3 6 -1. - <_>10 7 1 6 3. - 0 - 0.0125892497599125 - 0.4823690950870514 - 0.6752536892890930 - <_> - - <_> - - - - <_>9 0 2 6 -1. - <_>9 0 1 3 2. - <_>10 3 1 3 2. - 0 - -6.3358368352055550e-003 - 0.1734634935855866 - 1 - <_> - - - - <_>8 7 3 6 -1. - <_>9 7 1 6 3. - 0 - -5.7639651931822300e-003 - 0.6354380846023560 - 0.4587475061416626 - <_> - - <_> - - - - <_>9 6 2 6 -1. - <_>9 6 1 6 2. - 0 - 1.3599749654531479e-003 - 0.4580380916595459 - 1 - <_> - - - - <_>9 4 4 3 -1. - <_>9 4 2 3 2. - 0 - 0.0284042600542307 - 0.5176380872726440 - 0.1204385012388229 - <_> - - <_> - - - - <_>0 4 4 3 -1. - <_>0 5 4 1 3. - 0 - -9.2958156019449234e-003 - 0.2337957024574280 - 1 - <_> - - - - <_>8 7 4 2 -1. - <_>8 8 4 1 2. - 0 - -1.1800320353358984e-003 - 0.3902814090251923 - 0.5652930140495300 - <_> - - <_> - - - - <_>10 6 6 3 -1. - <_>12 6 2 3 3. - 0 - -2.0948140881955624e-003 - 0.5512028932571411 - 1 - <_> - - - - <_>9 6 3 12 -1. - <_>9 10 3 4 3. - 0 - 4.1679958812892437e-003 - 0.5455976128578186 - 0.4798949062824249 - <_> - - <_> - - - - <_>5 4 2 3 -1. - <_>5 5 2 1 3. - 0 - 5.4458891972899437e-003 - 1 - 0.6127086877822876 - <_> - - - - <_>5 6 1 3 -1. - <_>5 7 1 1 3. - 0 - -1.2766510481014848e-003 - 0.5317131876945496 - 0.3850932121276856 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - 5.9404270723462105e-004 - 0.5446437001228333 - 1 - <_> - - - - <_>0 7 20 2 -1. - <_>0 8 20 1 2. - 0 - 0.0423096083104610 - 0.5234643816947937 - 0.2213044017553330 - <_> - - <_> - - - - <_>4 3 6 7 -1. - <_>6 3 2 7 3. - 0 - 5.6189671158790588e-003 - 0.4916197955608368 - 1 - <_> - - - - <_>5 10 6 10 -1. - <_>5 10 3 5 2. - <_>8 15 3 5 2. - 0 - 7.2401198558509350e-003 - 0.1471475958824158 - 0.4852893948554993 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -4.5610670931637287e-003 - 0.2773773968219757 - 1 - <_> - - - - <_>9 10 2 2 -1. - <_>9 11 2 1 2. - 0 - 4.5506159949582070e-005 - 0.4626461863517761 - 0.5768079161643982 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - -6.1903791502118111e-003 - 0.1644289940595627 - 1 - <_> - - - - <_>5 6 1 3 -1. - <_>5 7 1 1 3. - 0 - 8.1186462193727493e-004 - 0.4778591096401215 - 0.6261864900588989 - <_> - - <_> - - - - <_>0 1 20 2 -1. - <_>10 1 10 1 2. - <_>0 2 10 1 2. - 0 - 0.0137798096984625 - 0.5257307887077332 - 1 - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 1.1290319962427020e-003 - 0.5498048067092896 - 0.3983106911182404 - <_> - - <_> - - - - <_>5 3 3 2 -1. - <_>5 4 3 1 2. - 0 - -1.0610350000206381e-004 - 0.4033519029617310 - 1 - <_> - - - - <_>5 4 4 2 -1. - <_>7 4 2 2 2. - 0 - 1.6695790691301227e-004 - 0.4149340093135834 - 0.5795341134071350 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 1.1290319962427020e-003 - 1 - 0.3934114873409271 - <_> - - - - <_>0 12 20 6 -1. - <_>0 14 20 2 3. - 0 - -0.1201934963464737 - 0.0734004825353622 - 0.5202586054801941 - <_> - - <_> - - - - <_>2 2 16 4 -1. - <_>2 2 8 2 2. - <_>10 4 8 2 2. - 0 - -0.0152307404205203 - 0.3749505877494812 - 1 - <_> - - - - <_>7 12 5 3 -1. - <_>7 13 5 1 3. - 0 - 3.5759829916059971e-003 - 0.5078150033950806 - 0.6606066226959229 - <_> - - <_> - - - - <_>14 9 6 10 -1. - <_>14 9 3 10 2. - 0 - 0.0134794600307941 - 0.4547711014747620 - 1 - <_> - - - - <_>16 6 3 2 -1. - <_>16 7 3 1 2. - 0 - -2.1162950433790684e-003 - 0.3311006128787994 - 0.5384259223937988 - <_> - - <_> - - - - <_>0 9 6 10 -1. - <_>3 9 3 10 2. - 0 - -0.0178777091205120 - 0.6513252854347229 - 1 - <_> - - - - <_>0 16 5 2 -1. - <_>0 17 5 1 2. - 0 - 1.0931970318779349e-003 - 0.5264765024185181 - 0.3456991016864777 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -3.0553159303963184e-003 - 0.6268613934516907 - 1 - <_> - - - - <_>9 7 2 12 -1. - <_>9 11 2 4 3. - 0 - 3.6365049891173840e-003 - 0.5399212837219238 - 0.4345397055149078 - <_> - - <_> - - - - <_>3 2 6 2 -1. - <_>5 2 2 2 3. - 0 - 9.7896481747739017e-005 - 0.3835605978965759 - 1 - <_> - - - - <_>4 1 1 2 -1. - <_>4 2 1 1 2. - 0 - -3.2714448752813041e-004 - 0.3337667882442474 - 0.5539165735244751 - <_> - - <_> - - - - <_>11 15 1 2 -1. - <_>11 16 1 1 2. - 0 - 4.3425030889920890e-004 - 1 - 0.5788270235061646 - <_> - - - - <_>3 1 16 2 -1. - <_>11 1 8 1 2. - <_>3 2 8 1 2. - 0 - 0.0140055799856782 - 0.5275077819824219 - 0.2701125144958496 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - -9.2654931358993053e-004 - 0.5852280259132385 - 1 - <_> - - - - <_>5 11 10 6 -1. - <_>5 11 5 3 2. - <_>10 14 5 3 2. - 0 - 3.9504268206655979e-003 - 0.4728336930274963 - 0.3313918113708496 - <_> - - <_> - - - - <_>10 11 4 6 -1. - <_>10 14 4 3 2. - 0 - -5.8086868375539780e-004 - 1 - 0.4258810877799988 - <_> - - - - <_>14 9 6 11 -1. - <_>16 9 2 11 3. - 0 - -0.0120180202648044 - 0.5609787106513977 - 0.4895192086696625 - <_> - - <_> - - - - <_>0 9 6 11 -1. - <_>2 9 2 11 3. - 0 - -0.1452154070138931 - 0.0438944809138775 - 1 - <_> - - - - <_>2 11 16 6 -1. - <_>2 11 8 3 2. - <_>10 14 8 3 2. - 0 - -6.6049019806087017e-003 - 0.4229170978069305 - 0.5616292953491211 - <_> - - <_> - - - - <_>12 0 8 10 -1. - <_>16 0 4 5 2. - <_>12 5 4 5 2. - 0 - -0.0349097512662411 - 1 - 0.4788128137588501 - <_> - - - - <_>14 2 6 4 -1. - <_>16 2 2 4 3. - 0 - 3.7478420417755842e-003 - 0.4800282120704651 - 0.5801389217376709 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 0 4 5 2. - <_>4 5 4 5 2. - 0 - 0.0330380313098431 - 1 - 0.7078176140785217 - <_> - - - - <_>0 2 6 4 -1. - <_>2 2 2 4 3. - 0 - 3.6872599739581347e-003 - 0.4449624121189117 - 0.5957731008529663 - <_> - - <_> - - - - <_>4 9 15 2 -1. - <_>9 9 5 2 3. - 0 - -4.5311939902603626e-003 - 0.4177047014236450 - 1 - <_> - - - - <_>12 3 4 8 -1. - <_>14 3 2 4 2. - <_>12 7 2 4 2. - 0 - 4.1058510541915894e-003 - 0.5372948050498962 - 0.3736926913261414 - <_> - - <_> - - - - <_>9 2 2 9 -1. - <_>10 2 1 9 2. - 0 - -8.7599847465753555e-003 - 0.6658807992935181 - 1 - <_> - - - - <_>0 2 20 1 -1. - <_>10 2 10 1 2. - 0 - -0.0230033099651337 - 0.2647922039031982 - 0.5101817846298218 - <_> - - <_> - - - - <_>16 1 4 5 -1. - <_>16 1 2 5 2. - 0 - 5.3664818406105042e-003 - 0.4548634886741638 - 1 - <_> - - - - <_>16 0 4 6 -1. - <_>16 3 4 3 2. - 0 - 0.0389717705547810 - 0.5157061815261841 - 0.3436439037322998 - <_> - - <_> - - - - <_>4 3 6 4 -1. - <_>6 3 2 4 3. - 0 - -0.0277671907097101 - 0.2354391068220139 - 1 - <_> - - - - <_>0 0 18 5 -1. - <_>6 0 6 5 3. - 0 - -9.8894089460372925e-003 - 0.6887741088867188 - 0.5111051797866821 - <_> - - <_> - - - - <_>6 2 12 14 -1. - <_>12 2 6 7 2. - <_>6 9 6 7 2. - 0 - -3.2073140610009432e-003 - 0.5438867807388306 - 1 - <_> - - - - <_>11 8 3 5 -1. - <_>12 8 1 5 3. - 0 - -6.7484978353604674e-004 - 0.5451148748397827 - 0.4831353127956390 - <_> - - <_> - - - - <_>5 12 2 2 -1. - <_>5 13 2 1 2. - 0 - -5.1947520114481449e-003 - 0.2113419026136398 - 1 - <_> - - - - <_>5 10 4 3 -1. - <_>7 10 2 3 2. - 0 - -2.6169899501837790e-004 - 0.5273681879043579 - 0.3992587029933929 - <_> - - <_> - - - - <_>4 9 15 2 -1. - <_>9 9 5 2 3. - 0 - 2.2421479225158691e-003 - 0.4688260853290558 - 1 - <_> - - - - <_>10 7 6 2 -1. - <_>12 7 2 2 3. - 0 - -1.2139769969508052e-003 - 0.5504235029220581 - 0.4384871125221252 - <_> - - <_> - - - - <_>1 9 15 2 -1. - <_>6 9 5 2 3. - 0 - -2.9469770379364491e-003 - 0.3892847001552582 - 1 - <_> - - - - <_>5 0 2 10 -1. - <_>5 0 1 5 2. - <_>6 5 1 5 2. - 0 - -3.9291830034926534e-004 - 0.6001722812652588 - 0.4561662971973419 - <_> - - <_> - - - - <_>0 0 20 14 -1. - <_>0 7 20 7 2. - 0 - 0.6255072951316834 - 1 - 0.0681256130337715 - <_> - - - - <_>12 7 8 4 -1. - <_>12 7 4 4 2. - 0 - 9.7744520753622055e-003 - 0.4813025891780853 - 0.5620657205581665 - <_> - - <_> - - - - <_>0 7 8 4 -1. - <_>4 7 4 4 2. - 0 - 0.0943782478570938 - 1 - 0.0666322931647301 - <_> - - - - <_>8 1 3 3 -1. - <_>9 1 1 3 3. - 0 - -1.9560910295695066e-003 - 0.3588232994079590 - 0.5295407176017761 - <_> - - <_> - - - - <_>9 7 3 4 -1. - <_>10 7 1 4 3. - 0 - 9.0652769431471825e-003 - 0.4822688102722168 - 1 - <_> - - - - <_>9 9 3 1 -1. - <_>10 9 1 1 3. - 0 - 4.2138071148656309e-004 - 0.4670332968235016 - 0.5683112740516663 - <_> - - <_> - - - - <_>8 9 3 2 -1. - <_>8 10 3 1 2. - 0 - -4.4220191193744540e-004 - 1 - 0.5360795259475708 - <_> - - - - <_>8 4 2 8 -1. - <_>8 4 1 4 2. - <_>9 8 1 4 2. - 0 - -4.7313501127064228e-003 - 0.6137245893478394 - 0.3188089132308960 - <_> - - <_> - - - - <_>5 8 12 3 -1. - <_>5 9 12 1 3. - 0 - 1.5395509544759989e-003 - 0.4487720131874085 - 1 - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - 2.4315000046044588e-003 - 0.4894166886806488 - 0.6716653704643250 - <_> - - <_> - - - - <_>6 10 3 6 -1. - <_>6 12 3 2 3. - 0 - -0.0155816199257970 - 0.3336741924285889 - 1 - <_> - - - - <_>4 17 8 3 -1. - <_>4 18 8 1 3. - 0 - 1.0816920548677444e-003 - 0.4718219935894013 - 0.5960627198219299 - <_> - - <_> - - - - <_>17 6 2 3 -1. - <_>17 7 2 1 3. - 0 - -2.2197659127414227e-003 - 0.3588554859161377 - 1 - <_> - - - - <_>9 12 2 2 -1. - <_>10 12 1 1 2. - <_>9 13 1 1 2. - 0 - -9.3048671260476112e-004 - 0.6218712925910950 - 0.4817300140857697 - <_> - - <_> - - - - <_>9 13 2 4 -1. - <_>9 13 1 2 2. - <_>10 15 1 2 2. - 0 - -4.7418707981705666e-003 - 0.2550027072429657 - 1 - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - -6.2950369901955128e-003 - 0.6728078722953796 - 0.5051063895225525 - <_> - - <_> - - - - <_>5 5 12 10 -1. - <_>11 5 6 5 2. - <_>5 10 6 5 2. - 0 - 3.5216049291193485e-003 - 0.5401909947395325 - 1 - <_> - - - - <_>6 3 12 12 -1. - <_>12 3 6 6 2. - <_>6 9 6 6 2. - 0 - -2.4289379362016916e-003 - 0.5419461727142334 - 0.4347142875194550 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>5 7 1 1 2. - <_>6 8 1 1 2. - 0 - -2.5261470582336187e-003 - 0.6970624923706055 - 1 - <_> - - - - <_>4 3 3 2 -1. - <_>5 3 1 2 3. - 0 - -1.4817339833825827e-003 - 0.3263416886329651 - 0.4917873144149780 - <_> - - <_> - - - - <_>6 2 12 14 -1. - <_>12 2 6 7 2. - <_>6 9 6 7 2. - 0 - -0.2247453033924103 - 7.2937291115522385e-003 - 1 - <_> - - - - <_>5 2 12 3 -1. - <_>9 2 4 3 3. - 0 - 2.8342509176582098e-003 - 0.4579229950904846 - 0.5379881262779236 - <_> - - <_> - - - - <_>1 1 18 17 -1. - <_>7 1 6 17 3. - 0 - -0.0208216104656458 - 0.6024088859558106 - 1 - <_> - - - - <_>0 9 10 1 -1. - <_>5 9 5 1 2. - 0 - 1.4896340144332498e-004 - 0.3336144089698792 - 0.4962815940380096 - <_> - - <_> - - - - <_>16 8 4 3 -1. - <_>16 9 4 1 3. - 0 - -3.3524499740451574e-003 - 0.3558751046657562 - 1 - <_> - - - - <_>7 13 6 6 -1. - <_>7 16 6 3 2. - 0 - -0.0372798815369606 - 0.1698562949895859 - 0.5208985805511475 - <_> - - <_> - - - - <_>6 14 1 6 -1. - <_>6 16 1 2 3. - 0 - 1.3896770542487502e-004 - 1 - 0.5590686202049255 - <_> - - - - <_>6 17 4 2 -1. - <_>6 18 4 1 2. - 0 - -3.1912620761431754e-004 - 0.5848733782768250 - 0.3795836865901947 - <_> - - <_> - - - - <_>10 18 6 2 -1. - <_>13 18 3 1 2. - <_>10 19 3 1 2. - 0 - 5.4003461264073849e-004 - 1 - 0.5670288205146790 - <_> - - - - <_>16 8 1 3 -1. - <_>16 9 1 1 3. - 0 - 3.8956850767135620e-003 - 0.5182694792747498 - 0.3327709138393402 - <_> - - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 1.6084529925137758e-003 - 1 - 0.5410485863685608 - <_> - - - - <_>9 15 1 2 -1. - <_>9 16 1 1 2. - 0 - -5.7474587811157107e-004 - 0.6022642254829407 - 0.3644644021987915 - <_> - - <_> - - - - <_>13 0 3 12 -1. - <_>14 0 1 12 3. - 0 - 0.0134350396692753 - 1 - 0.3441281914710999 - <_> - - - - <_>15 11 1 3 -1. - <_>15 12 1 1 3. - 0 - 2.1368139423429966e-003 - 0.5292434096336365 - 0.2747075855731964 - <_> - - <_> - - - - <_>8 15 3 3 -1. - <_>8 16 3 1 3. - 0 - 0.0141576295718551 - 1 - 0.8027868270874023 - <_> - - - - <_>4 0 3 12 -1. - <_>5 0 1 12 3. - 0 - 5.3884391672909260e-003 - 0.5222315192222595 - 0.3586727976799011 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 8.8013410568237305e-003 - 0.4900386929512024 - 1 - <_> - - - - <_>9 9 3 1 -1. - <_>10 9 1 1 3. - 0 - 3.8858849438838661e-004 - 0.4681056141853333 - 0.5721952915191650 - <_> - - <_> - - - - <_>2 2 12 14 -1. - <_>2 2 6 7 2. - <_>8 9 6 7 2. - 0 - -2.2143588867038488e-003 - 0.5388805866241455 - 1 - <_> - - - - <_>4 2 12 3 -1. - <_>8 2 4 3 3. - 0 - -8.4642972797155380e-003 - 0.6675537824630737 - 0.3448441922664642 - <_> - - <_> - - - - <_>18 18 2 2 -1. - <_>18 18 1 2 2. - 0 - 0.0150443902239203 - 1 - 0.9239614009857178 - <_> - - - - <_>17 2 3 8 -1. - <_>18 2 1 8 3. - 0 - 7.6346402056515217e-003 - 0.4884896874427795 - 0.6306052803993225 - <_> - - <_> - - - - <_>0 18 2 2 -1. - <_>1 18 1 2 2. - 0 - 3.3895121305249631e-004 - 1 - 0.3997431099414825 - <_> - - - - <_>6 11 2 6 -1. - <_>6 14 2 3 2. - 0 - 2.1157610171940178e-004 - 0.5663982033729553 - 0.3972980976104736 - <_> - - <_> - - - - <_>13 10 5 6 -1. - <_>13 12 5 2 3. - 0 - -0.0275149494409561 - 1 - 0.5201063752174377 - <_> - - - - <_>5 8 15 3 -1. - <_>5 9 15 1 3. - 0 - 0.0516030602157116 - 0.5140730142593384 - 0.1245130971074104 - <_> - - <_> - - - - <_>2 10 5 6 -1. - <_>2 12 5 2 3. - 0 - 3.7510651163756847e-003 - 1 - 0.3802095055580139 - <_> - - - - <_>0 8 15 3 -1. - <_>0 9 15 1 3. - 0 - -2.1457639522850513e-003 - 0.3309448063373566 - 0.5474538803100586 - <_> - - <_> - - - - <_>16 2 3 1 -1. - <_>17 2 1 1 3. - 0 - -5.8178009930998087e-004 - 1 - 0.4892601966857910 - <_> - - - - <_>17 4 3 2 -1. - <_>18 4 1 2 3. - 0 - -9.3638541875407100e-004 - 0.5937399268150330 - 0.4664669036865234 - <_> - - <_> - - - - <_>0 8 8 12 -1. - <_>0 8 4 6 2. - <_>4 14 4 6 2. - 0 - 0.0416674911975861 - 1 - 0.7021353244781494 - <_> - - - - <_>1 7 8 6 -1. - <_>1 7 4 3 2. - <_>5 10 4 3 2. - 0 - -6.7763780243694782e-003 - 0.3222751021385193 - 0.5068395137786865 - <_> - - <_> - - - - <_>14 1 6 2 -1. - <_>16 1 2 2 3. - 0 - -2.9170580673962831e-003 - 1 - 0.4717701077461243 - <_> - - - - <_>15 0 4 4 -1. - <_>17 0 2 2 2. - <_>15 2 2 2 2. - 0 - 3.2789530814625323e-004 - 0.4509383141994476 - 0.5651162862777710 - 38.2360382080078130 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 4 11 -1. - <_>3 1 2 11 2. - 0 - 0.0117298001423478 - 0.3805224895477295 - 1 - <_> - - - - <_>5 5 1 8 -1. - <_>5 9 1 4 2. - 0 - 1.1712179984897375e-003 - 0.3140017986297607 - 0.6858146190643311 - <_> - - <_> - - - - <_>7 7 6 1 -1. - <_>9 7 2 1 3. - 0 - 9.3555096536874771e-003 - 1 - 0.6834673285484314 - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - 1.6570610459893942e-003 - 0.2992472946643829 - 0.5475677847862244 - <_> - - <_> - - - - <_>8 4 4 4 -1. - <_>8 6 4 2 2. - 0 - -1.3387809740379453e-003 - 1 - 0.2941406965255737 - <_> - - - - <_>2 4 9 1 -1. - <_>5 4 3 1 3. - 0 - 1.7580550047568977e-004 - 0.3896977901458740 - 0.5872970819473267 - <_> - - <_> - - - - <_>9 12 2 8 -1. - <_>9 16 2 4 2. - 0 - -2.9473248869180679e-003 - 0.3576571941375732 - 1 - <_> - - - - <_>3 8 14 12 -1. - <_>3 14 14 6 2. - 0 - 8.3220899105072021e-003 - 0.5232400894165039 - 0.3231087923049927 - <_> - - <_> - - - - <_>6 13 7 3 -1. - <_>6 14 7 1 3. - 0 - 7.4366689659655094e-003 - 1 - 0.6715673208236694 - <_> - - - - <_>5 9 6 3 -1. - <_>7 9 2 3 3. - 0 - -2.1322889369912446e-004 - 0.5470541715621948 - 0.3863396048545837 - <_> - - <_> - - - - <_>12 1 6 3 -1. - <_>12 2 6 1 3. - 0 - -7.8024631366133690e-003 - 0.2771460115909576 - 1 - <_> - - - - <_>8 12 6 2 -1. - <_>8 13 6 1 2. - 0 - 5.6611228501424193e-004 - 0.4689136147499085 - 0.5851963758468628 - <_> - - <_> - - - - <_>0 2 18 2 -1. - <_>0 2 9 1 2. - <_>9 3 9 1 2. - 0 - -9.2346500605344772e-003 - 0.2704397141933441 - 1 - <_> - - - - <_>6 10 3 6 -1. - <_>6 13 3 3 2. - 0 - -1.4676499631605111e-005 - 0.5622550249099731 - 0.3579317033290863 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 9.7007937729358673e-003 - 0.4173871874809265 - 1 - <_> - - - - <_>15 0 5 8 -1. - <_>15 4 5 4 2. - 0 - -3.5320650786161423e-003 - 0.4195013046264648 - 0.5549468994140625 - <_> - - <_> - - - - <_>7 16 6 4 -1. - <_>9 16 2 4 3. - 0 - 0.0216164104640484 - 1 - 0.2857390940189362 - <_> - - - - <_>2 11 14 4 -1. - <_>2 11 7 2 2. - <_>9 13 7 2 2. - 0 - 3.4567608963698149e-003 - 0.6024532914161682 - 0.4377507865428925 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>14 10 3 10 2. - 0 - 0.0229143202304840 - 0.4689350128173828 - 1 - <_> - - - - <_>9 8 10 12 -1. - <_>14 8 5 6 2. - <_>9 14 5 6 2. - 0 - 3.4328910987824202e-003 - 0.4664604961872101 - 0.5762562155723572 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>3 10 3 10 2. - 0 - -8.6510833352804184e-003 - 0.6381739974021912 - 1 - <_> - - - - <_>1 8 10 12 -1. - <_>1 8 5 6 2. - <_>6 14 5 6 2. - 0 - 1.4510039472952485e-003 - 0.3711487948894501 - 0.5530750751495361 - <_> - - <_> - - - - <_>9 3 6 1 -1. - <_>11 3 2 1 3. - 0 - 7.8191719949245453e-003 - 0.5264362096786499 - 1 - <_> - - - - <_>7 4 6 3 -1. - <_>9 4 2 3 3. - 0 - 2.0798550394829363e-004 - 0.3730512857437134 - 0.5445731282234192 - <_> - - <_> - - - - <_>5 3 6 1 -1. - <_>7 3 2 1 3. - 0 - -3.9962218143045902e-003 - 0.2438170015811920 - 1 - <_> - - - - <_>4 5 6 3 -1. - <_>6 5 2 3 3. - 0 - -1.5010139577498194e-005 - 0.5324671268463135 - 0.3682988882064819 - <_> - - <_> - - - - <_>9 16 3 3 -1. - <_>9 17 3 1 3. - 0 - -4.2428788729012012e-003 - 0.6481474041938782 - 1 - <_> - - - - <_>8 14 6 3 -1. - <_>8 15 6 1 3. - 0 - 9.1374982148408890e-003 - 0.4896158874034882 - 0.6558843255043030 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 0 4 6 2. - <_>10 6 4 6 2. - 0 - 8.8254585862159729e-003 - 1 - 0.3613870143890381 - <_> - - - - <_>4 12 2 3 -1. - <_>4 13 2 1 3. - 0 - 9.4092212384566665e-004 - 0.5502895712852478 - 0.3632518053054810 - <_> - - <_> - - - - <_>12 16 6 3 -1. - <_>12 17 6 1 3. - 0 - -0.0125033501535654 - 0.2261132001876831 - 1 - <_> - - - - <_>7 12 7 2 -1. - <_>7 13 7 1 2. - 0 - 8.6759645491838455e-003 - 0.4987890124320984 - 0.6847196221351624 - <_> - - <_> - - - - <_>2 16 6 3 -1. - <_>2 17 6 1 3. - 0 - -0.0104167601093650 - 0.2446299046278000 - 1 - <_> - - - - <_>0 7 16 6 -1. - <_>0 10 16 3 2. - 0 - 2.7432460337877274e-003 - 0.3511525094509125 - 0.5399826765060425 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - -4.2385691776871681e-003 - 0.6823673248291016 - 1 - <_> - - - - <_>9 7 3 5 -1. - <_>10 7 1 5 3. - 0 - 0.0183258708566427 - 0.4891580045223236 - 0.7135618925094605 - <_> - - <_> - - - - <_>0 5 20 10 -1. - <_>0 5 10 5 2. - <_>10 10 10 5 2. - 0 - -0.0243345405906439 - 0.3522521853446960 - 1 - <_> - - - - <_>3 1 4 2 -1. - <_>5 1 2 2 2. - 0 - 4.6469361404888332e-004 - 0.4049868881702423 - 0.5515825748443604 - <_> - - <_> - - - - <_>7 6 8 10 -1. - <_>11 6 4 5 2. - <_>7 11 4 5 2. - 0 - 3.4260009415447712e-003 - 1 - 0.4126769900321960 - <_> - - - - <_>17 6 3 2 -1. - <_>17 7 3 1 2. - 0 - -2.5827318895608187e-003 - 0.2899428904056549 - 0.5386431813240051 - <_> - - <_> - - - - <_>5 6 8 10 -1. - <_>5 6 4 5 2. - <_>9 11 4 5 2. - 0 - 1.0545699624344707e-003 - 1 - 0.3771344125270844 - <_> - - - - <_>5 12 10 6 -1. - <_>5 14 10 2 3. - 0 - -9.1257691383361816e-004 - 0.5827386975288391 - 0.4267556965351105 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 2.6589010376483202e-003 - 0.4688124954700470 - 1 - <_> - - - - <_>10 3 2 6 -1. - <_>11 3 1 3 2. - <_>10 6 1 3 2. - 0 - 4.8598358407616615e-003 - 0.4853922128677368 - 0.6163644790649414 - <_> - - <_> - - - - <_>0 4 3 3 -1. - <_>0 5 3 1 3. - 0 - 8.0638676881790161e-003 - 1 - 0.1749195009469986 - <_> - - - - <_>3 16 8 4 -1. - <_>3 16 4 2 2. - <_>7 18 4 2 2. - 0 - -7.5898370705544949e-003 - 0.6826189756393433 - 0.4894070029258728 - <_> - - <_> - - - - <_>8 13 5 2 -1. - <_>8 14 5 1 2. - 0 - 3.6368070868775249e-004 - 0.4614596068859100 - 1 - <_> - - - - <_>8 7 4 12 -1. - <_>8 11 4 4 3. - 0 - 0.0625949501991272 - 0.5183017253875732 - 0.2686696052551270 - <_> - - <_> - - - - <_>5 9 2 2 -1. - <_>6 9 1 2 2. - 0 - -4.9753207713365555e-003 - 0.1758466958999634 - 1 - <_> - - - - <_>9 15 2 3 -1. - <_>9 16 2 1 3. - 0 - -2.0880119409412146e-003 - 0.6369382143020630 - 0.4930044114589691 - <_> - - <_> - - - - <_>13 9 2 3 -1. - <_>13 9 1 3 2. - 0 - 9.5644511748105288e-004 - 1 - 0.4139398932456970 - <_> - - - - <_>14 0 6 17 -1. - <_>16 0 2 17 3. - 0 - -0.0317214615643024 - 0.6045557260513306 - 0.4816364049911499 - <_> - - <_> - - - - <_>5 10 2 2 -1. - <_>6 10 1 2 2. - 0 - 1.2898689601570368e-003 - 0.5450810790061951 - 1 - <_> - - - - <_>2 9 9 1 -1. - <_>5 9 3 1 3. - 0 - 9.8405163735151291e-003 - 0.2924000918865204 - 0.6699606180191040 - <_> - - <_> - - - - <_>9 11 2 3 -1. - <_>9 12 2 1 3. - 0 - 1.2237089686095715e-003 - 1 - 0.6282836794853210 - <_> - - - - <_>7 11 6 3 -1. - <_>7 12 6 1 3. - 0 - -8.4232585504651070e-003 - 0.5986570119857788 - 0.4852580130100250 - <_> - - <_> - - - - <_>0 6 3 2 -1. - <_>0 7 3 1 2. - 0 - -7.2726322105154395e-004 - 0.3340049088001251 - 1 - <_> - - - - <_>7 0 6 1 -1. - <_>9 0 2 1 3. - 0 - 4.6842931769788265e-003 - 0.5168923735618591 - 0.2679480016231537 - <_> - - <_> - - - - <_>9 16 3 3 -1. - <_>9 17 3 1 3. - 0 - -1.0379579616710544e-003 - 0.5925791859626770 - 1 - <_> - - - - <_>2 13 17 6 -1. - <_>2 16 17 3 2. - 0 - 9.1342730447649956e-003 - 0.5437728166580200 - 0.4346800148487091 - <_> - - <_> - - - - <_>1 3 3 7 -1. - <_>2 3 1 7 3. - 0 - 1.4971119817346334e-003 - 0.4129500985145569 - 1 - <_> - - - - <_>1 1 6 4 -1. - <_>3 1 2 4 3. - 0 - 1.5762320253998041e-003 - 0.4522874057292938 - 0.6556292176246643 - <_> - - <_> - - - - <_>14 1 6 5 -1. - <_>14 1 3 5 2. - 0 - 8.7496247142553329e-003 - 0.4532034099102020 - 1 - <_> - - - - <_>13 2 3 2 -1. - <_>13 3 3 1 2. - 0 - -8.5103599121794105e-004 - 0.3785983920097351 - 0.5416975021362305 - <_> - - <_> - - - - <_>0 1 6 5 -1. - <_>3 1 3 5 2. - 0 - -0.0173255708068609 - 0.6884248256683350 - 1 - <_> - - - - <_>2 3 2 6 -1. - <_>2 5 2 2 3. - 0 - -8.3266440778970718e-003 - 0.3091326057910919 - 0.5243654847145081 - <_> - - <_> - - - - <_>9 10 3 2 -1. - <_>9 11 3 1 2. - 0 - 1.5157909729168750e-005 - 0.4765793979167938 - 1 - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 1.8041470320895314e-003 - 0.4725385904312134 - 0.5716555118560791 - <_> - - <_> - - - - <_>6 3 3 1 -1. - <_>7 3 1 1 3. - 0 - 3.0691560823470354e-003 - 1 - 0.2143359929323196 - <_> - - - - <_>8 2 3 12 -1. - <_>8 6 3 4 3. - 0 - -5.2225510444259271e-005 - 0.5653210282325745 - 0.4385111033916473 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - 1.0072169970953837e-004 - 1 - 0.5924776196479797 - <_> - - - - <_>11 12 2 2 -1. - <_>12 12 1 1 2. - <_>11 13 1 1 2. - 0 - 1.3573700562119484e-004 - 0.4573448896408081 - 0.5769382715225220 - <_> - - <_> - - - - <_>5 5 2 2 -1. - <_>5 6 2 1 2. - 0 - 9.2137878527864814e-004 - 1 - 0.5992609262466431 - <_> - - - - <_>5 4 1 3 -1. - <_>5 5 1 1 3. - 0 - 3.0316581251099706e-004 - 0.3610081076622009 - 0.5049325823783875 - <_> - - <_> - - - - <_>3 11 16 4 -1. - <_>11 11 8 2 2. - <_>3 13 8 2 2. - 0 - 0.0395824797451496 - 1 - 0.1538489013910294 - <_> - - - - <_>0 10 20 3 -1. - <_>0 11 20 1 3. - 0 - 0.0475196801126003 - 0.5216140747070313 - 0.1428391039371491 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 0.0188717599958181 - 1 - 0.2825506925582886 - <_> - - - - <_>4 2 4 2 -1. - <_>4 3 4 1 2. - 0 - -3.9876459049992263e-004 - 0.4035016894340515 - 0.5437793135643005 - <_> - - <_> - - - - <_>12 6 2 2 -1. - <_>13 6 1 1 2. - <_>12 7 1 1 2. - 0 - 4.6556600136682391e-004 - 0.4668996930122376 - 1 - <_> - - - - <_>12 11 6 6 -1. - <_>12 13 6 2 3. - 0 - 6.7090610973536968e-003 - 0.5331354737281799 - 0.4136571884155273 - <_> - - <_> - - - - <_>6 6 2 2 -1. - <_>6 6 1 1 2. - <_>7 7 1 1 2. - 0 - -1.8931160448119044e-003 - 0.7155163288116455 - 1 - <_> - - - - <_>6 4 4 16 -1. - <_>8 4 2 16 2. - 0 - -0.0130569497123361 - 0.3117899894714356 - 0.5208439826965332 - <_> - - <_> - - - - <_>11 18 3 2 -1. - <_>11 19 3 1 2. - 0 - -1.9484119547996670e-004 - 1 - 0.4637658894062042 - <_> - - - - <_>9 17 6 2 -1. - <_>12 17 3 1 2. - <_>9 18 3 1 2. - 0 - 1.5093220099515747e-005 - 0.4561653137207031 - 0.5445234179496765 - <_> - - <_> - - - - <_>2 13 5 2 -1. - <_>2 14 5 1 2. - 0 - -7.1617960202274844e-006 - 1 - 0.4193108081817627 - <_> - - - - <_>3 15 2 2 -1. - <_>3 16 2 1 2. - 0 - 3.0164679628796875e-004 - 0.5966237783432007 - 0.4100500047206879 - <_> - - <_> - - - - <_>9 7 3 3 -1. - <_>10 7 1 3 3. - 0 - 4.4195181690156460e-003 - 0.4845055937767029 - 1 - <_> - - - - <_>9 6 2 6 -1. - <_>9 6 1 6 2. - 0 - -7.3984181508421898e-003 - 0.6206846237182617 - 0.4931209087371826 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -7.8031201846897602e-003 - 1 - 0.5282462835311890 - <_> - - - - <_>8 1 2 11 -1. - <_>9 1 1 11 2. - 0 - -0.0107314297929406 - 0.9104834198951721 - 0.3455922007560730 - <_> - - <_> - - - - <_>9 7 2 4 -1. - <_>9 7 1 4 2. - 0 - 1.4246780192479491e-003 - 0.4708554148674011 - 1 - <_> - - - - <_>11 10 2 1 -1. - <_>11 10 1 1 2. - 0 - -8.2717568147927523e-005 - 0.5651623010635376 - 0.4731023907661438 - <_> - - <_> - - - - <_>0 3 3 9 -1. - <_>1 3 1 9 3. - 0 - 4.4803409837186337e-003 - 1 - 0.6175886988639832 - <_> - - - - <_>0 3 3 6 -1. - <_>0 5 3 2 3. - 0 - 3.0789140146225691e-003 - 0.5139533281326294 - 0.3423087894916534 - <_> - - <_> - - - - <_>11 15 2 2 -1. - <_>12 15 1 1 2. - <_>11 16 1 1 2. - 0 - -1.1310289846733212e-003 - 1 - 0.4918282032012940 - <_> - - - - <_>11 14 2 2 -1. - <_>12 14 1 1 2. - <_>11 15 1 1 2. - 0 - -1.0410690447315574e-003 - 0.5942087173461914 - 0.4923042953014374 - <_> - - <_> - - - - <_>7 15 2 2 -1. - <_>7 15 1 1 2. - <_>8 16 1 1 2. - 0 - 1.1648540385067463e-003 - 1 - 0.6405271887779236 - <_> - - - - <_>7 14 2 2 -1. - <_>7 14 1 1 2. - <_>8 15 1 1 2. - 0 - 9.0057362103834748e-004 - 0.4504396915435791 - 0.6192076802253723 - <_> - - <_> - - - - <_>8 13 4 6 -1. - <_>10 13 2 3 2. - <_>8 16 2 3 2. - 0 - 6.8781538866460323e-003 - 0.5374813079833984 - 1 - <_> - - - - <_>2 14 16 4 -1. - <_>10 14 8 2 2. - <_>2 16 8 2 2. - 0 - -0.0352839007973671 - 0.2247101068496704 - 0.5217170715332031 - <_> - - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - -1.3320200378075242e-003 - 0.2554703056812286 - 1 - <_> - - - - <_>7 7 5 3 -1. - <_>7 8 5 1 3. - 0 - -2.3177571129053831e-003 - 0.3792515993118286 - 0.5243226885795593 - <_> - - <_> - - - - <_>7 5 6 2 -1. - <_>9 5 2 2 3. - 0 - 2.1332940377760679e-004 - 0.3860337138175964 - 1 - <_> - - - - <_>9 1 6 18 -1. - <_>11 1 2 18 3. - 0 - 0.0134679004549980 - 0.5380687713623047 - 0.4178363978862763 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -1.2829169863834977e-003 - 0.6133623123168945 - 1 - <_> - - - - <_>8 5 2 4 -1. - <_>8 5 1 2 2. - <_>9 7 1 2 2. - 0 - 5.1571638323366642e-004 - 0.4028537869453430 - 0.5536851882934570 - <_> - - <_> - - - - <_>9 13 2 6 -1. - <_>10 13 1 3 2. - <_>9 16 1 3 2. - 0 - 3.9254198782145977e-003 - 0.5279921293258667 - 1 - <_> - - - - <_>11 0 3 18 -1. - <_>12 0 1 18 3. - 0 - -0.0337805896997452 - 0.2334675043821335 - 0.5175911784172058 - <_> - - <_> - - - - <_>6 0 3 18 -1. - <_>7 0 1 18 3. - 0 - -0.0378537215292454 - 0.1074853017926216 - 1 - <_> - - - - <_>5 15 4 2 -1. - <_>7 15 2 2 2. - 0 - -4.0752900531515479e-004 - 0.5345929861068726 - 0.4198938012123108 - <_> - - <_> - - - - <_>1 9 18 1 -1. - <_>7 9 6 1 3. - 0 - -3.1193809118121862e-003 - 0.3855825066566467 - 1 - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -0.0157149694859982 - 0.3335190117359161 - 0.5263202190399170 - <_> - - <_> - - - - <_>9 6 2 4 -1. - <_>10 6 1 4 2. - 0 - -7.8525702701881528e-004 - 0.5860397219657898 - 1 - <_> - - - - <_>6 10 6 2 -1. - <_>8 10 2 2 3. - 0 - -2.8750501223839819e-004 - 0.5437784790992737 - 0.3716104924678803 - <_> - - <_> - - - - <_>0 7 20 1 -1. - <_>0 7 10 1 2. - 0 - 0.0280168596655130 - 1 - 0.3330754935741425 - <_> - - - - <_>11 3 5 4 -1. - <_>11 5 5 2 2. - 0 - -1.9018839811906219e-003 - 0.5366597771644592 - 0.4693793952465057 - <_> - - <_> - - - - <_>5 7 10 1 -1. - <_>10 7 5 1 2. - 0 - 0.0206475593149662 - 1 - 0.1006956025958061 - <_> - - - - <_>8 10 3 3 -1. - <_>8 11 3 1 3. - 0 - 4.3002571910619736e-003 - 0.4816035926342011 - 0.6215677261352539 - <_> - - <_> - - - - <_>2 0 16 8 -1. - <_>10 0 8 4 2. - <_>2 4 8 4 2. - 0 - 0.0134591404348612 - 0.5461953878402710 - 1 - <_> - - - - <_>11 0 9 10 -1. - <_>11 5 9 5 2. - 0 - -0.0103200403973460 - 0.4578453004360199 - 0.5419309735298157 - <_> - - <_> - - - - <_>0 2 8 18 -1. - <_>4 2 4 18 2. - 0 - 0.3199074864387512 - 1 - 0.2008046954870224 - <_> - - - - <_>0 0 2 6 -1. - <_>0 2 2 2 3. - 0 - 9.2198798665776849e-004 - 0.5193281173706055 - 0.3912194073200226 - <_> - - <_> - - - - <_>6 0 9 2 -1. - <_>6 1 9 1 2. - 0 - 4.1852539288811386e-004 - 0.4299744069576263 - 1 - <_> - - - - <_>4 1 12 2 -1. - <_>4 2 12 1 2. - 0 - 3.5891108564101160e-004 - 0.4344502985477448 - 0.5531973838806152 - <_> - - <_> - - - - <_>2 1 16 14 -1. - <_>2 8 16 7 2. - 0 - -0.2099243998527527 - 0.1075721010565758 - 1 - <_> - - - - <_>5 1 8 12 -1. - <_>5 7 8 6 2. - 0 - -4.9328152090311050e-003 - 0.5762796998023987 - 0.4574643969535828 - <_> - - <_> - - - - <_>9 11 2 2 -1. - <_>9 12 2 1 2. - 0 - 2.3409130517393351e-003 - 1 - 0.7476807832717896 - <_> - - - - <_>9 10 5 6 -1. - <_>9 12 5 2 3. - 0 - 4.7120270319283009e-003 - 0.5261765122413635 - 0.4505550861358643 - <_> - - <_> - - - - <_>3 0 13 8 -1. - <_>3 4 13 4 2. - 0 - 0.0287131909281015 - 0.4407103061676025 - 1 - <_> - - - - <_>6 7 5 8 -1. - <_>6 11 5 4 2. - 0 - -2.6156550738960505e-003 - 0.4244270920753479 - 0.6892976760864258 - <_> - - <_> - - - - <_>9 5 2 3 -1. - <_>9 6 2 1 3. - 0 - -0.0135589698329568 - 0.1252267956733704 - 1 - <_> - - - - <_>6 8 8 3 -1. - <_>6 9 8 1 3. - 0 - -3.0331799644045532e-004 - 0.4077791869640350 - 0.5442817807197571 - <_> - - <_> - - - - <_>2 2 7 6 -1. - <_>2 5 7 3 2. - 0 - -5.5601762142032385e-004 - 0.5378003716468811 - 1 - <_> - - - - <_>2 1 14 4 -1. - <_>2 1 7 2 2. - <_>9 3 7 2 2. - 0 - 2.4025330785661936e-003 - 0.3166579902172089 - 0.5285738110542297 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - -3.4089901018887758e-003 - 1 - 0.4905214905738831 - <_> - - - - <_>6 15 8 2 -1. - <_>6 16 8 1 2. - 0 - 8.0019602319225669e-004 - 0.4522736072540283 - 0.5580614209175110 - <_> - - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - 2.1901070140302181e-003 - 1 - 0.6612681746482849 - <_> - - - - <_>8 11 2 8 -1. - <_>8 15 2 4 2. - 0 - 3.3745369873940945e-003 - 0.5107765197753906 - 0.3386929929256439 - <_> - - <_> - - - - <_>6 15 8 2 -1. - <_>6 16 8 1 2. - 0 - 8.0019602319225669e-004 - 1 - 0.5707560181617737 - <_> - - - - <_>7 16 8 3 -1. - <_>7 17 8 1 3. - 0 - 0.0173460692167282 - 0.5016021132469177 - 0.6306459903717041 - <_> - - <_> - - - - <_>0 16 2 2 -1. - <_>0 17 2 1 2. - 0 - -1.9568449351936579e-003 - 0.3017806112766266 - 1 - <_> - - - - <_>1 16 8 4 -1. - <_>1 16 4 2 2. - <_>5 18 4 2 2. - 0 - -0.0112290196120739 - 0.6293851137161255 - 0.4520488977432251 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>2 10 16 1 3. - 0 - -2.6608388870954514e-003 - 0.3344007134437561 - 1 - <_> - - - - <_>13 11 2 4 -1. - <_>13 11 1 4 2. - 0 - -0.0116151003167033 - 0.2825379073619843 - 0.5150970816612244 - <_> - - <_> - - - - <_>0 13 16 6 -1. - <_>0 15 16 2 3. - 0 - -0.0952486023306847 - 0.1398265063762665 - 1 - <_> - - - - <_>5 11 2 4 -1. - <_>6 11 1 4 2. - 0 - 7.3701781220734119e-003 - 0.5293998718261719 - 0.2331728041172028 - <_> - - <_> - - - - <_>18 2 2 18 -1. - <_>19 2 1 9 2. - <_>18 11 1 9 2. - 0 - -0.0149539001286030 - 1 - 0.4940465986728668 - <_> - - - - <_>19 7 1 9 -1. - <_>19 10 1 3 3. - 0 - 5.7038792874664068e-004 - 0.5466570854187012 - 0.4626767933368683 - <_> - - <_> - - - - <_>0 2 2 18 -1. - <_>0 2 1 9 2. - <_>1 11 1 9 2. - 0 - 5.8516198769211769e-003 - 1 - 0.6270040869712830 - <_> - - - - <_>0 7 1 9 -1. - <_>0 10 1 3 3. - 0 - 2.1150549582671374e-004 - 0.5508140921592712 - 0.4061872959136963 - <_> - - <_> - - - - <_>14 12 2 2 -1. - <_>14 13 2 1 2. - 0 - -6.9679190346505493e-006 - 1 - 0.4096567928791046 - <_> - - - - <_>11 14 2 3 -1. - <_>11 15 2 1 3. - 0 - -7.9677387839183211e-004 - 0.5615556836128235 - 0.4666886031627655 - <_> - - <_> - - - - <_>7 8 6 2 -1. - <_>7 9 6 1 2. - 0 - 0.0194594804197550 - 1 - 0.2311480939388275 - <_> - - - - <_>7 12 4 6 -1. - <_>7 12 2 3 2. - <_>9 15 2 3 2. - 0 - -0.0111608300358057 - 0.3087011873722076 - 0.5514662265777588 - <_> - - <_> - - - - <_>8 13 5 3 -1. - <_>8 14 5 1 3. - 0 - 0.0140561498701572 - 1 - 0.7005056142807007 - <_> - - - - <_>12 14 2 2 -1. - <_>13 14 1 1 2. - <_>12 15 1 1 2. - 0 - -3.2958350493572652e-004 - 0.5797485709190369 - 0.4691650867462158 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -5.4636420682072639e-003 - 0.5928595066070557 - 1 - <_> - - - - <_>7 13 5 2 -1. - <_>7 14 5 1 2. - 0 - 5.8881669247057289e-005 - 0.3741397857666016 - 0.5170168876647949 - <_> - - <_> - - - - <_>2 10 16 4 -1. - <_>10 10 8 2 2. - <_>2 12 8 2 2. - 0 - 6.6343429498374462e-003 - 0.5414987802505493 - 1 - <_> - - - - <_>7 0 6 6 -1. - <_>9 0 2 6 3. - 0 - 0.0452634096145630 - 0.5180327296257019 - 0.1529684066772461 - <_> - - <_> - - - - <_>7 1 6 3 -1. - <_>7 2 6 1 3. - 0 - -8.0646127462387085e-003 - 0.2515468001365662 - 1 - <_> - - - - <_>0 12 6 2 -1. - <_>0 13 6 1 2. - 0 - 4.7389548853971064e-004 - 0.5121998786926270 - 0.3725948929786682 - <_> - - <_> - - - - <_>6 3 11 2 -1. - <_>6 4 11 1 2. - 0 - 1.4877359717502259e-005 - 1 - 0.5532435774803162 - <_> - - - - <_>12 0 8 6 -1. - <_>16 0 4 3 2. - <_>12 3 4 3 2. - 0 - 0.0243211593478918 - 0.4960766136646271 - 0.5983315110206604 - <_> - - <_> - - - - <_>8 12 1 2 -1. - <_>8 13 1 1 2. - 0 - 6.9931396865285933e-005 - 0.4163953065872192 - 1 - <_> - - - - <_>8 8 1 12 -1. - <_>8 12 1 4 3. - 0 - 2.6287760119885206e-003 - 0.5880144834518433 - 0.3399662971496582 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - 3.8190539926290512e-003 - 1 - 0.7846621274948120 - <_> - - - - <_>12 7 3 13 -1. - <_>13 7 1 13 3. - 0 - -0.0259891506284475 - 0.3288114070892334 - 0.5155087709426880 - <_> - - <_> - - - - <_>7 11 2 2 -1. - <_>7 11 1 1 2. - <_>8 12 1 1 2. - 0 - 1.2062400346621871e-003 - 0.4596059918403626 - 1 - <_> - - - - <_>3 13 1 3 -1. - <_>3 14 1 1 3. - 0 - -1.5557400183752179e-003 - 0.3126986920833588 - 0.7183399200439453 - <_> - - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - -2.2691930644214153e-003 - 1 - 0.5274006128311157 - <_> - - - - <_>11 11 2 1 -1. - <_>11 11 1 1 2. - 0 - 2.3287249496206641e-004 - 0.4878666102886200 - 0.5615152716636658 - <_> - - <_> - - - - <_>1 10 5 9 -1. - <_>1 13 5 3 3. - 0 - -5.5999699980020523e-003 - 1 - 0.5160812139511108 - <_> - - - - <_>4 8 6 4 -1. - <_>6 8 2 4 3. - 0 - -0.0104961898177862 - 0.5701614022254944 - 0.3204850852489471 - <_> - - <_> - - - - <_>13 12 1 4 -1. - <_>13 14 1 2 2. - 0 - -1.4814930182183161e-005 - 0.5538837909698486 - 1 - <_> - - - - <_>11 3 4 14 -1. - <_>13 3 2 7 2. - <_>11 10 2 7 2. - 0 - -6.4287078566849232e-004 - 0.5349429249763489 - 0.4472151100635529 - <_> - - <_> - - - - <_>6 12 1 4 -1. - <_>6 14 1 2 2. - 0 - -1.8891949730459601e-004 - 0.5012837052345276 - 1 - <_> - - - - <_>5 3 4 14 -1. - <_>5 3 2 7 2. - <_>7 10 2 7 2. - 0 - -9.0413521975278854e-003 - 0.2562935948371887 - 0.4503383040428162 - <_> - - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - 7.9534705728292465e-003 - 1 - 0.2630499899387360 - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - -2.7908999472856522e-003 - 0.5756508708000183 - 0.4854863882064819 - <_> - - <_> - - - - <_>2 2 12 6 -1. - <_>2 2 6 3 2. - <_>8 5 6 3 2. - 0 - 3.2857100013643503e-003 - 1 - 0.4084751904010773 - <_> - - - - <_>6 6 6 2 -1. - <_>9 6 3 2 2. - 0 - 7.7063008211553097e-004 - 0.4073356091976166 - 0.5920240879058838 - 44.6829681396484380 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 18 12 -1. - <_>7 0 6 12 3. - 0 - 0.0630219429731369 - 0.3419382870197296 - 1 - <_> - - - - <_>5 7 6 4 -1. - <_>5 7 3 2 2. - <_>8 9 3 2 2. - 0 - -2.8374609537422657e-003 - 0.6829563975334168 - 0.4404523074626923 - <_> - - <_> - - - - <_>5 7 10 4 -1. - <_>5 9 10 2 2. - 0 - 0.0464619509875774 - 0.4391745030879974 - 1 - <_> - - - - <_>7 7 6 4 -1. - <_>9 7 2 4 3. - 0 - 0.0291525404900312 - 0.4601063132286072 - 0.6357936859130859 - <_> - - <_> - - - - <_>9 5 2 2 -1. - <_>9 6 2 1 2. - 0 - -1.4000290320836939e-005 - 1 - 0.3730010092258453 - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -1.2757079675793648e-003 - 0.3093824088573456 - 0.5901370048522949 - <_> - - <_> - - - - <_>6 17 8 3 -1. - <_>6 18 8 1 3. - 0 - 1.3596529606729746e-003 - 0.4337565004825592 - 1 - <_> - - - - <_>9 17 6 2 -1. - <_>12 17 3 1 2. - <_>9 18 3 1 2. - 0 - 1.7991929780691862e-004 - 0.4217503964900971 - 0.5846847891807556 - <_> - - <_> - - - - <_>4 12 2 2 -1. - <_>4 13 2 1 2. - 0 - -1.4166639630275313e-005 - 1 - 0.4084691107273102 - <_> - - - - <_>3 12 9 2 -1. - <_>3 13 9 1 2. - 0 - 6.0252390539972112e-005 - 0.5087286829948425 - 0.7277184128761292 - <_> - - <_> - - - - <_>8 3 6 1 -1. - <_>10 3 2 1 3. - 0 - 6.4320368692278862e-003 - 1 - 0.2967903017997742 - <_> - - - - <_>9 3 4 6 -1. - <_>11 3 2 3 2. - <_>9 6 2 3 2. - 0 - 4.6682319953106344e-004 - 0.4110462963581085 - 0.5581219792366028 - <_> - - <_> - - - - <_>0 3 6 5 -1. - <_>3 3 3 5 2. - 0 - 5.7436279021203518e-003 - 0.4287309944629669 - 1 - <_> - - - - <_>2 0 2 18 -1. - <_>2 6 2 6 3. - 0 - 3.2019240316003561e-003 - 0.4266195893287659 - 0.6444045901298523 - <_> - - <_> - - - - <_>14 2 4 9 -1. - <_>14 5 4 3 3. - 0 - -5.7637941790744662e-004 - 1 - 0.4084824919700623 - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - -3.7901920732110739e-003 - 0.3181920945644379 - 0.5230693221092224 - <_> - - <_> - - - - <_>2 2 4 9 -1. - <_>2 5 4 3 3. - 0 - 4.8914109356701374e-003 - 1 - 0.3548356890678406 - <_> - - - - <_>7 18 3 2 -1. - <_>8 18 1 2 3. - 0 - 4.6459292061626911e-003 - 0.5610597729682922 - 0.2693848907947540 - <_> - - <_> - - - - <_>10 14 3 3 -1. - <_>10 15 3 1 3. - 0 - -6.8799369037151337e-003 - 0.6235408186912537 - 1 - <_> - - - - <_>10 12 2 6 -1. - <_>10 15 2 3 2. - 0 - -0.0181474704295397 - 0.2861981987953186 - 0.5226848125457764 - <_> - - <_> - - - - <_>7 5 3 6 -1. - <_>7 7 3 2 3. - 0 - 1.1409220314817503e-004 - 1 - 0.3257833123207092 - <_> - - - - <_>3 3 6 2 -1. - <_>3 4 6 1 2. - 0 - -5.4334272863343358e-004 - 0.3882969021797180 - 0.5341166257858276 - <_> - - <_> - - - - <_>8 4 7 3 -1. - <_>8 5 7 1 3. - 0 - -2.7602489572018385e-003 - 0.6353965997695923 - 1 - <_> - - - - <_>13 6 2 3 -1. - <_>13 7 2 1 3. - 0 - -1.9730569329112768e-003 - 0.5880761146545410 - 0.4593090116977692 - <_> - - <_> - - - - <_>8 8 2 12 -1. - <_>8 12 2 4 3. - 0 - 2.4565239436924458e-003 - 1 - 0.3134010136127472 - <_> - - - - <_>5 4 8 14 -1. - <_>5 4 4 7 2. - <_>9 11 4 7 2. - 0 - 1.9392010290175676e-004 - 0.5277131795883179 - 0.3604106903076172 - <_> - - <_> - - - - <_>0 1 20 8 -1. - <_>10 1 10 4 2. - <_>0 5 10 4 2. - 0 - 0.0786430165171623 - 0.5290341973304749 - 1 - <_> - - - - <_>4 0 12 2 -1. - <_>4 1 12 1 2. - 0 - 6.5276869572699070e-003 - 0.4654479920864105 - 0.6044905185699463 - <_> - - <_> - - - - <_>0 1 20 8 -1. - <_>0 1 10 4 2. - <_>10 5 10 4 2. - 0 - -0.0787167996168137 - 0.2541126906871796 - 1 - <_> - - - - <_>4 0 12 2 -1. - <_>4 1 12 1 2. - 0 - 5.7298499159514904e-003 - 0.4366919100284576 - 0.5822886228561401 - <_> - - <_> - - - - <_>9 5 6 3 -1. - <_>9 5 3 3 2. - 0 - 6.2386557692661881e-004 - 1 - 0.5472692251205444 - <_> - - - - <_>8 13 10 6 -1. - <_>8 15 10 2 3. - 0 - -0.0852672308683395 - 0.1461607962846756 - 0.5181810855865479 - <_> - - <_> - - - - <_>5 5 6 3 -1. - <_>8 5 3 3 2. - 0 - 0.0409811101853848 - 1 - 0.1270135045051575 - <_> - - - - <_>6 3 6 1 -1. - <_>8 3 2 1 3. - 0 - 7.7135749161243439e-003 - 0.4832684993743897 - 0.2223578989505768 - <_> - - <_> - - - - <_>11 18 9 2 -1. - <_>14 18 3 2 3. - 0 - -6.8663940764963627e-003 - 0.5918928980827332 - 1 - <_> - - - - <_>13 11 6 7 -1. - <_>13 11 3 7 2. - 0 - 0.0145596396178007 - 0.4761506915092468 - 0.5727223753929138 - <_> - - <_> - - - - <_>4 6 12 10 -1. - <_>4 6 6 5 2. - <_>10 11 6 5 2. - 0 - -0.0100643103942275 - 0.3636730909347534 - 1 - <_> - - - - <_>8 17 3 3 -1. - <_>9 17 1 3 3. - 0 - 3.6274080630391836e-003 - 0.5271731019020081 - 0.2740525007247925 - <_> - - <_> - - - - <_>11 18 9 2 -1. - <_>14 18 3 2 3. - 0 - -2.3421540390700102e-003 - 0.5497784018516541 - 1 - <_> - - - - <_>13 11 6 8 -1. - <_>13 11 3 8 2. - 0 - -0.0246864091604948 - 0.6059895157814026 - 0.4960314035415649 - <_> - - <_> - - - - <_>4 16 2 2 -1. - <_>4 17 2 1 2. - 0 - 1.9456120207905769e-004 - 1 - 0.3769465088844299 - <_> - - - - <_>7 15 4 4 -1. - <_>7 17 4 2 2. - 0 - 3.1714211218059063e-004 - 0.4062362015247345 - 0.5668215155601502 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 2.0793990697711706e-003 - 0.4618656933307648 - 1 - <_> - - - - <_>13 6 2 3 -1. - <_>13 7 2 1 3. - 0 - 1.7982709687203169e-003 - 0.4867505133152008 - 0.6518449783325195 - <_> - - <_> - - - - <_>5 11 6 1 -1. - <_>7 11 2 1 3. - 0 - -2.2287059982772917e-004 - 0.5677595734596252 - 1 - <_> - - - - <_>7 10 3 1 -1. - <_>8 10 1 1 3. - 0 - 3.2623921288177371e-004 - 0.3710733950138092 - 0.5676605105400085 - <_> - - <_> - - - - <_>0 12 20 4 -1. - <_>0 14 20 2 2. - 0 - -0.0667926818132401 - 0.2511521875858307 - 1 - <_> - - - - <_>10 2 3 2 -1. - <_>10 3 3 1 2. - 0 - -1.4869889710098505e-003 - 0.3886750936508179 - 0.5262253880500794 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -5.0454870797693729e-003 - 0.6557472944259644 - 1 - <_> - - - - <_>5 5 4 3 -1. - <_>5 6 4 1 3. - 0 - -4.8297587782144547e-003 - 0.5934106111526489 - 0.4285922050476074 - <_> - - <_> - - - - <_>8 8 4 3 -1. - <_>8 9 4 1 3. - 0 - -1.0722599690780044e-003 - 1 - 0.5426058769226074 - <_> - - - - <_>10 4 2 12 -1. - <_>10 8 2 4 3. - 0 - 8.7901195511221886e-003 - 0.5351303219795227 - 0.4834277927875519 - <_> - - <_> - - - - <_>0 3 4 3 -1. - <_>0 4 4 1 3. - 0 - -7.1750381030142307e-003 - 0.2067168951034546 - 1 - <_> - - - - <_>1 3 2 3 -1. - <_>1 4 2 1 3. - 0 - 1.1251230025663972e-003 - 0.5112252235412598 - 0.3468714058399200 - <_> - - <_> - - - - <_>16 1 4 11 -1. - <_>16 1 2 11 2. - 0 - 0.0106347100809217 - 0.4479008018970490 - 1 - <_> - - - - <_>18 2 2 16 -1. - <_>19 2 1 8 2. - <_>18 10 1 8 2. - 0 - -0.0117632197216153 - 0.6253901720046997 - 0.4968987107276917 - <_> - - <_> - - - - <_>1 8 6 12 -1. - <_>3 8 2 12 3. - 0 - 0.0923240631818771 - 1 - 0.2031303942203522 - <_> - - - - <_>7 2 6 2 -1. - <_>7 2 3 1 2. - <_>10 3 3 1 2. - 0 - 1.8991080578416586e-003 - 0.5618721842765808 - 0.4046572148799896 - <_> - - <_> - - - - <_>12 4 8 2 -1. - <_>16 4 4 1 2. - <_>12 5 4 1 2. - 0 - -0.0105103403329849 - 1 - 0.4943264126777649 - <_> - - - - <_>10 6 6 2 -1. - <_>12 6 2 2 3. - 0 - -7.4531312566250563e-004 - 0.5613427758216858 - 0.3845331966876984 - <_> - - <_> - - - - <_>0 4 8 2 -1. - <_>0 4 4 1 2. - <_>4 5 4 1 2. - 0 - 8.0041000619530678e-003 - 1 - 0.7759842276573181 - <_> - - - - <_>1 3 3 5 -1. - <_>2 3 1 5 3. - 0 - 5.8110528625547886e-003 - 0.4624733030796051 - 0.6286277174949646 - <_> - - <_> - - - - <_>16 3 4 6 -1. - <_>16 5 4 2 3. - 0 - -0.0279185809195042 - 0.2409314066171646 - 1 - <_> - - - - <_>8 6 4 3 -1. - <_>8 7 4 1 3. - 0 - 2.1739399526268244e-003 - 0.5345504879951477 - 0.3507958054542542 - <_> - - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - -4.0639587678015232e-003 - 0.6647101044654846 - 1 - <_> - - - - <_>4 11 1 2 -1. - <_>4 12 1 1 2. - 0 - 6.0017139185220003e-004 - 0.4998509883880615 - 0.3022165000438690 - <_> - - <_> - - - - <_>8 14 6 3 -1. - <_>8 15 6 1 3. - 0 - 1.9214770291000605e-003 - 1 - 0.5919150710105896 - <_> - - - - <_>7 15 7 3 -1. - <_>7 16 7 1 3. - 0 - -0.0138608301058412 - 0.6351767778396606 - 0.4993310868740082 - <_> - - <_> - - - - <_>9 12 2 8 -1. - <_>9 16 2 4 2. - 0 - 0.0230068508535624 - 1 - 0.1902336031198502 - <_> - - - - <_>4 6 6 2 -1. - <_>6 6 2 2 3. - 0 - -1.3857929734513164e-003 - 0.5253369212150574 - 0.3985860049724579 - <_> - - <_> - - - - <_>12 7 4 2 -1. - <_>12 8 4 1 2. - 0 - 1.2637410545721650e-003 - 0.4666104018688202 - 1 - <_> - - - - <_>5 3 13 10 -1. - <_>5 8 13 5 2. - 0 - -0.0146752102300525 - 0.3823164999485016 - 0.5326632857322693 - <_> - - <_> - - - - <_>4 7 4 2 -1. - <_>4 8 4 1 2. - 0 - -2.9535070061683655e-003 - 0.7063655853271484 - 1 - <_> - - - - <_>0 8 16 2 -1. - <_>0 8 8 1 2. - <_>8 9 8 1 2. - 0 - -1.7189770005643368e-003 - 0.3813462853431702 - 0.5246735215187073 - <_> - - <_> - - - - <_>11 8 2 5 -1. - <_>11 8 1 5 2. - 0 - -4.2484089499339461e-004 - 1 - 0.4791638851165772 - <_> - - - - <_>10 0 6 13 -1. - <_>10 0 3 13 2. - 0 - -8.5248658433556557e-004 - 0.4491218030452728 - 0.5370901226997376 - <_> - - <_> - - - - <_>1 6 4 2 -1. - <_>1 7 4 1 2. - 0 - 8.9034568518400192e-003 - 1 - 0.2076473981142044 - <_> - - - - <_>4 3 2 1 -1. - <_>5 3 1 1 2. - 0 - 1.4895649655954912e-005 - 0.4447635114192963 - 0.5667163133621216 - <_> - - <_> - - - - <_>11 8 2 5 -1. - <_>11 8 1 5 2. - 0 - -4.7091601300053298e-004 - 0.5465071201324463 - 1 - <_> - - - - <_>12 10 4 8 -1. - <_>12 10 2 8 2. - 0 - 4.3084810022264719e-004 - 0.5493261814117432 - 0.4580708146095276 - <_> - - <_> - - - - <_>7 8 2 5 -1. - <_>8 8 1 5 2. - 0 - -6.3893961487337947e-004 - 0.5501571893692017 - 1 - <_> - - - - <_>4 10 4 8 -1. - <_>6 10 2 8 2. - 0 - -7.3733746830839664e-005 - 0.5085790753364563 - 0.3305698037147522 - <_> - - <_> - - - - <_>6 7 9 12 -1. - <_>9 7 3 12 3. - 0 - -8.8991485536098480e-003 - 0.4276469051837921 - 1 - <_> - - - - <_>11 13 2 3 -1. - <_>11 13 1 3 2. - 0 - -0.0102533502504230 - 0.1123218014836311 - 0.5152723193168640 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 10 2. - 0 - -0.0596374906599522 - 0.7386772036552429 - 1 - <_> - - - - <_>8 11 4 8 -1. - <_>8 11 2 4 2. - <_>10 15 2 4 2. - 0 - 0.0217071995139122 - 0.4996291995048523 - 0.1339413970708847 - <_> - - <_> - - - - <_>16 1 4 11 -1. - <_>16 1 2 11 2. - 0 - 9.9107045680284500e-003 - 0.4679012000560761 - 1 - <_> - - - - <_>18 2 2 4 -1. - <_>18 2 1 4 2. - 0 - -0.0109983002766967 - 0.6928656101226807 - 0.5012068152427673 - <_> - - <_> - - - - <_>5 6 6 2 -1. - <_>5 6 3 1 2. - <_>8 7 3 1 2. - 0 - 7.4608891736716032e-004 - 1 - 0.5833582282066345 - <_> - - - - <_>5 4 1 3 -1. - <_>5 5 1 1 3. - 0 - 2.9539171373471618e-004 - 0.3826391100883484 - 0.5566350817680359 - <_> - - <_> - - - - <_>11 1 4 14 -1. - <_>11 1 2 14 2. - 0 - 0.0500541292130947 - 1 - 0.3002721071243286 - <_> - - - - <_>4 2 12 3 -1. - <_>8 2 4 3 3. - 0 - -7.2330660186707973e-003 - 0.5908042788505554 - 0.5000870823860169 - <_> - - <_> - - - - <_>5 1 4 14 -1. - <_>7 1 2 14 2. - 0 - -2.6863380335271358e-003 - 0.3975034952163696 - 1 - <_> - - - - <_>7 3 6 2 -1. - <_>9 3 2 2 3. - 0 - -1.0195849463343620e-003 - 0.3697685897350311 - 0.5756192803382874 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>8 0 6 4 3. - 0 - -0.0202049203217030 - 0.6375268101692200 - 1 - <_> - - - - <_>9 5 2 10 -1. - <_>9 10 2 5 2. - 0 - 2.1340379025787115e-003 - 0.5363265872001648 - 0.4433170855045319 - <_> - - <_> - - - - <_>8 6 3 4 -1. - <_>9 6 1 4 3. - 0 - -1.8348889425396919e-003 - 0.5828999280929565 - 1 - <_> - - - - <_>5 5 9 11 -1. - <_>8 5 3 11 3. - 0 - -5.9489468112587929e-003 - 0.2680670917034149 - 0.4642885923385620 - <_> - - <_> - - - - <_>10 6 3 5 -1. - <_>11 6 1 5 3. - 0 - -2.3030120064504445e-004 - 0.5475320219993591 - 1 - <_> - - - - <_>8 9 6 5 -1. - <_>8 9 3 5 2. - 0 - 5.0581009127199650e-003 - 0.5320833921432495 - 0.4646492898464203 - <_> - - <_> - - - - <_>7 6 3 5 -1. - <_>8 6 1 5 3. - 0 - -5.1950011402368546e-004 - 0.5232744812965393 - 1 - <_> - - - - <_>6 10 6 3 -1. - <_>9 10 3 3 2. - 0 - -6.8620947422459722e-004 - 0.4935086071491242 - 0.3103117942810059 - <_> - - <_> - - - - <_>10 0 3 7 -1. - <_>11 0 1 7 3. - 0 - -7.4936267919838428e-003 - 0.2883046865463257 - 1 - <_> - - - - <_>0 3 20 12 -1. - <_>0 9 20 6 2. - 0 - -0.0156829301267862 - 0.3640313148498535 - 0.5368754863739014 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - -3.2649750355631113e-003 - 0.6468631029129028 - 1 - <_> - - - - <_>5 9 4 1 -1. - <_>7 9 2 1 2. - 0 - 3.8463930832222104e-004 - 0.5259659886360169 - 0.3831427991390228 - <_> - - <_> - - - - <_>13 13 3 2 -1. - <_>13 14 3 1 2. - 0 - 4.4492390006780624e-003 - 1 - 0.2086818963289261 - <_> - - - - <_>16 9 4 6 -1. - <_>16 9 2 6 2. - 0 - 0.0231183208525181 - 0.4978533089160919 - 0.5961257219314575 - <_> - - <_> - - - - <_>7 15 6 3 -1. - <_>7 16 6 1 3. - 0 - 2.0835159812122583e-003 - 1 - 0.5746421813964844 - <_> - - - - <_>6 16 7 3 -1. - <_>6 17 7 1 3. - 0 - 1.1513150529935956e-003 - 0.3586845099925995 - 0.5363473892211914 - <_> - - <_> - - - - <_>11 14 9 6 -1. - <_>11 16 9 2 3. - 0 - 0.0361047089099884 - 1 - 0.2833136916160584 - <_> - - - - <_>19 14 1 3 -1. - <_>19 15 1 1 3. - 0 - 3.6256198654882610e-004 - 0.5477722287178040 - 0.4110532104969025 - <_> - - <_> - - - - <_>0 9 6 6 -1. - <_>3 9 3 6 2. - 0 - -3.4635469783097506e-003 - 0.5990386009216309 - 1 - <_> - - - - <_>0 19 9 1 -1. - <_>3 19 3 1 3. - 0 - -2.8796829283237457e-003 - 0.5725253224372864 - 0.4149512052536011 - <_> - - <_> - - - - <_>11 14 9 6 -1. - <_>11 16 9 2 3. - 0 - -8.1119500100612640e-003 - 1 - 0.5396351814270020 - <_> - - - - <_>12 12 6 6 -1. - <_>12 14 6 2 3. - 0 - 4.5932079665362835e-003 - 0.5379704236984253 - 0.3891302943229675 - <_> - - <_> - - - - <_>1 14 8 6 -1. - <_>1 16 8 2 3. - 0 - 7.0014740340411663e-003 - 1 - 0.3714671134948731 - <_> - - - - <_>8 1 3 2 -1. - <_>9 1 1 2 3. - 0 - 8.0169539432972670e-004 - 0.5529567003250122 - 0.3755804896354675 - <_> - - <_> - - - - <_>18 2 2 4 -1. - <_>18 2 1 4 2. - 0 - -8.6652329191565514e-003 - 1 - 0.5025773048400879 - <_> - - - - <_>14 0 6 3 -1. - <_>16 0 2 3 3. - 0 - -2.7315050829201937e-003 - 0.5850322246551514 - 0.4617573916912079 - <_> - - <_> - - - - <_>0 2 2 4 -1. - <_>1 2 1 4 2. - 0 - 1.3301590224727988e-003 - 1 - 0.5937700867652893 - <_> - - - - <_>0 0 6 3 -1. - <_>2 0 2 3 3. - 0 - -4.2648240923881531e-003 - 0.5645368099212647 - 0.3937624990940094 - <_> - - <_> - - - - <_>9 0 3 2 -1. - <_>10 0 1 2 3. - 0 - 6.3251499086618423e-003 - 0.5182105898857117 - 1 - <_> - - - - <_>12 1 2 2 -1. - <_>12 1 1 2 2. - 0 - -3.0753740575164557e-003 - 0.3007416129112244 - 0.5196403861045837 - <_> - - <_> - - - - <_>8 0 3 2 -1. - <_>9 0 1 2 3. - 0 - -7.3622138006612659e-004 - 0.3697580099105835 - 1 - <_> - - - - <_>6 1 2 2 -1. - <_>7 1 1 2 2. - 0 - 3.0082479497650638e-005 - 0.4327593147754669 - 0.5715808868408203 - <_> - - <_> - - - - <_>10 8 2 3 -1. - <_>10 9 2 1 3. - 0 - -3.8722730241715908e-003 - 0.3473713099956513 - 1 - <_> - - - - <_>13 15 6 2 -1. - <_>13 16 6 1 2. - 0 - 6.2879058532416821e-004 - 0.5438259243965149 - 0.4453906118869782 - <_> - - <_> - - - - <_>8 12 2 2 -1. - <_>8 12 1 1 2. - <_>9 13 1 1 2. - 0 - 1.3411579420790076e-003 - 1 - 0.6511713862419128 - <_> - - - - <_>8 15 3 5 -1. - <_>9 15 1 5 3. - 0 - -8.3681922405958176e-003 - 0.1443295031785965 - 0.4888199865818024 - <_> - - <_> - - - - <_>8 6 4 12 -1. - <_>8 12 4 6 2. - 0 - 9.3305751215666533e-004 - 1 - 0.3951109051704407 - <_> - - - - <_>7 6 7 8 -1. - <_>7 10 7 4 2. - 0 - -1.0746510233730078e-003 - 0.3910265862941742 - 0.5349503755569458 - <_> - - <_> - - - - <_>0 11 8 2 -1. - <_>0 12 8 1 2. - 0 - -0.0186100509017706 - 0.1275743991136551 - 1 - <_> - - - - <_>8 11 2 2 -1. - <_>8 11 1 1 2. - <_>9 12 1 1 2. - 0 - 1.3651419430971146e-003 - 0.5038288831710815 - 0.6951304078102112 - <_> - - <_> - - - - <_>7 7 12 1 -1. - <_>11 7 4 1 3. - 0 - 7.3744421824812889e-003 - 0.5253443121910095 - 1 - <_> - - - - <_>10 8 3 2 -1. - <_>11 8 1 2 3. - 0 - 8.4163323044776917e-003 - 0.5011243820190430 - 0.7311332821846008 - <_> - - <_> - - - - <_>1 7 12 1 -1. - <_>5 7 4 1 3. - 0 - 5.1413988694548607e-003 - 0.4953536093235016 - 1 - <_> - - - - <_>6 5 8 2 -1. - <_>6 5 4 1 2. - <_>10 6 4 1 2. - 0 - 4.5847031287848949e-003 - 0.2535555958747864 - 0.6462442874908447 - <_> - - <_> - - - - <_>9 10 3 10 -1. - <_>10 10 1 10 3. - 0 - 0.0285652391612530 - 1 - 0.2330722063779831 - <_> - - - - <_>16 0 2 4 -1. - <_>16 0 1 4 2. - 0 - 4.3958800961263478e-004 - 0.4702244102954865 - 0.5544549226760864 - <_> - - <_> - - - - <_>8 10 3 10 -1. - <_>9 10 1 10 3. - 0 - 0.0314594581723213 - 1 - 0.0336896888911724 - <_> - - - - <_>9 10 2 3 -1. - <_>9 11 2 1 3. - 0 - 5.6011630222201347e-003 - 0.4787121117115021 - 0.6338351964950562 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>10 9 2 1 2. - <_>8 10 2 1 2. - 0 - 7.1835669223219156e-004 - 0.5431486964225769 - 1 - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -5.5303089320659637e-003 - 0.4105832874774933 - 0.5403990745544434 - <_> - - <_> - - - - <_>6 1 3 1 -1. - <_>7 1 1 1 3. - 0 - 1.4129279879853129e-003 - 1 - 0.3105539977550507 - <_> - - - - <_>2 0 2 4 -1. - <_>3 0 1 4 2. - 0 - 2.5530709535814822e-004 - 0.4254471957683563 - 0.5447154045104981 - <_> - - <_> - - - - <_>11 11 2 2 -1. - <_>12 11 1 1 2. - <_>11 12 1 1 2. - 0 - 3.1966410460881889e-004 - 1 - 0.6118361949920654 - <_> - - - - <_>12 12 6 6 -1. - <_>12 14 6 2 3. - 0 - 5.0411392003297806e-003 - 0.5290042161941528 - 0.4224787056446075 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 7.7617880888283253e-003 - 0.4315345883369446 - 1 - <_> - - - - <_>3 0 2 9 -1. - <_>3 3 2 3 3. - 0 - 2.9374631121754646e-003 - 0.6629263162612915 - 0.3028964996337891 - <_> - - <_> - - - - <_>14 13 3 2 -1. - <_>14 14 3 1 2. - 0 - -1.6497720498591661e-003 - 1 - 0.5491852760314941 - <_> - - - - <_>15 2 3 2 -1. - <_>15 3 3 1 2. - 0 - -5.8834417723119259e-003 - 0.3188554048538208 - 0.5184289216995239 - <_> - - <_> - - - - <_>2 13 5 2 -1. - <_>2 14 5 1 2. - 0 - 8.7459187489002943e-004 - 1 - 0.3328830897808075 - <_> - - - - <_>3 4 12 10 -1. - <_>3 4 6 5 2. - <_>9 9 6 5 2. - 0 - -0.0153087796643376 - 0.3923608064651489 - 0.5235139131546021 - <_> - - <_> - - - - <_>5 1 14 6 -1. - <_>5 3 14 2 3. - 0 - 0.0322924517095089 - 1 - 0.5977646708488464 - <_> - - - - <_>15 3 3 2 -1. - <_>15 4 3 1 2. - 0 - -4.3842519517056644e-004 - 0.4541687965393066 - 0.5369428992271423 - <_> - - <_> - - - - <_>7 11 2 2 -1. - <_>7 11 1 1 2. - <_>8 12 1 1 2. - 0 - 1.5429529594257474e-003 - 1 - 0.6318141222000122 - <_> - - - - <_>2 14 6 6 -1. - <_>2 16 6 2 3. - 0 - -2.4733028840273619e-003 - 0.3490633070468903 - 0.4759024977684021 - <_> - - <_> - - - - <_>6 13 8 3 -1. - <_>6 14 8 1 3. - 0 - 2.0994939841330051e-003 - 1 - 0.5887197852134705 - <_> - - - - <_>1 19 18 1 -1. - <_>7 19 6 1 3. - 0 - -5.7541108690202236e-003 - 0.5961331725120544 - 0.4841983020305634 - <_> - - <_> - - - - <_>8 12 1 6 -1. - <_>8 15 1 3 2. - 0 - -0.0102331303060055 - 0.1705404072999954 - 1 - <_> - - - - <_>0 0 14 15 -1. - <_>0 5 14 5 3. - 0 - 0.2255450934171677 - 0.4779379963874817 - 0.0978796631097794 - <_> - - <_> - - - - <_>3 0 16 8 -1. - <_>3 4 16 4 2. - 0 - 0.0296665597707033 - 1 - 0.5822224020957947 - <_> - - - - <_>6 1 8 12 -1. - <_>6 7 8 6 2. - 0 - -2.8518449980765581e-003 - 0.5459626913070679 - 0.4610066115856171 - <_> - - <_> - - - - <_>5 3 3 3 -1. - <_>6 3 1 3 3. - 0 - 9.7465328872203827e-004 - 1 - 0.3670322895050049 - <_> - - - - <_>5 1 3 4 -1. - <_>6 1 1 4 3. - 0 - 1.4044740055396687e-005 - 0.4302386045455933 - 0.5691710710525513 - <_> - - <_> - - - - <_>15 14 4 6 -1. - <_>17 14 2 3 2. - <_>15 17 2 3 2. - 0 - -0.0175794307142496 - 0.6917321085929871 - 1 - <_> - - - - <_>12 11 6 8 -1. - <_>15 11 3 4 2. - <_>12 15 3 4 2. - 0 - -0.0523816794157028 - 0.7110040187835693 - 0.5060154795646668 - <_> - - <_> - - - - <_>8 7 2 4 -1. - <_>9 7 1 4 2. - 0 - -0.0112421102821827 - 0.8769189119338989 - 1 - <_> - - - - <_>6 11 3 1 -1. - <_>7 11 1 1 3. - 0 - -3.6728400737047195e-003 - 0.6519191861152649 - 0.4546068906784058 - <_> - - <_> - - - - <_>12 3 2 14 -1. - <_>12 3 1 14 2. - 0 - 3.5082760732620955e-003 - 0.5329865813255310 - 1 - <_> - - - - <_>12 11 6 2 -1. - <_>15 11 3 1 2. - <_>12 12 3 1 2. - 0 - 6.1679710634052753e-003 - 0.5220459103584290 - 0.2953518927097321 - <_> - - <_> - - - - <_>0 2 5 2 -1. - <_>0 3 5 1 2. - 0 - -9.7009900491684675e-004 - 1 - 0.5048633217811585 - <_> - - - - <_>0 0 15 1 -1. - <_>5 0 5 1 3. - 0 - -0.0109570100903511 - 0.5837358236312866 - 0.3020085990428925 - <_> - - <_> - - - - <_>12 11 6 2 -1. - <_>15 11 3 1 2. - <_>12 12 3 1 2. - 0 - -8.3272513002157211e-003 - 0.3158063888549805 - 1 - <_> - - - - <_>10 5 2 2 -1. - <_>10 5 1 2 2. - 0 - 2.9798380637657829e-005 - 0.4386389851570129 - 0.5443211197853088 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - 2.8244039276614785e-004 - 1 - 0.5625395774841309 - <_> - - - - <_>9 0 2 10 -1. - <_>9 0 1 5 2. - <_>10 5 1 5 2. - 0 - -8.1364117795601487e-004 - 0.5281198024749756 - 0.3401407897472382 - <_> - - <_> - - - - <_>18 14 2 2 -1. - <_>18 15 2 1 2. - 0 - 1.8008040497079492e-003 - 1 - 0.3471659123897553 - <_> - - - - <_>13 11 4 9 -1. - <_>13 14 4 3 3. - 0 - -6.9944779388606548e-003 - 0.4481697082519531 - 0.5385770201683044 - <_> - - <_> - - - - <_>8 13 2 2 -1. - <_>8 13 1 1 2. - <_>9 14 1 1 2. - 0 - 4.5625398342963308e-005 - 0.4492512941360474 - 1 - <_> - - - - <_>7 8 4 3 -1. - <_>7 9 4 1 3. - 0 - -7.3189922841265798e-004 - 0.4167312085628510 - 0.6021102070808411 - <_> - - <_> - - - - <_>8 9 4 2 -1. - <_>8 10 4 1 2. - 0 - -2.9980219551362097e-004 - 0.4148428142070770 - 1 - <_> - - - - <_>13 12 4 2 -1. - <_>13 13 4 1 2. - 0 - -2.9060940505587496e-005 - 0.5592089891433716 - 0.4073210954666138 - <_> - - <_> - - - - <_>6 14 2 2 -1. - <_>6 14 1 1 2. - <_>7 15 1 1 2. - 0 - -5.9742690064013004e-004 - 0.6088914275169373 - 1 - <_> - - - - <_>0 14 2 2 -1. - <_>0 15 2 1 2. - 0 - 1.4831830048933625e-004 - 0.5298305153846741 - 0.3761950135231018 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -2.9441029764711857e-003 - 1 - 0.4716084897518158 - <_> - - - - <_>7 9 10 6 -1. - <_>7 11 10 2 3. - 0 - 0.1374121010303497 - 0.5101336836814880 - 0.0467468015849590 - <_> - - <_> - - - - <_>2 9 12 4 -1. - <_>6 9 4 4 3. - 0 - -0.0884141772985458 - 0.1181868985295296 - 1 - <_> - - - - <_>7 9 6 11 -1. - <_>10 9 3 11 2. - 0 - 0.0706102773547173 - 0.5119063258171082 - 0.7778441905975342 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -7.7188978902995586e-003 - 0.1874134987592697 - 1 - <_> - - - - <_>9 14 4 3 -1. - <_>9 15 4 1 3. - 0 - 0.0151153998449445 - 0.4980027973651886 - 0.7005817890167236 - <_> - - <_> - - - - <_>2 3 3 17 -1. - <_>3 3 1 17 3. - 0 - 1.0671879863366485e-003 - 0.4482238888740540 - 1 - <_> - - - - <_>0 11 6 3 -1. - <_>0 12 6 1 3. - 0 - 7.0487911580130458e-004 - 0.6265752911567688 - 0.4402655065059662 - 47.7634506225585940 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>4 3 11 9 -1. - <_>4 6 11 3 3. - 0 - -0.0986907333135605 - 1 - 0.3999474942684174 - <_> - - - - <_>0 2 6 11 -1. - <_>3 2 3 11 2. - 0 - 0.0623734183609486 - 0.5247784852981567 - 0.8193575739860535 - <_> - - <_> - - - - <_>13 0 4 5 -1. - <_>13 0 2 5 2. - 0 - 1.9496519817039371e-003 - 0.3529816865921021 - 1 - <_> - - - - <_>9 7 6 4 -1. - <_>12 7 3 2 2. - <_>9 9 3 2 2. - 0 - -8.9139147894456983e-004 - 0.5852727890014648 - 0.3245978057384491 - <_> - - <_> - - - - <_>5 7 8 2 -1. - <_>9 7 4 2 2. - 0 - -5.5150408297777176e-004 - 0.3892816901206970 - 1 - <_> - - - - <_>1 8 15 1 -1. - <_>6 8 5 1 3. - 0 - -1.1721949558705091e-003 - 0.4335052073001862 - 0.6520624160766602 - <_> - - <_> - - - - <_>4 12 12 2 -1. - <_>8 12 4 2 3. - 0 - -7.4480642797425389e-004 - 1 - 0.4041135013103485 - <_> - - - - <_>13 0 4 10 -1. - <_>15 0 2 5 2. - <_>13 5 2 5 2. - 0 - -2.6264840271323919e-003 - 0.5624982118606567 - 0.3967525064945221 - <_> - - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - -3.9712688885629177e-004 - 0.3856112062931061 - 1 - <_> - - - - <_>3 9 6 2 -1. - <_>6 9 3 2 2. - 0 - 3.5984949208796024e-003 - 0.5997889041900635 - 0.4241614043712616 - <_> - - <_> - - - - <_>8 17 4 3 -1. - <_>8 18 4 1 3. - 0 - 5.3080618381500244e-003 - 1 - 0.6660168766975403 - <_> - - - - <_>8 3 9 2 -1. - <_>11 3 3 2 3. - 0 - 9.6319877775385976e-004 - 0.4481379091739655 - 0.5583487749099731 - <_> - - <_> - - - - <_>3 3 9 2 -1. - <_>6 3 3 2 3. - 0 - 5.0776469288393855e-004 - 0.3535459041595459 - 1 - <_> - - - - <_>5 0 9 14 -1. - <_>8 0 3 14 3. - 0 - 3.6223160568624735e-003 - 0.3409807085990906 - 0.5420687794685364 - <_> - - <_> - - - - <_>7 3 7 10 -1. - <_>7 8 7 5 2. - 0 - -0.0620614103972912 - 0.1934083998203278 - 1 - <_> - - - - <_>4 8 13 3 -1. - <_>4 9 13 1 3. - 0 - 6.4387189922854304e-004 - 0.4083626866340637 - 0.5490221977233887 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>3 12 7 2 2. - <_>10 14 7 2 2. - 0 - 0.0262399092316628 - 1 - 0.2285708039999008 - <_> - - - - <_>8 12 4 2 -1. - <_>8 13 4 1 2. - 0 - 8.1940297968685627e-004 - 0.4648667871952057 - 0.6017355918884277 - <_> - - <_> - - - - <_>6 10 9 8 -1. - <_>6 14 9 4 2. - 0 - 2.3833119485061616e-004 - 1 - 0.3598038852214813 - <_> - - - - <_>9 12 2 8 -1. - <_>9 16 2 4 2. - 0 - -1.5869759954512119e-003 - 0.4259651005268097 - 0.5476434826850891 - <_> - - <_> - - - - <_>8 12 3 3 -1. - <_>8 13 3 1 3. - 0 - -6.7263417877256870e-003 - 0.6507238149642944 - 1 - <_> - - - - <_>5 5 4 10 -1. - <_>7 5 2 10 2. - 0 - 0.0110061103478074 - 0.5149409770965576 - 0.3362984955310822 - <_> - - <_> - - - - <_>14 15 3 3 -1. - <_>14 16 3 1 3. - 0 - 7.1445819921791553e-003 - 1 - 0.2672930061817169 - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -4.7233798541128635e-003 - 0.5652182102203369 - 0.4298144876956940 - <_> - - <_> - - - - <_>3 15 3 3 -1. - <_>3 16 3 1 3. - 0 - 9.8437406122684479e-003 - 1 - 0.1151885986328125 - <_> - - - - <_>3 9 4 2 -1. - <_>3 9 2 1 2. - <_>5 10 2 1 2. - 0 - 1.5124640412977897e-005 - 0.4373598098754883 - 0.5612128973007202 - <_> - - <_> - - - - <_>0 11 20 4 -1. - <_>10 11 10 2 2. - <_>0 13 10 2 2. - 0 - 0.0399088710546494 - 0.5204648971557617 - 1 - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 5.3903679363429546e-003 - 0.4813467860221863 - 0.6361209154129028 - <_> - - <_> - - - - <_>0 11 20 4 -1. - <_>0 11 10 2 2. - <_>10 13 10 2 2. - 0 - -0.0399088710546494 - 0.1506870985031128 - 1 - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 5.3903679363429546e-003 - 0.4581694900989533 - 0.6200240850448608 - <_> - - <_> - - - - <_>10 13 1 6 -1. - <_>10 16 1 3 2. - 0 - 6.7005190066993237e-003 - 1 - 0.3432235121726990 - <_> - - - - <_>2 1 18 2 -1. - <_>11 1 9 1 2. - <_>2 2 9 1 2. - 0 - -0.0126237897202373 - 0.3088226914405823 - 0.5226737856864929 - <_> - - <_> - - - - <_>8 14 3 3 -1. - <_>8 15 3 1 3. - 0 - 0.0118066100403667 - 1 - 0.7187939286231995 - <_> - - - - <_>4 1 6 1 -1. - <_>6 1 2 1 3. - 0 - -3.4257229417562485e-003 - 0.3120814859867096 - 0.5065844058990479 - <_> - - <_> - - - - <_>11 13 1 3 -1. - <_>11 14 1 1 3. - 0 - 3.9385299896821380e-004 - 0.4754584133625031 - 1 - <_> - - - - <_>13 5 2 12 -1. - <_>13 11 2 6 2. - 0 - 0.0343881882727146 - 0.5261657834053040 - 0.3350174129009247 - <_> - - <_> - - - - <_>1 14 18 6 -1. - <_>1 16 18 2 3. - 0 - -0.0750099867582321 - 0.1713480949401856 - 1 - <_> - - - - <_>8 13 1 3 -1. - <_>8 14 1 1 3. - 0 - 4.9022492021322250e-004 - 0.4725801944732666 - 0.5956469178199768 - <_> - - <_> - - - - <_>7 13 6 3 -1. - <_>7 14 6 1 3. - 0 - -8.5525289177894592e-003 - 0.6558222770690918 - 1 - <_> - - - - <_>9 10 3 2 -1. - <_>9 11 3 1 2. - 0 - 1.3135520566720515e-004 - 0.4835400879383087 - 0.5586913824081421 - <_> - - <_> - - - - <_>5 1 3 3 -1. - <_>6 1 1 3 3. - 0 - 4.7948658466339111e-003 - 1 - 0.2645705938339233 - <_> - - - - <_>5 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 2.0124691072851419e-003 - 0.3657945096492767 - 0.5124772191047669 - <_> - - <_> - - - - <_>7 5 6 14 -1. - <_>7 12 6 7 2. - 0 - -0.1178547963500023 - 0.2385654002428055 - 1 - <_> - - - - <_>7 16 6 2 -1. - <_>9 16 2 2 3. - 0 - 1.5575019642710686e-003 - 0.5490474104881287 - 0.4274747967720032 - <_> - - <_> - - - - <_>0 2 2 12 -1. - <_>1 2 1 12 2. - 0 - -0.0155737595632672 - 0.6938900947570801 - 1 - <_> - - - - <_>1 0 5 3 -1. - <_>1 1 5 1 3. - 0 - -2.1854790393263102e-003 - 0.3645988106727600 - 0.5092526078224182 - <_> - - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - 2.9272339306771755e-003 - 0.4685808122158051 - 1 - <_> - - - - <_>12 6 3 3 -1. - <_>12 7 3 1 3. - 0 - 6.4663668163120747e-003 - 0.4973410069942474 - 0.7726097106933594 - <_> - - <_> - - - - <_>5 4 3 3 -1. - <_>5 5 3 1 3. - 0 - -7.6140360906720161e-003 - 0.6877465844154358 - 1 - <_> - - - - <_>5 6 3 3 -1. - <_>5 7 3 1 3. - 0 - 4.1512572206556797e-003 - 0.4788525104522705 - 0.6921657919883728 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>10 12 2 4 2. - <_>8 16 2 4 2. - 0 - 2.7711640577763319e-003 - 0.5481839776039124 - 1 - <_> - - - - <_>2 17 18 2 -1. - <_>11 17 9 1 2. - <_>2 18 9 1 2. - 0 - -0.0128361098468304 - 0.3800162971019745 - 0.5204492807388306 - <_> - - <_> - - - - <_>9 3 2 2 -1. - <_>9 4 2 1 2. - 0 - -2.4380050599575043e-003 - 0.2582435011863709 - 1 - <_> - - - - <_>8 5 4 6 -1. - <_>8 7 4 2 3. - 0 - 2.1713329479098320e-003 - 0.4961163103580475 - 0.3215202987194061 - <_> - - <_> - - - - <_>9 0 8 6 -1. - <_>9 2 8 2 3. - 0 - 6.2800728483125567e-004 - 1 - 0.5460423827171326 - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -9.7982389852404594e-003 - 0.6046543717384338 - 0.4939922094345093 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - 7.3543828912079334e-003 - 1 - 0.5291094183921814 - <_> - - - - <_>0 4 6 9 -1. - <_>2 4 2 9 3. - 0 - -0.0146650401875377 - 0.5446122884750366 - 0.3567362129688263 - <_> - - <_> - - - - <_>1 4 18 2 -1. - <_>7 4 6 2 3. - 0 - 0.0302445106208324 - 0.5518329143524170 - 1 - <_> - - - - <_>8 16 12 4 -1. - <_>14 16 6 2 2. - <_>8 18 6 2 2. - 0 - -0.0566602088510990 - 0.6930978894233704 - 0.5093387961387634 - <_> - - <_> - - - - <_>0 0 18 2 -1. - <_>0 0 9 1 2. - <_>9 1 9 1 2. - 0 - -5.6967479176819324e-003 - 0.3201526105403900 - 1 - <_> - - - - <_>3 0 3 18 -1. - <_>4 0 1 18 3. - 0 - 0.0308067705482244 - 0.4989246129989624 - 0.2277054041624069 - <_> - - <_> - - - - <_>14 9 4 7 -1. - <_>14 9 2 7 2. - 0 - 2.2748769260942936e-003 - 0.4810931086540222 - 1 - <_> - - - - <_>15 14 2 2 -1. - <_>15 15 2 1 2. - 0 - 2.0436900667846203e-003 - 0.5283867120742798 - 0.3255924880504608 - <_> - - <_> - - - - <_>2 9 4 7 -1. - <_>4 9 2 7 2. - 0 - -8.6277956143021584e-003 - 0.6266536116600037 - 1 - <_> - - - - <_>3 14 2 2 -1. - <_>3 15 2 1 2. - 0 - 6.5113382879644632e-004 - 0.5097137093544006 - 0.3191910088062286 - <_> - - <_> - - - - <_>11 0 6 6 -1. - <_>11 2 6 2 3. - 0 - 8.8188261725008488e-004 - 0.4549585878849030 - 1 - <_> - - - - <_>14 0 2 6 -1. - <_>15 0 1 3 2. - <_>14 3 1 3 2. - 0 - -0.0145949097350240 - 0.2645038962364197 - 0.5153868198394775 - <_> - - <_> - - - - <_>7 11 2 2 -1. - <_>7 11 1 1 2. - <_>8 12 1 1 2. - 0 - -1.2304580304771662e-003 - 0.6197584867477417 - 1 - <_> - - - - <_>7 10 2 2 -1. - <_>8 10 1 2 2. - 0 - -2.1867299801670015e-004 - 0.5469198822975159 - 0.4206855893135071 - <_> - - <_> - - - - <_>9 14 2 6 -1. - <_>9 17 2 3 2. - 0 - -1.0909959673881531e-003 - 0.4140760004520416 - 1 - <_> - - - - <_>12 18 4 2 -1. - <_>12 19 4 1 2. - 0 - 3.5210378700867295e-004 - 0.5476608872413635 - 0.4155021011829376 - <_> - - <_> - - - - <_>8 17 4 3 -1. - <_>8 18 4 1 3. - 0 - -7.2563779540359974e-003 - 0.7160469293594360 - 1 - <_> - - - - <_>2 18 8 2 -1. - <_>2 19 8 1 2. - 0 - 1.4701850013807416e-003 - 0.5240808129310608 - 0.3729662895202637 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>2 10 16 1 3. - 0 - 1.1472719779703766e-004 - 0.4033798873424530 - 1 - <_> - - - - <_>9 9 2 2 -1. - <_>9 10 2 1 2. - 0 - 3.0506469774991274e-003 - 0.5263985991477966 - 0.3560093045234680 - <_> - - <_> - - - - <_>5 14 2 4 -1. - <_>5 14 1 2 2. - <_>6 16 1 2 2. - 0 - 2.6269949739798903e-004 - 0.4569799900054932 - 1 - <_> - - - - <_>8 9 4 2 -1. - <_>8 9 2 1 2. - <_>10 10 2 1 2. - 0 - -3.6365550477057695e-003 - 0.3042570948600769 - 0.5868253707885742 - <_> - - <_> - - - - <_>9 5 2 5 -1. - <_>9 5 1 5 2. - 0 - -8.4893293678760529e-003 - 1 - 0.4914157092571259 - <_> - - - - <_>9 9 3 2 -1. - <_>10 9 1 2 3. - 0 - 5.8107408694922924e-003 - 0.4918529987335205 - 0.6266962885856628 - <_> - - <_> - - - - <_>8 9 3 2 -1. - <_>9 9 1 2 3. - 0 - 7.5583951547741890e-004 - 1 - 0.5633236169815064 - <_> - - - - <_>8 8 3 6 -1. - <_>9 8 1 6 3. - 0 - -2.2017690353095531e-003 - 0.5553916096687317 - 0.3827646076679230 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>10 12 2 4 2. - <_>8 16 2 4 2. - 0 - 2.7908938936889172e-003 - 0.5498697757720947 - 1 - <_> - - - - <_>2 17 16 2 -1. - <_>10 17 8 1 2. - <_>2 18 8 1 2. - 0 - -1.8228569533675909e-003 - 0.4382283091545105 - 0.5424032807350159 - <_> - - <_> - - - - <_>8 12 3 8 -1. - <_>9 12 1 8 3. - 0 - -7.2495508939027786e-003 - 0.2888121902942658 - 1 - <_> - - - - <_>3 10 1 3 -1. - <_>3 11 1 1 3. - 0 - -6.8744522286579013e-004 - 0.3472655117511749 - 0.5076370835304260 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - 2.5174440816044807e-003 - 0.4661205112934113 - 1 - <_> - - - - <_>14 13 3 6 -1. - <_>14 15 3 2 3. - 0 - -0.0101513797417283 - 0.3744775056838989 - 0.5294001102447510 - <_> - - <_> - - - - <_>1 19 18 1 -1. - <_>7 19 6 1 3. - 0 - -4.1399952024221420e-003 - 1 - 0.4660485088825226 - <_> - - - - <_>2 10 15 2 -1. - <_>7 10 5 2 3. - 0 - -4.7078551724553108e-003 - 0.4175061881542206 - 0.6916306018829346 - <_> - - <_> - - - - <_>4 17 16 3 -1. - <_>4 18 16 1 3. - 0 - 0.0419810414314270 - 1 - 0.2018215060234070 - <_> - - - - <_>8 6 4 9 -1. - <_>8 9 4 3 3. - 0 - -0.0142729999497533 - 0.7511197924613953 - 0.5032083988189697 - <_> - - <_> - - - - <_>9 16 2 4 -1. - <_>9 16 1 2 2. - <_>10 18 1 2 2. - 0 - 4.0869521908462048e-003 - 1 - 0.2504513859748840 - <_> - - - - <_>5 5 10 8 -1. - <_>5 9 10 4 2. - 0 - 1.7606799956411123e-003 - 0.3301401138305664 - 0.5218337178230286 - <_> - - <_> - - - - <_>13 1 4 2 -1. - <_>13 1 2 2 2. - 0 - 1.2550549581646919e-004 - 0.4614442884922028 - 1 - <_> - - - - <_>14 0 3 6 -1. - <_>14 2 3 2 3. - 0 - -2.9503209516406059e-003 - 0.4619950056076050 - 0.5247030258178711 - <_> - - <_> - - - - <_>6 7 2 2 -1. - <_>6 7 1 1 2. - <_>7 8 1 1 2. - 0 - -1.1312420247122645e-003 - 0.6314368247985840 - 1 - <_> - - - - <_>7 1 6 1 -1. - <_>9 1 2 1 3. - 0 - -1.6983180539682508e-003 - 0.3401306867599487 - 0.5055527091026306 - <_> - - <_> - - - - <_>9 11 3 3 -1. - <_>9 12 3 1 3. - 0 - -0.0114578204229474 - 1 - 0.4939996004104614 - <_> - - - - <_>12 9 3 3 -1. - <_>13 9 1 3 3. - 0 - -8.4962565451860428e-003 - 0.2965450882911682 - 0.5194367766380310 - <_> - - <_> - - - - <_>8 11 3 3 -1. - <_>8 12 3 1 3. - 0 - 0.0119190895929933 - 1 - 0.7886998057365418 - <_> - - - - <_>5 9 3 3 -1. - <_>6 9 1 3 3. - 0 - 6.4416420646011829e-003 - 0.5106986761093140 - 0.2967146039009094 - <_> - - <_> - - - - <_>10 11 1 3 -1. - <_>10 12 1 1 3. - 0 - -8.7857811013236642e-004 - 0.5714371204376221 - 1 - <_> - - - - <_>7 9 6 4 -1. - <_>10 9 3 2 2. - <_>7 11 3 2 2. - 0 - -2.0312711130827665e-003 - 0.4481200873851776 - 0.5384911894798279 - <_> - - <_> - - - - <_>4 7 2 2 -1. - <_>4 7 1 1 2. - <_>5 8 1 1 2. - 0 - -1.5262430533766747e-003 - 0.6193568706512451 - 1 - <_> - - - - <_>5 7 3 1 -1. - <_>6 7 1 1 3. - 0 - 4.2860880494117737e-003 - 0.4339885115623474 - 0.7697299122810364 - <_> - - <_> - - - - <_>18 3 2 3 -1. - <_>18 4 2 1 3. - 0 - 3.5010920837521553e-003 - 1 - 0.3171389102935791 - <_> - - - - <_>13 1 4 2 -1. - <_>13 1 2 2 2. - 0 - 0.0125876702368259 - 0.5246698856353760 - 0.4241208136081696 - <_> - - <_> - - - - <_>3 1 4 2 -1. - <_>5 1 2 2 2. - 0 - 2.6207490009255707e-004 - 0.4231899976730347 - 1 - <_> - - - - <_>3 0 5 2 -1. - <_>3 1 5 1 2. - 0 - 4.4701730075757951e-005 - 0.4174138903617859 - 0.5919603705406189 - <_> - - <_> - - - - <_>14 7 6 4 -1. - <_>17 7 3 2 2. - <_>14 9 3 2 2. - 0 - 7.8084698179736733e-004 - 0.4277389049530029 - 1 - <_> - - - - <_>4 8 16 2 -1. - <_>4 9 16 1 2. - 0 - 8.8851212058216333e-004 - 0.3720161020755768 - 0.5226818919181824 - <_> - - <_> - - - - <_>2 11 5 6 -1. - <_>2 13 5 2 3. - 0 - 2.3369069676846266e-003 - 0.5478066802024841 - 1 - <_> - - - - <_>5 16 2 4 -1. - <_>5 16 1 2 2. - <_>6 18 1 2 2. - 0 - 1.6688359901309013e-003 - 0.3628678917884827 - 0.6150004863739014 - <_> - - <_> - - - - <_>15 6 2 12 -1. - <_>16 6 1 6 2. - <_>15 12 1 6 2. - 0 - 3.0844469438306987e-004 - 0.4747075140476227 - 1 - <_> - - - - <_>13 3 6 16 -1. - <_>15 3 2 16 3. - 0 - 3.4617560449987650e-003 - 0.4580138027667999 - 0.5585681796073914 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>4 5 6 6 2. - <_>10 11 6 6 2. - 0 - 0.0189613103866577 - 0.5298801064491272 - 1 - <_> - - - - <_>5 1 10 13 -1. - <_>10 1 5 13 2. - 0 - 0.1734731048345566 - 0.3698385059833527 - 0.8498619794845581 - <_> - - <_> - - - - <_>11 5 2 2 -1. - <_>12 5 1 1 2. - <_>11 6 1 1 2. - 0 - 2.0020549709443003e-004 - 1 - 0.5565661787986755 - <_> - - - - <_>13 5 1 3 -1. - <_>13 6 1 1 3. - 0 - 1.0967060225084424e-003 - 0.4795713126659393 - 0.6286259889602661 - <_> - - <_> - - - - <_>7 4 2 4 -1. - <_>7 4 1 2 2. - <_>8 6 1 2 2. - 0 - 1.5107099898159504e-004 - 0.4052405953407288 - 1 - <_> - - - - <_>7 5 6 4 -1. - <_>10 5 3 4 2. - 0 - -3.4463501069694757e-003 - 0.6173015236854553 - 0.4414263963699341 - <_> - - <_> - - - - <_>12 4 4 6 -1. - <_>14 4 2 3 2. - <_>12 7 2 3 2. - 0 - 8.5176620632410049e-003 - 1 - 0.3570570945739746 - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - -0.0358121097087860 - 0.3151328861713409 - 0.5252702832221985 - <_> - - <_> - - - - <_>5 6 6 6 -1. - <_>7 6 2 6 3. - 0 - -0.0211554002016783 - 0.6124721169471741 - 1 - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - 8.9890940580517054e-004 - 0.5169975757598877 - 0.3596271872520447 - <_> - - <_> - - - - <_>15 6 2 2 -1. - <_>16 6 1 1 2. - <_>15 7 1 1 2. - 0 - -1.5613760333508253e-003 - 1 - 0.4914987981319428 - <_> - - - - <_>14 7 4 4 -1. - <_>16 7 2 2 2. - <_>14 9 2 2 2. - 0 - 6.7120860330760479e-004 - 0.4546211063861847 - 0.5395811796188355 - <_> - - <_> - - - - <_>5 5 6 2 -1. - <_>7 5 2 2 3. - 0 - -0.0215970296412706 - 0.1903133988380432 - 1 - <_> - - - - <_>1 19 18 1 -1. - <_>7 19 6 1 3. - 0 - -0.0249472297728062 - 0.6974077224731445 - 0.4967716038227081 - <_> - - <_> - - - - <_>12 3 3 3 -1. - <_>12 4 3 1 3. - 0 - 1.8725979607552290e-003 - 0.4748947918415070 - 1 - <_> - - - - <_>16 0 2 3 -1. - <_>16 1 2 1 3. - 0 - 6.3912719488143921e-003 - 0.5180178284645081 - 0.2924321889877319 - <_> - - <_> - - - - <_>5 3 3 3 -1. - <_>5 4 3 1 3. - 0 - -9.1552399098873138e-003 - 0.7665870189666748 - 1 - <_> - - - - <_>2 0 2 3 -1. - <_>2 1 2 1 3. - 0 - 2.1715660113841295e-003 - 0.5215551257133484 - 0.3365719020366669 - <_> - - <_> - - - - <_>15 6 2 2 -1. - <_>16 6 1 1 2. - <_>15 7 1 1 2. - 0 - 1.2330369791015983e-003 - 1 - 0.6260957717895508 - <_> - - - - <_>10 13 1 6 -1. - <_>10 16 1 3 2. - 0 - -4.0785901364870369e-004 - 0.4533509910106659 - 0.5386489033699036 - <_> - - <_> - - - - <_>0 7 10 2 -1. - <_>0 7 5 1 2. - <_>5 8 5 1 2. - 0 - 4.6437609125860035e-004 - 0.4103496074676514 - 1 - <_> - - - - <_>3 10 6 2 -1. - <_>3 11 6 1 2. - 0 - -1.1600199650274590e-004 - 0.5830391049385071 - 0.4304105937480927 - <_> - - <_> - - - - <_>12 18 4 2 -1. - <_>12 19 4 1 2. - 0 - -0.0127187203615904 - 0.2132582962512970 - 1 - <_> - - - - <_>12 18 2 2 -1. - <_>13 18 1 1 2. - <_>12 19 1 1 2. - 0 - 8.9431880041956902e-005 - 0.4872891008853912 - 0.5458915233612061 - <_> - - <_> - - - - <_>6 19 2 1 -1. - <_>7 19 1 1 2. - 0 - -3.3913689549081028e-004 - 0.3974364995956421 - 1 - <_> - - - - <_>0 4 2 16 -1. - <_>0 4 1 8 2. - <_>1 12 1 8 2. - 0 - -0.0180263407528400 - 0.7568550705909729 - 0.5045611858367920 - <_> - - <_> - - - - <_>16 1 4 9 -1. - <_>16 4 4 3 3. - 0 - 6.9179181009531021e-003 - 1 - 0.3966299891471863 - <_> - - - - <_>10 2 1 2 -1. - <_>10 3 1 1 2. - 0 - -1.1839679791592062e-004 - 0.4198082983493805 - 0.5435804128646851 - <_> - - <_> - - - - <_>4 14 4 6 -1. - <_>4 14 2 3 2. - <_>6 17 2 3 2. - 0 - -3.9474181830883026e-003 - 0.6369457840919495 - 1 - <_> - - - - <_>4 15 1 4 -1. - <_>4 17 1 2 2. - 0 - 6.0050919273635373e-005 - 0.5269566774368286 - 0.3812243044376373 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>10 2 10 2 2. - <_>0 4 10 2 2. - 0 - 9.1423643752932549e-003 - 1 - 0.4156762957572937 - <_> - - - - <_>14 5 2 8 -1. - <_>14 9 2 4 2. - 0 - 2.1305440168362111e-004 - 0.3523533046245575 - 0.5349454283714294 - <_> - - <_> - - - - <_>5 12 4 5 -1. - <_>7 12 2 5 2. - 0 - -2.0855850016232580e-004 - 1 - 0.4403322041034699 - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - 1.3130389852449298e-003 - 0.6058161258697510 - 0.4468218982219696 - <_> - - <_> - - - - <_>9 14 11 3 -1. - <_>9 15 11 1 3. - 0 - -2.9134768992662430e-003 - 1 - 0.4825705885887146 - <_> - - - - <_>7 14 7 3 -1. - <_>7 15 7 1 3. - 0 - 2.9645769391208887e-003 - 0.4835998117923737 - 0.6039277911186218 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - 1.7772549763321877e-003 - 1 - 0.6871827244758606 - <_> - - - - <_>6 7 2 7 -1. - <_>7 7 1 7 2. - 0 - -7.7136349864304066e-003 - 0.2842220962047577 - 0.5145428180694580 - <_> - - <_> - - - - <_>14 5 1 3 -1. - <_>14 6 1 1 3. - 0 - 5.1027478184551001e-004 - 1 - 0.6024426221847534 - <_> - - - - <_>13 4 4 3 -1. - <_>13 5 4 1 3. - 0 - 1.7460630042478442e-003 - 0.4756610095500946 - 0.5721154212951660 - <_> - - <_> - - - - <_>2 7 4 4 -1. - <_>2 7 2 2 2. - <_>4 9 2 2 2. - 0 - 3.8068278809078038e-004 - 1 - 0.4931069016456604 - <_> - - - - <_>2 9 13 6 -1. - <_>2 12 13 3 2. - 0 - 2.8228890150785446e-003 - 0.3311698138713837 - 0.6227598190307617 - <_> - - <_> - - - - <_>10 1 3 4 -1. - <_>11 1 1 4 3. - 0 - -5.3000478073954582e-003 - 1 - 0.5232092738151550 - <_> - - - - <_>9 8 5 2 -1. - <_>9 9 5 1 2. - 0 - 4.4951299059903249e-005 - 0.3995231986045837 - 0.5314797759056091 - <_> - - <_> - - - - <_>0 14 11 3 -1. - <_>0 15 11 1 3. - 0 - 3.2752458937466145e-003 - 0.4481619894504547 - 1 - <_> - - - - <_>8 11 2 8 -1. - <_>8 15 2 4 2. - 0 - -2.8162579983472824e-003 - 0.3907971978187561 - 0.6671640872955322 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>5 14 10 3 2. - 0 - 1.4112279750406742e-003 - 0.5357010960578919 - 1 - <_> - - - - <_>5 13 15 5 -1. - <_>10 13 5 5 3. - 0 - 8.3062034100294113e-003 - 0.4770965874195099 - 0.5570099949836731 - <_> - - <_> - - - - <_>8 10 1 10 -1. - <_>8 15 1 5 2. - 0 - 2.2164839319884777e-003 - 0.4947124123573303 - 1 - <_> - - - - <_>4 14 6 2 -1. - <_>6 14 2 2 3. - 0 - -4.9868631176650524e-003 - 0.5241307020187378 - 0.2512654960155487 - <_> - - <_> - - - - <_>7 14 7 3 -1. - <_>7 15 7 1 3. - 0 - -3.6664260551333427e-003 - 1 - 0.4619553983211517 - <_> - - - - <_>7 16 9 3 -1. - <_>7 17 9 1 3. - 0 - -0.0105812298133969 - 0.6301718950271606 - 0.4973031878471375 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - 7.3366491124033928e-003 - 1 - 0.2870970070362091 - <_> - - - - <_>3 5 1 6 -1. - <_>3 8 1 3 2. - 0 - -3.9318940252996981e-004 - 0.4252805113792419 - 0.5579246878623962 - <_> - - <_> - - - - <_>6 5 11 2 -1. - <_>6 6 11 1 2. - 0 - -8.1375334411859512e-003 - 0.5747315883636475 - 1 - <_> - - - - <_>9 0 3 2 -1. - <_>10 0 1 2 3. - 0 - 2.4809150490909815e-003 - 0.5203374028205872 - 0.3903566896915436 - <_> - - <_> - - - - <_>5 5 1 3 -1. - <_>5 6 1 1 3. - 0 - 8.8749779388308525e-004 - 1 - 0.5534321069717407 - <_> - - - - <_>8 7 3 2 -1. - <_>9 7 1 2 3. - 0 - -4.2194919660687447e-004 - 0.5338044166564941 - 0.3925840854644775 - <_> - - <_> - - - - <_>5 2 10 6 -1. - <_>10 2 5 3 2. - <_>5 5 5 3 2. - 0 - -7.9790111631155014e-003 - 0.4144316017627716 - 1 - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 3 4 2. - 0 - 1.1439629597589374e-003 - 0.4701372981071472 - 0.5281736254692078 - <_> - - <_> - - - - <_>8 16 3 4 -1. - <_>9 16 1 4 3. - 0 - 7.5542130507528782e-003 - 1 - 0.2527256011962891 - <_> - - - - <_>9 13 2 6 -1. - <_>9 13 1 3 2. - <_>10 16 1 3 2. - 0 - 1.0288399644196033e-003 - 0.5605146288871765 - 0.4297856092453003 - <_> - - <_> - - - - <_>9 8 3 1 -1. - <_>10 8 1 1 3. - 0 - -1.7234670231118798e-003 - 1 - 0.4839682877063751 - <_> - - - - <_>2 5 18 15 -1. - <_>2 10 18 5 3. - 0 - 0.5758669972419739 - 0.5110502839088440 - 0.0804893299937248 - 44.2512817382812500 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>1 3 6 2 -1. - <_>4 3 3 2 2. - 0 - 6.6640521399676800e-003 - 0.3828920125961304 - 1 - <_> - - - - <_>7 6 6 2 -1. - <_>9 6 2 2 3. - 0 - 8.9905522763729095e-003 - 0.4858429133892059 - 0.7354959249496460 - <_> - - <_> - - - - <_>8 17 4 3 -1. - <_>8 18 4 1 3. - 0 - 5.7154200039803982e-003 - 1 - 0.6723223924636841 - <_> - - - - <_>10 13 2 3 -1. - <_>10 14 2 1 3. - 0 - 1.1257929727435112e-003 - 0.4429577887058258 - 0.6070777773857117 - <_> - - <_> - - - - <_>0 10 20 4 -1. - <_>0 12 20 2 2. - 0 - -9.1789010912179947e-004 - 1 - 0.3076345026493073 - <_> - - - - <_>5 7 6 4 -1. - <_>5 7 3 2 2. - <_>8 9 3 2 2. - 0 - -1.0492859873920679e-003 - 0.5593643784523010 - 0.3651022911071777 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - 3.5453929740469903e-005 - 0.4277968108654022 - 1 - <_> - - - - <_>10 10 2 3 -1. - <_>10 11 2 1 3. - 0 - 2.9015709878876805e-004 - 0.4583545029163361 - 0.5284683108329773 - <_> - - <_> - - - - <_>9 5 2 2 -1. - <_>9 6 2 1 2. - 0 - 1.6071660502348095e-004 - 1 - 0.3798192143440247 - <_> - - - - <_>4 4 1 10 -1. - <_>4 9 1 5 2. - 0 - -5.2961107576265931e-004 - 0.3850437104701996 - 0.5939688086509705 - <_> - - <_> - - - - <_>11 18 4 2 -1. - <_>11 18 2 2 2. - 0 - 2.6682569296099246e-004 - 0.4123024940490723 - 1 - <_> - - - - <_>12 18 3 2 -1. - <_>12 19 3 1 2. - 0 - -1.3492540165316314e-004 - 0.5760599970817566 - 0.4237645864486694 - <_> - - <_> - - - - <_>0 6 16 6 -1. - <_>0 6 8 3 2. - <_>8 9 8 3 2. - 0 - -0.0108416797593236 - 0.3929921090602875 - 1 - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 0.0120778298005462 - 0.5761923193931580 - 0.2780444920063019 - <_> - - <_> - - - - <_>11 18 4 2 -1. - <_>11 18 2 2 2. - 0 - 2.2128869313746691e-003 - 0.4794507026672363 - 1 - <_> - - - - <_>12 18 3 2 -1. - <_>12 19 3 1 2. - 0 - -0.0152661902830005 - 0.0740558803081512 - 0.5153577923774719 - <_> - - <_> - - - - <_>8 12 1 2 -1. - <_>8 13 1 1 2. - 0 - 6.7929533543065190e-005 - 1 - 0.5858737826347351 - <_> - - - - <_>8 13 1 3 -1. - <_>8 14 1 1 3. - 0 - 1.7633590323384851e-004 - 0.3567610979080200 - 0.5598962903022766 - <_> - - <_> - - - - <_>11 18 4 2 -1. - <_>11 18 2 2 2. - 0 - 8.1311381654813886e-004 - 1 - 0.5346850752830505 - <_> - - - - <_>14 12 4 6 -1. - <_>14 12 2 6 2. - 0 - 3.2630451023578644e-003 - 0.4782536923885346 - 0.5456753969192505 - <_> - - <_> - - - - <_>6 0 3 4 -1. - <_>7 0 1 4 3. - 0 - -3.9503918960690498e-003 - 0.2831811904907227 - 1 - <_> - - - - <_>4 0 2 8 -1. - <_>4 0 1 4 2. - <_>5 4 1 4 2. - 0 - -3.9864578866399825e-004 - 0.5485215783119202 - 0.4159697890281677 - <_> - - <_> - - - - <_>11 17 9 3 -1. - <_>14 17 3 3 3. - 0 - -0.0114325201138854 - 0.5639101266860962 - 1 - <_> - - - - <_>16 2 4 5 -1. - <_>16 2 2 5 2. - 0 - 5.3339172154664993e-003 - 0.4596984088420868 - 0.5931242704391480 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 8.3193257451057434e-003 - 1 - 0.3230620026588440 - <_> - - - - <_>7 2 3 2 -1. - <_>8 2 1 2 3. - 0 - -4.2479918920435011e-004 - 0.3795293867588043 - 0.5408611297607422 - <_> - - <_> - - - - <_>11 17 9 3 -1. - <_>14 17 3 3 3. - 0 - -0.1118943020701408 - 0.1132297962903976 - 1 - <_> - - - - <_>16 2 4 5 -1. - <_>16 2 2 5 2. - 0 - -7.5553781352937222e-003 - 0.6339370012283325 - 0.4838770925998688 - <_> - - <_> - - - - <_>0 17 9 3 -1. - <_>3 17 3 3 3. - 0 - -7.0337029173970222e-003 - 0.5665255188941956 - 1 - <_> - - - - <_>0 2 4 5 -1. - <_>2 2 2 5 2. - 0 - -0.0148336803540587 - 0.6751418113708496 - 0.4140945076942444 - <_> - - <_> - - - - <_>5 11 10 9 -1. - <_>5 14 10 3 3. - 0 - 8.7506724521517754e-003 - 1 - 0.3561258912086487 - <_> - - - - <_>9 6 3 3 -1. - <_>9 7 3 1 3. - 0 - 1.6645010327920318e-003 - 0.5347279906272888 - 0.3649779856204987 - <_> - - <_> - - - - <_>3 17 5 3 -1. - <_>3 18 5 1 3. - 0 - 9.4900820404291153e-003 - 1 - 0.2754656076431274 - <_> - - - - <_>7 5 4 7 -1. - <_>9 5 2 7 2. - 0 - 1.1133110383525491e-003 - 0.4225992858409882 - 0.5629178881645203 - <_> - - <_> - - - - <_>9 8 2 5 -1. - <_>9 8 1 5 2. - 0 - 9.4940755516290665e-003 - 0.4906036853790283 - 1 - <_> - - - - <_>2 2 18 2 -1. - <_>2 3 18 1 2. - 0 - -1.5396620146930218e-003 - 0.4007051885128021 - 0.5380709171295166 - <_> - - <_> - - - - <_>2 8 15 6 -1. - <_>7 8 5 6 3. - 0 - 0.1343495994806290 - 1 - 0.2214671969413757 - <_> - - - - <_>9 8 2 5 -1. - <_>10 8 1 5 2. - 0 - -9.4940755516290665e-003 - 0.7353156208992004 - 0.5005033016204834 - <_> - - <_> - - - - <_>12 10 4 6 -1. - <_>12 12 4 2 3. - 0 - 0.0200117900967598 - 1 - 0.3327906131744385 - <_> - - - - <_>14 3 6 2 -1. - <_>14 4 6 1 2. - 0 - -1.8875009845942259e-003 - 0.3915289044380188 - 0.5401849746704102 - <_> - - <_> - - - - <_>5 5 2 3 -1. - <_>5 6 2 1 3. - 0 - 7.1842782199382782e-003 - 1 - 0.7176604866981506 - <_> - - - - <_>4 6 3 3 -1. - <_>4 7 3 1 3. - 0 - 1.6976969782263041e-003 - 0.4526978135108948 - 0.6076912879943848 - <_> - - <_> - - - - <_>14 12 3 3 -1. - <_>14 13 3 1 3. - 0 - 4.9219978973269463e-003 - 1 - 0.2569833993911743 - <_> - - - - <_>6 12 11 3 -1. - <_>6 13 11 1 3. - 0 - 0.0118031995370984 - 0.4999637901782990 - 0.5958228111267090 - <_> - - <_> - - - - <_>1 2 3 6 -1. - <_>1 4 3 2 3. - 0 - -9.7703449428081512e-003 - 0.3459093868732452 - 1 - <_> - - - - <_>1 0 4 7 -1. - <_>3 0 2 7 2. - 0 - 2.1174899302423000e-003 - 0.4515126943588257 - 0.5829715728759766 - <_> - - <_> - - - - <_>9 8 3 4 -1. - <_>10 8 1 4 3. - 0 - 9.4801411032676697e-003 - 0.4807392060756683 - 1 - <_> - - - - <_>10 9 2 2 -1. - <_>10 10 2 1 2. - 0 - -2.6078789960592985e-003 - 0.3462216854095459 - 0.5201594829559326 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>9 8 1 4 3. - 0 - -5.7252747938036919e-003 - 0.6599853038787842 - 1 - <_> - - - - <_>4 4 10 10 -1. - <_>4 9 10 5 2. - 0 - -8.2325618714094162e-003 - 0.2821828126907349 - 0.5125284790992737 - <_> - - <_> - - - - <_>9 10 3 2 -1. - <_>10 10 1 2 3. - 0 - 8.9571950957179070e-004 - 0.4883818924427033 - 1 - <_> - - - - <_>9 10 3 2 -1. - <_>9 11 3 1 2. - 0 - -1.5021569561213255e-004 - 0.4829918146133423 - 0.5428717136383057 - <_> - - <_> - - - - <_>8 10 3 2 -1. - <_>9 10 1 2 3. - 0 - 4.8489659093320370e-004 - 0.4434598982334137 - 1 - <_> - - - - <_>2 4 14 12 -1. - <_>2 4 7 6 2. - <_>9 10 7 6 2. - 0 - -0.0961926504969597 - 0.2256636023521423 - 0.5956227779388428 - <_> - - <_> - - - - <_>10 12 1 6 -1. - <_>10 15 1 3 2. - 0 - -1.1053519556298852e-003 - 0.4527224004268646 - 1 - <_> - - - - <_>7 3 8 16 -1. - <_>11 3 4 8 2. - <_>7 11 4 8 2. - 0 - -0.1021504029631615 - 0.2844349145889282 - 0.5186452865600586 - <_> - - <_> - - - - <_>5 6 8 10 -1. - <_>5 6 4 5 2. - <_>9 11 4 5 2. - 0 - 3.0147889629006386e-003 - 1 - 0.3808999061584473 - <_> - - - - <_>6 2 8 8 -1. - <_>6 2 4 4 2. - <_>10 6 4 4 2. - 0 - 7.6131648384034634e-003 - 0.5718699097633362 - 0.4262563884258270 - <_> - - <_> - - - - <_>10 5 4 2 -1. - <_>12 5 2 1 2. - <_>10 6 2 1 2. - 0 - 1.5197630273178220e-003 - 1 - 0.5942718982696533 - <_> - - - - <_>12 4 3 3 -1. - <_>12 5 3 1 3. - 0 - -0.0141972796991467 - 0.7731103897094727 - 0.4997653961181641 - <_> - - <_> - - - - <_>4 19 12 1 -1. - <_>8 19 4 1 3. - 0 - -0.0138188796117902 - 0.6681138277053833 - 1 - <_> - - - - <_>8 2 3 1 -1. - <_>9 2 1 1 3. - 0 - -5.0701329018920660e-004 - 0.3305608034133911 - 0.4749974906444550 - <_> - - <_> - - - - <_>13 17 4 3 -1. - <_>13 18 4 1 3. - 0 - -9.3537531793117523e-003 - 0.2860932946205139 - 1 - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - -9.4771059229969978e-003 - 0.6188883185386658 - 0.4842100143432617 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - 1.6923650400713086e-003 - 1 - 0.6070249080657959 - <_> - - - - <_>7 15 6 3 -1. - <_>7 16 6 1 3. - 0 - 5.8652542065829039e-004 - 0.3782689869403839 - 0.5368196964263916 - <_> - - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - -2.5826620403677225e-003 - 0.3690209984779358 - 1 - <_> - - - - <_>14 12 2 3 -1. - <_>14 13 2 1 3. - 0 - -2.7307639829814434e-003 - 0.3857114911079407 - 0.5318108797073364 - <_> - - <_> - - - - <_>4 10 4 6 -1. - <_>4 12 4 2 3. - 0 - 0.0218715704977512 - 1 - 0.2327008992433548 - <_> - - - - <_>4 13 3 2 -1. - <_>4 14 3 1 2. - 0 - -1.5010299648565706e-005 - 0.5560722947120667 - 0.4301410019397736 - <_> - - <_> - - - - <_>9 16 2 3 -1. - <_>9 17 2 1 3. - 0 - 5.3583700209856033e-003 - 1 - 0.6767637729644775 - <_> - - - - <_>10 18 3 2 -1. - <_>11 18 1 2 3. - 0 - 5.0057549960911274e-003 - 0.5194904208183289 - 0.3612853884696960 - <_> - - <_> - - - - <_>7 18 3 2 -1. - <_>8 18 1 2 3. - 0 - -1.9030070398002863e-003 - 0.3237845003604889 - 1 - <_> - - - - <_>1 10 4 2 -1. - <_>1 11 4 1 2. - 0 - -7.8506693243980408e-003 - 0.1194851994514465 - 0.4991723895072937 - <_> - - <_> - - - - <_>12 4 6 3 -1. - <_>12 5 6 1 3. - 0 - -2.7093670796602964e-003 - 1 - 0.4854960143566132 - <_> - - - - <_>14 4 1 3 -1. - <_>14 5 1 1 3. - 0 - 1.4138079714030027e-003 - 0.4872322976589203 - 0.5903577804565430 - <_> - - <_> - - - - <_>2 4 6 3 -1. - <_>2 5 6 1 3. - 0 - 9.0300198644399643e-003 - 1 - 0.6547315716743469 - <_> - - - - <_>5 4 1 3 -1. - <_>5 5 1 1 3. - 0 - -9.7925681620836258e-004 - 0.5849273204803467 - 0.4554230868816376 - <_> - - <_> - - - - <_>14 12 3 3 -1. - <_>14 13 3 1 3. - 0 - 1.3984439428895712e-003 - 1 - 0.4064626097679138 - <_> - - - - <_>15 12 2 3 -1. - <_>15 13 2 1 3. - 0 - 8.3372107474133372e-004 - 0.5399543046951294 - 0.4152809977531433 - <_> - - <_> - - - - <_>3 16 4 3 -1. - <_>3 17 4 1 3. - 0 - 0.0105510596185923 - 1 - 0.1796680986881256 - <_> - - - - <_>8 0 4 2 -1. - <_>8 1 4 1 2. - 0 - 8.8344102550763637e-005 - 0.4251863062381744 - 0.5413522720336914 - <_> - - <_> - - - - <_>0 0 20 1 -1. - <_>0 0 10 1 2. - 0 - -0.0410223081707954 - 1 - 0.5228124856948853 - <_> - - - - <_>9 7 3 4 -1. - <_>10 7 1 4 3. - 0 - 7.5065628625452518e-003 - 0.4853743016719818 - 0.6093444228172302 - <_> - - <_> - - - - <_>0 0 20 1 -1. - <_>10 0 10 1 2. - 0 - 0.0410223081707954 - 1 - 0.2205024063587189 - <_> - - - - <_>8 7 3 4 -1. - <_>9 7 1 4 3. - 0 - -5.3961377125233412e-004 - 0.5692731738090515 - 0.4468756914138794 - <_> - - <_> - - - - <_>1 6 19 3 -1. - <_>1 7 19 1 3. - 0 - -0.0686960369348526 - 0.1483314037322998 - 1 - <_> - - - - <_>12 7 4 2 -1. - <_>12 8 4 1 2. - 0 - -1.8447940237820148e-003 - 0.6211283802986145 - 0.4966601133346558 - <_> - - <_> - - - - <_>7 8 3 3 -1. - <_>7 9 3 1 3. - 0 - -6.0959919355809689e-003 - 0.2294671982526779 - 1 - <_> - - - - <_>7 7 3 3 -1. - <_>8 7 1 3 3. - 0 - -4.2068301700055599e-003 - 0.6407091021537781 - 0.4748562872409821 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>2 10 16 1 3. - 0 - -7.1332789957523346e-004 - 1 - 0.5354936122894287 - <_> - - - - <_>9 4 2 12 -1. - <_>9 8 2 4 3. - 0 - 0.1175677999854088 - 0.5136978030204773 - 0.0105957398191094 - <_> - - <_> - - - - <_>7 3 2 5 -1. - <_>8 3 1 5 2. - 0 - 5.9354289987822995e-005 - 0.3711803853511810 - 1 - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - -6.3173691742122173e-003 - 0.1712073981761932 - 0.5061758160591126 - <_> - - <_> - - - - <_>9 14 4 3 -1. - <_>9 15 4 1 3. - 0 - 0.0149414995685220 - 1 - 0.6729118824005127 - <_> - - - - <_>7 8 6 4 -1. - <_>10 8 3 2 2. - <_>7 10 3 2 2. - 0 - -2.0789399277418852e-003 - 0.4410645961761475 - 0.5444027781486511 - <_> - - <_> - - - - <_>9 7 2 2 -1. - <_>10 7 1 2 2. - 0 - -7.0736219640821218e-004 - 0.5568910837173462 - 1 - <_> - - - - <_>5 5 6 6 -1. - <_>7 5 2 6 3. - 0 - -3.1247111037373543e-003 - 0.5023869276046753 - 0.3562405109405518 - <_> - - <_> - - - - <_>9 1 3 6 -1. - <_>10 1 1 6 3. - 0 - -7.8919378574937582e-004 - 1 - 0.5456786155700684 - <_> - - - - <_>4 5 12 2 -1. - <_>8 5 4 2 3. - 0 - 0.0101795801892877 - 0.5545138716697693 - 0.4622310996055603 - <_> - - <_> - - - - <_>4 2 6 4 -1. - <_>6 2 2 4 3. - 0 - -2.7506109327077866e-003 - 1 - 0.4942536056041718 - <_> - - - - <_>4 7 8 2 -1. - <_>4 8 8 1 2. - 0 - 0.0106013296172023 - 0.2961233854293823 - 0.5964338779449463 - <_> - - <_> - - - - <_>3 6 14 6 -1. - <_>10 6 7 3 2. - <_>3 9 7 3 2. - 0 - 5.1466780714690685e-003 - 0.5495228767395020 - 1 - <_> - - - - <_>3 6 14 3 -1. - <_>3 6 7 3 2. - 0 - 0.0763211473822594 - 0.5173959136009216 - 0.2940216958522797 - <_> - - <_> - - - - <_>0 5 2 2 -1. - <_>0 6 2 1 2. - 0 - -1.5027689514681697e-003 - 0.3106299936771393 - 1 - <_> - - - - <_>8 13 4 3 -1. - <_>8 14 4 1 3. - 0 - 0.0122666703537107 - 0.4651150107383728 - 0.6846613883972168 - <_> - - <_> - - - - <_>13 0 3 20 -1. - <_>14 0 1 20 3. - 0 - -0.0311185792088509 - 1 - 0.5226057171821594 - <_> - - - - <_>10 8 10 3 -1. - <_>10 9 10 1 3. - 0 - 0.0289055891335011 - 0.5182244181632996 - 0.2705428004264832 - <_> - - <_> - - - - <_>4 0 3 20 -1. - <_>5 0 1 20 3. - 0 - 0.0475983805954456 - 1 - 0.1109512001276016 - <_> - - - - <_>0 8 10 3 -1. - <_>0 9 10 1 3. - 0 - 0.0308085493743420 - 0.4938625097274780 - 0.1404110938310623 - <_> - - <_> - - - - <_>12 5 3 4 -1. - <_>13 5 1 4 3. - 0 - -2.1277810446918011e-004 - 1 - 0.4392356872558594 - <_> - - - - <_>6 7 12 4 -1. - <_>10 7 4 4 3. - 0 - 0.0789699628949165 - 0.5216552019119263 - 0.2294113934040070 - <_> - - <_> - - - - <_>1 14 6 6 -1. - <_>1 14 3 3 2. - <_>4 17 3 3 2. - 0 - -0.0102579500526190 - 0.6176652908325195 - 1 - <_> - - - - <_>1 17 6 2 -1. - <_>1 18 6 1 2. - 0 - 1.2604889925569296e-003 - 0.5236222743988037 - 0.3328965902328491 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>17 8 3 6 2. - <_>14 14 3 6 2. - 0 - -0.0334904603660107 - 1 - 0.4866186976432800 - <_> - - - - <_>18 5 2 2 -1. - <_>18 6 2 1 2. - 0 - -5.9202767442911863e-004 - 0.4116407036781311 - 0.5395640134811401 - <_> - - <_> - - - - <_>3 16 4 2 -1. - <_>3 16 2 1 2. - <_>5 17 2 1 2. - 0 - 3.0320750738610514e-005 - 1 - 0.5610736012458801 - <_> - - - - <_>2 16 6 2 -1. - <_>4 16 2 2 3. - 0 - -5.4369680583477020e-004 - 0.5621389150619507 - 0.3461203873157501 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>17 8 3 6 2. - <_>14 14 3 6 2. - 0 - -0.0334904603660107 - 1 - 0.4896762073040009 - <_> - - - - <_>18 5 2 2 -1. - <_>18 6 2 1 2. - 0 - -5.9202767442911863e-004 - 0.4305404126644135 - 0.5340713858604431 - <_> - - <_> - - - - <_>5 16 9 2 -1. - <_>8 16 3 2 3. - 0 - 2.0550889894366264e-003 - 0.5544999837875366 - 1 - <_> - - - - <_>3 14 6 6 -1. - <_>3 14 3 3 2. - <_>6 17 3 3 2. - 0 - -4.4353571720421314e-003 - 0.6038540005683899 - 0.3746592998504639 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>17 8 3 6 2. - <_>14 14 3 6 2. - 0 - -0.0841704234480858 - 1 - 0.5007348060607910 - <_> - - - - <_>11 7 2 12 -1. - <_>11 11 2 4 3. - 0 - 6.7419027909636497e-003 - 0.5298097133636475 - 0.4716145098209381 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>0 8 3 6 2. - <_>3 14 3 6 2. - 0 - 0.0102781504392624 - 1 - 0.6269375085830689 - <_> - - - - <_>7 7 2 12 -1. - <_>7 11 2 4 3. - 0 - 5.8800862170755863e-003 - 0.5154827833175659 - 0.3813040852546692 - <_> - - <_> - - - - <_>14 12 1 2 -1. - <_>14 13 1 1 2. - 0 - -6.9679190346505493e-006 - 1 - 0.4440239965915680 - <_> - - - - <_>12 13 8 1 -1. - <_>12 13 4 1 2. - 0 - 8.2419527461752295e-004 - 0.4697534143924713 - 0.5485504269599915 - <_> - - <_> - - - - <_>0 3 16 6 -1. - <_>0 6 16 3 2. - 0 - -5.5268318392336369e-003 - 0.5513604879379273 - 1 - <_> - - - - <_>1 4 8 2 -1. - <_>1 4 4 1 2. - <_>5 5 4 1 2. - 0 - 9.6128671430051327e-004 - 0.3618639111518860 - 0.5838456749916077 - <_> - - <_> - - - - <_>14 12 1 2 -1. - <_>14 13 1 1 2. - 0 - 2.4810510221868753e-003 - 1 - 0.2523222863674164 - <_> - - - - <_>15 12 2 3 -1. - <_>15 13 2 1 3. - 0 - -1.0480589699000120e-003 - 0.4117257893085480 - 0.5392996072769165 - <_> - - <_> - - - - <_>8 16 3 3 -1. - <_>8 17 3 1 3. - 0 - -6.1287907883524895e-003 - 0.6726329922676086 - 1 - <_> - - - - <_>5 12 1 2 -1. - <_>5 13 1 1 2. - 0 - 1.1682329932227731e-004 - 0.5041192770004273 - 0.3607729077339172 - <_> - - <_> - - - - <_>13 4 3 15 -1. - <_>14 4 1 15 3. - 0 - -0.0399094782769680 - 0.1563739031553268 - 1 - <_> - - - - <_>17 3 2 6 -1. - <_>18 3 1 3 2. - <_>17 6 1 3 2. - 0 - 1.5859459526836872e-003 - 0.4891980886459351 - 0.5779845118522644 - <_> - - <_> - - - - <_>4 4 3 15 -1. - <_>5 4 1 15 3. - 0 - -0.0226902291178703 - 0.2186879068613052 - 1 - <_> - - - - <_>1 3 2 6 -1. - <_>1 3 1 3 2. - <_>2 6 1 3 2. - 0 - 2.0916070789098740e-003 - 0.4771577119827271 - 0.6099231243133545 - <_> - - <_> - - - - <_>7 15 12 4 -1. - <_>7 17 12 2 2. - 0 - -0.0247154198586941 - 0.3463996946811676 - 1 - <_> - - - - <_>1 0 19 3 -1. - <_>1 1 19 1 3. - 0 - -0.0134194502606988 - 0.3630692958831787 - 0.5252196192741394 - <_> - - <_> - - - - <_>3 17 10 2 -1. - <_>3 17 5 1 2. - <_>8 18 5 1 2. - 0 - -6.0629472136497498e-003 - 0.6666321754455566 - 1 - <_> - - - - <_>2 5 10 15 -1. - <_>2 10 10 5 3. - 0 - -2.0921030081808567e-003 - 0.3399547040462494 - 0.5035697817802429 - <_> - - <_> - - - - <_>13 8 3 4 -1. - <_>13 10 3 2 2. - 0 - 0.0259618591517210 - 0.5036802887916565 - 1 - <_> - - - - <_>19 13 1 2 -1. - <_>19 14 1 1 2. - 0 - 1.7908669542521238e-004 - 0.5418530702590942 - 0.4318976998329163 - <_> - - <_> - - - - <_>4 8 3 4 -1. - <_>4 10 3 2 2. - 0 - -3.1546850223094225e-003 - 0.7221025228500366 - 1 - <_> - - - - <_>0 13 1 2 -1. - <_>0 14 1 1 2. - 0 - -1.1397759662941098e-003 - 0.3320972919464111 - 0.5024433732032776 - <_> - - <_> - - - - <_>12 7 2 12 -1. - <_>12 13 2 6 2. - 0 - -0.0478402115404606 - 0.1938765048980713 - 1 - <_> - - - - <_>14 7 2 2 -1. - <_>15 7 1 1 2. - <_>14 8 1 1 2. - 0 - 4.1577088995836675e-004 - 0.4802188873291016 - 0.5730714797973633 - <_> - - <_> - - - - <_>5 3 8 2 -1. - <_>5 4 8 1 2. - 0 - -4.4247039477340877e-004 - 0.4262515008449554 - 1 - <_> - - - - <_>0 2 2 6 -1. - <_>0 4 2 2 3. - 0 - 1.4479350065812469e-003 - 0.5719171166419983 - 0.4064153134822846 - <_> - - <_> - - - - <_>18 2 2 12 -1. - <_>19 2 1 6 2. - <_>18 8 1 6 2. - 0 - 0.0157015100121498 - 0.4995726048946381 - 1 - <_> - - - - <_>18 1 1 2 -1. - <_>18 2 1 1 2. - 0 - 2.7805729769170284e-004 - 0.5289286971092224 - 0.4581728875637054 - <_> - - <_> - - - - <_>0 2 2 12 -1. - <_>0 2 1 6 2. - <_>1 8 1 6 2. - 0 - -2.9010509606450796e-003 - 0.6012148261070252 - 1 - <_> - - - - <_>1 1 1 2 -1. - <_>1 2 1 1 2. - 0 - 2.0830519497394562e-004 - 0.5057976841926575 - 0.3599432110786438 - <_> - - <_> - - - - <_>16 4 4 14 -1. - <_>18 4 2 7 2. - <_>16 11 2 7 2. - 0 - -0.0515300296247005 - 1 - 0.4991796910762787 - <_> - - - - <_>10 14 1 6 -1. - <_>10 17 1 3 2. - 0 - 1.7163449956569821e-004 - 0.4675469994544983 - 0.5374773144721985 - <_> - - <_> - - - - <_>0 4 4 14 -1. - <_>0 4 2 7 2. - <_>2 11 2 7 2. - 0 - 0.0236142799258232 - 1 - 0.6586478948593140 - <_> - - - - <_>9 14 1 6 -1. - <_>9 17 1 3 2. - 0 - -5.6427798699587584e-004 - 0.3853296041488648 - 0.5196040272712708 - <_> - - <_> - - - - <_>9 14 4 3 -1. - <_>9 15 4 1 3. - 0 - 6.6903959959745407e-003 - 1 - 0.6004235744476318 - <_> - - - - <_>4 7 12 2 -1. - <_>8 7 4 2 3. - 0 - -4.8789530992507935e-003 - 0.3293227851390839 - 0.5245236754417419 - <_> - - <_> - - - - <_>0 8 4 3 -1. - <_>0 9 4 1 3. - 0 - -6.8537332117557526e-003 - 0.2565914094448090 - 1 - <_> - - - - <_>4 7 2 2 -1. - <_>4 7 1 1 2. - <_>5 8 1 1 2. - 0 - 9.9893810693174601e-004 - 0.4615494012832642 - 0.5942432284355164 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - -1.3354700058698654e-004 - 0.5487375855445862 - 1 - <_> - - - - <_>11 4 4 5 -1. - <_>11 4 2 5 2. - 0 - 1.0165109997615218e-003 - 0.4578359127044678 - 0.5426927804946899 - <_> - - <_> - - - - <_>4 8 3 3 -1. - <_>5 8 1 3 3. - 0 - 9.1216771397739649e-004 - 1 - 0.3939461112022400 - <_> - - - - <_>0 3 8 1 -1. - <_>4 3 4 1 2. - 0 - 1.0080259526148438e-003 - 0.4049789905548096 - 0.5520703792572022 - <_> - - <_> - - - - <_>13 7 2 1 -1. - <_>13 7 1 1 2. - 0 - -1.3102490629535168e-004 - 1 - 0.4879088997840881 - <_> - - - - <_>14 7 3 2 -1. - <_>15 7 1 2 3. - 0 - 5.5228749988600612e-004 - 0.4844943881034851 - 0.5512825846672058 - <_> - - <_> - - - - <_>5 7 2 1 -1. - <_>6 7 1 1 2. - 0 - -1.2130969844292849e-004 - 1 - 0.4367971122264862 - <_> - - - - <_>3 7 3 2 -1. - <_>4 7 1 2 3. - 0 - -1.5112989785848185e-005 - 0.6425955295562744 - 0.4881826937198639 - <_> - - <_> - - - - <_>18 5 2 2 -1. - <_>18 6 2 1 2. - 0 - -4.0125829400494695e-004 - 1 - 0.5372099280357361 - <_> - - - - <_>12 14 2 2 -1. - <_>13 14 1 1 2. - <_>12 15 1 1 2. - 0 - -6.5766851184889674e-004 - 0.5834553241729736 - 0.4869078099727631 - <_> - - <_> - - - - <_>0 5 2 2 -1. - <_>0 6 2 1 2. - 0 - 6.2220421386882663e-004 - 1 - 0.3824636936187744 - <_> - - - - <_>6 14 2 2 -1. - <_>6 14 1 1 2. - <_>7 15 1 1 2. - 0 - 1.4663359615951777e-003 - 0.4813488125801086 - 0.6966739296913147 - <_> - - <_> - - - - <_>7 12 6 5 -1. - <_>9 12 2 5 3. - 0 - -0.0495477095246315 - 0.0539276599884033 - 1 - <_> - - - - <_>12 17 5 2 -1. - <_>12 18 5 1 2. - 0 - 1.3017569435760379e-003 - 0.5337455868721008 - 0.4160748124122620 - <_> - - <_> - - - - <_>1 11 6 3 -1. - <_>4 11 3 3 2. - 0 - -4.4914530590176582e-003 - 0.5997437238693237 - 1 - <_> - - - - <_>1 9 6 3 -1. - <_>4 9 3 3 2. - 0 - 1.6592369647696614e-003 - 0.3727185130119324 - 0.5115634202957153 - <_> - - <_> - - - - <_>12 7 2 12 -1. - <_>12 13 2 6 2. - 0 - 6.4695458859205246e-003 - 0.5252035260200501 - 1 - <_> - - - - <_>8 7 5 3 -1. - <_>8 8 5 1 3. - 0 - 4.9810269847512245e-003 - 0.5256717801094055 - 0.3934406042098999 - <_> - - <_> - - - - <_>6 7 2 12 -1. - <_>6 13 2 6 2. - 0 - -0.0385369807481766 - 0.2061924934387207 - 1 - <_> - - - - <_>1 2 9 18 -1. - <_>4 2 3 18 3. - 0 - -0.2827565073966980 - 0.0618832111358643 - 0.4925057888031006 - <_> - - <_> - - - - <_>12 17 5 2 -1. - <_>12 18 5 1 2. - 0 - -9.0301828458905220e-003 - 0.3157590031623840 - 1 - <_> - - - - <_>4 7 12 2 -1. - <_>4 7 6 2 2. - 0 - -0.0438662692904472 - 0.2033682018518448 - 0.5164769887924194 - <_> - - <_> - - - - <_>6 7 6 1 -1. - <_>8 7 2 1 3. - 0 - -4.5701069757342339e-003 - 0.6611183285713196 - 1 - <_> - - - - <_>7 3 3 2 -1. - <_>8 3 1 2 3. - 0 - -2.3362410720437765e-003 - 0.2807789146900177 - 0.4962876141071320 - <_> - - <_> - - - - <_>9 4 3 1 -1. - <_>10 4 1 1 3. - 0 - 5.3960331715643406e-003 - 0.5146387815475464 - 1 - <_> - - - - <_>11 11 3 1 -1. - <_>12 11 1 1 3. - 0 - -2.6297608856111765e-003 - 0.6284487843513489 - 0.4955588877201080 - <_> - - <_> - - - - <_>8 4 3 1 -1. - <_>9 4 1 1 3. - 0 - -3.8577478844672441e-003 - 0.1486748009920120 - 1 - <_> - - - - <_>6 11 3 1 -1. - <_>7 11 1 1 3. - 0 - 1.3963800156489015e-003 - 0.4701338112354279 - 0.6320971846580505 - <_> - - <_> - - - - <_>12 13 6 6 -1. - <_>12 15 6 2 3. - 0 - -8.8699469342827797e-003 - 1 - 0.5286818146705627 - <_> - - - - <_>14 13 1 6 -1. - <_>14 15 1 2 3. - 0 - -7.0626288652420044e-004 - 0.4648370146751404 - 0.5333210229873657 - <_> - - <_> - - - - <_>2 13 6 6 -1. - <_>2 15 6 2 3. - 0 - 4.2645810171961784e-003 - 0.5084878206253052 - 1 - <_> - - - - <_>1 5 18 1 -1. - <_>7 5 6 1 3. - 0 - 0.0615721009671688 - 0.3629625141620636 - 0.8757156729698181 - <_> - - <_> - - - - <_>4 7 12 2 -1. - <_>10 7 6 1 2. - <_>4 8 6 1 2. - 0 - -4.5381980016827583e-003 - 1 - 0.4856696128845215 - <_> - - - - <_>6 1 8 10 -1. - <_>10 1 4 5 2. - <_>6 6 4 5 2. - 0 - -4.0877899155020714e-003 - 0.4584116041660309 - 0.5420240759849548 - <_> - - <_> - - - - <_>3 13 4 3 -1. - <_>3 14 4 1 3. - 0 - 6.4308601431548595e-003 - 1 - 0.2707302868366242 - <_> - - - - <_>6 13 4 3 -1. - <_>6 14 4 1 3. - 0 - 7.0455260574817657e-003 - 0.5057486891746521 - 0.7026523947715759 - <_> - - <_> - - - - <_>9 14 4 3 -1. - <_>9 15 4 1 3. - 0 - -2.3246440105140209e-003 - 1 - 0.4827278852462769 - <_> - - - - <_>12 9 2 3 -1. - <_>12 10 2 1 3. - 0 - 6.0276601288933307e-005 - 0.4247249066829681 - 0.5508763194084168 - <_> - - <_> - - - - <_>7 14 4 3 -1. - <_>7 15 4 1 3. - 0 - 0.0180845595896244 - 1 - 0.8104801177978516 - <_> - - - - <_>9 0 2 1 -1. - <_>10 0 1 1 2. - 0 - 8.4693520329892635e-004 - 0.5154619216918945 - 0.3514379858970642 - <_> - - <_> - - - - <_>5 0 10 5 -1. - <_>5 0 5 5 2. - 0 - -0.0269310399889946 - 1 - 0.4886888861656189 - <_> - - - - <_>6 6 8 7 -1. - <_>6 6 4 7 2. - 0 - -4.2346641421318054e-003 - 0.4622378051280975 - 0.5382478237152100 - <_> - - <_> - - - - <_>5 0 10 5 -1. - <_>10 0 5 5 2. - 0 - 0.0269471108913422 - 1 - 0.6366596221923828 - <_> - - - - <_>6 6 8 7 -1. - <_>10 6 4 7 2. - 0 - 4.6446882188320160e-003 - 0.5368506908416748 - 0.3765429854393005 - <_> - - <_> - - - - <_>5 9 10 8 -1. - <_>10 9 5 4 2. - <_>5 13 5 4 2. - 0 - -6.9577661342918873e-003 - 0.4234687089920044 - 1 - <_> - - - - <_>10 0 4 10 -1. - <_>12 0 2 5 2. - <_>10 5 2 5 2. - 0 - 8.7609712500125170e-004 - 0.4672406017780304 - 0.5350683927536011 - <_> - - <_> - - - - <_>1 4 8 3 -1. - <_>1 5 8 1 3. - 0 - 1.6103329835459590e-003 - 1 - 0.5732762813568115 - <_> - - - - <_>4 4 8 3 -1. - <_>4 5 8 1 3. - 0 - -1.2848590267822146e-003 - 0.5481799244880676 - 0.3784593045711517 - <_> - - <_> - - - - <_>9 7 4 3 -1. - <_>9 8 4 1 3. - 0 - 0.0102435396984220 - 0.5155907273292542 - 1 - <_> - - - - <_>12 8 3 12 -1. - <_>12 14 3 6 2. - 0 - 2.6889349101111293e-004 - 0.5353189706802368 - 0.4387153983116150 - <_> - - <_> - - - - <_>7 7 4 3 -1. - <_>7 8 4 1 3. - 0 - 3.7903659977018833e-003 - 0.5032002925872803 - 1 - <_> - - - - <_>5 8 3 12 -1. - <_>5 14 3 6 2. - 0 - -0.0293696802109480 - 0.5873538851737976 - 0.2215445041656494 - <_> - - <_> - - - - <_>10 0 7 6 -1. - <_>10 2 7 2 3. - 0 - 6.0743088833987713e-003 - 1 - 0.5417029857635498 - <_> - - - - <_>2 1 18 1 -1. - <_>8 1 6 1 3. - 0 - -0.0127107203006744 - 0.6056511998176575 - 0.4985181987285614 - <_> - - <_> - - - - <_>5 0 3 8 -1. - <_>6 0 1 8 3. - 0 - -5.9445449151098728e-003 - 0.3352069854736328 - 1 - <_> - - - - <_>4 7 4 2 -1. - <_>4 8 4 1 2. - 0 - -2.8927479870617390e-003 - 0.6929240822792053 - 0.4778220057487488 - 53.7555694580078130 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_frontalface_alt_tree.xml b/data/haarcascades/haarcascade_frontalface_alt_tree.xml deleted file mode 100644 index ff638d5..0000000 --- a/data/haarcascades/haarcascade_frontalface_alt_tree.xml +++ /dev/null @@ -1,103493 +0,0 @@ - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_>2 7 14 4 -1. - <_>2 9 14 2 2. - 0 - 3.7895569112151861e-003 - -0.9294580221176148 - 0.6411985158920288 - <_> - - <_> - - - - <_>1 2 18 4 -1. - <_>7 2 6 4 3. - 0 - 0.0120981102809310 - -0.7181009054183960 - 0.4714100956916809 - <_> - - <_> - - - - <_>5 5 9 5 -1. - <_>8 5 3 5 3. - 0 - 1.2138449819758534e-003 - -0.7283161282539368 - 0.3033069074153900 - -1.3442519903182983 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>3 6 14 9 -1. - <_>3 9 14 3 3. - 0 - 8.7510552257299423e-003 - -0.8594707250595093 - 0.3688138127326965 - <_> - - <_> - - - - <_>1 1 18 5 -1. - <_>7 1 6 5 3. - 0 - 0.0219867005944252 - -0.6018015146255493 - 0.3289783000946045 - <_> - - <_> - - - - <_>4 6 12 8 -1. - <_>4 10 12 4 2. - 0 - 6.4913398819044232e-004 - -0.7943195104598999 - 0.2549329996109009 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>12 5 3 5 2. - <_>9 10 3 5 2. - 0 - -1.0192029876634479e-003 - 0.2272932976484299 - -0.6362798213958740 - <_> - - <_> - - - - <_>4 0 11 9 -1. - <_>4 3 11 3 3. - 0 - 1.3674780493602157e-003 - -0.6001418232917786 - 0.2411836981773377 - <_> - - <_> - - - - <_>12 5 4 8 -1. - <_>12 9 4 4 2. - 0 - 1.0245250305160880e-003 - -0.5854247212409973 - 0.1255010962486267 - <_> - - <_> - - - - <_>4 5 10 10 -1. - <_>4 5 5 5 2. - <_>9 10 5 5 2. - 0 - 0.0184658598154783 - 0.1956356018781662 - -0.6763023138046265 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 4.0901508182287216e-003 - -0.4491649866104126 - 0.2667768895626068 - <_> - - <_> - - - - <_>3 8 5 12 -1. - <_>3 14 5 6 2. - 0 - 0.0113580999895930 - 0.1878322958946228 - -0.6137936115264893 - -1.6378560066223145 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>5 3 9 9 -1. - <_>5 6 9 3 3. - 0 - -0.0115889497101307 - 0.3456704020500183 - -0.7647898197174072 - <_> - - <_> - - - - <_>8 5 4 12 -1. - <_>8 11 4 6 2. - 0 - 5.1809530705213547e-003 - 0.2410492002964020 - -0.6962355971336365 - <_> - - <_> - - - - <_>3 6 5 6 -1. - <_>3 9 5 3 2. - 0 - 2.1468549966812134e-003 - -0.8055366277694702 - 0.1983861029148102 - <_> - - <_> - - - - <_>4 5 12 5 -1. - <_>8 5 4 5 3. - 0 - -3.6556499544531107e-003 - -0.7183313965797424 - 0.1230567991733551 - <_> - - <_> - - - - <_>1 2 8 8 -1. - <_>1 2 4 4 2. - <_>5 6 4 4 2. - 0 - -1.9701640121638775e-003 - 0.2277768999338150 - -0.4752016961574554 - <_> - - <_> - - - - <_>8 12 10 8 -1. - <_>13 12 5 4 2. - <_>8 16 5 4 2. - 0 - -3.3645539078861475e-003 - -0.4609504938125610 - 0.2039465010166168 - <_> - - <_> - - - - <_>4 9 3 10 -1. - <_>4 14 3 5 2. - 0 - -7.4126059189438820e-005 - 0.1821323931217194 - -0.4782927036285400 - <_> - - <_> - - - - <_>0 4 20 10 -1. - <_>0 9 20 5 2. - 0 - -0.0175711102783680 - -0.7173755168914795 - 0.1131113022565842 - <_> - - <_> - - - - <_>3 0 13 9 -1. - <_>3 3 13 3 3. - 0 - 6.3840472139418125e-003 - -0.4020568132400513 - 0.2073028981685638 - <_> - - <_> - - - - <_>10 1 4 11 -1. - <_>10 1 2 11 2. - 0 - -0.0147233996540308 - -0.6755877137184143 - 0.0689730867743492 - <_> - - <_> - - - - <_>6 1 4 11 -1. - <_>8 1 2 11 2. - 0 - -5.2889222279191017e-003 - -0.6210517287254334 - 0.1334936022758484 - <_> - - <_> - - - - <_>4 6 12 8 -1. - <_>10 6 6 4 2. - <_>4 10 6 4 2. - 0 - 0.0277436301112175 - 0.1176085025072098 - -0.5464112162590027 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0394275598227978 - -0.2113427966833115 - 0.3945299983024597 - <_> - - <_> - - - - <_>11 9 4 7 -1. - <_>11 9 2 7 2. - 0 - 8.6949411779642105e-003 - 0.1258095055818558 - -0.4798910021781921 - <_> - - <_> - - - - <_>5 9 4 7 -1. - <_>7 9 2 7 2. - 0 - 2.8245279099792242e-003 - 0.1965314000844955 - -0.4025667905807495 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0289151892066002 - -0.8061652779579163 - 0.0818822607398033 - -1.7317579984664917 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 9 20 2 3. - 0 - 8.0171944573521614e-003 - -0.6898155212402344 - 0.2413686066865921 - <_> - - <_> - - - - <_>6 3 8 6 -1. - <_>6 6 8 3 2. - 0 - -2.4478728882968426e-003 - 0.2135320007801056 - -0.6414669156074524 - <_> - - <_> - - - - <_>7 2 6 7 -1. - <_>9 2 2 7 3. - 0 - 1.7917619552463293e-003 - -0.6144546866416931 - 0.1923692971467972 - <_> - - <_> - - - - <_>11 7 5 9 -1. - <_>11 10 5 3 3. - 0 - 4.3905500206165016e-004 - -0.7536042928695679 - 0.1569689065217972 - <_> - - <_> - - - - <_>4 6 8 8 -1. - <_>4 6 4 4 2. - <_>8 10 4 4 2. - 0 - -3.6769549478776753e-004 - 0.1738051027059555 - -0.5840449929237366 - <_> - - <_> - - - - <_>9 5 6 8 -1. - <_>9 9 6 4 2. - 0 - -4.2802388779819012e-003 - -0.6696898937225342 - 0.1128972992300987 - <_> - - <_> - - - - <_>4 10 5 6 -1. - <_>4 13 5 3 2. - 0 - 3.5238768905401230e-003 - 0.1250194013118744 - -0.7329921722412109 - <_> - - <_> - - - - <_>12 0 6 5 -1. - <_>12 0 3 5 2. - 0 - 7.9299701610580087e-004 - -0.4496619999408722 - 0.2159093022346497 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 4.4371088733896613e-004 - -0.3890976905822754 - 0.2118114978075028 - <_> - - <_> - - - - <_>3 2 17 2 -1. - <_>3 3 17 1 2. - 0 - -2.7145470958203077e-003 - -0.4671686887741089 - 0.1503839939832687 - <_> - - <_> - - - - <_>5 6 4 8 -1. - <_>5 10 4 4 2. - 0 - -6.9272058317437768e-004 - -0.5859655141830444 - 0.1171438023447990 - <_> - - <_> - - - - <_>14 3 6 9 -1. - <_>14 3 3 9 2. - 0 - 0.0492618083953857 - -0.1380015015602112 - 0.4936623871326447 - <_> - - <_> - - - - <_>3 0 9 5 -1. - <_>6 0 3 5 3. - 0 - -0.0228375196456909 - -0.6374350786209106 - 0.1232409030199051 - <_> - - <_> - - - - <_>15 2 4 9 -1. - <_>15 2 2 9 2. - 0 - 4.8372112214565277e-003 - -0.1239162981510162 - 0.1062088981270790 - <_> - - <_> - - - - <_>1 2 4 9 -1. - <_>3 2 2 9 2. - 0 - 0.0102562597021461 - -0.1876704990863800 - 0.2982417047023773 - <_> - - <_> - - - - <_>8 8 6 12 -1. - <_>8 12 6 4 3. - 0 - 0.0106186801567674 - 0.1061246022582054 - -0.3324488103389740 - <_> - - <_> - - - - <_>2 13 16 4 -1. - <_>2 13 8 2 2. - <_>10 15 8 2 2. - 0 - 0.0241131391376257 - 0.0872006118297577 - -0.6684662103652954 - <_> - - <_> - - - - <_>6 5 8 6 -1. - <_>6 7 8 2 3. - 0 - -3.6754710599780083e-003 - 0.1104328036308289 - -0.4458195865154266 - <_> - - <_> - - - - <_>0 11 8 6 -1. - <_>0 13 8 2 3. - 0 - -0.0389962010085583 - -0.7022811174392700 - 0.0818094909191132 - <_> - - <_> - - - - <_>0 18 20 2 -1. - <_>0 19 20 1 2. - 0 - 1.5777100343257189e-003 - 0.1595419943332672 - -0.3286077082157135 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 9.1089410707354546e-003 - 0.1032636985182762 - -0.4440256059169769 - <_> - - <_> - - - - <_>3 1 17 3 -1. - <_>3 2 17 1 3. - 0 - -0.0170516092330217 - -0.5585334897041321 - 0.0627114996314049 - <_> - - <_> - - - - <_>3 6 5 6 -1. - <_>3 9 5 3 2. - 0 - 1.3652660418301821e-003 - -0.5393446087837219 - 0.0708398967981339 - <_> - - <_> - - - - <_>4 5 12 7 -1. - <_>8 5 4 7 3. - 0 - -0.0111861499026418 - -0.4726018011569977 - 0.0810194164514542 - <_> - - <_> - - - - <_>0 4 14 4 -1. - <_>0 4 7 2 2. - <_>7 6 7 2 2. - 0 - -0.0117052700370550 - 0.2475008964538574 - -0.1777898967266083 - <_> - - <_> - - - - <_>4 11 12 9 -1. - <_>4 14 12 3 3. - 0 - -0.0977369323372841 - -0.5617750883102417 - 0.0809218212962151 - <_> - - <_> - - - - <_>3 2 14 16 -1. - <_>3 2 7 8 2. - <_>10 10 7 8 2. - 0 - -0.0852280631661415 - -0.5223324894905090 - 0.0728213936090469 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0367334596812725 - 0.4362357854843140 - -0.0993395075201988 - <_> - - <_> - - - - <_>3 1 10 16 -1. - <_>3 1 5 8 2. - <_>8 9 5 8 2. - 0 - -3.6704430822283030e-003 - 0.1483422070741653 - -0.2711966931819916 - -1.9308480024337769 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 16 2 -1. - <_>1 1 16 1 2. - 0 - -1.1610370129346848e-003 - -0.5637788772583008 - 0.2356878072023392 - <_> - - <_> - - - - <_>2 10 16 4 -1. - <_>2 12 16 2 2. - 0 - 1.1830299627035856e-003 - 0.1572428047657013 - -0.6772817969322205 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>9 0 2 8 3. - 0 - -2.1273950114846230e-003 - -0.6615015268325806 - 0.1494313925504684 - <_> - - <_> - - - - <_>5 3 10 9 -1. - <_>5 6 10 3 3. - 0 - -0.1189346984028816 - 0.5322582125663757 - -0.2296836972236633 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0136248702183366 - -0.6063550114631653 - 0.1700108945369721 - <_> - - <_> - - - - <_>10 6 8 12 -1. - <_>10 10 8 4 3. - 0 - -6.3198682619258761e-004 - -0.6897224187850952 - 0.1158462986350060 - <_> - - <_> - - - - <_>2 8 15 3 -1. - <_>2 9 15 1 3. - 0 - -4.4108428992331028e-003 - -0.6296700239181519 - 0.1243060007691383 - <_> - - <_> - - - - <_>10 6 9 12 -1. - <_>10 10 9 4 3. - 0 - -0.0229822397232056 - -0.5049725174903870 - 0.0166361201554537 - <_> - - <_> - - - - <_>4 6 6 8 -1. - <_>4 10 6 4 2. - 0 - -2.3721898905932903e-003 - -0.6246224045753479 - 0.1379375010728836 - <_> - - <_> - - - - <_>9 8 4 12 -1. - <_>9 12 4 4 3. - 0 - 8.7364763021469116e-003 - 0.1399662047624588 - -0.5482295155525208 - <_> - - <_> - - - - <_>1 0 6 18 -1. - <_>4 0 3 18 2. - 0 - 0.0677370727062225 - -0.1917248070240021 - 0.5470048785209656 - <_> - - <_> - - - - <_>5 2 13 2 -1. - <_>5 3 13 1 2. - 0 - -4.0138149634003639e-003 - -0.5542911887168884 - 0.1451705992221832 - <_> - - <_> - - - - <_>5 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 1.2857170077040792e-004 - -0.5103123784065247 - 0.1102394014596939 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>10 0 4 6 2. - <_>6 6 4 6 2. - 0 - -0.0396889485418797 - -0.6183072924613953 - 0.0966760963201523 - <_> - - <_> - - - - <_>2 1 6 10 -1. - <_>2 1 3 5 2. - <_>5 6 3 5 2. - 0 - -1.6646150033921003e-003 - 0.1644988954067230 - -0.3718631863594055 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - 5.3499247878789902e-003 - 0.1114505007863045 - -0.3744102120399475 - <_> - - <_> - - - - <_>0 12 18 4 -1. - <_>0 12 9 2 2. - <_>9 14 9 2 2. - 0 - -0.0229040104895830 - -0.5809758901596069 - 0.1107726022601128 - <_> - - <_> - - - - <_>5 5 15 6 -1. - <_>5 7 15 2 3. - 0 - 0.0107034500688314 - 0.0447332598268986 - -0.5811663269996643 - <_> - - <_> - - - - <_>2 6 5 9 -1. - <_>2 9 5 3 3. - 0 - -4.2331559234298766e-004 - -0.5442379117012024 - 0.0870892927050591 - <_> - - <_> - - - - <_>9 8 10 6 -1. - <_>14 8 5 3 2. - <_>9 11 5 3 2. - 0 - 0.0155544299632311 - 0.0568843409419060 - -0.3764517009258270 - <_> - - <_> - - - - <_>5 6 10 10 -1. - <_>5 6 5 5 2. - <_>10 11 5 5 2. - 0 - -0.0205394495278597 - -0.3871456980705261 - 0.1183383986353874 - <_> - - <_> - - - - <_>7 4 12 4 -1. - <_>7 6 12 2 2. - 0 - -3.1234358903020620e-003 - 0.0836354270577431 - -0.1986238956451416 - <_> - - <_> - - - - <_>1 10 16 4 -1. - <_>1 10 8 2 2. - <_>9 12 8 2 2. - 0 - 0.0239328294992447 - 0.0796005427837372 - -0.6537010073661804 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - 0.0839204564690590 - -0.1065312996506691 - 0.4877282083034515 - <_> - - <_> - - - - <_>6 0 3 17 -1. - <_>7 0 1 17 3. - 0 - 0.0160031598061323 - 0.0836432129144669 - -0.5920773148536682 - <_> - - <_> - - - - <_>9 4 4 16 -1. - <_>11 4 2 8 2. - <_>9 12 2 8 2. - 0 - 5.8071441017091274e-003 - 0.0879975035786629 - -0.3327913880348206 - <_> - - <_> - - - - <_>0 0 4 20 -1. - <_>2 0 2 20 2. - 0 - -0.0811044275760651 - 0.6377518773078919 - -0.0676923617720604 - <_> - - <_> - - - - <_>13 2 6 13 -1. - <_>15 2 2 13 3. - 0 - 0.0454030297696590 - -0.0515103898942471 - 0.3022567033767700 - <_> - - <_> - - - - <_>6 1 6 18 -1. - <_>6 1 3 9 2. - <_>9 10 3 9 2. - 0 - 0.0138772297650576 - 0.0999676287174225 - -0.4652090966701508 - <_> - - <_> - - - - <_>15 0 4 13 -1. - <_>15 0 2 13 2. - 0 - 0.0345907099545002 - -0.0976144373416901 - 0.3467875123023987 - <_> - - <_> - - - - <_>5 6 3 14 -1. - <_>6 6 1 14 3. - 0 - 0.0157045498490334 - 0.0763441175222397 - -0.5335631966590881 - <_> - - <_> - - - - <_>14 2 6 13 -1. - <_>14 2 3 13 2. - 0 - -0.1042054966092110 - 0.6189097166061401 - -0.0442597605288029 - <_> - - <_> - - - - <_>1 2 18 3 -1. - <_>7 2 6 3 3. - 0 - 0.1344318985939026 - -0.0598530210554600 - 0.6363571286201477 - <_> - - <_> - - - - <_>5 5 11 8 -1. - <_>5 9 11 4 2. - 0 - -2.5646309368312359e-003 - -0.5360047221183777 - 0.0731160268187523 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0186470896005630 - 0.0698561519384384 - -0.5687832236289978 - <_> - - <_> - - - - <_>11 4 7 4 -1. - <_>11 6 7 2 2. - 0 - 0.0151595398783684 - 0.0182063393294811 - -0.2766315937042236 - -2.0711259841918945 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1477842926979065 - -0.8993312120437622 - 0.5703592896461487 - <_> - - <_> - - - - <_>1 0 18 20 -1. - <_>7 0 6 20 3. - 0 - 0.2998467087745667 - -0.6539415121078491 - 0.3505445122718811 - <_> - - <_> - - - - <_>5 3 10 9 -1. - <_>5 6 10 3 3. - 0 - -0.0790617167949677 - 0.4408529102802277 - -0.6508756875991821 - <_> - - <_> - - - - <_>14 3 6 11 -1. - <_>14 3 3 11 2. - 0 - 0.0584289617836475 - -0.4266535937786102 - 0.5841056704521179 - <_> - - <_> - - - - <_>3 9 4 10 -1. - <_>3 14 4 5 2. - 0 - -0.0146642802283168 - 0.3243524134159088 - -0.5965961813926697 - <_> - - <_> - - - - <_>8 1 12 19 -1. - <_>8 1 6 19 2. - 0 - 0.3951719999313355 - -0.0757983475923538 - 0.4865995049476624 - <_> - - <_> - - - - <_>0 1 12 19 -1. - <_>6 1 6 19 2. - 0 - 0.1104058995842934 - -0.8455610275268555 - 0.2137456983327866 - -2.1360809803009033 - 4 - 6 - <_> - - - <_> - - <_> - - - - <_>8 4 4 16 -1. - <_>8 12 4 8 2. - 0 - 3.7777079269289970e-003 - 0.1874440014362335 - -0.6535406112670898 - <_> - - <_> - - - - <_>9 8 4 12 -1. - <_>9 12 4 4 3. - 0 - 5.3003188222646713e-003 - 0.0939518436789513 - -0.5691788792610169 - <_> - - <_> - - - - <_>6 2 8 12 -1. - <_>6 6 8 4 3. - 0 - -5.5426009930670261e-003 - 0.1603170931339264 - -0.5182223916053772 - <_> - - <_> - - - - <_>7 7 6 13 -1. - <_>9 7 2 13 3. - 0 - -9.1971885412931442e-003 - -0.5742046236991882 - 0.1479140073060989 - <_> - - <_> - - - - <_>0 6 7 6 -1. - <_>0 9 7 3 2. - 0 - 5.3701602155342698e-004 - -0.7044969797134399 - 0.1075214967131615 - <_> - - <_> - - - - <_>1 8 19 3 -1. - <_>1 9 19 1 3. - 0 - -2.2125479299575090e-003 - -0.5087742805480957 - 0.1136718988418579 - <_> - - <_> - - - - <_>5 0 3 14 -1. - <_>6 0 1 14 3. - 0 - 0.0116757303476334 - 0.0842586830258369 - -0.6738470196723938 - <_> - - <_> - - - - <_>10 3 10 6 -1. - <_>15 3 5 3 2. - <_>10 6 5 3 2. - 0 - -2.0404369570314884e-003 - 0.1625111997127533 - -0.4143564999103546 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -7.6540438458323479e-003 - -0.4283317923545837 - 0.1306070983409882 - <_> - - <_> - - - - <_>6 7 14 4 -1. - <_>13 7 7 2 2. - <_>6 9 7 2 2. - 0 - 0.0293704792857170 - 0.0546510517597198 - -0.3479537963867188 - <_> - - <_> - - - - <_>0 7 14 4 -1. - <_>0 7 7 2 2. - <_>7 9 7 2 2. - 0 - -9.5828901976346970e-003 - -0.4862071871757507 - 0.1170689016580582 - <_> - - <_> - - - - <_>10 6 9 12 -1. - <_>10 10 9 4 3. - 0 - 6.0666278004646301e-003 - -0.3655388057231903 - 0.0878136008977890 - <_> - - <_> - - - - <_>4 10 8 4 -1. - <_>8 10 4 4 2. - 0 - 1.7992249922826886e-003 - 0.1603599041700363 - -0.3085910975933075 - <_> - - <_> - - - - <_>11 14 8 6 -1. - <_>11 16 8 2 3. - 0 - -0.0100923096761107 - -0.3950586915016174 - 0.1151477992534638 - <_> - - <_> - - - - <_>2 7 13 2 -1. - <_>2 8 13 1 2. - 0 - 2.5171819142997265e-003 - -0.3004311025142670 - 0.1825605034828186 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>10 14 7 2 2. - <_>3 16 7 2 2. - 0 - -0.0170892402529716 - -0.5217359066009522 - 0.0974572673439980 - <_> - - <_> - - - - <_>0 11 6 9 -1. - <_>3 11 3 9 2. - 0 - -0.0558562688529491 - 0.5354002118110657 - -0.0892215520143509 - <_> - - <_> - - - - <_>5 9 13 2 -1. - <_>5 10 13 1 2. - 0 - -2.3930610623210669e-003 - -0.4701243937015533 - 0.0861414074897766 - <_> - - <_> - - - - <_>3 0 7 9 -1. - <_>3 3 7 3 3. - 0 - 3.6918919067829847e-003 - -0.2775559127330780 - 0.1518609970808029 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 2.1945969201624393e-003 - -0.1686706990003586 - 0.1195252016186714 - <_> - - <_> - - - - <_>5 4 9 5 -1. - <_>8 4 3 5 3. - 0 - 2.9675459954887629e-003 - -0.3894068002700806 - 0.1038891002535820 - <_> - - <_> - - - - <_>11 10 7 4 -1. - <_>11 12 7 2 2. - 0 - 1.9976729527115822e-003 - 0.0911413431167603 - -0.4105004966259003 - <_> - - <_> - - - - <_>2 5 8 15 -1. - <_>2 10 8 5 3. - 0 - -0.0203696992248297 - -0.5996876955032349 - 0.0693018063902855 - <_> - - <_> - - - - <_>10 11 5 6 -1. - <_>10 14 5 3 2. - 0 - 2.3318571038544178e-003 - 0.0618925504386425 - -0.3288680016994476 - <_> - - <_> - - - - <_>5 11 5 6 -1. - <_>5 14 5 3 2. - 0 - -0.0428635887801647 - -0.7384496927261353 - 0.0570716597139835 - <_> - - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 1.1471749749034643e-003 - -0.5137962102890015 - 0.0711964964866638 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0137356696650386 - -0.5378550887107849 - 0.0655420422554016 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0471655912697315 - 0.0453893616795540 - -0.6894479990005493 - <_> - - <_> - - - - <_>0 1 14 12 -1. - <_>0 1 7 6 2. - <_>7 7 7 6 2. - 0 - -0.0112048797309399 - 0.1693263947963715 - -0.2306171953678131 - <_> - - <_> - - - - <_>10 10 10 9 -1. - <_>10 13 10 3 3. - 0 - -0.1547842025756836 - -0.7770537137985230 - 0.0121424701064825 - <_> - - <_> - - - - <_>0 10 10 9 -1. - <_>0 13 10 3 3. - 0 - 5.8086342178285122e-003 - 0.1131810024380684 - -0.3320631980895996 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0285295695066452 - -0.5674728155136108 - 0.0487345606088638 - <_> - - <_> - - - - <_>8 5 4 10 -1. - <_>10 5 2 10 2. - 0 - -0.0387589484453201 - 0.5942310094833374 - -0.0751393362879753 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0310378093272448 - 0.0519735403358936 - -0.5855265259742737 - <_> - - <_> - - - - <_>7 1 4 14 -1. - <_>9 1 2 14 2. - 0 - 7.4786080404010136e-006 - -0.2762320041656494 - 0.1408849060535431 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - 0.0310002602636814 - 0.0313317291438580 - -0.5686017274856567 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -0.0498606599867344 - -0.8292462229728699 - 0.0388015806674957 - <_> - - <_> - - - - <_>3 8 15 3 -1. - <_>8 8 5 3 3. - 0 - -0.0423232801258564 - -0.4306210875511169 - 0.0165794808417559 - <_> - - <_> - - - - <_>6 15 8 4 -1. - <_>6 17 8 2 2. - 0 - 9.1987219639122486e-004 - -0.2115444988012314 - 0.1551752984523773 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.2055986970663071 - -0.0624031797051430 - 0.3222961127758026 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.2911841869354248 - 0.0392284691333771 - -0.9412822127342224 - <_> - - <_> - - - - <_>15 0 4 11 -1. - <_>15 0 2 11 2. - 0 - 7.8337509185075760e-003 - -0.1480659991502762 - 0.1784920990467072 - <_> - - <_> - - - - <_>7 0 4 18 -1. - <_>7 0 2 9 2. - <_>9 9 2 9 2. - 0 - 0.0113933198153973 - 0.0779877230525017 - -0.4242425858974457 - <_> - - <_> - - - - <_>12 2 8 18 -1. - <_>16 2 4 9 2. - <_>12 11 4 9 2. - 0 - -0.0918070226907730 - 0.3368948101997376 - -0.0561741292476654 - <_> - - <_> - - - - <_>4 2 12 18 -1. - <_>4 2 6 9 2. - <_>10 11 6 9 2. - 0 - -0.0160382501780987 - -0.2495401054620743 - 0.1457086950540543 - <_> - - <_> - - - - <_>4 6 12 6 -1. - <_>4 9 12 3 2. - 0 - 0.0548302903771400 - -0.1549600064754486 - 0.2032960057258606 - <_> - - <_> - - - - <_>0 9 18 4 -1. - <_>0 9 9 2 2. - <_>9 11 9 2 2. - 0 - 0.0244497004896402 - 0.0609743781387806 - -0.6307234168052673 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>11 0 9 2 2. - <_>2 2 9 2 2. - 0 - 0.0292606707662344 - 0.0468336082994938 - -0.3798538148403168 - <_> - - <_> - - - - <_>1 0 4 11 -1. - <_>3 0 2 11 2. - 0 - 3.9965552277863026e-003 - -0.1692730039358139 - 0.1910032033920288 - <_> - - <_> - - - - <_>16 0 4 15 -1. - <_>16 0 2 15 2. - 0 - -0.0699388533830643 - 0.5465558767318726 - -0.0549657493829727 - -1.8755869865417480 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>3 2 3 11 2. - 0 - 0.0458356216549873 - -0.4998284876346588 - 0.4096108078956604 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0263631008565426 - -0.3919320106506348 - 0.5156775712966919 - <_> - - <_> - - - - <_>2 17 15 3 -1. - <_>7 17 5 3 3. - 0 - 0.0151898302137852 - -0.5221636295318604 - 0.3136821985244751 - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -0.0208052806556225 - 0.3761447966098785 - -0.4737553894519806 - <_> - - <_> - - - - <_>3 9 14 8 -1. - <_>3 13 14 4 2. - 0 - -7.4902721680700779e-003 - 0.1628348976373673 - -0.7038447260856628 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.2771936953067780 - -0.1640412062406540 - 0.3348158001899719 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.0641884431242943 - -0.8017662167549133 - 0.1276382952928543 - <_> - - <_> - - - - <_>3 7 14 6 -1. - <_>3 9 14 2 3. - 0 - 0.0406681708991528 - -0.3338693082332611 - 0.2845618128776550 - <_> - - <_> - - - - <_>3 10 6 8 -1. - <_>5 10 2 8 3. - 0 - 7.4888020753860474e-003 - -0.3718892037868500 - 0.2593226134777069 - <_> - - <_> - - - - <_>0 5 20 8 -1. - <_>10 5 10 4 2. - <_>0 9 10 4 2. - 0 - 0.0649426728487015 - 0.1037290990352631 - -0.7167106866836548 - <_> - - <_> - - - - <_>0 5 16 8 -1. - <_>0 9 16 4 2. - 0 - -2.1149769891053438e-003 - -0.7568392753601074 - 0.0790195912122726 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - -4.8293141298927367e-004 - -0.4985207915306091 - 0.0811113268136978 - <_> - - <_> - - - - <_>2 6 15 5 -1. - <_>7 6 5 5 3. - 0 - 0.1399645954370499 - 0.0874975994229317 - -0.7638937234878540 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 0.0522119887173176 - 0.0316404812037945 - -0.5328137278556824 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 3.0680459458380938e-003 - -0.6245852708816528 - 0.1386954039335251 - <_> - - <_> - - - - <_>6 8 8 12 -1. - <_>10 8 4 6 2. - <_>6 14 4 6 2. - 0 - 0.0504788607358933 - 0.0790634974837303 - -0.7401704192161560 - <_> - - <_> - - - - <_>1 1 7 4 -1. - <_>1 3 7 2 2. - 0 - -8.5122063755989075e-003 - -0.4997166097164154 - 0.1113225966691971 - <_> - - <_> - - - - <_>0 0 20 8 -1. - <_>10 0 10 4 2. - <_>0 4 10 4 2. - 0 - 0.0700918063521385 - 0.0970819070935249 - -0.6187918782234192 - <_> - - <_> - - - - <_>5 3 5 9 -1. - <_>5 6 5 3 3. - 0 - -2.7261190116405487e-003 - 0.0975466296076775 - -0.5776004195213318 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 3 4 4 2. - 0 - 0.0106765599921346 - -0.2905812859535217 - 0.1842612028121948 - <_> - - <_> - - - - <_>1 10 7 4 -1. - <_>1 12 7 2 2. - 0 - 6.3848652644082904e-004 - 0.1386975049972534 - -0.4254654049873352 - <_> - - <_> - - - - <_>5 10 12 6 -1. - <_>11 10 6 3 2. - <_>5 13 6 3 2. - 0 - -0.0479572601616383 - -0.7324913740158081 - 0.0411881096661091 - <_> - - <_> - - - - <_>1 3 8 4 -1. - <_>5 3 4 4 2. - 0 - 0.0171400494873524 - -0.3197345137596130 - 0.1684008985757828 - <_> - - <_> - - - - <_>6 0 9 5 -1. - <_>9 0 3 5 3. - 0 - 0.0785445421934128 - 0.0500532314181328 - -0.7141004800796509 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0113428495824337 - -0.3881097137928009 - 0.1297640949487686 - -1.9646480083465576 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - -8.6751781054772437e-005 - 0.2517991065979004 - -0.6772311925888062 - <_> - - <_> - - - - <_>8 1 12 19 -1. - <_>8 1 6 19 2. - 0 - 0.2055017948150635 - 0.0202171504497528 - -0.3361819982528687 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1389326006174088 - 0.1067826971411705 - -0.8671011924743652 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - 2.6432450395077467e-003 - -0.4105708897113800 - 0.2560392022132874 - <_> - - <_> - - - - <_>0 3 10 6 -1. - <_>0 3 5 3 2. - <_>5 6 5 3 2. - 0 - -1.6145260306075215e-003 - 0.1744816005229950 - -0.5029013156890869 - <_> - - <_> - - - - <_>6 5 8 8 -1. - <_>6 9 8 4 2. - 0 - -4.6492749825119972e-003 - -0.8396093249320984 - 0.1040996983647347 - <_> - - <_> - - - - <_>7 13 5 6 -1. - <_>7 16 5 3 2. - 0 - -5.5983918718993664e-003 - -0.5267335772514343 - 0.1211448982357979 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 14 4 4 2. - 0 - 2.1482799202203751e-003 - 0.0868319272994995 - -0.5238474011421204 - <_> - - <_> - - - - <_>4 6 8 8 -1. - <_>4 6 4 4 2. - <_>8 10 4 4 2. - 0 - -2.2942349314689636e-003 - 0.1566673070192337 - -0.3938758075237274 - <_> - - <_> - - - - <_>2 5 16 6 -1. - <_>2 7 16 2 3. - 0 - -1.0809659725055099e-003 - 0.0947775468230248 - -0.5796759724617004 - <_> - - <_> - - - - <_>5 7 10 12 -1. - <_>5 7 5 6 2. - <_>10 13 5 6 2. - 0 - -0.0187398791313171 - -0.4378077089786530 - 0.1275431960821152 - <_> - - <_> - - - - <_>6 11 13 3 -1. - <_>6 12 13 1 3. - 0 - -2.0956669468432665e-003 - 0.2127586007118225 - -0.1764553934335709 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0613701194524765 - -0.6700798869132996 - 0.0852911770343781 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 14 7 3 2. - 0 - -0.0450749695301056 - -0.4761415123939514 - 0.0383843891322613 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 4.5961341820657253e-003 - 0.0907766968011856 - -0.5364217758178711 - <_> - - <_> - - - - <_>3 10 16 6 -1. - <_>11 10 8 3 2. - <_>3 13 8 3 2. - 0 - -0.0562051795423031 - -0.4412812888622284 - 0.0263406392186880 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>3 8 3 12 2. - 0 - -0.0170700307935476 - 0.3196252882480621 - -0.1569907963275909 - <_> - - <_> - - - - <_>0 5 20 15 -1. - <_>0 10 20 5 3. - 0 - 0.0137785403057933 - -0.4146823883056641 - 0.1083204001188278 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 5.6932470761239529e-003 - 0.1097327023744583 - -0.4142096936702728 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 1.1573060182854533e-003 - -0.4699645936489105 - 0.1408822983503342 - <_> - - <_> - - - - <_>3 6 5 9 -1. - <_>3 9 5 3 3. - 0 - -4.3259391532046720e-005 - -0.5911747813224793 - 0.0722088366746902 - <_> - - <_> - - - - <_>10 10 6 5 -1. - <_>10 10 3 5 2. - 0 - -1.4467669825535268e-004 - 0.1434050053358078 - -0.2080902010202408 - <_> - - <_> - - - - <_>4 10 6 5 -1. - <_>7 10 3 5 2. - 0 - -0.0306675396859646 - -0.6418172717094421 - 0.0763162225484848 - <_> - - <_> - - - - <_>13 4 6 9 -1. - <_>15 4 2 9 3. - 0 - 6.4002368599176407e-003 - -0.1542620062828064 - 0.2061882019042969 - <_> - - <_> - - - - <_>1 4 6 7 -1. - <_>3 4 2 7 3. - 0 - 2.7318780776113272e-003 - -0.1842913031578064 - 0.2204626947641373 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 8 2. - 0 - -0.0417598597705364 - 0.5128465890884399 - -0.0430972203612328 - <_> - - <_> - - - - <_>2 5 12 12 -1. - <_>2 11 12 6 2. - 0 - -0.0301744192838669 - -0.3613480925559998 - 0.1163339018821716 - <_> - - <_> - - - - <_>3 1 14 6 -1. - <_>3 3 14 2 3. - 0 - 6.8081771023571491e-003 - -0.2595328092575073 - 0.1492739021778107 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 0.0434303693473339 - 0.0686012431979179 - -0.5822119116783142 - <_> - - <_> - - - - <_>10 2 10 18 -1. - <_>10 2 5 18 2. - 0 - 0.0211213007569313 - -0.0853729173541069 - 0.0804985836148262 - <_> - - <_> - - - - <_>0 3 10 17 -1. - <_>5 3 5 17 2. - 0 - 0.0998402833938599 - 0.0532925203442574 - -0.7181965708732605 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 8 2. - 0 - 5.6953770108520985e-003 - -0.0889761075377464 - 0.1348394006490707 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - -0.0599845685064793 - 0.6832429170608521 - -0.0519162714481354 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>10 12 10 2 3. - 0 - 5.9353262186050415e-003 - 0.1030519008636475 - -0.2536143958568573 - <_> - - <_> - - - - <_>5 11 5 9 -1. - <_>5 14 5 3 3. - 0 - -7.4867930379696190e-005 - 0.1334072947502136 - -0.2932355999946594 - <_> - - <_> - - - - <_>5 18 13 2 -1. - <_>5 19 13 1 2. - 0 - -2.5437519070692360e-004 - 0.1533578038215637 - -0.1938757002353668 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 7.7576987678185105e-004 - -0.3115557134151459 - 0.1063250973820686 - <_> - - <_> - - - - <_>5 6 14 2 -1. - <_>5 6 7 2 2. - 0 - 0.0544785000383854 - 0.0262774806469679 - -0.6668741106987000 - <_> - - <_> - - - - <_>1 6 14 2 -1. - <_>8 6 7 2 2. - 0 - 0.0126928500831127 - 0.0936130434274673 - -0.3915219008922577 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>10 10 4 4 2. - <_>6 14 4 4 2. - 0 - -0.0307669602334499 - -0.5923808813095093 - 0.0483149997889996 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - -0.0193661507219076 - 0.4366160929203033 - -0.0886729434132576 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -2.8705620206892490e-003 - 0.1524478048086166 - -0.1386117041110992 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0400036983191967 - 0.0587480515241623 - -0.6911970973014832 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -0.0811304673552513 - -0.7868431806564331 - 2.0421498920768499e-003 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -2.1017501130700111e-003 - 0.1910044997930527 - -0.1965968012809753 - <_> - - <_> - - - - <_>9 6 4 14 -1. - <_>9 13 4 7 2. - 0 - 8.6481617763638496e-003 - 0.0886892899870873 - -0.3741415143013001 - <_> - - <_> - - - - <_>3 7 12 5 -1. - <_>7 7 4 5 3. - 0 - -0.0524290204048157 - -0.7261599898338318 - 0.0394656881690025 - <_> - - <_> - - - - <_>3 13 14 3 -1. - <_>3 14 14 1 3. - 0 - 3.4464800264686346e-003 - -0.1164089962840080 - 0.2738626897335053 - <_> - - <_> - - - - <_>1 0 16 4 -1. - <_>1 2 16 2 2. - 0 - -7.0581152103841305e-003 - -0.3628394007682800 - 0.0920236781239510 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - -0.0574122592806816 - -0.8883938193321228 - 0.0266477596014738 - <_> - - <_> - - - - <_>0 1 6 8 -1. - <_>3 1 3 8 2. - 0 - 3.3479030244052410e-003 - -0.1488405019044876 - 0.1836643069982529 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>14 0 3 9 2. - 0 - -0.0539584197103977 - 0.3809813857078552 - -0.0440465807914734 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>3 0 3 9 2. - 0 - -0.0257196892052889 - 0.3257082104682922 - -0.1007822006940842 - -2.1222629547119141 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1244122013449669 - -0.3857372999191284 - 0.3927366137504578 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0378028787672520 - -0.4702867865562439 - 0.3578683137893677 - <_> - - <_> - - - - <_>1 9 9 8 -1. - <_>4 9 3 8 3. - 0 - 0.0304414294660091 - -0.3946039974689484 - 0.3251850008964539 - <_> - - <_> - - - - <_>2 0 16 2 -1. - <_>2 1 16 1 2. - 0 - 3.9223438943736255e-004 - -0.4516651034355164 - 0.1967238038778305 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0390777103602886 - -0.2107332944869995 - 0.4386476874351502 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - -8.9118082541972399e-005 - 0.1519695967435837 - -0.5956351757049561 - <_> - - <_> - - - - <_>1 16 10 3 -1. - <_>6 16 5 3 2. - 0 - 8.8415127247571945e-003 - -0.4929248988628388 - 0.1740657985210419 - <_> - - <_> - - - - <_>9 5 3 12 -1. - <_>9 11 3 6 2. - 0 - 0.0136660598218441 - 0.0928617492318153 - -0.5518230795860291 - <_> - - <_> - - - - <_>3 4 14 12 -1. - <_>3 4 7 6 2. - <_>10 10 7 6 2. - 0 - -0.0612033009529114 - -0.6798529028892517 - 0.1004908010363579 - <_> - - <_> - - - - <_>6 6 9 8 -1. - <_>6 10 9 4 2. - 0 - 5.7719892356544733e-004 - -0.5830199718475342 - 0.1108962967991829 - <_> - - <_> - - - - <_>0 7 7 4 -1. - <_>0 9 7 2 2. - 0 - 2.8370460495352745e-004 - -0.5979334115982056 - 0.0938983783125877 - <_> - - <_> - - - - <_>16 3 4 8 -1. - <_>16 3 2 8 2. - 0 - 0.0176659803837538 - -0.2201547026634216 - 0.3453308939933777 - <_> - - <_> - - - - <_>0 3 6 10 -1. - <_>3 3 3 10 2. - 0 - 0.0256973300129175 - -0.3619570136070252 - 0.1687735021114349 - <_> - - <_> - - - - <_>5 4 10 6 -1. - <_>5 6 10 2 3. - 0 - -0.0403166897594929 - 0.2296440005302429 - -0.2930144071578980 - <_> - - <_> - - - - <_>4 5 12 4 -1. - <_>8 5 4 4 3. - 0 - 4.6522719785571098e-003 - -0.5899596810340881 - 0.1046691015362740 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0134060001000762 - -0.3957209885120392 - 0.0835281163454056 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0361272804439068 - 0.0941658020019531 - -0.5409718155860901 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - 2.2792080417275429e-003 - 0.1281906962394714 - -0.3651453852653503 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 1.4454070478677750e-003 - -0.2328159958124161 - 0.1982991993427277 - <_> - - <_> - - - - <_>3 14 15 6 -1. - <_>3 17 15 3 2. - 0 - 0.0574825294315815 - 0.0750423967838287 - -0.5770497918128967 - <_> - - <_> - - - - <_>0 11 7 4 -1. - <_>0 13 7 2 2. - 0 - 3.3360819797962904e-003 - 0.0880120173096657 - -0.4677925109863281 - <_> - - <_> - - - - <_>5 9 12 6 -1. - <_>11 9 6 3 2. - <_>5 12 6 3 2. - 0 - 0.0372257493436337 - 0.0321551114320755 - -0.6634662151336670 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 0.0166127607226372 - 0.0916898399591446 - -0.5212817192077637 - <_> - - <_> - - - - <_>1 0 19 9 -1. - <_>1 3 19 3 3. - 0 - 0.0205432493239641 - -0.2875337898731232 - 0.1426130980253220 - <_> - - <_> - - - - <_>1 11 16 3 -1. - <_>1 12 16 1 3. - 0 - -1.5633470320608467e-004 - 0.2024673074483872 - -0.2242446988821030 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.1218881011009216 - -0.1646130979061127 - 0.1758392006158829 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.0464134402573109 - -0.6897801756858826 - 0.0643499270081520 - <_> - - <_> - - - - <_>3 6 15 5 -1. - <_>8 6 5 5 3. - 0 - 0.1494643986225128 - 0.0398058407008648 - -0.7017732858657837 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 0.0143468696624041 - 0.0926287770271301 - -0.4631417095661163 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0361587181687355 - 0.0644129365682602 - -0.6527721285820007 - <_> - - <_> - - - - <_>2 11 7 6 -1. - <_>2 14 7 3 2. - 0 - -0.0550982281565666 - -0.6102198958396912 - 0.0660342872142792 - <_> - - <_> - - - - <_>12 11 5 6 -1. - <_>12 14 5 3 2. - 0 - -3.2978600356727839e-003 - 0.0865798667073250 - -0.2184482067823410 - <_> - - <_> - - - - <_>4 5 3 15 -1. - <_>4 10 3 5 3. - 0 - 4.1257790289819241e-003 - -0.4498029947280884 - 0.0932512506842613 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - 0.0334652699530125 - 0.0145244998857379 - -0.4020000100135803 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0225846301764250 - -0.6006761789321899 - 0.0644167214632034 - <_> - - <_> - - - - <_>7 10 10 9 -1. - <_>7 13 10 3 3. - 0 - -7.1505038067698479e-003 - 0.0671394690871239 - -0.1294730007648468 - <_> - - <_> - - - - <_>2 6 16 10 -1. - <_>2 6 8 5 2. - <_>10 11 8 5 2. - 0 - -0.0514400415122509 - -0.4846647977828980 - 0.0820937529206276 - <_> - - <_> - - - - <_>0 9 20 4 -1. - <_>10 9 10 2 2. - <_>0 11 10 2 2. - 0 - -0.0191009491682053 - -0.3539437949657440 - 0.1085169017314911 - <_> - - <_> - - - - <_>4 6 4 7 -1. - <_>6 6 2 7 2. - 0 - 6.9468282163143158e-003 - 0.1540756970643997 - -0.2304019033908844 - <_> - - <_> - - - - <_>18 0 2 20 -1. - <_>18 0 1 20 2. - 0 - -0.0238866005092859 - 0.4900797903537750 - -0.0596504285931587 - <_> - - <_> - - - - <_>3 1 13 2 -1. - <_>3 2 13 1 2. - 0 - -1.3964619720354676e-003 - -0.3370470106601715 - 0.1156945973634720 - <_> - - <_> - - - - <_>17 0 3 18 -1. - <_>18 0 1 18 3. - 0 - 0.0263206008821726 - -0.0391326807439327 - 0.3761535882949829 - <_> - - <_> - - - - <_>1 7 15 5 -1. - <_>6 7 5 5 3. - 0 - 5.0336541607975960e-003 - -0.3545702099800110 - 0.1078672036528587 - <_> - - <_> - - - - <_>9 3 2 15 -1. - <_>9 3 1 15 2. - 0 - -0.0115239601582289 - 0.3514864146709442 - -0.1137370988726616 - -2.1038460731506348 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>5 3 10 6 -1. - <_>5 6 10 3 2. - 0 - -5.6698019616305828e-003 - 0.2529909014701843 - -0.5537719726562500 - <_> - - <_> - - - - <_>10 9 4 8 -1. - <_>10 13 4 4 2. - 0 - 1.2186550302430987e-003 - 0.0917235389351845 - -0.6566165089607239 - <_> - - <_> - - - - <_>7 8 4 12 -1. - <_>7 12 4 4 3. - 0 - 3.1903409399092197e-003 - 0.1211680993437767 - -0.5440536141395569 - <_> - - <_> - - - - <_>5 5 15 10 -1. - <_>5 10 15 5 2. - 0 - -0.0121176801621914 - -0.6821125149726868 - 0.1117822006344795 - <_> - - <_> - - - - <_>4 7 7 4 -1. - <_>4 9 7 2 2. - 0 - 2.2634069900959730e-003 - -0.5631396174430847 - 0.0996292605996132 - <_> - - <_> - - - - <_>4 5 12 4 -1. - <_>8 5 4 4 3. - 0 - 2.2871519904583693e-003 - -0.5022724270820618 - 0.1128802970051765 - <_> - - <_> - - - - <_>1 1 7 4 -1. - <_>1 3 7 2 2. - 0 - -7.4018500745296478e-003 - -0.5062230825424194 - 0.1032527014613152 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 13 4 4 2. - 0 - 6.5725757740437984e-003 - 0.0316036716103554 - -0.4587934911251068 - <_> - - <_> - - - - <_>4 6 12 12 -1. - <_>4 6 6 6 2. - <_>10 12 6 6 2. - 0 - -0.0172370690852404 - -0.3655610084533691 - 0.1412204951047897 - <_> - - <_> - - - - <_>11 1 6 10 -1. - <_>14 1 3 5 2. - <_>11 6 3 5 2. - 0 - -1.7646619817242026e-003 - 0.1896221041679382 - -0.3434976041316986 - <_> - - <_> - - - - <_>1 5 16 12 -1. - <_>1 5 8 6 2. - <_>9 11 8 6 2. - 0 - 0.0260859504342079 - 0.0873692333698273 - -0.5333216190338135 - <_> - - <_> - - - - <_>4 7 12 6 -1. - <_>4 9 12 2 3. - 0 - 8.5357967764139175e-003 - -0.3736073076725006 - 0.1450852006673813 - <_> - - <_> - - - - <_>6 0 6 10 -1. - <_>6 0 3 5 2. - <_>9 5 3 5 2. - 0 - -6.2934341840445995e-003 - -0.4577507972717285 - 0.1001626998186112 - <_> - - <_> - - - - <_>7 1 12 8 -1. - <_>13 1 6 4 2. - <_>7 5 6 4 2. - 0 - 0.0970815494656563 - 3.3761640079319477e-003 - -0.8467985987663269 - <_> - - <_> - - - - <_>0 1 4 18 -1. - <_>2 1 2 18 2. - 0 - -0.0994557216763496 - 0.7789235711097717 - -0.0544560886919498 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - 0.0391285493969917 - 0.0394799299538136 - -0.4662021100521088 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 12 10 3 2. - <_>10 15 10 3 2. - 0 - 0.0684237629175186 - 0.0481634102761745 - -0.8191074132919312 - <_> - - <_> - - - - <_>10 4 4 15 -1. - <_>10 9 4 5 3. - 0 - -0.0173045508563519 - -0.4600183069705963 - 0.0217813402414322 - <_> - - <_> - - - - <_>1 1 12 8 -1. - <_>1 1 6 4 2. - <_>7 5 6 4 2. - 0 - 4.5203989429865032e-005 - 0.1559097021818161 - -0.2573460042476654 - <_> - - <_> - - - - <_>11 11 5 6 -1. - <_>11 14 5 3 2. - 0 - -0.0537207499146461 - -0.7398458719253540 - 0.0236581396311522 - <_> - - <_> - - - - <_>4 11 5 6 -1. - <_>4 14 5 3 2. - 0 - -2.1576840663328767e-004 - 0.1180372014641762 - -0.3538045883178711 - <_> - - <_> - - - - <_>4 14 13 6 -1. - <_>4 16 13 2 3. - 0 - 1.2613219441846013e-003 - -0.1831308007240295 - 0.1630696058273315 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>2 0 2 9 3. - 0 - 0.0227140299975872 - -0.0956473425030708 - 0.3806278109550476 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0209583304822445 - 0.0611855983734131 - -0.5264493823051453 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0154584497213364 - 0.0644667893648148 - -0.4744128882884979 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 7 10 2 3. - 0 - -5.0828810781240463e-003 - 0.1001883000135422 - -0.3639725148677826 - <_> - - <_> - - - - <_>2 0 16 2 -1. - <_>2 1 16 1 2. - 0 - 1.1842510430142283e-003 - -0.2060351967811585 - 0.1712958961725235 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.0501877702772617 - -0.0709249675273895 - 0.1043531969189644 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1753520071506500 - 0.0377662107348442 - -0.8080273866653442 - <_> - - <_> - - - - <_>1 2 18 10 -1. - <_>10 2 9 5 2. - <_>1 7 9 5 2. - 0 - -0.0684255585074425 - -0.5021489858627319 - 0.0546711198985577 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 2.2496099118143320e-003 - -0.2801350951194763 - 0.1095009967684746 - <_> - - <_> - - - - <_>5 4 10 14 -1. - <_>10 4 5 7 2. - <_>5 11 5 7 2. - 0 - 0.0853556320071220 - 0.0333769805729389 - -0.7367684245109558 - <_> - - <_> - - - - <_>0 11 5 6 -1. - <_>0 14 5 3 2. - 0 - -0.0288259796798229 - -0.4852809906005859 - 0.0495960786938667 - <_> - - <_> - - - - <_>7 11 13 3 -1. - <_>7 12 13 1 3. - 0 - -1.3562700478360057e-003 - 0.1849309056997299 - -0.1654148995876312 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - 1.5731659950688481e-003 - 0.0904318168759346 - -0.3019388020038605 - <_> - - <_> - - - - <_>5 6 14 8 -1. - <_>5 10 14 4 2. - 0 - -5.2912188693881035e-003 - -0.4396361112594605 - 0.0468806996941566 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0422001406550407 - -0.0753480121493340 - 0.3771280944347382 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0310307703912258 - 0.0660533681511879 - -0.4737842082977295 - <_> - - <_> - - - - <_>1 13 18 3 -1. - <_>1 14 18 1 3. - 0 - 8.0451928079128265e-003 - -0.0773269832134247 - 0.3489888906478882 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>10 15 7 2 2. - <_>3 17 7 2 2. - 0 - 0.0237911809235811 - 0.0486299283802509 - -0.5815547704696655 - <_> - - <_> - - - - <_>0 2 2 13 -1. - <_>1 2 1 13 2. - 0 - -0.0268846806138754 - 0.7385225892066956 - -0.0400251187384129 - <_> - - <_> - - - - <_>4 9 12 8 -1. - <_>8 9 4 8 3. - 0 - -1.7013859469443560e-003 - 0.1411640942096710 - -0.1830507963895798 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - -0.0322589799761772 - -0.6459869742393494 - 0.0417741797864437 - <_> - - <_> - - - - <_>16 0 4 20 -1. - <_>16 0 2 20 2. - 0 - -0.0917195528745651 - 0.6365169286727905 - -0.0444062799215317 - <_> - - <_> - - - - <_>0 0 4 20 -1. - <_>2 0 2 20 2. - 0 - 0.0112532200291753 - -0.1039896979928017 - 0.2438649982213974 - <_> - - <_> - - - - <_>16 1 4 19 -1. - <_>16 1 2 19 2. - 0 - 9.1702006757259369e-003 - -0.1014230027794838 - 0.1732572019100189 - <_> - - <_> - - - - <_>1 0 16 4 -1. - <_>1 0 8 2 2. - <_>9 2 8 2 2. - 0 - -0.0375844314694405 - -0.6599904894828796 - 0.0353572592139244 - <_> - - <_> - - - - <_>12 6 4 14 -1. - <_>14 6 2 7 2. - <_>12 13 2 7 2. - 0 - 1.4904039562679827e-004 - -0.1250495016574860 - 0.1016137972474098 - <_> - - <_> - - - - <_>2 8 15 3 -1. - <_>2 9 15 1 3. - 0 - 5.6240631965920329e-004 - -0.2151121944189072 - 0.1053744032979012 - <_> - - <_> - - - - <_>7 6 8 10 -1. - <_>11 6 4 5 2. - <_>7 11 4 5 2. - 0 - -0.0173142701387405 - -0.1679829061031342 - 0.0612074993550777 - <_> - - <_> - - - - <_>0 0 4 20 -1. - <_>2 0 2 20 2. - 0 - -0.0154298702254891 - 0.2567448019981384 - -0.0971934869885445 - <_> - - <_> - - - - <_>5 5 10 3 -1. - <_>5 5 5 3 2. - 0 - -0.0156120797619224 - -0.3579750061035156 - 0.0692600682377815 - <_> - - <_> - - - - <_>1 17 14 3 -1. - <_>1 18 14 1 3. - 0 - 7.4424187187105417e-004 - -0.1574046015739441 - 0.1492107063531876 - <_> - - <_> - - - - <_>15 6 5 9 -1. - <_>15 9 5 3 3. - 0 - 0.0790083408355713 - 0.0359247289597988 - -0.6490759253501892 - <_> - - <_> - - - - <_>7 6 4 10 -1. - <_>9 6 2 10 2. - 0 - -3.3477540127933025e-003 - -0.2579470872879028 - 0.0816268622875214 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - 0.0355894193053246 - -0.0468700490891933 - 0.5394526720046997 - <_> - - <_> - - - - <_>5 4 8 14 -1. - <_>5 4 4 7 2. - <_>9 11 4 7 2. - 0 - 7.6168961822986603e-004 - 0.0804098695516586 - -0.2804597020149231 - <_> - - <_> - - - - <_>4 6 12 8 -1. - <_>10 6 6 4 2. - <_>4 10 6 4 2. - 0 - 9.6126887947320938e-003 - 0.0927157774567604 - -0.2275521010160446 - <_> - - <_> - - - - <_>3 2 13 6 -1. - <_>3 4 13 2 3. - 0 - 0.0345827899873257 - -0.0954955071210861 - 0.2811649143695831 - <_> - - <_> - - - - <_>10 4 7 10 -1. - <_>10 9 7 5 2. - 0 - -8.2031842321157455e-003 - -0.3316228985786438 - 0.0406297110021114 - <_> - - <_> - - - - <_>3 4 14 10 -1. - <_>3 4 7 5 2. - <_>10 9 7 5 2. - 0 - 0.0255401097238064 - 0.0704589337110519 - -0.3279935121536255 - <_> - - <_> - - - - <_>16 4 3 13 -1. - <_>17 4 1 13 3. - 0 - -3.1389920040965080e-003 - 0.1252934932708740 - -0.0607668012380600 - <_> - - <_> - - - - <_>1 4 3 13 -1. - <_>2 4 1 13 3. - 0 - 4.5892409980297089e-003 - -0.0953354462981224 - 0.2473867982625961 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - -0.0232600308954716 - -0.2382315993309021 - 0.0335029698908329 - <_> - - <_> - - - - <_>0 10 9 4 -1. - <_>0 12 9 2 2. - 0 - 1.7964519793167710e-003 - 0.0898438617587090 - -0.2804915904998779 - <_> - - <_> - - - - <_>7 8 12 8 -1. - <_>13 8 6 4 2. - <_>7 12 6 4 2. - 0 - -0.1095291003584862 - -0.4620654881000519 - 7.4333418160676956e-003 - <_> - - <_> - - - - <_>1 8 12 8 -1. - <_>1 8 6 4 2. - <_>7 12 6 4 2. - 0 - 6.8442770279943943e-003 - 0.0735201090574265 - -0.3619070053100586 - <_> - - <_> - - - - <_>1 0 18 10 -1. - <_>7 0 6 10 3. - 0 - -0.0737198516726494 - 0.4113180041313171 - -0.0682930573821068 - <_> - - <_> - - - - <_>0 2 12 12 -1. - <_>4 2 4 12 3. - 0 - 9.4485012814402580e-003 - -0.1213229969143868 - 0.2149195969104767 - <_> - - <_> - - - - <_>8 11 12 9 -1. - <_>12 11 4 9 3. - 0 - -0.0746860578656197 - 0.2429201006889343 - -0.0385207198560238 - <_> - - <_> - - - - <_>5 10 4 9 -1. - <_>7 10 2 9 2. - 0 - -0.0189582295715809 - -0.3726381957530975 - 0.0683819502592087 - <_> - - <_> - - - - <_>10 2 3 10 -1. - <_>10 7 3 5 2. - 0 - -8.3170487778261304e-004 - 0.0957854464650154 - -0.1016902029514313 - -1.9109580516815186 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1523323059082031 - -0.3180535137653351 - 0.4703998863697052 - <_> - - <_> - - - - <_>9 12 8 8 -1. - <_>13 12 4 4 2. - <_>9 16 4 4 2. - 0 - 8.8482722640037537e-003 - -0.3613426983356476 - 0.2733295857906342 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0297884102910757 - -0.2805927991867065 - 0.3627023994922638 - <_> - - <_> - - - - <_>10 2 9 15 -1. - <_>13 2 3 15 3. - 0 - 0.0527256391942501 - -0.1932056993246079 - 0.3550725877285004 - <_> - - <_> - - - - <_>1 1 9 15 -1. - <_>4 1 3 15 3. - 0 - 0.0260774195194244 - -0.3712019920349121 - 0.2703844010829926 - <_> - - <_> - - - - <_>5 4 10 6 -1. - <_>5 6 10 2 3. - 0 - -0.0448785200715065 - 0.2911930084228516 - -0.3517824113368988 - <_> - - <_> - - - - <_>5 6 5 8 -1. - <_>5 10 5 4 2. - 0 - -9.3984341947361827e-004 - -0.6014366149902344 - 0.1181579008698463 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 3.1817350536584854e-003 - -0.6163272261619568 - 0.1058147028088570 - <_> - - <_> - - - - <_>3 9 5 8 -1. - <_>3 13 5 4 2. - 0 - -6.2214181525632739e-004 - 0.1170104965567589 - -0.6187378168106079 - <_> - - <_> - - - - <_>11 1 6 12 -1. - <_>14 1 3 6 2. - <_>11 7 3 6 2. - 0 - 5.4993429221212864e-003 - 0.0717406421899796 - -0.3212271034717560 - <_> - - <_> - - - - <_>3 12 8 8 -1. - <_>3 12 4 4 2. - <_>7 16 4 4 2. - 0 - 7.0621701888740063e-003 - -0.3081459999084473 - 0.1829912960529327 - <_> - - <_> - - - - <_>15 0 3 15 -1. - <_>15 5 3 5 3. - 0 - -0.0344922989606857 - -0.3695257008075714 - 0.1114277988672257 - <_> - - <_> - - - - <_>2 5 14 8 -1. - <_>2 5 7 4 2. - <_>9 9 7 4 2. - 0 - -0.0537834316492081 - -0.6668996214866638 - 0.0848636403679848 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -0.0201949104666710 - -0.4230006933212280 - 0.0563254691660404 - <_> - - <_> - - - - <_>3 1 6 10 -1. - <_>3 1 3 5 2. - <_>6 6 3 5 2. - 0 - -7.6839578105136752e-004 - 0.1354745030403137 - -0.3569628894329071 - <_> - - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 6.6877179779112339e-003 - -0.3437983095645905 - 0.1330209970474243 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1114740967750549 - -0.4952355027198792 - 0.0973030030727386 - <_> - - <_> - - - - <_>1 2 19 2 -1. - <_>1 3 19 1 2. - 0 - -8.5021732375025749e-003 - -0.5177899003028870 - 0.0671889036893845 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -0.0188970193266869 - -0.4706476926803589 - 0.0908737778663635 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 5.7387170381844044e-003 - -0.1486068964004517 - 0.3097684085369110 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0326040498912334 - 0.0786777064204216 - -0.5471382737159729 - <_> - - <_> - - - - <_>7 0 13 2 -1. - <_>7 1 13 1 2. - 0 - 1.8975350030814297e-005 - -0.2435985058546066 - 0.0989089310169220 - <_> - - <_> - - - - <_>6 6 8 12 -1. - <_>6 10 8 4 3. - 0 - -1.9267159514129162e-003 - -0.5052297711372376 - 0.0751193314790726 - <_> - - <_> - - - - <_>7 1 8 8 -1. - <_>11 1 4 4 2. - <_>7 5 4 4 2. - 0 - -7.7145430259406567e-003 - -0.2501496076583862 - 0.1021149978041649 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -0.0188066493719816 - -0.4326916933059692 - 0.1114768013358116 - <_> - - <_> - - - - <_>10 10 8 6 -1. - <_>10 12 8 2 3. - 0 - 0.0299121998250484 - 0.0467484481632710 - -0.5881829261779785 - <_> - - <_> - - - - <_>8 2 3 12 -1. - <_>8 8 3 6 2. - 0 - -7.4260600376874208e-004 - 0.1838930994272232 - -0.2013826072216034 - <_> - - <_> - - - - <_>12 5 7 8 -1. - <_>12 9 7 4 2. - 0 - 4.0662181563675404e-003 - -0.4494845867156982 - 0.0868813768029213 - <_> - - <_> - - - - <_>1 2 6 14 -1. - <_>3 2 2 14 3. - 0 - 0.0186816696077585 - -0.1710352003574371 - 0.2293123006820679 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0465806908905506 - 0.0438743792474270 - -0.6670460104942322 - <_> - - <_> - - - - <_>1 5 7 8 -1. - <_>1 9 7 4 2. - 0 - -0.0150307398289442 - -0.7656944990158081 - 0.0425244905054569 - <_> - - <_> - - - - <_>8 4 4 16 -1. - <_>8 12 4 8 2. - 0 - 0.0636028200387955 - 0.0336294881999493 - -0.8677732944488525 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -0.0336131006479263 - -0.6746404767036438 - 0.0451969206333160 - <_> - - <_> - - - - <_>11 10 7 6 -1. - <_>11 12 7 2 3. - 0 - -0.0443145297467709 - -0.4705643057823181 - 0.0209879502654076 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - 0.0291758198291063 - 0.0560364909470081 - -0.6574596166610718 - <_> - - <_> - - - - <_>5 12 13 3 -1. - <_>5 13 13 1 3. - 0 - 8.4737781435251236e-003 - -0.1231212988495827 - 0.3603718876838684 - <_> - - <_> - - - - <_>1 15 7 4 -1. - <_>1 17 7 2 2. - 0 - -0.0269307401031256 - -0.6525511741638184 - 0.0607266202569008 - <_> - - <_> - - - - <_>2 2 17 6 -1. - <_>2 4 17 2 3. - 0 - 0.0379301384091377 - -0.1549136042594910 - 0.2177045047283173 - <_> - - <_> - - - - <_>1 15 8 4 -1. - <_>5 15 4 4 2. - 0 - 0.0164300501346588 - -0.2525069117546082 - 0.1545823067426682 - <_> - - <_> - - - - <_>10 1 4 8 -1. - <_>10 1 2 8 2. - 0 - 0.0510798096656799 - 0.0307734999805689 - -0.6492931246757507 - <_> - - <_> - - - - <_>6 1 4 8 -1. - <_>8 1 2 8 2. - 0 - 1.6663300339132547e-003 - -0.3742555975914002 - 0.0813921764492989 - <_> - - <_> - - - - <_>10 3 3 14 -1. - <_>11 3 1 14 3. - 0 - -9.0896980836987495e-003 - 0.1785404980182648 - -0.0765780806541443 - <_> - - <_> - - - - <_>0 11 18 4 -1. - <_>0 11 9 2 2. - <_>9 13 9 2 2. - 0 - 0.0206291992217302 - 0.0723732635378838 - -0.4205057919025421 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - 8.2410024479031563e-003 - 0.0328966788947582 - -0.3732526898384094 - <_> - - <_> - - - - <_>2 7 12 12 -1. - <_>2 7 6 6 2. - <_>8 13 6 6 2. - 0 - -0.0461264997720718 - -0.3735642135143280 - 0.0773367807269096 - <_> - - <_> - - - - <_>4 11 13 2 -1. - <_>4 12 13 1 2. - 0 - -8.3484929054975510e-003 - 0.1869013011455536 - -0.1512683928012848 - <_> - - <_> - - - - <_>0 4 15 12 -1. - <_>0 10 15 6 2. - 0 - -0.0476890802383423 - -0.4073002040386200 - 0.0875983685255051 - <_> - - <_> - - - - <_>5 2 11 8 -1. - <_>5 6 11 4 2. - 0 - -5.0166220171377063e-004 - 0.1203676983714104 - -0.2471766024827957 - <_> - - <_> - - - - <_>2 8 13 3 -1. - <_>2 9 13 1 3. - 0 - 2.1794239728478715e-005 - -0.2980081140995026 - 0.1206500008702278 - <_> - - <_> - - - - <_>15 3 5 9 -1. - <_>15 6 5 3 3. - 0 - -0.0705972909927368 - -0.6811661124229431 - 0.0641989484429359 - <_> - - <_> - - - - <_>7 3 3 13 -1. - <_>8 3 1 13 3. - 0 - -6.4999358728528023e-003 - 0.2621915936470032 - -0.1401500999927521 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>7 9 6 3 3. - 0 - 5.3664338774979115e-003 - -0.3427318036556244 - 0.0920485705137253 - <_> - - <_> - - - - <_>8 1 3 13 -1. - <_>9 1 1 13 3. - 0 - -0.0133419502526522 - 0.4025807976722717 - -0.0720523074269295 - <_> - - <_> - - - - <_>9 3 2 13 -1. - <_>9 3 1 13 2. - 0 - 0.0122430901974440 - -0.0824268311262131 - 0.3836919963359833 - -2.0048389434814453 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 8 8 -1. - <_>1 2 4 4 2. - <_>5 6 4 4 2. - 0 - -2.8617910575121641e-003 - 0.2144317030906677 - -0.5153213739395142 - <_> - - <_> - - - - <_>9 5 3 12 -1. - <_>9 11 3 6 2. - 0 - 1.9125089747831225e-003 - 0.1448303014039993 - -0.6117541193962097 - <_> - - <_> - - - - <_>5 4 9 5 -1. - <_>8 4 3 5 3. - 0 - 4.8059499822556973e-003 - -0.4423562884330750 - 0.1346658021211624 - <_> - - <_> - - - - <_>0 3 20 16 -1. - <_>0 11 20 8 2. - 0 - -0.0957776233553886 - -0.4891478121280670 - 0.1316964030265808 - <_> - - <_> - - - - <_>0 4 16 6 -1. - <_>0 6 16 2 3. - 0 - -8.9395968243479729e-003 - 0.1479054987430573 - -0.4669628143310547 - <_> - - <_> - - - - <_>9 6 5 12 -1. - <_>9 12 5 6 2. - 0 - 8.1128235906362534e-003 - 0.0506713315844536 - -0.4022750854492188 - <_> - - <_> - - - - <_>5 6 10 8 -1. - <_>5 10 10 4 2. - 0 - 2.2638900554738939e-004 - -0.5092825293540955 - 0.0821132063865662 - <_> - - <_> - - - - <_>2 8 16 3 -1. - <_>2 9 16 1 3. - 0 - -6.1516009736806154e-004 - -0.3813680112361908 - 0.1015795022249222 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>2 10 16 1 3. - 0 - -3.2050691079348326e-003 - -0.5835245847702026 - 0.0623853988945484 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - 5.4250762332230806e-004 - -0.2554849982261658 - 0.1483220010995865 - <_> - - <_> - - - - <_>6 1 7 6 -1. - <_>6 3 7 2 3. - 0 - 1.0713520459830761e-003 - -0.3533431887626648 - 0.1179158985614777 - <_> - - <_> - - - - <_>3 10 14 3 -1. - <_>3 11 14 1 3. - 0 - -1.7755989683791995e-003 - -0.3408727943897247 - 0.0947401076555252 - <_> - - <_> - - - - <_>1 4 6 16 -1. - <_>1 4 3 8 2. - <_>4 12 3 8 2. - 0 - -0.0930142030119896 - 0.7468546032905579 - -0.0524433404207230 - <_> - - <_> - - - - <_>1 14 19 6 -1. - <_>1 16 19 2 3. - 0 - -0.0141921304166317 - -0.3143399953842163 - 0.0904521867632866 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>7 9 2 8 2. - 0 - -5.3375191055238247e-004 - 0.1411971002817154 - -0.2029671072959900 - <_> - - <_> - - - - <_>5 7 12 4 -1. - <_>9 7 4 4 3. - 0 - 0.0948446094989777 - 0.0146256797015667 - -0.6221520900726318 - <_> - - <_> - - - - <_>3 6 12 4 -1. - <_>7 6 4 4 3. - 0 - 1.1853160103783011e-003 - -0.2598401010036469 - 0.1215312033891678 - <_> - - <_> - - - - <_>6 5 8 6 -1. - <_>6 7 8 2 3. - 0 - -2.4541220627725124e-003 - 0.0718945935368538 - -0.3980351984500885 - <_> - - <_> - - - - <_>4 0 6 10 -1. - <_>6 0 2 10 3. - 0 - 6.8703000433743000e-003 - 0.0686260983347893 - -0.3856580853462219 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 13 4 4 2. - 0 - -0.0604112707078457 - -0.4848239123821259 - 0.0207060202956200 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>5 13 4 4 2. - 0 - -4.6826168545521796e-004 - 0.0958562418818474 - -0.3123035132884979 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -3.3507338957861066e-004 - 0.0781286582350731 - -0.0947510004043579 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0363130606710911 - 0.0448244214057922 - -0.6369314789772034 - <_> - - <_> - - - - <_>4 0 13 2 -1. - <_>4 1 13 1 2. - 0 - 3.8052719901315868e-004 - -0.2193126976490021 - 0.1178051978349686 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - -0.0509646311402321 - 0.5578337907791138 - -0.0438696891069412 - <_> - - <_> - - - - <_>14 3 6 7 -1. - <_>16 3 2 7 3. - 0 - -0.0761987566947937 - 0.6778960824012756 - -0.0179358907043934 - <_> - - <_> - - - - <_>5 4 5 10 -1. - <_>5 9 5 5 2. - 0 - -0.0126770203933120 - -0.6073101162910461 - 0.0490861907601357 - <_> - - <_> - - - - <_>8 1 5 10 -1. - <_>8 6 5 5 2. - 0 - -3.6766629200428724e-003 - 0.1522663980722427 - -0.1995368003845215 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0388467386364937 - -0.7704523801803589 - 0.0337324701249599 - <_> - - <_> - - - - <_>14 3 6 9 -1. - <_>16 3 2 9 3. - 0 - 9.4217229634523392e-003 - -0.0699294880032539 - 0.1366914063692093 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>2 3 2 9 3. - 0 - 7.3391180485486984e-003 - -0.1213333979249001 - 0.2117549926042557 - <_> - - <_> - - - - <_>1 1 19 3 -1. - <_>1 2 19 1 3. - 0 - 0.0122113795951009 - 0.0676368474960327 - -0.4335371851921082 - <_> - - <_> - - - - <_>6 6 4 14 -1. - <_>8 6 2 14 2. - 0 - -9.3064550310373306e-003 - -0.3468249142169952 - 0.0640623122453690 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - 0.0521113090217113 - -0.0341469906270504 - 0.3890474140644074 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - -4.3582019861787558e-004 - 0.1395650953054428 - -0.1828942000865936 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 6 10 2 2. - 0 - -0.0105753596872091 - -0.2778246104717255 - 0.0856670662760735 - <_> - - <_> - - - - <_>6 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 1.4794029993936419e-003 - -0.2315472066402435 - 0.1176588982343674 - <_> - - <_> - - - - <_>13 2 6 11 -1. - <_>13 2 3 11 2. - 0 - 9.4746891409158707e-003 - -0.1334528028964996 - 0.1806696951389313 - <_> - - <_> - - - - <_>0 6 5 9 -1. - <_>0 9 5 3 3. - 0 - 0.0833551883697510 - 0.0335639603435993 - -0.7286074161529541 - <_> - - <_> - - - - <_>13 2 6 8 -1. - <_>13 2 3 8 2. - 0 - -0.0666290074586868 - 0.3805825114250183 - -0.0334907509386539 - <_> - - <_> - - - - <_>1 2 6 8 -1. - <_>4 2 3 8 2. - 0 - 5.0287488847970963e-003 - -0.1141801029443741 - 0.2153498977422714 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.5122200250625610 - 7.6377480290830135e-003 - -0.6506755948066711 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1230005994439125 - 0.0388790816068649 - -0.5942044258117676 - <_> - - <_> - - - - <_>7 11 13 3 -1. - <_>7 12 13 1 3. - 0 - -1.1227129725739360e-003 - 0.1023541018366814 - -0.1120750978589058 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>0 2 10 3 2. - <_>10 5 10 3 2. - 0 - -0.0622209496796131 - -0.5117347240447998 - 0.0418797992169857 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0263233892619610 - 0.3400599062442780 - -0.0506244711577892 - <_> - - <_> - - - - <_>5 0 3 13 -1. - <_>6 0 1 13 3. - 0 - -0.0188750196248293 - -0.5455083847045898 - 0.0415249206125736 - <_> - - <_> - - - - <_>0 1 20 10 -1. - <_>0 6 20 5 2. - 0 - -0.3403478860855103 - -0.9154180288314819 - 0.0165613200515509 - <_> - - <_> - - - - <_>7 1 3 13 -1. - <_>8 1 1 13 3. - 0 - -8.0456008436158299e-004 - 0.1427077054977417 - -0.1290145069360733 - <_> - - <_> - - - - <_>11 0 2 16 -1. - <_>11 0 1 16 2. - 0 - -3.9579509757459164e-003 - -0.3340837061405182 - 0.0586375482380390 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - 0.0183365494012833 - -0.0456322208046913 - 0.5269632935523987 - <_> - - <_> - - - - <_>0 13 20 6 -1. - <_>10 13 10 3 2. - <_>0 16 10 3 2. - 0 - -0.0576861016452312 - -0.5760436058044434 - 0.0395500995218754 - <_> - - <_> - - - - <_>0 7 4 13 -1. - <_>2 7 2 13 2. - 0 - -8.6881890892982483e-003 - 0.2092967927455902 - -0.1030900031328201 - <_> - - <_> - - - - <_>5 10 15 10 -1. - <_>5 15 15 5 2. - 0 - 0.2031854987144470 - 9.4080818817019463e-003 - -0.9938954710960388 - <_> - - <_> - - - - <_>0 10 15 10 -1. - <_>0 15 15 5 2. - 0 - 0.0200977995991707 - 0.0565773993730545 - -0.3781901895999908 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 0.0132171399891377 - -0.0743221268057823 - 0.1787465065717697 - <_> - - <_> - - - - <_>7 0 2 16 -1. - <_>8 0 1 16 2. - 0 - -9.1346688568592072e-003 - -0.4935688078403473 - 0.0377993695437908 - <_> - - <_> - - - - <_>6 14 9 4 -1. - <_>6 16 9 2 2. - 0 - 8.7239191634580493e-004 - -0.1384868025779724 - 0.1151691973209381 - <_> - - <_> - - - - <_>1 3 15 2 -1. - <_>1 4 15 1 2. - 0 - -3.4609009162522852e-004 - -0.1637182980775833 - 0.1194979026913643 - <_> - - <_> - - - - <_>6 5 13 8 -1. - <_>6 9 13 4 2. - 0 - -9.8570866975933313e-004 - -0.5464289784431458 - 0.0446892790496349 - <_> - - <_> - - - - <_>4 0 11 6 -1. - <_>4 2 11 2 3. - 0 - 0.0102185597643256 - -0.1157016977667809 - 0.1672383993864059 - <_> - - <_> - - - - <_>1 9 18 4 -1. - <_>10 9 9 2 2. - <_>1 11 9 2 2. - 0 - 0.0267026796936989 - 0.0439220406115055 - -0.4512043893337250 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>6 9 3 8 2. - 0 - -2.0299260504543781e-003 - 0.1193227991461754 - -0.1697949022054672 - <_> - - <_> - - - - <_>5 8 12 4 -1. - <_>9 8 4 4 3. - 0 - -0.0880236029624939 - -0.8027979135513306 - 9.4295190647244453e-003 - <_> - - <_> - - - - <_>3 8 12 4 -1. - <_>7 8 4 4 3. - 0 - -0.0131091102957726 - -0.3086530864238739 - 0.0608020499348640 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -9.9501870572566986e-003 - 0.1840061992406845 - -0.0464654788374901 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -3.4293539356440306e-003 - 0.2668299973011017 - -0.0993386432528496 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0547291412949562 - 0.0287311300635338 - -0.7774584889411926 - <_> - - <_> - - - - <_>5 7 8 8 -1. - <_>5 7 4 4 2. - <_>9 11 4 4 2. - 0 - 7.2012972086668015e-003 - 0.0448924787342548 - -0.3828934133052826 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0420471206307411 - -0.0225623399019241 - 0.4064665138721466 - <_> - - <_> - - - - <_>4 6 12 3 -1. - <_>10 6 6 3 2. - 0 - 4.4444389641284943e-003 - 0.0912041068077087 - -0.1874821037054062 - <_> - - <_> - - - - <_>0 0 20 4 -1. - <_>10 0 10 2 2. - <_>0 2 10 2 2. - 0 - 0.0284418407827616 - 0.0406680405139923 - -0.4055212140083313 - <_> - - <_> - - - - <_>3 6 13 3 -1. - <_>3 7 13 1 3. - 0 - -0.0151418298482895 - 0.2479986995458603 - -0.0836073383688927 - <_> - - <_> - - - - <_>11 2 4 7 -1. - <_>11 2 2 7 2. - 0 - 0.0393880903720856 - 0.0242792796343565 - -0.7682729959487915 - <_> - - <_> - - - - <_>5 2 4 7 -1. - <_>7 2 2 7 2. - 0 - 6.1649468261748552e-004 - -0.1724991053342819 - 0.1031161025166512 - <_> - - <_> - - - - <_>1 16 18 2 -1. - <_>1 17 18 1 2. - 0 - 0.0260016508400440 - 0.0228253491222858 - -0.7754545211791992 - <_> - - <_> - - - - <_>0 13 14 3 -1. - <_>0 14 14 1 3. - 0 - 1.4940380351617932e-003 - -0.1102840974926949 - 0.1696674972772598 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -0.0137771498411894 - -0.3842472136020660 - 0.0303202699869871 - <_> - - <_> - - - - <_>3 14 13 3 -1. - <_>3 15 13 1 3. - 0 - 9.9619822576642036e-003 - -0.0537646599113941 - 0.3788712918758392 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - 3.2952039036899805e-003 - 0.0943841636180878 - -0.3276272118091583 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 5.7747410610318184e-003 - 0.0571149401366711 - -0.3071976900100708 - <_> - - <_> - - - - <_>2 10 18 10 -1. - <_>8 10 6 10 3. - 0 - -0.0483925901353359 - 0.1702105998992920 - -0.0870455130934715 - <_> - - <_> - - - - <_>0 12 13 2 -1. - <_>0 13 13 1 2. - 0 - 5.6376052089035511e-004 - -0.0938163027167320 - 0.2064231038093567 - <_> - - <_> - - - - <_>5 7 14 4 -1. - <_>12 7 7 2 2. - <_>5 9 7 2 2. - 0 - -0.0238738097250462 - -0.3008235096931458 - 0.0174777191132307 - <_> - - <_> - - - - <_>1 7 14 4 -1. - <_>1 7 7 2 2. - <_>8 9 7 2 2. - 0 - -0.0105269001796842 - -0.3441892862319946 - 0.0579956397414207 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 0.0222886707633734 - -0.0571798495948315 - 0.1973951011896133 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -0.0145890703424811 - -0.4516879916191101 - 0.0414904095232487 - <_> - - <_> - - - - <_>9 7 9 9 -1. - <_>12 7 3 9 3. - 0 - -0.0469363704323769 - 0.2045795023441315 - -0.0517691895365715 - <_> - - <_> - - - - <_>0 8 15 2 -1. - <_>0 9 15 1 2. - 0 - 5.3777720313519239e-004 - -0.3948144912719727 - 0.0450766906142235 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 7 5 3 2. - 0 - -2.2181039676070213e-003 - -0.2457561939954758 - 0.1026121973991394 - <_> - - <_> - - - - <_>4 0 9 18 -1. - <_>4 9 9 9 2. - 0 - 0.3507654964923859 - 0.0197911299765110 - -0.9516146779060364 - <_> - - <_> - - - - <_>14 15 6 5 -1. - <_>14 15 3 5 2. - 0 - -0.0267120599746704 - 0.2239314019680023 - -0.0455801002681255 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 7 5 3 2. - 0 - -3.9627091027796268e-003 - -0.2420701980590820 - 0.0765885934233665 - <_> - - <_> - - - - <_>9 1 5 10 -1. - <_>9 6 5 5 2. - 0 - -4.7878702171146870e-003 - 0.1265527009963989 - -0.1196471005678177 - <_> - - <_> - - - - <_>0 11 6 8 -1. - <_>3 11 3 8 2. - 0 - 7.1042939089238644e-003 - -0.0921304225921631 - 0.2151913940906525 - <_> - - <_> - - - - <_>9 7 6 10 -1. - <_>12 7 3 5 2. - <_>9 12 3 5 2. - 0 - -2.2581929442822002e-005 - 0.0606346093118191 - -0.1584898978471756 - <_> - - <_> - - - - <_>1 5 9 10 -1. - <_>4 5 3 10 3. - 0 - -0.0780606418848038 - 0.3482210934162140 - -0.0531737096607685 - <_> - - <_> - - - - <_>6 2 9 16 -1. - <_>9 2 3 16 3. - 0 - 0.2755585014820099 - 7.4112107977271080e-003 - -1.0000040531158447 - <_> - - <_> - - - - <_>5 2 9 16 -1. - <_>8 2 3 16 3. - 0 - 0.1965232938528061 - 0.0201311092823744 - -0.8532667160034180 - <_> - - <_> - - - - <_>5 10 10 10 -1. - <_>5 15 10 5 2. - 0 - -1.6801860183477402e-003 - 0.0770821794867516 - -0.2262036949396133 - -1.8743180036544800 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 6 10 -1. - <_>5 4 3 5 2. - <_>8 9 3 5 2. - 0 - -0.0188147109001875 - 0.3774428963661194 - -0.4077064096927643 - <_> - - <_> - - - - <_>11 2 8 8 -1. - <_>15 2 4 4 2. - <_>11 6 4 4 2. - 0 - -0.0231910496950150 - 0.3404903113842011 - -0.3614461123943329 - <_> - - <_> - - - - <_>0 2 6 10 -1. - <_>3 2 3 10 2. - 0 - 0.0313330888748169 - -0.4361351132392883 - 0.1966868937015533 - <_> - - <_> - - - - <_>4 10 13 8 -1. - <_>4 14 13 4 2. - 0 - -0.0113187003880739 - 0.1168517023324966 - -0.5635979175567627 - <_> - - <_> - - - - <_>5 6 8 4 -1. - <_>9 6 4 4 2. - 0 - -3.1084290822036564e-004 - -0.4339633882045746 - 0.1426406949758530 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - 0.0873500630259514 - -0.1995280981063843 - 0.3304361104965210 - <_> - - <_> - - - - <_>1 2 8 8 -1. - <_>1 2 4 4 2. - <_>5 6 4 4 2. - 0 - -0.0290185194462538 - 0.3231520950794220 - -0.2170704007148743 - <_> - - <_> - - - - <_>4 7 12 6 -1. - <_>4 9 12 2 3. - 0 - 0.0598606802523136 - -0.1876475065946579 - 0.2765103876590729 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>4 5 6 5 2. - <_>10 10 6 5 2. - 0 - -0.0296821705996990 - -0.4643633067607880 - 0.1112900972366333 - <_> - - <_> - - - - <_>8 12 8 8 -1. - <_>12 12 4 4 2. - <_>8 16 4 4 2. - 0 - -2.2648361045867205e-003 - -0.2716302871704102 - 0.0869167596101761 - <_> - - <_> - - - - <_>3 14 5 6 -1. - <_>3 17 5 3 2. - 0 - -1.6869819955900311e-003 - 0.1799899041652679 - -0.2715292870998383 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>9 4 2 8 3. - 0 - 1.0256370296701789e-003 - -0.4324820935726166 - 0.1025668978691101 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>6 0 2 8 3. - 0 - -0.0317629203200340 - -0.6441916823387146 - 0.0675051063299179 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>7 1 13 1 3. - 0 - -8.5913296788930893e-003 - -0.3767251074314117 - 0.0729007571935654 - <_> - - <_> - - - - <_>3 1 14 2 -1. - <_>3 2 14 1 2. - 0 - -2.1636451128870249e-003 - -0.4220950901508331 - 0.1072463020682335 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - 6.0111237689852715e-004 - 0.0613021105527878 - -0.3800497949123383 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - -6.1244412790983915e-005 - 0.0747657865285873 - -0.5264449119567871 - <_> - - <_> - - - - <_>13 1 3 18 -1. - <_>14 1 1 18 3. - 0 - -0.0236664302647114 - -0.5680130124092102 - 0.0363775417208672 - <_> - - <_> - - - - <_>4 1 3 15 -1. - <_>5 1 1 15 3. - 0 - -0.0142566096037626 - -0.5344669222831726 - 0.0627688691020012 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - -0.0157139096409082 - 0.3189856112003326 - -0.1154123991727829 - <_> - - <_> - - - - <_>0 12 20 4 -1. - <_>0 14 20 2 2. - 0 - -0.0592860206961632 - -0.5713595747947693 - 0.0817756801843643 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - -0.0441229082643986 - -0.7059100866317749 - 0.0208330992609262 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - -7.2728260420262814e-004 - 0.1081985011696816 - -0.3807745873928070 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0666537284851074 - -0.6082463860511780 - 0.0432488210499287 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>0 8 20 1 2. - 0 - 2.3679709993302822e-003 - -0.2979309856891632 - 0.1209193989634514 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 0.0335661806166172 - 0.0364646203815937 - -0.5576698780059815 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0531388111412525 - -0.5624539256095886 - 0.0652962774038315 - <_> - - <_> - - - - <_>5 5 10 8 -1. - <_>5 9 10 4 2. - 0 - -2.9401908977888525e-004 - -0.5841795206069946 - 0.0500055104494095 - <_> - - <_> - - - - <_>7 1 3 10 -1. - <_>7 6 3 5 2. - 0 - -4.8085048911161721e-004 - 0.1401866972446442 - -0.2479272037744522 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0477770604193211 - 0.0556727983057499 - -0.5954074263572693 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0334238708019257 - -0.1437038928270340 - 0.2330098003149033 - <_> - - <_> - - - - <_>4 9 12 11 -1. - <_>8 9 4 11 3. - 0 - 0.2043281048536301 - 0.0453270487487316 - -0.7416430711746216 - <_> - - <_> - - - - <_>1 0 18 20 -1. - <_>7 0 6 20 3. - 0 - 0.1410606056451798 - -0.3967429101467133 - 0.0816928669810295 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - 1.0005939839174971e-004 - -0.2231793999671936 - 0.1391762942075729 - <_> - - <_> - - - - <_>2 15 16 4 -1. - <_>2 17 16 2 2. - 0 - 0.0606893897056580 - 0.0343249887228012 - -0.8279684782028198 - <_> - - <_> - - - - <_>5 18 13 2 -1. - <_>5 19 13 1 2. - 0 - -3.6456179805099964e-003 - 0.1528643965721130 - -0.1400597989559174 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>5 0 2 8 3. - 0 - 0.0319453403353691 - 0.0653436928987503 - -0.4429608881473541 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - 0.0234283804893494 - 0.0255273096263409 - -0.6327065825462341 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0460679493844509 - 0.0435791015625000 - -0.6492987275123596 - <_> - - <_> - - - - <_>10 14 9 6 -1. - <_>10 16 9 2 3. - 0 - -0.0580551512539387 - -0.6395754218101502 - 0.0140287503600121 - <_> - - <_> - - - - <_>1 14 9 6 -1. - <_>1 16 9 2 3. - 0 - 0.0387837402522564 - 0.0512335188686848 - -0.5414438843727112 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - -0.0127655202522874 - 0.2708289027214050 - -0.0919277667999268 - <_> - - <_> - - - - <_>3 2 13 2 -1. - <_>3 3 13 1 2. - 0 - -3.1400551088154316e-003 - -0.3467982113361359 - 0.0839736685156822 - <_> - - <_> - - - - <_>4 6 16 3 -1. - <_>4 6 8 3 2. - 0 - -0.0197199992835522 - -0.2047695964574814 - 0.0632321983575821 - <_> - - <_> - - - - <_>0 10 17 2 -1. - <_>0 11 17 1 2. - 0 - 3.2241051085293293e-003 - 0.0962597131729126 - -0.2809821963310242 - <_> - - <_> - - - - <_>11 6 6 12 -1. - <_>11 12 6 6 2. - 0 - -0.0592718608677387 - -0.2668690979480743 - 0.0329072587192059 - <_> - - <_> - - - - <_>0 10 16 4 -1. - <_>0 10 8 2 2. - <_>8 12 8 2 2. - 0 - 0.0156366396695375 - 0.0691880732774735 - -0.4176171123981476 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -8.8900122791528702e-003 - 0.1960355043411255 - -0.1124975010752678 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>3 14 7 2 2. - <_>10 16 7 2 2. - 0 - 0.0244589094072580 - 0.0569889694452286 - -0.5102502107620239 - <_> - - <_> - - - - <_>6 6 14 3 -1. - <_>6 6 7 3 2. - 0 - 0.1010131984949112 - 9.4210049137473106e-003 - -0.3669132888317108 - <_> - - <_> - - - - <_>0 6 14 3 -1. - <_>7 6 7 3 2. - 0 - 0.0907398313283920 - 0.0539998784661293 - -0.5118147730827332 - <_> - - <_> - - - - <_>5 8 10 8 -1. - <_>10 8 5 4 2. - <_>5 12 5 4 2. - 0 - -0.0495578683912754 - -0.6246703863143921 - 0.0409882701933384 - <_> - - <_> - - - - <_>1 2 18 7 -1. - <_>7 2 6 7 3. - 0 - 0.2655834853649139 - -0.0861365497112274 - 0.3243843913078308 - <_> - - <_> - - - - <_>12 6 5 6 -1. - <_>12 9 5 3 2. - 0 - 1.8632459687069058e-003 - -0.5456336140632629 - 0.0586840510368347 - <_> - - <_> - - - - <_>1 10 4 7 -1. - <_>3 10 2 7 2. - 0 - 0.0118049401789904 - -0.2060389965772629 - 0.1416734009981155 - <_> - - <_> - - - - <_>4 0 14 2 -1. - <_>4 1 14 1 2. - 0 - 6.8137067137286067e-004 - -0.2080647051334381 - 0.0926273763179779 - <_> - - <_> - - - - <_>0 6 7 9 -1. - <_>0 9 7 3 3. - 0 - 5.7278381427749991e-004 - -0.4317088127136231 - 0.0633603632450104 - <_> - - <_> - - - - <_>9 6 3 14 -1. - <_>10 6 1 14 3. - 0 - -0.0110419997945428 - 0.1814437955617905 - -0.0417078398168087 - <_> - - <_> - - - - <_>3 4 13 3 -1. - <_>3 5 13 1 3. - 0 - 9.5696747303009033e-003 - -0.1209833994507790 - 0.2160761952400208 - <_> - - <_> - - - - <_>13 2 7 6 -1. - <_>13 4 7 2 3. - 0 - 0.0742741972208023 - 0.0263995490968227 - -0.7760186791419983 - <_> - - <_> - - - - <_>0 1 18 5 -1. - <_>6 1 6 5 3. - 0 - -0.0258158296346664 - 0.5349736809730530 - -0.0520251505076885 - <_> - - <_> - - - - <_>12 10 6 10 -1. - <_>15 10 3 5 2. - <_>12 15 3 5 2. - 0 - -0.0633146911859512 - 0.5190032124519348 - -0.0193295907229185 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>2 10 3 5 2. - <_>5 15 3 5 2. - 0 - -0.0664324909448624 - 0.7214093208312988 - -0.0328820310533047 - <_> - - <_> - - - - <_>4 3 12 6 -1. - <_>4 5 12 2 3. - 0 - -0.0757490396499634 - 0.4148524999618530 - -0.0554517284035683 - <_> - - <_> - - - - <_>0 2 18 4 -1. - <_>0 2 9 2 2. - <_>9 4 9 2 2. - 0 - -0.0202960409224033 - -0.3325068950653076 - 0.0823978930711746 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - 0.0221726503223181 - -0.1441915035247803 - 0.1728086024522781 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - 4.2085880413651466e-003 - -0.3023748993873596 - 0.0866990834474564 - <_> - - <_> - - - - <_>10 10 6 10 -1. - <_>13 10 3 5 2. - <_>10 15 3 5 2. - 0 - 0.0682673305273056 - 8.7291244417428970e-003 - -0.3695572912693024 - <_> - - <_> - - - - <_>4 10 6 10 -1. - <_>4 10 3 5 2. - <_>7 15 3 5 2. - 0 - 5.1220320165157318e-003 - -0.2082498073577881 - 0.1453005969524384 - <_> - - <_> - - - - <_>6 0 8 10 -1. - <_>10 0 4 5 2. - <_>6 5 4 5 2. - 0 - -0.0531143285334110 - -0.5514230132102966 - 0.0434211902320385 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - -0.0497399792075157 - 0.4407710134983063 - -0.0643496736884117 - -1.9982930421829224 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>9 3 2 14 -1. - <_>9 10 2 7 2. - 0 - -3.3883380820043385e-004 - 0.1899784952402115 - -0.4618484973907471 - <_> - - <_> - - - - <_>12 1 6 10 -1. - <_>15 1 3 5 2. - <_>12 6 3 5 2. - 0 - -1.5632030554115772e-003 - 0.1938140988349915 - -0.4351884126663208 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 1.5552520053461194e-003 - -0.4742031097412109 - 0.1213762983679771 - <_> - - <_> - - - - <_>11 1 9 18 -1. - <_>11 10 9 9 2. - 0 - -0.0314171202480793 - -0.3909668922424316 - 0.1095193028450012 - <_> - - <_> - - - - <_>2 1 6 10 -1. - <_>2 1 3 5 2. - <_>5 6 3 5 2. - 0 - -3.2835190650075674e-003 - 0.1642895042896271 - -0.3275192975997925 - <_> - - <_> - - - - <_>4 10 16 4 -1. - <_>12 10 8 2 2. - <_>4 12 8 2 2. - 0 - 5.8749080635607243e-003 - 0.0762259736657143 - -0.4347071051597595 - <_> - - <_> - - - - <_>0 10 18 4 -1. - <_>0 10 9 2 2. - <_>9 12 9 2 2. - 0 - 4.4846539385616779e-003 - 0.1219756007194519 - -0.4487237930297852 - <_> - - <_> - - - - <_>12 5 4 8 -1. - <_>12 9 4 4 2. - 0 - 1.9835829734802246e-003 - -0.6291102170944214 - 0.1012253016233444 - <_> - - <_> - - - - <_>0 4 18 10 -1. - <_>0 4 9 5 2. - <_>9 9 9 5 2. - 0 - 0.0126094697043300 - 0.1043825000524521 - -0.3501549959182739 - <_> - - <_> - - - - <_>2 11 18 2 -1. - <_>2 12 18 1 2. - 0 - -4.7475768951699138e-004 - 0.1100815981626511 - -0.3042953908443451 - <_> - - <_> - - - - <_>4 0 5 9 -1. - <_>4 3 5 3 3. - 0 - 3.2356760930269957e-003 - -0.2705790102481842 - 0.1274618059396744 - <_> - - <_> - - - - <_>10 2 6 8 -1. - <_>12 2 2 8 3. - 0 - 9.9898613989353180e-003 - 0.0639069825410843 - -0.4711843132972717 - <_> - - <_> - - - - <_>1 7 13 2 -1. - <_>1 8 13 1 2. - 0 - 5.6069239508360624e-004 - -0.3178333044052124 - 0.1040434017777443 - <_> - - <_> - - - - <_>10 2 6 8 -1. - <_>12 2 2 8 3. - 0 - -0.0576946996152401 - -0.5134257078170776 - 0.0263949800282717 - <_> - - <_> - - - - <_>4 2 6 8 -1. - <_>6 2 2 8 3. - 0 - 5.5947788059711456e-003 - 0.0767747536301613 - -0.4337426126003265 - <_> - - <_> - - - - <_>8 5 8 8 -1. - <_>12 5 4 4 2. - <_>8 9 4 4 2. - 0 - -3.8770840037614107e-003 - 0.1398819983005524 - -0.2022155970335007 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0478742010891438 - -0.4792838990688324 - 0.0680430307984352 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>16 0 3 5 2. - <_>13 5 3 5 2. - 0 - 0.0258175507187843 - -0.0455241985619068 - 0.3945290148258209 - <_> - - <_> - - - - <_>3 9 13 3 -1. - <_>3 10 13 1 3. - 0 - 1.6696650709491223e-004 - -0.3088071942329407 - 0.1087523996829987 - <_> - - <_> - - - - <_>5 11 11 6 -1. - <_>5 14 11 3 2. - 0 - 9.8888948559761047e-004 - 0.0686990320682526 - -0.4181300997734070 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -3.4260770771652460e-003 - -0.2892970144748688 - 0.1147964969277382 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 0.0660443678498268 - 0.0168092697858810 - -0.3353480100631714 - <_> - - <_> - - - - <_>3 5 4 8 -1. - <_>3 9 4 4 2. - 0 - 2.8318059630692005e-003 - -0.3948217034339905 - 0.0855987221002579 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.4268054962158203 - 5.0977780483663082e-003 - -0.5933117866516113 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1196065023541451 - 0.0274377707391977 - -0.7661628127098084 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0195713192224503 - -0.1196618005633354 - 0.2396223992109299 - <_> - - <_> - - - - <_>0 1 16 3 -1. - <_>0 2 16 1 3. - 0 - -0.0174324698746204 - -0.5853034853935242 - 0.0564003400504589 - <_> - - <_> - - - - <_>8 9 6 10 -1. - <_>8 14 6 5 2. - 0 - -0.1119662970304489 - -0.6724832057952881 - 0.0291506592184305 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - -4.5747519470751286e-003 - -0.4773026108741760 - 0.0566129982471466 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>16 0 3 5 2. - <_>13 5 3 5 2. - 0 - -5.1501519046723843e-003 - 0.1151062995195389 - -0.1073232963681221 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 0.0290342494845390 - -0.0533687099814415 - 0.6422646045684815 - <_> - - <_> - - - - <_>7 1 8 12 -1. - <_>7 7 8 6 2. - 0 - -1.8050910439342260e-003 - 0.1279534995555878 - -0.1232938989996910 - <_> - - <_> - - - - <_>1 2 17 2 -1. - <_>1 3 17 1 2. - 0 - -2.4374839849770069e-003 - -0.3531234860420227 - 0.0877031534910202 - <_> - - <_> - - - - <_>11 0 3 18 -1. - <_>12 0 1 18 3. - 0 - -0.0190700795501471 - -0.4066244065761566 - 0.0432731881737709 - <_> - - <_> - - - - <_>0 13 8 6 -1. - <_>0 15 8 2 3. - 0 - -0.0504542402923107 - -0.8119810223579407 - 0.0282891094684601 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - 1.6544000245630741e-003 - -0.1696404069662094 - 0.1219474002718926 - <_> - - <_> - - - - <_>0 6 6 14 -1. - <_>0 6 3 7 2. - <_>3 13 3 7 2. - 0 - -0.0467913113534451 - 0.4061444103717804 - -0.0611748583614826 - <_> - - <_> - - - - <_>12 11 8 6 -1. - <_>12 13 8 2 3. - 0 - -0.0559538491070271 - -0.8266291022300720 - 0.0277747493237257 - <_> - - <_> - - - - <_>2 16 12 4 -1. - <_>6 16 4 4 3. - 0 - 1.4469559537246823e-003 - -0.1495386958122253 - 0.1596699059009552 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -0.0125290500000119 - -0.4250465035438538 - 0.0216580796986818 - <_> - - <_> - - - - <_>5 6 4 8 -1. - <_>5 10 4 4 2. - 0 - 1.1086500016972423e-003 - -0.3600699007511139 - 0.0644150972366333 - <_> - - <_> - - - - <_>3 11 16 4 -1. - <_>11 11 8 2 2. - <_>3 13 8 2 2. - 0 - 0.0393617786467075 - 8.2419048994779587e-003 - -0.7530307173728943 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 0.0188239291310310 - 0.0448211207985878 - -0.5060411095619202 - <_> - - <_> - - - - <_>16 3 4 8 -1. - <_>16 3 2 8 2. - 0 - -0.0320830009877682 - 0.3143131136894226 - -0.0391818694770336 - <_> - - <_> - - - - <_>6 0 3 18 -1. - <_>7 0 1 18 3. - 0 - -0.0310819298028946 - -0.7690374255180359 - 0.0307429600507021 - <_> - - <_> - - - - <_>16 3 4 8 -1. - <_>16 3 2 8 2. - 0 - 0.0232182107865810 - -0.0577487498521805 - 0.2895534932613373 - <_> - - <_> - - - - <_>4 12 12 4 -1. - <_>8 12 4 4 3. - 0 - -1.1492100311443210e-003 - 0.1150140985846520 - -0.1931069046258926 - <_> - - <_> - - - - <_>4 0 16 3 -1. - <_>4 1 16 1 3. - 0 - -0.0165939405560493 - -0.4229854047298431 - 0.0437389798462391 - <_> - - <_> - - - - <_>0 3 4 8 -1. - <_>2 3 2 8 2. - 0 - -0.0101465703919530 - 0.2557984888553619 - -0.0919662415981293 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -0.0130540197715163 - 0.1833952963352203 - -0.0401608310639858 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - 3.7463540211319923e-003 - -0.1258676946163178 - 0.2224701941013336 - <_> - - <_> - - - - <_>9 6 6 12 -1. - <_>9 6 3 12 2. - 0 - -0.0484635904431343 - -0.5815590023994446 - 0.0297133903950453 - <_> - - <_> - - - - <_>0 10 10 6 -1. - <_>0 12 10 2 3. - 0 - 6.4649381674826145e-003 - 0.0931691080331802 - -0.2904658019542694 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0156078096479177 - 0.0473319701850414 - -0.4480555951595306 - <_> - - <_> - - - - <_>4 10 12 10 -1. - <_>4 15 12 5 2. - 0 - -5.8314641937613487e-003 - 0.0989417582750320 - -0.2205685973167419 - <_> - - <_> - - - - <_>10 4 4 16 -1. - <_>10 4 2 16 2. - 0 - 0.0736078023910522 - 0.0167804602533579 - -0.5495312213897705 - <_> - - <_> - - - - <_>6 4 4 16 -1. - <_>8 4 2 16 2. - 0 - -6.4223129302263260e-003 - -0.2964796125888825 - 0.0735399127006531 - <_> - - <_> - - - - <_>7 8 13 2 -1. - <_>7 9 13 1 2. - 0 - 2.2267029635258950e-005 - -0.3421182036399841 - 0.0418582707643509 - <_> - - <_> - - - - <_>0 8 13 2 -1. - <_>0 9 13 1 2. - 0 - 0.0372736304998398 - 0.0274580791592598 - -0.7855197191238403 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - 4.2738770134747028e-003 - -0.0825145170092583 - 0.1040488034486771 - <_> - - <_> - - - - <_>3 0 9 5 -1. - <_>6 0 3 5 3. - 0 - 1.1906049912795424e-003 - -0.1630043983459473 - 0.1530064940452576 - <_> - - <_> - - - - <_>14 6 6 10 -1. - <_>14 6 3 10 2. - 0 - 8.7800435721874237e-003 - -0.0928859487175941 - 0.1314751058816910 - <_> - - <_> - - - - <_>1 5 17 6 -1. - <_>1 7 17 2 3. - 0 - 2.4151368997991085e-003 - 0.0475985594093800 - -0.4482966959476471 - <_> - - <_> - - - - <_>14 6 6 10 -1. - <_>14 6 3 10 2. - 0 - -0.0274283401668072 - 0.1981106996536255 - -0.0559796988964081 - <_> - - <_> - - - - <_>0 17 14 3 -1. - <_>0 18 14 1 3. - 0 - -1.4117059763520956e-003 - -0.2113897055387497 - 0.1040974035859108 - <_> - - <_> - - - - <_>14 6 6 10 -1. - <_>14 6 3 10 2. - 0 - -0.2021020054817200 - -0.7712023258209229 - 7.0582218468189240e-003 - <_> - - <_> - - - - <_>0 6 6 10 -1. - <_>3 6 3 10 2. - 0 - -0.0414513200521469 - 0.2829514145851135 - -0.0713235288858414 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - 4.8561887815594673e-003 - 0.0866938978433609 - -0.2354182004928589 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - -4.4662880100077018e-005 - 0.1325713992118835 - -0.2016859948635101 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0376715809106827 - -0.0749522894620895 - 0.3384338021278381 - <_> - - <_> - - - - <_>2 7 6 13 -1. - <_>4 7 2 13 3. - 0 - 0.0743432566523552 - 0.0329050309956074 - -0.7353677749633789 - <_> - - <_> - - - - <_>13 3 3 15 -1. - <_>14 3 1 15 3. - 0 - -0.0101864198222756 - -0.3127708137035370 - 0.0441639907658100 - <_> - - <_> - - - - <_>4 3 3 15 -1. - <_>5 3 1 15 3. - 0 - -0.0245068799704313 - -0.6134651899337769 - 0.0296921394765377 - <_> - - <_> - - - - <_>3 2 15 5 -1. - <_>8 2 5 5 3. - 0 - -0.0382381491363049 - 0.3558354079723358 - -0.0483886189758778 - <_> - - <_> - - - - <_>5 4 9 14 -1. - <_>5 11 9 7 2. - 0 - 0.1798366010189056 - 0.0195015892386436 - -0.9848588109016419 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 8.4765878273174167e-004 - -0.2796033024787903 - 0.0783230364322662 - <_> - - <_> - - - - <_>4 6 10 12 -1. - <_>4 6 5 6 2. - <_>9 12 5 6 2. - 0 - 3.7178809288889170e-003 - 0.0725254416465759 - -0.2406740933656693 - <_> - - <_> - - - - <_>5 5 12 10 -1. - <_>11 5 6 5 2. - <_>5 10 6 5 2. - 0 - -0.0909323170781136 - -0.7153915166854858 - 8.8080493733286858e-003 - <_> - - <_> - - - - <_>3 5 12 10 -1. - <_>3 5 6 5 2. - <_>9 10 6 5 2. - 0 - -0.0800878107547760 - -0.6783071756362915 - 0.0249043200165033 - <_> - - <_> - - - - <_>12 0 8 12 -1. - <_>16 0 4 6 2. - <_>12 6 4 6 2. - 0 - 7.6924148015677929e-003 - -0.0509674996137619 - 0.1195252984762192 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0414852313697338 - -0.0494939200580120 - 0.3538686037063599 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>10 2 10 2 2. - <_>0 4 10 2 2. - 0 - 0.0340516082942486 - 0.0422009788453579 - -0.5011072158813477 - <_> - - <_> - - - - <_>6 6 6 8 -1. - <_>8 6 2 8 3. - 0 - -0.0262358300387859 - 0.4493483901023865 - -0.0418512001633644 - <_> - - <_> - - - - <_>10 0 3 20 -1. - <_>11 0 1 20 3. - 0 - -0.0513739585876465 - -0.9594280123710632 - 0.0171927902847528 - <_> - - <_> - - - - <_>7 0 3 20 -1. - <_>8 0 1 20 3. - 0 - -0.0267427396029234 - -0.6563224196434021 - 0.0217780806124210 - <_> - - <_> - - - - <_>10 0 2 13 -1. - <_>10 0 1 13 2. - 0 - -1.3730529462918639e-003 - -0.1863850951194763 - 0.0411393493413925 - <_> - - <_> - - - - <_>8 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 1.0963230160996318e-003 - -0.1421937048435211 - 0.1383201926946640 - <_> - - <_> - - - - <_>0 15 20 4 -1. - <_>10 15 10 2 2. - <_>0 17 10 2 2. - 0 - -4.5011811889708042e-003 - -0.1846860051155090 - 0.0910241901874542 - <_> - - <_> - - - - <_>2 3 3 13 -1. - <_>3 3 1 13 3. - 0 - 4.4253250234760344e-004 - -0.1273694038391113 - 0.1365536004304886 - <_> - - <_> - - - - <_>7 2 7 6 -1. - <_>7 4 7 2 3. - 0 - 0.0305007100105286 - -0.0581461489200592 - 0.2418991029262543 - <_> - - <_> - - - - <_>0 2 15 14 -1. - <_>0 9 15 7 2. - 0 - -0.1169191971421242 - -0.5546640753746033 - 0.0302490293979645 - <_> - - <_> - - - - <_>12 10 4 8 -1. - <_>12 14 4 4 2. - 0 - -9.5684931147843599e-004 - 0.0518998689949512 - -0.1415279954671860 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>4 16 12 2 3. - 0 - 1.3096149777993560e-003 - -0.1424822956323624 - 0.1222778037190437 - <_> - - <_> - - - - <_>1 13 18 4 -1. - <_>10 13 9 2 2. - <_>1 15 9 2 2. - 0 - 0.0349888801574707 - 0.0276531297713518 - -0.6173881292343140 - -1.8377989530563354 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1648942977190018 - -0.2565720975399017 - 0.4127771854400635 - <_> - - <_> - - - - <_>5 7 11 4 -1. - <_>5 9 11 2 2. - 0 - 0.0205848608165979 - -0.5244221091270447 - 0.1491083055734634 - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - 8.8764587417244911e-004 - 0.1333470046520233 - -0.5225952267646790 - <_> - - <_> - - - - <_>11 6 6 14 -1. - <_>14 6 3 7 2. - <_>11 13 3 7 2. - 0 - -1.3320889556780457e-003 - -0.3656874895095825 - 0.2048227936029434 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>3 2 3 11 2. - 0 - 0.0779161974787712 - -0.2155715972185135 - 0.3106957972049713 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 2.4321360979229212e-003 - -0.4474255144596100 - 0.1063833981752396 - <_> - - <_> - - - - <_>3 7 6 12 -1. - <_>3 7 3 6 2. - <_>6 13 3 6 2. - 0 - -5.8699389919638634e-003 - -0.3880077898502350 - 0.1441058963537216 - <_> - - <_> - - - - <_>7 6 10 3 -1. - <_>7 6 5 3 2. - 0 - 0.0697543025016785 - 0.0132249100133777 - -0.8009663224220276 - <_> - - <_> - - - - <_>3 6 10 3 -1. - <_>8 6 5 3 2. - 0 - 3.8338101003319025e-003 - -0.4313930869102478 - 0.1425399035215378 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - -0.0158290304243565 - 0.3095479905605316 - -0.1223272010684013 - <_> - - <_> - - - - <_>3 0 14 9 -1. - <_>3 3 14 3 3. - 0 - 0.0661982968449593 - -0.2055824995040894 - 0.1953122019767761 - <_> - - <_> - - - - <_>3 1 14 4 -1. - <_>10 1 7 2 2. - <_>3 3 7 2 2. - 0 - 0.0176395196467638 - 0.1077058985829353 - -0.4348832070827484 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -0.0110826296731830 - -0.3614957034587860 - 0.1132721006870270 - <_> - - <_> - - - - <_>6 9 10 10 -1. - <_>11 9 5 5 2. - <_>6 14 5 5 2. - 0 - -0.0365152992308140 - -0.4391221106052399 - 0.0552794486284256 - <_> - - <_> - - - - <_>4 9 10 10 -1. - <_>4 9 5 5 2. - <_>9 14 5 5 2. - 0 - -0.0333732999861240 - -0.5686920881271362 - 0.0840439572930336 - <_> - - <_> - - - - <_>5 6 10 6 -1. - <_>5 9 10 3 2. - 0 - 0.0813955590128899 - -0.1423501074314117 - 0.2874828875064850 - <_> - - <_> - - - - <_>1 1 7 4 -1. - <_>1 3 7 2 2. - 0 - -4.3892292305827141e-003 - -0.3485983014106751 - 0.1165034025907517 - <_> - - <_> - - - - <_>3 0 14 3 -1. - <_>3 1 14 1 3. - 0 - -6.3558202236890793e-003 - -0.3382304906845093 - 0.1100549027323723 - <_> - - <_> - - - - <_>6 7 7 10 -1. - <_>6 12 7 5 2. - 0 - 0.0209124591201544 - 0.0781978294253349 - -0.4633755087852478 - <_> - - <_> - - - - <_>10 1 10 19 -1. - <_>10 1 5 19 2. - 0 - 0.1160036027431488 - -0.2052866965532303 - 0.1592338979244232 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 0.0163166001439095 - -0.1063399985432625 - 0.3345352113246918 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - -0.2848814129829407 - 0.5163800120353699 - -3.9357859641313553e-003 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.0241554304957390 - -0.7167022824287415 - 0.0500315502285957 - <_> - - <_> - - - - <_>12 0 2 13 -1. - <_>12 0 1 13 2. - 0 - 0.0114132603630424 - 0.0592360310256481 - -0.3814190030097961 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -0.0243041999638081 - 0.4347585141658783 - -0.0865741595625877 - <_> - - <_> - - - - <_>5 5 12 8 -1. - <_>5 9 12 4 2. - 0 - -1.5267609851434827e-003 - -0.6430760025978088 - 0.0516427792608738 - <_> - - <_> - - - - <_>1 14 7 4 -1. - <_>1 16 7 2 2. - 0 - 0.0100733498111367 - 0.0757430270314217 - -0.4290296137332916 - <_> - - <_> - - - - <_>7 12 11 8 -1. - <_>7 16 11 4 2. - 0 - -0.0812248811125755 - -0.4082733094692230 - 0.0554446317255497 - <_> - - <_> - - - - <_>6 0 2 13 -1. - <_>7 0 1 13 2. - 0 - 0.0151490103453398 - 0.0530848614871502 - -0.5449541211128235 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -0.0534907393157482 - -0.4742214977741242 - 0.0394207797944546 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0408842712640762 - -0.8855779767036438 - 0.0320427082479000 - <_> - - <_> - - - - <_>10 3 4 7 -1. - <_>10 3 2 7 2. - 0 - -4.2768509592860937e-004 - -0.3055447041988373 - 0.0514328815042973 - <_> - - <_> - - - - <_>2 15 16 4 -1. - <_>2 15 8 2 2. - <_>10 17 8 2 2. - 0 - 0.0184412691742182 - 0.0806880891323090 - -0.3588404953479767 - <_> - - <_> - - - - <_>1 1 18 6 -1. - <_>10 1 9 3 2. - <_>1 4 9 3 2. - 0 - -0.0476307906210423 - -0.4613190889358521 - 0.0605927705764771 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 8.2442145794630051e-003 - 0.0897936075925827 - -0.3760578036308289 - <_> - - <_> - - - - <_>3 0 14 6 -1. - <_>3 3 14 3 2. - 0 - 0.1000375971198082 - -0.0837603807449341 - 0.3922181129455566 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -0.0284205507487059 - -0.6948354840278626 - 0.0491004101932049 - <_> - - <_> - - - - <_>10 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 0.0564859993755817 - 4.4795661233365536e-003 - -0.7537339925765991 - <_> - - <_> - - - - <_>6 3 4 7 -1. - <_>8 3 2 7 2. - 0 - 1.0085420217365026e-003 - -0.3788126111030579 - 0.0783769935369492 - <_> - - <_> - - - - <_>4 2 13 12 -1. - <_>4 6 13 4 3. - 0 - -1.2643639929592609e-003 - 0.0754860267043114 - -0.3101564049720764 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 0.0141463400796056 - -0.0818050205707550 - 0.3731384873390198 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 7 5 3 2. - 0 - -3.1549399718642235e-003 - -0.2124166041612625 - 0.0891297906637192 - <_> - - <_> - - - - <_>3 10 13 3 -1. - <_>3 11 13 1 3. - 0 - 1.4796239556744695e-003 - -0.2147904038429260 - 0.1354327946901321 - <_> - - <_> - - - - <_>5 10 10 6 -1. - <_>10 10 5 3 2. - <_>5 13 5 3 2. - 0 - -0.0313436090946198 - -0.5811458826065064 - 0.0485763289034367 - <_> - - <_> - - - - <_>3 5 12 12 -1. - <_>3 5 6 6 2. - <_>9 11 6 6 2. - 0 - -0.0761497616767883 - -0.5377451777458191 - 0.0483390688896179 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 7 5 3 2. - 0 - -0.0616689398884773 - -0.8452566266059876 - 1.7448999278713018e-004 - <_> - - <_> - - - - <_>1 3 4 8 -1. - <_>1 7 4 4 2. - 0 - -0.0270849205553532 - -0.5065913796424866 - 0.0477094203233719 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -0.0242409296333790 - -0.3853445053100586 - 0.0503007806837559 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0419793985784054 - -0.1037800982594490 - 0.2623626887798309 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 0.0237176902592182 - 0.0568972714245319 - -0.2895944118499756 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -0.0186697896569967 - -0.3992452919483185 - 0.0734422132372856 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>2 2 18 1 3. - 0 - -0.0149870002642274 - -0.3229691982269287 - 0.0416767485439777 - <_> - - <_> - - - - <_>4 11 6 6 -1. - <_>7 11 3 6 2. - 0 - 8.7209865450859070e-003 - 0.1352138966321945 - -0.1822458058595657 - <_> - - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -0.0122392196208239 - 0.1554080992937088 - -0.1520806998014450 - <_> - - <_> - - - - <_>1 12 18 4 -1. - <_>1 14 18 2 2. - 0 - -0.0487449802458286 - -0.3660675883293152 - 0.0631525665521622 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - -3.8249569479376078e-003 - 0.0834729894995689 - -0.2418632954359055 - <_> - - <_> - - - - <_>0 1 5 14 -1. - <_>0 8 5 7 2. - 0 - 0.1558165997266769 - 0.0319539606571198 - -0.6781318187713623 - <_> - - <_> - - - - <_>2 12 18 6 -1. - <_>11 12 9 3 2. - <_>2 15 9 3 2. - 0 - 0.0682415813207626 - 0.0154784396290779 - -0.4202975034713745 - <_> - - <_> - - - - <_>5 2 6 13 -1. - <_>7 2 2 13 3. - 0 - -0.0959746465086937 - -0.9564784169197083 - 0.0214445907622576 - <_> - - <_> - - - - <_>13 8 7 6 -1. - <_>13 10 7 2 3. - 0 - -0.0126184299588203 - -0.5054485797882080 - 0.0308752600103617 - <_> - - <_> - - - - <_>2 5 16 10 -1. - <_>2 5 8 5 2. - <_>10 10 8 5 2. - 0 - 0.0727276429533958 - 0.0472153499722481 - -0.4507515132427216 - <_> - - <_> - - - - <_>14 4 6 7 -1. - <_>16 4 2 7 3. - 0 - 0.0299232192337513 - -0.0814443528652191 - 0.3165622949600220 - <_> - - <_> - - - - <_>4 1 6 7 -1. - <_>6 1 2 7 3. - 0 - 0.0191380903124809 - 0.0681874006986618 - -0.3487679064273834 - <_> - - <_> - - - - <_>13 10 7 4 -1. - <_>13 12 7 2 2. - 0 - -0.0343147218227386 - -0.5522037148475647 - 0.0373250097036362 - <_> - - <_> - - - - <_>0 10 7 4 -1. - <_>0 12 7 2 2. - 0 - 5.2559198811650276e-003 - 0.0647869780659676 - -0.3636350929737091 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - 0.0140923997387290 - -0.0487043596804142 - 0.2767783105373383 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -9.0101473033428192e-003 - 0.2345259934663773 - -0.1314035058021545 - <_> - - <_> - - - - <_>2 14 17 6 -1. - <_>2 16 17 2 3. - 0 - 0.0967202186584473 - 0.0266613606363535 - -0.7742279767990112 - <_> - - <_> - - - - <_>7 7 5 12 -1. - <_>7 11 5 4 3. - 0 - 0.0853650718927383 - 0.0235299095511436 - -0.7071086168289185 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>8 6 2 7 2. - 0 - 0.0243844296783209 - -0.0626484826207161 - 0.3725188076496124 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>7 10 3 5 2. - <_>10 15 3 5 2. - 0 - 0.0363807789981365 - 0.0433587394654751 - -0.6022241711616516 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0537802688777447 - -0.3344100117683411 - 0.0357005782425404 - <_> - - <_> - - - - <_>0 13 15 3 -1. - <_>0 14 15 1 3. - 0 - -0.0147871002554893 - 0.2913616895675659 - -0.0740752965211868 - <_> - - <_> - - - - <_>13 12 5 8 -1. - <_>13 16 5 4 2. - 0 - 1.2491010129451752e-003 - 0.0416542403399944 - -0.0937588363885880 - <_> - - <_> - - - - <_>0 12 18 6 -1. - <_>0 12 9 3 2. - <_>9 15 9 3 2. - 0 - -0.0275729093700647 - -0.3139821887016296 - 0.0724119991064072 - <_> - - <_> - - - - <_>12 10 6 10 -1. - <_>15 10 3 5 2. - <_>12 15 3 5 2. - 0 - -0.0788664519786835 - 0.6065583825111389 - -0.0238380506634712 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>2 10 3 5 2. - <_>5 15 3 5 2. - 0 - -0.0693393126130104 - 0.7113773226737976 - -0.0298142693936825 - <_> - - <_> - - - - <_>4 7 15 3 -1. - <_>9 7 5 3 3. - 0 - 0.0943725928664207 - 0.0335794389247894 - -0.5977404117584229 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -0.0260486491024494 - -0.4057491123676300 - 0.0556035302579403 - <_> - - <_> - - - - <_>5 7 15 3 -1. - <_>10 7 5 3 3. - 0 - -0.0736302062869072 - -0.6078035235404968 - 0.0252516493201256 - <_> - - <_> - - - - <_>2 5 16 3 -1. - <_>2 6 16 1 3. - 0 - -0.0186104495078325 - 0.2401355952024460 - -0.0953897833824158 - <_> - - <_> - - - - <_>8 8 12 12 -1. - <_>8 8 6 12 2. - 0 - 0.1332962960004807 - -0.0697423815727234 - 0.1332300007343292 - -1.9031070470809937 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>6 3 7 6 -1. - <_>6 6 7 3 2. - 0 - -4.1724857874214649e-003 - 0.1931089013814926 - -0.4963074028491974 - <_> - - <_> - - - - <_>9 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 9.6606701845303178e-004 - -0.5434030294418335 - 0.1243411973118782 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 1.0261629940941930e-003 - -0.4632157981395721 - 0.1116029024124146 - <_> - - <_> - - - - <_>9 8 5 12 -1. - <_>9 12 5 4 3. - 0 - 3.6368470173329115e-003 - 0.0829189494252205 - -0.3666251003742218 - <_> - - <_> - - - - <_>6 5 8 8 -1. - <_>6 9 8 4 2. - 0 - -2.8364539612084627e-003 - -0.6736599206924439 - 0.0655460134148598 - <_> - - <_> - - - - <_>11 0 6 12 -1. - <_>14 0 3 6 2. - <_>11 6 3 6 2. - 0 - -1.0111520532518625e-003 - 0.1405518949031830 - -0.3527033030986786 - <_> - - <_> - - - - <_>3 0 6 12 -1. - <_>3 0 3 6 2. - <_>6 6 3 6 2. - 0 - -2.5434889830648899e-003 - 0.1419118046760559 - -0.2835082113742828 - <_> - - <_> - - - - <_>10 10 4 8 -1. - <_>10 14 4 4 2. - 0 - 3.3014779910445213e-003 - 0.0465538911521435 - -0.4853729009628296 - <_> - - <_> - - - - <_>5 9 10 8 -1. - <_>5 9 5 4 2. - <_>10 13 5 4 2. - 0 - -0.0118029303848743 - -0.3795883059501648 - 0.0920719131827354 - <_> - - <_> - - - - <_>4 11 13 3 -1. - <_>4 12 13 1 3. - 0 - -1.3293370138853788e-003 - 0.1731142997741699 - -0.1689043939113617 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1495845019817352 - 0.0376266017556190 - -0.8001688122749329 - <_> - - <_> - - - - <_>14 0 4 7 -1. - <_>14 0 2 7 2. - 0 - 1.6352189704775810e-003 - -0.2085812985897064 - 0.1598542928695679 - <_> - - <_> - - - - <_>2 0 4 7 -1. - <_>4 0 2 7 2. - 0 - 1.5483440365642309e-003 - -0.1757826954126358 - 0.1756010055541992 - <_> - - <_> - - - - <_>6 5 14 6 -1. - <_>13 5 7 3 2. - <_>6 8 7 3 2. - 0 - -0.0356742590665817 - -0.4605753123760223 - 0.0439837910234928 - <_> - - <_> - - - - <_>0 6 16 6 -1. - <_>0 6 8 3 2. - <_>8 9 8 3 2. - 0 - -0.0145586999133229 - -0.3358741104602814 - 0.0839654803276062 - <_> - - <_> - - - - <_>12 6 5 9 -1. - <_>12 9 5 3 3. - 0 - 5.2891410887241364e-003 - -0.3563517928123474 - 0.0941019728779793 - <_> - - <_> - - - - <_>1 6 9 8 -1. - <_>1 10 9 4 2. - 0 - -9.8066125065088272e-004 - -0.4430184066295624 - 0.0643682107329369 - <_> - - <_> - - - - <_>13 10 7 6 -1. - <_>13 12 7 2 3. - 0 - -0.0407049991190434 - -0.5970032215118408 - 0.0178467705845833 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - 0.0296820402145386 - 0.0381270200014114 - -0.6679514050483704 - <_> - - <_> - - - - <_>9 5 2 14 -1. - <_>9 12 2 7 2. - 0 - -1.7841320368461311e-004 - 0.0741185769438744 - -0.3212124109268189 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 1.0050840210169554e-003 - -0.2064224928617477 - 0.1219410970807076 - <_> - - <_> - - - - <_>1 2 19 2 -1. - <_>1 3 19 1 2. - 0 - -1.6711819916963577e-003 - -0.2658641934394836 - 0.0718826875090599 - <_> - - <_> - - - - <_>0 0 4 13 -1. - <_>2 0 2 13 2. - 0 - -0.0699553191661835 - 0.5009706020355225 - -0.0521725490689278 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>16 1 2 9 3. - 0 - 8.3406828343868256e-003 - -0.0695461109280586 - 0.1694944053888321 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>2 1 2 9 3. - 0 - 0.0154831595718861 - -0.0958656221628189 - 0.2873673141002655 - <_> - - <_> - - - - <_>0 11 20 9 -1. - <_>0 14 20 3 3. - 0 - -0.0426219888031483 - -0.2516076862812042 - 0.1138179004192352 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - 3.6459038965404034e-003 - 0.0701384693384171 - -0.4037627875804901 - <_> - - <_> - - - - <_>9 3 6 10 -1. - <_>11 3 2 10 3. - 0 - -1.8889949424192309e-003 - 0.1469555050134659 - -0.1787984967231751 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -3.4749018959701061e-003 - -0.2498586028814316 - 0.1034967973828316 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - -0.0377922095358372 - -0.6575605869293213 - 0.0230075996369123 - <_> - - <_> - - - - <_>5 9 9 5 -1. - <_>8 9 3 5 3. - 0 - -4.0167139377444983e-004 - 0.1498796045780182 - -0.1452760994434357 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - 0.0348909907042980 - -0.0452078282833099 - 0.5129585266113281 - <_> - - <_> - - - - <_>5 3 6 9 -1. - <_>7 3 2 9 3. - 0 - -9.5964537467807531e-004 - 0.1468829065561295 - -0.1724454015493393 - <_> - - <_> - - - - <_>1 0 18 8 -1. - <_>10 0 9 4 2. - <_>1 4 9 4 2. - 0 - -0.0964613333344460 - -0.7181431055068970 - 0.0325879193842411 - <_> - - <_> - - - - <_>3 18 14 2 -1. - <_>3 19 14 1 2. - 0 - -1.1924919672310352e-003 - 0.1380531042814255 - -0.1416230946779251 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -0.0164200700819492 - -0.4195474088191986 - 0.0430406890809536 - <_> - - <_> - - - - <_>0 4 6 16 -1. - <_>0 4 3 8 2. - <_>3 12 3 8 2. - 0 - -0.0611122697591782 - 0.3776139020919800 - -0.0562647692859173 - <_> - - <_> - - - - <_>14 6 6 13 -1. - <_>14 6 3 13 2. - 0 - -0.0316821709275246 - 0.2103880941867828 - -0.0544750094413757 - <_> - - <_> - - - - <_>6 7 3 12 -1. - <_>6 13 3 6 2. - 0 - -7.4058552272617817e-003 - -0.1870995014905930 - 0.1087614968419075 - <_> - - <_> - - - - <_>11 11 5 6 -1. - <_>11 14 5 3 2. - 0 - -2.8892440604977310e-004 - 0.0697343721985817 - -0.2451675981283188 - <_> - - <_> - - - - <_>1 8 15 4 -1. - <_>6 8 5 4 3. - 0 - -7.9921782016754150e-003 - -0.2406989932060242 - 0.0880122706294060 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -6.4670671708881855e-003 - 0.2081995010375977 - -0.0690622106194496 - <_> - - <_> - - - - <_>6 4 6 7 -1. - <_>8 4 2 7 3. - 0 - -5.3345328196883202e-003 - 0.3246938884258270 - -0.0740588083863258 - <_> - - <_> - - - - <_>9 0 6 10 -1. - <_>12 0 3 5 2. - <_>9 5 3 5 2. - 0 - -6.7914440296590328e-003 - -0.1701446026563644 - 0.0373784489929676 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1633761972188950 - 0.0196821000427008 - -0.9165204167366028 - <_> - - <_> - - - - <_>15 10 4 10 -1. - <_>15 10 2 10 2. - 0 - 0.1175965964794159 - 8.8446342851966619e-004 - -0.7805082798004150 - <_> - - <_> - - - - <_>1 10 4 10 -1. - <_>3 10 2 10 2. - 0 - -0.1168228015303612 - -0.9600989818572998 - 0.0170702803879976 - <_> - - <_> - - - - <_>5 0 10 16 -1. - <_>10 0 5 8 2. - <_>5 8 5 8 2. - 0 - 0.0468992516398430 - 0.0478918999433517 - -0.3204477131366730 - <_> - - <_> - - - - <_>3 6 13 3 -1. - <_>3 7 13 1 3. - 0 - -4.0058898739516735e-003 - 0.1141439005732536 - -0.1571146994829178 - <_> - - <_> - - - - <_>8 6 5 9 -1. - <_>8 9 5 3 3. - 0 - -4.4986438297200948e-005 - 0.2900809943675995 - -0.0424133315682411 - <_> - - <_> - - - - <_>4 6 6 12 -1. - <_>4 10 6 4 3. - 0 - 2.1421080455183983e-003 - -0.3313758075237274 - 0.0539436899125576 - <_> - - <_> - - - - <_>8 13 9 6 -1. - <_>8 16 9 3 2. - 0 - -0.0714087635278702 - -0.8851947188377380 - 9.3488330021500587e-003 - <_> - - <_> - - - - <_>0 5 12 6 -1. - <_>0 7 12 2 3. - 0 - -0.1373367011547089 - -0.8324189782142639 - 0.0178003292530775 - <_> - - <_> - - - - <_>4 8 13 3 -1. - <_>4 9 13 1 3. - 0 - 6.1765720602124929e-004 - -0.1941922008991242 - 0.0680346190929413 - <_> - - <_> - - - - <_>6 6 4 12 -1. - <_>6 12 4 6 2. - 0 - -0.0671707987785339 - -0.5724321007728577 - 0.0303336307406425 - <_> - - <_> - - - - <_>4 15 13 3 -1. - <_>4 16 13 1 3. - 0 - 2.4611391127109528e-003 - -0.1057017967104912 - 0.1880190074443817 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 5.0573959015309811e-003 - -0.0659217536449432 - 0.2986895143985748 - <_> - - <_> - - - - <_>11 1 4 14 -1. - <_>11 1 2 14 2. - 0 - 0.0142137799412012 - 0.0637678802013397 - -0.2121724933385849 - <_> - - <_> - - - - <_>3 6 12 4 -1. - <_>7 6 4 4 3. - 0 - -2.0629619248211384e-003 - -0.2671405076980591 - 0.0768175721168518 - <_> - - <_> - - - - <_>8 0 4 7 -1. - <_>8 0 2 7 2. - 0 - 0.0337877795100212 - 0.0217741504311562 - -0.7493813037872315 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - -0.0273718703538179 - 0.3200806081295013 - -0.0596225112676620 - <_> - - <_> - - - - <_>2 11 16 9 -1. - <_>2 14 16 3 3. - 0 - 0.0283103492110968 - 0.0441506095230579 - -0.4427869915962219 - <_> - - <_> - - - - <_>0 4 6 7 -1. - <_>2 4 2 7 3. - 0 - 3.7205279804766178e-003 - -0.1313648968935013 - 0.1544770002365112 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 2.3320990148931742e-003 - -0.1084922999143601 - 0.2268289029598236 - <_> - - <_> - - - - <_>0 10 16 4 -1. - <_>0 10 8 2 2. - <_>8 12 8 2 2. - 0 - 7.6775359921157360e-003 - 0.0495203882455826 - -0.3885476887226105 - <_> - - <_> - - - - <_>3 1 14 2 -1. - <_>3 2 14 1 2. - 0 - -2.9863099916838109e-004 - -0.1963256001472473 - 0.0834489315748215 - <_> - - <_> - - - - <_>4 10 5 9 -1. - <_>4 13 5 3 3. - 0 - 6.1346050351858139e-003 - 0.0514332503080368 - -0.3083161115646362 - <_> - - <_> - - - - <_>2 14 16 4 -1. - <_>10 14 8 2 2. - <_>2 16 8 2 2. - 0 - 0.0310907792299986 - 0.0241807997226715 - -0.6018446087837219 - <_> - - <_> - - - - <_>0 0 19 8 -1. - <_>0 4 19 4 2. - 0 - 0.2932040095329285 - 0.0118110300973058 - -0.9625393152236939 - <_> - - <_> - - - - <_>10 10 6 5 -1. - <_>10 10 3 5 2. - 0 - -6.6321907797828317e-004 - 0.1024527028203011 - -0.1420076042413712 - <_> - - <_> - - - - <_>1 1 18 15 -1. - <_>7 1 6 15 3. - 0 - 0.0447363592684269 - -0.1123879998922348 - 0.1739203929901123 - <_> - - <_> - - - - <_>10 10 6 5 -1. - <_>10 10 3 5 2. - 0 - -0.0151533903554082 - -0.1610036045312882 - 0.0311169493943453 - <_> - - <_> - - - - <_>4 7 4 8 -1. - <_>6 7 2 8 2. - 0 - -1.1029309825971723e-003 - 0.1212851032614708 - -0.1618229001760483 - <_> - - <_> - - - - <_>17 3 3 14 -1. - <_>18 3 1 14 3. - 0 - -2.8973959852010012e-003 - 0.1082762032747269 - -0.0536213107407093 - <_> - - <_> - - - - <_>4 6 12 12 -1. - <_>4 6 6 6 2. - <_>10 12 6 6 2. - 0 - -9.5785204321146011e-003 - -0.1680832058191299 - 0.0850536227226257 - <_> - - <_> - - - - <_>12 6 8 14 -1. - <_>16 6 4 7 2. - <_>12 13 4 7 2. - 0 - 0.0990923866629601 - -0.0154698798432946 - 0.4113850891590118 - <_> - - <_> - - - - <_>0 6 8 14 -1. - <_>0 6 4 7 2. - <_>4 13 4 7 2. - 0 - 0.0372297801077366 - -0.0528659708797932 - 0.3180429935455322 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0247160494327545 - -0.4033941030502319 - 0.0299648400396109 - <_> - - <_> - - - - <_>2 4 6 16 -1. - <_>2 4 3 8 2. - <_>5 12 3 8 2. - 0 - -0.0989653021097183 - 0.5851048231124878 - -0.0269241705536842 - <_> - - <_> - - - - <_>14 11 5 9 -1. - <_>14 14 5 3 3. - 0 - -9.6337851136922836e-003 - -0.1746747046709061 - 0.0751268714666367 - <_> - - <_> - - - - <_>3 3 14 3 -1. - <_>3 4 14 1 3. - 0 - 1.0483879595994949e-003 - -0.1372846961021423 - 0.1068458035588265 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0425238497555256 - 0.0165786296129227 - -0.5633273720741272 - <_> - - <_> - - - - <_>5 1 6 16 -1. - <_>5 1 3 8 2. - <_>8 9 3 8 2. - 0 - -3.0866260640323162e-003 - 0.0752648934721947 - -0.1947654038667679 - <_> - - <_> - - - - <_>7 7 6 10 -1. - <_>9 7 2 10 3. - 0 - 0.0286433994770050 - -0.0675781369209290 - 0.2576622068881989 - <_> - - <_> - - - - <_>5 9 4 11 -1. - <_>7 9 2 11 2. - 0 - -0.0106273395940661 - -0.2238461971282959 - 0.0721724480390549 - <_> - - <_> - - - - <_>10 9 6 6 -1. - <_>10 9 3 6 2. - 0 - 4.6080970205366611e-003 - 0.0508760809898376 - -0.1407632976770401 - <_> - - <_> - - - - <_>0 3 3 14 -1. - <_>1 3 1 14 3. - 0 - 2.9914160259068012e-003 - -0.0973379835486412 - 0.1766595989465714 - <_> - - <_> - - - - <_>10 9 6 6 -1. - <_>10 9 3 6 2. - 0 - -7.7902628108859062e-003 - -0.0980082377791405 - 0.0374030694365501 - <_> - - <_> - - - - <_>5 10 4 7 -1. - <_>7 10 2 7 2. - 0 - -6.1339238891378045e-004 - 0.0990360230207443 - -0.1626594960689545 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -0.0102343196049333 - 0.2365497946739197 - -0.0378171317279339 - <_> - - <_> - - - - <_>2 5 16 8 -1. - <_>2 9 16 4 2. - 0 - -0.0118674095720053 - -0.8503506779670715 - 0.0190632995218039 - <_> - - <_> - - - - <_>6 2 12 10 -1. - <_>6 7 12 5 2. - 0 - 4.1437768377363682e-003 - 0.0878783464431763 - -0.0944046303629875 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - -5.1355729810893536e-003 - -0.3569979965686798 - 0.0415464900434017 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -1.5296200290322304e-003 - 0.0776945725083351 - -0.0431865788996220 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - -2.7581020258367062e-003 - 0.1906588971614838 - -0.0806799009442329 - <_> - - <_> - - - - <_>12 3 8 12 -1. - <_>12 3 4 12 2. - 0 - 0.2837516963481903 - 6.2291761860251427e-003 - -0.8857815265655518 - <_> - - <_> - - - - <_>0 3 8 12 -1. - <_>4 3 4 12 2. - 0 - -0.2461249977350235 - -0.7054811120033264 - 0.0217989608645439 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - -3.9965631440281868e-003 - -0.1971096992492676 - 0.0803006067872047 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -8.4951231256127357e-003 - 0.2129660993814468 - -0.0829746276140213 - <_> - - <_> - - - - <_>2 11 18 4 -1. - <_>11 11 9 2 2. - <_>2 13 9 2 2. - 0 - 0.0472064800560474 - 9.7466083243489265e-003 - -0.7006629705429077 - <_> - - <_> - - - - <_>0 11 18 4 -1. - <_>0 11 9 2 2. - <_>9 13 9 2 2. - 0 - 3.7802560254931450e-003 - 0.0774788931012154 - -0.2337200045585632 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 0.0446316711604595 - -0.0214647706598043 - 0.3213633894920349 - <_> - - <_> - - - - <_>4 1 9 12 -1. - <_>4 7 9 6 2. - 0 - 6.8157288478687406e-004 - 0.1217707023024559 - -0.1206320002675057 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - -0.0697124525904655 - -0.9482805132865906 - 0.0120174400508404 - <_> - - <_> - - - - <_>0 3 5 6 -1. - <_>0 6 5 3 2. - 0 - -4.8821792006492615e-003 - -0.2177484035491943 - 0.0771133229136467 - <_> - - <_> - - - - <_>6 6 8 4 -1. - <_>6 8 8 2 2. - 0 - 3.4387600608170033e-003 - -0.1809356957674027 - 0.0935955569148064 - <_> - - <_> - - - - <_>0 9 7 6 -1. - <_>0 11 7 2 3. - 0 - -0.0252157002687454 - -0.5571495890617371 - 0.0274208206683397 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 7.4309771880507469e-003 - -0.0466304905712605 - 0.2102489024400711 - <_> - - <_> - - - - <_>5 2 4 13 -1. - <_>7 2 2 13 2. - 0 - -0.0157899595797062 - -0.3344314098358154 - 0.0462916903197765 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 3.5080160014331341e-003 - -0.0646126121282578 - 0.2273766994476318 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>0 8 20 1 2. - 0 - 0.0442912615835667 - 0.0226427298039198 - -0.7068312168121338 - <_> - - <_> - - - - <_>11 0 9 5 -1. - <_>14 0 3 5 3. - 0 - 0.0191081892699003 - -0.0358933210372925 - 0.1461369991302490 - -1.6909840106964111 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>0 3 10 6 -1. - <_>0 3 5 3 2. - <_>5 6 5 3 2. - 0 - -0.0166366696357727 - 0.2596651911735535 - -0.4116224944591522 - <_> - - <_> - - - - <_>6 4 9 5 -1. - <_>9 4 3 5 3. - 0 - 0.0298658106476069 - -0.3318266868591309 - 0.2054599970579147 - <_> - - <_> - - - - <_>3 12 8 8 -1. - <_>3 12 4 4 2. - <_>7 16 4 4 2. - 0 - 9.1892024502158165e-003 - -0.3448179960250855 - 0.1814869046211243 - <_> - - <_> - - - - <_>4 7 15 3 -1. - <_>9 7 5 3 3. - 0 - 2.8450509998947382e-003 - -0.3290483057498932 - 0.0943922922015190 - <_> - - <_> - - - - <_>0 4 6 9 -1. - <_>3 4 3 9 2. - 0 - 0.0342576391994953 - -0.3221279978752136 - 0.1733205020427704 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0343677103519440 - -0.3259381055831909 - 0.1747326999902725 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 9.0881884098052979e-003 - 0.1052701026201248 - -0.4813137054443359 - <_> - - <_> - - - - <_>6 1 8 15 -1. - <_>6 6 8 5 3. - 0 - -5.0939731299877167e-003 - 0.1737498939037323 - -0.2788312137126923 - <_> - - <_> - - - - <_>1 7 15 3 -1. - <_>6 7 5 3 3. - 0 - 1.1773620499297976e-003 - -0.4221720099449158 - 0.1023176014423370 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - 0.0367976091802120 - 0.1122936978936195 - -0.3840919137001038 - <_> - - <_> - - - - <_>6 6 8 8 -1. - <_>6 10 8 4 2. - 0 - -7.2484882548451424e-004 - -0.4479512870311737 - 0.0850795879960060 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - 0.0126032102853060 - 0.0604750402271748 - -0.3532750904560089 - <_> - - <_> - - - - <_>2 0 14 2 -1. - <_>2 1 14 1 2. - 0 - 5.1925552543252707e-004 - -0.3191638886928558 - 0.1190337017178536 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0132441800087690 - 0.2197573035955429 - -0.0950255915522575 - <_> - - <_> - - - - <_>1 3 16 2 -1. - <_>1 4 16 1 2. - 0 - -2.7882310096174479e-003 - -0.2729480862617493 - 0.1241976991295815 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0265914704650640 - 0.0604520104825497 - -0.3963702917098999 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - 0.0125052100047469 - 0.0786311030387878 - -0.4030388891696930 - <_> - - <_> - - - - <_>5 11 13 3 -1. - <_>5 12 13 1 3. - 0 - -0.0138573404401541 - 0.2575975060462952 - -0.1035145968198776 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.0720997527241707 - -0.5519378185272217 - 0.0600208006799221 - <_> - - <_> - - - - <_>2 8 17 3 -1. - <_>2 9 17 1 3. - 0 - -9.8338630050420761e-004 - -0.3191519975662231 - 0.0879776477813721 - <_> - - <_> - - - - <_>1 1 18 6 -1. - <_>1 1 9 3 2. - <_>10 4 9 3 2. - 0 - -0.0583901703357697 - -0.5598897933959961 - 0.0529901906847954 - <_> - - <_> - - - - <_>1 1 19 6 -1. - <_>1 3 19 2 3. - 0 - 4.2504342272877693e-003 - -0.2889725863933563 - 0.0928165167570114 - <_> - - <_> - - - - <_>4 6 12 6 -1. - <_>4 6 6 3 2. - <_>10 9 6 3 2. - 0 - -0.0323325209319592 - -0.4871352016925812 - 0.0607876293361187 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0473656393587589 - -0.1011155024170876 - 0.3259778022766113 - <_> - - <_> - - - - <_>3 18 13 2 -1. - <_>3 19 13 1 2. - 0 - -3.8943330291658640e-003 - 0.1917316019535065 - -0.1672938019037247 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0577291995286942 - 0.0363432914018631 - -0.7316113114356995 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - -0.0189255401492119 - 0.3247149884700775 - -0.0861880630254745 - <_> - - <_> - - - - <_>10 12 8 6 -1. - <_>10 14 8 2 3. - 0 - -0.0396796017885208 - -0.4182668030261993 - 0.0533542111515999 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>0 0 9 2 2. - <_>9 2 9 2 2. - 0 - -0.0207336507737637 - -0.4120518863201141 - 0.0635968521237373 - <_> - - <_> - - - - <_>4 6 15 5 -1. - <_>9 6 5 5 3. - 0 - 0.1538791060447693 - 0.0199541505426168 - -0.5764328837394714 - <_> - - <_> - - - - <_>0 7 15 4 -1. - <_>5 7 5 4 3. - 0 - 0.1213126033544540 - 0.0445164591073990 - -0.5909324288368225 - <_> - - <_> - - - - <_>12 4 4 10 -1. - <_>12 9 4 5 2. - 0 - 2.7478559786686674e-005 - -0.4068849980831146 - 0.0528280995786190 - <_> - - <_> - - - - <_>0 6 18 12 -1. - <_>0 6 9 6 2. - <_>9 12 9 6 2. - 0 - 0.0888936817646027 - 0.0519852414727211 - -0.5022898912429810 - <_> - - <_> - - - - <_>16 5 2 14 -1. - <_>16 12 2 7 2. - 0 - 2.8169099241495132e-003 - 0.0677264332771301 - -0.1358204931020737 - <_> - - <_> - - - - <_>2 9 5 6 -1. - <_>2 12 5 3 2. - 0 - -1.7215269326698035e-004 - 0.0896169170737267 - -0.2958936989307404 - <_> - - <_> - - - - <_>12 0 3 19 -1. - <_>13 0 1 19 3. - 0 - -0.0318306200206280 - -0.5643360018730164 - 0.0228222496807575 - <_> - - <_> - - - - <_>0 10 9 6 -1. - <_>0 12 9 2 3. - 0 - -0.0633343309164047 - -0.8237169981002808 - 0.0275761205703020 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - -0.0690328180789948 - -0.6978821754455566 - 3.3770920708775520e-003 - <_> - - <_> - - - - <_>5 0 4 7 -1. - <_>7 0 2 7 2. - 0 - 2.1021519787609577e-003 - -0.2724404931068420 - 0.0869228914380074 - <_> - - <_> - - - - <_>12 0 3 19 -1. - <_>13 0 1 19 3. - 0 - 0.0340657792985439 - 0.0176705792546272 - -0.4300132095813751 - <_> - - <_> - - - - <_>0 15 14 4 -1. - <_>0 15 7 2 2. - <_>7 17 7 2 2. - 0 - 8.1215314567089081e-003 - -0.1594267040491104 - 0.1625607013702393 - <_> - - <_> - - - - <_>4 5 14 6 -1. - <_>4 7 14 2 3. - 0 - -1.6329119680449367e-003 - 0.0420095883309841 - -0.3292345106601715 - <_> - - <_> - - - - <_>3 1 6 7 -1. - <_>5 1 2 7 3. - 0 - -0.0391103290021420 - -0.6066625118255615 - 0.0412488505244255 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -0.0231888704001904 - -0.5536541938781738 - 0.0173155106604099 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>0 4 6 3 3. - 0 - -0.0629441589117050 - -0.5385370850563049 - 0.0417583510279655 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - -0.0854143723845482 - -0.9312245249748230 - -9.1123272432014346e-004 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - -0.0419633388519287 - -0.5672069787979126 - 0.0391757003962994 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 0.0111656198278070 - -0.0678158104419708 - 0.2900384068489075 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0137307699769735 - 0.3232809901237488 - -0.1059283986687660 - <_> - - <_> - - - - <_>8 9 6 5 -1. - <_>8 9 3 5 2. - 0 - -0.0757930502295494 - 0.5554572939872742 - -3.2934208866208792e-003 - <_> - - <_> - - - - <_>6 9 6 5 -1. - <_>9 9 3 5 2. - 0 - 2.7008100878447294e-003 - 0.1531118005514145 - -0.1660418063402176 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - 0.0101646604016423 - 0.0764046311378479 - -0.2874574959278107 - <_> - - <_> - - - - <_>5 8 10 10 -1. - <_>5 8 5 5 2. - <_>10 13 5 5 2. - 0 - -0.0598081499338150 - -0.7348673939704895 - 0.0303708203136921 - <_> - - <_> - - - - <_>1 5 18 10 -1. - <_>10 5 9 5 2. - <_>1 10 9 5 2. - 0 - 0.0964476168155670 - 0.0261988397687674 - -0.6600142717361450 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - 0.0323502197861671 - 0.0414077192544937 - -0.4744249880313873 - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>7 0 6 6 3. - 0 - 0.2371727973222733 - -0.0959410816431046 - 0.2407049983739853 - <_> - - <_> - - - - <_>4 3 5 14 -1. - <_>4 10 5 7 2. - 0 - -0.0409424714744091 - -0.4058212041854858 - 0.0643275603652000 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0344091616570950 - -0.7484955191612244 - 0.0225207600742579 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 5 8 5 2. - 0 - 0.1384737938642502 - 0.0284723099321127 - -0.7061212062835693 - <_> - - <_> - - - - <_>7 2 6 6 -1. - <_>7 5 6 3 2. - 0 - 0.0465671606361866 - -0.0411681197583675 - 0.6996256709098816 - <_> - - <_> - - - - <_>0 0 19 3 -1. - <_>0 1 19 1 3. - 0 - -0.0304926391690969 - -0.6511697769165039 - 0.0399952791631222 - <_> - - <_> - - - - <_>8 0 8 6 -1. - <_>8 2 8 2 3. - 0 - 8.6345896124839783e-003 - -0.1120797023177147 - 0.0772416964173317 - <_> - - <_> - - - - <_>7 5 6 11 -1. - <_>9 5 2 11 3. - 0 - 0.0318459682166576 - -0.1155207976698875 - 0.1753938943147659 - <_> - - <_> - - - - <_>4 3 12 10 -1. - <_>8 3 4 10 3. - 0 - 0.1712459027767181 - 0.0506879799067974 - -0.4704223871231079 - <_> - - <_> - - - - <_>0 4 18 4 -1. - <_>0 6 18 2 2. - 0 - 5.2879499271512032e-003 - 0.0650414973497391 - -0.2889401912689209 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - 0.0100607797503471 - 0.0636892169713974 - -0.2608188986778259 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - 0.0333307683467865 - 0.0348092988133430 - -0.5784546732902527 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - -0.0528022795915604 - -0.6852104067802429 - 0.0175837799906731 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - -0.0154521996155381 - 0.3139589130878449 - -0.0776115432381630 - <_> - - <_> - - - - <_>10 4 4 14 -1. - <_>12 4 2 7 2. - <_>10 11 2 7 2. - 0 - -6.5528601408004761e-004 - 0.0561813600361347 - -0.1518439054489136 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - 0.0370621494948864 - 0.0289285499602556 - -0.7048760056495667 - <_> - - <_> - - - - <_>10 4 4 14 -1. - <_>12 4 2 7 2. - <_>10 11 2 7 2. - 0 - -0.0577280893921852 - -0.4319241046905518 - 9.2153800651431084e-003 - <_> - - <_> - - - - <_>6 4 4 14 -1. - <_>6 4 2 7 2. - <_>8 11 2 7 2. - 0 - -2.2813139948993921e-003 - 0.1020030006766319 - -0.2165704071521759 - <_> - - <_> - - - - <_>14 3 6 7 -1. - <_>16 3 2 7 3. - 0 - 0.0265132300555706 - -0.0836509466171265 - 0.3074035942554474 - <_> - - <_> - - - - <_>6 6 8 4 -1. - <_>6 8 8 2 2. - 0 - 0.0736221969127655 - 0.0306830499321222 - -0.7191023230552673 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - -0.0130223501473665 - -0.3638656139373779 - 0.0253672096878290 - <_> - - <_> - - - - <_>6 0 2 15 -1. - <_>7 0 1 15 2. - 0 - -0.0133198201656342 - -0.5188406109809876 - 0.0359350293874741 - <_> - - <_> - - - - <_>12 1 3 17 -1. - <_>13 1 1 17 3. - 0 - 2.3190369829535484e-003 - -0.0615152008831501 - 0.0711004510521889 - <_> - - <_> - - - - <_>5 1 3 17 -1. - <_>6 1 1 17 3. - 0 - -0.0213728304952383 - -0.5024757981300354 - 0.0398448109626770 - <_> - - <_> - - - - <_>9 4 3 13 -1. - <_>10 4 1 13 3. - 0 - 0.0244745891541243 - -0.0479608587920666 - 0.2693111002445221 - <_> - - <_> - - - - <_>9 3 2 14 -1. - <_>10 3 1 14 2. - 0 - -0.0106798699125648 - 0.3147428035736084 - -0.0847589522600174 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0489617995917797 - 0.0273580998182297 - -0.3822936117649078 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - 0.0323763489723206 - -0.0470909997820854 - 0.4598523080348969 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0109952203929424 - -0.1854424029588699 - 0.0360069796442986 - <_> - - <_> - - - - <_>0 5 20 4 -1. - <_>10 5 10 4 2. - 0 - 0.1762603074312210 - 0.0243751592934132 - -0.7768660187721252 - <_> - - <_> - - - - <_>13 2 7 6 -1. - <_>13 4 7 2 3. - 0 - 0.0797784924507141 - 3.3787339925765991e-003 - -0.7292888760566711 - <_> - - <_> - - - - <_>0 2 19 2 -1. - <_>0 3 19 1 2. - 0 - -0.0113292103633285 - -0.4639767110347748 - 0.0393808297812939 - <_> - - <_> - - - - <_>10 9 10 11 -1. - <_>10 9 5 11 2. - 0 - 0.0634313002228737 - -0.0970740616321564 - 0.1011886969208717 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - -0.0126918498426676 - 0.2814230024814606 - -0.0721057131886482 - <_> - - <_> - - - - <_>3 0 15 9 -1. - <_>8 0 5 9 3. - 0 - -0.0782384127378464 - 0.5740063786506653 - -0.0184005498886108 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0395325198769569 - 0.0431549884378910 - -0.5232784152030945 - <_> - - <_> - - - - <_>3 4 14 2 -1. - <_>3 5 14 1 2. - 0 - 0.0153557797893882 - -0.0473161786794662 - 0.4692577123641968 - <_> - - <_> - - - - <_>0 11 6 7 -1. - <_>2 11 2 7 3. - 0 - -6.4018620178103447e-003 - 0.1329723000526428 - -0.1436561942100525 - <_> - - <_> - - - - <_>10 9 10 11 -1. - <_>10 9 5 11 2. - 0 - -0.1056734025478363 - 0.2020632028579712 - -0.0144064603373408 - <_> - - <_> - - - - <_>3 13 6 7 -1. - <_>5 13 2 7 3. - 0 - 0.0281638391315937 - 0.0711809918284416 - -0.3103423118591309 - <_> - - <_> - - - - <_>3 8 15 3 -1. - <_>8 8 5 3 3. - 0 - 0.1170298010110855 - 0.0116199301555753 - -0.7153096199035645 - <_> - - <_> - - - - <_>0 1 8 8 -1. - <_>0 1 4 4 2. - <_>4 5 4 4 2. - 0 - -0.0389215685427189 - 0.2441267967224121 - -0.0822448506951332 - <_> - - <_> - - - - <_>9 8 10 4 -1. - <_>9 8 5 4 2. - 0 - -0.0284354891628027 - -0.3678517043590546 - 0.0384888201951981 - <_> - - <_> - - - - <_>0 0 18 6 -1. - <_>6 0 6 6 3. - 0 - -0.0363935492932796 - 0.5220673084259033 - -0.0470793806016445 - -1.8724700212478638 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>4 3 12 9 -1. - <_>4 6 12 3 3. - 0 - -0.0214285105466843 - 0.1901407986879349 - -0.5061274170875549 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0205961298197508 - -0.2928322851657867 - 0.2465517967939377 - <_> - - <_> - - - - <_>8 6 4 10 -1. - <_>8 11 4 5 2. - 0 - 2.7893469668924809e-003 - 0.1108592003583908 - -0.4690982997417450 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 4.4722640886902809e-003 - -0.2825078070163727 - 0.1456467062234879 - <_> - - <_> - - - - <_>0 3 17 2 -1. - <_>0 4 17 1 2. - 0 - -1.0463190264999866e-003 - -0.2660326957702637 - 0.1281591951847076 - <_> - - <_> - - - - <_>12 6 5 6 -1. - <_>12 9 5 3 2. - 0 - 1.5831940108910203e-003 - -0.6346729993820190 - 0.0710038319230080 - <_> - - <_> - - - - <_>5 6 8 8 -1. - <_>5 6 4 4 2. - <_>9 10 4 4 2. - 0 - -7.3153319135599304e-006 - 0.1024893000721932 - -0.3481596112251282 - <_> - - <_> - - - - <_>9 10 7 6 -1. - <_>9 12 7 2 3. - 0 - 5.4208859801292419e-003 - 0.0598305314779282 - -0.3138777911663055 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 1.2645759852603078e-003 - -0.2270915061235428 - 0.1316000968217850 - <_> - - <_> - - - - <_>13 6 5 9 -1. - <_>13 9 5 3 3. - 0 - 3.0235300073400140e-005 - -0.2641330957412720 - 0.0289180800318718 - <_> - - <_> - - - - <_>2 6 5 9 -1. - <_>2 9 5 3 3. - 0 - 1.5345469582825899e-003 - -0.4071195125579834 - 0.0697878375649452 - <_> - - <_> - - - - <_>14 2 6 5 -1. - <_>14 2 3 5 2. - 0 - 6.8222070112824440e-003 - -0.1506972014904022 - 0.2188841998577118 - <_> - - <_> - - - - <_>5 6 6 11 -1. - <_>8 6 3 11 2. - 0 - -9.8558319732546806e-003 - -0.3544136881828308 - 0.0860263928771019 - <_> - - <_> - - - - <_>14 2 6 5 -1. - <_>14 2 3 5 2. - 0 - -0.0298904292285442 - 0.2211744040250778 - -0.0286110099405050 - <_> - - <_> - - - - <_>0 3 10 6 -1. - <_>0 3 5 3 2. - <_>5 6 5 3 2. - 0 - -2.6285760104656219e-003 - 0.0982041805982590 - -0.2714973986148834 - <_> - - <_> - - - - <_>6 12 13 2 -1. - <_>6 13 13 1 2. - 0 - 3.2039839425124228e-004 - -0.0985404625535011 - 0.1878553926944733 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>5 14 10 3 2. - 0 - 1.1079469695687294e-003 - 0.0640345364809036 - -0.4308266937732697 - <_> - - <_> - - - - <_>12 11 8 8 -1. - <_>12 15 8 4 2. - 0 - -0.0915383696556091 - -0.5244092941284180 - 0.0122504895552993 - <_> - - <_> - - - - <_>4 0 12 7 -1. - <_>8 0 4 7 3. - 0 - 0.0432058982551098 - 0.0966558679938316 - -0.2680931091308594 - <_> - - <_> - - - - <_>5 15 13 2 -1. - <_>5 16 13 1 2. - 0 - 9.1920839622616768e-004 - -0.1326016038656235 - 0.1235831975936890 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 12 10 3 2. - <_>10 15 10 3 2. - 0 - 8.9521165937185287e-003 - 0.0864454209804535 - -0.2321943044662476 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 5.6190020404756069e-003 - -0.0603040494024754 - 0.1507066935300827 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 2 12 2 3. - 0 - 3.7380240391939878e-003 - -0.1865254044532776 - 0.1301178038120270 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - -0.0444169603288174 - 0.1903675943613052 - -0.0175271593034267 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - 0.0198327396064997 - -0.0535276308655739 - 0.4023813009262085 - <_> - - <_> - - - - <_>5 6 10 12 -1. - <_>10 6 5 6 2. - <_>5 12 5 6 2. - 0 - 0.0121556101366878 - 0.0912885665893555 - -0.2686276137828827 - <_> - - <_> - - - - <_>1 15 15 4 -1. - <_>1 17 15 2 2. - 0 - 0.0505323410034180 - 0.0312951803207397 - -0.6283653974533081 - <_> - - <_> - - - - <_>10 5 9 6 -1. - <_>10 7 9 2 3. - 0 - -1.7635909607633948e-003 - 0.0561852194368839 - -0.2186100929975510 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 4.9412921071052551e-003 - 0.0559158995747566 - -0.3595438897609711 - <_> - - <_> - - - - <_>10 5 10 6 -1. - <_>10 7 10 2 3. - 0 - -0.1153611987829208 - -0.5316873788833618 - 7.9654296860098839e-003 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -2.0473708864301443e-003 - 0.0796330124139786 - -0.2538990080356598 - <_> - - <_> - - - - <_>8 9 12 4 -1. - <_>12 9 4 4 3. - 0 - 4.7814860008656979e-003 - -0.0941498801112175 - 0.1163100972771645 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - 0.0212749391794205 - -0.0474866107106209 - 0.3756451904773712 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - 5.1177050918340683e-003 - 0.0749366432428360 - -0.2610535025596619 - <_> - - <_> - - - - <_>0 0 4 17 -1. - <_>2 0 2 17 2. - 0 - -0.0139520000666380 - 0.2396017014980316 - -0.0968367680907249 - <_> - - <_> - - - - <_>5 6 12 3 -1. - <_>5 6 6 3 2. - 0 - -0.0138281797990203 - -0.3960526883602142 - 0.0586397498846054 - <_> - - <_> - - - - <_>6 7 3 12 -1. - <_>6 13 3 6 2. - 0 - -0.0471170209348202 - -0.5571753978729248 - 0.0316786505281925 - <_> - - <_> - - - - <_>14 2 6 5 -1. - <_>14 2 3 5 2. - 0 - 0.0105155901983380 - -0.0439305305480957 - 0.0852779597043991 - <_> - - <_> - - - - <_>0 2 6 5 -1. - <_>3 2 3 5 2. - 0 - 4.0591089054942131e-003 - -0.1077421978116036 - 0.1628309935331345 - <_> - - <_> - - - - <_>1 3 18 16 -1. - <_>7 3 6 16 3. - 0 - -0.0303762108087540 - 0.2099737972021103 - -0.0994177907705307 - <_> - - <_> - - - - <_>4 4 11 10 -1. - <_>4 9 11 5 2. - 0 - -6.6932791378349066e-004 - -0.3486334085464478 - 0.0591480210423470 - <_> - - <_> - - - - <_>6 1 13 3 -1. - <_>6 2 13 1 3. - 0 - -0.0146650895476341 - -0.4378654062747955 - 0.0280081797391176 - <_> - - <_> - - - - <_>3 4 8 10 -1. - <_>3 4 4 5 2. - <_>7 9 4 5 2. - 0 - -3.5847770050168037e-003 - 0.0966115370392799 - -0.1794831007719040 - <_> - - <_> - - - - <_>6 7 14 4 -1. - <_>13 7 7 2 2. - <_>6 9 7 2 2. - 0 - -5.5043050087988377e-003 - -0.3354665935039520 - 0.0750578492879868 - <_> - - <_> - - - - <_>1 1 8 6 -1. - <_>1 3 8 2 3. - 0 - 1.0141800157725811e-003 - -0.1860285997390747 - 0.0868800505995750 - <_> - - <_> - - - - <_>15 3 5 9 -1. - <_>15 6 5 3 3. - 0 - 0.0146423997357488 - 0.0266520902514458 - -0.2600268125534058 - <_> - - <_> - - - - <_>0 3 5 9 -1. - <_>0 6 5 3 3. - 0 - -5.8538499288260937e-003 - -0.1499318927526474 - 0.1268464028835297 - <_> - - <_> - - - - <_>14 6 4 14 -1. - <_>16 6 2 7 2. - <_>14 13 2 7 2. - 0 - -0.0534721687436104 - 0.5213112235069275 - -0.0203757490962744 - <_> - - <_> - - - - <_>0 1 6 12 -1. - <_>2 1 2 12 3. - 0 - -0.0766959264874458 - 0.4581707119941711 - -0.0348769500851631 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - -5.9094227617606521e-004 - 0.1157049983739853 - -0.1296696960926056 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - -0.0435433611273766 - -0.8213273286819458 - 0.0205355994403362 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - 0.0506917014718056 - -0.0362806394696236 - 0.4021244943141937 - <_> - - <_> - - - - <_>0 13 18 7 -1. - <_>6 13 6 7 3. - 0 - 0.0131246699020267 - -0.0836142674088478 - 0.2044152021408081 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.3544504940509796 - 0.0145805096253753 - -0.5688369870185852 - <_> - - <_> - - - - <_>0 9 10 11 -1. - <_>5 9 5 11 2. - 0 - -0.0219299104064703 - 0.1636828035116196 - -0.1001854017376900 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0381687395274639 - 0.0353313907980919 - -0.5378261208534241 - <_> - - <_> - - - - <_>5 8 10 12 -1. - <_>5 14 10 6 2. - 0 - 6.3126571476459503e-003 - 0.0561457611620426 - -0.2815802991390228 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - -0.0430026687681675 - -0.6480454206466675 - 0.0174780208617449 - <_> - - <_> - - - - <_>1 10 6 7 -1. - <_>3 10 2 7 3. - 0 - 2.4681850336492062e-003 - -0.1171970963478088 - 0.1369305998086929 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 0.0452612899243832 - 0.0159277506172657 - -0.7191559076309204 - <_> - - <_> - - - - <_>0 7 20 3 -1. - <_>0 8 20 1 3. - 0 - -0.0420671105384827 - -0.6420187950134277 - 0.0201964993029833 - <_> - - <_> - - - - <_>10 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 3.9601750904694200e-004 - -0.3177456855773926 - 0.0768434777855873 - <_> - - <_> - - - - <_>0 6 6 14 -1. - <_>0 6 3 7 2. - <_>3 13 3 7 2. - 0 - -0.0124693196266890 - 0.1953141987323761 - -0.0787992328405380 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - 7.9188523814082146e-003 - 0.0567210800945759 - -0.2690643966197968 - <_> - - <_> - - - - <_>2 1 11 12 -1. - <_>2 7 11 6 2. - 0 - -6.2929331324994564e-003 - 0.1568834036588669 - -0.0992870107293129 - <_> - - <_> - - - - <_>5 0 10 8 -1. - <_>5 4 10 4 2. - 0 - 0.0229741204530001 - -0.0669302269816399 - 0.2442709952592850 - <_> - - <_> - - - - <_>1 5 8 8 -1. - <_>1 5 4 4 2. - <_>5 9 4 4 2. - 0 - -9.1710267588496208e-003 - -0.2907853126525879 - 0.0593120194971561 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0958922728896141 - -0.6370087862014771 - 0.0132787600159645 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 5.6696119718253613e-003 - 0.0561310015618801 - -0.2953512072563171 - <_> - - <_> - - - - <_>16 4 4 16 -1. - <_>18 4 2 8 2. - <_>16 12 2 8 2. - 0 - -0.0134953297674656 - 0.2020577937364578 - -0.0631285831332207 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - 0.0161082390695810 - 0.0450920611619949 - -0.3616381883621216 - <_> - - <_> - - - - <_>6 15 14 4 -1. - <_>13 15 7 2 2. - <_>6 17 7 2 2. - 0 - 1.1768710101023316e-003 - -0.1987991929054260 - 0.1307854056358337 - <_> - - <_> - - - - <_>6 3 4 7 -1. - <_>8 3 2 7 2. - 0 - 1.4128970215097070e-003 - -0.2085608989000320 - 0.0814737081527710 - <_> - - <_> - - - - <_>10 11 5 9 -1. - <_>10 14 5 3 3. - 0 - -0.0430280603468418 - -0.2868754863739014 - 0.0297046601772308 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - -0.0109614096581936 - 0.4884619116783142 - -0.0350027792155743 - <_> - - <_> - - - - <_>10 0 3 14 -1. - <_>11 0 1 14 3. - 0 - -4.5575079275295138e-004 - 0.1064456999301910 - -0.1050634011626244 - <_> - - <_> - - - - <_>6 13 6 7 -1. - <_>8 13 2 7 3. - 0 - -0.0500133298337460 - -0.8203945755958557 - 0.0186044704169035 - <_> - - <_> - - - - <_>10 1 3 13 -1. - <_>11 1 1 13 3. - 0 - -0.0468412004411221 - -0.8697211146354675 - 3.9388639852404594e-003 - <_> - - <_> - - - - <_>7 1 3 13 -1. - <_>8 1 1 13 3. - 0 - -8.0362131120637059e-004 - 0.1419689953327179 - -0.1218411996960640 - <_> - - <_> - - - - <_>5 14 10 6 -1. - <_>10 14 5 3 2. - <_>5 17 5 3 2. - 0 - 0.0198024008423090 - 0.0408579483628273 - -0.3611642122268677 - <_> - - <_> - - - - <_>6 8 8 4 -1. - <_>6 10 8 2 2. - 0 - 0.0218740291893482 - -0.0582306012511253 - 0.2449093014001846 - <_> - - <_> - - - - <_>11 14 8 6 -1. - <_>11 16 8 2 3. - 0 - 0.0323718488216400 - 0.0261722598224878 - -0.4080356955528259 - <_> - - <_> - - - - <_>1 14 8 6 -1. - <_>1 16 8 2 3. - 0 - -7.0319771766662598e-003 - -0.2517513036727905 - 0.0600908100605011 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 2.6019799988716841e-003 - -0.0708278864622116 - 0.2073512971401215 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -3.1531439162790775e-003 - 0.1726828962564468 - -0.1132690012454987 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - 0.0583575516939163 - 0.0146687701344490 - -0.9290723800659180 - <_> - - <_> - - - - <_>2 2 12 6 -1. - <_>2 2 6 3 2. - <_>8 5 6 3 2. - 0 - 3.6941959988325834e-003 - 0.0668120086193085 - -0.2045454978942871 - <_> - - <_> - - - - <_>16 4 4 16 -1. - <_>18 4 2 8 2. - <_>16 12 2 8 2. - 0 - 0.0181837398558855 - -0.0359216593205929 - 0.2376513034105301 - <_> - - <_> - - - - <_>0 8 5 12 -1. - <_>0 12 5 4 3. - 0 - -4.4514648616313934e-003 - -0.1815667003393173 - 0.0800729691982269 - <_> - - <_> - - - - <_>10 10 9 6 -1. - <_>10 12 9 2 3. - 0 - 0.0355540104210377 - 0.0114133097231388 - -0.3950318098068237 - <_> - - <_> - - - - <_>5 2 6 10 -1. - <_>5 2 3 5 2. - <_>8 7 3 5 2. - 0 - 0.0160674992948771 - -0.0491470098495483 - 0.3030670881271362 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0363721884787083 - 0.0236751604825258 - -0.6806926131248474 - <_> - - <_> - - - - <_>6 5 6 8 -1. - <_>8 5 2 8 3. - 0 - -7.4834008701145649e-003 - 0.2414668053388596 - -0.0583017282187939 - <_> - - <_> - - - - <_>11 0 4 14 -1. - <_>11 0 2 14 2. - 0 - -7.2762509807944298e-003 - -0.2237306982278824 - 0.0502845905721188 - <_> - - <_> - - - - <_>5 0 4 14 -1. - <_>7 0 2 14 2. - 0 - -4.7946218401193619e-003 - -0.2192271053791046 - 0.0666982010006905 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0130664398893714 - 0.2260453999042511 - -0.0370374284684658 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.3257338907569647e-003 - -0.0815092399716377 - 0.2327075004577637 - <_> - - <_> - - - - <_>8 3 12 17 -1. - <_>8 3 6 17 2. - 0 - -0.0114362398162484 - 0.0677326917648315 - -0.0330696515738964 - <_> - - <_> - - - - <_>4 6 10 4 -1. - <_>9 6 5 4 2. - 0 - 6.7957569845020771e-003 - 0.0931888595223427 - -0.1854241937398911 - <_> - - <_> - - - - <_>16 4 4 16 -1. - <_>18 4 2 8 2. - <_>16 12 2 8 2. - 0 - -0.0527059286832809 - 0.4070782959461212 - -0.0258465595543385 - <_> - - <_> - - - - <_>0 6 12 14 -1. - <_>6 6 6 14 2. - 0 - 0.1277426928281784 - 0.0172073394060135 - -0.8895267248153687 - <_> - - <_> - - - - <_>12 9 8 10 -1. - <_>12 9 4 10 2. - 0 - -0.2799988090991974 - -0.9196342229843140 - 2.5054879370145500e-004 - <_> - - <_> - - - - <_>0 9 8 10 -1. - <_>4 9 4 10 2. - 0 - 0.0126690203323960 - -0.0731523931026459 - 0.2087228000164032 - <_> - - <_> - - - - <_>13 2 6 18 -1. - <_>13 2 3 18 2. - 0 - -0.0158945992588997 - 0.1126642003655434 - -0.0401405617594719 - <_> - - <_> - - - - <_>1 2 6 18 -1. - <_>4 2 3 18 2. - 0 - 0.0539381690323353 - 0.0301373898983002 - -0.5045430064201355 - <_> - - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 7.3805922875180840e-004 - -0.3592377901077271 - 0.0334184803068638 - <_> - - <_> - - - - <_>0 6 18 9 -1. - <_>0 9 18 3 3. - 0 - 4.7065159305930138e-003 - 0.4419519007205963 - -0.0393960885703564 - <_> - - <_> - - - - <_>5 4 15 3 -1. - <_>5 5 15 1 3. - 0 - 3.0945870094001293e-003 - -0.0712243765592575 - 0.1230626031756401 - <_> - - <_> - - - - <_>0 3 19 15 -1. - <_>0 8 19 5 3. - 0 - -0.0326400399208069 - -0.4464471936225891 - 0.0345098301768303 - <_> - - <_> - - - - <_>10 10 9 6 -1. - <_>10 12 9 2 3. - 0 - -7.8390557318925858e-003 - -0.0998955965042114 - 0.0334918797016144 - <_> - - <_> - - - - <_>1 10 9 6 -1. - <_>1 12 9 2 3. - 0 - 7.6504289172589779e-003 - 0.0551073402166367 - -0.2400210946798325 - <_> - - <_> - - - - <_>5 12 13 3 -1. - <_>5 13 13 1 3. - 0 - 3.8153179921209812e-003 - -0.0571435205638409 - 0.1712068021297455 - <_> - - <_> - - - - <_>0 4 4 16 -1. - <_>0 4 2 8 2. - <_>2 12 2 8 2. - 0 - 0.0142953498288989 - -0.0557476617395878 - 0.2671900987625122 - <_> - - <_> - - - - <_>10 10 5 6 -1. - <_>10 13 5 3 2. - 0 - -1.8241480574943125e-004 - 0.0473623797297478 - -0.2147321999073029 - <_> - - <_> - - - - <_>0 10 20 8 -1. - <_>0 14 20 4 2. - 0 - -0.0319164805114269 - -0.1439830064773560 - 0.0925263091921806 - <_> - - <_> - - - - <_>14 0 6 7 -1. - <_>16 0 2 7 3. - 0 - -7.6755490154027939e-003 - 0.1251308023929596 - -0.0528555810451508 - <_> - - <_> - - - - <_>0 0 6 7 -1. - <_>2 0 2 7 3. - 0 - 0.0141521096229553 - -0.0581989996135235 - 0.2444438040256500 - <_> - - <_> - - - - <_>13 0 3 19 -1. - <_>14 0 1 19 3. - 0 - -0.0167010594159365 - -0.3026933968067169 - 0.0257134698331356 - <_> - - <_> - - - - <_>0 2 8 4 -1. - <_>4 2 4 4 2. - 0 - 3.5869849380105734e-003 - -0.1199979037046433 - 0.1246884018182755 - <_> - - <_> - - - - <_>12 12 7 6 -1. - <_>12 14 7 2 3. - 0 - 3.7683059927076101e-003 - 0.0502713508903980 - -0.2047702968120575 - <_> - - <_> - - - - <_>6 11 7 6 -1. - <_>6 13 7 2 3. - 0 - 9.9043175578117371e-004 - -0.0854138508439064 - 0.1631623953580856 - <_> - - <_> - - - - <_>10 10 5 6 -1. - <_>10 13 5 3 2. - 0 - 9.3151312321424484e-003 - 9.4177378341555595e-003 - -0.3520910143852234 - <_> - - <_> - - - - <_>3 10 6 9 -1. - <_>3 13 6 3 3. - 0 - -1.5002860163804144e-004 - 0.0834809765219688 - -0.1704777926206589 - <_> - - <_> - - - - <_>13 5 4 14 -1. - <_>15 5 2 7 2. - <_>13 12 2 7 2. - 0 - 8.7790598627179861e-004 - -0.1105471998453140 - 0.1175082027912140 - <_> - - <_> - - - - <_>3 5 10 9 -1. - <_>3 8 10 3 3. - 0 - -0.0376302711665630 - 0.5032584071159363 - -0.0261650606989861 - <_> - - <_> - - - - <_>2 15 18 4 -1. - <_>2 17 18 2 2. - 0 - 5.6488867849111557e-003 - 0.0747132375836372 - -0.1405851989984512 - <_> - - <_> - - - - <_>0 4 8 6 -1. - <_>0 6 8 2 3. - 0 - -1.4621330192312598e-003 - 0.0674653276801109 - -0.2014323025941849 - <_> - - <_> - - - - <_>4 5 13 2 -1. - <_>4 6 13 1 2. - 0 - 5.3189881145954132e-003 - -0.0359979383647442 - 0.3737648129463196 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 0.0210195202380419 - 0.0270638093352318 - -0.5019965767860413 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 14 20 2 3. - 0 - -0.1132896989583969 - -0.7439544200897217 - 0.0137780895456672 - <_> - - <_> - - - - <_>0 10 6 8 -1. - <_>3 10 3 8 2. - 0 - -6.1144838109612465e-003 - 0.1404484063386917 - -0.0879396721720696 - <_> - - <_> - - - - <_>4 8 15 3 -1. - <_>9 8 5 3 3. - 0 - -7.7648349106311798e-003 - -0.1434164047241211 - 0.0430610999464989 - <_> - - <_> - - - - <_>1 9 9 6 -1. - <_>4 9 3 6 3. - 0 - -0.0913359969854355 - -0.6324607133865356 - 0.0209029503166676 - <_> - - <_> - - - - <_>2 0 16 14 -1. - <_>10 0 8 7 2. - <_>2 7 8 7 2. - 0 - -0.1633961051702499 - -0.7707108855247498 - 0.0136276902630925 - <_> - - <_> - - - - <_>3 0 14 18 -1. - <_>3 9 14 9 2. - 0 - 0.5300452113151550 - 0.0122928302735090 - -0.7970852255821228 - <_> - - <_> - - - - <_>9 7 6 10 -1. - <_>12 7 3 5 2. - <_>9 12 3 5 2. - 0 - -3.0609068926423788e-003 - 0.0574785284698009 - -0.0886268168687820 - <_> - - <_> - - - - <_>3 4 4 16 -1. - <_>3 4 2 8 2. - <_>5 12 2 8 2. - 0 - 1.3204859569668770e-003 - -0.1047393977642059 - 0.1241632029414177 - <_> - - <_> - - - - <_>12 14 8 6 -1. - <_>12 16 8 2 3. - 0 - -0.0660451278090477 - -0.7040370106697083 - 7.2672651149332523e-003 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - 5.2080051973462105e-003 - 0.0732894167304039 - -0.1610578000545502 - -1.7121059894561768 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -0.0240407008677721 - 0.2431855946779251 - -0.3818928897380829 - <_> - - <_> - - - - <_>1 0 18 10 -1. - <_>7 0 6 10 3. - 0 - 0.2637419104576111 - -0.2509114146232605 - 0.2723194062709808 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 3.3161949831992388e-003 - -0.2811537086963654 - 0.2297758013010025 - <_> - - <_> - - - - <_>13 4 3 15 -1. - <_>13 9 3 5 3. - 0 - 2.5751669891178608e-003 - -0.6481587886810303 - 0.0830493271350861 - <_> - - <_> - - - - <_>4 4 3 15 -1. - <_>4 9 3 5 3. - 0 - 0.0128431497141719 - -0.5438807010650635 - 0.0863045528531075 - <_> - - <_> - - - - <_>14 3 6 5 -1. - <_>14 3 3 5 2. - 0 - 0.0130053600296378 - -0.2641158998012543 - 0.2210787981748581 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0263040605932474 - -0.2227616012096405 - 0.2245862931013107 - <_> - - <_> - - - - <_>14 2 6 7 -1. - <_>14 2 3 7 2. - 0 - -0.0688879936933517 - 0.4467779099941254 - -0.0183987505733967 - <_> - - <_> - - - - <_>0 2 6 7 -1. - <_>3 2 3 7 2. - 0 - 0.0158644001930952 - -0.3353232145309448 - 0.1638062000274658 - <_> - - <_> - - - - <_>11 6 8 8 -1. - <_>15 6 4 4 2. - <_>11 10 4 4 2. - 0 - -7.1481592021882534e-003 - -0.3599945902824402 - 0.1067965030670166 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - -0.0120021300390363 - -0.3749858140945435 - 0.0967593491077423 - <_> - - <_> - - - - <_>5 9 13 3 -1. - <_>5 10 13 1 3. - 0 - -2.6663220487535000e-003 - -0.3894163966178894 - 0.0597763918340206 - <_> - - <_> - - - - <_>0 8 15 3 -1. - <_>0 9 15 1 3. - 0 - 5.2618351764976978e-004 - -0.3055751025676727 - 0.1077807024121285 - <_> - - <_> - - - - <_>11 5 4 12 -1. - <_>11 11 4 6 2. - 0 - -0.0407057218253613 - -0.5857294797897339 - 0.0406608581542969 - <_> - - <_> - - - - <_>2 11 13 3 -1. - <_>2 12 13 1 3. - 0 - -8.7929163128137589e-003 - 0.2369941025972366 - -0.1382753998041153 - <_> - - <_> - - - - <_>2 1 16 2 -1. - <_>2 2 16 1 2. - 0 - -2.2475840523838997e-003 - -0.3547531962394714 - 0.0890797823667526 - <_> - - <_> - - - - <_>5 6 8 10 -1. - <_>5 6 4 5 2. - <_>9 11 4 5 2. - 0 - 5.8501982130110264e-003 - 0.0916956365108490 - -0.3332979977130890 - <_> - - <_> - - - - <_>8 8 10 12 -1. - <_>13 8 5 6 2. - <_>8 14 5 6 2. - 0 - -3.9623910561203957e-003 - -0.1984574049711227 - 0.1236386969685555 - <_> - - <_> - - - - <_>3 10 6 6 -1. - <_>3 13 6 3 2. - 0 - -1.7685770289972425e-003 - 0.0736848115921021 - -0.4586252868175507 - <_> - - <_> - - - - <_>1 5 18 8 -1. - <_>10 5 9 4 2. - <_>1 9 9 4 2. - 0 - 0.0633038803935051 - 0.0486901514232159 - -0.5730131864547730 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 7.9875197261571884e-003 - -0.8107230067253113 - 0.0270544104278088 - <_> - - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -0.0135204000398517 - 0.1627480983734131 - -0.1684186011552811 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0481396093964577 - 0.0452342182397842 - -0.5730023980140686 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - 5.0355647690594196e-003 - 0.0652255117893219 - -0.2585661113262177 - <_> - - <_> - - - - <_>5 9 4 7 -1. - <_>7 9 2 7 2. - 0 - 1.9625260028988123e-004 - 0.1422155052423477 - -0.1848151981830597 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>7 9 6 3 3. - 0 - 2.5747891049832106e-003 - -0.3590430021286011 - 0.0756635069847107 - <_> - - <_> - - - - <_>2 6 8 14 -1. - <_>2 6 4 7 2. - <_>6 13 4 7 2. - 0 - -4.0524629876017570e-003 - -0.2121212929487228 - 0.1184021010994911 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0569202601909637 - -0.0436572991311550 - 0.3877460062503815 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0379869900643826 - -0.0817063301801682 - 0.3952980041503906 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0227315295487642 - -0.3469341993331909 - 0.0684385672211647 - <_> - - <_> - - - - <_>6 0 4 9 -1. - <_>8 0 2 9 2. - 0 - 9.9069473799318075e-004 - -0.3668186962604523 - 0.0610366500914097 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -4.3086782097816467e-003 - 0.1436198055744171 - -0.0961600765585899 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -0.0252022091299295 - -0.4610934853553772 - 0.0594206601381302 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -0.0335977189242840 - -0.4712752103805542 - 9.6356319263577461e-003 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -4.6891071833670139e-003 - 0.1967620998620987 - -0.1185335963964462 - <_> - - <_> - - - - <_>9 1 3 13 -1. - <_>10 1 1 13 3. - 0 - 0.0245499201118946 - -0.0455425903201103 - 0.2871705889701843 - <_> - - <_> - - - - <_>0 9 13 2 -1. - <_>0 10 13 1 2. - 0 - -1.8802500562742352e-003 - -0.2989243865013123 - 0.0801998898386955 - <_> - - <_> - - - - <_>7 3 13 16 -1. - <_>7 11 13 8 2. - 0 - 0.2016099989414215 - 0.0305025801062584 - -0.4841420948505402 - <_> - - <_> - - - - <_>0 3 5 9 -1. - <_>0 6 5 3 3. - 0 - -0.0698039531707764 - -0.6238281130790710 - 0.0351806618273258 - <_> - - <_> - - - - <_>11 1 7 6 -1. - <_>11 3 7 2 3. - 0 - 9.1318902559578419e-004 - -0.1993506997823715 - 0.0682703480124474 - <_> - - <_> - - - - <_>1 1 16 4 -1. - <_>1 1 8 2 2. - <_>9 3 8 2 2. - 0 - 0.0145789599046111 - 0.1006335988640785 - -0.2535313069820404 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>10 2 10 3 2. - <_>0 5 10 3 2. - 0 - 0.0501303486526012 - 0.0571921095252037 - -0.4162805974483490 - <_> - - <_> - - - - <_>0 4 19 10 -1. - <_>0 9 19 5 2. - 0 - -0.0180481094866991 - -0.4457265138626099 - 0.0503994897007942 - <_> - - <_> - - - - <_>4 6 15 5 -1. - <_>9 6 5 5 3. - 0 - 0.1481816023588181 - 0.0167796108871698 - -0.4581047892570496 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -0.0262859500944614 - 0.3544262051582336 - -0.0611844286322594 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0184141099452972 - -0.3213210999965668 - 0.0761481523513794 - <_> - - <_> - - - - <_>1 12 9 8 -1. - <_>1 16 9 4 2. - 0 - 6.1610070988535881e-003 - 0.0879460796713829 - -0.2591320872306824 - <_> - - <_> - - - - <_>3 5 14 3 -1. - <_>3 6 14 1 3. - 0 - -0.0259001608937979 - 0.3068143129348755 - -0.0656004101037979 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 0.0150148998945951 - -0.0560769699513912 - 0.3866142928600311 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -0.0431121587753296 - 0.5592610836029053 - -0.0392326302826405 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>3 11 7 2 2. - <_>10 13 7 2 2. - 0 - -0.0214851703494787 - -0.4638487100601196 - 0.0482646189630032 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>10 11 7 2 2. - <_>3 13 7 2 2. - 0 - -0.0251317899674177 - -0.4809173941612244 - 0.0413461700081825 - <_> - - <_> - - - - <_>2 5 14 6 -1. - <_>2 7 14 2 3. - 0 - 4.1451459401287138e-004 - 0.0446918308734894 - -0.4217401146888733 - <_> - - <_> - - - - <_>11 15 9 4 -1. - <_>11 17 9 2 2. - 0 - 0.0102185700088739 - 0.0537444800138474 - -0.1939547955989838 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -0.0203427001833916 - 0.2972249984741211 - -0.0712975636124611 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - -0.0306660495698452 - -0.3992078006267548 - 0.0455109812319279 - <_> - - <_> - - - - <_>1 13 7 6 -1. - <_>1 15 7 2 3. - 0 - -0.0327674411237240 - -0.5024853944778442 - 0.0448886081576347 - <_> - - <_> - - - - <_>0 16 20 4 -1. - <_>0 18 20 2 2. - 0 - -0.0543650016188622 - -0.4775117039680481 - 0.0418824702501297 - <_> - - <_> - - - - <_>0 14 12 6 -1. - <_>0 14 6 3 2. - <_>6 17 6 3 2. - 0 - -0.0299163591116667 - 0.3579361140727997 - -0.0618319399654865 - <_> - - <_> - - - - <_>4 6 15 5 -1. - <_>9 6 5 5 3. - 0 - 0.0101441796869040 - -0.1579091995954514 - 0.0573733597993851 - <_> - - <_> - - - - <_>1 6 15 5 -1. - <_>6 6 5 5 3. - 0 - 0.1563901007175446 - 0.0329497009515762 - -0.6446223258972168 - <_> - - <_> - - - - <_>11 5 6 9 -1. - <_>11 8 6 3 3. - 0 - 0.0544479787349701 - -0.0415080599486828 - 0.1286668926477432 - <_> - - <_> - - - - <_>5 0 6 8 -1. - <_>7 0 2 8 3. - 0 - -0.0397727191448212 - -0.6896231770515442 - 0.0290465708822012 - <_> - - <_> - - - - <_>5 17 13 3 -1. - <_>5 18 13 1 3. - 0 - 6.9650667719542980e-003 - -0.0947616770863533 - 0.1825713068246841 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0516174286603928 - -0.4490728974342346 - 0.0439131408929825 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -0.0268146097660065 - -0.2256883978843689 - 0.0549280717968941 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0131819201633334 - 0.0801019072532654 - -0.2867330014705658 - <_> - - <_> - - - - <_>5 3 14 3 -1. - <_>5 4 14 1 3. - 0 - 0.0142415901646018 - -0.0842644125223160 - 0.2100073993206024 - <_> - - <_> - - - - <_>6 9 6 5 -1. - <_>9 9 3 5 2. - 0 - 3.1410539522767067e-003 - 0.1325756013393402 - -0.1561053991317749 - <_> - - <_> - - - - <_>12 6 8 5 -1. - <_>12 6 4 5 2. - 0 - 0.1099515035748482 - 0.0123882703483105 - -0.4030236899852753 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - 0.0178458504378796 - 0.0528702288866043 - -0.3793024122714996 - <_> - - <_> - - - - <_>4 14 13 2 -1. - <_>4 15 13 1 2. - 0 - 0.0108519904315472 - -0.0540712587535381 - 0.3518624007701874 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - -0.0259582009166479 - 0.4197835028171539 - -0.0404774285852909 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>6 13 8 4 2. - 0 - 4.0990379638969898e-003 - 0.0509112887084484 - -0.3597494959831238 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - 0.0149098401889205 - -0.0614372305572033 - 0.2894755005836487 - <_> - - <_> - - - - <_>9 3 3 10 -1. - <_>9 8 3 5 2. - 0 - 4.0265037678182125e-003 - 0.1068639978766441 - -0.1297968029975891 - <_> - - <_> - - - - <_>4 0 12 20 -1. - <_>10 0 6 20 2. - 0 - 0.3949568867683411 - -0.0289205592125654 - 0.6353526711463928 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>13 12 3 6 2. - 0 - 0.0128743797540665 - -0.1191041022539139 - 0.1206843033432961 - <_> - - <_> - - - - <_>3 2 12 4 -1. - <_>9 2 6 4 2. - 0 - -0.0485981814563274 - 0.4688569009304047 - -0.0427972897887230 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 1.5357979573309422e-003 - -0.3088226914405823 - 0.0631548315286636 - <_> - - <_> - - - - <_>6 4 2 13 -1. - <_>7 4 1 13 2. - 0 - 3.5379750188440084e-003 - 0.1013244986534119 - -0.1772640049457550 - <_> - - <_> - - - - <_>13 4 4 12 -1. - <_>13 4 2 12 2. - 0 - -0.0194412209093571 - 0.2325439006090164 - -0.0537322685122490 - <_> - - <_> - - - - <_>0 9 12 3 -1. - <_>6 9 6 3 2. - 0 - 2.5940369814634323e-003 - -0.3568229973316193 - 0.0505988597869873 - <_> - - <_> - - - - <_>13 4 4 12 -1. - <_>13 4 2 12 2. - 0 - 0.0599103793501854 - -0.0240308698266745 - 0.1700322031974793 - <_> - - <_> - - - - <_>3 4 4 12 -1. - <_>5 4 2 12 2. - 0 - -0.0111817596480250 - 0.3486950099468231 - -0.0628124177455902 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 4.9201812362298369e-004 - -0.1264290958642960 - 0.0365038998425007 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.0679021775722504 - -0.4288708865642548 - 0.0463369116187096 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - 0.0157288294285536 - -0.0630289465188980 - 0.1627576947212219 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - -0.0148243904113770 - -0.5339167714118958 - 0.0321326218545437 - <_> - - <_> - - - - <_>7 15 13 3 -1. - <_>7 16 13 1 3. - 0 - -0.0197062604129314 - 0.2545562982559204 - -0.0308166500180960 - <_> - - <_> - - - - <_>0 2 18 4 -1. - <_>0 2 9 2 2. - <_>9 4 9 2 2. - 0 - 9.6607124432921410e-003 - 0.0926743522286415 - -0.1794023960828781 - <_> - - <_> - - - - <_>12 6 8 5 -1. - <_>12 6 4 5 2. - 0 - -0.0499294213950634 - 0.2674334049224854 - -0.0255951192229986 - <_> - - <_> - - - - <_>5 0 10 8 -1. - <_>5 4 10 4 2. - 0 - 0.0734596401453018 - -0.0586989596486092 - 0.2889882922172546 - <_> - - <_> - - - - <_>9 0 10 6 -1. - <_>9 2 10 2 3. - 0 - -8.6538150208070874e-004 - -0.1431846022605896 - 0.0653861835598946 - <_> - - <_> - - - - <_>3 0 14 3 -1. - <_>3 1 14 1 3. - 0 - -0.0104622198268771 - -0.3249850869178772 - 0.0549553185701370 - <_> - - <_> - - - - <_>12 6 8 5 -1. - <_>12 6 4 5 2. - 0 - -6.3478751108050346e-003 - -0.1039637029170990 - 0.0403214097023010 - <_> - - <_> - - - - <_>0 6 8 5 -1. - <_>4 6 4 5 2. - 0 - 0.1140640005469322 - 0.0261920392513275 - -0.6617791056632996 - <_> - - <_> - - - - <_>11 15 7 4 -1. - <_>11 17 7 2 2. - 0 - -0.0268937703222036 - -0.3533869981765747 - 0.0197535902261734 - <_> - - <_> - - - - <_>4 2 9 5 -1. - <_>7 2 3 5 3. - 0 - 0.0806009620428085 - 0.0288784801959991 - -0.5497518777847290 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - -0.0746769607067108 - -0.3441605865955353 - 0.0269907191395760 - <_> - - <_> - - - - <_>5 3 10 6 -1. - <_>5 5 10 2 3. - 0 - -0.0770040899515152 - 0.4004569947719574 - -0.0453402698040009 - <_> - - <_> - - - - <_>8 4 6 14 -1. - <_>8 11 6 7 2. - 0 - -0.0869204774498940 - -0.3468702137470245 - 0.0391959808766842 - <_> - - <_> - - - - <_>1 5 9 6 -1. - <_>1 7 9 2 3. - 0 - -4.3200692161917686e-003 - 0.0759325698018074 - -0.2372065037488937 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0341277606785297 - -0.4199472069740295 - 0.0436338707804680 - <_> - - <_> - - - - <_>8 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 0.0218453705310822 - -0.0586817003786564 - 0.3297267854213715 - <_> - - <_> - - - - <_>0 4 20 12 -1. - <_>10 4 10 6 2. - <_>0 10 10 6 2. - 0 - 0.1003722995519638 - 0.0425072088837624 - -0.4336608052253723 - -1.8098859786987305 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>5 4 7 4 -1. - <_>5 6 7 2 2. - 0 - -2.8922120109200478e-003 - 0.1438132971525192 - -0.4089652001857758 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -3.2057950738817453e-003 - -0.3347241878509522 - 0.1283469051122665 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>8 12 3 6 2. - 0 - -1.4795559764024802e-005 - 0.1013917028903961 - -0.4468091130256653 - <_> - - <_> - - - - <_>3 0 14 2 -1. - <_>3 1 14 1 2. - 0 - 3.7529919063672423e-004 - -0.2860493063926697 - 0.1535784006118774 - <_> - - <_> - - - - <_>7 7 6 13 -1. - <_>9 7 2 13 3. - 0 - 4.9170467536896467e-004 - -0.2840496003627777 - 0.1316390037536621 - <_> - - <_> - - - - <_>3 4 16 12 -1. - <_>11 4 8 6 2. - <_>3 10 8 6 2. - 0 - 0.0164173804223537 - 0.0799011066555977 - -0.2809281945228577 - <_> - - <_> - - - - <_>1 4 16 12 -1. - <_>1 4 8 6 2. - <_>9 10 8 6 2. - 0 - 0.0101198600605130 - 0.1002686992287636 - -0.4093256890773773 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>7 10 6 5 2. - 0 - -6.5251751802861691e-003 - -0.3310171067714691 - 0.0960446298122406 - <_> - - <_> - - - - <_>3 6 5 9 -1. - <_>3 9 5 3 3. - 0 - 6.1215078458189964e-003 - -0.3548310101032257 - 0.0843099206686020 - <_> - - <_> - - - - <_>6 3 14 4 -1. - <_>13 3 7 2 2. - <_>6 5 7 2 2. - 0 - 2.5817379355430603e-003 - 0.0833843573927879 - -0.2803170979022980 - <_> - - <_> - - - - <_>3 18 13 2 -1. - <_>3 19 13 1 2. - 0 - -1.3406439684331417e-003 - 0.1508380025625229 - -0.1494652032852173 - <_> - - <_> - - - - <_>4 10 16 4 -1. - <_>12 10 8 2 2. - <_>4 12 8 2 2. - 0 - 3.3681320492178202e-003 - 0.0421127006411552 - -0.2230971008539200 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 2.8937528841197491e-003 - 0.0829538106918335 - -0.2915230989456177 - <_> - - <_> - - - - <_>12 12 7 6 -1. - <_>12 14 7 2 3. - 0 - 3.3696501050144434e-003 - 0.0485485494136810 - -0.1954278051853180 - <_> - - <_> - - - - <_>0 0 4 11 -1. - <_>2 0 2 11 2. - 0 - -0.0715388804674149 - 0.5200868248939514 - -0.0426444411277771 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>14 0 3 9 2. - 0 - 7.6072360388934612e-003 - -0.0852086618542671 - 0.1152331009507179 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 1.9313229713588953e-003 - 0.0893573984503746 - -0.2361434996128082 - <_> - - <_> - - - - <_>6 12 13 2 -1. - <_>6 13 13 1 2. - 0 - 9.0475968318060040e-004 - -0.0774085894227028 - 0.1682958006858826 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>3 0 3 9 2. - 0 - 0.0111036701127887 - -0.0959639772772789 - 0.2039172053337097 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - -3.1021970789879560e-003 - -0.3860571980476379 - 0.0463297218084335 - <_> - - <_> - - - - <_>5 5 3 10 -1. - <_>5 10 3 5 2. - 0 - 1.1446890421211720e-003 - -0.2830668985843658 - 0.0589782111346722 - <_> - - <_> - - - - <_>1 5 18 8 -1. - <_>10 5 9 4 2. - <_>1 9 9 4 2. - 0 - 7.7077788300812244e-003 - 0.1047424972057343 - -0.1714607030153275 - <_> - - <_> - - - - <_>4 2 10 6 -1. - <_>4 4 10 2 3. - 0 - 0.0498937107622623 - -0.0646926015615463 - 0.3014095127582550 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>10 0 4 6 2. - <_>6 6 4 6 2. - 0 - -0.0149378199130297 - -0.2785437107086182 - 0.0708954706788063 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>7 6 2 7 3. - 0 - -2.5303829461336136e-003 - 0.1210851967334747 - -0.1463529020547867 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - 0.0286112595349550 - -0.0503575317561626 - 0.4065187871456146 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0362440608441830 - 0.0445772185921669 - -0.5623428821563721 - <_> - - <_> - - - - <_>9 4 6 10 -1. - <_>12 4 3 5 2. - <_>9 9 3 5 2. - 0 - -3.0544339679181576e-003 - 0.1152698993682861 - -0.2737109065055847 - <_> - - <_> - - - - <_>0 8 19 3 -1. - <_>0 9 19 1 3. - 0 - -1.3101019430905581e-003 - -0.2679800093173981 - 0.0597266517579556 - <_> - - <_> - - - - <_>1 10 18 3 -1. - <_>1 11 18 1 3. - 0 - 1.0702989529818296e-003 - -0.1543941050767899 - 0.1120698973536491 - <_> - - <_> - - - - <_>5 1 3 13 -1. - <_>6 1 1 13 3. - 0 - -0.0234671607613564 - -0.6242492198944092 - 0.0260104797780514 - <_> - - <_> - - - - <_>12 11 8 9 -1. - <_>12 11 4 9 2. - 0 - -0.0227877497673035 - 0.1790398955345154 - -0.0682308524847031 - <_> - - <_> - - - - <_>5 0 3 20 -1. - <_>6 0 1 20 3. - 0 - 7.5017688795924187e-003 - 0.0526371784508228 - -0.3333347141742706 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 0.0138810900971293 - 0.0651188865303993 - -0.2415271997451782 - <_> - - <_> - - - - <_>0 1 4 14 -1. - <_>2 1 2 14 2. - 0 - -8.7769115343689919e-003 - 0.1992519050836563 - -0.0880632326006889 - <_> - - <_> - - - - <_>0 1 20 4 -1. - <_>10 1 10 2 2. - <_>0 3 10 2 2. - 0 - 0.0265235602855682 - 0.0465747788548470 - -0.3655050992965698 - <_> - - <_> - - - - <_>0 1 6 12 -1. - <_>2 1 2 12 3. - 0 - 7.2263809852302074e-003 - -0.1080685034394264 - 0.1513179987668991 - <_> - - <_> - - - - <_>11 0 6 6 -1. - <_>11 0 3 6 2. - 0 - 2.3426050320267677e-003 - -0.1507292985916138 - 0.0999450236558914 - <_> - - <_> - - - - <_>6 10 4 8 -1. - <_>6 14 4 4 2. - 0 - -2.8811080483137630e-005 - 0.0614130385220051 - -0.2434443980455399 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>7 1 13 1 3. - 0 - -0.0139119001105428 - -0.3101083934307098 - 0.0248958505690098 - <_> - - <_> - - - - <_>0 0 13 3 -1. - <_>0 1 13 1 3. - 0 - 0.0247687809169292 - 0.0232180301100016 - -0.6507102847099304 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 7 10 2 3. - 0 - -6.0916407965123653e-003 - 0.0597684904932976 - -0.2536034882068634 - <_> - - <_> - - - - <_>4 5 4 14 -1. - <_>4 5 2 7 2. - <_>6 12 2 7 2. - 0 - -9.7264908254146576e-003 - -0.2558444142341614 - 0.0555546209216118 - <_> - - <_> - - - - <_>11 0 6 6 -1. - <_>11 0 3 6 2. - 0 - 0.0974990427494049 - 5.3867488168179989e-003 - -0.7356767058372498 - <_> - - <_> - - - - <_>3 0 6 6 -1. - <_>6 0 3 6 2. - 0 - 3.0411418993026018e-003 - -0.1375921070575714 - 0.1214364990592003 - <_> - - <_> - - - - <_>1 0 18 7 -1. - <_>7 0 6 7 3. - 0 - 2.7967148926109076e-003 - 0.1804866045713425 - -0.0845270007848740 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - 0.0107072796672583 - -0.0439708605408669 - 0.3104200959205627 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - 1.7561139538884163e-003 - 0.0518668405711651 - -0.2276871055364609 - <_> - - <_> - - - - <_>2 6 14 9 -1. - <_>2 9 14 3 3. - 0 - -3.0384738929569721e-003 - 0.7165204286575317 - -0.0224659293889999 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - -0.0941614806652069 - -0.7933856248855591 - 0.0131174903362989 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - -0.0238690096884966 - 0.4933817982673645 - -0.0321690216660500 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - -0.0399585887789726 - -0.1891476958990097 - 0.0285007003694773 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 6.9391070865094662e-003 - 0.0397772118449211 - -0.3910590112209320 - <_> - - <_> - - - - <_>1 14 18 4 -1. - <_>10 14 9 2 2. - <_>1 16 9 2 2. - 0 - -0.0335967801511288 - -0.5683007240295410 - 0.0216185096651316 - <_> - - <_> - - - - <_>2 8 15 6 -1. - <_>7 8 5 6 3. - 0 - -0.1407984048128128 - -0.7901437282562256 - 0.0148846097290516 - <_> - - <_> - - - - <_>16 2 4 8 -1. - <_>16 6 4 4 2. - 0 - -5.7346289977431297e-003 - -0.1551263928413391 - 0.0428795702755451 - <_> - - <_> - - - - <_>0 1 8 8 -1. - <_>0 1 4 4 2. - <_>4 5 4 4 2. - 0 - -0.0528418309986591 - 0.3082383871078491 - -0.0507096908986568 - <_> - - <_> - - - - <_>7 3 8 4 -1. - <_>7 5 8 2 2. - 0 - 0.0152070997282863 - -0.0257897693663836 - 0.3329232037067413 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - -5.8392022037878633e-004 - 0.0889003872871399 - -0.1629794985055924 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>10 12 7 2 2. - <_>3 14 7 2 2. - 0 - -3.3715530298650265e-003 - -0.1789022982120514 - 0.0753766074776649 - <_> - - <_> - - - - <_>4 9 8 5 -1. - <_>8 9 4 5 2. - 0 - -1.2047060299664736e-003 - 0.1049197018146515 - -0.1297073960304260 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0552764795720577 - -0.0431975089013577 - 0.3721202909946442 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0393306091427803 - 0.0304163992404938 - -0.4907610118389130 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 4 2. - 0 - -9.7229599487036467e-004 - -0.2189545929431915 - 0.0390327088534832 - <_> - - <_> - - - - <_>2 2 15 7 -1. - <_>7 2 5 7 3. - 0 - -0.0560480691492558 - 0.4163256883621216 - -0.0337473116815090 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 0.0713767409324646 - 0.0121292099356651 - -0.6481407880783081 - <_> - - <_> - - - - <_>4 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 1.4940260443836451e-003 - -0.2139361053705216 - 0.0848872214555740 - <_> - - <_> - - - - <_>7 1 7 12 -1. - <_>7 7 7 6 2. - 0 - -3.2299170270562172e-003 - 0.0907924324274063 - -0.0958160534501076 - <_> - - <_> - - - - <_>4 0 12 10 -1. - <_>4 5 12 5 2. - 0 - 0.0421828702092171 - -0.0669144019484520 - 0.2521761953830719 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - -6.5001910552382469e-003 - -0.1214955970644951 - 0.0373679883778095 - <_> - - <_> - - - - <_>0 1 5 6 -1. - <_>0 4 5 3 2. - 0 - 0.0194571297615767 - 0.0501637794077396 - -0.2870037853717804 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0372913889586926 - 0.0296084396541119 - -0.5722249746322632 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0255715195089579 - 0.4394184947013855 - -0.0365323089063168 - <_> - - <_> - - - - <_>12 2 2 14 -1. - <_>12 2 1 14 2. - 0 - -7.9122912138700485e-003 - -0.2961851060390472 - 0.0354832708835602 - <_> - - <_> - - - - <_>0 15 14 4 -1. - <_>0 15 7 2 2. - <_>7 17 7 2 2. - 0 - 3.0267490074038506e-003 - -0.1211377978324890 - 0.1127142012119293 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0210358202457428 - 0.2920606136322022 - -0.0310014896094799 - <_> - - <_> - - - - <_>6 2 2 14 -1. - <_>7 2 1 14 2. - 0 - -0.0129114203155041 - -0.5419433116912842 - 0.0267562400549650 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - 0.0550960712134838 - 8.4169982001185417e-003 - -0.6287345886230469 - <_> - - <_> - - - - <_>0 6 14 4 -1. - <_>0 6 7 2 2. - <_>7 8 7 2 2. - 0 - -6.3893562182784081e-003 - -0.2078483998775482 - 0.0604367889463902 - <_> - - <_> - - - - <_>12 11 8 9 -1. - <_>12 11 4 9 2. - 0 - 0.0108587602153420 - -0.0784972533583641 - 0.1295799016952515 - <_> - - <_> - - - - <_>0 11 8 9 -1. - <_>4 11 4 9 2. - 0 - -0.0158596206456423 - 0.1577291041612625 - -0.1014351025223732 - <_> - - <_> - - - - <_>7 1 12 18 -1. - <_>11 1 4 18 3. - 0 - 0.1520387977361679 - 0.0217213202267885 - -0.3171314001083374 - <_> - - <_> - - - - <_>1 1 12 18 -1. - <_>5 1 4 18 3. - 0 - 0.0179420392960310 - -0.0848169326782227 - 0.1769730001688004 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 8.8212518021464348e-003 - 0.0518006011843681 - -0.2144360989332199 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0157152898609638 - 0.0425258204340935 - -0.3227834105491638 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>8 6 4 5 2. - 0 - -2.4744209367781878e-003 - 0.1082855015993118 - -0.1295306980609894 - <_> - - <_> - - - - <_>6 3 7 6 -1. - <_>6 5 7 2 3. - 0 - 0.0125975301489234 - -0.0602517016232014 - 0.2751215100288391 - <_> - - <_> - - - - <_>5 5 13 8 -1. - <_>5 9 13 4 2. - 0 - -1.0955630568787456e-003 - -0.5424407124519348 - 0.0281664393842220 - <_> - - <_> - - - - <_>1 2 14 2 -1. - <_>1 3 14 1 2. - 0 - -1.4035019557923079e-003 - -0.2362516969442368 - 0.0618872493505478 - <_> - - <_> - - - - <_>15 4 5 9 -1. - <_>15 7 5 3 3. - 0 - -0.0772945433855057 - -0.5214198231697083 - 0.0118441497907043 - <_> - - <_> - - - - <_>0 4 5 9 -1. - <_>0 7 5 3 3. - 0 - -0.0754421576857567 - -0.7158880233764648 - 0.0171514190733433 - <_> - - <_> - - - - <_>7 1 8 8 -1. - <_>7 5 8 4 2. - 0 - -0.0651483386754990 - 0.2409984022378922 - -0.0502787381410599 - <_> - - <_> - - - - <_>2 5 12 12 -1. - <_>2 5 6 6 2. - <_>8 11 6 6 2. - 0 - -1.0481229983270168e-003 - 0.0654616281390190 - -0.1919842064380646 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - 2.0919230300933123e-003 - 0.0487021617591381 - -0.2006254941225052 - <_> - - <_> - - - - <_>5 7 10 10 -1. - <_>5 7 5 5 2. - <_>10 12 5 5 2. - 0 - -0.0428493693470955 - -0.4615420997142792 - 0.0291370395570993 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -4.5563629828393459e-003 - 0.1373217999935150 - -0.0738710165023804 - <_> - - <_> - - - - <_>2 14 16 3 -1. - <_>2 15 16 1 3. - 0 - 6.7648440599441528e-003 - -0.0638660266995430 - 0.2757869958877564 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - 0.0422520712018013 - 0.0135830100625753 - -0.6271442174911499 - <_> - - <_> - - - - <_>0 13 18 4 -1. - <_>0 13 9 2 2. - <_>9 15 9 2 2. - 0 - -0.0354382209479809 - -0.5243613123893738 - 0.0210475306957960 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -5.3693209774792194e-003 - 0.1836670935153961 - -0.0664324536919594 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - 1.3521539513021708e-003 - 0.0588343217968941 - -0.2245510071516037 - <_> - - <_> - - - - <_>6 12 13 2 -1. - <_>6 13 13 1 2. - 0 - -0.0322040282189846 - -0.4801704883575440 - 9.2976661399006844e-003 - <_> - - <_> - - - - <_>1 12 13 2 -1. - <_>1 13 13 1 2. - 0 - 4.0550291305407882e-004 - -0.0859484076499939 - 0.2010037004947662 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -3.8419410120695829e-003 - 0.2059556990861893 - -0.0668637081980705 - <_> - - <_> - - - - <_>0 7 14 4 -1. - <_>0 7 7 2 2. - <_>7 9 7 2 2. - 0 - -4.5518199913203716e-003 - -0.2290892004966736 - 0.0589543990790844 - <_> - - <_> - - - - <_>13 3 7 6 -1. - <_>13 5 7 2 3. - 0 - -0.0493403710424900 - -0.3899571895599365 - 0.0167140793055296 - <_> - - <_> - - - - <_>0 4 3 16 -1. - <_>0 12 3 8 2. - 0 - 0.0864564925432205 - -0.0322788283228874 - 0.3637163937091827 - <_> - - <_> - - - - <_>13 5 5 15 -1. - <_>13 10 5 5 3. - 0 - 5.1636258140206337e-003 - -0.1739903986454010 - 0.0560171492397785 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>2 10 3 5 2. - <_>5 15 3 5 2. - 0 - 3.5364869982004166e-003 - -0.0796309486031532 - 0.1631346046924591 - <_> - - <_> - - - - <_>11 11 9 6 -1. - <_>11 13 9 2 3. - 0 - -0.0431708395481110 - -0.3703685998916626 - 0.0198411308228970 - <_> - - <_> - - - - <_>0 11 9 6 -1. - <_>0 13 9 2 3. - 0 - 6.1772209592163563e-003 - 0.0590521693229675 - -0.2370197027921677 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0222447700798512 - 0.2576271891593933 - -0.0229684505611658 - <_> - - <_> - - - - <_>1 3 18 4 -1. - <_>1 3 9 2 2. - <_>10 5 9 2 2. - 0 - 0.0501637309789658 - 0.0174684002995491 - -0.6812874078750610 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>15 10 5 3 2. - <_>10 13 5 3 2. - 0 - -3.0043811420910060e-004 - 0.0557814016938210 - -0.1268578022718430 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1978355050086975 - 0.0122114196419716 - -0.8606426715850830 - <_> - - <_> - - - - <_>8 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 0.0653624683618546 - 4.1287927888333797e-003 - -0.6294823884963989 - <_> - - <_> - - - - <_>3 6 12 7 -1. - <_>7 6 4 7 3. - 0 - -0.0186849907040596 - -0.2437735944986343 - 0.0432324893772602 - <_> - - <_> - - - - <_>8 4 6 5 -1. - <_>8 4 3 5 2. - 0 - -7.5593511573970318e-003 - 0.1725444048643112 - -0.0168717801570892 - <_> - - <_> - - - - <_>6 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 1.4699660241603851e-003 - -0.1556148976087570 - 0.0692318528890610 - <_> - - <_> - - - - <_>7 1 6 19 -1. - <_>7 1 3 19 2. - 0 - 0.1192594021558762 - -0.0263411905616522 - 0.4484722912311554 - <_> - - <_> - - - - <_>6 0 3 20 -1. - <_>7 0 1 20 3. - 0 - 0.0137634798884392 - 0.0318527109920979 - -0.3818455040454865 - <_> - - <_> - - - - <_>9 1 3 13 -1. - <_>10 1 1 13 3. - 0 - 0.0129664400592446 - -0.0393913686275482 - 0.1909269988536835 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0110414195805788 - -0.2730937898159027 - 0.0477778203785419 - <_> - - <_> - - - - <_>2 0 18 16 -1. - <_>2 8 18 8 2. - 0 - 0.6836441159248352 - 9.6240043640136719e-003 - -0.9744750261306763 - <_> - - <_> - - - - <_>1 5 6 15 -1. - <_>1 10 6 5 3. - 0 - -2.4255160242319107e-003 - -0.2543956935405731 - 0.0407325513660908 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - 6.4529682276770473e-004 - -0.1382417976856232 - 0.0746600478887558 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0223861802369356 - 0.3940477967262268 - -0.0425919517874718 - <_> - - <_> - - - - <_>6 13 10 6 -1. - <_>11 13 5 3 2. - <_>6 16 5 3 2. - 0 - -0.0643251612782478 - -0.9685335755348206 - 5.4289568215608597e-003 - <_> - - <_> - - - - <_>0 10 14 3 -1. - <_>0 11 14 1 3. - 0 - 0.0408037118613720 - 0.0147799802944064 - -0.7544596791267395 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>11 9 3 8 2. - 0 - -2.4066439364105463e-003 - 0.0762139186263084 - -0.0813253372907639 - <_> - - <_> - - - - <_>1 13 7 6 -1. - <_>1 15 7 2 3. - 0 - -0.0498650595545769 - -0.7844797968864441 - 0.0151301501318812 - <_> - - <_> - - - - <_>9 0 3 12 -1. - <_>9 6 3 6 2. - 0 - -0.0897499918937683 - -0.9007651805877686 - 4.0898341685533524e-003 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 2.1489290520548820e-003 - -0.0778734087944031 - 0.1453898996114731 - <_> - - <_> - - - - <_>4 14 13 2 -1. - <_>4 15 13 1 2. - 0 - 1.8653910374268889e-003 - -0.0512646399438381 - 0.1451420933008194 - <_> - - <_> - - - - <_>6 13 6 7 -1. - <_>8 13 2 7 3. - 0 - 0.0541899502277374 - 0.0167405698448420 - -0.7296484708786011 - <_> - - <_> - - - - <_>16 10 4 7 -1. - <_>16 10 2 7 2. - 0 - -3.7668810691684484e-003 - 0.1534599959850311 - -0.0598672106862068 - <_> - - <_> - - - - <_>0 6 4 13 -1. - <_>2 6 2 13 2. - 0 - -0.1515194028615952 - -0.8261219859123230 - 0.0144882798194885 - <_> - - <_> - - - - <_>1 15 18 3 -1. - <_>7 15 6 3 3. - 0 - 0.0102466596290469 - -0.0631456896662712 - 0.1899479031562805 - <_> - - <_> - - - - <_>0 1 16 4 -1. - <_>0 1 8 2 2. - <_>8 3 8 2 2. - 0 - 0.0105782700702548 - 0.0597267486155033 - -0.1916207969188690 - <_> - - <_> - - - - <_>3 0 14 4 -1. - <_>3 2 14 2 2. - 0 - 0.0150329703465104 - -0.0738685205578804 - 0.1551170945167542 - <_> - - <_> - - - - <_>3 13 12 6 -1. - <_>3 13 6 3 2. - <_>9 16 6 3 2. - 0 - -0.0421362891793251 - -0.6873332262039185 - 0.0166046302765608 - <_> - - <_> - - - - <_>6 8 8 9 -1. - <_>6 11 8 3 3. - 0 - 1.8628799589350820e-003 - -0.1573285013437271 - 0.0757149085402489 - <_> - - <_> - - - - <_>0 8 18 9 -1. - <_>0 11 18 3 3. - 0 - 0.0246596392244101 - 0.0970811396837235 - -0.1604579985141754 - <_> - - <_> - - - - <_>10 13 10 7 -1. - <_>10 13 5 7 2. - 0 - 0.1914573013782501 - 7.1056559681892395e-003 - -0.7553734183311462 - <_> - - <_> - - - - <_>0 13 10 7 -1. - <_>5 13 5 7 2. - 0 - -0.0301671605557203 - 0.1700260937213898 - -0.0861638262867928 - <_> - - <_> - - - - <_>12 10 8 6 -1. - <_>12 12 8 2 3. - 0 - 9.2923697084188461e-003 - 0.0433526113629341 - -0.1953348070383072 - <_> - - <_> - - - - <_>0 12 17 6 -1. - <_>0 15 17 3 2. - 0 - -1.9069829722866416e-003 - 0.0824215188622475 - -0.1464408934116364 - <_> - - <_> - - - - <_>5 14 10 4 -1. - <_>5 16 10 2 2. - 0 - 3.1027841032482684e-004 - -0.1187931969761848 - 0.0946357622742653 - <_> - - <_> - - - - <_>1 8 13 3 -1. - <_>1 9 13 1 3. - 0 - 4.4492271263152361e-004 - -0.1564576029777527 - 0.0685128122568130 - <_> - - <_> - - - - <_>11 10 9 4 -1. - <_>11 12 9 2 2. - 0 - -0.0120954699814320 - -0.0901441276073456 - 0.0300506204366684 - <_> - - <_> - - - - <_>0 2 2 18 -1. - <_>1 2 1 18 2. - 0 - -2.0358909387141466e-003 - 0.1358647048473358 - -0.0726312622427940 - <_> - - <_> - - - - <_>14 12 6 7 -1. - <_>14 12 3 7 2. - 0 - -9.3594277277588844e-003 - 0.1137612015008926 - -0.0396327190101147 - <_> - - <_> - - - - <_>0 12 6 7 -1. - <_>3 12 3 7 2. - 0 - 4.2418478988111019e-003 - -0.0815194398164749 - 0.1576620936393738 - <_> - - <_> - - - - <_>8 2 8 14 -1. - <_>8 9 8 7 2. - 0 - -0.0599637590348721 - -0.2327315062284470 - 0.0208368804305792 - <_> - - <_> - - - - <_>4 2 8 14 -1. - <_>4 9 8 7 2. - 0 - 4.6651167795062065e-003 - 0.1313533037900925 - -0.1239491030573845 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - 6.2358117429539561e-004 - -0.1292017996311188 - 0.0652205571532249 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 2.0561330020427704e-003 - -0.0629108771681786 - 0.1628800034523010 - -1.5512030124664307 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>1 2 18 3 -1. - <_>7 2 6 3 3. - 0 - 0.1121644005179405 - -0.2906509041786194 - 0.3151021003723145 - <_> - - <_> - - - - <_>12 6 5 9 -1. - <_>12 9 5 3 3. - 0 - 0.0278506092727184 - -0.3997235000133514 - 0.1789499074220657 - <_> - - <_> - - - - <_>0 4 9 12 -1. - <_>3 4 3 12 3. - 0 - 0.0408042408525944 - -0.2417106032371521 - 0.2237673997879028 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 1.3134710025042295e-003 - -0.4223076105117798 - 0.0690668374300003 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 3.9736120961606503e-003 - -0.5524399280548096 - 0.1036207973957062 - <_> - - <_> - - - - <_>13 9 4 10 -1. - <_>13 14 4 5 2. - 0 - -9.7877913503907621e-005 - 0.0703004598617554 - -0.4197031855583191 - <_> - - <_> - - - - <_>3 12 10 8 -1. - <_>3 12 5 4 2. - <_>8 16 5 4 2. - 0 - 6.2921550124883652e-003 - -0.3062996864318848 - 0.1307204067707062 - <_> - - <_> - - - - <_>12 1 7 4 -1. - <_>12 3 7 2 2. - 0 - -8.7216142565011978e-003 - -0.4126763045787811 - 0.0727381482720375 - <_> - - <_> - - - - <_>2 4 12 6 -1. - <_>2 6 12 2 3. - 0 - -0.0586111098527908 - 0.1949152052402496 - -0.1973744928836823 - <_> - - <_> - - - - <_>13 10 5 6 -1. - <_>13 13 5 3 2. - 0 - -0.0461044684052467 - -0.2627475857734680 - 0.0243621896952391 - <_> - - <_> - - - - <_>2 10 5 6 -1. - <_>2 13 5 3 2. - 0 - -5.2685278933495283e-004 - 0.0798763111233711 - -0.4435858130455017 - <_> - - <_> - - - - <_>12 1 7 4 -1. - <_>12 3 7 2 2. - 0 - -0.0255219396203756 - -0.4418368935585022 - 0.0107056600973010 - <_> - - <_> - - - - <_>5 5 9 10 -1. - <_>5 10 9 5 2. - 0 - -6.8350387737154961e-003 - -0.3950119018554688 - 0.0784419924020767 - <_> - - <_> - - - - <_>12 1 7 4 -1. - <_>12 3 7 2 2. - 0 - 0.0610552094876766 - 3.5330320242792368e-003 - -0.6067745089530945 - <_> - - <_> - - - - <_>0 0 17 2 -1. - <_>0 1 17 1 2. - 0 - 4.7110877931118011e-003 - -0.1931038051843643 - 0.1525941044092178 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0375524982810020 - 0.0695726871490479 - -0.4158819019794464 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0408874303102493 - -0.1359692960977554 - 0.2489430010318756 - <_> - - <_> - - - - <_>11 10 6 8 -1. - <_>13 10 2 8 3. - 0 - 2.6306639483664185e-005 - -0.2560321092605591 - 0.1100158989429474 - <_> - - <_> - - - - <_>3 10 6 8 -1. - <_>5 10 2 8 3. - 0 - 9.4716809689998627e-003 - -0.2219702005386353 - 0.1364049017429352 - <_> - - <_> - - - - <_>5 1 10 12 -1. - <_>5 7 10 6 2. - 0 - 3.4596489276736975e-003 - 0.1556897014379501 - -0.1845435053110123 - <_> - - <_> - - - - <_>1 1 7 4 -1. - <_>1 3 7 2 2. - 0 - -8.1670414656400681e-003 - -0.3734661042690277 - 0.0822064206004143 - <_> - - <_> - - - - <_>10 10 8 6 -1. - <_>10 12 8 2 3. - 0 - 0.0470451787114143 - 0.0126555804163218 - -0.6916750073432922 - <_> - - <_> - - - - <_>0 7 8 6 -1. - <_>0 9 8 2 3. - 0 - -1.9954189192503691e-003 - -0.4287165105342865 - 0.0601198486983776 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>10 11 5 3 2. - <_>5 14 5 3 2. - 0 - -0.0327976793050766 - -0.5851371884346008 - 0.0397392101585865 - <_> - - <_> - - - - <_>0 8 20 3 -1. - <_>0 9 20 1 3. - 0 - 0.0435161218047142 - 0.0363112390041351 - -0.5855696797370911 - <_> - - <_> - - - - <_>7 11 13 3 -1. - <_>7 12 13 1 3. - 0 - -0.0132136000320315 - 0.2116038054227829 - -0.0896183624863625 - <_> - - <_> - - - - <_>2 7 15 5 -1. - <_>7 7 5 5 3. - 0 - -0.0385740809142590 - -0.5937594771385193 - 0.0372978709638119 - <_> - - <_> - - - - <_>2 9 16 6 -1. - <_>2 9 8 6 2. - 0 - -0.1535183936357498 - 0.4411644041538239 - -0.0590583682060242 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 7 5 3 2. - 0 - -0.0141332400962710 - -0.3404521048069000 - 0.0662774965167046 - <_> - - <_> - - - - <_>4 12 12 5 -1. - <_>8 12 4 5 3. - 0 - 0.0140610104426742 - 0.1131246015429497 - -0.1900123953819275 - <_> - - <_> - - - - <_>2 16 16 4 -1. - <_>2 16 8 2 2. - <_>10 18 8 2 2. - 0 - 0.0354574695229530 - 0.0372978188097477 - -0.5356817841529846 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0129310395568609 - -0.2859332859516144 - 0.0583418011665344 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -0.0119869997724891 - -0.4021627008914948 - 0.0478411912918091 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - -0.0137232895940542 - 0.2023843973875046 - -0.0892904922366142 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 0.0159908104687929 - -0.0617425516247749 - 0.3938700854778290 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -0.0145057598128915 - -0.3582904934883118 - 0.0437899082899094 - <_> - - <_> - - - - <_>0 4 6 7 -1. - <_>2 4 2 7 3. - 0 - 0.0314435288310051 - -0.0673745274543762 - 0.2877972126007080 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0342873409390450 - 0.0563902594149113 - -0.3340716063976288 - <_> - - <_> - - - - <_>7 0 6 20 -1. - <_>9 0 2 20 3. - 0 - 8.8674569269642234e-005 - -0.2865560054779053 - 0.0703185573220253 - <_> - - <_> - - - - <_>9 5 3 13 -1. - <_>10 5 1 13 3. - 0 - 0.0182664692401886 - -0.0522215701639652 - 0.1702639013528824 - <_> - - <_> - - - - <_>5 1 10 9 -1. - <_>5 4 10 3 3. - 0 - 0.0617696307599545 - -0.0688005834817886 - 0.2748331129550934 - <_> - - <_> - - - - <_>12 5 8 8 -1. - <_>16 5 4 4 2. - <_>12 9 4 4 2. - 0 - -0.0233833100646734 - -0.2784563004970551 - 0.0241313595324755 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>6 4 8 4 2. - 0 - -0.1118286028504372 - 0.4568716883659363 - -0.0432179495692253 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -0.0643868967890739 - -0.3422875106334686 - 0.0640637129545212 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.2176343053579330 - -0.0605644993484020 - 0.3635270893573761 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - -4.9456087872385979e-003 - -0.1652639061212540 - 0.0460355803370476 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -1.2704910477623343e-003 - -0.2503579854965210 - 0.0823364406824112 - <_> - - <_> - - - - <_>13 2 6 6 -1. - <_>13 2 3 6 2. - 0 - 0.0265367291867733 - -0.1391904950141907 - 0.1952400058507919 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -0.0200274400413036 - -0.3747282922267914 - 0.0539810210466385 - <_> - - <_> - - - - <_>7 6 10 14 -1. - <_>12 6 5 7 2. - <_>7 13 5 7 2. - 0 - -0.0619875490665436 - -0.1443642973899841 - 0.0158632900565863 - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>1 2 18 1 3. - 0 - 0.0230370592325926 - 0.0384292304515839 - -0.4847930967807770 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - 0.0579582713544369 - 0.0207501407712698 - -0.7677661776542664 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 5.4419268853962421e-003 - 0.0720744132995605 - -0.2425422072410584 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 7.2400430217385292e-003 - -0.0824329480528831 - 0.1846349984407425 - <_> - - <_> - - - - <_>2 15 7 4 -1. - <_>2 17 7 2 2. - 0 - 0.0148477796465158 - 0.0562454089522362 - -0.3629705905914307 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 0.0120848799124360 - -0.0635362565517426 - 0.2861422896385193 - <_> - - <_> - - - - <_>4 0 9 6 -1. - <_>7 0 3 6 3. - 0 - 0.0808313563466072 - 0.0471439585089684 - -0.4996809065341950 - <_> - - <_> - - - - <_>11 6 5 6 -1. - <_>11 9 5 3 2. - 0 - 1.9218639936298132e-003 - -0.4046914875507355 - 0.0220930408686399 - <_> - - <_> - - - - <_>3 6 10 14 -1. - <_>3 6 5 7 2. - <_>8 13 5 7 2. - 0 - -0.0141796795651317 - -0.1852028071880341 - 0.0868239179253578 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>12 4 6 6 2. - <_>6 10 6 6 2. - 0 - -2.9600440029753372e-005 - 0.0740548297762871 - -0.1933135986328125 - <_> - - <_> - - - - <_>4 6 5 6 -1. - <_>4 9 5 3 2. - 0 - 1.7121590208262205e-003 - -0.4995464980602264 - 0.0382737405598164 - <_> - - <_> - - - - <_>5 1 14 5 -1. - <_>5 1 7 5 2. - 0 - -0.1320794969797134 - 0.5296478867530823 - -0.0103634996339679 - <_> - - <_> - - - - <_>9 4 2 16 -1. - <_>9 12 2 8 2. - 0 - 0.0369220711290836 - 0.0195874702185392 - -0.8895406723022461 - <_> - - <_> - - - - <_>13 12 7 4 -1. - <_>13 14 7 2 2. - 0 - -7.3079409048659727e-006 - 0.0649930536746979 - -0.1733129024505615 - <_> - - <_> - - - - <_>3 12 5 6 -1. - <_>3 15 5 3 2. - 0 - -0.0352227091789246 - -0.3684993088245392 - 0.0505657382309437 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0555311106145382 - 0.3155569136142731 - -0.0450157299637794 - <_> - - <_> - - - - <_>1 3 8 4 -1. - <_>5 3 4 4 2. - 0 - 0.0187628697603941 - -0.1935907006263733 - 0.0790935307741165 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - 0.0249717608094215 - -0.0818621963262558 - 0.2101489007472992 - <_> - - <_> - - - - <_>3 0 3 13 -1. - <_>4 0 1 13 3. - 0 - -2.0817129407078028e-003 - -0.1772366017103195 - 0.0917572826147079 - <_> - - <_> - - - - <_>10 10 10 10 -1. - <_>15 10 5 5 2. - <_>10 15 5 5 2. - 0 - -0.1149986013770104 - 0.5086256265640259 - -0.0182674508541822 - <_> - - <_> - - - - <_>0 6 8 14 -1. - <_>4 6 4 14 2. - 0 - 0.3206895887851715 - 0.0216510090976954 - -0.7668547034263611 - <_> - - <_> - - - - <_>4 3 12 12 -1. - <_>10 3 6 6 2. - <_>4 9 6 6 2. - 0 - -0.0814512968063354 - -0.4633176028728485 - 0.0293835792690516 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0150079401209950 - -0.3930864930152893 - 0.0368675589561462 - <_> - - <_> - - - - <_>9 6 3 13 -1. - <_>10 6 1 13 3. - 0 - 0.0237958207726479 - -0.0324823111295700 - 0.1676425039768219 - <_> - - <_> - - - - <_>4 1 10 5 -1. - <_>9 1 5 5 2. - 0 - -0.0885088071227074 - 0.7210345864295960 - -0.0211402103304863 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 0.0450111217796803 - -0.0253261309117079 - 0.2806276082992554 - <_> - - <_> - - - - <_>3 2 12 6 -1. - <_>3 2 6 3 2. - <_>9 5 6 3 2. - 0 - 0.0192869901657104 - 0.0657711625099182 - -0.2569778859615326 - <_> - - <_> - - - - <_>2 2 18 4 -1. - <_>11 2 9 2 2. - <_>2 4 9 2 2. - 0 - 0.0221376195549965 - 0.0391549915075302 - -0.1914563030004501 - <_> - - <_> - - - - <_>3 2 11 6 -1. - <_>3 4 11 2 3. - 0 - 0.0298479795455933 - -0.1252101957798004 - 0.1486787050962448 - <_> - - <_> - - - - <_>12 0 8 12 -1. - <_>16 0 4 6 2. - <_>12 6 4 6 2. - 0 - -0.0683920234441757 - 0.2602387070655823 - -0.0475253015756607 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - 0.0680033713579178 - -0.0458985604345798 - 0.4010710120201111 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>10 1 3 5 2. - <_>7 6 3 5 2. - 0 - 0.0560981594026089 - 0.0232777893543243 - -0.8445712924003601 - <_> - - <_> - - - - <_>0 0 13 3 -1. - <_>0 1 13 1 3. - 0 - -0.0130240898579359 - -0.3834899067878723 - 0.0383141897618771 - <_> - - <_> - - - - <_>4 5 13 3 -1. - <_>4 6 13 1 3. - 0 - 0.0125946803018451 - -0.0676168426871300 - 0.2985244095325470 - <_> - - <_> - - - - <_>3 12 7 6 -1. - <_>3 14 7 2 3. - 0 - -0.0490638799965382 - -0.5586265921592712 - 0.0285116191953421 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -0.0157341696321964 - 0.2561193108558655 - -0.0594071410596371 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 0.0146748498082161 - -0.0630010217428207 - 0.2785499989986420 - <_> - - <_> - - - - <_>8 1 7 6 -1. - <_>8 3 7 2 3. - 0 - 0.0250680297613144 - -0.0788613483309746 - 0.1057737022638321 - <_> - - <_> - - - - <_>0 8 12 7 -1. - <_>6 8 6 7 2. - 0 - 7.4170758016407490e-003 - -0.3577589988708496 - 0.0487077012658119 - <_> - - <_> - - - - <_>0 1 20 4 -1. - <_>10 1 10 2 2. - <_>0 3 10 2 2. - 0 - -7.7149281278252602e-003 - -0.1804956048727036 - 0.0975316017866135 - <_> - - <_> - - - - <_>0 10 20 3 -1. - <_>0 11 20 1 3. - 0 - 0.0499820709228516 - 0.0210093203932047 - -0.7653753757476807 - <_> - - <_> - - - - <_>12 1 2 14 -1. - <_>12 1 1 14 2. - 0 - -0.0167596302926540 - -0.5904538035392761 - 0.0269480496644974 - <_> - - <_> - - - - <_>1 7 18 10 -1. - <_>7 7 6 10 3. - 0 - 0.3763282895088196 - 0.0219898503273726 - -0.6146131157875061 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0527208298444748 - -0.0390741601586342 - 0.2660067081451416 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - 0.0262701995670795 - -0.0938639864325523 - 0.2228026986122131 - <_> - - <_> - - - - <_>14 1 3 14 -1. - <_>15 1 1 14 3. - 0 - -2.5664661079645157e-003 - -0.1862180978059769 - 0.0985197126865387 - <_> - - <_> - - - - <_>5 8 6 5 -1. - <_>8 8 3 5 2. - 0 - 5.3800269961357117e-003 - 0.1281605958938599 - -0.1367170065641403 - <_> - - <_> - - - - <_>14 1 3 14 -1. - <_>15 1 1 14 3. - 0 - 0.0252000503242016 - 0.0308755896985531 - -0.2968142032623291 - <_> - - <_> - - - - <_>3 1 3 14 -1. - <_>4 1 1 14 3. - 0 - 0.0254440605640411 - 0.0439784117043018 - -0.4050532877445221 - <_> - - <_> - - - - <_>0 16 20 2 -1. - <_>0 17 20 1 2. - 0 - -0.0247158091515303 - -0.5849229097366333 - 0.0231797602027655 - <_> - - <_> - - - - <_>6 6 4 14 -1. - <_>8 6 2 14 2. - 0 - -0.0161596499383450 - -0.3195050060749054 - 0.0446035303175449 - <_> - - <_> - - - - <_>9 6 3 13 -1. - <_>10 6 1 13 3. - 0 - 6.5401610918343067e-003 - -0.0585759915411472 - 0.0740167871117592 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - -0.0439406484365463 - -0.7721183896064758 - 0.0193529799580574 - <_> - - <_> - - - - <_>9 3 5 9 -1. - <_>9 6 5 3 3. - 0 - -4.5612620306201279e-004 - 0.0303974207490683 - -0.2698299884796143 - <_> - - <_> - - - - <_>2 13 9 6 -1. - <_>5 13 3 6 3. - 0 - 2.8633379843086004e-003 - -0.1687434017658234 - 0.0888862684369087 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0594884604215622 - -0.3405894935131073 - 0.0246258806437254 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 0.0307144708931446 - 0.0317963995039463 - -0.4157277047634125 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - -0.0223303791135550 - 0.1289605051279068 - -0.0242325700819492 - <_> - - <_> - - - - <_>1 14 10 6 -1. - <_>1 14 5 3 2. - <_>6 17 5 3 2. - 0 - 0.0239716097712517 - -0.0768580585718155 - 0.2036072015762329 - <_> - - <_> - - - - <_>11 13 7 6 -1. - <_>11 15 7 2 3. - 0 - -0.0606967806816101 - -0.7206013202667236 - 0.0116178803145885 - <_> - - <_> - - - - <_>1 8 8 12 -1. - <_>1 8 4 6 2. - <_>5 14 4 6 2. - 0 - -0.0683622434735298 - 0.3582518100738525 - -0.0448078997433186 - <_> - - <_> - - - - <_>5 7 15 5 -1. - <_>10 7 5 5 3. - 0 - 0.1345103979110718 - 0.0260080695152283 - -0.2507762014865875 - <_> - - <_> - - - - <_>0 7 15 5 -1. - <_>5 7 5 5 3. - 0 - 0.1334117054939270 - 0.0471381805837154 - -0.3966158032417297 - <_> - - <_> - - - - <_>12 13 8 6 -1. - <_>12 15 8 2 3. - 0 - 0.0205243304371834 - 0.0438941717147827 - -0.2850196957588196 - <_> - - <_> - - - - <_>8 10 4 10 -1. - <_>8 15 4 5 2. - 0 - 0.0415436103940010 - 0.0254522208124399 - -0.5937765836715698 - <_> - - <_> - - - - <_>1 6 19 3 -1. - <_>1 7 19 1 3. - 0 - -0.0715734437108040 - -0.7874376177787781 - 0.0139793204143643 - <_> - - <_> - - - - <_>7 8 6 9 -1. - <_>7 11 6 3 3. - 0 - 0.0662646293640137 - 0.0229391306638718 - -0.5430498123168945 - <_> - - <_> - - - - <_>11 2 8 8 -1. - <_>15 2 4 4 2. - <_>11 6 4 4 2. - 0 - 4.4609569013118744e-003 - 0.0506881400942802 - -0.2059900015592575 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 0.0148595403879881 - -0.0734084621071815 - 0.1990225017070770 - <_> - - <_> - - - - <_>9 2 3 13 -1. - <_>10 2 1 13 3. - 0 - -0.0396253392100334 - -0.5352293252944946 - 9.3211038038134575e-003 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - -9.6143726259469986e-003 - 0.2766486108303070 - -0.0630875229835510 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0545898303389549 - 0.0249628592282534 - -0.5817118883132935 - <_> - - <_> - - - - <_>3 2 3 18 -1. - <_>3 8 3 6 3. - 0 - 0.0137708997353911 - -0.2289174944162369 - 0.0699636712670326 - <_> - - <_> - - - - <_>1 5 18 10 -1. - <_>10 5 9 5 2. - <_>1 10 9 5 2. - 0 - 0.0868623405694962 - 0.0240580104291439 - -0.5864248275756836 - <_> - - <_> - - - - <_>6 1 2 13 -1. - <_>7 1 1 13 2. - 0 - -0.0224330108612776 - -0.9216936230659485 - 0.0132817998528481 - <_> - - <_> - - - - <_>11 0 8 6 -1. - <_>11 2 8 2 3. - 0 - -0.0737795978784561 - 0.3846378922462463 - -8.5962712764739990e-003 - <_> - - <_> - - - - <_>4 0 7 6 -1. - <_>4 2 7 2 3. - 0 - 2.9300490859895945e-004 - -0.1717057973146439 - 0.0885201096534729 - -1.7598799467086792 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 10 3 -1. - <_>5 2 5 3 2. - 0 - 5.3288340568542480e-003 - -0.2661677002906799 - 0.1776044964790344 - <_> - - <_> - - - - <_>1 4 19 4 -1. - <_>1 6 19 2 2. - 0 - -4.0987450629472733e-003 - 0.1235842034220696 - -0.3080511093139648 - <_> - - <_> - - - - <_>5 7 6 5 -1. - <_>8 7 3 5 2. - 0 - -5.5853058584034443e-003 - -0.5053399205207825 - 0.0620501190423965 - <_> - - <_> - - - - <_>11 10 5 6 -1. - <_>11 13 5 3 2. - 0 - -5.1797390915453434e-004 - 0.0691780671477318 - -0.3483135998249054 - <_> - - <_> - - - - <_>7 8 4 12 -1. - <_>7 12 4 4 3. - 0 - 5.3605018183588982e-003 - 0.0651586726307869 - -0.4626223146915436 - <_> - - <_> - - - - <_>10 1 10 19 -1. - <_>10 1 5 19 2. - 0 - 0.0301142707467079 - -0.0641323626041412 - 0.0710700601339340 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - 0.0890142917633057 - 0.0429871305823326 - -0.6017789840698242 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 1.5248140553012490e-003 - -0.3307178914546967 - 0.0714083015918732 - <_> - - <_> - - - - <_>2 7 7 6 -1. - <_>2 9 7 2 3. - 0 - 1.8556410213932395e-003 - -0.3472712039947510 - 0.0706306770443916 - <_> - - <_> - - - - <_>10 5 10 12 -1. - <_>10 11 10 6 2. - 0 - -0.0161516200751066 - -0.2561177015304565 - 0.0712556988000870 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>5 14 4 4 2. - 0 - -3.1278008827939630e-004 - 0.0734203308820724 - -0.2959462106227875 - <_> - - <_> - - - - <_>7 5 8 12 -1. - <_>11 5 4 6 2. - <_>7 11 4 6 2. - 0 - -6.0263078921707347e-005 - 0.0665661916136742 - -0.2180245071649551 - <_> - - <_> - - - - <_>5 5 8 12 -1. - <_>5 5 4 6 2. - <_>9 11 4 6 2. - 0 - 7.6520902803167701e-004 - 0.0755371972918510 - -0.3767788112163544 - <_> - - <_> - - - - <_>14 1 6 8 -1. - <_>16 1 2 8 3. - 0 - -0.0695890709757805 - 0.3981064856052399 - -0.0258418191224337 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>2 1 2 9 3. - 0 - -0.0985295772552490 - 0.6732196807861328 - -0.0339254699647427 - <_> - - <_> - - - - <_>1 6 18 4 -1. - <_>7 6 6 4 3. - 0 - 0.0499500595033169 - 0.0616605691611767 - -0.3785111010074616 - <_> - - <_> - - - - <_>3 12 13 2 -1. - <_>3 13 13 1 2. - 0 - 3.9009240572340786e-004 - -0.0964286103844643 - 0.2170020043849945 - <_> - - <_> - - - - <_>3 3 14 2 -1. - <_>3 4 14 1 2. - 0 - -7.1598717477172613e-004 - -0.1835810989141464 - 0.1058740019798279 - <_> - - <_> - - - - <_>2 0 13 6 -1. - <_>2 2 13 2 3. - 0 - 3.8064830005168915e-003 - -0.1752761006355286 - 0.1143039986491203 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - 6.5288757905364037e-003 - 0.0679945275187492 - -0.3072611987590790 - <_> - - <_> - - - - <_>3 8 13 2 -1. - <_>3 9 13 1 2. - 0 - 2.2182099055498838e-003 - -0.2793523073196411 - 0.0587907209992409 - <_> - - <_> - - - - <_>12 0 4 14 -1. - <_>14 0 2 7 2. - <_>12 7 2 7 2. - 0 - 1.7800349451135844e-004 - 0.0994891077280045 - -0.2661688029766083 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -0.0326566807925701 - 0.5873476266860962 - -0.0265458803623915 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0267733503133059 - 0.0364144109189510 - -0.3718883097171783 - <_> - - <_> - - - - <_>1 0 6 12 -1. - <_>4 0 3 12 2. - 0 - 0.0127803096547723 - -0.0845405235886574 - 0.1785326004028320 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - 5.5374070070683956e-003 - -0.1089204996824265 - 0.1440391987562180 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -7.1258977986872196e-003 - 0.1985002011060715 - -0.0833593979477882 - <_> - - <_> - - - - <_>5 1 15 3 -1. - <_>5 2 15 1 3. - 0 - 8.0109452828764915e-003 - 0.0488443486392498 - -0.2859002947807312 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0272311307489872 - -0.6855816245079041 - 0.0218777693808079 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - -0.0209289491176605 - -0.2082023024559021 - 0.0265852306038141 - <_> - - <_> - - - - <_>1 11 7 6 -1. - <_>1 13 7 2 3. - 0 - 3.9801741950213909e-003 - 0.0670047774910927 - -0.2301581054925919 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 2.1598068997263908e-003 - -0.0931090191006660 - 0.1723553985357285 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 9.9411439150571823e-003 - -0.0449998192489147 - 0.3183049857616425 - <_> - - <_> - - - - <_>0 5 20 10 -1. - <_>10 5 10 5 2. - <_>0 10 10 5 2. - 0 - -0.0179388597607613 - -0.2151595950126648 - 0.0724629163742065 - <_> - - <_> - - - - <_>4 6 4 7 -1. - <_>6 6 2 7 2. - 0 - -1.5030350368760992e-005 - 0.0914379730820656 - -0.1670629978179932 - <_> - - <_> - - - - <_>4 6 14 6 -1. - <_>11 6 7 3 2. - <_>4 9 7 3 2. - 0 - 4.2446260340511799e-003 - 0.0648107603192329 - -0.1055627018213272 - <_> - - <_> - - - - <_>5 6 6 8 -1. - <_>5 10 6 4 2. - 0 - 7.4575991675374098e-006 - -0.2630968987941742 - 0.0565884001553059 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>14 10 3 10 2. - 0 - -0.0104572102427483 - 0.1607888042926788 - -0.0727080330252647 - <_> - - <_> - - - - <_>2 18 13 2 -1. - <_>2 19 13 1 2. - 0 - -1.2225599493831396e-003 - 0.1155833005905151 - -0.1223348975181580 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 14 16 2 2. - 0 - 0.0160616301000118 - 0.0282017905265093 - -0.5099617838859558 - <_> - - <_> - - - - <_>1 6 10 6 -1. - <_>1 6 5 3 2. - <_>6 9 5 3 2. - 0 - -0.0161620303988457 - -0.3385752141475678 - 0.0359247811138630 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>14 10 3 10 2. - 0 - 7.2181350551545620e-003 - -0.0727062001824379 - 0.1062465980648994 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>3 10 3 10 2. - 0 - -0.0104166604578495 - 0.1620581001043320 - -0.0945677608251572 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 0.0139466002583504 - 0.0541696399450302 - -0.3206804096698761 - <_> - - <_> - - - - <_>0 0 4 17 -1. - <_>2 0 2 17 2. - 0 - 0.0127341197803617 - -0.0860661119222641 - 0.1964863985776901 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0278583709150553 - -0.2840923964977264 - 0.0267065502703190 - <_> - - <_> - - - - <_>2 4 6 16 -1. - <_>2 4 3 8 2. - <_>5 12 3 8 2. - 0 - -0.0989315211772919 - 0.5845760703086853 - -0.0219555106014013 - <_> - - <_> - - - - <_>5 6 10 8 -1. - <_>10 6 5 4 2. - <_>5 10 5 4 2. - 0 - 2.3434299509972334e-003 - 0.0964754670858383 - -0.1209534034132958 - <_> - - <_> - - - - <_>4 6 8 8 -1. - <_>4 6 4 4 2. - <_>8 10 4 4 2. - 0 - -2.3025700356811285e-003 - 0.0732979699969292 - -0.2230906933546066 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 0.0307910796254873 - 0.0114638796076179 - -0.2403407990932465 - <_> - - <_> - - - - <_>4 2 12 5 -1. - <_>8 2 4 5 3. - 0 - -8.4339501336216927e-003 - 0.2961153984069824 - -0.0426636897027493 - <_> - - <_> - - - - <_>11 2 2 18 -1. - <_>11 2 1 18 2. - 0 - -3.4617669880390167e-003 - -0.2125786989927292 - 0.0427094586193562 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>10 6 2 7 2. - 0 - -0.0333719290792942 - 0.3529927134513855 - -0.0355705693364143 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - -0.0372381284832954 - -0.5917713046073914 - 0.0267758406698704 - <_> - - <_> - - - - <_>0 5 20 5 -1. - <_>10 5 10 5 2. - 0 - -0.2086006999015808 - -0.5759524106979370 - 0.0197635591030121 - <_> - - <_> - - - - <_>4 4 12 4 -1. - <_>4 6 12 2 2. - 0 - -0.0682798177003860 - 0.3458260893821716 - -0.0378611795604229 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0116003202274442 - 0.0576855801045895 - -0.2600820958614349 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -0.0672189593315125 - -0.4504827857017517 - 0.0124951899051666 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -5.1632397808134556e-003 - 0.1614670008420944 - -0.0769757702946663 - <_> - - <_> - - - - <_>3 15 16 4 -1. - <_>11 15 8 2 2. - <_>3 17 8 2 2. - 0 - 0.0401133112609386 - 0.0131312301382422 - -0.4573144912719727 - <_> - - <_> - - - - <_>1 15 16 4 -1. - <_>1 15 8 2 2. - <_>9 17 8 2 2. - 0 - 0.0378377400338650 - 0.0230019204318523 - -0.5363628864288330 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 2.6023429818451405e-003 - -0.0610074400901794 - 0.1708422005176544 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0718416422605515 - -0.5833038091659546 - 0.0200752504169941 - <_> - - <_> - - - - <_>6 11 8 9 -1. - <_>6 14 8 3 3. - 0 - -8.2885712618008256e-004 - 0.0534653402864933 - -0.1909226030111313 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - -8.1979477545246482e-004 - -0.2377593070268631 - 0.0458449088037014 - <_> - - <_> - - - - <_>4 15 13 3 -1. - <_>4 16 13 1 3. - 0 - 0.0104748597368598 - -0.0401034206151962 - 0.2494840025901794 - <_> - - <_> - - - - <_>0 10 5 9 -1. - <_>0 13 5 3 3. - 0 - -6.3726361840963364e-003 - -0.1708784997463226 - 0.0728946030139923 - <_> - - <_> - - - - <_>12 10 8 4 -1. - <_>12 12 8 2 2. - 0 - -0.0361134894192219 - -0.3687992990016937 - 0.0183317307382822 - <_> - - <_> - - - - <_>0 10 8 4 -1. - <_>0 12 8 2 2. - 0 - 5.4730800911784172e-004 - 0.0720730572938919 - -0.1889377981424332 - <_> - - <_> - - - - <_>5 1 10 6 -1. - <_>5 3 10 2 3. - 0 - 0.0175476595759392 - -0.0944525972008705 - 0.1331100016832352 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - 6.3078789971768856e-003 - 0.0762234702706337 - -0.1666823029518127 - <_> - - <_> - - - - <_>3 6 14 9 -1. - <_>3 9 14 3 3. - 0 - 2.5120719801634550e-003 - 0.5037552714347839 - -0.0226243492215872 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - 4.5274170115590096e-003 - -0.1344659030437470 - 0.0991675779223442 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -1.4772829308640212e-004 - 0.0396751798689365 - -0.0600154884159565 - <_> - - <_> - - - - <_>3 0 6 9 -1. - <_>5 0 2 9 3. - 0 - 0.0147287398576736 - 0.0392089188098907 - -0.3056001961231232 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -5.6161261163651943e-003 - -0.1084505021572113 - 0.0477546602487564 - <_> - - <_> - - - - <_>0 0 4 17 -1. - <_>2 0 2 17 2. - 0 - -9.8265614360570908e-003 - 0.1672933995723724 - -0.0767566934227943 - <_> - - <_> - - - - <_>8 0 12 16 -1. - <_>12 0 4 16 3. - 0 - 0.0179723296314478 - -0.0591479688882828 - 0.1277327984571457 - <_> - - <_> - - - - <_>0 0 12 16 -1. - <_>4 0 4 16 3. - 0 - 0.0112331397831440 - -0.0926260203123093 - 0.1573573946952820 - <_> - - <_> - - - - <_>5 6 10 6 -1. - <_>5 9 10 3 2. - 0 - 1.3678249670192599e-003 - -0.5615676045417786 - 0.0218007508665323 - <_> - - <_> - - - - <_>7 4 2 14 -1. - <_>8 4 1 14 2. - 0 - -4.1535100899636745e-003 - -0.2695116996765137 - 0.0412134788930416 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>18 5 2 7 2. - <_>16 12 2 7 2. - 0 - -0.0671946927905083 - 0.5600836277008057 - -0.0209737401455641 - <_> - - <_> - - - - <_>4 4 6 8 -1. - <_>6 4 2 8 3. - 0 - -0.0805724114179611 - -0.7584664225578308 - 0.0166143104434013 - <_> - - <_> - - - - <_>5 4 14 3 -1. - <_>5 5 14 1 3. - 0 - -9.7504993900656700e-003 - 0.2278127968311310 - -0.0402463302016258 - <_> - - <_> - - - - <_>3 4 13 3 -1. - <_>3 5 13 1 3. - 0 - 5.6034037843346596e-003 - -0.0755198523402214 - 0.1637201011180878 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -0.0102320602163672 - -0.3580319881439209 - 0.0463310889899731 - <_> - - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - 2.8616760391741991e-003 - 0.0677462369203568 - -0.1642912030220032 - <_> - - <_> - - - - <_>8 10 10 6 -1. - <_>8 12 10 2 3. - 0 - 7.7214869670569897e-003 - 0.0344948209822178 - -0.1776258051395416 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - -7.0147789083421230e-003 - 0.1728224009275436 - -0.0651763230562210 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0504708699882030 - -0.0270719602704048 - 0.3550944030284882 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -5.7124681770801544e-003 - -0.1590107977390289 - 0.0795591101050377 - <_> - - <_> - - - - <_>13 0 3 19 -1. - <_>14 0 1 19 3. - 0 - 8.7470682337880135e-003 - 0.0377898588776588 - -0.1915664970874786 - <_> - - <_> - - - - <_>4 0 3 19 -1. - <_>5 0 1 19 3. - 0 - 0.0200589299201965 - 0.0274152997881174 - -0.3807010948657990 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -1.8094859551638365e-003 - 0.1053837984800339 - -0.1499654948711395 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -7.3339277878403664e-003 - 0.2920326888561249 - -0.0612181909382343 - <_> - - <_> - - - - <_>7 7 6 9 -1. - <_>7 10 6 3 3. - 0 - 4.4179419055581093e-003 - 0.1886862069368362 - -0.0581327416002750 - <_> - - <_> - - - - <_>6 4 4 15 -1. - <_>6 9 4 5 3. - 0 - -0.0135433096438646 - -0.4940955936908722 - 0.0228559300303459 - <_> - - <_> - - - - <_>14 0 6 7 -1. - <_>16 0 2 7 3. - 0 - 0.0361972711980343 - -0.0260891206562519 - 0.3089025020599365 - <_> - - <_> - - - - <_>2 4 14 12 -1. - <_>2 4 7 6 2. - <_>9 10 7 6 2. - 0 - -0.1183184012770653 - -0.5909466147422791 - 0.0182152800261974 - <_> - - <_> - - - - <_>4 15 12 5 -1. - <_>4 15 6 5 2. - 0 - 0.0756560713052750 - -0.0359655804932117 - 0.3038612008094788 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -0.0131345195695758 - -0.2630613148212433 - 0.0422629192471504 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - 0.0189811605960131 - -0.0264836307615042 - 0.1937198936939240 - <_> - - <_> - - - - <_>0 6 4 14 -1. - <_>0 6 2 7 2. - <_>2 13 2 7 2. - 0 - -0.0460032299160957 - 0.4051350057125092 - -0.0244542006403208 - <_> - - <_> - - - - <_>11 14 8 6 -1. - <_>11 16 8 2 3. - 0 - -0.0132327303290367 - -0.2972126901149750 - 0.0479592196643353 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1958685070276260 - 0.0105403997004032 - -0.8664792776107788 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 9.6459556370973587e-003 - -0.0713349431753159 - 0.1146951019763947 - <_> - - <_> - - - - <_>7 1 5 12 -1. - <_>7 7 5 6 2. - 0 - -3.9044579025357962e-003 - 0.1074031963944435 - -0.0985149964690208 - <_> - - <_> - - - - <_>5 0 10 8 -1. - <_>5 4 10 4 2. - 0 - 0.0168963707983494 - -0.0768050700426102 - 0.1953320056200028 - <_> - - <_> - - - - <_>0 1 15 12 -1. - <_>0 5 15 4 3. - 0 - -5.5025662295520306e-003 - 0.0506431907415390 - -0.2089843004941940 - <_> - - <_> - - - - <_>7 3 6 10 -1. - <_>7 8 6 5 2. - 0 - -0.0196215696632862 - -0.2965135872364044 - 0.0329550504684448 - <_> - - <_> - - - - <_>6 4 4 16 -1. - <_>6 4 2 8 2. - <_>8 12 2 8 2. - 0 - 7.7158107887953520e-004 - 0.0460170991718769 - -0.1998299956321716 - <_> - - <_> - - - - <_>1 4 18 4 -1. - <_>7 4 6 4 3. - 0 - -0.1110284030437470 - 0.5757871270179749 - -0.0177415292710066 - <_> - - <_> - - - - <_>0 3 12 6 -1. - <_>0 3 6 3 2. - <_>6 6 6 3 2. - 0 - 1.4945500297471881e-003 - 0.0473357290029526 - -0.2089890986680985 - <_> - - <_> - - - - <_>12 1 8 10 -1. - <_>16 1 4 5 2. - <_>12 6 4 5 2. - 0 - 0.0506679192185402 - -0.0186576191335917 - 0.3407045900821686 - <_> - - <_> - - - - <_>0 1 8 10 -1. - <_>0 1 4 5 2. - <_>4 6 4 5 2. - 0 - 0.0160731691867113 - -0.0364494882524014 - 0.2656807899475098 - <_> - - <_> - - - - <_>6 12 8 8 -1. - <_>10 12 4 4 2. - <_>6 16 4 4 2. - 0 - -0.0265367403626442 - -0.3614169061183929 - 0.0297342706471682 - <_> - - <_> - - - - <_>5 8 8 12 -1. - <_>5 8 4 6 2. - <_>9 14 4 6 2. - 0 - -5.2550169639289379e-003 - -0.1310449987649918 - 0.0821535289287567 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -0.0166785605251789 - 0.3132489025592804 - -0.0450525283813477 - <_> - - <_> - - - - <_>3 11 14 6 -1. - <_>3 11 7 3 2. - <_>10 14 7 3 2. - 0 - 3.4808400087058544e-003 - 0.0829457789659500 - -0.1575350016355515 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -0.0808890536427498 - -0.6431419849395752 - 7.1740332059562206e-003 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -5.4260632023215294e-003 - 0.1353313028812408 - -0.1054790988564491 - <_> - - <_> - - - - <_>11 4 4 12 -1. - <_>11 4 2 12 2. - 0 - 0.0166308395564556 - 0.0416021011769772 - -0.2666820883750916 - <_> - - <_> - - - - <_>7 4 5 14 -1. - <_>7 11 5 7 2. - 0 - 1.7991060158237815e-003 - 0.0595310889184475 - -0.1835530996322632 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 0.0272199697792530 - -0.0265868306159973 - 0.2272228002548218 - <_> - - <_> - - - - <_>5 4 4 12 -1. - <_>7 4 2 12 2. - 0 - -9.6450755372643471e-003 - -0.2142816931009293 - 0.0495157316327095 - <_> - - <_> - - - - <_>4 11 12 7 -1. - <_>4 11 6 7 2. - 0 - 0.0831238031387329 - -0.0421768911182880 - 0.3079341948032379 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 0.0144064500927925 - -0.0295000206679106 - 0.3214437961578369 - <_> - - <_> - - - - <_>5 6 12 6 -1. - <_>11 6 6 3 2. - <_>5 9 6 3 2. - 0 - 4.7938730567693710e-003 - 0.0512440912425518 - -0.1093185022473335 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>3 11 7 2 2. - <_>10 13 7 2 2. - 0 - -2.8978011105209589e-003 - -0.1434437036514282 - 0.0665972232818604 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - -0.0458876900374889 - 0.1800383031368256 - -0.0156427901238203 - <_> - - <_> - - - - <_>4 0 12 10 -1. - <_>4 0 6 5 2. - <_>10 5 6 5 2. - 0 - -0.0547177009284496 - -0.3511080145835877 - 0.0304388906806707 - <_> - - <_> - - - - <_>8 5 12 15 -1. - <_>8 5 6 15 2. - 0 - -0.0197873692959547 - 0.0933853313326836 - -0.0493825711309910 - <_> - - <_> - - - - <_>1 12 14 3 -1. - <_>1 13 14 1 3. - 0 - 2.5110379792749882e-003 - -0.0666726008057594 - 0.1440619975328445 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0536601506173611 - 0.0144688403233886 - -0.6700747013092041 - <_> - - <_> - - - - <_>2 17 16 3 -1. - <_>10 17 8 3 2. - 0 - -8.1825470551848412e-003 - 0.1151012033224106 - -0.0809326171875000 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -3.5225939936935902e-003 - -0.1418114006519318 - 0.0613306201994419 - <_> - - <_> - - - - <_>7 8 4 9 -1. - <_>9 8 2 9 2. - 0 - 0.0282715503126383 - -0.0283538904041052 - 0.3704513013362885 - <_> - - <_> - - - - <_>4 3 12 12 -1. - <_>10 3 6 6 2. - <_>4 9 6 6 2. - 0 - -0.0649230182170868 - -0.4648115932941437 - 0.0228072591125965 - <_> - - <_> - - - - <_>0 0 6 20 -1. - <_>3 0 3 20 2. - 0 - -0.3506585061550140 - -0.8252905011177063 - 0.0110314600169659 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - 5.1821782253682613e-003 - 0.0365832708775997 - -0.2456717938184738 - <_> - - <_> - - - - <_>3 13 14 2 -1. - <_>3 14 14 1 2. - 0 - 9.2609220882877707e-004 - -0.0618987381458282 - 0.1930757015943527 - <_> - - <_> - - - - <_>13 11 7 4 -1. - <_>13 13 7 2 2. - 0 - 2.5952830910682678e-003 - 0.0430157184600830 - -0.1977027058601379 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - 3.4880579914897680e-003 - -0.0682965368032455 - 0.1572528034448624 - <_> - - <_> - - - - <_>13 1 6 12 -1. - <_>15 1 2 12 3. - 0 - 2.4002529680728912e-003 - -0.0686181783676147 - 0.0685519874095917 - <_> - - <_> - - - - <_>1 1 6 12 -1. - <_>3 1 2 12 3. - 0 - 1.2020230060443282e-003 - -0.1207313984632492 - 0.0950265228748322 - <_> - - <_> - - - - <_>4 8 14 12 -1. - <_>4 12 14 4 3. - 0 - -0.0204703602939844 - -0.1289163976907730 - 0.0793865993618965 - <_> - - <_> - - - - <_>0 6 6 12 -1. - <_>3 6 3 12 2. - 0 - -0.0595161803066731 - 0.2486968934535980 - -0.0497291609644890 - <_> - - <_> - - - - <_>13 1 3 13 -1. - <_>14 1 1 13 3. - 0 - -0.0105689503252506 - -0.1858384013175964 - 0.0207003206014633 - <_> - - <_> - - - - <_>4 1 3 13 -1. - <_>5 1 1 13 3. - 0 - -0.0141929201781750 - -0.3813742995262146 - 0.0298792794346809 - <_> - - <_> - - - - <_>16 2 3 14 -1. - <_>17 2 1 14 3. - 0 - -2.4968578945845366e-003 - 0.0915166810154915 - -0.0501783117651939 - <_> - - <_> - - - - <_>1 2 3 14 -1. - <_>2 2 1 14 3. - 0 - 1.7714010027702898e-004 - -0.1147001981735230 - 0.0992456972599030 - <_> - - <_> - - - - <_>6 9 14 3 -1. - <_>6 10 14 1 3. - 0 - 0.0783186703920364 - 3.6057420074939728e-003 - -0.9999607205390930 - <_> - - <_> - - - - <_>0 9 14 3 -1. - <_>0 10 14 1 3. - 0 - 1.5502399764955044e-003 - -0.1288861036300659 - 0.0798220112919807 - <_> - - <_> - - - - <_>4 6 14 6 -1. - <_>11 6 7 3 2. - <_>4 9 7 3 2. - 0 - -6.6678877919912338e-003 - -0.0882445573806763 - 0.0281025990843773 - <_> - - <_> - - - - <_>2 6 14 6 -1. - <_>2 6 7 3 2. - <_>9 9 7 3 2. - 0 - -4.0497239679098129e-003 - -0.1442718058824539 - 0.0871263965964317 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - -0.0354815311729908 - -0.4468117058277130 - 0.0148082701489329 - <_> - - <_> - - - - <_>3 1 10 16 -1. - <_>3 1 5 8 2. - <_>8 9 5 8 2. - 0 - -0.0125977201387286 - 0.0893241912126541 - -0.1251814067363739 - <_> - - <_> - - - - <_>3 7 14 12 -1. - <_>10 7 7 6 2. - <_>3 13 7 6 2. - 0 - 7.4662449769675732e-003 - 0.0748881995677948 - -0.1358778029680252 - <_> - - <_> - - - - <_>2 2 13 6 -1. - <_>2 5 13 3 2. - 0 - -0.0675369873642921 - 0.2341682016849518 - -0.0409522689878941 - <_> - - <_> - - - - <_>14 1 6 6 -1. - <_>14 4 6 3 2. - 0 - 0.0827041715383530 - 7.6422439888119698e-003 - -0.8517755270004273 - <_> - - <_> - - - - <_>0 1 6 6 -1. - <_>0 4 6 3 2. - 0 - -7.1595138870179653e-003 - -0.1873801052570343 - 0.0552884191274643 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0104810697957873 - 0.1827110946178436 - -0.0596419684588909 - <_> - - <_> - - - - <_>2 0 4 14 -1. - <_>4 0 2 14 2. - 0 - 4.5238467864692211e-003 - -0.0838176012039185 - 0.1482218056917191 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - -2.6731120306067169e-004 - -0.2089677006006241 - 0.0458357296884060 - <_> - - <_> - - - - <_>1 8 18 3 -1. - <_>7 8 6 3 3. - 0 - 0.0338385812938213 - 0.0425828695297241 - -0.2188381999731064 - <_> - - <_> - - - - <_>4 7 13 2 -1. - <_>4 8 13 1 2. - 0 - 2.2287720348685980e-003 - -0.1328423023223877 - 0.0817953199148178 - <_> - - <_> - - - - <_>2 1 16 6 -1. - <_>2 1 8 3 2. - <_>10 4 8 3 2. - 0 - -5.4200361482799053e-003 - -0.1389651000499725 - 0.0711547136306763 - <_> - - <_> - - - - <_>9 5 7 9 -1. - <_>9 8 7 3 3. - 0 - -0.0496429689228535 - 0.4890164136886597 - -0.0115569597110152 - <_> - - <_> - - - - <_>2 9 8 8 -1. - <_>2 9 4 4 2. - <_>6 13 4 4 2. - 0 - 3.3323399256914854e-003 - 0.0514261610805988 - -0.1826944053173065 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 0.0243439394980669 - -0.0318395607173443 - 0.1275885999202728 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0237744897603989 - 0.3277355134487152 - -0.0272167604416609 - <_> - - <_> - - - - <_>13 10 7 6 -1. - <_>13 12 7 2 3. - 0 - 3.6809889134019613e-003 - 0.0529220402240753 - -0.1288072019815445 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - -3.2609070185571909e-003 - -0.1494812071323395 - 0.0657335370779037 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 0.0107938898727298 - -0.0329699516296387 - 0.3295542001724243 - <_> - - <_> - - - - <_>1 15 14 2 -1. - <_>1 16 14 1 2. - 0 - 5.4287910461425781e-004 - -0.1067868024110794 - 0.0985642299056053 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - 0.0119027597829700 - 0.0356829203665257 - -0.3131744861602783 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.4277849588543177e-003 - -0.0620806589722633 - 0.1759850978851318 - <_> - - <_> - - - - <_>7 13 7 6 -1. - <_>7 15 7 2 3. - 0 - -4.4930889271199703e-003 - 0.1179085001349449 - -0.1059319972991943 - -1.5360039472579956 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>5 5 6 10 -1. - <_>5 5 3 5 2. - <_>8 10 3 5 2. - 0 - -0.0206564702093601 - 0.2536514997482300 - -0.3104461133480072 - <_> - - <_> - - - - <_>5 4 10 4 -1. - <_>5 6 10 2 2. - 0 - -0.0365183502435684 - 0.2448413074016571 - -0.2322119027376175 - <_> - - <_> - - - - <_>1 0 18 20 -1. - <_>7 0 6 20 3. - 0 - 0.4931235015392304 - -0.1627524048089981 - 0.2811619043350220 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - 2.0970099285477772e-005 - -0.3084000945091248 - 0.1731754988431931 - <_> - - <_> - - - - <_>0 5 9 7 -1. - <_>3 5 3 7 3. - 0 - 0.0130829298868775 - -0.2598322033882141 - 0.1567586958408356 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 13 4 4 2. - 0 - -4.3061940232291818e-004 - 0.0785436034202576 - -0.3901607096195221 - <_> - - <_> - - - - <_>0 3 20 10 -1. - <_>0 8 20 5 2. - 0 - -0.0163674000650644 - -0.4300003945827484 - 0.0741416364908218 - <_> - - <_> - - - - <_>7 0 6 12 -1. - <_>9 0 2 12 3. - 0 - 0.0362693890929222 - -0.1707320064306259 - 0.1804596930742264 - <_> - - <_> - - - - <_>3 16 14 4 -1. - <_>3 18 14 2 2. - 0 - 0.0123402699828148 - 0.0887753814458847 - -0.3440265953540802 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 13 4 4 2. - 0 - -0.0735162869095802 - -0.4162347912788391 - -2.9528199229389429e-003 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>5 13 4 4 2. - 0 - 4.6191830188035965e-004 - 0.0656298995018005 - -0.4101825058460236 - <_> - - <_> - - - - <_>6 11 13 3 -1. - <_>6 12 13 1 3. - 0 - -0.0147440396249294 - 0.2277503013610840 - -0.0791848674416542 - <_> - - <_> - - - - <_>0 0 19 6 -1. - <_>0 2 19 2 3. - 0 - 4.2559150606393814e-003 - -0.2400496006011963 - 0.1132109016180039 - <_> - - <_> - - - - <_>2 3 16 2 -1. - <_>2 4 16 1 2. - 0 - -3.6180280148983002e-003 - -0.2761206924915314 - 0.1011805012822151 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0460129193961620 - 0.0457635894417763 - -0.5471364855766296 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0161818098276854 - 0.1948966979980469 - -0.0739553421735764 - <_> - - <_> - - - - <_>7 1 3 12 -1. - <_>7 7 3 6 2. - 0 - -2.3682719984208234e-005 - 0.1172968000173569 - -0.1939682960510254 - <_> - - <_> - - - - <_>12 4 4 10 -1. - <_>12 9 4 5 2. - 0 - -2.1599140018224716e-003 - -0.4565455019474030 - 0.0426995307207108 - <_> - - <_> - - - - <_>0 2 13 2 -1. - <_>0 3 13 1 2. - 0 - -7.9827345907688141e-003 - -0.5410720109939575 - 0.0400361306965351 - <_> - - <_> - - - - <_>7 6 8 4 -1. - <_>7 6 4 4 2. - 0 - -8.1530469469726086e-004 - -0.2064051926136017 - 0.0667950734496117 - <_> - - <_> - - - - <_>5 6 8 4 -1. - <_>9 6 4 4 2. - 0 - -4.7501060180366039e-003 - -0.3657212853431702 - 0.0756657496094704 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>10 11 7 2 2. - <_>3 13 7 2 2. - 0 - -0.0348701402544975 - -0.8009381294250488 - 0.0223565399646759 - <_> - - <_> - - - - <_>3 10 14 4 -1. - <_>3 10 7 2 2. - <_>10 12 7 2 2. - 0 - -0.0199495591223240 - -0.3911063075065613 - 0.0468446500599384 - <_> - - <_> - - - - <_>6 6 14 3 -1. - <_>6 7 14 1 3. - 0 - -5.9008211828768253e-003 - 0.0907564982771873 - -0.1760028004646301 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - -1.4019970549270511e-003 - -0.2926093041896820 - 0.0648941099643707 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0228869393467903 - -0.4839186966419220 - 0.0505149587988853 - <_> - - <_> - - - - <_>9 3 2 13 -1. - <_>10 3 1 13 2. - 0 - -0.0100392904132605 - 0.2692166864871979 - -0.0752743706107140 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - 0.0167291890829802 - -0.0732175335288048 - 0.2204515933990479 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0204239096492529 - -0.4516198039054871 - 0.0458581112325192 - <_> - - <_> - - - - <_>12 12 7 4 -1. - <_>12 14 7 2 2. - 0 - -0.0351046808063984 - -0.5516998171806335 - 0.0231183003634214 - <_> - - <_> - - - - <_>1 12 7 4 -1. - <_>1 14 7 2 2. - 0 - 0.0106979999691248 - 0.0335165895521641 - -0.5248265266418457 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 5 2. - <_>7 15 3 5 2. - 0 - -0.0389782413840294 - -0.6233118772506714 - 0.0268384199589491 - <_> - - <_> - - - - <_>1 17 13 3 -1. - <_>1 18 13 1 3. - 0 - 4.8226700164377689e-003 - -0.1121554970741272 - 0.1561378985643387 - <_> - - <_> - - - - <_>4 0 16 9 -1. - <_>4 0 8 9 2. - 0 - 0.3687823116779327 - 0.0198579803109169 - -0.6126074790954590 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - -7.7059920877218246e-003 - -0.3737111091613770 - 0.0437242388725281 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0668433234095573 - -0.5077208876609802 - 0.0244010891765356 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>0 3 10 2 2. - <_>10 5 10 2 2. - 0 - 0.0372730493545532 - 0.0365228801965714 - -0.4373561143875122 - <_> - - <_> - - - - <_>12 13 8 6 -1. - <_>12 15 8 2 3. - 0 - -0.0331052094697952 - -0.3443898856639862 - 0.0324401482939720 - <_> - - <_> - - - - <_>6 1 2 16 -1. - <_>7 1 1 16 2. - 0 - 5.3402669727802277e-003 - 0.0923857614398003 - -0.1782377958297730 - <_> - - <_> - - - - <_>10 0 10 19 -1. - <_>10 0 5 19 2. - 0 - 0.0215424392372370 - -0.1984867006540299 - 0.0519532002508640 - <_> - - <_> - - - - <_>2 0 14 18 -1. - <_>9 0 7 18 2. - 0 - 0.3328931033611298 - -0.0607502683997154 - 0.2892509996891022 - <_> - - <_> - - - - <_>9 3 5 9 -1. - <_>9 6 5 3 3. - 0 - -6.6301261540502310e-004 - 0.0336367189884186 - -0.2851041853427887 - <_> - - <_> - - - - <_>0 0 10 19 -1. - <_>5 0 5 19 2. - 0 - 0.0466867610812187 - -0.4988366961479187 - 0.0337760783731937 - <_> - - <_> - - - - <_>14 0 3 14 -1. - <_>15 0 1 14 3. - 0 - -2.2452229168266058e-003 - -0.1968539059162140 - 0.0951611772179604 - <_> - - <_> - - - - <_>3 0 3 14 -1. - <_>4 0 1 14 3. - 0 - -0.0114990202710032 - -0.3242388963699341 - 0.0524683594703674 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 0.0131345298141241 - -0.0675384923815727 - 0.2760593891143799 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - -0.0159789808094502 - 0.3149605095386505 - -0.0766573920845985 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 0.0241997502744198 - 0.0558365210890770 - -0.3660989999771118 - <_> - - <_> - - - - <_>0 10 13 3 -1. - <_>0 11 13 1 3. - 0 - 4.0229028090834618e-003 - -0.1305347979068756 - 0.1347011029720306 - <_> - - <_> - - - - <_>12 11 5 9 -1. - <_>12 14 5 3 3. - 0 - -0.0141725903376937 - -0.0886165425181389 - 0.0550532788038254 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - 0.0189673993736506 - 0.0513485483825207 - -0.3143992125988007 - <_> - - <_> - - - - <_>12 5 4 8 -1. - <_>12 9 4 4 2. - 0 - 0.0265029706060886 - -0.1106597036123276 - 0.0880809277296066 - <_> - - <_> - - - - <_>0 13 8 6 -1. - <_>0 15 8 2 3. - 0 - -0.0396544896066189 - -0.5074297189712524 - 0.0329994410276413 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -8.9988503605127335e-003 - 0.1283013969659805 - -0.0730641335248947 - <_> - - <_> - - - - <_>2 5 16 8 -1. - <_>2 5 8 4 2. - <_>10 9 8 4 2. - 0 - 0.0746132880449295 - 0.0317298099398613 - -0.5389965772628784 - <_> - - <_> - - - - <_>14 3 6 8 -1. - <_>16 3 2 8 3. - 0 - 0.0334148705005646 - -0.0611305907368660 - 0.2466990053653717 - <_> - - <_> - - - - <_>8 4 3 10 -1. - <_>8 9 3 5 2. - 0 - 9.6071150619536638e-004 - 0.1252817958593369 - -0.1430419981479645 - <_> - - <_> - - - - <_>9 6 4 8 -1. - <_>9 10 4 4 2. - 0 - -8.6224973201751709e-003 - -0.2208179980516434 - 0.0475694388151169 - <_> - - <_> - - - - <_>0 4 6 7 -1. - <_>2 4 2 7 3. - 0 - 0.0398930087685585 - -0.0517743602395058 - 0.3173567950725555 - <_> - - <_> - - - - <_>5 1 10 6 -1. - <_>5 4 10 3 2. - 0 - 0.0853881165385246 - -0.0355843901634216 - 0.4197419881820679 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 6.3205747865140438e-003 - 0.0694125369191170 - -0.2997998893260956 - <_> - - <_> - - - - <_>10 4 8 8 -1. - <_>14 4 4 4 2. - <_>10 8 4 4 2. - 0 - -0.0589323118329048 - -0.4619421958923340 - 0.0222905408591032 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -0.0100544197484851 - 0.2364912927150726 - -0.0668119266629219 - <_> - - <_> - - - - <_>10 4 8 8 -1. - <_>14 4 4 4 2. - <_>10 8 4 4 2. - 0 - -2.5194720365107059e-005 - 0.0788154527544975 - -0.1158548966050148 - <_> - - <_> - - - - <_>2 4 8 8 -1. - <_>2 4 4 4 2. - <_>6 8 4 4 2. - 0 - -0.0593466497957706 - -0.5879974961280823 - 0.0304864197969437 - <_> - - <_> - - - - <_>13 0 2 20 -1. - <_>13 0 1 20 2. - 0 - 0.0204216595739126 - 0.0391840413212776 - -0.2698679864406586 - <_> - - <_> - - - - <_>3 14 7 6 -1. - <_>3 16 7 2 3. - 0 - -0.0403816401958466 - -0.6160110235214233 - 0.0253531001508236 - <_> - - <_> - - - - <_>2 2 18 4 -1. - <_>8 2 6 4 3. - 0 - 0.1787765026092529 - -0.0571357607841492 - 0.1736157983541489 - <_> - - <_> - - - - <_>6 0 6 10 -1. - <_>6 0 3 5 2. - <_>9 5 3 5 2. - 0 - -0.0221207402646542 - -0.3769758939743042 - 0.0426900498569012 - <_> - - <_> - - - - <_>4 6 16 3 -1. - <_>4 6 8 3 2. - 0 - 0.1158502027392387 - 9.8102567717432976e-003 - -0.6138088703155518 - <_> - - <_> - - - - <_>0 6 16 3 -1. - <_>8 6 8 3 2. - 0 - 0.0979448109865189 - 0.0363295599818230 - -0.4524078071117401 - <_> - - <_> - - - - <_>13 0 2 20 -1. - <_>13 0 1 20 2. - 0 - -0.0291230306029320 - -0.6560735702514648 - 8.4500880911946297e-003 - <_> - - <_> - - - - <_>2 1 16 3 -1. - <_>2 2 16 1 3. - 0 - -0.0130535997450352 - -0.3468565046787262 - 0.0465116798877716 - <_> - - <_> - - - - <_>13 0 2 20 -1. - <_>13 0 1 20 2. - 0 - 0.0134514896199107 - 0.0344204306602478 - -0.1016886979341507 - <_> - - <_> - - - - <_>5 0 2 20 -1. - <_>6 0 1 20 2. - 0 - -0.0239571407437325 - -0.8418948054313660 - 0.0193173196166754 - <_> - - <_> - - - - <_>5 0 15 8 -1. - <_>10 0 5 8 3. - 0 - -0.1345019042491913 - 0.3913233876228333 - -0.0219012591987848 - <_> - - <_> - - - - <_>0 0 15 8 -1. - <_>5 0 5 8 3. - 0 - -0.1034243032336235 - 0.6079022288322449 - -0.0258698798716068 - <_> - - <_> - - - - <_>11 3 6 7 -1. - <_>13 3 2 7 3. - 0 - -0.0414644293487072 - -0.3963131904602051 - 0.0377719812095165 - <_> - - <_> - - - - <_>3 3 6 7 -1. - <_>5 3 2 7 3. - 0 - -0.0349457487463951 - -0.4574693143367767 - 0.0329135693609715 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 0.0142899099737406 - -0.0507575310766697 - 0.3177290856838226 - <_> - - <_> - - - - <_>8 4 3 13 -1. - <_>9 4 1 13 3. - 0 - -5.4311589337885380e-003 - 0.2470868974924088 - -0.0785266235470772 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 2.6972589548677206e-003 - -0.3406186103820801 - 0.0509485192596912 - <_> - - <_> - - - - <_>3 1 6 10 -1. - <_>3 1 3 5 2. - <_>6 6 3 5 2. - 0 - -4.3831961229443550e-003 - 0.0800957977771759 - -0.2090218961238861 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0159583296626806 - -0.2462559044361115 - 0.0583482310175896 - <_> - - <_> - - - - <_>4 6 9 12 -1. - <_>4 12 9 6 2. - 0 - 0.0452523715794086 - 0.0416301414370537 - -0.3555093109607697 - <_> - - <_> - - - - <_>4 4 13 3 -1. - <_>4 5 13 1 3. - 0 - -0.0182781498879194 - 0.3080492913722992 - -0.0471848398447037 - <_> - - <_> - - - - <_>1 7 18 3 -1. - <_>1 8 18 1 3. - 0 - 0.0252776294946671 - 0.0296986494213343 - -0.5377609729766846 - <_> - - <_> - - - - <_>6 7 13 2 -1. - <_>6 8 13 1 2. - 0 - 7.2078350931406021e-003 - -0.1282051056623459 - 0.1175319030880928 - <_> - - <_> - - - - <_>6 3 7 16 -1. - <_>6 11 7 8 2. - 0 - -0.1401470005512238 - -0.4502086937427521 - 0.0327537916600704 - <_> - - <_> - - - - <_>8 11 6 9 -1. - <_>10 11 2 9 3. - 0 - -0.0458323694765568 - -0.4200083911418915 - 0.0241149291396141 - <_> - - <_> - - - - <_>6 11 6 9 -1. - <_>8 11 2 9 3. - 0 - -0.0439768992364407 - -0.4597324132919312 - 0.0336047410964966 - <_> - - <_> - - - - <_>10 5 3 13 -1. - <_>11 5 1 13 3. - 0 - -0.0101248202845454 - 0.1626081019639969 - -0.0664491578936577 - <_> - - <_> - - - - <_>7 4 3 13 -1. - <_>8 4 1 13 3. - 0 - -1.3071260182186961e-003 - 0.1160831004381180 - -0.1316865980625153 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - 0.0452848896384239 - 0.0357517600059509 - -0.4479573965072632 - <_> - - <_> - - - - <_>0 14 12 6 -1. - <_>0 14 6 3 2. - <_>6 17 6 3 2. - 0 - -0.0208510793745518 - 0.2466531991958618 - -0.0658545419573784 - <_> - - <_> - - - - <_>14 13 5 6 -1. - <_>14 16 5 3 2. - 0 - 2.6742550544440746e-003 - 0.0516831092536449 - -0.1369938999414444 - <_> - - <_> - - - - <_>1 13 5 6 -1. - <_>1 16 5 3 2. - 0 - 1.3148089637979865e-003 - 0.0777988731861115 - -0.2106450945138931 - <_> - - <_> - - - - <_>4 5 13 2 -1. - <_>4 6 13 1 2. - 0 - -0.0181747395545244 - 0.1735503971576691 - -0.0724171921610832 - <_> - - <_> - - - - <_>0 10 20 6 -1. - <_>0 10 10 3 2. - <_>10 13 10 3 2. - 0 - 0.0143143199384212 - 0.0817569866776466 - -0.1711145043373108 - <_> - - <_> - - - - <_>8 5 4 14 -1. - <_>10 5 2 7 2. - <_>8 12 2 7 2. - 0 - -0.0164864305406809 - 0.2280950993299484 - -0.0659063681960106 - <_> - - <_> - - - - <_>6 8 8 8 -1. - <_>6 8 4 4 2. - <_>10 12 4 4 2. - 0 - 0.0307560600340366 - 0.0387171395123005 - -0.4050514101982117 - <_> - - <_> - - - - <_>13 10 5 9 -1. - <_>13 13 5 3 3. - 0 - 0.0261060893535614 - 0.0308501999825239 - -0.2775925099849701 - <_> - - <_> - - - - <_>5 0 10 12 -1. - <_>5 0 5 6 2. - <_>10 6 5 6 2. - 0 - 0.0804011076688766 - 0.0297925006598234 - -0.4474256932735443 - <_> - - <_> - - - - <_>10 10 6 7 -1. - <_>12 10 2 7 3. - 0 - -0.0183507893234491 - 0.1151541993021965 - -0.0287443194538355 - <_> - - <_> - - - - <_>2 10 5 9 -1. - <_>2 13 5 3 3. - 0 - 0.0348270498216152 - 0.0287381391972303 - -0.4840180873870850 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>0 0 10 2 2. - 0 - -0.0882501825690269 - -0.4263553917407990 - 0.0301734898239374 - <_> - - <_> - - - - <_>1 0 4 18 -1. - <_>3 0 2 18 2. - 0 - 0.1483698934316635 - 0.0220897495746613 - -0.5536422729492188 - <_> - - <_> - - - - <_>15 2 5 6 -1. - <_>15 5 5 3 2. - 0 - -0.0189496092498302 - -0.2302016019821167 - 0.0392673015594482 - <_> - - <_> - - - - <_>2 4 14 6 -1. - <_>2 4 7 3 2. - <_>9 7 7 3 2. - 0 - -0.0567759498953819 - 0.3501352965831757 - -0.0408628284931183 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0622865408658981 - 0.0223445408046246 - -0.7108234167098999 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0386295504868031 - -0.3293349146842957 - 0.0385080687701702 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 0.0281543303281069 - -0.0736909136176109 - 0.1882437020540237 - <_> - - <_> - - - - <_>3 3 5 12 -1. - <_>3 9 5 6 2. - 0 - -0.0105701796710491 - -0.2780688107013702 - 0.0476791895925999 - <_> - - <_> - - - - <_>2 4 17 15 -1. - <_>2 9 17 5 3. - 0 - 0.0566045716404915 - 0.2476761043071747 - -0.0568309389054775 - <_> - - <_> - - - - <_>3 0 13 12 -1. - <_>3 4 13 4 3. - 0 - -0.2852267026901245 - 0.5234540104866028 - -0.0236528292298317 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>2 18 18 1 3. - 0 - 0.0348071381449699 - 0.0248199105262756 - -0.4320527017116547 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0232187993824482 - 0.2992916107177734 - -0.0447126701474190 - <_> - - <_> - - - - <_>2 0 18 6 -1. - <_>8 0 6 6 3. - 0 - -0.0630943924188614 - 0.3327926099300385 - -0.0160754993557930 - <_> - - <_> - - - - <_>0 0 18 9 -1. - <_>6 0 6 9 3. - 0 - 0.3018243014812470 - -0.0751969069242477 - 0.1913980990648270 - <_> - - <_> - - - - <_>10 2 6 7 -1. - <_>12 2 2 7 3. - 0 - 0.0230778697878122 - 0.0368449799716473 - -0.2876125872135162 - <_> - - <_> - - - - <_>1 6 15 4 -1. - <_>6 6 5 4 3. - 0 - 0.1096414998173714 - 0.0375481210649014 - -0.4176355898380280 - <_> - - <_> - - - - <_>5 1 12 9 -1. - <_>5 4 12 3 3. - 0 - 0.0296720396727324 - -0.0784098207950592 - 0.1306421011686325 - <_> - - <_> - - - - <_>6 7 4 12 -1. - <_>6 13 4 6 2. - 0 - 6.3356538303196430e-003 - 0.0670143216848373 - -0.2048150002956390 - <_> - - <_> - - - - <_>10 6 6 10 -1. - <_>12 6 2 10 3. - 0 - -0.0199409499764442 - 0.0846636369824409 - -0.0420694090425968 - <_> - - <_> - - - - <_>3 12 9 4 -1. - <_>3 14 9 2 2. - 0 - -0.0479880012571812 - -0.6109951734542847 - 0.0228422600775957 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - 0.0482800193130970 - 7.4727279134094715e-003 - -0.7515329718589783 - <_> - - <_> - - - - <_>4 3 5 9 -1. - <_>4 6 5 3 3. - 0 - -2.5825301418080926e-004 - 0.0355170890688896 - -0.3268606960773468 - <_> - - <_> - - - - <_>1 7 18 5 -1. - <_>7 7 6 5 3. - 0 - -0.0481753088533878 - -0.5809946060180664 - 0.0197607595473528 - <_> - - <_> - - - - <_>6 4 6 8 -1. - <_>8 4 2 8 3. - 0 - -0.0286063402891159 - 0.3209697008132935 - -0.0407343208789825 - <_> - - <_> - - - - <_>10 1 6 8 -1. - <_>12 1 2 8 3. - 0 - -0.0433285310864449 - -0.3302142918109894 - 0.0315272398293018 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 0.0227534100413322 - 0.0373278297483921 - -0.3629173934459686 - <_> - - <_> - - - - <_>7 0 13 2 -1. - <_>7 1 13 1 2. - 0 - 1.8975350030814297e-005 - -0.1150334998965263 - 0.0418166406452656 - <_> - - <_> - - - - <_>0 4 18 5 -1. - <_>6 4 6 5 3. - 0 - 0.1807754039764404 - -0.0557518713176250 - 0.2242483049631119 - <_> - - <_> - - - - <_>10 5 6 11 -1. - <_>12 5 2 11 3. - 0 - -0.1253914982080460 - -0.8809840083122253 - 3.8788339588791132e-003 - <_> - - <_> - - - - <_>3 5 4 11 -1. - <_>5 5 2 11 2. - 0 - -8.0908974632620811e-003 - 0.2621070146560669 - -0.0537066496908665 - <_> - - <_> - - - - <_>9 9 9 10 -1. - <_>12 9 3 10 3. - 0 - 9.9102966487407684e-003 - -0.1297809928655624 - 0.0836358070373535 - <_> - - <_> - - - - <_>2 9 9 10 -1. - <_>5 9 3 10 3. - 0 - 0.0247929207980633 - -0.1458443999290466 - 0.0923056602478027 - <_> - - <_> - - - - <_>7 7 6 9 -1. - <_>9 7 2 9 3. - 0 - 0.0450748801231384 - -0.0723754987120628 - 0.2605743110179901 - <_> - - <_> - - - - <_>5 0 6 15 -1. - <_>7 0 2 15 3. - 0 - -0.0792055130004883 - -0.6207352280616760 - 0.0213233493268490 - <_> - - <_> - - - - <_>6 12 10 6 -1. - <_>11 12 5 3 2. - <_>6 15 5 3 2. - 0 - -0.0447252504527569 - -0.6424819827079773 - 9.5317112281918526e-003 - <_> - - <_> - - - - <_>0 17 15 3 -1. - <_>5 17 5 3 3. - 0 - -0.0340657792985439 - 0.3075971007347107 - -0.0422969907522202 - <_> - - <_> - - - - <_>11 10 6 10 -1. - <_>14 10 3 5 2. - <_>11 15 3 5 2. - 0 - -0.0297567397356033 - 0.2521165013313294 - -0.0311830304563046 - <_> - - <_> - - - - <_>4 12 10 6 -1. - <_>4 12 5 3 2. - <_>9 15 5 3 2. - 0 - -0.0320269502699375 - -0.5530080199241638 - 0.0280215702950954 - -1.7262409925460815 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>0 0 18 5 -1. - <_>6 0 6 5 3. - 0 - 0.0286526195704937 - -0.2182213962078095 - 0.2267557978630066 - <_> - - <_> - - - - <_>2 1 18 6 -1. - <_>2 3 18 2 3. - 0 - 4.3320041149854660e-003 - -0.2859787940979004 - 0.1058920994400978 - <_> - - <_> - - - - <_>2 10 9 6 -1. - <_>2 12 9 2 3. - 0 - 5.6604119017720222e-003 - 0.0882954522967339 - -0.3892048001289368 - <_> - - <_> - - - - <_>9 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 2.4440148845314980e-003 - -0.3548268079757690 - 0.0993623733520508 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 2.2643520496785641e-003 - -0.2885844111442566 - 0.0883678570389748 - <_> - - <_> - - - - <_>7 12 6 7 -1. - <_>9 12 2 7 3. - 0 - 5.3952648304402828e-003 - 0.0855373814702034 - -0.3036639988422394 - <_> - - <_> - - - - <_>4 10 5 6 -1. - <_>4 13 5 3 2. - 0 - -7.2699488373473287e-004 - 0.0748402401804924 - -0.3403978049755096 - <_> - - <_> - - - - <_>12 2 6 10 -1. - <_>15 2 3 5 2. - <_>12 7 3 5 2. - 0 - -9.7503658616915345e-004 - 0.1200862973928452 - -0.2563441097736359 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 4.0540988557040691e-003 - 0.0672660320997238 - -0.3570193946361542 - <_> - - <_> - - - - <_>4 6 12 8 -1. - <_>4 10 12 4 2. - 0 - 2.5258921086788177e-003 - -0.4196647107601166 - 0.0556657984852791 - <_> - - <_> - - - - <_>2 2 6 10 -1. - <_>2 2 3 5 2. - <_>5 7 3 5 2. - 0 - -1.2021360453218222e-003 - 0.1000448018312454 - -0.2193232029676437 - <_> - - <_> - - - - <_>6 15 14 2 -1. - <_>6 16 14 1 2. - 0 - 7.7549100387841463e-004 - -0.1356272995471954 - 0.1197365969419479 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -0.0506998486816883 - 0.4541828930377960 - -0.0390303507447243 - <_> - - <_> - - - - <_>6 2 9 5 -1. - <_>9 2 3 5 3. - 0 - 0.0133644901216030 - 0.1116603985428810 - -0.1793878972530365 - <_> - - <_> - - - - <_>1 14 8 6 -1. - <_>1 16 8 2 3. - 0 - -0.0154189802706242 - -0.3518005907535553 - 0.0473549999296665 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - -0.0429810993373394 - 0.3923279941082001 - -0.0453370288014412 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 6.2867929227650166e-003 - 0.0643318220973015 - -0.2223951071500778 - <_> - - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -3.5951940808445215e-003 - 0.0954042971134186 - -0.1533828973770142 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0767609179019928 - -0.6509981751441956 - 0.0172836501151323 - <_> - - <_> - - - - <_>2 8 18 2 -1. - <_>2 9 18 1 2. - 0 - 4.6225200640037656e-004 - -0.4341560900211334 - 0.0252418592572212 - <_> - - <_> - - - - <_>2 0 14 2 -1. - <_>2 1 14 1 2. - 0 - 7.5868278509005904e-004 - -0.1462433040142059 - 0.0963190719485283 - <_> - - <_> - - - - <_>11 10 4 7 -1. - <_>11 10 2 7 2. - 0 - -5.0252641085535288e-004 - 0.1358402073383331 - -0.2318104058504105 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>8 14 4 6 3. - 0 - 9.7315143793821335e-003 - -0.0851555913686752 - 0.2015698999166489 - <_> - - <_> - - - - <_>11 10 4 7 -1. - <_>11 10 2 7 2. - 0 - -0.0264322292059660 - -0.3700251877307892 - 0.0246166307479143 - <_> - - <_> - - - - <_>5 10 4 7 -1. - <_>7 10 2 7 2. - 0 - -4.4683468877337873e-004 - 0.1004896014928818 - -0.1858860999345779 - <_> - - <_> - - - - <_>9 6 2 14 -1. - <_>9 13 2 7 2. - 0 - 1.9872789271175861e-003 - 0.0532239191234112 - -0.3160380125045776 - <_> - - <_> - - - - <_>2 17 15 3 -1. - <_>2 18 15 1 3. - 0 - 3.1368629424832761e-004 - -0.1321319043636322 - 0.0957717671990395 - <_> - - <_> - - - - <_>16 1 4 7 -1. - <_>16 1 2 7 2. - 0 - 5.9834700077772141e-003 - -0.0756818130612373 - 0.1523095071315765 - <_> - - <_> - - - - <_>5 13 4 7 -1. - <_>7 13 2 7 2. - 0 - -5.0965389236807823e-003 - -0.1847781985998154 - 0.0760221406817436 - <_> - - <_> - - - - <_>14 1 6 7 -1. - <_>16 1 2 7 3. - 0 - -0.0191876105964184 - 0.2143180966377258 - -0.0497642196714878 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>2 1 2 7 3. - 0 - 0.0233204793184996 - -0.0486893206834793 - 0.2657899856567383 - <_> - - <_> - - - - <_>4 3 13 2 -1. - <_>4 4 13 1 2. - 0 - -6.9449091097339988e-004 - -0.1543335020542145 - 0.0874106511473656 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 4.8893648199737072e-003 - 0.0513427890837193 - -0.2616536021232605 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - -0.0274288691580296 - -0.3797203898429871 - 0.0318211615085602 - <_> - - <_> - - - - <_>0 2 6 14 -1. - <_>2 2 2 14 3. - 0 - -0.0177345499396324 - 0.1997662037611008 - -0.0623180493712425 - <_> - - <_> - - - - <_>13 0 6 13 -1. - <_>15 0 2 13 3. - 0 - 0.1514825969934464 - 7.4510741978883743e-003 - -0.5803133249282837 - <_> - - <_> - - - - <_>1 0 6 13 -1. - <_>3 0 2 13 3. - 0 - 1.5324390260502696e-003 - -0.1251055002212524 - 0.1043189987540245 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>10 3 10 2 2. - <_>0 5 10 2 2. - 0 - -0.0123108103871346 - -0.2353972941637039 - 0.0536462105810642 - <_> - - <_> - - - - <_>0 7 12 11 -1. - <_>6 7 6 11 2. - 0 - -0.0112108001485467 - 0.1075923964381218 - -0.1205523014068604 - <_> - - <_> - - - - <_>7 11 7 6 -1. - <_>7 13 7 2 3. - 0 - 2.7532500680536032e-003 - -0.0664799064397812 - 0.1732115000486374 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -8.4678819403052330e-003 - -0.3185068070888519 - 0.0422808192670345 - <_> - - <_> - - - - <_>10 7 4 12 -1. - <_>10 7 2 12 2. - 0 - -7.3283319361507893e-003 - -0.1636925935745239 - 0.0317723490297794 - <_> - - <_> - - - - <_>4 7 11 4 -1. - <_>4 9 11 2 2. - 0 - 0.0471565499901772 - -0.0616670995950699 - 0.1741099059581757 - <_> - - <_> - - - - <_>5 7 10 6 -1. - <_>10 7 5 3 2. - <_>5 10 5 3 2. - 0 - 8.2125868648290634e-003 - 0.0670697987079620 - -0.2203007042407990 - <_> - - <_> - - - - <_>0 5 18 10 -1. - <_>0 5 9 5 2. - <_>9 10 9 5 2. - 0 - 7.6550841331481934e-003 - 0.0614223107695580 - -0.1935762017965317 - <_> - - <_> - - - - <_>0 0 20 4 -1. - <_>10 0 10 2 2. - <_>0 2 10 2 2. - 0 - -0.0453728511929512 - -0.4756565988063812 - 0.0228694695979357 - <_> - - <_> - - - - <_>2 4 13 3 -1. - <_>2 5 13 1 3. - 0 - 3.7434820551425219e-003 - -0.0909409224987030 - 0.1384121030569077 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 2.3490150924772024e-003 - 0.0632914975285530 - -0.1550638973712921 - <_> - - <_> - - - - <_>2 4 13 2 -1. - <_>2 5 13 1 2. - 0 - -0.0241497494280338 - 0.3458844125270844 - -0.0315258204936981 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>7 1 13 1 3. - 0 - 0.0148783503100276 - 0.0242150593549013 - -0.3238762915134430 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 0.0298431608825922 - -0.0278176907449961 - 0.4093947112560272 - <_> - - <_> - - - - <_>10 6 9 14 -1. - <_>13 6 3 14 3. - 0 - 7.1600051596760750e-003 - -0.0465962402522564 - 0.0745470672845840 - <_> - - <_> - - - - <_>1 6 9 14 -1. - <_>4 6 3 14 3. - 0 - 0.0562672093510628 - 0.0295518506318331 - -0.4009805917739868 - <_> - - <_> - - - - <_>8 1 5 10 -1. - <_>8 6 5 5 2. - 0 - -4.5356149785220623e-003 - 0.0818205773830414 - -0.1061929985880852 - <_> - - <_> - - - - <_>0 3 20 8 -1. - <_>0 7 20 4 2. - 0 - -0.0136973597109318 - -0.1935908943414688 - 0.0709177479147911 - <_> - - <_> - - - - <_>4 9 14 2 -1. - <_>4 10 14 1 2. - 0 - -1.5458730049431324e-003 - -0.2198767960071564 - 0.0283964890986681 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 2.9332858975976706e-003 - -0.0761532336473465 - 0.1646018028259277 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 3.4973609726876020e-003 - -0.0681960806250572 - 0.1671735048294067 - <_> - - <_> - - - - <_>3 13 14 6 -1. - <_>3 15 14 2 3. - 0 - -0.0183070693165064 - -0.1886709928512573 - 0.0699327364563942 - <_> - - <_> - - - - <_>6 11 13 9 -1. - <_>6 14 13 3 3. - 0 - -0.1709208041429520 - -0.5006777048110962 - 7.8164357692003250e-003 - <_> - - <_> - - - - <_>1 11 13 9 -1. - <_>1 14 13 3 3. - 0 - 4.1620130650699139e-003 - 0.0559000410139561 - -0.2297254949808121 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -0.0197243094444275 - 0.3299855887889862 - -0.0366024002432823 - <_> - - <_> - - - - <_>3 5 12 4 -1. - <_>7 5 4 4 3. - 0 - 5.3331600502133369e-003 - -0.1413425952196121 - 0.0882776379585266 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0421822182834148 - -0.6671878099441528 - 0.0157705098390579 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>6 0 6 4 3. - 0 - -5.2826730534434319e-003 - 0.1702563017606735 - -0.0684913173317909 - <_> - - <_> - - - - <_>9 1 4 10 -1. - <_>9 6 4 5 2. - 0 - -2.3227441124618053e-003 - 0.0723785907030106 - -0.1006670966744423 - <_> - - <_> - - - - <_>0 2 13 2 -1. - <_>0 3 13 1 2. - 0 - -1.6239390242844820e-003 - -0.2250131964683533 - 0.0558984987437725 - <_> - - <_> - - - - <_>7 1 8 8 -1. - <_>11 1 4 4 2. - <_>7 5 4 4 2. - 0 - 0.0560834109783173 - 0.0136461695656180 - -0.4930678904056549 - <_> - - <_> - - - - <_>5 7 6 12 -1. - <_>5 7 3 6 2. - <_>8 13 3 6 2. - 0 - -0.0301999300718308 - 0.2307083010673523 - -0.0536459386348724 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 0.0191576704382896 - 0.0368303209543228 - -0.3952297866344452 - <_> - - <_> - - - - <_>0 14 20 3 -1. - <_>0 15 20 1 3. - 0 - 3.5853029694408178e-003 - -0.0618932209908962 - 0.1758320927619934 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -0.0287753306329250 - -0.3183844089508057 - 0.0231037400662899 - <_> - - <_> - - - - <_>3 0 9 5 -1. - <_>6 0 3 5 3. - 0 - 2.5611401069909334e-003 - -0.1048441976308823 - 0.0971525683999062 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -0.0315544903278351 - 0.2936651110649109 - -0.0241890698671341 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>7 6 2 7 3. - 0 - -7.3520588921383023e-004 - 0.0977110415697098 - -0.1524803936481476 - <_> - - <_> - - - - <_>9 1 3 19 -1. - <_>10 1 1 19 3. - 0 - -0.0479938797652721 - -0.9458782076835632 - 9.0406481176614761e-003 - <_> - - <_> - - - - <_>0 11 7 4 -1. - <_>0 13 7 2 2. - 0 - 5.2936570718884468e-003 - 0.0333203710615635 - -0.3126893937587738 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 0.0169032495468855 - -0.0241327099502087 - 0.2848340868949890 - <_> - - <_> - - - - <_>0 11 5 6 -1. - <_>0 14 5 3 2. - 0 - -7.0723611861467361e-003 - -0.1752420067787170 - 0.0727138817310333 - <_> - - <_> - - - - <_>9 2 10 18 -1. - <_>14 2 5 9 2. - <_>9 11 5 9 2. - 0 - 0.0641916170716286 - -0.0209696702659130 - 0.3540262877941132 - <_> - - <_> - - - - <_>2 16 8 4 -1. - <_>6 16 4 4 2. - 0 - 2.9694940894842148e-003 - -0.0750869363546371 - 0.1432134956121445 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>9 4 2 8 3. - 0 - -0.0201052594929934 - 0.6078401207923889 - -0.0181044992059469 - <_> - - <_> - - - - <_>7 0 2 19 -1. - <_>8 0 1 19 2. - 0 - -0.0131698697805405 - -0.5467836856842041 - 0.0247422400861979 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0142267299816012 - -0.4672259092330933 - 0.0314896292984486 - <_> - - <_> - - - - <_>0 0 9 5 -1. - <_>3 0 3 5 3. - 0 - 0.0377461910247803 - -0.0384958311915398 - 0.3533348143100739 - <_> - - <_> - - - - <_>18 2 2 18 -1. - <_>18 2 1 18 2. - 0 - -3.8704369217157364e-003 - 0.1498429030179977 - -0.0565497688949108 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0115654403343797 - -0.1522793024778366 - 0.0760629624128342 - <_> - - <_> - - - - <_>18 2 2 18 -1. - <_>18 2 1 18 2. - 0 - -0.0888544768095016 - -0.7296792864799500 - 4.8231678083539009e-003 - <_> - - <_> - - - - <_>0 2 2 18 -1. - <_>1 2 1 18 2. - 0 - -2.0447981078177691e-003 - 0.1414818018674851 - -0.0832003578543663 - <_> - - <_> - - - - <_>7 4 7 15 -1. - <_>7 9 7 5 3. - 0 - -0.0117628602311015 - -0.4020051956176758 - 0.0266794394701719 - <_> - - <_> - - - - <_>7 13 6 6 -1. - <_>7 16 6 3 2. - 0 - -0.0175390299409628 - -0.3731625974178314 - 0.0301719792187214 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 3.8314110133796930e-003 - -0.0934099480509758 - 0.0795034989714623 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - -0.0144723597913980 - 0.3433358073234558 - -0.0436570607125759 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -0.0265166908502579 - -0.4823023080825806 - 0.0168116502463818 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -0.0331947915256023 - -0.4358026087284088 - 0.0226448904722929 - <_> - - <_> - - - - <_>17 0 3 16 -1. - <_>18 0 1 16 3. - 0 - 4.4987560249865055e-003 - -0.0322815403342247 - 0.0899463072419167 - <_> - - <_> - - - - <_>0 4 3 14 -1. - <_>1 4 1 14 3. - 0 - 3.6823831032961607e-003 - -0.0687554627656937 - 0.1433981060981751 - <_> - - <_> - - - - <_>14 8 6 5 -1. - <_>14 8 3 5 2. - 0 - -0.1118414029479027 - -0.7775676250457764 - 5.2246451377868652e-003 - <_> - - <_> - - - - <_>0 8 6 5 -1. - <_>3 8 3 5 2. - 0 - -0.0732550397515297 - -0.5563074946403503 - 0.0191271491348743 - <_> - - <_> - - - - <_>1 13 18 4 -1. - <_>10 13 9 2 2. - <_>1 15 9 2 2. - 0 - 0.0298557691276073 - 0.0211788304150105 - -0.4085004031658173 - <_> - - <_> - - - - <_>7 0 5 9 -1. - <_>7 3 5 3 3. - 0 - -0.0734722316265106 - 0.8282048702239990 - -0.0124529097229242 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -7.2046648710966110e-004 - 0.0996305271983147 - -0.0952788591384888 - <_> - - <_> - - - - <_>7 3 3 13 -1. - <_>8 3 1 13 3. - 0 - -3.8003330701030791e-004 - 0.1023110970854759 - -0.1035138964653015 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0454531088471413 - -0.6488506197929382 - 0.0119660003110766 - <_> - - <_> - - - - <_>5 0 6 10 -1. - <_>5 0 3 5 2. - <_>8 5 3 5 2. - 0 - -5.1456969231367111e-004 - -0.1508329957723618 - 0.0665444731712341 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0279491804540157 - 0.0171863995492458 - -0.3750118911266327 - <_> - - <_> - - - - <_>3 0 14 8 -1. - <_>3 4 14 4 2. - 0 - 0.0630398765206337 - -0.0438215881586075 - 0.2478944063186646 - <_> - - <_> - - - - <_>8 1 5 10 -1. - <_>8 6 5 5 2. - 0 - -2.2690258920192719e-003 - 0.0747120082378387 - -0.1113158017396927 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -3.8063840474933386e-003 - -0.1553090959787369 - 0.0652645081281662 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0371900908648968 - -0.0296986307948828 - 0.2307187020778656 - <_> - - <_> - - - - <_>2 18 15 2 -1. - <_>2 19 15 1 2. - 0 - 0.0218958407640457 - 0.0157785192131996 - -0.6300626993179321 - <_> - - <_> - - - - <_>8 7 6 7 -1. - <_>10 7 2 7 3. - 0 - -0.0319939889013767 - 0.2625089883804321 - -0.0246271099895239 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0167786795645952 - -0.4243698120117188 - 0.0226078499108553 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - 0.0524776615202427 - -0.0161884203553200 - 0.3176614046096802 - <_> - - <_> - - - - <_>0 7 12 4 -1. - <_>0 9 12 2 2. - 0 - 0.1044372990727425 - 0.0112902000546455 - -0.8602101802825928 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - -6.5574781037867069e-003 - 0.1222584992647171 - -0.0560914315283298 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>10 6 5 3 2. - 0 - 0.0167973898351192 - 0.0358115397393703 - -0.3116301000118256 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 5.0427159294486046e-003 - -0.0504395291209221 - 0.0639303326606750 - <_> - - <_> - - - - <_>3 16 14 4 -1. - <_>3 16 7 2 2. - <_>10 18 7 2 2. - 0 - -0.0345717892050743 - -0.5627837181091309 - 0.0166927408427000 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - 3.7999521009624004e-003 - -0.0685667470097542 - 0.0960178673267365 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - -0.0119955996051431 - 0.1381991058588028 - -0.0715100169181824 - <_> - - <_> - - - - <_>9 6 6 12 -1. - <_>9 6 3 12 2. - 0 - 0.0110984295606613 - 0.0535066202282906 - -0.1048208996653557 - <_> - - <_> - - - - <_>0 8 18 4 -1. - <_>6 8 6 4 3. - 0 - -0.1290529072284699 - -0.6726217865943909 - 0.0151958502829075 - <_> - - <_> - - - - <_>14 1 6 10 -1. - <_>16 1 2 10 3. - 0 - 6.3130040653049946e-003 - -0.0610301308333874 - 0.1035564988851547 - <_> - - <_> - - - - <_>6 9 8 10 -1. - <_>6 9 4 5 2. - <_>10 14 4 5 2. - 0 - 4.0955888107419014e-003 - 0.0705346465110779 - -0.1448426991701126 - <_> - - <_> - - - - <_>14 1 6 10 -1. - <_>16 1 2 10 3. - 0 - -0.0105305500328541 - 0.0985696390271187 - -0.0379732102155685 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - 3.6035990342497826e-003 - 0.0512777902185917 - -0.1867156028747559 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 1.1999369598925114e-003 - -0.0632314085960388 - 0.1044631004333496 - <_> - - <_> - - - - <_>1 14 5 6 -1. - <_>1 17 5 3 2. - 0 - -1.9585370318964124e-004 - 0.0860448628664017 - -0.1185685023665428 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - -0.1221356019377708 - -0.8841980099678040 - 6.3145011663436890e-003 - <_> - - <_> - - - - <_>1 11 6 6 -1. - <_>4 11 3 6 2. - 0 - -7.7650691382586956e-003 - 0.1372596025466919 - -0.0804128572344780 - <_> - - <_> - - - - <_>4 7 15 7 -1. - <_>9 7 5 7 3. - 0 - 0.1573431938886643 - 0.0127433203160763 - -0.6540129780769348 - <_> - - <_> - - - - <_>3 6 12 11 -1. - <_>7 6 4 11 3. - 0 - -7.6066371984779835e-003 - -0.1379771977663040 - 0.0760624930262566 - <_> - - <_> - - - - <_>8 4 6 7 -1. - <_>10 4 2 7 3. - 0 - -4.3096300214529037e-003 - 0.1119519993662834 - -0.0323907099664211 - <_> - - <_> - - - - <_>6 4 6 7 -1. - <_>8 4 2 7 3. - 0 - -3.2239840365946293e-003 - 0.2142059952020645 - -0.0582446306943893 - <_> - - <_> - - - - <_>11 2 2 15 -1. - <_>11 2 1 15 2. - 0 - 8.3754826337099075e-003 - 0.0476155988872051 - -0.2421604990959168 - <_> - - <_> - - - - <_>0 1 6 10 -1. - <_>2 1 2 10 3. - 0 - 3.0904430896043777e-003 - -0.0904186815023422 - 0.0992448329925537 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>15 0 5 3 2. - <_>10 3 5 3 2. - 0 - 9.8243616521358490e-003 - -0.0446439199149609 - 0.1042303964495659 - <_> - - <_> - - - - <_>1 0 15 3 -1. - <_>1 1 15 1 3. - 0 - -3.2808810938149691e-003 - -0.1912315934896469 - 0.0631415173411369 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>7 1 13 1 3. - 0 - 3.6370379384607077e-003 - 0.0369447395205498 - -0.1198861971497536 - <_> - - <_> - - - - <_>0 0 10 6 -1. - <_>0 0 5 3 2. - <_>5 3 5 3 2. - 0 - 7.8952945768833160e-003 - -0.0713135302066803 - 0.1610739976167679 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 6 2 12 2. - 0 - -3.3853040076792240e-003 - -0.1170492991805077 - 0.0255792494863272 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>9 6 2 12 2. - 0 - -2.6786550879478455e-003 - -0.1706400960683823 - 0.0606274604797363 - <_> - - <_> - - - - <_>9 0 6 18 -1. - <_>12 0 3 9 2. - <_>9 9 3 9 2. - 0 - -4.5887688174843788e-003 - 0.0347797907888889 - -0.0688178315758705 - <_> - - <_> - - - - <_>3 9 14 2 -1. - <_>10 9 7 2 2. - 0 - -0.0616423003375530 - 0.5110810995101929 - -0.0197522398084402 - <_> - - <_> - - - - <_>13 10 7 6 -1. - <_>13 12 7 2 3. - 0 - 0.0252351593226194 - 0.0202030707150698 - -0.3435991108417511 - <_> - - <_> - - - - <_>6 2 4 12 -1. - <_>6 6 4 4 3. - 0 - -2.1312809549272060e-003 - 0.0546982102096081 - -0.1651237010955811 - <_> - - <_> - - - - <_>3 1 14 6 -1. - <_>3 1 7 6 2. - 0 - -0.0825988426804543 - 0.3380466997623444 - -0.0280265696346760 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - -5.6678601540625095e-003 - -0.3378623127937317 - 0.0297270491719246 - <_> - - <_> - - - - <_>9 4 7 4 -1. - <_>9 6 7 2 2. - 0 - -0.0933173969388008 - -0.6723803281784058 - 2.0025020930916071e-003 - <_> - - <_> - - - - <_>0 9 15 3 -1. - <_>0 10 15 1 3. - 0 - 9.2052231775596738e-004 - -0.1397425979375839 - 0.0631755962967873 - <_> - - <_> - - - - <_>7 0 8 8 -1. - <_>11 0 4 4 2. - <_>7 4 4 4 2. - 0 - 5.1411538152024150e-004 - -0.0815852507948875 - 0.0593242794275284 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>0 3 10 2 2. - <_>10 5 10 2 2. - 0 - -6.7130490206182003e-003 - -0.1664599031209946 - 0.0615608096122742 - <_> - - <_> - - - - <_>10 2 10 3 -1. - <_>10 2 5 3 2. - 0 - 3.1578689813613892e-003 - -0.1071007028222084 - 0.0666951164603233 - <_> - - <_> - - - - <_>4 4 7 4 -1. - <_>4 6 7 2 2. - 0 - 0.0122020300477743 - -0.0248453002423048 - 0.4245803058147430 - <_> - - <_> - - - - <_>10 2 10 3 -1. - <_>10 2 5 3 2. - 0 - -0.0285851694643497 - 0.2352683991193771 - -0.0211214404553175 - <_> - - <_> - - - - <_>2 11 12 6 -1. - <_>2 11 6 3 2. - <_>8 14 6 3 2. - 0 - 2.3390499409288168e-003 - 0.0644411072134972 - -0.1406358033418655 - <_> - - <_> - - - - <_>0 0 20 10 -1. - <_>0 5 20 5 2. - 0 - 0.3590093851089478 - 0.0121229197829962 - -0.7312114238739014 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 7.6048658229410648e-003 - -0.0407009311020374 - 0.2358103990554810 - <_> - - <_> - - - - <_>12 13 8 6 -1. - <_>12 15 8 2 3. - 0 - 4.4263368472456932e-003 - 0.0530396290123463 - -0.1591202020645142 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - 8.5811351891607046e-004 - -0.0852659568190575 - 0.1048922017216682 - <_> - - <_> - - - - <_>12 13 8 6 -1. - <_>12 15 8 2 3. - 0 - -4.2959367856383324e-003 - -0.1285184025764465 - 0.0627527534961700 - <_> - - <_> - - - - <_>0 13 8 6 -1. - <_>0 15 8 2 3. - 0 - 4.4881720095872879e-003 - 0.0646714419126511 - -0.1878965049982071 - <_> - - <_> - - - - <_>12 0 8 12 -1. - <_>16 0 4 6 2. - <_>12 6 4 6 2. - 0 - -0.0498696193099022 - 0.2149675935506821 - -0.0355770215392113 - <_> - - <_> - - - - <_>7 1 6 14 -1. - <_>7 8 6 7 2. - 0 - -0.1194223016500473 - -0.6795393824577332 - 0.0150915700942278 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 6.2965508550405502e-004 - -0.0921454206109047 - 0.0618066489696503 - <_> - - <_> - - - - <_>7 7 6 9 -1. - <_>7 10 6 3 3. - 0 - 2.9381969943642616e-003 - 0.1790324002504349 - -0.0493559986352921 - <_> - - <_> - - - - <_>5 6 13 3 -1. - <_>5 7 13 1 3. - 0 - -0.0228606797754765 - 0.2097624987363815 - -0.0313708893954754 - <_> - - <_> - - - - <_>2 4 8 8 -1. - <_>2 4 4 4 2. - <_>6 8 4 4 2. - 0 - 0.0433696210384369 - 0.0182863306254148 - -0.5128899812698364 - <_> - - <_> - - - - <_>11 4 8 16 -1. - <_>15 4 4 8 2. - <_>11 12 4 8 2. - 0 - 0.1993250995874405 - 6.7204708466306329e-004 - -0.8976935744285584 - <_> - - <_> - - - - <_>1 4 8 16 -1. - <_>1 4 4 8 2. - <_>5 12 4 8 2. - 0 - 0.0807512030005455 - -0.0208696499466896 - 0.4376870095729828 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 14 4 4 2. - 0 - 1.5349129680544138e-003 - 0.0367617607116699 - -0.2220399975776672 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - -3.6580949090421200e-003 - -0.1547171026468277 - 0.0672298967838287 - <_> - - <_> - - - - <_>4 0 12 8 -1. - <_>4 4 12 4 2. - 0 - 0.0247432906180620 - -0.0554747097194195 - 0.1742957979440689 - <_> - - <_> - - - - <_>5 1 8 6 -1. - <_>5 4 8 3 2. - 0 - -0.0164515003561974 - 0.1881732046604157 - -0.0557190105319023 - <_> - - <_> - - - - <_>5 2 15 2 -1. - <_>5 3 15 1 2. - 0 - -8.4505761042237282e-003 - -0.3294366896152496 - 0.0227437205612659 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 0.0293691791594028 - 0.0154793104156852 - -0.5909963250160217 - <_> - - <_> - - - - <_>10 2 10 3 -1. - <_>10 2 5 3 2. - 0 - 0.1052479967474937 - 2.1177560556679964e-003 - -0.4921272099018097 - <_> - - <_> - - - - <_>1 0 10 6 -1. - <_>1 0 5 3 2. - <_>6 3 5 3 2. - 0 - -0.0278161503374577 - 0.3642143905162811 - -0.0251631196588278 - <_> - - <_> - - - - <_>10 2 10 3 -1. - <_>10 2 5 3 2. - 0 - 5.3339339792728424e-003 - -0.0484023503959179 - 0.0398515611886978 - <_> - - <_> - - - - <_>0 5 7 6 -1. - <_>0 7 7 2 3. - 0 - 0.0116827301681042 - 0.0248983409255743 - -0.3571999967098236 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 8.9094992727041245e-003 - 0.0465792603790760 - -0.1508810073137283 - <_> - - <_> - - - - <_>1 1 18 8 -1. - <_>1 1 9 4 2. - <_>10 5 9 4 2. - 0 - 7.3203681968152523e-003 - 0.0708918794989586 - -0.1327854990959168 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - -0.0203111302107573 - 0.1778337955474854 - -0.0375380516052246 - <_> - - <_> - - - - <_>0 15 14 4 -1. - <_>0 15 7 2 2. - <_>7 17 7 2 2. - 0 - 1.3689160114154220e-003 - -0.1209644973278046 - 0.0780178233981133 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - 0.0769940912723541 - -8.7762605398893356e-003 - 0.3299356102943420 - <_> - - <_> - - - - <_>0 2 4 18 -1. - <_>0 2 2 9 2. - <_>2 11 2 9 2. - 0 - 8.8949268683791161e-003 - -0.0555532500147820 - 0.1637210994958878 - <_> - - <_> - - - - <_>10 6 6 11 -1. - <_>10 6 3 11 2. - 0 - -0.0185184404253960 - -0.1447957009077072 - 0.0302502606064081 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>10 6 10 2 2. - 0 - -0.0401748791337013 - -0.2499050945043564 - 0.0407887883484364 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - 0.0651764869689941 - -0.0143930902704597 - 0.3770706951618195 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0148459300398827 - 0.2737560868263245 - -0.0338984094560146 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - -0.6143465042114258 - -0.6916775107383728 - 4.0905540809035301e-003 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1411989033222199 - 0.0166438706219196 - -0.5894458293914795 - -1.4976780414581299 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>7 2 6 7 -1. - <_>9 2 2 7 3. - 0 - 0.0219626706093550 - -0.3090349137783051 - 0.2152978926897049 - <_> - - <_> - - - - <_>12 2 8 4 -1. - <_>12 2 4 4 2. - 0 - 0.0512725301086903 - -0.2228662967681885 - 0.2986971139907837 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0418700091540813 - -0.2784911990165710 - 0.2041607052087784 - <_> - - <_> - - - - <_>13 1 6 6 -1. - <_>13 1 3 6 2. - 0 - 6.7551871761679649e-003 - -0.2198854982852936 - 0.0738870203495026 - <_> - - <_> - - - - <_>0 3 6 7 -1. - <_>3 3 3 7 2. - 0 - 0.0173116903752089 - -0.3422743082046509 - 0.1319016069173813 - <_> - - <_> - - - - <_>8 12 10 8 -1. - <_>13 12 5 4 2. - <_>8 16 5 4 2. - 0 - 0.0153991095721722 - -0.2314949929714203 - 0.1882805973291397 - <_> - - <_> - - - - <_>2 9 12 10 -1. - <_>2 9 6 5 2. - <_>8 14 6 5 2. - 0 - -0.0107927303761244 - -0.3081369102001190 - 0.1119152978062630 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 14 8 4 2. - 0 - 8.5879449034109712e-004 - 0.0722382068634033 - -0.4462434947490692 - <_> - - <_> - - - - <_>1 1 8 6 -1. - <_>1 3 8 2 3. - 0 - 9.2791311908513308e-004 - -0.2924742996692658 - 0.0931328833103180 - <_> - - <_> - - - - <_>7 11 13 3 -1. - <_>7 12 13 1 3. - 0 - -8.5785696282982826e-003 - 0.2064279019832611 - -0.1120333969593048 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>0 1 9 2 2. - <_>9 3 9 2 2. - 0 - -0.0189514905214310 - -0.3931762874126434 - 0.0672604665160179 - <_> - - <_> - - - - <_>10 1 6 8 -1. - <_>12 1 2 8 3. - 0 - 0.0349399484694004 - 0.0280459895730019 - -0.5741003155708313 - <_> - - <_> - - - - <_>4 1 6 8 -1. - <_>6 1 2 8 3. - 0 - -0.0428706593811512 - -0.5985689163208008 - 0.0346078909933567 - <_> - - <_> - - - - <_>12 5 3 10 -1. - <_>12 10 3 5 2. - 0 - 5.4958608234301209e-004 - -0.4119304120540619 - 0.0673224180936813 - <_> - - <_> - - - - <_>7 1 6 16 -1. - <_>7 9 6 8 2. - 0 - 2.2494920995086432e-003 - 0.1348288953304291 - -0.1977768987417221 - <_> - - <_> - - - - <_>14 0 5 8 -1. - <_>14 4 5 4 2. - 0 - -9.2442613095045090e-003 - -0.1785071939229965 - 0.0767345130443573 - <_> - - <_> - - - - <_>5 5 3 10 -1. - <_>5 10 3 5 2. - 0 - 1.2210760032758117e-003 - -0.3461630046367645 - 0.0754319503903389 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 0.0136540904641151 - 0.0778616368770599 - -0.4396337866783142 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0173328295350075 - 0.0483176000416279 - -0.4146179854869843 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0168077796697617 - 0.2321159988641739 - -0.0823420584201813 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>3 14 7 2 2. - <_>10 16 7 2 2. - 0 - 0.0322031714022160 - 0.0340652689337730 - -0.5979660749435425 - <_> - - <_> - - - - <_>9 6 3 13 -1. - <_>10 6 1 13 3. - 0 - 0.0167778208851814 - -0.0594029687345028 - 0.1678290963172913 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - 0.0130748599767685 - -0.1059260964393616 - 0.2379689067602158 - <_> - - <_> - - - - <_>14 0 5 8 -1. - <_>14 4 5 4 2. - 0 - 0.0940828323364258 - 0.0105731897056103 - -0.5324926972389221 - <_> - - <_> - - - - <_>1 0 5 8 -1. - <_>1 4 5 4 2. - 0 - -7.6036658138036728e-003 - -0.2303142994642258 - 0.1010446995496750 - <_> - - <_> - - - - <_>14 13 6 6 -1. - <_>14 16 6 3 2. - 0 - 8.2368071889504790e-004 - 0.0465989708900452 - -0.1008758023381233 - <_> - - <_> - - - - <_>0 0 19 3 -1. - <_>0 1 19 1 3. - 0 - -7.6875449158251286e-003 - -0.2612339854240418 - 0.0735439732670784 - <_> - - <_> - - - - <_>10 12 8 8 -1. - <_>14 12 4 4 2. - <_>10 16 4 4 2. - 0 - -0.0337291806936264 - 0.2190714925527573 - -0.0219589397311211 - <_> - - <_> - - - - <_>2 12 8 8 -1. - <_>2 12 4 4 2. - <_>6 16 4 4 2. - 0 - 0.0132046900689602 - -0.1420318931341171 - 0.1510702967643738 - <_> - - <_> - - - - <_>3 8 15 3 -1. - <_>3 9 15 1 3. - 0 - 8.5354369366541505e-004 - -0.2430367022752762 - 0.0832831710577011 - <_> - - <_> - - - - <_>5 2 4 13 -1. - <_>7 2 2 13 2. - 0 - -0.0140713304281235 - -0.3697710037231445 - 0.0551423281431198 - <_> - - <_> - - - - <_>3 9 17 3 -1. - <_>3 10 17 1 3. - 0 - -0.0111159197986126 - -0.4657548964023590 - 0.0272855591028929 - <_> - - <_> - - - - <_>2 4 13 3 -1. - <_>2 5 13 1 3. - 0 - 0.0138589004054666 - -0.0917223468422890 - 0.1994789987802506 - <_> - - <_> - - - - <_>12 0 6 13 -1. - <_>14 0 2 13 3. - 0 - 0.0855482518672943 - 0.0261897891759872 - -0.3660382032394409 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -0.0194849297404289 - 0.1725998073816299 - -0.0894453004002571 - <_> - - <_> - - - - <_>9 12 9 6 -1. - <_>12 12 3 6 3. - 0 - 0.0216311793774366 - -0.0561832897365093 - 0.0677072778344154 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - 0.0192678403109312 - 0.0556096807122231 - -0.2948048114776611 - <_> - - <_> - - - - <_>3 10 14 4 -1. - <_>10 10 7 2 2. - <_>3 12 7 2 2. - 0 - 0.0118559002876282 - 0.0685800611972809 - -0.2709468901157379 - <_> - - <_> - - - - <_>1 0 8 6 -1. - <_>1 2 8 2 3. - 0 - 1.7135039670392871e-003 - -0.1559084057807922 - 0.0944774895906448 - <_> - - <_> - - - - <_>6 0 9 5 -1. - <_>9 0 3 5 3. - 0 - 0.0629933625459671 - 0.0290426798164845 - -0.2515141069889069 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 0.0173288807272911 - -0.0435626618564129 - 0.3401766121387482 - <_> - - <_> - - - - <_>11 13 9 6 -1. - <_>11 15 9 2 3. - 0 - 0.0240530893206596 - 0.0374501794576645 - -0.2899002134799957 - <_> - - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - 0.0212940294295549 - 0.0488897114992142 - -0.3639076054096222 - <_> - - <_> - - - - <_>4 1 13 6 -1. - <_>4 4 13 3 2. - 0 - 0.0928606763482094 - -0.0366044193506241 - 0.3236523866653442 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>0 5 20 3 2. - 0 - 2.1167730446904898e-003 - 0.0875060707330704 - -0.1833993941545487 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -0.0871250405907631 - -0.4616275131702423 - 0.0313420407474041 - <_> - - <_> - - - - <_>2 6 15 8 -1. - <_>7 6 5 8 3. - 0 - 0.1929880976676941 - 0.0290416199713945 - -0.4454362988471985 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - -2.4475890313624404e-005 - 0.0593527592718601 - -0.2023988068103790 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - -0.0348941497504711 - -0.4567655026912689 - 0.0352497510612011 - <_> - - <_> - - - - <_>2 1 18 4 -1. - <_>8 1 6 4 3. - 0 - 0.1919220983982086 - -0.0407337397336960 - 0.1544484943151474 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 7 10 2 3. - 0 - -0.0230851396918297 - 0.0717403218150139 - -0.2049365043640137 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>10 10 4 4 2. - <_>6 14 4 4 2. - 0 - 0.0295355692505836 - 0.0407621189951897 - -0.3692643940448761 - <_> - - <_> - - - - <_>7 0 3 20 -1. - <_>8 0 1 20 3. - 0 - -0.0364925190806389 - -0.5494133234024048 - 0.0254313293844461 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - 0.0406962297856808 - 0.0105153098702431 - -0.4990622997283936 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>10 0 10 2 2. - 0 - -0.0363845601677895 - -0.2473607063293457 - 0.0531878508627415 - <_> - - <_> - - - - <_>3 4 14 2 -1. - <_>3 4 7 2 2. - 0 - 0.0370000489056110 - -0.0467316918075085 - 0.3009530007839203 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 0.0378729812800884 - 0.0456008501350880 - -0.3378973007202148 - <_> - - <_> - - - - <_>7 11 13 3 -1. - <_>7 12 13 1 3. - 0 - -0.0161643400788307 - 0.1965561062097549 - -0.0565678104758263 - <_> - - <_> - - - - <_>0 6 8 14 -1. - <_>4 6 4 14 2. - 0 - 0.2425342053174973 - 0.0377725996077061 - -0.3619084060192108 - <_> - - <_> - - - - <_>9 13 9 5 -1. - <_>12 13 3 5 3. - 0 - -0.0174298696219921 - 0.0785196870565414 - -0.0198359508067369 - <_> - - <_> - - - - <_>2 13 9 5 -1. - <_>5 13 3 5 3. - 0 - 0.0141506697982550 - -0.1514340043067932 - 0.1202841028571129 - <_> - - <_> - - - - <_>10 1 4 7 -1. - <_>10 1 2 7 2. - 0 - 0.0637716874480248 - 6.8969810381531715e-003 - -0.8051149249076843 - <_> - - <_> - - - - <_>6 1 4 7 -1. - <_>8 1 2 7 2. - 0 - 1.1273720301687717e-003 - -0.2693197131156921 - 0.0525502189993858 - <_> - - <_> - - - - <_>12 8 6 8 -1. - <_>12 8 3 8 2. - 0 - -0.0382934994995594 - 0.2056383043527603 - -0.0214743707329035 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - 0.0501031093299389 - 0.0233524404466152 - -0.5464519262313843 - <_> - - <_> - - - - <_>11 12 8 8 -1. - <_>15 12 4 4 2. - <_>11 16 4 4 2. - 0 - -0.0400579310953617 - 0.2455333024263382 - -0.0334747098386288 - <_> - - <_> - - - - <_>1 12 8 8 -1. - <_>1 12 4 4 2. - <_>5 16 4 4 2. - 0 - 0.0184152908623219 - -0.0759774819016457 - 0.1851001977920532 - <_> - - <_> - - - - <_>12 8 6 5 -1. - <_>12 8 3 5 2. - 0 - 0.0105481501668692 - 0.0660501867532730 - -0.0643677413463593 - <_> - - <_> - - - - <_>2 8 6 5 -1. - <_>5 8 3 5 2. - 0 - 0.0730076879262924 - -0.0264719091355801 - 0.4650852084159851 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>10 5 6 3 2. - <_>4 8 6 3 2. - 0 - -0.0346580408513546 - 0.2784815132617950 - -0.0466628894209862 - <_> - - <_> - - - - <_>2 9 10 3 -1. - <_>7 9 5 3 2. - 0 - 0.0169246308505535 - 0.1155470013618469 - -0.1150436028838158 - <_> - - <_> - - - - <_>10 3 8 8 -1. - <_>14 3 4 4 2. - <_>10 7 4 4 2. - 0 - -0.0742458701133728 - -0.4307272136211395 - 0.0164612494409084 - <_> - - <_> - - - - <_>2 3 8 8 -1. - <_>2 3 4 4 2. - <_>6 7 4 4 2. - 0 - -0.0734063088893890 - -0.5662655830383301 - 0.0234539899975061 - <_> - - <_> - - - - <_>2 2 18 3 -1. - <_>8 2 6 3 3. - 0 - 0.1239741966128349 - -0.0546167083084583 - 0.1002435013651848 - <_> - - <_> - - - - <_>4 1 8 8 -1. - <_>4 1 4 4 2. - <_>8 5 4 4 2. - 0 - -0.0162355601787567 - -0.1991212069988251 - 0.0685376971960068 - <_> - - <_> - - - - <_>10 11 4 9 -1. - <_>10 11 2 9 2. - 0 - -0.0301379691809416 - -0.3339895009994507 - 0.0228060707449913 - <_> - - <_> - - - - <_>0 13 15 7 -1. - <_>5 13 5 7 3. - 0 - -0.0818365365266800 - 0.4062865078449249 - -0.0378282107412815 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.5224087834358215 - 0.0180944409221411 - -0.4347701072692871 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.0148455798625946 - -0.7027922272682190 - 0.0199775099754334 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0555077902972698 - 0.5121477842330933 - -0.0280976109206676 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0270780492573977 - 0.3083476126194000 - -0.0406768098473549 - <_> - - <_> - - - - <_>14 1 3 14 -1. - <_>15 1 1 14 3. - 0 - -2.4416339583694935e-003 - -0.1205457970499992 - 0.0598572790622711 - <_> - - <_> - - - - <_>0 2 18 3 -1. - <_>6 2 6 3 3. - 0 - 0.1504372060298920 - -0.0600363798439503 - 0.2202198952436447 - <_> - - <_> - - - - <_>10 2 6 7 -1. - <_>12 2 2 7 3. - 0 - -0.0410302616655827 - -0.3325470983982086 - 0.0250291302800179 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 0.0146094998344779 - 0.0513576604425907 - -0.2819032967090607 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 0.1258842051029205 - 6.7158509045839310e-003 - -0.4915573000907898 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0377849787473679 - 0.5167595148086548 - -0.0272360108792782 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0180902108550072 - -0.3577840924263001 - 0.0354850590229034 - <_> - - <_> - - - - <_>0 4 16 10 -1. - <_>0 9 16 5 2. - 0 - -0.0398811399936676 - -0.4807954132556915 - 0.0271667707711458 - <_> - - <_> - - - - <_>6 15 13 3 -1. - <_>6 16 13 1 3. - 0 - 7.3324372060596943e-003 - -0.0532976910471916 - 0.1175729036331177 - <_> - - <_> - - - - <_>2 3 13 2 -1. - <_>2 4 13 1 2. - 0 - -6.9262558827176690e-004 - -0.1450120955705643 - 0.0928852185606956 - <_> - - <_> - - - - <_>5 0 11 8 -1. - <_>5 4 11 4 2. - 0 - -0.0821669772267342 - 0.2312760949134827 - -0.0569906495511532 - <_> - - <_> - - - - <_>1 6 3 10 -1. - <_>1 11 3 5 2. - 0 - 3.8556379731744528e-003 - 0.0953306704759598 - -0.1558628976345062 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -7.4245668947696686e-003 - -0.2769294083118439 - 0.0353434495627880 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - 0.0228083506226540 - 0.0469046607613564 - -0.3365991115570068 - <_> - - <_> - - - - <_>14 1 4 7 -1. - <_>14 1 2 7 2. - 0 - 0.0829162225127220 - 2.8655149508267641e-003 - -0.5269166231155396 - <_> - - <_> - - - - <_>1 14 8 6 -1. - <_>1 16 8 2 3. - 0 - -0.0524020604789257 - -0.6983590126037598 - 0.0185878407210112 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 0.0151937399059534 - -0.0601263903081417 - 0.2591700851917267 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - -0.0142408097162843 - 0.2705619037151337 - -0.0646295025944710 - <_> - - <_> - - - - <_>14 1 4 7 -1. - <_>14 1 2 7 2. - 0 - -3.2158840913325548e-003 - -0.0935491174459457 - 0.0280900299549103 - <_> - - <_> - - - - <_>2 1 4 7 -1. - <_>4 1 2 7 2. - 0 - 4.7198659740388393e-003 - -0.1878395974636078 - 0.0710217878222466 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0254155993461609 - -0.3323681056499481 - 0.0409154891967773 - <_> - - <_> - - - - <_>1 14 9 6 -1. - <_>1 16 9 2 3. - 0 - 0.0427584908902645 - 0.0261509306728840 - -0.5112853050231934 - <_> - - <_> - - - - <_>10 9 6 7 -1. - <_>12 9 2 7 3. - 0 - 0.0422310493886471 - -0.0213985200971365 - 0.1745389997959137 - <_> - - <_> - - - - <_>4 9 6 7 -1. - <_>6 9 2 7 3. - 0 - -0.0206746701151133 - 0.2589876055717468 - -0.0564408898353577 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>15 14 5 3 2. - <_>10 17 5 3 2. - 0 - 0.0289769694209099 - -0.0207637306302786 - 0.0969099625945091 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>4 17 12 3 2. - 0 - 3.4173950552940369e-003 - 0.0935729518532753 - -0.1599608063697815 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - 0.0679229199886322 - 0.0162435192614794 - -0.7462471723556519 - <_> - - <_> - - - - <_>1 3 15 4 -1. - <_>6 3 5 4 3. - 0 - -9.0270619839429855e-003 - 0.3338269889354706 - -0.0387743897736073 - <_> - - <_> - - - - <_>2 9 18 3 -1. - <_>8 9 6 3 3. - 0 - -0.0283179990947247 - -0.3627611994743347 - 0.0238001290708780 - <_> - - <_> - - - - <_>2 8 12 4 -1. - <_>6 8 4 4 3. - 0 - -1.5302050160244107e-003 - -0.1841358989477158 - 0.0701502636075020 - <_> - - <_> - - - - <_>12 5 6 11 -1. - <_>12 5 3 11 2. - 0 - 8.4196459501981735e-003 - 0.0905866920948029 - -0.0611346289515495 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>10 0 10 2 2. - 0 - 0.0443461090326309 - 0.0613880492746830 - -0.2123194932937622 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - 0.0259211007505655 - -0.0350286103785038 - 0.2210748940706253 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -6.0503371059894562e-003 - -0.3217900097370148 - 0.0393338203430176 - <_> - - <_> - - - - <_>4 8 12 4 -1. - <_>4 10 12 2 2. - 0 - -0.0251710191369057 - 0.6951767206192017 - -0.0183601994067431 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - -0.0520730502903461 - -0.7472702860832214 - 0.0190303400158882 - <_> - - <_> - - - - <_>11 8 3 10 -1. - <_>11 13 3 5 2. - 0 - -0.0136394398286939 - -0.0620032399892807 - 0.0415896400809288 - <_> - - <_> - - - - <_>1 14 10 6 -1. - <_>1 14 5 3 2. - <_>6 17 5 3 2. - 0 - -0.0383772999048233 - 0.3851841092109680 - -0.0315095111727715 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>12 4 6 6 2. - <_>6 10 6 6 2. - 0 - -0.1467771977186203 - -0.6009926199913025 - 0.0109894201159477 - <_> - - <_> - - - - <_>2 4 12 12 -1. - <_>2 4 6 6 2. - <_>8 10 6 6 2. - 0 - 0.0205084607005119 - 0.0564647503197193 - -0.2514936923980713 - <_> - - <_> - - - - <_>3 5 14 8 -1. - <_>10 5 7 4 2. - <_>3 9 7 4 2. - 0 - 0.0237845908850431 - 0.0584596209228039 - -0.2223334014415741 - <_> - - <_> - - - - <_>0 4 6 7 -1. - <_>2 4 2 7 3. - 0 - 0.0186581704765558 - -0.0737062171101570 - 0.1855663955211639 - <_> - - <_> - - - - <_>7 13 7 6 -1. - <_>7 15 7 2 3. - 0 - -0.0266535002738237 - 0.2106173038482666 - -0.0686295032501221 - <_> - - <_> - - - - <_>2 13 16 6 -1. - <_>2 15 16 2 3. - 0 - -0.0759757980704308 - -0.4853537082672119 - 0.0272395908832550 - <_> - - <_> - - - - <_>16 7 3 13 -1. - <_>17 7 1 13 3. - 0 - 0.0532057210803032 - 5.1950141787528992e-003 - -0.4794046878814697 - <_> - - <_> - - - - <_>1 7 3 13 -1. - <_>2 7 1 13 3. - 0 - 0.0412064790725708 - 0.0191664602607489 - -0.6443964838981628 - <_> - - <_> - - - - <_>11 10 5 9 -1. - <_>11 13 5 3 3. - 0 - 0.0226244907826185 - 0.0174904596060514 - -0.2064553052186966 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 0.0211474299430847 - -0.0329449512064457 - 0.3515450954437256 - <_> - - <_> - - - - <_>7 2 13 3 -1. - <_>7 3 13 1 3. - 0 - 0.0133747700601816 - 0.0407848507165909 - -0.1972593069076538 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 4.2831092141568661e-003 - -0.0851591527462006 - 0.1402571052312851 - <_> - - <_> - - - - <_>11 10 5 9 -1. - <_>11 13 5 3 3. - 0 - 0.0637189000844955 - -4.9198199994862080e-003 - 0.4549151957035065 - <_> - - <_> - - - - <_>4 10 5 9 -1. - <_>4 13 5 3 3. - 0 - 0.0120821697637439 - 0.0531768091022968 - -0.2615660130977631 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 0.0181954093277454 - -0.0389994196593761 - 0.3341236114501953 - <_> - - <_> - - - - <_>1 2 18 4 -1. - <_>1 2 9 2 2. - <_>10 4 9 2 2. - 0 - 0.0289483293890953 - 0.0397502481937408 - -0.3418253064155579 - <_> - - <_> - - - - <_>14 2 6 6 -1. - <_>14 5 6 3 2. - 0 - -0.0936336070299149 - -0.9457129836082459 - 3.0850030016154051e-003 - <_> - - <_> - - - - <_>0 2 6 6 -1. - <_>0 5 6 3 2. - 0 - 0.0348505601286888 - 0.0313427299261093 - -0.3570046126842499 - <_> - - <_> - - - - <_>4 0 13 6 -1. - <_>4 3 13 3 2. - 0 - 0.1289574950933456 - -0.0396534912288189 - 0.3741292953491211 - <_> - - <_> - - - - <_>2 7 13 3 -1. - <_>2 8 13 1 3. - 0 - 0.0232972893863916 - 0.0259417109191418 - -0.4723119139671326 - <_> - - <_> - - - - <_>3 7 14 2 -1. - <_>3 8 14 1 2. - 0 - 0.0156676694750786 - -0.0814457908272743 - 0.1575078964233398 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 1.1425570119172335e-003 - 0.0639014765620232 - -0.2054779976606369 - <_> - - <_> - - - - <_>11 10 6 8 -1. - <_>11 10 3 8 2. - 0 - -0.0557445511221886 - -0.3448184132575989 - 0.0113007100299001 - <_> - - <_> - - - - <_>4 0 8 7 -1. - <_>8 0 4 7 2. - 0 - -0.0925095379352570 - 0.8907420039176941 - -0.0153985302895308 - <_> - - <_> - - - - <_>11 10 6 7 -1. - <_>11 10 3 7 2. - 0 - -5.5660872021690011e-004 - 0.0870561897754669 - -0.0513219982385635 - <_> - - <_> - - - - <_>6 2 2 18 -1. - <_>7 2 1 18 2. - 0 - -0.0145385200157762 - -0.4514006078243256 - 0.0281461197882891 - <_> - - <_> - - - - <_>12 6 3 13 -1. - <_>13 6 1 13 3. - 0 - -0.0375157296657562 - -0.7328653931617737 - 6.7265569232404232e-003 - <_> - - <_> - - - - <_>2 18 14 2 -1. - <_>2 19 14 1 2. - 0 - -1.5516959829255939e-003 - 0.0912134796380997 - -0.1339533030986786 - <_> - - <_> - - - - <_>11 10 6 7 -1. - <_>11 10 3 7 2. - 0 - -0.0954614207148552 - -0.9552935957908630 - 2.3820339702069759e-003 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - -0.0129175996407866 - 0.2704051136970520 - -0.0469047017395496 - <_> - - <_> - - - - <_>12 4 2 14 -1. - <_>12 4 1 14 2. - 0 - 7.9802395775914192e-003 - 0.0553909800946712 - -0.2066739946603775 - <_> - - <_> - - - - <_>6 4 2 14 -1. - <_>7 4 1 14 2. - 0 - 6.6025177948176861e-003 - 0.0664483085274696 - -0.1992221027612686 - <_> - - <_> - - - - <_>1 12 18 3 -1. - <_>7 12 6 3 3. - 0 - 0.0178246796131134 - -0.1453249007463455 - 0.0899043232202530 - <_> - - <_> - - - - <_>2 8 6 9 -1. - <_>5 8 3 9 2. - 0 - -0.0232615396380425 - 0.4806286990642548 - -0.0270842891186476 - <_> - - <_> - - - - <_>11 5 8 8 -1. - <_>15 5 4 4 2. - <_>11 9 4 4 2. - 0 - -5.3659449331462383e-003 - -0.1914359927177429 - 0.0703980699181557 - <_> - - <_> - - - - <_>5 5 8 8 -1. - <_>5 5 4 4 2. - <_>9 9 4 4 2. - 0 - -0.0207753404974937 - 0.1677424013614655 - -0.0894554182887077 - <_> - - <_> - - - - <_>9 0 3 20 -1. - <_>10 0 1 20 3. - 0 - 0.0621078908443451 - 0.0128154903650284 - -0.6445289254188538 - <_> - - <_> - - - - <_>7 5 3 13 -1. - <_>8 5 1 13 3. - 0 - -4.4327871873974800e-003 - 0.1340595036745071 - -0.1023185029625893 - -1.5337220430374146 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_>0 3 10 6 -1. - <_>0 3 5 3 2. - <_>5 6 5 3 2. - 0 - -4.6693067997694016e-003 - 0.1429760009050369 - -0.3529374897480011 - <_> - - <_> - - - - <_>5 7 12 4 -1. - <_>9 7 4 4 3. - 0 - -5.8510829694569111e-004 - -0.2244728952646256 - 0.0735566467046738 - <_> - - <_> - - - - <_>5 4 6 10 -1. - <_>5 4 3 5 2. - <_>8 9 3 5 2. - 0 - -3.4788011107593775e-003 - 0.1060324981808662 - -0.2562561035156250 - <_> - - <_> - - - - <_>10 9 4 8 -1. - <_>10 13 4 4 2. - 0 - 6.2952568987384439e-004 - 0.0410764589905739 - -0.3606142103672028 - <_> - - <_> - - - - <_>3 7 12 5 -1. - <_>7 7 4 5 3. - 0 - 2.1010650380048901e-004 - -0.2442522048950195 - 0.1094209030270577 - <_> - - <_> - - - - <_>7 2 6 12 -1. - <_>7 6 6 4 3. - 0 - -2.6671579107642174e-003 - 0.0845815017819405 - -0.2744900882244110 - <_> - - <_> - - - - <_>0 4 6 8 -1. - <_>3 4 3 8 2. - 0 - 7.1533219888806343e-003 - -0.1260381937026978 - 0.2007980048656464 - <_> - - <_> - - - - <_>4 11 13 3 -1. - <_>4 12 13 1 3. - 0 - -2.3616119287908077e-003 - 0.1662719994783402 - -0.1318628937005997 - <_> - - <_> - - - - <_>0 9 18 5 -1. - <_>6 9 6 5 3. - 0 - 0.0395996607840061 - 0.0551192387938499 - -0.3400340080261231 - <_> - - <_> - - - - <_>5 7 15 2 -1. - <_>5 8 15 1 2. - 0 - 1.9385309424251318e-003 - -0.2068665027618408 - 0.1040041968226433 - <_> - - <_> - - - - <_>2 11 14 4 -1. - <_>2 11 7 2 2. - <_>9 13 7 2 2. - 0 - 4.3686539866030216e-003 - 0.0647665932774544 - -0.2742631137371063 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - -3.9834968629293144e-004 - 0.0528209991753101 - -0.2268477976322174 - <_> - - <_> - - - - <_>4 10 12 6 -1. - <_>4 10 6 3 2. - <_>10 13 6 3 2. - 0 - -5.2277399227023125e-003 - -0.2551575005054474 - 0.0764053687453270 - <_> - - <_> - - - - <_>14 8 6 10 -1. - <_>14 8 3 10 2. - 0 - -0.0104456199333072 - 0.1351397037506104 - -0.0500320717692375 - <_> - - <_> - - - - <_>0 2 18 2 -1. - <_>0 3 18 1 2. - 0 - -2.0478919614106417e-003 - -0.2766987085342407 - 0.0547320395708084 - <_> - - <_> - - - - <_>14 1 6 5 -1. - <_>14 1 3 5 2. - 0 - 9.1795288026332855e-003 - -0.1264247000217438 - 0.1997922956943512 - <_> - - <_> - - - - <_>3 8 13 2 -1. - <_>3 9 13 1 2. - 0 - 9.4128772616386414e-004 - -0.4028648138046265 - 0.0389184914529324 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -4.0410319343209267e-003 - -0.2010831981897354 - 0.0514564290642738 - <_> - - <_> - - - - <_>0 1 6 5 -1. - <_>3 1 3 5 2. - 0 - -0.0127425696700811 - 0.2271686941385269 - -0.0682047903537750 - <_> - - <_> - - - - <_>7 1 8 8 -1. - <_>11 1 4 4 2. - <_>7 5 4 4 2. - 0 - -4.6246009878814220e-003 - -0.2585428953170776 - 0.0788783431053162 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -6.4845927990972996e-003 - -0.3139114081859589 - 0.0716051533818245 - <_> - - <_> - - - - <_>15 4 4 14 -1. - <_>17 4 2 7 2. - <_>15 11 2 7 2. - 0 - -0.0482916906476021 - 0.2548848092556000 - -0.0218915808945894 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 8.4315962158143520e-004 - -0.1652926951646805 - 0.0895756110548973 - <_> - - <_> - - - - <_>15 4 4 14 -1. - <_>17 4 2 7 2. - <_>15 11 2 7 2. - 0 - -0.1077338978648186 - -0.6011593937873840 - 3.3779250225052238e-004 - <_> - - <_> - - - - <_>1 2 4 18 -1. - <_>1 2 2 9 2. - <_>3 11 2 9 2. - 0 - -0.0459694191813469 - 0.3648974001407623 - -0.0399422906339169 - <_> - - <_> - - - - <_>3 11 16 9 -1. - <_>3 14 16 3 3. - 0 - -0.0166496392339468 - -0.1185811981558800 - 0.1058513969182968 - <_> - - <_> - - - - <_>0 0 17 3 -1. - <_>0 1 17 1 3. - 0 - -0.0145215503871441 - -0.3795421123504639 - 0.0348671488463879 - <_> - - <_> - - - - <_>9 5 9 15 -1. - <_>9 10 9 5 3. - 0 - 1.3591590104624629e-003 - -0.2318060994148254 - 0.0504014715552330 - <_> - - <_> - - - - <_>0 7 7 9 -1. - <_>0 10 7 3 3. - 0 - -5.8343587443232536e-004 - -0.2849658131599426 - 0.0408942811191082 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>16 0 3 5 2. - <_>13 5 3 5 2. - 0 - 7.9833306372165680e-003 - -0.0369923599064350 - 0.1698530018329620 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - 9.9762203171849251e-004 - 0.0648710429668427 - -0.1864833980798721 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>16 0 3 5 2. - <_>13 5 3 5 2. - 0 - -4.6869087964296341e-003 - 0.0769874230027199 - -0.0814826264977455 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 0.0300477407872677 - -0.0298399291932583 - 0.4367684125900269 - <_> - - <_> - - - - <_>10 1 6 7 -1. - <_>12 1 2 7 3. - 0 - 0.0180695392191410 - 0.0275097005069256 - -0.4272426962852478 - <_> - - <_> - - - - <_>7 4 5 16 -1. - <_>7 12 5 8 2. - 0 - -0.1508843004703522 - -0.6791852116584778 - 0.0180128607898951 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - -0.0258362907916307 - 0.2579798996448517 - -0.0359068587422371 - <_> - - <_> - - - - <_>4 3 6 17 -1. - <_>6 3 2 17 3. - 0 - 0.0181835293769836 - 0.0358950197696686 - -0.3719769120216370 - <_> - - <_> - - - - <_>2 0 18 20 -1. - <_>8 0 6 20 3. - 0 - 0.0631273090839386 - -0.0733929723501205 - 0.1256342977285385 - <_> - - <_> - - - - <_>5 12 6 6 -1. - <_>8 12 3 6 2. - 0 - -6.6507689189165831e-004 - 0.0854426175355911 - -0.1522855013608933 - <_> - - <_> - - - - <_>9 4 5 16 -1. - <_>9 12 5 8 2. - 0 - 0.0101049803197384 - 0.0345691181719303 - -0.2265769988298416 - <_> - - <_> - - - - <_>0 7 6 9 -1. - <_>3 7 3 9 2. - 0 - -0.0123559497296810 - 0.1578501015901566 - -0.0747107788920403 - <_> - - <_> - - - - <_>15 7 5 9 -1. - <_>15 10 5 3 3. - 0 - 0.0157281793653965 - 0.0688444226980209 - -0.1696176975965500 - <_> - - <_> - - - - <_>5 14 10 6 -1. - <_>5 16 10 2 3. - 0 - 1.5084549886523746e-005 - -0.1369553953409195 - 0.0908375978469849 - <_> - - <_> - - - - <_>2 14 17 6 -1. - <_>2 16 17 2 3. - 0 - 0.0296344794332981 - 0.0498223491013050 - -0.2680968940258026 - <_> - - <_> - - - - <_>3 2 14 6 -1. - <_>3 4 14 2 3. - 0 - 0.0280152000486851 - -0.0817997604608536 - 0.1784279942512512 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 2.3299450986087322e-003 - 0.0695352107286453 - -0.1820504069328308 - <_> - - <_> - - - - <_>0 0 4 15 -1. - <_>2 0 2 15 2. - 0 - 0.0134531203657389 - -0.0702314972877502 - 0.1849257946014404 - <_> - - <_> - - - - <_>1 4 18 10 -1. - <_>10 4 9 5 2. - <_>1 9 9 5 2. - 0 - 0.0140490401536226 - 0.0763282999396324 - -0.1721968948841095 - <_> - - <_> - - - - <_>0 1 2 13 -1. - <_>1 1 1 13 2. - 0 - -0.0146489897742867 - 0.3428106009960175 - -0.0431348197162151 - <_> - - <_> - - - - <_>13 3 3 12 -1. - <_>13 9 3 6 2. - 0 - 1.4879769878461957e-004 - -0.2761420905590057 - 0.0731407329440117 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>0 2 10 2 2. - <_>10 4 10 2 2. - 0 - -6.8892319686710835e-003 - -0.1838674992322922 - 0.0658720210194588 - <_> - - <_> - - - - <_>7 9 6 7 -1. - <_>9 9 2 7 3. - 0 - 1.2898260029032826e-003 - -0.1168802008032799 - 0.1117333024740219 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - -2.5763860321603715e-004 - 0.0893919765949249 - -0.1418354064226151 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - 0.0136523498222232 - 0.0250858291983604 - -0.1795977056026459 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -5.7484027929604053e-003 - 0.1612817943096161 - -0.0790231674909592 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - -0.0116827199235559 - -0.1849395036697388 - 0.0454199612140656 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.7498970739543438e-003 - -0.0658009424805641 - 0.1942670047283173 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - -1.1797569459304214e-003 - 0.0535638704895973 - -0.0552251711487770 - <_> - - <_> - - - - <_>5 8 4 12 -1. - <_>7 8 2 12 2. - 0 - -0.0370058491826057 - -0.5136988759040833 - 0.0247792396694422 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 0.0234320200979710 - 0.0145175596699119 - -0.3262138962745667 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -0.0248036608099937 - 0.4137448966503143 - -0.0315165892243385 - <_> - - <_> - - - - <_>7 0 6 14 -1. - <_>10 0 3 7 2. - <_>7 7 3 7 2. - 0 - -9.1133005917072296e-003 - -0.2326236963272095 - 0.0653071701526642 - <_> - - <_> - - - - <_>5 0 8 8 -1. - <_>5 4 8 4 2. - 0 - -0.0722230076789856 - 0.3136501014232636 - -0.0402878113090992 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 6.4163007773458958e-003 - 0.0441519208252430 - -0.1443901062011719 - <_> - - <_> - - - - <_>3 0 14 8 -1. - <_>3 4 14 4 2. - 0 - 0.0543619394302368 - -0.0498216599225998 - 0.2623965144157410 - <_> - - <_> - - - - <_>9 1 5 10 -1. - <_>9 6 5 5 2. - 0 - -5.9238062240183353e-003 - 0.0740545168519020 - -0.0722157731652260 - <_> - - <_> - - - - <_>7 0 2 14 -1. - <_>8 0 1 14 2. - 0 - -3.4175089094787836e-003 - -0.3071495890617371 - 0.0394618995487690 - <_> - - <_> - - - - <_>2 15 18 5 -1. - <_>8 15 6 5 3. - 0 - 0.0113678798079491 - -0.0486989282071590 - 0.1007789000868797 - <_> - - <_> - - - - <_>1 9 10 6 -1. - <_>1 9 5 3 2. - <_>6 12 5 3 2. - 0 - 2.3361030034720898e-003 - 0.0495394803583622 - -0.2381505072116852 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -7.2044372791424394e-004 - 0.0960844829678535 - -0.0981235280632973 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -3.4777939436025918e-004 - 0.1054612025618553 - -0.1060089021921158 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -6.6456091590225697e-003 - -0.1747120022773743 - 0.0472641289234161 - <_> - - <_> - - - - <_>0 1 6 11 -1. - <_>2 1 2 11 3. - 0 - 0.0442614406347275 - -0.0407426692545414 - 0.2863773107528687 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0349597409367561 - 0.0134791499003768 - -0.4423314929008484 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0259718205779791 - -0.4633466005325317 - 0.0253019798547030 - <_> - - <_> - - - - <_>7 11 7 6 -1. - <_>7 13 7 2 3. - 0 - 1.8818200333043933e-003 - -0.0723444670438766 - 0.1557994037866592 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0326236784458160 - 0.0181710608303547 - -0.6347253918647766 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0150413000956178 - -0.0535820387303829 - 0.1832043975591660 - <_> - - <_> - - - - <_>8 4 4 8 -1. - <_>10 4 2 8 2. - 0 - -5.5875489488244057e-003 - 0.1544281989336014 - -0.0695214420557022 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 3.9029030594974756e-003 - 0.0728938430547714 - -0.1354229003190994 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - 0.0459648892283440 - 0.0214825607836246 - -0.5453287959098816 - <_> - - <_> - - - - <_>11 9 3 10 -1. - <_>11 14 3 5 2. - 0 - -0.0743384733796120 - -0.7179561257362366 - 3.5341270267963409e-003 - <_> - - <_> - - - - <_>6 9 3 10 -1. - <_>6 14 3 5 2. - 0 - 2.0902850665152073e-003 - 0.0433087609708309 - -0.2507815957069397 - <_> - - <_> - - - - <_>2 2 18 9 -1. - <_>8 2 6 9 3. - 0 - -0.0756084173917770 - 0.2748881876468658 - -0.0349673293530941 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 5.1200888119637966e-003 - 0.0473843291401863 - -0.2679426968097687 - <_> - - <_> - - - - <_>2 15 18 5 -1. - <_>8 15 6 5 3. - 0 - -0.0201406702399254 - 0.0720394328236580 - -0.0445370599627495 - <_> - - <_> - - - - <_>0 15 18 5 -1. - <_>6 15 6 5 3. - 0 - 0.0267192795872688 - -0.0606716312468052 - 0.2401998043060303 - <_> - - <_> - - - - <_>12 0 8 9 -1. - <_>12 3 8 3 3. - 0 - -2.3299809545278549e-003 - -0.1484870016574860 - 0.0637793689966202 - <_> - - <_> - - - - <_>7 12 6 8 -1. - <_>9 12 2 8 3. - 0 - 0.0142482500523329 - 0.0394719317555428 - -0.2779029905796051 - <_> - - <_> - - - - <_>13 0 6 14 -1. - <_>15 0 2 14 3. - 0 - -0.0686914473772049 - 0.3130755126476288 - -0.0221117697656155 - <_> - - <_> - - - - <_>1 0 6 14 -1. - <_>3 0 2 14 3. - 0 - -0.0652131289243698 - 0.3619158864021301 - -0.0310897808521986 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0144698601216078 - -0.1994293928146362 - 0.0264897607266903 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -9.4575136899948120e-003 - -0.2969889938831329 - 0.0366936586797237 - <_> - - <_> - - - - <_>10 7 9 13 -1. - <_>13 7 3 13 3. - 0 - -0.1822270005941391 - -0.4088773131370544 - 7.3904348537325859e-003 - <_> - - <_> - - - - <_>1 7 9 13 -1. - <_>4 7 3 13 3. - 0 - -0.2399186939001083 - -0.9551969170570374 - 0.0108957495540380 - <_> - - <_> - - - - <_>8 15 12 5 -1. - <_>12 15 4 5 3. - 0 - -0.0149646000936627 - 0.1332550942897797 - -0.0641461163759232 - <_> - - <_> - - - - <_>3 14 14 6 -1. - <_>10 14 7 6 2. - 0 - 0.1105633974075317 - -0.0211470797657967 - 0.5226200819015503 - <_> - - <_> - - - - <_>5 2 15 3 -1. - <_>5 3 15 1 3. - 0 - -0.0118574602529407 - -0.2610326111316681 - 0.0249171294271946 - <_> - - <_> - - - - <_>5 3 10 6 -1. - <_>5 5 10 2 3. - 0 - 0.0170323997735977 - -0.0426550097763538 - 0.2432458996772766 - <_> - - <_> - - - - <_>7 4 7 8 -1. - <_>7 8 7 4 2. - 0 - -6.6315201111137867e-003 - -0.2799660861492157 - 0.0479722097516060 - <_> - - <_> - - - - <_>0 0 8 9 -1. - <_>0 3 8 3 3. - 0 - -1.3527619885280728e-003 - -0.1711764037609100 - 0.0684239864349365 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 0.0581593997776508 - 0.0144523000344634 - -0.3664070069789887 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 9.6522513777017593e-003 - 0.0641026869416237 - -0.1938609033823013 - <_> - - <_> - - - - <_>7 3 13 3 -1. - <_>7 4 13 1 3. - 0 - 4.6681659296154976e-003 - -0.0643053874373436 - 0.1219146028161049 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 4.8228199593722820e-003 - 0.0423068590462208 - -0.2548623085021973 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 7.2615491226315498e-003 - -0.0441690310835838 - 0.1988808065652847 - <_> - - <_> - - - - <_>4 1 6 7 -1. - <_>6 1 2 7 3. - 0 - 2.7650638949126005e-003 - 0.0567487217485905 - -0.1880290061235428 - <_> - - <_> - - - - <_>8 6 5 9 -1. - <_>8 9 5 3 3. - 0 - -1.2599739711731672e-003 - 0.2968172132968903 - -0.0307953394949436 - <_> - - <_> - - - - <_>0 8 12 12 -1. - <_>4 8 4 12 3. - 0 - -0.0140797495841980 - 0.1279069930315018 - -0.0770787820219994 - <_> - - <_> - - - - <_>9 0 9 5 -1. - <_>12 0 3 5 3. - 0 - 4.1978028602898121e-003 - -0.0326511710882187 - 0.0442820116877556 - <_> - - <_> - - - - <_>2 0 9 5 -1. - <_>5 0 3 5 3. - 0 - 7.4891891563311219e-004 - -0.1180123984813690 - 0.1019627973437309 - <_> - - <_> - - - - <_>6 4 10 14 -1. - <_>11 4 5 7 2. - <_>6 11 5 7 2. - 0 - 0.0396994985640049 - 0.0162638891488314 - -0.3239181935787201 - <_> - - <_> - - - - <_>4 4 10 14 -1. - <_>4 4 5 7 2. - <_>9 11 5 7 2. - 0 - 2.9685199260711670e-003 - 0.0507293604314327 - -0.2252234071493149 - <_> - - <_> - - - - <_>13 9 6 5 -1. - <_>13 9 3 5 2. - 0 - 3.0207540839910507e-003 - -0.0643120631575584 - 0.0636184811592102 - <_> - - <_> - - - - <_>3 8 13 3 -1. - <_>3 9 13 1 3. - 0 - -1.0064570233225822e-003 - -0.2246979027986527 - 0.0432564206421375 - <_> - - <_> - - - - <_>5 16 14 4 -1. - <_>12 16 7 2 2. - <_>5 18 7 2 2. - 0 - 1.6607339493930340e-003 - -0.0581265315413475 - 0.0595409311354160 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 4.9640638753771782e-003 - -0.0488043688237667 - 0.1843781024217606 - <_> - - <_> - - - - <_>11 1 5 12 -1. - <_>11 7 5 6 2. - 0 - 0.1719406992197037 - 3.6377978976815939e-003 - -1.0000029802322388 - <_> - - <_> - - - - <_>4 1 5 12 -1. - <_>4 7 5 6 2. - 0 - -2.0992290228605270e-003 - 0.1195136010646820 - -0.0886139571666718 - <_> - - <_> - - - - <_>8 6 4 8 -1. - <_>8 10 4 4 2. - 0 - -4.0529989637434483e-003 - -0.2019989937543869 - 0.0535645894706249 - <_> - - <_> - - - - <_>1 16 14 4 -1. - <_>1 16 7 2 2. - <_>8 18 7 2 2. - 0 - 1.5536800492554903e-003 - -0.0967972129583359 - 0.0951351374387741 - <_> - - <_> - - - - <_>5 14 13 2 -1. - <_>5 15 13 1 2. - 0 - 2.2837040014564991e-003 - -0.0455354191362858 - 0.1468275934457779 - <_> - - <_> - - - - <_>0 9 5 9 -1. - <_>0 12 5 3 3. - 0 - -0.0100946296006441 - -0.1885309964418411 - 0.0488643683493137 - <_> - - <_> - - - - <_>13 10 6 5 -1. - <_>13 10 3 5 2. - 0 - -7.0200799964368343e-003 - 0.1462875008583069 - -0.0421586483716965 - <_> - - <_> - - - - <_>1 10 6 5 -1. - <_>4 10 3 5 2. - 0 - 3.4074939321726561e-003 - -0.0771497189998627 - 0.1370200961828232 - <_> - - <_> - - - - <_>15 7 4 13 -1. - <_>15 7 2 13 2. - 0 - 3.9907437749207020e-003 - -0.0641788318753242 - 0.0854846164584160 - <_> - - <_> - - - - <_>1 7 4 13 -1. - <_>3 7 2 13 2. - 0 - 0.0206115599721670 - 0.0379889383912086 - -0.2935917079448700 - <_> - - <_> - - - - <_>5 10 10 4 -1. - <_>5 12 10 2 2. - 0 - -1.9768020138144493e-003 - 0.0604990012943745 - -0.1691028028726578 - <_> - - <_> - - - - <_>0 2 15 3 -1. - <_>0 3 15 1 3. - 0 - -0.0247833002358675 - -0.5505260825157166 - 0.0158317591995001 - <_> - - <_> - - - - <_>7 0 11 6 -1. - <_>7 2 11 2 3. - 0 - -0.0157109200954437 - 0.1971683055162430 - -0.0318840108811855 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 1.0070169810205698e-003 - 0.0465327501296997 - -0.2185309976339340 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -3.7466569337993860e-003 - -0.2537938952445984 - 0.0394639298319817 - <_> - - <_> - - - - <_>0 12 20 4 -1. - <_>0 12 10 2 2. - <_>10 14 10 2 2. - 0 - 0.0458495207130909 - 0.0136363403871655 - -0.6297612786293030 - <_> - - <_> - - - - <_>4 1 12 5 -1. - <_>8 1 4 5 3. - 0 - -0.0110401101410389 - 0.2493963986635208 - -0.0388954691588879 - <_> - - <_> - - - - <_>6 1 2 14 -1. - <_>7 1 1 14 2. - 0 - -4.2415689677000046e-003 - -0.2156476974487305 - 0.0456134304404259 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -3.1175611075013876e-003 - 0.1064146012067795 - -0.1226831004023552 - <_> - - <_> - - - - <_>6 4 6 8 -1. - <_>8 4 2 8 3. - 0 - -2.3725910577923059e-003 - 0.2057363986968994 - -0.0663385614752769 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -3.6906299646943808e-003 - -0.1580262035131455 - 0.0667606219649315 - <_> - - <_> - - - - <_>6 3 4 7 -1. - <_>8 3 2 7 2. - 0 - 1.0908120311796665e-003 - -0.1783002018928528 - 0.0571813210844994 - <_> - - <_> - - - - <_>15 3 5 9 -1. - <_>15 6 5 3 3. - 0 - -0.0139294201508164 - -0.1418585926294327 - 0.0581313706934452 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -0.0282833706587553 - 0.2645100057125092 - -0.0453325994312763 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -3.9213709533214569e-004 - 0.0760397166013718 - -0.0846663266420364 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 7 5 3 2. - 0 - -2.0424809772521257e-003 - -0.1639385074377060 - 0.0575951710343361 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - -0.0606340505182743 - 0.2434355020523071 - -0.0136308101937175 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - 0.0554729886353016 - 0.0122746303677559 - -0.7616189718246460 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - 0.0264517106115818 - -0.0161031596362591 - 0.1469652056694031 - <_> - - <_> - - - - <_>2 16 15 4 -1. - <_>2 18 15 2 2. - 0 - -0.0656158477067947 - -0.6693688035011292 - 0.0127883898094296 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -0.0292873606085777 - 0.3842203915119171 - -0.0209795702248812 - <_> - - <_> - - - - <_>2 8 15 5 -1. - <_>7 8 5 5 3. - 0 - -0.0878142565488815 - -0.5538629293441773 - 0.0165409296751022 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - 0.0402130112051964 - 5.5229798890650272e-003 - -0.1516941040754318 - <_> - - <_> - - - - <_>1 4 4 16 -1. - <_>1 4 2 8 2. - <_>3 12 2 8 2. - 0 - 7.5501110404729843e-003 - -0.0530810616910458 - 0.1679124981164932 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 7.5557199306786060e-003 - 0.0492132492363453 - -0.1809742003679276 - <_> - - <_> - - - - <_>6 4 6 10 -1. - <_>6 4 3 5 2. - <_>9 9 3 5 2. - 0 - 0.0422647595405579 - 9.8954448476433754e-003 - -0.8726593852043152 - <_> - - <_> - - - - <_>1 9 19 3 -1. - <_>1 10 19 1 3. - 0 - -0.0158211793750525 - -0.4951527118682861 - 0.0104249101132154 - <_> - - <_> - - - - <_>3 0 14 12 -1. - <_>3 4 14 4 3. - 0 - 4.4557699002325535e-003 - -0.0528236106038094 - 0.1740911006927490 - <_> - - <_> - - - - <_>6 3 8 4 -1. - <_>6 5 8 2 2. - 0 - -6.3567152246832848e-003 - 0.1027880012989044 - -0.0940622836351395 - <_> - - <_> - - - - <_>0 5 15 3 -1. - <_>0 6 15 1 3. - 0 - 2.1308339200913906e-003 - -0.0573434494435787 - 0.1574780046939850 - <_> - - <_> - - - - <_>12 0 2 13 -1. - <_>12 0 1 13 2. - 0 - 6.4157308079302311e-003 - 0.0411121882498264 - -0.2648253142833710 - <_> - - <_> - - - - <_>8 4 4 14 -1. - <_>10 4 2 14 2. - 0 - -0.1057273969054222 - -0.9271939992904663 - 8.6396038532257080e-003 - <_> - - <_> - - - - <_>7 0 10 6 -1. - <_>12 0 5 3 2. - <_>7 3 5 3 2. - 0 - 0.0612984895706177 - 0.0112424800172448 - -0.5297625064849854 - <_> - - <_> - - - - <_>1 6 6 7 -1. - <_>3 6 2 7 3. - 0 - 0.0100186504423618 - -0.0618011914193630 - 0.1544186025857925 - <_> - - <_> - - - - <_>17 2 3 13 -1. - <_>18 2 1 13 3. - 0 - 2.3613891098648310e-003 - -0.0392823405563831 - 0.0880617797374725 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - -4.7975129564292729e-004 - -0.1066320016980171 - 0.0838875174522400 - <_> - - <_> - - - - <_>6 0 10 6 -1. - <_>11 0 5 3 2. - <_>6 3 5 3 2. - 0 - 0.0739824101328850 - 4.7058681957423687e-003 - -0.6012908220291138 - <_> - - <_> - - - - <_>4 0 10 6 -1. - <_>4 0 5 3 2. - <_>9 3 5 3 2. - 0 - 0.0638219118118286 - 0.0113723902031779 - -0.7404484748840332 - <_> - - <_> - - - - <_>6 1 14 2 -1. - <_>6 2 14 1 2. - 0 - 4.6818208647891879e-004 - -0.0765455067157745 - 0.0535638108849525 - <_> - - <_> - - - - <_>3 0 12 18 -1. - <_>3 9 12 9 2. - 0 - 0.4387798905372620 - 0.0124209597706795 - -0.6877604126930237 - <_> - - <_> - - - - <_>13 7 6 10 -1. - <_>13 12 6 5 2. - 0 - 0.0288314707577229 - 0.0151501102373004 - -0.1322962939739227 - <_> - - <_> - - - - <_>1 7 6 10 -1. - <_>1 12 6 5 2. - 0 - 0.0677268132567406 - -0.0189013294875622 - 0.4879981875419617 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>10 5 6 6 2. - <_>4 11 6 6 2. - 0 - 0.0951254665851593 - 0.0125186601653695 - -0.7460774183273315 - <_> - - <_> - - - - <_>7 4 6 5 -1. - <_>10 4 3 5 2. - 0 - 3.4629011061042547e-003 - -0.0643965229392052 - 0.1345033049583435 - <_> - - <_> - - - - <_>4 8 15 4 -1. - <_>9 8 5 4 3. - 0 - -0.0102203404530883 - -0.1210239976644516 - 0.0350815989077091 - <_> - - <_> - - - - <_>4 9 12 11 -1. - <_>10 9 6 11 2. - 0 - -0.2522779107093811 - 0.5318639874458313 - -0.0173736102879047 - <_> - - <_> - - - - <_>7 6 8 10 -1. - <_>11 6 4 5 2. - <_>7 11 4 5 2. - 0 - 4.7006108798086643e-003 - 0.0262644793838263 - -0.1630567014217377 - <_> - - <_> - - - - <_>4 7 6 6 -1. - <_>4 10 6 3 2. - 0 - 0.0804870724678040 - -0.0111934300512075 - 0.7359899878501892 - <_> - - <_> - - - - <_>11 10 9 6 -1. - <_>11 12 9 2 3. - 0 - -3.8025099784135818e-003 - -0.1175692006945610 - 0.0648992434144020 - <_> - - <_> - - - - <_>6 4 7 6 -1. - <_>6 6 7 2 3. - 0 - -0.0519703999161720 - 0.2176486998796463 - -0.0462995804846287 - <_> - - <_> - - - - <_>9 3 2 16 -1. - <_>9 11 2 8 2. - 0 - -0.0123811196535826 - -0.1348332017660141 - 0.0709562525153160 - <_> - - <_> - - - - <_>3 2 9 16 -1. - <_>3 10 9 8 2. - 0 - 4.6567008830606937e-003 - 0.0848188474774361 - -0.1085081025958061 - <_> - - <_> - - - - <_>5 0 10 10 -1. - <_>5 5 10 5 2. - 0 - 0.0245205499231815 - -0.0565124005079269 - 0.2084549069404602 - <_> - - <_> - - - - <_>5 1 6 10 -1. - <_>5 6 6 5 2. - 0 - -6.0728159733116627e-003 - 0.1025331988930702 - -0.1073971018195152 - <_> - - <_> - - - - <_>13 3 3 12 -1. - <_>13 9 3 6 2. - 0 - 1.3803950278088450e-003 - -0.1235501989722252 - 0.0385239310562611 - <_> - - <_> - - - - <_>0 10 18 6 -1. - <_>0 12 18 2 3. - 0 - 8.3129312843084335e-003 - 0.0504419691860676 - -0.1790186017751694 - <_> - - <_> - - - - <_>6 15 14 2 -1. - <_>6 16 14 1 2. - 0 - 6.8436772562563419e-004 - -0.0613346882164478 - 0.0495438389480114 - <_> - - <_> - - - - <_>6 7 7 4 -1. - <_>6 9 7 2 2. - 0 - 0.0715894401073456 - 0.0112587297335267 - -0.7290254831314087 - <_> - - <_> - - - - <_>6 5 11 8 -1. - <_>6 9 11 4 2. - 0 - -3.9251110865734518e-004 - -0.2902264893054962 - 0.0139087196439505 - <_> - - <_> - - - - <_>0 8 8 12 -1. - <_>0 8 4 6 2. - <_>4 14 4 6 2. - 0 - -0.0169480200856924 - 0.1461602002382278 - -0.0562989488244057 - <_> - - <_> - - - - <_>8 6 5 9 -1. - <_>8 9 5 3 3. - 0 - 2.3180670104920864e-003 - 0.2028913944959641 - -0.0436493903398514 - <_> - - <_> - - - - <_>2 6 4 14 -1. - <_>2 6 2 7 2. - <_>4 13 2 7 2. - 0 - 7.9764174297451973e-003 - -0.0487680211663246 - 0.1807090938091278 - <_> - - <_> - - - - <_>6 10 9 6 -1. - <_>9 10 3 6 3. - 0 - -0.0115331504493952 - -0.1423880010843277 - 0.0566918402910233 - <_> - - <_> - - - - <_>2 5 4 8 -1. - <_>2 9 4 4 2. - 0 - -5.4723728680983186e-004 - -0.2384461015462875 - 0.0320613011717796 - <_> - - <_> - - - - <_>9 4 8 12 -1. - <_>13 4 4 6 2. - <_>9 10 4 6 2. - 0 - -1.1751300189644098e-003 - 0.0253949798643589 - -0.0898726135492325 - <_> - - <_> - - - - <_>3 4 8 12 -1. - <_>3 4 4 6 2. - <_>7 10 4 6 2. - 0 - 0.0136552397161722 - -0.0272302199155092 - 0.3341977894306183 - <_> - - <_> - - - - <_>9 8 10 8 -1. - <_>14 8 5 4 2. - <_>9 12 5 4 2. - 0 - 4.1803810745477676e-003 - 0.0269145406782627 - -0.1255704015493393 - <_> - - <_> - - - - <_>2 18 15 2 -1. - <_>2 19 15 1 2. - 0 - 3.1565671088173985e-004 - 0.0621775202453136 - -0.1334580928087235 - <_> - - <_> - - - - <_>10 11 5 9 -1. - <_>10 14 5 3 3. - 0 - 7.4048307724297047e-003 - 0.0315482988953590 - -0.2824712991714478 - <_> - - <_> - - - - <_>0 11 16 4 -1. - <_>8 11 8 4 2. - 0 - -0.0139774298295379 - 0.1234261021018028 - -0.0804930180311203 - <_> - - <_> - - - - <_>13 4 3 14 -1. - <_>14 4 1 14 3. - 0 - -0.0142405200749636 - -0.2397949993610382 - 0.0180166698992252 - <_> - - <_> - - - - <_>0 11 18 6 -1. - <_>9 11 9 6 2. - 0 - -0.2290156930685043 - -0.4289566874504089 - 0.0200323704630136 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>8 2 2 8 2. - 0 - 0.0265225600451231 - -0.0298995096236467 - 0.3119553923606873 - <_> - - <_> - - - - <_>3 2 12 6 -1. - <_>3 2 6 3 2. - <_>9 5 6 3 2. - 0 - 5.0723659805953503e-003 - 0.0621178001165390 - -0.1544231027364731 - <_> - - <_> - - - - <_>12 10 8 4 -1. - <_>12 12 8 2 2. - 0 - 2.2340700961649418e-003 - 0.0307172592729330 - -0.1465622037649155 - <_> - - <_> - - - - <_>0 10 8 4 -1. - <_>0 12 8 2 2. - 0 - -0.0463483817875385 - -0.6784408092498779 - 0.0122586200013757 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -3.0467000324279070e-003 - 0.1054750978946686 - -0.0544267892837524 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 7.0065702311694622e-003 - -0.0525379590690136 - 0.2425930052995682 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>9 5 3 5 3. - 0 - -2.7783720288425684e-003 - -0.1073210015892983 - 0.0740646198391914 - <_> - - <_> - - - - <_>2 3 7 4 -1. - <_>2 5 7 2 2. - 0 - -4.2294961167499423e-004 - 0.0681514665484428 - -0.1411716043949127 - <_> - - <_> - - - - <_>14 13 4 7 -1. - <_>14 13 2 7 2. - 0 - -0.0876140072941780 - -0.6527119278907776 - 3.3460480626672506e-003 - <_> - - <_> - - - - <_>3 3 3 15 -1. - <_>4 3 1 15 3. - 0 - 0.0125529300421476 - 0.0332351699471474 - -0.2657198011875153 - <_> - - <_> - - - - <_>2 0 18 7 -1. - <_>8 0 6 7 3. - 0 - -0.0218635108321905 - 0.1559990942478180 - -0.0375619195401669 - -1.4604519605636597 - 24 - -1 - <_> - - - <_> - - <_> - - - - <_>3 6 5 6 -1. - <_>3 9 5 3 2. - 0 - 0.0197156593203545 - -0.4078615903854370 - 0.1631730049848557 - <_> - - <_> - - - - <_>10 2 10 3 -1. - <_>10 2 5 3 2. - 0 - 0.0499775409698486 - -0.2575316131114960 - 0.2347117066383362 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 3.4774339292198420e-004 - -0.2714801132678986 - 0.1520204991102219 - <_> - - <_> - - - - <_>8 4 4 14 -1. - <_>8 11 4 7 2. - 0 - 8.2787703722715378e-003 - 0.0862295627593994 - -0.4227265119552612 - <_> - - <_> - - - - <_>2 16 8 4 -1. - <_>6 16 4 4 2. - 0 - 0.0128918103873730 - -0.2758949100971222 - 0.0996773317456245 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -5.2444688044488430e-003 - 0.1468731015920639 - -0.1809055954217911 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - 4.7363140038214624e-004 - 0.1154457032680512 - -0.2324209064245224 - <_> - - <_> - - - - <_>10 3 10 3 -1. - <_>10 3 5 3 2. - 0 - 0.0107679301872849 - -0.2325616031885147 - 0.0578859299421310 - <_> - - <_> - - - - <_>5 6 5 8 -1. - <_>5 10 5 4 2. - 0 - -2.0576089154928923e-003 - -0.4055481851100922 - 0.0610861293971539 - <_> - - <_> - - - - <_>13 1 6 6 -1. - <_>13 1 3 6 2. - 0 - 0.1264827996492386 - 2.5926080998033285e-003 - -0.6095582842826843 - <_> - - <_> - - - - <_>1 1 6 6 -1. - <_>4 1 3 6 2. - 0 - 0.0220290906727314 - -0.2383597046136856 - 0.1152383983135223 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 8.6279091192409396e-004 - -0.2438255995512009 - 0.0481749996542931 - <_> - - <_> - - - - <_>4 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 6.1232252046465874e-003 - -0.3329313099384308 - 0.0738605484366417 - <_> - - <_> - - - - <_>12 10 7 4 -1. - <_>12 12 7 2 2. - 0 - 1.8321570241823792e-003 - 0.0749648064374924 - -0.3605068027973175 - <_> - - <_> - - - - <_>3 14 7 6 -1. - <_>3 17 7 3 2. - 0 - 0.0131769599393010 - 0.0786504074931145 - -0.3000935018062592 - <_> - - <_> - - - - <_>2 1 16 3 -1. - <_>2 2 16 1 3. - 0 - -0.0150928003713489 - -0.4566335976123810 - 0.0453597195446491 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -3.9765550754964352e-003 - -0.3740411996841431 - 0.0572765916585922 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0125580998137593 - 0.1807938963174820 - -0.0907983928918839 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0113465301692486 - 0.0678424164652824 - -0.3335464894771576 - <_> - - <_> - - - - <_>7 12 13 2 -1. - <_>7 13 13 1 2. - 0 - 3.0938379932194948e-003 - -0.0643622577190399 - 0.1625099033117294 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - -7.9837916418910027e-003 - -0.2823725938796997 - 0.0642432272434235 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0532575398683548 - -0.1184227988123894 - 0.1540372073650360 - <_> - - <_> - - - - <_>0 10 8 4 -1. - <_>0 12 8 2 2. - 0 - -0.0323084406554699 - -0.3817465901374817 - 0.0464447811245918 - <_> - - <_> - - - - <_>2 6 16 8 -1. - <_>10 6 8 4 2. - <_>2 10 8 4 2. - 0 - 7.4837519787251949e-003 - 0.1008763015270233 - -0.1784836947917938 - <_> - - <_> - - - - <_>2 10 6 7 -1. - <_>4 10 2 7 3. - 0 - 0.0140755400061607 - -0.1361269950866699 - 0.1258919984102249 - <_> - - <_> - - - - <_>6 14 13 2 -1. - <_>6 15 13 1 2. - 0 - 0.0119458604604006 - -0.0464521311223507 - 0.3182334899902344 - <_> - - <_> - - - - <_>1 11 18 6 -1. - <_>1 11 9 3 2. - <_>10 14 9 3 2. - 0 - 0.0497741401195526 - 0.0373733900487423 - -0.4391924142837524 - <_> - - <_> - - - - <_>10 9 5 10 -1. - <_>10 14 5 5 2. - 0 - 1.1070669861510396e-003 - 0.0331636108458042 - -0.1885541975498200 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>7 10 3 5 2. - <_>10 15 3 5 2. - 0 - -0.0285949893295765 - -0.3690691888332367 - 0.0419302284717560 - <_> - - <_> - - - - <_>6 2 9 12 -1. - <_>6 6 9 4 3. - 0 - -7.6013091020286083e-003 - 0.0521914809942245 - -0.2468905001878738 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - 0.1311451047658920 - -0.0579573810100555 - 0.2731859982013702 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -7.4186350502714049e-006 - 0.1180206015706062 - -0.1074535027146339 - <_> - - <_> - - - - <_>6 7 6 5 -1. - <_>9 7 3 5 2. - 0 - 0.0314721204340458 - -0.0717338770627975 - 0.2561757862567902 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0387004911899567 - 0.0428636893630028 - -0.6085581779479981 - <_> - - <_> - - - - <_>3 3 13 2 -1. - <_>3 4 13 1 2. - 0 - -3.9322520606219769e-003 - -0.2212730944156647 - 0.0656179487705231 - <_> - - <_> - - - - <_>14 3 6 13 -1. - <_>16 3 2 13 3. - 0 - 0.0231447797268629 - -0.0682003870606422 - 0.1610700935125351 - <_> - - <_> - - - - <_>0 3 6 13 -1. - <_>2 3 2 13 3. - 0 - 0.0440430417656899 - -0.0540927313268185 - 0.2700901031494141 - <_> - - <_> - - - - <_>9 9 6 10 -1. - <_>12 9 3 5 2. - <_>9 14 3 5 2. - 0 - 0.0163633897900581 - -0.0671650394797325 - 0.1429201960563660 - <_> - - <_> - - - - <_>1 11 5 9 -1. - <_>1 14 5 3 3. - 0 - 0.0405756905674934 - 0.0270955990999937 - -0.5192281007766724 - <_> - - <_> - - - - <_>12 8 8 12 -1. - <_>16 8 4 6 2. - <_>12 14 4 6 2. - 0 - -0.0815919786691666 - 0.3629040122032166 - -0.0506411492824554 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 9.6564572304487228e-003 - -0.0658684968948364 - 0.2045986950397492 - <_> - - <_> - - - - <_>4 9 12 8 -1. - <_>10 9 6 4 2. - <_>4 13 6 4 2. - 0 - 0.0438753701746464 - 0.0282871201634407 - -0.4731675982475281 - <_> - - <_> - - - - <_>4 2 6 8 -1. - <_>6 2 2 8 3. - 0 - -0.0533755905926228 - -0.6391239166259766 - 0.0192135795950890 - <_> - - <_> - - - - <_>8 2 4 10 -1. - <_>8 2 2 10 2. - 0 - -0.0427893698215485 - 0.3741447031497955 - -0.0360205397009850 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0141933504492044 - -0.3056217133998871 - 0.0517246499657631 - <_> - - <_> - - - - <_>15 2 4 18 -1. - <_>17 2 2 9 2. - <_>15 11 2 9 2. - 0 - -0.0529470518231392 - 0.2220384925603867 - -0.0271231904625893 - <_> - - <_> - - - - <_>0 0 20 20 -1. - <_>0 0 10 10 2. - <_>10 10 10 10 2. - 0 - 0.3044171929359436 - 0.0281070005148649 - -0.5148605108261108 - <_> - - <_> - - - - <_>5 6 14 3 -1. - <_>5 6 7 3 2. - 0 - 0.0969175770878792 - 7.5603500008583069e-003 - -0.5464221835136414 - <_> - - <_> - - - - <_>3 7 12 4 -1. - <_>7 7 4 4 3. - 0 - 4.5469900942407548e-004 - -0.2225777953863144 - 0.0596630610525608 - <_> - - <_> - - - - <_>11 6 6 5 -1. - <_>11 6 3 5 2. - 0 - 6.4785419963300228e-003 - 0.0705072730779648 - -0.0865259170532227 - <_> - - <_> - - - - <_>3 6 6 5 -1. - <_>6 6 3 5 2. - 0 - 9.5442440360784531e-003 - 0.1185839027166367 - -0.1284652948379517 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 0.0106640402227640 - 0.0602511800825596 - -0.2345412969589233 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0596014000475407 - -0.4908311069011688 - 0.0311799701303244 - <_> - - <_> - - - - <_>6 13 14 3 -1. - <_>6 14 14 1 3. - 0 - -0.0148106096312404 - 0.1792847067117691 - -0.0537883006036282 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0249884594231844 - 0.0455850511789322 - -0.3154296875000000 - <_> - - <_> - - - - <_>11 12 8 8 -1. - <_>15 12 4 4 2. - <_>11 16 4 4 2. - 0 - 0.0371598713099957 - -0.0255529899150133 - 0.1282448023557663 - <_> - - <_> - - - - <_>1 12 8 8 -1. - <_>1 12 4 4 2. - <_>5 16 4 4 2. - 0 - -0.0360237993299961 - 0.3033855855464935 - -0.0507238693535328 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - -0.0400736816227436 - -0.3532741963863373 - 0.0255427490919828 - <_> - - <_> - - - - <_>1 6 14 3 -1. - <_>8 6 7 3 2. - 0 - 0.1011879965662956 - 0.0149540500715375 - -0.8527551889419556 - <_> - - <_> - - - - <_>10 1 10 19 -1. - <_>10 1 5 19 2. - 0 - 0.1255193948745728 - -0.0557775981724262 - 0.0351623296737671 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - -0.0100942002609372 - -0.7951772212982178 - 0.0166582893580198 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - 0.0279578808695078 - 0.0308232307434082 - -0.2907303869724274 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>6 0 2 8 3. - 0 - 0.0363602414727211 - 0.0279609598219395 - -0.4769163131713867 - <_> - - <_> - - - - <_>1 11 18 6 -1. - <_>1 14 18 3 2. - 0 - -0.0991004630923271 - -0.3080480098724365 - 0.0427254587411880 - <_> - - <_> - - - - <_>5 11 5 6 -1. - <_>5 14 5 3 2. - 0 - -5.8572040870785713e-004 - 0.0592276602983475 - -0.2353111952543259 - <_> - - <_> - - - - <_>9 12 4 8 -1. - <_>9 16 4 4 2. - 0 - -0.0512025691568851 - -0.5219962000846863 - 0.0149522395804524 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -6.7564798519015312e-003 - 0.1408502012491226 - -0.0904521793127060 - <_> - - <_> - - - - <_>1 11 18 3 -1. - <_>1 12 18 1 3. - 0 - -0.0489597804844379 - -0.6687812805175781 - 0.0205903593450785 - <_> - - <_> - - - - <_>2 1 16 2 -1. - <_>2 2 16 1 2. - 0 - 1.4971289783716202e-004 - -0.1864105015993118 - 0.0652548521757126 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0344096794724464 - -0.6523596048355103 - 0.0146936504170299 - <_> - - <_> - - - - <_>0 9 19 3 -1. - <_>0 10 19 1 3. - 0 - 0.0647256895899773 - 0.0123297199606895 - -0.8407772183418274 - <_> - - <_> - - - - <_>9 7 7 4 -1. - <_>9 9 7 2 2. - 0 - 1.7888710135594010e-003 - -0.3308830857276917 - 0.0239440500736237 - <_> - - <_> - - - - <_>0 14 20 6 -1. - <_>0 16 20 2 3. - 0 - 0.0749998390674591 - 0.0263476297259331 - -0.4484134018421173 - <_> - - <_> - - - - <_>8 7 12 6 -1. - <_>8 7 6 6 2. - 0 - -0.1369580030441284 - -0.5719233155250549 - 1.2316530337557197e-003 - <_> - - <_> - - - - <_>0 7 12 6 -1. - <_>6 7 6 6 2. - 0 - 0.0876796171069145 - 0.0918524116277695 - -0.1471467018127441 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0146911703050137 - -0.2738929986953735 - 0.0559109486639500 - <_> - - <_> - - - - <_>0 0 7 12 -1. - <_>0 6 7 6 2. - 0 - 0.1805976033210754 - 0.0184757392853498 - -0.6224799156188965 - <_> - - <_> - - - - <_>13 7 3 13 -1. - <_>14 7 1 13 3. - 0 - -6.9349152036011219e-003 - -0.1672389060258865 - 0.0423481203615665 - <_> - - <_> - - - - <_>3 1 13 6 -1. - <_>3 3 13 2 3. - 0 - -0.0453957282006741 - 0.5640187859535217 - -0.0207630395889282 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -0.0377147793769836 - -0.4972639977931976 - 0.0134577499702573 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -6.6780918277800083e-003 - 0.1565418988466263 - -0.0792542472481728 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0356934182345867 - 0.3221456110477448 - -0.0279339607805014 - <_> - - <_> - - - - <_>5 0 4 8 -1. - <_>7 0 2 8 2. - 0 - 2.0231369417160749e-003 - -0.2047290056943893 - 0.0601369217038155 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - 7.7706989832222462e-003 - -0.0622757188975811 - 0.1361960023641586 - <_> - - <_> - - - - <_>5 1 3 14 -1. - <_>6 1 1 14 3. - 0 - -0.0238460600376129 - -0.6428096294403076 - 0.0192168708890677 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - 0.0381127893924713 - 0.0169262494891882 - -0.3200187981128693 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - -8.1509854644536972e-003 - -0.1852740049362183 - 0.0674316436052322 - <_> - - <_> - - - - <_>1 2 18 6 -1. - <_>7 2 6 6 3. - 0 - 0.3004167079925537 - -0.0349978692829609 - 0.3771956861019135 - <_> - - <_> - - - - <_>4 7 7 4 -1. - <_>4 9 7 2 2. - 0 - 3.2188769546337426e-004 - -0.4386006891727448 - 0.0310081802308559 - <_> - - <_> - - - - <_>9 4 10 16 -1. - <_>9 12 10 8 2. - 0 - 0.0998051315546036 - 0.0210430100560188 - -0.2418213933706284 - <_> - - <_> - - - - <_>1 3 16 12 -1. - <_>1 3 8 6 2. - <_>9 9 8 6 2. - 0 - -0.1313202977180481 - -0.6074452996253967 - 0.0191272292286158 - <_> - - <_> - - - - <_>11 3 2 16 -1. - <_>11 11 2 8 2. - 0 - -0.0444578789174557 - -0.2820771932601929 - 0.0161995906382799 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - -5.3282459266483784e-003 - 0.1911883950233460 - -0.0644835233688354 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - 0.0403675287961960 - 0.0163626205176115 - -0.5546327233314514 - <_> - - <_> - - - - <_>0 9 13 3 -1. - <_>0 10 13 1 3. - 0 - -8.7769925594329834e-003 - -0.3890318870544434 - 0.0312779694795609 - <_> - - <_> - - - - <_>7 7 9 6 -1. - <_>7 9 9 2 3. - 0 - -0.0150317801162601 - 0.4496696889400482 - -0.0187086500227451 - <_> - - <_> - - - - <_>4 5 6 8 -1. - <_>6 5 2 8 3. - 0 - -0.0320851206779480 - 0.2287266999483109 - -0.0526477992534637 - <_> - - <_> - - - - <_>9 4 3 10 -1. - <_>9 9 3 5 2. - 0 - 1.7735429573804140e-003 - 0.1064456999301910 - -0.1197023019194603 - <_> - - <_> - - - - <_>8 4 4 12 -1. - <_>8 8 4 4 3. - 0 - 0.0591959804296494 - -0.0644855573773384 - 0.1844072937965393 - <_> - - <_> - - - - <_>4 5 15 3 -1. - <_>4 6 15 1 3. - 0 - 0.0119761303067207 - -0.0466553382575512 - 0.2275061011314392 - <_> - - <_> - - - - <_>2 4 9 4 -1. - <_>2 6 9 2 2. - 0 - -7.3619361501187086e-004 - 0.0644279569387436 - -0.1966935992240906 - <_> - - <_> - - - - <_>8 0 8 10 -1. - <_>8 5 8 5 2. - 0 - 0.1127498000860214 - -0.0326037295162678 - 0.2616580128669739 - <_> - - <_> - - - - <_>8 6 3 10 -1. - <_>8 11 3 5 2. - 0 - -0.0296391304582357 - -0.2428608983755112 - 0.0525507703423500 - <_> - - <_> - - - - <_>5 7 11 8 -1. - <_>5 11 11 4 2. - 0 - -0.0489725992083550 - 0.2901341915130615 - -0.0399366095662117 - <_> - - <_> - - - - <_>1 12 6 6 -1. - <_>1 15 6 3 2. - 0 - -2.0732060074806213e-003 - 0.0667289569973946 - -0.1838591992855072 - <_> - - <_> - - - - <_>14 2 5 18 -1. - <_>14 8 5 6 3. - 0 - 0.1865248978137970 - 0.0257880706340075 - -0.3047712147235870 - <_> - - <_> - - - - <_>1 2 5 18 -1. - <_>1 8 5 6 3. - 0 - -0.0648462101817131 - 0.5896415114402771 - -0.0215318705886602 - <_> - - <_> - - - - <_>13 7 3 13 -1. - <_>14 7 1 13 3. - 0 - 0.0596680305898190 - 9.0434495359659195e-003 - -0.8992847800254822 - <_> - - <_> - - - - <_>4 7 3 13 -1. - <_>5 7 1 13 3. - 0 - -0.0228107906877995 - -0.5568975210189819 - 0.0210364200174809 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 7 20 1 2. - 0 - -0.0439245589077473 - -0.7756980061531067 - 0.0132441204041243 - <_> - - <_> - - - - <_>2 1 16 4 -1. - <_>2 1 8 2 2. - <_>10 3 8 2 2. - 0 - -8.1411283463239670e-003 - -0.1614574939012528 - 0.0638697519898415 - <_> - - <_> - - - - <_>6 1 10 6 -1. - <_>11 1 5 3 2. - <_>6 4 5 3 2. - 0 - -0.0176811404526234 - -0.1708822995424271 - 0.0443238206207752 - <_> - - <_> - - - - <_>0 5 8 15 -1. - <_>4 5 4 15 2. - 0 - 0.3561578094959259 - 0.0139115303754807 - -0.8236694931983948 - <_> - - <_> - - - - <_>4 13 12 6 -1. - <_>4 13 6 6 2. - 0 - 0.0897913873195648 - -0.0330686718225479 - 0.3950195014476776 - <_> - - <_> - - - - <_>7 0 6 14 -1. - <_>7 0 3 7 2. - <_>10 7 3 7 2. - 0 - -0.0510399602353573 - -0.4968731999397278 - 0.0249119102954865 - <_> - - <_> - - - - <_>1 10 18 10 -1. - <_>7 10 6 10 3. - 0 - 0.4450297057628632 - 0.0130857499316335 - -0.7137433886528015 - <_> - - <_> - - - - <_>0 2 13 2 -1. - <_>0 3 13 1 2. - 0 - -3.1571299768984318e-003 - -0.2323523014783859 - 0.0454227291047573 - <_> - - <_> - - - - <_>0 0 20 15 -1. - <_>0 5 20 5 3. - 0 - 0.2229550927877426 - 0.0252729207277298 - -0.4581792056560516 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 3 12 3 2. - 0 - 0.0817870497703552 - -0.0569666698575020 - 0.2063311934471130 - <_> - - <_> - - - - <_>6 1 8 4 -1. - <_>6 3 8 2 2. - 0 - 0.0122906398028135 - 0.1043353006243706 - -0.1412999033927918 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - 3.2738980371505022e-003 - -0.1992916017770767 - 0.0579004995524883 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 3.1915940344333649e-003 - -0.2864956855773926 - 0.0384459383785725 - <_> - - <_> - - - - <_>0 0 15 7 -1. - <_>5 0 5 7 3. - 0 - -0.0694291368126869 - 0.3999530076980591 - -0.0292284209281206 - <_> - - <_> - - - - <_>10 0 10 8 -1. - <_>10 0 5 8 2. - 0 - 0.3089629113674164 - 4.5684990473091602e-003 - -0.9759358167648315 - <_> - - <_> - - - - <_>0 0 10 8 -1. - <_>5 0 5 8 2. - 0 - 0.0605471692979336 - -0.1722735017538071 - 0.0733677595853806 - <_> - - <_> - - - - <_>5 6 12 4 -1. - <_>5 6 6 4 2. - 0 - 0.0802967473864555 - 0.0127908904105425 - -0.2963644862174988 - <_> - - <_> - - - - <_>3 6 12 4 -1. - <_>9 6 6 4 2. - 0 - 0.0983090475201607 - 0.0174215305596590 - -0.7342811226844788 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - -0.0606510788202286 - -0.8926808834075928 - 9.2950398102402687e-003 - <_> - - <_> - - - - <_>2 0 15 9 -1. - <_>7 0 5 9 3. - 0 - -0.0110678300261498 - 0.3694047033786774 - -0.0322818607091904 - <_> - - <_> - - - - <_>6 14 13 2 -1. - <_>6 15 13 1 2. - 0 - -0.0172526892274618 - 0.2016368955373764 - -0.0306496098637581 - <_> - - <_> - - - - <_>4 0 12 8 -1. - <_>8 0 4 8 3. - 0 - 0.1141714975237846 - -0.0725674405694008 - 0.1458079963922501 - <_> - - <_> - - - - <_>12 1 4 14 -1. - <_>14 1 2 7 2. - <_>12 8 2 7 2. - 0 - -1.1878489749506116e-004 - 0.0667036697268486 - -0.1204411014914513 - <_> - - <_> - - - - <_>0 5 18 3 -1. - <_>6 5 6 3 3. - 0 - 0.0425388216972351 - 0.1423566937446594 - -0.0931281968951225 - <_> - - <_> - - - - <_>7 1 7 6 -1. - <_>7 4 7 3 2. - 0 - 0.0462207905948162 - -0.0453481189906597 - 0.2666769027709961 - <_> - - <_> - - - - <_>6 6 5 14 -1. - <_>6 13 5 7 2. - 0 - -0.1259886026382446 - -0.6219599843025208 - 0.0193617902696133 - <_> - - <_> - - - - <_>4 7 15 5 -1. - <_>9 7 5 5 3. - 0 - 0.1433641016483307 - 0.0156024601310492 - -0.3426972925662994 - <_> - - <_> - - - - <_>1 7 15 5 -1. - <_>6 7 5 5 3. - 0 - 0.0148534001782537 - -0.1939989030361176 - 0.0593650490045547 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - 0.0296072997152805 - 0.0293708592653275 - -0.1184056028723717 - <_> - - <_> - - - - <_>7 6 4 7 -1. - <_>9 6 2 7 2. - 0 - 0.0451512001454830 - -0.0310253705829382 - 0.4233565032482147 - <_> - - <_> - - - - <_>7 1 10 6 -1. - <_>12 1 5 3 2. - <_>7 4 5 3 2. - 0 - 0.0173470508307219 - 0.0524686612188816 - -0.1707188934087753 - <_> - - <_> - - - - <_>2 8 13 2 -1. - <_>2 9 13 1 2. - 0 - 0.0486967898905277 - 0.0137575902044773 - -0.7385389208793640 - <_> - - <_> - - - - <_>1 2 18 4 -1. - <_>10 2 9 2 2. - <_>1 4 9 2 2. - 0 - -0.0251209400594234 - -0.2607721984386444 - 0.0362490005791187 - <_> - - <_> - - - - <_>5 8 9 5 -1. - <_>8 8 3 5 3. - 0 - -0.0144120398908854 - 0.1843540072441101 - -0.0553760491311550 - <_> - - <_> - - - - <_>15 2 4 18 -1. - <_>17 2 2 9 2. - <_>15 11 2 9 2. - 0 - 0.0160111300647259 - -0.0338221900165081 - 0.0984909906983376 - <_> - - <_> - - - - <_>1 2 4 18 -1. - <_>1 2 2 9 2. - <_>3 11 2 9 2. - 0 - -0.0637788772583008 - 0.3959665894508362 - -0.0266052894294262 - <_> - - <_> - - - - <_>10 7 10 6 -1. - <_>15 7 5 3 2. - <_>10 10 5 3 2. - 0 - -0.0124317901208997 - -0.2710328102111816 - 0.0511539094150066 - <_> - - <_> - - - - <_>1 7 17 6 -1. - <_>1 9 17 2 3. - 0 - 0.1543028950691223 - -0.0297420695424080 - 0.3622387945652008 - <_> - - <_> - - - - <_>7 6 7 4 -1. - <_>7 8 7 2 2. - 0 - 0.0689536184072495 - 0.0145605402067304 - -0.7130876183509827 - <_> - - <_> - - - - <_>1 8 10 6 -1. - <_>1 8 5 3 2. - <_>6 11 5 3 2. - 0 - 0.0268093906342983 - 0.0309030208736658 - -0.3145376145839691 - <_> - - <_> - - - - <_>10 7 10 6 -1. - <_>15 7 5 3 2. - <_>10 10 5 3 2. - 0 - -0.0543396398425102 - -0.5708159208297730 - 6.3606691546738148e-003 - <_> - - <_> - - - - <_>0 7 10 6 -1. - <_>0 7 5 3 2. - <_>5 10 5 3 2. - 0 - -7.4291341006755829e-003 - -0.2116782069206238 - 0.0547284111380577 - <_> - - <_> - - - - <_>8 1 12 19 -1. - <_>8 1 6 19 2. - 0 - 0.0150047196075320 - -0.1357697993516922 - 0.0366726182401180 - <_> - - <_> - - - - <_>0 1 12 19 -1. - <_>6 1 6 19 2. - 0 - 0.0234388597309589 - -0.6209517717361450 - 0.0174513701349497 - <_> - - <_> - - - - <_>5 1 12 13 -1. - <_>5 1 6 13 2. - 0 - 0.2186942994594574 - -0.0251758191734552 - 0.2425673007965088 - <_> - - <_> - - - - <_>5 1 9 5 -1. - <_>8 1 3 5 3. - 0 - 0.0725549012422562 - 0.0303783100098372 - -0.3531683981418610 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 8 2. - 0 - -0.0607751905918121 - 0.6123114228248596 - -0.0293977502733469 - <_> - - <_> - - - - <_>0 12 13 3 -1. - <_>0 13 13 1 3. - 0 - 0.0104053597897291 - -0.0489253513514996 - 0.2004220038652420 - <_> - - <_> - - - - <_>10 0 4 16 -1. - <_>10 0 2 16 2. - 0 - -4.4559161178767681e-003 - -0.1817599982023239 - 0.0514601096510887 - <_> - - <_> - - - - <_>4 12 12 5 -1. - <_>8 12 4 5 3. - 0 - 5.3141661919653416e-003 - 0.1083642989397049 - -0.1146437004208565 - <_> - - <_> - - - - <_>10 0 4 16 -1. - <_>10 0 2 16 2. - 0 - 0.0281299091875553 - 0.0484524592757225 - -0.1058814972639084 - <_> - - <_> - - - - <_>6 0 4 16 -1. - <_>8 0 2 16 2. - 0 - -0.0100290300324559 - -0.2885420024394989 - 0.0465093813836575 - <_> - - <_> - - - - <_>6 1 8 7 -1. - <_>6 1 4 7 2. - 0 - 0.0416237600147724 - -0.0524241812527180 - 0.2463805973529816 - <_> - - <_> - - - - <_>8 4 4 7 -1. - <_>10 4 2 7 2. - 0 - 0.0174070298671722 - -0.0595117993652821 - 0.2248900979757309 - <_> - - <_> - - - - <_>11 8 9 9 -1. - <_>14 8 3 9 3. - 0 - -0.0910129174590111 - 0.3843485116958618 - -0.0267760790884495 - <_> - - <_> - - - - <_>0 8 9 9 -1. - <_>3 8 3 9 3. - 0 - -0.0559645593166351 - 0.3351255953311920 - -0.0370866693556309 - <_> - - <_> - - - - <_>0 4 20 5 -1. - <_>0 4 10 5 2. - 0 - -0.2319160997867584 - -0.7993714213371277 - 0.0161577109247446 - <_> - - <_> - - - - <_>1 12 18 2 -1. - <_>1 13 18 1 2. - 0 - 0.0150957796722651 - 0.0195627398788929 - -0.4758878052234650 - <_> - - <_> - - - - <_>11 5 5 9 -1. - <_>11 8 5 3 3. - 0 - -0.0635372027754784 - 0.5510386228561401 - -9.9191991612315178e-003 - <_> - - <_> - - - - <_>4 5 5 9 -1. - <_>4 8 5 3 3. - 0 - 0.0507804714143276 - -0.0507661215960979 - 0.1985673010349274 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - 0.0334357097744942 - 0.0171000305563211 - -0.3910605013370514 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 0.0272363107651472 - 0.0194911304861307 - -0.4995582103729248 - <_> - - <_> - - - - <_>0 11 20 4 -1. - <_>10 11 10 2 2. - <_>0 13 10 2 2. - 0 - 0.0361444614827633 - 0.0197128094732761 - -0.4771480858325958 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0371108986437321 - -0.7108097076416016 - 0.0132972402498126 - <_> - - <_> - - - - <_>14 0 3 15 -1. - <_>15 0 1 15 3. - 0 - -1.6986919799819589e-003 - -0.1145403981208801 - 0.0538331903517246 - <_> - - <_> - - - - <_>3 0 3 15 -1. - <_>4 0 1 15 3. - 0 - 7.0956937270238996e-004 - -0.1185242980718613 - 0.0861461535096169 - <_> - - <_> - - - - <_>9 12 7 4 -1. - <_>9 14 7 2 2. - 0 - -0.0398544594645500 - -0.2178416997194290 - 7.9314615577459335e-003 - <_> - - <_> - - - - <_>5 1 6 5 -1. - <_>8 1 3 5 2. - 0 - -0.0262653008103371 - 0.5182827711105347 - -0.0195025391876698 - <_> - - <_> - - - - <_>14 0 4 9 -1. - <_>14 0 2 9 2. - 0 - 1.5767179429531097e-003 - -0.0900251492857933 - 0.0436141490936279 - <_> - - <_> - - - - <_>2 0 4 9 -1. - <_>4 0 2 9 2. - 0 - 0.0845008492469788 - 0.0191088002175093 - -0.5804942846298218 - <_> - - <_> - - - - <_>9 1 8 8 -1. - <_>13 1 4 4 2. - <_>9 5 4 4 2. - 0 - 0.0580610297620296 - 5.1128780469298363e-003 - -0.3662971854209900 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -8.6446420755237341e-004 - 0.0985512211918831 - -0.0992868766188622 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>10 15 7 2 2. - <_>3 17 7 2 2. - 0 - -0.0163587797433138 - -0.2235393971204758 - 0.0451000109314919 - <_> - - <_> - - - - <_>4 12 7 4 -1. - <_>4 14 7 2 2. - 0 - 0.0120695000514388 - -0.0308855809271336 - 0.3593367040157318 - <_> - - <_> - - - - <_>9 12 4 8 -1. - <_>9 16 4 4 2. - 0 - 0.0649325922131538 - 8.9946594089269638e-003 - -0.6550527215003967 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -0.0163847208023071 - 0.1837438046932221 - -0.0583197288215160 - <_> - - <_> - - - - <_>5 7 10 10 -1. - <_>5 12 10 5 2. - 0 - 0.0364678315818310 - 0.0330538004636765 - -0.3117660880088806 - <_> - - <_> - - - - <_>5 7 6 8 -1. - <_>5 11 6 4 2. - 0 - -4.8026088625192642e-003 - -0.1309693008661270 - 0.0888154208660126 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -9.7134411334991455e-003 - 0.1248589009046555 - -0.0458519198000431 - <_> - - <_> - - - - <_>8 4 3 10 -1. - <_>8 9 3 5 2. - 0 - -3.6871319753117859e-004 - 0.1079858019948006 - -0.1079533025622368 - -1.6477719545364380 - 25 - -1 - <_> - - - <_> - - <_> - - - - <_>2 0 6 5 -1. - <_>5 0 3 5 2. - 0 - 4.8573319800198078e-003 - -0.2216591984033585 - 0.2066199034452438 - <_> - - <_> - - - - <_>8 4 4 14 -1. - <_>8 11 4 7 2. - 0 - -9.0601091505959630e-004 - 0.0926842167973518 - -0.3469268977642059 - <_> - - <_> - - - - <_>3 6 5 6 -1. - <_>3 9 5 3 2. - 0 - 3.8109601009637117e-003 - -0.4769397974014282 - 0.0722088664770126 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -1.9349349895492196e-003 - -0.2347428947687149 - 0.1030836999416351 - <_> - - <_> - - - - <_>1 2 17 6 -1. - <_>1 4 17 2 3. - 0 - 4.6932199038565159e-003 - -0.2175559997558594 - 0.1029777005314827 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>9 5 3 10 2. - 0 - -4.5681721530854702e-003 - -0.3297953903675079 - 0.0621086992323399 - <_> - - <_> - - - - <_>5 4 6 6 -1. - <_>8 4 3 6 2. - 0 - 2.0976159721612930e-003 - -0.2758555114269257 - 0.0744477882981300 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>12 6 7 3 2. - <_>5 9 7 3 2. - 0 - -0.0234344601631165 - -0.2451709061861038 - 0.0208883006125689 - <_> - - <_> - - - - <_>1 6 14 6 -1. - <_>1 6 7 3 2. - <_>8 9 7 3 2. - 0 - -7.5489659793674946e-003 - -0.2353949993848801 - 0.0805947929620743 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - -1.3637889642268419e-003 - 0.1246228963136673 - -0.1438398063182831 - <_> - - <_> - - - - <_>0 5 20 15 -1. - <_>0 10 20 5 3. - 0 - 0.0208817701786757 - -0.2548697888851166 - 0.0704801306128502 - <_> - - <_> - - - - <_>12 5 4 14 -1. - <_>14 5 2 7 2. - <_>12 12 2 7 2. - 0 - -1.6712560318410397e-003 - -0.1474708020687103 - 0.0935977473855019 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>2 0 2 9 3. - 0 - -0.0585527084767818 - 0.3792966008186340 - -0.0378922410309315 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 8 2. - 0 - -0.0475916415452957 - 0.3476938903331757 - -0.0294844098389149 - <_> - - <_> - - - - <_>6 0 3 13 -1. - <_>7 0 1 13 3. - 0 - 5.7788072153925896e-003 - 0.0416271798312664 - -0.3801231086254120 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 8 2. - 0 - 6.1923051252961159e-003 - -0.0798542425036430 - 0.1466230005025864 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - 8.6211357265710831e-003 - -0.0790525972843170 - 0.1970718055963516 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.3878768980503082 - 9.9500510841608047e-003 - -0.5495527982711792 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1218483000993729 - 0.0215608794242144 - -0.7118219137191773 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - 5.6779510341584682e-003 - 0.0507787317037582 - -0.1981754004955292 - <_> - - <_> - - - - <_>6 0 3 20 -1. - <_>7 0 1 20 3. - 0 - -0.0324072688817978 - -0.6577636003494263 - 0.0189302302896976 - <_> - - <_> - - - - <_>7 5 8 12 -1. - <_>11 5 4 6 2. - <_>7 11 4 6 2. - 0 - 2.3834649473428726e-003 - 0.0359106212854385 - -0.1938607990741730 - <_> - - <_> - - - - <_>4 5 10 12 -1. - <_>4 5 5 6 2. - <_>9 11 5 6 2. - 0 - 4.4861159403808415e-004 - 0.0630491897463799 - -0.2306728065013886 - <_> - - <_> - - - - <_>12 5 4 14 -1. - <_>14 5 2 7 2. - <_>12 12 2 7 2. - 0 - 0.0283813606947660 - 0.0137987695634365 - -0.2028799057006836 - <_> - - <_> - - - - <_>4 5 4 14 -1. - <_>4 5 2 7 2. - <_>6 12 2 7 2. - 0 - -2.7084869798272848e-003 - -0.1645527034997940 - 0.0811827331781387 - <_> - - <_> - - - - <_>14 10 6 9 -1. - <_>14 10 3 9 2. - 0 - -0.0132185798138380 - 0.1292906999588013 - -0.0494105815887451 - <_> - - <_> - - - - <_>3 8 14 2 -1. - <_>3 9 14 1 2. - 0 - 1.8623949727043509e-003 - -0.2739819884300232 - 0.0457460992038250 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - -6.6727721132338047e-003 - -0.1516754031181335 - 0.0555876195430756 - <_> - - <_> - - - - <_>0 15 14 3 -1. - <_>0 16 14 1 3. - 0 - 1.9492399878799915e-003 - -0.0855471268296242 - 0.1371261030435562 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - -0.0709788128733635 - -0.7742931842803955 - 5.5506629869341850e-003 - <_> - - <_> - - - - <_>1 10 8 6 -1. - <_>1 12 8 2 3. - 0 - 5.7003321126103401e-003 - 0.0602996610105038 - -0.2300011068582535 - <_> - - <_> - - - - <_>1 0 18 19 -1. - <_>7 0 6 19 3. - 0 - 0.0663107782602310 - -0.0856906995177269 - 0.1516992002725601 - <_> - - <_> - - - - <_>0 9 6 10 -1. - <_>3 9 3 10 2. - 0 - -8.5291899740695953e-003 - 0.1429758965969086 - -0.0918055474758148 - <_> - - <_> - - - - <_>11 15 9 4 -1. - <_>11 17 9 2 2. - 0 - 5.1141469739377499e-003 - 0.0469179898500443 - -0.1331984996795654 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 1.9523530500009656e-003 - -0.1417748928070068 - 0.1052417010068893 - <_> - - <_> - - - - <_>4 3 12 10 -1. - <_>8 3 4 10 3. - 0 - 0.1955831050872803 - 0.0144788604229689 - -0.7998542785644531 - <_> - - <_> - - - - <_>7 10 3 10 -1. - <_>7 15 3 5 2. - 0 - 5.3029200062155724e-003 - 0.0372377000749111 - -0.2613134980201721 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 6.4814360812306404e-003 - -0.0490926988422871 - 0.2568177878856659 - <_> - - <_> - - - - <_>0 15 9 4 -1. - <_>0 17 9 2 2. - 0 - -6.1802868731319904e-003 - -0.2131792008876801 - 0.0613900311291218 - <_> - - <_> - - - - <_>6 12 14 3 -1. - <_>6 13 14 1 3. - 0 - 1.9895739387720823e-003 - -0.0713353827595711 - 0.1300242990255356 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -4.2928531183861196e-004 - 0.0723834782838821 - -0.1564379930496216 - <_> - - <_> - - - - <_>11 10 6 6 -1. - <_>11 10 3 6 2. - 0 - -4.5690318802371621e-004 - 0.0757323578000069 - -0.1093285977840424 - <_> - - <_> - - - - <_>7 0 5 15 -1. - <_>7 5 5 5 3. - 0 - -0.1333373934030533 - -0.5488920807838440 - 0.0194945503026247 - <_> - - <_> - - - - <_>4 7 13 2 -1. - <_>4 8 13 1 2. - 0 - 8.2705507520586252e-004 - -0.1873998939990997 - 0.0574982613325119 - <_> - - <_> - - - - <_>2 8 4 12 -1. - <_>2 12 4 4 3. - 0 - -1.6954699531197548e-003 - -0.1410070061683655 - 0.0865483880043030 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - 9.8944529891014099e-003 - 0.0178981591016054 - -0.3139568865299225 - <_> - - <_> - - - - <_>7 5 6 15 -1. - <_>9 5 2 15 3. - 0 - 6.0766572132706642e-003 - -0.1312011033296585 - 0.0915785282850266 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - -0.0356802791357040 - -0.3888098895549774 - 0.0113778095692396 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - 8.7540567619726062e-004 - 0.0530229285359383 - -0.2150994986295700 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 1.9438719609752297e-003 - -0.0810357034206390 - 0.1338230967521668 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0563981384038925 - 0.0148579301312566 - -0.6955115199089050 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -1.0274930391460657e-003 - -0.1919634938240051 - 0.0475960299372673 - <_> - - <_> - - - - <_>8 1 4 14 -1. - <_>8 8 4 7 2. - 0 - -3.3568819053471088e-003 - 0.1046605035662651 - -0.1017097979784012 - <_> - - <_> - - - - <_>2 6 17 6 -1. - <_>2 9 17 3 2. - 0 - 0.1173404008150101 - -0.0465654395520687 - 0.2087873965501785 - <_> - - <_> - - - - <_>0 7 5 9 -1. - <_>0 10 5 3 3. - 0 - 8.8005866855382919e-003 - 0.0917546525597572 - -0.1222150027751923 - <_> - - <_> - - - - <_>4 5 13 2 -1. - <_>4 6 13 1 2. - 0 - 2.4095149710774422e-003 - -0.0367521606385708 - 0.2344343960285187 - <_> - - <_> - - - - <_>2 9 14 2 -1. - <_>2 10 14 1 2. - 0 - -2.8434590785764158e-004 - -0.1999672949314117 - 0.0473531596362591 - <_> - - <_> - - - - <_>5 15 13 3 -1. - <_>5 16 13 1 3. - 0 - 0.0176237095147371 - -0.0227655190974474 - 0.2564666867256165 - <_> - - <_> - - - - <_>5 0 3 14 -1. - <_>6 0 1 14 3. - 0 - 0.0141217401251197 - 0.0226599890738726 - -0.4244908094406128 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -0.0152906496077776 - 0.2444576025009155 - -0.0431456305086613 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0254268795251846 - 0.4128093123435974 - -0.0250028204172850 - <_> - - <_> - - - - <_>4 0 14 4 -1. - <_>11 0 7 2 2. - <_>4 2 7 2 2. - 0 - 8.7438793852925301e-003 - 0.0419315397739410 - -0.1243304014205933 - <_> - - <_> - - - - <_>0 1 20 4 -1. - <_>0 1 10 2 2. - <_>10 3 10 2 2. - 0 - 0.0416429601609707 - 0.0215358696877956 - -0.4906223118305206 - <_> - - <_> - - - - <_>7 0 7 6 -1. - <_>7 3 7 3 2. - 0 - 0.0706923305988312 - -0.0243070907890797 - 0.3360632956027985 - <_> - - <_> - - - - <_>5 2 6 10 -1. - <_>7 2 2 10 3. - 0 - -0.0776903480291367 - -0.7388399839401245 - 0.0135768298059702 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 3.7781539140269160e-004 - -0.0966977328062058 - 0.0946905091404915 - <_> - - <_> - - - - <_>1 8 13 3 -1. - <_>1 9 13 1 3. - 0 - -1.1192850070074201e-003 - -0.2163182049989700 - 0.0442351996898651 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0597722493112087 - -0.0320242606103420 - 0.3060266077518463 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - -0.0154171204194427 - -0.3408783972263336 - 0.0280979797244072 - <_> - - <_> - - - - <_>18 3 2 17 -1. - <_>18 3 1 17 2. - 0 - -6.3111339695751667e-003 - 0.1532768011093140 - -0.0479014590382576 - <_> - - <_> - - - - <_>0 0 20 10 -1. - <_>0 0 10 5 2. - <_>10 5 10 5 2. - 0 - -0.0188264995813370 - -0.1526959985494614 - 0.0609556287527084 - <_> - - <_> - - - - <_>4 8 14 4 -1. - <_>11 8 7 2 2. - <_>4 10 7 2 2. - 0 - -0.0392238385975361 - 0.2662413120269775 - -7.6400930993258953e-003 - <_> - - <_> - - - - <_>0 3 7 6 -1. - <_>0 5 7 2 3. - 0 - -0.0486531592905521 - -0.4548850059509277 - 0.0198530498892069 - <_> - - <_> - - - - <_>4 8 14 4 -1. - <_>11 8 7 2 2. - <_>4 10 7 2 2. - 0 - 0.0672605186700821 - 1.0999150108546019e-003 - -0.7527347803115845 - <_> - - <_> - - - - <_>2 8 14 4 -1. - <_>2 8 7 2 2. - <_>9 10 7 2 2. - 0 - 1.2728190049529076e-003 - -0.0781212970614433 - 0.1181655004620552 - <_> - - <_> - - - - <_>3 4 16 10 -1. - <_>11 4 8 5 2. - <_>3 9 8 5 2. - 0 - -0.0941470265388489 - -0.5215358734130859 - 0.0149731701239944 - <_> - - <_> - - - - <_>6 3 8 6 -1. - <_>6 5 8 2 3. - 0 - -0.0474544614553452 - 0.2654714882373810 - -0.0305874105542898 - <_> - - <_> - - - - <_>5 3 13 2 -1. - <_>5 4 13 1 2. - 0 - -5.6014367146417499e-004 - -0.1050644963979721 - 0.0601612813770771 - <_> - - <_> - - - - <_>4 10 6 7 -1. - <_>7 10 3 7 2. - 0 - -2.9601220740005374e-004 - 0.0622574500739574 - -0.1312654018402100 - <_> - - <_> - - - - <_>11 7 4 13 -1. - <_>11 7 2 13 2. - 0 - -0.0209184903651476 - -0.2083151042461395 - 0.0268431194126606 - <_> - - <_> - - - - <_>5 7 4 13 -1. - <_>7 7 2 13 2. - 0 - -7.2696260176599026e-003 - -0.1622764021158218 - 0.0619370490312576 - <_> - - <_> - - - - <_>5 10 14 3 -1. - <_>5 11 14 1 3. - 0 - 7.2555372025817633e-004 - -0.1031593978404999 - 0.0680408775806427 - <_> - - <_> - - - - <_>2 6 3 14 -1. - <_>2 13 3 7 2. - 0 - 0.0208288393914700 - -0.0445576906204224 - 0.2216746956110001 - <_> - - <_> - - - - <_>3 9 15 3 -1. - <_>8 9 5 3 3. - 0 - 0.0872011929750443 - 9.5432223752140999e-003 - -0.5870642066001892 - <_> - - <_> - - - - <_>2 4 6 16 -1. - <_>2 4 3 8 2. - <_>5 12 3 8 2. - 0 - 0.0415966287255287 - -0.0307745393365622 - 0.2880901992321014 - <_> - - <_> - - - - <_>12 0 3 13 -1. - <_>13 0 1 13 3. - 0 - -0.0261548794806004 - -0.5935354232788086 - 0.0143884103745222 - <_> - - <_> - - - - <_>4 0 8 20 -1. - <_>4 10 8 10 2. - 0 - 0.2717542946338654 - 0.0137177202850580 - -0.5461906790733337 - <_> - - <_> - - - - <_>8 2 7 9 -1. - <_>8 5 7 3 3. - 0 - 0.0218116994947195 - -0.0167981106787920 - 0.2906233072280884 - <_> - - <_> - - - - <_>5 0 3 13 -1. - <_>6 0 1 13 3. - 0 - -0.0199659299105406 - -0.4305211901664734 - 0.0189177598804235 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>14 2 3 5 2. - <_>11 7 3 5 2. - 0 - -1.1561929713934660e-003 - 0.0880315378308296 - -0.1959020942449570 - <_> - - <_> - - - - <_>5 9 6 7 -1. - <_>7 9 2 7 3. - 0 - -1.6627550357952714e-003 - 0.0891115590929985 - -0.0909596532583237 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - -1.7325150547549129e-003 - -0.1154083013534546 - 0.0536366701126099 - <_> - - <_> - - - - <_>7 7 6 7 -1. - <_>9 7 2 7 3. - 0 - -0.0392314083874226 - 0.6247127056121826 - -0.0136669203639030 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - 0.0104235801845789 - 0.0247111301869154 - -0.1675174981355667 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - 2.2725639864802361e-003 - -0.0551267787814140 - 0.1478146016597748 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -3.9644641801714897e-003 - 0.1133799031376839 - -0.0686720535159111 - <_> - - <_> - - - - <_>0 12 9 4 -1. - <_>0 14 9 2 2. - 0 - 4.0544760413467884e-003 - 0.0401802100241184 - -0.2383735030889511 - <_> - - <_> - - - - <_>7 7 8 10 -1. - <_>11 7 4 5 2. - <_>7 12 4 5 2. - 0 - 2.0538640674203634e-003 - 0.0328636914491653 - -0.1249582991003990 - <_> - - <_> - - - - <_>5 7 8 10 -1. - <_>5 7 4 5 2. - <_>9 12 4 5 2. - 0 - 2.9705381020903587e-003 - 0.0418100617825985 - -0.2053965926170349 - <_> - - <_> - - - - <_>14 15 6 5 -1. - <_>14 15 3 5 2. - 0 - -8.3381328731775284e-003 - 0.0922587364912033 - -0.0384351797401905 - <_> - - <_> - - - - <_>3 14 13 6 -1. - <_>3 16 13 2 3. - 0 - 1.5640279743820429e-003 - -0.0966615676879883 - 0.0855948179960251 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>10 12 7 2 2. - <_>3 14 7 2 2. - 0 - -0.0370529703795910 - -0.7791547179222107 - 0.0104182902723551 - <_> - - <_> - - - - <_>0 15 6 5 -1. - <_>3 15 3 5 2. - 0 - -0.0101099302992225 - 0.1249905973672867 - -0.0644378364086151 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - -0.0793359801173210 - 0.7078437209129334 - -3.1601081136614084e-003 - <_> - - <_> - - - - <_>3 0 3 13 -1. - <_>4 0 1 13 3. - 0 - -2.5811919476836920e-003 - -0.1680275946855545 - 0.0672576129436493 - <_> - - <_> - - - - <_>2 11 18 8 -1. - <_>8 11 6 8 3. - 0 - 0.0188635401427746 - -0.0527492985129356 - 0.1457815021276474 - <_> - - <_> - - - - <_>2 3 3 15 -1. - <_>3 3 1 15 3. - 0 - 6.1697891214862466e-004 - -0.0965271666646004 - 0.0930772423744202 - <_> - - <_> - - - - <_>16 0 3 13 -1. - <_>17 0 1 13 3. - 0 - -9.9242655560374260e-003 - 0.1216444000601769 - -0.0264398306608200 - <_> - - <_> - - - - <_>3 3 6 7 -1. - <_>5 3 2 7 3. - 0 - -0.0473820082843304 - -0.3719424009323120 - 0.0248844493180513 - <_> - - <_> - - - - <_>16 0 3 13 -1. - <_>17 0 1 13 3. - 0 - 3.8585590664297342e-003 - -0.0424208305776119 - 0.1199790015816689 - <_> - - <_> - - - - <_>1 0 3 13 -1. - <_>2 0 1 13 3. - 0 - 2.3721279576420784e-003 - -0.0727690532803535 - 0.1302762925624847 - <_> - - <_> - - - - <_>8 1 4 16 -1. - <_>10 1 2 8 2. - <_>8 9 2 8 2. - 0 - -0.0319685712456703 - -0.4708814918994904 - 0.0188630390912294 - <_> - - <_> - - - - <_>7 6 5 9 -1. - <_>7 9 5 3 3. - 0 - -7.2849751450121403e-004 - 0.2812831997871399 - -0.0307851396501064 - <_> - - <_> - - - - <_>6 5 8 8 -1. - <_>6 9 8 4 2. - 0 - -0.0120968800038099 - -0.7016307115554810 - 0.0133367097005248 - <_> - - <_> - - - - <_>0 1 6 5 -1. - <_>3 1 3 5 2. - 0 - -0.0176583696156740 - 0.1919316053390503 - -0.0479510016739368 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0109740598127246 - -0.2730732858181000 - 0.0287844892591238 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0185601804405451 - -0.4430676102638245 - 0.0204720199108124 - <_> - - <_> - - - - <_>11 0 9 7 -1. - <_>14 0 3 7 3. - 0 - 0.0138611001893878 - -0.0374713391065598 - 0.1092984974384308 - <_> - - <_> - - - - <_>0 11 12 7 -1. - <_>6 11 6 7 2. - 0 - 0.0562431700527668 - 0.0133221298456192 - -0.6197215914726257 - <_> - - <_> - - - - <_>7 5 9 5 -1. - <_>10 5 3 5 3. - 0 - -0.0137467999011278 - 0.1898090988397598 - -0.0438101515173912 - <_> - - <_> - - - - <_>2 1 15 2 -1. - <_>2 2 15 1 2. - 0 - -2.0494889758992940e-004 - -0.1480952054262161 - 0.0594585500657558 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 0.0114160301163793 - 0.0451118014752865 - -0.1727721989154816 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - 0.0411697886884212 - -0.0234428402036428 - 0.3341323137283325 - <_> - - <_> - - - - <_>6 8 14 4 -1. - <_>13 8 7 2 2. - <_>6 10 7 2 2. - 0 - -9.6223354339599609e-003 - -0.1608631014823914 - 0.0331831499934196 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>10 0 1 13 2. - 0 - 1.5951909590512514e-003 - -0.0635905116796494 - 0.1339666992425919 - <_> - - <_> - - - - <_>4 6 12 3 -1. - <_>4 6 6 3 2. - 0 - -6.3169049099087715e-003 - -0.1636531949043274 - 0.0515520498156548 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>7 2 3 7 2. - 0 - 0.0464673787355423 - -0.0256277099251747 - 0.3809756934642792 - <_> - - <_> - - - - <_>9 5 4 11 -1. - <_>9 5 2 11 2. - 0 - 0.0915985926985741 - 4.2748241685330868e-003 - -0.5974013209342957 - <_> - - <_> - - - - <_>7 5 4 11 -1. - <_>9 5 2 11 2. - 0 - -1.0416290024295449e-003 - -0.1473388969898224 - 0.0551059506833553 - <_> - - <_> - - - - <_>5 12 15 8 -1. - <_>10 12 5 8 3. - 0 - -0.0233344696462154 - 0.0922664627432823 - -0.0536538809537888 - <_> - - <_> - - - - <_>5 7 4 9 -1. - <_>7 7 2 9 2. - 0 - -6.3067381270229816e-003 - -0.1697469949722290 - 0.0600464791059494 - <_> - - <_> - - - - <_>6 6 10 4 -1. - <_>6 8 10 2 2. - 0 - 5.2549671381711960e-003 - -0.0889894068241119 - 0.0473065488040447 - <_> - - <_> - - - - <_>0 4 5 9 -1. - <_>0 7 5 3 3. - 0 - -0.0106994602829218 - -0.1582352072000504 - 0.0511008314788342 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -5.4387808777391911e-003 - 0.1252456009387970 - -0.0394726991653442 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 3.4613600000739098e-003 - -0.0688926801085472 - 0.1792038977146149 - <_> - - <_> - - - - <_>7 8 10 12 -1. - <_>7 12 10 4 3. - 0 - -0.0178943593055010 - -0.0945996567606926 - 0.0623227283358574 - <_> - - <_> - - - - <_>2 8 9 12 -1. - <_>5 8 3 12 3. - 0 - -0.2114790976047516 - -0.8627576828002930 - 9.4653964042663574e-003 - <_> - - <_> - - - - <_>11 0 9 9 -1. - <_>11 3 9 3 3. - 0 - 1.4149859780445695e-003 - -0.0862147882580757 - 0.0406359210610390 - <_> - - <_> - - - - <_>5 9 9 5 -1. - <_>8 9 3 5 3. - 0 - -1.5357299707829952e-003 - 0.0995254367589951 - -0.0775581598281860 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - 2.8714749496430159e-003 - -0.0637787729501724 - 0.1125103011727333 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0184000693261623 - 0.0237006694078445 - -0.3595368862152100 - <_> - - <_> - - - - <_>6 3 10 6 -1. - <_>11 3 5 3 2. - <_>6 6 5 3 2. - 0 - -0.0730780065059662 - -0.8383663892745972 - 2.1687510889023542e-003 - <_> - - <_> - - - - <_>3 4 14 6 -1. - <_>3 4 7 3 2. - <_>10 7 7 3 2. - 0 - 9.8323542624711990e-003 - -0.0538999699056149 - 0.1618697047233582 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 0.0229879599064589 - 0.0159551594406366 - -0.3307431042194367 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -5.4363980889320374e-003 - -0.1337265074253082 - 0.0581624507904053 - <_> - - <_> - - - - <_>5 3 12 6 -1. - <_>9 3 4 6 3. - 0 - 0.0101777398958802 - -0.0579019486904144 - 0.0407890602946281 - <_> - - <_> - - - - <_>3 3 12 6 -1. - <_>7 3 4 6 3. - 0 - -0.0516903698444366 - 0.4788129031658173 - -0.0200511794537306 - <_> - - <_> - - - - <_>8 4 6 9 -1. - <_>10 4 2 9 3. - 0 - -0.0463953316211700 - 0.3542290031909943 - -0.0166928898543119 - <_> - - <_> - - - - <_>2 12 13 2 -1. - <_>2 13 13 1 2. - 0 - 4.0920148603618145e-004 - -0.0588727891445160 - 0.1361768990755081 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>3 13 14 2 2. - 0 - 3.0743801034986973e-003 - 0.0318927317857742 - -0.2939678132534027 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1343895941972733 - 0.0150188403204083 - -0.5155730843544006 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - -0.0449545904994011 - -0.6540431976318359 - 5.8901738375425339e-003 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -0.0414790511131287 - -0.5692554116249085 - 0.0130122201517224 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0291170999407768 - -0.0191480293869972 - 0.1831838041543961 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - 0.0510732494294643 - 0.0152603099122643 - -0.4948062896728516 - <_> - - <_> - - - - <_>3 1 15 12 -1. - <_>3 7 15 6 2. - 0 - 7.0886377943679690e-004 - 0.0876986533403397 - -0.0733336731791496 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0118353897705674 - -0.0391898788511753 - 0.2083484977483749 - <_> - - <_> - - - - <_>16 1 4 8 -1. - <_>16 5 4 4 2. - 0 - -4.2260489426553249e-003 - -0.1873376965522766 - 0.0746668502688408 - <_> - - <_> - - - - <_>0 14 12 5 -1. - <_>4 14 4 5 3. - 0 - 0.0348477996885777 - -0.0305729601532221 - 0.2651110887527466 - <_> - - <_> - - - - <_>11 5 2 15 -1. - <_>11 5 1 15 2. - 0 - 0.0129329804331064 - 0.0222243499010801 - -0.2320410013198853 - <_> - - <_> - - - - <_>6 2 7 6 -1. - <_>6 5 7 3 2. - 0 - -3.4806900657713413e-003 - 0.0605482384562492 - -0.1303485035896301 - <_> - - <_> - - - - <_>10 2 6 9 -1. - <_>10 5 6 3 3. - 0 - 0.0172250792384148 - -6.7219920456409454e-003 - 0.1112814992666245 - <_> - - <_> - - - - <_>7 5 2 15 -1. - <_>8 5 1 15 2. - 0 - -2.4316289927810431e-003 - -0.1872065961360931 - 0.0412841401994228 - <_> - - <_> - - - - <_>18 0 2 18 -1. - <_>18 0 1 18 2. - 0 - -0.0117866899818182 - 0.1591742038726807 - -0.0307634007185698 - <_> - - <_> - - - - <_>0 8 4 8 -1. - <_>0 12 4 4 2. - 0 - -5.3132520988583565e-003 - -0.1378607004880905 - 0.0542466305196285 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>8 6 2 7 2. - 0 - -0.0200120396912098 - 0.2935963869094849 - -0.0268663503229618 - <_> - - <_> - - - - <_>6 7 8 4 -1. - <_>10 7 4 4 2. - 0 - 2.0955558866262436e-003 - 0.0679630637168884 - -0.1252086013555527 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>10 9 5 3 2. - <_>5 12 5 3 2. - 0 - -0.0396486409008503 - -0.5819538831710815 - 0.0131466900929809 - <_> - - <_> - - - - <_>4 7 5 8 -1. - <_>4 11 5 4 2. - 0 - -0.0344858504831791 - 0.4555915892124176 - -0.0186594296246767 - <_> - - <_> - - - - <_>13 8 7 6 -1. - <_>13 10 7 2 3. - 0 - -0.0445695407688618 - -0.9206756949424744 - 5.3931041620671749e-003 - <_> - - <_> - - - - <_>0 8 7 6 -1. - <_>0 10 7 2 3. - 0 - -1.1394550092518330e-003 - -0.2193243950605393 - 0.0362493805587292 - <_> - - <_> - - - - <_>4 0 12 19 -1. - <_>4 0 6 19 2. - 0 - -0.0370440818369389 - 0.1619254946708679 - -0.0476619191467762 - <_> - - <_> - - - - <_>0 12 15 8 -1. - <_>5 12 5 8 3. - 0 - 0.0193004906177521 - -0.0544328317046165 - 0.1443210989236832 - <_> - - <_> - - - - <_>6 8 14 4 -1. - <_>13 8 7 2 2. - <_>6 10 7 2 2. - 0 - -1.4382150257006288e-003 - -0.0673439800739288 - 0.0425113812088966 - <_> - - <_> - - - - <_>1 9 13 3 -1. - <_>1 10 13 1 3. - 0 - 0.0387610085308552 - 0.0141719300299883 - -0.5338264703750610 - <_> - - <_> - - - - <_>18 0 2 18 -1. - <_>18 0 1 18 2. - 0 - -0.1526580005884171 - -0.9153332710266113 - 2.1413750946521759e-003 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>1 0 1 18 2. - 0 - -8.4089813753962517e-003 - 0.1770524978637695 - -0.0437534302473068 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>16 6 2 14 2. - 0 - -0.1667317003011704 - -0.5639045238494873 - 7.5904577970504761e-003 - <_> - - <_> - - - - <_>4 0 8 8 -1. - <_>4 0 4 4 2. - <_>8 4 4 4 2. - 0 - -7.3619261384010315e-003 - -0.1969183981418610 - 0.0396985001862049 - <_> - - <_> - - - - <_>2 0 16 10 -1. - <_>10 0 8 5 2. - <_>2 5 8 5 2. - 0 - -9.9920090287923813e-003 - -0.1341951042413712 - 0.0634891986846924 - <_> - - <_> - - - - <_>3 10 6 7 -1. - <_>6 10 3 7 2. - 0 - -2.2656610235571861e-003 - 0.0796760618686676 - -0.1068596020340920 - <_> - - <_> - - - - <_>1 9 18 5 -1. - <_>7 9 6 5 3. - 0 - -0.1386882066726685 - -0.4730693101882935 - 0.0153541304171085 - <_> - - <_> - - - - <_>0 7 4 9 -1. - <_>2 7 2 9 2. - 0 - -0.1328424066305161 - -0.8798437118530273 - 7.0595988072454929e-003 - <_> - - <_> - - - - <_>14 0 6 16 -1. - <_>14 0 3 16 2. - 0 - -0.0248822998255491 - 0.1333352029323578 - -0.0409336015582085 - <_> - - <_> - - - - <_>0 3 5 9 -1. - <_>0 6 5 3 3. - 0 - -6.6814320161938667e-003 - -0.1029554009437561 - 0.0748700425028801 - <_> - - <_> - - - - <_>11 2 9 12 -1. - <_>11 6 9 4 3. - 0 - 0.0603266991674900 - 0.0133558399975300 - -0.3760299980640411 - <_> - - <_> - - - - <_>0 2 9 12 -1. - <_>0 6 9 4 3. - 0 - -0.0855823010206223 - 0.2120077013969421 - -0.0387420281767845 - <_> - - <_> - - - - <_>8 2 5 12 -1. - <_>8 6 5 4 3. - 0 - -0.0120764002203941 - -0.0824575200676918 - 0.0677804425358772 - <_> - - <_> - - - - <_>5 6 9 9 -1. - <_>5 9 9 3 3. - 0 - 0.0203110892325640 - -0.1181799024343491 - 0.0648305788636208 - <_> - - <_> - - - - <_>0 17 20 2 -1. - <_>0 18 20 1 2. - 0 - -3.9900741539895535e-003 - -0.1572359949350357 - 0.0530339293181896 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - -1.4961370034143329e-003 - 0.2439212948083878 - -0.0311708394438028 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>9 0 2 8 3. - 0 - 1.8568099767435342e-004 - -0.1940955072641373 - 0.0454902090132236 - <_> - - <_> - - - - <_>6 5 8 14 -1. - <_>6 12 8 7 2. - 0 - 0.1479648053646088 - 6.2650348991155624e-003 - -0.9998729825019836 - <_> - - <_> - - - - <_>11 0 9 9 -1. - <_>11 3 9 3 3. - 0 - 0.1691866964101791 - 4.2962608858942986e-004 - -0.3549610078334808 - <_> - - <_> - - - - <_>0 0 9 9 -1. - <_>0 3 9 3 3. - 0 - -1.9380000594537705e-004 - -0.1305679976940155 - 0.0548771694302559 - <_> - - <_> - - - - <_>11 0 4 14 -1. - <_>13 0 2 7 2. - <_>11 7 2 7 2. - 0 - -6.2729098135605454e-004 - 0.0410535708069801 - -0.0831749886274338 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>6 1 6 4 3. - 0 - -2.6877908967435360e-003 - 0.1551398932933807 - -0.0555738992989063 - <_> - - <_> - - - - <_>11 0 4 14 -1. - <_>13 0 2 7 2. - <_>11 7 2 7 2. - 0 - -0.0768852531909943 - -0.6144021153450012 - 3.2789220567792654e-003 - <_> - - <_> - - - - <_>4 0 4 14 -1. - <_>4 0 2 7 2. - <_>6 7 2 7 2. - 0 - -1.6956549370661378e-004 - 0.0609341487288475 - -0.1471709012985230 - <_> - - <_> - - - - <_>6 13 10 6 -1. - <_>11 13 5 3 2. - <_>6 16 5 3 2. - 0 - 0.0373908504843712 - 8.8595114648342133e-003 - -0.2384341061115265 - <_> - - <_> - - - - <_>1 8 14 4 -1. - <_>1 8 7 2 2. - <_>8 10 7 2 2. - 0 - -3.7611280567944050e-003 - -0.1189605966210365 - 0.0545266792178154 - <_> - - <_> - - - - <_>11 1 4 9 -1. - <_>11 1 2 9 2. - 0 - -0.0755386725068092 - 1. - -2.8170819859951735e-003 - <_> - - <_> - - - - <_>5 1 4 9 -1. - <_>7 1 2 9 2. - 0 - 5.1163119496777654e-004 - -0.1133382990956307 - 0.0682932510972023 - <_> - - <_> - - - - <_>9 0 6 6 -1. - <_>9 0 3 6 2. - 0 - -0.0543735213577747 - 0.5677248835563660 - -5.5303489789366722e-003 - <_> - - <_> - - - - <_>5 0 6 6 -1. - <_>8 0 3 6 2. - 0 - -0.0122007597237825 - 0.2631076872348785 - -0.0353340692818165 - <_> - - <_> - - - - <_>6 5 8 4 -1. - <_>6 5 4 4 2. - 0 - 0.0653407573699951 - 8.2145677879452705e-003 - -0.9791451096534729 - <_> - - <_> - - - - <_>2 9 12 4 -1. - <_>6 9 4 4 3. - 0 - -0.0970281064510345 - -0.7584530711174011 - 6.8704010918736458e-003 - <_> - - <_> - - - - <_>10 4 3 14 -1. - <_>11 4 1 14 3. - 0 - -0.0497682802379131 - -0.8078631758689880 - 1.3162019895389676e-003 - <_> - - <_> - - - - <_>7 4 3 14 -1. - <_>8 4 1 14 3. - 0 - -2.9802118660882115e-004 - 0.0850996226072311 - -0.0910548269748688 - <_> - - <_> - - - - <_>0 0 20 14 -1. - <_>0 0 10 14 2. - 0 - 0.0101245697587729 - -0.0891725793480873 - 0.0774021893739700 - <_> - - <_> - - - - <_>2 9 16 10 -1. - <_>10 9 8 10 2. - 0 - 8.1574246287345886e-003 - -0.0640160292387009 - 0.1246282979846001 - <_> - - <_> - - - - <_>2 5 16 8 -1. - <_>10 5 8 4 2. - <_>2 9 8 4 2. - 0 - -0.0120939202606678 - -0.1843356043100357 - 0.0496591888368130 - <_> - - <_> - - - - <_>4 2 10 6 -1. - <_>4 4 10 2 3. - 0 - -0.0119069097563624 - 0.2627781033515930 - -0.0299211591482162 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0814384222030640 - -0.6438925266265869 - 0.0172327104955912 - <_> - - <_> - - - - <_>0 9 18 3 -1. - <_>0 10 18 1 3. - 0 - 1.4961180277168751e-003 - -0.1222866028547287 - 0.0577638708055019 - <_> - - <_> - - - - <_>3 11 14 9 -1. - <_>3 14 14 3 3. - 0 - -0.0226512495428324 - -0.1109075993299484 - 0.0703856423497200 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0237897709012032 - 0.2964445054531097 - -0.0259977392852306 - <_> - - <_> - - - - <_>6 15 14 4 -1. - <_>13 15 7 2 2. - <_>6 17 7 2 2. - 0 - 1.4299990143626928e-003 - -0.0897168517112732 - 0.0560308210551739 - <_> - - <_> - - - - <_>3 13 10 6 -1. - <_>3 13 5 3 2. - <_>8 16 5 3 2. - 0 - -0.0415934585034847 - -0.5816047191619873 - 0.0115999300032854 - <_> - - <_> - - - - <_>0 6 20 3 -1. - <_>0 7 20 1 3. - 0 - -2.5586199481040239e-003 - 0.0622414089739323 - -0.1132832989096642 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.1025229021906853 - -0.8518571853637695 - 8.2774916663765907e-003 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -3.1799520365893841e-003 - -0.1391806006431580 - 0.0537192188203335 - <_> - - <_> - - - - <_>0 15 16 3 -1. - <_>0 16 16 1 3. - 0 - -3.9835860952734947e-003 - 0.1553149074316025 - -0.0533990003168583 - <_> - - <_> - - - - <_>2 16 16 4 -1. - <_>10 16 8 2 2. - <_>2 18 8 2 2. - 0 - 0.0108959600329399 - 0.0390849001705647 - -0.2126895934343338 - <_> - - <_> - - - - <_>1 15 13 3 -1. - <_>1 16 13 1 3. - 0 - 0.0178651008754969 - -0.0251462105661631 - 0.3358156085014343 - <_> - - <_> - - - - <_>5 10 12 6 -1. - <_>11 10 6 3 2. - <_>5 13 6 3 2. - 0 - 5.5075511336326599e-003 - 0.0233143102377653 - -0.0936663076281548 - <_> - - <_> - - - - <_>3 10 12 6 -1. - <_>3 10 6 3 2. - <_>9 13 6 3 2. - 0 - 2.0092551130801439e-003 - 0.0572313107550144 - -0.1409174948930740 - <_> - - <_> - - - - <_>7 14 10 6 -1. - <_>12 14 5 3 2. - <_>7 17 5 3 2. - 0 - -0.0122186997905374 - 0.1924355030059815 - -0.0246311090886593 - <_> - - <_> - - - - <_>2 13 7 6 -1. - <_>2 15 7 2 3. - 0 - 1.8039119895547628e-003 - 0.0557931996881962 - -0.1294033974409103 - <_> - - <_> - - - - <_>5 14 14 2 -1. - <_>5 15 14 1 2. - 0 - 0.0221598409116268 - -9.0001197531819344e-003 - 0.5215622186660767 - <_> - - <_> - - - - <_>1 16 18 3 -1. - <_>1 17 18 1 3. - 0 - -0.0358272902667522 - -0.6290597915649414 - 0.0117123899981380 - <_> - - <_> - - - - <_>16 1 4 14 -1. - <_>18 1 2 7 2. - <_>16 8 2 7 2. - 0 - 8.9478418231010437e-003 - -0.0374555811285973 - 0.1090630963444710 - <_> - - <_> - - - - <_>6 5 8 14 -1. - <_>6 12 8 7 2. - 0 - -0.1286190003156662 - -0.3952718079090118 - 0.0181515291333199 - <_> - - <_> - - - - <_>5 14 14 2 -1. - <_>5 15 14 1 2. - 0 - 1.8464029999449849e-003 - -0.0339525304734707 - 0.0965961888432503 - <_> - - <_> - - - - <_>4 10 6 8 -1. - <_>6 10 2 8 3. - 0 - 2.8246780857443810e-003 - -0.0626332610845566 - 0.1119887977838516 - <_> - - <_> - - - - <_>5 4 10 12 -1. - <_>10 4 5 6 2. - <_>5 10 5 6 2. - 0 - 0.0690758526325226 - 0.0135905602946877 - -0.5259826183319092 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - -8.0794151872396469e-003 - 0.1308156996965408 - -0.0501007288694382 - <_> - - <_> - - - - <_>3 13 14 4 -1. - <_>10 13 7 2 2. - <_>3 15 7 2 2. - 0 - -3.7193649914115667e-003 - -0.1488758027553558 - 0.0518234893679619 - <_> - - <_> - - - - <_>5 9 6 10 -1. - <_>5 9 3 5 2. - <_>8 14 3 5 2. - 0 - 2.0610638894140720e-003 - -0.0655459389090538 - 0.1134513020515442 - <_> - - <_> - - - - <_>9 7 6 7 -1. - <_>9 7 3 7 2. - 0 - -0.0607952810823917 - -0.7821925878524780 - 4.5540397986769676e-003 - <_> - - <_> - - - - <_>5 7 6 7 -1. - <_>8 7 3 7 2. - 0 - -7.3096780106425285e-003 - -0.1958681046962738 - 0.0355918705463409 - <_> - - <_> - - - - <_>7 13 8 6 -1. - <_>7 15 8 2 3. - 0 - -2.3796008899807930e-003 - 0.0433299206197262 - -0.0601194202899933 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - -0.0378744788467884 - 0.1670041978359222 - -0.0410824716091156 - <_> - - <_> - - - - <_>6 8 12 5 -1. - <_>10 8 4 5 3. - 0 - -0.0110115502029657 - -0.0797158032655716 - 0.0322470404207706 - <_> - - <_> - - - - <_>5 9 8 5 -1. - <_>9 9 4 5 2. - 0 - -1.5278880018740892e-003 - 0.0975419133901596 - -0.0946948304772377 - <_> - - <_> - - - - <_>7 5 13 3 -1. - <_>7 6 13 1 3. - 0 - 0.0371444188058376 - -4.4054100289940834e-003 - 0.4415973126888275 - <_> - - <_> - - - - <_>0 5 13 3 -1. - <_>0 6 13 1 3. - 0 - -0.0499489493668079 - -0.8040006160736084 - 9.0302517637610435e-003 - <_> - - <_> - - - - <_>4 0 13 6 -1. - <_>4 2 13 2 3. - 0 - -0.0185588598251343 - 0.1855690032243729 - -0.0266484804451466 - -1.3472950458526611 - 26 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 8 4 -1. - <_>4 2 4 4 2. - 0 - 0.0591064691543579 - -0.1939579993486404 - 0.2727208137512207 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 0.0267840195447207 - -0.4209322929382324 - 0.1233024001121521 - <_> - - <_> - - - - <_>2 12 10 8 -1. - <_>2 12 5 4 2. - <_>7 16 5 4 2. - 0 - 8.6407009512186050e-003 - -0.3023687005043030 - 0.1315350979566574 - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - -1.1792869772762060e-003 - 0.0827135369181633 - -0.3514054119586945 - <_> - - <_> - - - - <_>4 4 3 10 -1. - <_>4 9 3 5 2. - 0 - -2.2481461055576801e-003 - -0.5132396817207336 - 0.0546146109700203 - <_> - - <_> - - - - <_>3 0 15 2 -1. - <_>3 1 15 1 2. - 0 - 5.7527530007064342e-003 - -0.1924300938844681 - 0.1387203037738800 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - 0.0100340200588107 - 0.0607736818492413 - -0.3163137137889862 - <_> - - <_> - - - - <_>4 18 13 2 -1. - <_>4 19 13 1 2. - 0 - -3.2057110220193863e-003 - 0.1347106993198395 - -0.1633301973342896 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 12 8 2 2. - <_>10 14 8 2 2. - 0 - 0.0138036301359534 - 0.0745902881026268 - -0.2775141894817352 - <_> - - <_> - - - - <_>5 3 11 9 -1. - <_>5 6 11 3 3. - 0 - -0.1921301037073135 - 0.2689034044742584 - -0.0665529072284698 - <_> - - <_> - - - - <_>0 2 20 10 -1. - <_>0 7 20 5 2. - 0 - -0.0702798217535019 - -0.3287015855312347 - 0.0499120391905308 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - 0.0315196700394154 - 0.0358657017350197 - -0.5048919916152954 - <_> - - <_> - - - - <_>3 8 6 10 -1. - <_>3 8 3 5 2. - <_>6 13 3 5 2. - 0 - -0.0111644202843308 - -0.2742295861244202 - 0.0739491730928421 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 6.1416681855916977e-003 - -0.0879447981715202 - 0.1549274027347565 - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>7 0 6 6 3. - 0 - 0.2518314123153687 - -0.0936058536171913 - 0.1882757991552353 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0195243991911411 - -0.2873350083827972 - 0.0491477698087692 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -0.0216894894838333 - -0.3341565132141113 - 0.0484509915113449 - <_> - - <_> - - - - <_>6 5 9 5 -1. - <_>9 5 3 5 3. - 0 - 0.0340999104082584 - -0.1477680057287216 - 0.1132235974073410 - <_> - - <_> - - - - <_>1 7 18 4 -1. - <_>1 7 9 2 2. - <_>10 9 9 2 2. - 0 - -0.0203775502741337 - -0.2977840900421143 - 0.0567955411970615 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - 0.0239865407347679 - -0.0551398396492004 - 0.3567248880863190 - <_> - - <_> - - - - <_>7 6 5 8 -1. - <_>7 10 5 4 2. - 0 - -0.0145788900554180 - -0.3359586894512177 - 0.0497763305902481 - <_> - - <_> - - - - <_>4 9 12 4 -1. - <_>8 9 4 4 3. - 0 - -5.4530607303604484e-004 - 0.1490631997585297 - -0.1267461925745010 - <_> - - <_> - - - - <_>4 4 12 8 -1. - <_>8 4 4 8 3. - 0 - 3.0076410621404648e-003 - -0.3865425884723663 - 0.0373385101556778 - <_> - - <_> - - - - <_>12 10 7 4 -1. - <_>12 12 7 2 2. - 0 - 6.1654142336919904e-004 - 0.0703506171703339 - -0.2776953876018524 - <_> - - <_> - - - - <_>4 0 8 8 -1. - <_>4 0 4 4 2. - <_>8 4 4 4 2. - 0 - 0.0514610782265663 - 0.0276138596236706 - -0.4910759031772614 - <_> - - <_> - - - - <_>13 8 7 6 -1. - <_>13 10 7 2 3. - 0 - 0.0556076392531395 - 0.0276269391179085 - -0.2961547970771790 - <_> - - <_> - - - - <_>1 5 12 4 -1. - <_>5 5 4 4 3. - 0 - 0.0297090299427509 - 0.0659616366028786 - -0.2050871998071671 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0340468287467957 - -0.0389025807380676 - 0.2468100041151047 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 0.0248078498989344 - 0.0350155197083950 - -0.4140163958072662 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0407481603324413 - 0.0429677292704582 - -0.3204385936260223 - <_> - - <_> - - - - <_>1 3 14 4 -1. - <_>1 3 7 2 2. - <_>8 5 7 2 2. - 0 - 0.0106646595522761 - 0.0569528900086880 - -0.2474599927663803 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - -0.0630903691053391 - 0.1689924001693726 - -0.0186929106712341 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 0.0343711897730827 - -0.0475467517971992 - 0.3278163969516754 - <_> - - <_> - - - - <_>7 12 10 8 -1. - <_>7 16 10 4 2. - 0 - -0.1251811981201172 - -0.5628297924995422 - 0.0137214595451951 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -0.0222737099975348 - 0.2845293879508972 - -0.0473347418010235 - <_> - - <_> - - - - <_>10 12 7 8 -1. - <_>10 16 7 4 2. - 0 - 3.1560619827359915e-003 - 0.0670930668711662 - -0.1577761024236679 - <_> - - <_> - - - - <_>1 2 13 2 -1. - <_>1 3 13 1 2. - 0 - -8.5235182195901871e-003 - -0.4540449082851410 - 0.0302389003336430 - <_> - - <_> - - - - <_>6 15 13 3 -1. - <_>6 16 13 1 3. - 0 - 9.4529008492827415e-003 - -0.0550230406224728 - 0.1402536034584045 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0152680901810527 - -0.4103938937187195 - 0.0331609100103378 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 0.0106658302247524 - -0.1171678006649017 - 0.0959433987736702 - <_> - - <_> - - - - <_>0 15 20 4 -1. - <_>0 15 10 2 2. - <_>10 17 10 2 2. - 0 - -0.0182115696370602 - -0.2485010027885437 - 0.0677136331796646 - <_> - - <_> - - - - <_>4 4 16 4 -1. - <_>4 6 16 2 2. - 0 - 2.9094598721712828e-004 - 0.0499810092151165 - -0.2229803949594498 - <_> - - <_> - - - - <_>7 5 6 11 -1. - <_>9 5 2 11 3. - 0 - 1.2524049961939454e-003 - -0.2356739044189453 - 0.0600581392645836 - <_> - - <_> - - - - <_>11 10 8 10 -1. - <_>15 10 4 5 2. - <_>11 15 4 5 2. - 0 - -0.1020013019442558 - 0.4681766927242279 - -0.0140468701720238 - <_> - - <_> - - - - <_>1 4 10 6 -1. - <_>1 4 5 3 2. - <_>6 7 5 3 2. - 0 - -0.0538033209741116 - -0.3887513875961304 - 0.0385331511497498 - <_> - - <_> - - - - <_>7 7 13 2 -1. - <_>7 8 13 1 2. - 0 - 0.0359198190271854 - 0.0176877491176128 - -0.6314917206764221 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - -9.9846003577113152e-003 - 0.2391439974308014 - -0.0584900006651878 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - 0.0221579093486071 - -0.0448142215609550 - 0.1942324042320252 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0142407398670912 - -0.3767049908638001 - 0.0349290482699871 - <_> - - <_> - - - - <_>12 10 8 10 -1. - <_>16 10 4 5 2. - <_>12 15 4 5 2. - 0 - -0.0591504797339439 - 0.1681668013334274 - -0.0352320000529289 - <_> - - <_> - - - - <_>0 11 18 4 -1. - <_>0 11 9 2 2. - <_>9 13 9 2 2. - 0 - 0.0360742285847664 - 0.0228684898465872 - -0.5782889723777771 - <_> - - <_> - - - - <_>12 10 8 10 -1. - <_>16 10 4 5 2. - <_>12 15 4 5 2. - 0 - 0.0576923005282879 - -0.0210031792521477 - 0.3075096905231476 - <_> - - <_> - - - - <_>0 10 8 10 -1. - <_>0 10 4 5 2. - <_>4 15 4 5 2. - 0 - -0.0566193982958794 - 0.2338367998600006 - -0.0550032481551170 - <_> - - <_> - - - - <_>7 6 12 14 -1. - <_>13 6 6 7 2. - <_>7 13 6 7 2. - 0 - -0.0106975696980953 - -0.1323641985654831 - 0.0915368273854256 - <_> - - <_> - - - - <_>1 10 7 4 -1. - <_>1 12 7 2 2. - 0 - 4.2940411367453635e-004 - 0.0523620583117008 - -0.2347017973661423 - <_> - - <_> - - - - <_>12 10 4 7 -1. - <_>12 10 2 7 2. - 0 - 3.9490307681262493e-003 - 0.0585836209356785 - -0.0825335979461670 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>10 0 10 2 2. - 0 - 0.0298104304820299 - 0.0716840475797653 - -0.1693128049373627 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -0.0114629101008177 - -0.2641035914421082 - 0.0446875803172588 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0229963902384043 - 0.0329921804368496 - -0.3435899019241333 - <_> - - <_> - - - - <_>12 10 4 7 -1. - <_>12 10 2 7 2. - 0 - -0.0567926093935966 - -0.7576050758361816 - 2.4003670550882816e-003 - <_> - - <_> - - - - <_>4 10 4 7 -1. - <_>6 10 2 7 2. - 0 - -4.4709402136504650e-003 - 0.1627760976552963 - -0.0681930631399155 - <_> - - <_> - - - - <_>12 0 2 14 -1. - <_>12 0 1 14 2. - 0 - -0.0123949898406863 - -0.4360333085060120 - 0.0284161400049925 - <_> - - <_> - - - - <_>4 2 12 17 -1. - <_>10 2 6 17 2. - 0 - 0.2918559014797211 - -0.0333005301654339 - 0.3986696898937225 - <_> - - <_> - - - - <_>12 12 6 7 -1. - <_>12 12 3 7 2. - 0 - 3.3633329439908266e-003 - -0.1097209006547928 - 0.0569312497973442 - <_> - - <_> - - - - <_>1 9 10 10 -1. - <_>6 9 5 10 2. - 0 - -0.0351752601563931 - -0.5721371769905090 - 0.0209034904837608 - <_> - - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -0.0120448395609856 - 0.0910905227065086 - -0.1194794997572899 - <_> - - <_> - - - - <_>7 6 5 9 -1. - <_>7 9 5 3 3. - 0 - 6.5466752275824547e-003 - 0.2251234054565430 - -0.0583094507455826 - <_> - - <_> - - - - <_>9 5 4 14 -1. - <_>11 5 2 7 2. - <_>9 12 2 7 2. - 0 - -3.3635019790381193e-003 - 0.0831234529614449 - -0.1614429950714111 - <_> - - <_> - - - - <_>8 5 4 14 -1. - <_>8 5 2 7 2. - <_>10 12 2 7 2. - 0 - -0.0234512500464916 - 0.2511880993843079 - -0.0480303317308426 - <_> - - <_> - - - - <_>9 3 6 12 -1. - <_>11 3 2 12 3. - 0 - 0.0193560998886824 - 0.0581345893442631 - -0.2079125046730042 - <_> - - <_> - - - - <_>5 3 6 12 -1. - <_>7 3 2 12 3. - 0 - -0.0899949520826340 - -0.7506849169731140 - 0.0141698596999049 - <_> - - <_> - - - - <_>4 10 14 4 -1. - <_>11 10 7 2 2. - <_>4 12 7 2 2. - 0 - 0.0128882601857185 - 0.0337525717914104 - -0.2571501135826111 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 0.0189611706882715 - 0.0347173810005188 - -0.3602784872055054 - <_> - - <_> - - - - <_>7 4 6 7 -1. - <_>9 4 2 7 3. - 0 - -0.0208355505019426 - 0.5785130858421326 - -0.0221113096922636 - <_> - - <_> - - - - <_>1 14 13 2 -1. - <_>1 15 13 1 2. - 0 - 0.0100187798961997 - -0.0397758483886719 - 0.2681483924388886 - <_> - - <_> - - - - <_>7 14 13 2 -1. - <_>7 15 13 1 2. - 0 - -8.7516820058226585e-003 - 0.1125781983137131 - -0.0485382787883282 - <_> - - <_> - - - - <_>4 13 12 4 -1. - <_>4 15 12 2 2. - 0 - -0.0623667500913143 - -0.6608911156654358 - 0.0168521404266357 - <_> - - <_> - - - - <_>12 13 7 4 -1. - <_>12 15 7 2 2. - 0 - -0.0195821803063154 - -0.2118254005908966 - 0.0357029885053635 - <_> - - <_> - - - - <_>1 13 7 4 -1. - <_>1 15 7 2 2. - 0 - 2.2675599902868271e-003 - 0.0612129196524620 - -0.2004884928464890 - <_> - - <_> - - - - <_>10 6 3 14 -1. - <_>11 6 1 14 3. - 0 - -0.0465584583580494 - -0.5645493865013123 - 9.2866625636816025e-003 - <_> - - <_> - - - - <_>7 6 3 14 -1. - <_>8 6 1 14 3. - 0 - -7.7152079902589321e-003 - 0.1503991931676865 - -0.0833281502127647 - <_> - - <_> - - - - <_>8 13 6 7 -1. - <_>10 13 2 7 3. - 0 - 0.0415516681969166 - 0.0262477397918701 - -0.3234752118587494 - <_> - - <_> - - - - <_>2 5 6 10 -1. - <_>2 5 3 5 2. - <_>5 10 3 5 2. - 0 - -0.0217890795320272 - -0.3237582147121429 - 0.0317261889576912 - <_> - - <_> - - - - <_>15 3 3 16 -1. - <_>16 3 1 16 3. - 0 - 1.9698198884725571e-003 - -0.0925642475485802 - 0.1082341000437737 - <_> - - <_> - - - - <_>2 3 3 16 -1. - <_>3 3 1 16 3. - 0 - -5.2744988352060318e-003 - -0.1399033069610596 - 0.0771208778023720 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>14 0 3 13 2. - 0 - 0.0560076609253883 - -0.1032849997282028 - 0.1145555973052979 - <_> - - <_> - - - - <_>0 0 6 13 -1. - <_>3 0 3 13 2. - 0 - 0.2274103015661240 - 0.0160284508019686 - -0.6814510822296143 - <_> - - <_> - - - - <_>17 6 3 14 -1. - <_>17 13 3 7 2. - 0 - 0.0513623803853989 - -0.0230258107185364 - 0.1544602960348129 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -0.0130170695483685 - -0.3260639905929565 - 0.0328926108777523 - <_> - - <_> - - - - <_>17 6 3 14 -1. - <_>17 13 3 7 2. - 0 - 0.1578202992677689 - -3.9765262044966221e-003 - 0.7776526212692261 - <_> - - <_> - - - - <_>1 10 10 10 -1. - <_>1 10 5 5 2. - <_>6 15 5 5 2. - 0 - -0.0998050868511200 - 0.6860954165458679 - -0.0146481804549694 - <_> - - <_> - - - - <_>0 0 20 10 -1. - <_>0 5 20 5 2. - 0 - 0.3750635087490082 - 0.0149258002638817 - -0.8310546875000000 - <_> - - <_> - - - - <_>2 8 13 3 -1. - <_>2 9 13 1 3. - 0 - -7.9828302841633558e-004 - -0.2016189992427826 - 0.0478976890444756 - <_> - - <_> - - - - <_>7 6 10 14 -1. - <_>7 13 10 7 2. - 0 - -0.2124160975217819 - -0.3440945148468018 - 0.0109504302963614 - <_> - - <_> - - - - <_>0 7 13 2 -1. - <_>0 8 13 1 2. - 0 - 0.0394516810774803 - 0.0139669599011540 - -0.7216311097145081 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0291855093091726 - -0.2746245861053467 - 0.0354969203472137 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - 0.0270556006580591 - -0.0469957403838634 - 0.2928943037986755 - <_> - - <_> - - - - <_>8 6 6 10 -1. - <_>10 6 2 10 3. - 0 - -0.0260523501783609 - 0.2075203955173492 - -0.0363530814647675 - <_> - - <_> - - - - <_>3 13 14 6 -1. - <_>3 13 7 3 2. - <_>10 16 7 3 2. - 0 - 0.0572162196040154 - 0.0188957396894693 - -0.5714390873908997 - <_> - - <_> - - - - <_>10 1 4 19 -1. - <_>10 1 2 19 2. - 0 - -0.0171518400311470 - -0.3300957083702087 - 0.0385286286473274 - <_> - - <_> - - - - <_>1 10 18 6 -1. - <_>1 12 18 2 3. - 0 - -0.1230439990758896 - -0.7831639051437378 - 0.0116793904453516 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - 0.0567861609160900 - 0.0110638197511435 - -0.5352609753608704 - <_> - - <_> - - - - <_>6 1 4 19 -1. - <_>8 1 2 19 2. - 0 - 0.1194284036755562 - 9.5137851312756538e-003 - -0.9063721895217896 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0677071437239647 - -0.0392275191843510 - 0.2817656099796295 - <_> - - <_> - - - - <_>0 5 20 2 -1. - <_>0 6 20 1 2. - 0 - -0.0549188815057278 - -0.6206169128417969 - 0.0160722695291042 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - 9.2878006398677826e-003 - -0.0503394901752472 - 0.1904010027647018 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0131414895877242 - 0.1862982958555222 - -0.0755285471677780 - <_> - - <_> - - - - <_>12 0 4 7 -1. - <_>12 0 2 7 2. - 0 - 2.9876120970584452e-004 - -0.1616346985101700 - 0.0535895004868507 - <_> - - <_> - - - - <_>0 2 18 8 -1. - <_>6 2 6 8 3. - 0 - 0.1015359982848167 - 0.1845827996730804 - -0.0625706166028976 - <_> - - <_> - - - - <_>10 0 10 9 -1. - <_>10 0 5 9 2. - 0 - 0.2720572948455811 - 0.0137624796479940 - -0.4936406016349793 - <_> - - <_> - - - - <_>0 0 10 9 -1. - <_>5 0 5 9 2. - 0 - 0.0587302111089230 - -0.2393368035554886 - 0.0791668072342873 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - 0.0196942593902349 - 0.0371952801942825 - -0.2610926032066345 - <_> - - <_> - - - - <_>1 13 5 6 -1. - <_>1 16 5 3 2. - 0 - -1.0566900164121762e-004 - 0.0670529976487160 - -0.1651581972837448 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - -0.0197612792253494 - 0.0864436924457550 - -0.0686579719185829 - <_> - - <_> - - - - <_>4 5 12 10 -1. - <_>4 5 6 5 2. - <_>10 10 6 5 2. - 0 - 0.0531685091555119 - 0.0297677908092737 - -0.3522577881813049 - <_> - - <_> - - - - <_>13 9 5 9 -1. - <_>13 12 5 3 3. - 0 - 0.0260710697621107 - 0.0252163596451283 - -0.1415936946868897 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>1 0 1 18 2. - 0 - -0.0287206899374723 - 0.3594140112400055 - -0.0291996207088232 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 0.0129892500117421 - 0.0400097705423832 - -0.1997303962707520 - <_> - - <_> - - - - <_>1 12 18 8 -1. - <_>1 12 9 4 2. - <_>10 16 9 4 2. - 0 - -0.0581760406494141 - 0.2934589982032776 - -0.0439675301313400 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 5 2. - <_>7 15 3 5 2. - 0 - 0.0282851401716471 - 0.0374574288725853 - -0.3136174976825714 - <_> - - <_> - - - - <_>4 3 10 4 -1. - <_>4 5 10 2 2. - 0 - 0.0427012182772160 - -0.0209877695888281 - 0.5084577798843384 - <_> - - <_> - - - - <_>6 1 9 6 -1. - <_>6 3 9 2 3. - 0 - 0.0247636009007692 - -0.1186925023794174 - 0.0944573506712914 - <_> - - <_> - - - - <_>5 4 10 10 -1. - <_>5 9 10 5 2. - 0 - -2.8076129965484142e-003 - -0.2324977964162827 - 0.0452227182686329 - <_> - - <_> - - - - <_>8 10 5 8 -1. - <_>8 14 5 4 2. - 0 - -0.0755839198827744 - -0.4590702950954437 - 0.0129322800785303 - <_> - - <_> - - - - <_>3 8 13 10 -1. - <_>3 13 13 5 2. - 0 - 0.0837968215346336 - -0.0158016309142113 - 0.6867048144340515 - <_> - - <_> - - - - <_>12 8 5 12 -1. - <_>12 14 5 6 2. - 0 - -0.0370724014937878 - 0.0541460290551186 - -0.0422074496746063 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0246910694986582 - 0.0260976795107126 - -0.3776040077209473 - <_> - - <_> - - - - <_>12 0 2 17 -1. - <_>12 0 1 17 2. - 0 - -0.0277439299970865 - -0.7863150835037231 - 4.7534159384667873e-003 - <_> - - <_> - - - - <_>6 0 2 17 -1. - <_>7 0 1 17 2. - 0 - 0.0191199705004692 - 0.0264977607876062 - -0.3648996949195862 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - 3.3773269969969988e-003 - 0.0319660902023315 - -0.3234676122665405 - <_> - - <_> - - - - <_>0 1 2 13 -1. - <_>1 1 1 13 2. - 0 - 0.0198768191039562 - -0.0351284183561802 - 0.2907829880714417 - <_> - - <_> - - - - <_>12 0 5 15 -1. - <_>12 5 5 5 3. - 0 - 0.1003564000129700 - 0.0146078402176499 - -0.5281224250793457 - <_> - - <_> - - - - <_>3 0 5 15 -1. - <_>3 5 5 5 3. - 0 - -0.0161632895469666 - -0.1015814021229744 - 0.1179649978876114 - <_> - - <_> - - - - <_>10 3 9 4 -1. - <_>10 5 9 2 2. - 0 - 0.0102533800527453 - 0.0360244102776051 - -0.1652078032493591 - <_> - - <_> - - - - <_>3 5 14 2 -1. - <_>3 6 14 1 2. - 0 - 9.0665705502033234e-003 - -0.0347317010164261 - 0.3732720017433167 - <_> - - <_> - - - - <_>3 2 14 6 -1. - <_>10 2 7 3 2. - <_>3 5 7 3 2. - 0 - 0.0301249008625746 - 0.0517584793269634 - -0.2358216047286987 - <_> - - <_> - - - - <_>6 4 8 6 -1. - <_>6 6 8 2 3. - 0 - -6.6870311275124550e-003 - 0.0433942414820194 - -0.2520298957824707 - <_> - - <_> - - - - <_>11 3 4 8 -1. - <_>11 3 2 8 2. - 0 - -2.0257479045540094e-003 - -0.1247901022434235 - 0.0393095314502716 - <_> - - <_> - - - - <_>8 5 3 13 -1. - <_>9 5 1 13 3. - 0 - 0.0232540704309940 - -0.0474469102919102 - 0.2328770011663437 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - 0.0238671991974115 - -0.0274216700345278 - 0.1463097035884857 - <_> - - <_> - - - - <_>5 3 6 7 -1. - <_>7 3 2 7 3. - 0 - -0.0405230000615120 - -0.4047296047210693 - 0.0304159596562386 - <_> - - <_> - - - - <_>2 6 18 5 -1. - <_>8 6 6 5 3. - 0 - 0.1995820999145508 - 0.0220494698733091 - -0.4655848145484924 - <_> - - <_> - - - - <_>6 8 8 4 -1. - <_>10 8 4 4 2. - 0 - -0.0129905901849270 - -0.1797062009572983 - 0.0588749386370182 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - 0.0256239492446184 - 9.9402610212564468e-003 - -0.2657527923583984 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 5 6 3 2. - <_>10 8 6 3 2. - 0 - -0.0320048704743385 - 0.2508738040924072 - -0.0462914705276489 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - 0.0187584199011326 - -0.0220382306724787 - 0.0944074317812920 - <_> - - <_> - - - - <_>3 12 7 8 -1. - <_>3 16 7 4 2. - 0 - 0.0454256683588028 - 0.0233715698122978 - -0.4839339852333069 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - 0.0156705807894468 - -0.0551098585128784 - 0.1990783065557480 - <_> - - <_> - - - - <_>6 13 6 7 -1. - <_>8 13 2 7 3. - 0 - 0.0513369813561440 - 0.0264254193753004 - -0.4408279061317444 - <_> - - <_> - - - - <_>2 6 18 9 -1. - <_>2 9 18 3 3. - 0 - 0.0408841706812382 - 0.2007120996713638 - -0.0348877795040607 - <_> - - <_> - - - - <_>1 8 16 2 -1. - <_>9 8 8 2 2. - 0 - 0.0691655576229095 - -0.0293033104389906 - 0.3493682146072388 - <_> - - <_> - - - - <_>5 2 11 4 -1. - <_>5 4 11 2 2. - 0 - 0.0479671582579613 - -0.0244169607758522 - 0.2701865136623383 - <_> - - <_> - - - - <_>0 12 10 8 -1. - <_>0 12 5 4 2. - <_>5 16 5 4 2. - 0 - 0.0440684407949448 - -0.0404972694814205 - 0.2438226938247681 - <_> - - <_> - - - - <_>3 1 15 8 -1. - <_>8 1 5 8 3. - 0 - -0.1028755009174347 - 0.7110528945922852 - -9.9055245518684387e-003 - <_> - - <_> - - - - <_>2 1 15 8 -1. - <_>7 1 5 8 3. - 0 - 0.2240774035453796 - -0.0549469999969006 - 0.1985343992710114 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -9.6570551395416260e-003 - -0.2505022883415222 - 0.0374109894037247 - <_> - - <_> - - - - <_>3 4 14 9 -1. - <_>3 7 14 3 3. - 0 - 0.0791997015476227 - -0.0221475698053837 - 0.4877107143402100 - <_> - - <_> - - - - <_>4 3 15 5 -1. - <_>9 3 5 5 3. - 0 - 0.0459831990301609 - 0.0822297334671021 - -0.0393357500433922 - <_> - - <_> - - - - <_>0 2 20 12 -1. - <_>0 8 20 6 2. - 0 - 0.4267044961452484 - 0.0171328000724316 - -0.5399625897407532 - <_> - - <_> - - - - <_>4 1 12 4 -1. - <_>8 1 4 4 3. - 0 - 0.1541399061679840 - 0.0119023500010371 - -0.6853371858596802 - <_> - - <_> - - - - <_>0 2 20 12 -1. - <_>0 8 20 6 2. - 0 - -0.1769988983869553 - -0.6311383247375488 - 0.0125452000647783 - <_> - - <_> - - - - <_>10 11 4 9 -1. - <_>10 11 2 9 2. - 0 - -0.0237698294222355 - -0.1428142935037613 - 0.0142843499779701 - <_> - - <_> - - - - <_>2 1 12 15 -1. - <_>6 1 4 15 3. - 0 - -0.0832902863621712 - 0.3643339872360230 - -0.0252874307334423 - <_> - - <_> - - - - <_>10 9 10 3 -1. - <_>10 9 5 3 2. - 0 - -3.0276349280029535e-003 - -0.1750126034021378 - 0.0355286002159119 - <_> - - <_> - - - - <_>0 9 10 3 -1. - <_>5 9 5 3 2. - 0 - 9.3518232461065054e-004 - -0.3431726992130280 - 0.0281960200518370 - <_> - - <_> - - - - <_>6 1 8 14 -1. - <_>6 8 8 7 2. - 0 - 8.6792530491948128e-003 - 0.0918547883629799 - -0.1134980022907257 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>6 6 3 6 2. - <_>9 12 3 6 2. - 0 - -4.3289531022310257e-003 - 0.0765605270862579 - -0.1285037994384766 - <_> - - <_> - - - - <_>10 11 4 9 -1. - <_>10 11 2 9 2. - 0 - 0.0614850893616676 - 4.0065501816570759e-003 - -0.4279873073101044 - <_> - - <_> - - - - <_>6 11 4 9 -1. - <_>8 11 2 9 2. - 0 - -0.0231085699051619 - -0.3299978971481323 - 0.0312281008809805 - <_> - - <_> - - - - <_>8 9 6 5 -1. - <_>8 9 3 5 2. - 0 - -6.3490739557892084e-004 - 0.0533187612891197 - -0.0603079386055470 - <_> - - <_> - - - - <_>6 9 6 5 -1. - <_>9 9 3 5 2. - 0 - -4.1278889402747154e-003 - 0.1502967029809952 - -0.0898057967424393 - <_> - - <_> - - - - <_>6 11 9 6 -1. - <_>9 11 3 6 3. - 0 - 0.1540897041559219 - -2.3309229873120785e-003 - 0.9694647789001465 - <_> - - <_> - - - - <_>5 2 6 10 -1. - <_>5 2 3 5 2. - <_>8 7 3 5 2. - 0 - 0.0180837400257587 - -0.0466745197772980 - 0.2194194942712784 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -0.0600229687988758 - 0.3728309869766235 - -0.0136379403993487 - <_> - - <_> - - - - <_>0 1 9 18 -1. - <_>3 1 3 18 3. - 0 - -0.1602504998445511 - 0.3944236040115356 - -0.0248086098581553 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -0.0232202000916004 - -0.2835206985473633 - 0.0384564697742462 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - 0.0323538295924664 - 0.0301975402981043 - -0.3537169992923737 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0129307499155402 - -0.1827528029680252 - 0.0402194298803806 - <_> - - <_> - - - - <_>3 1 6 10 -1. - <_>3 1 3 5 2. - <_>6 6 3 5 2. - 0 - -2.9022840317338705e-003 - 0.0575834400951862 - -0.1817508041858673 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - 0.0370424091815948 - 0.0234715696424246 - -0.3722204864025116 - <_> - - <_> - - - - <_>1 3 18 12 -1. - <_>1 3 9 6 2. - <_>10 9 9 6 2. - 0 - -0.1437146067619324 - -0.6735327839851379 - 0.0137684596702456 - <_> - - <_> - - - - <_>7 15 13 3 -1. - <_>7 16 13 1 3. - 0 - -0.0107140997424722 - 0.2307460010051727 - -0.0598985813558102 - <_> - - <_> - - - - <_>1 15 13 3 -1. - <_>1 16 13 1 3. - 0 - 0.0113706998527050 - -0.0558591000735760 - 0.2160415947437286 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0338293500244617 - -0.3286856114864349 - 0.0167437195777893 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - 0.0364060588181019 - 0.0235128104686737 - -0.4799953997135162 - <_> - - <_> - - - - <_>6 16 14 4 -1. - <_>13 16 7 2 2. - <_>6 18 7 2 2. - 0 - -0.0398533083498478 - 0.3038840889930725 - -0.0223882105201483 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - 0.0238576401025057 - -0.0439601391553879 - 0.2502183020114899 - <_> - - <_> - - - - <_>10 4 6 8 -1. - <_>12 4 2 8 3. - 0 - -0.0861493274569511 - -0.9264122247695923 - 0.0101808495819569 - <_> - - <_> - - - - <_>6 0 3 13 -1. - <_>7 0 1 13 3. - 0 - -0.0273604597896338 - -0.4533107876777649 - 0.0185172501951456 - <_> - - <_> - - - - <_>11 9 3 10 -1. - <_>11 14 3 5 2. - 0 - 4.6891667880117893e-003 - 0.0149831101298332 - -0.0986908674240112 - <_> - - <_> - - - - <_>1 8 14 3 -1. - <_>1 9 14 1 3. - 0 - 0.0361409597098827 - 0.0212403293699026 - -0.4227561056613922 - <_> - - <_> - - - - <_>4 7 12 6 -1. - <_>4 9 12 2 3. - 0 - 0.1071441993117333 - -0.0415921695530415 - 0.2488086968660355 - <_> - - <_> - - - - <_>6 8 8 9 -1. - <_>6 11 8 3 3. - 0 - -0.0120244501158595 - -0.1890603005886078 - 0.0552909001708031 - <_> - - <_> - - - - <_>4 13 12 4 -1. - <_>4 15 12 2 2. - 0 - 0.0216710902750492 - -0.0371640883386135 - 0.2989633083343506 - <_> - - <_> - - - - <_>1 12 18 2 -1. - <_>1 13 18 1 2. - 0 - -3.3205719664692879e-003 - -0.0918376892805099 - 0.1181083992123604 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 13 4 4 2. - 0 - -0.0842564031481743 - -0.5493528246879578 - 4.6934271231293678e-003 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>5 13 4 4 2. - 0 - -2.7107410132884979e-003 - 0.0523011796176434 - -0.2193256020545960 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>12 6 5 3 2. - <_>7 9 5 3 2. - 0 - -1.9661630503833294e-003 - 0.0695228502154350 - -0.1236959993839264 - <_> - - <_> - - - - <_>5 11 9 6 -1. - <_>8 11 3 6 3. - 0 - 0.1083585992455483 - -0.0160284396260977 - 0.6753829717636108 - <_> - - <_> - - - - <_>4 3 14 2 -1. - <_>4 3 7 2 2. - 0 - -0.0406615696847439 - 0.2823987007141113 - -0.0186430793255568 - <_> - - <_> - - - - <_>2 12 9 6 -1. - <_>5 12 3 6 3. - 0 - 9.4869043678045273e-003 - -0.1420473009347916 - 0.0742181763052940 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>17 1 3 6 2. - <_>14 7 3 6 2. - 0 - -8.1196203827857971e-003 - 0.1273310929536820 - -0.0753254294395447 - <_> - - <_> - - - - <_>0 1 6 12 -1. - <_>0 1 3 6 2. - <_>3 7 3 6 2. - 0 - -0.0367189086973667 - 0.2520970106124878 - -0.0386423617601395 - <_> - - <_> - - - - <_>12 0 8 6 -1. - <_>12 2 8 2 3. - 0 - 0.0425158515572548 - 0.0346135087311268 - -0.3140614926815033 - <_> - - <_> - - - - <_>0 16 18 2 -1. - <_>0 17 18 1 2. - 0 - -0.0164842493832111 - -0.3462293148040772 - 0.0264703407883644 - <_> - - <_> - - - - <_>5 16 11 4 -1. - <_>5 18 11 2 2. - 0 - 0.0186085999011993 - 0.0311258397996426 - -0.2383791953325272 - <_> - - <_> - - - - <_>2 16 13 3 -1. - <_>2 17 13 1 3. - 0 - -0.0108720604330301 - 0.2306122034788132 - -0.0434693805873394 - <_> - - <_> - - - - <_>14 9 6 11 -1. - <_>16 9 2 11 3. - 0 - -0.0407280810177326 - 0.1325888037681580 - -0.0388332903385162 - -1.5900419950485229 - 27 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - 0.0278026703745127 - -0.1853515952825546 - 0.2377786040306091 - <_> - - <_> - - - - <_>11 1 8 6 -1. - <_>11 3 8 2 3. - 0 - 1.6392730176448822e-003 - -0.2678762972354889 - 0.1173330992460251 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -3.0419689137488604e-003 - 0.1955285966396332 - -0.1324001997709274 - <_> - - <_> - - - - <_>10 10 4 8 -1. - <_>10 14 4 4 2. - 0 - -2.7744288672693074e-004 - 0.0607018209993839 - -0.3046542108058929 - <_> - - <_> - - - - <_>5 5 9 15 -1. - <_>8 5 3 15 3. - 0 - -2.7942769229412079e-003 - -0.2537094056606293 - 0.0761478468775749 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - 7.4005699716508389e-003 - 0.0656234920024872 - -0.3012852072715759 - <_> - - <_> - - - - <_>0 15 13 2 -1. - <_>0 16 13 1 2. - 0 - 1.1316470336169004e-003 - -0.1323293000459671 - 0.1362251937389374 - <_> - - <_> - - - - <_>11 1 8 6 -1. - <_>11 3 8 2 3. - 0 - -8.7306648492813110e-003 - -0.1024622991681099 - 0.0106498803943396 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -6.4327879808843136e-003 - -0.2130178958177567 - 0.0774253979325294 - <_> - - <_> - - - - <_>9 6 6 7 -1. - <_>11 6 2 7 3. - 0 - -1.3303949963301420e-003 - 0.0962342470884323 - -0.1708600968122482 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>7 6 2 7 3. - 0 - -2.3770590778440237e-003 - 0.1165708974003792 - -0.1513576954603195 - <_> - - <_> - - - - <_>6 11 10 6 -1. - <_>11 11 5 3 2. - <_>6 14 5 3 2. - 0 - -5.3865360096096992e-003 - -0.1685196012258530 - 0.0443245582282543 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - -5.6973858736455441e-003 - -0.2470239996910095 - 0.0777353420853615 - <_> - - <_> - - - - <_>11 1 8 6 -1. - <_>11 3 8 2 3. - 0 - 0.0456545203924179 - -0.0166876707226038 - 0.1422211974859238 - <_> - - <_> - - - - <_>4 4 11 10 -1. - <_>4 9 11 5 2. - 0 - -1.4929420103726443e-005 - -0.3272539079189301 - 0.0481421016156673 - <_> - - <_> - - - - <_>11 1 8 6 -1. - <_>11 3 8 2 3. - 0 - -1.7635900294408202e-003 - 0.0701158493757248 - -0.0168644990772009 - <_> - - <_> - - - - <_>1 1 8 6 -1. - <_>1 3 8 2 3. - 0 - 1.9133860478177667e-003 - -0.1957082003355026 - 0.0901691317558289 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 8 4 6 2. - 0 - -1.9309469498693943e-003 - 0.1182428970932961 - -0.1214670985937119 - <_> - - <_> - - - - <_>2 2 16 3 -1. - <_>2 3 16 1 3. - 0 - 9.7775761969387531e-004 - 0.1165720000863075 - -0.1277084946632385 - <_> - - <_> - - - - <_>18 1 2 13 -1. - <_>18 1 1 13 2. - 0 - -5.2643800154328346e-003 - 0.1995836049318314 - -0.0629286766052246 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 7 5 3 2. - 0 - -2.2730689961463213e-003 - -0.2180469930171967 - 0.0665652900934219 - <_> - - <_> - - - - <_>5 6 13 3 -1. - <_>5 7 13 1 3. - 0 - -3.5128789022564888e-003 - 0.0811142474412918 - -0.1423033028841019 - <_> - - <_> - - - - <_>4 1 6 7 -1. - <_>6 1 2 7 3. - 0 - 2.8102330397814512e-003 - 0.0608847104012966 - -0.2200842946767807 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -0.0232113599777222 - 0.2318225950002670 - -0.0340142808854580 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -8.7068388238549232e-003 - -0.2069126963615418 - 0.0680041164159775 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 7.0584798231720924e-003 - -0.1050079986453056 - 0.1261018961668015 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0688782408833504 - 0.4268761873245239 - -0.0313056185841560 - <_> - - <_> - - - - <_>7 2 8 8 -1. - <_>11 2 4 4 2. - <_>7 6 4 4 2. - 0 - -0.0127851497381926 - -0.2026803046464920 - 0.0320057906210423 - <_> - - <_> - - - - <_>5 2 8 8 -1. - <_>5 2 4 4 2. - <_>9 6 4 4 2. - 0 - -4.2242300696671009e-003 - -0.2161968946456909 - 0.0756608322262764 - <_> - - <_> - - - - <_>15 3 4 16 -1. - <_>17 3 2 8 2. - <_>15 11 2 8 2. - 0 - -0.0416606403887272 - 0.3560138046741486 - -0.0365009009838104 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 0.0149832395836711 - 0.0336635597050190 - -0.4301668107509613 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 1.8940219888463616e-003 - -0.0777856409549713 - 0.1413003951311112 - <_> - - <_> - - - - <_>4 10 4 8 -1. - <_>4 14 4 4 2. - 0 - -1.0271830251440406e-003 - 0.0612920485436916 - -0.1856912970542908 - <_> - - <_> - - - - <_>4 14 13 6 -1. - <_>4 16 13 2 3. - 0 - -0.0104917604476213 - -0.2128003984689713 - 0.0466415695846081 - <_> - - <_> - - - - <_>1 14 14 3 -1. - <_>1 15 14 1 3. - 0 - 4.1263508610427380e-003 - -0.0631134733557701 - 0.2168339937925339 - <_> - - <_> - - - - <_>18 1 2 13 -1. - <_>18 1 1 13 2. - 0 - 0.0212845299392939 - -0.0195413809269667 - 0.4055550098419190 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>1 1 9 2 2. - <_>10 3 9 2 2. - 0 - 6.0370927676558495e-003 - 0.0613228008151054 - -0.1755875051021576 - <_> - - <_> - - - - <_>18 1 2 13 -1. - <_>18 1 1 13 2. - 0 - 2.8550080023705959e-003 - -0.0374029688537121 - 0.0867943763732910 - <_> - - <_> - - - - <_>0 1 2 13 -1. - <_>1 1 1 13 2. - 0 - -0.0308392997831106 - 0.4582639932632446 - -0.0228243190795183 - <_> - - <_> - - - - <_>2 0 18 2 -1. - <_>2 0 9 2 2. - 0 - -0.0126646403223276 - -0.1517917960882187 - 0.0383259095251560 - <_> - - <_> - - - - <_>0 0 6 12 -1. - <_>2 0 2 12 3. - 0 - 8.4788333624601364e-003 - -0.0791644528508186 - 0.1382130980491638 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -9.0271160006523132e-003 - 0.2048342972993851 - -0.0584282390773296 - <_> - - <_> - - - - <_>0 2 5 6 -1. - <_>0 5 5 3 2. - 0 - -5.3999028168618679e-003 - -0.1956387013196945 - 0.0628818199038506 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 4.8698568716645241e-003 - 0.0472694486379623 - -0.2035723030567169 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - -5.6715728715062141e-003 - 0.1623262017965317 - -0.0724731832742691 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - -6.3621107256039977e-004 - -0.1764882951974869 - 0.0615539290010929 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - -5.7404721155762672e-003 - -0.2377389073371887 - 0.0484930910170078 - <_> - - <_> - - - - <_>9 0 9 6 -1. - <_>9 2 9 2 3. - 0 - 2.3313059937208891e-003 - -0.0980874672532082 - 0.0767057314515114 - <_> - - <_> - - - - <_>0 4 14 3 -1. - <_>0 5 14 1 3. - 0 - 2.6579289697110653e-003 - -0.1042959019541740 - 0.1327544003725052 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0124264899641275 - -0.1768611967563629 - 0.0787978619337082 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 3.7596069741994143e-003 - 0.0580285005271435 - -0.2023569941520691 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - -0.0139418197795749 - 0.2936562895774841 - -0.0310690291225910 - <_> - - <_> - - - - <_>5 0 8 8 -1. - <_>5 4 8 4 2. - 0 - 0.0246055293828249 - -0.0497678406536579 - 0.2044660001993179 - <_> - - <_> - - - - <_>9 0 9 6 -1. - <_>9 2 9 2 3. - 0 - 0.1157227978110313 - 5.7542040012776852e-003 - -0.5578920841217041 - <_> - - <_> - - - - <_>2 0 9 6 -1. - <_>2 2 9 2 3. - 0 - 1.4880299568176270e-003 - -0.1287049949169159 - 0.0861913636326790 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - -0.0100858695805073 - -0.1871802955865860 - 0.0271437894552946 - <_> - - <_> - - - - <_>1 7 16 4 -1. - <_>1 7 8 2 2. - <_>9 9 8 2 2. - 0 - -4.0125781670212746e-003 - -0.1484356969594955 - 0.0614823512732983 - <_> - - <_> - - - - <_>8 7 4 7 -1. - <_>8 7 2 7 2. - 0 - 0.0452412888407707 - -0.0221871994435787 - 0.4902274906635284 - <_> - - <_> - - - - <_>5 9 9 5 -1. - <_>8 9 3 5 3. - 0 - -5.4588477360084653e-004 - 0.1074075028300285 - -0.0947847515344620 - <_> - - <_> - - - - <_>4 5 12 4 -1. - <_>8 5 4 4 3. - 0 - 0.0108221098780632 - -0.1182013973593712 - 0.0840096473693848 - <_> - - <_> - - - - <_>1 0 6 13 -1. - <_>3 0 2 13 3. - 0 - 6.4339267555624247e-004 - -0.1107214987277985 - 0.0841263979673386 - <_> - - <_> - - - - <_>16 7 4 11 -1. - <_>16 7 2 11 2. - 0 - 0.0935449898242950 - 6.1726439744234085e-003 - -0.3812153041362763 - <_> - - <_> - - - - <_>0 7 4 11 -1. - <_>2 7 2 11 2. - 0 - -3.9214221760630608e-003 - 0.1296992003917694 - -0.0755300298333168 - <_> - - <_> - - - - <_>8 6 4 8 -1. - <_>8 10 4 4 2. - 0 - -4.5141312293708324e-003 - -0.2122250944375992 - 0.0509413518011570 - <_> - - <_> - - - - <_>0 10 20 3 -1. - <_>0 11 20 1 3. - 0 - 0.0515638701617718 - 0.0112159997224808 - -0.8412504792213440 - <_> - - <_> - - - - <_>11 13 8 6 -1. - <_>11 15 8 2 3. - 0 - -0.0370868295431137 - -0.3344379067420960 - 0.0121983503922820 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - -1.5274320030584931e-003 - 0.1702284961938858 - -0.0531711094081402 - <_> - - <_> - - - - <_>9 6 3 13 -1. - <_>10 6 1 13 3. - 0 - -3.3183719497174025e-003 - 0.1497268974781036 - -0.0395227000117302 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>9 10 2 10 3. - 0 - -0.0106951398774982 - -0.2076769024133682 - 0.0482235401868820 - <_> - - <_> - - - - <_>16 0 4 18 -1. - <_>16 0 2 18 2. - 0 - 8.0909933894872665e-003 - -0.0555725693702698 - 0.0813619419932365 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - 8.9193560415878892e-004 - -0.1488822996616364 - 0.0569740198552608 - <_> - - <_> - - - - <_>4 9 13 3 -1. - <_>4 10 13 1 3. - 0 - 2.1180939802434295e-004 - -0.1877689063549042 - 0.0450870804488659 - <_> - - <_> - - - - <_>0 0 4 19 -1. - <_>2 0 2 19 2. - 0 - 6.8865409120917320e-003 - -0.0746515393257141 - 0.1180645972490311 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.3800981938838959 - 9.6241412684321404e-003 - -0.5025712847709656 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.0948449000716209 - 0.0202841106802225 - -0.3947888016700745 - <_> - - <_> - - - - <_>8 5 10 10 -1. - <_>13 5 5 5 2. - <_>8 10 5 5 2. - 0 - -1.1133160296594724e-004 - 0.0537170283496380 - -0.1543323993682861 - <_> - - <_> - - - - <_>1 8 6 12 -1. - <_>1 8 3 6 2. - <_>4 14 3 6 2. - 0 - 0.0359116308391094 - -0.0243740491569042 - 0.3507775962352753 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0292917806655169 - -0.4900273978710175 - 0.0216948408633471 - <_> - - <_> - - - - <_>4 1 3 13 -1. - <_>5 1 1 13 3. - 0 - -0.0242771897464991 - -0.5020691156387329 - 0.0158074200153351 - <_> - - <_> - - - - <_>4 4 13 3 -1. - <_>4 5 13 1 3. - 0 - 0.0126201100647449 - -0.0486378483474255 - 0.2137005031108856 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -4.1045118123292923e-003 - -0.1675793975591660 - 0.0626759231090546 - <_> - - <_> - - - - <_>5 1 10 19 -1. - <_>5 1 5 19 2. - 0 - -0.2347716987133026 - 0.6220551133155823 - -0.0139493197202683 - <_> - - <_> - - - - <_>1 13 8 6 -1. - <_>1 15 8 2 3. - 0 - -0.0679142475128174 - -0.9701414108276367 - 0.0104904603213072 - <_> - - <_> - - - - <_>4 5 13 3 -1. - <_>4 6 13 1 3. - 0 - 1.4207609929144382e-003 - -0.0608011186122894 - 0.1350073963403702 - <_> - - <_> - - - - <_>0 6 14 4 -1. - <_>0 6 7 2 2. - <_>7 8 7 2 2. - 0 - -5.0894408486783504e-003 - -0.1699216961860657 - 0.0507956705987453 - <_> - - <_> - - - - <_>14 3 6 16 -1. - <_>17 3 3 8 2. - <_>14 11 3 8 2. - 0 - -0.0192268006503582 - 0.0988611727952957 - -0.0336862206459045 - <_> - - <_> - - - - <_>1 4 18 10 -1. - <_>1 4 9 5 2. - <_>10 9 9 5 2. - 0 - 0.0105905402451754 - 0.0596169009804726 - -0.1649544984102249 - <_> - - <_> - - - - <_>14 2 6 16 -1. - <_>17 2 3 8 2. - <_>14 10 3 8 2. - 0 - 3.3726880792528391e-003 - -0.0386523418128490 - 0.0554005689918995 - <_> - - <_> - - - - <_>0 2 6 16 -1. - <_>0 2 3 8 2. - <_>3 10 3 8 2. - 0 - -0.0890128016471863 - 0.4075050950050354 - -0.0241503305733204 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>14 8 3 12 2. - 0 - -0.2335907965898514 - -0.7264190912246704 - 6.5185138955712318e-003 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>3 8 3 12 2. - 0 - -0.2273225933313370 - -0.8997700810432434 - 9.1146891936659813e-003 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0296017695218325 - -0.4327085018157959 - 0.0160211902111769 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -6.9494689814746380e-003 - 0.1521899998188019 - -0.0618968307971954 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>8 6 4 4 2. - 0 - -1.9150479929521680e-003 - 0.0725705474615097 - -0.1312108933925629 - <_> - - <_> - - - - <_>0 12 8 8 -1. - <_>4 12 4 8 2. - 0 - 8.5106380283832550e-003 - -0.0573260895907879 - 0.1574310064315796 - <_> - - <_> - - - - <_>2 4 18 16 -1. - <_>8 4 6 16 3. - 0 - -0.0243631396442652 - 0.0957008227705956 - -0.0583644285798073 - <_> - - <_> - - - - <_>5 7 4 7 -1. - <_>7 7 2 7 2. - 0 - -0.0225226599723101 - -0.4694313108921051 - 0.0202413592487574 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -4.4660381972789764e-003 - 0.0762111097574234 - -0.0818446576595306 - <_> - - <_> - - - - <_>5 6 8 4 -1. - <_>9 6 4 4 2. - 0 - -4.2101819999516010e-003 - -0.2208358943462372 - 0.0470101982355118 - <_> - - <_> - - - - <_>7 2 10 4 -1. - <_>7 2 5 4 2. - 0 - 5.7130381464958191e-003 - -0.0622540004551411 - 0.0527058206498623 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - -5.6021669879555702e-003 - -0.1898576021194458 - 0.0501148216426373 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -0.0220420695841312 - 0.0876837521791458 - -0.0247771795839071 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -2.1817081142216921e-003 - 0.1676660031080246 - -0.0667717605829239 - <_> - - <_> - - - - <_>1 14 18 6 -1. - <_>1 16 18 2 3. - 0 - 0.0245453007519245 - 0.0492051206529140 - -0.2250372022390366 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>10 0 1 13 2. - 0 - -2.4728688877075911e-003 - 0.1353967040777206 - -0.0623301304876804 - <_> - - <_> - - - - <_>1 1 19 3 -1. - <_>1 2 19 1 3. - 0 - 2.3717728909105062e-003 - 0.0579260587692261 - -0.1332525014877319 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -0.0389996618032455 - 0.2987548112869263 - -0.0302572399377823 - <_> - - <_> - - - - <_>4 18 13 2 -1. - <_>4 19 13 1 2. - 0 - -1.7835620092228055e-003 - 0.0926802828907967 - -0.0743505880236626 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0199844501912594 - 0.0224093496799469 - -0.4150193929672241 - <_> - - <_> - - - - <_>13 10 7 6 -1. - <_>13 12 7 2 3. - 0 - 4.1170548647642136e-003 - 0.0534322783350945 - -0.1509225964546204 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - 0.0439956001937389 - 0.0113898897543550 - -0.6649451851844788 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - -3.5350578837096691e-003 - 0.1100559011101723 - -0.0763770565390587 - <_> - - <_> - - - - <_>3 14 13 3 -1. - <_>3 15 13 1 3. - 0 - 1.4632029924541712e-003 - -0.0569621510803699 - 0.1318459957838059 - <_> - - <_> - - - - <_>1 15 18 4 -1. - <_>10 15 9 2 2. - <_>1 17 9 2 2. - 0 - -4.9925539642572403e-003 - -0.1467507034540176 - 0.0551299788057804 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>4 10 2 10 3. - 0 - -0.0786464288830757 - -0.5276818275451660 - 0.0136627396568656 - <_> - - <_> - - - - <_>11 14 9 6 -1. - <_>14 14 3 6 3. - 0 - -4.3559111654758453e-003 - 0.0917981192469597 - -0.0575981698930264 - <_> - - <_> - - - - <_>4 10 12 10 -1. - <_>10 10 6 10 2. - 0 - 8.2531487569212914e-003 - -0.0656139776110649 - 0.1308307051658630 - <_> - - <_> - - - - <_>6 6 8 7 -1. - <_>6 6 4 7 2. - 0 - -3.5033349413424730e-003 - -0.1274259984493256 - 0.0608751699328423 - <_> - - <_> - - - - <_>8 4 4 7 -1. - <_>10 4 2 7 2. - 0 - 3.9662471972405910e-003 - -0.0557151511311531 - 0.1478324979543686 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>9 5 3 5 3. - 0 - -0.0102602196857333 - -0.1347229033708572 - 0.0445143505930901 - <_> - - <_> - - - - <_>2 7 12 12 -1. - <_>2 11 12 4 3. - 0 - 3.6724930396303535e-004 - -0.1372770071029663 - 0.0611796490848064 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 2 12 2 3. - 0 - 0.0195001997053623 - -0.0590333305299282 - 0.1558932065963745 - <_> - - <_> - - - - <_>5 10 9 9 -1. - <_>5 13 9 3 3. - 0 - 0.0140414200723171 - 0.0221404395997524 - -0.4283109009265900 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0384597405791283 - 0.0168757308274508 - -0.5242574214935303 - <_> - - <_> - - - - <_>0 12 8 8 -1. - <_>0 12 4 4 2. - <_>4 16 4 4 2. - 0 - -0.0259015392512083 - 0.2516309916973114 - -0.0325795114040375 - <_> - - <_> - - - - <_>14 11 6 9 -1. - <_>14 14 6 3 3. - 0 - 0.0282644797116518 - 0.0212977193295956 - -0.2397830933332443 - <_> - - <_> - - - - <_>5 1 7 6 -1. - <_>5 3 7 2 3. - 0 - -0.0530678816139698 - 0.7659469246864319 - -0.0101632401347160 - <_> - - <_> - - - - <_>9 5 3 14 -1. - <_>9 12 3 7 2. - 0 - 1.6842440236359835e-003 - 0.0401687286794186 - -0.2181098014116287 - <_> - - <_> - - - - <_>8 9 4 8 -1. - <_>8 13 4 4 2. - 0 - 6.5255112713202834e-004 - -0.0321552492678165 - 0.2602804899215698 - <_> - - <_> - - - - <_>7 5 6 14 -1. - <_>7 12 6 7 2. - 0 - -0.1538109928369522 - -0.7957018017768860 - 9.9420538172125816e-003 - <_> - - <_> - - - - <_>4 9 4 8 -1. - <_>6 9 2 8 2. - 0 - -1.7530319746583700e-004 - 0.0612571612000465 - -0.1183089017868042 - <_> - - <_> - - - - <_>12 9 6 9 -1. - <_>14 9 2 9 3. - 0 - 1.1829809518530965e-003 - -0.0825895294547081 - 0.0582347586750984 - <_> - - <_> - - - - <_>2 9 6 9 -1. - <_>4 9 2 9 3. - 0 - 0.0147538902238011 - 0.0467287786304951 - -0.1987434029579163 - <_> - - <_> - - - - <_>4 16 15 4 -1. - <_>9 16 5 4 3. - 0 - 0.0105925798416138 - -0.0571571588516235 - 0.1226172968745232 - <_> - - <_> - - - - <_>3 2 10 4 -1. - <_>8 2 5 4 2. - 0 - -0.0466389693319798 - 0.3922199904918671 - -0.0187704507261515 - <_> - - <_> - - - - <_>10 0 4 12 -1. - <_>10 0 2 12 2. - 0 - -2.2761020809412003e-003 - -0.1981981992721558 - 0.0326699502766132 - <_> - - <_> - - - - <_>6 0 4 12 -1. - <_>8 0 2 12 2. - 0 - -8.9252636826131493e-005 - -0.1779569983482361 - 0.0450881607830524 - <_> - - <_> - - - - <_>7 4 6 7 -1. - <_>9 4 2 7 3. - 0 - -4.8888921737670898e-003 - 0.3797332942485809 - -0.0256225001066923 - <_> - - <_> - - - - <_>5 2 3 13 -1. - <_>6 2 1 13 3. - 0 - -4.7039450146257877e-003 - -0.1407544016838074 - 0.0518858693540096 - <_> - - <_> - - - - <_>12 5 5 9 -1. - <_>12 8 5 3 3. - 0 - 6.8887867964804173e-003 - -0.0607079006731510 - 0.0673187822103500 - <_> - - <_> - - - - <_>5 6 9 12 -1. - <_>5 10 9 4 3. - 0 - 0.0944499671459198 - -0.0439751595258713 - 0.1688583046197891 - <_> - - <_> - - - - <_>9 0 4 20 -1. - <_>11 0 2 10 2. - <_>9 10 2 10 2. - 0 - 0.0515206716954708 - 3.8239071145653725e-003 - -0.6307771205902100 - <_> - - <_> - - - - <_>8 0 4 16 -1. - <_>8 0 2 8 2. - <_>10 8 2 8 2. - 0 - 6.3957129605114460e-003 - 0.0440943092107773 - -0.1815602034330368 - <_> - - <_> - - - - <_>2 9 18 11 -1. - <_>8 9 6 11 3. - 0 - -0.0496592707931995 - 0.1117423996329308 - -0.0558212101459503 - <_> - - <_> - - - - <_>0 11 6 9 -1. - <_>0 14 6 3 3. - 0 - -6.9081829860806465e-003 - -0.1403895020484924 - 0.0595357604324818 - <_> - - <_> - - - - <_>13 6 6 12 -1. - <_>13 6 3 12 2. - 0 - 9.2546567320823669e-003 - -0.0335879102349281 - 0.0585931017994881 - <_> - - <_> - - - - <_>6 12 8 8 -1. - <_>6 12 4 4 2. - <_>10 16 4 4 2. - 0 - 5.0454521551728249e-003 - 0.0537776611745358 - -0.1362603008747101 - <_> - - <_> - - - - <_>1 9 18 8 -1. - <_>10 9 9 4 2. - <_>1 13 9 4 2. - 0 - -0.0333334207534790 - 0.2464126944541931 - -0.0318886786699295 - <_> - - <_> - - - - <_>2 8 12 4 -1. - <_>6 8 4 4 3. - 0 - 0.0612010806798935 - 0.0200130306184292 - -0.3932656943798065 - <_> - - <_> - - - - <_>13 6 6 12 -1. - <_>13 6 3 12 2. - 0 - -0.0101751200854778 - 0.0753246024250984 - -0.0396225489675999 - <_> - - <_> - - - - <_>1 6 6 12 -1. - <_>4 6 3 12 2. - 0 - 0.0102713704109192 - -0.0522345192730427 - 0.1793947070837021 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0513378605246544 - -0.3109723925590515 - 0.0216564703732729 - <_> - - <_> - - - - <_>3 15 13 3 -1. - <_>3 16 13 1 3. - 0 - 2.3615739773958921e-003 - -0.0648433193564415 - 0.1177197992801666 - <_> - - <_> - - - - <_>7 15 13 3 -1. - <_>7 16 13 1 3. - 0 - -2.7691819705069065e-003 - 0.1468258947134018 - -0.0577945187687874 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 0.0214578099548817 - 0.0252693500369787 - -0.3340482115745544 - <_> - - <_> - - - - <_>17 0 3 14 -1. - <_>18 0 1 14 3. - 0 - -5.9619098901748657e-003 - 0.0992413386702538 - -0.0353719592094421 - <_> - - <_> - - - - <_>0 0 20 16 -1. - <_>0 8 20 8 2. - 0 - 0.7521739006042481 - 7.7095897868275642e-003 - -0.8643410801887512 - <_> - - <_> - - - - <_>6 3 14 4 -1. - <_>13 3 7 2 2. - <_>6 5 7 2 2. - 0 - -9.2514551943168044e-004 - 0.0382519103586674 - -0.0755976289510727 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>0 2 10 3 2. - <_>10 5 10 3 2. - 0 - 4.0818289853632450e-003 - 0.0666991397738457 - -0.1128949970006943 - <_> - - <_> - - - - <_>17 0 3 14 -1. - <_>18 0 1 14 3. - 0 - 0.0162560101598501 - -0.0187829006463289 - 0.1887574940919876 - <_> - - <_> - - - - <_>5 9 4 9 -1. - <_>7 9 2 9 2. - 0 - -9.3405954539775848e-003 - -0.1646234989166260 - 0.0468597188591957 - <_> - - <_> - - - - <_>11 11 4 7 -1. - <_>11 11 2 7 2. - 0 - -3.8136378861963749e-004 - 0.0604981705546379 - -0.1008936017751694 - <_> - - <_> - - - - <_>5 7 6 10 -1. - <_>7 7 2 10 3. - 0 - -0.0234709605574608 - 0.1854676008224487 - -0.0395773015916348 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>0 7 10 2 2. - 0 - -0.0786843523383141 - -0.6054000854492188 - 0.0131629798561335 - <_> - - <_> - - - - <_>3 4 14 12 -1. - <_>3 4 7 6 2. - <_>10 10 7 6 2. - 0 - 0.1061614006757736 - 9.4080185517668724e-003 - -0.7241687774658203 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - -0.0692113786935806 - -0.9281964898109436 - 5.4140980355441570e-003 - <_> - - <_> - - - - <_>6 5 6 8 -1. - <_>8 5 2 8 3. - 0 - -0.0438282899558544 - 0.5493376851081848 - -0.0155168296769261 - <_> - - <_> - - - - <_>11 5 4 10 -1. - <_>11 5 2 10 2. - 0 - 5.6881271302700043e-003 - 0.0373288616538048 - -0.1201948001980782 - <_> - - <_> - - - - <_>1 2 18 14 -1. - <_>7 2 6 14 3. - 0 - 0.3693388104438782 - -9.9545158445835114e-003 - 0.8160753846168518 - <_> - - <_> - - - - <_>3 3 14 8 -1. - <_>10 3 7 4 2. - <_>3 7 7 4 2. - 0 - -0.0104475198313594 - 0.1419049948453903 - -0.0497983992099762 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - 0.0151513200253248 - 0.0227053202688694 - -0.3452369868755341 - <_> - - <_> - - - - <_>5 9 10 11 -1. - <_>5 9 5 11 2. - 0 - 0.1250385046005249 - -0.0271509103477001 - 0.3037905097007752 - <_> - - <_> - - - - <_>5 7 10 8 -1. - <_>5 7 5 4 2. - <_>10 11 5 4 2. - 0 - -9.1995187103748322e-003 - -0.1702055931091309 - 0.0443142987787724 - <_> - - <_> - - - - <_>16 0 4 16 -1. - <_>16 8 4 8 2. - 0 - 7.1795531548559666e-003 - -0.0789717882871628 - 0.0639191567897797 - <_> - - <_> - - - - <_>1 4 18 4 -1. - <_>10 4 9 4 2. - 0 - -0.1821783035993576 - -0.9759889245033264 - 7.1003441698849201e-003 - <_> - - <_> - - - - <_>4 10 14 3 -1. - <_>4 11 14 1 3. - 0 - 1.5047369743115269e-005 - -0.0989603772759438 - 0.0393710993230343 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0387634001672268 - -0.5909513831138611 - 0.0104290395975113 - <_> - - <_> - - - - <_>17 0 3 14 -1. - <_>18 0 1 14 3. - 0 - -0.0437998808920383 - 0.2529020905494690 - -9.5704924315214157e-003 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - -0.0567055195569992 - -0.7246677279472351 - 9.0332692489027977e-003 - <_> - - <_> - - - - <_>13 1 6 10 -1. - <_>16 1 3 5 2. - <_>13 6 3 5 2. - 0 - 0.0751839280128479 - -6.7565650679171085e-003 - 0.7307543754577637 - <_> - - <_> - - - - <_>1 1 6 10 -1. - <_>1 1 3 5 2. - <_>4 6 3 5 2. - 0 - -6.4183590002357960e-003 - 0.0854218304157257 - -0.0760568827390671 - <_> - - <_> - - - - <_>3 2 14 3 -1. - <_>3 3 14 1 3. - 0 - 1.3349299551919103e-003 - 0.0699776634573936 - -0.0921879187226295 - <_> - - <_> - - - - <_>3 12 13 3 -1. - <_>3 13 13 1 3. - 0 - 2.8028399683535099e-003 - -0.0509531982243061 - 0.1293468028306961 - <_> - - <_> - - - - <_>11 4 8 8 -1. - <_>15 4 4 4 2. - <_>11 8 4 4 2. - 0 - -0.0641968995332718 - -0.6175134181976318 - 8.7323756888508797e-003 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - 1.7879910301417112e-003 - -0.0594454295933247 - 0.1132500991225243 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - 2.3370790295302868e-003 - 0.0226433202624321 - -0.1742707043886185 - <_> - - <_> - - - - <_>0 14 14 2 -1. - <_>0 15 14 1 2. - 0 - 2.1500359289348125e-003 - -0.0518462583422661 - 0.1502798944711685 - <_> - - <_> - - - - <_>11 4 8 8 -1. - <_>15 4 4 4 2. - <_>11 8 4 4 2. - 0 - -0.0297449491918087 - -0.1723556071519852 - 0.0161605402827263 - <_> - - <_> - - - - <_>0 9 5 9 -1. - <_>0 12 5 3 3. - 0 - -2.9182229191064835e-003 - -0.1164601966738701 - 0.0533809401094913 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - -5.2581899799406528e-003 - -0.0842621028423309 - 0.0368803516030312 - <_> - - <_> - - - - <_>3 5 5 9 -1. - <_>3 8 5 3 3. - 0 - 0.0203024893999100 - -0.0532972291111946 - 0.1694989055395126 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 3.1120770145207644e-003 - 0.0446304306387901 - -0.1405466049909592 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - -0.0775247365236282 - -0.6503828167915344 - 0.0104688899591565 - <_> - - <_> - - - - <_>10 0 10 8 -1. - <_>15 0 5 4 2. - <_>10 4 5 4 2. - 0 - 0.0209784507751465 - -0.0300015695393085 - 0.1923335045576096 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 2.0581670105457306e-003 - 0.0515354312956333 - -0.1311402022838593 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - -7.8407032415270805e-003 - -0.1388293951749802 - 0.0506579317152500 - <_> - - <_> - - - - <_>0 4 12 9 -1. - <_>0 7 12 3 3. - 0 - -0.0718947499990463 - 0.2186698019504547 - -0.0336151905357838 - <_> - - <_> - - - - <_>0 7 20 4 -1. - <_>0 9 20 2 2. - 0 - 0.1421850025653839 - 0.0128802200779319 - -0.5885351896286011 - <_> - - <_> - - - - <_>5 2 10 4 -1. - <_>10 2 5 4 2. - 0 - 4.4800378382205963e-003 - -0.0555220395326614 - 0.1197623014450073 - <_> - - <_> - - - - <_>11 11 4 7 -1. - <_>11 11 2 7 2. - 0 - -9.4673000276088715e-003 - -0.1203638017177582 - 0.0302323605865240 - <_> - - <_> - - - - <_>6 12 4 7 -1. - <_>8 12 2 7 2. - 0 - -1.2275399640202522e-003 - 0.0835638269782066 - -0.0870467200875282 - <_> - - <_> - - - - <_>11 13 9 7 -1. - <_>14 13 3 7 3. - 0 - -6.2556960619986057e-003 - 0.0693551376461983 - -0.0351463407278061 - <_> - - <_> - - - - <_>4 15 12 5 -1. - <_>10 15 6 5 2. - 0 - 0.0649539008736610 - -0.0192965101450682 - 0.3489815890789032 - <_> - - <_> - - - - <_>8 9 4 8 -1. - <_>8 9 2 8 2. - 0 - -3.2067541033029556e-003 - -0.1520569026470184 - 0.0558979287743568 - <_> - - <_> - - - - <_>5 11 6 7 -1. - <_>7 11 2 7 3. - 0 - -0.0482600890100002 - -0.6030963063240051 - 0.0104638598859310 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>8 5 3 7 2. - 0 - -4.2638331651687622e-003 - -0.1527829021215439 - 0.0184243191033602 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>9 5 3 7 2. - 0 - 0.0493636913597584 - -0.0254420097917318 - 0.3922775983810425 - <_> - - <_> - - - - <_>2 6 16 9 -1. - <_>2 9 16 3 3. - 0 - 2.3624610621482134e-003 - 0.3851962089538574 - -0.0170713607221842 - <_> - - <_> - - - - <_>3 8 14 2 -1. - <_>3 9 14 1 2. - 0 - 2.5921489577740431e-003 - -0.1545972973108292 - 0.0439757890999317 - <_> - - <_> - - - - <_>9 4 3 15 -1. - <_>9 9 3 5 3. - 0 - 0.0115101700648665 - 0.0607402101159096 - -0.0986718907952309 - <_> - - <_> - - - - <_>7 10 4 8 -1. - <_>7 14 4 4 2. - 0 - 3.9182868786156178e-003 - 0.0261657498776913 - -0.2969762980937958 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - 0.0732656419277191 - 5.5715530179440975e-003 - -0.3047415912151337 - <_> - - <_> - - - - <_>0 9 4 11 -1. - <_>2 9 2 11 2. - 0 - -4.8912810161709785e-003 - 0.1275378018617630 - -0.0662368386983871 - <_> - - <_> - - - - <_>7 3 8 10 -1. - <_>7 8 8 5 2. - 0 - -0.0131870303303003 - -0.2025769054889679 - 0.0303698293864727 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - 1.8196239834651351e-003 - 0.0491981394588947 - -0.1378270983695984 - <_> - - <_> - - - - <_>7 16 8 4 -1. - <_>7 16 4 4 2. - 0 - -0.0102994004264474 - 0.1353435963392258 - -0.0291934702545404 - <_> - - <_> - - - - <_>1 0 10 20 -1. - <_>1 0 5 10 2. - <_>6 10 5 10 2. - 0 - 0.1715707927942276 - -9.5548974350094795e-003 - 0.7139971852302551 - <_> - - <_> - - - - <_>10 1 4 10 -1. - <_>10 6 4 5 2. - 0 - -3.4571110736578703e-003 - 0.0610946305096149 - -0.0768169984221458 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 3.3349241130053997e-004 - -0.1876861006021500 - 0.0394117198884487 - <_> - - <_> - - - - <_>1 7 18 4 -1. - <_>10 7 9 2 2. - <_>1 9 9 2 2. - 0 - 0.0560192093253136 - 8.5914824157953262e-003 - -0.7357705831527710 - <_> - - <_> - - - - <_>5 14 10 6 -1. - <_>5 16 10 2 3. - 0 - 6.2299368437379599e-004 - -0.0940620005130768 - 0.0679658874869347 - <_> - - <_> - - - - <_>7 12 13 3 -1. - <_>7 13 13 1 3. - 0 - -0.0142886796966195 - 0.2414492964744568 - -0.0270254593342543 - <_> - - <_> - - - - <_>2 11 7 6 -1. - <_>2 13 7 2 3. - 0 - -9.9114552140235901e-003 - -0.1534602940082550 - 0.0532433614134789 - <_> - - <_> - - - - <_>11 12 5 8 -1. - <_>11 16 5 4 2. - 0 - -0.0707279667258263 - -0.7124310135841370 - 7.4889077804982662e-003 - <_> - - <_> - - - - <_>4 12 5 8 -1. - <_>4 16 5 4 2. - 0 - 0.0161121692508459 - -0.0354375094175339 - 0.2202602028846741 - <_> - - <_> - - - - <_>10 10 10 4 -1. - <_>10 12 10 2 2. - 0 - 2.9938609804958105e-003 - 0.0115308202803135 - -0.0920172408223152 - <_> - - <_> - - - - <_>4 12 9 6 -1. - <_>4 15 9 3 2. - 0 - 1.4030840247869492e-003 - 0.0543021410703659 - -0.1177761033177376 - <_> - - <_> - - - - <_>10 10 10 4 -1. - <_>10 12 10 2 2. - 0 - -0.0898949131369591 - -0.6765859127044678 - 1.5741019742563367e-003 - <_> - - <_> - - - - <_>0 10 10 4 -1. - <_>0 12 10 2 2. - 0 - 2.7459259144961834e-003 - 0.0298608001321554 - -0.2209143042564392 - <_> - - <_> - - - - <_>16 0 4 16 -1. - <_>16 8 4 8 2. - 0 - 0.0222259406000376 - -0.0465929098427296 - 0.0804186910390854 - <_> - - <_> - - - - <_>7 4 3 15 -1. - <_>7 9 3 5 3. - 0 - 4.4512529857456684e-003 - 0.1070649996399880 - -0.0651014968752861 - <_> - - <_> - - - - <_>9 10 10 6 -1. - <_>14 10 5 3 2. - <_>9 13 5 3 2. - 0 - -2.1191150881350040e-003 - 0.0398718602955341 - -0.0525559596717358 - <_> - - <_> - - - - <_>3 1 14 14 -1. - <_>3 1 7 7 2. - <_>10 8 7 7 2. - 0 - 0.1022958979010582 - 0.0133862700313330 - -0.4554656147956848 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>18 5 2 7 2. - <_>16 12 2 7 2. - 0 - -6.8260570988059044e-003 - 0.1269534975290299 - -0.0597040317952633 - <_> - - <_> - - - - <_>0 5 4 14 -1. - <_>0 5 2 7 2. - <_>2 12 2 7 2. - 0 - -0.0568905808031559 - 0.4018079936504364 - -0.0160482693463564 - <_> - - <_> - - - - <_>5 2 13 3 -1. - <_>5 3 13 1 3. - 0 - -0.0185900293290615 - -0.4037410914897919 - 0.0135025801137090 - <_> - - <_> - - - - <_>0 16 17 2 -1. - <_>0 17 17 1 2. - 0 - 0.0338822007179260 - 7.8824451193213463e-003 - -0.7926862239837647 - <_> - - <_> - - - - <_>2 9 16 6 -1. - <_>2 12 16 3 2. - 0 - 1.8759339582175016e-003 - -0.0345212407410145 - 0.1817788034677506 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 11 18 1 2. - 0 - 1.5652549918740988e-003 - 0.0484198890626431 - -0.1518516987562180 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 3.9563868194818497e-003 - -0.0421620905399323 - 0.0789437219500542 - -1.3404430150985718 - 28 - -1 - <_> - - - <_> - - <_> - - - - <_>3 0 13 9 -1. - <_>3 3 13 3 3. - 0 - 0.0884874910116196 - -0.2293592989444733 - 0.2400110960006714 - <_> - - <_> - - - - <_>6 4 9 5 -1. - <_>9 4 3 5 3. - 0 - 0.0433443598449230 - -0.1992744952440262 - 0.2029874026775360 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 0.0159850791096687 - -0.1989088952541351 - 0.1923387944698334 - <_> - - <_> - - - - <_>10 1 10 4 -1. - <_>10 1 5 4 2. - 0 - 0.0984112322330475 - -0.0948308929800987 - 0.2447405010461807 - <_> - - <_> - - - - <_>1 3 18 15 -1. - <_>1 8 18 5 3. - 0 - 0.0100799798965454 - -0.4800091087818146 - 0.0598084516823292 - <_> - - <_> - - - - <_>14 2 6 12 -1. - <_>14 2 3 12 2. - 0 - 0.0626299381256104 - -0.1590265929698944 - 0.1516306996345520 - <_> - - <_> - - - - <_>1 2 6 5 -1. - <_>4 2 3 5 2. - 0 - 0.0136238699778914 - -0.2745133936405182 - 0.0904333665966988 - <_> - - <_> - - - - <_>12 5 8 8 -1. - <_>16 5 4 4 2. - <_>12 9 4 4 2. - 0 - -3.8067731074988842e-003 - -0.2934218049049377 - 0.0730208307504654 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -0.0146496100351214 - 0.2605907917022705 - -0.0952483788132668 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - -4.9288192531093955e-004 - 0.0593522191047668 - -0.2808147072792053 - <_> - - <_> - - - - <_>0 0 17 3 -1. - <_>0 1 17 1 3. - 0 - -5.1220930181443691e-003 - -0.2421803027391434 - 0.0817015096545219 - <_> - - <_> - - - - <_>6 5 9 8 -1. - <_>6 9 9 4 2. - 0 - 3.3120220177806914e-004 - -0.4009391069412231 - 0.0340260900557041 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - -7.4724480509757996e-004 - 0.0605607889592648 - -0.2912786900997162 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0488296709954739 - -0.0722984224557877 - 0.2613297104835510 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - 0.0269940104335546 - 0.0954571291804314 - -0.2675864994525909 - <_> - - <_> - - - - <_>4 8 15 3 -1. - <_>9 8 5 3 3. - 0 - -2.1151660475879908e-003 - -0.2577306926250458 - 0.0532478690147400 - <_> - - <_> - - - - <_>1 8 15 3 -1. - <_>6 8 5 3 3. - 0 - 2.2652999177807942e-005 - -0.3009231090545654 - 0.0590967908501625 - <_> - - <_> - - - - <_>4 13 13 3 -1. - <_>4 14 13 1 3. - 0 - 0.0110349301248789 - -0.0742779374122620 - 0.1904879063367844 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0102752195671201 - -0.3283599913120270 - 0.0492186881601810 - <_> - - <_> - - - - <_>10 1 7 4 -1. - <_>10 3 7 2 2. - 0 - -8.3319991827011108e-003 - -0.2965146899223328 - 0.0394287891685963 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0508086718618870 - -0.0476612411439419 - 0.3740425109863281 - <_> - - <_> - - - - <_>10 9 6 10 -1. - <_>13 9 3 5 2. - <_>10 14 3 5 2. - 0 - -1.2126479996368289e-003 - -0.1214888989925385 - 0.0650594383478165 - <_> - - <_> - - - - <_>0 10 20 5 -1. - <_>10 10 10 5 2. - 0 - 4.1254470124840736e-003 - -0.1491204053163528 - 0.1114611998200417 - <_> - - <_> - - - - <_>2 1 16 4 -1. - <_>10 1 8 2 2. - <_>2 3 8 2 2. - 0 - -0.0182843599468470 - -0.2857351899147034 - 0.0592681318521500 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 3 12 3 2. - 0 - 0.1415628045797348 - -0.0344361513853073 - 0.4637441933155060 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - -0.0369824208319187 - -0.5085319876670837 - 0.0250870808959007 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - 5.0303530879318714e-003 - 0.0946269035339355 - -0.1612031012773514 - <_> - - <_> - - - - <_>2 3 16 17 -1. - <_>2 3 8 17 2. - 0 - -0.4614908099174500 - 0.4509657025337219 - -0.0312092900276184 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0197946894913912 - -0.4104653000831604 - 0.0387902893126011 - <_> - - <_> - - - - <_>12 5 8 8 -1. - <_>16 5 4 4 2. - <_>12 9 4 4 2. - 0 - -0.0238720308989286 - -0.1525274068117142 - 9.2825219035148621e-003 - <_> - - <_> - - - - <_>0 5 8 8 -1. - <_>0 5 4 4 2. - <_>4 9 4 4 2. - 0 - 1.8736299825832248e-003 - -0.1918659955263138 - 0.0690484866499901 - <_> - - <_> - - - - <_>18 4 2 16 -1. - <_>18 12 2 8 2. - 0 - 0.0582442991435528 - -0.0226122308522463 - 0.2197508066892624 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0152811501175165 - 0.0563797503709793 - -0.2417110055685043 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>8 0 6 3 3. - 0 - 0.1334712058305740 - -0.0418463498353958 - 0.1364179998636246 - <_> - - <_> - - - - <_>2 6 15 3 -1. - <_>2 7 15 1 3. - 0 - -0.0183592401444912 - 0.1365070044994354 - -0.1053709015250206 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0112365297973156 - -0.2104516029357910 - 0.0618727616965771 - <_> - - <_> - - - - <_>2 12 16 6 -1. - <_>2 14 16 2 3. - 0 - -0.0720137432217598 - -0.3848884999752045 - 0.0367311798036098 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0198934208601713 - 0.1991371959447861 - -0.0544709488749504 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -8.1342989578843117e-003 - -0.2752938866615295 - 0.0471528209745884 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - -0.0136144598945975 - 0.1924871057271957 - -0.0600259304046631 - <_> - - <_> - - - - <_>3 0 3 13 -1. - <_>4 0 1 13 3. - 0 - -6.4553669653832912e-003 - -0.2148008048534393 - 0.0626549199223518 - <_> - - <_> - - - - <_>5 5 10 12 -1. - <_>10 5 5 6 2. - <_>5 11 5 6 2. - 0 - -0.0722887068986893 - -0.5320072770118713 - 0.0221324805170298 - <_> - - <_> - - - - <_>2 4 14 12 -1. - <_>2 4 7 6 2. - <_>9 10 7 6 2. - 0 - -0.0704259797930717 - -0.3258849084377289 - 0.0371509008109570 - <_> - - <_> - - - - <_>18 4 2 16 -1. - <_>18 12 2 8 2. - 0 - -0.0122196702286601 - -0.0659457221627235 - 0.0287281107157469 - <_> - - <_> - - - - <_>5 4 9 5 -1. - <_>8 4 3 5 3. - 0 - 6.9816941395401955e-003 - -0.2850838899612427 - 0.0425124689936638 - <_> - - <_> - - - - <_>15 0 3 15 -1. - <_>16 0 1 15 3. - 0 - -2.1437550894916058e-003 - -0.1001932024955750 - 0.0711989998817444 - <_> - - <_> - - - - <_>2 0 3 15 -1. - <_>3 0 1 15 3. - 0 - -1.5813990030437708e-003 - -0.1292670965194702 - 0.0953322723507881 - <_> - - <_> - - - - <_>8 6 6 8 -1. - <_>8 10 6 4 2. - 0 - 2.1735160771640949e-005 - -0.1924615949392319 - 0.0537246987223625 - <_> - - <_> - - - - <_>1 4 6 16 -1. - <_>1 4 3 8 2. - <_>4 12 3 8 2. - 0 - -0.1007528007030487 - 0.5818105936050415 - -0.0211555194109678 - <_> - - <_> - - - - <_>3 0 15 2 -1. - <_>3 1 15 1 2. - 0 - 8.0153037561103702e-004 - -0.1675217002630234 - 0.0619126893579960 - <_> - - <_> - - - - <_>7 2 6 14 -1. - <_>7 2 3 7 2. - <_>10 9 3 7 2. - 0 - -0.0134243704378605 - 0.1700782030820847 - -0.0658217296004295 - <_> - - <_> - - - - <_>10 2 6 7 -1. - <_>12 2 2 7 3. - 0 - 0.0250065103173256 - 0.0318387895822525 - -0.3566446006298065 - <_> - - <_> - - - - <_>5 1 3 16 -1. - <_>6 1 1 16 3. - 0 - -0.0230613108724356 - -0.5344607830047607 - 0.0205004308372736 - <_> - - <_> - - - - <_>6 2 9 10 -1. - <_>6 7 9 5 2. - 0 - -8.1409228732809424e-004 - 0.0737168118357658 - -0.0983857288956642 - <_> - - <_> - - - - <_>9 2 2 13 -1. - <_>10 2 1 13 2. - 0 - -0.0130834402516484 - 0.2358510047197342 - -0.0478937588632107 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - 0.0104809096083045 - -0.0677257701754570 - 0.1178323030471802 - <_> - - <_> - - - - <_>2 6 14 6 -1. - <_>2 6 7 3 2. - <_>9 9 7 3 2. - 0 - -0.0431982688605785 - -0.4381685853004456 - 0.0251015704125166 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -3.2453269232064486e-003 - -0.2245175987482071 - 0.0430568903684616 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - -1.6294110100716352e-003 - -0.2338878065347672 - 0.0450734011828899 - <_> - - <_> - - - - <_>9 5 7 9 -1. - <_>9 8 7 3 3. - 0 - -0.0329114086925983 - 0.2101268023252487 - -0.0212967004626989 - <_> - - <_> - - - - <_>3 12 13 2 -1. - <_>3 13 13 1 2. - 0 - 1.4785619896429125e-005 - -0.0708541572093964 - 0.1469694972038269 - <_> - - <_> - - - - <_>9 13 8 6 -1. - <_>9 15 8 2 3. - 0 - -0.0602085404098034 - -0.5213583111763001 - 0.0195774007588625 - <_> - - <_> - - - - <_>2 12 7 4 -1. - <_>2 14 7 2 2. - 0 - 1.1327289976179600e-003 - 0.0448174700140953 - -0.2439045011997223 - <_> - - <_> - - - - <_>6 17 13 3 -1. - <_>6 18 13 1 3. - 0 - 8.3639882504940033e-003 - -0.0569760799407959 - 0.1168429031968117 - <_> - - <_> - - - - <_>3 10 7 6 -1. - <_>3 12 7 2 3. - 0 - 0.0143133895471692 - 0.0474452115595341 - -0.2220298945903778 - <_> - - <_> - - - - <_>9 5 7 9 -1. - <_>9 8 7 3 3. - 0 - -0.1153006032109261 - 0.8666297793388367 - -4.2397230863571167e-003 - <_> - - <_> - - - - <_>4 5 7 9 -1. - <_>4 8 7 3 3. - 0 - -0.0207980908453465 - 0.2866652905941010 - -0.0409195087850094 - <_> - - <_> - - - - <_>5 5 13 3 -1. - <_>5 6 13 1 3. - 0 - -0.0182687006890774 - 0.1308714002370834 - -0.0453482009470463 - <_> - - <_> - - - - <_>1 2 18 12 -1. - <_>1 6 18 4 3. - 0 - -0.2549448907375336 - -0.3241083920001984 - 0.0404963307082653 - <_> - - <_> - - - - <_>4 4 13 3 -1. - <_>4 5 13 1 3. - 0 - -0.0217865705490112 - 0.3312666118144989 - -0.0370218008756638 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0427438989281654 - 0.0323168598115444 - -0.3525961935520172 - <_> - - <_> - - - - <_>10 2 4 8 -1. - <_>10 2 2 8 2. - 0 - 0.0347305908799171 - 0.0340495482087135 - -0.2139337062835693 - <_> - - <_> - - - - <_>6 2 4 8 -1. - <_>8 2 2 8 2. - 0 - -8.8458160462323576e-005 - -0.3113448023796082 - 0.0393645204603672 - <_> - - <_> - - - - <_>8 0 12 16 -1. - <_>14 0 6 8 2. - <_>8 8 6 8 2. - 0 - 0.2228846997022629 - -8.7889749556779861e-003 - 0.8656687140464783 - <_> - - <_> - - - - <_>0 0 18 6 -1. - <_>6 0 6 6 3. - 0 - 0.2704513967037201 - -0.0526949018239975 - 0.1874651014804840 - <_> - - <_> - - - - <_>12 0 8 4 -1. - <_>12 0 4 4 2. - 0 - -0.0247899405658245 - 0.2765029966831207 - -0.0273062493652105 - <_> - - <_> - - - - <_>0 0 6 7 -1. - <_>3 0 3 7 2. - 0 - -0.0357311703264713 - 0.4115746915340424 - -0.0228860899806023 - <_> - - <_> - - - - <_>9 13 6 7 -1. - <_>11 13 2 7 3. - 0 - 0.0478425808250904 - 0.0229893606156111 - -0.4128724932670593 - <_> - - <_> - - - - <_>6 4 6 7 -1. - <_>8 4 2 7 3. - 0 - -0.0318460911512375 - 0.3807303905487061 - -0.0295822303742170 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -6.9219218567013741e-003 - -0.1374137997627258 - 0.0487101189792156 - <_> - - <_> - - - - <_>1 14 17 6 -1. - <_>1 16 17 2 3. - 0 - 0.0413397587835789 - 0.0441196300089359 - -0.2356161028146744 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -0.0341570712625980 - -0.2487792968750000 - 0.0118720596656203 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - -0.0121989902108908 - -0.2142619937658310 - 0.0515333004295826 - <_> - - <_> - - - - <_>5 5 13 3 -1. - <_>5 6 13 1 3. - 0 - -7.9321218654513359e-003 - 0.0815533325076103 - -0.0699217170476913 - <_> - - <_> - - - - <_>5 13 6 7 -1. - <_>7 13 2 7 3. - 0 - -0.0426653884351254 - -0.5061656236648560 - 0.0192379690706730 - <_> - - <_> - - - - <_>12 10 4 7 -1. - <_>12 10 2 7 2. - 0 - 0.0354458801448345 - -0.0163948405534029 - 0.1705784946680069 - <_> - - <_> - - - - <_>1 9 18 11 -1. - <_>7 9 6 11 3. - 0 - 0.4568628072738648 - 0.0192641708999872 - -0.5441359281539917 - <_> - - <_> - - - - <_>10 10 6 7 -1. - <_>12 10 2 7 3. - 0 - 0.0311184208840132 - -0.0307769794017076 - 0.1358110010623932 - <_> - - <_> - - - - <_>4 10 6 7 -1. - <_>6 10 2 7 3. - 0 - -0.0161036793142557 - 0.2124428004026413 - -0.0483417809009552 - <_> - - <_> - - - - <_>9 10 9 9 -1. - <_>12 10 3 9 3. - 0 - 5.7916441000998020e-003 - -0.0739843770861626 - 0.0357490293681622 - <_> - - <_> - - - - <_>0 10 10 10 -1. - <_>0 10 5 5 2. - <_>5 15 5 5 2. - 0 - -0.0656602978706360 - 0.2618337869644165 - -0.0410048216581345 - <_> - - <_> - - - - <_>12 15 6 5 -1. - <_>12 15 3 5 2. - 0 - 0.0814649835228920 - 0.0129289999604225 - -0.3536277115345001 - <_> - - <_> - - - - <_>1 15 8 5 -1. - <_>5 15 4 5 2. - 0 - 0.0125611703842878 - -0.1910876929759979 - 0.0699659436941147 - <_> - - <_> - - - - <_>5 14 14 2 -1. - <_>5 14 7 2 2. - 0 - 0.0787838026881218 - -5.4801939986646175e-003 - 0.3921732902526856 - <_> - - <_> - - - - <_>1 14 12 3 -1. - <_>7 14 6 3 2. - 0 - 0.0339848287403584 - 0.0843287631869316 - -0.1247764006257057 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 0.0177183393388987 - 0.0447938293218613 - -0.1976087987422943 - <_> - - <_> - - - - <_>5 2 8 8 -1. - <_>5 2 4 4 2. - <_>9 6 4 4 2. - 0 - -9.8835285753011703e-003 - -0.1514932960271835 - 0.0673480480909348 - <_> - - <_> - - - - <_>6 16 14 4 -1. - <_>13 16 7 2 2. - <_>6 18 7 2 2. - 0 - 0.0238502305001020 - -0.0332198217511177 - 0.1613163053989410 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -0.0395907014608383 - 0.3990392982959747 - -0.0288859903812408 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>10 15 7 2 2. - <_>3 17 7 2 2. - 0 - 0.0349619202315807 - 0.0221032295376062 - -0.5288540720939636 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>10 6 10 2 2. - 0 - 0.0948258414864540 - 9.5985615625977516e-003 - -0.8203567266464233 - <_> - - <_> - - - - <_>5 3 14 6 -1. - <_>12 3 7 3 2. - <_>5 6 7 3 2. - 0 - -0.1021554023027420 - -0.2055155932903290 - 3.0388559680432081e-003 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 7 10 2 3. - 0 - -9.3128867447376251e-003 - 0.0368270687758923 - -0.2465641945600510 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>0 3 20 1 2. - 0 - -5.4135788232088089e-003 - -0.2387809008359909 - 0.0410151891410351 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>6 3 8 3 2. - 0 - -0.0262819807976484 - 0.2785386145114899 - -0.0368680804967880 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -9.9223516881465912e-003 - -0.2532212138175964 - 0.0335225500166416 - <_> - - <_> - - - - <_>0 5 13 14 -1. - <_>0 12 13 7 2. - 0 - -0.1710970997810364 - -0.2940491139888763 - 0.0324326790869236 - <_> - - <_> - - - - <_>14 11 4 8 -1. - <_>14 15 4 4 2. - 0 - -8.7599586695432663e-003 - 0.0687875002622604 - -0.1064717024564743 - <_> - - <_> - - - - <_>0 0 20 8 -1. - <_>0 0 10 4 2. - <_>10 4 10 4 2. - 0 - 0.1294253021478653 - 0.0132413003593683 - -0.6892367005348206 - <_> - - <_> - - - - <_>16 1 4 18 -1. - <_>18 1 2 9 2. - <_>16 10 2 9 2. - 0 - -0.0477239191532135 - 0.2221481055021286 - -0.0285170804709196 - <_> - - <_> - - - - <_>1 10 6 9 -1. - <_>3 10 2 9 3. - 0 - 0.1081231012940407 - 0.0119020203128457 - -0.7791512012481690 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 5 2. - <_>7 15 3 5 2. - 0 - -0.0274946894496679 - -0.3019264042377472 - 0.0285402107983828 - <_> - - <_> - - - - <_>4 7 12 12 -1. - <_>4 7 6 6 2. - <_>10 13 6 6 2. - 0 - -0.0495341382920742 - -0.3001514077186585 - 0.0317509509623051 - <_> - - <_> - - - - <_>7 12 13 3 -1. - <_>7 13 13 1 3. - 0 - -0.0103583503514528 - 0.1228711977601051 - -0.0391230396926403 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -0.0327058695256710 - -0.3335491120815277 - 0.0279652904719114 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0135804796591401 - 0.1119289994239807 - -0.0494710281491280 - <_> - - <_> - - - - <_>0 0 16 6 -1. - <_>0 2 16 2 3. - 0 - 5.5075851269066334e-003 - -0.1311812996864319 - 0.0694034770131111 - <_> - - <_> - - - - <_>6 1 8 6 -1. - <_>6 4 8 3 2. - 0 - 0.0755081102252007 - -0.0290196295827627 - 0.3941380083560944 - <_> - - <_> - - - - <_>0 0 5 8 -1. - <_>0 4 5 4 2. - 0 - 0.0568114109337330 - 0.0267886593937874 - -0.4198954999446869 - <_> - - <_> - - - - <_>9 3 9 5 -1. - <_>12 3 3 5 3. - 0 - 5.0004580989480019e-003 - 0.0462391600012779 - -0.0676206499338150 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>2 2 2 9 3. - 0 - 0.0197174903005362 - -0.0604025088250637 - 0.1663213968276978 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0647294521331787 - -0.5248411893844605 - 0.0279226005077362 - <_> - - <_> - - - - <_>4 5 10 6 -1. - <_>4 5 5 3 2. - <_>9 8 5 3 2. - 0 - -0.0306831300258636 - 0.2194546014070511 - -0.0481116287410259 - <_> - - <_> - - - - <_>7 1 10 6 -1. - <_>12 1 5 3 2. - <_>7 4 5 3 2. - 0 - 8.1467535346746445e-003 - 0.0602792203426361 - -0.1160089001059532 - <_> - - <_> - - - - <_>0 2 18 4 -1. - <_>0 2 9 2 2. - <_>9 4 9 2 2. - 0 - 7.9492190852761269e-003 - 0.0835634917020798 - -0.1605300009250641 - <_> - - <_> - - - - <_>17 1 2 17 -1. - <_>17 1 1 17 2. - 0 - -0.0224061999469996 - 0.2827141880989075 - -0.0281844791024923 - <_> - - <_> - - - - <_>1 0 2 19 -1. - <_>2 0 1 19 2. - 0 - 0.0829937905073166 - 0.0104750599712133 - -0.9687529206275940 - <_> - - <_> - - - - <_>2 9 16 4 -1. - <_>10 9 8 2 2. - <_>2 11 8 2 2. - 0 - -7.0176632143557072e-003 - -0.1375322937965393 - 0.0682054981589317 - <_> - - <_> - - - - <_>1 6 18 8 -1. - <_>1 6 9 4 2. - <_>10 10 9 4 2. - 0 - -9.7560193389654160e-003 - -0.1370708048343658 - 0.0728905871510506 - <_> - - <_> - - - - <_>1 8 18 4 -1. - <_>7 8 6 4 3. - 0 - -0.0522173792123795 - -0.6430044174194336 - 0.0144922202453017 - <_> - - <_> - - - - <_>5 4 3 10 -1. - <_>5 9 3 5 2. - 0 - -7.8029942233115435e-004 - -0.2647927105426788 - 0.0335178412497044 - <_> - - <_> - - - - <_>5 2 10 6 -1. - <_>5 4 10 2 3. - 0 - 0.0379199311137199 - -0.0848467871546745 - 0.1126058995723724 - <_> - - <_> - - - - <_>7 7 4 10 -1. - <_>7 12 4 5 2. - 0 - 3.0561289750039577e-003 - 0.0480869412422180 - -0.1900925040245056 - <_> - - <_> - - - - <_>8 11 6 6 -1. - <_>8 14 6 3 2. - 0 - 0.0658622682094574 - -5.2452040836215019e-003 - 0.9128062129020691 - <_> - - <_> - - - - <_>1 6 15 5 -1. - <_>6 6 5 5 3. - 0 - 0.1556821018457413 - 0.0208840500563383 - -0.4958043992519379 - <_> - - <_> - - - - <_>8 5 4 12 -1. - <_>8 9 4 4 3. - 0 - -1.9058469915762544e-003 - 0.1830590069293976 - -0.0497563108801842 - <_> - - <_> - - - - <_>1 8 10 12 -1. - <_>1 8 5 6 2. - <_>6 14 5 6 2. - 0 - -0.0983569994568825 - 0.4802044928073883 - -0.0203843098133802 - <_> - - <_> - - - - <_>14 12 5 6 -1. - <_>14 15 5 3 2. - 0 - 4.2754490859806538e-003 - 0.0400959290564060 - -0.1407112926244736 - <_> - - <_> - - - - <_>0 12 18 4 -1. - <_>0 12 9 2 2. - <_>9 14 9 2 2. - 0 - -0.0140330102294683 - -0.2079156041145325 - 0.0525762997567654 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0801794081926346 - -0.0257905591279268 - 0.3765121996402741 - <_> - - <_> - - - - <_>1 3 18 12 -1. - <_>1 3 9 6 2. - <_>10 9 9 6 2. - 0 - 0.1817575991153717 - 0.0114286495372653 - -0.8338211178779602 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -0.0191416908055544 - -0.5052285790443420 - 0.0126055199652910 - <_> - - <_> - - - - <_>5 2 9 6 -1. - <_>5 4 9 2 3. - 0 - -0.0512608289718628 - 0.5829253196716309 - -0.0161097496747971 - <_> - - <_> - - - - <_>15 3 2 17 -1. - <_>15 3 1 17 2. - 0 - 0.0644781365990639 - 0.0102373296394944 - -0.6030235290527344 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - 0.0312383007258177 - 0.0208458509296179 - -0.3978582918643951 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - -5.0772321410477161e-003 - 0.1233154013752937 - -0.0352249816060066 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - -1.9385579507797956e-003 - 0.1572668999433518 - -0.0733163207769394 - <_> - - <_> - - - - <_>7 5 6 8 -1. - <_>9 5 2 8 3. - 0 - 0.0240997895598412 - -0.1117860972881317 - 0.1073898002505302 - <_> - - <_> - - - - <_>3 3 2 17 -1. - <_>4 3 1 17 2. - 0 - -8.8700000196695328e-003 - -0.3604820072650909 - 0.0270342491567135 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>11 0 9 2 2. - <_>2 2 9 2 2. - 0 - -0.0374241210520267 - -0.3522940874099731 - 0.0167865306138992 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>0 0 9 2 2. - <_>9 2 9 2 2. - 0 - -0.0200670696794987 - -0.2746093869209290 - 0.0395325906574726 - <_> - - <_> - - - - <_>11 12 6 8 -1. - <_>13 12 2 8 3. - 0 - 0.0651698708534241 - 0.0114021599292755 - -0.2481995970010757 - <_> - - <_> - - - - <_>3 12 6 8 -1. - <_>5 12 2 8 3. - 0 - 0.0381574705243111 - 0.0463233105838299 - -0.2098951041698456 - <_> - - <_> - - - - <_>7 12 10 6 -1. - <_>12 12 5 3 2. - <_>7 15 5 3 2. - 0 - 0.0110751800239086 - 0.0344111584126949 - -0.0512565001845360 - <_> - - <_> - - - - <_>5 0 9 14 -1. - <_>8 0 3 14 3. - 0 - 0.1158348023891449 - 0.0422828309237957 - -0.2170549929141998 - <_> - - <_> - - - - <_>4 3 15 4 -1. - <_>9 3 5 4 3. - 0 - -0.0467207804322243 - 0.2309352010488510 - -8.3234477788209915e-003 - <_> - - <_> - - - - <_>1 3 15 4 -1. - <_>6 3 5 4 3. - 0 - 0.1256745010614395 - -0.0498825013637543 - 0.2101844996213913 - <_> - - <_> - - - - <_>13 5 4 14 -1. - <_>15 5 2 7 2. - <_>13 12 2 7 2. - 0 - 1.8088010256178677e-004 - -0.1183658987283707 - 0.0842788964509964 - <_> - - <_> - - - - <_>3 5 4 14 -1. - <_>3 5 2 7 2. - <_>5 12 2 7 2. - 0 - 0.0104706902056932 - -0.0862106084823608 - 0.1176085025072098 - <_> - - <_> - - - - <_>11 0 4 7 -1. - <_>11 0 2 7 2. - 0 - 0.0580657199025154 - 0.0155827002599835 - -0.7421792149543762 - <_> - - <_> - - - - <_>5 0 4 7 -1. - <_>7 0 2 7 2. - 0 - 2.2783069871366024e-003 - -0.1915138065814972 - 0.0479906387627125 - <_> - - <_> - - - - <_>7 12 10 6 -1. - <_>12 12 5 3 2. - <_>7 15 5 3 2. - 0 - -0.0695965588092804 - -0.7324169278144836 - 1.1130559723824263e-003 - <_> - - <_> - - - - <_>3 12 10 6 -1. - <_>3 12 5 3 2. - <_>8 15 5 3 2. - 0 - 0.0589078702032566 - 0.0168783906847239 - -0.5440040826797485 - <_> - - <_> - - - - <_>3 4 16 6 -1. - <_>11 4 8 3 2. - <_>3 7 8 3 2. - 0 - -0.0806588232517242 - 0.2992295920848846 - -0.0185705702751875 - <_> - - <_> - - - - <_>4 1 6 7 -1. - <_>6 1 2 7 3. - 0 - 0.0176869295537472 - 0.0429361611604691 - -0.2259155064821243 - <_> - - <_> - - - - <_>6 13 14 3 -1. - <_>6 14 14 1 3. - 0 - -0.0163190700113773 - 0.1888964027166367 - -0.0470473989844322 - <_> - - <_> - - - - <_>4 3 6 7 -1. - <_>6 3 2 7 3. - 0 - -0.0395275689661503 - -0.3265733122825623 - 0.0287622194737196 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 1.9769819919019938e-003 - -0.0882174968719482 - 0.0574027299880981 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -0.0302720293402672 - -0.5117791295051575 - 0.0173592492938042 - <_> - - <_> - - - - <_>8 11 6 7 -1. - <_>10 11 2 7 3. - 0 - 0.0537864193320274 - 0.0120715703815222 - -0.4020195901393890 - <_> - - <_> - - - - <_>2 4 6 12 -1. - <_>5 4 3 12 2. - 0 - -9.4136483967304230e-003 - 0.2472815066576004 - -0.0367347411811352 - <_> - - <_> - - - - <_>10 0 10 18 -1. - <_>10 0 5 18 2. - 0 - -0.0590145289897919 - -0.1327728927135468 - 0.0152207398787141 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.0894176065921783 - -0.2591714859008789 - 0.0375636294484138 - <_> - - <_> - - - - <_>7 10 6 9 -1. - <_>7 10 3 9 2. - 0 - -0.0879961401224136 - 0.4920088052749634 - -0.0212108399719000 - <_> - - <_> - - - - <_>6 12 6 8 -1. - <_>8 12 2 8 3. - 0 - -0.0507475696504116 - -0.4856776893138886 - 0.0200053192675114 - <_> - - <_> - - - - <_>3 18 14 2 -1. - <_>3 19 14 1 2. - 0 - -0.0389182604849339 - -0.8955854773521423 - 7.8960238024592400e-003 - <_> - - <_> - - - - <_>1 6 7 6 -1. - <_>1 8 7 2 3. - 0 - 0.0209681391716003 - -0.0544317103922367 - 0.1612336039543152 - <_> - - <_> - - - - <_>13 5 7 4 -1. - <_>13 7 7 2 2. - 0 - -0.0321030691266060 - -0.3682270050048828 - 0.0191633496433496 - <_> - - <_> - - - - <_>0 5 7 4 -1. - <_>0 7 7 2 2. - 0 - 5.5592609569430351e-003 - 0.0783684402704239 - -0.1184248998761177 - <_> - - <_> - - - - <_>8 5 11 15 -1. - <_>8 10 11 5 3. - 0 - 0.0595542490482330 - -0.0522909387946129 - 0.0361948795616627 - <_> - - <_> - - - - <_>3 9 10 9 -1. - <_>8 9 5 9 2. - 0 - -0.0109731601551175 - 0.1585599035024643 - -0.0558044910430908 - <_> - - <_> - - - - <_>4 1 13 3 -1. - <_>4 2 13 1 3. - 0 - -0.0119346501305699 - -0.2571750879287720 - 0.0328298509120941 - <_> - - <_> - - - - <_>7 0 4 12 -1. - <_>7 6 4 6 2. - 0 - 0.0604416318237782 - -0.0387208014726639 - 0.2297187000513077 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>8 6 4 4 2. - 0 - -8.2118069985881448e-004 - 0.0697387903928757 - -0.1599200069904327 - <_> - - <_> - - - - <_>2 16 16 3 -1. - <_>10 16 8 3 2. - 0 - 0.0204693898558617 - -0.0843492671847343 - 0.1013950034976006 - <_> - - <_> - - - - <_>6 7 9 5 -1. - <_>9 7 3 5 3. - 0 - -0.0763057619333267 - 0.8317422866821289 - -5.0806580111384392e-003 - <_> - - <_> - - - - <_>5 7 9 5 -1. - <_>8 7 3 5 3. - 0 - 0.0605518892407417 - -0.0379711613059044 - 0.2185014933347702 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -4.1085779666900635e-003 - -0.1149664968252182 - 0.0366474799811840 - <_> - - <_> - - - - <_>5 5 4 11 -1. - <_>7 5 2 11 2. - 0 - 0.0123999696224928 - 0.0628383010625839 - -0.1414466053247452 - <_> - - <_> - - - - <_>9 6 6 10 -1. - <_>12 6 3 5 2. - <_>9 11 3 5 2. - 0 - -0.0714557021856308 - -0.4267379045486450 - 0.0139471096917987 - <_> - - <_> - - - - <_>5 6 6 10 -1. - <_>5 6 3 5 2. - <_>8 11 3 5 2. - 0 - 0.0337090305984020 - -0.0127135999500752 - 0.7477509975433350 - <_> - - <_> - - - - <_>4 8 16 8 -1. - <_>12 8 8 4 2. - <_>4 12 8 4 2. - 0 - 0.0347427688539028 - 0.0209695007652044 - -0.1463028043508530 - <_> - - <_> - - - - <_>0 8 16 8 -1. - <_>0 8 8 4 2. - <_>8 12 8 4 2. - 0 - -0.0437052994966507 - 0.1806475073099136 - -0.0523351803421974 - <_> - - <_> - - - - <_>9 8 10 10 -1. - <_>14 8 5 5 2. - <_>9 13 5 5 2. - 0 - 0.0849268734455109 - 6.9014527834951878e-003 - -0.2607395946979523 - <_> - - <_> - - - - <_>1 8 10 10 -1. - <_>1 8 5 5 2. - <_>6 13 5 5 2. - 0 - -0.0171190798282623 - -0.1459008008241653 - 0.0674846768379211 - <_> - - <_> - - - - <_>11 1 9 16 -1. - <_>14 1 3 16 3. - 0 - 0.3363071978092194 - 7.8989071771502495e-003 - -0.8385292887687683 - <_> - - <_> - - - - <_>3 4 6 12 -1. - <_>6 4 3 12 2. - 0 - 0.1237123012542725 - -0.0254827104508877 - 0.3909803926944733 - <_> - - <_> - - - - <_>14 12 6 8 -1. - <_>16 12 2 8 3. - 0 - -0.1119590029120445 - -0.3831711113452911 - 6.0780011117458344e-003 - <_> - - <_> - - - - <_>0 12 6 8 -1. - <_>2 12 2 8 3. - 0 - -0.1088189035654068 - -0.7136299014091492 - 0.0127000696957111 - -1.4275209903717041 - 29 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 10 3 -1. - <_>5 2 5 3 2. - 0 - 9.6844611689448357e-003 - -0.1945503950119019 - 0.2004801928997040 - <_> - - <_> - - - - <_>6 4 8 6 -1. - <_>6 6 8 2 3. - 0 - -6.6196201369166374e-003 - 0.0922116413712502 - -0.3482440114021301 - <_> - - <_> - - - - <_>7 6 6 12 -1. - <_>7 12 6 6 2. - 0 - 5.6163137778639793e-003 - 0.0667676106095314 - -0.4117226004600525 - <_> - - <_> - - - - <_>10 1 4 18 -1. - <_>12 1 2 9 2. - <_>10 10 2 9 2. - 0 - -1.6882510390132666e-003 - 0.0726297125220299 - -0.2069447934627533 - <_> - - <_> - - - - <_>4 6 4 14 -1. - <_>4 6 2 7 2. - <_>6 13 2 7 2. - 0 - -2.9599820263683796e-003 - -0.2063589990139008 - 0.0773354172706604 - <_> - - <_> - - - - <_>13 4 3 10 -1. - <_>13 9 3 5 2. - 0 - 1.7798959743231535e-003 - -0.3214946985244751 - 0.0641071274876595 - <_> - - <_> - - - - <_>1 3 14 12 -1. - <_>1 3 7 6 2. - <_>8 9 7 6 2. - 0 - -4.0264189010486007e-004 - 0.0795122534036636 - -0.2405108958482742 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -5.0024548545479774e-004 - 0.0866756066679955 - -0.2050417065620422 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -2.0284270867705345e-003 - 0.1432249993085861 - -0.1222056970000267 - <_> - - <_> - - - - <_>12 10 5 9 -1. - <_>12 13 5 3 3. - 0 - 6.0648359358310699e-003 - 0.0378605797886848 - -0.2437545955181122 - <_> - - <_> - - - - <_>1 14 18 4 -1. - <_>1 14 9 2 2. - <_>10 16 9 2 2. - 0 - 9.6257496625185013e-003 - 0.0571418404579163 - -0.2882792055606842 - <_> - - <_> - - - - <_>7 6 6 14 -1. - <_>9 6 2 14 3. - 0 - 2.5888499803841114e-003 - -0.1890601962804794 - 0.0864302068948746 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 2.9090950265526772e-003 - -0.0831084698438644 - 0.1761883944272995 - <_> - - <_> - - - - <_>10 10 4 8 -1. - <_>10 14 4 4 2. - 0 - 2.2233440540730953e-003 - 0.0201501697301865 - -0.2488275021314621 - <_> - - <_> - - - - <_>6 8 8 12 -1. - <_>6 8 4 6 2. - <_>10 14 4 6 2. - 0 - -9.8997671157121658e-003 - -0.2063976973295212 - 0.0609850101172924 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - 0.0196893904358149 - -0.0344524383544922 - 0.2006977945566177 - <_> - - <_> - - - - <_>0 0 18 2 -1. - <_>9 0 9 2 2. - 0 - 0.0211067702621222 - 0.0438868589699268 - -0.2661089003086090 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -7.2028310969471931e-003 - 0.1701551973819733 - -0.0546393394470215 - <_> - - <_> - - - - <_>1 11 7 6 -1. - <_>1 13 7 2 3. - 0 - 4.0647671557962894e-003 - 0.0521828085184097 - -0.2130403071641922 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>12 5 3 5 2. - <_>9 10 3 5 2. - 0 - -2.8419198933988810e-003 - 0.0531802102923393 - -0.1766956001520157 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - -0.0494618192315102 - 0.3722133040428162 - -0.0339698493480682 - <_> - - <_> - - - - <_>6 1 9 5 -1. - <_>9 1 3 5 3. - 0 - 0.0430241599678993 - 0.0312515497207642 - -0.3183189034461975 - <_> - - <_> - - - - <_>3 2 13 2 -1. - <_>3 3 13 1 2. - 0 - -7.0111698005348444e-004 - -0.2034021019935608 - 0.0589641705155373 - <_> - - <_> - - - - <_>4 0 14 3 -1. - <_>4 1 14 1 3. - 0 - 5.7489587925374508e-004 - -0.0949371904134750 - 0.1053818985819817 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - -1.4911209291312844e-004 - 0.0684236884117126 - -0.1820777952671051 - <_> - - <_> - - - - <_>7 1 10 6 -1. - <_>12 1 5 3 2. - <_>7 4 5 3 2. - 0 - 8.7993890047073364e-003 - 0.0338660702109337 - -0.1162557974457741 - <_> - - <_> - - - - <_>0 0 15 3 -1. - <_>5 0 5 3 3. - 0 - -8.7150773033499718e-003 - 0.1804129034280777 - -0.0657215267419815 - <_> - - <_> - - - - <_>4 7 15 5 -1. - <_>9 7 5 5 3. - 0 - -0.0137276295572519 - -0.1333781033754349 - 0.0359666012227535 - <_> - - <_> - - - - <_>0 7 6 12 -1. - <_>0 11 6 4 3. - 0 - -2.3620850406587124e-003 - -0.1908807009458542 - 0.0618498101830482 - <_> - - <_> - - - - <_>6 17 13 3 -1. - <_>6 18 13 1 3. - 0 - 1.7863539978861809e-003 - -0.0830715373158455 - 0.0989261269569397 - <_> - - <_> - - - - <_>1 7 15 5 -1. - <_>6 7 5 5 3. - 0 - -9.4514712691307068e-003 - -0.1802491992712021 - 0.0601467601954937 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0481952801346779 - -0.0266172997653484 - 0.3013446927070618 - <_> - - <_> - - - - <_>1 8 18 3 -1. - <_>1 9 18 1 3. - 0 - -1.2248229468241334e-003 - -0.2356013953685761 - 0.0455729104578495 - <_> - - <_> - - - - <_>14 0 6 11 -1. - <_>16 0 2 11 3. - 0 - -0.0428511016070843 - 0.1608632951974869 - -0.0234559401869774 - <_> - - <_> - - - - <_>3 1 12 6 -1. - <_>3 1 6 3 2. - <_>9 4 6 3 2. - 0 - 3.4798709675669670e-003 - 0.0768826305866241 - -0.1329917013645172 - <_> - - <_> - - - - <_>6 5 8 6 -1. - <_>6 7 8 2 3. - 0 - -3.9859190583229065e-003 - 0.0431151911616325 - -0.2313275933265686 - <_> - - <_> - - - - <_>0 0 6 11 -1. - <_>2 0 2 11 3. - 0 - 0.0431398488581181 - -0.0367800705134869 - 0.2388345003128052 - <_> - - <_> - - - - <_>8 5 5 12 -1. - <_>8 11 5 6 2. - 0 - -0.0174366291612387 - -0.1404626071453095 - 0.0590770505368710 - <_> - - <_> - - - - <_>1 4 6 16 -1. - <_>1 4 3 8 2. - <_>4 12 3 8 2. - 0 - -0.0752548873424530 - 0.3632852137088776 - -0.0313802808523178 - <_> - - <_> - - - - <_>13 5 6 10 -1. - <_>16 5 3 5 2. - <_>13 10 3 5 2. - 0 - 0.0601255409419537 - 8.2496693357825279e-003 - -0.2348520010709763 - <_> - - <_> - - - - <_>1 5 6 10 -1. - <_>1 5 3 5 2. - <_>4 10 3 5 2. - 0 - 1.2755369534716010e-003 - -0.1226816996932030 - 0.0900715366005898 - <_> - - <_> - - - - <_>16 2 4 8 -1. - <_>16 6 4 4 2. - 0 - -1.3465109514072537e-003 - -0.1455423980951309 - 0.0707611665129662 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - 0.0237584691494703 - -0.0518349893391132 - 0.1758390069007874 - <_> - - <_> - - - - <_>6 1 8 16 -1. - <_>6 9 8 8 2. - 0 - 2.2376580163836479e-003 - 0.0917633399367332 - -0.1120605021715164 - <_> - - <_> - - - - <_>6 12 6 7 -1. - <_>8 12 2 7 3. - 0 - 3.8662939332425594e-003 - 0.0623901896178722 - -0.1514233946800232 - <_> - - <_> - - - - <_>7 1 6 13 -1. - <_>7 1 3 13 2. - 0 - 0.0768680423498154 - -0.0276401992887259 - 0.3763613104820252 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0166171994060278 - 0.0330678187310696 - -0.3095065057277679 - <_> - - <_> - - - - <_>2 10 18 10 -1. - <_>8 10 6 10 3. - 0 - -0.0461450293660164 - 0.1079813987016678 - -0.0582774393260479 - <_> - - <_> - - - - <_>0 0 8 20 -1. - <_>4 0 4 20 2. - 0 - 0.0982066094875336 - 0.0175021607428789 - -0.5086191892623901 - <_> - - <_> - - - - <_>10 0 8 6 -1. - <_>10 0 4 6 2. - 0 - 4.7838049940764904e-003 - -0.1020781025290489 - 0.0577968508005142 - <_> - - <_> - - - - <_>5 2 8 9 -1. - <_>5 5 8 3 3. - 0 - 0.0204676892608404 - -0.0203620102256536 - 0.4500145018100739 - <_> - - <_> - - - - <_>16 2 4 8 -1. - <_>16 6 4 4 2. - 0 - 0.0151417003944516 - 0.0281403791159391 - -0.0851300284266472 - <_> - - <_> - - - - <_>3 3 14 2 -1. - <_>10 3 7 2 2. - 0 - 5.2229189313948154e-003 - -0.0577892586588860 - 0.1558032929897308 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - 0.0188712999224663 - 0.0270537994801998 - -0.1204636022448540 - <_> - - <_> - - - - <_>3 3 13 3 -1. - <_>3 4 13 1 3. - 0 - 4.5608580112457275e-003 - -0.0795675888657570 - 0.1157101020216942 - <_> - - <_> - - - - <_>16 2 4 8 -1. - <_>16 6 4 4 2. - 0 - -0.0121725499629974 - -0.1614917963743210 - 0.0245715398341417 - <_> - - <_> - - - - <_>0 1 11 12 -1. - <_>0 7 11 6 2. - 0 - -0.1646880954504013 - -0.6571279168128967 - 0.0124286897480488 - <_> - - <_> - - - - <_>9 0 9 5 -1. - <_>12 0 3 5 3. - 0 - 1.8241419456899166e-003 - -0.0915267392992973 - 0.0878513902425766 - <_> - - <_> - - - - <_>3 0 9 5 -1. - <_>6 0 3 5 3. - 0 - -5.4591207299381495e-004 - -0.1258120983839035 - 0.0669683814048767 - <_> - - <_> - - - - <_>2 0 18 8 -1. - <_>8 0 6 8 3. - 0 - 2.1177160087972879e-003 - 0.1426133066415787 - -0.0617294684052467 - <_> - - <_> - - - - <_>0 15 14 2 -1. - <_>0 16 14 1 2. - 0 - 1.1853260220959783e-003 - -0.0914256274700165 - 0.0920893624424934 - <_> - - <_> - - - - <_>10 15 10 3 -1. - <_>10 15 5 3 2. - 0 - 7.9899299889802933e-003 - -0.0631192177534103 - 0.1544629931449890 - <_> - - <_> - - - - <_>7 10 3 10 -1. - <_>7 15 3 5 2. - 0 - 4.5044990256428719e-003 - 0.0409202985465527 - -0.2247591018676758 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - 7.4563547968864441e-003 - -0.0395407006144524 - 0.2420867979526520 - <_> - - <_> - - - - <_>4 11 12 6 -1. - <_>4 11 6 3 2. - <_>10 14 6 3 2. - 0 - 6.3897971995174885e-003 - 0.0529007390141487 - -0.1737896949052811 - <_> - - <_> - - - - <_>3 12 16 6 -1. - <_>11 12 8 3 2. - <_>3 15 8 3 2. - 0 - -0.0590520687401295 - -0.4795765876770020 - 8.3919316530227661e-003 - <_> - - <_> - - - - <_>1 12 16 6 -1. - <_>1 12 8 3 2. - <_>9 15 8 3 2. - 0 - -0.0537462085485458 - -0.5085443258285523 - 0.0168806705623865 - <_> - - <_> - - - - <_>4 0 15 6 -1. - <_>9 0 5 6 3. - 0 - -0.0918523669242859 - 0.1946624964475632 - -0.0111296297982335 - <_> - - <_> - - - - <_>1 0 15 6 -1. - <_>6 0 5 6 3. - 0 - 0.1503881961107254 - -0.0201123505830765 - 0.4473851025104523 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - -0.0213174298405647 - 0.2967613935470581 - -0.0282318405807018 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0127114197239280 - 0.0335709415376186 - -0.2897258996963501 - <_> - - <_> - - - - <_>5 0 10 6 -1. - <_>5 3 10 3 2. - 0 - -0.0932879075407982 - 0.6438030004501343 - -0.0149238798767328 - <_> - - <_> - - - - <_>7 0 2 17 -1. - <_>8 0 1 17 2. - 0 - -4.5716729946434498e-003 - -0.2699424922466278 - 0.0332461111247540 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -3.4010890522040427e-004 - 0.0817155465483665 - -0.1064226031303406 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -2.6096890214830637e-003 - 0.1840341985225678 - -0.0647242367267609 - <_> - - <_> - - - - <_>1 9 19 3 -1. - <_>1 10 19 1 3. - 0 - 4.6332611236721277e-004 - -0.1428340971469879 - 0.0420332998037338 - <_> - - <_> - - - - <_>6 0 6 18 -1. - <_>8 0 2 18 3. - 0 - 0.1409530043601990 - 9.4516919925808907e-003 - -0.7772722840309143 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 2.0406199619174004e-003 - -0.0665054321289063 - 0.1180540993809700 - <_> - - <_> - - - - <_>0 10 20 6 -1. - <_>0 13 20 3 2. - 0 - -0.0223020091652870 - -0.1041987016797066 - 0.0893876776099205 - <_> - - <_> - - - - <_>10 11 5 9 -1. - <_>10 14 5 3 3. - 0 - 3.9168349467217922e-003 - 0.0257693808525801 - -0.1662549972534180 - <_> - - <_> - - - - <_>3 4 13 3 -1. - <_>3 5 13 1 3. - 0 - 6.1153857968747616e-003 - -0.0625316873192787 - 0.1407534927129746 - <_> - - <_> - - - - <_>13 11 7 4 -1. - <_>13 13 7 2 2. - 0 - -2.9564529540948570e-005 - 0.0469783097505569 - -0.1086298972368240 - <_> - - <_> - - - - <_>3 2 3 14 -1. - <_>4 2 1 14 3. - 0 - 1.4300559996627271e-004 - -0.1000514999032021 - 0.0803357288241386 - <_> - - <_> - - - - <_>12 3 2 17 -1. - <_>12 3 1 17 2. - 0 - 0.0114307897165418 - 0.0232013594359159 - -0.3136690855026245 - <_> - - <_> - - - - <_>0 9 6 9 -1. - <_>3 9 3 9 2. - 0 - -0.0137246102094650 - 0.1281441003084183 - -0.0612900294363499 - <_> - - <_> - - - - <_>11 3 6 10 -1. - <_>14 3 3 5 2. - <_>11 8 3 5 2. - 0 - -0.0455487705767155 - -0.4752830862998962 - 0.0136313401162624 - <_> - - <_> - - - - <_>2 0 3 13 -1. - <_>3 0 1 13 3. - 0 - 7.6914107194170356e-004 - -0.0894160270690918 - 0.0960914865136147 - <_> - - <_> - - - - <_>4 5 16 2 -1. - <_>4 5 8 2 2. - 0 - 0.0638409107923508 - 0.0160640608519316 - -0.3822189867496491 - <_> - - <_> - - - - <_>4 1 3 13 -1. - <_>5 1 1 13 3. - 0 - -7.2662779130041599e-003 - -0.2194049060344696 - 0.0381705090403557 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0128285996615887 - 0.1470542997121811 - -0.0558326691389084 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - -0.0914679691195488 - -0.7926533222198486 - 0.0104046398773789 - <_> - - <_> - - - - <_>12 3 2 17 -1. - <_>12 3 1 17 2. - 0 - -2.7164160273969173e-003 - -0.1772516965866089 - 0.0564558096230030 - <_> - - <_> - - - - <_>0 15 10 3 -1. - <_>5 15 5 3 2. - 0 - -0.1009757965803146 - -0.5937265753746033 - 0.0131622403860092 - <_> - - <_> - - - - <_>10 11 5 9 -1. - <_>10 14 5 3 3. - 0 - -0.0379835590720177 - -0.1507299989461899 - 0.0195573903620243 - <_> - - <_> - - - - <_>5 11 5 9 -1. - <_>5 14 5 3 3. - 0 - 5.3728191414847970e-004 - 0.0522570498287678 - -0.1799626052379608 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 0.0124439103528857 - -0.0289530195295811 - 0.2544848918914795 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - -0.0181712806224823 - 0.3220398128032684 - -0.0313951000571251 - <_> - - <_> - - - - <_>3 11 16 9 -1. - <_>3 14 16 3 3. - 0 - -0.0306191593408585 - -0.1281727999448776 - 0.0604850202798843 - <_> - - <_> - - - - <_>5 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 2.8726200107485056e-003 - -0.1480740010738373 - 0.0537960007786751 - <_> - - <_> - - - - <_>10 0 10 16 -1. - <_>10 8 10 8 2. - 0 - -0.2877267897129059 - -0.8323444724082947 - 3.6127590574324131e-003 - <_> - - <_> - - - - <_>0 0 10 16 -1. - <_>0 8 10 8 2. - 0 - 0.4105707108974457 - 8.3212452009320259e-003 - -0.8247640728950501 - <_> - - <_> - - - - <_>9 5 3 13 -1. - <_>10 5 1 13 3. - 0 - 0.0163705106824636 - -0.0248491000384092 - 0.1630914062261581 - <_> - - <_> - - - - <_>6 0 6 10 -1. - <_>6 0 3 5 2. - <_>9 5 3 5 2. - 0 - 0.0536155700683594 - 0.0180340800434351 - -0.4612697064876556 - <_> - - <_> - - - - <_>11 10 3 10 -1. - <_>11 15 3 5 2. - 0 - -1.0296109830960631e-003 - 0.0388243496417999 - -0.0736259818077087 - <_> - - <_> - - - - <_>0 0 4 16 -1. - <_>0 0 2 8 2. - <_>2 8 2 8 2. - 0 - -6.3063339330255985e-003 - 0.1328887045383453 - -0.0558120608329773 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 6.8714357912540436e-003 - 0.0695624426007271 - -0.1138314008712769 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -8.3098851609975100e-004 - 0.1000270023941994 - -0.0857040286064148 - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>10 6 4 6 3. - 0 - 0.0132882101461291 - 0.0426062606275082 - -0.1172951012849808 - <_> - - <_> - - - - <_>0 4 4 16 -1. - <_>0 4 2 8 2. - <_>2 12 2 8 2. - 0 - 0.0170350391417742 - -0.0427578501403332 - 0.2240010946989059 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - 0.0321283005177975 - 0.0152969099581242 - -0.5331755876541138 - <_> - - <_> - - - - <_>5 0 7 6 -1. - <_>5 2 7 2 3. - 0 - 0.0114403301849961 - -0.0589556097984314 - 0.1284248977899551 - <_> - - <_> - - - - <_>11 3 6 10 -1. - <_>14 3 3 5 2. - <_>11 8 3 5 2. - 0 - 2.5446009822189808e-003 - 0.0460377708077431 - -0.1476019024848938 - <_> - - <_> - - - - <_>3 3 6 10 -1. - <_>3 3 3 5 2. - <_>6 8 3 5 2. - 0 - -0.0350623689591885 - -0.3472133874893189 - 0.0240204595029354 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - 4.6889069490134716e-003 - -0.0824602097272873 - 0.0762543827295303 - <_> - - <_> - - - - <_>6 10 3 10 -1. - <_>6 15 3 5 2. - 0 - -1.5067459571582731e-005 - 0.0582239888608456 - -0.1349619030952454 - <_> - - <_> - - - - <_>12 0 4 16 -1. - <_>14 0 2 8 2. - <_>12 8 2 8 2. - 0 - -6.5259548136964440e-004 - 0.0367804504930973 - -0.0708813965320587 - <_> - - <_> - - - - <_>4 0 4 16 -1. - <_>4 0 2 8 2. - <_>6 8 2 8 2. - 0 - 4.5456850784830749e-004 - 0.0598955415189266 - -0.1455395966768265 - <_> - - <_> - - - - <_>5 13 15 7 -1. - <_>10 13 5 7 3. - 0 - -0.1057047024369240 - 0.1376616060733795 - -0.0223370995372534 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>0 8 20 1 2. - 0 - -4.6019242145121098e-003 - -0.3381172120571137 - 0.0225785095244646 - <_> - - <_> - - - - <_>2 13 18 5 -1. - <_>8 13 6 5 3. - 0 - 5.5374279618263245e-003 - -0.0412508696317673 - 0.0947506800293922 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - -2.7569069061428308e-003 - 0.1738086044788361 - -0.0454176403582096 - <_> - - <_> - - - - <_>12 7 6 12 -1. - <_>15 7 3 6 2. - <_>12 13 3 6 2. - 0 - 4.1876680916175246e-004 - -0.0552332587540150 - 0.0583426281809807 - <_> - - <_> - - - - <_>2 7 6 12 -1. - <_>2 7 3 6 2. - <_>5 13 3 6 2. - 0 - -2.4587850202806294e-004 - -0.0893730297684669 - 0.0811587497591972 - <_> - - <_> - - - - <_>9 8 10 6 -1. - <_>14 8 5 3 2. - <_>9 11 5 3 2. - 0 - -0.0749914124608040 - -0.5905706286430359 - 6.7846179008483887e-003 - <_> - - <_> - - - - <_>1 8 10 6 -1. - <_>1 8 5 3 2. - <_>6 11 5 3 2. - 0 - 1.7898950027301908e-003 - 0.0522622205317020 - -0.1588426977396011 - <_> - - <_> - - - - <_>4 13 13 3 -1. - <_>4 14 13 1 3. - 0 - -3.2704160548746586e-003 - 0.1121689975261688 - -0.0624884217977524 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -0.0178036503493786 - -0.4573907852172852 - 0.0166502892971039 - <_> - - <_> - - - - <_>0 8 20 10 -1. - <_>0 13 20 5 2. - 0 - -0.3353793025016785 - -0.8256465196609497 - 7.1495971642434597e-003 - <_> - - <_> - - - - <_>0 13 15 7 -1. - <_>5 13 5 7 3. - 0 - 0.1145182996988297 - -0.0189377199858427 - 0.4107643961906433 - <_> - - <_> - - - - <_>7 11 6 9 -1. - <_>9 11 2 9 3. - 0 - 0.0651410520076752 - 0.0111964000388980 - -0.7622531056404114 - <_> - - <_> - - - - <_>1 11 9 8 -1. - <_>4 11 3 8 3. - 0 - -0.0184424892067909 - 0.1400644034147263 - -0.0515683181583881 - <_> - - <_> - - - - <_>2 13 17 6 -1. - <_>2 15 17 2 3. - 0 - 0.0203626807779074 - 0.0276356805115938 - -0.2262261062860489 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - -5.4255980066955090e-003 - -0.1468822062015533 - 0.0512940697371960 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0146084800362587 - 0.2801474928855896 - -0.0326688997447491 - <_> - - <_> - - - - <_>5 6 4 8 -1. - <_>5 10 4 4 2. - 0 - 1.2462410377338529e-003 - -0.2088883966207504 - 0.0332129597663879 - <_> - - <_> - - - - <_>13 8 4 12 -1. - <_>13 12 4 4 3. - 0 - -0.0514872595667839 - 0.1987269967794418 - -0.0103762596845627 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>4 5 6 6 2. - <_>10 11 6 6 2. - 0 - -0.0141380596905947 - -0.1619375050067902 - 0.0466047897934914 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>10 5 5 3 2. - <_>5 8 5 3 2. - 0 - -8.3356946706771851e-003 - 0.1642955988645554 - -0.0426956303417683 - <_> - - <_> - - - - <_>3 5 14 8 -1. - <_>3 5 7 4 2. - <_>10 9 7 4 2. - 0 - 9.5129031687974930e-003 - 0.0449995696544647 - -0.1597118973731995 - <_> - - <_> - - - - <_>5 6 10 9 -1. - <_>5 9 10 3 3. - 0 - -7.0411129854619503e-003 - 0.7063800096511841 - -9.1527765616774559e-003 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - -4.0637628990225494e-004 - 0.0707477927207947 - -0.1019425019621849 - <_> - - <_> - - - - <_>12 9 8 4 -1. - <_>12 11 8 2 2. - 0 - 4.2529408819973469e-003 - 0.0319374799728394 - -0.1035721972584724 - <_> - - <_> - - - - <_>0 9 8 4 -1. - <_>0 11 8 2 2. - 0 - -1.9221140246372670e-004 - 0.1024146005511284 - -0.0899963676929474 - <_> - - <_> - - - - <_>8 8 8 4 -1. - <_>8 10 8 2 2. - 0 - -1.3621139805763960e-003 - -0.1815731972455978 - 0.0239335205405951 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - -9.3250330537557602e-003 - 0.1588335931301117 - -0.0453171394765377 - <_> - - <_> - - - - <_>8 2 12 17 -1. - <_>12 2 4 17 3. - 0 - -0.3464108109474182 - -0.3590112924575806 - 9.8646534606814384e-003 - <_> - - <_> - - - - <_>0 2 12 17 -1. - <_>4 2 4 17 3. - 0 - 0.0170269608497620 - -0.0597310513257980 - 0.1257600039243698 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>11 9 3 8 2. - 0 - -3.9226989611051977e-004 - 0.0648289769887924 - -0.0920517668128014 - <_> - - <_> - - - - <_>4 0 3 20 -1. - <_>5 0 1 20 3. - 0 - 7.0719248615205288e-003 - 0.0371445007622242 - -0.1916742026805878 - <_> - - <_> - - - - <_>5 14 14 6 -1. - <_>12 14 7 3 2. - <_>5 17 7 3 2. - 0 - 2.9001249931752682e-003 - -0.0626332089304924 - 0.0532489307224751 - <_> - - <_> - - - - <_>0 14 14 6 -1. - <_>0 14 7 3 2. - <_>7 17 7 3 2. - 0 - -0.0241646692156792 - 0.3079889118671417 - -0.0265059005469084 - <_> - - <_> - - - - <_>9 12 10 6 -1. - <_>9 14 10 2 3. - 0 - -0.0755094066262245 - -0.6182727813720703 - 7.8803002834320068e-003 - <_> - - <_> - - - - <_>1 14 5 6 -1. - <_>1 17 5 3 2. - 0 - -2.6605799212120473e-004 - 0.0696196705102921 - -0.0992688685655594 - <_> - - <_> - - - - <_>11 0 3 13 -1. - <_>12 0 1 13 3. - 0 - 2.3389840498566628e-003 - 0.0422696918249130 - -0.1629084944725037 - <_> - - <_> - - - - <_>6 0 3 13 -1. - <_>7 0 1 13 3. - 0 - -1.2518429430201650e-003 - 0.0908148288726807 - -0.0796180069446564 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -1.9330839859321713e-003 - 0.0769560933113098 - -0.0652342513203621 - <_> - - <_> - - - - <_>1 4 18 9 -1. - <_>7 4 6 9 3. - 0 - 0.0238634403795004 - -0.0779856517910957 - 0.0979265719652176 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>11 9 3 8 2. - 0 - -0.0519950799643993 - -0.2067606002092362 - 0.0122645301744342 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>6 9 3 8 2. - 0 - -9.4953901134431362e-004 - 0.0720909312367439 - -0.1245244964957237 - <_> - - <_> - - - - <_>9 7 6 12 -1. - <_>9 7 3 12 2. - 0 - -9.0458765625953674e-003 - -0.1075676977634430 - 0.0260179992765188 - <_> - - <_> - - - - <_>3 3 14 12 -1. - <_>10 3 7 12 2. - 0 - 0.0320191010832787 - -0.0446895211935043 - 0.1671230047941208 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - -7.1996808983385563e-003 - -0.1206556037068367 - 0.0533295497298241 - <_> - - <_> - - - - <_>1 0 8 20 -1. - <_>1 0 4 10 2. - <_>5 10 4 10 2. - 0 - 0.0972478836774826 - -0.0200592800974846 - 0.4132153093814850 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - 1.7411670414730906e-003 - 0.0252652000635862 - -0.1140037998557091 - <_> - - <_> - - - - <_>0 2 10 5 -1. - <_>5 2 5 5 2. - 0 - -0.1569415032863617 - -0.9612188935279846 - 7.4661090038716793e-003 - <_> - - <_> - - - - <_>12 12 8 8 -1. - <_>12 12 4 8 2. - 0 - -0.0205738209187984 - 0.1320753991603851 - -0.0536888092756271 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - 2.0626350305974483e-003 - 0.0378691405057907 - -0.2033375054597855 - <_> - - <_> - - - - <_>15 9 5 10 -1. - <_>15 14 5 5 2. - 0 - 0.1238159984350205 - 2.3662589956074953e-003 - -0.4879466891288757 - <_> - - <_> - - - - <_>0 9 5 10 -1. - <_>0 14 5 5 2. - 0 - 3.1255739741027355e-003 - -0.0644760206341743 - 0.1505323946475983 - <_> - - <_> - - - - <_>9 12 10 6 -1. - <_>9 14 10 2 3. - 0 - 0.0187663603574038 - 0.0126392301172018 - -0.1912184953689575 - <_> - - <_> - - - - <_>1 12 10 6 -1. - <_>1 14 10 2 3. - 0 - -8.6109619587659836e-003 - -0.1191655993461609 - 0.0665471702814102 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 0.0146041102707386 - -0.0219809394329786 - 0.2683242857456207 - <_> - - <_> - - - - <_>6 8 8 9 -1. - <_>6 11 8 3 3. - 0 - 1.8387939780950546e-003 - -0.1150683015584946 - 0.0608405098319054 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - -0.5793070793151856 - -1. - 3.7629920989274979e-003 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1869073957204819 - 6.2871198169887066e-003 - -0.9242666959762573 - <_> - - <_> - - - - <_>7 8 9 12 -1. - <_>7 12 9 4 3. - 0 - 0.0183417499065399 - 0.0175167694687843 - -0.1651940047740936 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - -0.0147765101864934 - 0.2506814002990723 - -0.0261996407061815 - <_> - - <_> - - - - <_>3 8 14 2 -1. - <_>3 9 14 1 2. - 0 - 0.0440323017537594 - 0.0114792799577117 - -0.6466317176818848 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - 3.5362939815968275e-003 - 0.0486700795590878 - -0.1317166984081268 - <_> - - <_> - - - - <_>5 16 10 4 -1. - <_>5 18 10 2 2. - 0 - -4.5765978284180164e-003 - 0.1240120977163315 - -0.0538821704685688 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - 3.0529699288308620e-003 - -0.0525388605892658 - 0.1286004930734634 - <_> - - <_> - - - - <_>12 3 2 17 -1. - <_>12 3 1 17 2. - 0 - -0.0113339396193624 - -0.1673226952552795 - 0.0128906397148967 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 2.7712888550013304e-004 - 0.0657760277390480 - -0.0945739001035690 - <_> - - <_> - - - - <_>7 12 13 2 -1. - <_>7 13 13 1 2. - 0 - 5.4571928922086954e-004 - -0.0597666017711163 - 0.1326590031385422 - <_> - - <_> - - - - <_>3 9 10 6 -1. - <_>3 9 5 3 2. - <_>8 12 5 3 2. - 0 - 6.2958751805126667e-003 - 0.0288547500967979 - -0.2432890981435776 - <_> - - <_> - - - - <_>9 9 6 10 -1. - <_>12 9 3 5 2. - <_>9 14 3 5 2. - 0 - 1.5611880226060748e-003 - -0.0563465394079685 - 0.0806206315755844 - <_> - - <_> - - - - <_>2 6 16 12 -1. - <_>2 6 8 6 2. - <_>10 12 8 6 2. - 0 - 0.1050127968192101 - -0.0140520995482802 - 0.5592792034149170 - <_> - - <_> - - - - <_>13 2 7 6 -1. - <_>13 4 7 2 3. - 0 - 0.0369073003530502 - 0.0154430102556944 - -0.2088145017623901 - <_> - - <_> - - - - <_>3 4 14 4 -1. - <_>3 6 14 2 2. - 0 - -0.0405692495405674 - 0.1585178971290588 - -0.0431761816143990 - <_> - - <_> - - - - <_>7 1 13 2 -1. - <_>7 2 13 1 2. - 0 - -7.2549749165773392e-003 - -0.2610417008399963 - 0.0172429103404284 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 4.5905262231826782e-003 - -0.0384190008044243 - 0.1746480017900467 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -4.2836060747504234e-003 - -0.1200624033808708 - 0.0419176109135151 - <_> - - <_> - - - - <_>2 1 15 6 -1. - <_>7 1 5 6 3. - 0 - -0.1083578020334244 - 0.5492755174636841 - -0.0122555699199438 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 6.4851208589971066e-003 - 0.0449524112045765 - -0.1658394038677216 - <_> - - <_> - - - - <_>0 10 14 3 -1. - <_>0 11 14 1 3. - 0 - -0.0237251296639442 - 0.5715867280960083 - -0.0123615004122257 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0300705190747976 - -0.3060995936393738 - 0.0116954296827316 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -7.9774633049964905e-003 - -0.1818598061800003 - 0.0369257703423500 - <_> - - <_> - - - - <_>9 6 4 14 -1. - <_>11 6 2 7 2. - <_>9 13 2 7 2. - 0 - -0.0172131992876530 - 0.1231793016195297 - -0.0366326794028282 - <_> - - <_> - - - - <_>0 8 19 2 -1. - <_>0 9 19 1 2. - 0 - -1.4119789702817798e-003 - -0.5049908757209778 - 0.0136952102184296 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0299090202897787 - -0.0235354397445917 - 0.1431297957897186 - <_> - - <_> - - - - <_>6 11 6 8 -1. - <_>8 11 2 8 3. - 0 - -0.0116604799404740 - -0.1782228052616119 - 0.0402505993843079 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - -8.9040184393525124e-003 - 0.3556716144084930 - -0.0247831400483847 - <_> - - <_> - - - - <_>7 5 4 11 -1. - <_>9 5 2 11 2. - 0 - -1.1394720058888197e-003 - -0.1426859945058823 - 0.0491028018295765 - <_> - - <_> - - - - <_>9 3 2 13 -1. - <_>9 3 1 13 2. - 0 - 2.9107509180903435e-003 - -0.0544718094170094 - 0.1302589029073715 - <_> - - <_> - - - - <_>0 3 12 6 -1. - <_>0 3 6 3 2. - <_>6 6 6 3 2. - 0 - 0.0176408104598522 - 0.0201840195804834 - -0.4195458889007568 - <_> - - <_> - - - - <_>3 6 14 2 -1. - <_>3 6 7 2 2. - 0 - 0.0500019006431103 - 0.0119759403169155 - -0.5188987851142883 - <_> - - <_> - - - - <_>4 11 6 7 -1. - <_>6 11 2 7 3. - 0 - 2.7523660100996494e-003 - -0.0606284104287624 - 0.1116911992430687 - <_> - - <_> - - - - <_>15 10 5 6 -1. - <_>15 13 5 3 2. - 0 - -0.0317533388733864 - -0.2261199057102203 - 0.0152673898264766 - <_> - - <_> - - - - <_>4 1 12 6 -1. - <_>8 1 4 6 3. - 0 - -0.0128238098695874 - 0.2302713990211487 - -0.0294048003852367 - <_> - - <_> - - - - <_>10 0 4 8 -1. - <_>10 0 2 8 2. - 0 - 5.2626157412305474e-004 - -0.1567780971527100 - 0.0499384813010693 - <_> - - <_> - - - - <_>3 1 12 5 -1. - <_>9 1 6 5 2. - 0 - 0.0127791501581669 - -0.0588518492877483 - 0.1225529983639717 - <_> - - <_> - - - - <_>13 2 7 6 -1. - <_>13 4 7 2 3. - 0 - 0.0776676684617996 - 4.6644411049783230e-003 - -0.5061432123184204 - <_> - - <_> - - - - <_>0 2 7 6 -1. - <_>0 4 7 2 3. - 0 - -5.2286800928413868e-003 - -0.1893980950117111 - 0.0447144284844399 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>14 4 6 3 3. - 0 - 8.4478305652737617e-003 - 0.0391088984906673 - -0.1480915993452072 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>0 4 6 3 3. - 0 - 5.5970861576497555e-003 - 0.0546644702553749 - -0.1469808965921402 - <_> - - <_> - - - - <_>6 0 9 8 -1. - <_>6 4 9 4 2. - 0 - 0.0168829895555973 - -0.0464497394859791 - 0.1412197053432465 - <_> - - <_> - - - - <_>0 5 8 8 -1. - <_>0 5 4 4 2. - <_>4 9 4 4 2. - 0 - -6.1205658130347729e-004 - -0.1390601992607117 - 0.0525868684053421 - <_> - - <_> - - - - <_>11 1 4 12 -1. - <_>11 7 4 6 2. - 0 - -3.6216019652783871e-003 - 0.0533458814024925 - -0.0383616797626019 - <_> - - <_> - - - - <_>4 5 5 6 -1. - <_>4 8 5 3 2. - 0 - -1.4149090275168419e-003 - 0.2008254975080490 - -0.0359853617846966 - <_> - - <_> - - - - <_>7 5 11 8 -1. - <_>7 9 11 4 2. - 0 - 2.4758750805631280e-004 - -0.1820577979087830 - 0.0159153398126364 - <_> - - <_> - - - - <_>4 2 12 5 -1. - <_>8 2 4 5 3. - 0 - 0.1345784068107605 - 9.7890906035900116e-003 - -0.7287970781326294 - <_> - - <_> - - - - <_>10 12 10 8 -1. - <_>10 12 5 8 2. - 0 - 0.0113520100712776 - -0.0355531498789787 - 0.0632222071290016 - <_> - - <_> - - - - <_>0 12 10 8 -1. - <_>5 12 5 8 2. - 0 - -7.9044885933399200e-003 - 0.0907740890979767 - -0.0987964421510696 - <_> - - <_> - - - - <_>15 0 4 7 -1. - <_>15 0 2 7 2. - 0 - 0.0790501683950424 - 4.7087217681109905e-003 - -0.6052936911582947 - <_> - - <_> - - - - <_>1 0 4 7 -1. - <_>3 0 2 7 2. - 0 - 8.9114397997036576e-004 - -0.0902161076664925 - 0.0842938423156738 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>10 2 10 2 2. - <_>0 4 10 2 2. - 0 - 4.1404040530323982e-003 - 0.0603141710162163 - -0.1217193976044655 - <_> - - <_> - - - - <_>1 0 12 9 -1. - <_>1 3 12 3 3. - 0 - -0.0926830917596817 - 0.6785330176353455 - -0.0106151700019836 - <_> - - <_> - - - - <_>10 14 9 4 -1. - <_>10 16 9 2 2. - 0 - 0.0428723804652691 - 7.3283850215375423e-003 - -0.5232148766517639 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0306525602936745 - -0.6557834148406982 - 9.7402445971965790e-003 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0750543996691704 - -0.0116605199873447 - 0.3755913972854614 - <_> - - <_> - - - - <_>1 6 11 4 -1. - <_>1 8 11 2 2. - 0 - 0.0930331125855446 - 7.4912221170961857e-003 - -0.8174855113029480 - <_> - - <_> - - - - <_>4 8 12 4 -1. - <_>4 10 12 2 2. - 0 - -4.0522208437323570e-003 - 0.3643113076686859 - -0.0180158894509077 - <_> - - <_> - - - - <_>4 4 3 10 -1. - <_>4 9 3 5 2. - 0 - 1.0411429684609175e-003 - -0.1962372958660126 - 0.0343369692564011 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - 0.0407908000051975 - 0.0174648594111204 - -0.3849726915359497 - <_> - - <_> - - - - <_>3 9 3 10 -1. - <_>3 14 3 5 2. - 0 - -1.8009789346251637e-004 - 0.0521576218307018 - -0.1203818991780281 - <_> - - <_> - - - - <_>18 3 2 17 -1. - <_>18 3 1 17 2. - 0 - -0.0354963801801205 - 0.2137162983417511 - -9.4601595774292946e-003 - <_> - - <_> - - - - <_>0 3 13 2 -1. - <_>0 4 13 1 2. - 0 - -1.2321450049057603e-003 - -0.1299993991851807 - 0.0487525314092636 - <_> - - <_> - - - - <_>18 3 2 17 -1. - <_>18 3 1 17 2. - 0 - -0.0663264468312263 - -0.5079520940780640 - 5.8305650018155575e-003 - <_> - - <_> - - - - <_>0 3 2 17 -1. - <_>1 3 1 17 2. - 0 - -2.7689670678228140e-003 - 0.1259692013263702 - -0.0557947792112827 - <_> - - <_> - - - - <_>2 0 18 6 -1. - <_>2 2 18 2 3. - 0 - 3.9610429666936398e-003 - -0.0844717398285866 - 0.0620925500988960 - <_> - - <_> - - - - <_>6 5 4 13 -1. - <_>8 5 2 13 2. - 0 - -7.5474479235708714e-003 - -0.2099227011203766 - 0.0314199104905128 - <_> - - <_> - - - - <_>7 3 12 16 -1. - <_>7 3 6 16 2. - 0 - -3.2456999178975821e-003 - 0.0562236011028290 - -0.0367749892175198 - <_> - - <_> - - - - <_>0 12 16 2 -1. - <_>8 12 8 2 2. - 0 - -5.0519341602921486e-003 - 0.0941366702318192 - -0.0808937773108482 - <_> - - <_> - - - - <_>11 6 8 12 -1. - <_>11 10 8 4 3. - 0 - 0.0213759597390890 - 0.0495295897126198 - -0.0479891486465931 - <_> - - <_> - - - - <_>0 12 6 7 -1. - <_>3 12 3 7 2. - 0 - -0.1672461926937103 - -0.9355136752128601 - 7.4155409820377827e-003 - <_> - - <_> - - - - <_>12 0 8 12 -1. - <_>16 0 4 6 2. - <_>12 6 4 6 2. - 0 - 6.4946119673550129e-003 - -0.0367358215153217 - 0.1095504015684128 - <_> - - <_> - - - - <_>5 6 10 10 -1. - <_>5 6 5 5 2. - <_>10 11 5 5 2. - 0 - -5.5810972116887569e-003 - -0.1276447027921677 - 0.0586917996406555 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -7.0414197398349643e-004 - 0.0393615588545799 - -0.0748447328805923 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -7.3160971514880657e-003 - 0.2176717966794968 - -0.0387031994760036 - <_> - - <_> - - - - <_>10 2 2 18 -1. - <_>10 11 2 9 2. - 0 - -5.4676099680364132e-003 - -0.0539733506739140 - 0.0550328008830547 - <_> - - <_> - - - - <_>4 9 12 8 -1. - <_>4 9 6 4 2. - <_>10 13 6 4 2. - 0 - 4.3309312313795090e-003 - 0.0571047104895115 - -0.1260392963886261 - <_> - - <_> - - - - <_>18 0 2 13 -1. - <_>18 0 1 13 2. - 0 - 2.8189779259264469e-003 - -0.0397292487323284 - 0.0927015915513039 - <_> - - <_> - - - - <_>2 8 12 4 -1. - <_>6 8 4 4 3. - 0 - -4.7759278677403927e-003 - -0.1285641044378281 - 0.0612166896462440 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - 0.0634246319532394 - -4.8541268333792686e-003 - 0.5988345146179199 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -3.5035109613090754e-003 - 0.1019155010581017 - -0.0988012775778770 - <_> - - <_> - - - - <_>18 0 2 13 -1. - <_>18 0 1 13 2. - 0 - -4.1303951293230057e-003 - 0.1089038029313088 - -0.0382259190082550 - <_> - - <_> - - - - <_>6 3 2 17 -1. - <_>7 3 1 17 2. - 0 - -2.2271529305726290e-003 - -0.1350196003913879 - 0.0513166114687920 - <_> - - <_> - - - - <_>11 9 4 8 -1. - <_>11 9 2 8 2. - 0 - -1.0730850044637918e-003 - 0.0515267215669155 - -0.0741710364818573 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>7 9 2 8 2. - 0 - -7.7973678708076477e-004 - 0.0708575770258904 - -0.1120484992861748 - <_> - - <_> - - - - <_>18 0 2 13 -1. - <_>18 0 1 13 2. - 0 - -0.0557013489305973 - 0.3983623087406158 - -5.2183559164404869e-003 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - 0.0106082297861576 - -0.0323237888514996 - 0.2195097059011459 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 6 10 2 2. - 0 - -9.8208207637071609e-003 - -0.1650767028331757 - 0.0424444116652012 - <_> - - <_> - - - - <_>0 4 13 3 -1. - <_>0 5 13 1 3. - 0 - 1.4465330168604851e-003 - -0.0783926695585251 - 0.0813937336206436 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - -4.4582188129425049e-003 - -0.0923145785927773 - 0.0387341715395451 - <_> - - <_> - - - - <_>2 10 8 6 -1. - <_>2 12 8 2 3. - 0 - 5.6474958546459675e-003 - 0.0396512895822525 - -0.1749563962221146 - <_> - - <_> - - - - <_>5 4 14 8 -1. - <_>12 4 7 4 2. - <_>5 8 7 4 2. - 0 - 0.0420979186892509 - -0.0118507398292422 - 0.1276271045207977 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 5 6 3 2. - <_>10 8 6 3 2. - 0 - 6.9958101958036423e-003 - -0.0476687401533127 - 0.1420485973358154 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>10 10 4 4 2. - <_>6 14 4 4 2. - 0 - 0.0386867783963680 - 0.0135827800258994 - -0.4731589853763580 - -1.3290590047836304 - 30 - -1 - <_> - - - <_> - - <_> - - - - <_>5 5 9 5 -1. - <_>8 5 3 5 3. - 0 - 0.0350093208253384 - -0.2702023088932037 - 0.2042925059795380 - <_> - - <_> - - - - <_>6 4 8 6 -1. - <_>6 6 8 2 3. - 0 - -0.0367805399000645 - 0.1525488942861557 - -0.2674187123775482 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - 5.6993318721652031e-003 - 0.1680305004119873 - -0.2306824028491974 - <_> - - <_> - - - - <_>10 1 10 4 -1. - <_>10 1 5 4 2. - 0 - 0.0756016373634338 - -0.1527170985937119 - 0.1951083987951279 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0172483902424574 - 0.2937920093536377 - -0.0988695323467255 - <_> - - <_> - - - - <_>15 0 3 18 -1. - <_>15 6 3 6 3. - 0 - 2.8574180323630571e-003 - -0.1979047060012817 - 0.0833617374300957 - <_> - - <_> - - - - <_>1 2 9 15 -1. - <_>4 2 3 15 3. - 0 - 0.0310292690992355 - -0.2158230990171433 - 0.1169513016939163 - <_> - - <_> - - - - <_>7 6 8 4 -1. - <_>7 6 4 4 2. - 0 - -7.1099428460001945e-003 - -0.2520681917667389 - 0.0361165106296539 - <_> - - <_> - - - - <_>5 5 8 5 -1. - <_>9 5 4 5 2. - 0 - 4.5894421637058258e-003 - -0.2970761954784393 - 0.1074396967887878 - <_> - - <_> - - - - <_>4 2 15 2 -1. - <_>4 3 15 1 2. - 0 - -7.0509258657693863e-003 - -0.4563502967357636 - 0.0418647788465023 - <_> - - <_> - - - - <_>1 17 13 3 -1. - <_>1 18 13 1 3. - 0 - 6.6762260394170880e-004 - -0.1743271946907044 - 0.1230648979544640 - <_> - - <_> - - - - <_>6 6 8 8 -1. - <_>6 10 8 4 2. - 0 - -3.6481819115579128e-003 - -0.4034762978553772 - 0.0491147711873055 - <_> - - <_> - - - - <_>4 9 5 9 -1. - <_>4 12 5 3 3. - 0 - 0.0221942402422428 - 0.0612415298819542 - -0.3455736041069031 - <_> - - <_> - - - - <_>13 9 4 10 -1. - <_>13 14 4 5 2. - 0 - -1.1259679449722171e-003 - 0.0520137697458267 - -0.2846164107322693 - <_> - - <_> - - - - <_>2 9 12 10 -1. - <_>2 9 6 5 2. - <_>8 14 6 5 2. - 0 - -0.0159137398004532 - -0.2766785025596619 - 0.0758520215749741 - <_> - - <_> - - - - <_>3 7 15 3 -1. - <_>8 7 5 3 3. - 0 - 5.7643437758088112e-003 - -0.2718209028244019 - 0.0667906627058983 - <_> - - <_> - - - - <_>1 0 8 12 -1. - <_>1 0 4 6 2. - <_>5 6 4 6 2. - 0 - -0.0421964712440968 - 0.1578608006238937 - -0.1055767983198166 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - -0.0186246801167727 - -0.2550429999828339 - 0.0475868694484234 - <_> - - <_> - - - - <_>5 9 5 10 -1. - <_>5 14 5 5 2. - 0 - -9.5020089065656066e-004 - 0.0499038398265839 - -0.2906855046749115 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - 0.0208232402801514 - 0.0268251392990351 - -0.2055850028991699 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - -0.0131184598430991 - -0.2239520996809006 - 0.0690134987235069 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - -8.6902417242527008e-003 - 0.1949318945407867 - -0.0378506891429424 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0455898195505142 - 0.0251703895628452 - -0.5776666998863220 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - -0.0484584905207157 - 0.0951915532350540 - -0.1432019025087357 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0727611035108566 - -0.6596741080284119 - 0.0211752392351627 - <_> - - <_> - - - - <_>9 3 10 12 -1. - <_>9 9 10 6 2. - 0 - -0.0538403689861298 - -0.3642677962779999 - 0.0248279292136431 - <_> - - <_> - - - - <_>1 0 7 6 -1. - <_>1 2 7 2 3. - 0 - 2.3190240608528256e-004 - -0.1476769000291824 - 0.0837640389800072 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -3.4166979603469372e-003 - -0.1786570996046066 - 0.0607210882008076 - <_> - - <_> - - - - <_>5 9 10 8 -1. - <_>5 9 5 4 2. - <_>10 13 5 4 2. - 0 - 0.0497442185878754 - 0.0189181994646788 - -0.6662986874580383 - <_> - - <_> - - - - <_>11 5 5 9 -1. - <_>11 8 5 3 3. - 0 - 0.0668134391307831 - -0.0282865595072508 - 0.1740152984857559 - <_> - - <_> - - - - <_>6 3 8 8 -1. - <_>6 3 4 4 2. - <_>10 7 4 4 2. - 0 - 0.0314455591142178 - 0.0525560602545738 - -0.3088454902172089 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0395936183631420 - -0.0648752525448799 - 0.2570675909519196 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - 0.0186633802950382 - -0.0595684312283993 - 0.2153259962797165 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 0.0401505716145039 - 0.0195891298353672 - -0.3539215028285980 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -0.0182636901736259 - -0.3122403919696808 - 0.0418453812599182 - <_> - - <_> - - - - <_>11 15 9 4 -1. - <_>11 17 9 2 2. - 0 - -0.0225799605250359 - -0.1489870995283127 - 0.0177571401000023 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - 0.0852817595005035 - 0.0248667597770691 - -0.5219795107841492 - <_> - - <_> - - - - <_>12 15 8 4 -1. - <_>12 17 8 2 2. - 0 - 4.9491669051349163e-003 - 0.0404333397746086 - -0.1123061031103134 - <_> - - <_> - - - - <_>0 15 8 4 -1. - <_>0 17 8 2 2. - 0 - -0.0274195205420256 - -0.4111996889114380 - 0.0305490791797638 - <_> - - <_> - - - - <_>0 11 20 3 -1. - <_>0 12 20 1 3. - 0 - 0.0382776409387589 - 0.0122112501412630 - -0.8186082839965820 - <_> - - <_> - - - - <_>0 0 3 16 -1. - <_>1 0 1 16 3. - 0 - -0.0216322802007198 - 0.2203048020601273 - -0.0554591305553913 - <_> - - <_> - - - - <_>3 2 14 11 -1. - <_>3 2 7 11 2. - 0 - -0.2452269941568375 - 0.4101333022117615 - -0.0270001497119665 - <_> - - <_> - - - - <_>4 2 8 6 -1. - <_>4 5 8 3 2. - 0 - 0.0393146313726902 - -0.0312425605952740 - 0.3671418130397797 - <_> - - <_> - - - - <_>3 0 15 6 -1. - <_>3 2 15 2 3. - 0 - 0.0136303603649139 - -0.1390230059623718 - 0.0959462374448776 - <_> - - <_> - - - - <_>1 6 13 3 -1. - <_>1 7 13 1 3. - 0 - -6.7042862065136433e-003 - 0.0787720009684563 - -0.1452272981405258 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - 0.0233128108084202 - 0.0228157900273800 - -0.4499056041240692 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - 0.0306210294365883 - -0.0697812736034393 - 0.1542250961065292 - <_> - - <_> - - - - <_>15 14 5 6 -1. - <_>15 17 5 3 2. - 0 - 0.0520471893250942 - -0.0177202001214027 - 0.4439741075038910 - <_> - - <_> - - - - <_>3 4 13 3 -1. - <_>3 5 13 1 3. - 0 - 0.0208505392074585 - -0.0523090511560440 - 0.2060880064964294 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 8.2694664597511292e-003 - 0.0771328210830688 - -0.1947413980960846 - <_> - - <_> - - - - <_>0 8 7 6 -1. - <_>0 10 7 2 3. - 0 - 0.0557062886655331 - 0.0337151512503624 - -0.3578340113162994 - <_> - - <_> - - - - <_>2 6 16 6 -1. - <_>10 6 8 3 2. - <_>2 9 8 3 2. - 0 - -0.0254069194197655 - -0.2142499983310700 - 0.0538135990500450 - <_> - - <_> - - - - <_>2 7 3 10 -1. - <_>2 12 3 5 2. - 0 - 3.7127479445189238e-003 - 0.0574782900512218 - -0.1773401051759720 - <_> - - <_> - - - - <_>15 14 5 6 -1. - <_>15 17 5 3 2. - 0 - 0.0983990877866745 - -3.5304271150380373e-003 - 0.7708644866943359 - <_> - - <_> - - - - <_>5 7 10 6 -1. - <_>5 7 5 3 2. - <_>10 10 5 3 2. - 0 - -7.0944158360362053e-003 - -0.1378269046545029 - 0.0702905729413033 - <_> - - <_> - - - - <_>15 14 5 6 -1. - <_>15 17 5 3 2. - 0 - -0.0782130733132362 - 0.4684407114982605 - -4.8642340116202831e-003 - <_> - - <_> - - - - <_>0 14 5 6 -1. - <_>0 17 5 3 2. - 0 - 0.0304070208221674 - -0.0284894797950983 - 0.3415730893611908 - <_> - - <_> - - - - <_>10 5 9 15 -1. - <_>10 10 9 5 3. - 0 - 1.7667879583314061e-003 - -0.1461423039436340 - 0.0235729701817036 - <_> - - <_> - - - - <_>5 7 9 5 -1. - <_>8 7 3 5 3. - 0 - 0.0719910115003586 - -0.0350751802325249 - 0.2886571884155273 - <_> - - <_> - - - - <_>13 1 7 6 -1. - <_>13 3 7 2 3. - 0 - 0.0500208698213100 - 0.0240963604301214 - -0.3389055132865906 - <_> - - <_> - - - - <_>3 4 13 3 -1. - <_>3 5 13 1 3. - 0 - -0.0179982706904411 - 0.2919169068336487 - -0.0412591695785522 - <_> - - <_> - - - - <_>13 1 7 6 -1. - <_>13 3 7 2 3. - 0 - -8.6585222743451595e-004 - -0.1224825978279114 - 0.0596901215612888 - <_> - - <_> - - - - <_>0 1 7 6 -1. - <_>0 3 7 2 3. - 0 - 0.0574704706668854 - 0.0215417407453060 - -0.4750837087631226 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -0.0165178105235100 - 0.1659874022006989 - -0.0396569706499577 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 0.0217030309140682 - -0.0383272282779217 - 0.3347625136375427 - <_> - - <_> - - - - <_>10 1 10 18 -1. - <_>10 1 5 18 2. - 0 - -6.1237839981913567e-003 - -0.1434268951416016 - 0.0263133291155100 - <_> - - <_> - - - - <_>0 1 10 18 -1. - <_>5 1 5 18 2. - 0 - -0.0108935097232461 - -0.7946888208389282 - 0.0124034797772765 - <_> - - <_> - - - - <_>2 1 18 5 -1. - <_>8 1 6 5 3. - 0 - -0.0385897383093834 - 0.3376350104808807 - -0.0187479406595230 - <_> - - <_> - - - - <_>4 5 4 8 -1. - <_>4 9 4 4 2. - 0 - 1.3378040166571736e-003 - -0.3628888130187988 - 0.0294601898640394 - <_> - - <_> - - - - <_>9 3 3 10 -1. - <_>9 8 3 5 2. - 0 - 2.7590300305746496e-004 - 0.0764191895723343 - -0.0869536325335503 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 7.9552736133337021e-003 - 0.0526961795985699 - -0.1920077055692673 - <_> - - <_> - - - - <_>9 11 9 5 -1. - <_>12 11 3 5 3. - 0 - -0.0121746296063066 - 0.0840130373835564 - -0.0217400901019573 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>3 11 7 2 2. - <_>10 13 7 2 2. - 0 - -0.0163610707968473 - -0.2549375891685486 - 0.0385825894773006 - <_> - - <_> - - - - <_>10 5 8 4 -1. - <_>10 5 4 4 2. - 0 - -0.0349921286106110 - 0.2576051056385040 - -0.0157270804047585 - <_> - - <_> - - - - <_>8 3 3 13 -1. - <_>9 3 1 13 3. - 0 - -7.6113208197057247e-003 - 0.1911467015743256 - -0.0529807806015015 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0501107499003410 - 0.0242652501910925 - -0.5150918960571289 - <_> - - <_> - - - - <_>6 0 2 14 -1. - <_>7 0 1 14 2. - 0 - -9.1486647725105286e-003 - -0.3317044079303742 - 0.0267744399607182 - <_> - - <_> - - - - <_>10 5 8 4 -1. - <_>10 5 4 4 2. - 0 - 0.0832932591438293 - 4.2860410176217556e-003 - -0.3038155138492584 - <_> - - <_> - - - - <_>0 0 8 4 -1. - <_>4 0 4 4 2. - 0 - -0.0193343590945005 - 0.3891637921333313 - -0.0249083098024130 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>14 0 3 13 2. - 0 - -0.0720610469579697 - 0.4118429124355316 - -0.0256870593875647 - <_> - - <_> - - - - <_>0 1 6 11 -1. - <_>3 1 3 11 2. - 0 - 0.0225063599646091 - -0.2119673937559128 - 0.0538250207901001 - <_> - - <_> - - - - <_>9 11 9 5 -1. - <_>12 11 3 5 3. - 0 - 0.0557724013924599 - -0.0231041405349970 - 0.0915782526135445 - <_> - - <_> - - - - <_>2 11 9 5 -1. - <_>5 11 3 5 3. - 0 - -0.0262103900313377 - 0.3350940942764282 - -0.0342258103191853 - <_> - - <_> - - - - <_>7 12 6 7 -1. - <_>9 12 2 7 3. - 0 - -0.0460853315889835 - -0.5300675034523010 - 0.0190830808132887 - <_> - - <_> - - - - <_>0 0 4 15 -1. - <_>2 0 2 15 2. - 0 - -0.0329982601106167 - 0.3070138990879059 - -0.0316380597651005 - <_> - - <_> - - - - <_>12 2 2 15 -1. - <_>12 2 1 15 2. - 0 - 0.0106776598840952 - 0.0381867811083794 - -0.2025669962167740 - <_> - - <_> - - - - <_>6 2 2 15 -1. - <_>7 2 1 15 2. - 0 - 3.7972650025039911e-003 - 0.0789514333009720 - -0.1304014027118683 - <_> - - <_> - - - - <_>6 0 13 2 -1. - <_>6 1 13 1 2. - 0 - -2.4965009652078152e-003 - -0.1979921013116837 - 0.0307431295514107 - <_> - - <_> - - - - <_>0 12 13 3 -1. - <_>0 13 13 1 3. - 0 - 0.0142031395807862 - -0.0454434603452683 - 0.2180640995502472 - <_> - - <_> - - - - <_>10 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 7.7012999099679291e-005 - -0.2585828900337219 - 0.0425083599984646 - <_> - - <_> - - - - <_>5 3 4 7 -1. - <_>7 3 2 7 2. - 0 - 2.3724909406155348e-003 - -0.1581588983535767 - 0.0614940710365772 - <_> - - <_> - - - - <_>10 5 8 4 -1. - <_>10 5 4 4 2. - 0 - -0.0840860828757286 - -0.9370452761650085 - 8.3687662845477462e-004 - <_> - - <_> - - - - <_>2 5 8 4 -1. - <_>6 5 4 4 2. - 0 - -0.0228922907263041 - 0.4296053946018219 - -0.0272158198058605 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - -0.1123896986246109 - -0.2060728967189789 - 0.0177988000214100 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.0681750327348709 - -0.4201978147029877 - 0.0250510908663273 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -0.0106201898306608 - -0.2187023013830185 - 0.0242314208298922 - <_> - - <_> - - - - <_>8 0 4 15 -1. - <_>8 5 4 5 3. - 0 - 2.9390859417617321e-003 - 0.0884701833128929 - -0.1195804029703140 - <_> - - <_> - - - - <_>5 0 11 8 -1. - <_>5 4 11 4 2. - 0 - 0.0567662604153156 - -0.0588203296065331 - 0.1784580051898956 - <_> - - <_> - - - - <_>2 3 8 14 -1. - <_>6 3 4 14 2. - 0 - -7.3099520523101091e-004 - 0.3012208044528961 - -0.0348908305168152 - <_> - - <_> - - - - <_>15 1 5 6 -1. - <_>15 4 5 3 2. - 0 - 0.0341749787330627 - 0.0196141507476568 - -0.1741998046636581 - <_> - - <_> - - - - <_>0 1 5 6 -1. - <_>0 4 5 3 2. - 0 - 0.0331520996987820 - 0.0293444693088531 - -0.3516373932361603 - <_> - - <_> - - - - <_>8 4 4 7 -1. - <_>8 4 2 7 2. - 0 - 0.0171585902571678 - -0.0477440096437931 - 0.2069031000137329 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>10 6 5 3 2. - 0 - -0.0332703106105328 - -0.3681805133819580 - 0.0305478796362877 - <_> - - <_> - - - - <_>14 0 2 19 -1. - <_>14 0 1 19 2. - 0 - -7.5228337664157152e-004 - -0.1006821021437645 - 0.0374460592865944 - <_> - - <_> - - - - <_>4 0 2 19 -1. - <_>5 0 1 19 2. - 0 - -5.7363631203770638e-003 - -0.2970463931560516 - 0.0308898091316223 - <_> - - <_> - - - - <_>11 13 6 7 -1. - <_>13 13 2 7 3. - 0 - 0.0342036783695221 - 0.0326943881809711 - -0.1938641071319580 - <_> - - <_> - - - - <_>1 8 18 3 -1. - <_>7 8 6 3 3. - 0 - 0.1175967007875443 - 0.0280105099081993 - -0.3446972966194153 - <_> - - <_> - - - - <_>8 7 5 8 -1. - <_>8 11 5 4 2. - 0 - 0.0356847606599331 - 0.0146120497956872 - -0.3232390880584717 - <_> - - <_> - - - - <_>6 2 8 16 -1. - <_>6 10 8 8 2. - 0 - -0.1456248015165329 - -0.4370346963405609 - 0.0206975191831589 - <_> - - <_> - - - - <_>8 3 6 9 -1. - <_>8 6 6 3 3. - 0 - 8.0413380637764931e-003 - 0.0184405501931906 - -0.3227277100086212 - <_> - - <_> - - - - <_>2 16 7 4 -1. - <_>2 18 7 2 2. - 0 - 5.3446288220584393e-003 - 0.0505033992230892 - -0.1842854022979736 - <_> - - <_> - - - - <_>8 7 7 4 -1. - <_>8 9 7 2 2. - 0 - 0.0864732265472412 - 6.2484769150614738e-003 - -0.9361289739608765 - <_> - - <_> - - - - <_>7 4 5 12 -1. - <_>7 8 5 4 3. - 0 - 0.0661687105894089 - -0.0598683916032314 - 0.1581059992313385 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 0.0289789903908968 - 0.0288443397730589 - -0.2826991975307465 - <_> - - <_> - - - - <_>3 6 14 4 -1. - <_>3 6 7 2 2. - <_>10 8 7 2 2. - 0 - 0.0186365190893412 - -0.0517092905938625 - 0.1777745932340622 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - -0.0268817692995071 - 0.0736350268125534 - -0.0362292192876339 - <_> - - <_> - - - - <_>7 4 6 10 -1. - <_>7 4 3 5 2. - <_>10 9 3 5 2. - 0 - -0.0136960195377469 - 0.1821562945842743 - -0.0598808787763119 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -4.1931979358196259e-003 - -0.0933217927813530 - 0.0279010701924562 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - 0.0227842200547457 - 0.0306313298642635 - -0.2853193879127502 - <_> - - <_> - - - - <_>13 0 3 15 -1. - <_>14 0 1 15 3. - 0 - -8.3819748833775520e-003 - -0.2325166016817093 - 0.0508014410734177 - <_> - - <_> - - - - <_>0 14 14 3 -1. - <_>0 15 14 1 3. - 0 - -6.4928620122373104e-003 - 0.1106083020567894 - -0.0832810103893280 - <_> - - <_> - - - - <_>1 4 18 15 -1. - <_>1 9 18 5 3. - 0 - 0.0558668486773968 - 0.2343903928995132 - -0.0451917797327042 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -0.0109267104417086 - 0.2053284049034119 - -0.0507759191095829 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 0.0175153799355030 - 0.0367284491658211 - -0.3063859045505524 - <_> - - <_> - - - - <_>4 0 3 14 -1. - <_>5 0 1 14 3. - 0 - 0.0145439803600311 - 0.0447844900190830 - -0.2075784057378769 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - 1.7274370184168220e-003 - 0.0237066000699997 - -0.1863936930894852 - <_> - - <_> - - - - <_>1 15 18 4 -1. - <_>1 15 9 2 2. - <_>10 17 9 2 2. - 0 - 0.0201604999601841 - 0.0417446605861187 - -0.2194374948740006 - <_> - - <_> - - - - <_>10 13 8 6 -1. - <_>10 15 8 2 3. - 0 - -0.0557322315871716 - -0.3766668140888214 - 7.3045571334660053e-003 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -4.2138090357184410e-003 - 0.1131426021456718 - -0.0844519287347794 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - -0.0571134984493256 - -0.4190346002578735 - 4.2158551514148712e-003 - <_> - - <_> - - - - <_>1 13 7 6 -1. - <_>1 15 7 2 3. - 0 - -0.0333851613104343 - -0.3900786042213440 - 0.0252909697592258 - <_> - - <_> - - - - <_>8 0 10 18 -1. - <_>13 0 5 9 2. - <_>8 9 5 9 2. - 0 - -8.5305999964475632e-003 - 0.0535723790526390 - -0.1223846003413200 - <_> - - <_> - - - - <_>0 3 18 3 -1. - <_>6 3 6 3 3. - 0 - -0.0151448901742697 - 0.4574376046657562 - -0.0250029992312193 - <_> - - <_> - - - - <_>10 4 10 6 -1. - <_>15 4 5 3 2. - <_>10 7 5 3 2. - 0 - 7.5857941992580891e-003 - 0.0262685399502516 - -0.0988903194665909 - <_> - - <_> - - - - <_>2 8 16 4 -1. - <_>10 8 8 4 2. - 0 - -0.0643474683165550 - 0.2260705977678299 - -0.0418215803802013 - <_> - - <_> - - - - <_>4 4 12 12 -1. - <_>10 4 6 6 2. - <_>4 10 6 6 2. - 0 - 0.0657721832394600 - 0.0241479594260454 - -0.4022777974605560 - <_> - - <_> - - - - <_>1 0 18 3 -1. - <_>10 0 9 3 2. - 0 - -0.1049693003296852 - -0.4634326100349426 - 0.0191341098397970 - <_> - - <_> - - - - <_>11 4 4 10 -1. - <_>11 9 4 5 2. - 0 - 0.0963203907012939 - 8.7147848680615425e-003 - -0.3526932895183563 - <_> - - <_> - - - - <_>2 4 5 15 -1. - <_>2 9 5 5 3. - 0 - 0.0166510697454214 - -0.2384241074323654 - 0.0389286614954472 - <_> - - <_> - - - - <_>17 6 2 14 -1. - <_>17 13 2 7 2. - 0 - 0.0588299185037613 - -0.0165381003171206 - 0.3346559107303619 - <_> - - <_> - - - - <_>1 6 2 14 -1. - <_>1 13 2 7 2. - 0 - 0.0524111986160278 - -0.0196889191865921 - 0.4696607887744904 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - 1.2325269635766745e-003 - -0.1205618977546692 - 0.0505635291337967 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -0.0245309490710497 - -0.3916805982589722 - 0.0231086201965809 - <_> - - <_> - - - - <_>2 10 18 3 -1. - <_>2 11 18 1 3. - 0 - 0.0355076901614666 - 0.0204993393272161 - -0.3623383045196533 - <_> - - <_> - - - - <_>0 2 7 4 -1. - <_>0 4 7 2 2. - 0 - -0.0152827398851514 - -0.2460412979125977 - 0.0347499996423721 - <_> - - <_> - - - - <_>2 0 16 6 -1. - <_>2 2 16 2 3. - 0 - 0.0604664497077465 - -0.0550717487931252 - 0.2042866051197052 - <_> - - <_> - - - - <_>2 17 15 3 -1. - <_>7 17 5 3 3. - 0 - 0.0658098310232162 - -0.0714660808444023 - 0.1200297027826309 - <_> - - <_> - - - - <_>12 13 6 7 -1. - <_>12 13 3 7 2. - 0 - -0.0795436725020409 - 0.4904421865940094 - -7.8059309162199497e-003 - <_> - - <_> - - - - <_>2 13 6 7 -1. - <_>5 13 3 7 2. - 0 - 0.0710572004318237 - 0.0442194305360317 - -0.2107701003551483 - <_> - - <_> - - - - <_>14 2 2 13 -1. - <_>14 2 1 13 2. - 0 - 1.2412209762260318e-003 - 0.0997598469257355 - -0.0740651413798332 - <_> - - <_> - - - - <_>7 12 4 8 -1. - <_>7 16 4 4 2. - 0 - 0.0439005605876446 - 0.0202453397214413 - -0.4780013859272003 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 0.1381482928991318 - -0.0341697297990322 - 0.2066240012645721 - <_> - - <_> - - - - <_>5 15 6 5 -1. - <_>8 15 3 5 2. - 0 - 0.0640267133712769 - 0.0173969306051731 - -0.5774987936019898 - <_> - - <_> - - - - <_>14 2 2 13 -1. - <_>14 2 1 13 2. - 0 - -0.0124567700549960 - -0.1671086996793747 - 0.0121063804253936 - <_> - - <_> - - - - <_>4 2 2 13 -1. - <_>5 2 1 13 2. - 0 - 0.0371836088597775 - -0.0190242994576693 - 0.4447616934776306 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - -0.0349052511155605 - -0.1464806050062180 - 0.0208957791328430 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - 0.0616895593702793 - 0.0124286497011781 - -0.7173764109611511 - <_> - - <_> - - - - <_>13 11 7 4 -1. - <_>13 13 7 2 2. - 0 - -0.0273584891110659 - -0.2431146949529648 - 0.0261387303471565 - <_> - - <_> - - - - <_>0 10 13 3 -1. - <_>0 11 13 1 3. - 0 - 6.3740741461515427e-003 - -0.0825930163264275 - 0.1135658025741577 - <_> - - <_> - - - - <_>6 7 9 12 -1. - <_>6 11 9 4 3. - 0 - -0.1029983982443810 - 0.4539861083030701 - -0.0163155291229486 - <_> - - <_> - - - - <_>2 2 14 4 -1. - <_>2 2 7 2 2. - <_>9 4 7 2 2. - 0 - -0.0146950203925371 - -0.1805031001567841 - 0.0480617806315422 - <_> - - <_> - - - - <_>10 0 2 13 -1. - <_>10 0 1 13 2. - 0 - 6.0288330132607371e-005 - -0.0989745035767555 - 0.0381056703627110 - <_> - - <_> - - - - <_>8 0 2 13 -1. - <_>9 0 1 13 2. - 0 - -0.0137636503204703 - 0.4568940103054047 - -0.0208085998892784 - <_> - - <_> - - - - <_>13 11 7 4 -1. - <_>13 13 7 2 2. - 0 - 5.1598600111901760e-003 - 0.0284798201173544 - -0.1977865993976593 - <_> - - <_> - - - - <_>6 11 7 6 -1. - <_>6 13 7 2 3. - 0 - 6.6321617923676968e-003 - -0.0615603588521481 - 0.1404590010643005 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -0.0110735902562737 - 0.1127232983708382 - -0.0384230390191078 - <_> - - <_> - - - - <_>0 11 7 4 -1. - <_>0 13 7 2 2. - 0 - 7.3836948722600937e-003 - 0.0245752800256014 - -0.3399445116519928 - <_> - - <_> - - - - <_>4 12 12 6 -1. - <_>8 12 4 6 3. - 0 - -0.0192776899784803 - 0.1573224961757660 - -0.0583822205662727 - <_> - - <_> - - - - <_>5 6 6 10 -1. - <_>8 6 3 10 2. - 0 - -0.0262091998010874 - -0.3257543146610260 - 0.0352961495518684 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - 0.0138720795512199 - 0.0275046899914742 - -0.2051005065441132 - <_> - - <_> - - - - <_>2 2 14 6 -1. - <_>2 2 7 3 2. - <_>9 5 7 3 2. - 0 - 2.5171930901706219e-003 - 0.0698056370019913 - -0.1151866018772125 - <_> - - <_> - - - - <_>5 0 10 7 -1. - <_>5 0 5 7 2. - 0 - 0.0677532926201820 - -0.0372681394219399 - 0.2336308062076569 - <_> - - <_> - - - - <_>6 6 8 5 -1. - <_>10 6 4 5 2. - 0 - -0.0243521798402071 - -0.2119124978780747 - 0.0429715812206268 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0150854503735900 - 0.1474328041076660 - -0.0385891310870647 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0300520602613688 - 0.0438824892044067 - -0.2040134072303772 - <_> - - <_> - - - - <_>8 0 10 18 -1. - <_>13 0 5 9 2. - <_>8 9 5 9 2. - 0 - -0.0798785835504532 - 0.0713558271527290 - -0.0358063094317913 - <_> - - <_> - - - - <_>2 5 14 6 -1. - <_>2 5 7 3 2. - <_>9 8 7 3 2. - 0 - -0.0498456507921219 - 0.2899102866649628 - -0.0291932094842196 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>10 1 3 5 2. - <_>7 6 3 5 2. - 0 - 0.0609835498034954 - 0.0110780904069543 - -0.8054903745651245 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -0.0241872295737267 - 0.2081667035818100 - -0.0403329916298389 - <_> - - <_> - - - - <_>9 9 10 6 -1. - <_>14 9 5 3 2. - <_>9 12 5 3 2. - 0 - 0.0295819099992514 - 0.0171898808330297 - -0.3017424941062927 - <_> - - <_> - - - - <_>2 8 6 10 -1. - <_>2 13 6 5 2. - 0 - -0.0961589366197586 - -0.3611518144607544 - 0.0214518792927265 - <_> - - <_> - - - - <_>1 10 19 2 -1. - <_>1 11 19 1 2. - 0 - 1.1087789898738265e-003 - 0.0607112683355808 - -0.1299573034048080 - <_> - - <_> - - - - <_>4 9 12 6 -1. - <_>4 12 12 3 2. - 0 - 0.0365770198404789 - -0.0157576892524958 - 0.6156833171844482 - <_> - - <_> - - - - <_>9 7 4 12 -1. - <_>9 11 4 4 3. - 0 - 0.0898875668644905 - 7.5012152083218098e-003 - -0.8463991880416870 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - 5.2048689685761929e-003 - -0.0504089109599590 - 0.1561879962682724 - <_> - - <_> - - - - <_>10 14 7 6 -1. - <_>10 16 7 2 3. - 0 - 0.0347273610532284 - 0.0210347902029753 - -0.2183419018983841 - <_> - - <_> - - - - <_>3 14 7 6 -1. - <_>3 16 7 2 3. - 0 - -0.0546950511634350 - -0.8312628269195557 - 8.9029762893915176e-003 - <_> - - <_> - - - - <_>15 5 4 15 -1. - <_>15 5 2 15 2. - 0 - 0.1598773002624512 - 8.5425339639186859e-003 - -0.6928086280822754 - <_> - - <_> - - - - <_>0 3 17 10 -1. - <_>0 8 17 5 2. - 0 - -0.0385586917400360 - -0.2707824110984802 - 0.0270253699272871 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -0.0718663707375526 - -0.3904461860656738 - 0.0109232803806663 - <_> - - <_> - - - - <_>0 0 20 4 -1. - <_>10 0 10 4 2. - 0 - 0.1959034055471420 - 0.0134233701974154 - -0.5426052212715149 - <_> - - <_> - - - - <_>6 1 10 6 -1. - <_>11 1 5 3 2. - <_>6 4 5 3 2. - 0 - -0.0223300792276859 - -0.1727523952722549 - 0.0290585104376078 - <_> - - <_> - - - - <_>0 9 18 11 -1. - <_>6 9 6 11 3. - 0 - 0.5101855993270874 - 0.0114186396822333 - -0.6787652969360352 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - -0.0112399095669389 - 0.1146249994635582 - -0.0568676292896271 - <_> - - <_> - - - - <_>0 10 20 6 -1. - <_>0 12 20 2 3. - 0 - 0.0174861606210470 - 0.0526418685913086 - -0.1619517952203751 - <_> - - <_> - - - - <_>10 9 6 10 -1. - <_>13 9 3 5 2. - <_>10 14 3 5 2. - 0 - -1.4517609961330891e-003 - -0.1087746992707253 - 0.0569604001939297 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>7 10 3 5 2. - <_>10 15 3 5 2. - 0 - 0.0370165593922138 - 0.0174600891768932 - -0.4650532007217407 - <_> - - <_> - - - - <_>6 1 8 15 -1. - <_>6 6 8 5 3. - 0 - -8.6366441100835800e-003 - 0.0730762705206871 - -0.1061659008264542 - <_> - - <_> - - - - <_>0 8 18 3 -1. - <_>0 9 18 1 3. - 0 - 1.9361129961907864e-003 - -0.1458536982536316 - 0.0593944899737835 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -0.0231195501983166 - -0.0948762372136116 - 0.0303874798119068 - <_> - - <_> - - - - <_>3 10 6 10 -1. - <_>3 10 3 5 2. - <_>6 15 3 5 2. - 0 - 6.3178739510476589e-003 - -0.1053709983825684 - 0.0778928473591805 - <_> - - <_> - - - - <_>11 8 8 12 -1. - <_>15 8 4 6 2. - <_>11 14 4 6 2. - 0 - 0.0109619498252869 - -0.0660419836640358 - 0.1056633964180946 - <_> - - <_> - - - - <_>1 8 8 12 -1. - <_>1 8 4 6 2. - <_>5 14 4 6 2. - 0 - -0.0421295203268528 - 0.2434408068656921 - -0.0515736788511276 - <_> - - <_> - - - - <_>13 7 3 13 -1. - <_>14 7 1 13 3. - 0 - 0.0451328195631504 - 0.0107720503583550 - -0.7615677714347839 - <_> - - <_> - - - - <_>6 11 5 9 -1. - <_>6 14 5 3 3. - 0 - 9.4924736768007278e-003 - 0.0452733784914017 - -0.1877003014087677 - <_> - - <_> - - - - <_>7 14 12 5 -1. - <_>7 14 6 5 2. - 0 - -0.1157386004924774 - 0.4483172893524170 - -8.6225848644971848e-003 - <_> - - <_> - - - - <_>2 0 4 8 -1. - <_>2 4 4 4 2. - 0 - 1.5801179688423872e-003 - -0.1093140989542007 - 0.0793912187218666 - <_> - - <_> - - - - <_>5 0 10 6 -1. - <_>5 3 10 3 2. - 0 - -0.0444422811269760 - 0.3382704854011536 - -0.0266497191041708 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0659930929541588 - -0.5310649275779724 - 0.0175430104136467 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - -0.0109688201919198 - -0.1661282032728195 - 0.0494883507490158 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0381490215659142 - -0.0415099002420902 - 0.2061666995286942 - <_> - - <_> - - - - <_>13 5 2 13 -1. - <_>13 5 1 13 2. - 0 - 4.0625538676977158e-003 - 0.0489250496029854 - -0.0848661810159683 - <_> - - <_> - - - - <_>5 9 6 10 -1. - <_>5 9 3 5 2. - <_>8 14 3 5 2. - 0 - 3.2693019602447748e-003 - -0.1188301965594292 - 0.0868031382560730 - <_> - - <_> - - - - <_>2 9 18 3 -1. - <_>8 9 6 3 3. - 0 - -1.2488859938457608e-003 - -0.1435472965240479 - 0.0214229691773653 - <_> - - <_> - - - - <_>5 5 2 13 -1. - <_>6 5 1 13 2. - 0 - -0.0170648898929358 - -0.5231634974479675 - 0.0165290404111147 - <_> - - <_> - - - - <_>11 10 4 10 -1. - <_>11 10 2 10 2. - 0 - -0.0233546998351812 - -0.1969852000474930 - 0.0219723004847765 - <_> - - <_> - - - - <_>5 10 4 10 -1. - <_>7 10 2 10 2. - 0 - 0.0278995297849178 - 0.0380332283675671 - -0.2232320010662079 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -0.0678694024682045 - -0.4207612872123718 - 0.0105596398934722 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0575420595705509 - -0.0421114303171635 - 0.2351571023464203 - <_> - - <_> - - - - <_>4 2 15 14 -1. - <_>9 2 5 14 3. - 0 - -0.2187730967998505 - 0.6955335140228272 - -9.9031934514641762e-003 - <_> - - <_> - - - - <_>1 2 15 14 -1. - <_>6 2 5 14 3. - 0 - 0.3777629137039185 - -0.0247218292206526 - 0.3036738932132721 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - 0.0410299003124237 - 0.0219992808997631 - -0.2470708936452866 - <_> - - <_> - - - - <_>3 0 6 9 -1. - <_>5 0 2 9 3. - 0 - 0.0255870707333088 - 0.0420451797544956 - -0.2233310043811798 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0672007724642754 - -0.0166483893990517 - 0.2426566034555435 - <_> - - <_> - - - - <_>1 3 10 8 -1. - <_>1 3 5 4 2. - <_>6 7 5 4 2. - 0 - 0.0282303895801306 - 0.0295722596347332 - -0.3012884855270386 - <_> - - <_> - - - - <_>5 13 14 6 -1. - <_>5 13 7 6 2. - 0 - 0.2458868026733398 - 1.9440819742158055e-003 - -0.4215391874313355 - <_> - - <_> - - - - <_>1 13 14 6 -1. - <_>8 13 7 6 2. - 0 - -0.0957524478435516 - -0.6471139788627625 - 0.0131804496049881 - <_> - - <_> - - - - <_>7 2 13 3 -1. - <_>7 3 13 1 3. - 0 - -0.0105965798720717 - -0.2048497051000595 - 0.0280544403940439 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>10 7 10 2 2. - 0 - 0.0671039670705795 - 0.0290539897978306 - -0.2677051126956940 - <_> - - <_> - - - - <_>5 0 15 6 -1. - <_>10 0 5 6 3. - 0 - -0.0792808383703232 - 0.2191110998392105 - -0.0156840104609728 - <_> - - <_> - - - - <_>0 0 15 6 -1. - <_>5 0 5 6 3. - 0 - -4.0710358880460262e-003 - 0.2203157991170883 - -0.0405812896788120 - <_> - - <_> - - - - <_>12 1 8 13 -1. - <_>12 1 4 13 2. - 0 - 0.0376903600990772 - -0.1294624060392380 - 0.0619215890765190 - <_> - - <_> - - - - <_>0 1 8 13 -1. - <_>4 1 4 13 2. - 0 - 0.0184539295732975 - -0.3280088901519775 - 0.0297459699213505 - <_> - - <_> - - - - <_>15 0 4 18 -1. - <_>15 0 2 18 2. - 0 - 0.1521836966276169 - 0.0119288703426719 - -0.4367868900299072 - <_> - - <_> - - - - <_>4 0 12 4 -1. - <_>8 0 4 4 3. - 0 - 0.1094895973801613 - 0.0246637798845768 - -0.3156718015670776 - <_> - - <_> - - - - <_>15 0 4 18 -1. - <_>15 0 2 18 2. - 0 - -0.0449067093431950 - 0.2308275997638702 - -0.0221633892506361 - <_> - - <_> - - - - <_>1 0 4 18 -1. - <_>3 0 2 18 2. - 0 - 0.1466861963272095 - 0.0184906590729952 - -0.4666948020458221 - <_> - - <_> - - - - <_>4 12 12 6 -1. - <_>8 12 4 6 3. - 0 - -0.0405975803732872 - 0.2069137990474701 - -0.0414120890200138 - -1.4597640037536621 - 31 - -1 - <_> - - - <_> - - <_> - - - - <_>2 0 6 5 -1. - <_>5 0 3 5 2. - 0 - 2.5723339058458805e-003 - -0.2409705966711044 - 0.1565973013639450 - <_> - - <_> - - - - <_>12 5 4 12 -1. - <_>12 9 4 4 3. - 0 - 5.7603712193667889e-003 - -0.4360102117061615 - 0.0805160328745842 - <_> - - <_> - - - - <_>4 4 11 6 -1. - <_>4 6 11 2 3. - 0 - -0.1013860031962395 - 0.3970403075218201 - -0.0657615363597870 - <_> - - <_> - - - - <_>11 6 5 6 -1. - <_>11 9 5 3 2. - 0 - 1.3221249682828784e-003 - -0.4238297939300537 - 0.0286596808582544 - <_> - - <_> - - - - <_>5 6 8 8 -1. - <_>5 6 4 4 2. - <_>9 10 4 4 2. - 0 - 5.4164527682587504e-004 - 0.0674186870455742 - -0.3101926147937775 - <_> - - <_> - - - - <_>10 9 4 8 -1. - <_>10 13 4 4 2. - 0 - 2.4447739124298096e-003 - 0.0139284199103713 - -0.2448893934488297 - <_> - - <_> - - - - <_>6 14 8 4 -1. - <_>6 16 8 2 2. - 0 - 1.4049450401216745e-003 - -0.1504099965095520 - 0.1263857930898666 - <_> - - <_> - - - - <_>10 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 1.1241709580644965e-003 - -0.2743634879589081 - 0.0711756572127342 - <_> - - <_> - - - - <_>1 9 13 2 -1. - <_>1 10 13 1 2. - 0 - -1.3413740089163184e-003 - -0.3768543899059296 - 0.0500381588935852 - <_> - - <_> - - - - <_>10 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 0.0417145602405071 - 0.0117330001667142 - -0.5450943708419800 - <_> - - <_> - - - - <_>6 2 4 7 -1. - <_>8 2 2 7 2. - 0 - 2.1810019388794899e-003 - -0.2084711045026779 - 0.0849292278289795 - <_> - - <_> - - - - <_>9 5 7 14 -1. - <_>9 12 7 7 2. - 0 - 0.0196557007730007 - 0.0295681897550821 - -0.2484049052000046 - <_> - - <_> - - - - <_>0 0 17 2 -1. - <_>0 1 17 1 2. - 0 - 4.9905799096450210e-004 - -0.1722225993871689 - 0.0939105227589607 - <_> - - <_> - - - - <_>5 9 10 8 -1. - <_>10 9 5 4 2. - <_>5 13 5 4 2. - 0 - 3.3110571093857288e-003 - 0.0794808268547058 - -0.1824993938207626 - <_> - - <_> - - - - <_>3 10 8 6 -1. - <_>3 12 8 2 3. - 0 - 3.4921199548989534e-003 - 0.0601597093045712 - -0.2304109036922455 - <_> - - <_> - - - - <_>7 11 7 6 -1. - <_>7 13 7 2 3. - 0 - 1.3379369629547000e-003 - -0.0783470198512077 - 0.1581453979015350 - <_> - - <_> - - - - <_>3 3 13 2 -1. - <_>3 4 13 1 2. - 0 - -3.4234288614243269e-004 - -0.1512158066034317 - 0.0959981828927994 - <_> - - <_> - - - - <_>10 2 5 6 -1. - <_>10 5 5 3 2. - 0 - -7.2008459828794003e-003 - 0.1071621030569077 - -0.1208669990301132 - <_> - - <_> - - - - <_>6 5 2 14 -1. - <_>6 12 2 7 2. - 0 - -3.3037480898201466e-003 - -0.1914276927709580 - 0.0713471099734306 - <_> - - <_> - - - - <_>12 9 4 8 -1. - <_>12 13 4 4 2. - 0 - -0.0819097235798836 - -0.8508651852607727 - 6.6832960583269596e-003 - <_> - - <_> - - - - <_>4 9 4 8 -1. - <_>4 13 4 4 2. - 0 - -5.2563002100214362e-004 - 0.0718547031283379 - -0.2316266000270844 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -0.0214773193001747 - 0.2239914983510971 - -0.0329822786152363 - <_> - - <_> - - - - <_>1 4 4 14 -1. - <_>1 4 2 7 2. - <_>3 11 2 7 2. - 0 - -0.0567004308104515 - 0.5147553086280823 - -0.0233782306313515 - <_> - - <_> - - - - <_>11 0 3 20 -1. - <_>12 0 1 20 3. - 0 - 0.0184196997433901 - 0.0188533607870340 - -0.4470109045505524 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -8.8926553726196289e-003 - 0.1849759966135025 - -0.0669785067439079 - <_> - - <_> - - - - <_>6 2 9 5 -1. - <_>9 2 3 5 3. - 0 - 0.0126423696056008 - 0.0865711495280266 - -0.1423393040895462 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - 8.0502573400735855e-003 - -0.0770524218678474 - 0.2134090065956116 - <_> - - <_> - - - - <_>11 0 3 20 -1. - <_>12 0 1 20 3. - 0 - -6.9165248423814774e-003 - -0.1784826964139938 - 0.0564155988395214 - <_> - - <_> - - - - <_>0 0 4 14 -1. - <_>2 0 2 14 2. - 0 - -0.0141944400966167 - 0.1876329928636551 - -0.0675882175564766 - <_> - - <_> - - - - <_>11 0 3 20 -1. - <_>12 0 1 20 3. - 0 - 3.5530389286577702e-003 - 0.0389252491295338 - -0.1498124003410339 - <_> - - <_> - - - - <_>6 0 3 20 -1. - <_>7 0 1 20 3. - 0 - 4.8001301474869251e-003 - 0.0449633114039898 - -0.2459513992071152 - <_> - - <_> - - - - <_>14 2 6 7 -1. - <_>16 2 2 7 3. - 0 - 9.0420730412006378e-003 - -0.0536144003272057 - 0.1382469981908798 - <_> - - <_> - - - - <_>0 2 6 7 -1. - <_>2 2 2 7 3. - 0 - 4.3342178687453270e-003 - -0.0861664414405823 - 0.1279340982437134 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - 0.0122646996751428 - 0.0362030602991581 - -0.3749409914016724 - <_> - - <_> - - - - <_>1 1 18 14 -1. - <_>7 1 6 14 3. - 0 - 0.0491555295884609 - -0.0913192629814148 - 0.1258798986673355 - <_> - - <_> - - - - <_>10 1 3 13 -1. - <_>11 1 1 13 3. - 0 - -5.8642931981012225e-004 - 0.0937025919556618 - -0.1073611974716187 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0329710505902767 - 0.0272385291755199 - -0.4500569999217987 - <_> - - <_> - - - - <_>4 10 16 4 -1. - <_>12 10 8 2 2. - <_>4 12 8 2 2. - 0 - 1.6174600459635258e-003 - 0.0328630097210407 - -0.1424130946397781 - <_> - - <_> - - - - <_>0 10 18 4 -1. - <_>0 10 9 2 2. - <_>9 12 9 2 2. - 0 - 1.0178020456805825e-003 - 0.0698985382914543 - -0.1750721037387848 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 3.4081579651683569e-003 - -0.0779706165194511 - 0.0584236904978752 - <_> - - <_> - - - - <_>1 4 14 6 -1. - <_>1 4 7 3 2. - <_>8 7 7 3 2. - 0 - -6.9078300148248672e-003 - 0.1171109005808830 - -0.0953809991478920 - <_> - - <_> - - - - <_>11 2 3 10 -1. - <_>11 7 3 5 2. - 0 - -7.8317627776414156e-004 - 0.0637309402227402 - -0.0881908833980560 - <_> - - <_> - - - - <_>5 3 9 10 -1. - <_>5 8 9 5 2. - 0 - -0.0135788703337312 - -0.2716825008392334 - 0.0396881587803364 - <_> - - <_> - - - - <_>11 2 3 10 -1. - <_>11 7 3 5 2. - 0 - -0.0800215303897858 - 0.6011552214622498 - -2.4968839716166258e-003 - <_> - - <_> - - - - <_>6 2 3 10 -1. - <_>6 7 3 5 2. - 0 - -1.7085570143535733e-003 - 0.1088868007063866 - -0.1052035987377167 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 8.5700387135148048e-003 - -0.0417846217751503 - 0.1485798060894013 - <_> - - <_> - - - - <_>5 0 3 20 -1. - <_>6 0 1 20 3. - 0 - 0.0155185600742698 - 0.0218551605939865 - -0.4570878148078919 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 10 2 8 2. - 0 - -1.5739940572530031e-003 - 0.0506554618477821 - -0.0696584731340408 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>7 10 2 8 2. - 0 - -1.0979890357702971e-003 - 0.0799175873398781 - -0.1189505979418755 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - -0.0262480191886425 - 0.7061498761177063 - -0.0136607801541686 - <_> - - <_> - - - - <_>4 7 12 8 -1. - <_>8 7 4 8 3. - 0 - -0.0102814603596926 - -0.1841211020946503 - 0.0664423406124115 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -3.6530280485749245e-003 - 0.1299555003643036 - -0.0583515614271164 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>0 13 8 2 2. - 0 - 7.8363716602325439e-003 - 0.0270732305943966 - -0.3360190987586975 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -0.0152837103232741 - 0.2556239962577820 - -0.0359409712255001 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -6.7279259674251080e-003 - 0.2466115951538086 - -0.0486734993755817 - <_> - - <_> - - - - <_>3 0 16 10 -1. - <_>11 0 8 5 2. - <_>3 5 8 5 2. - 0 - 0.1780785024166107 - 6.0471030883491039e-003 - -0.7256615161895752 - <_> - - <_> - - - - <_>0 2 18 2 -1. - <_>0 3 18 1 2. - 0 - -1.0486179962754250e-003 - -0.1933594048023224 - 0.0509406998753548 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 8.9163314551115036e-003 - 0.0330247916281223 - -0.1698628962039948 - <_> - - <_> - - - - <_>8 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 4.0643039392307401e-004 - -0.1311711966991425 - 0.0668182820081711 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - -0.4749904870986939 - -0.4015274941921234 - 6.3146720640361309e-003 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1043004989624023 - 0.0240249708294868 - -0.3269580006599426 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - -0.0516501218080521 - 0.1693482995033264 - -0.0155392000451684 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 0.0405062697827816 - -0.0220829807221890 - 0.3969472944736481 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>10 15 7 2 2. - <_>3 17 7 2 2. - 0 - 0.0241797491908073 - 0.0219267792999744 - -0.4346067011356354 - <_> - - <_> - - - - <_>4 1 8 8 -1. - <_>4 1 4 4 2. - <_>8 5 4 4 2. - 0 - -3.0531319789588451e-003 - -0.1410803049802780 - 0.0561751797795296 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - -0.0171236507594585 - -0.6334189772605896 - 9.8466947674751282e-003 - <_> - - <_> - - - - <_>0 9 13 3 -1. - <_>0 10 13 1 3. - 0 - 0.0417059697210789 - 0.0109776295721531 - -0.6768128275871277 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 4.3895491398870945e-003 - -0.0577812902629375 - 0.1550164073705673 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - -4.4786250218749046e-003 - -0.1670601963996887 - 0.0465729385614395 - <_> - - <_> - - - - <_>6 7 13 2 -1. - <_>6 8 13 1 2. - 0 - 4.8733421135693789e-004 - -0.1503714025020599 - 0.0469204410910606 - <_> - - <_> - - - - <_>4 11 5 9 -1. - <_>4 14 5 3 3. - 0 - 0.0155306402593851 - 0.0225560106337070 - -0.3237045109272003 - <_> - - <_> - - - - <_>7 11 7 6 -1. - <_>7 13 7 2 3. - 0 - 0.0454431809484959 - -9.8806591704487801e-003 - 0.6081532239913940 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>2 1 2 7 3. - 0 - -0.0779602974653244 - 0.4074381887912750 - -0.0183915290981531 - <_> - - <_> - - - - <_>5 8 13 2 -1. - <_>5 9 13 1 2. - 0 - -4.5014719944447279e-004 - -0.3831973075866699 - 0.0134208202362061 - <_> - - <_> - - - - <_>0 7 14 4 -1. - <_>0 7 7 2 2. - <_>7 9 7 2 2. - 0 - -0.0218527801334858 - -0.4469765126705170 - 0.0153793301433325 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - -0.0634108781814575 - 0.3992672860622406 - -0.0221688207238913 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -6.6417120397090912e-003 - -0.1459449976682663 - 0.0515417307615280 - <_> - - <_> - - - - <_>14 7 6 12 -1. - <_>17 7 3 6 2. - <_>14 13 3 6 2. - 0 - 0.0203554108738899 - -0.0231136791408062 - 0.1879265010356903 - <_> - - <_> - - - - <_>3 16 12 4 -1. - <_>7 16 4 4 3. - 0 - 9.2754261568188667e-003 - -0.0558089315891266 - 0.1350426971912384 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - -0.0640752837061882 - 0.2625977098941803 - -0.0319132506847382 - <_> - - <_> - - - - <_>2 7 15 5 -1. - <_>7 7 5 5 3. - 0 - 0.0575378984212875 - 0.0347036905586720 - -0.2720398902893066 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0133699998259544 - -0.1025179028511047 - 0.0207198299467564 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 2.9637520201504230e-003 - -0.0575798191130161 - 0.1334629952907562 - <_> - - <_> - - - - <_>7 0 6 12 -1. - <_>10 0 3 6 2. - <_>7 6 3 6 2. - 0 - -4.7313207760453224e-003 - -0.1422922015190125 - 0.0531062483787537 - <_> - - <_> - - - - <_>4 3 12 10 -1. - <_>8 3 4 10 3. - 0 - 0.1296754032373428 - -0.0219264701008797 - 0.3358376920223236 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>8 6 4 5 2. - 0 - -2.8757948894053698e-003 - 0.0749709308147430 - -0.1018306016921997 - <_> - - <_> - - - - <_>0 3 20 8 -1. - <_>0 7 20 4 2. - 0 - -0.0135463597252965 - -0.1531372070312500 - 0.0522473901510239 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0635321736335754 - 9.1543495655059814e-003 - -0.7486910820007324 - <_> - - <_> - - - - <_>0 7 6 12 -1. - <_>0 7 3 6 2. - <_>3 13 3 6 2. - 0 - -0.0102614099159837 - 0.1274251937866211 - -0.0567860715091228 - <_> - - <_> - - - - <_>12 5 2 14 -1. - <_>12 12 2 7 2. - 0 - -0.0433319285511971 - -0.6182907223701477 - 8.0406935885548592e-003 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - 4.0195342153310776e-003 - -0.0541303083300591 - 0.1486448049545288 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 6.7003332078456879e-003 - 0.0375072993338108 - -0.1998623013496399 - <_> - - <_> - - - - <_>2 0 16 8 -1. - <_>2 0 8 4 2. - <_>10 4 8 4 2. - 0 - -0.0112082399427891 - -0.1470471024513245 - 0.0571894012391567 - <_> - - <_> - - - - <_>9 5 7 9 -1. - <_>9 8 7 3 3. - 0 - -3.7890970706939697e-003 - 0.1552940011024475 - -0.0379304885864258 - <_> - - <_> - - - - <_>0 12 8 8 -1. - <_>0 12 4 4 2. - <_>4 16 4 4 2. - 0 - -0.0110984798520803 - 0.1785044074058533 - -0.0456896498799324 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -7.3761218227446079e-003 - -0.1089164018630981 - 0.0744255930185318 - <_> - - <_> - - - - <_>0 10 16 4 -1. - <_>0 10 8 2 2. - <_>8 12 8 2 2. - 0 - -3.2149269245564938e-003 - 0.0906417071819305 - -0.0943770334124565 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>10 2 10 2 2. - <_>0 4 10 2 2. - 0 - -3.5010059364140034e-003 - -0.1349819004535675 - 0.0666527226567268 - <_> - - <_> - - - - <_>3 5 4 14 -1. - <_>3 5 2 7 2. - <_>5 12 2 7 2. - 0 - -1.4920319699740503e-005 - -0.1050548031926155 - 0.0845831707119942 - <_> - - <_> - - - - <_>5 10 11 9 -1. - <_>5 13 11 3 3. - 0 - 9.5882397145032883e-003 - 0.0194214992225170 - -0.2473284006118774 - <_> - - <_> - - - - <_>2 9 4 9 -1. - <_>4 9 2 9 2. - 0 - 0.0572749599814415 - 8.1852423027157784e-003 - -0.7950854897499085 - <_> - - <_> - - - - <_>3 14 14 3 -1. - <_>3 15 14 1 3. - 0 - 0.0245496407151222 - -0.0155159803107381 - 0.4899547994136810 - <_> - - <_> - - - - <_>3 4 4 15 -1. - <_>3 9 4 5 3. - 0 - -0.0467925593256950 - -0.8472008705139160 - 9.0526090934872627e-003 - <_> - - <_> - - - - <_>7 4 13 3 -1. - <_>7 5 13 1 3. - 0 - 3.1038739252835512e-003 - -0.0532710291445255 - 0.0788155570626259 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0342410318553448 - -0.4816122055053711 - 0.0136543400585651 - <_> - - <_> - - - - <_>11 0 9 7 -1. - <_>14 0 3 7 3. - 0 - 4.4056270271539688e-003 - -0.0492804385721684 - 0.0787091627717018 - <_> - - <_> - - - - <_>1 10 6 7 -1. - <_>3 10 2 7 3. - 0 - 2.3878510110080242e-003 - -0.0768876597285271 - 0.0846145823597908 - <_> - - <_> - - - - <_>13 0 3 17 -1. - <_>14 0 1 17 3. - 0 - -0.0116212302818894 - -0.2308605015277863 - 0.0225848108530045 - <_> - - <_> - - - - <_>9 4 2 13 -1. - <_>10 4 1 13 2. - 0 - 2.5225759018212557e-003 - -0.0508131310343742 - 0.1381040066480637 - <_> - - <_> - - - - <_>6 6 12 9 -1. - <_>10 6 4 9 3. - 0 - 0.1350747048854828 - 7.5730998069047928e-003 - -0.4795505106449127 - <_> - - <_> - - - - <_>2 6 12 9 -1. - <_>6 6 4 9 3. - 0 - -2.2317951079457998e-003 - -0.0902587920427322 - 0.0831187665462494 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>10 14 7 2 2. - <_>3 16 7 2 2. - 0 - -0.0300617106258869 - -0.5179914236068726 - 0.0128817101940513 - <_> - - <_> - - - - <_>3 3 13 4 -1. - <_>3 5 13 2 2. - 0 - -0.0454643517732620 - 0.2066098004579544 - -0.0348603986203671 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>10 16 10 2 3. - 0 - -9.2374589294195175e-003 - -0.1469502002000809 - 0.0313202589750290 - <_> - - <_> - - - - <_>0 14 11 6 -1. - <_>0 16 11 2 3. - 0 - 6.0185948386788368e-003 - 0.0638856217265129 - -0.1177961975336075 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -0.0103228101506829 - 0.1795835047960281 - -0.0468300282955170 - <_> - - <_> - - - - <_>4 0 3 17 -1. - <_>5 0 1 17 3. - 0 - -1.7961780540645123e-003 - -0.1137404963374138 - 0.0617303811013699 - <_> - - <_> - - - - <_>13 3 3 17 -1. - <_>14 3 1 17 3. - 0 - 7.1363700553774834e-003 - 0.0335745215415955 - -0.1547258943319321 - <_> - - <_> - - - - <_>1 0 18 9 -1. - <_>7 0 6 9 3. - 0 - 0.0694877728819847 - -0.0591620095074177 - 0.1384111046791077 - <_> - - <_> - - - - <_>9 7 9 6 -1. - <_>12 7 3 6 3. - 0 - -0.0383218713104725 - 0.1562871932983398 - -0.0318156518042088 - <_> - - <_> - - - - <_>4 3 3 17 -1. - <_>5 3 1 17 3. - 0 - 3.9706169627606869e-003 - 0.0512525290250778 - -0.1761599928140640 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - -3.9275288581848145e-003 - 0.0789479985833168 - -0.0514867305755615 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 1.9882800988852978e-003 - -0.0504746511578560 - 0.1336632966995239 - <_> - - <_> - - - - <_>5 14 15 3 -1. - <_>5 15 15 1 3. - 0 - -1.6472870483994484e-003 - 0.0491801984608173 - -0.0534374900162220 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0115801095962524 - -0.1322430968284607 - 0.0583215095102787 - <_> - - <_> - - - - <_>7 7 9 6 -1. - <_>7 10 9 3 2. - 0 - 0.0434967912733555 - -0.0235273800790310 - 0.1217914000153542 - <_> - - <_> - - - - <_>8 5 3 10 -1. - <_>8 10 3 5 2. - 0 - 1.8956169951707125e-003 - 0.0560729391872883 - -0.1199728995561600 - <_> - - <_> - - - - <_>5 8 14 2 -1. - <_>5 9 14 1 2. - 0 - 2.4906420148909092e-003 - -0.1279992014169693 - 0.0352185703814030 - <_> - - <_> - - - - <_>0 6 13 3 -1. - <_>0 7 13 1 3. - 0 - -0.0602531507611275 - -0.7870790958404541 - 7.7965850941836834e-003 - <_> - - <_> - - - - <_>3 13 17 6 -1. - <_>3 15 17 2 3. - 0 - -0.0153068099170923 - -0.1227606013417244 - 0.0425373911857605 - <_> - - <_> - - - - <_>6 15 8 4 -1. - <_>6 17 8 2 2. - 0 - 3.6899570841342211e-004 - -0.1219256967306137 - 0.0596502311527729 - <_> - - <_> - - - - <_>6 7 14 2 -1. - <_>6 8 14 1 2. - 0 - 3.0398070812225342e-003 - -0.0630238428711891 - 0.0509180910885334 - <_> - - <_> - - - - <_>6 7 6 8 -1. - <_>6 11 6 4 2. - 0 - -3.5760499304160476e-004 - -0.0768593326210976 - 0.0866243168711662 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - -2.7939230203628540e-003 - 0.1307436972856522 - -0.0469127111136913 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - 4.2060539126396179e-003 - -0.0531197190284729 - 0.1286624073982239 - <_> - - <_> - - - - <_>8 5 12 4 -1. - <_>12 5 4 4 3. - 0 - 0.0514486990869045 - 0.0110803702846169 - -0.4143421053886414 - <_> - - <_> - - - - <_>6 5 2 14 -1. - <_>6 12 2 7 2. - 0 - 0.0328598804771900 - 0.0174953099340200 - -0.3753879070281982 - <_> - - <_> - - - - <_>11 0 9 7 -1. - <_>14 0 3 7 3. - 0 - -0.0484080612659454 - 0.1701187938451767 - -0.0237264502793550 - <_> - - <_> - - - - <_>0 5 12 4 -1. - <_>4 5 4 4 3. - 0 - 0.0140613401308656 - 0.0259813908487558 - -0.2763577103614807 - <_> - - <_> - - - - <_>11 0 9 7 -1. - <_>14 0 3 7 3. - 0 - 0.0521964393556118 - -9.5534622669219971e-003 - 0.1097346991300583 - <_> - - <_> - - - - <_>0 0 9 7 -1. - <_>3 0 3 7 3. - 0 - 0.0447802618145943 - -0.0270329304039478 - 0.2743470966815949 - <_> - - <_> - - - - <_>2 13 16 4 -1. - <_>10 13 8 2 2. - <_>2 15 8 2 2. - 0 - -3.7703409325331450e-003 - -0.1441286951303482 - 0.0523424707353115 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - -4.1479258798062801e-003 - -0.1370683014392853 - 0.0496210902929306 - <_> - - <_> - - - - <_>5 0 10 8 -1. - <_>5 4 10 4 2. - 0 - 0.0146851502358913 - -0.0499496683478355 - 0.1365865021944046 - <_> - - <_> - - - - <_>5 2 10 14 -1. - <_>5 9 10 7 2. - 0 - 0.0103258499875665 - 0.0836594626307487 - -0.1037800982594490 - <_> - - <_> - - - - <_>7 7 13 2 -1. - <_>7 8 13 1 2. - 0 - -1.7972270143218338e-004 - -0.0866589173674583 - 0.0225923694670200 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 0.0200810004025698 - -0.0195899493992329 - 0.3435873985290527 - <_> - - <_> - - - - <_>4 0 13 3 -1. - <_>4 1 13 1 3. - 0 - -0.0229055806994438 - -0.4248282015323639 - 0.0154167702421546 - <_> - - <_> - - - - <_>5 0 10 4 -1. - <_>5 2 10 2 2. - 0 - -0.0555060282349586 - 0.7314381003379822 - -9.4347409904003143e-003 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -1.7899540252983570e-003 - -0.0819517821073532 - 0.0358237884938717 - <_> - - <_> - - - - <_>0 0 18 3 -1. - <_>9 0 9 3 2. - 0 - -8.0740358680486679e-004 - 0.0866209790110588 - -0.0787586122751236 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>8 17 6 3 3. - 0 - 0.0244450196623802 - -0.0220042504370213 - 0.0941588431596756 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - -7.5640110298991203e-003 - 0.1201172992587090 - -0.0723497718572617 - <_> - - <_> - - - - <_>11 16 8 4 -1. - <_>11 16 4 4 2. - 0 - 2.3397218901664019e-003 - -0.0810343474149704 - 0.0981736183166504 - <_> - - <_> - - - - <_>0 3 18 15 -1. - <_>0 8 18 5 3. - 0 - -0.0318176113069057 - -0.3573046922683716 - 0.0196013096719980 - <_> - - <_> - - - - <_>2 9 16 8 -1. - <_>2 13 16 4 2. - 0 - 0.0100280800834298 - -0.0241604596376419 - 0.3134033977985382 - <_> - - <_> - - - - <_>0 10 7 4 -1. - <_>0 12 7 2 2. - 0 - 9.0504523541312665e-005 - 0.0580506287515163 - -0.1176043972373009 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>10 5 6 6 2. - <_>4 11 6 6 2. - 0 - -0.0210107509046793 - -0.2034603953361511 - 0.0341454111039639 - <_> - - <_> - - - - <_>5 12 9 5 -1. - <_>8 12 3 5 3. - 0 - -7.1200268575921655e-004 - 0.0633031502366066 - -0.1049738973379135 - <_> - - <_> - - - - <_>18 0 2 16 -1. - <_>18 8 2 8 2. - 0 - -7.6272932346910238e-004 - -0.0744325667619705 - 0.0349122285842896 - <_> - - <_> - - - - <_>0 0 2 16 -1. - <_>0 8 2 8 2. - 0 - -0.0585063286125660 - 0.5575838088989258 - -0.0126664899289608 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - 2.4057500995695591e-003 - 0.0446050688624382 - -0.1158159002661705 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0197295192629099 - -0.4755010902881622 - 0.0155485598370433 - <_> - - <_> - - - - <_>14 7 6 10 -1. - <_>17 7 3 5 2. - <_>14 12 3 5 2. - 0 - -0.0226451307535172 - 0.1182895004749298 - -0.0221709292382002 - <_> - - <_> - - - - <_>0 2 12 6 -1. - <_>0 2 6 3 2. - <_>6 5 6 3 2. - 0 - -1.3123790267854929e-003 - 0.0506355389952660 - -0.1342331022024155 - <_> - - <_> - - - - <_>10 0 10 10 -1. - <_>15 0 5 5 2. - <_>10 5 5 5 2. - 0 - -5.9856739826500416e-003 - 0.0542738214135170 - -0.0696390569210052 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0522454492747784 - -0.0183413606137037 - 0.4168938100337982 - <_> - - <_> - - - - <_>2 7 18 4 -1. - <_>11 7 9 2 2. - <_>2 9 9 2 2. - 0 - -4.6837949194014072e-003 - -0.1212126016616821 - 0.0391879193484783 - <_> - - <_> - - - - <_>5 3 6 14 -1. - <_>5 3 3 7 2. - <_>8 10 3 7 2. - 0 - -0.0152083998546004 - -0.0964878425002098 - 0.0653250217437744 - <_> - - <_> - - - - <_>9 2 3 13 -1. - <_>10 2 1 13 3. - 0 - -5.7328920811414719e-003 - 0.2102347016334534 - -0.0317212603986263 - <_> - - <_> - - - - <_>0 7 6 10 -1. - <_>0 7 3 5 2. - <_>3 12 3 5 2. - 0 - -3.7612610030919313e-003 - 0.1008588001132011 - -0.0613929517567158 - <_> - - <_> - - - - <_>13 4 3 13 -1. - <_>14 4 1 13 3. - 0 - -0.0109805203974247 - -0.1834243983030319 - 0.0171212498098612 - <_> - - <_> - - - - <_>1 16 8 4 -1. - <_>5 16 4 4 2. - 0 - 2.7213071007281542e-003 - -0.0584041401743889 - 0.1072904989123344 - <_> - - <_> - - - - <_>5 15 15 5 -1. - <_>10 15 5 5 3. - 0 - -0.0189692694693804 - 0.0747647285461426 - -0.0340562015771866 - <_> - - <_> - - - - <_>7 3 4 13 -1. - <_>9 3 2 13 2. - 0 - -7.1104627568274736e-004 - -0.1474957019090653 - 0.0524471588432789 - <_> - - <_> - - - - <_>7 4 13 3 -1. - <_>7 5 13 1 3. - 0 - 9.4774961471557617e-003 - -0.0252324901521206 - 0.1067759990692139 - <_> - - <_> - - - - <_>2 0 16 8 -1. - <_>2 0 8 4 2. - <_>10 4 8 4 2. - 0 - 0.1027588024735451 - 0.0100393602624536 - -0.6463056802749634 - <_> - - <_> - - - - <_>13 7 6 11 -1. - <_>15 7 2 11 3. - 0 - -0.1122817993164063 - -0.5724760890007019 - 6.3971187919378281e-003 - <_> - - <_> - - - - <_>7 9 6 10 -1. - <_>7 9 3 5 2. - <_>10 14 3 5 2. - 0 - -0.0256835799664259 - -0.3200407922267914 - 0.0172394495457411 - <_> - - <_> - - - - <_>7 5 9 8 -1. - <_>10 5 3 8 3. - 0 - 0.0254942998290062 - -0.0221277792006731 - 0.1183812022209168 - <_> - - <_> - - - - <_>4 5 3 13 -1. - <_>5 5 1 13 3. - 0 - -0.0304587893188000 - -0.5874788165092468 - 9.8222652450203896e-003 - <_> - - <_> - - - - <_>10 4 6 12 -1. - <_>10 8 6 4 3. - 0 - -0.0278161205351353 - 0.3678570985794067 - -0.0122603401541710 - <_> - - <_> - - - - <_>7 4 6 7 -1. - <_>9 4 2 7 3. - 0 - -1.2768269516527653e-003 - 0.2415042966604233 - -0.0245034098625183 - <_> - - <_> - - - - <_>5 6 12 4 -1. - <_>9 6 4 4 3. - 0 - -0.0764358267188072 - -0.6347172260284424 - 2.7080429717898369e-003 - <_> - - <_> - - - - <_>3 6 12 4 -1. - <_>7 6 4 4 3. - 0 - 3.7574430461972952e-004 - -0.1331682056188583 - 0.0461895912885666 - <_> - - <_> - - - - <_>16 4 4 8 -1. - <_>16 8 4 4 2. - 0 - 0.0131938103586435 - 0.0265014804899693 - -0.0685159787535667 - <_> - - <_> - - - - <_>4 5 9 8 -1. - <_>7 5 3 8 3. - 0 - -0.0636896193027496 - 0.4112663865089417 - -0.0156471207737923 - <_> - - <_> - - - - <_>16 4 4 8 -1. - <_>16 8 4 4 2. - 0 - -8.0426287604495883e-004 - -0.0940060988068581 - 0.0310020707547665 - <_> - - <_> - - - - <_>4 5 8 15 -1. - <_>4 10 8 5 3. - 0 - 8.2476891111582518e-004 - -0.1592881977558136 - 0.0370967909693718 - <_> - - <_> - - - - <_>5 14 13 2 -1. - <_>5 15 13 1 2. - 0 - 4.8443409614264965e-003 - -0.0256988797336817 - 0.1507900953292847 - <_> - - <_> - - - - <_>1 7 4 13 -1. - <_>3 7 2 13 2. - 0 - 0.0229413192719221 - 0.0229411497712135 - -0.2775906920433044 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>11 9 3 8 2. - 0 - 5.6285588070750237e-003 - 0.0201216191053391 - -0.0635844171047211 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>6 9 3 8 2. - 0 - -8.1927451537922025e-004 - 0.0559341385960579 - -0.1077606007456780 - <_> - - <_> - - - - <_>8 1 9 15 -1. - <_>11 1 3 15 3. - 0 - 5.1910132169723511e-003 - -0.0267819706350565 - 0.0550941713154316 - <_> - - <_> - - - - <_>3 1 9 15 -1. - <_>6 1 3 15 3. - 0 - -0.0202204994857311 - -0.1250178068876267 - 0.0592748299241066 - <_> - - <_> - - - - <_>9 7 9 6 -1. - <_>12 7 3 6 3. - 0 - -3.6798599176108837e-003 - 0.0604743212461472 - -0.0596323497593403 - <_> - - <_> - - - - <_>0 5 6 7 -1. - <_>2 5 2 7 3. - 0 - 0.0104838600382209 - -0.0536522604525089 - 0.1290611028671265 - <_> - - <_> - - - - <_>11 2 2 16 -1. - <_>11 2 1 16 2. - 0 - 0.0179044604301453 - 0.0143182901665568 - -0.2734973132610321 - <_> - - <_> - - - - <_>1 1 18 10 -1. - <_>7 1 6 10 3. - 0 - 0.3369382023811340 - -8.6311781778931618e-003 - 0.7328857183456421 - <_> - - <_> - - - - <_>10 8 10 8 -1. - <_>15 8 5 4 2. - <_>10 12 5 4 2. - 0 - -0.1080747991800308 - -0.5070748925209045 - 6.7152627743780613e-003 - <_> - - <_> - - - - <_>0 8 10 8 -1. - <_>0 8 5 4 2. - <_>5 12 5 4 2. - 0 - -0.1221961006522179 - -0.7935271859169006 - 7.4890498071908951e-003 - <_> - - <_> - - - - <_>11 2 2 16 -1. - <_>11 2 1 16 2. - 0 - -3.7357630208134651e-003 - -0.1543643027544022 - 0.0199333596974611 - <_> - - <_> - - - - <_>3 9 12 11 -1. - <_>9 9 6 11 2. - 0 - 0.0472835302352905 - -0.0321807414293289 - 0.2233242988586426 - <_> - - <_> - - - - <_>6 7 10 3 -1. - <_>6 7 5 3 2. - 0 - -4.8949089832603931e-003 - -0.1444084942340851 - 0.0276874192059040 - <_> - - <_> - - - - <_>3 1 10 16 -1. - <_>3 1 5 8 2. - <_>8 9 5 8 2. - 0 - -4.6767960302531719e-003 - 0.0425895191729069 - -0.1318124979734421 - <_> - - <_> - - - - <_>8 3 8 10 -1. - <_>12 3 4 5 2. - <_>8 8 4 5 2. - 0 - -0.0405265688896179 - 0.1515536010265350 - -0.0131374001502991 - <_> - - <_> - - - - <_>4 3 8 10 -1. - <_>4 3 4 5 2. - <_>8 8 4 5 2. - 0 - 5.1309340633451939e-003 - -0.0424363985657692 - 0.1942812949419022 - <_> - - <_> - - - - <_>10 11 9 6 -1. - <_>10 14 9 3 2. - 0 - 4.9947341904044151e-003 - 0.0206563007086515 - -0.1833256036043167 - <_> - - <_> - - - - <_>1 11 9 6 -1. - <_>1 14 9 3 2. - 0 - -0.0109464498236775 - -0.1157637014985085 - 0.0619641989469528 - <_> - - <_> - - - - <_>6 16 14 4 -1. - <_>13 16 7 2 2. - <_>6 18 7 2 2. - 0 - -6.7135482095181942e-003 - 0.1579674929380417 - -0.0353996194899082 - <_> - - <_> - - - - <_>1 0 9 18 -1. - <_>1 6 9 6 3. - 0 - -0.0309906303882599 - -0.1727104932069778 - 0.0379165709018707 - <_> - - <_> - - - - <_>8 3 12 4 -1. - <_>8 5 12 2 2. - 0 - -2.7503890451043844e-003 - 0.0414951592683792 - -0.0551527887582779 - <_> - - <_> - - - - <_>1 5 7 9 -1. - <_>1 8 7 3 3. - 0 - -0.0247004292905331 - 0.2907611131668091 - -0.0205526407808065 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - -0.0176072698086500 - -0.0986715033650398 - 0.0328004509210587 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 8.7928329594433308e-004 - 0.0364424213767052 - -0.1751804053783417 - <_> - - <_> - - - - <_>9 2 6 7 -1. - <_>11 2 2 7 3. - 0 - 6.9036949425935745e-003 - 0.0214442703872919 - -0.1199729964137077 - <_> - - <_> - - - - <_>5 2 6 7 -1. - <_>7 2 2 7 3. - 0 - -2.2592858877032995e-003 - 0.0959442481398582 - -0.0812644809484482 - <_> - - <_> - - - - <_>4 16 15 4 -1. - <_>9 16 5 4 3. - 0 - 0.0158859398216009 - -0.0314941108226776 - 0.0875319465994835 - <_> - - <_> - - - - <_>0 17 15 3 -1. - <_>5 17 5 3 3. - 0 - 0.0193797107785940 - -0.0350754894316196 - 0.1619918942451477 - <_> - - <_> - - - - <_>2 2 18 18 -1. - <_>8 2 6 18 3. - 0 - -0.0235653296113014 - 0.0993678122758865 - -0.0504099614918232 - <_> - - <_> - - - - <_>5 4 4 16 -1. - <_>7 4 2 16 2. - 0 - -6.2582190148532391e-003 - -0.1596260964870453 - 0.0568719506263733 - <_> - - <_> - - - - <_>6 9 9 6 -1. - <_>9 9 3 6 3. - 0 - 0.0102890403941274 - 0.0324222594499588 - -0.1182584017515183 - <_> - - <_> - - - - <_>1 14 10 6 -1. - <_>1 14 5 3 2. - <_>6 17 5 3 2. - 0 - -5.8485912159085274e-003 - 0.1910745948553085 - -0.0370847396552563 - <_> - - <_> - - - - <_>6 7 12 5 -1. - <_>10 7 4 5 3. - 0 - -0.0858051627874374 - -0.4087724983692169 - 0.0127811003476381 - <_> - - <_> - - - - <_>0 10 5 9 -1. - <_>0 13 5 3 3. - 0 - -2.4852859787642956e-003 - -0.1011639982461929 - 0.0563114807009697 - <_> - - <_> - - - - <_>13 10 6 9 -1. - <_>13 13 6 3 3. - 0 - -7.1535720489919186e-003 - -0.0441186092793942 - 0.0222171694040298 - <_> - - <_> - - - - <_>1 10 6 9 -1. - <_>1 13 6 3 3. - 0 - 1.2644700473174453e-003 - 0.0653055980801582 - -0.1227300018072128 - <_> - - <_> - - - - <_>5 7 10 4 -1. - <_>5 9 10 2 2. - 0 - 0.0398256890475750 - -0.0504029802978039 - 0.1442425996065140 - <_> - - <_> - - - - <_>1 5 18 12 -1. - <_>1 9 18 4 3. - 0 - 0.0133226700127125 - 0.2323541939258575 - -0.0281981695443392 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 0.0210173502564430 - -0.0196532607078552 - 0.1043256968259811 - <_> - - <_> - - - - <_>2 4 13 14 -1. - <_>2 11 13 7 2. - 0 - 0.2451521009206772 - 8.4479590877890587e-003 - -0.7483342289924622 - <_> - - <_> - - - - <_>10 8 6 6 -1. - <_>10 8 3 6 2. - 0 - 4.3030278757214546e-003 - 0.0311724804341793 - -0.0941835865378380 - <_> - - <_> - - - - <_>2 1 16 8 -1. - <_>2 5 16 4 2. - 0 - 0.0222244802862406 - -0.0396029204130173 - 0.1561487019062042 - <_> - - <_> - - - - <_>10 8 6 6 -1. - <_>10 8 3 6 2. - 0 - -8.5019748657941818e-003 - -0.1085231974720955 - 0.0280456002801657 - <_> - - <_> - - - - <_>4 0 11 6 -1. - <_>4 2 11 2 3. - 0 - 0.0108455400913954 - -0.0655941590666771 - 0.1021739989519119 - <_> - - <_> - - - - <_>2 2 16 2 -1. - <_>2 3 16 1 2. - 0 - 1.7696369905024767e-003 - 0.0753691419959068 - -0.0952988266944885 - <_> - - <_> - - - - <_>4 15 12 5 -1. - <_>10 15 6 5 2. - 0 - 0.1028904989361763 - -0.0117672299966216 - 0.4816721081733704 - <_> - - <_> - - - - <_>10 8 6 6 -1. - <_>10 8 3 6 2. - 0 - -0.0350741706788540 - -0.2629905045032501 - 0.0100027797743678 - <_> - - <_> - - - - <_>0 14 12 4 -1. - <_>6 14 6 4 2. - 0 - 0.0383029989898205 - 0.0108839496970177 - -0.5809292793273926 - <_> - - <_> - - - - <_>12 7 6 6 -1. - <_>12 10 6 3 2. - 0 - 0.0121831195428967 - 0.0310989990830421 - -0.0542579293251038 - <_> - - <_> - - - - <_>1 5 6 14 -1. - <_>1 5 3 7 2. - <_>4 12 3 7 2. - 0 - 0.0203881394118071 - -0.0373795405030251 - 0.1872545033693314 - <_> - - <_> - - - - <_>10 2 9 13 -1. - <_>13 2 3 13 3. - 0 - 6.5857400186359882e-003 - -0.0441947802901268 - 0.0600337907671928 - <_> - - <_> - - - - <_>4 8 6 6 -1. - <_>7 8 3 6 2. - 0 - 5.8739529922604561e-003 - 0.0392197109758854 - -0.1585793942213059 - <_> - - <_> - - - - <_>12 5 6 9 -1. - <_>12 5 3 9 2. - 0 - -0.0782790333032608 - 0.2178917974233627 - -0.0100944200530648 - <_> - - <_> - - - - <_>2 5 6 9 -1. - <_>5 5 3 9 2. - 0 - 0.0153365796431899 - -0.0312195196747780 - 0.2245240062475205 - <_> - - <_> - - - - <_>5 8 15 2 -1. - <_>5 9 15 1 2. - 0 - 1.4171670190989971e-003 - -0.1662545055150986 - 0.0276841092854738 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>2 10 16 1 3. - 0 - -3.4021309111267328e-003 - -0.2845237851142883 - 0.0226610600948334 - <_> - - <_> - - - - <_>12 7 5 6 -1. - <_>12 10 5 3 2. - 0 - -0.0193403400480747 - 0.5230051875114441 - -5.0734821707010269e-003 - <_> - - <_> - - - - <_>3 7 5 6 -1. - <_>3 10 5 3 2. - 0 - -0.0165143199265003 - 0.7061938047409058 - -8.2714930176734924e-003 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - -6.4589809626340866e-003 - -0.1210433021187782 - 0.0387184210121632 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>0 13 10 2 2. - <_>10 15 10 2 2. - 0 - -4.3003219179809093e-003 - -0.1210365965962410 - 0.0553358905017376 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 0.0107842003926635 - -0.0389758199453354 - 0.1987051963806152 - <_> - - <_> - - - - <_>2 12 10 6 -1. - <_>2 12 5 3 2. - <_>7 15 5 3 2. - 0 - -1.1527650058269501e-003 - 0.0935961008071899 - -0.0642488896846771 - <_> - - <_> - - - - <_>9 10 3 10 -1. - <_>9 15 3 5 2. - 0 - -0.0421012602746487 - -0.3003219068050385 - 0.0159092992544174 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - 3.0202090274542570e-003 - -0.0653104782104492 - 0.0947547629475594 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - 0.0299999900162220 - 0.0176732297986746 - -0.2245714962482452 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - -1.3678170507773757e-003 - 0.1339491009712219 - -0.0500865504145622 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - -0.0231519509106874 - -0.1831011027097702 - 0.0191035792231560 - <_> - - <_> - - - - <_>1 6 3 13 -1. - <_>2 6 1 13 3. - 0 - 0.0638263225555420 - 7.5651248916983604e-003 - -0.8311659097671509 - <_> - - <_> - - - - <_>10 4 6 16 -1. - <_>12 4 2 16 3. - 0 - -0.1483162045478821 - -1. - 3.4445689525455236e-003 - <_> - - <_> - - - - <_>4 4 6 16 -1. - <_>6 4 2 16 3. - 0 - 1.3207890151534230e-004 - 0.0511358194053173 - -0.1186320036649704 - <_> - - <_> - - - - <_>7 15 9 5 -1. - <_>10 15 3 5 3. - 0 - 0.0660787075757980 - 7.1528651751577854e-003 - -0.4290638864040375 - <_> - - <_> - - - - <_>4 16 12 4 -1. - <_>8 16 4 4 3. - 0 - 6.1758249066770077e-003 - -0.0590105801820755 - 0.1078130975365639 - <_> - - <_> - - - - <_>5 3 10 6 -1. - <_>10 3 5 3 2. - <_>5 6 5 3 2. - 0 - -0.0335061103105545 - -0.3763673901557922 - 0.0170377995818853 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - -9.7032980993390083e-003 - 0.1382033973932266 - -0.0439222007989883 - <_> - - <_> - - - - <_>6 2 14 2 -1. - <_>6 3 14 1 2. - 0 - -7.2475131601095200e-003 - -0.2219274938106537 - 0.0128019396215677 - <_> - - <_> - - - - <_>3 11 8 4 -1. - <_>7 11 4 4 2. - 0 - -0.0533093288540840 - -0.4559476077556610 - 0.0124950101599097 - <_> - - <_> - - - - <_>4 2 12 4 -1. - <_>4 2 6 4 2. - 0 - 0.0103870695456862 - -0.0516241304576397 - 0.1223623976111412 - <_> - - <_> - - - - <_>0 2 6 15 -1. - <_>0 7 6 5 3. - 0 - 0.0672085732221603 - 0.0316551215946674 - -0.2108618021011353 - <_> - - <_> - - - - <_>3 0 17 6 -1. - <_>3 2 17 2 3. - 0 - -0.0151433199644089 - 0.1722407042980194 - -0.0292099397629499 - <_> - - <_> - - - - <_>0 4 7 4 -1. - <_>0 6 7 2 2. - 0 - -0.0392849706113338 - -0.4822677969932556 - 0.0143662001937628 - <_> - - <_> - - - - <_>3 9 14 2 -1. - <_>3 9 7 2 2. - 0 - -5.1000402309000492e-003 - 0.1370041072368622 - -0.0435415916144848 - <_> - - <_> - - - - <_>4 7 10 3 -1. - <_>9 7 5 3 2. - 0 - 4.7284159809350967e-003 - 0.0654955208301544 - -0.1291383951902390 - <_> - - <_> - - - - <_>4 4 13 3 -1. - <_>4 5 13 1 3. - 0 - -0.0118776299059391 - 0.2014613002538681 - -0.0236400496214628 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -4.5396368950605392e-003 - -0.1687245070934296 - 0.0448811799287796 - <_> - - <_> - - - - <_>4 12 16 8 -1. - <_>4 12 8 8 2. - 0 - -8.0548608675599098e-003 - 0.0659163221716881 - -0.0451842285692692 - <_> - - <_> - - - - <_>0 12 16 8 -1. - <_>8 12 8 8 2. - 0 - -0.0430377312004566 - 0.1281743049621582 - -0.0630217194557190 - <_> - - <_> - - - - <_>14 9 6 10 -1. - <_>16 9 2 10 3. - 0 - 0.1095227971673012 - 6.0560060665011406e-003 - -0.5161451101303101 - <_> - - <_> - - - - <_>2 7 11 12 -1. - <_>2 11 11 4 3. - 0 - -7.0019549457356334e-004 - -0.1284541040658951 - 0.0499361008405685 - <_> - - <_> - - - - <_>9 3 3 12 -1. - <_>9 9 3 6 2. - 0 - -2.9595570595120080e-005 - 0.0670763328671455 - -0.0903971195220947 - <_> - - <_> - - - - <_>2 1 6 15 -1. - <_>2 6 6 5 3. - 0 - 0.1774964034557343 - -7.6472861692309380e-003 - 0.8971657156944275 - <_> - - <_> - - - - <_>17 7 2 13 -1. - <_>17 7 1 13 2. - 0 - -0.0553644485771656 - -0.6551393866539002 - 6.7208600230515003e-003 - <_> - - <_> - - - - <_>1 7 2 13 -1. - <_>2 7 1 13 2. - 0 - -0.0514614097774029 - -0.6533753275871277 - 8.9703118428587914e-003 - <_> - - <_> - - - - <_>0 1 20 4 -1. - <_>10 1 10 2 2. - <_>0 3 10 2 2. - 0 - -0.0265817195177078 - -0.2811642885208130 - 0.0177660901099443 - <_> - - <_> - - - - <_>6 1 7 6 -1. - <_>6 3 7 2 3. - 0 - -0.0690343379974365 - 0.9258397817611694 - -6.2460578046739101e-003 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0302057303488255 - 0.2378429025411606 - -0.0162954591214657 - <_> - - <_> - - - - <_>5 10 6 6 -1. - <_>8 10 3 6 2. - 0 - -9.1226873919367790e-003 - -0.1456989049911499 - 0.0456543900072575 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>12 0 4 20 3. - 0 - -0.2123378068208695 - 0.1647219955921173 - -0.0147588299587369 - <_> - - <_> - - - - <_>6 7 6 8 -1. - <_>8 7 2 8 3. - 0 - -0.0262546893209219 - 0.3038162887096405 - -0.0201085302978754 - <_> - - <_> - - - - <_>12 5 4 8 -1. - <_>12 9 4 4 2. - 0 - 3.0262209475040436e-003 - -0.1529828011989594 - 0.0268785394728184 - <_> - - <_> - - - - <_>5 2 9 5 -1. - <_>8 2 3 5 3. - 0 - 0.0838385969400406 - 0.0100423498079181 - -0.5934510231018066 - <_> - - <_> - - - - <_>8 10 12 9 -1. - <_>12 10 4 9 3. - 0 - 0.0188457593321800 - -0.0452605411410332 - 0.0842202007770538 - <_> - - <_> - - - - <_>4 15 9 5 -1. - <_>7 15 3 5 3. - 0 - -4.8671411350369453e-003 - -0.1123484000563622 - 0.0566763989627361 - -1.3393770456314087 - 32 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>7 1 6 3 3. - 0 - 0.1190086975693703 - -0.2018668055534363 - 0.2441760003566742 - <_> - - <_> - - - - <_>12 7 8 4 -1. - <_>12 9 8 2 2. - 0 - 0.0212774891406298 - -0.2345439940690994 - 0.1630306988954544 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 3.7066950462758541e-003 - -0.2055990993976593 - 0.1498205959796906 - <_> - - <_> - - - - <_>3 4 15 16 -1. - <_>3 12 15 8 2. - 0 - 0.0329295508563519 - 0.0788030773401260 - -0.3368844091892242 - <_> - - <_> - - - - <_>0 7 8 4 -1. - <_>0 9 8 2 2. - 0 - 0.0250579603016377 - -0.1593209058046341 - 0.1640505045652390 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>9 6 2 9 3. - 0 - 6.5863109193742275e-004 - -0.2780422866344452 - 0.0830289199948311 - <_> - - <_> - - - - <_>4 11 8 9 -1. - <_>4 14 8 3 3. - 0 - -0.0662109106779099 - -0.3640215098857880 - 0.0600673481822014 - <_> - - <_> - - - - <_>11 3 9 8 -1. - <_>14 3 3 8 3. - 0 - 4.2186300270259380e-003 - -0.1855151057243347 - 0.1282822042703629 - <_> - - <_> - - - - <_>0 4 9 8 -1. - <_>3 4 3 8 3. - 0 - 1.7119459807872772e-003 - -0.2157250940799713 - 0.0868794992566109 - <_> - - <_> - - - - <_>9 4 6 10 -1. - <_>12 4 3 5 2. - <_>9 9 3 5 2. - 0 - -0.0213904809206724 - 0.1112473979592323 - -0.1448650956153870 - <_> - - <_> - - - - <_>0 4 20 4 -1. - <_>0 6 20 2 2. - 0 - 5.5712480098009109e-003 - 0.0625468790531158 - -0.3159820139408112 - <_> - - <_> - - - - <_>2 9 18 3 -1. - <_>8 9 6 3 3. - 0 - 4.5709838159382343e-003 - -0.2364789992570877 - 0.0383995696902275 - <_> - - <_> - - - - <_>3 14 13 3 -1. - <_>3 15 13 1 3. - 0 - -0.0170860309153795 - 0.2065355926752091 - -0.0864056125283241 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -0.0306409504264593 - 0.4152300059795380 - -0.0256018508225679 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - 0.0258034691214561 - 0.0401562303304672 - -0.3744401037693024 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - 0.0264259204268456 - 0.0426257811486721 - -0.4188891053199768 - <_> - - <_> - - - - <_>0 7 10 6 -1. - <_>0 7 5 3 2. - <_>5 10 5 3 2. - 0 - -0.0118497302755713 - -0.3061988055706024 - 0.0515059493482113 - <_> - - <_> - - - - <_>7 1 8 8 -1. - <_>11 1 4 4 2. - <_>7 5 4 4 2. - 0 - -0.0162698496133089 - -0.1987849026918411 - 0.0426832400262356 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -0.0240361597388983 - -0.3321199119091034 - 0.0460914187133312 - <_> - - <_> - - - - <_>10 0 8 4 -1. - <_>10 2 8 2 2. - 0 - 7.3583971243351698e-004 - -0.2067741006612778 - 0.0574182607233524 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - -0.0204231608659029 - -0.2692205905914307 - 0.0448937192559242 - <_> - - <_> - - - - <_>15 11 5 6 -1. - <_>15 14 5 3 2. - 0 - 1.9533000886440277e-003 - 0.0434818491339684 - -0.1429585069417954 - <_> - - <_> - - - - <_>1 6 18 8 -1. - <_>1 6 9 4 2. - <_>10 10 9 4 2. - 0 - 0.0332025401294231 - 0.0611127205193043 - -0.2077313959598541 - <_> - - <_> - - - - <_>4 3 13 3 -1. - <_>4 4 13 1 3. - 0 - 0.0210495498031378 - -0.0551963299512863 - 0.1727333068847656 - <_> - - <_> - - - - <_>1 9 13 2 -1. - <_>1 10 13 1 2. - 0 - -4.2487941682338715e-003 - -0.3120211064815521 - 0.0357145518064499 - <_> - - <_> - - - - <_>9 12 8 8 -1. - <_>13 12 4 4 2. - <_>9 16 4 4 2. - 0 - 0.0145448902621865 - -0.1289152055978775 - 0.1087460964918137 - <_> - - <_> - - - - <_>0 11 5 6 -1. - <_>0 14 5 3 2. - 0 - 4.4858800247311592e-003 - 0.0502648502588272 - -0.2272962033748627 - <_> - - <_> - - - - <_>15 3 5 9 -1. - <_>15 6 5 3 3. - 0 - -0.0720195174217224 - -0.5035715103149414 - 0.0249091703444719 - <_> - - <_> - - - - <_>0 4 2 16 -1. - <_>0 12 2 8 2. - 0 - 0.0740883126854897 - -0.0261101797223091 - 0.4690495133399963 - <_> - - <_> - - - - <_>15 3 5 9 -1. - <_>15 6 5 3 3. - 0 - -0.0193762108683586 - -0.0877423286437988 - 0.0526968091726303 - <_> - - <_> - - - - <_>2 5 16 10 -1. - <_>2 5 8 5 2. - <_>10 10 8 5 2. - 0 - -0.0151920598000288 - -0.1647035032510757 - 0.0748419165611267 - <_> - - <_> - - - - <_>6 7 14 2 -1. - <_>6 8 14 1 2. - 0 - 6.7975218407809734e-003 - -0.1251268982887268 - 0.0820929929614067 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - -1.9816169515252113e-003 - 0.0612598806619644 - -0.1913881003856659 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - -0.0403438396751881 - -0.3463464081287384 - 0.0338140912353992 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - -9.7851715981960297e-003 - 0.2477196007966995 - -0.0510314293205738 - <_> - - <_> - - - - <_>9 6 3 14 -1. - <_>10 6 1 14 3. - 0 - 0.0130610503256321 - -0.0593781694769859 - 0.1429872065782547 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 0.0125199696049094 - -0.1008744016289711 - 0.2061744928359985 - <_> - - <_> - - - - <_>9 13 6 7 -1. - <_>11 13 2 7 3. - 0 - 0.0616200491786003 - 0.0108506204560399 - -0.4997675120830536 - <_> - - <_> - - - - <_>6 0 2 13 -1. - <_>7 0 1 13 2. - 0 - 0.0153516102582216 - 0.0304591804742813 - -0.4024853110313416 - <_> - - <_> - - - - <_>3 7 15 3 -1. - <_>8 7 5 3 3. - 0 - 6.7390319891273975e-003 - -0.1523087024688721 - 0.0347637310624123 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - 0.0271660406142473 - 0.0324651785194874 - -0.3790565133094788 - <_> - - <_> - - - - <_>12 11 8 6 -1. - <_>12 13 8 2 3. - 0 - -0.0494436509907246 - -0.4104248881340027 - 0.0152657004073262 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - 0.0329997092485428 - 0.0289222393184900 - -0.4311968088150024 - <_> - - <_> - - - - <_>9 1 6 7 -1. - <_>11 1 2 7 3. - 0 - 0.0376041494309902 - 0.0209206994622946 - -0.3547154068946838 - <_> - - <_> - - - - <_>2 9 9 10 -1. - <_>5 9 3 10 3. - 0 - 0.0173116400837898 - -0.1549087017774582 - 0.0735432282090187 - <_> - - <_> - - - - <_>14 0 3 18 -1. - <_>15 0 1 18 3. - 0 - -1.7037079669535160e-003 - -0.0953469201922417 - 0.0515172891318798 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0150087904185057 - 0.2105749994516373 - -0.0521971695125103 - <_> - - <_> - - - - <_>9 1 6 7 -1. - <_>11 1 2 7 3. - 0 - -0.0412833616137505 - -0.4872767925262451 - 0.0166863705962896 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>10 2 2 8 2. - 0 - -0.0171902999281883 - 0.2307074964046478 - -0.0570944398641586 - <_> - - <_> - - - - <_>14 0 3 18 -1. - <_>15 0 1 18 3. - 0 - 0.0397070087492466 - 0.0170162301510572 - -0.3823386132717133 - <_> - - <_> - - - - <_>0 5 12 4 -1. - <_>4 5 4 4 3. - 0 - 0.0470514707267284 - 0.0422392487525940 - -0.2805036902427673 - <_> - - <_> - - - - <_>6 0 13 3 -1. - <_>6 1 13 1 3. - 0 - -0.0119489496573806 - -0.2305649071931839 - 0.0265321899205446 - <_> - - <_> - - - - <_>0 6 20 3 -1. - <_>0 7 20 1 3. - 0 - -0.0798574090003967 - -0.8496391773223877 - 0.0125821800902486 - <_> - - <_> - - - - <_>10 8 8 8 -1. - <_>14 8 4 4 2. - <_>10 12 4 4 2. - 0 - 0.0256276391446590 - 0.0233112405985594 - -0.2492381930351257 - <_> - - <_> - - - - <_>1 1 5 9 -1. - <_>1 4 5 3 3. - 0 - -0.0310943704098463 - -0.2376987040042877 - 0.0461161285638809 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 0.0465732216835022 - 0.0287702903151512 - -0.5373960137367249 - <_> - - <_> - - - - <_>1 4 16 6 -1. - <_>1 4 8 3 2. - <_>9 7 8 3 2. - 0 - -0.0540669299662113 - 0.2779476046562195 - -0.0477707684040070 - <_> - - <_> - - - - <_>9 0 10 6 -1. - <_>9 2 10 2 3. - 0 - 1.8918470013886690e-003 - -0.0982548296451569 - 0.0478564202785492 - <_> - - <_> - - - - <_>4 3 12 6 -1. - <_>4 5 12 2 3. - 0 - 0.0332293286919594 - -0.0525953508913517 - 0.2356410026550293 - <_> - - <_> - - - - <_>9 5 8 8 -1. - <_>9 9 8 4 2. - 0 - 1.1775200255215168e-003 - -0.2340148985385895 - 0.0261420700699091 - <_> - - <_> - - - - <_>1 0 9 6 -1. - <_>1 2 9 2 3. - 0 - 1.9482020288705826e-003 - -0.1522361934185028 - 0.0787514671683311 - <_> - - <_> - - - - <_>8 3 9 5 -1. - <_>11 3 3 5 3. - 0 - 0.0559455081820488 - 0.0115406997501850 - -0.1988953948020935 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0294553693383932 - 0.0333157703280449 - -0.3285048902034760 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - 4.0880320593714714e-003 - -0.0861784070730209 - 0.0795757994055748 - <_> - - <_> - - - - <_>3 3 3 16 -1. - <_>4 3 1 16 3. - 0 - -5.9127728454768658e-003 - -0.1773830056190491 - 0.0606489405035973 - <_> - - <_> - - - - <_>14 0 3 17 -1. - <_>15 0 1 17 3. - 0 - -0.0624196790158749 - 0.2439669966697693 - -3.3243889920413494e-003 - <_> - - <_> - - - - <_>0 10 9 7 -1. - <_>3 10 3 7 3. - 0 - -0.0371951200067997 - 0.2680704891681671 - -0.0399792715907097 - <_> - - <_> - - - - <_>8 0 7 12 -1. - <_>8 4 7 4 3. - 0 - -0.1432476043701172 - 0.2933282852172852 - -0.0268972907215357 - <_> - - <_> - - - - <_>0 3 5 9 -1. - <_>0 6 5 3 3. - 0 - -0.0428452193737030 - -0.2528375089168549 - 0.0412320494651794 - <_> - - <_> - - - - <_>9 9 10 5 -1. - <_>9 9 5 5 2. - 0 - 0.1156008988618851 - -0.0149658499285579 - 0.2418725043535233 - <_> - - <_> - - - - <_>1 9 10 5 -1. - <_>6 9 5 5 2. - 0 - 0.0501694716513157 - 0.0885905474424362 - -0.1244257017970085 - <_> - - <_> - - - - <_>4 8 15 3 -1. - <_>9 8 5 3 3. - 0 - 0.1020011007785797 - 0.0123963197693229 - -0.3698217868804932 - <_> - - <_> - - - - <_>1 8 15 3 -1. - <_>6 8 5 3 3. - 0 - -5.2397060208022594e-003 - -0.2591294944286346 - 0.0405502989888191 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>10 5 5 3 2. - <_>5 8 5 3 2. - 0 - -0.0192278102040291 - 0.2006423026323319 - -0.0652235820889473 - <_> - - <_> - - - - <_>3 5 8 8 -1. - <_>3 9 8 4 2. - 0 - -0.0111331203952432 - -0.4626218974590302 - 0.0244280304759741 - <_> - - <_> - - - - <_>0 1 20 2 -1. - <_>0 1 10 2 2. - 0 - 0.0975510105490685 - 0.0129011897370219 - -0.7402247190475464 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - 0.0460717417299747 - 0.0184539891779423 - -0.4841982126235962 - <_> - - <_> - - - - <_>8 12 8 8 -1. - <_>12 12 4 4 2. - <_>8 16 4 4 2. - 0 - -0.0835335329174995 - -0.8843476772308350 - 1.6764779575169086e-003 - <_> - - <_> - - - - <_>4 12 8 8 -1. - <_>4 12 4 4 2. - <_>8 16 4 4 2. - 0 - 6.0535832308232784e-003 - -0.1586564034223557 - 0.0677586719393730 - <_> - - <_> - - - - <_>7 15 13 4 -1. - <_>7 17 13 2 2. - 0 - -1.3178240042179823e-003 - -0.0879431292414665 - 0.0665913596749306 - <_> - - <_> - - - - <_>0 14 12 6 -1. - <_>0 14 6 3 2. - <_>6 17 6 3 2. - 0 - -0.0209397301077843 - 0.2335896939039230 - -0.0521456710994244 - <_> - - <_> - - - - <_>12 11 8 8 -1. - <_>16 11 4 4 2. - <_>12 15 4 4 2. - 0 - -0.0881454199552536 - 0.4808130860328674 - -0.0119176404550672 - <_> - - <_> - - - - <_>0 11 8 8 -1. - <_>0 11 4 4 2. - <_>4 15 4 4 2. - 0 - 0.0163445994257927 - -0.0538380593061447 - 0.2234991043806076 - <_> - - <_> - - - - <_>6 0 10 19 -1. - <_>6 0 5 19 2. - 0 - -0.2283399999141693 - 0.3601382076740265 - -0.0187279097735882 - <_> - - <_> - - - - <_>0 12 13 3 -1. - <_>0 13 13 1 3. - 0 - 8.4737362340092659e-003 - -0.0562071315944195 - 0.1608947068452835 - <_> - - <_> - - - - <_>7 2 6 12 -1. - <_>7 8 6 6 2. - 0 - -9.8505034111440182e-004 - 0.1010883003473282 - -0.1045522987842560 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 4.9648447893559933e-003 - -0.0793593674898148 - 0.1314024031162262 - <_> - - <_> - - - - <_>11 14 9 4 -1. - <_>11 16 9 2 2. - 0 - -0.0131716104224324 - -0.1209981963038445 - 0.0377301312983036 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 8.2112876698374748e-003 - -0.0535974092781544 - 0.2215657979249954 - <_> - - <_> - - - - <_>11 12 8 6 -1. - <_>11 14 8 2 3. - 0 - -0.0489305593073368 - -0.3934924900531769 - 0.0198503099381924 - <_> - - <_> - - - - <_>1 12 8 6 -1. - <_>1 14 8 2 3. - 0 - 7.4527352117002010e-003 - 0.0582184381783009 - -0.2531755864620209 - <_> - - <_> - - - - <_>4 0 13 8 -1. - <_>4 4 13 4 2. - 0 - 0.0773886516690254 - -0.0577246807515621 - 0.2015454024076462 - <_> - - <_> - - - - <_>8 0 4 15 -1. - <_>8 5 4 5 3. - 0 - 4.9968929961323738e-003 - 0.0892606303095818 - -0.1308245956897736 - <_> - - <_> - - - - <_>10 8 8 8 -1. - <_>14 8 4 4 2. - <_>10 12 4 4 2. - 0 - -0.0409772694110870 - -0.1719042956829071 - 0.0220514498651028 - <_> - - <_> - - - - <_>8 7 3 10 -1. - <_>8 12 3 5 2. - 0 - 3.0041709542274475e-003 - 0.0453798696398735 - -0.2413036972284317 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - 0.1543570011854172 - -0.0329164713621140 - 0.3209039866924286 - <_> - - <_> - - - - <_>2 9 5 9 -1. - <_>2 12 5 3 3. - 0 - 0.0151535095646977 - 0.0535764582455158 - -0.1627317965030670 - <_> - - <_> - - - - <_>3 6 16 3 -1. - <_>3 6 8 3 2. - 0 - 0.0952092930674553 - 0.0131325302645564 - -0.4338963031768799 - <_> - - <_> - - - - <_>3 13 12 7 -1. - <_>9 13 6 7 2. - 0 - -0.0220660194754601 - 0.1835885047912598 - -0.0539956800639629 - <_> - - <_> - - - - <_>10 2 3 15 -1. - <_>11 2 1 15 3. - 0 - -0.0406234301626682 - -0.4568724930286408 - 0.0111194001510739 - <_> - - <_> - - - - <_>7 2 3 15 -1. - <_>8 2 1 15 3. - 0 - -2.1428579930216074e-003 - 0.0952214673161507 - -0.1043168976902962 - <_> - - <_> - - - - <_>10 1 7 4 -1. - <_>10 3 7 2 2. - 0 - -9.6598910167813301e-003 - -0.2812178134918213 - 0.0313871800899506 - <_> - - <_> - - - - <_>5 0 7 12 -1. - <_>5 4 7 4 3. - 0 - -0.1786002069711685 - 0.4667539000511169 - -0.0222962908446789 - <_> - - <_> - - - - <_>10 1 7 4 -1. - <_>10 3 7 2 2. - 0 - -2.0536049269139767e-003 - -0.0884601101279259 - 0.0258634798228741 - <_> - - <_> - - - - <_>3 12 4 8 -1. - <_>3 16 4 4 2. - 0 - -4.6333461068570614e-003 - 0.0607207790017128 - -0.1656270027160645 - <_> - - <_> - - - - <_>6 7 9 5 -1. - <_>9 7 3 5 3. - 0 - 0.0468479916453362 - -0.0406967587769032 - 0.1059897020459175 - <_> - - <_> - - - - <_>5 0 6 16 -1. - <_>7 0 2 16 3. - 0 - -0.0905382335186005 - -0.6336705088615418 - 0.0162777006626129 - <_> - - <_> - - - - <_>10 8 8 8 -1. - <_>14 8 4 4 2. - <_>10 12 4 4 2. - 0 - -0.0662609264254570 - -0.2879275977611542 - 6.1133177950978279e-003 - <_> - - <_> - - - - <_>2 8 8 8 -1. - <_>2 8 4 4 2. - <_>6 12 4 4 2. - 0 - 0.0247317291796207 - 0.0400579310953617 - -0.2327253073453903 - <_> - - <_> - - - - <_>4 8 16 8 -1. - <_>12 8 8 4 2. - <_>4 12 8 4 2. - 0 - -0.1373658031225205 - 0.4725002944469452 - -8.2997139543294907e-003 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>2 10 3 5 2. - <_>5 15 3 5 2. - 0 - -0.0634149014949799 - 0.4303930103778839 - -0.0210490003228188 - <_> - - <_> - - - - <_>10 10 4 8 -1. - <_>10 14 4 4 2. - 0 - -0.0330718196928501 - -0.1107349991798401 - 0.0337187312543392 - <_> - - <_> - - - - <_>1 6 16 3 -1. - <_>9 6 8 3 2. - 0 - 0.1093479022383690 - 0.0135084995999932 - -0.6550201773643494 - <_> - - <_> - - - - <_>10 1 7 4 -1. - <_>10 3 7 2 2. - 0 - 0.0159258805215359 - 0.0336726903915405 - -0.0707790628075600 - <_> - - <_> - - - - <_>3 1 7 4 -1. - <_>3 3 7 2 2. - 0 - -7.4891438707709312e-003 - -0.2647283971309662 - 0.0381838604807854 - <_> - - <_> - - - - <_>10 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 9.8611623980104923e-004 - -0.1614990979433060 - 0.0294753909111023 - <_> - - <_> - - - - <_>4 0 10 19 -1. - <_>9 0 5 19 2. - 0 - 0.2520647943019867 - -0.0323824882507324 - 0.3106861114501953 - <_> - - <_> - - - - <_>12 0 3 13 -1. - <_>13 0 1 13 3. - 0 - -0.0288927294313908 - -0.4911664128303528 - 0.0149231497198343 - <_> - - <_> - - - - <_>1 4 18 5 -1. - <_>7 4 6 5 3. - 0 - -0.0553898811340332 - 0.5754340887069702 - -0.0185828395187855 - <_> - - <_> - - - - <_>10 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 0.0314145982265472 - 0.0207207594066858 - -0.0947296470403671 - <_> - - <_> - - - - <_>6 2 4 7 -1. - <_>8 2 2 7 2. - 0 - 2.8307519387453794e-003 - -0.2251935005187988 - 0.0415641590952873 - <_> - - <_> - - - - <_>2 1 16 3 -1. - <_>2 1 8 3 2. - 0 - -0.0337512604892254 - -0.1664658039808273 - 0.0726936236023903 - <_> - - <_> - - - - <_>5 7 7 9 -1. - <_>5 10 7 3 3. - 0 - -0.0382902882993221 - 0.7921373248100281 - -0.0114345299080014 - <_> - - <_> - - - - <_>4 5 14 3 -1. - <_>4 6 14 1 3. - 0 - -0.0179894808679819 - 0.1136166974902153 - -0.0440325103700161 - <_> - - <_> - - - - <_>2 13 7 6 -1. - <_>2 15 7 2 3. - 0 - 0.0181465297937393 - 0.0342195406556129 - -0.2504163086414337 - <_> - - <_> - - - - <_>10 10 4 8 -1. - <_>10 14 4 4 2. - 0 - -0.0691331923007965 - -0.2979319989681244 - 4.9929767847061157e-003 - <_> - - <_> - - - - <_>5 0 3 18 -1. - <_>5 6 3 6 3. - 0 - 0.1252592056989670 - 0.0107090799137950 - -0.7634230852127075 - <_> - - <_> - - - - <_>10 0 10 10 -1. - <_>15 0 5 5 2. - <_>10 5 5 5 2. - 0 - 0.0376835614442825 - -0.0348669104278088 - 0.1953237950801849 - <_> - - <_> - - - - <_>0 4 14 3 -1. - <_>0 5 14 1 3. - 0 - -7.6676071621477604e-003 - 0.1711481958627701 - -0.0511017814278603 - <_> - - <_> - - - - <_>6 4 13 3 -1. - <_>6 5 13 1 3. - 0 - 3.5654550883919001e-003 - -0.0690719112753868 - 0.0657246932387352 - <_> - - <_> - - - - <_>5 0 3 13 -1. - <_>6 0 1 13 3. - 0 - -0.0189686007797718 - -0.4097692966461182 - 0.0205602291971445 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - -0.0202113706618547 - 0.3350892066955566 - -0.0279074106365442 - <_> - - <_> - - - - <_>4 9 6 7 -1. - <_>6 9 2 7 3. - 0 - -0.0190645996481180 - 0.1936192959547043 - -0.0486482195556164 - <_> - - <_> - - - - <_>2 9 18 3 -1. - <_>8 9 6 3 3. - 0 - 0.1031334027647972 - 0.0193824600428343 - -0.1119868010282517 - <_> - - <_> - - - - <_>0 9 18 3 -1. - <_>6 9 6 3 3. - 0 - 9.8863355815410614e-003 - -0.2404316067695618 - 0.0443056002259254 - <_> - - <_> - - - - <_>2 17 17 3 -1. - <_>2 18 17 1 3. - 0 - 0.0432936996221542 - 0.0107287801802158 - -0.6466053724288940 - <_> - - <_> - - - - <_>8 1 3 19 -1. - <_>9 1 1 19 3. - 0 - 0.0618783310055733 - 0.0102918995544314 - -0.7296711206436157 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 9.7703160718083382e-003 - 0.0313111804425716 - -0.1560508012771606 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -0.0831750631332397 - -0.3304534852504730 - 0.0239973906427622 - <_> - - <_> - - - - <_>4 2 12 12 -1. - <_>4 6 12 4 3. - 0 - -0.3172465860843658 - 0.5476077198982239 - -0.0178533792495728 - <_> - - <_> - - - - <_>0 17 13 3 -1. - <_>0 18 13 1 3. - 0 - 6.7434520460665226e-003 - -0.0669694393873215 - 0.1265795975923538 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 0.0408868901431561 - 4.3191551230847836e-003 - -0.2203239947557449 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 6.4959921874105930e-003 - 0.0540977418422699 - -0.1550489962100983 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0328323505818844 - 0.3077057898044586 - -0.0243469104170799 - <_> - - <_> - - - - <_>4 8 11 12 -1. - <_>4 12 11 4 3. - 0 - -0.0161279607564211 - -0.1047791987657547 - 0.0912674665451050 - <_> - - <_> - - - - <_>12 8 5 6 -1. - <_>12 11 5 3 2. - 0 - 0.0346466712653637 - 0.0140302302315831 - -0.1820760071277618 - <_> - - <_> - - - - <_>3 8 5 6 -1. - <_>3 11 5 3 2. - 0 - -0.0330054089426994 - 0.3869892954826355 - -0.0218596290796995 - <_> - - <_> - - - - <_>13 3 7 6 -1. - <_>13 5 7 2 3. - 0 - -0.0439083389937878 - -0.3062177896499634 - 0.0227748006582260 - <_> - - <_> - - - - <_>3 0 3 17 -1. - <_>4 0 1 17 3. - 0 - 0.0248428992927074 - 0.0320772416889668 - -0.2527902126312256 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 0.0103312600404024 - -0.0605512000620365 - 0.1211913004517555 - <_> - - <_> - - - - <_>5 9 4 8 -1. - <_>5 13 4 4 2. - 0 - -0.0678322464227676 - -0.5583338737487793 - 0.0153369996696711 - <_> - - <_> - - - - <_>13 3 7 6 -1. - <_>13 5 7 2 3. - 0 - 0.0349478684365749 - 0.0116471797227860 - -0.2556365132331848 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - -0.0252617895603180 - 0.3283202052116394 - -0.0233572106808424 - <_> - - <_> - - - - <_>7 1 7 14 -1. - <_>7 8 7 7 2. - 0 - 7.5701558962464333e-003 - 0.0711838826537132 - -0.0838781818747520 - <_> - - <_> - - - - <_>2 0 15 8 -1. - <_>2 4 15 4 2. - 0 - 0.1180910021066666 - -0.0418099910020828 - 0.2208334952592850 - <_> - - <_> - - - - <_>1 4 18 3 -1. - <_>7 4 6 3 3. - 0 - 0.0363322310149670 - 0.1741527020931244 - -0.0517880804836750 - <_> - - <_> - - - - <_>0 2 10 16 -1. - <_>5 2 5 16 2. - 0 - 0.0132168503478169 - -0.4769985079765320 - 0.0188783891499043 - <_> - - <_> - - - - <_>5 2 15 12 -1. - <_>5 6 15 4 3. - 0 - 0.0143251102417707 - 0.0218347609043121 - -0.1396169066429138 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>9 0 2 8 3. - 0 - 1.3779220171272755e-003 - -0.2015677988529205 - 0.0399253815412521 - <_> - - <_> - - - - <_>5 1 15 5 -1. - <_>10 1 5 5 3. - 0 - 0.1449285000562668 - -0.0339473113417625 - 0.1480593979358673 - <_> - - <_> - - - - <_>0 8 12 9 -1. - <_>4 8 4 9 3. - 0 - 0.2033672034740448 - -0.0282801594585180 - 0.3046959936618805 - <_> - - <_> - - - - <_>6 5 10 6 -1. - <_>11 5 5 3 2. - <_>6 8 5 3 2. - 0 - -0.0305505208671093 - 0.1575158983469009 - -0.0343396589159966 - <_> - - <_> - - - - <_>3 4 4 12 -1. - <_>5 4 2 12 2. - 0 - -0.0110678598284721 - 0.2468834966421127 - -0.0375544913113117 - <_> - - <_> - - - - <_>13 0 7 4 -1. - <_>13 2 7 2 2. - 0 - 0.0259812101721764 - 0.0219940301030874 - -0.1476574987173080 - <_> - - <_> - - - - <_>0 2 10 12 -1. - <_>0 8 10 6 2. - 0 - -0.0483319386839867 - -0.2558029890060425 - 0.0328578688204288 - <_> - - <_> - - - - <_>4 8 16 3 -1. - <_>4 8 8 3 2. - 0 - 0.0152682801708579 - 0.0621620416641235 - -0.0518118105828762 - <_> - - <_> - - - - <_>4 8 11 12 -1. - <_>4 14 11 6 2. - 0 - -0.2439073026180267 - 0.5033984780311585 - -0.0168641693890095 - <_> - - <_> - - - - <_>2 1 16 3 -1. - <_>2 2 16 1 3. - 0 - -3.2398870680481195e-003 - -0.1385017037391663 - 0.0637383162975311 - <_> - - <_> - - - - <_>4 2 11 6 -1. - <_>4 4 11 2 3. - 0 - 0.0614509284496307 - -0.0569628290832043 - 0.1470678001642227 - <_> - - <_> - - - - <_>11 9 8 6 -1. - <_>11 11 8 2 3. - 0 - 0.0431614890694618 - 0.0234411004930735 - -0.2692278027534485 - <_> - - <_> - - - - <_>0 0 13 3 -1. - <_>0 1 13 1 3. - 0 - -0.0113708600401878 - -0.2613599896430969 - 0.0336247608065605 - <_> - - <_> - - - - <_>2 4 16 3 -1. - <_>2 5 16 1 3. - 0 - -0.0154185499995947 - 0.2215317934751511 - -0.0408664904534817 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0454872287809849 - -0.0315987505018711 - 0.2568730115890503 - <_> - - <_> - - - - <_>6 2 13 3 -1. - <_>6 3 13 1 3. - 0 - -0.0158796198666096 - -0.2998133897781372 - 0.0270061995834112 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - 0.0570124983787537 - 0.0151795800775290 - -0.5207880735397339 - <_> - - <_> - - - - <_>2 7 16 7 -1. - <_>2 7 8 7 2. - 0 - -0.1503849029541016 - 0.2516432106494904 - -0.0407965108752251 - <_> - - <_> - - - - <_>6 13 6 7 -1. - <_>8 13 2 7 3. - 0 - -0.0422460399568081 - -0.4830358028411865 - 0.0192220397293568 - <_> - - <_> - - - - <_>6 6 10 6 -1. - <_>11 6 5 3 2. - <_>6 9 5 3 2. - 0 - -0.0749284699559212 - -0.9545899033546448 - 4.4229729101061821e-003 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -0.0212518405169249 - 0.3185069859027863 - -0.0280219707638025 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - 0.0539837814867496 - 0.0270374808460474 - -0.3443068861961365 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>9 6 2 9 3. - 0 - 0.0335725806653500 - -0.0765458792448044 - 0.1425555050373077 - <_> - - <_> - - - - <_>9 1 3 13 -1. - <_>10 1 1 13 3. - 0 - -6.7975879646837711e-003 - 0.1774832010269165 - -0.0431553386151791 - <_> - - <_> - - - - <_>8 1 3 13 -1. - <_>9 1 1 13 3. - 0 - -1.3311849907040596e-003 - 0.1549810022115707 - -0.0762618333101273 - <_> - - <_> - - - - <_>6 1 8 12 -1. - <_>10 1 4 6 2. - <_>6 7 4 6 2. - 0 - 0.0393646992743015 - 0.0369915887713432 - -0.2424355000257492 - <_> - - <_> - - - - <_>4 5 10 6 -1. - <_>4 5 5 3 2. - <_>9 8 5 3 2. - 0 - -6.8364520557224751e-003 - 0.1074364036321640 - -0.0930581763386726 - <_> - - <_> - - - - <_>9 3 6 10 -1. - <_>12 3 3 5 2. - <_>9 8 3 5 2. - 0 - 0.0161180105060339 - -0.0356909111142159 - 0.2418579012155533 - <_> - - <_> - - - - <_>2 1 15 6 -1. - <_>2 3 15 2 3. - 0 - -0.0706200897693634 - 0.6336339116096497 - -0.0124382898211479 - <_> - - <_> - - - - <_>2 1 18 16 -1. - <_>8 1 6 16 3. - 0 - 0.4436163008213043 - -0.0372217893600464 - 0.1189270019531250 - <_> - - <_> - - - - <_>2 1 14 6 -1. - <_>9 1 7 6 2. - 0 - -0.0818992331624031 - 0.3485333919525147 - -0.0252110194414854 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - -8.2997446879744530e-003 - -0.3089908957481384 - 0.0257782395929098 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0297303907573223 - -0.3075981140136719 - 0.0255308207124472 - <_> - - <_> - - - - <_>8 1 12 14 -1. - <_>8 1 6 14 2. - 0 - -0.0260144900530577 - -0.1216239035129547 - 0.0183383505791426 - <_> - - <_> - - - - <_>0 1 12 14 -1. - <_>6 1 6 14 2. - 0 - 4.5121149742044508e-004 - -0.5473784804344177 - 0.0135647496208549 - <_> - - <_> - - - - <_>2 3 18 13 -1. - <_>8 3 6 13 3. - 0 - 0.1867994070053101 - 0.0780398473143578 - -0.0581372715532780 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 3.1894310377538204e-003 - -0.2497601956129074 - 0.0308658406138420 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0294490698724985 - 0.1048920005559921 - -0.0488691292703152 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - 0.0296149700880051 - -0.0222617201507092 - 0.3499243855476379 - <_> - - <_> - - - - <_>7 7 13 2 -1. - <_>7 8 13 1 2. - 0 - 0.0398820601403713 - 9.6727507188916206e-003 - -0.6791443228721619 - <_> - - <_> - - - - <_>5 13 10 6 -1. - <_>5 13 5 3 2. - <_>10 16 5 3 2. - 0 - -0.0244044195860624 - -0.2674382925033569 - 0.0303603708744049 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - 0.0434818491339684 - -0.0233721993863583 - 0.2135642021894455 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - -0.0481283701956272 - -0.3689002990722656 - 0.0228328201919794 - <_> - - <_> - - - - <_>7 2 12 6 -1. - <_>13 2 6 3 2. - <_>7 5 6 3 2. - 0 - -1.3142440002411604e-003 - 0.0567646883428097 - -0.1379531025886536 - <_> - - <_> - - - - <_>4 2 12 6 -1. - <_>4 2 6 3 2. - <_>10 5 6 3 2. - 0 - 2.1767991129308939e-003 - 0.0824462622404099 - -0.1051168963313103 - <_> - - <_> - - - - <_>12 9 4 8 -1. - <_>12 13 4 4 2. - 0 - -0.0274710506200790 - 0.0964383408427238 - -0.0515207797288895 - <_> - - <_> - - - - <_>0 8 16 8 -1. - <_>0 8 8 4 2. - <_>8 12 8 4 2. - 0 - 0.0520031712949276 - -0.0232407599687576 - 0.3590059876441956 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>15 10 5 3 2. - <_>10 13 5 3 2. - 0 - 0.0296817403286695 - 0.0146415596827865 - -0.2150088995695114 - <_> - - <_> - - - - <_>0 8 4 8 -1. - <_>0 12 4 4 2. - 0 - -0.0475459508597851 - -0.3883490860462189 - 0.0220626406371593 - <_> - - <_> - - - - <_>10 2 6 12 -1. - <_>13 2 3 6 2. - <_>10 8 3 6 2. - 0 - -0.0969008132815361 - -0.4341281056404114 - 6.4087379723787308e-003 - <_> - - <_> - - - - <_>0 0 20 14 -1. - <_>0 7 20 7 2. - 0 - -0.3821898996829987 - -0.9017667174339294 - 7.9825157299637794e-003 - <_> - - <_> - - - - <_>11 9 7 6 -1. - <_>11 11 7 2 3. - 0 - -0.0343893095850945 - -0.3185026943683624 - 9.1135511174798012e-003 - <_> - - <_> - - - - <_>1 9 8 6 -1. - <_>1 11 8 2 3. - 0 - 0.0390687882900238 - 0.0284209605306387 - -0.2657074928283691 - <_> - - <_> - - - - <_>13 1 7 15 -1. - <_>13 6 7 5 3. - 0 - 0.1003170013427734 - -0.0161553993821144 - 0.1221268996596336 - <_> - - <_> - - - - <_>0 1 7 15 -1. - <_>0 6 7 5 3. - 0 - -0.1085721030831337 - 0.3774287104606628 - -0.0240144208073616 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - -4.3303978600306436e-005 - 0.0203080605715513 - -0.1306051015853882 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - -0.0387572795152664 - -0.1582642048597336 - 0.0491292290389538 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 0.0686680898070335 - 5.5041261948645115e-003 - -0.7222251892089844 - <_> - - <_> - - - - <_>4 6 10 6 -1. - <_>4 6 5 3 2. - <_>9 9 5 3 2. - 0 - -4.4268090277910233e-003 - 0.0822630599141121 - -0.1035472974181175 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -3.1016240245662630e-004 - 0.0904322564601898 - -0.1034862995147705 - <_> - - <_> - - - - <_>1 7 12 4 -1. - <_>5 7 4 4 3. - 0 - 0.0377030707895756 - 0.0601263381540775 - -0.1611139029264450 - <_> - - <_> - - - - <_>14 1 2 19 -1. - <_>14 1 1 19 2. - 0 - 0.0416721291840076 - 8.5145309567451477e-003 - -0.2421742975711823 - <_> - - <_> - - - - <_>4 1 2 19 -1. - <_>5 1 1 19 2. - 0 - -6.6434321925044060e-003 - -0.2717247903347015 - 0.0314632914960384 - <_> - - <_> - - - - <_>12 10 5 6 -1. - <_>12 13 5 3 2. - 0 - -0.0406586490571499 - -0.1167362034320831 - 0.0148495901376009 - <_> - - <_> - - - - <_>3 10 5 6 -1. - <_>3 13 5 3 2. - 0 - -3.0082110315561295e-003 - 0.0400285683572292 - -0.2307904958724976 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>12 6 5 3 2. - <_>7 9 5 3 2. - 0 - -0.0441877692937851 - -0.1788810938596726 - 0.0173136200755835 - <_> - - <_> - - - - <_>3 11 9 5 -1. - <_>6 11 3 5 3. - 0 - -0.0118137197569013 - 0.1563335955142975 - -0.0547516308724880 - <_> - - <_> - - - - <_>2 1 18 16 -1. - <_>8 1 6 16 3. - 0 - -0.2443345040082932 - 0.4071688950061798 - -3.8216509856283665e-003 - <_> - - <_> - - - - <_>0 1 18 16 -1. - <_>6 1 6 16 3. - 0 - 0.4723018109798431 - -0.0554546192288399 - 0.1641063988208771 - <_> - - <_> - - - - <_>6 12 9 5 -1. - <_>9 12 3 5 3. - 0 - 1.7955109942704439e-003 - 0.0952280014753342 - -0.1293476969003677 - <_> - - <_> - - - - <_>2 10 16 10 -1. - <_>2 10 8 5 2. - <_>10 15 8 5 2. - 0 - -0.0509340390563011 - 0.2215344011783600 - -0.0379755608737469 - <_> - - <_> - - - - <_>12 0 4 14 -1. - <_>14 0 2 7 2. - <_>12 7 2 7 2. - 0 - -0.0595317184925079 - -0.4297493994235992 - 0.0131964096799493 - <_> - - <_> - - - - <_>4 0 4 14 -1. - <_>4 0 2 7 2. - <_>6 7 2 7 2. - 0 - -0.0351493991911411 - -0.2123250961303711 - 0.0368725396692753 - <_> - - <_> - - - - <_>12 7 4 9 -1. - <_>12 7 2 9 2. - 0 - -8.2134327385574579e-004 - 0.0748902410268784 - -0.0697017312049866 - <_> - - <_> - - - - <_>4 7 4 9 -1. - <_>6 7 2 9 2. - 0 - 6.3945869915187359e-003 - 0.0806021094322205 - -0.1048861965537071 - <_> - - <_> - - - - <_>16 0 2 20 -1. - <_>16 0 1 20 2. - 0 - 0.0637358278036118 - 0.0119886603206396 - -0.5950837135314941 - <_> - - <_> - - - - <_>2 0 2 20 -1. - <_>3 0 1 20 2. - 0 - 0.0669420212507248 - 0.0107118599116802 - -0.7024027705192566 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 0.0354453586041927 - 8.8395569473505020e-003 - -0.2058853954076767 - <_> - - <_> - - - - <_>5 1 2 14 -1. - <_>5 8 2 7 2. - 0 - 0.0820254236459732 - 0.0115113602951169 - -0.6708133816719055 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - -0.1215184032917023 - 0.3912476897239685 - -6.0432488098740578e-003 - <_> - - <_> - - - - <_>0 13 18 3 -1. - <_>6 13 6 3 3. - 0 - 0.1373285949230194 - -0.0161360204219818 - 0.4618254899978638 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - -0.1607525944709778 - -1. - 2.4232869036495686e-003 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 6.3080438412725925e-003 - 0.0430266894400120 - -0.1907224953174591 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 6 10 2 2. - 0 - -0.0857729688286781 - -0.5332754850387573 - 0.0141979996114969 - <_> - - <_> - - - - <_>3 14 9 6 -1. - <_>6 14 3 6 3. - 0 - 0.0558534488081932 - 0.0405352599918842 - -0.2081681936979294 - -1.4994510412216187 - 33 - -1 - <_> - - - <_> - - <_> - - - - <_>5 2 9 6 -1. - <_>5 5 9 3 2. - 0 - -0.0110099604353309 - 0.1610680073499680 - -0.2327049970626831 - <_> - - <_> - - - - <_>10 3 10 3 -1. - <_>10 3 5 3 2. - 0 - 5.6892321445047855e-003 - -0.2223366051912308 - 0.1225773990154266 - <_> - - <_> - - - - <_>0 3 8 4 -1. - <_>4 3 4 4 2. - 0 - 4.3932348489761353e-003 - -0.1529338061809540 - 0.1588848978281021 - <_> - - <_> - - - - <_>10 10 7 4 -1. - <_>10 12 7 2 2. - 0 - -5.0024059601128101e-004 - 0.0617161802947521 - -0.2317554056644440 - <_> - - <_> - - - - <_>6 2 4 7 -1. - <_>8 2 2 7 2. - 0 - 4.2015648796223104e-004 - -0.3025949895381928 - 0.0610939487814903 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -4.2626978829503059e-003 - -0.2438767999410629 - 0.0695137828588486 - <_> - - <_> - - - - <_>6 6 4 12 -1. - <_>6 10 4 4 3. - 0 - 6.5330968936905265e-004 - -0.3711237907409668 - 0.0461697801947594 - <_> - - <_> - - - - <_>14 1 6 8 -1. - <_>16 1 2 8 3. - 0 - -0.1016353964805603 - 0.4508996009826660 - -0.0144245103001595 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - -1.3200199464336038e-003 - 0.0757651329040527 - -0.1946184933185577 - <_> - - <_> - - - - <_>9 0 3 18 -1. - <_>9 6 3 6 3. - 0 - -9.8261423408985138e-003 - -0.2744089066982269 - 0.0523732192814350 - <_> - - <_> - - - - <_>0 1 6 8 -1. - <_>2 1 2 8 3. - 0 - -0.0665745511651039 - 0.4280484914779663 - -0.0326409488916397 - <_> - - <_> - - - - <_>9 5 10 6 -1. - <_>14 5 5 3 2. - <_>9 8 5 3 2. - 0 - -9.1772843152284622e-003 - -0.2587639093399048 - 0.0615967884659767 - <_> - - <_> - - - - <_>0 14 14 3 -1. - <_>0 15 14 1 3. - 0 - -2.5353950913995504e-003 - 0.1147368997335434 - -0.1009797975420952 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 4.9194418825209141e-003 - 0.0400274693965912 - -0.1637817025184631 - <_> - - <_> - - - - <_>3 10 14 4 -1. - <_>3 10 7 2 2. - <_>10 12 7 2 2. - 0 - -1.6810640227049589e-003 - -0.1370667070150375 - 0.0803217291831970 - <_> - - <_> - - - - <_>3 8 17 2 -1. - <_>3 9 17 1 2. - 0 - 2.1476070396602154e-003 - -0.2340860068798065 - 0.0431139506399632 - <_> - - <_> - - - - <_>0 5 14 12 -1. - <_>0 11 14 6 2. - 0 - -0.0335024408996105 - -0.2420428991317749 - 0.0491002090275288 - <_> - - <_> - - - - <_>3 7 14 6 -1. - <_>3 9 14 2 3. - 0 - 0.1424178928136826 - -0.0286809802055359 - 0.4780705869197846 - <_> - - <_> - - - - <_>7 1 6 7 -1. - <_>9 1 2 7 3. - 0 - 5.8733951300382614e-004 - -0.2168561071157455 - 0.0485301092267036 - <_> - - <_> - - - - <_>4 18 13 2 -1. - <_>4 19 13 1 2. - 0 - -1.2295519700273871e-003 - 0.0931802466511726 - -0.1015821024775505 - <_> - - <_> - - - - <_>1 6 14 2 -1. - <_>8 6 7 2 2. - 0 - 0.0112106697633863 - 0.0362101793289185 - -0.2310644984245300 - <_> - - <_> - - - - <_>2 5 18 15 -1. - <_>8 5 6 15 3. - 0 - -0.0252359900623560 - 0.0857476219534874 - -0.0544151589274406 - <_> - - <_> - - - - <_>5 6 6 14 -1. - <_>8 6 3 14 2. - 0 - -0.0100140301510692 - -0.1936244070529938 - 0.0502747297286987 - <_> - - <_> - - - - <_>8 5 8 8 -1. - <_>12 5 4 4 2. - <_>8 9 4 4 2. - 0 - -4.5554949901998043e-003 - 0.0886749923229218 - -0.1423750966787338 - <_> - - <_> - - - - <_>5 1 6 5 -1. - <_>8 1 3 5 2. - 0 - -9.5264799892902374e-003 - 0.2675423920154572 - -0.0376324504613876 - <_> - - <_> - - - - <_>6 5 10 12 -1. - <_>11 5 5 6 2. - <_>6 11 5 6 2. - 0 - 2.3753349669277668e-003 - 0.0392619185149670 - -0.1419990956783295 - <_> - - <_> - - - - <_>3 5 12 14 -1. - <_>3 5 6 7 2. - <_>9 12 6 7 2. - 0 - 1.2389000039547682e-003 - 0.0686439126729965 - -0.1806087046861649 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>7 1 13 1 3. - 0 - -1.5835729427635670e-003 - -0.1368415951728821 - 0.0578756891191006 - <_> - - <_> - - - - <_>5 7 9 12 -1. - <_>5 11 9 4 3. - 0 - 0.0652025863528252 - -0.0344483889639378 - 0.2531813979148865 - <_> - - <_> - - - - <_>11 6 4 14 -1. - <_>13 6 2 7 2. - <_>11 13 2 7 2. - 0 - 6.6306376538705081e-005 - -0.0846016332507133 - 0.0916575863957405 - <_> - - <_> - - - - <_>5 6 4 14 -1. - <_>5 6 2 7 2. - <_>7 13 2 7 2. - 0 - 1.5117590010049753e-005 - -0.0933438166975975 - 0.1107939034700394 - <_> - - <_> - - - - <_>3 1 17 2 -1. - <_>3 2 17 1 2. - 0 - -2.2637350484728813e-003 - -0.1953119933605194 - 0.0382635109126568 - <_> - - <_> - - - - <_>7 4 6 16 -1. - <_>7 12 6 8 2. - 0 - 6.5463641658425331e-004 - 0.0478608794510365 - -0.1635490059852600 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>8 6 2 7 2. - 0 - 0.0503452904522419 - -0.0156183699145913 - 0.5266051292419434 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - 8.5375197231769562e-003 - 0.0338947288691998 - -0.2704094052314758 - <_> - - <_> - - - - <_>2 5 18 15 -1. - <_>8 5 6 15 3. - 0 - -0.6162161827087402 - -0.9315608143806458 - 2.6866910047829151e-003 - <_> - - <_> - - - - <_>0 5 18 15 -1. - <_>6 5 6 15 3. - 0 - -0.0267428401857615 - 0.1241556033492088 - -0.0815768614411354 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0147567400708795 - -0.4422414898872376 - 0.0244187396019697 - <_> - - <_> - - - - <_>2 0 12 19 -1. - <_>6 0 4 19 3. - 0 - 0.0120458099991083 - -0.0845528766512871 - 0.0927352979779243 - <_> - - <_> - - - - <_>9 12 11 4 -1. - <_>9 14 11 2 2. - 0 - -0.0401319004595280 - -0.2573471963405609 - 0.0106921102851629 - <_> - - <_> - - - - <_>0 4 20 6 -1. - <_>0 6 20 2 3. - 0 - -1.0760580189526081e-003 - 0.0280271805822849 - -0.2680596113204956 - <_> - - <_> - - - - <_>5 3 10 4 -1. - <_>5 5 10 2 2. - 0 - 7.7456878498196602e-003 - -0.0364016890525818 - 0.2616504132747650 - <_> - - <_> - - - - <_>1 6 12 4 -1. - <_>5 6 4 4 3. - 0 - 0.0135398497804999 - 0.0289459191262722 - -0.2800337970256805 - <_> - - <_> - - - - <_>6 8 14 3 -1. - <_>6 9 14 1 3. - 0 - -0.0124647803604603 - -0.3625848889350891 - 0.0130060398951173 - <_> - - <_> - - - - <_>0 8 14 3 -1. - <_>0 9 14 1 3. - 0 - 0.0352978296577930 - 0.0129187498241663 - -0.5646079778671265 - <_> - - <_> - - - - <_>5 3 13 6 -1. - <_>5 6 13 3 2. - 0 - -0.0557105503976345 - 0.1279485970735550 - -0.0382571183145046 - <_> - - <_> - - - - <_>0 12 11 4 -1. - <_>0 14 11 2 2. - 0 - -4.5230439864099026e-003 - -0.0994105637073517 - 0.0789975225925446 - <_> - - <_> - - - - <_>5 12 13 3 -1. - <_>5 13 13 1 3. - 0 - 2.9874469619244337e-003 - -0.0485091395676136 - 0.1129868030548096 - <_> - - <_> - - - - <_>0 2 20 4 -1. - <_>0 2 10 2 2. - <_>10 4 10 2 2. - 0 - -0.0636133104562759 - -0.6664727926254273 - 0.0112211704254150 - <_> - - <_> - - - - <_>14 1 6 5 -1. - <_>14 1 3 5 2. - 0 - 0.0132444901391864 - -0.0619768686592579 - 0.1312289983034134 - <_> - - <_> - - - - <_>4 11 5 6 -1. - <_>4 14 5 3 2. - 0 - -3.6382430698722601e-004 - 0.0430542416870594 - -0.1699635982513428 - <_> - - <_> - - - - <_>6 1 10 18 -1. - <_>6 10 10 9 2. - 0 - -0.2150018960237503 - -0.4678407907485962 - 0.0122863203287125 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>0 8 3 6 2. - <_>3 14 3 6 2. - 0 - 6.0248938389122486e-003 - -0.0514759197831154 - 0.1523485928773880 - <_> - - <_> - - - - <_>9 9 10 6 -1. - <_>14 9 5 3 2. - <_>9 12 5 3 2. - 0 - 0.0430005714297295 - 3.8120739627629519e-003 - -0.7534918785095215 - <_> - - <_> - - - - <_>1 9 10 6 -1. - <_>1 9 5 3 2. - <_>6 12 5 3 2. - 0 - 8.5592586547136307e-003 - 0.0244704391807318 - -0.3279660940170288 - <_> - - <_> - - - - <_>15 0 3 13 -1. - <_>16 0 1 13 3. - 0 - 2.9510160675272346e-004 - -0.0764569267630577 - 0.0680100470781326 - <_> - - <_> - - - - <_>2 0 3 13 -1. - <_>3 0 1 13 3. - 0 - 9.9761411547660828e-004 - -0.0846806615591049 - 0.0963161364197731 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 5.0175599753856659e-003 - -0.0390481017529964 - 0.1098378971219063 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 5.5693010799586773e-003 - 0.0407193005084991 - -0.1839596033096314 - <_> - - <_> - - - - <_>17 3 3 13 -1. - <_>18 3 1 13 3. - 0 - 1.0486049577593803e-003 - -0.0446220487356186 - 0.0709181129932404 - <_> - - <_> - - - - <_>0 3 3 13 -1. - <_>1 3 1 13 3. - 0 - 3.2043100800365210e-003 - -0.0588391087949276 - 0.1277731060981751 - <_> - - <_> - - - - <_>13 4 6 16 -1. - <_>16 4 3 8 2. - <_>13 12 3 8 2. - 0 - -0.1064466014504433 - 0.4333994984626770 - -0.0124499695375562 - <_> - - <_> - - - - <_>3 2 3 14 -1. - <_>4 2 1 14 3. - 0 - -8.9908082736656070e-004 - -0.1151050031185150 - 0.0633065626025200 - <_> - - <_> - - - - <_>16 1 3 13 -1. - <_>17 1 1 13 3. - 0 - 2.9652470257133245e-003 - -0.0312906801700592 - 0.0728456601500511 - <_> - - <_> - - - - <_>1 1 3 13 -1. - <_>2 1 1 13 3. - 0 - 8.9800870046019554e-004 - -0.0868405029177666 - 0.1002272963523865 - <_> - - <_> - - - - <_>8 6 9 9 -1. - <_>8 9 9 3 3. - 0 - -0.0218740291893482 - 0.7614316940307617 - -4.5735938474535942e-003 - <_> - - <_> - - - - <_>0 2 14 2 -1. - <_>0 3 14 1 2. - 0 - 1.4919589739292860e-003 - 0.0827241688966751 - -0.0968378931283951 - <_> - - <_> - - - - <_>12 5 6 6 -1. - <_>12 5 3 6 2. - 0 - -2.4136069696396589e-003 - 0.0624809414148331 - -0.0505495592951775 - <_> - - <_> - - - - <_>2 5 6 6 -1. - <_>5 5 3 6 2. - 0 - 0.0128938304260373 - -0.0339019894599915 - 0.2803659141063690 - <_> - - <_> - - - - <_>10 1 9 6 -1. - <_>10 3 9 2 3. - 0 - -1.9992720335721970e-003 - -0.1715281009674072 - 0.0400841496884823 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 1.3713949592784047e-003 - -0.1221671998500824 - 0.0621221810579300 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>9 10 2 10 3. - 0 - -8.9740045368671417e-003 - -0.1709423065185547 - 0.0440320000052452 - <_> - - <_> - - - - <_>0 0 2 20 -1. - <_>1 0 1 20 2. - 0 - -2.9300691094249487e-003 - 0.1236404031515122 - -0.0637657269835472 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>16 5 2 14 2. - 0 - -8.0555928871035576e-003 - 0.1155256032943726 - -0.0444588698446751 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 6.4662001095712185e-003 - 0.0751474276185036 - -0.1128100976347923 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>16 5 2 14 2. - 0 - -0.1954178959131241 - -0.8649423122406006 - 3.1826570630073547e-003 - <_> - - <_> - - - - <_>0 5 4 14 -1. - <_>2 5 2 14 2. - 0 - -0.1574075967073441 - -0.7240580916404724 - 9.4235781580209732e-003 - <_> - - <_> - - - - <_>0 11 20 4 -1. - <_>10 11 10 2 2. - <_>0 13 10 2 2. - 0 - -0.0315264612436295 - -0.3821895122528076 - 0.0163867902010679 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - 0.0504390485584736 - -0.0276230406016111 - 0.2730627954006195 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -5.5078428704291582e-004 - 0.0496235489845276 - -0.0544628016650677 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>10 0 1 13 2. - 0 - 1.5047970227897167e-003 - -0.0620589405298233 - 0.1220401003956795 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0457968413829803 - -0.9331477284431458 - 6.8162381649017334e-003 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -9.3235643580555916e-003 - -0.2743670046329498 - 0.0278207492083311 - <_> - - <_> - - - - <_>10 1 9 6 -1. - <_>10 3 9 2 3. - 0 - 0.1068912968039513 - 4.7212988138198853e-003 - -0.4403704106807709 - <_> - - <_> - - - - <_>1 1 9 6 -1. - <_>1 3 9 2 3. - 0 - 1.1234519770368934e-003 - -0.1416224986314774 - 0.0475113689899445 - <_> - - <_> - - - - <_>11 0 5 8 -1. - <_>11 4 5 4 2. - 0 - 6.7312899045646191e-003 - -0.0458814799785614 - 0.1134274005889893 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - 0.0412641502916813 - 0.0114067802205682 - -0.6289417147636414 - <_> - - <_> - - - - <_>9 2 6 11 -1. - <_>11 2 2 11 3. - 0 - -0.0737887993454933 - -0.4192483127117157 - 7.9344836995005608e-003 - <_> - - <_> - - - - <_>5 2 6 11 -1. - <_>7 2 2 11 3. - 0 - -0.0326695293188095 - 0.2222491055727005 - -0.0308459792286158 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>10 1 3 5 2. - <_>7 6 3 5 2. - 0 - -5.9001590125262737e-003 - -0.1500352025032044 - 0.0458197109401226 - <_> - - <_> - - - - <_>3 2 10 5 -1. - <_>8 2 5 5 2. - 0 - -0.0741418674588203 - 0.5623661279678345 - -0.0111841196194291 - <_> - - <_> - - - - <_>2 17 17 3 -1. - <_>2 18 17 1 3. - 0 - -0.0171105898916721 - -0.3088833093643189 - 0.0173403508961201 - <_> - - <_> - - - - <_>0 13 14 3 -1. - <_>0 14 14 1 3. - 0 - 2.4508470669388771e-003 - -0.0570740811526775 - 0.1130689010024071 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -0.0211579799652100 - 0.2026463001966476 - -0.0147051699459553 - <_> - - <_> - - - - <_>7 10 4 10 -1. - <_>7 15 4 5 2. - 0 - 7.1819419972598553e-003 - 0.0297881998121738 - -0.2230837047100067 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 5.0557879731059074e-003 - -0.0262572802603245 - 0.1202829033136368 - <_> - - <_> - - - - <_>2 12 16 6 -1. - <_>2 14 16 2 3. - 0 - 0.0126106599345803 - 0.0259652994573116 - -0.2575523853302002 - <_> - - <_> - - - - <_>5 9 13 3 -1. - <_>5 10 13 1 3. - 0 - 3.0165250791469589e-005 - -0.1199491992592812 - 0.0289165005087852 - <_> - - <_> - - - - <_>8 5 4 12 -1. - <_>8 9 4 4 3. - 0 - -1.3415860012173653e-003 - 0.2059284001588821 - -0.0328030399978161 - <_> - - <_> - - - - <_>6 1 14 6 -1. - <_>13 1 7 3 2. - <_>6 4 7 3 2. - 0 - 5.9342157328501344e-004 - 0.0497886911034584 - -0.0709985271096230 - <_> - - <_> - - - - <_>3 1 12 6 -1. - <_>3 3 12 2 3. - 0 - -0.0154289295896888 - 0.3273377120494843 - -0.0202394891530275 - <_> - - <_> - - - - <_>9 5 11 6 -1. - <_>9 7 11 2 3. - 0 - -1.1928460298804566e-004 - 0.0264050103724003 - -0.1466607004404068 - <_> - - <_> - - - - <_>5 2 3 13 -1. - <_>6 2 1 13 3. - 0 - -0.0217268802225590 - -0.4401434957981110 - 0.0142646497115493 - <_> - - <_> - - - - <_>15 5 4 14 -1. - <_>17 5 2 7 2. - <_>15 12 2 7 2. - 0 - -0.0307107698172331 - 0.1354915052652359 - -0.0175862107425928 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - 4.3861479498445988e-003 - 0.0544237904250622 - -0.1123457998037338 - <_> - - <_> - - - - <_>5 15 13 3 -1. - <_>5 16 13 1 3. - 0 - 4.7966800630092621e-003 - -0.0434940792620182 - 0.1310887038707733 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - 2.2497470490634441e-003 - 0.0594898089766502 - -0.1095547974109650 - <_> - - <_> - - - - <_>3 10 14 6 -1. - <_>10 10 7 3 2. - <_>3 13 7 3 2. - 0 - 4.3578739278018475e-003 - 0.0591861791908741 - -0.1302604973316193 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.0433720201253891e-003 - -0.0516254901885986 - 0.1378781050443649 - <_> - - <_> - - - - <_>5 14 15 3 -1. - <_>5 15 15 1 3. - 0 - -2.0268680527806282e-003 - 0.0881051272153854 - -0.0858675613999367 - <_> - - <_> - - - - <_>0 1 14 6 -1. - <_>0 1 7 3 2. - <_>7 4 7 3 2. - 0 - -6.5703789005056024e-004 - 0.0710449889302254 - -0.0907515436410904 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0443099699914455 - -0.0115222902968526 - 0.2273374050855637 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 4.6578957699239254e-003 - -0.0461235493421555 - 0.1527702957391739 - <_> - - <_> - - - - <_>3 16 14 4 -1. - <_>10 16 7 2 2. - <_>3 18 7 2 2. - 0 - -0.0409600585699081 - -0.5598890185356140 - 0.0120647400617599 - <_> - - <_> - - - - <_>0 1 6 10 -1. - <_>0 1 3 5 2. - <_>3 6 3 5 2. - 0 - -6.7416871897876263e-003 - 0.1048407033085823 - -0.0651528015732765 - <_> - - <_> - - - - <_>10 3 8 8 -1. - <_>14 3 4 4 2. - <_>10 7 4 4 2. - 0 - -2.9713090043514967e-004 - 0.0322212018072605 - -0.0847099795937538 - <_> - - <_> - - - - <_>1 5 10 6 -1. - <_>1 5 5 3 2. - <_>6 8 5 3 2. - 0 - -8.0926045775413513e-003 - -0.1647664010524750 - 0.0457001216709614 - <_> - - <_> - - - - <_>14 2 2 14 -1. - <_>14 9 2 7 2. - 0 - 0.0407103486359119 - 0.0100992601364851 - -0.1089332997798920 - <_> - - <_> - - - - <_>4 2 2 14 -1. - <_>4 9 2 7 2. - 0 - -1.1402929667383432e-003 - -0.1926981955766678 - 0.0445908308029175 - <_> - - <_> - - - - <_>4 8 12 4 -1. - <_>4 10 12 2 2. - 0 - -0.0203064307570457 - 0.6866806149482727 - -9.8533723503351212e-003 - <_> - - <_> - - - - <_>2 3 8 8 -1. - <_>2 3 4 4 2. - <_>6 7 4 4 2. - 0 - 0.0486313700675964 - 0.0119915902614594 - -0.6477090716362000 - <_> - - <_> - - - - <_>17 0 2 16 -1. - <_>17 8 2 8 2. - 0 - -0.0544149503111839 - 0.3473069965839386 - -0.0119405901059508 - <_> - - <_> - - - - <_>1 5 4 14 -1. - <_>1 5 2 7 2. - <_>3 12 2 7 2. - 0 - -0.0595325306057930 - 0.3641026914119721 - -0.0160508193075657 - <_> - - <_> - - - - <_>8 6 5 10 -1. - <_>8 11 5 5 2. - 0 - -0.0350894518196583 - -0.1925289928913117 - 0.0235986299812794 - <_> - - <_> - - - - <_>4 2 8 10 -1. - <_>4 2 4 5 2. - <_>8 7 4 5 2. - 0 - 5.7658711448311806e-003 - -0.0462938509881496 - 0.1528797000646591 - <_> - - <_> - - - - <_>8 5 10 8 -1. - <_>13 5 5 4 2. - <_>8 9 5 4 2. - 0 - -2.3687579669058323e-003 - 0.0573452301323414 - -0.0881954729557037 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - -2.7341600507497787e-003 - -0.2389616072177887 - 0.0257618092000484 - <_> - - <_> - - - - <_>16 1 4 7 -1. - <_>16 1 2 7 2. - 0 - -9.1599775478243828e-003 - 0.1003749966621399 - -0.0267319791018963 - <_> - - <_> - - - - <_>1 0 2 16 -1. - <_>1 8 2 8 2. - 0 - -0.0506231710314751 - 0.4690837860107422 - -0.0138804297894239 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - -4.3487590737640858e-003 - -0.1481294035911560 - 0.0521153584122658 - <_> - - <_> - - - - <_>0 0 20 12 -1. - <_>0 6 20 6 2. - 0 - 0.4085980057716370 - 0.0154545297846198 - -0.4649426937103272 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - 0.0531040094792843 - 7.8609427437186241e-003 - -0.5355514287948608 - <_> - - <_> - - - - <_>0 3 5 6 -1. - <_>0 6 5 3 2. - 0 - -4.1035288013517857e-003 - -0.1377788037061691 - 0.0468478091061115 - <_> - - <_> - - - - <_>9 10 7 4 -1. - <_>9 12 7 2 2. - 0 - -2.7622529305517673e-003 - 0.0523039400577545 - -0.0949708372354507 - <_> - - <_> - - - - <_>2 9 13 6 -1. - <_>2 12 13 3 2. - 0 - 9.3903020024299622e-003 - -0.0234937295317650 - 0.3625979125499725 - <_> - - <_> - - - - <_>2 2 16 14 -1. - <_>2 9 16 7 2. - 0 - 0.0237716306000948 - 0.0807461664080620 - -0.0828936025500298 - <_> - - <_> - - - - <_>4 5 10 8 -1. - <_>4 9 10 4 2. - 0 - 2.8008709196001291e-003 - -0.2659569978713989 - 0.0285346806049347 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -6.3013769686222076e-003 - 0.0804816335439682 - -0.0290161799639463 - <_> - - <_> - - - - <_>8 0 3 15 -1. - <_>8 5 3 5 3. - 0 - -5.1433448679745197e-003 - -0.1147350966930389 - 0.0584486313164234 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - 1.0679479455575347e-003 - -0.0316618904471397 - 0.0545227788388729 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - 1.5213950537145138e-003 - -0.0621725507080555 - 0.0976013168692589 - <_> - - <_> - - - - <_>1 14 18 4 -1. - <_>10 14 9 2 2. - <_>1 16 9 2 2. - 0 - -0.0337799116969109 - -0.4958269894123077 - 0.0120933195576072 - <_> - - <_> - - - - <_>1 8 6 5 -1. - <_>4 8 3 5 2. - 0 - -0.1050537005066872 - -0.9873880147933960 - 5.1499558612704277e-003 - <_> - - <_> - - - - <_>13 1 6 19 -1. - <_>13 1 3 19 2. - 0 - 0.0196858402341604 - -0.0561894290149212 - 0.0912605375051498 - <_> - - <_> - - - - <_>1 1 6 19 -1. - <_>4 1 3 19 2. - 0 - 0.0664703994989395 - 0.0140978898853064 - -0.4573164880275726 - <_> - - <_> - - - - <_>6 0 14 3 -1. - <_>6 1 14 1 3. - 0 - -0.0158980991691351 - -0.2331776022911072 - 0.0113696204498410 - <_> - - <_> - - - - <_>0 0 14 3 -1. - <_>0 1 14 1 3. - 0 - 4.0450799278914928e-003 - 0.0433450490236282 - -0.1590802073478699 - <_> - - <_> - - - - <_>8 2 7 6 -1. - <_>8 5 7 3 2. - 0 - -0.0334865488111973 - 0.1308659017086029 - -0.0343275591731071 - <_> - - <_> - - - - <_>0 3 9 14 -1. - <_>3 3 3 14 3. - 0 - 0.0214584805071354 - -0.0502133518457413 - 0.1146700978279114 - <_> - - <_> - - - - <_>10 8 9 6 -1. - <_>10 10 9 2 3. - 0 - 0.1167273968458176 - -3.4590030554682016e-003 - 0.4415673017501831 - <_> - - <_> - - - - <_>0 1 16 4 -1. - <_>0 1 8 2 2. - <_>8 3 8 2 2. - 0 - -5.0386278890073299e-003 - -0.1399540007114410 - 0.0408543981611729 - <_> - - <_> - - - - <_>16 2 4 7 -1. - <_>16 2 2 7 2. - 0 - 0.0372611209750175 - -0.0163991898298264 - 0.2362785041332245 - <_> - - <_> - - - - <_>0 8 10 6 -1. - <_>0 10 10 2 3. - 0 - -0.0179914608597755 - -0.5670362710952759 - 0.0101850796490908 - <_> - - <_> - - - - <_>16 2 4 7 -1. - <_>16 2 2 7 2. - 0 - 0.1074803993105888 - 1.8287489656358957e-003 - -0.7870578169822693 - <_> - - <_> - - - - <_>0 2 4 7 -1. - <_>2 2 2 7 2. - 0 - -0.0214396193623543 - 0.1834709048271179 - -0.0324107892811298 - <_> - - <_> - - - - <_>5 3 12 14 -1. - <_>11 3 6 7 2. - <_>5 10 6 7 2. - 0 - 6.8095367169007659e-004 - 0.0416750684380531 - -0.0893016383051872 - <_> - - <_> - - - - <_>7 6 3 10 -1. - <_>7 11 3 5 2. - 0 - -6.8581351079046726e-003 - -0.1451186984777451 - 0.0515854991972446 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>16 2 2 9 3. - 0 - 0.1531828045845032 - 3.1881679315119982e-003 - -0.4419009089469910 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>2 2 2 9 3. - 0 - 0.0227773692458868 - -0.0432341210544109 - 0.1747722029685974 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 6.6160550341010094e-003 - 0.0431408211588860 - -0.1718851029872894 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 5 6 3 2. - <_>10 8 6 3 2. - 0 - -8.8224448263645172e-003 - 0.1320316940546036 - -0.0475092008709908 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -5.1209977827966213e-003 - -0.1897916048765183 - 0.0576573088765144 - <_> - - <_> - - - - <_>7 5 6 8 -1. - <_>9 5 2 8 3. - 0 - -0.0103118801489472 - 0.3228681981563568 - -0.0197250191122293 - <_> - - <_> - - - - <_>4 6 12 6 -1. - <_>8 6 4 6 3. - 0 - -0.0250657591968775 - -0.3657239973545075 - 0.0183448698371649 - <_> - - <_> - - - - <_>1 4 4 14 -1. - <_>1 4 2 7 2. - <_>3 11 2 7 2. - 0 - -0.0143184298649430 - 0.1579546928405762 - -0.0382769182324409 - <_> - - <_> - - - - <_>0 1 20 6 -1. - <_>10 1 10 3 2. - <_>0 4 10 3 2. - 0 - -0.0573839396238327 - -0.3683528900146484 - 0.0169002097100019 - <_> - - <_> - - - - <_>5 2 10 6 -1. - <_>5 4 10 2 3. - 0 - -0.0436802990734577 - 0.4476679861545563 - -0.0137104596942663 - <_> - - <_> - - - - <_>0 2 20 6 -1. - <_>0 5 20 3 2. - 0 - -0.2428909987211227 - -0.7549092769622803 - 8.9195184409618378e-003 - <_> - - <_> - - - - <_>3 10 6 8 -1. - <_>5 10 2 8 3. - 0 - 3.8089449517428875e-003 - -0.0629167184233665 - 0.0942829027771950 - <_> - - <_> - - - - <_>13 4 4 16 -1. - <_>15 4 2 8 2. - <_>13 12 2 8 2. - 0 - 8.9389752247370780e-005 - -0.1125340014696121 - 0.0994479134678841 - <_> - - <_> - - - - <_>6 2 2 18 -1. - <_>6 11 2 9 2. - 0 - 2.7378369122743607e-003 - 0.0748805105686188 - -0.0992576107382774 - <_> - - <_> - - - - <_>13 4 4 16 -1. - <_>15 4 2 8 2. - <_>13 12 2 8 2. - 0 - 0.0236805602908134 - 0.0121058700606227 - -0.1178075000643730 - <_> - - <_> - - - - <_>3 4 4 16 -1. - <_>3 4 2 8 2. - <_>5 12 2 8 2. - 0 - -0.0460600703954697 - 0.3979974091053009 - -0.0171293690800667 - <_> - - <_> - - - - <_>6 15 9 4 -1. - <_>6 17 9 2 2. - 0 - 2.1130219101905823e-003 - -0.0609068498015404 - 0.0499742813408375 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 0.0147531498223543 - 0.0166297294199467 - -0.3780666887760162 - <_> - - <_> - - - - <_>8 0 4 12 -1. - <_>8 0 2 12 2. - 0 - 0.0354309082031250 - -0.0238443706184626 - 0.2635455131530762 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>10 6 10 2 2. - 0 - -0.0507450997829437 - -0.2314130961894989 - 0.0283203497529030 - <_> - - <_> - - - - <_>14 2 6 18 -1. - <_>17 2 3 9 2. - <_>14 11 3 9 2. - 0 - 0.0898740589618683 - -0.0101912496611476 - 0.2627770006656647 - <_> - - <_> - - - - <_>0 7 14 4 -1. - <_>0 7 7 2 2. - <_>7 9 7 2 2. - 0 - -2.7411670889705420e-003 - -0.1382844001054764 - 0.0469662807881832 - <_> - - <_> - - - - <_>8 5 10 8 -1. - <_>13 5 5 4 2. - <_>8 9 5 4 2. - 0 - 0.0873859375715256 - 1.7351199639961123e-003 - -0.8081040978431702 - <_> - - <_> - - - - <_>2 5 10 8 -1. - <_>2 5 5 4 2. - <_>7 9 5 4 2. - 0 - -2.9055110644549131e-003 - 0.0661932677030563 - -0.0959811881184578 - <_> - - <_> - - - - <_>4 2 16 12 -1. - <_>4 2 8 12 2. - 0 - -0.5125557780265808 - -1. - 8.6886010831221938e-004 - <_> - - <_> - - - - <_>0 2 16 12 -1. - <_>8 2 8 12 2. - 0 - -0.0132812596857548 - 0.1013427004218102 - -0.0643442794680595 - <_> - - <_> - - - - <_>11 2 4 7 -1. - <_>11 2 2 7 2. - 0 - 0.0536609403789043 - 3.2843649387359619e-003 - -0.8001198768615723 - <_> - - <_> - - - - <_>5 2 4 7 -1. - <_>7 2 2 7 2. - 0 - 0.0392906293272972 - 9.0429633855819702e-003 - -0.6707432866096497 - <_> - - <_> - - - - <_>6 5 8 4 -1. - <_>6 5 4 4 2. - 0 - 0.0651971325278282 - 4.4964649714529514e-003 - -0.9793130755424500 - <_> - - <_> - - - - <_>4 5 6 10 -1. - <_>6 5 2 10 3. - 0 - 0.0325052812695503 - -0.0126792499795556 - 0.4977447986602783 - <_> - - <_> - - - - <_>6 10 10 8 -1. - <_>11 10 5 4 2. - <_>6 14 5 4 2. - 0 - -0.0657490789890289 - -0.3784436881542206 - 5.9391320683062077e-003 - <_> - - <_> - - - - <_>2 11 6 9 -1. - <_>4 11 2 9 3. - 0 - -0.0600450709462166 - -0.3995777070522308 - 0.0141556998714805 - <_> - - <_> - - - - <_>4 0 12 18 -1. - <_>4 0 6 18 2. - 0 - -0.0466313511133194 - 0.1684381067752838 - -0.0376349613070488 - <_> - - <_> - - - - <_>4 1 9 17 -1. - <_>7 1 3 17 3. - 0 - 1.8095660198014230e-004 - -0.1019833013415337 - 0.0729405134916306 - <_> - - <_> - - - - <_>9 5 6 8 -1. - <_>11 5 2 8 3. - 0 - -3.7607289850711823e-003 - 0.0451540984213352 - -0.0543702207505703 - <_> - - <_> - - - - <_>6 3 6 7 -1. - <_>8 3 2 7 3. - 0 - -5.0964287947863340e-004 - 0.1610606014728546 - -0.0543980710208416 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - -1.6095000319182873e-003 - -0.2105861008167267 - 0.0308642592281103 - <_> - - <_> - - - - <_>5 5 6 9 -1. - <_>5 8 6 3 3. - 0 - -5.4673491977155209e-003 - 0.1907608062028885 - -0.0327386185526848 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 4.1697090491652489e-003 - 0.0200098492205143 - -0.0681738406419754 - <_> - - <_> - - - - <_>4 6 7 4 -1. - <_>4 8 7 2 2. - 0 - 3.2709140796214342e-003 - -0.1111001968383789 - 0.0582118891179562 - <_> - - <_> - - - - <_>6 10 10 8 -1. - <_>11 10 5 4 2. - <_>6 14 5 4 2. - 0 - -5.1663857884705067e-003 - -0.0852107927203178 - 0.0339051000773907 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - -0.0129147199913859 - -0.1372693926095963 - 0.0483487695455551 - <_> - - <_> - - - - <_>5 7 14 4 -1. - <_>12 7 7 2 2. - <_>5 9 7 2 2. - 0 - -3.8130749017000198e-003 - -0.1108494028449059 - 0.0323736295104027 - <_> - - <_> - - - - <_>4 10 12 7 -1. - <_>8 10 4 7 3. - 0 - -0.0577624812722206 - 0.2170145064592362 - -0.0298280492424965 - <_> - - <_> - - - - <_>5 2 12 16 -1. - <_>11 2 6 8 2. - <_>5 10 6 8 2. - 0 - -2.2619909141212702e-003 - 0.0356410183012486 - -0.0552890785038471 - <_> - - <_> - - - - <_>1 7 14 4 -1. - <_>1 7 7 2 2. - <_>8 9 7 2 2. - 0 - 0.0529798492789268 - 7.7050398103892803e-003 - -0.7212120890617371 - <_> - - <_> - - - - <_>3 5 15 14 -1. - <_>3 12 15 7 2. - 0 - -0.3383991122245789 - -0.9454026222229004 - 4.5049181208014488e-003 - <_> - - <_> - - - - <_>0 11 7 4 -1. - <_>0 13 7 2 2. - 0 - 5.2918092114850879e-004 - 0.0416339300572872 - -0.1328317970037460 - <_> - - <_> - - - - <_>8 6 9 9 -1. - <_>8 9 9 3 3. - 0 - 2.8239609673619270e-003 - 0.1381590962409973 - -0.0113719301298261 - <_> - - <_> - - - - <_>5 6 6 10 -1. - <_>7 6 2 10 3. - 0 - -2.1569489035755396e-003 - 0.0635536536574364 - -0.0846833363175392 - <_> - - <_> - - - - <_>11 4 4 11 -1. - <_>11 4 2 11 2. - 0 - 4.1426848620176315e-003 - 0.0414313301444054 - -0.0914131999015808 - <_> - - <_> - - - - <_>1 12 14 8 -1. - <_>8 12 7 8 2. - 0 - -0.0110165597870946 - 0.0803824067115784 - -0.0839785709977150 - <_> - - <_> - - - - <_>11 4 4 11 -1. - <_>11 4 2 11 2. - 0 - -6.5561989322304726e-003 - -0.1356375962495804 - 0.0345143415033817 - <_> - - <_> - - - - <_>5 0 4 15 -1. - <_>7 0 2 15 2. - 0 - -2.2384698968380690e-003 - -0.1290034055709839 - 0.0607188306748867 - <_> - - <_> - - - - <_>4 2 12 6 -1. - <_>8 2 4 6 3. - 0 - -0.0127897197380662 - 0.2625438868999481 - -0.0252952892333269 - <_> - - <_> - - - - <_>3 3 12 14 -1. - <_>3 3 6 7 2. - <_>9 10 6 7 2. - 0 - -0.1102875992655754 - -0.4032453894615173 - 0.0139968497678638 - <_> - - <_> - - - - <_>9 2 4 7 -1. - <_>9 2 2 7 2. - 0 - 2.9025289695709944e-003 - -0.0601339004933834 - 0.0406575091183186 - <_> - - <_> - - - - <_>7 2 4 7 -1. - <_>9 2 2 7 2. - 0 - 1.3041580095887184e-003 - -0.1127184033393860 - 0.0530015490949154 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - 0.0485189110040665 - 9.9352700635790825e-003 - -0.3384445905685425 - <_> - - <_> - - - - <_>0 9 5 9 -1. - <_>0 12 5 3 3. - 0 - -5.0848070532083511e-003 - -0.1307263970375061 - 0.0471069291234016 - <_> - - <_> - - - - <_>8 3 4 9 -1. - <_>8 3 2 9 2. - 0 - 5.7023460976779461e-003 - -0.0528404898941517 - 0.1241874992847443 - <_> - - <_> - - - - <_>7 8 6 6 -1. - <_>10 8 3 6 2. - 0 - -2.7858179528266191e-003 - -0.0966856405138969 - 0.0668284371495247 - <_> - - <_> - - - - <_>6 13 14 3 -1. - <_>6 14 14 1 3. - 0 - -3.0082210432738066e-003 - 0.0717781409621239 - -0.0385115407407284 - <_> - - <_> - - - - <_>2 12 12 8 -1. - <_>6 12 4 8 3. - 0 - 6.9350451231002808e-003 - -0.0579321496188641 - 0.1069167032837868 - <_> - - <_> - - - - <_>5 14 15 6 -1. - <_>10 14 5 6 3. - 0 - -0.0470643416047096 - 0.1028449982404709 - -0.0279982890933752 - <_> - - <_> - - - - <_>6 8 6 12 -1. - <_>6 8 3 6 2. - <_>9 14 3 6 2. - 0 - -0.0826457366347313 - -0.8584945201873779 - 6.3560227863490582e-003 - <_> - - <_> - - - - <_>5 14 15 6 -1. - <_>10 14 5 6 3. - 0 - 8.9476434513926506e-003 - -0.0399044714868069 - 0.0668972805142403 - <_> - - <_> - - - - <_>6 0 8 20 -1. - <_>6 10 8 10 2. - 0 - 0.3059397935867310 - 7.2277039289474487e-003 - -0.7974972128868103 - <_> - - <_> - - - - <_>10 3 4 13 -1. - <_>10 3 2 13 2. - 0 - -5.8336472138762474e-003 - -0.1952649056911469 - 0.0241965502500534 - <_> - - <_> - - - - <_>4 12 12 6 -1. - <_>8 12 4 6 3. - 0 - -5.3784619085490704e-003 - 0.0719676315784454 - -0.0915475636720657 - <_> - - <_> - - - - <_>10 3 4 13 -1. - <_>10 3 2 13 2. - 0 - 9.2504899948835373e-003 - 0.0361463613808155 - -0.0744949206709862 - <_> - - <_> - - - - <_>5 11 9 6 -1. - <_>8 11 3 6 3. - 0 - 0.0375812910497189 - -0.0202227290719748 - 0.3322426974773407 - <_> - - <_> - - - - <_>8 13 6 7 -1. - <_>10 13 2 7 3. - 0 - -0.0468187406659126 - -0.5051367282867432 - 0.0128703098744154 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 0.0335079394280910 - -0.0186887998133898 - 0.3054238855838776 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 0.0684372484683990 - -6.2482542125508189e-004 - 0.8396378755569458 - <_> - - <_> - - - - <_>3 10 7 6 -1. - <_>3 12 7 2 3. - 0 - 0.0101519403979182 - 0.0256537292152643 - -0.2183008044958115 - <_> - - <_> - - - - <_>12 3 5 12 -1. - <_>12 7 5 4 3. - 0 - -0.1386625021696091 - 0.5734167098999023 - -6.0921781696379185e-003 - <_> - - <_> - - - - <_>4 13 9 4 -1. - <_>4 15 9 2 2. - 0 - -1.1214310070499778e-003 - 0.0706924870610237 - -0.0829957500100136 - <_> - - <_> - - - - <_>6 13 14 3 -1. - <_>6 14 14 1 3. - 0 - 1.4782310463488102e-003 - -0.0351612791419029 - 0.0585691593587399 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - -2.3407500702887774e-003 - 0.1266739964485169 - -0.0777006074786186 - <_> - - <_> - - - - <_>12 0 3 19 -1. - <_>13 0 1 19 3. - 0 - 4.3265568092465401e-003 - 0.0312298797070980 - -0.1168064996600151 - <_> - - <_> - - - - <_>6 3 4 13 -1. - <_>8 3 2 13 2. - 0 - -0.0322522483766079 - -0.5439580082893372 - 0.0103865098208189 - <_> - - <_> - - - - <_>10 0 9 5 -1. - <_>13 0 3 5 3. - 0 - -7.1836792631074786e-004 - -0.0638500824570656 - 0.0489896796643734 - <_> - - <_> - - - - <_>1 0 9 5 -1. - <_>4 0 3 5 3. - 0 - 1.1035969946533442e-003 - -0.0710958391427994 - 0.0830879732966423 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -0.0102655198425055 - 0.1164705008268356 - -0.0281786303967237 - <_> - - <_> - - - - <_>6 11 6 9 -1. - <_>8 11 2 9 3. - 0 - 0.0726320371031761 - 7.5578331016004086e-003 - -0.7163549065589905 - <_> - - <_> - - - - <_>12 3 5 12 -1. - <_>12 7 5 4 3. - 0 - 0.1223236992955208 - -3.9898478426039219e-003 - 0.6070889234542847 - <_> - - <_> - - - - <_>3 3 5 12 -1. - <_>3 7 5 4 3. - 0 - -0.1439826041460037 - 0.8583632111549377 - -5.8769038878381252e-003 - <_> - - <_> - - - - <_>10 11 6 9 -1. - <_>10 14 6 3 3. - 0 - 5.9525449760258198e-003 - 0.0217127595096827 - -0.1589670032262802 - <_> - - <_> - - - - <_>4 16 12 4 -1. - <_>4 18 12 2 2. - 0 - -1.3158279471099377e-003 - 0.0832397714257240 - -0.0719442665576935 - <_> - - <_> - - - - <_>2 14 18 4 -1. - <_>11 14 9 2 2. - <_>2 16 9 2 2. - 0 - -0.0357826687395573 - -0.3188849091529846 - 6.7262151278555393e-003 - <_> - - <_> - - - - <_>6 16 7 4 -1. - <_>6 18 7 2 2. - 0 - 1.4122560387477279e-003 - -0.0692475736141205 - 0.0880377292633057 - <_> - - <_> - - - - <_>5 10 12 8 -1. - <_>5 14 12 4 2. - 0 - -0.0161880291998386 - -0.0604390017688274 - 0.0675304234027863 - <_> - - <_> - - - - <_>4 10 7 4 -1. - <_>4 12 7 2 2. - 0 - -2.8433150146156549e-003 - 0.0644664391875267 - -0.1050440967082977 - <_> - - <_> - - - - <_>8 9 7 4 -1. - <_>8 11 7 2 2. - 0 - -1.5944750048220158e-003 - -0.0519193597137928 - 0.0537104010581970 - <_> - - <_> - - - - <_>0 10 18 6 -1. - <_>9 10 9 6 2. - 0 - 0.1880826950073242 - -8.1325937062501907e-003 - 0.7035480737686157 - <_> - - <_> - - - - <_>0 6 20 2 -1. - <_>0 6 10 2 2. - 0 - -0.0335522294044495 - -0.3131825029850006 - 0.0242971908301115 - <_> - - <_> - - - - <_>6 5 6 8 -1. - <_>8 5 2 8 3. - 0 - -0.0153410602360964 - 0.2368717044591904 - -0.0280204508453608 - <_> - - <_> - - - - <_>12 0 3 13 -1. - <_>13 0 1 13 3. - 0 - -0.0135348103940487 - -0.3154464066028595 - 0.0230117402970791 - <_> - - <_> - - - - <_>8 10 3 10 -1. - <_>8 15 3 5 2. - 0 - 3.2969659660011530e-003 - 0.0329233594238758 - -0.1593357026576996 - <_> - - <_> - - - - <_>8 1 8 14 -1. - <_>12 1 4 7 2. - <_>8 8 4 7 2. - 0 - -0.0448468886315823 - 0.1287619024515152 - -0.0177957806736231 - <_> - - <_> - - - - <_>5 0 3 19 -1. - <_>6 0 1 19 3. - 0 - 5.1291137933731079e-003 - 0.0327090099453926 - -0.1787136048078537 - <_> - - <_> - - - - <_>9 10 6 10 -1. - <_>12 10 3 5 2. - <_>9 15 3 5 2. - 0 - 1.1287770466879010e-003 - -0.0762344002723694 - 0.0712672322988510 - <_> - - <_> - - - - <_>0 6 5 14 -1. - <_>0 13 5 7 2. - 0 - 0.0127591099590063 - -0.0512680411338806 - 0.1290178000926971 - <_> - - <_> - - - - <_>18 5 2 14 -1. - <_>18 12 2 7 2. - 0 - 5.3586461581289768e-004 - 0.0661443471908569 - -0.0680215284228325 - <_> - - <_> - - - - <_>0 5 2 14 -1. - <_>0 12 2 7 2. - 0 - 5.8012880617752671e-004 - 0.0759462565183640 - -0.0724268332123756 - <_> - - <_> - - - - <_>13 0 4 10 -1. - <_>13 5 4 5 2. - 0 - 0.0981135368347168 - 4.4115697965025902e-003 - -0.5764682292938232 - <_> - - <_> - - - - <_>1 0 18 18 -1. - <_>1 9 18 9 2. - 0 - 0.3254789113998413 - -0.0288497898727655 - 0.2324505001306534 - <_> - - <_> - - - - <_>1 16 18 4 -1. - <_>10 16 9 2 2. - <_>1 18 9 2 2. - 0 - 0.0161095298826694 - 0.0261495094746351 - -0.2250791043043137 - <_> - - <_> - - - - <_>5 1 8 6 -1. - <_>5 3 8 2 3. - 0 - 0.0166308004409075 - -0.0560016483068466 - 0.1001114025712013 - <_> - - <_> - - - - <_>4 7 13 9 -1. - <_>4 10 13 3 3. - 0 - 0.0125674698501825 - 0.1176059022545815 - -0.0258336905390024 - <_> - - <_> - - - - <_>5 5 10 10 -1. - <_>5 5 5 5 2. - <_>10 10 5 5 2. - 0 - 0.0245319604873657 - 0.0219795592129231 - -0.2415833026170731 - <_> - - <_> - - - - <_>8 4 8 10 -1. - <_>12 4 4 5 2. - <_>8 9 4 5 2. - 0 - 5.1343659870326519e-003 - -0.0139641799032688 - 0.1039829030632973 - <_> - - <_> - - - - <_>3 7 14 4 -1. - <_>3 7 7 2 2. - <_>10 9 7 2 2. - 0 - -1.1144300224259496e-003 - -0.0816086083650589 - 0.0649919733405113 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - -0.0686410069465637 - 0.3711335062980652 - -0.0177746191620827 - <_> - - <_> - - - - <_>1 0 13 2 -1. - <_>1 1 13 1 2. - 0 - 8.8211498223245144e-004 - -0.0840806812047958 - 0.0625246390700340 - <_> - - <_> - - - - <_>6 2 14 3 -1. - <_>6 3 14 1 3. - 0 - 1.0471940040588379e-003 - 0.0694885626435280 - -0.0830001607537270 - <_> - - <_> - - - - <_>0 0 13 3 -1. - <_>0 1 13 1 3. - 0 - 0.0161972492933273 - 0.0160077307373285 - -0.3421669900417328 - <_> - - <_> - - - - <_>4 1 12 6 -1. - <_>4 4 12 3 2. - 0 - -0.0226906202733517 - 0.1395916044712067 - -0.0423055700957775 - <_> - - <_> - - - - <_>0 3 7 6 -1. - <_>0 5 7 2 3. - 0 - -0.0410300008952618 - -0.3466942012310028 - 0.0172335393726826 - <_> - - <_> - - - - <_>2 5 16 6 -1. - <_>10 5 8 3 2. - <_>2 8 8 3 2. - 0 - 0.0851949304342270 - -8.8493460789322853e-003 - 0.6063935160636902 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 0.0397750996053219 - 6.5457229502499104e-003 - -0.9379426836967468 - <_> - - <_> - - - - <_>16 2 4 18 -1. - <_>18 2 2 9 2. - <_>16 11 2 9 2. - 0 - -0.0186732504516840 - 0.0847016498446465 - -0.0217429902404547 - <_> - - <_> - - - - <_>6 2 4 15 -1. - <_>6 7 4 5 3. - 0 - -0.0116322096437216 - -0.1650363951921463 - 0.0328527912497520 - <_> - - <_> - - - - <_>10 5 7 6 -1. - <_>10 7 7 2 3. - 0 - -2.1068679634481668e-003 - 0.0257741697132587 - -0.1054055988788605 - <_> - - <_> - - - - <_>4 0 4 14 -1. - <_>4 0 2 7 2. - <_>6 7 2 7 2. - 0 - -1.0474229929968715e-003 - 0.0534705705940723 - -0.1084444969892502 - <_> - - <_> - - - - <_>6 3 10 6 -1. - <_>11 3 5 3 2. - <_>6 6 5 3 2. - 0 - 0.0661699920892715 - 2.6304489001631737e-003 - -0.4390884935855866 - <_> - - <_> - - - - <_>4 3 10 6 -1. - <_>4 3 5 3 2. - <_>9 6 5 3 2. - 0 - -1.2816500384360552e-003 - -0.0887442082166672 - 0.0672860816121101 - <_> - - <_> - - - - <_>4 4 13 12 -1. - <_>4 8 13 4 3. - 0 - -0.0126018095761538 - 0.2304718047380447 - -0.0142046399414539 - <_> - - <_> - - - - <_>3 9 6 7 -1. - <_>5 9 2 7 3. - 0 - 3.1882619950920343e-003 - -0.0607906095683575 - 0.0932566076517105 - <_> - - <_> - - - - <_>11 11 4 9 -1. - <_>11 11 2 9 2. - 0 - -4.4821877963840961e-003 - -0.0749111399054527 - 0.0355636402964592 - <_> - - <_> - - - - <_>1 0 3 13 -1. - <_>2 0 1 13 3. - 0 - 1.3803370529785752e-003 - -0.0653553307056427 - 0.0896605774760246 - <_> - - <_> - - - - <_>11 11 4 9 -1. - <_>11 11 2 9 2. - 0 - 9.3855522572994232e-003 - 0.0226011797785759 - -0.1603891998529434 - <_> - - <_> - - - - <_>5 12 4 8 -1. - <_>7 12 2 8 2. - 0 - -3.3057469408959150e-003 - -0.0933906510472298 - 0.0565997883677483 - <_> - - <_> - - - - <_>5 14 15 6 -1. - <_>10 14 5 6 3. - 0 - -0.0148232495412230 - 0.0639465823769569 - -0.0376172587275505 - <_> - - <_> - - - - <_>0 14 15 6 -1. - <_>5 14 5 6 3. - 0 - -0.0243043098598719 - 0.1182530000805855 - -0.0536070801317692 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>10 8 4 4 3. - 0 - -2.6398031041026115e-003 - -0.0784624293446541 - 0.0471259392797947 - <_> - - <_> - - - - <_>2 8 12 4 -1. - <_>6 8 4 4 3. - 0 - -6.6844499669969082e-003 - -0.1429809033870697 - 0.0548765808343887 - <_> - - <_> - - - - <_>13 6 4 10 -1. - <_>13 6 2 10 2. - 0 - -1.8713249592110515e-003 - 0.0659645572304726 - -0.0597260296344757 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>10 6 2 7 2. - 0 - -0.0505263395607471 - 0.5293369293212891 - -0.0106250997632742 - <_> - - <_> - - - - <_>5 1 12 5 -1. - <_>9 1 4 5 3. - 0 - -0.0710362866520882 - -0.3302770853042603 - 5.6759058497846127e-003 - <_> - - <_> - - - - <_>2 2 15 4 -1. - <_>7 2 5 4 3. - 0 - -0.0542125403881073 - 0.3753634095191956 - -0.0164795499294996 - <_> - - <_> - - - - <_>6 12 13 2 -1. - <_>6 13 13 1 2. - 0 - 1.4903850387781858e-004 - -0.0528962500393391 - 0.1064648032188416 - <_> - - <_> - - - - <_>3 11 13 3 -1. - <_>3 12 13 1 3. - 0 - 1.0254220105707645e-003 - -0.0517149008810520 - 0.1077118963003159 - <_> - - <_> - - - - <_>10 10 9 6 -1. - <_>10 12 9 2 3. - 0 - 7.6022921130061150e-003 - 0.0243768393993378 - -0.1249317973852158 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 6.8572920281440020e-004 - 0.0713415816426277 - -0.0764908120036125 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>0 3 20 1 2. - 0 - -1.3697240501642227e-003 - -0.1517394036054611 - 0.0398277193307877 - <_> - - <_> - - - - <_>3 5 4 11 -1. - <_>5 5 2 11 2. - 0 - -2.4336120113730431e-003 - 0.0653152093291283 - -0.0792308971285820 - <_> - - <_> - - - - <_>13 1 3 17 -1. - <_>14 1 1 17 3. - 0 - -0.0143908699974418 - -0.2370626032352448 - 0.0167405307292938 - <_> - - <_> - - - - <_>0 0 18 9 -1. - <_>6 0 6 9 3. - 0 - 0.0789079815149307 - -0.0428104698657990 - 0.1424898952245712 - <_> - - <_> - - - - <_>6 9 9 6 -1. - <_>9 9 3 6 3. - 0 - 0.1068112999200821 - 3.4115819726139307e-003 - -0.7765647172927856 - <_> - - <_> - - - - <_>2 9 7 6 -1. - <_>2 11 7 2 3. - 0 - 0.0513773597776890 - 0.0107034100219607 - -0.5340057015419006 - <_> - - <_> - - - - <_>13 1 3 17 -1. - <_>14 1 1 17 3. - 0 - -0.0868832170963287 - 1. - -3.0740019865334034e-003 - <_> - - <_> - - - - <_>4 1 3 17 -1. - <_>5 1 1 17 3. - 0 - -2.4080339353531599e-003 - -0.1068553030490875 - 0.0497215688228607 - <_> - - <_> - - - - <_>2 0 18 6 -1. - <_>8 0 6 6 3. - 0 - -0.0155902896076441 - 0.1063615977764130 - -0.0244143195450306 - <_> - - <_> - - - - <_>7 2 4 12 -1. - <_>7 6 4 4 3. - 0 - 2.3770150728523731e-003 - 0.0398403815925121 - -0.1468984037637711 - <_> - - <_> - - - - <_>10 2 5 9 -1. - <_>10 5 5 3 3. - 0 - -0.0906486213207245 - 0.1886166036128998 - -0.0129516804590821 - <_> - - <_> - - - - <_>5 2 5 9 -1. - <_>5 5 5 3 3. - 0 - 4.4955732300877571e-003 - -0.0265634004026651 - 0.2394375056028366 - <_> - - <_> - - - - <_>9 0 3 18 -1. - <_>9 6 3 6 3. - 0 - -0.0647257566452026 - -0.5462207794189453 - 9.2595359310507774e-003 - <_> - - <_> - - - - <_>6 12 7 4 -1. - <_>6 14 7 2 2. - 0 - 0.0217035803943872 - -8.8741881772875786e-003 - 0.6401981711387634 - <_> - - <_> - - - - <_>16 10 4 9 -1. - <_>16 10 2 9 2. - 0 - 0.0611102394759655 - 9.5075201243162155e-003 - -0.4370290935039520 - <_> - - <_> - - - - <_>0 10 4 9 -1. - <_>2 10 2 9 2. - 0 - 0.0200868807733059 - 0.0229851994663477 - -0.2284089028835297 - <_> - - <_> - - - - <_>13 2 6 18 -1. - <_>16 2 3 9 2. - <_>13 11 3 9 2. - 0 - 0.0412166416645050 - -0.0144205903634429 - 0.1345296949148178 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - -0.0237122792750597 - -0.2953363955020905 - 0.0184357203543186 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -6.8324371241033077e-003 - 0.1209425032138825 - -0.0430162400007248 - <_> - - <_> - - - - <_>2 3 5 12 -1. - <_>2 7 5 4 3. - 0 - 0.1088021025061607 - -0.0102281495928764 - 0.5282484292984009 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>3 17 14 2 2. - 0 - 9.8231732845306396e-003 - 0.0418864116072655 - -0.1366547942161560 - <_> - - <_> - - - - <_>3 0 13 6 -1. - <_>3 3 13 3 2. - 0 - -0.0150057701393962 - 0.1814893037080765 - -0.0306911394000053 - <_> - - <_> - - - - <_>4 11 16 9 -1. - <_>4 11 8 9 2. - 0 - -0.4411061108112335 - -1. - 1.4937899541109800e-003 - <_> - - <_> - - - - <_>0 11 16 9 -1. - <_>8 11 8 9 2. - 0 - -0.3412280082702637 - -0.4918485879898071 - 0.0100969299674034 - <_> - - <_> - - - - <_>11 0 5 8 -1. - <_>11 4 5 4 2. - 0 - 9.3225948512554169e-003 - -0.0228948295116425 - 0.0707965865731239 - <_> - - <_> - - - - <_>0 3 14 9 -1. - <_>0 6 14 3 3. - 0 - 7.3594371788203716e-003 - 0.0138428695499897 - -0.3614270091056824 - <_> - - <_> - - - - <_>5 0 10 10 -1. - <_>10 0 5 5 2. - <_>5 5 5 5 2. - 0 - -0.0841090828180313 - -0.6228498220443726 - 7.3129259981215000e-003 - <_> - - <_> - - - - <_>0 2 6 18 -1. - <_>0 2 3 9 2. - <_>3 11 3 9 2. - 0 - 0.0107048703357577 - -0.0426171310245991 - 0.1136071979999542 - <_> - - <_> - - - - <_>9 5 3 15 -1. - <_>9 10 3 5 3. - 0 - 0.0114781400188804 - 0.0365864485502243 - -0.0964749529957771 - <_> - - <_> - - - - <_>0 7 13 2 -1. - <_>0 8 13 1 2. - 0 - 1.6416399739682674e-003 - -0.0987773090600967 - 0.0551583692431450 - <_> - - <_> - - - - <_>11 1 5 9 -1. - <_>11 4 5 3 3. - 0 - -1.5731199528090656e-004 - -0.0612079203128815 - 0.0560536012053490 - <_> - - <_> - - - - <_>2 1 14 6 -1. - <_>2 1 7 3 2. - <_>9 4 7 3 2. - 0 - 4.1953278705477715e-003 - 0.0506573915481567 - -0.1023868024349213 - <_> - - <_> - - - - <_>9 0 6 12 -1. - <_>12 0 3 6 2. - <_>9 6 3 6 2. - 0 - -0.0162382498383522 - 0.1126751974225044 - -0.0137868300080299 - <_> - - <_> - - - - <_>5 0 6 12 -1. - <_>5 0 3 6 2. - <_>8 6 3 6 2. - 0 - 0.0324288196861744 - -0.0255130194127560 - 0.2317194044589996 - <_> - - <_> - - - - <_>6 9 9 6 -1. - <_>9 9 3 6 3. - 0 - -8.3901472389698029e-003 - -0.0628423690795898 - 0.0237769596278667 - <_> - - <_> - - - - <_>5 9 9 6 -1. - <_>8 9 3 6 3. - 0 - 4.9057020805776119e-003 - 0.0576767586171627 - -0.1271547973155975 - <_> - - <_> - - - - <_>8 3 10 11 -1. - <_>8 3 5 11 2. - 0 - 0.0144588602706790 - -0.0509327687323093 - 0.0622393190860748 - <_> - - <_> - - - - <_>2 3 10 11 -1. - <_>7 3 5 11 2. - 0 - 0.1248451992869377 - -0.0116122299805284 - 0.4936102032661438 - <_> - - <_> - - - - <_>8 2 12 18 -1. - <_>8 2 6 18 2. - 0 - 0.4858770966529846 - 4.8130601644515991e-003 - -0.5539581179618835 - <_> - - <_> - - - - <_>0 1 12 19 -1. - <_>6 1 6 19 2. - 0 - 0.1688621044158936 - 7.8053288161754608e-003 - -0.7339497804641724 - <_> - - <_> - - - - <_>10 11 5 9 -1. - <_>10 14 5 3 3. - 0 - -2.1220340568106622e-004 - 0.0316566489636898 - -0.1031470000743866 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>3 15 7 2 2. - <_>10 17 7 2 2. - 0 - 1.9249629694968462e-003 - 0.0551357790827751 - -0.1030936986207962 - <_> - - <_> - - - - <_>4 14 16 6 -1. - <_>4 14 8 6 2. - 0 - -0.0281783398240805 - 0.1163733005523682 - -0.0346300601959229 - <_> - - <_> - - - - <_>5 11 9 6 -1. - <_>8 11 3 6 3. - 0 - -0.0140695003792644 - -0.1473771929740906 - 0.0447237901389599 - <_> - - <_> - - - - <_>13 4 4 14 -1. - <_>15 4 2 7 2. - <_>13 11 2 7 2. - 0 - -1.2483589816838503e-003 - -0.1118512004613876 - 0.0688061788678169 - <_> - - <_> - - - - <_>1 3 6 9 -1. - <_>3 3 2 9 3. - 0 - 5.3278112318366766e-004 - -0.0939088836312294 - 0.0670728385448456 - <_> - - <_> - - - - <_>10 7 6 7 -1. - <_>12 7 2 7 3. - 0 - 0.0117227695882320 - -0.0190124697983265 - 0.1883438974618912 - -1.3171190023422241 - 34 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 10 3 -1. - <_>5 2 5 3 2. - 0 - 0.0582546517252922 - -0.2323278933763504 - 0.2145415991544724 - <_> - - <_> - - - - <_>12 6 5 9 -1. - <_>12 9 5 3 3. - 0 - 0.0344334505498409 - -0.2652068138122559 - 0.1327435970306397 - <_> - - <_> - - - - <_>3 12 8 8 -1. - <_>3 12 4 4 2. - <_>7 16 4 4 2. - 0 - 0.0149370096623898 - -0.2392790019512177 - 0.1578651964664459 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0311536397784948 - -0.1500400006771088 - 0.1611603945493698 - <_> - - <_> - - - - <_>2 0 16 2 -1. - <_>2 1 16 1 2. - 0 - 2.6988480240106583e-003 - -0.2340988963842392 - 0.0999837815761566 - <_> - - <_> - - - - <_>13 7 7 6 -1. - <_>13 9 7 2 3. - 0 - 9.2046073405072093e-005 - -0.2926816940307617 - 0.0478727407753468 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - 5.0020251364912838e-005 - -0.3681570887565613 - 0.0581896081566811 - <_> - - <_> - - - - <_>9 6 5 8 -1. - <_>9 10 5 4 2. - 0 - -0.0149021595716476 - -0.3881885111331940 - 0.0261585190892220 - <_> - - <_> - - - - <_>7 5 6 12 -1. - <_>7 11 6 6 2. - 0 - 0.0204487200826406 - 0.0608468912541866 - -0.3064528107643127 - <_> - - <_> - - - - <_>13 4 4 14 -1. - <_>15 4 2 7 2. - <_>13 11 2 7 2. - 0 - 6.2656581576447934e-005 - -0.1716104000806809 - 0.1080029979348183 - <_> - - <_> - - - - <_>3 4 4 14 -1. - <_>3 4 2 7 2. - <_>5 11 2 7 2. - 0 - -7.0627559907734394e-003 - -0.2342894971370697 - 0.0763271301984787 - <_> - - <_> - - - - <_>3 3 14 2 -1. - <_>3 4 14 1 2. - 0 - -2.9078179504722357e-003 - -0.2101060003042221 - 0.0786054730415344 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>7 6 6 5 2. - 0 - -0.0365543104708195 - 0.1701388955116272 - -0.1283787041902542 - <_> - - <_> - - - - <_>10 4 10 12 -1. - <_>10 10 10 6 2. - 0 - -0.0139916297048330 - -0.1519856005907059 - 0.0311683006584644 - <_> - - <_> - - - - <_>4 2 9 5 -1. - <_>7 2 3 5 3. - 0 - 0.0746810734272003 - 0.0360799990594387 - -0.4632237851619721 - <_> - - <_> - - - - <_>4 4 16 10 -1. - <_>12 4 8 5 2. - <_>4 9 8 5 2. - 0 - -0.1040792986750603 - -0.3180229961872101 - 0.0206125602126122 - <_> - - <_> - - - - <_>0 4 16 10 -1. - <_>0 4 8 5 2. - <_>8 9 8 5 2. - 0 - 0.0124447001144290 - 0.0778186172246933 - -0.1682558953762054 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - 0.0346793308854103 - 0.0325843803584576 - -0.2688415944576263 - <_> - - <_> - - - - <_>5 8 4 12 -1. - <_>7 8 2 12 2. - 0 - -0.0290284696966410 - -0.4452267885208130 - 0.0296610407531261 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 2.3345749650616199e-004 - -0.1307104974985123 - 0.0617566592991352 - <_> - - <_> - - - - <_>0 7 10 13 -1. - <_>5 7 5 13 2. - 0 - 0.3699317872524262 - 0.0174009092152119 - -0.7041854858398438 - <_> - - <_> - - - - <_>13 13 7 4 -1. - <_>13 15 7 2 2. - 0 - -0.0215057302266359 - -0.2409529983997345 - 0.0288916490972042 - <_> - - <_> - - - - <_>0 9 9 8 -1. - <_>3 9 3 8 3. - 0 - 0.0541818104684353 - -0.0840536206960678 - 0.1387698948383331 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - -0.0326773785054684 - -0.2990488111972809 - 0.0281952507793903 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0118043003603816 - 0.0491241216659546 - -0.2553828954696655 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -9.5703108236193657e-003 - 0.1186522021889687 - -0.0793051570653915 - <_> - - <_> - - - - <_>0 12 13 2 -1. - <_>0 13 13 1 2. - 0 - -8.5534068057313561e-004 - -0.0903157666325569 - 0.1298426985740662 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 0.0714453309774399 - 0.0143962102010846 - -0.5316129922866821 - <_> - - <_> - - - - <_>4 5 8 4 -1. - <_>8 5 4 4 2. - 0 - 6.1263251118361950e-003 - -0.2455939054489136 - 0.0483532808721066 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -4.8277149908244610e-003 - -0.2382885068655014 - 0.0756640434265137 - <_> - - <_> - - - - <_>4 9 4 8 -1. - <_>4 13 4 4 2. - 0 - -2.6015359908342361e-003 - 0.0458266809582710 - -0.2492837011814117 - <_> - - <_> - - - - <_>10 4 8 4 -1. - <_>10 6 8 2 2. - 0 - -4.7515620826743543e-004 - 0.0386048406362534 - -0.1311883032321930 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>2 0 2 8 2. - 0 - -0.0545914694666862 - 0.5526043772697449 - -0.0196224898099899 - <_> - - <_> - - - - <_>3 2 14 4 -1. - <_>3 2 7 4 2. - 0 - 0.0539314113557339 - -0.0482855997979641 - 0.2211060971021652 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -9.1672148555517197e-003 - -0.2574455142021179 - 0.0408331714570522 - <_> - - <_> - - - - <_>10 0 9 9 -1. - <_>13 0 3 9 3. - 0 - -2.9818129260092974e-003 - -0.0758914574980736 - 0.0608992092311382 - <_> - - <_> - - - - <_>1 0 9 9 -1. - <_>4 0 3 9 3. - 0 - 0.0746973827481270 - 0.0366578884422779 - -0.2694618105888367 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - -0.0270062703639269 - 0.1839165985584259 - -0.0558324791491032 - <_> - - <_> - - - - <_>0 9 18 3 -1. - <_>6 9 6 3 3. - 0 - -6.0810879804193974e-003 - -0.3277722895145416 - 0.0352696590125561 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0381820686161518 - -0.0560753718018532 - 0.2183950990438461 - <_> - - <_> - - - - <_>5 4 10 5 -1. - <_>10 4 5 5 2. - 0 - 9.5723047852516174e-003 - 0.0842939764261246 - -0.1176777034997940 - <_> - - <_> - - - - <_>5 1 14 4 -1. - <_>12 1 7 2 2. - <_>5 3 7 2 2. - 0 - 0.0780282169580460 - 5.6959469802677631e-003 - -0.8144273161888123 - <_> - - <_> - - - - <_>1 1 14 4 -1. - <_>1 1 7 2 2. - <_>8 3 7 2 2. - 0 - -0.0328620299696922 - -0.4721283018589020 - 0.0194189697504044 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - 0.0423596799373627 - -0.0179292801767588 - 0.3136824965476990 - <_> - - <_> - - - - <_>0 6 4 14 -1. - <_>0 6 2 7 2. - <_>2 13 2 7 2. - 0 - -0.0210304204374552 - 0.1419924944639206 - -0.0671715065836906 - <_> - - <_> - - - - <_>12 11 5 9 -1. - <_>12 14 5 3 3. - 0 - -0.0464879684150219 - -0.3045510947704315 - 0.0318244993686676 - <_> - - <_> - - - - <_>5 9 10 9 -1. - <_>5 12 10 3 3. - 0 - -0.0852806270122528 - 0.2472552955150604 - -0.0407265201210976 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 4.7598700039088726e-003 - -0.0640764907002449 - 0.1010356023907661 - <_> - - <_> - - - - <_>4 0 8 9 -1. - <_>8 0 4 9 2. - 0 - 0.0607331991195679 - -0.0887726470828056 - 0.1165471971035004 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0547704882919788 - 0.0223904494196177 - -0.4985511898994446 - <_> - - <_> - - - - <_>1 13 5 6 -1. - <_>1 16 5 3 2. - 0 - -3.7478970625670627e-005 - 0.0624339282512665 - -0.1651535928249359 - <_> - - <_> - - - - <_>11 15 7 4 -1. - <_>11 17 7 2 2. - 0 - -0.0238987505435944 - -0.1902105063199997 - 0.0149795496836305 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - -0.0184658598154783 - 0.2300866991281509 - -0.0453632883727551 - <_> - - <_> - - - - <_>7 7 7 8 -1. - <_>7 11 7 4 2. - 0 - -3.8619639817625284e-003 - -0.1116836965084076 - 0.0795509666204453 - <_> - - <_> - - - - <_>2 4 3 10 -1. - <_>2 9 3 5 2. - 0 - 0.0606829896569252 - 0.0254010409116745 - -0.4178782105445862 - <_> - - <_> - - - - <_>7 2 13 2 -1. - <_>7 3 13 1 2. - 0 - -6.1235381290316582e-003 - -0.2420157045125961 - 0.0199846904724836 - <_> - - <_> - - - - <_>2 15 7 4 -1. - <_>2 17 7 2 2. - 0 - -0.0275584608316422 - -0.4567821025848389 - 0.0203280691057444 - <_> - - <_> - - - - <_>14 1 6 10 -1. - <_>17 1 3 5 2. - <_>14 6 3 5 2. - 0 - 0.0249386299401522 - -0.0383990183472633 - 0.1320528984069824 - <_> - - <_> - - - - <_>0 1 6 10 -1. - <_>0 1 3 5 2. - <_>3 6 3 5 2. - 0 - -0.0470814295113087 - 0.3183973133563995 - -0.0321274809539318 - <_> - - <_> - - - - <_>8 0 8 8 -1. - <_>12 0 4 4 2. - <_>8 4 4 4 2. - 0 - 0.0623219907283783 - 0.0178469605743885 - -0.5011476874351502 - <_> - - <_> - - - - <_>6 8 4 9 -1. - <_>8 8 2 9 2. - 0 - -5.5789871839806437e-004 - 0.1067302972078323 - -0.0904543101787567 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -0.0205287300050259 - 0.2277700006961823 - -0.0466837584972382 - <_> - - <_> - - - - <_>7 1 4 12 -1. - <_>9 1 2 12 2. - 0 - 1.4043749542906880e-003 - -0.2068850994110107 - 0.0673208534717560 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - 0.0314745493233204 - 0.0258730500936508 - -0.3138580918312073 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>6 0 2 8 3. - 0 - -0.0313643403351307 - -0.3507966995239258 - 0.0248904805630445 - <_> - - <_> - - - - <_>10 0 4 18 -1. - <_>10 6 4 6 3. - 0 - -0.1007601991295815 - -0.2273838967084885 - 0.0107318796217442 - <_> - - <_> - - - - <_>0 5 7 12 -1. - <_>0 9 7 4 3. - 0 - 0.0144099602475762 - 0.2400186061859131 - -0.0383890494704247 - <_> - - <_> - - - - <_>11 5 5 9 -1. - <_>11 8 5 3 3. - 0 - 0.0564101710915565 - -0.0406672693789005 - 0.1988081037998200 - <_> - - <_> - - - - <_>3 9 14 4 -1. - <_>3 9 7 2 2. - <_>10 11 7 2 2. - 0 - -0.0143101001158357 - -0.2248423993587494 - 0.0514159686863422 - <_> - - <_> - - - - <_>3 7 17 3 -1. - <_>3 8 17 1 3. - 0 - 0.0380934812128544 - 0.0106020001694560 - -0.6503134965896606 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 7.3483381420373917e-003 - 0.0376242995262146 - -0.2366017997264862 - <_> - - <_> - - - - <_>5 0 15 8 -1. - <_>10 0 5 8 3. - 0 - 0.1599038988351822 - -0.0319586917757988 - 0.0782571882009506 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0752983763813972 - -0.0222257394343615 - 0.4773482978343964 - <_> - - <_> - - - - <_>2 3 16 9 -1. - <_>2 6 16 3 3. - 0 - 0.0105156302452087 - 0.0249795392155647 - -0.4351730942726135 - <_> - - <_> - - - - <_>4 0 12 8 -1. - <_>4 4 12 4 2. - 0 - 0.1172024980187416 - -0.0372359789907932 - 0.2652949988842011 - <_> - - <_> - - - - <_>13 0 7 6 -1. - <_>13 2 7 2 3. - 0 - 1.5799700122443028e-005 - -0.1083744987845421 - 0.0728097036480904 - <_> - - <_> - - - - <_>4 0 2 15 -1. - <_>5 0 1 15 2. - 0 - 0.0121151199564338 - 0.0650321990251541 - -0.1437816023826599 - <_> - - <_> - - - - <_>10 10 6 7 -1. - <_>12 10 2 7 3. - 0 - -0.0177662707865238 - 0.1009543016552925 - -0.0244991406798363 - <_> - - <_> - - - - <_>4 10 6 7 -1. - <_>6 10 2 7 3. - 0 - 0.0422279201447964 - -0.0366250798106194 - 0.2834149003028870 - <_> - - <_> - - - - <_>10 8 8 8 -1. - <_>14 8 4 4 2. - <_>10 12 4 4 2. - 0 - 0.0243466794490814 - 0.0245600100606680 - -0.1978784054517746 - <_> - - <_> - - - - <_>2 8 8 8 -1. - <_>2 8 4 4 2. - <_>6 12 4 4 2. - 0 - 0.0317488387227058 - 0.0296038594096899 - -0.3041270971298218 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0526162385940552 - 0.1775135993957520 - -0.0318257212638855 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - -0.0543589107692242 - 0.2288665026426315 - -0.0402214117348194 - <_> - - <_> - - - - <_>10 1 3 10 -1. - <_>10 6 3 5 2. - 0 - 1.1845750268548727e-003 - 0.0615281201899052 - -0.1220474019646645 - <_> - - <_> - - - - <_>6 11 5 6 -1. - <_>6 14 5 3 2. - 0 - -0.0363252982497215 - -0.2952817082405090 - 0.0334528312087059 - <_> - - <_> - - - - <_>4 3 12 12 -1. - <_>4 7 12 4 3. - 0 - 0.1510080993175507 - -0.0256619006395340 - 0.3878808915615082 - <_> - - <_> - - - - <_>4 5 10 6 -1. - <_>4 5 5 3 2. - <_>9 8 5 3 2. - 0 - 0.0282789394259453 - -0.0359514914453030 - 0.2525135874748230 - <_> - - <_> - - - - <_>11 4 9 10 -1. - <_>11 9 9 5 2. - 0 - -0.0838032513856888 - -0.7259948253631592 - 4.1993269696831703e-003 - <_> - - <_> - - - - <_>7 2 4 12 -1. - <_>7 6 4 4 3. - 0 - -2.9865629039704800e-004 - 0.0553029887378216 - -0.1667886972427368 - <_> - - <_> - - - - <_>11 1 9 18 -1. - <_>11 7 9 6 3. - 0 - -0.0168727394193411 - -0.1904053986072540 - 0.0523077584803104 - <_> - - <_> - - - - <_>4 8 12 10 -1. - <_>4 8 6 5 2. - <_>10 13 6 5 2. - 0 - -0.0594513118267059 - -0.4763435125350952 - 0.0209812093526125 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - -0.0183788295835257 - 0.0668584629893303 - -0.0603890903294086 - <_> - - <_> - - - - <_>6 0 8 14 -1. - <_>6 0 4 7 2. - <_>10 7 4 7 2. - 0 - 0.0481988489627838 - 0.0425803512334824 - -0.2601073086261749 - <_> - - <_> - - - - <_>8 1 8 8 -1. - <_>12 1 4 4 2. - <_>8 5 4 4 2. - 0 - -0.0432171300053597 - -0.2506701052188873 - 0.0172253008931875 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -6.3647949136793613e-003 - -0.1678871065378189 - 0.0688573196530342 - <_> - - <_> - - - - <_>2 1 18 5 -1. - <_>8 1 6 5 3. - 0 - 0.2477056980133057 - -0.0331544503569603 - 0.1479407995939255 - <_> - - <_> - - - - <_>0 0 15 8 -1. - <_>5 0 5 8 3. - 0 - -0.1121686995029450 - 0.5112972855567932 - -0.0173601005226374 - <_> - - <_> - - - - <_>5 15 10 5 -1. - <_>5 15 5 5 2. - 0 - 0.0366010107100010 - -0.0438699796795845 - 0.1975523978471756 - <_> - - <_> - - - - <_>0 5 12 15 -1. - <_>6 5 6 15 2. - 0 - -0.0723325535655022 - -0.8293241262435913 - 0.0118101201951504 - <_> - - <_> - - - - <_>5 7 15 3 -1. - <_>10 7 5 3 3. - 0 - 0.0778379514813423 - 0.0245205797255039 - -0.2726052105426788 - <_> - - <_> - - - - <_>0 7 15 3 -1. - <_>5 7 5 3 3. - 0 - 0.0720945969223976 - 0.0376062504947186 - -0.2729178071022034 - <_> - - <_> - - - - <_>11 11 7 6 -1. - <_>11 13 7 2 3. - 0 - -0.0873733535408974 - -0.9534478783607483 - 3.2734218984842300e-003 - <_> - - <_> - - - - <_>2 11 7 6 -1. - <_>2 13 7 2 3. - 0 - -0.0362400598824024 - -0.3230000138282776 - 0.0263893101364374 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -8.7862694635987282e-003 - -0.1480821073055267 - 0.0467615611851215 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 6.5432381816208363e-003 - 0.0600714795291424 - -0.1503639966249466 - <_> - - <_> - - - - <_>15 0 5 8 -1. - <_>15 4 5 4 2. - 0 - 2.7910009957849979e-003 - -0.0795856565237045 - 0.0640649423003197 - <_> - - <_> - - - - <_>0 0 20 4 -1. - <_>0 0 10 2 2. - <_>10 2 10 2 2. - 0 - 0.0294719301164150 - 0.0369045287370682 - -0.2765960991382599 - <_> - - <_> - - - - <_>7 5 6 14 -1. - <_>10 5 3 7 2. - <_>7 12 3 7 2. - 0 - -0.0449241511523724 - 0.3531363010406494 - -0.0272191409021616 - <_> - - <_> - - - - <_>6 6 7 4 -1. - <_>6 8 7 2 2. - 0 - 0.0789695233106613 - 0.0108738001435995 - -0.9321752786636353 - <_> - - <_> - - - - <_>11 5 5 9 -1. - <_>11 8 5 3 3. - 0 - -0.0310530308634043 - 0.2408788949251175 - -0.0271559692919254 - <_> - - <_> - - - - <_>4 5 5 9 -1. - <_>4 8 5 3 3. - 0 - 0.0504290908575058 - -0.0541648007929325 - 0.2034392058849335 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>10 5 5 3 2. - <_>5 8 5 3 2. - 0 - -0.0376376584172249 - 0.3299897909164429 - -0.0345730893313885 - <_> - - <_> - - - - <_>0 0 5 8 -1. - <_>0 4 5 4 2. - 0 - -1.7269999952986836e-003 - -0.1233977973461151 - 0.0759583935141563 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - 0.0126043399795890 - 0.0361500009894371 - -0.2159177064895630 - <_> - - <_> - - - - <_>2 11 4 8 -1. - <_>4 11 2 8 2. - 0 - 0.0110106403008103 - -0.1433029025793076 - 0.0630432665348053 - <_> - - <_> - - - - <_>14 5 4 14 -1. - <_>16 5 2 7 2. - <_>14 12 2 7 2. - 0 - 0.0135396998375654 - -0.0784185230731964 - 0.1838940978050232 - <_> - - <_> - - - - <_>2 5 4 14 -1. - <_>2 5 2 7 2. - <_>4 12 2 7 2. - 0 - -0.0389497689902782 - 0.3418363034725189 - -0.0295054297894239 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - -0.0490930788218975 - -0.3627820014953613 - 0.0170936193317175 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 4.2306110262870789e-003 - 0.0581905506551266 - -0.1838379055261612 - <_> - - <_> - - - - <_>8 12 10 6 -1. - <_>8 14 10 2 3. - 0 - 8.9376904070377350e-003 - -0.0515764988958836 - 0.1937699019908905 - <_> - - <_> - - - - <_>7 2 4 14 -1. - <_>7 2 2 7 2. - <_>9 9 2 7 2. - 0 - 0.0408462807536125 - 0.0132417296990752 - -0.7089222073554993 - <_> - - <_> - - - - <_>5 7 14 4 -1. - <_>12 7 7 2 2. - <_>5 9 7 2 2. - 0 - -0.0369459614157677 - -0.3445631861686707 - 7.1702878922224045e-003 - <_> - - <_> - - - - <_>1 7 14 4 -1. - <_>1 7 7 2 2. - <_>8 9 7 2 2. - 0 - -0.0129241803660989 - -0.1935417950153351 - 0.0481577888131142 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - 0.0330796502530575 - -0.0517048202455044 - 0.1349232941865921 - <_> - - <_> - - - - <_>2 6 14 10 -1. - <_>2 6 7 5 2. - <_>9 11 7 5 2. - 0 - 0.0222335197031498 - 0.0529199913144112 - -0.1762863993644714 - <_> - - <_> - - - - <_>13 5 4 11 -1. - <_>13 5 2 11 2. - 0 - -0.0144835002720356 - 0.1510524004697800 - -0.0398177988827229 - <_> - - <_> - - - - <_>2 13 15 6 -1. - <_>7 13 5 6 3. - 0 - 0.1593490988016129 - -0.0334229283034801 - 0.2808581888675690 - <_> - - <_> - - - - <_>5 16 12 4 -1. - <_>9 16 4 4 3. - 0 - 0.1247043013572693 - 0.0112258298322558 - -0.4552010893821716 - <_> - - <_> - - - - <_>3 15 9 5 -1. - <_>6 15 3 5 3. - 0 - 0.0702432990074158 - 0.0262131690979004 - -0.3477858901023865 - <_> - - <_> - - - - <_>2 0 17 18 -1. - <_>2 9 17 9 2. - 0 - 0.6174768805503845 - 9.0320473536849022e-003 - -0.5521609783172607 - <_> - - <_> - - - - <_>1 0 4 12 -1. - <_>1 4 4 4 3. - 0 - 0.0770079270005226 - 9.3850009143352509e-003 - -0.6949511766433716 - <_> - - <_> - - - - <_>13 5 4 11 -1. - <_>13 5 2 11 2. - 0 - 0.0428741201758385 - -0.0331663191318512 - 0.1355023980140686 - <_> - - <_> - - - - <_>3 4 6 5 -1. - <_>6 4 3 5 2. - 0 - -0.0245582591742277 - 0.3898926079273224 - -0.0205063205212355 - <_> - - <_> - - - - <_>3 0 15 2 -1. - <_>3 1 15 1 2. - 0 - 0.0107231503352523 - -0.0515267588198185 - 0.0894612073898315 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0383319705724716 - -0.0399528592824936 - 0.1859154999256134 - <_> - - <_> - - - - <_>4 7 15 3 -1. - <_>9 7 5 3 3. - 0 - 0.1255601942539215 - 5.1561538130044937e-003 - -0.8478239178657532 - <_> - - <_> - - - - <_>1 7 15 3 -1. - <_>6 7 5 3 3. - 0 - 0.1159007027745247 - 9.7828712314367294e-003 - -0.7643743157386780 - <_> - - <_> - - - - <_>11 2 3 14 -1. - <_>12 2 1 14 3. - 0 - -0.0150160603225231 - -0.1832856982946396 - 0.0321253389120102 - <_> - - <_> - - - - <_>7 6 3 13 -1. - <_>8 6 1 13 3. - 0 - -4.1521931998431683e-003 - 0.0981609821319580 - -0.0827690064907074 - <_> - - <_> - - - - <_>13 14 7 4 -1. - <_>13 16 7 2 2. - 0 - 1.4998050173744559e-003 - 0.0412286892533302 - -0.0844605267047882 - <_> - - <_> - - - - <_>2 7 16 2 -1. - <_>2 8 16 1 2. - 0 - 0.0381175316870213 - 0.0196919608861208 - -0.3993115127086639 - <_> - - <_> - - - - <_>7 6 7 4 -1. - <_>7 8 7 2 2. - 0 - 9.4391452148556709e-004 - -0.1967470049858093 - 0.0564762093126774 - <_> - - <_> - - - - <_>8 4 3 10 -1. - <_>8 9 3 5 2. - 0 - 2.4907960323616862e-004 - 0.0927974730730057 - -0.1070868968963623 - <_> - - <_> - - - - <_>9 6 4 8 -1. - <_>9 10 4 4 2. - 0 - 0.0254476703703403 - -0.0253043901175261 - 0.1003243997693062 - <_> - - <_> - - - - <_>0 4 11 12 -1. - <_>0 10 11 6 2. - 0 - -0.0288840904831886 - -0.1725983023643494 - 0.0496710613369942 - <_> - - <_> - - - - <_>13 6 4 14 -1. - <_>13 13 4 7 2. - 0 - 0.1210284009575844 - -5.5194748565554619e-003 - 0.9543825984001160 - <_> - - <_> - - - - <_>3 6 4 14 -1. - <_>3 13 4 7 2. - 0 - -7.9245921224355698e-003 - 0.0649034827947617 - -0.1267154961824417 - <_> - - <_> - - - - <_>10 2 6 10 -1. - <_>13 2 3 5 2. - <_>10 7 3 5 2. - 0 - -0.0655360668897629 - -0.3789218962192535 - 0.0164630897343159 - <_> - - <_> - - - - <_>4 7 12 6 -1. - <_>4 9 12 2 3. - 0 - -0.0168834608048201 - 0.5853481888771057 - -0.0146717699244618 - <_> - - <_> - - - - <_>0 5 20 6 -1. - <_>0 7 20 2 3. - 0 - 6.7252418957650661e-003 - 0.0276042297482491 - -0.3481742143630981 - <_> - - <_> - - - - <_>4 2 6 10 -1. - <_>4 2 3 5 2. - <_>7 7 3 5 2. - 0 - -0.0637838989496231 - -0.3956716060638428 - 0.0198678895831108 - <_> - - <_> - - - - <_>2 1 18 5 -1. - <_>8 1 6 5 3. - 0 - 0.1860055029392242 - -0.0458985790610313 - 0.0735860764980316 - <_> - - <_> - - - - <_>6 1 4 8 -1. - <_>6 5 4 4 2. - 0 - 0.0497240312397480 - -0.0205176305025816 - 0.4310784041881561 - <_> - - <_> - - - - <_>12 9 6 9 -1. - <_>12 12 6 3 3. - 0 - 0.0150113804265857 - 0.0401921495795250 - -0.1024248972535133 - <_> - - <_> - - - - <_>8 3 3 13 -1. - <_>9 3 1 13 3. - 0 - -0.0150850303471088 - 0.2388892024755478 - -0.0356429181993008 - <_> - - <_> - - - - <_>11 0 2 15 -1. - <_>11 0 1 15 2. - 0 - -0.0129314903169870 - -0.3686308860778809 - 0.0173778906464577 - <_> - - <_> - - - - <_>7 0 2 15 -1. - <_>8 0 1 15 2. - 0 - -0.0131868999451399 - -0.4317027032375336 - 0.0179479103535414 - <_> - - <_> - - - - <_>4 9 12 4 -1. - <_>8 9 4 4 3. - 0 - -0.0668149590492249 - 0.4133611917495728 - -0.0209043100476265 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - 0.0440643317997456 - -0.3861519098281860 - 0.0214145109057426 - <_> - - <_> - - - - <_>8 7 12 13 -1. - <_>8 7 6 13 2. - 0 - 0.4134173095226288 - 0.0101309902966022 - -0.4705309867858887 - <_> - - <_> - - - - <_>0 8 14 2 -1. - <_>7 8 7 2 2. - 0 - 0.0244436599314213 - 0.0931841209530830 - -0.0867741629481316 - <_> - - <_> - - - - <_>5 17 15 3 -1. - <_>10 17 5 3 3. - 0 - 0.1577968001365662 - 4.8137311823666096e-003 - -0.5874621272087097 - <_> - - <_> - - - - <_>0 17 15 3 -1. - <_>5 17 5 3 3. - 0 - -0.0201415102928877 - 0.2264391928911209 - -0.0468246303498745 - <_> - - <_> - - - - <_>11 8 8 5 -1. - <_>11 8 4 5 2. - 0 - 3.8796770386397839e-003 - -0.0771552175283432 - 0.0361061692237854 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - 0.0150649603456259 - -0.0566568598151207 - 0.1475864946842194 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 0.0129253100603819 - 0.0353080183267593 - -0.1164532005786896 - <_> - - <_> - - - - <_>3 1 8 8 -1. - <_>3 1 4 4 2. - <_>7 5 4 4 2. - 0 - -0.0147883100435138 - -0.1145993992686272 - 0.0750000700354576 - <_> - - <_> - - - - <_>10 1 3 10 -1. - <_>10 6 3 5 2. - 0 - -2.0497168879956007e-003 - 0.0420674011111259 - -0.0704095736145973 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - 8.9428946375846863e-003 - 0.0539898388087749 - -0.1538084000349045 - <_> - - <_> - - - - <_>8 4 4 12 -1. - <_>8 8 4 4 3. - 0 - 0.1006499975919724 - -0.0297092497348785 - 0.3129375874996185 - <_> - - <_> - - - - <_>0 11 18 2 -1. - <_>0 12 18 1 2. - 0 - -0.0465800799429417 - -0.7222787737846375 - 0.0130043402314186 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0386185906827450 - 0.3386775851249695 - -0.0217266101390123 - <_> - - <_> - - - - <_>2 9 6 9 -1. - <_>2 12 6 3 3. - 0 - 8.5657741874456406e-003 - 0.0706212893128395 - -0.1305588036775589 - <_> - - <_> - - - - <_>2 1 18 5 -1. - <_>8 1 6 5 3. - 0 - -0.1098629981279373 - 0.3797450959682465 - -5.1755867898464203e-003 - <_> - - <_> - - - - <_>0 1 18 5 -1. - <_>6 1 6 5 3. - 0 - 0.3018425107002258 - -0.0242748390883207 - 0.3663265109062195 - <_> - - <_> - - - - <_>11 5 2 14 -1. - <_>11 12 2 7 2. - 0 - -0.0532460883259773 - -0.5529050230979919 - 6.2071220017969608e-003 - <_> - - <_> - - - - <_>7 8 6 12 -1. - <_>7 8 3 6 2. - <_>10 14 3 6 2. - 0 - 0.0366298705339432 - 0.0231612492352724 - -0.3551486134529114 - <_> - - <_> - - - - <_>2 15 16 4 -1. - <_>2 17 16 2 2. - 0 - 0.0699931979179382 - 8.9623704552650452e-003 - -0.8224542140960693 - <_> - - <_> - - - - <_>5 1 2 19 -1. - <_>6 1 1 19 2. - 0 - -8.7623577564954758e-003 - -0.2802872061729431 - 0.0262174606323242 - <_> - - <_> - - - - <_>7 4 6 10 -1. - <_>10 4 3 5 2. - <_>7 9 3 5 2. - 0 - 0.0152759896591306 - -0.0501230694353580 - 0.1577408015727997 - <_> - - <_> - - - - <_>2 16 15 4 -1. - <_>7 16 5 4 3. - 0 - 0.1883618980646133 - 0.0114834597334266 - -0.7400444746017456 - <_> - - <_> - - - - <_>10 1 6 15 -1. - <_>12 1 2 15 3. - 0 - -0.0145186297595501 - 0.0829219222068787 - -0.0525361411273479 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - 0.0192219894379377 - 0.0407903417944908 - -0.2088976055383682 - <_> - - <_> - - - - <_>5 8 10 4 -1. - <_>5 10 10 2 2. - 0 - -0.0312749892473221 - 0.8086434006690979 - -0.0107549801468849 - <_> - - <_> - - - - <_>6 6 5 8 -1. - <_>6 10 5 4 2. - 0 - -4.9813431687653065e-003 - -0.1961786001920700 - 0.0413300693035126 - <_> - - <_> - - - - <_>4 5 12 8 -1. - <_>10 5 6 4 2. - <_>4 9 6 4 2. - 0 - 0.0372969098389149 - 0.0303138792514801 - -0.2733631134033203 - <_> - - <_> - - - - <_>4 1 6 15 -1. - <_>6 1 2 15 3. - 0 - -0.0190145503729582 - 0.1343944072723389 - -0.0607824996113777 - <_> - - <_> - - - - <_>8 8 6 12 -1. - <_>11 8 3 6 2. - <_>8 14 3 6 2. - 0 - -7.9229613766074181e-003 - -0.0796897709369659 - 0.0404974408447742 - <_> - - <_> - - - - <_>2 6 6 8 -1. - <_>5 6 3 8 2. - 0 - 0.0963717997074127 - -0.0255768708884716 - 0.3244051039218903 - <_> - - <_> - - - - <_>17 0 2 14 -1. - <_>17 0 1 14 2. - 0 - -0.0172103103250265 - 0.2977229952812195 - -0.0309941396117210 - <_> - - <_> - - - - <_>1 0 2 14 -1. - <_>2 0 1 14 2. - 0 - 0.0107361795380712 - -0.0702993422746658 - 0.1244890019297600 - <_> - - <_> - - - - <_>11 2 3 13 -1. - <_>12 2 1 13 3. - 0 - -0.0403988696634769 - -0.6447088718414307 - 6.9025149568915367e-003 - <_> - - <_> - - - - <_>6 2 3 13 -1. - <_>7 2 1 13 3. - 0 - -0.0318704284727573 - -0.5333933830261231 - 0.0152217904105783 - <_> - - <_> - - - - <_>16 0 4 13 -1. - <_>16 0 2 13 2. - 0 - 0.0365180782973766 - -0.0778756514191628 - 0.1445890069007874 - <_> - - <_> - - - - <_>0 0 4 13 -1. - <_>2 0 2 13 2. - 0 - 0.1233026012778282 - 0.0176893007010221 - -0.5189579725265503 - <_> - - <_> - - - - <_>5 6 14 3 -1. - <_>5 6 7 3 2. - 0 - 0.1008619964122772 - 6.6002830862998962e-003 - -0.5528950095176697 - <_> - - <_> - - - - <_>1 6 14 3 -1. - <_>8 6 7 3 2. - 0 - 0.1002677008509636 - 0.0101750902831554 - -0.7155439257621765 - <_> - - <_> - - - - <_>7 8 6 12 -1. - <_>10 8 3 6 2. - <_>7 14 3 6 2. - 0 - 0.0369567610323429 - 0.0221318602561951 - -0.3145228028297424 - <_> - - <_> - - - - <_>5 7 4 7 -1. - <_>7 7 2 7 2. - 0 - 8.5017476230859756e-003 - 0.0491466782987118 - -0.1519349962472916 - <_> - - <_> - - - - <_>12 1 4 12 -1. - <_>12 5 4 4 3. - 0 - 0.0538330487906933 - 2.5698679964989424e-003 - -0.5075020790100098 - <_> - - <_> - - - - <_>4 1 4 12 -1. - <_>4 5 4 4 3. - 0 - 0.0489589385688305 - 9.2353876680135727e-003 - -0.7937114238739014 - <_> - - <_> - - - - <_>3 0 14 12 -1. - <_>3 4 14 4 3. - 0 - 0.0408108793199062 - -0.0462704300880432 - 0.1972641050815582 - <_> - - <_> - - - - <_>6 6 7 4 -1. - <_>6 8 7 2 2. - 0 - -3.3165120985358953e-003 - -0.2149500995874405 - 0.0388684011995792 - <_> - - <_> - - - - <_>12 0 4 7 -1. - <_>12 0 2 7 2. - 0 - 4.8434760537929833e-004 - -0.1787064969539642 - 0.0571296811103821 - <_> - - <_> - - - - <_>2 9 12 3 -1. - <_>8 9 6 3 2. - 0 - 0.0794940963387489 - -0.0224635507911444 - 0.3677097856998444 - <_> - - <_> - - - - <_>0 9 20 3 -1. - <_>0 10 20 1 3. - 0 - -8.8844364508986473e-003 - -0.3379656076431274 - 0.0258696507662535 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0105756204575300 - 0.1243861988186836 - -0.0681473836302757 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - 7.3358109220862389e-003 - -0.0433751717209816 - 0.1548348069190979 - <_> - - <_> - - - - <_>2 2 15 12 -1. - <_>2 8 15 6 2. - 0 - 0.0423068217933178 - 0.1001643985509872 - -0.0880116894841194 - <_> - - <_> - - - - <_>11 5 5 6 -1. - <_>11 8 5 3 2. - 0 - 0.0717592164874077 - -8.9269876480102539e-003 - 0.2325419932603836 - <_> - - <_> - - - - <_>2 8 14 3 -1. - <_>2 9 14 1 3. - 0 - -0.0224782805889845 - -0.5405740737915039 - 0.0143961198627949 - <_> - - <_> - - - - <_>10 2 6 9 -1. - <_>10 5 6 3 3. - 0 - -0.0256065800786018 - -0.0435081794857979 - 0.0642850473523140 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 0.0257334094494581 - 0.0230848491191864 - -0.3427874147891998 - <_> - - <_> - - - - <_>8 14 12 6 -1. - <_>14 14 6 3 2. - <_>8 17 6 3 2. - 0 - -0.0701633393764496 - 0.4074433147907257 - -0.0118360901251435 - <_> - - <_> - - - - <_>6 12 8 6 -1. - <_>6 14 8 2 3. - 0 - -0.0125273298472166 - 0.0911845266819000 - -0.0870356336236000 - <_> - - <_> - - - - <_>9 14 9 4 -1. - <_>9 16 9 2 2. - 0 - 0.0599834583699703 - 3.6528799682855606e-003 - -0.8026152253150940 - <_> - - <_> - - - - <_>0 14 7 4 -1. - <_>0 16 7 2 2. - 0 - -5.2271911408752203e-004 - 0.0695738270878792 - -0.1209163963794708 - <_> - - <_> - - - - <_>2 11 18 8 -1. - <_>2 15 18 4 2. - 0 - -0.2099653929471970 - -0.4674727916717529 - 9.4682360067963600e-003 - <_> - - <_> - - - - <_>0 12 10 8 -1. - <_>0 12 5 4 2. - <_>5 16 5 4 2. - 0 - -0.0183586403727531 - 0.1491988003253937 - -0.0571989007294178 - <_> - - <_> - - - - <_>13 9 4 7 -1. - <_>13 9 2 7 2. - 0 - -0.0133420499041677 - 0.1444787979125977 - -0.0224946402013302 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - -0.0306130591779947 - -0.3359009027481079 - 0.0244337096810341 - <_> - - <_> - - - - <_>12 5 5 9 -1. - <_>12 8 5 3 3. - 0 - -0.0190187506377697 - 0.1551811993122101 - -0.0256136301904917 - <_> - - <_> - - - - <_>3 5 5 9 -1. - <_>3 8 5 3 3. - 0 - -0.0452018082141876 - 0.4873081147670746 - -0.0176416598260403 - <_> - - <_> - - - - <_>5 5 11 6 -1. - <_>5 8 11 3 2. - 0 - 0.0634325966238976 - -0.0519468188285828 - 0.1236144006252289 - <_> - - <_> - - - - <_>4 0 4 7 -1. - <_>6 0 2 7 2. - 0 - 3.4017860889434814e-003 - -0.1703003048896790 - 0.0541434101760387 - <_> - - <_> - - - - <_>1 8 18 5 -1. - <_>7 8 6 5 3. - 0 - -0.0853070765733719 - -0.7187842726707459 - 0.0103922598063946 - <_> - - <_> - - - - <_>1 3 18 7 -1. - <_>7 3 6 7 3. - 0 - -0.0530664995312691 - 0.5235915780067444 - -0.0183697603642941 - <_> - - <_> - - - - <_>7 11 7 8 -1. - <_>7 15 7 4 2. - 0 - -0.0283193700015545 - -0.1197988986968994 - 0.0589515492320061 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>10 14 6 6 2. - 0 - -0.0873538032174110 - 0.2708908021450043 - -0.0293453298509121 - <_> - - <_> - - - - <_>5 6 11 9 -1. - <_>5 9 11 3 3. - 0 - 0.2715223133563995 - -0.0116485897451639 - 0.5584297776222229 - <_> - - <_> - - - - <_>7 12 4 8 -1. - <_>7 16 4 4 2. - 0 - 0.0193884801119566 - 0.0508955903351307 - -0.1796227991580963 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - 0.0211591795086861 - -0.0484248995780945 - 0.0950202569365501 - <_> - - <_> - - - - <_>6 5 7 6 -1. - <_>6 8 7 3 2. - 0 - 0.1203925013542175 - 9.2587787657976151e-003 - -0.8780462145805359 - <_> - - <_> - - - - <_>13 9 4 7 -1. - <_>13 9 2 7 2. - 0 - 0.0500907190144062 - -0.0219269506633282 - 0.2020203024148941 - <_> - - <_> - - - - <_>3 9 4 7 -1. - <_>5 9 2 7 2. - 0 - -5.5227670818567276e-003 - 0.2156028002500534 - -0.0365547798573971 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0275514405220747 - -0.0327820181846619 - 0.1650391966104507 - <_> - - <_> - - - - <_>2 10 8 10 -1. - <_>6 10 4 10 2. - 0 - -0.0255431905388832 - -0.3642446100711823 - 0.0212752092629671 - <_> - - <_> - - - - <_>8 4 12 16 -1. - <_>14 4 6 8 2. - <_>8 12 6 8 2. - 0 - -0.2679182887077332 - 0.4852527081966400 - -4.7535290941596031e-003 - <_> - - <_> - - - - <_>0 4 12 16 -1. - <_>0 4 6 8 2. - <_>6 12 6 8 2. - 0 - -0.1679811030626297 - 0.3928064107894898 - -0.0194149892777205 - <_> - - <_> - - - - <_>8 4 6 7 -1. - <_>10 4 2 7 3. - 0 - 0.0459003485739231 - -0.0367061607539654 - 0.2067760974168778 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>8 6 2 7 2. - <_>10 13 2 7 2. - 0 - 3.6797890788875520e-004 - -0.0870399028062820 - 0.0928309708833694 - <_> - - <_> - - - - <_>5 2 10 18 -1. - <_>10 2 5 9 2. - <_>5 11 5 9 2. - 0 - -0.0991945564746857 - -0.3609667122364044 - 0.0219627693295479 - <_> - - <_> - - - - <_>6 11 7 6 -1. - <_>6 13 7 2 3. - 0 - 8.0924080975819379e-005 - -0.0790076926350594 - 0.0959040671586990 - <_> - - <_> - - - - <_>9 4 5 12 -1. - <_>9 10 5 6 2. - 0 - 7.0894961245357990e-003 - 0.0370760783553123 - -0.0509171113371849 - <_> - - <_> - - - - <_>0 11 7 4 -1. - <_>0 13 7 2 2. - 0 - -1.2181960046291351e-003 - 0.0490940287709236 - -0.1597597002983093 - <_> - - <_> - - - - <_>1 5 19 15 -1. - <_>1 10 19 5 3. - 0 - -0.0921386629343033 - 0.5528473258018494 - -0.0135958604514599 - <_> - - <_> - - - - <_>0 15 7 4 -1. - <_>0 17 7 2 2. - 0 - 6.2209279276430607e-003 - 0.0468891896307468 - -0.1810580044984818 - <_> - - <_> - - - - <_>6 0 10 6 -1. - <_>11 0 5 3 2. - <_>6 3 5 3 2. - 0 - 0.0650148391723633 - 9.4407051801681519e-003 - -0.5122401714324951 - <_> - - <_> - - - - <_>4 0 10 6 -1. - <_>4 0 5 3 2. - <_>9 3 5 3 2. - 0 - 0.0540559217333794 - 0.0162890590727329 - -0.4268450140953064 - -1.4526200294494629 - 35 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0375940799713135 - -0.1595308035612106 - 0.2424535006284714 - <_> - - <_> - - - - <_>11 7 7 6 -1. - <_>11 9 7 2 3. - 0 - 4.0349629707634449e-003 - -0.2561712861061096 - 0.0804205611348152 - <_> - - <_> - - - - <_>4 6 12 5 -1. - <_>8 6 4 5 3. - 0 - 2.1681638900190592e-003 - -0.2808907032012940 - 0.0709036290645599 - <_> - - <_> - - - - <_>9 4 11 4 -1. - <_>9 6 11 2 2. - 0 - -7.4014628808072302e-006 - 0.0493261814117432 - -0.1968849003314972 - <_> - - <_> - - - - <_>2 1 6 10 -1. - <_>2 1 3 5 2. - <_>5 6 3 5 2. - 0 - -2.2384349722415209e-003 - 0.0686188563704491 - -0.2177533954381943 - <_> - - <_> - - - - <_>12 5 4 8 -1. - <_>12 9 4 4 2. - 0 - 2.9939650557935238e-003 - -0.2425770014524460 - 0.0297161303460598 - <_> - - <_> - - - - <_>0 5 18 8 -1. - <_>0 5 9 4 2. - <_>9 9 9 4 2. - 0 - 4.5135850086808205e-003 - 0.0894438698887825 - -0.1946154981851578 - <_> - - <_> - - - - <_>9 6 5 12 -1. - <_>9 12 5 6 2. - 0 - 3.8457550108432770e-003 - 0.0509358011186123 - -0.2772192955017090 - <_> - - <_> - - - - <_>0 12 13 2 -1. - <_>0 13 13 1 2. - 0 - 4.0572669240646064e-004 - -0.0855177417397499 - 0.1644628047943115 - <_> - - <_> - - - - <_>10 4 3 13 -1. - <_>11 4 1 13 3. - 0 - -7.0624578256683890e-006 - 0.0784544870257378 - -0.1239598020911217 - <_> - - <_> - - - - <_>7 3 3 14 -1. - <_>8 3 1 14 3. - 0 - -2.8428720543161035e-004 - 0.1077425032854080 - -0.1222200989723206 - <_> - - <_> - - - - <_>7 12 6 8 -1. - <_>9 12 2 8 3. - 0 - 7.3404680006206036e-003 - 0.0478371605277061 - -0.2444117069244385 - <_> - - <_> - - - - <_>4 5 4 12 -1. - <_>4 9 4 4 3. - 0 - 3.6235509905964136e-003 - -0.3153378963470459 - 0.0350668802857399 - <_> - - <_> - - - - <_>3 3 17 2 -1. - <_>3 4 17 1 2. - 0 - -1.5671759610995650e-003 - -0.1714708060026169 - 0.0651218369603157 - <_> - - <_> - - - - <_>2 0 15 6 -1. - <_>2 2 15 2 3. - 0 - 4.2834067717194557e-003 - -0.1319001019001007 - 0.0927091464400291 - <_> - - <_> - - - - <_>8 0 12 4 -1. - <_>8 0 6 4 2. - 0 - -8.9772082865238190e-003 - 0.1246948018670082 - -0.0281185004860163 - <_> - - <_> - - - - <_>1 10 10 6 -1. - <_>1 12 10 2 3. - 0 - 5.5919871665537357e-003 - 0.0486716218292713 - -0.2246021926403046 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - 0.0117823900654912 - 0.0310411099344492 - -0.2988210916519165 - <_> - - <_> - - - - <_>1 8 4 12 -1. - <_>3 8 2 12 2. - 0 - -5.5568912066519260e-003 - 0.1368910074234009 - -0.0771521925926209 - <_> - - <_> - - - - <_>4 15 15 5 -1. - <_>9 15 5 5 3. - 0 - 0.0171620491892099 - -0.0402986705303192 - 0.1123280003666878 - <_> - - <_> - - - - <_>0 1 14 3 -1. - <_>0 2 14 1 3. - 0 - 3.5631000064313412e-003 - 0.0560561008751392 - -0.1960884034633637 - <_> - - <_> - - - - <_>10 2 6 7 -1. - <_>12 2 2 7 3. - 0 - 0.0225866995751858 - 0.0112503003329039 - -0.5049077868461609 - <_> - - <_> - - - - <_>4 2 6 7 -1. - <_>6 2 2 7 3. - 0 - 2.6307879015803337e-003 - 0.0415282696485519 - -0.2218586057424545 - <_> - - <_> - - - - <_>6 12 8 6 -1. - <_>6 14 8 2 3. - 0 - -1.0008380049839616e-003 - 0.0596570596098900 - -0.1539579033851624 - <_> - - <_> - - - - <_>1 3 14 12 -1. - <_>1 7 14 4 3. - 0 - -7.1316999383270741e-003 - 0.1059068962931633 - -0.0897009521722794 - <_> - - <_> - - - - <_>4 15 15 5 -1. - <_>9 15 5 5 3. - 0 - -0.0616853609681129 - 0.1267784982919693 - -0.0227099694311619 - <_> - - <_> - - - - <_>1 15 15 5 -1. - <_>6 15 5 5 3. - 0 - 0.0131207099184394 - -0.0637312307953835 - 0.1584208011627197 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0326765999197960 - 0.0257242508232594 - -0.3340620100498200 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1888677030801773 - -0.0171004105359316 - 0.5370013117790222 - <_> - - <_> - - - - <_>11 10 4 7 -1. - <_>11 10 2 7 2. - 0 - -1.6522880468983203e-004 - 0.0549085810780525 - -0.1160800009965897 - <_> - - <_> - - - - <_>5 10 4 7 -1. - <_>7 10 2 7 2. - 0 - -1.4789770357310772e-003 - 0.0776021927595139 - -0.1097119003534317 - <_> - - <_> - - - - <_>4 10 12 5 -1. - <_>8 10 4 5 3. - 0 - -0.0124412104487419 - -0.1409073024988174 - 0.0687325224280357 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - 0.0194579102098942 - -0.0372761785984039 - 0.2631987929344177 - <_> - - <_> - - - - <_>7 1 13 2 -1. - <_>7 2 13 1 2. - 0 - -2.9123809654265642e-003 - -0.1896034032106400 - 0.0293609201908112 - <_> - - <_> - - - - <_>2 5 14 2 -1. - <_>2 6 14 1 2. - 0 - -0.0238706991076469 - 0.2552874982357025 - -0.0312794111669064 - <_> - - <_> - - - - <_>14 0 3 14 -1. - <_>15 0 1 14 3. - 0 - -2.6912079192698002e-003 - -0.1443164944648743 - 0.0484987795352936 - <_> - - <_> - - - - <_>3 0 3 14 -1. - <_>4 0 1 14 3. - 0 - -1.7636029515415430e-003 - -0.1332864016294479 - 0.0542508289217949 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>16 0 2 13 3. - 0 - -0.0188441798090935 - 0.1165309995412827 - -0.0380281507968903 - <_> - - <_> - - - - <_>0 0 6 13 -1. - <_>2 0 2 13 3. - 0 - 0.0387528501451015 - -0.0368112996220589 - 0.2100208997726440 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 9.4316434115171432e-003 - 0.0579645894467831 - -0.1834280043840408 - <_> - - <_> - - - - <_>0 3 4 7 -1. - <_>2 3 2 7 2. - 0 - -0.0117053799331188 - 0.1790505051612854 - -0.0497996509075165 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -4.4072889722883701e-003 - -0.1981050074100494 - 0.0446087196469307 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -4.7192219644784927e-003 - -0.1830749958753586 - 0.0422521717846394 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -4.5182029716670513e-003 - 0.0955721512436867 - -0.0607994608581066 - <_> - - <_> - - - - <_>0 2 4 8 -1. - <_>0 6 4 4 2. - 0 - -5.4851798340678215e-003 - -0.1755612939596176 - 0.0400925390422344 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - -9.9079031497240067e-004 - -0.1397833973169327 - 0.0482529103755951 - <_> - - <_> - - - - <_>0 1 20 16 -1. - <_>0 1 10 8 2. - <_>10 9 10 8 2. - 0 - -5.0425329245626926e-003 - -0.0886258333921433 - 0.0797940269112587 - <_> - - <_> - - - - <_>7 1 10 16 -1. - <_>12 1 5 8 2. - <_>7 9 5 8 2. - 0 - -6.3926707953214645e-003 - 0.0358549095690250 - -0.0850307121872902 - <_> - - <_> - - - - <_>0 1 16 14 -1. - <_>0 1 8 7 2. - <_>8 8 8 7 2. - 0 - -0.0114088095724583 - 0.0777561068534851 - -0.1020037978887558 - <_> - - <_> - - - - <_>9 5 10 6 -1. - <_>14 5 5 3 2. - <_>9 8 5 3 2. - 0 - 0.0592864491045475 - 6.4652841538190842e-003 - -0.4908235073089600 - <_> - - <_> - - - - <_>1 5 10 6 -1. - <_>1 5 5 3 2. - <_>6 8 5 3 2. - 0 - -5.7389298453927040e-003 - -0.1622118949890137 - 0.0595417916774750 - <_> - - <_> - - - - <_>4 5 13 2 -1. - <_>4 6 13 1 2. - 0 - 4.4626160524785519e-003 - -0.0246593896299601 - 0.2850956022739410 - <_> - - <_> - - - - <_>0 4 10 4 -1. - <_>0 6 10 2 2. - 0 - -7.4683688580989838e-004 - 0.0551594309508801 - -0.1451026946306229 - <_> - - <_> - - - - <_>10 0 4 8 -1. - <_>10 4 4 4 2. - 0 - 7.5665451586246490e-003 - -0.0305104404687881 - 0.0926857963204384 - <_> - - <_> - - - - <_>0 3 20 3 -1. - <_>0 4 20 1 3. - 0 - 0.0812033787369728 - 8.3315223455429077e-003 - -0.8862689137458801 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 2.5454829446971416e-003 - -0.0541312582790852 - 0.1655168980360031 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>0 4 6 3 3. - 0 - 0.0563191808760166 - 0.0157447494566441 - -0.4660595059394836 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - -0.0276709608733654 - 0.2791000902652741 - -0.0212675705552101 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>3 17 14 2 2. - 0 - 0.0574955493211746 - 0.0137654300779104 - -0.5688189268112183 - <_> - - <_> - - - - <_>12 12 7 6 -1. - <_>12 14 7 2 3. - 0 - 1.1847530258819461e-003 - 0.0634529665112495 - -0.1604492962360382 - <_> - - <_> - - - - <_>0 14 18 4 -1. - <_>0 14 9 2 2. - <_>9 16 9 2 2. - 0 - 4.2551690712571144e-003 - 0.0630177035927773 - -0.1358460932970047 - <_> - - <_> - - - - <_>14 4 4 9 -1. - <_>14 4 2 9 2. - 0 - -0.0211908593773842 - 0.1962350010871887 - -0.0282491296529770 - <_> - - <_> - - - - <_>0 4 6 8 -1. - <_>2 4 2 8 3. - 0 - 8.3922911435365677e-003 - -0.0620642490684986 - 0.1122507005929947 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - -0.0355345793068409 - 0.1856577992439270 - -0.0210277102887630 - <_> - - <_> - - - - <_>1 10 5 9 -1. - <_>1 13 5 3 3. - 0 - -9.2783384025096893e-003 - -0.1625514030456543 - 0.0534937717020512 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - -7.4480189941823483e-003 - 0.0560459792613983 - -0.0273571293801069 - <_> - - <_> - - - - <_>5 0 9 5 -1. - <_>8 0 3 5 3. - 0 - 0.0345736108720303 - 0.0278723295778036 - -0.2544369101524353 - <_> - - <_> - - - - <_>16 6 4 14 -1. - <_>18 6 2 7 2. - <_>16 13 2 7 2. - 0 - 0.0106442300602794 - -0.0250411499291658 - 0.1289550065994263 - <_> - - <_> - - - - <_>3 1 10 16 -1. - <_>3 1 5 8 2. - <_>8 9 5 8 2. - 0 - -6.9164121523499489e-003 - 0.0551454611122608 - -0.1428662985563278 - <_> - - <_> - - - - <_>2 12 18 4 -1. - <_>11 12 9 2 2. - <_>2 14 9 2 2. - 0 - 0.0404467284679413 - 4.3409019708633423e-003 - -0.3009513914585114 - <_> - - <_> - - - - <_>8 4 4 7 -1. - <_>10 4 2 7 2. - 0 - -0.0211822800338268 - 0.2398775070905685 - -0.0302679706364870 - <_> - - <_> - - - - <_>12 0 3 20 -1. - <_>13 0 1 20 3. - 0 - -0.0182786490768194 - -0.2802436947822571 - 0.0203522592782974 - <_> - - <_> - - - - <_>5 0 3 20 -1. - <_>6 0 1 20 3. - 0 - -6.0500060208141804e-003 - -0.1513808965682983 - 0.0458434186875820 - <_> - - <_> - - - - <_>11 13 9 7 -1. - <_>14 13 3 7 3. - 0 - -7.4632540345191956e-003 - 0.0730878263711929 - -0.0396451205015183 - <_> - - <_> - - - - <_>8 5 4 14 -1. - <_>8 5 2 7 2. - <_>10 12 2 7 2. - 0 - -0.0316406898200512 - 0.3854475915431976 - -0.0189876891672611 - <_> - - <_> - - - - <_>2 12 18 4 -1. - <_>11 12 9 2 2. - <_>2 14 9 2 2. - 0 - -0.0494887195527554 - -0.3745543956756592 - 4.6011591330170631e-003 - <_> - - <_> - - - - <_>0 12 18 4 -1. - <_>0 12 9 2 2. - <_>9 14 9 2 2. - 0 - -2.4384791031479836e-003 - -0.1086444035172463 - 0.0701712965965271 - <_> - - <_> - - - - <_>8 14 12 5 -1. - <_>12 14 4 5 3. - 0 - 7.4253929778933525e-003 - -0.0442232899367809 - 0.0756783708930016 - <_> - - <_> - - - - <_>0 14 12 5 -1. - <_>4 14 4 5 3. - 0 - -0.0535927414894104 - 0.1998178064823151 - -0.0380473807454109 - <_> - - <_> - - - - <_>6 8 14 3 -1. - <_>6 9 14 1 3. - 0 - -0.0215555801987648 - -0.5273768901824951 - 7.7934260480105877e-003 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>1 11 8 2 2. - <_>9 13 8 2 2. - 0 - 4.1731819510459900e-003 - 0.0387420691549778 - -0.1694656014442444 - <_> - - <_> - - - - <_>13 10 6 10 -1. - <_>16 10 3 5 2. - <_>13 15 3 5 2. - 0 - 0.0418822802603245 - -0.0118538998067379 - 0.2923532128334045 - <_> - - <_> - - - - <_>0 5 20 12 -1. - <_>0 5 10 6 2. - <_>10 11 10 6 2. - 0 - -0.0220350697636604 - -0.1362926959991455 - 0.0473232194781303 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 1.6916249878704548e-003 - -0.0494619086384773 - 0.0740484818816185 - <_> - - <_> - - - - <_>1 18 15 2 -1. - <_>1 19 15 1 2. - 0 - -1.9994638860225677e-003 - 0.0930163934826851 - -0.0752305611968040 - <_> - - <_> - - - - <_>13 10 6 10 -1. - <_>16 10 3 5 2. - <_>13 15 3 5 2. - 0 - -8.7527623400092125e-003 - 0.0840763002634048 - -0.0377771891653538 - <_> - - <_> - - - - <_>0 14 20 6 -1. - <_>0 16 20 2 3. - 0 - 0.0281214397400618 - 0.0384716317057610 - -0.1903968006372452 - <_> - - <_> - - - - <_>13 10 6 10 -1. - <_>16 10 3 5 2. - <_>13 15 3 5 2. - 0 - 0.0247137695550919 - -0.0112256696447730 - 0.1340844035148621 - <_> - - <_> - - - - <_>3 0 13 2 -1. - <_>3 1 13 1 2. - 0 - 0.0217188205569983 - -0.0173614192754030 - 0.3487676978111267 - <_> - - <_> - - - - <_>0 7 20 3 -1. - <_>0 8 20 1 3. - 0 - -0.0432022996246815 - -0.5187743902206421 - 0.0129147097468376 - <_> - - <_> - - - - <_>2 5 10 8 -1. - <_>2 9 10 4 2. - 0 - -1.6658119857311249e-003 - -0.3072721958160400 - 0.0191040895879269 - <_> - - <_> - - - - <_>8 5 12 6 -1. - <_>8 8 12 3 2. - 0 - -0.0322691090404987 - 0.3182573020458221 - -6.1126789078116417e-003 - <_> - - <_> - - - - <_>0 5 11 6 -1. - <_>0 8 11 3 2. - 0 - -9.6689872443675995e-003 - 0.3318297863006592 - -0.0184094794094563 - <_> - - <_> - - - - <_>3 10 17 2 -1. - <_>3 11 17 1 2. - 0 - 1.7683519981801510e-003 - 0.0315872281789780 - -0.1148168966174126 - <_> - - <_> - - - - <_>1 10 6 10 -1. - <_>1 10 3 5 2. - <_>4 15 3 5 2. - 0 - 0.0346180386841297 - -0.0180139597505331 - 0.3466868996620178 - <_> - - <_> - - - - <_>1 0 18 3 -1. - <_>7 0 6 3 3. - 0 - -0.0936438962817192 - -0.5114368200302124 - 0.0142824603244662 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>3 14 14 2 2. - 0 - 4.3095857836306095e-003 - 0.0244713891297579 - -0.2351769059896469 - <_> - - <_> - - - - <_>8 0 7 8 -1. - <_>8 4 7 4 2. - 0 - 0.0663119331002235 - -0.0157111398875713 - 0.2467675954103470 - <_> - - <_> - - - - <_>3 13 7 6 -1. - <_>3 15 7 2 3. - 0 - -9.2896772548556328e-003 - -0.1392403990030289 - 0.0488221496343613 - <_> - - <_> - - - - <_>9 7 3 13 -1. - <_>10 7 1 13 3. - 0 - -3.3214599825441837e-003 - 0.1337960958480835 - -0.0368186794221401 - <_> - - <_> - - - - <_>0 14 5 6 -1. - <_>0 17 5 3 2. - 0 - 0.0401809811592102 - -0.0127935204654932 - 0.5258095860481262 - <_> - - <_> - - - - <_>5 6 15 4 -1. - <_>10 6 5 4 3. - 0 - 0.0875909626483917 - 0.0125225996598601 - -0.5581073164939880 - <_> - - <_> - - - - <_>0 6 15 4 -1. - <_>5 6 5 4 3. - 0 - 0.0354752987623215 - 0.0231282804161310 - -0.2740291953086853 - <_> - - <_> - - - - <_>16 9 3 10 -1. - <_>16 14 3 5 2. - 0 - 0.0520337894558907 - -6.1640930362045765e-003 - 0.1905273050069809 - <_> - - <_> - - - - <_>1 0 8 15 -1. - <_>1 5 8 5 3. - 0 - -0.1304654926061630 - 0.2571254074573517 - -0.0235291905701160 - <_> - - <_> - - - - <_>14 0 4 13 -1. - <_>14 0 2 13 2. - 0 - 2.8882310725748539e-003 - -0.0607554093003273 - 0.0602434203028679 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 0.0150831602513790 - 0.0211921799927950 - -0.2847954034805298 - <_> - - <_> - - - - <_>4 0 15 2 -1. - <_>4 1 15 1 2. - 0 - 8.0875161802396178e-004 - -0.0854979008436203 - 0.0543055199086666 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0149478800594807 - -0.0579834505915642 - 0.1011572033166885 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>10 0 4 6 2. - <_>6 6 4 6 2. - 0 - -0.0456835888326168 - -0.3934571146965027 - 0.0175566207617521 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - -9.4226107466965914e-004 - 0.1306409984827042 - -0.0516753196716309 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - -2.8342329896986485e-003 - 0.1599276065826416 - -0.0347878113389015 - <_> - - <_> - - - - <_>1 1 16 4 -1. - <_>1 1 8 2 2. - <_>9 3 8 2 2. - 0 - -0.0188129208981991 - -0.2980731129646301 - 0.0225360300391912 - <_> - - <_> - - - - <_>17 6 3 13 -1. - <_>18 6 1 13 3. - 0 - 0.0196015704423189 - 0.0134610999375582 - -0.1688593029975891 - <_> - - <_> - - - - <_>0 6 3 13 -1. - <_>1 6 1 13 3. - 0 - -0.0649295896291733 - -0.7119876146316528 - 8.5184276103973389e-003 - <_> - - <_> - - - - <_>9 2 6 14 -1. - <_>12 2 3 7 2. - <_>9 9 3 7 2. - 0 - -0.0142839998006821 - -0.0786023214459419 - 0.0422263592481613 - <_> - - <_> - - - - <_>7 6 4 7 -1. - <_>9 6 2 7 2. - 0 - 0.0251059196889400 - -0.0297449491918087 - 0.2258692979812622 - <_> - - <_> - - - - <_>6 8 8 12 -1. - <_>10 8 4 6 2. - <_>6 14 4 6 2. - 0 - 0.0384596697986126 - 0.0175929591059685 - -0.3445731103420258 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 2.9701360035687685e-003 - -0.0529142096638680 - 0.1156746000051498 - <_> - - <_> - - - - <_>2 13 16 3 -1. - <_>2 14 16 1 3. - 0 - -3.5584170836955309e-003 - 0.1295776069164276 - -0.0617142990231514 - <_> - - <_> - - - - <_>6 8 8 10 -1. - <_>6 8 4 5 2. - <_>10 13 4 5 2. - 0 - 5.5475500412285328e-003 - 0.0491682998836041 - -0.1292542964220047 - <_> - - <_> - - - - <_>5 3 12 3 -1. - <_>5 3 6 3 2. - 0 - 0.0713798627257347 - -0.0115281995385885 - 0.3242335915565491 - <_> - - <_> - - - - <_>8 0 4 18 -1. - <_>8 6 4 6 3. - 0 - -0.1173198968172073 - -0.9018443822860718 - 6.3025541603565216e-003 - <_> - - <_> - - - - <_>9 8 3 12 -1. - <_>9 14 3 6 2. - 0 - 0.0229319296777248 - -0.0114254197105765 - 0.4116899073123932 - <_> - - <_> - - - - <_>7 7 3 10 -1. - <_>7 12 3 5 2. - 0 - 3.6658400204032660e-003 - 0.0280305705964565 - -0.2056798934936523 - <_> - - <_> - - - - <_>10 5 7 6 -1. - <_>10 7 7 2 3. - 0 - -0.0707960724830627 - -0.2181712985038757 - 0.0128206498920918 - <_> - - <_> - - - - <_>0 6 4 14 -1. - <_>0 6 2 7 2. - <_>2 13 2 7 2. - 0 - 6.7239440977573395e-003 - -0.0423051603138447 - 0.1415031999349594 - <_> - - <_> - - - - <_>13 10 6 5 -1. - <_>13 10 3 5 2. - 0 - -2.0242671016603708e-003 - 0.0919769629836082 - -0.0468150712549686 - <_> - - <_> - - - - <_>1 10 6 5 -1. - <_>4 10 3 5 2. - 0 - 2.3123170249164104e-003 - -0.0710742026567459 - 0.0986173003911972 - <_> - - <_> - - - - <_>14 10 4 7 -1. - <_>14 10 2 7 2. - 0 - 2.7525359764695168e-003 - -0.0507856681942940 - 0.0752821266651154 - <_> - - <_> - - - - <_>1 12 6 5 -1. - <_>4 12 3 5 2. - 0 - -3.4460208844393492e-003 - 0.0963684767484665 - -0.0780517831444740 - <_> - - <_> - - - - <_>6 6 8 12 -1. - <_>6 12 8 6 2. - 0 - -0.0114164697006345 - -0.1131334975361824 - 0.0750808566808701 - <_> - - <_> - - - - <_>0 8 14 3 -1. - <_>0 9 14 1 3. - 0 - 3.0283999876701273e-005 - -0.1388618946075440 - 0.0437611490488052 - <_> - - <_> - - - - <_>8 11 6 6 -1. - <_>8 14 6 3 2. - 0 - -1.4150349888950586e-003 - 0.0371646210551262 - -0.1109559983015060 - <_> - - <_> - - - - <_>6 1 8 12 -1. - <_>6 7 8 6 2. - 0 - -1.9245060393586755e-003 - 0.0706045925617218 - -0.0942690595984459 - <_> - - <_> - - - - <_>2 0 16 8 -1. - <_>2 4 16 4 2. - 0 - 0.0300316493958235 - -0.0514077395200729 - 0.1633756011724472 - <_> - - <_> - - - - <_>1 0 17 3 -1. - <_>1 1 17 1 3. - 0 - -2.5132829323410988e-003 - -0.1493352055549622 - 0.0517498403787613 - <_> - - <_> - - - - <_>5 13 13 2 -1. - <_>5 14 13 1 2. - 0 - 1.9437290029600263e-004 - -0.0485539697110653 - 0.1056274026632309 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 2.9679399449378252e-003 - 0.0366641692817211 - -0.1565002053976059 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - 3.2629880588501692e-003 - 0.0429340004920959 - -0.1451455950737000 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - 2.9959511011838913e-003 - -0.0638218224048615 - 0.0935147777199745 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - -0.0154831903055310 - -0.2018454968929291 - 0.0311913806945086 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -0.0239565595984459 - 0.3611640930175781 - -0.0246982406824827 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0171362701803446 - -0.2625209093093872 - 0.0246162693947554 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>3 14 3 6 3. - 0 - -6.2233610078692436e-003 - 0.1105912998318672 - -0.0579471997916698 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - 0.0298785194754601 - 7.8794546425342560e-003 - -0.2850458920001984 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -9.6910241991281509e-003 - -0.1569641977548599 - 0.0382633917033672 - <_> - - <_> - - - - <_>6 0 8 12 -1. - <_>6 4 8 4 3. - 0 - -0.1282542049884796 - 0.2835075855255127 - -0.0272243507206440 - <_> - - <_> - - - - <_>0 1 13 2 -1. - <_>0 2 13 1 2. - 0 - -3.9670959813520312e-004 - -0.1331633031368256 - 0.0538969412446022 - <_> - - <_> - - - - <_>15 1 3 13 -1. - <_>16 1 1 13 3. - 0 - -8.2217011367902160e-004 - -0.1368017941713333 - 0.0779573395848274 - <_> - - <_> - - - - <_>2 1 3 13 -1. - <_>3 1 1 13 3. - 0 - 7.4795359978452325e-005 - -0.0904964432120323 - 0.0685281604528427 - <_> - - <_> - - - - <_>4 4 12 4 -1. - <_>8 4 4 4 3. - 0 - 9.3816556036472321e-003 - -0.0991845801472664 - 0.0640786513686180 - <_> - - <_> - - - - <_>1 0 18 4 -1. - <_>7 0 6 4 3. - 0 - -6.6485297866165638e-003 - 0.1478358060121536 - -0.0469883307814598 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -5.5821631103754044e-003 - -0.1356212049722672 - 0.0553083904087543 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -0.0302247591316700 - 0.3476066887378693 - -0.0166988391429186 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -0.0275069493800402 - 0.2803105115890503 - -0.0101234903559089 - <_> - - <_> - - - - <_>5 2 3 18 -1. - <_>6 2 1 18 3. - 0 - 0.0150439301505685 - 0.0152790797874331 - -0.3950695991516113 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 9.2139653861522675e-003 - 0.0266784094274044 - -0.1425559073686600 - <_> - - <_> - - - - <_>0 10 20 3 -1. - <_>0 11 20 1 3. - 0 - 0.0639555826783180 - 6.2569188885390759e-003 - -0.8807666897773743 - <_> - - <_> - - - - <_>7 10 13 3 -1. - <_>7 11 13 1 3. - 0 - 3.0171850085025653e-005 - -0.1104791983962059 - 0.0519368499517441 - <_> - - <_> - - - - <_>0 15 13 2 -1. - <_>0 16 13 1 2. - 0 - -5.1049161702394485e-003 - 0.2135072946548462 - -0.0278892703354359 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -9.1436346992850304e-003 - -0.1919710934162140 - 0.0303414594382048 - <_> - - <_> - - - - <_>3 7 12 5 -1. - <_>7 7 4 5 3. - 0 - -0.0767460465431213 - -0.7246891260147095 - 7.1879802271723747e-003 - <_> - - <_> - - - - <_>2 11 16 8 -1. - <_>10 11 8 4 2. - <_>2 15 8 4 2. - 0 - 0.0487805604934692 - -0.0214477796107531 - 0.3036446869373322 - <_> - - <_> - - - - <_>2 0 14 12 -1. - <_>2 6 14 6 2. - 0 - 0.4255141019821167 - 6.3504311256110668e-003 - -0.9478399157524109 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 14 4 4 2. - 0 - 2.2590209264308214e-003 - 0.0188931692391634 - -0.1944386959075928 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>5 11 5 3 2. - <_>10 14 5 3 2. - 0 - -3.8309961091727018e-003 - -0.1281321942806244 - 0.0477487295866013 - <_> - - <_> - - - - <_>10 1 7 6 -1. - <_>10 3 7 2 3. - 0 - 7.5495108030736446e-003 - -0.0679828226566315 - 0.0764707997441292 - <_> - - <_> - - - - <_>5 3 10 6 -1. - <_>5 5 10 2 3. - 0 - 0.0147847300395370 - -0.0348850414156914 - 0.1793683022260666 - <_> - - <_> - - - - <_>4 6 12 3 -1. - <_>4 6 6 3 2. - 0 - 0.0567626394331455 - 0.0128167895600200 - -0.4810582995414734 - <_> - - <_> - - - - <_>1 4 14 3 -1. - <_>1 5 14 1 3. - 0 - -2.5854599662125111e-003 - 0.1265397071838379 - -0.0477618500590324 - <_> - - <_> - - - - <_>12 12 8 4 -1. - <_>12 12 4 4 2. - 0 - -5.5542518384754658e-003 - 0.0721269026398659 - -0.0386576615273952 - <_> - - <_> - - - - <_>0 12 8 4 -1. - <_>4 12 4 4 2. - 0 - 2.6672501116991043e-003 - -0.0614852607250214 - 0.1264784038066864 - <_> - - <_> - - - - <_>10 9 10 8 -1. - <_>10 9 5 8 2. - 0 - -0.2287995964288712 - -0.4843535125255585 - 4.5618140138685703e-003 - <_> - - <_> - - - - <_>0 9 10 8 -1. - <_>5 9 5 8 2. - 0 - 0.0378513298928738 - 0.0187695603817701 - -0.3080694973468781 - <_> - - <_> - - - - <_>3 4 14 3 -1. - <_>3 5 14 1 3. - 0 - 2.4275709874927998e-003 - -0.0715891718864441 - 0.0816945433616638 - <_> - - <_> - - - - <_>0 5 12 4 -1. - <_>0 7 12 2 2. - 0 - -7.9000797122716904e-003 - -0.1258932054042816 - 0.0474213100969791 - <_> - - <_> - - - - <_>7 1 8 12 -1. - <_>7 7 8 6 2. - 0 - -6.7925411276519299e-003 - 0.0617587305605412 - -0.0538035593926907 - <_> - - <_> - - - - <_>5 0 10 15 -1. - <_>10 0 5 15 2. - 0 - -0.1752236038446426 - 0.3372611105442047 - -0.0179619602859020 - <_> - - <_> - - - - <_>6 1 10 6 -1. - <_>11 1 5 3 2. - <_>6 4 5 3 2. - 0 - 0.0660339593887329 - 4.4206557795405388e-003 - -0.5581914782524109 - <_> - - <_> - - - - <_>4 1 10 6 -1. - <_>4 1 5 3 2. - <_>9 4 5 3 2. - 0 - 5.1699979230761528e-003 - 0.0533493012189865 - -0.1224528998136520 - <_> - - <_> - - - - <_>1 5 18 3 -1. - <_>7 5 6 3 3. - 0 - 0.1204798966646195 - -6.9788158871233463e-003 - 0.7934191226959229 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -4.2617730796337128e-003 - 0.0780141204595566 - -0.0682603865861893 - <_> - - <_> - - - - <_>11 8 4 12 -1. - <_>11 8 2 12 2. - 0 - 0.0306853707879782 - 9.3320813030004501e-003 - -0.2742024958133698 - <_> - - <_> - - - - <_>5 8 4 12 -1. - <_>7 8 2 12 2. - 0 - -6.8651121109724045e-003 - -0.1308497935533524 - 0.0472734086215496 - <_> - - <_> - - - - <_>8 4 4 16 -1. - <_>10 4 2 8 2. - <_>8 12 2 8 2. - 0 - -3.9284229278564453e-003 - 0.1155371963977814 - -0.0550442896783352 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>8 6 2 7 2. - <_>10 13 2 7 2. - 0 - -4.2112590745091438e-003 - 0.1373077929019928 - -0.0525143891572952 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -7.6999869197607040e-003 - -0.3401119112968445 - 0.0174786802381277 - <_> - - <_> - - - - <_>3 0 13 9 -1. - <_>3 3 13 3 3. - 0 - -0.0118679096922278 - 0.2573117911815643 - -0.0256917700171471 - <_> - - <_> - - - - <_>3 5 17 6 -1. - <_>3 7 17 2 3. - 0 - 5.3619472309947014e-003 - 0.0119367800652981 - -0.2893005013465881 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -2.3130229674279690e-003 - -0.1082130968570709 - 0.0536407493054867 - <_> - - <_> - - - - <_>3 1 15 19 -1. - <_>8 1 5 19 3. - 0 - -0.2222287058830261 - 0.3165431022644043 - -0.0145423198118806 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 6.2593920156359673e-003 - 0.0377951711416245 - -0.1510069966316223 - <_> - - <_> - - - - <_>3 2 14 3 -1. - <_>3 2 7 3 2. - 0 - 3.4754760563373566e-003 - -0.0630474686622620 - 0.0850256830453873 - <_> - - <_> - - - - <_>3 6 10 3 -1. - <_>8 6 5 3 2. - 0 - -2.8249478782527149e-004 - -0.1144286990165710 - 0.0560414008796215 - <_> - - <_> - - - - <_>6 7 14 2 -1. - <_>6 8 14 1 2. - 0 - 4.8107700422406197e-004 - -0.0968984663486481 - 0.0283470507711172 - <_> - - <_> - - - - <_>2 4 15 3 -1. - <_>2 5 15 1 3. - 0 - 0.0241789594292641 - -0.0210330598056316 - 0.2562944889068604 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - 0.0295269601047039 - 0.0161225795745850 - -0.3447209000587463 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - -3.0501780565828085e-003 - -0.1363352984189987 - 0.0409837886691093 - <_> - - <_> - - - - <_>8 15 7 4 -1. - <_>8 17 7 2 2. - 0 - 1.0082300286740065e-003 - -0.0609270296990871 - 0.0407171994447708 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 15 20 3 2. - 0 - -3.0384280253201723e-003 - 0.0618832781910896 - -0.0978871211409569 - <_> - - <_> - - - - <_>6 3 13 3 -1. - <_>6 4 13 1 3. - 0 - 3.2816259190440178e-003 - -0.0479506216943264 - 0.0626754015684128 - <_> - - <_> - - - - <_>1 5 17 12 -1. - <_>1 9 17 4 3. - 0 - 0.0131826102733612 - 0.2247623950242996 - -0.0256491694599390 - <_> - - <_> - - - - <_>6 11 13 3 -1. - <_>6 12 13 1 3. - 0 - -2.3278119042515755e-003 - 0.0737356022000313 - -0.0510238893330097 - <_> - - <_> - - - - <_>2 5 16 8 -1. - <_>2 9 16 4 2. - 0 - -0.0106955096125603 - -0.7562553882598877 - 7.3301601223647594e-003 - <_> - - <_> - - - - <_>9 5 5 14 -1. - <_>9 12 5 7 2. - 0 - 0.0780467465519905 - 1.8139410531148314e-003 - -0.6206793189048767 - <_> - - <_> - - - - <_>8 4 3 16 -1. - <_>9 4 1 16 3. - 0 - 0.0566783398389816 - 6.2128840945661068e-003 - -0.7820093035697937 - <_> - - <_> - - - - <_>3 4 14 6 -1. - <_>10 4 7 3 2. - <_>3 7 7 3 2. - 0 - 7.2442921809852123e-003 - -0.0488524697721004 - 0.1064454987645149 - <_> - - <_> - - - - <_>0 3 7 6 -1. - <_>0 5 7 2 3. - 0 - -0.0667543336749077 - -0.6479606032371521 - 8.7654050439596176e-003 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>10 5 6 3 2. - <_>4 8 6 3 2. - 0 - -0.0346626304090023 - 0.3329395949840546 - -0.0172860696911812 - <_> - - <_> - - - - <_>0 13 19 6 -1. - <_>0 15 19 2 3. - 0 - -0.0150847500190139 - -0.1269658058881760 - 0.0455076992511749 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - -0.0234217308461666 - -0.2527934014797211 - 0.0158189702779055 - <_> - - <_> - - - - <_>3 1 7 6 -1. - <_>3 3 7 2 3. - 0 - 0.0256893206387758 - -0.0371946282684803 - 0.1622316986322403 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - 6.3883140683174133e-003 - 0.0306170098483562 - -0.1369500011205673 - <_> - - <_> - - - - <_>1 3 8 10 -1. - <_>1 3 4 5 2. - <_>5 8 4 5 2. - 0 - -0.1051959022879601 - -0.8445348143577576 - 6.6635669209063053e-003 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 12 4 6 2. - 0 - 0.0187736693769693 - 4.6610347926616669e-003 - -0.1711551994085312 - <_> - - <_> - - - - <_>4 10 4 7 -1. - <_>6 10 2 7 2. - 0 - -1.3318320270627737e-003 - 0.0657804235816002 - -0.0872415676712990 - <_> - - <_> - - - - <_>8 0 9 14 -1. - <_>11 0 3 14 3. - 0 - -0.2141733020544052 - 0.4786663949489594 - -3.0801231041550636e-003 - <_> - - <_> - - - - <_>1 1 18 19 -1. - <_>7 1 6 19 3. - 0 - -0.5509787201881409 - -0.6363369822502136 - 8.8994754478335381e-003 - <_> - - <_> - - - - <_>8 5 8 9 -1. - <_>8 8 8 3 3. - 0 - -3.3415539655834436e-003 - 0.1284604072570801 - -0.0323170796036720 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - 1.0858159512281418e-003 - -0.1143805012106895 - 0.0470908693969250 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - 4.2784498073160648e-003 - 0.0438426993787289 - -0.0808566883206367 - <_> - - <_> - - - - <_>2 10 6 8 -1. - <_>4 10 2 8 3. - 0 - -2.0054390188306570e-003 - 0.1053237020969391 - -0.0508663281798363 - <_> - - <_> - - - - <_>12 13 7 6 -1. - <_>12 15 7 2 3. - 0 - -3.4336079843342304e-003 - -0.0799860432744026 - 0.0425702705979347 - <_> - - <_> - - - - <_>6 10 4 8 -1. - <_>6 14 4 4 2. - 0 - -1.2204749509692192e-003 - 0.0411629416048527 - -0.1337811052799225 - <_> - - <_> - - - - <_>10 9 6 10 -1. - <_>10 14 6 5 2. - 0 - -0.1344037950038910 - -0.5204458832740784 - 2.9635489918291569e-003 - <_> - - <_> - - - - <_>4 9 6 10 -1. - <_>4 14 6 5 2. - 0 - 0.0145818199962378 - -0.0190679691731930 - 0.4006566107273102 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - -2.8450360987335443e-003 - -0.0589987114071846 - 0.0317977517843246 - <_> - - <_> - - - - <_>1 13 7 6 -1. - <_>1 15 7 2 3. - 0 - 4.8618339933454990e-003 - 0.0397547595202923 - -0.1474187970161438 - <_> - - <_> - - - - <_>13 1 6 13 -1. - <_>13 1 3 13 2. - 0 - 5.6295008398592472e-003 - -0.0420948788523674 - 0.0413941293954849 - <_> - - <_> - - - - <_>3 3 13 3 -1. - <_>3 4 13 1 3. - 0 - -4.5936359092593193e-003 - 0.2075109928846359 - -0.0279093794524670 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -0.0306937396526337 - -0.3402904868125916 - 5.0333337858319283e-003 - <_> - - <_> - - - - <_>4 14 10 6 -1. - <_>4 14 5 3 2. - <_>9 17 5 3 2. - 0 - 3.1476689036935568e-004 - -0.0881188735365868 - 0.0633542910218239 - <_> - - <_> - - - - <_>11 1 4 14 -1. - <_>13 1 2 7 2. - <_>11 8 2 7 2. - 0 - -3.4313879441469908e-003 - 0.0590887703001499 - -0.0677735805511475 - <_> - - <_> - - - - <_>0 3 14 2 -1. - <_>0 4 14 1 2. - 0 - -3.4075058647431433e-004 - -0.0982687622308731 - 0.0587836988270283 - <_> - - <_> - - - - <_>7 0 6 6 -1. - <_>7 3 6 3 2. - 0 - -3.7829359062016010e-003 - 0.1784172058105469 - -0.0469121783971787 - <_> - - <_> - - - - <_>0 0 16 18 -1. - <_>0 6 16 6 3. - 0 - -0.0463220588862896 - -0.1630741059780121 - 0.0391919314861298 - <_> - - <_> - - - - <_>14 2 5 9 -1. - <_>14 5 5 3 3. - 0 - 0.0184713806957006 - 0.0159750394523144 - -0.2880870103836060 - <_> - - <_> - - - - <_>1 10 4 10 -1. - <_>1 15 4 5 2. - 0 - 9.0416809543967247e-003 - -0.0318158306181431 - 0.1639292985200882 - <_> - - <_> - - - - <_>16 6 2 14 -1. - <_>16 13 2 7 2. - 0 - -0.0313879400491714 - 0.1569631993770599 - -0.0153331495821476 - <_> - - <_> - - - - <_>2 6 2 14 -1. - <_>2 13 2 7 2. - 0 - -7.5614887464325875e-005 - 0.0745913535356522 - -0.0843595415353775 - <_> - - <_> - - - - <_>14 2 5 9 -1. - <_>14 5 5 3 3. - 0 - -0.0239393003284931 - -0.1160458996891975 - 0.0308687891811132 - <_> - - <_> - - - - <_>1 2 5 9 -1. - <_>1 5 5 3 3. - 0 - 2.2537580225616693e-003 - 0.0402619093656540 - -0.1660403013229370 - <_> - - <_> - - - - <_>8 4 9 9 -1. - <_>8 7 9 3 3. - 0 - -0.0533898100256920 - 0.1031889021396637 - -0.0208772402256727 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 5 6 3 2. - <_>10 8 6 3 2. - 0 - 5.6420508772134781e-003 - -0.0468395203351974 - 0.1163408979773521 - <_> - - <_> - - - - <_>13 4 3 16 -1. - <_>14 4 1 16 3. - 0 - 4.2355400510132313e-003 - 0.0256312508136034 - -0.0931935831904411 - <_> - - <_> - - - - <_>4 4 3 16 -1. - <_>5 4 1 16 3. - 0 - -0.0219292603433132 - -0.3514122068881989 - 0.0157040208578110 - <_> - - <_> - - - - <_>12 2 4 12 -1. - <_>12 6 4 4 3. - 0 - 0.0130507899448276 - -7.6834131032228470e-003 - 0.1309593021869659 - <_> - - <_> - - - - <_>6 0 2 14 -1. - <_>7 0 1 14 2. - 0 - 0.0224261097609997 - 6.3964631408452988e-003 - -0.8051313161849976 - <_> - - <_> - - - - <_>15 0 4 16 -1. - <_>15 8 4 8 2. - 0 - -0.0887556523084641 - 0.3932324945926666 - -0.0103654200211167 - <_> - - <_> - - - - <_>1 0 4 16 -1. - <_>1 8 4 8 2. - 0 - 0.0117682702839375 - -0.0752705633640289 - 0.0711832270026207 - <_> - - <_> - - - - <_>12 9 8 6 -1. - <_>12 11 8 2 3. - 0 - 0.0212215706706047 - 0.0240827705711126 - -0.1629267036914825 - <_> - - <_> - - - - <_>0 6 14 2 -1. - <_>7 6 7 2 2. - 0 - -0.0528876110911369 - 0.3323107957839966 - -0.0155480401590467 - <_> - - <_> - - - - <_>0 0 20 5 -1. - <_>0 0 10 5 2. - 0 - 0.2584776878356934 - 9.5278248190879822e-003 - -0.6377344727516174 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 0 6 3 2. - <_>10 3 6 3 2. - 0 - -2.8695159126073122e-003 - -0.0987199917435646 - 0.0552446506917477 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.1249269023537636 - 1.9365450134500861e-003 - -0.9999927282333374 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 0.0439007207751274 - -0.0163855701684952 - 0.3718385100364685 - <_> - - <_> - - - - <_>14 1 5 9 -1. - <_>14 4 5 3 3. - 0 - 5.2520469762384892e-003 - 0.0477582700550556 - -0.1346182972192764 - <_> - - <_> - - - - <_>1 6 18 2 -1. - <_>1 7 18 1 2. - 0 - -2.0031959284096956e-003 - 0.0835871025919914 - -0.0677505806088448 - <_> - - <_> - - - - <_>7 1 7 6 -1. - <_>7 3 7 2 3. - 0 - 4.4535310007631779e-003 - -0.0892024636268616 - 0.0467482581734657 - <_> - - <_> - - - - <_>1 2 18 10 -1. - <_>1 2 9 5 2. - <_>10 7 9 5 2. - 0 - 0.1517463028430939 - 5.6481529027223587e-003 - -0.8245043754577637 - <_> - - <_> - - - - <_>9 3 8 8 -1. - <_>13 3 4 4 2. - <_>9 7 4 4 2. - 0 - -0.0619922094047070 - -0.4333459138870239 - 5.3922580555081367e-003 - <_> - - <_> - - - - <_>3 1 12 4 -1. - <_>9 1 6 4 2. - 0 - -0.0930853486061096 - 0.5216910243034363 - -9.9382782354950905e-003 - <_> - - <_> - - - - <_>4 5 12 7 -1. - <_>8 5 4 7 3. - 0 - -4.9394429661333561e-003 - -0.2000413984060288 - 0.0277109798043966 - <_> - - <_> - - - - <_>5 9 9 5 -1. - <_>8 9 3 5 3. - 0 - -1.3681269483640790e-003 - 0.0850654169917107 - -0.0745429694652557 - <_> - - <_> - - - - <_>7 10 6 7 -1. - <_>9 10 2 7 3. - 0 - -2.7988219517283142e-004 - -0.0769876316189766 - 0.0689129382371902 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - -3.2129848841577768e-003 - 0.1594099998474121 - -0.0342215895652771 - <_> - - <_> - - - - <_>11 2 2 16 -1. - <_>11 2 1 16 2. - 0 - 0.0395333692431450 - 3.1095379963517189e-003 - -0.8546090722084045 - <_> - - <_> - - - - <_>2 13 9 7 -1. - <_>5 13 3 7 3. - 0 - 2.0442719105631113e-003 - -0.0640745535492897 - 0.0786447599530220 - <_> - - <_> - - - - <_>11 2 2 16 -1. - <_>11 2 1 16 2. - 0 - -0.0207707602530718 - -0.3112941086292267 - 4.3864948675036430e-003 - <_> - - <_> - - - - <_>0 9 18 11 -1. - <_>6 9 6 11 3. - 0 - -0.0472003817558289 - 0.1052689030766487 - -0.0514561310410500 - <_> - - <_> - - - - <_>11 2 2 16 -1. - <_>11 2 1 16 2. - 0 - 0.0130968699231744 - 9.9430568516254425e-003 - -0.1425368040800095 - <_> - - <_> - - - - <_>3 7 12 6 -1. - <_>7 7 4 6 3. - 0 - -0.0109353903681040 - -0.1675661057233810 - 0.0358635485172272 - <_> - - <_> - - - - <_>11 4 5 9 -1. - <_>11 7 5 3 3. - 0 - -0.1635434925556183 - -0.8212932944297791 - 1.9741130527108908e-003 - <_> - - <_> - - - - <_>4 4 5 9 -1. - <_>4 7 5 3 3. - 0 - 0.0386687181890011 - -0.0113296797499061 - 0.4753246009349823 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - 0.0609499588608742 - 0.0115165300667286 - -0.5747207999229431 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0121016902849078 - 0.1550561040639877 - -0.0326291583478451 - <_> - - <_> - - - - <_>14 1 5 9 -1. - <_>14 4 5 3 3. - 0 - -0.0100642703473568 - -0.0923895314335823 - 0.0323180593550205 - <_> - - <_> - - - - <_>7 2 2 16 -1. - <_>8 2 1 16 2. - 0 - -5.8900681324303150e-003 - -0.2650313079357147 - 0.0191271398216486 - <_> - - <_> - - - - <_>3 15 14 3 -1. - <_>3 16 14 1 3. - 0 - -0.0313610397279263 - 0.5673077106475830 - -9.6010044217109680e-003 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0477773211896420 - 0.5903866291046143 - -7.4091539718210697e-003 - <_> - - <_> - - - - <_>0 1 20 6 -1. - <_>10 1 10 3 2. - <_>0 4 10 3 2. - 0 - -0.0107922703027725 - -0.1281493008136749 - 0.0402649492025375 - <_> - - <_> - - - - <_>4 0 8 5 -1. - <_>8 0 4 5 2. - 0 - -0.0143741201609373 - 0.2077254056930542 - -0.0298549905419350 - <_> - - <_> - - - - <_>13 1 3 14 -1. - <_>14 1 1 14 3. - 0 - 0.0520798116922379 - -3.8335260469466448e-003 - 0.7581862807273865 - <_> - - <_> - - - - <_>4 1 3 14 -1. - <_>5 1 1 14 3. - 0 - 6.1354418285191059e-003 - 0.0304764509201050 - -0.1728169023990631 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>16 0 3 5 2. - <_>13 5 3 5 2. - 0 - -3.0654598958790302e-003 - 0.0580253005027771 - -0.0796170383691788 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 5.7721929624676704e-003 - -0.0367475189268589 - 0.1631979048252106 - <_> - - <_> - - - - <_>2 0 18 5 -1. - <_>8 0 6 5 3. - 0 - 0.2702847123146057 - -3.9847781881690025e-003 - 0.4947654008865356 - <_> - - <_> - - - - <_>0 0 18 5 -1. - <_>6 0 6 5 3. - 0 - -0.1503452956676483 - -0.5262491106987000 - 0.0105679100379348 - <_> - - <_> - - - - <_>11 1 4 14 -1. - <_>13 1 2 7 2. - <_>11 8 2 7 2. - 0 - 0.0761016011238098 - -2.3525250144302845e-003 - 0.9181998968124390 - <_> - - <_> - - - - <_>5 1 4 14 -1. - <_>5 1 2 7 2. - <_>7 8 2 7 2. - 0 - -0.0559538118541241 - -0.7832127213478088 - 6.8363421596586704e-003 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - -0.0243209507316351 - 0.2273961007595062 - -0.0116222901269794 - <_> - - <_> - - - - <_>0 7 13 3 -1. - <_>0 8 13 1 3. - 0 - 0.0162743199616671 - 0.0140241701155901 - -0.3422223925590515 - <_> - - <_> - - - - <_>16 1 3 13 -1. - <_>17 1 1 13 3. - 0 - 7.7015208080410957e-004 - -0.0447687096893787 - 0.0574122294783592 - <_> - - <_> - - - - <_>1 1 3 13 -1. - <_>2 1 1 13 3. - 0 - 1.3995269546285272e-003 - -0.0606142394244671 - 0.0843989998102188 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0205447692424059 - -0.1816041022539139 - 0.0207951199263334 - <_> - - <_> - - - - <_>2 12 5 8 -1. - <_>2 16 5 4 2. - 0 - -0.0368725508451462 - 0.2681722939014435 - -0.0199212692677975 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -2.5466610677540302e-003 - -0.1336192935705185 - 0.0191919393837452 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - 0.0335135906934738 - 9.8206587135791779e-003 - -0.5265988707542419 - <_> - - <_> - - - - <_>6 9 9 4 -1. - <_>6 11 9 2 2. - 0 - -0.0554376617074013 - 0.4529249072074890 - -9.3475803732872009e-003 - <_> - - <_> - - - - <_>0 7 10 6 -1. - <_>0 7 5 3 2. - <_>5 10 5 3 2. - 0 - -5.3564338013529778e-003 - -0.1478758007287979 - 0.0336179509758949 - <_> - - <_> - - - - <_>15 4 5 16 -1. - <_>15 12 5 8 2. - 0 - 0.0115512004122138 - -0.0328510589897633 - 0.0637165978550911 - <_> - - <_> - - - - <_>4 0 9 9 -1. - <_>7 0 3 9 3. - 0 - 0.0729178264737129 - -0.0163887199014425 - 0.3158080875873566 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0895630121231079 - 0.7536656260490418 - -2.0717559382319450e-003 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -2.2225419525057077e-003 - -0.0927338525652885 - 0.0603958517313004 - <_> - - <_> - - - - <_>3 12 14 8 -1. - <_>3 12 7 8 2. - 0 - -0.1784711033105850 - 0.4798853099346161 - -0.0104815103113651 - <_> - - <_> - - - - <_>2 10 16 10 -1. - <_>2 10 8 5 2. - <_>10 15 8 5 2. - 0 - 6.7723011597990990e-003 - 0.0526608303189278 - -0.1047129034996033 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>10 5 6 3 2. - <_>4 8 6 3 2. - 0 - 0.0283991303294897 - -0.0228620003908873 - 0.2534813880920410 - <_> - - <_> - - - - <_>5 5 10 8 -1. - <_>5 5 5 4 2. - <_>10 9 5 4 2. - 0 - -7.0053818635642529e-003 - -0.1301700025796890 - 0.0434489212930202 - <_> - - <_> - - - - <_>5 6 10 6 -1. - <_>10 6 5 3 2. - <_>5 9 5 3 2. - 0 - -5.1440461538732052e-003 - -0.1480010002851486 - 0.0451716296374798 - <_> - - <_> - - - - <_>1 15 12 5 -1. - <_>5 15 4 5 3. - 0 - -0.0112690599635243 - 0.1118535995483398 - -0.0548670887947083 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - 0.0228661093860865 - -0.0155636901035905 - 0.2170549035072327 - <_> - - <_> - - - - <_>5 9 10 8 -1. - <_>5 9 5 4 2. - <_>10 13 5 4 2. - 0 - 0.0515592284500599 - 0.0104218097403646 - -0.5323324799537659 - <_> - - <_> - - - - <_>2 7 18 13 -1. - <_>8 7 6 13 3. - 0 - 0.0189020596444607 - -0.0308788698166609 - 0.0555744990706444 - <_> - - <_> - - - - <_>4 6 10 5 -1. - <_>9 6 5 5 2. - 0 - 5.5700382217764854e-003 - 0.0536613613367081 - -0.0948764979839325 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0230217296630144 - 0.1276624053716660 - -0.0223079100251198 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>5 0 2 8 3. - 0 - 7.1334750391542912e-003 - 0.0310896895825863 - -0.1629343032836914 - <_> - - <_> - - - - <_>3 14 16 6 -1. - <_>3 14 8 6 2. - 0 - -0.0293352603912354 - 0.1050309017300606 - -0.0260085500776768 - <_> - - <_> - - - - <_>6 2 4 7 -1. - <_>8 2 2 7 2. - 0 - 0.0462532788515091 - 7.8362170606851578e-003 - -0.6622666120529175 - <_> - - <_> - - - - <_>4 9 14 3 -1. - <_>4 10 14 1 3. - 0 - 3.9622580516152084e-004 - -0.0945671275258064 - 0.0267968997359276 - <_> - - <_> - - - - <_>3 6 13 9 -1. - <_>3 9 13 3 3. - 0 - -0.0113237500190735 - 0.7431365251541138 - -6.7432140931487083e-003 - <_> - - <_> - - - - <_>7 0 6 18 -1. - <_>7 9 6 9 2. - 0 - -0.1721720993518829 - -0.7148349881172180 - 8.1747565418481827e-003 - <_> - - <_> - - - - <_>8 5 3 10 -1. - <_>8 10 3 5 2. - 0 - 1.8156579462811351e-003 - 0.0481357201933861 - -0.1067847013473511 - <_> - - <_> - - - - <_>3 3 16 4 -1. - <_>3 5 16 2 2. - 0 - 0.0580224916338921 - -7.4218288064002991e-003 - 0.3822644054889679 - <_> - - <_> - - - - <_>5 6 5 6 -1. - <_>5 9 5 3 2. - 0 - 1.4357370091602206e-003 - -0.2254288047552109 - 0.0215767193585634 - <_> - - <_> - - - - <_>4 6 12 6 -1. - <_>4 9 12 3 2. - 0 - 5.5960440076887608e-003 - 0.2573193013668060 - -0.0212465096265078 - <_> - - <_> - - - - <_>4 7 12 4 -1. - <_>4 9 12 2 2. - 0 - 2.5314849335700274e-003 - -0.3622772097587585 - 0.0151382600888610 - <_> - - <_> - - - - <_>8 9 9 4 -1. - <_>8 11 9 2 2. - 0 - -4.2207110673189163e-003 - -0.0466389916837215 - 0.0261255390942097 - <_> - - <_> - - - - <_>1 5 16 3 -1. - <_>1 6 16 1 3. - 0 - -5.4260431788861752e-003 - 0.1011037975549698 - -0.0520661212503910 - <_> - - <_> - - - - <_>5 5 13 3 -1. - <_>5 6 13 1 3. - 0 - 1.6170790186151862e-003 - -0.0416805408895016 - 0.0964593514800072 - <_> - - <_> - - - - <_>0 1 18 3 -1. - <_>0 2 18 1 3. - 0 - -3.2414530869573355e-003 - -0.1263868063688278 - 0.0391692109405994 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - 4.5421482063829899e-003 - -0.0291498806327581 - 0.0699488893151283 - <_> - - <_> - - - - <_>3 1 12 4 -1. - <_>7 1 4 4 3. - 0 - 5.3024510852992535e-003 - -0.0791290625929832 - 0.0611118599772453 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - -0.0464120805263519 - 0.3112744987010956 - -6.2580788508057594e-003 - <_> - - <_> - - - - <_>8 2 2 18 -1. - <_>8 11 2 9 2. - 0 - -6.2991487793624401e-003 - -0.0839281305670738 - 0.0667615309357643 - <_> - - <_> - - - - <_>9 2 6 10 -1. - <_>12 2 3 5 2. - <_>9 7 3 5 2. - 0 - 0.0799480900168419 - 2.6887101121246815e-003 - -0.5655370950698853 - <_> - - <_> - - - - <_>5 2 6 10 -1. - <_>5 2 3 5 2. - <_>8 7 3 5 2. - 0 - 9.9693494848906994e-004 - -0.0720510035753250 - 0.0922608971595764 - <_> - - <_> - - - - <_>4 9 12 4 -1. - <_>8 9 4 4 3. - 0 - -2.1847949828952551e-003 - 0.0838645175099373 - -0.0660996064543724 - <_> - - <_> - - - - <_>4 9 9 8 -1. - <_>4 13 9 4 2. - 0 - -0.1528684049844742 - 0.6170576810836792 - -8.1674018874764442e-003 - <_> - - <_> - - - - <_>1 15 19 4 -1. - <_>1 17 19 2 2. - 0 - 0.0171211306005716 - 0.0266764406114817 - -0.1415830999612808 - <_> - - <_> - - - - <_>5 15 7 4 -1. - <_>5 17 7 2 2. - 0 - 1.8799189710989594e-003 - -0.0778655633330345 - 0.0679552182555199 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - 5.5029629729688168e-003 - -0.0799798592925072 - 0.0640559569001198 - <_> - - <_> - - - - <_>0 7 20 6 -1. - <_>0 10 20 3 2. - 0 - 0.0274745505303144 - 0.0604827217757702 - -0.0889575481414795 - <_> - - <_> - - - - <_>7 0 12 10 -1. - <_>7 5 12 5 2. - 0 - 0.2770887911319733 - 4.4098719954490662e-003 - -1.0000040531158447 - <_> - - <_> - - - - <_>0 14 10 6 -1. - <_>0 14 5 3 2. - <_>5 17 5 3 2. - 0 - -4.9538668245077133e-003 - 0.1472094058990479 - -0.0356715694069862 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - 0.0470953695476055 - -6.0950522311031818e-003 - 0.2431958019733429 - <_> - - <_> - - - - <_>0 8 5 9 -1. - <_>0 11 5 3 3. - 0 - -3.1939700711518526e-003 - -0.1341758072376251 - 0.0393355116248131 - <_> - - <_> - - - - <_>15 11 5 9 -1. - <_>15 14 5 3 3. - 0 - 3.5586568992584944e-003 - 0.0213994700461626 - -0.0436098016798496 - <_> - - <_> - - - - <_>1 11 13 3 -1. - <_>1 12 13 1 3. - 0 - -0.0100286398082972 - 0.1628888994455338 - -0.0314484499394894 - <_> - - <_> - - - - <_>15 11 5 9 -1. - <_>15 14 5 3 3. - 0 - -2.9802629724144936e-003 - -0.0702208578586578 - 0.0379107892513275 - <_> - - <_> - - - - <_>0 12 20 2 -1. - <_>0 13 20 1 2. - 0 - 0.0173475295305252 - 0.0110539598390460 - -0.4510779082775116 - <_> - - <_> - - - - <_>15 11 5 9 -1. - <_>15 14 5 3 3. - 0 - -0.0442071296274662 - 0.1411532014608383 - -6.2362072058022022e-003 - <_> - - <_> - - - - <_>0 11 5 9 -1. - <_>0 14 5 3 3. - 0 - -3.2249989453703165e-003 - -0.1030576005578041 - 0.0496478490531445 - <_> - - <_> - - - - <_>13 0 3 10 -1. - <_>13 5 3 5 2. - 0 - 7.5196991674602032e-003 - -0.0286043900996447 - 0.0983678027987480 - <_> - - <_> - - - - <_>3 0 13 18 -1. - <_>3 9 13 9 2. - 0 - -0.0612094588577747 - 0.2211385965347290 - -0.0298354905098677 - <_> - - <_> - - - - <_>12 5 3 14 -1. - <_>12 12 3 7 2. - 0 - 0.0201072506606579 - 0.0164124798029661 - -0.1231682971119881 - <_> - - <_> - - - - <_>5 5 3 14 -1. - <_>5 12 3 7 2. - 0 - -0.0165786799043417 - -0.2339563071727753 - 0.0302506908774376 - <_> - - <_> - - - - <_>2 8 16 10 -1. - <_>10 8 8 5 2. - <_>2 13 8 5 2. - 0 - -0.0609008707106113 - 0.3168857097625732 - -0.0184332001954317 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>10 5 2 7 2. - 0 - 4.2772209271788597e-003 - -0.0438594482839108 - 0.1285876035690308 - <_> - - <_> - - - - <_>6 3 12 9 -1. - <_>10 3 4 9 3. - 0 - 0.0661306977272034 - 0.0209411904215813 - -0.2054910063743591 - <_> - - <_> - - - - <_>4 5 6 5 -1. - <_>7 5 3 5 2. - 0 - 2.5896991137415171e-003 - -0.0825973227620125 - 0.0770487263798714 - <_> - - <_> - - - - <_>5 1 12 8 -1. - <_>11 1 6 4 2. - <_>5 5 6 4 2. - 0 - -0.0171137005090714 - -0.0995602011680603 - 0.0201742798089981 - <_> - - <_> - - - - <_>5 6 6 10 -1. - <_>5 6 3 5 2. - <_>8 11 3 5 2. - 0 - 6.2078679911792278e-003 - -0.0150742400437593 - 0.3539369106292725 - <_> - - <_> - - - - <_>2 10 18 9 -1. - <_>2 10 9 9 2. - 0 - -0.3367694914340973 - -0.4983867108821869 - 7.4067250825464725e-003 - <_> - - <_> - - - - <_>5 0 10 4 -1. - <_>5 2 10 2 2. - 0 - 0.0502393804490566 - -0.0185892395675182 - 0.2822335064411163 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - 0.0110363001003861 - 0.0296239592134953 - -0.2007879018783569 - <_> - - <_> - - - - <_>0 12 18 3 -1. - <_>6 12 6 3 3. - 0 - 0.0609650202095509 - -0.0110364602878690 - 0.5033451914787293 - <_> - - <_> - - - - <_>4 1 14 3 -1. - <_>4 2 14 1 3. - 0 - 0.0159665904939175 - 0.0139418700709939 - -0.2474247068166733 - -1.3073990345001221 - 36 - -1 - <_> - - - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - -0.0388294197618961 - 0.3182382881641388 - -0.1406200975179672 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 7 12 2 3. - 0 - -0.0677713006734848 - 0.2052696943283081 - -0.1786746978759766 - <_> - - <_> - - - - <_>0 1 10 4 -1. - <_>5 1 5 4 2. - 0 - 0.0931529402732849 - -0.1329381018877029 - 0.2325212061405182 - <_> - - <_> - - - - <_>4 18 13 2 -1. - <_>4 19 13 1 2. - 0 - -6.0846367850899696e-003 - 0.1981765031814575 - -0.1553514003753662 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0172301493585110 - 0.2578431069850922 - -0.0903873667120934 - <_> - - <_> - - - - <_>2 4 16 10 -1. - <_>10 4 8 5 2. - <_>2 9 8 5 2. - 0 - 0.0419077984988689 - 0.0620661489665508 - -0.3230313956737518 - <_> - - <_> - - - - <_>0 2 16 2 -1. - <_>0 3 16 1 2. - 0 - -3.4084350336343050e-003 - -0.3166790902614594 - 0.0602750405669212 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0349092893302441 - -0.1245630979537964 - 0.1609985977411270 - <_> - - <_> - - - - <_>3 11 6 7 -1. - <_>5 11 2 7 3. - 0 - 0.0116769000887871 - -0.1802566051483154 - 0.1223443001508713 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - -1.2773449998348951e-003 - -0.2473558038473129 - 0.0621297396719456 - <_> - - <_> - - - - <_>3 1 10 6 -1. - <_>3 1 5 3 2. - <_>8 4 5 3 2. - 0 - 0.0169172994792461 - 0.0696710422635078 - -0.2529258131980896 - <_> - - <_> - - - - <_>12 9 5 9 -1. - <_>12 12 5 3 3. - 0 - 0.0256566405296326 - 0.0262125805020332 - -0.1634899973869324 - <_> - - <_> - - - - <_>6 3 4 7 -1. - <_>8 3 2 7 2. - 0 - 1.9884048961102962e-003 - -0.3101851046085358 - 0.0502592511475086 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - 0.0425484888255596 - 0.0170658193528652 - -0.4783062040805817 - <_> - - <_> - - - - <_>1 4 4 12 -1. - <_>1 8 4 4 3. - 0 - 6.0466718859970570e-003 - -0.2211804986000061 - 0.0728424116969109 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -8.0229081213474274e-003 - -0.1453005969524384 - 0.0499062612652779 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>10 6 2 7 2. - 0 - 0.0379372611641884 - -0.0340077802538872 - 0.4371533095836639 - <_> - - <_> - - - - <_>10 8 8 8 -1. - <_>14 8 4 4 2. - <_>10 12 4 4 2. - 0 - -0.0529602989554405 - -0.2885659039020538 - 0.0184572096914053 - <_> - - <_> - - - - <_>1 7 15 3 -1. - <_>6 7 5 3 3. - 0 - 7.5578060932457447e-003 - -0.2353460043668747 - 0.0603025704622269 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0155549803748727 - -0.2656773030757904 - 0.0552793703973293 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 14 8 4 2. - 0 - 3.4035260323435068e-003 - 0.0461758896708488 - -0.3365189135074616 - <_> - - <_> - - - - <_>3 5 14 3 -1. - <_>3 6 14 1 3. - 0 - -0.0193702708929777 - 0.1960383951663971 - -0.0801868289709091 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - 0.0217195693403482 - 0.0419320799410343 - -0.3432759046554565 - <_> - - <_> - - - - <_>8 6 7 8 -1. - <_>8 10 7 4 2. - 0 - -3.8787510129623115e-004 - -0.2538223862648010 - 0.0452007800340652 - <_> - - <_> - - - - <_>0 2 4 7 -1. - <_>2 2 2 7 2. - 0 - 0.0337945595383644 - -0.0649015605449677 - 0.2123865932226181 - <_> - - <_> - - - - <_>4 1 14 3 -1. - <_>4 2 14 1 3. - 0 - -9.1701336205005646e-003 - -0.2387458980083466 - 0.0407963804900646 - <_> - - <_> - - - - <_>2 3 13 2 -1. - <_>2 4 13 1 2. - 0 - -1.3741330476477742e-003 - -0.1643002033233643 - 0.0814962834119797 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - -0.0123527199029922 - 0.1680507063865662 - -0.0578839704394341 - <_> - - <_> - - - - <_>2 1 16 4 -1. - <_>2 1 8 2 2. - <_>10 3 8 2 2. - 0 - -0.0111777000129223 - -0.1977586001157761 - 0.0634087026119232 - <_> - - <_> - - - - <_>9 0 8 6 -1. - <_>9 2 8 2 3. - 0 - 2.5044390931725502e-003 - -0.1290045976638794 - 0.0589736104011536 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>6 9 3 8 2. - 0 - 2.1939110010862350e-003 - 0.1493715941905975 - -0.0798972919583321 - <_> - - <_> - - - - <_>12 10 8 6 -1. - <_>12 12 8 2 3. - 0 - -0.0464434996247292 - -0.4433234930038452 - 0.0206913594156504 - <_> - - <_> - - - - <_>4 10 6 5 -1. - <_>7 10 3 5 2. - 0 - -0.0388673096895218 - -0.5345087051391602 - 0.0214356500655413 - <_> - - <_> - - - - <_>7 6 8 8 -1. - <_>11 6 4 4 2. - <_>7 10 4 4 2. - 0 - -2.0838780328631401e-003 - 0.0538762398064137 - -0.1667453050613403 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>7 5 3 5 2. - <_>10 10 3 5 2. - 0 - -0.0177849698811769 - 0.2589834928512573 - -0.0657944232225418 - <_> - - <_> - - - - <_>10 4 10 4 -1. - <_>10 6 10 2 2. - 0 - -0.0994784608483315 - -0.7233209013938904 - 6.1601991765201092e-003 - <_> - - <_> - - - - <_>0 4 10 4 -1. - <_>0 6 10 2 2. - 0 - -2.5733250658959150e-003 - 0.0720276534557343 - -0.1752230972051621 - <_> - - <_> - - - - <_>4 2 14 6 -1. - <_>4 5 14 3 2. - 0 - 0.0699774399399757 - -0.0302383303642273 - 0.3980937898159027 - <_> - - <_> - - - - <_>0 2 13 3 -1. - <_>0 3 13 1 3. - 0 - -0.0108807804062963 - -0.3060626983642578 - 0.0452105589210987 - <_> - - <_> - - - - <_>4 9 12 5 -1. - <_>8 9 4 5 3. - 0 - 0.0480814017355442 - 0.0439110994338989 - -0.2568621933460236 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - 0.0796882435679436 - -0.0337416008114815 - 0.3653270006179810 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - -0.0154040204361081 - -0.1773145943880081 - 0.0238007307052612 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - -0.0366438999772072 - -0.6393110752105713 - 0.0175186302512884 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0130725000053644 - -0.2411936074495316 - 0.0588769502937794 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -2.5379280559718609e-003 - -0.2050921022891998 - 0.0589157603681087 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 0.0474912784993649 - 0.0228427797555923 - -0.3945347964763641 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -0.0214896406978369 - -0.3109112083911896 - 0.0380208715796471 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 0.0138413300737739 - -0.0560395196080208 - 0.2130897939205170 - <_> - - <_> - - - - <_>4 15 12 5 -1. - <_>8 15 4 5 3. - 0 - 4.9399589188396931e-003 - -0.1883863061666489 - 0.0621718391776085 - <_> - - <_> - - - - <_>12 12 7 6 -1. - <_>12 14 7 2 3. - 0 - 0.0134834395721555 - 0.0368753299117088 - -0.2495236992835999 - <_> - - <_> - - - - <_>0 6 17 3 -1. - <_>0 7 17 1 3. - 0 - -8.4225656464695930e-003 - 0.0715010911226273 - -0.1399662047624588 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - -0.0437869913876057 - 0.2012841999530792 - -0.0537442602217197 - <_> - - <_> - - - - <_>0 12 18 4 -1. - <_>0 12 9 2 2. - <_>9 14 9 2 2. - 0 - -0.0100684398785234 - -0.1670701950788498 - 0.0613450892269611 - <_> - - <_> - - - - <_>11 0 4 7 -1. - <_>11 0 2 7 2. - 0 - 2.4383061099797487e-003 - -0.1210545971989632 - 0.0498077012598515 - <_> - - <_> - - - - <_>0 12 14 2 -1. - <_>0 13 14 1 2. - 0 - 3.2083820551633835e-003 - -0.0560453608632088 - 0.1795570999383926 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0203895196318626 - -0.3198359012603760 - 0.0341416187584400 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0229144208133221 - -0.3945465087890625 - 0.0238389708101749 - <_> - - <_> - - - - <_>10 1 6 7 -1. - <_>12 1 2 7 3. - 0 - 0.0185669008642435 - 0.0384325608611107 - -0.2299199998378754 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - -0.0102770300582051 - 0.2255744934082031 - -0.0492232292890549 - <_> - - <_> - - - - <_>9 1 3 14 -1. - <_>10 1 1 14 3. - 0 - -9.7914133220911026e-003 - 0.1932788044214249 - -0.0361390598118305 - <_> - - <_> - - - - <_>4 1 6 7 -1. - <_>6 1 2 7 3. - 0 - 0.0126998396590352 - 0.0562979914247990 - -0.2098159939050674 - <_> - - <_> - - - - <_>11 11 7 6 -1. - <_>11 13 7 2 3. - 0 - 0.0398674681782722 - 9.4982674345374107e-003 - -0.4768620133399963 - <_> - - <_> - - - - <_>2 11 7 6 -1. - <_>2 13 7 2 3. - 0 - 0.0337045192718506 - 0.0188484601676464 - -0.5370798110961914 - <_> - - <_> - - - - <_>0 3 20 12 -1. - <_>0 9 20 6 2. - 0 - -0.0336952693760395 - -0.2700335085391998 - 0.0389563404023647 - <_> - - <_> - - - - <_>7 6 6 11 -1. - <_>9 6 2 11 3. - 0 - 0.0239612497389317 - -0.0950004309415817 - 0.1028281971812248 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - 0.0829902291297913 - 0.0378285683691502 - -0.3026775121688843 - <_> - - <_> - - - - <_>0 1 6 11 -1. - <_>3 1 3 11 2. - 0 - 0.1653721034526825 - 0.0239121504127979 - -0.4121440947055817 - <_> - - <_> - - - - <_>9 4 5 12 -1. - <_>9 10 5 6 2. - 0 - 0.0182025693356991 - 0.0261274594813585 - -0.0692270100116730 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>0 3 10 2 2. - <_>10 5 10 2 2. - 0 - -0.0453223809599876 - -0.4443764984607697 - 0.0212795697152615 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>15 0 5 3 2. - <_>10 3 5 3 2. - 0 - 0.0476206094026566 - -0.0340700000524521 - 0.2106568068265915 - <_> - - <_> - - - - <_>4 0 10 6 -1. - <_>4 0 5 3 2. - <_>9 3 5 3 2. - 0 - 1.0596530046314001e-003 - 0.0983478203415871 - -0.0927325934171677 - <_> - - <_> - - - - <_>7 8 13 3 -1. - <_>7 9 13 1 3. - 0 - 0.0320280492305756 - 0.0238339491188526 - -0.4327659010887146 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - -0.0137643702328205 - -0.4172661900520325 - 0.0218833591789007 - <_> - - <_> - - - - <_>10 6 7 4 -1. - <_>10 8 7 2 2. - 0 - 0.0366521589457989 - -0.0268514100462198 - 0.1005123034119606 - <_> - - <_> - - - - <_>3 6 7 4 -1. - <_>3 8 7 2 2. - 0 - -0.0155077604576945 - 0.4851926863193512 - -0.0249007102102041 - <_> - - <_> - - - - <_>11 9 7 6 -1. - <_>11 11 7 2 3. - 0 - 7.1460101753473282e-003 - 0.0579064711928368 - -0.0516139715909958 - <_> - - <_> - - - - <_>2 8 14 4 -1. - <_>2 8 7 2 2. - <_>9 10 7 2 2. - 0 - 0.0242802295833826 - -0.0373418293893337 - 0.2920179963111877 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>15 10 5 3 2. - <_>10 13 5 3 2. - 0 - -0.0835223197937012 - 0.3744797110557556 - -3.4602559171617031e-003 - <_> - - <_> - - - - <_>0 10 10 6 -1. - <_>0 10 5 3 2. - <_>5 13 5 3 2. - 0 - 0.0314857214689255 - 0.0240920092910528 - -0.3959487974643707 - <_> - - <_> - - - - <_>14 5 4 14 -1. - <_>16 5 2 7 2. - <_>14 12 2 7 2. - 0 - 9.4820279628038406e-003 - -0.0737146735191345 - 0.1306633055210114 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 0.0401169583201408 - 0.0304537191987038 - -0.3064115941524506 - <_> - - <_> - - - - <_>14 5 4 14 -1. - <_>16 5 2 7 2. - <_>14 12 2 7 2. - 0 - -0.0528154782950878 - 0.4579240977764130 - -0.0239062309265137 - <_> - - <_> - - - - <_>2 5 4 14 -1. - <_>2 5 2 7 2. - <_>4 12 2 7 2. - 0 - 4.6821571886539459e-003 - -0.0883959308266640 - 0.1285813003778458 - <_> - - <_> - - - - <_>2 5 18 12 -1. - <_>11 5 9 6 2. - <_>2 11 9 6 2. - 0 - -0.1344828009605408 - -0.2747175097465515 - 0.0159703101962805 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - 5.4646627977490425e-003 - -0.2162843942642212 - 0.0430353209376335 - <_> - - <_> - - - - <_>9 0 3 20 -1. - <_>10 0 1 20 3. - 0 - -0.0359963588416576 - -0.4852409064769745 - 0.0105637498199940 - <_> - - <_> - - - - <_>1 0 6 16 -1. - <_>1 8 6 8 2. - 0 - 0.2523599863052368 - 9.3745701014995575e-003 - -0.8861339092254639 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0250672698020935 - -0.2236464023590088 - 0.0371466018259525 - <_> - - <_> - - - - <_>1 3 15 4 -1. - <_>6 3 5 4 3. - 0 - -0.0141503298655152 - 0.3785665035247803 - -0.0278174895793200 - <_> - - <_> - - - - <_>8 4 5 16 -1. - <_>8 12 5 8 2. - 0 - 0.1004957035183907 - 0.0112448399886489 - -0.7186952233314514 - <_> - - <_> - - - - <_>1 12 7 6 -1. - <_>1 14 7 2 3. - 0 - 0.0199890807271004 - 0.0260568093508482 - -0.3214780092239380 - <_> - - <_> - - - - <_>17 5 3 12 -1. - <_>17 11 3 6 2. - 0 - -0.0491605587303638 - -0.2316488027572632 - 0.0163175594061613 - <_> - - <_> - - - - <_>1 3 15 3 -1. - <_>1 4 15 1 3. - 0 - 0.0221187900751829 - -0.0505694784224033 - 0.1757258027791977 - <_> - - <_> - - - - <_>8 5 4 12 -1. - <_>8 9 4 4 3. - 0 - -7.6390360482037067e-003 - 0.2226431965827942 - -0.0436853915452957 - <_> - - <_> - - - - <_>8 7 3 10 -1. - <_>8 12 3 5 2. - 0 - -1.6813250258564949e-003 - 0.0555824413895607 - -0.1773931980133057 - <_> - - <_> - - - - <_>4 1 14 3 -1. - <_>4 2 14 1 3. - 0 - -0.0166190005838871 - -0.2781296968460083 - 0.0197378303855658 - <_> - - <_> - - - - <_>0 5 3 12 -1. - <_>0 11 3 6 2. - 0 - -0.0328016206622124 - -0.2332518994808197 - 0.0366638191044331 - <_> - - <_> - - - - <_>1 13 18 6 -1. - <_>7 13 6 6 3. - 0 - 0.2452659010887146 - -0.0297389402985573 - 0.3133840858936310 - <_> - - <_> - - - - <_>7 3 4 7 -1. - <_>9 3 2 7 2. - 0 - -0.0172717701643705 - 0.5281891822814941 - -0.0141517799347639 - <_> - - <_> - - - - <_>8 7 9 5 -1. - <_>11 7 3 5 3. - 0 - 0.0201119091361761 - 0.0271735806018114 - -0.0831227228045464 - <_> - - <_> - - - - <_>3 7 9 5 -1. - <_>6 7 3 5 3. - 0 - 0.0160767491906881 - 0.0563466399908066 - -0.1589314043521881 - <_> - - <_> - - - - <_>10 10 8 10 -1. - <_>14 10 4 5 2. - <_>10 15 4 5 2. - 0 - -0.1017976999282837 - 0.6044800877571106 - -7.6062050648033619e-003 - <_> - - <_> - - - - <_>2 10 8 10 -1. - <_>2 10 4 5 2. - <_>6 15 4 5 2. - 0 - -0.0448656491935253 - 0.3307703137397766 - -0.0253291893750429 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 0.0270949807018042 - -0.0692517235875130 - 0.1535059958696365 - <_> - - <_> - - - - <_>3 12 7 6 -1. - <_>3 14 7 2 3. - 0 - -0.0376758910715580 - -0.3194983899593353 - 0.0299096796661615 - <_> - - <_> - - - - <_>8 3 5 8 -1. - <_>8 7 5 4 2. - 0 - -8.2310457946732640e-004 - 0.0606129691004753 - -0.1053157970309258 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>7 4 6 4 2. - 0 - 0.0556860491633415 - -0.0409203507006168 - 0.2295964956283569 - <_> - - <_> - - - - <_>10 0 7 6 -1. - <_>10 2 7 2 3. - 0 - -1.6866069927345961e-004 - -0.0776435881853104 - 0.0295492708683014 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - -0.0238732099533081 - 0.2794407904148102 - -0.0318884588778019 - <_> - - <_> - - - - <_>7 12 13 3 -1. - <_>7 13 13 1 3. - 0 - -0.0150036001577973 - 0.2507739067077637 - -0.0459327884018421 - <_> - - <_> - - - - <_>1 3 18 4 -1. - <_>1 3 9 2 2. - <_>10 5 9 2 2. - 0 - -0.0145223196595907 - -0.1645354032516480 - 0.0551809109747410 - <_> - - <_> - - - - <_>6 1 8 8 -1. - <_>10 1 4 4 2. - <_>6 5 4 4 2. - 0 - -7.4650160968303680e-003 - -0.1269046962261200 - 0.0715431123971939 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>10 6 2 7 2. - 0 - 0.0549846403300762 - -0.0137307997792959 - 0.6511964201927185 - <_> - - <_> - - - - <_>2 4 18 6 -1. - <_>11 4 9 3 2. - <_>2 7 9 3 2. - 0 - -0.0880307629704475 - 0.2541649043560028 - -0.0122338701039553 - <_> - - <_> - - - - <_>1 5 8 8 -1. - <_>1 5 4 4 2. - <_>5 9 4 4 2. - 0 - -0.0361955016851425 - -0.4491730928421021 - 0.0210937708616257 - <_> - - <_> - - - - <_>14 0 2 13 -1. - <_>14 0 1 13 2. - 0 - 0.0370632112026215 - -6.6644148901104927e-003 - 0.2494017034769058 - <_> - - <_> - - - - <_>4 0 2 13 -1. - <_>5 0 1 13 2. - 0 - -0.0105683803558350 - -0.4106157124042511 - 0.0213980898261070 - <_> - - <_> - - - - <_>7 3 12 3 -1. - <_>7 3 6 3 2. - 0 - 0.1266278028488159 - 5.2506178617477417e-003 - -0.3324024975299835 - <_> - - <_> - - - - <_>1 3 12 3 -1. - <_>7 3 6 3 2. - 0 - -8.7341770995408297e-004 - 0.3268721997737885 - -0.0277048293501139 - <_> - - <_> - - - - <_>7 1 6 7 -1. - <_>9 1 2 7 3. - 0 - -1.0967969428747892e-003 - -0.2771083116531372 - 0.0363528281450272 - <_> - - <_> - - - - <_>5 2 6 12 -1. - <_>7 2 2 12 3. - 0 - -0.0797380208969116 - -0.5832915902137756 - 0.0140617797151208 - <_> - - <_> - - - - <_>9 5 6 12 -1. - <_>12 5 3 6 2. - <_>9 11 3 6 2. - 0 - -3.8278030697256327e-003 - 0.0354594513773918 - -0.1399680972099304 - <_> - - <_> - - - - <_>5 5 6 12 -1. - <_>5 5 3 6 2. - <_>8 11 3 6 2. - 0 - 0.0203339997678995 - -0.0214213505387306 - 0.5161038041114807 - <_> - - <_> - - - - <_>5 9 14 3 -1. - <_>5 10 14 1 3. - 0 - 7.5564032886177301e-004 - -0.1080347001552582 - 0.0335382893681526 - <_> - - <_> - - - - <_>1 3 18 12 -1. - <_>1 3 9 6 2. - <_>10 9 9 6 2. - 0 - 0.1785584986209869 - 9.4842249527573586e-003 - -0.8185818791389465 - <_> - - <_> - - - - <_>3 11 14 4 -1. - <_>10 11 7 2 2. - <_>3 13 7 2 2. - 0 - -0.0347450710833073 - -0.5817219018936157 - 0.0113155497238040 - <_> - - <_> - - - - <_>4 6 4 14 -1. - <_>4 6 2 7 2. - <_>6 13 2 7 2. - 0 - 5.1304209046065807e-003 - -0.1065986007452011 - 0.0744408965110779 - <_> - - <_> - - - - <_>11 11 4 7 -1. - <_>11 11 2 7 2. - 0 - -0.0339361988008022 - -0.4599775969982147 - 0.0152644198387861 - <_> - - <_> - - - - <_>5 11 4 7 -1. - <_>7 11 2 7 2. - 0 - -1.0171560570597649e-003 - 0.1030130982398987 - -0.0898429602384567 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - 0.0634890198707581 - 6.8669100292026997e-003 - -0.7602251768112183 - <_> - - <_> - - - - <_>1 3 18 4 -1. - <_>7 3 6 4 3. - 0 - 0.2407793998718262 - -0.0215714797377586 - 0.4111303091049194 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - -0.0519634410738945 - -0.2851732075214386 - 0.0409430600702763 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>10 8 7 3 2. - 0 - 0.0364081710577011 - -0.0504609607160091 - 0.1667181998491287 - <_> - - <_> - - - - <_>9 4 2 13 -1. - <_>9 4 1 13 2. - 0 - 9.6712149679660797e-003 - -0.0489151105284691 - 0.1822443008422852 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0222681500017643 - 0.0613909810781479 - -0.1544584929943085 - <_> - - <_> - - - - <_>10 0 7 6 -1. - <_>10 2 7 2 3. - 0 - -0.0709292814135551 - 0.5001016855239868 - -3.9896317757666111e-003 - <_> - - <_> - - - - <_>3 0 7 6 -1. - <_>3 2 7 2 3. - 0 - 2.0806699467357248e-004 - -0.1447563022375107 - 0.0636075288057327 - <_> - - <_> - - - - <_>2 0 16 3 -1. - <_>2 1 16 1 3. - 0 - -9.2365043237805367e-003 - -0.2181728929281235 - 0.0388562604784966 - <_> - - <_> - - - - <_>2 9 7 4 -1. - <_>2 11 7 2 2. - 0 - 0.0227819904685020 - 0.0201086197048426 - -0.3845236003398895 - <_> - - <_> - - - - <_>4 7 16 8 -1. - <_>12 7 8 4 2. - <_>4 11 8 4 2. - 0 - -7.0844120346009731e-003 - -0.0488854907453060 - 0.0463673397898674 - <_> - - <_> - - - - <_>0 7 16 8 -1. - <_>0 7 8 4 2. - <_>8 11 8 4 2. - 0 - -0.0840062797069550 - 0.3592166900634766 - -0.0224618893116713 - <_> - - <_> - - - - <_>7 12 10 6 -1. - <_>12 12 5 3 2. - <_>7 15 5 3 2. - 0 - -0.0704465806484222 - -0.8839532136917114 - 2.9730550013482571e-003 - <_> - - <_> - - - - <_>3 12 10 6 -1. - <_>3 12 5 3 2. - <_>8 15 5 3 2. - 0 - 0.0488998107612133 - 0.0239362195134163 - -0.3677014112472534 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 0.0296773295849562 - 0.0166081208735704 - -0.2297268956899643 - <_> - - <_> - - - - <_>4 5 4 8 -1. - <_>4 9 4 4 2. - 0 - 2.5721399579197168e-003 - -0.3257220983505249 - 0.0241460092365742 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 1.6117929480969906e-003 - 0.0293553005903959 - -0.0375415794551373 - <_> - - <_> - - - - <_>2 4 14 3 -1. - <_>2 5 14 1 3. - 0 - 0.0175466407090425 - -0.0508792400360107 - 0.1528313010931015 - <_> - - <_> - - - - <_>2 3 18 4 -1. - <_>11 3 9 2 2. - <_>2 5 9 2 2. - 0 - -0.0463263988494873 - -0.2284332066774368 - 0.0144425304606557 - <_> - - <_> - - - - <_>5 0 10 18 -1. - <_>5 6 10 6 3. - 0 - -0.3320567011833191 - 0.7445781826972961 - -0.0108568798750639 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -0.0423178300261498 - -0.1466601938009262 - 0.0577992312610149 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - 3.2436659093946218e-003 - 0.0540214516222477 - -0.1702941060066223 - <_> - - <_> - - - - <_>13 4 3 15 -1. - <_>14 4 1 15 3. - 0 - -0.0209008902311325 - -0.4078929126262665 - 0.0253348108381033 - <_> - - <_> - - - - <_>4 4 3 15 -1. - <_>5 4 1 15 3. - 0 - 0.0203250106424093 - 0.0330159291625023 - -0.2450339049100876 - <_> - - <_> - - - - <_>14 4 6 10 -1. - <_>16 4 2 10 3. - 0 - -0.0463419295847416 - 0.1597664952278137 - -0.0411779396235943 - <_> - - <_> - - - - <_>0 4 6 10 -1. - <_>2 4 2 10 3. - 0 - -0.0343563295900822 - 0.1602140963077545 - -0.0625009536743164 - <_> - - <_> - - - - <_>8 5 4 14 -1. - <_>10 5 2 7 2. - <_>8 12 2 7 2. - 0 - 0.0244659706950188 - -0.0374875999987125 - 0.2280728071928024 - <_> - - <_> - - - - <_>4 6 12 12 -1. - <_>4 6 6 6 2. - <_>10 12 6 6 2. - 0 - -0.0181395392864943 - -0.1590958982706070 - 0.0605398118495941 - <_> - - <_> - - - - <_>9 1 3 19 -1. - <_>10 1 1 19 3. - 0 - 0.0643941611051559 - 6.6441670060157776e-003 - -0.7486022710800171 - <_> - - <_> - - - - <_>2 1 3 17 -1. - <_>3 1 1 17 3. - 0 - 9.6367759397253394e-004 - -0.0906208083033562 - 0.0941181331872940 - <_> - - <_> - - - - <_>2 7 18 4 -1. - <_>8 7 6 4 3. - 0 - 0.2002449035644531 - 5.9731658548116684e-003 - -0.8252168893814087 - <_> - - <_> - - - - <_>1 10 8 6 -1. - <_>1 12 8 2 3. - 0 - -0.0634986683726311 - -0.6963583827018738 - 9.3487137928605080e-003 - <_> - - <_> - - - - <_>9 9 9 8 -1. - <_>12 9 3 8 3. - 0 - -0.0192323997616768 - 0.1123668029904366 - -0.0291997399181128 - <_> - - <_> - - - - <_>0 0 20 15 -1. - <_>0 5 20 5 3. - 0 - 0.2541874945163727 - 0.0139590399339795 - -0.5158494710922241 - <_> - - <_> - - - - <_>3 1 14 6 -1. - <_>3 4 14 3 2. - 0 - 0.1043746024370194 - -0.0277430303394794 - 0.2737343013286591 - <_> - - <_> - - - - <_>0 2 7 4 -1. - <_>0 4 7 2 2. - 0 - 8.5034370422363281e-003 - 0.0541446506977081 - -0.1302950978279114 - <_> - - <_> - - - - <_>16 2 3 15 -1. - <_>17 2 1 15 3. - 0 - 5.2647730335593224e-003 - -0.0480775013566017 - 0.1037138029932976 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -0.0241935197263956 - 0.1993298977613449 - -0.0371110402047634 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -4.6968772076070309e-003 - -0.0657970905303955 - 0.0338373482227325 - <_> - - <_> - - - - <_>2 16 14 4 -1. - <_>2 16 7 2 2. - <_>9 18 7 2 2. - 0 - -0.0234645791351795 - -0.2604303061962128 - 0.0309330895543098 - <_> - - <_> - - - - <_>16 2 3 15 -1. - <_>17 2 1 15 3. - 0 - -0.0290298406034708 - 0.2068361937999725 - -0.0276286508888006 - <_> - - <_> - - - - <_>3 0 8 8 -1. - <_>3 0 4 4 2. - <_>7 4 4 4 2. - 0 - 0.0791002362966537 - 7.7356752008199692e-003 - -0.9181671142578125 - <_> - - <_> - - - - <_>5 10 14 3 -1. - <_>5 11 14 1 3. - 0 - 6.2152887694537640e-003 - -0.0739880278706551 - 0.0877274125814438 - <_> - - <_> - - - - <_>1 9 16 4 -1. - <_>1 11 16 2 2. - 0 - -0.0670132786035538 - 0.3762829899787903 - -0.0208927094936371 - <_> - - <_> - - - - <_>8 7 5 8 -1. - <_>8 11 5 4 2. - 0 - -7.9359989613294601e-003 - -0.0895327031612396 - 0.0665593072772026 - <_> - - <_> - - - - <_>1 2 3 15 -1. - <_>2 2 1 15 3. - 0 - 1.3035970041528344e-003 - -0.0666571408510208 - 0.1139909997582436 - <_> - - <_> - - - - <_>14 11 6 8 -1. - <_>16 11 2 8 3. - 0 - -0.1196431964635849 - -0.6065618991851807 - 7.3508038185536861e-003 - <_> - - <_> - - - - <_>0 11 6 8 -1. - <_>2 11 2 8 3. - 0 - -2.2869240492582321e-003 - 0.0733368173241615 - -0.1188957020640373 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>17 8 3 6 2. - <_>14 14 3 6 2. - 0 - -0.1146256998181343 - 0.2928853034973145 - -6.7763519473373890e-003 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>0 8 3 6 2. - <_>3 14 3 6 2. - 0 - 0.0484774895012379 - -0.0170629508793354 - 0.4295321106910706 - <_> - - <_> - - - - <_>15 0 3 20 -1. - <_>16 0 1 20 3. - 0 - -1.3129960279911757e-003 - -0.0743196383118629 - 0.0621497891843319 - <_> - - <_> - - - - <_>2 0 3 20 -1. - <_>3 0 1 20 3. - 0 - -0.0663447827100754 - -0.5894566774368286 - 0.0132258199155331 - <_> - - <_> - - - - <_>8 9 8 4 -1. - <_>8 9 4 4 2. - 0 - -4.6543189091607928e-004 - 0.0578865483403206 - -0.0642952993512154 - <_> - - <_> - - - - <_>6 9 6 10 -1. - <_>9 9 3 10 2. - 0 - -0.0132865402847528 - 0.1412332952022553 - -0.0615064688026905 - <_> - - <_> - - - - <_>9 9 9 8 -1. - <_>12 9 3 8 3. - 0 - 7.3928399942815304e-003 - -0.0727199912071228 - 0.0421791411936283 - <_> - - <_> - - - - <_>2 9 9 8 -1. - <_>5 9 3 8 3. - 0 - -0.0474341697990894 - 0.3267227113246918 - -0.0290015302598476 - <_> - - <_> - - - - <_>12 5 6 15 -1. - <_>14 5 2 15 3. - 0 - 0.1354679018259049 - 0.0103935701772571 - -0.4535447955131531 - <_> - - <_> - - - - <_>1 2 9 5 -1. - <_>4 2 3 5 3. - 0 - -0.0252168104052544 - -0.1907597929239273 - 0.0415227413177490 - <_> - - <_> - - - - <_>9 1 3 19 -1. - <_>10 1 1 19 3. - 0 - -0.0494313985109329 - -0.9419217109680176 - 3.5473550669848919e-003 - <_> - - <_> - - - - <_>8 1 3 19 -1. - <_>9 1 1 19 3. - 0 - -0.0483751818537712 - -0.8302866816520691 - 7.2369067929685116e-003 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - -0.0143485097214580 - -0.2186049968004227 - 0.0314864292740822 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -5.5373171344399452e-003 - -0.2152103036642075 - 0.0442358888685703 - <_> - - <_> - - - - <_>6 3 10 10 -1. - <_>6 3 5 10 2. - 0 - 0.2177180051803589 - -5.0501842051744461e-003 - 0.4902552068233490 - <_> - - <_> - - - - <_>3 0 12 5 -1. - <_>9 0 6 5 2. - 0 - 0.1744139939546585 - -9.7074145451188087e-003 - 0.7419623136520386 - <_> - - <_> - - - - <_>8 1 10 16 -1. - <_>13 1 5 8 2. - <_>8 9 5 8 2. - 0 - 0.0888404995203018 - -5.8005251921713352e-003 - 0.3340322077274323 - <_> - - <_> - - - - <_>4 8 8 4 -1. - <_>8 8 4 4 2. - 0 - -0.0380127914249897 - 0.5067759156227112 - -0.0138094304129481 - <_> - - <_> - - - - <_>9 16 9 4 -1. - <_>9 18 9 2 2. - 0 - -0.0636113882064819 - -0.5669682025909424 - 7.9266652464866638e-003 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>4 14 4 6 2. - 0 - 0.0983584821224213 - 0.0346348993480206 - -0.1965176016092300 - <_> - - <_> - - - - <_>12 5 6 15 -1. - <_>14 5 2 15 3. - 0 - 0.0229296106845140 - -0.0446826405823231 - 0.0600624196231365 - <_> - - <_> - - - - <_>2 5 6 15 -1. - <_>4 5 2 15 3. - 0 - -0.0397636517882347 - -0.2831034958362579 - 0.0260870698839426 - <_> - - <_> - - - - <_>11 0 9 17 -1. - <_>14 0 3 17 3. - 0 - 0.1121568977832794 - -0.0432257093489170 - 0.1550564020872116 - <_> - - <_> - - - - <_>0 0 9 17 -1. - <_>3 0 3 17 3. - 0 - -0.1495794057846069 - 0.4147608876228333 - -0.0251126699149609 - <_> - - <_> - - - - <_>3 8 17 2 -1. - <_>3 9 17 1 2. - 0 - 1.4239370357245207e-003 - -0.2281333059072495 - 0.0224146191030741 - <_> - - <_> - - - - <_>6 1 7 4 -1. - <_>6 3 7 2 2. - 0 - -0.0113461399450898 - -0.2608393132686615 - 0.0264564808458090 - <_> - - <_> - - - - <_>4 2 12 4 -1. - <_>4 4 12 2 2. - 0 - -0.0905184075236321 - 0.6006718277931213 - -0.0125591596588492 - <_> - - <_> - - - - <_>1 8 14 3 -1. - <_>1 9 14 1 3. - 0 - 0.0360974818468094 - 0.0194510091096163 - -0.4099824130535126 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0256574694067240 - 0.2345308065414429 - -0.0323545187711716 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - -9.2462729662656784e-003 - 0.1445856988430023 - -0.0572801418602467 - <_> - - <_> - - - - <_>1 5 19 12 -1. - <_>1 9 19 4 3. - 0 - 0.0610067397356033 - 0.1996331959962845 - -0.0350187905132771 - <_> - - <_> - - - - <_>2 3 13 15 -1. - <_>2 8 13 5 3. - 0 - -2.2736669052392244e-003 - -0.2718046009540558 - 0.0353243090212345 - <_> - - <_> - - - - <_>5 1 15 6 -1. - <_>10 1 5 6 3. - 0 - -0.1117335036396980 - 0.2601088881492615 - -8.4183625876903534e-003 - <_> - - <_> - - - - <_>0 0 18 3 -1. - <_>6 0 6 3 3. - 0 - 0.1460158973932266 - -0.0437078587710857 - 0.1934380978345871 - <_> - - <_> - - - - <_>15 9 5 9 -1. - <_>15 12 5 3 3. - 0 - -0.0390085987746716 - -0.2402154952287674 - 0.0193248093128204 - <_> - - <_> - - - - <_>3 12 14 4 -1. - <_>3 14 14 2 2. - 0 - -0.0320651493966579 - -0.1461603045463562 - 0.0504104383289814 - <_> - - <_> - - - - <_>7 14 13 2 -1. - <_>7 15 13 1 2. - 0 - -3.9755292236804962e-003 - 0.0867860615253448 - -0.0751010030508041 - <_> - - <_> - - - - <_>0 9 5 9 -1. - <_>0 12 5 3 3. - 0 - -0.0222646091133356 - -0.1782020926475525 - 0.0422218814492226 - <_> - - <_> - - - - <_>14 5 5 15 -1. - <_>14 10 5 5 3. - 0 - -0.0600966513156891 - 0.3306227028369904 - -0.0133472196757793 - <_> - - <_> - - - - <_>1 5 5 15 -1. - <_>1 10 5 5 3. - 0 - -0.0831704065203667 - 0.6986327171325684 - -0.0110143097117543 - <_> - - <_> - - - - <_>8 3 6 17 -1. - <_>10 3 2 17 3. - 0 - -0.0771823972463608 - -0.2563033103942871 - 8.8049499318003654e-003 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - 0.0689021721482277 - 0.0109964404255152 - -0.6352006793022156 - <_> - - <_> - - - - <_>4 7 12 8 -1. - <_>4 11 12 4 2. - 0 - -0.0503532811999321 - 0.2292789071798325 - -0.0327637195587158 - <_> - - <_> - - - - <_>5 3 2 14 -1. - <_>5 10 2 7 2. - 0 - 2.4320879019796848e-003 - -0.1321305930614471 - 0.0710885822772980 - <_> - - <_> - - - - <_>9 3 4 8 -1. - <_>9 7 4 4 2. - 0 - -0.0141964601352811 - 0.0718450695276260 - -0.0452636592090130 - <_> - - <_> - - - - <_>3 5 9 15 -1. - <_>3 10 9 5 3. - 0 - -4.5774779282510281e-003 - -0.2583228051662445 - 0.0294190403074026 - <_> - - <_> - - - - <_>9 5 3 12 -1. - <_>9 11 3 6 2. - 0 - -1.4008210273459554e-003 - 0.0446365214884281 - -0.1231015026569367 - <_> - - <_> - - - - <_>4 3 6 14 -1. - <_>4 3 3 7 2. - <_>7 10 3 7 2. - 0 - 0.0350627116858959 - -0.0187225006520748 - 0.4553366899490356 - <_> - - <_> - - - - <_>9 8 3 10 -1. - <_>9 13 3 5 2. - 0 - 0.0393649190664291 - -3.8776830770075321e-003 - 0.4822939038276672 - <_> - - <_> - - - - <_>0 4 20 8 -1. - <_>0 4 10 4 2. - <_>10 8 10 4 2. - 0 - 0.0294302906841040 - -0.0566326901316643 - 0.1360445022583008 - <_> - - <_> - - - - <_>6 11 10 6 -1. - <_>11 11 5 3 2. - <_>6 14 5 3 2. - 0 - 0.0793208405375481 - -4.0827351622283459e-003 - 0.9999855160713196 - <_> - - <_> - - - - <_>2 9 8 8 -1. - <_>2 9 4 4 2. - <_>6 13 4 4 2. - 0 - 0.0426963306963444 - 0.0235833395272493 - -0.3779887855052948 - <_> - - <_> - - - - <_>6 9 14 2 -1. - <_>6 9 7 2 2. - 0 - 0.0259377192705870 - 0.0502833388745785 - -0.0672493427991867 - <_> - - <_> - - - - <_>0 9 14 2 -1. - <_>7 9 7 2 2. - 0 - 0.0270536597818136 - 0.1040683984756470 - -0.1006971001625061 - <_> - - <_> - - - - <_>2 4 18 12 -1. - <_>8 4 6 12 3. - 0 - 0.3032230138778687 - -0.0516154095530510 - 0.1239866986870766 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>9 4 2 8 3. - 0 - 0.0743731930851936 - -0.0299796499311924 - 0.2594498097896576 - <_> - - <_> - - - - <_>9 3 6 12 -1. - <_>12 3 3 6 2. - <_>9 9 3 6 2. - 0 - 0.0460597686469555 - 6.1678960919380188e-003 - -0.7088791131973267 - <_> - - <_> - - - - <_>6 9 5 9 -1. - <_>6 12 5 3 3. - 0 - 0.0368835106492043 - 0.0159850195050240 - -0.4443601965904236 - <_> - - <_> - - - - <_>0 1 20 8 -1. - <_>10 1 10 4 2. - <_>0 5 10 4 2. - 0 - 0.1349337995052338 - 8.8313389569520950e-003 - -0.7342693805694580 - <_> - - <_> - - - - <_>6 3 6 17 -1. - <_>8 3 2 17 3. - 0 - 0.1479919999837875 - 6.9719799794256687e-003 - -0.8207845091819763 - <_> - - <_> - - - - <_>14 10 6 10 -1. - <_>17 10 3 5 2. - <_>14 15 3 5 2. - 0 - 0.0396903790533543 - -0.0182477999478579 - 0.2695592045783997 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - -0.0535112805664539 - 0.2000025063753128 - -0.0391367003321648 - <_> - - <_> - - - - <_>16 12 4 8 -1. - <_>16 12 2 8 2. - 0 - 0.0637957006692886 - 0.0116161303594708 - -0.2531512081623077 - <_> - - <_> - - - - <_>0 12 4 8 -1. - <_>2 12 2 8 2. - 0 - -0.0810789167881012 - -0.7758278846740723 - 9.7084697335958481e-003 - <_> - - <_> - - - - <_>9 3 6 7 -1. - <_>11 3 2 7 3. - 0 - -0.0482726581394672 - -0.3073430955410004 - 0.0112980101257563 - <_> - - <_> - - - - <_>6 6 6 11 -1. - <_>8 6 2 11 3. - 0 - 0.0439125709235668 - -0.0394033007323742 - 0.1921695023775101 - -1.4138590097427368 - 37 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0191887393593788 - -0.2115039974451065 - 0.1328652948141098 - <_> - - <_> - - - - <_>5 4 15 4 -1. - <_>5 6 15 2 2. - 0 - -8.1222038716077805e-003 - 0.0924910828471184 - -0.1758511960506439 - <_> - - <_> - - - - <_>5 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 1.5851219650357962e-003 - -0.2856569886207581 - 0.0667105689644814 - <_> - - <_> - - - - <_>12 1 6 11 -1. - <_>14 1 2 11 3. - 0 - -4.3140850029885769e-003 - -0.1388522982597351 - 0.0526946894824505 - <_> - - <_> - - - - <_>0 11 20 3 -1. - <_>0 12 20 1 3. - 0 - -1.7131429631263018e-003 - 0.1313561052083969 - -0.1314910948276520 - <_> - - <_> - - - - <_>12 1 6 11 -1. - <_>14 1 2 11 3. - 0 - 0.0684473663568497 - 9.3052154406905174e-003 - -0.2506326138973236 - <_> - - <_> - - - - <_>2 1 6 11 -1. - <_>4 1 2 11 3. - 0 - -2.4445978924632072e-003 - -0.1720553040504456 - 0.0983228236436844 - <_> - - <_> - - - - <_>10 9 4 8 -1. - <_>10 13 4 4 2. - 0 - 1.0310600046068430e-003 - 0.0230391602963209 - -0.2752762138843536 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - 7.4603251414373517e-004 - -0.2327678054571152 - 0.0526930093765259 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -6.6399492789059877e-004 - 0.0689907819032669 - -0.0846877098083496 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -4.0997468749992549e-004 - 0.1050138026475906 - -0.1081900969147682 - <_> - - <_> - - - - <_>15 7 5 6 -1. - <_>15 10 5 3 2. - 0 - -1.8094549886882305e-003 - -0.1817883998155594 - 0.0441841408610344 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 9.3385757645592093e-004 - -0.1462268978357315 - 0.0727264434099197 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 14 4 4 2. - 0 - -3.8197741378098726e-004 - 0.0240099392831326 - -0.1729580014944077 - <_> - - <_> - - - - <_>0 7 5 6 -1. - <_>0 10 5 3 2. - 0 - -1.4950280310586095e-003 - -0.1940338015556335 - 0.0488079190254211 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0101591004058719 - 0.1917389929294586 - -0.0527490712702274 - <_> - - <_> - - - - <_>2 0 14 3 -1. - <_>2 1 14 1 3. - 0 - 5.9903519286308438e-005 - -0.1079154983162880 - 0.0909881666302681 - <_> - - <_> - - - - <_>4 4 13 2 -1. - <_>4 5 13 1 2. - 0 - -0.0319675505161285 - 0.4110988974571228 - -0.0226506404578686 - <_> - - <_> - - - - <_>0 18 20 2 -1. - <_>0 19 20 1 2. - 0 - 0.0143432701006532 - 0.0243155397474766 - -0.4268015027046204 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - 0.0110395299270749 - -0.0627170130610466 - 0.1133053004741669 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -8.4228850901126862e-003 - -0.2136930972337723 - 0.0420592017471790 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0205498393625021 - 0.1516163051128388 - -0.0245941393077374 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -6.5411031246185303e-003 - 0.1488362997770309 - -0.0611793398857117 - <_> - - <_> - - - - <_>6 0 8 14 -1. - <_>10 0 4 7 2. - <_>6 7 4 7 2. - 0 - -0.0133244004100561 - -0.2079197019338608 - 0.0483333095908165 - <_> - - <_> - - - - <_>0 2 6 12 -1. - <_>2 2 2 12 3. - 0 - 0.0701112672686577 - -0.0268632192164660 - 0.3632225990295410 - <_> - - <_> - - - - <_>6 12 9 6 -1. - <_>9 12 3 6 3. - 0 - -2.6973750209435821e-004 - 0.0608766600489616 - -0.1127237007021904 - <_> - - <_> - - - - <_>2 0 7 4 -1. - <_>2 2 7 2 2. - 0 - -1.3509000418707728e-003 - -0.1855207979679108 - 0.0521549582481384 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -0.0280831903219223 - 0.3511188030242920 - -0.0235963296145201 - <_> - - <_> - - - - <_>5 0 6 10 -1. - <_>5 0 3 5 2. - <_>8 5 3 5 2. - 0 - -0.0100032901391387 - -0.2905848026275635 - 0.0321256890892982 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -1.6111029544845223e-003 - 0.0981136709451675 - -0.0522037111222744 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0184119008481503 - -0.1808266937732697 - 0.0545367002487183 - <_> - - <_> - - - - <_>18 6 2 13 -1. - <_>18 6 1 13 2. - 0 - -0.0717388167977333 - -0.7665498852729797 - 3.3518690615892410e-003 - <_> - - <_> - - - - <_>0 6 2 13 -1. - <_>1 6 1 13 2. - 0 - -2.7943260502070189e-003 - 0.1587136983871460 - -0.0642718002200127 - <_> - - <_> - - - - <_>16 7 4 13 -1. - <_>16 7 2 13 2. - 0 - -0.1687474995851517 - -0.6995618939399719 - 4.8861699178814888e-003 - <_> - - <_> - - - - <_>6 5 7 6 -1. - <_>6 7 7 2 3. - 0 - -1.2672400334849954e-003 - 0.0316160395741463 - -0.2495326995849609 - <_> - - <_> - - - - <_>6 11 10 6 -1. - <_>11 11 5 3 2. - <_>6 14 5 3 2. - 0 - 0.0208077505230904 - 0.0170534104108810 - -0.2433141022920609 - <_> - - <_> - - - - <_>5 9 6 5 -1. - <_>8 9 3 5 2. - 0 - -1.5869849594309926e-003 - 0.0931710898876190 - -0.0813619270920753 - <_> - - <_> - - - - <_>10 3 4 15 -1. - <_>10 3 2 15 2. - 0 - -0.0100146904587746 - -0.2778961956501007 - 0.0265692397952080 - <_> - - <_> - - - - <_>6 3 4 15 -1. - <_>8 3 2 15 2. - 0 - -5.7948171161115170e-003 - -0.2228773981332779 - 0.0359756611287594 - <_> - - <_> - - - - <_>6 7 13 2 -1. - <_>6 8 13 1 2. - 0 - 2.7189950924366713e-003 - -0.0906319096684456 - 0.0568204000592232 - <_> - - <_> - - - - <_>2 15 16 4 -1. - <_>2 15 8 2 2. - <_>10 17 8 2 2. - 0 - 0.0388451591134071 - 0.0122808599844575 - -0.5852134823799133 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -0.0141586801037192 - 0.1815387010574341 - -0.0311094298958778 - <_> - - <_> - - - - <_>0 7 4 13 -1. - <_>2 7 2 13 2. - 0 - -0.1827860027551651 - -0.9001380801200867 - 7.6544750481843948e-003 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - 0.0275884196162224 - -0.0124600399285555 - 0.2006936967372894 - <_> - - <_> - - - - <_>5 11 10 9 -1. - <_>5 14 10 3 3. - 0 - -0.0147844301536679 - -0.0899104923009872 - 0.0816486775875092 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - 0.1162571981549263 - 2.3692469112575054e-003 - -0.9999806880950928 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - 3.5341090988367796e-003 - -0.0617605410516262 - 0.1349063962697983 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 12 4 6 2. - 0 - 5.1878788508474827e-003 - 0.0187458600848913 - -0.1744917035102844 - <_> - - <_> - - - - <_>0 3 2 16 -1. - <_>0 11 2 8 2. - 0 - 0.0794573575258255 - -0.0234029907733202 - 0.3350220024585724 - <_> - - <_> - - - - <_>0 15 20 4 -1. - <_>10 15 10 2 2. - <_>0 17 10 2 2. - 0 - 0.0276843793690205 - 0.0236639101058245 - -0.3325636088848114 - <_> - - <_> - - - - <_>0 15 9 4 -1. - <_>0 17 9 2 2. - 0 - -4.4806320220232010e-003 - -0.1465875059366226 - 0.0473768115043640 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - 5.6939688511192799e-003 - -0.0567761212587357 - 0.0675808563828468 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 7.7299480326473713e-003 - -0.0311566498130560 - 0.2310259044170380 - <_> - - <_> - - - - <_>4 15 13 3 -1. - <_>4 16 13 1 3. - 0 - 3.9786100387573242e-003 - -0.0568824410438538 - 0.1327152997255325 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>0 0 9 2 2. - <_>9 2 9 2 2. - 0 - -0.0112758800387383 - -0.2093864977359772 - 0.0352914594113827 - <_> - - <_> - - - - <_>6 5 8 15 -1. - <_>6 10 8 5 3. - 0 - -2.4308220017701387e-003 - -0.2017636001110077 - 0.0345139317214489 - <_> - - <_> - - - - <_>0 0 6 7 -1. - <_>2 0 2 7 3. - 0 - 5.7369591668248177e-003 - -0.0556071586906910 - 0.1153208985924721 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>16 1 2 12 3. - 0 - 4.6170800924301147e-003 - -0.0560835003852844 - 0.0817629173398018 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -4.7089671716094017e-003 - -0.1335121989250183 - 0.0562960803508759 - <_> - - <_> - - - - <_>18 1 2 13 -1. - <_>18 1 1 13 2. - 0 - -0.0326880700886250 - 0.2792238891124725 - -0.0108676599338651 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - 0.0886861979961395 - 0.0182682201266289 - -0.3563739061355591 - <_> - - <_> - - - - <_>14 2 4 10 -1. - <_>14 2 2 10 2. - 0 - 4.5751677826046944e-003 - -0.0515584610402584 - 0.0639488101005554 - <_> - - <_> - - - - <_>0 3 4 16 -1. - <_>0 3 2 8 2. - <_>2 11 2 8 2. - 0 - 4.9765850417315960e-003 - -0.0546845905482769 - 0.1190711036324501 - <_> - - <_> - - - - <_>6 0 10 6 -1. - <_>11 0 5 3 2. - <_>6 3 5 3 2. - 0 - -6.4881290309131145e-003 - -0.0991211235523224 - 0.0265088491141796 - <_> - - <_> - - - - <_>1 14 10 6 -1. - <_>1 14 5 3 2. - <_>6 17 5 3 2. - 0 - 2.4523450993001461e-003 - -0.0950459465384483 - 0.0668029263615608 - <_> - - <_> - - - - <_>8 7 5 9 -1. - <_>8 10 5 3 3. - 0 - 7.0354789495468140e-003 - 0.1070559024810791 - -0.0623950995504856 - <_> - - <_> - - - - <_>2 2 4 10 -1. - <_>4 2 2 10 2. - 0 - 0.0427467897534370 - -0.0160921793431044 - 0.4325619935989380 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - -4.5301730278879404e-004 - 0.0364205688238144 - -0.0993228927254677 - <_> - - <_> - - - - <_>5 6 10 12 -1. - <_>5 6 5 6 2. - <_>10 12 5 6 2. - 0 - -5.2631930448114872e-003 - -0.1141674965620041 - 0.0572602190077305 - <_> - - <_> - - - - <_>9 2 4 12 -1. - <_>9 6 4 4 3. - 0 - 1.0581909446045756e-003 - 0.0332204885780811 - -0.1183122023940086 - <_> - - <_> - - - - <_>2 0 15 6 -1. - <_>2 3 15 3 2. - 0 - 0.0250889491289854 - -0.0606550201773643 - 0.1260174065828323 - <_> - - <_> - - - - <_>6 0 13 8 -1. - <_>6 4 13 4 2. - 0 - 0.2425215989351273 - 2.2060840856283903e-003 - -1.0000120401382446 - <_> - - <_> - - - - <_>1 0 13 8 -1. - <_>1 4 13 4 2. - 0 - -0.1439307928085327 - 0.3741979897022247 - -0.0222521107643843 - <_> - - <_> - - - - <_>11 4 2 14 -1. - <_>11 11 2 7 2. - 0 - -6.0972762294113636e-003 - -0.1103809997439385 - 0.0459969602525234 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - 6.1375470831990242e-003 - 0.0383078083395958 - -0.1808677017688751 - <_> - - <_> - - - - <_>8 5 6 10 -1. - <_>11 5 3 5 2. - <_>8 10 3 5 2. - 0 - -3.6617079749703407e-003 - 0.0384399183094502 - -0.0625407919287682 - <_> - - <_> - - - - <_>4 8 10 12 -1. - <_>9 8 5 12 2. - 0 - -0.1585485041141510 - 0.3446939885616303 - -0.0198375005275011 - <_> - - <_> - - - - <_>8 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 0.0672192871570587 - 9.5165139064192772e-003 - -0.5020645856857300 - <_> - - <_> - - - - <_>6 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 2.2499680053442717e-003 - -0.1306392997503281 - 0.0648329332470894 - <_> - - <_> - - - - <_>13 0 6 7 -1. - <_>15 0 2 7 3. - 0 - 0.0846267864108086 - 5.9339799918234348e-003 - -0.4151659011840820 - <_> - - <_> - - - - <_>1 0 6 7 -1. - <_>3 0 2 7 3. - 0 - -9.5411221263930202e-004 - -0.0937907472252846 - 0.0754866078495979 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -7.6813949272036552e-003 - -0.1482196003198624 - 0.0290105808526278 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - -0.0255933199077845 - 0.1485957950353622 - -0.0471959300339222 - <_> - - <_> - - - - <_>6 7 12 8 -1. - <_>10 7 4 8 3. - 0 - 0.0215083695948124 - 0.0237826202064753 - -0.0966592878103256 - <_> - - <_> - - - - <_>0 14 18 5 -1. - <_>6 14 6 5 3. - 0 - 0.0344631001353264 - -0.0374100692570210 - 0.2201530039310455 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>10 13 10 2 2. - <_>0 15 10 2 2. - 0 - -0.0378603003919125 - -0.5004746913909912 - 0.0140598695725203 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 1.2028450146317482e-003 - -0.0650870576500893 - 0.0895834863185883 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - 0.0167535208165646 - 4.9179811030626297e-003 - -0.4303090870380402 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 1.6640779795125127e-003 - 0.0408074297010899 - -0.1446996033191681 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 3.4473428968340158e-003 - -0.0399101786315441 - 0.1527296006679535 - <_> - - <_> - - - - <_>0 8 8 6 -1. - <_>0 10 8 2 3. - 0 - 8.9918142184615135e-003 - 0.0710712671279907 - -0.0861699134111404 - <_> - - <_> - - - - <_>4 8 15 2 -1. - <_>4 9 15 1 2. - 0 - 8.3185202674940228e-004 - -0.2573918998241425 - 0.0179410893470049 - <_> - - <_> - - - - <_>0 9 6 5 -1. - <_>3 9 3 5 2. - 0 - -6.8142730742692947e-003 - 0.1382316052913666 - -0.0539945401251316 - <_> - - <_> - - - - <_>13 9 6 5 -1. - <_>13 9 3 5 2. - 0 - 2.9746210202574730e-003 - -0.0415502600371838 - 0.0398397706449032 - <_> - - <_> - - - - <_>1 9 6 5 -1. - <_>4 9 3 5 2. - 0 - 2.5836620479822159e-003 - -0.0706564933061600 - 0.0950455069541931 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 2.7143809711560607e-004 - 0.0580700710415840 - -0.1278176009654999 - <_> - - <_> - - - - <_>0 0 14 19 -1. - <_>7 0 7 19 2. - 0 - 0.3541829884052277 - 5.4909070022404194e-003 - -0.9796069860458374 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 0.0253186505287886 - -0.0144109698012471 - 0.2621912956237793 - <_> - - <_> - - - - <_>3 0 4 14 -1. - <_>3 0 2 7 2. - <_>5 7 2 7 2. - 0 - -2.2658439411316067e-004 - 0.0529978498816490 - -0.1162934973835945 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - 6.8859090097248554e-003 - 0.0164373107254505 - -0.2034949064254761 - <_> - - <_> - - - - <_>2 4 14 3 -1. - <_>2 5 14 1 3. - 0 - 0.0116074597463012 - -0.0366510115563869 - 0.1518401056528091 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - -4.8253959976136684e-003 - -0.2347615063190460 - 0.0379140116274357 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 2.5656020734459162e-003 - 0.0351856388151646 - -0.1854071021080017 - <_> - - <_> - - - - <_>6 2 14 18 -1. - <_>13 2 7 9 2. - <_>6 11 7 9 2. - 0 - 0.1260139942169190 - -9.8542850464582443e-003 - 0.2552069127559662 - <_> - - <_> - - - - <_>5 9 9 6 -1. - <_>5 12 9 3 2. - 0 - 2.7164958883076906e-003 - -0.0217484403401613 - 0.2546752989292145 - <_> - - <_> - - - - <_>0 1 20 18 -1. - <_>10 1 10 9 2. - <_>0 10 10 9 2. - 0 - 0.3235602974891663 - 8.8657345622777939e-003 - -0.7038357257843018 - <_> - - <_> - - - - <_>4 10 7 4 -1. - <_>4 12 7 2 2. - 0 - -8.4016058826819062e-004 - 0.0368313603103161 - -0.1495326012372971 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 3.3291990403085947e-003 - 0.0481858402490616 - -0.1229047030210495 - <_> - - <_> - - - - <_>1 0 14 12 -1. - <_>1 4 14 4 3. - 0 - 0.2113053947687149 - 6.5245870500802994e-003 - -0.8829386234283447 - <_> - - <_> - - - - <_>9 0 6 8 -1. - <_>9 0 3 8 2. - 0 - 5.0388509407639503e-003 - -0.0670799463987350 - 0.0378497093915939 - <_> - - <_> - - - - <_>4 2 12 5 -1. - <_>8 2 4 5 3. - 0 - -0.0278623998165131 - 0.3346948921680450 - -0.0188165009021759 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - 3.8636629469692707e-003 - 0.0436447300016880 - -0.1748148947954178 - <_> - - <_> - - - - <_>4 0 8 10 -1. - <_>8 0 4 10 2. - 0 - 0.1048030033707619 - -0.0157375298440456 - 0.4209423959255219 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -3.4130848944187164e-003 - -0.1083557009696960 - 0.0437177903950214 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0463969707489014 - -0.7568007707595825 - 8.6701400578022003e-003 - <_> - - <_> - - - - <_>9 2 2 13 -1. - <_>9 2 1 13 2. - 0 - 5.3708078339695930e-003 - -0.0417978018522263 - 0.1482471972703934 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -6.1126388609409332e-003 - 0.1867371946573257 - -0.0433874912559986 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0425093211233616 - 0.0116906799376011 - -0.4374065995216370 - <_> - - <_> - - - - <_>0 4 18 10 -1. - <_>0 4 9 5 2. - <_>9 9 9 5 2. - 0 - 0.0104730203747749 - 0.0431436300277710 - -0.1565439999103546 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - -0.0472239591181278 - -0.7448353767395020 - 3.4918629098683596e-003 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - 0.0530903600156307 - 0.0104081500321627 - -0.5349944829940796 - <_> - - <_> - - - - <_>4 3 16 6 -1. - <_>12 3 8 3 2. - <_>4 6 8 3 2. - 0 - -7.0432561915367842e-004 - 0.0333841703832150 - -0.0737060308456421 - <_> - - <_> - - - - <_>3 4 5 9 -1. - <_>3 7 5 3 3. - 0 - 7.5942431576550007e-003 - -0.0291070491075516 - 0.1946886032819748 - <_> - - <_> - - - - <_>8 4 12 5 -1. - <_>12 4 4 5 3. - 0 - 0.0226769894361496 - 0.0338038206100464 - -0.2762761116027832 - <_> - - <_> - - - - <_>3 9 8 4 -1. - <_>3 11 8 2 2. - 0 - 6.6533521749079227e-003 - -0.0265782400965691 - 0.2428331971168518 - <_> - - <_> - - - - <_>11 0 2 15 -1. - <_>11 0 1 15 2. - 0 - 3.7712270859628916e-003 - 0.0265542995184660 - -0.0649529173970222 - <_> - - <_> - - - - <_>7 0 2 15 -1. - <_>8 0 1 15 2. - 0 - -2.0740530453622341e-003 - -0.1796897053718567 - 0.0315321609377861 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -1.5632519498467445e-003 - 0.0531096793711185 - -0.0874156281352043 - <_> - - <_> - - - - <_>8 3 4 8 -1. - <_>10 3 2 8 2. - 0 - 0.0125408899039030 - -0.0341364592313766 - 0.2209753990173340 - <_> - - <_> - - - - <_>9 13 6 7 -1. - <_>11 13 2 7 3. - 0 - -3.2660199794918299e-003 - -0.0552616082131863 - 0.0326695591211319 - <_> - - <_> - - - - <_>4 14 9 5 -1. - <_>7 14 3 5 3. - 0 - -8.2185603678226471e-003 - -0.1447837948799133 - 0.0557439289987087 - <_> - - <_> - - - - <_>15 3 4 17 -1. - <_>15 3 2 17 2. - 0 - -0.0558110401034355 - 0.1723794043064117 - -0.0144565198570490 - <_> - - <_> - - - - <_>1 6 4 13 -1. - <_>3 6 2 13 2. - 0 - -0.1472315937280655 - -0.8139231204986572 - 7.4356291443109512e-003 - <_> - - <_> - - - - <_>11 12 4 7 -1. - <_>11 12 2 7 2. - 0 - -5.8468529023230076e-003 - -0.0690434426069260 - 0.0194567907601595 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>2 1 2 7 3. - 0 - 0.0194622203707695 - -0.0354722291231155 - 0.1666630059480667 - <_> - - <_> - - - - <_>9 12 6 7 -1. - <_>11 12 2 7 3. - 0 - 0.0583534687757492 - 3.0551329255104065e-003 - -0.3928912878036499 - <_> - - <_> - - - - <_>5 12 6 7 -1. - <_>7 12 2 7 3. - 0 - 0.0437858290970325 - 0.0135746300220490 - -0.4615235924720764 - <_> - - <_> - - - - <_>7 7 6 8 -1. - <_>9 7 2 8 3. - 0 - -0.0519043505191803 - 0.6380243897438049 - -9.6664745360612869e-003 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - -7.7811058145016432e-004 - -0.0993032231926918 - 0.0560946017503738 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 4.9657518975436687e-003 - 0.0414193682372570 - -0.1127481982111931 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -5.4516079835593700e-003 - 0.1739906072616577 - -0.0411477312445641 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 5.0428751856088638e-003 - -0.0412552207708359 - 0.1379422992467880 - <_> - - <_> - - - - <_>2 9 14 3 -1. - <_>2 10 14 1 3. - 0 - -1.6985220136120915e-003 - -0.2287479043006897 - 0.0252749808132648 - <_> - - <_> - - - - <_>8 7 7 4 -1. - <_>8 9 7 2 2. - 0 - 0.0827642381191254 - 3.3066510222852230e-003 - -0.6911343932151794 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 3.9285849779844284e-003 - -0.0790433585643768 - 0.0662188529968262 - <_> - - <_> - - - - <_>13 12 5 6 -1. - <_>13 15 5 3 2. - 0 - -0.0306012406945229 - -0.2651745080947876 - 0.0164678506553173 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0199411604553461 - 0.1543180942535400 - -0.0361006893217564 - <_> - - <_> - - - - <_>4 5 16 3 -1. - <_>4 5 8 3 2. - 0 - 0.0805200636386871 - 0.0170159190893173 - -0.3344888091087341 - <_> - - <_> - - - - <_>5 3 4 14 -1. - <_>5 10 4 7 2. - 0 - 0.0703238472342491 - 0.0171224400401115 - -0.3330214023590088 - <_> - - <_> - - - - <_>4 13 15 5 -1. - <_>9 13 5 5 3. - 0 - -0.0528509393334389 - 0.0624214000999928 - -0.0146901998668909 - <_> - - <_> - - - - <_>0 3 14 2 -1. - <_>0 4 14 1 2. - 0 - -7.1594159817323089e-004 - -0.1133515015244484 - 0.0522607900202274 - <_> - - <_> - - - - <_>4 13 15 5 -1. - <_>9 13 5 5 3. - 0 - 0.2146997004747391 - 9.9299731664359570e-004 - -0.9999758005142212 - <_> - - <_> - - - - <_>1 13 15 5 -1. - <_>6 13 5 5 3. - 0 - 0.0870425924658775 - -0.0123297600075603 - 0.5026066899299622 - <_> - - <_> - - - - <_>12 0 8 6 -1. - <_>12 2 8 2 3. - 0 - -5.8731262106448412e-004 - -0.0993464663624763 - 0.0517056100070477 - <_> - - <_> - - - - <_>3 10 6 5 -1. - <_>6 10 3 5 2. - 0 - -0.0442152209579945 - -0.3936890065670013 - 0.0139208501204848 - <_> - - <_> - - - - <_>4 7 14 8 -1. - <_>11 7 7 4 2. - <_>4 11 7 4 2. - 0 - -0.0876762270927429 - 0.3015744090080261 - -6.8702381104230881e-003 - <_> - - <_> - - - - <_>2 7 14 8 -1. - <_>2 7 7 4 2. - <_>9 11 7 4 2. - 0 - -0.0484539903700352 - 0.2547787129878998 - -0.0224577505141497 - <_> - - <_> - - - - <_>11 0 2 20 -1. - <_>11 0 1 20 2. - 0 - -2.1567570511251688e-003 - -0.1356289982795715 - 0.0317253991961479 - <_> - - <_> - - - - <_>7 0 2 20 -1. - <_>8 0 1 20 2. - 0 - 3.9050900377333164e-003 - 0.0491008907556534 - -0.1186105981469154 - <_> - - <_> - - - - <_>10 5 6 8 -1. - <_>12 5 2 8 3. - 0 - -3.9808028377592564e-003 - 0.0483339093625546 - -0.0558970794081688 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - 2.9744929634034634e-003 - -0.0648024529218674 - 0.0935835018754005 - <_> - - <_> - - - - <_>3 2 14 4 -1. - <_>10 2 7 2 2. - <_>3 4 7 2 2. - 0 - 0.0258752293884754 - 0.0184876099228859 - -0.3343634903430939 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - -1.9373580580577254e-003 - 0.2200064957141876 - -0.0254049804061651 - <_> - - <_> - - - - <_>8 4 9 16 -1. - <_>11 4 3 16 3. - 0 - -0.0201716292649508 - -0.0782283097505569 - 0.0454627908766270 - <_> - - <_> - - - - <_>4 5 6 8 -1. - <_>6 5 2 8 3. - 0 - -0.0260881409049034 - 0.1763706952333450 - -0.0450972989201546 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 5 2. - <_>7 15 3 5 2. - 0 - -0.0268683005124331 - -0.3265641927719116 - 0.0179942306131125 - <_> - - <_> - - - - <_>5 11 5 6 -1. - <_>5 14 5 3 2. - 0 - -7.0211151614785194e-004 - 0.0396719984710217 - -0.1453354060649872 - <_> - - <_> - - - - <_>4 8 13 8 -1. - <_>4 12 13 4 2. - 0 - 8.3507681265473366e-003 - -0.0230517294257879 - 0.1885076016187668 - <_> - - <_> - - - - <_>0 9 10 6 -1. - <_>0 9 5 3 2. - <_>5 12 5 3 2. - 0 - 4.6823569573462009e-003 - 0.0299965608865023 - -0.2070102989673615 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 3.3109660726040602e-003 - 0.0565367303788662 - -0.1683558970689774 - <_> - - <_> - - - - <_>4 0 5 8 -1. - <_>4 4 5 4 2. - 0 - 7.6425541192293167e-003 - -0.0414239503443241 - 0.1255751997232437 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>8 6 4 5 2. - 0 - -2.4713110178709030e-003 - 0.0721561536192894 - -0.1076773032546043 - <_> - - <_> - - - - <_>6 3 7 10 -1. - <_>6 8 7 5 2. - 0 - -9.9495360627770424e-003 - -0.1818761974573135 - 0.0335672311484814 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 1.9820800516754389e-003 - -0.0564887188374996 - 0.1074149012565613 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - 0.0232544392347336 - -0.0165433492511511 - 0.3646667897701263 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - -0.0541779212653637 - -1. - 3.3418419770896435e-003 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - 6.1567849479615688e-004 - 0.0401593297719955 - -0.1646022051572800 - <_> - - <_> - - - - <_>9 12 9 4 -1. - <_>9 14 9 2 2. - 0 - -4.2699510231614113e-003 - -0.0569786205887794 - 0.0444809012115002 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 12 8 2 2. - <_>10 14 8 2 2. - 0 - 1.9749389030039310e-003 - 0.0592836812138557 - -0.1079126000404358 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>15 14 5 3 2. - <_>10 17 5 3 2. - 0 - -5.8583128266036510e-003 - 0.1373405009508133 - -0.0342315211892128 - <_> - - <_> - - - - <_>4 1 8 8 -1. - <_>4 1 4 4 2. - <_>8 5 4 4 2. - 0 - -7.2995189111679792e-004 - -0.1007506027817726 - 0.0547331608831882 - <_> - - <_> - - - - <_>2 12 18 7 -1. - <_>8 12 6 7 3. - 0 - -0.0299307405948639 - 0.0638825595378876 - -0.0410270206630230 - <_> - - <_> - - - - <_>3 13 12 6 -1. - <_>3 13 6 3 2. - <_>9 16 6 3 2. - 0 - -0.0517387501895428 - -0.7271345853805542 - 7.4993381276726723e-003 - <_> - - <_> - - - - <_>4 12 13 4 -1. - <_>4 14 13 2 2. - 0 - 0.0240211896598339 - 7.8491801396012306e-003 - -0.5579447150230408 - <_> - - <_> - - - - <_>6 0 2 15 -1. - <_>7 0 1 15 2. - 0 - -3.7574321031570435e-003 - -0.1608687937259674 - 0.0310159903019667 - <_> - - <_> - - - - <_>4 2 16 18 -1. - <_>12 2 8 9 2. - <_>4 11 8 9 2. - 0 - -0.0626356825232506 - 0.0905778631567955 - -0.0290337707847357 - <_> - - <_> - - - - <_>1 16 18 4 -1. - <_>7 16 6 4 3. - 0 - 0.0193634293973446 - -0.0499205887317657 - 0.1283577978610992 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0350728891789913 - 0.2139184027910233 - -8.8168960064649582e-003 - <_> - - <_> - - - - <_>4 0 12 9 -1. - <_>8 0 4 9 3. - 0 - -0.0132433101534843 - 0.2334969937801361 - -0.0230880193412304 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -0.0312908291816711 - -0.6949509978294373 - 9.3020889908075333e-003 - <_> - - <_> - - - - <_>4 9 6 6 -1. - <_>7 9 3 6 2. - 0 - 7.2391419671475887e-003 - 0.0284858494997025 - -0.1831077039241791 - <_> - - <_> - - - - <_>7 12 12 8 -1. - <_>13 12 6 4 2. - <_>7 16 6 4 2. - 0 - 6.6785318776965141e-003 - -0.0491329506039619 - 0.0541816912591457 - <_> - - <_> - - - - <_>1 12 12 8 -1. - <_>1 12 6 4 2. - <_>7 16 6 4 2. - 0 - -0.0368255712091923 - 0.3312020897865295 - -0.0213599298149347 - <_> - - <_> - - - - <_>0 10 20 9 -1. - <_>0 13 20 3 3. - 0 - -0.0455073416233063 - -0.1289349049329758 - 0.0495459884405136 - <_> - - <_> - - - - <_>4 5 10 6 -1. - <_>4 5 5 3 2. - <_>9 8 5 3 2. - 0 - 7.7639957889914513e-003 - -0.0362556204199791 - 0.1532140970230103 - <_> - - <_> - - - - <_>13 3 7 6 -1. - <_>13 5 7 2 3. - 0 - 0.0604176111519337 - 4.5740022324025631e-003 - -0.6754109263420105 - <_> - - <_> - - - - <_>8 1 4 14 -1. - <_>8 1 2 7 2. - <_>10 8 2 7 2. - 0 - 2.4624960497021675e-003 - 0.0536741614341736 - -0.1132654026150703 - <_> - - <_> - - - - <_>12 8 5 6 -1. - <_>12 11 5 3 2. - 0 - 7.3594506829977036e-005 - -0.0356489308178425 - 0.0254589691758156 - <_> - - <_> - - - - <_>3 8 5 6 -1. - <_>3 11 5 3 2. - 0 - -4.0958370082080364e-003 - 0.1556290984153748 - -0.0393906012177467 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 2.8689370083156973e-005 - -0.0848233029246330 - 0.0382542386651039 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -4.6220528893172741e-003 - -0.1899452954530716 - 0.0335087589919567 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>8 0 6 4 3. - 0 - -8.5343196988105774e-003 - 0.1121253967285156 - -0.0339684896171093 - <_> - - <_> - - - - <_>6 5 3 14 -1. - <_>6 12 3 7 2. - 0 - -0.0588038489222527 - -0.5124431252479553 - 0.0107895499095321 - <_> - - <_> - - - - <_>5 17 15 3 -1. - <_>10 17 5 3 3. - 0 - 0.0607199296355248 - -0.0125550301745534 - 0.2250975966453552 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>6 0 3 7 2. - 0 - 1.1038020020350814e-003 - -0.0962944924831390 - 0.0567274801433086 - <_> - - <_> - - - - <_>8 3 12 17 -1. - <_>8 3 6 17 2. - 0 - -3.8484560791403055e-003 - 0.0405734591186047 - -0.0253268592059612 - <_> - - <_> - - - - <_>0 2 16 12 -1. - <_>8 2 8 12 2. - 0 - -0.0107710501179099 - 0.0887356325984001 - -0.0556286796927452 - <_> - - <_> - - - - <_>7 6 6 12 -1. - <_>7 12 6 6 2. - 0 - 0.0120168095454574 - 0.0235662795603275 - -0.2459058016538620 - <_> - - <_> - - - - <_>8 8 4 8 -1. - <_>8 12 4 4 2. - 0 - -1.1656560236588120e-003 - -0.0374173000454903 - 0.1650328934192658 - <_> - - <_> - - - - <_>8 7 12 10 -1. - <_>14 7 6 5 2. - <_>8 12 6 5 2. - 0 - 0.0321376286447048 - 0.0142459701746702 - -0.2648085057735443 - <_> - - <_> - - - - <_>4 1 12 5 -1. - <_>10 1 6 5 2. - 0 - 0.0233316700905561 - -0.0352887213230133 - 0.1844782978296280 - <_> - - <_> - - - - <_>7 2 8 8 -1. - <_>11 2 4 4 2. - <_>7 6 4 4 2. - 0 - -0.0126853203400970 - -0.1175730973482132 - 0.0164369102567434 - <_> - - <_> - - - - <_>5 2 8 8 -1. - <_>5 2 4 4 2. - <_>9 6 4 4 2. - 0 - 7.3903938755393028e-005 - -0.1027147993445396 - 0.0743014365434647 - <_> - - <_> - - - - <_>3 14 14 6 -1. - <_>3 17 14 3 2. - 0 - -0.1092547029256821 - -0.8316531777381897 - 5.6438110768795013e-003 - <_> - - <_> - - - - <_>3 3 5 12 -1. - <_>3 7 5 4 3. - 0 - -0.1332435011863709 - 0.7772982120513916 - -8.3403270691633224e-003 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 7 5 3 2. - 0 - 8.9381448924541473e-004 - -0.0595243014395237 - 0.0411730892956257 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 0.0103186499327421 - 0.0159264300018549 - -0.3163779079914093 - <_> - - <_> - - - - <_>15 4 5 9 -1. - <_>15 7 5 3 3. - 0 - -5.2297548390924931e-003 - -0.0711665600538254 - 0.0334892906248569 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>8 6 2 7 2. - <_>10 13 2 7 2. - 0 - 0.0164096206426620 - -0.0264541208744049 - 0.1958996951580048 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0140687096863985 - -0.0393641404807568 - 0.1397742033004761 - <_> - - <_> - - - - <_>5 0 8 10 -1. - <_>5 0 4 5 2. - <_>9 5 4 5 2. - 0 - 6.6486410796642303e-003 - 0.0640708282589912 - -0.1049339994788170 - <_> - - <_> - - - - <_>9 12 6 7 -1. - <_>11 12 2 7 3. - 0 - -0.0180306192487478 - 0.0839429125189781 - -0.0133991595357656 - <_> - - <_> - - - - <_>5 12 6 7 -1. - <_>7 12 2 7 3. - 0 - -0.0440343692898750 - -0.5582545995712280 - 9.7633162513375282e-003 - <_> - - <_> - - - - <_>13 9 7 6 -1. - <_>13 11 7 2 3. - 0 - -8.0966893583536148e-003 - -0.2048978954553604 - 0.0265202000737190 - <_> - - <_> - - - - <_>1 1 16 6 -1. - <_>1 3 16 2 3. - 0 - 5.0180461257696152e-003 - -0.1166120991110802 - 0.0457916706800461 - <_> - - <_> - - - - <_>2 1 17 6 -1. - <_>2 3 17 2 3. - 0 - -0.0170646291226149 - 0.2628273069858551 - -0.0203906390815973 - <_> - - <_> - - - - <_>4 4 2 16 -1. - <_>4 12 2 8 2. - 0 - 0.0718501731753349 - -6.9503681734204292e-003 - 0.6703253984451294 - <_> - - <_> - - - - <_>7 6 10 14 -1. - <_>12 6 5 7 2. - <_>7 13 5 7 2. - 0 - -0.0569143705070019 - -0.1347790062427521 - 0.0183990802615881 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -3.2365729566663504e-003 - 0.0696738511323929 - -0.0723145306110382 - <_> - - <_> - - - - <_>4 9 12 6 -1. - <_>10 9 6 3 2. - <_>4 12 6 3 2. - 0 - 0.0418189093470573 - 0.0111514599993825 - -0.5168011188507080 - <_> - - <_> - - - - <_>1 8 18 3 -1. - <_>7 8 6 3 3. - 0 - -6.1106588691473007e-003 - -0.1316394060850143 - 0.0437965095043182 - <_> - - <_> - - - - <_>2 13 18 7 -1. - <_>8 13 6 7 3. - 0 - -0.0355609096586704 - 0.0680055022239685 - -0.0363310202956200 - <_> - - <_> - - - - <_>1 8 15 3 -1. - <_>6 8 5 3 3. - 0 - 0.0687891691923141 - 0.0146989598870277 - -0.3821229934692383 - <_> - - <_> - - - - <_>6 0 12 7 -1. - <_>10 0 4 7 3. - 0 - -0.0783133730292320 - 0.2029606997966766 - -8.6810020729899406e-003 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 3.9626220241189003e-003 - -0.0357978902757168 - 0.1390551030635834 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - -0.0338740386068821 - -0.2225342988967896 - 7.5455638580024242e-003 - <_> - - <_> - - - - <_>6 7 6 8 -1. - <_>6 11 6 4 2. - 0 - -0.0647558569908142 - 0.4752154946327210 - -0.0109706800431013 - <_> - - <_> - - - - <_>9 2 4 12 -1. - <_>9 6 4 4 3. - 0 - 0.0266479402780533 - 0.0154453096911311 - -0.2678577899932861 - <_> - - <_> - - - - <_>0 9 7 6 -1. - <_>0 11 7 2 3. - 0 - -0.0307311099022627 - -0.4766868948936462 - 9.6429884433746338e-003 - <_> - - <_> - - - - <_>15 4 5 9 -1. - <_>15 7 5 3 3. - 0 - -0.0240227002650499 - -0.1063396036624908 - 0.0128490403294563 - <_> - - <_> - - - - <_>2 18 13 2 -1. - <_>2 19 13 1 2. - 0 - -1.3036349555477500e-003 - 0.0735241770744324 - -0.0680749192833900 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -9.8344050347805023e-003 - -0.1184355020523071 - 0.0428666993975639 - <_> - - <_> - - - - <_>6 6 8 12 -1. - <_>6 10 8 4 3. - 0 - 0.0871021971106529 - -0.0400882586836815 - 0.1780454069375992 - <_> - - <_> - - - - <_>7 9 6 9 -1. - <_>7 12 6 3 3. - 0 - 0.0204115696251392 - 0.0168499890714884 - -0.3895365893840790 - <_> - - <_> - - - - <_>0 7 11 4 -1. - <_>0 9 11 2 2. - 0 - 0.0958752632141113 - 5.9905550442636013e-003 - -0.8152565956115723 - <_> - - <_> - - - - <_>8 12 10 6 -1. - <_>13 12 5 3 2. - <_>8 15 5 3 2. - 0 - 6.4893220551311970e-003 - -0.0240392293781042 - 0.0538711696863174 - <_> - - <_> - - - - <_>2 12 10 6 -1. - <_>2 12 5 3 2. - <_>7 15 5 3 2. - 0 - -9.6279237186536193e-004 - 0.0942991897463799 - -0.0644360184669495 - <_> - - <_> - - - - <_>12 14 8 6 -1. - <_>12 16 8 2 3. - 0 - -3.7659960798919201e-004 - -0.0622968785464764 - 0.0412518493831158 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - 6.5272641368210316e-003 - 0.0513251312077045 - -0.1303779035806656 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - 0.0214291103184223 - -0.0119896596297622 - 0.2628045976161957 - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - -5.0938720814883709e-003 - 0.0634189471602440 - -0.0905663371086121 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - -2.5309680495411158e-003 - 0.0602977611124516 - -0.0250494703650475 - <_> - - <_> - - - - <_>7 6 4 8 -1. - <_>7 10 4 4 2. - 0 - -1.5915350522845984e-003 - -0.1217119023203850 - 0.0377379916608334 - <_> - - <_> - - - - <_>9 8 11 4 -1. - <_>9 10 11 2 2. - 0 - -0.0340307094156742 - 0.4641343057155609 - -3.5409750416874886e-003 - <_> - - <_> - - - - <_>6 6 5 10 -1. - <_>6 11 5 5 2. - 0 - 5.1074200309813023e-003 - 0.0398238301277161 - -0.1264553964138031 - <_> - - <_> - - - - <_>4 7 14 6 -1. - <_>4 9 14 2 3. - 0 - -9.6449116244912148e-003 - 0.3346425890922546 - -6.6040740348398685e-003 - <_> - - <_> - - - - <_>4 4 12 8 -1. - <_>4 4 6 4 2. - <_>10 8 6 4 2. - 0 - 0.0114228604361415 - -0.0360804200172424 - 0.1371455043554306 - <_> - - <_> - - - - <_>5 5 12 5 -1. - <_>5 5 6 5 2. - 0 - -5.1042139530181885e-003 - -0.0939868092536926 - 0.0288447793573141 - <_> - - <_> - - - - <_>1 3 15 12 -1. - <_>6 3 5 12 3. - 0 - -0.2633227109909058 - 0.4998092949390411 - -0.0101732499897480 - <_> - - <_> - - - - <_>13 3 6 17 -1. - <_>13 3 3 17 2. - 0 - -0.2455663979053497 - -0.8177834749221802 - 6.9596339017152786e-003 - <_> - - <_> - - - - <_>1 3 6 17 -1. - <_>4 3 3 17 2. - 0 - -0.2141932994127274 - -0.5104051828384399 - 9.4540230929851532e-003 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>14 4 6 3 3. - 0 - -0.0143632199615240 - -0.0910009816288948 - 0.0246466696262360 - <_> - - <_> - - - - <_>4 0 8 6 -1. - <_>4 3 8 3 2. - 0 - -1.2388969771564007e-003 - 0.1154457032680512 - -0.0495656207203865 - <_> - - <_> - - - - <_>5 4 15 3 -1. - <_>5 5 15 1 3. - 0 - 0.0210151206701994 - -0.0177658796310425 - 0.1957785934209824 - <_> - - <_> - - - - <_>0 5 8 4 -1. - <_>0 7 8 2 2. - 0 - -4.1783051565289497e-003 - -0.1117286011576653 - 0.0446254499256611 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - 2.0896939095109701e-003 - -0.0339887291193008 - 0.0655395016074181 - <_> - - <_> - - - - <_>0 2 2 13 -1. - <_>1 2 1 13 2. - 0 - 0.0164100602269173 - -0.0203732699155808 - 0.2533153891563416 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -0.0642668828368187 - -0.6588014960289002 - 3.4550630953162909e-003 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - 6.8898178869858384e-004 - 0.0676432475447655 - -0.0875562429428101 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 5.6662331335246563e-003 - 0.0306383091956377 - -0.1189554035663605 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0437781214714050 - -0.2830913066864014 - 0.0177136305719614 - <_> - - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 3.4748481120914221e-003 - -0.0957871228456497 - 0.0426304005086422 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 14 16 2 2. - 0 - -0.0116739403456450 - -0.1050257012248039 - 0.0509038902819157 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - -3.4004659391939640e-003 - 0.1047071963548660 - -0.0409391410648823 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 2.7091780211776495e-003 - -0.0605246014893055 - 0.1397895067930222 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - -0.0174393001943827 - -0.3239116966724396 - 0.0146302497014403 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -0.0125983301550150 - -0.2068262994289398 - 0.0255018696188927 - <_> - - <_> - - - - <_>6 2 8 6 -1. - <_>6 4 8 2 3. - 0 - 0.0187558699399233 - -0.0479259602725506 - 0.1086438000202179 - <_> - - <_> - - - - <_>6 5 7 4 -1. - <_>6 7 7 2 2. - 0 - -4.2074159719049931e-003 - -0.0820778086781502 - 0.0636477693915367 - <_> - - <_> - - - - <_>9 5 10 9 -1. - <_>9 8 10 3 3. - 0 - -1.6427719674538821e-004 - 0.1012039035558701 - -0.0340679287910461 - <_> - - <_> - - - - <_>0 10 18 4 -1. - <_>0 10 9 2 2. - <_>9 12 9 2 2. - 0 - 0.0438476912677288 - 6.0980222187936306e-003 - -0.8368598222732544 - <_> - - <_> - - - - <_>8 7 6 9 -1. - <_>10 7 2 9 3. - 0 - -0.0392846800386906 - 0.2825056016445160 - -0.0223892591893673 - <_> - - <_> - - - - <_>6 4 4 7 -1. - <_>8 4 2 7 2. - 0 - 0.0385509096086025 - 0.0155704896897078 - -0.3397862017154694 - <_> - - <_> - - - - <_>9 6 9 10 -1. - <_>12 6 3 10 3. - 0 - -0.0691770315170288 - 0.1225832030177116 - -0.0178501792252064 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -1.9251030171290040e-003 - -0.1068774983286858 - 0.0463795103132725 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>15 14 5 3 2. - <_>10 17 5 3 2. - 0 - -8.6635202169418335e-003 - 0.0964127480983734 - -0.0175632499158382 - <_> - - <_> - - - - <_>0 6 5 12 -1. - <_>0 10 5 4 3. - 0 - 0.1339350938796997 - 6.3692941330373287e-003 - -0.7017058730125427 - <_> - - <_> - - - - <_>9 6 9 10 -1. - <_>12 6 3 10 3. - 0 - 0.0410823486745358 - -0.0110775697976351 - 0.1346375048160553 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1491145044565201 - 9.5263421535491943e-003 - -0.5087255239486694 - <_> - - <_> - - - - <_>6 13 10 7 -1. - <_>6 13 5 7 2. - 0 - -5.2500818856060505e-003 - 0.0700255781412125 - -0.0428802706301212 - <_> - - <_> - - - - <_>0 2 6 17 -1. - <_>3 2 3 17 2. - 0 - 0.0228235702961683 - -0.0418840497732162 - 0.1177031993865967 - <_> - - <_> - - - - <_>10 14 9 5 -1. - <_>13 14 3 5 3. - 0 - -8.5306530818343163e-003 - 0.0612221397459507 - -0.0249445494264364 - <_> - - <_> - - - - <_>1 14 9 5 -1. - <_>4 14 3 5 3. - 0 - 0.0119717298075557 - 0.0396627709269524 - -0.1626774072647095 - <_> - - <_> - - - - <_>7 13 7 6 -1. - <_>7 15 7 2 3. - 0 - -0.0389382690191269 - 0.2574352025985718 - -0.0163562390953302 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -0.0217063892632723 - -0.3199867904186249 - 0.0171352904289961 - <_> - - <_> - - - - <_>12 10 8 6 -1. - <_>12 12 8 2 3. - 0 - 6.6900630481541157e-003 - 0.0261018499732018 - -0.1098072975873947 - <_> - - <_> - - - - <_>2 6 9 9 -1. - <_>5 6 3 9 3. - 0 - -0.0722708329558373 - 0.1943113058805466 - -0.0260443594306707 - <_> - - <_> - - - - <_>12 10 7 6 -1. - <_>12 12 7 2 3. - 0 - -6.7073688842356205e-003 - -0.1774785071611404 - 0.0458629988133907 - <_> - - <_> - - - - <_>3 2 4 12 -1. - <_>5 2 2 12 2. - 0 - 0.0550193600356579 - -8.3471573889255524e-003 - 0.6051154136657715 - <_> - - <_> - - - - <_>9 1 7 15 -1. - <_>9 6 7 5 3. - 0 - 0.1314264982938767 - -5.7535418309271336e-003 - 0.2916753888130188 - <_> - - <_> - - - - <_>6 10 4 7 -1. - <_>8 10 2 7 2. - 0 - -1.6564460238441825e-003 - 0.0700030326843262 - -0.0626908764243126 - <_> - - <_> - - - - <_>5 0 10 20 -1. - <_>10 0 5 10 2. - <_>5 10 5 10 2. - 0 - 0.1544540971517563 - 6.1896732077002525e-003 - -0.7432330250740051 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>9 10 2 10 3. - 0 - -5.0357519648969173e-003 - -0.1133328974246979 - 0.0387417711317539 - <_> - - <_> - - - - <_>12 7 7 4 -1. - <_>12 9 7 2 2. - 0 - 2.2772569209337234e-003 - -0.1134053021669388 - 0.0213194005191326 - <_> - - <_> - - - - <_>2 7 16 4 -1. - <_>2 7 8 2 2. - <_>10 9 8 2 2. - 0 - 3.3173530828207731e-003 - 0.0442733317613602 - -0.1045982986688614 - <_> - - <_> - - - - <_>5 10 12 10 -1. - <_>5 10 6 10 2. - 0 - -0.0296928007155657 - 0.0924837663769722 - -0.0233426094055176 - <_> - - <_> - - - - <_>6 1 2 16 -1. - <_>6 9 2 8 2. - 0 - 0.0629378408193588 - -0.0129982801154256 - 0.3888793885707855 - <_> - - <_> - - - - <_>6 2 12 10 -1. - <_>6 7 12 5 2. - 0 - 3.6641359329223633e-003 - 0.0320998206734657 - -0.0396479889750481 - <_> - - <_> - - - - <_>2 4 14 6 -1. - <_>2 4 7 3 2. - <_>9 7 7 3 2. - 0 - 4.4782999902963638e-003 - -0.0457013286650181 - 0.1069701015949249 - <_> - - <_> - - - - <_>5 0 11 12 -1. - <_>5 4 11 4 3. - 0 - 1.8147319788113236e-003 - -0.0328718200325966 - 0.1064793989062309 - <_> - - <_> - - - - <_>7 1 6 12 -1. - <_>7 5 6 4 3. - 0 - 4.8941639252007008e-003 - 0.0279110092669725 - -0.2172559052705765 - <_> - - <_> - - - - <_>9 8 11 4 -1. - <_>9 10 11 2 2. - 0 - -4.4425828382372856e-003 - -0.1347015053033829 - 0.0107814101502299 - <_> - - <_> - - - - <_>0 8 11 4 -1. - <_>0 10 11 2 2. - 0 - -0.0254934001713991 - 0.6837146878242493 - -7.7452720142900944e-003 - <_> - - <_> - - - - <_>1 8 19 6 -1. - <_>1 11 19 3 2. - 0 - 0.0278354492038488 - 0.0241442993283272 - -0.1517059952020645 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>7 4 6 4 2. - 0 - 7.5548859313130379e-003 - -0.0476434007287025 - 0.1192577034235001 - <_> - - <_> - - - - <_>5 3 15 2 -1. - <_>5 4 15 1 2. - 0 - 0.0103296097368002 - 0.0186468102037907 - -0.1612257063388825 - <_> - - <_> - - - - <_>2 7 14 6 -1. - <_>2 9 14 2 3. - 0 - -0.0123933898285031 - 0.6030492186546326 - -7.7566630207002163e-003 - <_> - - <_> - - - - <_>3 0 17 6 -1. - <_>3 2 17 2 3. - 0 - 0.0138337695971131 - -0.0276172999292612 - 0.0512668788433075 - <_> - - <_> - - - - <_>0 0 17 6 -1. - <_>0 2 17 2 3. - 0 - -0.0256693195551634 - 0.2380135953426361 - -0.0239719096571207 - <_> - - <_> - - - - <_>13 2 7 4 -1. - <_>13 4 7 2 2. - 0 - -5.2043660543859005e-003 - -0.1072179004549980 - 0.0266450494527817 - <_> - - <_> - - - - <_>0 2 7 4 -1. - <_>0 4 7 2 2. - 0 - 3.4628969151526690e-003 - 0.0543134100735188 - -0.1345832049846649 - <_> - - <_> - - - - <_>8 1 12 10 -1. - <_>14 1 6 5 2. - <_>8 6 6 5 2. - 0 - -0.0192206799983978 - 0.0729963928461075 - -0.0406521111726761 - <_> - - <_> - - - - <_>2 1 4 8 -1. - <_>2 5 4 4 2. - 0 - -2.5009829550981522e-003 - -0.0776712968945503 - 0.0590965412557125 - <_> - - <_> - - - - <_>5 1 11 10 -1. - <_>5 6 11 5 2. - 0 - -8.5285156965255737e-003 - 0.0490508116781712 - -0.0640783533453941 - <_> - - <_> - - - - <_>3 9 10 6 -1. - <_>3 9 5 3 2. - <_>8 12 5 3 2. - 0 - 4.3327538296580315e-003 - 0.0252210106700659 - -0.1935898065567017 - <_> - - <_> - - - - <_>12 7 7 4 -1. - <_>12 9 7 2 2. - 0 - 0.0365959703922272 - -0.0162625908851624 - 0.1565123945474625 - <_> - - <_> - - - - <_>2 7 12 8 -1. - <_>6 7 4 8 3. - 0 - -1.1795730097219348e-003 - -0.0724680721759796 - 0.0704494863748550 - <_> - - <_> - - - - <_>10 10 8 4 -1. - <_>10 10 4 4 2. - 0 - -0.0139758298173547 - -0.1178947016596794 - 0.0212920494377613 - <_> - - <_> - - - - <_>2 10 8 4 -1. - <_>6 10 4 4 2. - 0 - -1.3828700175508857e-003 - 0.0792835429310799 - -0.0951041206717491 - <_> - - <_> - - - - <_>3 10 16 3 -1. - <_>3 10 8 3 2. - 0 - -2.9435830656439066e-003 - 0.0703684315085411 - -0.0332179106771946 - <_> - - <_> - - - - <_>1 11 6 5 -1. - <_>4 11 3 5 2. - 0 - 9.5262555405497551e-003 - -0.0297336205840111 - 0.1667045950889587 - <_> - - <_> - - - - <_>10 7 9 9 -1. - <_>13 7 3 9 3. - 0 - -0.0901142731308937 - -0.1662537008523941 - 8.6199166253209114e-003 - <_> - - <_> - - - - <_>1 7 9 9 -1. - <_>4 7 3 9 3. - 0 - -1.2089919764548540e-003 - 0.0810838565230370 - -0.0730291232466698 - <_> - - <_> - - - - <_>5 5 12 5 -1. - <_>5 5 6 5 2. - 0 - -0.1419996023178101 - -1. - 2.2284830920398235e-003 - <_> - - <_> - - - - <_>3 5 12 5 -1. - <_>9 5 6 5 2. - 0 - 8.0690719187259674e-003 - 0.0474122203886509 - -0.1017893031239510 - <_> - - <_> - - - - <_>2 3 16 2 -1. - <_>2 3 8 2 2. - 0 - -4.7410889528691769e-003 - 0.1205111965537071 - -0.0499574802815914 - <_> - - <_> - - - - <_>2 8 7 6 -1. - <_>2 10 7 2 3. - 0 - -1.6977200284600258e-003 - -0.2417144030332565 - 0.0195343699306250 - <_> - - <_> - - - - <_>7 8 9 6 -1. - <_>7 10 9 2 3. - 0 - -2.8892089612782001e-003 - 0.2572799026966095 - -0.0116250598803163 - <_> - - <_> - - - - <_>3 0 3 15 -1. - <_>4 0 1 15 3. - 0 - -1.5177440363913774e-003 - -0.0987841933965683 - 0.0467061288654804 - <_> - - <_> - - - - <_>3 10 16 3 -1. - <_>3 10 8 3 2. - 0 - 0.1419731974601746 - -2.5096370372921228e-003 - 0.7545061111450195 - <_> - - <_> - - - - <_>1 10 16 3 -1. - <_>9 10 8 3 2. - 0 - 0.0975179374217987 - -6.9059049710631371e-003 - 0.6518443226814270 - <_> - - <_> - - - - <_>12 0 8 19 -1. - <_>12 0 4 19 2. - 0 - 0.0135673796758056 - -0.0763251930475235 - 0.0880545824766159 - <_> - - <_> - - - - <_>0 0 8 19 -1. - <_>4 0 4 19 2. - 0 - 0.0809814631938934 - 0.0155581096187234 - -0.3460162878036499 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - -4.7192731872200966e-003 - 0.0816200226545334 - -0.0460722893476486 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.0368969999253750e-003 - -0.0448176302015781 - 0.1286139041185379 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - -1.7878509825095534e-003 - 0.0437313318252563 - -0.0449959486722946 - <_> - - <_> - - - - <_>0 12 16 4 -1. - <_>0 12 8 2 2. - <_>8 14 8 2 2. - 0 - -7.1685528382658958e-003 - -0.1359799951314926 - 0.0387969911098480 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0674608871340752 - -0.2926574051380158 - 3.5135280340909958e-003 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0155985001474619 - 0.2310566008090973 - -0.0224050693213940 - <_> - - <_> - - - - <_>3 3 14 14 -1. - <_>10 3 7 7 2. - <_>3 10 7 7 2. - 0 - -0.0210264790803194 - -0.1528383046388626 - 0.0315314494073391 - <_> - - <_> - - - - <_>3 6 6 12 -1. - <_>5 6 2 12 3. - 0 - -0.1055836006999016 - -0.6836603879928589 - 6.8997950293123722e-003 - <_> - - <_> - - - - <_>5 12 12 6 -1. - <_>9 12 4 6 3. - 0 - -3.6966579500585794e-003 - 0.0343151502311230 - -0.0489227995276451 - <_> - - <_> - - - - <_>1 8 14 6 -1. - <_>1 8 7 3 2. - <_>8 11 7 3 2. - 0 - -6.0826627304777503e-004 - -0.0526384301483631 - 0.0895469486713409 - <_> - - <_> - - - - <_>8 7 12 10 -1. - <_>14 7 6 5 2. - <_>8 12 6 5 2. - 0 - -0.0289365407079458 - 0.0418184809386730 - -0.0138181699439883 - <_> - - <_> - - - - <_>0 7 12 10 -1. - <_>0 7 6 5 2. - <_>6 12 6 5 2. - 0 - -5.8082528412342072e-003 - 0.0678747966885567 - -0.0855787992477417 - <_> - - <_> - - - - <_>9 2 6 18 -1. - <_>12 2 3 9 2. - <_>9 11 3 9 2. - 0 - -0.0460953786969185 - -0.1258478015661240 - 0.0204669702798128 - <_> - - <_> - - - - <_>1 10 8 10 -1. - <_>1 10 4 5 2. - <_>5 15 4 5 2. - 0 - 0.0529729202389717 - -0.0124532599002123 - 0.3456504940986633 - <_> - - <_> - - - - <_>4 14 12 4 -1. - <_>4 16 12 2 2. - 0 - 0.0493515990674496 - 0.0109012397006154 - -0.4850698113441467 - <_> - - <_> - - - - <_>5 13 6 7 -1. - <_>7 13 2 7 3. - 0 - 0.0443778000771999 - 9.9294837564229965e-003 - -0.4387789964675903 - <_> - - <_> - - - - <_>5 2 15 5 -1. - <_>10 2 5 5 3. - 0 - -0.1146489009261131 - 0.2687459886074066 - -9.2000560835003853e-003 - <_> - - <_> - - - - <_>5 4 9 14 -1. - <_>5 11 9 7 2. - 0 - 0.1688783019781113 - 5.7101310230791569e-003 - -0.8597288131713867 - <_> - - <_> - - - - <_>8 0 11 4 -1. - <_>8 2 11 2 2. - 0 - 0.0511980988085270 - -8.5723921656608582e-003 - 0.1339516937732697 - <_> - - <_> - - - - <_>0 14 16 6 -1. - <_>0 16 16 2 3. - 0 - -3.0789880547672510e-003 - -0.1033876016736031 - 0.0434594787657261 - <_> - - <_> - - - - <_>10 14 8 6 -1. - <_>10 16 8 2 3. - 0 - 0.0472231283783913 - 8.1934239715337753e-003 - -0.4380340874195099 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -7.6270569115877151e-003 - 0.1871389001607895 - -0.0246602501720190 - <_> - - <_> - - - - <_>5 8 15 3 -1. - <_>5 9 15 1 3. - 0 - 5.4106907919049263e-003 - 0.0410998314619064 - -0.0788682326674461 - <_> - - <_> - - - - <_>0 8 19 3 -1. - <_>0 9 19 1 3. - 0 - -1.4900229871273041e-003 - -0.2011504024267197 - 0.0318981595337391 - <_> - - <_> - - - - <_>8 16 8 4 -1. - <_>8 16 4 4 2. - 0 - -0.0838316082954407 - 0.5801793932914734 - -5.2973427809774876e-003 - <_> - - <_> - - - - <_>4 16 8 4 -1. - <_>8 16 4 4 2. - 0 - 6.2233800999820232e-003 - -0.0397860594093800 - 0.1228395029902458 - <_> - - <_> - - - - <_>9 5 10 9 -1. - <_>9 8 10 3 3. - 0 - 0.1147508025169373 - -0.0119754197075963 - 0.2158671021461487 - <_> - - <_> - - - - <_>1 5 10 9 -1. - <_>1 8 10 3 3. - 0 - -1.5253260498866439e-003 - 0.1380452960729599 - -0.0399418808519840 - <_> - - <_> - - - - <_>4 7 14 2 -1. - <_>4 7 7 2 2. - 0 - -5.2878521382808685e-003 - -0.1279065012931824 - 0.0328935608267784 - <_> - - <_> - - - - <_>2 7 13 2 -1. - <_>2 8 13 1 2. - 0 - 8.9670647867023945e-004 - -0.1248105987906456 - 0.0445442497730255 - <_> - - <_> - - - - <_>6 5 8 4 -1. - <_>6 7 8 2 2. - 0 - 0.0384216606616974 - 7.7155791223049164e-003 - -0.6557546854019165 - <_> - - <_> - - - - <_>5 12 9 5 -1. - <_>8 12 3 5 3. - 0 - -9.3785318313166499e-004 - 0.0556085109710693 - -0.0898769125342369 - <_> - - <_> - - - - <_>3 6 14 3 -1. - <_>3 7 14 1 3. - 0 - 1.9965849351137877e-003 - -0.0252976100891829 - 0.1941318064928055 - <_> - - <_> - - - - <_>7 2 4 12 -1. - <_>7 6 4 4 3. - 0 - 4.5782068627886474e-004 - 0.0390891991555691 - -0.1290857046842575 - <_> - - <_> - - - - <_>2 4 16 4 -1. - <_>2 6 16 2 2. - 0 - 3.8373940624296665e-003 - -0.0287488698959351 - 0.1942975074052811 - <_> - - <_> - - - - <_>1 4 9 4 -1. - <_>1 6 9 2 2. - 0 - 3.7142829387448728e-004 - 0.0382723584771156 - -0.1375918984413147 - <_> - - <_> - - - - <_>9 4 11 4 -1. - <_>9 6 11 2 2. - 0 - 7.5116259977221489e-003 - -0.0144611299037933 - 0.1265694946050644 - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - -0.0503628402948380 - 0.3518357872962952 - -0.0140518601983786 - <_> - - <_> - - - - <_>1 5 18 3 -1. - <_>7 5 6 3 3. - 0 - 0.0399216413497925 - 0.0272804293781519 - -0.1995819956064224 - <_> - - <_> - - - - <_>1 0 15 7 -1. - <_>6 0 5 7 3. - 0 - 0.2260525971651077 - -6.8001961335539818e-003 - 0.7300689816474915 - <_> - - <_> - - - - <_>12 0 5 15 -1. - <_>12 5 5 5 3. - 0 - 0.1108177974820137 - 4.3370737694203854e-003 - -0.8682916164398193 - <_> - - <_> - - - - <_>3 0 5 15 -1. - <_>3 5 5 5 3. - 0 - -9.7494889050722122e-003 - -0.0637406632304192 - 0.0845379978418350 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - -2.2887689992785454e-003 - 0.0996540188789368 - -0.0415654182434082 - <_> - - <_> - - - - <_>8 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 2.0008319988846779e-003 - -0.0556506998836994 - 0.1070986986160278 - <_> - - <_> - - - - <_>4 6 12 11 -1. - <_>8 6 4 11 3. - 0 - -0.0151600502431393 - -0.1409876048564911 - 0.0387415997684002 - <_> - - <_> - - - - <_>1 7 18 4 -1. - <_>1 9 18 2 2. - 0 - -6.3132969662547112e-003 - -1. - 4.4605308212339878e-003 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - -0.0139700099825859 - 0.1248108968138695 - -0.0214258302003145 - <_> - - <_> - - - - <_>7 2 6 5 -1. - <_>10 2 3 5 2. - 0 - -0.0443212799727917 - -0.5334007143974304 - 0.0101652396842837 - <_> - - <_> - - - - <_>9 0 4 7 -1. - <_>9 0 2 7 2. - 0 - 1.4885979471728206e-003 - -0.0488686002790928 - 0.0360779017210007 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - 0.0651396811008453 - 7.6331058517098427e-003 - -0.5878164172172546 - <_> - - <_> - - - - <_>13 0 7 6 -1. - <_>13 2 7 2 3. - 0 - -0.0207414105534554 - -0.2965827882289887 - 0.0186228007078171 - -1.2940989732742310 - 38 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0191887393593788 - -0.2115039974451065 - 0.1328652948141098 - <_> - - <_> - - - - <_>5 4 15 4 -1. - <_>5 6 15 2 2. - 0 - -8.1222038716077805e-003 - 0.0924910828471184 - -0.1758511960506439 - <_> - - <_> - - - - <_>5 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 1.5851219650357962e-003 - -0.2856569886207581 - 0.0667105689644814 - <_> - - <_> - - - - <_>12 1 6 11 -1. - <_>14 1 2 11 3. - 0 - -4.3140850029885769e-003 - -0.1388522982597351 - 0.0526946894824505 - <_> - - <_> - - - - <_>0 11 20 3 -1. - <_>0 12 20 1 3. - 0 - -1.7131429631263018e-003 - 0.1313561052083969 - -0.1314910948276520 - <_> - - <_> - - - - <_>12 1 6 11 -1. - <_>14 1 2 11 3. - 0 - 0.0684473663568497 - 9.3052154406905174e-003 - -0.2506326138973236 - <_> - - <_> - - - - <_>2 1 6 11 -1. - <_>4 1 2 11 3. - 0 - -2.4445978924632072e-003 - -0.1720553040504456 - 0.0983228236436844 - <_> - - <_> - - - - <_>10 9 4 8 -1. - <_>10 13 4 4 2. - 0 - 1.0310600046068430e-003 - 0.0230391602963209 - -0.2752762138843536 - <_> - - <_> - - - - <_>0 7 7 6 -1. - <_>0 9 7 2 3. - 0 - 7.4603251414373517e-004 - -0.2327678054571152 - 0.0526930093765259 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -6.6399492789059877e-004 - 0.0689907819032669 - -0.0846877098083496 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -4.0997468749992549e-004 - 0.1050138026475906 - -0.1081900969147682 - <_> - - <_> - - - - <_>15 7 5 6 -1. - <_>15 10 5 3 2. - 0 - -1.8094549886882305e-003 - -0.1817883998155594 - 0.0441841408610344 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 9.3385757645592093e-004 - -0.1462268978357315 - 0.0727264434099197 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 14 4 4 2. - 0 - -3.8197741378098726e-004 - 0.0240099392831326 - -0.1729580014944077 - <_> - - <_> - - - - <_>0 7 5 6 -1. - <_>0 10 5 3 2. - 0 - -1.4950280310586095e-003 - -0.1940338015556335 - 0.0488079190254211 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0101591004058719 - 0.1917389929294586 - -0.0527490712702274 - <_> - - <_> - - - - <_>2 0 14 3 -1. - <_>2 1 14 1 3. - 0 - 5.9903519286308438e-005 - -0.1079154983162880 - 0.0909881666302681 - <_> - - <_> - - - - <_>4 4 13 2 -1. - <_>4 5 13 1 2. - 0 - -0.0319675505161285 - 0.4110988974571228 - -0.0226506404578686 - <_> - - <_> - - - - <_>0 18 20 2 -1. - <_>0 19 20 1 2. - 0 - 0.0143432701006532 - 0.0243155397474766 - -0.4268015027046204 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - 0.0110395299270749 - -0.0627170130610466 - 0.1133053004741669 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -8.4228850901126862e-003 - -0.2136930972337723 - 0.0420592017471790 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - -0.0205498393625021 - 0.1516163051128388 - -0.0245941393077374 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -6.5411031246185303e-003 - 0.1488362997770309 - -0.0611793398857117 - <_> - - <_> - - - - <_>6 0 8 14 -1. - <_>10 0 4 7 2. - <_>6 7 4 7 2. - 0 - -0.0133244004100561 - -0.2079197019338608 - 0.0483333095908165 - <_> - - <_> - - - - <_>0 2 6 12 -1. - <_>2 2 2 12 3. - 0 - 0.0701112672686577 - -0.0268632192164660 - 0.3632225990295410 - <_> - - <_> - - - - <_>6 12 9 6 -1. - <_>9 12 3 6 3. - 0 - -2.6973750209435821e-004 - 0.0608766600489616 - -0.1127237007021904 - <_> - - <_> - - - - <_>2 0 7 4 -1. - <_>2 2 7 2 2. - 0 - -1.3509000418707728e-003 - -0.1855207979679108 - 0.0521549582481384 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -0.0280831903219223 - 0.3511188030242920 - -0.0235963296145201 - <_> - - <_> - - - - <_>5 0 6 10 -1. - <_>5 0 3 5 2. - <_>8 5 3 5 2. - 0 - -0.0100032901391387 - -0.2905848026275635 - 0.0321256890892982 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -1.6111029544845223e-003 - 0.0981136709451675 - -0.0522037111222744 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - -0.0184119008481503 - -0.1808266937732697 - 0.0545367002487183 - <_> - - <_> - - - - <_>18 6 2 13 -1. - <_>18 6 1 13 2. - 0 - -0.0717388167977333 - -0.7665498852729797 - 3.3518690615892410e-003 - <_> - - <_> - - - - <_>0 6 2 13 -1. - <_>1 6 1 13 2. - 0 - -2.7943260502070189e-003 - 0.1587136983871460 - -0.0642718002200127 - <_> - - <_> - - - - <_>16 7 4 13 -1. - <_>16 7 2 13 2. - 0 - -0.1687474995851517 - -0.6995618939399719 - 4.8861699178814888e-003 - <_> - - <_> - - - - <_>6 5 7 6 -1. - <_>6 7 7 2 3. - 0 - -1.2672400334849954e-003 - 0.0316160395741463 - -0.2495326995849609 - <_> - - <_> - - - - <_>6 11 10 6 -1. - <_>11 11 5 3 2. - <_>6 14 5 3 2. - 0 - 0.0208077505230904 - 0.0170534104108810 - -0.2433141022920609 - <_> - - <_> - - - - <_>5 9 6 5 -1. - <_>8 9 3 5 2. - 0 - -1.5869849594309926e-003 - 0.0931710898876190 - -0.0813619270920753 - <_> - - <_> - - - - <_>10 3 4 15 -1. - <_>10 3 2 15 2. - 0 - -0.0100146904587746 - -0.2778961956501007 - 0.0265692397952080 - <_> - - <_> - - - - <_>6 3 4 15 -1. - <_>8 3 2 15 2. - 0 - -5.7948171161115170e-003 - -0.2228773981332779 - 0.0359756611287594 - <_> - - <_> - - - - <_>6 7 13 2 -1. - <_>6 8 13 1 2. - 0 - 2.7189950924366713e-003 - -0.0906319096684456 - 0.0568204000592232 - <_> - - <_> - - - - <_>2 15 16 4 -1. - <_>2 15 8 2 2. - <_>10 17 8 2 2. - 0 - 0.0388451591134071 - 0.0122808599844575 - -0.5852134823799133 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -0.0141586801037192 - 0.1815387010574341 - -0.0311094298958778 - <_> - - <_> - - - - <_>0 7 4 13 -1. - <_>2 7 2 13 2. - 0 - -0.1827860027551651 - -0.9001380801200867 - 7.6544750481843948e-003 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - 0.0275884196162224 - -0.0124600399285555 - 0.2006936967372894 - <_> - - <_> - - - - <_>5 11 10 9 -1. - <_>5 14 10 3 3. - 0 - -0.0147844301536679 - -0.0899104923009872 - 0.0816486775875092 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - 0.1162571981549263 - 2.3692469112575054e-003 - -0.9999806880950928 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - 3.5341090988367796e-003 - -0.0617605410516262 - 0.1349063962697983 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 12 4 6 2. - 0 - 5.1878788508474827e-003 - 0.0187458600848913 - -0.1744917035102844 - <_> - - <_> - - - - <_>0 3 2 16 -1. - <_>0 11 2 8 2. - 0 - 0.0794573575258255 - -0.0234029907733202 - 0.3350220024585724 - <_> - - <_> - - - - <_>0 15 20 4 -1. - <_>10 15 10 2 2. - <_>0 17 10 2 2. - 0 - 0.0276843793690205 - 0.0236639101058245 - -0.3325636088848114 - <_> - - <_> - - - - <_>0 15 9 4 -1. - <_>0 17 9 2 2. - 0 - -4.4806320220232010e-003 - -0.1465875059366226 - 0.0473768115043640 - <_> - - <_> - - - - <_>9 14 10 6 -1. - <_>14 14 5 3 2. - <_>9 17 5 3 2. - 0 - 5.6939688511192799e-003 - -0.0567761212587357 - 0.0675808563828468 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 7.7299480326473713e-003 - -0.0311566498130560 - 0.2310259044170380 - <_> - - <_> - - - - <_>4 15 13 3 -1. - <_>4 16 13 1 3. - 0 - 3.9786100387573242e-003 - -0.0568824410438538 - 0.1327152997255325 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>0 0 9 2 2. - <_>9 2 9 2 2. - 0 - -0.0112758800387383 - -0.2093864977359772 - 0.0352914594113827 - <_> - - <_> - - - - <_>6 5 8 15 -1. - <_>6 10 8 5 3. - 0 - -2.4308220017701387e-003 - -0.2017636001110077 - 0.0345139317214489 - <_> - - <_> - - - - <_>0 0 6 7 -1. - <_>2 0 2 7 3. - 0 - 5.7369591668248177e-003 - -0.0556071586906910 - 0.1153208985924721 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>16 1 2 12 3. - 0 - 4.6170800924301147e-003 - -0.0560835003852844 - 0.0817629173398018 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -4.7089671716094017e-003 - -0.1335121989250183 - 0.0562960803508759 - <_> - - <_> - - - - <_>18 1 2 13 -1. - <_>18 1 1 13 2. - 0 - -0.0326880700886250 - 0.2792238891124725 - -0.0108676599338651 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - 0.0886861979961395 - 0.0182682201266289 - -0.3563739061355591 - <_> - - <_> - - - - <_>14 2 4 10 -1. - <_>14 2 2 10 2. - 0 - 4.5751677826046944e-003 - -0.0515584610402584 - 0.0639488101005554 - <_> - - <_> - - - - <_>0 3 4 16 -1. - <_>0 3 2 8 2. - <_>2 11 2 8 2. - 0 - 4.9765850417315960e-003 - -0.0546845905482769 - 0.1190711036324501 - <_> - - <_> - - - - <_>6 0 10 6 -1. - <_>11 0 5 3 2. - <_>6 3 5 3 2. - 0 - -6.4881290309131145e-003 - -0.0991211235523224 - 0.0265088491141796 - <_> - - <_> - - - - <_>1 14 10 6 -1. - <_>1 14 5 3 2. - <_>6 17 5 3 2. - 0 - 2.4523450993001461e-003 - -0.0950459465384483 - 0.0668029263615608 - <_> - - <_> - - - - <_>8 7 5 9 -1. - <_>8 10 5 3 3. - 0 - 7.0354789495468140e-003 - 0.1070559024810791 - -0.0623950995504856 - <_> - - <_> - - - - <_>2 2 4 10 -1. - <_>4 2 2 10 2. - 0 - 0.0427467897534370 - -0.0160921793431044 - 0.4325619935989380 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - -4.5301730278879404e-004 - 0.0364205688238144 - -0.0993228927254677 - <_> - - <_> - - - - <_>5 6 10 12 -1. - <_>5 6 5 6 2. - <_>10 12 5 6 2. - 0 - -5.2631930448114872e-003 - -0.1141674965620041 - 0.0572602190077305 - <_> - - <_> - - - - <_>9 2 4 12 -1. - <_>9 6 4 4 3. - 0 - 1.0581909446045756e-003 - 0.0332204885780811 - -0.1183122023940086 - <_> - - <_> - - - - <_>2 0 15 6 -1. - <_>2 3 15 3 2. - 0 - 0.0250889491289854 - -0.0606550201773643 - 0.1260174065828323 - <_> - - <_> - - - - <_>6 0 13 8 -1. - <_>6 4 13 4 2. - 0 - 0.2425215989351273 - 2.2060840856283903e-003 - -1.0000120401382446 - <_> - - <_> - - - - <_>1 0 13 8 -1. - <_>1 4 13 4 2. - 0 - -0.1439307928085327 - 0.3741979897022247 - -0.0222521107643843 - <_> - - <_> - - - - <_>11 4 2 14 -1. - <_>11 11 2 7 2. - 0 - -6.0972762294113636e-003 - -0.1103809997439385 - 0.0459969602525234 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - 6.1375470831990242e-003 - 0.0383078083395958 - -0.1808677017688751 - <_> - - <_> - - - - <_>8 5 6 10 -1. - <_>11 5 3 5 2. - <_>8 10 3 5 2. - 0 - -3.6617079749703407e-003 - 0.0384399183094502 - -0.0625407919287682 - <_> - - <_> - - - - <_>4 8 10 12 -1. - <_>9 8 5 12 2. - 0 - -0.1585485041141510 - 0.3446939885616303 - -0.0198375005275011 - <_> - - <_> - - - - <_>8 5 6 5 -1. - <_>8 5 3 5 2. - 0 - 0.0672192871570587 - 9.5165139064192772e-003 - -0.5020645856857300 - <_> - - <_> - - - - <_>6 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 2.2499680053442717e-003 - -0.1306392997503281 - 0.0648329332470894 - <_> - - <_> - - - - <_>13 0 6 7 -1. - <_>15 0 2 7 3. - 0 - 0.0846267864108086 - 5.9339799918234348e-003 - -0.4151659011840820 - <_> - - <_> - - - - <_>1 0 6 7 -1. - <_>3 0 2 7 3. - 0 - -9.5411221263930202e-004 - -0.0937907472252846 - 0.0754866078495979 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - -7.6813949272036552e-003 - -0.1482196003198624 - 0.0290105808526278 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>6 17 6 3 3. - 0 - -0.0255933199077845 - 0.1485957950353622 - -0.0471959300339222 - <_> - - <_> - - - - <_>6 7 12 8 -1. - <_>10 7 4 8 3. - 0 - 0.0215083695948124 - 0.0237826202064753 - -0.0966592878103256 - <_> - - <_> - - - - <_>0 14 18 5 -1. - <_>6 14 6 5 3. - 0 - 0.0344631001353264 - -0.0374100692570210 - 0.2201530039310455 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>10 13 10 2 2. - <_>0 15 10 2 2. - 0 - -0.0378603003919125 - -0.5004746913909912 - 0.0140598695725203 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 1.2028450146317482e-003 - -0.0650870576500893 - 0.0895834863185883 - <_> - - <_> - - - - <_>11 11 7 4 -1. - <_>11 13 7 2 2. - 0 - 0.0167535208165646 - 4.9179811030626297e-003 - -0.4303090870380402 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 1.6640779795125127e-003 - 0.0408074297010899 - -0.1446996033191681 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 3.4473428968340158e-003 - -0.0399101786315441 - 0.1527296006679535 - <_> - - <_> - - - - <_>0 8 8 6 -1. - <_>0 10 8 2 3. - 0 - 8.9918142184615135e-003 - 0.0710712671279907 - -0.0861699134111404 - <_> - - <_> - - - - <_>4 8 15 2 -1. - <_>4 9 15 1 2. - 0 - 8.3185202674940228e-004 - -0.2573918998241425 - 0.0179410893470049 - <_> - - <_> - - - - <_>0 9 6 5 -1. - <_>3 9 3 5 2. - 0 - -6.8142730742692947e-003 - 0.1382316052913666 - -0.0539945401251316 - <_> - - <_> - - - - <_>13 9 6 5 -1. - <_>13 9 3 5 2. - 0 - 2.9746210202574730e-003 - -0.0415502600371838 - 0.0398397706449032 - <_> - - <_> - - - - <_>1 9 6 5 -1. - <_>4 9 3 5 2. - 0 - 2.5836620479822159e-003 - -0.0706564933061600 - 0.0950455069541931 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 2.7143809711560607e-004 - 0.0580700710415840 - -0.1278176009654999 - <_> - - <_> - - - - <_>0 0 14 19 -1. - <_>7 0 7 19 2. - 0 - 0.3541829884052277 - 5.4909070022404194e-003 - -0.9796069860458374 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 0.0253186505287886 - -0.0144109698012471 - 0.2621912956237793 - <_> - - <_> - - - - <_>3 0 4 14 -1. - <_>3 0 2 7 2. - <_>5 7 2 7 2. - 0 - -2.2658439411316067e-004 - 0.0529978498816490 - -0.1162934973835945 - <_> - - <_> - - - - <_>13 4 7 6 -1. - <_>13 6 7 2 3. - 0 - 6.8859090097248554e-003 - 0.0164373107254505 - -0.2034949064254761 - <_> - - <_> - - - - <_>2 4 14 3 -1. - <_>2 5 14 1 3. - 0 - 0.0116074597463012 - -0.0366510115563869 - 0.1518401056528091 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - -4.8253959976136684e-003 - -0.2347615063190460 - 0.0379140116274357 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 12 4 6 2. - 0 - 2.5656020734459162e-003 - 0.0351856388151646 - -0.1854071021080017 - <_> - - <_> - - - - <_>6 2 14 18 -1. - <_>13 2 7 9 2. - <_>6 11 7 9 2. - 0 - 0.1260139942169190 - -9.8542850464582443e-003 - 0.2552069127559662 - <_> - - <_> - - - - <_>5 9 9 6 -1. - <_>5 12 9 3 2. - 0 - 2.7164958883076906e-003 - -0.0217484403401613 - 0.2546752989292145 - <_> - - <_> - - - - <_>0 1 20 18 -1. - <_>10 1 10 9 2. - <_>0 10 10 9 2. - 0 - 0.3235602974891663 - 8.8657345622777939e-003 - -0.7038357257843018 - <_> - - <_> - - - - <_>4 10 7 4 -1. - <_>4 12 7 2 2. - 0 - -8.4016058826819062e-004 - 0.0368313603103161 - -0.1495326012372971 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - 3.3291990403085947e-003 - 0.0481858402490616 - -0.1229047030210495 - <_> - - <_> - - - - <_>1 0 14 12 -1. - <_>1 4 14 4 3. - 0 - 0.2113053947687149 - 6.5245870500802994e-003 - -0.8829386234283447 - <_> - - <_> - - - - <_>9 0 6 8 -1. - <_>9 0 3 8 2. - 0 - 5.0388509407639503e-003 - -0.0670799463987350 - 0.0378497093915939 - <_> - - <_> - - - - <_>4 2 12 5 -1. - <_>8 2 4 5 3. - 0 - -0.0278623998165131 - 0.3346948921680450 - -0.0188165009021759 - <_> - - <_> - - - - <_>12 0 2 15 -1. - <_>12 0 1 15 2. - 0 - 3.8636629469692707e-003 - 0.0436447300016880 - -0.1748148947954178 - <_> - - <_> - - - - <_>4 0 8 10 -1. - <_>8 0 4 10 2. - 0 - 0.1048030033707619 - -0.0157375298440456 - 0.4209423959255219 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -3.4130848944187164e-003 - -0.1083557009696960 - 0.0437177903950214 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0463969707489014 - -0.7568007707595825 - 8.6701400578022003e-003 - <_> - - <_> - - - - <_>9 2 2 13 -1. - <_>9 2 1 13 2. - 0 - 5.3708078339695930e-003 - -0.0417978018522263 - 0.1482471972703934 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -6.1126388609409332e-003 - 0.1867371946573257 - -0.0433874912559986 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0425093211233616 - 0.0116906799376011 - -0.4374065995216370 - <_> - - <_> - - - - <_>0 4 18 10 -1. - <_>0 4 9 5 2. - <_>9 9 9 5 2. - 0 - 0.0104730203747749 - 0.0431436300277710 - -0.1565439999103546 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - -0.0472239591181278 - -0.7448353767395020 - 3.4918629098683596e-003 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - 0.0530903600156307 - 0.0104081500321627 - -0.5349944829940796 - <_> - - <_> - - - - <_>4 3 16 6 -1. - <_>12 3 8 3 2. - <_>4 6 8 3 2. - 0 - -7.0432561915367842e-004 - 0.0333841703832150 - -0.0737060308456421 - <_> - - <_> - - - - <_>3 4 5 9 -1. - <_>3 7 5 3 3. - 0 - 7.5942431576550007e-003 - -0.0291070491075516 - 0.1946886032819748 - <_> - - <_> - - - - <_>8 4 12 5 -1. - <_>12 4 4 5 3. - 0 - 0.0226769894361496 - 0.0338038206100464 - -0.2762761116027832 - <_> - - <_> - - - - <_>3 9 8 4 -1. - <_>3 11 8 2 2. - 0 - 6.6533521749079227e-003 - -0.0265782400965691 - 0.2428331971168518 - <_> - - <_> - - - - <_>11 0 2 15 -1. - <_>11 0 1 15 2. - 0 - 3.7712270859628916e-003 - 0.0265542995184660 - -0.0649529173970222 - <_> - - <_> - - - - <_>7 0 2 15 -1. - <_>8 0 1 15 2. - 0 - -2.0740530453622341e-003 - -0.1796897053718567 - 0.0315321609377861 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -1.5632519498467445e-003 - 0.0531096793711185 - -0.0874156281352043 - <_> - - <_> - - - - <_>8 3 4 8 -1. - <_>10 3 2 8 2. - 0 - 0.0125408899039030 - -0.0341364592313766 - 0.2209753990173340 - <_> - - <_> - - - - <_>9 13 6 7 -1. - <_>11 13 2 7 3. - 0 - -3.2660199794918299e-003 - -0.0552616082131863 - 0.0326695591211319 - <_> - - <_> - - - - <_>4 14 9 5 -1. - <_>7 14 3 5 3. - 0 - -8.2185603678226471e-003 - -0.1447837948799133 - 0.0557439289987087 - <_> - - <_> - - - - <_>15 3 4 17 -1. - <_>15 3 2 17 2. - 0 - -0.0558110401034355 - 0.1723794043064117 - -0.0144565198570490 - <_> - - <_> - - - - <_>1 6 4 13 -1. - <_>3 6 2 13 2. - 0 - -0.1472315937280655 - -0.8139231204986572 - 7.4356291443109512e-003 - <_> - - <_> - - - - <_>11 12 4 7 -1. - <_>11 12 2 7 2. - 0 - -5.8468529023230076e-003 - -0.0690434426069260 - 0.0194567907601595 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>2 1 2 7 3. - 0 - 0.0194622203707695 - -0.0354722291231155 - 0.1666630059480667 - <_> - - <_> - - - - <_>9 12 6 7 -1. - <_>11 12 2 7 3. - 0 - 0.0583534687757492 - 3.0551329255104065e-003 - -0.3928912878036499 - <_> - - <_> - - - - <_>5 12 6 7 -1. - <_>7 12 2 7 3. - 0 - 0.0437858290970325 - 0.0135746300220490 - -0.4615235924720764 - <_> - - <_> - - - - <_>7 7 6 8 -1. - <_>9 7 2 8 3. - 0 - -0.0519043505191803 - 0.6380243897438049 - -9.6664745360612869e-003 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - -7.7811058145016432e-004 - -0.0993032231926918 - 0.0560946017503738 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 4.9657518975436687e-003 - 0.0414193682372570 - -0.1127481982111931 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -5.4516079835593700e-003 - 0.1739906072616577 - -0.0411477312445641 - <_> - - <_> - - - - <_>5 13 13 3 -1. - <_>5 14 13 1 3. - 0 - 5.0428751856088638e-003 - -0.0412552207708359 - 0.1379422992467880 - <_> - - <_> - - - - <_>2 9 14 3 -1. - <_>2 10 14 1 3. - 0 - -1.6985220136120915e-003 - -0.2287479043006897 - 0.0252749808132648 - <_> - - <_> - - - - <_>8 7 7 4 -1. - <_>8 9 7 2 2. - 0 - 0.0827642381191254 - 3.3066510222852230e-003 - -0.6911343932151794 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 3.9285849779844284e-003 - -0.0790433585643768 - 0.0662188529968262 - <_> - - <_> - - - - <_>13 12 5 6 -1. - <_>13 15 5 3 2. - 0 - -0.0306012406945229 - -0.2651745080947876 - 0.0164678506553173 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0199411604553461 - 0.1543180942535400 - -0.0361006893217564 - <_> - - <_> - - - - <_>4 5 16 3 -1. - <_>4 5 8 3 2. - 0 - 0.0805200636386871 - 0.0170159190893173 - -0.3344888091087341 - <_> - - <_> - - - - <_>5 3 4 14 -1. - <_>5 10 4 7 2. - 0 - 0.0703238472342491 - 0.0171224400401115 - -0.3330214023590088 - <_> - - <_> - - - - <_>4 13 15 5 -1. - <_>9 13 5 5 3. - 0 - -0.0528509393334389 - 0.0624214000999928 - -0.0146901998668909 - <_> - - <_> - - - - <_>0 3 14 2 -1. - <_>0 4 14 1 2. - 0 - -7.1594159817323089e-004 - -0.1133515015244484 - 0.0522607900202274 - <_> - - <_> - - - - <_>4 13 15 5 -1. - <_>9 13 5 5 3. - 0 - 0.2146997004747391 - 9.9299731664359570e-004 - -0.9999758005142212 - <_> - - <_> - - - - <_>1 13 15 5 -1. - <_>6 13 5 5 3. - 0 - 0.0870425924658775 - -0.0123297600075603 - 0.5026066899299622 - <_> - - <_> - - - - <_>12 0 8 6 -1. - <_>12 2 8 2 3. - 0 - -5.8731262106448412e-004 - -0.0993464663624763 - 0.0517056100070477 - <_> - - <_> - - - - <_>3 10 6 5 -1. - <_>6 10 3 5 2. - 0 - -0.0442152209579945 - -0.3936890065670013 - 0.0139208501204848 - <_> - - <_> - - - - <_>4 7 14 8 -1. - <_>11 7 7 4 2. - <_>4 11 7 4 2. - 0 - -0.0876762270927429 - 0.3015744090080261 - -6.8702381104230881e-003 - <_> - - <_> - - - - <_>2 7 14 8 -1. - <_>2 7 7 4 2. - <_>9 11 7 4 2. - 0 - -0.0484539903700352 - 0.2547787129878998 - -0.0224577505141497 - <_> - - <_> - - - - <_>11 0 2 20 -1. - <_>11 0 1 20 2. - 0 - -2.1567570511251688e-003 - -0.1356289982795715 - 0.0317253991961479 - <_> - - <_> - - - - <_>7 0 2 20 -1. - <_>8 0 1 20 2. - 0 - 3.9050900377333164e-003 - 0.0491008907556534 - -0.1186105981469154 - <_> - - <_> - - - - <_>10 5 6 8 -1. - <_>12 5 2 8 3. - 0 - -3.9808028377592564e-003 - 0.0483339093625546 - -0.0558970794081688 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - 2.9744929634034634e-003 - -0.0648024529218674 - 0.0935835018754005 - <_> - - <_> - - - - <_>3 2 14 4 -1. - <_>10 2 7 2 2. - <_>3 4 7 2 2. - 0 - 0.0258752293884754 - 0.0184876099228859 - -0.3343634903430939 - <_> - - <_> - - - - <_>7 5 6 7 -1. - <_>9 5 2 7 3. - 0 - -1.9373580580577254e-003 - 0.2200064957141876 - -0.0254049804061651 - <_> - - <_> - - - - <_>8 4 9 16 -1. - <_>11 4 3 16 3. - 0 - -0.0201716292649508 - -0.0782283097505569 - 0.0454627908766270 - <_> - - <_> - - - - <_>4 5 6 8 -1. - <_>6 5 2 8 3. - 0 - -0.0260881409049034 - 0.1763706952333450 - -0.0450972989201546 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>10 10 3 5 2. - <_>7 15 3 5 2. - 0 - -0.0268683005124331 - -0.3265641927719116 - 0.0179942306131125 - <_> - - <_> - - - - <_>5 11 5 6 -1. - <_>5 14 5 3 2. - 0 - -7.0211151614785194e-004 - 0.0396719984710217 - -0.1453354060649872 - <_> - - <_> - - - - <_>4 8 13 8 -1. - <_>4 12 13 4 2. - 0 - 8.3507681265473366e-003 - -0.0230517294257879 - 0.1885076016187668 - <_> - - <_> - - - - <_>0 9 10 6 -1. - <_>0 9 5 3 2. - <_>5 12 5 3 2. - 0 - 4.6823569573462009e-003 - 0.0299965608865023 - -0.2070102989673615 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 3.3109660726040602e-003 - 0.0565367303788662 - -0.1683558970689774 - <_> - - <_> - - - - <_>4 0 5 8 -1. - <_>4 4 5 4 2. - 0 - 7.6425541192293167e-003 - -0.0414239503443241 - 0.1255751997232437 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>8 6 4 5 2. - 0 - -2.4713110178709030e-003 - 0.0721561536192894 - -0.1076773032546043 - <_> - - <_> - - - - <_>6 3 7 10 -1. - <_>6 8 7 5 2. - 0 - -9.9495360627770424e-003 - -0.1818761974573135 - 0.0335672311484814 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 1.9820800516754389e-003 - -0.0564887188374996 - 0.1074149012565613 - <_> - - <_> - - - - <_>2 13 13 3 -1. - <_>2 14 13 1 3. - 0 - 0.0232544392347336 - -0.0165433492511511 - 0.3646667897701263 - <_> - - <_> - - - - <_>12 11 7 4 -1. - <_>12 13 7 2 2. - 0 - -0.0541779212653637 - -1. - 3.3418419770896435e-003 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - 6.1567849479615688e-004 - 0.0401593297719955 - -0.1646022051572800 - <_> - - <_> - - - - <_>9 12 9 4 -1. - <_>9 14 9 2 2. - 0 - -4.2699510231614113e-003 - -0.0569786205887794 - 0.0444809012115002 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 12 8 2 2. - <_>10 14 8 2 2. - 0 - 1.9749389030039310e-003 - 0.0592836812138557 - -0.1079126000404358 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>15 14 5 3 2. - <_>10 17 5 3 2. - 0 - -5.8583128266036510e-003 - 0.1373405009508133 - -0.0342315211892128 - <_> - - <_> - - - - <_>4 1 8 8 -1. - <_>4 1 4 4 2. - <_>8 5 4 4 2. - 0 - -7.2995189111679792e-004 - -0.1007506027817726 - 0.0547331608831882 - <_> - - <_> - - - - <_>2 12 18 7 -1. - <_>8 12 6 7 3. - 0 - -0.0299307405948639 - 0.0638825595378876 - -0.0410270206630230 - <_> - - <_> - - - - <_>3 13 12 6 -1. - <_>3 13 6 3 2. - <_>9 16 6 3 2. - 0 - -0.0517387501895428 - -0.7271345853805542 - 7.4993381276726723e-003 - <_> - - <_> - - - - <_>4 12 13 4 -1. - <_>4 14 13 2 2. - 0 - 0.0240211896598339 - 7.8491801396012306e-003 - -0.5579447150230408 - <_> - - <_> - - - - <_>6 0 2 15 -1. - <_>7 0 1 15 2. - 0 - -3.7574321031570435e-003 - -0.1608687937259674 - 0.0310159903019667 - <_> - - <_> - - - - <_>4 2 16 18 -1. - <_>12 2 8 9 2. - <_>4 11 8 9 2. - 0 - -0.0626356825232506 - 0.0905778631567955 - -0.0290337707847357 - <_> - - <_> - - - - <_>1 16 18 4 -1. - <_>7 16 6 4 3. - 0 - 0.0193634293973446 - -0.0499205887317657 - 0.1283577978610992 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0350728891789913 - 0.2139184027910233 - -8.8168960064649582e-003 - <_> - - <_> - - - - <_>4 0 12 9 -1. - <_>8 0 4 9 3. - 0 - -0.0132433101534843 - 0.2334969937801361 - -0.0230880193412304 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -0.0312908291816711 - -0.6949509978294373 - 9.3020889908075333e-003 - <_> - - <_> - - - - <_>4 9 6 6 -1. - <_>7 9 3 6 2. - 0 - 7.2391419671475887e-003 - 0.0284858494997025 - -0.1831077039241791 - <_> - - <_> - - - - <_>7 12 12 8 -1. - <_>13 12 6 4 2. - <_>7 16 6 4 2. - 0 - 6.6785318776965141e-003 - -0.0491329506039619 - 0.0541816912591457 - <_> - - <_> - - - - <_>1 12 12 8 -1. - <_>1 12 6 4 2. - <_>7 16 6 4 2. - 0 - -0.0368255712091923 - 0.3312020897865295 - -0.0213599298149347 - <_> - - <_> - - - - <_>0 10 20 9 -1. - <_>0 13 20 3 3. - 0 - -0.0455073416233063 - -0.1289349049329758 - 0.0495459884405136 - <_> - - <_> - - - - <_>4 5 10 6 -1. - <_>4 5 5 3 2. - <_>9 8 5 3 2. - 0 - 7.7639957889914513e-003 - -0.0362556204199791 - 0.1532140970230103 - <_> - - <_> - - - - <_>13 3 7 6 -1. - <_>13 5 7 2 3. - 0 - 0.0604176111519337 - 4.5740022324025631e-003 - -0.6754109263420105 - <_> - - <_> - - - - <_>8 1 4 14 -1. - <_>8 1 2 7 2. - <_>10 8 2 7 2. - 0 - 2.4624960497021675e-003 - 0.0536741614341736 - -0.1132654026150703 - <_> - - <_> - - - - <_>12 8 5 6 -1. - <_>12 11 5 3 2. - 0 - 7.3594506829977036e-005 - -0.0356489308178425 - 0.0254589691758156 - <_> - - <_> - - - - <_>3 8 5 6 -1. - <_>3 11 5 3 2. - 0 - -4.0958370082080364e-003 - 0.1556290984153748 - -0.0393906012177467 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 2.8689370083156973e-005 - -0.0848233029246330 - 0.0382542386651039 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -4.6220528893172741e-003 - -0.1899452954530716 - 0.0335087589919567 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>8 0 6 4 3. - 0 - -8.5343196988105774e-003 - 0.1121253967285156 - -0.0339684896171093 - <_> - - <_> - - - - <_>6 5 3 14 -1. - <_>6 12 3 7 2. - 0 - -0.0588038489222527 - -0.5124431252479553 - 0.0107895499095321 - <_> - - <_> - - - - <_>5 17 15 3 -1. - <_>10 17 5 3 3. - 0 - 0.0607199296355248 - -0.0125550301745534 - 0.2250975966453552 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>6 0 3 7 2. - 0 - 1.1038020020350814e-003 - -0.0962944924831390 - 0.0567274801433086 - <_> - - <_> - - - - <_>8 3 12 17 -1. - <_>8 3 6 17 2. - 0 - -3.8484560791403055e-003 - 0.0405734591186047 - -0.0253268592059612 - <_> - - <_> - - - - <_>0 2 16 12 -1. - <_>8 2 8 12 2. - 0 - -0.0107710501179099 - 0.0887356325984001 - -0.0556286796927452 - <_> - - <_> - - - - <_>7 6 6 12 -1. - <_>7 12 6 6 2. - 0 - 0.0120168095454574 - 0.0235662795603275 - -0.2459058016538620 - <_> - - <_> - - - - <_>8 8 4 8 -1. - <_>8 12 4 4 2. - 0 - -1.1656560236588120e-003 - -0.0374173000454903 - 0.1650328934192658 - <_> - - <_> - - - - <_>8 7 12 10 -1. - <_>14 7 6 5 2. - <_>8 12 6 5 2. - 0 - 0.0321376286447048 - 0.0142459701746702 - -0.2648085057735443 - <_> - - <_> - - - - <_>4 1 12 5 -1. - <_>10 1 6 5 2. - 0 - 0.0233316700905561 - -0.0352887213230133 - 0.1844782978296280 - <_> - - <_> - - - - <_>7 2 8 8 -1. - <_>11 2 4 4 2. - <_>7 6 4 4 2. - 0 - -0.0126853203400970 - -0.1175730973482132 - 0.0164369102567434 - <_> - - <_> - - - - <_>5 2 8 8 -1. - <_>5 2 4 4 2. - <_>9 6 4 4 2. - 0 - 7.3903938755393028e-005 - -0.1027147993445396 - 0.0743014365434647 - <_> - - <_> - - - - <_>3 14 14 6 -1. - <_>3 17 14 3 2. - 0 - -0.1092547029256821 - -0.8316531777381897 - 5.6438110768795013e-003 - <_> - - <_> - - - - <_>3 3 5 12 -1. - <_>3 7 5 4 3. - 0 - -0.1332435011863709 - 0.7772982120513916 - -8.3403270691633224e-003 - <_> - - <_> - - - - <_>15 4 5 6 -1. - <_>15 7 5 3 2. - 0 - 8.9381448924541473e-004 - -0.0595243014395237 - 0.0411730892956257 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 0.0103186499327421 - 0.0159264300018549 - -0.3163779079914093 - <_> - - <_> - - - - <_>15 4 5 9 -1. - <_>15 7 5 3 3. - 0 - -5.2297548390924931e-003 - -0.0711665600538254 - 0.0334892906248569 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>8 6 2 7 2. - <_>10 13 2 7 2. - 0 - 0.0164096206426620 - -0.0264541208744049 - 0.1958996951580048 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0140687096863985 - -0.0393641404807568 - 0.1397742033004761 - <_> - - <_> - - - - <_>5 0 8 10 -1. - <_>5 0 4 5 2. - <_>9 5 4 5 2. - 0 - 6.6486410796642303e-003 - 0.0640708282589912 - -0.1049339994788170 - <_> - - <_> - - - - <_>9 12 6 7 -1. - <_>11 12 2 7 3. - 0 - -0.0180306192487478 - 0.0839429125189781 - -0.0133991595357656 - <_> - - <_> - - - - <_>5 12 6 7 -1. - <_>7 12 2 7 3. - 0 - -0.0440343692898750 - -0.5582545995712280 - 9.7633162513375282e-003 - <_> - - <_> - - - - <_>13 9 7 6 -1. - <_>13 11 7 2 3. - 0 - -8.0966893583536148e-003 - -0.2048978954553604 - 0.0265202000737190 - <_> - - <_> - - - - <_>1 1 16 6 -1. - <_>1 3 16 2 3. - 0 - 5.0180461257696152e-003 - -0.1166120991110802 - 0.0457916706800461 - <_> - - <_> - - - - <_>2 1 17 6 -1. - <_>2 3 17 2 3. - 0 - -0.0170646291226149 - 0.2628273069858551 - -0.0203906390815973 - <_> - - <_> - - - - <_>4 4 2 16 -1. - <_>4 12 2 8 2. - 0 - 0.0718501731753349 - -6.9503681734204292e-003 - 0.6703253984451294 - <_> - - <_> - - - - <_>7 6 10 14 -1. - <_>12 6 5 7 2. - <_>7 13 5 7 2. - 0 - -0.0569143705070019 - -0.1347790062427521 - 0.0183990802615881 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -3.2365729566663504e-003 - 0.0696738511323929 - -0.0723145306110382 - <_> - - <_> - - - - <_>4 9 12 6 -1. - <_>10 9 6 3 2. - <_>4 12 6 3 2. - 0 - 0.0418189093470573 - 0.0111514599993825 - -0.5168011188507080 - <_> - - <_> - - - - <_>1 8 18 3 -1. - <_>7 8 6 3 3. - 0 - -6.1106588691473007e-003 - -0.1316394060850143 - 0.0437965095043182 - <_> - - <_> - - - - <_>2 13 18 7 -1. - <_>8 13 6 7 3. - 0 - -0.0355609096586704 - 0.0680055022239685 - -0.0363310202956200 - <_> - - <_> - - - - <_>1 8 15 3 -1. - <_>6 8 5 3 3. - 0 - 0.0687891691923141 - 0.0146989598870277 - -0.3821229934692383 - <_> - - <_> - - - - <_>6 0 12 7 -1. - <_>10 0 4 7 3. - 0 - -0.0783133730292320 - 0.2029606997966766 - -8.6810020729899406e-003 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 3.9626220241189003e-003 - -0.0357978902757168 - 0.1390551030635834 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - -0.0338740386068821 - -0.2225342988967896 - 7.5455638580024242e-003 - <_> - - <_> - - - - <_>6 7 6 8 -1. - <_>6 11 6 4 2. - 0 - -0.0647558569908142 - 0.4752154946327210 - -0.0109706800431013 - <_> - - <_> - - - - <_>9 2 4 12 -1. - <_>9 6 4 4 3. - 0 - 0.0266479402780533 - 0.0154453096911311 - -0.2678577899932861 - <_> - - <_> - - - - <_>0 9 7 6 -1. - <_>0 11 7 2 3. - 0 - -0.0307311099022627 - -0.4766868948936462 - 9.6429884433746338e-003 - <_> - - <_> - - - - <_>15 4 5 9 -1. - <_>15 7 5 3 3. - 0 - -0.0240227002650499 - -0.1063396036624908 - 0.0128490403294563 - <_> - - <_> - - - - <_>2 18 13 2 -1. - <_>2 19 13 1 2. - 0 - -1.3036349555477500e-003 - 0.0735241770744324 - -0.0680749192833900 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - -9.8344050347805023e-003 - -0.1184355020523071 - 0.0428666993975639 - <_> - - <_> - - - - <_>6 6 8 12 -1. - <_>6 10 8 4 3. - 0 - 0.0871021971106529 - -0.0400882586836815 - 0.1780454069375992 - <_> - - <_> - - - - <_>7 9 6 9 -1. - <_>7 12 6 3 3. - 0 - 0.0204115696251392 - 0.0168499890714884 - -0.3895365893840790 - <_> - - <_> - - - - <_>0 7 11 4 -1. - <_>0 9 11 2 2. - 0 - 0.0958752632141113 - 5.9905550442636013e-003 - -0.8152565956115723 - <_> - - <_> - - - - <_>8 12 10 6 -1. - <_>13 12 5 3 2. - <_>8 15 5 3 2. - 0 - 6.4893220551311970e-003 - -0.0240392293781042 - 0.0538711696863174 - <_> - - <_> - - - - <_>2 12 10 6 -1. - <_>2 12 5 3 2. - <_>7 15 5 3 2. - 0 - -9.6279237186536193e-004 - 0.0942991897463799 - -0.0644360184669495 - <_> - - <_> - - - - <_>12 14 8 6 -1. - <_>12 16 8 2 3. - 0 - -3.7659960798919201e-004 - -0.0622968785464764 - 0.0412518493831158 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>0 16 8 2 3. - 0 - 6.5272641368210316e-003 - 0.0513251312077045 - -0.1303779035806656 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - 0.0214291103184223 - -0.0119896596297622 - 0.2628045976161957 - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - -5.0938720814883709e-003 - 0.0634189471602440 - -0.0905663371086121 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - -2.5309680495411158e-003 - 0.0602977611124516 - -0.0250494703650475 - <_> - - <_> - - - - <_>7 6 4 8 -1. - <_>7 10 4 4 2. - 0 - -1.5915350522845984e-003 - -0.1217119023203850 - 0.0377379916608334 - <_> - - <_> - - - - <_>9 8 11 4 -1. - <_>9 10 11 2 2. - 0 - -0.0340307094156742 - 0.4641343057155609 - -3.5409750416874886e-003 - <_> - - <_> - - - - <_>6 6 5 10 -1. - <_>6 11 5 5 2. - 0 - 5.1074200309813023e-003 - 0.0398238301277161 - -0.1264553964138031 - <_> - - <_> - - - - <_>4 7 14 6 -1. - <_>4 9 14 2 3. - 0 - -9.6449116244912148e-003 - 0.3346425890922546 - -6.6040740348398685e-003 - <_> - - <_> - - - - <_>4 4 12 8 -1. - <_>4 4 6 4 2. - <_>10 8 6 4 2. - 0 - 0.0114228604361415 - -0.0360804200172424 - 0.1371455043554306 - <_> - - <_> - - - - <_>5 5 12 5 -1. - <_>5 5 6 5 2. - 0 - -5.1042139530181885e-003 - -0.0939868092536926 - 0.0288447793573141 - <_> - - <_> - - - - <_>1 3 15 12 -1. - <_>6 3 5 12 3. - 0 - -0.2633227109909058 - 0.4998092949390411 - -0.0101732499897480 - <_> - - <_> - - - - <_>13 3 6 17 -1. - <_>13 3 3 17 2. - 0 - -0.2455663979053497 - -0.8177834749221802 - 6.9596339017152786e-003 - <_> - - <_> - - - - <_>1 3 6 17 -1. - <_>4 3 3 17 2. - 0 - -0.2141932994127274 - -0.5104051828384399 - 9.4540230929851532e-003 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>14 4 6 3 3. - 0 - -0.0143632199615240 - -0.0910009816288948 - 0.0246466696262360 - <_> - - <_> - - - - <_>4 0 8 6 -1. - <_>4 3 8 3 2. - 0 - -1.2388969771564007e-003 - 0.1154457032680512 - -0.0495656207203865 - <_> - - <_> - - - - <_>5 4 15 3 -1. - <_>5 5 15 1 3. - 0 - 0.0210151206701994 - -0.0177658796310425 - 0.1957785934209824 - <_> - - <_> - - - - <_>0 5 8 4 -1. - <_>0 7 8 2 2. - 0 - -4.1783051565289497e-003 - -0.1117286011576653 - 0.0446254499256611 - <_> - - <_> - - - - <_>18 2 2 13 -1. - <_>18 2 1 13 2. - 0 - 2.0896939095109701e-003 - -0.0339887291193008 - 0.0655395016074181 - <_> - - <_> - - - - <_>0 2 2 13 -1. - <_>1 2 1 13 2. - 0 - 0.0164100602269173 - -0.0203732699155808 - 0.2533153891563416 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - -0.0642668828368187 - -0.6588014960289002 - 3.4550630953162909e-003 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - 6.8898178869858384e-004 - 0.0676432475447655 - -0.0875562429428101 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 5.6662331335246563e-003 - 0.0306383091956377 - -0.1189554035663605 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - -0.0437781214714050 - -0.2830913066864014 - 0.0177136305719614 - <_> - - <_> - - - - <_>4 8 13 2 -1. - <_>4 9 13 1 2. - 0 - 3.4748481120914221e-003 - -0.0957871228456497 - 0.0426304005086422 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 14 16 2 2. - 0 - -0.0116739403456450 - -0.1050257012248039 - 0.0509038902819157 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - -3.4004659391939640e-003 - 0.1047071963548660 - -0.0409391410648823 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 2.7091780211776495e-003 - -0.0605246014893055 - 0.1397895067930222 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - -0.0174393001943827 - -0.3239116966724396 - 0.0146302497014403 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - -0.0125983301550150 - -0.2068262994289398 - 0.0255018696188927 - <_> - - <_> - - - - <_>6 2 8 6 -1. - <_>6 4 8 2 3. - 0 - 0.0187558699399233 - -0.0479259602725506 - 0.1086438000202179 - <_> - - <_> - - - - <_>6 5 7 4 -1. - <_>6 7 7 2 2. - 0 - -4.2074159719049931e-003 - -0.0820778086781502 - 0.0636477693915367 - <_> - - <_> - - - - <_>9 5 10 9 -1. - <_>9 8 10 3 3. - 0 - -1.6427719674538821e-004 - 0.1012039035558701 - -0.0340679287910461 - <_> - - <_> - - - - <_>0 10 18 4 -1. - <_>0 10 9 2 2. - <_>9 12 9 2 2. - 0 - 0.0438476912677288 - 6.0980222187936306e-003 - -0.8368598222732544 - <_> - - <_> - - - - <_>8 7 6 9 -1. - <_>10 7 2 9 3. - 0 - -0.0392846800386906 - 0.2825056016445160 - -0.0223892591893673 - <_> - - <_> - - - - <_>6 4 4 7 -1. - <_>8 4 2 7 2. - 0 - 0.0385509096086025 - 0.0155704896897078 - -0.3397862017154694 - <_> - - <_> - - - - <_>9 6 9 10 -1. - <_>12 6 3 10 3. - 0 - -0.0691770315170288 - 0.1225832030177116 - -0.0178501792252064 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -1.9251030171290040e-003 - -0.1068774983286858 - 0.0463795103132725 - <_> - - <_> - - - - <_>10 14 10 6 -1. - <_>15 14 5 3 2. - <_>10 17 5 3 2. - 0 - -8.6635202169418335e-003 - 0.0964127480983734 - -0.0175632499158382 - <_> - - <_> - - - - <_>0 6 5 12 -1. - <_>0 10 5 4 3. - 0 - 0.1339350938796997 - 6.3692941330373287e-003 - -0.7017058730125427 - <_> - - <_> - - - - <_>9 6 9 10 -1. - <_>12 6 3 10 3. - 0 - 0.0410823486745358 - -0.0110775697976351 - 0.1346375048160553 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1491145044565201 - 9.5263421535491943e-003 - -0.5087255239486694 - <_> - - <_> - - - - <_>6 13 10 7 -1. - <_>6 13 5 7 2. - 0 - -5.2500818856060505e-003 - 0.0700255781412125 - -0.0428802706301212 - <_> - - <_> - - - - <_>0 2 6 17 -1. - <_>3 2 3 17 2. - 0 - 0.0228235702961683 - -0.0418840497732162 - 0.1177031993865967 - <_> - - <_> - - - - <_>10 14 9 5 -1. - <_>13 14 3 5 3. - 0 - -8.5306530818343163e-003 - 0.0612221397459507 - -0.0249445494264364 - <_> - - <_> - - - - <_>1 14 9 5 -1. - <_>4 14 3 5 3. - 0 - 0.0119717298075557 - 0.0396627709269524 - -0.1626774072647095 - <_> - - <_> - - - - <_>7 13 7 6 -1. - <_>7 15 7 2 3. - 0 - -0.0389382690191269 - 0.2574352025985718 - -0.0163562390953302 - <_> - - <_> - - - - <_>1 14 7 6 -1. - <_>1 16 7 2 3. - 0 - -0.0217063892632723 - -0.3199867904186249 - 0.0171352904289961 - <_> - - <_> - - - - <_>12 10 8 6 -1. - <_>12 12 8 2 3. - 0 - 6.6900630481541157e-003 - 0.0261018499732018 - -0.1098072975873947 - <_> - - <_> - - - - <_>2 6 9 9 -1. - <_>5 6 3 9 3. - 0 - -0.0722708329558373 - 0.1943113058805466 - -0.0260443594306707 - <_> - - <_> - - - - <_>12 10 7 6 -1. - <_>12 12 7 2 3. - 0 - -6.7073688842356205e-003 - -0.1774785071611404 - 0.0458629988133907 - <_> - - <_> - - - - <_>3 2 4 12 -1. - <_>5 2 2 12 2. - 0 - 0.0550193600356579 - -8.3471573889255524e-003 - 0.6051154136657715 - <_> - - <_> - - - - <_>9 1 7 15 -1. - <_>9 6 7 5 3. - 0 - 0.1314264982938767 - -5.7535418309271336e-003 - 0.2916753888130188 - <_> - - <_> - - - - <_>6 10 4 7 -1. - <_>8 10 2 7 2. - 0 - -1.6564460238441825e-003 - 0.0700030326843262 - -0.0626908764243126 - <_> - - <_> - - - - <_>5 0 10 20 -1. - <_>10 0 5 10 2. - <_>5 10 5 10 2. - 0 - 0.1544540971517563 - 6.1896732077002525e-003 - -0.7432330250740051 - <_> - - <_> - - - - <_>7 10 6 10 -1. - <_>9 10 2 10 3. - 0 - -5.0357519648969173e-003 - -0.1133328974246979 - 0.0387417711317539 - <_> - - <_> - - - - <_>12 7 7 4 -1. - <_>12 9 7 2 2. - 0 - 2.2772569209337234e-003 - -0.1134053021669388 - 0.0213194005191326 - <_> - - <_> - - - - <_>2 7 16 4 -1. - <_>2 7 8 2 2. - <_>10 9 8 2 2. - 0 - 3.3173530828207731e-003 - 0.0442733317613602 - -0.1045982986688614 - <_> - - <_> - - - - <_>5 10 12 10 -1. - <_>5 10 6 10 2. - 0 - -0.0296928007155657 - 0.0924837663769722 - -0.0233426094055176 - <_> - - <_> - - - - <_>6 1 2 16 -1. - <_>6 9 2 8 2. - 0 - 0.0629378408193588 - -0.0129982801154256 - 0.3888793885707855 - <_> - - <_> - - - - <_>6 2 12 10 -1. - <_>6 7 12 5 2. - 0 - 3.6641359329223633e-003 - 0.0320998206734657 - -0.0396479889750481 - <_> - - <_> - - - - <_>2 4 14 6 -1. - <_>2 4 7 3 2. - <_>9 7 7 3 2. - 0 - 4.4782999902963638e-003 - -0.0457013286650181 - 0.1069701015949249 - <_> - - <_> - - - - <_>5 0 11 12 -1. - <_>5 4 11 4 3. - 0 - 1.8147319788113236e-003 - -0.0328718200325966 - 0.1064793989062309 - <_> - - <_> - - - - <_>7 1 6 12 -1. - <_>7 5 6 4 3. - 0 - 4.8941639252007008e-003 - 0.0279110092669725 - -0.2172559052705765 - <_> - - <_> - - - - <_>9 8 11 4 -1. - <_>9 10 11 2 2. - 0 - -4.4425828382372856e-003 - -0.1347015053033829 - 0.0107814101502299 - <_> - - <_> - - - - <_>0 8 11 4 -1. - <_>0 10 11 2 2. - 0 - -0.0254934001713991 - 0.6837146878242493 - -7.7452720142900944e-003 - <_> - - <_> - - - - <_>1 8 19 6 -1. - <_>1 11 19 3 2. - 0 - 0.0278354492038488 - 0.0241442993283272 - -0.1517059952020645 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>7 4 6 4 2. - 0 - 7.5548859313130379e-003 - -0.0476434007287025 - 0.1192577034235001 - <_> - - <_> - - - - <_>5 3 15 2 -1. - <_>5 4 15 1 2. - 0 - 0.0103296097368002 - 0.0186468102037907 - -0.1612257063388825 - <_> - - <_> - - - - <_>2 7 14 6 -1. - <_>2 9 14 2 3. - 0 - -0.0123933898285031 - 0.6030492186546326 - -7.7566630207002163e-003 - <_> - - <_> - - - - <_>3 0 17 6 -1. - <_>3 2 17 2 3. - 0 - 0.0138337695971131 - -0.0276172999292612 - 0.0512668788433075 - <_> - - <_> - - - - <_>0 0 17 6 -1. - <_>0 2 17 2 3. - 0 - -0.0256693195551634 - 0.2380135953426361 - -0.0239719096571207 - <_> - - <_> - - - - <_>13 2 7 4 -1. - <_>13 4 7 2 2. - 0 - -5.2043660543859005e-003 - -0.1072179004549980 - 0.0266450494527817 - <_> - - <_> - - - - <_>0 2 7 4 -1. - <_>0 4 7 2 2. - 0 - 3.4628969151526690e-003 - 0.0543134100735188 - -0.1345832049846649 - <_> - - <_> - - - - <_>8 1 12 10 -1. - <_>14 1 6 5 2. - <_>8 6 6 5 2. - 0 - -0.0192206799983978 - 0.0729963928461075 - -0.0406521111726761 - <_> - - <_> - - - - <_>2 1 4 8 -1. - <_>2 5 4 4 2. - 0 - -2.5009829550981522e-003 - -0.0776712968945503 - 0.0590965412557125 - <_> - - <_> - - - - <_>5 1 11 10 -1. - <_>5 6 11 5 2. - 0 - -8.5285156965255737e-003 - 0.0490508116781712 - -0.0640783533453941 - <_> - - <_> - - - - <_>3 9 10 6 -1. - <_>3 9 5 3 2. - <_>8 12 5 3 2. - 0 - 4.3327538296580315e-003 - 0.0252210106700659 - -0.1935898065567017 - <_> - - <_> - - - - <_>12 7 7 4 -1. - <_>12 9 7 2 2. - 0 - 0.0365959703922272 - -0.0162625908851624 - 0.1565123945474625 - <_> - - <_> - - - - <_>2 7 12 8 -1. - <_>6 7 4 8 3. - 0 - -1.1795730097219348e-003 - -0.0724680721759796 - 0.0704494863748550 - <_> - - <_> - - - - <_>10 10 8 4 -1. - <_>10 10 4 4 2. - 0 - -0.0139758298173547 - -0.1178947016596794 - 0.0212920494377613 - <_> - - <_> - - - - <_>2 10 8 4 -1. - <_>6 10 4 4 2. - 0 - -1.3828700175508857e-003 - 0.0792835429310799 - -0.0951041206717491 - <_> - - <_> - - - - <_>3 10 16 3 -1. - <_>3 10 8 3 2. - 0 - -2.9435830656439066e-003 - 0.0703684315085411 - -0.0332179106771946 - <_> - - <_> - - - - <_>1 11 6 5 -1. - <_>4 11 3 5 2. - 0 - 9.5262555405497551e-003 - -0.0297336205840111 - 0.1667045950889587 - <_> - - <_> - - - - <_>10 7 9 9 -1. - <_>13 7 3 9 3. - 0 - -0.0901142731308937 - -0.1662537008523941 - 8.6199166253209114e-003 - <_> - - <_> - - - - <_>1 7 9 9 -1. - <_>4 7 3 9 3. - 0 - -1.2089919764548540e-003 - 0.0810838565230370 - -0.0730291232466698 - <_> - - <_> - - - - <_>5 5 12 5 -1. - <_>5 5 6 5 2. - 0 - -0.1419996023178101 - -1. - 2.2284830920398235e-003 - <_> - - <_> - - - - <_>3 5 12 5 -1. - <_>9 5 6 5 2. - 0 - 8.0690719187259674e-003 - 0.0474122203886509 - -0.1017893031239510 - <_> - - <_> - - - - <_>2 3 16 2 -1. - <_>2 3 8 2 2. - 0 - -4.7410889528691769e-003 - 0.1205111965537071 - -0.0499574802815914 - <_> - - <_> - - - - <_>2 8 7 6 -1. - <_>2 10 7 2 3. - 0 - -1.6977200284600258e-003 - -0.2417144030332565 - 0.0195343699306250 - <_> - - <_> - - - - <_>7 8 9 6 -1. - <_>7 10 9 2 3. - 0 - -2.8892089612782001e-003 - 0.2572799026966095 - -0.0116250598803163 - <_> - - <_> - - - - <_>3 0 3 15 -1. - <_>4 0 1 15 3. - 0 - -1.5177440363913774e-003 - -0.0987841933965683 - 0.0467061288654804 - <_> - - <_> - - - - <_>3 10 16 3 -1. - <_>3 10 8 3 2. - 0 - 0.1419731974601746 - -2.5096370372921228e-003 - 0.7545061111450195 - <_> - - <_> - - - - <_>1 10 16 3 -1. - <_>9 10 8 3 2. - 0 - 0.0975179374217987 - -6.9059049710631371e-003 - 0.6518443226814270 - <_> - - <_> - - - - <_>12 0 8 19 -1. - <_>12 0 4 19 2. - 0 - 0.0135673796758056 - -0.0763251930475235 - 0.0880545824766159 - <_> - - <_> - - - - <_>0 0 8 19 -1. - <_>4 0 4 19 2. - 0 - 0.0809814631938934 - 0.0155581096187234 - -0.3460162878036499 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - -4.7192731872200966e-003 - 0.0816200226545334 - -0.0460722893476486 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.0368969999253750e-003 - -0.0448176302015781 - 0.1286139041185379 - <_> - - <_> - - - - <_>6 14 14 3 -1. - <_>6 15 14 1 3. - 0 - -1.7878509825095534e-003 - 0.0437313318252563 - -0.0449959486722946 - <_> - - <_> - - - - <_>0 12 16 4 -1. - <_>0 12 8 2 2. - <_>8 14 8 2 2. - 0 - -7.1685528382658958e-003 - -0.1359799951314926 - 0.0387969911098480 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>13 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0674608871340752 - -0.2926574051380158 - 3.5135280340909958e-003 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>1 14 6 3 2. - <_>7 17 6 3 2. - 0 - -0.0155985001474619 - 0.2310566008090973 - -0.0224050693213940 - <_> - - <_> - - - - <_>3 3 14 14 -1. - <_>10 3 7 7 2. - <_>3 10 7 7 2. - 0 - -0.0210264790803194 - -0.1528383046388626 - 0.0315314494073391 - <_> - - <_> - - - - <_>3 6 6 12 -1. - <_>5 6 2 12 3. - 0 - -0.1055836006999016 - -0.6836603879928589 - 6.8997950293123722e-003 - <_> - - <_> - - - - <_>5 12 12 6 -1. - <_>9 12 4 6 3. - 0 - -3.6966579500585794e-003 - 0.0343151502311230 - -0.0489227995276451 - <_> - - <_> - - - - <_>1 8 14 6 -1. - <_>1 8 7 3 2. - <_>8 11 7 3 2. - 0 - -6.0826627304777503e-004 - -0.0526384301483631 - 0.0895469486713409 - <_> - - <_> - - - - <_>8 7 12 10 -1. - <_>14 7 6 5 2. - <_>8 12 6 5 2. - 0 - -0.0289365407079458 - 0.0418184809386730 - -0.0138181699439883 - <_> - - <_> - - - - <_>0 7 12 10 -1. - <_>0 7 6 5 2. - <_>6 12 6 5 2. - 0 - -5.8082528412342072e-003 - 0.0678747966885567 - -0.0855787992477417 - <_> - - <_> - - - - <_>9 2 6 18 -1. - <_>12 2 3 9 2. - <_>9 11 3 9 2. - 0 - -0.0460953786969185 - -0.1258478015661240 - 0.0204669702798128 - <_> - - <_> - - - - <_>1 10 8 10 -1. - <_>1 10 4 5 2. - <_>5 15 4 5 2. - 0 - 0.0529729202389717 - -0.0124532599002123 - 0.3456504940986633 - <_> - - <_> - - - - <_>4 14 12 4 -1. - <_>4 16 12 2 2. - 0 - 0.0493515990674496 - 0.0109012397006154 - -0.4850698113441467 - <_> - - <_> - - - - <_>5 13 6 7 -1. - <_>7 13 2 7 3. - 0 - 0.0443778000771999 - 9.9294837564229965e-003 - -0.4387789964675903 - <_> - - <_> - - - - <_>5 2 15 5 -1. - <_>10 2 5 5 3. - 0 - -0.1146489009261131 - 0.2687459886074066 - -9.2000560835003853e-003 - <_> - - <_> - - - - <_>5 4 9 14 -1. - <_>5 11 9 7 2. - 0 - 0.1688783019781113 - 5.7101310230791569e-003 - -0.8597288131713867 - <_> - - <_> - - - - <_>8 0 11 4 -1. - <_>8 2 11 2 2. - 0 - 0.0511980988085270 - -8.5723921656608582e-003 - 0.1339516937732697 - <_> - - <_> - - - - <_>0 14 16 6 -1. - <_>0 16 16 2 3. - 0 - -3.0789880547672510e-003 - -0.1033876016736031 - 0.0434594787657261 - <_> - - <_> - - - - <_>10 14 8 6 -1. - <_>10 16 8 2 3. - 0 - 0.0472231283783913 - 8.1934239715337753e-003 - -0.4380340874195099 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -7.6270569115877151e-003 - 0.1871389001607895 - -0.0246602501720190 - <_> - - <_> - - - - <_>5 8 15 3 -1. - <_>5 9 15 1 3. - 0 - 5.4106907919049263e-003 - 0.0410998314619064 - -0.0788682326674461 - <_> - - <_> - - - - <_>0 8 19 3 -1. - <_>0 9 19 1 3. - 0 - -1.4900229871273041e-003 - -0.2011504024267197 - 0.0318981595337391 - <_> - - <_> - - - - <_>8 16 8 4 -1. - <_>8 16 4 4 2. - 0 - -0.0838316082954407 - 0.5801793932914734 - -5.2973427809774876e-003 - <_> - - <_> - - - - <_>4 16 8 4 -1. - <_>8 16 4 4 2. - 0 - 6.2233800999820232e-003 - -0.0397860594093800 - 0.1228395029902458 - <_> - - <_> - - - - <_>9 5 10 9 -1. - <_>9 8 10 3 3. - 0 - 0.1147508025169373 - -0.0119754197075963 - 0.2158671021461487 - <_> - - <_> - - - - <_>1 5 10 9 -1. - <_>1 8 10 3 3. - 0 - -1.5253260498866439e-003 - 0.1380452960729599 - -0.0399418808519840 - <_> - - <_> - - - - <_>4 7 14 2 -1. - <_>4 7 7 2 2. - 0 - -5.2878521382808685e-003 - -0.1279065012931824 - 0.0328935608267784 - <_> - - <_> - - - - <_>2 7 13 2 -1. - <_>2 8 13 1 2. - 0 - 8.9670647867023945e-004 - -0.1248105987906456 - 0.0445442497730255 - <_> - - <_> - - - - <_>6 5 8 4 -1. - <_>6 7 8 2 2. - 0 - 0.0384216606616974 - 7.7155791223049164e-003 - -0.6557546854019165 - <_> - - <_> - - - - <_>5 12 9 5 -1. - <_>8 12 3 5 3. - 0 - -9.3785318313166499e-004 - 0.0556085109710693 - -0.0898769125342369 - <_> - - <_> - - - - <_>3 6 14 3 -1. - <_>3 7 14 1 3. - 0 - 1.9965849351137877e-003 - -0.0252976100891829 - 0.1941318064928055 - <_> - - <_> - - - - <_>7 2 4 12 -1. - <_>7 6 4 4 3. - 0 - 4.5782068627886474e-004 - 0.0390891991555691 - -0.1290857046842575 - <_> - - <_> - - - - <_>2 4 16 4 -1. - <_>2 6 16 2 2. - 0 - 3.8373940624296665e-003 - -0.0287488698959351 - 0.1942975074052811 - <_> - - <_> - - - - <_>1 4 9 4 -1. - <_>1 6 9 2 2. - 0 - 3.7142829387448728e-004 - 0.0382723584771156 - -0.1375918984413147 - <_> - - <_> - - - - <_>9 4 11 4 -1. - <_>9 6 11 2 2. - 0 - 7.5116259977221489e-003 - -0.0144611299037933 - 0.1265694946050644 - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - -0.0503628402948380 - 0.3518357872962952 - -0.0140518601983786 - <_> - - <_> - - - - <_>1 5 18 3 -1. - <_>7 5 6 3 3. - 0 - 0.0399216413497925 - 0.0272804293781519 - -0.1995819956064224 - <_> - - <_> - - - - <_>1 0 15 7 -1. - <_>6 0 5 7 3. - 0 - 0.2260525971651077 - -6.8001961335539818e-003 - 0.7300689816474915 - <_> - - <_> - - - - <_>12 0 5 15 -1. - <_>12 5 5 5 3. - 0 - 0.1108177974820137 - 4.3370737694203854e-003 - -0.8682916164398193 - <_> - - <_> - - - - <_>3 0 5 15 -1. - <_>3 5 5 5 3. - 0 - -9.7494889050722122e-003 - -0.0637406632304192 - 0.0845379978418350 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - -2.2887689992785454e-003 - 0.0996540188789368 - -0.0415654182434082 - <_> - - <_> - - - - <_>8 3 4 7 -1. - <_>10 3 2 7 2. - 0 - 2.0008319988846779e-003 - -0.0556506998836994 - 0.1070986986160278 - <_> - - <_> - - - - <_>4 6 12 11 -1. - <_>8 6 4 11 3. - 0 - -0.0151600502431393 - -0.1409876048564911 - 0.0387415997684002 - <_> - - <_> - - - - <_>1 7 18 4 -1. - <_>1 9 18 2 2. - 0 - -6.3132969662547112e-003 - -1. - 4.4605308212339878e-003 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>10 5 2 8 3. - 0 - -0.0139700099825859 - 0.1248108968138695 - -0.0214258302003145 - <_> - - <_> - - - - <_>7 2 6 5 -1. - <_>10 2 3 5 2. - 0 - -0.0443212799727917 - -0.5334007143974304 - 0.0101652396842837 - <_> - - <_> - - - - <_>9 0 4 7 -1. - <_>9 0 2 7 2. - 0 - 1.4885979471728206e-003 - -0.0488686002790928 - 0.0360779017210007 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - 0.0651396811008453 - 7.6331058517098427e-003 - -0.5878164172172546 - <_> - - <_> - - - - <_>13 0 7 6 -1. - <_>13 2 7 2 3. - 0 - -0.0207414105534554 - -0.2965827882289887 - 0.0186228007078171 - -1.2940989732742310 - 40 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 8 4 -1. - <_>5 1 4 4 2. - 0 - 0.0135756898671389 - -0.1424959003925324 - 0.2333762049674988 - <_> - - <_> - - - - <_>7 4 7 6 -1. - <_>7 6 7 2 3. - 0 - -7.5882389210164547e-003 - 0.0864644795656204 - -0.2395431995391846 - <_> - - <_> - - - - <_>4 5 10 12 -1. - <_>4 5 5 6 2. - <_>9 11 5 6 2. - 0 - 4.2986529879271984e-003 - 0.0502820909023285 - -0.3525012135505676 - <_> - - <_> - - - - <_>8 12 11 8 -1. - <_>8 16 11 4 2. - 0 - -0.0197931192815304 - -0.1682747006416321 - 0.0437127202749252 - <_> - - <_> - - - - <_>5 5 9 5 -1. - <_>8 5 3 5 3. - 0 - 6.6613829694688320e-003 - -0.2037153989076614 - 0.0712257474660873 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 3.2715050037950277e-003 - 0.0545367188751698 - -0.2242882996797562 - <_> - - <_> - - - - <_>0 0 2 14 -1. - <_>1 0 1 14 2. - 0 - -0.0361433215439320 - 0.5504488945007324 - -0.0235972106456757 - <_> - - <_> - - - - <_>11 9 3 10 -1. - <_>11 14 3 5 2. - 0 - 3.1145319808274508e-003 - 0.0220494307577610 - -0.3010942935943604 - <_> - - <_> - - - - <_>3 17 13 3 -1. - <_>3 18 13 1 3. - 0 - 8.9540961198508739e-004 - -0.1227985024452210 - 0.1075142025947571 - <_> - - <_> - - - - <_>6 10 13 3 -1. - <_>6 11 13 1 3. - 0 - 8.0573331797495484e-004 - -0.0875877812504768 - 0.0546320490539074 - <_> - - <_> - - - - <_>1 2 18 6 -1. - <_>1 2 9 3 2. - <_>10 5 9 3 2. - 0 - -6.5726130269467831e-003 - -0.1564987003803253 - 0.0765607580542564 - <_> - - <_> - - - - <_>6 1 12 8 -1. - <_>12 1 6 4 2. - <_>6 5 6 4 2. - 0 - 2.2269350010901690e-003 - 0.0294907800853252 - -0.0592101998627186 - <_> - - <_> - - - - <_>4 1 12 8 -1. - <_>4 1 6 4 2. - <_>10 5 6 4 2. - 0 - 6.2076752074062824e-003 - 0.0757273435592651 - -0.1767532974481583 - <_> - - <_> - - - - <_>4 3 13 3 -1. - <_>4 4 13 1 3. - 0 - 6.0021011158823967e-003 - -0.0783538073301315 - 0.1449289023876190 - <_> - - <_> - - - - <_>1 6 12 4 -1. - <_>5 6 4 4 3. - 0 - 0.0119963400065899 - 0.0286440309137106 - -0.3198246955871582 - <_> - - <_> - - - - <_>14 2 6 5 -1. - <_>14 2 3 5 2. - 0 - 6.7174229770898819e-003 - -0.1073990017175674 - 0.1310632973909378 - <_> - - <_> - - - - <_>3 12 13 2 -1. - <_>3 13 13 1 2. - 0 - 5.7567027397453785e-004 - -0.0641267970204353 - 0.1629354059696198 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - 3.9552329108119011e-003 - 0.0373474210500717 - -0.1525357067584992 - <_> - - <_> - - - - <_>1 0 4 7 -1. - <_>3 0 2 7 2. - 0 - 1.5598450554534793e-003 - -0.0986873134970665 - 0.0987182036042213 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -8.4324590861797333e-003 - 0.2090564966201782 - -0.0604840181767941 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 8.7580326944589615e-003 - 0.0506034307181835 - -0.2184547036886215 - <_> - - <_> - - - - <_>11 0 9 6 -1. - <_>14 0 3 6 3. - 0 - -0.1196575015783310 - 0.2671158909797669 - -7.4574039317667484e-003 - <_> - - <_> - - - - <_>6 9 3 10 -1. - <_>6 14 3 5 2. - 0 - 2.0653149113059044e-003 - 0.0351948104798794 - -0.2523075044155121 - <_> - - <_> - - - - <_>10 9 6 5 -1. - <_>10 9 3 5 2. - 0 - -5.7491107145324349e-004 - 0.0824242234230042 - -0.1083047986030579 - <_> - - <_> - - - - <_>6 7 3 12 -1. - <_>6 13 3 6 2. - 0 - -6.7591401748359203e-003 - -0.1370418965816498 - 0.0701543688774109 - <_> - - <_> - - - - <_>11 0 9 6 -1. - <_>14 0 3 6 3. - 0 - 0.0182107407599688 - -0.0254077706485987 - 0.1012372970581055 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>3 0 3 6 3. - 0 - -0.0880068466067314 - 0.3663871884346008 - -0.0308931805193424 - <_> - - <_> - - - - <_>4 6 12 3 -1. - <_>4 6 6 3 2. - 0 - -4.4944360852241516e-003 - -0.1575381010770798 - 0.0600706301629543 - <_> - - <_> - - - - <_>6 4 6 8 -1. - <_>8 4 2 8 3. - 0 - -6.3741360791027546e-003 - 0.2118988931179047 - -0.0395679995417595 - <_> - - <_> - - - - <_>11 0 3 13 -1. - <_>12 0 1 13 3. - 0 - -0.0310974400490522 - -0.5996552109718323 - 9.9493442103266716e-003 - <_> - - <_> - - - - <_>6 0 3 13 -1. - <_>7 0 1 13 3. - 0 - 5.8496380224823952e-003 - 0.0282446891069412 - -0.2977800071239471 - <_> - - <_> - - - - <_>4 14 13 2 -1. - <_>4 15 13 1 2. - 0 - -2.2763800807297230e-003 - 0.1027041971683502 - -0.0737119913101196 - <_> - - <_> - - - - <_>1 11 7 6 -1. - <_>1 13 7 2 3. - 0 - 3.9103049784898758e-003 - 0.0524456687271595 - -0.2012391984462738 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 2.8906730003654957e-003 - -0.2169228047132492 - 0.0372945703566074 - <_> - - <_> - - - - <_>4 16 12 4 -1. - <_>8 16 4 4 3. - 0 - 4.5904931612312794e-003 - -0.0812765806913376 - 0.1101315990090370 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>11 9 3 8 2. - 0 - -0.0342458002269268 - -0.1154173016548157 - 0.0143840499222279 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>6 9 3 8 2. - 0 - -1.7881620442494750e-004 - 0.0628859773278236 - -0.1326712965965271 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - -4.0114559233188629e-003 - -0.1896172016859055 - 0.0367017686367035 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 3.1429999507963657e-003 - -0.0499151200056076 - 0.1729976981878281 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - 0.0780823528766632 - 4.7195390798151493e-003 - -0.3401587903499603 - <_> - - <_> - - - - <_>2 0 14 9 -1. - <_>2 3 14 3 3. - 0 - 0.2037094980478287 - -0.0217331405729055 - 0.3742265105247498 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - 0.0974248200654984 - -6.8117439514026046e-004 - 0.4963915944099426 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -2.6366419624537230e-003 - -0.1853210031986237 - 0.0437688305974007 - <_> - - <_> - - - - <_>9 5 4 12 -1. - <_>9 11 4 6 2. - 0 - 4.1020149365067482e-004 - 0.0278029106557369 - -0.0877069681882858 - <_> - - <_> - - - - <_>2 4 10 6 -1. - <_>2 4 5 3 2. - <_>7 7 5 3 2. - 0 - -0.0596665591001511 - -0.5687270760536194 - 0.0133886402472854 - <_> - - <_> - - - - <_>9 1 8 16 -1. - <_>13 1 4 8 2. - <_>9 9 4 8 2. - 0 - -5.1892381161451340e-003 - 0.0504994988441467 - -0.1446586996316910 - <_> - - <_> - - - - <_>2 1 14 8 -1. - <_>2 5 14 4 2. - 0 - 0.1037714034318924 - -0.0189520604908466 - 0.4110797941684723 - <_> - - <_> - - - - <_>12 10 7 6 -1. - <_>12 12 7 2 3. - 0 - -0.0140757597982883 - -0.2036736011505127 - 0.0325132794678211 - <_> - - <_> - - - - <_>0 8 6 9 -1. - <_>3 8 3 9 2. - 0 - -6.8877148441970348e-003 - 0.1240172982215881 - -0.0766171291470528 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0293458495289087 - 8.4471162408590317e-003 - -0.3465698063373566 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -8.3123557269573212e-003 - -0.1918011009693146 - 0.0385856293141842 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0644932687282562 - -0.0271588806062937 - 0.3021799921989441 - <_> - - <_> - - - - <_>0 0 16 2 -1. - <_>0 1 16 1 2. - 0 - 8.0413377145305276e-004 - -0.1044417023658752 - 0.0647219792008400 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -6.5569980069994926e-003 - -0.1065860018134117 - 0.0252384897321463 - <_> - - <_> - - - - <_>2 13 14 4 -1. - <_>2 13 7 2 2. - <_>9 15 7 2 2. - 0 - -0.0383269302546978 - -0.6850638985633850 - 9.6486946567893028e-003 - <_> - - <_> - - - - <_>7 5 9 7 -1. - <_>10 5 3 7 3. - 0 - -0.0403273291885853 - 0.1975985020399094 - -0.0251841694116592 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 6.1981407925486565e-003 - 0.0464157909154892 - -0.1717167049646378 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 0.0374655015766621 - -0.0150102796033025 - 0.0869622528553009 - <_> - - <_> - - - - <_>6 1 6 10 -1. - <_>6 6 6 5 2. - 0 - -6.0584479942917824e-003 - 0.0692427530884743 - -0.0945942029356956 - <_> - - <_> - - - - <_>0 3 20 8 -1. - <_>0 7 20 4 2. - 0 - -0.0149916997179389 - -0.1496981978416443 - 0.0465794503688812 - <_> - - <_> - - - - <_>4 0 12 8 -1. - <_>10 0 6 8 2. - 0 - 0.0647603571414948 - -0.0260891690850258 - 0.2707200944423676 - <_> - - <_> - - - - <_>2 1 18 19 -1. - <_>8 1 6 19 3. - 0 - 0.5902032852172852 - 3.9715780876576900e-003 - -0.6391807198524475 - <_> - - <_> - - - - <_>0 1 18 19 -1. - <_>6 1 6 19 3. - 0 - 0.0738922134041786 - -0.0625063329935074 - 0.1310071945190430 - <_> - - <_> - - - - <_>8 1 12 19 -1. - <_>8 1 6 19 2. - 0 - 0.4392817020416260 - 5.0452877767384052e-003 - -0.3762843906879425 - <_> - - <_> - - - - <_>0 1 12 19 -1. - <_>6 1 6 19 2. - 0 - 0.1019204035401344 - 0.0220532901585102 - -0.3340820074081421 - <_> - - <_> - - - - <_>0 0 20 10 -1. - <_>10 0 10 5 2. - <_>0 5 10 5 2. - 0 - 0.1108421981334686 - 0.0162155404686928 - -0.3490070104598999 - <_> - - <_> - - - - <_>0 4 13 3 -1. - <_>0 5 13 1 3. - 0 - 5.5628088302910328e-003 - -0.0521967113018036 - 0.1179637014865875 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -6.3897081417962909e-004 - -0.1565970033407211 - 0.0447444505989552 - <_> - - <_> - - - - <_>1 4 13 3 -1. - <_>1 5 13 1 3. - 0 - -3.5426639951765537e-003 - 0.1449057012796402 - -0.0425187088549137 - <_> - - <_> - - - - <_>13 12 7 4 -1. - <_>13 14 7 2 2. - 0 - -0.0330161601305008 - -0.3694294095039368 - 7.6470980420708656e-003 - <_> - - <_> - - - - <_>2 1 4 19 -1. - <_>4 1 2 19 2. - 0 - 0.0960508584976196 - 6.5154801122844219e-003 - -0.8782703876495361 - <_> - - <_> - - - - <_>12 10 7 6 -1. - <_>12 12 7 2 3. - 0 - -0.0495720095932484 - -0.4272302091121674 - 3.1567770056426525e-003 - <_> - - <_> - - - - <_>3 9 13 3 -1. - <_>3 10 13 1 3. - 0 - 2.5885479408316314e-004 - -0.1568966954946518 - 0.0380518287420273 - <_> - - <_> - - - - <_>4 8 14 3 -1. - <_>4 9 14 1 3. - 0 - -1.5898289857432246e-003 - -0.1884572058916092 - 0.0246300492435694 - <_> - - <_> - - - - <_>4 5 12 9 -1. - <_>4 8 12 3 3. - 0 - -1.3463890354614705e-004 - 0.1445270031690598 - -0.0441722609102726 - <_> - - <_> - - - - <_>6 15 13 3 -1. - <_>6 16 13 1 3. - 0 - 0.0116742495447397 - -0.0256763808429241 - 0.1952770948410034 - <_> - - <_> - - - - <_>0 12 7 4 -1. - <_>0 14 7 2 2. - 0 - -0.0235070008784533 - -0.3227188885211945 - 0.0185148399323225 - <_> - - <_> - - - - <_>5 2 14 18 -1. - <_>12 2 7 9 2. - <_>5 11 7 9 2. - 0 - 0.0312258005142212 - -0.0196222998201847 - 0.1457010060548782 - <_> - - <_> - - - - <_>7 5 4 12 -1. - <_>7 11 4 6 2. - 0 - 8.0607319250702858e-004 - 0.0443799905478954 - -0.1363562047481537 - <_> - - <_> - - - - <_>5 2 14 18 -1. - <_>12 2 7 9 2. - <_>5 11 7 9 2. - 0 - -0.2644588053226471 - 0.4177120029926300 - -6.3821650110185146e-003 - <_> - - <_> - - - - <_>1 2 14 18 -1. - <_>1 2 7 9 2. - <_>8 11 7 9 2. - 0 - 0.0354793816804886 - -0.0227584801614285 - 0.2694610059261322 - <_> - - <_> - - - - <_>6 10 8 10 -1. - <_>10 10 4 5 2. - <_>6 15 4 5 2. - 0 - -0.0381375998258591 - -0.3671990931034088 - 0.0187220592051744 - <_> - - <_> - - - - <_>3 5 4 8 -1. - <_>3 9 4 4 2. - 0 - 3.9108810015022755e-003 - -0.1817681938409805 - 0.0390549488365650 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>10 10 4 4 2. - <_>6 14 4 4 2. - 0 - 4.1834539733827114e-003 - 0.0486762486398220 - -0.1355886012315750 - <_> - - <_> - - - - <_>1 10 7 6 -1. - <_>1 12 7 2 3. - 0 - -0.0466414205729961 - -0.5874168276786804 - 9.8590552806854248e-003 - <_> - - <_> - - - - <_>4 14 13 3 -1. - <_>4 15 13 1 3. - 0 - 0.0119501398876309 - -0.0255060493946075 - 0.2797119915485382 - <_> - - <_> - - - - <_>6 11 6 9 -1. - <_>8 11 2 9 3. - 0 - -0.0635850727558136 - -0.7094069719314575 - 8.8691459968686104e-003 - <_> - - <_> - - - - <_>7 5 9 7 -1. - <_>10 5 3 7 3. - 0 - 9.7221415489912033e-003 - -0.0278850290924311 - 0.0546266809105873 - <_> - - <_> - - - - <_>0 10 19 6 -1. - <_>0 13 19 3 2. - 0 - -0.0161114595830441 - -0.0682654827833176 - 0.0809329673647881 - <_> - - <_> - - - - <_>4 1 12 10 -1. - <_>4 6 12 5 2. - 0 - -0.0799505114555359 - 0.2042568027973175 - -0.0343068502843380 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - 3.1421340536326170e-003 - 0.0421968810260296 - -0.1536691039800644 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 2.9253180400701240e-005 - -0.0763822570443153 - 0.0317488797008991 - <_> - - <_> - - - - <_>0 5 20 2 -1. - <_>0 6 20 1 2. - 0 - -0.0545870885252953 - -0.6489148736000061 - 9.1545386239886284e-003 - <_> - - <_> - - - - <_>2 0 17 6 -1. - <_>2 2 17 2 3. - 0 - -0.0210834201425314 - 0.1905899941921234 - -0.0246866401284933 - <_> - - <_> - - - - <_>3 14 10 6 -1. - <_>3 14 5 3 2. - <_>8 17 5 3 2. - 0 - 3.9170900708995759e-004 - -0.1057088971138001 - 0.0529467687010765 - <_> - - <_> - - - - <_>6 0 9 11 -1. - <_>9 0 3 11 3. - 0 - 0.2258882969617844 - 2.3077470250427723e-003 - -0.9260604977607727 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>2 2 2 11 3. - 0 - -0.0188999790698290 - 0.1450397074222565 - -0.0385066196322441 - <_> - - <_> - - - - <_>14 0 6 7 -1. - <_>16 0 2 7 3. - 0 - -8.7533425539731979e-003 - 0.0839588269591331 - -0.0374790988862515 - <_> - - <_> - - - - <_>0 8 9 12 -1. - <_>3 8 3 12 3. - 0 - -0.2082125991582871 - -0.6794853806495667 - 9.8609952256083488e-003 - <_> - - <_> - - - - <_>13 10 7 6 -1. - <_>13 12 7 2 3. - 0 - 0.0162700600922108 - 0.0141155803576112 - -0.1821835935115814 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - 3.0145489145070314e-003 - 0.0520137399435043 - -0.1145019009709358 - <_> - - <_> - - - - <_>14 0 6 7 -1. - <_>16 0 2 7 3. - 0 - 0.0185474492609501 - -0.0256816204637289 - 0.1645638048648834 - <_> - - <_> - - - - <_>0 0 6 7 -1. - <_>2 0 2 7 3. - 0 - 4.2732958681881428e-003 - -0.0595732405781746 - 0.1039028018712997 - <_> - - <_> - - - - <_>8 0 9 15 -1. - <_>11 0 3 15 3. - 0 - -0.0282496307045221 - -0.0781615898013115 - 0.0290642306208611 - <_> - - <_> - - - - <_>3 5 12 11 -1. - <_>7 5 4 11 3. - 0 - -0.0155386002734303 - -0.1448138058185577 - 0.0384340584278107 - <_> - - <_> - - - - <_>6 15 13 3 -1. - <_>6 16 13 1 3. - 0 - 3.8620950654149055e-003 - -0.0387453809380531 - 0.0981835275888443 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - 0.0152533696964383 - 0.0179465003311634 - -0.3094803094863892 - <_> - - <_> - - - - <_>7 5 9 7 -1. - <_>10 5 3 7 3. - 0 - -4.2140888981521130e-003 - 0.0575215704739094 - -0.0277824308723211 - <_> - - <_> - - - - <_>7 6 3 14 -1. - <_>8 6 1 14 3. - 0 - -2.1610679104924202e-003 - 0.1061744987964630 - -0.0594112500548363 - <_> - - <_> - - - - <_>5 1 13 3 -1. - <_>5 2 13 1 3. - 0 - -1.8687519477680326e-003 - -0.1280768960714340 - 0.0477816388010979 - <_> - - <_> - - - - <_>8 1 3 13 -1. - <_>9 1 1 13 3. - 0 - -6.2083022203296423e-004 - 0.1172534972429276 - -0.0478611998260021 - <_> - - <_> - - - - <_>9 6 4 14 -1. - <_>11 6 2 7 2. - <_>9 13 2 7 2. - 0 - -2.5575871113687754e-003 - 0.0579006485641003 - -0.0840368568897247 - <_> - - <_> - - - - <_>6 9 8 10 -1. - <_>6 9 4 5 2. - <_>10 14 4 5 2. - 0 - 4.1207410395145416e-003 - 0.0542397797107697 - -0.1261114031076431 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0175257790833712 - 0.0287927500903606 - -0.1979317069053650 - <_> - - <_> - - - - <_>0 15 14 5 -1. - <_>7 15 7 5 2. - 0 - -0.0190124902874231 - 0.1144431978464127 - -0.0668130517005920 - <_> - - <_> - - - - <_>12 12 8 5 -1. - <_>12 12 4 5 2. - 0 - 9.5198452472686768e-003 - -0.0391056388616562 - 0.0885889828205109 - <_> - - <_> - - - - <_>0 14 10 6 -1. - <_>0 16 10 2 3. - 0 - 7.7857482247054577e-003 - 0.0479038506746292 - -0.1194128021597862 - <_> - - <_> - - - - <_>4 16 14 4 -1. - <_>4 18 14 2 2. - 0 - -2.5355129037052393e-003 - 0.0613774992525578 - -0.0515763908624649 - <_> - - <_> - - - - <_>6 1 6 18 -1. - <_>8 1 2 18 3. - 0 - 0.1388667970895767 - 7.1258218958973885e-003 - -0.7507606148719788 - <_> - - <_> - - - - <_>6 14 14 2 -1. - <_>6 15 14 1 2. - 0 - -3.0958889983594418e-003 - 0.0734322667121887 - -0.0404091812670231 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 4.7118910588324070e-003 - 0.0223742704838514 - -0.2388508021831513 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 6.3587618060410023e-003 - 0.0536843799054623 - -0.1339824050664902 - <_> - - <_> - - - - <_>3 0 14 20 -1. - <_>10 0 7 20 2. - 0 - 0.0683670118451118 - -0.0361039191484451 - 0.1741008013486862 - <_> - - <_> - - - - <_>8 10 4 7 -1. - <_>8 10 2 7 2. - 0 - -3.2802459318190813e-003 - -0.1460307985544205 - 0.0482151396572590 - <_> - - <_> - - - - <_>4 5 9 7 -1. - <_>7 5 3 7 3. - 0 - -0.0664302706718445 - 0.4673899114131928 - -0.0131403803825378 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0422740690410137 - -0.6325333118438721 - 0.0103594399988651 - <_> - - <_> - - - - <_>5 3 6 13 -1. - <_>8 3 3 13 2. - 0 - -1.0691370116546750e-003 - -0.1146982982754707 - 0.0450481213629246 - <_> - - <_> - - - - <_>7 12 6 8 -1. - <_>7 12 3 8 2. - 0 - 0.0542354695498943 - -0.0198096092790365 - 0.3143073022365570 - <_> - - <_> - - - - <_>4 9 6 5 -1. - <_>7 9 3 5 2. - 0 - -7.2852471930673346e-006 - 0.0580512508749962 - -0.1024617031216621 - <_> - - <_> - - - - <_>11 4 4 10 -1. - <_>11 4 2 10 2. - 0 - 0.0208933092653751 - 0.0156088098883629 - -0.2154573947191238 - <_> - - <_> - - - - <_>0 11 12 6 -1. - <_>4 11 4 6 3. - 0 - -0.0537651814520359 - 0.2055923938751221 - -0.0325259193778038 - <_> - - <_> - - - - <_>11 4 4 10 -1. - <_>11 4 2 10 2. - 0 - -0.0159726701676846 - -0.1711989045143127 - 0.0147738298401237 - <_> - - <_> - - - - <_>5 4 4 10 -1. - <_>7 4 2 10 2. - 0 - -0.0145914098247886 - -0.2304601967334747 - 0.0233450103551149 - <_> - - <_> - - - - <_>6 14 14 2 -1. - <_>6 15 14 1 2. - 0 - 2.4016639217734337e-003 - -0.0282724294811487 - 0.0951242372393608 - <_> - - <_> - - - - <_>0 14 14 2 -1. - <_>0 15 14 1 2. - 0 - -0.0204306896775961 - 0.4065555930137634 - -0.0162125397473574 - <_> - - <_> - - - - <_>15 2 5 12 -1. - <_>15 6 5 4 3. - 0 - 0.0819267928600311 - 8.7937163189053535e-003 - -0.4021030068397522 - <_> - - <_> - - - - <_>0 2 5 12 -1. - <_>0 6 5 4 3. - 0 - -0.0128928497433662 - -0.1194692999124527 - 0.0450221300125122 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>16 12 4 7 2. - 0 - 0.0947126820683479 - -0.0107600800693035 - 0.2169398069381714 - <_> - - <_> - - - - <_>0 14 12 6 -1. - <_>0 14 6 3 2. - <_>6 17 6 3 2. - 0 - 4.0901689790189266e-003 - -0.0845926031470299 - 0.0704576969146729 - <_> - - <_> - - - - <_>16 5 4 14 -1. - <_>16 12 4 7 2. - 0 - -0.1249653995037079 - 0.2827695012092590 - -4.2760102078318596e-003 - <_> - - <_> - - - - <_>0 5 4 14 -1. - <_>0 12 4 7 2. - 0 - 0.0157581698149443 - -0.0489265881478786 - 0.1238022968173027 - <_> - - <_> - - - - <_>12 12 8 5 -1. - <_>12 12 4 5 2. - 0 - -5.2818129770457745e-003 - 0.0618364401161671 - -0.0367129407823086 - <_> - - <_> - - - - <_>0 12 8 5 -1. - <_>4 12 4 5 2. - 0 - 8.6735859513282776e-003 - -0.0473722405731678 - 0.1580915004014969 - <_> - - <_> - - - - <_>12 0 3 14 -1. - <_>13 0 1 14 3. - 0 - -5.2273580804467201e-003 - -0.1169456988573074 - 0.0291564408689737 - <_> - - <_> - - - - <_>5 12 5 8 -1. - <_>5 16 5 4 2. - 0 - 0.0618318282067776 - 8.0447606742382050e-003 - -0.6853052973747253 - <_> - - <_> - - - - <_>18 2 2 14 -1. - <_>18 9 2 7 2. - 0 - 0.0668156072497368 - -8.4813889116048813e-003 - 0.1452376991510391 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>6 3 8 3 2. - 0 - -0.1006200015544891 - 0.7460582852363586 - -6.8016690202057362e-003 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>14 4 6 3 3. - 0 - -0.0147515395656228 - -0.1489351987838745 - 0.0395791903138161 - <_> - - <_> - - - - <_>3 4 14 6 -1. - <_>3 4 7 3 2. - <_>10 7 7 3 2. - 0 - 0.0346165895462036 - -0.0207490995526314 - 0.2854982018470764 - <_> - - <_> - - - - <_>10 5 9 6 -1. - <_>10 7 9 2 3. - 0 - -0.1296638995409012 - -0.5544648766517639 - 4.6082548797130585e-003 - <_> - - <_> - - - - <_>0 13 8 5 -1. - <_>4 13 4 5 2. - 0 - 0.0740355104207993 - 5.3174998611211777e-003 - -0.8414952754974365 - <_> - - <_> - - - - <_>12 0 6 18 -1. - <_>15 0 3 9 2. - <_>12 9 3 9 2. - 0 - 0.1017711013555527 - -7.6451660133898258e-003 - 0.3544222116470337 - <_> - - <_> - - - - <_>2 0 6 18 -1. - <_>2 0 3 9 2. - <_>5 9 3 9 2. - 0 - 0.0896587371826172 - -9.3901483342051506e-003 - 0.5057793855667114 - <_> - - <_> - - - - <_>2 0 16 14 -1. - <_>10 0 8 7 2. - <_>2 7 8 7 2. - 0 - -0.1618074029684067 - -0.6545178294181824 - 8.7116202339529991e-003 - <_> - - <_> - - - - <_>2 0 4 16 -1. - <_>2 0 2 8 2. - <_>4 8 2 8 2. - 0 - 1.8784119747579098e-003 - 0.0520644187927246 - -0.0907419472932816 - <_> - - <_> - - - - <_>12 0 8 4 -1. - <_>12 0 4 4 2. - 0 - 1.9505689851939678e-003 - -0.0540916211903095 - 0.0355062000453472 - <_> - - <_> - - - - <_>0 0 8 4 -1. - <_>4 0 4 4 2. - 0 - -6.0789179988205433e-003 - 0.1223851963877678 - -0.0468037389218807 - <_> - - <_> - - - - <_>6 12 14 5 -1. - <_>6 12 7 5 2. - 0 - -0.2240325063467026 - -0.7772849202156067 - 2.3639709688723087e-003 - <_> - - <_> - - - - <_>0 12 14 5 -1. - <_>7 12 7 5 2. - 0 - -0.1303959041833878 - -0.2769264876842499 - 0.0215482898056507 - <_> - - <_> - - - - <_>8 1 12 5 -1. - <_>12 1 4 5 3. - 0 - 0.0725874230265617 - 0.0106212999671698 - -0.1627078056335449 - <_> - - <_> - - - - <_>0 1 12 5 -1. - <_>4 1 4 5 3. - 0 - 0.0731800422072411 - -0.0175192598253489 - 0.3369787037372589 - <_> - - <_> - - - - <_>3 10 14 4 -1. - <_>10 10 7 2 2. - <_>3 12 7 2 2. - 0 - -0.0345259793102741 - -0.5353869795799255 - 0.0103977099061012 - <_> - - <_> - - - - <_>0 14 20 4 -1. - <_>0 14 10 2 2. - <_>10 16 10 2 2. - 0 - 2.3753559216856956e-003 - 0.0519108287990093 - -0.0969595164060593 - <_> - - <_> - - - - <_>10 9 9 5 -1. - <_>13 9 3 5 3. - 0 - -6.8947779946029186e-003 - 0.0824099779129028 - -0.0230989996343851 - <_> - - <_> - - - - <_>1 9 9 5 -1. - <_>4 9 3 5 3. - 0 - -0.0947732925415039 - -0.7051069140434265 - 7.7322297729551792e-003 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 5.6327427737414837e-003 - 0.0179606806486845 - -0.0723070427775383 - <_> - - <_> - - - - <_>6 16 8 4 -1. - <_>10 16 4 4 2. - 0 - 6.6090249456465244e-003 - -0.0367010794579983 - 0.1370633989572525 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0249783992767334 - -0.1628139019012451 - 7.6992698013782501e-003 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>4 5 6 3 2. - <_>10 8 6 3 2. - 0 - -6.0882410034537315e-003 - 0.1055561974644661 - -0.0485074110329151 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0611615888774395 - 1.1127579491585493e-003 - -0.5665788054466248 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0387228094041348 - -0.5979735851287842 - 8.4153199568390846e-003 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - 6.2335198745131493e-003 - 0.0315630212426186 - -0.1876924037933350 - <_> - - <_> - - - - <_>1 1 18 5 -1. - <_>7 1 6 5 3. - 0 - 0.1693951040506363 - -0.0171837396919727 - 0.3144004940986633 - <_> - - <_> - - - - <_>9 2 10 10 -1. - <_>14 2 5 5 2. - <_>9 7 5 5 2. - 0 - 0.0858513414859772 - 5.7081878185272217e-003 - -0.4996680915355682 - <_> - - <_> - - - - <_>1 2 10 10 -1. - <_>1 2 5 5 2. - <_>6 7 5 5 2. - 0 - -0.0203150101006031 - -0.1235990002751350 - 0.0447048395872116 - <_> - - <_> - - - - <_>8 3 12 6 -1. - <_>14 3 6 3 2. - <_>8 6 6 3 2. - 0 - -4.0276069194078445e-003 - 0.0479572191834450 - -0.0971370562911034 - <_> - - <_> - - - - <_>1 5 8 4 -1. - <_>5 5 4 4 2. - 0 - -0.0392745099961758 - 0.1880427002906799 - -0.0297541990876198 - <_> - - <_> - - - - <_>0 3 20 12 -1. - <_>10 3 10 6 2. - <_>0 9 10 6 2. - 0 - -0.0211636293679476 - -0.1572490036487579 - 0.0396365299820900 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 5 5 3 2. - <_>10 8 5 3 2. - 0 - 4.0783579461276531e-003 - -0.0475628189742565 - 0.1097624972462654 - <_> - - <_> - - - - <_>9 8 6 12 -1. - <_>12 8 3 6 2. - <_>9 14 3 6 2. - 0 - 1.0180410463362932e-003 - -0.0663060918450356 - 0.0987730771303177 - <_> - - <_> - - - - <_>0 8 18 4 -1. - <_>0 8 9 2 2. - <_>9 10 9 2 2. - 0 - 2.8516049496829510e-003 - -0.0511017404496670 - 0.0969949588179588 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>10 14 7 2 2. - <_>3 16 7 2 2. - 0 - 4.8373742029070854e-003 - 0.0408665500581265 - -0.1248036026954651 - <_> - - <_> - - - - <_>5 11 5 9 -1. - <_>5 14 5 3 3. - 0 - -3.4715479705482721e-004 - 0.0417786911129951 - -0.1257454007863998 - <_> - - <_> - - - - <_>6 16 8 4 -1. - <_>6 18 8 2 2. - 0 - -6.3760261982679367e-003 - 0.1575423032045364 - -0.0416927784681320 - <_> - - <_> - - - - <_>7 4 6 12 -1. - <_>7 10 6 6 2. - 0 - -0.0125340698286891 - -0.1356544047594070 - 0.0412955693900585 - <_> - - <_> - - - - <_>9 7 7 12 -1. - <_>9 11 7 4 3. - 0 - -0.0233215503394604 - 0.1251834928989410 - -0.0134272603318095 - <_> - - <_> - - - - <_>7 7 5 9 -1. - <_>7 10 5 3 3. - 0 - 2.1691620349884033e-003 - 0.1433120071887970 - -0.0351203493773937 - <_> - - <_> - - - - <_>4 13 12 5 -1. - <_>8 13 4 5 3. - 0 - -0.0500055402517319 - 0.2150021940469742 - -0.0276284199208021 - <_> - - <_> - - - - <_>4 9 7 9 -1. - <_>4 12 7 3 3. - 0 - 0.0138181699439883 - 0.0222085006535053 - -0.2604855895042419 - <_> - - <_> - - - - <_>2 1 18 4 -1. - <_>8 1 6 4 3. - 0 - -0.1138937994837761 - -0.2643468081951141 - 5.8247619308531284e-003 - <_> - - <_> - - - - <_>7 9 6 7 -1. - <_>9 9 2 7 3. - 0 - 1.4204699546098709e-003 - -0.0715462863445282 - 0.0703791826963425 - <_> - - <_> - - - - <_>0 13 20 4 -1. - <_>0 15 20 2 2. - 0 - 0.0123296100646257 - 0.0294751301407814 - -0.1922408938407898 - <_> - - <_> - - - - <_>2 4 13 3 -1. - <_>2 5 13 1 3. - 0 - 3.4679430536925793e-003 - -0.0619209408760071 - 0.0908930897712708 - <_> - - <_> - - - - <_>9 7 7 12 -1. - <_>9 11 7 4 3. - 0 - -0.1208847984671593 - 0.4662685990333557 - -2.7361230459064245e-003 - <_> - - <_> - - - - <_>3 1 9 17 -1. - <_>6 1 3 17 3. - 0 - -0.0158275198191404 - -0.0953428372740746 - 0.0550031699240208 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -5.3695850074291229e-003 - 0.1689102053642273 - -0.0467009507119656 - <_> - - <_> - - - - <_>6 9 4 8 -1. - <_>8 9 2 8 2. - 0 - 0.0526950806379318 - -5.6889699772000313e-003 - 0.9048786163330078 - <_> - - <_> - - - - <_>5 4 14 12 -1. - <_>12 4 7 6 2. - <_>5 10 7 6 2. - 0 - -1.1397979687899351e-003 - 0.0343166813254356 - -0.0757879018783569 - <_> - - <_> - - - - <_>0 16 18 2 -1. - <_>9 16 9 2 2. - 0 - -2.8946578968316317e-003 - 0.0754823908209801 - -0.0764665529131889 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -5.1091420464217663e-003 - -0.1229495033621788 - 0.0499727502465248 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>6 0 2 8 3. - 0 - 1.8837359966710210e-003 - 0.0434064008295536 - -0.1257223039865494 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 0.0154229197651148 - 0.0158312898129225 - -0.2091739028692246 - <_> - - <_> - - - - <_>7 5 6 12 -1. - <_>7 5 3 6 2. - <_>10 11 3 6 2. - 0 - 0.0216660406440496 - -0.0247134007513523 - 0.2417166978120804 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -0.0943364128470421 - 0.8038954734802246 - -2.6913180481642485e-003 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -6.0154758393764496e-003 - -0.1323174983263016 - 0.0496137104928494 - <_> - - <_> - - - - <_>6 10 14 3 -1. - <_>6 11 14 1 3. - 0 - 0.0437753200531006 - 4.5396219938993454e-003 - -0.5873274803161621 - <_> - - <_> - - - - <_>0 10 14 3 -1. - <_>0 11 14 1 3. - 0 - 1.0561950039118528e-003 - -0.0880575627088547 - 0.0712941065430641 - <_> - - <_> - - - - <_>4 4 14 3 -1. - <_>4 5 14 1 3. - 0 - -1.6394529957324266e-003 - 0.0908108428120613 - -0.0377607010304928 - <_> - - <_> - - - - <_>0 2 15 12 -1. - <_>5 2 5 12 3. - 0 - 0.2674216032028198 - 9.4182817265391350e-003 - -0.5274013876914978 - <_> - - <_> - - - - <_>14 5 6 12 -1. - <_>14 5 3 12 2. - 0 - -0.2162933051586151 - -0.6112818717956543 - 5.2118571475148201e-003 - <_> - - <_> - - - - <_>2 1 16 16 -1. - <_>2 9 16 8 2. - 0 - -0.2697457075119019 - -0.7339445948600769 - 6.0041057877242565e-003 - <_> - - <_> - - - - <_>7 16 13 3 -1. - <_>7 17 13 1 3. - 0 - -6.0050850734114647e-003 - 0.1106709018349648 - -0.0206141993403435 - <_> - - <_> - - - - <_>3 5 13 4 -1. - <_>3 7 13 2 2. - 0 - 0.0492479391396046 - 0.0102871898561716 - -0.4958139061927795 - <_> - - <_> - - - - <_>9 9 7 4 -1. - <_>9 11 7 2 2. - 0 - 4.9235569313168526e-003 - 0.0148803601041436 - -0.1128747016191483 - <_> - - <_> - - - - <_>3 7 14 6 -1. - <_>3 9 14 2 3. - 0 - -8.2946997135877609e-003 - 0.5647606253623962 - -0.0104421498253942 - <_> - - <_> - - - - <_>9 9 7 4 -1. - <_>9 11 7 2 2. - 0 - 0.0235673300921917 - -2.9235871043056250e-003 - 0.2497925013303757 - <_> - - <_> - - - - <_>4 9 7 4 -1. - <_>4 11 7 2 2. - 0 - -0.0410409197211266 - 0.4003049135208130 - -0.0133126201108098 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>1 10 18 1 3. - 0 - -5.3690220229327679e-003 - -0.2918637096881867 - 0.0167816001921892 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - 3.6616099532693624e-003 - -0.0479209609329700 - 0.1089833974838257 - <_> - - <_> - - - - <_>14 5 6 12 -1. - <_>14 5 3 12 2. - 0 - -0.0247357897460461 - 0.0672709196805954 - -0.0162079706788063 - <_> - - <_> - - - - <_>0 5 6 12 -1. - <_>3 5 3 12 2. - 0 - 8.6064152419567108e-003 - -0.0602502003312111 - 0.1067432016134262 - <_> - - <_> - - - - <_>11 8 3 10 -1. - <_>11 13 3 5 2. - 0 - -0.0338926091790199 - -0.1979532986879349 - 0.0190149694681168 - <_> - - <_> - - - - <_>0 0 3 20 -1. - <_>1 0 1 20 3. - 0 - 0.1052203029394150 - 6.0530952177941799e-003 - -0.7523800730705261 - <_> - - <_> - - - - <_>2 0 18 11 -1. - <_>8 0 6 11 3. - 0 - -5.9583578258752823e-003 - 0.0990943834185600 - -0.0355706401169300 - <_> - - <_> - - - - <_>4 4 6 5 -1. - <_>7 4 3 5 2. - 0 - 2.7306210249662399e-003 - -0.0888798087835312 - 0.0648439899086952 - <_> - - <_> - - - - <_>6 3 14 4 -1. - <_>13 3 7 2 2. - <_>6 5 7 2 2. - 0 - 4.3243571417406201e-004 - 0.0325284898281097 - -0.0914790704846382 - <_> - - <_> - - - - <_>4 4 9 6 -1. - <_>7 4 3 6 3. - 0 - -5.2608880214393139e-003 - 0.1389617025852203 - -0.0406248196959496 - <_> - - <_> - - - - <_>8 9 9 8 -1. - <_>11 9 3 8 3. - 0 - -0.1560512930154800 - -0.7317007184028626 - 2.5103189982473850e-003 - <_> - - <_> - - - - <_>3 9 9 8 -1. - <_>6 9 3 8 3. - 0 - -0.0112459901720285 - -0.1183411031961441 - 0.0522617213428020 - <_> - - <_> - - - - <_>10 6 6 10 -1. - <_>12 6 2 10 3. - 0 - -9.2654878972098231e-004 - 0.0433507785201073 - -0.0765213593840599 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 1.5148459933698177e-003 - -0.0714858397841454 - 0.0732069164514542 - <_> - - <_> - - - - <_>6 9 9 9 -1. - <_>9 9 3 9 3. - 0 - 4.6230577863752842e-003 - 0.0202118791639805 - -0.0465659610927105 - <_> - - <_> - - - - <_>4 3 9 9 -1. - <_>7 3 3 9 3. - 0 - 0.1255514025688171 - 9.2135155573487282e-003 - -0.5483170747756958 - <_> - - <_> - - - - <_>2 2 18 9 -1. - <_>8 2 6 9 3. - 0 - 0.0407516807317734 - -0.0457712486386299 - 0.0569909997284412 - <_> - - <_> - - - - <_>0 2 16 3 -1. - <_>0 3 16 1 3. - 0 - -0.0220743492245674 - -0.3907549977302551 - 0.0116547103971243 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>10 10 5 6 2. - 0 - 0.1241291984915733 - -6.0688108205795288e-003 - 0.2637670934200287 - <_> - - <_> - - - - <_>0 0 18 9 -1. - <_>6 0 6 9 3. - 0 - 6.0741119086742401e-003 - 0.1076852008700371 - -0.0501398704946041 - <_> - - <_> - - - - <_>5 4 14 12 -1. - <_>12 4 7 6 2. - <_>5 10 7 6 2. - 0 - -0.1469414979219437 - -0.4345254898071289 - 5.5836569517850876e-003 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>6 1 6 4 3. - 0 - -0.1204646006226540 - -0.5406827926635742 - 9.8318615928292274e-003 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -9.0990159660577774e-003 - -0.1362525969743729 - 9.5357475802302361e-003 - <_> - - <_> - - - - <_>1 10 6 10 -1. - <_>1 10 3 5 2. - <_>4 15 3 5 2. - 0 - 0.0109664499759674 - -0.0313442982733250 - 0.1706863045692444 - <_> - - <_> - - - - <_>12 10 4 8 -1. - <_>12 14 4 4 2. - 0 - -0.0217633806169033 - 0.0739181786775589 - -0.0178464204072952 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>4 14 6 3 2. - <_>10 17 6 3 2. - 0 - -0.0495787896215916 - -0.5803403258323669 - 0.0100632095709443 - <_> - - <_> - - - - <_>12 10 4 8 -1. - <_>12 14 4 4 2. - 0 - -6.6796392202377319e-003 - -0.0472803004086018 - 0.0386680699884892 - <_> - - <_> - - - - <_>4 10 4 8 -1. - <_>4 14 4 4 2. - 0 - -1.0112039744853973e-003 - 0.0454120300710201 - -0.1460335999727249 - <_> - - <_> - - - - <_>4 11 14 4 -1. - <_>11 11 7 2 2. - <_>4 13 7 2 2. - 0 - 2.5813570246100426e-003 - 0.0311124809086323 - -0.1000149995088577 - <_> - - <_> - - - - <_>2 11 14 4 -1. - <_>2 11 7 2 2. - <_>9 13 7 2 2. - 0 - 2.0418369676917791e-003 - 0.0483780615031719 - -0.1472270935773850 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>12 6 5 3 2. - <_>7 9 5 3 2. - 0 - 0.0562460683286190 - 3.7779449485242367e-003 - -0.6101362705230713 - <_> - - <_> - - - - <_>3 6 10 6 -1. - <_>3 6 5 3 2. - <_>8 9 5 3 2. - 0 - -0.0261307507753372 - 0.2624058127403259 - -0.0243136007338762 - <_> - - <_> - - - - <_>9 0 6 19 -1. - <_>11 0 2 19 3. - 0 - -0.0121510298922658 - -0.0561141297221184 - 0.0297391600906849 - <_> - - <_> - - - - <_>5 0 6 19 -1. - <_>7 0 2 19 3. - 0 - -0.0510364696383476 - 0.2795574069023132 - -0.0216835103929043 - <_> - - <_> - - - - <_>4 18 14 2 -1. - <_>4 18 7 2 2. - 0 - 0.0874446183443069 - -3.7635879125446081e-003 - 0.5271136164665222 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 3.4982790239155293e-003 - 0.0566732287406921 - -0.0925546362996101 - <_> - - <_> - - - - <_>13 1 7 9 -1. - <_>13 4 7 3 3. - 0 - 0.0978617221117020 - 3.7442990578711033e-003 - -0.5423772931098938 - <_> - - <_> - - - - <_>0 1 7 9 -1. - <_>0 4 7 3 3. - 0 - -6.3886200077831745e-003 - -0.0974681675434113 - 0.0602992996573448 - <_> - - <_> - - - - <_>9 11 11 6 -1. - <_>9 13 11 2 3. - 0 - -0.1012831032276154 - -0.6517366766929627 - 3.4321940038353205e-003 - <_> - - <_> - - - - <_>0 11 11 6 -1. - <_>0 13 11 2 3. - 0 - -0.0393122285604477 - 0.2647699117660523 - -0.0269813109189272 - <_> - - <_> - - - - <_>2 5 16 10 -1. - <_>10 5 8 5 2. - <_>2 10 8 5 2. - 0 - 0.1141799017786980 - 7.5375889427959919e-003 - -0.6855363845825195 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 8.4078265354037285e-003 - -0.0309730898588896 - 0.1720042973756790 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 5 8 2 2. - 0 - -1.5489499783143401e-003 - 0.0464548096060753 - -0.0692617669701576 - <_> - - <_> - - - - <_>1 4 14 12 -1. - <_>1 4 7 6 2. - <_>8 10 7 6 2. - 0 - 2.9730569804087281e-004 - 0.0377727001905441 - -0.1376706957817078 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 2.8460770845413208e-003 - -0.0431823208928108 - 0.0996346101164818 - <_> - - <_> - - - - <_>2 17 13 3 -1. - <_>2 18 13 1 3. - 0 - 0.0491444207727909 - 5.9465290978550911e-003 - -0.8236659765243530 - <_> - - <_> - - - - <_>1 11 18 6 -1. - <_>1 13 18 2 3. - 0 - 0.0102860201150179 - 0.0285910908132792 - -0.1594199985265732 - <_> - - <_> - - - - <_>6 2 7 18 -1. - <_>6 11 7 9 2. - 0 - 0.0199762806296349 - -0.0296170301735401 - 0.1594306975603104 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 5 8 2 2. - 0 - 0.0235334094613791 - 7.5594270601868629e-003 - -0.2304113060235977 - <_> - - <_> - - - - <_>1 1 16 6 -1. - <_>1 1 8 3 2. - <_>9 4 8 3 2. - 0 - -9.0482197701931000e-003 - -0.1240869984030724 - 0.0416150018572807 - <_> - - <_> - - - - <_>16 1 4 14 -1. - <_>18 1 2 7 2. - <_>16 8 2 7 2. - 0 - -3.8635660894215107e-003 - 0.0878112167119980 - -0.0415111817419529 - <_> - - <_> - - - - <_>0 1 4 14 -1. - <_>0 1 2 7 2. - <_>2 8 2 7 2. - 0 - -2.7298410423099995e-003 - 0.0947126671671867 - -0.0528389587998390 - <_> - - <_> - - - - <_>6 7 14 4 -1. - <_>13 7 7 2 2. - <_>6 9 7 2 2. - 0 - -4.5442068949341774e-003 - -0.1074846014380455 - 0.0177447702735662 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - 2.3271010722965002e-003 - -0.0838262364268303 - 0.0572107098996639 - <_> - - <_> - - - - <_>4 2 12 6 -1. - <_>4 4 12 2 3. - 0 - -0.0124095501378179 - 0.2310030013322830 - -0.0221104193478823 - <_> - - <_> - - - - <_>0 7 14 4 -1. - <_>0 7 7 2 2. - <_>7 9 7 2 2. - 0 - -4.5268908143043518e-003 - -0.1624415069818497 - 0.0325643494725227 - <_> - - <_> - - - - <_>8 6 5 9 -1. - <_>8 9 5 3 3. - 0 - -4.4666860048891976e-005 - 0.2434111982584000 - -0.0267028007656336 - <_> - - <_> - - - - <_>2 7 13 2 -1. - <_>2 8 13 1 2. - 0 - 7.7015289571136236e-004 - -0.1285865008831024 - 0.0423081517219543 - <_> - - <_> - - - - <_>9 12 10 6 -1. - <_>14 12 5 3 2. - <_>9 15 5 3 2. - 0 - 0.0448630489408970 - 0.0107819996774197 - -0.3581424057483673 - <_> - - <_> - - - - <_>5 6 6 10 -1. - <_>7 6 2 10 3. - 0 - 0.0378694906830788 - -0.0149663602933288 - 0.3419500887393951 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -8.3092376589775085e-003 - -0.2751466035842896 - 0.0201395396143198 - <_> - - <_> - - - - <_>2 2 15 5 -1. - <_>7 2 5 5 3. - 0 - -0.0432901196181774 - 0.3003655970096588 - -0.0194930192083120 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 4 13 1 2. - 0 - -0.0100756296887994 - -0.1226257979869843 - 9.1246366500854492e-003 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - -3.3486529719084501e-003 - 0.1179025992751122 - -0.0410501882433891 - <_> - - <_> - - - - <_>14 1 3 17 -1. - <_>15 1 1 17 3. - 0 - -6.4645247766748071e-004 - -0.0781549364328384 - 0.0469905696809292 - <_> - - <_> - - - - <_>3 1 3 17 -1. - <_>4 1 1 17 3. - 0 - 0.0352473706007004 - 0.0103652700781822 - -0.5150712728500366 - <_> - - <_> - - - - <_>12 1 7 6 -1. - <_>12 3 7 2 3. - 0 - 3.5965928691439331e-004 - -0.0779368132352829 - 0.0302752405405045 - <_> - - <_> - - - - <_>3 2 3 17 -1. - <_>4 2 1 17 3. - 0 - -1.5898740384727716e-003 - -0.1059432029724121 - 0.0500361509621143 - <_> - - <_> - - - - <_>14 0 6 18 -1. - <_>16 0 2 18 3. - 0 - -0.0214083008468151 - 0.1164933964610100 - -0.0375407002866268 - <_> - - <_> - - - - <_>3 5 7 6 -1. - <_>3 7 7 2 3. - 0 - -2.7612380217760801e-003 - 0.0347518101334572 - -0.1371853053569794 - <_> - - <_> - - - - <_>8 4 6 12 -1. - <_>11 4 3 6 2. - <_>8 10 3 6 2. - 0 - 6.4307968132197857e-003 - -0.0136674297973514 - 0.1493856012821198 - <_> - - <_> - - - - <_>4 4 12 10 -1. - <_>4 4 6 5 2. - <_>10 9 6 5 2. - 0 - -6.9555612280964851e-003 - -0.1217145994305611 - 0.0561001896858215 - <_> - - <_> - - - - <_>14 0 6 18 -1. - <_>16 0 2 18 3. - 0 - -0.2765496969223023 - -0.8507738709449768 - 3.8885050453245640e-003 - <_> - - <_> - - - - <_>0 0 6 18 -1. - <_>2 0 2 18 3. - 0 - 4.7567309811711311e-003 - -0.0655944272875786 - 0.0759470611810684 - <_> - - <_> - - - - <_>9 0 3 18 -1. - <_>9 9 3 9 2. - 0 - 0.0892180502414703 - 6.5016360022127628e-003 - -0.3203299045562744 - <_> - - <_> - - - - <_>3 2 12 6 -1. - <_>3 5 12 3 2. - 0 - 0.0677481517195702 - -0.0118788704276085 - 0.4495449066162109 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - 0.0453361906111240 - 7.4317739345133305e-003 - -0.4314487874507904 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 0.0109658502042294 - 0.0251350104808807 - -0.2035907059907913 - <_> - - <_> - - - - <_>17 3 3 12 -1. - <_>17 9 3 6 2. - 0 - -0.0659385621547699 - 0.4552414119243622 - -7.5815711170434952e-003 - <_> - - <_> - - - - <_>0 3 3 12 -1. - <_>0 9 3 6 2. - 0 - -0.0422701090574265 - 0.3847005069255829 - -0.0116722797974944 - <_> - - <_> - - - - <_>14 10 5 9 -1. - <_>14 13 5 3 3. - 0 - -6.3518402166664600e-003 - -0.0870101675391197 - 0.0341599211096764 - <_> - - <_> - - - - <_>1 0 18 8 -1. - <_>1 4 18 4 2. - 0 - 0.0322698801755905 - -0.0407114401459694 - 0.1246946975588799 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 5 8 2 2. - 0 - -0.0390683114528656 - -0.1040311977267265 - 6.7032999359071255e-003 - <_> - - <_> - - - - <_>1 3 8 4 -1. - <_>1 5 8 2 2. - 0 - -1.0384949855506420e-003 - 0.0584225282073021 - -0.1015489026904106 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - 0.0297406502068043 - 0.0125960595905781 - -0.1517045050859451 - <_> - - <_> - - - - <_>4 3 12 3 -1. - <_>10 3 6 3 2. - 0 - 5.3193639032542706e-003 - -0.0468430891633034 - 0.1100525036454201 - <_> - - <_> - - - - <_>5 7 10 5 -1. - <_>5 7 5 5 2. - 0 - -3.2385820522904396e-003 - -0.1030983999371529 - 0.0506860613822937 - <_> - - <_> - - - - <_>2 6 16 4 -1. - <_>2 6 8 2 2. - <_>10 8 8 2 2. - 0 - 4.2344750836491585e-003 - -0.0495824292302132 - 0.1209215000271797 - <_> - - <_> - - - - <_>15 0 5 9 -1. - <_>15 3 5 3 3. - 0 - -0.0747866630554199 - -0.4689513146877289 - 3.8582859560847282e-003 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - 8.5299033671617508e-003 - 0.0388061590492725 - -0.1202204972505570 - <_> - - <_> - - - - <_>11 0 3 12 -1. - <_>11 6 3 6 2. - 0 - -0.0486625693738461 - 0.1611399054527283 - -0.0117171304300427 - <_> - - <_> - - - - <_>0 1 6 6 -1. - <_>0 4 6 3 2. - 0 - -1.3677199603989720e-003 - -0.0853037163615227 - 0.0553941093385220 - <_> - - <_> - - - - <_>7 1 7 18 -1. - <_>7 10 7 9 2. - 0 - -5.8111362159252167e-003 - 0.0470392704010010 - -0.0517368689179420 - <_> - - <_> - - - - <_>0 2 18 6 -1. - <_>0 2 9 3 2. - <_>9 5 9 3 2. - 0 - -3.9951619692146778e-003 - -0.0781671628355980 - 0.0639193430542946 - <_> - - <_> - - - - <_>5 8 13 2 -1. - <_>5 9 13 1 2. - 0 - 3.0817699152976274e-003 - -0.0692898333072662 - 0.0282425396144390 - <_> - - <_> - - - - <_>6 8 3 10 -1. - <_>6 13 3 5 2. - 0 - -0.0462794713675976 - -0.3476049005985260 - 0.0138789098709822 - <_> - - <_> - - - - <_>6 11 13 2 -1. - <_>6 12 13 1 2. - 0 - -0.0187257807701826 - 0.1522226929664612 - -0.0157240908592939 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>1 18 18 1 3. - 0 - -0.0214453693479300 - -0.3596273064613342 - 0.0127642601728439 - <_> - - <_> - - - - <_>1 3 18 2 -1. - <_>1 3 9 2 2. - 0 - -0.0910034775733948 - -0.7961595058441162 - 4.9090441316366196e-003 - <_> - - <_> - - - - <_>3 17 10 3 -1. - <_>8 17 5 3 2. - 0 - 2.5607119314372540e-003 - -0.0545516908168793 - 0.0844034105539322 - <_> - - <_> - - - - <_>1 15 18 4 -1. - <_>7 15 6 4 3. - 0 - -0.0136620998382568 - 0.0949872508645058 - -0.0620368197560310 - <_> - - <_> - - - - <_>5 5 6 9 -1. - <_>8 5 3 9 2. - 0 - 9.2437807470560074e-003 - 0.0538223311305046 - -0.0992365106940269 - <_> - - <_> - - - - <_>4 6 12 11 -1. - <_>8 6 4 11 3. - 0 - -0.0146121401339769 - -0.1524866074323654 - 0.0429055504500866 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 0 4 5 2. - <_>4 5 4 5 2. - 0 - -0.0395846590399742 - 0.1588324010372162 - -0.0354844294488430 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>8 0 6 3 3. - 0 - -6.7460699938237667e-003 - 0.1174926012754440 - -0.0379344411194324 - <_> - - <_> - - - - <_>5 9 9 9 -1. - <_>8 9 3 9 3. - 0 - 2.0449559669941664e-003 - 0.0616261884570122 - -0.0944093465805054 - <_> - - <_> - - - - <_>11 3 2 17 -1. - <_>11 3 1 17 2. - 0 - -0.0151465600356460 - -0.3388757109642029 - 6.8320450372993946e-003 - <_> - - <_> - - - - <_>7 0 2 20 -1. - <_>8 0 1 20 2. - 0 - -2.0916219800710678e-003 - -0.1482957005500794 - 0.0333583503961563 - <_> - - <_> - - - - <_>10 1 8 18 -1. - <_>10 1 4 18 2. - 0 - 0.0132743902504444 - -0.0381690002977848 - 0.0463796295225620 - <_> - - <_> - - - - <_>4 5 8 8 -1. - <_>4 5 4 4 2. - <_>8 9 4 4 2. - 0 - 0.0124043300747871 - -0.0184986796230078 - 0.2795296013355255 - <_> - - <_> - - - - <_>6 1 12 14 -1. - <_>12 1 6 7 2. - <_>6 8 6 7 2. - 0 - -0.0236782599240541 - -0.0471428595483303 - 0.0231413394212723 - <_> - - <_> - - - - <_>2 1 8 18 -1. - <_>6 1 4 18 2. - 0 - 0.0675759837031364 - -0.0185984000563622 - 0.2748115062713623 - <_> - - <_> - - - - <_>1 5 18 7 -1. - <_>7 5 6 7 3. - 0 - 0.0763591229915619 - 0.0291781295090914 - -0.2057282030582428 - <_> - - <_> - - - - <_>3 4 6 16 -1. - <_>3 4 3 8 2. - <_>6 12 3 8 2. - 0 - -0.1091888993978500 - 0.6257721185684204 - -9.8246810957789421e-003 - <_> - - <_> - - - - <_>12 3 4 14 -1. - <_>14 3 2 7 2. - <_>12 10 2 7 2. - 0 - 1.2964319903403521e-003 - -0.0317764990031719 - 0.0678339302539825 - <_> - - <_> - - - - <_>4 3 4 14 -1. - <_>4 3 2 7 2. - <_>6 10 2 7 2. - 0 - 0.0412186793982983 - 8.5701625794172287e-003 - -0.5837911963462830 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>8 12 3 6 2. - 0 - -1.8773629562929273e-003 - 0.0532635413110256 - -0.0417027883231640 - <_> - - <_> - - - - <_>6 12 6 6 -1. - <_>9 12 3 6 2. - 0 - -2.9402649961411953e-003 - 0.0869319215416908 - -0.0713440701365471 - <_> - - <_> - - - - <_>4 1 14 3 -1. - <_>4 2 14 1 3. - 0 - -0.0308337491005659 - -0.3943957090377808 - 6.0907239094376564e-003 - <_> - - <_> - - - - <_>3 5 10 6 -1. - <_>3 5 5 3 2. - <_>8 8 5 3 2. - 0 - -3.7960989866405725e-003 - 0.0741505324840546 - -0.0618812814354897 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - -6.3087488524615765e-003 - -0.1166246980428696 - 0.0250167604535818 - <_> - - <_> - - - - <_>0 4 20 8 -1. - <_>0 4 10 4 2. - <_>10 8 10 4 2. - 0 - 4.0001370944082737e-003 - -0.0572367310523987 - 0.0975897014141083 - <_> - - <_> - - - - <_>12 5 8 8 -1. - <_>16 5 4 4 2. - <_>12 9 4 4 2. - 0 - 0.0677529573440552 - 9.5101362094283104e-003 - -0.3377701938152313 - <_> - - <_> - - - - <_>1 1 15 6 -1. - <_>1 3 15 2 3. - 0 - -0.0923537835478783 - 0.7901524901390076 - -6.2939748167991638e-003 - <_> - - <_> - - - - <_>3 6 16 3 -1. - <_>3 6 8 3 2. - 0 - -0.0240508392453194 - -0.1558571010828018 - 0.0180999301373959 - <_> - - <_> - - - - <_>7 3 6 5 -1. - <_>10 3 3 5 2. - 0 - 3.2272089738398790e-003 - -0.0479367412626743 - 0.1073589995503426 - <_> - - <_> - - - - <_>7 4 9 5 -1. - <_>10 4 3 5 3. - 0 - -7.2444709949195385e-003 - 0.0967755392193794 - -0.0240959003567696 - <_> - - <_> - - - - <_>1 6 16 3 -1. - <_>9 6 8 3 2. - 0 - -0.1088825985789299 - -0.8125579953193665 - 6.0875630006194115e-003 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>9 5 3 5 3. - 0 - -0.0140772303566337 - -0.1335898935794830 - 0.0254211407154799 - <_> - - <_> - - - - <_>0 1 2 14 -1. - <_>1 1 1 14 2. - 0 - -0.0300713703036308 - 0.3542703986167908 - -0.0135534303262830 - <_> - - <_> - - - - <_>12 5 3 13 -1. - <_>13 5 1 13 3. - 0 - 0.0349857993423939 - -3.0686240643262863e-003 - 0.4631117880344391 - <_> - - <_> - - - - <_>5 5 3 13 -1. - <_>6 5 1 13 3. - 0 - 0.0183547697961330 - 0.0112180197611451 - -0.4614357948303223 - <_> - - <_> - - - - <_>4 6 16 8 -1. - <_>4 10 16 4 2. - 0 - -0.0643064081668854 - -0.6120715141296387 - 1.9155009649693966e-003 - <_> - - <_> - - - - <_>3 7 7 6 -1. - <_>3 10 7 3 2. - 0 - 0.0820961296558380 - -8.8210906833410263e-003 - 0.5488597750663757 - <_> - - <_> - - - - <_>0 3 20 10 -1. - <_>0 8 20 5 2. - 0 - 7.7698810491710901e-004 - 0.1324795037508011 - -0.0339151285588741 - <_> - - <_> - - - - <_>0 3 7 6 -1. - <_>0 5 7 2 3. - 0 - 0.0645689815282822 - 6.4043831080198288e-003 - -0.7715017795562744 - <_> - - <_> - - - - <_>11 1 8 4 -1. - <_>11 3 8 2 2. - 0 - -0.0158334895968437 - -0.1949895024299622 - 7.5541301630437374e-003 - <_> - - <_> - - - - <_>1 1 8 4 -1. - <_>1 3 8 2 2. - 0 - 0.0341256186366081 - -0.0159152895212173 - 0.2971644103527069 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -0.0126150501891971 - -0.2465070933103561 - 0.0226997993886471 - <_> - - <_> - - - - <_>5 0 10 6 -1. - <_>5 2 10 2 3. - 0 - 0.0182726792991161 - -0.0405939593911171 - 0.1169349029660225 - <_> - - <_> - - - - <_>6 3 8 10 -1. - <_>6 8 8 5 2. - 0 - -6.6374349407851696e-003 - -0.1455710977315903 - 0.0353539101779461 - <_> - - <_> - - - - <_>7 2 5 12 -1. - <_>7 8 5 6 2. - 0 - -2.6520919054746628e-003 - 0.0763825923204422 - -0.0666886270046234 - <_> - - <_> - - - - <_>7 7 6 12 -1. - <_>9 7 2 12 3. - 0 - 2.2452129051089287e-003 - -0.0897598788142204 - 0.0550913698971272 - <_> - - <_> - - - - <_>7 3 6 8 -1. - <_>9 3 2 8 3. - 0 - -4.4775419519282877e-004 - 0.2126415967941284 - -0.0266206394881010 - <_> - - <_> - - - - <_>10 0 4 16 -1. - <_>10 8 4 8 2. - 0 - -0.1111525967717171 - -0.4313994944095612 - 4.6484731137752533e-003 - <_> - - <_> - - - - <_>0 6 16 8 -1. - <_>0 10 16 4 2. - 0 - -0.0115787703543901 - -0.3529626131057739 - 0.0127505399286747 - <_> - - <_> - - - - <_>3 8 16 4 -1. - <_>3 10 16 2 2. - 0 - -0.0252901706844568 - 0.5138598084449768 - -6.7363809794187546e-003 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0322323404252529 - -0.5769019126892090 - 7.7741048298776150e-003 - <_> - - <_> - - - - <_>10 8 9 4 -1. - <_>10 10 9 2 2. - 0 - -4.1698799468576908e-003 - -0.1751931011676788 - 0.0110186999663711 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>7 10 6 5 2. - 0 - -0.0206645000725985 - 0.2582195103168488 - -0.0179202891886234 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 10 4 4 3. - 0 - -1.0834420099854469e-003 - -0.1317851990461350 - 0.0254197493195534 - <_> - - <_> - - - - <_>0 7 13 9 -1. - <_>0 10 13 3 3. - 0 - -9.5458701252937317e-003 - 0.4496468901634216 - -0.0113150300458074 - <_> - - <_> - - - - <_>6 11 8 8 -1. - <_>10 11 4 4 2. - <_>6 15 4 4 2. - 0 - 0.0532321818172932 - 7.4498020112514496e-003 - -0.6812205910682678 - <_> - - <_> - - - - <_>0 15 10 4 -1. - <_>5 15 5 4 2. - 0 - -0.1385252028703690 - -0.6011788249015808 - 6.5434179268777370e-003 - <_> - - <_> - - - - <_>4 18 16 2 -1. - <_>4 18 8 2 2. - 0 - 0.0171734392642975 - -0.0251205097883940 - 0.0865166336297989 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 14 8 4 2. - 0 - 0.0399471893906593 - 5.8647249825298786e-003 - -0.7465305924415588 - <_> - - <_> - - - - <_>8 13 7 6 -1. - <_>8 15 7 2 3. - 0 - 0.0206470098346472 - -0.0102260001003742 - 0.1722760945558548 - <_> - - <_> - - - - <_>7 7 5 8 -1. - <_>7 11 5 4 2. - 0 - -1.8602909985929728e-003 - -0.0657679736614227 - 0.0692484900355339 - <_> - - <_> - - - - <_>6 7 10 12 -1. - <_>6 11 10 4 3. - 0 - -0.0341060683131218 - 0.1590873003005981 - -0.0132416300475597 - <_> - - <_> - - - - <_>6 13 6 7 -1. - <_>8 13 2 7 3. - 0 - 6.3425069674849510e-003 - 0.0351191498339176 - -0.1343608051538467 - <_> - - <_> - - - - <_>14 11 4 7 -1. - <_>14 11 2 7 2. - 0 - 1.6866199439391494e-003 - -0.0434017702937126 - 0.0506066307425499 - <_> - - <_> - - - - <_>4 6 6 10 -1. - <_>6 6 2 10 3. - 0 - -3.0595089774578810e-003 - 0.0569767095148563 - -0.0810745283961296 - <_> - - <_> - - - - <_>13 4 2 16 -1. - <_>13 4 1 16 2. - 0 - 2.7664829976856709e-003 - 0.0204970091581345 - -0.0809638276696205 - <_> - - <_> - - - - <_>5 4 2 16 -1. - <_>6 4 1 16 2. - 0 - -3.2909188885241747e-003 - -0.1080378964543343 - 0.0462379604578018 - <_> - - <_> - - - - <_>8 3 4 16 -1. - <_>10 3 2 8 2. - <_>8 11 2 8 2. - 0 - 0.0172444004565477 - -0.0251270607113838 - 0.2459103018045425 - <_> - - <_> - - - - <_>8 0 3 18 -1. - <_>8 9 3 9 2. - 0 - 0.0911615863442421 - 0.0101749803870916 - -0.4698387980461121 - <_> - - <_> - - - - <_>4 4 13 2 -1. - <_>4 5 13 1 2. - 0 - 2.5459621101617813e-003 - -0.0300037506967783 - 0.1480046957731247 - <_> - - <_> - - - - <_>0 2 14 2 -1. - <_>0 3 14 1 2. - 0 - 1.7582690343260765e-003 - 0.0544006898999214 - -0.0774442702531815 - <_> - - <_> - - - - <_>14 11 4 7 -1. - <_>14 11 2 7 2. - 0 - -1.6833960544317961e-003 - 0.0818381235003471 - -0.0437511987984180 - <_> - - <_> - - - - <_>0 2 13 2 -1. - <_>0 3 13 1 2. - 0 - -7.6617579907178879e-004 - -0.1356440037488937 - 0.0360419489443302 - <_> - - <_> - - - - <_>14 11 4 7 -1. - <_>14 11 2 7 2. - 0 - 1.1155450483784080e-003 - -0.0482638888061047 - 0.0502734482288361 - <_> - - <_> - - - - <_>2 11 4 7 -1. - <_>4 11 2 7 2. - 0 - -2.6005289983004332e-003 - 0.0887934863567352 - -0.0545542091131210 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -3.2424980308860540e-003 - -0.1315919011831284 - 0.0342485085129738 - <_> - - <_> - - - - <_>2 10 5 6 -1. - <_>2 13 5 3 2. - 0 - -1.4817930059507489e-004 - 0.0378754287958145 - -0.1222522035241127 - <_> - - <_> - - - - <_>14 10 5 9 -1. - <_>14 13 5 3 3. - 0 - 0.0115466397255659 - 0.0153709696605802 - -0.1028624027967453 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 2.4446300230920315e-003 - -0.0517830513417721 - 0.1073507964611054 - <_> - - <_> - - - - <_>5 12 13 3 -1. - <_>5 13 13 1 3. - 0 - 4.5723789371550083e-003 - -0.0363621003925800 - 0.1328985989093781 - <_> - - <_> - - - - <_>0 13 17 6 -1. - <_>0 15 17 2 3. - 0 - -0.0119383400306106 - -0.1088235005736351 - 0.0476989001035690 - <_> - - <_> - - - - <_>5 15 13 3 -1. - <_>5 16 13 1 3. - 0 - -4.1671381331980228e-003 - 0.1163709983229637 - -0.0306387804448605 - -1.2181390523910522 - 41 - -1 - <_> - - - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0336596183478832 - -0.1557604074478149 - 0.1910901069641113 - <_> - - <_> - - - - <_>9 4 2 14 -1. - <_>9 11 2 7 2. - 0 - -1.5392389614135027e-003 - 0.0725277364253998 - -0.2880895137786865 - <_> - - <_> - - - - <_>1 15 13 3 -1. - <_>1 16 13 1 3. - 0 - 1.5648789703845978e-003 - -0.1132922023534775 - 0.1505738943815231 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 5.6565739214420319e-004 - -0.4050228893756867 - 0.0302351005375385 - <_> - - <_> - - - - <_>4 5 4 14 -1. - <_>4 5 2 7 2. - <_>6 12 2 7 2. - 0 - -2.9683491447940469e-004 - -0.1259232014417648 - 0.1035299971699715 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 4.3946141377091408e-003 - -0.1058242022991180 - 0.0231637507677078 - <_> - - <_> - - - - <_>2 8 8 8 -1. - <_>2 8 4 4 2. - <_>6 12 4 4 2. - 0 - 3.2444300595670938e-003 - 0.0501885600388050 - -0.2547726035118103 - <_> - - <_> - - - - <_>13 6 6 9 -1. - <_>13 9 6 3 3. - 0 - 3.8864749949425459e-003 - -0.1433265954256058 - 0.0298710707575083 - <_> - - <_> - - - - <_>4 0 5 9 -1. - <_>4 3 5 3 3. - 0 - 3.3563380129635334e-003 - -0.1873977035284042 - 0.0613545216619968 - <_> - - <_> - - - - <_>13 4 3 10 -1. - <_>13 9 3 5 2. - 0 - 0.0197976995259523 - 0.0275679193437099 - -0.0731898769736290 - <_> - - <_> - - - - <_>3 5 4 8 -1. - <_>3 9 4 4 2. - 0 - 3.3829871099442244e-003 - -0.2691569030284882 - 0.0475612208247185 - <_> - - <_> - - - - <_>10 10 8 6 -1. - <_>10 12 8 2 3. - 0 - 5.0223460420966148e-003 - 0.0425726696848869 - -0.2009748965501785 - <_> - - <_> - - - - <_>1 17 13 3 -1. - <_>1 18 13 1 3. - 0 - 1.4903279952704906e-003 - -0.1016063988208771 - 0.1129127964377403 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - -5.5050072260200977e-003 - -0.2176041007041931 - 0.0250673796981573 - <_> - - <_> - - - - <_>7 5 6 11 -1. - <_>9 5 2 11 3. - 0 - 4.1127130389213562e-003 - -0.1370330005884171 - 0.0665366873145103 - <_> - - <_> - - - - <_>6 1 9 6 -1. - <_>9 1 3 6 3. - 0 - 0.0194422602653503 - 0.0422539114952087 - -0.1173110008239746 - <_> - - <_> - - - - <_>1 11 13 3 -1. - <_>1 12 13 1 3. - 0 - -0.0194458700716496 - 0.2861663103103638 - -0.0304230898618698 - <_> - - <_> - - - - <_>4 0 13 3 -1. - <_>4 1 13 1 3. - 0 - -1.5500449808314443e-003 - -0.1515711992979050 - 0.0637232363224030 - <_> - - <_> - - - - <_>1 2 14 12 -1. - <_>1 2 7 6 2. - <_>8 8 7 6 2. - 0 - -3.2575910445302725e-003 - 0.0610639490187168 - -0.1300669014453888 - <_> - - <_> - - - - <_>13 4 4 14 -1. - <_>15 4 2 7 2. - <_>13 11 2 7 2. - 0 - 8.5774611216038465e-004 - -0.0620512887835503 - 0.0548092909157276 - <_> - - <_> - - - - <_>3 4 4 14 -1. - <_>3 4 2 7 2. - <_>5 11 2 7 2. - 0 - 6.8592262687161565e-004 - -0.0928287133574486 - 0.0922878533601761 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 0.0489056594669819 - -0.0120980404317379 - 0.2467487007379532 - <_> - - <_> - - - - <_>1 15 7 4 -1. - <_>1 17 7 2 2. - 0 - -4.6415459364652634e-003 - -0.1710343956947327 - 0.0519001483917236 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - -9.9253775551915169e-003 - 0.1682472974061966 - -0.0437427312135696 - <_> - - <_> - - - - <_>1 2 18 2 -1. - <_>1 3 18 1 2. - 0 - -7.2820088826119900e-004 - -0.1576201021671295 - 0.0492832399904728 - <_> - - <_> - - - - <_>16 0 4 7 -1. - <_>16 0 2 7 2. - 0 - 7.1829417720437050e-003 - -0.0750838518142700 - 0.1567766070365906 - <_> - - <_> - - - - <_>3 2 14 3 -1. - <_>3 3 14 1 3. - 0 - 7.4819842120632529e-004 - 0.0943036824464798 - -0.0944104865193367 - <_> - - <_> - - - - <_>11 13 6 7 -1. - <_>13 13 2 7 3. - 0 - 0.0138563197106123 - 0.0422500297427177 - -0.2404627948999405 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -5.0514908507466316e-003 - 0.2017091959714890 - -0.0449724793434143 - <_> - - <_> - - - - <_>1 7 19 12 -1. - <_>1 11 19 4 3. - 0 - -2.5696419179439545e-003 - -0.1400468945503235 - 0.0417545102536678 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 0.0542757511138916 - -0.0260947998613119 - 0.2837474048137665 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -0.0372994691133499 - -0.5828117728233337 - 0.0135019496083260 - <_> - - <_> - - - - <_>7 9 6 10 -1. - <_>7 9 3 5 2. - <_>10 14 3 5 2. - 0 - 3.0674990266561508e-003 - 0.0562241785228252 - -0.1199505031108856 - <_> - - <_> - - - - <_>4 6 13 3 -1. - <_>4 7 13 1 3. - 0 - -3.5402809735387564e-003 - 0.0665154680609703 - -0.1183426976203919 - <_> - - <_> - - - - <_>3 11 7 4 -1. - <_>3 13 7 2 2. - 0 - 4.1401982307434082e-003 - 0.0209880191832781 - -0.3180744051933289 - <_> - - <_> - - - - <_>16 0 4 15 -1. - <_>16 0 2 15 2. - 0 - -0.0111835598945618 - 0.1246713995933533 - -0.0417979098856449 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - 1.0800679447129369e-003 - 0.0455484911799431 - -0.1585731059312820 - <_> - - <_> - - - - <_>7 0 8 10 -1. - <_>11 0 4 5 2. - <_>7 5 4 5 2. - 0 - -7.7602718956768513e-003 - -0.1703172028064728 - 0.0339895300567150 - <_> - - <_> - - - - <_>0 2 20 2 -1. - <_>10 2 10 2 2. - 0 - -3.1192360911518335e-003 - 0.0968178808689117 - -0.0860225334763527 - <_> - - <_> - - - - <_>7 6 10 3 -1. - <_>7 6 5 3 2. - 0 - -0.0136733800172806 - -0.2253659963607788 - 0.0155871696770191 - <_> - - <_> - - - - <_>3 6 10 3 -1. - <_>8 6 5 3 2. - 0 - -2.0611209329217672e-003 - -0.1526986062526703 - 0.0502276793122292 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 2.2635459899902344e-003 - -0.0428894609212875 - 0.0768185630440712 - <_> - - <_> - - - - <_>0 4 18 16 -1. - <_>6 4 6 16 3. - 0 - -0.0345300808548927 - 0.1287443935871124 - -0.0676603168249130 - <_> - - <_> - - - - <_>15 0 4 19 -1. - <_>15 0 2 19 2. - 0 - 6.1309239827096462e-003 - -0.0634560585021973 - 0.0642376467585564 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -0.0101712802425027 - -0.2919202148914337 - 0.0266455095261335 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - -0.1306065022945404 - -0.9629706740379334 - 1.5367489540949464e-003 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - 6.8621779792010784e-003 - -0.0472395196557045 - 0.1544039994478226 - <_> - - <_> - - - - <_>9 0 9 5 -1. - <_>12 0 3 5 3. - 0 - 1.2950079981237650e-003 - -0.0711223483085632 - 0.0586972385644913 - <_> - - <_> - - - - <_>5 0 8 10 -1. - <_>5 0 4 5 2. - <_>9 5 4 5 2. - 0 - -5.6443549692630768e-003 - -0.1726133972406387 - 0.0447693094611168 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1634611040353775 - -0.0215368308126926 - 0.3682580888271332 - <_> - - <_> - - - - <_>0 0 14 3 -1. - <_>0 1 14 1 3. - 0 - 0.0141706001013517 - 0.0234620198607445 - -0.3049874901771545 - <_> - - <_> - - - - <_>16 0 4 12 -1. - <_>16 0 2 12 2. - 0 - -0.1067991033196449 - 0.3148567974567413 - -9.1049326583743095e-003 - <_> - - <_> - - - - <_>1 0 4 19 -1. - <_>3 0 2 19 2. - 0 - 7.0258649066090584e-003 - -0.0654181912541389 - 0.1020023971796036 - <_> - - <_> - - - - <_>14 10 6 7 -1. - <_>14 10 3 7 2. - 0 - -4.3358937837183475e-003 - 0.1160119995474815 - -0.0550410598516464 - <_> - - <_> - - - - <_>1 6 9 14 -1. - <_>4 6 3 14 3. - 0 - 0.0353942401707172 - 0.0277954805642366 - -0.2553454935550690 - <_> - - <_> - - - - <_>9 2 6 9 -1. - <_>9 5 6 3 3. - 0 - 0.0215996801853180 - -0.0105139603838325 - 0.2608759105205536 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - 4.3032150715589523e-003 - -0.0467454008758068 - 0.1331862062215805 - <_> - - <_> - - - - <_>4 8 12 6 -1. - <_>8 8 4 6 3. - 0 - 7.8372862190008163e-003 - 0.0618998110294342 - -0.1240516975522041 - <_> - - <_> - - - - <_>2 5 12 9 -1. - <_>6 5 4 9 3. - 0 - -1.6856989823281765e-003 - -0.0956963077187538 - 0.0776673108339310 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -4.1602249257266521e-003 - 0.0658505335450172 - -0.0768375918269157 - <_> - - <_> - - - - <_>4 5 9 5 -1. - <_>7 5 3 5 3. - 0 - -0.0508648194372654 - 0.5241906046867371 - -0.0173424296081066 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>12 3 2 7 3. - 0 - -0.0644778832793236 - -0.4197225868701935 - 0.0122311003506184 - <_> - - <_> - - - - <_>6 13 7 6 -1. - <_>6 15 7 2 3. - 0 - -2.4949579965323210e-003 - 0.0642422065138817 - -0.0974573120474815 - <_> - - <_> - - - - <_>11 6 4 14 -1. - <_>13 6 2 7 2. - <_>11 13 2 7 2. - 0 - 3.2167730387300253e-003 - -0.0379022881388664 - 0.0821970924735069 - <_> - - <_> - - - - <_>5 6 4 14 -1. - <_>5 6 2 7 2. - <_>7 13 2 7 2. - 0 - -2.3393060546368361e-003 - -0.1060846000909805 - 0.0720048993825912 - <_> - - <_> - - - - <_>13 13 7 4 -1. - <_>13 15 7 2 2. - 0 - -8.0535542219877243e-003 - -0.1099186986684799 - 0.0256432797759771 - <_> - - <_> - - - - <_>1 5 4 14 -1. - <_>1 5 2 7 2. - <_>3 12 2 7 2. - 0 - 0.0150077398866415 - -0.0312671288847923 - 0.2050703018903732 - <_> - - <_> - - - - <_>1 13 18 4 -1. - <_>10 13 9 2 2. - <_>1 15 9 2 2. - 0 - -4.7144708223640919e-003 - -0.1405889987945557 - 0.0486872494220734 - <_> - - <_> - - - - <_>0 1 18 12 -1. - <_>0 7 18 6 2. - 0 - -0.2718858122825623 - -0.7708619236946106 - 8.2119107246398926e-003 - <_> - - <_> - - - - <_>4 1 14 18 -1. - <_>4 10 14 9 2. - 0 - -3.7261729594320059e-003 - 0.0783864185214043 - -0.0611103214323521 - <_> - - <_> - - - - <_>4 0 6 10 -1. - <_>6 0 2 10 3. - 0 - 8.1726117059588432e-003 - 0.0258723907172680 - -0.2420330047607422 - <_> - - <_> - - - - <_>16 10 4 9 -1. - <_>16 10 2 9 2. - 0 - -0.1538413017988205 - -0.8368161916732788 - 1.0526239639148116e-003 - <_> - - <_> - - - - <_>0 10 4 9 -1. - <_>2 10 2 9 2. - 0 - -4.2209690436720848e-003 - 0.1098781973123550 - -0.0609731301665306 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>12 3 2 7 3. - 0 - 0.0346411801874638 - 5.9377611614763737e-003 - -0.7302142977714539 - <_> - - <_> - - - - <_>4 10 4 7 -1. - <_>6 10 2 7 2. - 0 - -1.0757029522210360e-003 - 0.0632532313466072 - -0.0939545333385468 - <_> - - <_> - - - - <_>4 9 15 3 -1. - <_>9 9 5 3 3. - 0 - 6.0506182489916682e-004 - -0.0726337432861328 - 0.0548477917909622 - <_> - - <_> - - - - <_>1 9 15 3 -1. - <_>6 9 5 3 3. - 0 - -4.9192002043128014e-003 - -0.1461798995733261 - 0.0498548895120621 - <_> - - <_> - - - - <_>16 0 4 12 -1. - <_>16 0 2 12 2. - 0 - 0.0586413405835629 - -0.0144878895953298 - 0.2194927930831909 - <_> - - <_> - - - - <_>7 8 4 12 -1. - <_>7 12 4 4 3. - 0 - -0.0959936380386353 - -0.4245699048042297 - 0.0156111698597670 - <_> - - <_> - - - - <_>16 0 4 12 -1. - <_>16 0 2 12 2. - 0 - -0.1754675060510635 - -0.5715453028678894 - 2.7310380246490240e-003 - <_> - - <_> - - - - <_>0 0 4 12 -1. - <_>2 0 2 12 2. - 0 - 0.0531927011907101 - -0.0207596104592085 - 0.3153161108493805 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - -0.0308621097356081 - -0.4081869125366211 - 9.1538606211543083e-003 - <_> - - <_> - - - - <_>8 1 3 13 -1. - <_>9 1 1 13 3. - 0 - -2.9243549797683954e-003 - 0.1653891950845718 - -0.0370483398437500 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - 7.9757552593946457e-003 - 0.0400102995336056 - -0.1060308963060379 - <_> - - <_> - - - - <_>0 6 6 7 -1. - <_>2 6 2 7 3. - 0 - 0.1022820025682449 - 9.6151717007160187e-003 - -0.6529924869537354 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 2.3435470648109913e-003 - -0.0431196093559265 - 0.1190873011946678 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -3.3627110533416271e-003 - 0.1051867008209229 - -0.0696444436907768 - <_> - - <_> - - - - <_>1 9 18 4 -1. - <_>10 9 9 2 2. - <_>1 11 9 2 2. - 0 - 4.9040392041206360e-003 - 0.0489499010145664 - -0.1294935941696167 - <_> - - <_> - - - - <_>3 9 13 2 -1. - <_>3 10 13 1 2. - 0 - 4.5119290007278323e-005 - -0.1614855974912643 - 0.0417335405945778 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 0.0161958597600460 - -0.0127593204379082 - 0.2074635028839111 - <_> - - <_> - - - - <_>6 12 8 8 -1. - <_>6 12 4 4 2. - <_>10 16 4 4 2. - 0 - -6.4254719763994217e-003 - -0.1373693943023682 - 0.0434904210269451 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -6.6467811120674014e-004 - 0.0667715370655060 - -0.0746484622359276 - <_> - - <_> - - - - <_>3 14 7 6 -1. - <_>3 16 7 2 3. - 0 - -2.3743628989905119e-003 - -0.1237770020961762 - 0.0517287291586399 - <_> - - <_> - - - - <_>5 10 15 6 -1. - <_>10 10 5 6 3. - 0 - -0.0831660181283951 - 0.1526110023260117 - -0.0215027593076229 - <_> - - <_> - - - - <_>8 2 4 7 -1. - <_>10 2 2 7 2. - 0 - 1.3301270082592964e-003 - -0.0619254484772682 - 0.1059143990278244 - <_> - - <_> - - - - <_>7 1 9 7 -1. - <_>10 1 3 7 3. - 0 - 0.0909253507852554 - 6.9404938258230686e-003 - -0.5102267861366272 - <_> - - <_> - - - - <_>1 14 9 6 -1. - <_>1 16 9 2 3. - 0 - 5.7555912062525749e-003 - 0.0528490096330643 - -0.1075816974043846 - <_> - - <_> - - - - <_>7 0 8 6 -1. - <_>7 2 8 2 3. - 0 - 9.3440711498260498e-004 - -0.1060513034462929 - 0.0478242784738541 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 0 4 5 2. - <_>4 5 4 5 2. - 0 - 0.0523537993431091 - -0.0163872092962265 - 0.4231866896152496 - <_> - - <_> - - - - <_>11 8 6 7 -1. - <_>13 8 2 7 3. - 0 - -0.0243072099983692 - 0.1352169066667557 - -0.0100883599370718 - <_> - - <_> - - - - <_>6 0 2 13 -1. - <_>7 0 1 13 2. - 0 - -0.0137222399935126 - -0.4952099919319153 - 0.0117843402549624 - <_> - - <_> - - - - <_>10 10 6 8 -1. - <_>10 10 3 8 2. - 0 - -1.1442030081525445e-003 - 0.0438187308609486 - -0.0691040232777596 - <_> - - <_> - - - - <_>2 9 8 9 -1. - <_>2 12 8 3 3. - 0 - -0.0788481906056404 - 0.3519859910011292 - -0.0164646897464991 - <_> - - <_> - - - - <_>14 4 4 14 -1. - <_>16 4 2 7 2. - <_>14 11 2 7 2. - 0 - 1.7305529909208417e-003 - -0.0667900815606117 - 0.0824635773897171 - <_> - - <_> - - - - <_>4 9 7 8 -1. - <_>4 13 7 4 2. - 0 - -0.0129288397729397 - -0.0810021236538887 - 0.0852232873439789 - <_> - - <_> - - - - <_>7 1 6 8 -1. - <_>7 1 3 8 2. - 0 - 8.7096104398369789e-003 - -0.0500219017267227 - 0.1349322050809860 - <_> - - <_> - - - - <_>1 11 7 6 -1. - <_>1 13 7 2 3. - 0 - -0.0634830668568611 - -0.7768175005912781 - 7.0912609808146954e-003 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -4.3746097944676876e-003 - -0.1332938969135284 - 0.0426270402967930 - <_> - - <_> - - - - <_>0 10 15 6 -1. - <_>5 10 5 6 3. - 0 - -0.0439851693809032 - 0.1513186991214752 - -0.0408015586435795 - <_> - - <_> - - - - <_>9 10 6 5 -1. - <_>9 10 3 5 2. - 0 - -6.0488767921924591e-003 - -0.0536457411944866 - 0.0178327299654484 - <_> - - <_> - - - - <_>5 10 6 5 -1. - <_>8 10 3 5 2. - 0 - -5.1487190648913383e-004 - 0.0621029511094093 - -0.0953394025564194 - <_> - - <_> - - - - <_>7 6 7 4 -1. - <_>7 8 7 2 2. - 0 - -3.3046479802578688e-003 - -0.2473282068967819 - 0.0219773408025503 - <_> - - <_> - - - - <_>5 2 5 9 -1. - <_>5 5 5 3 3. - 0 - -3.0949179199524224e-004 - -0.0346560813486576 - 0.1959951072931290 - <_> - - <_> - - - - <_>7 12 13 3 -1. - <_>7 13 13 1 3. - 0 - -8.3323381841182709e-003 - 0.1743672937154770 - -0.0326315499842167 - <_> - - <_> - - - - <_>2 12 16 4 -1. - <_>2 14 16 2 2. - 0 - 6.6935829818248749e-003 - 0.0250507593154907 - -0.2736282944679260 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 1.4068570453673601e-003 - -0.0297970101237297 - 0.0657525807619095 - <_> - - <_> - - - - <_>0 0 20 4 -1. - <_>0 0 10 2 2. - <_>10 2 10 2 2. - 0 - 0.0407253988087177 - 0.0149674797430635 - -0.3711180090904236 - <_> - - <_> - - - - <_>6 14 13 2 -1. - <_>6 15 13 1 2. - 0 - -0.0215241201221943 - 0.3729447126388550 - -0.0141429100185633 - <_> - - <_> - - - - <_>1 10 13 3 -1. - <_>1 11 13 1 3. - 0 - 0.0416896305978298 - 8.3227548748254776e-003 - -0.6682286858558655 - <_> - - <_> - - - - <_>12 0 6 10 -1. - <_>15 0 3 5 2. - <_>12 5 3 5 2. - 0 - -3.2075429335236549e-003 - 0.0627410188317299 - -0.1306160986423492 - <_> - - <_> - - - - <_>3 16 13 2 -1. - <_>3 17 13 1 2. - 0 - 0.0264184307307005 - 6.6760168410837650e-003 - -0.7555707097053528 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - -0.0511538386344910 - -0.5038297176361084 - 2.2476969752460718e-003 - <_> - - <_> - - - - <_>1 16 13 3 -1. - <_>1 17 13 1 3. - 0 - 1.5723450342193246e-003 - -0.0602146200835705 - 0.0799331516027451 - <_> - - <_> - - - - <_>15 1 5 9 -1. - <_>15 4 5 3 3. - 0 - 1.2616170570254326e-003 - 0.0446749888360500 - -0.0838307365775108 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>0 1 9 2 2. - <_>9 3 9 2 2. - 0 - -0.0286086704581976 - -0.3024907112121582 - 0.0162548106163740 - <_> - - <_> - - - - <_>5 0 10 4 -1. - <_>5 2 10 2 2. - 0 - 0.0147264599800110 - -0.0494594201445580 - 0.1145775988698006 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0353192016482353 - 0.0112768197432160 - -0.4805553853511810 - <_> - - <_> - - - - <_>4 2 12 10 -1. - <_>4 2 6 10 2. - 0 - 0.2247018963098526 - -0.0105967698618770 - 0.5402629971504211 - <_> - - <_> - - - - <_>5 10 6 6 -1. - <_>8 10 3 6 2. - 0 - -7.0188841782510281e-003 - -0.1183698996901512 - 0.0529952794313431 - <_> - - <_> - - - - <_>5 2 12 6 -1. - <_>5 4 12 2 3. - 0 - -0.0291949305683374 - 0.2849856913089752 - -0.0146521301940084 - <_> - - <_> - - - - <_>8 0 3 12 -1. - <_>8 6 3 6 2. - 0 - -1.6918469918891788e-003 - 0.0677315220236778 - -0.0741295889019966 - <_> - - <_> - - - - <_>5 0 14 8 -1. - <_>5 4 14 4 2. - 0 - 0.0131104895845056 - -0.0404180511832237 - 0.0965377986431122 - <_> - - <_> - - - - <_>2 4 4 14 -1. - <_>2 4 2 7 2. - <_>4 11 2 7 2. - 0 - 7.5334981374908239e-005 - -0.0730650573968887 - 0.0710496678948402 - <_> - - <_> - - - - <_>10 9 10 6 -1. - <_>15 9 5 3 2. - <_>10 12 5 3 2. - 0 - 2.9962710104882717e-003 - 0.0244011301547289 - -0.1067982017993927 - <_> - - <_> - - - - <_>5 12 9 5 -1. - <_>8 12 3 5 3. - 0 - -0.0412361286580563 - 0.2544656097888947 - -0.0198012292385101 - <_> - - <_> - - - - <_>4 14 12 6 -1. - <_>8 14 4 6 3. - 0 - 2.2827479988336563e-003 - -0.0596221499145031 - 0.0868717879056931 - <_> - - <_> - - - - <_>2 5 12 14 -1. - <_>2 5 6 7 2. - <_>8 12 6 7 2. - 0 - -2.1318379731383175e-004 - 0.0405060611665249 - -0.1235762983560562 - <_> - - <_> - - - - <_>3 10 14 4 -1. - <_>10 10 7 2 2. - <_>3 12 7 2 2. - 0 - 4.1725938208401203e-003 - 0.0416747890412807 - -0.1302922964096069 - <_> - - <_> - - - - <_>4 2 12 4 -1. - <_>8 2 4 4 3. - 0 - -0.0179458595812321 - 0.2539598941802979 - -0.0207839291542768 - <_> - - <_> - - - - <_>12 0 4 14 -1. - <_>14 0 2 7 2. - <_>12 7 2 7 2. - 0 - -0.0609579309821129 - -0.5939993858337402 - 5.6327730417251587e-003 - <_> - - <_> - - - - <_>4 0 4 14 -1. - <_>4 0 2 7 2. - <_>6 7 2 7 2. - 0 - -8.3080737385898829e-004 - 0.0480113103985786 - -0.1128986999392510 - <_> - - <_> - - - - <_>12 9 6 11 -1. - <_>14 9 2 11 3. - 0 - 0.0270372293889523 - 0.0265243798494339 - -0.1720861941576004 - <_> - - <_> - - - - <_>0 4 3 14 -1. - <_>1 4 1 14 3. - 0 - 3.7293829955160618e-003 - -0.0507954508066177 - 0.1109343990683556 - <_> - - <_> - - - - <_>15 1 3 13 -1. - <_>16 1 1 13 3. - 0 - -1.0271129431203008e-003 - -0.0890258699655533 - 0.0498617403209209 - <_> - - <_> - - - - <_>2 1 3 13 -1. - <_>3 1 1 13 3. - 0 - 4.3261310202069581e-004 - -0.0764715299010277 - 0.0724907368421555 - <_> - - <_> - - - - <_>8 10 10 10 -1. - <_>13 10 5 5 2. - <_>8 15 5 5 2. - 0 - -0.0839979127049446 - 0.4017896056175232 - -8.4397885948419571e-003 - <_> - - <_> - - - - <_>6 0 2 20 -1. - <_>7 0 1 20 2. - 0 - -3.4407388884574175e-003 - -0.1432646065950394 - 0.0391704104840755 - <_> - - <_> - - - - <_>5 14 14 6 -1. - <_>12 14 7 3 2. - <_>5 17 7 3 2. - 0 - -0.0214187894016504 - 0.1583556979894638 - -0.0137018701061606 - <_> - - <_> - - - - <_>1 4 3 13 -1. - <_>2 4 1 13 3. - 0 - 2.4877830874174833e-003 - -0.0568754300475121 - 0.1021872013807297 - <_> - - <_> - - - - <_>18 6 2 14 -1. - <_>18 6 1 14 2. - 0 - -1.0390300303697586e-003 - 0.0815307125449181 - -0.0471837110817432 - <_> - - <_> - - - - <_>0 6 2 14 -1. - <_>1 6 1 14 2. - 0 - 4.6788761392235756e-004 - 0.0709956809878349 - -0.0884646028280258 - <_> - - <_> - - - - <_>10 2 9 5 -1. - <_>13 2 3 5 3. - 0 - 0.0274362601339817 - 0.0151905501261353 - -0.1211766973137856 - <_> - - <_> - - - - <_>2 0 6 7 -1. - <_>4 0 2 7 3. - 0 - -5.8917858405038714e-004 - -0.0814716070890427 - 0.0684807822108269 - <_> - - <_> - - - - <_>4 4 14 16 -1. - <_>11 4 7 8 2. - <_>4 12 7 8 2. - 0 - 0.0794390812516212 - -7.3907868936657906e-003 - 0.1490225940942764 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0351530909538269 - 0.4194208979606628 - -0.0124802896752954 - <_> - - <_> - - - - <_>12 8 7 6 -1. - <_>12 10 7 2 3. - 0 - 0.0682309716939926 - 9.3489149585366249e-003 - -0.2596547007560730 - <_> - - <_> - - - - <_>0 17 20 3 -1. - <_>10 17 10 3 2. - 0 - 0.0817330330610275 - 0.0155133903026581 - -0.3270446956157684 - <_> - - <_> - - - - <_>6 10 10 4 -1. - <_>6 10 5 4 2. - 0 - -3.0718350317329168e-003 - 0.0669384673237801 - -0.0422257483005524 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0563018806278706 - -0.0256806500256062 - 0.2172815054655075 - <_> - - <_> - - - - <_>12 8 7 6 -1. - <_>12 10 7 2 3. - 0 - 0.0251660197973251 - 0.0232283007353544 - -0.0927910432219505 - <_> - - <_> - - - - <_>7 11 6 8 -1. - <_>9 11 2 8 3. - 0 - 0.0650881975889206 - 6.8949609994888306e-003 - -0.8263949155807495 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - 2.2007930092513561e-003 - -0.0743942484259605 - 0.0872093811631203 - <_> - - <_> - - - - <_>6 2 4 15 -1. - <_>6 7 4 5 3. - 0 - -8.8553391396999359e-003 - -0.1320305019617081 - 0.0376584306359291 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - 0.0609424114227295 - 0.0101978396996856 - -0.5425286293029785 - <_> - - <_> - - - - <_>3 6 14 9 -1. - <_>3 9 14 3 3. - 0 - -5.2589550614356995e-004 - 0.4883571863174439 - -0.0118280798196793 - <_> - - <_> - - - - <_>4 5 12 8 -1. - <_>4 9 12 4 2. - 0 - 1.3005370274186134e-003 - -0.3889844119548798 - 0.0142263397574425 - <_> - - <_> - - - - <_>2 4 14 16 -1. - <_>2 4 7 8 2. - <_>9 12 7 8 2. - 0 - -0.1653168946504593 - 0.4000451862812042 - -0.0126667702570558 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 1.8595480360090733e-003 - 0.0478026606142521 - -0.1136891990900040 - <_> - - <_> - - - - <_>1 17 12 3 -1. - <_>7 17 6 3 2. - 0 - 0.0130651798099279 - -0.0337142199277878 - 0.1576226949691773 - <_> - - <_> - - - - <_>1 7 19 3 -1. - <_>1 8 19 1 3. - 0 - 0.0316127501428127 - 7.6767429709434509e-003 - -0.5964102149009705 - <_> - - <_> - - - - <_>4 0 12 10 -1. - <_>10 0 6 10 2. - 0 - -0.0225666202604771 - 0.1060371026396751 - -0.0473831705749035 - <_> - - <_> - - - - <_>6 11 12 4 -1. - <_>6 11 6 4 2. - 0 - 6.2679480761289597e-003 - 0.0345950312912464 - -0.0776223465800285 - <_> - - <_> - - - - <_>4 10 6 5 -1. - <_>7 10 3 5 2. - 0 - -0.0317580811679363 - -0.3214743137359619 - 0.0159864705055952 - <_> - - <_> - - - - <_>18 0 2 18 -1. - <_>18 0 1 18 2. - 0 - -0.0214776098728180 - 0.2052776068449020 - -0.0180746093392372 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 0.0185940507799387 - 0.0163755901157856 - -0.2995521128177643 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 0.0146044297143817 - -0.0204334408044815 - 0.2272551059722900 - <_> - - <_> - - - - <_>3 13 14 3 -1. - <_>3 14 14 1 3. - 0 - 1.9902919884771109e-003 - -0.0585182495415211 - 0.1099736019968987 - <_> - - <_> - - - - <_>12 8 7 6 -1. - <_>12 10 7 2 3. - 0 - 9.7299525514245033e-003 - 0.0313718616962433 - -0.0443699099123478 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - -2.3401379585266113e-003 - 0.0964882001280785 - -0.0572499297559261 - <_> - - <_> - - - - <_>12 8 7 6 -1. - <_>12 10 7 2 3. - 0 - -1.9590060692280531e-003 - -0.1403114944696426 - 0.0135463401675224 - <_> - - <_> - - - - <_>1 8 7 6 -1. - <_>1 10 7 2 3. - 0 - 8.4066856652498245e-003 - 0.0662895515561104 - -0.0803482830524445 - <_> - - <_> - - - - <_>5 7 12 12 -1. - <_>5 11 12 4 3. - 0 - 0.0525745488703251 - -0.0362970083951950 - 0.1463834047317505 - <_> - - <_> - - - - <_>4 5 10 10 -1. - <_>4 5 5 5 2. - <_>9 10 5 5 2. - 0 - 4.1065202094614506e-003 - 0.0303723495453596 - -0.1815577000379562 - <_> - - <_> - - - - <_>12 13 8 7 -1. - <_>12 13 4 7 2. - 0 - -4.1818427853286266e-003 - 0.0555907897651196 - -0.0371485203504562 - <_> - - <_> - - - - <_>4 0 9 6 -1. - <_>4 3 9 3 2. - 0 - -1.5470250509679317e-003 - 0.1034715026617050 - -0.0463747307658196 - <_> - - <_> - - - - <_>4 3 13 2 -1. - <_>4 4 13 1 2. - 0 - -8.2695618038997054e-004 - -0.0932969897985458 - 0.0437344610691071 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>1 0 1 18 2. - 0 - 4.1385791264474392e-003 - -0.0442664884030819 - 0.1096898019313812 - <_> - - <_> - - - - <_>0 13 20 2 -1. - <_>0 14 20 1 2. - 0 - -0.0336841195821762 - -0.6433715224266052 - 7.9893283545970917e-003 - <_> - - <_> - - - - <_>4 10 10 4 -1. - <_>9 10 5 4 2. - 0 - 0.0527988187968731 - -0.0124903004616499 - 0.4157246053218842 - <_> - - <_> - - - - <_>8 4 12 16 -1. - <_>8 4 6 16 2. - 0 - -0.2969925999641419 - -0.1959837973117828 - 9.4300797209143639e-003 - <_> - - <_> - - - - <_>0 4 12 16 -1. - <_>6 4 6 16 2. - 0 - 0.1119631007313728 - 0.0111627196893096 - -0.4683805108070374 - <_> - - <_> - - - - <_>12 5 6 9 -1. - <_>12 5 3 9 2. - 0 - -0.0185443107038736 - -0.0740807875990868 - 0.0195282101631165 - <_> - - <_> - - - - <_>0 13 8 7 -1. - <_>4 13 4 7 2. - 0 - -0.0109374299645424 - 0.0882065296173096 - -0.0628301873803139 - <_> - - <_> - - - - <_>12 0 3 16 -1. - <_>13 0 1 16 3. - 0 - 2.7186619117856026e-003 - 0.0308554805815220 - -0.0924058631062508 - <_> - - <_> - - - - <_>0 7 18 12 -1. - <_>6 7 6 12 3. - 0 - 0.0207273196429014 - -0.0525433011353016 - 0.1060841009020805 - <_> - - <_> - - - - <_>4 9 12 4 -1. - <_>8 9 4 4 3. - 0 - -0.0279619302600622 - 0.2173516005277634 - -0.0213561393320560 - <_> - - <_> - - - - <_>0 7 16 4 -1. - <_>0 7 8 2 2. - <_>8 9 8 2 2. - 0 - -9.0406360104680061e-003 - -0.1953538954257965 - 0.0300774201750755 - <_> - - <_> - - - - <_>7 4 9 5 -1. - <_>10 4 3 5 3. - 0 - -0.0109063498675823 - 0.1488863974809647 - -0.0311886798590422 - <_> - - <_> - - - - <_>5 0 3 16 -1. - <_>6 0 1 16 3. - 0 - -3.8616119418293238e-003 - -0.1209480017423630 - 0.0451440811157227 - <_> - - <_> - - - - <_>6 11 13 2 -1. - <_>6 12 13 1 2. - 0 - 4.3162601068615913e-003 - -0.0107136499136686 - 0.2811649143695831 - <_> - - <_> - - - - <_>1 11 13 2 -1. - <_>1 12 13 1 2. - 0 - -1.4098359970375896e-003 - 0.0646855086088181 - -0.0994713008403778 - <_> - - <_> - - - - <_>8 6 5 9 -1. - <_>8 9 5 3 3. - 0 - 3.2964099664241076e-003 - 0.1429533064365387 - -0.0311010107398033 - <_> - - <_> - - - - <_>6 4 4 8 -1. - <_>8 4 2 8 2. - 0 - -2.9802869539707899e-003 - -0.2457893043756485 - 0.0217602606862783 - <_> - - <_> - - - - <_>14 3 4 8 -1. - <_>14 3 2 8 2. - 0 - 0.0671787932515144 - 3.3457649406045675e-003 - -0.4568560123443604 - <_> - - <_> - - - - <_>2 3 4 8 -1. - <_>4 3 2 8 2. - 0 - 0.0291828494518995 - -0.0170168597251177 - 0.3354592919349670 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>12 3 2 7 3. - 0 - 1.7935150535777211e-003 - 0.0305161792784929 - -0.1252674013376236 - <_> - - <_> - - - - <_>4 6 8 8 -1. - <_>4 6 4 4 2. - <_>8 10 4 4 2. - 0 - 0.0204656794667244 - -0.0109099801629782 - 0.4355213940143585 - <_> - - <_> - - - - <_>10 9 6 7 -1. - <_>10 9 3 7 2. - 0 - -2.6115079526789486e-004 - 0.0387597605586052 - -0.0640986934304237 - <_> - - <_> - - - - <_>4 9 6 7 -1. - <_>7 9 3 7 2. - 0 - 3.7161160726100206e-003 - 0.0371508896350861 - -0.1546732038259506 - <_> - - <_> - - - - <_>4 10 12 5 -1. - <_>8 10 4 5 3. - 0 - -7.4094999581575394e-003 - -0.0827042236924171 - 0.0628099068999290 - <_> - - <_> - - - - <_>6 1 7 6 -1. - <_>6 3 7 2 3. - 0 - 0.0170948095619679 - -0.0483473315834999 - 0.0987708121538162 - <_> - - <_> - - - - <_>4 0 13 3 -1. - <_>4 1 13 1 3. - 0 - -3.0473200604319572e-003 - -0.1063883006572723 - 0.0309486500918865 - <_> - - <_> - - - - <_>4 3 4 14 -1. - <_>4 3 2 7 2. - <_>6 10 2 7 2. - 0 - 0.0345024988055229 - 0.0109972301870584 - -0.4286173880100250 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - -2.6834919117391109e-003 - -0.1498644948005676 - 0.0331576392054558 - <_> - - <_> - - - - <_>2 8 16 2 -1. - <_>10 8 8 2 2. - 0 - 9.2392861843109131e-003 - -0.0377333387732506 - 0.1577825993299484 - <_> - - <_> - - - - <_>11 6 8 14 -1. - <_>15 6 4 7 2. - <_>11 13 4 7 2. - 0 - 0.0882051065564156 - -0.0107047697529197 - 0.3235310912132263 - <_> - - <_> - - - - <_>1 0 6 19 -1. - <_>4 0 3 19 2. - 0 - 0.0778688862919807 - 0.0108046596869826 - -0.4424335062503815 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - -3.1202291138470173e-003 - 0.2044450938701630 - -0.0239764396101236 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 2.6000461075454950e-003 - 0.0457650199532509 - -0.1013889983296394 - <_> - - <_> - - - - <_>12 5 6 10 -1. - <_>15 5 3 5 2. - <_>12 10 3 5 2. - 0 - 7.0194108411669731e-003 - 0.0257407296448946 - -0.0490608401596546 - <_> - - <_> - - - - <_>2 5 6 10 -1. - <_>2 5 3 5 2. - <_>5 10 3 5 2. - 0 - -2.4108150973916054e-003 - -0.1183748021721840 - 0.0486499294638634 - <_> - - <_> - - - - <_>7 0 9 4 -1. - <_>7 2 9 2 2. - 0 - 0.0498862490057945 - -0.0144498804584146 - 0.2089405953884125 - <_> - - <_> - - - - <_>0 11 18 2 -1. - <_>9 11 9 2 2. - 0 - -7.2655039839446545e-003 - 0.0890421867370605 - -0.0498455502092838 - <_> - - <_> - - - - <_>6 6 8 9 -1. - <_>6 6 4 9 2. - 0 - 0.0105602703988552 - 0.0529117099940777 - -0.1150913983583450 - <_> - - <_> - - - - <_>4 4 9 5 -1. - <_>7 4 3 5 3. - 0 - 5.6417449377477169e-003 - -0.0686727464199066 - 0.0774893164634705 - <_> - - <_> - - - - <_>10 2 6 7 -1. - <_>10 2 3 7 2. - 0 - 4.3234648182988167e-003 - -0.0792070627212524 - 0.0534913092851639 - <_> - - <_> - - - - <_>5 2 9 5 -1. - <_>8 2 3 5 3. - 0 - 0.0111840702593327 - 0.0716560930013657 - -0.1063494011759758 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -0.0992304235696793 - 0.3716951906681061 - -6.6843931563198566e-003 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -4.4848727993667126e-003 - 0.0755774080753326 - -0.0694810822606087 - <_> - - <_> - - - - <_>4 1 14 4 -1. - <_>11 1 7 2 2. - <_>4 3 7 2 2. - 0 - -0.0191041808575392 - -0.1729121953248978 - 0.0113604096695781 - <_> - - <_> - - - - <_>9 1 2 13 -1. - <_>10 1 1 13 2. - 0 - -1.7672680551186204e-003 - 0.0925671607255936 - -0.0524700507521629 - <_> - - <_> - - - - <_>10 6 10 6 -1. - <_>15 6 5 3 2. - <_>10 9 5 3 2. - 0 - 0.0590715296566486 - 9.2153968289494514e-003 - -0.2668764889240265 - <_> - - <_> - - - - <_>0 6 10 6 -1. - <_>0 6 5 3 2. - <_>5 9 5 3 2. - 0 - -0.0343628190457821 - -0.5791472196578980 - 7.9972539097070694e-003 - <_> - - <_> - - - - <_>6 6 10 3 -1. - <_>6 6 5 3 2. - 0 - 0.0567665398120880 - 5.8937501162290573e-003 - -0.5227519273757935 - <_> - - <_> - - - - <_>1 7 4 13 -1. - <_>3 7 2 13 2. - 0 - -0.1217354983091354 - -0.5222960114479065 - 7.9296948388218880e-003 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - 0.0342746190726757 - -0.0170698799192905 - 0.1295899003744125 - <_> - - <_> - - - - <_>0 0 6 5 -1. - <_>3 0 3 5 2. - 0 - -6.7191021516919136e-003 - 0.1118772029876709 - -0.0446857288479805 - <_> - - <_> - - - - <_>15 6 5 12 -1. - <_>15 10 5 4 3. - 0 - 0.0316982604563236 - 0.0285293199121952 - -0.1161706969141960 - <_> - - <_> - - - - <_>0 1 6 16 -1. - <_>0 1 3 8 2. - <_>3 9 3 8 2. - 0 - -0.0953267514705658 - 0.3636204898357391 - -0.0135233197361231 - <_> - - <_> - - - - <_>0 0 20 2 -1. - <_>0 0 10 2 2. - 0 - 0.1262056976556778 - 6.0956259258091450e-003 - -0.8494762182235718 - <_> - - <_> - - - - <_>0 6 5 12 -1. - <_>0 10 5 4 3. - 0 - -0.0273248702287674 - -0.2904601991176605 - 0.0143038798123598 - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>10 0 9 3 2. - <_>1 3 9 3 2. - 0 - -0.0736186802387238 - 0.4882428944110870 - -0.0102698598057032 - <_> - - <_> - - - - <_>3 0 12 5 -1. - <_>7 0 4 5 3. - 0 - 5.0417389720678329e-003 - -0.0847702771425247 - 0.0560356117784977 - <_> - - <_> - - - - <_>7 0 9 5 -1. - <_>10 0 3 5 3. - 0 - 2.7569099329411983e-003 - -0.0482694804668427 - 0.0385255701839924 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.0219673700630665 - 0.0861905664205551 - -0.0807973295450211 - <_> - - <_> - - - - <_>11 2 8 18 -1. - <_>11 2 4 18 2. - 0 - -0.3863753080368042 - -0.8399801850318909 - 3.6657860036939383e-003 - <_> - - <_> - - - - <_>1 2 8 18 -1. - <_>5 2 4 18 2. - 0 - -0.4108321964740753 - -0.9718242883682251 - 3.9403690025210381e-003 - <_> - - <_> - - - - <_>12 7 5 6 -1. - <_>12 10 5 3 2. - 0 - -0.0410332791507244 - 1. - -3.3212041016668081e-003 - <_> - - <_> - - - - <_>2 1 14 4 -1. - <_>2 1 7 2 2. - <_>9 3 7 2 2. - 0 - 0.0243050009012222 - 0.0182349700480700 - -0.2495432049036026 - <_> - - <_> - - - - <_>12 7 8 6 -1. - <_>12 9 8 2 3. - 0 - 1.6170740127563477e-003 - -0.1295816004276276 - 0.0327252000570297 - <_> - - <_> - - - - <_>0 7 8 6 -1. - <_>0 9 8 2 3. - 0 - 0.0447852686047554 - -0.0238688495010138 - 0.1976343989372253 - <_> - - <_> - - - - <_>7 7 13 2 -1. - <_>7 8 13 1 2. - 0 - 0.0402095913887024 - 5.3034191951155663e-003 - -0.6628453135490418 - <_> - - <_> - - - - <_>1 6 18 9 -1. - <_>1 9 18 3 3. - 0 - 3.3616109285503626e-003 - 0.3022617995738983 - -0.0161032807081938 - <_> - - <_> - - - - <_>0 8 20 6 -1. - <_>0 10 20 2 3. - 0 - -1.1624400503933430e-003 - -0.2793419063091278 - 0.0182761698961258 - <_> - - <_> - - - - <_>4 3 4 13 -1. - <_>6 3 2 13 2. - 0 - 0.0555242598056793 - -6.5288958139717579e-003 - 0.7569044232368469 - <_> - - <_> - - - - <_>13 3 3 15 -1. - <_>14 3 1 15 3. - 0 - 4.6308599412441254e-003 - 0.0282546300441027 - -0.0949451774358749 - <_> - - <_> - - - - <_>3 15 14 3 -1. - <_>3 16 14 1 3. - 0 - 2.7387610170990229e-003 - -0.0469804108142853 - 0.0945112183690071 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 2.9127181041985750e-003 - -0.0222646705806255 - 0.0720913335680962 - <_> - - <_> - - - - <_>0 16 17 3 -1. - <_>0 17 17 1 3. - 0 - -0.0236285105347633 - -0.3914751112461090 - 0.0128408595919609 - <_> - - <_> - - - - <_>5 11 11 6 -1. - <_>5 14 11 3 2. - 0 - 7.1669870521873236e-004 - 0.0204136800020933 - -0.1658779978752136 - <_> - - <_> - - - - <_>4 3 3 15 -1. - <_>5 3 1 15 3. - 0 - 0.0327236317098141 - 8.5352789610624313e-003 - -0.5183864831924439 - <_> - - <_> - - - - <_>3 1 14 9 -1. - <_>3 4 14 3 3. - 0 - 0.0563932694494724 - -0.0249375998973846 - 0.1902554929256439 - <_> - - <_> - - - - <_>0 0 20 8 -1. - <_>0 4 20 4 2. - 0 - 0.2939200103282929 - 5.7944031432271004e-003 - -0.8553059101104736 - <_> - - <_> - - - - <_>7 6 7 4 -1. - <_>7 8 7 2 2. - 0 - -5.6904228404164314e-003 - -0.2435491979122162 - 0.0106016797944903 - <_> - - <_> - - - - <_>2 13 13 2 -1. - <_>2 14 13 1 2. - 0 - 9.8184328526258469e-003 - -0.0135997701436281 - 0.3379540145397186 - <_> - - <_> - - - - <_>2 12 16 3 -1. - <_>2 13 16 1 3. - 0 - -0.0369705893099308 - -0.5730929970741272 - 0.0100909704342484 - <_> - - <_> - - - - <_>1 11 13 3 -1. - <_>1 12 13 1 3. - 0 - 0.0186076108366251 - -0.0129385702311993 - 0.4112375080585480 - <_> - - <_> - - - - <_>7 1 13 3 -1. - <_>7 2 13 1 3. - 0 - -1.5049210051074624e-003 - -0.0846785679459572 - 0.0337247513234615 - <_> - - <_> - - - - <_>5 13 7 6 -1. - <_>5 16 7 3 2. - 0 - -0.0390403792262077 - -0.4739069938659668 - 9.5385275781154633e-003 - <_> - - <_> - - - - <_>4 3 14 3 -1. - <_>4 4 14 1 3. - 0 - -3.4379279240965843e-003 - 0.1411287039518356 - -0.0223677698522806 - <_> - - <_> - - - - <_>3 2 14 2 -1. - <_>3 3 14 1 2. - 0 - -1.1330900015309453e-003 - -0.1395018994808197 - 0.0325058698654175 - <_> - - <_> - - - - <_>3 0 15 14 -1. - <_>3 7 15 7 2. - 0 - -0.0653704702854156 - 0.1480170041322708 - -0.0220399200916290 - <_> - - <_> - - - - <_>4 1 12 14 -1. - <_>4 8 12 7 2. - 0 - -0.2097097039222717 - -0.7439227104187012 - 7.5829490087926388e-003 - <_> - - <_> - - - - <_>9 13 6 7 -1. - <_>11 13 2 7 3. - 0 - -5.8827060274779797e-003 - -0.0632530376315117 - 0.0233638398349285 - <_> - - <_> - - - - <_>6 14 8 4 -1. - <_>6 16 8 2 2. - 0 - -0.0297594498842955 - 0.4873329997062683 - -9.2995148152112961e-003 - <_> - - <_> - - - - <_>8 14 8 6 -1. - <_>8 16 8 2 3. - 0 - -0.0530643612146378 - -0.3806410133838654 - 5.6431228294968605e-003 - <_> - - <_> - - - - <_>5 13 6 7 -1. - <_>7 13 2 7 3. - 0 - 0.0666673332452774 - 4.6323328278958797e-003 - -0.9153608083724976 - <_> - - <_> - - - - <_>11 10 8 5 -1. - <_>11 10 4 5 2. - 0 - -0.0923252329230309 - 0.2918460071086884 - -7.4540497735142708e-003 - <_> - - <_> - - - - <_>1 0 8 16 -1. - <_>1 0 4 8 2. - <_>5 8 4 8 2. - 0 - 0.0856440365314484 - -0.0102885300293565 - 0.4125156104564667 - <_> - - <_> - - - - <_>8 2 6 18 -1. - <_>8 8 6 6 3. - 0 - 0.2296997010707855 - -4.6802540309727192e-003 - 0.3650914132595062 - <_> - - <_> - - - - <_>6 2 6 18 -1. - <_>6 8 6 6 3. - 0 - 8.7508037686347961e-003 - 0.0778168514370918 - -0.0636575594544411 - <_> - - <_> - - - - <_>7 6 9 4 -1. - <_>7 8 9 2 2. - 0 - 5.7104961015284061e-003 - -0.0596532002091408 - 0.0427327305078506 - <_> - - <_> - - - - <_>1 10 5 9 -1. - <_>1 13 5 3 3. - 0 - -4.8026451840996742e-003 - -0.0989185124635696 - 0.0449569784104824 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - 3.2986800651997328e-003 - 0.0331645384430885 - -0.1347782015800476 - <_> - - <_> - - - - <_>0 14 10 6 -1. - <_>0 14 5 3 2. - <_>5 17 5 3 2. - 0 - -4.0092850103974342e-003 - 0.1355177015066147 - -0.0371397808194160 - <_> - - <_> - - - - <_>9 11 5 9 -1. - <_>9 14 5 3 3. - 0 - -7.7049341052770615e-004 - 0.0266906004399061 - -0.0845023915171623 - <_> - - <_> - - - - <_>0 16 12 4 -1. - <_>4 16 4 4 3. - 0 - 0.0230740997940302 - -0.0263989698141813 - 0.1852087974548340 - <_> - - <_> - - - - <_>14 6 3 14 -1. - <_>15 6 1 14 3. - 0 - 9.9315540865063667e-003 - 0.0217025000602007 - -0.1414783000946045 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>6 9 4 4 2. - <_>10 13 4 4 2. - 0 - -0.0439774803817272 - -0.5930699706077576 - 7.6594059355556965e-003 - <_> - - <_> - - - - <_>8 5 4 7 -1. - <_>8 5 2 7 2. - 0 - -2.1170598920434713e-003 - 0.0969894975423813 - -0.0499889589846134 - <_> - - <_> - - - - <_>6 11 6 9 -1. - <_>8 11 2 9 3. - 0 - -0.0111789498478174 - -0.1505848020315170 - 0.0313856899738312 - <_> - - <_> - - - - <_>7 2 6 16 -1. - <_>10 2 3 8 2. - <_>7 10 3 8 2. - 0 - -1.1888720327988267e-003 - 0.0876652523875237 - -0.0688619464635849 - <_> - - <_> - - - - <_>0 15 18 5 -1. - <_>9 15 9 5 2. - 0 - -0.0122058596462011 - 0.0826706662774086 - -0.0653268992900848 - <_> - - <_> - - - - <_>4 12 14 4 -1. - <_>11 12 7 2 2. - <_>4 14 7 2 2. - 0 - -0.0376459695398808 - -0.4822615981101990 - 5.5899759754538536e-003 - <_> - - <_> - - - - <_>2 12 14 4 -1. - <_>2 12 7 2 2. - <_>9 14 7 2 2. - 0 - -1.7758710309863091e-003 - -0.0916063413023949 - 0.0583803616464138 - <_> - - <_> - - - - <_>4 3 14 3 -1. - <_>4 3 7 3 2. - 0 - -0.0111162997782230 - 0.1471060961484909 - -0.0292559992522001 - <_> - - <_> - - - - <_>0 2 10 3 -1. - <_>5 2 5 3 2. - 0 - 4.3831788934767246e-004 - -0.1049474999308586 - 0.0444458909332752 - <_> - - <_> - - - - <_>3 0 15 8 -1. - <_>8 0 5 8 3. - 0 - -0.0986952111124992 - 0.2652114927768707 - -9.5453672111034393e-003 - <_> - - <_> - - - - <_>2 5 16 2 -1. - <_>10 5 8 2 2. - 0 - 0.0117361200973392 - 0.0289686806499958 - -0.1535501033067703 - <_> - - <_> - - - - <_>6 0 8 9 -1. - <_>6 0 4 9 2. - 0 - -0.0366011410951614 - 0.2406360954046249 - -0.0225255992263556 - <_> - - <_> - - - - <_>3 2 10 6 -1. - <_>3 2 5 3 2. - <_>8 5 5 3 2. - 0 - -0.0523712895810604 - -0.4900667071342468 - 0.0103195598348975 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -3.1134579330682755e-003 - 0.0622871294617653 - -0.0452340394258499 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 1.0345289483666420e-003 - -0.0565487295389175 - 0.1197013035416603 - <_> - - <_> - - - - <_>14 1 3 13 -1. - <_>15 1 1 13 3. - 0 - -2.3240610025823116e-003 - -0.0952652469277382 - 0.0324024781584740 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0274589806795120 - 0.2954815924167633 - -0.0160165093839169 - <_> - - <_> - - - - <_>11 10 8 6 -1. - <_>11 12 8 2 3. - 0 - -9.3150883913040161e-003 - -0.1146584972739220 - 0.0281716808676720 - <_> - - <_> - - - - <_>1 10 8 6 -1. - <_>1 12 8 2 3. - 0 - 7.6356199570000172e-003 - 0.0292644798755646 - -0.1616635024547577 - <_> - - <_> - - - - <_>3 3 14 3 -1. - <_>3 4 14 1 3. - 0 - 0.0161075908690691 - -0.0309233497828245 - 0.1667739003896713 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 0.0614607892930508 - 8.1282109022140503e-003 - -0.5483344793319702 - <_> - - <_> - - - - <_>4 2 15 9 -1. - <_>4 5 15 3 3. - 0 - 0.0433773212134838 - -7.7782347798347473e-003 - 0.3557837009429932 - <_> - - <_> - - - - <_>0 1 13 3 -1. - <_>0 2 13 1 3. - 0 - -0.0158094801008701 - -0.3123717904090881 - 0.0149107603356242 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - -0.0432630293071270 - 0.4739317893981934 - -9.4731850549578667e-003 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 1.0775650152936578e-003 - -0.1089264005422592 - 0.0507807582616806 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - -6.8012787960469723e-003 - -0.0938413068652153 - 0.0385557301342487 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - -3.8845991366542876e-004 - 0.0640718713402748 - -0.0935772135853767 - <_> - - <_> - - - - <_>6 16 14 4 -1. - <_>13 16 7 2 2. - <_>6 18 7 2 2. - 0 - 3.8177249953150749e-003 - -0.0475907400250435 - 0.0719976723194122 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -3.1246189028024673e-003 - 0.1526986956596375 - -0.0487896502017975 - <_> - - <_> - - - - <_>4 16 16 4 -1. - <_>12 16 8 2 2. - <_>4 18 8 2 2. - 0 - 0.0609805099666119 - 8.0068446695804596e-003 - -0.6760275959968567 - <_> - - <_> - - - - <_>0 16 16 4 -1. - <_>0 16 8 2 2. - <_>8 18 8 2 2. - 0 - 2.1819709800183773e-003 - -0.0684917494654655 - 0.0758635774254799 - <_> - - <_> - - - - <_>8 4 6 5 -1. - <_>8 4 3 5 2. - 0 - 2.4469599593430758e-003 - -0.0743712931871414 - 0.0320118591189384 - <_> - - <_> - - - - <_>6 4 6 5 -1. - <_>9 4 3 5 2. - 0 - 1.4674840494990349e-003 - -0.1191250979900360 - 0.0466677397489548 - <_> - - <_> - - - - <_>8 7 4 8 -1. - <_>8 11 4 4 2. - 0 - -2.1786419674754143e-003 - -0.0653242766857147 - 0.0763552784919739 - <_> - - <_> - - - - <_>4 6 10 12 -1. - <_>4 12 10 6 2. - 0 - -2.8284740983508527e-004 - 0.0582924000918865 - -0.0878471881151199 - <_> - - <_> - - - - <_>1 5 18 12 -1. - <_>1 9 18 4 3. - 0 - 0.0147231100127101 - 0.1982049047946930 - -0.0249629803001881 - <_> - - <_> - - - - <_>4 6 9 4 -1. - <_>4 8 9 2 2. - 0 - 4.6598021872341633e-003 - -0.0937327370047569 - 0.0541978403925896 - <_> - - <_> - - - - <_>1 5 19 3 -1. - <_>1 6 19 1 3. - 0 - -0.0603169910609722 - -0.6295881271362305 - 6.8706739693880081e-003 - <_> - - <_> - - - - <_>2 3 12 14 -1. - <_>2 3 6 7 2. - <_>8 10 6 7 2. - 0 - -3.6654649302363396e-003 - 0.0361301898956299 - -0.1281609982252121 - <_> - - <_> - - - - <_>13 0 3 16 -1. - <_>13 8 3 8 2. - 0 - 0.0148754799738526 - -0.0243139099329710 - 0.0466574095189571 - <_> - - <_> - - - - <_>4 0 3 16 -1. - <_>4 8 3 8 2. - 0 - 0.1184287965297699 - 0.0104761300608516 - -0.5178639292716980 - <_> - - <_> - - - - <_>4 0 12 14 -1. - <_>8 0 4 14 3. - 0 - 0.1980919986963272 - 0.0101578002795577 - -0.4187220931053162 - <_> - - <_> - - - - <_>0 10 10 6 -1. - <_>0 10 5 3 2. - <_>5 13 5 3 2. - 0 - -0.1016753017902374 - -0.8512129187583923 - 4.4935508631169796e-003 - <_> - - <_> - - - - <_>7 4 13 3 -1. - <_>7 5 13 1 3. - 0 - -0.0303252004086971 - -0.3180339038372040 - 6.4301840029656887e-003 - <_> - - <_> - - - - <_>2 5 6 10 -1. - <_>5 5 3 10 2. - 0 - 0.0345318503677845 - -0.0125614302232862 - 0.3477819859981537 - <_> - - <_> - - - - <_>11 6 8 14 -1. - <_>15 6 4 7 2. - <_>11 13 4 7 2. - 0 - -0.0351333804428577 - 0.1147503033280373 - -0.0175271499902010 - <_> - - <_> - - - - <_>3 1 3 13 -1. - <_>4 1 1 13 3. - 0 - 5.3501729853451252e-003 - 0.0352634191513062 - -0.1386768072843552 - <_> - - <_> - - - - <_>11 6 8 14 -1. - <_>15 6 4 7 2. - <_>11 13 4 7 2. - 0 - 0.0312092993408442 - -0.0209251008927822 - 0.1474861055612564 - <_> - - <_> - - - - <_>3 1 3 13 -1. - <_>4 1 1 13 3. - 0 - -5.5827602045610547e-004 - -0.0955442413687706 - 0.0562348999083042 - <_> - - <_> - - - - <_>9 5 10 9 -1. - <_>9 5 5 9 2. - 0 - -0.2159986048936844 - 0.5971019864082336 - -3.9994427934288979e-003 - <_> - - <_> - - - - <_>1 6 8 14 -1. - <_>1 6 4 7 2. - <_>5 13 4 7 2. - 0 - 0.0770182013511658 - -0.0121823698282242 - 0.3599503934383392 - <_> - - <_> - - - - <_>11 13 9 6 -1. - <_>11 15 9 2 3. - 0 - -0.0258083492517471 - -0.1999460011720657 - 0.0165620408952236 - <_> - - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - 4.0148189291357994e-003 - 0.0388748608529568 - -0.1177598983049393 - <_> - - <_> - - - - <_>12 11 8 9 -1. - <_>12 14 8 3 3. - 0 - 7.4287859206378926e-006 - 0.0314054600894451 - -0.0491425096988678 - <_> - - <_> - - - - <_>2 11 15 9 -1. - <_>2 14 15 3 3. - 0 - -2.8249230235815048e-003 - -0.0558891184628010 - 0.1179113015532494 - <_> - - <_> - - - - <_>2 16 18 4 -1. - <_>8 16 6 4 3. - 0 - -0.0227131303399801 - 0.1073333993554115 - -0.0416476801037788 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>7 9 6 3 3. - 0 - -0.0100521696731448 - -0.1410229057073593 - 0.0377072691917419 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>14 0 3 10 2. - 0 - -0.2102396935224533 - -0.6318464279174805 - 3.6316630430519581e-003 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>3 0 3 10 2. - 0 - -0.0118127102032304 - 0.1212301030755043 - -0.0503737889230251 - <_> - - <_> - - - - <_>13 1 4 16 -1. - <_>15 1 2 8 2. - <_>13 9 2 8 2. - 0 - 6.3666589558124542e-003 - 0.0301988497376442 - -0.0959202572703362 - <_> - - <_> - - - - <_>1 9 6 11 -1. - <_>3 9 2 11 3. - 0 - -0.1214641034603119 - -0.6869606971740723 - 6.8671889603137970e-003 - <_> - - <_> - - - - <_>6 12 13 3 -1. - <_>6 13 13 1 3. - 0 - 0.0235683005303144 - -0.0103768697008491 - 0.2633312046527863 - <_> - - <_> - - - - <_>0 0 12 10 -1. - <_>0 0 6 5 2. - <_>6 5 6 5 2. - 0 - -4.9841329455375671e-003 - 0.0523144491016865 - -0.0865979194641113 - <_> - - <_> - - - - <_>4 5 13 3 -1. - <_>4 6 13 1 3. - 0 - 1.4171230141073465e-003 - -0.0414451882243156 - 0.0933327674865723 - <_> - - <_> - - - - <_>0 4 7 6 -1. - <_>0 6 7 2 3. - 0 - 1.6522710211575031e-003 - 0.0272923391312361 - -0.1719374060630798 - <_> - - <_> - - - - <_>13 6 4 8 -1. - <_>13 10 4 4 2. - 0 - -0.0421914681792259 - 0.7758833765983582 - -2.4552440736442804e-003 - <_> - - <_> - - - - <_>3 6 4 8 -1. - <_>3 10 4 4 2. - 0 - -1.5193390427157283e-003 - 0.2329716980457306 - -0.0194999203085899 - <_> - - <_> - - - - <_>15 8 5 6 -1. - <_>15 11 5 3 2. - 0 - -5.9203859418630600e-003 - -0.0834959298372269 - 0.0197560004889965 - <_> - - <_> - - - - <_>0 4 13 3 -1. - <_>0 5 13 1 3. - 0 - 6.4658280462026596e-003 - -0.0406683012843132 - 0.1223602965474129 - <_> - - <_> - - - - <_>9 8 10 6 -1. - <_>14 8 5 3 2. - <_>9 11 5 3 2. - 0 - -0.0481106713414192 - -0.3162949979305267 - 0.0126943401992321 - <_> - - <_> - - - - <_>1 8 10 6 -1. - <_>1 8 5 3 2. - <_>6 11 5 3 2. - 0 - 5.0246939063072205e-003 - 0.0313569009304047 - -0.1919033974409103 - <_> - - <_> - - - - <_>5 5 15 6 -1. - <_>5 8 15 3 2. - 0 - 0.1115801036357880 - -0.0140738897025585 - 0.1784895956516266 - <_> - - <_> - - - - <_>2 8 14 2 -1. - <_>9 8 7 2 2. - 0 - -0.0646658763289452 - -0.5623084902763367 - 8.2082729786634445e-003 - <_> - - <_> - - - - <_>9 1 6 7 -1. - <_>9 1 3 7 2. - 0 - -0.0579424686729908 - 0.7734174728393555 - -4.3547940440475941e-003 - <_> - - <_> - - - - <_>5 1 6 7 -1. - <_>8 1 3 7 2. - 0 - -8.1669846549630165e-003 - 0.2101934999227524 - -0.0208022203296423 - <_> - - <_> - - - - <_>0 6 20 6 -1. - <_>0 9 20 3 2. - 0 - 0.0285068396478891 - 0.0814131274819374 - -0.0626635104417801 - <_> - - <_> - - - - <_>2 8 15 2 -1. - <_>2 9 15 1 2. - 0 - 2.4857679381966591e-003 - -0.1563597023487091 - 0.0352108590304852 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 0.0197989493608475 - 0.0113537395372987 - -0.1653116047382355 - <_> - - <_> - - - - <_>0 2 15 6 -1. - <_>0 4 15 2 3. - 0 - -0.0270279198884964 - 0.2891221940517426 - -0.0167530700564384 - <_> - - <_> - - - - <_>5 2 15 2 -1. - <_>5 3 15 1 2. - 0 - -6.9706928916275501e-003 - -0.2576938867568970 - 0.0163550209254026 - <_> - - <_> - - - - <_>5 9 7 4 -1. - <_>5 11 7 2 2. - 0 - 1.1425119591876864e-003 - -0.0410568006336689 - 0.1158090010285378 - <_> - - <_> - - - - <_>13 9 4 8 -1. - <_>13 13 4 4 2. - 0 - -1.3041249476373196e-003 - 0.0510829798877239 - -0.1172436997294426 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - 3.7698419764637947e-003 - 0.0585573315620422 - -0.0828401073813438 - <_> - - <_> - - - - <_>12 11 5 6 -1. - <_>12 14 5 3 2. - 0 - -0.0486898683011532 - -0.3876915872097015 - 8.6165666580200195e-003 - <_> - - <_> - - - - <_>3 3 14 9 -1. - <_>3 6 14 3 3. - 0 - -0.1147174015641213 - 0.1344410032033920 - -0.0428486913442612 - <_> - - <_> - - - - <_>12 11 5 6 -1. - <_>12 14 5 3 2. - 0 - 0.0235035195946693 - 3.8586359005421400e-003 - -0.4361529946327210 - <_> - - <_> - - - - <_>3 11 5 6 -1. - <_>3 14 5 3 2. - 0 - -5.9582752874121070e-004 - 0.0423767305910587 - -0.1216159015893936 - <_> - - <_> - - - - <_>2 9 17 8 -1. - <_>2 13 17 4 2. - 0 - 5.4052029736340046e-003 - -0.0237530004233122 - 0.2013726979494095 - <_> - - <_> - - - - <_>6 8 7 12 -1. - <_>6 12 7 4 3. - 0 - 9.1158300638198853e-003 - 0.0280881691724062 - -0.1966772973537445 - <_> - - <_> - - - - <_>11 0 4 9 -1. - <_>11 0 2 9 2. - 0 - 3.3211729023605585e-003 - -0.0512588992714882 - 0.0479939803481102 - <_> - - <_> - - - - <_>6 2 4 16 -1. - <_>6 2 2 8 2. - <_>8 10 2 8 2. - 0 - 0.0129754999652505 - 0.0118510201573372 - -0.3944402039051056 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -5.0546238198876381e-003 - -0.1095615997910500 - 0.0426627807319164 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -0.0768244788050652 - 0.7626957297325134 - -6.6229291260242462e-003 - <_> - - <_> - - - - <_>10 4 10 6 -1. - <_>15 4 5 3 2. - <_>10 7 5 3 2. - 0 - -1.8690669676288962e-003 - 0.0401126593351364 - -0.0713981986045837 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>6 0 6 4 3. - 0 - -6.0407500714063644e-003 - 0.1261429041624069 - -0.0395851507782936 - <_> - - <_> - - - - <_>7 1 9 7 -1. - <_>10 1 3 7 3. - 0 - -0.0450132302939892 - -0.2187144011259079 - 6.5213250927627087e-003 - <_> - - <_> - - - - <_>4 1 9 7 -1. - <_>7 1 3 7 3. - 0 - 3.8492688909173012e-003 - -0.0922133028507233 - 0.0669251829385757 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>9 0 1 13 2. - 0 - -4.3247821740806103e-003 - 0.1497375071048737 - -0.0311235599219799 - <_> - - <_> - - - - <_>1 1 12 17 -1. - <_>5 1 4 17 3. - 0 - -0.0267768409103155 - -0.1143222972750664 - 0.0530902594327927 - <_> - - <_> - - - - <_>9 1 6 12 -1. - <_>12 1 3 6 2. - <_>9 7 3 6 2. - 0 - 2.0645130425691605e-003 - -0.0384834185242653 - 0.0715077668428421 - <_> - - <_> - - - - <_>2 5 9 15 -1. - <_>5 5 3 15 3. - 0 - 0.0572065189480782 - 0.0124631403014064 - -0.3988445997238159 - <_> - - <_> - - - - <_>4 0 16 4 -1. - <_>12 0 8 2 2. - <_>4 2 8 2 2. - 0 - 7.7696829102933407e-003 - -0.0243099592626095 - 0.0611208416521549 - <_> - - <_> - - - - <_>0 0 16 4 -1. - <_>0 0 8 2 2. - <_>8 2 8 2 2. - 0 - 2.8191099409013987e-003 - 0.0622438713908196 - -0.0797742828726768 - <_> - - <_> - - - - <_>10 4 10 6 -1. - <_>15 4 5 3 2. - <_>10 7 5 3 2. - 0 - -0.0517471097409725 - -0.2047557979822159 - 9.8433922976255417e-003 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 4.2840079404413700e-003 - -0.0367991290986538 - 0.1238069981336594 - <_> - - <_> - - - - <_>5 13 13 2 -1. - <_>5 14 13 1 2. - 0 - -8.0563372466713190e-004 - -0.0537424907088280 - 0.0687464326620102 - <_> - - <_> - - - - <_>0 4 10 6 -1. - <_>0 4 5 3 2. - <_>5 7 5 3 2. - 0 - 0.0460624508559704 - 7.3871058411896229e-003 - -0.6113321185112000 - <_> - - <_> - - - - <_>8 11 12 5 -1. - <_>12 11 4 5 3. - 0 - 0.0668072700500488 - -0.0125453099608421 - 0.1573168933391571 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 2.0568699110299349e-003 - 0.0430873893201351 - -0.1106270030140877 - <_> - - <_> - - - - <_>11 13 7 6 -1. - <_>11 15 7 2 3. - 0 - 2.8760819695889950e-003 - 0.0258009806275368 - -0.0846978574991226 - <_> - - <_> - - - - <_>1 14 18 6 -1. - <_>1 17 18 3 2. - 0 - -4.9642049707472324e-003 - 0.0831687226891518 - -0.0567508600652218 - -1.2330470085144043 - 42 - -1 - <_> - - - <_> - - <_> - - - - <_>3 1 14 6 -1. - <_>3 3 14 2 3. - 0 - 0.0151668498292565 - -0.1750102937221527 - 0.1516530066728592 - <_> - - <_> - - - - <_>12 0 6 6 -1. - <_>12 0 3 6 2. - 0 - 4.1852002032101154e-003 - -0.1825325936079025 - 0.1054553017020226 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - -2.6159440167248249e-003 - -0.2151761054992676 - 0.0774602591991425 - <_> - - <_> - - - - <_>5 7 12 5 -1. - <_>9 7 4 5 3. - 0 - 2.7645078953355551e-003 - -0.1150690987706184 - 0.0677712634205818 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>5 14 4 4 2. - 0 - -2.7296729967929423e-004 - 0.0557126514613628 - -0.2872366905212402 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 2.4992981343530118e-004 - 0.0552024990320206 - -0.1519149988889694 - <_> - - <_> - - - - <_>2 0 9 5 -1. - <_>5 0 3 5 3. - 0 - 1.3287579640746117e-003 - -0.1256757974624634 - 0.0940948277711868 - <_> - - <_> - - - - <_>9 2 6 16 -1. - <_>12 2 3 8 2. - <_>9 10 3 8 2. - 0 - -2.4653770960867405e-003 - 0.0493935905396938 - -0.2223927974700928 - <_> - - <_> - - - - <_>6 5 2 14 -1. - <_>6 12 2 7 2. - 0 - -3.2979049719870090e-003 - -0.1736799031496048 - 0.0693910717964172 - <_> - - <_> - - - - <_>15 4 4 16 -1. - <_>17 4 2 8 2. - <_>15 12 2 8 2. - 0 - -0.0496678091585636 - 0.3285422027111054 - -0.0330672189593315 - <_> - - <_> - - - - <_>5 1 10 8 -1. - <_>5 1 5 4 2. - <_>10 5 5 4 2. - 0 - 5.7844468392431736e-003 - 0.0612895190715790 - -0.1687342971563339 - <_> - - <_> - - - - <_>11 7 7 6 -1. - <_>11 9 7 2 3. - 0 - 2.9754149727523327e-003 - -0.2401700019836426 - 0.0579064786434174 - <_> - - <_> - - - - <_>1 2 14 3 -1. - <_>1 3 14 1 3. - 0 - 2.3769649851601571e-004 - 0.1114102005958557 - -0.0865080207586288 - <_> - - <_> - - - - <_>13 5 4 8 -1. - <_>13 9 4 4 2. - 0 - 5.4410300217568874e-003 - -0.0892577022314072 - 0.0284929797053337 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - 2.5746610481292009e-003 - 0.0603835806250572 - -0.1477154046297073 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - -0.0121554397046566 - 0.1802673041820526 - -0.0357449613511562 - <_> - - <_> - - - - <_>0 5 18 8 -1. - <_>0 5 9 4 2. - <_>9 9 9 4 2. - 0 - 5.5069979280233383e-003 - 0.0614534690976143 - -0.1614727973937988 - <_> - - <_> - - - - <_>13 5 4 14 -1. - <_>15 5 2 7 2. - <_>13 12 2 7 2. - 0 - -3.0918378615751863e-004 - -0.0912956893444061 - 0.0681119635701180 - <_> - - <_> - - - - <_>0 0 4 13 -1. - <_>2 0 2 13 2. - 0 - -0.0777052715420723 - 0.3334448039531708 - -0.0267951693385839 - <_> - - <_> - - - - <_>13 5 4 14 -1. - <_>15 5 2 7 2. - <_>13 12 2 7 2. - 0 - 0.0458748787641525 - 6.2387371435761452e-003 - -0.2273890972137451 - <_> - - <_> - - - - <_>3 5 4 14 -1. - <_>3 5 2 7 2. - <_>5 12 2 7 2. - 0 - 3.1658360967412591e-004 - -0.1129792034626007 - 0.0986025705933571 - <_> - - <_> - - - - <_>11 12 7 6 -1. - <_>11 14 7 2 3. - 0 - -0.0529627688229084 - -0.6011739969253540 - 0.0100044896826148 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - 5.3028380498290062e-003 - 0.0361643992364407 - -0.2635985910892487 - <_> - - <_> - - - - <_>13 4 6 16 -1. - <_>16 4 3 8 2. - <_>13 12 3 8 2. - 0 - -0.0234735906124115 - 0.1066351979970932 - -0.0306539908051491 - <_> - - <_> - - - - <_>0 9 10 6 -1. - <_>0 9 5 3 2. - <_>5 12 5 3 2. - 0 - -1.5029460191726685e-003 - 0.0628828406333923 - -0.1228535026311874 - <_> - - <_> - - - - <_>9 5 3 15 -1. - <_>9 10 3 5 3. - 0 - -0.0122326500713825 - -0.2304708063602448 - 0.0400487892329693 - <_> - - <_> - - - - <_>8 2 4 10 -1. - <_>10 2 2 10 2. - 0 - -0.0474282689392567 - 0.4413514137268066 - -0.0188735798001289 - <_> - - <_> - - - - <_>13 4 6 16 -1. - <_>16 4 3 8 2. - <_>13 12 3 8 2. - 0 - 0.0363792516291142 - -0.0130203804001212 - 0.1468573063611984 - <_> - - <_> - - - - <_>1 8 18 5 -1. - <_>7 8 6 5 3. - 0 - 0.0363435111939907 - 0.0387880392372608 - -0.1990313977003098 - <_> - - <_> - - - - <_>13 4 6 16 -1. - <_>16 4 3 8 2. - <_>13 12 3 8 2. - 0 - -0.1079292967915535 - 0.1617752015590668 - -6.3546439632773399e-003 - <_> - - <_> - - - - <_>1 4 6 16 -1. - <_>1 4 3 8 2. - <_>4 12 3 8 2. - 0 - -0.0954797416925430 - 0.3732065856456757 - -0.0239402893930674 - <_> - - <_> - - - - <_>2 15 18 4 -1. - <_>11 15 9 2 2. - <_>2 17 9 2 2. - 0 - 0.0389542989432812 - 0.0112397996708751 - -0.3479448854923248 - <_> - - <_> - - - - <_>7 3 2 16 -1. - <_>7 11 2 8 2. - 0 - -0.0326462090015411 - -0.3179763853549957 - 0.0217801891267300 - <_> - - <_> - - - - <_>0 4 20 4 -1. - <_>0 6 20 2 2. - 0 - -2.5872089900076389e-003 - 0.0472686104476452 - -0.1562477946281433 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 0.0129792001098394 - -0.0243940707296133 - 0.3034175038337708 - <_> - - <_> - - - - <_>14 1 6 17 -1. - <_>14 1 3 17 2. - 0 - -0.0174905005842447 - 0.1196710020303726 - -0.0348252095282078 - <_> - - <_> - - - - <_>2 9 7 6 -1. - <_>2 11 7 2 3. - 0 - 8.2290060818195343e-003 - 0.0517062991857529 - -0.1412431001663208 - <_> - - <_> - - - - <_>11 0 6 16 -1. - <_>14 0 3 8 2. - <_>11 8 3 8 2. - 0 - 8.7701035663485527e-003 - 0.0121396295726299 - -0.0934101864695549 - <_> - - <_> - - - - <_>1 14 13 3 -1. - <_>1 15 13 1 3. - 0 - -2.5523800868541002e-003 - 0.0918820798397064 - -0.0796939432621002 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 1.2640489730983973e-003 - -0.0428683310747147 - 0.0984691604971886 - <_> - - <_> - - - - <_>3 0 6 16 -1. - <_>3 0 3 8 2. - <_>6 8 3 8 2. - 0 - -3.8762169424444437e-003 - 0.0644778907299042 - -0.1142697036266327 - <_> - - <_> - - - - <_>10 12 10 3 -1. - <_>10 12 5 3 2. - 0 - 1.5416350215673447e-003 - -0.0382401682436466 - 0.0508807897567749 - <_> - - <_> - - - - <_>3 7 12 5 -1. - <_>7 7 4 5 3. - 0 - 7.6829752651974559e-004 - -0.1286921948194504 - 0.0581613704562187 - <_> - - <_> - - - - <_>1 0 18 6 -1. - <_>7 0 6 6 3. - 0 - 1.6587260179221630e-003 - 0.1639191955327988 - -0.0471649989485741 - <_> - - <_> - - - - <_>0 12 10 3 -1. - <_>5 12 5 3 2. - 0 - 1.6514799790456891e-003 - -0.0592217184603214 - 0.1316508054733276 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - -3.8682940066792071e-004 - 0.0644935816526413 - -0.1072873994708061 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>7 5 2 8 3. - 0 - -3.4595469478517771e-003 - 0.0807432010769844 - -0.0925685912370682 - <_> - - <_> - - - - <_>11 9 9 6 -1. - <_>11 11 9 2 3. - 0 - 0.0351306609809399 - 0.0155206201598048 - -0.1973257958889008 - <_> - - <_> - - - - <_>4 7 7 9 -1. - <_>4 10 7 3 3. - 0 - 0.1202535033226013 - -0.0204970296472311 - 0.4090565145015717 - <_> - - <_> - - - - <_>5 14 10 6 -1. - <_>5 16 10 2 3. - 0 - 7.8581331763416529e-004 - -0.0948587879538536 - 0.0693166404962540 - <_> - - <_> - - - - <_>0 14 19 4 -1. - <_>0 16 19 2 2. - 0 - 6.1606317758560181e-003 - 0.0605566687881947 - -0.1243650987744331 - <_> - - <_> - - - - <_>6 9 12 8 -1. - <_>12 9 6 4 2. - <_>6 13 6 4 2. - 0 - 0.0133515596389771 - 0.0176349692046642 - -0.1464945971965790 - <_> - - <_> - - - - <_>1 1 3 14 -1. - <_>2 1 1 14 3. - 0 - 0.0198736395686865 - -0.0244497992098331 - 0.2732233107089996 - <_> - - <_> - - - - <_>6 9 12 8 -1. - <_>12 9 6 4 2. - <_>6 13 6 4 2. - 0 - -2.3918889928609133e-003 - -0.0407449007034302 - 0.0499253198504448 - <_> - - <_> - - - - <_>2 9 12 8 -1. - <_>2 9 6 4 2. - <_>8 13 6 4 2. - 0 - 8.6433859542012215e-003 - 0.0289679504930973 - -0.2366106957197189 - <_> - - <_> - - - - <_>18 2 2 18 -1. - <_>18 2 1 18 2. - 0 - -8.8321920484304428e-003 - 0.1205402985215187 - -0.0277029909193516 - <_> - - <_> - - - - <_>6 5 6 8 -1. - <_>8 5 2 8 3. - 0 - -0.0441504791378975 - 0.5003805160522461 - -0.0122511303052306 - <_> - - <_> - - - - <_>10 3 4 12 -1. - <_>10 3 2 12 2. - 0 - -4.0243011899292469e-003 - -0.1950252950191498 - 0.0251930095255375 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - 9.8465122282505035e-003 - -0.0602838695049286 - 0.1266546994447708 - <_> - - <_> - - - - <_>9 8 6 12 -1. - <_>12 8 3 6 2. - <_>9 14 3 6 2. - 0 - -2.7608149684965611e-003 - -0.0839265286922455 - 0.0601026490330696 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0390768311917782 - 0.0153276501223445 - -0.4319779872894287 - <_> - - <_> - - - - <_>18 2 2 18 -1. - <_>18 2 1 18 2. - 0 - 3.8136269431561232e-003 - -0.0312810912728310 - 0.0779421180486679 - <_> - - <_> - - - - <_>1 5 17 6 -1. - <_>1 7 17 2 3. - 0 - 2.7646059170365334e-003 - 0.0173348393291235 - -0.3473272025585175 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - -3.6096980329602957e-003 - -0.0822867080569267 - 0.0281708799302578 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 2 12 2 3. - 0 - 3.5445080138742924e-003 - -0.1055762022733688 - 0.0600509196519852 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - 0.0129859000444412 - 0.0185979902744293 - -0.0949878022074699 - <_> - - <_> - - - - <_>3 0 14 6 -1. - <_>3 2 14 2 3. - 0 - -0.0200275406241417 - 0.2600725889205933 - -0.0270791593939066 - <_> - - <_> - - - - <_>15 3 5 6 -1. - <_>15 6 5 3 2. - 0 - -0.0729665979743004 - -0.7684810757637024 - 2.3947900626808405e-003 - <_> - - <_> - - - - <_>0 3 5 6 -1. - <_>0 6 5 3 2. - 0 - -2.1148719824850559e-003 - -0.1076332032680512 - 0.0523613914847374 - <_> - - <_> - - - - <_>4 1 14 10 -1. - <_>4 6 14 5 2. - 0 - -0.0776671469211578 - 0.1782232969999313 - -0.0314632989466190 - <_> - - <_> - - - - <_>0 1 7 4 -1. - <_>0 3 7 2 2. - 0 - -4.6600410714745522e-003 - -0.2038647979497910 - 0.0390254110097885 - <_> - - <_> - - - - <_>13 1 7 4 -1. - <_>13 3 7 2 2. - 0 - 0.0170594993978739 - 0.0189547408372164 - -0.1726024001836777 - <_> - - <_> - - - - <_>1 4 10 9 -1. - <_>6 4 5 9 2. - 0 - 0.0431746914982796 - -0.0316856093704700 - 0.2334644943475723 - <_> - - <_> - - - - <_>10 1 10 19 -1. - <_>10 1 5 19 2. - 0 - -0.4892792999744415 - -0.7104313969612122 - 4.6672620810568333e-003 - <_> - - <_> - - - - <_>0 1 10 19 -1. - <_>5 1 5 19 2. - 0 - 0.0914955064654350 - 0.0160276293754578 - -0.4053801894187927 - <_> - - <_> - - - - <_>13 5 4 12 -1. - <_>13 9 4 4 3. - 0 - -0.0468432493507862 - 0.6935886144638062 - -2.0055349450558424e-003 - <_> - - <_> - - - - <_>3 5 4 12 -1. - <_>3 9 4 4 3. - 0 - 6.0863760299980640e-003 - -0.1521815955638886 - 0.0404083095490932 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>11 0 9 2 2. - <_>2 2 9 2 2. - 0 - 0.0436766110360622 - 0.0122571596875787 - -0.2599659860134125 - <_> - - <_> - - - - <_>6 8 6 5 -1. - <_>9 8 3 5 2. - 0 - -0.0495805293321610 - 0.6757134795188904 - -8.0354865640401840e-003 - <_> - - <_> - - - - <_>6 5 12 8 -1. - <_>12 5 6 4 2. - <_>6 9 6 4 2. - 0 - -2.8614638722501695e-004 - 0.0345487706363201 - -0.0618491806089878 - <_> - - <_> - - - - <_>2 5 12 8 -1. - <_>2 5 6 4 2. - <_>8 9 6 4 2. - 0 - -0.0118631999939680 - -0.1206132993102074 - 0.0514165796339512 - <_> - - <_> - - - - <_>5 4 13 3 -1. - <_>5 5 13 1 3. - 0 - 0.0147540103644133 - -0.0246380493044853 - 0.1523413956165314 - <_> - - <_> - - - - <_>2 4 13 3 -1. - <_>2 5 13 1 3. - 0 - -5.1772277802228928e-003 - 0.1842893064022064 - -0.0422003194689751 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - -0.0200335308909416 - -0.2098641991615295 - 0.0230167806148529 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 4.1349478997290134e-003 - 0.0385001115500927 - -0.1540091931819916 - <_> - - <_> - - - - <_>7 12 13 2 -1. - <_>7 13 13 1 2. - 0 - 4.9832498189061880e-004 - -0.0568344704806805 - 0.1173754036426544 - <_> - - <_> - - - - <_>2 4 15 3 -1. - <_>2 5 15 1 3. - 0 - 1.5235079918056726e-003 - -0.0823057517409325 - 0.0733407586812973 - <_> - - <_> - - - - <_>1 14 18 4 -1. - <_>10 14 9 2 2. - <_>1 16 9 2 2. - 0 - 0.0266690608114004 - 0.0171319209039211 - -0.3333728015422821 - <_> - - <_> - - - - <_>5 8 6 10 -1. - <_>5 8 3 5 2. - <_>8 13 3 5 2. - 0 - -0.0251928996294737 - 0.1834809035062790 - -0.0352759994566441 - <_> - - <_> - - - - <_>12 4 3 10 -1. - <_>12 9 3 5 2. - 0 - 1.1769080301746726e-003 - -0.1319703012704849 - 0.0242424197494984 - <_> - - <_> - - - - <_>2 0 14 3 -1. - <_>2 1 14 1 3. - 0 - -6.6034111659973860e-004 - -0.1072555035352707 - 0.0586052685976028 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 0.0433866195380688 - -0.0164984092116356 - 0.3929358124732971 - <_> - - <_> - - - - <_>0 1 15 3 -1. - <_>0 2 15 1 3. - 0 - -0.0114902900531888 - -0.2633295059204102 - 0.0242405906319618 - <_> - - <_> - - - - <_>2 1 16 4 -1. - <_>2 3 16 2 2. - 0 - 0.0859336927533150 - -0.0162797607481480 - 0.4172945022583008 - <_> - - <_> - - - - <_>0 1 5 9 -1. - <_>0 4 5 3 3. - 0 - 2.0756269805133343e-003 - 0.0525438897311687 - -0.1057431027293205 - <_> - - <_> - - - - <_>3 5 15 3 -1. - <_>3 6 15 1 3. - 0 - 1.4016899513080716e-003 - -0.0465945415198803 - 0.1135535985231400 - <_> - - <_> - - - - <_>1 5 10 6 -1. - <_>1 5 5 3 2. - <_>6 8 5 3 2. - 0 - -3.4351870417594910e-003 - -0.1080633029341698 - 0.0587785318493843 - <_> - - <_> - - - - <_>9 2 3 12 -1. - <_>9 8 3 6 2. - 0 - -1.8299809889867902e-003 - 0.0606455989181995 - -0.0660843998193741 - <_> - - <_> - - - - <_>0 2 19 2 -1. - <_>0 3 19 1 2. - 0 - -3.4186599077656865e-004 - -0.1268256008625031 - 0.0492446683347225 - <_> - - <_> - - - - <_>16 0 4 10 -1. - <_>16 0 2 10 2. - 0 - 0.0106162903830409 - -0.0556194707751274 - 0.1227082982659340 - <_> - - <_> - - - - <_>1 8 13 3 -1. - <_>1 9 13 1 3. - 0 - 0.0394907705485821 - 8.2882875576615334e-003 - -0.6619415283203125 - <_> - - <_> - - - - <_>7 0 13 4 -1. - <_>7 2 13 2 2. - 0 - -0.0197460409253836 - 0.1576106995344162 - -9.3961963430047035e-003 - <_> - - <_> - - - - <_>4 4 3 10 -1. - <_>4 9 3 5 2. - 0 - 4.6383799053728580e-004 - -0.2012722045183182 - 0.0267063304781914 - <_> - - <_> - - - - <_>7 9 6 7 -1. - <_>9 9 2 7 3. - 0 - 5.1521410932764411e-004 - -0.0860197171568871 - 0.0671314969658852 - <_> - - <_> - - - - <_>4 3 3 13 -1. - <_>5 3 1 13 3. - 0 - -0.0112835401669145 - -0.2275408953428268 - 0.0222506001591682 - <_> - - <_> - - - - <_>14 10 6 6 -1. - <_>14 10 3 6 2. - 0 - -8.4253363311290741e-003 - 0.1650525927543640 - -0.0504381805658340 - <_> - - <_> - - - - <_>8 0 3 15 -1. - <_>8 5 3 5 3. - 0 - 0.0306045692414045 - 0.0275005400180817 - -0.2098412960767746 - <_> - - <_> - - - - <_>12 0 8 8 -1. - <_>16 0 4 4 2. - <_>12 4 4 4 2. - 0 - 5.0000958144664764e-003 - -0.0389117710292339 - 0.1155347004532814 - <_> - - <_> - - - - <_>7 4 6 9 -1. - <_>7 7 6 3 3. - 0 - 0.0416444614529610 - -0.0141642801463604 - 0.4400491118431091 - <_> - - <_> - - - - <_>11 9 9 6 -1. - <_>11 11 9 2 3. - 0 - -3.9140251465141773e-003 - -0.1152814030647278 - 0.0276295207440853 - <_> - - <_> - - - - <_>5 13 9 5 -1. - <_>8 13 3 5 3. - 0 - -2.2060431074351072e-003 - 0.0747944936156273 - -0.0759503915905952 - <_> - - <_> - - - - <_>9 9 6 10 -1. - <_>12 9 3 5 2. - <_>9 14 3 5 2. - 0 - -0.0740605071187019 - -0.6090257167816162 - 3.8528270088136196e-003 - <_> - - <_> - - - - <_>5 9 6 10 -1. - <_>5 9 3 5 2. - <_>8 14 3 5 2. - 0 - 1.5966329956427217e-003 - -0.0700151994824409 - 0.1101925969123840 - <_> - - <_> - - - - <_>13 10 6 10 -1. - <_>16 10 3 5 2. - <_>13 15 3 5 2. - 0 - 2.0102860871702433e-003 - -0.0318591818213463 - 0.0715927407145500 - <_> - - <_> - - - - <_>1 10 6 10 -1. - <_>1 10 3 5 2. - <_>4 15 3 5 2. - 0 - 3.2757699955254793e-003 - -0.0522607602179050 - 0.1265238970518112 - <_> - - <_> - - - - <_>10 3 4 12 -1. - <_>10 3 2 12 2. - 0 - 3.6700100172311068e-003 - 0.0540187209844589 - -0.0465303808450699 - <_> - - <_> - - - - <_>6 3 4 12 -1. - <_>8 3 2 12 2. - 0 - -5.7776779867708683e-003 - -0.2294086068868637 - 0.0247044507414103 - <_> - - <_> - - - - <_>11 1 9 5 -1. - <_>14 1 3 5 3. - 0 - 3.7388929631561041e-003 - -0.0482731312513351 - 0.0767729133367538 - <_> - - <_> - - - - <_>2 9 16 3 -1. - <_>10 9 8 3 2. - 0 - -0.0124045601114631 - 0.1149199977517128 - -0.0493081398308277 - <_> - - <_> - - - - <_>6 2 8 10 -1. - <_>10 2 4 5 2. - <_>6 7 4 5 2. - 0 - 9.0428609400987625e-003 - 0.0430131405591965 - -0.1443942934274674 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>0 0 4 4 2. - <_>4 4 4 4 2. - 0 - 6.1762649565935135e-003 - -0.0393628217279911 - 0.1607349067926407 - <_> - - <_> - - - - <_>12 10 6 10 -1. - <_>14 10 2 10 3. - 0 - 0.0210514403879642 - 0.0246080607175827 - -0.1376848071813583 - <_> - - <_> - - - - <_>0 1 9 5 -1. - <_>3 1 3 5 3. - 0 - 2.7457328978925943e-003 - -0.0632719993591309 - 0.0912694334983826 - <_> - - <_> - - - - <_>16 0 4 17 -1. - <_>16 0 2 17 2. - 0 - -0.0107779596000910 - 0.0912453010678291 - -0.0301109291613102 - <_> - - <_> - - - - <_>2 0 6 20 -1. - <_>4 0 2 20 3. - 0 - 0.0166991893202066 - 0.0435396097600460 - -0.1524014025926590 - <_> - - <_> - - - - <_>16 0 4 17 -1. - <_>16 0 2 17 2. - 0 - 5.4665589705109596e-003 - -0.0535750314593315 - 0.0602662004530430 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -3.2001500949263573e-003 - 0.1422092020511627 - -0.0408233813941479 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>10 8 4 4 3. - 0 - 0.0472890585660934 - 0.0158536992967129 - -0.2712359130382538 - <_> - - <_> - - - - <_>8 5 3 14 -1. - <_>8 12 3 7 2. - 0 - -1.3604690320789814e-003 - 0.0406360812485218 - -0.1488569974899292 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - 6.2847061781212687e-004 - 0.0418331585824490 - -0.1239489018917084 - <_> - - <_> - - - - <_>1 3 14 15 -1. - <_>1 8 14 5 3. - 0 - -0.0370360799133778 - -0.3694469034671783 - 0.0136641599237919 - <_> - - <_> - - - - <_>16 0 4 16 -1. - <_>16 0 2 16 2. - 0 - -0.0225785505026579 - 0.1181204989552498 - -0.0229398608207703 - <_> - - <_> - - - - <_>4 6 10 9 -1. - <_>4 9 10 3 3. - 0 - 3.2851321157068014e-003 - 0.3113695085048676 - -0.0188564192503691 - <_> - - <_> - - - - <_>16 0 4 16 -1. - <_>16 0 2 16 2. - 0 - -0.2022536993026733 - -0.6246569752693176 - 3.9239428006112576e-003 - <_> - - <_> - - - - <_>0 0 4 16 -1. - <_>2 0 2 16 2. - 0 - -4.9903858453035355e-003 - 0.1067498996853828 - -0.0600004903972149 - <_> - - <_> - - - - <_>15 9 4 7 -1. - <_>15 9 2 7 2. - 0 - -0.0225394796580076 - -0.1989119052886963 - 0.0188299696892500 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>3 0 3 6 3. - 0 - 0.0268784593790770 - -0.0311851892620325 - 0.2084130942821503 - <_> - - <_> - - - - <_>12 11 8 4 -1. - <_>12 13 8 2 2. - 0 - -6.3416860066354275e-003 - -0.0836588665843010 - 0.0406036600470543 - <_> - - <_> - - - - <_>1 9 4 7 -1. - <_>3 9 2 7 2. - 0 - 2.8207020368427038e-003 - -0.0582558587193489 - 0.0972031429409981 - <_> - - <_> - - - - <_>14 10 6 6 -1. - <_>14 10 3 6 2. - 0 - 0.0247399806976318 - -0.0186992399394512 - 0.0998585075139999 - <_> - - <_> - - - - <_>1 7 2 13 -1. - <_>2 7 1 13 2. - 0 - 7.4140671640634537e-003 - 0.0296130198985338 - -0.1917762011289597 - <_> - - <_> - - - - <_>1 2 18 11 -1. - <_>7 2 6 11 3. - 0 - -8.3040986210107803e-003 - 0.1295897960662842 - -0.0426711402833462 - <_> - - <_> - - - - <_>6 2 4 7 -1. - <_>8 2 2 7 2. - 0 - 1.1470559984445572e-003 - -0.1536511927843094 - 0.0410832390189171 - <_> - - <_> - - - - <_>0 6 20 14 -1. - <_>10 6 10 7 2. - <_>0 13 10 7 2. - 0 - -0.1647070050239563 - -0.4143765866756439 - 0.0135092902928591 - <_> - - <_> - - - - <_>0 5 18 15 -1. - <_>6 5 6 15 3. - 0 - 0.2432862073183060 - -0.0124993901699781 - 0.4462372958660126 - <_> - - <_> - - - - <_>16 5 4 15 -1. - <_>16 5 2 15 2. - 0 - 0.0245450790971518 - 0.0222707707434893 - -0.1076686009764671 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>7 6 2 7 3. - 0 - -0.0360040217638016 - 0.2149553000926971 - -0.0232983306050301 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>10 8 4 4 3. - 0 - 0.0170126799494028 - 0.0285665206611156 - -0.1368986070156097 - <_> - - <_> - - - - <_>5 10 10 6 -1. - <_>5 13 10 3 2. - 0 - -1.7947000451385975e-003 - 0.0260637104511261 - -0.1806043982505798 - <_> - - <_> - - - - <_>3 7 17 12 -1. - <_>3 13 17 6 2. - 0 - -0.3449208140373230 - -0.5910199284553528 - 1.3455889420583844e-003 - <_> - - <_> - - - - <_>0 7 17 12 -1. - <_>0 13 17 6 2. - 0 - -0.0104715498164296 - -0.0643943697214127 - 0.0812442526221275 - <_> - - <_> - - - - <_>2 0 18 19 -1. - <_>8 0 6 19 3. - 0 - 0.0643352195620537 - -0.0508744716644287 - 0.0837525278329849 - <_> - - <_> - - - - <_>7 2 4 7 -1. - <_>9 2 2 7 2. - 0 - 0.0467034503817558 - 8.1825926899909973e-003 - -0.6222047805786133 - <_> - - <_> - - - - <_>9 7 7 8 -1. - <_>9 11 7 4 2. - 0 - 0.0673962906002998 - -4.0585128590464592e-003 - 0.3111543059349060 - <_> - - <_> - - - - <_>0 10 19 2 -1. - <_>0 11 19 1 2. - 0 - -1.8122399342246354e-004 - 0.0635992288589478 - -0.0838707014918327 - <_> - - <_> - - - - <_>11 9 9 6 -1. - <_>11 11 9 2 3. - 0 - -0.0467838905751705 - -0.4374811947345734 - 3.6999220028519630e-003 - <_> - - <_> - - - - <_>0 0 15 3 -1. - <_>5 0 5 3 3. - 0 - 0.1253741979598999 - -7.1869022212922573e-003 - 0.6926767230033875 - <_> - - <_> - - - - <_>18 7 2 13 -1. - <_>18 7 1 13 2. - 0 - 3.5549318999983370e-004 - 0.0358049198985100 - -0.0419990494847298 - <_> - - <_> - - - - <_>0 9 9 6 -1. - <_>0 11 9 2 3. - 0 - -0.0181698706001043 - -0.2646794021129608 - 0.0192748699337244 - <_> - - <_> - - - - <_>9 7 7 8 -1. - <_>9 11 7 4 2. - 0 - 0.0275093708187342 - -9.9343024194240570e-003 - 0.1248172968626022 - <_> - - <_> - - - - <_>4 7 7 8 -1. - <_>4 11 7 4 2. - 0 - -0.0319848395884037 - 0.2569411098957062 - -0.0263920202851295 - <_> - - <_> - - - - <_>3 3 16 2 -1. - <_>3 4 16 1 2. - 0 - -0.0128916501998901 - -0.1883811056613922 - 0.0161357503384352 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - 0.0450090914964676 - 8.4453048184514046e-003 - -0.5792089104652405 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 3.9589041844010353e-003 - -0.0436723306775093 - 0.1208762973546982 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - 2.7181839104741812e-003 - -0.0407793894410133 - 0.1297443956136704 - <_> - - <_> - - - - <_>6 12 10 6 -1. - <_>6 14 10 2 3. - 0 - -7.5994711369276047e-004 - 0.0329541005194187 - -0.0864193215966225 - <_> - - <_> - - - - <_>0 13 7 6 -1. - <_>0 15 7 2 3. - 0 - 6.6315899603068829e-003 - 0.0360798314213753 - -0.1576362997293472 - <_> - - <_> - - - - <_>3 11 15 9 -1. - <_>3 14 15 3 3. - 0 - -3.6433320492506027e-003 - -0.0298321191221476 - 0.0628015473484993 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - -0.0647683367133141 - -0.8435174226760864 - 6.0920589603483677e-003 - <_> - - <_> - - - - <_>10 0 10 20 -1. - <_>10 0 5 20 2. - 0 - 0.4171225130558014 - 3.0659181065857410e-003 - -0.4426969885826111 - <_> - - <_> - - - - <_>0 0 10 20 -1. - <_>5 0 5 20 2. - 0 - 0.1885427981615067 - 4.8159952275454998e-003 - -0.9549772739410400 - <_> - - <_> - - - - <_>5 12 13 3 -1. - <_>5 13 13 1 3. - 0 - 0.0237512700259686 - -0.0121662896126509 - 0.3082712888717651 - <_> - - <_> - - - - <_>5 6 6 8 -1. - <_>5 10 6 4 2. - 0 - 1.8907970516011119e-003 - -0.1249708011746407 - 0.0372619889676571 - <_> - - <_> - - - - <_>4 0 13 18 -1. - <_>4 9 13 9 2. - 0 - -1.5546990325674415e-003 - 0.0736365765333176 - -0.0493988506495953 - <_> - - <_> - - - - <_>0 0 15 4 -1. - <_>5 0 5 4 3. - 0 - -9.2505775392055511e-003 - 0.1244603991508484 - -0.0386735498905182 - <_> - - <_> - - - - <_>4 7 15 3 -1. - <_>9 7 5 3 3. - 0 - -9.9219558760523796e-003 - -0.1223175972700119 - 0.0272524803876877 - <_> - - <_> - - - - <_>6 8 6 6 -1. - <_>9 8 3 6 2. - 0 - -6.7504931939765811e-004 - 0.0807927325367928 - -0.0610036998987198 - <_> - - <_> - - - - <_>0 8 20 2 -1. - <_>0 8 10 2 2. - 0 - -0.0132861901074648 - 0.1729564964771271 - -0.0304869394749403 - <_> - - <_> - - - - <_>5 0 3 14 -1. - <_>6 0 1 14 3. - 0 - 4.3905568309128284e-003 - 0.0294212605804205 - -0.1823053956031799 - <_> - - <_> - - - - <_>13 2 5 12 -1. - <_>13 6 5 4 3. - 0 - -0.0188793092966080 - -0.0538374297320843 - 0.0283304695039988 - <_> - - <_> - - - - <_>4 4 12 6 -1. - <_>4 4 6 3 2. - <_>10 7 6 3 2. - 0 - -0.0693915635347366 - 0.5471312999725342 - -9.0404544025659561e-003 - <_> - - <_> - - - - <_>7 1 9 8 -1. - <_>10 1 3 8 3. - 0 - 0.0782269835472107 - 6.9561759009957314e-003 - -0.1599217057228088 - <_> - - <_> - - - - <_>1 1 6 10 -1. - <_>1 1 3 5 2. - <_>4 6 3 5 2. - 0 - -9.5910448580980301e-003 - 0.0834773704409599 - -0.0607142895460129 - <_> - - <_> - - - - <_>11 10 8 8 -1. - <_>11 14 8 4 2. - 0 - 0.0808563530445099 - -3.1028070952743292e-003 - 0.8153027892112732 - <_> - - <_> - - - - <_>1 10 8 8 -1. - <_>1 14 8 4 2. - 0 - -6.9029820151627064e-003 - -0.0626259967684746 - 0.0779940932989120 - <_> - - <_> - - - - <_>13 8 3 12 -1. - <_>13 14 3 6 2. - 0 - 0.0382191799581051 - -9.4691133126616478e-003 - 0.4182862937450409 - <_> - - <_> - - - - <_>4 8 3 12 -1. - <_>4 14 3 6 2. - 0 - -7.2923908010125160e-004 - 0.0543949902057648 - -0.1086949035525322 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -0.0112243602052331 - -0.2877430021762848 - 0.0193324405699968 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -0.0237552393227816 - 0.2963249981403351 - -0.0169950295239687 - <_> - - <_> - - - - <_>7 1 9 8 -1. - <_>10 1 3 8 3. - 0 - 0.0251709409058094 - 0.0181516408920288 - -0.0692111775279045 - <_> - - <_> - - - - <_>4 1 9 8 -1. - <_>7 1 3 8 3. - 0 - 0.0846194103360176 - -0.0126183303073049 - 0.4018830955028534 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -2.8461799956858158e-003 - -0.1656547933816910 - 0.0355403795838356 - <_> - - <_> - - - - <_>5 2 6 10 -1. - <_>5 2 3 5 2. - <_>8 7 3 5 2. - 0 - 9.9000544287264347e-004 - -0.0706472098827362 - 0.0920708328485489 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - 8.5722869262099266e-003 - -0.0165993198752403 - 0.0600255802273750 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - 7.7498499304056168e-003 - 0.0250650495290756 - -0.2041956037282944 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>17 0 3 5 2. - <_>14 5 3 5 2. - 0 - -5.1633790135383606e-003 - 0.0564656406641006 - -0.0393665693700314 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - 3.4570649731904268e-003 - -0.0487127490341663 - 0.1175640001893044 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>8 5 3 7 2. - 0 - 1.5435590175911784e-003 - -0.1238515004515648 - 0.0472409501671791 - <_> - - <_> - - - - <_>5 3 4 8 -1. - <_>7 3 2 8 2. - 0 - 0.0392214693129063 - 9.7949290648102760e-003 - -0.5596526861190796 - <_> - - <_> - - - - <_>15 2 5 9 -1. - <_>15 5 5 3 3. - 0 - -0.0480199307203293 - -0.2451460957527161 - 0.0155443800613284 - <_> - - <_> - - - - <_>1 4 4 16 -1. - <_>1 4 2 8 2. - <_>3 12 2 8 2. - 0 - 0.0178677495568991 - -0.0264586899429560 - 0.1853612959384918 - <_> - - <_> - - - - <_>3 14 16 4 -1. - <_>11 14 8 2 2. - <_>3 16 8 2 2. - 0 - -7.8233405947685242e-003 - -0.1230596974492073 - 0.0218501705676317 - <_> - - <_> - - - - <_>5 2 9 6 -1. - <_>8 2 3 6 3. - 0 - -4.8894518986344337e-003 - 0.2508647143840790 - -0.0199141502380371 - <_> - - <_> - - - - <_>6 1 14 2 -1. - <_>6 1 7 2 2. - 0 - 0.1109059974551201 - 2.1982348989695311e-003 - -0.9611018896102905 - <_> - - <_> - - - - <_>0 1 14 2 -1. - <_>7 1 7 2 2. - 0 - 5.3139701485633850e-003 - -0.0702078416943550 - 0.0747920572757721 - <_> - - <_> - - - - <_>8 0 8 8 -1. - <_>12 0 4 4 2. - <_>8 4 4 4 2. - 0 - -4.0226429700851440e-003 - -0.0929820612072945 - 0.0276421699672937 - <_> - - <_> - - - - <_>5 4 10 14 -1. - <_>5 4 5 7 2. - <_>10 11 5 7 2. - 0 - -0.0998207628726959 - -0.8252760767936707 - 5.8367499150335789e-003 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>11 0 9 2 2. - <_>2 2 9 2 2. - 0 - 3.2612269278615713e-003 - 0.0304818507283926 - -0.0482892915606499 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>9 5 3 7 2. - 0 - -0.0415590591728687 - 0.5887929797172546 - -8.5169300436973572e-003 - <_> - - <_> - - - - <_>4 10 14 4 -1. - <_>11 10 7 2 2. - <_>4 12 7 2 2. - 0 - 5.4297139868140221e-003 - 0.0181418005377054 - -0.1394830942153931 - <_> - - <_> - - - - <_>2 10 14 4 -1. - <_>2 10 7 2 2. - <_>9 12 7 2 2. - 0 - 0.0167562998831272 - 0.0123229296877980 - -0.4124552011489868 - <_> - - <_> - - - - <_>7 1 9 6 -1. - <_>7 4 9 3 2. - 0 - -0.0175638608634472 - 0.1138577014207840 - -0.0309686306864023 - <_> - - <_> - - - - <_>6 0 7 8 -1. - <_>6 4 7 4 2. - 0 - 0.0183087605983019 - -0.0359302498400211 - 0.1469727009534836 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 0.0355563089251518 - 0.0101906796917319 - -0.2583765089511871 - <_> - - <_> - - - - <_>1 3 9 4 -1. - <_>1 5 9 2 2. - 0 - -5.1635081035783514e-005 - 0.0460890904068947 - -0.1171912029385567 - <_> - - <_> - - - - <_>4 4 13 2 -1. - <_>4 5 13 1 2. - 0 - 2.5128800189122558e-004 - -0.0408963300287724 - 0.1066941022872925 - <_> - - <_> - - - - <_>1 4 14 3 -1. - <_>1 5 14 1 3. - 0 - -1.5876770485192537e-003 - 0.1078673005104065 - -0.0458900593221188 - <_> - - <_> - - - - <_>7 11 6 9 -1. - <_>9 11 2 9 3. - 0 - -9.5712337642908096e-003 - -0.1521212011575699 - 0.0371377803385258 - <_> - - <_> - - - - <_>6 11 4 7 -1. - <_>8 11 2 7 2. - 0 - 2.8643130790442228e-003 - 0.0360751189291477 - -0.1426859945058823 - <_> - - <_> - - - - <_>4 8 12 12 -1. - <_>4 8 6 12 2. - 0 - -0.0504540987312794 - 0.1962296068668366 - -0.0285990703850985 - <_> - - <_> - - - - <_>1 11 18 5 -1. - <_>10 11 9 5 2. - 0 - -2.8714470099657774e-003 - 0.0739199891686440 - -0.0860240012407303 - <_> - - <_> - - - - <_>4 5 16 6 -1. - <_>4 7 16 2 3. - 0 - 4.9587138928472996e-003 - 9.4060972332954407e-003 - -0.2488034963607788 - <_> - - <_> - - - - <_>0 3 4 16 -1. - <_>0 3 2 8 2. - <_>2 11 2 8 2. - 0 - -0.0782703906297684 - 0.4330515861511231 - -0.0111234299838543 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - -0.0646568089723587 - -0.1953912973403931 - 9.3969572335481644e-003 - <_> - - <_> - - - - <_>0 0 20 8 -1. - <_>0 4 20 4 2. - 0 - -0.4021360874176025 - -0.9373127818107605 - 4.8170168884098530e-003 - <_> - - <_> - - - - <_>8 7 8 8 -1. - <_>12 7 4 4 2. - <_>8 11 4 4 2. - 0 - 0.0429171510040760 - 5.9442862402647734e-004 - -0.7943031787872315 - <_> - - <_> - - - - <_>4 7 8 8 -1. - <_>4 7 4 4 2. - <_>8 11 4 4 2. - 0 - 2.1517940331250429e-003 - -0.0241273194551468 - 0.2109694927930832 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - 0.0955142378807068 - 3.0073130037635565e-003 - -0.3003076016902924 - <_> - - <_> - - - - <_>4 5 10 12 -1. - <_>4 5 5 6 2. - <_>9 11 5 6 2. - 0 - 0.0359494201838970 - 9.1736158356070518e-003 - -0.5330185294151306 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - 0.1406147927045822 - -1.9780038855969906e-003 - 0.5836036205291748 - <_> - - <_> - - - - <_>0 9 4 11 -1. - <_>2 9 2 11 2. - 0 - -0.1000026986002922 - -0.4657706022262573 - 0.0104473000392318 - <_> - - <_> - - - - <_>12 4 6 11 -1. - <_>12 4 3 11 2. - 0 - -0.1689841002225876 - 0.4757839143276215 - -3.0947721097618341e-003 - <_> - - <_> - - - - <_>2 4 6 11 -1. - <_>5 4 3 11 2. - 0 - 0.0261231902986765 - -0.0186734702438116 - 0.2558305859565735 - <_> - - <_> - - - - <_>8 7 5 9 -1. - <_>8 10 5 3 3. - 0 - 8.8816967036109418e-005 - 0.1293116062879562 - -0.0220339000225067 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -2.5785199832171202e-003 - 0.0775902420282364 - -0.0586698018014431 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>10 3 10 2 2. - <_>0 5 10 2 2. - 0 - -0.0558297410607338 - -0.5629606842994690 - 8.2240002229809761e-003 - <_> - - <_> - - - - <_>0 15 18 4 -1. - <_>0 15 9 2 2. - <_>9 17 9 2 2. - 0 - -0.0351142585277557 - -0.4152520895004273 - 0.0102372597903013 - <_> - - <_> - - - - <_>6 14 13 3 -1. - <_>6 15 13 1 3. - 0 - 3.0091139487922192e-003 - -0.0328016616404057 - 0.1123789995908737 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -3.0068641062825918e-003 - -0.1579416990280151 - 0.0303542204201221 - <_> - - <_> - - - - <_>9 2 3 13 -1. - <_>10 2 1 13 3. - 0 - -2.0059049129486084e-003 - 0.1134639978408814 - -0.0333722010254860 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - -1.3963360106572509e-003 - 0.1445423066616058 - -0.0501152314245701 - <_> - - <_> - - - - <_>9 6 6 7 -1. - <_>9 6 3 7 2. - 0 - -0.0545883104205132 - -0.9655225872993469 - 2.6290758978575468e-003 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>8 6 3 7 2. - 0 - -5.0577907823026180e-003 - -0.2153673022985458 - 0.0278238691389561 - <_> - - <_> - - - - <_>8 0 8 5 -1. - <_>8 0 4 5 2. - 0 - -0.0744309499859810 - 0.5924457907676697 - -3.5832428839057684e-003 - <_> - - <_> - - - - <_>4 0 8 5 -1. - <_>8 0 4 5 2. - 0 - -0.0697595700621605 - 0.6585460901260376 - -7.1275448426604271e-003 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - 3.4715738729573786e-004 - 0.0432145111262798 - -0.0652092397212982 - <_> - - <_> - - - - <_>5 1 6 19 -1. - <_>7 1 2 19 3. - 0 - 6.5575069747865200e-003 - 0.0410329811275005 - -0.1220093965530396 - <_> - - <_> - - - - <_>3 0 15 20 -1. - <_>8 0 5 20 3. - 0 - 0.0922872126102448 - -0.0219333898276091 - 0.0899531766772270 - <_> - - <_> - - - - <_>0 4 14 3 -1. - <_>7 4 7 3 2. - 0 - 0.0526855997741222 - 0.0164393503218889 - -0.2784793078899384 - <_> - - <_> - - - - <_>4 4 14 6 -1. - <_>11 4 7 3 2. - <_>4 7 7 3 2. - 0 - 7.2394758462905884e-003 - -0.0332179106771946 - 0.0972440615296364 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -2.2218099329620600e-003 - 0.0358609184622765 - -0.1387619972229004 - <_> - - <_> - - - - <_>6 7 14 3 -1. - <_>6 8 14 1 3. - 0 - -0.0233093798160553 - -0.2791394889354706 - 0.0163622293621302 - <_> - - <_> - - - - <_>2 2 5 12 -1. - <_>2 6 5 4 3. - 0 - 1.4036920038051903e-004 - -0.0400968715548515 - 0.1237995997071266 - <_> - - <_> - - - - <_>9 9 7 4 -1. - <_>9 11 7 2 2. - 0 - 0.0537028498947620 - 1.4607049524784088e-003 - -0.8643640875816345 - <_> - - <_> - - - - <_>4 9 7 4 -1. - <_>4 11 7 2 2. - 0 - 4.1926259291358292e-004 - -0.0493428297340870 - 0.1028954982757568 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - -1.6786300111562014e-003 - -0.1906508058309555 - 0.0251450594514608 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - 0.0166032407432795 - -0.0181257091462612 - 0.2688744962215424 - <_> - - <_> - - - - <_>9 1 4 10 -1. - <_>9 6 4 5 2. - 0 - -0.0226217899471521 - 0.1314570009708405 - -0.0252885594964027 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - 4.4634779915213585e-003 - 0.0565682090818882 - -0.1030642986297607 - <_> - - <_> - - - - <_>3 10 17 2 -1. - <_>3 11 17 1 2. - 0 - 3.3281201031059027e-003 - 0.0215178094804287 - -0.1408663988113403 - <_> - - <_> - - - - <_>0 0 6 17 -1. - <_>3 0 3 17 2. - 0 - -0.0253118406981230 - 0.1123747006058693 - -0.0417844988405705 - <_> - - <_> - - - - <_>14 0 6 12 -1. - <_>14 0 3 12 2. - 0 - -0.0261198803782463 - 0.1270370036363602 - -0.0235303100198507 - <_> - - <_> - - - - <_>2 0 4 16 -1. - <_>4 0 2 16 2. - 0 - -0.0726086422801018 - -0.3305288851261139 - 0.0217411592602730 - <_> - - <_> - - - - <_>14 1 6 7 -1. - <_>16 1 2 7 3. - 0 - 5.8377808891236782e-003 - -0.0281706806272268 - 0.0613000318408012 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>2 1 2 7 3. - 0 - 1.7830949509516358e-003 - -0.0761407166719437 - 0.0843913033604622 - <_> - - <_> - - - - <_>9 1 9 12 -1. - <_>12 1 3 12 3. - 0 - -0.1450258940458298 - -0.2888636887073517 - 9.4371382147073746e-003 - <_> - - <_> - - - - <_>2 1 9 12 -1. - <_>5 1 3 12 3. - 0 - -2.4291570298373699e-003 - -0.0636451691389084 - 0.0900570079684258 - <_> - - <_> - - - - <_>13 5 4 12 -1. - <_>13 5 2 12 2. - 0 - 0.1097790002822876 - -1.4906959841027856e-003 - 0.8971021771430969 - <_> - - <_> - - - - <_>3 5 4 12 -1. - <_>5 5 2 12 2. - 0 - -3.8412429857999086e-003 - 0.0739800110459328 - -0.0693783834576607 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>10 8 4 4 3. - 0 - 3.9507250767201185e-004 - -0.0711664110422134 - 0.0631507411599159 - <_> - - <_> - - - - <_>2 8 12 4 -1. - <_>6 8 4 4 3. - 0 - -6.6879019141197205e-003 - -0.1421196013689041 - 0.0510072000324726 - <_> - - <_> - - - - <_>2 9 18 11 -1. - <_>8 9 6 11 3. - 0 - -0.2127815932035446 - 0.1747954934835434 - -0.0168664995580912 - <_> - - <_> - - - - <_>6 11 6 6 -1. - <_>9 11 3 6 2. - 0 - 0.0439136102795601 - -7.9228030517697334e-003 - 0.5999451875686646 - <_> - - <_> - - - - <_>1 12 19 2 -1. - <_>1 13 19 1 2. - 0 - 3.0486818868666887e-003 - 0.0278801005333662 - -0.1499668955802918 - <_> - - <_> - - - - <_>0 12 13 3 -1. - <_>0 13 13 1 3. - 0 - 1.7128599574789405e-003 - -0.0615758895874023 - 0.1079311966896057 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -0.0130615895614028 - -0.3586418926715851 - 0.0123326899483800 - <_> - - <_> - - - - <_>0 8 16 4 -1. - <_>0 8 8 2 2. - <_>8 10 8 2 2. - 0 - 1.4779239427298307e-003 - -0.0552806183695793 - 0.0764003396034241 - <_> - - <_> - - - - <_>8 6 8 8 -1. - <_>12 6 4 4 2. - <_>8 10 4 4 2. - 0 - -0.0741171836853027 - 0.3305566012859345 - -5.4406579583883286e-003 - <_> - - <_> - - - - <_>3 13 14 6 -1. - <_>3 15 14 2 3. - 0 - 0.0415327884256840 - 0.0127627495676279 - -0.3409101068973541 - <_> - - <_> - - - - <_>4 13 15 6 -1. - <_>4 15 15 2 3. - 0 - -0.0164743103086948 - -0.1193590015172958 - 0.0359978713095188 - <_> - - <_> - - - - <_>0 0 14 4 -1. - <_>7 0 7 4 2. - 0 - -0.0133844502270222 - 0.1492701023817062 - -0.0371512509882450 - <_> - - <_> - - - - <_>14 3 4 10 -1. - <_>14 8 4 5 2. - 0 - -4.3293130584061146e-003 - -0.1525720953941345 - 0.0200080294162035 - <_> - - <_> - - - - <_>2 4 14 12 -1. - <_>2 4 7 6 2. - <_>9 10 7 6 2. - 0 - 3.7254339549690485e-003 - 0.0382492803037167 - -0.1356284022331238 - <_> - - <_> - - - - <_>7 4 6 10 -1. - <_>10 4 3 5 2. - <_>7 9 3 5 2. - 0 - -3.5788780078291893e-003 - 0.1195114031434059 - -0.0513569712638855 - <_> - - <_> - - - - <_>1 0 3 15 -1. - <_>1 5 3 5 3. - 0 - 0.0909365415573120 - -9.6294376999139786e-003 - 0.5058292746543884 - <_> - - <_> - - - - <_>1 1 19 12 -1. - <_>1 5 19 4 3. - 0 - -3.1301870476454496e-003 - 0.0245875306427479 - -0.1575251966714859 - <_> - - <_> - - - - <_>5 13 6 7 -1. - <_>7 13 2 7 3. - 0 - -3.0295769684016705e-003 - -0.0966699570417404 - 0.0474024601280689 - <_> - - <_> - - - - <_>10 0 4 16 -1. - <_>12 0 2 8 2. - <_>10 8 2 8 2. - 0 - -3.1865050550550222e-003 - 0.0350353196263313 - -0.0408417098224163 - <_> - - <_> - - - - <_>6 0 4 16 -1. - <_>6 0 2 8 2. - <_>8 8 2 8 2. - 0 - 0.0448362603783607 - -7.4580628424882889e-003 - 0.6519020795822144 - <_> - - <_> - - - - <_>8 1 4 11 -1. - <_>8 1 2 11 2. - 0 - -6.4811948686838150e-003 - 0.1316393017768860 - -0.0360601283609867 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -2.0486880093812943e-003 - -0.1109751015901566 - 0.0510119087994099 - <_> - - <_> - - - - <_>0 11 20 3 -1. - <_>0 12 20 1 3. - 0 - 0.0491756200790405 - 5.1457029767334461e-003 - -0.8914859890937805 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 17 7 2 2. - 0 - 8.4772880654782057e-004 - -0.0907417908310890 - 0.0448530204594135 - <_> - - <_> - - - - <_>7 16 7 4 -1. - <_>7 18 7 2 2. - 0 - -0.0165457092225552 - 0.2532956898212433 - -0.0169970802962780 - <_> - - <_> - - - - <_>1 14 16 4 -1. - <_>1 14 8 2 2. - <_>9 16 8 2 2. - 0 - 6.9274050183594227e-003 - 0.0389414615929127 - -0.1396130025386810 - <_> - - <_> - - - - <_>7 16 13 3 -1. - <_>7 17 13 1 3. - 0 - -6.5109939314424992e-003 - 0.1561030000448227 - -0.0244938805699348 - <_> - - <_> - - - - <_>1 12 18 8 -1. - <_>1 12 9 4 2. - <_>10 16 9 4 2. - 0 - -4.9708629958331585e-003 - -0.0982985869050026 - 0.0579038411378860 - <_> - - <_> - - - - <_>14 3 4 10 -1. - <_>14 8 4 5 2. - 0 - 0.1307460963726044 - -2.7071859221905470e-004 - 1.0000669956207275 - <_> - - <_> - - - - <_>2 3 4 10 -1. - <_>2 8 4 5 2. - 0 - -0.0267059206962585 - -0.4257703125476837 - 0.0107059702277184 - <_> - - <_> - - - - <_>2 1 16 12 -1. - <_>2 7 16 6 2. - 0 - -0.1032906025648117 - 0.2589618861675263 - -0.0184145905077457 - <_> - - <_> - - - - <_>7 0 6 16 -1. - <_>7 8 6 8 2. - 0 - -0.0201661307364702 - -0.1145585030317307 - 0.0404395684599876 - <_> - - <_> - - - - <_>7 1 8 12 -1. - <_>7 7 8 6 2. - 0 - -4.2215920984745026e-003 - 0.0430392585694790 - -0.0487358607351780 - <_> - - <_> - - - - <_>2 12 15 8 -1. - <_>7 12 5 8 3. - 0 - -0.0100388396531343 - 0.0716087371110916 - -0.0662046074867249 - <_> - - <_> - - - - <_>4 16 15 4 -1. - <_>9 16 5 4 3. - 0 - 0.0158330593258142 - -0.0320668593049049 - 0.0899508967995644 - <_> - - <_> - - - - <_>6 7 8 6 -1. - <_>10 7 4 6 2. - 0 - 3.4065160434693098e-003 - 0.0472160093486309 - -0.1089878976345062 - <_> - - <_> - - - - <_>1 8 18 12 -1. - <_>1 8 9 12 2. - 0 - -9.8251160234212875e-003 - 0.1021322980523109 - -0.0529021099209785 - <_> - - <_> - - - - <_>0 17 15 3 -1. - <_>5 17 5 3 3. - 0 - 0.0168046299368143 - -0.0371899902820587 - 0.1378764957189560 - <_> - - <_> - - - - <_>9 2 6 17 -1. - <_>11 2 2 17 3. - 0 - 8.5175316780805588e-003 - 0.0271414406597614 - -0.1356956064701080 - <_> - - <_> - - - - <_>5 2 6 17 -1. - <_>7 2 2 17 3. - 0 - -6.3797592883929610e-004 - 0.0692171901464462 - -0.0906967371702194 - <_> - - <_> - - - - <_>7 4 6 7 -1. - <_>9 4 2 7 3. - 0 - -9.6052087610587478e-004 - 0.2247247993946075 - -0.0240326393395662 - <_> - - <_> - - - - <_>0 11 15 3 -1. - <_>0 12 15 1 3. - 0 - 7.2245922638103366e-004 - -0.0467312000691891 - 0.0969055071473122 - <_> - - <_> - - - - <_>9 10 11 6 -1. - <_>9 12 11 2 3. - 0 - 1.0769399814307690e-003 - 0.0382594913244247 - -0.0666741579771042 - <_> - - <_> - - - - <_>8 0 3 18 -1. - <_>9 0 1 18 3. - 0 - 0.0416201911866665 - 9.3473913148045540e-003 - -0.4904668927192688 - <_> - - <_> - - - - <_>14 11 4 8 -1. - <_>14 15 4 4 2. - 0 - -8.1712089013308287e-004 - 0.0527974404394627 - -0.0964580923318863 - <_> - - <_> - - - - <_>1 11 15 8 -1. - <_>1 15 15 4 2. - 0 - 6.2240879051387310e-003 - -0.0353507883846760 - 0.1648416072130203 - <_> - - <_> - - - - <_>9 10 3 10 -1. - <_>9 15 3 5 2. - 0 - 2.0862540695816278e-003 - 0.0339587107300758 - -0.1311400979757309 - <_> - - <_> - - - - <_>1 6 18 9 -1. - <_>1 9 18 3 3. - 0 - 4.2804637923836708e-003 - 0.3010404109954834 - -0.0162454508244991 - <_> - - <_> - - - - <_>3 1 14 2 -1. - <_>3 2 14 1 2. - 0 - -3.3040030393749475e-004 - -0.1166545972228050 - 0.0381462089717388 - <_> - - <_> - - - - <_>0 1 20 3 -1. - <_>0 2 20 1 3. - 0 - 2.8100309427827597e-003 - 0.0419405102729797 - -0.1118030026555061 - <_> - - <_> - - - - <_>5 0 14 2 -1. - <_>5 1 14 1 2. - 0 - 0.0198327396064997 - -0.0117015698924661 - 0.2012213021516800 - <_> - - <_> - - - - <_>3 8 12 10 -1. - <_>7 8 4 10 3. - 0 - 0.0708796828985214 - -0.0181978195905685 - 0.2542958855628967 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>8 6 4 4 3. - 0 - -0.0838939696550369 - -0.3871923089027405 - 0.0117272902280092 - <_> - - <_> - - - - <_>6 2 8 12 -1. - <_>6 6 8 4 3. - 0 - 0.0284776203334332 - 0.0137015199288726 - -0.3249661922454834 - <_> - - <_> - - - - <_>4 3 12 4 -1. - <_>4 5 12 2 2. - 0 - 0.0120773101225495 - -0.0239758901298046 - 0.2523278892040253 - <_> - - <_> - - - - <_>0 0 5 9 -1. - <_>0 3 5 3 3. - 0 - -0.0756134092807770 - -0.6086645126342773 - 8.2847801968455315e-003 - <_> - - <_> - - - - <_>7 1 9 6 -1. - <_>7 4 9 3 2. - 0 - -0.0175638608634472 - 0.1081158965826035 - -0.0286227595061064 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>4 10 2 10 3. - 0 - 0.0118091097101569 - 0.0347582697868347 - -0.1444471031427383 - <_> - - <_> - - - - <_>2 5 17 14 -1. - <_>2 12 17 7 2. - 0 - 0.3345921933650971 - 3.5104870330542326e-003 - -0.9150757789611816 - <_> - - <_> - - - - <_>0 7 10 8 -1. - <_>0 11 10 4 2. - 0 - 0.0984478369355202 - -0.0102903302758932 - 0.4794301986694336 - <_> - - <_> - - - - <_>12 4 3 15 -1. - <_>13 4 1 15 3. - 0 - -0.0402778387069702 - -0.7379382848739624 - 4.8832078464329243e-003 - <_> - - <_> - - - - <_>5 4 3 15 -1. - <_>6 4 1 15 3. - 0 - 4.6712718904018402e-003 - 0.0250373091548681 - -0.1700375974178314 - <_> - - <_> - - - - <_>8 7 12 5 -1. - <_>12 7 4 5 3. - 0 - 0.1395848989486694 - 1.9962170626968145e-003 - -0.7154716849327087 - <_> - - <_> - - - - <_>0 7 12 5 -1. - <_>4 7 4 5 3. - 0 - 0.0697427168488503 - -8.4846932440996170e-003 - 0.5537828207015991 - <_> - - <_> - - - - <_>3 6 14 3 -1. - <_>3 7 14 1 3. - 0 - 4.0283710695803165e-003 - -0.0167180299758911 - 0.2391424030065537 - <_> - - <_> - - - - <_>6 1 2 18 -1. - <_>7 1 1 18 2. - 0 - 0.0109117096289992 - 0.0157816596329212 - -0.2681370973587036 - <_> - - <_> - - - - <_>6 16 9 4 -1. - <_>6 18 9 2 2. - 0 - -6.7120362073183060e-003 - 0.1108765974640846 - -0.0313658788800240 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>3 17 14 2 2. - 0 - -0.0134678203612566 - -0.2074151933193207 - 0.0234590806066990 - <_> - - <_> - - - - <_>7 16 13 3 -1. - <_>7 17 13 1 3. - 0 - -2.1431609056890011e-003 - 0.0782745927572250 - -0.0279594305902720 - <_> - - <_> - - - - <_>0 4 12 4 -1. - <_>4 4 4 4 3. - 0 - 0.0151633704081178 - 0.0217278301715851 - -0.1899544000625610 - <_> - - <_> - - - - <_>6 4 14 4 -1. - <_>13 4 7 2 2. - <_>6 6 7 2 2. - 0 - -0.0185519494116306 - 0.1116416007280350 - -0.0303740296512842 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -0.1108345985412598 - -0.5637990832328796 - 7.6859779655933380e-003 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 5.6210728362202644e-003 - 0.0329302586615086 - -0.1033701002597809 - <_> - - <_> - - - - <_>3 12 10 8 -1. - <_>3 12 5 4 2. - <_>8 16 5 4 2. - 0 - 3.0593289993703365e-003 - -0.0688718035817146 - 0.0603897199034691 - <_> - - <_> - - - - <_>12 10 5 9 -1. - <_>12 13 5 3 3. - 0 - -6.9845258258283138e-004 - 0.0380809083580971 - -0.0701129287481308 - <_> - - <_> - - - - <_>0 13 14 4 -1. - <_>0 13 7 2 2. - <_>7 15 7 2 2. - 0 - -1.3236569939181209e-003 - 0.0750040933489800 - -0.0639500468969345 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - -1.6736539546400309e-003 - -0.1058039963245392 - 0.0494763888418674 - <_> - - <_> - - - - <_>2 10 6 10 -1. - <_>2 10 3 5 2. - <_>5 15 3 5 2. - 0 - 7.0728380233049393e-003 - -0.0365821197628975 - 0.1312654018402100 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 1.8164990469813347e-003 - 0.0399538315832615 - -0.0515895783901215 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 16 7 2 3. - 0 - 4.1909920983016491e-003 - 0.0486651994287968 - -0.1059850975871086 - <_> - - <_> - - - - <_>0 12 20 6 -1. - <_>0 15 20 3 2. - 0 - 0.1194002032279968 - -6.7811049520969391e-003 - 0.7452349066734314 - <_> - - <_> - - - - <_>1 16 16 4 -1. - <_>1 18 16 2 2. - 0 - -1.4965030131861567e-003 - 0.0668059363961220 - -0.0677984729409218 - <_> - - <_> - - - - <_>12 10 5 9 -1. - <_>12 13 5 3 3. - 0 - -0.1172299981117249 - -0.8786048889160156 - 1.8648250261321664e-003 - <_> - - <_> - - - - <_>3 10 5 9 -1. - <_>3 13 5 3 3. - 0 - 3.2925528939813375e-003 - 0.0356349013745785 - -0.1503078937530518 - <_> - - <_> - - - - <_>5 8 13 12 -1. - <_>5 12 13 4 3. - 0 - 0.0684935674071312 - -9.8042488098144531e-003 - 0.3016194105148315 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>5 5 5 3 2. - <_>10 8 5 3 2. - 0 - 2.1837449166923761e-003 - -0.0534208491444588 - 0.0856263265013695 - <_> - - <_> - - - - <_>5 5 10 6 -1. - <_>10 5 5 3 2. - <_>5 8 5 3 2. - 0 - 6.9181360304355621e-003 - -0.0436855182051659 - 0.1270675957202911 - <_> - - <_> - - - - <_>0 3 13 2 -1. - <_>0 4 13 1 2. - 0 - -1.5878600534051657e-003 - -0.1264044046401978 - 0.0390260890126228 - <_> - - <_> - - - - <_>8 2 12 4 -1. - <_>8 4 12 2 2. - 0 - 3.8289129734039307e-003 - 0.0390253812074661 - -0.0796756893396378 - <_> - - <_> - - - - <_>5 0 8 6 -1. - <_>5 2 8 2 3. - 0 - 0.0122532602399588 - -0.0448096282780170 - 0.0977727100253105 - <_> - - <_> - - - - <_>5 2 14 4 -1. - <_>12 2 7 2 2. - <_>5 4 7 2 2. - 0 - 6.4031239598989487e-003 - 0.0335796102881432 - -0.1330029964447022 - <_> - - <_> - - - - <_>5 0 10 8 -1. - <_>5 4 10 4 2. - 0 - 7.0500532165169716e-003 - -0.0511214099824429 - 0.1177240014076233 - <_> - - <_> - - - - <_>12 0 8 4 -1. - <_>12 2 8 2 2. - 0 - 0.0132167302072048 - 0.0264540091156960 - -0.1319022029638290 - <_> - - <_> - - - - <_>8 9 4 8 -1. - <_>8 13 4 4 2. - 0 - 6.7367991432547569e-003 - -0.0101531995460391 - 0.4157046973705292 - <_> - - <_> - - - - <_>9 10 5 8 -1. - <_>9 14 5 4 2. - 0 - 2.4951510131359100e-003 - 0.0146310199052095 - -0.1656035929918289 - <_> - - <_> - - - - <_>0 14 12 4 -1. - <_>6 14 6 4 2. - 0 - 0.0383029989898205 - 7.2940620593726635e-003 - -0.6074460744857788 - <_> - - <_> - - - - <_>4 6 14 4 -1. - <_>11 6 7 2 2. - <_>4 8 7 2 2. - 0 - -0.0164910592138767 - 0.1678835004568100 - -0.0150621701031923 - <_> - - <_> - - - - <_>4 4 11 10 -1. - <_>4 9 11 5 2. - 0 - -0.0270716398954391 - -0.4638155102729797 - 0.0103350598365068 - <_> - - <_> - - - - <_>7 1 9 12 -1. - <_>7 7 9 6 2. - 0 - -0.0587149597704411 - 0.1486099958419800 - -0.0166637301445007 - <_> - - <_> - - - - <_>8 5 3 15 -1. - <_>8 10 3 5 3. - 0 - 9.2380512505769730e-003 - 0.0438303388655186 - -0.1061268970370293 - <_> - - <_> - - - - <_>7 13 13 3 -1. - <_>7 14 13 1 3. - 0 - 3.0808299779891968e-003 - -0.0367814898490906 - 0.0895591974258423 - <_> - - <_> - - - - <_>0 4 20 6 -1. - <_>0 6 20 2 3. - 0 - 2.9910521116107702e-003 - 0.0160191897302866 - -0.2917783856391907 - <_> - - <_> - - - - <_>5 3 12 4 -1. - <_>5 5 12 2 2. - 0 - 0.0447866097092628 - -6.7814979702234268e-003 - 0.3669516146183014 - <_> - - <_> - - - - <_>6 11 8 8 -1. - <_>6 11 4 4 2. - <_>10 15 4 4 2. - 0 - -2.9985690489411354e-003 - -0.0903160721063614 - 0.0480480417609215 - <_> - - <_> - - - - <_>5 15 13 3 -1. - <_>5 16 13 1 3. - 0 - -8.9135952293872833e-003 - 0.1690360009670258 - -0.0218804609030485 - <_> - - <_> - - - - <_>0 13 18 4 -1. - <_>0 13 9 2 2. - <_>9 15 9 2 2. - 0 - -0.0395982004702091 - -0.4488484859466553 - 0.0100272195413709 - <_> - - <_> - - - - <_>10 0 3 13 -1. - <_>11 0 1 13 3. - 0 - -0.0370648093521595 - -0.4418356120586395 - 2.2891450207680464e-003 - <_> - - <_> - - - - <_>7 0 3 13 -1. - <_>8 0 1 13 3. - 0 - -9.3376229051500559e-004 - 0.0736330598592758 - -0.0589016899466515 - <_> - - <_> - - - - <_>2 0 18 18 -1. - <_>8 0 6 18 3. - 0 - 0.0808877572417259 - -0.0249635800719261 - 0.0603037588298321 - <_> - - <_> - - - - <_>2 2 12 15 -1. - <_>2 7 12 5 3. - 0 - -0.0306975692510605 - -0.1781900972127914 - 0.0260902903974056 - <_> - - <_> - - - - <_>7 1 11 18 -1. - <_>7 7 11 6 3. - 0 - -0.1849526017904282 - 0.3490122854709625 - -3.8219890557229519e-003 - <_> - - <_> - - - - <_>8 5 4 14 -1. - <_>8 5 2 7 2. - <_>10 12 2 7 2. - 0 - 0.0112183196470141 - -0.0267815496772528 - 0.1743142008781433 - <_> - - <_> - - - - <_>10 5 3 14 -1. - <_>10 12 3 7 2. - 0 - 6.2761609442532063e-003 - 0.0145324403420091 - -0.1186456978321075 - <_> - - <_> - - - - <_>7 5 3 14 -1. - <_>7 12 3 7 2. - 0 - -8.8509358465671539e-003 - -0.1051568984985352 - 0.0576556809246540 - <_> - - <_> - - - - <_>3 4 14 4 -1. - <_>3 6 14 2 2. - 0 - -0.0385757982730865 - 0.1500456035137177 - -0.0360802002251148 - <_> - - <_> - - - - <_>0 5 20 4 -1. - <_>0 5 10 2 2. - <_>10 7 10 2 2. - 0 - -0.0527202114462852 - -0.4755679070949554 - 0.0111260702833533 - -1.1474020481109619 - 43 - -1 - <_> - - - <_> - - <_> - - - - <_>8 4 4 14 -1. - <_>8 11 4 7 2. - 0 - -3.8506588898599148e-003 - 0.1120956987142563 - -0.2733029127120972 - <_> - - <_> - - - - <_>15 3 4 16 -1. - <_>17 3 2 8 2. - <_>15 11 2 8 2. - 0 - -0.0494272597134113 - 0.3927012085914612 - -0.0398718491196632 - <_> - - <_> - - - - <_>2 0 4 7 -1. - <_>4 0 2 7 2. - 0 - 1.3538210187107325e-003 - -0.1596504002809525 - 0.1252105981111527 - <_> - - <_> - - - - <_>12 6 5 9 -1. - <_>12 9 5 3 3. - 0 - 3.9328690618276596e-003 - -0.3404383957386017 - 0.0474374890327454 - <_> - - <_> - - - - <_>2 1 8 6 -1. - <_>2 3 8 2 3. - 0 - 2.3011169396340847e-003 - -0.2082774937152863 - 0.0748917013406754 - <_> - - <_> - - - - <_>10 1 4 8 -1. - <_>10 1 2 8 2. - 0 - 5.9128052089363337e-004 - -0.2084272056818008 - 0.0377987809479237 - <_> - - <_> - - - - <_>6 1 4 8 -1. - <_>8 1 2 8 2. - 0 - 1.7478190129622817e-003 - -0.1963517963886261 - 0.0645820274949074 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 5.8316658250987530e-003 - 0.0315820388495922 - -0.1908458024263382 - <_> - - <_> - - - - <_>4 6 5 6 -1. - <_>4 9 5 3 2. - 0 - 1.2435190146788955e-003 - -0.5321357846260071 - 0.0221622306853533 - <_> - - <_> - - - - <_>7 15 7 4 -1. - <_>7 17 7 2 2. - 0 - 1.6247769817709923e-003 - -0.1327618062496185 - 0.0801356732845306 - <_> - - <_> - - - - <_>8 6 4 8 -1. - <_>8 10 4 4 2. - 0 - -2.2734089288860559e-003 - -0.1734469980001450 - 0.0547829903662205 - <_> - - <_> - - - - <_>10 10 7 6 -1. - <_>10 12 7 2 3. - 0 - 0.0578590594232082 - -1.5829589683562517e-003 - -0.6636794209480286 - <_> - - <_> - - - - <_>3 10 7 6 -1. - <_>3 12 7 2 3. - 0 - 5.7728560641407967e-003 - 0.0398151688277721 - -0.2291924953460693 - <_> - - <_> - - - - <_>8 6 6 12 -1. - <_>11 6 3 6 2. - <_>8 12 3 6 2. - 0 - -0.0440396107733250 - 0.2179328054189682 - -0.0235340092331171 - <_> - - <_> - - - - <_>5 6 4 14 -1. - <_>5 6 2 7 2. - <_>7 13 2 7 2. - 0 - 3.0226248782128096e-004 - -0.0894195809960365 - 0.1104286983609200 - <_> - - <_> - - - - <_>0 15 20 2 -1. - <_>0 15 10 2 2. - 0 - -0.0344708599150181 - -0.3666667938232422 - 0.0278582796454430 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - 0.0324603989720345 - 0.0157338809221983 - -0.4973374903202057 - <_> - - <_> - - - - <_>6 15 13 2 -1. - <_>6 16 13 1 2. - 0 - 9.9335552658885717e-004 - -0.0918009430170059 - 0.0840039774775505 - <_> - - <_> - - - - <_>0 17 19 3 -1. - <_>0 18 19 1 3. - 0 - -0.0234738308936358 - -0.4437566995620728 - 0.0151480101048946 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>12 5 3 5 2. - <_>9 10 3 5 2. - 0 - -2.9013049788773060e-003 - 0.0546423494815826 - -0.2015652954578400 - <_> - - <_> - - - - <_>3 3 13 2 -1. - <_>3 4 13 1 2. - 0 - -6.5832951804623008e-004 - -0.1228576973080635 - 0.0567078888416290 - <_> - - <_> - - - - <_>2 0 17 6 -1. - <_>2 2 17 2 3. - 0 - 2.0407158881425858e-003 - -0.1089906990528107 - 0.0599336996674538 - <_> - - <_> - - - - <_>1 3 4 16 -1. - <_>1 3 2 8 2. - <_>3 11 2 8 2. - 0 - -0.0131614999845624 - 0.1409195959568024 - -0.0473962016403675 - <_> - - <_> - - - - <_>12 10 8 6 -1. - <_>12 12 8 2 3. - 0 - -4.2273551225662231e-003 - -0.1249826997518539 - 0.0511246584355831 - <_> - - <_> - - - - <_>1 7 12 4 -1. - <_>5 7 4 4 3. - 0 - 7.6580629684031010e-003 - 0.0387734808027744 - -0.1809569001197815 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>14 0 3 5 2. - 0 - -5.1912548951804638e-003 - 0.1254525929689407 - -0.0440125800669193 - <_> - - <_> - - - - <_>3 0 14 6 -1. - <_>10 0 7 6 2. - 0 - 0.1187459006905556 - -0.0148014798760414 - 0.4007121026515961 - <_> - - <_> - - - - <_>7 9 6 10 -1. - <_>10 9 3 5 2. - <_>7 14 3 5 2. - 0 - 4.5105828903615475e-003 - 0.0533368512988091 - -0.1570904999971390 - <_> - - <_> - - - - <_>0 14 18 6 -1. - <_>6 14 6 6 3. - 0 - 0.0450153797864914 - -0.0332787781953812 - 0.2053513973951340 - <_> - - <_> - - - - <_>11 0 6 16 -1. - <_>14 0 3 8 2. - <_>11 8 3 8 2. - 0 - -2.0866969134658575e-003 - 0.0421035289764404 - -0.1036178991198540 - <_> - - <_> - - - - <_>5 10 4 7 -1. - <_>7 10 2 7 2. - 0 - -1.3008449459448457e-003 - 0.0644244700670242 - -0.0978970602154732 - <_> - - <_> - - - - <_>11 10 4 8 -1. - <_>11 10 2 8 2. - 0 - -1.3591230381280184e-003 - 0.0729873478412628 - -0.0944510027766228 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>7 10 2 8 2. - 0 - -7.4056759476661682e-003 - -0.1532036066055298 - 0.0532420016825199 - <_> - - <_> - - - - <_>16 0 3 13 -1. - <_>17 0 1 13 3. - 0 - 2.0208859350532293e-003 - -0.0332455299794674 - 0.0603197105228901 - <_> - - <_> - - - - <_>1 14 16 6 -1. - <_>9 14 8 6 2. - 0 - -0.0103421499952674 - 0.0855105593800545 - -0.0839208289980888 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - 0.0248658601194620 - 0.0126394601538777 - -0.3475719988346100 - <_> - - <_> - - - - <_>5 0 10 6 -1. - <_>5 3 10 3 2. - 0 - 0.0997986570000649 - -0.0188239701092243 - 0.3446500003337860 - <_> - - <_> - - - - <_>6 4 14 15 -1. - <_>6 9 14 5 3. - 0 - 0.0212013907730579 - -0.1046779975295067 - 0.0314945094287395 - <_> - - <_> - - - - <_>3 1 14 4 -1. - <_>3 1 7 2 2. - <_>10 3 7 2 2. - 0 - -5.1909908652305603e-003 - -0.1579234004020691 - 0.0502699613571167 - <_> - - <_> - - - - <_>8 3 6 10 -1. - <_>11 3 3 5 2. - <_>8 8 3 5 2. - 0 - 0.0669612288475037 - 3.2651789952069521e-003 - -0.5604916810989380 - <_> - - <_> - - - - <_>6 3 6 10 -1. - <_>6 3 3 5 2. - <_>9 8 3 5 2. - 0 - 0.0118091097101569 - -0.0285137891769409 - 0.2122631967067719 - <_> - - <_> - - - - <_>12 4 3 10 -1. - <_>12 9 3 5 2. - 0 - -0.0176456607878208 - -0.4450336098670960 - 5.0029670819640160e-003 - <_> - - <_> - - - - <_>5 4 3 10 -1. - <_>5 9 3 5 2. - 0 - -6.8918941542506218e-003 - -0.4219962060451508 - 0.0148130403831601 - <_> - - <_> - - - - <_>11 0 6 5 -1. - <_>11 0 3 5 2. - 0 - 2.1675550378859043e-003 - -0.1312519013881683 - 0.0671404227614403 - <_> - - <_> - - - - <_>5 7 10 6 -1. - <_>5 7 5 3 2. - <_>10 10 5 3 2. - 0 - -3.3283489756286144e-003 - -0.1076532974839211 - 0.0536107681691647 - <_> - - <_> - - - - <_>1 10 19 3 -1. - <_>1 11 19 1 3. - 0 - 0.0488696210086346 - 6.4427889883518219e-003 - -0.6456328034400940 - <_> - - <_> - - - - <_>1 0 3 13 -1. - <_>2 0 1 13 3. - 0 - 7.2693959809839725e-003 - -0.0396036207675934 - 0.1536964029073715 - <_> - - <_> - - - - <_>14 1 6 16 -1. - <_>16 1 2 16 3. - 0 - 0.0888499915599823 - -0.0132344001904130 - 0.2855528891086578 - <_> - - <_> - - - - <_>3 5 14 12 -1. - <_>3 5 7 6 2. - <_>10 11 7 6 2. - 0 - 0.0154559500515461 - 0.0396941006183624 - -0.1720626950263977 - <_> - - <_> - - - - <_>14 1 6 16 -1. - <_>16 1 2 16 3. - 0 - -0.0137472003698349 - 0.1007926985621452 - -0.0438120290637016 - <_> - - <_> - - - - <_>0 1 6 16 -1. - <_>2 1 2 16 3. - 0 - -0.0228057503700256 - 0.1501417011022568 - -0.0437677986919880 - <_> - - <_> - - - - <_>4 2 12 4 -1. - <_>8 2 4 4 3. - 0 - 0.0238380394876003 - 0.0539012812077999 - -0.1461029052734375 - <_> - - <_> - - - - <_>3 9 12 6 -1. - <_>3 12 12 3 2. - 0 - -0.1018162965774536 - 0.3190504014492035 - -0.0200115907937288 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - 7.1074268780648708e-003 - 0.0562441796064377 - -0.1258756071329117 - <_> - - <_> - - - - <_>8 0 2 13 -1. - <_>9 0 1 13 2. - 0 - 7.6678092591464520e-004 - -0.1070419028401375 - 0.0664362981915474 - <_> - - <_> - - - - <_>8 9 6 10 -1. - <_>11 9 3 5 2. - <_>8 14 3 5 2. - 0 - 3.7424071342684329e-004 - -0.0378262996673584 - 0.0472349897027016 - <_> - - <_> - - - - <_>6 9 6 10 -1. - <_>6 9 3 5 2. - <_>9 14 3 5 2. - 0 - -2.0078169181942940e-003 - -0.0933162868022919 - 0.0676416084170341 - <_> - - <_> - - - - <_>5 17 10 3 -1. - <_>5 17 5 3 2. - 0 - 0.0334690511226654 - -0.0279261507093906 - 0.2529337108135223 - <_> - - <_> - - - - <_>7 2 2 18 -1. - <_>8 2 1 18 2. - 0 - -0.0155070303007960 - -0.5514515042304993 - 0.0128211602568626 - <_> - - <_> - - - - <_>5 14 15 6 -1. - <_>10 14 5 6 3. - 0 - -0.0192487090826035 - 0.0526886284351349 - -0.0303649902343750 - <_> - - <_> - - - - <_>0 9 7 6 -1. - <_>0 11 7 2 3. - 0 - -0.0175560303032398 - -0.3324734866619110 - 0.0187803804874420 - <_> - - <_> - - - - <_>5 14 15 6 -1. - <_>10 14 5 6 3. - 0 - 0.0193243809044361 - -0.0324584618210793 - 0.0949869975447655 - <_> - - <_> - - - - <_>0 14 15 6 -1. - <_>5 14 5 6 3. - 0 - -0.0203671604394913 - 0.1134840026497841 - -0.0584348216652870 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - 5.1770661957561970e-003 - 0.0470305606722832 - -0.0849603265523911 - <_> - - <_> - - - - <_>2 4 4 14 -1. - <_>2 4 2 7 2. - <_>4 11 2 7 2. - 0 - 1.9768481142818928e-003 - -0.0707941427826881 - 0.1037515029311180 - <_> - - <_> - - - - <_>11 1 6 12 -1. - <_>14 1 3 6 2. - <_>11 7 3 6 2. - 0 - -7.0216279709711671e-004 - 0.0307817291468382 - -0.1017082035541534 - <_> - - <_> - - - - <_>3 1 6 12 -1. - <_>3 1 3 6 2. - <_>6 7 3 6 2. - 0 - -2.4710369762033224e-003 - 0.0515776202082634 - -0.1192080974578857 - <_> - - <_> - - - - <_>4 7 15 6 -1. - <_>9 7 5 6 3. - 0 - 0.0232785400003195 - 0.0301915705204010 - -0.0939378887414932 - <_> - - <_> - - - - <_>1 0 6 10 -1. - <_>1 0 3 5 2. - <_>4 5 3 5 2. - 0 - 0.0136738196015358 - -0.0267589595168829 - 0.2401420027017593 - <_> - - <_> - - - - <_>8 13 9 5 -1. - <_>11 13 3 5 3. - 0 - -8.3967903628945351e-003 - -0.0504037700593472 - 0.0223681107163429 - <_> - - <_> - - - - <_>0 0 9 7 -1. - <_>3 0 3 7 3. - 0 - 0.0478784702718258 - -0.0237580500543118 - 0.2648639082908630 - <_> - - <_> - - - - <_>9 7 8 5 -1. - <_>9 7 4 5 2. - 0 - -0.0224835202097893 - -0.2304278016090393 - 0.0128406798467040 - <_> - - <_> - - - - <_>3 7 8 5 -1. - <_>7 7 4 5 2. - 0 - -0.0108839897438884 - -0.1838018000125885 - 0.0326397083699703 - <_> - - <_> - - - - <_>4 0 12 19 -1. - <_>8 0 4 19 3. - 0 - -0.0449019894003868 - 0.2419596016407013 - -0.0265072807669640 - <_> - - <_> - - - - <_>3 8 8 6 -1. - <_>7 8 4 6 2. - 0 - -0.0830429270863533 - -0.8049132823944092 - 7.5420029461383820e-003 - <_> - - <_> - - - - <_>15 2 5 6 -1. - <_>15 5 5 3 2. - 0 - -3.7240530364215374e-003 - -0.0802282392978668 - 0.0315844714641571 - <_> - - <_> - - - - <_>3 1 13 10 -1. - <_>3 6 13 5 2. - 0 - -7.3502189479768276e-003 - 0.0689622312784195 - -0.0973912477493286 - <_> - - <_> - - - - <_>14 0 3 10 -1. - <_>14 5 3 5 2. - 0 - 5.5313981138169765e-003 - -0.0301807206124067 - 0.0601748004555702 - <_> - - <_> - - - - <_>0 1 20 8 -1. - <_>0 1 10 4 2. - <_>10 5 10 4 2. - 0 - 0.0172930806875229 - 0.0407321006059647 - -0.1560066044330597 - <_> - - <_> - - - - <_>8 6 6 12 -1. - <_>11 6 3 6 2. - <_>8 12 3 6 2. - 0 - -3.3298740163445473e-003 - 0.0410010889172554 - -0.0769090279936790 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - -4.9308240413665771e-003 - 0.1703153997659683 - -0.0405822396278381 - <_> - - <_> - - - - <_>8 10 6 10 -1. - <_>10 10 2 10 3. - 0 - 8.6011141538619995e-003 - 0.0316569209098816 - -0.1405003964900971 - <_> - - <_> - - - - <_>9 3 2 14 -1. - <_>9 10 2 7 2. - 0 - 0.0136743402108550 - -0.0218457095324993 - 0.3012866079807282 - <_> - - <_> - - - - <_>11 1 4 18 -1. - <_>11 1 2 18 2. - 0 - -0.0113754197955132 - -0.1568734049797058 - 0.0282560195773840 - <_> - - <_> - - - - <_>5 1 4 18 -1. - <_>7 1 2 18 2. - 0 - -4.2750681750476360e-003 - -0.1215597018599510 - 0.0501467995345593 - <_> - - <_> - - - - <_>7 1 8 5 -1. - <_>7 1 4 5 2. - 0 - 0.0164847597479820 - -0.0365578904747963 - 0.1258372962474823 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>7 5 2 8 3. - 0 - -0.0390569008886814 - 0.2405312955379486 - -0.0269838906824589 - <_> - - <_> - - - - <_>12 9 7 6 -1. - <_>12 11 7 2 3. - 0 - -5.7546719908714294e-003 - -0.1333768069744110 - 0.0202660206705332 - <_> - - <_> - - - - <_>1 9 7 6 -1. - <_>1 11 7 2 3. - 0 - 5.1583289168775082e-003 - 0.0646663904190063 - -0.1142849996685982 - <_> - - <_> - - - - <_>9 10 7 4 -1. - <_>9 12 7 2 2. - 0 - -3.0463270377367735e-003 - 0.0450186803936958 - -0.0815735906362534 - <_> - - <_> - - - - <_>0 2 5 9 -1. - <_>0 5 5 3 3. - 0 - 7.4743861332535744e-003 - 0.0312467105686665 - -0.1892973035573959 - <_> - - <_> - - - - <_>10 2 6 9 -1. - <_>10 5 6 3 3. - 0 - 1.6480450285598636e-003 - -0.0258950404822826 - 0.1865288019180298 - <_> - - <_> - - - - <_>0 1 18 6 -1. - <_>0 1 9 3 2. - <_>9 4 9 3 2. - 0 - 4.5184311456978321e-003 - 0.0548034682869911 - -0.1044400036334992 - <_> - - <_> - - - - <_>5 6 14 3 -1. - <_>5 7 14 1 3. - 0 - -3.3209871035069227e-003 - 0.0439594015479088 - -0.0812404826283455 - <_> - - <_> - - - - <_>0 12 6 5 -1. - <_>3 12 3 5 2. - 0 - 5.2665979601442814e-003 - -0.0448534712195396 - 0.1134390980005264 - <_> - - <_> - - - - <_>10 10 9 6 -1. - <_>13 10 3 6 3. - 0 - -4.7867707908153534e-003 - 0.0763190090656281 - -0.0285511706024408 - <_> - - <_> - - - - <_>0 9 5 9 -1. - <_>0 12 5 3 3. - 0 - -0.0447101183235645 - -0.3479571938514710 - 0.0149282300844789 - <_> - - <_> - - - - <_>8 0 8 19 -1. - <_>8 0 4 19 2. - 0 - 4.3861730955541134e-003 - 0.0745409503579140 - -0.0462980717420578 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - 9.2240851372480392e-003 - -0.0586261786520481 - 0.0986934080719948 - <_> - - <_> - - - - <_>9 0 2 13 -1. - <_>9 0 1 13 2. - 0 - -1.1849260190501809e-003 - 0.1002314016222954 - -0.0567296408116817 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -0.0185465402901173 - -0.3823617100715637 - 0.0151415299624205 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - 3.4743950236588717e-003 - 0.0265239104628563 - -0.1128982976078987 - <_> - - <_> - - - - <_>3 9 9 6 -1. - <_>6 9 3 6 3. - 0 - 0.1027401983737946 - -6.6097700037062168e-003 - 0.7756177783012390 - <_> - - <_> - - - - <_>6 4 12 14 -1. - <_>10 4 4 14 3. - 0 - 0.2047939002513886 - 6.9657550193369389e-003 - -0.3598898053169251 - <_> - - <_> - - - - <_>2 4 12 14 -1. - <_>6 4 4 14 3. - 0 - 0.1209406033158302 - 0.0181744508445263 - -0.3353117108345032 - <_> - - <_> - - - - <_>7 1 8 5 -1. - <_>7 1 4 5 2. - 0 - 0.0122242299839854 - -0.0314540490508080 - 0.0790049731731415 - <_> - - <_> - - - - <_>4 0 8 19 -1. - <_>8 0 4 19 2. - 0 - 0.1517646014690399 - -0.0108266696333885 - 0.4558309018611908 - <_> - - <_> - - - - <_>8 13 9 5 -1. - <_>11 13 3 5 3. - 0 - -0.0996921509504318 - -0.3542217910289764 - 3.1256359070539474e-003 - <_> - - <_> - - - - <_>3 13 9 5 -1. - <_>6 13 3 5 3. - 0 - -6.3465638086199760e-003 - -0.1109881997108460 - 0.0537353083491325 - <_> - - <_> - - - - <_>4 1 12 4 -1. - <_>8 1 4 4 3. - 0 - -6.7007602192461491e-003 - 0.1891009062528610 - -0.0309301596134901 - <_> - - <_> - - - - <_>1 2 8 18 -1. - <_>1 2 4 9 2. - <_>5 11 4 9 2. - 0 - -0.1010119989514351 - 0.2376350015401840 - -0.0222139693796635 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.0461110211908817 - -0.0375433303415775 - 0.0487337596714497 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1414680927991867 - 0.0111480196937919 - -0.5147436261177063 - <_> - - <_> - - - - <_>11 11 6 9 -1. - <_>11 14 6 3 3. - 0 - -0.0113944998010993 - -0.0708243027329445 - 0.0317593701183796 - <_> - - <_> - - - - <_>3 11 6 9 -1. - <_>3 14 6 3 3. - 0 - 3.1667309813201427e-003 - 0.0411772802472115 - -0.1490058004856110 - <_> - - <_> - - - - <_>8 14 10 6 -1. - <_>13 14 5 3 2. - <_>8 17 5 3 2. - 0 - 8.9959725737571716e-003 - -0.0411865115165710 - 0.0728167816996574 - <_> - - <_> - - - - <_>7 13 6 7 -1. - <_>9 13 2 7 3. - 0 - -0.0615592710673809 - -0.7393764257431030 - 6.6859079524874687e-003 - <_> - - <_> - - - - <_>9 5 7 6 -1. - <_>9 7 7 2 3. - 0 - -3.5607949830591679e-003 - 0.0132605098187923 - -0.0611508190631866 - <_> - - <_> - - - - <_>4 5 7 6 -1. - <_>4 7 7 2 3. - 0 - -0.1247633993625641 - -0.7858049869537354 - 6.2701301649212837e-003 - <_> - - <_> - - - - <_>3 0 17 16 -1. - <_>3 8 17 8 2. - 0 - 0.6273918747901917 - 3.5465341061353683e-003 - -0.7336381077766419 - <_> - - <_> - - - - <_>0 0 19 3 -1. - <_>0 1 19 1 3. - 0 - 0.0342191606760025 - 8.2031572237610817e-003 - -0.5333021283149719 - <_> - - <_> - - - - <_>11 1 5 9 -1. - <_>11 4 5 3 3. - 0 - 1.0574149928288534e-004 - -0.0503547005355358 - 0.0470194891095161 - <_> - - <_> - - - - <_>4 1 10 6 -1. - <_>4 4 10 3 2. - 0 - -0.0321122892200947 - 0.1708530038595200 - -0.0347341410815716 - <_> - - <_> - - - - <_>7 10 12 9 -1. - <_>7 13 12 3 3. - 0 - -0.0161408390849829 - -0.0647530928254128 - 0.0569431111216545 - <_> - - <_> - - - - <_>1 10 12 3 -1. - <_>7 10 6 3 2. - 0 - 0.0197372809052467 - -0.0180651806294918 - 0.2618342041969299 - <_> - - <_> - - - - <_>7 8 6 12 -1. - <_>10 8 3 6 2. - <_>7 14 3 6 2. - 0 - 0.0278954505920410 - 0.0176410600543022 - -0.3095115125179291 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 14 5 3 2. - <_>7 17 5 3 2. - 0 - 3.5123159177601337e-003 - -0.0834470689296722 - 0.0650159716606140 - <_> - - <_> - - - - <_>6 9 8 8 -1. - <_>10 9 4 4 2. - <_>6 13 4 4 2. - 0 - -4.4775637798011303e-003 - -0.1242344975471497 - 0.0470611192286015 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>7 17 6 3 3. - 0 - -6.1348858289420605e-003 - 0.1024826988577843 - -0.0597009584307671 - <_> - - <_> - - - - <_>6 6 10 6 -1. - <_>11 6 5 3 2. - <_>6 9 5 3 2. - 0 - 0.0140479598194361 - 0.0148333795368671 - -0.1122959032654762 - <_> - - <_> - - - - <_>4 6 10 6 -1. - <_>4 6 5 3 2. - <_>9 9 5 3 2. - 0 - 1.1907520238310099e-003 - 0.0499866902828217 - -0.1169629022479057 - <_> - - <_> - - - - <_>6 14 9 5 -1. - <_>9 14 3 5 3. - 0 - 0.0176173895597458 - -0.0176877006888390 - 0.1541609019041061 - <_> - - <_> - - - - <_>6 10 6 10 -1. - <_>8 10 2 10 3. - 0 - -4.9166870303452015e-003 - -0.1022718027234078 - 0.0469943918287754 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -3.9010820910334587e-003 - 0.1422944962978363 - -0.0453127995133400 - <_> - - <_> - - - - <_>8 8 4 7 -1. - <_>10 8 2 7 2. - 0 - -1.7458139918744564e-003 - -0.1085309013724327 - 0.0756895616650581 - <_> - - <_> - - - - <_>8 10 8 4 -1. - <_>8 12 8 2 2. - 0 - -1.2748650042340159e-003 - 0.0223845206201077 - -0.0751505270600319 - <_> - - <_> - - - - <_>0 0 10 9 -1. - <_>0 3 10 3 3. - 0 - -0.0791095569729805 - 0.4877392947673798 - -9.6941655501723289e-003 - <_> - - <_> - - - - <_>9 1 8 4 -1. - <_>9 3 8 2 2. - 0 - -0.0141032701358199 - -0.2326368987560272 - 0.0150915598496795 - <_> - - <_> - - - - <_>4 5 5 6 -1. - <_>4 8 5 3 2. - 0 - -2.2076119203120470e-003 - 0.1926839947700501 - -0.0254290606826544 - <_> - - <_> - - - - <_>8 6 9 4 -1. - <_>8 8 9 2 2. - 0 - 0.0396260581910610 - -0.0156307592988014 - 0.1227002963423729 - <_> - - <_> - - - - <_>0 0 3 13 -1. - <_>1 0 1 13 3. - 0 - -7.8973636846058071e-005 - -0.0732576474547386 - 0.0658486932516098 - <_> - - <_> - - - - <_>13 1 6 11 -1. - <_>15 1 2 11 3. - 0 - 5.1964947488158941e-004 - -0.1136638000607491 - 0.0811334922909737 - <_> - - <_> - - - - <_>1 1 6 11 -1. - <_>3 1 2 11 3. - 0 - -1.1722079943865538e-003 - -0.0976026430726051 - 0.0598395690321922 - <_> - - <_> - - - - <_>11 0 6 5 -1. - <_>11 0 3 5 2. - 0 - 3.9326730184257030e-003 - -0.0570261515676975 - 0.0422261282801628 - <_> - - <_> - - - - <_>4 2 6 17 -1. - <_>6 2 2 17 3. - 0 - -0.0873861536383629 - -0.3789604902267456 - 0.0128692798316479 - <_> - - <_> - - - - <_>8 12 8 8 -1. - <_>12 12 4 4 2. - <_>8 16 4 4 2. - 0 - -0.0213240403681993 - 0.3088644146919251 - -0.0177342407405376 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -2.3385910317301750e-003 - -0.1132232025265694 - 0.0439149402081966 - <_> - - <_> - - - - <_>6 6 8 4 -1. - <_>6 8 8 2 2. - 0 - 1.5183660434558988e-003 - -0.1433762013912201 - 0.0394417084753513 - <_> - - <_> - - - - <_>2 10 9 6 -1. - <_>2 13 9 3 2. - 0 - -0.1108551993966103 - 0.7403758764266968 - -6.7982021719217300e-003 - <_> - - <_> - - - - <_>9 11 11 6 -1. - <_>9 14 11 3 2. - 0 - -0.0100091202184558 - -0.0392032302916050 - 0.0317492112517357 - <_> - - <_> - - - - <_>3 11 14 8 -1. - <_>3 11 7 4 2. - <_>10 15 7 4 2. - 0 - -0.0209164302796125 - 0.1892773061990738 - -0.0304902307689190 - <_> - - <_> - - - - <_>8 4 4 10 -1. - <_>8 9 4 5 2. - 0 - 7.4165337719023228e-003 - 0.0467974506318569 - -0.1111361011862755 - <_> - - <_> - - - - <_>1 12 13 3 -1. - <_>1 13 13 1 3. - 0 - 3.3599510788917542e-003 - -0.0452549904584885 - 0.1150840967893601 - <_> - - <_> - - - - <_>9 7 4 12 -1. - <_>9 11 4 4 3. - 0 - -5.7189498329535127e-004 - -0.0634720772504807 - 0.0520499497652054 - <_> - - <_> - - - - <_>0 14 7 6 -1. - <_>0 17 7 3 2. - 0 - -0.0681202933192253 - 0.5080602765083313 - -9.5091843977570534e-003 - <_> - - <_> - - - - <_>13 11 7 6 -1. - <_>13 13 7 2 3. - 0 - 2.5180799420922995e-003 - 0.0553053207695484 - -0.1440276950597763 - <_> - - <_> - - - - <_>4 4 12 16 -1. - <_>4 12 12 8 2. - 0 - 0.0560552515089512 - -0.0233591701835394 - 0.2193540036678314 - <_> - - <_> - - - - <_>11 10 9 4 -1. - <_>11 12 9 2 2. - 0 - -0.0403867103159428 - -0.1918344050645828 - 7.8779058530926704e-003 - <_> - - <_> - - - - <_>0 10 9 4 -1. - <_>0 12 9 2 2. - 0 - 3.1857648864388466e-003 - 0.0276057794690132 - -0.2008430957794190 - <_> - - <_> - - - - <_>2 11 16 6 -1. - <_>2 14 16 3 2. - 0 - 0.0251595508307219 - 0.0112656997516751 - -0.4362818002700806 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - -2.7010419871658087e-003 - 0.1133650019764900 - -0.0469042696058750 - <_> - - <_> - - - - <_>7 0 6 7 -1. - <_>9 0 2 7 3. - 0 - -0.0300568901002407 - -0.6236873269081116 - 7.3214052245020866e-003 - <_> - - <_> - - - - <_>0 11 12 4 -1. - <_>4 11 4 4 3. - 0 - -0.1208802014589310 - -0.8642836809158325 - 4.3813590891659260e-003 - <_> - - <_> - - - - <_>11 9 6 8 -1. - <_>13 9 2 8 3. - 0 - 4.0104859508574009e-003 - -0.0534716509282589 - 0.0711138024926186 - <_> - - <_> - - - - <_>3 9 6 8 -1. - <_>5 9 2 8 3. - 0 - -2.9688570648431778e-003 - 0.1007663011550903 - -0.0492339283227921 - <_> - - <_> - - - - <_>11 0 2 19 -1. - <_>11 0 1 19 2. - 0 - -3.7600689101964235e-003 - -0.2092870026826859 - 0.0265496801584959 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>7 10 2 8 2. - 0 - -1.5982619952410460e-003 - 0.0610701888799667 - -0.0796235725283623 - <_> - - <_> - - - - <_>13 14 7 6 -1. - <_>13 16 7 2 3. - 0 - 5.4285880178213120e-003 - 0.0397665798664093 - -0.1174684986472130 - <_> - - <_> - - - - <_>1 15 13 3 -1. - <_>1 16 13 1 3. - 0 - 1.0872900020331144e-003 - -0.0645962283015251 - 0.0749644264578819 - <_> - - <_> - - - - <_>5 15 13 3 -1. - <_>5 16 13 1 3. - 0 - -2.8442030306905508e-003 - 0.1173835024237633 - -0.0401594005525112 - <_> - - <_> - - - - <_>4 16 9 4 -1. - <_>4 18 9 2 2. - 0 - 0.0355461016297340 - 0.0121949696913362 - -0.4218482077121735 - <_> - - <_> - - - - <_>7 13 7 6 -1. - <_>7 15 7 2 3. - 0 - -0.0485429503023624 - 0.3129276931285858 - -0.0127738304436207 - <_> - - <_> - - - - <_>3 14 14 4 -1. - <_>3 14 7 2 2. - <_>10 16 7 2 2. - 0 - -0.0307321008294821 - -0.5063123703002930 - 0.0106007298454642 - <_> - - <_> - - - - <_>13 0 7 14 -1. - <_>13 7 7 7 2. - 0 - 0.0130669297650456 - -0.0500031188130379 - 0.0440059304237366 - <_> - - <_> - - - - <_>0 0 7 14 -1. - <_>0 7 7 7 2. - 0 - 0.2920064032077789 - 5.3693680092692375e-003 - -0.8903915882110596 - <_> - - <_> - - - - <_>3 2 16 4 -1. - <_>3 2 8 4 2. - 0 - -8.7579451501369476e-003 - 0.0966667309403419 - -0.0313106589019299 - <_> - - <_> - - - - <_>6 2 4 8 -1. - <_>6 6 4 4 2. - 0 - -2.3599369451403618e-003 - 0.0430462807416916 - -0.1099243015050888 - <_> - - <_> - - - - <_>10 0 3 14 -1. - <_>10 7 3 7 2. - 0 - 6.9077489897608757e-003 - -0.0291741602122784 - 0.0891748964786530 - <_> - - <_> - - - - <_>1 7 18 9 -1. - <_>1 10 18 3 3. - 0 - 0.0208496898412704 - 0.1261470019817352 - -0.0443581007421017 - <_> - - <_> - - - - <_>6 5 9 14 -1. - <_>9 5 3 14 3. - 0 - -0.0588464215397835 - 0.2166150063276291 - -8.7285088375210762e-003 - <_> - - <_> - - - - <_>5 5 9 14 -1. - <_>8 5 3 14 3. - 0 - 2.5576311163604259e-003 - -0.1164821013808250 - 0.0547560192644596 - <_> - - <_> - - - - <_>11 2 2 15 -1. - <_>11 2 1 15 2. - 0 - 3.8973900955170393e-003 - 0.0357594899833202 - -0.0978685617446899 - <_> - - <_> - - - - <_>6 8 4 8 -1. - <_>8 8 2 8 2. - 0 - -1.2494160328060389e-003 - 0.0913479626178741 - -0.0578171797096729 - <_> - - <_> - - - - <_>6 10 10 9 -1. - <_>6 13 10 3 3. - 0 - 3.4928850363940001e-003 - 0.0206342209130526 - -0.1449493020772934 - <_> - - <_> - - - - <_>0 16 14 4 -1. - <_>0 16 7 2 2. - <_>7 18 7 2 2. - 0 - -0.0113785099238157 - 0.2120326012372971 - -0.0241508502513170 - <_> - - <_> - - - - <_>9 5 4 13 -1. - <_>9 5 2 13 2. - 0 - -0.0440604500472546 - 0.4226736128330231 - -4.7765900380909443e-003 - <_> - - <_> - - - - <_>4 11 12 4 -1. - <_>8 11 4 4 3. - 0 - -8.3084795624017715e-003 - -0.0849286466836929 - 0.0602280907332897 - <_> - - <_> - - - - <_>6 17 14 2 -1. - <_>6 17 7 2 2. - 0 - -9.1945994645357132e-003 - 0.0723187029361725 - -0.0204722601920366 - <_> - - <_> - - - - <_>0 9 14 2 -1. - <_>7 9 7 2 2. - 0 - 0.0655751079320908 - 5.0813751295208931e-003 - -0.8969318866729736 - <_> - - <_> - - - - <_>16 0 4 15 -1. - <_>16 0 2 15 2. - 0 - 0.1851042062044144 - 2.2485901135951281e-003 - -0.7512516975402832 - <_> - - <_> - - - - <_>0 0 4 10 -1. - <_>2 0 2 10 2. - 0 - -0.1760881990194321 - -0.7896922230720520 - 5.2678477950394154e-003 - <_> - - <_> - - - - <_>16 8 4 12 -1. - <_>16 12 4 4 3. - 0 - 0.0983497127890587 - 2.8081049676984549e-003 - -0.2582851946353912 - <_> - - <_> - - - - <_>0 8 4 12 -1. - <_>0 12 4 4 3. - 0 - -1.8191979324910790e-004 - -0.0862061008810997 - 0.0522947981953621 - <_> - - <_> - - - - <_>12 12 8 6 -1. - <_>12 14 8 2 3. - 0 - -5.2928649820387363e-003 - -0.0546002388000488 - 0.0283046308904886 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 14 8 2 3. - 0 - 1.1537299724295735e-003 - 0.0466841682791710 - -0.1123477965593338 - <_> - - <_> - - - - <_>9 5 4 14 -1. - <_>11 5 2 7 2. - <_>9 12 2 7 2. - 0 - -3.8274680264294147e-003 - 0.0601455084979534 - -0.0823711007833481 - <_> - - <_> - - - - <_>0 11 11 6 -1. - <_>0 14 11 3 2. - 0 - -0.0869578570127487 - -0.4836303889751434 - 9.2326821759343147e-003 - <_> - - <_> - - - - <_>5 15 12 5 -1. - <_>9 15 4 5 3. - 0 - -2.4195960722863674e-003 - -0.0352211408317089 - 0.0270817093551159 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>6 6 3 6 2. - <_>9 12 3 6 2. - 0 - -4.7905668616294861e-003 - 0.0589552000164986 - -0.0787481367588043 - <_> - - <_> - - - - <_>7 7 8 4 -1. - <_>7 7 4 4 2. - 0 - -4.0910490788519382e-003 - -0.1755093932151794 - 0.0264547299593687 - <_> - - <_> - - - - <_>5 8 6 10 -1. - <_>5 8 3 5 2. - <_>8 13 3 5 2. - 0 - 2.5641750544309616e-003 - -0.0368148311972618 - 0.1514022946357727 - <_> - - <_> - - - - <_>7 4 7 14 -1. - <_>7 11 7 7 2. - 0 - 5.4726968519389629e-003 - 0.0312435794621706 - -0.0978909581899643 - <_> - - <_> - - - - <_>7 6 4 8 -1. - <_>7 10 4 4 2. - 0 - -1.0310260113328695e-003 - -0.1242405027151108 - 0.0403650291264057 - <_> - - <_> - - - - <_>9 2 6 9 -1. - <_>9 5 6 3 3. - 0 - -0.1303016990423203 - 0.1710616946220398 - -6.9856629706919193e-003 - <_> - - <_> - - - - <_>5 2 6 9 -1. - <_>5 5 6 3 3. - 0 - 3.5753389820456505e-003 - -0.0254371296614408 - 0.2196757048368454 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - 8.4238024428486824e-003 - 0.0295823998749256 - -0.1739009022712708 - <_> - - <_> - - - - <_>8 1 4 11 -1. - <_>10 1 2 11 2. - 0 - 0.0411546491086483 - -0.0132654998451471 - 0.3628241121768951 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>10 1 9 2 2. - <_>1 3 9 2 2. - 0 - -0.0186207592487335 - -0.2280678004026413 - 0.0215025693178177 - <_> - - <_> - - - - <_>3 4 4 16 -1. - <_>3 4 2 8 2. - <_>5 12 2 8 2. - 0 - 0.0233076196163893 - -0.0230477601289749 - 0.2320867031812668 - <_> - - <_> - - - - <_>8 12 6 8 -1. - <_>10 12 2 8 3. - 0 - 0.0465182997286320 - 0.0105854002758861 - -0.4607670009136200 - <_> - - <_> - - - - <_>0 3 6 7 -1. - <_>2 3 2 7 3. - 0 - -0.0834994018077850 - 0.3784511983394623 - -0.0141057400032878 - <_> - - <_> - - - - <_>14 2 6 9 -1. - <_>14 5 6 3 3. - 0 - -0.0968970134854317 - -0.3299584984779358 - 6.2883920036256313e-003 - <_> - - <_> - - - - <_>0 2 7 9 -1. - <_>0 5 7 3 3. - 0 - 6.9753699935972691e-003 - 0.0245936308056116 - -0.2100367993116379 - <_> - - <_> - - - - <_>16 0 3 13 -1. - <_>17 0 1 13 3. - 0 - -0.0338599495589733 - 0.1892790049314499 - -8.7296841666102409e-003 - <_> - - <_> - - - - <_>1 0 3 13 -1. - <_>2 0 1 13 3. - 0 - 1.0354740079492331e-003 - -0.0644933432340622 - 0.0801922902464867 - <_> - - <_> - - - - <_>6 7 12 7 -1. - <_>6 7 6 7 2. - 0 - 0.0399506613612175 - 0.0250730402767658 - -0.1163693964481354 - <_> - - <_> - - - - <_>5 3 6 10 -1. - <_>5 3 3 5 2. - <_>8 8 3 5 2. - 0 - 3.0460350681096315e-003 - -0.0337549410760403 - 0.1332425028085709 - <_> - - <_> - - - - <_>6 9 9 5 -1. - <_>9 9 3 5 3. - 0 - -1.5341850230470300e-003 - 0.0624428614974022 - -0.0560610704123974 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - 2.0531520713120699e-003 - -0.0847900435328484 - 0.0534080490469933 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - 2.1295580081641674e-003 - 0.0406503193080425 - -0.1112471967935562 - <_> - - <_> - - - - <_>4 4 12 8 -1. - <_>4 4 6 4 2. - <_>10 8 6 4 2. - 0 - -0.0154620297253132 - 0.1380697935819626 - -0.0339442081749439 - <_> - - <_> - - - - <_>8 8 10 6 -1. - <_>13 8 5 3 2. - <_>8 11 5 3 2. - 0 - -0.0278782397508621 - -0.1002539992332459 - 0.0134448800235987 - <_> - - <_> - - - - <_>2 8 10 6 -1. - <_>2 8 5 3 2. - <_>7 11 5 3 2. - 0 - 0.0172556806355715 - 0.0153617896139622 - -0.3693079948425293 - <_> - - <_> - - - - <_>9 5 8 14 -1. - <_>13 5 4 7 2. - <_>9 12 4 7 2. - 0 - -0.0178705006837845 - 0.0528707988560200 - -0.0251080095767975 - <_> - - <_> - - - - <_>3 0 3 13 -1. - <_>4 0 1 13 3. - 0 - -0.0144439199939370 - -0.2276381999254227 - 0.0203916095197201 - <_> - - <_> - - - - <_>6 14 9 5 -1. - <_>9 14 3 5 3. - 0 - -8.3497241139411926e-003 - -0.0870558172464371 - 0.0327079407870770 - <_> - - <_> - - - - <_>1 6 4 14 -1. - <_>1 6 2 7 2. - <_>3 13 2 7 2. - 0 - 0.0275143198668957 - -0.0206284094601870 - 0.2597712874412537 - <_> - - <_> - - - - <_>9 6 8 8 -1. - <_>13 6 4 4 2. - <_>9 10 4 4 2. - 0 - 0.0186101198196411 - -8.0523788928985596e-003 - 0.1692509055137634 - <_> - - <_> - - - - <_>0 4 4 8 -1. - <_>2 4 2 8 2. - 0 - -0.0957860499620438 - -0.5011662840843201 - 8.7666641920804977e-003 - <_> - - <_> - - - - <_>9 5 8 14 -1. - <_>13 5 4 7 2. - <_>9 12 4 7 2. - 0 - 0.1203697994351387 - 9.8632962908595800e-004 - -1.0000280141830444 - <_> - - <_> - - - - <_>3 6 8 8 -1. - <_>3 6 4 4 2. - <_>7 10 4 4 2. - 0 - 0.0247825793921947 - -0.0125197097659111 - 0.3591960966587067 - <_> - - <_> - - - - <_>11 3 6 10 -1. - <_>14 3 3 5 2. - <_>11 8 3 5 2. - 0 - -0.0503538288176060 - -0.3334051966667175 - 6.9066900759935379e-003 - <_> - - <_> - - - - <_>3 3 6 10 -1. - <_>3 3 3 5 2. - <_>6 8 3 5 2. - 0 - 0.0312980599701405 - 0.0109631195664406 - -0.4064522087574005 - <_> - - <_> - - - - <_>11 0 8 10 -1. - <_>15 0 4 5 2. - <_>11 5 4 5 2. - 0 - 7.4575231410562992e-003 - -0.0212076008319855 - 0.1316742002964020 - <_> - - <_> - - - - <_>3 13 13 3 -1. - <_>3 14 13 1 3. - 0 - 5.5791479535400867e-003 - -0.0340980701148510 - 0.1298383027315140 - <_> - - <_> - - - - <_>5 14 13 3 -1. - <_>5 15 13 1 3. - 0 - 5.9088319540023804e-003 - -0.0269406698644161 - 0.1683945953845978 - <_> - - <_> - - - - <_>0 4 4 12 -1. - <_>0 8 4 4 3. - 0 - 0.0175433605909348 - 0.0423763692378998 - -0.1235039979219437 - <_> - - <_> - - - - <_>4 8 16 6 -1. - <_>12 8 8 3 2. - <_>4 11 8 3 2. - 0 - -9.6103046089410782e-003 - 0.0522239208221436 - -0.0255825594067574 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 2.0607879851013422e-003 - 0.0401741303503513 - -0.1054807975888252 - <_> - - <_> - - - - <_>12 11 7 6 -1. - <_>12 13 7 2 3. - 0 - -5.3874161094427109e-003 - -0.0649955794215202 - 0.0278071407228708 - <_> - - <_> - - - - <_>2 9 9 7 -1. - <_>5 9 3 7 3. - 0 - 0.1110230982303619 - -4.9670711159706116e-003 - 0.8171892166137695 - <_> - - <_> - - - - <_>5 6 15 9 -1. - <_>5 9 15 3 3. - 0 - -0.0373741500079632 - -0.6261141896247864 - 3.0927599873393774e-003 - <_> - - <_> - - - - <_>0 6 15 9 -1. - <_>0 9 15 3 3. - 0 - 5.0286632031202316e-003 - 0.2497866004705429 - -0.0181511007249355 - <_> - - <_> - - - - <_>6 8 14 2 -1. - <_>6 9 14 1 2. - 0 - 2.9225579928606749e-003 - -0.0605768188834190 - 0.0264973398298025 - <_> - - <_> - - - - <_>3 8 10 3 -1. - <_>8 8 5 3 2. - 0 - -0.0542966201901436 - -0.5799043774604797 - 6.5989522263407707e-003 - <_> - - <_> - - - - <_>11 0 9 5 -1. - <_>14 0 3 5 3. - 0 - 0.0129967201501131 - -0.0261282604187727 - 0.0970306098461151 - <_> - - <_> - - - - <_>2 6 16 2 -1. - <_>10 6 8 2 2. - 0 - 0.0330012291669846 - 0.0149604799225926 - -0.3230465948581696 - <_> - - <_> - - - - <_>5 12 12 8 -1. - <_>5 12 6 8 2. - 0 - -0.1166044995188713 - 0.2572514116764069 - -0.0126258302479982 - <_> - - <_> - - - - <_>0 3 18 3 -1. - <_>0 4 18 1 3. - 0 - 0.0707063376903534 - 7.0192231796681881e-003 - -0.6926059126853943 - <_> - - <_> - - - - <_>3 15 14 4 -1. - <_>10 15 7 2 2. - <_>3 17 7 2 2. - 0 - -0.0445499494671822 - -0.7113422155380249 - 4.9668429419398308e-003 - <_> - - <_> - - - - <_>2 7 16 2 -1. - <_>2 8 16 1 2. - 0 - 0.0428738184273243 - 6.7160711623728275e-003 - -0.5266085267066956 - <_> - - <_> - - - - <_>10 2 7 6 -1. - <_>10 4 7 2 3. - 0 - 0.0250252801924944 - -0.0184454098343849 - 0.0787932202219963 - <_> - - <_> - - - - <_>0 10 19 2 -1. - <_>0 11 19 1 2. - 0 - 2.1663550287485123e-003 - 0.0325403101742268 - -0.1311504989862442 - <_> - - <_> - - - - <_>13 0 7 18 -1. - <_>13 9 7 9 2. - 0 - 0.0255400408059359 - -0.0346935689449310 - 0.0414047986268997 - <_> - - <_> - - - - <_>1 9 9 5 -1. - <_>4 9 3 5 3. - 0 - -0.0836275070905685 - -0.5214344263076782 - 7.7060810290277004e-003 - <_> - - <_> - - - - <_>18 0 2 17 -1. - <_>18 0 1 17 2. - 0 - 3.7637550849467516e-003 - -0.0294636301696301 - 0.0744241923093796 - <_> - - <_> - - - - <_>0 0 2 16 -1. - <_>1 0 1 16 2. - 0 - 3.7175719626247883e-003 - -0.0421230010688305 - 0.1028700992465019 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>10 1 3 5 2. - <_>7 6 3 5 2. - 0 - -5.2892807871103287e-003 - -0.1234839037060738 - 0.0371527001261711 - <_> - - <_> - - - - <_>0 9 12 11 -1. - <_>4 9 4 11 3. - 0 - -9.1878473758697510e-003 - 0.0902567505836487 - -0.0526740513741970 - <_> - - <_> - - - - <_>10 2 4 16 -1. - <_>10 2 2 16 2. - 0 - -0.0554489195346832 - -0.5363965034484863 - 2.6584670413285494e-003 - <_> - - <_> - - - - <_>6 2 4 16 -1. - <_>8 2 2 16 2. - 0 - 6.4754108898341656e-003 - 0.0553673505783081 - -0.0927226319909096 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - -1.5773440245538950e-003 - 0.1357893943786621 - -0.0409117303788662 - <_> - - <_> - - - - <_>7 4 4 12 -1. - <_>9 4 2 12 2. - 0 - -4.9912789836525917e-004 - -0.1472838073968887 - 0.0536036305129528 - <_> - - <_> - - - - <_>7 9 10 9 -1. - <_>7 9 5 9 2. - 0 - 0.1569050997495651 - -7.8873159363865852e-003 - 0.3739778995513916 - <_> - - <_> - - - - <_>0 6 13 3 -1. - <_>0 7 13 1 3. - 0 - 0.0363918505609035 - 4.9765990115702152e-003 - -0.9115753173828125 - <_> - - <_> - - - - <_>10 2 7 6 -1. - <_>10 4 7 2 3. - 0 - -9.5625342801213264e-003 - 0.1276770979166031 - -0.0143946800380945 - <_> - - <_> - - - - <_>4 2 11 6 -1. - <_>4 4 11 2 3. - 0 - 2.4007901083678007e-003 - -0.1310738027095795 - 0.0447314791381359 - <_> - - <_> - - - - <_>9 1 8 4 -1. - <_>9 3 8 2 2. - 0 - 3.2929850276559591e-003 - 0.0404286310076714 - -0.0532235614955425 - <_> - - <_> - - - - <_>5 5 6 10 -1. - <_>5 5 3 5 2. - <_>8 10 3 5 2. - 0 - -3.1314359512180090e-003 - 0.0368261113762856 - -0.1211315989494324 - <_> - - <_> - - - - <_>15 3 3 13 -1. - <_>16 3 1 13 3. - 0 - 0.0520083308219910 - 5.9283021837472916e-003 - -0.4385884106159210 - <_> - - <_> - - - - <_>2 3 3 13 -1. - <_>3 3 1 13 3. - 0 - 5.7681259931996465e-004 - -0.0698517709970474 - 0.0642862915992737 - <_> - - <_> - - - - <_>13 1 3 13 -1. - <_>14 1 1 13 3. - 0 - 6.1443001031875610e-003 - 0.0309080593287945 - -0.1822980940341950 - <_> - - <_> - - - - <_>4 1 10 6 -1. - <_>4 3 10 2 3. - 0 - 0.0359597206115723 - -0.0416809916496277 - 0.1424479037523270 - <_> - - <_> - - - - <_>0 2 20 8 -1. - <_>0 6 20 4 2. - 0 - -0.0212908200919628 - -0.0966623201966286 - 0.0558887496590614 - <_> - - <_> - - - - <_>2 1 13 18 -1. - <_>2 10 13 9 2. - 0 - -6.2724511371925473e-004 - 0.0901505574584007 - -0.0694307535886765 - <_> - - <_> - - - - <_>9 5 3 10 -1. - <_>9 10 3 5 2. - 0 - -2.5145700201392174e-003 - -0.0695260465145111 - 0.0455525815486908 - <_> - - <_> - - - - <_>3 6 12 14 -1. - <_>9 6 6 14 2. - 0 - 0.0578746497631073 - -0.0250365808606148 - 0.2063318043947220 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>8 12 3 6 2. - 0 - 0.0158984698355198 - -0.0171333998441696 - 0.1100495979189873 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>7 9 6 3 3. - 0 - 0.0278827995061874 - 0.0277131795883179 - -0.1653641015291214 - <_> - - <_> - - - - <_>2 14 18 2 -1. - <_>2 14 9 2 2. - 0 - 8.8283112272620201e-003 - -0.0274972505867481 - 0.0598228909075260 - <_> - - <_> - - - - <_>4 1 3 13 -1. - <_>5 1 1 13 3. - 0 - -0.0156799107789993 - -0.2698498964309692 - 0.0163982398808002 - <_> - - <_> - - - - <_>11 6 6 7 -1. - <_>13 6 2 7 3. - 0 - 0.0419061891734600 - -8.0525986850261688e-003 - 0.3155631124973297 - <_> - - <_> - - - - <_>3 6 6 7 -1. - <_>5 6 2 7 3. - 0 - -0.0410686098039150 - 0.2563756108283997 - -0.0183579102158546 - <_> - - <_> - - - - <_>12 0 3 13 -1. - <_>13 0 1 13 3. - 0 - 3.5570110194385052e-003 - 0.0293438304215670 - -0.1266846954822540 - <_> - - <_> - - - - <_>8 6 3 13 -1. - <_>9 6 1 13 3. - 0 - -2.1371750626713037e-003 - 0.1292326003313065 - -0.0401022098958492 - <_> - - <_> - - - - <_>8 8 5 12 -1. - <_>8 12 5 4 3. - 0 - 0.0336380898952484 - 8.1196166574954987e-003 - -0.4039478003978729 - <_> - - <_> - - - - <_>2 4 8 5 -1. - <_>6 4 4 5 2. - 0 - 0.0101829199120402 - -0.0425661802291870 - 0.1184310019016266 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -7.0302112726494670e-004 - 0.0387219786643982 - -0.0797034204006195 - <_> - - <_> - - - - <_>7 4 6 16 -1. - <_>7 4 3 8 2. - <_>10 12 3 8 2. - 0 - -2.8552680741995573e-003 - 0.0912742763757706 - -0.0616914518177509 - <_> - - <_> - - - - <_>12 0 3 13 -1. - <_>13 0 1 13 3. - 0 - -2.9935541097074747e-003 - -0.1091345027089119 - 0.0387369506061077 - <_> - - <_> - - - - <_>3 7 8 4 -1. - <_>3 9 8 2 2. - 0 - -5.3608341841027141e-004 - -0.4325248897075653 - 0.0109582701697946 - <_> - - <_> - - - - <_>4 8 16 6 -1. - <_>12 8 8 3 2. - <_>4 11 8 3 2. - 0 - 0.0514318905770779 - 4.7060111537575722e-003 - -0.2676590085029602 - <_> - - <_> - - - - <_>5 11 9 8 -1. - <_>5 15 9 4 2. - 0 - -0.0488728918135166 - 0.2014472931623459 - -0.0228445194661617 - <_> - - <_> - - - - <_>10 3 6 17 -1. - <_>12 3 2 17 3. - 0 - -0.1608044952154160 - -1. - 1.9577229395508766e-003 - <_> - - <_> - - - - <_>4 3 6 17 -1. - <_>6 3 2 17 3. - 0 - 0.0185099393129349 - 0.0178086608648300 - -0.2787115871906281 - <_> - - <_> - - - - <_>5 6 10 3 -1. - <_>5 6 5 3 2. - 0 - -0.0421069487929344 - -0.6249315738677979 - 7.0520970039069653e-003 - <_> - - <_> - - - - <_>1 16 16 2 -1. - <_>9 16 8 2 2. - 0 - -0.0970967784523964 - -0.8450583815574646 - 4.4749649241566658e-003 - <_> - - <_> - - - - <_>7 1 6 10 -1. - <_>9 1 2 10 3. - 0 - -9.4244757201522589e-004 - 0.1979676038026810 - -0.0227331202477217 - <_> - - <_> - - - - <_>5 0 3 13 -1. - <_>6 0 1 13 3. - 0 - -0.0180408097803593 - -0.3342410922050476 - 0.0133580397814512 - <_> - - <_> - - - - <_>4 9 13 2 -1. - <_>4 10 13 1 2. - 0 - 6.3626631163060665e-004 - -0.1053074970841408 - 0.0440161600708961 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - -3.4530549310147762e-003 - -0.1368706971406937 - 0.0302882809191942 - <_> - - <_> - - - - <_>3 0 14 12 -1. - <_>3 4 14 4 3. - 0 - 0.0175898093730211 - -0.0280312802642584 - 0.1833170056343079 - <_> - - <_> - - - - <_>0 1 10 6 -1. - <_>0 4 10 3 2. - 0 - -1.4289390528574586e-003 - 0.0676161572337151 - -0.0644003599882126 - <_> - - <_> - - - - <_>9 0 11 10 -1. - <_>9 5 11 5 2. - 0 - 0.0145845701918006 - -0.0325488112866879 - 0.0770702213048935 - <_> - - <_> - - - - <_>0 0 20 20 -1. - <_>0 10 20 10 2. - 0 - 0.7457957863807678 - 9.1963959857821465e-003 - -0.4568012058734894 - <_> - - <_> - - - - <_>10 1 10 4 -1. - <_>10 1 5 4 2. - 0 - -0.1228564977645874 - -0.6442360877990723 - 2.0847769919782877e-003 - <_> - - <_> - - - - <_>0 1 10 4 -1. - <_>5 1 5 4 2. - 0 - -0.1161300018429756 - -0.7927427887916565 - 4.9578230828046799e-003 - <_> - - <_> - - - - <_>11 0 8 10 -1. - <_>15 0 4 5 2. - <_>11 5 4 5 2. - 0 - 0.0556448400020599 - -5.7718120515346527e-003 - 0.3083428144454956 - <_> - - <_> - - - - <_>1 0 8 10 -1. - <_>1 0 4 5 2. - <_>5 5 4 5 2. - 0 - 0.0205664299428463 - -0.0154747096821666 - 0.2800293862819672 - <_> - - <_> - - - - <_>6 3 14 4 -1. - <_>13 3 7 2 2. - <_>6 5 7 2 2. - 0 - 3.8393519935198128e-004 - 0.0343902483582497 - -0.1024418994784355 - <_> - - <_> - - - - <_>0 3 20 4 -1. - <_>0 3 10 2 2. - <_>10 5 10 2 2. - 0 - 4.0198508650064468e-003 - 0.0525331385433674 - -0.1149272024631500 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>11 5 2 7 3. - 0 - -0.0741244107484818 - -0.3021646142005920 - 4.2779031209647655e-003 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -3.4346429165452719e-003 - 0.0656274929642677 - -0.0699915885925293 - <_> - - <_> - - - - <_>6 6 8 7 -1. - <_>6 6 4 7 2. - 0 - -4.3740049004554749e-003 - -0.1293483972549439 - 0.0512335188686848 - <_> - - <_> - - - - <_>8 6 4 7 -1. - <_>10 6 2 7 2. - 0 - 6.9464151747524738e-003 - -0.0325918495655060 - 0.1509806066751480 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 0 2 7 3. - 0 - -0.0184341706335545 - -0.3136422038078308 - 9.5867328345775604e-003 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -3.2201830763369799e-003 - -0.1749431937932968 - 0.0335790589451790 - <_> - - <_> - - - - <_>4 0 12 16 -1. - <_>8 0 4 16 3. - 0 - -0.0322732999920845 - 0.2413620054721832 - -0.0243920106440783 - <_> - - <_> - - - - <_>5 6 4 8 -1. - <_>7 6 2 8 2. - 0 - -4.8193791881203651e-003 - -0.1361021995544434 - 0.0411566607654095 - <_> - - <_> - - - - <_>7 12 11 8 -1. - <_>7 16 11 4 2. - 0 - -0.0983476266264915 - -0.5332471728324890 - 8.8729923591017723e-003 - <_> - - <_> - - - - <_>6 0 6 12 -1. - <_>6 0 3 6 2. - <_>9 6 3 6 2. - 0 - 0.0190546195954084 - -0.0325642712414265 - 0.1672970950603485 - <_> - - <_> - - - - <_>4 3 12 12 -1. - <_>10 3 6 6 2. - <_>4 9 6 6 2. - 0 - -0.0817961692810059 - -0.6413124203681946 - 8.7052602320909500e-003 - <_> - - <_> - - - - <_>2 10 6 7 -1. - <_>4 10 2 7 3. - 0 - 3.2996949739754200e-003 - -0.0597654394805431 - 0.0718798562884331 - <_> - - <_> - - - - <_>15 10 4 7 -1. - <_>15 10 2 7 2. - 0 - -0.0759776607155800 - -0.5041542053222656 - 5.6795510463416576e-003 - <_> - - <_> - - - - <_>1 10 4 7 -1. - <_>3 10 2 7 2. - 0 - 0.0305087603628635 - 0.0103173600509763 - -0.4355288147926331 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -0.0376429595053196 - 0.3732442855834961 - -0.0172762293368578 - <_> - - <_> - - - - <_>3 2 13 2 -1. - <_>3 3 13 1 2. - 0 - -9.9801109172403812e-004 - -0.1450877040624619 - 0.0309737008064985 - <_> - - <_> - - - - <_>4 3 14 3 -1. - <_>4 4 14 1 3. - 0 - -2.0703389309346676e-003 - 0.1228592023253441 - -0.0252858996391296 - <_> - - <_> - - - - <_>1 0 7 6 -1. - <_>1 2 7 2 3. - 0 - 0.0718163773417473 - 7.2997398674488068e-003 - -0.6262109279632568 - <_> - - <_> - - - - <_>6 5 13 9 -1. - <_>6 8 13 3 3. - 0 - 0.1678192019462585 - -0.0100940698757768 - 0.2253118008375168 - <_> - - <_> - - - - <_>0 8 16 6 -1. - <_>0 8 8 3 2. - <_>8 11 8 3 2. - 0 - 1.5028619964141399e-004 - -0.0490138381719589 - 0.0956356376409531 - <_> - - <_> - - - - <_>15 1 5 12 -1. - <_>15 5 5 4 3. - 0 - 0.0951396375894547 - -2.3964960128068924e-003 - 0.7897282242774963 - <_> - - <_> - - - - <_>0 1 5 12 -1. - <_>0 5 5 4 3. - 0 - 3.8569360040128231e-003 - 0.0408524312078953 - -0.1197697967290878 - <_> - - <_> - - - - <_>5 14 14 3 -1. - <_>5 15 14 1 3. - 0 - 0.0231727603822947 - -8.1755416467785835e-003 - 0.3489589989185333 - <_> - - <_> - - - - <_>2 10 6 9 -1. - <_>4 10 2 9 3. - 0 - 0.0134179899469018 - 0.0293577294796705 - -0.1447695046663284 - <_> - - <_> - - - - <_>11 13 9 7 -1. - <_>14 13 3 7 3. - 0 - -0.1416577994823456 - 0.3496044874191284 - -3.9633908309042454e-003 - <_> - - <_> - - - - <_>0 15 9 5 -1. - <_>3 15 3 5 3. - 0 - 5.5483141914010048e-003 - -0.0467367693781853 - 0.0876308232545853 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - -4.7431029379367828e-003 - 0.0628996789455414 - -0.0269835907965899 - <_> - - <_> - - - - <_>0 11 19 3 -1. - <_>0 12 19 1 3. - 0 - -0.0668627768754959 - -0.9527286887168884 - 3.9776111952960491e-003 - <_> - - <_> - - - - <_>6 15 14 4 -1. - <_>13 15 7 2 2. - <_>6 17 7 2 2. - 0 - 0.0229878406971693 - -0.0178028997033834 - 0.1456494927406311 - <_> - - <_> - - - - <_>0 5 12 6 -1. - <_>0 7 12 2 3. - 0 - -0.0222342796623707 - -0.0933604463934898 - 0.0515370704233646 - <_> - - <_> - - - - <_>16 9 4 11 -1. - <_>16 9 2 11 2. - 0 - 1.5045719919726253e-005 - -0.0302377492189407 - 0.0266546700149775 - <_> - - <_> - - - - <_>0 9 4 11 -1. - <_>2 9 2 11 2. - 0 - -4.7994707711040974e-003 - 0.1010553017258644 - -0.0500839911401272 - <_> - - <_> - - - - <_>2 11 18 5 -1. - <_>8 11 6 5 3. - 0 - -0.2422790974378586 - -0.6839948296546936 - 2.1470880601555109e-003 - <_> - - <_> - - - - <_>1 15 14 4 -1. - <_>1 15 7 2 2. - <_>8 17 7 2 2. - 0 - 0.0469397902488709 - 8.1193735823035240e-003 - -0.4767181873321533 - <_> - - <_> - - - - <_>12 10 7 9 -1. - <_>12 13 7 3 3. - 0 - -0.0609402805566788 - 0.2382732927799225 - -9.5430584624409676e-003 - <_> - - <_> - - - - <_>1 10 7 9 -1. - <_>1 13 7 3 3. - 0 - 0.0241047404706478 - -0.0157990790903568 - 0.2672789990901947 - <_> - - <_> - - - - <_>11 7 8 8 -1. - <_>15 7 4 4 2. - <_>11 11 4 4 2. - 0 - -0.0465675704181194 - -0.3101777136325836 - 8.3353007212281227e-003 - <_> - - <_> - - - - <_>6 14 8 4 -1. - <_>6 16 8 2 2. - 0 - 1.8709240248426795e-003 - -0.0725880712270737 - 0.0656082704663277 - <_> - - <_> - - - - <_>11 1 2 19 -1. - <_>11 1 1 19 2. - 0 - -5.9872400015592575e-003 - -0.1815969049930573 - 0.0140300299972296 - <_> - - <_> - - - - <_>6 10 3 10 -1. - <_>6 15 3 5 2. - 0 - -7.3103660724882502e-006 - 0.0409137904644012 - -0.1065644025802612 - <_> - - <_> - - - - <_>11 9 6 5 -1. - <_>11 9 3 5 2. - 0 - -0.0232445504516363 - -0.1903554052114487 - 0.0159660596400499 - <_> - - <_> - - - - <_>3 9 6 5 -1. - <_>6 9 3 5 2. - 0 - -1.1853489559143782e-003 - 0.0599567107856274 - -0.0766784474253654 - <_> - - <_> - - - - <_>4 12 15 4 -1. - <_>9 12 5 4 3. - 0 - -0.1298182010650635 - 0.4099949896335602 - -5.0850748084485531e-003 - <_> - - <_> - - - - <_>0 5 16 2 -1. - <_>8 5 8 2 2. - 0 - -0.0515126697719097 - -0.3052723109722138 - 0.0141863403841853 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - -3.9303461089730263e-003 - -0.0797634795308113 - 0.0262488909065723 - <_> - - <_> - - - - <_>3 5 8 14 -1. - <_>3 5 4 7 2. - <_>7 12 4 7 2. - 0 - 0.0158228296786547 - -0.0168493092060089 - 0.2754979133605957 - <_> - - <_> - - - - <_>12 2 7 15 -1. - <_>12 7 7 5 3. - 0 - 0.1156157031655312 - 6.7870649509131908e-003 - -0.1270931959152222 - <_> - - <_> - - - - <_>1 2 7 15 -1. - <_>1 7 7 5 3. - 0 - 1.1260829633101821e-003 - 0.0819085165858269 - -0.0581940487027168 - <_> - - <_> - - - - <_>13 0 6 12 -1. - <_>13 6 6 6 2. - 0 - 0.0155134303495288 - -0.0429897196590900 - 0.0783642977476120 - <_> - - <_> - - - - <_>6 0 8 10 -1. - <_>6 0 4 5 2. - <_>10 5 4 5 2. - 0 - 0.0462687313556671 - 0.0117595503106713 - -0.3994733095169067 - <_> - - <_> - - - - <_>11 0 2 19 -1. - <_>11 0 1 19 2. - 0 - 7.9535972326993942e-003 - 0.0168485399335623 - -0.0885990783572197 - <_> - - <_> - - - - <_>4 12 8 8 -1. - <_>4 12 4 4 2. - <_>8 16 4 4 2. - 0 - -0.0189912207424641 - 0.2481326013803482 - -0.0173208508640528 - <_> - - <_> - - - - <_>4 12 15 4 -1. - <_>9 12 5 4 3. - 0 - 3.7058200687170029e-003 - -0.0217470303177834 - 0.0582760907709599 - <_> - - <_> - - - - <_>7 0 2 19 -1. - <_>8 0 1 19 2. - 0 - 2.5829279329627752e-003 - 0.0505592785775661 - -0.0931939184665680 - <_> - - <_> - - - - <_>8 4 6 9 -1. - <_>10 4 2 9 3. - 0 - -0.0310105606913567 - 0.2211043983697891 - -0.0147864995524287 - <_> - - <_> - - - - <_>5 5 8 4 -1. - <_>9 5 4 4 2. - 0 - 2.5402549654245377e-003 - -0.0867436006665230 - 0.0579324103891850 - <_> - - <_> - - - - <_>4 12 15 4 -1. - <_>9 12 5 4 3. - 0 - -8.9100487530231476e-003 - 0.0538460798561573 - -0.0459319092333317 - <_> - - <_> - - - - <_>2 6 4 12 -1. - <_>2 12 4 6 2. - 0 - 4.0557151660323143e-003 - 0.0592983998358250 - -0.0830072537064552 - <_> - - <_> - - - - <_>6 7 12 6 -1. - <_>10 7 4 6 3. - 0 - 0.0612049400806427 - 9.2248879373073578e-003 - -0.2108236998319626 - <_> - - <_> - - - - <_>3 5 12 4 -1. - <_>7 5 4 4 3. - 0 - 7.7630057930946350e-003 - -0.0759270563721657 - 0.0578657090663910 - <_> - - <_> - - - - <_>8 14 12 4 -1. - <_>8 14 6 4 2. - 0 - 0.1592115014791489 - 8.3040859317407012e-004 - -1.0000480413436890 - <_> - - <_> - - - - <_>0 14 12 4 -1. - <_>6 14 6 4 2. - 0 - 0.0391961894929409 - 7.1930838748812675e-003 - -0.6033862233161926 - <_> - - <_> - - - - <_>4 12 15 4 -1. - <_>9 12 5 4 3. - 0 - 0.1022028997540474 - -3.6227719392627478e-003 - 0.5450075268745422 - <_> - - <_> - - - - <_>1 12 15 4 -1. - <_>6 12 5 4 3. - 0 - -0.1506498008966446 - -0.7045075893402100 - 6.6995541565120220e-003 - <_> - - <_> - - - - <_>6 0 12 18 -1. - <_>10 0 4 18 3. - 0 - 0.1381929963827133 - -0.0111538600176573 - 0.1793290972709656 - <_> - - <_> - - - - <_>0 6 14 4 -1. - <_>0 6 7 2 2. - <_>7 8 7 2 2. - 0 - -3.8313010009005666e-004 - -0.0724423527717590 - 0.0579259805381298 - <_> - - <_> - - - - <_>13 13 7 6 -1. - <_>13 15 7 2 3. - 0 - -2.7796919457614422e-003 - -0.0862803980708122 - 0.0410146005451679 - <_> - - <_> - - - - <_>0 0 6 18 -1. - <_>0 9 6 9 2. - 0 - 0.0393651388585567 - -0.0466293208301067 - 0.0881240069866180 - <_> - - <_> - - - - <_>6 8 14 4 -1. - <_>13 8 7 2 2. - <_>6 10 7 2 2. - 0 - -0.0619338192045689 - 0.7011855244636536 - -2.5661089457571507e-003 - <_> - - <_> - - - - <_>0 8 14 4 -1. - <_>0 8 7 2 2. - <_>7 10 7 2 2. - 0 - -5.9742941521108150e-003 - -0.1651901006698608 - 0.0379470214247704 - <_> - - <_> - - - - <_>3 2 14 10 -1. - <_>3 7 14 5 2. - 0 - 7.5101079419255257e-003 - 0.0541914887726307 - -0.0791666582226753 - <_> - - <_> - - - - <_>3 5 6 7 -1. - <_>5 5 2 7 3. - 0 - -0.0970056727528572 - -0.8810477256774902 - 4.8486101441085339e-003 - <_> - - <_> - - - - <_>4 4 14 6 -1. - <_>11 4 7 3 2. - <_>4 7 7 3 2. - 0 - -6.7751510068774223e-003 - 0.0916011631488800 - -0.0489427708089352 - <_> - - <_> - - - - <_>6 2 4 10 -1. - <_>6 7 4 5 2. - 0 - -9.2599419876933098e-003 - -0.1329811960458756 - 0.0417855009436607 - <_> - - <_> - - - - <_>11 1 3 18 -1. - <_>11 7 3 6 3. - 0 - 1.5215040184557438e-003 - 0.0526335909962654 - -0.0606244392693043 - <_> - - <_> - - - - <_>3 1 3 15 -1. - <_>3 6 3 5 3. - 0 - 5.4703168570995331e-003 - -0.0478251799941063 - 0.1119457036256790 - <_> - - <_> - - - - <_>7 0 8 6 -1. - <_>7 0 4 6 2. - 0 - 0.0250021107494831 - -0.0203549694269896 - 0.1017559021711350 - <_> - - <_> - - - - <_>2 0 9 15 -1. - <_>2 5 9 5 3. - 0 - 0.0325767807662487 - 0.0256296601146460 - -0.1948419064283371 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>8 0 6 3 3. - 0 - -7.7732130885124207e-003 - 0.1247740015387535 - -0.0346679985523224 - <_> - - <_> - - - - <_>2 8 12 8 -1. - <_>6 8 4 8 3. - 0 - 0.0177771896123886 - 0.0332618206739426 - -0.1415522992610931 - <_> - - <_> - - - - <_>5 8 15 12 -1. - <_>10 8 5 12 3. - 0 - 0.0104594295844436 - -0.0440398789942265 - 0.0618715584278107 - -1.1210759878158569 - 44 - -1 - <_> - - - <_> - - <_> - - - - <_>0 1 18 3 -1. - <_>6 1 6 3 3. - 0 - 0.0187511891126633 - -0.1777507960796356 - 0.1715743988752365 - <_> - - <_> - - - - <_>9 5 2 14 -1. - <_>9 12 2 7 2. - 0 - -2.1875950042158365e-003 - 0.0753391534090042 - -0.2584212124347687 - <_> - - <_> - - - - <_>5 4 10 6 -1. - <_>5 6 10 2 3. - 0 - -0.1169869005680084 - 0.4264537096023560 - -0.0371216982603073 - <_> - - <_> - - - - <_>9 10 7 6 -1. - <_>9 12 7 2 3. - 0 - 3.8377330638468266e-003 - 0.0350924395024776 - -0.1575728952884674 - <_> - - <_> - - - - <_>3 7 12 4 -1. - <_>7 7 4 4 3. - 0 - -1.2941210297867656e-003 - -0.2006873041391373 - 0.0557048097252846 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - 4.3927300721406937e-003 - 0.0574970990419388 - -0.1930274069309235 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - -1.5021540457382798e-003 - 0.0723789781332016 - -0.1453491002321243 - <_> - - <_> - - - - <_>5 17 15 3 -1. - <_>5 18 15 1 3. - 0 - 1.2381949927657843e-003 - -0.0904137790203094 - 0.0828387886285782 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>5 11 5 3 2. - <_>10 14 5 3 2. - 0 - 3.0004729051142931e-003 - 0.0601994097232819 - -0.1555617004632950 - <_> - - <_> - - - - <_>4 4 13 3 -1. - <_>4 5 13 1 3. - 0 - 4.5666601508855820e-003 - -0.0769366398453712 - 0.1376277059316635 - <_> - - <_> - - - - <_>5 11 5 9 -1. - <_>5 14 5 3 3. - 0 - 9.9231943022459745e-004 - 0.0479182116687298 - -0.2047235965728760 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - -3.8909649010747671e-003 - -0.2106703966856003 - 0.0592971891164780 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - 2.4324860423803329e-003 - -0.0736118704080582 - 0.1416556984186173 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - -3.3090400975197554e-003 - -0.1648906022310257 - 0.0433108918368816 - <_> - - <_> - - - - <_>2 6 6 9 -1. - <_>2 9 6 3 3. - 0 - 5.9596560895442963e-003 - -0.2138839960098267 - 0.0434729084372520 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - 9.7754271700978279e-003 - 0.0276642907410860 - -0.1911989003419876 - <_> - - <_> - - - - <_>1 3 4 14 -1. - <_>1 3 2 7 2. - <_>3 10 2 7 2. - 0 - -0.0381243005394936 - 0.3165884017944336 - -0.0299726799130440 - <_> - - <_> - - - - <_>13 4 3 12 -1. - <_>13 10 3 6 2. - 0 - 1.4401610242202878e-003 - -0.1660213023424149 - 0.0613009110093117 - <_> - - <_> - - - - <_>7 7 6 13 -1. - <_>9 7 2 13 3. - 0 - 7.5199408456683159e-004 - -0.1356851011514664 - 0.0573457702994347 - <_> - - <_> - - - - <_>7 0 9 5 -1. - <_>10 0 3 5 3. - 0 - 2.4780649691820145e-003 - -0.0772587582468987 - 0.0537812002003193 - <_> - - <_> - - - - <_>5 0 9 5 -1. - <_>8 0 3 5 3. - 0 - 9.2068109661340714e-003 - 0.0743493512272835 - -0.1388649940490723 - <_> - - <_> - - - - <_>9 5 2 13 -1. - <_>9 5 1 13 2. - 0 - 0.0176345407962799 - -0.0268171597272158 - 0.3491244912147522 - <_> - - <_> - - - - <_>7 3 3 12 -1. - <_>7 9 3 6 2. - 0 - 1.0517879854887724e-003 - 0.0834444835782051 - -0.0832714363932610 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>8 1 6 3 3. - 0 - -7.2119189426302910e-003 - 0.1414905041456223 - -0.0308531895279884 - <_> - - <_> - - - - <_>4 3 12 16 -1. - <_>4 3 6 8 2. - <_>10 11 6 8 2. - 0 - 8.1929508596658707e-003 - 0.0642498284578323 - -0.1422446072101593 - <_> - - <_> - - - - <_>14 0 3 13 -1. - <_>15 0 1 13 3. - 0 - -5.7932751951739192e-004 - -0.0617689304053783 - 0.0348352305591106 - <_> - - <_> - - - - <_>3 3 14 3 -1. - <_>3 4 14 1 3. - 0 - 4.5172017998993397e-003 - -0.0739256665110588 - 0.0953478664159775 - <_> - - <_> - - - - <_>0 13 20 7 -1. - <_>0 13 10 7 2. - 0 - 0.2228025048971176 - 0.0280794501304626 - -0.2617459893226624 - <_> - - <_> - - - - <_>3 0 3 13 -1. - <_>4 0 1 13 3. - 0 - -8.1560667604207993e-004 - -0.1112871021032333 - 0.0617512613534927 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 6 2. - 0 - 0.0190092604607344 - -0.0359148494899273 - 0.0953326970338821 - <_> - - <_> - - - - <_>4 2 2 14 -1. - <_>4 9 2 7 2. - 0 - -1.1708099627867341e-003 - -0.1780942976474762 - 0.0384717583656311 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>16 1 2 12 3. - 0 - -0.0274928398430347 - 0.1567419022321701 - -0.0363074503839016 - <_> - - <_> - - - - <_>0 6 14 4 -1. - <_>0 6 7 2 2. - <_>7 8 7 2 2. - 0 - -5.4139150306582451e-003 - -0.1601458042860031 - 0.0452282987535000 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>16 1 2 12 3. - 0 - 0.0113256704062223 - -0.0526791289448738 - 0.1241158023476601 - <_> - - <_> - - - - <_>0 4 20 6 -1. - <_>0 6 20 2 3. - 0 - -0.1391907930374146 - -0.2857300937175751 - 0.0256421808153391 - <_> - - <_> - - - - <_>14 1 6 12 -1. - <_>16 1 2 12 3. - 0 - -0.0761838108301163 - 0.2039088010787964 - -0.0127019397914410 - <_> - - <_> - - - - <_>0 8 15 3 -1. - <_>0 9 15 1 3. - 0 - 1.3947900151833892e-003 - -0.1132052987813950 - 0.0574193000793457 - <_> - - <_> - - - - <_>2 1 16 6 -1. - <_>10 1 8 3 2. - <_>2 4 8 3 2. - 0 - 4.6532237902283669e-003 - 0.0577959902584553 - -0.1099701002240181 - <_> - - <_> - - - - <_>0 1 6 12 -1. - <_>2 1 2 12 3. - 0 - 0.0450343899428844 - -0.0287619791924953 - 0.2260572016239166 - <_> - - <_> - - - - <_>9 2 9 5 -1. - <_>12 2 3 5 3. - 0 - 0.0168640092015266 - 0.0363180898129940 - -0.2016277015209198 - <_> - - <_> - - - - <_>1 1 18 4 -1. - <_>7 1 6 4 3. - 0 - 0.1925127953290939 - -0.0138699896633625 - 0.5422633886337280 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - -1.6758369747549295e-003 - -0.1146278977394104 - 0.0499848499894142 - <_> - - <_> - - - - <_>0 0 4 7 -1. - <_>2 0 2 7 2. - 0 - -4.5270361006259918e-003 - 0.1173190996050835 - -0.0613847002387047 - <_> - - <_> - - - - <_>13 0 3 13 -1. - <_>14 0 1 13 3. - 0 - 5.4975082166492939e-003 - 0.0321948304772377 - -0.1534854024648666 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>3 0 3 6 3. - 0 - 3.5562040284276009e-003 - -0.0639379397034645 - 0.1078746989369392 - <_> - - <_> - - - - <_>10 1 6 5 -1. - <_>10 1 3 5 2. - 0 - 2.1489830687642097e-003 - -0.0509767383337021 - 0.0293150003999472 - <_> - - <_> - - - - <_>6 6 6 7 -1. - <_>8 6 2 7 3. - 0 - -0.0104642100632191 - 0.1954874992370606 - -0.0327844098210335 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0297797191888094 - -0.3928653895854950 - 0.0122666200622916 - <_> - - <_> - - - - <_>5 2 4 7 -1. - <_>7 2 2 7 2. - 0 - 9.6993939951062202e-004 - -0.1077279970049858 - 0.0616842508316040 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -0.0404990985989571 - -0.3669664859771729 - 0.0118055399507284 - <_> - - <_> - - - - <_>4 0 3 13 -1. - <_>5 0 1 13 3. - 0 - -2.3762779310345650e-003 - -0.1393374055624008 - 0.0500101707875729 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>8 1 6 3 3. - 0 - -5.1528858020901680e-003 - 0.0974240005016327 - -0.0238206908106804 - <_> - - <_> - - - - <_>6 5 4 14 -1. - <_>6 5 2 7 2. - <_>8 12 2 7 2. - 0 - -0.0287269800901413 - 0.2103171944618225 - -0.0360882692039013 - <_> - - <_> - - - - <_>1 5 19 4 -1. - <_>1 7 19 2 2. - 0 - 0.0142153501510620 - 0.0346641317009926 - -0.1581434011459351 - <_> - - <_> - - - - <_>0 11 7 6 -1. - <_>0 13 7 2 3. - 0 - 2.0164670422673225e-003 - 0.0504870712757111 - -0.1270419955253601 - <_> - - <_> - - - - <_>6 12 13 2 -1. - <_>6 13 13 1 2. - 0 - 4.1724709444679320e-004 - -0.0566351898014545 - 0.1078914031386375 - <_> - - <_> - - - - <_>3 0 12 10 -1. - <_>3 0 6 5 2. - <_>9 5 6 5 2. - 0 - 7.3380130343139172e-003 - 0.0508917197585106 - -0.1221043989062309 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>8 1 6 3 3. - 0 - -0.0759307667613029 - 0.2262721061706543 - -6.6569480113685131e-003 - <_> - - <_> - - - - <_>0 15 18 3 -1. - <_>9 15 9 3 2. - 0 - -4.2873369529843330e-003 - 0.0721042901277542 - -0.0801061391830444 - <_> - - <_> - - - - <_>6 14 14 6 -1. - <_>6 14 7 6 2. - 0 - -0.0241016708314419 - 0.0913553014397621 - -0.0345919691026211 - <_> - - <_> - - - - <_>0 14 14 6 -1. - <_>7 14 7 6 2. - 0 - 0.0199365504086018 - -0.0377642400562763 - 0.1889691948890686 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.5693989992141724 - 3.1492649577558041e-003 - -0.5984647274017334 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - 0.1035206019878388 - 0.0233232006430626 - -0.3212923109531403 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - 0.0595569908618927 - 4.2170342057943344e-003 - -0.3344213962554932 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -0.0505755394697189 - -0.8479322791099548 - 6.6583030857145786e-003 - <_> - - <_> - - - - <_>11 0 6 7 -1. - <_>13 0 2 7 3. - 0 - -5.5158971808850765e-003 - -0.0705074965953827 - 0.0217167697846890 - <_> - - <_> - - - - <_>1 8 15 4 -1. - <_>6 8 5 4 3. - 0 - 0.0294193103909492 - -0.0363194085657597 - 0.1751094013452530 - <_> - - <_> - - - - <_>13 12 7 6 -1. - <_>13 14 7 2 3. - 0 - 0.0109724402427673 - 0.0182671993970871 - -0.1864134073257446 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -3.8842339999973774e-003 - -0.1073592007160187 - 0.0608490407466888 - <_> - - <_> - - - - <_>12 12 7 4 -1. - <_>12 14 7 2 2. - 0 - -1.1936859664274380e-004 - 0.0523486211895943 - -0.1270153969526291 - <_> - - <_> - - - - <_>1 2 8 8 -1. - <_>1 2 4 4 2. - <_>5 6 4 4 2. - 0 - -5.0230980850756168e-003 - 0.0526827201247215 - -0.1270367950201035 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>8 1 6 3 3. - 0 - 0.1898681968450546 - 1.7255579587072134e-003 - -0.3270105123519898 - <_> - - <_> - - - - <_>0 1 18 3 -1. - <_>6 1 6 3 3. - 0 - -2.4319409858435392e-003 - 0.1387514024972916 - -0.0430466011166573 - <_> - - <_> - - - - <_>8 0 12 6 -1. - <_>8 2 12 2 3. - 0 - -2.0888550207018852e-003 - -0.1124100983142853 - 0.0376768596470356 - <_> - - <_> - - - - <_>5 3 4 7 -1. - <_>7 3 2 7 2. - 0 - 0.0421163104474545 - 8.1929191946983337e-003 - -0.6854190826416016 - <_> - - <_> - - - - <_>3 16 16 2 -1. - <_>3 17 16 1 2. - 0 - 0.0273801106959581 - 4.4103930704295635e-003 - -0.5342184901237488 - <_> - - <_> - - - - <_>3 0 13 6 -1. - <_>3 3 13 3 2. - 0 - 0.0213485695421696 - -0.0511603802442551 - 0.1002148017287254 - <_> - - <_> - - - - <_>4 0 13 3 -1. - <_>4 1 13 1 3. - 0 - -0.0172368697822094 - -0.3999573886394501 - 0.0202574897557497 - <_> - - <_> - - - - <_>1 1 5 12 -1. - <_>1 5 5 4 3. - 0 - 7.8617185354232788e-003 - 0.0289962794631720 - -0.1801407039165497 - <_> - - <_> - - - - <_>6 10 13 3 -1. - <_>6 11 13 1 3. - 0 - 8.1942398101091385e-003 - -0.0254980307072401 - 0.0846939310431480 - <_> - - <_> - - - - <_>1 11 7 4 -1. - <_>1 13 7 2 2. - 0 - 6.2367911450564861e-003 - 0.0186592601239681 - -0.2644366025924683 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>9 0 2 8 3. - 0 - 2.1872919751331210e-004 - -0.1594302952289581 - 0.0307226497679949 - <_> - - <_> - - - - <_>7 5 6 8 -1. - <_>9 5 2 8 3. - 0 - -6.4004249870777130e-003 - 0.2833105027675629 - -0.0193524900823832 - <_> - - <_> - - - - <_>14 12 6 8 -1. - <_>16 12 2 8 3. - 0 - -0.1000719964504242 - -0.4070405066013336 - 6.1583020724356174e-003 - <_> - - <_> - - - - <_>3 5 13 3 -1. - <_>3 6 13 1 3. - 0 - 0.0156901497393847 - -0.0167723391205072 - 0.2904956936836243 - <_> - - <_> - - - - <_>9 2 9 5 -1. - <_>12 2 3 5 3. - 0 - -7.0421490818262100e-003 - -0.0679851770401001 - 0.0311303697526455 - <_> - - <_> - - - - <_>5 15 7 4 -1. - <_>5 17 7 2 2. - 0 - -0.0153200300410390 - 0.3640008866786957 - -0.0136086996644735 - <_> - - <_> - - - - <_>11 14 7 6 -1. - <_>11 16 7 2 3. - 0 - 0.0584856607019901 - 7.4363988824188709e-003 - -0.7559933066368103 - <_> - - <_> - - - - <_>2 14 7 6 -1. - <_>2 16 7 2 3. - 0 - -3.5200670827180147e-003 - -0.1392329037189484 - 0.0376575514674187 - <_> - - <_> - - - - <_>10 13 9 4 -1. - <_>10 15 9 2 2. - 0 - -8.7158178212121129e-004 - 0.0423398390412331 - -0.0535304583609104 - <_> - - <_> - - - - <_>2 14 13 3 -1. - <_>2 15 13 1 3. - 0 - 2.4548629298806190e-003 - -0.0446670502424240 - 0.1378507018089294 - <_> - - <_> - - - - <_>10 13 10 6 -1. - <_>10 15 10 2 3. - 0 - -0.0617789290845394 - -0.3533807992935181 - 4.5869671739637852e-003 - <_> - - <_> - - - - <_>0 13 10 6 -1. - <_>0 15 10 2 3. - 0 - -3.8533521001227200e-004 - 0.0722780078649521 - -0.1043329983949661 - <_> - - <_> - - - - <_>2 8 16 8 -1. - <_>10 8 8 4 2. - <_>2 12 8 4 2. - 0 - 0.0762277171015739 - -0.0110045503824949 - 0.5002518892288208 - <_> - - <_> - - - - <_>2 0 9 7 -1. - <_>5 0 3 7 3. - 0 - -4.4210380874574184e-003 - -0.0862904265522957 - 0.0587734207510948 - <_> - - <_> - - - - <_>7 6 6 7 -1. - <_>9 6 2 7 3. - 0 - 0.0150682702660561 - -0.0589162707328796 - 0.1002511978149414 - <_> - - <_> - - - - <_>1 7 10 9 -1. - <_>1 10 10 3 3. - 0 - 0.0250079408288002 - 0.0762514770030975 - -0.0887449607253075 - <_> - - <_> - - - - <_>5 3 11 6 -1. - <_>5 5 11 2 3. - 0 - -0.0773281231522560 - 0.2536340057849884 - -0.0157785303890705 - <_> - - <_> - - - - <_>0 7 2 13 -1. - <_>1 7 1 13 2. - 0 - 3.5588641185313463e-004 - 0.0629836991429329 - -0.0771819874644279 - <_> - - <_> - - - - <_>14 1 6 11 -1. - <_>16 1 2 11 3. - 0 - 0.0694005265831947 - -8.9571140706539154e-003 - 0.1510262936353684 - <_> - - <_> - - - - <_>0 6 6 14 -1. - <_>2 6 2 14 3. - 0 - -0.1857770979404450 - -0.6951835155487061 - 7.8398203477263451e-003 - <_> - - <_> - - - - <_>7 8 8 12 -1. - <_>11 8 4 6 2. - <_>7 14 4 6 2. - 0 - -6.6014728508889675e-003 - -0.0560566410422325 - 0.0245579201728106 - <_> - - <_> - - - - <_>2 10 16 8 -1. - <_>2 10 8 4 2. - <_>10 14 8 4 2. - 0 - 0.0404903106391430 - -0.0202025994658470 - 0.2773627042770386 - <_> - - <_> - - - - <_>11 6 7 8 -1. - <_>11 10 7 4 2. - 0 - 1.6997240018099546e-003 - -0.1140346005558968 - 0.0192226804792881 - <_> - - <_> - - - - <_>2 6 7 8 -1. - <_>2 10 7 4 2. - 0 - 0.0847500413656235 - 0.0186075102537870 - -0.3050543069839478 - <_> - - <_> - - - - <_>15 6 4 14 -1. - <_>17 6 2 7 2. - <_>15 13 2 7 2. - 0 - -0.0169758796691895 - 0.1235710978507996 - -0.0290166605263948 - <_> - - <_> - - - - <_>1 6 4 14 -1. - <_>1 6 2 7 2. - <_>3 13 2 7 2. - 0 - 4.6773189678788185e-003 - -0.0458647608757019 - 0.1171884015202522 - <_> - - <_> - - - - <_>15 7 4 8 -1. - <_>15 11 4 4 2. - 0 - -0.0140660200268030 - -0.1367049068212509 - 0.0173626299947500 - <_> - - <_> - - - - <_>4 0 8 8 -1. - <_>4 0 4 4 2. - <_>8 4 4 4 2. - 0 - 0.0509446896612644 - 0.0138656403869390 - -0.3952904045581818 - <_> - - <_> - - - - <_>7 0 7 6 -1. - <_>7 3 7 3 2. - 0 - 0.0982657968997955 - -0.0123391998931766 - 0.3640823960304260 - <_> - - <_> - - - - <_>3 2 14 3 -1. - <_>3 3 14 1 3. - 0 - 1.1730480473488569e-003 - 0.0664005130529404 - -0.0820910930633545 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>10 2 10 2 3. - 0 - 0.1097903996706009 - 4.6397978439927101e-003 - -0.6134455800056458 - <_> - - <_> - - - - <_>0 0 10 6 -1. - <_>0 2 10 2 3. - 0 - 4.9452850362285972e-004 - -0.1006267964839935 - 0.0571919903159142 - <_> - - <_> - - - - <_>0 3 20 14 -1. - <_>0 10 20 7 2. - 0 - 0.3567355871200562 - -0.0144829899072647 - 0.3927611112594605 - <_> - - <_> - - - - <_>0 0 4 12 -1. - <_>2 0 2 12 2. - 0 - 8.7493062019348145e-003 - -0.0485512204468250 - 0.1046025007963181 - <_> - - <_> - - - - <_>8 3 12 6 -1. - <_>12 3 4 6 3. - 0 - 0.0224633496254683 - 0.0223960001021624 - -0.1358785033226013 - <_> - - <_> - - - - <_>0 3 12 6 -1. - <_>4 3 4 6 3. - 0 - 0.0185387600213289 - 0.0300294794142246 - -0.2086187005043030 - <_> - - <_> - - - - <_>14 3 4 8 -1. - <_>14 3 2 8 2. - 0 - 0.0342362597584724 - -0.0106440801173449 - 0.1667549014091492 - <_> - - <_> - - - - <_>2 3 4 8 -1. - <_>4 3 2 8 2. - 0 - 0.0409004800021648 - -0.0120569700375199 - 0.4377332031726837 - <_> - - <_> - - - - <_>13 6 6 10 -1. - <_>16 6 3 5 2. - <_>13 11 3 5 2. - 0 - 0.1051257997751236 - -9.4033451750874519e-004 - 0.7806162238121033 - <_> - - <_> - - - - <_>1 6 6 10 -1. - <_>1 6 3 5 2. - <_>4 11 3 5 2. - 0 - 0.0747993662953377 - 7.8805796802043915e-003 - -0.6634296178817749 - <_> - - <_> - - - - <_>7 13 13 2 -1. - <_>7 14 13 1 2. - 0 - 4.3973559513688087e-005 - -0.0581061504781246 - 0.1046651974320412 - <_> - - <_> - - - - <_>3 12 11 4 -1. - <_>3 14 11 2 2. - 0 - 6.6341059282422066e-003 - 0.0197503697127104 - -0.2703348100185394 - <_> - - <_> - - - - <_>13 12 6 8 -1. - <_>13 12 3 8 2. - 0 - 6.9901258684694767e-003 - -0.0322103686630726 - 0.0566778108477592 - <_> - - <_> - - - - <_>1 12 6 8 -1. - <_>4 12 3 8 2. - 0 - -6.9424291141331196e-003 - 0.0834926292300224 - -0.0642367228865623 - <_> - - <_> - - - - <_>12 6 8 8 -1. - <_>16 6 4 4 2. - <_>12 10 4 4 2. - 0 - 0.1252495050430298 - 1.9679870456457138e-003 - -0.8788949251174927 - <_> - - <_> - - - - <_>0 6 8 8 -1. - <_>0 6 4 4 2. - <_>4 10 4 4 2. - 0 - -0.0605558082461357 - -0.6582552790641785 - 7.3593561537563801e-003 - <_> - - <_> - - - - <_>3 8 16 2 -1. - <_>3 9 16 1 2. - 0 - 0.0420927293598652 - 9.0475538745522499e-003 - -0.3767631053924561 - <_> - - <_> - - - - <_>0 7 16 3 -1. - <_>0 8 16 1 3. - 0 - 0.0161900594830513 - 0.0145348403602839 - -0.3408921062946320 - <_> - - <_> - - - - <_>5 11 14 3 -1. - <_>5 12 14 1 3. - 0 - -0.0267569608986378 - 0.1686244010925293 - -0.0107689499855042 - <_> - - <_> - - - - <_>8 0 3 20 -1. - <_>9 0 1 20 3. - 0 - -0.0511635392904282 - -0.9406844973564148 - 4.8503028228878975e-003 - <_> - - <_> - - - - <_>8 10 9 7 -1. - <_>11 10 3 7 3. - 0 - -0.0290930792689323 - 0.1305136978626251 - -0.0272160600870848 - <_> - - <_> - - - - <_>0 6 20 3 -1. - <_>10 6 10 3 2. - 0 - -0.1343380957841873 - -0.5371304750442505 - 0.0106057301163673 - <_> - - <_> - - - - <_>4 7 15 3 -1. - <_>4 8 15 1 3. - 0 - -4.0363678708672523e-003 - -0.0785979479551315 - 0.0456093102693558 - <_> - - <_> - - - - <_>0 5 14 5 -1. - <_>7 5 7 5 2. - 0 - -0.1630388051271439 - 0.6915314793586731 - -6.8249078467488289e-003 - <_> - - <_> - - - - <_>8 10 9 7 -1. - <_>11 10 3 7 3. - 0 - 0.0535272285342216 - -8.2422774285078049e-003 - 0.2364957928657532 - <_> - - <_> - - - - <_>3 10 9 7 -1. - <_>6 10 3 7 3. - 0 - 0.0932096168398857 - -7.0793349295854568e-003 - 0.6398562788963318 - <_> - - <_> - - - - <_>11 7 3 10 -1. - <_>11 12 3 5 2. - 0 - -0.0415833517909050 - -0.4052774906158447 - 0.0119533697143197 - <_> - - <_> - - - - <_>1 7 18 6 -1. - <_>1 9 18 2 3. - 0 - 0.1524126976728439 - -0.0160168893635273 - 0.3708480894565582 - <_> - - <_> - - - - <_>8 0 4 15 -1. - <_>8 5 4 5 3. - 0 - -0.0130174802616239 - -0.1236660033464432 - 0.0445375107228756 - <_> - - <_> - - - - <_>6 1 7 15 -1. - <_>6 6 7 5 3. - 0 - 0.0549465417861938 - 0.0248529296368361 - -0.2195506989955902 - <_> - - <_> - - - - <_>6 9 14 3 -1. - <_>6 10 14 1 3. - 0 - 3.0320021323859692e-004 - -0.1336728930473328 - 0.0402260906994343 - <_> - - <_> - - - - <_>1 10 6 10 -1. - <_>1 10 3 5 2. - <_>4 15 3 5 2. - 0 - 0.0138911800459027 - -0.0269018206745386 - 0.1964741051197052 - <_> - - <_> - - - - <_>9 3 6 13 -1. - <_>11 3 2 13 3. - 0 - 1.0848880046978593e-003 - 0.0364220701158047 - -0.0834306329488754 - <_> - - <_> - - - - <_>8 1 4 9 -1. - <_>10 1 2 9 2. - 0 - 2.3160090204328299e-003 - -0.0612158291041851 - 0.1127784997224808 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -7.1280319243669510e-003 - -0.1464242935180664 - 0.0313001684844494 - <_> - - <_> - - - - <_>7 1 6 8 -1. - <_>10 1 3 8 2. - 0 - -3.5769429523497820e-003 - 0.1015909016132355 - -0.0607895106077194 - <_> - - <_> - - - - <_>3 6 14 2 -1. - <_>3 6 7 2 2. - 0 - 7.6856701634824276e-003 - 0.0422294698655605 - -0.1258313059806824 - <_> - - <_> - - - - <_>1 3 4 8 -1. - <_>3 3 2 8 2. - 0 - 8.4121264517307281e-003 - -0.0468726195394993 - 0.1301138997077942 - <_> - - <_> - - - - <_>18 3 2 14 -1. - <_>18 10 2 7 2. - 0 - 0.0758399292826653 - -9.2988023534417152e-003 - 0.2426081001758575 - <_> - - <_> - - - - <_>0 3 2 14 -1. - <_>0 10 2 7 2. - 0 - 8.6365960305556655e-004 - 0.0911338478326797 - -0.0613235607743263 - <_> - - <_> - - - - <_>3 15 16 2 -1. - <_>3 15 8 2 2. - 0 - -0.0106325699016452 - -0.0678184032440186 - 0.0190364997833967 - <_> - - <_> - - - - <_>2 1 9 6 -1. - <_>2 3 9 2 3. - 0 - -0.0141201401129365 - 0.2912392914295197 - -0.0174822397530079 - <_> - - <_> - - - - <_>11 1 7 6 -1. - <_>11 3 7 2 3. - 0 - 2.0944620482623577e-003 - -0.1174428984522820 - 0.0541295185685158 - <_> - - <_> - - - - <_>1 8 8 8 -1. - <_>1 8 4 4 2. - <_>5 12 4 4 2. - 0 - 4.2378879152238369e-003 - 0.0384955108165741 - -0.1447281986474991 - <_> - - <_> - - - - <_>8 6 5 8 -1. - <_>8 10 5 4 2. - 0 - -2.2818730212748051e-003 - -0.1157623007893562 - 0.0276634991168976 - <_> - - <_> - - - - <_>4 12 8 8 -1. - <_>4 12 4 4 2. - <_>8 16 4 4 2. - 0 - 9.4367301790043712e-004 - -0.0940889269113541 - 0.0533738210797310 - <_> - - <_> - - - - <_>15 12 4 8 -1. - <_>15 16 4 4 2. - 0 - 0.0148901902139187 - -0.0115624200552702 - 0.1094198003411293 - <_> - - <_> - - - - <_>7 11 5 8 -1. - <_>7 15 5 4 2. - 0 - 5.2381302230060101e-003 - 0.0352654308080673 - -0.1521206051111221 - <_> - - <_> - - - - <_>5 14 13 2 -1. - <_>5 15 13 1 2. - 0 - 1.2663690140470862e-003 - -0.0333525687456131 - 0.0798120498657227 - <_> - - <_> - - - - <_>2 4 9 12 -1. - <_>2 8 9 4 3. - 0 - -5.3786882199347019e-003 - 0.2093476951122284 - -0.0240730699151754 - <_> - - <_> - - - - <_>3 8 14 3 -1. - <_>3 9 14 1 3. - 0 - -1.9063480431213975e-003 - -0.2077497988939285 - 0.0254068300127983 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - 3.0771149322390556e-003 - -0.0519401803612709 - 0.1047597974538803 - <_> - - <_> - - - - <_>9 14 8 6 -1. - <_>9 16 8 2 3. - 0 - 9.5619028434157372e-003 - 0.0306337904185057 - -0.1075816974043846 - <_> - - <_> - - - - <_>1 12 4 8 -1. - <_>1 16 4 4 2. - 0 - 0.0205408297479153 - -0.0220289193093777 - 0.2357084006071091 - <_> - - <_> - - - - <_>5 16 12 4 -1. - <_>9 16 4 4 3. - 0 - 7.0854742079973221e-003 - -0.0471882484853268 - 0.0841227471828461 - <_> - - <_> - - - - <_>4 13 6 7 -1. - <_>6 13 2 7 3. - 0 - -6.2047559767961502e-003 - -0.1220982000231743 - 0.0451773293316364 - <_> - - <_> - - - - <_>11 1 3 15 -1. - <_>12 1 1 15 3. - 0 - -0.0234741196036339 - -0.2877045869827271 - 0.0108765298500657 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - 9.1368835419416428e-003 - -0.0334267504513264 - 0.2068012058734894 - <_> - - <_> - - - - <_>11 1 3 19 -1. - <_>12 1 1 19 3. - 0 - 1.0512090520933270e-003 - 0.0470068007707596 - -0.0950183793902397 - <_> - - <_> - - - - <_>5 10 4 7 -1. - <_>7 10 2 7 2. - 0 - -6.0899247182533145e-004 - 0.0534191988408566 - -0.1044477000832558 - <_> - - <_> - - - - <_>8 11 8 4 -1. - <_>8 11 4 4 2. - 0 - -7.4382261373102665e-003 - -0.0480893291532993 - 0.0192444995045662 - <_> - - <_> - - - - <_>5 12 8 8 -1. - <_>9 12 4 8 2. - 0 - 0.0194959901273251 - -0.0301367007195950 - 0.2038148045539856 - <_> - - <_> - - - - <_>6 4 10 14 -1. - <_>11 4 5 7 2. - <_>6 11 5 7 2. - 0 - 0.0777995064854622 - 4.2237630113959312e-003 - -0.7240787744522095 - <_> - - <_> - - - - <_>4 4 10 14 -1. - <_>4 4 5 7 2. - <_>9 11 5 7 2. - 0 - 3.1717489473521709e-003 - 0.0288189407438040 - -0.1630569994449616 - <_> - - <_> - - - - <_>2 3 18 15 -1. - <_>2 8 18 5 3. - 0 - -0.0390127189457417 - -0.2915115952491760 - 0.0111319404095411 - <_> - - <_> - - - - <_>4 7 6 9 -1. - <_>6 7 2 9 3. - 0 - -3.1845991034060717e-003 - 0.0630722194910049 - -0.0772915631532669 - <_> - - <_> - - - - <_>8 7 9 9 -1. - <_>8 10 9 3 3. - 0 - 0.0178767200559378 - 0.0511965900659561 - -0.0378859303891659 - <_> - - <_> - - - - <_>2 8 14 4 -1. - <_>2 8 7 2 2. - <_>9 10 7 2 2. - 0 - 1.2821210548281670e-003 - -0.0573147088289261 - 0.0870549827814102 - <_> - - <_> - - - - <_>6 10 8 10 -1. - <_>6 10 4 10 2. - 0 - 0.1071055009961128 - -0.0155610004439950 - 0.3152500987052918 - <_> - - <_> - - - - <_>4 15 9 5 -1. - <_>7 15 3 5 3. - 0 - 0.0695771276950836 - 8.9664813131093979e-003 - -0.5858960747718811 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - -4.1071181185543537e-003 - 0.0954722464084625 - -0.0351764708757401 - <_> - - <_> - - - - <_>5 6 8 4 -1. - <_>9 6 4 4 2. - 0 - -2.4557299911975861e-003 - -0.1660528033971787 - 0.0373229198157787 - <_> - - <_> - - - - <_>10 7 6 7 -1. - <_>12 7 2 7 3. - 0 - -0.0209084209054708 - 0.1398988068103790 - -0.0299874506890774 - <_> - - <_> - - - - <_>4 7 6 12 -1. - <_>6 7 2 12 3. - 0 - -8.1008402630686760e-003 - -0.1052922010421753 - 0.0702457875013351 - <_> - - <_> - - - - <_>7 6 6 8 -1. - <_>9 6 2 8 3. - 0 - -0.0256718192249537 - 0.4425472021102905 - -0.0110814599320292 - <_> - - <_> - - - - <_>5 3 6 16 -1. - <_>5 3 3 8 2. - <_>8 11 3 8 2. - 0 - -9.3759642913937569e-003 - -0.0607650317251682 - 0.0813383236527443 - <_> - - <_> - - - - <_>12 10 6 6 -1. - <_>12 10 3 6 2. - 0 - 0.0511406995356083 - -0.0105162495747209 - 0.3404153883457184 - <_> - - <_> - - - - <_>2 10 6 6 -1. - <_>5 10 3 6 2. - 0 - -4.0337219834327698e-003 - 0.0850994735956192 - -0.0634215325117111 - <_> - - <_> - - - - <_>10 0 4 9 -1. - <_>10 0 2 9 2. - 0 - 3.3258409239351749e-003 - -0.0846251398324966 - 0.0473683699965477 - <_> - - <_> - - - - <_>5 0 6 7 -1. - <_>7 0 2 7 3. - 0 - -3.9332117885351181e-003 - -0.1263709962368012 - 0.0424505993723869 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>12 0 2 8 3. - 0 - -4.7937841154634953e-003 - -0.0425274111330509 - 0.0251268092542887 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>6 0 2 8 3. - 0 - 2.5972370058298111e-003 - 0.0418841205537319 - -0.1437415927648544 - <_> - - <_> - - - - <_>6 6 8 6 -1. - <_>6 8 8 2 3. - 0 - 0.0528075508773327 - -0.0124670201912522 - 0.4022338986396790 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -8.1413555890321732e-003 - -0.1278377026319504 - 0.0389758795499802 - <_> - - <_> - - - - <_>8 10 10 10 -1. - <_>13 10 5 5 2. - <_>8 15 5 5 2. - 0 - 0.0298017393797636 - -0.0167473908513784 - 0.1242422983050346 - <_> - - <_> - - - - <_>2 16 15 4 -1. - <_>7 16 5 4 3. - 0 - -0.0899077206850052 - 0.3141846954822540 - -0.0183604191988707 - <_> - - <_> - - - - <_>9 6 10 13 -1. - <_>9 6 5 13 2. - 0 - 0.1784521043300629 - 0.0104551902040839 - -0.3204891979694367 - <_> - - <_> - - - - <_>1 6 10 13 -1. - <_>6 6 5 13 2. - 0 - 0.0185882207006216 - -0.0385414399206638 - 0.1513532996177673 - <_> - - <_> - - - - <_>4 15 16 2 -1. - <_>4 15 8 2 2. - 0 - -4.5074601075612009e-005 - 0.0504628494381905 - -0.0565748512744904 - <_> - - <_> - - - - <_>1 15 16 2 -1. - <_>9 15 8 2 2. - 0 - 3.8339050952345133e-003 - 0.0475015491247177 - -0.1432714015245438 - <_> - - <_> - - - - <_>15 7 3 12 -1. - <_>15 13 3 6 2. - 0 - 0.0886082500219345 - -3.3567149657756090e-003 - 0.5859820842742920 - <_> - - <_> - - - - <_>2 7 3 12 -1. - <_>2 13 3 6 2. - 0 - -0.0706114694476128 - 0.6029266715049744 - -8.3463769406080246e-003 - <_> - - <_> - - - - <_>2 13 18 7 -1. - <_>8 13 6 7 3. - 0 - -0.1395819932222366 - -0.0916935130953789 - 0.0153119899332523 - <_> - - <_> - - - - <_>2 4 15 3 -1. - <_>2 5 15 1 3. - 0 - 7.6274941675364971e-003 - -0.0408250093460083 - 0.1193772032856941 - <_> - - <_> - - - - <_>16 6 2 13 -1. - <_>16 6 1 13 2. - 0 - -0.0704195871949196 - -0.6653149724006653 - 2.6815559249371290e-003 - <_> - - <_> - - - - <_>4 1 6 5 -1. - <_>7 1 3 5 2. - 0 - 2.2952680010348558e-003 - -0.0794965177774429 - 0.0570342689752579 - <_> - - <_> - - - - <_>14 6 4 14 -1. - <_>16 6 2 7 2. - <_>14 13 2 7 2. - 0 - 3.6756680347025394e-003 - -0.0291802808642387 - 0.0563330389559269 - <_> - - <_> - - - - <_>0 4 12 3 -1. - <_>6 4 6 3 2. - 0 - 0.0460725016891956 - 0.0191001798957586 - -0.2916376888751984 - <_> - - <_> - - - - <_>4 5 13 2 -1. - <_>4 6 13 1 2. - 0 - 2.1738489158451557e-003 - -0.0269121304154396 - 0.2019996047019959 - <_> - - <_> - - - - <_>3 2 13 10 -1. - <_>3 7 13 5 2. - 0 - -5.3164511919021606e-003 - 0.0930229797959328 - -0.0715486407279968 - <_> - - <_> - - - - <_>7 2 6 10 -1. - <_>7 7 6 5 2. - 0 - -0.0111989602446556 - -0.1061891987919807 - 0.0483955815434456 - <_> - - <_> - - - - <_>3 1 7 6 -1. - <_>3 3 7 2 3. - 0 - 1.7013610340654850e-003 - -0.1311120986938477 - 0.0430862195789814 - <_> - - <_> - - - - <_>4 0 13 6 -1. - <_>4 2 13 2 3. - 0 - -0.0116262696683407 - 0.1568453013896942 - -0.0246989503502846 - <_> - - <_> - - - - <_>3 0 12 6 -1. - <_>3 2 12 2 3. - 0 - 0.0938818305730820 - -0.0120585896074772 - 0.3794193863868713 - <_> - - <_> - - - - <_>13 0 7 6 -1. - <_>13 2 7 2 3. - 0 - 0.0120410900563002 - 0.0295691099017859 - -0.1332854926586151 - <_> - - <_> - - - - <_>5 0 4 16 -1. - <_>5 0 2 8 2. - <_>7 8 2 8 2. - 0 - -4.1863098740577698e-003 - 0.0672440230846405 - -0.0722289904952049 - <_> - - <_> - - - - <_>1 14 18 6 -1. - <_>10 14 9 3 2. - <_>1 17 9 3 2. - 0 - 0.0883739069104195 - 7.5915241613984108e-003 - -0.6251279711723328 - <_> - - <_> - - - - <_>2 17 14 3 -1. - <_>9 17 7 3 2. - 0 - -0.0148764103651047 - 0.1176209002733231 - -0.0438402183353901 - <_> - - <_> - - - - <_>16 11 4 7 -1. - <_>16 11 2 7 2. - 0 - 0.0134335299953818 - 0.0196157898753881 - -0.1192376017570496 - <_> - - <_> - - - - <_>4 1 8 15 -1. - <_>8 1 4 15 2. - 0 - 0.1509104073047638 - -9.9040074273943901e-003 - 0.5626248121261597 - <_> - - <_> - - - - <_>13 0 7 6 -1. - <_>13 2 7 2 3. - 0 - -0.0175078399479389 - -0.2343973964452744 - 0.0188283603638411 - <_> - - <_> - - - - <_>1 6 4 13 -1. - <_>3 6 2 13 2. - 0 - -0.1470708996057510 - -0.7453066110610962 - 7.0233740843832493e-003 - <_> - - <_> - - - - <_>12 12 7 4 -1. - <_>12 14 7 2 2. - 0 - 0.0314858891069889 - -3.6193220876157284e-003 - 0.6921570897102356 - <_> - - <_> - - - - <_>1 12 7 4 -1. - <_>1 14 7 2 2. - 0 - -1.6217399388551712e-004 - 0.0464600399136543 - -0.1064255014061928 - <_> - - <_> - - - - <_>7 13 13 2 -1. - <_>7 14 13 1 2. - 0 - 5.6881760247051716e-004 - -0.0288161505013704 - 0.0743787288665771 - <_> - - <_> - - - - <_>0 12 7 6 -1. - <_>0 14 7 2 3. - 0 - -0.0198762007057667 - -0.2099740058183670 - 0.0230188108980656 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -8.7401196360588074e-003 - 0.1732510030269623 - -0.0357868596911430 - <_> - - <_> - - - - <_>6 11 6 8 -1. - <_>8 11 2 8 3. - 0 - -0.0505792088806629 - -0.5202491879463196 - 9.2388605698943138e-003 - <_> - - <_> - - - - <_>8 10 10 10 -1. - <_>13 10 5 5 2. - <_>8 15 5 5 2. - 0 - 0.0939821526408196 - 3.4048059023916721e-003 - -0.2920742928981781 - <_> - - <_> - - - - <_>2 10 10 10 -1. - <_>2 10 5 5 2. - <_>7 15 5 5 2. - 0 - -0.0133265396580100 - 0.1366183012723923 - -0.0344055593013763 - <_> - - <_> - - - - <_>6 13 10 6 -1. - <_>11 13 5 3 2. - <_>6 16 5 3 2. - 0 - -0.0224726200103760 - -0.2591367959976196 - 0.0112661700695753 - <_> - - <_> - - - - <_>4 13 10 6 -1. - <_>4 13 5 3 2. - <_>9 16 5 3 2. - 0 - -0.0411250405013561 - -0.6692156195640564 - 7.3854308575391769e-003 - <_> - - <_> - - - - <_>7 6 9 12 -1. - <_>7 12 9 6 2. - 0 - 0.0697207674384117 - 5.0764488987624645e-003 - -0.2474718987941742 - <_> - - <_> - - - - <_>1 14 14 4 -1. - <_>1 14 7 2 2. - <_>8 16 7 2 2. - 0 - 0.0251985993236303 - -0.0156600493937731 - 0.2940840125083923 - <_> - - <_> - - - - <_>11 15 7 4 -1. - <_>11 17 7 2 2. - 0 - 4.2568319477140903e-003 - 0.0381121188402176 - -0.1236869022250176 - <_> - - <_> - - - - <_>1 15 16 4 -1. - <_>1 17 16 2 2. - 0 - -0.0126790096983314 - -0.1997618973255158 - 0.0288066398352385 - <_> - - <_> - - - - <_>2 0 18 8 -1. - <_>8 0 6 8 3. - 0 - -0.1608065962791443 - 0.1871045976877213 - -8.2025080919265747e-003 - <_> - - <_> - - - - <_>0 8 18 12 -1. - <_>0 12 18 4 3. - 0 - 0.1218139976263046 - -0.0108559299260378 - 0.4541229009628296 - <_> - - <_> - - - - <_>7 11 13 2 -1. - <_>7 12 13 1 2. - 0 - 2.8687159065157175e-003 - -9.8563097417354584e-003 - 0.1968989074230194 - <_> - - <_> - - - - <_>0 11 13 2 -1. - <_>0 12 13 1 2. - 0 - -3.4924471401609480e-004 - 0.0479552596807480 - -0.1254905015230179 - <_> - - <_> - - - - <_>1 12 19 3 -1. - <_>1 13 19 1 3. - 0 - 0.0437891818583012 - 5.1197651773691177e-003 - -0.6604471206665039 - <_> - - <_> - - - - <_>0 3 13 3 -1. - <_>0 4 13 1 3. - 0 - 0.0494254492223263 - 7.9704420641064644e-003 - -0.5153719186782837 - <_> - - <_> - - - - <_>9 11 6 9 -1. - <_>9 14 6 3 3. - 0 - 0.0122637897729874 - 9.8127601668238640e-003 - -0.1627492010593414 - <_> - - <_> - - - - <_>5 11 6 9 -1. - <_>5 14 6 3 3. - 0 - -6.7564379423856735e-003 - -0.0669927671551704 - 0.0784260928630829 - <_> - - <_> - - - - <_>4 3 13 3 -1. - <_>4 4 13 1 3. - 0 - 0.0195992402732372 - -0.0245084799826145 - 0.1789238005876541 - <_> - - <_> - - - - <_>5 14 9 4 -1. - <_>5 16 9 2 2. - 0 - 1.3520059874281287e-003 - -0.0758534222841263 - 0.0572824701666832 - <_> - - <_> - - - - <_>8 12 4 8 -1. - <_>8 16 4 4 2. - 0 - 5.1610758528113365e-003 - 0.0505926199257374 - -0.0966589227318764 - <_> - - <_> - - - - <_>3 8 14 4 -1. - <_>3 8 7 2 2. - <_>10 10 7 2 2. - 0 - 0.0271245893090963 - -0.0130784995853901 - 0.3389481902122498 - <_> - - <_> - - - - <_>4 5 12 6 -1. - <_>8 5 4 6 3. - 0 - -0.0736590623855591 - -0.9077556133270264 - 5.3760888986289501e-003 - <_> - - <_> - - - - <_>3 5 8 9 -1. - <_>3 8 8 3 3. - 0 - -2.7619479224085808e-003 - 0.1344632059335709 - -0.0344833098351955 - <_> - - <_> - - - - <_>10 5 4 12 -1. - <_>10 9 4 4 3. - 0 - -1.5638889744877815e-003 - -0.1999212056398392 - 0.0140036996454000 - <_> - - <_> - - - - <_>0 6 18 6 -1. - <_>0 6 9 3 2. - <_>9 9 9 3 2. - 0 - 4.0559601038694382e-003 - 0.0531832091510296 - -0.1007082983851433 - <_> - - <_> - - - - <_>3 6 16 4 -1. - <_>11 6 8 2 2. - <_>3 8 8 2 2. - 0 - -3.2189621124416590e-003 - 0.0626243129372597 - -0.0302760899066925 - <_> - - <_> - - - - <_>4 6 7 4 -1. - <_>4 8 7 2 2. - 0 - 4.1666622273623943e-003 - -0.0917611569166183 - 0.0584005005657673 - <_> - - <_> - - - - <_>12 4 7 6 -1. - <_>12 6 7 2 3. - 0 - 0.0203930605202913 - 4.8048538155853748e-003 - -0.3838635087013245 - <_> - - <_> - - - - <_>1 4 7 6 -1. - <_>1 6 7 2 3. - 0 - -9.9844802170991898e-003 - -0.0694732964038849 - 0.0700341910123825 - <_> - - <_> - - - - <_>6 0 10 6 -1. - <_>6 2 10 2 3. - 0 - 0.0195153206586838 - -0.0341065004467964 - 0.1083140969276428 - <_> - - <_> - - - - <_>0 0 7 6 -1. - <_>0 2 7 2 3. - 0 - 8.7807718664407730e-003 - 0.0369900502264500 - -0.1308933049440384 - <_> - - <_> - - - - <_>17 2 3 13 -1. - <_>18 2 1 13 3. - 0 - 1.7314519500359893e-003 - -0.0421234704554081 - 0.0849820971488953 - <_> - - <_> - - - - <_>0 2 3 13 -1. - <_>1 2 1 13 3. - 0 - -0.0267095193266869 - 0.3232682943344116 - -0.0154271600767970 - <_> - - <_> - - - - <_>6 8 13 3 -1. - <_>6 9 13 1 3. - 0 - 7.8696580603718758e-003 - 0.0313611589372158 - -0.1056860983371735 - <_> - - <_> - - - - <_>0 13 10 6 -1. - <_>0 13 5 3 2. - <_>5 16 5 3 2. - 0 - 3.2152980566024780e-003 - -0.0651618018746376 - 0.0761894881725311 - <_> - - <_> - - - - <_>10 12 8 8 -1. - <_>14 12 4 4 2. - <_>10 16 4 4 2. - 0 - -0.0232151206582785 - 0.2252265065908432 - -0.0148387700319290 - <_> - - <_> - - - - <_>6 10 8 8 -1. - <_>6 10 4 4 2. - <_>10 14 4 4 2. - 0 - -4.4935368932783604e-003 - -0.1313146054744721 - 0.0428559407591820 - <_> - - <_> - - - - <_>10 10 6 7 -1. - <_>12 10 2 7 3. - 0 - -0.0118503896519542 - 0.1482574045658112 - -0.0294568501412869 - <_> - - <_> - - - - <_>5 9 9 5 -1. - <_>8 9 3 5 3. - 0 - -9.3039282364770770e-004 - 0.0793299376964569 - -0.0757845267653465 - <_> - - <_> - - - - <_>7 5 7 6 -1. - <_>7 7 7 2 3. - 0 - -7.2138011455535889e-004 - 0.0220424104481936 - -0.2089328020811081 - <_> - - <_> - - - - <_>0 13 18 7 -1. - <_>6 13 6 7 3. - 0 - 0.1307877004146576 - -0.0122144203633070 - 0.4322460889816284 - <_> - - <_> - - - - <_>7 7 12 9 -1. - <_>7 10 12 3 3. - 0 - 0.2786338925361633 - -7.4468360980972648e-004 - 0.9999976158142090 - <_> - - <_> - - - - <_>1 12 18 3 -1. - <_>1 13 18 1 3. - 0 - -0.0408152006566525 - -0.6131027936935425 - 8.2405265420675278e-003 - <_> - - <_> - - - - <_>7 13 13 2 -1. - <_>7 14 13 1 2. - 0 - 1.5054940013214946e-003 - -0.0180533993989229 - 0.0652307271957397 - <_> - - <_> - - - - <_>7 12 6 7 -1. - <_>9 12 2 7 3. - 0 - 6.5729310736060143e-003 - 0.0309676304459572 - -0.1502135992050171 - <_> - - <_> - - - - <_>8 10 12 10 -1. - <_>14 10 6 5 2. - <_>8 15 6 5 2. - 0 - -0.1403317004442215 - -0.4464120864868164 - 5.0997259095311165e-003 - <_> - - <_> - - - - <_>0 10 12 10 -1. - <_>0 10 6 5 2. - <_>6 15 6 5 2. - 0 - -0.0127815604209900 - 0.1257960945367813 - -0.0462587699294090 - <_> - - <_> - - - - <_>7 7 12 9 -1. - <_>7 10 12 3 3. - 0 - 0.0133838197216392 - 0.0752338320016861 - -0.0298584196716547 - <_> - - <_> - - - - <_>3 16 12 4 -1. - <_>7 16 4 4 3. - 0 - 9.5225386321544647e-003 - -0.0441355295479298 - 0.1082296967506409 - <_> - - <_> - - - - <_>7 16 9 4 -1. - <_>7 18 9 2 2. - 0 - -0.0724846869707108 - -1. - 1.3005880173295736e-003 - <_> - - <_> - - - - <_>4 16 9 4 -1. - <_>4 18 9 2 2. - 0 - 3.6246789386495948e-004 - -0.0668785423040390 - 0.0739164799451828 - <_> - - <_> - - - - <_>11 1 3 19 -1. - <_>12 1 1 19 3. - 0 - -0.0155119802802801 - -0.1841454058885574 - 0.0159990396350622 - <_> - - <_> - - - - <_>6 14 7 6 -1. - <_>6 16 7 2 3. - 0 - 0.0511466115713120 - -9.4361994415521622e-003 - 0.5472086071968079 - <_> - - <_> - - - - <_>11 1 3 15 -1. - <_>12 1 1 15 3. - 0 - -8.9448272774461657e-005 - 0.0329708904027939 - -0.0451033897697926 - <_> - - <_> - - - - <_>6 1 3 19 -1. - <_>7 1 1 19 3. - 0 - 1.0151580208912492e-003 - 0.0486031807959080 - -0.0982570499181747 - <_> - - <_> - - - - <_>4 0 14 10 -1. - <_>11 0 7 5 2. - <_>4 5 7 5 2. - 0 - 0.0535709708929062 - 0.0103257000446320 - -0.1430442035198212 - <_> - - <_> - - - - <_>2 0 14 10 -1. - <_>2 0 7 5 2. - <_>9 5 7 5 2. - 0 - 0.1230262964963913 - -5.2219899371266365e-003 - 0.8690345287322998 - <_> - - <_> - - - - <_>10 1 3 13 -1. - <_>11 1 1 13 3. - 0 - -6.0005468549206853e-004 - 0.0535720400512218 - -0.0582032687962055 - <_> - - <_> - - - - <_>6 7 6 8 -1. - <_>8 7 2 8 3. - 0 - -0.0447156988084316 - 0.4498831033706665 - -0.0105494195595384 - <_> - - <_> - - - - <_>11 5 4 10 -1. - <_>11 5 2 10 2. - 0 - 6.3781379722058773e-003 - 0.0261842906475067 - -0.1064003035426140 - <_> - - <_> - - - - <_>3 18 13 2 -1. - <_>3 19 13 1 2. - 0 - -5.6618300732225180e-004 - 0.0572648495435715 - -0.0777502432465553 - <_> - - <_> - - - - <_>11 8 4 8 -1. - <_>11 12 4 4 2. - 0 - -1.5853339573368430e-004 - 0.0253169499337673 - -0.0571899414062500 - <_> - - <_> - - - - <_>5 8 4 8 -1. - <_>5 12 4 4 2. - 0 - -0.0497907698154449 - -0.3712770938873291 - 0.0131251700222492 - <_> - - <_> - - - - <_>4 8 16 6 -1. - <_>12 8 8 3 2. - <_>4 11 8 3 2. - 0 - -0.0104770204052329 - 0.0842459499835968 - -0.0367316082119942 - <_> - - <_> - - - - <_>5 5 4 10 -1. - <_>7 5 2 10 2. - 0 - -9.0497080236673355e-003 - -0.1689444035291672 - 0.0284713692963123 - <_> - - <_> - - - - <_>10 1 3 13 -1. - <_>11 1 1 13 3. - 0 - -0.0352020785212517 - -0.4381084144115448 - 5.8491500094532967e-003 - <_> - - <_> - - - - <_>7 1 3 13 -1. - <_>8 1 1 13 3. - 0 - -2.0730090327560902e-003 - 0.0948908403515816 - -0.0530595891177654 - <_> - - <_> - - - - <_>6 6 8 7 -1. - <_>6 6 4 7 2. - 0 - -5.0727208144962788e-003 - -0.1122173964977264 - 0.0441659912467003 - <_> - - <_> - - - - <_>8 0 4 9 -1. - <_>10 0 2 9 2. - 0 - 2.5876651052385569e-003 - -0.0555578209459782 - 0.1142631992697716 - <_> - - <_> - - - - <_>9 7 4 12 -1. - <_>9 11 4 4 3. - 0 - -2.4757650680840015e-003 - -0.0482131801545620 - 0.0315298996865749 - <_> - - <_> - - - - <_>4 2 12 4 -1. - <_>10 2 6 4 2. - 0 - -0.0129125304520130 - 0.1148665994405747 - -0.0385897606611252 - <_> - - <_> - - - - <_>8 1 10 6 -1. - <_>13 1 5 3 2. - <_>8 4 5 3 2. - 0 - 0.0701943486928940 - 3.5798270255327225e-003 - -0.7300816774368286 - <_> - - <_> - - - - <_>0 2 9 10 -1. - <_>0 7 9 5 2. - 0 - -0.1201630011200905 - -0.6721792221069336 - 5.8088749647140503e-003 - <_> - - <_> - - - - <_>10 1 10 14 -1. - <_>10 8 10 7 2. - 0 - 0.1310949027538300 - 0.0153406998142600 - -0.1291787028312683 - <_> - - <_> - - - - <_>0 1 10 14 -1. - <_>0 8 10 7 2. - 0 - -0.1135049983859062 - 0.4729798138141632 - -0.0105742802843452 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>9 5 3 5 3. - 0 - -0.0715335234999657 - -0.3491029143333435 - 9.8157208412885666e-003 - <_> - - <_> - - - - <_>0 2 4 18 -1. - <_>0 2 2 9 2. - <_>2 11 2 9 2. - 0 - 0.0158896706998348 - -0.0301492903381586 - 0.1513480991125107 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 0 6 20 2. - 0 - 0.2684037089347839 - 9.9974423646926880e-003 - -0.1224374994635582 - <_> - - <_> - - - - <_>0 0 12 20 -1. - <_>6 0 6 20 2. - 0 - -0.1492256969213486 - -0.1577313989400864 - 0.0276825092732906 - <_> - - <_> - - - - <_>10 9 6 7 -1. - <_>12 9 2 7 3. - 0 - -0.0228584893047810 - 0.1734071969985962 - -0.0211247708648443 - <_> - - <_> - - - - <_>3 3 6 7 -1. - <_>5 3 2 7 3. - 0 - -9.0983451809734106e-004 - 0.0552699081599712 - -0.0850529819726944 - <_> - - <_> - - - - <_>13 2 3 17 -1. - <_>14 2 1 17 3. - 0 - -0.0114621603861451 - -0.1439760029315949 - 0.0138097098097205 - <_> - - <_> - - - - <_>2 5 4 8 -1. - <_>2 9 4 4 2. - 0 - 0.0871184319257736 - 6.4688520506024361e-003 - -0.7280907034873962 - <_> - - <_> - - - - <_>6 5 10 10 -1. - <_>6 10 10 5 2. - 0 - 0.0538105890154839 - -0.0282515194267035 - 0.1361580044031143 - <_> - - <_> - - - - <_>4 2 3 17 -1. - <_>5 2 1 17 3. - 0 - -1.6928049735724926e-003 - -0.1011480018496513 - 0.0520966015756130 - <_> - - <_> - - - - <_>6 6 14 5 -1. - <_>6 6 7 5 2. - 0 - -0.0145269203931093 - -0.1061320975422859 - 0.0272180307656527 - <_> - - <_> - - - - <_>0 11 15 3 -1. - <_>5 11 5 3 3. - 0 - -5.9082340449094772e-003 - 0.1125700026750565 - -0.0610327012836933 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - -0.0214214697480202 - -0.1546418964862824 - 0.0118538700044155 - <_> - - <_> - - - - <_>3 0 10 6 -1. - <_>3 0 5 3 2. - <_>8 3 5 3 2. - 0 - 0.0801715701818466 - 5.5826799944043159e-003 - -0.8238909244537354 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 10 4 4 3. - 0 - -1.0931739816442132e-003 - -0.0783939063549042 - 0.0134330997243524 - <_> - - <_> - - - - <_>0 13 13 2 -1. - <_>0 14 13 1 2. - 0 - 4.1605130536481738e-004 - -0.0431861393153667 - 0.1050084009766579 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - -2.8376420959830284e-003 - 0.0789602100849152 - -0.0422472804784775 - <_> - - <_> - - - - <_>1 2 12 15 -1. - <_>5 2 4 15 3. - 0 - -0.0285225193947554 - -0.1072297021746635 - 0.0477891899645329 - <_> - - <_> - - - - <_>2 0 18 16 -1. - <_>8 0 6 16 3. - 0 - 0.4006808102130890 - -5.7991011999547482e-003 - 0.3069550991058350 - <_> - - <_> - - - - <_>0 0 18 16 -1. - <_>6 0 6 16 3. - 0 - -8.1703867763280869e-003 - 0.1085176020860672 - -0.0561534687876701 - <_> - - <_> - - - - <_>14 0 6 13 -1. - <_>14 0 3 13 2. - 0 - 9.3125440180301666e-003 - -0.0445609390735626 - 0.0436340495944023 - <_> - - <_> - - - - <_>4 3 3 17 -1. - <_>5 3 1 17 3. - 0 - 5.8274720795452595e-003 - 0.0313108414411545 - -0.1605342030525208 - <_> - - <_> - - - - <_>13 6 6 10 -1. - <_>13 6 3 10 2. - 0 - -2.9063750989735126e-003 - 0.0371482297778130 - -0.0273105800151825 - <_> - - <_> - - - - <_>1 5 6 11 -1. - <_>4 5 3 11 2. - 0 - 0.0164219699800015 - -0.0316163711249828 - 0.1619547009468079 - <_> - - <_> - - - - <_>16 3 4 12 -1. - <_>16 7 4 4 3. - 0 - -0.0138760600239038 - -0.1784088015556335 - 0.0269252397119999 - <_> - - <_> - - - - <_>5 1 3 10 -1. - <_>5 6 3 5 2. - 0 - -0.0299359802156687 - 0.2006970942020416 - -0.0273727308958769 - <_> - - <_> - - - - <_>16 3 4 12 -1. - <_>16 7 4 4 3. - 0 - 8.1381313502788544e-003 - 0.0409517697989941 - -0.0747569724917412 - <_> - - <_> - - - - <_>0 3 4 12 -1. - <_>0 7 4 4 3. - 0 - -5.8591389097273350e-003 - -0.1233702003955841 - 0.0396418794989586 - <_> - - <_> - - - - <_>6 0 14 6 -1. - <_>13 0 7 3 2. - <_>6 3 7 3 2. - 0 - 0.0715921968221664 - -0.0102937603369355 - 0.2239125967025757 - <_> - - <_> - - - - <_>0 1 6 19 -1. - <_>3 1 3 19 2. - 0 - 0.0501115210354328 - 0.0240729991346598 - -0.2144380956888199 - <_> - - <_> - - - - <_>16 1 3 13 -1. - <_>17 1 1 13 3. - 0 - 4.2603579349815845e-003 - -0.0237120501697063 - 0.0736034065485001 - <_> - - <_> - - - - <_>0 0 6 13 -1. - <_>3 0 3 13 2. - 0 - 6.5065422095358372e-003 - -0.0674027800559998 - 0.0769261419773102 - <_> - - <_> - - - - <_>12 1 6 5 -1. - <_>12 1 3 5 2. - 0 - 2.0325470250099897e-003 - -0.0996646732091904 - 0.0579942315816879 - <_> - - <_> - - - - <_>2 1 6 5 -1. - <_>5 1 3 5 2. - 0 - -9.3465158715844154e-003 - 0.1943292021751404 - -0.0313877090811729 - <_> - - <_> - - - - <_>10 0 6 7 -1. - <_>12 0 2 7 3. - 0 - 9.5768114551901817e-003 - 0.0225949902087450 - -0.1609085053205490 - <_> - - <_> - - - - <_>1 1 10 3 -1. - <_>6 1 5 3 2. - 0 - -0.0467639118432999 - -0.3502027094364166 - 0.0150351496413350 - <_> - - <_> - - - - <_>4 0 16 8 -1. - <_>12 0 8 4 2. - <_>4 4 8 4 2. - 0 - -0.0501648709177971 - 0.1276338994503021 - -0.0110356202349067 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - 0.0231481492519379 - -0.0246365796774626 - 0.2026434987783432 - <_> - - <_> - - - - <_>11 10 7 6 -1. - <_>11 12 7 2 3. - 0 - -0.0741685628890991 - -0.9485428929328919 - 2.2216918878257275e-003 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - -0.0206986293196678 - -0.2458554953336716 - 0.0213708207011223 - <_> - - <_> - - - - <_>3 8 15 9 -1. - <_>3 11 15 3 3. - 0 - -0.0581875406205654 - 0.3053100109100342 - -8.1265745684504509e-003 - <_> - - <_> - - - - <_>4 6 4 10 -1. - <_>6 6 2 10 2. - 0 - -0.0524515882134438 - 0.5056778192520142 - -9.7108660265803337e-003 - <_> - - <_> - - - - <_>15 7 5 6 -1. - <_>15 10 5 3 2. - 0 - -0.0467216409742832 - 0.8089610934257507 - -1.8908439669758081e-003 - <_> - - <_> - - - - <_>0 7 5 6 -1. - <_>0 10 5 3 2. - 0 - -0.0103855095803738 - -0.2836990952491760 - 0.0191662292927504 - <_> - - <_> - - - - <_>8 5 12 4 -1. - <_>12 5 4 4 3. - 0 - 5.4432367905974388e-003 - 0.0414307191967964 - -0.1603327989578247 - <_> - - <_> - - - - <_>2 0 14 6 -1. - <_>2 3 14 3 2. - 0 - 0.0240301601588726 - -0.0437515489757061 - 0.1055302023887634 - <_> - - <_> - - - - <_>8 5 12 4 -1. - <_>12 5 4 4 3. - 0 - -0.0264304205775261 - -0.0874482691287994 - 0.0287698302417994 - <_> - - <_> - - - - <_>0 5 12 4 -1. - <_>4 5 4 4 3. - 0 - 4.8743681982159615e-003 - 0.0350329615175724 - -0.1588167995214462 - <_> - - <_> - - - - <_>7 0 7 6 -1. - <_>7 3 7 3 2. - 0 - -2.5106489192694426e-003 - 0.0881616771221161 - -0.0302055906504393 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -5.2146320231258869e-003 - -0.1135013028979302 - 0.0420010611414909 - <_> - - <_> - - - - <_>13 9 3 10 -1. - <_>13 14 3 5 2. - 0 - -0.0109860096126795 - 0.0844287797808647 - -0.0382728390395641 - <_> - - <_> - - - - <_>2 12 7 6 -1. - <_>2 14 7 2 3. - 0 - -0.0600571297109127 - -0.7924910187721252 - 5.2951448597013950e-003 - <_> - - <_> - - - - <_>7 14 13 3 -1. - <_>7 15 13 1 3. - 0 - 0.0136218098923564 - -0.0174198206514120 - 0.2161206007003784 - <_> - - <_> - - - - <_>0 14 13 3 -1. - <_>0 15 13 1 3. - 0 - -0.0222238004207611 - 0.2672164142131805 - -0.0202071908861399 - <_> - - <_> - - - - <_>9 2 6 12 -1. - <_>9 6 6 4 3. - 0 - 0.0581243596971035 - 6.0539757832884789e-003 - -0.4092710912227631 - <_> - - <_> - - - - <_>5 2 6 12 -1. - <_>5 6 6 4 3. - 0 - -0.0280979704111815 - -0.1121790036559105 - 0.0541446395218372 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>9 10 4 4 3. - 0 - 0.0652783736586571 - -7.4973162263631821e-003 - 0.1238427013158798 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 10 4 4 3. - 0 - -2.5233640335500240e-003 - -0.1822437942028046 - 0.0245378501713276 - <_> - - <_> - - - - <_>9 2 8 18 -1. - <_>9 8 8 6 3. - 0 - 0.1147859990596771 - 0.0196175798773766 - -0.1190512031316757 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - 9.6991509199142456e-003 - -0.0539465509355068 - 0.1118021011352539 - <_> - - <_> - - - - <_>8 6 6 7 -1. - <_>10 6 2 7 3. - 0 - 0.0293591506779194 - -0.0233956091105938 - 0.1853425055742264 - <_> - - <_> - - - - <_>3 7 9 9 -1. - <_>3 10 9 3 3. - 0 - 7.8490097075700760e-003 - 0.1645410954952240 - -0.0421294905245304 - <_> - - <_> - - - - <_>14 4 3 13 -1. - <_>15 4 1 13 3. - 0 - 4.0329899638891220e-003 - 0.0244955904781818 - -0.0659554898738861 - <_> - - <_> - - - - <_>4 1 12 15 -1. - <_>4 6 12 5 3. - 0 - 0.2147139012813568 - -0.0104628801345825 - 0.4743803143501282 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>8 6 4 4 2. - 0 - -2.2316209506243467e-003 - 0.0497964397072792 - -0.1032828018069267 - <_> - - <_> - - - - <_>3 0 12 20 -1. - <_>3 10 12 10 2. - 0 - 0.0218333303928375 - -0.0538848489522934 - 0.0932775512337685 - <_> - - <_> - - - - <_>1 17 19 3 -1. - <_>1 18 19 1 3. - 0 - 0.0244307797402143 - 0.0157060995697975 - -0.2824443876743317 - <_> - - <_> - - - - <_>0 18 18 2 -1. - <_>9 18 9 2 2. - 0 - 0.0125325201079249 - -0.0309839006513357 - 0.1559969931840897 - <_> - - <_> - - - - <_>8 10 6 9 -1. - <_>10 10 2 9 3. - 0 - 7.9741179943084717e-003 - 0.0266505405306816 - -0.1368958055973053 - <_> - - <_> - - - - <_>6 10 6 9 -1. - <_>8 10 2 9 3. - 0 - 0.0794445574283600 - 6.4238710328936577e-003 - -0.7848566174507141 - <_> - - <_> - - - - <_>5 11 12 4 -1. - <_>5 13 12 2 2. - 0 - -1.7925030551850796e-003 - 0.0396455898880959 - -0.1149725988507271 - <_> - - <_> - - - - <_>2 5 8 4 -1. - <_>2 7 8 2 2. - 0 - -9.0927572455257177e-004 - 0.0632568895816803 - -0.0752503722906113 - <_> - - <_> - - - - <_>9 10 7 6 -1. - <_>9 12 7 2 3. - 0 - -0.0260400492697954 - 0.1486425995826721 - -0.0185062400996685 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - 4.1452320292592049e-003 - 0.0339596197009087 - -0.1435599029064179 - <_> - - <_> - - - - <_>3 0 14 3 -1. - <_>3 1 14 1 3. - 0 - 5.7123368605971336e-004 - -0.0685509666800499 - 0.0699447318911552 - <_> - - <_> - - - - <_>8 6 4 8 -1. - <_>10 6 2 8 2. - 0 - -0.0495777204632759 - 0.3988083899021149 - -0.0113399103283882 - <_> - - <_> - - - - <_>9 3 6 13 -1. - <_>11 3 2 13 3. - 0 - -0.0153348604217172 - -0.0834456235170364 - 0.0322763696312904 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>0 0 3 5 2. - <_>3 5 3 5 2. - 0 - -0.0174060892313719 - 0.1356094032526016 - -0.0319455787539482 - <_> - - <_> - - - - <_>8 0 7 18 -1. - <_>8 6 7 6 3. - 0 - -0.0214222595095634 - -0.1105023995041847 - 0.0285360403358936 - <_> - - <_> - - - - <_>5 3 6 13 -1. - <_>7 3 2 13 3. - 0 - 1.9694769289344549e-003 - 0.0438341088593006 - -0.1055186018347740 - <_> - - <_> - - - - <_>7 4 9 5 -1. - <_>10 4 3 5 3. - 0 - -0.0191153790801764 - 0.1469029039144516 - -0.0154053103178740 - <_> - - <_> - - - - <_>8 1 3 18 -1. - <_>9 1 1 18 3. - 0 - 0.0469632595777512 - 8.1654358655214310e-003 - -0.5873488783836365 - <_> - - <_> - - - - <_>9 0 11 15 -1. - <_>9 5 11 5 3. - 0 - 0.2096432000398636 - 3.1721789855509996e-003 - -0.8043789863586426 - <_> - - <_> - - - - <_>0 0 16 8 -1. - <_>0 0 8 4 2. - <_>8 4 8 4 2. - 0 - 0.0625114068388939 - -0.0164227895438671 - 0.3097603917121887 - <_> - - <_> - - - - <_>4 3 12 14 -1. - <_>10 3 6 7 2. - <_>4 10 6 7 2. - 0 - -0.1012618020176888 - -0.6163914799690247 - 7.2699659503996372e-003 - <_> - - <_> - - - - <_>5 6 6 12 -1. - <_>5 6 3 6 2. - <_>8 12 3 6 2. - 0 - 3.3980670850723982e-003 - -0.0196648892015219 - 0.2254192978143692 - <_> - - <_> - - - - <_>6 3 11 9 -1. - <_>6 6 11 3 3. - 0 - -0.0170599501580000 - -0.0171935204416513 - 0.0691145509481430 - <_> - - <_> - - - - <_>0 0 18 8 -1. - <_>0 0 9 4 2. - <_>9 4 9 4 2. - 0 - 3.7455849815160036e-003 - 0.0517374612390995 - -0.0827488228678703 - <_> - - <_> - - - - <_>11 5 9 12 -1. - <_>11 11 9 6 2. - 0 - 0.0877698063850403 - -6.3681108877062798e-003 - 0.0794920027256012 - <_> - - <_> - - - - <_>2 5 14 8 -1. - <_>2 9 14 4 2. - 0 - 2.3725361097604036e-003 - -0.3048743903636932 - 0.0145207699388266 - <_> - - <_> - - - - <_>16 2 4 8 -1. - <_>16 6 4 4 2. - 0 - -0.0192829091101885 - 0.1880698055028915 - -0.0132209295406938 - <_> - - <_> - - - - <_>4 10 7 6 -1. - <_>4 12 7 2 3. - 0 - 3.8580079562962055e-003 - 0.0339784398674965 - -0.1285416930913925 - <_> - - <_> - - - - <_>7 11 7 6 -1. - <_>7 13 7 2 3. - 0 - 2.6525680441409349e-003 - -0.0391469001770020 - 0.0991193577647209 - <_> - - <_> - - - - <_>0 2 4 8 -1. - <_>0 6 4 4 2. - 0 - 0.0991756021976471 - 5.0618657842278481e-003 - -0.8737046122550964 - <_> - - <_> - - - - <_>16 1 3 13 -1. - <_>17 1 1 13 3. - 0 - -7.0648840628564358e-003 - 0.0852192863821983 - -0.0244677904993296 - <_> - - <_> - - - - <_>4 2 10 6 -1. - <_>4 2 5 3 2. - <_>9 5 5 3 2. - 0 - -5.2547529339790344e-003 - -0.1215846985578537 - 0.0372285284101963 - <_> - - <_> - - - - <_>4 4 14 3 -1. - <_>4 5 14 1 3. - 0 - 5.0068609416484833e-003 - -0.0355571918189526 - 0.0785154625773430 - <_> - - <_> - - - - <_>5 5 7 6 -1. - <_>5 7 7 2 3. - 0 - -0.0681181624531746 - -0.2629249989986420 - 0.0183259602636099 - <_> - - <_> - - - - <_>6 13 13 3 -1. - <_>6 14 13 1 3. - 0 - 9.3348289374262094e-004 - -0.0301071796566248 - 0.0448697209358215 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - -2.1996269933879375e-003 - 0.1113670021295548 - -0.0662019327282906 - <_> - - <_> - - - - <_>10 13 7 4 -1. - <_>10 15 7 2 2. - 0 - -6.6485330462455750e-003 - -0.0783986970782280 - 0.0204720702022314 - <_> - - <_> - - - - <_>1 13 13 3 -1. - <_>1 14 13 1 3. - 0 - 1.4126920141279697e-003 - -0.0524286702275276 - 0.0894713997840881 - <_> - - <_> - - - - <_>6 3 11 9 -1. - <_>6 6 11 3 3. - 0 - 0.0514065995812416 - -1.4306739903986454e-003 - 0.6388527154922485 - -1.1700680255889893 - 45 - -1 - diff --git a/data/haarcascades/haarcascade_frontalface_default.xml b/data/haarcascades/haarcascade_frontalface_default.xml deleted file mode 100644 index 8dff079..0000000 --- a/data/haarcascades/haarcascade_frontalface_default.xml +++ /dev/null @@ -1,35712 +0,0 @@ - - - - - 24 24 - - <_> - - - <_> - - <_> - - - - <_>6 4 12 9 -1. - <_>6 7 12 3 3. - 0 - -0.0315119996666908 - 2.0875380039215088 - -2.2172100543975830 - <_> - - <_> - - - - <_>6 4 12 7 -1. - <_>10 4 4 7 3. - 0 - 0.0123960003256798 - -1.8633940219879150 - 1.3272049427032471 - <_> - - <_> - - - - <_>3 9 18 9 -1. - <_>3 12 18 3 3. - 0 - 0.0219279993325472 - -1.5105249881744385 - 1.0625729560852051 - <_> - - <_> - - - - <_>8 18 9 6 -1. - <_>8 20 9 2 3. - 0 - 5.7529998011887074e-003 - -0.8746389746665955 - 1.1760339736938477 - <_> - - <_> - - - - <_>3 5 4 19 -1. - <_>5 5 2 19 2. - 0 - 0.0150140002369881 - -0.7794569730758667 - 1.2608419656753540 - <_> - - <_> - - - - <_>6 5 12 16 -1. - <_>6 13 12 8 2. - 0 - 0.0993710011243820 - 0.5575129985809326 - -1.8743000030517578 - <_> - - <_> - - - - <_>5 8 12 6 -1. - <_>5 11 12 3 2. - 0 - 2.7340000960975885e-003 - -1.6911929845809937 - 0.4400970041751862 - <_> - - <_> - - - - <_>11 14 4 10 -1. - <_>11 19 4 5 2. - 0 - -0.0188590008765459 - -1.4769539833068848 - 0.4435009956359863 - <_> - - <_> - - - - <_>4 0 7 6 -1. - <_>4 3 7 3 2. - 0 - 5.9739998541772366e-003 - -0.8590919971466065 - 0.8525559902191162 - -5.0425500869750977 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>6 8 12 2 3. - 0 - -0.0211100000888109 - 1.2435649633407593 - -1.5713009834289551 - <_> - - <_> - - - - <_>6 4 12 7 -1. - <_>10 4 4 7 3. - 0 - 0.0203559994697571 - -1.6204780340194702 - 1.1817760467529297 - <_> - - <_> - - - - <_>1 8 19 12 -1. - <_>1 12 19 4 3. - 0 - 0.0213089995086193 - -1.9415930509567261 - 0.7006909847259522 - <_> - - <_> - - - - <_>0 2 24 3 -1. - <_>8 2 8 3 3. - 0 - 0.0916600003838539 - -0.5567010045051575 - 1.7284419536590576 - <_> - - <_> - - - - <_>9 9 6 15 -1. - <_>9 14 6 5 3. - 0 - 0.0362880006432533 - 0.2676379978656769 - -2.1831810474395752 - <_> - - <_> - - - - <_>5 6 14 10 -1. - <_>5 11 14 5 2. - 0 - -0.0191099997609854 - -2.6730210781097412 - 0.4567080140113831 - <_> - - <_> - - - - <_>5 0 14 9 -1. - <_>5 3 14 3 3. - 0 - 8.2539999857544899e-003 - -1.0852910280227661 - 0.5356420278549194 - <_> - - <_> - - - - <_>13 11 9 6 -1. - <_>16 11 3 6 3. - 0 - 0.0183550007641315 - -0.3520019948482513 - 0.9333919882774353 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>9 5 2 10 3. - 0 - -7.0569999516010284e-003 - 0.9278209805488586 - -0.6634989976882935 - <_> - - <_> - - - - <_>10 8 6 10 -1. - <_>12 8 2 10 3. - 0 - -9.8770000040531158e-003 - 1.1577470302581787 - -0.2977479994297028 - <_> - - <_> - - - - <_>2 5 4 9 -1. - <_>4 5 2 9 2. - 0 - 0.0158140007406473 - -0.4196060001850128 - 1.3576040267944336 - <_> - - <_> - - - - <_>18 0 6 11 -1. - <_>20 0 2 11 3. - 0 - -0.0207000002264977 - 1.4590020179748535 - -0.1973939985036850 - <_> - - <_> - - - - <_>0 6 24 13 -1. - <_>8 6 8 13 3. - 0 - -0.1376080065965653 - 1.1186759471893311 - -0.5291550159454346 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0143189998343587 - -0.3512719869613648 - 1.1440860033035278 - <_> - - <_> - - - - <_>7 18 10 6 -1. - <_>7 20 10 2 3. - 0 - 0.0102530000731349 - -0.6085060238838196 - 0.7709850072860718 - <_> - - <_> - - - - <_>5 7 14 12 -1. - <_>5 13 14 6 2. - 0 - 0.0915080010890961 - 0.3881779909133911 - -1.5122940540313721 - -4.9842400550842285 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>0 3 24 3 -1. - <_>8 3 8 3 3. - 0 - 0.0697470009326935 - -1.0130879878997803 - 1.4687349796295166 - <_> - - <_> - - - - <_>5 8 15 6 -1. - <_>5 11 15 3 2. - 0 - 0.0315029993653297 - -1.6463639736175537 - 1.0000629425048828 - <_> - - <_> - - - - <_>9 6 5 14 -1. - <_>9 13 5 7 2. - 0 - 0.0142609998583794 - 0.4648030102252960 - -1.5959889888763428 - <_> - - <_> - - - - <_>9 5 6 10 -1. - <_>11 5 2 10 3. - 0 - 0.0144530003890395 - -0.6551190018653870 - 0.8302180171012878 - <_> - - <_> - - - - <_>6 6 3 12 -1. - <_>6 12 3 6 2. - 0 - -3.0509999487549067e-003 - -1.3982310295104980 - 0.4255059957504273 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>9 21 6 3 3. - 0 - 0.0327229984104633 - -0.5070260167121887 - 1.0526109933853149 - <_> - - <_> - - - - <_>5 6 13 6 -1. - <_>5 8 13 2 3. - 0 - -7.2960001416504383e-003 - 0.3635689914226532 - -1.3464889526367187 - <_> - - <_> - - - - <_>18 1 6 15 -1. - <_>18 1 3 15 2. - 0 - 0.0504250004887581 - -0.3046140074729919 - 1.4504129886627197 - <_> - - <_> - - - - <_>1 1 6 15 -1. - <_>4 1 3 15 2. - 0 - 0.0468790009617805 - -0.4028620123863220 - 1.2145609855651855 - <_> - - <_> - - - - <_>0 8 24 15 -1. - <_>8 8 8 15 3. - 0 - -0.0693589970469475 - 1.0539360046386719 - -0.4571970105171204 - <_> - - <_> - - - - <_>5 6 14 12 -1. - <_>5 6 7 6 2. - <_>12 12 7 6 2. - 0 - -0.0490339994430542 - -1.6253089904785156 - 0.1537899971008301 - <_> - - <_> - - - - <_>2 12 21 12 -1. - <_>2 16 21 4 3. - 0 - 0.0848279967904091 - 0.2840299904346466 - -1.5662059783935547 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>10 1 2 10 2. - 0 - -1.7229999648407102e-003 - -1.0147459506988525 - 0.2329480051994324 - <_> - - <_> - - - - <_>2 13 20 10 -1. - <_>2 13 10 10 2. - 0 - 0.1156219989061356 - -0.1673289984464645 - 1.2804069519042969 - <_> - - <_> - - - - <_>0 1 6 13 -1. - <_>2 1 2 13 3. - 0 - -0.0512799993157387 - 1.5162390470504761 - -0.3027110099792481 - <_> - - <_> - - - - <_>20 2 4 13 -1. - <_>20 2 2 13 2. - 0 - -0.0427069999277592 - 1.7631920576095581 - -0.0518320016562939 - <_> - - <_> - - - - <_>0 5 22 19 -1. - <_>11 5 11 19 2. - 0 - 0.3717809915542603 - -0.3138920068740845 - 1.5357979536056519 - <_> - - <_> - - - - <_>18 4 6 9 -1. - <_>20 4 2 9 3. - 0 - 0.0194129999727011 - -0.1001759991049767 - 0.9365540146827698 - <_> - - <_> - - - - <_>0 3 6 11 -1. - <_>2 3 2 11 3. - 0 - 0.0174390003085136 - -0.4037989974021912 - 0.9629300236701965 - <_> - - <_> - - - - <_>12 1 4 9 -1. - <_>12 1 2 9 2. - 0 - 0.0396389998495579 - 0.1703909933567047 - -2.9602990150451660 - <_> - - <_> - - - - <_>0 6 19 3 -1. - <_>0 7 19 1 3. - 0 - -9.1469995677471161e-003 - 0.8878679871559143 - -0.4381870031356812 - <_> - - <_> - - - - <_>12 1 4 9 -1. - <_>12 1 2 9 2. - 0 - 1.7219999572262168e-003 - -0.3721860051155090 - 0.4001890122890472 - <_> - - <_> - - - - <_>8 1 4 9 -1. - <_>10 1 2 9 2. - 0 - 0.0302310008555651 - 0.0659240037202835 - -2.6469180583953857 - <_> - - <_> - - - - <_>5 5 14 14 -1. - <_>12 5 7 7 2. - <_>5 12 7 7 2. - 0 - -0.0787959992885590 - -1.7491459846496582 - 0.2847529947757721 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 11 18 1 2. - 0 - 2.1110000088810921e-003 - -0.9390810132026672 - 0.2320519983768463 - <_> - - <_> - - - - <_>17 13 4 11 -1. - <_>17 13 2 11 2. - 0 - 0.0270910002291203 - -0.0526640005409718 - 1.0756820440292358 - <_> - - <_> - - - - <_>0 4 6 9 -1. - <_>0 7 6 3 3. - 0 - -0.0449649989604950 - -1.8294479846954346 - 0.0995619967579842 - -4.6551899909973145 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>6 4 12 9 -1. - <_>6 7 12 3 3. - 0 - -0.0657010003924370 - 1.1558510065078735 - -1.0716359615325928 - <_> - - <_> - - - - <_>6 5 12 6 -1. - <_>10 5 4 6 3. - 0 - 0.0158399995416403 - -1.5634720325469971 - 0.7687709927558899 - <_> - - <_> - - - - <_>0 1 24 5 -1. - <_>8 1 8 5 3. - 0 - 0.1457089930772781 - -0.5745009779930115 - 1.3808720111846924 - <_> - - <_> - - - - <_>4 10 18 6 -1. - <_>4 12 18 2 3. - 0 - 6.1389999464154243e-003 - -1.4570560455322266 - 0.5161030292510986 - <_> - - <_> - - - - <_>2 17 12 6 -1. - <_>2 17 6 3 2. - <_>8 20 6 3 2. - 0 - 6.7179999314248562e-003 - -0.8353360295295715 - 0.5852220058441162 - <_> - - <_> - - - - <_>19 3 4 13 -1. - <_>19 3 2 13 2. - 0 - 0.0185180008411407 - -0.3131209909915924 - 1.1696679592132568 - <_> - - <_> - - - - <_>1 3 4 13 -1. - <_>3 3 2 13 2. - 0 - 0.0199580006301403 - -0.4344260096549988 - 0.9544690251350403 - <_> - - <_> - - - - <_>0 1 24 23 -1. - <_>8 1 8 23 3. - 0 - -0.2775500118732452 - 1.4906179904937744 - -0.1381590068340302 - <_> - - <_> - - - - <_>1 7 8 12 -1. - <_>1 11 8 4 3. - 0 - 9.1859996318817139e-003 - -0.9636150002479553 - 0.2766549885272980 - <_> - - <_> - - - - <_>14 7 3 14 -1. - <_>14 14 3 7 2. - 0 - -0.0377379991114140 - -2.4464108943939209 - 0.2361959964036942 - <_> - - <_> - - - - <_>3 12 16 6 -1. - <_>3 12 8 3 2. - <_>11 15 8 3 2. - 0 - 0.0184630006551743 - 0.1753920018672943 - -1.3423130512237549 - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>6 8 12 2 3. - 0 - -0.0111149996519089 - 0.4871079921722412 - -0.8985189795494080 - <_> - - <_> - - - - <_>8 7 6 12 -1. - <_>8 13 6 6 2. - 0 - 0.0339279994368553 - 0.1787420064210892 - -1.6342279911041260 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - -0.0356490015983582 - -1.9607399702072144 - 0.1810249984264374 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>1 18 18 1 3. - 0 - -0.0114380000159144 - 0.9901069998741150 - -0.3810319900512695 - <_> - - <_> - - - - <_>4 4 16 12 -1. - <_>4 10 16 6 2. - 0 - -0.0652360022068024 - -2.5794160366058350 - 0.2475360035896301 - <_> - - <_> - - - - <_>0 1 4 20 -1. - <_>2 1 2 20 2. - 0 - -0.0422720015048981 - 1.4411840438842773 - -0.2950829863548279 - <_> - - <_> - - - - <_>3 0 18 2 -1. - <_>3 1 18 1 2. - 0 - 1.9219999667257071e-003 - -0.4960860013961792 - 0.6317359805107117 - <_> - - <_> - - - - <_>1 5 20 14 -1. - <_>1 5 10 7 2. - <_>11 12 10 7 2. - 0 - -0.1292179971933365 - -2.3314270973205566 - 0.0544969998300076 - <_> - - <_> - - - - <_>5 8 14 12 -1. - <_>5 12 14 4 3. - 0 - 0.0229310002177954 - -0.8444709777832031 - 0.3873809874057770 - <_> - - <_> - - - - <_>3 14 7 9 -1. - <_>3 17 7 3 3. - 0 - -0.0341200008988380 - -1.4431500434875488 - 0.0984229966998100 - <_> - - <_> - - - - <_>14 15 9 6 -1. - <_>14 17 9 2 3. - 0 - 0.0262230001389980 - 0.1822309941053391 - -1.2586519718170166 - <_> - - <_> - - - - <_>1 15 9 6 -1. - <_>1 17 9 2 3. - 0 - 0.0222369991242886 - 0.0698079988360405 - -2.3820950984954834 - <_> - - <_> - - - - <_>11 6 8 10 -1. - <_>15 6 4 5 2. - <_>11 11 4 5 2. - 0 - -5.8240001089870930e-003 - 0.3933250010013580 - -0.2754279971122742 - <_> - - <_> - - - - <_>5 5 14 14 -1. - <_>5 5 7 7 2. - <_>12 12 7 7 2. - 0 - 0.0436530001461506 - 0.1483269929885864 - -1.1368780136108398 - <_> - - <_> - - - - <_>6 0 12 5 -1. - <_>10 0 4 5 3. - 0 - 0.0572669990360737 - 0.2462809979915619 - -1.2687400579452515 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>9 3 6 3 3. - 0 - 2.3409998975694180e-003 - -0.7544890046119690 - 0.2716380059719086 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0129960002377629 - -0.3639490008354187 - 0.7095919847488403 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0265170000493526 - -2.3221859931945801 - 0.0357440002262592 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - -5.8400002308189869e-003 - 0.4219430088996887 - -0.0481849983334541 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - -0.0165689997375011 - 1.1099940538406372 - -0.3484970033168793 - <_> - - <_> - - - - <_>3 8 18 4 -1. - <_>9 8 6 4 3. - 0 - -0.0681570023298264 - -3.3269989490509033 - 0.2129900008440018 - -4.4531588554382324 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>6 0 12 9 -1. - <_>6 3 12 3 3. - 0 - 0.0399740003049374 - -1.2173449993133545 - 1.0826710462570190 - <_> - - <_> - - - - <_>0 0 24 6 -1. - <_>8 0 8 6 3. - 0 - 0.1881950050592423 - -0.4828940033912659 - 1.4045250415802002 - <_> - - <_> - - - - <_>4 7 16 12 -1. - <_>4 11 16 4 3. - 0 - 0.0780270025134087 - -1.0782150030136108 - 0.7404029965400696 - <_> - - <_> - - - - <_>11 6 6 6 -1. - <_>11 6 3 6 2. - 0 - 1.1899999663000926e-004 - -1.2019979953765869 - 0.3774920105934143 - <_> - - <_> - - - - <_>0 20 24 3 -1. - <_>8 20 8 3 3. - 0 - 0.0850569978356361 - -0.4393909871578217 - 1.2647340297698975 - <_> - - <_> - - - - <_>11 6 4 9 -1. - <_>11 6 2 9 2. - 0 - 8.9720003306865692e-003 - -0.1844049990177155 - 0.4572640061378479 - <_> - - <_> - - - - <_>4 13 15 4 -1. - <_>9 13 5 4 3. - 0 - 8.8120000436902046e-003 - 0.3039669990539551 - -0.9599109888076782 - <_> - - <_> - - - - <_>11 6 4 9 -1. - <_>11 6 2 9 2. - 0 - -0.0235079992562532 - 1.2487529516220093 - 0.0462279990315437 - <_> - - <_> - - - - <_>9 6 4 9 -1. - <_>11 6 2 9 2. - 0 - 7.0039997808635235e-003 - -0.5944210290908814 - 0.5396329760551453 - <_> - - <_> - - - - <_>9 12 6 12 -1. - <_>9 18 6 6 2. - 0 - 0.0338519997894764 - 0.2849609851837158 - -1.4895249605178833 - <_> - - <_> - - - - <_>1 22 18 2 -1. - <_>1 23 18 1 2. - 0 - -3.2530000898987055e-003 - 0.4812079966068268 - -0.5271239876747131 - <_> - - <_> - - - - <_>10 7 4 10 -1. - <_>10 12 4 5 2. - 0 - 0.0290970001369715 - 0.2674390077590942 - -1.6007850170135498 - <_> - - <_> - - - - <_>6 7 8 10 -1. - <_>6 12 8 5 2. - 0 - -8.4790000692009926e-003 - -1.3107639551162720 - 0.1524309962987900 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -0.0107950000092387 - 0.4561359882354736 - -0.7205089926719666 - <_> - - <_> - - - - <_>0 14 10 4 -1. - <_>0 16 10 2 2. - 0 - -0.0246200002729893 - -1.7320619821548462 - 0.0683630034327507 - <_> - - <_> - - - - <_>6 18 18 2 -1. - <_>6 19 18 1 2. - 0 - 3.7380000576376915e-003 - -0.1930329948663712 - 0.6824349761009216 - <_> - - <_> - - - - <_>1 1 22 3 -1. - <_>1 2 22 1 3. - 0 - -0.0122640002518892 - -1.6095290184020996 - 0.0752680003643036 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - -4.8670000396668911e-003 - 0.7428650259971619 - -0.2151020020246506 - <_> - - <_> - - - - <_>2 4 6 15 -1. - <_>5 4 3 15 2. - 0 - 0.0767259970307350 - -0.2683509886264801 - 1.3094140291213989 - <_> - - <_> - - - - <_>20 4 4 10 -1. - <_>20 4 2 10 2. - 0 - 0.0285780001431704 - -0.0587930008769035 - 1.2196329832077026 - <_> - - <_> - - - - <_>0 4 4 10 -1. - <_>2 4 2 10 2. - 0 - 0.0196940004825592 - -0.3514289855957031 - 0.8492699861526489 - <_> - - <_> - - - - <_>2 16 20 6 -1. - <_>12 16 10 3 2. - <_>2 19 10 3 2. - 0 - -0.0290939994156361 - -1.0507299900054932 - 0.2980630099773407 - <_> - - <_> - - - - <_>0 12 8 9 -1. - <_>4 12 4 9 2. - 0 - -0.0291440002620220 - 0.8254780173301697 - -0.3268719911575317 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - 0.0197410006076097 - 0.2045260071754456 - -0.8376020193099976 - <_> - - <_> - - - - <_>5 10 6 6 -1. - <_>8 10 3 6 2. - 0 - 4.3299999088048935e-003 - 0.2057790011167526 - -0.6682980060577393 - <_> - - <_> - - - - <_>11 8 12 6 -1. - <_>17 8 6 3 2. - <_>11 11 6 3 2. - 0 - -0.0355009995400906 - -1.2969900369644165 - 0.1389749944210053 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>0 8 6 3 2. - <_>6 11 6 3 2. - 0 - -0.0161729995161295 - -1.3110569715499878 - 0.0757519975304604 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0221510007977486 - -1.0524389743804932 - 0.1924110054969788 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - -0.0227070003747940 - -1.3735309839248657 - 0.0667809993028641 - <_> - - <_> - - - - <_>8 14 9 6 -1. - <_>8 16 9 2 3. - 0 - 0.0166079998016357 - -0.0371359996497631 - 0.7784640192985535 - <_> - - <_> - - - - <_>0 16 9 6 -1. - <_>0 18 9 2 3. - 0 - -0.0133090000599623 - -0.9985070228576660 - 0.1224810034036636 - <_> - - <_> - - - - <_>10 8 6 10 -1. - <_>12 8 2 10 3. - 0 - -0.0337320007383823 - 1.4461359977722168 - 0.0131519995629787 - <_> - - <_> - - - - <_>3 19 12 3 -1. - <_>9 19 6 3 2. - 0 - 0.0169350001960993 - -0.3712129890918732 - 0.5284219980239868 - <_> - - <_> - - - - <_>2 10 20 2 -1. - <_>2 11 20 1 2. - 0 - 3.3259999472647905e-003 - -0.5756850242614746 - 0.3926190137863159 - <_> - - <_> - - - - <_>2 9 18 12 -1. - <_>2 9 9 6 2. - <_>11 15 9 6 2. - 0 - 0.0836440026760101 - 0.0161160007119179 - -2.1173279285430908 - <_> - - <_> - - - - <_>3 0 18 24 -1. - <_>3 0 9 24 2. - 0 - 0.2578519880771637 - -0.0816090032458305 - 0.9878249764442444 - <_> - - <_> - - - - <_>5 6 14 10 -1. - <_>5 6 7 5 2. - <_>12 11 7 5 2. - 0 - -0.0365669988095760 - -1.1512110233306885 - 0.0964590013027191 - <_> - - <_> - - - - <_>9 5 10 12 -1. - <_>14 5 5 6 2. - <_>9 11 5 6 2. - 0 - -0.0164459999650717 - 0.3731549978256226 - -0.1458539962768555 - <_> - - <_> - - - - <_>4 5 12 12 -1. - <_>4 5 6 6 2. - <_>10 11 6 6 2. - 0 - -3.7519999314099550e-003 - 0.2617929875850678 - -0.5815669894218445 - <_> - - <_> - - - - <_>4 14 18 3 -1. - <_>4 15 18 1 3. - 0 - -6.3660000450909138e-003 - 0.7547739744186401 - -0.1705520004034042 - <_> - - <_> - - - - <_>6 13 8 8 -1. - <_>6 17 8 4 2. - 0 - -3.8499999791383743e-003 - 0.2265399992465973 - -0.6387640237808228 - <_> - - <_> - - - - <_>3 16 18 6 -1. - <_>3 19 18 3 2. - 0 - -0.0454940013587475 - -1.2640299797058105 - 0.2526069879531860 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0239410009235144 - 0.8706840276718140 - -0.2710469961166382 - <_> - - <_> - - - - <_>6 6 12 18 -1. - <_>10 6 4 18 3. - 0 - -0.0775580033659935 - -1.3901610374450684 - 0.2361229956150055 - <_> - - <_> - - - - <_>6 1 4 14 -1. - <_>8 1 2 14 2. - 0 - 0.0236140005290508 - 0.0661400035023689 - -1.2645419836044312 - <_> - - <_> - - - - <_>3 2 19 2 -1. - <_>3 3 19 1 2. - 0 - -2.5750000495463610e-003 - -0.5384169816970825 - 0.3037909865379334 - <_> - - <_> - - - - <_>1 8 22 13 -1. - <_>12 8 11 13 2. - 0 - 0.1201080009341240 - -0.3534300029277802 - 0.5286620259284973 - <_> - - <_> - - - - <_>8 9 11 4 -1. - <_>8 11 11 2 2. - 0 - 2.2899999748915434e-003 - -0.5870199799537659 - 0.2406100034713745 - <_> - - <_> - - - - <_>0 12 15 10 -1. - <_>5 12 5 10 3. - 0 - 0.0697169974446297 - -0.3334890007972717 - 0.5191630125045776 - <_> - - <_> - - - - <_>12 16 12 6 -1. - <_>16 16 4 6 3. - 0 - -0.0466700010001659 - 0.6979539990425110 - -0.0148959998041391 - <_> - - <_> - - - - <_>0 16 12 6 -1. - <_>4 16 4 6 3. - 0 - -0.0501290000975132 - 0.8614619970321655 - -0.2598600089550018 - <_> - - <_> - - - - <_>19 1 5 12 -1. - <_>19 5 5 4 3. - 0 - 0.0301479995250702 - 0.1933279931545258 - -0.5913109779357910 - -4.3864588737487793 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>8 2 8 4 3. - 0 - 0.0910850018262863 - -0.8923310041427612 - 1.0434230566024780 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>6 10 12 2 2. - 0 - 0.0128189995884895 - -1.2597670555114746 - 0.5531709790229797 - <_> - - <_> - - - - <_>7 5 9 6 -1. - <_>10 5 3 6 3. - 0 - 0.0159319993108511 - -0.8625440001487732 - 0.6373180150985718 - <_> - - <_> - - - - <_>9 17 6 6 -1. - <_>9 20 6 3 2. - 0 - 2.2780001163482666e-003 - -0.7463920116424561 - 0.5315560102462769 - <_> - - <_> - - - - <_>0 7 22 15 -1. - <_>0 12 22 5 3. - 0 - 0.0318409986793995 - -1.2650489807128906 - 0.3615390062332153 - <_> - - <_> - - - - <_>4 1 17 9 -1. - <_>4 4 17 3 3. - 0 - 2.6960000395774841e-003 - -0.9829040169715881 - 0.3601300120353699 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>9 5 2 10 3. - 0 - -0.0120550002902746 - 0.6406840085983276 - -0.5012500286102295 - <_> - - <_> - - - - <_>18 1 6 8 -1. - <_>18 1 3 8 2. - 0 - 0.0213249996304512 - -0.2403499931097031 - 0.8544800281524658 - <_> - - <_> - - - - <_>0 1 6 7 -1. - <_>3 1 3 7 2. - 0 - 0.0304860007017851 - -0.3427360057830811 - 1.1428849697113037 - <_> - - <_> - - - - <_>18 0 6 22 -1. - <_>18 0 3 22 2. - 0 - -0.0450799986720085 - 1.0976949930191040 - -0.1797460019588471 - <_> - - <_> - - - - <_>0 0 6 22 -1. - <_>3 0 3 22 2. - 0 - -0.0717009976506233 - 1.5735000371932983 - -0.3143349885940552 - <_> - - <_> - - - - <_>16 7 8 16 -1. - <_>16 7 4 16 2. - 0 - 0.0592180006206036 - -0.2758240103721619 - 1.0448570251464844 - <_> - - <_> - - - - <_>2 10 19 6 -1. - <_>2 12 19 2 3. - 0 - 6.7010000348091125e-003 - -1.0974019765853882 - 0.1980119943618774 - <_> - - <_> - - - - <_>9 9 6 12 -1. - <_>9 13 6 4 3. - 0 - 0.0410469993948936 - 0.3054769933223724 - -1.3287999629974365 - <_> - - <_> - - - - <_>2 15 17 6 -1. - <_>2 17 17 2 3. - 0 - -8.5499999113380909e-004 - 0.2580710053443909 - -0.7005289793014526 - <_> - - <_> - - - - <_>14 7 3 14 -1. - <_>14 14 3 7 2. - 0 - -0.0303600002080202 - -1.2306419610977173 - 0.2260939925909042 - <_> - - <_> - - - - <_>5 6 8 10 -1. - <_>5 6 4 5 2. - <_>9 11 4 5 2. - 0 - -0.0129300002008677 - 0.4075860083103180 - -0.5123450160026550 - <_> - - <_> - - - - <_>15 8 9 11 -1. - <_>18 8 3 11 3. - 0 - 0.0373679995536804 - -0.0947550013661385 - 0.6176509857177734 - <_> - - <_> - - - - <_>0 8 9 11 -1. - <_>3 8 3 11 3. - 0 - 0.0244340002536774 - -0.4110060036182404 - 0.4763050079345703 - <_> - - <_> - - - - <_>8 6 10 18 -1. - <_>8 15 10 9 2. - 0 - 0.0570079982280731 - 0.2524929940700531 - -0.6866980195045471 - <_> - - <_> - - - - <_>7 7 3 14 -1. - <_>7 14 3 7 2. - 0 - -0.0163139998912811 - -0.9392840266227722 - 0.1144810020923615 - <_> - - <_> - - - - <_>0 14 24 8 -1. - <_>8 14 8 8 3. - 0 - -0.1764889955520630 - 1.2451089620590210 - -0.0565190017223358 - <_> - - <_> - - - - <_>1 10 18 14 -1. - <_>10 10 9 14 2. - 0 - 0.1761460006237030 - -0.3252820074558258 - 0.8279150128364563 - <_> - - <_> - - - - <_>14 12 6 6 -1. - <_>14 15 6 3 2. - 0 - -7.3910001665353775e-003 - 0.3478370010852814 - -0.1792909950017929 - <_> - - <_> - - - - <_>7 0 10 16 -1. - <_>7 0 5 8 2. - <_>12 8 5 8 2. - 0 - 0.0608909986913204 - 0.0550980009138584 - -1.5480779409408569 - <_> - - <_> - - - - <_>10 0 9 6 -1. - <_>13 0 3 6 3. - 0 - -0.0291230008006096 - -1.0255639553070068 - 0.2410690039396286 - <_> - - <_> - - - - <_>4 3 16 4 -1. - <_>12 3 8 4 2. - 0 - -0.0456489995121956 - 1.0301599502563477 - -0.3167209923267365 - <_> - - <_> - - - - <_>10 0 9 6 -1. - <_>13 0 3 6 3. - 0 - 0.0373330004513264 - 0.2162059992551804 - -0.8258990049362183 - <_> - - <_> - - - - <_>1 1 20 4 -1. - <_>1 1 10 2 2. - <_>11 3 10 2 2. - 0 - -0.0244110003113747 - -1.5957959890365601 - 0.0511390008032322 - <_> - - <_> - - - - <_>10 0 9 6 -1. - <_>13 0 3 6 3. - 0 - -0.0598069988191128 - -1.0312290191650391 - 0.1309230029582977 - <_> - - <_> - - - - <_>5 0 9 6 -1. - <_>8 0 3 6 3. - 0 - -0.0301060006022453 - -1.4781630039215088 - 0.0372119992971420 - <_> - - <_> - - - - <_>8 18 10 6 -1. - <_>8 20 10 2 3. - 0 - 7.4209999293088913e-003 - -0.2402410060167313 - 0.4933399856090546 - <_> - - <_> - - - - <_>6 3 6 9 -1. - <_>8 3 2 9 3. - 0 - -2.1909999195486307e-003 - 0.2894150018692017 - -0.5725960135459900 - <_> - - <_> - - - - <_>7 3 12 6 -1. - <_>7 5 12 2 3. - 0 - 0.0208609998226166 - -0.2314839959144592 - 0.6376590132713318 - <_> - - <_> - - - - <_>0 10 18 3 -1. - <_>0 11 18 1 3. - 0 - -6.6990000195801258e-003 - -1.2107750177383423 - 0.0640180036425591 - <_> - - <_> - - - - <_>1 10 22 3 -1. - <_>1 11 22 1 3. - 0 - 0.0187580008059740 - 0.2446130067110062 - -0.9978669881820679 - <_> - - <_> - - - - <_>5 11 8 8 -1. - <_>9 11 4 8 2. - 0 - -0.0443230010569096 - -1.3699189424514771 - 0.0360519997775555 - <_> - - <_> - - - - <_>12 11 6 6 -1. - <_>12 11 3 6 2. - 0 - 0.0228599999099970 - 0.2128839939832687 - -1.0397620201110840 - <_> - - <_> - - - - <_>6 11 6 6 -1. - <_>9 11 3 6 2. - 0 - -9.8600005730986595e-004 - 0.3244360089302063 - -0.5429180264472961 - <_> - - <_> - - - - <_>7 10 11 6 -1. - <_>7 12 11 2 3. - 0 - 0.0172390006482601 - -0.2832390069961548 - 0.4446820020675659 - <_> - - <_> - - - - <_>0 13 24 4 -1. - <_>0 13 12 2 2. - <_>12 15 12 2 2. - 0 - -0.0345310010015965 - -2.3107020854949951 - -3.1399999279528856e-003 - <_> - - <_> - - - - <_>2 4 22 12 -1. - <_>13 4 11 6 2. - <_>2 10 11 6 2. - 0 - 0.0670069977641106 - 0.2871569991111755 - -0.6448100209236145 - <_> - - <_> - - - - <_>2 0 20 17 -1. - <_>12 0 10 17 2. - 0 - 0.2377689927816391 - -0.2717480063438416 - 0.8021910190582275 - <_> - - <_> - - - - <_>14 0 2 24 -1. - <_>14 0 1 24 2. - 0 - -0.0129030002281070 - -1.5317620038986206 - 0.2142360061407089 - <_> - - <_> - - - - <_>8 0 2 24 -1. - <_>9 0 1 24 2. - 0 - 0.0105149997398257 - 0.0770379975438118 - -1.0581140518188477 - <_> - - <_> - - - - <_>14 1 2 22 -1. - <_>14 1 1 22 2. - 0 - 0.0169690009206533 - 0.1430670022964478 - -0.8582839965820313 - <_> - - <_> - - - - <_>8 1 2 22 -1. - <_>9 1 1 22 2. - 0 - -7.2460002265870571e-003 - -1.1020129919052124 - 0.0649069994688034 - <_> - - <_> - - - - <_>17 6 3 18 -1. - <_>18 6 1 18 3. - 0 - 0.0105569995939732 - 0.0139640001580119 - 0.6360149979591370 - <_> - - <_> - - - - <_>6 14 9 6 -1. - <_>6 16 9 2 3. - 0 - 6.1380001716315746e-003 - -0.3454590141773224 - 0.5629680156707764 - <_> - - <_> - - - - <_>13 14 9 4 -1. - <_>13 16 9 2 2. - 0 - 0.0131580000743270 - 0.1992730051279068 - -1.5040320158004761 - <_> - - <_> - - - - <_>3 18 18 3 -1. - <_>3 19 18 1 3. - 0 - 3.1310000922530890e-003 - -0.4090369939804077 - 0.3779639899730682 - <_> - - <_> - - - - <_>9 4 8 18 -1. - <_>13 4 4 9 2. - <_>9 13 4 9 2. - 0 - -0.1092069968581200 - -2.2227079868316650 - 0.1217819973826408 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - 8.1820003688335419e-003 - -0.2865200042724609 - 0.6789079904556274 - -4.1299300193786621 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 12 4 -1. - <_>6 2 6 4 2. - 0 - 0.0313469991087914 - -0.8888459801673889 - 0.9493680000305176 - <_> - - <_> - - - - <_>6 8 14 6 -1. - <_>6 11 14 3 2. - 0 - 0.0319180004298687 - -1.1146880388259888 - 0.4888899922370911 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>10 5 3 6 2. - 0 - 6.5939999185502529e-003 - -1.0097689628601074 - 0.4972380101680756 - <_> - - <_> - - - - <_>10 5 6 16 -1. - <_>10 13 6 8 2. - 0 - 0.0261480007320642 - 0.2599129974842072 - -1.2537480592727661 - <_> - - <_> - - - - <_>1 4 9 16 -1. - <_>4 4 3 16 3. - 0 - 0.0128450002521276 - -0.5713859796524048 - 0.5965949892997742 - <_> - - <_> - - - - <_>5 0 18 9 -1. - <_>5 3 18 3 3. - 0 - 0.0263449996709824 - -0.5520319938659668 - 0.3021740019321442 - <_> - - <_> - - - - <_>9 15 5 8 -1. - <_>9 19 5 4 2. - 0 - -0.0150830000638962 - -1.2871240377426147 - 0.2235420048236847 - <_> - - <_> - - - - <_>20 0 4 9 -1. - <_>20 0 2 9 2. - 0 - -0.0388870015740395 - 1.7425049543380737 - -0.0997470021247864 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>2 1 18 1 3. - 0 - -5.7029998861253262e-003 - -1.0523240566253662 - 0.1836259961128235 - <_> - - <_> - - - - <_>5 22 19 2 -1. - <_>5 23 19 1 2. - 0 - -1.4860000228509307e-003 - 0.5678420066833496 - -0.4674200117588043 - <_> - - <_> - - - - <_>0 0 4 9 -1. - <_>2 0 2 9 2. - 0 - -0.0284860003739595 - 1.3082909584045410 - -0.2646090090274811 - <_> - - <_> - - - - <_>5 6 19 18 -1. - <_>5 12 19 6 3. - 0 - 0.0662249997258186 - -0.4621070027351379 - 0.4174959957599640 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>2 1 2 9 3. - 0 - 8.8569996878504753e-003 - -0.4147489964962006 - 0.5920479893684387 - <_> - - <_> - - - - <_>6 5 14 12 -1. - <_>13 5 7 6 2. - <_>6 11 7 6 2. - 0 - 0.0113559998571873 - 0.3610309958457947 - -0.4578120112419128 - <_> - - <_> - - - - <_>0 1 20 2 -1. - <_>0 2 20 1 2. - 0 - -2.7679998893290758e-003 - -0.8923889994621277 - 0.1419900059700012 - <_> - - <_> - - - - <_>1 2 22 3 -1. - <_>1 3 22 1 3. - 0 - 0.0112469997256994 - 0.2935340106487274 - -0.9733060002326965 - <_> - - <_> - - - - <_>2 8 7 9 -1. - <_>2 11 7 3 3. - 0 - 7.1970000863075256e-003 - -0.7933490276336670 - 0.1831340044736862 - <_> - - <_> - - - - <_>2 12 22 4 -1. - <_>13 12 11 2 2. - <_>2 14 11 2 2. - 0 - 0.0317689999938011 - 0.1552309989929199 - -1.3245639801025391 - <_> - - <_> - - - - <_>0 12 22 4 -1. - <_>0 12 11 2 2. - <_>11 14 11 2 2. - 0 - 0.0251739993691444 - 0.0342149995267391 - -2.0948131084442139 - <_> - - <_> - - - - <_>9 7 6 11 -1. - <_>11 7 2 11 3. - 0 - 7.5360001064836979e-003 - -0.3945060074329376 - 0.5133399963378906 - <_> - - <_> - - - - <_>7 1 9 6 -1. - <_>10 1 3 6 3. - 0 - 0.0328730009496212 - 0.0883729979395866 - -1.2814120054244995 - <_> - - <_> - - - - <_>11 2 4 10 -1. - <_>11 7 4 5 2. - 0 - -2.7379998937249184e-003 - 0.5528650283813477 - -0.4638499915599823 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>6 10 12 6 2. - 0 - -0.0380750000476837 - -1.8497270345687866 - 0.0459440015256405 - <_> - - <_> - - - - <_>18 1 6 15 -1. - <_>18 6 6 5 3. - 0 - -0.0389840006828308 - -0.4822370111942291 - 0.3476060032844544 - <_> - - <_> - - - - <_>3 15 18 3 -1. - <_>3 16 18 1 3. - 0 - 2.8029999230057001e-003 - -0.4515469968318939 - 0.4280630052089691 - <_> - - <_> - - - - <_>18 5 6 9 -1. - <_>18 8 6 3 3. - 0 - -0.0541459992527962 - -0.8452079892158508 - 0.1667490005493164 - <_> - - <_> - - - - <_>1 5 16 6 -1. - <_>1 5 8 3 2. - <_>9 8 8 3 2. - 0 - -8.3280000835657120e-003 - 0.3534829914569855 - -0.4716320037841797 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - 0.0337780006229877 - 0.1846310049295425 - -1.6686669588088989 - <_> - - <_> - - - - <_>0 4 24 14 -1. - <_>0 4 12 7 2. - <_>12 11 12 7 2. - 0 - -0.1123809963464737 - -1.2521569728851318 - 0.0359920002520084 - <_> - - <_> - - - - <_>13 0 4 13 -1. - <_>13 0 2 13 2. - 0 - -0.0104080000892282 - -0.8162040114402771 - 0.2342859953641892 - <_> - - <_> - - - - <_>7 0 4 13 -1. - <_>9 0 2 13 2. - 0 - -4.9439999274909496e-003 - -0.9258469939231873 - 0.1003480032086372 - <_> - - <_> - - - - <_>11 6 6 9 -1. - <_>13 6 2 9 3. - 0 - -9.3029998242855072e-003 - 0.5649930238723755 - -0.1888190060853958 - <_> - - <_> - - - - <_>8 7 6 9 -1. - <_>10 7 2 9 3. - 0 - -0.0117499995976686 - 0.8030239939689636 - -0.3827700018882752 - <_> - - <_> - - - - <_>13 17 9 6 -1. - <_>13 19 9 2 3. - 0 - -0.0232170000672340 - -0.8492699861526489 - 0.1967120021581650 - <_> - - <_> - - - - <_>2 18 14 6 -1. - <_>2 18 7 3 2. - <_>9 21 7 3 2. - 0 - 0.0168660003691912 - -0.4059189856052399 - 0.5069530010223389 - <_> - - <_> - - - - <_>3 18 18 4 -1. - <_>12 18 9 2 2. - <_>3 20 9 2 2. - 0 - -0.0240310002118349 - -1.5297520160675049 - 0.2334499955177307 - <_> - - <_> - - - - <_>0 20 15 4 -1. - <_>5 20 5 4 3. - 0 - -0.0369459986686707 - 0.6300770044326782 - -0.3178040087223053 - <_> - - <_> - - - - <_>9 15 15 9 -1. - <_>14 15 5 9 3. - 0 - -0.0615639984607697 - 0.5862789750099182 - -0.0121079999953508 - <_> - - <_> - - - - <_>4 4 16 4 -1. - <_>4 6 16 2 2. - 0 - 0.0216610003262758 - -0.2562370002269745 - 1.0409849882125854 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -3.6710000131279230e-003 - 0.2917110025882721 - -0.8328729867935181 - <_> - - <_> - - - - <_>0 14 15 10 -1. - <_>5 14 5 10 3. - 0 - 0.0448490008711815 - -0.3963319957256317 - 0.4566200077533722 - <_> - - <_> - - - - <_>7 9 10 14 -1. - <_>12 9 5 7 2. - <_>7 16 5 7 2. - 0 - 0.0571950003504753 - 0.2102389931678772 - -1.5004800558090210 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>9 6 2 9 3. - 0 - -0.0113420002162457 - 0.4407129883766174 - -0.3865379989147186 - <_> - - <_> - - - - <_>3 6 18 3 -1. - <_>3 7 18 1 3. - 0 - -0.0120040001347661 - 0.9395459890365601 - -0.1058949977159500 - <_> - - <_> - - - - <_>0 10 18 3 -1. - <_>0 11 18 1 3. - 0 - 0.0225159991532564 - 9.4480002298951149e-003 - -1.6799509525299072 - <_> - - <_> - - - - <_>3 16 18 4 -1. - <_>12 16 9 2 2. - <_>3 18 9 2 2. - 0 - -0.0198090001940727 - -1.0133639574050903 - 0.2414660006761551 - <_> - - <_> - - - - <_>4 6 14 6 -1. - <_>4 6 7 3 2. - <_>11 9 7 3 2. - 0 - 0.0158910006284714 - -0.3750759959220886 - 0.4661409854888916 - <_> - - <_> - - - - <_>13 0 2 18 -1. - <_>13 0 1 18 2. - 0 - -9.1420002281665802e-003 - -0.8048409819602966 - 0.1781699955463409 - <_> - - <_> - - - - <_>9 0 2 18 -1. - <_>10 0 1 18 2. - 0 - -4.4740000739693642e-003 - -1.0562069416046143 - 0.0733050033450127 - <_> - - <_> - - - - <_>5 7 15 10 -1. - <_>10 7 5 10 3. - 0 - 0.1274250000715256 - 0.2016559988260269 - -1.5467929840087891 - <_> - - <_> - - - - <_>1 20 21 4 -1. - <_>8 20 7 4 3. - 0 - 0.0477030016481876 - -0.3793779909610748 - 0.3788599967956543 - <_> - - <_> - - - - <_>10 5 5 18 -1. - <_>10 14 5 9 2. - 0 - 0.0536080002784729 - 0.2122049927711487 - -1.2399710416793823 - <_> - - <_> - - - - <_>0 2 24 6 -1. - <_>0 2 12 3 2. - <_>12 5 12 3 2. - 0 - -0.0396809987723827 - -1.0257550477981567 - 0.0512829981744289 - <_> - - <_> - - - - <_>1 1 22 8 -1. - <_>12 1 11 4 2. - <_>1 5 11 4 2. - 0 - -0.0673270002007484 - -1.0304750204086304 - 0.2300529927015305 - <_> - - <_> - - - - <_>4 0 15 9 -1. - <_>4 3 15 3 3. - 0 - 0.1333760023117065 - -0.2086900025606155 - 1.2272510528564453 - <_> - - <_> - - - - <_>0 0 24 19 -1. - <_>8 0 8 19 3. - 0 - -0.2091930061578751 - 0.8792989850044251 - -0.0442549996078014 - <_> - - <_> - - - - <_>2 21 18 3 -1. - <_>11 21 9 3 2. - 0 - -0.0655890032649040 - 1.0443429946899414 - -0.2168209999799728 - <_> - - <_> - - - - <_>9 7 10 4 -1. - <_>9 7 5 4 2. - 0 - 0.0618829987943172 - 0.1379819959402084 - -1.9009059667587280 - <_> - - <_> - - - - <_>5 7 10 4 -1. - <_>10 7 5 4 2. - 0 - -0.0255789998918772 - -1.6607600450515747 - 5.8439997956156731e-003 - <_> - - <_> - - - - <_>17 8 6 16 -1. - <_>20 8 3 8 2. - <_>17 16 3 8 2. - 0 - -0.0348270013928413 - 0.7994040250778198 - -0.0824069976806641 - <_> - - <_> - - - - <_>1 15 20 4 -1. - <_>1 15 10 2 2. - <_>11 17 10 2 2. - 0 - -0.0182099994271994 - -0.9607399702072144 - 0.0663200020790100 - <_> - - <_> - - - - <_>14 15 10 6 -1. - <_>14 17 10 2 3. - 0 - 0.0150709999725223 - 0.1989939957857132 - -0.7643300294876099 - -4.0218091011047363 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>3 0 16 9 -1. - <_>3 3 16 3 3. - 0 - 0.0463249981403351 - -1.0362670421600342 - 0.8220149874687195 - <_> - - <_> - - - - <_>15 6 7 15 -1. - <_>15 11 7 5 3. - 0 - 0.0154069997370243 - -1.2327589988708496 - 0.2964769899845123 - <_> - - <_> - - - - <_>9 1 6 13 -1. - <_>11 1 2 13 3. - 0 - 0.0128089999780059 - -0.7585229873657227 - 0.5798550248146057 - <_> - - <_> - - - - <_>17 2 6 14 -1. - <_>17 2 3 14 2. - 0 - 0.0491509996354580 - -0.3898389935493469 - 0.8968030214309692 - <_> - - <_> - - - - <_>3 14 12 10 -1. - <_>3 14 6 5 2. - <_>9 19 6 5 2. - 0 - 0.0126210004091263 - -0.7179930210113525 - 0.5044090151786804 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -0.0187689997255802 - 0.5514760017395020 - -0.7055540084838867 - <_> - - <_> - - - - <_>1 2 6 14 -1. - <_>4 2 3 14 2. - 0 - 0.0419650003314018 - -0.4478209912776947 - 0.7098550200462341 - <_> - - <_> - - - - <_>10 4 5 12 -1. - <_>10 8 5 4 3. - 0 - -0.0514019988477230 - -1.0932120084762573 - 0.2670190036296845 - <_> - - <_> - - - - <_>0 17 24 5 -1. - <_>8 17 8 5 3. - 0 - -0.0709609985351563 - 0.8361840248107910 - -0.3831810057163239 - <_> - - <_> - - - - <_>15 7 5 12 -1. - <_>15 11 5 4 3. - 0 - 0.0167459994554520 - -0.2573310136795044 - 0.2596650123596191 - <_> - - <_> - - - - <_>3 1 6 12 -1. - <_>3 1 3 6 2. - <_>6 7 3 6 2. - 0 - -6.2400000169873238e-003 - 0.3163149952888489 - -0.5879690051078796 - <_> - - <_> - - - - <_>12 13 6 6 -1. - <_>12 16 6 3 2. - 0 - -0.0393979996442795 - -1.0491210222244263 - 0.1682240068912506 - <_> - - <_> - - - - <_>6 13 6 6 -1. - <_>6 16 6 3 2. - 0 - 0. - 0.1614419966936112 - -0.8787689805030823 - <_> - - <_> - - - - <_>14 6 3 16 -1. - <_>14 14 3 8 2. - 0 - -0.0223079994320869 - -0.6905350089073181 - 0.2360700070858002 - <_> - - <_> - - - - <_>1 12 13 6 -1. - <_>1 14 13 2 3. - 0 - 1.8919999711215496e-003 - 0.2498919963836670 - -0.5658329725265503 - <_> - - <_> - - - - <_>13 1 4 9 -1. - <_>13 1 2 9 2. - 0 - 1.0730000212788582e-003 - -0.5041580200195313 - 0.3837450146675110 - <_> - - <_> - - - - <_>7 0 9 6 -1. - <_>10 0 3 6 3. - 0 - 0.0392309986054897 - 0.0426190011203289 - -1.3875889778137207 - <_> - - <_> - - - - <_>12 2 6 9 -1. - <_>12 2 3 9 2. - 0 - 0.0622380003333092 - 0.1411940008401871 - -1.0688860416412354 - <_> - - <_> - - - - <_>6 2 6 9 -1. - <_>9 2 3 9 2. - 0 - 2.1399999968707561e-003 - -0.8962240219116211 - 0.1979639977216721 - <_> - - <_> - - - - <_>6 18 12 6 -1. - <_>6 20 12 2 3. - 0 - 9.1800000518560410e-004 - -0.4533729851245880 - 0.4353269934654236 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>9 6 2 9 3. - 0 - -6.9169998168945313e-003 - 0.3382279872894287 - -0.4479300081729889 - <_> - - <_> - - - - <_>7 7 12 3 -1. - <_>7 7 6 3 2. - 0 - -0.0238669998943806 - -0.7890859842300415 - 0.2251179963350296 - <_> - - <_> - - - - <_>8 3 8 21 -1. - <_>8 10 8 7 3. - 0 - -0.1026280000805855 - -2.2831439971923828 - -5.3960001096129417e-003 - <_> - - <_> - - - - <_>7 4 10 12 -1. - <_>7 8 10 4 3. - 0 - -9.5239998772740364e-003 - 0.3934670090675354 - -0.5224220156669617 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>0 4 6 3 3. - 0 - 0.0398770011961460 - 0.0327990017831326 - -1.5079489946365356 - <_> - - <_> - - - - <_>15 2 2 20 -1. - <_>15 2 1 20 2. - 0 - -0.0131449997425079 - -1.0839990377426147 - 0.1848240047693253 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>0 6 6 3 3. - 0 - -0.0505909994244576 - -1.8822289705276489 - -2.2199999075382948e-003 - <_> - - <_> - - - - <_>15 3 2 21 -1. - <_>15 3 1 21 2. - 0 - 0.0249170009046793 - 0.1459340006113052 - -2.2196519374847412 - <_> - - <_> - - - - <_>7 0 2 23 -1. - <_>8 0 1 23 2. - 0 - -7.6370001770555973e-003 - -1.0164569616317749 - 0.0587970018386841 - <_> - - <_> - - - - <_>15 8 9 4 -1. - <_>15 10 9 2 2. - 0 - 0.0429119989275932 - 0.1544300019741058 - -1.1843889951705933 - <_> - - <_> - - - - <_>0 8 9 4 -1. - <_>0 10 9 2 2. - 0 - 2.3000000510364771e-004 - -0.7730579972267151 - 0.1218990013003349 - <_> - - <_> - - - - <_>8 14 9 6 -1. - <_>8 16 9 2 3. - 0 - 9.0929996222257614e-003 - -0.1145009994506836 - 0.7109130024909973 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - 0.0111450003460050 - 0.0700009986758232 - -1.0534820556640625 - <_> - - <_> - - - - <_>3 10 18 4 -1. - <_>9 10 6 4 3. - 0 - -0.0524530000984669 - -1.7594360113143921 - 0.1952379941940308 - <_> - - <_> - - - - <_>0 0 24 19 -1. - <_>8 0 8 19 3. - 0 - -0.2302069962024689 - 0.9584029912948608 - -0.2504569888114929 - <_> - - <_> - - - - <_>9 1 8 12 -1. - <_>9 7 8 6 2. - 0 - -0.0163659993559122 - 0.4673190116882324 - -0.2110839933156967 - <_> - - <_> - - - - <_>10 6 4 10 -1. - <_>12 6 2 10 2. - 0 - -0.0172080006450415 - 0.7083569765090942 - -0.2801829874515533 - <_> - - <_> - - - - <_>7 9 10 12 -1. - <_>12 9 5 6 2. - <_>7 15 5 6 2. - 0 - -0.0366480015218258 - -1.1013339757919312 - 0.2434110045433044 - <_> - - <_> - - - - <_>5 0 3 19 -1. - <_>6 0 1 19 3. - 0 - -0.0103049995377660 - -1.0933129787445068 - 0.0562589988112450 - <_> - - <_> - - - - <_>14 0 6 10 -1. - <_>16 0 2 10 3. - 0 - -0.0137130003422499 - -0.2643809914588928 - 0.1982100009918213 - <_> - - <_> - - - - <_>2 0 6 12 -1. - <_>2 0 3 6 2. - <_>5 6 3 6 2. - 0 - 0.0293080005794764 - -0.2214239984750748 - 1.0525950193405151 - <_> - - <_> - - - - <_>0 11 24 2 -1. - <_>0 12 24 1 2. - 0 - 0.0240770000964403 - 0.1848569959402084 - -1.7203969955444336 - <_> - - <_> - - - - <_>4 9 13 4 -1. - <_>4 11 13 2 2. - 0 - 6.1280000954866409e-003 - -0.9272149801254273 - 0.0587529987096787 - <_> - - <_> - - - - <_>9 8 6 9 -1. - <_>9 11 6 3 3. - 0 - -0.0223779994994402 - 1.9646559953689575 - 0.0277859997004271 - <_> - - <_> - - - - <_>0 12 16 4 -1. - <_>0 14 16 2 2. - 0 - -7.0440000854432583e-003 - 0.2142760008573532 - -0.4840759932994843 - <_> - - <_> - - - - <_>18 12 6 9 -1. - <_>18 15 6 3 3. - 0 - -0.0406030006706715 - -1.1754349470138550 - 0.1606120020151138 - <_> - - <_> - - - - <_>0 12 6 9 -1. - <_>0 15 6 3 3. - 0 - -0.0244660004973412 - -1.1239900588989258 - 0.0411100015044212 - <_> - - <_> - - - - <_>8 7 10 4 -1. - <_>8 7 5 4 2. - 0 - 2.5309999473392963e-003 - -0.1716970056295395 - 0.3217880129814148 - <_> - - <_> - - - - <_>8 7 6 9 -1. - <_>10 7 2 9 3. - 0 - -0.0195889994502068 - 0.8272020220756531 - -0.2637670040130615 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -0.0296359993517399 - -1.1524770259857178 - 0.1499930024147034 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0150300003588200 - -1.0491830110549927 - 0.0401609987020493 - <_> - - <_> - - - - <_>12 3 6 15 -1. - <_>14 3 2 15 3. - 0 - -0.0607150010764599 - -1.0903840065002441 - 0.1533080041408539 - <_> - - <_> - - - - <_>6 3 6 15 -1. - <_>8 3 2 15 3. - 0 - -0.0127900000661612 - 0.4224860072135925 - -0.4239920079708099 - <_> - - <_> - - - - <_>15 2 9 4 -1. - <_>15 4 9 2 2. - 0 - -0.0202479995787144 - -0.9186699986457825 - 0.1848569959402084 - <_> - - <_> - - - - <_>5 10 6 7 -1. - <_>8 10 3 7 2. - 0 - -0.0306839998811483 - -1.5958670377731323 - 2.5760000571608543e-003 - <_> - - <_> - - - - <_>9 14 6 10 -1. - <_>9 19 6 5 2. - 0 - -0.0207180008292198 - -0.6629999876022339 - 0.3103719949722290 - <_> - - <_> - - - - <_>7 13 5 8 -1. - <_>7 17 5 4 2. - 0 - -1.7290000105276704e-003 - 0.1918340027332306 - -0.6508499979972839 - <_> - - <_> - - - - <_>14 5 3 16 -1. - <_>14 13 3 8 2. - 0 - -0.0313940010964870 - -0.6364300251007080 - 0.1540839970111847 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>2 18 18 1 3. - 0 - 0.0190030001103878 - -0.1891939938068390 - 1.5294510126113892 - <_> - - <_> - - - - <_>5 18 19 3 -1. - <_>5 19 19 1 3. - 0 - 6.1769997701048851e-003 - -0.1059790030121803 - 0.6485959887504578 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - -0.0101659996435046 - -1.0802700519561768 - 0.0371760018169880 - <_> - - <_> - - - - <_>12 4 3 18 -1. - <_>13 4 1 18 3. - 0 - -1.4169999631121755e-003 - 0.3415749967098236 - -0.0977379977703094 - <_> - - <_> - - - - <_>9 4 3 18 -1. - <_>10 4 1 18 3. - 0 - -4.0799998678267002e-003 - 0.4762459993362427 - -0.3436630070209503 - <_> - - <_> - - - - <_>3 3 18 9 -1. - <_>9 3 6 9 3. - 0 - -0.0440969988703728 - 0.9763429760932922 - -0.0191730000078678 - <_> - - <_> - - - - <_>6 1 6 14 -1. - <_>8 1 2 14 3. - 0 - -0.0606699995696545 - -2.1752851009368896 - -0.0289259999990463 - <_> - - <_> - - - - <_>12 16 9 6 -1. - <_>12 19 9 3 2. - 0 - -0.0329319983720779 - -0.6438310146331787 - 0.1649409979581833 - <_> - - <_> - - - - <_>1 3 20 16 -1. - <_>1 3 10 8 2. - <_>11 11 10 8 2. - 0 - -0.1472280025482178 - -1.4745830297470093 - 2.5839998852461576e-003 - <_> - - <_> - - - - <_>12 5 6 12 -1. - <_>15 5 3 6 2. - <_>12 11 3 6 2. - 0 - -0.0119300000369549 - 0.4244140088558197 - -0.1771260052919388 - <_> - - <_> - - - - <_>1 2 22 16 -1. - <_>1 2 11 8 2. - <_>12 10 11 8 2. - 0 - 0.1451790034770966 - 0.0254449993371964 - -1.2779400348663330 - <_> - - <_> - - - - <_>10 14 5 10 -1. - <_>10 19 5 5 2. - 0 - 0.0514479987323284 - 0.1567839980125427 - -1.5188430547714233 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>3 22 18 1 3. - 0 - 3.1479999888688326e-003 - -0.4042440056800842 - 0.3242970108985901 - <_> - - <_> - - - - <_>10 14 6 10 -1. - <_>12 14 2 10 3. - 0 - -0.0436000004410744 - -1.9932260513305664 - 0.1501860022544861 - -3.8832089900970459 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>8 2 8 4 3. - 0 - 0.1289959996938705 - -0.6216199994087219 - 1.1116520166397095 - <_> - - <_> - - - - <_>6 4 12 9 -1. - <_>6 7 12 3 3. - 0 - -0.0912619978189468 - 1.0143059492111206 - -0.6133520007133484 - <_> - - <_> - - - - <_>6 6 12 5 -1. - <_>10 6 4 5 3. - 0 - 0.0142719997093081 - -1.0261659622192383 - 0.3977999985218048 - <_> - - <_> - - - - <_>5 8 14 12 -1. - <_>5 12 14 4 3. - 0 - 0.0328899994492531 - -1.1386079788208008 - 0.2869080007076263 - <_> - - <_> - - - - <_>4 14 8 10 -1. - <_>4 14 4 5 2. - <_>8 19 4 5 2. - 0 - 0.0125900004059076 - -0.5664560198783875 - 0.4517239928245544 - <_> - - <_> - - - - <_>11 6 5 14 -1. - <_>11 13 5 7 2. - 0 - 0.0146610001102090 - 0.3050599992275238 - -0.6812959909439087 - <_> - - <_> - - - - <_>7 6 3 16 -1. - <_>7 14 3 8 2. - 0 - -0.0335559993982315 - -1.7208939790725708 - 0.0614390000700951 - <_> - - <_> - - - - <_>3 7 18 8 -1. - <_>9 7 6 8 3. - 0 - 0.1425269991159439 - 0.2319220006465912 - -1.7297149896621704 - <_> - - <_> - - - - <_>2 3 20 2 -1. - <_>2 4 20 1 2. - 0 - -6.2079997733235359e-003 - -1.2163300514221191 - 0.1216019988059998 - <_> - - <_> - - - - <_>3 12 19 6 -1. - <_>3 14 19 2 3. - 0 - 0.0181789994239807 - 0.3255369961261749 - -0.8100399971008301 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - 0.0250369999557734 - -0.3169879913330078 - 0.6736140251159668 - <_> - - <_> - - - - <_>16 6 6 14 -1. - <_>16 6 3 14 2. - 0 - 0.0465609990060329 - -0.1108980029821396 - 0.8408250212669373 - <_> - - <_> - - - - <_>7 9 6 12 -1. - <_>9 9 2 12 3. - 0 - -8.9999996125698090e-003 - 0.3957450091838837 - -0.4762459993362427 - <_> - - <_> - - - - <_>18 6 6 18 -1. - <_>21 6 3 9 2. - <_>18 15 3 9 2. - 0 - 0.0408059991896153 - -1.8000000272877514e-004 - 0.9457070231437683 - <_> - - <_> - - - - <_>0 6 6 18 -1. - <_>0 6 3 9 2. - <_>3 15 3 9 2. - 0 - -0.0342219993472099 - 0.7520629763603210 - -0.3153150081634522 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>18 5 6 3 3. - 0 - -0.0397160016000271 - -0.8313959836959839 - 0.1774439960718155 - <_> - - <_> - - - - <_>3 18 15 6 -1. - <_>3 20 15 2 3. - 0 - 2.5170000735670328e-003 - -0.5937799811363220 - 0.2465700060129166 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>18 5 6 3 3. - 0 - 0.0274289995431900 - 0.1599839925765991 - -0.4278199970722199 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 0.0349860005080700 - 0.0350559987127781 - -1.5988600254058838 - <_> - - <_> - - - - <_>5 10 18 2 -1. - <_>5 11 18 1 2. - 0 - 4.4970000162720680e-003 - -0.5203430056571960 - 0.3782829940319061 - <_> - - <_> - - - - <_>6 0 12 6 -1. - <_>6 2 12 2 3. - 0 - 2.7699999045580626e-003 - -0.5318260192871094 - 0.2495100051164627 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - 0.0351740010082722 - 0.1998340040445328 - -1.4446129798889160 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>10 0 2 9 3. - 0 - 0.0259709991514683 - 0.0444269999861717 - -1.3622980117797852 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - -0.0157839991152287 - -0.9102039933204651 - 0.2719030082225800 - <_> - - <_> - - - - <_>3 6 13 6 -1. - <_>3 8 13 2 3. - 0 - -7.5880000367760658e-003 - 0.0920649990439415 - -0.8162890076637268 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - 0.0207540001720190 - 0.2118570059537888 - -0.7472900152206421 - <_> - - <_> - - - - <_>2 5 6 15 -1. - <_>5 5 3 15 2. - 0 - 0.0598290003836155 - -0.2730109989643097 - 0.8092330098152161 - <_> - - <_> - - - - <_>8 8 9 6 -1. - <_>11 8 3 6 3. - 0 - 0.0390390008687973 - -0.1043229997158051 - 0.8622620105743408 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>8 13 3 7 2. - 0 - 0.0216659996658564 - 0.0627090036869049 - -0.9889429807662964 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - -0.0274969991296530 - -0.9269099831581116 - 0.1558630019426346 - <_> - - <_> - - - - <_>4 12 10 4 -1. - <_>9 12 5 4 2. - 0 - 0.0104620000347495 - 0.1341809928417206 - -0.7038639783859253 - <_> - - <_> - - - - <_>13 1 4 19 -1. - <_>13 1 2 19 2. - 0 - 0.0248709991574287 - 0.1970670074224472 - -0.4026330113410950 - <_> - - <_> - - - - <_>7 1 4 19 -1. - <_>9 1 2 19 2. - 0 - -0.0160360001027584 - -1.1409829854965210 - 0.0739979967474937 - <_> - - <_> - - - - <_>18 9 6 9 -1. - <_>18 12 6 3 3. - 0 - 0.0486270003020763 - 0.1699039936065674 - -0.7215219736099243 - <_> - - <_> - - - - <_>1 21 18 3 -1. - <_>1 22 18 1 3. - 0 - 1.2619999470189214e-003 - -0.4738979935646057 - 0.2625499963760376 - <_> - - <_> - - - - <_>14 13 10 9 -1. - <_>14 16 10 3 3. - 0 - -0.0880350023508072 - -2.1606519222259521 - 0.1455480009317398 - <_> - - <_> - - - - <_>1 13 22 4 -1. - <_>1 13 11 2 2. - <_>12 15 11 2 2. - 0 - 0.0183569993823767 - 0.0447509996592999 - -1.0766370296478271 - <_> - - <_> - - - - <_>4 6 16 6 -1. - <_>12 6 8 3 2. - <_>4 9 8 3 2. - 0 - 0.0352750010788441 - -0.0329190008342266 - 1.2153890132904053 - <_> - - <_> - - - - <_>1 0 18 22 -1. - <_>1 0 9 11 2. - <_>10 11 9 11 2. - 0 - -0.2039290070533752 - -1.3187999725341797 - 0.0155039997771382 - <_> - - <_> - - - - <_>10 7 8 14 -1. - <_>14 7 4 7 2. - <_>10 14 4 7 2. - 0 - -0.0166190005838871 - 0.3685019910335541 - -0.1528369933366776 - <_> - - <_> - - - - <_>0 4 6 20 -1. - <_>0 4 3 10 2. - <_>3 14 3 10 2. - 0 - 0.0377390012145042 - -0.2572779953479767 - 0.7065529823303223 - <_> - - <_> - - - - <_>15 0 6 9 -1. - <_>17 0 2 9 3. - 0 - 2.2720000706613064e-003 - -0.0776029974222183 - 0.3336780071258545 - <_> - - <_> - - - - <_>3 0 6 9 -1. - <_>5 0 2 9 3. - 0 - -0.0148029997944832 - -0.7852479815483093 - 0.0769340023398399 - <_> - - <_> - - - - <_>15 12 6 12 -1. - <_>18 12 3 6 2. - <_>15 18 3 6 2. - 0 - -0.0483190007507801 - 1.7022320032119751 - 0.0497220009565353 - <_> - - <_> - - - - <_>3 12 6 12 -1. - <_>3 12 3 6 2. - <_>6 18 3 6 2. - 0 - -0.0295390002429485 - 0.7767069935798645 - -0.2453429996967316 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - -0.0461690016090870 - -1.4922779798507690 - 0.1234000027179718 - <_> - - <_> - - - - <_>0 12 9 6 -1. - <_>0 14 9 2 3. - 0 - -0.0280649997293949 - -2.1345369815826416 - -0.0257970001548529 - <_> - - <_> - - - - <_>4 14 19 3 -1. - <_>4 15 19 1 3. - 0 - -5.7339998893439770e-003 - 0.5698260068893433 - -0.1205660030245781 - <_> - - <_> - - - - <_>2 13 19 3 -1. - <_>2 14 19 1 3. - 0 - -0.0101110003888607 - 0.6791139841079712 - -0.2663800120353699 - <_> - - <_> - - - - <_>14 15 10 6 -1. - <_>14 17 10 2 3. - 0 - 0.0113599998876452 - 0.2478979974985123 - -0.6449300050735474 - <_> - - <_> - - - - <_>6 0 10 12 -1. - <_>6 0 5 6 2. - <_>11 6 5 6 2. - 0 - 0.0518090017139912 - 0.0147160002961755 - -1.2395579814910889 - <_> - - <_> - - - - <_>17 1 6 12 -1. - <_>20 1 3 6 2. - <_>17 7 3 6 2. - 0 - 0.0332919992506504 - -8.2559995353221893e-003 - 1.0168470144271851 - <_> - - <_> - - - - <_>1 1 6 12 -1. - <_>1 1 3 6 2. - <_>4 7 3 6 2. - 0 - -0.0144940000027418 - 0.4506680071353912 - -0.3625099956989288 - <_> - - <_> - - - - <_>16 14 6 9 -1. - <_>16 17 6 3 3. - 0 - -0.0342219993472099 - -0.9529250264167786 - 0.2068459987640381 - <_> - - <_> - - - - <_>7 3 9 12 -1. - <_>7 9 9 6 2. - 0 - -0.0806540027260780 - -2.0139501094818115 - -0.0230849999934435 - <_> - - <_> - - - - <_>12 1 4 12 -1. - <_>12 7 4 6 2. - 0 - -8.9399999706074595e-004 - 0.3957200050354004 - -0.2935130000114441 - <_> - - <_> - - - - <_>4 0 14 8 -1. - <_>4 4 14 4 2. - 0 - 0.0971620008349419 - -0.2498030066490173 - 1.0859220027923584 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - 0.0366140007972717 - -0.0578440017998219 - 1.2162159681320190 - <_> - - <_> - - - - <_>2 10 18 3 -1. - <_>8 10 6 3 3. - 0 - 0.0516939982771873 - 0.0430629998445511 - -1.0636160373687744 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - -0.0245570000261068 - -0.4894680082798004 - 0.1718290001153946 - <_> - - <_> - - - - <_>0 1 21 23 -1. - <_>7 1 7 23 3. - 0 - 0.3273679912090302 - -0.2968859970569611 - 0.5179830193519592 - <_> - - <_> - - - - <_>6 9 17 4 -1. - <_>6 11 17 2 2. - 0 - 7.6959999278187752e-003 - -0.5980589985847473 - 0.2480320036411285 - <_> - - <_> - - - - <_>1 0 11 18 -1. - <_>1 6 11 6 3. - 0 - 0.1617220044136047 - -0.0296139996498823 - -2.3162529468536377 - <_> - - <_> - - - - <_>6 15 13 6 -1. - <_>6 17 13 2 3. - 0 - -4.7889999113976955e-003 - 0.3745790123939514 - -0.3277919888496399 - <_> - - <_> - - - - <_>0 15 9 6 -1. - <_>0 17 9 2 3. - 0 - -0.0184029992669821 - -0.9969270229339600 - 0.0729480013251305 - <_> - - <_> - - - - <_>8 7 15 4 -1. - <_>13 7 5 4 3. - 0 - 0.0776650011539459 - 0.1417569965124130 - -1.7238730192184448 - <_> - - <_> - - - - <_>9 12 6 9 -1. - <_>9 15 6 3 3. - 0 - 0.0189210008829832 - -0.2127310037612915 - 1.0165189504623413 - <_> - - <_> - - - - <_>6 8 18 3 -1. - <_>12 8 6 3 3. - 0 - -0.0793979987502098 - -1.3164349794387817 - 0.1498199999332428 - <_> - - <_> - - - - <_>0 14 24 4 -1. - <_>8 14 8 4 3. - 0 - -0.0680370032787323 - 0.4942199885845184 - -0.2909100055694580 - <_> - - <_> - - - - <_>16 10 3 12 -1. - <_>16 16 3 6 2. - 0 - -6.1010001227259636e-003 - 0.4243049919605255 - -0.3389930129051209 - <_> - - <_> - - - - <_>0 3 24 3 -1. - <_>0 4 24 1 3. - 0 - 0.0319270007312298 - -0.0310469996184111 - -2.3459999561309814 - <_> - - <_> - - - - <_>14 17 10 6 -1. - <_>14 19 10 2 3. - 0 - -0.0298439990729094 - -0.7898960113525391 - 0.1541769951581955 - <_> - - <_> - - - - <_>1 13 18 3 -1. - <_>7 13 6 3 3. - 0 - -0.0805419981479645 - -2.2509229183197021 - -0.0309069994837046 - <_> - - <_> - - - - <_>5 0 18 9 -1. - <_>5 3 18 3 3. - 0 - 3.8109999150037766e-003 - -0.2557730078697205 - 0.2378550022840500 - <_> - - <_> - - - - <_>4 3 16 9 -1. - <_>4 6 16 3 3. - 0 - 0.0336470007896423 - -0.2254139930009842 - 0.9230740070343018 - <_> - - <_> - - - - <_>16 5 3 12 -1. - <_>16 11 3 6 2. - 0 - 8.2809999585151672e-003 - -0.2889620065689087 - 0.3104619979858398 - <_> - - <_> - - - - <_>0 7 18 4 -1. - <_>6 7 6 4 3. - 0 - 0.1010439991950989 - -0.0348640009760857 - -2.7102620601654053 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - -0.0100090000778437 - 0.5971540212631226 - -0.0338310003280640 - <_> - - <_> - - - - <_>9 8 6 10 -1. - <_>11 8 2 10 3. - 0 - 7.1919998154044151e-003 - -0.4773800075054169 - 0.2268600016832352 - <_> - - <_> - - - - <_>9 15 6 9 -1. - <_>11 15 2 9 3. - 0 - 0.0249690003693104 - 0.2287770062685013 - -1.0435529947280884 - <_> - - <_> - - - - <_>3 1 18 21 -1. - <_>12 1 9 21 2. - 0 - 0.2790800034999847 - -0.2581810057163239 - 0.7678049802780151 - <_> - - <_> - - - - <_>6 8 12 7 -1. - <_>6 8 6 7 2. - 0 - -0.0442130006849766 - -0.5979800224304199 - 0.2803989946842194 - <_> - - <_> - - - - <_>8 5 6 9 -1. - <_>10 5 2 9 3. - 0 - -0.0141369998455048 - 0.7098730206489563 - -0.2564519941806793 - -3.8424909114837646 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>8 2 8 4 3. - 0 - 0.1377120018005371 - -0.5587059855461121 - 1.0953769683837891 - <_> - - <_> - - - - <_>14 7 5 12 -1. - <_>14 11 5 4 3. - 0 - 0.0344609990715981 - -0.7117189764976502 - 0.5289959907531738 - <_> - - <_> - - - - <_>5 7 5 12 -1. - <_>5 11 5 4 3. - 0 - 0.0185800008475780 - -1.1157519817352295 - 0.4059399962425232 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0250419992953539 - -0.4089249968528748 - 0.7412999868392944 - <_> - - <_> - - - - <_>0 1 6 17 -1. - <_>3 1 3 17 2. - 0 - 0.0571790002286434 - -0.3805429935455322 - 0.7364770174026489 - <_> - - <_> - - - - <_>3 1 19 9 -1. - <_>3 4 19 3 3. - 0 - 0.0149320000782609 - -0.6994550228118897 - 0.3795099854469299 - <_> - - <_> - - - - <_>3 18 12 6 -1. - <_>3 18 6 3 2. - <_>9 21 6 3 2. - 0 - 8.8900001719594002e-003 - -0.5455859899520874 - 0.3633249998092651 - <_> - - <_> - - - - <_>20 4 4 19 -1. - <_>20 4 2 19 2. - 0 - 0.0304359998553991 - -0.1012459993362427 - 0.7958589792251587 - <_> - - <_> - - - - <_>0 16 10 7 -1. - <_>5 16 5 7 2. - 0 - -0.0441600009799004 - 0.8441089987754822 - -0.3297640085220337 - <_> - - <_> - - - - <_>8 7 10 12 -1. - <_>13 7 5 6 2. - <_>8 13 5 6 2. - 0 - 0.0184610001742840 - 0.2632659971714020 - -0.9673650264739990 - <_> - - <_> - - - - <_>6 7 10 12 -1. - <_>6 7 5 6 2. - <_>11 13 5 6 2. - 0 - 0.0106149995699525 - 0.1525190025568008 - -1.0589870214462280 - <_> - - <_> - - - - <_>9 2 9 6 -1. - <_>12 2 3 6 3. - 0 - -0.0459740012884140 - -1.9918340444564819 - 0.1362909972667694 - <_> - - <_> - - - - <_>1 20 21 4 -1. - <_>8 20 7 4 3. - 0 - 0.0829000025987625 - -0.3203719854354858 - 0.6030420064926148 - <_> - - <_> - - - - <_>9 12 9 6 -1. - <_>9 14 9 2 3. - 0 - -8.9130001142621040e-003 - 0.5958660244941711 - -0.2113959938287735 - <_> - - <_> - - - - <_>7 2 9 6 -1. - <_>10 2 3 6 3. - 0 - 0.0428140014410019 - 0.0229250006377697 - -1.4679330587387085 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>13 0 2 14 2. - 0 - -8.7139997631311417e-003 - -0.4398950040340424 - 0.2043969929218292 - <_> - - <_> - - - - <_>7 0 4 14 -1. - <_>9 0 2 14 2. - 0 - -4.3390002101659775e-003 - -0.8906679749488831 - 0.1046999990940094 - <_> - - <_> - - - - <_>14 15 9 6 -1. - <_>14 17 9 2 3. - 0 - 8.0749997869133949e-003 - 0.2116419970989227 - -0.4023160040378571 - <_> - - <_> - - - - <_>2 8 18 5 -1. - <_>8 8 6 5 3. - 0 - 0.0967390015721321 - 0.0133199999108911 - -1.6085360050201416 - <_> - - <_> - - - - <_>18 3 6 11 -1. - <_>20 3 2 11 3. - 0 - -0.0305369999259710 - 1.0063740015029907 - -0.1341329962015152 - <_> - - <_> - - - - <_>6 5 11 14 -1. - <_>6 12 11 7 2. - 0 - -0.0608559995889664 - -1.4689979553222656 - 9.4240000471472740e-003 - <_> - - <_> - - - - <_>18 4 6 9 -1. - <_>18 7 6 3 3. - 0 - -0.0381620004773140 - -0.8163639903068543 - 0.2617120146751404 - <_> - - <_> - - - - <_>7 6 9 6 -1. - <_>7 8 9 2 3. - 0 - -9.6960002556443214e-003 - 0.1156169995665550 - -0.7169319987297058 - <_> - - <_> - - - - <_>18 4 6 9 -1. - <_>18 7 6 3 3. - 0 - 0.0489029996097088 - 0.1305049955844879 - -1.6448370218276978 - <_> - - <_> - - - - <_>0 4 6 9 -1. - <_>0 7 6 3 3. - 0 - -0.0416119992733002 - -1.1795840263366699 - 0.0250170007348061 - <_> - - <_> - - - - <_>9 4 9 4 -1. - <_>9 6 9 2 2. - 0 - -0.0201880000531673 - 0.6318820118904114 - -0.1049040034413338 - <_> - - <_> - - - - <_>0 22 19 2 -1. - <_>0 23 19 1 2. - 0 - -9.7900000400841236e-004 - 0.1850779950618744 - -0.5356590151786804 - <_> - - <_> - - - - <_>17 14 6 9 -1. - <_>17 17 6 3 3. - 0 - -0.0336220003664494 - -0.9312760233879089 - 0.2007150053977966 - <_> - - <_> - - - - <_>1 14 6 9 -1. - <_>1 17 6 3 3. - 0 - 0.0194559991359711 - 0.0380290001630783 - -1.0112210512161255 - <_> - - <_> - - - - <_>14 11 4 9 -1. - <_>14 11 2 9 2. - 0 - -3.1800000579096377e-004 - 0.3645769953727722 - -0.2761090099811554 - <_> - - <_> - - - - <_>6 11 4 9 -1. - <_>8 11 2 9 2. - 0 - -3.8899999344721437e-004 - 0.1966589987277985 - -0.5341050028800964 - <_> - - <_> - - - - <_>3 9 18 7 -1. - <_>9 9 6 7 3. - 0 - -0.0934960022568703 - -1.6772350072860718 - 0.2072709947824478 - <_> - - <_> - - - - <_>9 12 6 10 -1. - <_>9 17 6 5 2. - 0 - -0.0778779983520508 - -3.0760629177093506 - -0.0358039997518063 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - 0.0169479995965958 - 0.2144739925861359 - -0.7137629985809326 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - -0.0214590001851320 - -1.1468060016632080 - 0.0158559996634722 - <_> - - <_> - - - - <_>6 17 18 3 -1. - <_>6 18 18 1 3. - 0 - -0.0128659997135401 - 0.8381239771842957 - -0.0659440010786057 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>1 18 18 1 3. - 0 - 7.8220004215836525e-003 - -0.2802680134773254 - 0.7937690019607544 - <_> - - <_> - - - - <_>10 6 11 12 -1. - <_>10 12 11 6 2. - 0 - 0.1029440015554428 - 0.1783230006694794 - -0.6841220259666443 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>5 6 7 3 2. - <_>12 9 7 3 2. - 0 - -0.0374879986047745 - 0.9618999958038330 - -0.2173559963703156 - <_> - - <_> - - - - <_>5 4 15 4 -1. - <_>5 6 15 2 2. - 0 - 0.0255059991031885 - 0.0101039996370673 - 1.2461110353469849 - <_> - - <_> - - - - <_>0 0 22 2 -1. - <_>0 1 22 1 2. - 0 - 6.6700001480057836e-004 - -0.5348820090293884 - 0.1474629938602448 - <_> - - <_> - - - - <_>0 0 24 24 -1. - <_>8 0 8 24 3. - 0 - -0.2886790037155151 - 0.8217279911041260 - -0.0149480002000928 - <_> - - <_> - - - - <_>1 15 18 4 -1. - <_>10 15 9 4 2. - 0 - 0.0912949964404106 - -0.1960539966821671 - 1.0803170204162598 - <_> - - <_> - - - - <_>6 8 12 9 -1. - <_>6 11 12 3 3. - 0 - 0.1205660030245781 - -0.0238489992916584 - 1.1392610073089600 - <_> - - <_> - - - - <_>4 12 7 12 -1. - <_>4 16 7 4 3. - 0 - -0.0737750008702278 - -1.3583840131759644 - -4.2039998807013035e-003 - <_> - - <_> - - - - <_>1 2 22 6 -1. - <_>12 2 11 3 2. - <_>1 5 11 3 2. - 0 - -0.0331280007958412 - -0.6448320150375366 - 0.2414219975471497 - <_> - - <_> - - - - <_>5 20 14 3 -1. - <_>12 20 7 3 2. - 0 - -0.0439370013773441 - 0.8428540229797363 - -0.2062480002641678 - <_> - - <_> - - - - <_>0 0 24 16 -1. - <_>12 0 12 8 2. - <_>0 8 12 8 2. - 0 - 0.1811019927263260 - 0.1921209990978241 - -1.2222139835357666 - <_> - - <_> - - - - <_>3 13 18 4 -1. - <_>3 13 9 2 2. - <_>12 15 9 2 2. - 0 - -0.0118509996682405 - -0.7267739772796631 - 0.0526879988610744 - <_> - - <_> - - - - <_>2 10 22 2 -1. - <_>2 11 22 1 2. - 0 - 4.5920000411570072e-003 - -0.3630520105361939 - 0.2922379970550537 - <_> - - <_> - - - - <_>6 3 11 8 -1. - <_>6 7 11 4 2. - 0 - 7.0620002225041389e-003 - 0.0581160001456738 - -0.6716160178184509 - <_> - - <_> - - - - <_>14 5 6 6 -1. - <_>14 8 6 3 2. - 0 - -0.0237150005996227 - 0.4714210033416748 - 0.0185800008475780 - <_> - - <_> - - - - <_>0 7 24 6 -1. - <_>0 9 24 2 3. - 0 - -0.0671719983220100 - -1.1331889629364014 - 0.0237809997051954 - <_> - - <_> - - - - <_>14 0 10 10 -1. - <_>19 0 5 5 2. - <_>14 5 5 5 2. - 0 - -0.0653100013732910 - 0.9825350046157837 - 0.0283620003610849 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0227910000830889 - -0.2821370065212250 - 0.5899339914321899 - <_> - - <_> - - - - <_>0 1 24 4 -1. - <_>12 1 12 2 2. - <_>0 3 12 2 2. - 0 - -0.0190379992127419 - -0.6371150016784668 - 0.2651459872722626 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -6.8689999170601368e-003 - 0.3748730123043060 - -0.3323209881782532 - <_> - - <_> - - - - <_>5 15 16 6 -1. - <_>13 15 8 3 2. - <_>5 18 8 3 2. - 0 - -0.0401460006833076 - -1.3048729896545410 - 0.1572429984807968 - <_> - - <_> - - - - <_>3 15 16 6 -1. - <_>3 15 8 3 2. - <_>11 18 8 3 2. - 0 - -0.0405309982597828 - -2.0458049774169922 - -0.0269259996712208 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - -0.0122539997100830 - 0.7764940261840820 - -0.0429710000753403 - <_> - - <_> - - - - <_>0 13 21 10 -1. - <_>0 18 21 5 2. - 0 - -0.0272199995815754 - 0.1742440015077591 - -0.4460090100765228 - <_> - - <_> - - - - <_>13 0 6 24 -1. - <_>15 0 2 24 3. - 0 - -0.0883660018444061 - -1.5036419630050659 - 0.1428990066051483 - <_> - - <_> - - - - <_>7 4 6 11 -1. - <_>9 4 2 11 3. - 0 - -7.9159997403621674e-003 - 0.2866669893264771 - -0.3792369961738586 - <_> - - <_> - - - - <_>9 5 9 6 -1. - <_>12 5 3 6 3. - 0 - -0.0419600009918213 - 1.3846950531005859 - 0.0650269985198975 - <_> - - <_> - - - - <_>1 4 2 20 -1. - <_>1 14 2 10 2. - 0 - 0.0456629991531372 - -0.2245229929685593 - 0.7952100038528442 - <_> - - <_> - - - - <_>13 0 6 24 -1. - <_>15 0 2 24 3. - 0 - -0.1409060060977936 - -1.5879319906234741 - 0.1135900020599365 - <_> - - <_> - - - - <_>5 0 6 24 -1. - <_>7 0 2 24 3. - 0 - -0.0592160001397133 - -1.1945960521697998 - -7.1640000678598881e-003 - <_> - - <_> - - - - <_>16 7 6 14 -1. - <_>19 7 3 7 2. - <_>16 14 3 7 2. - 0 - 4.3390002101659775e-003 - -0.1552869975566864 - 0.4066449999809265 - <_> - - <_> - - - - <_>4 7 4 12 -1. - <_>6 7 2 12 2. - 0 - -2.0369999110698700e-003 - 0.2592790126800537 - -0.3836829960346222 - <_> - - <_> - - - - <_>0 5 24 14 -1. - <_>8 5 8 14 3. - 0 - 0.2751649916172028 - -0.0884979963302612 - 0.7678750157356262 - <_> - - <_> - - - - <_>5 13 10 6 -1. - <_>5 15 10 2 3. - 0 - -0.0266019999980927 - 0.7502449750900269 - -0.2262199968099594 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - 0.0409060008823872 - 0.1215860024094582 - -1.4566910266876221 - <_> - - <_> - - - - <_>2 7 6 14 -1. - <_>2 7 3 7 2. - <_>5 14 3 7 2. - 0 - 5.5320002138614655e-003 - -0.3661150038242340 - 0.2596859931945801 - <_> - - <_> - - - - <_>15 2 9 15 -1. - <_>18 2 3 15 3. - 0 - 0.0318790003657341 - -0.0750190019607544 - 0.4848479926586151 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>2 2 2 9 3. - 0 - -0.0414820015430450 - 0.7822039723396301 - -0.2199220061302185 - <_> - - <_> - - - - <_>12 2 10 14 -1. - <_>17 2 5 7 2. - <_>12 9 5 7 2. - 0 - -0.0961309969425201 - -0.8945630192756653 - 0.1468070000410080 - <_> - - <_> - - - - <_>11 6 2 18 -1. - <_>12 6 1 18 2. - 0 - -0.0115689998492599 - 0.8271409869194031 - -0.2027560025453568 - <_> - - <_> - - - - <_>9 5 15 6 -1. - <_>14 5 5 6 3. - 0 - 0.0183129999786615 - 0.0163679998368025 - 0.2730680108070374 - <_> - - <_> - - - - <_>8 6 6 10 -1. - <_>10 6 2 10 3. - 0 - -0.0341660007834435 - 1.1307320594787598 - -0.1881089955568314 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0244769994169474 - -0.5779129862785339 - 0.1581249982118607 - <_> - - <_> - - - - <_>3 3 9 7 -1. - <_>6 3 3 7 3. - 0 - 0.0489570014178753 - -0.0225649997591972 - -1.6373280286788940 - <_> - - <_> - - - - <_>6 7 14 3 -1. - <_>6 7 7 3 2. - 0 - -0.0207029990851879 - -0.5451210141181946 - 0.2408699989318848 - <_> - - <_> - - - - <_>7 7 8 6 -1. - <_>11 7 4 6 2. - 0 - -0.0230020005255938 - -1.2236540317535400 - -7.3440000414848328e-003 - <_> - - <_> - - - - <_>12 7 7 12 -1. - <_>12 13 7 6 2. - 0 - 0.0645850002765656 - 0.1469559967517853 - -0.4496749937534332 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>10 6 2 9 2. - <_>12 15 2 9 2. - 0 - 0.0126660000532866 - -0.2787390053272247 - 0.4387660026550293 - <_> - - <_> - - - - <_>16 14 6 9 -1. - <_>16 17 6 3 3. - 0 - -0.0120029998943210 - -0.2428909987211227 - 0.2535009980201721 - <_> - - <_> - - - - <_>4 0 6 13 -1. - <_>6 0 2 13 3. - 0 - -0.0264439992606640 - -0.8586480021476746 - 0.0260259993374348 - <_> - - <_> - - - - <_>2 2 21 3 -1. - <_>9 2 7 3 3. - 0 - -0.0255479998886585 - 0.6928790211677551 - -2.1160000469535589e-003 - <_> - - <_> - - - - <_>5 4 5 12 -1. - <_>5 8 5 4 3. - 0 - 0.0391150005161762 - -0.1658910065889359 - 1.5209139585494995 - <_> - - <_> - - - - <_>10 3 4 10 -1. - <_>10 8 4 5 2. - 0 - -6.0330000706017017e-003 - 0.4385690093040466 - -0.2161370068788528 - <_> - - <_> - - - - <_>8 4 5 8 -1. - <_>8 8 5 4 2. - 0 - -0.0339369997382164 - -0.9799839854240418 - 0.0221330001950264 - -3.6478610038757324 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>6 0 11 9 -1. - <_>6 3 11 3 3. - 0 - 0.0406729988753796 - -0.9047470092773438 - 0.6441059708595276 - <_> - - <_> - - - - <_>6 6 12 5 -1. - <_>10 6 4 5 3. - 0 - 0.0256099998950958 - -0.7921699881553650 - 0.5748999714851379 - <_> - - <_> - - - - <_>0 0 24 5 -1. - <_>8 0 8 5 3. - 0 - 0.1995950043201447 - -0.3009960055351257 - 1.3143850564956665 - <_> - - <_> - - - - <_>1 10 23 6 -1. - <_>1 12 23 2 3. - 0 - 0.0124049996957183 - -0.8988299965858460 - 0.2920579910278320 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>9 21 6 3 3. - 0 - 0.0392079986631870 - -0.4195519983768463 - 0.5346329808235169 - <_> - - <_> - - - - <_>3 6 21 6 -1. - <_>3 8 21 2 3. - 0 - -0.0308439992368221 - 0.4579339921474457 - -0.4462909996509552 - <_> - - <_> - - - - <_>0 5 6 12 -1. - <_>2 5 2 12 3. - 0 - -0.0355230011045933 - 0.9131050109863281 - -0.2737320065498352 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0616500005125999 - -1.4697799682617187 - 0.2036409974098206 - <_> - - <_> - - - - <_>8 7 8 10 -1. - <_>8 12 8 5 2. - 0 - -0.0117399999871850 - -1.0482879877090454 - 0.0678019970655441 - <_> - - <_> - - - - <_>5 7 15 12 -1. - <_>10 7 5 12 3. - 0 - 0.0669339969754219 - 0.2927449941635132 - -0.5228289961814880 - <_> - - <_> - - - - <_>0 17 10 6 -1. - <_>0 19 10 2 3. - 0 - -0.0206310003995895 - -1.2855139970779419 - 0.0445509999990463 - <_> - - <_> - - - - <_>14 18 9 6 -1. - <_>14 20 9 2 3. - 0 - -0.0223570000380278 - -0.8575379848480225 - 0.1843400001525879 - <_> - - <_> - - - - <_>9 6 6 16 -1. - <_>9 14 6 8 2. - 0 - 1.1500000255182385e-003 - 0.1640550047159195 - -0.6912500262260437 - <_> - - <_> - - - - <_>14 18 9 6 -1. - <_>14 20 9 2 3. - 0 - 0.0358729995787144 - 0.1575649976730347 - -0.8426259756088257 - <_> - - <_> - - - - <_>1 18 9 6 -1. - <_>1 20 9 2 3. - 0 - 0.0306599996984005 - 0.0216370001435280 - -1.3634690046310425 - <_> - - <_> - - - - <_>15 9 9 6 -1. - <_>15 11 9 2 3. - 0 - 5.5559999309480190e-003 - -0.1673700064420700 - 0.2588840126991272 - <_> - - <_> - - - - <_>0 9 9 6 -1. - <_>0 11 9 2 3. - 0 - -6.1160000041127205e-003 - -0.9727180004119873 - 0.0661000013351440 - <_> - - <_> - - - - <_>17 3 6 9 -1. - <_>19 3 2 9 3. - 0 - -0.0303169991821051 - 0.9847419857978821 - -0.0164480004459620 - <_> - - <_> - - - - <_>2 17 18 3 -1. - <_>2 18 18 1 3. - 0 - -9.7200004383921623e-003 - 0.4760470092296600 - -0.3251670002937317 - <_> - - <_> - - - - <_>3 15 21 6 -1. - <_>3 17 21 2 3. - 0 - -0.0571269989013672 - -0.9592069983482361 - 0.1993820071220398 - <_> - - <_> - - - - <_>9 17 6 6 -1. - <_>9 20 6 3 2. - 0 - 4.0059997700154781e-003 - -0.5261250138282776 - 0.2242870032787323 - <_> - - <_> - - - - <_>18 3 6 9 -1. - <_>18 6 6 3 3. - 0 - 0.0337340012192726 - 0.1707009971141815 - -1.0737580060958862 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>0 6 6 3 3. - 0 - -0.0346419997513294 - -1.1343129873275757 - 0.0365400016307831 - <_> - - <_> - - - - <_>4 0 16 10 -1. - <_>12 0 8 5 2. - <_>4 5 8 5 2. - 0 - 0.0469230003654957 - 0.2583230137825012 - -0.7153580188751221 - <_> - - <_> - - - - <_>2 0 10 16 -1. - <_>2 0 5 8 2. - <_>7 8 5 8 2. - 0 - -8.7660001590847969e-003 - 0.1964090019464493 - -0.5335509777069092 - <_> - - <_> - - - - <_>14 0 10 5 -1. - <_>14 0 5 5 2. - 0 - 0.0656279996037483 - -0.0511949993669987 - 0.9761070013046265 - <_> - - <_> - - - - <_>0 0 10 5 -1. - <_>5 0 5 5 2. - 0 - -0.0441650003194809 - 1.0631920099258423 - -0.2346259951591492 - <_> - - <_> - - - - <_>18 3 6 10 -1. - <_>18 3 3 10 2. - 0 - 0.0173049997538328 - -0.1858289986848831 - 0.4588989913463593 - <_> - - <_> - - - - <_>5 11 12 6 -1. - <_>5 11 6 3 2. - <_>11 14 6 3 2. - 0 - 0.0331359989941120 - -0.0293819997459650 - -2.6651329994201660 - <_> - - <_> - - - - <_>21 0 3 18 -1. - <_>22 0 1 18 3. - 0 - -0.0210299994796515 - 0.9997990131378174 - 0.0249370001256466 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - 0.0297839995473623 - -0.0296059995889664 - -2.1695868968963623 - <_> - - <_> - - - - <_>8 8 9 7 -1. - <_>11 8 3 7 3. - 0 - 0.0552919991314411 - -7.5599999399855733e-004 - 0.7465199828147888 - <_> - - <_> - - - - <_>7 12 8 10 -1. - <_>7 12 4 5 2. - <_>11 17 4 5 2. - 0 - -0.0335979983210564 - -1.5274159908294678 - 0.0110600003972650 - <_> - - <_> - - - - <_>21 0 3 18 -1. - <_>22 0 1 18 3. - 0 - 0.0196029990911484 - 0.0335749983787537 - 0.9952620267868042 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>12 6 2 9 2. - 0 - -0.0207870006561279 - 0.7661290168762207 - -0.2467080056667328 - <_> - - <_> - - - - <_>15 0 9 6 -1. - <_>15 2 9 2 3. - 0 - 0.0325360000133514 - 0.1626340001821518 - -0.6113430261611939 - <_> - - <_> - - - - <_>0 2 24 3 -1. - <_>0 3 24 1 3. - 0 - -0.0107880001887679 - -0.9783970117568970 - 0.0289699994027615 - <_> - - <_> - - - - <_>11 7 6 9 -1. - <_>13 7 2 9 3. - 0 - -9.9560003727674484e-003 - 0.4614579975605011 - -0.1351049989461899 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - -3.7489999085664749e-003 - 0.2545819878578186 - -0.5195559859275818 - <_> - - <_> - - - - <_>12 1 6 12 -1. - <_>14 1 2 12 3. - 0 - -0.0417799986898899 - -0.8056510090827942 - 0.1520850062370300 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>6 10 12 6 2. - 0 - -0.0342210009694099 - -1.3137799501419067 - -3.5800000187009573e-003 - <_> - - <_> - - - - <_>14 3 2 21 -1. - <_>14 3 1 21 2. - 0 - 0.0101300003007054 - 0.2017579972743988 - -0.6133959889411926 - <_> - - <_> - - - - <_>6 1 12 8 -1. - <_>6 5 12 4 2. - 0 - -0.0898490026593208 - 0.9763280153274536 - -0.2088479995727539 - <_> - - <_> - - - - <_>3 0 18 8 -1. - <_>3 4 18 4 2. - 0 - 0.0260979998856783 - -0.1880799978971481 - 0.4770579934120178 - <_> - - <_> - - - - <_>3 0 18 3 -1. - <_>3 1 18 1 3. - 0 - -3.7539999466389418e-003 - -0.6798040270805359 - 0.1128880009055138 - <_> - - <_> - - - - <_>0 13 24 4 -1. - <_>12 13 12 2 2. - <_>0 15 12 2 2. - 0 - 0.0319730006158352 - 0.1895170062780380 - -1.4967479705810547 - <_> - - <_> - - - - <_>10 5 4 9 -1. - <_>12 5 2 9 2. - 0 - 0.0193329993635416 - -0.2360990047454834 - 0.8132050037384033 - <_> - - <_> - - - - <_>11 1 6 9 -1. - <_>13 1 2 9 3. - 0 - 1.9490000559017062e-003 - 0.2483039945363998 - -0.0692119970917702 - <_> - - <_> - - - - <_>6 2 6 22 -1. - <_>8 2 2 22 3. - 0 - -0.0441469997167587 - -1.0418920516967773 - 0.0480530001223087 - <_> - - <_> - - - - <_>16 10 8 14 -1. - <_>20 10 4 7 2. - <_>16 17 4 7 2. - 0 - -0.0446819998323917 - 0.5134630203247070 - -7.3799998499453068e-003 - <_> - - <_> - - - - <_>3 4 16 15 -1. - <_>3 9 16 5 3. - 0 - -0.1075749993324280 - 1.6202019453048706 - -0.1866759955883026 - <_> - - <_> - - - - <_>16 10 8 14 -1. - <_>20 10 4 7 2. - <_>16 17 4 7 2. - 0 - -0.1284680068492889 - 2.9869480133056641 - 0.0954279974102974 - <_> - - <_> - - - - <_>0 10 8 14 -1. - <_>0 10 4 7 2. - <_>4 17 4 7 2. - 0 - -0.0447579994797707 - 0.6040530204772949 - -0.2705869972705841 - <_> - - <_> - - - - <_>10 14 11 6 -1. - <_>10 17 11 3 2. - 0 - -0.0439909994602203 - -0.6179050207138062 - 0.1599719971418381 - <_> - - <_> - - - - <_>0 7 24 9 -1. - <_>8 7 8 9 3. - 0 - -0.1226899996399880 - 0.6632720232009888 - -0.2363699972629547 - <_> - - <_> - - - - <_>13 1 4 16 -1. - <_>13 1 2 16 2. - 0 - -0.0199829991906881 - -1.1228660345077515 - 0.1961670070886612 - <_> - - <_> - - - - <_>7 1 4 16 -1. - <_>9 1 2 16 2. - 0 - -0.0155279999598861 - -1.0770269632339478 - 0.0206930004060268 - <_> - - <_> - - - - <_>5 5 16 8 -1. - <_>13 5 8 4 2. - <_>5 9 8 4 2. - 0 - -0.0489710010588169 - 0.8116829991340637 - -0.0172520000487566 - <_> - - <_> - - - - <_>0 9 6 9 -1. - <_>0 12 6 3 3. - 0 - 0.0559759996831417 - -0.0225290004163980 - -1.7356760501861572 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - -9.8580000922083855e-003 - 0.6788139939308167 - -0.0581800006330013 - <_> - - <_> - - - - <_>3 12 6 9 -1. - <_>3 15 6 3 3. - 0 - 0.0134810004383326 - 0.0578479990363121 - -0.7725530266761780 - <_> - - <_> - - - - <_>8 14 9 6 -1. - <_>8 16 9 2 3. - 0 - 6.5609999001026154e-003 - -0.1314689964056015 - 0.6705579757690430 - <_> - - <_> - - - - <_>2 13 8 10 -1. - <_>2 13 4 5 2. - <_>6 18 4 5 2. - 0 - 7.1149999275803566e-003 - -0.3788059949874878 - 0.3097899854183197 - <_> - - <_> - - - - <_>15 5 3 18 -1. - <_>15 11 3 6 3. - 0 - 4.8159998841583729e-003 - -0.5847039818763733 - 0.2560209929943085 - <_> - - <_> - - - - <_>3 5 18 3 -1. - <_>3 6 18 1 3. - 0 - 9.5319999381899834e-003 - -0.3021700084209442 - 0.4125329852104187 - <_> - - <_> - - - - <_>17 5 6 11 -1. - <_>19 5 2 11 3. - 0 - -0.0274749994277954 - 0.5915470123291016 - 0.0179639998823404 - <_> - - <_> - - - - <_>1 5 6 11 -1. - <_>3 5 2 11 3. - 0 - -0.0395199991762638 - 0.9691349864006043 - -0.2102030068635941 - <_> - - <_> - - - - <_>19 1 4 9 -1. - <_>19 1 2 9 2. - 0 - -0.0306589994579554 - 0.9115589857101440 - 0.0405500009655952 - <_> - - <_> - - - - <_>1 1 4 9 -1. - <_>3 1 2 9 2. - 0 - -1.4680000022053719e-003 - -0.6048979759216309 - 0.1696089953184128 - <_> - - <_> - - - - <_>4 15 18 9 -1. - <_>4 15 9 9 2. - 0 - 0.1907760053873062 - 0.0435150004923344 - 0.8189290165901184 - <_> - - <_> - - - - <_>6 9 12 4 -1. - <_>6 11 12 2 2. - 0 - 5.1790000870823860e-003 - -0.9361730217933655 - 0.0249370001256466 - <_> - - <_> - - - - <_>15 2 9 6 -1. - <_>15 4 9 2 3. - 0 - 0.0241260007023811 - 0.1817550063133240 - -0.3418590128421783 - <_> - - <_> - - - - <_>0 2 9 6 -1. - <_>0 4 9 2 3. - 0 - -0.0263839997351170 - -1.2912579774856567 - -3.4280000254511833e-003 - <_> - - <_> - - - - <_>15 0 6 17 -1. - <_>17 0 2 17 3. - 0 - 5.4139997810125351e-003 - -0.0462919995188713 - 0.2526960074901581 - <_> - - <_> - - - - <_>3 0 6 17 -1. - <_>5 0 2 17 3. - 0 - 0.0542160011827946 - -0.0128480000421405 - -1.4304540157318115 - <_> - - <_> - - - - <_>8 17 9 4 -1. - <_>8 19 9 2 2. - 0 - 2.3799999326001853e-004 - -0.2667669951915741 - 0.3358829915523529 - <_> - - <_> - - - - <_>6 5 3 18 -1. - <_>6 11 3 6 3. - 0 - 0.0152169996872544 - -0.5136730074882507 - 0.1300510019063950 - <_> - - <_> - - - - <_>5 2 14 12 -1. - <_>5 8 14 6 2. - 0 - 0.0170079991221428 - 0.4157589972019196 - -0.3124119937419891 - <_> - - <_> - - - - <_>10 2 3 12 -1. - <_>10 8 3 6 2. - 0 - 0.0304969996213913 - -0.2482099980115891 - 0.7082849740982056 - <_> - - <_> - - - - <_>10 7 14 15 -1. - <_>10 12 14 5 3. - 0 - 6.5430002287030220e-003 - -0.2263700067996979 - 0.1918459981679916 - <_> - - <_> - - - - <_>0 7 14 15 -1. - <_>0 12 14 5 3. - 0 - 0.1416399925947189 - 0.0652270019054413 - -0.8880950212478638 - <_> - - <_> - - - - <_>15 0 9 6 -1. - <_>15 2 9 2 3. - 0 - 0.0193380005657673 - 0.1889120042324066 - -0.2739770114421845 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>0 2 9 2 3. - 0 - -0.0173240005970001 - -0.9486669898033142 - 0.0241969991475344 - <_> - - <_> - - - - <_>12 6 6 14 -1. - <_>14 6 2 14 3. - 0 - -6.2069999985396862e-003 - 0.3693839907646179 - -0.1749490052461624 - <_> - - <_> - - - - <_>9 7 6 9 -1. - <_>11 7 2 9 3. - 0 - -0.0161090008914471 - 0.9615949988365173 - -0.2000530064105988 - <_> - - <_> - - - - <_>12 6 6 15 -1. - <_>14 6 2 15 3. - 0 - -0.1012250036001205 - -3.0699110031127930 - 0.1136379987001419 - <_> - - <_> - - - - <_>6 6 6 15 -1. - <_>8 6 2 15 3. - 0 - -7.5509999878704548e-003 - 0.2292100042104721 - -0.4564509987831116 - <_> - - <_> - - - - <_>15 3 8 9 -1. - <_>15 3 4 9 2. - 0 - 0.0442479997873306 - -3.1599999056197703e-004 - 0.3922530114650726 - <_> - - <_> - - - - <_>0 0 9 21 -1. - <_>3 0 3 21 3. - 0 - -0.1163600012660027 - 0.9523370265960693 - -0.2020159959793091 - <_> - - <_> - - - - <_>11 9 8 12 -1. - <_>11 13 8 4 3. - 0 - 4.7360002063214779e-003 - -0.0991770029067993 - 0.2037049978971481 - <_> - - <_> - - - - <_>6 7 10 12 -1. - <_>6 7 5 6 2. - <_>11 13 5 6 2. - 0 - 0.0224590003490448 - 8.7280003353953362e-003 - -1.0217070579528809 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>12 6 2 9 2. - <_>10 15 2 9 2. - 0 - -0.0121090002357960 - 0.6481260061264038 - -0.0901490002870560 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>0 3 6 3 3. - 0 - 0.0561200007796288 - -0.0367599986493587 - -1.9275590181350708 - <_> - - <_> - - - - <_>3 14 18 3 -1. - <_>3 15 18 1 3. - 0 - -8.7379999458789825e-003 - 0.6926130056381226 - -0.0683749988675117 - <_> - - <_> - - - - <_>3 14 8 10 -1. - <_>3 14 4 5 2. - <_>7 19 4 5 2. - 0 - 6.6399998031556606e-003 - -0.4056980013847351 - 0.1862570047378540 - <_> - - <_> - - - - <_>0 12 24 4 -1. - <_>12 12 12 2 2. - <_>0 14 12 2 2. - 0 - -0.0181319992989302 - -0.6451820135116577 - 0.2197639942169190 - <_> - - <_> - - - - <_>0 2 3 20 -1. - <_>1 2 1 20 3. - 0 - -0.0227189995348454 - 0.9777619838714600 - -0.1865430027246475 - <_> - - <_> - - - - <_>12 16 10 8 -1. - <_>17 16 5 4 2. - <_>12 20 5 4 2. - 0 - 0.0127050001174212 - -0.1054660007357597 - 0.3740409910678864 - <_> - - <_> - - - - <_>2 16 10 8 -1. - <_>2 16 5 4 2. - <_>7 20 5 4 2. - 0 - -0.0136829996481538 - 0.6106410026550293 - -0.2688109874725342 - -3.8700489997863770 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>7 0 10 9 -1. - <_>7 3 10 3 3. - 0 - 0.0313579998910427 - -1.0183910131454468 - 0.5752859711647034 - <_> - - <_> - - - - <_>0 0 24 3 -1. - <_>8 0 8 3 3. - 0 - 0.0930500030517578 - -0.4129750132560730 - 1.0091199874877930 - <_> - - <_> - - - - <_>3 8 15 4 -1. - <_>3 10 15 2 2. - 0 - 0.0259499996900558 - -0.5858790278434753 - 0.5660619735717773 - <_> - - <_> - - - - <_>6 5 12 6 -1. - <_>10 5 4 6 3. - 0 - 0.0164720006287098 - -0.9285749793052673 - 0.3092449903488159 - <_> - - <_> - - - - <_>5 13 14 6 -1. - <_>5 16 14 3 2. - 0 - -1.8779999809339643e-003 - 0.1195100024342537 - -1.1180130243301392 - <_> - - <_> - - - - <_>11 14 4 10 -1. - <_>11 19 4 5 2. - 0 - -9.0129999443888664e-003 - -0.5784950256347656 - 0.3315440118312836 - <_> - - <_> - - - - <_>0 6 6 7 -1. - <_>3 6 3 7 2. - 0 - 0.0225479993969202 - -0.3832510113716126 - 0.5246220231056213 - <_> - - <_> - - - - <_>18 0 6 6 -1. - <_>18 0 3 6 2. - 0 - -0.0377800017595291 - 1.1790670156478882 - -0.0341669991612434 - <_> - - <_> - - - - <_>3 1 18 3 -1. - <_>3 2 18 1 3. - 0 - -5.3799999877810478e-003 - -0.8626589775085449 - 0.1186790019273758 - <_> - - <_> - - - - <_>9 6 14 18 -1. - <_>9 12 14 6 3. - 0 - -0.0238930005580187 - -0.7495059967041016 - 0.2101140022277832 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0265219993889332 - 0.9212859869003296 - -0.2825280129909515 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - 0.0122800003737211 - 0.2666279971599579 - -0.7001360058784485 - <_> - - <_> - - - - <_>0 20 24 3 -1. - <_>8 20 8 3 3. - 0 - 0.0965949967503548 - -0.2845399975776672 - 0.7316899895668030 - <_> - - <_> - - - - <_>13 11 6 7 -1. - <_>13 11 3 7 2. - 0 - -0.0274149999022484 - -0.6149269938468933 - 0.1557620018720627 - <_> - - <_> - - - - <_>4 12 10 6 -1. - <_>4 14 10 2 3. - 0 - -0.0157670006155968 - 0.5755119919776917 - -0.3436219990253449 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - -2.1100000012665987e-003 - 0.3259969949722290 - -0.1300829946994782 - <_> - - <_> - - - - <_>5 11 6 7 -1. - <_>8 11 3 7 2. - 0 - 0.0120069999247789 - 0.0893229991197586 - -0.9602559804916382 - <_> - - <_> - - - - <_>7 4 11 12 -1. - <_>7 8 11 4 3. - 0 - -0.0154219996184111 - 0.3444949984550476 - -0.4671199917793274 - <_> - - <_> - - - - <_>6 15 10 4 -1. - <_>6 17 10 2 2. - 0 - -4.1579999960958958e-003 - 0.2369630038738251 - -0.5256329774856567 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>16 0 2 9 3. - 0 - -0.0211859997361898 - -0.7426769733428955 - 0.2170200049877167 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - -0.0170770008116961 - -0.9047179818153381 - 0.0660120025277138 - <_> - - <_> - - - - <_>11 2 4 15 -1. - <_>11 7 4 5 3. - 0 - -0.0408499985933304 - -0.3444660007953644 - 0.2150370031595230 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -8.1930002197623253e-003 - -0.9338859915733337 - 0.0504710003733635 - <_> - - <_> - - - - <_>13 18 10 6 -1. - <_>13 20 10 2 3. - 0 - -0.0192380007356405 - -0.5320370197296143 - 0.1724060028791428 - <_> - - <_> - - - - <_>2 7 6 11 -1. - <_>5 7 3 11 2. - 0 - -0.0441920012235641 - 0.9207500219345093 - -0.2214850038290024 - <_> - - <_> - - - - <_>10 14 10 9 -1. - <_>10 17 10 3 3. - 0 - -0.0623920001089573 - -0.7105380296707153 - 0.1832389980554581 - <_> - - <_> - - - - <_>8 2 4 9 -1. - <_>10 2 2 9 2. - 0 - -1.0079999919980764e-003 - -0.8706309795379639 - 0.0553300008177757 - <_> - - <_> - - - - <_>14 3 10 4 -1. - <_>14 3 5 4 2. - 0 - 0.0238700006157160 - -0.2285420000553131 - 0.5241559743881226 - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>6 6 6 3 2. - <_>12 9 6 3 2. - 0 - 0.0213910005986691 - -0.3032589852809906 - 0.5586060285568237 - <_> - - <_> - - - - <_>8 8 8 10 -1. - <_>12 8 4 5 2. - <_>8 13 4 5 2. - 0 - 0.0202549993991852 - 0.2690150141716003 - -0.7026180028915405 - <_> - - <_> - - - - <_>7 4 4 16 -1. - <_>7 12 4 8 2. - 0 - -0.0287720002233982 - -1.1835030317306519 - 0.0465120002627373 - <_> - - <_> - - - - <_>8 8 9 4 -1. - <_>8 10 9 2 2. - 0 - 3.4199999645352364e-003 - -0.5465210080146790 - 0.2596249878406525 - <_> - - <_> - - - - <_>5 2 14 9 -1. - <_>5 5 14 3 3. - 0 - 0.0569830015301704 - -0.2698290050029755 - 0.5817070007324219 - <_> - - <_> - - - - <_>3 16 19 8 -1. - <_>3 20 19 4 2. - 0 - -0.0938920006155968 - -0.9104639887809753 - 0.1967770010232925 - <_> - - <_> - - - - <_>0 0 10 8 -1. - <_>5 0 5 8 2. - 0 - 0.0176999997347593 - -0.4400329887866974 - 0.2134950011968613 - <_> - - <_> - - - - <_>5 2 16 18 -1. - <_>5 2 8 18 2. - 0 - 0.2284419983625412 - 0.0236050002276897 - 0.7717159986495972 - <_> - - <_> - - - - <_>0 11 24 11 -1. - <_>8 11 8 11 3. - 0 - -0.1828750073909760 - 0.7922859787940979 - -0.2464479953050613 - <_> - - <_> - - - - <_>3 3 18 5 -1. - <_>3 3 9 5 2. - 0 - -0.0698919966816902 - 0.8026779890060425 - -0.0360720008611679 - <_> - - <_> - - - - <_>1 16 18 3 -1. - <_>1 17 18 1 3. - 0 - 0.0152970002964139 - -0.2007230073213577 - 1.1030600070953369 - <_> - - <_> - - - - <_>5 17 18 3 -1. - <_>5 18 18 1 3. - 0 - 6.7500001750886440e-003 - -0.0459679998457432 - 0.7209450006484985 - <_> - - <_> - - - - <_>1 13 9 6 -1. - <_>1 15 9 2 3. - 0 - -0.0159830003976822 - -0.9035720229148865 - 0.0449879989027977 - <_> - - <_> - - - - <_>1 9 23 10 -1. - <_>1 14 23 5 2. - 0 - 0.0130880000069737 - 0.3529709875583649 - -0.3771060109138489 - <_> - - <_> - - - - <_>3 7 18 3 -1. - <_>3 8 18 1 3. - 0 - 0.0130610000342131 - -0.1958359926939011 - 1.1198940277099609 - <_> - - <_> - - - - <_>6 8 12 3 -1. - <_>6 8 6 3 2. - 0 - -0.0399070009589195 - -1.3998429775238037 - 0.1914509981870651 - <_> - - <_> - - - - <_>6 2 3 22 -1. - <_>7 2 1 22 3. - 0 - 0.0150269996374846 - 2.3600000422447920e-003 - -1.1611249446868896 - <_> - - <_> - - - - <_>14 17 10 6 -1. - <_>14 19 10 2 3. - 0 - -0.0205179993063211 - -0.4890809953212738 - 0.1674340069293976 - <_> - - <_> - - - - <_>1 18 10 6 -1. - <_>1 20 10 2 3. - 0 - -0.0223590005189180 - -1.2202980518341064 - -0.0119759999215603 - <_> - - <_> - - - - <_>11 3 6 12 -1. - <_>13 3 2 12 3. - 0 - -7.9150004312396049e-003 - 0.3722809851169586 - -0.0850630030035973 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>12 6 2 9 2. - 0 - 0.0152580002322793 - -0.2941260039806366 - 0.5940639972686768 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -0.0316659994423389 - -1.4395569562911987 - 0.1357879936695099 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0307739991694689 - -2.2545371055603027 - -0.0339710004627705 - <_> - - <_> - - - - <_>12 10 9 6 -1. - <_>15 10 3 6 3. - 0 - -0.0154830003157258 - 0.3770070075988770 - 0.0158479996025562 - <_> - - <_> - - - - <_>2 11 6 9 -1. - <_>5 11 3 9 2. - 0 - 0.0351670011878014 - -0.2944610118865967 - 0.5315909981727600 - <_> - - <_> - - - - <_>14 5 3 19 -1. - <_>15 5 1 19 3. - 0 - -0.0179060008376837 - -0.9978820085525513 - 0.1623599976301193 - <_> - - <_> - - - - <_>6 6 9 6 -1. - <_>6 8 9 2 3. - 0 - -3.1799999997019768e-003 - 0.0476570017635822 - -0.7524989843368530 - <_> - - <_> - - - - <_>14 5 3 19 -1. - <_>15 5 1 19 3. - 0 - 0.0157200004905462 - 0.1487379968166351 - -0.6537539958953857 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>0 6 6 3 3. - 0 - 0.0298640001565218 - -0.0149520002305508 - -1.2275190353393555 - <_> - - <_> - - - - <_>5 21 18 3 -1. - <_>5 22 18 1 3. - 0 - 2.9899999499320984e-003 - -0.1426369994878769 - 0.4327279925346375 - <_> - - <_> - - - - <_>1 10 18 4 -1. - <_>7 10 6 4 3. - 0 - 0.0847499966621399 - -0.0192809998989105 - -1.1946409940719604 - <_> - - <_> - - - - <_>13 4 8 10 -1. - <_>17 4 4 5 2. - <_>13 9 4 5 2. - 0 - -0.0587249994277954 - -1.7328219413757324 - 0.1437470018863678 - <_> - - <_> - - - - <_>7 8 9 6 -1. - <_>10 8 3 6 3. - 0 - 0.0447559989988804 - -0.2414059937000275 - 0.5401999950408936 - <_> - - <_> - - - - <_>12 9 9 8 -1. - <_>15 9 3 8 3. - 0 - 0.0403690002858639 - 5.7680001482367516e-003 - 0.5657809972763062 - <_> - - <_> - - - - <_>0 6 5 12 -1. - <_>0 10 5 4 3. - 0 - 0.0377359986305237 - 0.0381809994578362 - -0.7937039732933044 - <_> - - <_> - - - - <_>7 6 14 6 -1. - <_>14 6 7 3 2. - <_>7 9 7 3 2. - 0 - 0.0607529990375042 - 0.0764530003070831 - 1.4813209772109985 - <_> - - <_> - - - - <_>7 5 3 19 -1. - <_>8 5 1 19 3. - 0 - -0.0198320001363754 - -1.6971720457077026 - -0.0273700002580881 - <_> - - <_> - - - - <_>8 4 15 20 -1. - <_>13 4 5 20 3. - 0 - -0.1659269928932190 - 0.6297600269317627 - 0.0317629985511303 - <_> - - <_> - - - - <_>1 4 15 20 -1. - <_>6 4 5 20 3. - 0 - 0.0690149962902069 - -0.3346320092678070 - 0.3007670044898987 - <_> - - <_> - - - - <_>13 10 6 6 -1. - <_>13 10 3 6 2. - 0 - 0.0113580003380775 - 0.2274149954319000 - -0.3822470009326935 - <_> - - <_> - - - - <_>5 10 6 6 -1. - <_>8 10 3 6 2. - 0 - 1.7000000225380063e-003 - 0.1922380030155182 - -0.5273510217666626 - <_> - - <_> - - - - <_>14 2 6 14 -1. - <_>17 2 3 7 2. - <_>14 9 3 7 2. - 0 - 0.0797690004110336 - 0.0914919972419739 - 2.1049048900604248 - <_> - - <_> - - - - <_>4 2 6 14 -1. - <_>4 2 3 7 2. - <_>7 9 3 7 2. - 0 - -0.0571440011262894 - -1.7452130317687988 - -0.0409100018441677 - <_> - - <_> - - - - <_>12 4 6 7 -1. - <_>12 4 3 7 2. - 0 - 7.3830001056194305e-003 - -0.2421479970216751 - 0.3557780086994171 - <_> - - <_> - - - - <_>9 4 6 9 -1. - <_>11 4 2 9 3. - 0 - -0.0180409997701645 - 1.1779999732971191 - -0.1767670065164566 - <_> - - <_> - - - - <_>11 4 8 10 -1. - <_>11 4 4 10 2. - 0 - 0.0945030003786087 - 0.1393609941005707 - -1.2993700504302979 - <_> - - <_> - - - - <_>5 4 8 10 -1. - <_>9 4 4 10 2. - 0 - 5.4210000671446323e-003 - -0.5460860133171082 - 0.1391640007495880 - <_> - - <_> - - - - <_>8 18 10 6 -1. - <_>8 20 10 2 3. - 0 - 7.0290002040565014e-003 - -0.2159720063209534 - 0.3925809860229492 - <_> - - <_> - - - - <_>1 18 21 6 -1. - <_>1 20 21 2 3. - 0 - 0.0345159992575645 - 0.0631889998912811 - -0.7210810184478760 - <_> - - <_> - - - - <_>9 2 12 6 -1. - <_>9 2 6 6 2. - 0 - -0.0519249998033047 - 0.6866760253906250 - 0.0632729977369308 - <_> - - <_> - - - - <_>3 2 12 6 -1. - <_>9 2 6 6 2. - 0 - -0.0691620036959648 - 1.7411810159683228 - -0.1661929935216904 - <_> - - <_> - - - - <_>12 5 12 6 -1. - <_>18 5 6 3 2. - <_>12 8 6 3 2. - 0 - -5.5229999125003815e-003 - 0.3069469928741455 - -0.1666290014982224 - <_> - - <_> - - - - <_>8 8 6 9 -1. - <_>8 11 6 3 3. - 0 - 0.0685999989509583 - -0.2140540033578873 - 0.7318500280380249 - <_> - - <_> - - - - <_>2 7 20 6 -1. - <_>2 9 20 2 3. - 0 - -0.0670389980077744 - -0.7936059832572937 - 0.2052579969167709 - <_> - - <_> - - - - <_>0 5 12 6 -1. - <_>0 5 6 3 2. - <_>6 8 6 3 2. - 0 - -0.0210050009191036 - 0.3734439909458160 - -0.2961860001087189 - <_> - - <_> - - - - <_>14 14 8 10 -1. - <_>18 14 4 5 2. - <_>14 19 4 5 2. - 0 - 0.0202789995819330 - -0.0152000002563000 - 0.4055530130863190 - <_> - - <_> - - - - <_>2 14 8 10 -1. - <_>2 14 4 5 2. - <_>6 19 4 5 2. - 0 - -0.0471079982817173 - 1.2116849422454834 - -0.1746429949998856 - <_> - - <_> - - - - <_>2 11 20 13 -1. - <_>2 11 10 13 2. - 0 - 0.1876849979162216 - -0.0229090005159378 - 0.6964579820632935 - <_> - - <_> - - - - <_>6 9 12 5 -1. - <_>12 9 6 5 2. - 0 - -0.0432289987802505 - -1.0602480173110962 - -5.5599998449906707e-004 - <_> - - <_> - - - - <_>5 6 16 6 -1. - <_>13 6 8 3 2. - <_>5 9 8 3 2. - 0 - 0.0200040005147457 - -0.0327510014176369 - 0.5380510091781616 - <_> - - <_> - - - - <_>1 19 9 4 -1. - <_>1 21 9 2 2. - 0 - 8.0880001187324524e-003 - 0.0375480018556118 - -0.7476890087127686 - <_> - - <_> - - - - <_>7 5 12 5 -1. - <_>11 5 4 5 3. - 0 - 0.0271010007709265 - -0.0817900002002716 - 0.3338710069656372 - <_> - - <_> - - - - <_>3 5 14 12 -1. - <_>3 5 7 6 2. - <_>10 11 7 6 2. - 0 - -0.0917460024356842 - -1.9213509559631348 - -0.0389529988169670 - <_> - - <_> - - - - <_>9 4 9 6 -1. - <_>12 4 3 6 3. - 0 - -0.0124549996107817 - 0.4836060106754303 - 0.0181680005043745 - <_> - - <_> - - - - <_>2 6 19 3 -1. - <_>2 7 19 1 3. - 0 - 0.0146490000188351 - -0.1990669965744019 - 0.7281540036201477 - <_> - - <_> - - - - <_>18 10 6 9 -1. - <_>18 13 6 3 3. - 0 - 0.0291019994765520 - 0.1987109929323196 - -0.4921680092811585 - <_> - - <_> - - - - <_>3 7 18 2 -1. - <_>3 8 18 1 2. - 0 - 8.7799998000264168e-003 - -0.1949959993362427 - 0.7731739878654480 - <_> - - <_> - - - - <_>20 2 4 18 -1. - <_>22 2 2 9 2. - <_>20 11 2 9 2. - 0 - -0.0547400005161762 - 1.8087190389633179 - 0.0683230012655258 - <_> - - <_> - - - - <_>2 18 20 3 -1. - <_>2 19 20 1 3. - 0 - -0.0147980004549026 - 0.7806490063667297 - -0.1870959997177124 - <_> - - <_> - - - - <_>1 9 22 3 -1. - <_>1 10 22 1 3. - 0 - 0.0250129997730255 - 0.1528529971837997 - -1.6021020412445068 - <_> - - <_> - - - - <_>0 2 4 18 -1. - <_>0 2 2 9 2. - <_>2 11 2 9 2. - 0 - 0.0465480014681816 - -0.1673820018768311 - 1.1902060508728027 - <_> - - <_> - - - - <_>19 0 4 23 -1. - <_>19 0 2 23 2. - 0 - 0.0176240000873804 - -0.1028549969196320 - 0.3917590081691742 - <_> - - <_> - - - - <_>0 3 6 19 -1. - <_>3 3 3 19 2. - 0 - 0.1631959974765778 - -0.0356240011751652 - -1.6098170280456543 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>20 2 2 9 3. - 0 - 0.0131379999220371 - -0.0563590005040169 - 0.5415890216827393 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -0.0156650003045797 - 0.2806310057640076 - -0.3170860111713409 - <_> - - <_> - - - - <_>7 0 12 12 -1. - <_>13 0 6 6 2. - <_>7 6 6 6 2. - 0 - 0.0805540010333061 - 0.1264040023088455 - -1.0297529697418213 - <_> - - <_> - - - - <_>0 3 24 6 -1. - <_>0 3 12 3 2. - <_>12 6 12 3 2. - 0 - 0.0353639982640743 - 0.0207529999315739 - -0.7910559773445129 - <_> - - <_> - - - - <_>10 14 4 10 -1. - <_>10 19 4 5 2. - 0 - 0.0329869985580444 - 0.1905709952116013 - -0.8383989930152893 - <_> - - <_> - - - - <_>8 9 4 15 -1. - <_>8 14 4 5 3. - 0 - 0.0121950004249811 - 0.0737290009856224 - -0.6278070211410523 - <_> - - <_> - - - - <_>4 11 17 6 -1. - <_>4 14 17 3 2. - 0 - 0.0430659987032413 - 0.0473849996924400 - 1.5712939500808716 - <_> - - <_> - - - - <_>2 5 18 8 -1. - <_>2 5 9 4 2. - <_>11 9 9 4 2. - 0 - 0.0303269997239113 - -0.2731460034847260 - 0.3857200145721436 - <_> - - <_> - - - - <_>7 6 14 6 -1. - <_>14 6 7 3 2. - <_>7 9 7 3 2. - 0 - 0.0354930013418198 - 0.0545939989387989 - 0.5258340239524841 - <_> - - <_> - - - - <_>3 6 14 6 -1. - <_>3 6 7 3 2. - <_>10 9 7 3 2. - 0 - -0.0145969996228814 - 0.3815259933471680 - -0.2833240032196045 - <_> - - <_> - - - - <_>16 5 3 18 -1. - <_>17 5 1 18 3. - 0 - 0.0126069998368621 - 0.1545509994029999 - -0.3050149977207184 - <_> - - <_> - - - - <_>5 5 3 18 -1. - <_>6 5 1 18 3. - 0 - 0.0101720001548529 - 0.0236370004713535 - -0.8721789717674255 - <_> - - <_> - - - - <_>10 10 14 4 -1. - <_>10 12 14 2 2. - 0 - 0.0288430005311966 - 0.1609099954366684 - -0.2027759999036789 - <_> - - <_> - - - - <_>4 10 9 4 -1. - <_>4 12 9 2 2. - 0 - 5.5100000463426113e-004 - -0.6154540181159973 - 0.0809359997510910 - -3.7160909175872803 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>2 0 18 9 -1. - <_>2 3 18 3 3. - 0 - 0.0483440011739731 - -0.8490459918975830 - 0.5697439908981323 - <_> - - <_> - - - - <_>6 3 12 8 -1. - <_>10 3 4 8 3. - 0 - 0.0324600003659725 - -0.8141729831695557 - 0.4478169977664948 - <_> - - <_> - - - - <_>1 1 8 5 -1. - <_>5 1 4 5 2. - 0 - 0.0333399996161461 - -0.3642379939556122 - 0.6793739795684815 - <_> - - <_> - - - - <_>12 7 7 8 -1. - <_>12 11 7 4 2. - 0 - 6.4019998535513878e-003 - -1.1885459423065186 - 0.1923869997262955 - <_> - - <_> - - - - <_>0 12 22 4 -1. - <_>0 14 22 2 2. - 0 - -5.6889997795224190e-003 - 0.3308529853820801 - -0.7133409976959229 - <_> - - <_> - - - - <_>15 6 4 15 -1. - <_>15 11 4 5 3. - 0 - 0.0126980002969503 - -0.5099080204963684 - 0.1137629970908165 - <_> - - <_> - - - - <_>5 7 7 8 -1. - <_>5 11 7 4 2. - 0 - 6.0549997724592686e-003 - -1.0470550060272217 - 0.2022259980440140 - <_> - - <_> - - - - <_>8 18 9 4 -1. - <_>8 20 9 2 2. - 0 - 2.6420000940561295e-003 - -0.5055940151214600 - 0.3644120097160339 - <_> - - <_> - - - - <_>1 2 22 4 -1. - <_>1 4 22 2 2. - 0 - -0.0169259998947382 - -0.9954190254211426 - 0.1260219961404800 - <_> - - <_> - - - - <_>17 3 6 17 -1. - <_>19 3 2 17 3. - 0 - 0.0282359998673201 - -0.0941379964351654 - 0.5778040289878845 - <_> - - <_> - - - - <_>8 2 8 18 -1. - <_>8 11 8 9 2. - 0 - 0.0104289995506406 - 0.2327290028333664 - -0.5256969928741455 - <_> - - <_> - - - - <_>17 0 6 12 -1. - <_>20 0 3 6 2. - <_>17 6 3 6 2. - 0 - 9.8860003054141998e-003 - -0.1031629964709282 - 0.4765760004520416 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 0.0260150004178286 - -1.0920000495389104e-003 - -1.5581729412078857 - <_> - - <_> - - - - <_>15 5 9 12 -1. - <_>15 11 9 6 2. - 0 - -0.0255379993468523 - -0.6545140147209168 - 0.1884319931268692 - <_> - - <_> - - - - <_>2 22 18 2 -1. - <_>2 23 18 1 2. - 0 - -3.5310001112520695e-003 - 0.2814059853553772 - -0.4457530081272125 - <_> - - <_> - - - - <_>10 10 12 6 -1. - <_>16 10 6 3 2. - <_>10 13 6 3 2. - 0 - 9.2449998483061790e-003 - 0.1561200022697449 - -0.2137099951505661 - <_> - - <_> - - - - <_>0 1 4 11 -1. - <_>2 1 2 11 2. - 0 - 0.0210309997200966 - -0.2917029857635498 - 0.5223410129547119 - <_> - - <_> - - - - <_>20 0 4 10 -1. - <_>20 0 2 10 2. - 0 - -0.0510630011558533 - 1.3661290407180786 - 0.0304659996181726 - <_> - - <_> - - - - <_>1 3 6 17 -1. - <_>3 3 2 17 3. - 0 - -0.0623300001025200 - 1.2207020521163940 - -0.2243440002202988 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - -0.0329630002379417 - -0.8201680183410645 - 0.1453189998865128 - <_> - - <_> - - - - <_>0 13 8 9 -1. - <_>0 16 8 3 3. - 0 - -0.0374180004000664 - -1.2218099832534790 - 0.0194489993155003 - <_> - - <_> - - - - <_>16 8 6 12 -1. - <_>16 12 6 4 3. - 0 - 0.1240279972553253 - 0.1208230033516884 - -0.9872930049896240 - <_> - - <_> - - - - <_>2 8 6 12 -1. - <_>2 12 6 4 3. - 0 - -8.9229997247457504e-003 - -1.1688489913940430 - 0.0211050007492304 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0598799996078014 - -1.0689330101013184 - 0.1986020058393478 - <_> - - <_> - - - - <_>1 5 19 3 -1. - <_>1 6 19 1 3. - 0 - 6.2620001845061779e-003 - -0.3622959852218628 - 0.3800080120563507 - <_> - - <_> - - - - <_>11 8 9 7 -1. - <_>14 8 3 7 3. - 0 - -0.0176730006933212 - 0.4909409880638123 - -0.1460669934749603 - <_> - - <_> - - - - <_>3 8 12 9 -1. - <_>3 11 12 3 3. - 0 - 0.0175790004432201 - 0.5872809886932373 - -0.2777439951896668 - <_> - - <_> - - - - <_>3 6 18 3 -1. - <_>3 7 18 1 3. - 0 - 5.1560001447796822e-003 - -0.0751949995756149 - 0.6019309759140015 - <_> - - <_> - - - - <_>10 0 4 12 -1. - <_>10 6 4 6 2. - 0 - -0.0105999996885657 - 0.2763740122318268 - -0.3779430091381073 - <_> - - <_> - - - - <_>3 9 18 14 -1. - <_>3 9 9 14 2. - 0 - 0.2088409960269928 - -5.3599998354911804e-003 - 1.0317809581756592 - <_> - - <_> - - - - <_>0 0 4 9 -1. - <_>2 0 2 9 2. - 0 - -0.0264129992574453 - 0.8233640193939209 - -0.2248059958219528 - <_> - - <_> - - - - <_>12 5 4 18 -1. - <_>12 5 2 18 2. - 0 - 0.0588920004665852 - 0.1309829950332642 - -1.1853699684143066 - <_> - - <_> - - - - <_>8 5 4 18 -1. - <_>10 5 2 18 2. - 0 - -0.0115790003910661 - -0.9066780209541321 - 0.0441269986331463 - <_> - - <_> - - - - <_>10 5 6 10 -1. - <_>12 5 2 10 3. - 0 - 0.0459880009293556 - 0.0101439999416471 - 1.0740900039672852 - <_> - - <_> - - - - <_>9 4 4 11 -1. - <_>11 4 2 11 2. - 0 - -0.0228380002081394 - 1.7791990041732788 - -0.1731549948453903 - <_> - - <_> - - - - <_>4 16 18 3 -1. - <_>4 17 18 1 3. - 0 - -8.1709995865821838e-003 - 0.5738630294799805 - -0.0741060003638268 - <_> - - <_> - - - - <_>0 16 20 3 -1. - <_>0 17 20 1 3. - 0 - 3.5359999164938927e-003 - -0.3207289874553680 - 0.4018250107765198 - <_> - - <_> - - - - <_>9 9 6 12 -1. - <_>9 13 6 4 3. - 0 - 0.0494449995458126 - 0.1928800046443939 - -1.2166700363159180 - <_> - - <_> - - - - <_>8 13 8 8 -1. - <_>8 17 8 4 2. - 0 - 3.5139999818056822e-003 - 0.0695680007338524 - -0.7132369875907898 - <_> - - <_> - - - - <_>13 10 3 12 -1. - <_>13 16 3 6 2. - 0 - -0.0309960003942251 - -0.3886219859123230 - 0.1809879988431931 - <_> - - <_> - - - - <_>5 9 14 14 -1. - <_>5 9 7 7 2. - <_>12 16 7 7 2. - 0 - 0.0864529982209206 - -0.0257929991930723 - -1.5453219413757324 - <_> - - <_> - - - - <_>0 0 24 10 -1. - <_>12 0 12 5 2. - <_>0 5 12 5 2. - 0 - -0.1365260034799576 - -1.9199420213699341 - 0.1661330014467239 - <_> - - <_> - - - - <_>1 11 18 2 -1. - <_>1 12 18 1 2. - 0 - -5.7689999230206013e-003 - -1.2822589874267578 - -0.0159079991281033 - <_> - - <_> - - - - <_>19 5 5 12 -1. - <_>19 9 5 4 3. - 0 - -0.0178999993950129 - -0.4040989875793457 - 0.2359160035848618 - <_> - - <_> - - - - <_>0 5 5 12 -1. - <_>0 9 5 4 3. - 0 - -0.0199699997901917 - -0.7289190292358398 - 0.0562350004911423 - <_> - - <_> - - - - <_>16 6 8 18 -1. - <_>20 6 4 9 2. - <_>16 15 4 9 2. - 0 - -0.0574930012226105 - 0.5783079862594605 - -0.0157960001379251 - <_> - - <_> - - - - <_>0 6 8 18 -1. - <_>0 6 4 9 2. - <_>4 15 4 9 2. - 0 - -0.0830560028553009 - 0.9151160120964050 - -0.2112140059471130 - <_> - - <_> - - - - <_>12 5 12 12 -1. - <_>18 5 6 6 2. - <_>12 11 6 6 2. - 0 - -0.0537710003554821 - -0.5193129777908325 - 0.1857600063085556 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>9 6 2 9 3. - 0 - -8.3670001477003098e-003 - 0.2410970032215118 - -0.3964860141277313 - <_> - - <_> - - - - <_>9 13 6 11 -1. - <_>11 13 2 11 3. - 0 - 0.0554069988429546 - 0.1677120029926300 - -2.5664970874786377 - <_> - - <_> - - - - <_>0 5 12 12 -1. - <_>0 5 6 6 2. - <_>6 11 6 6 2. - 0 - -0.0671809986233711 - -1.3658570051193237 - -0.0142320003360510 - <_> - - <_> - - - - <_>1 2 23 3 -1. - <_>1 3 23 1 3. - 0 - -0.0239000003784895 - -1.7084569931030273 - 0.1650779992341995 - <_> - - <_> - - - - <_>1 15 19 3 -1. - <_>1 16 19 1 3. - 0 - 5.5949999950826168e-003 - -0.3137399852275848 - 0.3283790051937103 - <_> - - <_> - - - - <_>13 17 11 4 -1. - <_>13 19 11 2 2. - 0 - 0.0212949998676777 - 0.1495340019464493 - -0.4857980012893677 - <_> - - <_> - - - - <_>0 13 8 5 -1. - <_>4 13 4 5 2. - 0 - -0.0246130004525185 - 0.7434639930725098 - -0.2230519950389862 - <_> - - <_> - - - - <_>12 10 10 4 -1. - <_>12 10 5 4 2. - 0 - -0.0196260008960962 - -0.4091829955577850 - 0.1889320015907288 - <_> - - <_> - - - - <_>4 6 9 9 -1. - <_>4 9 9 3 3. - 0 - -0.0532660000026226 - 0.8138160109519959 - -0.2085369974374771 - <_> - - <_> - - - - <_>15 14 9 6 -1. - <_>15 16 9 2 3. - 0 - 7.1290000341832638e-003 - 0.3299610018730164 - -0.5993739962577820 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>1 14 9 2 3. - 0 - -0.0224869996309280 - -1.2551610469818115 - -0.0204130001366138 - <_> - - <_> - - - - <_>3 10 20 8 -1. - <_>13 10 10 4 2. - <_>3 14 10 4 2. - 0 - -0.0823109969496727 - 1.3821430206298828 - 0.0593089982867241 - <_> - - <_> - - - - <_>2 0 9 18 -1. - <_>5 0 3 18 3. - 0 - 0.1309700012207031 - -0.0358439981937408 - -1.5396369695663452 - <_> - - <_> - - - - <_>13 11 9 10 -1. - <_>16 11 3 10 3. - 0 - 0.0142930001020432 - -0.1847520023584366 - 0.3745500147342682 - <_> - - <_> - - - - <_>1 2 8 5 -1. - <_>5 2 4 5 2. - 0 - 6.3479999080300331e-003 - -0.4490109980106354 - 0.1387699991464615 - <_> - - <_> - - - - <_>3 4 21 6 -1. - <_>10 4 7 6 3. - 0 - -0.0460550002753735 - 0.6783260107040405 - -0.0170719996094704 - <_> - - <_> - - - - <_>7 0 10 14 -1. - <_>7 0 5 7 2. - <_>12 7 5 7 2. - 0 - 0.0576939992606640 - -0.0119559997692704 - -1.2261159420013428 - <_> - - <_> - - - - <_>12 17 12 4 -1. - <_>12 19 12 2 2. - 0 - -6.0609998181462288e-003 - 0.3395859897136688 - 6.2800000887364149e-004 - <_> - - <_> - - - - <_>0 6 23 4 -1. - <_>0 8 23 2 2. - 0 - -0.0521630011498928 - -1.0621069669723511 - -0.0137799996882677 - <_> - - <_> - - - - <_>13 10 8 10 -1. - <_>17 10 4 5 2. - <_>13 15 4 5 2. - 0 - 0.0465729981660843 - 0.1453880071640015 - -1.2384550571441650 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - 7.5309998355805874e-003 - -0.2446770071983337 - 0.5137709975242615 - <_> - - <_> - - - - <_>15 16 9 4 -1. - <_>15 18 9 2 2. - 0 - 0.0216150004416704 - 0.1307259947061539 - -0.7099679708480835 - <_> - - <_> - - - - <_>0 16 9 4 -1. - <_>0 18 9 2 2. - 0 - -0.0178640000522137 - -1.0474660396575928 - 4.9599999329075217e-004 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - -0.0371950007975101 - -1.5126730203628540 - 0.1480139940977097 - <_> - - <_> - - - - <_>5 11 6 6 -1. - <_>8 11 3 6 2. - 0 - -3.1100001069717109e-004 - 0.1397150009870529 - -0.4686749875545502 - <_> - - <_> - - - - <_>0 3 24 6 -1. - <_>12 3 12 3 2. - <_>0 6 12 3 2. - 0 - 0.0250429995357990 - 0.2863200008869171 - -0.4179469943046570 - <_> - - <_> - - - - <_>2 4 18 3 -1. - <_>2 5 18 1 3. - 0 - 9.3449996784329414e-003 - -0.2733620107173920 - 0.4344469904899597 - <_> - - <_> - - - - <_>0 0 24 4 -1. - <_>12 0 12 2 2. - <_>0 2 12 2 2. - 0 - 0.0323639996349812 - 0.1843889951705933 - -0.9501929879188538 - <_> - - <_> - - - - <_>1 16 18 3 -1. - <_>1 17 18 1 3. - 0 - -6.2299999408423901e-003 - 0.3258199989795685 - -0.3081560134887695 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - 0.0514889992773533 - 0.1141600012779236 - -1.9795479774475098 - <_> - - <_> - - - - <_>0 15 9 6 -1. - <_>0 17 9 2 3. - 0 - -0.0264490004628897 - -1.1067299842834473 - -8.5519999265670776e-003 - <_> - - <_> - - - - <_>6 17 18 3 -1. - <_>6 18 18 1 3. - 0 - -0.0154200000688434 - 0.8013870120048523 - -0.0320350006222725 - <_> - - <_> - - - - <_>8 8 6 10 -1. - <_>10 8 2 10 3. - 0 - 0.0194569993764162 - -0.2644949853420258 - 0.3875389993190765 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - 0.0336209982633591 - 0.0160520002245903 - 0.5884090065956116 - <_> - - <_> - - - - <_>8 8 5 8 -1. - <_>8 12 5 4 2. - 0 - 0.0289060007780790 - 0.0152160003781319 - -0.9472360014915466 - <_> - - <_> - - - - <_>12 8 6 8 -1. - <_>12 12 6 4 2. - 0 - 2.0300000323913991e-004 - -0.3076600134372711 - 0.2123589962720871 - <_> - - <_> - - - - <_>6 5 6 11 -1. - <_>8 5 2 11 3. - 0 - -0.0491419993340969 - -1.6058609485626221 - -0.0310949999839067 - <_> - - <_> - - - - <_>13 6 8 9 -1. - <_>13 9 8 3 3. - 0 - 0.0764259994029999 - 0.0747589990496635 - 1.1639410257339478 - <_> - - <_> - - - - <_>1 7 21 6 -1. - <_>1 9 21 2 3. - 0 - 0.0238979998975992 - -6.4320000819861889e-003 - -1.1150749921798706 - <_> - - <_> - - - - <_>15 5 3 12 -1. - <_>15 11 3 6 2. - 0 - 3.8970001041889191e-003 - -0.2410569936037064 - 0.2085890024900436 - <_> - - <_> - - - - <_>6 9 11 12 -1. - <_>6 13 11 4 3. - 0 - -0.0894450023770332 - 1.9157789945602417 - -0.1572110056877136 - <_> - - <_> - - - - <_>13 8 10 8 -1. - <_>18 8 5 4 2. - <_>13 12 5 4 2. - 0 - -0.0150089999660850 - -0.2517409920692444 - 0.1817989945411682 - <_> - - <_> - - - - <_>5 8 12 3 -1. - <_>11 8 6 3 2. - 0 - -0.0111459996551275 - -0.6934949755668640 - 0.0449279993772507 - <_> - - <_> - - - - <_>6 11 18 4 -1. - <_>12 11 6 4 3. - 0 - 0.0945789963006973 - 0.1810210049152374 - -0.7497860193252564 - <_> - - <_> - - - - <_>0 0 22 22 -1. - <_>0 11 22 11 2. - 0 - 0.5503889918327332 - -0.0309740006923676 - -1.6746139526367188 - <_> - - <_> - - - - <_>11 2 6 8 -1. - <_>11 6 6 4 2. - 0 - 0.0413810014724731 - 0.0639100000262260 - 0.7656120061874390 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - 0.0247719995677471 - 0.0113800000399351 - -0.8855940103530884 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - 0.0509990006685257 - 0.1489029973745346 - -2.4634211063385010 - <_> - - <_> - - - - <_>8 3 6 14 -1. - <_>8 3 3 7 2. - <_>11 10 3 7 2. - 0 - -0.0168939996510744 - 0.3887099921703339 - -0.2988030016422272 - <_> - - <_> - - - - <_>3 10 18 8 -1. - <_>9 10 6 8 3. - 0 - -0.1216230019927025 - -1.5542800426483154 - 0.1630080044269562 - <_> - - <_> - - - - <_>10 0 3 14 -1. - <_>10 7 3 7 2. - 0 - -3.6049999762326479e-003 - 0.2184280008077622 - -0.3731209933757782 - <_> - - <_> - - - - <_>4 3 16 20 -1. - <_>4 13 16 10 2. - 0 - 0.1157540008425713 - -0.0470610000193119 - 0.5940369963645935 - <_> - - <_> - - - - <_>9 4 6 10 -1. - <_>11 4 2 10 3. - 0 - 0.0369039997458458 - -0.2550860047340393 - 0.5539730191230774 - <_> - - <_> - - - - <_>5 0 16 4 -1. - <_>5 2 16 2 2. - 0 - 0.0114839999005198 - -0.1812949925661087 - 0.4068279862403870 - <_> - - <_> - - - - <_>2 5 18 4 -1. - <_>8 5 6 4 3. - 0 - -0.0202339999377728 - 0.5431119799613953 - -0.2382239997386932 - <_> - - <_> - - - - <_>13 0 6 9 -1. - <_>15 0 2 9 3. - 0 - -0.0287650004029274 - -0.6917229890823364 - 0.1594330072402954 - <_> - - <_> - - - - <_>8 4 8 5 -1. - <_>12 4 4 5 2. - 0 - -5.8320001699030399e-003 - 0.2944779992103577 - -0.3400599956512451 - <_> - - <_> - - - - <_>12 10 10 4 -1. - <_>12 10 5 4 2. - 0 - -0.0554689988493919 - 0.9220079779624939 - 0.0940930023789406 - <_> - - <_> - - - - <_>2 10 10 4 -1. - <_>7 10 5 4 2. - 0 - -0.0148010002449155 - -0.7953969836235046 - 0.0315219983458519 - <_> - - <_> - - - - <_>7 11 12 5 -1. - <_>11 11 4 5 3. - 0 - -7.0940000005066395e-003 - 0.3309600055217743 - -0.0508869998157024 - <_> - - <_> - - - - <_>3 10 8 10 -1. - <_>3 10 4 5 2. - <_>7 15 4 5 2. - 0 - -0.0451240018010139 - -1.3719749450683594 - -0.0214089993387461 - <_> - - <_> - - - - <_>11 12 9 8 -1. - <_>14 12 3 8 3. - 0 - 0.0643770024180412 - 0.0639019981026649 - 0.9147830009460449 - <_> - - <_> - - - - <_>0 21 24 3 -1. - <_>8 21 8 3 3. - 0 - -0.0147270001471043 - 0.3605059981346130 - -0.2861450016498566 - <_> - - <_> - - - - <_>3 20 18 4 -1. - <_>9 20 6 4 3. - 0 - 0.0450070016086102 - -0.1561969965696335 - 0.5316029787063599 - <_> - - <_> - - - - <_>1 15 9 6 -1. - <_>1 17 9 2 3. - 0 - -1.1330000124871731e-003 - 0.1342290043830872 - -0.4435890018939972 - <_> - - <_> - - - - <_>11 17 10 4 -1. - <_>11 19 10 2 2. - 0 - 0.0494510009884834 - 0.1057180017232895 - -2.5589139461517334 - <_> - - <_> - - - - <_>9 12 4 12 -1. - <_>9 18 4 6 2. - 0 - 0.0291029997169971 - -0.0100880004465580 - -1.1073939800262451 - <_> - - <_> - - - - <_>9 6 9 6 -1. - <_>12 6 3 6 3. - 0 - 0.0347860008478165 - -2.7719999197870493e-003 - 0.5670099854469299 - <_> - - <_> - - - - <_>1 13 6 9 -1. - <_>1 16 6 3 3. - 0 - -6.1309998854994774e-003 - -0.4688940048217773 - 0.1263639926910400 - <_> - - <_> - - - - <_>6 16 12 4 -1. - <_>6 18 12 2 2. - 0 - 0.0155250001698732 - -8.4279999136924744e-003 - 0.8746920228004456 - <_> - - <_> - - - - <_>1 5 20 3 -1. - <_>1 6 20 1 3. - 0 - 2.9249999206513166e-003 - -0.3443430066108704 - 0.2085160017013550 - <_> - - <_> - - - - <_>8 1 9 9 -1. - <_>8 4 9 3 3. - 0 - -0.0535710006952286 - 1.4982949495315552 - 0.0573280006647110 - <_> - - <_> - - - - <_>2 19 9 4 -1. - <_>2 21 9 2 2. - 0 - -0.0192179996520281 - -0.9923409819602966 - -9.3919998034834862e-003 - <_> - - <_> - - - - <_>11 1 4 18 -1. - <_>11 7 4 6 3. - 0 - -0.0552829988300800 - -0.5768229961395264 - 0.1686059981584549 - <_> - - <_> - - - - <_>7 2 8 12 -1. - <_>7 2 4 6 2. - <_>11 8 4 6 2. - 0 - 0.0563360005617142 - -0.0337750017642975 - -1.3889650106430054 - <_> - - <_> - - - - <_>11 10 9 8 -1. - <_>14 10 3 8 3. - 0 - -0.0238240007311106 - 0.4018209874629974 - 1.8360000103712082e-003 - <_> - - <_> - - - - <_>5 11 12 5 -1. - <_>9 11 4 5 3. - 0 - 1.7810000572353601e-003 - 0.1814599931240082 - -0.4174340069293976 - <_> - - <_> - - - - <_>11 9 9 6 -1. - <_>14 9 3 6 3. - 0 - -0.0376890003681183 - 0.5468310117721558 - 0.0182199999690056 - <_> - - <_> - - - - <_>5 10 6 9 -1. - <_>7 10 2 9 3. - 0 - -0.0241449996829033 - 0.6835209727287293 - -0.1965020000934601 - -3.5645289421081543 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>4 7 5 12 -1. - <_>4 11 5 4 3. - 0 - 0.0274449996650219 - -0.8998420238494873 - 0.5187649726867676 - <_> - - <_> - - - - <_>2 0 21 6 -1. - <_>9 0 7 6 3. - 0 - 0.1155410036444664 - -0.5652440190315247 - 0.7055130004882813 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -0.0222970005124807 - 0.3607999980449677 - -0.6686459779739380 - <_> - - <_> - - - - <_>9 0 6 15 -1. - <_>11 0 2 15 3. - 0 - 0.0133250001817942 - -0.5557339787483215 - 0.3578999936580658 - <_> - - <_> - - - - <_>2 2 18 2 -1. - <_>2 3 18 1 2. - 0 - -3.8060001097619534e-003 - -1.0713000297546387 - 0.1885000020265579 - <_> - - <_> - - - - <_>8 17 8 6 -1. - <_>8 20 8 3 2. - 0 - -2.6819999329745770e-003 - -0.7158430218696594 - 0.2634449899196625 - <_> - - <_> - - - - <_>3 0 18 2 -1. - <_>3 1 18 1 2. - 0 - 3.3819999080151320e-003 - -0.4693079888820648 - 0.2665840089321137 - <_> - - <_> - - - - <_>8 0 9 6 -1. - <_>11 0 3 6 3. - 0 - 0.0376430004835129 - 0.2109870016574860 - -1.0804339647293091 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -0.0138619998469949 - 0.6691200137138367 - -0.2794280052185059 - <_> - - <_> - - - - <_>6 7 12 5 -1. - <_>10 7 4 5 3. - 0 - -2.7350001037120819e-003 - -0.9533230066299439 - 0.2405129969120026 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>2 3 2 9 3. - 0 - -0.0383369997143745 - 0.8143280148506165 - -0.2491939961910248 - <_> - - <_> - - - - <_>20 2 4 9 -1. - <_>20 2 2 9 2. - 0 - -0.0346979983150959 - 1.2330100536346436 - 6.8600000813603401e-003 - <_> - - <_> - - - - <_>0 2 4 9 -1. - <_>2 2 2 9 2. - 0 - 0.0233609993010759 - -0.3079470098018646 - 0.7071449756622315 - <_> - - <_> - - - - <_>0 1 24 4 -1. - <_>12 1 12 2 2. - <_>0 3 12 2 2. - 0 - 0.0350579991936684 - 0.2120590060949326 - -1.4399830102920532 - <_> - - <_> - - - - <_>0 16 9 6 -1. - <_>0 18 9 2 3. - 0 - -0.0132569996640086 - -0.9026070237159729 - 0.0486100018024445 - <_> - - <_> - - - - <_>14 13 9 6 -1. - <_>14 15 9 2 3. - 0 - 0.0127400001510978 - 0.2265519946813583 - -0.4464380145072937 - <_> - - <_> - - - - <_>0 15 19 3 -1. - <_>0 16 19 1 3. - 0 - 3.6400000099092722e-003 - -0.3981789946556091 - 0.3466539978981018 - <_> - - <_> - - - - <_>1 5 22 12 -1. - <_>12 5 11 6 2. - <_>1 11 11 6 2. - 0 - 0.1006470024585724 - 0.1838359981775284 - -1.3410769701004028 - <_> - - <_> - - - - <_>5 13 6 6 -1. - <_>8 13 3 6 2. - 0 - 0. - 0.1553640067577362 - -0.5158249735832214 - <_> - - <_> - - - - <_>4 2 20 3 -1. - <_>4 3 20 1 3. - 0 - 0.0117089999839664 - 0.2165140062570572 - -0.7270519733428955 - <_> - - <_> - - - - <_>8 14 6 10 -1. - <_>10 14 2 10 3. - 0 - -0.0359649993479252 - -1.4789500236511230 - -0.0243170000612736 - <_> - - <_> - - - - <_>6 12 16 6 -1. - <_>14 12 8 3 2. - <_>6 15 8 3 2. - 0 - -0.0212360005825758 - -0.1684409976005554 - 0.1952659934759140 - <_> - - <_> - - - - <_>2 13 8 9 -1. - <_>2 16 8 3 3. - 0 - 0.0148740001022816 - 0.0373359993100166 - -0.8755729794502258 - <_> - - <_> - - - - <_>11 8 6 14 -1. - <_>14 8 3 7 2. - <_>11 15 3 7 2. - 0 - -5.1409997977316380e-003 - 0.3346650004386902 - -0.2410970032215118 - <_> - - <_> - - - - <_>2 12 16 6 -1. - <_>2 12 8 3 2. - <_>10 15 8 3 2. - 0 - 0.0234500002115965 - 5.5320002138614655e-003 - -1.2509720325469971 - <_> - - <_> - - - - <_>5 16 16 8 -1. - <_>5 20 16 4 2. - 0 - -0.0250620003789663 - 0.4521239995956421 - -0.0844699963927269 - <_> - - <_> - - - - <_>9 1 4 12 -1. - <_>9 7 4 6 2. - 0 - -7.7400001464411616e-004 - 0.1524990051984787 - -0.4848650097846985 - <_> - - <_> - - - - <_>8 2 8 10 -1. - <_>12 2 4 5 2. - <_>8 7 4 5 2. - 0 - -0.0404839999973774 - -1.3024920225143433 - 0.1798350065946579 - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>6 6 6 3 2. - <_>12 9 6 3 2. - 0 - 0.0281709991395473 - -0.2441090047359467 - 0.6227110028266907 - <_> - - <_> - - - - <_>10 7 6 9 -1. - <_>12 7 2 9 3. - 0 - 0.0456929989159107 - 0.0281220003962517 - 0.9239439964294434 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - 0.0397070012986660 - -0.2233279943466187 - 0.7767400145530701 - <_> - - <_> - - - - <_>18 8 6 9 -1. - <_>18 11 6 3 3. - 0 - 0.0505170002579689 - 0.2031999975442886 - -1.0895930528640747 - <_> - - <_> - - - - <_>2 12 6 6 -1. - <_>5 12 3 6 2. - 0 - -0.0172669999301434 - 0.6859840154647827 - -0.2330449968576431 - <_> - - <_> - - - - <_>3 21 21 3 -1. - <_>10 21 7 3 3. - 0 - 0.0801860019564629 - -0.0102920001372695 - 0.6188110113143921 - <_> - - <_> - - - - <_>2 0 16 6 -1. - <_>2 3 16 3 2. - 0 - 0.0976760014891624 - -0.2007029950618744 - 1.0088349580764771 - <_> - - <_> - - - - <_>13 6 7 6 -1. - <_>13 9 7 3 2. - 0 - -0.0155720002949238 - 0.4761529862880707 - 0.0456239990890026 - <_> - - <_> - - - - <_>6 4 4 14 -1. - <_>6 11 4 7 2. - 0 - -0.0153050003573298 - -1.1077369451522827 - 4.5239999890327454e-003 - <_> - - <_> - - - - <_>9 7 6 9 -1. - <_>11 7 2 9 3. - 0 - -0.0164850000292063 - 1.0152939558029175 - 0.0163279995322227 - <_> - - <_> - - - - <_>7 8 6 14 -1. - <_>7 8 3 7 2. - <_>10 15 3 7 2. - 0 - -0.0261419992893934 - 0.4172329902648926 - -0.2864550054073334 - <_> - - <_> - - - - <_>18 8 4 16 -1. - <_>18 16 4 8 2. - 0 - 8.8679995387792587e-003 - 0.2140499949455261 - -0.1677280068397522 - <_> - - <_> - - - - <_>9 14 6 10 -1. - <_>11 14 2 10 3. - 0 - -0.0268869996070862 - -1.1564220190048218 - -0.0103240003809333 - <_> - - <_> - - - - <_>6 11 12 5 -1. - <_>10 11 4 5 3. - 0 - 7.7789998613297939e-003 - 0.3535949885845184 - -0.2961130142211914 - <_> - - <_> - - - - <_>0 12 23 3 -1. - <_>0 13 23 1 3. - 0 - -0.0159740000963211 - -1.5374109745025635 - -0.0299580004066229 - <_> - - <_> - - - - <_>13 0 6 12 -1. - <_>15 0 2 12 3. - 0 - 0.0208669994026423 - 0.2024410068988800 - -0.7127019762992859 - <_> - - <_> - - - - <_>0 10 12 5 -1. - <_>4 10 4 5 3. - 0 - 0.0854820013046265 - -0.0259329993277788 - -1.5156569480895996 - <_> - - <_> - - - - <_>13 2 10 4 -1. - <_>13 4 10 2 2. - 0 - 0.0238729994744062 - 0.1680340021848679 - -0.3880620002746582 - <_> - - <_> - - - - <_>5 0 6 12 -1. - <_>7 0 2 12 3. - 0 - -0.0391050018370152 - -1.1958349943161011 - -0.0203610006719828 - <_> - - <_> - - - - <_>11 6 9 6 -1. - <_>14 6 3 6 3. - 0 - -0.0779469981789589 - -1.0898950099945068 - 0.1453029960393906 - <_> - - <_> - - - - <_>4 6 9 6 -1. - <_>7 6 3 6 3. - 0 - -0.0168760009109974 - 0.2804970145225525 - -0.4133630096912384 - <_> - - <_> - - - - <_>6 11 18 13 -1. - <_>12 11 6 13 3. - 0 - 0.1187560036778450 - -0.0434909984469414 - 0.4126369953155518 - <_> - - <_> - - - - <_>0 11 18 13 -1. - <_>6 11 6 13 3. - 0 - 0.1562419980764389 - -0.2642959952354431 - 0.5512779951095581 - <_> - - <_> - - - - <_>12 16 12 6 -1. - <_>16 16 4 6 3. - 0 - -0.0459080003201962 - 0.6018919944763184 - 0.0189210008829832 - <_> - - <_> - - - - <_>0 6 21 3 -1. - <_>0 7 21 1 3. - 0 - -0.0103099998086691 - 0.3815299868583679 - -0.2950789928436279 - <_> - - <_> - - - - <_>12 16 12 6 -1. - <_>16 16 4 6 3. - 0 - 0.0957690030336380 - 0.1324650049209595 - -0.4626680016517639 - <_> - - <_> - - - - <_>5 7 6 14 -1. - <_>5 14 6 7 2. - 0 - 0.0136869996786118 - 0.1173869967460632 - -0.5166410207748413 - <_> - - <_> - - - - <_>5 10 19 2 -1. - <_>5 11 19 1 2. - 0 - 2.3990001063793898e-003 - -0.3400759994983673 - 0.2095350027084351 - <_> - - <_> - - - - <_>5 4 14 4 -1. - <_>5 6 14 2 2. - 0 - 0.0332649983465672 - -0.1705279946327210 - 1.4366799592971802 - <_> - - <_> - - - - <_>3 18 18 4 -1. - <_>9 18 6 4 3. - 0 - -0.0332060009241104 - 0.6129570007324219 - -0.0415499992668629 - <_> - - <_> - - - - <_>7 0 4 9 -1. - <_>9 0 2 9 2. - 0 - 2.7979998849332333e-003 - -0.4855430126190186 - 0.1337269991636276 - <_> - - <_> - - - - <_>13 3 11 4 -1. - <_>13 5 11 2 2. - 0 - -0.0657920017838478 - -4.0257668495178223 - 0.1087670028209686 - <_> - - <_> - - - - <_>2 0 9 6 -1. - <_>5 0 3 6 3. - 0 - 2.1430000197142363e-003 - -0.3917999863624573 - 0.2242709994316101 - <_> - - <_> - - - - <_>19 1 4 23 -1. - <_>19 1 2 23 2. - 0 - 0.0223639998584986 - -0.0864299982786179 - 0.3778519928455353 - <_> - - <_> - - - - <_>1 1 4 23 -1. - <_>3 1 2 23 2. - 0 - -0.0574100017547607 - 1.1454069614410400 - -0.1973659992218018 - <_> - - <_> - - - - <_>5 16 18 3 -1. - <_>5 17 18 1 3. - 0 - 6.6550001502037048e-003 - -0.0211050007492304 - 0.5845339894294739 - <_> - - <_> - - - - <_>0 3 11 4 -1. - <_>0 5 11 2 2. - 0 - 0.0123269995674491 - 0.0378170013427734 - -0.6698700189590454 - <_> - - <_> - - - - <_>2 16 20 3 -1. - <_>2 17 20 1 3. - 0 - -8.1869997084140778e-003 - 0.5636600255966187 - -0.0768779963254929 - <_> - - <_> - - - - <_>5 3 13 4 -1. - <_>5 5 13 2 2. - 0 - 0.0366810001432896 - -0.1734330058097839 - 1.1670149564743042 - <_> - - <_> - - - - <_>1 9 22 15 -1. - <_>1 9 11 15 2. - 0 - -0.4022040069103241 - 1.2640819549560547 - 0.0433989986777306 - <_> - - <_> - - - - <_>3 4 14 3 -1. - <_>10 4 7 3 2. - 0 - -0.0221260003745556 - 0.6697810292243958 - -0.2160529941320419 - <_> - - <_> - - - - <_>8 7 10 4 -1. - <_>8 7 5 4 2. - 0 - -0.0131569998338819 - -0.4119859933853149 - 0.2021500021219254 - <_> - - <_> - - - - <_>6 7 10 4 -1. - <_>11 7 5 4 2. - 0 - -0.0128600001335144 - -0.9158269762992859 - 0.0392329990863800 - <_> - - <_> - - - - <_>10 4 6 9 -1. - <_>12 4 2 9 3. - 0 - 0.0216279998421669 - 3.8719999138265848e-003 - 0.3566820025444031 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>4 12 3 6 3. - 0 - 0.0118960002437234 - -0.3730390071868897 - 0.1923509985208511 - <_> - - <_> - - - - <_>8 3 8 10 -1. - <_>12 3 4 5 2. - <_>8 8 4 5 2. - 0 - -0.0195489991456270 - -0.4237489998340607 - 0.2442959994077683 - <_> - - <_> - - - - <_>3 6 16 6 -1. - <_>3 6 8 3 2. - <_>11 9 8 3 2. - 0 - 0.0644449964165688 - -0.1655890047550201 - 1.2697030305862427 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>5 9 14 3 2. - 0 - 0.1089849993586540 - 0.1489430069923401 - -2.1534640789031982 - <_> - - <_> - - - - <_>4 3 9 6 -1. - <_>4 5 9 2 3. - 0 - -0.0340779982507229 - 1.3779460191726685 - -0.1619849950075150 - <_> - - <_> - - - - <_>6 3 18 2 -1. - <_>6 4 18 1 2. - 0 - -3.7489999085664749e-003 - -0.3382860124111176 - 0.2115290015935898 - <_> - - <_> - - - - <_>7 6 9 6 -1. - <_>10 6 3 6 3. - 0 - -0.0109719997271895 - 0.7651789784431458 - -0.1969259977340698 - <_> - - <_> - - - - <_>0 1 24 3 -1. - <_>0 2 24 1 3. - 0 - -0.0114850001409650 - -0.6927120089530945 - 0.2165710031986237 - <_> - - <_> - - - - <_>0 17 10 6 -1. - <_>0 19 10 2 3. - 0 - 0.0259840004146099 - -0.0119839999824762 - -0.9969729781150818 - <_> - - <_> - - - - <_>3 18 18 3 -1. - <_>3 19 18 1 3. - 0 - 4.2159999720752239e-003 - -0.1020570024847984 - 0.4888440072536469 - <_> - - <_> - - - - <_>2 5 6 16 -1. - <_>2 5 3 8 2. - <_>5 13 3 8 2. - 0 - -0.0476970002055168 - 1.0666010379791260 - -0.1757629960775375 - <_> - - <_> - - - - <_>7 6 11 6 -1. - <_>7 8 11 2 3. - 0 - 4.0300001273863018e-004 - 0.1852480024099350 - -0.7479000091552734 - <_> - - <_> - - - - <_>5 2 12 22 -1. - <_>5 13 12 11 2. - 0 - 0.1153960004448891 - -0.2201970070600510 - 0.5450999736785889 - <_> - - <_> - - - - <_>10 7 4 10 -1. - <_>10 12 4 5 2. - 0 - 0.0160210002213717 - 0.2548750042915344 - -0.5074009895324707 - <_> - - <_> - - - - <_>9 0 4 18 -1. - <_>9 6 4 6 3. - 0 - 0.0566320009529591 - -0.0112560000270605 - -0.9596809744834900 - <_> - - <_> - - - - <_>18 8 6 9 -1. - <_>18 11 6 3 3. - 0 - -0.0107260001823306 - -0.2854470014572144 - 0.1699479967355728 - <_> - - <_> - - - - <_>4 7 15 10 -1. - <_>9 7 5 10 3. - 0 - 0.1242000013589859 - -0.0361399985849857 - -1.3132710456848145 - <_> - - <_> - - - - <_>10 5 6 9 -1. - <_>12 5 2 9 3. - 0 - -5.3799999877810478e-003 - 0.3309270143508911 - 0.0133079998195171 - <_> - - <_> - - - - <_>9 9 6 10 -1. - <_>11 9 2 10 3. - 0 - 0.0119080003350973 - -0.3483029901981354 - 0.2404190003871918 - <_> - - <_> - - - - <_>11 14 6 10 -1. - <_>13 14 2 10 3. - 0 - -0.0430079996585846 - -1.4390469789505005 - 0.1559959948062897 - <_> - - <_> - - - - <_>7 14 6 10 -1. - <_>9 14 2 10 3. - 0 - -0.0331499986350536 - -1.1805850267410278 - -0.0123479999601841 - <_> - - <_> - - - - <_>4 8 16 9 -1. - <_>4 11 16 3 3. - 0 - -0.0213419999927282 - 2.2119441032409668 - 0.0627370029687881 - <_> - - <_> - - - - <_>2 11 20 3 -1. - <_>2 12 20 1 3. - 0 - -0.0122189996764064 - -1.8709750175476074 - -0.0454999990761280 - <_> - - <_> - - - - <_>13 0 4 13 -1. - <_>13 0 2 13 2. - 0 - -0.0168609991669655 - -0.7691270112991333 - 0.1533000022172928 - <_> - - <_> - - - - <_>7 0 4 13 -1. - <_>9 0 2 13 2. - 0 - -2.4999999441206455e-003 - -0.6298739910125732 - 0.0516000017523766 - <_> - - <_> - - - - <_>3 1 18 7 -1. - <_>9 1 6 7 3. - 0 - -0.0450379997491837 - 0.8542889952659607 - 6.2600001692771912e-003 - <_> - - <_> - - - - <_>1 11 6 9 -1. - <_>1 14 6 3 3. - 0 - 0.0390579998493195 - -0.0324589982628822 - -1.3325669765472412 - <_> - - <_> - - - - <_>8 18 9 6 -1. - <_>8 20 9 2 3. - 0 - 6.6720000468194485e-003 - -0.1942359954118729 - 0.3732869923114777 - <_> - - <_> - - - - <_>3 9 15 6 -1. - <_>3 11 15 2 3. - 0 - -0.0163610000163317 - 2.0605869293212891 - -0.1504269987344742 - <_> - - <_> - - - - <_>5 10 19 2 -1. - <_>5 11 19 1 2. - 0 - 6.1719999648630619e-003 - -0.1161099970340729 - 0.2545540034770966 - <_> - - <_> - - - - <_>8 6 7 16 -1. - <_>8 14 7 8 2. - 0 - 0.0457220003008842 - -0.0163400005549192 - -1.0449140071868896 - <_> - - <_> - - - - <_>9 14 9 6 -1. - <_>9 16 9 2 3. - 0 - 4.1209999471902847e-003 - -0.0419979989528656 - 0.3968099951744080 - <_> - - <_> - - - - <_>0 7 8 12 -1. - <_>0 11 8 4 3. - 0 - -1.7800000205170363e-004 - -0.6642259955406189 - 0.0334430001676083 - <_> - - <_> - - - - <_>6 4 18 3 -1. - <_>6 5 18 1 3. - 0 - 7.1109998971223831e-003 - -0.0582319982349873 - 0.3785730004310608 - <_> - - <_> - - - - <_>0 16 12 6 -1. - <_>4 16 4 6 3. - 0 - -0.0498640015721321 - 0.6101940274238586 - -0.2100570052862167 - <_> - - <_> - - - - <_>13 13 9 4 -1. - <_>13 15 9 2 2. - 0 - -0.0250119995325804 - -0.5710009932518005 - 0.1784839928150177 - <_> - - <_> - - - - <_>5 8 14 14 -1. - <_>5 8 7 7 2. - <_>12 15 7 7 2. - 0 - 0.0309399999678135 - 0.0563630014657974 - -0.6473100185394287 - <_> - - <_> - - - - <_>1 16 22 6 -1. - <_>12 16 11 3 2. - <_>1 19 11 3 2. - 0 - 0.0462710000574589 - 0.1748239994049072 - -0.9890940189361572 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - -3.1870000530034304e-003 - -0.6680480241775513 - 0.0322670005261898 - <_> - - <_> - - - - <_>9 5 10 10 -1. - <_>14 5 5 5 2. - <_>9 10 5 5 2. - 0 - -0.0243519991636276 - 0.2944490015506744 - -1.3599999947473407e-003 - <_> - - <_> - - - - <_>5 5 10 10 -1. - <_>5 5 5 5 2. - <_>10 10 5 5 2. - 0 - 0.0119740003719926 - -0.2834509909152985 - 0.4717119932174683 - <_> - - <_> - - - - <_>4 6 16 6 -1. - <_>12 6 8 3 2. - <_>4 9 8 3 2. - 0 - 0.0130700003355742 - -0.1083460003137589 - 0.5719329714775085 - <_> - - <_> - - - - <_>0 7 6 9 -1. - <_>0 10 6 3 3. - 0 - 0.0591630004346371 - -0.0509390011429787 - -1.9059720039367676 - <_> - - <_> - - - - <_>16 10 8 14 -1. - <_>20 10 4 7 2. - <_>16 17 4 7 2. - 0 - -0.0410949997603893 - 0.4510459899902344 - -9.7599998116493225e-003 - <_> - - <_> - - - - <_>9 12 6 12 -1. - <_>9 18 6 6 2. - 0 - -0.0839890018105507 - -2.0349199771881104 - -0.0510190017521381 - <_> - - <_> - - - - <_>8 10 8 12 -1. - <_>12 10 4 6 2. - <_>8 16 4 6 2. - 0 - 0.0446190014481544 - 0.1704110056161881 - -1.2278720140457153 - <_> - - <_> - - - - <_>8 0 4 9 -1. - <_>10 0 2 9 2. - 0 - 0.0244190003722906 - -0.0217969994992018 - -1.0822949409484863 - <_> - - <_> - - - - <_>10 4 8 16 -1. - <_>14 4 4 8 2. - <_>10 12 4 8 2. - 0 - -4.3870001100003719e-003 - 0.3046669960021973 - -0.3706659972667694 - <_> - - <_> - - - - <_>7 10 10 6 -1. - <_>7 12 10 2 3. - 0 - 0.0246079992502928 - -0.3116950094699860 - 0.2365729957818985 - <_> - - <_> - - - - <_>5 6 14 14 -1. - <_>12 6 7 7 2. - <_>5 13 7 7 2. - 0 - -0.0851820036768913 - -1.7982350587844849 - 0.1525429934263229 - <_> - - <_> - - - - <_>2 11 20 2 -1. - <_>2 12 20 1 2. - 0 - 0.0218449998646975 - -0.0518880002200603 - -1.9017189741134644 - <_> - - <_> - - - - <_>18 8 4 16 -1. - <_>18 16 4 8 2. - 0 - -0.0168290007859468 - 0.2102590054273605 - 0.0216569993644953 - <_> - - <_> - - - - <_>1 11 12 10 -1. - <_>1 11 6 5 2. - <_>7 16 6 5 2. - 0 - 0.0325479991734028 - -0.2029259949922562 - 0.6094400286674500 - <_> - - <_> - - - - <_>6 9 12 4 -1. - <_>6 11 12 2 2. - 0 - 2.4709999561309814e-003 - -0.9537119865417481 - 0.1856839954853058 - <_> - - <_> - - - - <_>9 12 6 7 -1. - <_>12 12 3 7 2. - 0 - 0.0554159991443157 - -0.1440529972314835 - 2.1506340503692627 - <_> - - <_> - - - - <_>10 4 8 16 -1. - <_>14 4 4 8 2. - <_>10 12 4 8 2. - 0 - -0.1063549965620041 - -1.0911970138549805 - 0.1322800070047379 - <_> - - <_> - - - - <_>6 4 8 16 -1. - <_>6 4 4 8 2. - <_>10 12 4 8 2. - 0 - -7.9889995977282524e-003 - 0.1025340035557747 - -0.5174490213394165 - <_> - - <_> - - - - <_>8 9 9 6 -1. - <_>11 9 3 6 3. - 0 - 0.0755679979920387 - 0.0589650012552738 - 1.2354209423065186 - <_> - - <_> - - - - <_>1 5 16 12 -1. - <_>1 5 8 6 2. - <_>9 11 8 6 2. - 0 - -0.0928059965372086 - -1.3431650400161743 - -0.0344629995524883 - <_> - - <_> - - - - <_>9 9 6 8 -1. - <_>9 9 3 8 2. - 0 - 0.0494319982826710 - 0.0496019981801510 - 1.6054730415344238 - <_> - - <_> - - - - <_>6 0 3 18 -1. - <_>7 0 1 18 3. - 0 - -0.0117729995399714 - -1.0261050462722778 - -4.1559999808669090e-003 - <_> - - <_> - - - - <_>17 9 5 14 -1. - <_>17 16 5 7 2. - 0 - 0.0858860015869141 - 0.0846429988741875 - 0.9522079825401306 - <_> - - <_> - - - - <_>2 9 5 14 -1. - <_>2 16 5 7 2. - 0 - 0.0810310021042824 - -0.1468710005283356 - 1.9359990358352661 - -3.7025990486145020 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>7 4 10 6 -1. - <_>7 7 10 3 2. - 0 - -0.0338409990072250 - 0.6588950157165527 - -0.6975529789924622 - <_> - - <_> - - - - <_>1 3 23 18 -1. - <_>1 9 23 6 3. - 0 - 0.0154100004583597 - -0.9072840213775635 - 0.3047859966754913 - <_> - - <_> - - - - <_>1 1 21 3 -1. - <_>8 1 7 3 3. - 0 - 0.0549059994518757 - -0.4977479875087738 - 0.5713260173797607 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0213900003582239 - -0.4256519973278046 - 0.5809680223464966 - <_> - - <_> - - - - <_>3 18 12 6 -1. - <_>3 18 6 3 2. - <_>9 21 6 3 2. - 0 - 7.8849997371435165e-003 - -0.4790599942207336 - 0.4301649928092957 - <_> - - <_> - - - - <_>16 8 8 16 -1. - <_>20 8 4 8 2. - <_>16 16 4 8 2. - 0 - -0.0375449992716312 - 0.5086159706115723 - -0.1998589932918549 - <_> - - <_> - - - - <_>0 19 24 4 -1. - <_>8 19 8 4 3. - 0 - 0.1592579931020737 - -0.2326360046863556 - 1.0993319749832153 - <_> - - <_> - - - - <_>16 8 8 16 -1. - <_>20 8 4 8 2. - <_>16 16 4 8 2. - 0 - -0.0689399987459183 - 0.4056900143623352 - 0.0568550005555153 - <_> - - <_> - - - - <_>0 8 8 16 -1. - <_>0 8 4 8 2. - <_>4 16 4 8 2. - 0 - -0.0336950011551380 - 0.4513280093669891 - -0.3333280086517334 - <_> - - <_> - - - - <_>8 12 8 10 -1. - <_>8 17 8 5 2. - 0 - -0.0633149966597557 - -0.8501570224761963 - 0.2234169989824295 - <_> - - <_> - - - - <_>5 7 5 8 -1. - <_>5 11 5 4 2. - 0 - 7.3699997738003731e-003 - -0.9308220148086548 - 0.0592169985175133 - <_> - - <_> - - - - <_>4 1 19 2 -1. - <_>4 2 19 1 2. - 0 - -9.5969997346401215e-003 - -1.2794899940490723 - 0.1844729930162430 - <_> - - <_> - - - - <_>0 12 24 9 -1. - <_>8 12 8 9 3. - 0 - -0.1306799948215485 - 0.5842689871788025 - -0.2600719928741455 - <_> - - <_> - - - - <_>6 0 13 8 -1. - <_>6 4 13 4 2. - 0 - 0.0574029982089996 - -0.0537890009582043 - 0.7117559909820557 - <_> - - <_> - - - - <_>0 0 24 3 -1. - <_>0 1 24 1 3. - 0 - -7.2340001352131367e-003 - -0.8696219921112061 - 0.0752149969339371 - <_> - - <_> - - - - <_>20 3 4 11 -1. - <_>20 3 2 11 2. - 0 - 0.0310989990830421 - -0.0750069990754128 - 0.9078159928321838 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - 0.0358540005981922 - -0.2479549944400787 - 0.7227209806442261 - <_> - - <_> - - - - <_>6 11 12 8 -1. - <_>12 11 6 4 2. - <_>6 15 6 4 2. - 0 - -0.0315349996089935 - -1.1238329410552979 - 0.2098830044269562 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>0 8 6 3 2. - <_>6 11 6 3 2. - 0 - -0.0194370001554489 - -1.4499390125274658 - -0.0151000004261732 - <_> - - <_> - - - - <_>6 17 18 3 -1. - <_>6 18 18 1 3. - 0 - -7.2420001961290836e-003 - 0.5386490225791931 - -0.1137539967894554 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - 8.1639997661113739e-003 - 0.0668890029191971 - -0.7687289714813232 - <_> - - <_> - - - - <_>20 3 4 9 -1. - <_>20 3 2 9 2. - 0 - -0.0436530001461506 - 1.1413530111312866 - 0.0402170009911060 - <_> - - <_> - - - - <_>0 3 4 9 -1. - <_>2 3 2 9 2. - 0 - 0.0265699997544289 - -0.2471909970045090 - 0.5929509997367859 - <_> - - <_> - - - - <_>15 0 9 19 -1. - <_>18 0 3 19 3. - 0 - 0.0322169996798038 - -0.0400249995291233 - 0.3268800079822540 - <_> - - <_> - - - - <_>0 0 9 19 -1. - <_>3 0 3 19 3. - 0 - -0.0722360014915466 - 0.5872939825057983 - -0.2539600133895874 - <_> - - <_> - - - - <_>13 11 6 8 -1. - <_>13 11 3 8 2. - 0 - 0.0314249992370605 - 0.1531510055065155 - -0.5604209899902344 - <_> - - <_> - - - - <_>5 11 6 8 -1. - <_>8 11 3 8 2. - 0 - -4.7699999413453043e-004 - 0.1695889979600906 - -0.5262669920921326 - <_> - - <_> - - - - <_>5 11 19 3 -1. - <_>5 12 19 1 3. - 0 - 2.7189999818801880e-003 - -0.1494459956884384 - 0.2965869903564453 - <_> - - <_> - - - - <_>3 20 18 4 -1. - <_>9 20 6 4 3. - 0 - 0.0328750014305115 - -0.3994350135326386 - 0.2515659928321838 - <_> - - <_> - - - - <_>6 6 16 6 -1. - <_>6 8 16 2 3. - 0 - -0.0145530002191663 - 0.2797259986400604 - -0.4720380008220673 - <_> - - <_> - - - - <_>6 0 9 6 -1. - <_>9 0 3 6 3. - 0 - 0.0380179993808270 - -2.9200001154094934e-003 - -1.1300059556961060 - <_> - - <_> - - - - <_>10 3 4 14 -1. - <_>10 10 4 7 2. - 0 - 2.8659999370574951e-003 - 0.4111180007457733 - -0.2622080147266388 - <_> - - <_> - - - - <_>1 5 15 12 -1. - <_>1 11 15 6 2. - 0 - -0.0416069999337196 - -1.4293819665908813 - -0.0191329997032881 - <_> - - <_> - - - - <_>11 12 8 5 -1. - <_>11 12 4 5 2. - 0 - -0.0248029995709658 - -0.2501359879970551 - 0.1597869992256165 - <_> - - <_> - - - - <_>5 0 6 9 -1. - <_>7 0 2 9 3. - 0 - 0.0100980000570416 - 0.0437389984726906 - -0.6998609900474548 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0209470000118017 - -0.9413779973983765 - 0.2320400029420853 - <_> - - <_> - - - - <_>5 5 12 8 -1. - <_>5 5 6 4 2. - <_>11 9 6 4 2. - 0 - 0.0224580001085997 - -0.2718580067157745 - 0.4531919956207275 - <_> - - <_> - - - - <_>13 12 11 6 -1. - <_>13 14 11 2 3. - 0 - -0.0371109992265701 - -1.0314660072326660 - 0.1442179977893829 - <_> - - <_> - - - - <_>0 13 21 3 -1. - <_>0 14 21 1 3. - 0 - -0.0106480000540614 - 0.6310700178146362 - -0.2552079856395721 - <_> - - <_> - - - - <_>8 1 8 12 -1. - <_>12 1 4 6 2. - <_>8 7 4 6 2. - 0 - 0.0554229989647865 - 0.1620659977197647 - -1.7722640037536621 - <_> - - <_> - - - - <_>1 0 6 12 -1. - <_>1 0 3 6 2. - <_>4 6 3 6 2. - 0 - 0.0216019991785288 - -0.2501609921455383 - 0.5411980152130127 - <_> - - <_> - - - - <_>2 2 21 2 -1. - <_>2 3 21 1 2. - 0 - 8.7000000348780304e-005 - -0.2900890111923218 - 0.3350799977779388 - <_> - - <_> - - - - <_>2 2 19 3 -1. - <_>2 3 19 1 3. - 0 - 0.0144060002639890 - -7.8840004280209541e-003 - -1.1677219867706299 - <_> - - <_> - - - - <_>17 10 6 14 -1. - <_>20 10 3 7 2. - <_>17 17 3 7 2. - 0 - 0.1077739968895912 - 0.1129200011491776 - -2.4940319061279297 - <_> - - <_> - - - - <_>1 10 6 14 -1. - <_>1 10 3 7 2. - <_>4 17 3 7 2. - 0 - 0.0359439998865128 - -0.1948059946298599 - 0.9575750231742859 - <_> - - <_> - - - - <_>7 6 14 14 -1. - <_>14 6 7 7 2. - <_>7 13 7 7 2. - 0 - -3.9510000497102737e-003 - 0.3092780113220215 - -0.2553020119667053 - <_> - - <_> - - - - <_>0 12 9 6 -1. - <_>0 14 9 2 3. - 0 - 0.0209420006722212 - -7.6319999061524868e-003 - -1.0086350440979004 - <_> - - <_> - - - - <_>15 14 8 9 -1. - <_>15 17 8 3 3. - 0 - -0.0298779997974634 - -0.4602769911289215 - 0.1950719952583313 - <_> - - <_> - - - - <_>1 1 22 4 -1. - <_>1 1 11 2 2. - <_>12 3 11 2 2. - 0 - 0.0259719993919134 - -0.0121879996731877 - -1.0035500526428223 - <_> - - <_> - - - - <_>9 11 9 6 -1. - <_>9 13 9 2 3. - 0 - 0.0106030004099011 - -0.0759690031409264 - 0.4166989922523499 - <_> - - <_> - - - - <_>0 15 18 3 -1. - <_>0 16 18 1 3. - 0 - 8.5819996893405914e-003 - -0.2664859890937805 - 0.3911150097846985 - <_> - - <_> - - - - <_>16 14 7 9 -1. - <_>16 17 7 3 3. - 0 - 0.0212709996849298 - 0.1827390044927597 - -0.3605229854583740 - <_> - - <_> - - - - <_>4 3 16 4 -1. - <_>12 3 8 4 2. - 0 - 0.0745180025696754 - -0.1893839985132217 - 0.9265800118446350 - <_> - - <_> - - - - <_>7 6 12 5 -1. - <_>7 6 6 5 2. - 0 - 4.6569998376071453e-003 - -0.1450619995594025 - 0.3329460024833679 - <_> - - <_> - - - - <_>9 6 4 9 -1. - <_>11 6 2 9 2. - 0 - 1.7119999974966049e-003 - -0.5246400237083435 - 0.0898799970746040 - <_> - - <_> - - - - <_>12 1 4 10 -1. - <_>12 1 2 10 2. - 0 - 9.8500004969537258e-004 - -0.3838199973106384 - 0.2439299970865250 - <_> - - <_> - - - - <_>8 1 4 10 -1. - <_>10 1 2 10 2. - 0 - 0.0282339993864298 - -5.7879998348653316e-003 - -1.2617139816284180 - <_> - - <_> - - - - <_>15 15 6 9 -1. - <_>15 18 6 3 3. - 0 - -0.0326780006289482 - -0.5795329809188843 - 0.1695529967546463 - <_> - - <_> - - - - <_>3 15 6 9 -1. - <_>3 18 6 3 3. - 0 - 0.0225360002368689 - 0.0222810003906488 - -0.8786960244178772 - <_> - - <_> - - - - <_>15 1 3 19 -1. - <_>16 1 1 19 3. - 0 - -0.0216579996049404 - -0.6510850191116333 - 0.1296689957380295 - <_> - - <_> - - - - <_>1 3 6 9 -1. - <_>3 3 2 9 3. - 0 - 7.6799998059868813e-003 - -0.3396520018577576 - 0.2201330065727234 - <_> - - <_> - - - - <_>15 0 3 19 -1. - <_>16 0 1 19 3. - 0 - 0.0145920002833009 - 0.1507730036973953 - -0.5045239925384522 - <_> - - <_> - - - - <_>6 3 12 4 -1. - <_>12 3 6 4 2. - 0 - 0.0278680007904768 - -0.2504529953002930 - 0.4574199914932251 - <_> - - <_> - - - - <_>10 5 4 9 -1. - <_>10 5 2 9 2. - 0 - 5.6940000504255295e-003 - -0.1094850003719330 - 0.5575780272483826 - <_> - - <_> - - - - <_>6 0 3 19 -1. - <_>7 0 1 19 3. - 0 - -0.0100029995664954 - -0.9736629724502564 - 0.0184679999947548 - <_> - - <_> - - - - <_>11 1 3 12 -1. - <_>11 7 3 6 2. - 0 - -4.0719998069107533e-003 - 0.3822219967842102 - -0.1692110002040863 - <_> - - <_> - - - - <_>6 7 10 5 -1. - <_>11 7 5 5 2. - 0 - -0.0225939992815256 - -1.0391089916229248 - 5.1839998923242092e-003 - <_> - - <_> - - - - <_>11 3 3 18 -1. - <_>12 3 1 18 3. - 0 - -0.0395799987018108 - -5.5109229087829590 - 0.1116399988532066 - <_> - - <_> - - - - <_>9 3 6 12 -1. - <_>11 3 2 12 3. - 0 - -0.0175379998981953 - 0.9548580050468445 - -0.1858450025320053 - <_> - - <_> - - - - <_>3 7 19 3 -1. - <_>3 8 19 1 3. - 0 - 9.0300003066658974e-003 - 0.0104360003024340 - 0.8211479783058167 - <_> - - <_> - - - - <_>2 7 18 3 -1. - <_>2 8 18 1 3. - 0 - -7.9539995640516281e-003 - 0.2263289988040924 - -0.3456819951534271 - <_> - - <_> - - - - <_>3 13 18 4 -1. - <_>12 13 9 2 2. - <_>3 15 9 2 2. - 0 - 0.0270910002291203 - 0.1643009930849075 - -1.3926379680633545 - <_> - - <_> - - - - <_>3 5 6 9 -1. - <_>5 5 2 9 3. - 0 - -0.0206259991973639 - -0.8636609911918640 - 2.3880000226199627e-003 - <_> - - <_> - - - - <_>4 1 20 4 -1. - <_>14 1 10 2 2. - <_>4 3 10 2 2. - 0 - -0.0719899982213974 - -2.8192629814147949 - 0.1157049983739853 - <_> - - <_> - - - - <_>0 1 20 4 -1. - <_>0 1 10 2 2. - <_>10 3 10 2 2. - 0 - -0.0269649997353554 - -1.2946130037307739 - -0.0246610008180141 - <_> - - <_> - - - - <_>10 15 6 6 -1. - <_>10 15 3 6 2. - 0 - -0.0473779998719692 - -0.8130639791488648 - 0.1183139979839325 - <_> - - <_> - - - - <_>0 2 24 8 -1. - <_>8 2 8 8 3. - 0 - -0.1089560016989708 - 0.6593790054321289 - -0.2084390074014664 - <_> - - <_> - - - - <_>5 5 18 3 -1. - <_>5 6 18 1 3. - 0 - 0.0135740004479885 - 7.4240001849830151e-003 - 0.5315219759941101 - <_> - - <_> - - - - <_>8 15 6 6 -1. - <_>11 15 3 6 2. - 0 - -6.6920001991093159e-003 - 0.3065580129623413 - -0.3108429908752441 - <_> - - <_> - - - - <_>11 12 8 5 -1. - <_>11 12 4 5 2. - 0 - -3.9070001803338528e-003 - 0.2557649910449982 - -0.0529320016503334 - <_> - - <_> - - - - <_>5 12 8 5 -1. - <_>9 12 4 5 2. - 0 - -0.0376130007207394 - -1.4350049495697021 - -0.0154480002820492 - <_> - - <_> - - - - <_>5 0 14 6 -1. - <_>5 2 14 2 3. - 0 - 8.6329998448491096e-003 - -0.1688439995050430 - 0.4212490022182465 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0320970006287098 - -0.6497939825057983 - 0.0411100015044212 - <_> - - <_> - - - - <_>10 7 5 12 -1. - <_>10 11 5 4 3. - 0 - 0.0584959983825684 - -0.0529639981687069 - 0.6336830258369446 - <_> - - <_> - - - - <_>7 9 8 14 -1. - <_>7 9 4 7 2. - <_>11 16 4 7 2. - 0 - -0.0409019999206066 - -0.9210109710693359 - 9.0640000998973846e-003 - <_> - - <_> - - - - <_>1 5 22 6 -1. - <_>12 5 11 3 2. - <_>1 8 11 3 2. - 0 - -0.0199250001460314 - 0.5375999808311462 - -0.0629969984292984 - <_> - - <_> - - - - <_>0 5 6 6 -1. - <_>0 8 6 3 2. - 0 - -4.6020001173019409e-003 - -0.5433350205421448 - 0.0841049998998642 - <_> - - <_> - - - - <_>12 17 9 4 -1. - <_>12 19 9 2 2. - 0 - 0.0168249998241663 - 0.1556369960308075 - -0.4017120003700256 - <_> - - <_> - - - - <_>2 18 19 3 -1. - <_>2 19 19 1 3. - 0 - 9.4790002331137657e-003 - -0.2424529939889908 - 0.5150949954986572 - <_> - - <_> - - - - <_>12 17 9 4 -1. - <_>12 19 9 2 2. - 0 - -0.0195349995046854 - -0.5111839771270752 - 0.1383199989795685 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>1 18 18 1 3. - 0 - 0.0107460003346205 - -0.2185499966144562 - 0.6282870173454285 - <_> - - <_> - - - - <_>12 17 9 4 -1. - <_>12 19 9 2 2. - 0 - 0.0379270017147064 - 0.1164029985666275 - -2.7301959991455078 - <_> - - <_> - - - - <_>0 0 24 3 -1. - <_>0 1 24 1 3. - 0 - 0.0163909997791052 - -0.0146359996870160 - -1.0797250270843506 - <_> - - <_> - - - - <_>5 0 14 4 -1. - <_>5 2 14 2 2. - 0 - -0.0197850000113249 - 1.2166420221328735 - 0.0332750007510185 - <_> - - <_> - - - - <_>6 14 9 6 -1. - <_>6 16 9 2 3. - 0 - 0.0110670002177358 - -0.2538830041885376 - 0.4403859972953796 - <_> - - <_> - - - - <_>14 13 6 9 -1. - <_>14 16 6 3 3. - 0 - 5.2479999139904976e-003 - 0.2249680012464523 - -0.2421649992465973 - <_> - - <_> - - - - <_>5 20 13 4 -1. - <_>5 22 13 2 2. - 0 - -0.0111419996246696 - 0.2501809895038605 - -0.3081150054931641 - <_> - - <_> - - - - <_>9 9 6 12 -1. - <_>9 13 6 4 3. - 0 - -0.0106669999659061 - -0.3272910118103027 - 0.2616829872131348 - <_> - - <_> - - - - <_>1 10 21 3 -1. - <_>8 10 7 3 3. - 0 - 0.1054529994726181 - -0.0557500012218952 - -1.9605729579925537 - <_> - - <_> - - - - <_>8 8 9 6 -1. - <_>11 8 3 6 3. - 0 - 0.0548279993236065 - -1.9519999623298645e-003 - 0.7386609911918640 - <_> - - <_> - - - - <_>3 10 9 7 -1. - <_>6 10 3 7 3. - 0 - 0.0177609995007515 - -0.3064720034599304 - 0.2634699940681458 - <_> - - <_> - - - - <_>12 10 10 8 -1. - <_>17 10 5 4 2. - <_>12 14 5 4 2. - 0 - -0.0311859995126724 - -0.2460090070962906 - 0.1708219945430756 - <_> - - <_> - - - - <_>0 15 24 3 -1. - <_>8 15 8 3 3. - 0 - -0.0572960004210472 - 0.4703350067138672 - -0.2604829967021942 - <_> - - <_> - - - - <_>8 5 9 6 -1. - <_>8 7 9 2 3. - 0 - -0.0113120004534721 - 0.3862890005111694 - -0.2881700098514557 - <_> - - <_> - - - - <_>4 13 6 9 -1. - <_>4 16 6 3 3. - 0 - 0.0305920001119375 - -0.0488260015845299 - -1.7638969421386719 - <_> - - <_> - - - - <_>12 17 9 4 -1. - <_>12 19 9 2 2. - 0 - 1.8489999929443002e-003 - 0.2109989970922470 - -0.0259409993886948 - <_> - - <_> - - - - <_>9 12 6 6 -1. - <_>9 15 6 3 2. - 0 - 0.0114190001040697 - -0.1682959944009781 - 1.0278660058975220 - <_> - - <_> - - - - <_>9 9 14 10 -1. - <_>16 9 7 5 2. - <_>9 14 7 5 2. - 0 - 0.0814030021429062 - 0.1153199970722199 - -1.2482399940490723 - <_> - - <_> - - - - <_>1 9 14 10 -1. - <_>1 9 7 5 2. - <_>8 14 7 5 2. - 0 - 0.0534959994256496 - -0.0463039986789227 - -1.7165969610214233 - <_> - - <_> - - - - <_>8 7 9 17 -1. - <_>11 7 3 17 3. - 0 - -0.0239480007439852 - -0.4024659991264343 - 0.2056210041046143 - <_> - - <_> - - - - <_>3 4 6 20 -1. - <_>3 4 3 10 2. - <_>6 14 3 10 2. - 0 - 6.7690000869333744e-003 - -0.3315230011940002 - 0.2068340033292770 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 8 5 4 2. - 0 - -0.0323439985513687 - -0.7263280153274536 - 0.2007350027561188 - <_> - - <_> - - - - <_>10 7 4 9 -1. - <_>12 7 2 9 2. - 0 - 0.0378630012273788 - -0.1563100069761276 - 1.6697460412979126 - <_> - - <_> - - - - <_>10 15 6 9 -1. - <_>12 15 2 9 3. - 0 - 0.0154400002211332 - 0.1948740035295487 - -0.3538419902324677 - <_> - - <_> - - - - <_>3 8 6 16 -1. - <_>3 8 3 8 2. - <_>6 16 3 8 2. - 0 - -0.0443760007619858 - 0.8209360241889954 - -0.1819359958171845 - <_> - - <_> - - - - <_>12 17 9 4 -1. - <_>12 19 9 2 2. - 0 - -0.0231020003557205 - -0.4304409921169281 - 0.1237540021538734 - <_> - - <_> - - - - <_>3 17 9 4 -1. - <_>3 19 9 2 2. - 0 - 0.0194000005722046 - -0.0297260005027056 - -1.1597590446472168 - <_> - - <_> - - - - <_>10 1 9 6 -1. - <_>13 1 3 6 3. - 0 - 0.1038570031523705 - 0.1114989966154099 - -4.6835222244262695 - <_> - - <_> - - - - <_>5 7 4 10 -1. - <_>5 12 4 5 2. - 0 - -0.0189640000462532 - 2.1773819923400879 - -0.1454440057277679 - <_> - - <_> - - - - <_>7 5 12 6 -1. - <_>11 5 4 6 3. - 0 - 0.0387509986758232 - -0.0494460016489029 - 0.3401829898357391 - <_> - - <_> - - - - <_>6 4 9 8 -1. - <_>9 4 3 8 3. - 0 - 0.0227669999003410 - -0.3280299901962280 - 0.3053140044212341 - <_> - - <_> - - - - <_>12 16 10 8 -1. - <_>17 16 5 4 2. - <_>12 20 5 4 2. - 0 - -0.0313570015132427 - 1.1520819664001465 - 0.0273059997707605 - <_> - - <_> - - - - <_>2 16 10 8 -1. - <_>2 16 5 4 2. - <_>7 20 5 4 2. - 0 - 9.6909999847412109e-003 - -0.3879950046539307 - 0.2151259928941727 - <_> - - <_> - - - - <_>0 0 24 4 -1. - <_>12 0 12 2 2. - <_>0 2 12 2 2. - 0 - -0.0492849983274937 - -1.6774909496307373 - 0.1577419936656952 - <_> - - <_> - - - - <_>0 6 9 6 -1. - <_>0 8 9 2 3. - 0 - -0.0395109988749027 - -0.9764789938926697 - -0.0105520002543926 - <_> - - <_> - - - - <_>0 4 24 6 -1. - <_>12 4 12 3 2. - <_>0 7 12 3 2. - 0 - 0.0479979999363422 - 0.2084390074014664 - -0.6899279952049255 - <_> - - <_> - - - - <_>5 0 11 4 -1. - <_>5 2 11 2 2. - 0 - 0.0514229983091354 - -0.1666530072689056 - 1.2149239778518677 - <_> - - <_> - - - - <_>1 1 22 4 -1. - <_>12 1 11 2 2. - <_>1 3 11 2 2. - 0 - 0.0142799997702241 - 0.2362769991159439 - -0.4139679968357086 - <_> - - <_> - - - - <_>9 6 6 18 -1. - <_>9 15 6 9 2. - 0 - -0.0916119962930679 - -0.9283090233802795 - -0.0183450002223253 - <_> - - <_> - - - - <_>2 9 20 4 -1. - <_>2 11 20 2 2. - 0 - 6.5080001950263977e-003 - -0.7364720106124878 - 0.1949709951877594 - <_> - - <_> - - - - <_>5 2 14 14 -1. - <_>5 9 14 7 2. - 0 - 0.0357230007648468 - 0.1419779956340790 - -0.4208930134773254 - <_> - - <_> - - - - <_>4 2 16 6 -1. - <_>4 5 16 3 2. - 0 - 0.0506380014121532 - 0.0116440001875162 - 0.7848659753799439 - <_> - - <_> - - - - <_>2 3 19 3 -1. - <_>2 4 19 1 3. - 0 - -0.0146139999851584 - -1.1909500360488892 - -0.0351280011236668 - <_> - - <_> - - - - <_>7 1 10 4 -1. - <_>7 3 10 2 2. - 0 - -0.0386629998683929 - 2.4314730167388916 - 0.0656479969620705 - <_> - - <_> - - - - <_>0 9 4 15 -1. - <_>0 14 4 5 3. - 0 - -0.0403469987213612 - 0.7175530195236206 - -0.1910829991102219 - <_> - - <_> - - - - <_>2 10 21 3 -1. - <_>2 11 21 1 3. - 0 - 0.0239020008593798 - 0.1564619988203049 - -0.7929480075836182 - -3.4265899658203125 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>3 0 6 6 -1. - <_>6 0 3 6 2. - 0 - 8.5640000179409981e-003 - -0.8145070075988770 - 0.5887529850006104 - <_> - - <_> - - - - <_>6 4 14 9 -1. - <_>6 7 14 3 3. - 0 - -0.1329260021448135 - 0.9321339726448059 - -0.2936730086803436 - <_> - - <_> - - - - <_>9 1 6 9 -1. - <_>11 1 2 9 3. - 0 - 9.8400004208087921e-003 - -0.5646290183067322 - 0.4164769947528839 - <_> - - <_> - - - - <_>15 8 9 9 -1. - <_>15 11 9 3 3. - 0 - 5.0889998674392700e-003 - -0.7923280000686646 - 0.1697500050067902 - <_> - - <_> - - - - <_>8 0 4 21 -1. - <_>8 7 4 7 3. - 0 - -0.0610390007495880 - -1.4169000387191772 - 0.0250209998339415 - <_> - - <_> - - - - <_>3 22 19 2 -1. - <_>3 23 19 1 2. - 0 - -4.6599999768659472e-004 - 0.3798249959945679 - -0.4156709909439087 - <_> - - <_> - - - - <_>2 15 20 3 -1. - <_>2 16 20 1 3. - 0 - 3.3889999613165855e-003 - -0.4076859951019287 - 0.3554849922657013 - <_> - - <_> - - - - <_>19 0 4 13 -1. - <_>19 0 2 13 2. - 0 - 0.0210069995373487 - -0.2408010065555573 - 0.8611270189285278 - <_> - - <_> - - - - <_>1 7 8 8 -1. - <_>1 11 8 4 2. - 0 - 7.5559997931122780e-003 - -0.8746719956398010 - 0.0985720008611679 - <_> - - <_> - - - - <_>14 14 6 9 -1. - <_>14 17 6 3 3. - 0 - 0.0247799996286631 - 0.1556620001792908 - -0.6922979950904846 - <_> - - <_> - - - - <_>4 14 6 9 -1. - <_>4 17 6 3 3. - 0 - -0.0356200002133846 - -1.1472270488739014 - 0.0363599993288517 - <_> - - <_> - - - - <_>14 5 4 10 -1. - <_>14 5 2 10 2. - 0 - 0.0198100004345179 - 0.1551620066165924 - -0.6952009797096252 - <_> - - <_> - - - - <_>6 5 4 10 -1. - <_>8 5 2 10 2. - 0 - 0.0150199998170137 - 0.0419900007545948 - -0.9662280082702637 - <_> - - <_> - - - - <_>14 5 6 6 -1. - <_>14 8 6 3 2. - 0 - -0.0231379996985197 - 0.4339689910411835 - 2.4160000029951334e-003 - <_> - - <_> - - - - <_>4 5 6 6 -1. - <_>4 8 6 3 2. - 0 - -0.0187430009245873 - 0.4348109960556030 - -0.3252249956130981 - <_> - - <_> - - - - <_>0 2 24 21 -1. - <_>8 2 8 21 3. - 0 - 0.4508000016212463 - -0.0945739969611168 - 0.7242130041122437 - <_> - - <_> - - - - <_>1 2 6 13 -1. - <_>3 2 2 13 3. - 0 - 0.0118549996986985 - -0.3813309967517853 - 0.3009839951992035 - <_> - - <_> - - - - <_>20 0 4 21 -1. - <_>20 0 2 21 2. - 0 - -0.0248300004750490 - 0.8930060267448425 - -0.1029589995741844 - <_> - - <_> - - - - <_>0 4 4 20 -1. - <_>2 4 2 20 2. - 0 - -0.0447430014610291 - 0.8628029823303223 - -0.2171649932861328 - <_> - - <_> - - - - <_>8 16 9 6 -1. - <_>8 18 9 2 3. - 0 - -0.0146000003442168 - 0.6006940007209778 - -0.1590629965066910 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0245270002633333 - -1.5872869491577148 - -0.0218170005828142 - <_> - - <_> - - - - <_>16 12 7 9 -1. - <_>16 15 7 3 3. - 0 - 0.0230240002274513 - 0.1685339957475662 - -0.3810690045356751 - <_> - - <_> - - - - <_>5 21 14 3 -1. - <_>12 21 7 3 2. - 0 - -0.0249170009046793 - 0.5081089735031128 - -0.2727989852428436 - <_> - - <_> - - - - <_>11 5 6 9 -1. - <_>11 5 3 9 2. - 0 - 1.0130000300705433e-003 - -0.4313879907131195 - 0.2643809914588928 - <_> - - <_> - - - - <_>10 5 4 10 -1. - <_>12 5 2 10 2. - 0 - 0.0156030002981424 - -0.3162420094013214 - 0.5571590065956116 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - -0.0266859997063875 - 1.0553920269012451 - 0.0290740001946688 - <_> - - <_> - - - - <_>7 5 6 9 -1. - <_>10 5 3 9 2. - 0 - 1.3940000208094716e-003 - -0.7187380194664002 - 0.0653909966349602 - <_> - - <_> - - - - <_>14 14 10 4 -1. - <_>14 16 10 2 2. - 0 - -6.4799998654052615e-004 - 0.2488439977169037 - -0.2097820043563843 - <_> - - <_> - - - - <_>5 5 14 14 -1. - <_>5 5 7 7 2. - <_>12 12 7 7 2. - 0 - -0.0318880006670952 - -0.6884449720382690 - 0.0635899975895882 - <_> - - <_> - - - - <_>12 8 12 6 -1. - <_>18 8 6 3 2. - <_>12 11 6 3 2. - 0 - -4.9290000461041927e-003 - -0.5915250182151794 - 0.2794359922409058 - <_> - - <_> - - - - <_>6 6 12 12 -1. - <_>6 6 6 6 2. - <_>12 12 6 6 2. - 0 - 0.0311680007725954 - 0.0452239997684956 - -0.8863919973373413 - <_> - - <_> - - - - <_>11 13 6 10 -1. - <_>13 13 2 10 3. - 0 - -0.0336630009114742 - -0.6159020066261292 - 0.1574929952621460 - <_> - - <_> - - - - <_>1 10 20 8 -1. - <_>1 10 10 4 2. - <_>11 14 10 4 2. - 0 - 0.0119669996201992 - -0.3060669898986816 - 0.4229330122470856 - <_> - - <_> - - - - <_>15 13 9 6 -1. - <_>15 15 9 2 3. - 0 - -0.0346800014376640 - -1.3734940290451050 - 0.1590870022773743 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>9 3 6 3 3. - 0 - 9.9290004000067711e-003 - -0.5586019754409790 - 0.1211920008063316 - <_> - - <_> - - - - <_>10 1 5 14 -1. - <_>10 8 5 7 2. - 0 - 0.0595749989151955 - 4.9720001406967640e-003 - 0.8205540180206299 - <_> - - <_> - - - - <_>3 4 16 6 -1. - <_>3 6 16 2 3. - 0 - -0.0654280036687851 - 1.5651429891586304 - -0.1681749969720841 - <_> - - <_> - - - - <_>16 3 8 9 -1. - <_>16 6 8 3 3. - 0 - -0.0928959995508194 - -1.5794529914855957 - 0.1466179937124252 - <_> - - <_> - - - - <_>7 13 6 10 -1. - <_>9 13 2 10 3. - 0 - -0.0411840006709099 - -1.5518720149993896 - -0.0299699995666742 - <_> - - <_> - - - - <_>15 13 9 6 -1. - <_>15 15 9 2 3. - 0 - 0.0214479994028807 - 0.1719630062580109 - -0.6934319734573364 - <_> - - <_> - - - - <_>0 13 9 6 -1. - <_>0 15 9 2 3. - 0 - -0.0255699995905161 - -1.3061310052871704 - -0.0243369992822409 - <_> - - <_> - - - - <_>13 16 9 6 -1. - <_>13 18 9 2 3. - 0 - -0.0412009991705418 - -1.3821059465408325 - 0.1480180025100708 - <_> - - <_> - - - - <_>2 16 9 6 -1. - <_>2 18 9 2 3. - 0 - -0.0176689997315407 - -0.7088999748229981 - 0.0365240015089512 - <_> - - <_> - - - - <_>5 16 18 3 -1. - <_>5 17 18 1 3. - 0 - 9.0060001239180565e-003 - -0.0409139990806580 - 0.8037310242652893 - <_> - - <_> - - - - <_>1 16 18 3 -1. - <_>1 17 18 1 3. - 0 - -0.0116529995575547 - 0.5754680037498474 - -0.2499170005321503 - <_> - - <_> - - - - <_>5 0 18 3 -1. - <_>5 1 18 1 3. - 0 - -7.4780001305043697e-003 - -0.4928089976310730 - 0.1981090009212494 - <_> - - <_> - - - - <_>1 1 19 2 -1. - <_>1 2 19 1 2. - 0 - 8.5499999113380909e-004 - -0.4885810017585754 - 0.1356309950351715 - <_> - - <_> - - - - <_>14 2 6 11 -1. - <_>16 2 2 11 3. - 0 - -0.0305380001664162 - -0.6027839779853821 - 0.1852200031280518 - <_> - - <_> - - - - <_>4 15 15 6 -1. - <_>9 15 5 6 3. - 0 - -0.0188469998538494 - 0.2356559932231903 - -0.3513630032539368 - <_> - - <_> - - - - <_>14 2 6 11 -1. - <_>16 2 2 11 3. - 0 - -8.1129996106028557e-003 - -0.0813049972057343 - 0.2106959968805313 - <_> - - <_> - - - - <_>4 2 6 11 -1. - <_>6 2 2 11 3. - 0 - -0.0348300002515316 - -1.2065670490264893 - -0.0142519995570183 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>18 5 6 3 3. - 0 - 0.0190210007131100 - 0.2334990054368973 - -0.4566490054130554 - <_> - - <_> - - - - <_>1 2 22 4 -1. - <_>1 2 11 2 2. - <_>12 4 11 2 2. - 0 - -0.0190040003508329 - -0.8107579946517944 - 0.0131400004029274 - <_> - - <_> - - - - <_>2 0 21 12 -1. - <_>9 0 7 12 3. - 0 - -0.0890579968690872 - 0.6154239773750305 - 0.0329830013215542 - <_> - - <_> - - - - <_>0 12 18 3 -1. - <_>0 13 18 1 3. - 0 - 6.8620000965893269e-003 - -0.2958309948444367 - 0.2700369954109192 - <_> - - <_> - - - - <_>12 2 6 9 -1. - <_>14 2 2 9 3. - 0 - -0.0282409992069006 - -0.6110270023345947 - 0.1735749989748001 - <_> - - <_> - - - - <_>3 10 18 3 -1. - <_>3 11 18 1 3. - 0 - -3.2099999953061342e-004 - -0.5332289934158325 - 0.0685390010476112 - <_> - - <_> - - - - <_>16 3 8 9 -1. - <_>16 6 8 3 3. - 0 - -0.1082910001277924 - -1.2879559993743896 - 0.1180170029401779 - <_> - - <_> - - - - <_>3 7 18 3 -1. - <_>3 8 18 1 3. - 0 - 0.0158789996057749 - -0.1707260012626648 - 1.1103910207748413 - <_> - - <_> - - - - <_>9 11 6 9 -1. - <_>11 11 2 9 3. - 0 - 8.6859995499253273e-003 - -0.1099509969353676 - 0.4601050019264221 - <_> - - <_> - - - - <_>9 8 6 9 -1. - <_>11 8 2 9 3. - 0 - -0.0252349991351366 - 1.0220669507980347 - -0.1869429945945740 - <_> - - <_> - - - - <_>15 0 2 18 -1. - <_>15 0 1 18 2. - 0 - -0.0135089997202158 - -0.7831659913063049 - 0.1420260071754456 - <_> - - <_> - - - - <_>7 0 2 18 -1. - <_>8 0 1 18 2. - 0 - -7.7149998396635056e-003 - -0.8806070089340210 - 0.0110600003972650 - <_> - - <_> - - - - <_>17 3 7 9 -1. - <_>17 6 7 3 3. - 0 - 0.0715800002217293 - 0.1136939972639084 - -1.1032789945602417 - <_> - - <_> - - - - <_>3 18 9 6 -1. - <_>3 20 9 2 3. - 0 - -0.0135540002956986 - -0.8109650015830994 - 3.4080001059919596e-003 - <_> - - <_> - - - - <_>3 18 21 3 -1. - <_>3 19 21 1 3. - 0 - 2.9450000729411840e-003 - -0.0728799998760223 - 0.3499810099601746 - <_> - - <_> - - - - <_>0 3 7 9 -1. - <_>0 6 7 3 3. - 0 - -0.0508330017328262 - -1.2868590354919434 - -0.0288420002907515 - <_> - - <_> - - - - <_>2 7 22 3 -1. - <_>2 8 22 1 3. - 0 - -8.7989997118711472e-003 - 0.4761359989643097 - -0.1469040066003799 - <_> - - <_> - - - - <_>0 3 24 16 -1. - <_>0 3 12 8 2. - <_>12 11 12 8 2. - 0 - 0.2142439931631088 - -0.0597020015120506 - -2.4802260398864746 - <_> - - <_> - - - - <_>13 17 9 4 -1. - <_>13 19 9 2 2. - 0 - 0.0139629999175668 - 0.1742029935121536 - -0.4391100108623505 - <_> - - <_> - - - - <_>5 5 12 8 -1. - <_>5 5 6 4 2. - <_>11 9 6 4 2. - 0 - 0.0425020009279251 - -0.1996529996395111 - 0.7065479755401611 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>12 6 7 3 2. - <_>5 9 7 3 2. - 0 - 0.0198279991745949 - -0.0691360011696815 - 0.6164339780807495 - <_> - - <_> - - - - <_>5 16 14 6 -1. - <_>5 16 7 3 2. - <_>12 19 7 3 2. - 0 - -0.0335600003600121 - -1.2740780115127563 - -0.0256730001419783 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>18 5 6 3 3. - 0 - 0.0635429993271828 - 0.1240350008010864 - -1.0776289701461792 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 0.0219330005347729 - 0.0149520002305508 - -0.7102349996566773 - <_> - - <_> - - - - <_>3 4 20 10 -1. - <_>13 4 10 5 2. - <_>3 9 10 5 2. - 0 - -0.0784249976277351 - 0.6203399896621704 - 0.0336109995841980 - <_> - - <_> - - - - <_>2 13 9 8 -1. - <_>5 13 3 8 3. - 0 - 0.0143900001421571 - -0.3632459938526154 - 0.1730830073356628 - <_> - - <_> - - - - <_>2 1 21 15 -1. - <_>9 1 7 15 3. - 0 - -0.0673099979758263 - 0.5237410068511963 - 0.0127999996766448 - <_> - - <_> - - - - <_>5 12 14 8 -1. - <_>12 12 7 8 2. - 0 - 0.1304749995470047 - -0.1712249964475632 - 1.1235200166702271 - <_> - - <_> - - - - <_>6 7 12 4 -1. - <_>6 7 6 4 2. - 0 - -0.0462459996342659 - -1.1908329725265503 - 0.1742559969425201 - <_> - - <_> - - - - <_>6 5 9 6 -1. - <_>9 5 3 6 3. - 0 - -0.0298420004546642 - 0.8393059968948364 - -0.1806419938802719 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - -3.8099999073892832e-004 - 0.3553279936313629 - -0.2384230047464371 - <_> - - <_> - - - - <_>5 11 6 6 -1. - <_>8 11 3 6 2. - 0 - -0.0223789997398853 - -0.8794389963150024 - -7.8399997437372804e-004 - <_> - - <_> - - - - <_>6 4 18 2 -1. - <_>6 5 18 1 2. - 0 - -1.5569999814033508e-003 - -0.1425330042839050 - 0.2587620019912720 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>2 2 2 11 3. - 0 - 0.0120130004361272 - -0.2901549935340881 - 0.2605110108852387 - <_> - - <_> - - - - <_>18 0 6 15 -1. - <_>20 0 2 15 3. - 0 - 0.0243849996477365 - -0.0314389988780022 - 0.5869590044021606 - <_> - - <_> - - - - <_>0 0 6 13 -1. - <_>2 0 2 13 3. - 0 - -0.0471809990704060 - 0.6943010091781616 - -0.2181610018014908 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0248939990997314 - -0.6459929943084717 - 0.1561159938573837 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - 0.0219449996948242 - -0.0277420002967119 - -1.1346880197525024 - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>8 2 8 4 3. - 0 - 0.1880989968776703 - -0.0100760003551841 - 1.2429029941558838 - <_> - - <_> - - - - <_>3 13 18 4 -1. - <_>12 13 9 4 2. - 0 - -0.0778720006346703 - 0.8500800132751465 - -0.1901549994945526 - <_> - - <_> - - - - <_>9 7 10 4 -1. - <_>9 7 5 4 2. - 0 - -0.0487690009176731 - -2.0763080120086670 - 0.1217940002679825 - <_> - - <_> - - - - <_>5 8 12 3 -1. - <_>11 8 6 3 2. - 0 - -0.0171150006353855 - -0.8568729758262634 - 7.8760003671050072e-003 - <_> - - <_> - - - - <_>4 14 19 3 -1. - <_>4 15 19 1 3. - 0 - -2.7499999850988388e-003 - 0.3864549994468689 - -0.1139149963855743 - <_> - - <_> - - - - <_>10 0 4 20 -1. - <_>10 10 4 10 2. - 0 - -0.0987939983606339 - -1.7233899831771851 - -0.0560630001127720 - <_> - - <_> - - - - <_>8 15 9 6 -1. - <_>8 17 9 2 3. - 0 - -0.0219369996339083 - 0.5474939942359924 - -0.0424819998443127 - <_> - - <_> - - - - <_>2 9 15 4 -1. - <_>7 9 5 4 3. - 0 - 0.0610969997942448 - -0.0389450006186962 - -1.0807880163192749 - <_> - - <_> - - - - <_>8 4 12 7 -1. - <_>12 4 4 7 3. - 0 - -0.0245639998465776 - 0.5831109881401062 - -9.7599998116493225e-004 - <_> - - <_> - - - - <_>0 10 6 9 -1. - <_>0 13 6 3 3. - 0 - 0.0337520018219948 - -0.0137959998100996 - -0.8473029732704163 - <_> - - <_> - - - - <_>18 5 6 9 -1. - <_>18 8 6 3 3. - 0 - 0.0381990000605583 - 0.1511429995298386 - -0.7947340011596680 - <_> - - <_> - - - - <_>0 18 16 6 -1. - <_>0 18 8 3 2. - <_>8 21 8 3 2. - 0 - -0.0201179999858141 - 0.5157909989356995 - -0.2144539952278137 - <_> - - <_> - - - - <_>9 18 14 6 -1. - <_>16 18 7 3 2. - <_>9 21 7 3 2. - 0 - 0.0247349999845028 - -0.0221050009131432 - 0.4291769862174988 - <_> - - <_> - - - - <_>1 20 20 4 -1. - <_>1 20 10 2 2. - <_>11 22 10 2 2. - 0 - -0.0243570003658533 - -0.8620129823684692 - -3.6760000512003899e-003 - <_> - - <_> - - - - <_>2 8 20 6 -1. - <_>12 8 10 3 2. - <_>2 11 10 3 2. - 0 - -0.0264420006424189 - -0.4539749920368195 - 0.2246280014514923 - <_> - - <_> - - - - <_>7 8 6 9 -1. - <_>9 8 2 9 3. - 0 - -3.4429999068379402e-003 - 0.1307300031185150 - -0.3862270116806030 - <_> - - <_> - - - - <_>8 5 12 8 -1. - <_>12 5 4 8 3. - 0 - 0.1070170029997826 - 0.1315860003232956 - -0.7930690050125122 - <_> - - <_> - - - - <_>4 5 12 8 -1. - <_>8 5 4 8 3. - 0 - 0.0451529994606972 - -0.2529680132865906 - 0.4067240059375763 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - 0.0443499982357025 - 0.0226130001246929 - 0.7961810231208801 - <_> - - <_> - - - - <_>2 0 6 16 -1. - <_>4 0 2 16 3. - 0 - 1.0839999886229634e-003 - -0.3915840089321137 - 0.1163910031318665 - <_> - - <_> - - - - <_>15 4 6 12 -1. - <_>15 8 6 4 3. - 0 - 0.0714330002665520 - 0.0824669972062111 - 1.2530590295791626 - <_> - - <_> - - - - <_>3 4 6 12 -1. - <_>3 8 6 4 3. - 0 - 0.0358380004763603 - -0.1820330023765564 - 0.7707870006561279 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - -0.0208390001207590 - -0.6174439787864685 - 0.1589139997959137 - <_> - - <_> - - - - <_>4 0 15 22 -1. - <_>4 11 15 11 2. - 0 - 0.4252580106258392 - -0.0489780008792877 - -1.8422030210494995 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - 0.0114080002531409 - 0.1791819930076599 - -0.1538349986076355 - <_> - - <_> - - - - <_>0 12 9 6 -1. - <_>0 14 9 2 3. - 0 - -0.0153649998828769 - -0.8401650190353394 - -1.0280000278726220e-003 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - -0.0152120003476739 - -0.1899569928646088 - 0.1713099926710129 - <_> - - <_> - - - - <_>0 15 9 6 -1. - <_>0 17 9 2 3. - 0 - -0.0189720001071692 - -0.7954199910163879 - 6.6800001077353954e-003 - <_> - - <_> - - - - <_>10 0 8 10 -1. - <_>14 0 4 5 2. - <_>10 5 4 5 2. - 0 - -3.3330000005662441e-003 - -0.2353080064058304 - 0.2473009973764420 - <_> - - <_> - - - - <_>1 0 4 16 -1. - <_>3 0 2 16 2. - 0 - 0.0932480022311211 - -0.0547580011188984 - -1.8324300050735474 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -0.0125550003722310 - 0.2638520002365112 - -0.3852640092372894 - <_> - - <_> - - - - <_>10 12 4 10 -1. - <_>10 17 4 5 2. - 0 - -0.0270700007677078 - -0.6692979931831360 - 0.0203409995883703 - <_> - - <_> - - - - <_>8 4 10 6 -1. - <_>8 6 10 2 3. - 0 - -0.0236770007759333 - 0.6726530194282532 - -0.0143440002575517 - <_> - - <_> - - - - <_>3 22 18 2 -1. - <_>12 22 9 2 2. - 0 - -0.0142750004306436 - 0.3018639981746674 - -0.2851440012454987 - <_> - - <_> - - - - <_>7 7 11 6 -1. - <_>7 9 11 2 3. - 0 - 0.0280969999730587 - 0.1476600021123886 - -1.4078520536422729 - <_> - - <_> - - - - <_>0 0 12 10 -1. - <_>0 0 6 5 2. - <_>6 5 6 5 2. - 0 - 0.0508400015532970 - -0.1861360073089600 - 0.7995300292968750 - <_> - - <_> - - - - <_>10 1 12 6 -1. - <_>16 1 6 3 2. - <_>10 4 6 3 2. - 0 - 0.0115059996023774 - 0.1911839991807938 - -0.0850350037217140 - <_> - - <_> - - - - <_>7 16 9 4 -1. - <_>7 18 9 2 2. - 0 - -0.0146610001102090 - 0.4523929953575134 - -0.2220519930124283 - <_> - - <_> - - - - <_>5 7 15 16 -1. - <_>10 7 5 16 3. - 0 - 0.2284249961376190 - 0.1348839998245239 - -1.2894610166549683 - <_> - - <_> - - - - <_>5 10 12 13 -1. - <_>11 10 6 13 2. - 0 - 0.1110690012574196 - -0.2075379937887192 - 0.5456159710884094 - <_> - - <_> - - - - <_>6 2 12 6 -1. - <_>12 2 6 3 2. - <_>6 5 6 3 2. - 0 - 3.2450000289827585e-003 - 0.3205370008945465 - -0.1640350073575974 - <_> - - <_> - - - - <_>3 9 12 9 -1. - <_>3 12 12 3 3. - 0 - 0.0853099972009659 - -0.2021050006151199 - 0.5329679846763611 - <_> - - <_> - - - - <_>16 2 8 6 -1. - <_>16 5 8 3 2. - 0 - 0.0220480002462864 - 0.1569859981536865 - -0.1701409965753555 - <_> - - <_> - - - - <_>0 2 8 6 -1. - <_>0 5 8 3 2. - 0 - -0.0156769994646311 - -0.6286349892616272 - 0.0407619997859001 - <_> - - <_> - - - - <_>0 3 24 11 -1. - <_>0 3 12 11 2. - 0 - 0.3311290144920349 - 0.1660930067300797 - -1.0326379537582397 - <_> - - <_> - - - - <_>0 13 8 10 -1. - <_>0 13 4 5 2. - <_>4 18 4 5 2. - 0 - 8.8470000773668289e-003 - -0.2507619857788086 - 0.3166059851646423 - <_> - - <_> - - - - <_>10 14 4 10 -1. - <_>10 19 4 5 2. - 0 - 0.0460800006985664 - 0.1535210013389587 - -1.6333500146865845 - <_> - - <_> - - - - <_>10 2 4 21 -1. - <_>10 9 4 7 3. - 0 - -0.0377030000090599 - 0.5687379837036133 - -0.2010259926319122 - -3.5125269889831543 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>4 4 15 9 -1. - <_>4 7 15 3 3. - 0 - -0.0818089991807938 - 0.5712479948997498 - -0.6743879914283752 - <_> - - <_> - - - - <_>0 1 24 6 -1. - <_>8 1 8 6 3. - 0 - 0.2176119983196259 - -0.3861019909381867 - 0.9034399986267090 - <_> - - <_> - - - - <_>9 6 5 16 -1. - <_>9 14 5 8 2. - 0 - 0.0148780001327395 - 0.2224159985780716 - -1.2779350280761719 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>9 21 6 3 3. - 0 - 0.0524349994957447 - -0.2869040071964264 - 0.7574229836463928 - <_> - - <_> - - - - <_>6 5 3 12 -1. - <_>6 11 3 6 2. - 0 - 9.1429995372891426e-003 - -0.6488040089607239 - 0.2226880043745041 - <_> - - <_> - - - - <_>11 6 4 9 -1. - <_>11 6 2 9 2. - 0 - 7.9169999808073044e-003 - -0.2925359904766083 - 0.3103019893169403 - <_> - - <_> - - - - <_>5 6 9 8 -1. - <_>8 6 3 8 3. - 0 - -0.0260840002447367 - 0.4553270041942596 - -0.3850060105323792 - <_> - - <_> - - - - <_>4 3 20 2 -1. - <_>4 4 20 1 2. - 0 - -2.9400000348687172e-003 - -0.5126439929008484 - 0.2743229866027832 - <_> - - <_> - - - - <_>2 10 18 3 -1. - <_>8 10 6 3 3. - 0 - 0.0571300014853477 - 0.0157880000770092 - -1.2133100032806396 - <_> - - <_> - - - - <_>7 15 10 6 -1. - <_>7 17 10 2 3. - 0 - -6.1309998854994774e-003 - 0.3917460143566132 - -0.3086679875850678 - <_> - - <_> - - - - <_>1 4 4 18 -1. - <_>1 4 2 9 2. - <_>3 13 2 9 2. - 0 - -0.0404050014913082 - 1.1901949644088745 - -0.2034710049629211 - <_> - - <_> - - - - <_>13 0 6 9 -1. - <_>15 0 2 9 3. - 0 - -0.0202970001846552 - -0.6823949813842773 - 0.2045869976282120 - <_> - - <_> - - - - <_>5 0 6 9 -1. - <_>7 0 2 9 3. - 0 - -0.0171889998018742 - -0.8493989706039429 - 0.0384330004453659 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -0.0242159999907017 - -1.1039420366287231 - 0.1597509980201721 - <_> - - <_> - - - - <_>6 7 9 6 -1. - <_>9 7 3 6 3. - 0 - 0.0568690001964569 - -0.1959529966115952 - 1.1806850433349609 - <_> - - <_> - - - - <_>3 0 18 2 -1. - <_>3 1 18 1 2. - 0 - 3.6199999158270657e-004 - -0.4084779918193817 - 0.3293859958648682 - <_> - - <_> - - - - <_>0 10 20 4 -1. - <_>0 10 10 2 2. - <_>10 12 10 2 2. - 0 - 9.9790003150701523e-003 - -0.2967300117015839 - 0.4154790043830872 - <_> - - <_> - - - - <_>10 2 4 12 -1. - <_>10 8 4 6 2. - 0 - -0.0526250004768372 - -1.3069299459457397 - 0.1786260008811951 - <_> - - <_> - - - - <_>6 5 6 12 -1. - <_>6 5 3 6 2. - <_>9 11 3 6 2. - 0 - -0.0137489996850491 - 0.2366580069065094 - -0.4453659951686859 - <_> - - <_> - - - - <_>6 0 18 22 -1. - <_>15 0 9 11 2. - <_>6 11 9 11 2. - 0 - -0.0305170007050037 - 0.2901830077171326 - -0.1121010035276413 - <_> - - <_> - - - - <_>0 0 18 22 -1. - <_>0 0 9 11 2. - <_>9 11 9 11 2. - 0 - -0.3003750145435333 - -2.4237680435180664 - -0.0428309999406338 - <_> - - <_> - - - - <_>18 2 6 11 -1. - <_>20 2 2 11 3. - 0 - -0.0359909981489182 - 0.8820649981498718 - -0.0470129996538162 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>2 2 2 11 3. - 0 - -0.0551120005548000 - 0.8011900186538696 - -0.2049099951982498 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - 0.0337620005011559 - 0.1461759954690933 - -1.1349489688873291 - <_> - - <_> - - - - <_>0 0 20 3 -1. - <_>0 1 20 1 3. - 0 - -8.2710003480315208e-003 - -0.8160489797592163 - 0.0189880002290010 - <_> - - <_> - - - - <_>2 2 20 2 -1. - <_>2 3 20 1 2. - 0 - -5.4399999789893627e-003 - -0.7098090052604675 - 0.2234369963407517 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 11 18 1 2. - 0 - 3.1059999018907547e-003 - -0.7280859947204590 - 0.0402249991893768 - <_> - - <_> - - - - <_>18 7 6 9 -1. - <_>18 10 6 3 3. - 0 - 0.0536519996821880 - 0.1717090010643005 - -1.1163710355758667 - <_> - - <_> - - - - <_>0 0 22 9 -1. - <_>0 3 22 3 3. - 0 - -0.1254139989614487 - 2.7680370807647705 - -0.1461150050163269 - <_> - - <_> - - - - <_>17 3 6 9 -1. - <_>17 6 6 3 3. - 0 - 0.0925420001149178 - 0.1160980015993118 - -3.9635529518127441 - <_> - - <_> - - - - <_>0 7 6 9 -1. - <_>0 10 6 3 3. - 0 - 0.0385139994323254 - -7.6399999670684338e-003 - -0.9878090023994446 - <_> - - <_> - - - - <_>0 6 24 6 -1. - <_>0 8 24 2 3. - 0 - -2.0200000144541264e-003 - 0.2305999994277954 - -0.7497029900550842 - <_> - - <_> - - - - <_>0 2 6 10 -1. - <_>2 2 2 10 3. - 0 - 9.7599998116493225e-003 - -0.3113799989223480 - 0.3028779923915863 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - 0.0240950006991625 - -0.0495299994945526 - 0.5269010066986084 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0179820004850626 - -1.1610640287399292 - -5.7000000961124897e-003 - <_> - - <_> - - - - <_>15 0 6 9 -1. - <_>17 0 2 9 3. - 0 - -0.0105550000444055 - -0.2718909978866577 - 0.2359769940376282 - <_> - - <_> - - - - <_>3 0 6 9 -1. - <_>5 0 2 9 3. - 0 - -7.2889998555183411e-003 - -0.5421910285949707 - 0.0819140002131462 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - 0.0239390004426241 - 0.1797579973936081 - -0.6704949736595154 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -0.0183659996837378 - 0.6266430020332336 - -0.2097010016441345 - <_> - - <_> - - - - <_>15 14 9 6 -1. - <_>15 16 9 2 3. - 0 - 0.0157159995287657 - 0.2419369965791702 - -1.0444309711456299 - <_> - - <_> - - - - <_>0 15 23 6 -1. - <_>0 17 23 2 3. - 0 - -0.0488040000200272 - -0.9406059980392456 - -3.7519999314099550e-003 - <_> - - <_> - - - - <_>5 15 18 3 -1. - <_>5 16 18 1 3. - 0 - 6.7130001261830330e-003 - -0.0754320025444031 - 0.6157529950141907 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - 9.7770001739263535e-003 - 0.0392850004136562 - -0.8481029868125916 - <_> - - <_> - - - - <_>9 8 8 10 -1. - <_>13 8 4 5 2. - <_>9 13 4 5 2. - 0 - 0.0147449998185039 - 0.1696899980306625 - -0.5090640187263489 - <_> - - <_> - - - - <_>3 7 15 6 -1. - <_>8 7 5 6 3. - 0 - 0.0970790013670921 - -0.0331030003726482 - -1.2706379890441895 - <_> - - <_> - - - - <_>9 8 8 10 -1. - <_>13 8 4 5 2. - <_>9 13 4 5 2. - 0 - 0.0482859984040260 - 0.0943299978971481 - 2.7203190326690674 - <_> - - <_> - - - - <_>5 0 6 12 -1. - <_>8 0 3 12 2. - 0 - 9.7810002043843269e-003 - -0.3953340053558350 - 0.1536380052566528 - <_> - - <_> - - - - <_>9 8 8 10 -1. - <_>13 8 4 5 2. - <_>9 13 4 5 2. - 0 - -0.0398939996957779 - -0.2276740074157715 - 0.1391399949789047 - <_> - - <_> - - - - <_>8 5 6 9 -1. - <_>10 5 2 9 3. - 0 - 0.0228480007499456 - -0.2739199995994568 - 0.3419950008392334 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>12 6 2 9 2. - <_>10 15 2 9 2. - 0 - 6.7179999314248562e-003 - -0.1087429970502853 - 0.4812540113925934 - <_> - - <_> - - - - <_>5 7 12 4 -1. - <_>11 7 6 4 2. - 0 - 0.0595999993383884 - -0.0495220012962818 - -2.0117089748382568 - <_> - - <_> - - - - <_>9 8 8 10 -1. - <_>13 8 4 5 2. - <_>9 13 4 5 2. - 0 - 6.9340001791715622e-003 - 0.1503749936819077 - -0.1127189993858337 - <_> - - <_> - - - - <_>7 8 8 10 -1. - <_>7 8 4 5 2. - <_>11 13 4 5 2. - 0 - 0.0157570000737906 - -0.0208850000053644 - -1.1651979684829712 - <_> - - <_> - - - - <_>11 10 6 14 -1. - <_>14 10 3 7 2. - <_>11 17 3 7 2. - 0 - -0.0496900007128716 - -0.8021349906921387 - 0.1437229961156845 - <_> - - <_> - - - - <_>9 5 6 19 -1. - <_>12 5 3 19 2. - 0 - 0.0523470006883144 - -0.2083670049905777 - 0.6167759895324707 - <_> - - <_> - - - - <_>6 12 12 6 -1. - <_>12 12 6 3 2. - <_>6 15 6 3 2. - 0 - 0.0224309992045164 - 0.2030590027570725 - -0.7532619833946228 - <_> - - <_> - - - - <_>1 9 18 6 -1. - <_>1 9 9 3 2. - <_>10 12 9 3 2. - 0 - 0.0411420017480850 - -0.1811819970607758 - 1.0033359527587891 - <_> - - <_> - - - - <_>16 14 8 10 -1. - <_>20 14 4 5 2. - <_>16 19 4 5 2. - 0 - -0.0216320008039474 - 0.4999899864196777 - -0.0346629992127419 - <_> - - <_> - - - - <_>0 9 22 8 -1. - <_>0 9 11 4 2. - <_>11 13 11 4 2. - 0 - -0.0828080028295517 - 1.1711900234222412 - -0.1843360066413879 - <_> - - <_> - - - - <_>8 18 12 6 -1. - <_>14 18 6 3 2. - <_>8 21 6 3 2. - 0 - 8.5060000419616699e-003 - -0.0632250010967255 - 0.2902489900588989 - <_> - - <_> - - - - <_>0 6 20 18 -1. - <_>0 6 10 9 2. - <_>10 15 10 9 2. - 0 - 0.0789050012826920 - -0.2327450066804886 - 0.5969579815864563 - <_> - - <_> - - - - <_>3 6 20 12 -1. - <_>13 6 10 6 2. - <_>3 12 10 6 2. - 0 - -0.0902070030570030 - -0.8221189975738525 - 0.1777220070362091 - <_> - - <_> - - - - <_>0 16 10 8 -1. - <_>0 16 5 4 2. - <_>5 20 5 4 2. - 0 - -0.0292690005153418 - 0.6086069941520691 - -0.2146890014410019 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - 6.9499998353421688e-003 - -0.0426659993827343 - 0.6051210165023804 - <_> - - <_> - - - - <_>0 11 19 3 -1. - <_>0 12 19 1 3. - 0 - -8.0629996955394745e-003 - -1.1508270502090454 - -0.0272860005497932 - <_> - - <_> - - - - <_>14 6 6 9 -1. - <_>14 9 6 3 3. - 0 - 0.0195959992706776 - -9.1880001127719879e-003 - 0.5685780048370361 - <_> - - <_> - - - - <_>1 7 22 4 -1. - <_>1 7 11 2 2. - <_>12 9 11 2 2. - 0 - -0.0148849999532104 - 0.3765879869461060 - -0.2714950144290924 - <_> - - <_> - - - - <_>13 6 7 12 -1. - <_>13 10 7 4 3. - 0 - 0.0252170003950596 - -0.0999910011887550 - 0.2466470003128052 - <_> - - <_> - - - - <_>4 7 11 9 -1. - <_>4 10 11 3 3. - 0 - -0.0158559996634722 - 0.6682670116424561 - -0.2061470001935959 - <_> - - <_> - - - - <_>12 10 10 8 -1. - <_>17 10 5 4 2. - <_>12 14 5 4 2. - 0 - 0.0294410008937120 - 0.1583220064640045 - -0.7606089711189270 - <_> - - <_> - - - - <_>2 12 9 7 -1. - <_>5 12 3 7 3. - 0 - -8.5279997438192368e-003 - 0.3821229934692383 - -0.2540780007839203 - <_> - - <_> - - - - <_>16 14 6 9 -1. - <_>16 17 6 3 3. - 0 - 0.0244219992309809 - 0.1510509997606278 - -0.2875289916992188 - <_> - - <_> - - - - <_>3 12 6 12 -1. - <_>3 16 6 4 3. - 0 - -0.0338869988918304 - -0.6800280213356018 - 0.0343270003795624 - <_> - - <_> - - - - <_>14 13 6 6 -1. - <_>14 16 6 3 2. - 0 - -2.0810000132769346e-003 - 0.2541390061378479 - -0.2685909867286682 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>10 0 2 9 3. - 0 - 0.0303589999675751 - -0.0308420006185770 - -1.1476809978485107 - <_> - - <_> - - - - <_>9 1 6 23 -1. - <_>11 1 2 23 3. - 0 - 4.0210001170635223e-003 - -0.3525379896163940 - 0.2986809909343720 - <_> - - <_> - - - - <_>0 16 9 6 -1. - <_>0 18 9 2 3. - 0 - 0.0276810005307198 - -0.0381489992141724 - -1.3262039422988892 - <_> - - <_> - - - - <_>4 17 18 3 -1. - <_>4 18 18 1 3. - 0 - 7.9039996489882469e-003 - -0.0237370003014803 - 0.7050300240516663 - <_> - - <_> - - - - <_>5 2 13 14 -1. - <_>5 9 13 7 2. - 0 - 0.0440310016274452 - 0.1067489981651306 - -0.4526120126247406 - <_> - - <_> - - - - <_>15 0 8 12 -1. - <_>19 0 4 6 2. - <_>15 6 4 6 2. - 0 - -0.0323709994554520 - 0.4667490124702454 - -0.0615469999611378 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>0 0 4 6 2. - <_>4 6 4 6 2. - 0 - 0.0209330003708601 - -0.2844789922237396 - 0.4384559988975525 - <_> - - <_> - - - - <_>8 2 8 7 -1. - <_>8 2 4 7 2. - 0 - 0.0252279993146658 - -0.0225370004773140 - 0.7038909792900085 - <_> - - <_> - - - - <_>1 1 6 9 -1. - <_>3 1 2 9 3. - 0 - 6.5520000644028187e-003 - -0.3255490064620972 - 0.2402369976043701 - <_> - - <_> - - - - <_>14 8 6 12 -1. - <_>17 8 3 6 2. - <_>14 14 3 6 2. - 0 - -0.0585579983890057 - -1.2227720022201538 - 0.1166879981756210 - <_> - - <_> - - - - <_>4 8 6 12 -1. - <_>4 8 3 6 2. - <_>7 14 3 6 2. - 0 - 0.0318999998271465 - -0.0193050000816584 - -1.0973169803619385 - <_> - - <_> - - - - <_>16 5 5 15 -1. - <_>16 10 5 5 3. - 0 - -0.0304450001567602 - 0.6558250188827515 - 0.0750909969210625 - <_> - - <_> - - - - <_>3 5 5 15 -1. - <_>3 10 5 5 3. - 0 - 0.0149330003187060 - -0.5215579867362976 - 0.1152309998869896 - <_> - - <_> - - - - <_>18 4 6 9 -1. - <_>18 7 6 3 3. - 0 - -0.0490080006420612 - -0.7830399870872498 - 0.1665720045566559 - <_> - - <_> - - - - <_>1 7 6 15 -1. - <_>1 12 6 5 3. - 0 - 0.0831589996814728 - -2.6879999786615372e-003 - -0.8528230190277100 - <_> - - <_> - - - - <_>11 15 12 8 -1. - <_>17 15 6 4 2. - <_>11 19 6 4 2. - 0 - 0.0239029992371798 - -0.0510109998285770 - 0.4199909865856171 - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>0 2 12 2 2. - <_>12 4 12 2 2. - 0 - 0.0164289996027946 - 0.0192329995334148 - -0.6504909992218018 - <_> - - <_> - - - - <_>15 1 2 19 -1. - <_>15 1 1 19 2. - 0 - -0.0118380002677441 - -0.6240980029106140 - 0.1541119962930679 - <_> - - <_> - - - - <_>7 1 2 19 -1. - <_>8 1 1 19 2. - 0 - -1.6799999866634607e-004 - 0.1758919954299927 - -0.3433870077133179 - <_> - - <_> - - - - <_>22 1 2 20 -1. - <_>22 1 1 20 2. - 0 - 0.0191939994692802 - 0.0434189997613430 - 0.7906919717788696 - <_> - - <_> - - - - <_>0 1 2 20 -1. - <_>1 1 1 20 2. - 0 - -0.0100320000201464 - 0.4564889967441559 - -0.2249480038881302 - <_> - - <_> - - - - <_>18 11 6 12 -1. - <_>20 11 2 12 3. - 0 - -0.0140040004625916 - 0.3357099890708923 - -4.8799999058246613e-003 - <_> - - <_> - - - - <_>0 11 6 12 -1. - <_>2 11 2 12 3. - 0 - -0.1031989976763725 - -2.3378000259399414 - -0.0589330010116100 - <_> - - <_> - - - - <_>3 6 18 14 -1. - <_>3 13 18 7 2. - 0 - -0.0956970006227493 - -0.6615390181541443 - 0.2009859979152679 - <_> - - <_> - - - - <_>6 10 7 8 -1. - <_>6 14 7 4 2. - 0 - -0.0414809994399548 - 0.4593920111656189 - -0.2231409996747971 - <_> - - <_> - - - - <_>7 9 12 12 -1. - <_>7 13 12 4 3. - 0 - 2.4099999573081732e-003 - -0.2689859867095947 - 0.2492299973964691 - <_> - - <_> - - - - <_>2 18 18 5 -1. - <_>11 18 9 5 2. - 0 - 0.1072499975562096 - -0.1864019930362701 - 0.7276980280876160 - <_> - - <_> - - - - <_>4 21 20 3 -1. - <_>4 22 20 1 3. - 0 - 3.1870000530034304e-003 - -0.0246089994907379 - 0.2864390015602112 - <_> - - <_> - - - - <_>9 12 6 12 -1. - <_>9 12 3 6 2. - <_>12 18 3 6 2. - 0 - 0.0291670002043247 - -0.0346830002963543 - -1.1162580251693726 - <_> - - <_> - - - - <_>4 6 18 3 -1. - <_>4 7 18 1 3. - 0 - 0.0112870000302792 - 6.3760001212358475e-003 - 0.6663209795951843 - <_> - - <_> - - - - <_>3 6 18 3 -1. - <_>3 7 18 1 3. - 0 - -0.0120010003447533 - 0.4242010116577148 - -0.2627980113029480 - <_> - - <_> - - - - <_>18 4 6 9 -1. - <_>18 7 6 3 3. - 0 - -0.0126959998160601 - -0.0219570007175207 - 0.1893679946660996 - <_> - - <_> - - - - <_>2 12 9 6 -1. - <_>2 14 9 2 3. - 0 - 0.0245970003306866 - -0.0349639989435673 - -1.0989320278167725 - <_> - - <_> - - - - <_>4 14 18 4 -1. - <_>13 14 9 2 2. - <_>4 16 9 2 2. - 0 - 0.0459530018270016 - 0.1110979989171028 - -2.9306049346923828 - <_> - - <_> - - - - <_>7 7 6 14 -1. - <_>7 7 3 7 2. - <_>10 14 3 7 2. - 0 - -0.0272410009056330 - 0.2910169959068298 - -0.2740789949893951 - <_> - - <_> - - - - <_>7 13 12 6 -1. - <_>13 13 6 3 2. - <_>7 16 6 3 2. - 0 - 0.0400639995932579 - 0.1187790036201477 - -0.6280180215835571 - <_> - - <_> - - - - <_>6 7 12 9 -1. - <_>10 7 4 9 3. - 0 - 0.0230550002306700 - 0.1481380015611649 - -0.3700749874114990 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>12 12 3 6 2. - 0 - -0.0237370003014803 - -0.5372480154037476 - 0.1935819983482361 - <_> - - <_> - - - - <_>0 2 4 10 -1. - <_>0 7 4 5 2. - 0 - 0.0775220021605492 - -0.0601940006017685 - -1.9489669799804688 - <_> - - <_> - - - - <_>8 0 9 6 -1. - <_>11 0 3 6 3. - 0 - -0.0133450003340840 - -0.4522959887981415 - 0.1874150037765503 - <_> - - <_> - - - - <_>2 9 12 6 -1. - <_>2 12 12 3 2. - 0 - -0.0217199996113777 - 1.2144249677658081 - -0.1536580026149750 - <_> - - <_> - - - - <_>13 10 6 9 -1. - <_>13 13 6 3 3. - 0 - -0.0714749991893768 - -2.3047130107879639 - 0.1099990010261536 - <_> - - <_> - - - - <_>5 10 6 9 -1. - <_>5 13 6 3 3. - 0 - -5.4999999701976776e-003 - -0.7185519933700562 - 0.0201009996235371 - <_> - - <_> - - - - <_>9 15 9 6 -1. - <_>9 17 9 2 3. - 0 - 0.0267409998923540 - 0.0735450014472008 - 0.9878600239753723 - <_> - - <_> - - - - <_>5 16 12 6 -1. - <_>5 19 12 3 2. - 0 - -0.0394079983234406 - -1.2227380275726318 - -0.0435069985687733 - <_> - - <_> - - - - <_>3 2 20 3 -1. - <_>3 3 20 1 3. - 0 - 0.0258889999240637 - 0.1340930014848709 - -1.1770780086517334 - <_> - - <_> - - - - <_>2 5 12 6 -1. - <_>6 5 4 6 3. - 0 - 0.0489250011742115 - -0.0308100003749132 - -0.9347950220108032 - <_> - - <_> - - - - <_>11 0 3 24 -1. - <_>12 0 1 24 3. - 0 - 0.0368929989635944 - 0.1333370059728622 - -1.4998290538787842 - <_> - - <_> - - - - <_>3 16 15 4 -1. - <_>8 16 5 4 3. - 0 - 0.0789299979805946 - -0.1453880071640015 - 1.5631790161132813 - <_> - - <_> - - - - <_>9 12 6 12 -1. - <_>9 18 6 6 2. - 0 - 0.0290060006082058 - 0.1938370019197464 - -0.6764280200004578 - <_> - - <_> - - - - <_>1 15 12 8 -1. - <_>1 15 6 4 2. - <_>7 19 6 4 2. - 0 - 6.3089998438954353e-003 - -0.3746539950370789 - 0.1085750013589859 - <_> - - <_> - - - - <_>15 10 8 14 -1. - <_>19 10 4 7 2. - <_>15 17 4 7 2. - 0 - -0.0658309981226921 - 0.8105940222740173 - 0.0302019994705915 - <_> - - <_> - - - - <_>1 9 8 14 -1. - <_>1 9 4 7 2. - <_>5 16 4 7 2. - 0 - -0.0689650028944016 - 0.8377259969711304 - -0.1714099943637848 - <_> - - <_> - - - - <_>9 11 9 10 -1. - <_>9 16 9 5 2. - 0 - -0.1166910007596016 - -0.9464719891548157 - 0.1312319934368134 - <_> - - <_> - - - - <_>6 7 12 6 -1. - <_>6 9 12 2 3. - 0 - -1.3060000492259860e-003 - 0.0460079982876778 - -0.5201159715652466 - <_> - - <_> - - - - <_>10 15 6 9 -1. - <_>12 15 2 9 3. - 0 - -0.0445589981973171 - -1.9423669576644897 - 0.1320070028305054 - <_> - - <_> - - - - <_>7 8 9 7 -1. - <_>10 8 3 7 3. - 0 - 0.0510330013930798 - -0.2148099988698959 - 0.4867390096187592 - <_> - - <_> - - - - <_>10 4 8 10 -1. - <_>14 4 4 5 2. - <_>10 9 4 5 2. - 0 - -0.0315780006349087 - 0.5998979806900024 - 7.9159997403621674e-003 - <_> - - <_> - - - - <_>4 6 6 9 -1. - <_>4 9 6 3 3. - 0 - 0.0210200008004904 - -0.2206950038671494 - 0.5404620170593262 - <_> - - <_> - - - - <_>0 6 24 12 -1. - <_>8 6 8 12 3. - 0 - -0.1382420063018799 - 0.6295750141143799 - -0.0217129997909069 - <_> - - <_> - - - - <_>3 7 6 14 -1. - <_>6 7 3 14 2. - 0 - 0.0522289983928204 - -0.2336090058088303 - 0.4976080060005188 - <_> - - <_> - - - - <_>19 8 5 8 -1. - <_>19 12 5 4 2. - 0 - 0.0258840005844831 - 0.1804199963808060 - -0.2203920036554337 - <_> - - <_> - - - - <_>0 8 5 8 -1. - <_>0 12 5 4 2. - 0 - -0.0121389999985695 - -0.6973189711570740 - 0.0157120004296303 - <_> - - <_> - - - - <_>17 3 6 6 -1. - <_>17 6 6 3 2. - 0 - -0.0242379996925592 - 0.3459329903125763 - 0.0714699998497963 - <_> - - <_> - - - - <_>1 3 6 6 -1. - <_>1 6 6 3 2. - 0 - -0.0252720005810261 - -0.8758329749107361 - -9.8240002989768982e-003 - <_> - - <_> - - - - <_>18 2 6 9 -1. - <_>18 5 6 3 3. - 0 - 0.0125970002263784 - 0.2364999949932098 - -0.2873120009899139 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - 0.0573309995234013 - -0.0615309998393059 - -2.2326040267944336 - <_> - - <_> - - - - <_>3 3 18 6 -1. - <_>3 5 18 2 3. - 0 - 0.0166710000485182 - -0.1985010057687759 - 0.4081070125102997 - <_> - - <_> - - - - <_>2 3 9 6 -1. - <_>2 5 9 2 3. - 0 - -0.0228189993649721 - 0.9648759961128235 - -0.2024569958448410 - <_> - - <_> - - - - <_>9 3 10 8 -1. - <_>14 3 5 4 2. - <_>9 7 5 4 2. - 0 - 3.7000001611886546e-005 - -0.0589089989662170 - 0.2705540060997009 - <_> - - <_> - - - - <_>5 3 10 8 -1. - <_>5 3 5 4 2. - <_>10 7 5 4 2. - 0 - -7.6700001955032349e-003 - -0.4531710147857666 - 0.0896280035376549 - <_> - - <_> - - - - <_>10 11 6 12 -1. - <_>10 11 3 12 2. - 0 - 0.0940859988331795 - 0.1160459965467453 - -1.0951169729232788 - <_> - - <_> - - - - <_>8 11 6 11 -1. - <_>11 11 3 11 2. - 0 - -0.0622670017182827 - 1.8096530437469482 - -0.1477320045232773 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 8 5 4 2. - 0 - 0.0174160003662109 - 0.2306820005178452 - -0.4241760075092316 - <_> - - <_> - - - - <_>9 6 6 7 -1. - <_>12 6 3 7 2. - 0 - -0.0220660008490086 - 0.4927029907703400 - -0.2063090056180954 - <_> - - <_> - - - - <_>5 18 18 3 -1. - <_>5 19 18 1 3. - 0 - -0.0104040000587702 - 0.6092429757118225 - 0.0281300004571676 - <_> - - <_> - - - - <_>8 4 6 9 -1. - <_>10 4 2 9 3. - 0 - -9.3670003116130829e-003 - 0.4017120003700256 - -0.2168170064687729 - <_> - - <_> - - - - <_>8 1 9 7 -1. - <_>11 1 3 7 3. - 0 - -0.0290399994701147 - -0.8487650156021118 - 0.1424680054187775 - <_> - - <_> - - - - <_>6 11 6 6 -1. - <_>9 11 3 6 2. - 0 - -0.0210619997233152 - -0.7919830083847046 - -0.0125959999859333 - <_> - - <_> - - - - <_>14 12 4 11 -1. - <_>14 12 2 11 2. - 0 - -0.0370009988546371 - -0.6748890280723572 - 0.1283040046691895 - <_> - - <_> - - - - <_>6 12 4 11 -1. - <_>8 12 2 11 2. - 0 - 0.0107359997928143 - 0.0367799997329712 - -0.6339300274848938 - <_> - - <_> - - - - <_>8 0 12 18 -1. - <_>12 0 4 18 3. - 0 - 0.1636759936809540 - 0.1380389928817749 - -0.4718900024890900 - <_> - - <_> - - - - <_>2 12 10 5 -1. - <_>7 12 5 5 2. - 0 - 0.0949179977178574 - -0.1385570019483566 - 1.9492419958114624 - <_> - - <_> - - - - <_>2 20 22 3 -1. - <_>2 21 22 1 3. - 0 - 0.0352619998157024 - 0.1372189968824387 - -2.1186530590057373 - <_> - - <_> - - - - <_>0 4 2 20 -1. - <_>1 4 1 20 2. - 0 - 0.0128110004588962 - -0.2000810056924820 - 0.4950779974460602 - -3.5939640998840332 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>0 2 24 4 -1. - <_>8 2 8 4 3. - 0 - 0.1390440016984940 - -0.4658119976520538 - 0.7643160223960877 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 10 10 2 2. - 0 - 0.0119169997051358 - -0.9439899921417236 - 0.3972629904747009 - <_> - - <_> - - - - <_>6 7 8 10 -1. - <_>6 7 4 5 2. - <_>10 12 4 5 2. - 0 - -0.0100069995969534 - 0.3271879851818085 - -0.6336740255355835 - <_> - - <_> - - - - <_>14 0 6 14 -1. - <_>17 0 3 7 2. - <_>14 7 3 7 2. - 0 - -6.0479999519884586e-003 - 0.2742789983749390 - -0.5744699835777283 - <_> - - <_> - - - - <_>4 11 5 8 -1. - <_>4 15 5 4 2. - 0 - -1.2489999644458294e-003 - 0.2362930029630661 - -0.6859350204467773 - <_> - - <_> - - - - <_>2 0 20 9 -1. - <_>2 3 20 3 3. - 0 - 0.0323820002377033 - -0.5763019919395447 - 0.2749269902706146 - <_> - - <_> - - - - <_>6 7 12 8 -1. - <_>6 7 6 4 2. - <_>12 11 6 4 2. - 0 - -0.0139579996466637 - -0.6106150150299072 - 0.2454160004854202 - <_> - - <_> - - - - <_>9 17 6 6 -1. - <_>9 20 6 3 2. - 0 - 1.1159999994561076e-003 - -0.5653910040855408 - 0.2717930078506470 - <_> - - <_> - - - - <_>7 10 10 4 -1. - <_>7 12 10 2 2. - 0 - 2.7000000045518391e-005 - -0.8023599982261658 - 0.1150910034775734 - <_> - - <_> - - - - <_>6 5 12 9 -1. - <_>10 5 4 9 3. - 0 - -2.5700000696815550e-004 - -0.8120589852333069 - 0.2384469956159592 - <_> - - <_> - - - - <_>5 11 6 8 -1. - <_>8 11 3 8 2. - 0 - 4.0460000745952129e-003 - 0.1390960067510605 - -0.6616320013999939 - <_> - - <_> - - - - <_>18 4 4 17 -1. - <_>18 4 2 17 2. - 0 - 0.0143560003489256 - -0.1648519933223724 - 0.4190169870853424 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0553749985992908 - 1.4425870180130005 - -0.1882019937038422 - <_> - - <_> - - - - <_>18 4 4 17 -1. - <_>18 4 2 17 2. - 0 - 0.0935949981212616 - 0.1354829967021942 - -0.9163609743118286 - <_> - - <_> - - - - <_>2 4 4 17 -1. - <_>4 4 2 17 2. - 0 - 0.0266249999403954 - -0.3374829888343811 - 0.3923360109329224 - <_> - - <_> - - - - <_>5 18 19 3 -1. - <_>5 19 19 1 3. - 0 - 3.7469998933374882e-003 - -0.1161540001630783 - 0.4439930021762848 - <_> - - <_> - - - - <_>11 0 2 18 -1. - <_>11 9 2 9 2. - 0 - -0.0318860001862049 - -0.9949830174446106 - 1.6120000509545207e-003 - <_> - - <_> - - - - <_>15 4 2 18 -1. - <_>15 13 2 9 2. - 0 - -0.0226000007241964 - -0.4806739985942841 - 0.1700730025768280 - <_> - - <_> - - - - <_>7 4 2 18 -1. - <_>7 13 2 9 2. - 0 - 0.0252020005136728 - 0.0355800017714500 - -0.8021540045738220 - <_> - - <_> - - - - <_>7 11 10 8 -1. - <_>12 11 5 4 2. - <_>7 15 5 4 2. - 0 - -0.0310369990766048 - -1.0895340442657471 - 0.1808190047740936 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>12 6 2 9 2. - 0 - -0.0264759995043278 - 0.9567120075225830 - -0.2104939967393875 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - -0.0138539997860789 - -1.0370320081710815 - 0.2216670066118240 - <_> - - <_> - - - - <_>2 9 16 8 -1. - <_>2 9 8 4 2. - <_>10 13 8 4 2. - 0 - -0.0629250034689903 - 0.9019939899444580 - -0.1908529996871948 - <_> - - <_> - - - - <_>14 15 6 9 -1. - <_>14 18 6 3 3. - 0 - -0.0447509996592999 - -1.0119110345840454 - 0.1469119936227799 - <_> - - <_> - - - - <_>8 7 6 9 -1. - <_>10 7 2 9 3. - 0 - -0.0204280000180006 - 0.6162449717521668 - -0.2355269938707352 - <_> - - <_> - - - - <_>14 15 6 9 -1. - <_>14 18 6 3 3. - 0 - -8.0329999327659607e-003 - -0.0832799971103668 - 0.2172870039939880 - <_> - - <_> - - - - <_>3 12 12 6 -1. - <_>3 14 12 2 3. - 0 - 8.7280003353953362e-003 - 0.0654589980840683 - -0.6031870245933533 - <_> - - <_> - - - - <_>14 12 9 6 -1. - <_>14 14 9 2 3. - 0 - -0.0272020008414984 - -0.9344739913940430 - 0.1527000069618225 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>1 14 9 2 3. - 0 - -0.0164710003882647 - -0.8417710065841675 - 0.0133320000022650 - <_> - - <_> - - - - <_>3 7 18 3 -1. - <_>3 8 18 1 3. - 0 - -0.0137440003454685 - 0.6056720018386841 - -0.0920210033655167 - <_> - - <_> - - - - <_>1 7 22 6 -1. - <_>1 9 22 2 3. - 0 - 0.0291649997234344 - -0.0281140003353357 - -1.4014569520950317 - <_> - - <_> - - - - <_>18 4 6 6 -1. - <_>18 7 6 3 2. - 0 - 0.0374570004642010 - 0.1308059990406036 - -0.4938249886035919 - <_> - - <_> - - - - <_>0 4 6 6 -1. - <_>0 7 6 3 2. - 0 - -0.0250700004398823 - -1.1289390325546265 - -0.0146000003442168 - <_> - - <_> - - - - <_>5 11 16 6 -1. - <_>5 14 16 3 2. - 0 - -0.0638120025396347 - 0.7587159872055054 - -1.8200000049546361e-003 - <_> - - <_> - - - - <_>6 16 9 4 -1. - <_>6 18 9 2 2. - 0 - -9.3900002539157867e-003 - 0.2993640005588532 - -0.2948780059814453 - <_> - - <_> - - - - <_>14 15 6 9 -1. - <_>14 18 6 3 3. - 0 - -7.6000002445653081e-004 - 0.0197250004857779 - 0.1999389976263046 - <_> - - <_> - - - - <_>4 15 6 9 -1. - <_>4 18 6 3 3. - 0 - -0.0217409990727901 - -0.8524789810180664 - 0.0491699986159801 - <_> - - <_> - - - - <_>15 1 6 23 -1. - <_>17 1 2 23 3. - 0 - -0.0178699996322393 - -0.0599859990179539 - 0.1522250026464462 - <_> - - <_> - - - - <_>0 21 24 3 -1. - <_>8 21 8 3 3. - 0 - -0.0248310007154942 - 0.3560340106487274 - -0.2625989913940430 - <_> - - <_> - - - - <_>0 20 24 4 -1. - <_>8 20 8 4 3. - 0 - 0.1571550071239471 - 1.5599999460391700e-004 - 1.0428730249404907 - <_> - - <_> - - - - <_>3 1 6 23 -1. - <_>5 1 2 23 3. - 0 - 0.0690269991755486 - -0.0330069996416569 - -1.1796669960021973 - <_> - - <_> - - - - <_>3 17 18 3 -1. - <_>3 18 18 1 3. - 0 - -0.0110219996422529 - 0.5898770093917847 - -0.0576479993760586 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - -0.0138349998742342 - 0.5950279831886292 - -0.2441859990358353 - <_> - - <_> - - - - <_>1 16 22 4 -1. - <_>12 16 11 2 2. - <_>1 18 11 2 2. - 0 - -0.0309410002082586 - -1.1723799705505371 - 0.1690700054168701 - <_> - - <_> - - - - <_>0 16 9 6 -1. - <_>0 18 9 2 3. - 0 - 0.0212580002844334 - -0.0189009997993708 - -1.0684759616851807 - <_> - - <_> - - - - <_>2 10 21 3 -1. - <_>9 10 7 3 3. - 0 - 0.0930799990892410 - 0.1630560010671616 - -1.3375270366668701 - <_> - - <_> - - - - <_>2 18 12 6 -1. - <_>2 18 6 3 2. - <_>8 21 6 3 2. - 0 - 0.0296359993517399 - -0.2252479940652847 - 0.4540010094642639 - <_> - - <_> - - - - <_>0 5 24 4 -1. - <_>0 7 24 2 2. - 0 - -1.2199999764561653e-004 - 0.2740910053253174 - -0.3737139999866486 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0420980006456375 - -0.7582880258560181 - 0.0171370003372431 - <_> - - <_> - - - - <_>10 7 6 12 -1. - <_>10 13 6 6 2. - 0 - -0.0225050002336502 - -0.2275930047035217 - 0.2369869947433472 - <_> - - <_> - - - - <_>6 6 6 9 -1. - <_>8 6 2 9 3. - 0 - -0.0128629999235272 - 0.1925240010023117 - -0.3212710022926331 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - 0.0278600007295609 - 0.1672369986772537 - -1.0209059715270996 - <_> - - <_> - - - - <_>9 7 6 9 -1. - <_>11 7 2 9 3. - 0 - -0.0278079994022846 - 1.2824759483337402 - -0.1722529977560043 - <_> - - <_> - - - - <_>2 1 20 3 -1. - <_>2 2 20 1 3. - 0 - -6.1630001291632652e-003 - -0.5407289862632752 - 0.2388570010662079 - <_> - - <_> - - - - <_>1 18 12 6 -1. - <_>1 18 6 3 2. - <_>7 21 6 3 2. - 0 - -0.0204360000789166 - 0.6335539817810059 - -0.2109059989452362 - <_> - - <_> - - - - <_>13 2 4 13 -1. - <_>13 2 2 13 2. - 0 - -0.0123079996556044 - -0.4977819919586182 - 0.1740259975194931 - <_> - - <_> - - - - <_>6 7 12 4 -1. - <_>12 7 6 4 2. - 0 - -0.0404939986765385 - -1.1848740577697754 - -0.0338909998536110 - <_> - - <_> - - - - <_>10 1 4 13 -1. - <_>10 1 2 13 2. - 0 - 0.0296570006757975 - 0.0217409990727901 - 1.0069919824600220 - <_> - - <_> - - - - <_>6 0 3 18 -1. - <_>7 0 1 18 3. - 0 - 6.8379999138414860e-003 - 0.0292179994285107 - -0.5990629792213440 - <_> - - <_> - - - - <_>14 3 10 5 -1. - <_>14 3 5 5 2. - 0 - 0.0161649994552135 - -0.2100079953670502 - 0.3763729929924011 - <_> - - <_> - - - - <_>6 15 12 8 -1. - <_>10 15 4 8 3. - 0 - 0.0501930005848408 - 2.5319999549537897e-003 - -0.7166820168495178 - <_> - - <_> - - - - <_>9 10 6 9 -1. - <_>11 10 2 9 3. - 0 - 1.9680000841617584e-003 - -0.2192140072584152 - 0.3229869902133942 - <_> - - <_> - - - - <_>8 3 4 9 -1. - <_>10 3 2 9 2. - 0 - 0.0249799992889166 - -9.6840001642704010e-003 - -0.7757290005683899 - <_> - - <_> - - - - <_>17 0 6 14 -1. - <_>20 0 3 7 2. - <_>17 7 3 7 2. - 0 - -0.0158099997788668 - 0.4463750123977661 - -0.0617600008845329 - <_> - - <_> - - - - <_>1 0 6 14 -1. - <_>1 0 3 7 2. - <_>4 7 3 7 2. - 0 - 0.0372069999575615 - -0.2049539983272553 - 0.5772219896316528 - <_> - - <_> - - - - <_>14 0 6 16 -1. - <_>17 0 3 8 2. - <_>14 8 3 8 2. - 0 - -0.0792649984359741 - -0.7674540281295776 - 0.1255040019750595 - <_> - - <_> - - - - <_>7 4 4 10 -1. - <_>9 4 2 10 2. - 0 - -0.0171520002186298 - -1.4121830463409424 - -0.0517040006816387 - <_> - - <_> - - - - <_>3 17 18 6 -1. - <_>12 17 9 3 2. - <_>3 20 9 3 2. - 0 - 0.0327400006353855 - 0.1933400034904480 - -0.6363369822502136 - <_> - - <_> - - - - <_>1 20 22 4 -1. - <_>12 20 11 4 2. - 0 - -0.1175699979066849 - 0.8432540297508240 - -0.1801860034465790 - <_> - - <_> - - - - <_>14 3 10 5 -1. - <_>14 3 5 5 2. - 0 - 0.1205720007419586 - 0.1253000050783157 - -2.1213600635528564 - <_> - - <_> - - - - <_>0 3 10 5 -1. - <_>5 3 5 5 2. - 0 - 4.2779999785125256e-003 - -0.4660440087318420 - 0.0896439999341965 - <_> - - <_> - - - - <_>12 6 12 16 -1. - <_>16 6 4 16 3. - 0 - -0.0725449994206429 - 0.5182650089263916 - 0.0168239995837212 - <_> - - <_> - - - - <_>0 6 12 16 -1. - <_>4 6 4 16 3. - 0 - 0.1771059930324554 - -0.0309100002050400 - -1.1046639680862427 - <_> - - <_> - - - - <_>10 9 5 15 -1. - <_>10 14 5 5 3. - 0 - 8.4229996427893639e-003 - 0.2444580048322678 - -0.3861309885978699 - <_> - - <_> - - - - <_>1 18 21 2 -1. - <_>1 19 21 1 2. - 0 - -0.0130350003018975 - 0.9800440073013306 - -0.1701650023460388 - <_> - - <_> - - - - <_>15 0 9 6 -1. - <_>15 2 9 2 3. - 0 - 0.0189120005816221 - 0.2024849951267242 - -0.3854590058326721 - <_> - - <_> - - - - <_>6 1 12 4 -1. - <_>12 1 6 4 2. - 0 - 0.0214479994028807 - -0.2571719884872437 - 0.3518120050430298 - <_> - - <_> - - - - <_>6 0 12 12 -1. - <_>12 0 6 6 2. - <_>6 6 6 6 2. - 0 - 0.0633570030331612 - 0.1699479967355728 - -0.9138380289077759 - <_> - - <_> - - - - <_>8 10 8 12 -1. - <_>8 10 4 6 2. - <_>12 16 4 6 2. - 0 - -0.0324359983205795 - -0.8568159937858582 - -0.0216809995472431 - <_> - - <_> - - - - <_>14 16 10 8 -1. - <_>19 16 5 4 2. - <_>14 20 5 4 2. - 0 - -0.0235649999231100 - 0.5611559748649597 - -2.2400000307243317e-004 - <_> - - <_> - - - - <_>0 16 10 8 -1. - <_>0 16 5 4 2. - <_>5 20 5 4 2. - 0 - 0.0187890008091927 - -0.2545979917049408 - 0.3451290130615234 - <_> - - <_> - - - - <_>10 12 12 5 -1. - <_>14 12 4 5 3. - 0 - 0.0310420002788305 - 7.5719999149441719e-003 - 0.3480019867420197 - <_> - - <_> - - - - <_>6 16 10 8 -1. - <_>6 16 5 4 2. - <_>11 20 5 4 2. - 0 - -0.0112269995734096 - -0.6021980047225952 - 0.0428149998188019 - <_> - - <_> - - - - <_>7 6 12 6 -1. - <_>13 6 6 3 2. - <_>7 9 6 3 2. - 0 - -0.0128459995612502 - 0.4202040135860443 - -0.0538010001182556 - <_> - - <_> - - - - <_>9 6 4 18 -1. - <_>9 6 2 9 2. - <_>11 15 2 9 2. - 0 - -0.0127919996157289 - 0.2272450029850006 - -0.3239800035953522 - <_> - - <_> - - - - <_>10 9 6 14 -1. - <_>13 9 3 7 2. - <_>10 16 3 7 2. - 0 - 0.0686519965529442 - 0.0935320034623146 - 10. - <_> - - <_> - - - - <_>8 9 6 14 -1. - <_>8 9 3 7 2. - <_>11 16 3 7 2. - 0 - 5.2789999172091484e-003 - -0.2692629992961884 - 0.3330320119857788 - <_> - - <_> - - - - <_>7 4 11 12 -1. - <_>7 10 11 6 2. - 0 - -0.0387790016829968 - -0.7236530184745789 - 0.1780650019645691 - <_> - - <_> - - - - <_>4 8 6 16 -1. - <_>4 8 3 8 2. - <_>7 16 3 8 2. - 0 - 6.1820000410079956e-003 - -0.3511939942836762 - 0.1658630073070526 - <_> - - <_> - - - - <_>17 3 4 21 -1. - <_>17 10 4 7 3. - 0 - 0.1751520037651062 - 0.1162310019135475 - -1.5419290065765381 - <_> - - <_> - - - - <_>3 3 4 21 -1. - <_>3 10 4 7 3. - 0 - 0.1162799969315529 - -9.1479998081922531e-003 - -0.9984260201454163 - <_> - - <_> - - - - <_>10 1 8 18 -1. - <_>14 1 4 9 2. - <_>10 10 4 9 2. - 0 - -0.0229640007019043 - 0.2056539952754974 - 0.0154320001602173 - <_> - - <_> - - - - <_>2 5 16 8 -1. - <_>2 5 8 4 2. - <_>10 9 8 4 2. - 0 - -0.0514100007712841 - 0.5807240009307861 - -0.2011840045452118 - <_> - - <_> - - - - <_>3 6 18 12 -1. - <_>3 10 18 4 3. - 0 - 0.2247419953346252 - 0.0187289994210005 - 1.0829299688339233 - <_> - - <_> - - - - <_>4 10 16 12 -1. - <_>4 14 16 4 3. - 0 - 9.4860000535845757e-003 - -0.3317129909992218 - 0.1990299969911575 - <_> - - <_> - - - - <_>15 4 8 20 -1. - <_>19 4 4 10 2. - <_>15 14 4 10 2. - 0 - -0.1184630021452904 - 1.3711010217666626 - 0.0689269974827766 - <_> - - <_> - - - - <_>7 2 9 6 -1. - <_>10 2 3 6 3. - 0 - 0.0378109999001026 - -9.3600002583116293e-004 - -0.8399699926376343 - <_> - - <_> - - - - <_>15 4 8 20 -1. - <_>19 4 4 10 2. - <_>15 14 4 10 2. - 0 - 0.0222020000219345 - -0.0119639998301864 - 0.3667399883270264 - <_> - - <_> - - - - <_>1 4 8 20 -1. - <_>1 4 4 10 2. - <_>5 14 4 10 2. - 0 - -0.0363660007715225 - 0.3786650002002716 - -0.2771480083465576 - <_> - - <_> - - - - <_>11 8 8 14 -1. - <_>15 8 4 7 2. - <_>11 15 4 7 2. - 0 - -0.1318469941616058 - -2.7481179237365723 - 0.1066690012812614 - <_> - - <_> - - - - <_>5 8 8 14 -1. - <_>5 8 4 7 2. - <_>9 15 4 7 2. - 0 - -0.0416559986770153 - 0.4752430021762848 - -0.2324980050325394 - <_> - - <_> - - - - <_>10 13 5 8 -1. - <_>10 17 5 4 2. - 0 - -0.0331519991159439 - -0.5792940258979797 - 0.1743440032005310 - <_> - - <_> - - - - <_>4 13 7 9 -1. - <_>4 16 7 3 3. - 0 - 0.0157699994742870 - -0.0112840002402663 - -0.8370140194892883 - <_> - - <_> - - - - <_>0 13 24 10 -1. - <_>0 18 24 5 2. - 0 - -0.0393630005419254 - 0.3482159972190857 - -0.1745540052652359 - <_> - - <_> - - - - <_>4 2 8 11 -1. - <_>8 2 4 11 2. - 0 - -0.0678490027785301 - 1.4225699901580811 - -0.1476559937000275 - <_> - - <_> - - - - <_>10 2 8 16 -1. - <_>14 2 4 8 2. - <_>10 10 4 8 2. - 0 - -0.0267750006169081 - 0.2394700050354004 - 0.0132719995453954 - <_> - - <_> - - - - <_>0 2 24 6 -1. - <_>0 2 12 3 2. - <_>12 5 12 3 2. - 0 - 0.0399190001189709 - -8.9999996125698090e-003 - -0.7593889832496643 - <_> - - <_> - - - - <_>6 0 12 9 -1. - <_>6 3 12 3 3. - 0 - 0.1006560027599335 - -0.0186850000172853 - 0.7624530196189880 - <_> - - <_> - - - - <_>1 2 12 12 -1. - <_>1 2 6 6 2. - <_>7 8 6 6 2. - 0 - -0.0810220018029213 - -0.9043909907341003 - -8.5880002006888390e-003 - <_> - - <_> - - - - <_>18 5 6 9 -1. - <_>18 8 6 3 3. - 0 - -0.0212580002844334 - -0.2131959944963455 - 0.2191970050334930 - <_> - - <_> - - - - <_>4 3 8 10 -1. - <_>4 3 4 5 2. - <_>8 8 4 5 2. - 0 - -0.0106309996917844 - 0.1959809958934784 - -0.3576810061931610 - <_> - - <_> - - - - <_>6 21 18 3 -1. - <_>6 22 18 1 3. - 0 - 8.1300002057105303e-004 - -0.0927949994802475 - 0.2614589929580689 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 11 18 1 2. - 0 - 3.4650000743567944e-003 - -0.5533609986305237 - 0.0273860003799200 - <_> - - <_> - - - - <_>1 10 22 3 -1. - <_>1 11 22 1 3. - 0 - 0.0188359990715981 - 0.1844609975814819 - -0.6693429946899414 - <_> - - <_> - - - - <_>2 8 12 9 -1. - <_>2 11 12 3 3. - 0 - -0.0256319995969534 - 1.9382879734039307 - -0.1470890045166016 - <_> - - <_> - - - - <_>12 8 12 6 -1. - <_>18 8 6 3 2. - <_>12 11 6 3 2. - 0 - -4.0939999744296074e-003 - -0.2645159959793091 - 0.2073320001363754 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>0 8 6 3 2. - <_>6 11 6 3 2. - 0 - -8.9199998183175921e-004 - -0.5503159761428833 - 0.0503749996423721 - <_> - - <_> - - - - <_>10 15 6 9 -1. - <_>12 15 2 9 3. - 0 - -0.0495180003345013 - -2.5615389347076416 - 0.1314170062541962 - <_> - - <_> - - - - <_>7 13 9 6 -1. - <_>7 15 9 2 3. - 0 - 0.0116809997707605 - -0.2481980025768280 - 0.3998270034790039 - <_> - - <_> - - - - <_>9 8 7 12 -1. - <_>9 14 7 6 2. - 0 - 0.0345639996230602 - 0.1617880016565323 - -0.7141889929771423 - <_> - - <_> - - - - <_>4 13 9 6 -1. - <_>7 13 3 6 3. - 0 - -8.2909995689988136e-003 - 0.2218009978532791 - -0.2918170094490051 - <_> - - <_> - - - - <_>6 15 18 4 -1. - <_>12 15 6 4 3. - 0 - -0.0223580002784729 - 0.3104409873485565 - -2.7280000504106283e-003 - <_> - - <_> - - - - <_>5 4 4 16 -1. - <_>7 4 2 16 2. - 0 - -0.0308010000735521 - -0.9567270278930664 - -8.3400001749396324e-003 - <_> - - <_> - - - - <_>10 15 6 9 -1. - <_>12 15 2 9 3. - 0 - 0.0437790006399155 - 0.1255690008401871 - -1.1759619712829590 - <_> - - <_> - - - - <_>8 15 6 9 -1. - <_>10 15 2 9 3. - 0 - 0.0430460013449192 - -0.0588769987225533 - -1.8568470478057861 - <_> - - <_> - - - - <_>9 11 12 10 -1. - <_>15 11 6 5 2. - <_>9 16 6 5 2. - 0 - 0.0271889995783567 - 0.0428580008447170 - 0.3903670012950897 - <_> - - <_> - - - - <_>3 6 14 6 -1. - <_>3 8 14 2 3. - 0 - 9.4149997457861900e-003 - -0.0435670018196106 - -1.1094470024108887 - <_> - - <_> - - - - <_>4 2 17 8 -1. - <_>4 6 17 4 2. - 0 - 0.0943119972944260 - 0.0402569994330406 - 0.9844229817390442 - <_> - - <_> - - - - <_>6 2 12 21 -1. - <_>6 9 12 7 3. - 0 - 0.1702509969472885 - 0.0295100007206202 - -0.6950929760932922 - <_> - - <_> - - - - <_>8 1 9 9 -1. - <_>8 4 9 3 3. - 0 - -0.0471480004489422 - 1.0338569879531860 - 0.0676020011305809 - <_> - - <_> - - - - <_>0 7 24 3 -1. - <_>12 7 12 3 2. - 0 - 0.1118630021810532 - -0.0686829984188080 - -2.4985830783843994 - <_> - - <_> - - - - <_>11 6 9 10 -1. - <_>11 11 9 5 2. - 0 - -0.0143539998680353 - -0.5948190093040466 - 0.1500169932842255 - <_> - - <_> - - - - <_>2 11 18 3 -1. - <_>2 12 18 1 3. - 0 - 0.0340240001678467 - -0.0648230016231537 - -2.1382639408111572 - <_> - - <_> - - - - <_>8 16 9 4 -1. - <_>8 18 9 2 2. - 0 - 0.0216019991785288 - 0.0553099997341633 - 0.7829290032386780 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>0 2 9 2 3. - 0 - 0.0217719990760088 - -7.1279997937381268e-003 - -0.7214810252189636 - <_> - - <_> - - - - <_>0 11 24 6 -1. - <_>0 13 24 2 3. - 0 - 0.0824169963598251 - 0.1460949927568436 - -1.3636670112609863 - <_> - - <_> - - - - <_>2 9 20 6 -1. - <_>2 12 20 3 2. - 0 - 0.0846719965338707 - -0.1778469979763031 - 0.7285770177841187 - <_> - - <_> - - - - <_>4 5 16 12 -1. - <_>12 5 8 6 2. - <_>4 11 8 6 2. - 0 - -0.0551280006766319 - -0.5940240025520325 - 0.1935780048370361 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0648230016231537 - -1.0783840417861938 - -0.0407340005040169 - <_> - - <_> - - - - <_>7 3 10 4 -1. - <_>7 5 10 2 2. - 0 - -0.0227690003812313 - 0.7790020108222961 - 3.4960000775754452e-003 - <_> - - <_> - - - - <_>9 15 6 8 -1. - <_>9 19 6 4 2. - 0 - 0.0547560006380081 - -0.0656839981675148 - -1.8188409805297852 - <_> - - <_> - - - - <_>17 0 7 10 -1. - <_>17 5 7 5 2. - 0 - -8.9000001025851816e-005 - -0.0178919993340969 - 0.2076829969882965 - <_> - - <_> - - - - <_>0 0 7 10 -1. - <_>0 5 7 5 2. - 0 - 0.0983619987964630 - -0.0559469982981682 - -1.4153920412063599 - <_> - - <_> - - - - <_>16 1 6 12 -1. - <_>19 1 3 6 2. - <_>16 7 3 6 2. - 0 - -7.0930002257227898e-003 - 0.3413529992103577 - -0.1208989992737770 - <_> - - <_> - - - - <_>1 0 19 8 -1. - <_>1 4 19 4 2. - 0 - 0.0502780005335808 - -0.2628670036792755 - 0.2579729855060577 - <_> - - <_> - - - - <_>12 2 9 4 -1. - <_>12 4 9 2 2. - 0 - -5.7870000600814819e-003 - -0.1317860037088394 - 0.1735019981861115 - <_> - - <_> - - - - <_>3 2 9 4 -1. - <_>3 4 9 2 2. - 0 - 0.0139739997684956 - 0.0285180006176233 - -0.6115220189094544 - <_> - - <_> - - - - <_>12 2 10 6 -1. - <_>12 4 10 2 3. - 0 - 0.0214499998837709 - 0.0261819995939732 - 0.3030659854412079 - <_> - - <_> - - - - <_>3 4 18 2 -1. - <_>12 4 9 2 2. - 0 - -0.0292140003293753 - 0.4494059979915619 - -0.2280309945344925 - <_> - - <_> - - - - <_>12 1 4 9 -1. - <_>12 1 2 9 2. - 0 - 4.8099999548867345e-004 - -0.1987999975681305 - 0.2074449956417084 - <_> - - <_> - - - - <_>8 1 4 9 -1. - <_>10 1 2 9 2. - 0 - 1.7109999898821115e-003 - -0.5403720140457153 - 0.0678659975528717 - <_> - - <_> - - - - <_>10 5 8 10 -1. - <_>14 5 4 5 2. - <_>10 10 4 5 2. - 0 - 8.6660003289580345e-003 - -0.0131280003115535 - 0.5229790210723877 - <_> - - <_> - - - - <_>6 4 12 13 -1. - <_>10 4 4 13 3. - 0 - 0.0636579990386963 - 0.0682990029454231 - -0.4923509955406189 - <_> - - <_> - - - - <_>13 5 6 6 -1. - <_>13 5 3 6 2. - 0 - -0.0279680006206036 - 0.6818389892578125 - 0.0787810012698174 - <_> - - <_> - - - - <_>1 5 12 3 -1. - <_>7 5 6 3 2. - 0 - 0.0489539988338947 - -0.2062239944934845 - 0.5038809776306152 - -3.3933560848236084 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>7 5 10 6 -1. - <_>7 7 10 2 3. - 0 - -0.0293129999190569 - 0.7128469944000244 - -0.5823069810867310 - <_> - - <_> - - - - <_>2 0 21 5 -1. - <_>9 0 7 5 3. - 0 - 0.1241509988903999 - -0.3686349987983704 - 0.6006720066070557 - <_> - - <_> - - - - <_>0 8 9 9 -1. - <_>0 11 9 3 3. - 0 - 7.9349996522068977e-003 - -0.8600829839706421 - 0.2172469943761826 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0303659997880459 - -0.2718699872493744 - 0.6124789714813232 - <_> - - <_> - - - - <_>0 3 6 7 -1. - <_>3 3 3 7 2. - 0 - 0.0252180006355047 - -0.3474830090999603 - 0.5042769908905029 - <_> - - <_> - - - - <_>9 18 12 6 -1. - <_>15 18 6 3 2. - <_>9 21 6 3 2. - 0 - 0.0100140003487468 - -0.3189899921417236 - 0.4137679934501648 - <_> - - <_> - - - - <_>2 8 20 6 -1. - <_>2 8 10 3 2. - <_>12 11 10 3 2. - 0 - -0.0167750008404255 - -0.6904810070991516 - 0.0948309972882271 - <_> - - <_> - - - - <_>13 2 10 4 -1. - <_>13 4 10 2 2. - 0 - -2.6950000319629908e-003 - -0.2082979977130890 - 0.2373719960451126 - <_> - - <_> - - - - <_>4 5 5 18 -1. - <_>4 11 5 6 3. - 0 - 0.0422579981386662 - -0.4936670064926148 - 0.1817059963941574 - <_> - - <_> - - - - <_>20 4 4 9 -1. - <_>20 4 2 9 2. - 0 - -0.0485050007700920 - 1.3429640531539917 - 0.0397690013051033 - <_> - - <_> - - - - <_>8 6 8 14 -1. - <_>8 13 8 7 2. - 0 - 0.0289929993450642 - 0.0464960001409054 - -0.8164349794387817 - <_> - - <_> - - - - <_>0 1 24 6 -1. - <_>12 1 12 3 2. - <_>0 4 12 3 2. - 0 - -0.0400890000164509 - -0.7119780182838440 - 0.2255389988422394 - <_> - - <_> - - - - <_>0 4 4 9 -1. - <_>2 4 2 9 2. - 0 - -0.0410219989717007 - 1.0057929754257202 - -0.1969020068645477 - <_> - - <_> - - - - <_>3 6 18 3 -1. - <_>3 7 18 1 3. - 0 - 0.0118380002677441 - -0.0126000000163913 - 0.8076710104942322 - <_> - - <_> - - - - <_>3 17 16 6 -1. - <_>3 19 16 2 3. - 0 - -0.0213280003517866 - -0.8202390074729919 - 0.0205249991267920 - <_> - - <_> - - - - <_>13 6 6 9 -1. - <_>13 9 6 3 3. - 0 - -0.0239049997180700 - 0.5421050190925598 - -0.0747670009732246 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>5 6 7 3 2. - <_>12 9 7 3 2. - 0 - 0.0180089995265007 - -0.3382770121097565 - 0.4235860109329224 - <_> - - <_> - - - - <_>13 5 8 10 -1. - <_>17 5 4 5 2. - <_>13 10 4 5 2. - 0 - -0.0436140000820160 - -1.1983489990234375 - 0.1556620001792908 - <_> - - <_> - - - - <_>2 2 20 3 -1. - <_>2 3 20 1 3. - 0 - -9.2449998483061790e-003 - -0.8902999758720398 - 0.0110039999708533 - <_> - - <_> - - - - <_>9 2 9 6 -1. - <_>12 2 3 6 3. - 0 - 0.0474850013852119 - 0.1666409969329834 - -0.9076449871063232 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - -0.0142339998856187 - 0.6269519925117493 - -0.2579120099544525 - <_> - - <_> - - - - <_>12 3 4 11 -1. - <_>12 3 2 11 2. - 0 - 3.8010000716894865e-003 - -0.2822999954223633 - 0.2662459909915924 - <_> - - <_> - - - - <_>8 3 4 11 -1. - <_>10 3 2 11 2. - 0 - 3.4330000635236502e-003 - -0.6377199888229370 - 0.0984229966998100 - <_> - - <_> - - - - <_>8 3 8 10 -1. - <_>12 3 4 5 2. - <_>8 8 4 5 2. - 0 - -0.0292210001498461 - -0.7676990032196045 - 0.2263450026512146 - <_> - - <_> - - - - <_>11 1 2 18 -1. - <_>12 1 1 18 2. - 0 - -6.4949998632073402e-003 - 0.4560010135173798 - -0.2652890086174011 - <_> - - <_> - - - - <_>9 2 9 6 -1. - <_>12 2 3 6 3. - 0 - -0.0300340000540018 - -0.7655109763145447 - 0.1400929987430573 - <_> - - <_> - - - - <_>0 2 19 3 -1. - <_>0 3 19 1 3. - 0 - 7.8360000625252724e-003 - 0.0467559993267059 - -0.7235620021820068 - <_> - - <_> - - - - <_>9 14 9 6 -1. - <_>9 16 9 2 3. - 0 - 8.8550001382827759e-003 - -0.0491419993340969 - 0.5147269964218140 - <_> - - <_> - - - - <_>1 8 18 5 -1. - <_>7 8 6 5 3. - 0 - 0.0959739983081818 - -0.0200689993798733 - -1.0850950479507446 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0328769981861115 - -0.9587529897689819 - 0.1454360038042069 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - -0.0133840003982186 - -0.7001360058784485 - 0.0291579999029636 - <_> - - <_> - - - - <_>13 6 4 15 -1. - <_>13 11 4 5 3. - 0 - 0.0152359995990992 - -0.2823570072650909 - 0.2536799907684326 - <_> - - <_> - - - - <_>1 5 18 3 -1. - <_>1 6 18 1 3. - 0 - 0.0120540000498295 - -0.2530339956283569 - 0.4652670025825501 - <_> - - <_> - - - - <_>9 7 14 6 -1. - <_>9 9 14 2 3. - 0 - -0.0762950032949448 - -0.6991580128669739 - 0.1321720033884049 - <_> - - <_> - - - - <_>2 16 18 3 -1. - <_>2 17 18 1 3. - 0 - -0.0120400004088879 - 0.4589459896087647 - -0.2385649979114533 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - 0.0219160001724958 - 0.1826860010623932 - -0.6162970066070557 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>0 8 6 3 2. - <_>6 11 6 3 2. - 0 - -2.7330000884830952e-003 - -0.6325790286064148 - 0.0342190004885197 - <_> - - <_> - - - - <_>9 13 7 8 -1. - <_>9 17 7 4 2. - 0 - -0.0486520007252693 - -1.0297729969024658 - 0.1738650053739548 - <_> - - <_> - - - - <_>2 17 20 3 -1. - <_>2 18 20 1 3. - 0 - -0.0104639995843172 - 0.3475730121135712 - -0.2746410071849823 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - -6.6550001502037048e-003 - -0.2898029983043671 - 0.2403790056705475 - <_> - - <_> - - - - <_>4 0 15 4 -1. - <_>4 2 15 2 2. - 0 - 8.5469996556639671e-003 - -0.4434050023555756 - 0.1426739990711212 - <_> - - <_> - - - - <_>17 2 6 6 -1. - <_>17 5 6 3 2. - 0 - 0.0199139993637800 - 0.1774040013551712 - -0.2409629970788956 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>0 6 6 3 3. - 0 - 0.0220129992812872 - -0.0108120003715158 - -0.9469079971313477 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - -0.0521790012717247 - 1.6547499895095825 - 0.0964870005846024 - <_> - - <_> - - - - <_>0 17 9 6 -1. - <_>0 19 9 2 3. - 0 - 0.0196989998221397 - -6.7560002207756042e-003 - -0.8631150126457214 - <_> - - <_> - - - - <_>9 18 12 6 -1. - <_>15 18 6 3 2. - <_>9 21 6 3 2. - 0 - 0.0230400003492832 - -2.3519999813288450e-003 - 0.3853130042552948 - <_> - - <_> - - - - <_>3 15 6 9 -1. - <_>3 18 6 3 3. - 0 - -0.0150380004197359 - -0.6190569996833801 - 0.0310779996216297 - <_> - - <_> - - - - <_>16 13 8 10 -1. - <_>20 13 4 5 2. - <_>16 18 4 5 2. - 0 - -0.0499560013413429 - 0.7065749764442444 - 0.0478809997439384 - <_> - - <_> - - - - <_>0 14 24 4 -1. - <_>8 14 8 4 3. - 0 - -0.0692699998617172 - 0.3921290040016174 - -0.2384800016880035 - <_> - - <_> - - - - <_>13 18 6 6 -1. - <_>13 18 3 6 2. - 0 - 4.7399997711181641e-003 - -0.0243090000003576 - 0.2538630068302155 - <_> - - <_> - - - - <_>0 13 8 10 -1. - <_>0 13 4 5 2. - <_>4 18 4 5 2. - 0 - -0.0339239984750748 - 0.4693039953708649 - -0.2332189977169037 - <_> - - <_> - - - - <_>0 14 24 6 -1. - <_>0 17 24 3 2. - 0 - -0.0162310004234314 - 0.3231920003890991 - -0.2054560035467148 - <_> - - <_> - - - - <_>5 2 12 8 -1. - <_>5 2 6 4 2. - <_>11 6 6 4 2. - 0 - -0.0501930005848408 - -1.2277870178222656 - -0.0407980009913445 - <_> - - <_> - - - - <_>8 9 9 6 -1. - <_>11 9 3 6 3. - 0 - 0.0569440014660358 - 0.0451840013265610 - 0.6019750237464905 - <_> - - <_> - - - - <_>4 3 16 4 -1. - <_>4 5 16 2 2. - 0 - 0.0409369990229607 - -0.1677280068397522 - 0.8981930017471314 - <_> - - <_> - - - - <_>10 2 4 10 -1. - <_>10 7 4 5 2. - 0 - -3.0839999672025442e-003 - 0.3371619880199432 - -0.2724080085754395 - <_> - - <_> - - - - <_>8 4 5 8 -1. - <_>8 8 5 4 2. - 0 - -0.0326000005006790 - -0.8544650077819824 - 0.0196649990975857 - <_> - - <_> - - - - <_>11 5 9 12 -1. - <_>11 9 9 4 3. - 0 - 0.0984809994697571 - 0.0547420009970665 - 0.6382730007171631 - <_> - - <_> - - - - <_>4 5 9 12 -1. - <_>4 9 9 4 3. - 0 - -0.0381850004196167 - 0.5227469801902771 - -0.2338480055332184 - <_> - - <_> - - - - <_>14 6 6 9 -1. - <_>14 9 6 3 3. - 0 - -0.0459170006215572 - 0.6282920241355896 - 0.0328590013086796 - <_> - - <_> - - - - <_>2 4 20 12 -1. - <_>2 8 20 4 3. - 0 - -0.1195549964904785 - -0.6157270073890686 - 0.0346800014376640 - <_> - - <_> - - - - <_>4 4 17 16 -1. - <_>4 12 17 8 2. - 0 - -0.1204439997673035 - -0.8438000082969666 - 0.1653070002794266 - <_> - - <_> - - - - <_>8 7 7 6 -1. - <_>8 10 7 3 2. - 0 - 0.0706190019845963 - -0.0632610023021698 - -1.9863929748535156 - <_> - - <_> - - - - <_>1 9 23 2 -1. - <_>1 10 23 1 2. - 0 - 8.4889996796846390e-003 - -0.1766339987516403 - 0.3801119923591614 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 0.0227109994739294 - -0.0276059992611408 - -0.9192140102386475 - <_> - - <_> - - - - <_>13 3 4 9 -1. - <_>13 3 2 9 2. - 0 - 4.9700000090524554e-004 - -0.2429320067167282 - 0.2287890017032623 - <_> - - <_> - - - - <_>8 1 6 13 -1. - <_>10 1 2 13 3. - 0 - 0.0346519984304905 - -0.2370599955320358 - 0.5401099920272827 - <_> - - <_> - - - - <_>4 22 18 2 -1. - <_>4 23 18 1 2. - 0 - -4.4700000435113907e-003 - 0.3907899856567383 - -0.1269380003213882 - <_> - - <_> - - - - <_>3 10 9 6 -1. - <_>6 10 3 6 3. - 0 - 0.0236430000513792 - -0.2666369974613190 - 0.3231259882450104 - <_> - - <_> - - - - <_>14 0 2 24 -1. - <_>14 0 1 24 2. - 0 - 0.0128130000084639 - 0.1754080057144165 - -0.6078799962997437 - <_> - - <_> - - - - <_>8 0 2 24 -1. - <_>9 0 1 24 2. - 0 - -0.0112509997561574 - -1.0852589607238770 - -0.0280460007488728 - <_> - - <_> - - - - <_>3 2 18 10 -1. - <_>9 2 6 10 3. - 0 - -0.0415350012481213 - 0.7188739776611328 - 0.0279820002615452 - <_> - - <_> - - - - <_>4 13 15 6 -1. - <_>9 13 5 6 3. - 0 - -0.0934709981083870 - -1.1906319856643677 - -0.0448109991848469 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>9 21 6 3 3. - 0 - -0.0272499993443489 - 0.6294249892234802 - 9.5039997249841690e-003 - <_> - - <_> - - - - <_>9 1 4 11 -1. - <_>11 1 2 11 2. - 0 - -0.0217599999159575 - 1.3233649730682373 - -0.1502700001001358 - <_> - - <_> - - - - <_>9 7 10 4 -1. - <_>9 7 5 4 2. - 0 - -9.6890004351735115e-003 - -0.3394710123538971 - 0.1708579957485199 - <_> - - <_> - - - - <_>7 0 10 18 -1. - <_>12 0 5 18 2. - 0 - 0.0693959966301918 - -0.2565779983997345 - 0.4765209853649139 - <_> - - <_> - - - - <_>12 1 6 16 -1. - <_>14 1 2 16 3. - 0 - 0.0312089994549751 - 0.1415400058031082 - -0.3494200110435486 - <_> - - <_> - - - - <_>6 1 6 16 -1. - <_>8 1 2 16 3. - 0 - -0.0497270002961159 - -1.1675560474395752 - -0.0407579988241196 - <_> - - <_> - - - - <_>18 2 6 6 -1. - <_>18 5 6 3 2. - 0 - -0.0203019995242357 - -0.3948639929294586 - 0.1581490039825440 - <_> - - <_> - - - - <_>3 5 18 2 -1. - <_>3 6 18 1 2. - 0 - -0.0153670003637671 - 0.4930000007152557 - -0.2009209990501404 - <_> - - <_> - - - - <_>18 2 6 6 -1. - <_>18 5 6 3 2. - 0 - -0.0507350005209446 - 1.8736059665679932 - 0.0867300033569336 - <_> - - <_> - - - - <_>0 2 6 6 -1. - <_>0 5 6 3 2. - 0 - -0.0207260008901358 - -0.8893839716911316 - -7.3199998587369919e-003 - <_> - - <_> - - - - <_>13 11 11 6 -1. - <_>13 13 11 2 3. - 0 - -0.0309939999133348 - -1.1664899587631226 - 0.1427460014820099 - <_> - - <_> - - - - <_>5 7 10 4 -1. - <_>10 7 5 4 2. - 0 - -4.4269999489188194e-003 - -0.6681510210037231 - 4.4120000675320625e-003 - <_> - - <_> - - - - <_>11 9 10 7 -1. - <_>11 9 5 7 2. - 0 - -0.0457439981400967 - -0.4795520007610321 - 0.1512199938297272 - <_> - - <_> - - - - <_>3 9 10 7 -1. - <_>8 9 5 7 2. - 0 - 0.0166989993304014 - 0.1204859986901283 - -0.4523589909076691 - <_> - - <_> - - - - <_>16 4 6 6 -1. - <_>16 4 3 6 2. - 0 - 3.2210000790655613e-003 - -0.0776150003075600 - 0.2784659862518311 - <_> - - <_> - - - - <_>5 6 10 8 -1. - <_>5 6 5 4 2. - <_>10 10 5 4 2. - 0 - 0.0244340002536774 - -0.1998710036277771 - 0.6725370287895203 - <_> - - <_> - - - - <_>7 21 16 3 -1. - <_>7 21 8 3 2. - 0 - -0.0796779990196228 - 0.9222239851951599 - 0.0925579965114594 - <_> - - <_> - - - - <_>1 21 16 3 -1. - <_>9 21 8 3 2. - 0 - 0.0445300005376339 - -0.2669050097465515 - 0.3332050144672394 - <_> - - <_> - - - - <_>2 5 22 14 -1. - <_>13 5 11 7 2. - <_>2 12 11 7 2. - 0 - -0.1252830028533936 - -0.5425310134887695 - 0.1397629976272583 - <_> - - <_> - - - - <_>3 10 8 10 -1. - <_>3 10 4 5 2. - <_>7 15 4 5 2. - 0 - 0.0179719999432564 - 0.0182199999690056 - -0.6804850101470947 - <_> - - <_> - - - - <_>17 0 6 12 -1. - <_>20 0 3 6 2. - <_>17 6 3 6 2. - 0 - 0.0191840007901192 - -0.0125839998945594 - 0.5412669777870178 - <_> - - <_> - - - - <_>5 2 6 18 -1. - <_>7 2 2 18 3. - 0 - 0.0400240011513233 - -0.1763879954814911 - 0.7881039977073669 - <_> - - <_> - - - - <_>13 0 6 9 -1. - <_>15 0 2 9 3. - 0 - 0.0135589996352792 - 0.2073760032653809 - -0.4774430096149445 - <_> - - <_> - - - - <_>0 12 7 9 -1. - <_>0 15 7 3 3. - 0 - 0.0162209998816252 - 0.0230769999325275 - -0.6118209958076477 - <_> - - <_> - - - - <_>15 13 8 10 -1. - <_>19 13 4 5 2. - <_>15 18 4 5 2. - 0 - 0.0112290000542998 - -0.0177280008792877 - 0.4176419973373413 - <_> - - <_> - - - - <_>1 0 6 12 -1. - <_>1 0 3 6 2. - <_>4 6 3 6 2. - 0 - 0.0391930006444454 - -0.1894849985837936 - 0.7401930093765259 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - -9.5539996400475502e-003 - 0.4094710052013397 - -0.1350889950990677 - <_> - - <_> - - - - <_>1 13 8 10 -1. - <_>1 13 4 5 2. - <_>5 18 4 5 2. - 0 - 0.0278789997100830 - -0.2035070061683655 - 0.6162539720535278 - <_> - - <_> - - - - <_>3 21 19 2 -1. - <_>3 22 19 1 2. - 0 - -0.0236009992659092 - -1.6967060565948486 - 0.1463319957256317 - <_> - - <_> - - - - <_>6 3 4 13 -1. - <_>8 3 2 13 2. - 0 - 0.0269300006330013 - -0.0304019991308451 - -1.0909470319747925 - <_> - - <_> - - - - <_>5 10 18 3 -1. - <_>5 11 18 1 3. - 0 - 2.8999999631196260e-004 - -0.2007600069046021 - 0.2231409996747971 - <_> - - <_> - - - - <_>9 3 5 12 -1. - <_>9 7 5 4 3. - 0 - -0.0411249995231628 - -0.4524219930171967 - 0.0573920011520386 - <_> - - <_> - - - - <_>11 2 4 15 -1. - <_>11 7 4 5 3. - 0 - 6.6789998672902584e-003 - 0.2382490038871765 - -0.2126210033893585 - <_> - - <_> - - - - <_>4 1 16 4 -1. - <_>4 3 16 2 2. - 0 - 0.0478649996221066 - -0.1819480061531067 - 0.6191840171813965 - <_> - - <_> - - - - <_>6 0 18 3 -1. - <_>6 1 18 1 3. - 0 - -3.1679999083280563e-003 - -0.2739320099353790 - 0.2501730024814606 - <_> - - <_> - - - - <_>5 1 10 8 -1. - <_>5 1 5 4 2. - <_>10 5 5 4 2. - 0 - -8.6230002343654633e-003 - -0.4628030061721802 - 0.0423979982733727 - <_> - - <_> - - - - <_>11 18 12 6 -1. - <_>17 18 6 3 2. - <_>11 21 6 3 2. - 0 - -7.4350000359117985e-003 - 0.4179680049419403 - -1.7079999670386314e-003 - <_> - - <_> - - - - <_>5 15 12 3 -1. - <_>11 15 6 3 2. - 0 - -1.8769999733194709e-003 - 0.1460230052471161 - -0.3372110128402710 - <_> - - <_> - - - - <_>1 10 22 4 -1. - <_>1 10 11 4 2. - 0 - -0.0862260013818741 - 0.7514340281486511 - 0.0107119996100664 - <_> - - <_> - - - - <_>7 9 9 6 -1. - <_>10 9 3 6 3. - 0 - 0.0468339994549751 - -0.1911959946155548 - 0.4841490089893341 - <_> - - <_> - - - - <_>6 11 12 5 -1. - <_>10 11 4 5 3. - 0 - -9.2000002041459084e-005 - 0.3522039949893951 - -0.1733330041170120 - <_> - - <_> - - - - <_>6 7 10 7 -1. - <_>11 7 5 7 2. - 0 - -0.0163439996540546 - -0.6439769864082336 - 9.0680001303553581e-003 - <_> - - <_> - - - - <_>11 2 8 10 -1. - <_>11 2 4 10 2. - 0 - 0.0457039996981621 - 0.0182160008698702 - 0.3197079896926880 - <_> - - <_> - - - - <_>5 2 8 10 -1. - <_>9 2 4 10 2. - 0 - -0.0273829996585846 - 1.0564049482345581 - -0.1727640032768250 - <_> - - <_> - - - - <_>6 4 18 6 -1. - <_>15 4 9 3 2. - <_>6 7 9 3 2. - 0 - -0.0276020001620054 - 0.2971549928188324 - -9.4600003212690353e-003 - <_> - - <_> - - - - <_>0 5 10 9 -1. - <_>0 8 10 3 3. - 0 - 7.6939999125897884e-003 - -0.2166029959917069 - 0.4738520085811615 - <_> - - <_> - - - - <_>2 7 21 6 -1. - <_>2 9 21 2 3. - 0 - -7.0500001311302185e-004 - 0.2404879927635193 - -0.2677600085735321 - <_> - - <_> - - - - <_>0 4 22 16 -1. - <_>0 4 11 8 2. - <_>11 12 11 8 2. - 0 - 0.1105419993400574 - -0.0335390008985996 - -1.0233880281448364 - <_> - - <_> - - - - <_>9 0 6 22 -1. - <_>9 11 6 11 2. - 0 - 0.0687659978866577 - -4.3239998631179333e-003 - 0.5715339779853821 - <_> - - <_> - - - - <_>9 1 3 12 -1. - <_>9 7 3 6 2. - 0 - 1.7999999690800905e-003 - 0.0775749981403351 - -0.4209269881248474 - <_> - - <_> - - - - <_>12 0 12 18 -1. - <_>18 0 6 9 2. - <_>12 9 6 9 2. - 0 - 0.1923200041055679 - 0.0820219963788986 - 2.8810169696807861 - <_> - - <_> - - - - <_>0 0 12 18 -1. - <_>0 0 6 9 2. - <_>6 9 6 9 2. - 0 - 0.1574209928512573 - -0.1370819956064224 - 2.0890059471130371 - <_> - - <_> - - - - <_>1 1 22 4 -1. - <_>12 1 11 2 2. - <_>1 3 11 2 2. - 0 - -0.0493870005011559 - -1.8610910177230835 - 0.1433209925889969 - <_> - - <_> - - - - <_>3 0 18 4 -1. - <_>3 2 18 2 2. - 0 - 0.0519290007650852 - -0.1873700022697449 - 0.5423160195350647 - <_> - - <_> - - - - <_>2 5 22 6 -1. - <_>2 7 22 2 3. - 0 - 0.0499650016427040 - 0.1417530030012131 - -1.5625779628753662 - <_> - - <_> - - - - <_>5 0 6 9 -1. - <_>5 3 6 3 3. - 0 - -0.0426330007612705 - 1.6059479713439941 - -0.1471289992332459 - <_> - - <_> - - - - <_>10 14 6 9 -1. - <_>12 14 2 9 3. - 0 - -0.0375539995729923 - -0.8097490072250366 - 0.1325699985027313 - <_> - - <_> - - - - <_>8 14 6 9 -1. - <_>10 14 2 9 3. - 0 - -0.0371749997138977 - -1.3945020437240601 - -0.0570550002157688 - <_> - - <_> - - - - <_>5 18 18 3 -1. - <_>5 19 18 1 3. - 0 - 0.0139459995552897 - 0.0334270000457764 - 0.5747479796409607 - <_> - - <_> - - - - <_>6 0 6 13 -1. - <_>9 0 3 13 2. - 0 - -4.4800000614486635e-004 - -0.5532749891281128 - 0.0219529997557402 - <_> - - <_> - - - - <_>7 4 12 4 -1. - <_>7 4 6 4 2. - 0 - 0.0319930016994476 - 0.0203409995883703 - 0.3745920062065125 - <_> - - <_> - - - - <_>5 2 12 6 -1. - <_>9 2 4 6 3. - 0 - -4.2799999937415123e-003 - 0.4442870020866394 - -0.2299969941377640 - <_> - - <_> - - - - <_>4 1 18 3 -1. - <_>4 2 18 1 3. - 0 - 9.8550003021955490e-003 - 0.1831579953432083 - -0.4096499979496002 - <_> - - <_> - - - - <_>0 8 6 12 -1. - <_>0 12 6 4 3. - 0 - 0.0933569967746735 - -0.0636610016226768 - -1.6929290294647217 - <_> - - <_> - - - - <_>9 15 6 9 -1. - <_>11 15 2 9 3. - 0 - 0.0172099992632866 - 0.2015389949083328 - -0.4606109857559204 - <_> - - <_> - - - - <_>9 10 6 13 -1. - <_>11 10 2 13 3. - 0 - 8.4319999441504478e-003 - -0.3200399875640869 - 0.1531219929456711 - <_> - - <_> - - - - <_>6 17 18 2 -1. - <_>6 18 18 1 2. - 0 - -0.0140549996867776 - 0.8688240051269531 - 0.0325750000774860 - <_> - - <_> - - - - <_>9 4 6 9 -1. - <_>11 4 2 9 3. - 0 - -7.7180000953376293e-003 - 0.6368669867515564 - -0.1842550039291382 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - 0.0280050002038479 - 0.1735749989748001 - -0.4788359999656677 - <_> - - <_> - - - - <_>5 6 10 8 -1. - <_>5 6 5 4 2. - <_>10 10 5 4 2. - 0 - -0.0188849996775389 - 0.2410160005092621 - -0.2654759883880615 - <_> - - <_> - - - - <_>14 9 5 8 -1. - <_>14 13 5 4 2. - 0 - -0.0185850001871586 - 0.5423250198364258 - 0.0536330007016659 - <_> - - <_> - - - - <_>5 9 5 8 -1. - <_>5 13 5 4 2. - 0 - -0.0364370010793209 - 2.3908898830413818 - -0.1363469958305359 - <_> - - <_> - - - - <_>14 11 9 6 -1. - <_>14 13 9 2 3. - 0 - 0.0324550010263920 - 0.1591069996356964 - -0.6758149862289429 - <_> - - <_> - - - - <_>0 2 23 15 -1. - <_>0 7 23 5 3. - 0 - 0.0597819983959198 - -2.3479999508708715e-003 - -0.7305369973182678 - <_> - - <_> - - - - <_>16 0 8 12 -1. - <_>16 6 8 6 2. - 0 - 9.8209995776414871e-003 - -0.1144409999251366 - 0.3057030141353607 - <_> - - <_> - - - - <_>4 15 6 9 -1. - <_>4 18 6 3 3. - 0 - -0.0351639986038208 - -1.0511469841003418 - -0.0331030003726482 - <_> - - <_> - - - - <_>8 18 9 4 -1. - <_>8 20 9 2 2. - 0 - 2.7429999317973852e-003 - -0.2013539969921112 - 0.3275409936904907 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - 8.1059997901320457e-003 - -0.2138350009918213 - 0.4336209893226624 - <_> - - <_> - - - - <_>13 11 11 6 -1. - <_>13 13 11 2 3. - 0 - 0.0889429971575737 - 0.1094089969992638 - -4.7609338760375977 - <_> - - <_> - - - - <_>0 11 11 6 -1. - <_>0 13 11 2 3. - 0 - -0.0300549995154142 - -1.7169300317764282 - -0.0609190016984940 - <_> - - <_> - - - - <_>0 9 24 6 -1. - <_>12 9 12 3 2. - <_>0 12 12 3 2. - 0 - -0.0217349994927645 - 0.6477890014648438 - -0.0328309983015060 - <_> - - <_> - - - - <_>6 16 8 8 -1. - <_>6 20 8 4 2. - 0 - 0.0376489982008934 - -0.0100600002333522 - -0.7656909823417664 - <_> - - <_> - - - - <_>10 16 14 6 -1. - <_>10 18 14 2 3. - 0 - 2.7189999818801880e-003 - 0.1988890022039414 - -0.0824790000915527 - <_> - - <_> - - - - <_>1 1 21 3 -1. - <_>1 2 21 1 3. - 0 - -0.0105480002239347 - -0.8661360144615173 - -0.0259860008955002 - <_> - - <_> - - - - <_>0 2 24 3 -1. - <_>0 2 12 3 2. - 0 - 0.1296630054712296 - 0.1391199976205826 - -2.2271950244903564 - <_> - - <_> - - - - <_>2 15 8 5 -1. - <_>6 15 4 5 2. - 0 - -0.0176769997924566 - 0.3396770060062408 - -0.2398959994316101 - <_> - - <_> - - - - <_>2 11 21 3 -1. - <_>9 11 7 3 3. - 0 - -0.0770519971847534 - -2.5017969608306885 - 0.1284199953079224 - <_> - - <_> - - - - <_>1 18 12 6 -1. - <_>1 18 6 3 2. - <_>7 21 6 3 2. - 0 - -0.0192300006747246 - 0.5064120292663574 - -0.1975159943103790 - <_> - - <_> - - - - <_>10 14 4 10 -1. - <_>10 19 4 5 2. - 0 - -0.0512229986488819 - -2.9333369731903076 - 0.1385850012302399 - <_> - - <_> - - - - <_>7 7 4 10 -1. - <_>7 12 4 5 2. - 0 - 2.0830000285059214e-003 - -0.6004359722137451 - 0.0297180004417896 - <_> - - <_> - - - - <_>9 8 6 12 -1. - <_>9 12 6 4 3. - 0 - 0.0254180002957582 - 0.3391579985618591 - -0.1439200043678284 - <_> - - <_> - - - - <_>7 1 9 6 -1. - <_>10 1 3 6 3. - 0 - -0.0239059999585152 - -1.1082680225372314 - -0.0473770014941692 - <_> - - <_> - - - - <_>3 14 19 2 -1. - <_>3 15 19 1 2. - 0 - -6.3740001060068607e-003 - 0.4453369975090027 - -0.0670529976487160 - <_> - - <_> - - - - <_>7 7 10 10 -1. - <_>7 7 5 5 2. - <_>12 12 5 5 2. - 0 - -0.0376989990472794 - -1.0406579971313477 - -0.0417900010943413 - <_> - - <_> - - - - <_>3 12 18 12 -1. - <_>3 12 9 12 2. - 0 - 0.2165510058403015 - 0.0338630005717278 - 0.8201730251312256 - <_> - - <_> - - - - <_>8 0 6 12 -1. - <_>10 0 2 12 3. - 0 - -0.0134009998291731 - 0.5290349721908569 - -0.1913300007581711 - -3.2396929264068604 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>3 0 17 9 -1. - <_>3 3 17 3 3. - 0 - 0.0712689980864525 - -0.5363119840621948 - 0.6071529984474182 - <_> - - <_> - - - - <_>6 0 12 11 -1. - <_>10 0 4 11 3. - 0 - 0.0561110004782677 - -0.5014160275459290 - 0.4397610127925873 - <_> - - <_> - - - - <_>1 0 6 13 -1. - <_>4 0 3 13 2. - 0 - 0.0404639989137650 - -0.3292219936847687 - 0.5483469963073731 - <_> - - <_> - - - - <_>5 8 16 6 -1. - <_>5 11 16 3 2. - 0 - 0.0631550028920174 - -0.3170169889926910 - 0.4615299999713898 - <_> - - <_> - - - - <_>8 8 5 12 -1. - <_>8 14 5 6 2. - 0 - 0.0103209996595979 - 0.1069499999284744 - -0.9824389815330505 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>9 21 6 3 3. - 0 - 0.0626069977879524 - -0.1432970017194748 - 0.7109500169754028 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0394160002470016 - 0.9438019990921021 - -0.2157209962606430 - <_> - - <_> - - - - <_>2 0 20 3 -1. - <_>2 1 20 1 3. - 0 - -5.3960001096129417e-003 - -0.5461199879646301 - 0.2530379891395569 - <_> - - <_> - - - - <_>4 6 15 10 -1. - <_>9 6 5 10 3. - 0 - 0.1077319979667664 - 0.0124960001558065 - -1.0809199810028076 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0169820003211498 - -0.3153640031814575 - 0.5123999714851379 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - 0.0312169995158911 - -4.5199999585747719e-003 - -1.2443480491638184 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>16 0 2 9 3. - 0 - -0.0231069996953011 - -0.7649289965629578 - 0.2064059972763062 - <_> - - <_> - - - - <_>7 16 9 6 -1. - <_>7 18 9 2 3. - 0 - -0.0112039996311069 - 0.2409269958734512 - -0.3514209985733032 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>16 0 2 9 3. - 0 - -4.7479998320341110e-003 - -0.0970079973340034 - 0.2063809931278229 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - -0.0173589996993542 - -0.7902029752731323 - 0.0218529999256134 - <_> - - <_> - - - - <_>17 1 6 16 -1. - <_>19 1 2 16 3. - 0 - 0.0188519991934299 - -0.1039460003376007 - 0.5484420061111450 - <_> - - <_> - - - - <_>1 1 6 16 -1. - <_>3 1 2 16 3. - 0 - 7.2249998338520527e-003 - -0.4040940105915070 - 0.2676379978656769 - <_> - - <_> - - - - <_>14 13 6 9 -1. - <_>14 16 6 3 3. - 0 - 0.0189159996807575 - 0.2050800025463104 - -1.0206340551376343 - <_> - - <_> - - - - <_>0 0 6 9 -1. - <_>0 3 6 3 3. - 0 - 0.0311569999903440 - 1.2400000123307109e-003 - -0.8729349970817566 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>9 5 3 6 2. - 0 - 0.0209519993513823 - -5.5559999309480190e-003 - 0.8035619854927063 - <_> - - <_> - - - - <_>3 10 9 6 -1. - <_>6 10 3 6 3. - 0 - 0.0112910000607371 - -0.3647840023040772 - 0.2276789993047714 - <_> - - <_> - - - - <_>14 7 3 16 -1. - <_>14 15 3 8 2. - 0 - -0.0570110008120537 - -1.4295619726181030 - 0.1432200074195862 - <_> - - <_> - - - - <_>4 10 14 12 -1. - <_>4 10 7 6 2. - <_>11 16 7 6 2. - 0 - 0.0721940025687218 - -0.0418500006198883 - -1.9111829996109009 - <_> - - <_> - - - - <_>7 6 12 6 -1. - <_>7 8 12 2 3. - 0 - -0.0198740009218454 - 0.2642549872398377 - -0.3261770009994507 - <_> - - <_> - - - - <_>7 2 4 20 -1. - <_>9 2 2 20 2. - 0 - -0.0166929997503757 - -0.8390780091285706 - 4.0799999260343611e-004 - <_> - - <_> - - - - <_>14 13 6 9 -1. - <_>14 16 6 3 3. - 0 - -0.0398349985480309 - -0.4885849952697754 - 0.1643610000610352 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>12 6 2 9 2. - 0 - 0.0270099993795156 - -0.1886249929666519 - 0.8341940045356751 - <_> - - <_> - - - - <_>14 13 6 9 -1. - <_>14 16 6 3 3. - 0 - -3.9420002140104771e-003 - 0.2323150038719177 - -0.0723600015044212 - <_> - - <_> - - - - <_>5 20 14 4 -1. - <_>5 22 14 2 2. - 0 - 0.0228330008685589 - -0.0358840003609657 - -1.1549400091171265 - <_> - - <_> - - - - <_>4 4 16 12 -1. - <_>4 10 16 6 2. - 0 - -0.0688880011439323 - -1.7837309837341309 - 0.1515900045633316 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0430970005691051 - -0.2160809934139252 - 0.5062410235404968 - <_> - - <_> - - - - <_>3 0 21 4 -1. - <_>3 2 21 2 2. - 0 - 8.6239995434880257e-003 - -0.1779559999704361 - 0.2895790040493012 - <_> - - <_> - - - - <_>4 13 6 9 -1. - <_>4 16 6 3 3. - 0 - 0.0145610002800822 - -0.0114080002531409 - -0.8940200209617615 - <_> - - <_> - - - - <_>16 16 5 8 -1. - <_>16 20 5 4 2. - 0 - -0.0115010002627969 - 0.3017199933528900 - -0.0436590015888214 - <_> - - <_> - - - - <_>4 0 16 16 -1. - <_>4 0 8 8 2. - <_>12 8 8 8 2. - 0 - -0.1097149997949600 - -0.9514709711074829 - -0.0199730005115271 - <_> - - <_> - - - - <_>6 6 14 6 -1. - <_>13 6 7 3 2. - <_>6 9 7 3 2. - 0 - 0.0452280007302761 - 0.0331109985709190 - 0.9661980271339417 - <_> - - <_> - - - - <_>10 5 4 15 -1. - <_>10 10 4 5 3. - 0 - -0.0270479992032051 - 0.9796360135078430 - -0.1726190000772476 - <_> - - <_> - - - - <_>9 15 12 8 -1. - <_>15 15 6 4 2. - <_>9 19 6 4 2. - 0 - 0.0180309992283583 - -0.0208010002970696 - 0.2738589942455292 - <_> - - <_> - - - - <_>6 7 12 4 -1. - <_>12 7 6 4 2. - 0 - 0.0505249984562397 - -0.0568029992282391 - -1.7775089740753174 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>12 6 7 3 2. - <_>5 9 7 3 2. - 0 - -0.0299239996820688 - 0.6532920002937317 - -0.0235370006412268 - <_> - - <_> - - - - <_>3 6 18 10 -1. - <_>3 6 9 5 2. - <_>12 11 9 5 2. - 0 - 0.0380580015480518 - 0.0263170003890991 - -0.7066569924354553 - <_> - - <_> - - - - <_>6 0 18 21 -1. - <_>12 0 6 21 3. - 0 - 0.1856389939785004 - -5.6039998307824135e-003 - 0.3287369906902313 - <_> - - <_> - - - - <_>0 0 24 21 -1. - <_>8 0 8 21 3. - 0 - -4.0670000016689301e-003 - 0.3420479893684387 - -0.3017159998416901 - <_> - - <_> - - - - <_>6 18 18 3 -1. - <_>6 19 18 1 3. - 0 - 0.0101089999079704 - -7.3600001633167267e-003 - 0.5798159837722778 - <_> - - <_> - - - - <_>0 15 9 6 -1. - <_>0 17 9 2 3. - 0 - -0.0115670002996922 - -0.5272219777107239 - 0.0464479997754097 - <_> - - <_> - - - - <_>4 3 19 2 -1. - <_>4 4 19 1 2. - 0 - -6.5649999305605888e-003 - -0.5852910280227661 - 0.1910189986228943 - <_> - - <_> - - - - <_>0 3 24 2 -1. - <_>0 4 24 1 2. - 0 - 0.0105820000171661 - 0.0210730005055666 - -0.6889259815216065 - <_> - - <_> - - - - <_>15 14 9 4 -1. - <_>15 16 9 2 2. - 0 - -0.0203040000051260 - -0.3640069961547852 - 0.1533879935741425 - <_> - - <_> - - - - <_>0 14 9 4 -1. - <_>0 16 9 2 2. - 0 - 2.3529999889433384e-003 - 0.0361640006303787 - -0.5982509851455689 - <_> - - <_> - - - - <_>6 15 18 2 -1. - <_>6 16 18 1 2. - 0 - -1.4690000098198652e-003 - -0.1470769941806793 - 0.3750799894332886 - <_> - - <_> - - - - <_>3 17 18 3 -1. - <_>3 18 18 1 3. - 0 - 8.6449999362230301e-003 - -0.2170850038528442 - 0.5193679928779602 - <_> - - <_> - - - - <_>12 0 3 23 -1. - <_>13 0 1 23 3. - 0 - -0.0243260003626347 - -1.0846769809722900 - 0.1408479958772659 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>6 3 8 3 2. - 0 - 0.0744189992547035 - -0.1551380008459091 - 1.1822769641876221 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - 0.0170779991894960 - 0.0442310012876987 - 0.9156110286712647 - <_> - - <_> - - - - <_>9 0 3 23 -1. - <_>10 0 1 23 3. - 0 - -0.0245779994875193 - -1.5504100322723389 - -0.0547459982335567 - <_> - - <_> - - - - <_>10 7 4 10 -1. - <_>10 12 4 5 2. - 0 - 0.0302050001919270 - 0.1666280031204224 - -1.0001239776611328 - <_> - - <_> - - - - <_>7 8 10 12 -1. - <_>7 12 10 4 3. - 0 - 0.0121360002085567 - -0.7707909941673279 - -4.8639997839927673e-003 - <_> - - <_> - - - - <_>14 9 6 14 -1. - <_>17 9 3 7 2. - <_>14 16 3 7 2. - 0 - 0.0867170020937920 - 0.1106169968843460 - -1.6857999563217163 - <_> - - <_> - - - - <_>2 0 10 9 -1. - <_>2 3 10 3 3. - 0 - -0.0423090010881424 - 1.1075930595397949 - -0.1543859988451004 - <_> - - <_> - - - - <_>11 1 5 12 -1. - <_>11 7 5 6 2. - 0 - -2.6420000940561295e-003 - 0.2745189964771271 - -0.1845619976520538 - <_> - - <_> - - - - <_>1 4 12 10 -1. - <_>1 4 6 5 2. - <_>7 9 6 5 2. - 0 - -0.0566620007157326 - -0.8062559962272644 - -0.0169280003756285 - <_> - - <_> - - - - <_>15 1 9 4 -1. - <_>15 3 9 2 2. - 0 - 0.0234750006347895 - 0.1418769955635071 - -0.2550089955329895 - <_> - - <_> - - - - <_>1 2 8 10 -1. - <_>1 2 4 5 2. - <_>5 7 4 5 2. - 0 - -0.0208030007779598 - 0.1982630044221878 - -0.3117119967937470 - <_> - - <_> - - - - <_>10 1 5 12 -1. - <_>10 5 5 4 3. - 0 - 7.2599998675286770e-003 - -0.0505909994244576 - 0.4192380011081696 - <_> - - <_> - - - - <_>4 0 14 24 -1. - <_>11 0 7 24 2. - 0 - 0.3416000008583069 - -0.1667490005493164 - 0.9274860024452210 - <_> - - <_> - - - - <_>7 17 10 4 -1. - <_>7 19 10 2 2. - 0 - 6.2029999680817127e-003 - -0.1262589991092682 - 0.4044530093669891 - <_> - - <_> - - - - <_>10 14 4 10 -1. - <_>10 19 4 5 2. - 0 - 0.0326920002698898 - -0.0326349996030331 - -0.9893980026245117 - <_> - - <_> - - - - <_>13 15 6 9 -1. - <_>15 15 2 9 3. - 0 - 2.1100000594742596e-004 - -0.0645340010523796 - 0.2547369897365570 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>3 22 18 1 3. - 0 - 7.2100001852959394e-004 - -0.3661859929561615 - 0.1197310015559197 - <_> - - <_> - - - - <_>13 15 6 9 -1. - <_>15 15 2 9 3. - 0 - 0.0544909983873367 - 0.1207349970936775 - -1.0291390419006348 - <_> - - <_> - - - - <_>5 15 6 9 -1. - <_>7 15 2 9 3. - 0 - -0.0101410001516342 - -0.5217720270156860 - 0.0337349995970726 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>12 6 2 9 2. - <_>10 15 2 9 2. - 0 - -0.0188159998506308 - 0.6518179774284363 - 1.3399999588727951e-003 - <_> - - <_> - - - - <_>7 3 6 11 -1. - <_>9 3 2 11 3. - 0 - -5.3480002097785473e-003 - 0.1737069934606552 - -0.3413200080394745 - <_> - - <_> - - - - <_>15 1 9 4 -1. - <_>15 3 9 2 2. - 0 - -0.0108470004051924 - -0.1969989985227585 - 0.1504549980163574 - <_> - - <_> - - - - <_>5 4 14 8 -1. - <_>5 8 14 4 2. - 0 - -0.0499260015785694 - -0.5088850259780884 - 0.0307620000094175 - <_> - - <_> - - - - <_>8 1 15 9 -1. - <_>8 4 15 3 3. - 0 - 0.0121600003913045 - -0.0692519992589951 - 0.1874549984931946 - <_> - - <_> - - - - <_>7 2 8 10 -1. - <_>7 2 4 5 2. - <_>11 7 4 5 2. - 0 - -2.2189998999238014e-003 - -0.4084909856319428 - 0.0799549967050552 - <_> - - <_> - - - - <_>12 2 6 12 -1. - <_>12 2 3 12 2. - 0 - 3.1580000650137663e-003 - -0.2112459987401962 - 0.2236640006303787 - <_> - - <_> - - - - <_>6 2 6 12 -1. - <_>9 2 3 12 2. - 0 - 4.1439998894929886e-003 - -0.4990029931068420 - 0.0629170015454292 - <_> - - <_> - - - - <_>7 7 12 4 -1. - <_>7 7 6 4 2. - 0 - -7.3730000294744968e-003 - -0.2055329978466034 - 0.2209669947624207 - <_> - - <_> - - - - <_>6 3 12 10 -1. - <_>10 3 4 10 3. - 0 - 0.0518120005726814 - 0.1809680014848709 - -0.4349580109119415 - <_> - - <_> - - - - <_>5 6 16 6 -1. - <_>13 6 8 3 2. - <_>5 9 8 3 2. - 0 - 0.0183400008827448 - 0.0152000002563000 - 0.3799169957637787 - <_> - - <_> - - - - <_>3 1 18 9 -1. - <_>9 1 6 9 3. - 0 - 0.1749079972505570 - -0.2092079967260361 - 0.4001300036907196 - <_> - - <_> - - - - <_>3 8 18 5 -1. - <_>9 8 6 5 3. - 0 - 0.0539939999580383 - 0.2475160062313080 - -0.2671290040016174 - <_> - - <_> - - - - <_>0 0 24 22 -1. - <_>0 0 12 11 2. - <_>12 11 12 11 2. - 0 - -0.3203319907188416 - -1.9094380140304565 - -0.0669609978795052 - <_> - - <_> - - - - <_>14 16 9 6 -1. - <_>14 18 9 2 3. - 0 - -0.0270600002259016 - -0.7137129902839661 - 0.1590459942817688 - <_> - - <_> - - - - <_>0 16 24 8 -1. - <_>0 20 24 4 2. - 0 - 0.0774639993906021 - -0.1697019934654236 - 0.7755299806594849 - <_> - - <_> - - - - <_>1 19 22 4 -1. - <_>12 19 11 2 2. - <_>1 21 11 2 2. - 0 - 0.0237719994038343 - 0.1902189999818802 - -0.6016209721565247 - <_> - - <_> - - - - <_>1 16 9 6 -1. - <_>1 18 9 2 3. - 0 - 0.0115010002627969 - 7.7039999887347221e-003 - -0.6173030138015747 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 8 5 4 2. - 0 - 0.0326160006225109 - 0.1715919971466065 - -0.7097820043563843 - <_> - - <_> - - - - <_>9 15 6 9 -1. - <_>11 15 2 9 3. - 0 - -0.0443830005824566 - -2.2606229782104492 - -0.0732769966125488 - <_> - - <_> - - - - <_>10 18 12 6 -1. - <_>16 18 6 3 2. - <_>10 21 6 3 2. - 0 - -0.0584760010242462 - 2.4087750911712646 - 0.0830919966101646 - <_> - - <_> - - - - <_>2 18 12 6 -1. - <_>2 18 6 3 2. - <_>8 21 6 3 2. - 0 - 0.0193039998412132 - -0.2708230018615723 - 0.2736999988555908 - <_> - - <_> - - - - <_>8 3 16 9 -1. - <_>8 6 16 3 3. - 0 - -0.0447059981524944 - 0.3135559856891632 - -0.0624920018017292 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -0.0603349991142750 - -1.4515119791030884 - -0.0587610006332397 - <_> - - <_> - - - - <_>5 5 18 3 -1. - <_>5 6 18 1 3. - 0 - 0.0116670001298189 - -0.0180849991738796 - 0.5047969818115234 - <_> - - <_> - - - - <_>2 6 9 6 -1. - <_>2 9 9 3 2. - 0 - 0.0280099995434284 - -0.2330289930105209 - 0.3070870041847229 - <_> - - <_> - - - - <_>14 2 10 9 -1. - <_>14 5 10 3 3. - 0 - 0.0653970018029213 - 0.1413590013980866 - -0.5001090168952942 - <_> - - <_> - - - - <_>3 6 18 3 -1. - <_>3 7 18 1 3. - 0 - 9.6239997074007988e-003 - -0.2205460071563721 - 0.3919120132923126 - <_> - - <_> - - - - <_>9 2 15 6 -1. - <_>9 4 15 2 3. - 0 - 2.5510000996291637e-003 - -0.1138150021433830 - 0.2003230005502701 - <_> - - <_> - - - - <_>4 8 15 6 -1. - <_>4 10 15 2 3. - 0 - 0.0318470001220703 - 0.0254769995808601 - -0.5332639813423157 - <_> - - <_> - - - - <_>0 5 24 4 -1. - <_>12 5 12 2 2. - <_>0 7 12 2 2. - 0 - 0.0330550000071526 - 0.1780769973993301 - -0.6279389858245850 - <_> - - <_> - - - - <_>7 8 6 12 -1. - <_>9 8 2 12 3. - 0 - 0.0476009994745255 - -0.1474789977073669 - 1.4204180240631104 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -0.0195719990879297 - -0.5269349813461304 - 0.1583860069513321 - <_> - - <_> - - - - <_>0 12 6 12 -1. - <_>0 12 3 6 2. - <_>3 18 3 6 2. - 0 - -0.0547300018370152 - 0.8823159933090210 - -0.1662780046463013 - <_> - - <_> - - - - <_>14 12 10 6 -1. - <_>14 14 10 2 3. - 0 - -0.0226860009133816 - -0.4838689863681793 - 0.1500010043382645 - <_> - - <_> - - - - <_>2 7 18 9 -1. - <_>2 10 18 3 3. - 0 - 0.1071320027112961 - -0.2133619934320450 - 0.4233390092849731 - <_> - - <_> - - - - <_>11 14 10 9 -1. - <_>11 17 10 3 3. - 0 - -0.0363800004124641 - -0.0741980001330376 - 0.1458940058946610 - <_> - - <_> - - - - <_>7 6 10 8 -1. - <_>7 6 5 4 2. - <_>12 10 5 4 2. - 0 - 0.0139359999448061 - -0.2491160035133362 - 0.2677119970321655 - <_> - - <_> - - - - <_>6 6 14 6 -1. - <_>13 6 7 3 2. - <_>6 9 7 3 2. - 0 - 0.0209919996559620 - 8.7959999218583107e-003 - 0.4306499958038330 - <_> - - <_> - - - - <_>4 13 9 7 -1. - <_>7 13 3 7 3. - 0 - 0.0491189993917942 - -0.1759199947118759 - 0.6928290128707886 - <_> - - <_> - - - - <_>14 10 6 12 -1. - <_>17 10 3 6 2. - <_>14 16 3 6 2. - 0 - 0.0363159999251366 - 0.1314529925584793 - -0.3359729945659638 - <_> - - <_> - - - - <_>4 10 6 12 -1. - <_>4 10 3 6 2. - <_>7 16 3 6 2. - 0 - 0.0412280000746250 - -0.0456920005381107 - -1.3515930175781250 - <_> - - <_> - - - - <_>13 9 8 6 -1. - <_>13 9 4 6 2. - 0 - 0.0156720001250505 - 0.1754409968852997 - -0.0605500005185604 - <_> - - <_> - - - - <_>8 3 4 14 -1. - <_>10 3 2 14 2. - 0 - -0.0162860006093979 - -1.1308189630508423 - -0.0395330004394054 - <_> - - <_> - - - - <_>17 0 3 18 -1. - <_>18 0 1 18 3. - 0 - -3.0229999683797359e-003 - -0.2245430052280426 - 0.2362809926271439 - <_> - - <_> - - - - <_>4 12 16 12 -1. - <_>12 12 8 12 2. - 0 - -0.1378629952669144 - 0.4537689983844757 - -0.2109870016574860 - <_> - - <_> - - - - <_>15 0 6 14 -1. - <_>17 0 2 14 3. - 0 - -9.6760001033544540e-003 - -0.1510509997606278 - 0.2078170031309128 - <_> - - <_> - - - - <_>3 0 6 14 -1. - <_>5 0 2 14 3. - 0 - -0.0248399991542101 - -0.6835029721260071 - -8.0040004104375839e-003 - <_> - - <_> - - - - <_>12 2 12 20 -1. - <_>16 2 4 20 3. - 0 - -0.1396439969539642 - 0.6501129865646362 - 0.0465440005064011 - <_> - - <_> - - - - <_>0 2 12 20 -1. - <_>4 2 4 20 3. - 0 - -0.0821539983153343 - 0.4488719999790192 - -0.2359199970960617 - <_> - - <_> - - - - <_>16 0 6 17 -1. - <_>18 0 2 17 3. - 0 - 3.8449999410659075e-003 - -0.0881730020046234 - 0.2734679877758026 - <_> - - <_> - - - - <_>2 0 6 17 -1. - <_>4 0 2 17 3. - 0 - -6.6579999402165413e-003 - -0.4686659872531891 - 0.0770019963383675 - <_> - - <_> - - - - <_>15 6 9 6 -1. - <_>15 8 9 2 3. - 0 - -0.0158980004489422 - 0.2926839888095856 - -0.0219410005956888 - <_> - - <_> - - - - <_>0 6 9 6 -1. - <_>0 8 9 2 3. - 0 - -0.0509460009634495 - -1.2093789577484131 - -0.0421099998056889 - <_> - - <_> - - - - <_>18 1 6 13 -1. - <_>20 1 2 13 3. - 0 - 0.0168379992246628 - -0.0455959998071194 - 0.5018069744110107 - <_> - - <_> - - - - <_>0 1 6 13 -1. - <_>2 1 2 13 3. - 0 - 0.0159189999103546 - -0.2690429985523224 - 0.2651630043983460 - <_> - - <_> - - - - <_>16 0 4 9 -1. - <_>16 0 2 9 2. - 0 - 3.6309999413788319e-003 - -0.1304610073566437 - 0.3180710077285767 - <_> - - <_> - - - - <_>5 10 12 7 -1. - <_>9 10 4 7 3. - 0 - -0.0861449986696243 - 1.9443659782409668 - -0.1397829949855804 - <_> - - <_> - - - - <_>12 9 12 6 -1. - <_>12 11 12 2 3. - 0 - 0.0331409983336926 - 0.1526679992675781 - -0.0308660008013248 - <_> - - <_> - - - - <_>0 9 12 6 -1. - <_>0 11 12 2 3. - 0 - -3.9679999463260174e-003 - -0.7120230197906494 - -0.0138440001755953 - <_> - - <_> - - - - <_>5 7 14 9 -1. - <_>5 10 14 3 3. - 0 - -0.0240080002695322 - 0.9200779795646668 - 0.0467239990830421 - <_> - - <_> - - - - <_>0 15 20 3 -1. - <_>0 16 20 1 3. - 0 - 8.7320003658533096e-003 - -0.2256730049848557 - 0.3193179965019226 - <_> - - <_> - - - - <_>8 10 8 10 -1. - <_>12 10 4 5 2. - <_>8 15 4 5 2. - 0 - -0.0277869999408722 - -0.7233710289001465 - 0.1701859980821610 - <_> - - <_> - - - - <_>5 4 13 9 -1. - <_>5 7 13 3 3. - 0 - -0.1945530027151108 - 1.2461860179901123 - -0.1473619937896729 - <_> - - <_> - - - - <_>10 2 6 18 -1. - <_>10 8 6 6 3. - 0 - -0.1086969971656799 - -1.4465179443359375 - 0.1214530020952225 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - -0.0194949992001057 - -0.7815309762954712 - -0.0237329993396997 - <_> - - <_> - - - - <_>6 9 12 4 -1. - <_>6 11 12 2 2. - 0 - 3.0650000553578138e-003 - -0.8547139763832092 - 0.1668699979782105 - <_> - - <_> - - - - <_>3 2 15 12 -1. - <_>3 6 15 4 3. - 0 - 0.0591939985752106 - -0.1485369950532913 - 1.1273469924926758 - <_> - - <_> - - - - <_>12 0 12 5 -1. - <_>16 0 4 5 3. - 0 - -0.0542079992592335 - 0.5472699999809265 - 0.0355239994823933 - <_> - - <_> - - - - <_>0 15 18 3 -1. - <_>6 15 6 3 3. - 0 - -0.0393249988555908 - 0.3664259910583496 - -0.2054399996995926 - <_> - - <_> - - - - <_>0 14 24 5 -1. - <_>8 14 8 5 3. - 0 - 0.0822789967060089 - -0.0350079983472824 - 0.5399420261383057 - <_> - - <_> - - - - <_>5 1 3 18 -1. - <_>6 1 1 18 3. - 0 - -7.4479999020695686e-003 - -0.6153749823570252 - -3.5319998860359192e-003 - <_> - - <_> - - - - <_>10 0 4 14 -1. - <_>10 0 2 14 2. - 0 - 7.3770000599324703e-003 - -0.0655910000205040 - 0.4196139872074127 - <_> - - <_> - - - - <_>9 3 4 9 -1. - <_>11 3 2 9 2. - 0 - 7.0779998786747456e-003 - -0.3412950038909912 - 0.1253679990768433 - <_> - - <_> - - - - <_>8 2 12 6 -1. - <_>14 2 6 3 2. - <_>8 5 6 3 2. - 0 - -0.0155819999054074 - -0.3024039864540100 - 0.2151100039482117 - <_> - - <_> - - - - <_>0 4 17 4 -1. - <_>0 6 17 2 2. - 0 - -2.7399999089539051e-003 - 0.0765530019998550 - -0.4106050133705139 - <_> - - <_> - - - - <_>16 16 5 8 -1. - <_>16 20 5 4 2. - 0 - -0.0706000030040741 - -0.9735620021820068 - 0.1124180033802986 - <_> - - <_> - - - - <_>3 16 5 8 -1. - <_>3 20 5 4 2. - 0 - -0.0117060001939535 - 0.1856070011854172 - -0.2975519895553589 - <_> - - <_> - - - - <_>6 18 18 2 -1. - <_>6 19 18 1 2. - 0 - 7.1499997284263372e-004 - -0.0596500001847744 - 0.2482469975948334 - <_> - - <_> - - - - <_>0 0 12 5 -1. - <_>4 0 4 5 3. - 0 - -0.0368660017848015 - 0.3275170028209686 - -0.2305960059165955 - <_> - - <_> - - - - <_>14 3 6 12 -1. - <_>17 3 3 6 2. - <_>14 9 3 6 2. - 0 - -0.0325269997119904 - -0.2932029962539673 - 0.1542769968509674 - <_> - - <_> - - - - <_>0 12 6 12 -1. - <_>2 12 2 12 3. - 0 - -0.0748139992356300 - -1.2143570184707642 - -0.0522440001368523 - <_> - - <_> - - - - <_>2 3 21 3 -1. - <_>2 4 21 1 3. - 0 - 0.0414699986577034 - 0.1306249946355820 - -2.3274369239807129 - <_> - - <_> - - - - <_>4 3 6 12 -1. - <_>4 3 3 6 2. - <_>7 9 3 6 2. - 0 - -0.0288800001144409 - -0.6607459783554077 - -9.0960003435611725e-003 - <_> - - <_> - - - - <_>12 8 12 6 -1. - <_>18 8 6 3 2. - <_>12 11 6 3 2. - 0 - 0.0463819988071918 - 0.1663019955158234 - -0.6694949865341187 - <_> - - <_> - - - - <_>0 15 16 9 -1. - <_>8 15 8 9 2. - 0 - 0.2542499899864197 - -0.0546419993042946 - -1.2676080465316772 - <_> - - <_> - - - - <_>6 13 18 5 -1. - <_>6 13 9 5 2. - 0 - 2.4000001139938831e-003 - 0.2027679979801178 - 0.0146679999306798 - <_> - - <_> - - - - <_>1 6 15 6 -1. - <_>6 6 5 6 3. - 0 - -0.0828059986233711 - -0.7871360182762146 - -0.0244689993560314 - <_> - - <_> - - - - <_>11 9 9 6 -1. - <_>14 9 3 6 3. - 0 - -0.0114380000159144 - 0.2862339913845062 - -0.0308940000832081 - <_> - - <_> - - - - <_>3 0 15 11 -1. - <_>8 0 5 11 3. - 0 - -0.1291339993476868 - 1.7292929887771606 - -0.1429390013217926 - <_> - - <_> - - - - <_>15 3 3 18 -1. - <_>15 9 3 6 3. - 0 - 0.0385529994964600 - 0.0192329995334148 - 0.3773260116577148 - <_> - - <_> - - - - <_>6 3 3 18 -1. - <_>6 9 3 6 3. - 0 - 0.1019140034914017 - -0.0745339989662170 - -3.3868899345397949 - <_> - - <_> - - - - <_>9 5 10 8 -1. - <_>14 5 5 4 2. - <_>9 9 5 4 2. - 0 - -0.0190680008381605 - 0.3181410133838654 - 0.0192610006779432 - <_> - - <_> - - - - <_>4 4 16 8 -1. - <_>4 4 8 4 2. - <_>12 8 8 4 2. - 0 - -0.0607750006020069 - 0.7693629860877991 - -0.1764400005340576 - <_> - - <_> - - - - <_>7 7 12 3 -1. - <_>7 7 6 3 2. - 0 - 0.0246799997985363 - 0.1839649975299835 - -0.3086880147457123 - <_> - - <_> - - - - <_>5 0 9 13 -1. - <_>8 0 3 13 3. - 0 - 0.0267590004950762 - -0.2345490008592606 - 0.3305659890174866 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - 0.0149699999019504 - 0.1721359938383102 - -0.1824889928102493 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - 0.0261429995298386 - -0.0464639998972416 - -1.1318379640579224 - <_> - - <_> - - - - <_>8 1 10 9 -1. - <_>8 4 10 3 3. - 0 - -0.0375120006501675 - 0.8040400147438049 - 0.0696600005030632 - <_> - - <_> - - - - <_>0 2 18 2 -1. - <_>0 3 18 1 2. - 0 - -5.3229997865855694e-003 - -0.8188440203666687 - -0.0182249993085861 - <_> - - <_> - - - - <_>10 13 14 6 -1. - <_>17 13 7 3 2. - <_>10 16 7 3 2. - 0 - 0.0178130008280277 - 0.1495780050754547 - -0.1866720020771027 - <_> - - <_> - - - - <_>0 13 14 6 -1. - <_>0 13 7 3 2. - <_>7 16 7 3 2. - 0 - -0.0340100005269051 - -0.7285230159759522 - -0.0166159998625517 - <_> - - <_> - - - - <_>20 2 3 21 -1. - <_>21 2 1 21 3. - 0 - -0.0159530006349087 - 0.5694400072097778 - 0.0138320000842214 - <_> - - <_> - - - - <_>0 9 5 12 -1. - <_>0 13 5 4 3. - 0 - 0.0197439994663000 - 0.0405250005424023 - -0.4177339971065521 - <_> - - <_> - - - - <_>12 6 12 6 -1. - <_>12 8 12 2 3. - 0 - -0.1037480011582375 - -1.9825149774551392 - 0.1196020022034645 - <_> - - <_> - - - - <_>1 8 20 3 -1. - <_>1 9 20 1 3. - 0 - -0.0192850008606911 - 0.5023059844970703 - -0.1974589973688126 - <_> - - <_> - - - - <_>5 7 19 3 -1. - <_>5 8 19 1 3. - 0 - -0.0127800004556775 - 0.4019500017166138 - -0.0269579999148846 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>1 14 9 2 3. - 0 - -0.0163529999554157 - -0.7660880088806152 - -0.0242090001702309 - <_> - - <_> - - - - <_>6 10 14 12 -1. - <_>6 14 14 4 3. - 0 - -0.1276369988918304 - 0.8657850027084351 - 0.0642059966921806 - <_> - - <_> - - - - <_>5 6 14 18 -1. - <_>5 12 14 6 3. - 0 - 0.0190689992159605 - -0.5592979788780212 - -1.6880000475794077e-003 - <_> - - <_> - - - - <_>11 12 9 7 -1. - <_>14 12 3 7 3. - 0 - 0.0324809998273849 - 0.0407220013439655 - 0.4892509877681732 - <_> - - <_> - - - - <_>1 15 18 4 -1. - <_>1 17 18 2 2. - 0 - 9.4849998131394386e-003 - -0.1923190057277679 - 0.5113970041275024 - <_> - - <_> - - - - <_>11 14 6 9 -1. - <_>11 17 6 3 3. - 0 - 5.0470000132918358e-003 - 0.1870680004358292 - -0.1611360013484955 - <_> - - <_> - - - - <_>0 8 18 4 -1. - <_>0 8 9 2 2. - <_>9 10 9 2 2. - 0 - 0.0412679985165596 - -0.0488179996609688 - -1.1326299905776978 - <_> - - <_> - - - - <_>3 10 20 6 -1. - <_>13 10 10 3 2. - <_>3 13 10 3 2. - 0 - -0.0763589963316917 - 1.4169390201568604 - 0.0873199999332428 - <_> - - <_> - - - - <_>1 10 20 6 -1. - <_>1 10 10 3 2. - <_>11 13 10 3 2. - 0 - -0.0728349983692169 - 1.3189860582351685 - -0.1481910049915314 - <_> - - <_> - - - - <_>0 9 24 2 -1. - <_>0 9 12 2 2. - 0 - 0.0595769993960857 - 0.0483769997954369 - 0.8561180233955383 - <_> - - <_> - - - - <_>1 12 20 8 -1. - <_>1 12 10 4 2. - <_>11 16 10 4 2. - 0 - 0.0202639997005463 - -0.2104409933090210 - 0.3385899960994721 - <_> - - <_> - - - - <_>11 12 9 7 -1. - <_>14 12 3 7 3. - 0 - -0.0803010016679764 - -1.2464400529861450 - 0.1185709983110428 - <_> - - <_> - - - - <_>4 12 9 7 -1. - <_>7 12 3 7 3. - 0 - -0.0178350005298853 - 0.2578229904174805 - -0.2456479966640472 - <_> - - <_> - - - - <_>12 12 8 5 -1. - <_>12 12 4 5 2. - 0 - 0.0114310001954436 - 0.2294979989528656 - -0.2949759960174561 - <_> - - <_> - - - - <_>4 12 8 5 -1. - <_>8 12 4 5 2. - 0 - -0.0255410000681877 - -0.8625299930572510 - -7.0400000549852848e-004 - <_> - - <_> - - - - <_>13 10 4 10 -1. - <_>13 10 2 10 2. - 0 - -7.6899997657164931e-004 - 0.3151139914989471 - -0.1434900015592575 - <_> - - <_> - - - - <_>1 15 20 2 -1. - <_>11 15 10 2 2. - 0 - -0.0144539996981621 - 0.2514849901199341 - -0.2823289930820465 - <_> - - <_> - - - - <_>9 10 6 6 -1. - <_>9 10 3 6 2. - 0 - 8.6730001494288445e-003 - 0.2660140097141266 - -0.2819080054759979 - -3.2103500366210937 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>0 1 21 3 -1. - <_>7 1 7 3 3. - 0 - 0.0547089986503124 - -0.5414429903030396 - 0.6104300022125244 - <_> - - <_> - - - - <_>6 4 13 9 -1. - <_>6 7 13 3 3. - 0 - -0.1083879992365837 - 0.7173990011215210 - -0.4119609892368317 - <_> - - <_> - - - - <_>6 5 12 5 -1. - <_>10 5 4 5 3. - 0 - 0.0229969993233681 - -0.5826979875564575 - 0.2964560091495514 - <_> - - <_> - - - - <_>10 10 10 6 -1. - <_>10 12 10 2 3. - 0 - 2.7540000155568123e-003 - -0.7424389719963074 - 0.1418330073356628 - <_> - - <_> - - - - <_>6 12 5 8 -1. - <_>6 16 5 4 2. - 0 - -2.1520000882446766e-003 - 0.1787990033626556 - -0.6854860186576843 - <_> - - <_> - - - - <_>13 0 6 9 -1. - <_>15 0 2 9 3. - 0 - -0.0225590001791716 - -1.0775549411773682 - 0.1238899976015091 - <_> - - <_> - - - - <_>2 10 18 6 -1. - <_>8 10 6 6 3. - 0 - 0.0830250009894371 - 0.0245009995996952 - -1.0251879692077637 - <_> - - <_> - - - - <_>11 2 9 4 -1. - <_>11 4 9 2 2. - 0 - -6.6740000620484352e-003 - -0.4528310000896454 - 0.2123019993305206 - <_> - - <_> - - - - <_>1 20 21 3 -1. - <_>8 20 7 3 3. - 0 - 0.0764850005507469 - -0.2697269916534424 - 0.4858019948005676 - <_> - - <_> - - - - <_>1 10 22 2 -1. - <_>1 11 22 1 2. - 0 - 5.4910001344978809e-003 - -0.4887120127677918 - 0.3161639869213104 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -0.0104149999096990 - 0.4151290059089661 - -0.3004480004310608 - <_> - - <_> - - - - <_>13 0 6 9 -1. - <_>15 0 2 9 3. - 0 - 0.0276079997420311 - 0.1620379984378815 - -0.9986850023269653 - <_> - - <_> - - - - <_>5 0 6 9 -1. - <_>7 0 2 9 3. - 0 - -0.0232720002532005 - -1.1024399995803833 - 0.0211249999701977 - <_> - - <_> - - - - <_>18 2 6 20 -1. - <_>20 2 2 20 3. - 0 - -0.0556199997663498 - 0.6503310203552246 - -0.0279380008578300 - <_> - - <_> - - - - <_>0 2 6 20 -1. - <_>2 2 2 20 3. - 0 - -0.0406319983303547 - 0.4211730062961578 - -0.2676379978656769 - <_> - - <_> - - - - <_>11 7 6 14 -1. - <_>14 7 3 7 2. - <_>11 14 3 7 2. - 0 - -7.3560001328587532e-003 - 0.3527779877185822 - -0.3785400092601776 - <_> - - <_> - - - - <_>0 1 4 9 -1. - <_>2 1 2 9 2. - 0 - 0.0170070007443428 - -0.2918950021266937 - 0.4105379879474640 - <_> - - <_> - - - - <_>12 14 9 4 -1. - <_>12 16 9 2 2. - 0 - -0.0370340012013912 - -1.3216309547424316 - 0.1296650022268295 - <_> - - <_> - - - - <_>1 13 9 4 -1. - <_>1 15 9 2 2. - 0 - -0.0196330007165670 - -0.8770229816436768 - 1.0799999581649899e-003 - <_> - - <_> - - - - <_>7 6 15 6 -1. - <_>7 8 15 2 3. - 0 - -0.0235469993203878 - 0.2610610127449036 - -0.2148140072822571 - <_> - - <_> - - - - <_>8 2 3 18 -1. - <_>8 8 3 6 3. - 0 - -0.0433529987931252 - -0.9908969998359680 - -9.9560003727674484e-003 - <_> - - <_> - - - - <_>6 6 12 6 -1. - <_>12 6 6 3 2. - <_>6 9 6 3 2. - 0 - -0.0221839994192123 - 0.6345440149307251 - -0.0565470010042191 - <_> - - <_> - - - - <_>2 19 20 4 -1. - <_>2 19 10 2 2. - <_>12 21 10 2 2. - 0 - 0.0165309999138117 - 0.0246649999171495 - -0.7332680225372315 - <_> - - <_> - - - - <_>14 15 6 9 -1. - <_>14 18 6 3 3. - 0 - -0.0327440015971661 - -0.5629720091819763 - 0.1664029955863953 - <_> - - <_> - - - - <_>3 5 18 14 -1. - <_>3 5 9 7 2. - <_>12 12 9 7 2. - 0 - 0.0714159980416298 - -3.0000001424923539e-004 - -0.9328640103340149 - <_> - - <_> - - - - <_>15 6 4 18 -1. - <_>17 6 2 9 2. - <_>15 15 2 9 2. - 0 - 8.0999999772757292e-004 - -0.0953800007700920 - 0.2518469989299774 - <_> - - <_> - - - - <_>5 6 4 18 -1. - <_>5 6 2 9 2. - <_>7 15 2 9 2. - 0 - -8.4090000018477440e-003 - -0.6549680233001709 - 0.0673009976744652 - <_> - - <_> - - - - <_>11 0 6 9 -1. - <_>13 0 2 9 3. - 0 - -0.0172540005296469 - -0.4649299979209900 - 0.1607089936733246 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0186410006135702 - -1.0594010353088379 - -0.0196170005947351 - <_> - - <_> - - - - <_>11 5 6 9 -1. - <_>13 5 2 9 3. - 0 - -9.1979997232556343e-003 - 0.5071619749069214 - -0.1533920019865036 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>12 5 3 6 2. - 0 - 0.0185380000621080 - -0.3049820065498352 - 0.7350620031356812 - <_> - - <_> - - - - <_>4 1 16 6 -1. - <_>12 1 8 3 2. - <_>4 4 8 3 2. - 0 - -0.0503350012004375 - -1.1140480041503906 - 0.1800010055303574 - <_> - - <_> - - - - <_>9 13 6 11 -1. - <_>11 13 2 11 3. - 0 - -0.0235290005803108 - -0.8690789937973023 - -0.0124599998816848 - <_> - - <_> - - - - <_>17 1 6 12 -1. - <_>20 1 3 6 2. - <_>17 7 3 6 2. - 0 - -0.0271000005304813 - 0.6594290137290955 - -0.0353239998221397 - <_> - - <_> - - - - <_>1 17 18 3 -1. - <_>1 18 18 1 3. - 0 - 6.5879998728632927e-003 - -0.2295340001583099 - 0.4242509901523590 - <_> - - <_> - - - - <_>7 13 10 8 -1. - <_>7 17 10 4 2. - 0 - 0.0233600009232759 - 0.1835619956254959 - -0.9858729839324951 - <_> - - <_> - - - - <_>6 18 10 6 -1. - <_>6 20 10 2 3. - 0 - 0.0129469996318221 - -0.3314740061759949 - 0.2132319957017899 - <_> - - <_> - - - - <_>9 14 9 4 -1. - <_>9 16 9 2 2. - 0 - -6.6559999249875546e-003 - -0.1195140033960342 - 0.2975279986858368 - <_> - - <_> - - - - <_>1 1 6 12 -1. - <_>1 1 3 6 2. - <_>4 7 3 6 2. - 0 - -0.0225709993392229 - 0.3849940001964569 - -0.2443449944257736 - <_> - - <_> - - - - <_>19 4 5 12 -1. - <_>19 8 5 4 3. - 0 - -0.0638139992952347 - -0.8938350081443787 - 0.1421750038862228 - <_> - - <_> - - - - <_>0 0 8 8 -1. - <_>4 0 4 8 2. - 0 - -0.0499450005590916 - 0.5386440157890320 - -0.2048529982566834 - <_> - - <_> - - - - <_>3 5 19 3 -1. - <_>3 6 19 1 3. - 0 - 6.8319998681545258e-003 - -0.0566789992153645 - 0.3997099995613098 - <_> - - <_> - - - - <_>1 5 12 6 -1. - <_>1 5 6 3 2. - <_>7 8 6 3 2. - 0 - -0.0558359995484352 - -1.5239470005035400 - -0.0511830002069473 - <_> - - <_> - - - - <_>2 1 21 8 -1. - <_>9 1 7 8 3. - 0 - 0.3195700049400330 - 0.0745740011334419 - 1.2447799444198608 - <_> - - <_> - - - - <_>4 1 16 8 -1. - <_>4 5 16 4 2. - 0 - 0.0809559971094131 - -0.1966550052165985 - 0.5988969802856445 - <_> - - <_> - - - - <_>6 0 18 3 -1. - <_>6 1 18 1 3. - 0 - -0.0149119999259710 - -0.6402059793472290 - 0.1580760031938553 - <_> - - <_> - - - - <_>4 4 10 14 -1. - <_>4 11 10 7 2. - 0 - 0.0467090010643005 - 0.0852390006184578 - -0.4548720121383667 - <_> - - <_> - - - - <_>15 6 4 10 -1. - <_>15 11 4 5 2. - 0 - 6.0539999976754189e-003 - -0.4318400025367737 - 0.2245260030031204 - <_> - - <_> - - - - <_>3 18 18 3 -1. - <_>9 18 6 3 3. - 0 - -0.0343759991228580 - 0.4020250141620636 - -0.2390359938144684 - <_> - - <_> - - - - <_>8 18 12 6 -1. - <_>12 18 4 6 3. - 0 - -0.0349240005016327 - 0.5287010073661804 - 0.0397090017795563 - <_> - - <_> - - - - <_>3 15 6 9 -1. - <_>6 15 3 9 2. - 0 - 3.0030000489205122e-003 - -0.3875429928302765 - 0.1419260054826737 - <_> - - <_> - - - - <_>15 7 6 8 -1. - <_>15 11 6 4 2. - 0 - -0.0141329998150468 - 0.8752840161323547 - 0.0855079963803291 - <_> - - <_> - - - - <_>3 7 6 8 -1. - <_>3 11 6 4 2. - 0 - -6.7940000444650650e-003 - -1.1649219989776611 - -0.0339430011808872 - <_> - - <_> - - - - <_>5 9 18 6 -1. - <_>14 9 9 3 2. - <_>5 12 9 3 2. - 0 - -0.0528860017657280 - 1.0930680036544800 - 0.0511870011687279 - <_> - - <_> - - - - <_>1 13 12 6 -1. - <_>1 15 12 2 3. - 0 - -2.1079999860376120e-003 - 0.1369619965553284 - -0.3384999930858612 - <_> - - <_> - - - - <_>14 15 10 6 -1. - <_>14 17 10 2 3. - 0 - 0.0183530002832413 - 0.1366160064935684 - -0.4077779948711395 - <_> - - <_> - - - - <_>0 15 10 6 -1. - <_>0 17 10 2 3. - 0 - 0.0126719996333122 - -0.0149360001087189 - -0.8170750141143799 - <_> - - <_> - - - - <_>15 13 6 9 -1. - <_>15 16 6 3 3. - 0 - 0.0129249999299645 - 0.1762509942054749 - -0.3249169886112213 - <_> - - <_> - - - - <_>3 13 6 9 -1. - <_>3 16 6 3 3. - 0 - -0.0179210007190704 - -0.5274540185928345 - 0.0444430001080036 - <_> - - <_> - - - - <_>9 5 8 8 -1. - <_>9 5 4 8 2. - 0 - 1.9160000374540687e-003 - -0.1097859963774681 - 0.2206750065088272 - <_> - - <_> - - - - <_>1 18 12 6 -1. - <_>1 18 6 3 2. - <_>7 21 6 3 2. - 0 - -0.0146979996934533 - 0.3906779885292053 - -0.2222499996423721 - <_> - - <_> - - - - <_>13 19 10 4 -1. - <_>13 21 10 2 2. - 0 - -0.0149729996919632 - -0.2545090019702911 - 0.1779000014066696 - <_> - - <_> - - - - <_>1 19 10 4 -1. - <_>1 21 10 2 2. - 0 - 0.0146369999274611 - -0.0251250006258488 - -0.8712130188941956 - <_> - - <_> - - - - <_>6 19 18 3 -1. - <_>6 20 18 1 3. - 0 - -0.0109740002080798 - 0.7908279895782471 - 0.0201210007071495 - <_> - - <_> - - - - <_>8 14 4 10 -1. - <_>8 19 4 5 2. - 0 - -9.1599998995661736e-003 - -0.4790689945220947 - 0.0522320009768009 - <_> - - <_> - - - - <_>0 0 24 6 -1. - <_>0 2 24 2 3. - 0 - 4.6179997734725475e-003 - -0.1724459975957871 - 0.3452779948711395 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>0 4 6 3 3. - 0 - 0.0234769992530346 - 3.7760001141577959e-003 - -0.6533370018005371 - <_> - - <_> - - - - <_>4 9 20 6 -1. - <_>14 9 10 3 2. - <_>4 12 10 3 2. - 0 - 0.0317669995129108 - 0.0163640007376671 - 0.5872370004653931 - <_> - - <_> - - - - <_>1 15 19 8 -1. - <_>1 19 19 4 2. - 0 - -0.0184199996292591 - 0.1999389976263046 - -0.3205649852752686 - <_> - - <_> - - - - <_>14 0 10 6 -1. - <_>14 2 10 2 3. - 0 - 0.0195439998060465 - 0.1845020055770874 - -0.2379360049962997 - <_> - - <_> - - - - <_>1 10 21 14 -1. - <_>8 10 7 14 3. - 0 - 0.4115949869155884 - -0.0603820011019707 - -1.6072119474411011 - <_> - - <_> - - - - <_>10 10 8 8 -1. - <_>10 10 4 8 2. - 0 - -0.0415959991514683 - -0.3275620043277741 - 0.1505800038576126 - <_> - - <_> - - - - <_>6 8 10 4 -1. - <_>11 8 5 4 2. - 0 - -0.0103359995409846 - -0.6239439845085144 - 0.0131120001897216 - <_> - - <_> - - - - <_>10 5 4 9 -1. - <_>10 5 2 9 2. - 0 - 0.0123929996043444 - -0.0331149995326996 - 0.5557990074157715 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>9 5 2 10 3. - 0 - -8.7270000949501991e-003 - 0.1988320052623749 - -0.3763560056686401 - <_> - - <_> - - - - <_>14 4 4 13 -1. - <_>14 4 2 13 2. - 0 - 0.0162950009107590 - 0.2037300020456314 - -0.4280079901218414 - <_> - - <_> - - - - <_>6 4 4 13 -1. - <_>8 4 2 13 2. - 0 - -0.0104839997366071 - -0.5684700012207031 - 0.0441990010440350 - <_> - - <_> - - - - <_>8 7 9 6 -1. - <_>11 7 3 6 3. - 0 - -0.0124319996684790 - 0.7464190125465393 - 0.0436789989471436 - <_> - - <_> - - - - <_>3 6 16 6 -1. - <_>3 6 8 3 2. - <_>11 9 8 3 2. - 0 - -0.0503749996423721 - 0.8509010076522827 - -0.1777379959821701 - <_> - - <_> - - - - <_>5 4 16 14 -1. - <_>13 4 8 7 2. - <_>5 11 8 7 2. - 0 - 0.0495480000972748 - 0.1678490042686462 - -0.2987749874591827 - <_> - - <_> - - - - <_>0 0 24 4 -1. - <_>0 0 12 2 2. - <_>12 2 12 2 2. - 0 - -0.0410850010812283 - -1.3302919864654541 - -0.0491820015013218 - <_> - - <_> - - - - <_>9 1 9 6 -1. - <_>12 1 3 6 3. - 0 - 1.0069999843835831e-003 - -0.0605389997363091 - 0.1848320066928864 - <_> - - <_> - - - - <_>4 1 14 4 -1. - <_>11 1 7 4 2. - 0 - -0.0501429997384548 - 0.7644770145416260 - -0.1835699975490570 - <_> - - <_> - - - - <_>10 14 7 9 -1. - <_>10 17 7 3 3. - 0 - -8.7879998609423637e-003 - 0.2265599966049194 - -0.0631569996476173 - <_> - - <_> - - - - <_>8 3 8 10 -1. - <_>8 3 4 5 2. - <_>12 8 4 5 2. - 0 - -0.0501709990203381 - -1.5899070501327515 - -0.0612550005316734 - <_> - - <_> - - - - <_>7 3 12 5 -1. - <_>11 3 4 5 3. - 0 - 0.1021609976887703 - 0.1207180023193359 - -1.4120110273361206 - <_> - - <_> - - - - <_>8 2 4 13 -1. - <_>10 2 2 13 2. - 0 - -0.0143729997798800 - -1.3116970062255859 - -0.0519360005855560 - <_> - - <_> - - - - <_>11 2 3 19 -1. - <_>12 2 1 19 3. - 0 - 0.0102819995954633 - -2.1639999467879534e-003 - 0.4424720108509064 - <_> - - <_> - - - - <_>7 7 9 6 -1. - <_>10 7 3 6 3. - 0 - -0.0118140000849962 - 0.6537809967994690 - -0.1872369945049286 - <_> - - <_> - - - - <_>4 22 20 2 -1. - <_>4 22 10 2 2. - 0 - 0.0721149966120720 - 0.0718469992280006 - 0.8149629831314087 - <_> - - <_> - - - - <_>0 16 24 4 -1. - <_>0 16 12 2 2. - <_>12 18 12 2 2. - 0 - -0.0190019998699427 - -0.6742720007896423 - -4.3200000072829425e-004 - <_> - - <_> - - - - <_>7 3 12 5 -1. - <_>11 3 4 5 3. - 0 - -4.6990001574158669e-003 - 0.3331150114536285 - 0.0557940006256104 - <_> - - <_> - - - - <_>1 10 8 14 -1. - <_>1 10 4 7 2. - <_>5 17 4 7 2. - 0 - -0.0581570006906986 - 0.4557229876518250 - -0.2030510008335114 - <_> - - <_> - - - - <_>11 16 6 6 -1. - <_>11 19 6 3 2. - 0 - 1.1360000353306532e-003 - -0.0446869991719723 - 0.2268189936876297 - <_> - - <_> - - - - <_>6 0 10 24 -1. - <_>6 0 5 12 2. - <_>11 12 5 12 2. - 0 - -0.0494149997830391 - 0.2669459879398346 - -0.2611699998378754 - <_> - - <_> - - - - <_>7 5 14 14 -1. - <_>14 5 7 7 2. - <_>7 12 7 7 2. - 0 - -0.1191380023956299 - -0.8301799893379211 - 0.1324850022792816 - <_> - - <_> - - - - <_>7 8 10 8 -1. - <_>7 8 5 4 2. - <_>12 12 5 4 2. - 0 - -0.0183039996773005 - -0.6749920248985291 - 0.0170920006930828 - <_> - - <_> - - - - <_>9 1 9 6 -1. - <_>12 1 3 6 3. - 0 - -7.9199997708201408e-003 - -0.0722870007157326 - 0.1442580074071884 - <_> - - <_> - - - - <_>0 6 24 3 -1. - <_>12 6 12 3 2. - 0 - 0.0519259981811047 - 0.0309219993650913 - -0.5586060285568237 - <_> - - <_> - - - - <_>7 3 12 5 -1. - <_>11 3 4 5 3. - 0 - 0.0667240023612976 - 0.1366640031337738 - -0.2941100001335144 - <_> - - <_> - - - - <_>1 13 22 4 -1. - <_>1 13 11 2 2. - <_>12 15 11 2 2. - 0 - -0.0137780001387000 - -0.5944390296936035 - 0.0153000000864267 - <_> - - <_> - - - - <_>9 12 12 6 -1. - <_>9 14 12 2 3. - 0 - -0.0177609995007515 - 0.4049650132656097 - -3.3559999428689480e-003 - <_> - - <_> - - - - <_>0 5 9 6 -1. - <_>0 7 9 2 3. - 0 - -0.0422349981963634 - -1.0897940397262573 - -0.0402249991893768 - <_> - - <_> - - - - <_>1 5 23 6 -1. - <_>1 7 23 2 3. - 0 - -0.0135249998420477 - 0.2892189919948578 - -0.2519479990005493 - <_> - - <_> - - - - <_>1 6 19 12 -1. - <_>1 10 19 4 3. - 0 - -0.0111060002818704 - 0.6531280279159546 - -0.1805370002985001 - <_> - - <_> - - - - <_>9 1 6 21 -1. - <_>9 8 6 7 3. - 0 - -0.1228459998965263 - -1.9570649862289429 - 0.1481540054082871 - <_> - - <_> - - - - <_>3 19 18 3 -1. - <_>9 19 6 3 3. - 0 - 0.0477159991860390 - -0.2287559956312180 - 0.3423370122909546 - <_> - - <_> - - - - <_>9 14 6 9 -1. - <_>11 14 2 9 3. - 0 - 0.0318170003592968 - 0.1597629934549332 - -1.0091969966888428 - <_> - - <_> - - - - <_>9 6 4 12 -1. - <_>11 6 2 12 2. - 0 - 4.2570000514388084e-003 - -0.3888129889965057 - 0.0842100009322166 - <_> - - <_> - - - - <_>16 0 6 9 -1. - <_>18 0 2 9 3. - 0 - -0.0613729991018772 - 1.7152810096740723 - 0.0593249984085560 - <_> - - <_> - - - - <_>2 0 6 9 -1. - <_>4 0 2 9 3. - 0 - -2.7030000928789377e-003 - -0.3816170096397400 - 0.0851270034909248 - <_> - - <_> - - - - <_>13 1 4 22 -1. - <_>15 1 2 11 2. - <_>13 12 2 11 2. - 0 - -0.0685440003871918 - -3.0925889015197754 - 0.1178800016641617 - <_> - - <_> - - - - <_>1 8 8 12 -1. - <_>1 14 8 6 2. - 0 - 0.1037250012159348 - -0.1376930028200150 - 1.9009410142898560 - <_> - - <_> - - - - <_>14 7 7 9 -1. - <_>14 10 7 3 3. - 0 - 0.0157990008592606 - -0.0626600012183189 - 0.2591769993305206 - <_> - - <_> - - - - <_>3 12 18 4 -1. - <_>3 12 9 2 2. - <_>12 14 9 2 2. - 0 - -9.8040001466870308e-003 - -0.5629159808158875 - 0.0439230017364025 - <_> - - <_> - - - - <_>13 1 4 22 -1. - <_>15 1 2 11 2. - <_>13 12 2 11 2. - 0 - -9.0229995548725128e-003 - 0.2528710067272186 - -0.0412259995937347 - <_> - - <_> - - - - <_>7 1 4 22 -1. - <_>7 1 2 11 2. - <_>9 12 2 11 2. - 0 - -0.0637549981474876 - -2.6178569793701172 - -0.0740059986710548 - <_> - - <_> - - - - <_>4 7 20 4 -1. - <_>14 7 10 2 2. - <_>4 9 10 2 2. - 0 - 0.0389549992978573 - 0.0590329989790916 - 0.8594560027122498 - <_> - - <_> - - - - <_>9 10 6 7 -1. - <_>12 10 3 7 2. - 0 - -0.0398029983043671 - 0.9360049962997437 - -0.1563940048217773 - <_> - - <_> - - - - <_>7 7 10 4 -1. - <_>7 7 5 4 2. - 0 - 0.0503019988536835 - 0.1372590065002441 - -2.5549728870391846 - <_> - - <_> - - - - <_>0 3 4 15 -1. - <_>0 8 4 5 3. - 0 - 0.0462500005960464 - -0.0139640001580119 - -0.7102620005607605 - <_> - - <_> - - - - <_>15 0 8 12 -1. - <_>19 0 4 6 2. - <_>15 6 4 6 2. - 0 - 0.0621960014104843 - 0.0595260001718998 - 1.6509100198745728 - <_> - - <_> - - - - <_>1 0 8 12 -1. - <_>1 0 4 6 2. - <_>5 6 4 6 2. - 0 - -0.0647760033607483 - 0.7136899828910828 - -0.1727000027894974 - <_> - - <_> - - - - <_>14 5 6 16 -1. - <_>16 5 2 16 3. - 0 - 0.0275229997932911 - 0.1463160067796707 - -0.0814289972186089 - <_> - - <_> - - - - <_>4 5 6 16 -1. - <_>6 5 2 16 3. - 0 - 3.9900001138448715e-004 - -0.3714450001716614 - 0.1015269979834557 - <_> - - <_> - - - - <_>15 0 6 16 -1. - <_>17 0 2 16 3. - 0 - -4.3299999088048935e-003 - -0.2375629991292954 - 0.2679840028285980 - <_> - - <_> - - - - <_>3 0 6 16 -1. - <_>5 0 2 16 3. - 0 - 0.0472970008850098 - -0.0276820007711649 - -0.8491029739379883 - <_> - - <_> - - - - <_>0 2 24 3 -1. - <_>0 3 24 1 3. - 0 - 0.0125089995563030 - 0.1873019933700562 - -0.5600110292434692 - <_> - - <_> - - - - <_>7 1 10 4 -1. - <_>7 3 10 2 2. - 0 - 0.0458990000188351 - -0.1560119986534119 - 0.9707300066947937 - <_> - - <_> - - - - <_>1 0 23 8 -1. - <_>1 4 23 4 2. - 0 - 0.1985339969396591 - 0.1489550024271011 - -1.1015529632568359 - <_> - - <_> - - - - <_>1 17 19 3 -1. - <_>1 18 19 1 3. - 0 - 0.0166749991476536 - -0.1661529988050461 - 0.8221099972724915 - <_> - - <_> - - - - <_>6 18 18 2 -1. - <_>6 19 18 1 2. - 0 - 1.9829999655485153e-003 - -0.0712499991059303 - 0.2881090044975281 - <_> - - <_> - - - - <_>1 17 9 6 -1. - <_>1 19 9 2 3. - 0 - 0.0224479995667934 - -0.0209810007363558 - -0.7841650247573853 - <_> - - <_> - - - - <_>15 15 6 9 -1. - <_>15 18 6 3 3. - 0 - -0.0139130000025034 - -0.1816579997539520 - 0.2049179971218109 - <_> - - <_> - - - - <_>3 15 6 9 -1. - <_>3 18 6 3 3. - 0 - -7.7659999951720238e-003 - -0.4559589922428131 - 0.0635769963264465 - <_> - - <_> - - - - <_>4 14 20 6 -1. - <_>4 17 20 3 2. - 0 - -0.0132090002298355 - 0.2663230001926422 - -0.1779599934816361 - <_> - - <_> - - - - <_>0 10 6 14 -1. - <_>0 10 3 7 2. - <_>3 17 3 7 2. - 0 - 0.0490529984235764 - -0.1547680050134659 - 1.1069979667663574 - <_> - - <_> - - - - <_>6 18 18 3 -1. - <_>6 19 18 1 3. - 0 - 0.0202639997005463 - 0.0689150020480156 - 0.6986749768257141 - <_> - - <_> - - - - <_>4 12 9 7 -1. - <_>7 12 3 7 3. - 0 - -0.0168280005455017 - 0.2760719954967499 - -0.2513920068740845 - <_> - - <_> - - - - <_>6 10 18 5 -1. - <_>12 10 6 5 3. - 0 - -0.1693949997425079 - -3.0767529010772705 - 0.1161750033497810 - <_> - - <_> - - - - <_>0 10 18 5 -1. - <_>6 10 6 5 3. - 0 - -0.1133610010147095 - -1.4639229774475098 - -0.0514470003545284 - <_> - - <_> - - - - <_>3 2 18 9 -1. - <_>9 2 6 9 3. - 0 - -0.0776859968900681 - 0.8843020200729370 - 0.0433069989085197 - <_> - - <_> - - - - <_>4 6 10 10 -1. - <_>4 6 5 5 2. - <_>9 11 5 5 2. - 0 - -0.0155680002644658 - 0.1367249935865402 - -0.3450550138950348 - <_> - - <_> - - - - <_>20 14 4 9 -1. - <_>20 14 2 9 2. - 0 - -0.0660189986228943 - -1.0300110578536987 - 0.1160139963030815 - <_> - - <_> - - - - <_>0 14 4 9 -1. - <_>2 14 2 9 2. - 0 - 8.3699999377131462e-003 - 0.0764290019869804 - -0.4400250017642975 - <_> - - <_> - - - - <_>11 1 4 20 -1. - <_>13 1 2 10 2. - <_>11 11 2 10 2. - 0 - 0.0354029983282089 - 0.1197950020432472 - -0.7266830205917358 - <_> - - <_> - - - - <_>6 21 12 3 -1. - <_>12 21 6 3 2. - 0 - -0.0390510000288486 - 0.6737530231475830 - -0.1819600015878677 - <_> - - <_> - - - - <_>11 1 4 20 -1. - <_>13 1 2 10 2. - <_>11 11 2 10 2. - 0 - -9.7899995744228363e-003 - 0.2126459926366806 - 0.0367560014128685 - <_> - - <_> - - - - <_>1 16 10 8 -1. - <_>1 16 5 4 2. - <_>6 20 5 4 2. - 0 - -0.0230470001697540 - 0.4474219977855682 - -0.2098670005798340 - <_> - - <_> - - - - <_>11 1 4 20 -1. - <_>13 1 2 10 2. - <_>11 11 2 10 2. - 0 - 3.1169999856501818e-003 - 0.0375440008938313 - 0.2780820131301880 - <_> - - <_> - - - - <_>1 0 3 19 -1. - <_>2 0 1 19 3. - 0 - 0.0131360003724694 - -0.1984239965677261 - 0.5433570146560669 - <_> - - <_> - - - - <_>11 1 4 20 -1. - <_>13 1 2 10 2. - <_>11 11 2 10 2. - 0 - 0.0147820003330708 - 0.1353060007095337 - -0.1115360036492348 - <_> - - <_> - - - - <_>0 1 6 9 -1. - <_>2 1 2 9 3. - 0 - -0.0601390004158020 - 0.8403930068016052 - -0.1671160012483597 - <_> - - <_> - - - - <_>3 7 19 4 -1. - <_>3 9 19 2 2. - 0 - 0.0519989989697933 - 0.1737200021743774 - -0.7854760289192200 - <_> - - <_> - - - - <_>7 14 9 6 -1. - <_>7 16 9 2 3. - 0 - 0.0247920006513596 - -0.1773920059204102 - 0.6675260066986084 - <_> - - <_> - - - - <_>17 1 7 6 -1. - <_>17 4 7 3 2. - 0 - -0.0120149999856949 - -0.1426369994878769 - 0.1607050001621246 - <_> - - <_> - - - - <_>5 0 14 8 -1. - <_>5 4 14 4 2. - 0 - -0.0986559987068176 - 1.0429769754409790 - -0.1577019989490509 - <_> - - <_> - - - - <_>16 1 8 6 -1. - <_>16 4 8 3 2. - 0 - 0.1175829991698265 - 0.1095570027828217 - -4.4920377731323242 - <_> - - <_> - - - - <_>0 1 8 6 -1. - <_>0 4 8 3 2. - 0 - -0.0189229995012283 - -0.7854340076446533 - 0.0129840001463890 - <_> - - <_> - - - - <_>6 0 18 4 -1. - <_>15 0 9 2 2. - <_>6 2 9 2 2. - 0 - -0.0283909998834133 - -0.6056990027427673 - 0.1290349960327148 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - 0.0131829995661974 - -0.0144159998744726 - -0.7321050167083740 - <_> - - <_> - - - - <_>3 7 18 8 -1. - <_>9 7 6 8 3. - 0 - -0.1165300011634827 - -2.0442469120025635 - 0.1405310034751892 - <_> - - <_> - - - - <_>2 11 6 9 -1. - <_>4 11 2 9 3. - 0 - -3.8880000356584787e-003 - -0.4186159968376160 - 0.0787049978971481 - <_> - - <_> - - - - <_>10 5 6 9 -1. - <_>12 5 2 9 3. - 0 - 0.0312290005385876 - 0.0246329996734858 - 0.4187040030956268 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>10 6 2 9 2. - <_>12 15 2 9 2. - 0 - 0.0251989997923374 - -0.1755779981613159 - 0.6471059918403626 - <_> - - <_> - - - - <_>11 1 4 20 -1. - <_>13 1 2 10 2. - <_>11 11 2 10 2. - 0 - -0.0281240008771420 - -0.2200559973716736 - 0.1412100046873093 - <_> - - <_> - - - - <_>9 1 4 20 -1. - <_>9 1 2 10 2. - <_>11 11 2 10 2. - 0 - 0.0364990010857582 - -0.0684269964694977 - -2.3410849571228027 - <_> - - <_> - - - - <_>5 9 18 6 -1. - <_>14 9 9 3 2. - <_>5 12 9 3 2. - 0 - -0.0722929984331131 - 1.2898750305175781 - 0.0848750025033951 - <_> - - <_> - - - - <_>6 4 6 9 -1. - <_>8 4 2 9 3. - 0 - -0.0416710004210472 - -1.1630970239639282 - -0.0537529997527599 - <_> - - <_> - - - - <_>10 16 8 6 -1. - <_>10 16 4 6 2. - 0 - 0.0477030016481876 - 0.0701010003685951 - 0.7367650270462036 - <_> - - <_> - - - - <_>0 0 18 8 -1. - <_>0 0 9 4 2. - <_>9 4 9 4 2. - 0 - 0.0657930001616478 - -0.1775529980659485 - 0.6978049874305725 - <_> - - <_> - - - - <_>6 5 14 12 -1. - <_>13 5 7 6 2. - <_>6 11 7 6 2. - 0 - 0.0139049999415874 - 0.2193679958581924 - -0.2039079964160919 - <_> - - <_> - - - - <_>4 3 15 7 -1. - <_>9 3 5 7 3. - 0 - -0.0277309995144606 - 0.6186789870262146 - -0.1780409961938858 - <_> - - <_> - - - - <_>14 12 10 6 -1. - <_>14 14 10 2 3. - 0 - -0.0158799998462200 - -0.4648410081863403 - 0.1882860064506531 - <_> - - <_> - - - - <_>0 11 4 10 -1. - <_>0 16 4 5 2. - 0 - 0.0741280019283295 - -0.1285810023546219 - 3.2792479991912842 - <_> - - <_> - - - - <_>1 10 22 3 -1. - <_>1 11 22 1 3. - 0 - -8.9000002481043339e-004 - -0.3011760115623474 - 0.2381879985332489 - <_> - - <_> - - - - <_>8 9 6 10 -1. - <_>10 9 2 10 3. - 0 - 0.0179650001227856 - -0.2228499948978424 - 0.2995400130748749 - <_> - - <_> - - - - <_>13 2 6 12 -1. - <_>16 2 3 6 2. - <_>13 8 3 6 2. - 0 - -2.5380000006407499e-003 - 0.2506439983844757 - -0.1366560012102127 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>10 6 2 9 2. - <_>12 15 2 9 2. - 0 - -9.0680001303553581e-003 - 0.2901749908924103 - -0.2892970144748688 - <_> - - <_> - - - - <_>7 8 10 16 -1. - <_>12 8 5 8 2. - <_>7 16 5 8 2. - 0 - 0.0491699986159801 - 0.1915639936923981 - -0.6832870244979858 - <_> - - <_> - - - - <_>8 1 8 12 -1. - <_>8 1 4 6 2. - <_>12 7 4 6 2. - 0 - -0.0306809991598129 - -0.7567700147628784 - -0.0132799996063113 - <_> - - <_> - - - - <_>7 1 12 14 -1. - <_>13 1 6 7 2. - <_>7 8 6 7 2. - 0 - 0.1001740023493767 - 0.0844539999961853 - 1.0888710021972656 - <_> - - <_> - - - - <_>2 14 12 6 -1. - <_>2 16 12 2 3. - 0 - 3.1950001139193773e-003 - -0.2691940069198608 - 0.1953790038824081 - <_> - - <_> - - - - <_>11 16 6 6 -1. - <_>11 19 6 3 2. - 0 - 0.0355030000209808 - 0.1363230049610138 - -0.5691720247268677 - <_> - - <_> - - - - <_>7 16 6 6 -1. - <_>7 19 6 3 2. - 0 - 4.5900000259280205e-004 - -0.4044399857521057 - 0.1407479941844940 - <_> - - <_> - - - - <_>13 4 4 10 -1. - <_>13 4 2 10 2. - 0 - 0.0252589993178844 - 0.1624320000410080 - -0.5574179887771606 - <_> - - <_> - - - - <_>0 19 19 3 -1. - <_>0 20 19 1 3. - 0 - -5.1549999043345451e-003 - 0.3113259971141815 - -0.2275609970092773 - <_> - - <_> - - - - <_>12 8 6 8 -1. - <_>12 12 6 4 2. - 0 - 1.5869999770075083e-003 - -0.2686769962310791 - 0.1956540048122406 - <_> - - <_> - - - - <_>8 1 8 22 -1. - <_>8 12 8 11 2. - 0 - -0.0162049997597933 - 0.1548649966716766 - -0.3405779898166657 - <_> - - <_> - - - - <_>12 8 6 8 -1. - <_>12 12 6 4 2. - 0 - -0.0296240001916885 - 1.1466799974441528 - 0.0905579999089241 - <_> - - <_> - - - - <_>6 8 6 8 -1. - <_>6 12 6 4 2. - 0 - -1.5930000226944685e-003 - -0.7125750184059143 - -7.0400000549852848e-004 - <_> - - <_> - - - - <_>14 5 6 9 -1. - <_>14 8 6 3 3. - 0 - -0.0540190003812313 - 0.4153749942779541 - 0.0272460002452135 - <_> - - <_> - - - - <_>0 6 24 4 -1. - <_>0 8 24 2 2. - 0 - -0.0662110000848770 - -1.3340090513229370 - -0.0473529994487762 - <_> - - <_> - - - - <_>14 12 10 6 -1. - <_>14 14 10 2 3. - 0 - 0.0279409997165203 - 0.1444630026817322 - -0.5151839852333069 - <_> - - <_> - - - - <_>0 12 10 6 -1. - <_>0 14 10 2 3. - 0 - 0.0289570000022650 - -0.0499660000205040 - -1.1929039955139160 - <_> - - <_> - - - - <_>4 6 19 3 -1. - <_>4 7 19 1 3. - 0 - -0.0204249992966652 - 0.6388130187988281 - 0.0381410010159016 - <_> - - <_> - - - - <_>1 6 19 3 -1. - <_>1 7 19 1 3. - 0 - 0.0124169997870922 - -0.2154700011014938 - 0.4947769939899445 - -3.2772979736328125 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>4 0 16 9 -1. - <_>4 3 16 3 3. - 0 - 0.0432740002870560 - -0.8049439787864685 - 0.3989729881286621 - <_> - - <_> - - - - <_>0 1 24 5 -1. - <_>8 1 8 5 3. - 0 - 0.1861550062894821 - -0.3165529966354370 - 0.6887729763984680 - <_> - - <_> - - - - <_>3 6 6 15 -1. - <_>3 11 6 5 3. - 0 - 0.0318609997630119 - -0.6426619887351990 - 0.2555089890956879 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0140220001339912 - -0.4592660069465637 - 0.3117119967937470 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -6.3029997982084751e-003 - 0.4602690041065216 - -0.2743850052356720 - <_> - - <_> - - - - <_>6 22 18 2 -1. - <_>6 23 18 1 2. - 0 - -5.4310001432895660e-003 - 0.3660860061645508 - -0.2720580101013184 - <_> - - <_> - - - - <_>2 12 6 9 -1. - <_>2 15 6 3 3. - 0 - 0.0168229993432760 - 0.0234769992530346 - -0.8844379782676697 - <_> - - <_> - - - - <_>18 12 6 9 -1. - <_>18 15 6 3 3. - 0 - 0.0260390006005764 - 0.1748879998922348 - -0.5456470251083374 - <_> - - <_> - - - - <_>0 12 6 9 -1. - <_>0 15 6 3 3. - 0 - -0.0267200004309416 - -0.9639649987220764 - 0.0235249996185303 - <_> - - <_> - - - - <_>11 14 4 10 -1. - <_>11 19 4 5 2. - 0 - -0.0170419998466969 - -0.7084879875183106 - 0.2146809995174408 - <_> - - <_> - - - - <_>9 6 6 16 -1. - <_>9 14 6 8 2. - 0 - 5.9569999575614929e-003 - 0.0736010000109673 - -0.6822559833526611 - <_> - - <_> - - - - <_>7 7 10 10 -1. - <_>7 12 10 5 2. - 0 - -2.8679999522864819e-003 - -0.7493500113487244 - 0.2380339950323105 - <_> - - <_> - - - - <_>1 3 6 13 -1. - <_>3 3 2 13 3. - 0 - -0.0437749996781349 - 0.6832330226898193 - -0.2138029932975769 - <_> - - <_> - - - - <_>18 1 6 13 -1. - <_>18 1 3 13 2. - 0 - 0.0516330003738403 - -0.1256649941205978 - 0.6752380132675171 - <_> - - <_> - - - - <_>5 1 6 9 -1. - <_>7 1 2 9 3. - 0 - 8.1780003383755684e-003 - 0.0706899985671043 - -0.8066589832305908 - <_> - - <_> - - - - <_>18 2 6 11 -1. - <_>18 2 3 11 2. - 0 - -0.0528419986367226 - 0.9543390274047852 - 0.0165480002760887 - <_> - - <_> - - - - <_>0 2 6 11 -1. - <_>3 2 3 11 2. - 0 - 0.0525839999318123 - -0.2841440141201019 - 0.4712980091571808 - <_> - - <_> - - - - <_>9 12 15 6 -1. - <_>9 14 15 2 3. - 0 - -0.0126590002328157 - 0.3844540119171143 - -0.0622880011796951 - <_> - - <_> - - - - <_>2 2 20 3 -1. - <_>2 3 20 1 3. - 0 - 0.0116940001025796 - 5.6000000768108293e-005 - -1.0173139572143555 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>10 6 2 9 2. - 0 - -0.0239189993590117 - 0.8492130041122437 - 5.7399999350309372e-003 - <_> - - <_> - - - - <_>5 6 12 14 -1. - <_>5 6 6 7 2. - <_>11 13 6 7 2. - 0 - -0.0616739988327026 - -0.9257140159606934 - -1.7679999582469463e-003 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - -1.8279999494552612e-003 - -0.5437229871749878 - 0.2493239939212799 - <_> - - <_> - - - - <_>7 0 9 6 -1. - <_>10 0 3 6 3. - 0 - 0.0352579988539219 - -7.3719997890293598e-003 - -0.9396399855613709 - <_> - - <_> - - - - <_>10 6 6 9 -1. - <_>12 6 2 9 3. - 0 - -0.0184380002319813 - 0.7213670015335083 - 0.0104919997975230 - <_> - - <_> - - - - <_>4 1 12 20 -1. - <_>4 1 6 10 2. - <_>10 11 6 10 2. - 0 - -0.0383890010416508 - 0.1927260011434555 - -0.3583210110664368 - <_> - - <_> - - - - <_>6 7 18 3 -1. - <_>6 7 9 3 2. - 0 - 0.0997209995985031 - 0.1135419979691505 - -1.6304190158843994 - <_> - - <_> - - - - <_>0 7 18 3 -1. - <_>9 7 9 3 2. - 0 - 0.0844620019197464 - -0.0534209981560707 - -1.6981120109558105 - <_> - - <_> - - - - <_>3 20 18 3 -1. - <_>9 20 6 3 3. - 0 - 0.0402700006961823 - -0.1078319996595383 - 0.5192660093307495 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0589359998703003 - -0.1805370002985001 - 0.9511979818344116 - <_> - - <_> - - - - <_>6 2 12 15 -1. - <_>10 2 4 15 3. - 0 - 0.1495700031518936 - 0.1678529977798462 - -1.1591869592666626 - <_> - - <_> - - - - <_>2 3 18 3 -1. - <_>2 4 18 1 3. - 0 - 6.9399998756125569e-004 - 0.2049140036106110 - -0.3311820030212402 - <_> - - <_> - - - - <_>19 4 4 18 -1. - <_>21 4 2 9 2. - <_>19 13 2 9 2. - 0 - -0.0333690010011196 - 0.9346809983253479 - -2.9639999847859144e-003 - <_> - - <_> - - - - <_>0 1 19 3 -1. - <_>0 2 19 1 3. - 0 - 9.3759996816515923e-003 - 3.7000000011175871e-003 - -0.7754979729652405 - <_> - - <_> - - - - <_>5 0 15 4 -1. - <_>5 2 15 2 2. - 0 - 0.0431939996778965 - -2.2040000185370445e-003 - 0.7458969950675964 - <_> - - <_> - - - - <_>5 2 14 5 -1. - <_>12 2 7 5 2. - 0 - -0.0675550028681755 - 0.7229210138320923 - -0.1840420067310333 - <_> - - <_> - - - - <_>1 2 22 14 -1. - <_>1 2 11 14 2. - 0 - -0.3116860091686249 - 1.0014270544052124 - 0.0340030007064343 - <_> - - <_> - - - - <_>8 15 6 9 -1. - <_>10 15 2 9 3. - 0 - 0.0297439992427826 - -0.0463560000061989 - -1.2781809568405151 - <_> - - <_> - - - - <_>6 17 18 3 -1. - <_>6 18 18 1 3. - 0 - 0.0107370000332594 - 0.0148120000958443 - 0.6664999723434448 - <_> - - <_> - - - - <_>9 6 3 18 -1. - <_>9 12 3 6 3. - 0 - -0.0288410000503063 - -0.9422259926795960 - -0.0207969993352890 - <_> - - <_> - - - - <_>2 0 20 3 -1. - <_>2 1 20 1 3. - 0 - -5.7649998925626278e-003 - -0.4354189932346344 - 0.2338600009679794 - <_> - - <_> - - - - <_>5 4 5 12 -1. - <_>5 8 5 4 3. - 0 - 0.0284109991043806 - -0.1761579960584641 - 0.8576530218124390 - <_> - - <_> - - - - <_>8 6 12 5 -1. - <_>12 6 4 5 3. - 0 - -0.0290079992264509 - 0.5797809958457947 - 0.0285659991204739 - <_> - - <_> - - - - <_>9 12 6 12 -1. - <_>9 12 3 6 2. - <_>12 18 3 6 2. - 0 - 0.0249659996479750 - -0.0227290000766516 - -0.9677309989929199 - <_> - - <_> - - - - <_>14 14 8 10 -1. - <_>18 14 4 5 2. - <_>14 19 4 5 2. - 0 - 0.0120360003784299 - -0.1421470046043396 - 0.5168799757957459 - <_> - - <_> - - - - <_>2 14 8 10 -1. - <_>2 14 4 5 2. - <_>6 19 4 5 2. - 0 - -0.0425140000879765 - 0.9727380275726318 - -0.1811980009078980 - <_> - - <_> - - - - <_>10 18 12 6 -1. - <_>16 18 6 3 2. - <_>10 21 6 3 2. - 0 - 0.0102760000154376 - -0.0830999985337257 - 0.3176279962062836 - <_> - - <_> - - - - <_>1 3 6 9 -1. - <_>1 6 6 3 3. - 0 - -0.0691919997334480 - -2.0668580532073975 - -0.0601739995181561 - <_> - - <_> - - - - <_>11 3 3 20 -1. - <_>12 3 1 20 3. - 0 - -4.6769999898970127e-003 - 0.4413180053234100 - 0.0232090000063181 - <_> - - <_> - - - - <_>4 6 14 6 -1. - <_>4 6 7 3 2. - <_>11 9 7 3 2. - 0 - -0.0139239998534322 - 0.2860670089721680 - -0.2915270030498505 - <_> - - <_> - - - - <_>6 5 12 13 -1. - <_>10 5 4 13 3. - 0 - -0.0153339998796582 - -0.5741450190544128 - 0.2306330054998398 - <_> - - <_> - - - - <_>5 4 4 15 -1. - <_>5 9 4 5 3. - 0 - -0.0102390004321933 - 0.3447920083999634 - -0.2608039975166321 - <_> - - <_> - - - - <_>9 16 15 4 -1. - <_>14 16 5 4 3. - 0 - -0.0509889982640743 - 0.5615410208702087 - 0.0612189993262291 - <_> - - <_> - - - - <_>7 8 6 14 -1. - <_>7 8 3 7 2. - <_>10 15 3 7 2. - 0 - 0.0306899994611740 - -0.1477279961109161 - 1.6378489732742310 - <_> - - <_> - - - - <_>7 6 10 6 -1. - <_>7 8 10 2 3. - 0 - -0.0112239997833967 - 0.2400619983673096 - -0.4486489892005920 - <_> - - <_> - - - - <_>2 5 18 3 -1. - <_>2 6 18 1 3. - 0 - -6.2899999320507050e-003 - 0.4311949908733368 - -0.2380899935960770 - <_> - - <_> - - - - <_>5 1 15 8 -1. - <_>5 5 15 4 2. - 0 - 0.0785909965634346 - 0.0198650006204844 - 0.8085380196571350 - <_> - - <_> - - - - <_>7 1 8 18 -1. - <_>7 10 8 9 2. - 0 - -0.0101789999753237 - 0.1819320023059845 - -0.3287779986858368 - <_> - - <_> - - - - <_>0 10 24 3 -1. - <_>0 11 24 1 3. - 0 - 0.0312270000576973 - 0.1497389972209930 - -1.4180339574813843 - <_> - - <_> - - - - <_>0 2 6 13 -1. - <_>2 2 2 13 3. - 0 - 0.0401969999074936 - -0.1976049989461899 - 0.5850819945335388 - <_> - - <_> - - - - <_>16 0 8 10 -1. - <_>20 0 4 5 2. - <_>16 5 4 5 2. - 0 - 0.0161380004137754 - 5.0000002374872565e-004 - 0.3905000090599060 - <_> - - <_> - - - - <_>5 1 10 9 -1. - <_>5 4 10 3 3. - 0 - -0.0455190017819405 - 1.2646820545196533 - -0.1563259959220886 - <_> - - <_> - - - - <_>5 6 18 3 -1. - <_>5 7 18 1 3. - 0 - -0.0181300006806850 - 0.6514850258827210 - 0.0102359997108579 - <_> - - <_> - - - - <_>0 1 24 3 -1. - <_>0 2 24 1 3. - 0 - -0.0140019999817014 - -1.0344820022583008 - -0.0321829989552498 - <_> - - <_> - - - - <_>11 4 6 11 -1. - <_>13 4 2 11 3. - 0 - -0.0388160012662411 - -0.4787429869174957 - 0.1629070043563843 - <_> - - <_> - - - - <_>0 0 8 10 -1. - <_>0 0 4 5 2. - <_>4 5 4 5 2. - 0 - 0.0316560007631779 - -0.2098339945077896 - 0.5457590222358704 - <_> - - <_> - - - - <_>4 16 18 3 -1. - <_>4 17 18 1 3. - 0 - -0.0108399996533990 - 0.5189880132675171 - -0.0150800002738833 - <_> - - <_> - - - - <_>2 16 18 3 -1. - <_>2 17 18 1 3. - 0 - 0.0120329996570945 - -0.2110760062932968 - 0.7593700289726257 - <_> - - <_> - - - - <_>3 0 18 10 -1. - <_>12 0 9 5 2. - <_>3 5 9 5 2. - 0 - 0.0707729980349541 - 0.1804880052804947 - -0.7404850125312805 - <_> - - <_> - - - - <_>2 3 20 21 -1. - <_>12 3 10 21 2. - 0 - 0.5313979983329773 - -0.1449169963598251 - 1.5360039472579956 - <_> - - <_> - - - - <_>6 7 14 3 -1. - <_>6 7 7 3 2. - 0 - -0.0147740002721548 - -0.2815369963645935 - 0.2040729969739914 - <_> - - <_> - - - - <_>0 9 12 6 -1. - <_>0 9 6 3 2. - <_>6 12 6 3 2. - 0 - -2.2410000674426556e-003 - -0.4487630128860474 - 0.0539890006184578 - <_> - - <_> - - - - <_>3 14 21 4 -1. - <_>10 14 7 4 3. - 0 - 0.0499680005013943 - 0.0415140017867088 - 0.2941710054874420 - <_> - - <_> - - - - <_>0 14 21 4 -1. - <_>7 14 7 4 3. - 0 - -0.0477019995450974 - 0.3967429995536804 - -0.2830179929733276 - <_> - - <_> - - - - <_>5 21 18 3 -1. - <_>11 21 6 3 3. - 0 - -0.0913110002875328 - 2.1994259357452393 - 0.0879649966955185 - <_> - - <_> - - - - <_>1 21 18 3 -1. - <_>7 21 6 3 3. - 0 - 0.0380700007081032 - -0.2802560031414032 - 0.2515619993209839 - <_> - - <_> - - - - <_>19 4 4 18 -1. - <_>21 4 2 9 2. - <_>19 13 2 9 2. - 0 - -0.0155389998108149 - 0.3415749967098236 - 0.0179249998182058 - <_> - - <_> - - - - <_>3 7 18 3 -1. - <_>3 8 18 1 3. - 0 - -0.0154459998011589 - 0.2868019938468933 - -0.2513589859008789 - <_> - - <_> - - - - <_>19 4 4 18 -1. - <_>21 4 2 9 2. - <_>19 13 2 9 2. - 0 - -0.0573880001902580 - 0.6383000016212463 - 0.0885979980230331 - <_> - - <_> - - - - <_>7 15 10 6 -1. - <_>7 17 10 2 3. - 0 - -5.9440000914037228e-003 - 0.0790169984102249 - -0.4077489972114563 - <_> - - <_> - - - - <_>9 13 11 9 -1. - <_>9 16 11 3 3. - 0 - -0.0699689984321594 - -0.4464420080184937 - 0.1721960008144379 - <_> - - <_> - - - - <_>0 6 4 10 -1. - <_>0 11 4 5 2. - 0 - -0.0250649992376566 - -0.9827020168304443 - -0.0353880003094673 - <_> - - <_> - - - - <_>15 16 9 6 -1. - <_>15 18 9 2 3. - 0 - 0.0172160007059574 - 0.2270590066909790 - -0.8055009841918945 - <_> - - <_> - - - - <_>1 5 4 18 -1. - <_>1 5 2 9 2. - <_>3 14 2 9 2. - 0 - -0.0442790016531944 - 0.8395199775695801 - -0.1742960065603256 - <_> - - <_> - - - - <_>9 8 8 10 -1. - <_>13 8 4 5 2. - <_>9 13 4 5 2. - 0 - 0.0439889989793301 - 0.1155719980597496 - -1.9666889905929565 - <_> - - <_> - - - - <_>7 8 8 10 -1. - <_>7 8 4 5 2. - <_>11 13 4 5 2. - 0 - 0.0159070007503033 - -0.0375760011374950 - -1.0311100482940674 - <_> - - <_> - - - - <_>9 8 12 5 -1. - <_>13 8 4 5 3. - 0 - -0.0927549973130226 - -1.3530019521713257 - 0.1214129999279976 - <_> - - <_> - - - - <_>7 8 9 7 -1. - <_>10 8 3 7 3. - 0 - 0.0710370019078255 - -0.1768430024385452 - 0.7448520064353943 - <_> - - <_> - - - - <_>9 8 12 5 -1. - <_>13 8 4 5 3. - 0 - 0.0577620007097721 - 0.1283559948205948 - -0.4444420039653778 - <_> - - <_> - - - - <_>7 6 9 7 -1. - <_>10 6 3 7 3. - 0 - -0.0164320003241301 - 0.8015270233154297 - -0.1749169975519180 - <_> - - <_> - - - - <_>9 8 12 5 -1. - <_>13 8 4 5 3. - 0 - 0.0239390004426241 - 0.1614499986171722 - -0.1236450001597405 - <_> - - <_> - - - - <_>10 5 4 18 -1. - <_>10 11 4 6 3. - 0 - 0.0126360002905130 - 0.1541199982166290 - -0.3329379856586456 - <_> - - <_> - - - - <_>5 5 14 12 -1. - <_>5 11 14 6 2. - 0 - -0.0543479993939400 - -1.8400700092315674 - 0.1483599990606308 - <_> - - <_> - - - - <_>0 1 11 4 -1. - <_>0 3 11 2 2. - 0 - -0.0132619999349117 - -0.8083879947662354 - -0.0277260001748800 - <_> - - <_> - - - - <_>9 10 6 10 -1. - <_>11 10 2 10 3. - 0 - 6.1340001411736012e-003 - -0.1378500014543533 - 0.3285849988460541 - <_> - - <_> - - - - <_>2 17 11 6 -1. - <_>2 19 11 2 3. - 0 - 0.0289910007268190 - -0.0255169998854399 - -0.8338720202445984 - <_> - - <_> - - - - <_>15 16 9 6 -1. - <_>15 18 9 2 3. - 0 - -0.0219860002398491 - -0.7373999953269959 - 0.1788710057735443 - <_> - - <_> - - - - <_>1 10 18 2 -1. - <_>1 11 18 1 2. - 0 - 5.3269998170435429e-003 - -0.4544929862022400 - 0.0687910020351410 - <_> - - <_> - - - - <_>6 4 12 13 -1. - <_>10 4 4 13 3. - 0 - 0.0860479995608330 - 0.2100850045681000 - -0.3780890107154846 - <_> - - <_> - - - - <_>0 18 18 3 -1. - <_>0 19 18 1 3. - 0 - -8.5549997165799141e-003 - 0.4013499915599823 - -0.2107409983873367 - <_> - - <_> - - - - <_>6 18 18 3 -1. - <_>6 19 18 1 3. - 0 - 6.7790001630783081e-003 - -0.0216489993035793 - 0.4542149901390076 - <_> - - <_> - - - - <_>0 16 9 6 -1. - <_>0 18 9 2 3. - 0 - -6.3959998078644276e-003 - -0.4981859922409058 - 0.0759079977869987 - <_> - - <_> - - - - <_>13 15 9 6 -1. - <_>13 17 9 2 3. - 0 - 8.9469999074935913e-003 - 0.1785770058631897 - -0.2845489978790283 - <_> - - <_> - - - - <_>2 15 9 6 -1. - <_>2 17 9 2 3. - 0 - 3.2589999027550220e-003 - 0.0466249994933605 - -0.5520629882812500 - <_> - - <_> - - - - <_>13 1 6 16 -1. - <_>13 1 3 16 2. - 0 - 0.0414769984781742 - 0.1755049973726273 - -0.2070399969816208 - <_> - - <_> - - - - <_>5 1 6 16 -1. - <_>8 1 3 16 2. - 0 - -6.7449999041855335e-003 - -0.4639259874820709 - 0.0693039968609810 - <_> - - <_> - - - - <_>11 5 6 10 -1. - <_>13 5 2 10 3. - 0 - 0.0305649992078543 - 0.0517349988222122 - 0.7555050253868103 - <_> - - <_> - - - - <_>7 5 6 10 -1. - <_>9 5 2 10 3. - 0 - -7.4780001305043697e-003 - 0.1489389985799789 - -0.3190680146217346 - <_> - - <_> - - - - <_>10 0 6 24 -1. - <_>12 0 2 24 3. - 0 - 0.0890889987349510 - 0.1373880058526993 - -1.1379710435867310 - <_> - - <_> - - - - <_>3 4 4 20 -1. - <_>3 4 2 10 2. - <_>5 14 2 10 2. - 0 - 7.3230001144111156e-003 - -0.2882919907569885 - 0.1908860057592392 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>16 0 2 9 3. - 0 - -0.0182050000876188 - -0.3017860054969788 - 0.1679580062627792 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - -0.0258280001580715 - -0.9813799858093262 - -0.0198609996587038 - <_> - - <_> - - - - <_>4 5 18 5 -1. - <_>10 5 6 5 3. - 0 - 0.1093619987368584 - 0.0487900003790855 - 0.5311830043792725 - <_> - - <_> - - - - <_>5 6 6 9 -1. - <_>7 6 2 9 3. - 0 - -0.0114249996840954 - 0.2370599955320358 - -0.2792530059814453 - <_> - - <_> - - - - <_>7 2 15 8 -1. - <_>12 2 5 8 3. - 0 - -0.0575659982860088 - 0.4725539982318878 - 0.0651710033416748 - <_> - - <_> - - - - <_>2 2 15 8 -1. - <_>7 2 5 8 3. - 0 - 0.1027830019593239 - -0.2076510041952133 - 0.5094770193099976 - <_> - - <_> - - - - <_>10 0 4 9 -1. - <_>10 0 2 9 2. - 0 - 0.0270419996231794 - 0.1642120033502579 - -1.4508620500564575 - <_> - - <_> - - - - <_>3 4 6 12 -1. - <_>3 4 3 6 2. - <_>6 10 3 6 2. - 0 - -0.0136350002139807 - -0.5654389858245850 - 0.0237889997661114 - <_> - - <_> - - - - <_>16 0 8 18 -1. - <_>16 0 4 18 2. - 0 - -0.3215819895267487 - -3.5602829456329346 - 0.1180130019783974 - <_> - - <_> - - - - <_>0 0 8 18 -1. - <_>4 0 4 18 2. - 0 - 0.2045810073614121 - -0.0370160005986691 - -1.0225499868392944 - <_> - - <_> - - - - <_>0 7 24 6 -1. - <_>0 9 24 2 3. - 0 - -0.0703470036387444 - -0.5649189949035645 - 0.1852519959211350 - <_> - - <_> - - - - <_>4 7 14 3 -1. - <_>11 7 7 3 2. - 0 - 0.0378310009837151 - -0.0299019999802113 - -0.8292149901390076 - <_> - - <_> - - - - <_>10 8 8 15 -1. - <_>10 8 4 15 2. - 0 - -0.0702980011701584 - -0.5317230224609375 - 0.1443019956350327 - <_> - - <_> - - - - <_>7 0 10 14 -1. - <_>12 0 5 14 2. - 0 - 0.0632210001349449 - -0.2204120010137558 - 0.4795219898223877 - <_> - - <_> - - - - <_>13 10 8 10 -1. - <_>17 10 4 5 2. - <_>13 15 4 5 2. - 0 - 0.0363930016756058 - 0.1422269940376282 - -0.6119390130043030 - <_> - - <_> - - - - <_>3 0 4 9 -1. - <_>5 0 2 9 2. - 0 - 4.0099998004734516e-003 - -0.3456079959869385 - 0.1173869967460632 - <_> - - <_> - - - - <_>16 1 6 8 -1. - <_>16 1 3 8 2. - 0 - -0.0491060018539429 - 0.9598410129547119 - 0.0649349987506866 - <_> - - <_> - - - - <_>2 1 6 8 -1. - <_>5 1 3 8 2. - 0 - -0.0715830028057098 - 1.7385669946670532 - -0.1425289958715439 - <_> - - <_> - - - - <_>3 6 18 12 -1. - <_>3 10 18 4 3. - 0 - -0.0380089990794659 - 1.3872820138931274 - 0.0661880001425743 - <_> - - <_> - - - - <_>4 12 16 4 -1. - <_>4 14 16 2 2. - 0 - -3.1570000573992729e-003 - 0.0536770001053810 - -0.5404800176620483 - <_> - - <_> - - - - <_>4 9 16 15 -1. - <_>4 14 16 5 3. - 0 - 0.0194589998573065 - -0.0936200022697449 - 0.3913100063800812 - <_> - - <_> - - - - <_>3 10 8 10 -1. - <_>3 10 4 5 2. - <_>7 15 4 5 2. - 0 - 0.0112939998507500 - 0.0372239984571934 - -0.5425180196762085 - <_> - - <_> - - - - <_>8 18 16 6 -1. - <_>16 18 8 3 2. - <_>8 21 8 3 2. - 0 - -0.0334950014948845 - 0.9530789852142334 - 0.0376969985663891 - <_> - - <_> - - - - <_>2 16 12 5 -1. - <_>6 16 4 5 3. - 0 - 0.0920350030064583 - -0.1348839998245239 - 2.2897069454193115 - <_> - - <_> - - - - <_>14 14 9 4 -1. - <_>14 16 9 2 2. - 0 - 3.7529999390244484e-003 - 0.2282419949769974 - -0.5998370051383972 - <_> - - <_> - - - - <_>7 14 9 6 -1. - <_>7 16 9 2 3. - 0 - 0.0128480000421405 - -0.2200520038604736 - 0.3722189962863922 - <_> - - <_> - - - - <_>4 10 16 12 -1. - <_>4 14 16 4 3. - 0 - -0.1431619971990585 - 1.2855789661407471 - 0.0472370013594627 - <_> - - <_> - - - - <_>0 13 19 6 -1. - <_>0 15 19 2 3. - 0 - -0.0968799963593483 - -3.9550929069519043 - -0.0729039981961250 - <_> - - <_> - - - - <_>10 13 9 6 -1. - <_>10 15 9 2 3. - 0 - -8.8459998369216919e-003 - 0.3767499923706055 - -0.0464840009808540 - <_> - - <_> - - - - <_>5 0 3 23 -1. - <_>6 0 1 23 3. - 0 - 0.0159000009298325 - -0.0244570001959801 - -0.8003479838371277 - <_> - - <_> - - - - <_>0 8 24 6 -1. - <_>0 10 24 2 3. - 0 - 0.0703720003366470 - 0.1701900064945221 - -0.6306899785995483 - <_> - - <_> - - - - <_>0 5 5 12 -1. - <_>0 9 5 4 3. - 0 - -0.0379539988934994 - -0.9366719722747803 - -0.0412140004336834 - <_> - - <_> - - - - <_>3 0 19 18 -1. - <_>3 9 19 9 2. - 0 - 0.5159789919853210 - 0.1308059990406036 - -1.5802290439605713 - <_> - - <_> - - - - <_>9 11 6 12 -1. - <_>9 11 3 6 2. - <_>12 17 3 6 2. - 0 - -0.0328430011868477 - -1.1441620588302612 - -0.0491739995777607 - <_> - - <_> - - - - <_>0 5 24 8 -1. - <_>12 5 12 4 2. - <_>0 9 12 4 2. - 0 - -0.0363570004701614 - 0.4960640072822571 - -0.0344589985907078 - <_> - - <_> - - - - <_>6 18 9 4 -1. - <_>6 20 9 2 2. - 0 - 6.8080001510679722e-003 - -0.3099780082702637 - 0.1705480068922043 - <_> - - <_> - - - - <_>8 8 10 6 -1. - <_>8 10 10 2 3. - 0 - -0.0161140002310276 - -0.3790459930896759 - 0.1607899963855743 - <_> - - <_> - - - - <_>2 7 20 3 -1. - <_>2 8 20 1 3. - 0 - 8.4530003368854523e-003 - -0.1865549981594086 - 0.5636770129203796 - <_> - - <_> - - - - <_>12 0 7 20 -1. - <_>12 10 7 10 2. - 0 - -0.1375239938497543 - -0.5898990035057068 - 0.1174950003623962 - <_> - - <_> - - - - <_>5 0 7 20 -1. - <_>5 10 7 10 2. - 0 - 0.1768800020217896 - -0.1542489975690842 - 0.9291110038757324 - <_> - - <_> - - - - <_>14 2 2 18 -1. - <_>14 11 2 9 2. - 0 - 7.9309996217489243e-003 - 0.3219070136547089 - -0.1639260053634644 - <_> - - <_> - - - - <_>5 8 10 12 -1. - <_>10 8 5 12 2. - 0 - 0.1097180023789406 - -0.1587650030851364 - 1.0186259746551514 - <_> - - <_> - - - - <_>6 9 12 8 -1. - <_>12 9 6 4 2. - <_>6 13 6 4 2. - 0 - -0.0302930008620024 - 0.7558730244636536 - 0.0317949987947941 - <_> - - <_> - - - - <_>7 7 3 14 -1. - <_>7 14 3 7 2. - 0 - -0.0231180004775524 - -0.8845149874687195 - -9.5039997249841690e-003 - <_> - - <_> - - - - <_>11 2 12 16 -1. - <_>17 2 6 8 2. - <_>11 10 6 8 2. - 0 - -3.0900000128895044e-003 - 0.2383829951286316 - -0.1160620003938675 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -0.0333920009434223 - -1.8738139867782593 - -0.0685029998421669 - <_> - - <_> - - - - <_>13 14 9 4 -1. - <_>13 16 9 2 2. - 0 - 0.0131900003179908 - 0.1291989982128143 - -0.6751220226287842 - <_> - - <_> - - - - <_>0 12 22 4 -1. - <_>0 12 11 2 2. - <_>11 14 11 2 2. - 0 - 0.0146610001102090 - -0.0248290002346039 - -0.7439680099487305 - <_> - - <_> - - - - <_>1 12 22 6 -1. - <_>12 12 11 3 2. - <_>1 15 11 3 2. - 0 - -0.0132480002939701 - 0.4682019948959351 - -0.0241650007665157 - <_> - - <_> - - - - <_>6 6 9 6 -1. - <_>9 6 3 6 3. - 0 - -0.0162189994007349 - 0.4008379876613617 - -0.2125570029020309 - <_> - - <_> - - - - <_>10 0 4 9 -1. - <_>10 0 2 9 2. - 0 - -0.0290520004928112 - -1.5650019645690918 - 0.1437589973211289 - <_> - - <_> - - - - <_>3 8 18 7 -1. - <_>9 8 6 7 3. - 0 - -0.1015319973230362 - -1.9220689535140991 - -0.0695599988102913 - <_> - - <_> - - - - <_>0 6 24 6 -1. - <_>0 8 24 2 3. - 0 - 0.0377539992332459 - 0.1339679956436157 - -2.2639141082763672 - <_> - - <_> - - - - <_>0 11 24 10 -1. - <_>8 11 8 10 3. - 0 - -0.2855559885501862 - 1.0215270519256592 - -0.1523219943046570 - <_> - - <_> - - - - <_>3 3 18 21 -1. - <_>9 3 6 21 3. - 0 - 0.1536069959402084 - -0.0974090024828911 - 0.4166240096092224 - <_> - - <_> - - - - <_>7 12 4 10 -1. - <_>9 12 2 10 2. - 0 - -2.1199999901000410e-004 - 0.1127189993858337 - -0.4165399968624115 - <_> - - <_> - - - - <_>10 16 10 8 -1. - <_>15 16 5 4 2. - <_>10 20 5 4 2. - 0 - -0.0205979999154806 - 0.6054049730300903 - 0.0624679997563362 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - 0.0373539999127388 - -0.1891900002956390 - 0.4646469950675964 - <_> - - <_> - - - - <_>12 10 6 12 -1. - <_>15 10 3 6 2. - <_>12 16 3 6 2. - 0 - 0.0572750009596348 - 0.1156530007719994 - -1.3213009834289551 - <_> - - <_> - - - - <_>6 10 6 12 -1. - <_>6 10 3 6 2. - <_>9 16 3 6 2. - 0 - 5.1029999740421772e-003 - -0.2806150019168854 - 0.1931339949369431 - <_> - - <_> - - - - <_>16 12 6 12 -1. - <_>19 12 3 6 2. - <_>16 18 3 6 2. - 0 - -0.0546449981629848 - 0.7242850065231323 - 0.0754479989409447 - <_> - - <_> - - - - <_>2 12 6 12 -1. - <_>2 12 3 6 2. - <_>5 18 3 6 2. - 0 - 0.0253490004688501 - -0.1948180049657822 - 0.4603280127048492 - <_> - - <_> - - - - <_>10 15 6 9 -1. - <_>12 15 2 9 3. - 0 - 0.0243110004812479 - 0.1556410044431686 - -0.4991390109062195 - <_> - - <_> - - - - <_>8 15 6 9 -1. - <_>10 15 2 9 3. - 0 - 0.0359620004892349 - -0.0585730001330376 - -1.5418399572372437 - <_> - - <_> - - - - <_>14 20 10 4 -1. - <_>14 20 5 4 2. - 0 - -0.1000069975852966 - -1.6100039482116699 - 0.1145050004124641 - <_> - - <_> - - - - <_>0 20 10 4 -1. - <_>5 20 5 4 2. - 0 - 0.0844359993934631 - -0.0614069998264313 - -1.4673349857330322 - <_> - - <_> - - - - <_>11 17 9 6 -1. - <_>11 19 9 2 3. - 0 - 0.0159479994326830 - 0.1628790050745010 - -0.1102640032768250 - <_> - - <_> - - - - <_>3 2 14 4 -1. - <_>3 4 14 2 2. - 0 - 0.0338240005075932 - -0.1793269962072372 - 0.5721840262413025 - <_> - - <_> - - - - <_>10 1 10 4 -1. - <_>10 3 10 2 2. - 0 - -0.0619960017502308 - 4.6511812210083008 - 0.0945340022444725 - <_> - - <_> - - - - <_>0 15 10 4 -1. - <_>5 15 5 4 2. - 0 - 0.0698769986629486 - -0.1698590070009232 - 0.8702899813652039 - <_> - - <_> - - - - <_>19 2 3 19 -1. - <_>20 2 1 19 3. - 0 - -0.0279169995337725 - 0.9104250073432922 - 0.0568270012736321 - <_> - - <_> - - - - <_>4 12 9 8 -1. - <_>7 12 3 8 3. - 0 - -0.0127640003338456 - 0.2206670045852661 - -0.2776910066604614 - -3.3196411132812500 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>4 7 5 12 -1. - <_>4 11 5 4 3. - 0 - 0.0216620005667210 - -0.8986889719963074 - 0.2943629920482636 - <_> - - <_> - - - - <_>0 1 24 3 -1. - <_>8 1 8 3 3. - 0 - 0.1004450023174286 - -0.3765920102596283 - 0.6089100241661072 - <_> - - <_> - - - - <_>6 8 12 4 -1. - <_>6 10 12 2 2. - 0 - 0.0260039996355772 - -0.3812850117683411 - 0.3921740055084229 - <_> - - <_> - - - - <_>19 3 4 10 -1. - <_>19 3 2 10 2. - 0 - 0.0284410007297993 - -0.1818230003118515 - 0.5892720222473145 - <_> - - <_> - - - - <_>0 6 9 6 -1. - <_>3 6 3 6 3. - 0 - 0.0386120006442070 - -0.2239959985017777 - 0.6377999782562256 - <_> - - <_> - - - - <_>18 0 6 22 -1. - <_>20 0 2 22 3. - 0 - -0.0465949997305870 - 0.7081220149993897 - -0.1466619968414307 - <_> - - <_> - - - - <_>0 0 6 22 -1. - <_>2 0 2 22 3. - 0 - -0.0427919998764992 - 0.4768039882183075 - -0.2923319935798645 - <_> - - <_> - - - - <_>5 15 19 3 -1. - <_>5 16 19 1 3. - 0 - 3.7960000336170197e-003 - -0.1851029992103577 - 0.5262669920921326 - <_> - - <_> - - - - <_>10 7 4 15 -1. - <_>10 12 4 5 3. - 0 - 0.0423489995300770 - 0.0392449982464314 - -0.8919770121574402 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0195989999920130 - -0.2335840016603470 - 0.4414649903774262 - <_> - - <_> - - - - <_>0 21 18 3 -1. - <_>0 22 18 1 3. - 0 - 8.7400001939386129e-004 - -0.4606359899044037 - 0.1768960058689117 - <_> - - <_> - - - - <_>7 3 10 15 -1. - <_>7 8 10 5 3. - 0 - -4.3629999272525311e-003 - 0.3349319994449616 - -0.2989340126514435 - <_> - - <_> - - - - <_>1 7 18 3 -1. - <_>1 8 18 1 3. - 0 - 0.0169730000197887 - -0.1640869975090027 - 1.5993679761886597 - <_> - - <_> - - - - <_>8 2 9 6 -1. - <_>11 2 3 6 3. - 0 - 0.0360639989376068 - 0.2260169982910156 - -0.5318610072135925 - <_> - - <_> - - - - <_>0 10 24 14 -1. - <_>0 17 24 7 2. - 0 - -0.0708649978041649 - 0.1522050052881241 - -0.4191460013389587 - <_> - - <_> - - - - <_>13 9 8 10 -1. - <_>17 9 4 5 2. - <_>13 14 4 5 2. - 0 - -0.0630759969353676 - -1.4874019622802734 - 0.1295370012521744 - <_> - - <_> - - - - <_>10 5 4 9 -1. - <_>12 5 2 9 2. - 0 - 0.0296700000762939 - -0.1914590001106262 - 0.9818490147590637 - <_> - - <_> - - - - <_>13 9 8 10 -1. - <_>17 9 4 5 2. - <_>13 14 4 5 2. - 0 - 0.0378739982843399 - 0.1345950067043304 - -0.5631629824638367 - <_> - - <_> - - - - <_>7 11 10 10 -1. - <_>7 11 5 5 2. - <_>12 16 5 5 2. - 0 - -0.0332890003919601 - -1.0828030109405518 - -0.0115040000528097 - <_> - - <_> - - - - <_>4 13 18 4 -1. - <_>13 13 9 2 2. - <_>4 15 9 2 2. - 0 - -0.0316089987754822 - -0.5922449827194214 - 0.1339479982852936 - <_> - - <_> - - - - <_>0 0 19 2 -1. - <_>0 1 19 1 2. - 0 - 1.0740000288933516e-003 - -0.4918580055236816 - 0.0944460034370422 - <_> - - <_> - - - - <_>0 18 24 6 -1. - <_>8 18 8 6 3. - 0 - -0.0715560019016266 - 0.5971019864082336 - -0.0395530015230179 - <_> - - <_> - - - - <_>6 4 8 16 -1. - <_>6 12 8 8 2. - 0 - -0.0811700001358986 - -1.1817820072174072 - -0.0282540004700422 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 10 10 2 2. - 0 - 4.4860001653432846e-003 - -0.6102809906005859 - 0.2261909991502762 - <_> - - <_> - - - - <_>0 3 6 9 -1. - <_>0 6 6 3 3. - 0 - -0.0421760007739067 - -1.1435619592666626 - -0.0290019996464252 - <_> - - <_> - - - - <_>13 15 7 9 -1. - <_>13 18 7 3 3. - 0 - -0.0656400024890900 - -1.6470279693603516 - 0.1281030029058456 - <_> - - <_> - - - - <_>3 18 12 6 -1. - <_>3 18 6 3 2. - <_>9 21 6 3 2. - 0 - 0.0181889999657869 - -0.3114939928054810 - 0.2573960125446320 - <_> - - <_> - - - - <_>12 14 6 9 -1. - <_>12 17 6 3 3. - 0 - -0.0515200011432171 - -0.6920689940452576 - 0.1527079939842224 - <_> - - <_> - - - - <_>2 15 15 8 -1. - <_>2 19 15 4 2. - 0 - -0.0471509993076324 - -0.7186830043792725 - 2.6879999786615372e-003 - <_> - - <_> - - - - <_>9 6 6 16 -1. - <_>9 14 6 8 2. - 0 - 0.0174889992922544 - 0.2237119972705841 - -0.5538179874420166 - <_> - - <_> - - - - <_>6 6 7 12 -1. - <_>6 10 7 4 3. - 0 - -0.0252640005201101 - 1.0319819450378418 - -0.1749649941921234 - <_> - - <_> - - - - <_>14 6 6 9 -1. - <_>14 9 6 3 3. - 0 - -0.0407450012862682 - 0.4496159851551056 - 0.0393490009009838 - <_> - - <_> - - - - <_>5 14 6 9 -1. - <_>5 17 6 3 3. - 0 - -0.0376669988036156 - -0.8547570109367371 - -0.0124639999121428 - <_> - - <_> - - - - <_>10 8 6 9 -1. - <_>12 8 2 9 3. - 0 - -0.0134110003709793 - 0.5784559845924377 - -0.0174679998308420 - <_> - - <_> - - - - <_>6 6 4 18 -1. - <_>6 6 2 9 2. - <_>8 15 2 9 2. - 0 - -7.8999997640494257e-005 - -0.3774920105934143 - 0.1396179944276810 - <_> - - <_> - - - - <_>14 9 6 12 -1. - <_>17 9 3 6 2. - <_>14 15 3 6 2. - 0 - -0.0114150000736117 - -0.2618660032749176 - 0.2371249943971634 - <_> - - <_> - - - - <_>4 9 6 12 -1. - <_>4 9 3 6 2. - <_>7 15 3 6 2. - 0 - 0.0372000001370907 - -0.0286260005086660 - -1.2945239543914795 - <_> - - <_> - - - - <_>14 15 9 6 -1. - <_>14 17 9 2 3. - 0 - 3.4050000831484795e-003 - 0.2053139954805374 - -0.1874749958515167 - <_> - - <_> - - - - <_>0 20 18 4 -1. - <_>0 20 9 2 2. - <_>9 22 9 2 2. - 0 - -0.0224830005317926 - 0.6702719926834106 - -0.1959400027990341 - <_> - - <_> - - - - <_>13 18 9 6 -1. - <_>13 20 9 2 3. - 0 - 0.0232749991118908 - 0.1740539968013763 - -0.3274630010128021 - <_> - - <_> - - - - <_>2 18 9 6 -1. - <_>2 20 9 2 3. - 0 - -0.0139170000329614 - -0.8395429849624634 - -6.3760001212358475e-003 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - 7.5429999269545078e-003 - -0.0341949984431267 - 0.5899819731712341 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - -0.0115390000864863 - 0.4214279949665070 - -0.2351049929857254 - <_> - - <_> - - - - <_>19 2 4 22 -1. - <_>21 2 2 11 2. - <_>19 13 2 11 2. - 0 - 0.0525019988417625 - 0.0693039968609810 - 0.7322649955749512 - <_> - - <_> - - - - <_>1 2 4 22 -1. - <_>1 2 2 11 2. - <_>3 13 2 11 2. - 0 - 0.0527159981429577 - -0.1568810045719147 - 1.0907289981842041 - <_> - - <_> - - - - <_>15 0 2 24 -1. - <_>15 0 1 24 2. - 0 - -0.0117260003462434 - -0.7093430161476135 - 0.1682880073785782 - <_> - - <_> - - - - <_>3 20 16 4 -1. - <_>11 20 8 4 2. - 0 - 0.0959459990262985 - -0.1619289964437485 - 1.0072519779205322 - <_> - - <_> - - - - <_>11 6 4 18 -1. - <_>13 6 2 9 2. - <_>11 15 2 9 2. - 0 - -0.0158719997853041 - 0.3900839984416962 - -0.0537770017981529 - <_> - - <_> - - - - <_>7 9 10 14 -1. - <_>7 9 5 7 2. - <_>12 16 5 7 2. - 0 - 0.0348180010914803 - 0.0171799995005131 - -0.9394180178642273 - <_> - - <_> - - - - <_>14 6 6 9 -1. - <_>14 9 6 3 3. - 0 - 0.0347919985651970 - 0.0504629984498024 - 0.5446569919586182 - <_> - - <_> - - - - <_>3 6 7 9 -1. - <_>3 9 7 3 3. - 0 - 0.0162840001285076 - -0.2698130011558533 - 0.4036529958248138 - <_> - - <_> - - - - <_>20 4 4 20 -1. - <_>22 4 2 10 2. - <_>20 14 2 10 2. - 0 - -0.0443190000951290 - 0.8439999818801880 - 0.0328829996287823 - <_> - - <_> - - - - <_>7 6 6 9 -1. - <_>7 9 6 3 3. - 0 - -5.5689997971057892e-003 - 0.1530939936637878 - -0.3495979905128479 - <_> - - <_> - - - - <_>7 0 10 14 -1. - <_>12 0 5 7 2. - <_>7 7 5 7 2. - 0 - -0.0658420026302338 - -0.9271119832992554 - 0.1680099964141846 - <_> - - <_> - - - - <_>2 1 18 6 -1. - <_>11 1 9 6 2. - 0 - -0.0733370035886765 - 0.5161449909210205 - -0.2023600041866303 - <_> - - <_> - - - - <_>15 0 2 24 -1. - <_>15 0 1 24 2. - 0 - 0.0164500009268522 - 0.1395059973001480 - -0.4930129945278168 - <_> - - <_> - - - - <_>7 0 2 24 -1. - <_>8 0 1 24 2. - 0 - -9.2630004510283470e-003 - -0.9010199904441834 - -0.0161160007119179 - <_> - - <_> - - - - <_>13 12 6 7 -1. - <_>13 12 3 7 2. - 0 - 5.9139998629689217e-003 - 0.1985819935798645 - -0.1673129945993424 - <_> - - <_> - - - - <_>5 12 6 7 -1. - <_>8 12 3 7 2. - 0 - -8.4699998842552304e-004 - 0.0940050035715103 - -0.4157089889049530 - <_> - - <_> - - - - <_>3 5 18 19 -1. - <_>9 5 6 19 3. - 0 - 0.2053290009498596 - -0.0600220002233982 - 0.7099360227584839 - <_> - - <_> - - - - <_>5 6 9 6 -1. - <_>8 6 3 6 3. - 0 - -0.0168830007314682 - 0.2439219951629639 - -0.3055180013179779 - <_> - - <_> - - - - <_>9 5 9 6 -1. - <_>12 5 3 6 3. - 0 - -0.0191110000014305 - 0.6122990250587463 - 0.0242529995739460 - <_> - - <_> - - - - <_>3 16 10 8 -1. - <_>3 16 5 4 2. - <_>8 20 5 4 2. - 0 - -0.0259629990905523 - 0.9076499938964844 - -0.1672209948301315 - <_> - - <_> - - - - <_>19 8 5 15 -1. - <_>19 13 5 5 3. - 0 - -0.0217620003968477 - -0.3138470053672791 - 0.2013459950685501 - <_> - - <_> - - - - <_>0 8 5 15 -1. - <_>0 13 5 5 3. - 0 - -0.0241199992597103 - -0.6658840179443359 - 7.4559999629855156e-003 - <_> - - <_> - - - - <_>20 4 4 20 -1. - <_>22 4 2 10 2. - <_>20 14 2 10 2. - 0 - 0.0471299998462200 - 0.0595339983701706 - 0.8780450224876404 - <_> - - <_> - - - - <_>0 4 4 20 -1. - <_>0 4 2 10 2. - <_>2 14 2 10 2. - 0 - -0.0459849983453751 - 0.8006799817085266 - -0.1725230067968369 - <_> - - <_> - - - - <_>7 7 10 4 -1. - <_>7 7 5 4 2. - 0 - 0.0265079997479916 - 0.1877409964799881 - -0.6085060238838196 - <_> - - <_> - - - - <_>4 19 14 4 -1. - <_>11 19 7 4 2. - 0 - -0.0486150011420250 - 0.5864409804344177 - -0.1942770034074783 - <_> - - <_> - - - - <_>10 11 12 3 -1. - <_>10 11 6 3 2. - 0 - -0.0185620002448559 - -0.2558790147304535 - 0.1632619947195053 - <_> - - <_> - - - - <_>0 1 24 3 -1. - <_>0 2 24 1 3. - 0 - 0.0126780001446605 - -0.0142280003055930 - -0.7673810124397278 - <_> - - <_> - - - - <_>7 2 14 20 -1. - <_>14 2 7 10 2. - <_>7 12 7 10 2. - 0 - -1.1919999960809946e-003 - 0.2049500048160553 - -0.1140429973602295 - <_> - - <_> - - - - <_>0 13 6 9 -1. - <_>2 13 2 9 3. - 0 - -0.0490889996290207 - -1.0740849971771240 - -0.0389409996569157 - <_> - - <_> - - - - <_>13 0 4 19 -1. - <_>13 0 2 19 2. - 0 - -0.0174369998276234 - -0.5797380208969116 - 0.1858450025320053 - <_> - - <_> - - - - <_>1 11 14 3 -1. - <_>8 11 7 3 2. - 0 - -0.0147700002416968 - -0.6615030169487000 - 5.3119999356567860e-003 - <_> - - <_> - - - - <_>7 1 16 20 -1. - <_>15 1 8 10 2. - <_>7 11 8 10 2. - 0 - -0.2290520071983337 - -0.4830510020256043 - 0.1232639998197556 - <_> - - <_> - - - - <_>0 10 21 9 -1. - <_>7 10 7 9 3. - 0 - -0.1270709931850433 - 0.5745260119438171 - -0.1942040026187897 - <_> - - <_> - - - - <_>6 19 15 5 -1. - <_>11 19 5 5 3. - 0 - 0.0103390002623200 - -0.0546419993042946 - 0.2450180053710938 - <_> - - <_> - - - - <_>8 10 6 6 -1. - <_>11 10 3 6 2. - 0 - 6.9010001607239246e-003 - 0.1218060031533241 - -0.3879739940166473 - <_> - - <_> - - - - <_>7 1 16 20 -1. - <_>15 1 8 10 2. - <_>7 11 8 10 2. - 0 - 0.2902539968490601 - 0.1096619963645935 - -30. - <_> - - <_> - - - - <_>1 1 16 20 -1. - <_>1 1 8 10 2. - <_>9 11 8 10 2. - 0 - -0.2380499988794327 - -1.7352679967880249 - -0.0638099983334541 - <_> - - <_> - - - - <_>16 4 3 12 -1. - <_>16 10 3 6 2. - 0 - 0.0624810010194778 - 0.1352300047874451 - -0.7030109763145447 - <_> - - <_> - - - - <_>5 4 3 12 -1. - <_>5 10 3 6 2. - 0 - 4.7109997831285000e-003 - -0.4698410034179688 - 0.0603419989347458 - <_> - - <_> - - - - <_>7 6 10 8 -1. - <_>12 6 5 4 2. - <_>7 10 5 4 2. - 0 - -0.0278159994632006 - 0.6980760097503662 - 1.3719999697059393e-003 - <_> - - <_> - - - - <_>4 9 6 6 -1. - <_>4 12 6 3 2. - 0 - -0.0170200001448393 - 1.6870440244674683 - -0.1431480050086975 - <_> - - <_> - - - - <_>6 5 12 4 -1. - <_>6 7 12 2 2. - 0 - -0.0497549995779991 - 0.7949770092964172 - 7.7199999941512942e-004 - <_> - - <_> - - - - <_>9 2 5 15 -1. - <_>9 7 5 5 3. - 0 - -0.0747329965233803 - -1.0132360458374023 - -0.0193889997899532 - <_> - - <_> - - - - <_>15 0 9 6 -1. - <_>15 2 9 2 3. - 0 - 0.0320090018212795 - 0.1441210061311722 - -0.4213910102844238 - <_> - - <_> - - - - <_>6 0 11 10 -1. - <_>6 5 11 5 2. - 0 - -0.0944639965891838 - 0.5068259835243225 - -0.2047889977693558 - <_> - - <_> - - - - <_>12 7 4 12 -1. - <_>12 13 4 6 2. - 0 - -0.0154269998893142 - -0.1581130027770996 - 0.1780689954757690 - <_> - - <_> - - - - <_>7 2 9 4 -1. - <_>7 4 9 2 2. - 0 - -4.0540001355111599e-003 - -0.5436670184135437 - 0.0312350001186132 - <_> - - <_> - - - - <_>6 0 13 6 -1. - <_>6 2 13 2 3. - 0 - 3.0080000869929790e-003 - -0.1737679988145828 - 0.3044170141220093 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>10 6 2 9 2. - <_>12 15 2 9 2. - 0 - -0.0100919995456934 - 0.2510380148887634 - -0.2622410058975220 - <_> - - <_> - - - - <_>10 8 6 9 -1. - <_>12 8 2 9 3. - 0 - -0.0388180017471313 - 0.9322670102119446 - 0.0726599991321564 - <_> - - <_> - - - - <_>3 18 10 6 -1. - <_>3 20 10 2 3. - 0 - 0.0346519984304905 - -0.0339349992573261 - -0.8570790290832520 - <_> - - <_> - - - - <_>4 14 20 3 -1. - <_>4 15 20 1 3. - 0 - -4.6729999594390392e-003 - 0.3496930003166199 - -0.0485179983079433 - <_> - - <_> - - - - <_>2 15 9 6 -1. - <_>2 17 9 2 3. - 0 - 6.8499997723847628e-004 - 0.0665730014443398 - -0.4497379958629608 - <_> - - <_> - - - - <_>13 0 4 19 -1. - <_>13 0 2 19 2. - 0 - 0.0353170000016689 - 0.1427579969167709 - -0.4672639966011047 - <_> - - <_> - - - - <_>7 0 4 19 -1. - <_>9 0 2 19 2. - 0 - -0.0235699992626905 - -1.0286079645156860 - -0.0452880002558231 - <_> - - <_> - - - - <_>1 4 22 2 -1. - <_>1 5 22 1 2. - 0 - -1.9109999993816018e-003 - -0.1965219974517822 - 0.2866100072860718 - <_> - - <_> - - - - <_>0 0 9 6 -1. - <_>0 2 9 2 3. - 0 - -0.0166590008884668 - -0.7753220200538635 - -8.3280000835657120e-003 - <_> - - <_> - - - - <_>0 0 24 18 -1. - <_>0 9 24 9 2. - 0 - 0.6606220006942749 - 0.1323249936103821 - -3.5266680717468262 - <_> - - <_> - - - - <_>3 2 16 8 -1. - <_>3 6 16 4 2. - 0 - 0.1097059994935989 - -0.1554719954729080 - 1.4674140214920044 - <_> - - <_> - - - - <_>3 6 18 6 -1. - <_>3 8 18 2 3. - 0 - 0.0135009996592999 - 0.1523340046405792 - -1.3020930290222168 - <_> - - <_> - - - - <_>3 1 6 10 -1. - <_>5 1 2 10 3. - 0 - -0.0228719990700483 - -0.7132599949836731 - -8.7040001526474953e-003 - <_> - - <_> - - - - <_>13 0 9 6 -1. - <_>16 0 3 6 3. - 0 - -0.0818210020661354 - 1.1127580404281616 - 0.0832199975848198 - <_> - - <_> - - - - <_>2 0 9 6 -1. - <_>5 0 3 6 3. - 0 - -0.0527280010282993 - 0.9316509962081909 - -0.1710399985313416 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0252420008182526 - -0.1973379999399185 - 0.2535940110683441 - <_> - - <_> - - - - <_>6 0 7 10 -1. - <_>6 5 7 5 2. - 0 - -0.0438189990818501 - 0.4181520044803619 - -0.2458550035953522 - <_> - - <_> - - - - <_>2 2 20 4 -1. - <_>12 2 10 2 2. - <_>2 4 10 2 2. - 0 - -0.0181889999657869 - -0.5174319744110107 - 0.2017419934272766 - <_> - - <_> - - - - <_>2 11 19 3 -1. - <_>2 12 19 1 3. - 0 - 0.0234660003334284 - -0.0430710017681122 - -1.0636579990386963 - <_> - - <_> - - - - <_>10 8 6 9 -1. - <_>12 8 2 9 3. - 0 - 0.0342160016298294 - 0.0537809990346432 - 0.4970720112323761 - <_> - - <_> - - - - <_>8 8 6 9 -1. - <_>10 8 2 9 3. - 0 - 0.0256929993629456 - -0.2380010038614273 - 0.4165149927139282 - <_> - - <_> - - - - <_>13 8 4 9 -1. - <_>13 8 2 9 2. - 0 - -0.0265650004148483 - -0.8857480287551880 - 0.1336590051651001 - <_> - - <_> - - - - <_>3 11 9 9 -1. - <_>6 11 3 9 3. - 0 - 0.0609420016407967 - -0.2066970020532608 - 0.5830900073051453 - <_> - - <_> - - - - <_>3 9 18 5 -1. - <_>9 9 6 5 3. - 0 - 0.1447450071573257 - 0.1328230053186417 - -3.1449348926544189 - <_> - - <_> - - - - <_>2 4 2 20 -1. - <_>2 14 2 10 2. - 0 - 0.0534109994769096 - -0.1732520014047623 - 0.6919069886207581 - <_> - - <_> - - - - <_>14 17 8 6 -1. - <_>14 20 8 3 2. - 0 - 0.0114080002531409 - 0.0548220016062260 - 0.3024039864540100 - <_> - - <_> - - - - <_>3 21 18 2 -1. - <_>3 22 18 1 2. - 0 - -2.3179999552667141e-003 - 0.1582089960575104 - -0.3197320103645325 - <_> - - <_> - - - - <_>5 4 15 6 -1. - <_>10 4 5 6 3. - 0 - -0.0296950004994869 - 0.7127479910850525 - 0.0581360012292862 - <_> - - <_> - - - - <_>2 15 12 6 -1. - <_>2 17 12 2 3. - 0 - 0.0272499993443489 - -0.1575410068035126 - 0.9214379787445068 - <_> - - <_> - - - - <_>17 8 6 9 -1. - <_>17 11 6 3 3. - 0 - -3.6200000904500484e-003 - -0.3454839885234833 - 0.2022099941968918 - <_> - - <_> - - - - <_>2 12 20 4 -1. - <_>2 12 10 2 2. - <_>12 14 10 2 2. - 0 - -0.0125789996236563 - -0.5565029978752136 - 0.0203889999538660 - <_> - - <_> - - - - <_>0 17 24 6 -1. - <_>0 19 24 2 3. - 0 - -0.0888490006327629 - -3.6100010871887207 - 0.1316419988870621 - <_> - - <_> - - - - <_>7 16 9 4 -1. - <_>7 18 9 2 2. - 0 - -0.0192569997161627 - 0.5190899968147278 - -0.1928430050611496 - <_> - - <_> - - - - <_>15 1 4 22 -1. - <_>17 1 2 11 2. - <_>15 12 2 11 2. - 0 - -0.0166669990867376 - -0.0874999985098839 - 0.1581249982118607 - <_> - - <_> - - - - <_>5 1 4 22 -1. - <_>5 1 2 11 2. - <_>7 12 2 11 2. - 0 - 0.0129319997504354 - 0.0274059996008873 - -0.5512390136718750 - <_> - - <_> - - - - <_>11 13 8 9 -1. - <_>11 16 8 3 3. - 0 - -0.0134319998323917 - 0.2345779985189438 - -0.0432350002229214 - <_> - - <_> - - - - <_>6 1 6 9 -1. - <_>8 1 2 9 3. - 0 - 0.0188100002706051 - -0.0396809987723827 - -0.9437329769134522 - <_> - - <_> - - - - <_>11 4 3 18 -1. - <_>11 10 3 6 3. - 0 - -6.4349998719990253e-003 - 0.4570370018482208 - -4.0520001202821732e-003 - <_> - - <_> - - - - <_>5 8 12 6 -1. - <_>5 8 6 3 2. - <_>11 11 6 3 2. - 0 - -0.0242490004748106 - -0.7624800205230713 - -0.0198570005595684 - <_> - - <_> - - - - <_>15 7 5 8 -1. - <_>15 11 5 4 2. - 0 - -0.0296679995954037 - -3.7412509918212891 - 0.1125060021877289 - <_> - - <_> - - - - <_>4 7 5 8 -1. - <_>4 11 5 4 2. - 0 - 5.1150000654160976e-003 - -0.6378179788589478 - 0.0112239997833967 - <_> - - <_> - - - - <_>12 6 6 12 -1. - <_>15 6 3 6 2. - <_>12 12 3 6 2. - 0 - -5.7819997891783714e-003 - 0.1937440037727356 - -0.0820420011878014 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>6 6 3 6 2. - <_>9 12 3 6 2. - 0 - 0.0166069995611906 - -0.1619209945201874 - 1.1334990262985229 - <_> - - <_> - - - - <_>5 9 14 8 -1. - <_>12 9 7 4 2. - <_>5 13 7 4 2. - 0 - 0.0382280014455318 - 0.0211050007492304 - 0.7626420259475708 - <_> - - <_> - - - - <_>9 1 3 14 -1. - <_>9 8 3 7 2. - 0 - -0.0570940002799034 - -1.6974929571151733 - -0.0597620010375977 - <_> - - <_> - - - - <_>12 6 6 12 -1. - <_>12 10 6 4 3. - 0 - -0.0538830012083054 - 1.1850190162658691 - 0.0909669995307922 - <_> - - <_> - - - - <_>4 5 4 18 -1. - <_>4 5 2 9 2. - <_>6 14 2 9 2. - 0 - -2.6110000908374786e-003 - -0.4094119966030121 - 0.0838209986686707 - <_> - - <_> - - - - <_>4 6 16 18 -1. - <_>4 12 16 6 3. - 0 - 0.2971439957618713 - 0.1552989929914475 - -1.0995409488677979 - <_> - - <_> - - - - <_>5 4 7 20 -1. - <_>5 14 7 10 2. - 0 - -0.0890630036592484 - 0.4894720017910004 - -0.2004120051860809 - <_> - - <_> - - - - <_>14 8 8 12 -1. - <_>14 14 8 6 2. - 0 - -0.0561930015683174 - -0.2458139955997467 - 0.1436550021171570 - <_> - - <_> - - - - <_>9 10 6 14 -1. - <_>9 10 3 7 2. - <_>12 17 3 7 2. - 0 - 0.0370049998164177 - -0.0481689982116222 - -1.2310709953308105 - <_> - - <_> - - - - <_>9 5 9 6 -1. - <_>12 5 3 6 3. - 0 - -8.4840003401041031e-003 - 0.4337260127067566 - 0.0137799996882677 - <_> - - <_> - - - - <_>9 4 3 18 -1. - <_>10 4 1 18 3. - 0 - -2.4379999376833439e-003 - 0.1894969940185547 - -0.3229419887065888 - <_> - - <_> - - - - <_>1 4 22 14 -1. - <_>12 4 11 7 2. - <_>1 11 11 7 2. - 0 - -0.0716399997472763 - -0.4397900104522705 - 0.2273019999265671 - <_> - - <_> - - - - <_>2 7 18 2 -1. - <_>2 8 18 1 2. - 0 - 5.2260002121329308e-003 - -0.2054840028285980 - 0.5093330144882202 - <_> - - <_> - - - - <_>12 6 6 12 -1. - <_>12 10 6 4 3. - 0 - -6.1360001564025879e-003 - 0.3115719854831696 - 0.0706809982657433 - <_> - - <_> - - - - <_>6 5 9 7 -1. - <_>9 5 3 7 3. - 0 - 0.0155950002372265 - -0.3093479871749878 - 0.1562770009040833 - <_> - - <_> - - - - <_>12 7 4 12 -1. - <_>12 13 4 6 2. - 0 - 0.0259959995746613 - 0.1382160037755966 - -0.1761659979820252 - <_> - - <_> - - - - <_>8 7 4 12 -1. - <_>8 13 4 6 2. - 0 - -0.0120850000530481 - -0.5107020139694214 - 0.0584409981966019 - <_> - - <_> - - - - <_>7 2 10 22 -1. - <_>7 13 10 11 2. - 0 - -0.0678360015153885 - 0.4775710105895996 - -0.0714460015296936 - <_> - - <_> - - - - <_>0 1 3 20 -1. - <_>1 1 1 20 3. - 0 - -0.0147150000557303 - 0.4523890018463135 - -0.1986140012741089 - <_> - - <_> - - - - <_>4 13 18 4 -1. - <_>13 13 9 2 2. - <_>4 15 9 2 2. - 0 - 0.0251189991831779 - 0.1295489966869354 - -0.8626639842987061 - <_> - - <_> - - - - <_>2 13 18 4 -1. - <_>2 13 9 2 2. - <_>11 15 9 2 2. - 0 - 0.0188260003924370 - -0.0415700003504753 - -1.1354700326919556 - <_> - - <_> - - - - <_>15 15 9 6 -1. - <_>15 17 9 2 3. - 0 - -0.0212639998644590 - -0.3473800122737885 - 0.1577949970960617 - <_> - - <_> - - - - <_>0 15 9 6 -1. - <_>0 17 9 2 3. - 0 - 9.4609996303915977e-003 - 4.8639997839927673e-003 - -0.6165480017662048 - <_> - - <_> - - - - <_>6 0 18 24 -1. - <_>15 0 9 12 2. - <_>6 12 9 12 2. - 0 - 0.2295770049095154 - 0.0813729986548424 - 0.6984140276908875 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>6 10 6 4 3. - 0 - -0.0380619987845421 - 1.1616369485855103 - -0.1497669965028763 - <_> - - <_> - - - - <_>8 7 10 4 -1. - <_>8 9 10 2 2. - 0 - -0.0134849995374680 - -0.3203639984130859 - 0.1736509948968887 - <_> - - <_> - - - - <_>1 9 18 6 -1. - <_>1 9 9 3 2. - <_>10 12 9 3 2. - 0 - 0.0362389981746674 - -0.1815849989652634 - 0.6195669770240784 - <_> - - <_> - - - - <_>6 6 18 3 -1. - <_>6 7 18 1 3. - 0 - 6.7210001870989799e-003 - 7.9600000753998756e-004 - 0.4244140088558197 - <_> - - <_> - - - - <_>7 7 9 8 -1. - <_>10 7 3 8 3. - 0 - 0.0965259969234467 - -0.1469680070877075 - 1.2525680065155029 - <_> - - <_> - - - - <_>10 12 6 12 -1. - <_>12 12 2 12 3. - 0 - -0.0356569997966290 - -0.3978169858455658 - 0.1419139951467514 - <_> - - <_> - - - - <_>3 14 18 3 -1. - <_>3 15 18 1 3. - 0 - 0.0107720000669360 - -0.1819400042295456 - 0.5976219773292542 - <_> - - <_> - - - - <_>15 17 9 7 -1. - <_>18 17 3 7 3. - 0 - 0.0792799964547157 - 0.1464249938726425 - -0.7883689999580383 - <_> - - <_> - - - - <_>1 12 10 6 -1. - <_>1 14 10 2 3. - 0 - 0.0328410007059574 - -0.0624080002307892 - -1.4227490425109863 - <_> - - <_> - - - - <_>15 17 9 7 -1. - <_>18 17 3 7 3. - 0 - -0.0277810003608465 - 0.3403309881687164 - 0.0306700002402067 - <_> - - <_> - - - - <_>10 3 3 19 -1. - <_>11 3 1 19 3. - 0 - -4.0339999832212925e-003 - 0.3108470141887665 - -0.2259570062160492 - <_> - - <_> - - - - <_>15 17 9 7 -1. - <_>18 17 3 7 3. - 0 - 7.4260002002120018e-003 - -0.0389369986951351 - 0.3170210123062134 - <_> - - <_> - - - - <_>6 1 11 9 -1. - <_>6 4 11 3 3. - 0 - 0.1121399998664856 - -0.1757829934358597 - 0.6505659818649292 - <_> - - <_> - - - - <_>15 17 9 7 -1. - <_>18 17 3 7 3. - 0 - -0.1187810003757477 - -1.0092990398406982 - 0.1106970012187958 - <_> - - <_> - - - - <_>6 5 11 6 -1. - <_>6 8 11 3 2. - 0 - -0.0415849983692169 - -0.5380640029907227 - 0.0199050009250641 - <_> - - <_> - - - - <_>16 7 8 5 -1. - <_>16 7 4 5 2. - 0 - -0.0279660001397133 - 0.4814319908618927 - 0.0335909985005856 - <_> - - <_> - - - - <_>2 4 20 19 -1. - <_>12 4 10 19 2. - 0 - -0.1250640004873276 - 0.2635219991207123 - -0.2573789954185486 - <_> - - <_> - - - - <_>2 1 21 6 -1. - <_>9 1 7 6 3. - 0 - 0.2366690039634705 - 0.0365080013871193 - 0.9065560102462769 - <_> - - <_> - - - - <_>6 5 12 14 -1. - <_>6 5 6 7 2. - <_>12 12 6 7 2. - 0 - -0.0294759999960661 - -0.6004880070686340 - 9.5880003646016121e-003 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - 0.0377929992973804 - 0.1550620049238205 - -0.9573349952697754 - <_> - - <_> - - - - <_>2 11 8 5 -1. - <_>6 11 4 5 2. - 0 - 0.0720440000295639 - -0.1452589929103851 - 1.3676730394363403 - <_> - - <_> - - - - <_>16 7 8 5 -1. - <_>16 7 4 5 2. - 0 - 9.7759999334812164e-003 - 0.0129159996286035 - 0.2164089977741242 - <_> - - <_> - - - - <_>0 7 8 5 -1. - <_>4 7 4 5 2. - 0 - 0.0521540008485317 - -0.0163599997758865 - -0.8835629820823669 - <_> - - <_> - - - - <_>15 17 9 7 -1. - <_>18 17 3 7 3. - 0 - -0.0437909997999668 - 0.3582960069179535 - 0.0651310011744499 - <_> - - <_> - - - - <_>8 6 8 10 -1. - <_>8 6 4 5 2. - <_>12 11 4 5 2. - 0 - -0.0383789986371994 - 1.1961040496826172 - -0.1497150063514710 - <_> - - <_> - - - - <_>15 15 9 9 -1. - <_>18 15 3 9 3. - 0 - -0.0988389998674393 - -0.6183400154113770 - 0.1278620064258575 - <_> - - <_> - - - - <_>0 15 9 9 -1. - <_>3 15 3 9 3. - 0 - -0.1219070032238960 - -1.8276120424270630 - -0.0648629963397980 - <_> - - <_> - - - - <_>12 10 9 7 -1. - <_>15 10 3 7 3. - 0 - -0.1198170036077499 - -30. - 0.1132330000400543 - <_> - - <_> - - - - <_>3 10 9 7 -1. - <_>6 10 3 7 3. - 0 - 0.0309100002050400 - -0.2393400073051453 - 0.3633289933204651 - <_> - - <_> - - - - <_>13 15 10 8 -1. - <_>18 15 5 4 2. - <_>13 19 5 4 2. - 0 - 0.0108009995892644 - -0.0351400002837181 - 0.2770789861679077 - <_> - - <_> - - - - <_>0 1 6 12 -1. - <_>0 1 3 6 2. - <_>3 7 3 6 2. - 0 - 0.0568449981510639 - -0.1552429944276810 - 1.0802700519561768 - <_> - - <_> - - - - <_>10 0 6 12 -1. - <_>13 0 3 6 2. - <_>10 6 3 6 2. - 0 - 1.0280000278726220e-003 - -0.0612029992043972 - 0.2050800025463104 - <_> - - <_> - - - - <_>7 0 10 12 -1. - <_>7 0 5 6 2. - <_>12 6 5 6 2. - 0 - -0.0282739996910095 - -0.6477800011634827 - 0.0239170007407665 - <_> - - <_> - - - - <_>4 1 16 8 -1. - <_>4 1 8 8 2. - 0 - -0.1601359993219376 - 1.0892050266265869 - 0.0583890005946159 - <_> - - <_> - - - - <_>0 21 19 3 -1. - <_>0 22 19 1 3. - 0 - 4.9629998393356800e-003 - -0.2580629885196686 - 0.2083459943532944 - <_> - - <_> - - - - <_>6 9 18 4 -1. - <_>15 9 9 2 2. - <_>6 11 9 2 2. - 0 - 0.0469370000064373 - 0.1388629972934723 - -1.5662620067596436 - <_> - - <_> - - - - <_>3 4 9 6 -1. - <_>3 6 9 2 3. - 0 - 0.0242860000580549 - -0.2072830051183701 - 0.5243099927902222 - <_> - - <_> - - - - <_>9 1 6 15 -1. - <_>9 6 6 5 3. - 0 - 0.0702020004391670 - 0.1479689925909042 - -1.3095090389251709 - <_> - - <_> - - - - <_>5 9 6 6 -1. - <_>8 9 3 6 2. - 0 - 9.8120002076029778e-003 - 0.0279060006141663 - -0.5086460113525391 - <_> - - <_> - - - - <_>5 1 14 9 -1. - <_>5 4 14 3 3. - 0 - -0.0562009997665882 - 1.2618130445480347 - 0.0638019964098930 - <_> - - <_> - - - - <_>3 0 8 20 -1. - <_>3 0 4 10 2. - <_>7 10 4 10 2. - 0 - 0.1098280027508736 - -0.1285009980201721 - 3.0776169300079346 - -3.2573320865631104 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>5 0 7 9 -1. - <_>5 3 7 3 3. - 0 - 0.0209100004285574 - -0.6855940222740173 - 0.3898429870605469 - <_> - - <_> - - - - <_>6 6 12 5 -1. - <_>10 6 4 5 3. - 0 - 0.0350320003926754 - -0.4772439897060394 - 0.4502719938755035 - <_> - - <_> - - - - <_>0 1 8 14 -1. - <_>4 1 4 14 2. - 0 - 0.0397990010678768 - -0.4701110124588013 - 0.4270249903202057 - <_> - - <_> - - - - <_>2 12 22 4 -1. - <_>2 14 22 2 2. - 0 - -4.8409998416900635e-003 - 0.2561430037021637 - -0.6655629873275757 - <_> - - <_> - - - - <_>8 17 6 6 -1. - <_>8 20 6 3 2. - 0 - 2.3439999204128981e-003 - -0.4808349907398224 - 0.2801379859447479 - <_> - - <_> - - - - <_>18 1 6 7 -1. - <_>18 1 3 7 2. - 0 - 0.0253129992634058 - -0.2394820004701614 - 0.4419179856777191 - <_> - - <_> - - - - <_>0 0 6 6 -1. - <_>3 0 3 6 2. - 0 - -0.0321930013597012 - 0.7608669996261597 - -0.2505910098552704 - <_> - - <_> - - - - <_>4 6 17 18 -1. - <_>4 12 17 6 3. - 0 - 0.0754090026021004 - -0.3497459888458252 - 0.3438029885292053 - <_> - - <_> - - - - <_>6 0 12 6 -1. - <_>6 0 6 3 2. - <_>12 3 6 3 2. - 0 - -0.0184690002351999 - -0.7908560037612915 - 0.0347880013287067 - <_> - - <_> - - - - <_>4 7 18 4 -1. - <_>13 7 9 2 2. - <_>4 9 9 2 2. - 0 - -0.0128020001575351 - 0.4710780084133148 - -0.0600060001015663 - <_> - - <_> - - - - <_>4 12 10 6 -1. - <_>4 14 10 2 3. - 0 - -0.0265980008989573 - 0.6711609959602356 - -0.2425750046968460 - <_> - - <_> - - - - <_>7 9 10 12 -1. - <_>12 9 5 6 2. - <_>7 15 5 6 2. - 0 - 0.0219889990985394 - 0.2471749931573868 - -0.4830169975757599 - <_> - - <_> - - - - <_>0 1 24 3 -1. - <_>8 1 8 3 3. - 0 - 0.1465409994125366 - -0.2150409966707230 - 0.7205590009689331 - <_> - - <_> - - - - <_>13 11 6 6 -1. - <_>13 11 3 6 2. - 0 - 3.5310001112520695e-003 - 0.2793099880218506 - -0.3433989882469177 - <_> - - <_> - - - - <_>5 11 6 6 -1. - <_>8 11 3 6 2. - 0 - 9.4010001048445702e-003 - 0.0558619983494282 - -0.8214359879493713 - <_> - - <_> - - - - <_>3 10 19 3 -1. - <_>3 11 19 1 3. - 0 - -8.6390003561973572e-003 - -0.9962059855461121 - 0.1887499988079071 - <_> - - <_> - - - - <_>0 2 6 9 -1. - <_>0 5 6 3 3. - 0 - -0.0391930006444454 - -1.1945559978485107 - -0.0291980002075434 - <_> - - <_> - - - - <_>14 16 10 6 -1. - <_>14 18 10 2 3. - 0 - 0.0248550008982420 - 0.1498759984970093 - -0.5413780212402344 - <_> - - <_> - - - - <_>0 16 10 6 -1. - <_>0 18 10 2 3. - 0 - -0.0349950008094311 - -1.4210180044174194 - -0.0423140004277229 - <_> - - <_> - - - - <_>14 13 9 6 -1. - <_>14 15 9 2 3. - 0 - -0.0183789990842342 - -0.2824259996414185 - 0.1558180004358292 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - -0.0135920001193881 - 0.4731709957122803 - -0.2193720042705536 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - 6.2629999592900276e-003 - -0.0597140006721020 - 0.6062589883804321 - <_> - - <_> - - - - <_>0 18 9 6 -1. - <_>0 20 9 2 3. - 0 - -0.0184780005365610 - -0.8564720153808594 - -0.0137839997187257 - <_> - - <_> - - - - <_>14 13 9 6 -1. - <_>14 15 9 2 3. - 0 - 0.0142360003665090 - 0.1665479987859726 - -0.2771399915218353 - <_> - - <_> - - - - <_>6 2 6 9 -1. - <_>8 2 2 9 3. - 0 - -0.0325470007956028 - -1.1728240251541138 - -0.0401850007474422 - <_> - - <_> - - - - <_>15 8 4 12 -1. - <_>15 8 2 12 2. - 0 - -2.6410000864416361e-003 - 0.2651430070400238 - -0.0563430003821850 - <_> - - <_> - - - - <_>8 13 8 8 -1. - <_>8 17 8 4 2. - 0 - -8.7799999164417386e-004 - 0.0365560017526150 - -0.5507519841194153 - <_> - - <_> - - - - <_>4 20 18 3 -1. - <_>10 20 6 3 3. - 0 - 0.0473719984292984 - -0.0426140017807484 - 0.4819490015506744 - <_> - - <_> - - - - <_>5 8 4 12 -1. - <_>7 8 2 12 2. - 0 - -7.0790001191198826e-003 - 0.2869899868965149 - -0.3292300105094910 - <_> - - <_> - - - - <_>7 7 12 3 -1. - <_>7 7 6 3 2. - 0 - -0.0431459993124008 - -1.4065419435501099 - 0.1283639967441559 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>12 6 2 9 2. - 0 - 0.0205920003354549 - -0.2143529951572418 - 0.5398179888725281 - <_> - - <_> - - - - <_>5 20 18 3 -1. - <_>11 20 6 3 3. - 0 - -0.0223670005798340 - 0.3371829986572266 - 0.0452120006084442 - <_> - - <_> - - - - <_>1 20 18 3 -1. - <_>7 20 6 3 3. - 0 - 0.0500399991869926 - -0.2512170076370239 - 0.4175049960613251 - <_> - - <_> - - - - <_>18 1 6 20 -1. - <_>21 1 3 10 2. - <_>18 11 3 10 2. - 0 - 0.0617949999868870 - 0.0400849990546703 - 0.6877980232238770 - <_> - - <_> - - - - <_>0 1 6 20 -1. - <_>0 1 3 10 2. - <_>3 11 3 10 2. - 0 - -0.0418619997799397 - 0.5302739739418030 - -0.2290199995040894 - <_> - - <_> - - - - <_>13 3 4 18 -1. - <_>15 3 2 9 2. - <_>13 12 2 9 2. - 0 - -3.1959998887032270e-003 - 0.2516149878501892 - -0.2151460051536560 - <_> - - <_> - - - - <_>0 2 6 12 -1. - <_>0 6 6 4 3. - 0 - 0.0242550000548363 - 7.2320001199841499e-003 - -0.7251909971237183 - <_> - - <_> - - - - <_>12 9 12 6 -1. - <_>18 9 6 3 2. - <_>12 12 6 3 2. - 0 - -0.0173039995133877 - -0.4995819926261902 - 0.1839450001716614 - <_> - - <_> - - - - <_>7 3 4 18 -1. - <_>7 3 2 9 2. - <_>9 12 2 9 2. - 0 - -4.1470001451671124e-003 - 0.0852119997143745 - -0.4636470079421997 - <_> - - <_> - - - - <_>14 0 6 9 -1. - <_>16 0 2 9 3. - 0 - -0.0143699999898672 - -0.5225890278816223 - 0.2389259934425354 - <_> - - <_> - - - - <_>0 9 12 6 -1. - <_>0 9 6 3 2. - <_>6 12 6 3 2. - 0 - -9.0399999171495438e-003 - -0.6325039863586426 - 0.0325510017573833 - <_> - - <_> - - - - <_>14 4 8 20 -1. - <_>18 4 4 10 2. - <_>14 14 4 10 2. - 0 - -0.1237310022115707 - 1.2856210470199585 - 0.0765450000762939 - <_> - - <_> - - - - <_>2 4 8 20 -1. - <_>2 4 4 10 2. - <_>6 14 4 10 2. - 0 - -0.0822219997644424 - 0.8320819735527039 - -0.1859059929847717 - <_> - - <_> - - - - <_>14 13 9 6 -1. - <_>14 15 9 2 3. - 0 - 0.0656590014696121 - 0.1129880025982857 - -30. - <_> - - <_> - - - - <_>1 13 9 6 -1. - <_>1 15 9 2 3. - 0 - -0.0315829999744892 - -1.3485900163650513 - -0.0470970012247562 - <_> - - <_> - - - - <_>3 15 18 3 -1. - <_>9 15 6 3 3. - 0 - -0.0796360000967979 - -1.3533639907836914 - 0.1566880047321320 - <_> - - <_> - - - - <_>5 13 9 6 -1. - <_>5 15 9 2 3. - 0 - -0.0188800003379583 - 0.4030030071735382 - -0.2514890134334564 - <_> - - <_> - - - - <_>5 0 18 3 -1. - <_>5 1 18 1 3. - 0 - -5.0149997696280479e-003 - -0.2628709971904755 - 0.1858250051736832 - <_> - - <_> - - - - <_>8 2 6 7 -1. - <_>11 2 3 7 2. - 0 - -0.0122180003672838 - 0.5869240164756775 - -0.1942770034074783 - <_> - - <_> - - - - <_>9 1 9 6 -1. - <_>12 1 3 6 3. - 0 - 1.2710000155493617e-003 - -0.1668899953365326 - 0.2300689965486527 - <_> - - <_> - - - - <_>6 1 9 6 -1. - <_>9 1 3 6 3. - 0 - 0.0297439992427826 - 0.0125200003385544 - -0.6672359704971314 - <_> - - <_> - - - - <_>5 6 14 6 -1. - <_>12 6 7 3 2. - <_>5 9 7 3 2. - 0 - 0.0281750001013279 - -0.0170600004494190 - 0.6457939743995667 - <_> - - <_> - - - - <_>8 2 6 13 -1. - <_>10 2 2 13 3. - 0 - 0.0303450003266335 - -0.2417870014905930 - 0.3487890064716339 - <_> - - <_> - - - - <_>6 11 12 6 -1. - <_>12 11 6 3 2. - <_>6 14 6 3 2. - 0 - -0.0173259992152452 - -0.5359939932823181 - 0.2099599987268448 - <_> - - <_> - - - - <_>3 1 18 15 -1. - <_>9 1 6 15 3. - 0 - -0.0841780006885529 - 0.7509329915046692 - -0.1759320050477982 - <_> - - <_> - - - - <_>13 0 6 7 -1. - <_>13 0 3 7 2. - 0 - 7.4950000271201134e-003 - -0.1618809998035431 - 0.3065750002861023 - <_> - - <_> - - - - <_>3 3 16 6 -1. - <_>3 6 16 3 2. - 0 - 0.0564949996769428 - -0.1731880009174347 - 1.0016150474548340 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - -5.2939997985959053e-003 - 0.2341759949922562 - -0.0653470009565353 - <_> - - <_> - - - - <_>7 7 6 9 -1. - <_>9 7 2 9 3. - 0 - -0.0149450004100800 - 0.2501890063285828 - -0.3059119880199432 - <_> - - <_> - - - - <_>13 0 4 24 -1. - <_>13 0 2 24 2. - 0 - 0.0549190007150173 - 0.1312199980020523 - -0.9376509785652161 - <_> - - <_> - - - - <_>7 0 4 24 -1. - <_>9 0 2 24 2. - 0 - -0.0197219997644424 - -0.8397849798202515 - -0.0234730001538992 - <_> - - <_> - - - - <_>11 9 5 12 -1. - <_>11 13 5 4 3. - 0 - -0.0671589970588684 - 2.3586840629577637 - 0.0829709991812706 - <_> - - <_> - - - - <_>7 15 9 6 -1. - <_>7 17 9 2 3. - 0 - -0.0143259996548295 - 0.1881449967622757 - -0.3122160136699677 - <_> - - <_> - - - - <_>5 7 18 6 -1. - <_>5 9 18 2 3. - 0 - 0.0298410002142191 - 0.1482509970664978 - -0.8468170166015625 - <_> - - <_> - - - - <_>8 9 5 12 -1. - <_>8 13 5 4 3. - 0 - 0.0518830008804798 - -0.0437310002744198 - -1.3366169929504395 - <_> - - <_> - - - - <_>4 17 17 6 -1. - <_>4 19 17 2 3. - 0 - 0.0411270000040531 - 0.1766009926795960 - -0.6090409755706787 - <_> - - <_> - - - - <_>0 3 18 14 -1. - <_>0 3 9 7 2. - <_>9 10 9 7 2. - 0 - -0.1286509931087494 - -0.9870100021362305 - -0.0377850010991097 - <_> - - <_> - - - - <_>0 1 24 2 -1. - <_>0 2 24 1 2. - 0 - 2.4170000106096268e-003 - -0.1611959934234619 - 0.3267570137977600 - <_> - - <_> - - - - <_>0 15 18 3 -1. - <_>0 16 18 1 3. - 0 - 7.7030002139508724e-003 - -0.2384150028228760 - 0.2931939959526062 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - 0.0455200001597404 - 0.1442459970712662 - -1.5010160207748413 - <_> - - <_> - - - - <_>3 3 14 12 -1. - <_>3 9 14 6 2. - 0 - -0.0787009969353676 - -1.0394560098648071 - -0.0453759990632534 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - 7.8619997948408127e-003 - 0.1963360011577606 - -0.1447239965200424 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>10 0 2 9 3. - 0 - -0.0134589998051524 - -0.9063469767570496 - -0.0380490012466908 - <_> - - <_> - - - - <_>10 6 6 10 -1. - <_>12 6 2 10 3. - 0 - 0.0288270004093647 - -0.0294739995151758 - 0.6005839705467224 - <_> - - <_> - - - - <_>5 0 6 9 -1. - <_>7 0 2 9 3. - 0 - -0.0273659992963076 - -0.9980400204658508 - -0.0386530011892319 - <_> - - <_> - - - - <_>2 0 21 7 -1. - <_>9 0 7 7 3. - 0 - -0.0729179978370667 - 0.7336149811744690 - 0.0574400015175343 - <_> - - <_> - - - - <_>6 11 12 5 -1. - <_>10 11 4 5 3. - 0 - -0.0139889996498823 - 0.2789260149002075 - -0.2651630043983460 - <_> - - <_> - - - - <_>8 7 9 8 -1. - <_>11 7 3 8 3. - 0 - 0.0432429984211922 - 4.7760000452399254e-003 - 0.3592590093612671 - <_> - - <_> - - - - <_>9 6 6 18 -1. - <_>9 6 3 9 2. - <_>12 15 3 9 2. - 0 - 0.0295330006629229 - -0.2008399963378906 - 0.5120289921760559 - <_> - - <_> - - - - <_>15 14 8 10 -1. - <_>19 14 4 5 2. - <_>15 19 4 5 2. - 0 - -0.0318970009684563 - 0.6472169756889343 - -1.3760000001639128e-003 - <_> - - <_> - - - - <_>1 14 8 10 -1. - <_>1 14 4 5 2. - <_>5 19 4 5 2. - 0 - 0.0378689989447594 - -0.1836380064487457 - 0.6134309768676758 - <_> - - <_> - - - - <_>11 0 8 10 -1. - <_>15 0 4 5 2. - <_>11 5 4 5 2. - 0 - -0.0224179998040199 - -0.2918789982795715 - 0.1819480061531067 - <_> - - <_> - - - - <_>5 0 8 10 -1. - <_>5 0 4 5 2. - <_>9 5 4 5 2. - 0 - 0.0589589998126030 - -0.0664519965648651 - -1.9290030002593994 - <_> - - <_> - - - - <_>6 1 12 5 -1. - <_>6 1 6 5 2. - 0 - 0.0312229990959167 - -0.0127320000901818 - 0.6156079769134522 - <_> - - <_> - - - - <_>1 12 18 2 -1. - <_>10 12 9 2 2. - 0 - 0.0374849997460842 - -0.2085690051317215 - 0.4436399936676025 - <_> - - <_> - - - - <_>2 8 20 6 -1. - <_>12 8 10 3 2. - <_>2 11 10 3 2. - 0 - -0.0209660008549690 - -0.3571279942989349 - 0.2425220012664795 - <_> - - <_> - - - - <_>7 6 9 7 -1. - <_>10 6 3 7 3. - 0 - -0.0254779998213053 - 1.0846560001373291 - -0.1505440026521683 - <_> - - <_> - - - - <_>10 5 8 16 -1. - <_>14 5 4 8 2. - <_>10 13 4 8 2. - 0 - -7.2570000775158405e-003 - 0.2130260020494461 - -0.1830819994211197 - <_> - - <_> - - - - <_>3 9 16 8 -1. - <_>3 9 8 4 2. - <_>11 13 8 4 2. - 0 - -0.0509830005466938 - 0.5173680186271668 - -0.1883309930562973 - <_> - - <_> - - - - <_>7 8 10 4 -1. - <_>7 8 5 4 2. - 0 - -0.0206400007009506 - -0.4403020143508911 - 0.2274599969387054 - <_> - - <_> - - - - <_>7 12 10 8 -1. - <_>7 12 5 4 2. - <_>12 16 5 4 2. - 0 - 0.0106729995459318 - 0.0350599996745586 - -0.5166500210762024 - <_> - - <_> - - - - <_>9 19 15 4 -1. - <_>14 19 5 4 3. - 0 - 0.0318959988653660 - 0.0132280001416802 - 0.3491519987583160 - <_> - - <_> - - - - <_>1 0 18 9 -1. - <_>7 0 6 9 3. - 0 - -0.0238249991089106 - 0.3411880135536194 - -0.2151020020246506 - <_> - - <_> - - - - <_>13 4 10 8 -1. - <_>18 4 5 4 2. - <_>13 8 5 4 2. - 0 - -6.0680001042783260e-003 - 0.3293739855289459 - -0.2852379977703095 - <_> - - <_> - - - - <_>3 16 18 4 -1. - <_>9 16 6 4 3. - 0 - 0.0238819997757673 - -0.2533380091190338 - 0.2629610002040863 - <_> - - <_> - - - - <_>8 7 10 12 -1. - <_>13 7 5 6 2. - <_>8 13 5 6 2. - 0 - 0.0279660001397133 - 0.1404909938573837 - -0.4988709986209869 - <_> - - <_> - - - - <_>6 7 10 12 -1. - <_>6 7 5 6 2. - <_>11 13 5 6 2. - 0 - 0.0146030001342297 - -0.0153959998860955 - -0.7695800065994263 - <_> - - <_> - - - - <_>4 6 18 7 -1. - <_>10 6 6 7 3. - 0 - 0.1087239980697632 - 0.1906960010528565 - -0.3239310085773468 - <_> - - <_> - - - - <_>0 17 18 3 -1. - <_>0 18 18 1 3. - 0 - -0.0140380002558231 - 0.3492470085620880 - -0.2235870063304901 - <_> - - <_> - - - - <_>3 17 18 3 -1. - <_>3 18 18 1 3. - 0 - 4.0440000593662262e-003 - -0.0383290015161037 - 0.5117729902267456 - <_> - - <_> - - - - <_>2 4 6 10 -1. - <_>4 4 2 10 3. - 0 - -4.9769999459385872e-003 - -0.4288829863071442 - 0.0491739995777607 - <_> - - <_> - - - - <_>16 0 8 24 -1. - <_>16 0 4 24 2. - 0 - -0.0851830020546913 - 0.6662459969520569 - 7.8079998493194580e-003 - <_> - - <_> - - - - <_>4 0 8 15 -1. - <_>8 0 4 15 2. - 0 - 2.1559998858720064e-003 - -0.4913519918918610 - 0.0695559978485107 - <_> - - <_> - - - - <_>16 0 8 24 -1. - <_>16 0 4 24 2. - 0 - 0.3638449907302856 - 0.1299709975719452 - -1.8949509859085083 - <_> - - <_> - - - - <_>1 4 18 9 -1. - <_>7 4 6 9 3. - 0 - 0.2208250015974045 - -0.0572119988501072 - -1.4281120300292969 - <_> - - <_> - - - - <_>15 12 9 6 -1. - <_>15 14 9 2 3. - 0 - -0.0161400008946657 - -0.5758939981460571 - 0.1806250065565109 - <_> - - <_> - - - - <_>3 9 18 6 -1. - <_>3 9 9 3 2. - <_>12 12 9 3 2. - 0 - -0.0483300015330315 - 0.9730849862098694 - -0.1651300042867661 - <_> - - <_> - - - - <_>18 5 6 9 -1. - <_>18 8 6 3 3. - 0 - 0.0175299998372793 - 0.1793269962072372 - -0.2794890105724335 - <_> - - <_> - - - - <_>0 5 6 9 -1. - <_>0 8 6 3 3. - 0 - -0.0343099981546402 - -0.8107249736785889 - -0.0165960006415844 - <_> - - <_> - - - - <_>4 7 18 4 -1. - <_>13 7 9 2 2. - <_>4 9 9 2 2. - 0 - -4.5830002054572105e-003 - 0.2790899872779846 - -7.4519999325275421e-003 - <_> - - <_> - - - - <_>2 1 12 20 -1. - <_>2 1 6 10 2. - <_>8 11 6 10 2. - 0 - 0.1289640069007874 - -0.1350850015878677 - 2.5411539077758789 - <_> - - <_> - - - - <_>17 0 6 23 -1. - <_>17 0 3 23 2. - 0 - 0.0303610004484653 - -0.0684190019965172 - 0.2873409986495972 - <_> - - <_> - - - - <_>1 6 2 18 -1. - <_>1 15 2 9 2. - 0 - 0.0440860018134117 - -0.1813589930534363 - 0.6541320085525513 - <_> - - <_> - - - - <_>8 8 10 6 -1. - <_>8 10 10 2 3. - 0 - 3.0159999150782824e-003 - -0.1569049954414368 - 0.2696380019187927 - <_> - - <_> - - - - <_>0 6 20 6 -1. - <_>0 6 10 3 2. - <_>10 9 10 3 2. - 0 - -0.0263369996100664 - 0.2917560040950775 - -0.2527410089969635 - <_> - - <_> - - - - <_>11 12 12 5 -1. - <_>15 12 4 5 3. - 0 - -0.0278660003095865 - 0.4438750147819519 - 0.0550380013883114 - <_> - - <_> - - - - <_>0 4 3 19 -1. - <_>1 4 1 19 3. - 0 - 0.0117250001057982 - -0.1934649944305420 - 0.4665670096874237 - <_> - - <_> - - - - <_>19 1 3 18 -1. - <_>20 1 1 18 3. - 0 - 1.5689999563619494e-003 - -8.2360003143548965e-003 - 0.2570089995861054 - <_> - - <_> - - - - <_>2 1 3 18 -1. - <_>3 1 1 18 3. - 0 - -3.5550000611692667e-003 - -0.4243089854717255 - 0.0711740031838417 - <_> - - <_> - - - - <_>3 10 18 3 -1. - <_>9 10 6 3 3. - 0 - -0.0316950008273125 - -0.8539350032806397 - 0.1691620051860809 - <_> - - <_> - - - - <_>4 4 10 9 -1. - <_>9 4 5 9 2. - 0 - -0.0320970006287098 - 0.8378490209579468 - -0.1759729981422424 - <_> - - <_> - - - - <_>7 13 14 7 -1. - <_>7 13 7 7 2. - 0 - 0.1554419994354248 - 0.0995500013232231 - 2.3873300552368164 - <_> - - <_> - - - - <_>3 13 14 7 -1. - <_>10 13 7 7 2. - 0 - 0.0880459994077683 - -0.1872529983520508 - 0.6238430142402649 - <_> - - <_> - - - - <_>8 15 9 6 -1. - <_>11 15 3 6 3. - 0 - -1.6720000421628356e-003 - 0.2500869929790497 - -0.0651189982891083 - <_> - - <_> - - - - <_>4 14 8 10 -1. - <_>4 14 4 5 2. - <_>8 19 4 5 2. - 0 - 9.3409996479749680e-003 - -0.3537890017032623 - 0.1071500033140183 - <_> - - <_> - - - - <_>10 14 4 10 -1. - <_>10 19 4 5 2. - 0 - 0.0371380001306534 - 0.1638700067996979 - -0.9171839952468872 - <_> - - <_> - - - - <_>3 8 5 16 -1. - <_>3 16 5 8 2. - 0 - 0.0801839977502823 - -0.1481299996376038 - 1.4895190000534058 - <_> - - <_> - - - - <_>15 10 9 6 -1. - <_>15 12 9 2 3. - 0 - -7.9100002767518163e-004 - -0.2132689952850342 - 0.1967640072107315 - <_> - - <_> - - - - <_>0 10 9 6 -1. - <_>0 12 9 2 3. - 0 - -5.0400001928210258e-003 - -0.7131869792938232 - 1.8240000354126096e-003 - <_> - - <_> - - - - <_>6 7 12 9 -1. - <_>6 10 12 3 3. - 0 - 0.1196239963173866 - 0.0330989994108677 - 1.0441709756851196 - <_> - - <_> - - - - <_>9 10 5 8 -1. - <_>9 14 5 4 2. - 0 - -4.5280000194907188e-003 - -0.2730849981307983 - 0.2722980082035065 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - -0.0296390000730753 - 0.3622579872608185 - 0.0567950010299683 - <_> - - <_> - - - - <_>8 15 6 9 -1. - <_>10 15 2 9 3. - 0 - 0.0266500003635883 - -0.0480410009622574 - -0.9672350287437439 - <_> - - <_> - - - - <_>16 6 7 6 -1. - <_>16 9 7 3 2. - 0 - 0.0444220006465912 - 0.1305290013551712 - -0.3507730066776276 - <_> - - <_> - - - - <_>8 1 4 22 -1. - <_>10 1 2 22 2. - 0 - -0.0243599992245436 - -1.0766899585723877 - -0.0512229986488819 - <_> - - <_> - - - - <_>6 6 14 3 -1. - <_>6 6 7 3 2. - 0 - 0.0197349991649389 - 0.0262380000203848 - 0.2807050049304962 - <_> - - <_> - - - - <_>0 18 19 3 -1. - <_>0 19 19 1 3. - 0 - 5.4930001497268677e-003 - -0.2611129879951477 - 0.2101140022277832 - <_> - - <_> - - - - <_>17 0 6 24 -1. - <_>17 0 3 24 2. - 0 - -0.2320030033588409 - -1.7748440504074097 - 0.1148260012269020 - <_> - - <_> - - - - <_>0 13 15 6 -1. - <_>5 13 5 6 3. - 0 - -0.0256140008568764 - 0.2990080118179321 - -0.2250249981880188 - <_> - - <_> - - - - <_>9 6 10 14 -1. - <_>14 6 5 7 2. - <_>9 13 5 7 2. - 0 - -6.4949998632073402e-003 - 0.1956380009651184 - -0.0997629985213280 - <_> - - <_> - - - - <_>1 6 8 10 -1. - <_>1 6 4 5 2. - <_>5 11 4 5 2. - 0 - 3.9840000681579113e-003 - -0.4302150011062622 - 0.0812610015273094 - <_> - - <_> - - - - <_>7 6 12 5 -1. - <_>7 6 6 5 2. - 0 - -0.0358130000531673 - -0.5098739862442017 - 0.1634590029716492 - <_> - - <_> - - - - <_>7 7 9 6 -1. - <_>10 7 3 6 3. - 0 - -0.0141690000891685 - 0.7797809839248657 - -0.1747629940509796 - <_> - - <_> - - - - <_>7 8 14 14 -1. - <_>14 8 7 7 2. - <_>7 15 7 7 2. - 0 - -0.1264210045337677 - -0.6304789781570435 - 0.1272830069065094 - <_> - - <_> - - - - <_>3 8 14 14 -1. - <_>3 8 7 7 2. - <_>10 15 7 7 2. - 0 - 0.0686779990792274 - -0.0464479997754097 - -1.1128979921340942 - <_> - - <_> - - - - <_>9 8 13 4 -1. - <_>9 10 13 2 2. - 0 - 0.0858649984002113 - 0.1183540001511574 - -4.8235158920288086 - <_> - - <_> - - - - <_>3 2 6 12 -1. - <_>3 2 3 6 2. - <_>6 8 3 6 2. - 0 - 0.0155119998380542 - -0.0174679998308420 - -0.6369339823722839 - <_> - - <_> - - - - <_>6 10 17 6 -1. - <_>6 13 17 3 2. - 0 - 0.0810910016298294 - 0.0861330032348633 - 2.4559431076049805 - <_> - - <_> - - - - <_>1 10 17 6 -1. - <_>1 13 17 3 2. - 0 - 0.0184950008988380 - 0.0402290001511574 - -0.5085819959640503 - <_> - - <_> - - - - <_>16 7 8 9 -1. - <_>16 10 8 3 3. - 0 - -0.0863209962844849 - -1.9006760120391846 - 0.1101910024881363 - <_> - - <_> - - - - <_>0 7 8 9 -1. - <_>0 10 8 3 3. - 0 - 0.0723550021648407 - -0.0621119998395443 - -1.4165179729461670 - <_> - - <_> - - - - <_>0 9 24 10 -1. - <_>12 9 12 5 2. - <_>0 14 12 5 2. - 0 - -0.0781790018081665 - 0.8884930014610291 - 0.0423699989914894 - <_> - - <_> - - - - <_>3 2 15 8 -1. - <_>8 2 5 8 3. - 0 - 0.0966819971799850 - -0.2209420055150986 - 0.3357509970664978 - <_> - - <_> - - - - <_>4 2 18 8 -1. - <_>10 2 6 8 3. - 0 - -0.0398759990930557 - 0.5780479907989502 - 0.0453479997813702 - <_> - - <_> - - - - <_>0 1 18 4 -1. - <_>0 1 9 2 2. - <_>9 3 9 2 2. - 0 - -9.5349997282028198e-003 - -0.5417569875717163 - 3.2399999909102917e-003 - <_> - - <_> - - - - <_>20 2 3 18 -1. - <_>21 2 1 18 3. - 0 - 4.0600000647827983e-004 - -0.0815490037202835 - 0.3583790063858032 - <_> - - <_> - - - - <_>1 3 3 19 -1. - <_>2 3 1 19 3. - 0 - 0.0121079999953508 - -0.2028039991855621 - 0.4376800060272217 - <_> - - <_> - - - - <_>18 8 6 16 -1. - <_>20 8 2 16 3. - 0 - -0.0208739992231131 - 0.4146989881992340 - -0.0455680005252361 - <_> - - <_> - - - - <_>0 8 6 16 -1. - <_>2 8 2 16 3. - 0 - 0.0578880012035370 - -0.0290099997073412 - -0.9182230234146118 - <_> - - <_> - - - - <_>8 18 11 6 -1. - <_>8 20 11 2 3. - 0 - 1.3200000103097409e-004 - -0.1177240014076233 - 0.2000000029802322 - <_> - - <_> - - - - <_>4 6 12 5 -1. - <_>8 6 4 5 3. - 0 - -0.0171370003372431 - 0.3300479948520660 - -0.2305520027875900 - <_> - - <_> - - - - <_>7 6 12 5 -1. - <_>11 6 4 5 3. - 0 - 0.0306550003588200 - -0.0215450003743172 - 0.2687819898128510 - <_> - - <_> - - - - <_>6 3 9 6 -1. - <_>9 3 3 6 3. - 0 - -7.8699999721720815e-004 - -0.4410069882869721 - 0.0491579994559288 - <_> - - <_> - - - - <_>7 6 12 5 -1. - <_>7 6 6 5 2. - 0 - 0.0880369991064072 - 0.1178200021386147 - -2.8293309211730957 - <_> - - <_> - - - - <_>9 8 6 7 -1. - <_>12 8 3 7 2. - 0 - -0.0390289984643459 - 0.9177719950675964 - -0.1582739949226379 - <_> - - <_> - - - - <_>8 2 9 6 -1. - <_>11 2 3 6 3. - 0 - 0.0801059976220131 - 0.1128920018672943 - -1.9937280416488647 - <_> - - <_> - - - - <_>8 14 6 9 -1. - <_>8 17 6 3 3. - 0 - 0.0395389981567860 - -0.1435739994049072 - 1.3085240125656128 - <_> - - <_> - - - - <_>8 2 9 6 -1. - <_>11 2 3 6 3. - 0 - 0.0206840001046658 - 0.2004809975624085 - -0.0441869981586933 - <_> - - <_> - - - - <_>4 3 16 20 -1. - <_>4 3 8 10 2. - <_>12 13 8 10 2. - 0 - -0.0670379996299744 - 0.3261860013008118 - -0.2055040001869202 - <_> - - <_> - - - - <_>7 6 10 12 -1. - <_>12 6 5 6 2. - <_>7 12 5 6 2. - 0 - 0.0468150004744530 - 0.1582529991865158 - -0.9553509950637817 - <_> - - <_> - - - - <_>0 2 7 12 -1. - <_>0 6 7 4 3. - 0 - 0.0784439966082573 - -0.0746510028839111 - -2.1161499023437500 - <_> - - <_> - - - - <_>12 17 11 6 -1. - <_>12 19 11 2 3. - 0 - 0.0663800016045570 - 0.1164190024137497 - -1.6113519668579102 - <_> - - <_> - - - - <_>4 7 12 8 -1. - <_>4 7 6 4 2. - <_>10 11 6 4 2. - 0 - 0.0300539992749691 - -0.1656260043382645 - 0.7002540230751038 - <_> - - <_> - - - - <_>8 11 8 10 -1. - <_>12 11 4 5 2. - <_>8 16 4 5 2. - 0 - 0.0171199999749660 - 0.2262769937515259 - -0.4011499881744385 - <_> - - <_> - - - - <_>9 1 4 9 -1. - <_>11 1 2 9 2. - 0 - 0.0200730003416538 - -0.1938969939947128 - 0.4442029893398285 - <_> - - <_> - - - - <_>14 0 3 22 -1. - <_>15 0 1 22 3. - 0 - 0.0331019982695580 - 0.1163749992847443 - -1.5771679878234863 - <_> - - <_> - - - - <_>7 0 3 22 -1. - <_>8 0 1 22 3. - 0 - -0.0148820001631975 - -0.8968030214309692 - -0.0420100018382072 - <_> - - <_> - - - - <_>4 7 18 4 -1. - <_>13 7 9 2 2. - <_>4 9 9 2 2. - 0 - -0.0102810002863407 - 0.3560299873352051 - -0.0131240002810955 - <_> - - <_> - - - - <_>10 2 4 15 -1. - <_>10 7 4 5 3. - 0 - -0.0286950003355742 - -0.4603959918022156 - 0.0268019996583462 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - -4.7189998440444469e-003 - 0.2378879934549332 - -0.0655189976096153 - <_> - - <_> - - - - <_>0 0 18 13 -1. - <_>9 0 9 13 2. - 0 - 0.3220160007476807 - -0.0284899994730949 - -0.8423460125923157 - <_> - - <_> - - - - <_>16 0 3 24 -1. - <_>17 0 1 24 3. - 0 - -0.0170450005680323 - -0.5093880295753479 - 0.1605760008096695 - <_> - - <_> - - - - <_>5 0 3 24 -1. - <_>6 0 1 24 3. - 0 - -7.3469998314976692e-003 - -0.5415499806404114 - 4.7320001758635044e-003 - <_> - - <_> - - - - <_>10 15 5 8 -1. - <_>10 19 5 4 2. - 0 - -0.0300019998103380 - -0.8878579735755920 - 0.1362179964780808 - <_> - - <_> - - - - <_>2 18 18 2 -1. - <_>2 19 18 1 2. - 0 - -0.0112929996103048 - 0.8061519861221314 - -0.1615950018167496 - <_> - - <_> - - - - <_>2 8 20 3 -1. - <_>2 9 20 1 3. - 0 - 4.7749998047947884e-003 - 0.0129680000245571 - 0.5507990121841431 - <_> - - <_> - - - - <_>7 6 9 6 -1. - <_>7 8 9 2 3. - 0 - 5.0710001960396767e-003 - -0.0457280017435551 - -1.0766259431838989 - <_> - - <_> - - - - <_>3 2 19 10 -1. - <_>3 7 19 5 2. - 0 - 0.1934410035610199 - 0.0712620019912720 - 1.1694519519805908 - <_> - - <_> - - - - <_>2 7 19 3 -1. - <_>2 8 19 1 3. - 0 - 5.3750001825392246e-003 - -0.1973620057106018 - 0.3820689916610718 - <_> - - <_> - - - - <_>15 6 9 4 -1. - <_>15 8 9 2 2. - 0 - -0.0682760030031204 - -5.4372339248657227 - 0.1115190014243126 - <_> - - <_> - - - - <_>2 2 18 8 -1. - <_>8 2 6 8 3. - 0 - -0.0349330008029938 - 0.4479340016841888 - -0.1865790039300919 - <_> - - <_> - - - - <_>10 9 14 4 -1. - <_>10 9 7 4 2. - 0 - 5.1219998858869076e-003 - -0.0148719996213913 - 0.1841389983892441 - <_> - - <_> - - - - <_>4 4 6 16 -1. - <_>7 4 3 16 2. - 0 - 0.0953119993209839 - -0.1511709988117218 - 0.9499149918556213 - <_> - - <_> - - - - <_>15 8 9 16 -1. - <_>18 8 3 16 3. - 0 - -0.0628490000963211 - 0.4647360146045685 - 0.0384050011634827 - <_> - - <_> - - - - <_>0 8 9 16 -1. - <_>3 8 3 16 3. - 0 - -0.1704069972038269 - -1.6499999761581421 - -0.0632369965314865 - <_> - - <_> - - - - <_>18 0 6 14 -1. - <_>20 0 2 14 3. - 0 - 0.0105839995667338 - -0.0383489988744259 - 0.4191380143165588 - <_> - - <_> - - - - <_>0 0 6 14 -1. - <_>2 0 2 14 3. - 0 - -0.0415790006518364 - 0.3446190059185028 - -0.2118770033121109 - <_> - - <_> - - - - <_>15 0 6 22 -1. - <_>17 0 2 22 3. - 0 - 0.1271860003471375 - 0.1239819973707199 - -2.1254889965057373 - <_> - - <_> - - - - <_>3 0 6 22 -1. - <_>5 0 2 22 3. - 0 - 0.0825570002198219 - -0.0620240010321140 - -1.4875819683074951 - <_> - - <_> - - - - <_>12 2 12 20 -1. - <_>16 2 4 20 3. - 0 - 0.0852930024266243 - 0.0170879997313023 - 0.3207660019397736 - <_> - - <_> - - - - <_>0 2 12 20 -1. - <_>4 2 4 20 3. - 0 - 0.0555440001189709 - -0.2741400003433228 - 0.1897639930248261 - <_> - - <_> - - - - <_>11 6 4 9 -1. - <_>11 6 2 9 2. - 0 - 4.5650000683963299e-003 - -0.1792020052671433 - 0.2796730101108551 - <_> - - <_> - - - - <_>9 0 6 16 -1. - <_>12 0 3 16 2. - 0 - 0.0129979997873306 - -0.3229750096797943 - 0.2694180011749268 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 7 3 6 2. - 0 - 0.0578919984400272 - 0.1264439970254898 - -0.6071349978446960 - <_> - - <_> - - - - <_>3 4 18 6 -1. - <_>3 4 9 3 2. - <_>12 7 9 3 2. - 0 - -0.0228240005671978 - -0.4968209862709045 - 0.0223769992589951 - <_> - - <_> - - - - <_>5 5 16 8 -1. - <_>13 5 8 4 2. - <_>5 9 8 4 2. - 0 - 0.0483120009303093 - 0.0436070002615452 - 0.4853779971599579 - <_> - - <_> - - - - <_>0 13 10 6 -1. - <_>0 15 10 2 3. - 0 - 0.0257140006870031 - -0.0429509989917278 - -0.9302350282669067 - <_> - - <_> - - - - <_>8 14 9 6 -1. - <_>8 16 9 2 3. - 0 - 6.9269998930394650e-003 - -2.9680000152438879e-003 - 0.3429630100727081 - <_> - - <_> - - - - <_>6 2 9 6 -1. - <_>9 2 3 6 3. - 0 - -0.0344469994306564 - -1.5299769639968872 - -0.0610149987041950 - <_> - - <_> - - - - <_>14 1 10 8 -1. - <_>19 1 5 4 2. - <_>14 5 5 4 2. - 0 - 0.0293879993259907 - 0.0375959984958172 - 0.6417239904403687 - <_> - - <_> - - - - <_>9 1 3 12 -1. - <_>9 7 3 6 2. - 0 - -2.4319998919963837e-003 - 0.0990889966487885 - -0.3968810141086578 - -3.3703000545501709 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>6 4 12 9 -1. - <_>6 7 12 3 3. - 0 - -0.0959440022706985 - 0.6241909861564636 - -0.4587520062923431 - <_> - - <_> - - - - <_>6 5 12 6 -1. - <_>10 5 4 6 3. - 0 - 0.0168340001255274 - -0.9307280182838440 - 0.2156360000371933 - <_> - - <_> - - - - <_>1 1 8 5 -1. - <_>5 1 4 5 2. - 0 - 0.0260499995201826 - -0.4053229987621307 - 0.4225659966468811 - <_> - - <_> - - - - <_>12 12 6 8 -1. - <_>12 16 6 4 2. - 0 - 3.6500001442618668e-004 - 0.0952880010008812 - -0.6329810023307800 - <_> - - <_> - - - - <_>3 12 12 6 -1. - <_>3 14 12 2 3. - 0 - -6.6940002143383026e-003 - 0.3724380135536194 - -0.3033240139484406 - <_> - - <_> - - - - <_>9 18 12 6 -1. - <_>15 18 6 3 2. - <_>9 21 6 3 2. - 0 - 0.0188740007579327 - -0.2335720062255859 - 0.4033069908618927 - <_> - - <_> - - - - <_>4 13 6 6 -1. - <_>4 16 6 3 2. - 0 - -1.6300000424962491e-004 - 0.0428869985044003 - -0.7779679894447327 - <_> - - <_> - - - - <_>11 3 7 18 -1. - <_>11 12 7 9 2. - 0 - -0.0762590020895004 - -0.4962849915027618 - 0.1633539944887161 - <_> - - <_> - - - - <_>3 9 18 3 -1. - <_>9 9 6 3 3. - 0 - 0.0501490011811256 - 0.0327470004558563 - -0.8004789948463440 - <_> - - <_> - - - - <_>5 3 19 2 -1. - <_>5 4 19 1 2. - 0 - -2.9239999130368233e-003 - -0.5000280141830444 - 0.2548060119152069 - <_> - - <_> - - - - <_>4 2 12 6 -1. - <_>4 2 6 3 2. - <_>10 5 6 3 2. - 0 - 0.0162439998239279 - 0.0389130003750324 - -0.7072489857673645 - <_> - - <_> - - - - <_>9 6 6 9 -1. - <_>11 6 2 9 3. - 0 - 0.0378119982779026 - -0.0662679970264435 - 0.7386879920959473 - <_> - - <_> - - - - <_>8 6 6 9 -1. - <_>10 6 2 9 3. - 0 - -0.0123199997469783 - 0.4869639873504639 - -0.2448559999465942 - <_> - - <_> - - - - <_>16 9 5 15 -1. - <_>16 14 5 5 3. - 0 - 0.0580039992928505 - 0.1345909982919693 - -0.1323210000991821 - <_> - - <_> - - - - <_>3 9 5 15 -1. - <_>3 14 5 5 3. - 0 - 4.8630000092089176e-003 - -0.4417290091514587 - 0.1400559991598129 - <_> - - <_> - - - - <_>6 6 14 6 -1. - <_>13 6 7 3 2. - <_>6 9 7 3 2. - 0 - 0.0456909984350204 - 0.0312179997563362 - 0.8981829881668091 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>8 13 3 7 2. - 0 - 0.0213210005313158 - 0.0120080001652241 - -0.8606619834899902 - <_> - - <_> - - - - <_>0 16 24 5 -1. - <_>8 16 8 5 3. - 0 - 0.1567910015583038 - 0.0140559999272227 - 0.8533290028572083 - <_> - - <_> - - - - <_>0 20 20 3 -1. - <_>10 20 10 3 2. - 0 - -0.0103289997205138 - 0.2902280092239380 - -0.2947880029678345 - <_> - - <_> - - - - <_>5 10 18 2 -1. - <_>5 11 18 1 2. - 0 - 2.4290001019835472e-003 - -0.4043990075588226 - 0.1940020024776459 - <_> - - <_> - - - - <_>0 6 6 10 -1. - <_>2 6 2 10 3. - 0 - -0.0233389995992184 - 0.3294520080089569 - -0.2571269869804382 - <_> - - <_> - - - - <_>2 1 20 3 -1. - <_>2 2 20 1 3. - 0 - -6.8970001302659512e-003 - -0.5335299968719482 - 0.2163520008325577 - <_> - - <_> - - - - <_>9 13 6 11 -1. - <_>11 13 2 11 3. - 0 - -0.0344030000269413 - -1.4425489902496338 - -0.0446829982101917 - <_> - - <_> - - - - <_>9 15 6 8 -1. - <_>9 19 6 4 2. - 0 - -0.0212350003421307 - -0.7901750206947327 - 0.1908410042524338 - <_> - - <_> - - - - <_>9 12 6 9 -1. - <_>9 15 6 3 3. - 0 - 2.0620001014322042e-003 - -0.2693119943141937 - 0.3148800134658814 - <_> - - <_> - - - - <_>5 11 18 2 -1. - <_>5 12 18 1 2. - 0 - -4.2190002277493477e-003 - -0.5446439981460571 - 0.1657460033893585 - <_> - - <_> - - - - <_>2 6 15 6 -1. - <_>2 8 15 2 3. - 0 - -0.0143349999561906 - 0.0221050009131432 - -0.6234250068664551 - <_> - - <_> - - - - <_>6 0 18 3 -1. - <_>6 1 18 1 3. - 0 - -8.2120001316070557e-003 - -0.4988499879837036 - 0.1923709958791733 - <_> - - <_> - - - - <_>5 0 3 18 -1. - <_>6 0 1 18 3. - 0 - -9.3350000679492950e-003 - -0.7913119792938232 - -0.0141439996659756 - <_> - - <_> - - - - <_>18 3 6 10 -1. - <_>20 3 2 10 3. - 0 - -0.0379379987716675 - 0.7984129786491394 - -0.0337990000844002 - <_> - - <_> - - - - <_>0 3 6 10 -1. - <_>2 3 2 10 3. - 0 - 4.7059999778866768e-003 - -0.3316340148448944 - 0.2072629928588867 - <_> - - <_> - - - - <_>10 5 8 9 -1. - <_>10 5 4 9 2. - 0 - -4.4499998912215233e-003 - -0.2725630104541779 - 0.1840219944715500 - <_> - - <_> - - - - <_>6 5 8 9 -1. - <_>10 5 4 9 2. - 0 - 5.2189999260008335e-003 - -0.5309600234031677 - 0.0526079982519150 - <_> - - <_> - - - - <_>3 2 20 3 -1. - <_>3 3 20 1 3. - 0 - -9.5399999991059303e-003 - -0.5648540258407593 - 0.1926939934492111 - <_> - - <_> - - - - <_>5 2 13 4 -1. - <_>5 4 13 2 2. - 0 - 0.0449699983000755 - -0.1741150021553040 - 0.9538260102272034 - <_> - - <_> - - - - <_>17 0 7 14 -1. - <_>17 7 7 7 2. - 0 - 0.0142090003937483 - -0.0919490009546280 - 0.2483610063791275 - <_> - - <_> - - - - <_>0 0 7 14 -1. - <_>0 7 7 7 2. - 0 - 0.1638019979000092 - -0.0584970004856586 - -1.6404409408569336 - <_> - - <_> - - - - <_>9 11 10 6 -1. - <_>9 11 5 6 2. - 0 - 2.5579999200999737e-003 - 0.2344799935817719 - -0.0927340015769005 - <_> - - <_> - - - - <_>5 11 10 6 -1. - <_>10 11 5 6 2. - 0 - -3.8499999791383743e-003 - 0.1788070052862167 - -0.3584409952163696 - <_> - - <_> - - - - <_>11 6 3 18 -1. - <_>11 12 3 6 3. - 0 - -0.0252219997346401 - -0.4290300011634827 - 0.2024450004100800 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - -0.0194150004535913 - 0.5801630020141602 - -0.1880639940500259 - <_> - - <_> - - - - <_>6 16 18 3 -1. - <_>6 17 18 1 3. - 0 - 0.0144199999049306 - 0.0328469984233379 - 0.8198050260543823 - <_> - - <_> - - - - <_>4 6 9 10 -1. - <_>4 11 9 5 2. - 0 - 0.0515829995274544 - 0.0691760033369064 - -0.4586629867553711 - <_> - - <_> - - - - <_>9 7 15 4 -1. - <_>9 9 15 2 2. - 0 - -0.0379600003361702 - -1.2553000450134277 - 0.1433289945125580 - <_> - - <_> - - - - <_>5 6 12 6 -1. - <_>5 6 6 3 2. - <_>11 9 6 3 2. - 0 - -0.0295609999448061 - 0.5315179824829102 - -0.2059649974107742 - <_> - - <_> - - - - <_>6 1 12 9 -1. - <_>6 4 12 3 3. - 0 - -0.0391109995543957 - 1.1658719778060913 - 0.0538970008492470 - <_> - - <_> - - - - <_>7 9 6 12 -1. - <_>7 9 3 6 2. - <_>10 15 3 6 2. - 0 - -0.0291590001434088 - 0.3930760025978088 - -0.2218450009822846 - <_> - - <_> - - - - <_>11 5 13 6 -1. - <_>11 7 13 2 3. - 0 - -0.0836170017719269 - -0.7374449968338013 - 0.1426820009946823 - <_> - - <_> - - - - <_>1 11 22 13 -1. - <_>12 11 11 13 2. - 0 - 0.4200400114059448 - -0.1427740007638931 - 1.7894840240478516 - <_> - - <_> - - - - <_>18 8 6 6 -1. - <_>18 11 6 3 2. - 0 - 0.0600050017237663 - 0.1197670027613640 - -1.8886189460754395 - <_> - - <_> - - - - <_>0 8 6 6 -1. - <_>0 11 6 3 2. - 0 - -0.0189810004085302 - -1.4148449897766113 - -0.0565229989588261 - <_> - - <_> - - - - <_>0 6 24 3 -1. - <_>0 7 24 1 3. - 0 - -6.0049998573958874e-003 - 0.4417079985141754 - -0.1020080000162125 - <_> - - <_> - - - - <_>0 5 10 6 -1. - <_>0 7 10 2 3. - 0 - -0.0582140013575554 - -1.3918470144271851 - -0.0482689999043942 - <_> - - <_> - - - - <_>6 7 18 3 -1. - <_>6 8 18 1 3. - 0 - -0.0122710000723600 - 0.5131769776344299 - -0.0936969965696335 - <_> - - <_> - - - - <_>0 0 10 6 -1. - <_>0 2 10 2 3. - 0 - 0.0465859994292259 - -0.0574840009212494 - -1.4283169507980347 - <_> - - <_> - - - - <_>19 0 3 19 -1. - <_>20 0 1 19 3. - 0 - 1.2110000243410468e-003 - -0.0808919966220856 - 0.3233320116996765 - <_> - - <_> - - - - <_>4 6 12 16 -1. - <_>4 6 6 8 2. - <_>10 14 6 8 2. - 0 - -0.0886420011520386 - -0.8644909858703613 - -0.0331469997763634 - <_> - - <_> - - - - <_>19 6 4 18 -1. - <_>21 6 2 9 2. - <_>19 15 2 9 2. - 0 - -0.0231849998235703 - 0.5216220021247864 - -0.0161680001765490 - <_> - - <_> - - - - <_>1 6 4 18 -1. - <_>1 6 2 9 2. - <_>3 15 2 9 2. - 0 - 0.0430900007486343 - -0.1615380048751831 - 1.0915000438690186 - <_> - - <_> - - - - <_>3 21 18 3 -1. - <_>3 22 18 1 3. - 0 - 2.0599999697878957e-004 - -0.1709149926900864 - 0.3123669922351837 - <_> - - <_> - - - - <_>0 19 9 4 -1. - <_>0 21 9 2 2. - 0 - 8.9159999042749405e-003 - -6.7039998248219490e-003 - -0.6881039738655090 - <_> - - <_> - - - - <_>12 18 12 6 -1. - <_>18 18 6 3 2. - <_>12 21 6 3 2. - 0 - -0.0177529994398355 - 0.6329280138015747 - -4.2360001243650913e-003 - <_> - - <_> - - - - <_>7 18 9 4 -1. - <_>7 20 9 2 2. - 0 - 6.2299999408423901e-003 - -0.3363719880580902 - 0.1279059946537018 - <_> - - <_> - - - - <_>12 16 10 8 -1. - <_>17 16 5 4 2. - <_>12 20 5 4 2. - 0 - 0.0227700006216764 - -0.0347039997577667 - 0.3914180099964142 - <_> - - <_> - - - - <_>2 16 10 8 -1. - <_>2 16 5 4 2. - <_>7 20 5 4 2. - 0 - -0.0215349998325109 - 0.6476510167121887 - -0.2009779959917069 - <_> - - <_> - - - - <_>14 0 10 12 -1. - <_>19 0 5 6 2. - <_>14 6 5 6 2. - 0 - 0.0617589987814426 - 0.0542970001697540 - 0.9070010185241699 - <_> - - <_> - - - - <_>0 0 10 12 -1. - <_>0 0 5 6 2. - <_>5 6 5 6 2. - 0 - -0.0780699998140335 - 0.6552339792251587 - -0.1975439935922623 - <_> - - <_> - - - - <_>15 14 9 6 -1. - <_>15 16 9 2 3. - 0 - 0.0113150002434850 - 0.1938530057668686 - -0.5170729756355286 - <_> - - <_> - - - - <_>0 14 9 6 -1. - <_>0 16 9 2 3. - 0 - -0.0255900006741285 - -0.9309650063514710 - -0.0315469987690449 - <_> - - <_> - - - - <_>14 14 10 6 -1. - <_>14 16 10 2 3. - 0 - -0.0380589999258518 - -0.6832690238952637 - 0.1270910054445267 - <_> - - <_> - - - - <_>0 14 10 6 -1. - <_>0 16 10 2 3. - 0 - 9.7970003262162209e-003 - 0.0155239999294281 - -0.6334789991378784 - <_> - - <_> - - - - <_>5 18 18 2 -1. - <_>5 19 18 1 2. - 0 - -0.0138419996947050 - 1.0060529708862305 - 0.0628129988908768 - <_> - - <_> - - - - <_>0 18 18 3 -1. - <_>0 19 18 1 3. - 0 - 8.3459997549653053e-003 - -0.2338320016860962 - 0.3098269999027252 - <_> - - <_> - - - - <_>3 5 18 12 -1. - <_>12 5 9 6 2. - <_>3 11 9 6 2. - 0 - -0.0714399963617325 - -0.7250540256500244 - 0.1714829951524735 - <_> - - <_> - - - - <_>5 3 7 9 -1. - <_>5 6 7 3 3. - 0 - 0.0100060002878308 - -0.2207199931144714 - 0.3526619970798492 - <_> - - <_> - - - - <_>4 0 19 15 -1. - <_>4 5 19 5 3. - 0 - 0.1100530028343201 - 0.1666200011968613 - -0.7431899905204773 - <_> - - <_> - - - - <_>3 0 16 4 -1. - <_>3 2 16 2 2. - 0 - 0.0353109985589981 - -0.2398270070552826 - 0.4143599867820740 - <_> - - <_> - - - - <_>4 12 16 12 -1. - <_>4 12 8 12 2. - 0 - -0.1117469966411591 - 0.5104539990425110 - 2.2319999989122152e-003 - <_> - - <_> - - - - <_>4 3 12 15 -1. - <_>10 3 6 15 2. - 0 - -0.1136780008673668 - 0.9047520160675049 - -0.1661529988050461 - <_> - - <_> - - - - <_>16 4 2 19 -1. - <_>16 4 1 19 2. - 0 - 0.0166679993271828 - 0.1402450054883957 - -0.5217850208282471 - <_> - - <_> - - - - <_>6 4 2 19 -1. - <_>7 4 1 19 2. - 0 - -8.0340001732110977e-003 - -0.6617839932441711 - 3.7640000227838755e-003 - <_> - - <_> - - - - <_>13 14 8 10 -1. - <_>17 14 4 5 2. - <_>13 19 4 5 2. - 0 - -0.0330969989299774 - 0.8018590211868286 - 0.0593850016593933 - <_> - - <_> - - - - <_>3 14 8 10 -1. - <_>3 14 4 5 2. - <_>7 19 4 5 2. - 0 - 0.0125479996204376 - -0.3354550004005432 - 0.1457860022783279 - <_> - - <_> - - - - <_>12 6 3 18 -1. - <_>12 12 3 6 3. - 0 - -0.0420739986002445 - -0.5550910234451294 - 0.1326660066843033 - <_> - - <_> - - - - <_>5 11 12 6 -1. - <_>5 11 6 3 2. - <_>11 14 6 3 2. - 0 - 0.0252219997346401 - -0.0616319999098778 - -1.3678770065307617 - <_> - - <_> - - - - <_>10 5 8 10 -1. - <_>14 5 4 5 2. - <_>10 10 4 5 2. - 0 - -0.0242689996957779 - 0.3418509960174561 - -7.4160001240670681e-003 - <_> - - <_> - - - - <_>6 4 12 10 -1. - <_>6 4 6 5 2. - <_>12 9 6 5 2. - 0 - -0.0122800003737211 - 0.2774580121040344 - -0.3103390038013458 - <_> - - <_> - - - - <_>6 8 18 10 -1. - <_>15 8 9 5 2. - <_>6 13 9 5 2. - 0 - -0.1137709990143776 - 1.1719540357589722 - 0.0836810022592545 - <_> - - <_> - - - - <_>0 8 18 10 -1. - <_>0 8 9 5 2. - <_>9 13 9 5 2. - 0 - -0.0847719982266426 - 0.8169479966163635 - -0.1783750057220459 - <_> - - <_> - - - - <_>12 6 3 18 -1. - <_>12 12 3 6 3. - 0 - -0.0245520006865263 - -0.1862729936838150 - 0.1434009969234467 - <_> - - <_> - - - - <_>0 14 18 3 -1. - <_>0 15 18 1 3. - 0 - -9.0269995853304863e-003 - 0.3265919983386993 - -0.2354129999876022 - <_> - - <_> - - - - <_>12 6 3 18 -1. - <_>12 12 3 6 3. - 0 - 0.0111779998987913 - 0.1976120024919510 - -0.0217010006308556 - <_> - - <_> - - - - <_>9 6 3 18 -1. - <_>9 12 3 6 3. - 0 - -0.0293669998645782 - -0.9341480135917664 - -0.0217049997299910 - <_> - - <_> - - - - <_>6 14 18 3 -1. - <_>6 15 18 1 3. - 0 - 6.3640000298619270e-003 - 0.0255730003118515 - 0.4641279876232147 - <_> - - <_> - - - - <_>0 5 18 3 -1. - <_>0 6 18 1 3. - 0 - 0.0140260001644492 - -0.2122859954833984 - 0.4007880091667175 - <_> - - <_> - - - - <_>2 5 22 3 -1. - <_>2 6 22 1 3. - 0 - -0.0133419996127486 - 0.7420269846916199 - 0.0290019996464252 - <_> - - <_> - - - - <_>0 0 21 10 -1. - <_>7 0 7 10 3. - 0 - 0.2842279970645905 - -0.1924359947443008 - 0.4363119900226593 - <_> - - <_> - - - - <_>6 3 18 17 -1. - <_>12 3 6 17 3. - 0 - -0.2372400015592575 - 0.6973639726638794 - 0.0693079978227615 - <_> - - <_> - - - - <_>0 3 18 17 -1. - <_>6 3 6 17 3. - 0 - -0.1116970032453537 - 0.3914720118045807 - -0.2092200070619583 - <_> - - <_> - - - - <_>0 12 24 11 -1. - <_>8 12 8 11 3. - 0 - 0.1278750002384186 - -0.0725559964776039 - 0.3608820140361786 - <_> - - <_> - - - - <_>4 10 16 6 -1. - <_>4 13 16 3 2. - 0 - -0.0629009976983070 - 0.9542499780654907 - -0.1540279984474182 - <_> - - <_> - - - - <_>12 8 6 8 -1. - <_>12 12 6 4 2. - 0 - 0.0174390003085136 - -0.0511349998414516 - 0.2775030136108398 - <_> - - <_> - - - - <_>6 14 8 7 -1. - <_>10 14 4 7 2. - 0 - 1.2319999514147639e-003 - 0.0756279975175858 - -0.3645609915256500 - <_> - - <_> - - - - <_>15 10 6 14 -1. - <_>18 10 3 7 2. - <_>15 17 3 7 2. - 0 - 0.0274950005114079 - 0.0518440008163452 - 0.4156259894371033 - <_> - - <_> - - - - <_>3 10 6 14 -1. - <_>3 10 3 7 2. - <_>6 17 3 7 2. - 0 - -0.0435439981520176 - 0.7196999788284302 - -0.1713220030069351 - <_> - - <_> - - - - <_>6 12 18 2 -1. - <_>6 13 18 1 2. - 0 - 0.0110259996727109 - 0.1435460001230240 - -0.6540300250053406 - <_> - - <_> - - - - <_>5 8 10 6 -1. - <_>5 10 10 2 3. - 0 - 0.0208659991621971 - 0.0400890000164509 - -0.4574329853057861 - <_> - - <_> - - - - <_>12 11 9 4 -1. - <_>12 13 9 2 2. - 0 - -0.0223040003329515 - 0.5385500192642212 - 0.0716629996895790 - <_> - - <_> - - - - <_>0 11 9 6 -1. - <_>0 13 9 2 3. - 0 - 0.0324920006096363 - -0.0459919981658459 - -1.0047069787979126 - <_> - - <_> - - - - <_>11 2 3 18 -1. - <_>12 2 1 18 3. - 0 - 0.0122699998319149 - 0.0343349985778332 - 0.4243179857730866 - <_> - - <_> - - - - <_>10 2 3 18 -1. - <_>11 2 1 18 3. - 0 - 8.3820000290870667e-003 - -0.2585060000419617 - 0.2626349925994873 - <_> - - <_> - - - - <_>9 12 6 10 -1. - <_>11 12 2 10 3. - 0 - 0.0373539999127388 - 0.1569249927997589 - -1.0429090261459351 - <_> - - <_> - - - - <_>1 10 6 9 -1. - <_>1 13 6 3 3. - 0 - -0.0141110001131892 - -0.7317770123481751 - -0.0202769991010427 - <_> - - <_> - - - - <_>6 9 16 6 -1. - <_>14 9 8 3 2. - <_>6 12 8 3 2. - 0 - 0.0570669993758202 - 0.0833600014448166 - 1.5661499500274658 - <_> - - <_> - - - - <_>1 8 9 6 -1. - <_>1 10 9 2 3. - 0 - 4.9680001102387905e-003 - -0.3531819880008698 - 0.1469839960336685 - <_> - - <_> - - - - <_>7 7 16 6 -1. - <_>7 9 16 2 3. - 0 - -0.0244929995387793 - 0.2832590043544769 - -3.4640000667423010e-003 - <_> - - <_> - - - - <_>0 0 18 3 -1. - <_>0 1 18 1 3. - 0 - -0.0112549997866154 - -0.8401749730110169 - -0.0362519994378090 - <_> - - <_> - - - - <_>10 0 6 9 -1. - <_>12 0 2 9 3. - 0 - 0.0345330014824867 - 0.1499850004911423 - -0.8736709952354431 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>12 5 3 6 2. - 0 - 0.0243030004203320 - -0.1878750026226044 - 0.5948399901390076 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>12 6 2 9 2. - <_>10 15 2 9 2. - 0 - -7.8790001571178436e-003 - 0.4431569874286652 - -0.0565709993243217 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>10 0 2 9 3. - 0 - 0.0351420007646084 - -0.0564949996769428 - -1.3617190122604370 - <_> - - <_> - - - - <_>9 1 6 9 -1. - <_>9 4 6 3 3. - 0 - 4.6259998343884945e-003 - -0.3116169869899750 - 0.2544769942760468 - <_> - - <_> - - - - <_>1 0 18 9 -1. - <_>1 3 18 3 3. - 0 - -0.0831310003995895 - 1.6424349546432495 - -0.1442939937114716 - <_> - - <_> - - - - <_>0 3 24 3 -1. - <_>0 4 24 1 3. - 0 - -0.0140159996226430 - -0.7781950235366821 - 0.1717330068349838 - <_> - - <_> - - - - <_>6 14 9 4 -1. - <_>6 16 9 2 2. - 0 - 1.2450000504031777e-003 - -0.2319139987230301 - 0.2852790057659149 - <_> - - <_> - - - - <_>8 9 8 10 -1. - <_>12 9 4 5 2. - <_>8 14 4 5 2. - 0 - -0.0168030001223087 - -0.3596509993076325 - 0.2041299939155579 - <_> - - <_> - - - - <_>5 2 13 9 -1. - <_>5 5 13 3 3. - 0 - -0.0767479985952377 - 0.7805050015449524 - -0.1561280041933060 - <_> - - <_> - - - - <_>4 4 16 9 -1. - <_>4 7 16 3 3. - 0 - -0.2367199957370758 - 1.1813700199127197 - 0.0781119987368584 - <_> - - <_> - - - - <_>4 4 14 9 -1. - <_>4 7 14 3 3. - 0 - -0.1005740016698837 - -0.4710409939289093 - 0.0791729986667633 - <_> - - <_> - - - - <_>8 5 9 6 -1. - <_>8 7 9 2 3. - 0 - 1.3239999534562230e-003 - 0.2226269990205765 - -0.3709979951381683 - <_> - - <_> - - - - <_>1 7 16 6 -1. - <_>1 9 16 2 3. - 0 - 0.0221529994159937 - -0.0386490002274513 - -0.9227499961853027 - <_> - - <_> - - - - <_>10 5 13 9 -1. - <_>10 8 13 3 3. - 0 - -0.1124619990587235 - 0.4189960062503815 - 0.0804110020399094 - <_> - - <_> - - - - <_>1 5 13 9 -1. - <_>1 8 13 3 3. - 0 - 0.0164810009300709 - -0.1675669997930527 - 0.7184240221977234 - <_> - - <_> - - - - <_>0 4 24 6 -1. - <_>12 4 12 3 2. - <_>0 7 12 3 2. - 0 - 0.0681139975786209 - 0.1571989953517914 - -0.8768110275268555 - <_> - - <_> - - - - <_>1 14 10 9 -1. - <_>1 17 10 3 3. - 0 - 0.0160119999200106 - -4.1600000113248825e-003 - -0.5932779908180237 - <_> - - <_> - - - - <_>5 17 18 3 -1. - <_>5 18 18 1 3. - 0 - 4.6640001237392426e-003 - -0.0301539991050959 - 0.4834530055522919 - <_> - - <_> - - - - <_>0 16 18 3 -1. - <_>0 17 18 1 3. - 0 - 6.7579997703433037e-003 - -0.2266740053892136 - 0.3366230130195618 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>9 19 9 2 3. - 0 - 4.7289999201893806e-003 - -0.0603739991784096 - 0.3145810067653656 - <_> - - <_> - - - - <_>1 20 22 4 -1. - <_>1 20 11 2 2. - <_>12 22 11 2 2. - 0 - 2.5869999080896378e-003 - -0.2987259924411774 - 0.1778749972581863 - <_> - - <_> - - - - <_>8 14 8 6 -1. - <_>8 17 8 3 2. - 0 - 2.8989999555051327e-003 - 0.2189020067453384 - -0.2956709861755371 - <_> - - <_> - - - - <_>8 6 8 15 -1. - <_>8 11 8 5 3. - 0 - -0.0300539992749691 - 1.2150429487228394 - -0.1435499936342239 - <_> - - <_> - - - - <_>5 4 18 3 -1. - <_>5 5 18 1 3. - 0 - 0.0141810001805425 - 0.0124519998207688 - 0.5549010038375855 - <_> - - <_> - - - - <_>9 3 5 10 -1. - <_>9 8 5 5 2. - 0 - -0.0605270005762577 - -1.4933999776840210 - -0.0652270019054413 - <_> - - <_> - - - - <_>6 8 12 3 -1. - <_>6 8 6 3 2. - 0 - -0.0198829993605614 - -0.3852640092372894 - 0.1976120024919510 - <_> - - <_> - - - - <_>2 6 18 6 -1. - <_>2 6 9 3 2. - <_>11 9 9 3 2. - 0 - 0.0312189999967813 - -0.2128120064735413 - 0.2944650053977966 - <_> - - <_> - - - - <_>10 6 4 18 -1. - <_>12 6 2 9 2. - <_>10 15 2 9 2. - 0 - 0.0182719994336367 - 9.7200000891461968e-004 - 0.6681420207023621 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>10 5 3 6 2. - 0 - 1.1089999461546540e-003 - -0.6246790289878845 - -1.6599999507889152e-003 - <_> - - <_> - - - - <_>14 5 2 18 -1. - <_>14 14 2 9 2. - 0 - -0.0367139987647533 - -0.4233390092849731 - 0.1208470016717911 - <_> - - <_> - - - - <_>8 5 2 18 -1. - <_>8 14 2 9 2. - 0 - 0.0120440004393458 - 0.0258820001035929 - -0.5073239803314209 - <_> - - <_> - - - - <_>9 2 10 6 -1. - <_>9 2 5 6 2. - 0 - 0.0747490003705025 - 0.1318469941616058 - -0.2173960059881210 - <_> - - <_> - - - - <_>3 1 18 12 -1. - <_>12 1 9 12 2. - 0 - -0.2347320020198822 - 1.1775610446929932 - -0.1511469930410385 - <_> - - <_> - - - - <_>5 2 17 22 -1. - <_>5 13 17 11 2. - 0 - 0.1409649997949600 - 0.0339910015463829 - 0.3992309868335724 - <_> - - <_> - - - - <_>4 0 12 6 -1. - <_>4 2 12 2 3. - 0 - 6.1789997853338718e-003 - -0.3180670142173767 - 0.1168169975280762 - <_> - - <_> - - - - <_>6 9 16 6 -1. - <_>14 9 8 3 2. - <_>6 12 8 3 2. - 0 - -0.0572169981896877 - 0.8439909815788269 - 0.0838890001177788 - <_> - - <_> - - - - <_>9 0 5 18 -1. - <_>9 9 5 9 2. - 0 - -0.0552270002663136 - 0.3688830137252808 - -0.1891340017318726 - <_> - - <_> - - - - <_>12 0 6 9 -1. - <_>14 0 2 9 3. - 0 - -0.0215830001980066 - -0.5216180086135864 - 0.1577260047197342 - <_> - - <_> - - - - <_>6 0 6 9 -1. - <_>8 0 2 9 3. - 0 - 0.0257479995489120 - -0.0599219985306263 - -1.0674990415573120 - <_> - - <_> - - - - <_>9 1 6 12 -1. - <_>11 1 2 12 3. - 0 - -0.0130989998579025 - 0.7895839810371399 - 0.0520999990403652 - <_> - - <_> - - - - <_>5 9 13 4 -1. - <_>5 11 13 2 2. - 0 - 2.2799998987466097e-003 - -1.1704430580139160 - -0.0593569986522198 - <_> - - <_> - - - - <_>5 8 19 3 -1. - <_>5 9 19 1 3. - 0 - 8.8060004636645317e-003 - 0.0417179986834526 - 0.6635259985923767 - <_> - - <_> - - - - <_>9 9 6 8 -1. - <_>9 13 6 4 2. - 0 - -8.9699998497962952e-003 - -0.3586269915103912 - 0.0604580007493496 - <_> - - <_> - - - - <_>11 9 4 15 -1. - <_>11 14 4 5 3. - 0 - 4.0230001322925091e-003 - 0.2097939997911453 - -0.2480600029230118 - <_> - - <_> - - - - <_>2 0 6 14 -1. - <_>2 0 3 7 2. - <_>5 7 3 7 2. - 0 - 0.0250170007348061 - -0.1879590004682541 - 0.3954710066318512 - <_> - - <_> - - - - <_>15 1 6 14 -1. - <_>18 1 3 7 2. - <_>15 8 3 7 2. - 0 - -5.9009999968111515e-003 - 0.2566390037536621 - -0.0949190035462379 - <_> - - <_> - - - - <_>3 1 6 14 -1. - <_>3 1 3 7 2. - <_>6 8 3 7 2. - 0 - 4.3850000947713852e-003 - 0.0331390015780926 - -0.4607540071010590 - <_> - - <_> - - - - <_>3 20 18 4 -1. - <_>12 20 9 2 2. - <_>3 22 9 2 2. - 0 - -0.0337719991803169 - -0.9888160228729248 - 0.1463689953088760 - <_> - - <_> - - - - <_>5 0 4 20 -1. - <_>5 0 2 10 2. - <_>7 10 2 10 2. - 0 - 0.0445230007171631 - -0.1328669935464859 - 1.5796790122985840 - <_> - - <_> - - - - <_>16 8 8 12 -1. - <_>20 8 4 6 2. - <_>16 14 4 6 2. - 0 - -0.0409290008246899 - 0.3387709856033325 - 0.0749709978699684 - <_> - - <_> - - - - <_>0 8 8 12 -1. - <_>0 8 4 6 2. - <_>4 14 4 6 2. - 0 - 0.0393519997596741 - -0.1832789927721024 - 0.4698069989681244 - <_> - - <_> - - - - <_>13 13 10 8 -1. - <_>18 13 5 4 2. - <_>13 17 5 4 2. - 0 - -0.0703229978680611 - -0.9832270145416260 - 0.1180810034275055 - <_> - - <_> - - - - <_>1 13 10 8 -1. - <_>1 13 5 4 2. - <_>6 17 5 4 2. - 0 - 0.0357430018484592 - -0.0330509990453720 - -0.8361089825630188 - <_> - - <_> - - - - <_>15 8 4 15 -1. - <_>15 13 4 5 3. - 0 - -0.0429619997739792 - 1.1670809984207153 - 0.0806920006871223 - <_> - - <_> - - - - <_>5 8 4 15 -1. - <_>5 13 4 5 3. - 0 - -0.0210079997777939 - 0.6386979818344116 - -0.1762630045413971 - <_> - - <_> - - - - <_>6 11 16 12 -1. - <_>6 15 16 4 3. - 0 - -0.1574220061302185 - -0.2330249994993210 - 0.1251749992370606 - <_> - - <_> - - - - <_>2 11 16 12 -1. - <_>2 15 16 4 3. - 0 - 7.8659998252987862e-003 - -0.2203799933195114 - 0.2719680070877075 - <_> - - <_> - - - - <_>14 12 7 9 -1. - <_>14 15 7 3 3. - 0 - 0.0236220005899668 - 0.1612730026245117 - -0.4332900047302246 - <_> - - <_> - - - - <_>10 1 3 21 -1. - <_>10 8 3 7 3. - 0 - 0.0746920034289360 - -0.1699199974536896 - 0.5888490080833435 - <_> - - <_> - - - - <_>13 11 9 4 -1. - <_>13 13 9 2 2. - 0 - -6.4799998654052615e-004 - 0.2584289908409119 - -0.0359119996428490 - <_> - - <_> - - - - <_>3 10 17 9 -1. - <_>3 13 17 3 3. - 0 - -0.0162909999489784 - -0.7676439881324768 - -0.0204729996621609 - <_> - - <_> - - - - <_>13 8 8 15 -1. - <_>13 13 8 5 3. - 0 - -0.0331339985132217 - -0.2718009948730469 - 0.1432570070028305 - <_> - - <_> - - - - <_>3 8 8 15 -1. - <_>3 13 8 5 3. - 0 - 0.0487979985773563 - 0.0764089971780777 - -0.4144519865512848 - <_> - - <_> - - - - <_>11 14 10 8 -1. - <_>16 14 5 4 2. - <_>11 18 5 4 2. - 0 - 2.2869999520480633e-003 - -0.0386289991438389 - 0.2075379937887192 - <_> - - <_> - - - - <_>0 18 22 6 -1. - <_>0 18 11 3 2. - <_>11 21 11 3 2. - 0 - 0.0453040003776550 - -0.1777790039777756 - 0.6346139907836914 - <_> - - <_> - - - - <_>0 16 24 4 -1. - <_>0 16 12 4 2. - 0 - 0.1070580035448074 - 0.1897229999303818 - -0.5123620033264160 - <_> - - <_> - - - - <_>6 20 12 3 -1. - <_>12 20 6 3 2. - 0 - -0.0405250005424023 - 0.7061499953269959 - -0.1780329942703247 - <_> - - <_> - - - - <_>18 12 6 12 -1. - <_>21 12 3 6 2. - <_>18 18 3 6 2. - 0 - 0.0319689996540546 - 0.0681499987840652 - 0.6873310208320618 - <_> - - <_> - - - - <_>0 12 6 12 -1. - <_>0 12 3 6 2. - <_>3 18 3 6 2. - 0 - -0.0576170012354851 - 0.7517049908638001 - -0.1576499938964844 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - 0.0135939996689558 - 0.1941190063953400 - -0.2456189990043640 - <_> - - <_> - - - - <_>1 6 22 10 -1. - <_>1 6 11 5 2. - <_>12 11 11 5 2. - 0 - 0.0713960006833076 - -0.0468810014426708 - -0.8819829821586609 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - -0.0148959998041391 - -0.4453240036964417 - 0.1767989993095398 - <_> - - <_> - - - - <_>0 18 18 2 -1. - <_>0 19 18 1 2. - 0 - -0.0100260004401207 - 0.6512269973754883 - -0.1670999974012375 - <_> - - <_> - - - - <_>3 15 19 3 -1. - <_>3 16 19 1 3. - 0 - 3.7589999847114086e-003 - -0.0583010017871857 - 0.3448329865932465 - <_> - - <_> - - - - <_>0 13 18 3 -1. - <_>0 14 18 1 3. - 0 - 0.0162630006670952 - -0.1558150053024292 - 0.8643270134925842 - <_> - - <_> - - - - <_>15 17 9 6 -1. - <_>15 19 9 2 3. - 0 - -0.0401760004460812 - -0.6102859973907471 - 0.1179639995098114 - <_> - - <_> - - - - <_>0 17 9 6 -1. - <_>0 19 9 2 3. - 0 - 0.0270809996873140 - -0.0496019981801510 - -0.8999000191688538 - <_> - - <_> - - - - <_>12 17 9 6 -1. - <_>12 19 9 2 3. - 0 - 0.0524200014770031 - 0.1129719987511635 - -1.0833640098571777 - <_> - - <_> - - - - <_>3 17 9 6 -1. - <_>3 19 9 2 3. - 0 - -0.0191600006073713 - -0.7988010048866272 - -0.0340790003538132 - <_> - - <_> - - - - <_>16 2 3 20 -1. - <_>17 2 1 20 3. - 0 - -3.7730000913143158e-003 - -0.1912409961223602 - 0.2153519988059998 - <_> - - <_> - - - - <_>0 13 24 8 -1. - <_>0 17 24 4 2. - 0 - 0.0757620036602020 - -0.1342169940471649 - 1.6807060241699219 - <_> - - <_> - - - - <_>9 1 6 22 -1. - <_>12 1 3 11 2. - <_>9 12 3 11 2. - 0 - -0.0221730004996061 - 0.4860099852085114 - 3.6160000599920750e-003 - -2.9928278923034668 - 23 - -1 - diff --git a/data/haarcascades/haarcascade_fullbody.xml b/data/haarcascades/haarcascade_fullbody.xml deleted file mode 100644 index f1eaf5b..0000000 --- a/data/haarcascades/haarcascade_fullbody.xml +++ /dev/null @@ -1,18118 +0,0 @@ - - - - - 14 28 - - <_> - - - <_> - - <_> - - - - <_>1 5 12 21 -1. - <_>5 5 4 21 3. - 0 - -0.0558205693960190 - 0.5869792103767395 - -0.6281142234802246 - <_> - - <_> - - - - <_>9 2 3 26 -1. - <_>9 15 3 13 2. - 0 - -0.0388611815869808 - -0.7091681957244873 - 0.2682121098041534 - <_> - - <_> - - - - <_>1 4 12 23 -1. - <_>5 4 4 23 3. - 0 - -0.2674087882041931 - 0.8308296203613281 - -0.2259958982467651 - <_> - - <_> - - - - <_>1 7 12 9 -1. - <_>4 7 6 9 2. - 0 - 0.0964197367429733 - -0.1169784963130951 - 0.8725455999374390 - <_> - - <_> - - - - <_>3 12 3 16 -1. - <_>3 20 3 8 2. - 0 - -0.0107987103983760 - -0.5721974968910217 - 0.2532565891742706 - <_> - - <_> - - - - <_>4 8 6 6 -1. - <_>4 11 6 3 2. - 0 - 0.0113656399771571 - 0.1965083032846451 - -0.7274463772773743 - <_> - - <_> - - - - <_>1 25 12 3 -1. - <_>5 25 4 3 3. - 0 - -5.0216919044032693e-004 - 0.2443515956401825 - -0.5197358131408691 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -0.0284624807536602 - -0.8360729217529297 - 0.1115804016590118 - <_> - - <_> - - - - <_>4 2 4 12 -1. - <_>4 2 2 6 2. - <_>6 8 2 6 2. - 0 - 1.3473170110955834e-003 - -0.3840653896331787 - 0.2676798999309540 - -1.2288980484008789 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>3 15 8 11 -1. - <_>5 15 4 11 2. - 0 - -0.0107432203367352 - 0.4774732887744904 - -0.6239293217658997 - <_> - - <_> - - - - <_>6 9 6 6 -1. - <_>8 9 2 6 3. - 0 - -1.3188569573685527e-003 - 0.2124266028404236 - -0.2416270971298218 - <_> - - <_> - - - - <_>2 9 6 6 -1. - <_>4 9 2 6 3. - 0 - -5.5571161210536957e-003 - 0.3614785969257355 - -0.3725171983242035 - <_> - - <_> - - - - <_>8 0 5 28 -1. - <_>8 14 5 14 2. - 0 - -0.1389341056346893 - -0.6790050268173218 - 0.1128031015396118 - <_> - - <_> - - - - <_>2 24 10 4 -1. - <_>7 24 5 4 2. - 0 - 0.0264658294618130 - 0.1247496977448463 - -0.8285233974456787 - <_> - - <_> - - - - <_>3 15 8 11 -1. - <_>5 15 4 11 2. - 0 - -0.0893868431448936 - 0.7427176237106323 - -0.1701931953430176 - <_> - - <_> - - - - <_>0 25 14 3 -1. - <_>7 25 7 3 2. - 0 - -0.0213354192674160 - -0.7175018787384033 - 0.1556618064641953 - <_> - - <_> - - - - <_>1 11 12 13 -1. - <_>5 11 4 13 3. - 0 - 0.0557091012597084 - -0.1531004011631012 - 0.7180476784706116 - <_> - - <_> - - - - <_>1 2 12 21 -1. - <_>5 9 4 7 9. - 0 - -0.6970995068550110 - 0.8115419149398804 - -0.1088638976216316 - <_> - - <_> - - - - <_>10 0 3 28 -1. - <_>10 14 3 14 2. - 0 - 0.2020599991083145 - 0.0763984173536301 - -0.7301151156425476 - <_> - - <_> - - - - <_>1 0 3 28 -1. - <_>1 14 3 14 2. - 0 - -0.0718826577067375 - -0.7148858904838562 - 0.1651764959096909 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>8 5 3 4 2. - <_>5 9 3 4 2. - 0 - -0.0192287601530552 - -0.3986836969852448 - 0.0405572392046452 - <_> - - <_> - - - - <_>3 5 6 8 -1. - <_>3 5 3 4 2. - <_>6 9 3 4 2. - 0 - 1.1500229593366385e-003 - -0.3826077878475189 - 0.3185507953166962 - <_> - - <_> - - - - <_>10 16 4 12 -1. - <_>12 16 2 6 2. - <_>10 22 2 6 2. - 0 - 0.0232527796179056 - 0.0543904006481171 - -0.7066999077796936 - <_> - - <_> - - - - <_>4 8 6 4 -1. - <_>4 10 6 2 2. - 0 - -3.2618120894767344e-004 - 0.2261060029268265 - -0.4070987999439240 - -1.0969949960708618 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>3 5 8 21 -1. - <_>5 5 4 21 2. - 0 - -0.1291020065546036 - 0.7600312829017639 - -0.2340579032897949 - <_> - - <_> - - - - <_>1 15 12 12 -1. - <_>7 15 6 6 2. - <_>1 21 6 6 2. - 0 - 0.0674492567777634 - 0.1717952936887741 - -0.8436477780342102 - <_> - - <_> - - - - <_>0 25 12 3 -1. - <_>6 25 6 3 2. - 0 - 0.0126632703468204 - 0.2291321009397507 - -0.7307245731353760 - <_> - - <_> - - - - <_>8 14 3 8 -1. - <_>8 14 3 4 2. - 1 - -4.2741331271827221e-003 - 0.0624204799532890 - -0.4098593890666962 - <_> - - <_> - - - - <_>0 25 8 3 -1. - <_>4 25 4 3 2. - 0 - -0.0231439508497715 - -0.8397182822227478 - 0.2011574953794479 - <_> - - <_> - - - - <_>2 24 12 4 -1. - <_>5 24 6 4 2. - 0 - -5.5371038615703583e-004 - 0.1536941975355148 - -0.4403811097145081 - <_> - - <_> - - - - <_>1 18 4 6 -1. - <_>3 18 2 6 2. - 0 - -9.5239803194999695e-003 - -0.6318680047988892 - 0.1625023037195206 - <_> - - <_> - - - - <_>8 8 4 7 -1. - <_>8 8 2 7 2. - 0 - 0.0283076707273722 - -0.0725999698042870 - 0.3791998922824860 - <_> - - <_> - - - - <_>2 8 4 7 -1. - <_>4 8 2 7 2. - 0 - -0.0451480187475681 - 0.7449362874031067 - -0.1558171063661575 - <_> - - <_> - - - - <_>1 3 12 18 -1. - <_>1 3 6 18 2. - 0 - 0.1001473963260651 - 0.1794963926076889 - -0.6464408040046692 - <_> - - <_> - - - - <_>1 20 4 8 -1. - <_>3 20 2 8 2. - 0 - 7.3245721869170666e-003 - 0.1776389926671982 - -0.5765405893325806 - <_> - - <_> - - - - <_>6 10 7 18 -1. - <_>6 19 7 9 2. - 0 - 0.0118756704032421 - -0.3112972080707550 - 0.1632139980792999 - <_> - - <_> - - - - <_>4 8 3 13 -1. - <_>5 8 1 13 3. - 0 - -0.0254790391772985 - 0.6269248127937317 - -0.1133375018835068 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - -7.9196523874998093e-003 - -0.7762442827224731 - 0.1542761027812958 - -1.2285970449447632 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>1 0 12 27 -1. - <_>5 9 4 9 9. - 0 - -0.8580927848815918 - 0.7879683971405029 - -0.2213554978370667 - <_> - - <_> - - - - <_>2 20 12 7 -1. - <_>5 20 6 7 2. - 0 - -1.6491119749844074e-003 - 0.2567340135574341 - -0.4319424033164978 - <_> - - <_> - - - - <_>2 25 10 3 -1. - <_>7 25 5 3 2. - 0 - -0.0258823093026876 - -0.8755123019218445 - 0.0883856266736984 - <_> - - <_> - - - - <_>0 26 14 2 -1. - <_>0 26 7 2 2. - 0 - -4.7666151076555252e-003 - -0.4702236950397492 - 0.2280080020427704 - <_> - - <_> - - - - <_>3 15 8 9 -1. - <_>5 15 4 9 2. - 0 - -0.0837296992540360 - 0.6338573098182678 - -0.1488831937313080 - <_> - - <_> - - - - <_>8 23 6 5 -1. - <_>8 23 3 5 2. - 0 - -0.0406857393682003 - -0.9393178820610046 - 0.0105989398434758 - <_> - - <_> - - - - <_>0 26 14 2 -1. - <_>7 26 7 2 2. - 0 - -5.0759920850396156e-003 - -0.4555442035198212 - 0.1786437034606934 - <_> - - <_> - - - - <_>8 10 2 18 -1. - <_>8 19 2 9 2. - 0 - 2.3427829146385193e-003 - -0.2143428027629852 - 0.1553142070770264 - <_> - - <_> - - - - <_>4 4 4 12 -1. - <_>4 4 2 6 2. - <_>6 10 2 6 2. - 0 - 2.7649151161313057e-004 - -0.3334816098213196 - 0.2278023958206177 - <_> - - <_> - - - - <_>4 24 9 4 -1. - <_>7 24 3 4 3. - 0 - 0.0169418398290873 - 0.0741408169269562 - -0.5626205205917358 - <_> - - <_> - - - - <_>1 3 12 15 -1. - <_>5 8 4 5 9. - 0 - 0.4755898118019104 - -0.1086113005876541 - 0.8298525810241699 - <_> - - <_> - - - - <_>11 16 2 12 -1. - <_>11 16 1 12 2. - 0 - 5.8000627905130386e-003 - 0.1324903070926666 - -0.5162039995193481 - <_> - - <_> - - - - <_>2 4 7 16 -1. - <_>2 12 7 8 2. - 0 - -0.0744775608181953 - -0.5554556846618652 - 0.1234432011842728 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 0 - -3.5143009154126048e-004 - 0.0681907534599304 - -0.1361685991287231 - <_> - - <_> - - - - <_>3 8 8 6 -1. - <_>3 11 8 3 2. - 0 - 7.3454021476209164e-003 - 0.1367851048707962 - -0.5364512205123901 - <_> - - <_> - - - - <_>8 8 6 8 -1. - <_>10 8 2 8 3. - 0 - -0.0154712796211243 - 0.2618063986301422 - -0.1054581031203270 - <_> - - <_> - - - - <_>0 8 6 7 -1. - <_>2 8 2 7 3. - 0 - 5.6055500172078609e-003 - -0.2574635148048401 - 0.2879593074321747 - <_> - - <_> - - - - <_>2 25 12 3 -1. - <_>6 25 4 3 3. - 0 - -2.4552858667448163e-004 - 0.1009993031620979 - -0.2611967921257019 - <_> - - <_> - - - - <_>0 25 12 3 -1. - <_>4 25 4 3 3. - 0 - -0.0331389009952545 - -0.8377956748008728 - 0.1132768988609314 - <_> - - <_> - - - - <_>1 7 12 4 -1. - <_>1 7 6 4 2. - 0 - 0.0355918891727924 - 0.0823360905051231 - -0.6250566244125366 - <_> - - <_> - - - - <_>0 2 14 12 -1. - <_>7 2 7 12 2. - 0 - 0.2083403021097183 - 0.0695244371891022 - -0.8688114881515503 - <_> - - <_> - - - - <_>0 19 14 6 -1. - <_>7 19 7 3 2. - <_>0 22 7 3 2. - 0 - -0.0281654000282288 - -0.5979984998703003 - 0.0803299024701118 - -1.1200269460678101 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>5 14 4 6 3. - 0 - -0.0267407093197107 - 0.3891242146492004 - -0.4982767999172211 - <_> - - <_> - - - - <_>2 24 12 4 -1. - <_>5 24 6 4 2. - 0 - -1.2516999850049615e-003 - 0.1312343031167984 - -0.3636899888515472 - <_> - - <_> - - - - <_>2 1 4 14 -1. - <_>2 1 2 7 2. - <_>4 8 2 7 2. - 0 - -0.0416345112025738 - 0.5744475126266480 - -0.1393287926912308 - <_> - - <_> - - - - <_>10 3 4 6 -1. - <_>10 3 2 6 2. - 1 - 0.0100965797901154 - 0.0990737974643707 - -0.2295698970556259 - <_> - - <_> - - - - <_>4 3 6 4 -1. - <_>4 3 6 2 2. - 1 - -0.0190903991460800 - -0.5515310764312744 - 0.1511006951332092 - <_> - - <_> - - - - <_>0 16 14 8 -1. - <_>0 16 7 8 2. - 0 - -0.0314810685813427 - -0.4588426947593689 - 0.1757954955101013 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -0.0176875498145819 - 0.4471183121204376 - -0.1529293060302734 - <_> - - <_> - - - - <_>7 15 4 7 -1. - <_>7 15 2 7 2. - 0 - -4.3685659766197205e-003 - 0.1218549013137817 - -0.1668857038021088 - <_> - - <_> - - - - <_>3 15 4 8 -1. - <_>5 15 2 8 2. - 0 - 8.9326845481991768e-003 - -0.1333369016647339 - 0.6375334262847900 - <_> - - <_> - - - - <_>9 17 4 8 -1. - <_>9 17 2 8 2. - 0 - -5.0706309266388416e-003 - -0.1122028976678848 - 0.0698243528604507 - <_> - - <_> - - - - <_>1 17 4 8 -1. - <_>3 17 2 8 2. - 0 - -5.9803090989589691e-003 - -0.5184289813041687 - 0.1609919965267181 - <_> - - <_> - - - - <_>9 18 4 7 -1. - <_>9 18 2 7 2. - 0 - 2.9967839363962412e-003 - 0.0410653389990330 - -0.1945585012435913 - <_> - - <_> - - - - <_>1 18 4 7 -1. - <_>3 18 2 7 2. - 0 - 3.8641549181193113e-003 - 0.1667324006557465 - -0.4356977939605713 - <_> - - <_> - - - - <_>7 5 4 6 -1. - <_>7 5 2 6 2. - 1 - 6.8349428474903107e-003 - -0.1716264039278030 - 0.1481806039810181 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>7 5 6 2 2. - 1 - 0.0431584902107716 - 0.0832035094499588 - -0.7782185077667236 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - 7.6560080051422119e-003 - 0.0847408026456833 - -0.4973815083503723 - <_> - - <_> - - - - <_>4 7 3 12 -1. - <_>5 7 1 12 3. - 0 - -3.1110988929867744e-003 - 0.2582714855670929 - -0.2555203139781952 - <_> - - <_> - - - - <_>1 7 12 11 -1. - <_>4 7 6 11 2. - 0 - 0.1187030971050263 - -0.0909442380070686 - 0.7228621244430542 - <_> - - <_> - - - - <_>6 13 8 4 -1. - <_>6 13 4 4 2. - 1 - 0.0168759692460299 - 0.1262917071580887 - -0.5520529747009277 - <_> - - <_> - - - - <_>5 22 6 4 -1. - <_>5 22 3 4 2. - 0 - -1.0887029930017889e-004 - 0.0816487967967987 - -0.1693702042102814 - <_> - - <_> - - - - <_>0 26 14 2 -1. - <_>7 26 7 2 2. - 0 - 2.8222990222275257e-003 - 0.1641130000352860 - -0.3521826863288879 - <_> - - <_> - - - - <_>1 3 12 18 -1. - <_>5 9 4 6 9. - 0 - -0.5242584943771362 - 0.4890617132186890 - -0.1267475932836533 - <_> - - <_> - - - - <_>0 6 9 22 -1. - <_>0 17 9 11 2. - 0 - 0.3692750930786133 - 0.0861159935593605 - -0.6718463897705078 - <_> - - <_> - - - - <_>1 1 12 24 -1. - <_>7 1 6 12 2. - <_>1 13 6 12 2. - 0 - -0.1688378006219864 - -0.8491569161415100 - 0.0548333488404751 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -0.0192792601883411 - -0.7801151275634766 - 0.0622026808559895 - -1.0664960145950317 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 12 23 -1. - <_>5 4 4 23 3. - 0 - -0.2090135067701340 - 0.6980816721916199 - -0.3457359075546265 - <_> - - <_> - - - - <_>5 22 6 5 -1. - <_>5 22 3 5 2. - 0 - -4.8061009147204459e-004 - 0.2092390060424805 - -0.2414764016866684 - <_> - - <_> - - - - <_>3 22 6 5 -1. - <_>6 22 3 5 2. - 0 - -2.4844119325280190e-003 - 0.2763600945472717 - -0.4199039936065674 - <_> - - <_> - - - - <_>5 1 4 6 -1. - <_>5 4 4 3 2. - 0 - -2.1536289714276791e-003 - 0.2471046000719070 - -0.3067789971828461 - <_> - - <_> - - - - <_>1 8 12 8 -1. - <_>4 8 6 8 2. - 0 - 0.0589119903743267 - -0.0708347633481026 - 0.7113314270973206 - <_> - - <_> - - - - <_>6 8 5 12 -1. - <_>6 11 5 6 2. - 0 - -2.3095219512470067e-004 - 0.1714860051870346 - -0.3616837859153748 - <_> - - <_> - - - - <_>0 20 14 6 -1. - <_>0 20 7 3 2. - <_>7 23 7 3 2. - 0 - -0.0313964001834393 - -0.8013188242912293 - 0.1004256010055542 - <_> - - <_> - - - - <_>6 9 6 6 -1. - <_>8 9 2 6 3. - 0 - -3.5601970739662647e-003 - 0.0994327664375305 - -0.1484826058149338 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>7 8 2 6 2. - 0 - -4.3389322236180305e-003 - -0.5662124156951904 - 0.1409679949283600 - <_> - - <_> - - - - <_>2 13 12 15 -1. - <_>2 18 12 5 3. - 0 - 0.2132671028375626 - 0.0481582097709179 - -0.7485890984535217 - <_> - - <_> - - - - <_>0 16 4 12 -1. - <_>0 16 2 6 2. - <_>2 22 2 6 2. - 0 - 0.0100425295531750 - 0.1042840033769608 - -0.5538737773895264 - <_> - - <_> - - - - <_>9 2 2 26 -1. - <_>10 2 1 13 2. - <_>9 15 1 13 2. - 0 - -0.0268252808600664 - 0.5728160738945007 - -0.0825379788875580 - <_> - - <_> - - - - <_>3 2 2 26 -1. - <_>3 2 1 13 2. - <_>4 15 1 13 2. - 0 - 8.3760882262140512e-004 - -0.2562690079212189 - 0.2589842081069946 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - -7.6051978394389153e-003 - -0.5867735743522644 - 0.0512107796967030 - <_> - - <_> - - - - <_>0 1 12 12 -1. - <_>4 5 4 4 9. - 0 - -0.1193564012646675 - -0.4553082883358002 - 0.1257033050060272 - <_> - - <_> - - - - <_>6 15 3 12 -1. - <_>7 15 1 12 3. - 0 - 6.6083478741347790e-003 - -0.1631637960672379 - 0.4665954113006592 - <_> - - <_> - - - - <_>5 10 3 15 -1. - <_>6 10 1 15 3. - 0 - 0.0173035096377134 - -0.1239140033721924 - 0.5975540876388550 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - 5.4382272064685822e-003 - 0.1383872926235199 - -0.5506920218467712 - <_> - - <_> - - - - <_>0 10 8 18 -1. - <_>0 19 8 9 2. - 0 - 2.4591449182480574e-003 - -0.3992733955383301 - 0.1538708955049515 - <_> - - <_> - - - - <_>5 16 8 12 -1. - <_>9 16 4 6 2. - <_>5 22 4 6 2. - 0 - 3.5056238994002342e-003 - -0.1614670008420944 - 0.1608660072088242 - <_> - - <_> - - - - <_>0 25 8 3 -1. - <_>4 25 4 3 2. - 0 - -2.3172689543571323e-004 - 0.1705936044454575 - -0.3540942072868347 - <_> - - <_> - - - - <_>0 17 14 8 -1. - <_>7 17 7 4 2. - <_>0 21 7 4 2. - 0 - 0.0119145298376679 - 0.1626563966274262 - -0.4146318137645721 - -1.2319500446319580 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>2 15 6 4 -1. - <_>5 15 3 4 2. - 0 - -4.5429700985550880e-003 - 0.4296497106552124 - -0.5691584944725037 - <_> - - <_> - - - - <_>5 23 9 4 -1. - <_>8 23 3 4 3. - 0 - 4.6804840676486492e-003 - -0.1038008034229279 - 0.2545371949672699 - <_> - - <_> - - - - <_>0 23 9 5 -1. - <_>3 23 3 5 3. - 0 - 3.5870380233973265e-003 - -0.3657707870006561 - 0.3934333920478821 - <_> - - <_> - - - - <_>1 4 12 22 -1. - <_>5 4 4 22 3. - 0 - -0.3442833125591278 - 0.7312576174736023 - -0.1506024003028870 - <_> - - <_> - - - - <_>1 4 5 24 -1. - <_>1 10 5 12 2. - 0 - 0.0330544598400593 - 0.1765758991241455 - -0.5106050968170166 - <_> - - <_> - - - - <_>2 23 12 4 -1. - <_>5 23 6 4 2. - 0 - -2.1190310362726450e-003 - 0.0868593230843544 - -0.1773376017808914 - <_> - - <_> - - - - <_>3 16 4 12 -1. - <_>5 16 2 12 2. - 0 - 0.0137807400897145 - -0.1224716976284981 - 0.6647294163703919 - <_> - - <_> - - - - <_>1 17 12 11 -1. - <_>1 17 6 11 2. - 0 - 0.0248479507863522 - 0.2397679984569550 - -0.3245661854743958 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -0.0131266303360462 - 0.4946180880069733 - -0.2095437943935394 - <_> - - <_> - - - - <_>8 17 4 6 -1. - <_>8 17 4 3 2. - 1 - -0.0168861895799637 - -0.1397399008274078 - 0.0750131607055664 - <_> - - <_> - - - - <_>7 16 4 6 -1. - <_>7 16 2 6 2. - 1 - -5.2776751108467579e-003 - -0.3891935944557190 - 0.1892151981592178 - <_> - - <_> - - - - <_>6 2 4 6 -1. - <_>6 2 2 6 2. - 0 - -2.0325549412518740e-003 - 0.2496545016765595 - -0.1796036064624786 - <_> - - <_> - - - - <_>2 12 5 16 -1. - <_>2 20 5 8 2. - 0 - -0.0180568005889654 - -0.5368307232856751 - 0.1061547994613648 - <_> - - <_> - - - - <_>6 13 3 14 -1. - <_>7 13 1 14 3. - 0 - -0.0288151092827320 - 0.5330320000648499 - -0.0787126868963242 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 6 4 3 2. - 1 - -0.0609716586768627 - -0.8566309213638306 - 0.0817214474081993 - <_> - - <_> - - - - <_>0 8 14 6 -1. - <_>0 11 14 3 2. - 0 - -0.0620221607387066 - -0.6722896099090576 - 0.0823169872164726 - <_> - - <_> - - - - <_>2 7 4 7 -1. - <_>4 7 2 7 2. - 0 - -6.2961759977042675e-003 - 0.2719230949878693 - -0.2371349036693573 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 0 - 4.9608140252530575e-003 - -0.1429551988840103 - 0.2938036918640137 - -1.1912549734115601 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>3 13 8 13 -1. - <_>5 13 4 13 2. - 0 - -0.0870013535022736 - 0.6308742761611939 - -0.2626413106918335 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>10 2 2 6 2. - <_>8 8 2 6 2. - 0 - -4.5627020299434662e-003 - 0.1464183926582336 - -0.0523218810558319 - <_> - - <_> - - - - <_>2 2 4 12 -1. - <_>2 2 2 6 2. - <_>4 8 2 6 2. - 0 - -4.1381991468369961e-003 - 0.2174759954214096 - -0.3210794031620026 - <_> - - <_> - - - - <_>6 24 8 3 -1. - <_>6 24 4 3 2. - 0 - -1.9443330529611558e-004 - 0.1430500000715256 - -0.4474846124649048 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -2.6125069707632065e-003 - -0.3593623042106628 - 0.2093449980020523 - <_> - - <_> - - - - <_>0 21 14 6 -1. - <_>0 21 7 6 2. - 0 - -0.0352383516728878 - -0.5587955713272095 - 0.1181833967566490 - <_> - - <_> - - - - <_>0 11 8 4 -1. - <_>4 11 4 4 2. - 0 - 0.0238805506378412 - -0.1234541982412338 - 0.6450573801994324 - <_> - - <_> - - - - <_>1 2 12 5 -1. - <_>5 2 4 5 3. - 0 - -3.5878319758921862e-003 - 0.2334091067314148 - -0.2990573048591614 - <_> - - <_> - - - - <_>2 1 6 21 -1. - <_>4 8 2 7 9. - 0 - -0.3438814878463745 - 0.6333410739898682 - -0.0861014798283577 - <_> - - <_> - - - - <_>11 16 2 12 -1. - <_>11 16 1 12 2. - 0 - -2.5634190533310175e-003 - -0.3099200129508972 - 0.0882134363055229 - <_> - - <_> - - - - <_>7 17 6 5 -1. - <_>7 17 3 5 2. - 1 - 0.0470023490488529 - 0.0735333934426308 - -0.7596526145935059 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - 7.1428148075938225e-003 - -0.1698143035173416 - 0.4198228120803833 - <_> - - <_> - - - - <_>1 16 2 12 -1. - <_>2 16 1 12 2. - 0 - -3.7736629601567984e-003 - -0.5566483736038208 - 0.1006005033850670 - <_> - - <_> - - - - <_>7 13 3 12 -1. - <_>8 13 1 12 3. - 0 - 0.0221798494458199 - -0.0760098993778229 - 0.6371104121208191 - <_> - - <_> - - - - <_>6 17 4 6 -1. - <_>6 17 2 6 2. - 1 - 2.9807379178237170e-005 - -0.2714306116104126 - 0.2150378972291946 - <_> - - <_> - - - - <_>6 8 4 6 -1. - <_>6 11 4 3 2. - 0 - -1.4308329809864517e-005 - 0.1309061050415039 - -0.2808949947357178 - <_> - - <_> - - - - <_>1 5 8 12 -1. - <_>1 11 8 6 2. - 0 - -0.1150026023387909 - -0.7198622226715088 - 0.0768841728568077 - <_> - - <_> - - - - <_>7 13 3 12 -1. - <_>8 13 1 12 3. - 0 - -0.0253185909241438 - 0.4525049924850464 - -0.0904816910624504 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 6 4 3 2. - 1 - -0.0486983209848404 - -0.7417712807655335 - 0.0676924064755440 - <_> - - <_> - - - - <_>7 14 3 12 -1. - <_>8 14 1 12 3. - 0 - -5.0045289099216461e-003 - 0.1368017047643662 - -0.1186091974377632 - <_> - - <_> - - - - <_>0 25 12 3 -1. - <_>4 25 4 3 3. - 0 - 7.5120502151548862e-003 - 0.0912609919905663 - -0.5696067810058594 - <_> - - <_> - - - - <_>7 17 4 8 -1. - <_>7 17 2 8 2. - 0 - -5.4631778039038181e-003 - 0.1170236021280289 - -0.1476123034954071 - <_> - - <_> - - - - <_>3 17 4 8 -1. - <_>5 17 2 8 2. - 0 - 0.0152560099959373 - -0.1076835989952087 - 0.6471626162528992 - <_> - - <_> - - - - <_>8 24 6 4 -1. - <_>8 24 3 4 2. - 0 - -0.0219006203114986 - -0.6077641844749451 - 0.0644492134451866 - <_> - - <_> - - - - <_>2 22 6 6 -1. - <_>4 22 2 6 3. - 0 - 2.1267218980938196e-003 - -0.2311546951532364 - 0.2181330025196075 - <_> - - <_> - - - - <_>8 15 5 8 -1. - <_>8 15 5 4 2. - 1 - -0.0315019190311432 - -0.1367810964584351 - 0.0660032704472542 - <_> - - <_> - - - - <_>6 15 8 5 -1. - <_>6 15 4 5 2. - 1 - 0.0181079693138599 - 0.1086572036147118 - -0.4467346072196960 - <_> - - <_> - - - - <_>1 8 12 7 -1. - <_>4 8 6 7 2. - 0 - -0.1105957031250000 - 0.4695417881011963 - -0.1126838028430939 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 15 6 5 2. - 0 - 2.2349569480866194e-003 - -0.2988497018814087 - 0.1814752966165543 - <_> - - <_> - - - - <_>7 4 4 22 -1. - <_>7 15 4 11 2. - 0 - 0.0465041883289814 - 0.1284676939249039 - -0.2660984992980957 - -1.1750839948654175 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 12 22 -1. - <_>4 4 6 22 2. - 0 - -0.0488205999135971 - 0.4280799031257629 - -0.5515494942665100 - <_> - - <_> - - - - <_>6 3 4 12 -1. - <_>8 3 2 6 2. - <_>6 9 2 6 2. - 0 - 1.4779040357097983e-003 - -0.1868806034326553 - 0.1903828978538513 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -0.0100122904404998 - 0.3845142126083374 - -0.2172304987907410 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>8 5 3 4 2. - <_>5 9 3 4 2. - 0 - -0.0510002784430981 - -0.7613695263862610 - 0.0136259002611041 - <_> - - <_> - - - - <_>3 5 6 8 -1. - <_>3 5 3 4 2. - <_>6 9 3 4 2. - 0 - 5.2959132008254528e-003 - -0.2302142977714539 - 0.2853623926639557 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 6 2 2. - 1 - -0.0486541390419006 - 0.7099207043647766 - -0.0492031499743462 - <_> - - <_> - - - - <_>5 10 3 18 -1. - <_>5 19 3 9 2. - 0 - 8.8448636233806610e-003 - -0.3150536119937897 - 0.2089902013540268 - <_> - - <_> - - - - <_>7 6 4 6 -1. - <_>7 6 4 3 2. - 1 - 0.1006280034780502 - 6.6908989101648331e-003 - 0.6701387166976929 - <_> - - <_> - - - - <_>7 6 6 4 -1. - <_>7 6 3 4 2. - 1 - -7.0256260223686695e-003 - -0.3940832912921906 - 0.1743354946374893 - <_> - - <_> - - - - <_>6 24 8 3 -1. - <_>6 24 4 3 2. - 0 - -2.1224319934844971e-003 - 0.1699631065130234 - -0.3023740947246552 - <_> - - <_> - - - - <_>1 11 12 5 -1. - <_>4 11 6 5 2. - 0 - 9.9532064050436020e-003 - -0.1420284062623978 - 0.4516746103763580 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - 0.0125650698319077 - 0.0731758773326874 - -0.6170042157173157 - <_> - - <_> - - - - <_>2 3 4 12 -1. - <_>2 3 2 6 2. - <_>4 9 2 6 2. - 0 - -1.7854310572147369e-003 - 0.1490986049175263 - -0.3286524116992950 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - -4.0306518785655499e-003 - -0.4571371078491211 - 0.1081572026014328 - <_> - - <_> - - - - <_>0 22 4 6 -1. - <_>2 22 2 6 2. - 0 - -7.3099560104310513e-003 - -0.6559277176856995 - 0.0656157881021500 - <_> - - <_> - - - - <_>6 15 3 12 -1. - <_>7 15 1 12 3. - 0 - -0.0338434316217899 - 0.5041236877441406 - -0.0616260692477226 - <_> - - <_> - - - - <_>7 16 4 6 -1. - <_>7 16 2 6 2. - 1 - 3.8319290615618229e-004 - -0.2515347898006439 - 0.2027134001255035 - <_> - - <_> - - - - <_>4 2 6 6 -1. - <_>4 4 6 2 3. - 0 - -2.6169361080974340e-003 - 0.2249795943498612 - -0.2195861935615540 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -4.5606079511344433e-003 - -0.4659804105758667 - 0.1234800964593887 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - 0.0108227897435427 - -0.0966189727187157 - 0.4641242921352387 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>7 9 2 6 2. - 0 - -5.3171347826719284e-003 - -0.5563424825668335 - 0.0946232825517654 - <_> - - <_> - - - - <_>7 15 2 12 -1. - <_>7 15 1 12 2. - 0 - -9.3140971148386598e-004 - 0.1014392971992493 - -0.1056424006819725 - <_> - - <_> - - - - <_>5 15 2 12 -1. - <_>6 15 1 12 2. - 0 - 8.4296840941533446e-004 - -0.1324310004711151 - 0.3535107970237732 - <_> - - <_> - - - - <_>2 25 12 2 -1. - <_>2 25 6 2 2. - 0 - -0.0278069600462914 - -0.6505060195922852 - 0.0331535898149014 - <_> - - <_> - - - - <_>3 16 4 12 -1. - <_>3 16 2 6 2. - <_>5 22 2 6 2. - 0 - 6.9245469057932496e-004 - -0.2670288085937500 - 0.2112963050603867 - <_> - - <_> - - - - <_>6 24 8 3 -1. - <_>6 24 4 3 2. - 0 - -0.0127872303128242 - 0.2159364074468613 - -0.0867670774459839 - <_> - - <_> - - - - <_>0 25 12 2 -1. - <_>6 25 6 2 2. - 0 - -6.1678601196035743e-004 - 0.1695998013019562 - -0.2924894094467163 - -1.1861419677734375 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>4 1 6 27 -1. - <_>4 10 6 9 3. - 0 - -0.0517069287598133 - 0.4694269895553589 - -0.5128067135810852 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - 5.5232150480151176e-003 - -0.2498238980770111 - 0.6300581097602844 - <_> - - <_> - - - - <_>3 21 6 4 -1. - <_>6 21 3 4 2. - 0 - -9.2110745608806610e-003 - 0.3753066956996918 - -0.2291038036346436 - <_> - - <_> - - - - <_>4 2 6 12 -1. - <_>4 8 6 6 2. - 0 - 0.0417299605906010 - -0.1126201003789902 - 0.6750869750976563 - <_> - - <_> - - - - <_>6 0 6 4 -1. - <_>6 0 3 4 2. - 1 - 4.5255841687321663e-003 - -0.2693972885608673 - 0.2488950937986374 - <_> - - <_> - - - - <_>6 4 3 14 -1. - <_>7 4 1 14 3. - 0 - -8.5208792006596923e-004 - 0.2009855061769486 - -0.2300173044204712 - <_> - - <_> - - - - <_>4 8 6 6 -1. - <_>6 8 2 6 3. - 0 - -3.4569639246910810e-003 - -0.3637234866619110 - 0.2714250087738037 - <_> - - <_> - - - - <_>2 24 12 4 -1. - <_>6 24 4 4 3. - 0 - -0.0882003605365753 - -0.7595195770263672 - -7.2166309691965580e-003 - <_> - - <_> - - - - <_>0 24 12 4 -1. - <_>4 24 4 4 3. - 0 - -2.3253160179592669e-004 - 0.1473821997642517 - -0.4254870116710663 - <_> - - <_> - - - - <_>8 13 3 12 -1. - <_>9 13 1 12 3. - 0 - 0.0192584004253149 - -0.0848308727145195 - 0.5948777198791504 - <_> - - <_> - - - - <_>1 22 4 6 -1. - <_>3 22 2 6 2. - 0 - -3.1915740109980106e-003 - -0.4263828098773956 - 0.1335715949535370 - <_> - - <_> - - - - <_>7 7 3 12 -1. - <_>8 7 1 12 3. - 0 - -0.0222290400415659 - -0.4229826927185059 - 0.0361279584467411 - <_> - - <_> - - - - <_>4 7 3 12 -1. - <_>5 7 1 12 3. - 0 - -5.3123440593481064e-003 - 0.2934978008270264 - -0.2219786942005158 - <_> - - <_> - - - - <_>4 1 8 3 -1. - <_>4 1 4 3 2. - 0 - 5.6796981953084469e-003 - 0.0804127901792526 - -0.1972528994083405 - <_> - - <_> - - - - <_>4 4 3 23 -1. - <_>5 4 1 23 3. - 0 - 3.2511178869754076e-003 - -0.1662839055061340 - 0.3310728073120117 - <_> - - <_> - - - - <_>9 21 4 7 -1. - <_>9 21 2 7 2. - 0 - 2.5559039786458015e-003 - 0.0673501715064049 - -0.2464237064123154 - <_> - - <_> - - - - <_>5 14 3 12 -1. - <_>6 14 1 12 3. - 0 - 0.0312399994581938 - -0.0673935115337372 - 0.8285176753997803 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - -4.4333371333777905e-003 - -0.3804832100868225 - 0.1424861997365952 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -3.9497618563473225e-003 - -0.3566044867038727 - 0.1868544071912766 - <_> - - <_> - - - - <_>8 13 3 12 -1. - <_>9 13 1 12 3. - 0 - -0.0140432901680470 - 0.5322288870811462 - -0.0789808034896851 - <_> - - <_> - - - - <_>3 13 3 12 -1. - <_>4 13 1 12 3. - 0 - 4.2212791740894318e-003 - -0.1984183043241501 - 0.3136729896068573 - -1.0550270080566406 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>3 2 8 20 -1. - <_>3 7 8 10 2. - 0 - -0.1527878940105438 - 0.5414003729820252 - -0.1875697970390320 - <_> - - <_> - - - - <_>2 18 12 8 -1. - <_>5 18 6 8 2. - 0 - -0.0706556364893913 - 0.3400335013866425 - -0.1445966958999634 - <_> - - <_> - - - - <_>4 9 6 6 -1. - <_>6 9 2 6 3. - 0 - -0.0210332293063402 - -0.5587847232818604 - 0.1159814968705177 - <_> - - <_> - - - - <_>2 18 12 8 -1. - <_>5 18 6 8 2. - 0 - -9.5666358247399330e-003 - 0.1089008003473282 - -0.2036568969488144 - <_> - - <_> - - - - <_>0 24 8 4 -1. - <_>4 24 4 4 2. - 0 - -0.0427205413579941 - -0.9403002262115479 - 0.0636063218116760 - <_> - - <_> - - - - <_>6 2 2 24 -1. - <_>7 2 1 12 2. - <_>6 14 1 12 2. - 0 - -4.5477859675884247e-003 - 0.3422701954841614 - -0.1705372035503388 - <_> - - <_> - - - - <_>5 8 4 12 -1. - <_>5 8 2 6 2. - <_>7 14 2 6 2. - 0 - 3.7029080558568239e-003 - 0.0837208926677704 - -0.4613954126834869 - <_> - - <_> - - - - <_>7 3 6 6 -1. - <_>7 3 3 6 2. - 1 - -0.1145887002348900 - 0.6002784967422485 - -0.0177644807845354 - <_> - - <_> - - - - <_>0 8 6 7 -1. - <_>2 8 2 7 3. - 0 - 5.7319342158734798e-003 - -0.2559010982513428 - 0.2006231993436813 - <_> - - <_> - - - - <_>7 3 6 6 -1. - <_>7 3 3 6 2. - 1 - -0.0702377930283546 - 0.2535978853702545 - -0.0295036192983389 - <_> - - <_> - - - - <_>4 8 6 4 -1. - <_>7 8 3 4 2. - 0 - 0.0139831798151135 - 0.1145640015602112 - -0.3968353867530823 - <_> - - <_> - - - - <_>2 7 10 19 -1. - <_>2 7 5 19 2. - 0 - 0.1817575991153717 - 0.0507499501109123 - -0.8306192755699158 - <_> - - <_> - - - - <_>0 4 11 24 -1. - <_>0 16 11 12 2. - 0 - 0.0301854908466339 - -0.2668361067771912 - 0.1407079994678497 - <_> - - <_> - - - - <_>1 1 12 21 -1. - <_>5 8 4 7 9. - 0 - 0.7563328742980957 - -0.0414166189730167 - 0.9095727801322937 - <_> - - <_> - - - - <_>0 18 12 8 -1. - <_>3 18 6 8 2. - 0 - -8.5228988900780678e-003 - 0.1614249944686890 - -0.2754909992218018 - <_> - - <_> - - - - <_>9 17 4 8 -1. - <_>9 17 2 8 2. - 0 - -4.9996669404208660e-003 - -0.1166673004627228 - 0.0602988190948963 - <_> - - <_> - - - - <_>4 7 4 6 -1. - <_>4 10 4 3 2. - 0 - -5.9932802105322480e-004 - 0.1301555037498474 - -0.3107284009456635 - <_> - - <_> - - - - <_>7 7 5 9 -1. - <_>7 10 5 3 3. - 0 - -0.0960636734962463 - -0.8525934815406799 - 0.0159707907587290 - <_> - - <_> - - - - <_>1 17 4 8 -1. - <_>3 17 2 8 2. - 0 - -7.0154820568859577e-003 - -0.4549050927162170 - 0.0771780908107758 - <_> - - <_> - - - - <_>9 15 3 13 -1. - <_>10 15 1 13 3. - 0 - -8.7620541453361511e-003 - 0.4803450107574463 - -0.0813068374991417 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -3.9868508465588093e-003 - 0.2249560058116913 - -0.2044728994369507 - <_> - - <_> - - - - <_>9 18 4 10 -1. - <_>9 18 2 10 2. - 0 - -0.0573353096842766 - -0.5685973763465881 - 5.2798101678490639e-003 - <_> - - <_> - - - - <_>1 18 4 10 -1. - <_>3 18 2 10 2. - 0 - 1.9260890549048781e-003 - 0.1492034047842026 - -0.3105990886688232 - <_> - - <_> - - - - <_>7 22 2 4 -1. - <_>7 22 1 4 2. - 1 - 0.0211180709302425 - 4.1174301877617836e-003 - -0.5240138173103333 - <_> - - <_> - - - - <_>7 22 4 2 -1. - <_>7 22 4 1 2. - 1 - -1.1973599903285503e-003 - 0.2335339933633804 - -0.2019366025924683 - <_> - - <_> - - - - <_>7 7 5 9 -1. - <_>7 10 5 3 3. - 0 - 4.5973812229931355e-003 - 0.0599170103669167 - -0.1187831014394760 - <_> - - <_> - - - - <_>1 7 12 11 -1. - <_>4 7 6 11 2. - 0 - 0.0288696605712175 - -0.0941107794642448 - 0.4596694111824036 - <_> - - <_> - - - - <_>8 6 3 8 -1. - <_>8 6 3 4 2. - 1 - -3.7549799308180809e-003 - 0.1216117963194847 - -0.1481101959943771 - <_> - - <_> - - - - <_>5 8 3 16 -1. - <_>5 12 3 8 2. - 0 - 4.2033549398183823e-003 - 0.1090307012200356 - -0.3870052099227905 - <_> - - <_> - - - - <_>8 6 3 8 -1. - <_>8 6 3 4 2. - 1 - 0.0729940682649612 - -0.0340467989444733 - 0.3061003983020783 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 6 4 3 2. - 1 - 0.0166671797633171 - 0.1316858977079392 - -0.3848586082458496 - <_> - - <_> - - - - <_>2 24 12 3 -1. - <_>6 24 4 3 3. - 0 - -2.8268690221011639e-003 - 0.0647821575403214 - -0.2237170934677124 - <_> - - <_> - - - - <_>3 5 6 4 -1. - <_>3 7 6 2 2. - 0 - 3.7736070808023214e-003 - -0.1559296995401382 - 0.2541306912899017 - <_> - - <_> - - - - <_>4 5 6 4 -1. - <_>4 7 6 2 2. - 0 - -3.6936940159648657e-003 - 0.2557652890682221 - -0.1576806008815765 - <_> - - <_> - - - - <_>4 14 6 6 -1. - <_>6 14 2 6 3. - 0 - -0.0668010637164116 - -0.7434608936309815 - 0.0549156405031681 - <_> - - <_> - - - - <_>6 11 3 13 -1. - <_>7 11 1 13 3. - 0 - 0.0157527904957533 - -0.0986381024122238 - 0.4311982095241547 - <_> - - <_> - - - - <_>0 24 12 3 -1. - <_>4 24 4 3 3. - 0 - 9.0647127944976091e-004 - 0.1133923977613449 - -0.4157446026802063 - <_> - - <_> - - - - <_>9 16 2 12 -1. - <_>9 16 1 12 2. - 0 - -0.0216956995427608 - 0.4694924056529999 - -0.0557326115667820 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -1.4639029977843165e-003 - -0.3061788082122803 - 0.1439816951751709 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - -0.0178105607628822 - 0.3041172921657562 - -0.0467588007450104 - <_> - - <_> - - - - <_>0 21 4 6 -1. - <_>2 21 2 6 2. - 0 - -5.6027648970484734e-003 - -0.5294290184974670 - 0.0782871171832085 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - 1.9500569906085730e-003 - -0.0959494486451149 - 0.1903167068958283 - <_> - - <_> - - - - <_>2 3 10 16 -1. - <_>2 3 5 8 2. - <_>7 11 5 8 2. - 0 - 0.1064156964421272 - 0.0472884401679039 - -0.8652535080909729 - -1.1214250326156616 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>4 12 6 16 -1. - <_>4 20 6 8 2. - 0 - 0.0182569902390242 - -0.5556493997573853 - 0.4354656040668488 - <_> - - <_> - - - - <_>1 15 12 11 -1. - <_>4 15 6 11 2. - 0 - -0.1124944016337395 - 0.6180027723312378 - -0.2164181023836136 - <_> - - <_> - - - - <_>3 4 6 10 -1. - <_>3 4 3 5 2. - <_>6 9 3 5 2. - 0 - 2.0443440880626440e-003 - -0.3137955963611603 - 0.2642489075660706 - <_> - - <_> - - - - <_>2 24 12 4 -1. - <_>8 24 6 2 2. - <_>2 26 6 2 2. - 0 - 6.2505697133019567e-004 - -0.2365960031747818 - 0.2116999030113220 - <_> - - <_> - - - - <_>0 24 12 4 -1. - <_>0 24 6 2 2. - <_>6 26 6 2 2. - 0 - 1.3297300320118666e-003 - -0.3133944869041443 - 0.3044906854629517 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 6 2 2. - 1 - -0.0468403697013855 - 0.5375909209251404 - -0.0180811397731304 - <_> - - <_> - - - - <_>1 2 12 18 -1. - <_>5 8 4 6 9. - 0 - -0.6487429141998291 - 0.6676843762397766 - -0.0912478491663933 - <_> - - <_> - - - - <_>2 22 10 6 -1. - <_>2 22 5 6 2. - 0 - 9.6183530986309052e-003 - 0.1473377943038940 - -0.3219302892684937 - <_> - - <_> - - - - <_>1 26 12 2 -1. - <_>7 26 6 2 2. - 0 - 2.2117879707366228e-003 - 0.1575541943311691 - -0.3679918050765991 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 6 2 2. - 1 - 4.9280291423201561e-003 - -0.0834057405591011 - 0.0682601779699326 - <_> - - <_> - - - - <_>0 12 10 4 -1. - <_>5 12 5 4 2. - 0 - 0.0139770796522498 - -0.1070206016302109 - 0.4832653105258942 - <_> - - <_> - - - - <_>4 8 6 4 -1. - <_>4 10 6 2 2. - 0 - -1.0333389946026728e-004 - 0.1364544928073883 - -0.3177702128887177 - <_> - - <_> - - - - <_>5 1 4 12 -1. - <_>5 4 4 6 2. - 0 - -2.2287340834736824e-003 - 0.2179117947816849 - -0.1992329955101013 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>10 4 3 4 2. - <_>7 8 3 4 2. - 0 - -0.0323015116155148 - 0.3313513100147247 - -0.0206170398741961 - <_> - - <_> - - - - <_>0 18 14 4 -1. - <_>0 18 7 2 2. - <_>7 20 7 2 2. - 0 - 0.0232400391250849 - 0.0596725717186928 - -0.6499395966529846 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - 3.5599120892584324e-003 - -0.1481892019510269 - 0.2989333868026733 - <_> - - <_> - - - - <_>4 15 3 12 -1. - <_>5 15 1 12 3. - 0 - 0.0154697597026825 - -0.0755695998668671 - 0.5231468081474304 - <_> - - <_> - - - - <_>8 9 2 13 -1. - <_>8 9 1 13 2. - 0 - -1.6372289974242449e-004 - 0.1044673025608063 - -0.2094334065914154 - <_> - - <_> - - - - <_>5 10 4 6 -1. - <_>7 10 2 6 2. - 0 - -2.9369019903242588e-003 - -0.4319773912429810 - 0.1076581031084061 - <_> - - <_> - - - - <_>3 11 8 5 -1. - <_>3 11 4 5 2. - 0 - -7.8579207183793187e-004 - -0.2461477965116501 - 0.2155473977327347 - <_> - - <_> - - - - <_>5 16 2 12 -1. - <_>6 16 1 12 2. - 0 - 0.0111566996201873 - -0.0818208828568459 - 0.6733806729316711 - -1.1566660404205322 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>0 7 10 17 -1. - <_>5 7 5 17 2. - 0 - -0.1847351938486099 - 0.5475882887840271 - -0.2231906950473785 - <_> - - <_> - - - - <_>3 7 8 4 -1. - <_>3 9 8 2 2. - 0 - -2.8615030460059643e-003 - 0.1926427930593491 - -0.2298910021781921 - <_> - - <_> - - - - <_>5 0 4 24 -1. - <_>5 8 4 8 3. - 0 - 0.1797018945217133 - -0.0645736828446388 - 0.8032200932502747 - <_> - - <_> - - - - <_>3 16 9 4 -1. - <_>6 16 3 4 3. - 0 - -0.0528127290308475 - 0.2878498136997223 - -0.0882893875241280 - <_> - - <_> - - - - <_>7 14 6 4 -1. - <_>7 14 3 4 2. - 1 - 6.9000339135527611e-003 - 0.1097920984029770 - -0.4888688921928406 - <_> - - <_> - - - - <_>5 23 9 4 -1. - <_>8 23 3 4 3. - 0 - 0.0404695309698582 - 0.0616974681615829 - -0.7290781736373901 - <_> - - <_> - - - - <_>0 22 9 4 -1. - <_>3 22 3 4 3. - 0 - 4.5191249810159206e-003 - -0.2797237932682037 - 0.1706515997648239 - <_> - - <_> - - - - <_>9 22 4 6 -1. - <_>9 22 2 6 2. - 0 - -3.8400939665734768e-003 - -0.2832930088043213 - 0.1161170974373817 - <_> - - <_> - - - - <_>1 24 6 4 -1. - <_>4 24 3 4 2. - 0 - -7.1505218511447310e-004 - 0.1587048023939133 - -0.2825342118740082 - <_> - - <_> - - - - <_>4 19 8 9 -1. - <_>6 19 4 9 2. - 0 - 0.0301278997212648 - -0.0362363383173943 - 0.5336939096450806 - <_> - - <_> - - - - <_>2 19 8 9 -1. - <_>4 19 4 9 2. - 0 - -0.0199076402932405 - -0.3222998976707459 - 0.1493317037820816 - <_> - - <_> - - - - <_>2 22 12 4 -1. - <_>5 22 6 4 2. - 0 - -0.0314356684684753 - 0.2081288993358612 - -0.0967622101306915 - <_> - - <_> - - - - <_>0 19 14 7 -1. - <_>7 19 7 7 2. - 0 - -0.0199126806110144 - -0.3292892873287201 - 0.1273272931575775 - <_> - - <_> - - - - <_>5 20 6 8 -1. - <_>8 20 3 4 2. - <_>5 24 3 4 2. - 0 - 0.0406267493963242 - 0.0169857200235128 - -0.5222617983818054 - <_> - - <_> - - - - <_>3 20 6 8 -1. - <_>3 20 3 4 2. - <_>6 24 3 4 2. - 0 - 1.6589110018685460e-003 - -0.2379567027091980 - 0.2077559977769852 - <_> - - <_> - - - - <_>6 1 4 14 -1. - <_>8 1 2 7 2. - <_>6 8 2 7 2. - 0 - 1.9869199022650719e-003 - -0.1349375993013382 - 0.1205085963010788 - <_> - - <_> - - - - <_>2 2 4 12 -1. - <_>2 2 2 6 2. - <_>4 8 2 6 2. - 0 - -0.0419858209788799 - 0.4460113048553467 - -0.0761459693312645 - <_> - - <_> - - - - <_>7 4 6 4 -1. - <_>7 4 3 4 2. - 1 - 0.0702601820230484 - 0.0158335696905851 - -0.3818230032920837 - <_> - - <_> - - - - <_>7 4 4 6 -1. - <_>7 4 4 3 2. - 1 - -0.0179928001016378 - -0.3697398006916046 - 0.1045159995555878 - <_> - - <_> - - - - <_>7 3 6 5 -1. - <_>7 3 3 5 2. - 1 - -0.1042096987366676 - 0.5183687806129456 - -0.0223724003881216 - <_> - - <_> - - - - <_>7 3 5 6 -1. - <_>7 3 5 3 2. - 1 - 0.0532773695886135 - 0.0747159272432327 - -0.5848941206932068 - <_> - - <_> - - - - <_>7 3 6 4 -1. - <_>7 3 6 2 2. - 1 - 0.0968191623687744 - -7.8130746260285378e-003 - -0.9053189754486084 - <_> - - <_> - - - - <_>3 2 8 18 -1. - <_>3 8 8 6 3. - 0 - -0.2231761068105698 - 0.4784899950027466 - -0.0895702466368675 - <_> - - <_> - - - - <_>4 15 9 12 -1. - <_>7 19 3 4 9. - 0 - 0.0135237602517009 - 0.0651585832238197 - -0.1403055936098099 - <_> - - <_> - - - - <_>1 21 12 6 -1. - <_>7 21 6 6 2. - 0 - -0.0714653432369232 - -0.8899757266044617 - 0.0381110087037086 - <_> - - <_> - - - - <_>9 18 4 8 -1. - <_>9 18 2 8 2. - 0 - 0.0247345604002476 - -0.0328582599759102 - 0.3536860048770905 - <_> - - <_> - - - - <_>2 16 9 4 -1. - <_>5 16 3 4 3. - 0 - -4.2641810141503811e-003 - 0.1288572996854782 - -0.2778818011283875 - <_> - - <_> - - - - <_>4 17 10 6 -1. - <_>4 17 5 6 2. - 0 - 0.0432465411722660 - -0.0263446196913719 - 0.3333376049995422 - <_> - - <_> - - - - <_>1 18 4 8 -1. - <_>3 18 2 8 2. - 0 - 5.2720978856086731e-003 - 0.0961221083998680 - -0.3820368945598602 - <_> - - <_> - - - - <_>9 3 5 6 -1. - <_>9 3 5 3 2. - 1 - -6.4102048054337502e-003 - 0.1692444980144501 - -0.0752360522747040 - <_> - - <_> - - - - <_>1 17 8 6 -1. - <_>5 17 4 6 2. - 0 - 0.0177471004426479 - -0.0651267394423485 - 0.5372086763381958 - <_> - - <_> - - - - <_>2 19 12 9 -1. - <_>6 22 4 3 9. - 0 - 0.1646672934293747 - 0.0267640296369791 - -0.6950613260269165 - <_> - - <_> - - - - <_>2 0 4 14 -1. - <_>2 0 2 7 2. - <_>4 7 2 7 2. - 0 - -7.6354909688234329e-003 - 0.1726163029670715 - -0.2024289071559906 - <_> - - <_> - - - - <_>4 9 10 14 -1. - <_>9 9 5 7 2. - <_>4 16 5 7 2. - 0 - -0.0766481682658196 - 0.2256714999675751 - -0.0350441411137581 - <_> - - <_> - - - - <_>0 16 4 12 -1. - <_>0 16 2 6 2. - <_>2 22 2 6 2. - 0 - 2.9634330421686172e-003 - 0.1067982017993927 - -0.3070451915264130 - <_> - - <_> - - - - <_>3 24 8 4 -1. - <_>3 24 4 4 2. - 0 - -0.0189680401235819 - -0.6534953117370606 - 0.0453284494578838 - <_> - - <_> - - - - <_>0 5 14 22 -1. - <_>0 16 14 11 2. - 0 - 0.6227293014526367 - 0.0294184703379869 - -0.7741603255271912 - <_> - - <_> - - - - <_>6 13 6 8 -1. - <_>6 17 6 4 2. - 0 - 3.1170540023595095e-003 - -0.1926358044147492 - 0.1008249968290329 - <_> - - <_> - - - - <_>0 9 10 14 -1. - <_>0 9 5 7 2. - <_>5 16 5 7 2. - 0 - -0.1017974019050598 - 0.5066729187965393 - -0.0758455321192741 - <_> - - <_> - - - - <_>3 3 9 9 -1. - <_>3 6 9 3 3. - 0 - -0.0875393673777580 - -0.8012782931327820 - 0.0397419817745686 - <_> - - <_> - - - - <_>5 1 4 6 -1. - <_>5 4 4 3 2. - 0 - -4.0089199319481850e-003 - 0.1586735993623734 - -0.2039071023464203 - <_> - - <_> - - - - <_>1 0 12 9 -1. - <_>5 3 4 3 9. - 0 - -0.1725274026393890 - -0.4855650961399078 - 0.0661624372005463 - <_> - - <_> - - - - <_>4 7 6 12 -1. - <_>4 7 3 6 2. - <_>7 13 3 6 2. - 0 - 2.2747491020709276e-003 - 0.1083929017186165 - -0.2612051069736481 - <_> - - <_> - - - - <_>6 7 6 18 -1. - <_>8 13 2 6 9. - 0 - 0.0870257318019867 - -0.0456128492951393 - 0.3064231872558594 - <_> - - <_> - - - - <_>2 7 6 18 -1. - <_>4 13 2 6 9. - 0 - 0.0333020910620689 - 0.0985119566321373 - -0.4032101035118103 - <_> - - <_> - - - - <_>2 22 12 4 -1. - <_>6 22 4 4 3. - 0 - -5.5495370179414749e-003 - 0.0678094699978828 - -0.1944850981235504 - <_> - - <_> - - - - <_>3 16 8 8 -1. - <_>3 16 4 4 2. - <_>7 20 4 4 2. - 0 - -7.5916801579296589e-003 - -0.3322997987270355 - 0.1055229976773262 - <_> - - <_> - - - - <_>7 7 6 10 -1. - <_>7 7 3 10 2. - 0 - -0.0547769404947758 - 0.3134475052356720 - -0.0925614312291145 - <_> - - <_> - - - - <_>1 8 12 10 -1. - <_>4 8 6 10 2. - 0 - 0.0172933097928762 - -0.1036652028560638 - 0.4573282003402710 - -1.0953630208969116 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -0.0225016307085752 - 0.5229359269142151 - -0.1796838045120239 - <_> - - <_> - - - - <_>4 5 10 17 -1. - <_>4 5 5 17 2. - 0 - -0.0181667208671570 - 0.1428108960390091 - -0.3026844859123230 - <_> - - <_> - - - - <_>0 4 14 24 -1. - <_>7 4 7 24 2. - 0 - 0.0316802598536015 - 0.1570882052183151 - -0.3230336904525757 - <_> - - <_> - - - - <_>4 9 6 7 -1. - <_>6 9 2 7 3. - 0 - -0.0234762504696846 - -0.4557600021362305 - 0.1030009016394615 - <_> - - <_> - - - - <_>2 20 10 8 -1. - <_>2 20 5 4 2. - <_>7 24 5 4 2. - 0 - 0.0456882789731026 - 0.0678735375404358 - -0.7462332844734192 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>6 7 6 4 2. - 1 - -0.0746098831295967 - 0.2054854035377502 - -0.1009785979986191 - <_> - - <_> - - - - <_>6 4 4 6 -1. - <_>6 4 2 6 2. - 1 - -0.0459031015634537 - 0.6666275858879089 - -0.0690716579556465 - <_> - - <_> - - - - <_>6 3 4 6 -1. - <_>6 3 2 6 2. - 0 - -5.7763070799410343e-004 - 0.1138644963502884 - -0.1227831989526749 - <_> - - <_> - - - - <_>5 4 4 6 -1. - <_>7 4 2 6 2. - 0 - -4.1800830513238907e-004 - 0.1999998986721039 - -0.2237267047166824 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>5 8 2 6 2. - 0 - 2.4581039324402809e-003 - 0.1007374972105026 - -0.3632315993309021 - <_> - - <_> - - - - <_>7 3 6 6 -1. - <_>7 3 6 3 2. - 1 - 0.0674670487642288 - 0.0542006902396679 - -0.6034706830978394 - <_> - - <_> - - - - <_>4 5 6 6 -1. - <_>4 8 6 3 2. - 0 - -0.0389718599617481 - 0.4027759134769440 - -0.1129947006702423 - <_> - - <_> - - - - <_>3 12 6 14 -1. - <_>3 19 6 7 2. - 0 - 0.1662815958261490 - 0.0482903085649014 - -0.8126922249794006 - <_> - - <_> - - - - <_>11 16 2 12 -1. - <_>11 16 1 12 2. - 0 - 5.5140322074294090e-003 - 0.0604846104979515 - -0.5457589030265808 - <_> - - <_> - - - - <_>1 22 6 6 -1. - <_>3 22 2 6 3. - 0 - 1.2837080284953117e-003 - -0.2815071046352387 - 0.1278554946184158 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - 0.0338401608169079 - -0.0619250908493996 - 0.5446158051490784 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - 0.0142245600000024 - -0.0837020725011826 - 0.5540488958358765 - <_> - - <_> - - - - <_>3 9 8 4 -1. - <_>3 11 8 2 2. - 0 - -1.4315280714072287e-004 - 0.1531862020492554 - -0.2831287086009979 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -0.0136043904349208 - -0.6322932839393616 - 0.0567920282483101 - <_> - - <_> - - - - <_>2 20 12 8 -1. - <_>5 20 6 8 2. - 0 - -0.1795231997966766 - -0.7747110128402710 - -1.2696949997916818e-003 - <_> - - <_> - - - - <_>0 20 12 8 -1. - <_>3 20 6 8 2. - 0 - -6.3834888860583305e-003 - 0.1286493986845017 - -0.3115915954113007 - <_> - - <_> - - - - <_>5 4 9 12 -1. - <_>5 10 9 6 2. - 0 - -0.1814050972461700 - -0.7070493102073669 - 0.0309925191104412 - <_> - - <_> - - - - <_>4 12 10 4 -1. - <_>4 12 10 2 2. - 1 - 3.4940429031848907e-003 - 0.1019228994846344 - -0.3339323103427887 - <_> - - <_> - - - - <_>4 2 10 4 -1. - <_>4 2 5 4 2. - 0 - 0.0408617407083511 - 0.0312678888440132 - -0.4373905062675476 - <_> - - <_> - - - - <_>1 15 12 13 -1. - <_>4 15 6 13 2. - 0 - 0.0369939990341663 - -0.0624536089599133 - 0.5760527849197388 - <_> - - <_> - - - - <_>11 16 2 12 -1. - <_>11 16 1 12 2. - 0 - -7.7690118923783302e-003 - -0.6073737144470215 - 0.0697584524750710 - <_> - - <_> - - - - <_>2 3 3 12 -1. - <_>3 3 1 12 3. - 0 - 7.1885702200233936e-003 - -0.1403401046991348 - 0.2450957000255585 - <_> - - <_> - - - - <_>8 2 4 6 -1. - <_>8 2 2 6 2. - 0 - -0.0305586792528629 - -0.2610909938812256 - 0.0208937600255013 - <_> - - <_> - - - - <_>2 2 4 6 -1. - <_>4 2 2 6 2. - 0 - -0.0139495003968477 - -0.4598451852798462 - 0.0729969888925552 - <_> - - <_> - - - - <_>2 13 12 14 -1. - <_>5 13 6 14 2. - 0 - -0.1743914932012558 - 0.2791750133037567 - -0.0703096911311150 - <_> - - <_> - - - - <_>1 16 2 12 -1. - <_>2 16 1 12 2. - 0 - -5.6514460593461990e-003 - -0.5833538770675659 - 0.0485431700944901 - <_> - - <_> - - - - <_>9 21 4 6 -1. - <_>9 21 2 6 2. - 0 - -5.6718150153756142e-003 - -0.2064559012651444 - 0.0599499903619289 - <_> - - <_> - - - - <_>1 21 4 6 -1. - <_>3 21 2 6 2. - 0 - -2.9772339985356666e-005 - 0.1662708073854446 - -0.1814447045326233 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>10 0 1 15 3. - 0 - -6.2705092132091522e-003 - 0.2582921087741852 - -0.1354808062314987 - <_> - - <_> - - - - <_>2 22 4 6 -1. - <_>4 22 2 6 2. - 0 - -5.2028051577508450e-003 - -0.2958551943302155 - 0.1022360026836395 - <_> - - <_> - - - - <_>2 13 12 14 -1. - <_>5 13 6 14 2. - 0 - -0.0367218405008316 - 0.1144345998764038 - -0.1567068994045258 - <_> - - <_> - - - - <_>6 3 4 6 -1. - <_>6 3 4 3 2. - 1 - 0.0787174329161644 - 0.0294073894619942 - -0.8965392708778381 - <_> - - <_> - - - - <_>1 0 12 24 -1. - <_>5 8 4 8 9. - 0 - 0.9085621237754822 - -0.0564002692699432 - 0.6954352855682373 - <_> - - <_> - - - - <_>4 2 6 8 -1. - <_>4 6 6 4 2. - 0 - -5.2952598780393600e-003 - 0.1828244030475617 - -0.2051848024129868 - <_> - - <_> - - - - <_>2 4 12 8 -1. - <_>2 6 12 4 2. - 0 - -0.0526723414659500 - -0.6813353896141052 - 0.0360460691154003 - -1.0216970443725586 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>1 8 12 18 -1. - <_>4 8 6 18 2. - 0 - -0.2173130959272385 - 0.5971680879592896 - -0.2243269979953766 - <_> - - <_> - - - - <_>3 0 8 24 -1. - <_>3 8 8 8 3. - 0 - -0.3462795913219452 - 0.5374193787574768 - -0.0877821892499924 - <_> - - <_> - - - - <_>1 21 6 6 -1. - <_>3 21 2 6 3. - 0 - 1.0713579831644893e-003 - -0.3592022955417633 - 0.1568592935800552 - <_> - - <_> - - - - <_>5 7 8 3 -1. - <_>5 7 4 3 2. - 0 - -0.0612671412527561 - -0.7100325226783752 - 0.0205278992652893 - <_> - - <_> - - - - <_>1 7 8 3 -1. - <_>5 7 4 3 2. - 0 - 0.0312818400561810 - -0.0746467635035515 - 0.5968912243843079 - <_> - - <_> - - - - <_>5 1 4 6 -1. - <_>5 4 4 3 2. - 0 - -1.2337400112301111e-003 - 0.1594983041286469 - -0.2718119919300079 - <_> - - <_> - - - - <_>4 6 4 6 -1. - <_>4 9 4 3 2. - 0 - -3.4508139360696077e-003 - 0.2025516033172607 - -0.1939913928508759 - <_> - - <_> - - - - <_>10 20 4 6 -1. - <_>10 20 2 6 2. - 0 - -7.0481761358678341e-003 - -0.5510008931159973 - 0.0707383230328560 - <_> - - <_> - - - - <_>3 1 8 21 -1. - <_>3 8 8 7 3. - 0 - 0.2295020073652268 - -0.0875734165310860 - 0.6044626832008362 - <_> - - <_> - - - - <_>7 16 4 12 -1. - <_>9 16 2 6 2. - <_>7 22 2 6 2. - 0 - -2.2578560747206211e-003 - -0.0853065028786659 - 0.1099772974848747 - <_> - - <_> - - - - <_>1 25 12 3 -1. - <_>5 25 4 3 3. - 0 - -9.7562908194959164e-004 - 0.0974123030900955 - -0.3625175952911377 - <_> - - <_> - - - - <_>7 16 4 12 -1. - <_>9 16 2 6 2. - <_>7 22 2 6 2. - 0 - 0.0530881099402905 - -3.5328660160303116e-003 - -0.6069478988647461 - <_> - - <_> - - - - <_>3 16 4 12 -1. - <_>3 16 2 6 2. - <_>5 22 2 6 2. - 0 - 1.5448880149051547e-003 - -0.2241913974285126 - 0.1783272027969360 - <_> - - <_> - - - - <_>7 17 4 7 -1. - <_>7 17 2 7 2. - 0 - 0.0123757002875209 - -0.0357789508998394 - 0.2955793142318726 - <_> - - <_> - - - - <_>3 17 4 7 -1. - <_>5 17 2 7 2. - 0 - 5.9611927717924118e-003 - -0.0736030265688896 - 0.4869956970214844 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - 8.3732418715953827e-003 - 0.0957865566015244 - -0.3922258019447327 - <_> - - <_> - - - - <_>5 8 4 15 -1. - <_>6 8 2 15 2. - 0 - -7.9954452812671661e-003 - -0.2959701120853424 - 0.1324651986360550 - <_> - - <_> - - - - <_>7 22 2 4 -1. - <_>7 22 1 4 2. - 1 - 0.0176241490989923 - 0.0116297602653503 - -0.3759419023990631 - <_> - - <_> - - - - <_>7 22 4 2 -1. - <_>7 22 4 1 2. - 1 - -8.1538967788219452e-004 - 0.1840317994356155 - -0.2110694944858551 - <_> - - <_> - - - - <_>1 15 12 3 -1. - <_>1 15 6 3 2. - 0 - 0.0659108385443687 - 0.0380509383976460 - -0.8735622167587280 - <_> - - <_> - - - - <_>4 15 6 12 -1. - <_>4 15 3 6 2. - <_>7 21 3 6 2. - 0 - -8.1749828532338142e-003 - -0.3011561930179596 - 0.0813454464077950 - <_> - - <_> - - - - <_>7 16 3 12 -1. - <_>8 16 1 12 3. - 0 - -0.0382750108838081 - 0.3823896050453186 - -0.0559699796140194 - <_> - - <_> - - - - <_>2 9 4 18 -1. - <_>2 9 2 9 2. - <_>4 18 2 9 2. - 0 - 3.2501420937478542e-003 - -0.2152089029550552 - 0.1341784000396729 - <_> - - <_> - - - - <_>8 10 4 6 -1. - <_>8 10 2 6 2. - 0 - 5.6356219574809074e-003 - -0.0915983468294144 - 0.2693023085594177 - <_> - - <_> - - - - <_>0 16 4 12 -1. - <_>0 16 2 6 2. - <_>2 22 2 6 2. - 0 - -5.1177428103983402e-003 - -0.3009229898452759 - 0.1044047027826309 - <_> - - <_> - - - - <_>2 22 12 4 -1. - <_>6 22 4 4 3. - 0 - -0.0601951293647289 - 0.1851283013820648 - -0.0630041509866714 - <_> - - <_> - - - - <_>0 24 9 4 -1. - <_>3 24 3 4 3. - 0 - 0.0464735589921474 - 0.0375593788921833 - -0.8111779093742371 - <_> - - <_> - - - - <_>9 13 4 12 -1. - <_>9 17 4 4 3. - 0 - 2.2262150887399912e-003 - -0.1226280033588409 - 0.0832881927490234 - <_> - - <_> - - - - <_>2 10 4 6 -1. - <_>4 10 2 6 2. - 0 - 0.0166707802563906 - -0.0527744293212891 - 0.5488799810409546 - <_> - - <_> - - - - <_>4 8 8 6 -1. - <_>4 10 8 2 3. - 0 - -0.0630935281515121 - -0.7470207214355469 - 0.0270495098084211 - <_> - - <_> - - - - <_>0 22 12 4 -1. - <_>4 22 4 4 3. - 0 - -7.7139958739280701e-004 - 0.0921770632266998 - -0.2999443113803864 - <_> - - <_> - - - - <_>4 21 9 7 -1. - <_>7 21 3 7 3. - 0 - -0.0891078934073448 - -0.3893744051456451 - 0.0298317596316338 - <_> - - <_> - - - - <_>5 22 4 6 -1. - <_>7 22 2 6 2. - 0 - -1.7469590238761157e-004 - 0.1611765027046204 - -0.2063910067081451 - <_> - - <_> - - - - <_>9 2 3 12 -1. - <_>10 2 1 12 3. - 0 - -2.1986931096762419e-003 - 0.1428606957197189 - -0.1236654967069626 - <_> - - <_> - - - - <_>2 3 3 12 -1. - <_>3 3 1 12 3. - 0 - 2.1864708978682756e-003 - -0.1743519008159638 - 0.1658601015806198 - <_> - - <_> - - - - <_>8 4 4 6 -1. - <_>8 4 2 6 2. - 1 - 0.0127384504303336 - 0.0483400784432888 - -0.0812979266047478 - <_> - - <_> - - - - <_>6 4 6 4 -1. - <_>6 4 6 2 2. - 1 - -0.0123834004625678 - -0.3746446073055267 - 0.0812059789896011 - <_> - - <_> - - - - <_>4 6 8 16 -1. - <_>8 6 4 8 2. - <_>4 14 4 8 2. - 0 - -0.1209435015916824 - -0.9190897941589356 - 0.0170078407973051 - <_> - - <_> - - - - <_>2 6 8 16 -1. - <_>2 6 4 8 2. - <_>6 14 4 8 2. - 0 - 0.0489029809832573 - -0.0706190690398216 - 0.5136343836784363 - <_> - - <_> - - - - <_>4 8 8 8 -1. - <_>6 8 4 8 2. - 0 - -1.9585320260375738e-003 - 0.0998083725571632 - -0.1068151965737343 - <_> - - <_> - - - - <_>0 6 12 10 -1. - <_>4 6 4 10 3. - 0 - -0.2964532077312470 - -0.9121376276016235 - 0.0322923585772514 - <_> - - <_> - - - - <_>8 10 6 7 -1. - <_>10 12 2 7 3. - 1 - 0.1074197962880135 - -2.3814958985894918e-003 - -0.7183641791343689 - <_> - - <_> - - - - <_>6 10 7 6 -1. - <_>4 12 7 2 3. - 1 - -0.0420404411852360 - 0.3084833920001984 - -0.0996473729610443 - <_> - - <_> - - - - <_>5 11 4 7 -1. - <_>5 11 2 7 2. - 0 - 6.8270778283476830e-003 - 0.0833021327853203 - -0.3643383979797363 - <_> - - <_> - - - - <_>1 11 12 16 -1. - <_>1 11 6 8 2. - <_>7 19 6 8 2. - 0 - -0.0110720898956060 - -0.2588649988174439 - 0.1257940977811813 - <_> - - <_> - - - - <_>6 9 3 13 -1. - <_>7 9 1 13 3. - 0 - -0.0163990296423435 - 0.3019199073314667 - -0.0493520908057690 - <_> - - <_> - - - - <_>3 9 6 4 -1. - <_>3 11 6 2 2. - 0 - -2.0852450688835233e-004 - 0.1250873059034348 - -0.2199361026287079 - <_> - - <_> - - - - <_>9 22 4 6 -1. - <_>9 22 2 6 2. - 0 - -0.0301748607307673 - -0.6535304784774780 - 0.0101856999099255 - <_> - - <_> - - - - <_>2 9 7 4 -1. - <_>2 11 7 2 2. - 0 - -3.9148568175733089e-003 - -0.2078171968460083 - 0.1246095001697540 - <_> - - <_> - - - - <_>7 15 3 12 -1. - <_>8 15 1 12 3. - 0 - -2.7260989882051945e-003 - 0.1244395002722740 - -0.1554064005613327 - <_> - - <_> - - - - <_>2 15 8 3 -1. - <_>6 15 4 3 2. - 0 - 0.0174329001456499 - -0.0597618892788887 - 0.4943063855171204 - -1.0450960397720337 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>1 7 12 19 -1. - <_>4 7 6 19 2. - 0 - -0.2145441025495529 - 0.5164629817008972 - -0.2201218008995056 - <_> - - <_> - - - - <_>6 9 4 12 -1. - <_>8 9 2 6 2. - <_>6 15 2 6 2. - 0 - 0.0137962102890015 - 0.0505414195358753 - -0.2330507040023804 - <_> - - <_> - - - - <_>1 12 4 6 -1. - <_>1 15 4 3 2. - 0 - 9.6883601509034634e-004 - -0.2479321062564850 - 0.2053676992654800 - <_> - - <_> - - - - <_>4 22 8 6 -1. - <_>8 22 4 3 2. - <_>4 25 4 3 2. - 0 - -6.6670728847384453e-003 - -0.2254648953676224 - 6.4493361860513687e-003 - <_> - - <_> - - - - <_>2 22 8 6 -1. - <_>2 22 4 3 2. - <_>6 25 4 3 2. - 0 - 2.1733778994530439e-003 - -0.2116402983665466 - 0.2181985974311829 - <_> - - <_> - - - - <_>9 17 4 6 -1. - <_>9 17 2 6 2. - 0 - -1.2321940157562494e-003 - 0.0677922964096069 - -0.1166194006800652 - <_> - - <_> - - - - <_>1 17 4 6 -1. - <_>3 17 2 6 2. - 0 - -5.9950752183794975e-003 - -0.4238491058349609 - 0.1320454031229019 - <_> - - <_> - - - - <_>4 5 6 4 -1. - <_>4 7 6 2 2. - 0 - 0.0269428305327892 - -0.1016191020607948 - 0.4809207916259766 - <_> - - <_> - - - - <_>7 3 4 6 -1. - <_>7 3 2 6 2. - 1 - 0.0669070035219193 - -0.0845523476600647 - 0.4927454888820648 - <_> - - <_> - - - - <_>6 24 6 4 -1. - <_>6 24 3 4 2. - 0 - -1.6729519702494144e-003 - 0.0921978726983070 - -0.2295431047677994 - <_> - - <_> - - - - <_>1 21 12 3 -1. - <_>5 21 4 3 3. - 0 - 0.0138087300583720 - -0.0609050989151001 - 0.5849006175994873 - <_> - - <_> - - - - <_>7 17 2 7 -1. - <_>7 17 1 7 2. - 1 - -0.0236271601170301 - -0.8834797739982605 - 9.7397705540060997e-003 - <_> - - <_> - - - - <_>7 17 7 2 -1. - <_>7 17 7 1 2. - 1 - -0.0139276403933764 - -0.6530944108963013 - 0.0528865084052086 - <_> - - <_> - - - - <_>6 12 3 16 -1. - <_>6 20 3 8 2. - 0 - 3.6122989840805531e-003 - -0.2636939883232117 - 0.1059527993202210 - <_> - - <_> - - - - <_>2 24 9 4 -1. - <_>5 24 3 4 3. - 0 - -0.0529494509100914 - -0.7340934276580811 - 0.0470140390098095 - <_> - - <_> - - - - <_>2 25 12 2 -1. - <_>2 25 6 2 2. - 0 - 0.0174148194491863 - 0.0176837407052517 - -0.5878229737281799 - <_> - - <_> - - - - <_>0 25 12 2 -1. - <_>6 25 6 2 2. - 0 - -3.2427799305878580e-004 - 0.1388638019561768 - -0.3060975074768066 - <_> - - <_> - - - - <_>4 11 6 8 -1. - <_>4 15 6 4 2. - 0 - -0.0436137914657593 - 0.5485711097717285 - -0.0673488527536392 - <_> - - <_> - - - - <_>5 0 4 6 -1. - <_>7 0 2 6 2. - 0 - -9.3427510000765324e-004 - 0.1839264035224915 - -0.1749247014522553 - <_> - - <_> - - - - <_>2 2 10 7 -1. - <_>2 2 5 7 2. - 0 - 0.0796064212918282 - 0.0456521511077881 - -0.6391065716743469 - <_> - - <_> - - - - <_>0 1 12 25 -1. - <_>3 1 6 25 2. - 0 - -0.0251207500696182 - 0.1004699021577835 - -0.2782456874847412 - <_> - - <_> - - - - <_>1 14 12 6 -1. - <_>4 14 6 6 2. - 0 - 0.0329769104719162 - -0.0593111999332905 - 0.6532837748527527 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -3.7845480255782604e-003 - -0.2419032007455826 - 0.1309728026390076 - <_> - - <_> - - - - <_>6 15 3 12 -1. - <_>7 15 1 12 3. - 0 - 9.4495685771107674e-003 - -0.0931000337004662 - 0.2378582060337067 - <_> - - <_> - - - - <_>6 7 2 12 -1. - <_>7 7 1 12 2. - 0 - 2.5168890133500099e-003 - 0.1360431015491486 - -0.2815954089164734 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>5 9 2 6 2. - 0 - 2.6242460589855909e-003 - 0.0898342728614807 - -0.3772903978824616 - <_> - - <_> - - - - <_>3 20 6 6 -1. - <_>6 20 3 6 2. - 0 - -0.0446261987090111 - 0.3832083940505981 - -0.0962854698300362 - <_> - - <_> - - - - <_>3 10 8 4 -1. - <_>3 10 4 4 2. - 0 - 1.4027470024302602e-004 - -0.1726175993680954 - 0.1657430976629257 - <_> - - <_> - - - - <_>0 5 9 18 -1. - <_>3 11 3 6 9. - 0 - 0.0391159094870090 - 0.0786521136760712 - -0.3568983972072601 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 0 - -0.0666820034384727 - -0.8800150752067566 - 9.0465601533651352e-003 - <_> - - <_> - - - - <_>2 8 4 6 -1. - <_>4 8 2 6 2. - 0 - 6.3860351219773293e-003 - -0.0759362131357193 - 0.3862276971340179 - <_> - - <_> - - - - <_>8 8 4 12 -1. - <_>10 8 2 6 2. - <_>8 14 2 6 2. - 0 - 0.0435498990118504 - -0.0256800092756748 - 0.7408592104911804 - <_> - - <_> - - - - <_>4 10 6 8 -1. - <_>4 10 3 4 2. - <_>7 14 3 4 2. - 0 - 1.8360930262133479e-003 - 0.1118386983871460 - -0.3336220085620880 - <_> - - <_> - - - - <_>7 15 4 6 -1. - <_>7 15 4 3 2. - 1 - 1.6189280431717634e-003 - 0.0189690608531237 - -0.1513012945652008 - <_> - - <_> - - - - <_>7 15 6 4 -1. - <_>7 15 3 4 2. - 1 - 2.8807038906961679e-003 - 0.0942855924367905 - -0.3110074996948242 - <_> - - <_> - - - - <_>1 9 13 15 -1. - <_>1 14 13 5 3. - 0 - -0.0324896499514580 - -0.2190852016210556 - 0.1137090027332306 - <_> - - <_> - - - - <_>5 1 3 25 -1. - <_>6 1 1 25 3. - 0 - -0.0382537096738815 - 0.3790800869464874 - -0.0682981386780739 - <_> - - <_> - - - - <_>6 15 3 12 -1. - <_>7 15 1 12 3. - 0 - -0.0184787698090076 - 0.2962324917316437 - -0.0606829114258289 - <_> - - <_> - - - - <_>0 7 4 16 -1. - <_>0 7 2 8 2. - <_>2 15 2 8 2. - 0 - 0.0155697502195835 - 0.0857312902808189 - -0.3317534029483795 - <_> - - <_> - - - - <_>4 2 6 4 -1. - <_>4 4 6 2 2. - 0 - -1.7486449796706438e-003 - 0.1255429983139038 - -0.1979753971099854 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 5 10 5 2. - 0 - 0.0909955576062202 - -0.0675900131464005 - 0.5267614722251892 - <_> - - <_> - - - - <_>8 5 6 8 -1. - <_>11 5 3 4 2. - <_>8 9 3 4 2. - 0 - -6.0815969482064247e-003 - 0.2188315987586975 - -0.1579461991786957 - <_> - - <_> - - - - <_>1 14 12 14 -1. - <_>1 14 6 7 2. - <_>7 21 6 7 2. - 0 - 0.0136338500306010 - 0.1246353015303612 - -0.2339652925729752 - <_> - - <_> - - - - <_>7 1 6 18 -1. - <_>9 7 2 6 9. - 0 - -0.3204661905765533 - 0.4580850899219513 - -0.0275732595473528 - <_> - - <_> - - - - <_>0 18 14 8 -1. - <_>0 18 7 4 2. - <_>7 22 7 4 2. - 0 - -3.6630940157920122e-003 - -0.2400335073471069 - 0.1225626021623612 - -0.9280924201011658 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>2 3 8 23 -1. - <_>6 3 4 23 2. - 0 - -0.1590135991573334 - 0.4353503882884979 - -0.1706434935331345 - <_> - - <_> - - - - <_>10 18 4 9 -1. - <_>10 18 2 9 2. - 0 - -8.1815905869007111e-003 - -0.4628070890903473 - 0.0885146036744118 - <_> - - <_> - - - - <_>0 25 8 3 -1. - <_>4 25 4 3 2. - 0 - -7.1978997766564135e-006 - 0.1624667048454285 - -0.3189904093742371 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - 0.0141281802207232 - 0.0432598814368248 - -0.5932887792587280 - <_> - - <_> - - - - <_>1 22 4 6 -1. - <_>3 22 2 6 2. - 0 - -9.5496661961078644e-003 - -0.6398767232894898 - 0.0462039299309254 - <_> - - <_> - - - - <_>6 16 2 12 -1. - <_>6 16 1 12 2. - 0 - -2.4156800936907530e-003 - 0.2600989937782288 - -0.1709903031587601 - <_> - - <_> - - - - <_>2 14 6 14 -1. - <_>2 14 3 7 2. - <_>5 21 3 7 2. - 0 - 4.4057718478143215e-003 - -0.2267919927835465 - 0.1639396995306015 - <_> - - <_> - - - - <_>4 8 6 6 -1. - <_>6 8 2 6 3. - 0 - -0.0338254384696484 - -0.7283406257629395 - 0.0516999587416649 - <_> - - <_> - - - - <_>0 18 8 6 -1. - <_>0 18 4 3 2. - <_>4 21 4 3 2. - 0 - 0.0296280104666948 - 0.0343999303877354 - -0.6940060853958130 - <_> - - <_> - - - - <_>7 13 6 11 -1. - <_>9 13 2 11 3. - 0 - 0.1229469031095505 - 3.3281920477747917e-003 - -0.7660214900970459 - <_> - - <_> - - - - <_>1 16 12 7 -1. - <_>4 16 6 7 2. - 0 - -0.0988161712884903 - 0.3143998086452484 - -0.1013118028640747 - <_> - - <_> - - - - <_>7 15 4 9 -1. - <_>7 15 2 9 2. - 0 - -3.3952430821955204e-003 - 0.0333622097969055 - -0.1316892951726914 - <_> - - <_> - - - - <_>3 15 4 9 -1. - <_>5 15 2 9 2. - 0 - 0.0245866999030113 - -0.0652275532484055 - 0.6816970109939575 - <_> - - <_> - - - - <_>10 18 4 8 -1. - <_>10 18 2 8 2. - 0 - 7.8804800286889076e-003 - 0.1292610019445419 - -0.4378339052200317 - <_> - - <_> - - - - <_>2 7 9 6 -1. - <_>2 9 9 2 3. - 0 - -9.1016880469396710e-004 - 0.1369279026985169 - -0.1982776969671249 - <_> - - <_> - - - - <_>1 9 12 6 -1. - <_>1 12 12 3 2. - 0 - 0.0161782596260309 - 0.0992875024676323 - -0.3409053981304169 - <_> - - <_> - - - - <_>3 5 5 12 -1. - <_>3 11 5 6 2. - 0 - -0.1052768006920815 - -0.9173877239227295 - 0.0326749682426453 - <_> - - <_> - - - - <_>3 6 8 4 -1. - <_>3 8 8 2 2. - 0 - -0.0370904989540577 - 0.4204797148704529 - -0.0710027664899826 - <_> - - <_> - - - - <_>4 6 6 6 -1. - <_>4 8 6 2 3. - 0 - 0.0387211404740810 - -0.0732844322919846 - 0.4820480942726135 - <_> - - <_> - - - - <_>1 26 12 2 -1. - <_>1 26 6 2 2. - 0 - -3.4923329949378967e-003 - -0.2871321141719818 - 0.1039713025093079 - <_> - - <_> - - - - <_>5 7 4 6 -1. - <_>7 7 2 6 2. - 0 - -0.0112144602462649 - -0.5163223147392273 - 0.0543844103813171 - <_> - - <_> - - - - <_>7 5 6 5 -1. - <_>7 5 3 5 2. - 1 - -2.2951549908611923e-004 - -0.1635524034500122 - 0.0772165581583977 - <_> - - <_> - - - - <_>5 9 3 13 -1. - <_>6 9 1 13 3. - 0 - 0.0257446095347404 - -0.0573031008243561 - 0.4952527880668640 - <_> - - <_> - - - - <_>5 18 6 10 -1. - <_>8 18 3 5 2. - <_>5 23 3 5 2. - 0 - 0.0379986204206944 - 0.0276545807719231 - -0.4847078919410706 - <_> - - <_> - - - - <_>3 18 6 10 -1. - <_>3 18 3 5 2. - <_>6 23 3 5 2. - 0 - 2.3906941059976816e-003 - -0.2010668069124222 - 0.1620907932519913 - <_> - - <_> - - - - <_>7 15 7 6 -1. - <_>7 15 7 3 2. - 1 - -0.1289131939411163 - -0.6972699761390686 - 0.0172267593443394 - <_> - - <_> - - - - <_>0 23 9 5 -1. - <_>3 23 3 5 3. - 0 - 9.4630720559507608e-004 - -0.2710422873497009 - 0.1089453995227814 - <_> - - <_> - - - - <_>7 15 7 6 -1. - <_>7 15 7 3 2. - 1 - 3.2807278912514448e-003 - -0.0419495105743408 - 0.0821790024638176 - <_> - - <_> - - - - <_>7 15 6 7 -1. - <_>7 15 3 7 2. - 1 - 0.0512044988572598 - 0.0481804087758064 - -0.6634492278099060 - <_> - - <_> - - - - <_>7 2 6 12 -1. - <_>10 2 3 6 2. - <_>7 8 3 6 2. - 0 - -0.0457515083253384 - 0.1935078948736191 - -0.0372233018279076 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>7 5 6 2 2. - 1 - 0.0143915796652436 - 0.1082883030176163 - -0.2352464050054550 - <_> - - <_> - - - - <_>7 3 6 10 -1. - <_>10 3 3 5 2. - <_>7 8 3 5 2. - 0 - -7.6694227755069733e-003 - 0.0774298831820488 - -0.0466584414243698 - <_> - - <_> - - - - <_>1 3 6 10 -1. - <_>1 3 3 5 2. - <_>4 8 3 5 2. - 0 - -0.0493752099573612 - 0.3560423851013184 - -0.0817319303750992 - <_> - - <_> - - - - <_>1 7 12 4 -1. - <_>1 7 6 4 2. - 0 - 0.0493589788675308 - 0.0501068383455276 - -0.5927317142486572 - <_> - - <_> - - - - <_>5 1 6 4 -1. - <_>5 1 6 2 2. - 1 - 0.0530142895877361 - 0.0331554301083088 - -0.7078366875648499 - <_> - - <_> - - - - <_>0 0 14 10 -1. - <_>0 5 14 5 2. - 0 - -0.0120867397636175 - 0.1494368016719818 - -0.1897324025630951 - <_> - - <_> - - - - <_>0 8 10 18 -1. - <_>0 8 5 9 2. - <_>5 17 5 9 2. - 0 - -0.1357958018779755 - 0.4586344063282013 - -0.0719983428716660 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - 1.9633909687399864e-003 - -0.1042060032486916 - 0.1846560984849930 - <_> - - <_> - - - - <_>2 21 8 7 -1. - <_>4 21 4 7 2. - 0 - 9.3589266762137413e-003 - 0.0539574585855007 - -0.4733794033527374 - <_> - - <_> - - - - <_>3 21 8 6 -1. - <_>5 21 4 6 2. - 0 - 4.3361759744584560e-003 - -0.0571734011173248 - 0.5095887184143066 - <_> - - <_> - - - - <_>4 10 6 8 -1. - <_>6 10 2 8 3. - 0 - 8.5009206086397171e-003 - 0.0940768197178841 - -0.2926596999168396 - <_> - - <_> - - - - <_>8 2 3 12 -1. - <_>9 2 1 12 3. - 0 - -0.0190899204462767 - 0.3542652130126953 - -0.0558761097490788 - <_> - - <_> - - - - <_>3 2 3 12 -1. - <_>4 2 1 12 3. - 0 - -1.6061830101534724e-003 - 0.1663406044244766 - -0.1593942940235138 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - -7.8830653801560402e-003 - -0.2606467008590698 - 0.0552368983626366 - <_> - - <_> - - - - <_>1 25 12 3 -1. - <_>7 25 6 3 2. - 0 - -3.2838371116667986e-003 - -0.2492434978485107 - 0.1428827941417694 - <_> - - <_> - - - - <_>7 20 3 5 -1. - <_>8 21 1 5 3. - 1 - 0.0192042198032141 - -0.0261326599866152 - 0.3293955028057098 - -0.8597478270530701 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>3 15 8 11 -1. - <_>5 15 4 11 2. - 0 - -0.1014143005013466 - 0.4719781875610352 - -0.1812396049499512 - <_> - - <_> - - - - <_>1 1 12 21 -1. - <_>5 8 4 7 9. - 0 - -0.7670872211456299 - 0.4321441948413849 - -0.1070564016699791 - <_> - - <_> - - - - <_>0 22 4 6 -1. - <_>2 22 2 6 2. - 0 - 8.0198869109153748e-003 - 0.0848589166998863 - -0.5016363263130188 - <_> - - <_> - - - - <_>5 23 9 4 -1. - <_>8 23 3 4 3. - 0 - 0.0421738885343075 - 0.0436127297580242 - -0.6513525247573853 - <_> - - <_> - - - - <_>0 23 9 4 -1. - <_>3 23 3 4 3. - 0 - 4.0101539343595505e-003 - -0.2415114045143127 - 0.1702917963266373 - <_> - - <_> - - - - <_>6 3 4 12 -1. - <_>8 3 2 6 2. - <_>6 9 2 6 2. - 0 - -1.3389269588515162e-003 - -0.1842131018638611 - 0.0922170132398605 - <_> - - <_> - - - - <_>6 4 2 24 -1. - <_>6 4 1 12 2. - <_>7 16 1 12 2. - 0 - 3.3321550581604242e-003 - -0.1670908927917481 - 0.1923999935388565 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>5 9 2 6 2. - 0 - 1.5524900518357754e-003 - 0.1111333966255188 - -0.3120034933090210 - <_> - - <_> - - - - <_>2 7 4 6 -1. - <_>4 7 2 6 2. - 0 - 0.0238092597573996 - -0.0640965998172760 - 0.5616208910942078 - <_> - - <_> - - - - <_>4 8 6 20 -1. - <_>4 18 6 10 2. - 0 - 0.0280854292213917 - -0.2239045947790146 - 0.1683211028575897 - <_> - - <_> - - - - <_>1 16 3 12 -1. - <_>2 16 1 12 3. - 0 - -4.7726151533424854e-003 - -0.4615002870559692 - 0.0494330003857613 - <_> - - <_> - - - - <_>8 12 6 16 -1. - <_>8 16 6 8 2. - 0 - 0.1053185015916824 - 0.0346832908689976 - -0.6428365111351013 - <_> - - <_> - - - - <_>1 17 4 6 -1. - <_>3 17 2 6 2. - 0 - -7.2594000957906246e-003 - -0.4041875898838043 - 0.0609010681509972 - <_> - - <_> - - - - <_>7 14 6 9 -1. - <_>9 14 2 9 3. - 0 - 8.7005542591214180e-003 - -0.0758324787020683 - 0.0894848927855492 - <_> - - <_> - - - - <_>1 14 6 9 -1. - <_>3 14 2 9 3. - 0 - -0.0536715202033520 - 0.7371097207069397 - -0.0409931503236294 - <_> - - <_> - - - - <_>8 0 4 18 -1. - <_>10 0 2 9 2. - <_>8 9 2 9 2. - 0 - 0.0345212109386921 - -0.0137315401807427 - 0.2729964852333069 - <_> - - <_> - - - - <_>2 0 4 18 -1. - <_>2 0 2 9 2. - <_>4 9 2 9 2. - 0 - -7.2156880050897598e-003 - 0.1272314935922623 - -0.2332960963249207 - <_> - - <_> - - - - <_>11 14 2 12 -1. - <_>11 14 1 12 2. - 0 - 1.7666360363364220e-003 - 0.0579776912927628 - -0.2003654986619949 - <_> - - <_> - - - - <_>1 14 2 12 -1. - <_>2 14 1 12 2. - 0 - 3.8101759273558855e-003 - 0.0738669112324715 - -0.3078007102012634 - <_> - - <_> - - - - <_>8 11 3 12 -1. - <_>9 11 1 12 3. - 0 - -0.0250196307897568 - 0.4350267052650452 - -0.0482944287359715 - <_> - - <_> - - - - <_>1 7 12 6 -1. - <_>4 7 6 6 2. - 0 - 9.7328815609216690e-003 - -0.0830639526247978 - 0.3000870048999786 - <_> - - <_> - - - - <_>1 1 12 9 -1. - <_>4 1 6 9 2. - 0 - -3.3074519596993923e-003 - 0.1359129995107651 - -0.2247667014598846 - <_> - - <_> - - - - <_>1 3 12 20 -1. - <_>1 3 6 10 2. - <_>7 13 6 10 2. - 0 - -0.1917860954999924 - -0.8793690204620361 - 0.0279150791466236 - <_> - - <_> - - - - <_>4 8 6 10 -1. - <_>7 8 3 5 2. - <_>4 13 3 5 2. - 0 - 6.0892169130966067e-004 - -0.2289137989282608 - 0.1023617014288902 - <_> - - <_> - - - - <_>6 5 8 3 -1. - <_>6 5 4 3 2. - 1 - -7.7072591520845890e-003 - -0.2491775006055832 - 0.0943151563405991 - <_> - - <_> - - - - <_>3 15 8 7 -1. - <_>5 15 4 7 2. - 0 - -0.1091611012816429 - 0.5566406846046448 - -0.0474190413951874 - <_> - - <_> - - - - <_>0 14 12 12 -1. - <_>4 18 4 4 9. - 0 - -0.0637037828564644 - -0.2150306999683380 - 0.1065587997436523 - <_> - - <_> - - - - <_>5 12 4 16 -1. - <_>5 16 4 8 2. - 0 - -0.0267041604965925 - 0.3301782011985779 - -0.0935690328478813 - <_> - - <_> - - - - <_>0 21 12 6 -1. - <_>4 21 4 6 3. - 0 - -2.7289129793643951e-003 - 0.0865313410758972 - -0.2662309110164642 - <_> - - <_> - - - - <_>4 17 8 7 -1. - <_>4 17 4 7 2. - 0 - -0.1057505011558533 - -1. - 5.9039499610662460e-003 - <_> - - <_> - - - - <_>2 17 8 7 -1. - <_>6 17 4 7 2. - 0 - 0.0189048293977976 - -0.0620773099362850 - 0.4779633879661560 - <_> - - <_> - - - - <_>7 4 6 5 -1. - <_>7 4 3 5 2. - 1 - -0.1639672070741653 - -1. - 0.0104935104027390 - <_> - - <_> - - - - <_>7 4 5 6 -1. - <_>7 4 5 3 2. - 1 - 0.0104537103325129 - 0.1268896013498306 - -0.2035153061151505 - <_> - - <_> - - - - <_>8 3 6 7 -1. - <_>8 3 3 7 2. - 1 - 0.1372427046298981 - 9.6491426229476929e-003 - -0.3790872991085053 - <_> - - <_> - - - - <_>6 3 7 6 -1. - <_>6 3 7 3 2. - 1 - -5.0359591841697693e-003 - -0.2593623101711273 - 0.1174589022994041 - <_> - - <_> - - - - <_>7 4 2 22 -1. - <_>7 4 1 22 2. - 0 - 6.5677291713654995e-003 - -0.0604652911424637 - 0.1563781946897507 - <_> - - <_> - - - - <_>5 4 2 22 -1. - <_>6 4 1 22 2. - 0 - -0.0303469896316528 - 0.3840340077877045 - -0.0614773593842983 - <_> - - <_> - - - - <_>7 8 2 12 -1. - <_>7 8 1 12 2. - 0 - 0.0175463296473026 - 0.0286432299762964 - -0.4767946898937225 - <_> - - <_> - - - - <_>5 8 2 12 -1. - <_>6 8 1 12 2. - 0 - -4.5566740445792675e-003 - -0.3126108944416046 - 0.1088562980294228 - <_> - - <_> - - - - <_>3 8 10 5 -1. - <_>3 8 5 5 2. - 0 - -0.0698510929942131 - -0.7099410295486450 - 0.0185367707163095 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - -1.4962710338295437e-005 - 0.1028714030981064 - -0.2292115986347199 - <_> - - <_> - - - - <_>8 8 4 16 -1. - <_>10 8 2 8 2. - <_>8 16 2 8 2. - 0 - -0.0727050006389618 - 0.4252012073993683 - -0.0282363407313824 - <_> - - <_> - - - - <_>2 8 4 16 -1. - <_>2 8 2 8 2. - <_>4 16 2 8 2. - 0 - 0.0373382903635502 - -0.0766300335526466 - 0.3237414956092835 - <_> - - <_> - - - - <_>1 21 12 4 -1. - <_>7 21 6 2 2. - <_>1 23 6 2 2. - 0 - 0.0286909602582455 - 0.0300294999033213 - -0.8400797843933106 - <_> - - <_> - - - - <_>4 2 2 12 -1. - <_>4 8 2 6 2. - 0 - 0.0100197698920965 - -0.0790718570351601 - 0.3401907086372376 - <_> - - <_> - - - - <_>4 10 6 4 -1. - <_>4 12 6 2 2. - 0 - -3.9540659636259079e-003 - -0.2444967925548554 - 0.1184566020965576 - <_> - - <_> - - - - <_>2 8 10 12 -1. - <_>2 12 10 4 3. - 0 - -8.2879550755023956e-003 - 0.1062875017523766 - -0.2204415053129196 - <_> - - <_> - - - - <_>4 17 6 8 -1. - <_>7 17 3 4 2. - <_>4 21 3 4 2. - 0 - -0.0345824807882309 - -0.7133362889289856 - 0.0297279208898544 - <_> - - <_> - - - - <_>7 15 4 3 -1. - <_>6 16 4 1 3. - 1 - -1.4701869804412127e-003 - 0.1263066977262497 - -0.1826086044311523 - <_> - - <_> - - - - <_>9 20 3 5 -1. - <_>10 21 1 5 3. - 1 - -0.0187925603240728 - 0.4415951073169708 - -0.0629801005125046 - <_> - - <_> - - - - <_>0 18 14 6 -1. - <_>7 18 7 6 2. - 0 - -0.0198302809149027 - -0.2830869853496552 - 0.0921800285577774 - <_> - - <_> - - - - <_>9 0 3 24 -1. - <_>9 6 3 12 2. - 0 - -0.1632145941257477 - -0.4135583043098450 - 0.0115620503202081 - <_> - - <_> - - - - <_>2 0 3 24 -1. - <_>2 6 3 12 2. - 0 - 0.0756249874830246 - 0.0221054404973984 - -0.9143025279045105 - <_> - - <_> - - - - <_>6 2 4 6 -1. - <_>6 2 2 6 2. - 0 - -2.2491789422929287e-003 - 0.0919266864657402 - -0.1063376963138580 - <_> - - <_> - - - - <_>1 25 12 3 -1. - <_>5 25 4 3 3. - 0 - -0.0633106380701065 - -0.7710062861442566 - 0.0270474795252085 - -0.8670626282691956 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 12 14 -1. - <_>4 4 6 14 2. - 0 - -0.1704327017068863 - 0.4742506146430969 - -0.1858147978782654 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - 0.0279671307653189 - -0.0862911790609360 - 0.5325798988342285 - <_> - - <_> - - - - <_>7 18 4 6 -1. - <_>7 18 2 6 2. - 1 - 2.0941249385941774e-004 - -0.2719970047473908 - 0.1361507028341293 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - -0.0336372405290604 - 0.2829976081848145 - -0.0223564691841602 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -4.5356429181993008e-003 - 0.1613575965166092 - -0.2016250044107437 - <_> - - <_> - - - - <_>7 4 6 4 -1. - <_>7 4 3 4 2. - 1 - 3.3124668989330530e-003 - -0.0796776190400124 - 0.1437523961067200 - <_> - - <_> - - - - <_>7 1 7 4 -1. - <_>7 1 7 2 2. - 1 - -0.0548887401819229 - 0.6656386256217957 - -0.0535266697406769 - <_> - - <_> - - - - <_>7 2 6 4 -1. - <_>7 2 3 4 2. - 1 - 5.3796600550413132e-003 - -0.0964008867740631 - 0.0932230502367020 - <_> - - <_> - - - - <_>3 10 8 6 -1. - <_>5 10 4 6 2. - 0 - -0.0602832399308681 - -0.5432562232017517 - 0.0545159690082073 - <_> - - <_> - - - - <_>5 20 8 8 -1. - <_>7 20 4 8 2. - 0 - 8.4590855985879898e-003 - 0.0501895211637020 - -0.3763839900493622 - <_> - - <_> - - - - <_>6 15 8 5 -1. - <_>6 15 4 5 2. - 1 - 2.8549430426210165e-003 - 0.1310580968856812 - -0.2490307986736298 - <_> - - <_> - - - - <_>2 7 10 6 -1. - <_>7 7 5 3 2. - <_>2 10 5 3 2. - 0 - -0.0206082500517368 - -0.4339326024055481 - 0.0609189309179783 - <_> - - <_> - - - - <_>7 20 4 4 -1. - <_>6 21 4 2 2. - 1 - -0.0100884195417166 - 0.2943368852138519 - -0.1009266003966332 - <_> - - <_> - - - - <_>1 24 12 4 -1. - <_>4 24 6 4 2. - 0 - -0.0594313405454159 - -0.9010205268859863 - 0.0273306891322136 - <_> - - <_> - - - - <_>4 4 6 6 -1. - <_>6 4 2 6 3. - 0 - -2.4024050217121840e-003 - 0.1275802999734879 - -0.1913405954837799 - <_> - - <_> - - - - <_>1 4 12 24 -1. - <_>7 4 6 12 2. - <_>1 16 6 12 2. - 0 - -0.0273728203028440 - -0.2805157899856567 - 0.1089297980070114 - <_> - - <_> - - - - <_>4 4 3 15 -1. - <_>4 9 3 5 3. - 0 - -0.0738175511360168 - 0.3663662075996399 - -0.0712614730000496 - <_> - - <_> - - - - <_>11 3 3 8 -1. - <_>11 3 3 4 2. - 1 - -0.0693658664822578 - 0.4475974142551422 - -0.0351121984422207 - <_> - - <_> - - - - <_>4 9 2 13 -1. - <_>5 9 1 13 2. - 0 - -1.2530760141089559e-003 - 0.1048106998205185 - -0.2533156871795654 - <_> - - <_> - - - - <_>6 9 4 6 -1. - <_>6 9 2 6 2. - 0 - -3.2429681159555912e-003 - -0.2108380943536758 - 0.0897550135850906 - <_> - - <_> - - - - <_>2 17 8 3 -1. - <_>6 17 4 3 2. - 0 - 0.0161152593791485 - -0.0580191612243652 - 0.5575944185256958 - <_> - - <_> - - - - <_>4 11 6 8 -1. - <_>7 11 3 4 2. - <_>4 15 3 4 2. - 0 - 6.2562932725995779e-004 - -0.2161120027303696 - 0.1221512034535408 - <_> - - <_> - - - - <_>0 0 14 27 -1. - <_>0 9 14 9 3. - 0 - -0.7664182782173157 - -0.6364763975143433 - 0.0339151211082935 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>5 11 4 3 2. - 0 - -7.4419458542251959e-006 - 0.0953467115759850 - -0.2395074069499970 - <_> - - <_> - - - - <_>5 2 4 12 -1. - <_>5 5 4 6 2. - 0 - -3.7739300751127303e-004 - 0.1448128074407578 - -0.1847649067640305 - <_> - - <_> - - - - <_>6 3 4 9 -1. - <_>6 6 4 3 3. - 0 - 0.0767296031117439 - 0.0117427203804255 - -0.9621391892433167 - <_> - - <_> - - - - <_>4 3 4 9 -1. - <_>4 6 4 3 3. - 0 - -4.4697099365293980e-003 - -0.2338539063930512 - 0.1046433970332146 - <_> - - <_> - - - - <_>9 5 4 6 -1. - <_>9 5 4 3 2. - 1 - 0.0759118124842644 - 6.7219119518995285e-003 - -0.4231118857860565 - <_> - - <_> - - - - <_>5 5 6 4 -1. - <_>5 5 3 4 2. - 1 - -8.3202589303255081e-003 - 0.3212206065654755 - -0.0836618393659592 - <_> - - <_> - - - - <_>1 1 12 21 -1. - <_>4 1 6 21 2. - 0 - -0.0372338183224201 - 0.1166239008307457 - -0.2397601008415222 - <_> - - <_> - - - - <_>1 25 12 3 -1. - <_>5 25 4 3 3. - 0 - -2.1381198894232512e-003 - 0.0847558081150055 - -0.2514953017234802 - <_> - - <_> - - - - <_>9 18 4 10 -1. - <_>9 18 2 10 2. - 0 - -4.4315438717603683e-003 - -0.1099039986729622 - 0.0667133629322052 - <_> - - <_> - - - - <_>4 16 9 3 -1. - <_>3 17 9 1 3. - 1 - -0.0109596000984311 - 0.2881847023963928 - -0.0776968672871590 - <_> - - <_> - - - - <_>9 18 4 10 -1. - <_>9 18 2 10 2. - 0 - 0.0349071696400642 - -0.0117123397067189 - 0.3996582031250000 - <_> - - <_> - - - - <_>1 18 4 10 -1. - <_>3 18 2 10 2. - 0 - -0.0133350798860192 - -0.4989624917507172 - 0.0531930401921272 - <_> - - <_> - - - - <_>4 10 9 4 -1. - <_>4 12 9 2 2. - 0 - -0.0370701104402542 - -0.5934662818908691 - 0.0125023899599910 - <_> - - <_> - - - - <_>1 0 12 5 -1. - <_>5 0 4 5 3. - 0 - -0.0911188572645187 - -0.6066418886184692 - 0.0302236396819353 - <_> - - <_> - - - - <_>7 9 2 18 -1. - <_>7 15 2 6 3. - 0 - -0.0675279572606087 - 0.3259307146072388 - -0.0328103601932526 - <_> - - <_> - - - - <_>0 22 6 6 -1. - <_>2 22 2 6 3. - 0 - -0.0263177193701267 - -0.7659987807273865 - 0.0252636894583702 - <_> - - <_> - - - - <_>5 21 6 5 -1. - <_>5 21 3 5 2. - 0 - 0.0378778390586376 - 1.7415969632565975e-003 - -0.9109066724777222 - <_> - - <_> - - - - <_>3 21 6 5 -1. - <_>6 21 3 5 2. - 0 - 1.6833839472383261e-003 - -0.0647690072655678 - 0.3594624996185303 - <_> - - <_> - - - - <_>9 21 2 5 -1. - <_>9 21 1 5 2. - 1 - -4.2451170884305611e-005 - 0.0622288994491100 - -0.0850693508982658 - <_> - - <_> - - - - <_>0 17 6 8 -1. - <_>0 17 3 4 2. - <_>3 21 3 4 2. - 0 - 2.7713281451724470e-004 - -0.1725254952907562 - 0.1251116991043091 - <_> - - <_> - - - - <_>4 0 6 6 -1. - <_>6 0 2 6 3. - 0 - -3.0400960240513086e-003 - 0.1503273993730545 - -0.1442324966192246 - <_> - - <_> - - - - <_>2 1 6 14 -1. - <_>2 1 3 7 2. - <_>5 8 3 7 2. - 0 - -0.0548231489956379 - 0.3471147119998932 - -0.0632942169904709 - <_> - - <_> - - - - <_>6 8 5 6 -1. - <_>6 11 5 3 2. - 0 - 1.4232549583539367e-003 - 0.0737556889653206 - -0.2708419859409332 - <_> - - <_> - - - - <_>4 8 4 6 -1. - <_>6 8 2 6 2. - 0 - -3.3660030458122492e-003 - -0.2314403057098389 - 0.0882168710231781 - <_> - - <_> - - - - <_>4 6 6 6 -1. - <_>4 8 6 2 3. - 0 - -1.1405759723857045e-003 - 0.1568742990493774 - -0.1337956041097641 - <_> - - <_> - - - - <_>3 5 6 4 -1. - <_>3 7 6 2 2. - 0 - 3.7445020861923695e-003 - -0.1213240027427673 - 0.2272326946258545 - <_> - - <_> - - - - <_>7 6 4 6 -1. - <_>7 6 2 6 2. - 1 - 0.0165855102241039 - 0.0546315796673298 - -0.1011700034141541 - <_> - - <_> - - - - <_>4 5 6 4 -1. - <_>4 7 6 2 2. - 0 - -2.9970710165798664e-003 - 0.1725863069295883 - -0.1428837031126022 - <_> - - <_> - - - - <_>7 1 4 21 -1. - <_>8 1 2 21 2. - 0 - -3.0509869102388620e-003 - 0.1088953018188477 - -0.1286545991897583 - <_> - - <_> - - - - <_>2 2 6 20 -1. - <_>4 2 2 20 3. - 0 - -0.0270371790975332 - -0.2180904000997543 - 0.1033558025956154 - <_> - - <_> - - - - <_>9 20 3 5 -1. - <_>10 21 1 5 3. - 1 - -0.0140204904600978 - 0.1701382994651794 - -0.0464837998151779 - <_> - - <_> - - - - <_>0 24 6 4 -1. - <_>3 24 3 4 2. - 0 - 4.0001110173761845e-003 - 0.0614529401063919 - -0.3510772883892059 - <_> - - <_> - - - - <_>4 2 6 6 -1. - <_>6 2 2 6 3. - 0 - 0.0118885701522231 - -0.0656594932079315 - 0.3412817120552063 - <_> - - <_> - - - - <_>6 2 4 6 -1. - <_>6 2 4 3 2. - 1 - 0.0100419102236629 - 0.1064506992697716 - -0.2390539944171906 - <_> - - <_> - - - - <_>1 4 13 2 -1. - <_>1 5 13 1 2. - 0 - -8.3469128003343940e-004 - 0.1135992035269737 - -0.1245623007416725 - <_> - - <_> - - - - <_>7 11 6 7 -1. - <_>7 11 3 7 2. - 1 - -0.0842861980199814 - 0.4447234869003296 - -0.0466776899993420 - <_> - - <_> - - - - <_>8 16 6 4 -1. - <_>8 16 6 2 2. - 1 - -0.0120847001671791 - -0.3138999938964844 - 0.0818648189306259 - -0.8954405188560486 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>1 3 12 24 -1. - <_>5 11 4 8 9. - 0 - -0.6687834262847900 - 0.4141151010990143 - -0.1881030052900314 - <_> - - <_> - - - - <_>2 24 12 4 -1. - <_>8 24 6 2 2. - <_>2 26 6 2 2. - 0 - 3.4350738860666752e-004 - -0.1568018049001694 - 0.1078224033117294 - <_> - - <_> - - - - <_>0 24 12 4 -1. - <_>0 24 6 2 2. - <_>6 26 6 2 2. - 0 - 2.6565280277282000e-003 - -0.2203073054552078 - 0.2143961042165756 - <_> - - <_> - - - - <_>6 4 2 24 -1. - <_>7 4 1 12 2. - <_>6 16 1 12 2. - 0 - -0.0192963592708111 - 0.4202668070793152 - -0.0686715468764305 - <_> - - <_> - - - - <_>4 8 6 6 -1. - <_>6 8 2 6 3. - 0 - -6.6540208645164967e-003 - -0.2348881959915161 - 0.1674998998641968 - <_> - - <_> - - - - <_>6 6 4 9 -1. - <_>6 6 2 9 2. - 0 - 0.0155219901353121 - 0.0197856705635786 - -0.3918034136295319 - <_> - - <_> - - - - <_>2 8 8 7 -1. - <_>6 8 4 7 2. - 0 - 0.0803179070353508 - -0.0192786995321512 - 0.5852081775665283 - <_> - - <_> - - - - <_>3 7 10 7 -1. - <_>3 7 5 7 2. - 0 - -0.1022005975246429 - -0.8146116733551025 - 8.9545976370573044e-003 - <_> - - <_> - - - - <_>1 7 10 7 -1. - <_>6 7 5 7 2. - 0 - -0.0106188701465726 - 0.1804476976394653 - -0.2112286984920502 - <_> - - <_> - - - - <_>4 1 9 12 -1. - <_>7 5 3 4 9. - 0 - 0.0986580699682236 - -0.0491793490946293 - 0.2187125980854034 - <_> - - <_> - - - - <_>1 1 9 12 -1. - <_>4 5 3 4 9. - 0 - -0.0667582228779793 - -0.2664954066276550 - 0.1070794016122818 - <_> - - <_> - - - - <_>4 25 8 3 -1. - <_>4 25 4 3 2. - 0 - -0.0292564593255520 - -0.7880920767784119 - 5.6176739744842052e-003 - <_> - - <_> - - - - <_>0 16 12 7 -1. - <_>3 16 6 7 2. - 0 - -0.0121261896565557 - 0.1021850034594536 - -0.2289942950010300 - <_> - - <_> - - - - <_>9 17 4 7 -1. - <_>9 17 2 7 2. - 0 - -0.0549196191132069 - -0.5364720225334168 - 0.0142133301123977 - <_> - - <_> - - - - <_>1 17 4 7 -1. - <_>3 17 2 7 2. - 0 - -4.0985811501741409e-003 - -0.3165036141872406 - 0.0767941921949387 - <_> - - <_> - - - - <_>7 0 4 7 -1. - <_>7 0 2 7 2. - 1 - -0.0625810772180557 - -0.4872623980045319 - 9.1610476374626160e-003 - <_> - - <_> - - - - <_>7 0 7 4 -1. - <_>7 0 7 2 2. - 1 - 0.0498344711959362 - -0.0756874829530716 - 0.2999810874462128 - <_> - - <_> - - - - <_>9 3 5 6 -1. - <_>9 3 5 3 2. - 1 - 0.1033302992582321 - 0.0333879999816418 - -0.5665271878242493 - <_> - - <_> - - - - <_>0 10 6 12 -1. - <_>0 10 3 6 2. - <_>3 16 3 6 2. - 0 - -0.0261539593338966 - 0.4466365873813629 - -0.0571461506187916 - <_> - - <_> - - - - <_>9 3 4 12 -1. - <_>10 3 2 12 2. - 0 - 0.0689492970705032 - 6.6676470451056957e-003 - -0.9996885061264038 - <_> - - <_> - - - - <_>1 3 4 12 -1. - <_>2 3 2 12 2. - 0 - 2.1299200598150492e-003 - -0.1825354993343353 - 0.1254345029592514 - <_> - - <_> - - - - <_>2 7 10 10 -1. - <_>7 7 5 5 2. - <_>2 12 5 5 2. - 0 - -0.0449918396770954 - -0.5640115141868591 - 0.0372867509722710 - <_> - - <_> - - - - <_>3 16 4 9 -1. - <_>5 16 2 9 2. - 0 - 0.0225338600575924 - -0.0426485016942024 - 0.5983905196189880 - <_> - - <_> - - - - <_>0 11 14 11 -1. - <_>0 11 7 11 2. - 0 - 0.1927445977926254 - 0.0304794907569885 - -0.8456454873085022 - <_> - - <_> - - - - <_>6 16 5 6 -1. - <_>4 18 5 2 3. - 1 - -9.2559499898925424e-004 - -0.2061451971530914 - 0.1101664975285530 - <_> - - <_> - - - - <_>11 20 2 6 -1. - <_>11 20 1 6 2. - 1 - -3.6584408953785896e-003 - 0.0914329364895821 - -0.0828882232308388 - <_> - - <_> - - - - <_>1 18 4 6 -1. - <_>3 18 2 6 2. - 0 - 3.3741090446710587e-003 - 0.0807349011301994 - -0.3049516081809998 - <_> - - <_> - - - - <_>10 14 3 6 -1. - <_>11 15 1 6 3. - 1 - -0.0517578013241291 - -0.8006712794303894 - 2.8978339396417141e-003 - <_> - - <_> - - - - <_>4 14 6 3 -1. - <_>3 15 6 1 3. - 1 - 1.0498389601707458e-003 - -0.1839697062969208 - 0.1342992931604385 - <_> - - <_> - - - - <_>7 20 3 5 -1. - <_>8 21 1 5 3. - 1 - 7.5232777744531631e-003 - -0.0312062408775091 - 0.1212494000792503 - <_> - - <_> - - - - <_>2 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -7.1075286541599780e-005 - 0.0840176567435265 - -0.2504396140575409 - <_> - - <_> - - - - <_>9 15 3 12 -1. - <_>10 15 1 12 3. - 0 - 0.0113628301769495 - -0.0762805193662643 - 0.2055979073047638 - <_> - - <_> - - - - <_>5 15 6 2 -1. - <_>5 15 6 1 2. - 1 - -2.4097480345517397e-003 - -0.1504285037517548 - 0.1649363934993744 - <_> - - <_> - - - - <_>7 18 2 7 -1. - <_>7 18 1 7 2. - 1 - 0.0240569896996021 - 0.0145665500313044 - -0.9088677167892456 - <_> - - <_> - - - - <_>7 20 5 3 -1. - <_>6 21 5 1 3. - 1 - -0.0239836201071739 - 0.3910767138004303 - -0.0541782006621361 - <_> - - <_> - - - - <_>10 16 2 10 -1. - <_>10 16 1 10 2. - 1 - -0.0214383192360401 - -0.4854584038257599 - 0.0404027514159679 - <_> - - <_> - - - - <_>4 16 10 2 -1. - <_>4 16 10 1 2. - 1 - 0.0152107402682304 - 0.0344815887510777 - -0.5440633296966553 - <_> - - <_> - - - - <_>1 17 12 6 -1. - <_>4 17 6 6 2. - 0 - 0.0117129897698760 - -0.0652067512273788 - 0.4100702106952667 - <_> - - <_> - - - - <_>4 15 6 8 -1. - <_>4 15 3 4 2. - <_>7 19 3 4 2. - 0 - 6.3996820244938135e-004 - -0.1477289944887161 - 0.1515424996614456 - <_> - - <_> - - - - <_>7 17 6 4 -1. - <_>9 19 2 4 3. - 1 - -3.4567480906844139e-003 - 0.0633511170744896 - -0.1429782956838608 - <_> - - <_> - - - - <_>7 17 4 6 -1. - <_>5 19 4 2 3. - 1 - -1.2475489638745785e-003 - -0.1852106004953384 - 0.1341083049774170 - <_> - - <_> - - - - <_>1 13 12 4 -1. - <_>1 13 6 4 2. - 0 - 6.6904430277645588e-003 - 0.1411253064870834 - -0.1877893954515457 - <_> - - <_> - - - - <_>0 2 8 12 -1. - <_>0 2 4 6 2. - <_>4 8 4 6 2. - 0 - -0.0691810324788094 - 0.3445147871971130 - -0.0846552327275276 - <_> - - <_> - - - - <_>6 2 2 16 -1. - <_>6 10 2 8 2. - 0 - -0.0678932815790176 - -0.7007694244384766 - 0.0233272593468428 - <_> - - <_> - - - - <_>2 8 8 4 -1. - <_>2 10 8 2 2. - 0 - -8.5538747953251004e-004 - 0.0923932567238808 - -0.2141647040843964 - <_> - - <_> - - - - <_>5 10 4 18 -1. - <_>5 19 4 9 2. - 0 - 0.1796776950359345 - 0.0291036702692509 - -0.7869086265563965 - <_> - - <_> - - - - <_>0 3 3 12 -1. - <_>0 7 3 4 3. - 0 - -2.9843579977750778e-003 - 0.1611738055944443 - -0.1286869943141937 - <_> - - <_> - - - - <_>1 22 12 4 -1. - <_>7 22 6 2 2. - <_>1 24 6 2 2. - 0 - 0.0199734494090080 - 0.0363502316176891 - -0.5940064191818237 - <_> - - <_> - - - - <_>2 19 7 2 -1. - <_>2 19 7 1 2. - 1 - -8.3998020272701979e-004 - 0.1133214011788368 - -0.1917572021484375 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - 5.0804121419787407e-003 - 0.0536635592579842 - -0.2794001102447510 - <_> - - <_> - - - - <_>0 11 6 14 -1. - <_>0 11 3 7 2. - <_>3 18 3 7 2. - 0 - 7.3341121897101402e-003 - -0.1679237931966782 - 0.1211922019720078 - <_> - - <_> - - - - <_>7 3 3 10 -1. - <_>7 8 3 5 2. - 0 - 7.6924441382288933e-003 - -0.0690761879086494 - 0.1855034977197647 - <_> - - <_> - - - - <_>0 17 6 6 -1. - <_>2 17 2 6 3. - 0 - 2.0062309340573847e-004 - -0.2065404951572418 - 0.0973372533917427 - <_> - - <_> - - - - <_>9 16 2 12 -1. - <_>9 16 1 12 2. - 0 - 0.0269195605069399 - -0.0236485991626978 - 0.6487352848052979 - <_> - - <_> - - - - <_>6 16 6 3 -1. - <_>5 17 6 1 3. - 1 - -2.7951570227742195e-003 - -0.2072560042142868 - 0.1018809005618095 - <_> - - <_> - - - - <_>8 0 6 8 -1. - <_>10 2 2 8 3. - 1 - 0.0780266225337982 - 8.9439805597066879e-003 - -0.3999060988426209 - <_> - - <_> - - - - <_>6 4 8 6 -1. - <_>8 6 4 6 2. - 1 - -0.1000045984983444 - 0.3736175000667572 - -0.0558148212730885 - <_> - - <_> - - - - <_>4 7 6 21 -1. - <_>4 14 6 7 3. - 0 - -0.1497824043035507 - 0.3867760896682739 - -0.0556414015591145 - <_> - - <_> - - - - <_>3 0 8 18 -1. - <_>3 0 4 9 2. - <_>7 9 4 9 2. - 0 - 0.0335663482546806 - 0.0753119364380836 - -0.3200739026069641 - <_> - - <_> - - - - <_>3 6 9 10 -1. - <_>6 6 3 10 3. - 0 - -0.2121389061212540 - -0.5927072167396545 - 4.9450621008872986e-003 - <_> - - <_> - - - - <_>7 21 4 3 -1. - <_>6 22 4 1 3. - 1 - -0.0144028896465898 - 0.3247106969356537 - -0.0584921687841415 - <_> - - <_> - - - - <_>2 23 12 5 -1. - <_>6 23 4 5 3. - 0 - -0.0184131693094969 - -0.0968017503619194 - 0.1034365966916084 - <_> - - <_> - - - - <_>4 16 3 12 -1. - <_>5 16 1 12 3. - 0 - 0.0162283498793840 - -0.0605776682496071 - 0.3173801004886627 - <_> - - <_> - - - - <_>7 17 2 7 -1. - <_>7 17 1 7 2. - 1 - -6.7683439701795578e-003 - -0.1974215060472488 - 0.0279964208602905 - <_> - - <_> - - - - <_>0 5 14 10 -1. - <_>0 5 7 5 2. - <_>7 10 7 5 2. - 0 - -0.0191653091460466 - -0.2568407058715820 - 0.0834327489137650 - <_> - - <_> - - - - <_>3 10 8 4 -1. - <_>3 10 4 4 2. - 0 - 2.8667549486272037e-004 - -0.1524108052253723 - 0.1440477967262268 - <_> - - <_> - - - - <_>0 12 10 4 -1. - <_>5 12 5 4 2. - 0 - 9.4157401472330093e-003 - -0.0732076391577721 - 0.3365561068058014 - <_> - - <_> - - - - <_>7 0 6 6 -1. - <_>7 0 3 6 2. - 1 - 0.0233219005167484 - -0.0618982687592506 - 0.0834899097681046 - <_> - - <_> - - - - <_>2 3 10 7 -1. - <_>7 3 5 7 2. - 0 - -0.0119106704369187 - -0.1962853074073792 - 0.0968073308467865 - -0.8581581711769104 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>3 7 4 21 -1. - <_>5 7 2 21 2. - 0 - -0.0941913127899170 - 0.4702827930450440 - -0.1444950997829437 - <_> - - <_> - - - - <_>6 2 2 24 -1. - <_>7 2 1 12 2. - <_>6 14 1 12 2. - 0 - -6.9314462598413229e-004 - 0.1774948984384537 - -0.1812798976898193 - <_> - - <_> - - - - <_>3 4 8 16 -1. - <_>3 8 8 8 2. - 0 - -0.1278239041566849 - 0.2973394095897675 - -0.1009858027100563 - <_> - - <_> - - - - <_>9 16 2 12 -1. - <_>9 16 1 12 2. - 0 - -2.5297680404037237e-003 - 0.1085487976670265 - -0.1347146928310394 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -2.5406670756638050e-003 - -0.2702581882476807 - 0.1028902977705002 - <_> - - <_> - - - - <_>5 2 6 6 -1. - <_>5 4 6 2 3. - 0 - -1.5717690112069249e-003 - 0.1705846041440964 - -0.1092351973056793 - <_> - - <_> - - - - <_>1 19 4 9 -1. - <_>3 19 2 9 2. - 0 - 0.0147901903837919 - 0.0236906800419092 - -0.5141217708587647 - <_> - - <_> - - - - <_>9 10 4 16 -1. - <_>10 10 2 16 2. - 0 - -0.0118378400802612 - 0.1575475037097931 - -0.0272523108869791 - <_> - - <_> - - - - <_>5 18 5 2 -1. - <_>5 18 5 1 2. - 1 - -3.8180808769538999e-004 - 0.1027430966496468 - -0.2181538045406342 - <_> - - <_> - - - - <_>5 4 6 4 -1. - <_>5 4 3 4 2. - 0 - 0.0507688894867897 - 7.3335068300366402e-003 - -0.8505390286445618 - <_> - - <_> - - - - <_>3 4 6 4 -1. - <_>6 4 3 4 2. - 0 - 0.0227386299520731 - -0.0439746491611004 - 0.5016757249832153 - <_> - - <_> - - - - <_>5 5 6 8 -1. - <_>8 5 3 4 2. - <_>5 9 3 4 2. - 0 - 7.3323072865605354e-004 - -0.0984317213296890 - 0.1151536032557488 - <_> - - <_> - - - - <_>3 5 6 8 -1. - <_>3 5 3 4 2. - <_>6 9 3 4 2. - 0 - 1.1889509623870254e-003 - -0.2244317978620529 - 0.1081328988075256 - <_> - - <_> - - - - <_>6 3 8 12 -1. - <_>10 3 4 6 2. - <_>6 9 4 6 2. - 0 - -3.2934029586613178e-003 - 0.0718408674001694 - -0.0808680206537247 - <_> - - <_> - - - - <_>1 10 2 12 -1. - <_>2 10 1 12 2. - 0 - -3.0113169923424721e-003 - -0.2969867885112763 - 0.0797002688050270 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - -1.5521480236202478e-003 - 0.1869418025016785 - -0.1146747022867203 - <_> - - <_> - - - - <_>2 1 4 7 -1. - <_>4 1 2 7 2. - 0 - -0.0103006800636649 - -0.2910937070846558 - 0.0678363367915154 - <_> - - <_> - - - - <_>9 21 2 5 -1. - <_>9 21 1 5 2. - 1 - -2.6368349790573120e-003 - 0.1128410995006561 - -0.0734685286879539 - <_> - - <_> - - - - <_>2 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -3.2815459417179227e-004 - 0.0819218903779984 - -0.2489335983991623 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - -0.0345145687460899 - 0.4223099052906036 - -0.0346083901822567 - <_> - - <_> - - - - <_>0 15 8 6 -1. - <_>0 15 4 3 2. - <_>4 18 4 3 2. - 0 - 2.1102999744471163e-004 - -0.1947975009679794 - 0.1157203987240791 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - -4.4254157692193985e-003 - -0.1931612044572830 - 0.0581374317407608 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -1.7686230130493641e-003 - -0.1751880943775177 - 0.1451503932476044 - <_> - - <_> - - - - <_>1 1 13 3 -1. - <_>1 2 13 1 3. - 0 - -3.3355921041220427e-003 - 0.2262147068977356 - -0.1019549965858460 - <_> - - <_> - - - - <_>0 3 14 2 -1. - <_>7 3 7 2 2. - 0 - 0.0452411212027073 - 0.0335726402699947 - -0.6653599739074707 - <_> - - <_> - - - - <_>2 16 12 4 -1. - <_>8 16 6 2 2. - <_>2 18 6 2 2. - 0 - -0.0277080405503511 - -0.4751450121402741 - 0.0166056193411350 - <_> - - <_> - - - - <_>0 20 12 6 -1. - <_>3 20 6 6 2. - 0 - -0.0600426308810711 - 0.2700265944004059 - -0.0752836018800735 - <_> - - <_> - - - - <_>4 15 8 7 -1. - <_>6 15 4 7 2. - 0 - 9.3657420948147774e-003 - -0.0520907603204250 - 0.3435977101325989 - <_> - - <_> - - - - <_>4 10 6 12 -1. - <_>4 10 3 6 2. - <_>7 16 3 6 2. - 0 - 0.0225451197475195 - 0.0458237603306770 - -0.5311117768287659 - <_> - - <_> - - - - <_>7 0 4 6 -1. - <_>7 0 2 6 2. - 1 - -0.0667560994625092 - 0.5186759233474731 - -0.0107660898938775 - <_> - - <_> - - - - <_>7 0 6 4 -1. - <_>7 0 6 2 2. - 1 - 4.3578571639955044e-003 - -0.1668030023574829 - 0.1341059058904648 - <_> - - <_> - - - - <_>6 18 8 6 -1. - <_>10 18 4 3 2. - <_>6 21 4 3 2. - 0 - -0.0363381803035736 - -0.5482519268989563 - 0.0182916000485420 - <_> - - <_> - - - - <_>6 0 8 4 -1. - <_>6 0 8 2 2. - 1 - -0.0455095581710339 - 0.3911918103694916 - -0.0543382689356804 - <_> - - <_> - - - - <_>2 15 10 6 -1. - <_>7 15 5 3 2. - <_>2 18 5 3 2. - 0 - 6.2883161008358002e-003 - 0.0954951867461205 - -0.2489372044801712 - <_> - - <_> - - - - <_>0 13 4 8 -1. - <_>0 17 4 4 2. - 0 - 1.5809159958735108e-003 - -0.1679227054119110 - 0.1155375987291336 - <_> - - <_> - - - - <_>0 9 14 9 -1. - <_>0 12 14 3 3. - 0 - -0.1578021049499512 - -0.6959874033927918 - 0.0310152992606163 - <_> - - <_> - - - - <_>2 24 9 4 -1. - <_>5 24 3 4 3. - 0 - -0.0504007488489151 - -0.6101341843605042 - 0.0256001893430948 - <_> - - <_> - - - - <_>1 24 12 4 -1. - <_>4 24 6 4 2. - 0 - -8.3708087913691998e-004 - 0.0636897012591362 - -0.3257291018962860 - <_> - - <_> - - - - <_>0 11 10 8 -1. - <_>0 11 5 4 2. - <_>5 15 5 4 2. - 0 - 0.0522598400712013 - -0.0526395291090012 - 0.4301880002021790 - <_> - - <_> - - - - <_>5 9 6 4 -1. - <_>5 11 6 2 2. - 0 - 6.6796218743547797e-004 - 0.0807614400982857 - -0.2509211897850037 - <_> - - <_> - - - - <_>1 8 4 17 -1. - <_>2 8 2 17 2. - 0 - -0.0363063998520374 - 0.7283785939216614 - -0.0287035498768091 - <_> - - <_> - - - - <_>8 2 4 12 -1. - <_>10 2 2 6 2. - <_>8 8 2 6 2. - 0 - -0.0758234113454819 - -0.7604526281356812 - 0.0131663000211120 - <_> - - <_> - - - - <_>2 2 4 12 -1. - <_>2 2 2 6 2. - <_>4 8 2 6 2. - 0 - -5.5567082017660141e-003 - 0.1125840991735458 - -0.1985097974538803 - <_> - - <_> - - - - <_>10 7 4 14 -1. - <_>12 7 2 7 2. - <_>10 14 2 7 2. - 0 - 3.1275521032512188e-003 - -0.1043618991971016 - 0.1028300002217293 - <_> - - <_> - - - - <_>0 7 4 14 -1. - <_>0 7 2 7 2. - <_>2 14 2 7 2. - 0 - 0.0279313195496798 - 0.0470235608518124 - -0.4772753119468689 - <_> - - <_> - - - - <_>4 8 10 6 -1. - <_>4 8 5 6 2. - 0 - 0.0151569703593850 - -0.0499093793332577 - 0.2170501053333283 - <_> - - <_> - - - - <_>6 6 8 3 -1. - <_>6 6 4 3 2. - 1 - 6.8009081296622753e-003 - 0.1171329021453857 - -0.2208292037248612 - <_> - - <_> - - - - <_>2 5 12 3 -1. - <_>2 6 12 1 3. - 0 - -4.3796948157250881e-003 - 0.1719119995832443 - -0.0896688103675842 - <_> - - <_> - - - - <_>2 15 9 5 -1. - <_>5 15 3 5 3. - 0 - -6.9269728846848011e-003 - 0.0882584825158119 - -0.2645480930805206 - <_> - - <_> - - - - <_>0 1 14 15 -1. - <_>0 6 14 5 3. - 0 - -0.2058625072240830 - -0.5026299953460693 - 0.0408322513103485 - <_> - - <_> - - - - <_>1 1 6 18 -1. - <_>3 7 2 6 9. - 0 - -1.1398729839129373e-004 - 0.1053517013788223 - -0.1948872059583664 - <_> - - <_> - - - - <_>4 2 9 10 -1. - <_>4 7 9 5 2. - 0 - 0.0369937792420387 - -0.0547796301543713 - 0.2293298989534378 - <_> - - <_> - - - - <_>5 12 4 6 -1. - <_>7 12 2 6 2. - 0 - 4.7788480296730995e-003 - 0.0912943333387375 - -0.2496895045042038 - <_> - - <_> - - - - <_>6 4 3 21 -1. - <_>7 4 1 21 3. - 0 - 1.1999059934169054e-003 - -0.0926852896809578 - 0.1105071008205414 - <_> - - <_> - - - - <_>6 17 6 3 -1. - <_>5 18 6 1 3. - 1 - 2.0830740686506033e-003 - -0.1058308035135269 - 0.1740527004003525 - <_> - - <_> - - - - <_>7 16 2 4 -1. - <_>7 16 1 4 2. - 1 - 0.0271664895117283 - 0.0115387802943587 - -1.0000569820404053 - <_> - - <_> - - - - <_>7 16 4 2 -1. - <_>7 16 4 1 2. - 1 - -4.3531907722353935e-003 - -0.2610597908496857 - 0.0781094431877136 - <_> - - <_> - - - - <_>8 20 2 6 -1. - <_>8 20 1 6 2. - 1 - -0.0166761707514524 - -0.6376665830612183 - 0.0128073198720813 - <_> - - <_> - - - - <_>6 20 6 2 -1. - <_>6 20 6 1 2. - 1 - -1.7588710179552436e-003 - 0.1532872021198273 - -0.1483021974563599 - <_> - - <_> - - - - <_>6 4 6 6 -1. - <_>8 4 2 6 3. - 0 - -1.3470610138028860e-003 - 0.1102273017168045 - -0.1116658002138138 - <_> - - <_> - - - - <_>1 1 3 16 -1. - <_>2 1 1 16 3. - 0 - -7.7226730063557625e-003 - 0.2674975991249085 - -0.0843757018446922 - <_> - - <_> - - - - <_>12 14 2 10 -1. - <_>12 14 1 10 2. - 1 - 0.0245579890906811 - 0.0117052299901843 - -0.6993631124496460 - <_> - - <_> - - - - <_>2 14 10 2 -1. - <_>2 14 10 1 2. - 1 - -4.1882451623678207e-003 - -0.2084566056728363 - 0.1107387021183968 - -0.7278770804405212 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>3 1 6 27 -1. - <_>5 10 2 9 9. - 0 - -0.3092521131038666 - 0.3152084052562714 - -0.1662925034761429 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - 0.0386602506041527 - -0.0579346008598804 - 0.4527879059314728 - <_> - - <_> - - - - <_>2 6 8 22 -1. - <_>4 6 4 22 2. - 0 - -0.1885387003421783 - -0.8201392889022827 - 0.0309413596987724 - <_> - - <_> - - - - <_>4 6 6 13 -1. - <_>6 6 2 13 3. - 0 - 7.1423681220039725e-004 - 0.1028093025088310 - -0.2490286976099014 - <_> - - <_> - - - - <_>7 11 6 6 -1. - <_>5 13 6 2 3. - 1 - -0.0720744431018829 - 0.3317157924175263 - -0.0736855119466782 - <_> - - <_> - - - - <_>2 26 12 2 -1. - <_>2 26 6 2 2. - 0 - 9.4616664573550224e-003 - 0.0326477885246277 - -0.3611251115798950 - <_> - - <_> - - - - <_>4 8 6 9 -1. - <_>6 8 2 9 3. - 0 - -0.0465130805969238 - -0.4755085110664368 - 0.0568774007260799 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -0.0347774587571621 - -0.6351556777954102 - 0.0313141196966171 - <_> - - <_> - - - - <_>3 24 6 4 -1. - <_>6 24 3 4 2. - 0 - -1.4840300427749753e-003 - 0.0926282331347466 - -0.2528308033943176 - <_> - - <_> - - - - <_>4 16 8 9 -1. - <_>4 16 4 9 2. - 0 - 8.3039281889796257e-003 - 0.0339913889765739 - -0.1835747957229614 - <_> - - <_> - - - - <_>2 16 8 9 -1. - <_>6 16 4 9 2. - 0 - 0.0273422095924616 - -0.0513939410448074 - 0.5595899820327759 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>7 5 3 6 2. - 1 - 0.0586374215781689 - -0.0573506616055965 - 0.1484225988388062 - <_> - - <_> - - - - <_>7 15 6 6 -1. - <_>7 15 3 6 2. - 1 - -0.0370325110852718 - -0.4060286879539490 - 0.0667901337146759 - <_> - - <_> - - - - <_>3 13 10 12 -1. - <_>3 19 10 6 2. - 0 - 8.9913606643676758e-003 - -0.1909431964159012 - 0.0594380907714367 - <_> - - <_> - - - - <_>2 6 10 3 -1. - <_>7 6 5 3 2. - 0 - -0.0593511983752251 - -0.8709725737571716 - 0.0214834492653608 - <_> - - <_> - - - - <_>3 1 8 21 -1. - <_>3 8 8 7 3. - 0 - 0.3705554008483887 - -0.0403960905969143 - 0.6063132286071777 - <_> - - <_> - - - - <_>4 7 6 6 -1. - <_>4 9 6 2 3. - 0 - -8.4517069626599550e-004 - 0.1366071999073029 - -0.1554179042577744 - <_> - - <_> - - - - <_>4 10 8 4 -1. - <_>4 12 8 2 2. - 0 - 0.0106644798070192 - 0.0341297611594200 - -0.2350808978080750 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>7 5 6 3 2. - 1 - 3.7040449678897858e-003 - 0.1129392012953758 - -0.1559647023677826 - <_> - - <_> - - - - <_>2 8 12 10 -1. - <_>2 8 6 10 2. - 0 - 0.0233285501599312 - 0.0367709808051586 - -0.1663112938404083 - <_> - - <_> - - - - <_>1 4 8 10 -1. - <_>5 4 4 10 2. - 0 - 0.0209066402167082 - -0.0733919665217400 - 0.3270866870880127 - <_> - - <_> - - - - <_>3 16 8 6 -1. - <_>7 16 4 3 2. - <_>3 19 4 3 2. - 0 - 2.0865180995315313e-003 - 0.0963757634162903 - -0.2163884043693543 - <_> - - <_> - - - - <_>3 3 2 24 -1. - <_>3 3 1 12 2. - <_>4 15 1 12 2. - 0 - 1.2039430439472198e-003 - -0.1701869964599609 - 0.1081503033638001 - <_> - - <_> - - - - <_>9 16 4 12 -1. - <_>10 16 2 12 2. - 0 - 3.3848760649561882e-003 - -0.1082089021801949 - 0.0907519534230232 - <_> - - <_> - - - - <_>1 16 4 12 -1. - <_>2 16 2 12 2. - 0 - -0.0153092797845602 - -0.6207144260406494 - 0.0313537307083607 - <_> - - <_> - - - - <_>8 12 3 12 -1. - <_>9 12 1 12 3. - 0 - 0.0218207202851772 - -0.0572322495281696 - 0.2914176881313324 - <_> - - <_> - - - - <_>3 8 5 6 -1. - <_>3 11 5 3 2. - 0 - 5.8554150164127350e-003 - 0.0558107085525990 - -0.3455778956413269 - <_> - - <_> - - - - <_>2 7 10 8 -1. - <_>2 11 10 4 2. - 0 - -0.0883805900812149 - -0.5897160768508911 - 0.0322578698396683 - <_> - - <_> - - - - <_>3 12 3 12 -1. - <_>4 12 1 12 3. - 0 - -0.0363035984337330 - 0.6790629029273987 - -0.0312984399497509 - <_> - - <_> - - - - <_>5 16 4 12 -1. - <_>5 16 2 12 2. - 0 - 0.0677144229412079 - 0.0281518306583166 - -0.7596389055252075 - <_> - - <_> - - - - <_>7 22 4 2 -1. - <_>7 22 4 1 2. - 1 - -1.7487880541011691e-003 - 0.1352127045392990 - -0.1493988037109375 - <_> - - <_> - - - - <_>6 22 8 6 -1. - <_>10 22 4 3 2. - <_>6 25 4 3 2. - 0 - 0.0576274208724499 - 0.0147167900577188 - -0.6408889889717102 - <_> - - <_> - - - - <_>1 14 2 14 -1. - <_>2 14 1 14 2. - 0 - 4.8004398122429848e-003 - 0.0575108602643013 - -0.3072834014892578 - <_> - - <_> - - - - <_>9 20 3 5 -1. - <_>10 21 1 5 3. - 1 - 0.0155685897916555 - -0.0268608294427395 - 0.3939082920551300 - <_> - - <_> - - - - <_>5 20 5 3 -1. - <_>4 21 5 1 3. - 1 - -9.9650640040636063e-003 - 0.3209015130996704 - -0.0589744411408901 - <_> - - <_> - - - - <_>7 15 2 5 -1. - <_>7 15 1 5 2. - 1 - -9.1902203857898712e-003 - -0.3800691068172455 - 0.0358071699738503 - <_> - - <_> - - - - <_>1 17 10 6 -1. - <_>1 17 5 3 2. - <_>6 20 5 3 2. - 0 - 0.0308349393308163 - 0.0403541214764118 - -0.5078290104866028 - <_> - - <_> - - - - <_>1 3 12 3 -1. - <_>5 3 4 3 3. - 0 - -6.4900278812274337e-004 - 0.0955971330404282 - -0.1881285011768341 - <_> - - <_> - - - - <_>7 3 5 6 -1. - <_>7 3 5 3 2. - 1 - -3.9334357716143131e-003 - -0.2027994990348816 - 0.1051485016942024 - <_> - - <_> - - - - <_>7 7 3 12 -1. - <_>8 7 1 12 3. - 0 - -0.0214776806533337 - -0.3298557102680206 - 0.0352633781731129 - <_> - - <_> - - - - <_>4 7 3 12 -1. - <_>5 7 1 12 3. - 0 - -0.0275162495672703 - 0.3455865085124970 - -0.0725449100136757 - <_> - - <_> - - - - <_>5 11 9 13 -1. - <_>8 11 3 13 3. - 0 - -7.2914459742605686e-003 - 0.1005168035626411 - -0.1356077045202255 - <_> - - <_> - - - - <_>5 5 3 21 -1. - <_>6 5 1 21 3. - 0 - -0.0561357289552689 - 0.4007847011089325 - -0.0519918389618397 - <_> - - <_> - - - - <_>4 13 9 11 -1. - <_>7 13 3 11 3. - 0 - 0.1367962062358856 - -0.0164327807724476 - 0.5610008835792542 - <_> - - <_> - - - - <_>1 13 9 11 -1. - <_>4 13 3 11 3. - 0 - -0.0245499201118946 - -0.1818747967481613 - 0.1412536948919296 - <_> - - <_> - - - - <_>5 18 8 10 -1. - <_>9 18 4 5 2. - <_>5 23 4 5 2. - 0 - 4.6405121684074402e-003 - -0.1650065928697586 - 0.1491245031356812 - <_> - - <_> - - - - <_>0 5 14 14 -1. - <_>0 5 7 7 2. - <_>7 12 7 7 2. - 0 - -0.0210233591496944 - -0.1961192935705185 - 0.0992269366979599 - <_> - - <_> - - - - <_>9 0 3 15 -1. - <_>10 0 1 15 3. - 0 - -4.8856949433684349e-003 - 0.1133050993084908 - -0.0801724866032600 - <_> - - <_> - - - - <_>3 0 6 20 -1. - <_>5 0 2 20 3. - 0 - -0.1733780950307846 - -0.8345893025398254 - 0.0236916691064835 - <_> - - <_> - - - - <_>2 4 12 2 -1. - <_>2 5 12 1 2. - 0 - -9.2903972836211324e-004 - 0.0859042033553123 - -0.1058012023568153 - <_> - - <_> - - - - <_>0 3 12 3 -1. - <_>0 4 12 1 3. - 0 - -0.0105620902031660 - 0.2698987126350403 - -0.0675421431660652 - <_> - - <_> - - - - <_>0 18 14 6 -1. - <_>7 18 7 3 2. - <_>0 21 7 3 2. - 0 - 0.0150712598115206 - 0.0586574897170067 - -0.3243629038333893 - <_> - - <_> - - - - <_>2 0 3 15 -1. - <_>3 0 1 15 3. - 0 - -0.0186164304614067 - 0.3566071987152100 - -0.0530993789434433 - <_> - - <_> - - - - <_>8 1 6 4 -1. - <_>8 1 3 4 2. - 1 - 0.0844124630093575 - 0.0177159290760756 - -0.4580355882644653 - <_> - - <_> - - - - <_>2 7 6 6 -1. - <_>2 9 6 2 3. - 0 - 0.0511387698352337 - 0.0174076799303293 - -0.9411020278930664 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - -0.0106134600937366 - -0.6063237190246582 - 0.0307936705648899 - <_> - - <_> - - - - <_>2 7 3 12 -1. - <_>3 7 1 12 3. - 0 - 0.0183576196432114 - -0.0772681906819344 - 0.2978057861328125 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -8.4444461390376091e-004 - 0.0780230090022087 - -0.2501764893531799 - <_> - - <_> - - - - <_>0 22 4 6 -1. - <_>2 22 2 6 2. - 0 - -6.2388968653976917e-003 - -0.4801769852638245 - 0.0391856394708157 - <_> - - <_> - - - - <_>8 24 6 4 -1. - <_>8 24 3 4 2. - 0 - -0.0353631712496281 - -1. - 9.3268742784857750e-003 - <_> - - <_> - - - - <_>4 0 4 9 -1. - <_>4 3 4 3 3. - 0 - -0.0735581219196320 - -0.7789533734321594 - 0.0184415001422167 - <_> - - <_> - - - - <_>8 3 6 4 -1. - <_>8 3 6 2 2. - 1 - -0.0870342031121254 - 0.4362406134605408 - -0.0177165996283293 - <_> - - <_> - - - - <_>2 0 6 22 -1. - <_>2 0 3 11 2. - <_>5 11 3 11 2. - 0 - -0.0807216465473175 - 0.2729671895503998 - -0.0663469582796097 - <_> - - <_> - - - - <_>6 18 8 10 -1. - <_>10 18 4 5 2. - <_>6 23 4 5 2. - 0 - 0.1034459024667740 - 9.0693607926368713e-003 - -0.6643865108489990 - <_> - - <_> - - - - <_>0 22 6 6 -1. - <_>2 22 2 6 3. - 0 - 9.3807540833950043e-003 - 0.0712427720427513 - -0.2738165855407715 - <_> - - <_> - - - - <_>8 13 6 6 -1. - <_>8 15 6 2 3. - 0 - -0.0718061476945877 - -0.9122204184532166 - 8.0809993669390678e-003 - <_> - - <_> - - - - <_>0 13 6 6 -1. - <_>0 15 6 2 3. - 0 - -1.9418599549680948e-003 - 0.1847234070301056 - -0.1134454980492592 - -0.7794421911239624 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>1 16 6 6 -1. - <_>3 16 2 6 3. - 0 - 0.0303289592266083 - -0.1753951013088226 - 0.3694534003734589 - <_> - - <_> - - - - <_>7 2 3 21 -1. - <_>7 9 3 7 3. - 0 - -0.0826317816972733 - 0.2221647948026657 - -0.0875775516033173 - <_> - - <_> - - - - <_>4 14 6 3 -1. - <_>3 15 6 1 3. - 1 - 2.5548380799591541e-003 - -0.1509108990430832 - 0.1460877060890198 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -1.4431839808821678e-003 - 0.0624052509665489 - -0.1830209940671921 - <_> - - <_> - - - - <_>7 3 4 6 -1. - <_>7 3 4 3 2. - 1 - 0.0430062897503376 - 0.0857114866375923 - -0.4427877962589264 - <_> - - <_> - - - - <_>4 9 8 16 -1. - <_>4 9 4 16 2. - 0 - -0.1774813979864121 - -0.6730855107307434 - 0.0216223802417517 - <_> - - <_> - - - - <_>2 9 8 16 -1. - <_>6 9 4 16 2. - 0 - 0.0997236967086792 - -0.0427756607532501 - 0.6908894181251526 - <_> - - <_> - - - - <_>4 3 7 24 -1. - <_>4 9 7 12 2. - 0 - -0.0179571993649006 - 0.0887849330902100 - -0.2935299873352051 - <_> - - <_> - - - - <_>1 17 4 6 -1. - <_>3 17 2 6 2. - 0 - 5.8914110995829105e-003 - 0.0268841795623302 - -0.3925782144069672 - <_> - - <_> - - - - <_>5 2 6 4 -1. - <_>5 4 6 2 2. - 0 - -1.2439199490472674e-003 - 0.0836953297257423 - -0.1352465003728867 - <_> - - <_> - - - - <_>7 2 4 6 -1. - <_>7 2 2 6 2. - 1 - -0.0631099566817284 - 0.6836500167846680 - -0.0111745800822973 - <_> - - <_> - - - - <_>4 9 6 4 -1. - <_>4 9 3 4 2. - 0 - 5.3107268176972866e-003 - 0.0730957910418510 - -0.3322851955890656 - <_> - - <_> - - - - <_>1 24 6 4 -1. - <_>4 24 3 4 2. - 0 - -9.6346868667751551e-004 - 0.0939234569668770 - -0.2601422071456909 - <_> - - <_> - - - - <_>5 0 6 8 -1. - <_>8 0 3 4 2. - <_>5 4 3 4 2. - 0 - -0.0203776806592941 - 0.2368240952491760 - -0.0518113411962986 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -0.0156107498332858 - -0.4846526980400085 - 0.0421287305653095 - <_> - - <_> - - - - <_>5 0 6 8 -1. - <_>8 0 3 4 2. - <_>5 4 3 4 2. - 0 - 0.0454972907900810 - 5.7874252088367939e-003 - -0.5263736844062805 - <_> - - <_> - - - - <_>5 4 4 6 -1. - <_>7 4 2 6 2. - 0 - -0.0122448699548841 - 0.3052304089069367 - -0.0793112665414810 - <_> - - <_> - - - - <_>8 0 6 8 -1. - <_>6 2 6 4 2. - 1 - -5.5875871330499649e-003 - 0.0725049003958702 - -0.1030094027519226 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>8 2 4 6 2. - 1 - -0.0132377101108432 - -0.2125997990369797 - 0.1411207020282745 - <_> - - <_> - - - - <_>7 17 3 4 -1. - <_>8 18 1 4 3. - 1 - -0.0162360705435276 - -0.3682213127613068 - 0.0169044993817806 - <_> - - <_> - - - - <_>1 20 6 8 -1. - <_>1 20 3 4 2. - <_>4 24 3 4 2. - 0 - 8.7341741891577840e-004 - -0.1751320958137512 - 0.1171779036521912 - <_> - - <_> - - - - <_>9 15 2 12 -1. - <_>9 15 1 12 2. - 0 - 7.8164516016840935e-003 - -0.0409356690943241 - 0.3813630938529968 - <_> - - <_> - - - - <_>3 15 2 12 -1. - <_>4 15 1 12 2. - 0 - 1.4803799786022864e-005 - -0.1158130019903183 - 0.1805412024259567 - <_> - - <_> - - - - <_>5 2 6 4 -1. - <_>5 2 3 4 2. - 0 - 0.0362725406885147 - 0.0151967499405146 - -0.4603796005249023 - <_> - - <_> - - - - <_>3 3 6 4 -1. - <_>6 3 3 4 2. - 0 - -3.8026720285415649e-003 - 0.1344036012887955 - -0.1612498015165329 - <_> - - <_> - - - - <_>4 4 6 24 -1. - <_>7 4 3 12 2. - <_>4 16 3 12 2. - 0 - -0.0145857501775026 - -0.2833149135112763 - 0.0746821165084839 - <_> - - <_> - - - - <_>6 13 2 12 -1. - <_>7 13 1 12 2. - 0 - 1.4677370199933648e-003 - -0.1349322050809860 - 0.1424490958452225 - <_> - - <_> - - - - <_>6 16 3 12 -1. - <_>7 16 1 12 3. - 0 - -0.0139815695583820 - 0.2173554003238678 - -0.0528866797685623 - <_> - - <_> - - - - <_>6 4 2 14 -1. - <_>7 4 1 14 2. - 0 - -6.3076039077714086e-004 - 0.1490194946527481 - -0.1362009942531586 - <_> - - <_> - - - - <_>5 3 4 25 -1. - <_>6 3 2 25 2. - 0 - -0.0144755402579904 - -0.1918009966611862 - 0.1060713008046150 - <_> - - <_> - - - - <_>5 4 3 21 -1. - <_>6 4 1 21 3. - 0 - -0.0322175808250904 - 0.2809166908264160 - -0.0850462913513184 - <_> - - <_> - - - - <_>7 6 2 12 -1. - <_>7 6 1 12 2. - 0 - 3.4460560418665409e-003 - 0.0745718702673912 - -0.2710860967636108 - <_> - - <_> - - - - <_>5 4 4 20 -1. - <_>5 4 2 10 2. - <_>7 14 2 10 2. - 0 - -0.0439498908817768 - 0.4400210082530975 - -0.0455091297626495 - <_> - - <_> - - - - <_>6 4 6 24 -1. - <_>8 12 2 8 9. - 0 - -0.0119662703946233 - 0.0632868707180023 - -0.1980538070201874 - <_> - - <_> - - - - <_>0 1 12 24 -1. - <_>6 1 6 24 2. - 0 - -0.4348602890968323 - -0.7620549798011780 - 0.0215081293135881 - <_> - - <_> - - - - <_>7 6 7 22 -1. - <_>7 17 7 11 2. - 0 - 0.3988755047321320 - 8.0703729763627052e-003 - -0.8428487777709961 - <_> - - <_> - - - - <_>4 3 4 9 -1. - <_>4 6 4 3 3. - 0 - -0.0448023788630962 - -0.6841738224029541 - 0.0224749799817801 - <_> - - <_> - - - - <_>8 4 6 8 -1. - <_>6 6 6 4 2. - 1 - -0.1093515008687973 - 0.2111950963735580 - -0.0397316403687000 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>7 5 6 2 2. - 1 - 0.0309234093874693 - 0.0447794012725353 - -0.3587503135204315 - <_> - - <_> - - - - <_>5 1 4 6 -1. - <_>5 4 4 3 2. - 0 - 0.0132859796285629 - -0.0481516607105732 - 0.3711921870708466 - <_> - - <_> - - - - <_>0 0 7 10 -1. - <_>0 5 7 5 2. - 0 - -3.9830091409385204e-003 - 0.1278153061866760 - -0.1995912045240402 - <_> - - <_> - - - - <_>7 2 3 24 -1. - <_>7 8 3 12 2. - 0 - 0.0141846202313900 - -0.0398960486054420 - 0.2408592998981476 - <_> - - <_> - - - - <_>1 8 4 15 -1. - <_>2 8 2 15 2. - 0 - 1.6680279513821006e-003 - -0.1810705959796906 - 0.0939819067716599 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -0.0220558904111385 - -0.2879816889762878 - 0.0300383698195219 - <_> - - <_> - - - - <_>1 23 12 3 -1. - <_>5 23 4 3 3. - 0 - -0.0603718012571335 - 0.2952964007854462 - -0.0647140964865685 - <_> - - <_> - - - - <_>6 22 8 6 -1. - <_>10 22 4 3 2. - <_>6 25 4 3 2. - 0 - 0.0592914484441280 - 8.4209917113184929e-003 - -0.5883092284202576 - <_> - - <_> - - - - <_>0 22 14 6 -1. - <_>0 22 7 3 2. - <_>7 25 7 3 2. - 0 - 0.0326371490955353 - 0.0321183390915394 - -0.5119292140007019 - <_> - - <_> - - - - <_>2 3 12 3 -1. - <_>2 4 12 1 3. - 0 - -9.8897633142769337e-004 - 0.1338261961936951 - -0.1154571026563644 - <_> - - <_> - - - - <_>0 2 12 9 -1. - <_>4 5 4 3 9. - 0 - -0.0355604402720928 - -0.1515962928533554 - 0.1051914021372795 - <_> - - <_> - - - - <_>1 0 12 12 -1. - <_>5 4 4 4 9. - 0 - 9.8722549155354500e-003 - 0.0934620425105095 - -0.2598895132541657 - <_> - - <_> - - - - <_>1 3 12 3 -1. - <_>1 4 12 1 3. - 0 - 7.1953269653022289e-003 - -0.0869378298521042 - 0.2837277054786682 - <_> - - <_> - - - - <_>1 4 12 3 -1. - <_>5 4 4 3 3. - 0 - 0.0244370996952057 - -0.0399301089346409 - 0.3924323916435242 - <_> - - <_> - - - - <_>1 15 2 12 -1. - <_>2 15 1 12 2. - 0 - 5.2195340394973755e-003 - 0.0498041100800037 - -0.3184682130813599 - <_> - - <_> - - - - <_>1 20 12 5 -1. - <_>5 20 4 5 3. - 0 - 2.3442960809916258e-003 - -0.0544699504971504 - 0.3371812105178833 - <_> - - <_> - - - - <_>7 15 5 4 -1. - <_>6 16 5 2 2. - 1 - 4.7694300301373005e-003 - 0.0714767873287201 - -0.3101828098297119 - <_> - - <_> - - - - <_>7 2 3 21 -1. - <_>7 9 3 7 3. - 0 - -0.0145174702629447 - 0.0786424800753593 - -0.1453883945941925 - <_> - - <_> - - - - <_>2 2 4 12 -1. - <_>2 2 2 6 2. - <_>4 8 2 6 2. - 0 - 0.0447107292711735 - -0.0250517800450325 - 0.6473051905632019 - <_> - - <_> - - - - <_>5 22 8 6 -1. - <_>7 22 4 6 2. - 0 - 0.0168673992156982 - 0.0290889590978622 - -0.3903023898601532 - <_> - - <_> - - - - <_>0 1 10 6 -1. - <_>0 1 5 3 2. - <_>5 4 5 3 2. - 0 - -9.0343318879604340e-004 - 0.0877225771546364 - -0.1658854931592941 - <_> - - <_> - - - - <_>3 11 9 6 -1. - <_>3 13 9 2 3. - 0 - -0.0821873396635056 - -0.8423885703086853 - 9.8376423120498657e-003 - <_> - - <_> - - - - <_>6 7 2 19 -1. - <_>7 7 1 19 2. - 0 - 1.8525390187278390e-003 - -0.1225149035453796 - 0.1200018972158432 - <_> - - <_> - - - - <_>5 10 8 16 -1. - <_>7 10 4 16 2. - 0 - -9.3228723853826523e-003 - 0.0784228518605232 - -0.1323194950819016 - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - 0.0227306894958019 - -0.0336967892944813 - 0.4438394010066986 - <_> - - <_> - - - - <_>10 13 4 15 -1. - <_>10 18 4 5 3. - 0 - 0.1028665974736214 - 0.0179174300283194 - -0.5834161043167114 - <_> - - <_> - - - - <_>2 1 10 10 -1. - <_>2 1 5 5 2. - <_>7 6 5 5 2. - 0 - -0.0995473712682724 - -0.9536556005477905 - 0.0125820403918624 - <_> - - <_> - - - - <_>7 19 2 7 -1. - <_>7 19 1 7 2. - 1 - 0.0164127591997385 - 0.0160671193152666 - -0.4140237867832184 - <_> - - <_> - - - - <_>2 14 9 6 -1. - <_>5 14 3 6 3. - 0 - -2.5932409334927797e-003 - 0.0527634993195534 - -0.3040460050106049 - <_> - - <_> - - - - <_>4 13 10 14 -1. - <_>9 13 5 7 2. - <_>4 20 5 7 2. - 0 - 9.5953093841671944e-003 - 0.0835280865430832 - -0.1178006976842880 - -0.7301942706108093 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>1 7 12 15 -1. - <_>5 12 4 5 9. - 0 - -0.3543010950088501 - 0.3179292082786560 - -0.1851280033588409 - <_> - - <_> - - - - <_>6 2 2 24 -1. - <_>7 2 1 12 2. - <_>6 14 1 12 2. - 0 - -0.0147613296285272 - 0.3406507968902588 - -0.0866217389702797 - <_> - - <_> - - - - <_>5 3 4 12 -1. - <_>5 9 4 6 2. - 0 - -0.1158045008778572 - -0.7235320210456848 - 0.0344048403203487 - <_> - - <_> - - - - <_>8 24 6 4 -1. - <_>8 24 3 4 2. - 0 - -4.4705160689773038e-005 - 0.0824970826506615 - -0.2131111025810242 - <_> - - <_> - - - - <_>0 24 6 4 -1. - <_>3 24 3 4 2. - 0 - -5.8883379097096622e-005 - 0.1080930009484291 - -0.1826986074447632 - <_> - - <_> - - - - <_>1 8 12 4 -1. - <_>4 8 6 4 2. - 0 - 0.0379448495805264 - -0.0247565507888794 - 0.4586691856384277 - <_> - - <_> - - - - <_>5 5 4 9 -1. - <_>5 8 4 3 3. - 0 - -2.1807940211147070e-003 - 0.1578385978937149 - -0.1775245964527130 - <_> - - <_> - - - - <_>9 18 4 6 -1. - <_>9 18 2 6 2. - 0 - -0.0454301014542580 - -0.3724954128265381 - 5.7393261231482029e-003 - <_> - - <_> - - - - <_>2 20 8 8 -1. - <_>2 20 4 4 2. - <_>6 24 4 4 2. - 0 - 1.9972559530287981e-003 - -0.1917531043291092 - 0.1199517026543617 - <_> - - <_> - - - - <_>11 15 2 8 -1. - <_>11 15 1 8 2. - 1 - -2.2458820239990018e-005 - 0.0915291681885719 - -0.1308099031448364 - <_> - - <_> - - - - <_>3 15 8 2 -1. - <_>3 15 8 1 2. - 1 - -3.7994279991835356e-003 - -0.2045497000217438 - 0.1414657980203629 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>5 9 2 6 2. - 0 - -2.7970419614575803e-004 - 0.1107816025614739 - -0.1871396005153656 - <_> - - <_> - - - - <_>0 22 4 6 -1. - <_>2 22 2 6 2. - 0 - -3.9631421677768230e-003 - -0.3774999082088471 - 0.0569357909262180 - <_> - - <_> - - - - <_>0 26 14 2 -1. - <_>0 26 7 2 2. - 0 - -1.4290240360423923e-003 - -0.1944985985755920 - 0.0988349169492722 - <_> - - <_> - - - - <_>3 20 6 8 -1. - <_>3 20 3 4 2. - <_>6 24 3 4 2. - 0 - 0.0211821794509888 - -0.0870304107666016 - 0.2888861000537872 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - 8.7332521798089147e-004 - -0.1172915995121002 - 0.1250654011964798 - <_> - - <_> - - - - <_>4 13 4 12 -1. - <_>5 13 2 12 2. - 0 - 0.0261357594281435 - -0.0395724289119244 - 0.6225264072418213 - <_> - - <_> - - - - <_>1 22 12 2 -1. - <_>1 22 6 2 2. - 0 - 4.3046330101788044e-003 - 0.1158230975270271 - -0.1961823999881744 - <_> - - <_> - - - - <_>0 24 12 4 -1. - <_>0 24 6 2 2. - <_>6 26 6 2 2. - 0 - 1.5224959934130311e-003 - -0.1858606040477753 - 0.1168838962912560 - <_> - - <_> - - - - <_>5 8 6 4 -1. - <_>5 10 6 2 2. - 0 - -7.4201932875439525e-004 - 0.0987247377634048 - -0.2579134106636047 - <_> - - <_> - - - - <_>0 3 12 3 -1. - <_>0 4 12 1 3. - 0 - -2.5593061000108719e-003 - 0.1730794012546539 - -0.1206706985831261 - <_> - - <_> - - - - <_>7 4 6 6 -1. - <_>7 4 3 6 2. - 1 - -0.0955632179975510 - 0.3464641869068146 - -0.0131421396508813 - <_> - - <_> - - - - <_>7 4 6 6 -1. - <_>7 4 6 3 2. - 1 - 0.0132807902991772 - 0.1205687969923019 - -0.2062774002552033 - <_> - - <_> - - - - <_>8 3 6 8 -1. - <_>8 3 3 8 2. - 1 - 0.0182455293834209 - -0.0672429502010345 - 0.0468581281602383 - <_> - - <_> - - - - <_>0 6 6 5 -1. - <_>3 6 3 5 2. - 0 - -0.0612889714539051 - -0.6636496782302856 - 0.0293191503733397 - <_> - - <_> - - - - <_>8 3 3 12 -1. - <_>9 3 1 12 3. - 0 - -0.0261334199458361 - 0.2084838002920151 - -0.0272029303014278 - <_> - - <_> - - - - <_>6 0 2 22 -1. - <_>7 0 1 22 2. - 0 - -0.0323008187115192 - -0.6272640824317932 - 0.0300918798893690 - <_> - - <_> - - - - <_>8 3 3 12 -1. - <_>9 3 1 12 3. - 0 - 0.0502844899892807 - 1.5047290362417698e-003 - -0.5963041186332703 - <_> - - <_> - - - - <_>3 3 3 12 -1. - <_>4 3 1 12 3. - 0 - -0.0181371197104454 - 0.2926290929317474 - -0.0692134499549866 - <_> - - <_> - - - - <_>6 6 3 12 -1. - <_>7 6 1 12 3. - 0 - 1.0980300139635801e-003 - 0.1031685993075371 - -0.1655807048082352 - <_> - - <_> - - - - <_>5 15 2 12 -1. - <_>6 15 1 12 2. - 0 - 3.9596110582351685e-003 - -0.0570635795593262 - 0.3374491035938263 - <_> - - <_> - - - - <_>5 8 6 10 -1. - <_>8 8 3 5 2. - <_>5 13 3 5 2. - 0 - 3.1622028909623623e-003 - 0.0883023589849472 - -0.2791759073734283 - <_> - - <_> - - - - <_>2 8 10 10 -1. - <_>2 8 5 5 2. - <_>7 13 5 5 2. - 0 - 8.4337368607521057e-003 - 0.0863110572099686 - -0.2515366077423096 - <_> - - <_> - - - - <_>7 9 6 10 -1. - <_>10 9 3 5 2. - <_>7 14 3 5 2. - 0 - 0.0234084799885750 - -0.0370115190744400 - 0.2557156085968018 - <_> - - <_> - - - - <_>0 4 12 3 -1. - <_>0 5 12 1 3. - 0 - -1.9710899796336889e-003 - 0.1496087014675140 - -0.1321375966072083 - <_> - - <_> - - - - <_>9 16 2 12 -1. - <_>9 16 1 12 2. - 0 - -0.0314347818493843 - 0.2707290947437286 - -0.0247841402888298 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - -2.0984669681638479e-003 - -0.2284294068813324 - 0.0923924893140793 - <_> - - <_> - - - - <_>2 20 12 6 -1. - <_>6 20 4 6 3. - 0 - -0.1047758013010025 - 0.1374094933271408 - -0.0586049407720566 - <_> - - <_> - - - - <_>0 10 8 8 -1. - <_>2 10 4 8 2. - 0 - 0.0125585002824664 - 0.0944282636046410 - -0.2318764030933380 - <_> - - <_> - - - - <_>0 12 14 6 -1. - <_>0 15 14 3 2. - 0 - 2.6465631090104580e-003 - -0.2049358934164047 - 0.0928895771503448 - <_> - - <_> - - - - <_>1 6 12 16 -1. - <_>1 14 12 8 2. - 0 - 0.2806937992572784 - 0.0408484004437923 - -0.4617752134799957 - <_> - - <_> - - - - <_>7 7 3 12 -1. - <_>8 7 1 12 3. - 0 - -0.0458823181688786 - -0.7171555161476135 - 9.1696027666330338e-003 - <_> - - <_> - - - - <_>0 0 14 3 -1. - <_>0 1 14 1 3. - 0 - -1.3070689747110009e-003 - 0.1625052988529205 - -0.1143703013658524 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - 6.8374760448932648e-003 - -0.0675647929310799 - 0.2192721962928772 - <_> - - <_> - - - - <_>0 17 6 7 -1. - <_>2 17 2 7 3. - 0 - -5.8329561725258827e-003 - -0.3584390878677368 - 0.0574676282703877 - <_> - - <_> - - - - <_>6 24 6 4 -1. - <_>6 24 3 4 2. - 0 - -0.0409369990229607 - -0.5512949824333191 - 0.0138196200132370 - <_> - - <_> - - - - <_>0 9 6 7 -1. - <_>3 9 3 7 2. - 0 - 0.0187274403870106 - -0.0528446398675442 - 0.3442713022232056 - <_> - - <_> - - - - <_>7 9 6 18 -1. - <_>10 9 3 9 2. - <_>7 18 3 9 2. - 0 - 1.0303989984095097e-003 - -0.0948721468448639 - 0.1123586967587471 - <_> - - <_> - - - - <_>0 22 12 5 -1. - <_>4 22 4 5 3. - 0 - -2.6228028582409024e-004 - 0.0638755112886429 - -0.3039735853672028 - <_> - - <_> - - - - <_>7 9 6 10 -1. - <_>10 9 3 5 2. - <_>7 14 3 5 2. - 0 - -0.0268611107021570 - 0.1759292036294937 - -0.0625069886445999 - <_> - - <_> - - - - <_>1 9 6 10 -1. - <_>1 9 3 5 2. - <_>4 14 3 5 2. - 0 - 0.0310612805187702 - -0.0721711292862892 - 0.3153252005577087 - <_> - - <_> - - - - <_>8 22 4 6 -1. - <_>8 22 2 6 2. - 0 - -7.1269841864705086e-003 - -0.1254031062126160 - 0.1006817966699600 - <_> - - <_> - - - - <_>0 16 6 8 -1. - <_>0 16 3 4 2. - <_>3 20 3 4 2. - 0 - -0.0277093406766653 - -0.8008555173873901 - 0.0257421806454659 - <_> - - <_> - - - - <_>4 0 6 8 -1. - <_>4 2 6 4 2. - 0 - 0.0422094501554966 - 0.0278460700064898 - -0.5614020228385925 - <_> - - <_> - - - - <_>5 3 4 9 -1. - <_>5 6 4 3 3. - 0 - 6.2995860353112221e-003 - 0.1080691963434219 - -0.2011452019214630 - <_> - - <_> - - - - <_>9 8 4 19 -1. - <_>10 8 2 19 2. - 0 - 0.0200487896800041 - -0.0581646189093590 - 0.1888546943664551 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>5 11 4 3 2. - 0 - -7.8481709351763129e-005 - 0.0829957127571106 - -0.2133198976516724 - <_> - - <_> - - - - <_>7 2 7 6 -1. - <_>7 4 7 2 3. - 0 - -0.0899455472826958 - -0.7930771708488464 - 7.8350491821765900e-003 - <_> - - <_> - - - - <_>0 16 2 12 -1. - <_>1 16 1 12 2. - 0 - 7.7181761153042316e-003 - 0.0414350405335426 - -0.3772186040878296 - <_> - - <_> - - - - <_>11 0 3 17 -1. - <_>12 0 1 17 3. - 0 - 5.3638177923858166e-003 - -0.0935679376125336 - 0.1466635018587112 - <_> - - <_> - - - - <_>0 0 3 17 -1. - <_>1 0 1 17 3. - 0 - 0.0145553303882480 - -0.0569892115890980 - 0.3436796963214874 - <_> - - <_> - - - - <_>5 13 4 14 -1. - <_>5 20 4 7 2. - 0 - 0.1058373004198074 - 0.0305793005973101 - -0.5868499875068665 - <_> - - <_> - - - - <_>6 15 8 4 -1. - <_>6 15 4 4 2. - 1 - 2.7123570907860994e-004 - 0.0854805186390877 - -0.2280874997377396 - <_> - - <_> - - - - <_>5 17 8 6 -1. - <_>7 17 4 6 2. - 0 - -0.0731964334845543 - -0.5121256113052368 - 9.6583841368556023e-003 - <_> - - <_> - - - - <_>1 17 8 6 -1. - <_>3 17 4 6 2. - 0 - 8.3729642210528255e-004 - -0.1797831952571869 - 0.1411747038364410 - <_> - - <_> - - - - <_>5 11 4 6 -1. - <_>5 11 2 6 2. - 0 - 1.9459549803286791e-003 - 0.0876059383153915 - -0.2044205069541931 - -0.6855844259262085 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>3 13 8 13 -1. - <_>5 13 4 13 2. - 0 - -0.0855053663253784 - 0.2671464979648590 - -0.1815284937620163 - <_> - - <_> - - - - <_>3 6 8 4 -1. - <_>3 8 8 2 2. - 0 - -0.0370142795145512 - 0.3740546107292175 - -0.0703127011656761 - <_> - - <_> - - - - <_>7 5 6 4 -1. - <_>7 5 6 2 2. - 1 - 0.0168347805738449 - 0.0891601070761681 - -0.2456610053777695 - <_> - - <_> - - - - <_>4 9 6 8 -1. - <_>7 9 3 4 2. - <_>4 13 3 4 2. - 0 - 9.7268886747770011e-005 - -0.1983094066381455 - 0.1498146951198578 - <_> - - <_> - - - - <_>6 4 2 24 -1. - <_>6 4 1 12 2. - <_>7 16 1 12 2. - 0 - 5.2984068170189857e-003 - -0.1577990949153900 - 0.1709541976451874 - <_> - - <_> - - - - <_>7 24 6 4 -1. - <_>7 24 3 4 2. - 0 - -0.0237708594650030 - -0.2509627938270569 - 0.0327907316386700 - <_> - - <_> - - - - <_>7 20 5 3 -1. - <_>6 21 5 1 3. - 1 - -0.0148529596626759 - 0.2726315855979919 - -0.0721883028745651 - <_> - - <_> - - - - <_>3 15 9 12 -1. - <_>6 19 3 4 9. - 0 - -0.0827229693531990 - -0.0668017715215683 - 0.1338412016630173 - <_> - - <_> - - - - <_>1 20 8 7 -1. - <_>3 20 4 7 2. - 0 - 6.4472708618268371e-004 - -0.1930968016386032 - 0.1362846940755844 - <_> - - <_> - - - - <_>10 12 2 14 -1. - <_>10 12 1 14 2. - 0 - -4.3215509504079819e-004 - 0.0574269108474255 - -0.0729834362864494 - <_> - - <_> - - - - <_>2 12 2 14 -1. - <_>3 12 1 14 2. - 0 - -7.5133621066925116e-006 - 0.1217446997761726 - -0.1816664040088654 - <_> - - <_> - - - - <_>3 6 8 4 -1. - <_>3 8 8 2 2. - 0 - 0.0204936098307371 - -0.0616576001048088 - 0.3857055008411408 - <_> - - <_> - - - - <_>3 9 8 8 -1. - <_>3 9 4 4 2. - <_>7 13 4 4 2. - 0 - -5.9959441423416138e-003 - -0.1809124946594238 - 0.1179118007421494 - <_> - - <_> - - - - <_>1 2 12 24 -1. - <_>5 10 4 8 9. - 0 - -0.9391052126884460 - 0.3137440979480743 - -0.0592162981629372 - <_> - - <_> - - - - <_>2 8 10 3 -1. - <_>7 8 5 3 2. - 0 - -0.0243414901196957 - -0.3705335855484009 - 0.0552511103451252 - <_> - - <_> - - - - <_>4 15 8 8 -1. - <_>6 15 4 8 2. - 0 - -0.0767967775464058 - 0.1375488936901093 - -0.0582019388675690 - <_> - - <_> - - - - <_>7 15 4 4 -1. - <_>6 16 4 2 2. - 1 - -8.2179326564073563e-003 - -0.2567924857139587 - 0.0991956964135170 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - -0.0517026185989380 - -0.5293763875961304 - 0.0272751804441214 - <_> - - <_> - - - - <_>4 16 3 12 -1. - <_>5 16 1 12 3. - 0 - 6.3065597787499428e-003 - -0.1040067970752716 - 0.2038889974355698 - <_> - - <_> - - - - <_>7 8 3 12 -1. - <_>8 8 1 12 3. - 0 - 0.0363370403647423 - 0.0131788402795792 - -0.3871706128120422 - <_> - - <_> - - - - <_>4 8 3 12 -1. - <_>5 8 1 12 3. - 0 - -2.7929339557886124e-003 - 0.1235100030899048 - -0.2046077996492386 - <_> - - <_> - - - - <_>10 17 4 6 -1. - <_>10 17 2 6 2. - 0 - -0.0144353797659278 - -0.5011137723922730 - 0.0372625403106213 - <_> - - <_> - - - - <_>5 4 2 24 -1. - <_>5 4 1 12 2. - <_>6 16 1 12 2. - 0 - 6.4411992207169533e-003 - -0.0605571903288364 - 0.3057847023010254 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -1.2598140165209770e-003 - 0.0532007515430450 - -0.1691620051860809 - <_> - - <_> - - - - <_>0 17 4 6 -1. - <_>2 17 2 6 2. - 0 - -6.9105648435652256e-003 - -0.3639864921569824 - 0.0428431518375874 - <_> - - <_> - - - - <_>8 11 6 12 -1. - <_>11 11 3 6 2. - <_>8 17 3 6 2. - 0 - -0.0526631101965904 - 0.4416917860507965 - -0.0320968292653561 - <_> - - <_> - - - - <_>3 7 3 10 -1. - <_>3 12 3 5 2. - 0 - -0.0409250594675541 - -0.5567336082458496 - 0.0291916895657778 - <_> - - <_> - - - - <_>7 6 4 6 -1. - <_>7 6 4 3 2. - 1 - -2.1683140657842159e-003 - 0.0665858536958694 - -0.1171517968177795 - <_> - - <_> - - - - <_>1 7 10 3 -1. - <_>6 7 5 3 2. - 0 - 0.0174809191375971 - -0.0677478536963463 - 0.3422436118125916 - <_> - - <_> - - - - <_>7 6 4 6 -1. - <_>7 6 4 3 2. - 1 - 0.1303298026323319 - 0.0108534395694733 - -0.5989474058151245 - <_> - - <_> - - - - <_>7 6 6 4 -1. - <_>7 6 3 4 2. - 1 - 5.1362451631575823e-004 - -0.1881096959114075 - 0.1093890964984894 - <_> - - <_> - - - - <_>7 0 4 6 -1. - <_>7 3 4 3 2. - 0 - -0.0387644208967686 - -0.2692834138870239 - 0.0201565697789192 - <_> - - <_> - - - - <_>4 6 6 8 -1. - <_>4 6 3 4 2. - <_>7 10 3 4 2. - 0 - -4.8952922224998474e-003 - -0.2367085069417954 - 0.0706935375928879 - <_> - - <_> - - - - <_>8 12 6 16 -1. - <_>8 20 6 8 2. - 0 - 0.0843806117773056 - -0.0617771111428738 - 0.1513081938028336 - <_> - - <_> - - - - <_>0 4 10 3 -1. - <_>5 4 5 3 2. - 0 - -0.0548328608274460 - -0.4994516074657440 - 0.0359158106148243 - <_> - - <_> - - - - <_>8 2 4 13 -1. - <_>8 2 2 13 2. - 0 - -5.4148300550878048e-003 - 0.0821169093251228 - -0.1367274969816208 - <_> - - <_> - - - - <_>1 1 10 14 -1. - <_>1 1 5 7 2. - <_>6 8 5 7 2. - 0 - 0.1281372010707855 - -0.0397552810609341 - 0.6034091114997864 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -4.4217561371624470e-003 - -0.0746426135301590 - 0.1023570001125336 - <_> - - <_> - - - - <_>0 25 8 3 -1. - <_>4 25 4 3 2. - 0 - -7.1978997766564135e-006 - 0.0745955929160118 - -0.2904655933380127 - <_> - - <_> - - - - <_>6 13 3 13 -1. - <_>7 13 1 13 3. - 0 - 0.0733218863606453 - -0.0213644690811634 - 0.6980969905853272 - <_> - - <_> - - - - <_>1 24 6 4 -1. - <_>4 24 3 4 2. - 0 - -0.0225664693862200 - -0.5371477007865906 - 0.0365099683403969 - <_> - - <_> - - - - <_>8 8 4 7 -1. - <_>8 8 2 7 2. - 0 - -0.0293380804359913 - 0.1062619984149933 - -0.0316522903740406 - <_> - - <_> - - - - <_>0 7 12 3 -1. - <_>0 8 12 1 3. - 0 - 0.0136840902268887 - -0.0577095411717892 - 0.3035565018653870 - <_> - - <_> - - - - <_>4 6 6 6 -1. - <_>4 8 6 2 3. - 0 - -8.2646618830040097e-004 - 0.1295858025550842 - -0.1360308974981308 - <_> - - <_> - - - - <_>3 9 7 4 -1. - <_>3 11 7 2 2. - 0 - 3.9828647859394550e-003 - 0.0507346689701080 - -0.3389672935009003 - <_> - - <_> - - - - <_>5 7 4 18 -1. - <_>5 16 4 9 2. - 0 - -0.0205359794199467 - 0.2602849006652832 - -0.0722593963146210 - <_> - - <_> - - - - <_>4 1 5 26 -1. - <_>4 14 5 13 2. - 0 - -0.1493218988180161 - -0.5417259931564331 - 0.0445343889296055 - <_> - - <_> - - - - <_>6 22 8 6 -1. - <_>10 22 4 3 2. - <_>6 25 4 3 2. - 0 - -0.0178947895765305 - 0.4714992940425873 - -0.0308010708540678 - <_> - - <_> - - - - <_>0 22 8 6 -1. - <_>0 22 4 3 2. - <_>4 25 4 3 2. - 0 - 4.7443818766623735e-004 - -0.1968698948621750 - 0.1243302002549171 - <_> - - <_> - - - - <_>5 21 8 6 -1. - <_>9 21 4 3 2. - <_>5 24 4 3 2. - 0 - -4.0598851628601551e-003 - 0.1402866989374161 - -0.0477513298392296 - <_> - - <_> - - - - <_>3 0 6 4 -1. - <_>6 0 3 4 2. - 0 - -0.0117557998746634 - -0.2623791098594666 - 0.0599330700933933 - <_> - - <_> - - - - <_>6 1 6 5 -1. - <_>6 1 3 5 2. - 0 - -0.0185596495866776 - 0.1049325019121170 - -0.0321592614054680 - <_> - - <_> - - - - <_>5 6 4 12 -1. - <_>6 6 2 12 2. - 0 - 3.4838409628719091e-003 - 0.0794998928904533 - -0.2048601061105728 - <_> - - <_> - - - - <_>8 8 4 7 -1. - <_>8 8 2 7 2. - 0 - -0.0621333085000515 - -0.3509109020233154 - 0.0122655602172017 - <_> - - <_> - - - - <_>2 8 4 7 -1. - <_>4 8 2 7 2. - 0 - -0.0440086685121059 - 0.2683838903903961 - -0.0882848873734474 - <_> - - <_> - - - - <_>6 12 8 3 -1. - <_>6 12 4 3 2. - 0 - 3.0750890728086233e-003 - -0.0455819293856621 - 0.1934330016374588 - <_> - - <_> - - - - <_>1 11 9 5 -1. - <_>4 11 3 5 3. - 0 - -0.0898653715848923 - -0.4860535860061646 - 0.0451018810272217 - <_> - - <_> - - - - <_>10 3 4 14 -1. - <_>12 3 2 7 2. - <_>10 10 2 7 2. - 0 - -1.6210540197789669e-003 - 0.0877222567796707 - -0.1668934971094132 - <_> - - <_> - - - - <_>0 2 4 14 -1. - <_>0 2 2 7 2. - <_>2 9 2 7 2. - 0 - -0.0293709393590689 - -0.4279470145702362 - 0.0455667898058891 - <_> - - <_> - - - - <_>1 9 13 6 -1. - <_>1 11 13 2 3. - 0 - -0.0859218165278435 - -0.6907737851142883 - 0.0151229295879602 - <_> - - <_> - - - - <_>7 17 4 2 -1. - <_>7 17 4 1 2. - 1 - 6.7258282797411084e-004 - -0.1116608977317810 - 0.1563075929880142 - <_> - - <_> - - - - <_>10 15 3 6 -1. - <_>11 16 1 6 3. - 1 - 1.7752440180629492e-003 - -0.0454094186425209 - 0.0779330879449844 - <_> - - <_> - - - - <_>4 15 6 3 -1. - <_>3 16 6 1 3. - 1 - 1.5036190234241076e-005 - -0.1634947955608368 - 0.1086442023515701 - <_> - - <_> - - - - <_>7 19 2 7 -1. - <_>7 19 1 7 2. - 1 - 1.8150300020352006e-003 - 0.0963299125432968 - -0.1181806027889252 - <_> - - <_> - - - - <_>0 18 12 9 -1. - <_>3 18 6 9 2. - 0 - -0.0675883665680885 - 0.2265702039003372 - -0.0904929265379906 - <_> - - <_> - - - - <_>7 19 2 7 -1. - <_>7 19 1 7 2. - 1 - 0.0183474905788898 - 0.0163501407951117 - -0.4487788081169128 - <_> - - <_> - - - - <_>7 19 7 2 -1. - <_>7 19 7 1 2. - 1 - -0.0108225103467703 - -0.4962235093116760 - 0.0407033301889896 - <_> - - <_> - - - - <_>7 15 3 13 -1. - <_>8 15 1 13 3. - 0 - 0.0174279995262623 - -0.0354756899178028 - 0.3085643053054810 - <_> - - <_> - - - - <_>2 16 8 7 -1. - <_>4 16 4 7 2. - 0 - -0.0787531211972237 - -0.6714407801628113 - 0.0261704698204994 - <_> - - <_> - - - - <_>4 21 10 6 -1. - <_>9 21 5 3 2. - <_>4 24 5 3 2. - 0 - 7.3261657962575555e-004 - -0.1030958965420723 - 0.0645039826631546 - <_> - - <_> - - - - <_>0 21 10 6 -1. - <_>0 21 5 3 2. - <_>5 24 5 3 2. - 0 - 0.0281850099563599 - -0.0551248118281364 - 0.3113391995429993 - <_> - - <_> - - - - <_>8 14 6 7 -1. - <_>10 16 2 7 3. - 1 - -0.0155364703387022 - -0.0855273008346558 - 0.0490242093801498 - <_> - - <_> - - - - <_>0 20 12 4 -1. - <_>0 20 6 2 2. - <_>6 22 6 2 2. - 0 - -0.0262907296419144 - -0.6526719927787781 - 0.0244957599788904 - <_> - - <_> - - - - <_>1 14 12 10 -1. - <_>4 14 6 10 2. - 0 - -6.8586082197725773e-003 - -0.0585488304495811 - 0.2873598933219910 - <_> - - <_> - - - - <_>3 18 6 4 -1. - <_>6 18 3 4 2. - 0 - -3.0750960577279329e-003 - 0.0864257365465164 - -0.2262724936008453 - <_> - - <_> - - - - <_>11 11 2 16 -1. - <_>11 19 2 8 2. - 0 - 0.0567994304001331 - 0.0290484596043825 - -0.3679820001125336 - <_> - - <_> - - - - <_>3 10 6 14 -1. - <_>3 10 3 7 2. - <_>6 17 3 7 2. - 0 - 0.0371825993061066 - -0.0350622795522213 - 0.4509462118148804 - <_> - - <_> - - - - <_>6 9 4 6 -1. - <_>6 9 2 6 2. - 0 - -3.5590359475463629e-003 - -0.1789246946573257 - 0.0684595182538033 - -30.7173004150390630 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_>5 16 3 12 -1. - <_>6 16 1 12 3. - 0 - -5.8595160953700542e-003 - 0.2013258934020996 - -0.2658714056015015 - <_> - - <_> - - - - <_>2 3 12 18 -1. - <_>6 9 4 6 9. - 0 - -0.5950713753700256 - 0.3613406121730804 - -0.1220315992832184 - <_> - - <_> - - - - <_>3 4 6 10 -1. - <_>3 4 3 5 2. - <_>6 9 3 5 2. - 0 - 0.0417266003787518 - -0.0528890006244183 - 0.3908247053623200 - <_> - - <_> - - - - <_>7 18 6 4 -1. - <_>7 18 6 2 2. - 1 - 0.0472537502646446 - 0.0149239096790552 - -0.5054414868354797 - <_> - - <_> - - - - <_>7 18 4 6 -1. - <_>7 18 2 6 2. - 1 - 9.8612194415181875e-004 - -0.2033773958683014 - 0.1103067025542259 - <_> - - <_> - - - - <_>5 8 4 13 -1. - <_>6 8 2 13 2. - 0 - -7.2683179751038551e-003 - -0.2089924067258835 - 0.1473315060138702 - <_> - - <_> - - - - <_>2 6 3 12 -1. - <_>3 6 1 12 3. - 0 - -0.0296954102814198 - 0.6619029045104981 - -0.0672576203942299 - <_> - - <_> - - - - <_>2 15 12 12 -1. - <_>5 15 6 12 2. - 0 - -0.1309722959995270 - 0.1748578995466232 - -0.0810295715928078 - <_> - - <_> - - - - <_>4 15 4 12 -1. - <_>5 15 2 12 2. - 0 - 0.0173167604953051 - -0.0489086806774139 - 0.4684366881847382 - <_> - - <_> - - - - <_>4 19 9 9 -1. - <_>7 19 3 9 3. - 0 - -0.1022140979766846 - -0.2227514982223511 - 0.0774796381592751 - <_> - - <_> - - - - <_>7 16 5 4 -1. - <_>6 17 5 2 2. - 1 - 2.9453460592776537e-003 - 0.0397382788360119 - -0.2810744941234589 - <_> - - <_> - - - - <_>6 14 6 8 -1. - <_>9 14 3 4 2. - <_>6 18 3 4 2. - 0 - -0.0454255901277065 - 0.2419378012418747 - 0.0136219495907426 - <_> - - <_> - - - - <_>2 14 6 8 -1. - <_>2 14 3 4 2. - <_>5 18 3 4 2. - 0 - 2.2699350956827402e-003 - -0.1624758988618851 - 0.1606360971927643 - <_> - - <_> - - - - <_>3 2 10 16 -1. - <_>8 2 5 8 2. - <_>3 10 5 8 2. - 0 - 0.1142186969518662 - 0.0157504808157682 - -0.5738288760185242 - <_> - - <_> - - - - <_>5 15 3 12 -1. - <_>6 15 1 12 3. - 0 - -0.0410540699958801 - 0.3052262961864471 - -0.0558989606797695 - <_> - - <_> - - - - <_>8 23 6 4 -1. - <_>8 23 3 4 2. - 0 - 0.0119805401191115 - 0.0174771696329117 - -0.4070706963539124 - <_> - - <_> - - - - <_>4 2 4 14 -1. - <_>4 2 2 7 2. - <_>6 9 2 7 2. - 0 - 1.2105259811505675e-003 - -0.1784096062183380 - 0.1035320982336998 - <_> - - <_> - - - - <_>3 7 8 6 -1. - <_>7 7 4 3 2. - <_>3 10 4 3 2. - 0 - -0.0223519802093506 - -0.4756760001182556 - 0.0373113900423050 - <_> - - <_> - - - - <_>2 4 4 6 -1. - <_>2 7 4 3 2. - 0 - 0.0221354793757200 - -0.0541376285254955 - 0.4286107122898102 - <_> - - <_> - - - - <_>7 0 6 24 -1. - <_>7 6 6 12 2. - 0 - -0.0158755797892809 - 0.0663736164569855 - -0.1645548939704895 - <_> - - <_> - - - - <_>0 13 6 14 -1. - <_>0 13 3 7 2. - <_>3 20 3 7 2. - 0 - 0.0603713691234589 - 0.0386639311909676 - -0.4649620056152344 - <_> - - <_> - - - - <_>4 19 10 6 -1. - <_>9 19 5 3 2. - <_>4 22 5 3 2. - 0 - -0.0518812388181686 - -0.5614129900932312 - 5.4471958428621292e-003 - <_> - - <_> - - - - <_>0 19 10 6 -1. - <_>0 19 5 3 2. - <_>5 22 5 3 2. - 0 - 1.9330360228195786e-003 - -0.1347597986459732 - 0.1374733000993729 - <_> - - <_> - - - - <_>4 18 8 10 -1. - <_>8 18 4 5 2. - <_>4 23 4 5 2. - 0 - -4.3940469622612000e-003 - -0.0934059172868729 - 0.0351238213479519 - <_> - - <_> - - - - <_>2 18 8 10 -1. - <_>2 18 4 5 2. - <_>6 23 4 5 2. - 0 - -0.0523141510784626 - 0.7531176209449768 - -0.0292107705026865 - <_> - - <_> - - - - <_>5 14 4 14 -1. - <_>5 14 2 14 2. - 0 - -0.0568978115916252 - -0.9185898900032044 - 0.0288624204695225 - <_> - - <_> - - - - <_>1 2 10 16 -1. - <_>1 2 5 8 2. - <_>6 10 5 8 2. - 0 - -0.2161463946104050 - -1. - 6.9490820169448853e-003 - <_> - - <_> - - - - <_>0 12 14 16 -1. - <_>0 20 14 8 2. - 0 - 0.1847925931215286 - -0.0883579924702644 - 0.1900268942117691 - <_> - - <_> - - - - <_>2 3 10 6 -1. - <_>2 3 5 3 2. - <_>7 6 5 3 2. - 0 - -5.6834658607840538e-003 - -0.1779156029224396 - 0.0982860773801804 - <_> - - <_> - - - - <_>10 1 3 26 -1. - <_>10 14 3 13 2. - 0 - -0.0824480429291725 - -0.3405865132808685 - 0.0156127195805311 - <_> - - <_> - - - - <_>0 9 4 18 -1. - <_>0 18 4 9 2. - 0 - -7.5926659628748894e-003 - 0.2592946887016296 - -0.0693704411387444 - <_> - - <_> - - - - <_>8 21 4 6 -1. - <_>8 21 2 6 2. - 0 - -2.9748380184173584e-003 - 0.0545341782271862 - -0.1263083964586258 - <_> - - <_> - - - - <_>2 6 9 8 -1. - <_>5 6 3 8 3. - 0 - -0.1637797057628632 - -0.8372569084167481 - 0.0224467907100916 - <_> - - <_> - - - - <_>9 21 4 6 -1. - <_>9 21 2 6 2. - 0 - -3.8845320232212543e-003 - -0.2100805938243866 - 0.0918143764138222 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -0.0554963313043118 - 0.5273922085762024 - -0.0385616384446621 - <_> - - <_> - - - - <_>9 20 4 7 -1. - <_>9 20 2 7 2. - 0 - 4.5041809789836407e-003 - 0.0389079898595810 - -0.2107748985290527 - <_> - - <_> - - - - <_>1 4 10 12 -1. - <_>6 4 5 12 2. - 0 - 0.0575163103640080 - -0.0544424615800381 - 0.3497731983661652 - <_> - - <_> - - - - <_>6 1 2 24 -1. - <_>6 9 2 8 3. - 0 - -5.4960879497230053e-003 - 0.1045932993292809 - -0.2295698970556259 - <_> - - <_> - - - - <_>2 21 4 6 -1. - <_>4 21 2 6 2. - 0 - 5.8753142366185784e-004 - 0.0740455389022827 - -0.2373113036155701 - <_> - - <_> - - - - <_>10 1 3 26 -1. - <_>10 14 3 13 2. - 0 - 0.1121611967682838 - -0.0259160008281469 - 0.1138947010040283 - <_> - - <_> - - - - <_>1 1 3 26 -1. - <_>1 14 3 13 2. - 0 - 0.2175375074148178 - 0.0197278708219528 - -0.9622092247009277 - <_> - - <_> - - - - <_>2 9 12 14 -1. - <_>8 9 6 7 2. - <_>2 16 6 7 2. - 0 - -1.4632700476795435e-003 - -0.0940528213977814 - 0.0643891766667366 - <_> - - <_> - - - - <_>4 11 6 8 -1. - <_>4 15 6 4 2. - 0 - -8.6313979700207710e-003 - 0.2503606081008911 - -0.0722346529364586 - <_> - - <_> - - - - <_>5 9 9 18 -1. - <_>5 15 9 6 3. - 0 - -0.0198585093021393 - -0.1269809007644653 - 0.0790514871478081 - <_> - - <_> - - - - <_>1 0 9 4 -1. - <_>4 0 3 4 3. - 0 - -1.3804109767079353e-004 - 0.1446664035320282 - -0.1144407019019127 - <_> - - <_> - - - - <_>5 7 4 6 -1. - <_>5 10 4 3 2. - 0 - 0.0267812404781580 - 0.0176477506756783 - -0.8315789103507996 - <_> - - <_> - - - - <_>3 7 8 4 -1. - <_>3 9 8 2 2. - 0 - 0.0193311199545860 - -0.0455000810325146 - 0.5011094808578491 - <_> - - <_> - - - - <_>2 16 12 6 -1. - <_>8 16 6 3 2. - <_>2 19 6 3 2. - 0 - 0.0416920706629753 - 0.0225023496896029 - -0.3899222016334534 - <_> - - <_> - - - - <_>1 2 8 22 -1. - <_>1 2 4 11 2. - <_>5 13 4 11 2. - 0 - 0.1129698008298874 - -0.0324948392808437 - 0.5392962098121643 - <_> - - <_> - - - - <_>7 19 6 7 -1. - <_>9 19 2 7 3. - 0 - 3.1683610286563635e-003 - -0.1719558984041214 - 0.0936198011040688 - <_> - - <_> - - - - <_>6 7 2 18 -1. - <_>6 13 2 6 3. - 0 - 5.3966748528182507e-003 - 0.0576776303350925 - -0.3043614923954010 - <_> - - <_> - - - - <_>5 8 8 16 -1. - <_>5 12 8 8 2. - 0 - -0.1382918059825897 - -0.5215879082679749 - 0.0184449106454849 - <_> - - <_> - - - - <_>5 20 6 2 -1. - <_>5 20 6 1 2. - 1 - -0.0125941196456552 - 0.2274890989065170 - -0.0693250000476837 - <_> - - <_> - - - - <_>10 19 3 6 -1. - <_>11 20 1 6 3. - 1 - -0.0165144801139832 - 0.1627922952175140 - -0.0344461500644684 - <_> - - <_> - - - - <_>1 22 12 6 -1. - <_>4 22 6 6 2. - 0 - -0.0163928493857384 - -0.1427768021821976 - 0.1629009991884232 - <_> - - <_> - - - - <_>2 25 12 3 -1. - <_>2 25 6 3 2. - 0 - -0.0346064902842045 - -0.4035637974739075 - 8.3033805713057518e-003 - <_> - - <_> - - - - <_>4 19 6 3 -1. - <_>3 20 6 1 3. - 1 - -6.8894061259925365e-003 - 0.2689009010791779 - -0.0694508627057076 - <_> - - <_> - - - - <_>7 20 6 7 -1. - <_>9 20 2 7 3. - 0 - -0.0118794003501534 - 0.2139520943164825 - -0.0209304504096508 - <_> - - <_> - - - - <_>0 17 12 10 -1. - <_>4 17 4 10 3. - 0 - -1.9165100529789925e-003 - 0.0684642195701599 - -0.3145321905612946 - <_> - - <_> - - - - <_>1 18 12 4 -1. - <_>4 18 6 4 2. - 0 - 1.3729350175708532e-003 - -0.0603400282561779 - 0.2757284045219421 - <_> - - <_> - - - - <_>1 19 6 7 -1. - <_>3 19 2 7 3. - 0 - 2.4278028868138790e-003 - -0.2394450008869171 - 0.0846588388085365 - <_> - - <_> - - - - <_>10 22 4 6 -1. - <_>10 22 2 6 2. - 0 - 2.1290169097483158e-003 - 0.0869384780526161 - -0.2821848094463348 - <_> - - <_> - - - - <_>1 4 2 24 -1. - <_>1 4 1 12 2. - <_>2 16 1 12 2. - 0 - -5.2569470426533371e-005 - 0.1368235945701599 - -0.1198064982891083 - <_> - - <_> - - - - <_>10 5 4 10 -1. - <_>10 5 2 10 2. - 0 - 0.0159578993916512 - -0.0396103002130985 - 0.2482517063617706 - <_> - - <_> - - - - <_>0 5 4 10 -1. - <_>2 5 2 10 2. - 0 - 8.9294081553816795e-003 - 0.0811235085129738 - -0.2656157016754150 - <_> - - <_> - - - - <_>8 10 3 15 -1. - <_>9 10 1 15 3. - 0 - 0.0499253086745739 - 0.0150186298415065 - -0.3664787113666534 - <_> - - <_> - - - - <_>3 10 3 15 -1. - <_>4 10 1 15 3. - 0 - -0.0173748396337032 - 0.3397102057933807 - -0.0544941499829292 - <_> - - <_> - - - - <_>8 7 3 17 -1. - <_>9 7 1 17 3. - 0 - -0.0783570632338524 - -0.4943583905696869 - 8.4990533068776131e-003 - <_> - - <_> - - - - <_>3 7 3 17 -1. - <_>4 7 1 17 3. - 0 - -8.9894477277994156e-003 - -0.2320985943078995 - 0.0713790878653526 - <_> - - <_> - - - - <_>9 0 3 13 -1. - <_>10 0 1 13 3. - 0 - -1.5932919923216105e-003 - 0.0825047194957733 - -0.0931231826543808 - <_> - - <_> - - - - <_>2 0 3 13 -1. - <_>3 0 1 13 3. - 0 - 2.6272730901837349e-003 - -0.1321343034505844 - 0.1309982985258102 - <_> - - <_> - - - - <_>1 3 12 5 -1. - <_>4 3 6 5 2. - 0 - -0.0591081604361534 - -0.3722976148128510 - 0.0455746613442898 - <_> - - <_> - - - - <_>6 0 7 6 -1. - <_>4 2 7 2 3. - 1 - 3.5086690913885832e-003 - 0.0894784629344940 - -0.1854341030120850 - <_> - - <_> - - - - <_>7 2 4 8 -1. - <_>7 2 2 8 2. - 0 - 0.0154652204364538 - -0.0306048206984997 - 0.2075458019971848 - <_> - - <_> - - - - <_>6 4 2 12 -1. - <_>7 4 1 12 2. - 0 - -0.0117490198463202 - 0.3920016884803772 - -0.0411008596420288 - <_> - - <_> - - - - <_>9 16 3 6 -1. - <_>10 17 1 6 3. - 1 - 0.0484136082231998 - 3.7391050718724728e-003 - -0.8570184111595154 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>7 8 2 6 2. - 0 - -1.1499889660626650e-003 - -0.2244154959917069 - 0.0713050886988640 - -30.7402000427246090 - 24 - -1 - <_> - - - <_> - - <_> - - - - <_>1 5 12 21 -1. - <_>4 5 6 21 2. - 0 - -0.3242005109786987 - 0.4144775867462158 - -0.1068423017859459 - <_> - - <_> - - - - <_>2 3 12 18 -1. - <_>2 9 12 6 3. - 0 - -0.2106568962335587 - 0.2330280989408493 - -0.0946957990527153 - <_> - - <_> - - - - <_>1 1 12 4 -1. - <_>4 1 6 4 2. - 0 - -0.0215405505150557 - -0.2889172136783600 - 0.0706660673022270 - <_> - - <_> - - - - <_>6 13 3 13 -1. - <_>7 13 1 13 3. - 0 - 5.9726871550083160e-003 - -0.0905594900250435 - 0.2298959940671921 - <_> - - <_> - - - - <_>1 1 6 12 -1. - <_>1 1 3 6 2. - <_>4 7 3 6 2. - 0 - 0.0264681000262499 - -0.0502540506422520 - 0.3934643864631653 - <_> - - <_> - - - - <_>7 6 6 6 -1. - <_>9 6 2 6 3. - 0 - -0.0725311264395714 - -0.3942146897315979 - 7.5547359883785248e-003 - <_> - - <_> - - - - <_>1 6 6 6 -1. - <_>3 6 2 6 3. - 0 - -0.0436849184334278 - -0.5755354762077332 - 0.0518933199346066 - <_> - - <_> - - - - <_>7 2 6 13 -1. - <_>9 2 2 13 3. - 0 - 0.1167066022753716 - -2.5791339576244354e-003 - -0.8259764909744263 - <_> - - <_> - - - - <_>1 2 6 13 -1. - <_>3 2 2 13 3. - 0 - -0.0823811665177345 - 0.7581896185874939 - -0.0265769306570292 - <_> - - <_> - - - - <_>4 0 6 28 -1. - <_>6 0 2 28 3. - 0 - -2.3157079704105854e-003 - 0.0668586865067482 - -0.3040786981582642 - <_> - - <_> - - - - <_>0 13 14 3 -1. - <_>0 14 14 1 3. - 0 - -0.0166781898587942 - 0.3852531909942627 - -0.0488426797091961 - <_> - - <_> - - - - <_>10 20 4 7 -1. - <_>10 20 2 7 2. - 0 - -3.0678999610245228e-003 - -0.2715098857879639 - 0.0645612627267838 - <_> - - <_> - - - - <_>5 8 2 12 -1. - <_>6 8 1 12 2. - 0 - -8.3884904161095619e-003 - -0.2826730012893677 - 0.0707788914442062 - <_> - - <_> - - - - <_>5 16 4 8 -1. - <_>5 16 2 8 2. - 0 - 0.0213579107075930 - -0.0661064833402634 - 0.3186753988265991 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -4.0636979974806309e-003 - 0.1173984035849571 - -0.1510592997074127 - <_> - - <_> - - - - <_>5 0 6 8 -1. - <_>8 0 3 4 2. - <_>5 4 3 4 2. - 0 - -1.1475679930299520e-003 - 0.0642628967761993 - -0.0744720771908760 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - 0.0181456897407770 - -0.0569460093975067 - 0.4210714995861054 - <_> - - <_> - - - - <_>10 20 4 7 -1. - <_>10 20 2 7 2. - 0 - 5.0288350321352482e-003 - 0.0838666707277298 - -0.3392939865589142 - <_> - - <_> - - - - <_>4 15 4 12 -1. - <_>5 15 2 12 2. - 0 - -0.0579163618385792 - 0.4517017900943756 - -0.0431988686323166 - <_> - - <_> - - - - <_>7 16 4 6 -1. - <_>7 16 2 6 2. - 1 - 0.0310252998024225 - 0.0280007403343916 - -0.1681894063949585 - <_> - - <_> - - - - <_>3 2 6 9 -1. - <_>6 2 3 9 2. - 0 - 0.0821342915296555 - 0.0199995301663876 - -0.7691050767898560 - <_> - - <_> - - - - <_>2 2 12 2 -1. - <_>2 2 6 2 2. - 0 - 0.0736665725708008 - -1.2391459895297885e-003 - -1.0004559755325317 - <_> - - <_> - - - - <_>0 2 12 2 -1. - <_>6 2 6 2 2. - 0 - 1.5681830700486898e-004 - -0.1215459033846855 - 0.1356196999549866 - <_> - - <_> - - - - <_>6 1 6 4 -1. - <_>6 1 3 4 2. - 0 - 0.0451309308409691 - 4.7123869881033897e-003 - -0.2967104911804199 - <_> - - <_> - - - - <_>0 2 4 6 -1. - <_>0 5 4 3 2. - 0 - -5.1468348829075694e-004 - 0.1460689008235931 - -0.1360048055648804 - <_> - - <_> - - - - <_>5 4 8 4 -1. - <_>5 6 8 2 2. - 0 - -0.0149811198934913 - -0.1793365925550461 - 0.0539286993443966 - <_> - - <_> - - - - <_>1 8 12 2 -1. - <_>1 9 12 1 2. - 0 - -0.0271517895162106 - -0.6752901077270508 - 0.0230467803776264 - <_> - - <_> - - - - <_>8 7 6 8 -1. - <_>8 9 6 4 2. - 0 - -0.0665780231356621 - -0.6558642983436585 - 4.7667929902672768e-003 - <_> - - <_> - - - - <_>0 7 6 8 -1. - <_>0 9 6 4 2. - 0 - -3.3119178842753172e-003 - 0.1225500032305718 - -0.1633393019437790 - <_> - - <_> - - - - <_>11 15 2 12 -1. - <_>11 15 1 12 2. - 0 - -0.0158111806958914 - -0.4473117887973785 - 8.9029967784881592e-003 - <_> - - <_> - - - - <_>2 15 3 12 -1. - <_>3 15 1 12 3. - 0 - -5.6757620768621564e-005 - 0.1494435071945190 - -0.1068682968616486 - <_> - - <_> - - - - <_>11 15 2 12 -1. - <_>11 15 1 12 2. - 0 - 0.0106024900451303 - 0.0216858293861151 - -0.3220812976360321 - <_> - - <_> - - - - <_>1 12 6 16 -1. - <_>1 12 3 8 2. - <_>4 20 3 8 2. - 0 - 2.1245649550110102e-003 - -0.2042573988437653 - 0.0823309570550919 - <_> - - <_> - - - - <_>4 10 10 5 -1. - <_>4 10 5 5 2. - 0 - 0.0476385802030563 - -0.0327284410595894 - 0.4472625851631165 - <_> - - <_> - - - - <_>4 16 8 3 -1. - <_>3 17 8 1 3. - 1 - -0.0113001996651292 - 0.2554602026939392 - -0.0699698999524117 - <_> - - <_> - - - - <_>2 25 12 3 -1. - <_>6 25 4 3 3. - 0 - -1.1472209589555860e-003 - 0.0474677905440331 - -0.2222079038619995 - <_> - - <_> - - - - <_>1 10 10 8 -1. - <_>1 10 5 4 2. - <_>6 14 5 4 2. - 0 - 0.0180086400359869 - -0.0608602091670036 - 0.2908244132995606 - <_> - - <_> - - - - <_>0 12 14 6 -1. - <_>7 12 7 3 2. - <_>0 15 7 3 2. - 0 - -0.0116342604160309 - -0.3147492110729218 - 0.0836308971047401 - <_> - - <_> - - - - <_>2 20 8 8 -1. - <_>2 20 4 4 2. - <_>6 24 4 4 2. - 0 - 6.5580541267991066e-003 - -0.1212183013558388 - 0.1312450021505356 - <_> - - <_> - - - - <_>12 16 2 7 -1. - <_>12 16 1 7 2. - 1 - -2.3253620602190495e-003 - -0.0871386229991913 - 0.0704765170812607 - <_> - - <_> - - - - <_>1 17 12 4 -1. - <_>4 17 6 4 2. - 0 - 0.0214862208813429 - -0.0359365493059158 - 0.4373702108860016 - <_> - - <_> - - - - <_>5 9 6 14 -1. - <_>7 9 2 14 3. - 0 - 0.1258939951658249 - 0.0124431503936648 - -0.9282261729240418 - <_> - - <_> - - - - <_>3 9 6 14 -1. - <_>5 9 2 14 3. - 0 - -2.2191529569681734e-004 - 0.0697983428835869 - -0.3210623860359192 - <_> - - <_> - - - - <_>3 8 9 12 -1. - <_>6 12 3 4 9. - 0 - -0.0581751987338066 - -0.0770256295800209 - 0.0967479869723320 - <_> - - <_> - - - - <_>5 4 4 19 -1. - <_>7 4 2 19 2. - 0 - -4.5887380838394165e-004 - 0.1141244992613792 - -0.1471917033195496 - <_> - - <_> - - - - <_>5 5 4 19 -1. - <_>5 5 2 19 2. - 0 - -0.0408370196819305 - 0.4765458106994629 - -0.0497375689446926 - <_> - - <_> - - - - <_>2 10 10 18 -1. - <_>2 10 5 9 2. - <_>7 19 5 9 2. - 0 - -9.7786840051412582e-003 - -0.2051378041505814 - 0.0844689831137657 - <_> - - <_> - - - - <_>3 3 9 15 -1. - <_>3 8 9 5 3. - 0 - 0.2796426117420197 - -0.0300348699092865 - 0.6952624917030335 - <_> - - <_> - - - - <_>3 7 8 12 -1. - <_>3 11 8 4 3. - 0 - -0.0888691172003746 - 0.2408183962106705 - -0.0705763772130013 - <_> - - <_> - - - - <_>6 9 6 8 -1. - <_>6 11 6 4 2. - 0 - -0.0140954600647092 - -0.1045643985271454 - 0.0466049797832966 - <_> - - <_> - - - - <_>1 16 2 12 -1. - <_>2 16 1 12 2. - 0 - 2.6836670003831387e-003 - 0.0604959689080715 - -0.2578496932983398 - <_> - - <_> - - - - <_>11 3 3 18 -1. - <_>11 12 3 9 2. - 0 - 0.0870512798428535 - -0.0241736695170403 - 0.2404305934906006 - <_> - - <_> - - - - <_>0 3 3 18 -1. - <_>0 12 3 9 2. - 0 - -0.0101780397817492 - 0.2546978890895844 - -0.0928905084729195 - <_> - - <_> - - - - <_>2 8 10 6 -1. - <_>7 8 5 3 2. - <_>2 11 5 3 2. - 0 - -9.0314531698822975e-003 - -0.2634347975254059 - 0.0708488076925278 - <_> - - <_> - - - - <_>0 3 3 23 -1. - <_>1 3 1 23 3. - 0 - -6.7082298919558525e-003 - 0.2331347018480301 - -0.0762718096375465 - <_> - - <_> - - - - <_>7 3 6 5 -1. - <_>7 3 3 5 2. - 0 - -0.0676144734025002 - -0.5201326012611389 - 0.0137851601466537 - <_> - - <_> - - - - <_>2 0 10 28 -1. - <_>2 14 10 14 2. - 0 - -0.3963688015937805 - -0.7626718878746033 - 0.0206865202635527 - <_> - - <_> - - - - <_>6 17 8 6 -1. - <_>10 17 4 3 2. - <_>6 20 4 3 2. - 0 - 1.2813470093533397e-003 - -0.1404623985290527 - 0.1271191984415054 - <_> - - <_> - - - - <_>4 13 4 14 -1. - <_>4 13 2 7 2. - <_>6 20 2 7 2. - 0 - 8.4416065365076065e-003 - 0.0747128278017044 - -0.2566313147544861 - <_> - - <_> - - - - <_>12 7 2 12 -1. - <_>12 7 1 12 2. - 0 - 1.4749030015082099e-005 - -0.1401512026786804 - 0.1521048992872238 - <_> - - <_> - - - - <_>1 3 6 5 -1. - <_>4 3 3 5 2. - 0 - -0.0450732111930847 - -0.6426286101341248 - 0.0259254500269890 - <_> - - <_> - - - - <_>12 7 2 12 -1. - <_>12 7 1 12 2. - 0 - 7.7068619430065155e-003 - 0.0324856899678707 - -0.2037702947854996 - <_> - - <_> - - - - <_>0 7 2 12 -1. - <_>1 7 1 12 2. - 0 - 5.9383822372183204e-004 - -0.1295032948255539 - 0.1621938049793243 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - -1.3042639475315809e-003 - 0.0863188430666924 - -0.1922470927238464 - <_> - - <_> - - - - <_>0 10 10 5 -1. - <_>5 10 5 5 2. - 0 - 6.4417850226163864e-003 - -0.0715060532093048 - 0.3062734901905060 - <_> - - <_> - - - - <_>2 9 12 8 -1. - <_>5 9 6 8 2. - 0 - -0.0156303308904171 - 0.0495155490934849 - -0.1484034955501556 - <_> - - <_> - - - - <_>0 7 4 12 -1. - <_>2 7 2 12 2. - 0 - 0.0113956201821566 - 0.0633552968502045 - -0.2557640969753265 - <_> - - <_> - - - - <_>11 16 3 6 -1. - <_>12 17 1 6 3. - 1 - 0.0475444309413433 - 4.8167328350245953e-003 - -0.7898777723312378 - <_> - - <_> - - - - <_>5 16 2 12 -1. - <_>6 16 1 12 2. - 0 - 8.3856023848056793e-003 - -0.0430120117962360 - 0.4110831916332245 - <_> - - <_> - - - - <_>11 16 3 6 -1. - <_>12 17 1 6 3. - 1 - -1.6369849909096956e-003 - 0.0824732929468155 - -0.0789568126201630 - <_> - - <_> - - - - <_>6 6 2 14 -1. - <_>7 6 1 14 2. - 0 - -0.0165131092071533 - -0.5069249272346497 - 0.0390719100832939 - <_> - - <_> - - - - <_>3 2 8 11 -1. - <_>5 2 4 11 2. - 0 - 0.1035835966467857 - 0.0207722708582878 - -0.6937174797058106 - <_> - - <_> - - - - <_>5 3 3 22 -1. - <_>6 3 1 22 3. - 0 - 0.0333618409931660 - -0.0444790087640285 - 0.4639281928539276 - <_> - - <_> - - - - <_>5 7 4 6 -1. - <_>5 10 4 3 2. - 0 - -0.0286644306033850 - -0.4588367044925690 - 0.0356761701405048 - <_> - - <_> - - - - <_>4 9 6 4 -1. - <_>4 11 6 2 2. - 0 - -1.1209170043002814e-004 - 0.0843445137143135 - -0.2155565023422241 - <_> - - <_> - - - - <_>5 25 8 3 -1. - <_>5 25 4 3 2. - 0 - 0.0176902003586292 - 9.7461966797709465e-003 - -0.8526154160499573 - <_> - - <_> - - - - <_>4 6 6 4 -1. - <_>4 8 6 2 2. - 0 - -0.0218784697353840 - 0.2634595036506653 - -0.0702206417918205 - <_> - - <_> - - - - <_>4 5 10 8 -1. - <_>4 9 10 4 2. - 0 - -0.1242443025112152 - -0.2865940928459168 - 0.0218161400407553 - <_> - - <_> - - - - <_>0 12 6 6 -1. - <_>0 15 6 3 2. - 0 - 0.0657360926270485 - 0.0236005801707506 - -0.7026379108428955 - <_> - - <_> - - - - <_>5 25 8 3 -1. - <_>5 25 4 3 2. - 0 - -0.0446337014436722 - -0.9577643275260925 - 3.5877549089491367e-003 - <_> - - <_> - - - - <_>0 13 10 6 -1. - <_>0 13 5 3 2. - <_>5 16 5 3 2. - 0 - -0.0642715767025948 - 0.6009951829910278 - -0.0285576190799475 - <_> - - <_> - - - - <_>6 7 3 15 -1. - <_>7 7 1 15 3. - 0 - 5.6516240874771029e-005 - -0.1348548978567123 - 0.1108092963695526 - <_> - - <_> - - - - <_>0 1 14 15 -1. - <_>0 6 14 5 3. - 0 - 1.3419260503724217e-003 - 0.0983250066637993 - -0.1688349992036820 - <_> - - <_> - - - - <_>6 4 8 8 -1. - <_>6 6 8 4 2. - 0 - -0.0218897294253111 - -0.2188055068254471 - 0.0296206790953875 - <_> - - <_> - - - - <_>0 10 12 8 -1. - <_>0 12 12 4 2. - 0 - -1.9670790061354637e-003 - 0.0976428091526031 - -0.1806287020444870 - <_> - - <_> - - - - <_>8 1 6 6 -1. - <_>8 3 6 2 3. - 0 - -0.0761965215206146 - -0.8638762235641480 - 7.3730680160224438e-003 - <_> - - <_> - - - - <_>0 1 6 6 -1. - <_>0 3 6 2 3. - 0 - -7.9841358819976449e-004 - 0.1535367965698242 - -0.1210580989718437 - <_> - - <_> - - - - <_>5 25 8 3 -1. - <_>5 25 4 3 2. - 0 - -8.2246732199564576e-004 - 0.0407943390309811 - -0.1373779028654099 - <_> - - <_> - - - - <_>4 0 6 6 -1. - <_>6 0 2 6 3. - 0 - -3.0324649997055531e-003 - 0.1208821013569832 - -0.1408873051404953 - -30.7607002258300780 - 25 - -1 - <_> - - - <_> - - <_> - - - - <_>1 16 12 4 -1. - <_>4 16 6 4 2. - 0 - -0.0527186505496502 - 0.2598567903041840 - -0.1572197973728180 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 6 2 2. - 1 - 5.1614670082926750e-003 - -0.1027185991406441 - 0.0593469813466072 - <_> - - <_> - - - - <_>6 4 4 6 -1. - <_>6 4 2 6 2. - 1 - 0.0676990672945976 - -0.0773112624883652 - 0.2860201001167297 - <_> - - <_> - - - - <_>4 4 6 4 -1. - <_>4 6 6 2 2. - 0 - -0.0338220112025738 - -0.5699905753135681 - 0.0406845286488533 - <_> - - <_> - - - - <_>6 15 7 4 -1. - <_>6 15 7 2 2. - 1 - -0.0537463985383511 - -0.4742139875888825 - 0.0627515912055969 - <_> - - <_> - - - - <_>4 4 6 4 -1. - <_>4 6 6 2 2. - 0 - -0.0305595602840185 - 0.7163878083229065 - -0.0174239501357079 - <_> - - <_> - - - - <_>4 4 6 4 -1. - <_>4 6 6 2 2. - 0 - -0.0338220112025738 - -0.6728317737579346 - -1.2177439639344811e-003 - <_> - - <_> - - - - <_>8 2 3 12 -1. - <_>9 2 1 12 3. - 0 - 2.7876009698957205e-004 - -0.0702052265405655 - 0.1164873018860817 - <_> - - <_> - - - - <_>3 2 3 12 -1. - <_>4 2 1 12 3. - 0 - -2.5016230065375566e-003 - 0.1291521042585373 - -0.1357607990503311 - <_> - - <_> - - - - <_>4 0 8 28 -1. - <_>6 0 4 28 2. - 0 - 0.0908358395099640 - 4.1303969919681549e-003 - 0.4011166095733643 - <_> - - <_> - - - - <_>2 0 8 28 -1. - <_>4 0 4 28 2. - 0 - -0.0256032608449459 - -0.1005948036909103 - 0.1881915926933289 - <_> - - <_> - - - - <_>8 15 4 8 -1. - <_>8 15 2 8 2. - 0 - -0.0521344617009163 - 0.2528272867202759 - -0.1144765987992287 - <_> - - <_> - - - - <_>0 22 8 6 -1. - <_>0 22 4 3 2. - <_>4 25 4 3 2. - 0 - 0.0384620688855648 - 0.0558288693428040 - -0.5763548016548157 - <_> - - <_> - - - - <_>7 20 4 4 -1. - <_>8 21 2 4 2. - 1 - -1.4195869443938136e-003 - 0.0457690991461277 - -0.1600112020969391 - <_> - - <_> - - - - <_>4 15 6 6 -1. - <_>6 15 2 6 3. - 0 - -0.0764881670475006 - -0.5253133773803711 - 0.0520116500556469 - <_> - - <_> - - - - <_>4 10 6 9 -1. - <_>6 10 2 9 3. - 0 - 1.2786199804395437e-003 - 0.0760514065623283 - -0.2510409057140350 - <_> - - <_> - - - - <_>5 8 4 17 -1. - <_>6 8 2 17 2. - 0 - -1.2661969522014260e-003 - -0.1241165027022362 - 0.1637594997882843 - <_> - - <_> - - - - <_>7 16 2 12 -1. - <_>7 16 1 12 2. - 0 - -9.0841390192508698e-003 - 0.2261393070220947 - -0.0545596182346344 - <_> - - <_> - - - - <_>6 11 2 12 -1. - <_>7 11 1 12 2. - 0 - 7.4418167059775442e-005 - -0.1648879945278168 - 0.1086440011858940 - <_> - - <_> - - - - <_>0 12 14 12 -1. - <_>0 12 7 12 2. - 0 - -2.5643699336796999e-003 - -0.1893323957920075 - 0.1029883027076721 - <_> - - <_> - - - - <_>0 4 4 24 -1. - <_>0 10 4 12 2. - 0 - -0.0349972285330296 - 0.2374626994132996 - -0.0823906883597374 - <_> - - <_> - - - - <_>8 0 4 8 -1. - <_>8 4 4 4 2. - 0 - -0.0194228291511536 - -0.0996915400028229 - 0.0403765588998795 - <_> - - <_> - - - - <_>1 24 12 4 -1. - <_>4 24 6 4 2. - 0 - -0.0596014782786369 - -0.9116243124008179 - 0.0183674208819866 - <_> - - <_> - - - - <_>5 9 8 18 -1. - <_>5 18 8 9 2. - 0 - 0.3404640853404999 - 6.0519641265273094e-003 - -0.4458416104316711 - <_> - - <_> - - - - <_>1 4 3 22 -1. - <_>2 4 1 22 3. - 0 - 6.5878271125257015e-003 - -0.0957677513360977 - 0.1808755993843079 - <_> - - <_> - - - - <_>11 16 2 12 -1. - <_>11 16 1 12 2. - 0 - 5.3841830231249332e-003 - 0.0526585616171360 - -0.4520238935947418 - <_> - - <_> - - - - <_>1 16 2 12 -1. - <_>2 16 1 12 2. - 0 - 7.9094972461462021e-003 - 0.0380643010139465 - -0.4598438143730164 - <_> - - <_> - - - - <_>4 1 8 6 -1. - <_>8 1 4 3 2. - <_>4 4 4 3 2. - 0 - -0.0175665393471718 - 0.1113914027810097 - -0.0295645091682673 - <_> - - <_> - - - - <_>2 1 8 6 -1. - <_>2 1 4 3 2. - <_>6 4 4 3 2. - 0 - -1.1352599831297994e-003 - 0.1082551032304764 - -0.1835540980100632 - <_> - - <_> - - - - <_>4 0 8 20 -1. - <_>4 10 8 10 2. - 0 - 0.1423728018999100 - -0.0319952294230461 - 0.3809931874275208 - <_> - - <_> - - - - <_>0 5 9 6 -1. - <_>0 8 9 3 2. - 0 - -0.1002440974116325 - -0.7746186256408691 - 0.0239925999194384 - <_> - - <_> - - - - <_>3 4 8 16 -1. - <_>3 8 8 8 2. - 0 - -0.1245379969477654 - 0.2125505954027176 - -0.0917487591505051 - <_> - - <_> - - - - <_>3 11 6 16 -1. - <_>3 19 6 8 2. - 0 - 0.1964138001203537 - 0.0330282710492611 - -0.6022315025329590 - <_> - - <_> - - - - <_>4 9 6 12 -1. - <_>7 9 3 6 2. - <_>4 15 3 6 2. - 0 - -0.0414673388004303 - -0.8826444745063782 - 0.0133995404466987 - <_> - - <_> - - - - <_>7 20 4 3 -1. - <_>6 21 4 1 3. - 1 - -0.0300201997160912 - 0.5815895199775696 - -0.0398013107478619 - <_> - - <_> - - - - <_>2 6 12 2 -1. - <_>2 7 12 1 2. - 0 - 0.0190021507441998 - -0.0245082303881645 - 0.3225910067558289 - <_> - - <_> - - - - <_>4 2 6 4 -1. - <_>4 2 6 2 2. - 1 - -0.0108372801914811 - -0.2542868852615356 - 0.0733845233917236 - <_> - - <_> - - - - <_>8 1 6 5 -1. - <_>8 1 3 5 2. - 1 - -0.0244938600808382 - 0.1488355994224548 - -0.0367299504578114 - <_> - - <_> - - - - <_>7 4 4 6 -1. - <_>7 4 4 3 2. - 1 - 4.7652618959546089e-003 - 0.1269364058971405 - -0.1915761977434158 - <_> - - <_> - - - - <_>4 5 6 20 -1. - <_>4 10 6 10 2. - 0 - -0.0124380104243755 - 0.0717270076274872 - -0.2542191147804260 - <_> - - <_> - - - - <_>2 8 4 13 -1. - <_>4 8 2 13 2. - 0 - 0.0212753191590309 - -0.0493925884366035 - 0.5271543264389038 - <_> - - <_> - - - - <_>0 0 14 8 -1. - <_>7 0 7 4 2. - <_>0 4 7 4 2. - 0 - -0.0673698335886002 - -0.4689128100872040 - 0.0428815484046936 - <_> - - <_> - - - - <_>5 0 4 6 -1. - <_>7 0 2 6 2. - 0 - -1.0925510432571173e-003 - 0.1125015020370483 - -0.1368837952613831 - <_> - - <_> - - - - <_>6 2 4 12 -1. - <_>6 6 4 4 3. - 0 - -0.0978634282946587 - -0.8516709208488464 - 7.9745445400476456e-003 - <_> - - <_> - - - - <_>2 14 4 7 -1. - <_>4 14 2 7 2. - 0 - -2.0980979315936565e-003 - 0.0725561976432800 - -0.2125356048345566 - <_> - - <_> - - - - <_>5 4 6 4 -1. - <_>5 4 3 4 2. - 0 - 0.0449756681919098 - -6.4254011958837509e-003 - 0.6733464002609253 - <_> - - <_> - - - - <_>3 0 8 19 -1. - <_>7 0 4 19 2. - 0 - -0.0209705308079720 - -0.1534136980772018 - 0.1122943982481957 - <_> - - <_> - - - - <_>5 5 4 15 -1. - <_>5 5 2 15 2. - 0 - 7.1862142067402601e-004 - -0.1369003951549530 - 0.1232310980558395 - <_> - - <_> - - - - <_>1 11 12 3 -1. - <_>1 12 12 1 3. - 0 - 0.0119219999760389 - -0.0520369112491608 - 0.3509553968906403 - <_> - - <_> - - - - <_>5 4 6 4 -1. - <_>5 4 3 4 2. - 0 - -0.0129568902775645 - 0.0878135785460472 - -0.0281739197671413 - <_> - - <_> - - - - <_>1 10 5 6 -1. - <_>1 13 5 3 2. - 0 - -0.0279726497828960 - -0.5901845097541809 - 0.0247701294720173 - <_> - - <_> - - - - <_>5 4 6 4 -1. - <_>5 4 3 4 2. - 0 - -6.0088839381933212e-003 - -0.0659633576869965 - 0.0362772904336452 - <_> - - <_> - - - - <_>0 13 13 3 -1. - <_>0 14 13 1 3. - 0 - -4.0854439139366150e-003 - 0.1821193993091583 - -0.0895676687359810 - <_> - - <_> - - - - <_>5 4 6 4 -1. - <_>5 4 3 4 2. - 0 - 6.3200960867106915e-003 - 0.0238888505846262 - -0.1060646027326584 - <_> - - <_> - - - - <_>3 4 6 4 -1. - <_>6 4 3 4 2. - 0 - 0.0206336192786694 - -0.0381768010556698 - 0.5213416218757629 - <_> - - <_> - - - - <_>8 22 4 6 -1. - <_>8 22 2 6 2. - 0 - -2.5221719406545162e-003 - 0.0465103685855865 - -0.0939578711986542 - <_> - - <_> - - - - <_>2 22 4 6 -1. - <_>4 22 2 6 2. - 0 - -4.6648699790239334e-003 - -0.2373497933149338 - 0.0806084200739861 - <_> - - <_> - - - - <_>8 22 4 6 -1. - <_>8 22 2 6 2. - 0 - 2.5844529736787081e-003 - -0.0242755599319935 - 0.2288825064897537 - <_> - - <_> - - - - <_>2 22 4 6 -1. - <_>4 22 2 6 2. - 0 - -1.4966880371503066e-005 - 0.0993802025914192 - -0.1983017027378082 - <_> - - <_> - - - - <_>0 13 14 3 -1. - <_>0 14 14 1 3. - 0 - 6.2676537781953812e-003 - -0.0743672326207161 - 0.2279033958911896 - <_> - - <_> - - - - <_>7 19 7 2 -1. - <_>7 19 7 1 2. - 1 - 0.0263475496321917 - 0.0192854590713978 - -0.8868331909179688 - <_> - - <_> - - - - <_>6 9 6 12 -1. - <_>6 13 6 4 3. - 0 - -0.0602689497172832 - 0.1256269067525864 - -0.0337168686091900 - <_> - - <_> - - - - <_>0 26 12 2 -1. - <_>6 26 6 2 2. - 0 - -3.8371770642697811e-003 - -0.1773530989885330 - 0.0885887369513512 - <_> - - <_> - - - - <_>2 25 12 3 -1. - <_>2 25 6 3 2. - 0 - -3.5063549876213074e-003 - -0.0871009081602097 - 0.0566508583724499 - <_> - - <_> - - - - <_>0 24 14 4 -1. - <_>0 24 7 2 2. - <_>7 26 7 2 2. - 0 - -8.1536881625652313e-003 - 0.2586381137371063 - -0.0596906095743179 - <_> - - <_> - - - - <_>12 3 2 12 -1. - <_>12 3 1 12 2. - 1 - 0.0385741293430328 - 8.4148198366165161e-003 - -0.4340906143188477 - <_> - - <_> - - - - <_>3 2 4 12 -1. - <_>3 2 2 6 2. - <_>5 8 2 6 2. - 0 - -0.0392696596682072 - 0.3546951115131378 - -0.0432481691241264 - <_> - - <_> - - - - <_>6 1 3 17 -1. - <_>7 1 1 17 3. - 0 - -1.7512469785287976e-003 - 0.0868160873651505 - -0.0969246327877045 - <_> - - <_> - - - - <_>3 6 8 7 -1. - <_>5 6 4 7 2. - 0 - -0.0840612500905991 - -0.6525657176971436 - 0.0247653201222420 - <_> - - <_> - - - - <_>6 0 3 12 -1. - <_>7 0 1 12 3. - 0 - -0.0434175394475460 - -0.5620542764663696 - 9.8713487386703491e-003 - <_> - - <_> - - - - <_>5 0 3 12 -1. - <_>6 0 1 12 3. - 0 - -0.0136431697756052 - 0.2456213980913162 - -0.0605527088046074 - <_> - - <_> - - - - <_>6 1 3 17 -1. - <_>7 1 1 17 3. - 0 - 0.0164903607219458 - 0.0388668887317181 - -0.2771584987640381 - <_> - - <_> - - - - <_>3 8 8 8 -1. - <_>3 8 4 4 2. - <_>7 12 4 4 2. - 0 - -0.0144229000434279 - -0.2282046973705292 - 0.0590268410742283 - <_> - - <_> - - - - <_>8 15 3 12 -1. - <_>9 15 1 12 3. - 0 - 2.7178740128874779e-003 - -0.1188718006014824 - 0.1219222992658615 - <_> - - <_> - - - - <_>0 16 10 12 -1. - <_>0 16 5 6 2. - <_>5 22 5 6 2. - 0 - 6.3701239414513111e-003 - -0.1716777980327606 - 0.0995554178953171 - <_> - - <_> - - - - <_>6 2 8 22 -1. - <_>10 2 4 11 2. - <_>6 13 4 11 2. - 0 - 0.0812902003526688 - -0.0225097406655550 - 0.2447286993265152 - <_> - - <_> - - - - <_>0 25 12 3 -1. - <_>6 25 6 3 2. - 0 - -1.4793650188948959e-004 - 0.0808456912636757 - -0.2168036997318268 - <_> - - <_> - - - - <_>2 14 12 14 -1. - <_>2 14 6 14 2. - 0 - -6.9097941741347313e-004 - 0.0622812397778034 - -0.1408240944147110 - <_> - - <_> - - - - <_>2 14 8 10 -1. - <_>4 14 4 10 2. - 0 - -0.0114553598687053 - -0.1172252967953682 - 0.1594851016998291 - <_> - - <_> - - - - <_>5 13 6 14 -1. - <_>7 13 2 14 3. - 0 - -0.1633439958095551 - -0.3472715020179749 - 0.0110032502561808 - <_> - - <_> - - - - <_>3 13 6 14 -1. - <_>5 13 2 14 3. - 0 - -0.0686523020267487 - 0.2544158101081848 - -0.0787787586450577 - <_> - - <_> - - - - <_>4 12 8 13 -1. - <_>6 12 4 13 2. - 0 - 6.9226641207933426e-003 - -0.0298005696386099 - 0.2045527994632721 - <_> - - <_> - - - - <_>2 12 8 13 -1. - <_>4 12 4 13 2. - 0 - -0.1085160002112389 - -0.4737502932548523 - 0.0407044403254986 - <_> - - <_> - - - - <_>3 22 10 6 -1. - <_>8 22 5 3 2. - <_>3 25 5 3 2. - 0 - 0.0588681511580944 - 1.3014429714530706e-003 - -1.0001180171966553 - <_> - - <_> - - - - <_>1 22 10 6 -1. - <_>1 22 5 3 2. - <_>6 25 5 3 2. - 0 - 1.5332780312746763e-003 - -0.1644199043512344 - 0.0994952693581581 - <_> - - <_> - - - - <_>8 5 6 9 -1. - <_>8 8 6 3 3. - 0 - -2.5576220359653234e-003 - 0.0814589336514473 - -0.0909456834197044 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>0 8 6 3 2. - <_>6 11 6 3 2. - 0 - 3.6009950563311577e-003 - 0.0867608934640884 - -0.1987220942974091 - <_> - - <_> - - - - <_>9 6 3 13 -1. - <_>10 6 1 13 3. - 0 - 0.0109860803931952 - -0.0482303202152252 - 0.1926449984312058 - <_> - - <_> - - - - <_>0 2 5 24 -1. - <_>0 14 5 12 2. - 0 - -4.4403300853446126e-004 - 0.2011567056179047 - -0.0830598101019859 - <_> - - <_> - - - - <_>11 11 3 8 -1. - <_>11 15 3 4 2. - 0 - 2.9464240651577711e-004 - -0.1280869990587235 - 0.0666525363922119 - <_> - - <_> - - - - <_>5 1 3 17 -1. - <_>6 1 1 17 3. - 0 - -0.0413200818002224 - -0.5351092219352722 - 0.0295785907655954 - <_> - - <_> - - - - <_>5 5 8 8 -1. - <_>7 5 4 8 2. - 0 - 0.0819299966096878 - -0.0169396102428436 - 0.7652422189712524 - <_> - - <_> - - - - <_>3 16 2 12 -1. - <_>4 16 1 12 2. - 0 - 0.0147583996877074 - 0.0272067803889513 - -0.6260780096054077 - <_> - - <_> - - - - <_>6 3 6 18 -1. - <_>8 9 2 6 9. - 0 - -0.1757709980010986 - 0.1032833009958267 - -0.0518636181950569 - <_> - - <_> - - - - <_>4 2 4 12 -1. - <_>4 6 4 4 3. - 0 - -0.0104924496263266 - -0.1942481994628906 - 0.0858353078365326 - <_> - - <_> - - - - <_>5 1 4 12 -1. - <_>5 4 4 6 2. - 0 - -5.6793028488755226e-003 - 0.1625234931707382 - -0.1160741001367569 - <_> - - <_> - - - - <_>1 0 12 12 -1. - <_>5 4 4 4 9. - 0 - -0.0770260915160179 - -0.1658536940813065 - 0.1048763990402222 - <_> - - <_> - - - - <_>6 0 6 5 -1. - <_>6 0 3 5 2. - 0 - 0.0882552415132523 - -4.2857029475271702e-003 - 1.0002230405807495 - <_> - - <_> - - - - <_>2 0 6 5 -1. - <_>5 0 3 5 2. - 0 - -2.5600788649171591e-004 - 0.1321841031312943 - -0.1475474983453751 - <_> - - <_> - - - - <_>6 5 3 21 -1. - <_>7 5 1 21 3. - 0 - 0.0345324687659740 - -0.0478740595281124 - 0.2770858108997345 - <_> - - <_> - - - - <_>1 0 6 24 -1. - <_>1 0 3 12 2. - <_>4 12 3 12 2. - 0 - 0.1097825020551682 - -0.0216063000261784 - 0.8505910038948059 - <_> - - <_> - - - - <_>8 18 4 6 -1. - <_>9 19 2 6 2. - 1 - 0.0367177687585354 - 0.0162764303386211 - -0.8900070786476135 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -0.0612067282199860 - 0.5483801960945129 - -0.0316251218318939 - <_> - - <_> - - - - <_>5 24 9 4 -1. - <_>8 24 3 4 3. - 0 - 2.9046889394521713e-003 - 0.0414838008582592 - -0.0860545337200165 - <_> - - <_> - - - - <_>0 20 8 6 -1. - <_>2 20 4 6 2. - 0 - 0.0690031796693802 - -0.0265528801828623 - 0.6064736843109131 - <_> - - <_> - - - - <_>7 22 6 6 -1. - <_>9 22 2 6 3. - 0 - 7.0049421628937125e-004 - -0.1993429958820343 - 0.0754432007670403 - <_> - - <_> - - - - <_>1 22 6 6 -1. - <_>3 22 2 6 3. - 0 - 0.0348732396960258 - 0.0390368700027466 - -0.4225127995014191 - -30.8383007049560550 - 26 - -1 - <_> - - - <_> - - <_> - - - - <_>1 15 6 11 -1. - <_>3 15 2 11 3. - 0 - 0.0544666089117527 - -0.1318282037973404 - 0.2766044139862061 - <_> - - <_> - - - - <_>4 6 6 4 -1. - <_>4 8 6 2 2. - 0 - -0.0218566507101059 - 0.2547551095485687 - -0.0840456113219261 - <_> - - <_> - - - - <_>0 16 4 11 -1. - <_>2 16 2 11 2. - 0 - 6.6198781132698059e-003 - 0.0714893937110901 - -0.2630408108234406 - <_> - - <_> - - - - <_>8 16 6 6 -1. - <_>10 16 2 6 3. - 0 - 8.8211596012115479e-003 - -0.1339671015739441 - 0.1422293037176132 - <_> - - <_> - - - - <_>0 16 12 12 -1. - <_>4 20 4 4 9. - 0 - -0.2325122952461243 - -0.3462874889373779 - 0.0567674785852432 - <_> - - <_> - - - - <_>8 10 6 18 -1. - <_>8 16 6 6 3. - 0 - 0.2847234904766083 - 8.6089121177792549e-003 - -1.0012650489807129 - <_> - - <_> - - - - <_>0 12 5 16 -1. - <_>0 20 5 8 2. - 0 - 0.0423035211861134 - -0.0916377529501915 - 0.1909047067165375 - <_> - - <_> - - - - <_>11 12 3 16 -1. - <_>11 16 3 8 2. - 0 - 0.0497819818556309 - 0.0297099892050028 - -0.3596186935901642 - <_> - - <_> - - - - <_>0 13 14 12 -1. - <_>0 13 7 6 2. - <_>7 19 7 6 2. - 0 - -0.0489243008196354 - -0.3838717937469482 - 0.0551829896867275 - <_> - - <_> - - - - <_>3 12 10 16 -1. - <_>8 12 5 8 2. - <_>3 20 5 8 2. - 0 - -7.7399803558364511e-005 - -0.1275880038738251 - 0.0947935208678246 - <_> - - <_> - - - - <_>3 11 5 12 -1. - <_>3 17 5 6 2. - 0 - -0.0244552902877331 - 0.4691182971000671 - -0.0517820715904236 - <_> - - <_> - - - - <_>6 0 6 18 -1. - <_>8 6 2 6 9. - 0 - 0.0252108201384544 - 0.0440350882709026 - -0.1765304952859879 - <_> - - <_> - - - - <_>6 4 2 14 -1. - <_>6 11 2 7 2. - 0 - -0.0475709103047848 - -0.5333272218704224 - 0.0466939099133015 - <_> - - <_> - - - - <_>3 15 8 11 -1. - <_>5 15 4 11 2. - 0 - -0.1404698044061661 - 0.3279846012592316 - -0.0656077191233635 - <_> - - <_> - - - - <_>3 2 8 11 -1. - <_>5 2 4 11 2. - 0 - -0.1093242987990379 - -0.5927674770355225 - 0.0305432491004467 - <_> - - <_> - - - - <_>1 4 12 5 -1. - <_>5 4 4 5 3. - 0 - -0.0985674709081650 - 0.3675389885902405 - -0.0665684267878532 - <_> - - <_> - - - - <_>1 3 8 25 -1. - <_>5 3 4 25 2. - 0 - -0.0768610984086990 - -0.1372255980968475 - 0.1780606955289841 - <_> - - <_> - - - - <_>8 16 6 6 -1. - <_>10 16 2 6 3. - 0 - -0.0210353601723909 - 0.4363203942775726 - -0.0295247994363308 - <_> - - <_> - - - - <_>0 16 6 6 -1. - <_>2 16 2 6 3. - 0 - 1.3428479433059692e-003 - -0.2442066967487335 - 0.1196945980191231 - <_> - - <_> - - - - <_>7 13 3 14 -1. - <_>8 13 1 14 3. - 0 - -0.0344331711530685 - 0.2711027860641480 - -0.0759504362940788 - <_> - - <_> - - - - <_>2 8 4 12 -1. - <_>2 8 2 6 2. - <_>4 14 2 6 2. - 0 - 1.7944410210475326e-003 - -0.1799702048301697 - 0.1350875049829483 - <_> - - <_> - - - - <_>7 13 3 14 -1. - <_>8 13 1 14 3. - 0 - -0.0966442674398422 - -0.7668998837471008 - 0.0154358698055148 - <_> - - <_> - - - - <_>4 13 3 14 -1. - <_>5 13 1 14 3. - 0 - 2.5092919822782278e-003 - -0.1250617951154709 - 0.1881415992975235 - <_> - - <_> - - - - <_>5 3 9 6 -1. - <_>5 5 9 2 3. - 0 - -2.2511319257318974e-003 - 0.0782688185572624 - -0.0726367533206940 - <_> - - <_> - - - - <_>3 8 6 4 -1. - <_>3 10 6 2 2. - 0 - -7.4670952017186210e-006 - 0.0769332274794579 - -0.2614870965480804 - <_> - - <_> - - - - <_>11 3 3 12 -1. - <_>11 7 3 4 3. - 0 - 0.0265739597380161 - 0.0225346796214581 - -0.1629942953586578 - <_> - - <_> - - - - <_>0 8 8 3 -1. - <_>4 8 4 3 2. - 0 - 0.0170864704996347 - -0.0582328289747238 - 0.3609594106674194 - <_> - - <_> - - - - <_>1 13 12 8 -1. - <_>7 13 6 4 2. - <_>1 17 6 4 2. - 0 - 3.0147018842399120e-003 - 0.1281758993864059 - -0.1823015958070755 - <_> - - <_> - - - - <_>2 18 10 10 -1. - <_>7 18 5 10 2. - 0 - 9.4206426292657852e-003 - 0.0898257866501808 - -0.2687729895114899 - <_> - - <_> - - - - <_>5 8 4 6 -1. - <_>5 8 2 6 2. - 0 - 7.5143040157854557e-004 - 0.0882954075932503 - -0.2330484986305237 - <_> - - <_> - - - - <_>0 0 13 3 -1. - <_>0 1 13 1 3. - 0 - -0.0106879696249962 - 0.3061277866363525 - -0.0657603666186333 - <_> - - <_> - - - - <_>8 1 6 8 -1. - <_>11 1 3 4 2. - <_>8 5 3 4 2. - 0 - 0.0750016868114471 - 4.3955240398645401e-003 - -0.7509499192237854 - <_> - - <_> - - - - <_>0 1 6 8 -1. - <_>0 1 3 4 2. - <_>3 5 3 4 2. - 0 - 0.0508490204811096 - 0.0205245595425367 - -0.8340644240379334 - <_> - - <_> - - - - <_>7 18 2 7 -1. - <_>7 18 1 7 2. - 1 - 0.0235556308180094 - 3.6320169456303120e-003 - -0.8832278251647949 - <_> - - <_> - - - - <_>7 18 7 2 -1. - <_>7 18 7 1 2. - 1 - -0.0168274808675051 - -0.6569777131080627 - 0.0231386590749025 - <_> - - <_> - - - - <_>4 22 9 4 -1. - <_>7 22 3 4 3. - 0 - 0.0199773497879505 - -0.0238473303616047 - 0.3263647854328156 - <_> - - <_> - - - - <_>0 4 5 6 -1. - <_>0 7 5 3 2. - 0 - 0.0313975289463997 - -0.0363436117768288 - 0.4479264020919800 - <_> - - <_> - - - - <_>11 3 3 12 -1. - <_>11 7 3 4 3. - 0 - -0.0932827591896057 - -0.5294207930564880 - 6.3824458047747612e-003 - <_> - - <_> - - - - <_>0 3 3 12 -1. - <_>0 7 3 4 3. - 0 - -7.7012612018734217e-004 - 0.1542045027017593 - -0.1575141996145248 - <_> - - <_> - - - - <_>5 0 6 8 -1. - <_>8 0 3 4 2. - <_>5 4 3 4 2. - 0 - 0.0468914918601513 - 0.0118022998794913 - -0.7309272885322571 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -3.4607138950377703e-003 - 0.1156596019864082 - -0.1756841987371445 - <_> - - <_> - - - - <_>8 3 2 12 -1. - <_>8 3 1 12 2. - 0 - -0.0334934182465076 - -0.6804947257041931 - 5.1433579064905643e-003 - <_> - - <_> - - - - <_>0 6 9 8 -1. - <_>0 8 9 4 2. - 0 - -0.0557939186692238 - -0.5390889048576355 - 0.0320088304579258 - <_> - - <_> - - - - <_>4 2 6 4 -1. - <_>4 4 6 2 2. - 0 - 5.1339478231966496e-003 - -0.0661146268248558 - 0.3176003098487854 - <_> - - <_> - - - - <_>1 18 4 10 -1. - <_>3 18 2 10 2. - 0 - 3.0386429280042648e-003 - 0.0814627185463905 - -0.2429192066192627 - <_> - - <_> - - - - <_>9 18 4 6 -1. - <_>9 18 2 6 2. - 0 - -3.1149981077760458e-004 - 0.0467233918607235 - -0.0845426768064499 - <_> - - <_> - - - - <_>1 2 12 3 -1. - <_>1 3 12 1 3. - 0 - 1.8326110439375043e-003 - -0.1283030062913895 - 0.1512715071439743 - <_> - - <_> - - - - <_>9 18 4 6 -1. - <_>9 18 2 6 2. - 0 - -0.0258788801729679 - -0.2116069942712784 - 0.0298112593591213 - <_> - - <_> - - - - <_>0 2 14 3 -1. - <_>0 3 14 1 3. - 0 - -1.3985199620947242e-003 - 0.1980108022689819 - -0.1036868989467621 - <_> - - <_> - - - - <_>9 19 4 6 -1. - <_>9 19 2 6 2. - 0 - 2.4663188960403204e-003 - 0.0245548691600561 - -0.1083042994141579 - <_> - - <_> - - - - <_>1 19 4 6 -1. - <_>3 19 2 6 2. - 0 - -1.3155230553820729e-003 - -0.2198446989059448 - 0.0939659774303436 - <_> - - <_> - - - - <_>8 7 3 15 -1. - <_>8 12 3 5 3. - 0 - -0.1056244000792503 - -0.7974779009819031 - 8.9689819142222404e-003 - <_> - - <_> - - - - <_>7 20 4 4 -1. - <_>6 21 4 2 2. - 1 - -3.0508160125464201e-003 - 0.1326649039983749 - -0.1373468041419983 - <_> - - <_> - - - - <_>9 3 4 6 -1. - <_>9 3 2 6 2. - 0 - 0.0298572797328234 - 9.6069881692528725e-003 - -0.3011654019355774 - <_> - - <_> - - - - <_>1 3 4 6 -1. - <_>3 3 2 6 2. - 0 - 0.0309721194207668 - 0.0300913508981466 - -0.5727983117103577 - <_> - - <_> - - - - <_>8 7 3 15 -1. - <_>8 12 3 5 3. - 0 - 0.1077274978160858 - -1.1804240057244897e-003 - -0.9998757839202881 - <_> - - <_> - - - - <_>3 7 3 15 -1. - <_>3 12 3 5 3. - 0 - -0.0515018813312054 - 0.2718138098716736 - -0.0681615024805069 - <_> - - <_> - - - - <_>9 12 2 12 -1. - <_>9 18 2 6 2. - 0 - -0.0252882894128561 - 0.4506731033325195 - -0.0165209807455540 - <_> - - <_> - - - - <_>3 12 2 12 -1. - <_>3 18 2 6 2. - 0 - -4.2859618552029133e-003 - 0.3721388876438141 - -0.0497617386281490 - <_> - - <_> - - - - <_>8 0 5 6 -1. - <_>8 3 5 3 2. - 0 - -0.0231944601982832 - -0.2069765031337738 - 0.0410712100565434 - <_> - - <_> - - - - <_>1 0 5 6 -1. - <_>1 3 5 3 2. - 0 - 0.0168785303831100 - 0.0564081296324730 - -0.3761448860168457 - <_> - - <_> - - - - <_>3 6 8 8 -1. - <_>3 8 8 4 2. - 0 - -0.0296011697500944 - 0.2720799148082733 - -0.0730900764465332 - <_> - - <_> - - - - <_>2 4 6 14 -1. - <_>4 4 2 14 3. - 0 - -0.1079726964235306 - -0.4919354021549225 - 0.0361185707151890 - <_> - - <_> - - - - <_>5 10 7 16 -1. - <_>5 18 7 8 2. - 0 - 0.2531785070896149 - 8.8794529438018799e-003 - -0.3474639058113098 - <_> - - <_> - - - - <_>4 10 6 10 -1. - <_>6 10 2 10 3. - 0 - -0.0759278684854507 - -0.5256810188293457 - 0.0300291497260332 - <_> - - <_> - - - - <_>5 10 4 12 -1. - <_>5 13 4 6 2. - 0 - 3.5496079362928867e-003 - 0.0618173182010651 - -0.2345004975795746 - <_> - - <_> - - - - <_>2 0 6 18 -1. - <_>4 6 2 6 9. - 0 - -0.0104194702580571 - 0.0954701825976372 - -0.1976493000984192 - <_> - - <_> - - - - <_>1 11 12 4 -1. - <_>1 12 12 2 2. - 0 - -0.0162421204149723 - 0.3585678040981293 - -0.0525104999542236 - <_> - - <_> - - - - <_>7 15 5 2 -1. - <_>7 15 5 1 2. - 1 - -1.4503370039165020e-003 - -0.1800349056720734 - 0.0952083319425583 - <_> - - <_> - - - - <_>4 24 6 4 -1. - <_>4 24 3 4 2. - 0 - 0.0196962095797062 - 0.0375376604497433 - -0.4806590974330902 - <_> - - <_> - - - - <_>5 18 5 4 -1. - <_>4 19 5 2 2. - 1 - 3.4964820370078087e-003 - -0.0971873775124550 - 0.1756905019283295 - -30.6401996612548830 - 27 - -1 - <_> - - - <_> - - <_> - - - - <_>3 1 6 25 -1. - <_>6 1 3 25 2. - 0 - -0.1401122957468033 - 0.3578777015209198 - -0.1212553009390831 - <_> - - <_> - - - - <_>6 13 2 12 -1. - <_>6 13 1 12 2. - 0 - -0.0100089497864246 - 0.2633092999458313 - -0.0890080183744431 - <_> - - <_> - - - - <_>6 4 2 13 -1. - <_>7 4 1 13 2. - 0 - -0.0113941803574562 - 0.4322882890701294 - -0.0501591786742210 - <_> - - <_> - - - - <_>8 2 6 19 -1. - <_>10 2 2 19 3. - 0 - 0.2313435971736908 - 6.3841762021183968e-003 - -0.7029209733009338 - <_> - - <_> - - - - <_>0 2 6 19 -1. - <_>2 2 2 19 3. - 0 - 0.1264661997556686 - 0.0427680015563965 - -0.4391900002956390 - <_> - - <_> - - - - <_>9 1 4 13 -1. - <_>10 1 2 13 2. - 0 - 0.0466162487864494 - 0.0192505903542042 - 0.5449979901313782 - <_> - - <_> - - - - <_>1 1 4 13 -1. - <_>2 1 2 13 2. - 0 - 0.0220378004014492 - -0.0851087495684624 - 0.3384878039360046 - <_> - - <_> - - - - <_>3 3 8 3 -1. - <_>3 3 4 3 2. - 0 - 0.0313455611467361 - 0.0226909406483173 - -0.5167118906974793 - <_> - - <_> - - - - <_>2 5 10 18 -1. - <_>2 11 10 6 3. - 0 - -0.2114063948392868 - 0.2941249012947083 - -0.0464795604348183 - <_> - - <_> - - - - <_>3 8 9 12 -1. - <_>6 12 3 4 9. - 0 - -0.0663341134786606 - -0.1344404965639114 - 0.1284202039241791 - <_> - - <_> - - - - <_>4 4 6 4 -1. - <_>4 6 6 2 2. - 0 - 0.0407386682927608 - 0.0234058108180761 - -0.8023356199264526 - <_> - - <_> - - - - <_>4 8 10 8 -1. - <_>9 8 5 4 2. - <_>4 12 5 4 2. - 0 - -0.0414708703756332 - 0.1462056934833527 - -0.0195902101695538 - <_> - - <_> - - - - <_>2 8 6 6 -1. - <_>4 8 2 6 3. - 0 - 0.0184567905962467 - -0.0361854694783688 - 0.5123826861381531 - <_> - - <_> - - - - <_>4 10 6 10 -1. - <_>7 10 3 5 2. - <_>4 15 3 5 2. - 0 - 3.7538509350270033e-003 - -0.1558776050806046 - 0.1031239032745361 - <_> - - <_> - - - - <_>3 9 8 14 -1. - <_>3 9 4 7 2. - <_>7 16 4 7 2. - 0 - -2.8798980638384819e-003 - -0.1222577020525932 - 0.1755176931619644 - <_> - - <_> - - - - <_>4 7 6 20 -1. - <_>7 7 3 10 2. - <_>4 17 3 10 2. - 0 - -0.0327623412013054 - -0.4716975986957550 - 0.0303803198039532 - <_> - - <_> - - - - <_>3 0 6 8 -1. - <_>3 0 3 4 2. - <_>6 4 3 4 2. - 0 - -0.0390222109854221 - 0.3510676026344299 - -0.0661192610859871 - <_> - - <_> - - - - <_>7 5 4 6 -1. - <_>7 5 2 6 2. - 0 - -0.0446747988462448 - -0.3995831012725830 - 0.0210663899779320 - <_> - - <_> - - - - <_>3 7 8 8 -1. - <_>3 7 4 4 2. - <_>7 11 4 4 2. - 0 - 5.3343027830123901e-003 - 0.0791373774409294 - -0.2117677927017212 - <_> - - <_> - - - - <_>5 9 6 4 -1. - <_>5 11 6 2 2. - 0 - 0.0155211696401238 - 0.0344389304518700 - -0.5720204710960388 - <_> - - <_> - - - - <_>0 9 4 9 -1. - <_>0 12 4 3 3. - 0 - -8.0842437455430627e-004 - 0.1195174977183342 - -0.1432583034038544 - <_> - - <_> - - - - <_>8 6 4 12 -1. - <_>8 10 4 4 3. - 0 - 0.0277547407895327 - -0.0324368886649609 - 0.3074922859668732 - <_> - - <_> - - - - <_>1 7 10 6 -1. - <_>1 9 10 2 3. - 0 - -3.4786630421876907e-003 - 0.1568875014781952 - -0.1564995050430298 - <_> - - <_> - - - - <_>0 7 14 12 -1. - <_>0 10 14 6 2. - 0 - -0.0278409793972969 - -0.1293258070945740 - 0.1540801972150803 - <_> - - <_> - - - - <_>3 9 6 4 -1. - <_>3 11 6 2 2. - 0 - -2.0033390319440514e-004 - 0.1059113964438438 - -0.2382947951555252 - <_> - - <_> - - - - <_>8 1 4 8 -1. - <_>8 1 2 8 2. - 1 - 0.0633525326848030 - -0.0350577011704445 - 0.1111909002065659 - <_> - - <_> - - - - <_>2 6 4 12 -1. - <_>2 10 4 4 3. - 0 - -0.1063425987958908 - -0.6793817877769470 - 0.0274659004062414 - <_> - - <_> - - - - <_>2 16 12 4 -1. - <_>8 16 6 2 2. - <_>2 18 6 2 2. - 0 - 1.9035820150747895e-004 - -0.1190816015005112 - 0.1133468970656395 - <_> - - <_> - - - - <_>7 20 4 4 -1. - <_>6 21 4 2 2. - 1 - -0.0135642401874065 - 0.2750580012798309 - -0.0683159828186035 - <_> - - <_> - - - - <_>9 16 2 12 -1. - <_>9 16 1 12 2. - 0 - 0.0210962295532227 - -0.0109879495576024 - 0.3993543088436127 - <_> - - <_> - - - - <_>5 18 5 4 -1. - <_>4 19 5 2 2. - 1 - -2.4880920536816120e-003 - -0.2184953987598419 - 0.0892938077449799 - <_> - - <_> - - - - <_>8 1 4 8 -1. - <_>8 1 2 8 2. - 1 - 0.0123706702142954 - -0.0956454500555992 - 0.0566339604556561 - <_> - - <_> - - - - <_>2 6 9 7 -1. - <_>5 6 3 7 3. - 0 - -0.1203635036945343 - -0.5317410230636597 - 0.0357750803232193 - <_> - - <_> - - - - <_>3 6 8 12 -1. - <_>3 9 8 6 2. - 0 - -0.0671380609273911 - 0.2145684063434601 - -0.0873891264200211 - <_> - - <_> - - - - <_>0 0 9 21 -1. - <_>3 7 3 7 9. - 0 - -0.1216192021965981 - -0.1816080957651138 - 0.1457355022430420 - <_> - - <_> - - - - <_>8 1 4 8 -1. - <_>8 1 2 8 2. - 1 - 0.0204794593155384 - -0.0557153411209583 - 0.0611892193555832 - <_> - - <_> - - - - <_>2 1 5 18 -1. - <_>2 10 5 9 2. - 0 - 2.1847079042345285e-003 - -0.0952582135796547 - 0.2059109061956406 - <_> - - <_> - - - - <_>8 1 6 7 -1. - <_>8 1 3 7 2. - 1 - 4.0952740237116814e-003 - -0.1186736002564430 - 0.0466964617371559 - <_> - - <_> - - - - <_>0 3 2 16 -1. - <_>1 3 1 16 2. - 0 - -3.5035728942602873e-003 - 0.2332196980714798 - -0.0755375996232033 - <_> - - <_> - - - - <_>9 18 4 8 -1. - <_>9 18 2 8 2. - 0 - -0.0104670198634267 - -0.1244800984859467 - 0.0505952611565590 - <_> - - <_> - - - - <_>0 18 12 9 -1. - <_>3 18 6 9 2. - 0 - -0.0150208296254277 - 0.0919919088482857 - -0.2207739949226379 - <_> - - <_> - - - - <_>1 2 12 3 -1. - <_>5 2 4 3 3. - 0 - 0.0444990508258343 - 0.0341018997132778 - -0.5342277288436890 - <_> - - <_> - - - - <_>6 1 7 6 -1. - <_>6 1 7 3 2. - 1 - 8.1879837671294808e-004 - -0.1919344067573547 - 0.1017773002386093 - <_> - - <_> - - - - <_>6 9 3 13 -1. - <_>7 9 1 13 3. - 0 - -0.0297935493290424 - 0.4144274890422821 - -0.0202981494367123 - <_> - - <_> - - - - <_>6 1 6 6 -1. - <_>6 1 6 3 2. - 1 - 0.0166143290698528 - 0.1045709997415543 - -0.1835236996412277 - <_> - - <_> - - - - <_>6 4 4 11 -1. - <_>6 4 2 11 2. - 0 - -0.0225107893347740 - 0.1891123056411743 - -0.0338670387864113 - <_> - - <_> - - - - <_>4 4 4 11 -1. - <_>6 4 2 11 2. - 0 - 0.0204072501510382 - -0.0585243701934814 - 0.3596762120723724 - <_> - - <_> - - - - <_>8 1 4 8 -1. - <_>8 1 2 8 2. - 1 - 3.0294319149106741e-003 - -0.1403163969516754 - 0.0548497810959816 - <_> - - <_> - - - - <_>1 20 4 8 -1. - <_>3 20 2 8 2. - 0 - 5.8518280275166035e-004 - 0.0955235883593559 - -0.1965035945177078 - <_> - - <_> - - - - <_>9 22 4 6 -1. - <_>9 22 2 6 2. - 0 - 0.0177563391625881 - 0.0161958690732718 - -0.5853430032730103 - <_> - - <_> - - - - <_>1 22 4 6 -1. - <_>3 22 2 6 2. - 0 - -3.2687620259821415e-003 - -0.3080259859561920 - 0.0655681118369102 - <_> - - <_> - - - - <_>9 0 3 22 -1. - <_>10 0 1 22 3. - 0 - 3.4140530042350292e-003 - -0.0825024172663689 - 0.0998902693390846 - <_> - - <_> - - - - <_>3 21 8 6 -1. - <_>5 21 4 6 2. - 0 - 6.3527207821607590e-003 - -0.0351637788116932 - 0.5423762202262878 - <_> - - <_> - - - - <_>6 11 3 15 -1. - <_>7 11 1 15 3. - 0 - 2.0045090932399035e-003 - -0.1008172035217285 - 0.0969350412487984 - <_> - - <_> - - - - <_>6 1 8 4 -1. - <_>6 1 8 2 2. - 1 - 6.9825910031795502e-003 - -0.1601238995790482 - 0.1134850978851318 - <_> - - <_> - - - - <_>2 16 12 4 -1. - <_>8 16 6 2 2. - <_>2 18 6 2 2. - 0 - 0.0459630116820335 - 6.1929170042276382e-003 - -0.8855175971984863 - <_> - - <_> - - - - <_>0 16 12 4 -1. - <_>0 16 6 2 2. - <_>6 18 6 2 2. - 0 - 0.0370623916387558 - 0.0201282501220703 - -0.8093351125717163 - <_> - - <_> - - - - <_>6 10 3 12 -1. - <_>6 14 3 4 3. - 0 - -0.0415228083729744 - 0.2059791982173920 - -0.0319279395043850 - <_> - - <_> - - - - <_>4 13 6 14 -1. - <_>4 20 6 7 2. - 0 - 0.1652186065912247 - 0.0255248397588730 - -0.6295161247253418 - <_> - - <_> - - - - <_>3 9 9 15 -1. - <_>6 14 3 5 9. - 0 - -0.2318888008594513 - 0.1395397931337357 - -0.0616117902100086 - <_> - - <_> - - - - <_>4 10 9 4 -1. - <_>7 13 3 4 3. - 1 - -0.0281500704586506 - -0.1367637068033218 - 0.1167756989598274 - <_> - - <_> - - - - <_>3 7 8 7 -1. - <_>3 7 4 7 2. - 0 - 2.0499450620263815e-003 - -0.1585503965616226 - 0.1351170986890793 - <_> - - <_> - - - - <_>4 9 4 6 -1. - <_>6 9 2 6 2. - 0 - 1.2636490282602608e-004 - -0.1502434015274048 - 0.1373908966779709 - <_> - - <_> - - - - <_>4 9 6 11 -1. - <_>6 9 2 11 3. - 0 - 2.4286638945341110e-003 - 0.0792474597692490 - -0.2595944106578827 - <_> - - <_> - - - - <_>1 11 4 12 -1. - <_>1 15 4 4 3. - 0 - -0.0218735896050930 - 0.3559050858020783 - -0.0618359185755253 - <_> - - <_> - - - - <_>9 0 2 12 -1. - <_>9 0 1 12 2. - 0 - -5.8419788256287575e-003 - -0.1021912023425102 - 0.0399971306324005 - <_> - - <_> - - - - <_>2 4 4 16 -1. - <_>2 4 2 8 2. - <_>4 12 2 8 2. - 0 - -2.6236099656671286e-003 - 0.1212999001145363 - -0.1486115008592606 - <_> - - <_> - - - - <_>5 8 5 14 -1. - <_>5 15 5 7 2. - 0 - 0.1459041982889175 - -0.0368846505880356 - 0.4148491919040680 - <_> - - <_> - - - - <_>2 0 3 22 -1. - <_>3 0 1 22 3. - 0 - -8.6298510432243347e-003 - 0.2552245855331421 - -0.0698716267943382 - <_> - - <_> - - - - <_>6 25 8 3 -1. - <_>6 25 4 3 2. - 0 - -0.0391534715890884 - -0.8553311824798584 - 0.0146392397582531 - <_> - - <_> - - - - <_>1 6 8 22 -1. - <_>1 17 8 11 2. - 0 - 0.3848269879817963 - 0.0173611193895340 - -0.7979055047035217 - <_> - - <_> - - - - <_>4 15 6 8 -1. - <_>7 15 3 4 2. - <_>4 19 3 4 2. - 0 - -6.3598138513043523e-004 - 0.1151826977729797 - -0.1421640962362289 - <_> - - <_> - - - - <_>5 13 4 14 -1. - <_>5 13 2 7 2. - <_>7 20 2 7 2. - 0 - 5.9026381932199001e-003 - 0.0705236569046974 - -0.2303119003772736 - <_> - - <_> - - - - <_>2 16 10 12 -1. - <_>7 16 5 6 2. - <_>2 22 5 6 2. - 0 - -1.1841119703603908e-004 - 0.1040178984403610 - -0.1712667942047119 - <_> - - <_> - - - - <_>4 15 8 3 -1. - <_>4 15 4 3 2. - 1 - 0.0819626599550247 - 0.0277990996837616 - -0.5833172202110291 - <_> - - <_> - - - - <_>2 0 12 3 -1. - <_>2 1 12 1 3. - 0 - -7.9551688395440578e-004 - 0.1256852000951767 - -0.1031771972775459 - <_> - - <_> - - - - <_>0 5 9 22 -1. - <_>3 5 3 22 3. - 0 - -0.1558894068002701 - 0.6289020180702210 - -0.0251919794827700 - <_> - - <_> - - - - <_>4 9 6 4 -1. - <_>4 11 6 2 2. - 0 - -0.0134563101455569 - -0.3247169852256775 - 0.0554869212210178 - <_> - - <_> - - - - <_>4 14 6 2 -1. - <_>4 14 6 1 2. - 1 - -0.0215071998536587 - 0.2881917953491211 - -0.0611761398613453 - <_> - - <_> - - - - <_>8 12 6 4 -1. - <_>8 12 3 4 2. - 1 - -0.0190420690923929 - -0.0605529099702835 - 0.0896290615200996 - <_> - - <_> - - - - <_>5 16 8 4 -1. - <_>4 17 8 2 2. - 1 - -9.1205362696200609e-004 - 0.1238545998930931 - -0.1358487010002136 - <_> - - <_> - - - - <_>5 15 4 6 -1. - <_>5 15 2 6 2. - 0 - 0.0382026284933090 - 0.0192184206098318 - -0.8448883295059204 - <_> - - <_> - - - - <_>5 9 2 14 -1. - <_>5 16 2 7 2. - 0 - 0.0517873913049698 - -0.0548306591808796 - 0.3335298001766205 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>6 10 6 4 3. - 0 - -0.1386034935712814 - -0.2716459929943085 - 0.0106801996007562 - <_> - - <_> - - - - <_>1 20 12 6 -1. - <_>1 20 6 3 2. - <_>7 23 6 3 2. - 0 - -0.0393259599804878 - -0.7604343295097351 - 0.0193206705152988 - <_> - - <_> - - - - <_>4 8 6 4 -1. - <_>4 10 6 2 2. - 0 - -1.1157010449096560e-003 - 0.0694785192608833 - -0.2032717019319534 - <_> - - <_> - - - - <_>1 6 9 6 -1. - <_>1 8 9 2 3. - 0 - -4.2068599723279476e-003 - 0.1600721925497055 - -0.1098235026001930 - <_> - - <_> - - - - <_>5 6 6 4 -1. - <_>5 8 6 2 2. - 0 - 3.7919029127806425e-003 - -0.0838006436824799 - 0.2515478134155273 - <_> - - <_> - - - - <_>3 3 8 6 -1. - <_>3 3 4 3 2. - <_>7 6 4 3 2. - 0 - -0.0314305908977985 - -0.5059031248092651 - 0.0376673787832260 - <_> - - <_> - - - - <_>6 23 6 5 -1. - <_>6 23 3 5 2. - 0 - -4.3412651866674423e-003 - 0.0585919693112373 - -0.1727126985788345 - <_> - - <_> - - - - <_>0 3 12 4 -1. - <_>0 3 6 2 2. - <_>6 5 6 2 2. - 0 - -5.6401407346129417e-004 - 0.1013183966279030 - -0.1673755049705505 - <_> - - <_> - - - - <_>7 4 6 18 -1. - <_>7 10 6 6 3. - 0 - -0.0171399600803852 - 0.0496194511651993 - -0.1181275025010109 - <_> - - <_> - - - - <_>6 12 4 6 -1. - <_>6 12 4 3 2. - 1 - -0.0238684900105000 - -0.0958755090832710 - 0.1840431988239288 - <_> - - <_> - - - - <_>2 15 12 6 -1. - <_>5 15 6 6 2. - 0 - -0.0874088108539581 - 0.1414463073015213 - -0.0577138289809227 - <_> - - <_> - - - - <_>0 5 4 12 -1. - <_>0 5 2 6 2. - <_>2 11 2 6 2. - 0 - -0.0391700901091099 - -0.6103624105453491 - 0.0223081093281507 - <_> - - <_> - - - - <_>10 4 4 16 -1. - <_>12 4 2 8 2. - <_>10 12 2 8 2. - 0 - 0.0533615797758102 - 0.0150276403874159 - -0.6540914177894592 - -30.8048992156982420 - 28 - -1 - diff --git a/data/haarcascades/haarcascade_lefteye_2splits.xml b/data/haarcascades/haarcascade_lefteye_2splits.xml deleted file mode 100644 index f005938..0000000 --- a/data/haarcascades/haarcascade_lefteye_2splits.xml +++ /dev/null @@ -1,9803 +0,0 @@ - - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_> - 8 12 3 8 -1. - <_> - 8 16 3 4 2. - 0 - 0.0273259896785021 - -0.9060062170028687 - 1 - <_> - - - - <_> - 5 11 8 9 -1. - <_> - 7 11 4 9 2. - 0 - -7.0568458177149296e-03 - 0.9338570833206177 - -0.4585995972156525 - <_> - - <_> - - - - <_> - 8 7 11 12 -1. - <_> - 8 11 11 4 3. - 0 - -0.1253869980573654 - 0.7246372103691101 - 1 - <_> - - - - <_> - 1 0 7 8 -1. - <_> - 1 4 7 4 2. - 0 - -0.1148729994893074 - 0.5303416848182678 - -0.8322122097015381 - <_> - - <_> - - - - <_> - 9 7 6 6 -1. - <_> - 7 9 6 2 3. - 1 - -0.0583099387586117 - 0.6540889143943787 - 1 - <_> - - - - <_> - 0 0 7 4 -1. - <_> - 0 2 7 2 2. - 0 - -0.0176843702793121 - 0.2948287129402161 - -0.7480958104133606 - <_> - - <_> - - - - <_> - 16 13 4 4 -1. - <_> - 18 13 2 4 2. - 0 - 3.5937170032411814e-03 - -0.5030391812324524 - 1 - <_> - - - - <_> - 17 15 2 3 -1. - <_> - 17 15 1 3 2. - 1 - -1.3436110457405448e-03 - 0.6599534153938293 - -0.5574085712432861 - <_> - - <_> - - - - <_> - 0 13 6 2 -1. - <_> - 2 13 2 2 3. - 0 - -2.1795940119773149e-03 - 1 - -0.4201635122299194 - <_> - - - - <_> - 5 0 6 6 -1. - <_> - 7 0 2 6 3. - 0 - 0.0115148704499006 - 0.5969433188438416 - -0.8050804734230042 - -2.3924100399017334 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 7 9 12 -1. - <_> - 8 11 3 4 9. - 0 - -0.2248556017875671 - 1 - -0.8136320114135742 - <_> - - - - <_> - 5 6 4 10 -1. - <_> - 5 6 2 5 2. - <_> - 7 11 2 5 2. - 0 - -9.6008004620671272e-03 - 0.9086313843727112 - -0.3220897018909454 - <_> - - <_> - - - - <_> - 8 12 11 8 -1. - <_> - 8 16 11 4 2. - 0 - 0.0742191672325134 - -0.7532945275306702 - 1 - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - -5.3165741264820099e-03 - 0.8633949756622314 - -0.0334635712206364 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 3 0 3 6 2. - 0 - -2.1913449745625257e-03 - 1 - -0.5572034716606140 - <_> - - - - <_> - 14 14 6 6 -1. - <_> - 14 17 6 3 2. - 0 - 0.0118009597063065 - -0.3235968053340912 - 0.6416382193565369 - <_> - - <_> - - - - <_> - 5 13 9 7 -1. - <_> - 8 13 3 7 3. - 0 - -7.6179709285497665e-03 - 1 - -0.5316786766052246 - <_> - - - - <_> - 6 17 6 3 -1. - <_> - 8 17 2 3 3. - 0 - -9.0587511658668518e-03 - -0.7361145019531250 - 0.5566077232360840 - <_> - - <_> - - - - <_> - 0 0 4 4 -1. - <_> - 0 2 4 2 2. - 0 - -4.9959779717028141e-03 - 1 - -0.4147691130638123 - <_> - - - - <_> - 1 0 3 3 -1. - <_> - 2 1 1 1 9. - 0 - 8.0803930759429932e-03 - 0.5927835702896118 - -0.6738492250442505 - <_> - - <_> - - - - <_> - 3 18 6 2 -1. - <_> - 3 19 6 1 2. - 0 - 1.9909010734409094e-03 - -0.4214592874050140 - 1 - <_> - - - - <_> - 7 18 4 2 -1. - <_> - 8 18 2 2 2. - 0 - 1.6845749923959374e-03 - 0.5467922091484070 - -0.7509945034980774 - <_> - - <_> - - - - <_> - 6 10 12 2 -1. - <_> - 6 11 12 1 2. - 0 - -5.0781872123479843e-03 - 1 - -0.3989954888820648 - <_> - - - - <_> - 15 8 3 1 -1. - <_> - 16 9 1 1 3. - 1 - 2.6645609177649021e-03 - 0.5894060134887695 - -0.4677804112434387 - -2.6498730182647705 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 7 9 12 -1. - <_> - 8 11 3 4 9. - 0 - -0.2530143857002258 - 1 - -0.7540258765220642 - <_> - - - - <_> - 16 13 1 6 -1. - <_> - 16 16 1 3 2. - 0 - 2.9663778841495514e-03 - -0.3527964949607849 - 0.8799229860305786 - <_> - - <_> - - - - <_> - 9 7 5 6 -1. - <_> - 7 9 5 2 3. - 1 - -0.0471276491880417 - 1 - -0.5223489999771118 - <_> - - - - <_> - 16 12 4 6 -1. - <_> - 18 12 2 6 2. - 0 - 1.9500750349834561e-03 - -0.3037990927696228 - 0.7520437836647034 - <_> - - <_> - - - - <_> - 0 0 6 8 -1. - <_> - 0 4 6 4 2. - 0 - -0.0714810267090797 - 0.6584190130233765 - 1 - <_> - - - - <_> - 3 1 15 12 -1. - <_> - 3 5 15 4 3. - 0 - 0.2218973040580750 - -0.6090720295906067 - 0.5684216022491455 - <_> - - <_> - - - - <_> - 11 12 9 8 -1. - <_> - 11 16 9 4 2. - 0 - 0.0338428206741810 - -0.6431164741516113 - 1 - <_> - - - - <_> - 0 0 12 9 -1. - <_> - 4 0 4 9 3. - 0 - -5.1714561413973570e-04 - 0.5462036132812500 - -0.3998414874076843 - <_> - - <_> - - - - <_> - 0 12 6 4 -1. - <_> - 2 12 2 4 3. - 0 - -3.4458211157470942e-03 - 1 - -0.4563683867454529 - <_> - - - - <_> - 10 18 4 2 -1. - <_> - 11 18 2 2 2. - 0 - 2.4395729415118694e-03 - 0.4779818952083588 - -0.9124708771705627 - <_> - - <_> - - - - <_> - 5 2 3 3 -1. - <_> - 6 2 1 3 3. - 0 - 2.1385070867836475e-03 - 1 - -0.8361775875091553 - <_> - - - - <_> - 12 18 3 2 -1. - <_> - 13 18 1 2 3. - 0 - 1.8324409611523151e-03 - 0.3346279859542847 - -0.7500854730606079 - <_> - - <_> - - - - <_> - 0 0 2 8 -1. - <_> - 1 0 1 8 2. - 0 - 1.1167610064148903e-03 - 1 - -0.6908379793167114 - <_> - - - - <_> - 5 18 4 2 -1. - <_> - 5 19 4 1 2. - 0 - 9.9106997367925942e-05 - -0.3456133008003235 - 0.4118317961692810 - <_> - - <_> - - - - <_> - 14 11 6 6 -1. - <_> - 17 11 3 6 2. - 0 - 0.0154477702453732 - 1 - 0.3698019087314606 - <_> - - - - <_> - 6 12 8 4 -1. - <_> - 8 12 4 4 2. - 0 - -0.0322449393570423 - 0.6111283898353577 - -0.5568534135818481 - -2.3828399181365967 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 6 4 9 -1. - <_> - 9 9 4 3 3. - 1 - -0.1225112974643707 - 1 - -0.6702662706375122 - <_> - - - - <_> - 11 9 4 7 -1. - <_> - 12 10 2 7 2. - 1 - -0.0142306098714471 - 0.8780239224433899 - -0.1878418028354645 - <_> - - <_> - - - - <_> - 5 8 4 8 -1. - <_> - 5 8 2 4 2. - <_> - 7 12 2 4 2. - 0 - -5.9833219274878502e-03 - 1 - -0.5812284946441650 - <_> - - - - <_> - 8 12 11 8 -1. - <_> - 8 16 11 4 2. - 0 - 0.0770851373672485 - -0.5039535164833069 - 0.6738736033439636 - <_> - - <_> - - - - <_> - 3 0 14 6 -1. - <_> - 3 3 14 3 2. - 0 - -0.1108618974685669 - 0.6343203783035278 - 1 - <_> - - - - <_> - 7 1 6 12 -1. - <_> - 7 4 6 6 2. - 0 - 0.0946047604084015 - -0.4972639083862305 - 0.3878743946552277 - <_> - - <_> - - - - <_> - 0 18 7 2 -1. - <_> - 0 19 7 1 2. - 0 - 1.7696130089461803e-04 - -0.6393880248069763 - 1 - <_> - - - - <_> - 16 12 4 3 -1. - <_> - 18 12 2 3 2. - 0 - 2.0120320841670036e-03 - -0.3531391024589539 - 0.5153843760490417 - <_> - - <_> - - - - <_> - 0 0 4 8 -1. - <_> - 2 0 2 8 2. - 0 - -1.6102839726954699e-03 - 1 - -0.5191590189933777 - <_> - - - - <_> - 3 0 4 1 -1. - <_> - 5 0 2 1 2. - 0 - 1.6666069859638810e-03 - 0.4047819077968597 - -0.6949635744094849 - <_> - - <_> - - - - <_> - 3 13 2 2 -1. - <_> - 3 13 2 1 2. - 1 - -7.1480998303741217e-04 - 1 - -0.4894518852233887 - <_> - - - - <_> - 0 16 19 4 -1. - <_> - 0 18 19 2 2. - 0 - -4.7647571191191673e-03 - -0.5003775954246521 - 0.4079605937004089 - <_> - - <_> - - - - <_> - 7 13 8 2 -1. - <_> - 11 13 4 2 2. - 0 - 7.8659597784280777e-03 - -0.3363642990589142 - 1 - <_> - - - - <_> - 8 8 4 1 -1. - <_> - 9 8 2 1 2. - 0 - -1.2938310392200947e-03 - -0.6762138009071350 - 0.4701024889945984 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 3 1 2 2. - 0 - -3.6533139063976705e-04 - 1 - -0.4707160890102386 - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - 2.0565679296851158e-03 - 0.4132341146469116 - -0.5552641749382019 - <_> - - <_> - - - - <_> - 15 15 5 2 -1. - <_> - 15 16 5 1 2. - 0 - 7.8385717642959207e-05 - -0.5152115821838379 - 1 - <_> - - - - <_> - 7 18 3 2 -1. - <_> - 8 18 1 2 3. - 0 - 1.7511800397187471e-03 - 0.3341724872589111 - -0.7955815792083740 - -2.1312201023101807 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 13 7 3 8 -1. - <_> - 11 9 3 4 2. - 1 - -0.0646952390670776 - 1 - -0.6132640242576599 - <_> - - - - <_> - 15 12 2 8 -1. - <_> - 15 16 2 4 2. - 0 - 9.5212170854210854e-03 - -0.5483155846595764 - 0.7865244746208191 - <_> - - <_> - - - - <_> - 2 0 10 6 -1. - <_> - 2 3 10 3 2. - 0 - -0.0981097668409348 - 0.6911330819129944 - 1 - <_> - - - - <_> - 0 5 18 15 -1. - <_> - 6 10 6 5 9. - 0 - -0.8593845963478088 - 0.4536468088626862 - -0.5002614855766296 - <_> - - <_> - - - - <_> - 3 11 12 6 -1. - <_> - 7 13 4 2 9. - 0 - -0.0898361727595329 - 1 - -0.5292878150939941 - <_> - - - - <_> - 16 12 4 7 -1. - <_> - 18 12 2 7 2. - 0 - 2.6945930439978838e-03 - -0.3819977939128876 - 0.5782129764556885 - <_> - - <_> - - - - <_> - 8 18 4 2 -1. - <_> - 9 18 2 2 2. - 0 - 2.5973599404096603e-03 - 1 - -0.9192836880683899 - <_> - - - - <_> - 8 17 4 3 -1. - <_> - 9 17 2 3 2. - 0 - -3.0058110132813454e-03 - -0.8021379709243774 - 0.2925927937030792 - <_> - - <_> - - - - <_> - 0 12 6 6 -1. - <_> - 2 12 2 6 3. - 0 - -4.5496290549635887e-03 - 1 - -0.4367895126342773 - <_> - - - - <_> - 4 16 4 4 -1. - <_> - 5 16 2 4 2. - 0 - 4.7376728616654873e-03 - 0.4101088047027588 - -0.7269281148910522 - <_> - - <_> - - - - <_> - 3 0 4 6 -1. - <_> - 4 0 2 6 2. - 0 - 4.6190437860786915e-03 - 1 - -0.8489515185356140 - <_> - - - - <_> - 1 0 4 7 -1. - <_> - 2 0 2 7 2. - 0 - 4.5377281494438648e-03 - 0.3012467920780182 - -0.7030177116394043 - <_> - - <_> - - - - <_> - 2 0 8 3 -1. - <_> - 6 0 4 3 2. - 0 - -2.4952790699899197e-03 - 1 - -0.4678474962711334 - <_> - - - - <_> - 8 3 4 6 -1. - <_> - 9 3 2 6 2. - 0 - -5.1753767766058445e-03 - -0.7453035116195679 - 0.4001182019710541 - <_> - - <_> - - - - <_> - 10 10 3 2 -1. - <_> - 10 11 3 1 2. - 0 - -5.2049742080271244e-03 - 0.4866926968097687 - 1 - <_> - - - - <_> - 4 3 7 6 -1. - <_> - 4 6 7 3 2. - 0 - -0.0878920033574104 - 0.8349394798278809 - -0.3382771909236908 - <_> - - <_> - - - - <_> - 10 18 10 2 -1. - <_> - 15 18 5 2 2. - 0 - 6.9997250102460384e-03 - -0.2903988957405090 - 1 - <_> - - - - <_> - 9 13 6 1 -1. - <_> - 9 13 3 1 2. - 1 - -9.0990252792835236e-03 - 0.6231582164764404 - -0.3542473018169403 - -2.0176210403442383 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 8 4 6 -1. - <_> - 8 10 4 2 3. - 1 - -0.0557021014392376 - 1 - -0.6984158158302307 - <_> - - - - <_> - 14 12 6 8 -1. - <_> - 14 16 6 4 2. - 0 - 0.0340332910418510 - -0.3950918912887573 - 0.8031312823295593 - <_> - - <_> - - - - <_> - 10 8 6 4 -1. - <_> - 12 10 2 4 3. - 1 - -0.0461990609765053 - 1 - -0.4886038005352020 - <_> - - - - <_> - 0 12 6 3 -1. - <_> - 2 12 2 3 3. - 0 - -4.8061669804155827e-03 - 0.8077561259269714 - -0.0744908228516579 - <_> - - <_> - - - - <_> - 18 11 2 6 -1. - <_> - 19 11 1 6 2. - 0 - 1.8170489929616451e-03 - -0.3804352879524231 - 1 - <_> - - - - <_> - 0 0 1 10 -1. - <_> - 0 5 1 5 2. - 0 - -3.6162370815873146e-03 - 0.6045172214508057 - -0.2258224040269852 - <_> - - <_> - - - - <_> - 5 4 8 12 -1. - <_> - 7 4 4 12 2. - 0 - -0.0157069507986307 - 1 - -0.3757799863815308 - <_> - - - - <_> - 1 3 9 8 -1. - <_> - 4 3 3 8 3. - 0 - 4.3929950334131718e-03 - 0.5421422123908997 - -0.3738824129104614 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -1.0047219984699041e-04 - 1 - -0.4743340909481049 - <_> - - - - <_> - 12 8 6 12 -1. - <_> - 14 12 2 4 9. - 0 - -0.0864751189947128 - 0.5018631815910339 - -0.2113623023033142 - <_> - - <_> - - - - <_> - 4 2 14 6 -1. - <_> - 4 4 14 2 3. - 0 - -0.0779607668519020 - 0.5733734965324402 - 1 - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 3 4 12 4 2. - 0 - 0.0985612869262695 - -0.3251555860042572 - 0.5303598046302795 - <_> - - <_> - - - - <_> - 0 0 17 20 -1. - <_> - 0 5 17 10 2. - 0 - -0.5435916781425476 - 0.5946429967880249 - 1 - <_> - - - - <_> - 4 0 13 6 -1. - <_> - 4 2 13 2 3. - 0 - -0.0441776998341084 - 0.2967107892036438 - -0.3847483098506927 - <_> - - <_> - - - - <_> - 2 10 3 6 -1. - <_> - 3 10 1 6 3. - 0 - -8.8016409426927567e-04 - 1 - -0.3200058937072754 - <_> - - - - <_> - 4 14 6 4 -1. - <_> - 4 14 3 2 2. - <_> - 7 16 3 2 2. - 0 - 2.6359390467405319e-03 - -0.1758614033460617 - 0.4836035072803497 - <_> - - <_> - - - - <_> - 8 1 6 8 -1. - <_> - 10 1 2 8 3. - 0 - -0.0142036899924278 - -0.7788208723068237 - 1 - <_> - - - - <_> - 0 1 2 6 -1. - <_> - 1 1 1 6 2. - 0 - -7.3902818257920444e-05 - 0.3061941862106323 - -0.3319604992866516 - <_> - - <_> - - - - <_> - 8 12 1 3 -1. - <_> - 7 13 1 1 3. - 1 - 4.6157240867614746e-03 - 1 - 0.4968977868556976 - <_> - - - - <_> - 5 4 8 4 -1. - <_> - 5 4 8 2 2. - 1 - 0.0111523102968931 - -0.5343589186668396 - 0.0972294434905052 - <_> - - <_> - - - - <_> - 0 2 4 5 -1. - <_> - 1 2 2 5 2. - 0 - -6.0547702014446259e-03 - -0.8381121754646301 - 1 - <_> - - - - <_> - 5 12 3 2 -1. - <_> - 6 12 1 2 3. - 0 - -2.1118740551173687e-03 - 0.6361703276634216 - -0.0482991896569729 - -2.2212049961090088 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 13 8 2 -1. - <_> - 7 13 4 2 2. - 0 - -0.0129568297415972 - 1 - -0.6487473249435425 - <_> - - - - <_> - 11 9 9 8 -1. - <_> - 11 11 9 4 2. - 0 - -0.0271410197019577 - 0.7629305720329285 - -0.3394787013530731 - <_> - - <_> - - - - <_> - 16 12 4 3 -1. - <_> - 18 12 2 3 2. - 0 - 4.5119998976588249e-03 - -0.5005983710289001 - 1 - <_> - - - - <_> - 16 14 4 6 -1. - <_> - 16 17 4 3 2. - 0 - 0.0125166904181242 - -0.3687332868576050 - 0.5988863110542297 - <_> - - <_> - - - - <_> - 0 12 6 3 -1. - <_> - 2 12 2 3 3. - 0 - -6.0557941906154156e-03 - 1 - -0.3894093036651611 - <_> - - - - <_> - 8 6 7 6 -1. - <_> - 6 8 7 2 3. - 1 - -0.0469237491488457 - 0.6326891183853149 - -0.2627002894878387 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 3 1 3 2. - 0 - -2.4018269032239914e-03 - 1 - -0.5051792860031128 - <_> - - - - <_> - 0 2 15 5 -1. - <_> - 5 2 5 5 3. - 0 - -0.0159360896795988 - 0.6552600264549255 - -0.1730810999870300 - <_> - - <_> - - - - <_> - 8 11 10 3 -1. - <_> - 13 11 5 3 2. - 0 - 0.0140002900734544 - -0.4165323078632355 - 1 - <_> - - - - <_> - 8 11 2 8 -1. - <_> - 8 15 2 4 2. - 0 - 0.0132027799263597 - -0.4912196993827820 - 0.3739793896675110 - <_> - - <_> - - - - <_> - 0 1 2 6 -1. - <_> - 1 1 1 6 2. - 0 - -2.7658580802381039e-04 - 1 - -0.4538286924362183 - <_> - - - - <_> - 0 1 4 4 -1. - <_> - 1 1 2 4 2. - 0 - -4.8634149134159088e-03 - -0.5979688167572021 - 0.3121772110462189 - <_> - - <_> - - - - <_> - 5 16 3 1 -1. - <_> - 6 17 1 1 3. - 1 - 2.7654920704662800e-03 - 1 - -0.7647656798362732 - <_> - - - - <_> - 5 0 7 15 -1. - <_> - 5 5 7 5 3. - 0 - 0.2553476989269257 - -0.0342672206461430 - 0.7078657746315002 - <_> - - <_> - - - - <_> - 17 0 3 2 -1. - <_> - 18 1 1 2 3. - 1 - 4.6812961809337139e-03 - 1 - -0.7879086136817932 - <_> - - - - <_> - 4 18 6 2 -1. - <_> - 6 18 2 2 3. - 0 - 6.5162130631506443e-03 - 0.1887757927179337 - -0.7913225889205933 - <_> - - <_> - - - - <_> - 7 1 4 5 -1. - <_> - 7 1 2 5 2. - 1 - 0.0573253296315670 - 1 - 0.6234918832778931 - <_> - - - - <_> - 14 0 6 8 -1. - <_> - 14 0 3 4 2. - <_> - 17 4 3 4 2. - 0 - -0.0127183301374316 - 0.3086060881614685 - -0.3278433084487915 - <_> - - <_> - - - - <_> - 5 2 4 18 -1. - <_> - 5 2 2 9 2. - <_> - 7 11 2 9 2. - 0 - -6.7374261561781168e-04 - 1 - -0.4545154869556427 - <_> - - - - <_> - 7 18 6 2 -1. - <_> - 9 18 2 2 3. - 0 - 5.6564649567008018e-03 - 0.2743133902549744 - -0.7844793796539307 - <_> - - <_> - - - - <_> - 10 8 2 3 -1. - <_> - 10 9 2 1 3. - 0 - 3.1134090386331081e-03 - 1 - 0.3973877131938934 - <_> - - - - <_> - 10 10 4 2 -1. - <_> - 10 10 2 1 2. - <_> - 12 11 2 1 2. - 0 - 2.4249779526144266e-03 - -0.3519827127456665 - 0.3049009144306183 - <_> - - <_> - - - - <_> - 4 2 12 6 -1. - <_> - 4 4 12 2 3. - 0 - -0.0556414611637592 - 0.4557549059391022 - 1 - <_> - - - - <_> - 5 1 12 8 -1. - <_> - 5 3 12 4 2. - 0 - 0.0435481294989586 - -0.3337092995643616 - 0.2950142920017242 - <_> - - <_> - - - - <_> - 2 18 4 2 -1. - <_> - 2 19 4 1 2. - 0 - 8.0783379962667823e-04 - 1 - 0.2246004045009613 - <_> - - - - <_> - 0 18 8 1 -1. - <_> - 4 18 4 1 2. - 0 - 1.8713270546868443e-03 - -0.6604840755462646 - 0.1503167003393173 - -2.1328830718994141 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 12 12 -1. - <_> - 8 11 4 4 9. - 0 - -0.4351662993431091 - 1 - -0.4995929002761841 - <_> - - - - <_> - 16 11 4 6 -1. - <_> - 18 11 2 6 2. - 0 - 6.2595037743449211e-03 - -0.2363958954811096 - 0.7997537851333618 - <_> - - <_> - - - - <_> - 6 13 6 7 -1. - <_> - 8 13 2 7 3. - 0 - -6.6518150269985199e-03 - 1 - -0.5475280880928040 - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - -5.7092090137302876e-03 - 0.6427332758903503 - -0.2151180952787399 - <_> - - <_> - - - - <_> - 15 14 5 6 -1. - <_> - 15 17 5 3 2. - 0 - 0.0194501802325249 - -0.5360500216484070 - 1 - <_> - - - - <_> - 0 7 6 9 -1. - <_> - 2 7 2 9 3. - 0 - -5.4476498626172543e-03 - 0.5579450130462646 - -0.2147496044635773 - <_> - - <_> - - - - <_> - 15 11 4 1 -1. - <_> - 16 12 2 1 2. - 1 - -1.6347589553333819e-04 - 1 - -0.5596284270286560 - <_> - - - - <_> - 11 11 8 2 -1. - <_> - 15 11 4 2 2. - 0 - 7.1614650078117847e-03 - -0.1660436987876892 - 0.4680525958538055 - <_> - - <_> - - - - <_> - 0 1 12 11 -1. - <_> - 3 1 6 11 2. - 0 - -0.0131451701745391 - 1 - -0.4127990901470184 - <_> - - - - <_> - 8 8 6 4 -1. - <_> - 7 9 6 2 2. - 1 - -0.0114368097856641 - 0.3790180087089539 - -0.4179157912731171 - <_> - - <_> - - - - <_> - 6 17 6 3 -1. - <_> - 8 17 2 3 3. - 0 - -7.2912001051008701e-03 - -0.7608966827392578 - 1 - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -5.2170921117067337e-04 - 0.3252761960029602 - -0.3011097013950348 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 3.3754010219126940e-03 - 1 - -0.7837396264076233 - <_> - - - - <_> - 18 11 2 3 -1. - <_> - 18 12 2 1 3. - 0 - 2.5100160855799913e-03 - 0.1852544993162155 - -0.5808495879173279 - <_> - - <_> - - - - <_> - 3 12 2 8 -1. - <_> - 3 12 1 4 2. - <_> - 4 16 1 4 2. - 0 - -1.2884209863841534e-03 - 0.2733950018882751 - 1 - <_> - - - - <_> - 3 12 3 3 -1. - <_> - 4 12 1 3 3. - 0 - -1.8726480193436146e-03 - 0.1681987941265106 - -0.5198690295219421 - <_> - - <_> - - - - <_> - 11 18 4 2 -1. - <_> - 12 18 2 2 2. - 0 - 2.4010189808905125e-03 - 1 - -0.8296467065811157 - <_> - - - - <_> - 17 10 3 3 -1. - <_> - 17 11 3 1 3. - 0 - 4.8938081599771976e-03 - 0.1679659932851791 - -0.6553087234497070 - <_> - - <_> - - - - <_> - 7 14 5 2 -1. - <_> - 7 15 5 1 2. - 0 - 3.1223020050674677e-03 - -0.4352130889892578 - 1 - <_> - - - - <_> - 6 0 4 5 -1. - <_> - 6 0 2 5 2. - 1 - 0.0503664910793304 - -5.8327801525592804e-03 - 0.7087830901145935 - <_> - - <_> - - - - <_> - 6 1 5 8 -1. - <_> - 6 5 5 4 2. - 0 - 0.0361518003046513 - 1 - 0.4497916102409363 - <_> - - - - <_> - 3 1 9 8 -1. - <_> - 3 5 9 4 2. - 0 - -0.1342658996582031 - 0.3947243094444275 - -0.3758862912654877 - <_> - - <_> - - - - <_> - 2 14 15 6 -1. - <_> - 7 14 5 6 3. - 0 - -0.0277913697063923 - 1 - -0.2948872148990631 - <_> - - - - <_> - 12 3 6 5 -1. - <_> - 14 3 2 5 3. - 0 - -0.0127121703699231 - -0.7201173901557922 - 0.3659502863883972 - <_> - - <_> - - - - <_> - 5 16 2 2 -1. - <_> - 5 16 1 2 2. - 1 - -3.8276749546639621e-04 - 1 - -0.4058133959770203 - <_> - - - - <_> - 5 16 2 2 -1. - <_> - 5 16 1 2 2. - 1 - -6.1330529861152172e-03 - -0.5272595882415771 - 0.3604049980640411 - -1.9884539842605591 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 8 6 4 -1. - <_> - 11 10 2 4 3. - 1 - -0.0477486699819565 - 1 - -0.5990238785743713 - <_> - - - - <_> - 4 11 3 4 -1. - <_> - 4 13 3 2 2. - 0 - 4.6201851218938828e-03 - -0.2488749027252197 - 0.6920158267021179 - <_> - - <_> - - - - <_> - 13 8 6 12 -1. - <_> - 15 12 2 4 9. - 0 - -0.0853534564375877 - 1 - -0.5171583294868469 - <_> - - - - <_> - 0 0 1 10 -1. - <_> - 0 5 1 5 2. - 0 - -7.0110969245433807e-03 - 0.5695065259933472 - -0.2474942058324814 - <_> - - <_> - - - - <_> - 0 12 6 4 -1. - <_> - 2 12 2 4 3. - 0 - -7.6567470096051693e-03 - 1 - -0.3731651902198792 - <_> - - - - <_> - 7 5 8 6 -1. - <_> - 5 7 8 2 3. - 1 - -0.0359194912016392 - 0.4943858087062836 - -0.3958668112754822 - <_> - - <_> - - - - <_> - 3 1 16 4 -1. - <_> - 3 3 16 2 2. - 0 - -0.0743266269564629 - 0.5675597786903381 - 1 - <_> - - - - <_> - 6 2 10 9 -1. - <_> - 6 5 10 3 3. - 0 - 0.0901185870170593 - -0.3892117142677307 - 0.3107909858226776 - <_> - - <_> - - - - <_> - 14 10 6 10 -1. - <_> - 17 10 3 10 2. - 0 - 0.0167364608496428 - -0.3667413890361786 - 1 - <_> - - - - <_> - 5 17 4 3 -1. - <_> - 6 17 2 3 2. - 0 - 1.8592580454424024e-03 - 0.3487572073936462 - -0.5748311281204224 - <_> - - <_> - - - - <_> - 5 12 3 2 -1. - <_> - 6 12 1 2 3. - 0 - 7.5264140032231808e-03 - 1 - 0.6787899136543274 - <_> - - - - <_> - 5 12 3 2 -1. - <_> - 6 12 1 2 3. - 0 - -3.5309391096234322e-03 - 0.4861792027950287 - -0.2566064000129700 - <_> - - <_> - - - - <_> - 0 0 2 9 -1. - <_> - 1 0 1 9 2. - 0 - -4.9510748795000836e-05 - 1 - -0.4566124081611633 - <_> - - - - <_> - 2 6 3 2 -1. - <_> - 2 6 3 1 2. - 1 - -6.8923248909413815e-03 - -0.5713472962379456 - 0.3292104899883270 - <_> - - <_> - - - - <_> - 7 16 6 3 -1. - <_> - 9 16 2 3 3. - 0 - 6.1156069859862328e-03 - 1 - -0.7131536006927490 - <_> - - - - <_> - 7 17 6 2 -1. - <_> - 9 17 2 2 3. - 0 - -5.5014882236719131e-03 - -0.5913907885551453 - 0.1980594992637634 - <_> - - <_> - - - - <_> - 6 3 9 6 -1. - <_> - 4 5 9 2 3. - 1 - -0.0423780605196953 - 1 - -0.3823930025100708 - <_> - - - - <_> - 6 15 3 2 -1. - <_> - 7 16 1 2 3. - 1 - 2.2011259570717812e-03 - 0.3345701098442078 - -0.4303233921527863 - <_> - - <_> - - - - <_> - 6 2 3 3 -1. - <_> - 7 2 1 3 3. - 0 - 2.1217379253357649e-03 - 1 - -0.6831002235412598 - <_> - - - - <_> - 2 1 6 4 -1. - <_> - 4 1 2 4 3. - 0 - 6.4385468140244484e-03 - 0.2047861069440842 - -0.6179394125938416 - <_> - - <_> - - - - <_> - 13 11 4 2 -1. - <_> - 13 11 2 1 2. - <_> - 15 12 2 1 2. - 0 - 3.1177410855889320e-03 - 1 - 0.5113716125488281 - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 4.2230269173160195e-04 - -0.3644020855426788 - 0.2107304930686951 - <_> - - <_> - - - - <_> - 17 7 3 3 -1. - <_> - 18 8 1 3 3. - 1 - -6.5657291561365128e-03 - -0.6458150148391724 - 1 - <_> - - - - <_> - 17 7 3 2 -1. - <_> - 18 8 1 2 3. - 1 - 2.5686610024422407e-03 - 0.2764356136322021 - -0.3419849872589111 - <_> - - <_> - - - - <_> - 0 3 1 2 -1. - <_> - 0 4 1 1 2. - 0 - -6.2437567976303399e-05 - 1 - -0.3175807893276215 - <_> - - - - <_> - 10 1 2 5 -1. - <_> - 11 1 1 5 2. - 0 - -3.6269261036068201e-03 - -0.8105195760726929 - 0.2721863090991974 - <_> - - <_> - - - - <_> - 1 8 3 12 -1. - <_> - 1 11 3 6 2. - 0 - -3.4638389479368925e-03 - 1 - -0.3951576948165894 - <_> - - - - <_> - 2 10 8 2 -1. - <_> - 2 10 4 2 2. - 1 - -0.0749301910400391 - -0.5435386896133423 - 0.2610611915588379 - <_> - - <_> - - - - <_> - 6 12 3 3 -1. - <_> - 7 13 1 1 9. - 0 - -9.7247250378131866e-03 - 0.4112487137317657 - 1 - <_> - - - - <_> - 6 11 3 4 -1. - <_> - 7 11 1 4 3. - 0 - 4.5450199395418167e-03 - -0.3157655000686646 - 0.3904697000980377 - <_> - - <_> - - - - <_> - 5 17 4 2 -1. - <_> - 6 17 2 2 2. - 0 - -2.7354240883141756e-03 - -0.7490674853324890 - 1 - <_> - - - - <_> - 0 19 20 1 -1. - <_> - 10 19 10 1 2. - 0 - -0.0169694703072309 - -0.6243721842765808 - 0.1838738024234772 - -2.0902318954467773 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 11 8 5 -1. - <_> - 7 11 4 5 2. - 0 - -0.0249786991626024 - 1 - -0.6069788932800293 - <_> - - - - <_> - 10 8 8 9 -1. - <_> - 10 11 8 3 3. - 0 - -0.0580078698694706 - 0.7147802114486694 - -0.2994323968887329 - <_> - - <_> - - - - <_> - 0 13 6 2 -1. - <_> - 2 13 2 2 3. - 0 - -5.1753749139606953e-03 - 1 - -0.3529798984527588 - <_> - - - - <_> - 18 14 2 1 -1. - <_> - 18 14 1 1 2. - 1 - -8.9618662605062127e-04 - 0.5441746115684509 - -0.3978995084762573 - <_> - - <_> - - - - <_> - 1 2 2 4 -1. - <_> - 2 2 1 4 2. - 0 - -2.8718139219563454e-05 - 1 - -0.4889818131923676 - <_> - - - - <_> - 5 5 8 5 -1. - <_> - 9 5 4 5 2. - 0 - 4.7620530240237713e-03 - -0.3114455938339233 - 0.4678679108619690 - <_> - - <_> - - - - <_> - 7 13 5 4 -1. - <_> - 7 15 5 2 2. - 0 - 0.0197512805461884 - -0.4302048981189728 - 1 - <_> - - - - <_> - 17 18 3 2 -1. - <_> - 17 19 3 1 2. - 0 - -1.2683609966188669e-03 - -0.5409085154533386 - 0.3979752063751221 - <_> - - <_> - - - - <_> - 0 2 1 2 -1. - <_> - 0 3 1 1 2. - 0 - -4.5749718992738053e-05 - 1 - -0.4451893866062164 - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 2.4090509396046400e-03 - 0.2882230877876282 - -0.5451431274414062 - <_> - - <_> - - - - <_> - 10 11 3 4 -1. - <_> - 11 11 1 4 3. - 0 - -4.5728669501841068e-03 - 0.5503987073898315 - 1 - <_> - - - - <_> - 14 11 4 8 -1. - <_> - 16 11 2 8 2. - 0 - 8.9018214493989944e-03 - -0.4159888923168182 - 0.1746889948844910 - <_> - - <_> - - - - <_> - 2 2 9 6 -1. - <_> - 2 5 9 3 2. - 0 - -0.1205644980072975 - 0.6889057755470276 - 1 - <_> - - - - <_> - 0 4 17 8 -1. - <_> - 0 6 17 4 2. - 0 - 0.0469199307262897 - -0.4226630926132202 - 0.1701094061136246 - <_> - - <_> - - - - <_> - 15 17 5 3 -1. - <_> - 15 18 5 1 3. - 0 - -4.2390259914100170e-03 - -0.6304534077644348 - 1 - <_> - - - - <_> - 2 11 2 8 -1. - <_> - 2 15 2 4 2. - 0 - 3.2174249645322561e-03 - -0.3609794974327087 - 0.2493373006582260 - <_> - - <_> - - - - <_> - 3 12 3 3 -1. - <_> - 4 12 1 3 3. - 0 - -8.5738790221512318e-04 - 0.3099347949028015 - 1 - <_> - - - - <_> - 3 12 9 7 -1. - <_> - 6 12 3 7 3. - 0 - -0.0184324495494366 - 0.0977584496140480 - -0.5074235200881958 - <_> - - <_> - - - - <_> - 13 1 4 7 -1. - <_> - 14 1 2 7 2. - 0 - 5.8692828752100468e-03 - 1 - -0.7455605864524841 - <_> - - - - <_> - 3 16 2 2 -1. - <_> - 3 16 1 2 2. - 1 - -6.8751699291169643e-03 - -0.6745839118957520 - 0.1591881066560745 - <_> - - <_> - - - - <_> - 3 17 2 1 -1. - <_> - 3 17 1 1 2. - 1 - -6.8542227381840348e-05 - 1 - -0.4127942025661469 - <_> - - - - <_> - 4 9 6 6 -1. - <_> - 4 9 3 3 2. - <_> - 7 12 3 3 2. - 0 - -0.0106585798785090 - 0.3700270950794220 - -0.2173172980546951 - <_> - - <_> - - - - <_> - 11 13 3 1 -1. - <_> - 12 13 1 1 3. - 0 - -1.8811509944498539e-03 - 0.5790283083915710 - 1 - <_> - - - - <_> - 0 0 20 3 -1. - <_> - 5 0 10 3 2. - 0 - -0.0223091300576925 - 0.1972568035125732 - -0.3247519135475159 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 6.5826578065752983e-04 - 1 - -0.6063023805618286 - <_> - - - - <_> - 17 0 3 1 -1. - <_> - 18 1 1 1 3. - 1 - -5.0781588070094585e-03 - -0.7712330222129822 - 0.1818612962961197 - <_> - - <_> - - - - <_> - 4 0 8 9 -1. - <_> - 4 3 8 3 3. - 0 - 0.0562150813639164 - 1 - 0.5056139826774597 - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 2 6 2 2. - 0 - -0.0377205908298492 - 0.3605211079120636 - -0.3274376094341278 - <_> - - <_> - - - - <_> - 18 0 2 1 -1. - <_> - 18 0 1 1 2. - 1 - 3.9480631239712238e-03 - 1 - -0.7578818202018738 - <_> - - - - <_> - 14 2 6 1 -1. - <_> - 17 2 3 1 2. - 0 - -2.4269670248031616e-03 - 0.5207610130310059 - -0.0610213615000248 - -1.9407310485839844 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 13 8 2 -1. - <_> - 7 13 4 2 2. - 0 - -0.0169066991657019 - 1 - -0.4750126898288727 - <_> - - - - <_> - 15 12 3 8 -1. - <_> - 15 16 3 4 2. - 0 - 0.0253278408199549 - -0.4401676058769226 - 0.6088535189628601 - <_> - - <_> - - - - <_> - 5 10 8 3 -1. - <_> - 5 11 8 1 3. - 0 - -0.0156633201986551 - 0.5710005164146423 - 1 - <_> - - - - <_> - 5 0 11 9 -1. - <_> - 5 3 11 3 3. - 0 - -0.1610189974308014 - 0.4098914861679077 - -0.3814237117767334 - <_> - - <_> - - - - <_> - 18 14 2 2 -1. - <_> - 19 14 1 2 2. - 0 - 1.6885380318854004e-04 - -0.4795849025249481 - 1 - <_> - - - - <_> - 1 3 9 8 -1. - <_> - 4 3 3 8 3. - 0 - -3.0552360694855452e-03 - 0.4285230040550232 - -0.2825263142585754 - <_> - - <_> - - - - <_> - 3 6 2 3 -1. - <_> - 2 7 2 1 3. - 1 - 4.8042940907180309e-03 - 1 - -0.6865913867950439 - <_> - - - - <_> - 3 6 2 3 -1. - <_> - 2 7 2 1 3. - 1 - -5.0092511810362339e-03 - -0.5903354287147522 - 0.1973250061273575 - <_> - - <_> - - - - <_> - 17 7 1 12 -1. - <_> - 13 11 1 4 3. - 1 - -0.0371195189654827 - 1 - -0.4313096106052399 - <_> - - - - <_> - 0 0 1 15 -1. - <_> - 0 5 1 5 3. - 0 - 3.7857799325138330e-03 - 0.3359619081020355 - -0.3740172088146210 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 6 10 6 1 3. - 0 - -0.0108698504045606 - 0.5484120845794678 - 1 - <_> - - - - <_> - 3 18 3 2 -1. - <_> - 3 19 3 1 2. - 0 - 4.0577541221864522e-04 - -0.5002269744873047 - 0.0514238588511944 - <_> - - <_> - - - - <_> - 16 17 4 3 -1. - <_> - 16 18 4 1 3. - 0 - 5.0201490521430969e-03 - 1 - -0.5901622772216797 - <_> - - - - <_> - 10 17 4 3 -1. - <_> - 11 17 2 3 2. - 0 - 2.5601210072636604e-03 - 0.1946980059146881 - -0.6464836001396179 - <_> - - <_> - - - - <_> - 13 13 4 3 -1. - <_> - 14 13 2 3 2. - 0 - -1.2395749799907207e-03 - 1 - -0.2776215970516205 - <_> - - - - <_> - 4 15 3 2 -1. - <_> - 5 16 1 2 3. - 1 - -5.1075750961899757e-03 - -0.6114916205406189 - 0.3525038957595825 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 1 4 1 2 2. - 0 - -6.4853738876990974e-05 - 1 - -0.3400886058807373 - <_> - - - - <_> - 4 0 2 5 -1. - <_> - 5 0 1 5 2. - 0 - 2.3282810579985380e-03 - 0.2713474929332733 - -0.6691539883613586 - <_> - - <_> - - - - <_> - 1 9 3 8 -1. - <_> - 1 11 3 4 2. - 0 - -1.5571110416203737e-03 - 1 - -0.4114424884319305 - <_> - - - - <_> - 5 8 1 3 -1. - <_> - 4 9 1 1 3. - 1 - 2.3992219939827919e-03 - 0.2593970000743866 - -0.4038029909133911 - <_> - - <_> - - - - <_> - 4 13 2 1 -1. - <_> - 5 13 1 1 2. - 0 - 7.7784422319382429e-04 - 1 - 0.2952392101287842 - <_> - - - - <_> - 9 11 4 9 -1. - <_> - 11 11 2 9 2. - 0 - 3.2334199640899897e-03 - -0.5843685269355774 - -0.0179366394877434 - <_> - - <_> - - - - <_> - 0 1 1 2 -1. - <_> - 0 2 1 1 2. - 0 - -5.6113858590833843e-05 - 1 - -0.3502165079116821 - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - 1.9111000001430511e-03 - 0.2631261050701141 - -0.6154934763908386 - <_> - - <_> - - - - <_> - 12 11 1 4 -1. - <_> - 12 12 1 2 2. - 0 - -3.4321150742471218e-03 - 0.3749330043792725 - 1 - <_> - - - - <_> - 16 10 3 3 -1. - <_> - 15 11 3 1 3. - 1 - -0.0145419696345925 - 0.4378893077373505 - -0.3013161122798920 - <_> - - <_> - - - - <_> - 18 12 1 6 -1. - <_> - 18 12 1 3 2. - 1 - -0.0250270701944828 - -0.5282974839210510 - 1 - <_> - - - - <_> - 4 17 3 2 -1. - <_> - 5 17 1 2 3. - 0 - -3.1183639075607061e-03 - -0.8133684992790222 - 0.1792842000722885 - <_> - - <_> - - - - <_> - 17 7 3 2 -1. - <_> - 18 8 1 2 3. - 1 - 2.9415208846330643e-03 - 1 - -0.4724305868148804 - <_> - - - - <_> - 18 9 2 1 -1. - <_> - 18 9 1 1 2. - 1 - -2.4807679001241922e-03 - -0.6005833148956299 - 0.2149710953235626 - <_> - - <_> - - - - <_> - 8 11 4 5 -1. - <_> - 9 12 2 5 2. - 1 - -4.2498838156461716e-03 - 1 - -0.3323060870170593 - <_> - - - - <_> - 7 1 2 7 -1. - <_> - 8 1 1 7 2. - 0 - 7.6959328725934029e-03 - 0.2124706953763962 - -0.8196725249290466 - <_> - - <_> - - - - <_> - 4 4 14 6 -1. - <_> - 4 6 14 2 3. - 0 - -0.0614260397851467 - 0.5220044851303101 - 1 - <_> - - - - <_> - 2 2 11 6 -1. - <_> - 2 5 11 3 2. - 0 - 0.0531767904758453 - -0.2985176146030426 - 0.2865419089794159 - <_> - - <_> - - - - <_> - 18 16 2 2 -1. - <_> - 18 17 2 1 2. - 0 - 2.5695779186207801e-05 - -0.3471929132938385 - 1 - <_> - - - - <_> - 17 11 2 6 -1. - <_> - 18 11 1 6 2. - 0 - 2.4311970919370651e-03 - -0.1213349029421806 - 0.3896535038948059 - <_> - - <_> - - - - <_> - 17 0 3 3 -1. - <_> - 18 1 1 3 3. - 1 - 5.6956289336085320e-03 - 1 - -0.6636403203010559 - <_> - - - - <_> - 18 0 2 6 -1. - <_> - 18 3 2 3 2. - 0 - -6.6630227956920862e-04 - 0.2792190909385681 - -0.2162484973669052 - -2.1061589717864990 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 6 8 -1. - <_> - 4 7 3 4 2. - <_> - 7 11 3 4 2. - 0 - -0.0285095497965813 - 1 - -0.5513324141502380 - <_> - - - - <_> - 11 11 4 2 -1. - <_> - 11 11 2 2 2. - 1 - -0.0164291094988585 - 0.6032876968383789 - -0.3000960052013397 - <_> - - <_> - - - - <_> - 0 0 6 7 -1. - <_> - 3 0 3 7 2. - 0 - -5.8078952133655548e-03 - 1 - -0.4864051938056946 - <_> - - - - <_> - 15 10 5 8 -1. - <_> - 15 12 5 4 2. - 0 - -0.0146703496575356 - 0.4478665888309479 - -0.3544836044311523 - <_> - - <_> - - - - <_> - 2 10 3 8 -1. - <_> - 3 10 1 8 3. - 0 - -1.0694459779188037e-03 - 1 - -0.3859311938285828 - <_> - - - - <_> - 9 7 6 6 -1. - <_> - 7 9 6 2 3. - 1 - -0.0506975390017033 - 0.4386560022830963 - -0.3113405108451843 - <_> - - <_> - - - - <_> - 4 1 6 6 -1. - <_> - 4 4 6 3 2. - 0 - -0.0723180174827576 - 0.5569549202919006 - 1 - <_> - - - - <_> - 4 0 16 2 -1. - <_> - 4 1 16 1 2. - 0 - -0.0167407598346472 - 0.3403693139553070 - -0.3771306872367859 - <_> - - <_> - - - - <_> - 14 8 6 6 -1. - <_> - 14 8 3 3 2. - <_> - 17 11 3 3 2. - 0 - 0.0129232602193952 - 1 - 0.2698718011379242 - <_> - - - - <_> - 4 12 2 8 -1. - <_> - 4 12 1 4 2. - <_> - 5 16 1 4 2. - 0 - -2.0832989830523729e-03 - 0.0722172632813454 - -0.5061725974082947 - <_> - - <_> - - - - <_> - 0 18 7 2 -1. - <_> - 0 19 7 1 2. - 0 - 2.9217539122328162e-04 - -0.4719946980476379 - 1 - <_> - - - - <_> - 9 13 1 4 -1. - <_> - 9 15 1 2 2. - 0 - 4.6477448195219040e-03 - -0.2023364007472992 - 0.3668462038040161 - <_> - - <_> - - - - <_> - 18 10 2 8 -1. - <_> - 19 10 1 8 2. - 0 - 1.6355320112779737e-03 - -0.3336915075778961 - 1 - <_> - - - - <_> - 6 0 4 8 -1. - <_> - 7 0 2 8 2. - 0 - 6.0143060982227325e-03 - 0.2633537054061890 - -0.7531512975692749 - <_> - - <_> - - - - <_> - 1 2 6 6 -1. - <_> - 3 2 2 6 3. - 0 - -0.0197680406272411 - -0.7339664101600647 - 1 - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 10 10 4 1 2. - <_> - 14 11 4 1 2. - 0 - 5.0995801575481892e-03 - -0.1062633022665977 - 0.3787747919559479 - <_> - - <_> - - - - <_> - 3 9 2 3 -1. - <_> - 2 10 2 1 3. - 1 - 2.1737320348620415e-03 - 1 - -0.4587362110614777 - <_> - - - - <_> - 5 1 13 6 -1. - <_> - 5 3 13 2 3. - 0 - 0.0236210599541664 - -0.0373419895768166 - 0.5031296014785767 - <_> - - <_> - - - - <_> - 4 4 13 6 -1. - <_> - 4 6 13 2 3. - 0 - 0.0470704399049282 - 1 - 0.3915967047214508 - <_> - - - - <_> - 8 1 4 5 -1. - <_> - 8 1 2 5 2. - 1 - 0.0484291613101959 - -0.2750763893127441 - 0.3692345023155212 - <_> - - <_> - - - - <_> - 7 7 2 1 -1. - <_> - 8 7 1 1 2. - 0 - 7.1763257437851280e-05 - -0.2613370120525360 - 1 - <_> - - - - <_> - 5 5 4 4 -1. - <_> - 6 5 2 4 2. - 0 - -4.0031517855823040e-03 - -0.4611847996711731 - 0.3410157859325409 - <_> - - <_> - - - - <_> - 14 12 4 2 -1. - <_> - 14 12 2 1 2. - <_> - 16 13 2 1 2. - 0 - 2.5536299217492342e-03 - 1 - 0.4423784911632538 - <_> - - - - <_> - 13 11 4 2 -1. - <_> - 13 11 2 1 2. - <_> - 15 12 2 1 2. - 0 - -2.5720898993313313e-03 - 0.4306653141975403 - -0.2836068868637085 - <_> - - <_> - - - - <_> - 16 10 4 3 -1. - <_> - 16 11 4 1 3. - 0 - 8.7512210011482239e-03 - 1 - -0.7764763236045837 - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 11 0 2 5 2. - 0 - 5.7346918620169163e-03 - 0.1455115973949432 - -0.7507416009902954 - <_> - - <_> - - - - <_> - 8 11 1 3 -1. - <_> - 7 12 1 1 3. - 1 - -6.6438838839530945e-03 - 0.4035055041313171 - 1 - <_> - - - - <_> - 6 12 3 2 -1. - <_> - 7 12 1 2 3. - 0 - -3.4590701106935740e-03 - 0.2876971960067749 - -0.2802160084247589 - <_> - - <_> - - - - <_> - 17 8 2 3 -1. - <_> - 17 8 1 3 2. - 1 - 9.9742468446493149e-03 - 1 - -0.6067702174186707 - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - 0.0132336597889662 - 0.1547808051109314 - -0.7075914740562439 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - -5.0271311774849892e-03 - -0.7389777898788452 - 1 - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 1 1 1 2. - 0 - -1.2092100223526359e-04 - 0.2347300052642822 - -0.2440057992935181 - <_> - - <_> - - - - <_> - 13 11 7 2 -1. - <_> - 13 12 7 1 2. - 0 - -1.2881499715149403e-03 - 1 - -0.2890166938304901 - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 18 9 1 3 3. - 1 - 6.2854858115315437e-03 - 0.2810086905956268 - -0.5693385004997253 - <_> - - <_> - - - - <_> - 15 15 1 3 -1. - <_> - 14 16 1 1 3. - 1 - 5.6929360143840313e-03 - 1 - -0.7845693230628967 - <_> - - - - <_> - 6 13 6 2 -1. - <_> - 8 13 2 2 3. - 0 - -5.3880861960351467e-03 - 0.2620132863521576 - -0.2223203033208847 - <_> - - <_> - - - - <_> - 8 10 3 4 -1. - <_> - 9 10 1 4 3. - 0 - 4.8205819912254810e-03 - 1 - 0.5679597258567810 - <_> - - - - <_> - 7 0 12 19 -1. - <_> - 13 0 6 19 2. - 0 - 0.3427918851375580 - -0.1831423044204712 - 0.5410807132720947 - <_> - - <_> - - - - <_> - 12 16 8 4 -1. - <_> - 12 18 8 2 2. - 0 - 5.1370919682085514e-03 - -0.3911676108837128 - 1 - <_> - - - - <_> - 8 5 12 2 -1. - <_> - 14 5 6 2 2. - 0 - -9.1285221278667450e-03 - 0.5307633876800537 - -0.0300193093717098 - -2.0051579475402832 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 8 6 4 -1. - <_> - 12 10 2 4 3. - 1 - -0.0513861291110516 - 1 - -0.5314878225326538 - <_> - - - - <_> - 4 11 3 4 -1. - <_> - 4 13 3 2 2. - 0 - 5.1850839518010616e-03 - -0.2474454045295715 - 0.6118162274360657 - <_> - - <_> - - - - <_> - 0 2 12 7 -1. - <_> - 3 2 6 7 2. - 0 - -0.0152594000101089 - 1 - -0.4330362975597382 - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 8 0 2 2 2. - 1 - 0.0259951502084732 - 0.0439799018204212 - 0.7382913827896118 - <_> - - <_> - - - - <_> - 13 11 6 6 -1. - <_> - 15 13 2 2 9. - 0 - -0.0323123708367348 - 1 - -0.3960975110530853 - <_> - - - - <_> - 7 11 10 4 -1. - <_> - 12 11 5 4 2. - 0 - 0.0137007003650069 - -0.2764388024806976 - 0.4253535866737366 - <_> - - <_> - - - - <_> - 1 11 4 5 -1. - <_> - 2 11 2 5 2. - 0 - -2.2647869773209095e-03 - 1 - -0.3200556933879852 - <_> - - - - <_> - 2 14 4 2 -1. - <_> - 3 15 2 2 2. - 1 - -6.8290620110929012e-03 - -0.5168297290802002 - 0.3697570860385895 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 3 1 3 2. - 0 - -2.2481549531221390e-03 - 1 - -0.3624435067176819 - <_> - - - - <_> - 6 2 6 6 -1. - <_> - 6 5 6 3 2. - 0 - 0.0459445491433144 - -1.3187309959903359e-03 - 0.6321768164634705 - <_> - - <_> - - - - <_> - 6 18 4 2 -1. - <_> - 7 18 2 2 2. - 0 - 1.8755620112642646e-03 - 1 - -0.7140339016914368 - <_> - - - - <_> - 6 18 4 2 -1. - <_> - 7 18 2 2 2. - 0 - -1.9700559787452221e-03 - -0.5873066186904907 - 0.1759281009435654 - <_> - - <_> - - - - <_> - 4 4 7 4 -1. - <_> - 3 5 7 2 2. - 1 - -6.5721389837563038e-03 - 1 - -0.3634751141071320 - <_> - - - - <_> - 5 8 8 12 -1. - <_> - 7 8 4 12 2. - 0 - -0.0117461802437901 - 0.3144079148769379 - -0.4011111855506897 - <_> - - <_> - - - - <_> - 5 17 2 1 -1. - <_> - 5 17 1 1 2. - 1 - -1.6494120063725859e-04 - 1 - -0.3779259026050568 - <_> - - - - <_> - 4 18 2 1 -1. - <_> - 5 18 1 1 2. - 0 - -7.2169408667832613e-05 - 0.5279111266136169 - -0.1079031974077225 - <_> - - <_> - - - - <_> - 13 16 7 2 -1. - <_> - 13 17 7 1 2. - 0 - 1.9697639800142497e-04 - -0.4709764122962952 - 1 - <_> - - - - <_> - 7 15 2 3 -1. - <_> - 7 15 1 3 2. - 1 - -0.0114235095679760 - -0.8520929217338562 - 0.1766286939382553 - <_> - - <_> - - - - <_> - 9 2 4 5 -1. - <_> - 10 2 2 5 2. - 0 - -4.5562228187918663e-03 - -0.8060116171836853 - 1 - <_> - - - - <_> - 7 2 4 6 -1. - <_> - 8 2 2 6 2. - 0 - -4.4720191508531570e-03 - -0.6150020956993103 - 0.1290830969810486 - <_> - - <_> - - - - <_> - 3 12 3 3 -1. - <_> - 4 12 1 3 3. - 0 - -1.7765410011634231e-03 - 0.3138259947299957 - 1 - <_> - - - - <_> - 5 12 3 3 -1. - <_> - 6 13 1 1 9. - 0 - -7.8799277544021606e-03 - 0.3039462864398956 - -0.3720492124557495 - <_> - - <_> - - - - <_> - 4 12 3 2 -1. - <_> - 5 12 1 2 3. - 0 - -1.4284689677879214e-03 - 0.5041303038597107 - 1 - <_> - - - - <_> - 10 13 3 1 -1. - <_> - 11 13 1 1 3. - 0 - -1.8939910223707557e-03 - 0.3482376039028168 - -0.2367382049560547 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 12 5 2 3 2. - 0 - -3.1496640294790268e-03 - -0.6681237816810608 - 1 - <_> - - - - <_> - 19 7 1 10 -1. - <_> - 19 12 1 5 2. - 0 - -0.0107161197811365 - -0.4851551949977875 - 0.1903641968965530 - <_> - - <_> - - - - <_> - 4 8 2 3 -1. - <_> - 3 9 2 1 3. - 1 - -6.8033537827432156e-03 - -0.5697926878929138 - 1 - <_> - - - - <_> - 7 0 6 5 -1. - <_> - 9 0 2 5 3. - 0 - 0.0149023197591305 - 0.1309825032949448 - -0.7144827246665955 - <_> - - <_> - - - - <_> - 5 0 6 2 -1. - <_> - 5 0 3 2 2. - 1 - -0.0341702289879322 - 0.5057513117790222 - 1 - <_> - - - - <_> - 5 0 13 9 -1. - <_> - 5 3 13 3 3. - 0 - -0.1477925032377243 - 0.2823326885700226 - -0.2720532119274139 - <_> - - <_> - - - - <_> - 0 6 1 2 -1. - <_> - 0 7 1 1 2. - 0 - -5.5842810979811475e-05 - 1 - -0.2693673074245453 - <_> - - - - <_> - 1 0 16 6 -1. - <_> - 1 2 16 2 3. - 0 - 0.0398850813508034 - 5.6696129031479359e-03 - 0.6397516131401062 - <_> - - <_> - - - - <_> - 18 0 2 4 -1. - <_> - 18 0 1 4 2. - 1 - 0.0124831302091479 - 1 - -0.7453374266624451 - <_> - - - - <_> - 4 13 2 2 -1. - <_> - 4 13 1 1 2. - <_> - 5 14 1 1 2. - 0 - -3.2864511013031006e-04 - 0.3644962012767792 - -0.0964988172054291 - <_> - - <_> - - - - <_> - 0 3 4 1 -1. - <_> - 2 3 2 1 2. - 0 - -1.4710469986312091e-04 - 0.1406044065952301 - 1 - <_> - - - - <_> - 3 0 8 12 -1. - <_> - 3 6 8 6 2. - 0 - -0.2781434059143066 - 0.5700283050537109 - -0.4875547885894775 - <_> - - <_> - - - - <_> - 12 13 4 1 -1. - <_> - 13 13 2 1 2. - 0 - -1.3452640268951654e-03 - 0.3925583064556122 - 1 - <_> - - - - <_> - 12 12 2 2 -1. - <_> - 12 12 1 1 2. - <_> - 13 13 1 1 2. - 0 - 9.1500842245295644e-04 - -0.3021517097949982 - 0.3669803142547607 - <_> - - <_> - - - - <_> - 5 16 3 1 -1. - <_> - 6 17 1 1 3. - 1 - -3.4133149310946465e-03 - -0.6408581733703613 - 1 - <_> - - - - <_> - 3 13 8 4 -1. - <_> - 3 13 4 2 2. - <_> - 7 15 4 2 2. - 0 - 5.1169008947908878e-03 - -0.2305258065462112 - 0.2428591996431351 - <_> - - <_> - - - - <_> - 0 8 18 3 -1. - <_> - 6 9 6 1 9. - 0 - 0.0888466984033585 - 1 - 0.4538188874721527 - <_> - - - - <_> - 8 4 6 5 -1. - <_> - 11 4 3 5 2. - 0 - 6.1080828309059143e-03 - -0.3588008880615234 - 0.1320938020944595 - -2.1121981143951416 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 14 9 1 -1. - <_> - 8 14 3 1 3. - 0 - -0.0159300006926060 - 1 - -0.3524534106254578 - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 4 0 2 4 2. - 1 - 0.0274074506014585 - -0.0602367892861366 - 0.7271584868431091 - <_> - - <_> - - - - <_> - 7 9 12 8 -1. - <_> - 7 11 12 4 2. - 0 - -0.0850376784801483 - 1 - -0.4357671141624451 - <_> - - - - <_> - 18 15 2 1 -1. - <_> - 18 15 1 1 2. - 1 - -1.1508919997140765e-03 - 0.4647167921066284 - -0.3589689135551453 - <_> - - <_> - - - - <_> - 3 13 2 4 -1. - <_> - 3 13 1 2 2. - <_> - 4 15 1 2 2. - 0 - -6.4599298639222980e-04 - 1 - -0.3137106001377106 - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 3 8 3 1 3. - 1 - 5.5495807901024818e-03 - 0.4122591912746429 - -0.4940044879913330 - <_> - - <_> - - - - <_> - 0 1 2 7 -1. - <_> - 1 1 1 7 2. - 0 - -1.1472150217741728e-03 - 1 - -0.3919258117675781 - <_> - - - - <_> - 4 0 3 9 -1. - <_> - 5 0 1 9 3. - 0 - -6.4546810463070869e-03 - -0.6919782757759094 - 0.2610394060611725 - <_> - - <_> - - - - <_> - 15 10 3 3 -1. - <_> - 14 11 3 1 3. - 1 - -0.0114142503589392 - 0.3236142098903656 - 1 - <_> - - - - <_> - 12 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 13 12 1 1 2. - 0 - 1.1582579463720322e-03 - -0.3830499947071075 - 0.2801598012447357 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -6.1077292775735259e-04 - 1 - -0.3747107982635498 - <_> - - - - <_> - 12 18 8 2 -1. - <_> - 12 19 8 1 2. - 0 - 1.1812780285254121e-03 - -0.1768521964550018 - 0.3549810945987701 - <_> - - <_> - - - - <_> - 17 9 2 2 -1. - <_> - 17 9 1 2 2. - 1 - 7.9117231070995331e-03 - 1 - -0.6968191862106323 - <_> - - - - <_> - 16 10 4 2 -1. - <_> - 17 11 2 2 2. - 1 - -9.0904926764778793e-05 - 0.2075673937797546 - -0.4428209066390991 - <_> - - <_> - - - - <_> - 7 13 10 1 -1. - <_> - 12 13 5 1 2. - 0 - 2.8638960793614388e-03 - -0.4136478900909424 - 1 - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 9 7 2 3 2. - 0 - 1.2769990134984255e-03 - -0.2115702033042908 - 0.3191956877708435 - <_> - - <_> - - - - <_> - 9 18 6 2 -1. - <_> - 11 18 2 2 3. - 0 - -7.5440858490765095e-03 - -0.7549569010734558 - 1 - <_> - - - - <_> - 8 18 6 2 -1. - <_> - 10 18 2 2 3. - 0 - 5.4467269219458103e-03 - 0.1322987973690033 - -0.6769589185714722 - <_> - - <_> - - - - <_> - 17 9 3 1 -1. - <_> - 18 10 1 1 3. - 1 - 1.3641830300912261e-03 - 1 - -0.4216814935207367 - <_> - - - - <_> - 17 7 2 11 -1. - <_> - 18 7 1 11 2. - 0 - 0.0138107798993587 - 0.1571936011314392 - -0.6796516776084900 - <_> - - <_> - - - - <_> - 8 2 4 4 -1. - <_> - 8 2 2 4 2. - 1 - 0.0502656400203705 - 1 - 0.7436913847923279 - <_> - - - - <_> - 6 6 2 3 -1. - <_> - 7 6 1 3 2. - 0 - 4.7765119234099984e-05 - -0.3810234963893890 - 0.1060535013675690 - <_> - - <_> - - - - <_> - 7 0 9 5 -1. - <_> - 10 3 3 5 3. - 1 - 0.1466668993234634 - 1 - 0.5340983271598816 - <_> - - - - <_> - 1 0 15 9 -1. - <_> - 6 3 5 3 9. - 0 - -0.3042683005332947 - 0.3778361082077026 - -0.2153462022542953 - <_> - - <_> - - - - <_> - 2 12 4 3 -1. - <_> - 3 12 2 3 2. - 0 - -3.2244708854705095e-03 - 0.2827424108982086 - 1 - <_> - - - - <_> - 0 12 4 5 -1. - <_> - 1 12 2 5 2. - 0 - -1.7187190242111683e-03 - 0.1067710965871811 - -0.4420411884784698 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - -8.4115704521536827e-03 - -0.8355705142021179 - 1 - <_> - - - - <_> - 4 13 6 1 -1. - <_> - 4 13 3 1 2. - 1 - -0.0232209190726280 - -0.5193390846252441 - 0.1318164020776749 - <_> - - <_> - - - - <_> - 5 0 4 6 -1. - <_> - 6 0 2 6 2. - 0 - -6.3912221230566502e-03 - -0.6855232119560242 - 1 - <_> - - - - <_> - 2 17 2 1 -1. - <_> - 2 17 1 1 2. - 1 - -3.0661540222354233e-04 - 0.2219285070896149 - -0.2394503057003021 - <_> - - <_> - - - - <_> - 4 9 1 3 -1. - <_> - 3 10 1 1 3. - 1 - 1.8742750398814678e-03 - 1 - -0.4721843898296356 - <_> - - - - <_> - 0 2 6 9 -1. - <_> - 2 2 2 9 3. - 0 - -0.0282995402812958 - -0.6818671822547913 - 0.1592379063367844 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 16 7 1 2 2. - 1 - 7.9352483153343201e-03 - 1 - -0.7313578128814697 - <_> - - - - <_> - 7 2 6 4 -1. - <_> - 9 2 2 4 3. - 0 - -8.7599940598011017e-03 - -0.6001471877098083 - 0.1035033017396927 - <_> - - <_> - - - - <_> - 7 18 6 2 -1. - <_> - 9 18 2 2 3. - 0 - -5.5426149629056454e-03 - -0.5936040878295898 - 1 - <_> - - - - <_> - 1 14 6 4 -1. - <_> - 3 14 2 4 3. - 0 - -1.8066290067508817e-03 - 0.2553352117538452 - -0.1703643947839737 - <_> - - <_> - - - - <_> - 6 8 7 3 -1. - <_> - 5 9 7 1 3. - 1 - -8.3993803709745407e-03 - 1 - -0.2395361065864563 - <_> - - - - <_> - 14 12 4 1 -1. - <_> - 15 13 2 1 2. - 1 - -1.9515500171110034e-03 - 0.3725241124629974 - -0.1298290044069290 - <_> - - <_> - - - - <_> - 4 12 3 2 -1. - <_> - 5 12 1 2 3. - 0 - -2.2850139066576958e-03 - 0.5022721290588379 - 1 - <_> - - - - <_> - 5 12 3 3 -1. - <_> - 6 12 1 3 3. - 0 - -6.1910818330943584e-03 - 0.4455165863037109 - -0.1630778014659882 - <_> - - <_> - - - - <_> - 18 2 2 2 -1. - <_> - 19 2 1 2 2. - 0 - 1.1659320443868637e-03 - 1 - 0.3480907976627350 - <_> - - - - <_> - 14 0 6 1 -1. - <_> - 17 0 3 1 2. - 0 - -2.1016779355704784e-03 - 0.3153137862682343 - -0.3471026122570038 - <_> - - <_> - - - - <_> - 17 0 3 3 -1. - <_> - 18 1 1 3 3. - 1 - -9.1615924611687660e-03 - -0.6862319707870483 - 1 - <_> - - - - <_> - 11 4 6 8 -1. - <_> - 13 4 2 8 3. - 0 - -0.0200365409255028 - -0.6899188160896301 - 0.1296222060918808 - <_> - - <_> - - - - <_> - 7 12 3 2 -1. - <_> - 8 12 1 2 3. - 0 - 2.7148448862135410e-03 - 1 - 0.4774574041366577 - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 16 1 3 1 2. - 0 - 2.2834159899502993e-03 - -0.0133445700630546 - -0.6179587841033936 - -1.8701590299606323 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 11 9 4 -1. - <_> - 8 11 3 4 3. - 0 - -0.0328384712338448 - 1 - -0.5198407173156738 - <_> - - - - <_> - 12 9 1 6 -1. - <_> - 12 11 1 2 3. - 0 - -7.5696408748626709e-03 - 0.6369025111198425 - -0.1156217008829117 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 4 0 2 4 2. - 1 - 0.0541258715093136 - 1 - 0.5034024715423584 - <_> - - - - <_> - 5 1 11 12 -1. - <_> - 5 5 11 4 3. - 0 - 0.2700459957122803 - -0.3464067876338959 - 0.3765150904655457 - <_> - - <_> - - - - <_> - 16 12 4 8 -1. - <_> - 18 12 2 8 2. - 0 - 7.0261410437524319e-03 - -0.4104644060134888 - 1 - <_> - - - - <_> - 18 14 2 6 -1. - <_> - 18 17 2 3 2. - 0 - 3.1245660502463579e-03 - -0.4138219058513641 - 0.3755074143409729 - <_> - - <_> - - - - <_> - 1 12 4 4 -1. - <_> - 2 12 2 4 2. - 0 - -1.8708549905568361e-03 - 1 - -0.3782733082771301 - <_> - - - - <_> - 6 7 6 4 -1. - <_> - 5 8 6 2 2. - 1 - -0.0149690099060535 - 0.3994168043136597 - -0.2225451022386551 - <_> - - <_> - - - - <_> - 5 15 3 2 -1. - <_> - 6 16 1 2 3. - 1 - 3.4136420581489801e-03 - 1 - -0.5466756820678711 - <_> - - - - <_> - 6 16 3 1 -1. - <_> - 7 17 1 1 3. - 1 - 2.3454260081052780e-03 - 0.1661884039640427 - -0.6320394277572632 - <_> - - <_> - - - - <_> - 10 14 1 2 -1. - <_> - 10 14 1 1 2. - 1 - -1.1689099483191967e-03 - 1 - -0.4497218132019043 - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 3 8 3 1 3. - 1 - -7.8206984326243401e-03 - -0.5716611742973328 - 0.1859999001026154 - <_> - - <_> - - - - <_> - 2 0 6 8 -1. - <_> - 4 0 2 8 3. - 0 - -0.0263242591172457 - -0.7804111242294312 - 1 - <_> - - - - <_> - 2 5 6 3 -1. - <_> - 4 5 2 3 3. - 0 - -9.1647548833861947e-04 - 0.2310009002685547 - -0.2122412025928497 - <_> - - <_> - - - - <_> - 3 11 3 6 -1. - <_> - 4 11 1 6 3. - 0 - -2.3702960461378098e-03 - 0.2730421125888824 - 1 - <_> - - - - <_> - 15 11 2 3 -1. - <_> - 14 12 2 1 3. - 1 - -9.2874821275472641e-03 - 0.2320079952478409 - -0.3460255861282349 - <_> - - <_> - - - - <_> - 11 17 4 3 -1. - <_> - 12 17 2 3 2. - 0 - 2.9221060685813427e-03 - 1 - -0.6997262835502625 - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 13 11 1 1 2. - <_> - 14 12 1 1 2. - 0 - -1.4097889652475715e-03 - 0.4801935851573944 - -0.0426502004265785 - <_> - - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 13 11 1 1 2. - <_> - 14 12 1 1 2. - 0 - 9.3326548812910914e-04 - 1 - 0.3770847916603088 - <_> - - - - <_> - 8 2 5 6 -1. - <_> - 8 5 5 3 2. - 0 - -0.0568373091518879 - 0.4637516140937805 - -0.2044157981872559 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -9.1405760031193495e-05 - 1 - -0.2944777011871338 - <_> - - - - <_> - 0 8 10 4 -1. - <_> - 0 10 10 2 2. - 0 - -0.0111477700993419 - 0.3657920062541962 - -0.1610623002052307 - <_> - - <_> - - - - <_> - 17 11 3 1 -1. - <_> - 18 12 1 1 3. - 1 - 8.0759642878547311e-04 - 1 - -0.3876996934413910 - <_> - - - - <_> - 7 18 2 2 -1. - <_> - 8 18 1 2 2. - 0 - 1.7215589759871364e-03 - 0.1779005974531174 - -0.5967379212379456 - <_> - - <_> - - - - <_> - 0 6 18 4 -1. - <_> - 9 6 9 4 2. - 0 - 0.0143056400120258 - -0.2888791859149933 - 1 - <_> - - - - <_> - 2 12 12 8 -1. - <_> - 6 12 4 8 3. - 0 - -0.0388850085437298 - 0.3649722933769226 - -0.1376271992921829 - <_> - - <_> - - - - <_> - 1 0 14 1 -1. - <_> - 8 0 7 1 2. - 0 - -3.4479280002415180e-03 - 0.1811084002256393 - 1 - <_> - - - - <_> - 8 0 12 19 -1. - <_> - 14 0 6 19 2. - 0 - 0.3016817867755890 - -0.3542549014091492 - 0.4295836091041565 - <_> - - <_> - - - - <_> - 7 12 3 2 -1. - <_> - 8 12 1 2 3. - 0 - 2.8582389932125807e-03 - 1 - 0.5295780897140503 - <_> - - - - <_> - 8 11 3 5 -1. - <_> - 9 11 1 5 3. - 0 - 1.4091320335865021e-03 - -0.2123443037271500 - 0.3142850995063782 - <_> - - <_> - - - - <_> - 7 18 3 2 -1. - <_> - 8 18 1 2 3. - 0 - -1.6597079811617732e-03 - -0.6334841847419739 - 1 - <_> - - - - <_> - 5 13 2 2 -1. - <_> - 5 13 1 1 2. - <_> - 6 14 1 1 2. - 0 - 8.7804382201284170e-04 - -0.0553153008222580 - 0.3938995897769928 - <_> - - <_> - - - - <_> - 16 9 3 1 -1. - <_> - 17 10 1 1 3. - 1 - 2.0211800001561642e-03 - 1 - -0.4712730944156647 - <_> - - - - <_> - 18 0 2 3 -1. - <_> - 18 0 1 3 2. - 1 - -6.8409871309995651e-03 - -0.6406552791595459 - 0.1486144065856934 - <_> - - <_> - - - - <_> - 4 2 15 6 -1. - <_> - 4 4 15 2 3. - 0 - 0.0472007617354393 - 1 - 0.4121640920639038 - <_> - - - - <_> - 10 0 10 4 -1. - <_> - 10 0 5 2 2. - <_> - 15 2 5 2 2. - 0 - 4.9684080295264721e-03 - -0.3240430057048798 - 0.1575596034526825 - <_> - - <_> - - - - <_> - 5 0 12 6 -1. - <_> - 5 2 12 2 3. - 0 - 0.0375299118459225 - 1 - 0.4132845997810364 - <_> - - - - <_> - 12 1 8 6 -1. - <_> - 12 1 4 3 2. - <_> - 16 4 4 3 2. - 0 - -0.0116650899872184 - 0.2546750009059906 - -0.3130356073379517 - <_> - - <_> - - - - <_> - 0 3 2 1 -1. - <_> - 1 3 1 1 2. - 0 - -6.8298257247079164e-05 - 1 - -0.2721207141876221 - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 7 1 4 2. - 1 - 0.0153254298493266 - 0.2294660955667496 - -0.6734570860862732 - <_> - - <_> - - - - <_> - 15 17 5 3 -1. - <_> - 15 18 5 1 3. - 0 - 8.5185896605253220e-03 - 1 - -0.7111467123031616 - <_> - - - - <_> - 6 12 6 8 -1. - <_> - 8 12 2 8 3. - 0 - -2.6828479021787643e-03 - 0.1551170051097870 - -0.3544489145278931 - <_> - - <_> - - - - <_> - 5 12 2 2 -1. - <_> - 6 12 1 2 2. - 0 - 1.3791749952360988e-03 - 1 - 0.3691627085208893 - <_> - - - - <_> - 13 12 4 6 -1. - <_> - 14 12 2 6 2. - 0 - -3.3968368370551616e-05 - 0.0591509304940701 - -0.4600771963596344 - <_> - - <_> - - - - <_> - 17 0 3 4 -1. - <_> - 18 1 1 4 3. - 1 - 5.8259358629584312e-03 - 1 - -0.5498669743537903 - <_> - - - - <_> - 4 0 4 10 -1. - <_> - 5 0 2 10 2. - 0 - -8.1688696518540382e-03 - -0.5056741237640381 - 0.1518967002630234 - <_> - - <_> - - - - <_> - 5 12 3 3 -1. - <_> - 6 12 1 3 3. - 0 - -2.3251199163496494e-03 - 0.3490481078624725 - 1 - <_> - - - - <_> - 11 12 3 3 -1. - <_> - 12 12 1 3 3. - 0 - -4.8669208772480488e-03 - 0.5313856005668640 - -0.2141346931457520 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 4.3380381539463997e-03 - 1 - -0.7824826240539551 - <_> - - - - <_> - 2 1 8 1 -1. - <_> - 4 1 4 1 2. - 0 - 3.4176679328083992e-03 - 0.1246078982949257 - -0.5529775023460388 - <_> - - <_> - - - - <_> - 0 3 18 12 -1. - <_> - 6 7 6 4 9. - 0 - 0.5530973076820374 - 1 - 0.4657307863235474 - <_> - - - - <_> - 12 18 6 2 -1. - <_> - 15 18 3 2 2. - 0 - 2.3636389523744583e-03 - -0.3330905139446259 - 0.0943800508975983 - -1.9807859659194946 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 9 4 7 -1. - <_> - 12 10 2 7 2. - 1 - -0.0229342803359032 - 1 - -0.4471629858016968 - <_> - - - - <_> - 15 8 3 12 -1. - <_> - 16 12 1 4 9. - 0 - -0.0426658503711224 - 0.5408589839935303 - -0.3358927965164185 - <_> - - <_> - - - - <_> - 6 10 7 3 -1. - <_> - 6 11 7 1 3. - 0 - -9.8418388515710831e-03 - 0.3995800018310547 - 1 - <_> - - - - <_> - 4 9 10 3 -1. - <_> - 4 10 10 1 3. - 0 - -0.0119323497638106 - 0.3421911895275116 - -0.4241695106029510 - <_> - - <_> - - - - <_> - 0 1 15 7 -1. - <_> - 5 1 5 7 3. - 0 - -0.0244370102882385 - 1 - -0.3733735978603363 - <_> - - - - <_> - 0 0 1 18 -1. - <_> - 0 6 1 6 3. - 0 - -4.9987169913947582e-03 - 0.4035832881927490 - -0.3519937098026276 - <_> - - <_> - - - - <_> - 9 13 2 4 -1. - <_> - 8 14 2 2 2. - 1 - 1.8582950579002500e-03 - -0.4415811896324158 - 1 - <_> - - - - <_> - 16 16 4 4 -1. - <_> - 16 18 4 2 2. - 0 - 2.7540219016373158e-03 - -0.2872293889522552 - 0.3385724127292633 - <_> - - <_> - - - - <_> - 1 10 4 8 -1. - <_> - 2 10 2 8 2. - 0 - -3.4452530089765787e-03 - 1 - -0.3182198107242584 - <_> - - - - <_> - 2 15 3 2 -1. - <_> - 3 16 1 2 3. - 1 - -5.9277489781379700e-03 - -0.6507351994514465 - 0.2710922062397003 - <_> - - <_> - - - - <_> - 2 17 2 1 -1. - <_> - 2 17 1 1 2. - 1 - -1.2391789641696960e-04 - 1 - -0.3346720039844513 - <_> - - - - <_> - 18 10 2 8 -1. - <_> - 18 10 2 4 2. - 1 - -0.0733271390199661 - -0.5964624881744385 - 0.2286181002855301 - <_> - - <_> - - - - <_> - 0 11 18 3 -1. - <_> - 6 12 6 1 9. - 0 - -0.0839647501707077 - 1 - -0.2252518981695175 - <_> - - - - <_> - 15 10 4 2 -1. - <_> - 16 11 2 2 2. - 1 - -8.1644707825034857e-04 - 0.3821364939212799 - -0.3341045081615448 - <_> - - <_> - - - - <_> - 9 1 5 4 -1. - <_> - 9 3 5 2 2. - 0 - -0.0152077795937657 - 0.3074269890785217 - 1 - <_> - - - - <_> - 6 1 7 6 -1. - <_> - 6 4 7 3 2. - 0 - 0.0468947887420654 - -0.3883388936519623 - 0.2317751944065094 - <_> - - <_> - - - - <_> - 3 3 8 6 -1. - <_> - 3 6 8 3 2. - 0 - -0.1039844006299973 - 0.7132114171981812 - 1 - <_> - - - - <_> - 16 1 4 2 -1. - <_> - 18 1 2 2 2. - 0 - 3.9815339259803295e-03 - -0.2331019937992096 - 0.2924784123897552 - <_> - - <_> - - - - <_> - 18 12 2 3 -1. - <_> - 18 13 2 1 3. - 0 - 2.5737080723047256e-03 - 1 - -0.5501734018325806 - <_> - - - - <_> - 17 6 2 8 -1. - <_> - 17 6 1 4 2. - <_> - 18 10 1 4 2. - 0 - 9.1035291552543640e-04 - -0.1822893023490906 - 0.2837032079696655 - <_> - - <_> - - - - <_> - 17 5 3 4 -1. - <_> - 18 6 1 4 3. - 1 - 6.4211348071694374e-03 - 1 - -0.4858197867870331 - <_> - - - - <_> - 0 9 4 8 -1. - <_> - 0 11 4 4 2. - 0 - -5.8243819512426853e-03 - 0.2460819035768509 - -0.2156502008438110 - <_> - - <_> - - - - <_> - 0 6 3 8 -1. - <_> - 0 10 3 4 2. - 0 - -0.0400436297059059 - -0.6388055086135864 - 1 - <_> - - - - <_> - 14 11 2 2 -1. - <_> - 14 11 1 1 2. - <_> - 15 12 1 1 2. - 0 - 8.4683427121490240e-04 - -0.0604355894029140 - 0.4371112883090973 - <_> - - <_> - - - - <_> - 15 11 3 3 -1. - <_> - 14 12 3 1 3. - 1 - 0.0129645802080631 - 1 - 0.5949506163597107 - <_> - - - - <_> - 14 12 5 2 -1. - <_> - 14 13 5 1 2. - 0 - -2.2524749510921538e-04 - 0.0868314728140831 - -0.3636232018470764 - <_> - - <_> - - - - <_> - 19 12 1 2 -1. - <_> - 19 13 1 1 2. - 0 - -1.7258729785680771e-03 - -0.6470772027969360 - 1 - <_> - - - - <_> - 6 0 4 7 -1. - <_> - 7 0 2 7 2. - 0 - -7.2289421223104000e-03 - -0.6877536773681641 - 0.1383872032165527 - <_> - - <_> - - - - <_> - 12 12 3 2 -1. - <_> - 12 13 3 1 2. - 0 - 2.5079259648919106e-03 - 1 - 0.3065930902957916 - <_> - - - - <_> - 12 13 4 2 -1. - <_> - 12 13 2 1 2. - <_> - 14 14 2 1 2. - 0 - -1.9473560387268662e-03 - 0.2296776026487350 - -0.3473764955997467 - <_> - - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 16 19 4 1 2. - 0 - 7.4747111648321152e-03 - 1 - -0.6519178748130798 - <_> - - - - <_> - 14 18 1 2 -1. - <_> - 14 19 1 1 2. - 0 - 1.0328400094294921e-04 - -0.2072588950395584 - 0.2240213006734848 - <_> - - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 1 1 2 3. - 1 - -7.8996885567903519e-03 - -0.7247917056083679 - 1 - <_> - - - - <_> - 16 0 4 2 -1. - <_> - 17 1 2 2 2. - 1 - 4.2833909392356873e-03 - 0.1395497024059296 - -0.4308606088161469 - <_> - - <_> - - - - <_> - 12 13 2 2 -1. - <_> - 12 13 1 1 2. - <_> - 13 14 1 1 2. - 0 - 6.3452741596847773e-04 - 1 - 0.2979263961315155 - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 7 10 2 2 2. - 1 - -5.4966621100902557e-03 - -0.5620539188385010 - -0.0296081192791462 - <_> - - <_> - - - - <_> - 3 3 1 3 -1. - <_> - 2 4 1 1 3. - 1 - 3.1408690847456455e-03 - 1 - -0.6132214069366455 - <_> - - - - <_> - 3 4 2 3 -1. - <_> - 2 5 2 1 3. - 1 - -5.0443639047443867e-03 - -0.5306010246276855 - 0.1250745952129364 - <_> - - <_> - - - - <_> - 3 0 16 6 -1. - <_> - 3 2 16 2 3. - 0 - 0.0459648706018925 - 1 - 0.3818871974945068 - <_> - - - - <_> - 12 2 2 5 -1. - <_> - 12 2 1 5 2. - 1 - -5.3749699145555496e-03 - 0.1408901065587997 - -0.3553569018840790 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 2.9262059833854437e-03 - 1 - -0.6088665723800659 - <_> - - - - <_> - 13 12 2 2 -1. - <_> - 13 12 1 1 2. - <_> - 14 13 1 1 2. - 0 - 5.2230368601158261e-04 - -0.0714415684342384 - 0.3627525866031647 - <_> - - <_> - - - - <_> - 5 17 4 3 -1. - <_> - 6 17 2 3 2. - 0 - -4.4181118719279766e-03 - -0.7645800709724426 - 1 - <_> - - - - <_> - 17 13 3 3 -1. - <_> - 17 14 3 1 3. - 0 - 4.3349149636924267e-03 - 0.1124641001224518 - -0.5455384850502014 - <_> - - <_> - - - - <_> - 0 12 2 8 -1. - <_> - 0 12 1 4 2. - <_> - 1 16 1 4 2. - 0 - 2.6483018882572651e-03 - 1 - 0.2354231029748917 - <_> - - - - <_> - 4 16 1 3 -1. - <_> - 3 17 1 1 3. - 1 - -1.0814110282808542e-03 - 0.1442230045795441 - -0.3440195918083191 - <_> - - <_> - - - - <_> - 0 2 1 2 -1. - <_> - 0 3 1 1 2. - 0 - -5.4296739108394831e-05 - 1 - -0.2860746085643768 - <_> - - - - <_> - 10 2 4 7 -1. - <_> - 11 2 2 7 2. - 0 - 5.5393581278622150e-03 - 0.1934528946876526 - -0.5054942965507507 - <_> - - <_> - - - - <_> - 2 1 6 9 -1. - <_> - 2 4 6 3 3. - 0 - 0.0337030999362469 - 1 - 0.3830255866050720 - <_> - - - - <_> - 1 4 2 2 -1. - <_> - 2 4 1 2 2. - 0 - -1.2178930046502501e-04 - 0.0664141774177551 - -0.4853005111217499 - <_> - - <_> - - - - <_> - 13 12 2 2 -1. - <_> - 13 12 1 1 2. - <_> - 14 13 1 1 2. - 0 - -1.7803770024329424e-03 - 0.4411354959011078 - 1 - <_> - - - - <_> - 18 0 2 1 -1. - <_> - 19 0 1 1 2. - 0 - -5.6019638577708974e-05 - 0.1239674985408783 - -0.2629227042198181 - -1.9697020053863525 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 13 3 1 -1. - <_> - 5 13 1 1 3. - 0 - 3.1982790678739548e-03 - 1 - 0.5420842170715332 - <_> - - - - <_> - 6 13 4 1 -1. - <_> - 7 13 2 1 2. - 0 - -1.5240450156852603e-03 - 0.0827848389744759 - -0.5016483068466187 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 11 6 1 3. - 0 - -0.0122844297438860 - 0.4417493939399719 - 1 - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 7 10 4 1 3. - 0 - -8.3555448800325394e-03 - 0.3586339950561523 - -0.3625485897064209 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 6 0 2 3 2. - 1 - 0.0413578003644943 - 1 - 0.4785881042480469 - <_> - - - - <_> - 15 15 5 2 -1. - <_> - 15 16 5 1 2. - 0 - 2.2308749612420797e-03 - -0.6039034724235535 - -8.7199418339878321e-04 - <_> - - <_> - - - - <_> - 0 8 18 12 -1. - <_> - 6 12 6 4 9. - 0 - -0.5416054129600525 - 1 - -0.3253665864467621 - <_> - - - - <_> - 1 6 14 4 -1. - <_> - 8 6 7 4 2. - 0 - 7.9009458422660828e-03 - -0.3641510009765625 - 0.4050160050392151 - <_> - - <_> - - - - <_> - 3 11 6 3 -1. - <_> - 2 12 6 1 3. - 1 - -2.7236728928983212e-03 - 1 - -0.2764418125152588 - <_> - - - - <_> - 5 9 1 3 -1. - <_> - 4 10 1 1 3. - 1 - 2.1041880827397108e-03 - 0.3406811952590942 - -0.4192248880863190 - <_> - - <_> - - - - <_> - 17 10 3 3 -1. - <_> - 18 11 1 3 3. - 1 - 1.2688159476965666e-03 - 1 - -0.5452076792716980 - <_> - - - - <_> - 17 11 1 4 -1. - <_> - 16 12 1 2 2. - 1 - -4.2881062254309654e-03 - 0.3006008863449097 - -0.1523319035768509 - <_> - - <_> - - - - <_> - 1 0 12 9 -1. - <_> - 4 0 6 9 2. - 0 - -4.8890449106693268e-03 - 1 - -0.3766582012176514 - <_> - - - - <_> - 9 3 4 5 -1. - <_> - 10 3 2 5 2. - 0 - 5.0922110676765442e-03 - 0.2180331945419312 - -0.5712652206420898 - <_> - - <_> - - - - <_> - 7 8 6 3 -1. - <_> - 7 9 6 1 3. - 0 - -7.0944731123745441e-03 - 0.5192192196846008 - 1 - <_> - - - - <_> - 7 1 9 6 -1. - <_> - 7 3 9 2 3. - 0 - 0.0254318900406361 - -0.2126024961471558 - 0.3056620061397552 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 2 2 1 2. - 0 - -6.7461907747201622e-05 - 1 - -0.3340674936771393 - <_> - - - - <_> - 13 8 3 5 -1. - <_> - 14 9 1 5 3. - 1 - -8.5350889712572098e-03 - 0.3504346013069153 - -0.0903848335146904 - <_> - - <_> - - - - <_> - 3 16 3 1 -1. - <_> - 4 17 1 1 3. - 1 - -4.1117807850241661e-03 - -0.6968370079994202 - 1 - <_> - - - - <_> - 11 1 4 7 -1. - <_> - 12 1 2 7 2. - 0 - 6.3964081928133965e-03 - 0.1154263988137245 - -0.6664537191390991 - <_> - - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 11 13 1 1 2. - <_> - 12 14 1 1 2. - 0 - 9.8322751000523567e-04 - 1 - 0.3569537997245789 - <_> - - - - <_> - 12 14 3 1 -1. - <_> - 13 14 1 1 3. - 0 - -5.5737968068569899e-04 - 0.2308111041784286 - -0.2886263132095337 - <_> - - <_> - - - - <_> - 17 2 3 1 -1. - <_> - 18 3 1 1 3. - 1 - 2.8798289131373167e-03 - 1 - -0.5992326736450195 - <_> - - - - <_> - 14 2 6 6 -1. - <_> - 14 2 3 3 2. - <_> - 17 5 3 3 2. - 0 - -7.7164517715573311e-03 - 0.3607490062713623 - -0.0818276181817055 - <_> - - <_> - - - - <_> - 12 16 8 4 -1. - <_> - 12 18 8 2 2. - 0 - 3.7285129074007273e-03 - -0.3773201107978821 - 1 - <_> - - - - <_> - 7 11 3 3 -1. - <_> - 6 12 3 1 3. - 1 - -0.0131611097604036 - 0.6702303886413574 - 0.0151145495474339 - <_> - - <_> - - - - <_> - 6 3 8 6 -1. - <_> - 4 5 8 2 3. - 1 - -0.0389661304652691 - 1 - -0.3125221133232117 - <_> - - - - <_> - 1 8 3 8 -1. - <_> - 1 10 3 4 2. - 0 - -5.7413699105381966e-03 - 0.3394747972488403 - -0.1601140946149826 - <_> - - <_> - - - - <_> - 7 0 8 6 -1. - <_> - 9 2 4 6 2. - 1 - 0.1253833025693893 - 1 - 0.7372115254402161 - <_> - - - - <_> - 5 2 7 6 -1. - <_> - 5 5 7 3 2. - 0 - -0.0972431227564812 - 0.5028898119926453 - -0.1328437030315399 - <_> - - <_> - - - - <_> - 10 13 3 1 -1. - <_> - 11 13 1 1 3. - 0 - -2.0128490868955851e-03 - 0.4136789143085480 - 1 - <_> - - - - <_> - 12 12 4 2 -1. - <_> - 12 12 2 1 2. - <_> - 14 13 2 1 2. - 0 - 3.5349070094525814e-03 - -0.1592327058315277 - 0.4405657947063446 - <_> - - <_> - - - - <_> - 6 1 14 19 -1. - <_> - 13 1 7 19 2. - 0 - 0.4484654068946838 - 1 - 0.5942366123199463 - <_> - - - - <_> - 6 9 14 1 -1. - <_> - 13 9 7 1 2. - 0 - -0.0103877801448107 - 0.3039911985397339 - -0.1828735023736954 - <_> - - <_> - - - - <_> - 18 0 2 1 -1. - <_> - 18 0 1 1 2. - 1 - -1.4210389927029610e-03 - -0.4536106884479523 - 1 - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 3.6446070298552513e-03 - 0.1576682031154633 - -0.6260883808135986 - <_> - - <_> - - - - <_> - 5 7 2 3 -1. - <_> - 4 8 2 1 3. - 1 - 3.2253630924969912e-03 - 1 - -0.4141024053096771 - <_> - - - - <_> - 15 12 3 3 -1. - <_> - 14 13 3 1 3. - 1 - 9.8893349058926105e-04 - -0.1075780019164085 - 0.3115688860416412 - <_> - - <_> - - - - <_> - 10 17 4 2 -1. - <_> - 11 17 2 2 2. - 0 - -2.7107829228043556e-03 - -0.7535281777381897 - 1 - <_> - - - - <_> - 8 12 3 3 -1. - <_> - 9 13 1 1 9. - 0 - -6.9264871999621391e-03 - 0.2746442854404449 - -0.1172894984483719 - <_> - - <_> - - - - <_> - 4 1 7 6 -1. - <_> - 4 3 7 2 3. - 0 - -0.0379427708685398 - 0.2693654894828796 - 1 - <_> - - - - <_> - 11 0 6 6 -1. - <_> - 11 2 6 2 3. - 0 - 0.0134864598512650 - -0.3153286874294281 - 0.2578544020652771 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 2 1 2 2. - 0 - 2.7866458985954523e-03 - 1 - -0.6843165755271912 - <_> - - - - <_> - 7 5 4 4 -1. - <_> - 8 5 2 4 2. - 0 - 3.2895719632506371e-03 - 0.1294910013675690 - -0.4447514116764069 - <_> - - <_> - - - - <_> - 1 0 1 3 -1. - <_> - 1 1 1 1 3. - 0 - 1.7910100286826491e-03 - 1 - -0.5623742938041687 - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 4 4 1 2. - 0 - 3.3694170415401459e-03 - -0.0619367696344852 - 0.3679428994655609 - <_> - - <_> - - - - <_> - 18 13 2 5 -1. - <_> - 19 13 1 5 2. - 0 - 6.5897632157430053e-04 - -0.2770572006702423 - 1 - <_> - - - - <_> - 2 11 3 6 -1. - <_> - 3 11 1 6 3. - 0 - -3.2603838917566463e-05 - 0.2742677927017212 - -0.2236953973770142 - <_> - - <_> - - - - <_> - 0 5 2 12 -1. - <_> - 0 9 2 4 3. - 0 - -0.0601757206022739 - -0.7417491078376770 - 1 - <_> - - - - <_> - 11 10 8 5 -1. - <_> - 15 10 4 5 2. - 0 - -0.0212176106870174 - -0.4503475129604340 - 0.1142600029706955 - <_> - - <_> - - - - <_> - 15 11 4 2 -1. - <_> - 16 12 2 2 2. - 1 - -2.2632910404354334e-03 - 1 - -0.3053858876228333 - <_> - - - - <_> - 15 8 4 2 -1. - <_> - 16 9 2 2 2. - 1 - 6.0313078574836254e-03 - 0.2056266069412231 - -0.4068979918956757 - <_> - - <_> - - - - <_> - 5 13 2 1 -1. - <_> - 6 13 1 1 2. - 0 - 5.7578482665121555e-04 - 1 - 0.3509874939918518 - <_> - - - - <_> - 12 13 2 2 -1. - <_> - 13 13 1 2 2. - 0 - -9.3677162658423185e-04 - 0.2161615937948227 - -0.2441577017307281 - <_> - - <_> - - - - <_> - 11 12 8 8 -1. - <_> - 13 12 4 8 2. - 0 - -0.0376265682280064 - -0.5911368131637573 - 1 - <_> - - - - <_> - 3 0 6 10 -1. - <_> - 5 0 2 10 3. - 0 - 4.4729812070727348e-03 - 0.1579227000474930 - -0.3222627937793732 - <_> - - <_> - - - - <_> - 6 14 2 2 -1. - <_> - 6 14 1 2 2. - 1 - -7.1853301487863064e-03 - -0.5951905250549316 - 1 - <_> - - - - <_> - 0 5 19 4 -1. - <_> - 0 7 19 2 2. - 0 - 0.0405202284455299 - -0.0666884630918503 - 0.3403024971485138 - <_> - - <_> - - - - <_> - 17 4 3 2 -1. - <_> - 18 5 1 2 3. - 1 - -6.1968388035893440e-03 - -0.6728746294975281 - 1 - <_> - - - - <_> - 17 3 3 4 -1. - <_> - 18 4 1 4 3. - 1 - 0.0103115299716592 - 0.1068323999643326 - -0.5482596755027771 - -2.0330519676208496 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 13 8 2 -1. - <_> - 7 13 4 2 2. - 0 - -0.0193205196410418 - 1 - -0.3871257007122040 - <_> - - - - <_> - 0 0 2 8 -1. - <_> - 0 4 2 4 2. - 0 - -0.0151264602318406 - 0.6446818113327026 - -0.1272711008787155 - <_> - - <_> - - - - <_> - 0 9 15 6 -1. - <_> - 0 11 15 2 3. - 0 - -0.0601826906204224 - 1 - -0.3081910908222198 - <_> - - - - <_> - 18 14 2 1 -1. - <_> - 18 14 1 1 2. - 1 - -1.3576049823313951e-03 - 0.4802188873291016 - -0.3342868089675903 - <_> - - <_> - - - - <_> - 0 0 4 8 -1. - <_> - 2 0 2 8 2. - 0 - -5.6930771097540855e-03 - 1 - -0.3316608071327209 - <_> - - - - <_> - 0 13 6 2 -1. - <_> - 2 13 2 2 3. - 0 - -8.0942036584019661e-03 - 0.4751748144626617 - -0.0747615620493889 - <_> - - <_> - - - - <_> - 3 18 3 2 -1. - <_> - 3 19 3 1 2. - 0 - 6.8413332337513566e-04 - -0.3574196994304657 - 1 - <_> - - - - <_> - 2 11 15 6 -1. - <_> - 7 13 5 2 9. - 0 - -0.1152058988809586 - 0.2610509097576141 - -0.3177380859851837 - <_> - - <_> - - - - <_> - 7 14 3 3 -1. - <_> - 8 15 1 3 3. - 1 - -9.1124046593904495e-03 - -0.5854070782661438 - 1 - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 8 8 1 2 2. - 0 - 5.4891068430151790e-05 - -0.2298189997673035 - 0.2348290979862213 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 6 10 6 1 3. - 0 - -9.5622539520263672e-03 - 0.3915528059005737 - 1 - <_> - - - - <_> - 5 8 7 3 -1. - <_> - 5 9 7 1 3. - 0 - -8.2032606005668640e-03 - 0.4317995011806488 - -0.2317329049110413 - <_> - - <_> - - - - <_> - 17 9 3 1 -1. - <_> - 18 10 1 1 3. - 1 - -4.0035760030150414e-03 - -0.5870047807693481 - 1 - <_> - - - - <_> - 17 9 3 2 -1. - <_> - 18 10 1 2 3. - 1 - 2.5406230706721544e-03 - 0.1799003034830093 - -0.4168156981468201 - <_> - - <_> - - - - <_> - 11 9 1 3 -1. - <_> - 11 10 1 1 3. - 0 - 1.9435470458120108e-03 - 1 - 0.3034000992774963 - <_> - - - - <_> - 12 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 13 12 1 1 2. - 0 - 8.4362342022359371e-04 - -0.3066104054450989 - 0.2364699989557266 - <_> - - <_> - - - - <_> - 3 6 4 5 -1. - <_> - 4 6 2 5 2. - 0 - -5.3103519603610039e-03 - -0.5630481839179993 - 1 - <_> - - - - <_> - 5 6 4 3 -1. - <_> - 6 6 2 3 2. - 0 - -3.5526719875633717e-03 - -0.5569577217102051 - 0.1502279043197632 - <_> - - <_> - - - - <_> - 0 3 1 6 -1. - <_> - 0 5 1 2 3. - 0 - 7.1414401754736900e-03 - 1 - -0.6762663722038269 - <_> - - - - <_> - 14 12 2 2 -1. - <_> - 14 12 1 1 2. - <_> - 15 13 1 1 2. - 0 - -1.1435860069468617e-03 - 0.3787387907505035 - -0.0744428932666779 - <_> - - <_> - - - - <_> - 3 16 3 3 -1. - <_> - 4 16 1 3 3. - 0 - -3.1177429482340813e-03 - -0.6256858706474304 - 1 - <_> - - - - <_> - 3 1 14 4 -1. - <_> - 3 3 14 2 2. - 0 - -0.0774156227707863 - 0.3983941078186035 - -0.0552623197436333 - <_> - - <_> - - - - <_> - 6 0 14 8 -1. - <_> - 6 0 7 4 2. - <_> - 13 4 7 4 2. - 0 - -0.0392529889941216 - 0.3409483134746552 - 1 - <_> - - - - <_> - 4 0 4 8 -1. - <_> - 4 2 4 4 2. - 0 - 0.0220499709248543 - -0.2441371977329254 - 0.4305087029933929 - <_> - - <_> - - - - <_> - 9 0 8 1 -1. - <_> - 13 0 4 1 2. - 0 - -2.2205871064215899e-03 - 0.2830972075462341 - 1 - <_> - - - - <_> - 14 1 6 1 -1. - <_> - 17 1 3 1 2. - 0 - 2.8649640735238791e-03 - -0.3540188074111938 - 0.2105457037687302 - <_> - - <_> - - - - <_> - 18 18 2 2 -1. - <_> - 18 19 2 1 2. - 0 - 5.8806730521610007e-05 - -0.2701404094696045 - 1 - <_> - - - - <_> - 5 16 2 2 -1. - <_> - 5 16 1 2 2. - 1 - -6.6595021635293961e-03 - -0.5931348204612732 - 0.2189286947250366 - <_> - - <_> - - - - <_> - 2 8 11 3 -1. - <_> - 2 9 11 1 3. - 0 - 0.0169316008687019 - -0.1127962023019791 - 1 - <_> - - - - <_> - 1 8 2 3 -1. - <_> - 1 9 2 1 3. - 0 - 4.7026639804244041e-03 - 0.4921221137046814 - -0.3970288038253784 - <_> - - <_> - - - - <_> - 18 12 2 5 -1. - <_> - 19 12 1 5 2. - 0 - 1.7478819936513901e-03 - -0.2233936935663223 - 1 - <_> - - - - <_> - 19 16 1 3 -1. - <_> - 18 17 1 1 3. - 1 - -2.0893230102956295e-03 - -0.4315781891345978 - 0.2537313997745514 - <_> - - <_> - - - - <_> - 14 9 2 2 -1. - <_> - 14 9 1 2 2. - 1 - 0.0115348501130939 - 1 - -0.7066854238510132 - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 13 11 1 1 2. - <_> - 14 12 1 1 2. - 0 - 8.7350117973983288e-04 - -0.0725091323256493 - 0.3997502923011780 - <_> - - <_> - - - - <_> - 13 12 4 4 -1. - <_> - 14 12 2 4 2. - 0 - -7.2836421895772219e-04 - 1 - -0.2356764972209930 - <_> - - - - <_> - 19 11 1 3 -1. - <_> - 19 12 1 1 3. - 0 - 1.2666890397667885e-03 - 0.2258238941431046 - -0.4231734871864319 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 3 1 2 2. - 0 - -8.4794021677225828e-04 - 1 - -0.2830702960491180 - <_> - - - - <_> - 0 0 20 20 -1. - <_> - 0 0 10 10 2. - <_> - 10 10 10 10 2. - 0 - 0.3621244132518768 - 0.1672423928976059 - -0.7682694792747498 - <_> - - <_> - - - - <_> - 11 12 3 3 -1. - <_> - 10 13 3 1 3. - 1 - -1.9437649752944708e-03 - 1 - -0.2722941935062408 - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 17 1 1 2. - 1 - -4.1159680113196373e-03 - -0.6421130895614624 - 0.1881023049354553 - <_> - - <_> - - - - <_> - 13 10 4 2 -1. - <_> - 13 10 2 1 2. - <_> - 15 11 2 1 2. - 0 - 2.3254039697349072e-03 - 1 - 0.2851688861846924 - <_> - - - - <_> - 15 11 2 2 -1. - <_> - 15 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - -1.4815620379522443e-03 - 0.4257420897483826 - -0.2111361026763916 - <_> - - <_> - - - - <_> - 2 10 3 6 -1. - <_> - 3 10 1 6 3. - 0 - -6.6233296820428222e-05 - 1 - -0.2820585072040558 - <_> - - - - <_> - 0 0 6 9 -1. - <_> - 2 0 2 9 3. - 0 - -0.0337564311921597 - -0.8180304169654846 - 0.1705366969108582 - <_> - - <_> - - - - <_> - 8 17 2 1 -1. - <_> - 8 17 1 1 2. - 1 - -9.4350927975028753e-04 - 0.1527314037084579 - 1 - <_> - - - - <_> - 4 18 8 1 -1. - <_> - 8 18 4 1 2. - 0 - 1.0650219628587365e-03 - -0.4265049099922180 - 0.1523593962192535 - <_> - - <_> - - - - <_> - 4 11 1 4 -1. - <_> - 3 12 1 2 2. - 1 - -1.2905279872938991e-03 - 0.1736539006233215 - 1 - <_> - - - - <_> - 7 11 3 3 -1. - <_> - 6 12 3 1 3. - 1 - 9.6549028530716896e-03 - -0.3972159922122955 - 0.1795317977666855 - <_> - - <_> - - - - <_> - 9 18 4 1 -1. - <_> - 10 18 2 1 2. - 0 - 1.3434770517051220e-03 - 1 - -0.6960932016372681 - <_> - - - - <_> - 0 19 2 1 -1. - <_> - 1 19 1 1 2. - 0 - 5.5220007197931409e-04 - -0.0722587704658508 - 0.3449329137802124 - <_> - - <_> - - - - <_> - 11 6 3 5 -1. - <_> - 12 6 1 5 3. - 0 - 3.5795350559055805e-03 - 1 - -0.4807066917419434 - <_> - - - - <_> - 8 0 12 20 -1. - <_> - 8 0 6 10 2. - <_> - 14 10 6 10 2. - 0 - -0.0105854999274015 - -0.3297558128833771 - 0.1468691974878311 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - 3.5636040847748518e-03 - 1 - -0.6141502261161804 - <_> - - - - <_> - 4 14 16 4 -1. - <_> - 8 14 8 4 2. - 0 - -0.1029829010367393 - -0.7236648201942444 - 0.0844470709562302 - <_> - - <_> - - - - <_> - 7 9 5 4 -1. - <_> - 6 10 5 2 2. - 1 - -0.0296057593077421 - 0.4711360931396484 - 1 - <_> - - - - <_> - 5 12 6 2 -1. - <_> - 5 12 3 2 2. - 1 - -0.0345805995166302 - -0.4312899112701416 - 0.0246234703809023 - <_> - - <_> - - - - <_> - 1 14 4 1 -1. - <_> - 1 14 2 1 2. - 1 - 4.7923368401825428e-03 - 1 - -0.4627079963684082 - <_> - - - - <_> - 4 10 1 3 -1. - <_> - 3 11 1 1 3. - 1 - 1.7058040248230100e-03 - 0.1473857015371323 - -0.3781889081001282 - <_> - - <_> - - - - <_> - 3 10 3 9 -1. - <_> - 4 10 1 9 3. - 0 - -3.3174119889736176e-03 - 0.2792986035346985 - 1 - <_> - - - - <_> - 4 11 3 4 -1. - <_> - 5 11 1 4 3. - 0 - -1.7022279789671302e-03 - 0.2632699012756348 - -0.2512921094894409 - <_> - - <_> - - - - <_> - 5 12 3 2 -1. - <_> - 6 12 1 2 3. - 0 - -8.1695342669263482e-04 - 1 - -0.1285964995622635 - <_> - - - - <_> - 7 12 3 2 -1. - <_> - 8 12 1 2 3. - 0 - -1.4184829778969288e-03 - 0.5885540246963501 - -0.0500851683318615 - <_> - - <_> - - - - <_> - 1 2 12 6 -1. - <_> - 5 2 4 6 3. - 0 - -0.0104785999283195 - 0.1473290026187897 - 1 - <_> - - - - <_> - 9 0 8 3 -1. - <_> - 11 2 4 3 2. - 1 - 0.0319819115102291 - -0.4129954874515533 - 0.3444204926490784 - <_> - - <_> - - - - <_> - 8 1 6 2 -1. - <_> - 8 1 3 2 2. - 1 - 0.0455438494682312 - 1 - 0.4884208142757416 - <_> - - - - <_> - 4 4 15 9 -1. - <_> - 4 7 15 3 3. - 0 - 0.0235740095376968 - -0.4638321995735168 - 0.0374437682330608 - -1.9516259431838989 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 10 8 6 -1. - <_> - 7 10 4 6 2. - 0 - -0.0323471315205097 - 1 - -0.4115316867828369 - <_> - - - - <_> - 11 8 9 9 -1. - <_> - 11 11 9 3 3. - 0 - -0.0748554319143295 - 0.5440948009490967 - -0.2104308009147644 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 2 2 4 3. - 1 - -0.0591647997498512 - 0.4694552123546600 - 1 - <_> - - - - <_> - 3 11 6 3 -1. - <_> - 2 12 6 1 3. - 1 - -5.0734709948301315e-03 - 0.0809333473443985 - -0.4043686985969543 - <_> - - <_> - - - - <_> - 16 12 4 3 -1. - <_> - 18 12 2 3 2. - 0 - 6.6304411739110947e-03 - -0.3194395005702972 - 1 - <_> - - - - <_> - 10 10 2 10 -1. - <_> - 10 15 2 5 2. - 0 - 0.0228042807430029 - -0.3527761101722717 - 0.3635815978050232 - <_> - - <_> - - - - <_> - 5 7 3 4 -1. - <_> - 4 8 3 2 2. - 1 - 3.4148059785366058e-03 - 1 - -0.4213989973068237 - <_> - - - - <_> - 1 9 6 1 -1. - <_> - 3 11 2 1 3. - 1 - -6.0696629807353020e-03 - 0.2819094061851501 - -0.2572798132896423 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 3 1 3 2. - 0 - -3.3271780703216791e-03 - 1 - -0.3338018059730530 - <_> - - - - <_> - 8 10 10 2 -1. - <_> - 8 10 5 1 2. - <_> - 13 11 5 1 2. - 0 - 0.0123812397941947 - 0.0258311200886965 - 0.5820063948631287 - <_> - - <_> - - - - <_> - 5 2 5 6 -1. - <_> - 5 5 5 3 2. - 0 - -0.0785619020462036 - 0.5708081722259521 - 1 - <_> - - - - <_> - 6 1 6 1 -1. - <_> - 6 1 3 1 2. - 1 - -7.6863910071551800e-03 - 0.1909738034009933 - -0.2474946975708008 - <_> - - <_> - - - - <_> - 0 3 1 12 -1. - <_> - 0 7 1 4 3. - 0 - 3.9404830895364285e-03 - 1 - -0.3529588878154755 - <_> - - - - <_> - 0 7 2 1 -1. - <_> - 1 7 1 1 2. - 0 - -7.0624810177832842e-05 - 0.2843806147575378 - -0.1646942049264908 - <_> - - <_> - - - - <_> - 3 5 1 3 -1. - <_> - 2 6 1 1 3. - 1 - -2.2568539716303349e-03 - -0.4618921875953674 - 1 - <_> - - - - <_> - 11 12 2 3 -1. - <_> - 10 13 2 1 3. - 1 - -3.5595949739217758e-03 - 0.2452594041824341 - -0.1898497939109802 - <_> - - <_> - - - - <_> - 10 12 3 3 -1. - <_> - 11 12 1 3 3. - 0 - -3.0113100074231625e-03 - 0.3059439063072205 - 1 - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 10 12 1 1 9. - 0 - -6.2748990021646023e-03 - 0.1471614986658096 - -0.3326522111892700 - <_> - - <_> - - - - <_> - 6 17 4 2 -1. - <_> - 7 17 2 2 2. - 0 - 2.5835279375314713e-03 - 1 - -0.7485389113426208 - <_> - - - - <_> - 12 18 6 2 -1. - <_> - 15 18 3 2 2. - 0 - 3.2576550729572773e-03 - -0.1494961977005005 - 0.2629367113113403 - <_> - - <_> - - - - <_> - 3 17 2 1 -1. - <_> - 3 17 1 1 2. - 1 - -2.6957978843711317e-04 - 1 - -0.2946836054325104 - <_> - - - - <_> - 1 15 4 1 -1. - <_> - 2 16 2 1 2. - 1 - -4.4593680649995804e-03 - -0.4590528905391693 - 0.2223538011312485 - <_> - - <_> - - - - <_> - 18 0 2 2 -1. - <_> - 18 1 2 1 2. - 0 - 2.2841650061309338e-03 - 1 - -0.6381593942642212 - <_> - - - - <_> - 19 0 1 3 -1. - <_> - 19 1 1 1 3. - 0 - -6.7595718428492546e-04 - -0.3175694048404694 - 0.1490307003259659 - <_> - - <_> - - - - <_> - 16 11 3 2 -1. - <_> - 16 11 3 1 2. - 1 - 6.1428439803421497e-03 - 1 - 0.2418702989816666 - <_> - - - - <_> - 16 12 2 3 -1. - <_> - 15 13 2 1 3. - 1 - 2.7392068877816200e-03 - -0.3148753941059113 - 0.2358912974596024 - <_> - - <_> - - - - <_> - 12 0 8 1 -1. - <_> - 16 0 4 1 2. - 0 - -2.0209311041980982e-03 - 0.2538956105709076 - 1 - <_> - - - - <_> - 2 1 9 6 -1. - <_> - 2 4 9 3 2. - 0 - 0.0268921405076981 - -0.3439103960990906 - 0.2301076054573059 - <_> - - <_> - - - - <_> - 17 1 3 2 -1. - <_> - 17 1 3 1 2. - 1 - 0.0146710602566600 - 1 - 0.5951753854751587 - <_> - - - - <_> - 7 5 6 4 -1. - <_> - 7 6 6 2 2. - 0 - -0.0124441199004650 - 0.3733592927455902 - -0.1454063951969147 - <_> - - <_> - - - - <_> - 4 6 6 2 -1. - <_> - 7 6 3 2 2. - 0 - 2.0527220331132412e-03 - -0.2113502025604248 - 1 - <_> - - - - <_> - 11 4 6 6 -1. - <_> - 13 4 2 6 3. - 0 - -0.0170889906585217 - -0.7251623272895813 - 0.2335873991250992 - <_> - - <_> - - - - <_> - 5 7 9 3 -1. - <_> - 5 8 9 1 3. - 0 - -9.8585523664951324e-03 - 0.4539042115211487 - 1 - <_> - - - - <_> - 5 8 9 3 -1. - <_> - 5 9 9 1 3. - 0 - -0.0105411903932691 - 0.3550005853176117 - -0.1711850017309189 - <_> - - <_> - - - - <_> - 1 0 4 3 -1. - <_> - 2 0 2 3 2. - 0 - 4.0034228004515171e-03 - 1 - -0.7043396234512329 - <_> - - - - <_> - 9 9 5 4 -1. - <_> - 9 10 5 2 2. - 0 - -0.0118891401216388 - 0.4043655991554260 - -0.0462636202573776 - <_> - - <_> - - - - <_> - 1 0 6 7 -1. - <_> - 3 0 2 7 3. - 0 - -0.0206857006996870 - -0.6434760093688965 - 1 - <_> - - - - <_> - 16 9 3 2 -1. - <_> - 17 10 1 2 3. - 1 - -7.9243928194046021e-03 - -0.5363292098045349 - 0.1100298985838890 - <_> - - <_> - - - - <_> - 14 12 2 2 -1. - <_> - 14 12 1 1 2. - <_> - 15 13 1 1 2. - 0 - 1.2431150535121560e-03 - 1 - 0.4122002124786377 - <_> - - - - <_> - 0 0 14 1 -1. - <_> - 7 0 7 1 2. - 0 - -4.2312019504606724e-03 - 0.0798876583576202 - -0.3092674016952515 - <_> - - <_> - - - - <_> - 15 11 2 2 -1. - <_> - 15 11 1 2 2. - 1 - 9.8197339102625847e-03 - 1 - -0.6097676157951355 - <_> - - - - <_> - 3 14 12 4 -1. - <_> - 3 14 6 2 2. - <_> - 9 16 6 2 2. - 0 - 0.0454554110765457 - 0.1062114015221596 - -0.6468737125396729 - <_> - - <_> - - - - <_> - 5 2 1 3 -1. - <_> - 4 3 1 1 3. - 1 - 2.6892758905887604e-03 - 1 - -0.4912298917770386 - <_> - - - - <_> - 8 12 3 2 -1. - <_> - 9 13 1 2 3. - 1 - -1.5172710409387946e-03 - 0.1757874935865402 - -0.2681894004344940 - <_> - - <_> - - - - <_> - 14 11 2 2 -1. - <_> - 14 11 1 1 2. - <_> - 15 12 1 1 2. - 0 - 6.2014168361201882e-04 - 1 - 0.2550072968006134 - <_> - - - - <_> - 13 10 7 2 -1. - <_> - 13 11 7 1 2. - 0 - -2.0233519899193197e-04 - 7.2745857760310173e-03 - -0.5081527233123779 - <_> - - <_> - - - - <_> - 7 13 1 2 -1. - <_> - 7 13 1 1 2. - 1 - 3.1760020647197962e-03 - 1 - 0.4384926855564117 - <_> - - - - <_> - 5 12 4 3 -1. - <_> - 6 12 2 3 2. - 0 - -1.2668699491769075e-03 - 0.1634940057992935 - -0.2912816107273102 - <_> - - <_> - - - - <_> - 8 2 2 5 -1. - <_> - 9 2 1 5 2. - 0 - 5.1056100055575371e-03 - 1 - -0.7500135898590088 - <_> - - - - <_> - 1 17 4 2 -1. - <_> - 3 17 2 2 2. - 0 - -1.5026510227471590e-03 - 0.2719883024692535 - -0.0994867980480194 - <_> - - <_> - - - - <_> - 12 17 4 3 -1. - <_> - 13 17 2 3 2. - 0 - -3.6238620523363352e-03 - -0.6039624810218811 - 1 - <_> - - - - <_> - 15 16 5 3 -1. - <_> - 15 17 5 1 3. - 0 - 7.6577658765017986e-03 - 0.1093837991356850 - -0.5300763845443726 - <_> - - <_> - - - - <_> - 15 16 4 3 -1. - <_> - 15 17 4 1 3. - 0 - -3.1830249354243279e-03 - -0.4772489070892334 - 1 - <_> - - - - <_> - 0 17 16 3 -1. - <_> - 4 17 8 3 2. - 0 - 0.0109313298016787 - -0.0430658198893070 - 0.3894585967063904 - <_> - - <_> - - - - <_> - 0 14 2 2 -1. - <_> - 0 14 1 1 2. - <_> - 1 15 1 1 2. - 0 - -1.0047679534181952e-03 - 0.4155359864234924 - 1 - <_> - - - - <_> - 7 2 6 6 -1. - <_> - 7 4 6 2 3. - 0 - -0.0466604307293892 - 0.3015987873077393 - -0.1618438065052032 - <_> - - <_> - - - - <_> - 3 5 1 3 -1. - <_> - 2 6 1 1 3. - 1 - 3.2002381049096584e-03 - 1 - -0.5462177991867065 - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 2 1 2. - 1 - -1.7367519903928041e-03 - -0.2198777943849564 - 0.1960642039775848 - -1.7628519535064697 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 11 5 3 -1. - <_> - 5 12 5 1 3. - 1 - 0.0171605199575424 - -0.3227300941944122 - 1 - <_> - - - - <_> - 16 14 4 6 -1. - <_> - 16 17 4 3 2. - 0 - 0.0145035600289702 - -0.3943862020969391 - 0.5792297720909119 - <_> - - <_> - - - - <_> - 6 13 6 7 -1. - <_> - 8 13 2 7 3. - 0 - -9.0323518961668015e-03 - 1 - -0.4153687059879303 - <_> - - - - <_> - 0 1 12 11 -1. - <_> - 3 1 6 11 2. - 0 - -6.9836131297051907e-03 - 0.3551585972309113 - -0.3817715048789978 - <_> - - <_> - - - - <_> - 6 10 7 3 -1. - <_> - 6 11 7 1 3. - 0 - -0.0192209091037512 - 0.4531590044498444 - 1 - <_> - - - - <_> - 8 0 9 4 -1. - <_> - 8 2 9 2 2. - 0 - -0.0400871597230434 - 0.1722837984561920 - -0.3111056089401245 - <_> - - <_> - - - - <_> - 10 14 10 2 -1. - <_> - 10 15 10 1 2. - 0 - 5.6549701839685440e-03 - -0.4046160876750946 - 1 - <_> - - - - <_> - 0 0 1 18 -1. - <_> - 0 6 1 6 3. - 0 - -0.0116112697869539 - 0.2903423905372620 - -0.2207850962877274 - <_> - - <_> - - - - <_> - 4 13 2 2 -1. - <_> - 4 13 1 1 2. - <_> - 5 14 1 1 2. - 0 - -1.0576159693300724e-03 - 0.3585166931152344 - 1 - <_> - - - - <_> - 8 11 3 6 -1. - <_> - 9 12 1 6 3. - 1 - -1.3360800221562386e-03 - 0.0159689001739025 - -0.4199010133743286 - <_> - - <_> - - - - <_> - 6 7 2 3 -1. - <_> - 5 8 2 1 3. - 1 - 5.2302791737020016e-03 - 1 - -0.4966328144073486 - <_> - - - - <_> - 4 8 3 3 -1. - <_> - 5 8 1 3 3. - 0 - -2.7848479803651571e-03 - -0.5296021103858948 - 0.1553544998168945 - <_> - - <_> - - - - <_> - 1 4 14 1 -1. - <_> - 1 4 7 1 2. - 1 - -0.0256541296839714 - -0.5930917859077454 - 1 - <_> - - - - <_> - 12 13 8 3 -1. - <_> - 14 13 4 3 2. - 0 - -6.8942131474614143e-03 - 0.2431810945272446 - -0.1823194026947021 - <_> - - <_> - - - - <_> - 4 17 2 1 -1. - <_> - 4 17 1 1 2. - 1 - -6.9622750743292272e-05 - 1 - -0.3271628916263580 - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 1 2 2. - 1 - -6.4154611900448799e-03 - -0.5082166790962219 - 0.1954334974288940 - <_> - - <_> - - - - <_> - 3 17 4 2 -1. - <_> - 4 17 2 2 2. - 0 - -6.7164386564400047e-05 - 0.1860219985246658 - 1 - <_> - - - - <_> - 0 7 20 2 -1. - <_> - 5 7 10 2 2. - 0 - 0.0224166903644800 - -0.3928199112415314 - 0.1327912956476212 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 15 9 1 2 2. - 1 - 8.4287580102682114e-03 - 1 - -0.5544756054878235 - <_> - - - - <_> - 3 12 2 2 -1. - <_> - 3 12 1 1 2. - <_> - 4 13 1 1 2. - 0 - -8.7357551092281938e-04 - 0.4715873003005981 - -0.0384924784302711 - <_> - - <_> - - - - <_> - 0 5 2 1 -1. - <_> - 1 5 1 1 2. - 0 - -4.7496971092186868e-05 - 1 - -0.2519702911376953 - <_> - - - - <_> - 17 0 3 2 -1. - <_> - 18 1 1 2 3. - 1 - 4.5816078782081604e-03 - 0.2025039941072464 - -0.6163808107376099 - <_> - - <_> - - - - <_> - 2 8 3 9 -1. - <_> - 3 11 1 3 9. - 0 - -0.0111751500517130 - 1 - -0.2777119874954224 - <_> - - - - <_> - 15 7 4 2 -1. - <_> - 16 8 2 2 2. - 1 - -7.4238609522581100e-03 - -0.5010343790054321 - 0.1931852996349335 - <_> - - <_> - - - - <_> - 4 16 3 3 -1. - <_> - 5 16 1 3 3. - 0 - -3.0201480258256197e-03 - -0.6590424776077271 - 1 - <_> - - - - <_> - 8 14 6 1 -1. - <_> - 10 14 2 1 3. - 0 - -3.0343679245561361e-03 - 0.3196248114109039 - -0.1051291003823280 - <_> - - <_> - - - - <_> - 14 0 6 6 -1. - <_> - 14 0 3 3 2. - <_> - 17 3 3 3 2. - 0 - -0.0109712900593877 - 0.3270700871944427 - 1 - <_> - - - - <_> - 17 2 2 1 -1. - <_> - 17 2 1 1 2. - 1 - 1.2000739661743864e-04 - -0.4167926907539368 - 0.1164520010352135 - <_> - - <_> - - - - <_> - 0 19 20 1 -1. - <_> - 10 19 10 1 2. - 0 - 2.1552699618041515e-03 - 1 - 0.1538939028978348 - <_> - - - - <_> - 0 19 6 1 -1. - <_> - 3 19 3 1 2. - 0 - 1.5970800304785371e-03 - -0.4297927021980286 - 0.1919295042753220 - <_> - - <_> - - - - <_> - 9 17 4 3 -1. - <_> - 10 17 2 3 2. - 0 - -4.3590939603745937e-03 - -0.8661373853683472 - 1 - <_> - - - - <_> - 4 11 3 3 -1. - <_> - 5 12 1 1 9. - 0 - -6.5752048976719379e-03 - 0.3529854118824005 - -0.0726247206330299 - <_> - - <_> - - - - <_> - 17 7 3 3 -1. - <_> - 18 8 1 3 3. - 1 - 3.5486191045492887e-03 - 1 - -0.3614104092121124 - <_> - - - - <_> - 19 1 1 4 -1. - <_> - 18 2 1 2 2. - 1 - 1.7437560018151999e-03 - -0.0402509197592735 - 0.4111959040164948 - <_> - - <_> - - - - <_> - 6 8 2 1 -1. - <_> - 7 8 1 1 2. - 0 - 6.5892767452169210e-05 - 1 - 0.1552398949861526 - <_> - - - - <_> - 5 4 4 4 -1. - <_> - 6 5 2 4 2. - 1 - 0.0122171696275473 - -0.3656722903251648 - 0.2515968978404999 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 9 0 4 7 2. - 0 - 0.0601993091404438 - 1 - -0.6895959973335266 - <_> - - - - <_> - 0 7 5 9 -1. - <_> - 0 10 5 3 3. - 0 - -0.0916843712329865 - -0.6631187200546265 - 0.0948273614048958 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 8.9392811059951782e-04 - 1 - 0.2873100936412811 - <_> - - - - <_> - 15 11 2 2 -1. - <_> - 15 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - -1.1146500473842025e-03 - 0.3612706065177917 - -0.2405422925949097 - <_> - - <_> - - - - <_> - 9 2 6 4 -1. - <_> - 11 2 2 4 3. - 0 - -0.0110427802428603 - -0.7168669104576111 - 1 - <_> - - - - <_> - 0 12 12 8 -1. - <_> - 6 12 6 8 2. - 0 - 0.0377693511545658 - 0.1112534999847412 - -0.5632094740867615 - <_> - - <_> - - - - <_> - 1 0 6 2 -1. - <_> - 3 0 2 2 3. - 0 - 5.5979429744184017e-03 - 1 - -0.5699890851974487 - <_> - - - - <_> - 0 12 4 5 -1. - <_> - 1 12 2 5 2. - 0 - -2.5462140329182148e-03 - 0.2673457860946655 - -0.1052770018577576 - <_> - - <_> - - - - <_> - 2 12 4 4 -1. - <_> - 3 12 2 4 2. - 0 - -1.7929819878190756e-03 - 0.1771212071180344 - 1 - <_> - - - - <_> - 12 11 2 4 -1. - <_> - 13 11 1 4 2. - 0 - -8.9686378487385809e-05 - 0.1676241010427475 - -0.4133665859699249 - <_> - - <_> - - - - <_> - 2 0 1 4 -1. - <_> - 2 2 1 2 2. - 0 - -6.8254990037530661e-04 - 1 - -0.3132705092430115 - <_> - - - - <_> - 6 1 4 9 -1. - <_> - 7 1 2 9 2. - 0 - 4.0599349886178970e-03 - 0.2031262964010239 - -0.4636094868183136 - <_> - - <_> - - - - <_> - 13 10 2 3 -1. - <_> - 13 11 2 1 3. - 0 - 1.5843180008232594e-03 - 1 - 0.2641308903694153 - <_> - - - - <_> - 3 9 15 3 -1. - <_> - 8 10 5 1 9. - 0 - -0.0461016409099102 - 0.2458764016628265 - -0.3115119934082031 - <_> - - <_> - - - - <_> - 15 10 3 1 -1. - <_> - 16 11 1 1 3. - 1 - 1.5759950038045645e-03 - 1 - -0.3659397065639496 - <_> - - - - <_> - 1 0 15 8 -1. - <_> - 1 2 15 4 2. - 0 - 0.0359046310186386 - -0.0133526204153895 - 0.4950073957443237 - <_> - - <_> - - - - <_> - 2 3 15 6 -1. - <_> - 2 6 15 3 2. - 0 - 0.0192305296659470 - 1 - 0.1860356032848358 - <_> - - - - <_> - 6 0 6 6 -1. - <_> - 6 2 6 2 3. - 0 - 0.0134618300944567 - -0.4270431101322174 - 0.1475695073604584 - <_> - - <_> - - - - <_> - 16 9 4 3 -1. - <_> - 16 10 4 1 3. - 0 - 6.3534970395267010e-03 - 1 - -0.5882459282875061 - <_> - - - - <_> - 16 7 4 3 -1. - <_> - 16 8 4 1 3. - 0 - 4.7998740337789059e-03 - 0.1396612972021103 - -0.3694832026958466 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 16 11 1 1 2. - 0 - -9.7894563805311918e-04 - 0.4315659105777740 - 1 - <_> - - - - <_> - 13 11 2 3 -1. - <_> - 13 12 2 1 3. - 0 - 1.8534340197220445e-03 - -0.1905311048030853 - 0.2686879932880402 - <_> - - <_> - - - - <_> - 2 16 2 2 -1. - <_> - 2 16 1 2 2. - 1 - 5.5962381884455681e-04 - 1 - -0.3054575026035309 - <_> - - - - <_> - 3 0 4 7 -1. - <_> - 4 0 2 7 2. - 0 - -8.1787789240479469e-03 - -0.7235335111618042 - 0.1619776934385300 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 16 1 1 2. - <_> - 1 17 1 1 2. - 0 - -6.4591833506710827e-05 - 1 - -0.1612174957990646 - <_> - - - - <_> - 2 0 18 3 -1. - <_> - 8 0 6 3 3. - 0 - -4.2282380163669586e-03 - 0.4244168102741241 - -0.1148820966482162 - <_> - - <_> - - - - <_> - 0 1 1 3 -1. - <_> - 0 2 1 1 3. - 0 - -3.2379399053752422e-03 - -0.8281142711639404 - 1 - <_> - - - - <_> - 10 6 4 4 -1. - <_> - 10 7 4 2 2. - 0 - -4.7763898037374020e-03 - 0.3915700912475586 - -0.0376774296164513 - <_> - - <_> - - - - <_> - 16 4 4 6 -1. - <_> - 16 4 2 3 2. - <_> - 18 7 2 3 2. - 0 - -6.1182728968560696e-03 - 0.3020882904529572 - 1 - <_> - - - - <_> - 11 12 4 2 -1. - <_> - 11 12 2 1 2. - <_> - 13 13 2 1 2. - 0 - 3.1565790995955467e-03 - -0.1904578953981400 - 0.3021968901157379 - -1.8088439702987671 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_lowerbody.xml b/data/haarcascades/haarcascade_lowerbody.xml deleted file mode 100644 index 56fb489..0000000 --- a/data/haarcascades/haarcascade_lowerbody.xml +++ /dev/null @@ -1,15085 +0,0 @@ - - - - - 19 23 - - <_> - - - <_> - - <_> - - - - <_>3 4 12 16 -1. - <_>7 4 4 16 3. - 0 - -0.0168698690831661 - 0.5465741753578186 - -0.6367803812026978 - <_> - - <_> - - - - <_>11 0 2 20 -1. - <_>11 10 2 10 2. - 0 - 2.5349899660795927e-003 - -0.3760549128055573 - 0.3237810134887695 - <_> - - <_> - - - - <_>4 1 4 22 -1. - <_>4 12 4 11 2. - 0 - -0.0247094593942165 - -0.6797912716865540 - 0.2050105929374695 - <_> - - <_> - - - - <_>9 8 7 12 -1. - <_>9 14 7 6 2. - 0 - 0.0824368596076965 - 0.2058863937854767 - -0.8493843078613281 - <_> - - <_> - - - - <_>6 0 6 10 -1. - <_>6 0 3 5 2. - <_>9 5 3 5 2. - 0 - -8.2128931535407901e-004 - 0.3189192116260529 - -0.4646945893764496 - <_> - - <_> - - - - <_>1 18 18 5 -1. - <_>1 18 9 5 2. - 0 - 0.0230169594287872 - 0.1867029964923859 - -0.7033089995384216 - <_> - - <_> - - - - <_>4 20 10 3 -1. - <_>9 20 5 3 2. - 0 - 6.6386149264872074e-003 - 0.1637049019336700 - -0.8460472226142883 - <_> - - <_> - - - - <_>6 17 10 6 -1. - <_>6 20 10 3 2. - 0 - 7.6682120561599731e-004 - -0.3985269069671631 - 0.2311332970857620 - <_> - - <_> - - - - <_>0 0 4 20 -1. - <_>0 10 4 10 2. - 0 - 0.1173167973756790 - 0.1044503971934319 - -0.8851094245910645 - <_> - - <_> - - - - <_>3 0 16 14 -1. - <_>3 7 16 7 2. - 0 - 0.0154212303459644 - -0.2785950899124146 - 0.2892192006111145 - <_> - - <_> - - - - <_>5 1 4 13 -1. - <_>7 1 2 13 2. - 0 - 0.0340189486742020 - -0.1428766995668411 - 0.7780153155326843 - <_> - - <_> - - - - <_>1 8 18 12 -1. - <_>10 8 9 6 2. - <_>1 14 9 6 2. - 0 - 0.0346388705074787 - 0.1864407956600189 - -0.6032484173774719 - <_> - - <_> - - - - <_>2 0 15 21 -1. - <_>7 0 5 21 3. - 0 - -0.3750365972518921 - 0.9278184175491333 - -0.1542160063982010 - <_> - - <_> - - - - <_>1 5 18 18 -1. - <_>10 5 9 9 2. - <_>1 14 9 9 2. - 0 - -0.0560119710862637 - -0.5859106779098511 - 0.1954751014709473 - <_> - - <_> - - - - <_>2 19 15 3 -1. - <_>7 19 5 3 3. - 0 - -1.4878909569233656e-003 - 0.2813934981822968 - -0.4185301065444946 - <_> - - <_> - - - - <_>7 20 12 3 -1. - <_>7 20 6 3 2. - 0 - -0.0144956996664405 - -0.7227396965026856 - 0.0942884609103203 - <_> - - <_> - - - - <_>1 21 14 2 -1. - <_>8 21 7 2 2. - 0 - -5.6178281083703041e-003 - -0.5955196022987366 - 0.1520265042781830 - -1.4308550357818604 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>0 16 18 6 -1. - <_>6 16 6 6 3. - 0 - -3.1839120201766491e-003 - 0.4002513885498047 - -0.6847316026687622 - <_> - - <_> - - - - <_>8 3 4 20 -1. - <_>8 13 4 10 2. - 0 - 3.5989920143038034e-003 - -0.5189595222473145 - 0.3010114133358002 - <_> - - <_> - - - - <_>0 19 18 3 -1. - <_>9 19 9 3 2. - 0 - 0.0188046302646399 - 0.1555491983890533 - -0.8047717213630676 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - 5.2497140131890774e-003 - 0.1378080993890762 - -0.6076750755310059 - <_> - - <_> - - - - <_>2 0 9 5 -1. - <_>5 0 3 5 3. - 0 - -1.4204799663275480e-003 - 0.3231942951679230 - -0.4340746104717255 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - -0.0251743495464325 - -0.7078087925910950 - 0.0931063294410706 - <_> - - <_> - - - - <_>3 9 6 14 -1. - <_>5 9 2 14 3. - 0 - 3.2285219058394432e-003 - -0.3251047134399414 - 0.3357169926166534 - <_> - - <_> - - - - <_>12 3 3 18 -1. - <_>12 12 3 9 2. - 0 - 0.0949934124946594 - 0.0824390873312950 - -0.8754953742027283 - <_> - - <_> - - - - <_>1 14 4 9 -1. - <_>3 14 2 9 2. - 0 - -6.5919090993702412e-003 - -0.7380419969558716 - 0.1385374963283539 - <_> - - <_> - - - - <_>7 15 11 8 -1. - <_>7 17 11 4 2. - 0 - -1.1146620381623507e-003 - 0.1791726946830750 - -0.2795585989952087 - <_> - - <_> - - - - <_>0 7 6 10 -1. - <_>0 7 3 5 2. - <_>3 12 3 5 2. - 0 - 0.0133490199223161 - 0.1305782943964005 - -0.6980267167091370 - <_> - - <_> - - - - <_>10 6 4 13 -1. - <_>10 6 2 13 2. - 0 - -0.0351814515888691 - 0.4653536081314087 - -0.1069877967238426 - <_> - - <_> - - - - <_>5 6 4 13 -1. - <_>7 6 2 13 2. - 0 - 0.0318745896220207 - -0.1356538981199265 - 0.7904788851737976 - -1.1907930374145508 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>8 2 6 8 -1. - <_>8 2 6 4 2. - 1 - -0.0106474300846457 - 0.3807902932167053 - -0.5867233872413635 - <_> - - <_> - - - - <_>0 11 19 12 -1. - <_>0 17 19 6 2. - 0 - -0.0732144936919212 - -0.7955095171928406 - 0.1722325980663300 - <_> - - <_> - - - - <_>0 18 6 5 -1. - <_>3 18 3 5 2. - 0 - 6.0464427806437016e-003 - 0.1653216034173966 - -0.6937664747238159 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 7.3225022060796618e-004 - -0.3324716091156006 - 0.2366997003555298 - <_> - - <_> - - - - <_>0 20 15 3 -1. - <_>5 20 5 3 3. - 0 - -0.0109900804236531 - -0.6913688778877258 - 0.2105827033519745 - <_> - - <_> - - - - <_>9 19 8 4 -1. - <_>9 19 4 4 2. - 0 - -1.5282750246115029e-004 - 0.2030584961175919 - -0.4655165970325470 - <_> - - <_> - - - - <_>0 17 9 6 -1. - <_>3 17 3 6 3. - 0 - 2.4822261184453964e-004 - -0.4212292134761810 - 0.2733530998229981 - <_> - - <_> - - - - <_>14 17 5 6 -1. - <_>14 20 5 3 2. - 0 - -8.4205856546759605e-003 - -0.4374446868896484 - 0.0588318482041359 - <_> - - <_> - - - - <_>2 2 15 14 -1. - <_>7 2 5 14 3. - 0 - -0.3699279129505158 - 0.9107081890106201 - -0.0872075408697128 - <_> - - <_> - - - - <_>14 17 5 6 -1. - <_>14 20 5 3 2. - 0 - 6.1259930953383446e-003 - 0.1188673004508019 - -0.1852017045021057 - <_> - - <_> - - - - <_>0 17 5 6 -1. - <_>0 20 5 3 2. - 0 - -6.0144090093672276e-003 - -0.6305705904960632 - 0.1457718014717102 - <_> - - <_> - - - - <_>3 0 13 8 -1. - <_>3 4 13 4 2. - 0 - 8.5623031482100487e-003 - -0.2936938107013702 - 0.3241134881973267 - <_> - - <_> - - - - <_>0 21 14 2 -1. - <_>7 21 7 2 2. - 0 - -0.0139668500050902 - -0.8065037131309509 - 0.1126779019832611 - <_> - - <_> - - - - <_>8 4 4 15 -1. - <_>9 4 2 15 2. - 0 - -0.0417344681918621 - 0.7749533057212830 - -0.0788663029670715 - <_> - - <_> - - - - <_>1 18 8 5 -1. - <_>5 18 4 5 2. - 0 - -2.7996799326501787e-004 - 0.2778331041336060 - -0.3519608974456787 - <_> - - <_> - - - - <_>8 4 4 15 -1. - <_>9 4 2 15 2. - 0 - 0.0195885691791773 - -0.0657596364617348 - 0.5241413712501526 - <_> - - <_> - - - - <_>7 4 4 15 -1. - <_>8 4 2 15 2. - 0 - 9.2163113877177238e-003 - -0.1552547961473465 - 0.5483539104461670 - <_> - - <_> - - - - <_>11 11 8 8 -1. - <_>15 11 4 4 2. - <_>11 15 4 4 2. - 0 - -0.0214585699141026 - -0.5225530862808228 - 0.0822082683444023 - <_> - - <_> - - - - <_>4 13 6 7 -1. - <_>6 13 2 7 3. - 0 - 3.6805770359933376e-003 - -0.2443412989377976 - 0.3612248897552490 - -1.3129220008850098 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>3 1 8 13 -1. - <_>7 1 4 13 2. - 0 - -8.3544738590717316e-003 - 0.2817318141460419 - -0.4972813129425049 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - -5.5724289268255234e-003 - -0.6550530195236206 - 0.1940605938434601 - <_> - - <_> - - - - <_>0 21 18 2 -1. - <_>9 21 9 2 2. - 0 - -5.7714767754077911e-003 - -0.6223093867301941 - 0.2762239873409271 - <_> - - <_> - - - - <_>7 18 8 5 -1. - <_>7 18 4 5 2. - 0 - 0.0229958891868591 - 0.0197985693812370 - -0.7832453846931458 - <_> - - <_> - - - - <_>4 17 8 6 -1. - <_>8 17 4 6 2. - 0 - -1.1443760013207793e-003 - 0.2810871899127960 - -0.4821484982967377 - <_> - - <_> - - - - <_>10 2 7 10 -1. - <_>10 2 7 5 2. - 1 - -0.2591750919818878 - -0.6821495890617371 - -3.3729869755916297e-004 - <_> - - <_> - - - - <_>2 9 2 14 -1. - <_>3 9 1 14 2. - 0 - -3.0133039690554142e-003 - -0.6570441126823425 - 0.1369359940290451 - <_> - - <_> - - - - <_>15 7 2 16 -1. - <_>15 7 1 16 2. - 0 - 5.4540671408176422e-003 - 0.0869318172335625 - -0.7056797146797180 - <_> - - <_> - - - - <_>1 8 4 15 -1. - <_>3 8 2 15 2. - 0 - 6.6230311058461666e-003 - 0.1663428992033005 - -0.5177295804023743 - <_> - - <_> - - - - <_>14 0 3 14 -1. - <_>14 0 3 7 2. - 1 - -0.0125616695731878 - 0.0902904719114304 - -0.1685097068548203 - <_> - - <_> - - - - <_>9 6 8 9 -1. - <_>9 6 4 9 2. - 1 - 0.0428907386958599 - 0.1297781020402908 - -0.5821806192398071 - <_> - - <_> - - - - <_>8 15 11 8 -1. - <_>8 17 11 4 2. - 0 - -1.3341030571609735e-003 - 0.1369432955980301 - -0.1943780928850174 - <_> - - <_> - - - - <_>5 7 4 10 -1. - <_>7 7 2 10 2. - 0 - -0.0412474609911442 - 0.6854385137557983 - -0.1303945034742355 - <_> - - <_> - - - - <_>10 15 9 8 -1. - <_>10 17 9 4 2. - 0 - -9.1503392904996872e-003 - -0.1189543008804321 - 0.0675766989588737 - <_> - - <_> - - - - <_>0 15 9 8 -1. - <_>0 17 9 4 2. - 0 - -1.7151240026578307e-003 - 0.2647553980350494 - -0.3048745095729828 - <_> - - <_> - - - - <_>2 1 17 18 -1. - <_>2 10 17 9 2. - 0 - 0.2084320038557053 - 0.1240148991346359 - -0.4701411128044128 - <_> - - <_> - - - - <_>2 0 16 2 -1. - <_>2 0 8 2 2. - 1 - 0.0723939687013626 - 0.0969243794679642 - -0.7734774947166443 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - -1.5335980569943786e-003 - 0.1799121946096420 - -0.2578833103179932 - <_> - - <_> - - - - <_>6 0 6 10 -1. - <_>6 0 3 5 2. - <_>9 5 3 5 2. - 0 - 4.8640500754117966e-003 - 0.1139298006892204 - -0.5517386794090271 - <_> - - <_> - - - - <_>10 6 4 7 -1. - <_>10 6 2 7 2. - 0 - -1.6523050144314766e-003 - 0.1515468955039978 - -0.2290167957544327 - <_> - - <_> - - - - <_>2 4 15 11 -1. - <_>7 4 5 11 3. - 0 - 0.0753487572073936 - -0.1463088989257813 - 0.6810588240623474 - <_> - - <_> - - - - <_>15 15 4 8 -1. - <_>15 15 2 8 2. - 0 - -8.2630068063735962e-003 - -0.7278360128402710 - 0.1028101965785027 - <_> - - <_> - - - - <_>0 15 4 8 -1. - <_>2 15 2 8 2. - 0 - -5.5124741047620773e-003 - -0.6305934786796570 - 0.0932577997446060 - -1.3777279853820801 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>5 6 4 11 -1. - <_>7 6 2 11 2. - 0 - -9.3849105760455132e-003 - 0.5250058174133301 - -0.4323106110095978 - <_> - - <_> - - - - <_>3 17 16 4 -1. - <_>7 17 8 4 2. - 0 - -1.3772470410913229e-003 - 0.2069848030805588 - -0.4271875917911530 - <_> - - <_> - - - - <_>9 3 10 8 -1. - <_>9 3 5 8 2. - 1 - 0.0263201091438532 - 0.1582517027854919 - -0.6550952196121216 - <_> - - <_> - - - - <_>12 6 7 10 -1. - <_>12 6 7 5 2. - 1 - -0.0454887598752975 - -0.4951010942459106 - 0.1799882054328919 - <_> - - <_> - - - - <_>2 0 6 5 -1. - <_>5 0 3 5 2. - 0 - -4.7006201930344105e-003 - 0.3397116065025330 - -0.3691770136356354 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -1.3270860072225332e-003 - 0.3090786039829254 - -0.1977175027132034 - <_> - - <_> - - - - <_>2 20 14 3 -1. - <_>9 20 7 3 2. - 0 - 9.3802614137530327e-003 - 0.0944884493947029 - -0.7319809794425964 - <_> - - <_> - - - - <_>4 21 14 2 -1. - <_>4 21 7 2 2. - 0 - 4.3565612286329269e-003 - 0.1152020022273064 - -0.5400810241699219 - <_> - - <_> - - - - <_>8 8 3 14 -1. - <_>9 8 1 14 3. - 0 - 8.1178937107324600e-003 - -0.1595630943775177 - 0.5377786755561829 - <_> - - <_> - - - - <_>8 9 3 14 -1. - <_>9 9 1 14 3. - 0 - -8.7829083204269409e-003 - 0.5663471817970276 - -0.1327937990427017 - <_> - - <_> - - - - <_>5 7 9 16 -1. - <_>5 11 9 8 2. - 0 - 0.0219448506832123 - 0.1590128988027573 - -0.5175182223320007 - <_> - - <_> - - - - <_>11 13 6 8 -1. - <_>11 17 6 4 2. - 0 - 0.0495100989937782 - 0.0110676400363445 - -0.4997246861457825 - <_> - - <_> - - - - <_>4 17 7 6 -1. - <_>4 19 7 2 3. - 0 - -2.1175360307097435e-003 - 0.2649075984954834 - -0.2456562966108322 - <_> - - <_> - - - - <_>2 13 16 8 -1. - <_>10 13 8 4 2. - <_>2 17 8 4 2. - 0 - 0.0103794699534774 - 0.1262409985065460 - -0.4087724089622498 - <_> - - <_> - - - - <_>2 18 15 3 -1. - <_>2 19 15 1 3. - 0 - 2.4977258872240782e-003 - -0.1972302049398422 - 0.3886674940586090 - -1.0618749856948853 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>2 13 15 3 -1. - <_>7 13 5 3 3. - 0 - -6.1489548534154892e-003 - 0.4018748104572296 - -0.5239737033843994 - <_> - - <_> - - - - <_>8 0 11 16 -1. - <_>8 4 11 8 2. - 0 - 0.0504645407199860 - 0.1304967999458313 - -0.5865144133567810 - <_> - - <_> - - - - <_>0 0 19 18 -1. - <_>0 6 19 6 3. - 0 - -0.0559062696993351 - -0.5122954249382019 - 0.2439288944005966 - <_> - - <_> - - - - <_>8 0 11 16 -1. - <_>8 4 11 8 2. - 0 - 0.1428150981664658 - -0.0151801602914929 - -0.6959391832351685 - <_> - - <_> - - - - <_>0 1 4 20 -1. - <_>0 6 4 10 2. - 0 - 0.0411627702414989 - 0.1367373019456863 - -0.6415883898735046 - <_> - - <_> - - - - <_>3 6 15 4 -1. - <_>8 6 5 4 3. - 0 - -0.0164687503129244 - 0.2633903920650482 - -0.2208368033170700 - <_> - - <_> - - - - <_>0 9 18 6 -1. - <_>0 9 9 3 2. - <_>9 12 9 3 2. - 0 - 0.0247631408274174 - 0.1089773997664452 - -0.6521390080451965 - <_> - - <_> - - - - <_>8 5 3 14 -1. - <_>9 5 1 14 3. - 0 - 4.3008858337998390e-003 - -0.1829963028430939 - 0.4361422955989838 - <_> - - <_> - - - - <_>1 0 6 8 -1. - <_>3 0 2 8 3. - 0 - 3.4035290591418743e-003 - -0.2436358034610748 - 0.2822436988353729 - <_> - - <_> - - - - <_>1 6 18 6 -1. - <_>10 6 9 3 2. - <_>1 9 9 3 2. - 0 - -0.0222106203436852 - -0.5464575886726379 - 0.1354296952486038 - <_> - - <_> - - - - <_>7 7 4 15 -1. - <_>8 7 2 15 2. - 0 - -0.0269680190831423 - 0.6530094742774963 - -0.1429730951786041 - <_> - - <_> - - - - <_>11 5 8 10 -1. - <_>11 10 8 5 2. - 0 - -0.0349279083311558 - -0.5234662890434265 - 0.1008457019925118 - <_> - - <_> - - - - <_>0 5 8 10 -1. - <_>0 10 8 5 2. - 0 - 0.0362635813653469 - 0.1511014997959137 - -0.5418584942817688 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - -0.0385267883539200 - -0.8694227933883667 - 0.0371767692267895 - <_> - - <_> - - - - <_>2 16 9 5 -1. - <_>5 16 3 5 3. - 0 - 2.5399168953299522e-003 - -0.2612588107585907 - 0.2727844119071960 - <_> - - <_> - - - - <_>13 11 6 11 -1. - <_>13 11 3 11 2. - 0 - -0.0129311503842473 - -0.4950157999992371 - 0.0913835167884827 - <_> - - <_> - - - - <_>5 8 4 11 -1. - <_>7 8 2 11 2. - 0 - 0.0119813503697515 - -0.1205961033701897 - 0.6384863853454590 - <_> - - <_> - - - - <_>5 7 12 5 -1. - <_>8 7 6 5 2. - 0 - -0.0743204131722450 - 0.4659177958965302 - -0.0402656681835651 - -0.9546145796775818 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>2 11 15 3 -1. - <_>7 11 5 3 3. - 0 - -6.9070039317011833e-003 - 0.4319767951965332 - -0.5171784758567810 - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>7 1 6 3 3. - 0 - -8.1628039479255676e-003 - 0.2711654007434845 - -0.3280341029167175 - <_> - - <_> - - - - <_>5 1 14 4 -1. - <_>5 1 7 4 2. - 1 - 0.0188525095582008 - 0.1554879993200302 - -0.5524392724037170 - <_> - - <_> - - - - <_>1 9 18 10 -1. - <_>10 9 9 5 2. - <_>1 14 9 5 2. - 0 - 0.0340793915092945 - 0.1527225971221924 - -0.6531801223754883 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -3.2038250938057899e-003 - 0.3472546041011810 - -0.2773422896862030 - <_> - - <_> - - - - <_>8 7 4 14 -1. - <_>9 7 2 14 2. - 0 - 2.1410689223557711e-003 - -0.0688882768154144 - 0.2407948970794678 - <_> - - <_> - - - - <_>0 1 19 16 -1. - <_>0 9 19 8 2. - 0 - 0.1462045013904572 - 0.1576687991619110 - -0.5451586246490479 - <_> - - <_> - - - - <_>9 7 3 14 -1. - <_>10 7 1 14 3. - 0 - -6.2386798672378063e-003 - 0.3289957940578461 - -0.1697064042091370 - <_> - - <_> - - - - <_>2 11 14 6 -1. - <_>2 11 7 3 2. - <_>9 14 7 3 2. - 0 - 7.7623138204216957e-003 - 0.1635251045227051 - -0.5187932848930359 - <_> - - <_> - - - - <_>9 7 3 14 -1. - <_>10 7 1 14 3. - 0 - 3.7800080608576536e-003 - -0.1846437007188797 - 0.4866007864475250 - <_> - - <_> - - - - <_>7 7 3 14 -1. - <_>8 7 1 14 3. - 0 - 2.2303969599306583e-003 - -0.1705719977617264 - 0.4774479866027832 - <_> - - <_> - - - - <_>7 17 5 6 -1. - <_>7 20 5 3 2. - 0 - 2.4544890038669109e-003 - -0.3355064988136292 - 0.2536926865577698 - <_> - - <_> - - - - <_>2 6 9 15 -1. - <_>5 11 3 5 9. - 0 - -0.0217074193060398 - -0.4832189083099365 - 0.1607502996921539 - <_> - - <_> - - - - <_>8 0 6 10 -1. - <_>11 0 3 5 2. - <_>8 5 3 5 2. - 0 - 0.0174219701439142 - 0.0798779129981995 - -0.7513725757598877 - -1.1777880191802979 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>3 2 6 21 -1. - <_>5 9 2 7 9. - 0 - 8.8802073150873184e-003 - -0.4468241035938263 - 0.2606253027915955 - <_> - - <_> - - - - <_>9 19 10 4 -1. - <_>9 19 5 4 2. - 0 - -3.0198058811947703e-004 - 0.1525840014219284 - -0.3520650863647461 - <_> - - <_> - - - - <_>2 8 4 8 -1. - <_>4 8 2 8 2. - 0 - 6.7998501472175121e-003 - 0.1225932016968727 - -0.6842743754386902 - <_> - - <_> - - - - <_>11 1 2 22 -1. - <_>11 12 2 11 2. - 0 - 2.7802670374512672e-003 - -0.3368163108825684 - 0.1851855963468552 - <_> - - <_> - - - - <_>0 20 15 3 -1. - <_>5 20 5 3 3. - 0 - -0.0115538202226162 - -0.6987134814262390 - 0.1307960003614426 - <_> - - <_> - - - - <_>10 19 8 4 -1. - <_>10 19 4 4 2. - 0 - -0.0265632905066013 - -0.7027788162231445 - 0.0177913308143616 - <_> - - <_> - - - - <_>1 19 8 4 -1. - <_>5 19 4 4 2. - 0 - -2.5158381322398782e-004 - 0.2477948069572449 - -0.3978793025016785 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - 0.0357483103871346 - -0.0380434393882751 - 0.4797626137733460 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -1.9973930902779102e-003 - 0.2577486932277679 - -0.3199009895324707 - <_> - - <_> - - - - <_>13 2 3 10 -1. - <_>13 2 3 5 2. - 1 - -0.1100711002945900 - -0.4910286962985992 - 0.0231046304106712 - <_> - - <_> - - - - <_>6 4 6 9 -1. - <_>9 4 3 9 2. - 0 - -2.2225650027394295e-003 - 0.2382529973983765 - -0.2841553092002869 - <_> - - <_> - - - - <_>10 7 2 10 -1. - <_>10 7 1 10 2. - 1 - -7.7874241396784782e-003 - -0.3895137012004852 - 0.0557628907263279 - <_> - - <_> - - - - <_>2 1 15 9 -1. - <_>7 1 5 9 3. - 0 - 0.0564158596098423 - -0.0935217216610909 - 0.7256116271018982 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - -3.5978010855615139e-003 - 0.1945219039916992 - -0.1965128034353256 - <_> - - <_> - - - - <_>5 5 6 7 -1. - <_>7 5 2 7 3. - 0 - -7.2716898284852505e-003 - 0.3416987061500549 - -0.2285155951976776 - <_> - - <_> - - - - <_>10 7 2 10 -1. - <_>10 7 1 10 2. - 1 - 7.1941758506000042e-003 - 0.0721488669514656 - -0.4531350135803223 - <_> - - <_> - - - - <_>9 7 10 2 -1. - <_>9 7 10 1 2. - 1 - -4.1034761816263199e-003 - -0.5133674740791321 - 0.1332356929779053 - <_> - - <_> - - - - <_>13 16 4 7 -1. - <_>13 16 2 7 2. - 0 - -3.4210970625281334e-003 - -0.4238378107547760 - 0.0848528072237968 - <_> - - <_> - - - - <_>6 9 4 10 -1. - <_>8 9 2 10 2. - 0 - 4.1890922002494335e-003 - -0.1339855045080185 - 0.4374955892562866 - <_> - - <_> - - - - <_>5 18 14 4 -1. - <_>12 18 7 2 2. - <_>5 20 7 2 2. - 0 - 1.1827970156446099e-003 - -0.2973901033401489 - 0.2212684005498886 - <_> - - <_> - - - - <_>5 1 12 3 -1. - <_>5 1 6 3 2. - 1 - -0.0411965511739254 - -0.5073575973510742 - 0.1324395984411240 - <_> - - <_> - - - - <_>11 0 2 22 -1. - <_>11 11 2 11 2. - 0 - 2.9593890067189932e-003 - -0.1405262053012848 - 0.0613608807325363 - <_> - - <_> - - - - <_>3 15 4 8 -1. - <_>5 15 2 8 2. - 0 - -5.0226859748363495e-003 - -0.4749597012996674 - 0.1206915006041527 - <_> - - <_> - - - - <_>11 0 2 14 -1. - <_>11 0 1 14 2. - 0 - -0.0150978602468967 - 0.2755539119243622 - -0.0537804514169693 - <_> - - <_> - - - - <_>6 0 2 14 -1. - <_>7 0 1 14 2. - 0 - -0.0271909702569246 - 0.7599545717239380 - -0.0747931897640228 - <_> - - <_> - - - - <_>11 0 2 20 -1. - <_>11 0 1 20 2. - 0 - 0.0198938790708780 - -6.7238640040159225e-003 - 0.7397276759147644 - <_> - - <_> - - - - <_>1 19 16 4 -1. - <_>5 19 8 4 2. - 0 - 7.7208830043673515e-003 - 0.0930711627006531 - -0.6578025221824646 - <_> - - <_> - - - - <_>11 0 2 20 -1. - <_>11 0 1 20 2. - 0 - -1.1565990280359983e-003 - 0.0946459174156189 - -0.1640790998935700 - <_> - - <_> - - - - <_>6 0 2 20 -1. - <_>7 0 1 20 2. - 0 - 2.6069190353155136e-003 - -0.1387798041105270 - 0.4734987020492554 - <_> - - <_> - - - - <_>11 0 2 22 -1. - <_>11 11 2 11 2. - 0 - -0.0535861104726791 - -0.3734964132308960 - 0.0257285591214895 - <_> - - <_> - - - - <_>0 18 14 4 -1. - <_>0 18 7 2 2. - <_>7 20 7 2 2. - 0 - 1.5184599906206131e-003 - -0.2247871011495590 - 0.2357459962368012 - <_> - - <_> - - - - <_>1 1 18 8 -1. - <_>10 1 9 4 2. - <_>1 5 9 4 2. - 0 - -0.0370615608990192 - -0.6182711720466614 - 0.0823480635881424 - <_> - - <_> - - - - <_>9 8 10 4 -1. - <_>9 8 10 2 2. - 1 - -0.0263117998838425 - -0.6005765795707703 - 0.0777688696980476 - <_> - - <_> - - - - <_>3 7 15 3 -1. - <_>8 7 5 3 3. - 0 - -0.0879474282264709 - 0.3884103894233704 - -0.0815455988049507 - -1.2834340333938599 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>8 1 6 8 -1. - <_>8 1 6 4 2. - 1 - -0.0290380306541920 - 0.5063595771789551 - -0.4346269965171814 - <_> - - <_> - - - - <_>8 3 3 15 -1. - <_>9 3 1 15 3. - 0 - 3.9044669829308987e-003 - -0.1900978982448578 - 0.5184031724929810 - <_> - - <_> - - - - <_>1 14 9 6 -1. - <_>4 14 3 6 3. - 0 - 2.9162769205868244e-003 - -0.3435131013393402 - 0.2401631027460098 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - -8.9670084416866302e-003 - -0.4266715049743652 - 0.1231655031442642 - <_> - - <_> - - - - <_>0 18 14 3 -1. - <_>0 19 14 1 3. - 0 - -2.4935540277510881e-003 - 0.3608655035495758 - -0.1838146001100540 - <_> - - <_> - - - - <_>5 20 10 3 -1. - <_>5 20 5 3 2. - 0 - -4.8912568017840385e-003 - -0.6474984884262085 - 0.1085670962929726 - <_> - - <_> - - - - <_>9 5 10 6 -1. - <_>9 5 5 6 2. - 1 - -4.0970719419419765e-003 - 0.2214383035898209 - -0.3150557875633240 - <_> - - <_> - - - - <_>2 4 15 14 -1. - <_>7 4 5 14 3. - 0 - 0.0439564995467663 - -0.1078016981482506 - 0.7189350128173828 - <_> - - <_> - - - - <_>0 16 6 7 -1. - <_>3 16 3 7 2. - 0 - 1.9277370302006602e-003 - 0.2024773955345154 - -0.4038108885288239 - <_> - - <_> - - - - <_>7 18 12 5 -1. - <_>11 18 4 5 3. - 0 - 9.4976946711540222e-003 - 0.0434940196573734 - -0.2990806102752686 - <_> - - <_> - - - - <_>1 18 15 3 -1. - <_>1 19 15 1 3. - 0 - 3.5389279946684837e-003 - -0.1510948985815048 - 0.5186424255371094 - <_> - - <_> - - - - <_>4 19 12 4 -1. - <_>8 19 4 4 3. - 0 - -2.2064079530537128e-003 - 0.2300644069910049 - -0.3319100141525269 - <_> - - <_> - - - - <_>5 0 3 12 -1. - <_>5 6 3 6 2. - 0 - 3.9085410535335541e-003 - -0.3425331115722656 - 0.2295188009738922 - <_> - - <_> - - - - <_>3 20 16 3 -1. - <_>3 20 8 3 2. - 0 - 2.6973709464073181e-003 - 0.1197668015956879 - -0.3532198965549469 - <_> - - <_> - - - - <_>0 15 15 8 -1. - <_>0 17 15 4 2. - 0 - -2.1321459207683802e-003 - 0.1820628941059113 - -0.2843410074710846 - <_> - - <_> - - - - <_>12 14 4 7 -1. - <_>12 14 2 7 2. - 0 - 2.6955150533467531e-003 - 0.0745938420295715 - -0.3089664876461029 - <_> - - <_> - - - - <_>1 7 15 3 -1. - <_>6 7 5 3 3. - 0 - -6.0222679749131203e-003 - 0.1804150044918060 - -0.2753166854381561 - <_> - - <_> - - - - <_>10 0 8 4 -1. - <_>10 0 4 4 2. - 0 - -8.9143458753824234e-003 - 0.2416609972715378 - -0.1450612992048264 - <_> - - <_> - - - - <_>0 0 18 4 -1. - <_>6 0 6 4 3. - 0 - 0.0234749391674995 - -0.1235461980104446 - 0.6562504172325134 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - -5.6602950207889080e-003 - -0.3378525078296661 - 0.1119455993175507 - -1.2891789674758911 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>2 4 15 16 -1. - <_>7 4 5 16 3. - 0 - -0.0696990936994553 - 0.5078645944595337 - -0.4756268858909607 - <_> - - <_> - - - - <_>4 0 11 12 -1. - <_>4 6 11 6 2. - 0 - 0.0216727796941996 - -0.2913419902324677 - 0.3456152975559235 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -4.7600260004401207e-003 - 0.3647744059562683 - -0.1955150961875916 - <_> - - <_> - - - - <_>4 21 14 2 -1. - <_>4 21 7 2 2. - 0 - -4.6418169513344765e-003 - -0.5644559264183044 - 0.0984866693615913 - <_> - - <_> - - - - <_>0 21 16 2 -1. - <_>8 21 8 2 2. - 0 - -6.0006938874721527e-003 - -0.6364598274230957 - 0.1437917053699493 - <_> - - <_> - - - - <_>8 7 4 14 -1. - <_>9 7 2 14 2. - 0 - 0.0190734695643187 - -0.0342182889580727 - 0.5504329204559326 - <_> - - <_> - - - - <_>1 0 16 12 -1. - <_>5 0 8 12 2. - 0 - 0.0479933805763721 - -0.0858895108103752 - 0.7679023146629334 - <_> - - <_> - - - - <_>3 17 16 5 -1. - <_>7 17 8 5 2. - 0 - -3.6511209327727556e-003 - 0.2018606960773468 - -0.2983267903327942 - <_> - - <_> - - - - <_>0 13 6 5 -1. - <_>3 13 3 5 2. - 0 - -1.4485770370811224e-003 - -0.5129324793815613 - 0.1369569003582001 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>13 12 3 6 2. - 0 - -3.3748829737305641e-003 - -0.4097512960433960 - 0.1158144026994705 - <_> - - <_> - - - - <_>0 12 6 6 -1. - <_>3 12 3 6 2. - 0 - 2.3586750030517578e-003 - 0.1758242994546890 - -0.4543963074684143 - <_> - - <_> - - - - <_>8 7 4 14 -1. - <_>9 7 2 14 2. - 0 - -0.0220748297870159 - 0.4677563905715942 - -0.0463588312268257 - <_> - - <_> - - - - <_>7 3 4 20 -1. - <_>7 13 4 10 2. - 0 - 7.0953248068690300e-003 - -0.3210053145885468 - 0.2211935073137283 - <_> - - <_> - - - - <_>8 6 4 15 -1. - <_>9 6 2 15 2. - 0 - -2.0119780674576759e-003 - 0.0546017400920391 - -0.0978531017899513 - <_> - - <_> - - - - <_>7 6 4 15 -1. - <_>8 6 2 15 2. - 0 - 4.9847508780658245e-003 - -0.1306326985359192 - 0.5281507968902588 - <_> - - <_> - - - - <_>13 11 6 12 -1. - <_>16 11 3 6 2. - <_>13 17 3 6 2. - 0 - -5.3485459648072720e-003 - -0.4211553931236267 - 0.1192715987563133 - <_> - - <_> - - - - <_>0 11 6 12 -1. - <_>0 11 3 6 2. - <_>3 17 3 6 2. - 0 - 2.5243330746889114e-003 - 0.1210566014051437 - -0.4517711997032166 - <_> - - <_> - - - - <_>11 2 2 14 -1. - <_>11 2 1 14 2. - 0 - -2.4893151130527258e-003 - 0.1224960014224052 - -0.1120098009705544 - <_> - - <_> - - - - <_>6 2 2 14 -1. - <_>7 2 1 14 2. - 0 - 4.3740491382777691e-003 - -0.1054932028055191 - 0.6080614924430847 - <_> - - <_> - - - - <_>11 5 3 14 -1. - <_>12 5 1 14 3. - 0 - -7.3214988224208355e-003 - 0.4761511087417603 - -0.0683909207582474 - -1.0202569961547852 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>2 4 15 10 -1. - <_>7 4 5 10 3. - 0 - -0.0422862395644188 - 0.3674986064434052 - -0.4368098080158234 - <_> - - <_> - - - - <_>4 0 11 22 -1. - <_>4 11 11 11 2. - 0 - 0.0388846993446350 - -0.3543888926506043 - 0.2700921893119812 - <_> - - <_> - - - - <_>0 19 14 4 -1. - <_>0 19 7 2 2. - <_>7 21 7 2 2. - 0 - 1.5983959892764688e-003 - -0.3220062851905823 - 0.2540490031242371 - <_> - - <_> - - - - <_>8 0 4 7 -1. - <_>8 0 2 7 2. - 0 - 3.9249849505722523e-003 - 0.1647730022668839 - -0.4204387962818146 - <_> - - <_> - - - - <_>7 0 4 15 -1. - <_>8 0 2 15 2. - 0 - 1.5850430354475975e-003 - -0.2550337016582489 - 0.3155938982963562 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - -3.4282119013369083e-003 - -0.4007428884506226 - 0.1199335008859634 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -3.3538821153342724e-003 - 0.3045963048934937 - -0.2231103032827377 - <_> - - <_> - - - - <_>12 9 2 14 -1. - <_>12 9 1 14 2. - 0 - -6.7664748057723045e-003 - 0.3239651918411255 - -0.0929323807358742 - <_> - - <_> - - - - <_>5 9 2 14 -1. - <_>6 9 1 14 2. - 0 - -6.7180307814851403e-004 - -0.3245751857757568 - 0.2180899977684021 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - 2.8931829147040844e-003 - 0.1253060996532440 - -0.4858247041702271 - <_> - - <_> - - - - <_>5 0 3 17 -1. - <_>6 0 1 17 3. - 0 - -3.3115309197455645e-003 - 0.4053410887718201 - -0.2243286967277527 - <_> - - <_> - - - - <_>4 20 12 3 -1. - <_>4 20 6 3 2. - 0 - 8.8509041815996170e-003 - 0.1215557008981705 - -0.6024348139762878 - <_> - - <_> - - - - <_>5 2 3 14 -1. - <_>6 2 1 14 3. - 0 - 5.4662628099322319e-003 - -0.1697811931371689 - 0.4075261950492859 - <_> - - <_> - - - - <_>2 3 15 18 -1. - <_>7 3 5 18 3. - 0 - 0.0475593917071819 - -0.0817370414733887 - 0.6986511945724487 - <_> - - <_> - - - - <_>7 1 4 7 -1. - <_>9 1 2 7 2. - 0 - 3.1745019368827343e-003 - 0.1741981059312820 - -0.3723703026771545 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - -5.1520839333534241e-003 - 0.2779935896396637 - -0.2531177997589111 - <_> - - <_> - - - - <_>7 0 4 7 -1. - <_>9 0 2 7 2. - 0 - -4.8141111619770527e-003 - -0.5846602916717529 - 0.1589429974555969 - <_> - - <_> - - - - <_>5 3 12 19 -1. - <_>8 3 6 19 2. - 0 - 0.0219671502709389 - -0.1005275994539261 - 0.4737487137317658 - <_> - - <_> - - - - <_>2 3 12 19 -1. - <_>5 3 6 19 2. - 0 - -6.0128211043775082e-003 - 0.1982019990682602 - -0.4217281937599182 - <_> - - <_> - - - - <_>13 8 2 14 -1. - <_>13 8 1 14 2. - 0 - 4.5052049681544304e-003 - 0.0170648097991943 - -0.4894779026508331 - <_> - - <_> - - - - <_>1 16 12 6 -1. - <_>1 18 12 2 3. - 0 - -1.3302109437063336e-003 - 0.1867033988237381 - -0.2943766117095947 - <_> - - <_> - - - - <_>13 8 2 14 -1. - <_>13 8 1 14 2. - 0 - -7.3667510878294706e-004 - -0.1478880047798157 - 0.1012130007147789 - <_> - - <_> - - - - <_>4 8 2 14 -1. - <_>5 8 1 14 2. - 0 - -1.4602739829570055e-003 - -0.4310795962810516 - 0.1247986033558846 - <_> - - <_> - - - - <_>9 0 10 4 -1. - <_>9 0 5 4 2. - 0 - 0.0341856293380260 - -0.0579336509108543 - 0.5491775870323181 - -1.0336159467697144 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>6 1 7 22 -1. - <_>6 12 7 11 2. - 0 - 0.0306651107966900 - -0.3995327949523926 - 0.3361752927303314 - <_> - - <_> - - - - <_>7 17 10 6 -1. - <_>12 17 5 3 2. - <_>7 20 5 3 2. - 0 - 2.8893710114061832e-003 - -0.3874526917934418 - 0.3056752085685730 - <_> - - <_> - - - - <_>6 6 6 5 -1. - <_>9 6 3 5 2. - 0 - -1.1876110220327973e-003 - 0.2215023934841156 - -0.2963232100009918 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - 4.0173018351197243e-003 - 0.1310252994298935 - -0.4880341887474060 - <_> - - <_> - - - - <_>1 0 15 8 -1. - <_>1 4 15 4 2. - 0 - 4.4870697893202305e-003 - -0.3328250944614410 - 0.1637607067823410 - <_> - - <_> - - - - <_>2 0 16 6 -1. - <_>6 0 8 6 2. - 0 - 0.0325395204126835 - -0.0591645091772079 - 0.6995337009429932 - <_> - - <_> - - - - <_>2 20 10 3 -1. - <_>7 20 5 3 2. - 0 - -8.9682880789041519e-003 - -0.5628954172134399 - 0.1175632029771805 - <_> - - <_> - - - - <_>9 19 10 3 -1. - <_>9 19 5 3 2. - 0 - -6.1743397964164615e-004 - 0.1540825068950653 - -0.2735001146793366 - <_> - - <_> - - - - <_>3 18 6 5 -1. - <_>6 18 3 5 2. - 0 - -3.1031211256049573e-004 - 0.1801355034112930 - -0.3757258951663971 - <_> - - <_> - - - - <_>9 0 6 9 -1. - <_>11 0 2 9 3. - 0 - 0.0287750307470560 - -0.0342009291052818 - 0.2764536142349243 - <_> - - <_> - - - - <_>4 0 6 9 -1. - <_>6 0 2 9 3. - 0 - -6.1647972324863076e-004 - 0.1795312017202377 - -0.3517831861972809 - <_> - - <_> - - - - <_>10 9 4 14 -1. - <_>12 9 2 7 2. - <_>10 16 2 7 2. - 0 - 2.1818219684064388e-003 - -0.1453299969434738 - 0.1490014046430588 - <_> - - <_> - - - - <_>2 11 4 7 -1. - <_>4 11 2 7 2. - 0 - -2.4263889063149691e-003 - -0.4698129892349243 - 0.0952622294425964 - <_> - - <_> - - - - <_>12 13 4 9 -1. - <_>12 13 2 9 2. - 0 - 0.0254382099956274 - -0.0215314608067274 - 0.3326692879199982 - <_> - - <_> - - - - <_>3 13 4 9 -1. - <_>5 13 2 9 2. - 0 - 7.9593079863116145e-004 - 0.1225496977567673 - -0.3567976951599121 - <_> - - <_> - - - - <_>9 13 10 6 -1. - <_>14 13 5 3 2. - <_>9 16 5 3 2. - 0 - 5.6763447355479002e-004 - -0.1369418948888779 - 0.1081883981823921 - <_> - - <_> - - - - <_>2 10 15 10 -1. - <_>7 10 5 10 3. - 0 - 8.7481308728456497e-003 - -0.0908498689532280 - 0.5011237859725952 - <_> - - <_> - - - - <_>10 9 4 14 -1. - <_>12 9 2 7 2. - <_>10 16 2 7 2. - 0 - -4.7468831762671471e-003 - 0.1162924990057945 - -0.0146517297253013 - <_> - - <_> - - - - <_>5 9 4 14 -1. - <_>5 9 2 7 2. - <_>7 16 2 7 2. - 0 - 3.0644210055470467e-003 - -0.2273963987827301 - 0.2778067886829376 - <_> - - <_> - - - - <_>12 16 4 7 -1. - <_>12 16 2 7 2. - 0 - 3.1514191068708897e-003 - 0.0357106812298298 - -0.3229677975177765 - <_> - - <_> - - - - <_>3 16 4 7 -1. - <_>5 16 2 7 2. - 0 - -3.8335900753736496e-003 - -0.4839541912078857 - 0.0926896035671234 - <_> - - <_> - - - - <_>8 17 7 6 -1. - <_>8 19 7 2 3. - 0 - -3.6972409579902887e-003 - 0.1635161042213440 - -0.1465732008218765 - <_> - - <_> - - - - <_>0 20 15 3 -1. - <_>5 20 5 3 3. - 0 - 6.7644561640918255e-003 - 0.0803429409861565 - -0.5027298927307129 - <_> - - <_> - - - - <_>9 15 6 8 -1. - <_>9 19 6 4 2. - 0 - 5.7455507339909673e-004 - -0.1953101009130478 - 0.1239494979381561 - <_> - - <_> - - - - <_>0 0 10 10 -1. - <_>0 0 5 5 2. - <_>5 5 5 5 2. - 0 - 0.0100083099678159 - -0.1503013968467712 - 0.2799001932144165 - <_> - - <_> - - - - <_>9 0 10 3 -1. - <_>9 0 5 3 2. - 0 - -7.2150952182710171e-003 - 0.1688206046819687 - -0.1227921992540360 - <_> - - <_> - - - - <_>0 0 10 3 -1. - <_>5 0 5 3 2. - 0 - 0.0113108502700925 - -0.0967869088053703 - 0.6460161805152893 - <_> - - <_> - - - - <_>10 4 4 10 -1. - <_>10 4 2 10 2. - 1 - 0.1004989966750145 - 0.0206101592630148 - -0.9998857975006104 - <_> - - <_> - - - - <_>9 4 10 4 -1. - <_>9 4 10 2 2. - 1 - 0.0132508603855968 - 0.0931477174162865 - -0.4815680086612701 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>10 8 4 4 9. - 0 - -0.3908531069755554 - 0.7105782032012940 - -0.0165488403290510 - <_> - - <_> - - - - <_>1 4 12 12 -1. - <_>5 8 4 4 9. - 0 - 0.0243321992456913 - 0.1452821046113968 - -0.2836672067642212 - <_> - - <_> - - - - <_>5 6 9 8 -1. - <_>5 8 9 4 2. - 0 - 1.0354409459978342e-003 - -0.2001737058162689 - 0.1879425048828125 - <_> - - <_> - - - - <_>2 1 15 21 -1. - <_>7 8 5 7 9. - 0 - -0.7174789905548096 - 0.6663712859153748 - -0.0526562593877316 - -1.0450899600982666 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>1 16 9 7 -1. - <_>4 16 3 7 3. - 0 - 1.9620559178292751e-003 - -0.4107770025730133 - 0.1889685988426209 - <_> - - <_> - - - - <_>4 5 12 18 -1. - <_>10 5 6 9 2. - <_>4 14 6 9 2. - 0 - 0.0213313698768616 - 0.0925990194082260 - -0.3966045081615448 - <_> - - <_> - - - - <_>1 20 15 3 -1. - <_>6 20 5 3 3. - 0 - -0.0230374503880739 - -0.7229393720626831 - 0.0964117199182510 - <_> - - <_> - - - - <_>3 4 16 13 -1. - <_>7 4 8 13 2. - 0 - -0.0505212284624577 - 0.1830200999975205 - -0.1948277950286865 - <_> - - <_> - - - - <_>9 3 10 8 -1. - <_>9 3 5 8 2. - 1 - 0.0253309197723866 - 0.1033475995063782 - -0.5801829099655151 - <_> - - <_> - - - - <_>11 19 8 4 -1. - <_>11 19 4 4 2. - 0 - -4.3120220652781427e-004 - 0.1337451934814453 - -0.2130098044872284 - <_> - - <_> - - - - <_>0 19 8 4 -1. - <_>4 19 4 4 2. - 0 - -1.4295669643615838e-005 - 0.1842049062252045 - -0.3030023872852325 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - -2.8645719867199659e-003 - 0.1737179011106491 - -0.2161282002925873 - <_> - - <_> - - - - <_>6 0 6 22 -1. - <_>6 0 3 11 2. - <_>9 11 3 11 2. - 0 - 0.0103225102648139 - 0.1107133030891419 - -0.4240294992923737 - <_> - - <_> - - - - <_>8 7 3 14 -1. - <_>9 7 1 14 3. - 0 - 0.0138795096427202 - -0.1099329963326454 - 0.5545889735221863 - <_> - - <_> - - - - <_>5 8 2 14 -1. - <_>6 8 1 14 2. - 0 - -1.7010340234264731e-003 - -0.3140952885150909 - 0.1547477990388870 - <_> - - <_> - - - - <_>13 11 3 10 -1. - <_>13 16 3 5 2. - 0 - -2.7375848731026053e-004 - 0.1467469036579132 - -0.1281761974096298 - <_> - - <_> - - - - <_>1 0 16 5 -1. - <_>5 0 8 5 2. - 0 - 0.0399773791432381 - -0.0635403394699097 - 0.6068580150604248 - <_> - - <_> - - - - <_>9 0 10 7 -1. - <_>9 0 5 7 2. - 0 - -0.0126633998006582 - 0.1098226010799408 - -0.1270720958709717 - <_> - - <_> - - - - <_>0 0 18 23 -1. - <_>9 0 9 23 2. - 0 - 0.1018676012754440 - 0.0885058715939522 - -0.5716562271118164 - <_> - - <_> - - - - <_>5 8 12 15 -1. - <_>9 13 4 5 9. - 0 - -1.0695089586079121e-003 - 0.0345948897302151 - -0.0996183082461357 - <_> - - <_> - - - - <_>3 0 6 7 -1. - <_>5 0 2 7 3. - 0 - -3.4467370714992285e-003 - 0.2287151962518692 - -0.1966446936130524 - <_> - - <_> - - - - <_>5 8 12 15 -1. - <_>9 13 4 5 9. - 0 - -0.1232940033078194 - -0.1082564964890480 - 0.0247283894568682 - <_> - - <_> - - - - <_>5 2 4 13 -1. - <_>7 2 2 13 2. - 0 - -0.0588325895369053 - 0.5579158067703247 - -0.0776306763291359 - <_> - - <_> - - - - <_>3 11 14 2 -1. - <_>3 11 7 2 2. - 0 - 9.7795920446515083e-003 - 0.0949514880776405 - -0.5376737117767334 - <_> - - <_> - - - - <_>2 12 15 7 -1. - <_>7 12 5 7 3. - 0 - 0.0111165698617697 - -0.0892886072397232 - 0.4669542908668518 - <_> - - <_> - - - - <_>5 8 12 15 -1. - <_>9 13 4 5 9. - 0 - -0.0153982602059841 - 0.0904324874281883 - -0.1223379969596863 - <_> - - <_> - - - - <_>0 14 15 9 -1. - <_>5 14 5 9 3. - 0 - 5.8570769615471363e-003 - 0.1085970997810364 - -0.4096176028251648 - <_> - - <_> - - - - <_>6 15 12 8 -1. - <_>9 15 6 8 2. - 0 - 0.0661747530102730 - -4.4282642193138599e-003 - -0.8805553913116455 - <_> - - <_> - - - - <_>1 15 12 8 -1. - <_>4 15 6 8 2. - 0 - -0.0106364898383617 - -0.4454157054424286 - 0.1095374003052712 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - -0.0313635990023613 - 0.8054689168930054 - -0.0498838908970356 - <_> - - <_> - - - - <_>4 5 4 14 -1. - <_>5 5 2 14 2. - 0 - 9.8021561279892921e-004 - -0.2342832982540131 - 0.1693440973758698 - <_> - - <_> - - - - <_>11 5 3 14 -1. - <_>12 5 1 14 3. - 0 - 5.3463829681277275e-003 - -0.1072918027639389 - 0.2544754147529602 - <_> - - <_> - - - - <_>1 10 6 9 -1. - <_>3 10 2 9 3. - 0 - -5.1919990219175816e-003 - -0.5149661898612976 - 0.0851181373000145 - <_> - - <_> - - - - <_>2 8 16 10 -1. - <_>6 8 8 10 2. - 0 - 0.0187216494232416 - -0.0840522125363350 - 0.4783689975738525 - <_> - - <_> - - - - <_>6 17 6 6 -1. - <_>6 20 6 3 2. - 0 - 3.7875440903007984e-003 - -0.2314565926790237 - 0.1605298966169357 - <_> - - <_> - - - - <_>1 10 18 10 -1. - <_>10 10 9 5 2. - <_>1 15 9 5 2. - 0 - 6.8765478208661079e-003 - 0.0965593829751015 - -0.2383296042680740 - <_> - - <_> - - - - <_>6 0 7 4 -1. - <_>6 2 7 2 2. - 0 - -5.4661519825458527e-003 - -0.3787173032760620 - 0.0878514871001244 - <_> - - <_> - - - - <_>0 6 19 3 -1. - <_>0 7 19 1 3. - 0 - -0.0158294495195150 - 0.5215951204299927 - -0.0739168673753738 - <_> - - <_> - - - - <_>9 11 6 6 -1. - <_>9 11 3 6 2. - 1 - 0.0127719901502132 - 0.1065872982144356 - -0.3285045921802521 - <_> - - <_> - - - - <_>7 0 9 5 -1. - <_>10 0 3 5 3. - 0 - 0.0470007807016373 - -0.0295480005443096 - 0.4846934974193573 - <_> - - <_> - - - - <_>0 3 9 4 -1. - <_>0 5 9 2 2. - 0 - 1.1224800255149603e-003 - -0.2139565944671631 - 0.1540776044130325 - <_> - - <_> - - - - <_>1 18 17 2 -1. - <_>1 19 17 1 2. - 0 - -1.0136750061064959e-003 - 0.2357473969459534 - -0.1453679949045181 - <_> - - <_> - - - - <_>7 3 4 8 -1. - <_>9 3 2 8 2. - 0 - 5.2841319702565670e-003 - 0.0805362164974213 - -0.3641724884510040 - <_> - - <_> - - - - <_>9 9 2 14 -1. - <_>9 9 1 14 2. - 0 - -0.0176086891442537 - 0.5385882258415222 - -0.0357418507337570 - <_> - - <_> - - - - <_>8 8 3 14 -1. - <_>9 8 1 14 3. - 0 - 0.0347106084227562 - -0.0432614609599113 - 0.7781760096549988 - <_> - - <_> - - - - <_>10 1 9 4 -1. - <_>10 3 9 2 2. - 0 - 0.0164503492414951 - 0.0418150909245014 - -0.3491267859935761 - -1.0599969625473022 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>0 12 10 3 -1. - <_>5 12 5 3 2. - 0 - -1.7846419941633940e-003 - 0.2201481014490128 - -0.3691265881061554 - <_> - - <_> - - - - <_>8 6 4 12 -1. - <_>8 12 4 6 2. - 0 - -6.1350408941507339e-004 - -0.3069599866867065 - 0.0977177917957306 - <_> - - <_> - - - - <_>3 12 4 7 -1. - <_>5 12 2 7 2. - 0 - -2.5726810563355684e-003 - -0.3778905868530273 - 0.1704214960336685 - <_> - - <_> - - - - <_>6 17 12 6 -1. - <_>12 17 6 3 2. - <_>6 20 6 3 2. - 0 - 8.8661757763475180e-004 - -0.3792907893657684 - 0.0932899713516235 - <_> - - <_> - - - - <_>0 16 18 6 -1. - <_>9 16 9 6 2. - 0 - 0.0357162393629551 - 0.0731693133711815 - -0.6179289817810059 - <_> - - <_> - - - - <_>12 0 4 14 -1. - <_>14 0 2 7 2. - <_>12 7 2 7 2. - 0 - 0.0351628400385380 - -0.0123282503336668 - 0.4489463865756989 - <_> - - <_> - - - - <_>1 21 14 2 -1. - <_>8 21 7 2 2. - 0 - -5.8216741308569908e-003 - -0.4950199127197266 - 0.0880059525370598 - <_> - - <_> - - - - <_>9 19 8 4 -1. - <_>9 19 4 4 2. - 0 - -7.7909301035106182e-004 - 0.1115411967039108 - -0.2831655144691467 - <_> - - <_> - - - - <_>1 0 12 4 -1. - <_>5 0 4 4 3. - 0 - -6.8164491094648838e-003 - 0.1843418031930924 - -0.2372706979513168 - <_> - - <_> - - - - <_>10 1 8 5 -1. - <_>10 1 4 5 2. - 0 - 9.0218139812350273e-003 - -0.0537735596299171 - 0.2617498934268951 - <_> - - <_> - - - - <_>0 13 6 10 -1. - <_>2 13 2 10 3. - 0 - -6.7481878213584423e-003 - -0.5047510862350464 - 0.0766144171357155 - <_> - - <_> - - - - <_>8 9 3 14 -1. - <_>9 9 1 14 3. - 0 - 7.5771231204271317e-003 - -0.1192611008882523 - 0.3421041965484619 - <_> - - <_> - - - - <_>9 7 10 2 -1. - <_>9 7 10 1 2. - 1 - -4.6335519291460514e-003 - -0.4908828139305115 - 0.0695420205593109 - <_> - - <_> - - - - <_>2 16 15 3 -1. - <_>7 16 5 3 3. - 0 - 4.1346959769725800e-003 - -0.0815914273262024 - 0.4787966012954712 - <_> - - <_> - - - - <_>5 1 8 17 -1. - <_>9 1 4 17 2. - 0 - -9.8444558680057526e-003 - 0.2012421041727066 - -0.2376928031444550 - <_> - - <_> - - - - <_>9 19 8 4 -1. - <_>9 19 4 4 2. - 0 - -0.0348970703780651 - -0.9102467894554138 - 0.0185795407742262 - <_> - - <_> - - - - <_>2 19 8 4 -1. - <_>6 19 4 4 2. - 0 - -3.5042490344494581e-004 - 0.1247946992516518 - -0.3071714937686920 - <_> - - <_> - - - - <_>10 0 8 7 -1. - <_>10 0 4 7 2. - 0 - -9.4668623059988022e-003 - 0.1133294999599457 - -0.1611589044332504 - <_> - - <_> - - - - <_>1 0 8 7 -1. - <_>5 0 4 7 2. - 0 - 0.0220534093677998 - -0.0797844007611275 - 0.6073901057243347 - <_> - - <_> - - - - <_>12 16 7 4 -1. - <_>12 18 7 2 2. - 0 - -7.2947797889355570e-005 - 0.1444911956787109 - -0.1370615065097809 - <_> - - <_> - - - - <_>7 0 4 14 -1. - <_>9 0 2 14 2. - 0 - -7.5134839862585068e-003 - -0.3074442148208618 - 0.1027908027172089 - <_> - - <_> - - - - <_>2 18 15 3 -1. - <_>2 19 15 1 3. - 0 - 0.0103119397535920 - -0.0702461972832680 - 0.4830701053142548 - <_> - - <_> - - - - <_>7 1 4 7 -1. - <_>9 1 2 7 2. - 0 - 9.4670448452234268e-003 - 0.0702818036079407 - -0.4706951975822449 - <_> - - <_> - - - - <_>11 5 3 15 -1. - <_>12 5 1 15 3. - 0 - -0.0301162395626307 - 0.5237855911254883 - -0.0371096692979336 - <_> - - <_> - - - - <_>0 10 6 10 -1. - <_>0 10 3 5 2. - <_>3 15 3 5 2. - 0 - -0.0126678496599197 - -0.6082589030265808 - 0.0504446700215340 - <_> - - <_> - - - - <_>11 5 3 15 -1. - <_>12 5 1 15 3. - 0 - 2.2987429983913898e-003 - -0.1180867999792099 - 0.1739389002323151 - <_> - - <_> - - - - <_>5 5 3 15 -1. - <_>6 5 1 15 3. - 0 - 2.5533209554851055e-003 - -0.1662597954273224 - 0.1976895928382874 - <_> - - <_> - - - - <_>6 5 12 12 -1. - <_>6 5 6 12 2. - 0 - -0.3321819901466370 - -0.9540778994560242 - 4.1291080415248871e-003 - <_> - - <_> - - - - <_>1 4 12 16 -1. - <_>7 4 6 16 2. - 0 - 5.4485369473695755e-003 - -0.0912205427885056 - 0.3983474969863892 - <_> - - <_> - - - - <_>11 4 6 7 -1. - <_>13 4 2 7 3. - 0 - 4.7633191570639610e-003 - -0.1206988990306854 - 0.1616933941841126 - <_> - - <_> - - - - <_>1 7 4 16 -1. - <_>1 7 2 8 2. - <_>3 15 2 8 2. - 0 - 4.4371229596436024e-003 - 0.0859281867742538 - -0.4442718923091888 - <_> - - <_> - - - - <_>11 1 2 22 -1. - <_>11 12 2 11 2. - 0 - 2.7019889093935490e-003 - -0.1951121985912323 - 0.0711416602134705 - <_> - - <_> - - - - <_>1 18 14 3 -1. - <_>1 19 14 1 3. - 0 - -1.4219670556485653e-003 - 0.1908950060606003 - -0.1888048946857452 - <_> - - <_> - - - - <_>7 18 12 5 -1. - <_>11 18 4 5 3. - 0 - -6.9531630724668503e-003 - -0.2619152069091797 - 0.0774881467223167 - <_> - - <_> - - - - <_>1 0 16 19 -1. - <_>5 0 8 19 2. - 0 - -0.2655436098575592 - 0.4789358079433441 - -0.0788302570581436 - <_> - - <_> - - - - <_>6 17 12 6 -1. - <_>9 17 6 6 2. - 0 - 5.4960828274488449e-003 - 0.0647488087415695 - -0.4089879095554352 - <_> - - <_> - - - - <_>7 11 8 4 -1. - <_>7 11 4 4 2. - 1 - 0.0160609297454357 - 0.0948685035109520 - -0.3504076898097992 - <_> - - <_> - - - - <_>10 9 3 14 -1. - <_>11 9 1 14 3. - 0 - -3.5279421135783195e-003 - 0.2270454019308090 - -0.1501103937625885 - <_> - - <_> - - - - <_>2 11 15 8 -1. - <_>7 11 5 8 3. - 0 - 0.0151897203177214 - -0.0860336422920227 - 0.5037524104118347 - <_> - - <_> - - - - <_>11 6 7 8 -1. - <_>11 6 7 4 2. - 1 - 9.8117031157016754e-003 - 0.0919458568096161 - -0.2713471055030823 - <_> - - <_> - - - - <_>8 6 8 7 -1. - <_>8 6 4 7 2. - 1 - -8.9835934340953827e-003 - -0.3572193086147308 - 0.1156433001160622 - <_> - - <_> - - - - <_>10 9 3 14 -1. - <_>11 9 1 14 3. - 0 - 0.0254724305123091 - -0.0388618782162666 - 0.5070732235908508 - <_> - - <_> - - - - <_>6 9 3 14 -1. - <_>7 9 1 14 3. - 0 - 1.3594819465652108e-003 - -0.1512742042541504 - 0.2333243936300278 - <_> - - <_> - - - - <_>7 0 6 12 -1. - <_>7 0 3 12 2. - 0 - 0.0146731296554208 - 0.0763864815235138 - -0.4312626123428345 - <_> - - <_> - - - - <_>5 2 3 16 -1. - <_>6 2 1 16 3. - 0 - -0.0217572394758463 - 0.6030660867691040 - -0.0579266697168350 - -1.0216469764709473 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>1 4 15 7 -1. - <_>6 4 5 7 3. - 0 - -0.0191228501498699 - 0.2142305970191956 - -0.4017831087112427 - <_> - - <_> - - - - <_>12 13 4 8 -1. - <_>12 17 4 4 2. - 0 - -4.0749661275185645e-004 - 0.1083780005574226 - -0.0978470072150230 - <_> - - <_> - - - - <_>2 11 12 12 -1. - <_>6 15 4 4 9. - 0 - 0.0184195600450039 - 0.0948170125484467 - -0.4482589960098267 - <_> - - <_> - - - - <_>12 15 5 6 -1. - <_>12 18 5 3 2. - 0 - -3.0946850893087685e-004 - 0.1156722009181976 - -0.0692913383245468 - <_> - - <_> - - - - <_>0 0 19 16 -1. - <_>0 8 19 8 2. - 0 - 0.0244168303906918 - -0.2640377879142761 - 0.1458850950002670 - <_> - - <_> - - - - <_>4 20 15 3 -1. - <_>9 20 5 3 3. - 0 - 3.9483308792114258e-003 - 0.0787035673856735 - -0.3977065086364746 - <_> - - <_> - - - - <_>9 0 4 8 -1. - <_>9 0 4 4 2. - 1 - 0.0154980598017573 - -0.0686233714222908 - 0.6359875798225403 - <_> - - <_> - - - - <_>5 15 12 6 -1. - <_>11 15 6 3 2. - <_>5 18 6 3 2. - 0 - 0.0103973699733615 - 0.0531162582337856 - -0.2475759983062744 - <_> - - <_> - - - - <_>2 15 12 6 -1. - <_>2 15 6 3 2. - <_>8 18 6 3 2. - 0 - 1.0350650409236550e-003 - -0.2295361012220383 - 0.2162367999553680 - <_> - - <_> - - - - <_>8 0 9 5 -1. - <_>11 0 3 5 3. - 0 - -6.9717521546408534e-004 - 0.1633094996213913 - -0.2793000042438507 - <_> - - <_> - - - - <_>0 19 14 4 -1. - <_>0 19 7 2 2. - <_>7 21 7 2 2. - 0 - 1.1055100476369262e-003 - -0.2672117054462433 - 0.1380949020385742 - <_> - - <_> - - - - <_>1 14 18 7 -1. - <_>1 14 9 7 2. - 0 - 0.0181287601590157 - 0.0786025226116180 - -0.3374832868576050 - <_> - - <_> - - - - <_>5 1 8 8 -1. - <_>5 1 4 4 2. - <_>9 5 4 4 2. - 0 - -1.4303029747679830e-003 - 0.1566804945468903 - -0.2542249858379364 - <_> - - <_> - - - - <_>9 6 6 12 -1. - <_>9 6 3 12 2. - 0 - 0.0106502203270793 - -0.0416386015713215 - 0.3263407051563263 - <_> - - <_> - - - - <_>2 0 14 4 -1. - <_>9 0 7 4 2. - 0 - -1.0680139530450106e-003 - 0.1799698024988174 - -0.2067306041717529 - <_> - - <_> - - - - <_>4 20 15 3 -1. - <_>9 20 5 3 3. - 0 - -8.0095082521438599e-003 - -0.2877897918224335 - 0.0754924491047859 - <_> - - <_> - - - - <_>0 20 15 3 -1. - <_>5 20 5 3 3. - 0 - -0.0118575599044561 - -0.5548521280288696 - 0.0474650003015995 - <_> - - <_> - - - - <_>2 6 16 9 -1. - <_>6 6 8 9 2. - 0 - -0.1944015026092529 - 0.4956459999084473 - -0.0685222670435905 - <_> - - <_> - - - - <_>4 6 6 12 -1. - <_>7 6 3 12 2. - 0 - 0.0127861695364118 - -0.0582010112702847 - 0.5119485855102539 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 1.1360739590600133e-003 - -0.2121652960777283 - 0.1463954001665115 - <_> - - <_> - - - - <_>4 7 4 9 -1. - <_>6 7 2 9 2. - 0 - -3.7541511119343340e-004 - 0.1140606030821800 - -0.2793666124343872 - <_> - - <_> - - - - <_>13 6 2 16 -1. - <_>13 6 1 16 2. - 0 - 6.2142009846866131e-003 - 0.0285687893629074 - -0.3248505890369415 - <_> - - <_> - - - - <_>1 5 12 9 -1. - <_>7 5 6 9 2. - 0 - 4.5166439376771450e-003 - -0.0955563783645630 - 0.3603233993053436 - <_> - - <_> - - - - <_>13 6 2 16 -1. - <_>13 6 1 16 2. - 0 - -1.7354219453409314e-003 - -0.0808048769831657 - 0.0538515709340572 - <_> - - <_> - - - - <_>4 6 2 16 -1. - <_>5 6 1 16 2. - 0 - -6.9608418270945549e-003 - -0.6013150811195374 - 0.0455094911158085 - <_> - - <_> - - - - <_>12 0 3 15 -1. - <_>13 0 1 15 3. - 0 - 8.7833311408758163e-003 - -0.0944979712367058 - 0.3192416131496429 - <_> - - <_> - - - - <_>4 0 3 15 -1. - <_>5 0 1 15 3. - 0 - -2.0243569742888212e-003 - 0.2673755884170532 - -0.1167927980422974 - <_> - - <_> - - - - <_>6 2 8 8 -1. - <_>8 2 4 8 2. - 0 - 5.6362948380410671e-003 - 0.0464910902082920 - -0.2398225963115692 - <_> - - <_> - - - - <_>6 0 6 5 -1. - <_>9 0 3 5 2. - 0 - -2.1751220338046551e-003 - -0.3183174133300781 - 0.1163455024361610 - <_> - - <_> - - - - <_>4 7 11 16 -1. - <_>4 11 11 8 2. - 0 - 0.0254248902201653 - 0.0756000578403473 - -0.3735963106155396 - <_> - - <_> - - - - <_>7 8 5 8 -1. - <_>7 12 5 4 2. - 0 - 3.9950129576027393e-004 - -0.2620686888694763 - 0.1434555947780609 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -3.9724060334265232e-003 - 0.2039508968591690 - -0.1189631000161171 - <_> - - <_> - - - - <_>1 18 17 3 -1. - <_>1 19 17 1 3. - 0 - 2.4637179449200630e-003 - -0.1368733942508698 - 0.3409825861454010 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - 0.0143977096304297 - 0.0248468890786171 - -0.6541594862937927 - <_> - - <_> - - - - <_>1 21 14 2 -1. - <_>8 21 7 2 2. - 0 - -1.4848919818177819e-005 - 0.1388493031263351 - -0.2107747942209244 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -0.0383395105600357 - 0.5866839289665222 - -0.0362458601593971 - <_> - - <_> - - - - <_>2 16 5 6 -1. - <_>2 19 5 3 2. - 0 - -5.4605712648481131e-004 - 0.2125933021306992 - -0.1379106938838959 - <_> - - <_> - - - - <_>13 11 5 12 -1. - <_>13 15 5 4 3. - 0 - 0.0130364997312427 - 0.0506199710071087 - -0.2315009981393814 - <_> - - <_> - - - - <_>1 9 16 3 -1. - <_>1 10 16 1 3. - 0 - -2.4273560848087072e-003 - 0.2430299967527390 - -0.1131595000624657 - <_> - - <_> - - - - <_>7 6 5 9 -1. - <_>7 9 5 3 3. - 0 - -6.3351681455969810e-003 - -0.3554948866367340 - 0.0949484035372734 - <_> - - <_> - - - - <_>6 0 7 14 -1. - <_>6 7 7 7 2. - 0 - -0.0575108602643013 - 0.4937813878059387 - -0.0606641210615635 - <_> - - <_> - - - - <_>11 16 6 7 -1. - <_>13 16 2 7 3. - 0 - 6.8376341369003057e-004 - -0.1941725015640259 - 0.1423459053039551 - <_> - - <_> - - - - <_>1 4 3 15 -1. - <_>2 4 1 15 3. - 0 - 8.8113872334361076e-003 - 0.0475620590150356 - -0.5841649174690247 - <_> - - <_> - - - - <_>10 0 8 8 -1. - <_>14 0 4 4 2. - <_>10 4 4 4 2. - 0 - 0.0107881696894765 - -0.0468558892607689 - 0.1654801070690155 - <_> - - <_> - - - - <_>1 9 3 14 -1. - <_>2 9 1 14 3. - 0 - -1.3571690069511533e-003 - -0.3251067996025085 - 0.0940904766321182 - <_> - - <_> - - - - <_>13 13 5 9 -1. - <_>13 16 5 3 3. - 0 - -0.0101959798485041 - -0.1469684988260269 - 0.0262460596859455 - <_> - - <_> - - - - <_>1 13 5 9 -1. - <_>1 16 5 3 3. - 0 - -1.2560819741338491e-003 - 0.2285338044166565 - -0.1626566052436829 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - 6.6750420955941081e-004 - -0.1343066990375519 - 0.1398756951093674 - <_> - - <_> - - - - <_>4 14 9 6 -1. - <_>4 17 9 3 2. - 0 - 2.0975170191377401e-003 - -0.1298761069774628 - 0.1997846961021423 - -1.0149190425872803 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>2 13 10 3 -1. - <_>7 13 5 3 2. - 0 - -3.6917610559612513e-003 - 0.2268279045820236 - -0.4116738140583038 - <_> - - <_> - - - - <_>9 0 10 5 -1. - <_>9 0 5 5 2. - 0 - -9.4609148800373077e-003 - 0.1630502045154572 - -0.2294901013374329 - <_> - - <_> - - - - <_>1 8 2 15 -1. - <_>2 8 1 15 2. - 0 - 3.3874800428748131e-003 - 0.0776446908712387 - -0.4746511876583099 - <_> - - <_> - - - - <_>13 0 6 18 -1. - <_>15 0 2 18 3. - 0 - 3.3596849534660578e-003 - -0.1472281068563461 - 0.1375565975904465 - <_> - - <_> - - - - <_>0 21 14 2 -1. - <_>7 21 7 2 2. - 0 - -2.2649099119007587e-003 - -0.2902786135673523 - 0.1226186975836754 - <_> - - <_> - - - - <_>9 19 8 4 -1. - <_>9 19 4 4 2. - 0 - -5.5420072749257088e-004 - 0.1159199029207230 - -0.2306652963161469 - <_> - - <_> - - - - <_>1 21 16 2 -1. - <_>9 21 8 2 2. - 0 - 1.9706019666045904e-003 - 0.1180830001831055 - -0.3787943124771118 - <_> - - <_> - - - - <_>2 0 16 4 -1. - <_>6 0 8 4 2. - 0 - 0.0175030808895826 - -0.0941615998744965 - 0.4793323874473572 - <_> - - <_> - - - - <_>3 0 9 5 -1. - <_>6 0 3 5 3. - 0 - -2.9575270600616932e-003 - 0.1733669936656952 - -0.3167332112789154 - <_> - - <_> - - - - <_>10 5 8 10 -1. - <_>10 5 8 5 2. - 1 - -0.2623870074748993 - -0.7440528869628906 - 8.9512793347239494e-003 - <_> - - <_> - - - - <_>0 1 18 8 -1. - <_>0 5 18 4 2. - 0 - 5.5493800900876522e-003 - -0.2408874034881592 - 0.1421204060316086 - <_> - - <_> - - - - <_>10 5 8 10 -1. - <_>10 5 8 5 2. - 1 - -0.0148425698280334 - 0.0551663115620613 - -0.0853630006313324 - <_> - - <_> - - - - <_>4 20 10 3 -1. - <_>9 20 5 3 2. - 0 - -0.0181934908032417 - -0.7538909912109375 - 0.0440624989569187 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -1.9381130114197731e-003 - 0.1476213932037354 - -0.1421477049589157 - <_> - - <_> - - - - <_>2 16 6 7 -1. - <_>4 16 2 7 3. - 0 - -6.1375028453767300e-003 - -0.5417520999908447 - 0.0528726913034916 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - 0.0166300795972347 - -0.0600058101117611 - 0.5229414105415344 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - -9.7470665350556374e-003 - -0.3177677094936371 - 0.0940777286887169 - <_> - - <_> - - - - <_>2 2 15 12 -1. - <_>7 6 5 4 9. - 0 - -0.3915967941284180 - 0.5155050158500671 - -0.0861782133579254 - <_> - - <_> - - - - <_>5 10 4 9 -1. - <_>7 10 2 9 2. - 0 - 0.0104578603059053 - -0.0544422306120396 - 0.5508633852005005 - <_> - - <_> - - - - <_>10 7 8 7 -1. - <_>12 9 4 7 2. - 1 - 0.0924795866012573 - 9.5865959301590919e-003 - -0.7520524263381958 - <_> - - <_> - - - - <_>0 1 18 18 -1. - <_>0 1 9 9 2. - <_>9 10 9 9 2. - 0 - -0.0133833298459649 - -0.2590928077697754 - 0.1225519999861717 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>9 9 8 2 3. - 1 - -0.0192979294806719 - -0.1868654936552048 - 0.0426703803241253 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -1.1118740076199174e-003 - 0.1458609998226166 - -0.2274280935525894 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>9 9 8 2 3. - 1 - 0.0232090596109629 - 0.0217691995203495 - -0.2400193065404892 - <_> - - <_> - - - - <_>1 0 8 4 -1. - <_>5 0 4 4 2. - 0 - 6.9435071200132370e-003 - -0.0848145708441734 - 0.3838810026645660 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>9 9 8 2 3. - 1 - -0.1024966984987259 - -0.7061861157417297 - 0.0125809498131275 - <_> - - <_> - - - - <_>8 7 6 8 -1. - <_>10 9 2 8 3. - 1 - -0.0140364300459623 - -0.3842788040637970 - 0.0876787230372429 - <_> - - <_> - - - - <_>13 0 6 19 -1. - <_>15 0 2 19 3. - 0 - 6.8071340210735798e-003 - -0.0759413465857506 - 0.0760143324732780 - <_> - - <_> - - - - <_>0 0 6 19 -1. - <_>2 0 2 19 3. - 0 - 4.8163239844143391e-003 - -0.1640291064977646 - 0.2012411057949066 - <_> - - <_> - - - - <_>13 8 2 14 -1. - <_>13 8 1 14 2. - 0 - -3.0274710152298212e-003 - -0.2811872959136963 - 0.0686712414026260 - <_> - - <_> - - - - <_>0 4 16 3 -1. - <_>0 5 16 1 3. - 0 - -1.6530510038137436e-003 - 0.2142737954854965 - -0.1303835958242416 - <_> - - <_> - - - - <_>8 8 4 10 -1. - <_>8 13 4 5 2. - 0 - -3.9757499471306801e-003 - -0.2373799979686737 - 0.0512905493378639 - <_> - - <_> - - - - <_>3 17 10 6 -1. - <_>3 17 5 3 2. - <_>8 20 5 3 2. - 0 - 6.9589749909937382e-003 - -0.1324627995491028 - 0.2370340973138809 - <_> - - <_> - - - - <_>13 8 2 14 -1. - <_>13 8 1 14 2. - 0 - 7.2270620148628950e-004 - 0.0504780709743500 - -0.1354480981826782 - <_> - - <_> - - - - <_>1 7 16 5 -1. - <_>5 7 8 5 2. - 0 - 0.0150577295571566 - -0.0669544637203217 - 0.4536899924278259 - <_> - - <_> - - - - <_>15 5 4 9 -1. - <_>15 5 2 9 2. - 1 - 6.5838429145514965e-003 - 0.0390546694397926 - -0.1951650977134705 - <_> - - <_> - - - - <_>6 0 3 14 -1. - <_>7 0 1 14 3. - 0 - -2.9128929600119591e-003 - 0.1760496944189072 - -0.1563968956470490 - <_> - - <_> - - - - <_>6 4 12 12 -1. - <_>10 8 4 4 9. - 0 - 0.6438639760017395 - -0.0117776999250054 - 1.0000569820404053 - <_> - - <_> - - - - <_>7 3 4 9 -1. - <_>9 3 2 9 2. - 0 - 5.1160277798771858e-003 - 0.0954646691679955 - -0.3783237040042877 - <_> - - <_> - - - - <_>10 4 7 8 -1. - <_>10 6 7 4 2. - 0 - 0.0683254972100258 - -3.9297499461099505e-004 - -0.9998624920845032 - <_> - - <_> - - - - <_>2 4 7 8 -1. - <_>2 6 7 4 2. - 0 - 0.0440717190504074 - 0.0287165492773056 - -0.9030649065971375 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -0.0157125201076269 - 0.2488802969455719 - -0.0530662611126900 - <_> - - <_> - - - - <_>4 9 2 14 -1. - <_>5 9 1 14 2. - 0 - -3.9486829191446304e-003 - -0.5021412968635559 - 0.0520896092057228 - <_> - - <_> - - - - <_>12 15 7 8 -1. - <_>12 17 7 4 2. - 0 - 1.1841469677165151e-003 - 0.0621228888630867 - -0.1647989004850388 - <_> - - <_> - - - - <_>6 0 7 20 -1. - <_>6 5 7 10 2. - 0 - -0.1138570979237557 - 0.5672857165336609 - -0.0388643182814121 - <_> - - <_> - - - - <_>2 1 16 4 -1. - <_>10 1 8 2 2. - <_>2 3 8 2 2. - 0 - 6.2493737787008286e-003 - 0.0878581404685974 - -0.2867594957351685 - <_> - - <_> - - - - <_>4 7 3 10 -1. - <_>4 12 3 5 2. - 0 - -2.3781529162079096e-003 - 0.2668414115905762 - -0.0932913869619370 - <_> - - <_> - - - - <_>10 6 8 8 -1. - <_>12 8 4 8 2. - 1 - -0.0636205226182938 - 0.1515336930751801 - -0.0153540298342705 - <_> - - <_> - - - - <_>3 10 12 8 -1. - <_>3 10 6 4 2. - <_>9 14 6 4 2. - 0 - 7.9275481402873993e-003 - 0.0882685184478760 - -0.3187279105186462 - <_> - - <_> - - - - <_>8 4 4 10 -1. - <_>8 9 4 5 2. - 0 - 1.0556660126894712e-003 - -0.1022611036896706 - 0.0605466999113560 - <_> - - <_> - - - - <_>7 7 5 9 -1. - <_>7 10 5 3 3. - 0 - 9.1879200190305710e-003 - 0.0809634029865265 - -0.3503153920173645 - <_> - - <_> - - - - <_>1 4 17 3 -1. - <_>1 5 17 1 3. - 0 - 3.9727380499243736e-003 - -0.1033485010266304 - 0.2745018899440765 - <_> - - <_> - - - - <_>2 3 14 3 -1. - <_>2 4 14 1 3. - 0 - 1.7149309860542417e-003 - -0.1232967972755432 - 0.2156181931495667 - -0.9315267801284790 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>2 7 14 2 -1. - <_>2 7 7 2 2. - 1 - -0.0145478900521994 - -0.5704287290573120 - 0.1016409024596214 - <_> - - <_> - - - - <_>10 19 8 4 -1. - <_>10 19 4 4 2. - 0 - -1.2570459512062371e-004 - 0.0775668919086456 - -0.2952415049076080 - <_> - - <_> - - - - <_>5 0 5 22 -1. - <_>5 11 5 11 2. - 0 - 9.4022490084171295e-003 - -0.3261851966381073 - 0.1368803977966309 - <_> - - <_> - - - - <_>10 19 8 4 -1. - <_>10 19 4 4 2. - 0 - -5.1469001919031143e-003 - -0.2248636037111282 - 0.1488638967275620 - <_> - - <_> - - - - <_>1 19 8 4 -1. - <_>5 19 4 4 2. - 0 - -3.1212199246510863e-004 - 0.1128714978694916 - -0.3288873136043549 - <_> - - <_> - - - - <_>8 12 4 9 -1. - <_>8 12 2 9 2. - 0 - 0.0187426097691059 - -0.0180800706148148 - 0.3011532127857208 - <_> - - <_> - - - - <_>1 16 9 5 -1. - <_>4 16 3 5 3. - 0 - 2.9675778932869434e-003 - -0.2594884932041168 - 0.1330806016921997 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - -0.0302950795739889 - -0.6004132032394409 - 0.0335165485739708 - <_> - - <_> - - - - <_>3 8 10 14 -1. - <_>8 8 5 14 2. - 0 - 6.4835487864911556e-003 - -0.0777680873870850 - 0.4626832008361816 - <_> - - <_> - - - - <_>10 5 7 6 -1. - <_>10 5 7 3 2. - 1 - 2.2889559622853994e-003 - 0.0604118295013905 - -0.1749873012304306 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>9 5 3 7 2. - 1 - -1.6078320331871510e-003 - -0.2955718040466309 - 0.1544979065656662 - <_> - - <_> - - - - <_>10 4 9 10 -1. - <_>10 4 9 5 2. - 1 - -0.2334866970777512 - -0.6375194787979126 - 0.0137483095750213 - <_> - - <_> - - - - <_>9 4 10 9 -1. - <_>9 4 5 9 2. - 1 - 5.8999718166887760e-003 - 0.1271378993988037 - -0.3268949091434479 - <_> - - <_> - - - - <_>12 15 7 8 -1. - <_>12 17 7 4 2. - 0 - 0.0120737198740244 - 0.0166142601519823 - -0.2270717024803162 - <_> - - <_> - - - - <_>0 15 7 8 -1. - <_>0 17 7 4 2. - 0 - -5.6356011191383004e-004 - 0.1687919050455093 - -0.1960531026124954 - <_> - - <_> - - - - <_>0 16 19 4 -1. - <_>0 17 19 2 2. - 0 - 1.7435080371797085e-003 - -0.1383100003004074 - 0.2210350930690765 - <_> - - <_> - - - - <_>4 20 10 3 -1. - <_>9 20 5 3 2. - 0 - 6.6066621802747250e-003 - 0.0443545281887054 - -0.6736524105072022 - <_> - - <_> - - - - <_>9 8 4 15 -1. - <_>10 8 2 15 2. - 0 - -5.9419698081910610e-003 - 0.1756900995969772 - -0.1369722038507462 - <_> - - <_> - - - - <_>4 7 4 14 -1. - <_>4 7 2 7 2. - <_>6 14 2 7 2. - 0 - 4.9261527601629496e-004 - -0.2103513032197952 - 0.1324183046817780 - <_> - - <_> - - - - <_>12 8 2 15 -1. - <_>12 8 1 15 2. - 0 - -3.6582869943231344e-003 - 0.1542036980390549 - -0.1056322008371353 - <_> - - <_> - - - - <_>5 8 2 15 -1. - <_>6 8 1 15 2. - 0 - -1.4477679505944252e-003 - -0.2892096042633057 - 0.1495039016008377 - <_> - - <_> - - - - <_>8 12 4 11 -1. - <_>8 12 2 11 2. - 0 - -1.0310580255463719e-003 - 0.0885729715228081 - -0.0903758332133293 - <_> - - <_> - - - - <_>7 12 4 11 -1. - <_>9 12 2 11 2. - 0 - 3.2927519641816616e-003 - -0.1108772978186607 - 0.3000374138355255 - <_> - - <_> - - - - <_>10 4 3 10 -1. - <_>10 4 3 5 2. - 1 - -1.6668019816279411e-003 - -0.0620541088283062 - 0.2265225946903229 - <_> - - <_> - - - - <_>3 16 4 7 -1. - <_>5 16 2 7 2. - 0 - 1.3452100101858377e-003 - 0.0920129716396332 - -0.3594416081905365 - <_> - - <_> - - - - <_>3 17 16 3 -1. - <_>3 18 16 1 3. - 0 - -0.0149815697222948 - 0.3663609027862549 - -0.0645568072795868 - <_> - - <_> - - - - <_>0 12 4 10 -1. - <_>2 12 2 10 2. - 0 - 6.2536462210118771e-003 - 0.0693813636898994 - -0.4102383852005005 - <_> - - <_> - - - - <_>7 14 12 6 -1. - <_>10 14 6 6 2. - 0 - 0.0509373992681503 - 0.0178699307143688 - -0.6052407026290894 - <_> - - <_> - - - - <_>0 14 12 6 -1. - <_>3 14 6 6 2. - 0 - 1.0756580159068108e-003 - -0.2377794981002808 - 0.1422331929206848 - <_> - - <_> - - - - <_>7 0 12 4 -1. - <_>11 0 4 4 3. - 0 - -4.1086040437221527e-003 - 0.1491537988185883 - -0.1921306997537613 - <_> - - <_> - - - - <_>7 0 4 10 -1. - <_>9 0 2 10 2. - 0 - -0.0133385201916099 - -0.4971103072166443 - 0.0657551586627960 - <_> - - <_> - - - - <_>9 0 10 3 -1. - <_>9 0 5 3 2. - 0 - 0.0319979712367058 - -0.0649275928735733 - 0.6657704114913940 - <_> - - <_> - - - - <_>0 0 10 3 -1. - <_>5 0 5 3 2. - 0 - -0.0496860593557358 - 0.5067688822746277 - -0.0646769106388092 - <_> - - <_> - - - - <_>6 5 8 8 -1. - <_>10 5 4 4 2. - <_>6 9 4 4 2. - 0 - 6.0286428779363632e-003 - 0.0882148966193199 - -0.2792361974716187 - <_> - - <_> - - - - <_>4 6 2 14 -1. - <_>5 6 1 14 2. - 0 - -6.9053061306476593e-003 - -0.6145234704017639 - 0.0356314890086651 - <_> - - <_> - - - - <_>10 8 6 10 -1. - <_>12 8 2 10 3. - 0 - 5.8130919933319092e-003 - -0.0936536267399788 - 0.0998173579573631 - <_> - - <_> - - - - <_>3 8 6 10 -1. - <_>5 8 2 10 3. - 0 - -0.0110304197296500 - 0.4579817056655884 - -0.0651249736547470 - <_> - - <_> - - - - <_>5 15 12 6 -1. - <_>9 15 4 6 3. - 0 - -1.5703570097684860e-003 - 0.0471136607229710 - -0.1334746032953262 - <_> - - <_> - - - - <_>2 15 12 6 -1. - <_>6 15 4 6 3. - 0 - 4.6482901088893414e-003 - 0.0739326775074005 - -0.4214586019515991 - <_> - - <_> - - - - <_>8 5 5 8 -1. - <_>8 9 5 4 2. - 0 - 5.0479872152209282e-004 - -0.2051727026700974 - 0.0951282531023026 - <_> - - <_> - - - - <_>0 2 14 4 -1. - <_>7 2 7 4 2. - 0 - 0.0261257607489824 - -0.0688169673085213 - 0.4264478981494904 - <_> - - <_> - - - - <_>7 1 6 7 -1. - <_>9 1 2 7 3. - 0 - 6.4811189658939838e-003 - 0.1130238994956017 - -0.4702106118202210 - <_> - - <_> - - - - <_>6 2 4 17 -1. - <_>7 2 2 17 2. - 0 - -0.0454841814935207 - 0.5410146713256836 - -0.0568048395216465 - <_> - - <_> - - - - <_>8 1 9 15 -1. - <_>11 6 3 5 9. - 0 - 0.0689561367034912 - 0.0344441197812557 - -0.1741154938936234 - <_> - - <_> - - - - <_>0 0 12 4 -1. - <_>4 0 4 4 3. - 0 - -2.0358948968350887e-003 - 0.1336694061756134 - -0.2098592072725296 - <_> - - <_> - - - - <_>11 1 8 8 -1. - <_>11 5 8 4 2. - 0 - 1.4390050200745463e-003 - -0.1644961982965469 - 0.0988863483071327 - <_> - - <_> - - - - <_>0 1 8 8 -1. - <_>0 5 8 4 2. - 0 - 0.0301804803311825 - 0.0876353830099106 - -0.3946411907672882 - <_> - - <_> - - - - <_>10 8 3 14 -1. - <_>11 8 1 14 3. - 0 - -3.8663588929921389e-003 - 0.1596461981534958 - -0.1184082999825478 - <_> - - <_> - - - - <_>9 4 10 3 -1. - <_>9 4 5 3 2. - 1 - 0.0107534900307655 - -0.0571420602500439 - 0.5012527704238892 - <_> - - <_> - - - - <_>11 8 2 11 -1. - <_>11 8 1 11 2. - 1 - 0.0109781501814723 - 0.0359851606190205 - -0.3864648044109345 - <_> - - <_> - - - - <_>3 13 4 8 -1. - <_>3 17 4 4 2. - 0 - -7.8152219066396356e-004 - 0.1824809014797211 - -0.1643594950437546 - <_> - - <_> - - - - <_>10 11 8 12 -1. - <_>10 17 8 6 2. - 0 - -6.9936108775436878e-003 - -0.2655623853206635 - 0.0944361016154289 - <_> - - <_> - - - - <_>6 8 3 14 -1. - <_>7 8 1 14 3. - 0 - 0.0231257304549217 - -0.0591019392013550 - 0.5735905766487122 - <_> - - <_> - - - - <_>10 9 2 10 -1. - <_>10 9 1 10 2. - 1 - -0.0170555207878351 - -0.5456724762916565 - 0.0271531306207180 - <_> - - <_> - - - - <_>8 11 6 6 -1. - <_>8 11 3 6 2. - 1 - 0.0151922898367047 - 0.0925809815526009 - -0.2973513901233673 - -0.9398486018180847 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>1 6 16 4 -1. - <_>5 6 8 4 2. - 0 - -0.0215891394764185 - 0.3377926051616669 - -0.2672545909881592 - <_> - - <_> - - - - <_>12 0 2 14 -1. - <_>12 7 2 7 2. - 0 - 6.3885431736707687e-003 - -0.2675912976264954 - 0.2143868952989578 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -2.4394609499722719e-003 - 0.1884108930826187 - -0.2349513024091721 - <_> - - <_> - - - - <_>11 7 2 11 -1. - <_>11 7 1 11 2. - 1 - 3.9824391715228558e-003 - 0.0466899089515209 - -0.1798482984304428 - <_> - - <_> - - - - <_>8 7 11 2 -1. - <_>8 7 11 1 2. - 1 - -3.1252959161065519e-004 - 0.1726770997047424 - -0.1878277957439423 - <_> - - <_> - - - - <_>7 0 6 5 -1. - <_>7 0 3 5 2. - 0 - 3.3181109465658665e-003 - 0.1208112016320229 - -0.3237386941909790 - <_> - - <_> - - - - <_>5 0 9 5 -1. - <_>8 0 3 5 3. - 0 - -7.0711369626224041e-003 - -0.2749837934970856 - 0.1386826932430267 - <_> - - <_> - - - - <_>7 17 10 6 -1. - <_>12 17 5 3 2. - <_>7 20 5 3 2. - 0 - 4.4392608106136322e-003 - -0.2227901965379715 - 0.1715514063835144 - <_> - - <_> - - - - <_>7 6 4 15 -1. - <_>8 6 2 15 2. - 0 - 2.1352670155465603e-003 - -0.1132285967469215 - 0.2842895984649658 - <_> - - <_> - - - - <_>5 11 10 3 -1. - <_>5 11 5 3 2. - 0 - -4.0205409750342369e-003 - -0.2454255074262619 - 0.0949575006961823 - <_> - - <_> - - - - <_>8 7 3 14 -1. - <_>9 7 1 14 3. - 0 - -6.5228617750108242e-003 - 0.3210678994655609 - -0.0973723679780960 - <_> - - <_> - - - - <_>10 8 2 10 -1. - <_>10 8 1 10 2. - 1 - 4.4146090658614412e-005 - -0.1526933014392853 - 0.0851288363337517 - <_> - - <_> - - - - <_>3 3 9 18 -1. - <_>6 9 3 6 9. - 0 - 0.0476060397922993 - 0.0793397575616837 - -0.2959941923618317 - <_> - - <_> - - - - <_>8 0 10 12 -1. - <_>13 0 5 6 2. - <_>8 6 5 6 2. - 0 - 0.0409286618232727 - -0.0351422615349293 - 0.3759357929229736 - <_> - - <_> - - - - <_>1 12 12 11 -1. - <_>4 12 6 11 2. - 0 - -0.0111618898808956 - -0.2674781084060669 - 0.0891817882657051 - <_> - - <_> - - - - <_>2 4 15 9 -1. - <_>7 7 5 3 9. - 0 - -0.2988845109939575 - 0.4801439940929413 - -0.0724850520491600 - <_> - - <_> - - - - <_>3 7 10 10 -1. - <_>8 7 5 10 2. - 0 - 0.0115143600851297 - -0.0592182502150536 - 0.4096263945102692 - <_> - - <_> - - - - <_>10 8 2 10 -1. - <_>10 8 1 10 2. - 1 - -2.6182739529758692e-003 - -0.1847873926162720 - 0.0398015603423119 - <_> - - <_> - - - - <_>2 18 6 5 -1. - <_>5 18 3 5 2. - 0 - -1.2829460320062935e-004 - 0.1071091964840889 - -0.2415527999401093 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - -6.9328160025179386e-003 - -0.2984572052955627 - 0.0456579588353634 - <_> - - <_> - - - - <_>5 0 4 14 -1. - <_>5 0 2 7 2. - <_>7 7 2 7 2. - 0 - -6.3937888480722904e-003 - 0.1836351007223129 - -0.1404941976070404 - <_> - - <_> - - - - <_>8 0 10 12 -1. - <_>13 0 5 6 2. - <_>8 6 5 6 2. - 0 - 4.1702711023390293e-003 - -0.0518900193274021 - 0.1021158024668694 - <_> - - <_> - - - - <_>2 0 8 18 -1. - <_>2 0 4 9 2. - <_>6 9 4 9 2. - 0 - 0.0103909997269511 - -0.1342698931694031 - 0.1913730949163437 - <_> - - <_> - - - - <_>10 0 8 4 -1. - <_>10 0 4 4 2. - 0 - 0.0130047397688031 - -0.0459227189421654 - 0.3052693009376526 - <_> - - <_> - - - - <_>9 9 9 2 -1. - <_>9 9 9 1 2. - 1 - -4.0645021945238113e-003 - -0.4847716093063355 - 0.0693384632468224 - <_> - - <_> - - - - <_>15 7 3 10 -1. - <_>15 12 3 5 2. - 0 - -3.7050418904982507e-004 - 0.1009071990847588 - -0.0689112767577171 - <_> - - <_> - - - - <_>1 7 3 10 -1. - <_>1 12 3 5 2. - 0 - 8.8882551062852144e-004 - -0.1674278974533081 - 0.1896588951349258 - <_> - - <_> - - - - <_>15 6 4 7 -1. - <_>15 6 2 7 2. - 0 - -4.8583559691905975e-003 - -0.4078938961029053 - 0.0514833517372608 - <_> - - <_> - - - - <_>4 15 6 7 -1. - <_>6 15 2 7 3. - 0 - 4.4327960349619389e-003 - -0.1426250934600830 - 0.1898719072341919 - <_> - - <_> - - - - <_>2 2 16 20 -1. - <_>10 2 8 10 2. - <_>2 12 8 10 2. - 0 - 0.0209997091442347 - 0.0921537727117538 - -0.3077355027198792 - <_> - - <_> - - - - <_>4 17 7 6 -1. - <_>4 19 7 2 3. - 0 - -2.2740170825272799e-003 - 0.1517627984285355 - -0.1652870029211044 - <_> - - <_> - - - - <_>3 15 15 6 -1. - <_>3 18 15 3 2. - 0 - -0.0150755401700735 - -0.3103924095630646 - 0.0656969398260117 - <_> - - <_> - - - - <_>0 18 14 3 -1. - <_>0 19 14 1 3. - 0 - 9.5290662720799446e-003 - -0.0676930174231529 - 0.4069203138351440 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - 1.2057139538228512e-003 - 0.0431881882250309 - -0.1845436990261078 - <_> - - <_> - - - - <_>2 0 4 18 -1. - <_>2 0 2 9 2. - <_>4 9 2 9 2. - 0 - -0.0247570704668760 - 0.6689097881317139 - -0.0344187095761299 - <_> - - <_> - - - - <_>10 2 6 8 -1. - <_>10 6 6 4 2. - 0 - 3.0408669263124466e-003 - -0.1325615942478180 - 0.0951310396194458 - <_> - - <_> - - - - <_>5 2 8 8 -1. - <_>5 2 4 4 2. - <_>9 6 4 4 2. - 0 - -1.5181970084086061e-003 - 0.1293949931859970 - -0.1855853945016861 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - -0.0248453598469496 - -0.7301337718963623 - 9.4545418396592140e-003 - <_> - - <_> - - - - <_>0 0 18 3 -1. - <_>6 0 6 3 3. - 0 - -8.1413304433226585e-003 - 0.1152179986238480 - -0.1903814971446991 - <_> - - <_> - - - - <_>10 0 8 4 -1. - <_>10 0 4 4 2. - 0 - -4.2350329458713531e-003 - 0.0727336332201958 - -0.1084188967943192 - <_> - - <_> - - - - <_>1 0 8 4 -1. - <_>5 0 4 4 2. - 0 - 9.9135711789131165e-003 - -0.0842189565300941 - 0.4761323928833008 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - -2.7879870031028986e-003 - -0.1284693926572800 - 0.0657206624746323 - <_> - - <_> - - - - <_>9 9 8 2 -1. - <_>9 9 8 1 2. - 1 - 2.6451589073985815e-003 - 0.0892697572708130 - -0.2621667981147766 - <_> - - <_> - - - - <_>4 7 15 9 -1. - <_>9 7 5 9 3. - 0 - -0.0266834907233715 - 0.0898707732558250 - -0.0969140902161598 - <_> - - <_> - - - - <_>8 8 3 14 -1. - <_>9 8 1 14 3. - 0 - 3.1197380740195513e-003 - -0.1173174008727074 - 0.2200486063957214 - <_> - - <_> - - - - <_>6 6 12 16 -1. - <_>9 6 6 16 2. - 0 - -0.2338829040527344 - -0.9090585708618164 - 5.6871720589697361e-003 - <_> - - <_> - - - - <_>1 6 12 16 -1. - <_>4 6 6 16 2. - 0 - 0.0109228203073144 - 0.0850618407130241 - -0.3072564899921417 - <_> - - <_> - - - - <_>10 6 4 7 -1. - <_>10 6 2 7 2. - 0 - 9.4858808442950249e-003 - -0.0223175697028637 - 0.3374570906162262 - <_> - - <_> - - - - <_>2 15 5 6 -1. - <_>2 18 5 3 2. - 0 - -5.1413412438705564e-004 - 0.1486065983772278 - -0.1559835970401764 - <_> - - <_> - - - - <_>7 19 12 4 -1. - <_>11 19 4 4 3. - 0 - 6.5561588853597641e-003 - 0.0666934326291084 - -0.2994574010372162 - <_> - - <_> - - - - <_>0 19 12 4 -1. - <_>4 19 4 4 3. - 0 - 9.8293996416032314e-004 - -0.1992353945970535 - 0.1481647938489914 - <_> - - <_> - - - - <_>10 9 4 7 -1. - <_>10 9 2 7 2. - 0 - -1.8866109894588590e-003 - 0.0864623710513115 - -0.1610174030065537 - <_> - - <_> - - - - <_>5 9 4 9 -1. - <_>7 9 2 9 2. - 0 - 2.7264489326626062e-003 - -0.0820490866899490 - 0.3867950141429901 - -0.8253865242004395 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>5 3 4 17 -1. - <_>7 3 2 17 2. - 0 - -0.0126025201752782 - 0.2242307066917419 - -0.3346217870712280 - <_> - - <_> - - - - <_>3 21 14 2 -1. - <_>3 21 7 2 2. - 0 - 2.5659699458628893e-003 - 0.0857565402984619 - -0.3237636089324951 - <_> - - <_> - - - - <_>0 19 12 3 -1. - <_>6 19 6 3 2. - 0 - -1.2003120500594378e-003 - 0.1465037018060684 - -0.3030675053596497 - <_> - - <_> - - - - <_>9 0 3 22 -1. - <_>9 11 3 11 2. - 0 - 4.7978968359529972e-003 - -0.2472590953111649 - 0.0527058094739914 - <_> - - <_> - - - - <_>5 9 2 14 -1. - <_>6 9 1 14 2. - 0 - -5.9380318270996213e-004 - -0.1888304948806763 - 0.1549035012722015 - <_> - - <_> - - - - <_>7 7 6 16 -1. - <_>7 11 6 8 2. - 0 - 8.1017091870307922e-003 - 0.1076487973332405 - -0.2473893016576767 - <_> - - <_> - - - - <_>1 12 4 8 -1. - <_>1 16 4 4 2. - 0 - -6.8427261430770159e-004 - 0.1828285008668900 - -0.1655009984970093 - <_> - - <_> - - - - <_>2 12 15 3 -1. - <_>7 12 5 3 3. - 0 - 4.5279348269104958e-003 - -0.0556687600910664 - 0.4138269126415253 - <_> - - <_> - - - - <_>1 17 12 6 -1. - <_>1 17 6 3 2. - <_>7 20 6 3 2. - 0 - 3.8289420772343874e-003 - -0.2222221940755844 - 0.1528232991695404 - <_> - - <_> - - - - <_>8 0 4 9 -1. - <_>8 0 2 9 2. - 0 - -6.2229200266301632e-003 - -0.3235169053077698 - 0.0683725476264954 - <_> - - <_> - - - - <_>7 0 4 9 -1. - <_>9 0 2 9 2. - 0 - -6.1763478443026543e-003 - -0.3991226851940155 - 0.0777074694633484 - <_> - - <_> - - - - <_>7 1 5 20 -1. - <_>7 6 5 10 2. - 0 - -0.0878202617168427 - 0.5857707858085632 - -0.0535846501588821 - <_> - - <_> - - - - <_>1 7 6 16 -1. - <_>3 7 2 16 3. - 0 - -6.8017458543181419e-003 - -0.4330711066722870 - 0.0626938492059708 - <_> - - <_> - - - - <_>8 7 4 10 -1. - <_>8 12 4 5 2. - 0 - 1.0741569567471743e-003 - -0.1196649000048637 - 0.0553978495299816 - <_> - - <_> - - - - <_>1 3 12 12 -1. - <_>5 7 4 4 9. - 0 - -0.0304909199476242 - -0.2366324067115784 - 0.1000299975275993 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 0.0518791191279888 - -0.0364188402891159 - 0.7339289784431458 - <_> - - <_> - - - - <_>2 6 6 10 -1. - <_>2 6 3 5 2. - <_>5 11 3 5 2. - 0 - 8.6805049795657396e-004 - -0.1770547926425934 - 0.1498523950576782 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>9 6 2 14 2. - 0 - 4.8424140550196171e-003 - -0.0462082512676716 - 0.1316252946853638 - <_> - - <_> - - - - <_>0 10 18 12 -1. - <_>0 10 9 6 2. - <_>9 16 9 6 2. - 0 - 9.1674225404858589e-003 - 0.0991810634732246 - -0.2029245048761368 - <_> - - <_> - - - - <_>8 6 4 14 -1. - <_>9 6 2 14 2. - 0 - -5.6356228888034821e-003 - 0.0878601670265198 - -0.0374380908906460 - <_> - - <_> - - - - <_>7 6 4 14 -1. - <_>8 6 2 14 2. - 0 - -0.0383751504123211 - 0.4972147941589356 - -0.0438151694834232 - <_> - - <_> - - - - <_>1 15 18 6 -1. - <_>1 15 9 6 2. - 0 - 8.9894384145736694e-003 - 0.0941265523433685 - -0.3022775053977966 - <_> - - <_> - - - - <_>1 17 6 5 -1. - <_>4 17 3 5 2. - 0 - -1.1650560190901160e-004 - 0.1336105018854141 - -0.1893206983804703 - <_> - - <_> - - - - <_>6 17 12 6 -1. - <_>9 17 6 6 2. - 0 - -6.6462112590670586e-004 - 0.0779727026820183 - -0.1350826025009155 - <_> - - <_> - - - - <_>1 15 12 8 -1. - <_>4 15 6 8 2. - 0 - -0.0126564903184772 - -0.3691301941871643 - 0.0646138936281204 - <_> - - <_> - - - - <_>0 7 19 3 -1. - <_>0 8 19 1 3. - 0 - -4.3929531238973141e-003 - 0.2669681906700134 - -0.0886500999331474 - <_> - - <_> - - - - <_>1 8 16 3 -1. - <_>1 9 16 1 3. - 0 - -1.2583639472723007e-003 - 0.2061482965946198 - -0.1095243990421295 - <_> - - <_> - - - - <_>6 6 7 6 -1. - <_>6 8 7 2 3. - 0 - -0.0111319404095411 - -0.4135204851627350 - 0.0628401264548302 - <_> - - <_> - - - - <_>4 7 10 14 -1. - <_>4 7 5 7 2. - <_>9 14 5 7 2. - 0 - 3.0703889206051826e-003 - -0.1559177935123444 - 0.1501820981502533 - <_> - - <_> - - - - <_>5 0 12 10 -1. - <_>5 0 6 10 2. - 0 - 3.5361549817025661e-003 - 0.0625734925270081 - -0.2186996936798096 - <_> - - <_> - - - - <_>2 0 15 13 -1. - <_>7 0 5 13 3. - 0 - 0.0288646295666695 - -0.0695617496967316 - 0.4489277899265289 - <_> - - <_> - - - - <_>5 6 12 6 -1. - <_>8 6 6 6 2. - 0 - -0.0710359066724777 - 0.2099197953939438 - -0.0365628786385059 - <_> - - <_> - - - - <_>2 16 6 7 -1. - <_>4 16 2 7 3. - 0 - -1.1107679456472397e-003 - -0.3302016854286194 - 0.0797589421272278 - <_> - - <_> - - - - <_>10 4 8 8 -1. - <_>12 6 4 8 2. - 1 - 0.0791840478777885 - -0.0132260099053383 - 0.3860366046428680 - <_> - - <_> - - - - <_>9 5 7 6 -1. - <_>7 7 7 2 3. - 1 - 0.0133535098284483 - 0.0584105588495731 - -0.3925077021121979 - <_> - - <_> - - - - <_>1 7 18 3 -1. - <_>1 8 18 1 3. - 0 - 0.0500490516424179 - -0.0233182292431593 - 0.7459377050399780 - <_> - - <_> - - - - <_>5 4 9 11 -1. - <_>8 4 3 11 3. - 0 - -0.2185900062322617 - -0.8458526730537415 - 0.0259405300021172 - <_> - - <_> - - - - <_>13 0 6 7 -1. - <_>15 0 2 7 3. - 0 - 0.0100641101598740 - -0.1095985025167465 - 0.2106852978467941 - <_> - - <_> - - - - <_>3 11 12 6 -1. - <_>3 11 6 3 2. - <_>9 14 6 3 2. - 0 - 7.5430879369378090e-003 - 0.0535675399005413 - -0.3361727893352509 - <_> - - <_> - - - - <_>13 4 3 16 -1. - <_>14 4 1 16 3. - 0 - 0.0158172100782394 - -0.0190422590821981 - 0.2219689935445786 - <_> - - <_> - - - - <_>3 4 3 16 -1. - <_>4 4 1 16 3. - 0 - -1.7135319649241865e-004 - 0.1766736954450607 - -0.1206853017210960 - <_> - - <_> - - - - <_>2 9 16 8 -1. - <_>10 9 8 4 2. - <_>2 13 8 4 2. - 0 - 6.6670849919319153e-003 - 0.0700718387961388 - -0.2213760018348694 - <_> - - <_> - - - - <_>3 0 3 19 -1. - <_>4 0 1 19 3. - 0 - 2.7946738991886377e-003 - -0.1050923019647598 - 0.1927739977836609 - <_> - - <_> - - - - <_>6 1 8 10 -1. - <_>8 1 4 10 2. - 0 - -1.5057970304042101e-003 - 0.0600128881633282 - -0.1237851008772850 - <_> - - <_> - - - - <_>0 14 18 6 -1. - <_>6 14 6 6 3. - 0 - 8.5329543799161911e-003 - -0.0476112402975559 - 0.3998514115810394 - <_> - - <_> - - - - <_>4 6 15 9 -1. - <_>9 9 5 3 9. - 0 - 0.0429394692182541 - 0.0316113904118538 - -0.1973166018724442 - <_> - - <_> - - - - <_>0 14 15 8 -1. - <_>5 14 5 8 3. - 0 - 0.0203082207590342 - 0.0350551903247833 - -0.5196939706802368 - <_> - - <_> - - - - <_>3 20 15 3 -1. - <_>8 20 5 3 3. - 0 - -7.7673741616308689e-003 - -0.1881791949272156 - 0.0568892285227776 - <_> - - <_> - - - - <_>0 15 18 2 -1. - <_>0 16 18 1 2. - 0 - 2.1762759424746037e-003 - -0.0909481570124626 - 0.2457586973905563 - <_> - - <_> - - - - <_>2 15 17 3 -1. - <_>2 16 17 1 3. - 0 - -0.0198136903345585 - 0.5290442109107971 - -0.0387549512088299 - <_> - - <_> - - - - <_>0 0 19 4 -1. - <_>0 2 19 2 2. - 0 - 0.0130351595580578 - 0.0679188221693039 - -0.3041346967220306 - <_> - - <_> - - - - <_>4 0 12 4 -1. - <_>4 2 12 2 2. - 0 - -1.9664920400828123e-003 - -0.2062616944313049 - 0.0961405932903290 - <_> - - <_> - - - - <_>3 0 3 21 -1. - <_>4 0 1 21 3. - 0 - -2.6359891053289175e-003 - 0.2508524954319000 - -0.0832009613513947 - <_> - - <_> - - - - <_>6 18 8 4 -1. - <_>6 20 8 2 2. - 0 - -2.2968810517340899e-003 - 0.2963468134403229 - -0.0587436892092228 - <_> - - <_> - - - - <_>1 18 14 3 -1. - <_>1 19 14 1 3. - 0 - -3.8644939195364714e-003 - 0.1941155046224594 - -0.1082755997776985 - <_> - - <_> - - - - <_>9 18 9 5 -1. - <_>12 18 3 5 3. - 0 - 4.4517841160995886e-005 - -0.2445186972618103 - 0.1029302999377251 - <_> - - <_> - - - - <_>0 18 19 3 -1. - <_>0 19 19 1 3. - 0 - 1.9567341078072786e-003 - -0.1051924973726273 - 0.2249999940395355 - <_> - - <_> - - - - <_>13 8 3 14 -1. - <_>14 8 1 14 3. - 0 - 0.0141881098970771 - 0.0321007184684277 - -0.5914242267608643 - <_> - - <_> - - - - <_>2 6 12 7 -1. - <_>5 6 6 7 2. - 0 - -1.3274629600346088e-004 - 0.0745778530836105 - -0.2765459120273590 - <_> - - <_> - - - - <_>2 6 16 16 -1. - <_>6 6 8 16 2. - 0 - 0.0209963805973530 - -0.0457354895770550 - 0.3294773101806641 - -0.8346493840217590 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>0 1 16 20 -1. - <_>4 1 8 20 2. - 0 - -0.0398410782217979 - 0.1518651992082596 - -0.2905524969100952 - <_> - - <_> - - - - <_>12 9 4 14 -1. - <_>14 9 2 7 2. - <_>12 16 2 7 2. - 0 - 1.1327869724482298e-003 - -0.1192163005471230 - 0.1209888979792595 - <_> - - <_> - - - - <_>3 9 4 14 -1. - <_>3 9 2 7 2. - <_>5 16 2 7 2. - 0 - 1.0022070491686463e-003 - 0.1208863034844399 - -0.2562133073806763 - <_> - - <_> - - - - <_>11 11 6 10 -1. - <_>14 11 3 5 2. - <_>11 16 3 5 2. - 0 - 0.0638662278652191 - 0.0476281009614468 - -0.8615034818649292 - <_> - - <_> - - - - <_>2 11 6 10 -1. - <_>2 11 3 5 2. - <_>5 16 3 5 2. - 0 - -3.0986019410192966e-003 - -0.3197580873966217 - 0.0914346873760223 - <_> - - <_> - - - - <_>2 8 16 9 -1. - <_>6 8 8 9 2. - 0 - 6.5784230828285217e-003 - -0.0804730504751205 - 0.3612303137779236 - <_> - - <_> - - - - <_>2 17 10 6 -1. - <_>2 17 5 3 2. - <_>7 20 5 3 2. - 0 - 4.5082601718604565e-003 - -0.1821575015783310 - 0.1467249989509583 - <_> - - <_> - - - - <_>11 7 8 7 -1. - <_>13 9 4 7 2. - 1 - -0.0165262408554554 - -0.1295465975999832 - 0.0665224194526672 - <_> - - <_> - - - - <_>8 7 7 8 -1. - <_>6 9 7 4 2. - 1 - -4.1868099942803383e-003 - -0.2655260860919952 - 0.1123768016695976 - <_> - - <_> - - - - <_>7 7 6 16 -1. - <_>7 11 6 8 2. - 0 - 5.6613027118146420e-004 - 0.1182264983654022 - -0.1611967980861664 - <_> - - <_> - - - - <_>7 4 4 10 -1. - <_>7 9 4 5 2. - 0 - 2.0279800519347191e-003 - -0.2261843979358673 - 0.1126369982957840 - <_> - - <_> - - - - <_>5 0 9 5 -1. - <_>8 0 3 5 3. - 0 - -0.0119691500440240 - -0.2752344012260437 - 0.0836038663983345 - <_> - - <_> - - - - <_>1 1 16 18 -1. - <_>5 1 8 18 2. - 0 - -0.2841173112392426 - 0.4021610915660858 - -0.0779717490077019 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - -3.6587871145457029e-003 - -0.2972385883331299 - 0.0634847134351730 - <_> - - <_> - - - - <_>0 20 18 3 -1. - <_>6 20 6 3 3. - 0 - 9.2046172358095646e-004 - 0.0778728201985359 - -0.2953908145427704 - <_> - - <_> - - - - <_>8 9 3 14 -1. - <_>9 9 1 14 3. - 0 - 0.0135717596858740 - -0.0724307671189308 - 0.3484975099563599 - <_> - - <_> - - - - <_>2 4 13 2 -1. - <_>2 4 13 1 2. - 1 - -3.1399999279528856e-003 - -0.2208877950906754 - 0.1007215976715088 - <_> - - <_> - - - - <_>6 0 10 16 -1. - <_>11 0 5 8 2. - <_>6 8 5 8 2. - 0 - 6.9894008338451385e-003 - 0.0591882094740868 - -0.1413722038269043 - <_> - - <_> - - - - <_>2 14 5 6 -1. - <_>2 17 5 3 2. - 0 - -5.9609091840684414e-004 - 0.1356392949819565 - -0.1508132964372635 - <_> - - <_> - - - - <_>12 8 4 8 -1. - <_>12 12 4 4 2. - 0 - 1.6805849736556411e-003 - -0.0783482566475868 - 0.0773573666810989 - <_> - - <_> - - - - <_>3 8 4 8 -1. - <_>3 12 4 4 2. - 0 - -5.7250040117651224e-004 - 0.2357279956340790 - -0.1159436032176018 - <_> - - <_> - - - - <_>14 6 3 10 -1. - <_>14 11 3 5 2. - 0 - 0.0434741601347923 - 8.2836961373686790e-003 - -0.3742831051349640 - <_> - - <_> - - - - <_>2 6 3 10 -1. - <_>2 11 3 5 2. - 0 - 6.0316640883684158e-004 - -0.1784690022468567 - 0.1618576049804688 - <_> - - <_> - - - - <_>7 5 12 16 -1. - <_>7 9 12 8 2. - 0 - 0.0268817208707333 - 0.0724194422364235 - -0.1797195971012116 - <_> - - <_> - - - - <_>6 11 4 9 -1. - <_>8 11 2 9 2. - 0 - -0.0492738783359528 - 0.4638639986515045 - -0.0502769388258457 - <_> - - <_> - - - - <_>7 18 10 5 -1. - <_>7 18 5 5 2. - 0 - -0.0672252029180527 - -1. - 0.0135324001312256 - <_> - - <_> - - - - <_>4 0 11 14 -1. - <_>4 7 11 7 2. - 0 - 0.2020377069711685 - -0.0387481003999710 - 0.5721197724342346 - <_> - - <_> - - - - <_>8 1 9 15 -1. - <_>11 6 3 5 9. - 0 - 0.0314897485077381 - 0.0454889088869095 - -0.1253937035799027 - <_> - - <_> - - - - <_>0 6 5 8 -1. - <_>0 10 5 4 2. - 0 - -5.7097017997875810e-004 - 0.1961971074342728 - -0.1094473972916603 - <_> - - <_> - - - - <_>15 0 4 13 -1. - <_>15 0 2 13 2. - 1 - -7.8234989196062088e-003 - 0.0679543614387512 - -0.0720759630203247 - <_> - - <_> - - - - <_>4 0 13 4 -1. - <_>4 0 13 2 2. - 1 - -0.0215553902089596 - -0.2889066040515900 - 0.0998060181736946 - <_> - - <_> - - - - <_>6 3 9 5 -1. - <_>9 3 3 5 3. - 0 - -0.0837671980261803 - -0.4368507862091065 - 0.0107926502823830 - <_> - - <_> - - - - <_>4 3 9 5 -1. - <_>7 3 3 5 3. - 0 - -3.5752300173044205e-003 - 0.1119166985154152 - -0.1946146041154862 - <_> - - <_> - - - - <_>7 1 12 4 -1. - <_>7 1 6 4 2. - 0 - 0.0122654195874929 - -0.0657282173633575 - 0.3273935914039612 - <_> - - <_> - - - - <_>0 2 6 12 -1. - <_>0 8 6 6 2. - 0 - 2.8762801084667444e-003 - -0.1872380971908569 - 0.1124698966741562 - <_> - - <_> - - - - <_>5 0 12 5 -1. - <_>5 0 6 5 2. - 0 - 7.4190571904182434e-003 - 0.0515259206295013 - -0.2661541998386383 - <_> - - <_> - - - - <_>2 0 14 5 -1. - <_>9 0 7 5 2. - 0 - -4.9716630019247532e-003 - 0.1538427025079727 - -0.1514144986867905 - <_> - - <_> - - - - <_>9 1 4 14 -1. - <_>10 1 2 14 2. - 0 - 0.0202948991209269 - -0.0195327997207642 - 0.3057104945182800 - <_> - - <_> - - - - <_>3 5 9 8 -1. - <_>3 7 9 4 2. - 0 - 0.0134690199047327 - 0.0623453184962273 - -0.3634374141693115 - <_> - - <_> - - - - <_>2 7 16 9 -1. - <_>6 7 8 9 2. - 0 - 6.8610929884016514e-003 - -0.0624873489141464 - 0.2882091104984283 - <_> - - <_> - - - - <_>0 19 14 2 -1. - <_>7 19 7 2 2. - 0 - -5.9594889171421528e-004 - 0.0855377390980721 - -0.2408138066530228 - <_> - - <_> - - - - <_>8 20 10 3 -1. - <_>8 20 5 3 2. - 0 - -0.0401498712599278 - -1. - 1.5480610309168696e-003 - <_> - - <_> - - - - <_>1 20 10 3 -1. - <_>6 20 5 3 2. - 0 - -2.7885669842362404e-003 - -0.2233868986368179 - 0.1100115999579430 - <_> - - <_> - - - - <_>15 8 3 10 -1. - <_>16 9 1 10 3. - 1 - -7.9318676143884659e-003 - 0.1304326951503754 - -0.0288591794669628 - <_> - - <_> - - - - <_>0 21 16 2 -1. - <_>8 21 8 2 2. - 0 - -2.9607459509861656e-005 - 0.1187603995203972 - -0.1701882034540176 - <_> - - <_> - - - - <_>4 6 15 3 -1. - <_>4 7 15 1 3. - 0 - 2.6092668995261192e-003 - -0.0698777809739113 - 0.1503650993108749 - <_> - - <_> - - - - <_>6 4 3 14 -1. - <_>7 4 1 14 3. - 0 - -0.0459702089428902 - 0.5632215142250061 - -0.0363181307911873 - <_> - - <_> - - - - <_>7 18 10 5 -1. - <_>7 18 5 5 2. - 0 - 9.0047682169824839e-004 - 0.0324610583484173 - -0.1897388994693756 - <_> - - <_> - - - - <_>2 18 10 5 -1. - <_>7 18 5 5 2. - 0 - -0.0517124086618423 - -0.8504551053047180 - 0.0206797402352095 - <_> - - <_> - - - - <_>6 0 10 16 -1. - <_>11 0 5 8 2. - <_>6 8 5 8 2. - 0 - -0.1417240947484970 - -0.9100450873374939 - 3.8531969767063856e-003 - <_> - - <_> - - - - <_>3 0 10 16 -1. - <_>3 0 5 8 2. - <_>8 8 5 8 2. - 0 - -0.0697711929678917 - 0.4214478135108948 - -0.0551622696220875 - <_> - - <_> - - - - <_>6 0 7 4 -1. - <_>6 2 7 2 2. - 0 - -7.5836889445781708e-003 - -0.4218929111957550 - 0.0619645304977894 - <_> - - <_> - - - - <_>0 2 19 3 -1. - <_>0 3 19 1 3. - 0 - -1.2404819717630744e-003 - 0.1755862981081009 - -0.1354064047336578 - <_> - - <_> - - - - <_>7 0 12 4 -1. - <_>7 2 12 2 2. - 0 - 0.0106146996840835 - 0.0450832396745682 - -0.2576557099819183 - <_> - - <_> - - - - <_>0 2 15 3 -1. - <_>0 3 15 1 3. - 0 - 1.7647630302235484e-003 - -0.1100924983620644 - 0.2404121011495590 - <_> - - <_> - - - - <_>1 5 18 3 -1. - <_>1 6 18 1 3. - 0 - 3.7170480936765671e-003 - -0.0769208222627640 - 0.2011951953172684 - <_> - - <_> - - - - <_>3 0 12 6 -1. - <_>3 2 12 2 3. - 0 - 0.0152806797996163 - 0.0586051195859909 - -0.3622012138366699 - <_> - - <_> - - - - <_>5 0 10 10 -1. - <_>5 5 10 5 2. - 0 - -0.0816356167197227 - 0.5281978845596314 - -0.0436089709401131 - <_> - - <_> - - - - <_>5 1 9 4 -1. - <_>5 3 9 2 2. - 0 - -2.4431939236819744e-003 - -0.2436936050653458 - 0.0843842774629593 - <_> - - <_> - - - - <_>5 2 12 6 -1. - <_>5 4 12 2 3. - 0 - -1.2289900332689285e-003 - 0.1033272966742516 - -0.0974423289299011 - <_> - - <_> - - - - <_>1 15 9 6 -1. - <_>1 17 9 2 3. - 0 - 6.9271848769858479e-004 - -0.1136775016784668 - 0.1612184941768646 - <_> - - <_> - - - - <_>5 13 14 9 -1. - <_>5 16 14 3 3. - 0 - 9.9380649626255035e-003 - 0.0527746789157391 - -0.1522282063961029 - <_> - - <_> - - - - <_>8 12 8 3 -1. - <_>7 13 8 1 3. - 1 - -0.0183777492493391 - 0.4680078923702240 - -0.0424112305045128 - <_> - - <_> - - - - <_>12 8 2 15 -1. - <_>12 8 1 15 2. - 0 - -3.0569550581276417e-003 - 0.1286662966012955 - -0.0983085632324219 - <_> - - <_> - - - - <_>5 8 2 15 -1. - <_>6 8 1 15 2. - 0 - -1.8440110143274069e-003 - -0.2759248912334442 - 0.1005029976367950 - <_> - - <_> - - - - <_>11 5 3 14 -1. - <_>12 5 1 14 3. - 0 - 5.6205368600785732e-003 - -0.0707162171602249 - 0.1673406958580017 - <_> - - <_> - - - - <_>5 8 2 14 -1. - <_>6 8 1 14 2. - 0 - 3.4157470799982548e-003 - 0.0523780882358551 - -0.5098274946212769 - <_> - - <_> - - - - <_>11 6 3 14 -1. - <_>12 6 1 14 3. - 0 - -3.0376210343092680e-003 - 0.1424362957477570 - -0.0630370602011681 - -0.7035266757011414 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>0 0 8 22 -1. - <_>0 0 4 11 2. - <_>4 11 4 11 2. - 0 - 0.0101266400888562 - -0.2186378985643387 - 0.1751348972320557 - <_> - - <_> - - - - <_>13 10 4 8 -1. - <_>13 10 2 8 2. - 0 - -2.6893198955804110e-003 - -0.3282296955585480 - 0.0998382568359375 - <_> - - <_> - - - - <_>1 13 16 7 -1. - <_>5 13 8 7 2. - 0 - -0.0155735304579139 - 0.1959401965141296 - -0.2253597974777222 - <_> - - <_> - - - - <_>13 10 4 8 -1. - <_>13 10 2 8 2. - 0 - 4.9326270818710327e-003 - 0.0499884709715843 - -0.5317537784576416 - <_> - - <_> - - - - <_>2 10 4 8 -1. - <_>4 10 2 8 2. - 0 - -7.6638202881440520e-004 - -0.2692666947841644 - 0.1175142973661423 - <_> - - <_> - - - - <_>5 7 10 6 -1. - <_>10 7 5 3 2. - <_>5 10 5 3 2. - 0 - -1.2552300177048892e-004 - 0.0691107884049416 - -0.0817273929715157 - <_> - - <_> - - - - <_>0 19 8 4 -1. - <_>4 19 4 4 2. - 0 - -1.4519299838866573e-005 - 0.1148395016789436 - -0.2301712930202484 - <_> - - <_> - - - - <_>3 15 15 3 -1. - <_>3 16 15 1 3. - 0 - -0.0161138400435448 - 0.5095658898353577 - -0.0374940298497677 - <_> - - <_> - - - - <_>7 2 4 16 -1. - <_>7 2 2 8 2. - <_>9 10 2 8 2. - 0 - 5.5138790048658848e-003 - -0.0787875503301620 - 0.2377143949270248 - <_> - - <_> - - - - <_>8 6 4 12 -1. - <_>8 10 4 4 3. - 0 - 0.0877638235688210 - 0.0138639798387885 - -0.8977738022804260 - <_> - - <_> - - - - <_>7 6 4 12 -1. - <_>7 10 4 4 3. - 0 - -0.0128255700692534 - -0.3950499892234802 - 0.0555463284254074 - <_> - - <_> - - - - <_>3 15 14 2 -1. - <_>3 16 14 1 2. - 0 - 8.2099979044869542e-004 - -0.1266397982835770 - 0.1908162981271744 - <_> - - <_> - - - - <_>0 15 17 8 -1. - <_>0 17 17 4 2. - 0 - -1.2775770155712962e-003 - 0.1106508001685143 - -0.1980109959840775 - <_> - - <_> - - - - <_>10 3 9 10 -1. - <_>10 3 9 5 2. - 1 - -0.2522971928119659 - -0.8103982806205750 - 8.3870543166995049e-003 - <_> - - <_> - - - - <_>7 8 4 10 -1. - <_>7 13 4 5 2. - 0 - 7.0347747532650828e-004 - -0.2138054966926575 - 0.0986735969781876 - <_> - - <_> - - - - <_>7 8 7 15 -1. - <_>7 13 7 5 3. - 0 - 0.0107174804434180 - 0.0844704434275627 - -0.2606374919414520 - <_> - - <_> - - - - <_>1 0 16 20 -1. - <_>5 0 8 20 2. - 0 - 5.1081487908959389e-003 - -0.0557322204113007 - 0.4144786000251770 - <_> - - <_> - - - - <_>9 18 9 5 -1. - <_>12 18 3 5 3. - 0 - -0.0190061591565609 - -0.3747524917125702 - 7.9524833709001541e-003 - <_> - - <_> - - - - <_>1 18 9 5 -1. - <_>4 18 3 5 3. - 0 - 1.1136929970234632e-003 - -0.2265014946460724 - 0.1078938990831375 - <_> - - <_> - - - - <_>8 7 8 12 -1. - <_>12 7 4 6 2. - <_>8 13 4 6 2. - 0 - 0.0111417695879936 - -0.0420547984540462 - 0.1369771063327789 - <_> - - <_> - - - - <_>2 9 4 13 -1. - <_>4 9 2 13 2. - 0 - 1.2054879916831851e-003 - 0.0921059772372246 - -0.2308367937803268 - <_> - - <_> - - - - <_>12 14 7 4 -1. - <_>12 16 7 2 2. - 0 - -2.0797130127903074e-004 - 0.0842105969786644 - -0.0669676810503006 - <_> - - <_> - - - - <_>0 6 18 3 -1. - <_>0 7 18 1 3. - 0 - -0.0164126493036747 - 0.4226919114589691 - -0.0496386997401714 - <_> - - <_> - - - - <_>1 16 18 7 -1. - <_>1 16 9 7 2. - 0 - 7.0363390259444714e-003 - 0.0905506610870361 - -0.2732287049293518 - <_> - - <_> - - - - <_>0 18 15 5 -1. - <_>5 18 5 5 3. - 0 - -8.4774550050497055e-003 - -0.1900486946105957 - 0.1041653975844383 - <_> - - <_> - - - - <_>10 5 4 8 -1. - <_>10 5 2 8 2. - 0 - -0.0877996310591698 - -1. - 4.5551471412181854e-003 - <_> - - <_> - - - - <_>5 5 4 8 -1. - <_>7 5 2 8 2. - 0 - -0.0467311106622219 - 0.4160776138305664 - -0.0679246112704277 - <_> - - <_> - - - - <_>7 0 6 5 -1. - <_>7 0 3 5 2. - 0 - 7.4915830045938492e-003 - 0.0475161895155907 - -0.4430620074272156 - <_> - - <_> - - - - <_>6 2 2 15 -1. - <_>7 2 1 15 2. - 0 - 8.6966790258884430e-003 - -0.0394231490790844 - 0.5218827724456787 - <_> - - <_> - - - - <_>4 0 12 4 -1. - <_>4 0 6 4 2. - 0 - -6.4137862063944340e-003 - -0.2474942952394486 - 0.1135025024414063 - <_> - - <_> - - - - <_>5 0 2 14 -1. - <_>5 7 2 7 2. - 0 - 6.4909840002655983e-003 - -0.2023759037256241 - 0.1188730970025063 - <_> - - <_> - - - - <_>5 16 14 4 -1. - <_>5 17 14 2 2. - 0 - 1.1677639558911324e-003 - -0.0981874391436577 - 0.1447045952081680 - <_> - - <_> - - - - <_>2 9 2 14 -1. - <_>3 9 1 14 2. - 0 - 8.0650653690099716e-003 - 0.0308064296841621 - -0.5741053819656372 - <_> - - <_> - - - - <_>12 0 4 7 -1. - <_>12 0 2 7 2. - 0 - -6.1450549401342869e-003 - 0.1421328037977219 - -0.1215547993779182 - <_> - - <_> - - - - <_>3 0 4 7 -1. - <_>5 0 2 7 2. - 0 - 3.3926900941878557e-003 - -0.0694254636764526 - 0.3794550001621246 - <_> - - <_> - - - - <_>8 0 9 15 -1. - <_>11 5 3 5 9. - 0 - 0.2586125135421753 - -8.0964984372258186e-003 - 0.5732439160346985 - <_> - - <_> - - - - <_>2 0 9 15 -1. - <_>5 5 3 5 9. - 0 - 0.0463276505470276 - 0.0934282690286636 - -0.2927432060241699 - <_> - - <_> - - - - <_>16 5 2 16 -1. - <_>16 5 1 16 2. - 1 - -1.4053919585421681e-005 - 0.0595843009650707 - -0.1219384968280792 - <_> - - <_> - - - - <_>3 5 16 2 -1. - <_>3 5 16 1 2. - 1 - -5.5521689355373383e-003 - -0.3026813864707947 - 0.0794819965958595 - <_> - - <_> - - - - <_>9 11 6 9 -1. - <_>11 11 2 9 3. - 0 - -0.0719741806387901 - 0.5986248850822449 - -0.0324142388999462 - <_> - - <_> - - - - <_>7 6 8 4 -1. - <_>7 6 4 4 2. - 1 - -1.1097419774159789e-003 - -0.2228900045156479 - 0.0948095768690109 - <_> - - <_> - - - - <_>10 0 8 8 -1. - <_>14 0 4 4 2. - <_>10 4 4 4 2. - 0 - 0.0110122803598642 - -0.0509547106921673 - 0.2199670970439911 - <_> - - <_> - - - - <_>3 0 12 4 -1. - <_>7 0 4 4 3. - 0 - -0.1066353023052216 - -0.7825710773468018 - 0.0230757091194391 - <_> - - <_> - - - - <_>9 11 6 9 -1. - <_>11 11 2 9 3. - 0 - 0.0268266107887030 - -0.0333343781530857 - 0.3282557129859924 - <_> - - <_> - - - - <_>3 10 4 10 -1. - <_>5 10 2 10 2. - 0 - 0.0164807792752981 - 0.0247930791229010 - -0.7910236716270447 - <_> - - <_> - - - - <_>11 12 6 5 -1. - <_>11 12 3 5 2. - 0 - 1.4533529756590724e-003 - -0.0473778210580349 - 0.1829988956451416 - <_> - - <_> - - - - <_>4 11 6 9 -1. - <_>6 11 2 9 3. - 0 - 0.0465367212891579 - -0.0422177799046040 - 0.4720196127891541 - <_> - - <_> - - - - <_>12 12 7 4 -1. - <_>12 12 7 2 2. - 1 - 0.0136040495708585 - 0.0715431720018387 - -0.2817555963993073 - <_> - - <_> - - - - <_>1 0 8 8 -1. - <_>1 0 4 4 2. - <_>5 4 4 4 2. - 0 - 2.9868748970329762e-003 - -0.1201931983232498 - 0.1516525000333786 - <_> - - <_> - - - - <_>10 4 9 10 -1. - <_>10 4 9 5 2. - 1 - 0.0754555836319923 - 7.6729329302906990e-003 - -0.3756060004234314 - <_> - - <_> - - - - <_>1 1 12 8 -1. - <_>1 1 6 4 2. - <_>7 5 6 4 2. - 0 - -2.1207109093666077e-003 - 0.1162438988685608 - -0.1518730968236923 - <_> - - <_> - - - - <_>2 14 16 2 -1. - <_>2 14 8 2 2. - 0 - 4.6092201955616474e-003 - 0.0523151606321335 - -0.2305060029029846 - <_> - - <_> - - - - <_>7 3 4 14 -1. - <_>8 3 2 14 2. - 0 - 1.0207670275121927e-003 - -0.1138001009821892 - 0.1762644052505493 - <_> - - <_> - - - - <_>7 1 6 7 -1. - <_>9 1 2 7 3. - 0 - 6.2532532028853893e-003 - 0.0616743601858616 - -0.3491523861885071 - <_> - - <_> - - - - <_>3 10 4 12 -1. - <_>3 14 4 4 3. - 0 - 0.0283224005252123 - -0.0399581491947174 - 0.5239297747612000 - <_> - - <_> - - - - <_>8 4 6 7 -1. - <_>10 4 2 7 3. - 0 - -0.0163423605263233 - -0.1256355941295624 - 0.0400417409837246 - <_> - - <_> - - - - <_>5 4 6 7 -1. - <_>7 4 2 7 3. - 0 - -1.8282469827681780e-003 - 0.0911350324749947 - -0.1922471970319748 - <_> - - <_> - - - - <_>5 7 14 8 -1. - <_>5 7 7 8 2. - 0 - 0.0446169190108776 - -0.0175829101353884 - 0.3028193116188049 - <_> - - <_> - - - - <_>2 12 6 5 -1. - <_>5 12 3 5 2. - 0 - 3.5677649429999292e-004 - -0.0878974124789238 - 0.2233915030956268 - <_> - - <_> - - - - <_>12 9 4 7 -1. - <_>12 9 2 7 2. - 0 - -4.5413200859911740e-004 - 0.0655228272080421 - -0.0996793806552887 - <_> - - <_> - - - - <_>3 9 4 7 -1. - <_>5 9 2 7 2. - 0 - 1.5353029593825340e-003 - 0.0685900002717972 - -0.2972837090492249 - <_> - - <_> - - - - <_>13 2 4 12 -1. - <_>13 6 4 4 3. - 0 - 2.1600390318781137e-003 - -0.0897365286946297 - 0.0802845433354378 - <_> - - <_> - - - - <_>2 2 4 12 -1. - <_>2 6 4 4 3. - 0 - -5.9745612088590860e-004 - 0.2187386006116867 - -0.1139852032065392 - <_> - - <_> - - - - <_>2 2 16 8 -1. - <_>10 2 8 4 2. - <_>2 6 8 4 2. - 0 - -0.0123560503125191 - -0.2935076057910919 - 0.0644203200936317 - <_> - - <_> - - - - <_>2 2 15 9 -1. - <_>7 5 5 3 9. - 0 - -0.3267093002796173 - 0.3892014920711517 - -0.0491654090583324 - <_> - - <_> - - - - <_>8 7 3 12 -1. - <_>8 13 3 6 2. - 0 - 8.7828626856207848e-003 - 0.0861861929297447 - -0.2263184934854507 - <_> - - <_> - - - - <_>2 0 3 15 -1. - <_>3 0 1 15 3. - 0 - 3.3569689840078354e-003 - -0.0911942869424820 - 0.2126410007476807 - -0.7464476823806763 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>1 8 16 4 -1. - <_>5 8 8 4 2. - 0 - -0.0152904996648431 - 0.1601132005453110 - -0.2151194065809250 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>10 0 4 4 2. - <_>6 4 4 4 2. - 0 - -5.9956451877951622e-003 - -0.1829978972673416 - 0.0378865003585815 - <_> - - <_> - - - - <_>8 9 2 14 -1. - <_>9 9 1 14 2. - 0 - 6.2301359139382839e-004 - -0.1219919994473457 - 0.2116325050592423 - <_> - - <_> - - - - <_>8 5 3 10 -1. - <_>8 10 3 5 2. - 0 - 5.8087380602955818e-004 - -0.2274738997220993 - 0.0769580379128456 - <_> - - <_> - - - - <_>8 9 3 14 -1. - <_>9 9 1 14 3. - 0 - -2.8277048841118813e-003 - 0.2759746015071869 - -0.0789423063397408 - <_> - - <_> - - - - <_>6 7 12 16 -1. - <_>6 11 12 8 2. - 0 - 0.0210963208228350 - 0.0412959195673466 - -0.3293308019638062 - <_> - - <_> - - - - <_>4 0 3 16 -1. - <_>5 0 1 16 3. - 0 - -2.2117430344223976e-003 - 0.2467256933450699 - -0.0731216669082642 - <_> - - <_> - - - - <_>13 9 4 11 -1. - <_>13 9 2 11 2. - 0 - -2.3275949060916901e-003 - -0.2282510995864868 - 0.0792851969599724 - <_> - - <_> - - - - <_>0 18 14 3 -1. - <_>7 18 7 3 2. - 0 - -4.4754869304597378e-003 - 0.1174404993653297 - -0.1980140954256058 - <_> - - <_> - - - - <_>6 9 12 11 -1. - <_>9 9 6 11 2. - 0 - -2.5716619566082954e-003 - 0.0376587100327015 - -0.1214805990457535 - <_> - - <_> - - - - <_>1 7 16 9 -1. - <_>5 7 8 9 2. - 0 - 1.5387970488518476e-003 - -0.0559732504189014 - 0.3692342936992645 - <_> - - <_> - - - - <_>11 6 4 7 -1. - <_>11 6 2 7 2. - 0 - -0.0330665186047554 - 0.3916000127792358 - -0.0778629407286644 - <_> - - <_> - - - - <_>3 11 12 12 -1. - <_>7 15 4 4 9. - 0 - -0.0857277214527130 - -0.2517474889755249 - 0.1354355067014694 - <_> - - <_> - - - - <_>11 6 4 7 -1. - <_>11 6 2 7 2. - 0 - -7.0333289913833141e-003 - 0.1332871019840241 - -0.1566464006900787 - <_> - - <_> - - - - <_>4 0 6 10 -1. - <_>6 0 2 10 3. - 0 - -6.8310517235659063e-005 - 0.0994542017579079 - -0.2341298013925552 - <_> - - <_> - - - - <_>13 9 2 14 -1. - <_>13 9 1 14 2. - 0 - -6.0546118766069412e-004 - -0.1774266958236694 - 0.1001781001687050 - <_> - - <_> - - - - <_>4 9 2 14 -1. - <_>5 9 1 14 2. - 0 - -2.2480569314211607e-003 - -0.3642463982105255 - 0.0535012595355511 - <_> - - <_> - - - - <_>7 7 6 16 -1. - <_>7 11 6 8 2. - 0 - -1.5090550296008587e-003 - 0.0775750502943993 - -0.0949207171797752 - <_> - - <_> - - - - <_>2 16 4 7 -1. - <_>4 16 2 7 2. - 0 - -5.8666180848376825e-005 - 0.1258593946695328 - -0.1452981978654862 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 3.5532109905034304e-003 - -0.0986266136169434 - 0.0743262469768524 - <_> - - <_> - - - - <_>2 16 6 7 -1. - <_>4 16 2 7 3. - 0 - -1.4601859729737043e-003 - -0.3302684128284454 - 0.0638134628534317 - <_> - - <_> - - - - <_>14 13 5 6 -1. - <_>14 16 5 3 2. - 0 - -2.3586049792356789e-004 - 0.1084676012396812 - -0.1057104989886284 - <_> - - <_> - - - - <_>0 0 12 6 -1. - <_>6 0 6 6 2. - 0 - 0.0147560602054000 - -0.0594728402793407 - 0.3779289126396179 - <_> - - <_> - - - - <_>4 0 14 7 -1. - <_>4 0 7 7 2. - 0 - -0.1679531037807465 - -0.6677346825599670 - 0.0174049306660891 - <_> - - <_> - - - - <_>5 0 9 22 -1. - <_>5 11 9 11 2. - 0 - 0.0320176705718040 - -0.2372045069932938 - 0.0962059274315834 - <_> - - <_> - - - - <_>11 8 8 4 -1. - <_>11 10 8 2 2. - 0 - -6.1111792456358671e-004 - 0.1356689035892487 - -0.0681219324469566 - <_> - - <_> - - - - <_>9 0 4 8 -1. - <_>9 0 2 8 2. - 1 - -0.0115860402584076 - -0.2976146042346954 - 0.0648532509803772 - <_> - - <_> - - - - <_>5 17 14 2 -1. - <_>5 18 14 1 2. - 0 - -1.1290679685771465e-003 - 0.1352047026157379 - -0.0906935036182404 - <_> - - <_> - - - - <_>1 17 14 3 -1. - <_>1 18 14 1 3. - 0 - 1.8352170009166002e-003 - -0.0966946035623550 - 0.1872598975896835 - <_> - - <_> - - - - <_>6 1 12 12 -1. - <_>10 5 4 4 9. - 0 - -0.2758424878120422 - 0.2746022045612335 - -0.0161767099052668 - <_> - - <_> - - - - <_>1 1 12 12 -1. - <_>5 5 4 4 9. - 0 - -0.0524872802197933 - -0.2629503011703491 - 0.0842792764306068 - <_> - - <_> - - - - <_>6 0 7 18 -1. - <_>6 9 7 9 2. - 0 - -0.0284090805798769 - 0.4403317868709564 - -0.0467363409698009 - <_> - - <_> - - - - <_>0 0 12 9 -1. - <_>3 0 6 9 2. - 0 - 0.0122342295944691 - 0.0713919028639793 - -0.2946347892284393 - <_> - - <_> - - - - <_>9 9 3 14 -1. - <_>10 9 1 14 3. - 0 - 0.0377520881593227 - -0.0325071401894093 - 0.6229391098022461 - <_> - - <_> - - - - <_>7 5 5 9 -1. - <_>7 8 5 3 3. - 0 - -0.0130063397809863 - -0.3561950922012329 - 0.0570859201252460 - <_> - - <_> - - - - <_>9 9 3 14 -1. - <_>10 9 1 14 3. - 0 - -3.7061918992549181e-003 - 0.1748504936695099 - -0.1050686985254288 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -4.8177209682762623e-003 - 0.1476109027862549 - -0.1370013058185577 - <_> - - <_> - - - - <_>12 10 5 8 -1. - <_>12 10 5 4 2. - 1 - -0.0307267196476460 - -0.2143260985612869 - 0.0345353297889233 - <_> - - <_> - - - - <_>8 6 10 7 -1. - <_>8 6 5 7 2. - 1 - 0.0100443996489048 - 0.0824728682637215 - -0.2132944017648697 - <_> - - <_> - - - - <_>12 15 7 4 -1. - <_>12 17 7 2 2. - 0 - 3.3808979787863791e-004 - -0.0563683994114399 - 0.0840506926178932 - <_> - - <_> - - - - <_>0 15 7 4 -1. - <_>0 17 7 2 2. - 0 - -3.4935539588332176e-004 - 0.1551014035940170 - -0.1546518951654434 - <_> - - <_> - - - - <_>15 6 2 16 -1. - <_>15 6 1 16 2. - 0 - 8.5416442016139627e-004 - 0.0748112127184868 - -0.2076193988323212 - <_> - - <_> - - - - <_>3 9 4 8 -1. - <_>3 13 4 4 2. - 0 - -7.4278831016272306e-004 - 0.2069537043571472 - -0.1131504029035568 - <_> - - <_> - - - - <_>0 14 19 3 -1. - <_>0 15 19 1 3. - 0 - -0.0418039113283157 - 0.7737541794776917 - -0.0273915994912386 - <_> - - <_> - - - - <_>1 12 4 7 -1. - <_>3 12 2 7 2. - 0 - -8.9303712593391538e-004 - -0.2892684936523438 - 0.0834253132343292 - <_> - - <_> - - - - <_>14 12 4 11 -1. - <_>14 12 2 11 2. - 0 - 2.0034189801663160e-003 - 0.0578995198011398 - -0.2181786000728607 - <_> - - <_> - - - - <_>0 8 5 6 -1. - <_>0 11 5 3 2. - 0 - 7.4933562427759171e-004 - -0.1360622048377991 - 0.1615003049373627 - <_> - - <_> - - - - <_>4 0 14 3 -1. - <_>4 0 7 3 2. - 0 - -0.0896454229950905 - -0.9571774005889893 - 5.8882208541035652e-003 - <_> - - <_> - - - - <_>1 0 14 3 -1. - <_>8 0 7 3 2. - 0 - -6.5244808793067932e-003 - 0.1452196985483170 - -0.1611984968185425 - <_> - - <_> - - - - <_>12 3 7 4 -1. - <_>12 5 7 2 2. - 0 - -2.8723690193146467e-003 - 0.1067081019282341 - -0.0305057391524315 - <_> - - <_> - - - - <_>0 3 7 4 -1. - <_>0 5 7 2 2. - 0 - 2.2762219887226820e-003 - -0.1457338035106659 - 0.1559064984321594 - <_> - - <_> - - - - <_>10 8 4 7 -1. - <_>10 8 2 7 2. - 0 - 4.3706637807190418e-003 - -0.0243692994117737 - 0.2072412967681885 - <_> - - <_> - - - - <_>1 12 4 11 -1. - <_>3 12 2 11 2. - 0 - 1.1989739723503590e-003 - 0.0884619429707527 - -0.2253641039133072 - <_> - - <_> - - - - <_>2 10 16 4 -1. - <_>2 11 16 2 2. - 0 - -6.1923090834170580e-004 - 0.1510809063911438 - -0.0991063416004181 - <_> - - <_> - - - - <_>7 11 9 3 -1. - <_>6 12 9 1 3. - 1 - -1.0555429616943002e-003 - 0.1539929956197739 - -0.1441050022840500 - <_> - - <_> - - - - <_>5 6 12 16 -1. - <_>8 6 6 16 2. - 0 - 0.0231018904596567 - -0.0261075291782618 - 0.2587516903877258 - <_> - - <_> - - - - <_>2 6 14 4 -1. - <_>2 6 7 2 2. - <_>9 8 7 2 2. - 0 - 6.7337458021938801e-003 - 0.0646296367049217 - -0.3229981958866119 - <_> - - <_> - - - - <_>5 6 10 6 -1. - <_>10 6 5 3 2. - <_>5 9 5 3 2. - 0 - 1.4084229478612542e-003 - 0.0857550725340843 - -0.1494754999876022 - <_> - - <_> - - - - <_>0 9 2 14 -1. - <_>1 9 1 14 2. - 0 - -2.3923629487399012e-004 - 0.1870089024305344 - -0.1094153001904488 - <_> - - <_> - - - - <_>10 18 9 5 -1. - <_>13 18 3 5 3. - 0 - 2.2198690567165613e-004 - -0.1951756030321121 - 0.0595878586173058 - <_> - - <_> - - - - <_>4 9 10 3 -1. - <_>3 10 10 1 3. - 1 - 2.8156230691820383e-003 - -0.0895278826355934 - 0.2289431989192963 - <_> - - <_> - - - - <_>10 18 9 5 -1. - <_>13 18 3 5 3. - 0 - 7.8730508685112000e-003 - 0.0641397014260292 - -0.1717485934495926 - <_> - - <_> - - - - <_>0 18 9 5 -1. - <_>3 18 3 5 3. - 0 - 1.0448540560901165e-003 - -0.2092723995447159 - 0.1102280989289284 - <_> - - <_> - - - - <_>5 8 12 9 -1. - <_>9 8 4 9 3. - 0 - -0.1804109960794449 - 0.2546054124832153 - -0.0315802395343781 - <_> - - <_> - - - - <_>2 8 12 9 -1. - <_>6 8 4 9 3. - 0 - -0.1891681998968124 - -0.8143904805183411 - 0.0302127506583929 - <_> - - <_> - - - - <_>9 6 4 14 -1. - <_>10 6 2 14 2. - 0 - -0.0489343404769897 - 0.4832926988601685 - -0.0318133905529976 - <_> - - <_> - - - - <_>2 20 15 3 -1. - <_>7 20 5 3 3. - 0 - -6.2278551049530506e-003 - -0.2246308028697968 - 0.0932022929191589 - <_> - - <_> - - - - <_>5 4 9 5 -1. - <_>8 4 3 5 3. - 0 - -3.6263489164412022e-003 - 0.0972399637103081 - -0.2209493964910507 - <_> - - <_> - - - - <_>6 6 4 14 -1. - <_>7 6 2 14 2. - 0 - 0.0206885300576687 - -0.0390446893870831 - 0.6966891884803772 - <_> - - <_> - - - - <_>10 0 2 14 -1. - <_>10 0 1 14 2. - 0 - -6.5703191794455051e-003 - -0.1591935008764267 - 0.0376973897218704 - <_> - - <_> - - - - <_>7 0 2 14 -1. - <_>8 0 1 14 2. - 0 - -2.7691440191119909e-003 - -0.2177779972553253 - 0.1107555031776428 - <_> - - <_> - - - - <_>12 0 4 8 -1. - <_>12 0 2 8 2. - 0 - -2.5391899980604649e-003 - 0.0767533034086227 - -0.1212102025747299 - <_> - - <_> - - - - <_>0 3 14 3 -1. - <_>0 4 14 1 3. - 0 - 0.0145228998735547 - -0.0469354689121246 - 0.4432204961776733 - <_> - - <_> - - - - <_>5 20 10 3 -1. - <_>5 20 5 3 2. - 0 - -4.8549640923738480e-003 - -0.4104030132293701 - 0.0472962893545628 - <_> - - <_> - - - - <_>6 18 7 4 -1. - <_>6 20 7 2 2. - 0 - -3.6202149931341410e-003 - 0.3670789897441864 - -0.0505831092596054 - -0.7803025245666504 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>3 6 6 9 -1. - <_>5 6 2 9 3. - 0 - 9.7794737666845322e-003 - -0.1987376958131790 - 0.1875499039888382 - <_> - - <_> - - - - <_>13 0 6 7 -1. - <_>15 0 2 7 3. - 0 - 2.5764610618352890e-003 - -0.1654404997825623 - 0.1196829974651337 - <_> - - <_> - - - - <_>3 13 4 10 -1. - <_>5 13 2 10 2. - 0 - 6.6844018874689937e-004 - 0.0811874270439148 - -0.2695421874523163 - <_> - - <_> - - - - <_>12 12 4 10 -1. - <_>12 12 2 10 2. - 0 - 1.8919180147349834e-003 - 0.0823986902832985 - -0.1956467032432556 - <_> - - <_> - - - - <_>3 12 4 7 -1. - <_>5 12 2 7 2. - 0 - -8.2977651618421078e-004 - -0.2138116955757141 - 0.1015295982360840 - <_> - - <_> - - - - <_>13 0 6 14 -1. - <_>15 0 2 14 3. - 0 - -2.5124829262495041e-003 - 0.2649702131748200 - -0.0817281305789948 - <_> - - <_> - - - - <_>0 0 6 12 -1. - <_>2 0 2 12 3. - 0 - 4.9220919609069824e-003 - -0.1383789926767349 - 0.1704742014408112 - <_> - - <_> - - - - <_>5 19 14 4 -1. - <_>12 19 7 2 2. - <_>5 21 7 2 2. - 0 - 1.5432259533554316e-003 - -0.2348349988460541 - 0.1262467950582504 - <_> - - <_> - - - - <_>0 12 9 10 -1. - <_>0 17 9 5 2. - 0 - -7.5272549875080585e-003 - -0.2190258055925369 - 0.0782149434089661 - <_> - - <_> - - - - <_>14 13 5 6 -1. - <_>14 16 5 3 2. - 0 - -3.2087319414131343e-004 - 0.0998033136129379 - -0.1005263030529022 - <_> - - <_> - - - - <_>0 16 8 4 -1. - <_>0 18 8 2 2. - 0 - -5.6291592773050070e-004 - 0.1458780020475388 - -0.1319447010755539 - <_> - - <_> - - - - <_>3 16 16 3 -1. - <_>3 17 16 1 3. - 0 - -0.0342483595013618 - 0.7317953109741211 - -0.0257543697953224 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 5.5207060649991035e-003 - 0.0738294273614883 - -0.2461594045162201 - <_> - - <_> - - - - <_>2 0 16 5 -1. - <_>6 0 8 5 2. - 0 - 0.0336631610989571 - -0.0507508292794228 - 0.5105447769165039 - <_> - - <_> - - - - <_>0 0 17 10 -1. - <_>0 5 17 5 2. - 0 - 0.0106051396578550 - -0.1959338039159775 - 0.0961627289652824 - <_> - - <_> - - - - <_>8 1 3 15 -1. - <_>9 1 1 15 3. - 0 - 3.6454470828175545e-003 - -0.1027477011084557 - 0.1802129000425339 - <_> - - <_> - - - - <_>0 2 8 20 -1. - <_>0 7 8 10 2. - 0 - 0.0316587202250957 - 0.0774153470993042 - -0.2349832057952881 - <_> - - <_> - - - - <_>8 7 4 10 -1. - <_>8 12 4 5 2. - 0 - 0.0604964494705200 - 7.9810861498117447e-003 - -0.5812633037567139 - <_> - - <_> - - - - <_>7 7 4 10 -1. - <_>7 12 4 5 2. - 0 - -2.1451190696097910e-004 - -0.2714141011238098 - 0.0724482312798500 - <_> - - <_> - - - - <_>11 0 3 17 -1. - <_>12 0 1 17 3. - 0 - -8.9069753885269165e-003 - 0.1086466014385223 - -0.0378909781575203 - <_> - - <_> - - - - <_>5 0 3 17 -1. - <_>6 0 1 17 3. - 0 - -3.1367139890789986e-003 - 0.2319408059120178 - -0.0832429975271225 - <_> - - <_> - - - - <_>12 9 3 14 -1. - <_>13 9 1 14 3. - 0 - -8.2477089017629623e-004 - 0.1375737041234970 - -0.0407095216214657 - <_> - - <_> - - - - <_>6 2 6 10 -1. - <_>9 2 3 10 2. - 0 - -3.8041090010665357e-004 - 0.0996559485793114 - -0.2011525034904480 - <_> - - <_> - - - - <_>4 21 14 2 -1. - <_>4 21 7 2 2. - 0 - 3.0412159394472837e-003 - 0.0486063882708550 - -0.2926115989685059 - <_> - - <_> - - - - <_>5 0 8 4 -1. - <_>9 0 4 4 2. - 0 - -2.7135149575769901e-003 - -0.2040290981531143 - 0.0872701928019524 - <_> - - <_> - - - - <_>10 0 4 8 -1. - <_>10 0 4 4 2. - 1 - -0.1145422011613846 - 0.2634224891662598 - -0.0289768297225237 - <_> - - <_> - - - - <_>3 0 12 6 -1. - <_>3 0 6 3 2. - <_>9 3 6 3 2. - 0 - -7.9219061881303787e-003 - -0.2395422011613846 - 0.0784254595637321 - <_> - - <_> - - - - <_>8 8 6 8 -1. - <_>10 8 2 8 3. - 0 - -0.0642724037170410 - 0.3865104913711548 - -0.0349812805652618 - <_> - - <_> - - - - <_>1 13 12 8 -1. - <_>4 13 6 8 2. - 0 - 0.0208201594650745 - 0.0366767384111881 - -0.5090972185134888 - <_> - - <_> - - - - <_>8 8 6 8 -1. - <_>10 8 2 8 3. - 0 - 4.7503421083092690e-003 - -0.0491715185344219 - 0.1854227036237717 - <_> - - <_> - - - - <_>5 8 6 8 -1. - <_>7 8 2 8 3. - 0 - -0.0935890376567841 - 0.6282237768173218 - -0.0251404698938131 - <_> - - <_> - - - - <_>7 13 8 10 -1. - <_>9 13 4 10 2. - 0 - -6.8223377456888556e-004 - 0.0400907993316650 - -0.1025065034627914 - <_> - - <_> - - - - <_>4 14 8 9 -1. - <_>6 14 4 9 2. - 0 - -8.3058718591928482e-003 - -0.2162594944238663 - 0.0855050235986710 - <_> - - <_> - - - - <_>9 15 9 5 -1. - <_>12 15 3 5 3. - 0 - 5.5919620208442211e-003 - -0.0657242611050606 - 0.0619394518435001 - <_> - - <_> - - - - <_>7 15 4 7 -1. - <_>9 15 2 7 2. - 0 - 1.8336649518460035e-003 - -0.1032480970025063 - 0.2513414919376373 - <_> - - <_> - - - - <_>4 19 12 4 -1. - <_>4 19 6 4 2. - 0 - -4.4351099058985710e-003 - -0.1510027945041657 - 0.0373230092227459 - <_> - - <_> - - - - <_>6 15 6 8 -1. - <_>8 15 2 8 3. - 0 - -4.7271270304918289e-003 - 0.1350070983171463 - -0.1525021940469742 - <_> - - <_> - - - - <_>8 5 8 8 -1. - <_>12 5 4 4 2. - <_>8 9 4 4 2. - 0 - 5.3573452169075608e-004 - -0.0609647706151009 - 0.0719967335462570 - <_> - - <_> - - - - <_>0 14 7 4 -1. - <_>0 16 7 2 2. - 0 - -1.3135100016370416e-004 - 0.1290217936038971 - -0.1310760974884033 - <_> - - <_> - - - - <_>10 2 4 8 -1. - <_>11 3 2 8 2. - 1 - 4.0799290873110294e-003 - 0.0494333095848560 - -0.1946709007024765 - <_> - - <_> - - - - <_>1 12 17 3 -1. - <_>1 13 17 1 3. - 0 - -3.1066180672496557e-003 - 0.2398454993963242 - -0.0712815672159195 - <_> - - <_> - - - - <_>13 8 4 15 -1. - <_>14 8 2 15 2. - 0 - 0.0109994001686573 - 0.0290179308503866 - -0.3850468099117279 - <_> - - <_> - - - - <_>2 12 14 3 -1. - <_>2 13 14 1 3. - 0 - 1.5001590363681316e-003 - -0.0836524367332459 - 0.1814112961292267 - <_> - - <_> - - - - <_>6 12 7 6 -1. - <_>6 14 7 2 3. - 0 - 0.0137001499533653 - 0.0367532595992088 - -0.4508658945560455 - <_> - - <_> - - - - <_>2 2 12 6 -1. - <_>2 2 6 3 2. - <_>8 5 6 3 2. - 0 - 3.9507630281150341e-003 - -0.0694171115756035 - 0.2154071033000946 - <_> - - <_> - - - - <_>11 0 8 5 -1. - <_>11 0 4 5 2. - 0 - -8.5161393508315086e-003 - 0.1070408970117569 - -0.1485738009214401 - <_> - - <_> - - - - <_>0 0 8 5 -1. - <_>4 0 4 5 2. - 0 - 1.7032850300893188e-003 - -0.0818965211510658 - 0.3239806890487671 - <_> - - <_> - - - - <_>1 2 18 20 -1. - <_>1 2 9 20 2. - 0 - -0.0108529301360250 - -0.1314232945442200 - 0.0999901890754700 - <_> - - <_> - - - - <_>9 5 10 8 -1. - <_>9 5 5 8 2. - 1 - -3.7832378875464201e-003 - 0.0975966379046440 - -0.1608145982027054 - <_> - - <_> - - - - <_>7 8 7 10 -1. - <_>7 13 7 5 2. - 0 - 0.0132632600143552 - 0.0681890770792961 - -0.1482066065073013 - <_> - - <_> - - - - <_>7 7 4 14 -1. - <_>8 7 2 14 2. - 0 - -0.0442763008177280 - 0.5388399958610535 - -0.0347698815166950 - <_> - - <_> - - - - <_>15 7 4 16 -1. - <_>15 7 2 16 2. - 0 - -0.0164764393121004 - -0.6934183835983276 - 0.0302859302610159 - <_> - - <_> - - - - <_>0 0 12 7 -1. - <_>4 0 4 7 3. - 0 - 0.0150639601051807 - 0.0503653511404991 - -0.3221526145935059 - <_> - - <_> - - - - <_>11 7 4 7 -1. - <_>11 7 2 7 2. - 1 - 0.0532300695776939 - 4.0058908052742481e-003 - -1.0000929832458496 - <_> - - <_> - - - - <_>4 4 6 15 -1. - <_>7 4 3 15 2. - 0 - -0.1228208988904953 - 0.4043856859207153 - -0.0546611696481705 - <_> - - <_> - - - - <_>6 10 9 13 -1. - <_>9 10 3 13 3. - 0 - -0.0802053213119507 - -0.1891590952873230 - 0.0357042886316776 - <_> - - <_> - - - - <_>1 14 4 7 -1. - <_>3 14 2 7 2. - 0 - -1.1679669842123985e-003 - -0.2764140069484711 - 0.0599743984639645 - <_> - - <_> - - - - <_>11 1 3 14 -1. - <_>12 1 1 14 3. - 0 - -3.1197320204228163e-003 - 0.1130719035863876 - -0.0728807300329208 - <_> - - <_> - - - - <_>5 11 4 8 -1. - <_>7 11 2 8 2. - 0 - 3.6612390540540218e-003 - -0.0478285700082779 - 0.3906736969947815 - <_> - - <_> - - - - <_>11 6 4 7 -1. - <_>11 6 2 7 2. - 0 - 4.6034730039536953e-003 - -0.0474484190344810 - 0.3614696860313416 - <_> - - <_> - - - - <_>4 6 4 7 -1. - <_>6 6 2 7 2. - 0 - -1.0733479866757989e-003 - 0.1126487031579018 - -0.2907496094703674 - <_> - - <_> - - - - <_>7 5 9 9 -1. - <_>10 5 3 9 3. - 0 - -0.0183106902986765 - 0.0967293530702591 - -0.1015082001686096 - <_> - - <_> - - - - <_>2 1 12 12 -1. - <_>6 5 4 4 9. - 0 - -0.0681947395205498 - -0.2204868942499161 - 0.1097799018025398 - <_> - - <_> - - - - <_>4 19 14 4 -1. - <_>11 19 7 2 2. - <_>4 21 7 2 2. - 0 - 8.9977607131004333e-003 - -0.0296524409204721 - 0.1505921930074692 - <_> - - <_> - - - - <_>1 19 14 4 -1. - <_>1 19 7 2 2. - <_>8 21 7 2 2. - 0 - 2.6954131317324936e-004 - -0.1991785019636154 - 0.0946779921650887 - <_> - - <_> - - - - <_>9 18 9 5 -1. - <_>12 18 3 5 3. - 0 - 5.9090729337185621e-004 - -0.1324030011892319 - 0.0630881786346436 - <_> - - <_> - - - - <_>1 18 9 5 -1. - <_>4 18 3 5 3. - 0 - 5.5691739544272423e-003 - 0.1031828969717026 - -0.1927673965692520 - <_> - - <_> - - - - <_>11 4 8 6 -1. - <_>11 4 4 6 2. - 1 - -0.0994341298937798 - 0.2591108083724976 - -0.0439478717744350 - <_> - - <_> - - - - <_>6 8 7 6 -1. - <_>6 10 7 2 3. - 0 - -9.6295922994613647e-003 - -0.3687196969985962 - 0.0465061701834202 - <_> - - <_> - - - - <_>5 17 14 2 -1. - <_>5 18 14 1 2. - 0 - -1.7397940391674638e-003 - 0.1373603940010071 - -0.0698224827647209 - <_> - - <_> - - - - <_>6 6 9 3 -1. - <_>5 7 9 1 3. - 1 - -0.0132694300264120 - 0.4521614909172058 - -0.0384612381458282 - <_> - - <_> - - - - <_>13 9 4 11 -1. - <_>13 9 2 11 2. - 0 - 2.5604839902371168e-003 - 0.0548587813973427 - -0.2496352940797806 - <_> - - <_> - - - - <_>2 9 4 11 -1. - <_>4 9 2 11 2. - 0 - -1.9173050532117486e-003 - -0.2573320865631104 - 0.0674813836812973 - <_> - - <_> - - - - <_>12 0 3 14 -1. - <_>13 0 1 14 3. - 0 - -0.0374616496264935 - 0.5966824889183044 - -0.0181210804730654 - <_> - - <_> - - - - <_>4 0 3 14 -1. - <_>5 0 1 14 3. - 0 - -1.9658938981592655e-003 - 0.1950152069330216 - -0.0900263413786888 - <_> - - <_> - - - - <_>7 10 5 6 -1. - <_>7 13 5 3 2. - 0 - -3.2596408855170012e-003 - -0.3564716875553131 - 0.0464952811598778 - <_> - - <_> - - - - <_>0 12 17 4 -1. - <_>0 14 17 2 2. - 0 - -0.0120436502620578 - 0.3750874996185303 - -0.0530721992254257 - <_> - - <_> - - - - <_>10 5 6 10 -1. - <_>12 7 2 10 3. - 1 - 4.1690650396049023e-003 - -0.0418457612395287 - 0.1117779016494751 - <_> - - <_> - - - - <_>2 9 12 12 -1. - <_>6 13 4 4 9. - 0 - 0.0142144998535514 - 0.0719657614827156 - -0.2677752077579498 - -0.8136615157127380 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>1 15 12 8 -1. - <_>7 15 6 8 2. - 0 - -0.0122309699654579 - 0.1456761062145233 - -0.2404517978429794 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>10 0 4 4 2. - <_>6 4 4 4 2. - 0 - -5.5717672221362591e-003 - -0.1878961026668549 - 0.0405967086553574 - <_> - - <_> - - - - <_>0 15 7 8 -1. - <_>0 17 7 4 2. - 0 - -5.5606552632525563e-004 - 0.1664956957101822 - -0.1181783974170685 - <_> - - <_> - - - - <_>8 7 4 8 -1. - <_>8 11 4 4 2. - 0 - 8.3173572784289718e-004 - -0.1422403007745743 - 0.0416161604225636 - <_> - - <_> - - - - <_>5 8 2 14 -1. - <_>6 8 1 14 2. - 0 - -8.7869318667799234e-004 - -0.1643044948577881 - 0.1552329063415527 - <_> - - <_> - - - - <_>12 8 7 4 -1. - <_>12 10 7 2 2. - 0 - -0.0136414803564548 - 0.3086752891540527 - -0.0271722692996264 - <_> - - <_> - - - - <_>0 13 14 4 -1. - <_>0 13 7 2 2. - <_>7 15 7 2 2. - 0 - 1.4917860426066909e-005 - -0.1559205055236816 - 0.1017657965421677 - <_> - - <_> - - - - <_>6 13 7 8 -1. - <_>6 15 7 4 2. - 0 - 8.7703643366694450e-003 - 0.0615828782320023 - -0.3054605126380920 - <_> - - <_> - - - - <_>7 7 4 15 -1. - <_>8 7 2 15 2. - 0 - 7.5755198486149311e-003 - -0.0687598735094070 - 0.2967574894428253 - <_> - - <_> - - - - <_>11 16 5 6 -1. - <_>11 19 5 3 2. - 0 - 0.0498411618173122 - 0.0101279104128480 - -0.7921342253684998 - <_> - - <_> - - - - <_>4 0 6 10 -1. - <_>4 0 3 5 2. - <_>7 5 3 5 2. - 0 - -0.0110908197239041 - 0.1833902001380920 - -0.1011369973421097 - <_> - - <_> - - - - <_>11 10 7 6 -1. - <_>9 12 7 2 3. - 1 - -0.0859370827674866 - -0.4199456870555878 - 0.0155684798955917 - <_> - - <_> - - - - <_>2 0 14 2 -1. - <_>9 0 7 2 2. - 0 - -1.0151329915970564e-003 - 0.1147446036338806 - -0.1609168052673340 - <_> - - <_> - - - - <_>1 10 18 8 -1. - <_>10 10 9 4 2. - <_>1 14 9 4 2. - 0 - -0.0134702501818538 - -0.3062644898891449 - 0.0531861409544945 - <_> - - <_> - - - - <_>1 18 15 3 -1. - <_>1 19 15 1 3. - 0 - 0.0166351106017828 - -0.0434589385986328 - 0.4404331147670746 - <_> - - <_> - - - - <_>4 18 14 3 -1. - <_>4 19 14 1 3. - 0 - -2.2650870960205793e-003 - 0.1598511934280396 - -0.1272598057985306 - <_> - - <_> - - - - <_>0 3 19 18 -1. - <_>0 9 19 6 3. - 0 - 0.0702881664037704 - 0.0648916289210320 - -0.2349617928266525 - <_> - - <_> - - - - <_>4 0 11 20 -1. - <_>4 10 11 10 2. - 0 - 0.0291863791644573 - -0.2092027962207794 - 0.0892578735947609 - <_> - - <_> - - - - <_>5 0 9 18 -1. - <_>5 9 9 9 2. - 0 - -5.0624469295144081e-003 - 0.3437409102916718 - -0.0620930492877960 - <_> - - <_> - - - - <_>9 0 4 20 -1. - <_>9 10 4 10 2. - 0 - 2.9356318991631269e-003 - -0.1424936950206757 - 0.0454122610390186 - <_> - - <_> - - - - <_>1 11 6 6 -1. - <_>1 14 6 3 2. - 0 - -6.7740739323198795e-003 - 0.3164179921150208 - -0.0496016293764114 - <_> - - <_> - - - - <_>12 16 6 6 -1. - <_>12 19 6 3 2. - 0 - -1.4607170305680484e-004 - 0.1075204983353615 - -0.1154003962874413 - <_> - - <_> - - - - <_>3 8 2 14 -1. - <_>4 8 1 14 2. - 0 - -3.5684450995177031e-003 - -0.4167262911796570 - 0.0422028191387653 - <_> - - <_> - - - - <_>7 11 5 12 -1. - <_>7 15 5 4 3. - 0 - -2.0149808842688799e-003 - 0.1086013019084930 - -0.1634970009326935 - <_> - - <_> - - - - <_>5 11 5 12 -1. - <_>5 14 5 6 2. - 0 - -8.7240645661950111e-003 - -0.2200064063072205 - 0.0909270271658897 - <_> - - <_> - - - - <_>13 0 4 16 -1. - <_>15 0 2 8 2. - <_>13 8 2 8 2. - 0 - 7.3565947823226452e-003 - -0.1033570021390915 - 0.1605197042226791 - <_> - - <_> - - - - <_>1 0 12 8 -1. - <_>7 0 6 8 2. - 0 - 3.4252731129527092e-003 - -0.0696356371045113 - 0.3149088025093079 - <_> - - <_> - - - - <_>13 11 6 7 -1. - <_>15 11 2 7 3. - 0 - -5.7803248055279255e-003 - -0.4363917112350464 - 0.0361275486648083 - <_> - - <_> - - - - <_>0 8 7 8 -1. - <_>0 10 7 4 2. - 0 - -2.9641189612448215e-003 - 0.2179728001356125 - -0.0778759419918060 - <_> - - <_> - - - - <_>6 6 7 6 -1. - <_>6 8 7 2 3. - 0 - 0.0240286793559790 - 0.0259409602731466 - -0.5764058828353882 - <_> - - <_> - - - - <_>7 1 4 14 -1. - <_>7 8 4 7 2. - 0 - 0.0815144777297974 - -0.0343803800642490 - 0.5795750021934509 - <_> - - <_> - - - - <_>13 17 6 6 -1. - <_>13 17 3 6 2. - 0 - 6.7858170950785279e-004 - 0.1039874032139778 - -0.2383109033107758 - <_> - - <_> - - - - <_>5 11 4 12 -1. - <_>5 17 4 6 2. - 0 - 0.0426395200192928 - -0.0411679707467556 - 0.4055674970149994 - <_> - - <_> - - - - <_>13 17 6 6 -1. - <_>13 17 3 6 2. - 0 - -4.0414459072053432e-003 - -0.3865289092063904 - 0.0530535802245140 - <_> - - <_> - - - - <_>0 8 2 14 -1. - <_>0 15 2 7 2. - 0 - 0.0422803089022636 - 0.0150585295632482 - -0.9662395715713501 - <_> - - <_> - - - - <_>13 18 6 5 -1. - <_>13 18 3 5 2. - 0 - -7.3401766712777317e-005 - 0.0844386368989944 - -0.1046855002641678 - <_> - - <_> - - - - <_>4 0 2 14 -1. - <_>5 0 1 14 2. - 0 - 4.7503020614385605e-003 - -0.0381354913115501 - 0.4306662976741791 - <_> - - <_> - - - - <_>13 11 6 8 -1. - <_>15 11 2 8 3. - 0 - 1.7291309777647257e-003 - 0.0757335871458054 - -0.1538420021533966 - <_> - - <_> - - - - <_>1 11 3 12 -1. - <_>1 17 3 6 2. - 0 - -4.8985757166519761e-004 - 0.1372247934341431 - -0.1263125985860825 - <_> - - <_> - - - - <_>12 18 6 5 -1. - <_>12 18 3 5 2. - 0 - -2.2209450253285468e-004 - 0.0511391386389732 - -0.0666613131761551 - <_> - - <_> - - - - <_>0 15 4 8 -1. - <_>0 19 4 4 2. - 0 - 1.1202819878235459e-003 - -0.1096849963068962 - 0.1561145037412643 - <_> - - <_> - - - - <_>13 11 6 8 -1. - <_>15 11 2 8 3. - 0 - -0.0205960292369127 - -0.4542526006698608 - 5.6112911552190781e-003 - <_> - - <_> - - - - <_>0 11 6 8 -1. - <_>2 11 2 8 3. - 0 - -5.1287859678268433e-003 - -0.3942252993583679 - 0.0441448204219341 - <_> - - <_> - - - - <_>5 17 14 3 -1. - <_>5 18 14 1 3. - 0 - -4.3597300536930561e-003 - 0.1939166039228439 - -0.0659493282437325 - <_> - - <_> - - - - <_>0 15 7 6 -1. - <_>0 17 7 2 3. - 0 - 4.7703061136417091e-004 - -0.1190071031451225 - 0.1637544035911560 - <_> - - <_> - - - - <_>10 8 4 10 -1. - <_>10 8 2 10 2. - 1 - -0.0109937703236938 - -0.2991574108600617 - 0.0287935007363558 - <_> - - <_> - - - - <_>1 11 16 7 -1. - <_>5 11 8 7 2. - 0 - 8.1108389422297478e-003 - -0.0481459498405457 - 0.3839995861053467 - <_> - - <_> - - - - <_>5 0 9 16 -1. - <_>8 0 3 16 3. - 0 - -3.6698309704661369e-003 - 0.0887120366096497 - -0.3065086007118225 - <_> - - <_> - - - - <_>6 6 2 14 -1. - <_>7 6 1 14 2. - 0 - 1.3895990559831262e-003 - -0.0551562011241913 - 0.3510990142822266 - <_> - - <_> - - - - <_>11 5 4 15 -1. - <_>12 5 2 15 2. - 0 - 1.2493750546127558e-003 - -0.1802306026220322 - 0.1349010020494461 - <_> - - <_> - - - - <_>9 8 10 4 -1. - <_>9 8 10 2 2. - 1 - 5.5981278419494629e-003 - 0.0797642469406128 - -0.2784745991230011 - <_> - - <_> - - - - <_>8 1 4 14 -1. - <_>8 1 2 14 2. - 0 - -0.0381334796547890 - 0.3515341877937317 - -0.0170894302427769 - <_> - - <_> - - - - <_>7 1 4 14 -1. - <_>9 1 2 14 2. - 0 - -4.6064890921115875e-003 - -0.2219419926404953 - 0.1067579984664917 - <_> - - <_> - - - - <_>1 14 18 9 -1. - <_>7 17 6 3 9. - 0 - -0.2379301041364670 - 0.4007951021194458 - -0.0621518082916737 - <_> - - <_> - - - - <_>6 9 7 9 -1. - <_>6 12 7 3 3. - 0 - 0.0120104104280472 - 0.0586469210684299 - -0.3523482978343964 - <_> - - <_> - - - - <_>1 11 18 2 -1. - <_>1 12 18 1 2. - 0 - 8.4618777036666870e-003 - -0.0414554998278618 - 0.3936221897602081 - <_> - - <_> - - - - <_>7 7 4 16 -1. - <_>7 11 4 8 2. - 0 - -0.0144825996831059 - -0.2704995870590210 - 0.0694004967808723 - <_> - - <_> - - - - <_>2 10 15 3 -1. - <_>2 11 15 1 3. - 0 - 2.5672810152173042e-003 - -0.0823579877614975 - 0.2295956015586853 - <_> - - <_> - - - - <_>6 12 7 9 -1. - <_>6 15 7 3 3. - 0 - 6.8167857825756073e-003 - 0.0852120667695999 - -0.2281312048435211 - <_> - - <_> - - - - <_>4 10 15 3 -1. - <_>4 11 15 1 3. - 0 - -6.4145028591156006e-004 - 0.1326024979352951 - -0.0810919627547264 - <_> - - <_> - - - - <_>0 19 14 4 -1. - <_>0 19 7 2 2. - <_>7 21 7 2 2. - 0 - 3.8798429886810482e-004 - -0.2180052995681763 - 0.0829776674509048 - <_> - - <_> - - - - <_>5 17 14 3 -1. - <_>5 18 14 1 3. - 0 - 0.0263080000877380 - -0.0255589094012976 - 0.5898965001106262 - <_> - - <_> - - - - <_>1 7 3 14 -1. - <_>2 7 1 14 3. - 0 - 2.0907879807054996e-003 - 0.0576117411255836 - -0.3028649091720581 - <_> - - <_> - - - - <_>9 0 6 7 -1. - <_>11 0 2 7 3. - 0 - -0.0111323697492480 - -0.1382286995649338 - 0.0422580800950527 - <_> - - <_> - - - - <_>4 0 6 7 -1. - <_>6 0 2 7 3. - 0 - -1.5296150231733918e-003 - 0.0917496979236603 - -0.2218109965324402 - <_> - - <_> - - - - <_>6 5 8 6 -1. - <_>6 5 4 6 2. - 0 - 6.7247601691633463e-004 - -0.0670843496918678 - 0.0797620713710785 - <_> - - <_> - - - - <_>5 2 3 16 -1. - <_>6 2 1 16 3. - 0 - 0.0103866597637534 - -0.0746211707592011 - 0.2291668951511383 - <_> - - <_> - - - - <_>15 4 4 15 -1. - <_>16 4 2 15 2. - 0 - 6.2723900191485882e-004 - -0.0865005999803543 - 0.0978149101138115 - <_> - - <_> - - - - <_>6 12 6 5 -1. - <_>6 12 3 5 2. - 1 - 0.0153247797861695 - 0.0800943300127983 - -0.2201195061206818 - <_> - - <_> - - - - <_>8 9 3 14 -1. - <_>9 9 1 14 3. - 0 - -8.7603963911533356e-003 - 0.3129082024097443 - -0.0593733415007591 - <_> - - <_> - - - - <_>0 16 7 4 -1. - <_>0 18 7 2 2. - 0 - -2.3745700309518725e-004 - 0.1185595989227295 - -0.1451420038938522 - <_> - - <_> - - - - <_>5 16 14 3 -1. - <_>5 17 14 1 3. - 0 - -1.0718279518187046e-003 - 0.1256764978170395 - -0.0531019382178783 - <_> - - <_> - - - - <_>0 4 4 15 -1. - <_>1 4 2 15 2. - 0 - 5.3873867727816105e-004 - -0.1071565970778465 - 0.1603776067495346 - <_> - - <_> - - - - <_>10 2 8 6 -1. - <_>10 4 8 2 3. - 0 - -0.0692686364054680 - -0.7929406762123108 - 8.2057341933250427e-003 - <_> - - <_> - - - - <_>1 2 8 6 -1. - <_>1 4 8 2 3. - 0 - 0.0104301301762462 - 0.0516202002763748 - -0.3347268998622894 - <_> - - <_> - - - - <_>10 6 4 16 -1. - <_>12 6 2 8 2. - <_>10 14 2 8 2. - 0 - 0.0718889087438583 - 1.5941270394250751e-003 - -0.8584092855453491 - <_> - - <_> - - - - <_>7 1 4 18 -1. - <_>7 1 2 9 2. - <_>9 10 2 9 2. - 0 - 0.0202174205332994 - -0.0398174002766609 - 0.4635106027126312 - <_> - - <_> - - - - <_>8 4 4 7 -1. - <_>8 4 2 7 2. - 0 - 5.8006029576063156e-003 - -0.0217013899236918 - 0.0990401431918144 - <_> - - <_> - - - - <_>7 4 4 7 -1. - <_>9 4 2 7 2. - 0 - 0.0352612100541592 - 0.0170828700065613 - -1.0000469684600830 - <_> - - <_> - - - - <_>7 0 12 14 -1. - <_>7 0 6 14 2. - 0 - -0.4525587856769562 - -0.9129211902618408 - 5.2670161239802837e-003 - <_> - - <_> - - - - <_>2 1 2 14 -1. - <_>3 1 1 14 2. - 0 - -7.5286221690475941e-003 - -0.5258156061172485 - 0.0220447406172752 - -30.8131999969482420 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>0 18 14 4 -1. - <_>0 18 7 2 2. - <_>7 20 7 2 2. - 0 - 2.9085609130561352e-003 - -0.2019598037004471 - 0.1611853986978531 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>10 0 4 4 2. - <_>6 4 4 4 2. - 0 - -6.4552230760455132e-003 - -0.1867610067129135 - 0.0353596508502960 - <_> - - <_> - - - - <_>4 9 6 10 -1. - <_>4 9 3 5 2. - <_>7 14 3 5 2. - 0 - 2.7815890498459339e-003 - -0.1222874969244003 - 0.2036256939172745 - <_> - - <_> - - - - <_>1 17 18 6 -1. - <_>10 17 9 3 2. - <_>1 20 9 3 2. - 0 - -7.6125850901007652e-003 - -0.3696570992469788 - 0.0395666286349297 - <_> - - <_> - - - - <_>5 0 6 21 -1. - <_>7 7 2 7 9. - 0 - -0.2590085864067078 - 0.6431263089179993 - 3.1312569626607001e-004 - <_> - - <_> - - - - <_>6 7 12 7 -1. - <_>6 7 6 7 2. - 0 - 4.6097189188003540e-003 - -0.0272621605545282 - 0.2189165055751801 - <_> - - <_> - - - - <_>7 0 12 3 -1. - <_>7 0 6 3 2. - 1 - -0.0141355004161596 - 0.0760067924857140 - -0.2603108882904053 - <_> - - <_> - - - - <_>5 0 9 5 -1. - <_>8 0 3 5 3. - 0 - -5.9708990156650543e-003 - -0.1914646029472351 - 0.1107890009880066 - <_> - - <_> - - - - <_>7 9 3 14 -1. - <_>8 9 1 14 3. - 0 - -1.0699110571295023e-003 - 0.0901270583271980 - -0.1987635940313339 - <_> - - <_> - - - - <_>3 14 16 9 -1. - <_>3 17 16 3 3. - 0 - 0.0153157301247120 - 0.0518833696842194 - -0.3106929957866669 - <_> - - <_> - - - - <_>1 17 6 6 -1. - <_>4 17 3 6 2. - 0 - -7.3937349952757359e-005 - 0.1055530980229378 - -0.1676875054836273 - <_> - - <_> - - - - <_>5 1 10 20 -1. - <_>5 6 10 10 2. - 0 - -0.0818768888711929 - 0.4605309963226318 - -0.0382763482630253 - <_> - - <_> - - - - <_>1 16 12 7 -1. - <_>4 16 6 7 2. - 0 - -8.8246334344148636e-003 - -0.3310768008232117 - 0.0696745663881302 - <_> - - <_> - - - - <_>5 0 9 4 -1. - <_>5 2 9 2 2. - 0 - -3.7569031119346619e-003 - -0.2756631076335907 - 0.0693756267428398 - <_> - - <_> - - - - <_>3 0 13 6 -1. - <_>3 2 13 2 3. - 0 - -3.6343189422041178e-003 - 0.1665885001420975 - -0.1203157976269722 - <_> - - <_> - - - - <_>11 13 7 8 -1. - <_>11 15 7 4 2. - 0 - 0.0219794902950525 - -0.0223163496702909 - 0.3440257906913757 - <_> - - <_> - - - - <_>3 0 4 8 -1. - <_>3 4 4 4 2. - 0 - 0.0613865517079830 - 0.0179060008376837 - -0.8812987208366394 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 0.0270617399364710 - -0.0324443504214287 - 0.2886644899845123 - <_> - - <_> - - - - <_>6 5 7 6 -1. - <_>6 7 7 2 3. - 0 - -9.5964036881923676e-003 - -0.3074331879615784 - 0.0524994805455208 - <_> - - <_> - - - - <_>8 17 7 6 -1. - <_>8 19 7 2 3. - 0 - -1.7550870543345809e-003 - 0.1043424978852272 - -0.1112620979547501 - <_> - - <_> - - - - <_>5 12 5 8 -1. - <_>5 16 5 4 2. - 0 - 1.6808100044727325e-003 - -0.1171241998672485 - 0.1560686975717545 - <_> - - <_> - - - - <_>0 15 19 2 -1. - <_>0 16 19 1 2. - 0 - -1.3623350532725453e-003 - 0.2263745963573456 - -0.0864548012614250 - <_> - - <_> - - - - <_>6 7 7 4 -1. - <_>6 9 7 2 2. - 0 - -3.6580429878085852e-003 - -0.3982911109924316 - 0.0471435897052288 - <_> - - <_> - - - - <_>9 0 2 21 -1. - <_>9 7 2 7 3. - 0 - 0.0526687204837799 - -0.0196967907249928 - 0.4299823939800263 - <_> - - <_> - - - - <_>0 19 15 4 -1. - <_>5 19 5 4 3. - 0 - -3.4802549635060132e-004 - 0.0911152362823486 - -0.2048067003488541 - <_> - - <_> - - - - <_>9 20 10 3 -1. - <_>9 20 5 3 2. - 0 - 1.2204200029373169e-003 - 0.0330615118145943 - -0.1732486933469772 - <_> - - <_> - - - - <_>0 17 15 3 -1. - <_>0 18 15 1 3. - 0 - -9.4577670097351074e-003 - 0.2977420091629028 - -0.0589791312813759 - <_> - - <_> - - - - <_>12 13 6 5 -1. - <_>12 13 3 5 2. - 0 - -1.7641530139371753e-003 - -0.0963047668337822 - 0.0653046369552612 - <_> - - <_> - - - - <_>6 7 7 6 -1. - <_>6 9 7 2 3. - 0 - 8.1057827919721603e-003 - 0.0571583695709705 - -0.3112392127513886 - <_> - - <_> - - - - <_>3 15 14 3 -1. - <_>3 16 14 1 3. - 0 - 0.0139634003862739 - -0.0352346412837505 - 0.3571985065937042 - <_> - - <_> - - - - <_>0 20 10 3 -1. - <_>5 20 5 3 2. - 0 - -3.1854680273681879e-003 - -0.2152840048074722 - 0.0760408788919449 - <_> - - <_> - - - - <_>6 7 8 4 -1. - <_>6 7 4 4 2. - 0 - -4.3546650558710098e-003 - -0.0838922932744026 - 0.0282906908541918 - <_> - - <_> - - - - <_>1 17 7 6 -1. - <_>1 19 7 2 3. - 0 - -1.6740639694035053e-003 - 0.1514583975076675 - -0.1175632029771805 - <_> - - <_> - - - - <_>7 17 12 4 -1. - <_>11 17 4 4 3. - 0 - -2.7018489781767130e-003 - 0.1383357048034668 - -0.0508328303694725 - <_> - - <_> - - - - <_>3 15 6 7 -1. - <_>5 15 2 7 3. - 0 - 2.2117499611340463e-004 - -0.2396084964275360 - 0.0750043466687202 - <_> - - <_> - - - - <_>6 7 12 7 -1. - <_>6 7 6 7 2. - 0 - 0.0227732006460428 - -0.0224336292594671 - 0.3704926073551178 - <_> - - <_> - - - - <_>1 9 12 12 -1. - <_>1 13 12 4 3. - 0 - 9.5928199589252472e-003 - 0.0972054377198219 - -0.1773710995912552 - <_> - - <_> - - - - <_>12 6 5 9 -1. - <_>12 9 5 3 3. - 0 - 3.3168029040098190e-003 - -0.0564143583178520 - 0.0919384211301804 - <_> - - <_> - - - - <_>2 6 5 9 -1. - <_>2 9 5 3 3. - 0 - -2.3929888848215342e-003 - 0.2107668071985245 - -0.0928803533315659 - <_> - - <_> - - - - <_>12 6 6 7 -1. - <_>14 8 2 7 3. - 1 - -0.0107665704563260 - -0.1297437995672226 - 0.0599589087069035 - <_> - - <_> - - - - <_>5 9 8 10 -1. - <_>5 9 4 5 2. - <_>9 14 4 5 2. - 0 - 9.9714798852801323e-004 - -0.1427922993898392 - 0.1427970975637436 - <_> - - <_> - - - - <_>2 11 16 6 -1. - <_>10 11 8 3 2. - <_>2 14 8 3 2. - 0 - -6.6825798712670803e-003 - -0.2381983995437622 - 0.0481196604669094 - <_> - - <_> - - - - <_>8 4 3 16 -1. - <_>9 4 1 16 3. - 0 - -3.7201410159468651e-003 - 0.1995317935943604 - -0.0907835736870766 - <_> - - <_> - - - - <_>8 9 4 14 -1. - <_>9 9 2 14 2. - 0 - -0.0185534097254276 - -0.2662154138088226 - 0.0228727497160435 - <_> - - <_> - - - - <_>7 9 4 14 -1. - <_>8 9 2 14 2. - 0 - 3.0256200116127729e-003 - -0.0911061316728592 - 0.2455954998731613 - <_> - - <_> - - - - <_>7 17 12 4 -1. - <_>11 17 4 4 3. - 0 - -0.0621463097631931 - -1. - 5.2797337993979454e-003 - <_> - - <_> - - - - <_>0 17 12 4 -1. - <_>4 17 4 4 3. - 0 - 1.7690609674900770e-003 - -0.1937965005636215 - 0.0956961065530777 - <_> - - <_> - - - - <_>13 12 6 10 -1. - <_>16 12 3 5 2. - <_>13 17 3 5 2. - 0 - -4.3277359509374946e-005 - 0.1137404963374138 - -0.1350484937429428 - <_> - - <_> - - - - <_>0 17 6 6 -1. - <_>3 17 3 6 2. - 0 - 1.2779419776052237e-003 - 0.0796061605215073 - -0.2359701991081238 - <_> - - <_> - - - - <_>12 4 6 8 -1. - <_>12 4 3 8 2. - 1 - -0.0447424799203873 - 0.1855715066194534 - -0.0341678299009800 - <_> - - <_> - - - - <_>3 6 10 15 -1. - <_>8 6 5 15 2. - 0 - 2.7726130792871118e-004 - -0.0579377189278603 - 0.2890321910381317 - <_> - - <_> - - - - <_>10 10 7 4 -1. - <_>10 10 7 2 2. - 1 - 0.0562254711985588 - 0.0138407899066806 - -0.7719973921775818 - <_> - - <_> - - - - <_>1 9 9 7 -1. - <_>4 9 3 7 3. - 0 - 8.6825769394636154e-003 - -0.1826308965682983 - 0.1142326965928078 - <_> - - <_> - - - - <_>1 17 18 6 -1. - <_>10 17 9 3 2. - <_>1 20 9 3 2. - 0 - -2.4038869887590408e-003 - -0.1900413930416107 - 0.0659285634756088 - <_> - - <_> - - - - <_>6 0 13 3 -1. - <_>5 1 13 1 3. - 1 - 0.0128402197733521 - -0.0362791009247303 - 0.4551934003829956 - <_> - - <_> - - - - <_>10 0 3 9 -1. - <_>11 1 1 9 3. - 1 - 1.1061480036005378e-003 - -0.0630546882748604 - 0.0816094726324081 - <_> - - <_> - - - - <_>9 0 9 3 -1. - <_>8 1 9 1 3. - 1 - -4.6486179344356060e-003 - -0.2710854113101959 - 0.0801677033305168 - <_> - - <_> - - - - <_>7 1 12 12 -1. - <_>13 1 6 6 2. - <_>7 7 6 6 2. - 0 - 6.4021991565823555e-003 - -0.0669465884566307 - 0.1063491031527519 - <_> - - <_> - - - - <_>7 4 8 6 -1. - <_>7 4 8 3 2. - 1 - -0.0823703780770302 - 0.3451730012893677 - -0.0484684295952320 - <_> - - <_> - - - - <_>11 11 8 4 -1. - <_>11 11 8 2 2. - 1 - -0.0374298281967640 - -0.6963095068931580 - 0.0130543801933527 - <_> - - <_> - - - - <_>8 11 4 8 -1. - <_>8 11 2 8 2. - 1 - 0.0105004003271461 - 0.0960282832384110 - -0.2636274099349976 - <_> - - <_> - - - - <_>10 10 7 4 -1. - <_>10 10 7 2 2. - 1 - 0.0688512399792671 - 3.7341150455176830e-003 - -0.9998915791511536 - <_> - - <_> - - - - <_>9 10 4 7 -1. - <_>9 10 2 7 2. - 1 - 1.0171310277655721e-003 - -0.2350011020898819 - 0.0910971835255623 - <_> - - <_> - - - - <_>8 7 3 14 -1. - <_>9 7 1 14 3. - 0 - -0.0290579497814178 - 0.5997784733772278 - -0.0368990004062653 - <_> - - <_> - - - - <_>8 6 10 7 -1. - <_>8 6 5 7 2. - 1 - 0.0220227297395468 - 0.0580346509814262 - -0.3274875879287720 - <_> - - <_> - - - - <_>3 6 16 3 -1. - <_>3 7 16 1 3. - 0 - -4.3123541399836540e-003 - 0.2215394973754883 - -0.0613320209085941 - <_> - - <_> - - - - <_>4 5 2 17 -1. - <_>5 5 1 17 2. - 0 - 0.0109497103840113 - 0.0218373797833920 - -0.7466219067573547 - <_> - - <_> - - - - <_>12 0 6 18 -1. - <_>15 0 3 9 2. - <_>12 9 3 9 2. - 0 - 0.0436107404530048 - -0.0450989492237568 - 0.2810913920402527 - <_> - - <_> - - - - <_>3 4 6 16 -1. - <_>3 4 3 8 2. - <_>6 12 3 8 2. - 0 - 0.0772521793842316 - 0.0208017807453871 - -0.8664823770523071 - <_> - - <_> - - - - <_>12 0 6 18 -1. - <_>15 0 3 9 2. - <_>12 9 3 9 2. - 0 - -0.0240238904953003 - 0.3988442122936249 - -0.0352271199226379 - <_> - - <_> - - - - <_>0 1 16 4 -1. - <_>0 1 8 2 2. - <_>8 3 8 2 2. - 0 - 0.0195597801357508 - 0.0359447300434113 - -0.5146911740303040 - <_> - - <_> - - - - <_>6 12 12 5 -1. - <_>6 12 6 5 2. - 0 - 0.0259172990918159 - -0.0129426699131727 - 0.4169597029685974 - <_> - - <_> - - - - <_>3 7 3 10 -1. - <_>3 12 3 5 2. - 0 - -4.6949301031418145e-004 - 0.1666599959135056 - -0.0906800404191017 - <_> - - <_> - - - - <_>11 3 7 12 -1. - <_>11 7 7 4 3. - 0 - -0.0845900326967239 - -0.5928378105163574 - 7.2113061323761940e-003 - <_> - - <_> - - - - <_>0 6 8 6 -1. - <_>0 8 8 2 3. - 0 - -8.9234940242022276e-004 - 0.1745820045471191 - -0.1007250994443893 - <_> - - <_> - - - - <_>12 3 7 6 -1. - <_>12 5 7 2 3. - 0 - -0.0240093506872654 - -0.3913143873214722 - 0.0223610401153564 - <_> - - <_> - - - - <_>0 3 7 6 -1. - <_>0 5 7 2 3. - 0 - -4.7586968867108226e-004 - 0.1830610036849976 - -0.1254113018512726 - <_> - - <_> - - - - <_>13 10 6 8 -1. - <_>15 10 2 8 3. - 0 - 2.9483099933713675e-003 - 0.0653010532259941 - -0.2038708031177521 - <_> - - <_> - - - - <_>0 17 14 2 -1. - <_>0 18 14 1 2. - 0 - 3.6947780754417181e-003 - -0.0608783215284348 - 0.3040302097797394 - <_> - - <_> - - - - <_>13 10 6 8 -1. - <_>15 10 2 8 3. - 0 - -2.9413169249892235e-003 - -0.3028449118137360 - 0.0475504994392395 - <_> - - <_> - - - - <_>0 17 14 2 -1. - <_>0 18 14 1 2. - 0 - -7.1274640504270792e-004 - 0.1620078980922699 - -0.1182216033339500 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>10 0 4 4 2. - <_>6 4 4 4 2. - 0 - 0.0243097506463528 - -0.0114427898079157 - 0.2045395970344544 - <_> - - <_> - - - - <_>0 10 6 8 -1. - <_>2 10 2 8 3. - 0 - -9.1473112115636468e-004 - -0.2070782929658890 - 0.0757013410329819 - <_> - - <_> - - - - <_>13 0 3 14 -1. - <_>14 0 1 14 3. - 0 - -3.6473390646278858e-003 - 0.2409386038780212 - -0.0835655629634857 - <_> - - <_> - - - - <_>6 0 6 7 -1. - <_>8 0 2 7 3. - 0 - 0.0125132203102112 - 0.0415360406041145 - -0.3748772144317627 - <_> - - <_> - - - - <_>6 0 8 8 -1. - <_>10 0 4 4 2. - <_>6 4 4 4 2. - 0 - 6.2148571014404297e-003 - 0.0204341299831867 - -0.0900578498840332 - <_> - - <_> - - - - <_>5 0 8 8 -1. - <_>5 0 4 4 2. - <_>9 4 4 4 2. - 0 - -2.0954229403287172e-003 - 0.1162526011466980 - -0.1856177002191544 - <_> - - <_> - - - - <_>3 7 16 7 -1. - <_>3 7 8 7 2. - 0 - -0.2117325067520142 - -1. - 2.4372090119868517e-003 - <_> - - <_> - - - - <_>0 7 16 7 -1. - <_>8 7 8 7 2. - 0 - 1.0188589803874493e-003 - -0.0756839662790298 - 0.2955543100833893 - -30.7800998687744140 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_>2 11 10 8 -1. - <_>7 11 5 8 2. - 0 - -0.0244226008653641 - 0.2044697999954224 - -0.2229966968297958 - <_> - - <_> - - - - <_>12 8 6 9 -1. - <_>14 8 2 9 3. - 0 - 1.0574000189080834e-003 - -0.1435517072677612 - 0.0856035426259041 - <_> - - <_> - - - - <_>1 8 6 9 -1. - <_>3 8 2 9 3. - 0 - 2.5123930536210537e-003 - 0.1099767982959747 - -0.2304480969905853 - <_> - - <_> - - - - <_>4 3 14 11 -1. - <_>4 3 7 11 2. - 0 - 0.1211273968219757 - 0.0332675017416477 - -0.9991015195846558 - <_> - - <_> - - - - <_>5 5 13 3 -1. - <_>4 6 13 1 3. - 1 - 2.9103590641170740e-003 - -0.1039192974567413 - 0.1929288059473038 - <_> - - <_> - - - - <_>7 0 6 9 -1. - <_>9 0 2 9 3. - 0 - -8.6717177182435989e-003 - -0.2708722054958344 - 0.0997629016637802 - <_> - - <_> - - - - <_>1 0 14 12 -1. - <_>1 0 7 6 2. - <_>8 6 7 6 2. - 0 - 6.1140959151089191e-003 - -0.1151710003614426 - 0.2042921930551529 - <_> - - <_> - - - - <_>10 0 8 4 -1. - <_>10 0 4 4 2. - 0 - 0.0205909907817841 - -0.0331075787544250 - 0.4637545943260193 - <_> - - <_> - - - - <_>3 10 4 12 -1. - <_>5 10 2 12 2. - 0 - 1.1507490416988730e-003 - 0.0760146230459213 - -0.2748520970344544 - <_> - - <_> - - - - <_>11 0 2 22 -1. - <_>11 11 2 11 2. - 0 - 6.5449788235127926e-003 - -0.1126658990979195 - 0.0500315688550472 - <_> - - <_> - - - - <_>0 19 14 4 -1. - <_>0 19 7 2 2. - <_>7 21 7 2 2. - 0 - 1.6102850204333663e-003 - -0.1879495978355408 - 0.1123441010713577 - <_> - - <_> - - - - <_>10 8 2 8 -1. - <_>10 8 1 8 2. - 1 - 2.8527909889817238e-003 - 0.0404574684798718 - -0.0847164615988731 - <_> - - <_> - - - - <_>5 0 4 14 -1. - <_>5 0 2 7 2. - <_>7 7 2 7 2. - 0 - -4.0883300825953484e-003 - 0.1250918954610825 - -0.1485010981559753 - <_> - - <_> - - - - <_>8 4 4 10 -1. - <_>8 9 4 5 2. - 0 - 1.6648479504510760e-003 - -0.1034672036767006 - 0.0535852313041687 - <_> - - <_> - - - - <_>9 8 8 2 -1. - <_>9 8 8 1 2. - 1 - -3.1635090708732605e-003 - -0.3372938930988312 - 0.0611929185688496 - <_> - - <_> - - - - <_>0 7 19 3 -1. - <_>0 8 19 1 3. - 0 - -0.0109225995838642 - 0.4523848891258240 - -0.0579033792018890 - <_> - - <_> - - - - <_>0 8 19 2 -1. - <_>0 9 19 1 2. - 0 - -3.3356929197907448e-003 - 0.3388097882270813 - -0.0644701123237610 - <_> - - <_> - - - - <_>1 6 18 4 -1. - <_>10 6 9 2 2. - <_>1 8 9 2 2. - 0 - -0.0300145000219345 - -0.8283550143241882 - 0.0246961191296577 - <_> - - <_> - - - - <_>2 1 8 18 -1. - <_>6 1 4 18 2. - 0 - -0.3011043965816498 - -0.8342905044555664 - 0.0143693098798394 - <_> - - <_> - - - - <_>6 11 10 12 -1. - <_>11 11 5 6 2. - <_>6 17 5 6 2. - 0 - -4.2447918094694614e-003 - -0.1228173971176148 - 0.0281341001391411 - <_> - - <_> - - - - <_>3 7 9 11 -1. - <_>6 7 3 11 3. - 0 - 7.7825621701776981e-003 - -0.0692223086953163 - 0.2581450939178467 - <_> - - <_> - - - - <_>9 0 6 14 -1. - <_>11 0 2 14 3. - 0 - -0.0127267101779580 - 0.1074585989117622 - -0.0765758231282234 - <_> - - <_> - - - - <_>2 16 12 7 -1. - <_>6 16 4 7 3. - 0 - 4.7346940264105797e-003 - 0.0441278591752052 - -0.3804568052291870 - <_> - - <_> - - - - <_>2 15 15 6 -1. - <_>7 15 5 6 3. - 0 - 3.4512639977037907e-003 - -0.0429472103714943 - 0.4607483148574829 - <_> - - <_> - - - - <_>5 2 8 7 -1. - <_>7 2 4 7 2. - 0 - 5.6996050989255309e-004 - 0.0669261217117310 - -0.2968584895133972 - <_> - - <_> - - - - <_>8 0 4 14 -1. - <_>9 0 2 14 2. - 0 - -0.0538890995085239 - -1. - 3.9760880172252655e-003 - <_> - - <_> - - - - <_>7 0 4 14 -1. - <_>8 0 2 14 2. - 0 - 1.0263220174238086e-003 - -0.1113893017172813 - 0.1776421070098877 - <_> - - <_> - - - - <_>7 18 12 5 -1. - <_>11 18 4 5 3. - 0 - 0.0393744409084320 - 0.0129774296656251 - -0.6366993784904480 - <_> - - <_> - - - - <_>1 18 15 3 -1. - <_>1 19 15 1 3. - 0 - 0.0187779795378447 - -0.0393345691263676 - 0.4599016904830933 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 1.5851920470595360e-003 - -0.1091786995530129 - 0.0562477894127369 - <_> - - <_> - - - - <_>7 8 9 6 -1. - <_>5 10 9 2 3. - 1 - -0.0108577404171228 - -0.2017634063959122 - 0.0906854569911957 - <_> - - <_> - - - - <_>11 10 4 9 -1. - <_>12 11 2 9 2. - 1 - 0.0443992614746094 - 1.9891490228474140e-003 - -0.9998115897178650 - <_> - - <_> - - - - <_>8 10 9 4 -1. - <_>7 11 9 2 2. - 1 - -1.7311190022155643e-003 - 0.1469902992248535 - -0.1406953930854797 - <_> - - <_> - - - - <_>15 3 2 16 -1. - <_>15 11 2 8 2. - 0 - -1.6609770245850086e-003 - 0.1619053035974503 - -0.0555355995893478 - <_> - - <_> - - - - <_>1 17 5 6 -1. - <_>1 20 5 3 2. - 0 - -4.3332851491868496e-003 - -0.3397156894207001 - 0.0432091988623142 - <_> - - <_> - - - - <_>12 16 5 6 -1. - <_>12 19 5 3 2. - 0 - -4.4786658691009507e-005 - 0.1021749004721642 - -0.1028980985283852 - <_> - - <_> - - - - <_>5 2 3 14 -1. - <_>6 2 1 14 3. - 0 - -0.0122559396550059 - 0.4633125960826874 - -0.0388291291892529 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 0.0317283906042576 - -0.0109189599752426 - 0.1925213038921356 - <_> - - <_> - - - - <_>6 1 6 9 -1. - <_>8 1 2 9 3. - 0 - 8.6054168641567230e-003 - 0.0539623089134693 - -0.3383587002754211 - <_> - - <_> - - - - <_>7 7 10 5 -1. - <_>7 7 5 5 2. - 0 - 2.4249579291790724e-003 - -0.0438760593533516 - 0.2497778981924057 - <_> - - <_> - - - - <_>6 0 4 20 -1. - <_>6 0 2 10 2. - <_>8 10 2 10 2. - 0 - -1.9957860931754112e-003 - 0.1139840036630631 - -0.1792531013488770 - <_> - - <_> - - - - <_>13 10 3 9 -1. - <_>14 11 1 9 3. - 1 - 0.0460425093770027 - 2.0680939778685570e-003 - -0.8767393231391907 - <_> - - <_> - - - - <_>6 10 9 3 -1. - <_>5 11 9 1 3. - 1 - 2.4898271076381207e-003 - -0.0695956125855446 - 0.2614254057407379 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - 1.0052820434793830e-003 - 0.0455016605556011 - -0.1239958032965660 - <_> - - <_> - - - - <_>8 6 3 14 -1. - <_>9 6 1 14 3. - 0 - 9.0297553688287735e-003 - -0.0712724104523659 - 0.2291935980319977 - <_> - - <_> - - - - <_>8 1 4 9 -1. - <_>8 1 2 9 2. - 0 - 0.0120284901931882 - 0.0202303305268288 - -0.3405298888683319 - <_> - - <_> - - - - <_>7 1 4 9 -1. - <_>9 1 2 9 2. - 0 - 2.3313730489462614e-003 - 0.0872593373060226 - -0.2319519072771072 - <_> - - <_> - - - - <_>7 17 12 6 -1. - <_>13 17 6 3 2. - <_>7 20 6 3 2. - 0 - 9.5184362726286054e-004 - -0.2316880971193314 - 0.0550221912562847 - <_> - - <_> - - - - <_>3 4 10 6 -1. - <_>8 4 5 6 2. - 0 - 9.6378661692142487e-003 - -0.0416555590927601 - 0.4292826056480408 - <_> - - <_> - - - - <_>15 0 4 8 -1. - <_>15 4 4 4 2. - 0 - 0.0135669801384211 - 0.0456696599721909 - -0.2250124067068100 - <_> - - <_> - - - - <_>3 5 6 8 -1. - <_>5 5 2 8 3. - 0 - 0.0336535014212132 - -0.0678615793585777 - 0.3696761131286621 - <_> - - <_> - - - - <_>15 0 4 8 -1. - <_>15 4 4 4 2. - 0 - -0.0603950209915638 - -0.9088736176490784 - 3.8193699438124895e-003 - <_> - - <_> - - - - <_>0 0 4 8 -1. - <_>0 4 4 4 2. - 0 - 1.3169209705665708e-003 - -0.1594133973121643 - 0.1476655006408691 - <_> - - <_> - - - - <_>7 0 9 5 -1. - <_>10 0 3 5 3. - 0 - -9.7704064100980759e-003 - -0.1284841001033783 - 0.0478323996067047 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - -4.5100511051714420e-003 - 0.1257490962743759 - -0.2196446955204010 - <_> - - <_> - - - - <_>5 21 14 2 -1. - <_>5 21 7 2 2. - 0 - -2.0346629898995161e-003 - -0.1857440024614334 - 0.0491770915687084 - <_> - - <_> - - - - <_>9 3 8 9 -1. - <_>9 3 4 9 2. - 1 - 0.0132943904027343 - 0.0914972424507141 - -0.2134393006563187 - <_> - - <_> - - - - <_>6 1 12 8 -1. - <_>12 1 6 4 2. - <_>6 5 6 4 2. - 0 - -0.0400542505085468 - 0.3177005946636200 - -0.0310807693749666 - <_> - - <_> - - - - <_>4 10 10 11 -1. - <_>9 10 5 11 2. - 0 - 0.0254929903894663 - 0.0388770401477814 - -0.4565899074077606 - <_> - - <_> - - - - <_>12 1 3 15 -1. - <_>13 1 1 15 3. - 0 - -0.0380896888673306 - 0.6661549806594849 - -0.0198953393846750 - <_> - - <_> - - - - <_>4 3 8 12 -1. - <_>8 3 4 12 2. - 0 - -0.2130831927061081 - -0.8653417825698853 - 0.0208984296768904 - <_> - - <_> - - - - <_>8 2 10 8 -1. - <_>8 2 5 8 2. - 0 - -0.0897275432944298 - 0.2572591900825501 - -0.0462616682052612 - <_> - - <_> - - - - <_>0 4 19 6 -1. - <_>0 6 19 2 3. - 0 - 0.0250757001340389 - 0.0412595085799694 - -0.3766664862632752 - <_> - - <_> - - - - <_>4 0 11 16 -1. - <_>4 4 11 8 2. - 0 - 0.0233661495149136 - -0.0722028315067291 - 0.2473703026771545 - <_> - - <_> - - - - <_>4 1 6 5 -1. - <_>7 1 3 5 2. - 0 - 2.8038409072905779e-004 - -0.0794735476374626 - 0.2247823029756546 - <_> - - <_> - - - - <_>3 5 14 18 -1. - <_>10 5 7 9 2. - <_>3 14 7 9 2. - 0 - 8.2364194095134735e-003 - 0.0512110106647015 - -0.1332865953445435 - <_> - - <_> - - - - <_>1 17 5 6 -1. - <_>1 20 5 3 2. - 0 - 0.0539227798581123 - 0.0171083994209766 - -0.8925604224205017 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 2.7015779633074999e-003 - -0.1840559989213944 - 0.1283039003610611 - <_> - - <_> - - - - <_>2 0 4 14 -1. - <_>2 0 2 7 2. - <_>4 7 2 7 2. - 0 - -0.0165056902915239 - 0.6223918199539185 - -0.0264136902987957 - <_> - - <_> - - - - <_>10 2 2 10 -1. - <_>10 2 1 10 2. - 1 - -1.8418730469420552e-003 - -0.1264680027961731 - 0.0486908517777920 - <_> - - <_> - - - - <_>9 1 9 3 -1. - <_>8 2 9 1 3. - 1 - 5.1953629590570927e-003 - 0.0456537008285522 - -0.3251998126506805 - <_> - - <_> - - - - <_>6 2 10 6 -1. - <_>11 2 5 3 2. - <_>6 5 5 3 2. - 0 - 5.0785308703780174e-003 - 0.0407032594084740 - -0.2062076926231384 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>1 14 9 2 3. - 0 - 5.0687040202319622e-003 - -0.0764562487602234 - 0.2586740851402283 - <_> - - <_> - - - - <_>6 2 10 6 -1. - <_>11 2 5 3 2. - <_>6 5 5 3 2. - 0 - -0.0118923196569085 - -0.2236621975898743 - 0.0308554098010063 - <_> - - <_> - - - - <_>3 2 10 6 -1. - <_>3 2 5 3 2. - <_>8 5 5 3 2. - 0 - 2.4257500190287828e-003 - -0.0715978890657425 - 0.2610881924629211 - <_> - - <_> - - - - <_>7 0 5 20 -1. - <_>7 5 5 10 2. - 0 - -0.0119903795421124 - 0.2267847955226898 - -0.1030550971627235 - <_> - - <_> - - - - <_>2 10 12 7 -1. - <_>5 10 6 7 2. - 0 - -0.0227722004055977 - -0.2377014011144638 - 0.0766308531165123 - -30.6944007873535160 - 24 - -1 - <_> - - - <_> - - <_> - - - - <_>0 18 14 4 -1. - <_>0 18 7 2 2. - <_>7 20 7 2 2. - 0 - 3.3625920768827200e-003 - -0.1826844066381455 - 0.1593551933765411 - <_> - - <_> - - - - <_>9 7 3 15 -1. - <_>10 7 1 15 3. - 0 - 4.4937757775187492e-003 - -0.0894381925463676 - 0.2842231094837189 - <_> - - <_> - - - - <_>6 8 6 5 -1. - <_>9 8 3 5 2. - 0 - -8.8971032528206706e-004 - 0.0956655889749527 - -0.1940706968307495 - <_> - - <_> - - - - <_>9 4 2 17 -1. - <_>9 4 1 17 2. - 0 - 2.6789100375026464e-003 - -0.1015266999602318 - 0.1786416023969650 - <_> - - <_> - - - - <_>8 4 2 17 -1. - <_>9 4 1 17 2. - 0 - -4.0554129518568516e-003 - -0.2333766072988510 - 0.1227973997592926 - <_> - - <_> - - - - <_>8 18 9 5 -1. - <_>11 18 3 5 3. - 0 - -0.0177422501146793 - 0.1919087022542954 - -0.0317107290029526 - <_> - - <_> - - - - <_>2 18 9 5 -1. - <_>5 18 3 5 3. - 0 - 3.0996970599517226e-004 - -0.1934470981359482 - 0.0995416790246964 - <_> - - <_> - - - - <_>12 18 6 5 -1. - <_>12 18 3 5 2. - 0 - -3.7737619131803513e-003 - -0.2029885053634644 - 0.0793160125613213 - <_> - - <_> - - - - <_>5 15 6 5 -1. - <_>8 15 3 5 2. - 0 - 1.4448439469560981e-003 - -0.0598114915192127 - 0.4137539863586426 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>15 0 2 10 3. - 0 - 4.1589159518480301e-003 - -0.0929341092705727 - 0.0775753483176231 - <_> - - <_> - - - - <_>2 14 10 9 -1. - <_>2 17 10 3 3. - 0 - 9.7764004021883011e-003 - 0.0530273914337158 - -0.3643518090248108 - <_> - - <_> - - - - <_>13 0 6 10 -1. - <_>15 0 2 10 3. - 0 - -2.8739850968122482e-003 - 0.1272812038660049 - -0.0321823507547379 - <_> - - <_> - - - - <_>0 0 6 10 -1. - <_>2 0 2 10 3. - 0 - 4.3552028946578503e-003 - -0.1447207033634186 - 0.1417167931795120 - <_> - - <_> - - - - <_>12 5 3 12 -1. - <_>12 5 3 6 2. - 1 - -0.1213203966617584 - 0.1528424024581909 - -0.0269485209137201 - <_> - - <_> - - - - <_>6 18 7 4 -1. - <_>6 20 7 2 2. - 0 - 7.5531532056629658e-003 - 0.1015343964099884 - -0.1871580034494400 - <_> - - <_> - - - - <_>14 7 4 12 -1. - <_>15 8 2 12 2. - 1 - 4.8978552222251892e-003 - 0.0280349906533957 - -0.1422438025474548 - <_> - - <_> - - - - <_>5 7 12 4 -1. - <_>4 8 12 2 2. - 1 - -1.8711129669100046e-003 - 0.1512988954782486 - -0.1391292959451675 - <_> - - <_> - - - - <_>14 13 5 9 -1. - <_>14 16 5 3 3. - 0 - 0.0418676994740963 - 0.0182305499911308 - -0.5677195787429810 - <_> - - <_> - - - - <_>0 13 5 9 -1. - <_>0 16 5 3 3. - 0 - -8.4031058941036463e-004 - 0.1539203971624374 - -0.1211211010813713 - <_> - - <_> - - - - <_>12 14 7 6 -1. - <_>12 16 7 2 3. - 0 - 3.6289851414039731e-004 - -0.0799135863780975 - 0.0700974836945534 - <_> - - <_> - - - - <_>1 16 6 6 -1. - <_>1 19 6 3 2. - 0 - -4.4498889474198222e-004 - 0.1678467988967896 - -0.1380593031644821 - <_> - - <_> - - - - <_>7 0 9 4 -1. - <_>7 2 9 2 2. - 0 - 2.2194290068000555e-003 - 0.0584531389176846 - -0.1237479001283646 - <_> - - <_> - - - - <_>0 9 18 3 -1. - <_>0 10 18 1 3. - 0 - -2.5759059935808182e-003 - 0.2261949926614761 - -0.0862514376640320 - <_> - - <_> - - - - <_>9 17 9 6 -1. - <_>12 17 3 6 3. - 0 - 0.0589898116886616 - 6.9204131141304970e-003 - -0.7336757779121399 - <_> - - <_> - - - - <_>2 14 15 9 -1. - <_>7 17 5 3 9. - 0 - -0.2788914144039154 - 0.4672810137271881 - -0.0386128611862659 - <_> - - <_> - - - - <_>9 13 8 8 -1. - <_>9 17 8 4 2. - 0 - -5.3824000060558319e-003 - -0.1693985015153885 - 0.0613945387303829 - <_> - - <_> - - - - <_>4 9 2 14 -1. - <_>5 9 1 14 2. - 0 - -8.9165568351745605e-004 - -0.2486791014671326 - 0.0765902772545815 - <_> - - <_> - - - - <_>12 10 4 13 -1. - <_>12 10 2 13 2. - 0 - 0.0120718898251653 - 8.9360373094677925e-003 - -0.2702870965003967 - <_> - - <_> - - - - <_>3 10 4 13 -1. - <_>5 10 2 13 2. - 0 - 3.8453561137430370e-004 - 0.0994883030653000 - -0.2152262926101685 - <_> - - <_> - - - - <_>5 5 14 2 -1. - <_>5 5 7 2 2. - 0 - -2.2118990309536457e-003 - 0.0407863892614841 - -0.1156380996108055 - <_> - - <_> - - - - <_>0 5 14 2 -1. - <_>7 5 7 2 2. - 0 - 0.0209608208388090 - -0.0313559286296368 - 0.7100617885589600 - <_> - - <_> - - - - <_>13 12 6 10 -1. - <_>16 12 3 5 2. - <_>13 17 3 5 2. - 0 - -3.9021030534058809e-003 - -0.1746001988649368 - 0.0407753512263298 - <_> - - <_> - - - - <_>0 12 6 10 -1. - <_>0 12 3 5 2. - <_>3 17 3 5 2. - 0 - -4.5169141230871901e-005 - 0.1210518032312393 - -0.1661822050809860 - <_> - - <_> - - - - <_>12 8 5 12 -1. - <_>12 11 5 6 2. - 0 - 0.0691956728696823 - 7.6447450555860996e-003 - -0.5921157002449036 - <_> - - <_> - - - - <_>2 8 5 12 -1. - <_>2 11 5 6 2. - 0 - -1.1615910334512591e-003 - 0.2258497029542923 - -0.0917727723717690 - <_> - - <_> - - - - <_>6 8 7 4 -1. - <_>6 10 7 2 2. - 0 - 4.5347518607741222e-005 - -0.2086371928453445 - 0.0903640612959862 - <_> - - <_> - - - - <_>0 17 14 3 -1. - <_>0 18 14 1 3. - 0 - -0.0190451499074697 - 0.4234400987625122 - -0.0460181795060635 - <_> - - <_> - - - - <_>12 7 2 15 -1. - <_>12 7 1 15 2. - 0 - 4.1966438293457031e-003 - -0.0283696707338095 - 0.3080070912837982 - <_> - - <_> - - - - <_>1 17 9 6 -1. - <_>4 17 3 6 3. - 0 - 2.5357000413350761e-004 - -0.2897196114063263 - 0.0753742232918739 - <_> - - <_> - - - - <_>10 6 9 7 -1. - <_>13 9 3 7 3. - 1 - 0.1081790998578072 - -0.0142864296212792 - 0.7282333970069885 - <_> - - <_> - - - - <_>9 6 7 9 -1. - <_>6 9 7 3 3. - 1 - -5.5140778422355652e-003 - -0.1885464936494827 - 0.1137854978442192 - <_> - - <_> - - - - <_>5 8 10 4 -1. - <_>5 10 10 2 2. - 0 - 5.5264509283006191e-003 - 0.0708340182900429 - -0.1839759945869446 - <_> - - <_> - - - - <_>0 6 6 14 -1. - <_>0 13 6 7 2. - 0 - 6.4198831096291542e-003 - -0.1144948005676270 - 0.1912039071321487 - <_> - - <_> - - - - <_>1 1 18 22 -1. - <_>10 1 9 11 2. - <_>1 12 9 11 2. - 0 - 0.1931422054767609 - 0.0140662295743823 - -0.6977211833000183 - <_> - - <_> - - - - <_>1 5 17 3 -1. - <_>1 6 17 1 3. - 0 - 0.0406702086329460 - -0.0242790896445513 - 0.7882817983627319 - <_> - - <_> - - - - <_>13 12 6 5 -1. - <_>13 12 3 5 2. - 0 - -2.1965131163597107e-003 - -0.2010557949542999 - 0.0510505102574825 - <_> - - <_> - - - - <_>0 5 16 3 -1. - <_>0 6 16 1 3. - 0 - -4.7381771728396416e-003 - 0.2522231042385101 - -0.0734292268753052 - <_> - - <_> - - - - <_>12 6 6 17 -1. - <_>12 6 3 17 2. - 0 - 0.0717736408114433 - -9.0609909966588020e-003 - 0.9294689893722534 - <_> - - <_> - - - - <_>1 6 6 17 -1. - <_>4 6 3 17 2. - 0 - 6.9466611603274941e-004 - 0.1062569022178650 - -0.1916245967149735 - <_> - - <_> - - - - <_>1 15 18 2 -1. - <_>1 15 9 2 2. - 0 - 2.6388010010123253e-003 - 0.0633307173848152 - -0.2040408998727799 - <_> - - <_> - - - - <_>0 5 2 16 -1. - <_>1 5 1 16 2. - 0 - -3.1406691414304078e-004 - 0.1799051016569138 - -0.0984959602355957 - <_> - - <_> - - - - <_>15 12 4 10 -1. - <_>15 17 4 5 2. - 0 - -5.8691151207312942e-004 - 0.0850712582468987 - -0.0769745409488678 - <_> - - <_> - - - - <_>1 5 16 3 -1. - <_>1 6 16 1 3. - 0 - 1.0376359568908811e-003 - -0.1109630987048149 - 0.1598507016897202 - <_> - - <_> - - - - <_>6 9 9 12 -1. - <_>6 12 9 6 2. - 0 - 1.6373570542782545e-003 - 0.1112873032689095 - -0.1235273033380508 - <_> - - <_> - - - - <_>3 13 4 8 -1. - <_>3 17 4 4 2. - 0 - -7.3773309122771025e-004 - 0.1289086043834686 - -0.1429457962512970 - <_> - - <_> - - - - <_>9 13 8 8 -1. - <_>9 17 8 4 2. - 0 - -0.0168414507061243 - -0.2423107028007507 - 0.0205974709242582 - <_> - - <_> - - - - <_>5 0 8 10 -1. - <_>5 0 4 5 2. - <_>9 5 4 5 2. - 0 - -0.0305906906723976 - 0.3351395130157471 - -0.0471835695207119 - <_> - - <_> - - - - <_>1 4 18 6 -1. - <_>10 4 9 3 2. - <_>1 7 9 3 2. - 0 - 0.0102145401760936 - 0.0554971992969513 - -0.2340593934059143 - <_> - - <_> - - - - <_>3 16 9 6 -1. - <_>3 18 9 2 3. - 0 - -1.1853770120069385e-003 - 0.0920741632580757 - -0.1734714061021805 - <_> - - <_> - - - - <_>3 17 14 4 -1. - <_>3 18 14 2 2. - 0 - 1.1729650432243943e-003 - -0.0840759426355362 - 0.2068953067064285 - <_> - - <_> - - - - <_>2 3 9 6 -1. - <_>2 5 9 2 3. - 0 - 0.0108941700309515 - 0.0564759410917759 - -0.3167718052864075 - <_> - - <_> - - - - <_>0 3 19 3 -1. - <_>0 4 19 1 3. - 0 - -2.0437049679458141e-003 - 0.1879636943340302 - -0.0988890230655670 - <_> - - <_> - - - - <_>1 3 16 4 -1. - <_>1 4 16 2 2. - 0 - -5.7676038704812527e-003 - -0.2518925964832306 - 0.0751082673668861 - <_> - - <_> - - - - <_>11 0 6 14 -1. - <_>14 0 3 7 2. - <_>11 7 3 7 2. - 0 - 0.0696244835853577 - -0.0176613796502352 - 0.4339039921760559 - <_> - - <_> - - - - <_>0 17 9 6 -1. - <_>3 17 3 6 3. - 0 - -3.1853429391048849e-004 - -0.2937808036804199 - 0.0581624209880829 - <_> - - <_> - - - - <_>7 16 8 7 -1. - <_>9 16 4 7 2. - 0 - 1.7543470021337271e-003 - 0.0268584899604321 - -0.1522563993930817 - <_> - - <_> - - - - <_>3 14 10 5 -1. - <_>8 14 5 5 2. - 0 - 1.2951970566064119e-003 - -0.0717691183090210 - 0.3810122907161713 - <_> - - <_> - - - - <_>12 9 3 14 -1. - <_>13 9 1 14 3. - 0 - 0.0205491408705711 - -0.0231714304536581 - 0.2722831964492798 - <_> - - <_> - - - - <_>4 9 3 14 -1. - <_>5 9 1 14 3. - 0 - 2.7475480455905199e-003 - 0.0672073066234589 - -0.2716295123100281 - <_> - - <_> - - - - <_>10 9 6 14 -1. - <_>13 9 3 7 2. - <_>10 16 3 7 2. - 0 - 5.2633951418101788e-003 - -0.1393160969018936 - 0.1182122975587845 - <_> - - <_> - - - - <_>6 0 6 5 -1. - <_>9 0 3 5 2. - 0 - -5.2199261263012886e-003 - -0.3321351110935211 - 0.0473291911184788 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>7 4 6 4 2. - 0 - 9.9096707999706268e-003 - -0.0697067826986313 - 0.1995428055524826 - <_> - - <_> - - - - <_>2 0 11 21 -1. - <_>2 7 11 7 3. - 0 - -0.1033437997102737 - 0.4241856038570404 - -0.0398962683975697 - <_> - - <_> - - - - <_>8 8 4 12 -1. - <_>8 12 4 4 3. - 0 - -0.0133223198354244 - -0.2550886869430542 - 0.0413510315120220 - <_> - - <_> - - - - <_>3 9 6 14 -1. - <_>3 9 3 7 2. - <_>6 16 3 7 2. - 0 - 1.7832260346040130e-003 - -0.1766443997621536 - 0.1033623963594437 - <_> - - <_> - - - - <_>10 7 8 7 -1. - <_>12 7 4 7 2. - 0 - 0.0632823333144188 - 0.0123956799507141 - -0.4635525047779083 - <_> - - <_> - - - - <_>1 7 8 7 -1. - <_>3 7 4 7 2. - 0 - -5.1022358238697052e-003 - 0.4067063927650452 - -0.0501934513449669 - <_> - - <_> - - - - <_>5 2 9 20 -1. - <_>8 2 3 20 3. - 0 - 0.0398915298283100 - 0.0372191295027733 - -0.5569645166397095 - -30.6646995544433590 - 25 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_eyepair_big.xml b/data/haarcascades/haarcascade_mcs_eyepair_big.xml deleted file mode 100644 index ecc92bb..0000000 --- a/data/haarcascades/haarcascade_mcs_eyepair_big.xml +++ /dev/null @@ -1,10930 +0,0 @@ - - - - - - 45 11 - - <_> - - - <_> - - <_> - - - - <_> - 7 3 30 3 -1. - <_> - 17 3 10 3 3. - 0 - 0.1012997999787331 - -0.7954636812210083 - 0.7811083793640137 - <_> - - <_> - - - - <_> - 34 5 11 6 -1. - <_> - 34 8 11 3 2. - 0 - 0.0312121100723743 - -0.7282348275184631 - 0.6224442720413208 - <_> - - <_> - - - - <_> - 6 1 6 9 -1. - <_> - 8 4 2 3 9. - 0 - -0.0549067892134190 - 0.6679443120956421 - -0.6076071262359619 - <_> - - <_> - - - - <_> - 15 0 15 11 -1. - <_> - 20 0 5 11 3. - 0 - 0.1310410946607590 - -0.4881607890129089 - 0.6749575734138489 - -1.4563479423522949 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 3 30 3 -1. - <_> - 17 3 10 3 3. - 0 - 0.1507283002138138 - -0.6390901207923889 - 0.8053625822067261 - <_> - - <_> - - - - <_> - 34 5 11 6 -1. - <_> - 34 8 11 3 2. - 0 - 0.0228874403983355 - -0.7231366038322449 - 0.3992983996868134 - <_> - - <_> - - - - <_> - 0 5 11 6 -1. - <_> - 0 8 11 3 2. - 0 - 0.0276746600866318 - -0.7064399719238281 - 0.4885388016700745 - <_> - - <_> - - - - <_> - 22 0 6 11 -1. - <_> - 22 0 3 11 2. - 0 - 0.0318998582661152 - -0.4218417108058929 - 0.5392153263092041 - <_> - - <_> - - - - <_> - 17 0 6 11 -1. - <_> - 20 0 3 11 2. - 0 - 0.0369728282094002 - -0.4240063130855560 - 0.5681108236312866 - <_> - - <_> - - - - <_> - 39 0 1 9 -1. - <_> - 36 3 1 3 3. - 1 - -0.0167110897600651 - 0.4617055952548981 - -0.4238983988761902 - -1.4917520284652710 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 0 27 6 -1. - <_> - 18 0 9 6 3. - 0 - 0.2120860069990158 - -0.6502287983894348 - 0.5993312001228333 - <_> - - <_> - - - - <_> - 39 0 1 9 -1. - <_> - 36 3 1 3 3. - 1 - -0.0227453205734491 - 0.5193532109260559 - -0.4416399896144867 - <_> - - <_> - - - - <_> - 7 3 4 8 -1. - <_> - 7 7 4 4 2. - 0 - 0.0215619597584009 - -0.6439520120620728 - 0.5154399871826172 - <_> - - <_> - - - - <_> - 17 2 12 8 -1. - <_> - 21 2 4 8 3. - 0 - 0.0875263586640358 - -0.3723556995391846 - 0.4822827875614166 - <_> - - <_> - - - - <_> - 1 7 5 4 -1. - <_> - 1 9 5 2 2. - 0 - 1.7132370267063379e-003 - -0.6259062886238098 - 0.3193156123161316 - <_> - - <_> - - - - <_> - 31 1 9 9 -1. - <_> - 34 4 3 3 9. - 0 - -0.1218293979763985 - 0.4427149891853333 - -0.2849208116531372 - <_> - - <_> - - - - <_> - 2 1 8 4 -1. - <_> - 2 3 8 2 2. - 0 - -0.0165680497884750 - 0.4386225938796997 - -0.3060705065727234 - <_> - - <_> - - - - <_> - 18 2 12 9 -1. - <_> - 22 2 4 9 3. - 0 - -0.0805537775158882 - 0.6011540293693543 - -0.0198485106229782 - <_> - - <_> - - - - <_> - 15 2 12 9 -1. - <_> - 19 2 4 9 3. - 0 - 0.0945484191179276 - -0.2503345906734467 - 0.4800544977188110 - <_> - - <_> - - - - <_> - 31 4 9 3 -1. - <_> - 34 4 3 3 3. - 0 - -9.6633229404687881e-003 - 0.2112565934658051 - -0.2550820112228394 - <_> - - <_> - - - - <_> - 20 9 4 2 -1. - <_> - 20 9 2 1 2. - <_> - 22 10 2 1 2. - 0 - -1.7194730462506413e-003 - -0.7437624931335449 - 0.1356191039085388 - -1.6821570396423340 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 24 9 -1. - <_> - 8 3 8 3 9. - 0 - -0.2984513044357300 - 0.5768417119979858 - -0.5636575222015381 - <_> - - <_> - - - - <_> - 7 3 36 4 -1. - <_> - 16 3 18 4 2. - 0 - 0.0848317891359329 - -0.4878582060337067 - 0.3023360073566437 - <_> - - <_> - - - - <_> - 9 5 4 2 -1. - <_> - 11 5 2 2 2. - 0 - 4.8235268332064152e-003 - -0.4168018996715546 - 0.5473024249076843 - <_> - - <_> - - - - <_> - 22 0 6 10 -1. - <_> - 22 0 3 10 2. - 0 - 0.0247961003333330 - -0.4074968099594116 - 0.2987192869186401 - <_> - - <_> - - - - <_> - 0 5 6 6 -1. - <_> - 0 8 6 3 2. - 0 - 7.8466311097145081e-003 - -0.6626297235488892 - 0.3087947070598602 - <_> - - <_> - - - - <_> - 21 0 8 11 -1. - <_> - 21 0 4 11 2. - 0 - 0.0881724432110786 - -0.1964032948017120 - 0.1787654012441635 - <_> - - <_> - - - - <_> - 1 3 42 8 -1. - <_> - 1 3 21 4 2. - <_> - 22 7 21 4 2. - 0 - 6.7136192228645086e-004 - -0.4565294086933136 - 0.4721651077270508 - <_> - - <_> - - - - <_> - 24 0 8 3 -1. - <_> - 26 2 4 3 2. - 1 - -5.8130059187533334e-005 - 0.0189487598836422 - -0.2790096104145050 - <_> - - <_> - - - - <_> - 21 0 3 8 -1. - <_> - 19 2 3 4 2. - 1 - -7.0680370554327965e-003 - 0.4315592050552368 - -0.5228719115257263 - <_> - - <_> - - - - <_> - 35 3 2 8 -1. - <_> - 35 7 2 4 2. - 0 - 0.0104867396876216 - -0.6200038194656372 - 0.4006851017475128 - <_> - - <_> - - - - <_> - 2 4 36 5 -1. - <_> - 11 4 18 5 2. - 0 - 0.0301965996623039 - -0.7257996201515198 - 0.1910271048545837 - <_> - - <_> - - - - <_> - 12 0 21 1 -1. - <_> - 19 0 7 1 3. - 0 - 2.2740899585187435e-003 - -0.7437924742698669 - 0.1435914039611816 - <_> - - <_> - - - - <_> - 8 5 2 6 -1. - <_> - 8 8 2 3 2. - 0 - 2.8281889390200377e-003 - -0.7035927176475525 - 0.2077458947896957 - <_> - - <_> - - - - <_> - 24 9 11 2 -1. - <_> - 24 10 11 1 2. - 0 - 9.4722010544501245e-005 - -0.6866136193275452 - 0.2300024032592773 - <_> - - <_> - - - - <_> - 2 7 2 4 -1. - <_> - 2 9 2 2 2. - 0 - 5.8486708439886570e-005 - -0.7492769956588745 - 0.1742060035467148 - <_> - - <_> - - - - <_> - 42 4 2 2 -1. - <_> - 42 4 1 2 2. - 1 - -5.3329051297623664e-005 - 0.1954517960548401 - -0.6460217237472534 - <_> - - <_> - - - - <_> - 3 4 2 2 -1. - <_> - 3 4 2 1 2. - 1 - -1.9914070435333997e-005 - 0.3191055059432983 - -0.5000588893890381 - <_> - - <_> - - - - <_> - 23 6 16 5 -1. - <_> - 27 6 8 5 2. - 0 - -0.0284833405166864 - 0.2720688879489899 - -0.1728384047746658 - <_> - - <_> - - - - <_> - 10 2 2 4 -1. - <_> - 9 3 2 2 2. - 1 - -7.0301168598234653e-003 - 0.4906997084617615 - -0.2584682106971741 - -2.4261860847473145 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 3 33 3 -1. - <_> - 17 3 11 3 3. - 0 - 0.1710568964481354 - -0.5641617774963379 - 0.5475422739982605 - <_> - - <_> - - - - <_> - 31 1 9 9 -1. - <_> - 34 4 3 3 9. - 0 - -0.1049742996692658 - 0.4727413058280945 - -0.4532259106636047 - <_> - - <_> - - - - <_> - 9 0 6 3 -1. - <_> - 11 2 2 3 3. - 1 - -0.0313814692199230 - 0.4900924861431122 - -0.3593046963214874 - <_> - - <_> - - - - <_> - 21 1 8 10 -1. - <_> - 21 1 4 10 2. - 0 - 0.0624266900122166 - -0.3127166032791138 - 0.3738982081413269 - <_> - - <_> - - - - <_> - 7 3 26 5 -1. - <_> - 20 3 13 5 2. - 0 - 0.0547255501151085 - -0.4385116994380951 - 0.3331047892570496 - <_> - - <_> - - - - <_> - 40 5 3 6 -1. - <_> - 40 8 3 3 2. - 0 - 4.7346241772174835e-003 - -0.6414120793342590 - 0.2531161010265350 - <_> - - <_> - - - - <_> - 2 5 3 6 -1. - <_> - 2 8 3 3 2. - 0 - 7.9919751733541489e-003 - -0.4680531024932861 - 0.2431025952100754 - <_> - - <_> - - - - <_> - 13 0 21 1 -1. - <_> - 20 0 7 1 3. - 0 - 0.0162186194211245 - -0.3655829131603241 - 0.1935510039329529 - <_> - - <_> - - - - <_> - 10 9 11 2 -1. - <_> - 10 10 11 1 2. - 0 - -2.7070839423686266e-003 - -0.6236888766288757 - 0.1524621993303299 - <_> - - <_> - - - - <_> - 35 2 4 3 -1. - <_> - 36 3 2 3 2. - 1 - -0.0145703395828605 - 0.2548831999301910 - -0.1017727032303810 - <_> - - <_> - - - - <_> - 9 0 26 10 -1. - <_> - 9 0 13 5 2. - <_> - 22 5 13 5 2. - 0 - -0.0742893293499947 - -0.5963190197944641 - 0.1414172053337097 - <_> - - <_> - - - - <_> - 1 9 44 2 -1. - <_> - 23 9 22 1 2. - <_> - 1 10 22 1 2. - 0 - 0.0174824707210064 - 0.0689812228083611 - -0.8075261712074280 - <_> - - <_> - - - - <_> - 21 9 2 2 -1. - <_> - 21 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - 7.4595998739823699e-004 - 0.0899708569049835 - -0.7547813057899475 - <_> - - <_> - - - - <_> - 0 0 45 9 -1. - <_> - 15 3 15 3 9. - 0 - 0.6811965703964233 - 0.1251329034566879 - -0.5950785279273987 - <_> - - <_> - - - - <_> - 21 9 2 2 -1. - <_> - 21 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - -3.2223601010628045e-004 - -0.5476635098457336 - 0.1417046040296555 - <_> - - <_> - - - - <_> - 39 9 5 2 -1. - <_> - 39 10 5 1 2. - 0 - -1.3318139826878905e-003 - -0.4610851109027863 - 0.0877417027950287 - -1.6515820026397705 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 3 32 3 -1. - <_> - 12 3 16 3 2. - 0 - 0.0799669772386551 - -0.6659880876541138 - 0.4235262870788574 - <_> - - <_> - - - - <_> - 26 1 11 8 -1. - <_> - 26 3 11 4 2. - 0 - -0.0272646602243185 - 0.3397392928600311 - -0.5063499212265015 - <_> - - <_> - - - - <_> - 17 1 6 9 -1. - <_> - 20 1 3 9 2. - 0 - 0.0288831908255816 - -0.4901154041290283 - 0.4012367129325867 - <_> - - <_> - - - - <_> - 27 3 11 8 -1. - <_> - 27 7 11 4 2. - 0 - 0.0397321991622448 - -0.4774664044380188 - 0.2059060037136078 - <_> - - <_> - - - - <_> - 5 1 9 9 -1. - <_> - 8 4 3 3 9. - 0 - -0.0972145274281502 - 0.4514232873916626 - -0.4699657857418060 - <_> - - <_> - - - - <_> - 13 0 21 1 -1. - <_> - 20 0 7 1 3. - 0 - 7.0403199642896652e-003 - -0.5051323175430298 - 0.1872223019599915 - <_> - - <_> - - - - <_> - 9 3 11 8 -1. - <_> - 9 7 11 4 2. - 0 - 0.0100332498550415 - -0.6071605086326599 - 0.2049857974052429 - <_> - - <_> - - - - <_> - 38 5 6 2 -1. - <_> - 40 5 2 2 3. - 0 - -2.2186320275068283e-003 - 0.2791998982429504 - -0.3909184932708740 - <_> - - <_> - - - - <_> - 8 9 16 1 -1. - <_> - 16 9 8 1 2. - 0 - 0.0728399306535721 - -8.7004872038960457e-003 - -4.3667841796875000e+003 - <_> - - <_> - - - - <_> - 18 0 15 10 -1. - <_> - 23 0 5 10 3. - 0 - -0.0686440467834473 - 0.5467174053192139 - -0.0971203967928886 - <_> - - <_> - - - - <_> - 3 9 4 2 -1. - <_> - 3 10 4 1 2. - 0 - 8.3757557149510831e-005 - -0.4377388954162598 - 0.2073774039745331 - <_> - - <_> - - - - <_> - 31 5 2 2 -1. - <_> - 31 5 1 2 2. - 0 - -1.8882959848269820e-003 - 0.2805308103561401 - -0.1123835965991020 - <_> - - <_> - - - - <_> - 12 0 20 6 -1. - <_> - 12 0 10 3 2. - <_> - 22 3 10 3 2. - 0 - -0.0362426303327084 - -0.6370964050292969 - 0.1478706002235413 - <_> - - <_> - - - - <_> - 31 0 10 6 -1. - <_> - 31 2 10 2 3. - 0 - -0.0333381183445454 - 0.4726848006248474 - -0.2124014943838120 - <_> - - <_> - - - - <_> - 7 10 4 1 -1. - <_> - 9 10 2 1 2. - 0 - 2.5847079232335091e-003 - 0.1234423965215683 - -0.7409923076629639 - <_> - - <_> - - - - <_> - 25 0 15 4 -1. - <_> - 30 0 5 4 3. - 0 - -0.0203724894672632 - 0.1377898007631302 - -0.1994089931249619 - <_> - - <_> - - - - <_> - 5 10 6 1 -1. - <_> - 7 10 2 1 3. - 0 - 3.6333200987428427e-003 - 0.0793613791465759 - -0.7600020766258240 - <_> - - <_> - - - - <_> - 38 5 4 4 -1. - <_> - 40 5 2 2 2. - <_> - 38 7 2 2 2. - 0 - 4.6827611513435841e-003 - -0.0661458671092987 - 0.1733255982398987 - <_> - - <_> - - - - <_> - 3 5 4 4 -1. - <_> - 3 5 2 2 2. - <_> - 5 7 2 2 2. - 0 - -4.8445351421833038e-003 - 0.4480114877223969 - -0.1564396023750305 - <_> - - <_> - - - - <_> - 15 2 18 9 -1. - <_> - 21 2 6 9 3. - 0 - 0.2481960952281952 - -0.0861529707908630 - 0.3375715017318726 - <_> - - <_> - - - - <_> - 12 0 15 11 -1. - <_> - 17 0 5 11 3. - 0 - 0.1942128986120224 - -0.1405933052301407 - 0.5112164020538330 - -1.8342440128326416 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 1 6 1 -1. - <_> - 10 3 2 1 3. - 1 - -9.6888672560453415e-003 - 0.3895721137523651 - -0.4811824858188629 - <_> - - <_> - - - - <_> - 9 0 27 7 -1. - <_> - 18 0 9 7 3. - 0 - 0.2981027960777283 - -0.4800634086132050 - 0.3955416977405548 - <_> - - <_> - - - - <_> - 10 2 3 4 -1. - <_> - 9 3 3 2 2. - 1 - -9.8945433273911476e-003 - 0.4206601083278656 - -0.3444811105728149 - <_> - - <_> - - - - <_> - 18 3 9 8 -1. - <_> - 21 3 3 8 3. - 0 - 0.0562895499169827 - -0.2323781996965408 - 0.4200125038623810 - <_> - - <_> - - - - <_> - 0 5 11 6 -1. - <_> - 0 8 11 3 2. - 0 - 0.0281865298748016 - -0.5498821139335632 - 0.1948453038930893 - <_> - - <_> - - - - <_> - 1 3 44 8 -1. - <_> - 23 3 22 4 2. - <_> - 1 7 22 4 2. - 0 - 0.0471157617866993 - 0.1684277057647705 - -0.5307763814926148 - <_> - - <_> - - - - <_> - 0 4 4 4 -1. - <_> - 2 4 2 4 2. - 0 - -3.1187951099127531e-003 - 0.1967993974685669 - -0.3741619884967804 - <_> - - <_> - - - - <_> - 24 3 11 8 -1. - <_> - 24 7 11 4 2. - 0 - 0.0194239094853401 - -0.4466922879219055 - 0.1685253977775574 - <_> - - <_> - - - - <_> - 3 1 39 9 -1. - <_> - 16 4 13 3 9. - 0 - -0.2618069946765900 - -0.8378089070320129 - 0.0617749504745007 - <_> - - <_> - - - - <_> - 24 7 11 4 -1. - <_> - 24 9 11 2 2. - 0 - -4.8632198013365269e-003 - -0.4800944924354553 - 0.0667717605829239 - <_> - - <_> - - - - <_> - 11 4 22 6 -1. - <_> - 11 4 11 3 2. - <_> - 22 7 11 3 2. - 0 - 0.0384115986526012 - 0.1338039934635162 - -0.5834993124008179 - <_> - - <_> - - - - <_> - 33 9 6 2 -1. - <_> - 35 9 2 2 3. - 0 - 5.7644587941467762e-003 - 0.0822187215089798 - -0.8142058849334717 - <_> - - <_> - - - - <_> - 6 0 7 6 -1. - <_> - 6 2 7 2 3. - 0 - -0.0277032200247049 - 0.4725336134433746 - -0.1494240015745163 - <_> - - <_> - - - - <_> - 24 0 6 1 -1. - <_> - 24 0 3 1 2. - 0 - 2.9970629839226604e-004 - -0.3508217036724091 - 0.1178899034857750 - <_> - - <_> - - - - <_> - 4 1 10 3 -1. - <_> - 4 2 10 1 3. - 0 - 6.6997818648815155e-003 - -0.1563594043254852 - 0.3656086921691895 - <_> - - <_> - - - - <_> - 36 9 9 2 -1. - <_> - 36 10 9 1 2. - 0 - 1.8159940736950375e-005 - -0.3140079081058502 - 0.1277565956115723 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - -2.3775480221956968e-003 - -0.7156819105148315 - 0.0758587494492531 - <_> - - <_> - - - - <_> - 18 9 10 2 -1. - <_> - 23 9 5 1 2. - <_> - 18 10 5 1 2. - 0 - -4.4308858923614025e-003 - -0.5795493125915527 - 0.0658802017569542 - <_> - - <_> - - - - <_> - 7 0 30 6 -1. - <_> - 7 0 15 3 2. - <_> - 22 3 15 3 2. - 0 - 0.0826033428311348 - 0.0700204968452454 - -0.6617522239685059 - <_> - - <_> - - - - <_> - 21 5 3 6 -1. - <_> - 22 7 1 2 9. - 0 - -8.3666313439607620e-003 - -0.4901342988014221 - 0.0937642827630043 - <_> - - <_> - - - - <_> - 16 9 10 2 -1. - <_> - 16 9 5 1 2. - <_> - 21 10 5 1 2. - 0 - -4.2126090265810490e-003 - -0.5854789018630981 - 0.0777199864387512 - <_> - - <_> - - - - <_> - 24 9 11 2 -1. - <_> - 24 10 11 1 2. - 0 - 1.4681339962407947e-003 - -0.2495546936988831 - 0.1152582988142967 - <_> - - <_> - - - - <_> - 5 2 7 3 -1. - <_> - 5 3 7 1 3. - 0 - 5.7278228923678398e-003 - -0.1196860969066620 - 0.4248318970203400 - <_> - - <_> - - - - <_> - 26 0 4 1 -1. - <_> - 26 0 2 1 2. - 0 - 6.5779332071542740e-003 - 0.0282375905662775 - -0.4071775972843170 - <_> - - <_> - - - - <_> - 15 0 4 1 -1. - <_> - 17 0 2 1 2. - 0 - 1.2635639905056451e-005 - -0.3278765082359314 - 0.1463759988546372 - <_> - - <_> - - - - <_> - 26 0 11 4 -1. - <_> - 26 2 11 2 2. - 0 - -4.6048699878156185e-003 - 0.1842471063137054 - -0.2354689985513687 - -1.6580430269241333 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 3 22 3 -1. - <_> - 18 3 11 3 2. - 0 - 0.0616270788013935 - -0.6385278105735779 - 0.3331474065780640 - <_> - - <_> - - - - <_> - 32 1 4 6 -1. - <_> - 34 1 2 3 2. - <_> - 32 4 2 3 2. - 0 - 4.2768982239067554e-003 - -0.4244343042373657 - 0.4304029941558838 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 1 2 3 2. - <_> - 11 4 2 3 2. - 0 - 4.6536661684513092e-003 - -0.3571257889270783 - 0.3420619964599609 - <_> - - <_> - - - - <_> - 17 0 12 11 -1. - <_> - 21 0 4 11 3. - 0 - 0.0899298489093781 - -0.3081831932067871 - 0.3103627860546112 - <_> - - <_> - - - - <_> - 1 3 11 8 -1. - <_> - 1 7 11 4 2. - 0 - 0.0743535533547401 - -0.4110797047615051 - 0.2735716998577118 - <_> - - <_> - - - - <_> - 25 9 11 2 -1. - <_> - 25 10 11 1 2. - 0 - 1.8687270348891616e-003 - -0.3267816901206970 - 0.1846697926521301 - <_> - - <_> - - - - <_> - 1 4 6 4 -1. - <_> - 3 4 2 4 3. - 0 - -6.2053278088569641e-003 - 0.3107973039150238 - -0.2444406002759934 - <_> - - <_> - - - - <_> - 24 1 11 8 -1. - <_> - 24 3 11 4 2. - 0 - -0.0163297392427921 - 0.2493868023157120 - -0.3848733901977539 - <_> - - <_> - - - - <_> - 4 0 32 7 -1. - <_> - 12 0 16 7 2. - 0 - 0.1133780032396317 - -0.4381052851676941 - 0.1581839025020599 - <_> - - <_> - - - - <_> - 8 0 30 8 -1. - <_> - 23 0 15 4 2. - <_> - 8 4 15 4 2. - 0 - 0.0748228132724762 - 0.0775939524173737 - -0.6171107292175293 - <_> - - <_> - - - - <_> - 19 2 6 9 -1. - <_> - 22 2 3 9 2. - 0 - -0.0451328605413437 - 0.5962778925895691 - -0.1065089032053947 - <_> - - <_> - - - - <_> - 17 0 26 2 -1. - <_> - 30 0 13 1 2. - <_> - 17 1 13 1 2. - 0 - -0.0102611603215337 - 0.3402867019176483 - -0.0760131329298019 - <_> - - <_> - - - - <_> - 20 0 1 2 -1. - <_> - 20 0 1 1 2. - 1 - 1.9562950183171779e-004 - -0.3224003016948700 - 0.1593022048473358 - <_> - - <_> - - - - <_> - 38 9 6 2 -1. - <_> - 38 10 6 1 2. - 0 - 0.0127499103546143 - 0.0342378690838814 - -0.8233301043510437 - <_> - - <_> - - - - <_> - 1 9 8 2 -1. - <_> - 1 10 8 1 2. - 0 - 1.0267910547554493e-003 - -0.3348264992237091 - 0.1486838012933731 - <_> - - <_> - - - - <_> - 31 0 11 4 -1. - <_> - 31 1 11 2 2. - 0 - 0.0118999397382140 - -0.1110528036952019 - 0.2997865974903107 - <_> - - <_> - - - - <_> - 7 8 6 3 -1. - <_> - 9 8 2 3 3. - 0 - 9.4404807314276695e-003 - 0.0631437525153160 - -0.7491412758827210 - <_> - - <_> - - - - <_> - 36 3 4 4 -1. - <_> - 36 3 2 4 2. - 0 - -4.4033881276845932e-003 - 0.1506906002759934 - -0.1213440969586372 - <_> - - <_> - - - - <_> - 17 0 2 3 -1. - <_> - 17 0 1 3 2. - 1 - 8.2504339516162872e-003 - 0.0654440671205521 - -0.7557423114776611 - <_> - - <_> - - - - <_> - 25 1 11 6 -1. - <_> - 25 3 11 2 3. - 0 - -0.0119254700839520 - 0.1157917976379395 - -0.1823156028985977 - <_> - - <_> - - - - <_> - 16 10 12 1 -1. - <_> - 19 10 6 1 2. - 0 - 2.3744169156998396e-003 - -0.2389771938323975 - 0.1936241984367371 - <_> - - <_> - - - - <_> - 11 1 32 4 -1. - <_> - 27 1 16 2 2. - <_> - 11 3 16 2 2. - 0 - 0.0189549792557955 - -0.0739023834466934 - 0.0952069386839867 - <_> - - <_> - - - - <_> - 10 1 11 6 -1. - <_> - 10 3 11 2 3. - 0 - -6.4718048088252544e-003 - 0.1882565021514893 - -0.2742140889167786 - <_> - - <_> - - - - <_> - 39 2 5 3 -1. - <_> - 38 3 5 1 3. - 1 - 0.0118858003988862 - -0.0793891325592995 - 0.3939763903617859 - <_> - - <_> - - - - <_> - 10 7 11 4 -1. - <_> - 10 9 11 2 2. - 0 - 3.9641708135604858e-003 - -0.3141691088676453 - 0.1572221070528030 - <_> - - <_> - - - - <_> - 39 2 5 3 -1. - <_> - 38 3 5 1 3. - 1 - -0.0153126502409577 - 0.4346731901168823 - -0.0800591632723808 - <_> - - <_> - - - - <_> - 4 8 2 1 -1. - <_> - 4 8 1 1 2. - 1 - -4.4087409041821957e-003 - -0.6935536861419678 - 0.0726607367396355 - <_> - - <_> - - - - <_> - 39 2 5 3 -1. - <_> - 38 3 5 1 3. - 1 - 0.0268113501369953 - -0.0287350993603468 - 0.4305660128593445 - <_> - - <_> - - - - <_> - 6 2 3 5 -1. - <_> - 7 3 1 5 3. - 1 - 0.0129167297855020 - -0.0791131779551506 - 0.5616195797920227 - <_> - - <_> - - - - <_> - 35 9 4 2 -1. - <_> - 36 9 2 2 2. - 0 - -2.8802119195461273e-003 - -0.6684604287147522 - 0.0777579322457314 - <_> - - <_> - - - - <_> - 15 1 12 10 -1. - <_> - 19 1 4 10 3. - 0 - -0.0775494873523712 - 0.6936337947845459 - -0.0728587135672569 - -1.7386059761047363 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 32 3 -1. - <_> - 13 3 16 3 2. - 0 - 0.1141531020402908 - -0.4638212025165558 - 0.3817670941352844 - <_> - - <_> - - - - <_> - 30 5 6 2 -1. - <_> - 32 5 2 2 3. - 0 - 4.8969490453600883e-003 - -0.1898743063211441 - 0.3679777979850769 - <_> - - <_> - - - - <_> - 17 2 6 5 -1. - <_> - 20 2 3 5 2. - 0 - 0.0210133306682110 - -0.3910275101661682 - 0.3052346110343933 - <_> - - <_> - - - - <_> - 35 2 4 3 -1. - <_> - 36 3 2 3 2. - 1 - -8.5326731204986572e-003 - 0.4028900861740112 - -0.3794580996036530 - <_> - - <_> - - - - <_> - 0 6 5 4 -1. - <_> - 0 8 5 2 2. - 0 - 2.2233189083635807e-003 - -0.5834115147590637 - 0.2050496041774750 - <_> - - <_> - - - - <_> - 33 4 6 4 -1. - <_> - 35 4 2 4 3. - 0 - -8.9455489069223404e-003 - 0.1073440015316010 - -0.1407826989889145 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 2 2. - 0 - -4.4652701035374776e-005 - 0.3188174068927765 - -0.2420430034399033 - <_> - - <_> - - - - <_> - 21 1 24 6 -1. - <_> - 29 3 8 2 9. - 0 - -0.2776621878147125 - 0.3199347853660584 - -0.2321206033229828 - <_> - - <_> - - - - <_> - 8 3 10 8 -1. - <_> - 8 7 10 4 2. - 0 - 0.0299928896129131 - -0.4863663017749786 - 0.1573397070169449 - <_> - - <_> - - - - <_> - 13 0 21 1 -1. - <_> - 20 0 7 1 3. - 0 - 0.0103846397250891 - -0.3576160967350006 - 0.1016876995563507 - <_> - - <_> - - - - <_> - 9 2 6 3 -1. - <_> - 8 3 6 1 3. - 1 - -9.9069289863109589e-003 - 0.3474350869655609 - -0.2061987072229385 - <_> - - <_> - - - - <_> - 16 2 18 8 -1. - <_> - 22 2 6 8 3. - 0 - -0.0936803817749023 - 0.5435848832130432 - -0.0737909674644470 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 10 1 1 2. - 0 - 4.6968900278443471e-005 - -0.3651182949542999 - 0.2005686014890671 - <_> - - <_> - - - - <_> - 27 4 2 5 -1. - <_> - 27 4 1 5 2. - 1 - -8.3182547241449356e-003 - -0.5208979249000549 - 0.0516868308186531 - <_> - - <_> - - - - <_> - 2 0 36 10 -1. - <_> - 2 0 18 5 2. - <_> - 20 5 18 5 2. - 0 - -0.1155257001519203 - -0.6091110110282898 - 0.0922980234026909 - <_> - - <_> - - - - <_> - 26 1 2 1 -1. - <_> - 26 1 1 1 2. - 0 - 4.5758039050269872e-005 - -0.2418815940618515 - 0.1120527014136314 - <_> - - <_> - - - - <_> - 15 2 12 9 -1. - <_> - 18 2 6 9 2. - 0 - 0.0836199671030045 - -0.1659141927957535 - 0.2994615137577057 - <_> - - <_> - - - - <_> - 31 4 9 6 -1. - <_> - 34 4 3 6 3. - 0 - -1.7055140342563391e-003 - 0.0661006867885590 - -0.1783421933650971 - <_> - - <_> - - - - <_> - 5 0 10 6 -1. - <_> - 5 2 10 2 3. - 0 - -0.0502557195723057 - 0.5084115266799927 - -0.1019190996885300 - <_> - - <_> - - - - <_> - 35 2 3 4 -1. - <_> - 34 3 3 2 2. - 1 - -0.0144934700801969 - 0.3341130018234253 - -0.0912953317165375 - <_> - - <_> - - - - <_> - 5 9 6 2 -1. - <_> - 7 9 2 2 3. - 0 - 6.6773351281881332e-003 - 0.0707420930266380 - -0.7194135189056397 - <_> - - <_> - - - - <_> - 40 5 4 2 -1. - <_> - 40 5 2 2 2. - 0 - -2.4902720469981432e-003 - 0.2712225914001465 - -0.2811850011348724 - <_> - - <_> - - - - <_> - 19 0 3 3 -1. - <_> - 20 1 1 1 9. - 0 - 5.9668770991265774e-003 - 0.0868900194764137 - -0.5510246753692627 - <_> - - <_> - - - - <_> - 31 0 11 4 -1. - <_> - 31 1 11 2 2. - 0 - 8.9923879131674767e-003 - -0.1115676984190941 - 0.1831274032592773 - <_> - - <_> - - - - <_> - 5 0 15 1 -1. - <_> - 10 0 5 1 3. - 0 - -1.8761169631034136e-003 - 0.1658319979906082 - -0.2982378900051117 - <_> - - <_> - - - - <_> - 17 8 12 2 -1. - <_> - 23 8 6 1 2. - <_> - 17 9 6 1 2. - 0 - 4.4691809453070164e-003 - 0.0676259994506836 - -0.5999578833580017 - <_> - - <_> - - - - <_> - 19 2 6 9 -1. - <_> - 22 2 3 9 2. - 0 - 0.0495137684047222 - -0.1185320988297463 - 0.4067130982875824 - <_> - - <_> - - - - <_> - 32 1 6 10 -1. - <_> - 34 1 2 10 3. - 0 - -0.0520960614085197 - -0.4905096888542175 - 0.0444507598876953 - <_> - - <_> - - - - <_> - 5 2 9 6 -1. - <_> - 8 4 3 2 9. - 0 - -0.0575406104326248 - 0.2216338068246841 - -0.2269773036241531 - <_> - - <_> - - - - <_> - 29 0 2 3 -1. - <_> - 28 1 2 1 3. - 1 - -0.0120270904153585 - -0.7831586003303528 - 0.0252257809042931 - <_> - - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 1 1 2 3. - 1 - 4.3592308647930622e-003 - 0.0784457623958588 - -0.5439990162849426 - <_> - - <_> - - - - <_> - 34 8 6 3 -1. - <_> - 36 8 2 3 3. - 0 - 0.0108451396226883 - 0.0435322597622871 - -0.7530106902122498 - <_> - - <_> - - - - <_> - 2 5 2 1 -1. - <_> - 3 5 1 1 2. - 0 - -2.2464629728347063e-004 - 0.1888168007135391 - -0.2168412953615189 - -1.6643459796905518 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 3 33 2 -1. - <_> - 17 3 11 2 3. - 0 - 0.1516757011413574 - -0.3124355971813202 - 0.3971425890922546 - <_> - - <_> - - - - <_> - 35 2 4 3 -1. - <_> - 36 3 2 3 2. - 1 - -5.6243538856506348e-003 - 0.2844352126121521 - -0.4688800871372223 - <_> - - <_> - - - - <_> - 5 5 9 2 -1. - <_> - 8 5 3 2 3. - 0 - -0.0133634200319648 - 0.2984715104103088 - -0.2897408902645111 - <_> - - <_> - - - - <_> - 17 1 12 10 -1. - <_> - 21 1 4 10 3. - 0 - 0.1197357997298241 - -0.2505994141101837 - 0.3698031008243561 - <_> - - <_> - - - - <_> - 0 4 11 6 -1. - <_> - 0 7 11 3 2. - 0 - 0.0295380298048258 - -0.5330228209495544 - 0.1954060941934586 - <_> - - <_> - - - - <_> - 29 9 11 2 -1. - <_> - 29 10 11 1 2. - 0 - 2.2876099683344364e-003 - -0.3935618102550507 - 0.2245559990406036 - <_> - - <_> - - - - <_> - 17 1 2 1 -1. - <_> - 18 1 1 1 2. - 0 - 3.3369789889547974e-005 - -0.4254043102264404 - 0.1247470974922180 - <_> - - <_> - - - - <_> - 31 0 11 4 -1. - <_> - 31 1 11 2 2. - 0 - 0.0122035900130868 - -0.1111750006675720 - 0.3303545117378235 - <_> - - <_> - - - - <_> - 2 1 32 6 -1. - <_> - 2 1 16 3 2. - <_> - 18 4 16 3 2. - 0 - 0.0288315303623676 - -0.2619040906429291 - 0.2602139115333557 - <_> - - <_> - - - - <_> - 21 9 6 2 -1. - <_> - 24 9 3 1 2. - <_> - 21 10 3 1 2. - 0 - 2.3157240357249975e-003 - 0.0526180006563663 - -0.6187260746955872 - <_> - - <_> - - - - <_> - 17 9 10 2 -1. - <_> - 17 9 5 1 2. - <_> - 22 10 5 1 2. - 0 - 3.3288369886577129e-003 - 0.0794652178883553 - -0.6154335141181946 - <_> - - <_> - - - - <_> - 41 4 4 6 -1. - <_> - 41 4 2 6 2. - 0 - -4.1650598868727684e-003 - 0.2235890030860901 - -0.2817305028438568 - <_> - - <_> - - - - <_> - 4 0 10 6 -1. - <_> - 4 2 10 2 3. - 0 - -0.0555344186723232 - 0.5337057113647461 - -0.0978473424911499 - <_> - - <_> - - - - <_> - 13 0 21 1 -1. - <_> - 20 0 7 1 3. - 0 - 0.0104300398379564 - -0.3193646967411041 - 0.1322222054004669 - <_> - - <_> - - - - <_> - 3 0 39 9 -1. - <_> - 16 3 13 3 9. - 0 - 0.7373105287551880 - 0.0856522768735886 - -0.5683274865150452 - <_> - - <_> - - - - <_> - 30 9 11 2 -1. - <_> - 30 10 11 1 2. - 0 - 0.0211063101887703 - 0.0103507200255990 - -0.4362475872039795 - <_> - - <_> - - - - <_> - 5 9 11 2 -1. - <_> - 5 10 11 1 2. - 0 - 1.8394569633528590e-003 - -0.3025861084461212 - 0.1825274974107742 - <_> - - <_> - - - - <_> - 20 9 8 2 -1. - <_> - 24 9 4 1 2. - <_> - 20 10 4 1 2. - 0 - -6.2626888975501060e-003 - -0.7030578255653381 - 0.0345668382942677 - <_> - - <_> - - - - <_> - 1 5 6 3 -1. - <_> - 3 5 2 3 3. - 0 - -2.5872439146041870e-003 - 0.1959318071603775 - -0.2503960132598877 - <_> - - <_> - - - - <_> - 29 0 6 3 -1. - <_> - 31 0 2 3 3. - 0 - 7.9651866108179092e-003 - 0.0560516789555550 - -0.4854215979576111 - <_> - - <_> - - - - <_> - 3 0 39 9 -1. - <_> - 16 3 13 3 9. - 0 - -0.2649461030960083 - -0.7481368184089661 - 0.0572923310101032 - <_> - - <_> - - - - <_> - 34 1 5 3 -1. - <_> - 34 2 5 1 3. - 0 - -8.7696090340614319e-003 - 0.5502753257751465 - -0.0981863886117935 - <_> - - <_> - - - - <_> - 10 0 6 3 -1. - <_> - 12 0 2 3 3. - 0 - 9.3607688322663307e-003 - 0.0879649519920349 - -0.6328374147415161 - <_> - - <_> - - - - <_> - 33 1 8 3 -1. - <_> - 33 2 8 1 3. - 0 - 6.7315441556274891e-003 - -0.1199072003364563 - 0.2605029046535492 - <_> - - <_> - - - - <_> - 16 9 10 2 -1. - <_> - 16 9 5 1 2. - <_> - 21 10 5 1 2. - 0 - -4.8705069348216057e-003 - -0.6705402135848999 - 0.0683697164058685 - <_> - - <_> - - - - <_> - 19 5 9 6 -1. - <_> - 22 5 3 6 3. - 0 - -0.0335185006260872 - 0.4375419020652771 - -0.0559873282909393 - <_> - - <_> - - - - <_> - 16 9 12 2 -1. - <_> - 20 9 4 2 3. - 0 - 7.6086460612714291e-003 - -0.2525339126586914 - 0.1985495984554291 - <_> - - <_> - - - - <_> - 24 10 20 1 -1. - <_> - 24 10 10 1 2. - 0 - 0.0183347892016172 - 0.0830836072564125 - -0.4910973012447357 - <_> - - <_> - - - - <_> - 18 0 2 1 -1. - <_> - 18 0 1 1 2. - 1 - -2.7305909898132086e-003 - -0.4816663861274719 - 0.0870301127433777 - <_> - - <_> - - - - <_> - 24 10 20 1 -1. - <_> - 24 10 10 1 2. - 0 - -0.0253080893307924 - -0.5137035250663757 - 0.0317759402096272 - <_> - - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - -6.7148888483643532e-003 - -0.4641964137554169 - 0.0869181528687477 - <_> - - <_> - - - - <_> - 24 10 20 1 -1. - <_> - 24 10 10 1 2. - 0 - -1.3796479906886816e-003 - 0.1136436015367508 - -0.1099784001708031 - <_> - - <_> - - - - <_> - 1 10 20 1 -1. - <_> - 11 10 10 1 2. - 0 - -0.0179886203259230 - -0.5647330880165100 - 0.0848380699753761 - <_> - - <_> - - - - <_> - 42 7 3 4 -1. - <_> - 42 9 3 2 2. - 0 - 1.2048670032527298e-004 - -0.3359489142894745 - 0.1181958019733429 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 8 9 2 2 3. - 0 - -7.3997122235596180e-003 - -0.7110918760299683 - 0.0502713508903980 - <_> - - <_> - - - - <_> - 33 1 6 3 -1. - <_> - 33 2 6 1 3. - 0 - -4.4395271688699722e-003 - 0.2403811067342758 - -0.0848185420036316 - -1.5700939893722534 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 4 3 2 -1. - <_> - 13 5 1 2 3. - 1 - 6.7837378010153770e-003 - -0.2447407990694046 - 0.5237346291542053 - <_> - - <_> - - - - <_> - 26 1 11 8 -1. - <_> - 26 3 11 4 2. - 0 - -0.0263042896986008 - 0.2338152974843979 - -0.4236643910408020 - <_> - - <_> - - - - <_> - 3 4 30 3 -1. - <_> - 18 4 15 3 2. - 0 - 0.0705524832010269 - -0.4806838035583496 - 0.2167425006628037 - <_> - - <_> - - - - <_> - 17 0 12 9 -1. - <_> - 21 0 4 9 3. - 0 - 0.1158863976597786 - -0.2149966955184937 - 0.2675358057022095 - <_> - - <_> - - - - <_> - 2 0 9 4 -1. - <_> - 2 1 9 2 2. - 0 - 0.0100489500910044 - -0.2059427052736282 - 0.4048427939414978 - <_> - - <_> - - - - <_> - 19 0 12 1 -1. - <_> - 22 0 6 1 2. - 0 - 0.0146281700581312 - 0.0451952703297138 - -0.4338223934173584 - <_> - - <_> - - - - <_> - 7 0 28 5 -1. - <_> - 14 0 14 5 2. - 0 - 0.1069151982665062 - -0.4000534117221832 - 0.1565358936786652 - <_> - - <_> - - - - <_> - 26 5 11 6 -1. - <_> - 26 8 11 3 2. - 0 - 0.0215446706861258 - -0.3836944103240967 - 0.1253671050071716 - <_> - - <_> - - - - <_> - 4 5 4 2 -1. - <_> - 5 5 2 2 2. - 0 - 5.0607468001544476e-003 - -0.1373002976179123 - 0.5311831831932068 - <_> - - <_> - - - - <_> - 40 7 5 4 -1. - <_> - 40 9 5 2 2. - 0 - -4.9039809964597225e-003 - -0.6946039199829102 - 0.0771185681223869 - <_> - - <_> - - - - <_> - 5 5 34 6 -1. - <_> - 5 5 17 3 2. - <_> - 22 8 17 3 2. - 0 - 0.0555920600891113 - 0.0849511027336121 - -0.6161080002784729 - <_> - - <_> - - - - <_> - 7 2 38 3 -1. - <_> - 7 2 19 3 2. - 0 - -0.0539596788585186 - -0.3782609999179840 - 0.0331038087606430 - <_> - - <_> - - - - <_> - 3 8 1 2 -1. - <_> - 3 9 1 1 2. - 0 - 3.6401430406840518e-005 - -0.3671151995658875 - 0.1344677954912186 - <_> - - <_> - - - - <_> - 31 7 2 2 -1. - <_> - 31 7 1 2 2. - 1 - -5.5411658249795437e-003 - -0.5740044116973877 - 0.0742920190095901 - <_> - - <_> - - - - <_> - 0 0 45 9 -1. - <_> - 15 3 15 3 9. - 0 - 0.7908669114112854 - 0.0774227529764175 - -0.6365330815315247 - <_> - - <_> - - - - <_> - 35 9 6 2 -1. - <_> - 37 9 2 2 3. - 0 - 4.4924449175596237e-003 - 0.0685045272111893 - -0.5327309966087341 - <_> - - <_> - - - - <_> - 4 9 6 2 -1. - <_> - 6 9 2 2 3. - 0 - -6.8721971474587917e-003 - -0.6515179872512817 - 0.0649006888270378 - <_> - - <_> - - - - <_> - 19 5 9 6 -1. - <_> - 22 5 3 6 3. - 0 - 0.0464545413851738 - -0.1123898029327393 - 0.2074414044618607 - <_> - - <_> - - - - <_> - 7 2 3 3 -1. - <_> - 7 3 3 1 3. - 0 - 6.0355630703270435e-003 - -0.0887570977210999 - 0.5474855899810791 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - 3.9944230229593813e-004 - 0.0866240411996841 - -0.4693656861782074 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 5 4 8 1 2. - 0 - 7.5040599331259727e-003 - -0.0921164527535439 - 0.5366359949111939 - <_> - - <_> - - - - <_> - 20 2 8 9 -1. - <_> - 22 2 4 9 2. - 0 - -0.0158401206135750 - 0.3811694979667664 - -0.0695484727621078 - <_> - - <_> - - - - <_> - 3 9 8 2 -1. - <_> - 5 9 4 2 2. - 0 - 5.7859481312334538e-003 - 0.0808151513338089 - -0.5512672066688538 - <_> - - <_> - - - - <_> - 32 3 6 7 -1. - <_> - 34 3 2 7 3. - 0 - -6.8534379824995995e-003 - 0.2017164975404739 - -0.2981612980365753 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 9 0 4 2 2. - 0 - -3.2146628655027598e-005 - 0.1627535969018936 - -0.2566182911396027 - <_> - - <_> - - - - <_> - 12 0 22 6 -1. - <_> - 23 0 11 3 2. - <_> - 12 3 11 3 2. - 0 - 0.0483935698866844 - 0.0688307136297226 - -0.5760238766670227 - <_> - - <_> - - - - <_> - 14 1 16 6 -1. - <_> - 14 1 8 3 2. - <_> - 22 4 8 3 2. - 0 - 0.0459545888006687 - 0.0570243299007416 - -0.6528798937797546 - <_> - - <_> - - - - <_> - 30 0 6 4 -1. - <_> - 32 0 2 4 3. - 0 - 1.1721630580723286e-003 - 0.1044374033808708 - -0.2383860051631928 - <_> - - <_> - - - - <_> - 4 4 4 2 -1. - <_> - 4 4 2 1 2. - <_> - 6 5 2 1 2. - 0 - 4.0837051346898079e-003 - -0.0812310427427292 - 0.5090131163597107 - <_> - - <_> - - - - <_> - 30 0 6 4 -1. - <_> - 32 0 2 4 3. - 0 - -0.0164863802492619 - -0.5516451001167297 - 0.0650377720594406 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 0 2 4 3. - 0 - -0.0158996805548668 - -0.6092929840087891 - 0.0601791404187679 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - -3.7392228841781616e-004 - -0.4709204137325287 - 0.0943275690078735 - <_> - - <_> - - - - <_> - 17 5 9 6 -1. - <_> - 20 5 3 6 3. - 0 - 0.0451714508235455 - -0.1572314053773880 - 0.2575055062770844 - <_> - - <_> - - - - <_> - 30 5 4 2 -1. - <_> - 31 5 2 2 2. - 0 - 3.9194729179143906e-003 - -0.1199349015951157 - 0.4145897924900055 - <_> - - <_> - - - - <_> - 2 1 2 2 -1. - <_> - 2 1 2 1 2. - 1 - 4.8551987856626511e-003 - 0.0840639695525169 - -0.5154470205307007 - <_> - - <_> - - - - <_> - 19 7 12 4 -1. - <_> - 23 7 4 4 3. - 0 - 0.0497271716594696 - -0.0806181132793427 - 0.2851048111915588 - <_> - - <_> - - - - <_> - 7 2 10 6 -1. - <_> - 7 4 10 2 3. - 0 - -0.0259798001497984 - 0.2087969928979874 - -0.1992343962192535 - -1.5616159439086914 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 5 3 2 -1. - <_> - 12 5 1 2 3. - 0 - 3.6881880369037390e-003 - -0.2008984982967377 - 0.5875923037528992 - <_> - - <_> - - - - <_> - 8 3 30 2 -1. - <_> - 18 3 10 2 3. - 0 - 0.1251426041126251 - -0.3375056087970734 - 0.3042429983615875 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - 0.0107610300183296 - -0.1700477004051209 - 0.4131394922733307 - <_> - - <_> - - - - <_> - 7 3 32 8 -1. - <_> - 23 3 16 4 2. - <_> - 7 7 16 4 2. - 0 - 0.0579194091260433 - 0.1178041994571686 - -0.5837575197219849 - <_> - - <_> - - - - <_> - 7 3 3 8 -1. - <_> - 7 7 3 4 2. - 0 - 0.0142780495807529 - -0.5259978771209717 - 0.1302458941936493 - <_> - - <_> - - - - <_> - 17 0 12 11 -1. - <_> - 21 0 4 11 3. - 0 - 0.0927703380584717 - -0.2880378067493439 - 0.2091802954673767 - <_> - - <_> - - - - <_> - 0 9 3 2 -1. - <_> - 0 10 3 1 2. - 0 - -1.2687300331890583e-003 - -0.6854526996612549 - 0.0679697170853615 - <_> - - <_> - - - - <_> - 31 5 9 6 -1. - <_> - 34 5 3 6 3. - 0 - -4.1586877778172493e-003 - 0.1577699035406113 - -0.3706142902374268 - <_> - - <_> - - - - <_> - 6 1 2 6 -1. - <_> - 4 3 2 2 3. - 1 - -2.6486739516258240e-003 - 0.1411574035882950 - -0.3878993093967438 - <_> - - <_> - - - - <_> - 27 1 2 1 -1. - <_> - 27 1 1 1 2. - 0 - 3.3513078960822895e-005 - -0.1704705953598023 - 0.0914910733699799 - <_> - - <_> - - - - <_> - 16 0 8 1 -1. - <_> - 18 0 4 1 2. - 0 - 4.1814000724116340e-005 - -0.3362986147403717 - 0.1561553031206131 - <_> - - <_> - - - - <_> - 33 2 6 3 -1. - <_> - 33 3 6 1 3. - 0 - -0.0105799995362759 - 0.5177596211433411 - -0.1234643012285233 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - 9.6945222467184067e-003 - -0.0931728109717369 - 0.5456228852272034 - <_> - - <_> - - - - <_> - 31 5 9 6 -1. - <_> - 34 5 3 6 3. - 0 - 0.0251239091157913 - 0.0292009394615889 - -0.3956165015697479 - <_> - - <_> - - - - <_> - 5 5 9 6 -1. - <_> - 8 5 3 6 3. - 0 - -1.9009890820598230e-005 - 0.1341307014226914 - -0.3593293130397797 - <_> - - <_> - - - - <_> - 21 9 4 2 -1. - <_> - 23 9 2 1 2. - <_> - 21 10 2 1 2. - 0 - 1.1085460428148508e-003 - 0.0704471766948700 - -0.5017598271369934 - <_> - - <_> - - - - <_> - 15 5 12 6 -1. - <_> - 19 5 4 6 3. - 0 - 0.0846463814377785 - -0.1407739967107773 - 0.2932718098163605 - <_> - - <_> - - - - <_> - 20 0 6 11 -1. - <_> - 20 0 3 11 2. - 0 - -0.0468892790377140 - 0.5417395234107971 - -0.0728389322757721 - <_> - - <_> - - - - <_> - 1 7 32 2 -1. - <_> - 9 7 16 2 2. - 0 - -0.0199442394077778 - -0.4986597895622253 - 0.0954836234450340 - <_> - - <_> - - - - <_> - 24 7 11 4 -1. - <_> - 24 9 11 2 2. - 0 - 2.3346049711108208e-003 - -0.3493682146072388 - 0.0865515023469925 - <_> - - <_> - - - - <_> - 6 1 7 4 -1. - <_> - 6 2 7 2 2. - 0 - -0.0125244697555900 - 0.4231724143028259 - -0.1062488034367561 - <_> - - <_> - - - - <_> - 34 0 5 3 -1. - <_> - 34 1 5 1 3. - 0 - 7.4971290305256844e-003 - -0.0771219208836555 - 0.3311249911785126 - <_> - - <_> - - - - <_> - 6 0 5 3 -1. - <_> - 6 1 5 1 3. - 0 - -4.3038600124418736e-003 - 0.4462710022926331 - -0.0974933505058289 - <_> - - <_> - - - - <_> - 35 9 4 2 -1. - <_> - 36 9 2 2 2. - 0 - -2.4376739747822285e-003 - -0.6324635148048401 - 0.0722433328628540 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 16 1 1 2 2. - 1 - 4.0068682283163071e-003 - 0.0745110064744949 - -0.5288599133491516 - <_> - - <_> - - - - <_> - 7 0 34 8 -1. - <_> - 24 0 17 4 2. - <_> - 7 4 17 4 2. - 0 - 0.1693582981824875 - 0.0192001909017563 - -0.9361991286277771 - <_> - - <_> - - - - <_> - 17 0 2 3 -1. - <_> - 17 0 1 3 2. - 1 - -5.1640910096466541e-003 - -0.4525282979011536 - 0.0837530866265297 - <_> - - <_> - - - - <_> - 35 9 4 2 -1. - <_> - 36 9 2 2 2. - 0 - 2.1301470696926117e-003 - 0.0590294115245342 - -0.5948619246482849 - <_> - - <_> - - - - <_> - 8 0 9 2 -1. - <_> - 11 0 3 2 3. - 0 - -1.0491809807717800e-003 - 0.1482004970312119 - -0.2572931051254273 - <_> - - <_> - - - - <_> - 34 6 4 3 -1. - <_> - 34 7 4 1 3. - 0 - 6.5077878534793854e-003 - -0.1097851023077965 - 0.4835182130336762 - <_> - - <_> - - - - <_> - 20 9 4 2 -1. - <_> - 20 9 2 1 2. - <_> - 22 10 2 1 2. - 0 - 1.0791060049086809e-003 - 0.0858939513564110 - -0.4989733099937439 - <_> - - <_> - - - - <_> - 34 9 6 2 -1. - <_> - 36 9 2 2 3. - 0 - -0.0113274296745658 - -0.8853577971458435 - 0.0125310197472572 - <_> - - <_> - - - - <_> - 18 2 8 9 -1. - <_> - 22 2 4 9 2. - 0 - -0.0790901929140091 - 0.5353099703788757 - -0.0705346763134003 - <_> - - <_> - - - - <_> - 21 5 12 6 -1. - <_> - 25 5 4 6 3. - 0 - 0.0893929898738861 - -0.0239771790802479 - 0.5472316741943359 - <_> - - <_> - - - - <_> - 14 7 8 4 -1. - <_> - 16 7 4 4 2. - 0 - -0.0116421598941088 - 0.2497332990169525 - -0.1484736949205399 - <_> - - <_> - - - - <_> - 25 1 6 4 -1. - <_> - 25 1 3 4 2. - 1 - 0.0781690627336502 - 0.0476356297731400 - -0.5139645934104919 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 15 7 2 1 2. - 1 - -5.2542597986757755e-003 - -0.4859730005264282 - 0.0724953785538673 - <_> - - <_> - - - - <_> - 24 7 11 4 -1. - <_> - 24 9 11 2 2. - 0 - 0.0583055093884468 - 0.0162678994238377 - -0.5886459946632385 - <_> - - <_> - - - - <_> - 10 7 11 4 -1. - <_> - 10 9 11 2 2. - 0 - 5.8591919951140881e-003 - -0.3192627131938934 - 0.1347427070140839 - <_> - - <_> - - - - <_> - 32 5 3 2 -1. - <_> - 33 5 1 2 3. - 0 - -2.9373338911682367e-003 - 0.4283975958824158 - -0.0922875404357910 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 15 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -3.7391098885564134e-005 - 0.2044845968484879 - -0.1851540058851242 - -1.4751789569854736 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 2 3 4 -1. - <_> - 12 3 1 4 3. - 1 - -6.1791189946234226e-003 - 0.2858026921749115 - -0.3700585067272186 - <_> - - <_> - - - - <_> - 21 0 12 5 -1. - <_> - 21 0 6 5 2. - 0 - 0.0418217703700066 - -0.5357587933540344 - 0.1682717055082321 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 6 6 3 2 2. - 0 - 5.7136882096529007e-003 - -0.3200174868106842 - 0.2682298123836517 - <_> - - <_> - - - - <_> - 38 7 7 4 -1. - <_> - 38 9 7 2 2. - 0 - 2.8650460299104452e-003 - -0.4246250987052918 - 0.1382745951414108 - <_> - - <_> - - - - <_> - 21 4 3 4 -1. - <_> - 21 4 3 2 2. - 1 - 2.9460960067808628e-003 - -0.3978421986103058 - 0.2065467983484268 - <_> - - <_> - - - - <_> - 35 0 7 4 -1. - <_> - 35 1 7 2 2. - 0 - 4.6483702026307583e-003 - -0.1907518059015274 - 0.2478605061769486 - <_> - - <_> - - - - <_> - 0 7 6 4 -1. - <_> - 0 9 6 2 2. - 0 - 2.3228039499372244e-003 - -0.5213400721549988 - 0.1056229025125504 - <_> - - <_> - - - - <_> - 33 3 6 8 -1. - <_> - 35 3 2 8 3. - 0 - -7.4393101967871189e-003 - 0.1678518056869507 - -0.2156163007020950 - <_> - - <_> - - - - <_> - 15 0 4 1 -1. - <_> - 17 0 2 1 2. - 0 - 2.8299659607000649e-004 - -0.3806549906730652 - 0.1493480950593948 - <_> - - <_> - - - - <_> - 30 2 12 9 -1. - <_> - 34 2 4 9 3. - 0 - -0.0132823698222637 - 0.0860496163368225 - -0.2377997934818268 - <_> - - <_> - - - - <_> - 5 2 3 3 -1. - <_> - 6 3 1 3 3. - 1 - -0.0114170601591468 - 0.4011794030666351 - -0.1348436027765274 - <_> - - <_> - - - - <_> - 30 3 12 8 -1. - <_> - 34 3 4 8 3. - 0 - -0.1476902067661285 - -0.4884426891803742 - 0.0159332603216171 - <_> - - <_> - - - - <_> - 3 3 12 8 -1. - <_> - 7 3 4 8 3. - 0 - -3.2284119515679777e-004 - 0.1182610020041466 - -0.3862318992614746 - <_> - - <_> - - - - <_> - 24 8 2 2 -1. - <_> - 25 8 1 1 2. - <_> - 24 9 1 1 2. - 0 - -3.6730729334522039e-005 - 0.1051127016544342 - -0.1233211010694504 - <_> - - <_> - - - - <_> - 19 8 2 2 -1. - <_> - 19 8 1 1 2. - <_> - 20 9 1 1 2. - 0 - 4.3103349162265658e-004 - 0.0800743401050568 - -0.5640835165977478 - <_> - - <_> - - - - <_> - 24 8 2 2 -1. - <_> - 25 8 1 1 2. - <_> - 24 9 1 1 2. - 0 - -8.7611482013016939e-004 - -0.4112376868724823 - 0.0354818105697632 - <_> - - <_> - - - - <_> - 19 8 2 2 -1. - <_> - 19 8 1 1 2. - <_> - 20 9 1 1 2. - 0 - -3.6012110649608076e-004 - -0.3928872048854828 - 0.1072937995195389 - <_> - - <_> - - - - <_> - 20 0 22 2 -1. - <_> - 31 0 11 1 2. - <_> - 20 1 11 1 2. - 0 - 0.0113291796296835 - -0.0776691213250160 - 0.3063041865825653 - <_> - - <_> - - - - <_> - 3 0 22 2 -1. - <_> - 3 0 11 1 2. - <_> - 14 1 11 1 2. - 0 - -8.5942242294549942e-003 - 0.4026220142841339 - -0.1134836971759796 - <_> - - <_> - - - - <_> - 29 0 3 9 -1. - <_> - 30 3 1 3 9. - 0 - -0.0110881095752120 - 0.1311223059892654 - -0.1658211052417755 - <_> - - <_> - - - - <_> - 12 4 6 3 -1. - <_> - 14 4 2 3 3. - 0 - -2.3962128907442093e-003 - 0.1844637989997864 - -0.2124554067850113 - <_> - - <_> - - - - <_> - 41 0 4 2 -1. - <_> - 42 1 2 2 2. - 1 - 1.4491369947791100e-003 - 0.1329172998666763 - -0.3422419130802155 - <_> - - <_> - - - - <_> - 6 9 4 2 -1. - <_> - 7 9 2 2 2. - 0 - -2.3471130989491940e-003 - -0.5937396883964539 - 0.0526771508157253 - <_> - - <_> - - - - <_> - 21 5 12 4 -1. - <_> - 25 5 4 4 3. - 0 - -0.0330210588872433 - 0.2065508961677551 - -0.1164072006940842 - <_> - - <_> - - - - <_> - 10 0 11 9 -1. - <_> - 10 3 11 3 3. - 0 - -0.0175966992974281 - 0.1161578968167305 - -0.2877149879932404 - <_> - - <_> - - - - <_> - 1 4 44 6 -1. - <_> - 23 4 22 3 2. - <_> - 1 7 22 3 2. - 0 - 0.0906155630946159 - 0.0494296513497829 - -0.5959839224815369 - <_> - - <_> - - - - <_> - 1 1 42 9 -1. - <_> - 15 4 14 3 9. - 0 - -0.4197323918342590 - -0.9176278710365295 - 0.0291445106267929 - <_> - - <_> - - - - <_> - 39 4 3 2 -1. - <_> - 40 5 1 2 3. - 1 - -4.5256591401994228e-003 - 0.3092944920063019 - -0.1158910989761353 - <_> - - <_> - - - - <_> - 1 3 2 6 -1. - <_> - 2 3 1 6 2. - 0 - -3.1792598747415468e-005 - 0.1230070963501930 - -0.2696146965026856 - <_> - - <_> - - - - <_> - 33 3 3 3 -1. - <_> - 32 4 3 1 3. - 1 - 9.3048512935638428e-003 - -0.1631172001361847 - 0.4543595910072327 - <_> - - <_> - - - - <_> - 16 0 12 11 -1. - <_> - 22 0 6 11 2. - 0 - 0.1818266957998276 - -0.0654629319906235 - 0.5240393280982971 - <_> - - <_> - - - - <_> - 24 6 11 4 -1. - <_> - 24 8 11 2 2. - 0 - 7.6404958963394165e-003 - -0.2845597863197327 - 0.0992625430226326 - <_> - - <_> - - - - <_> - 15 9 12 1 -1. - <_> - 19 9 4 1 3. - 0 - 5.8155450969934464e-003 - -0.1807647943496704 - 0.1917788982391357 - <_> - - <_> - - - - <_> - 33 3 3 3 -1. - <_> - 32 4 3 1 3. - 1 - 0.0204726494848728 - -0.0425470508635044 - 0.4989938139915466 - <_> - - <_> - - - - <_> - 12 3 3 3 -1. - <_> - 13 4 1 3 3. - 1 - -9.9484594538807869e-003 - 0.4586462974548340 - -0.0820730701088905 - <_> - - <_> - - - - <_> - 30 0 6 2 -1. - <_> - 32 0 2 2 3. - 0 - 5.6835189461708069e-003 - 0.0704604163765907 - -0.4919121861457825 - <_> - - <_> - - - - <_> - 10 9 4 2 -1. - <_> - 10 10 4 1 2. - 0 - 6.8594329059123993e-004 - -0.2572205960750580 - 0.1333848983049393 - <_> - - <_> - - - - <_> - 42 0 2 3 -1. - <_> - 42 0 1 3 2. - 1 - 8.5325147956609726e-003 - 0.0542962700128555 - -0.4859777092933655 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 3 0 3 1 2. - 1 - -2.9188990592956543e-003 - -0.3684445917606354 - 0.0876302868127823 - <_> - - <_> - - - - <_> - 37 2 3 4 -1. - <_> - 37 3 3 2 2. - 0 - -5.1809879951179028e-003 - 0.2687276005744934 - -0.1306326985359192 - <_> - - <_> - - - - <_> - 5 0 9 4 -1. - <_> - 5 1 9 2 2. - 0 - -9.3669425696134567e-003 - 0.3798243999481201 - -0.0849703624844551 - <_> - - <_> - - - - <_> - 43 9 2 2 -1. - <_> - 43 10 2 1 2. - 0 - 2.1493609528988600e-003 - 0.0673641711473465 - -0.3813815116882324 - <_> - - <_> - - - - <_> - 14 0 14 2 -1. - <_> - 14 0 7 1 2. - <_> - 21 1 7 1 2. - 0 - 7.9133054241538048e-003 - 0.0611798018217087 - -0.4712427854537964 - <_> - - <_> - - - - <_> - 34 6 4 2 -1. - <_> - 34 7 4 1 2. - 0 - 3.3651650883257389e-003 - -0.1940695047378540 - 0.1695784926414490 - <_> - - <_> - - - - <_> - 18 0 8 1 -1. - <_> - 20 0 4 1 2. - 0 - 5.9752619563369080e-005 - -0.3129621148109436 - 0.0982444435358047 - <_> - - <_> - - - - <_> - 23 6 4 4 -1. - <_> - 23 6 2 4 2. - 0 - -4.8905829899013042e-003 - 0.2401164025068283 - -0.0405179113149643 - <_> - - <_> - - - - <_> - 0 9 44 2 -1. - <_> - 0 9 22 1 2. - <_> - 22 10 22 1 2. - 0 - -0.0166922602802515 - -0.5829721093177795 - 0.0518608801066875 - <_> - - <_> - - - - <_> - 10 0 32 5 -1. - <_> - 10 0 16 5 2. - 0 - 0.2694517970085144 - 0.0212223697453737 - -0.5065090060234070 - <_> - - <_> - - - - <_> - 3 0 32 5 -1. - <_> - 19 0 16 5 2. - 0 - 0.2598569989204407 - 0.0430213287472725 - -0.6970685124397278 - -1.5896049737930298 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 12 4 3 3 -1. - <_> - 13 5 1 3 3. - 1 - 9.6479244530200958e-003 - -0.2149965018033981 - 0.4506401121616364 - <_> - - <_> - - - - <_> - 19 0 18 7 -1. - <_> - 19 0 9 7 2. - 0 - 0.1170708984136581 - -0.4592719972133637 - 0.1499751061201096 - <_> - - <_> - - - - <_> - 10 2 3 4 -1. - <_> - 9 3 3 2 2. - 1 - -7.2843180969357491e-003 - 0.2055986970663071 - -0.3498862087726593 - <_> - - <_> - - - - <_> - 24 2 2 1 -1. - <_> - 24 2 1 1 2. - 0 - 4.3017291318392381e-005 - -0.2912847995758057 - 0.1447937935590744 - <_> - - <_> - - - - <_> - 5 2 10 4 -1. - <_> - 5 3 10 2 2. - 0 - -0.0163135603070259 - 0.3609958887100220 - -0.1488208025693893 - <_> - - <_> - - - - <_> - 12 0 26 9 -1. - <_> - 12 0 13 9 2. - 0 - 0.3846439123153687 - 0.0471165515482426 - -0.5435642004013062 - <_> - - <_> - - - - <_> - 1 9 6 2 -1. - <_> - 1 10 6 1 2. - 0 - 4.4735490519087762e-005 - -0.4715361893177033 - 0.1013057008385658 - <_> - - <_> - - - - <_> - 24 2 2 1 -1. - <_> - 24 2 1 1 2. - 0 - 2.8128800913691521e-003 - 0.0251902397722006 - -0.3885841071605682 - <_> - - <_> - - - - <_> - 18 3 9 8 -1. - <_> - 21 3 3 8 3. - 0 - 0.0656641125679016 - -0.1998129934072495 - 0.2782042026519775 - <_> - - <_> - - - - <_> - 26 5 11 6 -1. - <_> - 26 8 11 3 2. - 0 - 0.0366914011538029 - -0.3214158117771149 - 0.0832958593964577 - <_> - - <_> - - - - <_> - 11 5 22 4 -1. - <_> - 11 5 11 2 2. - <_> - 22 7 11 2 2. - 0 - 0.0199371706694365 - 0.0962692573666573 - -0.4887213110923767 - <_> - - <_> - - - - <_> - 14 0 20 6 -1. - <_> - 24 0 10 3 2. - <_> - 14 3 10 3 2. - 0 - -0.0481815114617348 - -0.4369094073772430 - 0.0408011004328728 - <_> - - <_> - - - - <_> - 7 0 12 3 -1. - <_> - 11 0 4 3 3. - 0 - -6.4909900538623333e-003 - 0.1523717045783997 - -0.2879317104816437 - <_> - - <_> - - - - <_> - 41 7 4 4 -1. - <_> - 41 8 4 2 2. - 0 - -2.1715220063924789e-003 - -0.4562051892280579 - 0.0908001735806465 - <_> - - <_> - - - - <_> - 1 3 6 6 -1. - <_> - 3 5 2 2 9. - 0 - -0.0190357100218534 - 0.1617525964975357 - -0.2411530017852783 - <_> - - <_> - - - - <_> - 28 0 6 4 -1. - <_> - 30 0 2 4 3. - 0 - -0.0171191804111004 - -0.5132644176483154 - 0.0424724705517292 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 12 0 2 4 3. - 0 - -0.0182200502604246 - -0.7032442092895508 - 0.0449626408517361 - <_> - - <_> - - - - <_> - 40 2 3 3 -1. - <_> - 39 3 3 1 3. - 1 - -8.9265108108520508e-003 - 0.4314051866531372 - -0.1915881037712097 - <_> - - <_> - - - - <_> - 10 1 11 8 -1. - <_> - 10 3 11 4 2. - 0 - -0.0835192427039146 - -0.6153619289398193 - 0.0748868286609650 - <_> - - <_> - - - - <_> - 22 8 2 2 -1. - <_> - 23 8 1 1 2. - <_> - 22 9 1 1 2. - 0 - 3.6072250804863870e-004 - 0.0579051412642002 - -0.4123516082763672 - <_> - - <_> - - - - <_> - 7 3 3 3 -1. - <_> - 7 4 3 1 3. - 0 - 4.9997381865978241e-003 - -0.0698446407914162 - 0.5680745840072632 - <_> - - <_> - - - - <_> - 19 0 8 11 -1. - <_> - 19 0 4 11 2. - 0 - -0.0846046805381775 - 0.5883864164352417 - -0.0644385591149330 - <_> - - <_> - - - - <_> - 0 10 22 1 -1. - <_> - 11 10 11 1 2. - 0 - -0.0257730204612017 - -0.7448570132255554 - 0.0581265501677990 - <_> - - <_> - - - - <_> - 12 0 24 6 -1. - <_> - 24 0 12 3 2. - <_> - 12 3 12 3 2. - 0 - 0.0869977995753288 - 8.3158798515796661e-003 - -0.5005766749382019 - <_> - - <_> - - - - <_> - 19 5 4 2 -1. - <_> - 19 5 4 1 2. - 1 - -4.9193361774086952e-003 - -0.5026851892471314 - 0.0622738115489483 - <_> - - <_> - - - - <_> - 40 3 3 3 -1. - <_> - 39 4 3 1 3. - 1 - 7.9372245818376541e-003 - -0.1065687015652657 - 0.4939740896224976 - <_> - - <_> - - - - <_> - 2 4 6 1 -1. - <_> - 2 4 3 1 2. - 1 - 2.3460648953914642e-003 - 0.0781724527478218 - -0.4353787899017334 - <_> - - <_> - - - - <_> - 35 3 10 6 -1. - <_> - 35 3 5 6 2. - 0 - -0.0241736993193626 - 0.1493041962385178 - -0.1878706067800522 - <_> - - <_> - - - - <_> - 5 2 6 3 -1. - <_> - 5 3 6 1 3. - 0 - 5.0533721223473549e-003 - -0.1077732965350151 - 0.3367913067340851 - <_> - - <_> - - - - <_> - 18 2 18 9 -1. - <_> - 24 2 6 9 3. - 0 - -0.1784784048795700 - 0.3253648877143860 - -0.0435284599661827 - <_> - - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - -9.2971222475171089e-003 - -0.5468376278877258 - 0.0642068088054657 - <_> - - <_> - - - - <_> - 27 0 2 2 -1. - <_> - 27 0 2 1 2. - 1 - -4.5331679284572601e-003 - -0.2740227878093720 - 0.0696792080998421 - <_> - - <_> - - - - <_> - 7 1 26 4 -1. - <_> - 7 1 13 2 2. - <_> - 20 3 13 2 2. - 0 - 4.4196969829499722e-003 - -0.2673664093017578 - 0.1277797967195511 - <_> - - <_> - - - - <_> - 34 8 9 3 -1. - <_> - 37 8 3 3 3. - 0 - -0.0242564193904400 - -0.7333993911743164 - 0.0348337702453136 - <_> - - <_> - - - - <_> - 2 8 9 3 -1. - <_> - 5 8 3 3 3. - 0 - 0.0120942499488592 - 0.0672335624694824 - -0.4419814050197601 - <_> - - <_> - - - - <_> - 22 8 2 2 -1. - <_> - 23 8 1 1 2. - <_> - 22 9 1 1 2. - 0 - -3.1668329029344022e-004 - -0.3479251861572266 - 0.0869572535157204 - <_> - - <_> - - - - <_> - 5 3 3 3 -1. - <_> - 6 4 1 3 3. - 1 - 6.6463160328567028e-003 - -0.0748405605554581 - 0.4297528862953186 - <_> - - <_> - - - - <_> - 35 3 10 3 -1. - <_> - 35 3 5 3 2. - 0 - -8.7216906249523163e-003 - 0.0659606382250786 - -0.1169529035687447 - <_> - - <_> - - - - <_> - 19 2 2 1 -1. - <_> - 20 2 1 1 2. - 0 - 3.8271831726888195e-005 - -0.2632341980934143 - 0.1211720034480095 - <_> - - <_> - - - - <_> - 21 3 12 8 -1. - <_> - 24 3 6 8 2. - 0 - -0.0279251895844936 - 0.1197874993085861 - -0.1062619984149933 - <_> - - <_> - - - - <_> - 0 3 10 3 -1. - <_> - 5 3 5 3 2. - 0 - -3.6273279692977667e-003 - 0.1256345957517624 - -0.2633624970912933 - <_> - - <_> - - - - <_> - 19 6 9 5 -1. - <_> - 22 6 3 5 3. - 0 - -0.0118683502078056 - 0.2715075910091400 - -0.0586201399564743 - <_> - - <_> - - - - <_> - 19 0 6 11 -1. - <_> - 22 0 3 11 2. - 0 - 0.0441535599529743 - -0.1150353029370308 - 0.3142670094966888 - <_> - - <_> - - - - <_> - 21 0 3 9 -1. - <_> - 22 3 1 3 9. - 0 - 0.0240563601255417 - 0.0755757391452789 - -0.4231755137443543 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 12 5 1 1 2. - <_> - 13 6 1 1 2. - 0 - 6.9733301643282175e-004 - -0.0975871905684471 - 0.3287664055824280 - <_> - - <_> - - - - <_> - 20 9 8 2 -1. - <_> - 24 9 4 1 2. - <_> - 20 10 4 1 2. - 0 - -6.4465990290045738e-003 - -0.7151030898094177 - 0.0252250991761684 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 13 7 2 1 2. - 1 - -8.1870909780263901e-003 - -0.7668504714965820 - 0.0325768813490868 - <_> - - <_> - - - - <_> - 31 5 3 3 -1. - <_> - 30 6 3 1 3. - 1 - -2.7694210875779390e-003 - 0.2407584935426712 - -0.1444685012102127 - <_> - - <_> - - - - <_> - 8 1 3 3 -1. - <_> - 8 2 3 1 3. - 0 - 5.9827328659594059e-003 - -0.0796374008059502 - 0.3364818990230560 - <_> - - <_> - - - - <_> - 34 1 4 3 -1. - <_> - 34 2 4 1 3. - 0 - 7.5759701430797577e-003 - -0.0772878602147102 - 0.3606812059879303 - <_> - - <_> - - - - <_> - 7 1 5 3 -1. - <_> - 7 2 5 1 3. - 0 - -3.7349949125200510e-003 - 0.3505760133266449 - -0.1024150028824806 - <_> - - <_> - - - - <_> - 31 1 1 2 -1. - <_> - 31 1 1 1 2. - 1 - 3.2173299696296453e-003 - 0.0646449029445648 - -0.5068235993385315 - <_> - - <_> - - - - <_> - 21 8 2 2 -1. - <_> - 21 8 1 1 2. - <_> - 22 9 1 1 2. - 0 - 5.2299688104540110e-004 - 0.0554051995277405 - -0.4995099008083344 - <_> - - <_> - - - - <_> - 26 9 10 2 -1. - <_> - 26 10 10 1 2. - 0 - 4.8098989645950496e-004 - -0.2483759969472885 - 0.0749513134360313 - -1.5319960117340088 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 0 6 3 -1. - <_> - 11 2 2 3 3. - 1 - -0.0325478985905647 - 0.2570826113224030 - -0.3294408917427063 - <_> - - <_> - - - - <_> - 21 0 12 4 -1. - <_> - 21 0 6 4 2. - 0 - 0.0467822700738907 - -0.3355267047882080 - 0.1495001018047333 - <_> - - <_> - - - - <_> - 12 5 2 6 -1. - <_> - 12 5 1 3 2. - <_> - 13 8 1 3 2. - 0 - 1.1599030112847686e-003 - -0.2149461060762405 - 0.2950156033039093 - <_> - - <_> - - - - <_> - 12 4 30 3 -1. - <_> - 12 4 15 3 2. - 0 - 0.0476444214582443 - -0.1712875068187714 - 0.0994972735643387 - <_> - - <_> - - - - <_> - 4 4 30 3 -1. - <_> - 19 4 15 3 2. - 0 - 0.0623017288744450 - -0.3829692006111145 - 0.1846942007541657 - <_> - - <_> - - - - <_> - 39 5 6 6 -1. - <_> - 39 8 6 3 2. - 0 - 0.0163931306451559 - -0.4879460930824280 - 0.1913191974163055 - <_> - - <_> - - - - <_> - 2 3 6 4 -1. - <_> - 2 3 3 2 2. - <_> - 5 5 3 2 2. - 0 - 6.3293199054896832e-003 - -0.1820959001779556 - 0.2831347882747650 - <_> - - <_> - - - - <_> - 25 0 4 1 -1. - <_> - 25 0 2 1 2. - 0 - 6.4573478884994984e-003 - 0.0393458008766174 - -0.5209634900093079 - <_> - - <_> - - - - <_> - 12 10 12 1 -1. - <_> - 15 10 6 1 2. - 0 - -2.5518420152366161e-003 - 0.2180961072444916 - -0.2021456062793732 - <_> - - <_> - - - - <_> - 27 1 2 1 -1. - <_> - 27 1 1 1 2. - 0 - 2.6448559947311878e-003 - -9.7657637670636177e-003 - -0.5844091773033142 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 17 1 1 1 2. - 0 - 3.3177100704051554e-005 - -0.2912124097347260 - 0.1344538927078247 - <_> - - <_> - - - - <_> - 20 0 18 2 -1. - <_> - 29 0 9 1 2. - <_> - 20 1 9 1 2. - 0 - -4.0287282317876816e-003 - 0.2797578871250153 - -0.1085413992404938 - <_> - - <_> - - - - <_> - 16 9 8 2 -1. - <_> - 16 9 4 1 2. - <_> - 20 10 4 1 2. - 0 - 1.7501820111647248e-003 - 0.0802451893687248 - -0.5104030966758728 - <_> - - <_> - - - - <_> - 35 2 4 5 -1. - <_> - 36 3 2 5 2. - 1 - -9.8289866000413895e-003 - 0.2220333963632584 - -0.2527970969676971 - <_> - - <_> - - - - <_> - 7 0 6 3 -1. - <_> - 9 0 2 3 3. - 0 - -0.0113553004339337 - -0.5647733211517334 - 0.0617882199585438 - <_> - - <_> - - - - <_> - 39 3 4 3 -1. - <_> - 38 4 4 1 3. - 1 - 6.1084949411451817e-003 - -0.1297360062599182 - 0.3168272972106934 - <_> - - <_> - - - - <_> - 14 8 1 2 -1. - <_> - 14 8 1 1 2. - 1 - -1.0406709770904854e-004 - 0.1290712952613831 - -0.2594802975654602 - <_> - - <_> - - - - <_> - 31 7 2 2 -1. - <_> - 31 7 1 2 2. - 1 - 2.6019159704446793e-003 - 0.0484216883778572 - -0.5464897155761719 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 14 7 2 1 2. - 1 - -5.9403157792985439e-003 - -0.5511441230773926 - 0.0597233809530735 - <_> - - <_> - - - - <_> - 32 0 6 9 -1. - <_> - 34 0 2 9 3. - 0 - -4.0788599289953709e-003 - 0.0797432884573936 - -0.1792725026607513 - <_> - - <_> - - - - <_> - 12 3 3 3 -1. - <_> - 13 4 1 3 3. - 1 - -8.8134910911321640e-003 - 0.3801774978637695 - -0.0863765701651573 - <_> - - <_> - - - - <_> - 14 1 18 4 -1. - <_> - 23 1 9 2 2. - <_> - 14 3 9 2 2. - 0 - -0.0239835903048515 - -0.4964531064033508 - 0.0542261414229870 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - 3.9569390937685966e-003 - 0.0516635812819004 - -0.5679935812950134 - <_> - - <_> - - - - <_> - 39 3 4 3 -1. - <_> - 38 4 4 1 3. - 1 - -0.0133595596998930 - 0.2372480034828186 - -0.0320837795734406 - <_> - - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 7 4 1 4 3. - 1 - 8.6046587675809860e-003 - -0.0824632793664932 - 0.4001151025295258 - <_> - - <_> - - - - <_> - 44 0 1 8 -1. - <_> - 44 4 1 4 2. - 0 - -8.4893424063920975e-003 - -0.5281581878662109 - 0.0683831572532654 - <_> - - <_> - - - - <_> - 0 5 6 6 -1. - <_> - 0 8 6 3 2. - 0 - 7.7398498542606831e-003 - -0.4350892007350922 - 0.0635677129030228 - <_> - - <_> - - - - <_> - 27 0 2 2 -1. - <_> - 27 0 2 1 2. - 1 - 5.4778340272605419e-003 - 0.0241151805967093 - -0.4536423087120056 - <_> - - <_> - - - - <_> - 18 0 2 2 -1. - <_> - 18 0 1 2 2. - 1 - -5.3739761933684349e-003 - -0.4852677881717682 - 0.0625298321247101 - <_> - - <_> - - - - <_> - 20 3 12 8 -1. - <_> - 24 3 4 8 3. - 0 - -0.0651551634073257 - 0.3358686864376068 - -0.1196988970041275 - <_> - - <_> - - - - <_> - 9 0 5 2 -1. - <_> - 9 1 5 1 2. - 0 - 3.1082800123840570e-003 - -0.0936680883169174 - 0.3156951069831848 - <_> - - <_> - - - - <_> - 34 0 4 3 -1. - <_> - 34 1 4 1 3. - 0 - -5.6411409750580788e-003 - 0.4190236032009125 - -0.0524465292692184 - <_> - - <_> - - - - <_> - 0 5 1 6 -1. - <_> - 0 8 1 3 2. - 0 - 0.0100506497547030 - 0.0697155073285103 - -0.4827950000762940 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - -6.4478779677301645e-004 - -0.3920600116252899 - 0.0266355704516172 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 10 1 1 2. - 0 - 4.2866038711508736e-005 - -0.2828755080699921 - 0.0988063216209412 - <_> - - <_> - - - - <_> - 10 3 26 6 -1. - <_> - 23 3 13 3 2. - <_> - 10 6 13 3 2. - 0 - 0.0556598007678986 - 0.0345925614237785 - -0.5793660283088684 - <_> - - <_> - - - - <_> - 10 0 11 8 -1. - <_> - 10 2 11 4 2. - 0 - -0.0190272405743599 - 0.1279810965061188 - -0.2225265055894852 - <_> - - <_> - - - - <_> - 40 2 3 3 -1. - <_> - 39 3 3 1 3. - 1 - -5.4886029101908207e-003 - 0.2212001979351044 - -0.1424780935049057 - <_> - - <_> - - - - <_> - 4 0 20 2 -1. - <_> - 9 0 10 2 2. - 0 - -9.1977212578058243e-003 - 0.1141979023814201 - -0.2536773085594177 - <_> - - <_> - - - - <_> - 21 3 12 8 -1. - <_> - 25 3 4 8 3. - 0 - 0.1561601012945175 - -0.0246981307864189 - 0.6497715711593628 - <_> - - <_> - - - - <_> - 12 3 12 8 -1. - <_> - 16 3 4 8 3. - 0 - 0.1039426997303963 - -0.0475918203592300 - 0.6708809137344360 - <_> - - <_> - - - - <_> - 15 10 15 1 -1. - <_> - 20 10 5 1 3. - 0 - 2.3722560144960880e-003 - -0.2534680068492889 - 0.1275814026594162 - <_> - - <_> - - - - <_> - 5 2 3 3 -1. - <_> - 6 3 1 3 3. - 1 - 6.3766101375222206e-003 - -0.0806954428553581 - 0.4279245138168335 - <_> - - <_> - - - - <_> - 35 2 4 3 -1. - <_> - 36 3 2 3 2. - 1 - -0.0133687499910593 - 0.1052142009139061 - -0.0477701015770435 - <_> - - <_> - - - - <_> - 2 3 2 6 -1. - <_> - 3 3 1 6 2. - 0 - -5.6055800087051466e-005 - 0.1201763972640038 - -0.2598378956317902 - <_> - - <_> - - - - <_> - 18 9 10 2 -1. - <_> - 23 9 5 1 2. - <_> - 18 10 5 1 2. - 0 - 2.6153340004384518e-003 - 0.0496119409799576 - -0.4055382013320923 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -8.5704872617498040e-004 - 0.3632655143737793 - -0.0827535986900330 - <_> - - <_> - - - - <_> - 36 8 4 3 -1. - <_> - 37 8 2 3 2. - 0 - 4.0100780315697193e-003 - 0.0401565693318844 - -0.5621622204780579 - <_> - - <_> - - - - <_> - 20 3 4 8 -1. - <_> - 22 3 2 8 2. - 0 - 0.0157218798995018 - -0.1180450022220612 - 0.2465451955795288 - <_> - - <_> - - - - <_> - 36 9 4 2 -1. - <_> - 37 9 2 2 2. - 0 - -2.6668920181691647e-003 - -0.5406882166862488 - 0.0436632893979549 - <_> - - <_> - - - - <_> - 15 5 9 6 -1. - <_> - 18 5 3 6 3. - 0 - 0.0414145998656750 - -0.0829768404364586 - 0.3388422131538391 - <_> - - <_> - - - - <_> - 28 0 4 4 -1. - <_> - 29 0 2 4 2. - 0 - 4.8187570646405220e-003 - 0.0434143915772438 - -0.4072461128234863 - <_> - - <_> - - - - <_> - 7 2 3 3 -1. - <_> - 7 3 3 1 3. - 0 - -5.4356600157916546e-003 - 0.3383021950721741 - -0.0903681665658951 - <_> - - <_> - - - - <_> - 33 2 6 1 -1. - <_> - 35 4 2 1 3. - 1 - -4.6245800331234932e-003 - 0.0489254184067249 - -0.1081843972206116 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 6 1 6 1 3. - 0 - -5.0910529680550098e-003 - 0.3395316898822784 - -0.0778475031256676 - <_> - - <_> - - - - <_> - 28 0 4 4 -1. - <_> - 29 0 2 4 2. - 0 - -6.9446121342480183e-003 - -0.3688277900218964 - 0.0341559089720249 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 0 2 4 2. - 0 - -5.2966130897402763e-003 - -0.4667122066020966 - 0.0550306998193264 - <_> - - <_> - - - - <_> - 33 2 6 1 -1. - <_> - 35 4 2 1 3. - 1 - 8.2239676266908646e-003 - -0.0194188598543406 - 0.2714818120002747 - <_> - - <_> - - - - <_> - 12 2 1 6 -1. - <_> - 10 4 1 2 3. - 1 - -6.9603421725332737e-003 - 0.1386401951313019 - -0.2123727053403854 - <_> - - <_> - - - - <_> - 35 1 2 3 -1. - <_> - 35 2 2 1 3. - 0 - -3.5027971025556326e-003 - 0.4821687936782837 - -0.0895727872848511 - <_> - - <_> - - - - <_> - 19 8 2 2 -1. - <_> - 19 8 1 1 2. - <_> - 20 9 1 1 2. - 0 - -3.3562759199412540e-005 - 0.1775393038988113 - -0.1539040952920914 - <_> - - <_> - - - - <_> - 43 6 1 4 -1. - <_> - 43 6 1 2 2. - 1 - -0.0119058098644018 - -0.4490548968315125 - 0.0487651899456978 - <_> - - <_> - - - - <_> - 2 6 4 1 -1. - <_> - 2 6 2 1 2. - 1 - 1.0403740452602506e-003 - 0.0691993907094002 - -0.3906114101409912 - -1.5442479848861694 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 3 32 3 -1. - <_> - 12 3 16 3 2. - 0 - 0.1147755011916161 - -0.3539234101772308 - 0.2468626946210861 - <_> - - <_> - - - - <_> - 32 5 6 2 -1. - <_> - 34 5 2 2 3. - 0 - -8.3238538354635239e-003 - 0.3580448031425476 - -0.2909640967845917 - <_> - - <_> - - - - <_> - 15 0 8 7 -1. - <_> - 19 0 4 7 2. - 0 - 0.0330691784620285 - -0.4501777887344360 - 0.1467828005552292 - <_> - - <_> - - - - <_> - 35 2 4 3 -1. - <_> - 36 3 2 3 2. - 1 - -9.8486011847853661e-003 - 0.1548763066530228 - -0.1546719074249268 - <_> - - <_> - - - - <_> - 15 2 2 3 -1. - <_> - 14 3 2 1 3. - 1 - -3.6737930495291948e-003 - 0.2725059986114502 - -0.2011754065752029 - <_> - - <_> - - - - <_> - 42 5 2 3 -1. - <_> - 42 5 1 3 2. - 1 - -3.5203520674258471e-003 - 0.2189404964447022 - -0.3099618852138519 - <_> - - <_> - - - - <_> - 0 1 4 6 -1. - <_> - 0 1 2 3 2. - <_> - 2 4 2 3 2. - 0 - -2.9107630252838135e-003 - 0.1709515005350113 - -0.2503634095191956 - <_> - - <_> - - - - <_> - 13 0 21 1 -1. - <_> - 20 0 7 1 3. - 0 - 0.0111071700230241 - -0.2938312888145447 - 0.0905003175139427 - <_> - - <_> - - - - <_> - 9 4 1 6 -1. - <_> - 9 7 1 3 2. - 0 - 4.5277690514922142e-003 - -0.3656733036041260 - 0.0718126818537712 - <_> - - <_> - - - - <_> - 25 9 11 2 -1. - <_> - 25 10 11 1 2. - 0 - 1.6910480335354805e-003 - -0.2463562041521072 - 0.1436509042978287 - <_> - - <_> - - - - <_> - 9 1 26 8 -1. - <_> - 9 1 13 4 2. - <_> - 22 5 13 4 2. - 0 - -0.0528489314019680 - -0.4898813068866730 - 0.0588662698864937 - <_> - - <_> - - - - <_> - 19 5 8 6 -1. - <_> - 21 5 4 6 2. - 0 - 0.0272572692483664 - -0.1331882029771805 - 0.1779861003160477 - <_> - - <_> - - - - <_> - 15 3 12 8 -1. - <_> - 21 3 6 8 2. - 0 - -0.1077461019158363 - 0.7573465704917908 - -0.0457932800054550 - <_> - - <_> - - - - <_> - 20 0 6 1 -1. - <_> - 22 0 2 1 3. - 0 - 6.2365201301872730e-003 - 0.0763477906584740 - -0.4673461914062500 - <_> - - <_> - - - - <_> - 7 0 12 2 -1. - <_> - 7 0 6 1 2. - <_> - 13 1 6 1 2. - 0 - -3.2917850185185671e-003 - 0.2565709054470062 - -0.1366966962814331 - <_> - - <_> - - - - <_> - 33 9 6 2 -1. - <_> - 35 9 2 2 3. - 0 - -7.0988652296364307e-003 - -0.7358775734901428 - 0.0567887090146542 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - -0.0205022394657135 - -0.6133338809013367 - 0.0406611002981663 - <_> - - <_> - - - - <_> - 32 1 6 10 -1. - <_> - 34 1 2 10 3. - 0 - -0.0578949898481369 - -0.4233744144439697 - 0.0162566602230072 - <_> - - <_> - - - - <_> - 7 1 6 10 -1. - <_> - 9 1 2 10 3. - 0 - -7.0625008083879948e-003 - 0.1507007032632828 - -0.2153072953224182 - <_> - - <_> - - - - <_> - 27 0 9 3 -1. - <_> - 30 0 3 3 3. - 0 - -1.4774609589949250e-003 - 0.0994475930929184 - -0.1999025046825409 - <_> - - <_> - - - - <_> - 9 3 2 3 -1. - <_> - 8 4 2 1 3. - 1 - -5.9045450761914253e-003 - 0.2344854027032852 - -0.1323975026607513 - <_> - - <_> - - - - <_> - 41 0 3 2 -1. - <_> - 42 1 1 2 3. - 1 - 4.9114958383142948e-003 - 0.0553076006472111 - -0.4102441966533661 - <_> - - <_> - - - - <_> - 6 0 5 6 -1. - <_> - 6 2 5 2 3. - 0 - -0.0403023585677147 - 0.5108960270881653 - -0.0671787187457085 - <_> - - <_> - - - - <_> - 27 0 9 3 -1. - <_> - 30 0 3 3 3. - 0 - -0.0314785093069077 - -0.3574273884296417 - 0.0346911102533340 - <_> - - <_> - - - - <_> - 9 0 9 3 -1. - <_> - 12 0 3 3 3. - 0 - -2.0419940119609237e-004 - 0.1190790981054306 - -0.2625693082809448 - <_> - - <_> - - - - <_> - 32 9 6 2 -1. - <_> - 34 9 2 2 3. - 0 - 6.1496188864111900e-003 - 0.0383449196815491 - -0.7075287103652954 - <_> - - <_> - - - - <_> - 7 9 6 2 -1. - <_> - 9 9 2 2 3. - 0 - -6.4982818439602852e-003 - -0.5713528990745544 - 0.0413468889892101 - <_> - - <_> - - - - <_> - 26 10 6 1 -1. - <_> - 26 10 3 1 2. - 0 - -2.0436770282685757e-003 - 0.2154771983623505 - -0.0921439230442047 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 8.4923263639211655e-003 - 0.0570751093327999 - -0.5348739027976990 - <_> - - <_> - - - - <_> - 32 5 3 3 -1. - <_> - 31 6 3 1 3. - 1 - -2.2661099210381508e-003 - 0.2737484872341156 - -0.1890739947557449 - <_> - - <_> - - - - <_> - 16 9 8 2 -1. - <_> - 16 9 4 1 2. - <_> - 20 10 4 1 2. - 0 - -3.8180600386112928e-003 - -0.4999729990959168 - 0.0562875196337700 - <_> - - <_> - - - - <_> - 18 2 12 9 -1. - <_> - 22 2 4 9 3. - 0 - 0.1983292996883392 - -0.0492840297520161 - 0.3099189102649689 - <_> - - <_> - - - - <_> - 8 3 2 3 -1. - <_> - 8 4 2 1 3. - 0 - -5.3573800250887871e-003 - 0.3652536869049072 - -0.0815863236784935 - <_> - - <_> - - - - <_> - 43 5 2 4 -1. - <_> - 43 7 2 2 2. - 0 - -4.1200658306479454e-003 - -0.4997940957546234 - 0.0337594412267208 - <_> - - <_> - - - - <_> - 8 3 2 3 -1. - <_> - 8 4 2 1 3. - 0 - 2.7241830248385668e-003 - -0.0749610364437103 - 0.4040215909481049 - <_> - - <_> - - - - <_> - 15 4 16 2 -1. - <_> - 23 4 8 1 2. - <_> - 15 5 8 1 2. - 0 - -0.0112792700529099 - -0.6254091262817383 - 0.0405392684042454 - <_> - - <_> - - - - <_> - 12 5 16 2 -1. - <_> - 16 5 8 2 2. - 0 - -0.0264386702328920 - 0.6246979832649231 - -0.0506956689059734 - <_> - - <_> - - - - <_> - 19 2 9 9 -1. - <_> - 22 2 3 9 3. - 0 - 0.0930858105421066 - -0.0277362298220396 - 0.1220149993896484 - <_> - - <_> - - - - <_> - 19 9 2 2 -1. - <_> - 19 9 1 1 2. - <_> - 20 10 1 1 2. - 0 - 3.6821569665335119e-004 - 0.0632278695702553 - -0.4546276032924652 - <_> - - <_> - - - - <_> - 20 1 8 10 -1. - <_> - 22 1 4 10 2. - 0 - -0.0261502098292112 - 0.2161553055047989 - -0.0341892093420029 - <_> - - <_> - - - - <_> - 0 2 39 9 -1. - <_> - 13 5 13 3 9. - 0 - -0.1521912962198257 - -0.5629113912582398 - 0.0508813895285130 - <_> - - <_> - - - - <_> - 32 5 3 3 -1. - <_> - 31 6 3 1 3. - 1 - -5.3802412003278732e-003 - 0.1196914985775948 - -0.0454637706279755 - <_> - - <_> - - - - <_> - 8 9 4 2 -1. - <_> - 9 9 2 2 2. - 0 - 3.1421401072293520e-003 - 0.0351711288094521 - -0.7533329725265503 - <_> - - <_> - - - - <_> - 32 5 3 3 -1. - <_> - 31 6 3 1 3. - 1 - -2.3642999585717916e-003 - -0.0781453177332878 - 0.0365911610424519 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 6 1 3 3. - 1 - -3.4253650810569525e-003 - 0.2796125113964081 - -0.1028681993484497 - <_> - - <_> - - - - <_> - 24 2 11 6 -1. - <_> - 24 4 11 2 3. - 0 - -0.0101263895630836 - 0.1294676959514618 - -0.2079537063837051 - <_> - - <_> - - - - <_> - 5 2 3 4 -1. - <_> - 6 3 1 4 3. - 1 - 9.5109362155199051e-003 - -0.0644871667027473 - 0.4530493915081024 - <_> - - <_> - - - - <_> - 39 1 3 9 -1. - <_> - 40 4 1 3 9. - 0 - -0.0283829905092716 - 0.1810360997915268 - -0.1264723986387253 - <_> - - <_> - - - - <_> - 17 2 9 9 -1. - <_> - 20 2 3 9 3. - 0 - 0.0725912004709244 - -0.1313744932413101 - 0.2162660956382752 - <_> - - <_> - - - - <_> - 20 8 8 2 -1. - <_> - 22 8 4 2 2. - 0 - 5.6936382316052914e-003 - -0.0738181099295616 - 0.1078862026333809 - <_> - - <_> - - - - <_> - 18 7 8 4 -1. - <_> - 20 7 4 4 2. - 0 - -5.4796910844743252e-003 - 0.4171521961688995 - -0.0677783191204071 - <_> - - <_> - - - - <_> - 8 5 30 6 -1. - <_> - 23 5 15 3 2. - <_> - 8 8 15 3 2. - 0 - -0.0680012926459312 - -0.5723094940185547 - 0.0596870183944702 - <_> - - <_> - - - - <_> - 0 7 5 2 -1. - <_> - 0 8 5 1 2. - 0 - 4.1796491132117808e-005 - -0.3601624071598053 - 0.0677706226706505 - <_> - - <_> - - - - <_> - 23 6 1 4 -1. - <_> - 22 7 1 2 2. - 1 - -6.0458998195827007e-003 - -0.6670281291007996 - 0.0206663999706507 - <_> - - <_> - - - - <_> - 3 5 3 2 -1. - <_> - 4 5 1 2 3. - 0 - -8.9402851881459355e-004 - 0.1852525025606155 - -0.1336766034364700 - <_> - - <_> - - - - <_> - 21 0 6 1 -1. - <_> - 23 0 2 1 3. - 0 - -5.2337357774376869e-003 - -0.6425905823707581 - 0.0382458008825779 - <_> - - <_> - - - - <_> - 2 3 2 7 -1. - <_> - 3 3 1 7 2. - 0 - -0.0108766602352262 - -0.6561298966407776 - 0.0309162400662899 - <_> - - <_> - - - - <_> - 18 2 24 2 -1. - <_> - 30 2 12 1 2. - <_> - 18 3 12 1 2. - 0 - 0.0107645904645324 - -0.1220951974391937 - 0.2324434965848923 - <_> - - <_> - - - - <_> - 0 3 3 4 -1. - <_> - 0 4 3 2 2. - 0 - 6.2717488035559654e-003 - 0.0366653800010681 - -0.6426709890365601 - <_> - - <_> - - - - <_> - 34 0 3 3 -1. - <_> - 34 1 3 1 3. - 0 - 3.9870911277830601e-003 - -0.1001384034752846 - 0.2668761909008026 - <_> - - <_> - - - - <_> - 17 1 2 2 -1. - <_> - 17 1 1 2 2. - 1 - 5.6966538541018963e-003 - 0.0416801385581493 - -0.6292551755905151 - <_> - - <_> - - - - <_> - 34 0 3 3 -1. - <_> - 34 1 3 1 3. - 0 - -2.4660900235176086e-003 - 0.3037576079368591 - -0.0899545699357986 - <_> - - <_> - - - - <_> - 21 9 2 2 -1. - <_> - 21 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - 4.3577459291554987e-004 - 0.0568453297019005 - -0.4491609036922455 - <_> - - <_> - - - - <_> - 25 9 2 2 -1. - <_> - 26 9 1 1 2. - <_> - 25 10 1 1 2. - 0 - -8.6022150935605168e-004 - -0.3133156001567841 - 0.0222319494932890 - <_> - - <_> - - - - <_> - 18 9 2 2 -1. - <_> - 18 9 1 1 2. - <_> - 19 10 1 1 2. - 0 - -3.6151748645352200e-005 - 0.1603706926107407 - -0.1564521938562393 - <_> - - <_> - - - - <_> - 31 4 2 2 -1. - <_> - 32 4 1 1 2. - <_> - 31 5 1 1 2. - 0 - -1.2417449615895748e-003 - 0.3625147044658661 - -0.0680296868085861 - <_> - - <_> - - - - <_> - 4 2 1 4 -1. - <_> - 3 3 1 2 2. - 1 - -9.3716438859701157e-003 - -0.6566702723503113 - 0.0392969995737076 - <_> - - <_> - - - - <_> - 31 4 2 2 -1. - <_> - 32 4 1 1 2. - <_> - 31 5 1 1 2. - 0 - 5.0649640616029501e-004 - -0.0998978018760681 - 0.2548699080944061 - -1.5824840068817139 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 1 2 3 2. - <_> - 11 4 2 3 2. - 0 - 6.9536222144961357e-003 - -0.3007029891014099 - 0.2884491086006165 - <_> - - <_> - - - - <_> - 19 0 20 7 -1. - <_> - 19 0 10 7 2. - 0 - 0.1552439928054810 - -0.2848395109176636 - 0.1254279017448425 - <_> - - <_> - - - - <_> - 4 2 4 3 -1. - <_> - 5 3 2 3 2. - 1 - -9.5990058034658432e-003 - 0.2663621902465820 - -0.2246758937835693 - <_> - - <_> - - - - <_> - 23 6 4 1 -1. - <_> - 23 6 2 1 2. - 1 - 8.2325551193207502e-004 - -0.1501412987709045 - 0.1761123985052109 - <_> - - <_> - - - - <_> - 0 1 2 10 -1. - <_> - 0 6 2 5 2. - 0 - -6.3837850466370583e-003 - -0.5321183204650879 - 0.0889239236712456 - <_> - - <_> - - - - <_> - 1 10 44 1 -1. - <_> - 1 10 22 1 2. - 0 - -0.0181104205548763 - 0.2929402887821198 - -0.1841827929019928 - <_> - - <_> - - - - <_> - 12 4 4 4 -1. - <_> - 13 4 2 4 2. - 0 - -2.2221719846129417e-003 - 0.2360882014036179 - -0.1808235943317413 - <_> - - <_> - - - - <_> - 30 2 12 5 -1. - <_> - 33 2 6 5 2. - 0 - -4.2745987884700298e-003 - 0.1137200966477394 - -0.2823255062103272 - <_> - - <_> - - - - <_> - 12 2 3 4 -1. - <_> - 13 3 1 4 3. - 1 - -0.0119243403896689 - 0.3017709851264954 - -0.1306345015764237 - <_> - - <_> - - - - <_> - 25 9 11 2 -1. - <_> - 25 10 11 1 2. - 0 - 2.1337319631129503e-003 - -0.2007887065410614 - 0.1075965017080307 - <_> - - <_> - - - - <_> - 17 1 2 1 -1. - <_> - 18 1 1 1 2. - 0 - 3.9748410927131772e-005 - -0.3365252017974854 - 0.0984087735414505 - <_> - - <_> - - - - <_> - 33 2 4 3 -1. - <_> - 33 3 4 1 3. - 0 - -7.4939359910786152e-003 - 0.4472881853580475 - -0.1235982030630112 - <_> - - <_> - - - - <_> - 18 0 2 3 -1. - <_> - 18 0 1 3 2. - 1 - -5.4673082195222378e-003 - -0.3799205124378204 - 0.0901674702763557 - <_> - - <_> - - - - <_> - 35 0 6 6 -1. - <_> - 35 0 3 6 2. - 0 - -0.0464109703898430 - -0.4790937900543213 - 0.0221620704978704 - <_> - - <_> - - - - <_> - 4 0 6 6 -1. - <_> - 7 0 3 6 2. - 0 - -1.8335790373384953e-003 - 0.1406226009130478 - -0.2750051021575928 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - 3.2272320822812617e-004 - 0.0443302914500237 - -0.3167147040367127 - <_> - - <_> - - - - <_> - 11 5 3 2 -1. - <_> - 12 5 1 2 3. - 0 - -2.0776148885488510e-003 - 0.4185835123062134 - -0.0708758234977722 - <_> - - <_> - - - - <_> - 24 9 11 2 -1. - <_> - 24 10 11 1 2. - 0 - -7.9464362934231758e-003 - -0.7928162813186646 - 0.0197782702744007 - <_> - - <_> - - - - <_> - 16 0 12 1 -1. - <_> - 19 0 6 1 2. - 0 - 1.8161779735237360e-003 - -0.3533557951450348 - 0.0807573124766350 - <_> - - <_> - - - - <_> - 29 5 4 2 -1. - <_> - 29 5 2 2 2. - 1 - -1.3951859727967530e-004 - 0.0871761962771416 - -0.2344271987676621 - <_> - - <_> - - - - <_> - 14 10 9 1 -1. - <_> - 17 10 3 1 3. - 0 - -3.0605921056121588e-003 - 0.1996555030345917 - -0.1447550952434540 - <_> - - <_> - - - - <_> - 6 7 34 4 -1. - <_> - 23 7 17 2 2. - <_> - 6 9 17 2 2. - 0 - -0.0350441895425320 - -0.4692314863204956 - 0.0637441277503967 - <_> - - <_> - - - - <_> - 1 2 36 4 -1. - <_> - 19 2 18 4 2. - 0 - 0.2234399020671845 - 0.0361883491277695 - -0.6774014234542847 - <_> - - <_> - - - - <_> - 29 0 6 4 -1. - <_> - 31 0 2 4 3. - 0 - 6.2643741257488728e-003 - 0.0539225898683071 - -0.2995721101760864 - <_> - - <_> - - - - <_> - 11 5 4 2 -1. - <_> - 12 5 2 2 2. - 0 - 5.1456191577017307e-003 - -0.0856956467032433 - 0.3495860099792481 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - -4.5792991295456886e-004 - -0.3727482855319977 - 0.0520981289446354 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 8 8 2 3 3. - 0 - -8.9521985501050949e-003 - -0.5594332218170166 - 0.0450372397899628 - <_> - - <_> - - - - <_> - 33 9 6 2 -1. - <_> - 35 9 2 2 3. - 0 - -8.8845528662204742e-003 - -0.8215249180793762 - 0.0190233103930950 - <_> - - <_> - - - - <_> - 0 3 2 5 -1. - <_> - 1 3 1 5 2. - 0 - -8.3964038640260696e-004 - 0.1355317980051041 - -0.1943961977958679 - <_> - - <_> - - - - <_> - 33 9 6 2 -1. - <_> - 35 9 2 2 3. - 0 - 5.7581579312682152e-003 - 0.0348723717033863 - -0.6131761074066162 - <_> - - <_> - - - - <_> - 7 0 16 2 -1. - <_> - 7 0 8 1 2. - <_> - 15 1 8 1 2. - 0 - -3.2971119508147240e-003 - 0.2093304991722107 - -0.1179770976305008 - <_> - - <_> - - - - <_> - 21 1 16 2 -1. - <_> - 29 1 8 1 2. - <_> - 21 2 8 1 2. - 0 - 6.6358018666505814e-003 - -0.1262518018484116 - 0.2315140962600708 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - 9.1771818697452545e-003 - 0.0422563590109348 - -0.6428142189979553 - <_> - - <_> - - - - <_> - 29 0 6 4 -1. - <_> - 31 0 2 4 3. - 0 - -0.0188983809202909 - -0.5478479862213135 - 0.0240227598696947 - <_> - - <_> - - - - <_> - 12 2 6 6 -1. - <_> - 14 4 2 2 9. - 0 - -0.0139614399522543 - 0.1334217935800552 - -0.1894931048154831 - <_> - - <_> - - - - <_> - 33 10 6 1 -1. - <_> - 35 10 2 1 3. - 0 - 3.9351810701191425e-003 - 0.0123231001198292 - -0.4801740050315857 - <_> - - <_> - - - - <_> - 5 3 2 3 -1. - <_> - 5 4 2 1 3. - 0 - 2.8737629763782024e-003 - -0.0638331696391106 - 0.3845090866088867 - <_> - - <_> - - - - <_> - 39 4 1 4 -1. - <_> - 39 5 1 2 2. - 0 - -2.1502410527318716e-003 - 0.2496782988309860 - -0.0836938619613647 - <_> - - <_> - - - - <_> - 16 4 1 6 -1. - <_> - 16 4 1 3 2. - 1 - -0.0209453497081995 - -0.4658147990703583 - 0.0599679499864578 - <_> - - <_> - - - - <_> - 39 4 1 4 -1. - <_> - 39 5 1 2 2. - 0 - 1.2025360483676195e-003 - -0.0740314573049545 - 0.2621783912181854 - <_> - - <_> - - - - <_> - 1 8 1 3 -1. - <_> - 1 9 1 1 3. - 0 - -1.2649910058826208e-003 - -0.5635809898376465 - 0.0473508313298225 - <_> - - <_> - - - - <_> - 25 8 2 2 -1. - <_> - 26 8 1 1 2. - <_> - 25 9 1 1 2. - 0 - -3.5608751204563305e-005 - 0.0839448198676109 - -0.0923392772674561 - <_> - - <_> - - - - <_> - 5 4 1 4 -1. - <_> - 5 5 1 2 2. - 0 - 1.7638429999351501e-003 - -0.0671062320470810 - 0.3539065122604370 - <_> - - <_> - - - - <_> - 42 8 2 3 -1. - <_> - 42 9 2 1 3. - 0 - 2.6478520594537258e-003 - 0.0497924908995628 - -0.5610852837562561 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 5 4 1 1 2. - <_> - 6 5 1 1 2. - 0 - 1.1421759845688939e-003 - -0.0805669277906418 - 0.3189930021762848 - <_> - - <_> - - - - <_> - 42 2 2 2 -1. - <_> - 42 2 1 2 2. - 1 - -3.7144690286368132e-003 - -0.2128649055957794 - 0.0669720098376274 - <_> - - <_> - - - - <_> - 3 2 2 2 -1. - <_> - 3 2 2 1 2. - 1 - 4.6520791947841644e-003 - 0.0592891909182072 - -0.4567444026470184 - <_> - - <_> - - - - <_> - 33 9 6 2 -1. - <_> - 35 9 2 2 3. - 0 - -4.7056251205503941e-003 - -0.2454106956720352 - 0.0245448406785727 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 8 9 2 2 3. - 0 - 7.1251969784498215e-003 - 0.0383189283311367 - -0.6497387290000916 - <_> - - <_> - - - - <_> - 28 3 2 6 -1. - <_> - 28 3 2 3 2. - 1 - -0.0676583871245384 - 0.4003041088581085 - -0.0320798717439175 - <_> - - <_> - - - - <_> - 16 4 8 7 -1. - <_> - 18 4 4 7 2. - 0 - 0.0357298403978348 - -0.0704301074147224 - 0.3063311874866486 - <_> - - <_> - - - - <_> - 21 1 6 8 -1. - <_> - 21 1 3 8 2. - 0 - -0.0338284410536289 - 0.5049129724502564 - -0.0354564599692822 - <_> - - <_> - - - - <_> - 18 4 6 4 -1. - <_> - 21 4 3 4 2. - 0 - 0.0133518604561687 - -0.1789028048515320 - 0.1476718038320541 - <_> - - <_> - - - - <_> - 24 0 8 3 -1. - <_> - 24 0 4 3 2. - 1 - 0.0874881967902184 - 0.0435387790203094 - -0.4679369926452637 - <_> - - <_> - - - - <_> - 1 9 32 2 -1. - <_> - 9 9 16 2 2. - 0 - 3.6777120549231768e-003 - -0.2042710036039352 - 0.1514813005924225 - <_> - - <_> - - - - <_> - 38 2 1 3 -1. - <_> - 38 3 1 1 3. - 0 - 1.0766600025817752e-003 - -0.0963197872042656 - 0.3553023040294647 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - 5.2243531681597233e-003 - 0.0533896684646606 - -0.4571785926818848 - <_> - - <_> - - - - <_> - 32 2 6 1 -1. - <_> - 34 4 2 1 3. - 1 - -9.5345107838511467e-003 - 0.1491248011589050 - -0.1498575061559677 - <_> - - <_> - - - - <_> - 0 10 2 1 -1. - <_> - 1 10 1 1 2. - 0 - 4.2573010432533920e-005 - -0.1389053016901016 - 0.1546718031167984 - <_> - - <_> - - - - <_> - 43 9 2 2 -1. - <_> - 43 10 2 1 2. - 0 - -1.5596169978380203e-003 - -0.5472314953804016 - 0.0347671099007130 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 1 1 2. - <_> - 8 4 1 1 2. - 0 - 7.6222111238166690e-004 - -0.0789805501699448 - 0.2835516035556793 - <_> - - <_> - - - - <_> - 21 0 3 9 -1. - <_> - 22 3 1 3 9. - 0 - -0.0219077207148075 - -0.4367178976535797 - 0.0517012402415276 - <_> - - <_> - - - - <_> - 0 8 5 2 -1. - <_> - 0 9 5 1 2. - 0 - 4.6507688239216805e-005 - -0.3191409111022949 - 0.0624821111559868 - <_> - - <_> - - - - <_> - 42 8 2 3 -1. - <_> - 42 9 2 1 3. - 0 - -2.9253138927742839e-004 - -0.2476699054241180 - 0.0840149372816086 - <_> - - <_> - - - - <_> - 9 5 1 4 -1. - <_> - 8 6 1 2 2. - 1 - 3.0009269248694181e-003 - -0.1104286983609200 - 0.1972046047449112 - <_> - - <_> - - - - <_> - 42 8 2 3 -1. - <_> - 42 9 2 1 3. - 0 - 8.7042397353798151e-004 - 0.0671973675489426 - -0.1836692988872528 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 7.6602102490141988e-004 - -0.0644856765866280 - 0.3246726095676422 - <_> - - <_> - - - - <_> - 43 8 1 3 -1. - <_> - 43 9 1 1 3. - 0 - 3.3248408726649359e-005 - -0.0983626469969749 - 0.0864629372954369 - <_> - - <_> - - - - <_> - 1 8 1 3 -1. - <_> - 1 9 1 1 3. - 0 - 1.2568470556288958e-003 - 0.0493546798825264 - -0.4317789077758789 - <_> - - <_> - - - - <_> - 36 0 6 4 -1. - <_> - 38 0 2 4 3. - 0 - -9.7309090197086334e-003 - -0.2739312052726746 - 0.0396414399147034 - <_> - - <_> - - - - <_> - 4 0 12 2 -1. - <_> - 4 0 6 1 2. - <_> - 10 1 6 1 2. - 0 - 5.8255670592188835e-003 - -0.0703800767660141 - 0.3054617941379547 - -1.4470269680023193 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 8 4 2 4 3. - 0 - -6.9308779202401638e-003 - 0.2389768064022064 - -0.3373557925224304 - <_> - - <_> - - - - <_> - 34 0 10 4 -1. - <_> - 34 1 10 2 2. - 0 - 6.3356258906424046e-003 - -0.2060621976852417 - 0.2454628944396973 - <_> - - <_> - - - - <_> - 12 0 12 4 -1. - <_> - 18 0 6 4 2. - 0 - 0.0329519286751747 - -0.4815129935741425 - 0.1353441029787064 - <_> - - <_> - - - - <_> - 39 1 3 9 -1. - <_> - 40 4 1 3 9. - 0 - -0.0202942993491888 - 0.2442599982023239 - -0.3064855039119721 - <_> - - <_> - - - - <_> - 6 2 8 4 -1. - <_> - 6 3 8 2 2. - 0 - -8.0935731530189514e-003 - 0.2175426036119461 - -0.2305133938789368 - <_> - - <_> - - - - <_> - 31 5 3 3 -1. - <_> - 30 6 3 1 3. - 1 - -3.2209409400820732e-003 - 0.2408275008201599 - -0.1475351005792618 - <_> - - <_> - - - - <_> - 0 5 24 2 -1. - <_> - 12 5 12 2 2. - 0 - 0.0369491204619408 - -0.2875896096229553 - 0.1723792999982834 - <_> - - <_> - - - - <_> - 24 5 2 2 -1. - <_> - 24 5 1 2 2. - 0 - 1.0001210030168295e-003 - -0.1848354935646057 - 0.1064966991543770 - <_> - - <_> - - - - <_> - 15 4 3 4 -1. - <_> - 15 4 3 2 2. - 1 - -4.9832418881123886e-005 - 0.1008493006229401 - -0.3728978037834168 - <_> - - <_> - - - - <_> - 10 1 26 8 -1. - <_> - 23 1 13 4 2. - <_> - 10 5 13 4 2. - 0 - 0.0466450713574886 - 0.0713314116001129 - -0.4217490851879120 - <_> - - <_> - - - - <_> - 0 5 4 6 -1. - <_> - 0 5 2 3 2. - <_> - 2 8 2 3 2. - 0 - 2.9729669913649559e-003 - -0.2338577955961227 - 0.1572815030813217 - <_> - - <_> - - - - <_> - 24 9 11 2 -1. - <_> - 24 10 11 1 2. - 0 - 1.1885419953614473e-003 - -0.2161511927843094 - 0.0854354798793793 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 10 4 2 3 2. - 0 - -2.5504899676889181e-003 - 0.2445300966501236 - -0.1364232003688812 - <_> - - <_> - - - - <_> - 44 3 1 8 -1. - <_> - 44 7 1 4 2. - 0 - 0.0145806903019547 - 0.0630506128072739 - -0.4380542039871216 - <_> - - <_> - - - - <_> - 0 3 1 8 -1. - <_> - 0 7 1 4 2. - 0 - 1.7621000006329268e-004 - -0.3502649068832398 - 0.0979951471090317 - <_> - - <_> - - - - <_> - 33 0 6 3 -1. - <_> - 35 0 2 3 3. - 0 - -0.0107630603015423 - -0.5561497211456299 - 0.0526131093502045 - <_> - - <_> - - - - <_> - 13 6 3 2 -1. - <_> - 14 7 1 2 3. - 1 - -1.7733459826558828e-003 - 0.2124083936214447 - -0.1288591027259827 - <_> - - <_> - - - - <_> - 20 8 8 2 -1. - <_> - 24 8 4 1 2. - <_> - 20 9 4 1 2. - 0 - -5.6170229800045490e-003 - -0.5789517164230347 - 0.0270562805235386 - <_> - - <_> - - - - <_> - 0 1 45 9 -1. - <_> - 15 4 15 3 9. - 0 - 0.7813777923583984 - 0.0435121916234493 - -0.5111237764358521 - <_> - - <_> - - - - <_> - 33 0 6 3 -1. - <_> - 35 0 2 3 3. - 0 - 0.0155215598642826 - 0.0178874898701906 - -0.4230296909809113 - <_> - - <_> - - - - <_> - 16 8 10 2 -1. - <_> - 16 8 5 1 2. - <_> - 21 9 5 1 2. - 0 - -6.0149789787828922e-003 - -0.6199331879615784 - 0.0414681211113930 - <_> - - <_> - - - - <_> - 22 0 4 9 -1. - <_> - 22 0 2 9 2. - 0 - -0.0120329596102238 - 0.3752037882804871 - -0.0521019399166107 - <_> - - <_> - - - - <_> - 22 6 1 4 -1. - <_> - 22 6 1 2 2. - 1 - 5.7090952759608626e-004 - -0.2300080060958862 - 0.1380635946989059 - <_> - - <_> - - - - <_> - 23 8 2 2 -1. - <_> - 24 8 1 1 2. - <_> - 23 9 1 1 2. - 0 - -3.5141059925081208e-005 - 0.1361359953880310 - -0.1363361030817032 - <_> - - <_> - - - - <_> - 20 8 2 2 -1. - <_> - 20 8 1 1 2. - <_> - 21 9 1 1 2. - 0 - 3.8827958633191884e-004 - 0.0620439797639847 - -0.4099955856800079 - <_> - - <_> - - - - <_> - 37 4 4 2 -1. - <_> - 39 4 2 1 2. - <_> - 37 5 2 1 2. - 0 - -3.1813879031687975e-003 - 0.4304260909557343 - -0.0585743896663189 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - 0.0123597597703338 - -0.0534252189099789 - 0.4423576891422272 - <_> - - <_> - - - - <_> - 29 1 3 2 -1. - <_> - 29 1 3 1 2. - 1 - 5.3630769252777100e-003 - 0.0483457297086716 - -0.3691985011100769 - <_> - - <_> - - - - <_> - 0 3 10 2 -1. - <_> - 0 3 5 1 2. - <_> - 5 4 5 1 2. - 0 - 6.7529240623116493e-003 - -0.0677888989448547 - 0.4063256084918976 - <_> - - <_> - - - - <_> - 36 0 6 4 -1. - <_> - 38 0 2 4 3. - 0 - -0.0115061802789569 - -0.2494066953659058 - 0.0300437901169062 - <_> - - <_> - - - - <_> - 0 1 1 6 -1. - <_> - 0 4 1 3 2. - 0 - -6.5450267866253853e-003 - -0.5039336085319519 - 0.0510484091937542 - <_> - - <_> - - - - <_> - 36 10 6 1 -1. - <_> - 38 10 2 1 3. - 0 - -6.4059509895741940e-003 - -0.7833560705184937 - 7.0806178264319897e-003 - <_> - - <_> - - - - <_> - 3 10 6 1 -1. - <_> - 5 10 2 1 3. - 0 - -4.7279968857765198e-003 - -0.6846734881401062 - 0.0338671393692493 - <_> - - <_> - - - - <_> - 33 7 2 2 -1. - <_> - 34 7 1 1 2. - <_> - 33 8 1 1 2. - 0 - -5.2285747369751334e-004 - 0.1466076970100403 - -0.0672899633646011 - <_> - - <_> - - - - <_> - 3 0 6 4 -1. - <_> - 5 0 2 4 3. - 0 - -9.3035101890563965e-003 - -0.4098907113075256 - 0.0572993196547031 - <_> - - <_> - - - - <_> - 36 0 6 3 -1. - <_> - 38 0 2 3 3. - 0 - 6.8128891289234161e-003 - 0.0429198816418648 - -0.2473063021898270 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 10 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 4.6791278873570263e-004 - -0.0759941563010216 - 0.3077195882797241 - <_> - - <_> - - - - <_> - 36 0 6 3 -1. - <_> - 38 0 2 3 3. - 0 - 0.0234316699206829 - 0.0105453496798873 - -0.4139497876167297 - <_> - - <_> - - - - <_> - 3 0 6 3 -1. - <_> - 5 0 2 3 3. - 0 - 9.2174801975488663e-003 - 0.0580441802740097 - -0.4003489017486572 - <_> - - <_> - - - - <_> - 33 0 8 2 -1. - <_> - 33 0 4 2 2. - 0 - -7.8371819108724594e-003 - 0.1294589042663574 - -0.0732556134462357 - <_> - - <_> - - - - <_> - 5 6 4 2 -1. - <_> - 5 6 2 1 2. - <_> - 7 7 2 1 2. - 0 - 3.5635009407997131e-003 - -0.0714029222726822 - 0.3470957875251770 - <_> - - <_> - - - - <_> - 31 0 10 2 -1. - <_> - 31 0 5 2 2. - 0 - -5.3719929419457912e-003 - 0.0697310492396355 - -0.0616881698369980 - <_> - - <_> - - - - <_> - 13 0 18 6 -1. - <_> - 13 0 9 3 2. - <_> - 22 3 9 3 2. - 0 - 0.0432901903986931 - 0.0503349713981152 - -0.4551756978034973 - <_> - - <_> - - - - <_> - 26 0 1 2 -1. - <_> - 26 0 1 1 2. - 1 - -4.6179331839084625e-003 - -0.4911034107208252 - 0.0359277799725533 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 15 7 2 1 2. - 1 - -7.0018521510064602e-003 - -0.6063433289527893 - 0.0330439507961273 - <_> - - <_> - - - - <_> - 41 0 4 4 -1. - <_> - 40 1 4 2 2. - 1 - -0.0205463208258152 - 0.3746722042560577 - -0.0609663501381874 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 1 2 4 2. - 1 - 9.0153552591800690e-003 - -0.0813770294189453 - 0.2844707071781158 - <_> - - <_> - - - - <_> - 25 9 11 2 -1. - <_> - 25 10 11 1 2. - 0 - 0.0169452708214521 - 0.0199470799416304 - -0.4222064018249512 - <_> - - <_> - - - - <_> - 9 9 11 2 -1. - <_> - 9 10 11 1 2. - 0 - 8.2118361024186015e-004 - -0.2720527946949005 - 0.0955905392765999 - <_> - - <_> - - - - <_> - 24 1 2 2 -1. - <_> - 25 1 1 1 2. - <_> - 24 2 1 1 2. - 0 - 3.5344670322956517e-005 - -0.0796178579330444 - 0.0741857364773750 - <_> - - <_> - - - - <_> - 0 0 44 6 -1. - <_> - 0 0 22 3 2. - <_> - 22 3 22 3 2. - 0 - -0.0842197909951210 - -0.4857580065727234 - 0.0422429405152798 - <_> - - <_> - - - - <_> - 20 0 8 11 -1. - <_> - 20 0 4 11 2. - 0 - 0.0435173399746418 - -0.1548252999782562 - 0.1075984016060829 - <_> - - <_> - - - - <_> - 17 4 8 7 -1. - <_> - 19 4 4 7 2. - 0 - -8.3383917808532715e-003 - 0.4024209976196289 - -0.0837341472506523 - <_> - - <_> - - - - <_> - 34 7 4 3 -1. - <_> - 34 8 4 1 3. - 0 - -2.6848739944398403e-003 - 0.2577607035636902 - -0.0573123209178448 - <_> - - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 7 8 4 1 3. - 0 - 3.9407201111316681e-003 - -0.0959949418902397 - 0.2492482066154480 - <_> - - <_> - - - - <_> - 29 0 3 7 -1. - <_> - 30 0 1 7 3. - 0 - -6.5882800845429301e-004 - 0.1278585940599442 - -0.1531160026788712 - <_> - - <_> - - - - <_> - 13 0 3 7 -1. - <_> - 14 0 1 7 3. - 0 - -0.0118757104501128 - -0.7070257067680359 - 0.0329137407243252 - <_> - - <_> - - - - <_> - 14 6 18 4 -1. - <_> - 23 6 9 2 2. - <_> - 14 8 9 2 2. - 0 - -0.0239820200949907 - -0.5082150101661682 - 0.0465518310666084 - <_> - - <_> - - - - <_> - 9 9 4 1 -1. - <_> - 10 9 2 1 2. - 0 - -2.0041069947183132e-003 - -0.6869235038757324 - 0.0257601495832205 - <_> - - <_> - - - - <_> - 23 8 6 3 -1. - <_> - 25 8 2 3 3. - 0 - 7.8222304582595825e-003 - -0.0481032282114029 - 0.2143296003341675 - <_> - - <_> - - - - <_> - 18 3 6 5 -1. - <_> - 20 3 2 5 3. - 0 - 0.0109465699642897 - -0.1619561016559601 - 0.1688020974397659 - <_> - - <_> - - - - <_> - 23 0 10 1 -1. - <_> - 23 0 5 1 2. - 1 - 0.0268028602004051 - 0.0562569610774517 - -0.2750540077686310 - <_> - - <_> - - - - <_> - 21 0 2 11 -1. - <_> - 22 0 1 11 2. - 0 - 3.9884559810161591e-003 - -0.1266321986913681 - 0.2162669003009796 - <_> - - <_> - - - - <_> - 22 7 9 3 -1. - <_> - 25 7 3 3 3. - 0 - -0.0180086903274059 - 0.1453437954187393 - -0.0554223097860813 - <_> - - <_> - - - - <_> - 14 7 9 3 -1. - <_> - 17 7 3 3 3. - 0 - 0.0171894803643227 - -0.0676231905817986 - 0.4008189141750336 - <_> - - <_> - - - - <_> - 20 0 6 2 -1. - <_> - 22 0 2 2 3. - 0 - -0.0122314803302288 - -0.8207144141197205 - 0.0212977807968855 - <_> - - <_> - - - - <_> - 19 0 6 2 -1. - <_> - 21 0 2 2 3. - 0 - 0.0158304795622826 - 0.0352074205875397 - -0.6053143143653870 - <_> - - <_> - - - - <_> - 23 0 10 1 -1. - <_> - 23 0 5 1 2. - 1 - -0.0152642698958516 - -0.2745952904224396 - 0.0226070396602154 - <_> - - <_> - - - - <_> - 22 0 1 10 -1. - <_> - 22 0 1 5 2. - 1 - 0.0388083383440971 - 0.0396233908832073 - -0.5866526961326599 - <_> - - <_> - - - - <_> - 22 1 4 1 -1. - <_> - 23 1 2 1 2. - 0 - 1.6585539560765028e-003 - 0.0249276999384165 - -0.1767925024032593 - <_> - - <_> - - - - <_> - 7 0 5 3 -1. - <_> - 7 1 5 1 3. - 0 - -7.0774480700492859e-003 - 0.3953635096549988 - -0.0545681081712246 - <_> - - <_> - - - - <_> - 22 1 4 1 -1. - <_> - 23 1 2 1 2. - 0 - 4.7583471314283088e-005 - -0.0907186493277550 - 0.0676982626318932 - <_> - - <_> - - - - <_> - 18 1 6 1 -1. - <_> - 20 1 2 1 3. - 0 - 4.4619271648116410e-005 - -0.2377043962478638 - 0.0997626781463623 - <_> - - <_> - - - - <_> - 21 0 16 2 -1. - <_> - 29 0 8 1 2. - <_> - 21 1 8 1 2. - 0 - -0.0118510304018855 - 0.3235172927379608 - -0.0395865589380264 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -1.6401939792558551e-003 - -0.2988120913505554 - 0.0734669119119644 - <_> - - <_> - - - - <_> - 33 1 6 3 -1. - <_> - 33 2 6 1 3. - 0 - -6.9199479185044765e-003 - 0.4342077970504761 - -0.1028432995080948 - <_> - - <_> - - - - <_> - 15 1 4 2 -1. - <_> - 16 2 2 2 2. - 1 - -0.0114842597395182 - -0.4997740983963013 - 0.0500394888222218 - -1.4913309812545776 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 13 3 3 4 -1. - <_> - 14 4 1 4 3. - 1 - 5.7978169061243534e-003 - -0.2547836899757385 - 0.3126254081726074 - <_> - - <_> - - - - <_> - 36 0 8 4 -1. - <_> - 36 1 8 2 2. - 0 - 3.4410690423101187e-003 - -0.1442710012197495 - 0.1488212049007416 - <_> - - <_> - - - - <_> - 7 0 18 7 -1. - <_> - 16 0 9 7 2. - 0 - 0.1663805991411209 - -0.2900100052356720 - 0.1731016933917999 - <_> - - <_> - - - - <_> - 38 2 6 1 -1. - <_> - 40 4 2 1 3. - 1 - -7.4716238304972649e-003 - 0.2510580122470856 - -0.2006618976593018 - <_> - - <_> - - - - <_> - 3 5 4 6 -1. - <_> - 3 5 2 3 2. - <_> - 5 8 2 3 2. - 0 - -3.6712910514324903e-003 - 0.2561903893947601 - -0.1986774951219559 - <_> - - <_> - - - - <_> - 24 8 2 1 -1. - <_> - 24 8 1 1 2. - 1 - 1.8908550555352122e-004 - -0.1263161003589630 - 0.1122589036822319 - <_> - - <_> - - - - <_> - 13 10 12 1 -1. - <_> - 16 10 6 1 2. - 0 - -1.9562460947781801e-003 - 0.2264412939548492 - -0.1612952053546906 - <_> - - <_> - - - - <_> - 34 0 10 4 -1. - <_> - 34 1 10 2 2. - 0 - -8.1449178978800774e-003 - 0.2574276030063629 - -0.0721231773495674 - <_> - - <_> - - - - <_> - 1 0 10 4 -1. - <_> - 1 1 10 2 2. - 0 - 6.4932177774608135e-003 - -0.1814396977424622 - 0.2257228046655655 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - 4.5387531281448901e-004 - 0.0236864201724529 - -0.4052864909172058 - <_> - - <_> - - - - <_> - 4 9 1 2 -1. - <_> - 4 10 1 1 2. - 0 - 4.2509411287028342e-005 - -0.2915067076683044 - 0.1111551970243454 - <_> - - <_> - - - - <_> - 33 0 6 3 -1. - <_> - 35 0 2 3 3. - 0 - -0.0157671198248863 - -0.7367169857025147 - 0.0103860199451447 - <_> - - <_> - - - - <_> - 7 0 7 3 -1. - <_> - 6 1 7 1 3. - 1 - -6.9369110278785229e-003 - 0.1606259047985077 - -0.1879907995462418 - <_> - - <_> - - - - <_> - 27 0 12 2 -1. - <_> - 30 0 6 2 2. - 0 - -3.2210960052907467e-003 - 0.1164043024182320 - -0.1825850009918213 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 8 0 2 3 3. - 0 - -0.0121315596625209 - -0.6353238224983215 - 0.0353767983615398 - <_> - - <_> - - - - <_> - 22 9 2 2 -1. - <_> - 23 9 1 1 2. - <_> - 22 10 1 1 2. - 0 - -2.6418970082886517e-004 - -0.2493823021650314 - 0.0558976009488106 - <_> - - <_> - - - - <_> - 3 4 34 2 -1. - <_> - 20 4 17 2 2. - 0 - 0.1173785999417305 - 0.0312053691595793 - -0.7401428818702698 - <_> - - <_> - - - - <_> - 22 5 6 6 -1. - <_> - 25 5 3 3 2. - <_> - 22 8 3 3 2. - 0 - -1.1690290411934257e-003 - 0.0785990729928017 - -0.1728446930646896 - <_> - - <_> - - - - <_> - 12 4 20 4 -1. - <_> - 12 4 10 2 2. - <_> - 22 6 10 2 2. - 0 - 0.0247644707560539 - 0.0510483793914318 - -0.5129843950271606 - <_> - - <_> - - - - <_> - 37 2 2 3 -1. - <_> - 37 3 2 1 3. - 0 - -4.2942222207784653e-003 - 0.3229491114616394 - -0.0915554165840149 - <_> - - <_> - - - - <_> - 5 2 9 3 -1. - <_> - 5 3 9 1 3. - 0 - 0.0123548898845911 - -0.0710467174649239 - 0.3719576895236969 - <_> - - <_> - - - - <_> - 27 0 12 1 -1. - <_> - 30 0 6 1 2. - 0 - -0.0231044609099627 - -0.5968062877655029 - 0.0121953804045916 - <_> - - <_> - - - - <_> - 6 0 12 1 -1. - <_> - 9 0 6 1 2. - 0 - -2.0122020505368710e-003 - 0.1310638934373856 - -0.2008240967988968 - <_> - - <_> - - - - <_> - 30 0 6 3 -1. - <_> - 32 0 2 3 3. - 0 - -0.0121228098869324 - -0.3311020135879517 - 0.0324316583573818 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 10 0 2 4 3. - 0 - -0.0139670297503471 - -0.4793112874031067 - 0.0521073900163174 - <_> - - <_> - - - - <_> - 34 3 3 3 -1. - <_> - 33 4 3 1 3. - 1 - 7.5348587706685066e-003 - -0.0988587886095047 - 0.3616951107978821 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 12 0 2 4 3. - 0 - -0.0168277490884066 - -0.6132341027259827 - 0.0437193810939789 - <_> - - <_> - - - - <_> - 36 9 6 2 -1. - <_> - 38 9 2 2 3. - 0 - 5.4655349813401699e-003 - 0.0292573906481266 - -0.4150238037109375 - <_> - - <_> - - - - <_> - 3 9 6 2 -1. - <_> - 5 9 2 2 3. - 0 - -5.7378439232707024e-003 - -0.4938167035579681 - 0.0447048582136631 - <_> - - <_> - - - - <_> - 34 3 3 3 -1. - <_> - 33 4 3 1 3. - 1 - -9.9511053413152695e-003 - 0.3104512095451355 - -0.0606985986232758 - <_> - - <_> - - - - <_> - 16 10 12 1 -1. - <_> - 19 10 6 1 2. - 0 - 2.8865570202469826e-003 - -0.1900182962417603 - 0.1256804019212723 - <_> - - <_> - - - - <_> - 23 0 1 10 -1. - <_> - 23 0 1 5 2. - 1 - 0.0411295108497143 - 0.0305451005697250 - -0.4200653135776520 - <_> - - <_> - - - - <_> - 1 5 32 4 -1. - <_> - 9 5 16 4 2. - 0 - 0.1693155020475388 - 0.0329228602349758 - -0.7011848092079163 - <_> - - <_> - - - - <_> - 20 1 6 10 -1. - <_> - 20 1 3 10 2. - 0 - 0.0391142293810844 - -0.1238982975482941 - 0.2529956102371216 - <_> - - <_> - - - - <_> - 0 6 44 5 -1. - <_> - 22 6 22 5 2. - 0 - 0.1416721045970917 - -0.1185699999332428 - 0.2671686112880707 - <_> - - <_> - - - - <_> - 33 10 6 1 -1. - <_> - 35 10 2 1 3. - 0 - 2.3257229477167130e-003 - 0.0279077496379614 - -0.3400920033454895 - <_> - - <_> - - - - <_> - 0 3 18 4 -1. - <_> - 6 3 6 4 3. - 0 - -0.0262453891336918 - 0.0982663780450821 - -0.2575640082359314 - <_> - - <_> - - - - <_> - 30 3 4 2 -1. - <_> - 32 3 2 1 2. - <_> - 30 4 2 1 2. - 0 - 1.8283349927514791e-003 - -0.0837034434080124 - 0.2310135066509247 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 3 1 3 2 2. - 1 - 4.7496692277491093e-003 - 0.0613271296024323 - -0.4359326958656311 - <_> - - <_> - - - - <_> - 33 10 6 1 -1. - <_> - 35 10 2 1 3. - 0 - -4.3565989471971989e-003 - -0.4238328039646149 - 9.4382222741842270e-003 - <_> - - <_> - - - - <_> - 6 10 6 1 -1. - <_> - 8 10 2 1 3. - 0 - -3.8147179875522852e-003 - -0.6463773250579834 - 0.0372707992792130 - <_> - - <_> - - - - <_> - 28 5 4 3 -1. - <_> - 29 5 2 3 2. - 0 - -2.1859859116375446e-003 - 0.2848627865314484 - -0.1957722008228302 - <_> - - <_> - - - - <_> - 13 5 4 3 -1. - <_> - 14 5 2 3 2. - 0 - -1.5153910499066114e-003 - 0.1678110063076019 - -0.1371386051177979 - <_> - - <_> - - - - <_> - 25 8 2 2 -1. - <_> - 26 8 1 1 2. - <_> - 25 9 1 1 2. - 0 - -3.2454739994136617e-005 - 0.0736324116587639 - -0.0777876824140549 - <_> - - <_> - - - - <_> - 11 3 3 3 -1. - <_> - 12 4 1 3 3. - 1 - 0.0118858404457569 - -0.0431110896170139 - 0.5236008763313294 - <_> - - <_> - - - - <_> - 28 0 2 3 -1. - <_> - 27 1 2 1 3. - 1 - 4.4173169881105423e-003 - 0.0458498001098633 - -0.3222090899944305 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 5 2 1 3 3. - 1 - 7.3544741608202457e-003 - -0.0769947767257690 - 0.2834421992301941 - <_> - - <_> - - - - <_> - 43 3 2 6 -1. - <_> - 43 5 2 2 3. - 0 - -0.0141299199312925 - -0.3948974907398224 - 0.0417619012296200 - <_> - - <_> - - - - <_> - 0 3 2 6 -1. - <_> - 0 5 2 2 3. - 0 - 6.3752778805792332e-003 - 0.0469008199870586 - -0.4854032993316650 - <_> - - <_> - - - - <_> - 28 6 2 1 -1. - <_> - 28 6 1 1 2. - 1 - 2.3776849266141653e-003 - 0.0173678006976843 - -0.2000454068183899 - <_> - - <_> - - - - <_> - 17 7 9 4 -1. - <_> - 20 7 3 4 3. - 0 - -9.5808254554867744e-003 - 0.3630397021770477 - -0.0628790184855461 - <_> - - <_> - - - - <_> - 24 1 2 2 -1. - <_> - 25 1 1 1 2. - <_> - 24 2 1 1 2. - 0 - 3.8879989006090909e-005 - -0.0812498107552528 - 0.0810688734054565 - <_> - - <_> - - - - <_> - 18 2 6 3 -1. - <_> - 18 2 3 3 2. - 1 - -0.0880179926753044 - 0.4444068968296051 - -0.0485203489661217 - <_> - - <_> - - - - <_> - 38 4 4 2 -1. - <_> - 40 4 2 1 2. - <_> - 38 5 2 1 2. - 0 - 1.4197609852999449e-003 - -0.1058344990015030 - 0.2380737066268921 - <_> - - <_> - - - - <_> - 14 3 16 2 -1. - <_> - 14 3 8 1 2. - <_> - 22 4 8 1 2. - 0 - 8.2073677331209183e-003 - 0.0479943305253983 - -0.4695349931716919 - <_> - - <_> - - - - <_> - 38 4 4 2 -1. - <_> - 40 4 2 1 2. - <_> - 38 5 2 1 2. - 0 - -2.9159379191696644e-003 - 0.3783811032772064 - -0.0608552396297455 - <_> - - <_> - - - - <_> - 12 0 3 9 -1. - <_> - 13 3 1 3 9. - 0 - -0.0122875003144145 - 0.1259481012821198 - -0.1770184040069580 - <_> - - <_> - - - - <_> - 33 0 6 3 -1. - <_> - 33 1 6 1 3. - 0 - -5.6836591102182865e-003 - 0.2334197014570236 - -0.0444960817694664 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 1 1 3 3. - 1 - -0.0139244701713324 - -0.7287849783897400 - 0.0307584293186665 - <_> - - <_> - - - - <_> - 31 2 3 3 -1. - <_> - 32 3 1 3 3. - 1 - 9.9232727661728859e-003 - -0.0393612012267113 - 0.3483887016773224 - <_> - - <_> - - - - <_> - 14 2 3 3 -1. - <_> - 13 3 3 1 3. - 1 - 0.0106927696615458 - -0.0442237891256809 - 0.4271566867828369 - <_> - - <_> - - - - <_> - 23 9 2 2 -1. - <_> - 24 9 1 1 2. - <_> - 23 10 1 1 2. - 0 - 3.7554800655925646e-005 - -0.0644943863153458 - 0.1257233023643494 - <_> - - <_> - - - - <_> - 20 9 2 2 -1. - <_> - 20 9 1 1 2. - <_> - 21 10 1 1 2. - 0 - 2.7551440871320665e-004 - 0.0674459934234619 - -0.3473199903964996 - <_> - - <_> - - - - <_> - 25 8 2 2 -1. - <_> - 26 8 1 1 2. - <_> - 25 9 1 1 2. - 0 - 3.5946661228081211e-005 - -0.0758708491921425 - 0.1249577999114990 - <_> - - <_> - - - - <_> - 18 8 2 2 -1. - <_> - 18 8 1 1 2. - <_> - 19 9 1 1 2. - 0 - -4.1565788706066087e-005 - 0.1432777047157288 - -0.1577503979206085 - <_> - - <_> - - - - <_> - 17 0 12 2 -1. - <_> - 20 0 6 2 2. - 0 - 2.9380898922681808e-003 - -0.2890062928199768 - 0.0645285025238991 - <_> - - <_> - - - - <_> - 8 0 18 11 -1. - <_> - 14 0 6 11 3. - 0 - 0.2338066995143890 - -0.0380702316761017 - 0.6060631275177002 - <_> - - <_> - - - - <_> - 24 1 2 2 -1. - <_> - 25 1 1 1 2. - <_> - 24 2 1 1 2. - 0 - -4.0552138671046123e-005 - 0.1788138002157211 - -0.0939079597592354 - <_> - - <_> - - - - <_> - 19 1 2 2 -1. - <_> - 19 1 1 1 2. - <_> - 20 2 1 1 2. - 0 - 3.6401779652805999e-005 - -0.1723238974809647 - 0.1459642052650452 - <_> - - <_> - - - - <_> - 30 8 6 3 -1. - <_> - 32 8 2 3 3. - 0 - 0.0122575396671891 - 0.0273588206619024 - -0.5944917798042297 - <_> - - <_> - - - - <_> - 19 3 2 2 -1. - <_> - 19 3 1 1 2. - <_> - 20 4 1 1 2. - 0 - 3.4914221032522619e-005 - -0.1409206986427307 - 0.1411006003618240 - <_> - - <_> - - - - <_> - 26 1 10 2 -1. - <_> - 31 1 5 1 2. - <_> - 26 2 5 1 2. - 0 - 5.0704288296401501e-003 - -0.1195909008383751 - 0.3324908912181854 - <_> - - <_> - - - - <_> - 9 8 6 3 -1. - <_> - 11 8 2 3 3. - 0 - -0.0128887603059411 - -0.6895632147789002 - 0.0317549891769886 - <_> - - <_> - - - - <_> - 36 1 5 6 -1. - <_> - 36 3 5 2 3. - 0 - -0.0167079698294401 - 0.0986552089452744 - -0.1093738973140717 - <_> - - <_> - - - - <_> - 4 1 5 6 -1. - <_> - 4 3 5 2 3. - 0 - 0.0111487796530128 - -0.0638019666075706 - 0.3460581004619598 - <_> - - <_> - - - - <_> - 36 9 8 1 -1. - <_> - 36 9 4 1 2. - 0 - -2.7799250092357397e-003 - 0.2098781019449234 - -0.1335940062999725 - <_> - - <_> - - - - <_> - 3 3 6 2 -1. - <_> - 3 3 3 2 2. - 1 - -2.4409759498666972e-004 - 0.0692380964756012 - -0.3170874118804932 - <_> - - <_> - - - - <_> - 39 3 4 8 -1. - <_> - 39 3 2 8 2. - 0 - -0.0297752991318703 - -0.4180003106594086 - 0.0322431214153767 - <_> - - <_> - - - - <_> - 2 3 4 8 -1. - <_> - 4 3 2 8 2. - 0 - -2.9159660916775465e-003 - 0.1394903957843781 - -0.1648450940847397 - <_> - - <_> - - - - <_> - 22 7 2 2 -1. - <_> - 23 7 1 1 2. - <_> - 22 8 1 1 2. - 0 - -3.3617448934819549e-005 - 0.0994415432214737 - -0.0869354978203774 - <_> - - <_> - - - - <_> - 0 5 38 6 -1. - <_> - 0 5 19 3 2. - <_> - 19 8 19 3 2. - 0 - -0.1275593042373657 - -0.5993226170539856 - 0.0344392508268356 - <_> - - <_> - - - - <_> - 43 0 2 4 -1. - <_> - 43 0 1 4 2. - 1 - 0.0119300801306963 - 0.0343060009181499 - -0.5462340712547302 - <_> - - <_> - - - - <_> - 14 6 16 4 -1. - <_> - 14 6 8 2 2. - <_> - 22 8 8 2 2. - 0 - 0.0128053296357393 - 0.0547706894576550 - -0.3324441015720367 - <_> - - <_> - - - - <_> - 43 0 2 4 -1. - <_> - 43 0 1 4 2. - 1 - -0.0110163297504187 - -0.3388048112392426 - 0.0193178597837687 - <_> - - <_> - - - - <_> - 12 4 3 4 -1. - <_> - 13 4 1 4 3. - 0 - -1.5256899641826749e-003 - 0.1910459995269775 - -0.1074023991823196 - -1.4498629570007324 - 17 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_eyepair_small.xml b/data/haarcascades/haarcascade_mcs_eyepair_small.xml deleted file mode 100644 index 73c2f7c..0000000 --- a/data/haarcascades/haarcascade_mcs_eyepair_small.xml +++ /dev/null @@ -1,12586 +0,0 @@ - - - - - - - 22 5 - - <_> - - - <_> - - <_> - - - - <_> - 3 1 15 2 -1. - <_> - 8 1 5 2 3. - 0 - 0.2526662945747376 - -0.7711064219474793 - 0.8083379864692688 - <_> - - <_> - - - - <_> - 17 3 5 2 -1. - <_> - 17 4 5 1 2. - 0 - 5.6097120977938175e-003 - -0.7382487058639526 - 0.3885168135166168 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - 0.1529859006404877 - -0.5524439215660095 - 0.6428967118263245 - <_> - - <_> - - - - <_> - 16 1 3 3 -1. - <_> - 17 2 1 1 9. - 0 - -0.0415615215897560 - 0.4628770947456360 - -0.5341588854789734 - <_> - - <_> - - - - <_> - 1 2 20 2 -1. - <_> - 1 2 10 1 2. - <_> - 11 3 10 1 2. - 0 - 0.4064395129680634 - 0.0170928593724966 - -4.6732509765625000e+003 - <_> - - <_> - - - - <_> - 16 2 5 2 -1. - <_> - 16 3 5 1 2. - 0 - 0.0296334698796272 - -0.4434844851493835 - 0.5070301294326782 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - 1.0285720054525882e-004 - -0.6646639108657837 - 0.3020784854888916 - -1.7232350111007690 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 15 2 -1. - <_> - 8 1 5 2 3. - 0 - 0.3342517912387848 - -0.6565846204757690 - 0.7222465276718140 - <_> - - <_> - - - - <_> - 16 2 5 2 -1. - <_> - 16 3 5 1 2. - 0 - 0.0346819795668125 - -0.6552636027336121 - 0.5463399887084961 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0534898117184639 - 0.4989432096481323 - -0.5077415108680725 - <_> - - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.1027211993932724 - -0.2844530940055847 - 0.4049448966979981 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - 1.4077969535719603e-004 - -0.7902024984359741 - 0.3444094955921173 - <_> - - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.2322703003883362 - -0.1301804929971695 - 0.4313975870609283 - <_> - - <_> - - - - <_> - 8 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.0804133936762810 - -0.4637677967548370 - 0.4882495105266571 - -1.4015640020370483 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 0 12 3 -1. - <_> - 9 0 4 3 3. - 0 - 0.3527685105800629 - -0.6308009028434753 - 0.6519911885261536 - <_> - - <_> - - - - <_> - 16 1 3 4 -1. - <_> - 16 3 3 2 2. - 0 - 0.0732240602374077 - -0.5955833792686462 - 0.4883106946945190 - <_> - - <_> - - - - <_> - 3 0 4 1 -1. - <_> - 4 1 2 1 2. - 1 - -0.0226341206580400 - 0.4198729097843170 - -0.5654544234275818 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - 0.2229817062616348 - -0.3186086118221283 - 0.4877224862575531 - <_> - - <_> - - - - <_> - 0 2 5 2 -1. - <_> - 0 3 5 1 2. - 0 - 0.0183574296534061 - -0.4086276888847351 - 0.3995149135589600 - <_> - - <_> - - - - <_> - 20 3 1 2 -1. - <_> - 20 4 1 1 2. - 0 - 1.2711199815385044e-004 - -0.4723080098628998 - 0.2052184939384460 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - 0.0108341602608562 - 0.1331830024719238 - -0.7791494727134705 - <_> - - <_> - - - - <_> - 17 3 5 2 -1. - <_> - 17 4 5 1 2. - 0 - -7.9301595687866211e-003 - -0.5978981256484985 - 0.0493724681437016 - <_> - - <_> - - - - <_> - 2 1 12 1 -1. - <_> - 8 1 6 1 2. - 0 - 0.2945961058139801 - -9.9943317472934723e-003 - -3.9346069335937500e+003 - <_> - - <_> - - - - <_> - 20 3 1 2 -1. - <_> - 20 4 1 1 2. - 0 - 0.0239798706024885 - 0.0653594881296158 - -0.5048499107360840 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - 1.0285720054525882e-004 - -0.6223191022872925 - 0.1374989002943039 - <_> - - <_> - - - - <_> - 4 2 16 2 -1. - <_> - 8 2 8 2 2. - 0 - 0.1328265964984894 - -0.3416162133216858 - 0.2717226147651672 - <_> - - <_> - - - - <_> - 7 3 8 2 -1. - <_> - 7 3 4 1 2. - <_> - 11 4 4 1 2. - 0 - -0.0373767800629139 - -0.7467133998870850 - 0.1147433966398239 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 7.3414398357272148e-003 - -0.3496235907077789 - 0.1292906999588013 - -1.9015949964523315 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 15 2 -1. - <_> - 8 1 5 2 3. - 0 - 0.3591364920139313 - -0.5852038860321045 - 0.5831562876701355 - <_> - - <_> - - - - <_> - 17 2 1 2 -1. - <_> - 17 2 1 1 2. - 1 - -9.2016262933611870e-003 - 0.2337868064641953 - -0.5213131904602051 - <_> - - <_> - - - - <_> - 5 2 2 1 -1. - <_> - 5 2 1 1 2. - 1 - -0.0154673596844077 - 0.3357514142990112 - -0.5408478975296021 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - 0.1552383005619049 - -0.4648830890655518 - 0.4395757913589478 - <_> - - <_> - - - - <_> - 5 2 1 2 -1. - <_> - 5 2 1 1 2. - 1 - -0.0103788999840617 - 0.2285542041063309 - -0.4747259914875031 - <_> - - <_> - - - - <_> - 20 2 2 2 -1. - <_> - 20 2 1 2 2. - 0 - -7.5254109688103199e-003 - 0.3016864955425263 - -0.2849124968051910 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 1 2 1 2 2. - 0 - -1.2629480625037104e-004 - 0.2231729030609131 - -0.3981136083602905 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 0 - 1.2507449719123542e-004 - -0.3672328889369965 - 0.1385204941034317 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -9.0782120823860168e-003 - -0.6827750802040100 - 0.1098302975296974 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 11 2 5 1 2. - <_> - 6 3 5 1 2. - 0 - -0.0498007684946060 - -0.7118374705314636 - 0.0958777666091919 - <_> - - <_> - - - - <_> - 4 2 1 2 -1. - <_> - 4 2 1 1 2. - 1 - 0.1072968021035194 - -0.0198284294456244 - -2.6988120117187500e+003 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 20 4 2 1 2. - 0 - -2.9545628931373358e-003 - -0.5966340899467468 - 0.1437848955392838 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - 1.2507449719123542e-004 - -0.4219875931739807 - 0.1265437006950378 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 20 4 2 1 2. - 0 - 0.0507127307355404 - 0.0368256606161594 - -0.7281960844993591 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 4 2 1 2. - 0 - 1.4936710067559034e-004 - -0.5385984778404236 - 0.1298418939113617 - <_> - - <_> - - - - <_> - 2 1 20 4 -1. - <_> - 12 1 10 2 2. - <_> - 2 3 10 2 2. - 0 - 0.2437365055084229 - 0.0569615103304386 - -0.7102329134941101 - <_> - - <_> - - - - <_> - 1 0 5 4 -1. - <_> - 1 1 5 2 2. - 0 - -0.0600150190293789 - 0.2469456046819687 - -0.2502039074897766 - <_> - - <_> - - - - <_> - 10 4 12 1 -1. - <_> - 10 4 6 1 2. - 0 - 0.0874126628041267 - 0.0585523098707199 - -0.2872526943683624 - <_> - - <_> - - - - <_> - 0 4 12 1 -1. - <_> - 6 4 6 1 2. - 0 - -0.0909190475940704 - -0.6881564855575562 - 0.0880744829773903 - <_> - - <_> - - - - <_> - 10 2 6 3 -1. - <_> - 12 2 2 3 3. - 0 - 0.1481955051422119 - -0.0833467096090317 - 0.5128626227378845 - <_> - - <_> - - - - <_> - 8 2 6 3 -1. - <_> - 10 2 2 3 3. - 0 - 0.2177619934082031 - -0.1130203977227211 - 0.4898183941841126 - -1.8471280336380005 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 1 16 2 -1. - <_> - 6 1 8 2 2. - 0 - 0.2408764064311981 - -0.5451133251190186 - 0.4999712109565735 - <_> - - <_> - - - - <_> - 13 1 5 4 -1. - <_> - 13 3 5 2 2. - 0 - 0.0914550274610519 - -0.5453007221221924 - 0.3651191890239716 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - 0.0629608929157257 - -0.4504084885120392 - 0.3127841949462891 - <_> - - <_> - - - - <_> - 16 1 3 3 -1. - <_> - 17 2 1 1 9. - 0 - -0.0448659397661686 - 0.3819159865379334 - -0.4031482040882111 - <_> - - <_> - - - - <_> - 5 2 1 2 -1. - <_> - 5 2 1 1 2. - 1 - -0.0137748196721077 - 0.2556776106357575 - -0.5279502272605896 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 0.0309309698641300 - -0.3218415975570679 - 0.3261575996875763 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 4 2 1 2. - 0 - 2.8891479596495628e-003 - -0.5894880890846252 - 0.1343344002962112 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - 8.0474298447370529e-003 - 0.1313284933567047 - -0.6860215067863464 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - 9.5555791631340981e-003 - 0.0981872826814651 - -0.6792752742767334 - <_> - - <_> - - - - <_> - 13 0 6 1 -1. - <_> - 15 0 2 1 3. - 0 - -3.1676879152655602e-003 - 0.1139028966426849 - -0.2320346981287003 - <_> - - <_> - - - - <_> - 4 0 5 2 -1. - <_> - 4 1 5 1 2. - 0 - -0.0164961200207472 - 0.2569769024848938 - -0.2660340964794159 - <_> - - <_> - - - - <_> - 13 0 6 1 -1. - <_> - 15 0 2 1 3. - 0 - -0.0964340418577194 - -0.6803668737411499 - 0.0261034406721592 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 5 0 2 1 3. - 0 - -0.0101298801600933 - 0.2653768062591553 - -0.2865482866764069 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - 3.5491649759933352e-004 - -0.4500123858451843 - 0.1557054072618485 - <_> - - <_> - - - - <_> - 3 2 3 1 -1. - <_> - 4 2 1 1 3. - 0 - -0.0108793601393700 - 0.2852602899074554 - -0.2204159051179886 - <_> - - <_> - - - - <_> - 18 4 3 1 -1. - <_> - 19 4 1 1 3. - 0 - -0.0133209601044655 - -0.6286336183547974 - 0.0756023898720741 - <_> - - <_> - - - - <_> - 1 4 3 1 -1. - <_> - 2 4 1 1 3. - 0 - 9.1701131314039230e-003 - 0.1067252978682518 - -0.5646225214004517 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 9 0 2 5 2. - 0 - -0.1756207942962647 - 0.6023464798927307 - -0.1105926036834717 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 6 2 5 1 2. - <_> - 11 3 5 1 2. - 0 - 0.0341055616736412 - 0.1336347013711929 - -0.4956767857074738 - <_> - - <_> - - - - <_> - 8 2 8 2 -1. - <_> - 12 2 4 1 2. - <_> - 8 3 4 1 2. - 0 - -0.0643843710422516 - -0.5880644917488098 - 0.0320239402353764 - <_> - - <_> - - - - <_> - 6 2 8 2 -1. - <_> - 6 2 4 1 2. - <_> - 10 3 4 1 2. - 0 - -0.0460324808955193 - -0.6143289804458618 - 0.0994031131267548 - <_> - - <_> - - - - <_> - 16 1 5 3 -1. - <_> - 16 2 5 1 3. - 0 - -0.0384022481739521 - 0.1604094058275223 - -0.1873051971197128 - <_> - - <_> - - - - <_> - 0 1 21 3 -1. - <_> - 7 2 7 1 9. - 0 - -0.4709807038307190 - -0.8141909837722778 - 0.0628029108047485 - -1.7498610019683838 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 10 2 2 2 3. - 0 - 0.4078958034515381 - -2.1667710097972304e-004 - 4.0943940429687500e+003 - <_> - - <_> - - - - <_> - 5 0 12 3 -1. - <_> - 8 0 6 3 2. - 0 - 0.2218903005123138 - -0.5719025731086731 - 0.3176411092281342 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0679081231355667 - 0.4214872121810913 - -0.4698249995708466 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - 8.1082796677947044e-003 - 0.1225956007838249 - -0.4136815965175629 - <_> - - <_> - - - - <_> - 9 1 2 3 -1. - <_> - 10 1 1 3 2. - 0 - 0.0175196807831526 - -0.3862532973289490 - 0.3089705109596252 - <_> - - <_> - - - - <_> - 17 1 5 4 -1. - <_> - 17 3 5 2 2. - 0 - 0.0811933875083923 - -0.6375020742416382 - 0.3839319050312042 - <_> - - <_> - - - - <_> - 2 2 16 2 -1. - <_> - 6 2 8 2 2. - 0 - 0.1475138068199158 - -0.4631600081920624 - 0.2451909929513931 - <_> - - <_> - - - - <_> - 20 2 2 1 -1. - <_> - 20 2 1 1 2. - 0 - -4.6391459181904793e-003 - 0.2801133990287781 - -0.3114584088325501 - <_> - - <_> - - - - <_> - 0 2 2 1 -1. - <_> - 1 2 1 1 2. - 0 - -2.5532179279252887e-004 - 0.2138828039169312 - -0.4466992020606995 - <_> - - <_> - - - - <_> - 17 1 5 4 -1. - <_> - 17 3 5 2 2. - 0 - 0.3518253862857819 - 0.0239298101514578 - -0.8244767785072327 - <_> - - <_> - - - - <_> - 0 1 5 4 -1. - <_> - 0 3 5 2 2. - 0 - 0.0724168568849564 - -0.3899424076080322 - 0.1848614960908890 - <_> - - <_> - - - - <_> - 12 0 4 1 -1. - <_> - 13 1 2 1 2. - 1 - -0.0123144201934338 - 0.1169440001249313 - -0.1624529063701630 - <_> - - <_> - - - - <_> - 7 3 8 2 -1. - <_> - 7 3 4 1 2. - <_> - 11 4 4 1 2. - 0 - 0.0420644916594028 - 0.1099952012300491 - -0.7158398032188416 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 11 0 6 2 2. - <_> - 5 2 6 2 2. - 0 - 0.1470896005630493 - 0.0647203177213669 - -0.7278063297271729 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -8.5739437490701675e-003 - -0.6512069702148438 - 0.0646309629082680 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 20 4 2 1 2. - 0 - 2.4884249432943761e-004 - -0.3854041993618012 - 0.1037364006042481 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - 3.0264389351941645e-004 - -0.3517409861087799 - 0.1335210949182510 - <_> - - <_> - - - - <_> - 15 0 4 3 -1. - <_> - 15 1 4 1 3. - 0 - -0.0396366305649281 - 0.3242065906524658 - -0.1959009021520615 - <_> - - <_> - - - - <_> - 10 0 2 5 -1. - <_> - 11 0 1 5 2. - 0 - 0.0399224609136581 - -0.1189560964703560 - 0.4463477134704590 - <_> - - <_> - - - - <_> - 9 1 6 4 -1. - <_> - 11 1 2 4 3. - 0 - -0.1424928009510040 - 0.5641438961029053 - -0.0645077601075172 - <_> - - <_> - - - - <_> - 6 1 9 4 -1. - <_> - 9 1 3 4 3. - 0 - 0.3615724146366119 - -0.1685543954372406 - 0.3474895954132080 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 20 4 2 1 2. - 0 - 0.0400573015213013 - 0.0593593604862690 - -0.5140206813812256 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 4 2 1 2. - 0 - 3.2065549748949707e-004 - -0.5201929211616516 - 0.1044785976409912 - <_> - - <_> - - - - <_> - 2 3 20 2 -1. - <_> - 12 3 10 1 2. - <_> - 2 4 10 1 2. - 0 - 0.0759185999631882 - 0.0590211711823940 - -0.6039643287658691 - <_> - - <_> - - - - <_> - 4 0 2 1 -1. - <_> - 4 0 1 1 2. - 1 - 8.8088903576135635e-003 - -0.3051787912845612 - 0.1959865987300873 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - -0.0115059996023774 - -0.6903548240661621 - 0.0959663167595863 - -1.6923429965972900 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 5 4 -1. - <_> - 3 3 5 2 2. - 0 - 0.0899427011609077 - -0.5580319166183472 - 0.3151051104068756 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 1 2 3 3. - 0 - 0.1411668062210083 - -0.3545598089694977 - 0.3423449099063873 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0490742996335030 - 0.2842924892902374 - -0.4762968122959137 - <_> - - <_> - - - - <_> - 2 1 18 4 -1. - <_> - 11 1 9 2 2. - <_> - 2 3 9 2 2. - 0 - 0.0889812335371971 - 0.2126241028308868 - -0.5920116901397705 - <_> - - <_> - - - - <_> - 2 1 18 2 -1. - <_> - 8 1 6 2 3. - 0 - 0.4573613107204437 - -0.3411006033420563 - 0.3183233141899109 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -2.0847789710387588e-004 - 0.0920471474528313 - -0.1928243935108185 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - -2.5638268562033772e-004 - 0.1802701950073242 - -0.5007755756378174 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -0.0436275489628315 - -0.7093405723571777 - 0.0261410400271416 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -1.2148039968451485e-004 - 0.1780470013618469 - -0.3874286115169525 - <_> - - <_> - - - - <_> - 16 4 2 1 -1. - <_> - 16 4 1 1 2. - 0 - 6.6614202223718166e-003 - 0.0952365696430206 - -0.6419975161552429 - <_> - - <_> - - - - <_> - 4 4 2 1 -1. - <_> - 5 4 1 1 2. - 0 - 0.0101335803046823 - 0.0453622788190842 - -0.7391591072082520 - <_> - - <_> - - - - <_> - 16 2 3 3 -1. - <_> - 17 2 1 3 3. - 0 - -7.4527491815388203e-003 - 0.3466396927833557 - -0.4109731018543243 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 5 0 6 2 2. - <_> - 11 2 6 2 2. - 0 - 0.1865476965904236 - 0.0465162917971611 - -0.7623959183692932 - <_> - - <_> - - - - <_> - 6 1 16 4 -1. - <_> - 10 1 8 4 2. - 0 - 0.3488784134387970 - 0.0447669401764870 - -0.3729743957519531 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - 9.0129990130662918e-003 - 0.0924227014183998 - -0.5618343949317932 - <_> - - <_> - - - - <_> - 15 0 5 3 -1. - <_> - 15 1 5 1 3. - 0 - -0.0786369368433952 - 0.4578678905963898 - -0.1665771007537842 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - 0.1211623996496201 - -0.0831817314028740 - 0.5231279730796814 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 1.8915069522336125e-003 - -0.4330990016460419 - 0.1231160014867783 - <_> - - <_> - - - - <_> - 6 0 9 1 -1. - <_> - 9 0 3 1 3. - 0 - 0.0347660891711712 - -0.3878085017204285 - 0.1319140046834946 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - 0.0523517988622189 - -0.0746845230460167 - 0.4756622910499573 - <_> - - <_> - - - - <_> - 7 0 1 4 -1. - <_> - 6 1 1 2 2. - 1 - -0.0303400792181492 - 0.1988417953252792 - -0.2310146987438202 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - 6.8641840480268002e-003 - -0.0894825384020805 - 0.2937439978122711 - <_> - - <_> - - - - <_> - 0 4 12 1 -1. - <_> - 6 4 6 1 2. - 0 - -0.0714182108640671 - -0.5831571817398071 - 0.0824320167303085 - <_> - - <_> - - - - <_> - 3 3 16 2 -1. - <_> - 11 3 8 1 2. - <_> - 3 4 8 1 2. - 0 - -0.0846038311719894 - -0.7170382738113403 - 0.0465656407177448 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 3 1 4 1 3. - 0 - -0.0594934485852718 - 0.3473120033740997 - -0.1196561008691788 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - 0.1099494025111198 - -7.9890703782439232e-003 - 0.3411171138286591 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - 0.0491113886237144 - -0.1024158969521523 - 0.4681828022003174 - <_> - - <_> - - - - <_> - 7 2 9 3 -1. - <_> - 10 2 3 3 3. - 0 - 0.3636780977249146 - -0.0831590816378593 - 0.3714585900306702 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 11 0 2 5 2. - 0 - -0.1586533933877945 - 0.5047429800033569 - -0.0834626629948616 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 12 3 2 1 2. - <_> - 10 4 2 1 2. - 0 - -0.0251513607800007 - -0.4532653093338013 - 0.0780590176582336 - -1.6187490224838257 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 1 16 2 -1. - <_> - 6 1 8 2 2. - 0 - 0.1649594008922577 - -0.6332700848579407 - 0.2166659981012344 - <_> - - <_> - - - - <_> - 13 0 5 4 -1. - <_> - 13 1 5 2 2. - 0 - -0.0438757613301277 - 0.3239826858043671 - -0.5365409255027771 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - 9.6001587808132172e-003 - -0.5327348709106445 - 0.1838084012269974 - <_> - - <_> - - - - <_> - 10 0 6 5 -1. - <_> - 10 0 3 5 2. - 0 - 0.0787055194377899 - -0.3804650902748108 - 0.0857776030898094 - <_> - - <_> - - - - <_> - 3 2 3 1 -1. - <_> - 4 2 1 1 3. - 0 - -9.9123762920498848e-003 - 0.3097468018531799 - -0.3024269938468933 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 10 0 3 4 2. - 0 - 0.2142370939254761 - -0.1307654976844788 - 0.1546590030193329 - <_> - - <_> - - - - <_> - 4 2 12 1 -1. - <_> - 10 2 6 1 2. - 0 - 0.0385532900691032 - -0.4112997949123383 - 0.2216213941574097 - <_> - - <_> - - - - <_> - 21 2 1 2 -1. - <_> - 21 3 1 1 2. - 0 - 2.4947660858742893e-004 - -0.3958852887153626 - 0.1867167949676514 - <_> - - <_> - - - - <_> - 4 0 2 1 -1. - <_> - 5 0 1 1 2. - 0 - -2.3194089590106159e-004 - 0.2296389937400818 - -0.2885102033615112 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 0.0102821402251720 - 0.0711410716176033 - -0.7497838139533997 - <_> - - <_> - - - - <_> - 0 2 5 2 -1. - <_> - 0 3 5 1 2. - 0 - 0.0198998004198074 - -0.3733910024166107 - 0.1427987068891525 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 11 3 11 1 2. - <_> - 0 4 11 1 2. - 0 - 0.0910358279943466 - 0.0707562267780304 - -0.6638950705528259 - <_> - - <_> - - - - <_> - 9 1 3 4 -1. - <_> - 10 1 1 4 3. - 0 - 0.0393848381936550 - -0.2262676954269409 - 0.2464784979820252 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 0.0109996302053332 - -0.2625407874584198 - 0.1163086965680122 - <_> - - <_> - - - - <_> - 6 0 10 2 -1. - <_> - 6 0 5 1 2. - <_> - 11 1 5 1 2. - 0 - -0.0518086813390255 - -0.5961403250694275 - 0.0859828814864159 - <_> - - <_> - - - - <_> - 16 0 5 3 -1. - <_> - 16 1 5 1 3. - 0 - -0.0737882182002068 - 0.2593846023082733 - -0.1041978970170021 - <_> - - <_> - - - - <_> - 1 0 5 3 -1. - <_> - 1 1 5 1 3. - 0 - 0.0469907410442829 - -0.1350554972887039 - 0.4308831989765167 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - -9.7187450155615807e-003 - -0.6842281222343445 - 0.1098759025335312 - <_> - - <_> - - - - <_> - 0 2 2 3 -1. - <_> - 1 2 1 3 2. - 0 - -3.5397530882619321e-004 - 0.1443437933921814 - -0.3249225914478302 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 0.0142436400055885 - 0.0255800206214190 - -0.7005106210708618 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - -0.1305900961160660 - 0.4823197126388550 - -0.0978557989001274 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - -0.0177217200398445 - -0.7623056173324585 - 0.0316688083112240 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -9.2830806970596313e-003 - -0.5619375705718994 - 0.0765757337212563 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 0 - 2.4865049635991454e-004 - -0.4124997854232788 - 0.1330009996891022 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - -0.0147960502654314 - -0.6981794238090515 - 0.0525363907217979 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 0.1445972025394440 - 8.0330166965723038e-003 - -0.8675752878189087 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 0.0157956108450890 - -0.2927311062812805 - 0.1363624930381775 - <_> - - <_> - - - - <_> - 14 2 3 1 -1. - <_> - 15 2 1 1 3. - 0 - 0.0131048103794456 - -0.2231092005968094 - 0.5772743821144104 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 11 0 3 5 2. - 0 - 0.2230173945426941 - -0.0933012813329697 - 0.4945294857025147 - <_> - - <_> - - - - <_> - 16 4 6 1 -1. - <_> - 18 4 2 1 3. - 0 - -0.0496648699045181 - -0.5187855958938599 - 0.0345804914832115 - <_> - - <_> - - - - <_> - 0 4 6 1 -1. - <_> - 2 4 2 1 3. - 0 - -0.0459476113319397 - -0.6596763730049133 - 0.0588447116315365 - <_> - - <_> - - - - <_> - 18 0 4 2 -1. - <_> - 20 0 2 1 2. - <_> - 18 1 2 1 2. - 0 - -0.0104044098407030 - 0.2622630894184113 - -0.1861764937639237 - <_> - - <_> - - - - <_> - 8 4 6 1 -1. - <_> - 10 4 2 1 3. - 0 - 0.0291253700852394 - -0.1883364021778107 - 0.2108985930681229 - -1.6774560213088989 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 1 1 1 3. - 1 - -0.0276011899113655 - 0.2859902083873749 - -0.4109694063663483 - <_> - - <_> - - - - <_> - 6 2 14 1 -1. - <_> - 6 2 7 1 2. - 0 - 0.0378576517105103 - -0.4589497148990631 - 0.1315708011388779 - <_> - - <_> - - - - <_> - 2 2 14 1 -1. - <_> - 9 2 7 1 2. - 0 - 0.0878514498472214 - -0.4639217853546143 - 0.2676733136177063 - <_> - - <_> - - - - <_> - 20 2 2 1 -1. - <_> - 20 2 1 1 2. - 0 - -6.6995318047702312e-003 - 0.3444162905216217 - -0.3575634062290192 - <_> - - <_> - - - - <_> - 3 1 2 2 -1. - <_> - 3 1 1 1 2. - <_> - 4 2 1 1 2. - 0 - -2.1192200074438006e-004 - 0.2853515148162842 - -0.2509905099868774 - <_> - - <_> - - - - <_> - 13 1 5 4 -1. - <_> - 13 3 5 2 2. - 0 - 0.0733317583799362 - -0.5104925036430359 - 0.2084199935197830 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.0705135166645050 - -0.2943550050258637 - 0.2490831017494202 - <_> - - <_> - - - - <_> - 20 3 1 2 -1. - <_> - 20 4 1 1 2. - 0 - 2.4877820396795869e-004 - -0.4530136883258820 - 0.1106069982051849 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -3.4712569322437048e-003 - 0.2818650007247925 - -0.2202538996934891 - <_> - - <_> - - - - <_> - 13 0 2 1 -1. - <_> - 13 0 1 1 2. - 0 - 2.4717900669202209e-004 - -0.2456589937210083 - 0.0864437595009804 - <_> - - <_> - - - - <_> - 8 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 1.2986420188099146e-004 - -0.3502730131149292 - 0.1467843949794769 - <_> - - <_> - - - - <_> - 19 3 3 2 -1. - <_> - 19 4 3 1 2. - 0 - 0.0690452903509140 - 0.0304644200950861 - -0.6050962805747986 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - 2.7935361140407622e-004 - -0.6039000153541565 - 0.0861184969544411 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 11 0 6 2 2. - <_> - 5 2 6 2 2. - 0 - -0.1428222954273224 - -0.5724645256996155 - 0.0726439207792282 - <_> - - <_> - - - - <_> - 4 0 5 4 -1. - <_> - 4 1 5 2 2. - 0 - -0.0361952185630798 - 0.1450850069522858 - -0.2987934052944183 - <_> - - <_> - - - - <_> - 16 0 3 3 -1. - <_> - 16 1 3 1 3. - 0 - -0.0306622795760632 - 0.2218796014785767 - -0.1656057983636856 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 3 1 3 1 3. - 0 - 0.0419924110174179 - -0.1077400967478752 - 0.4818230867385864 - <_> - - <_> - - - - <_> - 7 2 10 2 -1. - <_> - 12 2 5 1 2. - <_> - 7 3 5 1 2. - 0 - -0.0799415111541748 - -0.4717141985893250 - 0.0374956503510475 - <_> - - <_> - - - - <_> - 5 2 10 2 -1. - <_> - 5 2 5 1 2. - <_> - 10 3 5 1 2. - 0 - -0.0640278682112694 - -0.6457813978195190 - 0.0705836564302444 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - -2.1864910377189517e-004 - 0.1457661986351013 - -0.2679316103458405 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -0.0141139999032021 - -0.7731025218963623 - 0.0430315397679806 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - -0.0275833904743195 - -0.4605224132537842 - 0.0125418798997998 - <_> - - <_> - - - - <_> - 4 1 5 4 -1. - <_> - 4 3 5 2 2. - 0 - 0.3208009004592896 - 0.0386559292674065 - -0.8062068819999695 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - 0.0358313098549843 - -0.0662941709160805 - 0.3263883888721466 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - -0.0798180103302002 - 0.4167965948581696 - -0.0912656933069229 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -2.6545161381363869e-004 - 0.1101180985569954 - -0.1570180058479309 - <_> - - <_> - - - - <_> - 4 0 4 1 -1. - <_> - 5 0 2 1 2. - 0 - -2.4198470055125654e-004 - 0.1352030038833618 - -0.2412625998258591 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 6.9970320910215378e-003 - 0.0612093694508076 - -0.4995999932289124 - <_> - - <_> - - - - <_> - 0 1 18 1 -1. - <_> - 9 1 9 1 2. - 0 - 0.1872068941593170 - 0.0565490201115608 - -0.5114173293113709 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - 0.0253924299031496 - 0.0129433795809746 - -0.5729435086250305 - <_> - - <_> - - - - <_> - 5 2 3 1 -1. - <_> - 6 2 1 1 3. - 0 - 0.0195981692522764 - -0.0810285732150078 - 0.4177010953426361 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - -0.0305633507668972 - -0.7735412716865540 - 0.0178344994783401 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - -0.0175109803676605 - -0.5898250937461853 - 0.0511760301887989 - <_> - - <_> - - - - <_> - 19 2 2 2 -1. - <_> - 20 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - 8.0173909664154053e-003 - -0.0888880565762520 - 0.2514989078044891 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - 0.0300783291459084 - -0.0514235198497772 - 0.6026620864868164 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - 0.0126525200903416 - 0.0528747402131557 - -0.6824123263359070 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - 1.2671189324464649e-004 - -0.3352496922016144 - 0.0812006071209908 - <_> - - <_> - - - - <_> - 10 1 6 3 -1. - <_> - 12 1 2 3 3. - 0 - 0.1868032962083817 - -0.0543627701699734 - 0.5235478281974793 - <_> - - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 8 1 2 3 3. - 0 - 0.1757044047117233 - -0.0570032894611359 - 0.6137328147888184 - <_> - - <_> - - - - <_> - 1 1 21 3 -1. - <_> - 8 2 7 1 9. - 0 - 1.0384310483932495 - 0.0551427192986012 - -0.6189894080162048 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 9 0 3 1 2. - 1 - -3.6805290728807449e-003 - -0.3422321081161499 - 0.0896903723478317 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - -0.0155965797603130 - -0.6740226745605469 - 0.0233169402927160 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 7.3065250180661678e-003 - -0.3375357985496521 - 0.0814909264445305 - -1.5980160236358643 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 10 2 -1. - <_> - 8 1 5 2 2. - 0 - 0.1805859059095383 - -0.5300660729408264 - 0.3023838102817535 - <_> - - <_> - - - - <_> - 16 2 3 3 -1. - <_> - 17 2 1 3 3. - 0 - -0.0141021898016334 - 0.3699227869510651 - -0.3241744935512543 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 2 1 3 3. - 0 - -0.0108758499845862 - 0.2569321095943451 - -0.3242481946945190 - <_> - - <_> - - - - <_> - 11 1 2 3 -1. - <_> - 11 1 1 3 2. - 0 - 0.0194290298968554 - -0.2157842963933945 - 0.2595477998256683 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -3.3504539169371128e-004 - 0.1525973975658417 - -0.4900175929069519 - <_> - - <_> - - - - <_> - 1 2 20 1 -1. - <_> - 6 2 10 1 2. - 0 - 0.1486748009920120 - -0.2519808113574982 - 0.2343989014625549 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 8 1 2 4 2. - 0 - -0.0196727998554707 - 0.2408549040555954 - -0.2088024020195007 - <_> - - <_> - - - - <_> - 13 0 2 1 -1. - <_> - 13 0 1 1 2. - 0 - 2.9412939329631627e-004 - -0.2093092948198319 - 0.0832172483205795 - <_> - - <_> - - - - <_> - 0 1 5 3 -1. - <_> - 0 2 5 1 3. - 0 - -0.0493621714413166 - 0.1794568002223969 - -0.2633988857269287 - <_> - - <_> - - - - <_> - 13 0 2 1 -1. - <_> - 13 0 1 1 2. - 0 - 0.0261217802762985 - 0.0257237199693918 - -0.7157145142555237 - <_> - - <_> - - - - <_> - 7 0 2 1 -1. - <_> - 8 0 1 1 2. - 0 - 2.5359389837831259e-004 - -0.3620828092098236 - 0.1422941982746124 - <_> - - <_> - - - - <_> - 2 1 20 4 -1. - <_> - 12 1 10 2 2. - <_> - 2 3 10 2 2. - 0 - 0.0235242508351803 - 0.1308255940675736 - -0.3133119940757752 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - 2.8964199009351432e-004 - -0.2955313920974731 - 0.1612772941589356 - <_> - - <_> - - - - <_> - 21 3 1 2 -1. - <_> - 21 4 1 1 2. - 0 - -5.6771971285343170e-003 - -0.5337281823158264 - 0.0379088483750820 - <_> - - <_> - - - - <_> - 0 3 1 2 -1. - <_> - 0 4 1 1 2. - 0 - 2.7393171330913901e-004 - -0.3874318897724152 - 0.1068056002259255 - <_> - - <_> - - - - <_> - 15 0 5 3 -1. - <_> - 15 1 5 1 3. - 0 - -0.0495587587356567 - 0.2524808943271637 - -0.1970293968915939 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -0.0312841311097145 - -0.5490162968635559 - 0.0832718536257744 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - 0.0513014905154705 - 0.0564396493136883 - -0.3952826857566834 - <_> - - <_> - - - - <_> - 5 3 10 2 -1. - <_> - 5 3 5 1 2. - <_> - 10 4 5 1 2. - 0 - -0.0658741071820259 - -0.6600760817527771 - 0.0510393418371677 - <_> - - <_> - - - - <_> - 15 0 1 2 -1. - <_> - 15 0 1 1 2. - 1 - -0.0428369902074337 - -0.4695188999176025 - 0.0248056892305613 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 6 0 2 2 2. - 0 - -0.0398169495165348 - -0.5390306711196899 - 0.0625655874609947 - <_> - - <_> - - - - <_> - 1 0 21 3 -1. - <_> - 8 1 7 1 9. - 0 - 0.9633435010910034 - 0.0700931474566460 - -0.5051229000091553 - <_> - - <_> - - - - <_> - 1 3 6 2 -1. - <_> - 3 3 2 2 3. - 0 - -0.0903004035353661 - -0.6060277223587036 - 0.0478441901504993 - <_> - - <_> - - - - <_> - 6 2 16 1 -1. - <_> - 10 2 8 1 2. - 0 - 0.1164717003703117 - 0.0378020592033863 - -0.4255815148353577 - <_> - - <_> - - - - <_> - 0 2 16 1 -1. - <_> - 4 2 8 1 2. - 0 - 0.1410460025072098 - 0.0533077791333199 - -0.6477444171905518 - <_> - - <_> - - - - <_> - 2 1 18 3 -1. - <_> - 8 2 6 1 9. - 0 - -0.2245392948389053 - -0.7423505783081055 - 0.0394205302000046 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - 0.0122074596583843 - 0.0411594882607460 - -0.6247044801712036 - <_> - - <_> - - - - <_> - 6 0 10 4 -1. - <_> - 11 0 5 2 2. - <_> - 6 2 5 2 2. - 0 - -0.1298917979001999 - -0.5020244121551514 - 0.0506085492670536 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 5 0 6 2 2. - <_> - 11 2 6 2 2. - 0 - -0.1336773037910461 - -0.5980725884437561 - 0.0515021793544292 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -2.7120931190438569e-004 - 0.0942272767424583 - -0.1869352012872696 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - -0.1016910001635552 - 0.3284361064434052 - -0.0879324078559875 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 9 0 2 5 2. - 0 - -0.1026913970708847 - 0.3691394925117493 - -0.0939211919903755 - <_> - - <_> - - - - <_> - 0 2 3 1 -1. - <_> - 1 2 1 1 3. - 0 - -0.0103968000039458 - 0.2735032141208649 - -0.1099518015980721 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -0.0216865707188845 - -0.5431079864501953 - 0.0354094617068768 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -0.0109911598265171 - 0.3313341140747070 - -0.0947989076375961 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - 0.0330941900610924 - -0.0676039010286331 - 0.3759680092334747 - <_> - - <_> - - - - <_> - 5 0 3 1 -1. - <_> - 6 0 1 1 3. - 0 - 0.0112865697592497 - 0.0597827509045601 - -0.5113244056701660 - <_> - - <_> - - - - <_> - 15 0 1 2 -1. - <_> - 15 0 1 1 2. - 1 - -0.0276136603206396 - -0.1408299952745438 - 0.0276922807097435 - <_> - - <_> - - - - <_> - 7 0 2 1 -1. - <_> - 7 0 1 1 2. - 1 - -0.0249390397220850 - -0.3940435945987701 - 0.0746763870120049 - <_> - - <_> - - - - <_> - 8 3 6 2 -1. - <_> - 11 3 3 1 2. - <_> - 8 4 3 1 2. - 0 - -0.0205240696668625 - -0.3604283034801483 - 0.0740412473678589 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -7.4007459916174412e-003 - 0.2836787998676300 - -0.1014788970351219 - <_> - - <_> - - - - <_> - 4 2 18 3 -1. - <_> - 10 3 6 1 9. - 0 - 0.6708089709281921 - 0.0458825901150703 - -0.3361695110797882 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -0.0396798886358738 - -0.5256633162498474 - 0.0545992814004421 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - -0.0873271971940994 - 0.1675004065036774 - -0.0436225607991219 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - 0.0646117925643921 - -0.0736591815948486 - 0.3831464052200317 - <_> - - <_> - - - - <_> - 10 0 12 5 -1. - <_> - 13 0 6 5 2. - 0 - -0.2210538983345032 - 0.1044782996177673 - -0.1711664050817490 - <_> - - <_> - - - - <_> - 3 1 5 4 -1. - <_> - 3 3 5 2 2. - 0 - 0.0539337508380413 - -0.2961969971656799 - 0.0962876006960869 - <_> - - <_> - - - - <_> - 4 2 18 2 -1. - <_> - 13 2 9 1 2. - <_> - 4 3 9 1 2. - 0 - -0.0275479797273874 - 0.1263362020254135 - -0.1437083035707474 - <_> - - <_> - - - - <_> - 1 4 10 1 -1. - <_> - 6 4 5 1 2. - 0 - -0.0796272605657578 - -0.6720743179321289 - 0.0428085103631020 - -1.5710469484329224 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 1 18 2 -1. - <_> - 8 1 6 2 3. - 0 - 0.3998445868492127 - -0.4929730892181397 - 0.2782056927680969 - <_> - - <_> - - - - <_> - 16 2 3 2 -1. - <_> - 17 2 1 2 3. - 0 - -0.0119401095435023 - 0.2959083914756775 - -0.2993519008159638 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - 8.0412777606397867e-004 - -0.5137457251548767 - 0.1482059955596924 - <_> - - <_> - - - - <_> - 16 1 3 3 -1. - <_> - 17 2 1 1 9. - 0 - -0.0688273012638092 - 0.3283458054065704 - -0.2109878957271576 - <_> - - <_> - - - - <_> - 0 2 2 1 -1. - <_> - 1 2 1 1 2. - 0 - -2.6670019142329693e-003 - 0.1691143065690994 - -0.3861491084098816 - <_> - - <_> - - - - <_> - 8 4 6 1 -1. - <_> - 10 4 2 1 3. - 0 - 0.0176661405712366 - -0.2767274081707001 - 0.2180189043283463 - <_> - - <_> - - - - <_> - 4 2 1 2 -1. - <_> - 4 3 1 1 2. - 0 - 7.4831801466643810e-003 - -0.3848891854286194 - 0.1618614047765732 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 0 1 1 3. - 0 - -0.0162510108202696 - -0.4621725976467133 - 0.0491471998393536 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - 3.9933170774020255e-004 - -0.4533613026142120 - 0.1046027988195419 - <_> - - <_> - - - - <_> - 16 2 3 3 -1. - <_> - 17 2 1 3 3. - 0 - -0.0152971800416708 - -0.1411347985267639 - 0.1143492013216019 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 2 1 3 3. - 0 - -6.3068820163607597e-003 - 0.1626427024602890 - -0.3108170926570892 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 0 1 1 3. - 0 - -0.0127446297556162 - -0.6617395281791687 - 0.0678442120552063 - <_> - - <_> - - - - <_> - 2 0 16 4 -1. - <_> - 2 0 8 2 2. - <_> - 10 2 8 2 2. - 0 - -0.1055942028760910 - -0.5133383274078369 - 0.0710626021027565 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 0 1 1 3. - 0 - 0.0219584405422211 - 0.0136620104312897 - -0.5351728200912476 - <_> - - <_> - - - - <_> - 0 3 4 2 -1. - <_> - 0 4 4 1 2. - 0 - 0.0160341896116734 - -0.3528763949871063 - 0.1049050986766815 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - -6.5577318891882896e-003 - 0.2148994952440262 - -0.1989417970180512 - <_> - - <_> - - - - <_> - 3 0 3 1 -1. - <_> - 4 0 1 1 3. - 0 - -0.0119234798476100 - -0.5207656025886536 - 0.0676394701004028 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 11 3 11 1 2. - <_> - 0 4 11 1 2. - 0 - 0.0866749063134193 - 0.0580227002501488 - -0.5696936249732971 - <_> - - <_> - - - - <_> - 3 0 2 1 -1. - <_> - 4 0 1 1 2. - 0 - -2.3583239817526191e-004 - 0.1667681038379669 - -0.2129307985305786 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 12 0 1 1 2. - <_> - 11 1 1 1 2. - 0 - 2.2656060173176229e-004 - -0.1072390004992485 - 0.0803407803177834 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 7 0 4 1 2. - <_> - 11 1 4 1 2. - 0 - -0.0386192686855793 - -0.4828197956085205 - 0.0643176063895226 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -3.6343471147119999e-003 - 0.1646926999092102 - -0.1258600950241089 - <_> - - <_> - - - - <_> - 6 1 8 4 -1. - <_> - 8 1 4 4 2. - 0 - -0.1356738954782486 - 0.6871178150177002 - -0.0454019382596016 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - -5.9284181334078312e-003 - -0.4460243880748749 - 0.0777442976832390 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 6 0 1 2 3. - 0 - -0.0387219600379467 - -0.7954596281051636 - 0.0272730290889740 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - 2.7111990493722260e-004 - -0.0614648200571537 - 0.0866360515356064 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -8.9391563087701797e-003 - 0.3204261958599091 - -0.0944261327385902 - <_> - - <_> - - - - <_> - 9 1 9 4 -1. - <_> - 12 1 3 4 3. - 0 - 0.4060023128986359 - -0.0145072499290109 - 0.4007146060466766 - <_> - - <_> - - - - <_> - 4 1 9 4 -1. - <_> - 7 1 3 4 3. - 0 - 0.3527463972568512 - -0.0487828403711319 - 0.5863348841667175 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -2.6537929079495370e-004 - 0.1614083945751190 - -0.2104136943817139 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - -0.0123199503868818 - -0.5973966121673584 - 0.0406296215951443 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - -0.0138495601713657 - -0.6877948045730591 - 0.0282975994050503 - <_> - - <_> - - - - <_> - 5 0 4 1 -1. - <_> - 6 0 2 1 2. - 0 - -3.0354750924743712e-004 - 0.1138406991958618 - -0.2150139063596726 - <_> - - <_> - - - - <_> - 14 0 1 2 -1. - <_> - 14 0 1 1 2. - 1 - -0.0391069613397121 - -0.2260058969259262 - 0.0395268090069294 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -0.0280955005437136 - -0.3595007956027985 - 0.0747360736131668 - <_> - - <_> - - - - <_> - 3 1 18 3 -1. - <_> - 9 2 6 1 9. - 0 - -0.2125611007213593 - -0.7109876275062561 - 0.0418695993721485 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - -7.9028336331248283e-003 - 0.3095433115959168 - -0.0864241868257523 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 0.0117957098409534 - 0.0251334607601166 - -0.6675676107406616 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -0.0106725404039025 - -0.5725420713424683 - 0.0384541191160679 - <_> - - <_> - - - - <_> - 6 2 16 2 -1. - <_> - 10 2 8 2 2. - 0 - 0.1926015019416809 - 0.0452950112521648 - -0.3598395884037018 - <_> - - <_> - - - - <_> - 0 2 16 2 -1. - <_> - 4 2 8 2 2. - 0 - 0.2745896875858307 - 0.0376021713018417 - -0.6710445284843445 - <_> - - <_> - - - - <_> - 21 0 1 3 -1. - <_> - 21 1 1 1 3. - 0 - -0.0293159298598766 - -0.5799052119255066 - 0.0341134108603001 - <_> - - <_> - - - - <_> - 0 1 18 4 -1. - <_> - 0 1 9 2 2. - <_> - 9 3 9 2 2. - 0 - -0.3456305861473084 - -0.7732198834419251 - 0.0265457499772310 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 0.1082191988825798 - 0.0265380498021841 - -0.5127223730087280 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 0.0152253303676844 - -0.2846137881278992 - 0.0950192511081696 - <_> - - <_> - - - - <_> - 11 4 4 1 -1. - <_> - 12 4 2 1 2. - 0 - -0.0131285795941949 - 0.2416771054267883 - -0.0982130095362663 - <_> - - <_> - - - - <_> - 10 0 2 5 -1. - <_> - 11 0 1 5 2. - 0 - 0.0394823290407658 - -0.0841267332434654 - 0.3172164857387543 - <_> - - <_> - - - - <_> - 1 2 20 1 -1. - <_> - 6 2 10 1 2. - 0 - 0.2043827027082443 - -0.0909638777375221 - 0.2731429934501648 - <_> - - <_> - - - - <_> - 6 2 3 1 -1. - <_> - 7 2 1 1 3. - 0 - -2.1871099306736141e-004 - 0.1299407929182053 - -0.1945798993110657 - <_> - - <_> - - - - <_> - 16 0 3 3 -1. - <_> - 16 1 3 1 3. - 0 - -0.0935322716832161 - 0.4645681083202362 - -0.0697620585560799 - <_> - - <_> - - - - <_> - 9 1 3 3 -1. - <_> - 10 1 1 3 3. - 0 - 0.0235948096960783 - -0.1631298065185547 - 0.1587969064712524 - <_> - - <_> - - - - <_> - 15 0 1 2 -1. - <_> - 15 0 1 1 2. - 1 - 0.0235722996294498 - 0.0342308282852173 - -0.3910694122314453 - <_> - - <_> - - - - <_> - 9 1 2 4 -1. - <_> - 10 1 1 4 2. - 0 - -0.0282188504934311 - 0.4979830086231232 - -0.0541069991886616 - <_> - - <_> - - - - <_> - 21 2 1 2 -1. - <_> - 21 2 1 1 2. - 1 - -0.0465847887098789 - -0.4277912080287933 - 0.0418262295424938 - <_> - - <_> - - - - <_> - 1 2 2 1 -1. - <_> - 1 2 1 1 2. - 1 - 0.0116468202322721 - 0.0680371001362801 - -0.3571461141109467 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 0 3 11 2 2. - 0 - -0.1952639073133469 - 0.2197133004665375 - -0.1093451976776123 - -1.5772149562835693 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0609632283449173 - 0.2623322904109955 - -0.3996464014053345 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 12 0 1 1 2. - <_> - 11 1 1 1 2. - 0 - 3.1858150032348931e-004 - -0.1874409019947052 - 0.1288761943578720 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 9 1 1 2 2. - 1 - -0.0173382796347141 - 0.1584820002317429 - -0.4108001887798309 - <_> - - <_> - - - - <_> - 4 1 16 2 -1. - <_> - 8 1 8 2 2. - 0 - 0.1955444961786270 - -0.4125539958477020 - 0.1684329062700272 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 7 0 1 3 2. - 1 - -0.0168483406305313 - 0.1563276052474976 - -0.4225837886333466 - <_> - - <_> - - - - <_> - 4 1 14 4 -1. - <_> - 11 1 7 2 2. - <_> - 4 3 7 2 2. - 0 - 0.0677653029561043 - 0.0884570702910423 - -0.4574627876281738 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 3 1 1 1 3. - 0 - -0.0215934794396162 - 0.4310556054115295 - -0.1118862032890320 - <_> - - <_> - - - - <_> - 11 0 2 4 -1. - <_> - 11 0 1 4 2. - 0 - 0.0223255306482315 - -0.1710696965456009 - 0.1190048009157181 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 9 1 1 1 9. - 0 - 0.0412174686789513 - 0.1152848005294800 - -0.4270128011703491 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - -2.0137800311204046e-004 - 0.1759393960237503 - -0.2061759978532791 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - 2.0204859902150929e-004 - -0.5659689903259277 - 0.0891458168625832 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 0 3 11 2 2. - 0 - -0.3092140853404999 - 0.3455514013767242 - -0.1085027009248734 - <_> - - <_> - - - - <_> - 0 2 2 1 -1. - <_> - 1 2 1 1 2. - 0 - -6.1448230408132076e-003 - 0.1859671026468277 - -0.2005020976066589 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - -0.1202132999897003 - -0.3477135896682739 - 0.0546781308948994 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 2 0 2 5 3. - 0 - -0.1437608003616333 - -0.5411831736564636 - 0.0612141601741314 - <_> - - <_> - - - - <_> - 4 2 18 1 -1. - <_> - 4 2 9 1 2. - 0 - -0.1203705966472626 - -0.6147553920745850 - 0.0163895990699530 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 6 2 5 1 2. - <_> - 11 3 5 1 2. - 0 - 0.0426739193499088 - 0.0615998990833759 - -0.4898751974105835 - <_> - - <_> - - - - <_> - 4 2 18 1 -1. - <_> - 4 2 9 1 2. - 0 - 0.2010595053434372 - 0.0191350802779198 - -0.4410769045352936 - <_> - - <_> - - - - <_> - 0 2 18 1 -1. - <_> - 9 2 9 1 2. - 0 - 0.2088223993778229 - 0.0613639801740646 - -0.5665506720542908 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - 3.4317639074288309e-004 - -0.3790386915206909 - 0.0807705521583557 - <_> - - <_> - - - - <_> - 1 4 4 1 -1. - <_> - 2 4 2 1 2. - 0 - 0.0118992803618312 - 0.0513736605644226 - -0.5124402046203613 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 0 1 1 3. - 0 - -0.0152740897610784 - -0.6556478142738342 - 0.0311766099184752 - <_> - - <_> - - - - <_> - 1 0 4 3 -1. - <_> - 1 1 4 1 3. - 0 - 0.0204509403556585 - -0.1100831031799316 - 0.2442660033702850 - <_> - - <_> - - - - <_> - 18 1 1 4 -1. - <_> - 18 3 1 2 2. - 0 - 0.0109159899875522 - -0.3011330962181091 - 0.0846503525972366 - <_> - - <_> - - - - <_> - 10 1 2 2 -1. - <_> - 10 1 2 1 2. - 1 - 6.5979440696537495e-003 - -0.2353952974081039 - 0.1110377013683319 - <_> - - <_> - - - - <_> - 18 1 1 4 -1. - <_> - 18 3 1 2 2. - 0 - 0.0744031295180321 - 0.0265834294259548 - -0.5290083289146423 - <_> - - <_> - - - - <_> - 3 1 1 4 -1. - <_> - 3 3 1 2 2. - 0 - 9.6808141097426414e-003 - -0.3191435039043427 - 0.0917709171772003 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - 2.9621220892295241e-004 - -0.2449285984039307 - 0.2619382143020630 - <_> - - <_> - - - - <_> - 1 0 18 3 -1. - <_> - 7 1 6 1 9. - 0 - 0.9801648855209351 - 0.0435502082109451 - -0.5076766014099121 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 0 1 1 3. - 0 - -0.0316224806010723 - -0.8424624800682068 - 3.8115619681775570e-003 - <_> - - <_> - - - - <_> - 8 3 4 2 -1. - <_> - 8 3 2 1 2. - <_> - 10 4 2 1 2. - 0 - -0.0235346294939518 - -0.4160682857036591 - 0.0560476593673229 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -2.7265268727205694e-004 - 0.0732600167393684 - -0.1243783980607987 - <_> - - <_> - - - - <_> - 8 3 6 2 -1. - <_> - 8 3 3 1 2. - <_> - 11 4 3 1 2. - 0 - 0.0328024402260780 - 0.0469187088310719 - -0.5483862757682800 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 0 1 1 3. - 0 - 2.9037919011898339e-004 - -0.0764242410659790 - 0.0752542465925217 - <_> - - <_> - - - - <_> - 3 0 3 1 -1. - <_> - 4 0 1 1 3. - 0 - -0.0200249794870615 - -0.6453238129615784 - 0.0336129702627659 - <_> - - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 16 3 1 1 2. - <_> - 15 4 1 1 2. - 0 - -2.7752740425057709e-004 - 0.0875405818223953 - -0.0997709035873413 - <_> - - <_> - - - - <_> - 5 3 2 2 -1. - <_> - 5 3 1 1 2. - <_> - 6 4 1 1 2. - 0 - 7.7714829239994287e-004 - -0.1190643012523651 - 0.2081373035907745 - <_> - - <_> - - - - <_> - 15 2 2 1 -1. - <_> - 15 2 1 1 2. - 1 - -3.3943509333766997e-004 - 0.1071538031101227 - -0.3665041029453278 - <_> - - <_> - - - - <_> - 7 2 1 2 -1. - <_> - 7 2 1 1 2. - 1 - -0.0310331098735332 - -0.3991681039333344 - 0.0811882168054581 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - -0.0172892604023218 - 0.3801375031471252 - -0.0609772987663746 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - -0.0150116495788097 - -0.3346816897392273 - 0.0689330995082855 - <_> - - <_> - - - - <_> - 12 4 10 1 -1. - <_> - 12 4 5 1 2. - 0 - 0.0645673573017120 - 0.0653947070240974 - -0.4798898100852966 - <_> - - <_> - - - - <_> - 9 0 2 3 -1. - <_> - 10 0 1 3 2. - 0 - 0.0126242898404598 - -0.2073639035224915 - 0.1033783033490181 - <_> - - <_> - - - - <_> - 14 0 1 2 -1. - <_> - 14 0 1 1 2. - 1 - 0.0234020091593266 - 0.0194229409098625 - -0.2960999011993408 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 10 0 2 1 3. - 0 - 0.1085553020238876 - 0.0355370081961155 - -0.5521429181098938 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - 0.0453203618526459 - 0.0515648387372494 - -0.2503679990768433 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 3 1 2 2. - 0 - -5.7765920646488667e-003 - -0.3630062043666840 - 0.0604004003107548 - <_> - - <_> - - - - <_> - 4 1 16 2 -1. - <_> - 4 1 8 2 2. - 0 - 0.0428345203399658 - -0.1081646010279656 - 0.0599687993526459 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -6.7743198014795780e-003 - 0.2150484025478363 - -0.0934041067957878 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 0.0119932498782873 - 0.0175589006394148 - -0.7442647814750671 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -7.5555630028247833e-003 - -0.3836041986942291 - 0.0480565391480923 - <_> - - <_> - - - - <_> - 14 0 5 3 -1. - <_> - 14 1 5 1 3. - 0 - 0.0516617707908154 - -0.0405357703566551 - 0.2797332108020783 - <_> - - <_> - - - - <_> - 1 1 4 3 -1. - <_> - 3 1 2 3 2. - 0 - -3.4890910610556602e-003 - 0.1106553003191948 - -0.1824156045913696 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 2 4 2. - 0 - -0.1782176047563553 - 0.4667615890502930 - -0.0457158684730530 - <_> - - <_> - - - - <_> - 1 3 16 2 -1. - <_> - 5 3 8 2 2. - 0 - -0.0398824699223042 - -0.3696945905685425 - 0.0662794336676598 - <_> - - <_> - - - - <_> - 19 2 2 2 -1. - <_> - 20 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - 8.6848186329007149e-003 - -0.0908453017473221 - 0.2939020991325378 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -9.8893903195858002e-003 - -0.5941507816314697 - 0.0351584702730179 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 2 4 2. - 0 - 0.1297979056835175 - -0.0639680996537209 - 0.3166933059692383 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 11 0 1 1 2. - 0 - -0.0220919009298086 - -0.7357493042945862 - 0.0347481891512871 - <_> - - <_> - - - - <_> - 10 3 6 2 -1. - <_> - 12 3 2 2 3. - 0 - 0.0636888667941093 - -0.0488447882235050 - 0.1882255971431732 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 1 1 2. - <_> - 3 4 1 1 2. - 0 - -2.8462480986490846e-004 - 0.1463415026664734 - -0.1243413984775543 - <_> - - <_> - - - - <_> - 18 1 2 2 -1. - <_> - 19 1 1 1 2. - <_> - 18 2 1 1 2. - 0 - 8.7389163672924042e-003 - -0.0883570164442062 - 0.3651317059993744 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - -8.5483584553003311e-003 - -0.3737513124942780 - 0.0492428615689278 - <_> - - <_> - - - - <_> - 19 2 2 2 -1. - <_> - 20 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - -4.8324568197131157e-003 - 0.3051201999187470 - -0.0871342271566391 - <_> - - <_> - - - - <_> - 6 0 3 1 -1. - <_> - 7 0 1 1 3. - 0 - 9.0768225491046906e-003 - 0.0540050491690636 - -0.3654535114765167 - <_> - - <_> - - - - <_> - 14 0 1 2 -1. - <_> - 14 0 1 1 2. - 1 - -0.0414760112762451 - -0.2639808952808380 - 0.0364313200116158 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -0.0179269202053547 - -0.2058589011430740 - 0.0957352966070175 - <_> - - <_> - - - - <_> - 15 0 1 2 -1. - <_> - 15 0 1 1 2. - 1 - 0.0134669896215200 - 0.0401146411895752 - -0.2650730013847351 - <_> - - <_> - - - - <_> - 5 2 3 1 -1. - <_> - 6 2 1 1 3. - 0 - -0.0105214901268482 - 0.3394441008567810 - -0.0627214834094048 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 16 1 1 1 2. - <_> - 15 2 1 1 2. - 0 - 9.0459967032074928e-003 - -0.1115396991372109 - 0.3655227124691010 - -1.5406730175018311 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 1 16 2 -1. - <_> - 6 1 8 2 2. - 0 - 0.2921968996524811 - -0.3051744103431702 - 0.3110071122646332 - <_> - - <_> - - - - <_> - 10 0 6 2 -1. - <_> - 10 0 3 2 2. - 0 - 0.0488845296204090 - -0.4317635893821716 - 0.0909197032451630 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0861048474907875 - 0.2350410073995590 - -0.2458875030279160 - <_> - - <_> - - - - <_> - 11 0 9 1 -1. - <_> - 14 0 3 1 3. - 0 - -0.0378247499465942 - 0.1186527982354164 - -0.1602728068828583 - <_> - - <_> - - - - <_> - 8 4 4 1 -1. - <_> - 10 4 2 1 2. - 0 - 5.1638111472129822e-003 - -0.3087972998619080 - 0.1692786067724228 - <_> - - <_> - - - - <_> - 13 1 5 4 -1. - <_> - 13 3 5 2 2. - 0 - 0.1060808971524239 - -0.3249335885047913 - 0.2009779959917069 - <_> - - <_> - - - - <_> - 2 0 9 1 -1. - <_> - 5 0 3 1 3. - 0 - -0.0177585501223803 - 0.1128119006752968 - -0.3532074093818665 - <_> - - <_> - - - - <_> - 13 0 5 4 -1. - <_> - 13 1 5 2 2. - 0 - -0.0493416897952557 - 0.1454734057188034 - -0.2653774917125702 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 6 2 5 1 2. - <_> - 11 3 5 1 2. - 0 - 0.0259109698235989 - 0.1229083985090256 - -0.4127517044544220 - <_> - - <_> - - - - <_> - 19 3 3 2 -1. - <_> - 19 4 3 1 2. - 0 - 5.6900721974670887e-003 - -0.4184210896492004 - 0.0988551601767540 - <_> - - <_> - - - - <_> - 2 0 5 3 -1. - <_> - 2 1 5 1 3. - 0 - -0.1002437993884087 - 0.3868139982223511 - -0.0955260768532753 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - -2.0592489454429597e-004 - 0.1086150035262108 - -0.1146064028143883 - <_> - - <_> - - - - <_> - 1 1 1 2 -1. - <_> - 1 2 1 1 2. - 0 - -2.4438640684820712e-004 - 0.1391827017068863 - -0.2279980033636093 - <_> - - <_> - - - - <_> - 17 1 2 2 -1. - <_> - 18 1 1 1 2. - <_> - 17 2 1 1 2. - 0 - -2.2062960488256067e-004 - 0.2056594938039780 - -0.2767710089683533 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 11 0 2 5 2. - 0 - -0.0959741026163101 - 0.3078581094741821 - -0.1182383000850678 - <_> - - <_> - - - - <_> - 9 2 6 3 -1. - <_> - 9 2 3 3 2. - 0 - -0.1543993055820465 - 0.4471242129802704 - -0.0175462197512388 - <_> - - <_> - - - - <_> - 8 3 4 2 -1. - <_> - 10 3 2 2 2. - 0 - 0.0623852089047432 - -0.1276288032531738 - 0.2665241956710815 - <_> - - <_> - - - - <_> - 21 0 1 4 -1. - <_> - 21 2 1 2 2. - 0 - -0.0216632205992937 - -0.5511227250099182 - 0.0785660073161125 - <_> - - <_> - - - - <_> - 1 2 20 1 -1. - <_> - 6 2 10 1 2. - 0 - 0.2421177029609680 - -0.0816057026386261 - 0.4142647981643677 - <_> - - <_> - - - - <_> - 20 0 2 1 -1. - <_> - 20 0 1 1 2. - 1 - 0.0434077084064484 - 0.0290277097374201 - -0.6575114727020264 - <_> - - <_> - - - - <_> - 3 1 2 2 -1. - <_> - 3 1 1 1 2. - <_> - 4 2 1 1 2. - 0 - -2.5835740962065756e-004 - 0.1479489952325821 - -0.1816845983266830 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 18 0 2 2 2. - 0 - -0.0205316301435232 - -0.3038592934608460 - 0.0581487491726875 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 6 0 1 2 3. - 0 - -0.0351201295852661 - -0.7728464007377625 - 0.0335446707904339 - <_> - - <_> - - - - <_> - 1 1 21 3 -1. - <_> - 8 2 7 1 9. - 0 - 0.9051967263221741 - 0.0589515194296837 - -0.4095562100410461 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 7 0 1 2 3. - 0 - -0.0291394107043743 - -0.4947493970394135 - 0.0490220896899700 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - -8.9205689728260040e-003 - 0.1703335940837860 - -0.1276351064443588 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 11 3 1 1 2. - 0 - -6.8206740543246269e-003 - -0.4427204132080078 - 0.0647476464509964 - <_> - - <_> - - - - <_> - 19 3 3 2 -1. - <_> - 19 4 3 1 2. - 0 - -0.0119166104122996 - -0.4208048880100250 - 0.0145897697657347 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - 0.0149108795449138 - -0.2619223892688751 - 0.0987395420670509 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - -0.0396954789757729 - -0.5716304779052734 - 0.0150962797924876 - <_> - - <_> - - - - <_> - 6 2 3 1 -1. - <_> - 7 2 1 1 3. - 0 - -2.1801660477649420e-004 - 0.1283320039510727 - -0.2162196040153503 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -0.0458851009607315 - -0.5830789208412170 - 0.0230850204825401 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -0.0376097708940506 - -0.4769774973392487 - 0.0497832708060741 - <_> - - <_> - - - - <_> - 19 1 2 2 -1. - <_> - 20 1 1 1 2. - <_> - 19 2 1 1 2. - 0 - -7.9078450798988342e-003 - 0.2802506983280182 - -0.0805409103631973 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 2 2 4 1 2. - 0 - 0.0398138388991356 - -0.0639362186193466 - 0.4094027876853943 - <_> - - <_> - - - - <_> - 19 1 2 2 -1. - <_> - 20 1 1 1 2. - <_> - 19 2 1 1 2. - 0 - 4.4679851271212101e-003 - -0.0683591663837433 - 0.1852204948663712 - <_> - - <_> - - - - <_> - 1 1 2 2 -1. - <_> - 1 1 1 1 2. - <_> - 2 2 1 1 2. - 0 - -7.4347038753330708e-003 - 0.2987340092658997 - -0.0968659073114395 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -2.6862850063480437e-004 - 0.0885278210043907 - -0.1421532034873962 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - -0.0165531896054745 - -0.4923925995826721 - 0.0490056388080120 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - 0.0924725681543350 - 0.0338660590350628 - -0.4127385914325714 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 0.0257745198905468 - -0.2287130951881409 - 0.1235911995172501 - <_> - - <_> - - - - <_> - 3 0 16 4 -1. - <_> - 11 0 8 2 2. - <_> - 3 2 8 2 2. - 0 - -0.2750909924507141 - -0.6749944090843201 - 0.0343307591974735 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 2 2 2 2. - 0 - 0.0719025880098343 - 0.0419560708105564 - -0.4763529002666473 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 18 0 2 2 2. - 0 - 0.0311908591538668 - 0.0272666793316603 - -0.3000186085700989 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -0.0178631804883480 - -0.3733784854412079 - 0.0616636909544468 - <_> - - <_> - - - - <_> - 6 2 16 2 -1. - <_> - 10 2 8 2 2. - 0 - 0.1511456966400147 - 0.0517917387187481 - -0.2188622951507568 - <_> - - <_> - - - - <_> - 0 2 16 2 -1. - <_> - 4 2 8 2 2. - 0 - 0.2179343998432159 - 0.0610164590179920 - -0.4177503883838654 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 4 1 1 3. - 0 - 0.0112180197611451 - 0.0348128601908684 - -0.5263618230819702 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - -0.1888345927000046 - 0.5200440883636475 - -0.0430313684046268 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 4 1 1 3. - 0 - -0.0141079900786281 - -0.6106898188591003 - 0.0400286093354225 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 7 0 4 1 2. - <_> - 11 1 4 1 2. - 0 - -0.0180448405444622 - -0.2631984055042267 - 0.0730124115943909 - <_> - - <_> - - - - <_> - 18 1 2 2 -1. - <_> - 19 1 1 1 2. - <_> - 18 2 1 1 2. - 0 - 6.5544890239834785e-003 - -0.0854290127754211 - 0.2241147011518478 - <_> - - <_> - - - - <_> - 3 0 3 1 -1. - <_> - 4 0 1 1 3. - 0 - -0.0123116597533226 - -0.4429729878902435 - 0.0466542616486549 - <_> - - <_> - - - - <_> - 18 1 2 2 -1. - <_> - 19 1 1 1 2. - <_> - 18 2 1 1 2. - 0 - -7.6358742080628872e-003 - 0.1996064037084580 - -0.0522281304001808 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - -0.0192709192633629 - -0.7685980796813965 - 0.0243509095162153 - <_> - - <_> - - - - <_> - 9 4 4 1 -1. - <_> - 10 4 2 1 2. - 0 - 9.6641881391406059e-003 - -0.1346967071294785 - 0.1324453949928284 - <_> - - <_> - - - - <_> - 2 1 2 2 -1. - <_> - 2 1 1 1 2. - <_> - 3 2 1 1 2. - 0 - -0.0120201902464032 - 0.3553862869739533 - -0.0525580197572708 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -0.0220797900110483 - -0.6754226088523865 - 0.0124195404350758 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 9 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - -3.0078861163929105e-004 - 0.1227649971842766 - -0.1749749928712845 - <_> - - <_> - - - - <_> - 11 1 4 4 -1. - <_> - 12 1 2 4 2. - 0 - -0.0373087115585804 - 0.1854808926582336 - -0.0979751124978065 - <_> - - <_> - - - - <_> - 9 0 3 3 -1. - <_> - 10 1 1 1 9. - 0 - 0.0459991209208965 - 0.1143648996949196 - -0.2461473047733307 - <_> - - <_> - - - - <_> - 11 1 4 4 -1. - <_> - 12 1 2 4 2. - 0 - 0.0822245106101036 - -0.0241080205887556 - 0.2690033018589020 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 8 1 2 4 2. - 0 - 0.0818987190723419 - -0.0396540313959122 - 0.5047857761383057 - <_> - - <_> - - - - <_> - 1 1 20 2 -1. - <_> - 6 1 10 2 2. - 0 - 0.4614373147487640 - -0.0442391782999039 - 0.4122915863990784 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 1 2. - <_> - 10 1 1 1 2. - 0 - 2.5755251408554614e-004 - -0.1778572052717209 - 0.1205023005604744 - <_> - - <_> - - - - <_> - 9 0 6 2 -1. - <_> - 12 0 3 1 2. - <_> - 9 1 3 1 2. - 0 - 0.0156651996076107 - -0.0485711507499218 - 0.0815467536449432 - <_> - - <_> - - - - <_> - 7 0 6 2 -1. - <_> - 7 0 3 1 2. - <_> - 10 1 3 1 2. - 0 - 0.0498800091445446 - 0.0421518981456757 - -0.5303056836128235 - <_> - - <_> - - - - <_> - 20 2 2 2 -1. - <_> - 20 2 1 2 2. - 0 - -2.7810079045593739e-003 - 0.1198678985238075 - -0.1906044930219650 - <_> - - <_> - - - - <_> - 3 2 3 1 -1. - <_> - 4 2 1 1 3. - 0 - -0.0176007691770792 - 0.1897035986185074 - -0.0889791026711464 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 10 0 2 1 3. - 0 - 5.0103738903999329e-003 - -0.3168081939220429 - 0.0617063082754612 - <_> - - <_> - - - - <_> - 3 2 1 2 -1. - <_> - 3 3 1 1 2. - 0 - 5.5831652134656906e-003 - -0.2072229981422424 - 0.0893940627574921 - <_> - - <_> - - - - <_> - 16 1 6 4 -1. - <_> - 19 1 3 2 2. - <_> - 16 3 3 2 2. - 0 - 0.0101343700662255 - -0.0700401812791824 - 0.0486948713660240 - <_> - - <_> - - - - <_> - 0 1 6 4 -1. - <_> - 0 1 3 2 2. - <_> - 3 3 3 2 2. - 0 - 0.1701169013977051 - 0.0258664395660162 - -0.7274320125579834 - <_> - - <_> - - - - <_> - 20 3 2 1 -1. - <_> - 20 3 1 1 2. - 0 - 0.0128320399671793 - -0.0323757715523243 - 0.2820742130279541 - <_> - - <_> - - - - <_> - 0 3 2 1 -1. - <_> - 1 3 1 1 2. - 0 - -2.1063549502287060e-004 - 0.0980736389756203 - -0.1779716014862061 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - -0.0157455801963806 - -0.3981826007366180 - 0.0212849508970976 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 3 1 2 2. - 0 - 0.0530990995466709 - 0.0473971702158451 - -0.3579272925853729 - -1.5132089853286743 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 1 1 3 -1. - <_> - 1 2 1 1 3. - 0 - -0.0126078296452761 - 0.3289293050765991 - -0.2871732115745544 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 10 1 2 4 2. - 0 - 0.0697642564773560 - -0.2145617008209229 - 0.2685098946094513 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 1 9. - 0 - -0.0417437888681889 - 0.1513637006282806 - -0.3876473903656006 - <_> - - <_> - - - - <_> - 9 0 8 2 -1. - <_> - 9 0 4 2 2. - 0 - 0.1030343025922775 - -0.2848167121410370 - 0.1298658996820450 - <_> - - <_> - - - - <_> - 3 0 16 1 -1. - <_> - 11 0 8 1 2. - 0 - -0.0966407731175423 - -0.5245664715766907 - 0.1095390990376473 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - 8.0958474427461624e-003 - 0.0513810887932777 - -0.2667458057403565 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -2.2447129595093429e-004 - 0.2091910988092423 - -0.2435808926820755 - <_> - - <_> - - - - <_> - 13 1 5 4 -1. - <_> - 13 3 5 2 2. - 0 - 0.1241464987397194 - -0.3006137907505035 - 0.1572912931442261 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - 0.0473679304122925 - -0.0841763168573380 - 0.4142656028270721 - <_> - - <_> - - - - <_> - 18 0 4 2 -1. - <_> - 20 0 2 1 2. - <_> - 18 1 2 1 2. - 0 - -0.0196097102016211 - 0.3417541086673737 - -0.1607497930526733 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 6 2 5 1 2. - <_> - 11 3 5 1 2. - 0 - 0.0348290093243122 - 0.0755929425358772 - -0.4508461058139801 - <_> - - <_> - - - - <_> - 8 2 8 3 -1. - <_> - 8 2 4 3 2. - 0 - 0.3101227879524231 - -0.0391340292990208 - 0.1443621963262558 - <_> - - <_> - - - - <_> - 6 2 8 3 -1. - <_> - 10 2 4 3 2. - 0 - 0.2924937009811401 - -0.0642258077859879 - 0.4353322982788086 - <_> - - <_> - - - - <_> - 18 0 1 3 -1. - <_> - 18 1 1 1 3. - 0 - -0.0231145899742842 - 0.3070923089981079 - -0.0890118405222893 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 0 1 1 3. - 0 - 2.7578460867516696e-004 - -0.3070184886455536 - 0.0938344672322273 - <_> - - <_> - - - - <_> - 21 0 1 4 -1. - <_> - 21 2 1 2 2. - 0 - 0.0455872192978859 - 0.0382352918386459 - -0.3347797989845276 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -0.0240571107715368 - -0.4457365870475769 - 0.0670702308416367 - <_> - - <_> - - - - <_> - 18 0 1 3 -1. - <_> - 18 1 1 1 3. - 0 - 0.0136166596785188 - -0.0614804998040199 - 0.4214267134666443 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 3 1 1 1 3. - 0 - -0.0229929592460394 - 0.3661642074584961 - -0.0872418433427811 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - 0.1258576959371567 - 0.0371632091701031 - -0.3560774028301239 - <_> - - <_> - - - - <_> - 0 1 8 4 -1. - <_> - 0 1 4 2 2. - <_> - 4 3 4 2 2. - 0 - -0.0815337896347046 - -0.4698711931705475 - 0.0610106214880943 - <_> - - <_> - - - - <_> - 18 3 2 2 -1. - <_> - 19 3 1 1 2. - <_> - 18 4 1 1 2. - 0 - -2.4753381148912013e-004 - 0.1936306953430176 - -0.1816868036985397 - <_> - - <_> - - - - <_> - 2 2 2 1 -1. - <_> - 2 2 1 1 2. - 1 - -2.6028539286926389e-004 - 0.0846851170063019 - -0.3284845948219299 - <_> - - <_> - - - - <_> - 19 4 2 1 -1. - <_> - 19 4 1 1 2. - 0 - -2.2039060422684997e-004 - 0.1229088008403778 - -0.1549490988254547 - <_> - - <_> - - - - <_> - 0 2 18 1 -1. - <_> - 9 2 9 1 2. - 0 - 0.1960303038358688 - 0.0581260509788990 - -0.4562155008316040 - <_> - - <_> - - - - <_> - 3 0 16 4 -1. - <_> - 11 0 8 2 2. - <_> - 3 2 8 2 2. - 0 - 0.1407869011163712 - 0.0446753203868866 - -0.5619760155677795 - <_> - - <_> - - - - <_> - 5 0 3 1 -1. - <_> - 6 0 1 1 3. - 0 - -2.2961759532336146e-004 - 0.1191250979900360 - -0.2160618007183075 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 0 1 2 3. - 0 - -0.0195333305746317 - -0.3905149102210999 - 0.0701041594147682 - <_> - - <_> - - - - <_> - 5 1 2 2 -1. - <_> - 5 1 1 1 2. - <_> - 6 2 1 1 2. - 0 - 0.0138731095939875 - -0.0724452435970306 - 0.3774791061878204 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 0 1 2 3. - 0 - -1.2634480663109571e-004 - 0.0957862436771393 - -0.1260748058557510 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 6 0 1 2 3. - 0 - -0.0241786092519760 - -0.5329800844192505 - 0.0503096207976341 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 2 1 1 3. - 0 - -0.0145593099296093 - 0.3904046118259430 - -0.1187724992632866 - <_> - - <_> - - - - <_> - 5 3 3 1 -1. - <_> - 6 3 1 1 3. - 0 - -2.2580049699172378e-004 - 0.1951259970664978 - -0.1484954059123993 - <_> - - <_> - - - - <_> - 1 1 21 3 -1. - <_> - 8 2 7 1 9. - 0 - -0.2149316072463989 - -0.6001014709472656 - 0.0291111394762993 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -0.0128397000953555 - 0.3157683014869690 - -0.0720015019178391 - <_> - - <_> - - - - <_> - 19 1 1 3 -1. - <_> - 19 2 1 1 3. - 0 - -0.0198789108544588 - 0.3225157856941223 - -0.1353725939989090 - <_> - - <_> - - - - <_> - 2 1 1 3 -1. - <_> - 2 2 1 1 3. - 0 - 0.0100354896858335 - -0.0568225607275963 - 0.4656737148761749 - <_> - - <_> - - - - <_> - 7 1 8 2 -1. - <_> - 11 1 4 1 2. - <_> - 7 2 4 1 2. - 0 - -0.0376236811280251 - -0.4267737865447998 - 0.0648194700479507 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 1 1 1 2. - <_> - 10 2 1 1 2. - 0 - 1.1324769729981199e-004 - -0.1595813930034638 - 0.1477826982736588 - <_> - - <_> - - - - <_> - 11 2 3 3 -1. - <_> - 12 2 1 3 3. - 0 - 0.0379783287644386 - -0.0659075826406479 - 0.4012987911701202 - <_> - - <_> - - - - <_> - 8 1 3 4 -1. - <_> - 9 1 1 4 3. - 0 - 0.0394397787749767 - -0.0845254808664322 - 0.3566597998142242 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - -8.9516127482056618e-003 - -0.4334160983562470 - 0.0619834288954735 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - 8.3888713270425797e-003 - 0.0468572117388248 - -0.4738920032978058 - <_> - - <_> - - - - <_> - 16 4 3 1 -1. - <_> - 17 4 1 1 3. - 0 - 7.4398089200258255e-003 - 0.0421781986951828 - -0.5143380761146545 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -0.0107923196628690 - -0.5802994966506958 - 0.0322903692722321 - <_> - - <_> - - - - <_> - 8 3 6 2 -1. - <_> - 11 3 3 1 2. - <_> - 8 4 3 1 2. - 0 - -0.0174952093511820 - -0.3053542971611023 - 0.0629183128476143 - <_> - - <_> - - - - <_> - 3 2 3 2 -1. - <_> - 4 2 1 2 3. - 0 - -0.0205707103013992 - 0.1825321018695831 - -0.1210422962903976 - <_> - - <_> - - - - <_> - 13 3 2 2 -1. - <_> - 14 3 1 1 2. - <_> - 13 4 1 1 2. - 0 - -1.1084279685746878e-004 - 0.1000263988971710 - -0.1450241953134537 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 3 2 1 2. - <_> - 11 4 2 1 2. - 0 - -0.0111437896266580 - -0.3472850024700165 - 0.0650748834013939 - <_> - - <_> - - - - <_> - 15 2 2 2 -1. - <_> - 16 2 1 1 2. - <_> - 15 3 1 1 2. - 0 - -9.1553200036287308e-003 - 0.3398604989051819 - -0.1354638040065765 - <_> - - <_> - - - - <_> - 1 4 2 1 -1. - <_> - 2 4 1 1 2. - 0 - -2.1860719425603747e-004 - 0.1421895027160645 - -0.1600103974342346 - <_> - - <_> - - - - <_> - 9 1 4 3 -1. - <_> - 9 1 2 3 2. - 0 - -0.0871755927801132 - 0.3080326914787293 - -0.0751926526427269 - <_> - - <_> - - - - <_> - 6 2 8 1 -1. - <_> - 8 2 4 1 2. - 0 - 0.0780207216739655 - -0.0983691290020943 - 0.2524915933609009 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - 2.8408560319803655e-004 - -0.3871381878852844 - 0.0476101711392403 - <_> - - <_> - - - - <_> - 7 4 4 1 -1. - <_> - 8 4 2 1 2. - 0 - -0.0120724802836776 - 0.2123920023441315 - -0.1005887016654015 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - 0.0993544980883598 - 0.0249169804155827 - -0.5672984719276428 - <_> - - <_> - - - - <_> - 0 3 4 2 -1. - <_> - 0 4 4 1 2. - 0 - 1.9157710485160351e-003 - -0.5084031224250794 - 0.0410367809236050 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 1 1 1 3. - 0 - -1.2407809845171869e-004 - 0.0786713063716888 - -0.1326536983251572 - <_> - - <_> - - - - <_> - 4 0 5 4 -1. - <_> - 4 1 5 2 2. - 0 - -0.0522460602223873 - 0.1149192005395889 - -0.1770702004432678 - <_> - - <_> - - - - <_> - 15 2 2 2 -1. - <_> - 16 2 1 1 2. - <_> - 15 3 1 1 2. - 0 - -1.8520159937907010e-004 - 0.0747666209936142 - -0.1286102980375290 - <_> - - <_> - - - - <_> - 5 2 2 2 -1. - <_> - 5 2 1 1 2. - <_> - 6 3 1 1 2. - 0 - 0.0124963195994496 - -0.0372684299945831 - 0.5833895206451416 - <_> - - <_> - - - - <_> - 13 0 3 1 -1. - <_> - 14 0 1 1 3. - 0 - -0.0207027494907379 - -0.4583578109741211 - 0.0298828296363354 - <_> - - <_> - - - - <_> - 6 0 3 1 -1. - <_> - 7 0 1 1 3. - 0 - -1.0285720054525882e-004 - 0.1169814020395279 - -0.1779796034097672 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 0 1 2 3. - 0 - -0.0292956698685884 - -0.4759201109409332 - 0.0553959012031555 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 0 1 2 3. - 0 - 2.6850448921322823e-003 - 0.0954134166240692 - -0.2369711995124817 - <_> - - <_> - - - - <_> - 15 1 5 4 -1. - <_> - 15 3 5 2 2. - 0 - 0.3639847934246063 - 0.0247668605297804 - -0.7378187179565430 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 4 2 3 1 3. - 0 - 0.0348225310444832 - -0.0371499098837376 - 0.5801017284393311 - -1.5654580593109131 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -6.6602258011698723e-003 - 0.3104394078254700 - -0.1914138048887253 - <_> - - <_> - - - - <_> - 10 0 6 2 -1. - <_> - 10 0 3 2 2. - 0 - 0.0880320072174072 - -0.2895796000957489 - 0.1216154992580414 - <_> - - <_> - - - - <_> - 3 2 3 1 -1. - <_> - 4 2 1 1 3. - 0 - -8.2375640049576759e-003 - 0.1945987045764923 - -0.2775964140892029 - <_> - - <_> - - - - <_> - 6 1 14 2 -1. - <_> - 6 1 7 2 2. - 0 - 0.4101809859275818 - 0.0545456595718861 - -0.6932289004325867 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 2 1 2 1 2. - 1 - -7.9229446128010750e-003 - 0.1306308060884476 - -0.3845525979995728 - <_> - - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.0787577778100967 - -0.1861117035150528 - 0.1028727963566780 - <_> - - <_> - - - - <_> - 4 1 12 2 -1. - <_> - 10 1 6 2 2. - 0 - 0.1022275015711784 - -0.2970561087131500 - 0.1501674950122833 - <_> - - <_> - - - - <_> - 0 0 22 2 -1. - <_> - 11 0 11 1 2. - <_> - 0 1 11 1 2. - 0 - -0.0644519180059433 - -0.4134370088577271 - 0.1080941036343575 - <_> - - <_> - - - - <_> - 2 0 2 3 -1. - <_> - 2 1 2 1 3. - 0 - -0.0368057303130627 - 0.3684262037277222 - -0.1141026020050049 - <_> - - <_> - - - - <_> - 18 1 1 3 -1. - <_> - 18 2 1 1 3. - 0 - -0.0293698497116566 - 0.3276480138301849 - -0.0802641063928604 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - 6.7123891785740852e-003 - 0.0882864221930504 - -0.4445902109146118 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - -0.1538141071796417 - -0.4562157094478607 - 0.0180936008691788 - <_> - - <_> - - - - <_> - 7 3 8 2 -1. - <_> - 7 3 4 1 2. - <_> - 11 4 4 1 2. - 0 - -0.0253893695771694 - -0.4690324962139130 - 0.0615506581962109 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -0.0298910997807980 - -0.2820520997047424 - 0.0278933197259903 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -2.3889240401331335e-004 - 0.0866776108741760 - -0.3572528958320618 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - 0.0967053025960922 - 0.0334066599607468 - -0.2078382968902588 - <_> - - <_> - - - - <_> - 5 1 2 2 -1. - <_> - 5 1 1 1 2. - <_> - 6 2 1 1 2. - 0 - 9.1295214369893074e-003 - -0.0991728901863098 - 0.3085930943489075 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - 0.2934893071651459 - 8.1442613154649734e-003 - -0.5095192193984985 - <_> - - <_> - - - - <_> - 6 0 10 4 -1. - <_> - 6 0 5 2 2. - <_> - 11 2 5 2 2. - 0 - -0.0832473635673523 - -0.4849885106086731 - 0.0608736611902714 - <_> - - <_> - - - - <_> - 16 0 6 5 -1. - <_> - 18 0 2 5 3. - 0 - -0.0835273936390877 - -0.1033390015363693 - 0.0158715695142746 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 2 0 2 5 3. - 0 - -0.1202830001711845 - -0.4354028999805450 - 0.0633132308721542 - <_> - - <_> - - - - <_> - 5 2 16 2 -1. - <_> - 9 2 8 2 2. - 0 - 0.3353897035121918 - 0.0139546301215887 - -0.4423910081386566 - <_> - - <_> - - - - <_> - 1 2 10 3 -1. - <_> - 6 2 5 3 2. - 0 - -0.0164324194192886 - -0.4260169863700867 - 0.0586070418357849 - <_> - - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 16 3 1 1 2. - <_> - 15 4 1 1 2. - 0 - -1.9124349637422711e-004 - 0.0605542287230492 - -0.0775830224156380 - <_> - - <_> - - - - <_> - 5 3 2 2 -1. - <_> - 5 3 1 1 2. - <_> - 6 4 1 1 2. - 0 - 2.3965220316313207e-004 - -0.1283147037029266 - 0.2045322954654694 - <_> - - <_> - - - - <_> - 14 1 8 4 -1. - <_> - 18 1 4 2 2. - <_> - 14 3 4 2 2. - 0 - 0.1410280019044876 - 0.0425505004823208 - -0.5261893272399902 - <_> - - <_> - - - - <_> - 3 1 1 4 -1. - <_> - 3 3 1 2 2. - 0 - 0.0160464998334646 - -0.2466184049844742 - 0.0813784524798393 - <_> - - <_> - - - - <_> - 21 1 1 4 -1. - <_> - 21 3 1 2 2. - 0 - 0.0531627796590328 - 0.0352040007710457 - -0.2831040918827057 - <_> - - <_> - - - - <_> - 0 2 22 2 -1. - <_> - 0 2 11 1 2. - <_> - 11 3 11 1 2. - 0 - -0.0417232587933540 - -0.2983017861843109 - 0.0801239535212517 - <_> - - <_> - - - - <_> - 17 0 3 3 -1. - <_> - 17 1 3 1 3. - 0 - -0.0553928017616272 - 0.2219153046607971 - -0.0897308215498924 - <_> - - <_> - - - - <_> - 2 0 3 3 -1. - <_> - 2 1 3 1 3. - 0 - 0.0179573707282543 - -0.0925520732998848 - 0.2500694096088409 - <_> - - <_> - - - - <_> - 10 0 12 5 -1. - <_> - 13 0 6 5 2. - 0 - -0.4046837985515595 - 0.1823135018348694 - -0.1142465025186539 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 11 2 2 3 2. - 0 - -0.1204074025154114 - 0.4014413058757782 - -0.0497754290699959 - <_> - - <_> - - - - <_> - 11 0 4 1 -1. - <_> - 11 0 2 1 2. - 1 - 0.1274770051240921 - 0.0286344606429338 - -0.3693166971206665 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 9 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - -2.1081299928482622e-004 - 0.1089978963136673 - -0.1835806071758270 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 16 0 2 1 2. - <_> - 14 1 2 1 2. - 0 - 0.0202662907540798 - -0.1147174015641213 - 0.2365763038396835 - <_> - - <_> - - - - <_> - 0 3 20 2 -1. - <_> - 0 3 10 1 2. - <_> - 10 4 10 1 2. - 0 - -0.0938578322529793 - -0.4446719884872437 - 0.0463233590126038 - <_> - - <_> - - - - <_> - 13 1 9 2 -1. - <_> - 16 1 3 2 3. - 0 - -0.0390890501439571 - 0.0900571793317795 - -0.2432890981435776 - <_> - - <_> - - - - <_> - 9 4 4 1 -1. - <_> - 10 4 2 1 2. - 0 - 0.0116938799619675 - -0.1343414038419724 - 0.1559841930866242 - <_> - - <_> - - - - <_> - 11 2 2 2 -1. - <_> - 12 2 1 1 2. - <_> - 11 3 1 1 2. - 0 - -2.3392560251522809e-004 - 0.1066009029746056 - -0.1503113955259323 - <_> - - <_> - - - - <_> - 10 1 2 2 -1. - <_> - 10 1 2 1 2. - 1 - 0.0766542404890060 - 0.0466307103633881 - -0.4484651982784271 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -6.6552842035889626e-003 - 0.2990885972976685 - -0.1449618041515350 - <_> - - <_> - - - - <_> - 5 0 3 1 -1. - <_> - 6 0 1 1 3. - 0 - 6.4779841341078281e-003 - 0.0570152290165424 - -0.3590728938579559 - <_> - - <_> - - - - <_> - 8 2 6 1 -1. - <_> - 8 2 3 1 2. - 0 - -0.0777626633644104 - 0.5025200247764587 - -0.0435283817350864 - <_> - - <_> - - - - <_> - 0 4 22 1 -1. - <_> - 11 4 11 1 2. - 0 - -0.1397587060928345 - 0.3465459942817688 - -0.0520052611827850 - <_> - - <_> - - - - <_> - 16 4 2 1 -1. - <_> - 16 4 1 1 2. - 0 - -0.0127599202096462 - -0.6659132242202759 - 0.0209838803857565 - <_> - - <_> - - - - <_> - 4 4 2 1 -1. - <_> - 5 4 1 1 2. - 0 - 0.0113625200465322 - 0.0222821906208992 - -0.6685109138488770 - <_> - - <_> - - - - <_> - 15 1 6 3 -1. - <_> - 17 1 2 3 3. - 0 - -0.2231232970952988 - -0.4610581099987030 - 6.2970318831503391e-003 - <_> - - <_> - - - - <_> - 6 0 1 2 -1. - <_> - 6 0 1 1 2. - 1 - 2.2931410057935864e-004 - -0.2111182063817978 - 0.0817711725831032 - <_> - - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - -0.0602262616157532 - 0.3254680931568146 - -0.0216824002563953 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - 3.0173239065334201e-004 - -0.3232026994228363 - 0.0708208531141281 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -2.6154008810408413e-004 - 0.0682233572006226 - -0.1024259030818939 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -7.4847848154604435e-003 - 0.2240424007177353 - -0.0811881870031357 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - -0.0185171104967594 - -0.5528036952018738 - 0.0357043296098709 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 0.0813487470149994 - -0.0777567028999329 - 0.2396816015243530 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 20 4 2 1 2. - 0 - -3.1357801053673029e-003 - -0.3550890982151032 - 0.0334104485809803 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - -2.6459500077180564e-004 - 0.1039851978421211 - -0.1549458950757980 - <_> - - <_> - - - - <_> - 18 2 3 1 -1. - <_> - 19 2 1 1 3. - 0 - -7.7518890611827374e-003 - 0.3072158992290497 - -0.1471019983291626 - <_> - - <_> - - - - <_> - 0 3 1 2 -1. - <_> - 0 4 1 1 2. - 0 - -1.8430210184305906e-003 - -0.3927483856678009 - 0.0468359701335430 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 21 3 1 1 2. - <_> - 20 4 1 1 2. - 0 - 2.1122969337739050e-004 - -0.2182451039552689 - 0.1224329024553299 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - 2.2105030075181276e-004 - -0.1839634031057358 - 0.0894107371568680 - <_> - - <_> - - - - <_> - 10 2 12 2 -1. - <_> - 13 2 6 2 2. - 0 - -0.1596564948558807 - 0.0961632728576660 - -0.0851516798138618 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - 0.0300882197916508 - -0.0395904183387756 - 0.4714989960193634 - <_> - - <_> - - - - <_> - 19 2 3 1 -1. - <_> - 20 2 1 1 3. - 0 - -6.0294209979474545e-003 - 0.1985325068235397 - -0.1036683991551399 - <_> - - <_> - - - - <_> - 0 2 3 1 -1. - <_> - 1 2 1 1 3. - 0 - 0.0125349396839738 - -0.0465150997042656 - 0.3729344904422760 - <_> - - <_> - - - - <_> - 20 0 2 1 -1. - <_> - 20 0 1 1 2. - 1 - 0.0249549709260464 - 0.0378106608986855 - -0.2126975953578949 - <_> - - <_> - - - - <_> - 2 0 18 3 -1. - <_> - 8 1 6 1 9. - 0 - 0.9914733767509460 - 0.0404802709817886 - -0.4234201908111572 - <_> - - <_> - - - - <_> - 13 0 3 2 -1. - <_> - 14 0 1 2 3. - 0 - 5.2983271889388561e-003 - 0.0872289612889290 - -0.2782127857208252 - <_> - - <_> - - - - <_> - 1 2 20 1 -1. - <_> - 6 2 10 1 2. - 0 - 0.1936049014329910 - -0.0953638702630997 - 0.1918828040361404 - <_> - - <_> - - - - <_> - 20 0 2 1 -1. - <_> - 20 0 1 1 2. - 1 - -0.0765724927186966 - 0.6624032855033875 - -4.9499049782752991e-003 - <_> - - <_> - - - - <_> - 8 2 3 2 -1. - <_> - 9 2 1 2 3. - 0 - 0.0288803391158581 - -0.0576803199946880 - 0.3216530978679657 - <_> - - <_> - - - - <_> - 20 0 2 1 -1. - <_> - 20 0 1 1 2. - 1 - -0.0147415297105908 - -0.0864769592881203 - 0.0324847102165222 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 0.0218243692070246 - 0.0573925487697124 - -0.3441714048385620 - <_> - - <_> - - - - <_> - 6 2 16 2 -1. - <_> - 10 2 8 2 2. - 0 - -0.2281226068735123 - -0.5248197913169861 - 6.9780298508703709e-003 - <_> - - <_> - - - - <_> - 0 2 16 2 -1. - <_> - 4 2 8 2 2. - 0 - 0.2811104953289032 - 0.0243451707065105 - -0.6498730182647705 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 11 3 2 1 2. - <_> - 9 4 2 1 2. - 0 - -0.0229572393000126 - -0.4581542909145355 - 0.0302064307034016 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - -0.0603400394320488 - 0.4640114009380341 - -0.0372259803116322 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 0 1 1 3. - 0 - 0.0275691505521536 - 0.0209768600761890 - -0.6901494860649109 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - 2.6252120733261108e-004 - -0.2385396957397461 - 0.0797715634107590 - <_> - - <_> - - - - <_> - 11 0 2 1 -1. - <_> - 11 0 1 1 2. - 0 - 0.0189698804169893 - 0.0310240201652050 - -0.2781842947006226 - <_> - - <_> - - - - <_> - 2 0 16 3 -1. - <_> - 10 0 8 3 2. - 0 - 0.5228282809257507 - 0.0171059705317020 - -0.7943431138992310 - <_> - - <_> - - - - <_> - 5 4 12 1 -1. - <_> - 8 4 6 1 2. - 0 - -0.0318946912884712 - 0.2789232134819031 - -0.0540697798132896 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 7 0 1 2 3. - 0 - 0.0153362900018692 - 0.0470543317496777 - -0.3611122071743012 - <_> - - <_> - - - - <_> - 4 2 18 3 -1. - <_> - 10 3 6 1 9. - 0 - -0.4197083115577698 - -0.5987181067466736 - 0.0114638302475214 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - -6.7562819458544254e-003 - 0.2296220064163208 - -0.0647229403257370 - <_> - - <_> - - - - <_> - 19 1 1 3 -1. - <_> - 19 2 1 1 3. - 0 - 9.8668280988931656e-003 - -0.0378440208733082 - 0.3308623135089874 - <_> - - <_> - - - - <_> - 5 0 4 1 -1. - <_> - 6 1 2 1 2. - 1 - -0.0217330995947123 - 0.1095108985900879 - -0.1400672048330307 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 12 0 1 1 2. - <_> - 11 1 1 1 2. - 0 - 0.0303408093750477 - 5.3396178409457207e-003 - -0.6631283164024353 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 1 2. - <_> - 10 1 1 1 2. - 0 - 2.7025368763133883e-004 - -0.1567120999097824 - 0.0986059904098511 - <_> - - <_> - - - - <_> - 10 0 2 5 -1. - <_> - 10 0 1 5 2. - 0 - -0.0415275506675243 - 0.2330273985862732 - -0.0623291209340096 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - -0.0617230087518692 - 0.2415892928838730 - -0.0955918580293655 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 4 1 1 3. - 0 - 5.9920018538832664e-003 - 0.0676549896597862 - -0.3348307907581329 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - 0.1078263968229294 - -0.0366013087332249 - 0.4491366147994995 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 4 1 1 3. - 0 - 0.0162226594984531 - 0.0174882691353559 - -0.5831140279769898 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - -0.0103788198903203 - -0.3565832078456879 - 0.0370058007538319 - <_> - - <_> - - - - <_> - 20 0 2 2 -1. - <_> - 21 0 1 1 2. - <_> - 20 1 1 1 2. - 0 - -8.4412395954132080e-003 - 0.1430597007274628 - -0.0507311187684536 - <_> - - <_> - - - - <_> - 0 1 8 4 -1. - <_> - 0 1 4 2 2. - <_> - 4 3 4 2 2. - 0 - 0.1460002958774567 - 0.0325158499181271 - -0.4505861103534699 - <_> - - <_> - - - - <_> - 4 2 18 3 -1. - <_> - 10 3 6 1 9. - 0 - 0.9812418222427368 - 4.8845731653273106e-003 - -0.6505978107452393 - <_> - - <_> - - - - <_> - 0 2 18 3 -1. - <_> - 6 3 6 1 9. - 0 - -0.3686679005622864 - -0.7344589829444885 - 0.0186632201075554 - -1.5075240135192871 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 7 0 1 3 2. - 1 - -0.0355198308825493 - 0.1617852002382278 - -0.3557350933551788 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 12 1 1 2 2. - 1 - 9.1728484258055687e-003 - -0.1260304003953934 - 0.1070927977561951 - <_> - - <_> - - - - <_> - 11 0 1 3 -1. - <_> - 10 1 1 1 3. - 1 - 0.2214298993349075 - -7.7310669439611956e-006 - -1.2306490478515625e+003 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 12 0 1 2 2. - 1 - 0.1121281981468201 - 9.6115162596106529e-003 - -0.5591316819190979 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 2 1 2. - 1 - 0.0214573107659817 - -0.3396573960781097 - 0.1660932004451752 - <_> - - <_> - - - - <_> - 18 0 4 2 -1. - <_> - 20 0 2 1 2. - <_> - 18 1 2 1 2. - 0 - -0.0129726100713015 - 0.2339890003204346 - -0.1611067950725555 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 1 2 1 2 2. - 0 - -6.6818781197071075e-003 - 0.1347575038671494 - -0.2744300961494446 - <_> - - <_> - - - - <_> - 21 3 1 2 -1. - <_> - 21 4 1 1 2. - 0 - 2.5116768665611744e-004 - -0.2640047967433929 - 0.1118483990430832 - <_> - - <_> - - - - <_> - 0 2 16 1 -1. - <_> - 8 2 8 1 2. - 0 - 0.1044178009033203 - -0.2772159874439240 - 0.1226371973752976 - <_> - - <_> - - - - <_> - 17 2 2 1 -1. - <_> - 17 2 1 1 2. - 0 - -0.0103076398372650 - 0.4387269914150238 - -0.2257290035486221 - <_> - - <_> - - - - <_> - 0 0 4 5 -1. - <_> - 1 0 2 5 2. - 0 - -0.0657564774155617 - -0.5489766001701355 - 0.0448703281581402 - <_> - - <_> - - - - <_> - 13 1 3 3 -1. - <_> - 14 2 1 1 9. - 0 - -0.0232425201684237 - 0.1687006950378418 - -0.2039787024259567 - <_> - - <_> - - - - <_> - 4 1 5 4 -1. - <_> - 4 3 5 2 2. - 0 - 0.0568407289683819 - -0.3538163900375366 - 0.0737606585025787 - <_> - - <_> - - - - <_> - 18 3 2 2 -1. - <_> - 19 3 1 1 2. - <_> - 18 4 1 1 2. - 0 - -2.8088671388104558e-004 - 0.0847699269652367 - -0.0890894830226898 - <_> - - <_> - - - - <_> - 8 2 4 2 -1. - <_> - 8 2 2 1 2. - <_> - 10 3 2 1 2. - 0 - -0.0288917198777199 - -0.5387725830078125 - 0.0481997393071651 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - 4.8813000321388245e-003 - -0.1096180975437164 - 0.2278506010770798 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 1 1 2. - <_> - 3 4 1 1 2. - 0 - -2.2791069932281971e-004 - 0.1515929996967316 - -0.1536172926425934 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 0 1 1 3. - 0 - 0.0172245390713215 - 0.0263692494481802 - -0.3927490115165710 - <_> - - <_> - - - - <_> - 8 0 3 1 -1. - <_> - 9 0 1 1 3. - 0 - 0.0192765109241009 - 0.0391367189586163 - -0.5336027741432190 - <_> - - <_> - - - - <_> - 18 0 4 2 -1. - <_> - 20 0 2 1 2. - <_> - 18 1 2 1 2. - 0 - -0.0353499799966812 - 0.1689237952232361 - -0.0447259806096554 - <_> - - <_> - - - - <_> - 4 0 4 1 -1. - <_> - 5 0 2 1 2. - 0 - -2.4690220016054809e-004 - 0.0976511463522911 - -0.2252393066883087 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 0 2 2 2. - 0 - -2.3808020341675729e-004 - 0.0918731689453125 - -0.2102558016777039 - <_> - - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 6 2 1 1 2. - <_> - 7 3 1 1 2. - 0 - 2.2629360319115222e-004 - -0.1301615983247757 - 0.1746802031993866 - <_> - - <_> - - - - <_> - 16 1 3 3 -1. - <_> - 17 2 1 1 9. - 0 - -0.0685128867626190 - 0.2233822047710419 - -0.2069347947835922 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 0 1 2 3. - 0 - -0.0229604393243790 - -0.4152827858924866 - 0.0558899901807308 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 2 4 2. - 0 - 0.1233180016279221 - -0.0728143826127052 - 0.3267267048358917 - <_> - - <_> - - - - <_> - 6 1 3 3 -1. - <_> - 7 2 1 1 9. - 0 - -0.1549450010061264 - -0.7887173891067505 - 0.0310064293444157 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 0 1 2 3. - 0 - -0.0314758606255054 - -0.5589601993560791 - 0.0317612513899803 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - -0.0254820995032787 - 0.2539067864418030 - -0.0870282873511314 - <_> - - <_> - - - - <_> - 17 2 2 1 -1. - <_> - 17 2 1 1 2. - 0 - -2.5384381297044456e-004 - 0.0537054501473904 - -0.1235295012593269 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 6 0 1 2 3. - 0 - -0.0272925905883312 - -0.5135846734046936 - 0.0360357984900475 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - 0.0507335886359215 - -0.0516890287399292 - 0.3995021879673004 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 0.1053168997168541 - 0.0349466502666473 - -0.5719997882843018 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - 7.6800240203738213e-003 - 0.0491173714399338 - -0.4794890880584717 - <_> - - <_> - - - - <_> - 3 2 2 1 -1. - <_> - 4 2 1 1 2. - 0 - -2.7255711029283702e-004 - 0.0928098186850548 - -0.1955388933420181 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 4 1 1 3. - 0 - -0.0105343302711844 - -0.5163537859916687 - 0.0396977588534355 - <_> - - <_> - - - - <_> - 6 4 6 1 -1. - <_> - 8 4 2 1 3. - 0 - -0.0149531802162528 - 0.1626240015029907 - -0.1271512061357498 - <_> - - <_> - - - - <_> - 5 1 16 2 -1. - <_> - 13 1 8 1 2. - <_> - 5 2 8 1 2. - 0 - -0.0604328215122223 - 0.1645521968603134 - -0.0379642993211746 - <_> - - <_> - - - - <_> - 2 4 3 1 -1. - <_> - 3 4 1 1 3. - 0 - -0.0130542898550630 - -0.6074082255363464 - 0.0316967517137527 - <_> - - <_> - - - - <_> - 6 1 14 2 -1. - <_> - 13 1 7 1 2. - <_> - 6 2 7 1 2. - 0 - 0.1608176976442337 - -6.5205618739128113e-004 - -0.4585787057876587 - <_> - - <_> - - - - <_> - 2 1 14 2 -1. - <_> - 2 1 7 1 2. - <_> - 9 2 7 1 2. - 0 - 0.0341188199818134 - -0.1164626032114029 - 0.1578840017318726 - <_> - - <_> - - - - <_> - 16 1 4 2 -1. - <_> - 16 2 4 1 2. - 0 - 0.0377329401671886 - -0.0387539491057396 - 0.1349529027938843 - <_> - - <_> - - - - <_> - 8 1 6 2 -1. - <_> - 8 1 3 1 2. - <_> - 11 2 3 1 2. - 0 - 0.0307118799537420 - 0.0477422587573528 - -0.4303537011146545 - <_> - - <_> - - - - <_> - 16 1 4 3 -1. - <_> - 16 2 4 1 3. - 0 - -0.0379499495029449 - 0.1175562962889671 - -0.1488959044218063 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 2 2 4 1 2. - 0 - 0.0293602906167507 - -0.0752530172467232 - 0.2932392060756683 - <_> - - <_> - - - - <_> - 10 0 8 5 -1. - <_> - 10 0 4 5 2. - 0 - 0.2531990110874176 - -0.1665869951248169 - 0.0894998088479042 - <_> - - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 8 1 2 3 3. - 0 - 0.1295928955078125 - -0.0557844601571560 - 0.3491880893707275 - <_> - - <_> - - - - <_> - 19 1 2 2 -1. - <_> - 20 1 1 1 2. - <_> - 19 2 1 1 2. - 0 - -8.8244248181581497e-003 - 0.2790288925170898 - -0.0682061314582825 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - 0.0787913799285889 - -0.1562068015336990 - 0.1130442023277283 - <_> - - <_> - - - - <_> - 19 0 2 1 -1. - <_> - 19 0 1 1 2. - 1 - -0.0128360297530890 - -0.2341040968894959 - 0.0688050165772438 - <_> - - <_> - - - - <_> - 0 0 20 4 -1. - <_> - 0 0 10 2 2. - <_> - 10 2 10 2 2. - 0 - -0.0795226991176605 - -0.2531400918960571 - 0.0608972907066345 - <_> - - <_> - - - - <_> - 19 1 3 4 -1. - <_> - 19 3 3 2 2. - 0 - 0.0396368205547333 - -0.2644801139831543 - 0.0823834836483002 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 11 3 11 2 2. - 0 - -0.2469912022352219 - 0.3543556034564972 - -0.0668885484337807 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -2.2949569392949343e-004 - 0.1136023998260498 - -0.1477279961109161 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -0.0133122596889734 - 0.3158606886863709 - -0.0559014193713665 - <_> - - <_> - - - - <_> - 14 0 1 2 -1. - <_> - 14 0 1 1 2. - 1 - 0.0132037801668048 - 0.0314864404499531 - -0.2641296088695526 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -0.0122691998258233 - -0.5923423767089844 - 0.0242486894130707 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 2 1 1 3. - 0 - -0.0180592201650143 - 0.3386563062667847 - -0.0806968286633492 - <_> - - <_> - - - - <_> - 7 0 2 1 -1. - <_> - 8 0 1 1 2. - 0 - 2.5429509696550667e-004 - -0.2228489965200424 - 0.0742115974426270 - <_> - - <_> - - - - <_> - 19 1 2 2 -1. - <_> - 20 1 1 1 2. - <_> - 19 2 1 1 2. - 0 - 7.8134778887033463e-003 - -0.0429794192314148 - 0.1561470925807953 - <_> - - <_> - - - - <_> - 1 1 2 2 -1. - <_> - 1 1 1 1 2. - <_> - 2 2 1 1 2. - 0 - -0.0109792295843363 - 0.2791073024272919 - -0.0565107986330986 - <_> - - <_> - - - - <_> - 21 1 1 2 -1. - <_> - 21 2 1 1 2. - 0 - -0.0179905295372009 - -0.6046596169471741 - 0.0311555694788694 - <_> - - <_> - - - - <_> - 0 1 1 2 -1. - <_> - 0 2 1 1 2. - 0 - 0.0112548498436809 - 0.0487176403403282 - -0.3375760018825531 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 0 1 1 3. - 0 - -2.6132029597647488e-004 - 0.1056291982531548 - -0.1343839019536972 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 4 2 1 2. - 0 - -5.1210080273449421e-003 - -0.5522217750549316 - 0.0265667103230953 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 0 1 1 3. - 0 - 0.0246724095195532 - 9.7258696332573891e-003 - -0.6160507798194885 - <_> - - <_> - - - - <_> - 6 3 8 2 -1. - <_> - 6 3 4 1 2. - <_> - 10 4 4 1 2. - 0 - -0.0676949620246887 - -0.7366021275520325 - 0.0195282194763422 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 0 1 1 3. - 0 - -0.0280081909149885 - -0.5081465244293213 - 0.0101704103872180 - <_> - - <_> - - - - <_> - 0 2 3 1 -1. - <_> - 1 2 1 1 3. - 0 - -7.1907560341060162e-003 - 0.1463394016027451 - -0.1010674014687538 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 0 - -0.0151786198839545 - 0.2253026068210602 - -0.0712036490440369 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 11 1 1 4 2. - 0 - -0.0177353993058205 - 0.1873757988214493 - -0.0931500867009163 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 0 1 1 3. - 0 - 2.6827311376109719e-004 - -0.0509754493832588 - 0.0780920535326004 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 0 1 1 3. - 0 - 0.0153298303484917 - 0.0317088216543198 - -0.4852918982505798 - <_> - - <_> - - - - <_> - 17 1 4 2 -1. - <_> - 19 1 2 1 2. - <_> - 17 2 2 1 2. - 0 - 2.8564469539560378e-004 - -0.0747290104627609 - 0.0735304802656174 - <_> - - <_> - - - - <_> - 1 1 4 2 -1. - <_> - 1 1 2 1 2. - <_> - 3 2 2 1 2. - 0 - -0.0221204292029142 - 0.2728720009326935 - -0.0640629082918167 - <_> - - <_> - - - - <_> - 18 1 2 1 -1. - <_> - 18 1 1 1 2. - 0 - -2.1887499315198511e-004 - 0.0630310028791428 - -0.0968450531363487 - <_> - - <_> - - - - <_> - 2 1 2 1 -1. - <_> - 3 1 1 1 2. - 0 - -2.1083210594952106e-004 - 0.1038902029395104 - -0.1652563959360123 - <_> - - <_> - - - - <_> - 18 2 2 2 -1. - <_> - 19 2 1 1 2. - <_> - 18 3 1 1 2. - 0 - -6.2754601240158081e-003 - 0.2422588020563126 - -0.0759079232811928 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 3 0 1 2 2. - 0 - -0.0237578097730875 - -0.3831805884838104 - 0.0401335097849369 - <_> - - <_> - - - - <_> - 18 2 2 2 -1. - <_> - 19 2 1 1 2. - <_> - 18 3 1 1 2. - 0 - 0.0113250697031617 - -0.0355255305767059 - 0.2116439938545227 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 1 1 1 3. - 1 - -0.0722206532955170 - -0.6267685294151306 - 0.0221659094095230 - <_> - - <_> - - - - <_> - 18 2 2 2 -1. - <_> - 19 2 1 1 2. - <_> - 18 3 1 1 2. - 0 - -0.0450176112353802 - -0.7715169787406921 - 7.7348982449620962e-004 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 2 1 1 2. - <_> - 3 3 1 1 2. - 0 - -6.2360418960452080e-003 - 0.2645697891712189 - -0.0533634796738625 - <_> - - <_> - - - - <_> - 20 2 1 2 -1. - <_> - 20 2 1 1 2. - 1 - -2.5355370598845184e-004 - 0.0403987504541874 - -0.1579526960849762 - <_> - - <_> - - - - <_> - 2 2 2 1 -1. - <_> - 2 2 1 1 2. - 1 - -0.0462715588510036 - -0.4078798890113831 - 0.0389214716851711 - <_> - - <_> - - - - <_> - 13 0 5 2 -1. - <_> - 13 1 5 1 2. - 0 - -0.0112186595797539 - 0.0743954926729202 - -0.1334968060255051 - <_> - - <_> - - - - <_> - 6 3 10 2 -1. - <_> - 6 3 5 1 2. - <_> - 11 4 5 1 2. - 0 - 0.0422749705612659 - 0.0375597998499870 - -0.3565911948680878 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 11 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - 7.1554719470441341e-003 - 0.0328388698399067 - -0.3969492018222809 - <_> - - <_> - - - - <_> - 2 2 8 3 -1. - <_> - 6 2 4 3 2. - 0 - 0.2889994978904724 - 0.0218638405203819 - -0.5641658902168274 - <_> - - <_> - - - - <_> - 12 3 3 1 -1. - <_> - 13 3 1 1 3. - 0 - -0.0198637600988150 - 0.2233767956495285 - -0.0311224795877934 - <_> - - <_> - - - - <_> - 2 4 16 1 -1. - <_> - 10 4 8 1 2. - 0 - 0.0201476793736219 - -0.1318303048610687 - 0.1064788028597832 - <_> - - <_> - - - - <_> - 12 2 3 2 -1. - <_> - 13 2 1 2 3. - 0 - 0.0210211295634508 - -0.0279414597898722 - 0.1496804952621460 - <_> - - <_> - - - - <_> - 7 2 3 2 -1. - <_> - 8 2 1 2 3. - 0 - 9.0801073238253593e-003 - -0.0714284330606461 - 0.2156967967748642 - <_> - - <_> - - - - <_> - 11 2 2 2 -1. - <_> - 12 2 1 1 2. - <_> - 11 3 1 1 2. - 0 - -0.0210751108825207 - -0.6355488896369934 - 0.0148590896278620 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 9 2 1 1 2. - <_> - 10 3 1 1 2. - 0 - -2.6902920217253268e-004 - 0.1086373031139374 - -0.1504798978567123 - <_> - - <_> - - - - <_> - 15 2 4 2 -1. - <_> - 17 2 2 1 2. - <_> - 15 3 2 1 2. - 0 - -3.1716268858872354e-004 - 0.0856569930911064 - -0.1238802000880241 - <_> - - <_> - - - - <_> - 6 0 8 5 -1. - <_> - 8 0 4 5 2. - 0 - 0.2543228864669800 - -0.0996628925204277 - 0.1379338055849075 - <_> - - <_> - - - - <_> - 13 2 2 1 -1. - <_> - 13 2 1 1 2. - 1 - 0.0351566113531590 - 0.0276070702821016 - -0.3085579872131348 - <_> - - <_> - - - - <_> - 9 2 1 2 -1. - <_> - 9 2 1 1 2. - 1 - -3.1319420668296516e-004 - 0.0933624133467674 - -0.1582736968994141 - <_> - - <_> - - - - <_> - 15 2 4 2 -1. - <_> - 17 2 2 1 2. - <_> - 15 3 2 1 2. - 0 - 2.2236700169742107e-004 - -0.0268055405467749 - 0.0416803695261478 - <_> - - <_> - - - - <_> - 3 2 4 2 -1. - <_> - 3 2 2 1 2. - <_> - 5 3 2 1 2. - 0 - -2.2599179646931589e-004 - 0.1031626984477043 - -0.1553778052330017 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 18 0 2 2 2. - 0 - 0.0131764104589820 - 0.0482045710086823 - -0.1634005010128021 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -0.0366892404854298 - -0.5666003227233887 - 0.0216245893388987 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 16 0 2 1 2. - <_> - 14 1 2 1 2. - 0 - 0.0254966802895069 - -0.0464780293405056 - 0.1221868023276329 - <_> - - <_> - - - - <_> - 11 1 3 1 -1. - <_> - 12 2 1 1 3. - 1 - 0.0127627197653055 - -0.1167680993676186 - 0.1235193982720375 - -1.4267690181732178 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 3 2 -1. - <_> - 4 2 1 2 3. - 0 - -0.0126805501058698 - 0.2194640040397644 - -0.3034295141696930 - <_> - - <_> - - - - <_> - 9 0 10 3 -1. - <_> - 9 0 5 3 2. - 0 - 0.2027722001075745 - -0.3529298901557922 - 0.0818885788321495 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - -0.0420491583645344 - 0.2480846047401428 - -0.1789755970239639 - <_> - - <_> - - - - <_> - 11 1 2 4 -1. - <_> - 11 1 1 4 2. - 0 - 0.0373815894126892 - -0.1080716997385025 - 0.1355669945478439 - <_> - - <_> - - - - <_> - 1 2 16 1 -1. - <_> - 9 2 8 1 2. - 0 - 0.0898792669177055 - -0.3144111037254334 - 0.1164997965097427 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -2.2849619563203305e-004 - 0.1204447969794273 - -0.1587626934051514 - <_> - - <_> - - - - <_> - 5 2 3 1 -1. - <_> - 6 2 1 1 3. - 0 - 0.0197688303887844 - -0.1005569025874138 - 0.3598122894763947 - <_> - - <_> - - - - <_> - 21 0 1 4 -1. - <_> - 21 2 1 2 2. - 0 - -4.6854061074554920e-003 - -0.2215726971626282 - 0.0940313562750816 - <_> - - <_> - - - - <_> - 7 2 1 2 -1. - <_> - 7 2 1 1 2. - 1 - -2.6115920627489686e-004 - 0.0738363713026047 - -0.2855063080787659 - <_> - - <_> - - - - <_> - 10 3 6 2 -1. - <_> - 12 3 2 2 3. - 0 - 0.0531009398400784 - -0.0566674806177616 - 0.2398404031991959 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -1.0975299665005878e-004 - 0.1155333966016769 - -0.2110487073659897 - <_> - - <_> - - - - <_> - 0 0 22 4 -1. - <_> - 11 0 11 2 2. - <_> - 0 2 11 2 2. - 0 - -0.3080747127532959 - -0.4916175007820129 - 0.0521330609917641 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 2 1 1 2. - <_> - 3 3 1 1 2. - 0 - 9.5257293432950974e-003 - -0.0939754992723465 - 0.3000304996967316 - <_> - - <_> - - - - <_> - 4 2 14 2 -1. - <_> - 11 2 7 1 2. - <_> - 4 3 7 1 2. - 0 - 0.0479064993560314 - 0.0510066412389278 - -0.4533003866672516 - <_> - - <_> - - - - <_> - 1 4 4 1 -1. - <_> - 2 4 2 1 2. - 0 - 8.1151742488145828e-003 - 0.0535905212163925 - -0.3858076930046082 - <_> - - <_> - - - - <_> - 8 4 6 1 -1. - <_> - 10 4 2 1 3. - 0 - 0.0115232598036528 - -0.2229443043470383 - 0.0907559692859650 - <_> - - <_> - - - - <_> - 4 0 5 4 -1. - <_> - 4 1 5 2 2. - 0 - -0.0570370294153690 - 0.1140248998999596 - -0.1793856024742127 - <_> - - <_> - - - - <_> - 16 0 4 3 -1. - <_> - 16 1 4 1 3. - 0 - -0.0963431894779205 - 0.2599610984325409 - -0.0678420215845108 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 2 1 4 1 3. - 0 - 0.0538529604673386 - -0.0825551375746727 - 0.3720957040786743 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 0 - 3.2167631434276700e-004 - -0.3507750034332275 - 0.0821119621396065 - <_> - - <_> - - - - <_> - 0 3 22 2 -1. - <_> - 0 3 11 1 2. - <_> - 11 4 11 1 2. - 0 - -0.0564907491207123 - -0.3229841887950897 - 0.0538763888180256 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -2.7906559989787638e-004 - 0.1558347046375275 - -0.2573314905166626 - <_> - - <_> - - - - <_> - 0 4 6 1 -1. - <_> - 2 4 2 1 3. - 0 - -0.0382157601416111 - -0.4869484007358551 - 0.0375617593526840 - <_> - - <_> - - - - <_> - 18 1 1 3 -1. - <_> - 18 2 1 1 3. - 0 - 7.6500251889228821e-003 - -0.0622060298919678 - 0.2777954936027527 - <_> - - <_> - - - - <_> - 1 2 6 3 -1. - <_> - 3 2 2 3 3. - 0 - 0.0223919898271561 - 0.0567261911928654 - -0.3096722066402435 - <_> - - <_> - - - - <_> - 18 1 1 3 -1. - <_> - 18 2 1 1 3. - 0 - -0.0288605708628893 - 0.2171639055013657 - -0.0595195591449738 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 3 2 1 1 3. - 0 - 6.9423289969563484e-003 - -0.0510598309338093 - 0.4046814143657684 - <_> - - <_> - - - - <_> - 21 3 1 2 -1. - <_> - 21 4 1 1 2. - 0 - 0.0140064498409629 - 0.0495527796447277 - -0.1997963041067123 - <_> - - <_> - - - - <_> - 0 3 1 2 -1. - <_> - 0 4 1 1 2. - 0 - 2.7382301050238311e-004 - -0.3052073121070862 - 0.0695639625191689 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -0.0151743097230792 - -0.3825840950012207 - 0.0219741594046354 - <_> - - <_> - - - - <_> - 4 0 2 1 -1. - <_> - 5 0 1 1 2. - 0 - -1.9322619482409209e-004 - 0.1185929030179977 - -0.1750292032957077 - <_> - - <_> - - - - <_> - 8 0 12 3 -1. - <_> - 12 1 4 1 9. - 0 - -0.5898758172988892 - -0.6428133249282837 - 0.0170734506100416 - <_> - - <_> - - - - <_> - 8 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 2.5915939477272332e-004 - -0.2325448989868164 - 0.0648522824048996 - <_> - - <_> - - - - <_> - 10 0 8 4 -1. - <_> - 10 0 4 4 2. - 0 - 0.5708745121955872 - 7.8144967555999756e-003 - -0.6534169912338257 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 11 0 2 4 2. - 0 - 0.0880111008882523 - -0.0650307089090347 - 0.2522613108158112 - <_> - - <_> - - - - <_> - 8 0 12 3 -1. - <_> - 12 1 4 1 9. - 0 - -0.0115374401211739 - 0.0258980691432953 - -0.0485799610614777 - <_> - - <_> - - - - <_> - 2 0 12 3 -1. - <_> - 6 1 4 1 9. - 0 - -0.4653395116329193 - -0.4928914904594421 - 0.0366029702126980 - <_> - - <_> - - - - <_> - 10 0 8 4 -1. - <_> - 10 0 4 4 2. - 0 - 0.6187191009521484 - -2.2136380430310965e-003 - -0.7480828166007996 - <_> - - <_> - - - - <_> - 4 0 8 4 -1. - <_> - 8 0 4 4 2. - 0 - 0.5378053188323975 - 0.0291653908789158 - -0.5173789858818054 - <_> - - <_> - - - - <_> - 10 1 6 4 -1. - <_> - 12 1 2 4 3. - 0 - 0.2519442141056061 - -0.0285676196217537 - 0.4221490025520325 - <_> - - <_> - - - - <_> - 9 2 3 3 -1. - <_> - 10 2 1 3 3. - 0 - 0.0274908300489187 - -0.1249886006116867 - 0.1562238931655884 - <_> - - <_> - - - - <_> - 10 1 6 4 -1. - <_> - 12 1 2 4 3. - 0 - 0.1806313991546631 - -0.0163250491023064 - 0.1323429048061371 - <_> - - <_> - - - - <_> - 6 1 6 4 -1. - <_> - 8 1 2 4 3. - 0 - 0.1738668978214264 - -0.0489186011254787 - 0.4147368073463440 - <_> - - <_> - - - - <_> - 6 2 10 2 -1. - <_> - 11 2 5 1 2. - <_> - 6 3 5 1 2. - 0 - -0.0499421507120132 - -0.4714230895042419 - 0.0378924496471882 - <_> - - <_> - - - - <_> - 2 1 15 3 -1. - <_> - 7 2 5 1 9. - 0 - 0.8202174901962280 - 0.0239661596715450 - -0.5435004234313965 - <_> - - <_> - - - - <_> - 14 1 2 1 -1. - <_> - 14 1 1 1 2. - 0 - 2.5848631048575044e-004 - -0.1057196035981178 - 0.0487360209226608 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -8.0050835385918617e-003 - 0.1960175931453705 - -0.0707343071699142 - <_> - - <_> - - - - <_> - 4 2 15 1 -1. - <_> - 9 2 5 1 3. - 0 - 0.3124977946281433 - -0.0346124917268753 - 0.2072722017765045 - <_> - - <_> - - - - <_> - 4 2 3 1 -1. - <_> - 5 2 1 1 3. - 0 - 0.0165950097143650 - -0.0553347915410995 - 0.3236283063888550 - <_> - - <_> - - - - <_> - 14 1 2 1 -1. - <_> - 14 1 1 1 2. - 0 - 6.6122892312705517e-003 - 0.0648118481040001 - -0.1037767007946968 - <_> - - <_> - - - - <_> - 0 1 9 2 -1. - <_> - 3 1 3 2 3. - 0 - -0.0555340386927128 - 0.0910528078675270 - -0.1942782998085022 - <_> - - <_> - - - - <_> - 21 2 1 2 -1. - <_> - 21 3 1 1 2. - 0 - -4.2657270096242428e-003 - -0.3721610009670258 - 0.0351289287209511 - <_> - - <_> - - - - <_> - 0 2 1 2 -1. - <_> - 0 3 1 1 2. - 0 - -7.1315821260213852e-003 - -0.4001424014568329 - 0.0363785400986671 - <_> - - <_> - - - - <_> - 0 3 22 1 -1. - <_> - 0 3 11 1 2. - 0 - -0.1546691060066223 - 0.2241909950971603 - -0.0645142272114754 - <_> - - <_> - - - - <_> - 0 3 16 2 -1. - <_> - 4 3 8 2 2. - 0 - -0.0567202009260654 - -0.2784695923328400 - 0.0651087835431099 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 2 1 1 3. - 0 - -0.0117585696280003 - 0.1950017958879471 - -0.0803164392709732 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - 6.2118507921695709e-003 - 0.0487297289073467 - -0.2942777872085571 - <_> - - <_> - - - - <_> - 14 0 6 2 -1. - <_> - 17 0 3 1 2. - <_> - 14 1 3 1 2. - 0 - 0.0311635509133339 - -0.0396496094763279 - 0.1087224036455154 - <_> - - <_> - - - - <_> - 2 0 6 2 -1. - <_> - 2 0 3 1 2. - <_> - 5 1 3 1 2. - 0 - -0.0187317896634340 - 0.2549884915351868 - -0.0570606589317322 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -1.9629219605121762e-004 - 0.0609826892614365 - -0.1056500002741814 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -0.0112534696236253 - 0.2410207986831665 - -0.0549335293471813 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 18 0 2 2 2. - 0 - -0.0184186305850744 - -0.2154302000999451 - 0.0418593809008598 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -0.0269794706255198 - -0.4404479861259460 - 0.0282598100602627 - <_> - - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 17 0 1 2 3. - 0 - -3.1812430825084448e-004 - 0.1126312986016274 - -0.1561287045478821 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 4 0 1 2 3. - 0 - -0.0142690502107143 - -0.2204768061637878 - 0.0639629736542702 - <_> - - <_> - - - - <_> - 12 1 2 4 -1. - <_> - 13 1 1 2 2. - <_> - 12 3 1 2 2. - 0 - 0.0410973504185677 - -0.0144041404128075 - 0.4511365890502930 - <_> - - <_> - - - - <_> - 8 1 2 4 -1. - <_> - 8 1 1 2 2. - <_> - 9 3 1 2 2. - 0 - 0.0341849811375141 - -0.0239439606666565 - 0.5334662199020386 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 0 2 2 2. - 0 - -0.0550987198948860 - -0.4417823851108551 - 0.0144759602844715 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 11 1 1 1 2. - 0 - 0.0154654402285814 - 0.0182211305946112 - -0.6235563755035400 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 16 1 1 1 2. - <_> - 15 2 1 1 2. - 0 - 5.3496570326387882e-003 - -0.1382047981023789 - 0.2178387939929962 - <_> - - <_> - - - - <_> - 7 1 8 2 -1. - <_> - 7 1 4 1 2. - <_> - 11 2 4 1 2. - 0 - 0.0499045215547085 - 0.0274669490754604 - -0.5273222923278809 - <_> - - <_> - - - - <_> - 9 2 9 3 -1. - <_> - 12 3 3 1 9. - 0 - -0.5729550123214722 - -0.8296223282814026 - 5.5375328520312905e-004 - <_> - - <_> - - - - <_> - 4 2 9 3 -1. - <_> - 7 3 3 1 9. - 0 - 0.0248066000640392 - 0.1025058031082153 - -0.1492258012294769 - <_> - - <_> - - - - <_> - 19 2 2 2 -1. - <_> - 20 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - 8.6801443248987198e-003 - -0.0758099332451820 - 0.2366416007280350 - <_> - - <_> - - - - <_> - 9 2 1 2 -1. - <_> - 9 2 1 1 2. - 1 - -0.0426608510315418 - -0.4847196936607361 - 0.0303105395287275 - <_> - - <_> - - - - <_> - 7 2 8 3 -1. - <_> - 7 2 4 3 2. - 0 - 0.2783867120742798 - -0.0308529809117317 - 0.4881013929843903 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - -0.0108723295852542 - -0.2787505090236664 - 0.0469719097018242 - <_> - - <_> - - - - <_> - 13 4 3 1 -1. - <_> - 14 4 1 1 3. - 0 - 2.8905799263156950e-004 - -0.0977130830287933 - 0.1045359000563622 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - 8.3399498835206032e-003 - -0.0567897297441959 - 0.2199099957942963 - <_> - - <_> - - - - <_> - 19 2 2 2 -1. - <_> - 20 2 1 1 2. - <_> - 19 3 1 1 2. - 0 - -4.5025609433650970e-003 - 0.1681939065456390 - -0.0471827611327171 - <_> - - <_> - - - - <_> - 1 1 2 2 -1. - <_> - 1 1 1 1 2. - <_> - 2 2 1 1 2. - 0 - 9.1141611337661743e-003 - -0.0538599304854870 - 0.2494518011808395 - <_> - - <_> - - - - <_> - 21 0 1 4 -1. - <_> - 21 2 1 2 2. - 0 - 0.0334822796285152 - 0.0396987795829773 - -0.1784003973007202 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -0.0168455094099045 - -0.2692301869392395 - 0.0555524602532387 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - 4.3367617763578892e-003 - 0.0457564890384674 - -0.2253731936216354 - <_> - - <_> - - - - <_> - 2 0 16 2 -1. - <_> - 6 0 8 2 2. - 0 - -0.1215948015451431 - 0.6139575839042664 - -0.0229580700397491 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -0.0186872798949480 - -0.3642201125621796 - 0.0236557908356190 - <_> - - <_> - - - - <_> - 3 1 16 2 -1. - <_> - 11 1 8 2 2. - 0 - -0.2913098037242889 - -0.6291968226432800 - 0.0176620502024889 - <_> - - <_> - - - - <_> - 13 4 3 1 -1. - <_> - 14 4 1 1 3. - 0 - -3.0170090030878782e-004 - 0.0790203064680099 - -0.0738237276673317 - <_> - - <_> - - - - <_> - 6 4 3 1 -1. - <_> - 7 4 1 1 3. - 0 - 2.3048979346640408e-004 - -0.1133956015110016 - 0.1254207938909531 - <_> - - <_> - - - - <_> - 11 2 2 1 -1. - <_> - 11 2 1 1 2. - 1 - 0.0317746400833130 - 0.0240910202264786 - -0.2394727021455765 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 11 0 2 3 2. - 0 - -0.0676887184381485 - 0.2068980932235718 - -0.0623617693781853 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - 0.0397858098149300 - 0.0135105196386576 - -0.6386339068412781 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -0.0200208593159914 - -0.1968978047370911 - 0.0677288100123405 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 12 1 1 2 2. - 1 - 0.0945090875029564 - 0.0180175509303808 - -0.6440523862838745 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 9 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - 6.2699890695512295e-003 - 0.0314390510320663 - -0.3640947937965393 - <_> - - <_> - - - - <_> - 4 2 16 1 -1. - <_> - 4 2 8 1 2. - 0 - -0.1304758042097092 - -0.5485221147537231 - 5.9488588012754917e-003 - <_> - - <_> - - - - <_> - 3 0 2 1 -1. - <_> - 4 0 1 1 2. - 0 - -2.7846038574352860e-004 - 0.0861910805106163 - -0.1290287971496582 - <_> - - <_> - - - - <_> - 14 0 8 5 -1. - <_> - 14 0 4 5 2. - 0 - -0.2183739989995956 - 0.1289092004299164 - -0.0562122501432896 - <_> - - <_> - - - - <_> - 0 0 8 5 -1. - <_> - 4 0 4 5 2. - 0 - 0.1850591003894806 - -0.0471936501562595 - 0.2954468131065369 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 16 1 1 1 2. - <_> - 15 2 1 1 2. - 0 - 0.0166506506502628 - -0.0225153602659702 - 0.1783117949962616 - <_> - - <_> - - - - <_> - 6 1 3 2 -1. - <_> - 7 1 1 2 3. - 0 - -2.3978849640116096e-004 - 0.0790100768208504 - -0.1559263020753861 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 16 2 1 1 9. - 0 - 0.0583770088851452 - -0.0246948692947626 - 0.3055580854415894 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 5 2 1 1 9. - 0 - -0.0584596507251263 - 0.1479811966419220 - -0.0893782526254654 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 1 2 1 3. - 0 - -0.0185263492166996 - 0.0921296998858452 - -0.0897432565689087 - <_> - - <_> - - - - <_> - 8 2 6 1 -1. - <_> - 11 2 3 1 2. - 0 - 0.0854168683290482 - -0.0263978093862534 - 0.4890831112861633 - <_> - - <_> - - - - <_> - 10 0 12 2 -1. - <_> - 13 0 6 2 2. - 0 - -0.1266379952430725 - 0.0472919195890427 - -0.0673991292715073 - <_> - - <_> - - - - <_> - 0 2 22 3 -1. - <_> - 11 2 11 3 2. - 0 - -0.1949647068977356 - 0.2069161981344223 - -0.0614933893084526 - <_> - - <_> - - - - <_> - 15 4 2 1 -1. - <_> - 15 4 1 1 2. - 0 - 0.0120370900258422 - 0.0294632297009230 - -0.6021323800086975 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 1 0 1 3 3. - 0 - -2.7944779139943421e-004 - 0.0810977965593338 - -0.1374575942754746 - <_> - - <_> - - - - <_> - 15 1 6 2 -1. - <_> - 17 1 2 2 3. - 0 - 9.7354073077440262e-003 - 0.0417893193662167 - -0.1630245000123978 - <_> - - <_> - - - - <_> - 8 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - 0.0743067711591721 - -0.1493885070085526 - 0.0783251002430916 - <_> - - <_> - - - - <_> - 11 3 4 1 -1. - <_> - 12 3 2 1 2. - 0 - 0.0144710596650839 - -0.0261145904660225 - 0.1420436054468155 - <_> - - <_> - - - - <_> - 7 3 4 1 -1. - <_> - 8 3 2 1 2. - 0 - 0.0118553396314383 - -0.0516728907823563 - 0.2699764072895050 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 1 2 1 3. - 0 - 0.0213465392589569 - -0.0338661484420300 - 0.2302772998809815 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 4 1 2 1 3. - 0 - -0.0490451715886593 - 0.2696835994720459 - -0.0548960007727146 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - -0.0358397103846073 - -0.2992103099822998 - 0.0226319395005703 - <_> - - <_> - - - - <_> - 1 2 6 1 -1. - <_> - 3 2 2 1 3. - 0 - -2.8866980574093759e-004 - 0.0606743693351746 - -0.2074286043643951 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 11 0 4 1 2. - <_> - 7 1 4 1 2. - 0 - -0.0311627201735973 - -0.2476159930229187 - 0.0501967892050743 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 0 1 1 3. - 0 - 2.8370518703013659e-004 - -0.1959448009729385 - 0.0566197708249092 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 12 0 1 1 2. - <_> - 11 1 1 1 2. - 0 - -0.0496213212609291 - 0.8667588233947754 - -3.4514570143073797e-003 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 1 2. - <_> - 10 1 1 1 2. - 0 - 2.5349689531140029e-004 - -0.1387840062379837 - 0.0827796980738640 - <_> - - <_> - - - - <_> - 10 1 3 3 -1. - <_> - 11 1 1 3 3. - 0 - 0.0579679794609547 - -0.0396481305360794 - 0.1881846934556961 - <_> - - <_> - - - - <_> - 4 3 5 2 -1. - <_> - 4 4 5 1 2. - 0 - 0.0185546502470970 - -0.1919265985488892 - 0.0630793720483780 - <_> - - <_> - - - - <_> - 14 2 2 1 -1. - <_> - 14 2 1 1 2. - 1 - 0.0196151006966829 - 0.0190081596374512 - -0.1907673031091690 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 2 1 1 2. - 1 - -0.0334483496844769 - -0.2958706915378571 - 0.0443617105484009 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -7.5647640042006969e-003 - 0.2529521882534027 - -0.1090489998459816 - <_> - - <_> - - - - <_> - 9 1 3 4 -1. - <_> - 10 1 1 4 3. - 0 - -0.0180390607565641 - 0.2877208888530731 - -0.0384894199669361 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 4 1 1 3. - 0 - -1.9565680122468621e-004 - 0.0949289873242378 - -0.1012921035289764 - <_> - - <_> - - - - <_> - 4 4 3 1 -1. - <_> - 5 4 1 1 3. - 0 - -0.0203926190733910 - -0.8009325861930847 - 0.0130648696795106 - <_> - - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 14 0 6 1 2. - <_> - 8 1 6 1 2. - 0 - -0.0903669223189354 - 0.3940427005290985 - -0.0190852805972099 - <_> - - <_> - - - - <_> - 7 0 3 3 -1. - <_> - 8 1 1 1 9. - 0 - -0.1523697972297669 - -0.6418926715850830 - 0.0175207499414682 - <_> - - <_> - - - - <_> - 13 2 1 2 -1. - <_> - 13 2 1 1 2. - 1 - -0.0771427676081657 - 0.3086620867252350 - -0.0145021099597216 - <_> - - <_> - - - - <_> - 3 4 3 1 -1. - <_> - 4 4 1 1 3. - 0 - -8.8981278240680695e-003 - -0.3348196148872376 - 0.0308049898594618 - -1.4611779451370239 - 15 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_leftear.xml b/data/haarcascades/haarcascade_mcs_leftear.xml deleted file mode 100644 index a5a0383..0000000 --- a/data/haarcascades/haarcascade_mcs_leftear.xml +++ /dev/null @@ -1,9322 +0,0 @@ - - - - - - - 12 20 - - <_> - - - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 1.2798480689525604e-001 - -7.1108317375183105e-001 - 8.3952748775482178e-001 - <_> - - <_> - - - - <_> - 0 3 12 2 -1. - <_> - 0 4 12 1 2. - 0 - 5.0366270443191752e-005 - -7.7958387136459351e-001 - 4.1161769628524780e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 1 2. - <_> - 6 19 6 1 2. - 0 - -1.1398220434784889e-002 - 5.5991190671920776e-001 - -5.2993881702423096e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - 2.8897399082779884e-002 - -9.6023030579090118e-002 - 1.8446889519691467e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -5.7543441653251648e-003 - 3.9083909988403320e-001 - -7.0798218250274658e-001 - <_> - - <_> - - - - <_> - 0 0 12 16 -1. - <_> - 0 8 12 8 2. - 0 - 1.2758660130202770e-002 - -7.6031517982482910e-001 - 2.6452711224555969e-001 - <_> - - <_> - - - - <_> - 4 0 4 1 -1. - <_> - 6 0 2 1 2. - 0 - -4.1698651330079883e-005 - 3.2332289218902588e-001 - -5.7402020692825317e-001 - -1.6897829771041870e+000 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 1.7598830163478851e-001 - -5.9234100580215454e-001 - 7.8493958711624146e-001 - <_> - - <_> - - - - <_> - 0 0 12 8 -1. - <_> - 0 4 12 4 2. - 0 - 3.8594089448451996e-002 - -6.8187582492828369e-001 - 3.8166061043739319e-001 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 4 10 6 2 3. - 1 - 1.2052910029888153e-001 - -3.7438058853149414e-001 - 5.2112519741058350e-001 - <_> - - <_> - - - - <_> - 4 12 8 8 -1. - <_> - 4 12 4 8 2. - 0 - 2.1304990351200104e-001 - 9.7819166257977486e-003 - -6.5798282623291016e-001 - <_> - - <_> - - - - <_> - 0 12 8 8 -1. - <_> - 4 12 4 8 2. - 0 - -1.9179080426692963e-001 - 8.8993859291076660e-001 - -2.3742930591106415e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - 3.7649259902536869e-003 - -9.2071659862995148e-002 - 1.5995720028877258e-001 - <_> - - <_> - - - - <_> - 3 4 6 12 -1. - <_> - 3 7 6 6 2. - 0 - -7.4397800490260124e-003 - 3.5091850161552429e-001 - -5.2880358695983887e-001 - <_> - - <_> - - - - <_> - 8 0 4 18 -1. - <_> - 8 0 2 18 2. - 0 - 8.1300012767314911e-002 - 4.7027029097080231e-002 - -4.8141419887542725e-001 - <_> - - <_> - - - - <_> - 0 0 4 18 -1. - <_> - 2 0 2 18 2. - 0 - 7.9818956553936005e-002 - -3.0336898565292358e-001 - 5.7992082834243774e-001 - <_> - - <_> - - - - <_> - 1 0 10 16 -1. - <_> - 1 8 10 8 2. - 0 - 3.9260480552911758e-002 - -6.1189621686935425e-001 - 2.4700529873371124e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 1 2. - <_> - 6 19 6 1 2. - 0 - -8.6981123313307762e-003 - 3.0427950620651245e-001 - -4.3165320158004761e-001 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 3 0 3 1 2. - 0 - 5.5766489822417498e-005 - -5.4995632171630859e-001 - 2.4196259677410126e-001 - -1.6203830242156982e+000 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 1.9991339743137360e-001 - -5.1076048612594604e-001 - 7.2653311491012573e-001 - <_> - - <_> - - - - <_> - 8 3 2 4 -1. - <_> - 7 4 2 2 2. - 1 - -1.6032690473366529e-004 - 1.1732880026102066e-001 - -1.9851410388946533e-001 - <_> - - <_> - - - - <_> - 3 3 4 6 -1. - <_> - 3 5 4 2 3. - 0 - 6.2459441833198071e-003 - -6.2454998493194580e-001 - 4.1317841410636902e-001 - <_> - - <_> - - - - <_> - 0 0 12 12 -1. - <_> - 0 6 12 6 2. - 0 - 5.5343401618301868e-003 - -8.2238370180130005e-001 - 2.2600589692592621e-001 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 4 10 6 2 3. - 1 - 1.0757610201835632e-001 - -5.5525738000869751e-001 - 4.3564280867576599e-001 - <_> - - <_> - - - - <_> - 8 3 1 8 -1. - <_> - 6 5 1 4 2. - 1 - -9.9556613713502884e-003 - 2.9808950424194336e-001 - -3.0220919847488403e-001 - <_> - - <_> - - - - <_> - 2 0 8 1 -1. - <_> - 6 0 4 1 2. - 0 - -4.8354369937442243e-005 - 4.4047379493713379e-001 - -6.6946560144424438e-001 - <_> - - <_> - - - - <_> - 11 0 1 8 -1. - <_> - 9 2 1 4 2. - 1 - 1.9743980374187231e-004 - -2.5094148516654968e-001 - 1.9814400374889374e-001 - <_> - - <_> - - - - <_> - 4 3 8 1 -1. - <_> - 6 5 4 1 2. - 1 - -4.4098760554334149e-005 - 3.0689230561256409e-001 - -6.6775608062744141e-001 - <_> - - <_> - - - - <_> - 8 4 4 13 -1. - <_> - 8 4 2 13 2. - 0 - -1.7941730096936226e-002 - 2.7399578690528870e-001 - -2.9671499133110046e-001 - <_> - - <_> - - - - <_> - 3 0 1 8 -1. - <_> - 3 4 1 4 2. - 0 - 5.3291041695047170e-005 - -6.7100298404693604e-001 - 2.4690890312194824e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 1 2. - <_> - 0 19 6 1 2. - 0 - 6.4407112076878548e-003 - -5.2723282575607300e-001 - 2.4782879650592804e-001 - <_> - - <_> - - - - <_> - 6 11 1 6 -1. - <_> - 6 11 1 3 2. - 1 - -4.9925990402698517e-002 - 8.2168322801589966e-001 - -2.4012729525566101e-001 - <_> - - <_> - - - - <_> - 8 0 4 17 -1. - <_> - 8 0 2 17 2. - 0 - 2.4148030206561089e-003 - -3.8689721375703812e-002 - 1.9318090379238129e-001 - <_> - - <_> - - - - <_> - 0 0 4 17 -1. - <_> - 2 0 2 17 2. - 0 - 6.2534123659133911e-002 - -4.1077169775962830e-001 - 6.0665780305862427e-001 - <_> - - <_> - - - - <_> - 0 12 12 8 -1. - <_> - 0 14 12 4 2. - 0 - 8.8917986431624740e-005 - -6.7601591348648071e-001 - 3.1252190470695496e-001 - <_> - - <_> - - - - <_> - 2 7 6 2 -1. - <_> - 5 7 3 2 2. - 0 - -2.2447909577749670e-004 - 1.8520550429821014e-001 - -7.7942901849746704e-001 - <_> - - <_> - - - - <_> - 3 0 7 16 -1. - <_> - 3 8 7 8 2. - 0 - 1.8156330042984337e-004 - -6.6956442594528198e-001 - 1.5837380290031433e-001 - <_> - - <_> - - - - <_> - 0 0 3 2 -1. - <_> - 0 1 3 1 2. - 0 - 5.0366270443191752e-005 - -4.6770051121711731e-001 - 2.4539180099964142e-001 - <_> - - <_> - - - - <_> - 3 8 6 8 -1. - <_> - 3 12 6 4 2. - 0 - 6.0776848840760067e-005 - -6.8354898691177368e-001 - 1.8664689362049103e-001 - -2.1234118938446045e+000 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 7 8 12 -1. - <_> - 1 7 4 6 2. - <_> - 5 13 4 6 2. - 0 - 1.5990820527076721e-001 - -6.2714368104934692e-001 - 7.2424608469009399e-001 - <_> - - <_> - - - - <_> - 6 5 2 2 -1. - <_> - 6 5 2 1 2. - 1 - 7.6372842304408550e-003 - 8.7740488350391388e-002 - -5.2430278062820435e-001 - <_> - - <_> - - - - <_> - 5 3 1 6 -1. - <_> - 5 5 1 2 3. - 0 - 6.0625150799751282e-003 - -4.3119868636131287e-001 - 4.6857520937919617e-001 - <_> - - <_> - - - - <_> - 10 11 2 7 -1. - <_> - 10 11 1 7 2. - 1 - 2.5897640734910965e-002 - 1.5866510570049286e-002 - -6.5979748964309692e-001 - <_> - - <_> - - - - <_> - 2 11 7 2 -1. - <_> - 2 11 7 1 2. - 1 - 5.8885440230369568e-002 - -2.1157009899616241e-001 - 6.7942970991134644e-001 - <_> - - <_> - - - - <_> - 2 16 10 4 -1. - <_> - 2 16 5 4 2. - 0 - 1.1850179731845856e-001 - -1.0366249829530716e-001 - 7.4645912647247314e-001 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - -1.6655250219628215e-003 - -6.7015552520751953e-001 - 2.2192029654979706e-001 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - -4.4783479097532108e-005 - 2.5404050946235657e-001 - -4.9562969803810120e-001 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -8.3481962792575359e-004 - -7.3370438814163208e-001 - 2.0266470313072205e-001 - <_> - - <_> - - - - <_> - 9 7 3 3 -1. - <_> - 9 8 3 1 3. - 0 - -9.3157468363642693e-003 - -7.3412007093429565e-001 - 7.2000503540039063e-002 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 7 5 2 3 2. - 1 - -2.9555149376392365e-002 - 5.1195901632308960e-001 - -2.5446298718452454e-001 - <_> - - <_> - - - - <_> - 8 4 4 3 -1. - <_> - 8 5 4 1 3. - 0 - -7.9029072076082230e-003 - -5.3299552202224731e-001 - 8.8295362889766693e-002 - -1.4351799488067627e+000 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 11 5 4 -1. - <_> - 4 11 5 2 2. - 1 - 9.8843306303024292e-002 - -5.0631648302078247e-001 - 6.3027667999267578e-001 - <_> - - <_> - - - - <_> - 7 4 2 4 -1. - <_> - 7 4 2 2 2. - 1 - -4.2210938408970833e-003 - 1.7837150394916534e-001 - -3.3268490433692932e-001 - <_> - - <_> - - - - <_> - 5 4 4 2 -1. - <_> - 5 4 2 2 2. - 1 - 2.9967099428176880e-002 - -4.5201331377029419e-001 - 4.6473979949951172e-001 - <_> - - <_> - - - - <_> - 8 9 2 8 -1. - <_> - 8 9 2 4 2. - 1 - -1.6702869534492493e-001 - 8.0514347553253174e-001 - -4.0616780519485474e-002 - <_> - - <_> - - - - <_> - 4 9 8 2 -1. - <_> - 4 9 4 2 2. - 1 - 1.9976759329438210e-002 - 2.0976160466670990e-001 - -7.3149591684341431e-001 - <_> - - <_> - - - - <_> - 0 0 12 8 -1. - <_> - 0 4 12 4 2. - 0 - 8.1860616803169250e-002 - -5.4268407821655273e-001 - 2.1634259819984436e-001 - <_> - - <_> - - - - <_> - 0 0 8 1 -1. - <_> - 2 0 4 1 2. - 0 - 1.2709829956293106e-002 - -2.4989350140094757e-001 - 4.7262668609619141e-001 - <_> - - <_> - - - - <_> - 0 7 12 4 -1. - <_> - 3 7 6 4 2. - 0 - -3.4979879856109619e-002 - 3.0420958995819092e-001 - -3.5224550962448120e-001 - <_> - - <_> - - - - <_> - 0 16 1 2 -1. - <_> - 0 17 1 1 2. - 0 - -1.3223739806562662e-003 - -6.9712251424789429e-001 - 1.6912660002708435e-001 - <_> - - <_> - - - - <_> - 3 16 6 4 -1. - <_> - 3 18 6 2 2. - 0 - -2.3282319307327271e-002 - 3.3972018957138062e-001 - -3.6639729142189026e-001 - <_> - - <_> - - - - <_> - 0 16 10 4 -1. - <_> - 5 16 5 4 2. - 0 - -1.5517599880695343e-001 - 7.3445862531661987e-001 - -1.8277870118618011e-001 - <_> - - <_> - - - - <_> - 8 6 4 12 -1. - <_> - 8 6 2 12 2. - 0 - -3.9222039282321930e-002 - 3.5923731327056885e-001 - -1.1233209818601608e-001 - -1.3800990581512451e+000 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 5 4 11 -1. - <_> - 2 5 2 11 2. - 0 - 6.2616936862468719e-002 - -4.8533481359481812e-001 - 6.1538851261138916e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 1 2. - <_> - 0 19 6 1 2. - 0 - 1.1619539931416512e-002 - -5.7667458057403564e-001 - 3.8557919859886169e-001 - <_> - - <_> - - - - <_> - 1 7 8 1 -1. - <_> - 5 7 4 1 2. - 0 - -5.7566948235034943e-003 - 2.6634719967842102e-001 - -8.2090580463409424e-001 - <_> - - <_> - - - - <_> - 0 0 12 10 -1. - <_> - 0 5 12 5 2. - 0 - 9.2315487563610077e-003 - -8.0720931291580200e-001 - 2.0323330163955688e-001 - <_> - - <_> - - - - <_> - 3 3 6 12 -1. - <_> - 3 7 6 4 3. - 0 - -3.3656319137662649e-003 - 2.0334909856319427e-001 - -7.4802142381668091e-001 - <_> - - <_> - - - - <_> - 1 0 10 1 -1. - <_> - 1 0 5 1 2. - 0 - 1.2655390310101211e-004 - -5.8880287408828735e-001 - 1.7631030082702637e-001 - <_> - - <_> - - - - <_> - 6 7 6 6 -1. - <_> - 4 9 6 2 3. - 1 - 1.0345769673585892e-001 - -4.2211589217185974e-001 - 3.3677190542221069e-001 - <_> - - <_> - - - - <_> - 7 2 1 8 -1. - <_> - 7 4 1 4 2. - 0 - -1.7050839960575104e-004 - 1.8885380029678345e-001 - -2.6626259088516235e-001 - <_> - - <_> - - - - <_> - 2 2 8 4 -1. - <_> - 2 4 8 2 2. - 0 - 1.1793050362030044e-004 - -7.1056002378463745e-001 - 2.2684849798679352e-001 - <_> - - <_> - - - - <_> - 0 7 12 7 -1. - <_> - 3 7 6 7 2. - 0 - -9.7460933029651642e-002 - 4.2451021075248718e-001 - -3.9501309394836426e-001 - <_> - - <_> - - - - <_> - 3 16 6 4 -1. - <_> - 3 18 6 2 2. - 0 - -1.7512679100036621e-002 - 3.6552980542182922e-001 - -3.5724669694900513e-001 - <_> - - <_> - - - - <_> - 10 2 1 18 -1. - <_> - 10 11 1 9 2. - 0 - 1.7156290414277464e-004 - -3.1259360909461975e-001 - 1.1446060240268707e-001 - <_> - - <_> - - - - <_> - 1 4 1 16 -1. - <_> - 1 12 1 8 2. - 0 - 8.5574887692928314e-002 - -2.0559160411357880e-001 - 8.9941620826721191e-001 - <_> - - <_> - - - - <_> - 4 0 4 18 -1. - <_> - 4 9 4 9 2. - 0 - 1.1759579647332430e-003 - -7.5939810276031494e-001 - 2.1389579772949219e-001 - <_> - - <_> - - - - <_> - 0 0 4 1 -1. - <_> - 2 0 2 1 2. - 0 - 8.8068292825482786e-005 - -6.0090541839599609e-001 - 2.5762718915939331e-001 - <_> - - <_> - - - - <_> - 7 2 1 8 -1. - <_> - 7 4 1 4 2. - 0 - 2.3003520618658513e-004 - -4.1466540098190308e-001 - 2.3084460198879242e-001 - <_> - - <_> - - - - <_> - 6 3 6 2 -1. - <_> - 8 5 2 2 3. - 1 - -3.4361891448497772e-004 - 3.2730078697204590e-001 - -7.4609941244125366e-001 - <_> - - <_> - - - - <_> - 7 11 2 6 -1. - <_> - 7 11 2 3 2. - 1 - 1.5595999546349049e-002 - -3.6050570011138916e-001 - 1.9414800405502319e-001 - <_> - - <_> - - - - <_> - 4 8 6 4 -1. - <_> - 6 10 2 4 3. - 1 - -6.5029867982957512e-005 - 3.4985640645027161e-001 - -5.5353438854217529e-001 - <_> - - <_> - - - - <_> - 2 0 8 2 -1. - <_> - 2 1 8 1 2. - 0 - 8.0799087299965322e-005 - -4.1298541426658630e-001 - 2.9194280505180359e-001 - <_> - - <_> - - - - <_> - 0 3 3 7 -1. - <_> - 1 3 1 7 3. - 0 - -1.7670560628175735e-002 - 5.6811487674713135e-001 - -3.0118390917778015e-001 - <_> - - <_> - - - - <_> - 8 1 4 8 -1. - <_> - 8 5 4 4 2. - 0 - 5.2467430941760540e-003 - -3.9970070123672485e-001 - 2.5405979156494141e-001 - <_> - - <_> - - - - <_> - 0 16 12 4 -1. - <_> - 0 17 12 2 2. - 0 - 2.7624730137176812e-004 - -4.6306419372558594e-001 - 2.7200910449028015e-001 - <_> - - <_> - - - - <_> - 8 1 3 8 -1. - <_> - 8 5 3 4 2. - 0 - -7.6283427188172936e-004 - 4.7710940241813660e-001 - -2.8456479310989380e-001 - <_> - - <_> - - - - <_> - 3 1 1 8 -1. - <_> - 3 5 1 4 2. - 0 - 5.4720909247407690e-005 - -5.9415602684020996e-001 - 2.8456559777259827e-001 - <_> - - <_> - - - - <_> - 8 0 1 8 -1. - <_> - 6 2 1 4 2. - 1 - -5.8523961342871189e-005 - 1.8699720501899719e-001 - -2.9498028755187988e-001 - <_> - - <_> - - - - <_> - 4 1 2 7 -1. - <_> - 5 1 1 7 2. - 0 - -2.3030990269035101e-004 - 3.1419369578361511e-001 - -5.2966248989105225e-001 - <_> - - <_> - - - - <_> - 9 6 3 5 -1. - <_> - 10 6 1 5 3. - 0 - 1.2743050465360284e-003 - -3.4386789798736572e-001 - 2.7126389741897583e-001 - <_> - - <_> - - - - <_> - 0 13 12 6 -1. - <_> - 0 15 12 2 3. - 0 - 1.1066290317103267e-003 - -4.5228588581085205e-001 - 2.4860590696334839e-001 - <_> - - <_> - - - - <_> - 0 0 12 10 -1. - <_> - 6 0 6 5 2. - <_> - 0 5 6 5 2. - 0 - -1.4225989580154419e-003 - 3.3848088979721069e-001 - -4.1214609146118164e-001 - <_> - - <_> - - - - <_> - 0 4 3 7 -1. - <_> - 1 4 1 7 3. - 0 - 1.8614599481225014e-002 - -1.9110870361328125e-001 - 6.4115452766418457e-001 - <_> - - <_> - - - - <_> - 2 2 8 2 -1. - <_> - 2 3 8 1 2. - 0 - 4.5832890464225784e-005 - -5.8493572473526001e-001 - 2.5314238667488098e-001 - <_> - - <_> - - - - <_> - 5 1 1 6 -1. - <_> - 5 3 1 2 3. - 0 - -9.9875287560280412e-005 - 3.6051398515701294e-001 - -5.3231191635131836e-001 - <_> - - <_> - - - - <_> - 7 5 4 7 -1. - <_> - 7 5 2 7 2. - 1 - -1.1277929879724979e-002 - 2.7766379714012146e-001 - -2.4176590144634247e-001 - <_> - - <_> - - - - <_> - 0 17 12 3 -1. - <_> - 6 17 6 3 2. - 0 - -1.5279600024223328e-001 - 8.3433318138122559e-001 - -1.8692030012607574e-001 - <_> - - <_> - - - - <_> - 2 10 8 10 -1. - <_> - 6 10 4 5 2. - <_> - 2 15 4 5 2. - 0 - -3.6294270306825638e-002 - 3.9919948577880859e-001 - -4.1119259595870972e-001 - <_> - - <_> - - - - <_> - 3 0 2 20 -1. - <_> - 3 5 2 10 2. - 0 - -4.5436818152666092e-002 - 6.8093067407608032e-001 - -1.4669400453567505e-001 - -2.0749111175537109e+000 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 1.6328740119934082e-001 - -6.0435330867767334e-001 - 5.5052411556243896e-001 - <_> - - <_> - - - - <_> - 0 3 12 2 -1. - <_> - 0 4 12 1 2. - 0 - 9.7092619398608804e-005 - -9.0228801965713501e-001 - 2.6281669735908508e-001 - <_> - - <_> - - - - <_> - 1 5 7 6 -1. - <_> - 1 7 7 2 3. - 0 - -2.7205731021240354e-004 - 2.8341010212898254e-001 - -8.1372922658920288e-001 - <_> - - <_> - - - - <_> - 0 0 12 14 -1. - <_> - 0 7 12 7 2. - 0 - 1.8128680530935526e-003 - -8.3362382650375366e-001 - 2.1307690441608429e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 1 2. - <_> - 6 19 6 1 2. - 0 - -8.7052993476390839e-003 - 2.8303650021553040e-001 - -7.2392731904983521e-001 - <_> - - <_> - - - - <_> - 10 10 2 4 -1. - <_> - 10 10 2 2 2. - 1 - -5.6872398999985307e-005 - 1.3844889402389526e-001 - -5.0287842750549316e-001 - <_> - - <_> - - - - <_> - 3 4 2 1 -1. - <_> - 3 4 1 1 2. - 1 - 3.7435539066791534e-002 - -1.0564589872956276e-002 - -1.5556719970703125e+003 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 9 8 2 1 3. - 0 - 1.5324270352721214e-002 - 1.3988590240478516e-001 - -6.1316817998886108e-001 - <_> - - <_> - - - - <_> - 0 0 10 2 -1. - <_> - 0 1 10 1 2. - 0 - 2.1410979330539703e-002 - -2.2393199801445007e-001 - 5.6233572959899902e-001 - <_> - - <_> - - - - <_> - 7 8 5 4 -1. - <_> - 7 9 5 2 2. - 0 - 1.9795040134340525e-004 - -2.3459529876708984e-001 - 1.3877849280834198e-001 - <_> - - <_> - - - - <_> - 1 7 2 3 -1. - <_> - 1 8 2 1 3. - 0 - -5.1461639814078808e-003 - -8.9666271209716797e-001 - 1.4354419708251953e-001 - <_> - - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 2 1 2. - 1 - -3.3491749316453934e-002 - 8.1797057390213013e-001 - -8.1737898290157318e-002 - <_> - - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 1 2 2. - 1 - -7.3674921877682209e-003 - -6.5259951353073120e-001 - 1.7211680114269257e-001 - -1.8404649496078491e+000 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 4 16 -1. - <_> - 2 0 2 16 2. - 0 - 7.3508180677890778e-002 - -4.6614921092987061e-001 - 5.0694358348846436e-001 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 1 2 1 3. - 0 - 8.5386466234922409e-003 - -2.4482139945030212e-001 - 6.0921180248260498e-001 - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 2.2265550494194031e-001 - -2.3087610304355621e-001 - 4.4181710481643677e-001 - <_> - - <_> - - - - <_> - 6 11 6 9 -1. - <_> - 6 11 3 9 2. - 0 - 7.4994042515754700e-002 - 1.1506160348653793e-001 - -5.5417829751968384e-001 - <_> - - <_> - - - - <_> - 0 11 6 9 -1. - <_> - 3 11 3 9 2. - 0 - -1.6755120456218719e-001 - 7.4653017520904541e-001 - -1.3431079685688019e-001 - <_> - - <_> - - - - <_> - 9 11 3 5 -1. - <_> - 10 12 1 5 3. - 1 - -2.4138720706105232e-002 - -4.9592089653015137e-001 - 6.2578730285167694e-002 - <_> - - <_> - - - - <_> - 1 0 3 1 -1. - <_> - 2 1 1 1 3. - 1 - 1.1620320379734039e-002 - -1.7977459728717804e-001 - 5.6873577833175659e-001 - <_> - - <_> - - - - <_> - 9 11 3 5 -1. - <_> - 10 12 1 5 3. - 1 - 4.8821419477462769e-002 - 4.2774148285388947e-002 - -6.0440838336944580e-001 - <_> - - <_> - - - - <_> - 3 11 5 3 -1. - <_> - 2 12 5 1 3. - 1 - 3.5715501755475998e-002 - -2.0169410109519958e-001 - 5.1855558156967163e-001 - <_> - - <_> - - - - <_> - 6 6 1 3 -1. - <_> - 5 7 1 1 3. - 1 - -1.7011469230055809e-002 - -6.6163742542266846e-001 - 4.5137479901313782e-002 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 7 1 1 3. - 1 - -1.6027579084038734e-002 - 5.4205197095870972e-001 - -1.8311430513858795e-001 - <_> - - <_> - - - - <_> - 7 9 3 2 -1. - <_> - 7 10 3 1 2. - 0 - 9.6712950617074966e-003 - 3.4085698425769806e-002 - -3.6544409394264221e-001 - <_> - - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - -1.0325650218874216e-003 - -7.0559221506118774e-001 - 1.2839829921722412e-001 - <_> - - <_> - - - - <_> - 10 18 1 2 -1. - <_> - 10 19 1 1 2. - 0 - -5.7438347721472383e-004 - 2.0413300395011902e-001 - -4.6021059155464172e-001 - <_> - - <_> - - - - <_> - 1 18 1 2 -1. - <_> - 1 19 1 1 2. - 0 - 1.2579349568113685e-003 - 1.9696569442749023e-001 - -4.9659618735313416e-001 - <_> - - <_> - - - - <_> - 7 9 3 2 -1. - <_> - 7 10 3 1 2. - 0 - -2.3272659629583359e-002 - -6.4083862304687500e-001 - -1.3145440258085728e-002 - <_> - - <_> - - - - <_> - 2 9 3 2 -1. - <_> - 2 10 3 1 2. - 0 - -4.8163738101720810e-003 - -7.4635922908782959e-001 - 1.1569319665431976e-001 - <_> - - <_> - - - - <_> - 8 8 4 3 -1. - <_> - 8 9 4 1 3. - 0 - 2.6880908990278840e-004 - -1.7020240426063538e-001 - 1.0989090055227280e-001 - <_> - - <_> - - - - <_> - 0 8 4 3 -1. - <_> - 0 9 4 1 3. - 0 - -9.1302618384361267e-003 - -8.6084252595901489e-001 - 1.0507579892873764e-001 - <_> - - <_> - - - - <_> - 0 0 12 8 -1. - <_> - 0 4 12 4 2. - 0 - 1.5290869772434235e-001 - -3.0442950129508972e-001 - 2.9691061377525330e-001 - -1.3563539981842041e+000 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 4 8 11 -1. - <_> - 2 4 4 11 2. - 0 - 1.0870260000228882e-001 - -3.9208391308784485e-001 - 4.2441639304161072e-001 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 9 1 1 1 3. - 0 - -8.5436011431738734e-005 - 1.1648490279912949e-001 - -1.2261509895324707e-001 - <_> - - <_> - - - - <_> - 1 0 2 3 -1. - <_> - 1 1 2 1 3. - 0 - 8.7897274643182755e-003 - -2.2223709523677826e-001 - 5.8239942789077759e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 1 2. - <_> - 0 19 6 1 2. - 0 - 1.9092390313744545e-002 - -2.8222650289535522e-001 - 3.4780630469322205e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - -1.4692190103232861e-002 - 2.4436180293560028e-001 - -4.4442260265350342e-001 - <_> - - <_> - - - - <_> - 10 12 2 6 -1. - <_> - 10 12 1 6 2. - 1 - 1.7424240708351135e-002 - 3.9642699062824249e-002 - -5.0866502523422241e-001 - <_> - - <_> - - - - <_> - 2 12 6 2 -1. - <_> - 2 12 6 1 2. - 1 - 6.9210886955261230e-002 - -1.5061080455780029e-001 - 5.4918211698532104e-001 - <_> - - <_> - - - - <_> - 4 14 8 5 -1. - <_> - 4 14 4 5 2. - 0 - 1.1516460031270981e-001 - 4.7058542259037495e-003 - -6.0872167348861694e-001 - <_> - - <_> - - - - <_> - 0 15 8 3 -1. - <_> - 4 15 4 3 2. - 0 - -9.0783968567848206e-002 - 7.6661890745162964e-001 - -1.1532770097255707e-001 - <_> - - <_> - - - - <_> - 6 7 6 6 -1. - <_> - 8 9 2 6 3. - 1 - 9.3459866940975189e-002 - 7.7324211597442627e-002 - -7.2869849205017090e-001 - <_> - - <_> - - - - <_> - 6 7 6 6 -1. - <_> - 4 9 6 2 3. - 1 - 1.4063410460948944e-001 - -3.0280780792236328e-001 - 2.9996991157531738e-001 - <_> - - <_> - - - - <_> - 5 4 2 4 -1. - <_> - 5 5 2 2 2. - 0 - 7.5702848844230175e-003 - -2.5590381026268005e-001 - 3.4416630864143372e-001 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - 8.1542655825614929e-003 - 1.2018810212612152e-001 - -8.5254168510437012e-001 - <_> - - <_> - - - - <_> - 8 15 2 3 -1. - <_> - 7 16 2 1 3. - 1 - 8.7357666343450546e-003 - -1.2177339941263199e-001 - 8.2226127386093140e-002 - <_> - - <_> - - - - <_> - 4 15 3 2 -1. - <_> - 5 16 1 2 3. - 1 - -6.9444780237972736e-003 - -6.1111962795257568e-001 - 1.3486449420452118e-001 - <_> - - <_> - - - - <_> - 9 14 3 3 -1. - <_> - 8 15 3 1 3. - 1 - -4.3000229634344578e-003 - -3.4730020165443420e-001 - 4.4554490596055984e-002 - <_> - - <_> - - - - <_> - 3 12 5 3 -1. - <_> - 2 13 5 1 3. - 1 - 4.0720161050558090e-002 - -1.2618629634380341e-001 - 6.0286152362823486e-001 - <_> - - <_> - - - - <_> - 0 0 12 2 -1. - <_> - 3 0 6 2 2. - 0 - -1.0009969584643841e-002 - -4.5014089345932007e-001 - 1.8092009425163269e-001 - <_> - - <_> - - - - <_> - 0 9 3 4 -1. - <_> - 0 10 3 2 2. - 0 - 1.1742020025849342e-002 - 8.1721372902393341e-002 - -8.0739098787307739e-001 - <_> - - <_> - - - - <_> - 8 10 4 6 -1. - <_> - 8 12 4 2 3. - 0 - -9.7789859864860773e-004 - 6.6041916608810425e-002 - -1.4142000675201416e-001 - <_> - - <_> - - - - <_> - 0 10 4 6 -1. - <_> - 0 12 4 2 3. - 0 - 3.4487970173358917e-002 - 1.0488150268793106e-001 - -7.1635431051254272e-001 - <_> - - <_> - - - - <_> - 6 5 2 3 -1. - <_> - 5 6 2 1 3. - 1 - -2.4215620011091232e-002 - -5.9454482793807983e-001 - 1.2400969862937927e-002 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 7 6 1 2 3. - 1 - -3.7082370370626450e-002 - 6.5830427408218384e-001 - -1.2158200144767761e-001 - <_> - - <_> - - - - <_> - 2 0 8 1 -1. - <_> - 2 0 4 1 2. - 0 - -4.3632909655570984e-003 - -6.5290719270706177e-001 - 1.2228529900312424e-001 - <_> - - <_> - - - - <_> - 0 5 3 2 -1. - <_> - 0 6 3 1 2. - 0 - -4.1692638769745827e-003 - -7.3107779026031494e-001 - 7.7946297824382782e-002 - <_> - - <_> - - - - <_> - 8 14 2 3 -1. - <_> - 7 15 2 1 3. - 1 - 6.0636870563030243e-002 - -1.3061979785561562e-002 - -8.0408149957656860e-001 - <_> - - <_> - - - - <_> - 4 14 3 2 -1. - <_> - 5 15 1 2 3. - 1 - 1.5371589921414852e-002 - 7.9872779548168182e-002 - -8.5363340377807617e-001 - -1.4800649881362915e+000 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 3 8 -1. - <_> - 3 4 3 4 2. - 0 - 1.5033720061182976e-002 - -5.3333657979965210e-001 - 3.4096190333366394e-001 - <_> - - <_> - - - - <_> - 3 7 8 12 -1. - <_> - 7 7 4 6 2. - <_> - 3 13 4 6 2. - 0 - -8.9624240994453430e-002 - 1.8991500139236450e-001 - -2.1448349952697754e-001 - <_> - - <_> - - - - <_> - 4 6 4 3 -1. - <_> - 4 7 4 1 3. - 0 - -5.1495251245796680e-003 - 3.6764401197433472e-001 - -3.1621339917182922e-001 - <_> - - <_> - - - - <_> - 3 11 6 8 -1. - <_> - 3 13 6 4 2. - 0 - 5.6887358427047729e-002 - -2.7120190858840942e-001 - 3.4590399265289307e-001 - <_> - - <_> - - - - <_> - 6 12 2 6 -1. - <_> - 6 12 2 3 2. - 1 - -1.2673810124397278e-001 - 8.4647309780120850e-001 - -6.7630723118782043e-002 - <_> - - <_> - - - - <_> - 4 3 8 16 -1. - <_> - 8 3 4 8 2. - <_> - 4 11 4 8 2. - 0 - -1.0681120306253433e-001 - -2.8982621431350708e-001 - 8.3181828260421753e-002 - <_> - - <_> - - - - <_> - 0 2 8 16 -1. - <_> - 0 2 4 8 2. - <_> - 4 10 4 8 2. - 0 - 1.7475779354572296e-001 - -3.5948398709297180e-001 - 3.1073129177093506e-001 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 9 1 3 1 2. - 0 - -2.4629090912640095e-003 - -6.7824071645736694e-001 - 1.1908339709043503e-001 - <_> - - <_> - - - - <_> - 0 0 3 2 -1. - <_> - 0 1 3 1 2. - 0 - 6.6053359769284725e-003 - -2.4560730159282684e-001 - 3.7791371345520020e-001 - <_> - - <_> - - - - <_> - 9 6 1 2 -1. - <_> - 9 6 1 1 2. - 1 - 1.0148379806196317e-004 - -1.0097169876098633e-001 - 8.2711093127727509e-002 - <_> - - <_> - - - - <_> - 0 1 12 2 -1. - <_> - 4 1 4 2 3. - 0 - -1.8523789942264557e-002 - -4.4592261314392090e-001 - 1.6946080327033997e-001 - <_> - - <_> - - - - <_> - 9 4 3 5 -1. - <_> - 10 4 1 5 3. - 0 - 3.6602010950446129e-003 - -1.0477670282125473e-001 - 9.4992779195308685e-002 - <_> - - <_> - - - - <_> - 0 3 4 6 -1. - <_> - 1 3 2 6 2. - 0 - -1.0257829912006855e-002 - 4.3351659178733826e-001 - -1.6978879272937775e-001 - <_> - - <_> - - - - <_> - 11 17 1 2 -1. - <_> - 11 18 1 1 2. - 0 - -9.8685777629725635e-005 - 1.7843760550022125e-001 - -2.6428279280662537e-001 - <_> - - <_> - - - - <_> - 0 17 1 2 -1. - <_> - 0 18 1 1 2. - 0 - -1.2446290347725153e-003 - -7.2253531217575073e-001 - 1.0615690052509308e-001 - <_> - - <_> - - - - <_> - 11 17 1 3 -1. - <_> - 11 18 1 1 3. - 0 - 1.1974680091952905e-004 - -3.0318620800971985e-001 - 1.4623160660266876e-001 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - 1.2079760199412704e-003 - 1.3531659543514252e-001 - -5.0457692146301270e-001 - <_> - - <_> - - - - <_> - 0 4 12 12 -1. - <_> - 0 8 12 4 3. - 0 - -1.9425910711288452e-001 - -7.1733701229095459e-001 - 8.0573573708534241e-002 - <_> - - <_> - - - - <_> - 1 5 3 6 -1. - <_> - 2 5 1 6 3. - 0 - 1.8599320203065872e-002 - -1.6972489655017853e-001 - 4.2669999599456787e-001 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 5 5 4 1 3. - 1 - 3.0704800039529800e-002 - 3.2838109880685806e-002 - -7.2923952341079712e-001 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - 2.1680949255824089e-002 - -1.6750890016555786e-001 - 4.4789049029350281e-001 - <_> - - <_> - - - - <_> - 10 4 2 3 -1. - <_> - 10 5 2 1 3. - 0 - 5.5604660883545876e-003 - 9.6391409635543823e-002 - -6.6830247640609741e-001 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 0 5 2 1 3. - 0 - -5.6784078478813171e-003 - -8.2064878940582275e-001 - 6.2949016690254211e-002 - <_> - - <_> - - - - <_> - 9 10 3 3 -1. - <_> - 8 11 3 1 3. - 1 - -3.0219739302992821e-002 - 3.3288109302520752e-001 - -8.1444039940834045e-002 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 10 3 3 2. - 1 - 2.4341929703950882e-002 - 9.3220241367816925e-002 - -6.9502758979797363e-001 - -1.3590339422225952e+000 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 4 2 -1. - <_> - 3 2 2 1 2. - <_> - 5 3 2 1 2. - 0 - -3.9169401861727238e-003 - 4.5325928926467896e-001 - -3.0284589529037476e-001 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 8 10 2 6 3. - 1 - 1.0800900310277939e-001 - 3.6738589406013489e-002 - -7.2782218456268311e-001 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 4 10 6 2 3. - 1 - 1.5356090664863586e-001 - -3.8900190591812134e-001 - 3.1287321448326111e-001 - <_> - - <_> - - - - <_> - 6 4 1 6 -1. - <_> - 4 6 1 2 3. - 1 - 8.7726805359125137e-003 - -1.5705280005931854e-001 - 8.2666940987110138e-002 - <_> - - <_> - - - - <_> - 6 4 6 1 -1. - <_> - 8 6 2 1 3. - 1 - -1.0571720078587532e-002 - 2.4971100687980652e-001 - -4.7014111280441284e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 5 6 3 1 3. - 1 - 2.7240550145506859e-002 - 6.0097638517618179e-002 - -6.6213667392730713e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 6 1 3 3. - 1 - -3.6633450537919998e-002 - 5.1044297218322754e-001 - -1.7766149342060089e-001 - <_> - - <_> - - - - <_> - 2 16 10 4 -1. - <_> - 2 16 5 4 2. - 0 - 1.3806289434432983e-001 - -4.0644191205501556e-002 - 7.8849452733993530e-001 - <_> - - <_> - - - - <_> - 0 0 12 10 -1. - <_> - 0 5 12 5 2. - 0 - 9.4720393419265747e-002 - -4.3654170632362366e-001 - 1.9054649770259857e-001 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 2 2. - 0 - -3.3387150615453720e-003 - -6.8457669019699097e-001 - 9.6802540123462677e-002 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 1 0 1 2 2. - 0 - 1.1899480159627274e-004 - -3.5843661427497864e-001 - 2.2279889881610870e-001 - <_> - - <_> - - - - <_> - 7 15 2 2 -1. - <_> - 7 15 2 1 2. - 1 - 2.9007149860262871e-003 - -1.5845039486885071e-001 - 6.6679857671260834e-002 - <_> - - <_> - - - - <_> - 0 8 2 6 -1. - <_> - 0 8 1 3 2. - <_> - 1 11 1 3 2. - 0 - 1.2376639991998672e-002 - -1.4206279814243317e-001 - 4.9320921301841736e-001 - <_> - - <_> - - - - <_> - 10 11 2 4 -1. - <_> - 9 12 2 2 2. - 1 - 6.0215988196432590e-003 - -1.4971609413623810e-001 - 2.1797719597816467e-001 - <_> - - <_> - - - - <_> - 0 16 10 4 -1. - <_> - 5 16 5 4 2. - 0 - -1.6887940466403961e-001 - 7.1833407878875732e-001 - -1.1091569811105728e-001 - <_> - - <_> - - - - <_> - 1 18 10 2 -1. - <_> - 1 19 10 1 2. - 0 - -7.4033271521329880e-003 - 2.2573550045490265e-001 - -3.2993030548095703e-001 - <_> - - <_> - - - - <_> - 0 9 2 4 -1. - <_> - 0 9 1 2 2. - <_> - 1 11 1 2 2. - 0 - -6.5029351972043514e-003 - 4.7018998861312866e-001 - -1.5201370418071747e-001 - <_> - - <_> - - - - <_> - 9 12 3 3 -1. - <_> - 8 13 3 1 3. - 1 - 1.7706790240481496e-003 - -1.4644999802112579e-001 - 9.4745017588138580e-002 - <_> - - <_> - - - - <_> - 3 12 3 3 -1. - <_> - 4 13 1 3 3. - 1 - 1.7085459083318710e-002 - 8.5357367992401123e-002 - -8.2599818706512451e-001 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 5 5 4 1 3. - 1 - -5.3032718598842621e-002 - -6.5861982107162476e-001 - -1.3727230252698064e-003 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - 2.7725089341402054e-002 - -1.4935420453548431e-001 - 4.4009518623352051e-001 - <_> - - <_> - - - - <_> - 9 12 3 3 -1. - <_> - 8 13 3 1 3. - 1 - 5.8685488998889923e-002 - 7.8679984435439110e-003 - -4.4109138846397400e-001 - <_> - - <_> - - - - <_> - 3 12 3 3 -1. - <_> - 4 13 1 3 3. - 1 - -1.0465820319950581e-002 - -5.8385229110717773e-001 - 1.0567150264978409e-001 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 5 5 3 2 2. - 1 - -4.4063638895750046e-002 - -5.9246909618377686e-001 - 5.7151052169501781e-003 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 7 5 2 3 2. - 1 - -1.1932180263102055e-002 - 2.3818169534206390e-001 - -2.8293299674987793e-001 - <_> - - <_> - - - - <_> - 9 18 2 2 -1. - <_> - 9 19 2 1 2. - 0 - -1.2644910020753741e-003 - 1.0124749690294266e-001 - -3.3939999341964722e-001 - <_> - - <_> - - - - <_> - 1 18 2 2 -1. - <_> - 1 19 2 1 2. - 0 - -1.8404610455036163e-003 - -6.7492902278900146e-001 - 9.5524467527866364e-002 - <_> - - <_> - - - - <_> - 10 6 2 3 -1. - <_> - 10 7 2 1 3. - 0 - -7.9289656132459641e-003 - -6.7770427465438843e-001 - 3.4221731126308441e-002 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - 5.7004559785127640e-003 - -1.3198739290237427e-001 - 4.2710319161415100e-001 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 6 0 1 3 2. - 0 - 1.8237680196762085e-002 - 3.0692299827933311e-002 - -8.6847299337387085e-001 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 1 1 2. - <_> - 3 14 1 1 2. - 0 - 3.2086670398712158e-003 - -1.3335919380187988e-001 - 4.3883138895034790e-001 - <_> - - <_> - - - - <_> - 10 6 2 3 -1. - <_> - 10 7 2 1 3. - 0 - 1.2446580454707146e-002 - 2.9371360316872597e-002 - -7.8926819562911987e-001 - -1.4373550415039062e+000 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 1 4 3 -1. - <_> - 2 2 4 1 3. - 0 - -1.2674730271100998e-002 - 5.0484418869018555e-001 - -2.5669950246810913e-001 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 6 5 3 1 3. - 1 - 1.1808129958808422e-002 - 6.3001699745655060e-002 - -4.0641498565673828e-001 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 5 5 2 1 2. - 0 - 2.5127220433205366e-003 - -3.2253271341323853e-001 - 3.6614939570426941e-001 - <_> - - <_> - - - - <_> - 10 10 2 6 -1. - <_> - 10 10 1 6 2. - 0 - -3.5469220019876957e-003 - 1.9579920172691345e-001 - -1.5416850149631500e-001 - <_> - - <_> - - - - <_> - 0 12 4 4 -1. - <_> - 2 12 2 4 2. - 0 - 3.9148680865764618e-002 - -2.5791868567466736e-001 - 3.3852350711822510e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - 1.3151739537715912e-001 - 2.7472509071230888e-002 - -5.5891007184982300e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -1.6689460724592209e-002 - 1.4658740162849426e-001 - -5.2727991342544556e-001 - <_> - - <_> - - - - <_> - 9 12 2 3 -1. - <_> - 8 13 2 1 3. - 1 - 6.4351540058851242e-003 - -1.2016840279102325e-001 - 1.8379710614681244e-001 - <_> - - <_> - - - - <_> - 6 12 1 6 -1. - <_> - 6 12 1 3 2. - 1 - -6.3846178352832794e-002 - 7.5390338897705078e-001 - -1.0603629797697067e-001 - <_> - - <_> - - - - <_> - 5 16 3 2 -1. - <_> - 5 17 3 1 2. - 0 - -4.6943090856075287e-003 - 2.0730340480804443e-001 - -1.6408169269561768e-001 - <_> - - <_> - - - - <_> - 3 12 3 2 -1. - <_> - 4 13 1 2 3. - 1 - 1.1263520456850529e-002 - 1.0285060107707977e-001 - -7.2724348306655884e-001 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 0 1 1 2. - 1 - 1.0440419428050518e-003 - 1.3197229802608490e-001 - -6.4476031064987183e-001 - <_> - - <_> - - - - <_> - 0 0 4 11 -1. - <_> - 2 0 2 11 2. - 0 - 2.9053710401058197e-002 - -3.2099440693855286e-001 - 1.9499249756336212e-001 - <_> - - <_> - - - - <_> - 10 11 2 3 -1. - <_> - 9 12 2 1 3. - 1 - 1.2985640205442905e-002 - -6.2498811632394791e-002 - 2.6551690697669983e-001 - <_> - - <_> - - - - <_> - 2 11 3 2 -1. - <_> - 3 12 1 2 3. - 1 - 1.4938330277800560e-002 - 8.0150052905082703e-002 - -7.6676148176193237e-001 - <_> - - <_> - - - - <_> - 9 11 3 5 -1. - <_> - 10 12 1 5 3. - 1 - -3.4180350601673126e-002 - -5.1320338249206543e-001 - -3.6074419040232897e-003 - <_> - - <_> - - - - <_> - 3 11 5 3 -1. - <_> - 2 12 5 1 3. - 1 - 4.3761111795902252e-002 - -1.4384460449218750e-001 - 4.2616510391235352e-001 - <_> - - <_> - - - - <_> - 8 12 4 2 -1. - <_> - 8 13 4 1 2. - 0 - -1.1876770295202732e-003 - 1.4837500452995300e-001 - -5.0197489559650421e-002 - <_> - - <_> - - - - <_> - 0 12 4 2 -1. - <_> - 0 13 4 1 2. - 0 - -1.3196719810366631e-002 - -7.6232409477233887e-001 - 7.9683482646942139e-002 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 9 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - -1.4940570108592510e-003 - 2.2585479915142059e-001 - -1.0884329676628113e-001 - <_> - - <_> - - - - <_> - 0 7 5 3 -1. - <_> - 0 8 5 1 3. - 0 - 9.9800303578376770e-003 - 7.7047176659107208e-002 - -8.1608718633651733e-001 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 9 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - 1.3630810426548123e-003 - -1.0334450006484985e-001 - 2.0994339883327484e-001 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 1 1 2. - <_> - 3 14 1 1 2. - 0 - -2.6497698854655027e-003 - 4.8666700720787048e-001 - -1.2183590233325958e-001 - <_> - - <_> - - - - <_> - 7 8 5 4 -1. - <_> - 7 9 5 2 2. - 0 - 2.9017059132456779e-002 - 3.0331170186400414e-002 - -5.4417270421981812e-001 - <_> - - <_> - - - - <_> - 0 5 2 8 -1. - <_> - 0 5 1 4 2. - <_> - 1 9 1 4 2. - 0 - 1.7291629686951637e-002 - -1.3578090071678162e-001 - 4.4251319766044617e-001 - <_> - - <_> - - - - <_> - 8 8 3 4 -1. - <_> - 8 9 3 2 2. - 0 - 1.9144080579280853e-003 - -8.2041606307029724e-002 - 1.1203309893608093e-001 - <_> - - <_> - - - - <_> - 1 8 3 4 -1. - <_> - 1 9 3 2 2. - 0 - 9.2138089239597321e-003 - 9.5674678683280945e-002 - -7.1387839317321777e-001 - <_> - - <_> - - - - <_> - 0 0 12 16 -1. - <_> - 0 8 12 8 2. - 0 - 1.9401769340038300e-001 - -3.3527439832687378e-001 - 1.6470989584922791e-001 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - -8.9092198759317398e-003 - 4.5958560705184937e-001 - -1.3180640339851379e-001 - <_> - - <_> - - - - <_> - 7 0 3 3 -1. - <_> - 8 0 1 3 3. - 0 - -1.6158509999513626e-002 - -8.8425397872924805e-001 - 3.6370448768138885e-002 - <_> - - <_> - - - - <_> - 3 12 5 3 -1. - <_> - 2 13 5 1 3. - 1 - -4.3315120041370392e-002 - 3.5693758726119995e-001 - -1.4853119850158691e-001 - <_> - - <_> - - - - <_> - 0 8 12 4 -1. - <_> - 3 8 6 4 2. - 0 - -6.0759939253330231e-002 - 3.1768760085105896e-001 - -1.8056009709835052e-001 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - -2.8645009733736515e-003 - 5.3059607744216919e-001 - -1.1261919885873795e-001 - <_> - - <_> - - - - <_> - 10 15 2 3 -1. - <_> - 10 16 2 1 3. - 0 - 1.1360960081219673e-002 - 3.5099871456623077e-002 - -4.7815018892288208e-001 - -1.3898090124130249e+000 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 8 1 -1. - <_> - 2 0 4 1 2. - 0 - 1.3970459811389446e-002 - -3.0530300736427307e-001 - 4.1125300526618958e-001 - <_> - - <_> - - - - <_> - 3 6 8 12 -1. - <_> - 7 6 4 6 2. - <_> - 3 12 4 6 2. - 0 - -1.1679069697856903e-001 - 1.4812999963760376e-001 - -7.0709809660911560e-002 - <_> - - <_> - - - - <_> - 5 4 3 3 -1. - <_> - 6 5 1 3 3. - 1 - 1.6397690400481224e-002 - -3.0543169379234314e-001 - 3.0162781476974487e-001 - <_> - - <_> - - - - <_> - 4 6 8 12 -1. - <_> - 8 6 4 6 2. - <_> - 4 12 4 6 2. - 0 - -2.0286109298467636e-002 - -2.3618179559707642e-001 - 1.2187310308218002e-001 - <_> - - <_> - - - - <_> - 0 5 10 14 -1. - <_> - 0 5 5 7 2. - <_> - 5 12 5 7 2. - 0 - 3.3962181210517883e-001 - -2.3415289819240570e-001 - 3.7955328822135925e-001 - <_> - - <_> - - - - <_> - 1 2 10 4 -1. - <_> - 1 4 10 2 2. - 0 - 8.0632884055376053e-003 - -5.6521987915039063e-001 - 1.2719720602035522e-001 - <_> - - <_> - - - - <_> - 0 15 1 2 -1. - <_> - 0 16 1 1 2. - 0 - -1.4234139816835523e-003 - -5.8998572826385498e-001 - 1.1668500304222107e-001 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 6 1 4 1 3. - 0 - 3.9983680471777916e-003 - -9.9398262798786163e-002 - 1.2795600295066833e-001 - <_> - - <_> - - - - <_> - 5 14 2 2 -1. - <_> - 5 14 1 2 2. - 1 - -9.4549506902694702e-003 - -5.6156420707702637e-001 - 9.9381953477859497e-002 - <_> - - <_> - - - - <_> - 0 9 12 1 -1. - <_> - 0 9 6 1 2. - 0 - 3.7270709872245789e-002 - 8.4691196680068970e-002 - -6.5302717685699463e-001 - <_> - - <_> - - - - <_> - 0 5 3 3 -1. - <_> - 0 6 3 1 3. - 0 - 8.1806071102619171e-003 - 6.4047202467918396e-002 - -7.3235487937927246e-001 - <_> - - <_> - - - - <_> - 8 12 4 3 -1. - <_> - 7 13 4 1 3. - 1 - 6.7418292164802551e-002 - 4.3028471991419792e-003 - -6.2574678659439087e-001 - <_> - - <_> - - - - <_> - 4 12 3 4 -1. - <_> - 5 13 1 4 3. - 1 - 1.8985599279403687e-002 - 7.0422857999801636e-002 - -7.7566891908645630e-001 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 7 1 2 1 3. - 0 - -3.0685300589539111e-004 - 6.0799881815910339e-002 - -7.3534972965717316e-002 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 3 1 2 1 3. - 0 - 1.0786009952425957e-002 - -1.2505950033664703e-001 - 4.8208248615264893e-001 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 2 2. - 1 - 6.9674388505518436e-003 - 8.3264723420143127e-002 - -6.9356048107147217e-001 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - 1.2767270207405090e-002 - 6.4788013696670532e-002 - -7.0968890190124512e-001 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 1 - -1.4131699688732624e-002 - -7.5622642040252686e-001 - 2.0618569105863571e-002 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 1 2. - <_> - 6 19 6 1 2. - 0 - -1.5918679535388947e-002 - 1.9603510200977325e-001 - -2.7034899592399597e-001 - <_> - - <_> - - - - <_> - 2 7 8 10 -1. - <_> - 2 12 8 5 2. - 0 - 9.9455211311578751e-003 - -4.3780571222305298e-001 - 1.1859329789876938e-001 - <_> - - <_> - - - - <_> - 0 9 2 10 -1. - <_> - 1 9 1 10 2. - 0 - 1.5286459587514400e-002 - -1.9513919949531555e-001 - 2.6915138959884644e-001 - <_> - - <_> - - - - <_> - 9 9 3 2 -1. - <_> - 10 9 1 2 3. - 0 - 5.9025101363658905e-003 - -1.6288129985332489e-001 - 3.6743709444999695e-001 - <_> - - <_> - - - - <_> - 0 9 3 2 -1. - <_> - 1 9 1 2 3. - 0 - -6.9729480892419815e-003 - 4.6202778816223145e-001 - -1.5376560389995575e-001 - <_> - - <_> - - - - <_> - 8 6 4 3 -1. - <_> - 8 7 4 1 3. - 0 - -1.9449390470981598e-002 - -5.3632599115371704e-001 - 3.1576488167047501e-002 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 0 6 2 1 3. - 0 - -4.7259521670639515e-003 - -7.3517972230911255e-001 - 7.3678806424140930e-002 - <_> - - <_> - - - - <_> - 8 8 3 3 -1. - <_> - 9 8 1 3 3. - 0 - -8.5517195984721184e-003 - 3.5986369848251343e-001 - -1.2420760095119476e-001 - <_> - - <_> - - - - <_> - 0 8 4 12 -1. - <_> - 2 8 2 12 2. - 0 - -9.8964512348175049e-002 - 6.2507808208465576e-001 - -8.6647883057594299e-002 - <_> - - <_> - - - - <_> - 6 7 1 3 -1. - <_> - 5 8 1 1 3. - 1 - -1.7731260508298874e-002 - -5.7925891876220703e-001 - 2.5198649615049362e-002 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - -2.9190430417656898e-002 - 5.7298821210861206e-001 - -1.0151000320911407e-001 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 1 - 5.4621109738945961e-003 - 4.4515479356050491e-002 - -6.6922581195831299e-001 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -6.8695018999278545e-003 - -5.8384990692138672e-001 - 8.7239846587181091e-002 - <_> - - <_> - - - - <_> - 9 10 3 1 -1. - <_> - 10 10 1 1 3. - 0 - -1.7049070447683334e-003 - 2.2694580256938934e-001 - -8.1620521843433380e-002 - <_> - - <_> - - - - <_> - 0 10 3 1 -1. - <_> - 1 10 1 1 3. - 0 - 5.8957659639418125e-003 - -1.1778759956359863e-001 - 4.2724978923797607e-001 - <_> - - <_> - - - - <_> - 10 12 2 3 -1. - <_> - 9 13 2 1 3. - 1 - 8.5842777043581009e-003 - -5.4629139602184296e-002 - 1.0813979804515839e-001 - <_> - - <_> - - - - <_> - 2 12 3 2 -1. - <_> - 3 13 1 2 3. - 1 - 1.2934260070323944e-002 - 7.0849359035491943e-002 - -7.3857682943344116e-001 - <_> - - <_> - - - - <_> - 9 10 3 3 -1. - <_> - 9 11 3 1 3. - 0 - 1.9973270595073700e-002 - 1.6626559663563967e-003 - -7.6631492376327515e-001 - <_> - - <_> - - - - <_> - 0 10 3 3 -1. - <_> - 0 11 3 1 3. - 0 - 5.5011189542710781e-003 - 8.9468717575073242e-002 - -5.3985279798507690e-001 - -1.3544019460678101e+000 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 3 2 -1. - <_> - 0 1 3 1 2. - 0 - 7.9501233994960785e-003 - -2.7952459454536438e-001 - 4.3506631255149841e-001 - <_> - - <_> - - - - <_> - 3 0 6 2 -1. - <_> - 6 0 3 1 2. - <_> - 3 1 3 1 2. - 0 - -1.5085919760167599e-002 - 5.9209001064300537e-001 - -1.6481369733810425e-001 - <_> - - <_> - - - - <_> - 1 7 8 12 -1. - <_> - 1 7 4 6 2. - <_> - 5 13 4 6 2. - 0 - 1.9475109875202179e-001 - -3.1889539957046509e-001 - 2.8196701407432556e-001 - <_> - - <_> - - - - <_> - 7 6 4 1 -1. - <_> - 7 6 2 1 2. - 0 - -2.4689928977750242e-004 - 9.6763692796230316e-002 - -1.8406489491462708e-001 - <_> - - <_> - - - - <_> - 1 0 10 2 -1. - <_> - 6 0 5 2 2. - 0 - 5.2499058656394482e-003 - 1.5704880654811859e-001 - -5.2710950374603271e-001 - <_> - - <_> - - - - <_> - 10 2 1 4 -1. - <_> - 10 2 1 2 2. - 1 - -1.2732569302897900e-004 - 5.3218118846416473e-002 - -1.6152860224246979e-001 - <_> - - <_> - - - - <_> - 2 2 4 1 -1. - <_> - 2 2 2 1 2. - 1 - -6.5984549000859261e-003 - 2.1844869852066040e-001 - -3.7529769539833069e-001 - <_> - - <_> - - - - <_> - 4 15 8 4 -1. - <_> - 4 15 4 4 2. - 0 - -1.2836559675633907e-002 - 6.1008229851722717e-002 - -1.1862020194530487e-001 - <_> - - <_> - - - - <_> - 0 14 8 5 -1. - <_> - 4 14 4 5 2. - 0 - -1.4707820117473602e-001 - 7.9065358638763428e-001 - -9.4447426497936249e-002 - <_> - - <_> - - - - <_> - 8 12 4 5 -1. - <_> - 8 12 2 5 2. - 0 - 4.8533070832490921e-002 - 4.9431171268224716e-002 - -5.9807902574539185e-001 - <_> - - <_> - - - - <_> - 0 10 4 7 -1. - <_> - 2 10 2 7 2. - 0 - 4.1398849338293076e-002 - -3.1118649244308472e-001 - 2.4850000441074371e-001 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 5 1 3 1 3. - 0 - 5.9322831220924854e-003 - -1.9105120003223419e-001 - 2.6189088821411133e-001 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 9 1 1 3. - 1 - 6.1201062053442001e-003 - -1.4400300383567810e-001 - 3.8592028617858887e-001 - <_> - - <_> - - - - <_> - 9 6 3 3 -1. - <_> - 9 7 3 1 3. - 0 - -1.2118129990994930e-002 - -5.7840502262115479e-001 - 3.1328909099102020e-002 - <_> - - <_> - - - - <_> - 0 6 3 3 -1. - <_> - 0 7 3 1 3. - 0 - 7.5321048498153687e-003 - 7.6200783252716064e-002 - -7.1263229846954346e-001 - <_> - - <_> - - - - <_> - 8 13 4 2 -1. - <_> - 8 14 4 1 2. - 0 - 9.4633679836988449e-003 - -8.1573672592639923e-002 - 1.5981380641460419e-001 - <_> - - <_> - - - - <_> - 0 6 2 3 -1. - <_> - 0 7 2 1 3. - 0 - -6.4435349777340889e-003 - -8.9533412456512451e-001 - 6.0908339917659760e-002 - <_> - - <_> - - - - <_> - 8 8 3 3 -1. - <_> - 9 8 1 3 3. - 0 - -1.3353319838643074e-002 - 5.0735729932785034e-001 - -1.4220820367336273e-001 - <_> - - <_> - - - - <_> - 0 12 5 4 -1. - <_> - 0 14 5 2 2. - 0 - -4.8206631094217300e-002 - -7.0776158571243286e-001 - 8.7017923593521118e-002 - <_> - - <_> - - - - <_> - 6 16 4 2 -1. - <_> - 8 16 2 1 2. - <_> - 6 17 2 1 2. - 0 - -8.6862186435610056e-005 - 9.2491082847118378e-002 - -1.9064180552959442e-001 - <_> - - <_> - - - - <_> - 1 12 2 2 -1. - <_> - 1 12 1 1 2. - <_> - 2 13 1 1 2. - 0 - 3.5890119615942240e-003 - -1.1369240283966064e-001 - 4.5717659592628479e-001 - <_> - - <_> - - - - <_> - 8 12 2 2 -1. - <_> - 9 12 1 1 2. - <_> - 8 13 1 1 2. - 0 - 2.5103650987148285e-003 - -9.6626877784729004e-002 - 2.8315341472625732e-001 - <_> - - <_> - - - - <_> - 0 16 1 2 -1. - <_> - 0 17 1 1 2. - 0 - -1.6438219463452697e-003 - -6.8512988090515137e-001 - 8.4855683147907257e-002 - <_> - - <_> - - - - <_> - 8 12 2 2 -1. - <_> - 9 12 1 1 2. - <_> - 8 13 1 1 2. - 0 - -1.1147640179842710e-003 - 2.0340760052204132e-001 - -9.5162183046340942e-002 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - 3.3129220828413963e-003 - -1.2348870187997818e-001 - 4.5109578967094421e-001 - <_> - - <_> - - - - <_> - 8 13 2 3 -1. - <_> - 7 14 2 1 3. - 1 - 1.2473019771277905e-002 - 8.5647627711296082e-002 - -1.7752259969711304e-001 - <_> - - <_> - - - - <_> - 4 13 3 2 -1. - <_> - 5 14 1 2 3. - 1 - 1.1887500062584877e-002 - 7.9497292637825012e-002 - -7.1333557367324829e-001 - <_> - - <_> - - - - <_> - 9 10 2 4 -1. - <_> - 10 10 1 2 2. - <_> - 9 12 1 2 2. - 0 - 4.6640802174806595e-003 - -1.1890850216150284e-001 - 1.6375760734081268e-001 - <_> - - <_> - - - - <_> - 1 10 2 4 -1. - <_> - 1 10 1 2 2. - <_> - 2 12 1 2 2. - 0 - -7.5049358420073986e-003 - 4.5544099807739258e-001 - -1.2412810325622559e-001 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 2 1 2. - 1 - 1.7780659720301628e-002 - -1.0757599771022797e-001 - 1.6240009665489197e-001 - <_> - - <_> - - - - <_> - 1 8 3 3 -1. - <_> - 2 8 1 3 3. - 0 - -6.5337750129401684e-003 - 4.3141070008277893e-001 - -1.2603540718555450e-001 - <_> - - <_> - - - - <_> - 8 10 3 3 -1. - <_> - 8 11 3 1 3. - 0 - -2.4446230381727219e-002 - -6.6479730606079102e-001 - 1.9722750410437584e-002 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 5 0 1 3 3. - 0 - 6.8284119479358196e-003 - 8.7926700711250305e-002 - -5.4765981435775757e-001 - <_> - - <_> - - - - <_> - 5 8 4 6 -1. - <_> - 5 11 4 3 2. - 0 - -1.7527850344777107e-002 - -4.7350269556045532e-001 - 1.8452549353241920e-002 - <_> - - <_> - - - - <_> - 6 5 6 1 -1. - <_> - 6 5 3 1 2. - 1 - -5.6044701486825943e-003 - 1.6700869798660278e-001 - -2.8558060526847839e-001 - <_> - - <_> - - - - <_> - 7 15 2 2 -1. - <_> - 7 15 2 1 2. - 1 - 5.6587088853120804e-002 - 9.8792626522481441e-004 - -9.0761202573776245e-001 - <_> - - <_> - - - - <_> - 5 15 2 2 -1. - <_> - 5 15 1 2 2. - 1 - -9.1678956523537636e-003 - -5.7369470596313477e-001 - 8.6971327662467957e-002 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 9 4 3 1 3. - 0 - -7.9324431717395782e-003 - -7.1619319915771484e-001 - 4.7531701624393463e-002 - -1.3085269927978516e+000 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 4 3 4 -1. - <_> - 4 5 3 2 2. - 0 - 1.1259860359132290e-002 - -3.2671540975570679e-001 - 3.7448620796203613e-001 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 0 1 1 2. - 1 - -8.0411562521476299e-005 - 1.3456510007381439e-001 - -3.5597088932991028e-001 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 1 0 1 1 2. - 1 - -1.0097360238432884e-002 - 4.2515400052070618e-001 - -2.0356260240077972e-001 - <_> - - <_> - - - - <_> - 4 6 8 12 -1. - <_> - 8 6 4 6 2. - <_> - 4 12 4 6 2. - 0 - -9.5205657184123993e-002 - -2.6214841008186340e-001 - 4.4497821480035782e-002 - <_> - - <_> - - - - <_> - 1 6 8 12 -1. - <_> - 1 6 4 6 2. - <_> - 5 12 4 6 2. - 0 - 2.1976239979267120e-001 - -2.6376900076866150e-001 - 2.7963450551033020e-001 - <_> - - <_> - - - - <_> - 10 0 2 3 -1. - <_> - 9 1 2 1 3. - 1 - -1.4373429585248232e-003 - 1.9384309649467468e-001 - -6.6377736628055573e-002 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - -2.1600460633635521e-002 - 5.2735280990600586e-001 - -1.1125139892101288e-001 - <_> - - <_> - - - - <_> - 8 10 4 3 -1. - <_> - 7 11 4 1 3. - 1 - 8.8454764336347580e-003 - -1.6414600610733032e-001 - 1.7835170030593872e-001 - <_> - - <_> - - - - <_> - 0 0 12 14 -1. - <_> - 0 7 12 7 2. - 0 - 3.5627551376819611e-002 - -5.0226557254791260e-001 - 1.2036989629268646e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 1 2. - <_> - 0 19 6 1 2. - 0 - 1.9948599860072136e-002 - -2.4443860352039337e-001 - 2.0503400266170502e-001 - <_> - - <_> - - - - <_> - 0 17 2 3 -1. - <_> - 0 18 2 1 3. - 0 - -3.0674149747937918e-003 - -5.3477287292480469e-001 - 1.1543580144643784e-001 - <_> - - <_> - - - - <_> - 10 8 2 6 -1. - <_> - 11 8 1 3 2. - <_> - 10 11 1 3 2. - 0 - -1.2012269580736756e-003 - 1.2676300108432770e-001 - -1.3938720524311066e-001 - <_> - - <_> - - - - <_> - 0 8 2 6 -1. - <_> - 0 8 1 3 2. - <_> - 1 11 1 3 2. - 0 - 1.7143359407782555e-002 - -1.0488930344581604e-001 - 4.8458871245384216e-001 - <_> - - <_> - - - - <_> - 10 17 2 3 -1. - <_> - 10 18 2 1 3. - 0 - 7.7037338633090258e-004 - -2.6416009664535522e-001 - 1.3753029704093933e-001 - <_> - - <_> - - - - <_> - 0 17 2 3 -1. - <_> - 0 18 2 1 3. - 0 - 1.9928140100091696e-003 - 1.0820219665765762e-001 - -4.6027541160583496e-001 - <_> - - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 10 8 1 3 3. - 0 - 8.1858411431312561e-003 - -1.1870039999485016e-001 - 1.8429510295391083e-001 - <_> - - <_> - - - - <_> - 0 6 3 14 -1. - <_> - 0 13 3 7 2. - 0 - 2.0016850531101227e-001 - -7.7433213591575623e-002 - 6.7445492744445801e-001 - <_> - - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 10 8 1 3 3. - 0 - -1.2134050019085407e-002 - 4.5361760258674622e-001 - -3.2230481505393982e-002 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 1 8 1 3 3. - 0 - 1.1809550225734711e-002 - -1.5140220522880554e-001 - 4.1091579198837280e-001 - <_> - - <_> - - - - <_> - 9 9 3 3 -1. - <_> - 8 10 3 1 3. - 1 - -5.3903311491012573e-002 - 2.4644249677658081e-001 - -1.6336809843778610e-002 - <_> - - <_> - - - - <_> - 3 9 3 3 -1. - <_> - 4 10 1 3 3. - 1 - 2.5369100272655487e-002 - 5.7606618851423264e-002 - -8.1810200214385986e-001 - <_> - - <_> - - - - <_> - 8 7 4 1 -1. - <_> - 8 7 2 1 2. - 0 - 4.0477071888744831e-003 - 3.4279700368642807e-002 - -3.8912689685821533e-001 - <_> - - <_> - - - - <_> - 0 7 4 1 -1. - <_> - 2 7 2 1 2. - 0 - 2.3273769766092300e-003 - -2.6318120956420898e-001 - 2.0111019909381866e-001 - <_> - - <_> - - - - <_> - 0 0 12 7 -1. - <_> - 0 0 6 7 2. - 0 - -1.4055520296096802e-002 - -4.5798641443252563e-001 - 1.0322000086307526e-001 - <_> - - <_> - - - - <_> - 3 12 4 3 -1. - <_> - 2 13 4 1 3. - 1 - 4.1040539741516113e-002 - -1.0665339976549149e-001 - 4.9921628832817078e-001 - <_> - - <_> - - - - <_> - 8 10 3 3 -1. - <_> - 8 11 3 1 3. - 0 - 1.7403350211679935e-003 - -3.0963689088821411e-002 - 9.0507246553897858e-002 - <_> - - <_> - - - - <_> - 1 10 3 3 -1. - <_> - 1 11 3 1 3. - 0 - -5.9111667796969414e-003 - -6.9301342964172363e-001 - 7.1324340999126434e-002 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 4 15 1 2 3. - 1 - -8.4086872637271881e-002 - 4.6972590684890747e-001 - -4.9859449267387390e-002 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 8 15 2 1 3. - 1 - 1.2733220355585217e-003 - -3.5704851150512695e-001 - 1.3806779682636261e-001 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 1 2 1 3. - 0 - 5.9486827813088894e-003 - -1.5816900134086609e-001 - 2.8468400239944458e-001 - <_> - - <_> - - - - <_> - 1 8 3 4 -1. - <_> - 1 9 3 2 2. - 0 - -8.6815077811479568e-003 - -7.6587718725204468e-001 - 6.2390629202127457e-002 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 1 1 2 3. - 1 - -1.0674200020730495e-002 - -5.5144512653350830e-001 - 5.6196320801973343e-002 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - 1.7951499670743942e-002 - 6.1362300068140030e-002 - -6.4841997623443604e-001 - <_> - - <_> - - - - <_> - 10 17 2 1 -1. - <_> - 10 17 1 1 2. - 0 - 1.9660689576994628e-004 - -1.4563970267772675e-001 - 9.5173902809619904e-002 - <_> - - <_> - - - - <_> - 0 17 2 1 -1. - <_> - 1 17 1 1 2. - 0 - -1.3475000159814954e-003 - -3.9846318960189819e-001 - 1.0717230290174484e-001 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 9 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - 1.3271289644762874e-003 - -7.6305247843265533e-002 - 1.5964789688587189e-001 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 1 1 2. - <_> - 3 14 1 1 2. - 0 - 3.9857891388237476e-003 - -1.0918959975242615e-001 - 3.6956569552421570e-001 - <_> - - <_> - - - - <_> - 9 10 3 2 -1. - <_> - 10 10 1 2 3. - 0 - 1.7747710226103663e-003 - -5.8550398796796799e-002 - 7.1181796491146088e-002 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 1 10 1 2 3. - 0 - -6.9627179764211178e-003 - 3.6977839469909668e-001 - -1.1677960306406021e-001 - <_> - - <_> - - - - <_> - 9 7 3 3 -1. - <_> - 9 8 3 1 3. - 0 - -9.0530123561620712e-003 - -5.3131139278411865e-001 - 4.2773369699716568e-002 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - -5.0673801451921463e-002 - 6.5122097730636597e-001 - -6.6222466528415680e-002 - <_> - - <_> - - - - <_> - 8 4 3 7 -1. - <_> - 9 4 1 7 3. - 0 - -9.9803637713193893e-003 - 1.7810410261154175e-001 - -4.8675179481506348e-002 - <_> - - <_> - - - - <_> - 2 9 3 4 -1. - <_> - 2 10 3 2 2. - 0 - 1.0967300273478031e-002 - 6.3715361058712006e-002 - -7.0216029882431030e-001 - <_> - - <_> - - - - <_> - 8 4 3 7 -1. - <_> - 9 4 1 7 3. - 0 - 7.1746408939361572e-003 - -9.5948472619056702e-002 - 1.5818059444427490e-001 - -1.3564130067825317e+000 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 7 1 1 3. - 1 - -1.4637179672718048e-002 - 4.5756229758262634e-001 - -2.5793579220771790e-001 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 9 1 1 1 3. - 0 - -1.1372080189175904e-004 - 1.4856390655040741e-001 - -1.3528409600257874e-001 - <_> - - <_> - - - - <_> - 2 0 1 3 -1. - <_> - 2 1 1 1 3. - 0 - 6.3527049496769905e-003 - -1.8282939493656158e-001 - 5.0529718399047852e-001 - <_> - - <_> - - - - <_> - 9 11 1 8 -1. - <_> - 9 15 1 4 2. - 0 - 2.4946528719738126e-004 - -3.5463958978652954e-001 - 1.1956059932708740e-001 - <_> - - <_> - - - - <_> - 0 3 12 2 -1. - <_> - 0 4 12 1 2. - 0 - 8.5882786661386490e-003 - -3.6795818805694580e-001 - 1.9289310276508331e-001 - <_> - - <_> - - - - <_> - 10 11 2 5 -1. - <_> - 10 11 1 5 2. - 1 - -5.3795471787452698e-002 - -9.2534601688385010e-001 - -3.0407099984586239e-003 - <_> - - <_> - - - - <_> - 2 11 1 8 -1. - <_> - 2 15 1 4 2. - 0 - -1.2914909981191158e-002 - 2.0769760012626648e-001 - -2.8073310852050781e-001 - <_> - - <_> - - - - <_> - 6 12 6 7 -1. - <_> - 6 12 3 7 2. - 0 - 6.5217018127441406e-002 - 9.1229602694511414e-002 - -3.9509040117263794e-001 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - -1.5482950024306774e-002 - 5.5492401123046875e-001 - -1.0178919881582260e-001 - <_> - - <_> - - - - <_> - 6 12 6 7 -1. - <_> - 6 12 3 7 2. - 0 - -7.0964470505714417e-002 - -6.0590541362762451e-001 - 3.3235780894756317e-002 - <_> - - <_> - - - - <_> - 0 12 6 7 -1. - <_> - 3 12 3 7 2. - 0 - -1.4792110025882721e-001 - 6.8140488862991333e-001 - -9.2882059514522552e-002 - <_> - - <_> - - - - <_> - 8 2 1 8 -1. - <_> - 6 4 1 4 2. - 1 - 3.2156299799680710e-002 - -1.3000990450382233e-001 - 1.6143409907817841e-001 - <_> - - <_> - - - - <_> - 4 2 8 1 -1. - <_> - 6 4 4 1 2. - 1 - -5.5202730000019073e-003 - 1.8147900700569153e-001 - -3.2928371429443359e-001 - <_> - - <_> - - - - <_> - 9 10 3 3 -1. - <_> - 8 11 3 1 3. - 1 - 1.7749259248375893e-002 - -6.7472197115421295e-002 - 2.4095970392227173e-001 - <_> - - <_> - - - - <_> - 3 10 3 3 -1. - <_> - 4 11 1 3 3. - 1 - -1.4773460105061531e-002 - -7.1976912021636963e-001 - 7.0244252681732178e-002 - <_> - - <_> - - - - <_> - 2 0 8 2 -1. - <_> - 4 0 4 2 2. - 0 - -2.1384380757808685e-002 - -6.6300392150878906e-001 - 6.1542339622974396e-002 - <_> - - <_> - - - - <_> - 6 7 3 2 -1. - <_> - 7 8 1 2 3. - 1 - 1.1285319924354553e-002 - -1.1147149652242661e-001 - 4.2070099711418152e-001 - <_> - - <_> - - - - <_> - 3 4 6 12 -1. - <_> - 3 8 6 4 3. - 0 - 5.3818488959223032e-004 - 1.3580459356307983e-001 - -3.6389431357383728e-001 - <_> - - <_> - - - - <_> - 0 7 3 3 -1. - <_> - 0 8 3 1 3. - 0 - -4.5372340828180313e-003 - -6.2848389148712158e-001 - 7.5644947588443756e-002 - <_> - - <_> - - - - <_> - 8 11 4 6 -1. - <_> - 8 13 4 2 3. - 0 - -5.8880869299173355e-002 - -4.4123521447181702e-001 - 5.2693258039653301e-003 - <_> - - <_> - - - - <_> - 0 11 4 6 -1. - <_> - 0 13 4 2 3. - 0 - 3.7623539566993713e-002 - 6.0741778463125229e-002 - -7.3273491859436035e-001 - <_> - - <_> - - - - <_> - 3 17 8 2 -1. - <_> - 7 17 4 1 2. - <_> - 3 18 4 1 2. - 0 - 4.9864239990711212e-003 - -9.5100089907646179e-002 - 1.3218070566654205e-001 - <_> - - <_> - - - - <_> - 0 14 10 5 -1. - <_> - 5 14 5 5 2. - 0 - 1.5848229825496674e-001 - -2.3477560281753540e-001 - 2.0766119658946991e-001 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - -2.2148280404508114e-003 - 1.3150349259376526e-001 - -7.2531886398792267e-002 - <_> - - <_> - - - - <_> - 1 11 3 1 -1. - <_> - 2 11 1 1 3. - 0 - -2.4197169113904238e-003 - 3.4369221329689026e-001 - -1.3603129982948303e-001 - <_> - - <_> - - - - <_> - 9 1 3 6 -1. - <_> - 10 2 1 6 3. - 1 - 1.3667210005223751e-002 - -1.1352819949388504e-001 - 1.8905560672283173e-001 - <_> - - <_> - - - - <_> - 0 0 12 18 -1. - <_> - 0 9 12 9 2. - 0 - 3.4907150268554688e-001 - -2.0564649999141693e-001 - 2.0814339816570282e-001 - <_> - - <_> - - - - <_> - 8 6 1 2 -1. - <_> - 8 6 1 1 2. - 1 - -2.3180799558758736e-002 - -7.0410561561584473e-001 - 6.5354611724615097e-003 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - -2.4704890325665474e-002 - 4.3212160468101501e-001 - -1.0485579818487167e-001 - <_> - - <_> - - - - <_> - 9 1 3 6 -1. - <_> - 10 2 1 6 3. - 1 - 3.5061739385128021e-002 - -5.6936308741569519e-002 - 2.4053120613098145e-001 - <_> - - <_> - - - - <_> - 3 1 6 3 -1. - <_> - 2 2 6 1 3. - 1 - -2.8482209891080856e-002 - -6.4425909519195557e-001 - 6.7065469920635223e-002 - <_> - - <_> - - - - <_> - 9 11 2 3 -1. - <_> - 8 12 2 1 3. - 1 - 9.4022173434495926e-003 - -8.7327830493450165e-002 - 1.0236190259456635e-001 - <_> - - <_> - - - - <_> - 3 11 3 2 -1. - <_> - 4 12 1 2 3. - 1 - 1.2662390246987343e-002 - 6.4649492502212524e-002 - -6.6464841365814209e-001 - <_> - - <_> - - - - <_> - 8 5 4 4 -1. - <_> - 8 6 4 2 2. - 0 - -1.8630980048328638e-004 - 8.8812537491321564e-002 - -1.4801080524921417e-001 - <_> - - <_> - - - - <_> - 0 5 4 4 -1. - <_> - 0 6 4 2 2. - 0 - -6.3631217926740646e-003 - -6.1257928609848022e-001 - 7.0822767913341522e-002 - <_> - - <_> - - - - <_> - 5 17 3 3 -1. - <_> - 5 18 3 1 3. - 0 - -3.2741650938987732e-003 - 1.6412730515003204e-001 - -1.3364849984645844e-001 - <_> - - <_> - - - - <_> - 4 15 1 3 -1. - <_> - 4 16 1 1 3. - 0 - 3.4096399322152138e-003 - -1.2046200037002563e-001 - 3.2251781225204468e-001 - <_> - - <_> - - - - <_> - 10 10 2 4 -1. - <_> - 11 10 1 2 2. - <_> - 10 12 1 2 2. - 0 - -2.0664960611611605e-003 - 8.0544687807559967e-002 - -3.9290331304073334e-002 - <_> - - <_> - - - - <_> - 0 10 2 4 -1. - <_> - 0 10 1 2 2. - <_> - 1 12 1 2 2. - 0 - -7.1488898247480392e-003 - 3.5944211483001709e-001 - -1.1370600014925003e-001 - <_> - - <_> - - - - <_> - 9 4 3 6 -1. - <_> - 10 4 1 6 3. - 0 - 1.4608979690819979e-003 - -1.4393359422683716e-001 - 1.0468409955501556e-001 - <_> - - <_> - - - - <_> - 0 4 3 6 -1. - <_> - 1 4 1 6 3. - 0 - -1.2510320171713829e-002 - 3.0024001002311707e-001 - -1.3041430711746216e-001 - <_> - - <_> - - - - <_> - 10 7 2 6 -1. - <_> - 11 7 1 3 2. - <_> - 10 10 1 3 2. - 0 - -1.6470119357109070e-002 - -3.4044870734214783e-001 - 2.2476559504866600e-002 - <_> - - <_> - - - - <_> - 0 7 2 6 -1. - <_> - 0 7 1 3 2. - <_> - 1 10 1 3 2. - 0 - -1.3765309937298298e-002 - 4.4677600264549255e-001 - -9.7284018993377686e-002 - <_> - - <_> - - - - <_> - 10 8 2 3 -1. - <_> - 10 9 2 1 3. - 0 - 1.0946969996439293e-004 - -2.0872430503368378e-001 - 1.5401780605316162e-001 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - -6.9605209864675999e-003 - -8.2299548387527466e-001 - 4.8897851258516312e-002 - -1.2748670578002930e+000 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 4 1 -1. - <_> - 2 0 2 1 2. - 0 - 4.9184081144630909e-003 - -3.2976099848747253e-001 - 3.1599700450897217e-001 - <_> - - <_> - - - - <_> - 4 6 4 3 -1. - <_> - 4 7 4 1 3. - 0 - -8.4240734577178955e-003 - 3.2350379228591919e-001 - -2.4553489685058594e-001 - <_> - - <_> - - - - <_> - 0 8 10 10 -1. - <_> - 0 8 5 5 2. - <_> - 5 13 5 5 2. - 0 - 2.0760910212993622e-001 - -2.7401238679885864e-001 - 2.4197450280189514e-001 - <_> - - <_> - - - - <_> - 8 0 1 8 -1. - <_> - 8 0 1 4 2. - 1 - -1.5002899803221226e-002 - 8.3533883094787598e-002 - -2.5596448779106140e-001 - <_> - - <_> - - - - <_> - 1 6 4 1 -1. - <_> - 3 6 2 1 2. - 0 - 2.2144610993564129e-003 - -2.2534610331058502e-001 - 2.2740550339221954e-001 - <_> - - <_> - - - - <_> - 8 0 1 8 -1. - <_> - 8 0 1 4 2. - 1 - -6.0699690133333206e-002 - 1.8549209833145142e-001 - -1.9505530595779419e-002 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 6 13 1 3 2. - 1 - -5.6538339704275131e-002 - 6.1330437660217285e-001 - -8.7735809385776520e-002 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 19 12 1 2. - 0 - -1.4412499964237213e-002 - 2.4093009531497955e-001 - -2.7344560623168945e-001 - <_> - - <_> - - - - <_> - 3 18 1 2 -1. - <_> - 3 19 1 1 2. - 0 - -1.4219420263543725e-003 - -6.0177552700042725e-001 - 1.0058429837226868e-001 - <_> - - <_> - - - - <_> - 10 10 2 6 -1. - <_> - 10 10 1 6 2. - 0 - 1.6331190243363380e-002 - 2.1288860589265823e-002 - -5.0142019987106323e-001 - <_> - - <_> - - - - <_> - 0 10 2 6 -1. - <_> - 1 10 1 6 2. - 0 - 1.4106729999184608e-002 - -1.8390950560569763e-001 - 2.6597890257835388e-001 - <_> - - <_> - - - - <_> - 8 0 1 8 -1. - <_> - 8 0 1 4 2. - 1 - -4.9360690172761679e-004 - 3.0524199828505516e-002 - -2.0498749613761902e-001 - <_> - - <_> - - - - <_> - 4 2 4 2 -1. - <_> - 4 2 2 1 2. - <_> - 6 3 2 1 2. - 0 - -7.0101441815495491e-003 - 4.0488889813423157e-001 - -1.1826159805059433e-001 - <_> - - <_> - - - - <_> - 0 8 12 2 -1. - <_> - 0 8 6 2 2. - 0 - 6.4736358821392059e-002 - 9.0163238346576691e-002 - -4.8485979437828064e-001 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 5 0 2 2 2. - 0 - -6.7224488593637943e-003 - -5.4630178213119507e-001 - 7.3308691382408142e-002 - <_> - - <_> - - - - <_> - 6 0 3 3 -1. - <_> - 7 0 1 3 3. - 0 - -1.2748160399496555e-002 - -6.7641848325729370e-001 - 3.2798580825328827e-002 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 0 1 3 3. - 0 - -7.3234830051660538e-003 - -6.3869500160217285e-001 - 5.4413169622421265e-002 - <_> - - <_> - - - - <_> - 6 5 1 3 -1. - <_> - 5 6 1 1 3. - 1 - -1.7713790759444237e-002 - -7.4989777803421021e-001 - 6.3041099347174168e-003 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - -1.1022159829735756e-002 - 4.7562441229820251e-001 - -8.7812356650829315e-002 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 11 1 1 2 2. - <_> - 10 3 1 2 2. - 0 - -7.2062062099575996e-003 - -5.1175302267074585e-001 - 3.8222119212150574e-002 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - 7.8669954091310501e-003 - -1.0822050273418427e-001 - 4.3007129430770874e-001 - <_> - - <_> - - - - <_> - 9 8 3 3 -1. - <_> - 9 9 3 1 3. - 0 - 1.4753219671547413e-002 - 3.0923029407858849e-002 - -5.8399969339370728e-001 - <_> - - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 1 2 2. - 1 - -8.7396129965782166e-003 - -5.5709302425384521e-001 - 6.5057590603828430e-002 - <_> - - <_> - - - - <_> - 6 8 2 1 -1. - <_> - 6 8 1 1 2. - 0 - -1.8765570130199194e-003 - 2.0753450691699982e-001 - -1.0404630005359650e-001 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - 6.1403261497616768e-003 - -8.8196322321891785e-002 - 5.0393581390380859e-001 - <_> - - <_> - - - - <_> - 5 5 2 3 -1. - <_> - 5 6 2 1 3. - 0 - -6.2455530278384686e-003 - 4.5692878961563110e-001 - -8.8871538639068604e-002 - <_> - - <_> - - - - <_> - 1 6 3 3 -1. - <_> - 1 7 3 1 3. - 0 - -6.5213078632950783e-003 - -7.3358172178268433e-001 - 6.1022911220788956e-002 - <_> - - <_> - - - - <_> - 8 1 1 8 -1. - <_> - 6 3 1 4 2. - 1 - 8.4276527166366577e-002 - -5.1953801885247231e-003 - -7.2847050428390503e-001 - <_> - - <_> - - - - <_> - 4 1 8 1 -1. - <_> - 6 3 4 1 2. - 1 - 1.2186209671199322e-002 - 8.0246433615684509e-002 - -4.9406829476356506e-001 - <_> - - <_> - - - - <_> - 8 13 3 4 -1. - <_> - 7 14 3 2 2. - 1 - -5.2070740610361099e-002 - 5.3785991668701172e-001 - -2.6184149086475372e-002 - <_> - - <_> - - - - <_> - 5 5 1 8 -1. - <_> - 5 7 1 4 2. - 0 - -1.8056540284305811e-003 - 1.2499610334634781e-001 - -3.1014269590377808e-001 - <_> - - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 8 12 3 1 3. - 1 - 3.5525551065802574e-003 - -1.4355179667472839e-001 - 9.3508958816528320e-002 - <_> - - <_> - - - - <_> - 4 13 4 3 -1. - <_> - 5 14 2 3 2. - 1 - 2.1722750738263130e-002 - 5.4289009422063828e-002 - -6.9004470109939575e-001 - <_> - - <_> - - - - <_> - 8 4 3 4 -1. - <_> - 9 5 1 4 3. - 1 - 1.5696860849857330e-002 - -6.2646992504596710e-002 - 5.2328252792358398e-001 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - 1.1486239731311798e-002 - -1.7067709565162659e-001 - 2.5379261374473572e-001 - <_> - - <_> - - - - <_> - 8 4 3 4 -1. - <_> - 9 5 1 4 3. - 1 - -7.0110350847244263e-002 - 2.1845239400863647e-001 - -3.2540921121835709e-002 - <_> - - <_> - - - - <_> - 4 4 4 3 -1. - <_> - 3 5 4 1 3. - 1 - -2.3832129314541817e-002 - -7.2852367162704468e-001 - 5.6103359907865524e-002 - <_> - - <_> - - - - <_> - 6 8 4 2 -1. - <_> - 6 9 4 1 2. - 0 - 1.8152900040149689e-002 - 7.9692779108881950e-003 - -5.0108677148818970e-001 - <_> - - <_> - - - - <_> - 2 8 5 2 -1. - <_> - 2 9 5 1 2. - 0 - -4.9337781965732574e-003 - -5.4861277341842651e-001 - 7.4599482119083405e-002 - <_> - - <_> - - - - <_> - 6 13 6 4 -1. - <_> - 6 15 6 2 2. - 0 - -2.8721539303660393e-002 - -5.0967568159103394e-001 - 1.3899230398237705e-002 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 6.0404408723115921e-003 - 8.0196216702461243e-002 - -4.5811289548873901e-001 - <_> - - <_> - - - - <_> - 11 1 1 3 -1. - <_> - 10 2 1 1 3. - 1 - -1.7407380044460297e-002 - -6.7178148031234741e-001 - 7.8524583950638771e-003 - <_> - - <_> - - - - <_> - 1 1 3 1 -1. - <_> - 2 2 1 1 3. - 1 - 1.8755920231342316e-002 - -7.0715762674808502e-002 - 5.2900022268295288e-001 - <_> - - <_> - - - - <_> - 8 4 3 7 -1. - <_> - 9 4 1 7 3. - 0 - 7.5297430157661438e-003 - -5.4971348494291306e-002 - 1.2586890161037445e-001 - <_> - - <_> - - - - <_> - 1 4 3 7 -1. - <_> - 2 4 1 7 3. - 0 - 2.7714699506759644e-002 - -9.4051122665405273e-002 - 3.9269289374351501e-001 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 2 2. - 1 - -1.9136169925332069e-002 - -6.1292767524719238e-001 - 4.3676119297742844e-002 - <_> - - <_> - - - - <_> - 1 6 3 4 -1. - <_> - 2 6 1 4 3. - 0 - -1.1729629710316658e-002 - 4.0649351477622986e-001 - -1.0054980218410492e-001 - <_> - - <_> - - - - <_> - 10 0 2 3 -1. - <_> - 10 0 1 3 2. - 1 - 2.6842709630727768e-003 - 6.1806179583072662e-002 - -2.6040008664131165e-001 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 1.3504150323569775e-002 - 6.3247829675674438e-002 - -6.1916601657867432e-001 - <_> - - <_> - - - - <_> - 10 5 1 3 -1. - <_> - 10 6 1 1 3. - 0 - -4.8922952264547348e-003 - -7.3288178443908691e-001 - 4.1912440210580826e-002 - -1.2878630161285400e+000 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 1 2 1 3. - 0 - 1.0124780237674713e-002 - -2.2478839755058289e-001 - 4.9562188982963562e-001 - <_> - - <_> - - - - <_> - 6 1 6 9 -1. - <_> - 6 4 6 3 3. - 0 - 2.0572949945926666e-001 - 2.6126179844141006e-002 - -7.9092139005661011e-001 - <_> - - <_> - - - - <_> - 4 1 2 9 -1. - <_> - 4 4 2 3 3. - 0 - 1.7348840832710266e-002 - -3.8796889781951904e-001 - 2.0708920061588287e-001 - <_> - - <_> - - - - <_> - 4 1 8 18 -1. - <_> - 8 1 4 9 2. - <_> - 4 10 4 9 2. - 0 - -2.5478509068489075e-001 - -5.7850080728530884e-001 - 1.2234980240464211e-002 - <_> - - <_> - - - - <_> - 4 14 4 6 -1. - <_> - 4 17 4 3 2. - 0 - -2.8602819889783859e-002 - 1.7568160593509674e-001 - -3.7877011299133301e-001 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 11 1 1 2 2. - <_> - 10 3 1 2 2. - 0 - 9.1557251289486885e-003 - 5.8734539896249771e-002 - -5.3387188911437988e-001 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - -6.7997328005731106e-003 - 4.2286089062690735e-001 - -1.5031290054321289e-001 - <_> - - <_> - - - - <_> - 5 0 4 17 -1. - <_> - 5 0 2 17 2. - 0 - -9.0167991816997528e-002 - -4.7068008780479431e-001 - 1.9146749749779701e-002 - <_> - - <_> - - - - <_> - 3 0 4 17 -1. - <_> - 5 0 2 17 2. - 0 - -2.0075060427188873e-002 - 1.5215730667114258e-001 - -3.0286580324172974e-001 - <_> - - <_> - - - - <_> - 8 9 2 8 -1. - <_> - 8 9 2 4 2. - 1 - -1.5905030071735382e-001 - 4.8262810707092285e-001 - -5.5345159024000168e-002 - <_> - - <_> - - - - <_> - 0 8 12 12 -1. - <_> - 6 8 6 12 2. - 0 - 1.0053060203790665e-001 - -3.1768739223480225e-001 - 1.8654659390449524e-001 - <_> - - <_> - - - - <_> - 7 12 2 2 -1. - <_> - 8 12 1 1 2. - <_> - 7 13 1 1 2. - 0 - 2.9778450261801481e-003 - -4.3355960398912430e-002 - 3.0445128679275513e-001 - <_> - - <_> - - - - <_> - 0 9 4 3 -1. - <_> - 0 10 4 1 3. - 0 - -6.8455971777439117e-003 - -6.5422862768173218e-001 - 5.7101141661405563e-002 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 5 5 2 1 3. - 1 - -2.3462900891900063e-002 - -7.4357628822326660e-001 - 1.1618070304393768e-002 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 2 1 2. - <_> - 6 1 2 1 2. - 0 - 8.4667708724737167e-003 - -1.1318150162696838e-001 - 3.4910741448402405e-001 - <_> - - <_> - - - - <_> - 11 0 1 12 -1. - <_> - 11 6 1 6 2. - 0 - 2.9225839301943779e-002 - -3.8572481274604797e-001 - 2.5479009747505188e-001 - <_> - - <_> - - - - <_> - 1 2 1 18 -1. - <_> - 1 11 1 9 2. - 0 - 1.1265130341053009e-001 - -9.8677836358547211e-002 - 7.0809727907180786e-001 - <_> - - <_> - - - - <_> - 6 5 4 5 -1. - <_> - 6 5 2 5 2. - 1 - 1.0059010237455368e-001 - 3.9431888610124588e-002 - -2.0872689783573151e-001 - <_> - - <_> - - - - <_> - 1 7 8 2 -1. - <_> - 5 7 4 2 2. - 0 - -1.4622969552874565e-002 - 1.0739020258188248e-001 - -4.4337108731269836e-001 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 2 2. - 1 - 5.9183081611990929e-003 - 2.2479789331555367e-002 - -4.7095221281051636e-001 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - -1.1137289926409721e-002 - -5.3821432590484619e-001 - 7.1250103414058685e-002 - <_> - - <_> - - - - <_> - 8 9 2 8 -1. - <_> - 8 9 2 4 2. - 1 - 2.0612619817256927e-001 - 2.5029089301824570e-003 - -5.5134499073028564e-001 - <_> - - <_> - - - - <_> - 4 9 8 2 -1. - <_> - 4 9 4 2 2. - 1 - 1.9606389105319977e-002 - 6.8830899894237518e-002 - -5.8748298883438110e-001 - <_> - - <_> - - - - <_> - 9 11 2 3 -1. - <_> - 8 12 2 1 3. - 1 - 1.4237780123949051e-002 - -1.0993599891662598e-001 - 2.2019009292125702e-001 - <_> - - <_> - - - - <_> - 3 11 3 2 -1. - <_> - 4 12 1 2 3. - 1 - -1.1579900048673153e-002 - -6.0401040315628052e-001 - 6.1112940311431885e-002 - <_> - - <_> - - - - <_> - 8 12 2 2 -1. - <_> - 9 12 1 1 2. - <_> - 8 13 1 1 2. - 0 - 2.7201389893889427e-003 - -8.6882777512073517e-002 - 2.1160760521888733e-001 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - 4.3311892077326775e-003 - -8.5722766816616058e-002 - 4.3251448869705200e-001 - <_> - - <_> - - - - <_> - 7 13 2 2 -1. - <_> - 8 13 1 1 2. - <_> - 7 14 1 1 2. - 0 - 1.4856910565868020e-003 - -3.5430859774351120e-002 - 1.4321969449520111e-001 - <_> - - <_> - - - - <_> - 3 13 2 2 -1. - <_> - 3 13 1 1 2. - <_> - 4 14 1 1 2. - 0 - -2.4972909595817327e-003 - 4.2610010504722595e-001 - -1.0974500328302383e-001 - <_> - - <_> - - - - <_> - 9 10 3 3 -1. - <_> - 9 11 3 1 3. - 0 - 1.3857520185410976e-002 - 2.1762149408459663e-002 - -4.7706019878387451e-001 - <_> - - <_> - - - - <_> - 3 2 7 3 -1. - <_> - 2 3 7 1 3. - 1 - -2.3594869300723076e-002 - -4.6244761347770691e-001 - 7.9718932509422302e-002 - <_> - - <_> - - - - <_> - 10 18 2 2 -1. - <_> - 10 19 2 1 2. - 0 - -3.0481400899589062e-003 - 1.7503540217876434e-001 - -2.9865878820419312e-001 - <_> - - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 0 19 2 1 2. - 0 - -1.3127359561622143e-003 - -5.5913221836090088e-001 - 7.1896396577358246e-002 - <_> - - <_> - - - - <_> - 10 2 2 1 -1. - <_> - 10 2 1 1 2. - 0 - -4.3319691903889179e-003 - -8.0651438236236572e-001 - 1.5199059620499611e-002 - <_> - - <_> - - - - <_> - 0 2 2 1 -1. - <_> - 1 2 1 1 2. - 0 - -3.6742340307682753e-003 - 4.2407768964767456e-001 - -9.2443756759166718e-002 - <_> - - <_> - - - - <_> - 9 3 3 6 -1. - <_> - 10 3 1 6 3. - 0 - 2.5564959272742271e-002 - 2.9059829190373421e-002 - -4.8274171352386475e-001 - <_> - - <_> - - - - <_> - 0 3 3 6 -1. - <_> - 1 3 1 6 3. - 0 - 2.8129860758781433e-002 - -8.0184653401374817e-002 - 5.2279758453369141e-001 - <_> - - <_> - - - - <_> - 9 10 3 3 -1. - <_> - 9 11 3 1 3. - 0 - 8.8039072579704225e-005 - -7.4344098567962646e-002 - 9.4045989215373993e-002 - <_> - - <_> - - - - <_> - 0 10 3 3 -1. - <_> - 0 11 3 1 3. - 0 - -4.6100970357656479e-003 - -5.1046329736709595e-001 - 7.0259310305118561e-002 - <_> - - <_> - - - - <_> - 9 11 2 2 -1. - <_> - 10 11 1 1 2. - <_> - 9 12 1 1 2. - 0 - 2.4607360828667879e-003 - -7.3687382042407990e-002 - 1.7185910046100616e-001 - <_> - - <_> - - - - <_> - 1 11 2 2 -1. - <_> - 1 11 1 1 2. - <_> - 2 12 1 1 2. - 0 - -1.8461809959262609e-003 - 3.2514411211013794e-001 - -1.2517750263214111e-001 - <_> - - <_> - - - - <_> - 9 12 1 3 -1. - <_> - 8 13 1 1 3. - 1 - 2.6498539955355227e-004 - -1.0129640251398087e-001 - 5.4491110146045685e-002 - <_> - - <_> - - - - <_> - 6 12 4 2 -1. - <_> - 6 12 4 1 2. - 1 - 1.3974959962069988e-002 - 1.0203190147876740e-001 - -3.9044409990310669e-001 - <_> - - <_> - - - - <_> - 9 12 1 3 -1. - <_> - 8 13 1 1 3. - 1 - 3.3575310371816158e-003 - -6.4226530492305756e-002 - 5.4202359169721603e-002 - <_> - - <_> - - - - <_> - 3 12 3 1 -1. - <_> - 4 13 1 1 3. - 1 - 7.3201949708163738e-003 - 5.9934031218290329e-002 - -6.0588258504867554e-001 - <_> - - <_> - - - - <_> - 7 12 2 2 -1. - <_> - 8 12 1 1 2. - <_> - 7 13 1 1 2. - 0 - -1.2428000336512923e-003 - 1.1665280163288116e-001 - -7.2288237512111664e-002 - <_> - - <_> - - - - <_> - 3 12 2 2 -1. - <_> - 3 12 1 1 2. - <_> - 4 13 1 1 2. - 0 - -1.8044740427285433e-003 - 3.4149900078773499e-001 - -9.8468907177448273e-002 - <_> - - <_> - - - - <_> - 10 6 1 3 -1. - <_> - 10 7 1 1 3. - 0 - -4.8408531583845615e-003 - -5.3094178438186646e-001 - 3.1446449458599091e-002 - <_> - - <_> - - - - <_> - 0 0 3 2 -1. - <_> - 0 1 3 1 2. - 0 - 4.5861881226301193e-003 - -1.6896879673004150e-001 - 1.9897870719432831e-001 - <_> - - <_> - - - - <_> - 11 16 1 4 -1. - <_> - 11 17 1 2 2. - 0 - 1.3223010115325451e-002 - 2.6502050459384918e-002 - -6.1782538890838623e-001 - <_> - - <_> - - - - <_> - 0 16 1 4 -1. - <_> - 0 17 1 2 2. - 0 - -1.3310019858181477e-003 - -3.7018761038780212e-001 - 8.9922286570072174e-002 - <_> - - <_> - - - - <_> - 11 16 1 3 -1. - <_> - 11 17 1 1 3. - 0 - -1.4923400012776256e-003 - -3.2771658897399902e-001 - 6.3753470778465271e-002 - <_> - - <_> - - - - <_> - 0 16 1 3 -1. - <_> - 0 17 1 1 3. - 0 - 2.3128539323806763e-003 - 5.8098889887332916e-002 - -5.7217907905578613e-001 - <_> - - <_> - - - - <_> - 6 8 2 3 -1. - <_> - 5 9 2 1 3. - 1 - -3.9470911026000977e-002 - -5.9376251697540283e-001 - 2.4938920978456736e-003 - <_> - - <_> - - - - <_> - 6 8 3 2 -1. - <_> - 7 9 1 2 3. - 1 - 1.1061299592256546e-002 - -9.7631797194480896e-002 - 3.4335118532180786e-001 - <_> - - <_> - - - - <_> - 8 14 2 2 -1. - <_> - 9 14 1 1 2. - <_> - 8 15 1 1 2. - 0 - 1.7588209593668580e-003 - -3.3723760396242142e-002 - 1.8667000532150269e-001 - -1.3936669826507568e+000 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 6 5 3 -1. - <_> - 3 7 5 1 3. - 0 - -4.3175318278372288e-003 - 2.6701891422271729e-001 - -3.5374870896339417e-001 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 9 1 1 1 3. - 0 - 1.3007350265979767e-002 - 8.7024876847863197e-003 - -7.5992470979690552e-001 - <_> - - <_> - - - - <_> - 2 0 1 3 -1. - <_> - 2 1 1 1 3. - 0 - 4.8762829974293709e-003 - -2.0284099876880646e-001 - 4.1433459520339966e-001 - <_> - - <_> - - - - <_> - 8 5 4 11 -1. - <_> - 8 5 2 11 2. - 0 - -1.0705440305173397e-002 - 2.0144259929656982e-001 - -2.9292601346969604e-001 - <_> - - <_> - - - - <_> - 1 15 4 2 -1. - <_> - 1 15 2 1 2. - <_> - 3 16 2 1 2. - 0 - -4.4717481359839439e-003 - 2.9785239696502686e-001 - -2.1515479683876038e-001 - <_> - - <_> - - - - <_> - 7 3 3 10 -1. - <_> - 8 3 1 10 3. - 0 - -1.0971710085868835e-001 - -9.0043932199478149e-001 - 4.1688669472932816e-002 - <_> - - <_> - - - - <_> - 2 3 3 10 -1. - <_> - 3 3 1 10 3. - 0 - 2.4193130433559418e-002 - -1.7109879851341248e-001 - 3.1211599707603455e-001 - <_> - - <_> - - - - <_> - 8 13 3 2 -1. - <_> - 9 14 1 2 3. - 1 - 2.4174679070711136e-002 - 2.8407519683241844e-002 - -5.3422790765762329e-001 - <_> - - <_> - - - - <_> - 4 13 2 3 -1. - <_> - 3 14 2 1 3. - 1 - 2.1222220733761787e-002 - -1.1979670077562332e-001 - 4.4222798943519592e-001 - <_> - - <_> - - - - <_> - 0 1 12 6 -1. - <_> - 0 4 12 3 2. - 0 - 2.6180870831012726e-002 - -5.3708368539810181e-001 - 8.5554197430610657e-002 - <_> - - <_> - - - - <_> - 1 6 2 4 -1. - <_> - 1 7 2 2 2. - 0 - -4.6309800818562508e-003 - -6.3450610637664795e-001 - 7.8415229916572571e-002 - <_> - - <_> - - - - <_> - 10 4 2 3 -1. - <_> - 10 5 2 1 3. - 0 - -6.1208908446133137e-003 - -5.8184450864791870e-001 - 5.6262150406837463e-002 - <_> - - <_> - - - - <_> - 3 0 6 2 -1. - <_> - 3 0 3 1 2. - <_> - 6 1 3 1 2. - 0 - 2.4345550686120987e-002 - -8.2362763583660126e-002 - 5.2085632085800171e-001 - <_> - - <_> - - - - <_> - 7 0 3 3 -1. - <_> - 8 0 1 3 3. - 0 - -1.0590479709208012e-002 - -5.8450412750244141e-001 - 3.7550948560237885e-002 - <_> - - <_> - - - - <_> - 2 0 3 3 -1. - <_> - 3 0 1 3 3. - 0 - -8.4336008876562119e-003 - -7.2815698385238647e-001 - 4.3281048536300659e-002 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 5 5 3 1 3. - 1 - 2.5999199599027634e-002 - 2.3103030398488045e-002 - -4.7821858525276184e-001 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - 2.5073610246181488e-002 - -1.0790230333805084e-001 - 3.5499471426010132e-001 - <_> - - <_> - - - - <_> - 4 2 8 16 -1. - <_> - 8 2 4 8 2. - <_> - 4 10 4 8 2. - 0 - 2.9070028662681580e-001 - 6.3703400082886219e-003 - -8.6412417888641357e-001 - <_> - - <_> - - - - <_> - 0 2 8 16 -1. - <_> - 0 2 4 8 2. - <_> - 4 10 4 8 2. - 0 - 1.7590269446372986e-001 - -2.5589939951896667e-001 - 1.6987270116806030e-001 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 6 13 3 1 2. - 1 - -3.2584410160779953e-002 - -6.2721168994903564e-001 - 1.8344789743423462e-002 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 6 13 1 3 2. - 1 - -4.1382450610399246e-002 - 5.4475349187850952e-001 - -1.0436189919710159e-001 - <_> - - <_> - - - - <_> - 10 9 2 7 -1. - <_> - 10 9 1 7 2. - 0 - -8.6197769269347191e-003 - 1.4069239795207977e-001 - -4.0490731596946716e-002 - <_> - - <_> - - - - <_> - 3 18 1 2 -1. - <_> - 3 19 1 1 2. - 0 - 2.0080020185559988e-003 - 9.3814283609390259e-002 - -4.5978298783302307e-001 - <_> - - <_> - - - - <_> - 2 18 8 2 -1. - <_> - 6 18 4 1 2. - <_> - 2 19 4 1 2. - 0 - 1.1478760279715061e-002 - -2.3005740344524384e-001 - 1.8548269569873810e-001 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 4 6 4 1 3. - 0 - -9.1993194073438644e-003 - 4.3196168541908264e-001 - -8.4990806877613068e-002 - <_> - - <_> - - - - <_> - 4 4 4 2 -1. - <_> - 4 5 4 1 2. - 0 - 3.2873731106519699e-004 - -3.2470309734344482e-001 - 1.2502589821815491e-001 - <_> - - <_> - - - - <_> - 0 9 2 9 -1. - <_> - 1 9 1 9 2. - 0 - 1.6286820173263550e-002 - -1.6808439791202545e-001 - 2.0208799839019775e-001 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 9 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - -8.8326708646491170e-004 - 1.3341540098190308e-001 - -8.0567203462123871e-002 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 1 1 2. - <_> - 3 14 1 1 2. - 0 - -2.2098519839346409e-003 - 3.2481029629707336e-001 - -1.1913210153579712e-001 - <_> - - <_> - - - - <_> - 11 0 1 12 -1. - <_> - 11 6 1 6 2. - 0 - 3.3911340869963169e-003 - -6.4360022544860840e-001 - 9.3070819973945618e-002 - <_> - - <_> - - - - <_> - 4 5 8 4 -1. - <_> - 6 7 4 4 2. - 1 - -2.1501209586858749e-002 - 1.2166000157594681e-001 - -2.8132438659667969e-001 - <_> - - <_> - - - - <_> - 8 10 3 3 -1. - <_> - 7 11 3 1 3. - 1 - 1.3594830408692360e-002 - -7.4954092502593994e-002 - 1.1320699751377106e-001 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 0 1 2 3. - 0 - -5.9626200236380100e-003 - -6.0876357555389404e-001 - 5.5802300572395325e-002 - <_> - - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 9 12 3 1 3. - 0 - -7.1367057971656322e-003 - 1.3753290474414825e-001 - -5.4944049566984177e-002 - <_> - - <_> - - - - <_> - 3 14 2 2 -1. - <_> - 3 14 1 1 2. - <_> - 4 15 1 1 2. - 0 - 3.7937159650027752e-003 - -9.7331270575523376e-002 - 3.5290411114692688e-001 - <_> - - <_> - - - - <_> - 0 13 12 7 -1. - <_> - 0 13 6 7 2. - 0 - 4.2037001252174377e-001 - -6.0830309987068176e-002 - 6.2353998422622681e-001 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -1.3953109737485647e-003 - -4.5005550980567932e-001 - 8.5933342576026917e-002 - <_> - - <_> - - - - <_> - 10 1 2 2 -1. - <_> - 11 1 1 1 2. - <_> - 10 2 1 1 2. - 0 - -9.1760727809742093e-004 - -2.7361738681793213e-001 - 4.9933131784200668e-002 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - 2.6983609423041344e-003 - -9.6326000988483429e-002 - 4.4493889808654785e-001 - <_> - - <_> - - - - <_> - 10 1 2 2 -1. - <_> - 11 1 1 1 2. - <_> - 10 2 1 1 2. - 0 - 1.8104390474036336e-003 - 5.8886051177978516e-002 - -2.8511041402816772e-001 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -5.2683739922940731e-003 - 5.0250577926635742e-001 - -1.0216759890317917e-001 - <_> - - <_> - - - - <_> - 10 5 1 3 -1. - <_> - 10 6 1 1 3. - 0 - 3.4583848901093006e-003 - 5.8127861469984055e-002 - -5.9851872920989990e-001 - <_> - - <_> - - - - <_> - 1 5 1 3 -1. - <_> - 1 6 1 1 3. - 0 - -3.5791560076177120e-003 - -7.3496657609939575e-001 - 4.1422609239816666e-002 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 6 1 2 1 3. - 0 - 5.1315352320671082e-003 - -9.3608200550079346e-002 - 1.7093980312347412e-001 - <_> - - <_> - - - - <_> - 4 2 8 1 -1. - <_> - 4 2 4 1 2. - 1 - -4.2571019381284714e-002 - 4.8374500870704651e-001 - -7.8032270073890686e-002 - <_> - - <_> - - - - <_> - 8 8 4 3 -1. - <_> - 8 9 4 1 3. - 0 - -1.4648390002548695e-002 - -4.8706358671188354e-001 - 2.5201629847288132e-002 - <_> - - <_> - - - - <_> - 0 8 4 3 -1. - <_> - 0 9 4 1 3. - 0 - 9.3548959121108055e-003 - 3.9141140878200531e-002 - -8.5132300853729248e-001 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - -7.7046807855367661e-003 - 2.7295690774917603e-001 - -1.0840819776058197e-001 - <_> - - <_> - - - - <_> - 4 9 3 9 -1. - <_> - 5 12 1 3 9. - 0 - -6.4468376338481903e-002 - -8.0510532855987549e-001 - 4.7053340822458267e-002 - <_> - - <_> - - - - <_> - 7 9 3 2 -1. - <_> - 8 9 1 2 3. - 0 - -7.9486463218927383e-003 - 3.0840569734573364e-001 - -1.3387249410152435e-001 - <_> - - <_> - - - - <_> - 2 9 3 2 -1. - <_> - 3 9 1 2 3. - 0 - -3.9265598170459270e-003 - 3.6305388808250427e-001 - -1.0540190339088440e-001 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - -3.6044888198375702e-002 - 5.8140981197357178e-001 - -2.9684588662348688e-004 - <_> - - <_> - - - - <_> - 3 6 1 3 -1. - <_> - 2 7 1 1 3. - 1 - -7.6920147985219955e-003 - 3.3190870285034180e-001 - -1.0925249755382538e-001 - -1.3580759763717651e+000 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 4 2 -1. - <_> - 3 2 2 1 2. - <_> - 5 3 2 1 2. - 0 - -4.9766711890697479e-003 - 3.7934410572052002e-001 - -2.4959290027618408e-001 - <_> - - <_> - - - - <_> - 6 3 4 3 -1. - <_> - 5 4 4 1 3. - 1 - -3.4589890390634537e-002 - -4.4946050643920898e-001 - 3.9635330438613892e-002 - <_> - - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 7 4 1 4 3. - 1 - 1.9461639225482941e-002 - -2.6357260346412659e-001 - 2.7247101068496704e-001 - <_> - - <_> - - - - <_> - 8 0 4 16 -1. - <_> - 8 0 2 16 2. - 0 - 4.2663760483264923e-002 - 2.9581360518932343e-002 - -3.4751391410827637e-001 - <_> - - <_> - - - - <_> - 0 13 12 4 -1. - <_> - 3 13 6 4 2. - 0 - 5.8530770242214203e-002 - -3.0708679556846619e-001 - 2.0082889497280121e-001 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 9 1 3 1 2. - 0 - -2.9736598953604698e-003 - -5.4576981067657471e-001 - 2.3220159113407135e-002 - <_> - - <_> - - - - <_> - 2 0 2 3 -1. - <_> - 2 1 2 1 3. - 0 - 7.7464492060244083e-003 - -1.4597670733928680e-001 - 3.5159158706665039e-001 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 3 0 3 1 2. - 0 - 7.0320582017302513e-004 - -3.5477969050407410e-001 - 1.4947199821472168e-001 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 3 1 2 1 3. - 0 - -1.3183569535613060e-002 - 4.9795240163803101e-001 - -9.5576412975788116e-002 - <_> - - <_> - - - - <_> - 9 4 3 3 -1. - <_> - 9 5 3 1 3. - 0 - 1.1360269971191883e-002 - 4.4859439134597778e-002 - -7.7702391147613525e-001 - <_> - - <_> - - - - <_> - 0 4 3 3 -1. - <_> - 0 5 3 1 3. - 0 - -5.3752749226987362e-003 - -6.0436600446701050e-001 - 6.3452452421188354e-002 - <_> - - <_> - - - - <_> - 8 11 2 2 -1. - <_> - 9 11 1 1 2. - <_> - 8 12 1 1 2. - 0 - 2.6277059223502874e-003 - -5.9781100600957870e-002 - 1.6431820392608643e-001 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 1 1 2. - <_> - 3 12 1 1 2. - 0 - -1.9063310464844108e-003 - 3.4500768780708313e-001 - -1.1078260093927383e-001 - <_> - - <_> - - - - <_> - 9 10 1 8 -1. - <_> - 7 12 1 4 2. - 1 - -5.5438909679651260e-002 - 5.3140318393707275e-001 - -3.9117269217967987e-002 - <_> - - <_> - - - - <_> - 1 3 3 8 -1. - <_> - 2 3 1 8 3. - 0 - 2.2990850731730461e-002 - -1.1105979979038239e-001 - 3.4139779210090637e-001 - <_> - - <_> - - - - <_> - 8 8 2 4 -1. - <_> - 8 10 2 2 2. - 0 - 2.3013869300484657e-002 - 1.9403599202632904e-002 - -3.0652850866317749e-001 - <_> - - <_> - - - - <_> - 2 15 3 4 -1. - <_> - 2 16 3 2 2. - 0 - -3.2346909865736961e-003 - 1.8446859717369080e-001 - -2.1846550703048706e-001 - <_> - - <_> - - - - <_> - 8 4 3 6 -1. - <_> - 9 4 1 6 3. - 0 - 1.9735300447791815e-003 - -6.4886763691902161e-002 - 6.2509037554264069e-002 - <_> - - <_> - - - - <_> - 1 4 3 6 -1. - <_> - 2 4 1 6 3. - 0 - -1.0755480267107487e-002 - 3.5955241322517395e-001 - -1.1030949652194977e-001 - <_> - - <_> - - - - <_> - 8 12 2 3 -1. - <_> - 7 13 2 1 3. - 1 - -2.6936439797282219e-002 - -7.0569419860839844e-001 - 1.5028079971671104e-002 - <_> - - <_> - - - - <_> - 3 10 8 1 -1. - <_> - 5 12 4 1 2. - 1 - 2.8886420652270317e-002 - 5.0576541572809219e-002 - -7.2815430164337158e-001 - <_> - - <_> - - - - <_> - 8 15 1 3 -1. - <_> - 7 16 1 1 3. - 1 - 5.7200351729989052e-003 - -1.0274200141429901e-001 - 8.0553196370601654e-002 - <_> - - <_> - - - - <_> - 0 16 6 3 -1. - <_> - 0 17 6 1 3. - 0 - -1.7981380224227905e-002 - -7.0609301328659058e-001 - 5.8095961809158325e-002 - <_> - - <_> - - - - <_> - 8 12 2 2 -1. - <_> - 9 12 1 1 2. - <_> - 8 13 1 1 2. - 0 - 1.6353320097550750e-003 - -9.0820826590061188e-002 - 1.2195230275392532e-001 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - -1.8810540204867721e-003 - 3.1368181109428406e-001 - -1.1835079640150070e-001 - <_> - - <_> - - - - <_> - 9 12 1 3 -1. - <_> - 8 13 1 1 3. - 1 - -1.6305189579725266e-002 - -3.4470620751380920e-001 - 1.0644529946148396e-002 - <_> - - <_> - - - - <_> - 3 11 2 2 -1. - <_> - 3 11 1 1 2. - <_> - 4 12 1 1 2. - 0 - -1.6981370281428099e-003 - 3.6481419205665588e-001 - -1.0638120025396347e-001 - <_> - - <_> - - - - <_> - 8 15 1 3 -1. - <_> - 7 16 1 1 3. - 1 - 2.1174369379878044e-002 - 3.1025370582938194e-002 - -2.7620419859886169e-001 - <_> - - <_> - - - - <_> - 3 12 3 1 -1. - <_> - 4 13 1 1 3. - 1 - -8.8443253189325333e-003 - -6.9870138168334961e-001 - 5.1486968994140625e-002 - <_> - - <_> - - - - <_> - 9 12 2 3 -1. - <_> - 8 13 2 1 3. - 1 - 3.6929589696228504e-003 - -6.5479710698127747e-002 - 2.2728489711880684e-002 - <_> - - <_> - - - - <_> - 3 12 3 2 -1. - <_> - 4 13 1 2 3. - 1 - 1.0892639867961407e-002 - 6.1733219772577286e-002 - -6.7477071285247803e-001 - <_> - - <_> - - - - <_> - 6 9 2 6 -1. - <_> - 6 9 2 3 2. - 1 - -1.2833529710769653e-001 - 2.1409809589385986e-001 - -3.3962771296501160e-002 - <_> - - <_> - - - - <_> - 0 14 12 6 -1. - <_> - 0 17 12 3 2. - 0 - -5.1236700266599655e-002 - 1.5942020714282990e-001 - -2.4341639876365662e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - 1.2321960180997849e-001 - 2.5586610659956932e-002 - -4.7473230957984924e-001 - <_> - - <_> - - - - <_> - 4 5 2 3 -1. - <_> - 5 5 1 3 2. - 0 - -1.9274000078439713e-003 - 1.0943879932165146e-001 - -3.3568400144577026e-001 - <_> - - <_> - - - - <_> - 6 5 2 3 -1. - <_> - 5 6 2 1 3. - 1 - -2.0102979615330696e-002 - -5.1650160551071167e-001 - 2.9315050691366196e-002 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 7 6 1 2 3. - 1 - 1.8281549215316772e-002 - -6.4036741852760315e-002 - 6.2557631731033325e-001 - <_> - - <_> - - - - <_> - 4 8 5 2 -1. - <_> - 4 9 5 1 2. - 0 - 1.4739660546183586e-003 - -1.6827440261840820e-001 - 1.0941269993782043e-001 - <_> - - <_> - - - - <_> - 0 4 3 5 -1. - <_> - 1 4 1 5 3. - 0 - -9.0881707146763802e-003 - 2.4175269901752472e-001 - -1.4523309469223022e-001 - <_> - - <_> - - - - <_> - 9 2 3 8 -1. - <_> - 10 2 1 8 3. - 0 - -4.5073218643665314e-002 - -7.3592007160186768e-001 - 5.9004039503633976e-003 - <_> - - <_> - - - - <_> - 0 2 3 8 -1. - <_> - 1 2 1 8 3. - 0 - 1.9067279994487762e-002 - -1.0756839811801910e-001 - 3.3758550882339478e-001 - <_> - - <_> - - - - <_> - 6 9 2 6 -1. - <_> - 6 9 2 3 2. - 1 - -9.0190932154655457e-002 - 3.0061250925064087e-001 - -4.3286528438329697e-002 - <_> - - <_> - - - - <_> - 6 9 6 5 -1. - <_> - 6 9 3 5 2. - 1 - -2.4107230827212334e-002 - 1.4867919683456421e-001 - -2.2179369628429413e-001 - <_> - - <_> - - - - <_> - 11 0 1 12 -1. - <_> - 11 6 1 6 2. - 0 - 4.2285379022359848e-002 - -2.0657710731029510e-001 - 2.4372029304504395e-001 - <_> - - <_> - - - - <_> - 6 1 6 1 -1. - <_> - 8 3 2 1 3. - 1 - -1.9224429503083229e-002 - -4.1109448671340942e-001 - 8.8076941668987274e-002 - <_> - - <_> - - - - <_> - 8 12 1 3 -1. - <_> - 7 13 1 1 3. - 1 - -1.8713049590587616e-002 - -5.5512428283691406e-001 - -3.5010900319321081e-005 - <_> - - <_> - - - - <_> - 4 12 3 1 -1. - <_> - 5 13 1 1 3. - 1 - -1.1740639805793762e-002 - -7.4573528766632080e-001 - 4.6473011374473572e-002 - <_> - - <_> - - - - <_> - 7 2 2 18 -1. - <_> - 7 2 1 18 2. - 0 - 3.5142578184604645e-002 - 2.7216039597988129e-003 - -4.9953749775886536e-001 - <_> - - <_> - - - - <_> - 3 2 2 18 -1. - <_> - 4 2 1 18 2. - 0 - -6.6481479443609715e-003 - 1.9559350609779358e-001 - -1.6296459734439850e-001 - <_> - - <_> - - - - <_> - 8 15 1 3 -1. - <_> - 7 16 1 1 3. - 1 - 7.3291230946779251e-003 - -5.7543341070413589e-002 - 8.1424511969089508e-002 - <_> - - <_> - - - - <_> - 4 15 3 1 -1. - <_> - 5 16 1 1 3. - 1 - -5.4579051211476326e-003 - -5.4347038269042969e-001 - 5.7771220803260803e-002 - <_> - - <_> - - - - <_> - 7 14 2 2 -1. - <_> - 8 14 1 1 2. - <_> - 7 15 1 1 2. - 0 - 1.0465289960848168e-004 - -1.1724419891834259e-001 - 1.3367609679698944e-001 - <_> - - <_> - - - - <_> - 3 14 2 2 -1. - <_> - 3 14 1 1 2. - <_> - 4 15 1 1 2. - 0 - -1.7040430102497339e-003 - 3.2203149795532227e-001 - -1.0900110006332397e-001 - <_> - - <_> - - - - <_> - 5 5 2 3 -1. - <_> - 5 6 2 1 3. - 0 - -7.5647421181201935e-003 - 4.4239428639411926e-001 - -6.8382248282432556e-002 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 7 5 1 2 3. - 1 - 8.0183129757642746e-003 - -1.5239569544792175e-001 - 2.4483230710029602e-001 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 7 0 1 2 3. - 0 - -1.0649990290403366e-002 - -6.2405461072921753e-001 - 2.1711019799113274e-002 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 2 1 2. - 1 - -1.4240309828892350e-003 - 8.9519590139389038e-002 - -3.5850891470909119e-001 - <_> - - <_> - - - - <_> - 11 0 1 12 -1. - <_> - 11 6 1 6 2. - 0 - 5.9712692163884640e-003 - -4.6914869546890259e-001 - 5.2607439458370209e-002 - <_> - - <_> - - - - <_> - 6 6 4 2 -1. - <_> - 7 7 2 2 2. - 1 - 1.6963120549917221e-002 - -6.1023771762847900e-002 - 5.7392549514770508e-001 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 7 0 1 2 3. - 0 - 7.1414969861507416e-003 - 2.8966020792722702e-002 - -3.2176148891448975e-001 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 0 1 3 3. - 0 - -9.5924977213144302e-003 - -7.2410070896148682e-001 - 4.0414128452539444e-002 - <_> - - <_> - - - - <_> - 11 4 1 3 -1. - <_> - 11 5 1 1 3. - 0 - -4.1343858465552330e-003 - -6.6965389251708984e-001 - 3.3574569970369339e-002 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 8 2 1 2. - 0 - -4.4302479363977909e-003 - -6.3991087675094604e-001 - 3.9288960397243500e-002 - <_> - - <_> - - - - <_> - 9 1 1 6 -1. - <_> - 9 1 1 3 2. - 1 - -2.6460499502718449e-003 - 1.0181919671595097e-002 - -1.8428249657154083e-001 - <_> - - <_> - - - - <_> - 3 1 6 1 -1. - <_> - 3 1 3 1 2. - 1 - -3.3010810613632202e-002 - -6.4822387695312500e-001 - 4.6115010976791382e-002 - -1.3411600589752197e+000 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_lefteye.xml b/data/haarcascades/haarcascade_mcs_lefteye.xml deleted file mode 100644 index 3aeeb5a..0000000 --- a/data/haarcascades/haarcascade_mcs_lefteye.xml +++ /dev/null @@ -1,23791 +0,0 @@ - - - - - - 18 12 - - <_> - - - <_> - - <_> - - - - <_> - 2 0 9 12 -1. - <_> - 2 4 9 4 3. - 0 - -0.2298166006803513 - 0.7448793053627014 - -0.6734349727630615 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.1534516960382462 - -0.6007816195487976 - 0.4448564946651459 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 10 4 2 2 3. - 1 - -0.0609385594725609 - 0.5612637996673584 - -0.3199233114719391 - <_> - - <_> - - - - <_> - 13 9 4 2 -1. - <_> - 13 10 4 1 2. - 0 - 1.0585549898678437e-004 - -0.3604696094989777 - 0.2683595120906830 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 6 0 6 10 3. - 0 - -0.2314763069152832 - 0.4616630077362061 - -0.2083043009042740 - <_> - - <_> - - - - <_> - 13 9 4 2 -1. - <_> - 13 10 4 1 2. - 0 - 0.0179834198206663 - 0.0637709423899651 - -0.5207654833793640 - <_> - - <_> - - - - <_> - 1 9 4 2 -1. - <_> - 1 10 4 1 2. - 0 - 3.9604099583812058e-005 - -0.5231478214263916 - 0.1950525939464569 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 4.0414137765765190e-003 - 0.1087462976574898 - -0.5987842082977295 - <_> - - <_> - - - - <_> - 5 1 8 6 -1. - <_> - 5 3 8 2 3. - 0 - -0.0764225274324417 - 0.4467296898365021 - -0.1537691950798035 - <_> - - <_> - - - - <_> - 7 1 7 6 -1. - <_> - 7 3 7 2 3. - 0 - 0.0905535817146301 - -0.1128019019961357 - 0.6283273100852966 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - 4.9092499539256096e-003 - 0.1037560030817986 - -0.6867117881774902 - <_> - - <_> - - - - <_> - 17 0 1 12 -1. - <_> - 17 6 1 6 2. - 0 - 0.0398592315614223 - 0.0533530600368977 - -0.2477817982435226 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - -0.0142149003222585 - -0.4909302890300751 - 0.1429515928030014 - <_> - - <_> - - - - <_> - 13 1 5 4 -1. - <_> - 13 3 5 2 2. - 0 - -5.9114010073244572e-003 - 0.1615788936614990 - -0.1557170003652573 - <_> - - <_> - - - - <_> - 2 0 9 12 -1. - <_> - 2 4 9 4 3. - 0 - -0.2295580953359604 - -0.3087595999240875 - 0.2236312925815582 - <_> - - <_> - - - - <_> - 16 6 2 1 -1. - <_> - 16 6 1 1 2. - 0 - -9.3946291599422693e-005 - 0.2899464964866638 - -0.2995545864105225 - -1.7205799818038940 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 5 10 6 -1. - <_> - 1 8 10 3 2. - 0 - 0.1273180991411209 - -0.6540071964263916 - 0.5686634778976440 - <_> - - <_> - - - - <_> - 0 1 18 9 -1. - <_> - 6 4 6 3 9. - 0 - -0.7443348765373230 - 0.6887040734291077 - -0.3481042981147766 - <_> - - <_> - - - - <_> - 0 8 5 4 -1. - <_> - 0 10 5 2 2. - 0 - 6.2184786656871438e-005 - -0.6404988765716553 - 0.2268168926239014 - <_> - - <_> - - - - <_> - 10 2 2 6 -1. - <_> - 8 4 2 2 3. - 1 - -0.0761576071381569 - 0.4083384871482849 - -0.0694039091467857 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 10 4 2 2 3. - 1 - -0.0695553123950958 - 0.4669008851051331 - -0.2024791985750198 - <_> - - <_> - - - - <_> - 4 1 10 6 -1. - <_> - 4 3 10 2 3. - 0 - -0.1093100011348724 - 0.5958420038223267 - -0.2100190967321396 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 3.5818720789393410e-005 - -0.4652096927165985 - 0.2089612036943436 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - -8.0066677182912827e-003 - -0.6993219852447510 - 0.0942883566021919 - <_> - - <_> - - - - <_> - 8 3 4 2 -1. - <_> - 8 3 2 2 2. - 1 - 0.0295706801116467 - -0.1544265002012253 - 0.4666836857795715 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - 7.4920160695910454e-003 - 0.0885883569717407 - -0.6708428263664246 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 6 0 6 2 3. - 0 - -0.0371686704456806 - 0.2547774910926819 - -0.2516421973705292 - <_> - - <_> - - - - <_> - 4 2 10 6 -1. - <_> - 4 4 10 2 3. - 0 - -0.1205727979540825 - 0.4600830078125000 - -0.1189170032739639 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - -3.7710228934884071e-003 - -0.6138092875480652 - 0.0865445435047150 - <_> - - <_> - - - - <_> - 15 10 1 2 -1. - <_> - 15 11 1 1 2. - 0 - 3.5496661439538002e-005 - -0.1868880987167358 - 0.1358494013547897 - <_> - - <_> - - - - <_> - 2 10 1 2 -1. - <_> - 2 11 1 1 2. - 0 - -1.6192409675568342e-003 - -0.5401371121406555 - 0.0976944863796234 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - 3.6828289012191817e-005 - -0.1571511030197144 - 0.1751237064599991 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 4.0976690797833726e-005 - -0.2203579992055893 - 0.2433484941720963 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 5 2 8 2 3. - 0 - -0.0703476071357727 - 0.4308302998542786 - -0.1228130012750626 - <_> - - <_> - - - - <_> - 2 0 11 6 -1. - <_> - 2 2 11 2 3. - 0 - 0.0944692716002464 - -0.1215931996703148 - 0.4496718049049377 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -0.0114427404478192 - -0.6551647186279297 - 0.0749616026878357 - <_> - - <_> - - - - <_> - 4 11 4 1 -1. - <_> - 5 11 2 1 2. - 0 - -5.3098648786544800e-003 - -0.6597430109977722 - 0.0587489381432533 - -1.7609959840774536 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.2444213926792145 - -0.6077681183815002 - 0.5200480222702026 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 7 3 4 2 3. - 1 - -0.0664216801524162 - 0.2178324013948441 - -0.2194934040307999 - <_> - - <_> - - - - <_> - 0 5 12 6 -1. - <_> - 0 5 6 3 2. - <_> - 6 8 6 3 2. - 0 - 0.3814172148704529 - 1.3418859907687875e-006 - -4.1691070312500000e+004 - <_> - - <_> - - - - <_> - 9 1 3 6 -1. - <_> - 7 3 3 2 3. - 1 - -0.1548420935869217 - 0.1426136940717697 - -0.0111637003719807 - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 3 2 3 3. - 1 - -0.0792475417256355 - 0.4404774904251099 - -0.3525907099246979 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -6.3354419544339180e-003 - -0.6746796965599060 - 0.1194598972797394 - <_> - - <_> - - - - <_> - 0 8 7 4 -1. - <_> - 0 10 7 2 2. - 0 - 5.4770321585237980e-003 - -0.5293681025505066 - 0.1670836061239243 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 6 0 6 11 3. - 0 - -0.1885740011930466 - 0.2969254851341248 - -0.2792345881462097 - <_> - - <_> - - - - <_> - 0 10 4 2 -1. - <_> - 0 11 4 1 2. - 0 - -3.4621960949152708e-003 - -0.5980088710784912 - 0.1017761006951332 - <_> - - <_> - - - - <_> - 13 3 3 3 -1. - <_> - 12 4 3 1 3. - 1 - 0.0330699197947979 - -0.0596848689019680 - 0.4051677882671356 - <_> - - <_> - - - - <_> - 5 3 3 3 -1. - <_> - 6 4 1 3 3. - 1 - -0.0308437794446945 - 0.4907310009002686 - -0.1153198033571243 - <_> - - <_> - - - - <_> - 9 10 6 2 -1. - <_> - 11 10 2 2 3. - 0 - -0.0259132403880358 - -0.4961031973361969 - 0.0451656803488731 - <_> - - <_> - - - - <_> - 5 10 6 2 -1. - <_> - 7 10 2 2 3. - 0 - -0.0216398406773806 - -0.7278860807418823 - 0.0586238615214825 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 2 2. - 0 - 4.8874882049858570e-003 - 0.0768030732870102 - -0.5808597207069397 - <_> - - <_> - - - - <_> - 0 8 3 4 -1. - <_> - 0 9 3 2 2. - 0 - -8.4114465862512589e-003 - -0.4429189860820770 - 0.0951904430985451 - <_> - - <_> - - - - <_> - 7 4 4 5 -1. - <_> - 8 4 2 5 2. - 0 - -0.0132184904068708 - 0.3104842007160187 - -0.1390500068664551 - <_> - - <_> - - - - <_> - 3 0 6 4 -1. - <_> - 5 0 2 4 3. - 0 - -0.0326312296092510 - -0.5940244197845459 - 0.0669151991605759 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - -4.8389490693807602e-003 - 0.3895869851112366 - -0.0772191733121872 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 1 10 1 2. - 0 - -0.0235571991652250 - 0.3647531867027283 - -0.1022802963852882 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 9 0 2 4 2. - 0 - -0.0168236102908850 - -0.7028393745422363 - 0.0691695287823677 - <_> - - <_> - - - - <_> - 6 0 4 4 -1. - <_> - 7 0 2 4 2. - 0 - -0.0125289801508188 - -0.5915483236312866 - 0.0586381107568741 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - 0.0127369500696659 - -0.0780184566974640 - 0.4606426060199738 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0279473792761564 - 0.2610318064689636 - -0.1453696042299271 - <_> - - <_> - - - - <_> - 5 0 9 3 -1. - <_> - 5 1 9 1 3. - 0 - 0.0194691792130470 - -0.1085366979241371 - 0.2947221100330353 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - 0.0101435603573918 - 0.0815353766083717 - -0.3927153050899506 - <_> - - <_> - - - - <_> - 7 0 8 8 -1. - <_> - 7 2 8 4 2. - 0 - 0.1603716015815735 - -0.0435664691030979 - 0.4444591999053955 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - -3.1675389036536217e-003 - 0.3652110099792481 - -0.0860250070691109 - <_> - - <_> - - - - <_> - 15 5 3 4 -1. - <_> - 15 6 3 2 2. - 0 - 0.0128111904487014 - 0.0706042274832726 - -0.5213270783424377 - <_> - - <_> - - - - <_> - 0 3 16 8 -1. - <_> - 0 3 8 4 2. - <_> - 8 7 8 4 2. - 0 - -0.1877364069223404 - -0.5362054705619812 - 0.0497419089078903 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - -0.0158114898949862 - -0.5679845213890076 - 0.0451337397098541 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 8.5352314636111259e-003 - 0.0609365105628967 - -0.4393881857395172 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 11 6 1 1 2. - <_> - 10 7 1 1 2. - 0 - -4.6653081662952900e-003 - 0.5175548791885376 - -0.0594102516770363 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - -7.9853478819131851e-003 - -0.4802243113517761 - 0.0635639205574989 - <_> - - <_> - - - - <_> - 14 6 4 3 -1. - <_> - 14 6 2 3 2. - 0 - -0.0154398195445538 - 0.3182120025157929 - -0.1571276038885117 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 8 9 2 3 3. - 0 - 0.0229273904114962 - 0.0627980828285217 - -0.5424246788024902 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -2.7168919332325459e-003 - 0.2762104868888855 - -0.0693103075027466 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 3.0373970512300730e-003 - -0.0728201270103455 - 0.4193499088287354 - <_> - - <_> - - - - <_> - 15 3 3 2 -1. - <_> - 15 4 3 1 2. - 0 - 9.4063878059387207e-003 - 0.0556666217744350 - -0.4395717978477478 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - -0.0159840192645788 - -0.6015670895576477 - 0.0441371202468872 - -1.7233569622039795 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 6 4 6 4 9. - 0 - -1.0876799821853638 - 0.6294826269149780 - -0.4179393947124481 - <_> - - <_> - - - - <_> - 8 4 10 8 -1. - <_> - 8 8 10 4 2. - 0 - 0.1164439022541046 - -0.4727962017059326 - 0.2381493002176285 - <_> - - <_> - - - - <_> - 0 5 4 4 -1. - <_> - 2 5 2 4 2. - 0 - -0.0160847101360559 - 0.3374727070331574 - -0.2752752900123596 - <_> - - <_> - - - - <_> - 14 7 4 4 -1. - <_> - 14 9 4 2 2. - 0 - -0.0191960595548153 - -0.5509889125823975 - 0.0559420287609100 - <_> - - <_> - - - - <_> - 7 2 6 1 -1. - <_> - 9 4 2 1 3. - 1 - -0.0342571213841438 - 0.3061361908912659 - -0.2423464059829712 - <_> - - <_> - - - - <_> - 16 8 2 2 -1. - <_> - 16 9 2 1 2. - 0 - 0.0106492703780532 - 0.0934166908264160 - -0.4897581040859222 - <_> - - <_> - - - - <_> - 0 8 2 2 -1. - <_> - 0 9 2 1 2. - 0 - -2.2133740130811930e-003 - -0.6395238041877747 - 0.0791302174329758 - <_> - - <_> - - - - <_> - 13 2 4 1 -1. - <_> - 14 2 2 1 2. - 0 - 4.6288450248539448e-003 - 0.0535043105483055 - -0.4702880084514618 - <_> - - <_> - - - - <_> - 0 10 6 2 -1. - <_> - 0 11 6 1 2. - 0 - -4.1199862025678158e-003 - -0.6356499791145325 - 0.1118744015693665 - <_> - - <_> - - - - <_> - 14 9 4 2 -1. - <_> - 14 10 4 1 2. - 0 - -7.0232590660452843e-003 - -0.4896839857101440 - 0.0505020990967751 - <_> - - <_> - - - - <_> - 0 9 4 2 -1. - <_> - 0 10 4 1 2. - 0 - -4.6173902228474617e-003 - -0.6496281027793884 - 0.0647443234920502 - <_> - - <_> - - - - <_> - 9 0 4 7 -1. - <_> - 10 1 2 7 2. - 1 - 0.0265684798359871 - -0.0813612267374992 - 0.1012633964419365 - <_> - - <_> - - - - <_> - 0 4 2 6 -1. - <_> - 0 7 2 3 2. - 0 - 0.1425653994083405 - 0.0367571003735065 - -8.6994658203125000e+003 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - -7.9922098666429520e-003 - -0.6254354119300842 - 0.0584495589137077 - <_> - - <_> - - - - <_> - 6 0 8 4 -1. - <_> - 6 0 8 2 2. - 1 - 0.3245322108268738 - -0.0342194885015488 - -7.6455332031250000e+003 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 9 1 1 2. - 1 - -0.0104542998597026 - -0.4648857116699219 - 0.0820055827498436 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 8 1 6 2 2. - 1 - 0.0480473302304745 - -0.1095091998577118 - 0.5144714713096619 - <_> - - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 9 0 6 2 2. - 0 - -0.0136749502271414 - 0.3058204054832459 - -0.2532551884651184 - <_> - - <_> - - - - <_> - 4 0 9 8 -1. - <_> - 4 2 9 4 2. - 0 - -0.1114948987960815 - 0.3437237143516541 - -0.1527179926633835 - <_> - - <_> - - - - <_> - 9 0 2 4 -1. - <_> - 9 0 1 4 2. - 0 - 0.0106498496606946 - 0.0533205606043339 - -0.5143492221832275 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -0.0135297095403075 - -0.7833893895149231 - 0.0557366311550140 - <_> - - <_> - - - - <_> - 6 4 6 6 -1. - <_> - 8 6 2 2 9. - 0 - -0.1236910969018936 - 0.2814615964889526 - -0.1600033938884735 - <_> - - <_> - - - - <_> - 6 10 4 2 -1. - <_> - 7 10 2 2 2. - 0 - -7.5496039353311062e-003 - -0.6141601204872131 - 0.0760507732629776 - <_> - - <_> - - - - <_> - 13 7 5 2 -1. - <_> - 13 8 5 1 2. - 0 - 0.0318161509931087 - 0.0186315793544054 - -0.5537254214286804 - <_> - - <_> - - - - <_> - 7 4 4 4 -1. - <_> - 7 5 4 2 2. - 0 - 0.1493735015392304 - -1.6261310083791614e-003 - -4.7522329101562500e+003 - <_> - - <_> - - - - <_> - 13 7 5 2 -1. - <_> - 13 8 5 1 2. - 0 - 0.0469747781753540 - 5.1585468463599682e-003 - -0.6380897164344788 - <_> - - <_> - - - - <_> - 0 7 5 2 -1. - <_> - 0 8 5 1 2. - 0 - 1.3677899551112205e-004 - -0.3055922091007233 - 0.1362351030111313 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 0 0 9 1 2. - 0 - -0.0322282388806343 - 0.2772552073001862 - -0.1286406069993973 - <_> - - <_> - - - - <_> - 4 10 4 2 -1. - <_> - 5 10 2 2 2. - 0 - -6.5994630567729473e-003 - -0.4750213027000427 - 0.0787238627672195 - <_> - - <_> - - - - <_> - 10 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - 0.0209838803857565 - -0.0755615532398224 - 0.4307813942432404 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 5 5 2 3 2. - 0 - -0.0105135198682547 - 0.3756321072578430 - -0.0831511169672012 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 10 0 2 2 2. - 0 - -9.5620742067694664e-003 - -0.4233325123786926 - 0.0439542606472969 - <_> - - <_> - - - - <_> - 4 9 1 2 -1. - <_> - 4 10 1 1 2. - 0 - 1.4352190191857517e-004 - -0.2421430945396423 - 0.1134959012269974 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 5 1 8 2 2. - 0 - -0.0321479514241219 - 0.3553853929042816 - -0.0748463124036789 - <_> - - <_> - - - - <_> - 6 0 5 4 -1. - <_> - 6 1 5 2 2. - 0 - 0.0174891501665115 - -0.1348219066858292 - 0.3028790950775147 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 0 1 2 3. - 0 - 0.0107521098107100 - 0.0258396603167057 - -0.5400351285934448 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 6 8 6 4 3. - 0 - -0.1190781965851784 - 0.2656168043613434 - -0.1014088019728661 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 10 0 2 2 2. - 0 - 6.6588749177753925e-003 - 0.0419859699904919 - -0.2907460927963257 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - 8.3990991115570068e-003 - 0.0504555106163025 - -0.4828890860080719 - <_> - - <_> - - - - <_> - 6 1 8 6 -1. - <_> - 6 3 8 2 3. - 0 - 0.0600846484303474 - -0.0755373910069466 - 0.2406816929578781 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 6 0 2 2 2. - 0 - -7.4602258391678333e-003 - -0.4195708036422730 - 0.0590730011463165 - <_> - - <_> - - - - <_> - 7 6 8 2 -1. - <_> - 9 6 4 2 2. - 0 - -0.0602592602372169 - 0.5444657206535339 - -0.0262358300387859 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 6 4 1 3 2. - 1 - -0.0221761204302311 - 0.3267804086208344 - -0.0675928071141243 - <_> - - <_> - - - - <_> - 5 0 9 6 -1. - <_> - 5 2 9 2 3. - 0 - -0.0836906209588051 - 0.2933085858821869 - -0.0674251765012741 - <_> - - <_> - - - - <_> - 2 1 11 4 -1. - <_> - 2 2 11 2 2. - 0 - 0.0174208097159863 - -0.1296115964651108 - 0.1876410990953445 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 14 2 1 2 2. - 1 - 0.0166604891419411 - 0.0475730597972870 - -0.4158729910850525 - <_> - - <_> - - - - <_> - 4 2 2 3 -1. - <_> - 3 3 2 1 3. - 1 - -0.0202436391264200 - -0.4272713959217072 - 0.0521548502147198 - -1.7742869853973389 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 1 6 9 -1. - <_> - 8 4 2 3 9. - 0 - -0.1886709928512573 - 0.5151798129081726 - -0.4702348113059998 - <_> - - <_> - - - - <_> - 14 5 4 4 -1. - <_> - 14 5 2 4 2. - 0 - -0.0164011605083942 - 0.3121385872364044 - -0.2133460044860840 - <_> - - <_> - - - - <_> - 1 6 10 6 -1. - <_> - 1 9 10 3 2. - 0 - 0.0968954414129257 - -0.5320454239845276 - 0.2134394049644470 - <_> - - <_> - - - - <_> - 14 5 4 5 -1. - <_> - 14 5 2 5 2. - 0 - 0.0168255604803562 - -0.0173099897801876 - 0.2927081882953644 - <_> - - <_> - - - - <_> - 0 5 4 5 -1. - <_> - 2 5 2 5 2. - 0 - -0.0143764400854707 - 0.3259294927120209 - -0.2953472137451172 - <_> - - <_> - - - - <_> - 10 3 3 3 -1. - <_> - 11 4 1 3 3. - 1 - -0.0257499106228352 - 0.3006463050842285 - -0.1285721063613892 - <_> - - <_> - - - - <_> - 8 4 2 3 -1. - <_> - 7 5 2 1 3. - 1 - -0.0197812691330910 - 0.4648532867431641 - -0.1570322960615158 - <_> - - <_> - - - - <_> - 9 5 3 2 -1. - <_> - 9 6 3 1 2. - 0 - 0.0160089191049337 - -0.0313608087599278 - 0.4034132957458496 - <_> - - <_> - - - - <_> - 6 5 2 2 -1. - <_> - 6 6 2 1 2. - 0 - 6.0088648460805416e-003 - -0.1566037982702255 - 0.4142864942550659 - <_> - - <_> - - - - <_> - 6 2 8 4 -1. - <_> - 6 3 8 2 2. - 0 - -0.0295468494296074 - 0.3166061043739319 - -0.1000310033559799 - <_> - - <_> - - - - <_> - 1 0 16 2 -1. - <_> - 5 0 8 2 2. - 0 - -0.0335419513285160 - 0.2785116136074066 - -0.1905584931373596 - <_> - - <_> - - - - <_> - 9 3 2 6 -1. - <_> - 7 5 2 2 3. - 1 - -0.0565995387732983 - 0.3003756105899811 - -0.0835469514131546 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - -0.0215592198073864 - -0.5559839010238648 - 0.0888227075338364 - <_> - - <_> - - - - <_> - 7 5 4 3 -1. - <_> - 7 5 2 3 2. - 0 - 0.0155608803033829 - -0.1191003993153572 - 0.3958534002304077 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 1 2 2. - 1 - 4.7825528308749199e-003 - 0.0873457416892052 - -0.4798257052898407 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 5 1 2 3. - 1 - 0.0204854290932417 - -0.0353239402174950 - 0.3691422939300537 - <_> - - <_> - - - - <_> - 9 4 2 3 -1. - <_> - 8 5 2 1 3. - 1 - -0.0222924593836069 - 0.4030582010746002 - -0.0905211418867111 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 5 1 8 2 2. - 0 - -0.0367587395012379 - 0.4475831091403961 - -0.0743735581636429 - <_> - - <_> - - - - <_> - 6 10 1 2 -1. - <_> - 6 11 1 1 2. - 0 - 9.3364156782627106e-005 - -0.2607545852661133 - 0.1413186043500900 - <_> - - <_> - - - - <_> - 7 0 8 4 -1. - <_> - 7 1 8 2 2. - 0 - 0.0252027306705713 - -0.0929077118635178 - 0.2210991978645325 - <_> - - <_> - - - - <_> - 4 11 6 1 -1. - <_> - 6 11 2 1 3. - 0 - 7.8968331217765808e-003 - 0.0768434703350067 - -0.5053529143333435 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - 9.2414859682321548e-003 - 0.0426194295287132 - -0.5842121839523315 - <_> - - <_> - - - - <_> - 0 2 18 10 -1. - <_> - 0 2 9 5 2. - <_> - 9 7 9 5 2. - 0 - -0.2990294098854065 - -0.6176159977912903 - 0.0389944799244404 - <_> - - <_> - - - - <_> - 6 0 6 9 -1. - <_> - 8 0 2 9 3. - 0 - -0.0163955893367529 - 0.1609995961189270 - -0.1729865074157715 - <_> - - <_> - - - - <_> - 5 11 6 1 -1. - <_> - 7 11 2 1 3. - 0 - -8.5750846192240715e-003 - -0.4721252918243408 - 0.0629377067089081 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 8 0 2 4 3. - 0 - -0.0295358095318079 - -0.4923984110355377 - 0.0511771216988564 - <_> - - <_> - - - - <_> - 5 1 7 4 -1. - <_> - 5 2 7 2 2. - 0 - -0.0323478803038597 - 0.4024465084075928 - -0.0716922804713249 - <_> - - <_> - - - - <_> - 12 3 1 2 -1. - <_> - 12 4 1 1 2. - 0 - -9.8570148111321032e-005 - 0.1123879998922348 - -0.1184118017554283 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -6.0801780782639980e-003 - 0.3099572956562042 - -0.0805626735091209 - <_> - - <_> - - - - <_> - 9 0 6 2 -1. - <_> - 11 0 2 2 3. - 0 - -9.9669457995332778e-005 - 0.1057943031191826 - -0.1479294002056122 - <_> - - <_> - - - - <_> - 3 0 6 2 -1. - <_> - 5 0 2 2 3. - 0 - -0.0213832091540098 - -0.5403249859809876 - 0.0465878099203110 - <_> - - <_> - - - - <_> - 9 5 3 5 -1. - <_> - 10 5 1 5 3. - 0 - -3.6912590730935335e-003 - 0.1631086021661758 - -0.1049527972936630 - <_> - - <_> - - - - <_> - 6 5 3 5 -1. - <_> - 7 5 1 5 3. - 0 - -5.3881132043898106e-003 - 0.2398761957883835 - -0.0998853370547295 - <_> - - <_> - - - - <_> - 17 4 1 6 -1. - <_> - 17 6 1 2 3. - 0 - 8.0342441797256470e-003 - 0.0856977775692940 - -0.4395585954189301 - <_> - - <_> - - - - <_> - 0 2 1 9 -1. - <_> - 0 5 1 3 3. - 0 - 0.0138485804200172 - 0.0498559400439262 - -0.4091011881828308 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - 8.5337793279904872e-005 - -0.1074950993061066 - 0.1125968992710114 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 8.9258137450087816e-005 - -0.1544775962829590 - 0.1494859009981155 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - -3.5984220448881388e-003 - 0.3277201056480408 - -0.1066564023494721 - <_> - - <_> - - - - <_> - 3 2 4 3 -1. - <_> - 4 3 2 3 2. - 1 - -0.0447131991386414 - 0.3849036097526550 - -0.0521562285721302 - <_> - - <_> - - - - <_> - 17 7 1 4 -1. - <_> - 17 8 1 2 2. - 0 - 2.5462699122726917e-003 - 0.0937647894024849 - -0.3173953890800476 - <_> - - <_> - - - - <_> - 0 7 1 4 -1. - <_> - 0 8 1 2 2. - 0 - 5.4153460077941418e-003 - 0.0447478294372559 - -0.4544633030891419 - <_> - - <_> - - - - <_> - 9 0 3 7 -1. - <_> - 10 1 1 7 3. - 1 - -0.0381362996995449 - 0.1196867004036903 - -0.0286594107747078 - <_> - - <_> - - - - <_> - 9 0 7 3 -1. - <_> - 8 1 7 1 3. - 1 - 0.0390664413571358 - -0.0590365193784237 - 0.3731229901313782 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -7.3346862336620688e-005 - 0.1190418973565102 - -0.0869843289256096 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 8.6998203187249601e-005 - -0.1281822025775909 - 0.1728205978870392 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - 8.5675828158855438e-003 - 0.0846529230475426 - -0.3198662102222443 - <_> - - <_> - - - - <_> - 4 2 10 3 -1. - <_> - 4 3 10 1 3. - 0 - 0.0217857006937265 - -0.0954384729266167 - 0.2606984972953796 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 16 2 1 2 2. - 1 - -0.0138535499572754 - -0.4217616915702820 - 0.0674627870321274 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 2 2 1 2. - 1 - 0.0138380201533437 - 0.0466855205595493 - -0.4152165949344635 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 0 11 9 1 2. - 0 - 0.0646203309297562 - 0.0458183102309704 - -0.4223445951938629 - <_> - - <_> - - - - <_> - 1 1 16 10 -1. - <_> - 5 1 8 10 2. - 0 - -0.0779213532805443 - 0.1324124932289124 - -0.1706327944993973 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.3160440139472485e-003 - -0.2494515925645828 - 0.0586964599788189 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -8.0401099694427103e-005 - 0.1628863960504532 - -0.1387708038091660 - <_> - - <_> - - - - <_> - 2 0 16 10 -1. - <_> - 6 0 8 10 2. - 0 - -0.1532817035913467 - 0.0842742100358009 - -0.0637950301170349 - <_> - - <_> - - - - <_> - 0 0 16 10 -1. - <_> - 4 0 8 10 2. - 0 - -0.3753429055213928 - -0.4794279038906097 - 0.0500348284840584 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 14 11 2 1 2. - 0 - -6.5958919003605843e-003 - -0.5460941195487976 - 0.0212609600275755 - <_> - - <_> - - - - <_> - 5 6 3 2 -1. - <_> - 6 6 1 2 3. - 0 - -2.6368419639766216e-003 - 0.2074088007211685 - -0.0908637866377831 - -1.7197259664535522 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 2 11 8 -1. - <_> - 0 4 11 4 2. - 0 - -0.1392325013875961 - 0.3977850973606110 - -0.4214068949222565 - <_> - - <_> - - - - <_> - 6 5 6 3 -1. - <_> - 8 5 2 3 3. - 0 - -0.0216973796486855 - 0.3507454991340637 - -0.2721070945262909 - <_> - - <_> - - - - <_> - 0 5 4 3 -1. - <_> - 2 5 2 3 2. - 0 - -0.0169219598174095 - 0.3007246851921082 - -0.2090560048818588 - <_> - - <_> - - - - <_> - 3 2 12 6 -1. - <_> - 3 4 12 2 3. - 0 - -0.1263809055089951 - 0.2769337892532349 - -0.1591036021709442 - <_> - - <_> - - - - <_> - 0 9 3 3 -1. - <_> - 0 10 3 1 3. - 0 - 0.0799179822206497 - 1.9333909731358290e-003 - -4.4651162109375000e+003 - <_> - - <_> - - - - <_> - 6 3 7 3 -1. - <_> - 6 4 7 1 3. - 0 - 0.0238300692290068 - -0.0826329365372658 - 0.4638459980487824 - <_> - - <_> - - - - <_> - 4 10 10 2 -1. - <_> - 4 11 10 1 2. - 0 - 2.7771110180765390e-003 - -0.3161875903606415 - 0.1360259950160980 - <_> - - <_> - - - - <_> - 5 4 10 2 -1. - <_> - 5 5 10 1 2. - 0 - 0.0207498706877232 - -0.0798233970999718 - 0.4018065035343170 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 6 0 6 8 3. - 0 - -0.1179452016949654 - 0.1356489956378937 - -0.2530486881732941 - <_> - - <_> - - - - <_> - 17 4 1 8 -1. - <_> - 17 8 1 4 2. - 0 - -0.0107332896441221 - -0.4277982115745544 - 0.0747490301728249 - <_> - - <_> - - - - <_> - 0 4 1 8 -1. - <_> - 0 8 1 4 2. - 0 - -4.8003909178078175e-003 - -0.4599295854568481 - 0.0848593562841415 - <_> - - <_> - - - - <_> - 5 7 12 3 -1. - <_> - 9 7 4 3 3. - 0 - 0.2141191065311432 - -0.0398279093205929 - 0.5408297181129456 - <_> - - <_> - - - - <_> - 3 2 4 2 -1. - <_> - 4 3 2 2 2. - 1 - 0.0180592592805624 - -0.0625308677554131 - 0.4306229948997498 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 0 2 4 3. - 0 - -0.0438989289104939 - -0.6836798191070557 - 0.0454723685979843 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 7 0 2 4 3. - 0 - -0.0330465808510780 - -0.6307194828987122 - 0.0551519207656384 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -6.1799539253115654e-003 - -0.5795860886573792 - 0.0240577794611454 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -3.7160899955779314e-003 - 0.3491894006729126 - -0.0901431962847710 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - -2.0229220390319824e-003 - 0.2506240904331207 - -0.1107389032840729 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -2.9851049184799194e-003 - -0.4928325116634369 - 0.0614206194877625 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - -0.0219376701861620 - -0.6427946090698242 - 0.0364411510527134 - <_> - - <_> - - - - <_> - 4 0 7 4 -1. - <_> - 4 1 7 2 2. - 0 - -0.0294251106679440 - 0.3763540089130402 - -0.0819373801350594 - <_> - - <_> - - - - <_> - 5 0 10 4 -1. - <_> - 5 1 10 2 2. - 0 - 0.0286131501197815 - -0.1050776019692421 - 0.2636362910270691 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0311478506773710 - 0.2191483974456787 - -0.1309666037559509 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - 0.0154854897409678 - 0.0463852994143963 - -0.5342022180557251 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - 3.5835360176861286e-003 - -0.0869321823120117 - 0.3421218991279602 - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 1 2 3 3. - 0 - -0.0425679981708527 - -0.5558959841728210 - 0.0379418097436428 - <_> - - <_> - - - - <_> - 3 1 6 3 -1. - <_> - 5 1 2 3 3. - 0 - -0.0270386599004269 - -0.4642033874988556 - 0.0475543215870857 - <_> - - <_> - - - - <_> - 8 1 5 4 -1. - <_> - 8 2 5 2 2. - 0 - -0.0244112703949213 - 0.2565074861049652 - -0.0490117408335209 - <_> - - <_> - - - - <_> - 9 1 9 1 -1. - <_> - 12 4 3 1 3. - 1 - -0.0222300793975592 - 0.1479326039552689 - -0.1822400987148285 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - -3.2013750169426203e-003 - -0.4244594871997833 - 0.0568032599985600 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - 0.0192534904927015 - -0.0915766581892967 - 0.2606999874114990 - <_> - - <_> - - - - <_> - 7 2 7 3 -1. - <_> - 7 3 7 1 3. - 0 - -0.0300069209188223 - 0.3186461031436920 - -0.0459172911942005 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - 0.0330003611743450 - 0.0421625413000584 - -0.5909662246704102 - <_> - - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 16 1 2 2 2. - <_> - 14 3 2 2 2. - 0 - -0.0236426200717688 - -0.2604036033153534 - 0.0110567901283503 - <_> - - <_> - - - - <_> - 2 6 6 2 -1. - <_> - 4 6 2 2 3. - 0 - 0.0473989397287369 - -0.0406485907733440 - 0.5274757742881775 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 5.8793718926608562e-003 - 0.0313959494233131 - -0.5605685114860535 - <_> - - <_> - - - - <_> - 0 1 4 4 -1. - <_> - 0 1 2 2 2. - <_> - 2 3 2 2 2. - 0 - -5.0995089113712311e-003 - 0.1604142040014267 - -0.1282121986150742 - <_> - - <_> - - - - <_> - 17 3 1 4 -1. - <_> - 17 5 1 2 2. - 0 - 8.3196107298135757e-003 - 0.0628527328372002 - -0.3370667099952698 - <_> - - <_> - - - - <_> - 0 3 1 4 -1. - <_> - 0 5 1 2 2. - 0 - -0.0101530402898788 - -0.4061478972434998 - 0.0497814901173115 - <_> - - <_> - - - - <_> - 17 7 1 4 -1. - <_> - 17 7 1 2 2. - 1 - -1.4680469757877290e-004 - 0.0508837886154652 - -0.1300995945930481 - <_> - - <_> - - - - <_> - 1 7 4 1 -1. - <_> - 1 7 2 1 2. - 1 - -8.2523627497721463e-005 - 0.0926073119044304 - -0.2492676973342896 - <_> - - <_> - - - - <_> - 2 2 16 10 -1. - <_> - 10 2 8 5 2. - <_> - 2 7 8 5 2. - 0 - 0.3256660997867584 - 0.0175395794212818 - -0.4345465004444122 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 1 6 1 9. - 0 - -0.1767358928918839 - 0.2508324086666107 - -0.0765960067510605 - <_> - - <_> - - - - <_> - 9 0 1 8 -1. - <_> - 9 0 1 4 2. - 1 - -0.0232309494167566 - -0.0871549472212791 - 0.0415849611163139 - <_> - - <_> - - - - <_> - 4 9 6 3 -1. - <_> - 6 9 2 3 3. - 0 - -0.0341498702764511 - -0.5313969850540161 - 0.0313693284988403 - <_> - - <_> - - - - <_> - 8 9 2 3 -1. - <_> - 8 9 1 3 2. - 0 - 7.6567879877984524e-003 - 0.0332163609564304 - -0.4625506103038788 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -2.3248200304806232e-003 - 0.2828289866447449 - -0.0649938210844994 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 4.7129541635513306e-003 - -0.0567604899406433 - 0.4795844852924347 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - 1.2744029518216848e-003 - -0.0912374034523964 - 0.2050213068723679 - <_> - - <_> - - - - <_> - 6 0 12 12 -1. - <_> - 12 0 6 6 2. - <_> - 6 6 6 6 2. - 0 - 0.4674114882946014 - -8.2844244316220284e-003 - 0.6470655202865601 - <_> - - <_> - - - - <_> - 0 0 12 12 -1. - <_> - 0 0 6 6 2. - <_> - 6 6 6 6 2. - 0 - 0.2215567976236343 - 0.0473120510578156 - -0.4319002032279968 - <_> - - <_> - - - - <_> - 0 1 18 6 -1. - <_> - 6 3 6 2 9. - 0 - -0.4178276956081390 - 0.2346280068159103 - -0.0964038223028183 - <_> - - <_> - - - - <_> - 3 11 4 1 -1. - <_> - 4 11 2 1 2. - 0 - -6.9181760773062706e-003 - -0.6590331196784973 - 0.0278767105191946 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - -9.3640871345996857e-003 - -0.5387923717498779 - 7.2180288843810558e-003 - <_> - - <_> - - - - <_> - 9 0 8 1 -1. - <_> - 9 0 4 1 2. - 1 - -0.0581224597990513 - -0.3275103867053986 - 0.0484862402081490 - <_> - - <_> - - - - <_> - 0 1 18 8 -1. - <_> - 9 1 9 4 2. - <_> - 0 5 9 4 2. - 0 - 0.2133163958787918 - 0.0387687794864178 - -0.4380297064781189 - <_> - - <_> - - - - <_> - 0 2 11 8 -1. - <_> - 0 4 11 4 2. - 0 - -0.1396064013242722 - -0.1555435061454773 - 0.1156146004796028 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 7.5554853538051248e-005 - -0.0653312280774117 - 0.0663648769259453 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - -2.7876798994839191e-003 - -0.3400706946849823 - 0.0495472811162472 - <_> - - <_> - - - - <_> - 8 7 4 3 -1. - <_> - 8 8 4 1 3. - 0 - 8.9983027428388596e-003 - -0.0697251036763191 - 0.1476185023784638 - <_> - - <_> - - - - <_> - 3 0 4 2 -1. - <_> - 4 0 2 2 2. - 0 - -0.0119990902021527 - -0.5604606270790100 - 0.0280650891363621 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - 6.0021178796887398e-004 - -0.1057208999991417 - 0.1577567011117935 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 9.2567745596170425e-003 - 0.0384136997163296 - -0.3896898925304413 - <_> - - <_> - - - - <_> - 5 8 9 3 -1. - <_> - 5 9 9 1 3. - 0 - 0.0341950617730618 - -0.0432716198265553 - 0.3246180117130280 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 8.9471039245836437e-005 - -0.1269730031490326 - 0.1121779009699822 - <_> - - <_> - - - - <_> - 7 11 6 1 -1. - <_> - 9 11 2 1 3. - 0 - -0.0145951500162482 - -0.4633379876613617 - 0.0214063096791506 - <_> - - <_> - - - - <_> - 5 11 6 1 -1. - <_> - 7 11 2 1 3. - 0 - -0.0175858400762081 - -0.6947885751724243 - 0.0199106503278017 - <_> - - <_> - - - - <_> - 0 9 18 3 -1. - <_> - 6 9 6 3 3. - 0 - -0.1067337021231651 - 0.2244039028882980 - -0.0837399363517761 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - 1.5211959835141897e-003 - -0.0707727074623108 - 0.2114125043153763 - <_> - - <_> - - - - <_> - 6 10 12 1 -1. - <_> - 6 10 6 1 2. - 0 - 4.4221947900950909e-003 - -0.0442800708115101 - 0.0698315203189850 - <_> - - <_> - - - - <_> - 0 10 12 1 -1. - <_> - 6 10 6 1 2. - 0 - 0.0142564903944731 - -0.0749205797910690 - 0.1896851956844330 - <_> - - <_> - - - - <_> - 7 2 8 10 -1. - <_> - 11 2 4 5 2. - <_> - 7 7 4 5 2. - 0 - -0.1846261024475098 - 0.4410085082054138 - -0.0121491597965360 - <_> - - <_> - - - - <_> - 5 3 2 6 -1. - <_> - 5 5 2 2 3. - 0 - -0.0374477691948414 - 0.2052367031574249 - -0.0658883228898048 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 8 2 6 2 3. - 0 - -0.0401640012860298 - 0.1174004971981049 - -0.0456725507974625 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - 0.0169077105820179 - 0.0369880311191082 - -0.3836815953254700 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - -0.0200215391814709 - 0.1787479072809219 - -0.0615993514657021 - <_> - - <_> - - - - <_> - 0 4 18 7 -1. - <_> - 6 4 6 7 3. - 0 - -0.1628815978765488 - 0.1234195977449417 - -0.1221318021416664 - <_> - - <_> - - - - <_> - 7 2 8 10 -1. - <_> - 11 2 4 5 2. - <_> - 7 7 4 5 2. - 0 - -0.0349111296236515 - -0.0496338717639446 - 0.0199042707681656 - <_> - - <_> - - - - <_> - 3 2 8 10 -1. - <_> - 3 2 4 5 2. - <_> - 7 7 4 5 2. - 0 - 0.1456352025270462 - 0.0305451508611441 - -0.4873585104942322 - <_> - - <_> - - - - <_> - 9 4 1 6 -1. - <_> - 7 6 1 2 3. - 1 - -0.0559622906148434 - 0.1913488060235977 - -0.0152315897867084 - <_> - - <_> - - - - <_> - 9 4 6 1 -1. - <_> - 11 6 2 1 3. - 1 - 0.0457751899957657 - -0.0396332293748856 - 0.3805176913738251 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - -8.0509930849075317e-003 - -0.4310261905193329 - 0.0363861918449402 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 2 1 3 1 3. - 1 - -0.0229253508150578 - -0.3441787958145142 - 0.0384925901889801 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - 0.0614982508122921 - -0.0160337109118700 - 0.5083233714103699 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 5 2 1 4 3. - 1 - -0.0368886701762676 - 0.3932189047336578 - -0.0405200608074665 - <_> - - <_> - - - - <_> - 14 5 4 3 -1. - <_> - 15 5 2 3 2. - 0 - -5.3545171394944191e-003 - 0.2546369135379791 - -0.1160487979650497 - <_> - - <_> - - - - <_> - 3 10 1 2 -1. - <_> - 3 11 1 1 2. - 0 - -2.8639370575547218e-003 - -0.4927360117435455 - 0.0291536897420883 - -1.5970319509506226 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 0 9 2 -1. - <_> - 9 3 3 2 3. - 1 - -0.1426675021648407 - 0.4337263107299805 - -0.3465844094753265 - <_> - - <_> - - - - <_> - 7 4 11 8 -1. - <_> - 7 8 11 4 2. - 0 - 0.1283549964427948 - -0.4654448926448822 - 0.1281660944223404 - <_> - - <_> - - - - <_> - 4 3 4 3 -1. - <_> - 5 4 2 3 2. - 1 - -0.0360548011958599 - 0.4259442985057831 - -0.1772060990333557 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - -0.0203454308211803 - 0.1511936038732529 - -0.1227532997727394 - <_> - - <_> - - - - <_> - 0 2 14 10 -1. - <_> - 0 2 7 5 2. - <_> - 7 7 7 5 2. - 0 - 0.1766604930162430 - 0.1524135023355484 - -0.4253894984722138 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 6 0 6 6 3. - 0 - -0.1673794984817505 - 0.1912579983472824 - -0.1875856071710587 - <_> - - <_> - - - - <_> - 1 1 12 4 -1. - <_> - 1 2 12 2 2. - 0 - 0.0292523000389338 - -0.1795520931482315 - 0.2131651043891907 - <_> - - <_> - - - - <_> - 5 1 10 6 -1. - <_> - 5 3 10 2 3. - 0 - -0.1559309959411621 - 0.3909082114696503 - -0.0665003508329391 - <_> - - <_> - - - - <_> - 6 3 5 3 -1. - <_> - 6 4 5 1 3. - 0 - 0.0163428895175457 - -0.0851227790117264 - 0.4228065907955170 - <_> - - <_> - - - - <_> - 14 8 4 2 -1. - <_> - 14 9 4 1 2. - 0 - 8.9803266746457666e-005 - -0.2427843958139420 - 0.1072012037038803 - <_> - - <_> - - - - <_> - 9 6 4 2 -1. - <_> - 9 6 4 1 2. - 1 - 0.1150313019752502 - -2.8022350743412971e-003 - -2.7832890625000000e+003 - <_> - - <_> - - - - <_> - 14 9 1 2 -1. - <_> - 14 10 1 1 2. - 0 - 2.8660349926212803e-005 - -0.1691206991672516 - 0.0890888124704361 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 10 1 1 2. - 0 - 2.8660349926212803e-005 - -0.2961890995502472 - 0.0993828997015953 - <_> - - <_> - - - - <_> - 15 9 1 2 -1. - <_> - 15 9 1 1 2. - 1 - -0.0102098500356078 - -0.4839555025100708 - 0.0566251389682293 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - -0.0140603696927428 - -0.4141142070293427 - 0.0634278729557991 - <_> - - <_> - - - - <_> - 9 11 6 1 -1. - <_> - 11 11 2 1 3. - 0 - -0.0133488699793816 - -0.4638743996620178 - 0.0283841900527477 - <_> - - <_> - - - - <_> - 3 11 6 1 -1. - <_> - 5 11 2 1 3. - 0 - -0.0125552499666810 - -0.6187946796417236 - 0.0427546687424183 - <_> - - <_> - - - - <_> - 13 4 2 3 -1. - <_> - 12 5 2 1 3. - 1 - 0.0273813307285309 - -0.0527048110961914 - 0.4197832942008972 - <_> - - <_> - - - - <_> - 4 1 4 4 -1. - <_> - 5 2 2 4 2. - 1 - -0.0461624711751938 - 0.3649766147136688 - -0.0724262893199921 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - -0.0130978804081678 - -0.5763328075408936 - 0.0478919297456741 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 8 0 2 3 3. - 0 - -0.0284155309200287 - -0.6006519198417664 - 0.0444609299302101 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 11 6 2 2 2. - 0 - -6.3479221425950527e-003 - 0.3481450974941254 - -0.0890596136450768 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - -9.7118411213159561e-003 - -0.5178142786026001 - 0.0563164092600346 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - -0.0216984208673239 - 0.3070451915264130 - -0.0971638336777687 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0442762486636639 - 0.2582325935363770 - -0.1037423983216286 - <_> - - <_> - - - - <_> - 6 0 9 4 -1. - <_> - 6 1 9 2 2. - 0 - 0.0158465802669525 - -0.1110616028308868 - 0.1783924996852875 - <_> - - <_> - - - - <_> - 2 6 6 2 -1. - <_> - 4 6 2 2 3. - 0 - -0.0214986503124237 - 0.3492724001407623 - -0.0743066370487213 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -2.9085460118949413e-003 - -0.3690954148769379 - 0.0685168430209160 - <_> - - <_> - - - - <_> - 9 3 3 4 -1. - <_> - 8 4 3 2 2. - 1 - -0.0317891091108322 - 0.2379990965127945 - -0.1143317967653275 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - 0.0107693700119853 - 0.0371510311961174 - -0.2569347918033600 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -4.5090089552104473e-003 - -0.5789695978164673 - 0.0442005991935730 - <_> - - <_> - - - - <_> - 9 9 6 3 -1. - <_> - 11 9 2 3 3. - 0 - -5.3212768398225307e-003 - 0.0844352319836617 - -0.0639492794871330 - <_> - - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 5 9 2 3 3. - 0 - 0.0226739291101694 - 0.0515444092452526 - -0.4209808111190796 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - 6.8509699776768684e-003 - -0.0374541282653809 - 0.4513193964958191 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 11 2 1 2. - 0 - 9.6230360213667154e-005 - -0.2074491977691650 - 0.1046546027064323 - <_> - - <_> - - - - <_> - 10 5 3 2 -1. - <_> - 11 6 1 2 3. - 1 - -0.0210920590907335 - 0.2916091084480286 - -0.0625983625650406 - <_> - - <_> - - - - <_> - 2 0 11 8 -1. - <_> - 2 2 11 4 2. - 0 - -0.1340344995260239 - 0.2196906954050064 - -0.0887917131185532 - <_> - - <_> - - - - <_> - 12 4 2 2 -1. - <_> - 12 4 2 1 2. - 1 - -0.0254352893680334 - 0.4082430899143219 - -0.0245454106479883 - <_> - - <_> - - - - <_> - 6 4 2 2 -1. - <_> - 6 4 1 2 2. - 1 - 0.0105433799326420 - -0.0876422896981239 - 0.2717976868152618 - <_> - - <_> - - - - <_> - 15 8 1 2 -1. - <_> - 15 9 1 1 2. - 0 - 9.4132553786039352e-003 - 0.0141789400950074 - -0.4586589932441711 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 9 1 1 2. - 0 - 8.5997307905927300e-005 - -0.2391285002231598 - 0.0919472128152847 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 1.0819079761859030e-004 - -0.1092889979481697 - 0.1150946021080017 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 7 0 7 12 2. - 0 - 0.2424086928367615 - -0.0671853721141815 - 0.2813679873943329 - <_> - - <_> - - - - <_> - 3 2 14 8 -1. - <_> - 3 2 7 8 2. - 0 - -0.4403853118419647 - -0.4357576966285706 - 0.0212147496640682 - <_> - - <_> - - - - <_> - 0 4 18 6 -1. - <_> - 6 4 6 6 3. - 0 - -0.0874531492590904 - 0.1130812987685204 - -0.1847808957099915 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 10 6 1 1 2. - <_> - 9 7 1 1 2. - 0 - -4.1170339100062847e-003 - 0.2507652938365936 - -0.0328979194164276 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 9 4 3 1 2. - 1 - -0.0263757798820734 - 0.3127822875976563 - -0.0590652711689472 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - -7.3441797867417336e-003 - -0.4772517979145050 - 0.0371474586427212 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - 3.6828289012191817e-005 - -0.1335867047309876 - 0.1329413056373596 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 8 5 3 1 3. - 0 - 0.0100506097078323 - -0.0461779907345772 - 0.2838149964809418 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - -0.0107135400176048 - -0.4329094886779785 - 0.0423329807817936 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - -0.0105017302557826 - -0.2163923978805542 - 0.0410590283572674 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 0 0 9 1 2. - <_> - 9 1 9 1 2. - 0 - -1.7940669786185026e-003 - 0.1230494007468224 - -0.1385052949190140 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - 0.0153230596333742 - 0.0280110202729702 - -0.3744792938232422 - <_> - - <_> - - - - <_> - 1 4 1 3 -1. - <_> - 1 5 1 1 3. - 0 - -8.3098020404577255e-003 - -0.5205225944519043 - 0.0283419508486986 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - 0.0302317403256893 - -0.0669029802083969 - 0.2579069137573242 - <_> - - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - 0.0108835697174072 - 0.0625715777277946 - -0.2686088979244232 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 8 0 1 3 2. - 0 - 9.5374789088964462e-003 - 0.0291982591152191 - -0.4799821972846985 - <_> - - <_> - - - - <_> - 7 6 3 1 -1. - <_> - 8 6 1 1 3. - 0 - -3.9999200962483883e-003 - 0.2494937032461166 - -0.0655446499586105 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - 9.2205414548516273e-003 - 0.0399686507880688 - -0.3752444982528687 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 3 1 10 1 2. - 0 - -0.0327487401664257 - 0.2654593884944916 - -0.0630164816975594 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -2.3801359347999096e-003 - 0.1230892986059189 - -0.0274798907339573 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 1.6849349485710263e-003 - -0.0761665031313896 - 0.2275072038173676 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - 7.1630808524787426e-003 - 0.0394775792956352 - -0.4435499012470245 - <_> - - <_> - - - - <_> - 4 1 2 3 -1. - <_> - 3 2 2 1 3. - 1 - 0.0168136693537235 - 0.0335885100066662 - -0.3995356857776642 - <_> - - <_> - - - - <_> - 16 10 1 2 -1. - <_> - 16 11 1 1 2. - 0 - 3.2795818697195500e-005 - -0.1543599069118500 - 0.0959625765681267 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -1.9717039540410042e-003 - 0.2336520999670029 - -0.0599571987986565 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 15 1 1 3 3. - 1 - -0.0269936900585890 - -0.4137428998947144 - 0.0420086905360222 - <_> - - <_> - - - - <_> - 0 0 10 8 -1. - <_> - 0 4 10 4 2. - 0 - 0.1417710930109024 - 0.0395201481878757 - -0.3402980864048004 - <_> - - <_> - - - - <_> - 14 0 2 4 -1. - <_> - 14 0 1 4 2. - 1 - -0.0136792603880167 - -0.1605730950832367 - 0.0348637402057648 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 4 1 2. - 1 - 0.0291845295578241 - 0.0433709509670734 - -0.4003028869628906 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 5 11 8 1 2. - 0 - 0.0111293997615576 - -0.0785342901945114 - 0.1796029061079025 - <_> - - <_> - - - - <_> - 3 9 2 1 -1. - <_> - 3 9 1 1 2. - 1 - -0.0109355002641678 - -0.3602505028247833 - 0.0429950989782810 - <_> - - <_> - - - - <_> - 16 10 1 2 -1. - <_> - 16 11 1 1 2. - 0 - -3.0513479941873811e-005 - 0.0893702134490013 - -0.0418892800807953 - <_> - - <_> - - - - <_> - 1 10 1 2 -1. - <_> - 1 11 1 1 2. - 0 - 3.2795818697195500e-005 - -0.1807544976472855 - 0.0959093868732452 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - -0.0231177601963282 - -0.2679679989814758 - 0.0100175701081753 - <_> - - <_> - - - - <_> - 0 5 1 6 -1. - <_> - 0 7 1 2 3. - 0 - 0.0138039300218225 - 0.0302478093653917 - -0.4157716035842896 - <_> - - <_> - - - - <_> - 6 0 7 3 -1. - <_> - 6 1 7 1 3. - 0 - 0.0147905796766281 - -0.0626284331083298 - 0.1789302974939346 - <_> - - <_> - - - - <_> - 6 0 9 2 -1. - <_> - 9 3 3 2 3. - 1 - -0.1430779993534088 - -0.1611566990613937 - 0.0892316624522209 - <_> - - <_> - - - - <_> - 7 1 7 3 -1. - <_> - 7 2 7 1 3. - 0 - 0.0199875291436911 - -0.0470620095729828 - 0.1610918939113617 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 0.0142059000208974 - 0.0230433791875839 - -0.5475704073905945 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - -1.7248879885300994e-003 - 0.0944827869534492 - -0.0484853498637676 - <_> - - <_> - - - - <_> - 4 1 10 2 -1. - <_> - 9 1 5 2 2. - 0 - -0.0135483797639608 - 0.1278838962316513 - -0.0996569767594337 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 0 11 9 1 2. - 0 - 0.0628712028264999 - 0.0416908711194992 - -0.3675113022327423 - <_> - - <_> - - - - <_> - 1 9 12 2 -1. - <_> - 7 9 6 2 2. - 0 - -0.0691538527607918 - 0.2737857103347778 - -0.0629636123776436 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 0 0 9 12 2. - 0 - -0.2173445969820023 - 0.1830458939075470 - -0.0992570072412491 - <_> - - <_> - - - - <_> - 5 4 5 6 -1. - <_> - 5 7 5 3 2. - 0 - 0.0274697802960873 - -0.1928683072328568 - 0.0759875699877739 - <_> - - <_> - - - - <_> - 14 3 3 3 -1. - <_> - 13 4 3 1 3. - 1 - 0.0469573400914669 - -0.0187752507627010 - 0.4631434977054596 - <_> - - <_> - - - - <_> - 4 3 3 3 -1. - <_> - 5 4 1 3 3. - 1 - 0.0180867202579975 - -0.0523284710943699 - 0.2886429131031036 - <_> - - <_> - - - - <_> - 12 4 6 5 -1. - <_> - 14 4 2 5 3. - 0 - -0.0139272697269917 - 0.2508543133735657 - -0.1965104043483734 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 3 5 12 2 3. - 0 - -0.1252620965242386 - 0.1471713930368424 - -0.0911462828516960 - <_> - - <_> - - - - <_> - 12 4 2 2 -1. - <_> - 12 5 2 1 2. - 0 - -0.0108911301940680 - -0.1266559958457947 - 0.0103994300588965 - <_> - - <_> - - - - <_> - 4 4 2 2 -1. - <_> - 4 5 2 1 2. - 0 - 0.0109249595552683 - -0.0350030586123466 - 0.4460895061492920 - <_> - - <_> - - - - <_> - 12 1 3 2 -1. - <_> - 13 2 1 2 3. - 1 - 0.0325395502150059 - 0.0184976197779179 - -0.5916779041290283 - <_> - - <_> - - - - <_> - 6 1 2 3 -1. - <_> - 5 2 2 1 3. - 1 - -0.0208457596600056 - -0.3908233940601349 - 0.0347038805484772 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 3 2 12 2 3. - 0 - -0.2364127039909363 - 0.4882872104644775 - -0.0300297793000937 - <_> - - <_> - - - - <_> - 4 3 6 3 -1. - <_> - 4 3 3 3 2. - 1 - -0.1563484072685242 - -0.3345063924789429 - 0.0401343591511250 - <_> - - <_> - - - - <_> - 12 4 6 5 -1. - <_> - 14 4 2 5 3. - 0 - -0.0420015417039394 - 0.0861422270536423 - -0.0249420404434204 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 2.5715960655361414e-003 - -0.0484610311686993 - 0.2389481961727142 - <_> - - <_> - - - - <_> - 15 2 3 2 -1. - <_> - 16 3 1 2 3. - 1 - -0.0171307008713484 - -0.3288700878620148 - 0.0482601895928383 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - 0.0119911301881075 - 0.0370003096759319 - -0.3008561134338379 - <_> - - <_> - - - - <_> - 16 2 2 10 -1. - <_> - 16 2 1 10 2. - 0 - -0.0101651102304459 - 0.2115923017263413 - -0.1345638930797577 - <_> - - <_> - - - - <_> - 0 2 2 10 -1. - <_> - 1 2 1 10 2. - 0 - 0.0317529402673244 - -0.0258559100329876 - 0.5619407892227173 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 16 1 1 1 2. - 1 - 3.5542049445211887e-003 - 0.0773537829518318 - -0.2356971055269241 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 4 1 2 1 3. - 1 - 0.0159854404628277 - 0.0373679809272289 - -0.3239515125751495 - -1.6688350439071655 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 3 2 3 3. - 1 - -0.0836946368217468 - 0.3410044014453888 - -0.3755393922328949 - <_> - - <_> - - - - <_> - 14 5 4 3 -1. - <_> - 14 5 2 3 2. - 0 - -0.0136596104130149 - 0.2740989923477173 - -0.2138371020555496 - <_> - - <_> - - - - <_> - 0 5 4 3 -1. - <_> - 2 5 2 3 2. - 0 - -0.0129716601222754 - 0.2814351022243500 - -0.2692151069641113 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - -0.0249797105789185 - 0.1779302060604096 - -0.1171007007360458 - <_> - - <_> - - - - <_> - 5 2 3 6 -1. - <_> - 5 4 3 2 3. - 0 - -0.0401367507874966 - 0.2885540127754211 - -0.1942718029022217 - <_> - - <_> - - - - <_> - 13 7 4 1 -1. - <_> - 13 7 2 1 2. - 0 - -6.0740387998521328e-003 - 0.1590372025966644 - -0.0149317402392626 - <_> - - <_> - - - - <_> - 0 6 6 6 -1. - <_> - 0 9 6 3 2. - 0 - 0.0284710805863142 - -0.4433281123638153 - 0.0747999772429466 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 10 5 2 3 2. - 0 - 0.0167666599154472 - -0.0604997687041759 - 0.4210987091064453 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - -0.0729147270321846 - 0.2074908018112183 - -0.1472733020782471 - <_> - - <_> - - - - <_> - 10 1 3 6 -1. - <_> - 11 2 1 6 3. - 1 - 0.0177430007606745 - -0.0485890507698059 - 0.1159655004739761 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 7 2 6 1 3. - 1 - -0.0295015294104815 - 0.2943966984748840 - -0.0966272130608559 - <_> - - <_> - - - - <_> - 10 4 3 3 -1. - <_> - 11 5 1 3 3. - 1 - 0.0406251214444637 - -0.0262391008436680 - 0.4683097004890442 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - -0.0217793490737677 - 0.3112086057662964 - -0.1022349968552589 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 3.4435780253261328e-003 - 0.0561119206249714 - -0.4116103053092957 - <_> - - <_> - - - - <_> - 4 6 4 2 -1. - <_> - 5 6 2 2 2. - 0 - -5.5878269486129284e-003 - 0.2929837107658386 - -0.0961229130625725 - <_> - - <_> - - - - <_> - 16 8 1 4 -1. - <_> - 16 9 1 2 2. - 0 - -4.7618029639124870e-003 - -0.4650284945964813 - 0.0591933205723763 - <_> - - <_> - - - - <_> - 5 0 5 6 -1. - <_> - 5 2 5 2 3. - 0 - -0.0597818605601788 - 0.3553282916545868 - -0.0803771466016769 - <_> - - <_> - - - - <_> - 10 5 2 3 -1. - <_> - 10 5 1 3 2. - 1 - 6.0978909023106098e-003 - -0.0166924502700567 - 0.1646998971700668 - <_> - - <_> - - - - <_> - 8 5 3 2 -1. - <_> - 8 5 3 1 2. - 1 - -0.0273686293512583 - 0.2656433880329132 - -0.1000477001070976 - <_> - - <_> - - - - <_> - 16 8 1 4 -1. - <_> - 16 9 1 2 2. - 0 - 8.0997692421078682e-003 - 0.0187604799866676 - -0.4752368927001953 - <_> - - <_> - - - - <_> - 1 8 1 4 -1. - <_> - 1 9 1 2 2. - 0 - -2.5963999796658754e-003 - -0.3597832024097443 - 0.0645452216267586 - <_> - - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 13 2 4 2 2. - 1 - 0.0315931998193264 - -0.0377982594072819 - 0.2307599037885666 - <_> - - <_> - - - - <_> - 0 10 7 2 -1. - <_> - 0 11 7 1 2. - 0 - 1.0456099698785692e-004 - -0.2868582010269165 - 0.0870969593524933 - <_> - - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 13 2 4 2 2. - 1 - -0.0519061982631683 - 0.0839637964963913 - -0.0205326303839684 - <_> - - <_> - - - - <_> - 4 1 4 4 -1. - <_> - 5 2 2 4 2. - 1 - 0.0244984999299049 - -0.0828146189451218 - 0.2847521007061005 - <_> - - <_> - - - - <_> - 8 4 5 2 -1. - <_> - 8 5 5 1 2. - 0 - 0.0125663802027702 - -0.0452791601419449 - 0.2167464941740036 - <_> - - <_> - - - - <_> - 5 2 8 10 -1. - <_> - 5 2 4 5 2. - <_> - 9 7 4 5 2. - 0 - -0.0913186222314835 - -0.4423049986362457 - 0.0471048802137375 - <_> - - <_> - - - - <_> - 17 5 1 4 -1. - <_> - 17 6 1 2 2. - 0 - 6.6391900181770325e-003 - 0.0290595795959234 - -0.5225294828414917 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 0 2 4 2. - 0 - 0.0171277001500130 - 0.0279338192194700 - -0.5795859098434448 - <_> - - <_> - - - - <_> - 16 11 2 1 -1. - <_> - 16 11 1 1 2. - 0 - -6.0757698520319536e-005 - 0.1010269001126289 - -0.0938784703612328 - <_> - - <_> - - - - <_> - 0 11 2 1 -1. - <_> - 1 11 1 1 2. - 0 - 7.7282187703531235e-005 - -0.1399565935134888 - 0.1423524022102356 - <_> - - <_> - - - - <_> - 17 0 1 12 -1. - <_> - 17 6 1 6 2. - 0 - -0.0452667213976383 - -0.1595887988805771 - 0.0130199203267694 - <_> - - <_> - - - - <_> - 0 2 1 10 -1. - <_> - 0 7 1 5 2. - 0 - -0.0127395903691649 - -0.4183672964572907 - 0.0463712587952614 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 6 0 3 3 2. - 0 - 4.7306739725172520e-003 - -0.1471915990114212 - 0.1254952996969223 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - -6.8478072062134743e-003 - -0.2865520119667053 - 0.0649360194802284 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 9 0 2 4 2. - 0 - -0.0144783398136497 - -0.5574644207954407 - 0.0319023206830025 - <_> - - <_> - - - - <_> - 5 4 3 3 -1. - <_> - 6 5 1 3 3. - 1 - 0.0253218505531549 - -0.0519697181880474 - 0.4031704068183899 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 16 8 1 1 2. - <_> - 15 9 1 1 2. - 0 - 1.4498929958790541e-003 - -0.0712788626551628 - 0.2044527977705002 - <_> - - <_> - - - - <_> - 1 8 2 2 -1. - <_> - 1 8 1 1 2. - <_> - 2 9 1 1 2. - 0 - 9.1836787760257721e-005 - -0.1383661925792694 - 0.1337634027004242 - <_> - - <_> - - - - <_> - 16 11 2 1 -1. - <_> - 16 11 1 1 2. - 0 - 8.9083143393509090e-005 - -0.0757812634110451 - 0.1030441001057625 - <_> - - <_> - - - - <_> - 0 11 2 1 -1. - <_> - 1 11 1 1 2. - 0 - -8.0758632975630462e-005 - 0.1644583940505981 - -0.1120261028409004 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 0 11 9 1 2. - 0 - 0.0892854332923889 - 0.0309306494891644 - -0.5743001103401184 - <_> - - <_> - - - - <_> - 5 4 6 8 -1. - <_> - 5 8 6 4 2. - 0 - 0.0158832296729088 - -0.4322473108768463 - 0.0340753011405468 - <_> - - <_> - - - - <_> - 6 0 8 3 -1. - <_> - 6 1 8 1 3. - 0 - -0.0141719095408916 - 0.2027620971202850 - -0.0791848972439766 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0357209406793118 - -0.0903915017843246 - 0.2199959009885788 - <_> - - <_> - - - - <_> - 8 11 4 1 -1. - <_> - 9 11 2 1 2. - 0 - 5.3087039850652218e-003 - 0.0212820693850517 - -0.5309743881225586 - <_> - - <_> - - - - <_> - 5 3 1 2 -1. - <_> - 5 3 1 1 2. - 1 - 0.0109678097069263 - 0.0347930788993835 - -0.4312751889228821 - <_> - - <_> - - - - <_> - 5 2 10 4 -1. - <_> - 5 3 10 2 2. - 0 - 0.0336300097405910 - -0.0643780007958412 - 0.2256986945867539 - <_> - - <_> - - - - <_> - 1 8 2 3 -1. - <_> - 1 9 2 1 3. - 0 - 0.0117506701499224 - 0.0333640091121197 - -0.4999623000621796 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -1.4994719531387091e-003 - 0.2113948017358780 - -0.0783023312687874 - <_> - - <_> - - - - <_> - 9 2 2 8 -1. - <_> - 9 2 2 4 2. - 1 - -0.1838434934616089 - 0.2969577014446259 - -0.0530624799430370 - <_> - - <_> - - - - <_> - 0 0 18 9 -1. - <_> - 0 0 9 9 2. - 0 - -0.2637495994567871 - 0.2099512964487076 - -0.0765045136213303 - <_> - - <_> - - - - <_> - 0 4 15 8 -1. - <_> - 5 4 5 8 3. - 0 - -0.4722968041896820 - -0.6000798940658569 - 0.0251975990831852 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 6 1 3 3. - 1 - 0.0484925508499146 - -0.0313359387218952 - 0.2785519063472748 - <_> - - <_> - - - - <_> - 0 2 14 10 -1. - <_> - 7 2 7 10 2. - 0 - -0.3400250971317291 - 0.2385111004114151 - -0.0664357095956802 - <_> - - <_> - - - - <_> - 14 0 2 4 -1. - <_> - 14 0 1 4 2. - 1 - -0.0114147998392582 - -0.2547709941864014 - 0.0686119124293327 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 5 4 8 1 2. - 0 - 0.0210570096969604 - -0.0447892397642136 - 0.3582226932048798 - <_> - - <_> - - - - <_> - 12 3 6 2 -1. - <_> - 12 4 6 1 2. - 0 - -1.3073880109004676e-004 - 0.1079995036125183 - -0.1429215967655182 - <_> - - <_> - - - - <_> - 5 0 1 4 -1. - <_> - 4 1 1 2 2. - 1 - -0.0161463692784309 - -0.4497553110122681 - 0.0319031886756420 - <_> - - <_> - - - - <_> - 14 0 2 4 -1. - <_> - 14 0 1 4 2. - 1 - 0.0264048594981432 - 0.0307808890938759 - -0.2380720973014832 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 4 1 2. - 1 - -0.0149836800992489 - -0.3162455856800079 - 0.0529575012624264 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 10 5 3 1 2. - 0 - -6.6260308958590031e-003 - 0.0947839617729187 - -0.0379470288753510 - <_> - - <_> - - - - <_> - 5 4 4 2 -1. - <_> - 5 5 4 1 2. - 0 - 9.4577856361865997e-003 - -0.0632357597351074 - 0.2781418859958649 - <_> - - <_> - - - - <_> - 13 2 4 3 -1. - <_> - 12 3 4 1 3. - 1 - 0.0284659191966057 - -0.0402093790471554 - 0.2937918901443481 - <_> - - <_> - - - - <_> - 5 2 3 4 -1. - <_> - 6 3 1 4 3. - 1 - 0.0328826084733009 - -0.0413506403565407 - 0.3313314020633698 - <_> - - <_> - - - - <_> - 17 5 1 4 -1. - <_> - 17 6 1 2 2. - 0 - -8.3604697138071060e-003 - -0.4081225991249085 - 0.0330698117613792 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 3 1 12 1 2. - 0 - -0.0304503999650478 - 0.2182721048593521 - -0.0717217996716499 - <_> - - <_> - - - - <_> - 15 9 2 3 -1. - <_> - 15 10 2 1 3. - 0 - -5.8005149476230145e-003 - -0.2956233024597168 - 0.0370872505009174 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - 4.8168208450078964e-003 - 0.0327774696052074 - -0.4208317101001740 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 1.5842430293560028e-003 - -0.0697162598371506 - 0.1936556994915009 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - 8.4104435518383980e-003 - 0.0296925306320190 - -0.5031313896179199 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -1.0347180068492889e-004 - 0.0983636900782585 - -0.0869070068001747 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - 8.2377959042787552e-003 - 0.0369995497167110 - -0.3852713108062744 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 1.1734689906006679e-004 - -0.0654924064874649 - 0.0622663982212543 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -9.8627153784036636e-004 - 0.1891711950302124 - -0.0804252699017525 - <_> - - <_> - - - - <_> - 17 5 1 4 -1. - <_> - 17 6 1 2 2. - 0 - -8.6078172898851335e-005 - 0.0824472829699516 - -0.0953762009739876 - <_> - - <_> - - - - <_> - 0 5 1 4 -1. - <_> - 0 6 1 2 2. - 0 - 5.6891320273280144e-003 - 0.0333465300500393 - -0.4020530879497528 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 1.0112339805345982e-004 - -0.1028463989496231 - 0.1131741032004356 - <_> - - <_> - - - - <_> - 9 3 6 3 -1. - <_> - 8 4 6 1 3. - 1 - -0.0159188602119684 - 0.1396463960409164 - -0.1053752005100250 - <_> - - <_> - - - - <_> - 16 6 2 1 -1. - <_> - 16 6 1 1 2. - 0 - -1.0231309715891257e-004 - 0.1199019998311997 - -0.2075942009687424 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -9.1397319920361042e-004 - 0.1617929935455322 - -0.0755802765488625 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 16 8 2 1 3. - 0 - 6.6993040964007378e-003 - 0.0250010807067156 - -0.1641622930765152 - <_> - - <_> - - - - <_> - 0 7 2 3 -1. - <_> - 0 8 2 1 3. - 0 - 0.0126993004232645 - 0.0226950403302908 - -0.5273951292037964 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - -0.0132831698283553 - -0.4116092920303345 - 0.0270539298653603 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 1.0245139710605145e-003 - -0.0809253379702568 - 0.1609123051166534 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 8.1607067841105163e-005 - -0.0653921067714691 - 0.0949816927313805 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -2.1534129045903683e-003 - 0.2399435937404633 - -0.0698399990797043 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 9 10 2 2 3. - 0 - -0.0297515094280243 - -0.6112301945686340 - 0.0174789894372225 - <_> - - <_> - - - - <_> - 0 2 18 8 -1. - <_> - 0 2 9 4 2. - <_> - 9 6 9 4 2. - 0 - -0.1303281933069229 - -0.2529667913913727 - 0.0458865389227867 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0383929312229156 - 0.1502663940191269 - -0.0833002030849457 - <_> - - <_> - - - - <_> - 5 10 6 2 -1. - <_> - 7 10 2 2 3. - 0 - -0.0206376705318689 - -0.4774976968765259 - 0.0273166391998529 - <_> - - <_> - - - - <_> - 8 8 4 4 -1. - <_> - 8 9 4 2 2. - 0 - -9.2679895460605621e-003 - 0.1495240926742554 - -0.0530842617154121 - <_> - - <_> - - - - <_> - 5 0 6 3 -1. - <_> - 5 1 6 1 3. - 0 - 0.0120761198922992 - -0.0738780125975609 - 0.1731128990650177 - <_> - - <_> - - - - <_> - 8 1 4 2 -1. - <_> - 9 1 2 2 2. - 0 - 0.0142523003742099 - 0.0107008703052998 - -0.4848352968692780 - <_> - - <_> - - - - <_> - 6 1 4 2 -1. - <_> - 7 1 2 2 2. - 0 - 7.9848906025290489e-003 - 0.0315579287707806 - -0.3982397913932800 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - -7.6416457886807621e-005 - 0.0951977819204330 - -0.0660961717367172 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 9.6317751740571111e-005 - -0.1066462993621826 - 0.1268212944269180 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 11 8 2 1 2. - 0 - 3.1491980189457536e-004 - -0.0525143183767796 - 0.0245233792811632 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 8 2 1 2. - 0 - 5.1320712082087994e-003 - -0.0943100601434708 - 0.1192641034722328 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - -0.0789068862795830 - 0.1896478980779648 - -0.0616648010909557 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -1.4321829658001661e-003 - 0.1456758975982666 - -0.0755130872130394 - <_> - - <_> - - - - <_> - 10 1 4 3 -1. - <_> - 10 1 2 3 2. - 0 - -0.0451036281883717 - -0.4848248958587647 - 8.3793140947818756e-003 - <_> - - <_> - - - - <_> - 3 0 2 1 -1. - <_> - 4 0 1 1 2. - 0 - 3.9267681131605059e-005 - -0.0983941331505775 - 0.1126554980874062 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - -0.0175016503781080 - -0.4466168880462647 - 0.0564428903162479 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 0.0258498694747686 - 0.0229466296732426 - -0.4196321964263916 - <_> - - <_> - - - - <_> - 7 4 10 4 -1. - <_> - 7 4 5 4 2. - 0 - -5.6344410404562950e-003 - 0.0370229296386242 - -0.0914343297481537 - <_> - - <_> - - - - <_> - 1 4 10 4 -1. - <_> - 6 4 5 4 2. - 0 - -0.1652574986219406 - -0.3212014138698578 - 0.0334465689957142 - <_> - - <_> - - - - <_> - 13 0 2 1 -1. - <_> - 13 0 1 1 2. - 0 - -7.4969837442040443e-005 - 0.1024757027626038 - -0.1333374977111816 - <_> - - <_> - - - - <_> - 0 3 1 6 -1. - <_> - 0 5 1 2 3. - 0 - -0.0160514302551746 - -0.2687157988548279 - 0.0388328209519386 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - 0.0484956614673138 - -0.0176114197820425 - 0.4321045875549316 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - -0.0580279901623726 - 0.5674945712089539 - -0.0189294908195734 - <_> - - <_> - - - - <_> - 4 2 10 1 -1. - <_> - 4 2 5 1 2. - 0 - 9.3509042635560036e-003 - -0.0819991603493690 - 0.1264501959085465 - <_> - - <_> - - - - <_> - 3 0 4 2 -1. - <_> - 4 0 2 2 2. - 0 - 7.2834091261029243e-003 - 0.0360804013907909 - -0.3069862127304077 - <_> - - <_> - - - - <_> - 9 0 5 8 -1. - <_> - 9 2 5 4 2. - 0 - -0.0365255512297153 - 0.0594477802515030 - -0.0655446425080299 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 1 1 2. - <_> - 8 4 1 1 2. - 0 - -2.2749549243599176e-003 - 0.2053637057542801 - -0.0503664687275887 - <_> - - <_> - - - - <_> - 0 5 18 2 -1. - <_> - 9 5 9 1 2. - <_> - 0 6 9 1 2. - 0 - -0.0455716587603092 - -0.3678281903266907 - 0.0298570506274700 - <_> - - <_> - - - - <_> - 0 9 3 1 -1. - <_> - 1 9 1 1 3. - 0 - 7.8613593359477818e-005 - -0.1012998968362808 - 0.0988395810127258 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - 7.4493337888270617e-004 - 0.1042293980717659 - -0.2824330031871796 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 10 1 1 2. - <_> - 1 11 1 1 2. - 0 - 6.7769076849799603e-005 - -0.1019401997327805 - 0.1068416014313698 - <_> - - <_> - - - - <_> - 5 2 12 3 -1. - <_> - 5 3 12 1 3. - 0 - 0.0149764297530055 - -0.0548286102712154 - 0.1124159991741180 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - -1.6552510205656290e-003 - -0.2591753900051117 - 0.0402210690081120 - <_> - - <_> - - - - <_> - 10 9 4 3 -1. - <_> - 11 9 2 3 2. - 0 - -0.0142556801438332 - -0.3670678138732910 - 0.0161724705249071 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - -2.0518230739980936e-003 - 0.1926907002925873 - -0.0478732287883759 - <_> - - <_> - - - - <_> - 9 1 3 6 -1. - <_> - 7 3 3 2 3. - 1 - 0.1305371969938278 - 6.2902332283556461e-003 - -0.3756305873394013 - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 3 2 3 3. - 1 - -0.0833243280649185 - -0.1189247965812683 - 0.0930244028568268 - <_> - - <_> - - - - <_> - 14 0 4 10 -1. - <_> - 14 5 4 5 2. - 0 - 0.2492212951183319 - 7.7079031616449356e-003 - -0.7705643773078919 - -1.6429220438003540 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0144048901274800 - 0.3417874872684479 - -0.3029088079929352 - <_> - - <_> - - - - <_> - 6 4 11 8 -1. - <_> - 6 8 11 4 2. - 0 - 0.2266740947961807 - -0.3307273983955383 - 0.1636023074388504 - <_> - - <_> - - - - <_> - 3 2 2 9 -1. - <_> - 3 5 2 3 3. - 0 - -0.0469341501593590 - 0.2708880901336670 - -0.2528345882892609 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - -7.4530718848109245e-003 - 0.4481373131275177 - -0.0606677196919918 - <_> - - <_> - - - - <_> - 0 4 4 7 -1. - <_> - 2 4 2 7 2. - 0 - -0.0214920900762081 - 0.1897142976522446 - -0.2200036048889160 - <_> - - <_> - - - - <_> - 15 7 3 3 -1. - <_> - 16 8 1 1 9. - 0 - -5.7815029285848141e-003 - 0.0884260982275009 - -0.0306275300681591 - <_> - - <_> - - - - <_> - 0 3 3 1 -1. - <_> - 1 3 1 1 3. - 0 - 0.0396744310855865 - -5.4195029661059380e-003 - -1.4207619628906250e+003 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - 0.0136275896802545 - -0.0911957770586014 - 0.4834488034248352 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 5 1 3 3. - 0 - -6.5549151040613651e-003 - 0.3402729034423828 - -0.1148158013820648 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 5.1418822258710861e-003 - -0.2146569043397903 - 0.1563148051500320 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -7.1714469231665134e-003 - 0.2890853881835938 - -0.1148502975702286 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - -5.5360728874802589e-003 - 0.2166815996170044 - -0.0838172510266304 - <_> - - <_> - - - - <_> - 0 4 10 3 -1. - <_> - 0 5 10 1 3. - 0 - 0.2224552929401398 - -6.5196859650313854e-003 - -4.8679741210937500e+003 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - 0.0115570798516274 - -0.0454592406749725 - 0.3039467930793762 - <_> - - <_> - - - - <_> - 0 0 12 11 -1. - <_> - 4 0 4 11 3. - 0 - -0.2463150024414063 - -0.5188724994659424 - 0.0511754192411900 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - -1.7819709610193968e-003 - 0.0344860590994358 - -0.0391638614237309 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 5 1 3 3. - 0 - -8.7224133312702179e-003 - 0.3254309892654419 - -0.0765746533870697 - <_> - - <_> - - - - <_> - 7 0 6 3 -1. - <_> - 9 0 2 3 3. - 0 - -0.0356582701206207 - -0.5983566045761108 - 0.0383163392543793 - <_> - - <_> - - - - <_> - 5 0 6 3 -1. - <_> - 7 0 2 3 3. - 0 - -0.0289036799222231 - -0.6353018283843994 - 0.0247306898236275 - <_> - - <_> - - - - <_> - 0 0 18 5 -1. - <_> - 6 0 6 5 3. - 0 - -0.1164717003703117 - 0.1807568073272705 - -0.1635234057903290 - <_> - - <_> - - - - <_> - 4 0 7 4 -1. - <_> - 4 1 7 2 2. - 0 - 0.0258101299405098 - -0.1088633984327316 - 0.2379308044910431 - <_> - - <_> - - - - <_> - 10 0 3 2 -1. - <_> - 10 1 3 1 2. - 0 - -7.3603908531367779e-003 - 0.1904835999011993 - -0.0800136178731918 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - 1.0619719978421926e-004 - -0.2455690950155258 - 0.0952197685837746 - <_> - - <_> - - - - <_> - 16 8 2 2 -1. - <_> - 16 8 2 1 2. - 1 - -0.0197194200009108 - -0.4757296144962311 - 0.0373679287731647 - <_> - - <_> - - - - <_> - 1 7 4 1 -1. - <_> - 1 7 2 1 2. - 1 - -7.4374658288434148e-004 - 0.0915851518511772 - -0.2566849887371063 - <_> - - <_> - - - - <_> - 6 1 6 6 -1. - <_> - 6 3 6 2 3. - 0 - 0.0982190221548080 - -0.0702288299798965 - 0.3357439935207367 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 8 11 2 1 2. - 0 - 5.3615029901266098e-003 - 0.0312140900641680 - -0.6775388121604919 - <_> - - <_> - - - - <_> - 16 3 2 4 -1. - <_> - 16 4 2 2 2. - 0 - -0.0148687595501542 - -0.5809695720672607 - 0.0428148284554482 - <_> - - <_> - - - - <_> - 3 2 11 6 -1. - <_> - 3 4 11 2 3. - 0 - -0.0964128524065018 - 0.1300428956747055 - -0.1267888993024826 - <_> - - <_> - - - - <_> - 10 0 3 2 -1. - <_> - 10 1 3 1 2. - 0 - 3.7894989363849163e-003 - -0.0655986294150352 - 0.1557977050542831 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 5 1 3 1 2. - 0 - -3.4858610015362501e-003 - 0.2183402925729752 - -0.1222129985690117 - <_> - - <_> - - - - <_> - 2 0 16 11 -1. - <_> - 2 0 8 11 2. - 0 - 0.3349829912185669 - -0.0245881509035826 - 0.1763146072626114 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0257387291640043 - 0.1433213949203491 - -0.1117798015475273 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 4 0 7 12 2. - 0 - 0.3850714862346649 - 0.0145256398245692 - -0.3629615008831024 - <_> - - <_> - - - - <_> - 4 0 6 5 -1. - <_> - 6 0 2 5 3. - 0 - -0.0281054191291332 - -0.3428766131401062 - 0.0493064001202583 - <_> - - <_> - - - - <_> - 16 5 2 4 -1. - <_> - 16 6 2 2 2. - 0 - -0.0184734091162682 - -0.5893219113349915 - 0.0238633304834366 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 2 2 2 2. - 0 - -0.0135366898030043 - -0.4291228055953980 - 0.0319439098238945 - <_> - - <_> - - - - <_> - 7 1 6 4 -1. - <_> - 7 2 6 2 2. - 0 - -0.0231229495257139 - 0.2014220952987671 - -0.0503530390560627 - <_> - - <_> - - - - <_> - 3 2 4 3 -1. - <_> - 4 3 2 3 2. - 1 - 0.0211394093930721 - -0.0638992562890053 - 0.2652564942836762 - <_> - - <_> - - - - <_> - 7 2 8 8 -1. - <_> - 11 2 4 4 2. - <_> - 7 6 4 4 2. - 0 - 0.0900675207376480 - 0.0112279001623392 - -0.1031911969184876 - <_> - - <_> - - - - <_> - 0 5 2 4 -1. - <_> - 0 6 2 2 2. - 0 - 0.0103827295824885 - 0.0357205010950565 - -0.4954187870025635 - <_> - - <_> - - - - <_> - 7 2 8 8 -1. - <_> - 11 2 4 4 2. - <_> - 7 6 4 4 2. - 0 - 1.4825740363448858e-003 - -0.0248882602900267 - 0.0237133391201496 - <_> - - <_> - - - - <_> - 3 2 8 8 -1. - <_> - 3 2 4 4 2. - <_> - 7 6 4 4 2. - 0 - 0.1237843036651611 - 0.0322882011532784 - -0.5373219251632690 - <_> - - <_> - - - - <_> - 17 6 1 6 -1. - <_> - 17 8 1 2 3. - 0 - -0.0161164700984955 - -0.4857034087181091 - 0.0274617001414299 - <_> - - <_> - - - - <_> - 0 6 1 6 -1. - <_> - 0 8 1 2 3. - 0 - 0.0159066393971443 - 0.0292402002960444 - -0.4542374014854431 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 9 5 1 1 9. - 0 - -9.1634020209312439e-003 - 0.1062512025237083 - -0.1008044034242630 - <_> - - <_> - - - - <_> - 6 3 5 3 -1. - <_> - 6 4 5 1 3. - 0 - -0.0193473491817713 - 0.2173905968666077 - -0.0690005123615265 - <_> - - <_> - - - - <_> - 8 9 4 3 -1. - <_> - 9 9 2 3 2. - 0 - -0.0103256097063422 - -0.4061712920665741 - 0.0283007193356752 - <_> - - <_> - - - - <_> - 2 4 4 5 -1. - <_> - 3 4 2 5 2. - 0 - -4.4596269726753235e-003 - 0.1388134956359863 - -0.1016713976860046 - <_> - - <_> - - - - <_> - 13 3 3 3 -1. - <_> - 12 4 3 1 3. - 1 - -0.0133312400430441 - 0.1116838976740837 - -0.0570181608200073 - <_> - - <_> - - - - <_> - 5 3 3 3 -1. - <_> - 6 4 1 3 3. - 1 - 0.0140380896627903 - -0.0658330321311951 - 0.2812659144401550 - <_> - - <_> - - - - <_> - 7 10 6 1 -1. - <_> - 9 10 2 1 3. - 0 - 8.6190225556492805e-003 - 0.0315866805613041 - -0.2893286943435669 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 7 0 7 12 2. - 0 - 0.2938677072525024 - -0.0468905903398991 - 0.3061471879482269 - <_> - - <_> - - - - <_> - 14 4 1 2 -1. - <_> - 14 4 1 1 2. - 1 - -0.0148689402267337 - 0.1750212013721466 - -0.0100259101018310 - <_> - - <_> - - - - <_> - 9 2 9 1 -1. - <_> - 12 5 3 1 3. - 1 - -0.0432849898934364 - 0.1716116070747376 - -0.0967921093106270 - <_> - - <_> - - - - <_> - 8 4 3 4 -1. - <_> - 9 4 1 4 3. - 0 - 0.0128885097801685 - -0.0229285508394241 - 0.2418552041053772 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 1 5 1 3 2. - 0 - -3.4358419943600893e-003 - 0.1351819932460785 - -0.1038846969604492 - <_> - - <_> - - - - <_> - 4 2 11 3 -1. - <_> - 4 3 11 1 3. - 0 - -0.0340359583497047 - 0.2567476034164429 - -0.0520287007093430 - <_> - - <_> - - - - <_> - 4 4 2 1 -1. - <_> - 4 4 1 1 2. - 1 - 5.0311200320720673e-003 - -0.0844775512814522 - 0.1623740941286087 - <_> - - <_> - - - - <_> - 17 1 1 8 -1. - <_> - 17 3 1 4 2. - 0 - -1.2706579582300037e-004 - 0.1055900976061821 - -0.2125353068113327 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 0 5 2 1 3. - 0 - 0.0111655602231622 - 0.0263089109212160 - -0.4865539073944092 - <_> - - <_> - - - - <_> - 5 2 9 10 -1. - <_> - 8 2 3 10 3. - 0 - -0.0525597408413887 - 0.1085146963596344 - -0.1139608025550842 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -9.1416407376527786e-003 - -0.4066394865512848 - 0.0349575690925121 - <_> - - <_> - - - - <_> - 6 1 6 8 -1. - <_> - 6 1 3 8 2. - 0 - -0.1108352020382881 - 0.4129435122013092 - -0.0339391008019447 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 8 0 5 2 2. - 0 - -5.7494291104376316e-003 - 0.1046520993113518 - -0.1108004972338677 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 9 0 9 5 2. - <_> - 0 5 9 5 2. - 0 - -0.3383356034755707 - -0.4255520105361939 - 0.0292493905872107 - <_> - - <_> - - - - <_> - 7 1 4 2 -1. - <_> - 8 1 2 2 2. - 0 - -9.9934339523315430e-003 - -0.5376632213592529 - 0.0194288194179535 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - -4.4573689810931683e-003 - 0.1814071983098984 - -0.0610980615019798 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - 0.0117391804233193 - 0.0276917908340693 - -0.4160597026348114 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - -2.0730029791593552e-003 - 0.2151183038949966 - -0.0445881113409996 - <_> - - <_> - - - - <_> - 6 9 4 1 -1. - <_> - 7 9 2 1 2. - 0 - 4.3844608590006828e-003 - 0.0303817205131054 - -0.3906125128269196 - <_> - - <_> - - - - <_> - 16 1 2 3 -1. - <_> - 16 2 2 1 3. - 0 - 8.9646214619278908e-003 - 0.0320708602666855 - -0.3713954985141754 - <_> - - <_> - - - - <_> - 7 2 1 3 -1. - <_> - 7 3 1 1 3. - 0 - 4.3689231388270855e-003 - -0.0626119375228882 - 0.1863033026456833 - <_> - - <_> - - - - <_> - 12 3 4 1 -1. - <_> - 13 4 2 1 2. - 1 - -0.0222061108797789 - -0.2521347105503082 - 0.0173849798738956 - <_> - - <_> - - - - <_> - 5 2 2 2 -1. - <_> - 5 2 2 1 2. - 1 - 0.0268171206116676 - 0.0187781006097794 - -0.6334772706031799 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - 1.0099010250996798e-004 - -0.0898824036121368 - 0.0929719433188438 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 11 2 1 2. - 0 - -3.7158210761845112e-003 - -0.4498794078826904 - 0.0250294599682093 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 10 2 1 2. - 0 - -2.7535969857126474e-003 - 0.2607046961784363 - -0.0709694176912308 - <_> - - <_> - - - - <_> - 5 10 6 2 -1. - <_> - 7 10 2 2 3. - 0 - -0.0219228994101286 - -0.5077775120735169 - 0.0251804199069738 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -7.0883962325751781e-004 - -0.3427650034427643 - 0.0822411626577377 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -1.6273240325972438e-003 - 0.1968282014131546 - -0.0624031312763691 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - 1.4539799885824323e-003 - 0.0522507987916470 - -0.2910020053386688 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - 1.2582080671563745e-004 - -0.1165435984730721 - 0.1104675978422165 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - 8.3695871580857784e-005 - -0.0522894710302353 - 0.0618703514337540 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - -1.1398050264688209e-004 - 0.1539689004421234 - -0.0892020091414452 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - 1.5188050456345081e-003 - -0.0612073205411434 - 0.1290733963251114 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - 0.0154057601466775 - 0.0250001102685928 - -0.4407764077186585 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - -1.1019539670087397e-004 - 0.1011219993233681 - -0.0672010704874992 - <_> - - <_> - - - - <_> - 2 11 6 1 -1. - <_> - 4 11 2 1 3. - 0 - -0.0196758303791285 - -0.6548616290092468 - 0.0169960092753172 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 10 2 1 2. - 0 - -9.9909037817269564e-004 - 0.1025518998503685 - -0.0592892207205296 - <_> - - <_> - - - - <_> - 0 10 4 1 -1. - <_> - 1 10 2 1 2. - 0 - 1.2456219701562077e-004 - -0.1107892990112305 - 0.1034844964742661 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - 1.2445759784895927e-004 - -0.0957439094781876 - 0.0830029025673866 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -1.9823738839477301e-003 - 0.2143152058124542 - -0.0553987398743629 - <_> - - <_> - - - - <_> - 2 4 16 8 -1. - <_> - 10 4 8 4 2. - <_> - 2 8 8 4 2. - 0 - 0.1965426951646805 - 0.0318264998495579 - -0.2168519943952560 - <_> - - <_> - - - - <_> - 6 0 1 4 -1. - <_> - 6 1 1 2 2. - 0 - 3.5871278960257769e-003 - -0.0743222087621689 - 0.1497495025396347 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 0.0106685003265738 - 0.0130248302593827 - -0.3163357973098755 - <_> - - <_> - - - - <_> - 3 0 9 3 -1. - <_> - 3 1 9 1 3. - 0 - -0.0156929697841406 - 0.1812382042407990 - -0.0616139508783817 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 15 1 1 3 3. - 1 - 0.0201006196439266 - 0.0449748486280441 - -0.4333986043930054 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -9.3011429999023676e-004 - 0.1415798962116242 - -0.0726230517029762 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 1.2854380474891514e-004 - -0.0516217090189457 - 0.0481922402977943 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - -0.0105983903631568 - -0.5159295201301575 - 0.0199946500360966 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 15 1 1 3 3. - 1 - -0.0338730812072754 - -0.3170802891254425 - 0.0146650699898601 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 3 1 3 1 3. - 1 - 0.0216640792787075 - 0.0280665308237076 - -0.3488689959049225 - <_> - - <_> - - - - <_> - 10 4 1 4 -1. - <_> - 9 5 1 2 2. - 1 - -0.0162978190928698 - 0.0930405929684639 - -0.0304907094687223 - <_> - - <_> - - - - <_> - 5 4 6 8 -1. - <_> - 5 4 3 4 2. - <_> - 8 8 3 4 2. - 0 - -0.0726411193609238 - -0.4798538982868195 - 0.0219257604330778 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 8 1 2 1 3. - 0 - 5.9341657906770706e-003 - -0.0635952726006508 - 0.1606857925653458 - <_> - - <_> - - - - <_> - 6 0 4 1 -1. - <_> - 8 0 2 1 2. - 0 - -0.0124482000246644 - -0.4358262121677399 - 0.0229794196784496 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -1.4221160381566733e-004 - 0.0630765333771706 - -0.0500784888863564 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 1.4810540014877915e-003 - -0.0576672181487083 - 0.1828493028879166 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 1 1 1 3. - 0 - 1.1081660341005772e-004 - -0.0478888303041458 - 0.0669924765825272 - <_> - - <_> - - - - <_> - 0 1 2 3 -1. - <_> - 0 2 2 1 3. - 0 - 0.0154914399608970 - 0.0203014891594648 - -0.4858367145061493 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 8.7960972450673580e-005 - -0.0770990327000618 - 0.0829952508211136 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -8.1268692156299949e-004 - 0.1440639048814774 - -0.0732753574848175 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 10 0 2 2 2. - <_> - 8 2 2 2 2. - 0 - 0.0245019607245922 - 0.0192935392260551 - -0.2704134881496429 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 9 0 2 8 2. - 1 - 0.1567315012216568 - 0.0258482508361340 - -0.4057519137859345 - <_> - - <_> - - - - <_> - 14 4 2 6 -1. - <_> - 14 4 2 3 2. - 1 - -0.1001951992511749 - -0.1728045046329498 - 0.0289713405072689 - <_> - - <_> - - - - <_> - 0 0 6 8 -1. - <_> - 0 4 6 4 2. - 0 - 0.1618010997772217 - 0.0196809191256762 - -0.5053933262825012 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 10 0 2 2 2. - <_> - 8 2 2 2 2. - 0 - -0.0375295206904411 - -0.3085973858833313 - 2.8489660471677780e-003 - <_> - - <_> - - - - <_> - 4 4 6 2 -1. - <_> - 4 4 3 2 2. - 1 - -0.1201431974768639 - -0.3218207955360413 - 0.0288419798016548 - <_> - - <_> - - - - <_> - 12 1 3 2 -1. - <_> - 13 2 1 2 3. - 1 - -0.0136901503428817 - -0.1231554001569748 - 0.0334449894726276 - <_> - - <_> - - - - <_> - 5 3 8 6 -1. - <_> - 5 3 4 3 2. - <_> - 9 6 4 3 2. - 0 - -0.0923237875103951 - -0.4961450099945068 - 0.0185438599437475 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 5.1788990385830402e-003 - 0.0203749798238277 - -0.1478628963232040 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 3 2 1 2 3. - 1 - 6.2319580465555191e-003 - -0.0742628872394562 - 0.1218551024794579 - <_> - - <_> - - - - <_> - 17 2 1 3 -1. - <_> - 16 3 1 1 3. - 1 - -7.8213810920715332e-003 - 0.1775953024625778 - -0.0513866990804672 - <_> - - <_> - - - - <_> - 6 0 4 4 -1. - <_> - 6 0 2 2 2. - <_> - 8 2 2 2 2. - 0 - -0.0295739807188511 - -0.5075635910034180 - 0.0193991009145975 - <_> - - <_> - - - - <_> - 15 0 3 4 -1. - <_> - 14 1 3 2 2. - 1 - -0.0203246790915728 - 0.1261377930641174 - -0.0535940900444984 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 3 5 12 2 3. - 0 - -0.1235036998987198 - 0.1163941994309425 - -0.0879058167338371 - <_> - - <_> - - - - <_> - 15 0 3 4 -1. - <_> - 14 1 3 2 2. - 1 - 0.1008990034461021 - -3.7132319994270802e-003 - 0.6706827878952026 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 1 2 3 2. - 1 - -0.0330128185451031 - 0.3056246936321259 - -0.0384504310786724 - <_> - - <_> - - - - <_> - 0 3 18 3 -1. - <_> - 6 3 6 3 3. - 0 - -0.0963183492422104 - 0.0983915999531746 - -0.1082156971096993 - <_> - - <_> - - - - <_> - 4 0 10 8 -1. - <_> - 4 2 10 4 2. - 0 - 0.2521410882472992 - -0.0211549103260040 - 0.4793064892292023 - <_> - - <_> - - - - <_> - 8 10 10 2 -1. - <_> - 8 10 5 2 2. - 0 - -0.0188986994326115 - 0.0969856232404709 - -0.0507769100368023 - <_> - - <_> - - - - <_> - 0 10 10 2 -1. - <_> - 5 10 5 2 2. - 0 - 0.0194709096103907 - -0.0669843405485153 - 0.1859807074069977 - -1.5156250000000000 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 2 18 6 -1. - <_> - 6 4 6 2 9. - 0 - -0.5130128860473633 - 0.3376303911209106 - -0.2218343019485474 - <_> - - <_> - - - - <_> - 12 8 6 4 -1. - <_> - 12 10 6 2 2. - 0 - 7.8631602227687836e-003 - -0.3086059093475342 - 0.1502192020416260 - <_> - - <_> - - - - <_> - 6 5 6 4 -1. - <_> - 8 5 2 4 3. - 0 - -0.0206501092761755 - 0.2439322024583817 - -0.2732354104518890 - <_> - - <_> - - - - <_> - 14 6 1 6 -1. - <_> - 14 9 1 3 2. - 0 - 3.9594681002199650e-003 - -0.1556881964206696 - 0.1000844985246658 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 10 2 1 2. - 0 - 0.0465967915952206 - 0.0124803902581334 - -1.1247110595703125e+003 - <_> - - <_> - - - - <_> - 14 6 4 6 -1. - <_> - 16 6 2 3 2. - <_> - 14 9 2 3 2. - 0 - 0.0107681397348642 - -0.0741030126810074 - 0.1030061990022659 - <_> - - <_> - - - - <_> - 0 6 4 6 -1. - <_> - 0 6 2 3 2. - <_> - 2 9 2 3 2. - 0 - 8.1597883254289627e-003 - -0.2426649928092957 - 0.1998627036809921 - <_> - - <_> - - - - <_> - 13 1 4 4 -1. - <_> - 13 1 2 4 2. - 0 - -6.2675480730831623e-003 - 0.1482053995132446 - -0.2999232113361359 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - 5.9478268958628178e-003 - -0.2587324976921082 - 0.1570339053869247 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 0 4 2 2. - 0 - 0.0105143897235394 - -0.1678138971328735 - 0.2417483925819397 - <_> - - <_> - - - - <_> - 1 4 14 6 -1. - <_> - 8 4 7 6 2. - 0 - 0.1224353983998299 - -0.1068272963166237 - 0.3461236059665680 - <_> - - <_> - - - - <_> - 6 3 9 6 -1. - <_> - 6 5 9 2 3. - 0 - -0.1296852976083756 - 0.1743759959936142 - -0.0993710532784462 - <_> - - <_> - - - - <_> - 1 9 1 2 -1. - <_> - 1 10 1 1 2. - 0 - 1.0830949759110808e-004 - -0.2486529052257538 - 0.1116916984319687 - <_> - - <_> - - - - <_> - 6 7 8 1 -1. - <_> - 8 7 4 1 2. - 0 - -0.0322521589696407 - 0.4901643097400665 - -0.0429643392562866 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 6 5 3 1 3. - 1 - -0.0250787492841482 - 0.3188936114311218 - -0.0779699534177780 - <_> - - <_> - - - - <_> - 5 4 9 4 -1. - <_> - 5 6 9 2 2. - 0 - 0.0458320602774620 - -0.1341957002878189 - 0.1799447983503342 - <_> - - <_> - - - - <_> - 2 3 1 2 -1. - <_> - 2 3 1 1 2. - 1 - 8.3064418286085129e-003 - 0.0402554385364056 - -0.4555304050445557 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 9 2 6 2 2. - 0 - 0.0426197685301304 - -0.0254935696721077 - 0.1356887966394424 - <_> - - <_> - - - - <_> - 1 8 1 3 -1. - <_> - 1 9 1 1 3. - 0 - 9.1548979980871081e-005 - -0.1499771028757095 - 0.1406237035989761 - <_> - - <_> - - - - <_> - 1 0 16 4 -1. - <_> - 9 0 8 2 2. - <_> - 1 2 8 2 2. - 0 - 0.0355998985469341 - -0.1004965007305145 - 0.2160336971282959 - <_> - - <_> - - - - <_> - 3 3 1 3 -1. - <_> - 2 4 1 1 3. - 1 - -0.0164043996483088 - -0.5240578055381775 - 0.0366753898561001 - <_> - - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 13 2 4 2 2. - 1 - 0.0211647991091013 - -0.0371078811585903 - 0.1467673927545548 - <_> - - <_> - - - - <_> - 4 1 4 4 -1. - <_> - 5 2 2 4 2. - 1 - -0.0394629389047623 - 0.2676286995410919 - -0.0755941867828369 - <_> - - <_> - - - - <_> - 14 4 1 2 -1. - <_> - 14 4 1 1 2. - 1 - -0.0178470890969038 - 0.2794097065925598 - -0.0156717691570520 - <_> - - <_> - - - - <_> - 4 4 2 1 -1. - <_> - 4 4 1 1 2. - 1 - 3.4505259245634079e-003 - -0.1289491057395935 - 0.1632543951272965 - <_> - - <_> - - - - <_> - 13 3 5 3 -1. - <_> - 12 4 5 1 3. - 1 - 0.0456877201795578 - -0.0206062905490398 - 0.2264503985643387 - <_> - - <_> - - - - <_> - 5 3 3 5 -1. - <_> - 6 4 1 5 3. - 1 - 0.0210024192929268 - -0.0620056092739105 - 0.3201406896114349 - <_> - - <_> - - - - <_> - 14 4 3 5 -1. - <_> - 15 4 1 5 3. - 0 - -3.5569739993661642e-003 - 0.1284316927194595 - -0.0887603089213371 - <_> - - <_> - - - - <_> - 1 4 3 5 -1. - <_> - 2 4 1 5 3. - 0 - -0.0336466915905476 - -0.6888722777366638 - 0.0343056395649910 - <_> - - <_> - - - - <_> - 11 0 3 5 -1. - <_> - 12 0 1 5 3. - 0 - 0.0130832800641656 - 0.0420319996774197 - -0.5268985033035278 - <_> - - <_> - - - - <_> - 4 0 3 5 -1. - <_> - 5 0 1 5 3. - 0 - 0.0166603103280067 - 0.0306016094982624 - -0.5382601022720337 - <_> - - <_> - - - - <_> - 12 0 6 10 -1. - <_> - 14 0 2 10 3. - 0 - -0.0209240708500147 - 0.1459171026945114 - -0.1297913044691086 - <_> - - <_> - - - - <_> - 4 6 8 2 -1. - <_> - 6 6 4 2 2. - 0 - -0.0616948604583740 - 0.4439657032489777 - -0.0383695401251316 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -0.0119723901152611 - -0.5604804158210754 - 0.0232706200331450 - <_> - - <_> - - - - <_> - 5 0 4 4 -1. - <_> - 6 0 2 4 2. - 0 - 0.0179692599922419 - 0.0250263605266809 - -0.5743259191513062 - <_> - - <_> - - - - <_> - 13 7 5 2 -1. - <_> - 13 8 5 1 2. - 0 - 1.5994659624993801e-003 - -0.1241895034909248 - 0.0507428906857967 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 5 11 8 1 2. - 0 - 0.0116954399272799 - -0.0761605277657509 - 0.2052146941423416 - <_> - - <_> - - - - <_> - 8 11 8 1 -1. - <_> - 8 11 4 1 2. - 0 - -1.8982479814440012e-003 - 0.0802794471383095 - -0.0573095604777336 - <_> - - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 6 11 1 1 2. - 0 - -1.4634410035796463e-004 - 0.1370849013328552 - -0.1256242990493774 - <_> - - <_> - - - - <_> - 17 0 1 9 -1. - <_> - 17 3 1 3 3. - 0 - 7.8092161566019058e-003 - 0.0796157866716385 - -0.3489489853382111 - <_> - - <_> - - - - <_> - 9 2 6 2 -1. - <_> - 11 4 2 2 3. - 1 - -0.1044330969452858 - 0.2322252988815308 - -0.0632370188832283 - <_> - - <_> - - - - <_> - 8 2 4 4 -1. - <_> - 8 3 4 2 2. - 0 - -0.0214824005961418 - 0.1726696938276291 - -0.0558063089847565 - <_> - - <_> - - - - <_> - 0 1 6 9 -1. - <_> - 2 1 2 9 3. - 0 - -0.0108288899064064 - 0.1279796957969666 - -0.1163730993866921 - <_> - - <_> - - - - <_> - 13 1 3 10 -1. - <_> - 14 1 1 10 3. - 0 - -0.0424714908003807 - -0.6127359271049500 - 0.0246067494153976 - <_> - - <_> - - - - <_> - 3 6 4 2 -1. - <_> - 4 6 2 2 2. - 0 - -3.9633461274206638e-003 - 0.1839026063680649 - -0.0886545926332474 - <_> - - <_> - - - - <_> - 2 3 16 6 -1. - <_> - 10 3 8 3 2. - <_> - 2 6 8 3 2. - 0 - 0.0351601801812649 - -0.0430688709020615 - 0.0963409096002579 - <_> - - <_> - - - - <_> - 8 2 2 2 -1. - <_> - 8 3 2 1 2. - 0 - 3.4553930163383484e-003 - -0.0629184469580650 - 0.2417149990797043 - <_> - - <_> - - - - <_> - 8 11 6 1 -1. - <_> - 10 11 2 1 3. - 0 - -0.0175848100334406 - -0.6167618036270142 - 0.0174098797142506 - <_> - - <_> - - - - <_> - 1 0 14 12 -1. - <_> - 8 0 7 12 2. - 0 - -0.4428744018077850 - 0.3073793053627014 - -0.0492081902921200 - <_> - - <_> - - - - <_> - 11 11 2 1 -1. - <_> - 11 11 1 1 2. - 0 - 1.1836509656859562e-004 - -0.0535119101405144 - 0.0829684510827065 - <_> - - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 6 11 1 1 2. - 0 - 1.2763170525431633e-004 - -0.1069253981113434 - 0.1596336066722870 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - 1.4990289928391576e-003 - -0.1028444021940231 - 0.0593635700643063 - <_> - - <_> - - - - <_> - 8 4 2 3 -1. - <_> - 7 5 2 1 3. - 1 - -0.0141856800764799 - 0.1678701043128967 - -0.0820643231272697 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - 0.0264235101640224 - 0.0151414396241307 - -0.2154995054006577 - <_> - - <_> - - - - <_> - 0 10 6 2 -1. - <_> - 0 11 6 1 2. - 0 - 1.2152690032962710e-004 - -0.2142913937568665 - 0.0675361901521683 - <_> - - <_> - - - - <_> - 17 0 1 9 -1. - <_> - 17 3 1 3 3. - 0 - -0.0440340004861355 - -0.3851638138294220 - 0.0279856491833925 - <_> - - <_> - - - - <_> - 0 0 1 9 -1. - <_> - 0 3 1 3 3. - 0 - 0.0230793599039316 - 0.0390075594186783 - -0.3570446074008942 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - -0.0169830191880465 - 0.0617679208517075 - -0.0617618113756180 - <_> - - <_> - - - - <_> - 2 1 3 10 -1. - <_> - 3 1 1 10 3. - 0 - -0.0394527800381184 - -0.5435693264007568 - 0.0241404101252556 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - 0.0405681207776070 - -0.0280233100056648 - 0.3506341874599457 - <_> - - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - -0.0517579615116119 - 0.3302401900291443 - -0.0401711687445641 - <_> - - <_> - - - - <_> - 13 6 5 3 -1. - <_> - 13 7 5 1 3. - 0 - 0.0457092002034187 - 7.3070619255304337e-003 - -0.5901234745979309 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 0 2 4 2. - 0 - -0.0153255201876163 - -0.4629181027412415 - 0.0268638096749783 - <_> - - <_> - - - - <_> - 13 6 5 3 -1. - <_> - 13 7 5 1 3. - 0 - -0.0309789907187223 - -0.1948003023862839 - 7.2842082008719444e-003 - <_> - - <_> - - - - <_> - 6 9 4 3 -1. - <_> - 7 9 2 3 2. - 0 - -8.9987199753522873e-003 - -0.3502084910869598 - 0.0341698005795479 - <_> - - <_> - - - - <_> - 3 9 12 3 -1. - <_> - 7 9 4 3 3. - 0 - -0.0237770192325115 - 0.1451911032199860 - -0.0901970788836479 - <_> - - <_> - - - - <_> - 0 0 8 2 -1. - <_> - 4 0 4 2 2. - 0 - 0.0274418704211712 - -0.0597847998142242 - 0.2124803066253662 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0160809792578220 - 0.1277222037315369 - -0.1156089007854462 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -1.8815989606082439e-003 - 0.1826366037130356 - -0.0697237327694893 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 9 5 1 1 9. - 0 - -0.0205701794475317 - 0.1351132988929749 - -0.0566788315773010 - <_> - - <_> - - - - <_> - 0 6 5 3 -1. - <_> - 0 7 5 1 3. - 0 - 0.0212467797100544 - 0.0272479504346848 - -0.4548186957836151 - <_> - - <_> - - - - <_> - 8 2 4 3 -1. - <_> - 8 3 4 1 3. - 0 - -0.0188432596623898 - 0.2036436945199966 - -0.0399243608117104 - <_> - - <_> - - - - <_> - 3 5 8 4 -1. - <_> - 3 6 8 2 2. - 0 - -0.0316970013082027 - 0.1488299071788788 - -0.0753140971064568 - <_> - - <_> - - - - <_> - 16 3 2 6 -1. - <_> - 16 5 2 2 3. - 0 - -0.0393889509141445 - -0.4044514894485474 - 0.0371668599545956 - <_> - - <_> - - - - <_> - 0 3 2 6 -1. - <_> - 0 5 2 2 3. - 0 - 0.0168635398149490 - 0.0379643589258194 - -0.2931546866893768 - <_> - - <_> - - - - <_> - 6 0 8 4 -1. - <_> - 6 1 8 2 2. - 0 - -0.0588746406137943 - 0.2981685996055603 - -0.0304510295391083 - <_> - - <_> - - - - <_> - 4 11 6 1 -1. - <_> - 6 11 2 1 3. - 0 - -0.0108912596479058 - -0.4062632918357849 - 0.0275177191942930 - <_> - - <_> - - - - <_> - 9 11 4 1 -1. - <_> - 10 11 2 1 2. - 0 - -1.0890879639191553e-004 - 0.1042433977127075 - -0.0990792736411095 - <_> - - <_> - - - - <_> - 5 11 4 1 -1. - <_> - 6 11 2 1 2. - 0 - -9.3655682576354593e-005 - 0.1148850992321968 - -0.1030184030532837 - <_> - - <_> - - - - <_> - 4 1 11 4 -1. - <_> - 4 2 11 2 2. - 0 - 0.0383788496255875 - -0.0669137313961983 - 0.1558261960744858 - <_> - - <_> - - - - <_> - 0 0 12 8 -1. - <_> - 0 2 12 4 2. - 0 - -0.1333481967449188 - 0.1747573018074036 - -0.0818243995308876 - <_> - - <_> - - - - <_> - 14 0 2 4 -1. - <_> - 14 0 1 4 2. - 1 - -0.0233332701027393 - -0.3101679980754852 - 0.0284895095974207 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 4 1 2. - 1 - 0.0320153608918190 - 0.0302598997950554 - -0.3935722112655640 - <_> - - <_> - - - - <_> - 8 5 3 1 -1. - <_> - 9 5 1 1 3. - 0 - 4.2134500108659267e-003 - -0.0302903205156326 - 0.1907422989606857 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 0 1 2 1 3. - 0 - 0.0145530002191663 - 0.0211590807884932 - -0.4789972007274628 - <_> - - <_> - - - - <_> - 11 4 2 1 -1. - <_> - 11 4 1 1 2. - 1 - 1.6254920046776533e-004 - -0.0417022891342640 - 0.0668183416128159 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 11 5 4 1 2. - 1 - 0.0512419901788235 - -0.0259015504270792 - 0.3892486095428467 - <_> - - <_> - - - - <_> - 14 9 4 2 -1. - <_> - 14 10 4 1 2. - 0 - -0.0190147198736668 - -0.6824030280113220 - 7.9030347988009453e-003 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 8 11 2 1 2. - 0 - -1.1731980339391157e-004 - 0.1034583002328873 - -0.0927721709012985 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -0.0123993903398514 - -0.4849419891834259 - 0.0224051196128130 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - 1.1162629816681147e-003 - -0.0624047815799713 - 0.1598809957504273 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -2.3414581082761288e-003 - -0.5093036890029907 - 0.0566513910889626 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -1.1256740253884345e-004 - 0.1041925996541977 - -0.0990771502256393 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - 1.4960099942982197e-003 - 0.0582640096545219 - -0.3106968998908997 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - 1.1897009972017258e-004 - -0.0964676067233086 - 0.1170964986085892 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 9 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - -1.1693680426105857e-003 - 0.1521774977445602 - -0.0708187595009804 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 7.4839929584413767e-004 - -0.0693603530526161 - 0.1507522016763687 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -4.1113719344139099e-003 - -0.2890081107616425 - 0.0114481803029776 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -1.4193469542078674e-004 - 0.1192665025591850 - -0.0949712693691254 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.1901040124939755e-004 - 0.0642887875437737 - -0.0477969199419022 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 1.0498589836061001e-004 - -0.0966326668858528 - 0.1153898984193802 - <_> - - <_> - - - - <_> - 8 3 5 2 -1. - <_> - 8 4 5 1 2. - 0 - -8.3408653736114502e-003 - 0.0446046590805054 - -0.0408294089138508 - <_> - - <_> - - - - <_> - 6 3 3 2 -1. - <_> - 6 4 3 1 2. - 0 - 8.9393332600593567e-003 - -0.0402716994285584 - 0.3078837990760803 - <_> - - <_> - - - - <_> - 14 9 1 2 -1. - <_> - 14 10 1 1 2. - 0 - -1.0168400331167504e-004 - 0.0834398791193962 - -0.0296694301068783 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 10 1 1 2. - 0 - 1.0159109660889953e-004 - -0.1679400056600571 - 0.0614469610154629 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 11 3 2 2 2. - 0 - -0.0203809794038534 - -0.4637332856655121 - 0.0108193103224039 - <_> - - <_> - - - - <_> - 5 7 3 1 -1. - <_> - 6 7 1 1 3. - 0 - -1.4813670422881842e-003 - 0.1430608928203583 - -0.0670247301459312 - <_> - - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 11 7 4 2 2. - 0 - 0.0109615698456764 - -0.1020217016339302 - 0.0506100207567215 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 2.2087350953370333e-003 - -0.0570639409124851 - 0.1762620955705643 - <_> - - <_> - - - - <_> - 15 8 3 2 -1. - <_> - 15 9 3 1 2. - 0 - 0.0162783507257700 - 0.0163493994623423 - -0.2635554075241089 - <_> - - <_> - - - - <_> - 0 8 3 2 -1. - <_> - 0 9 3 1 2. - 0 - -4.9292189069092274e-003 - -0.4008415043354034 - 0.0247115101665258 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 11 3 2 2 2. - 0 - -1.1716609587892890e-003 - 0.0846072733402252 - -0.0754897966980934 - <_> - - <_> - - - - <_> - 4 3 4 2 -1. - <_> - 5 3 2 2 2. - 0 - -0.0221331994980574 - -0.7988120913505554 - 0.0130158802494407 - <_> - - <_> - - - - <_> - 4 2 14 8 -1. - <_> - 11 2 7 4 2. - <_> - 4 6 7 4 2. - 0 - 0.0600502304732800 - -0.0305999293923378 - 0.0651800408959389 - <_> - - <_> - - - - <_> - 1 3 4 4 -1. - <_> - 1 3 2 2 2. - <_> - 3 5 2 2 2. - 0 - -8.2345595583319664e-003 - 0.1370068937540054 - -0.0728798508644104 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - 0.0183028802275658 - 0.0381704792380333 - -0.3056429922580719 - <_> - - <_> - - - - <_> - 0 10 1 2 -1. - <_> - 0 11 1 1 2. - 0 - -1.6368640353903174e-003 - -0.2922838032245636 - 0.0316950716078281 - <_> - - <_> - - - - <_> - 7 1 6 2 -1. - <_> - 9 1 2 2 3. - 0 - -0.0369524396955967 - -0.5229138731956482 - 6.8037798628211021e-003 - <_> - - <_> - - - - <_> - 5 1 6 2 -1. - <_> - 7 1 2 2 3. - 0 - -0.0251328703016043 - -0.4940544068813324 - 0.0187225099653006 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 8.7387202074751258e-004 - -0.0605909302830696 - 0.1199930980801582 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - 9.7723852377384901e-005 - -0.0996944829821587 - 0.0996118783950806 - <_> - - <_> - - - - <_> - 4 2 14 8 -1. - <_> - 11 2 7 4 2. - <_> - 4 6 7 4 2. - 0 - -0.0365600399672985 - -0.0346987992525101 - 0.0237058997154236 - <_> - - <_> - - - - <_> - 5 4 4 4 -1. - <_> - 5 4 2 4 2. - 1 - -0.1409696042537689 - -0.5103353857994080 - 0.0171346999704838 - <_> - - <_> - - - - <_> - 12 4 6 6 -1. - <_> - 15 4 3 3 2. - <_> - 12 7 3 3 2. - 0 - -0.0184929501265287 - 0.1354658007621765 - -0.0375994816422462 - <_> - - <_> - - - - <_> - 0 11 12 1 -1. - <_> - 6 11 6 1 2. - 0 - 5.4302928037941456e-003 - -0.0745975822210312 - 0.1326764971017838 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 11 8 2 1 2. - 1 - -0.0289790108799934 - -0.5686805844306946 - 0.0147117003798485 - <_> - - <_> - - - - <_> - 0 3 2 3 -1. - <_> - 1 3 1 3 2. - 0 - -4.1912179440259933e-003 - 0.1458799988031387 - -0.0764634609222412 - <_> - - <_> - - - - <_> - 11 4 6 6 -1. - <_> - 14 4 3 3 2. - <_> - 11 7 3 3 2. - 0 - 0.0993952900171280 - 7.5935330241918564e-003 - -0.3043062984943390 - <_> - - <_> - - - - <_> - 1 4 6 6 -1. - <_> - 1 4 3 3 2. - <_> - 4 7 3 3 2. - 0 - 0.0340690799057484 - -0.0668366998434067 - 0.1543917059898377 - -1.5292299985885620 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 3 2 3 3. - 1 - -0.1068997979164124 - 0.3065895140171051 - -0.2463105022907257 - <_> - - <_> - - - - <_> - 14 2 3 4 -1. - <_> - 13 3 3 2 2. - 1 - -0.0300844796001911 - 0.1461059004068375 - -0.0482189394533634 - <_> - - <_> - - - - <_> - 4 2 4 3 -1. - <_> - 5 3 2 3 2. - 1 - -0.0350008308887482 - 0.3175526857376099 - -0.1447803974151611 - <_> - - <_> - - - - <_> - 16 0 2 12 -1. - <_> - 16 6 2 6 2. - 0 - 0.1102595999836922 - 0.0212385002523661 - -0.1601230055093765 - <_> - - <_> - - - - <_> - 0 0 2 12 -1. - <_> - 0 6 2 6 2. - 0 - 0.0124844098463655 - -0.2746626138687134 - 0.1846054941415787 - <_> - - <_> - - - - <_> - 6 0 8 3 -1. - <_> - 6 0 4 3 2. - 0 - 0.0150614902377129 - -0.1314907073974609 - 0.1639087051153183 - <_> - - <_> - - - - <_> - 0 0 18 9 -1. - <_> - 6 0 6 9 3. - 0 - -0.2205734997987747 - 0.1963908970355988 - -0.2306918948888779 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - -0.0325992591679096 - 0.1243973001837730 - -0.0876483768224716 - <_> - - <_> - - - - <_> - 0 8 6 4 -1. - <_> - 0 10 6 2 2. - 0 - 6.1759902164340019e-003 - -0.3832491934299469 - 0.0945175364613533 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - 0.0303403101861477 - -0.0215594992041588 - 0.2399456053972244 - <_> - - <_> - - - - <_> - 8 3 4 3 -1. - <_> - 7 4 4 1 3. - 1 - -0.0263465903699398 - 0.2514367997646332 - -0.1257061064243317 - <_> - - <_> - - - - <_> - 12 3 4 3 -1. - <_> - 11 4 4 1 3. - 1 - 0.0474787391722202 - -0.0230064094066620 - 0.2878957986831665 - <_> - - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 7 4 1 4 3. - 1 - -0.0333478003740311 - 0.2813386023044586 - -0.1014425978064537 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0291741508990526 - 0.1780585944652557 - -0.1181761994957924 - <_> - - <_> - - - - <_> - 5 3 2 4 -1. - <_> - 5 3 1 4 2. - 1 - -0.0283867400139570 - 0.3956272006034851 - -0.0499168895184994 - <_> - - <_> - - - - <_> - 8 0 3 5 -1. - <_> - 9 0 1 5 3. - 0 - 0.0189510192722082 - 0.0253290999680758 - -0.5337107777595520 - <_> - - <_> - - - - <_> - 7 0 3 5 -1. - <_> - 8 0 1 5 3. - 0 - 0.0147616900503635 - 0.0347115099430084 - -0.5034946799278259 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 12 5 1 3 3. - 1 - -0.0275413095951080 - 0.2549135982990265 - -0.0777612030506134 - <_> - - <_> - - - - <_> - 6 9 4 3 -1. - <_> - 7 9 2 3 2. - 0 - 0.0112868901342154 - 0.0277946405112743 - -0.6348956823348999 - <_> - - <_> - - - - <_> - 6 0 12 12 -1. - <_> - 6 0 6 12 2. - 0 - -0.7104052901268005 - -0.4678632020950317 - 3.7275071372278035e-004 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 7 0 7 12 2. - 0 - 0.1640232950448990 - -0.0674500316381454 - 0.2560296952724457 - <_> - - <_> - - - - <_> - 5 9 8 1 -1. - <_> - 5 9 4 1 2. - 0 - 8.4193330258131027e-003 - -0.0902327001094818 - 0.2060980945825577 - <_> - - <_> - - - - <_> - 5 1 7 6 -1. - <_> - 5 3 7 2 3. - 0 - -0.1468850970268250 - 0.3600434958934784 - -0.0495125502347946 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 1 4 2 2. - 0 - -0.0195542108267546 - 0.3065305948257446 - -0.0634515434503555 - <_> - - <_> - - - - <_> - 0 2 6 4 -1. - <_> - 0 2 3 2 2. - <_> - 3 4 3 2 2. - 0 - -0.0104449195787311 - 0.1329057067632675 - -0.1282705962657929 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 0.0110623296350241 - 0.0406869798898697 - -0.6298875808715820 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -0.0150402104482055 - -0.5846170186996460 - 0.0231177695095539 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - -1.0194590140599757e-004 - 0.1199664026498795 - -0.0791245475411415 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 9.0414949227124453e-005 - -0.1360127031803131 - 0.1183627992868424 - <_> - - <_> - - - - <_> - 14 7 2 4 -1. - <_> - 14 8 2 2 2. - 0 - 0.0164963100105524 - 0.0154076498001814 - -0.3374196887016296 - <_> - - <_> - - - - <_> - 2 7 2 4 -1. - <_> - 2 8 2 2 2. - 0 - 1.1918049858650193e-004 - -0.1349862962961197 - 0.1221467033028603 - <_> - - <_> - - - - <_> - 11 4 3 4 -1. - <_> - 12 5 1 4 3. - 1 - 0.0446369610726833 - -0.0357825383543968 - 0.3591647148132324 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 8.9213429018855095e-003 - -0.1704276055097580 - 0.0977377369999886 - <_> - - <_> - - - - <_> - 11 4 3 4 -1. - <_> - 12 5 1 4 3. - 1 - -0.0209771692752838 - 0.0996034890413284 - -0.0449266210198402 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 6 5 4 1 3. - 1 - -0.0373202301561832 - 0.3244209885597229 - -0.0458211116492748 - <_> - - <_> - - - - <_> - 9 10 6 2 -1. - <_> - 11 10 2 2 3. - 0 - -1.9962401129305363e-003 - 0.0877332836389542 - -0.0639531314373016 - <_> - - <_> - - - - <_> - 3 10 6 2 -1. - <_> - 5 10 2 2 3. - 0 - 0.0180807691067457 - 0.0333061888813972 - -0.4879122972488403 - <_> - - <_> - - - - <_> - 6 3 8 8 -1. - <_> - 10 3 4 4 2. - <_> - 6 7 4 4 2. - 0 - 0.1877630949020386 - -1.0865679942071438e-003 - -0.4659563899040222 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 2 1 3 1 2. - 1 - 0.0231924392282963 - 0.0326414704322815 - -0.4328950941562653 - <_> - - <_> - - - - <_> - 7 7 5 3 -1. - <_> - 7 8 5 1 3. - 0 - 0.0103381900116801 - -0.0875770226120949 - 0.1507108956575394 - <_> - - <_> - - - - <_> - 0 3 3 3 -1. - <_> - 0 4 3 1 3. - 0 - 0.0191331207752228 - 0.0258956793695688 - -0.5301573276519775 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 11 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - -8.1426696851849556e-005 - 0.0809258222579956 - -0.0962679833173752 - <_> - - <_> - - - - <_> - 3 0 9 3 -1. - <_> - 3 1 9 1 3. - 0 - 0.0185608491301537 - -0.0709683224558830 - 0.1696263998746872 - <_> - - <_> - - - - <_> - 17 8 1 4 -1. - <_> - 17 10 1 2 2. - 0 - -5.5964579805731773e-003 - -0.4166347086429596 - 0.0303780604153872 - <_> - - <_> - - - - <_> - 5 1 7 2 -1. - <_> - 5 2 7 1 2. - 0 - 0.0177739597856998 - -0.0542575381696224 - 0.2256149053573608 - <_> - - <_> - - - - <_> - 7 1 8 4 -1. - <_> - 7 2 8 2 2. - 0 - -0.0598320104181767 - 0.2294614017009735 - -0.0155030498281121 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 0 5 2 1 3. - 0 - 0.0116685498505831 - 0.0255278591066599 - -0.4887343049049377 - <_> - - <_> - - - - <_> - 5 2 12 8 -1. - <_> - 11 2 6 4 2. - <_> - 5 6 6 4 2. - 0 - 0.0176241490989923 - -0.0328362099826336 - 0.0415283106267452 - <_> - - <_> - - - - <_> - 4 3 8 8 -1. - <_> - 4 3 4 4 2. - <_> - 8 7 4 4 2. - 0 - -0.0528338812291622 - -0.2849169075489044 - 0.0465317890048027 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -2.0954129286110401e-003 - -0.4879463911056519 - 0.0535930208861828 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -1.0130889859283343e-004 - 0.1124050989747047 - -0.1033485010266304 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - 1.9346430199220777e-003 - 0.0497517809271812 - -0.3711118102073669 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - 1.1420589726185426e-004 - -0.1248224973678589 - 0.1646624952554703 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -8.1585953012108803e-005 - 0.0961032584309578 - -0.0768077895045280 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 8 5 1 1 9. - 0 - -0.0255181398242712 - 0.2078004032373428 - -0.0602239407598972 - <_> - - <_> - - - - <_> - 12 0 3 12 -1. - <_> - 13 0 1 12 3. - 0 - -0.0506166294217110 - -0.6663321852684021 - 0.0129908695816994 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -1.1321919737383723e-004 - 0.1162087991833687 - -0.1048611029982567 - <_> - - <_> - - - - <_> - 12 0 3 10 -1. - <_> - 13 0 1 10 3. - 0 - -4.8787519335746765e-003 - 0.1585139930248261 - -0.0967515110969543 - <_> - - <_> - - - - <_> - 6 2 1 2 -1. - <_> - 6 2 1 1 2. - 1 - 0.0120077803730965 - 0.0329582095146179 - -0.3602350950241089 - <_> - - <_> - - - - <_> - 16 5 1 6 -1. - <_> - 16 5 1 3 2. - 1 - -3.9686369709670544e-003 - 0.0588958300650120 - -0.2057598978281021 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 12 2. - 0 - 0.1198747009038925 - -0.0942827910184860 - 0.1271630972623825 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 7 10 4 2 3. - 0 - -0.0151014300063252 - 0.1544785946607590 - -0.0988143980503082 - <_> - - <_> - - - - <_> - 9 2 7 3 -1. - <_> - 8 3 7 1 3. - 1 - -0.0352536588907242 - 0.1902227997779846 - -0.0634641796350479 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - -8.2858894020318985e-003 - 0.1928718984127045 - -0.0247865393757820 - <_> - - <_> - - - - <_> - 5 6 4 1 -1. - <_> - 6 6 2 1 2. - 0 - -2.7197180315852165e-003 - 0.1731874942779541 - -0.0706930309534073 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -1.1073380301240832e-004 - 0.0766692310571671 - -0.0775807872414589 - <_> - - <_> - - - - <_> - 4 11 6 1 -1. - <_> - 6 11 2 1 3. - 0 - -0.0129251601174474 - -0.5093346834182739 - 0.0232668407261372 - <_> - - <_> - - - - <_> - 16 4 2 7 -1. - <_> - 16 4 1 7 2. - 0 - -0.0100037604570389 - 0.2072820961475372 - -0.1172078028321266 - <_> - - <_> - - - - <_> - 3 0 4 4 -1. - <_> - 4 0 2 4 2. - 0 - -0.0164574701339006 - -0.4544798135757446 - 0.0230529494583607 - <_> - - <_> - - - - <_> - 11 0 2 6 -1. - <_> - 11 0 1 6 2. - 0 - -0.0151726696640253 - -0.2038412988185883 - 0.0208796393126249 - <_> - - <_> - - - - <_> - 4 1 4 4 -1. - <_> - 6 1 2 4 2. - 0 - -0.0411502793431282 - -0.4852608144283295 - 0.0233750008046627 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 8.7554886704310775e-005 - -0.0831706374883652 - 0.1149104014039040 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -1.4003519900143147e-003 - 0.1705211997032166 - -0.0798976123332977 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - -0.0143200298771262 - -0.2797814011573792 - 0.0276442207396030 - <_> - - <_> - - - - <_> - 0 5 1 6 -1. - <_> - 0 7 1 2 3. - 0 - 0.0105369901284575 - 0.0327263213694096 - -0.3097409009933472 - <_> - - <_> - - - - <_> - 16 4 2 7 -1. - <_> - 16 4 1 7 2. - 0 - 0.0103228399530053 - -0.0220373701304197 - 0.1570003926753998 - <_> - - <_> - - - - <_> - 0 4 2 7 -1. - <_> - 1 4 1 7 2. - 0 - -2.9464110266417265e-003 - 0.0955066308379173 - -0.1115986034274101 - <_> - - <_> - - - - <_> - 13 3 2 2 -1. - <_> - 13 3 1 2 2. - 1 - -0.0465437509119511 - 0.5239524245262146 - -0.0102667100727558 - <_> - - <_> - - - - <_> - 5 3 2 2 -1. - <_> - 5 3 2 1 2. - 1 - 0.0275878105312586 - 0.0177575293928385 - -0.6075562238693237 - <_> - - <_> - - - - <_> - 3 1 15 3 -1. - <_> - 8 2 5 1 9. - 0 - 0.1277920007705689 - -0.0295501891523600 - 0.1919368952512741 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 1 2 1 2. - 0 - -2.7071989607065916e-003 - 0.1328884959220886 - -0.0751214623451233 - <_> - - <_> - - - - <_> - 11 5 3 2 -1. - <_> - 12 6 1 2 3. - 1 - 0.0405175089836121 - -0.0182852093130350 - 0.2339898943901062 - <_> - - <_> - - - - <_> - 2 1 10 3 -1. - <_> - 7 1 5 3 2. - 0 - -0.0232265498489141 - 0.1103753969073296 - -0.0959457531571388 - <_> - - <_> - - - - <_> - 2 1 16 3 -1. - <_> - 6 1 8 3 2. - 0 - 0.0741460099816322 - -0.0240149293094873 - 0.2143170982599258 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - -6.0976808890700340e-003 - 0.2042918056249619 - -0.0521130003035069 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 12 6 1 1 9. - 0 - -0.0152460895478725 - 0.1843024939298630 - -0.0574743896722794 - <_> - - <_> - - - - <_> - 0 6 8 2 -1. - <_> - 0 7 8 1 2. - 0 - 2.0064720883965492e-003 - -0.1590142995119095 - 0.0667500719428062 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 16 8 1 1 2. - <_> - 15 9 1 1 2. - 0 - 1.3912119902670383e-003 - -0.0667261183261871 - 0.1602869033813477 - <_> - - <_> - - - - <_> - 1 8 2 2 -1. - <_> - 1 8 1 1 2. - <_> - 2 9 1 1 2. - 0 - 9.6176161605399102e-005 - -0.1078343987464905 - 0.0979657769203186 - <_> - - <_> - - - - <_> - 15 5 2 6 -1. - <_> - 15 5 1 6 2. - 0 - 8.7600788101553917e-003 - -0.0265470594167709 - 0.1601714938879013 - <_> - - <_> - - - - <_> - 1 5 2 6 -1. - <_> - 2 5 1 6 2. - 0 - -0.0253300108015537 - -0.4531281888484955 - 0.0231767501682043 - <_> - - <_> - - - - <_> - 15 10 1 2 -1. - <_> - 15 11 1 1 2. - 0 - 9.3010559794493020e-005 - -0.0744140818715096 - 0.0397057682275772 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 1.2664360110647976e-004 - -0.0888621434569359 - 0.1093820035457611 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 10 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 1.0378329898230731e-004 - -0.0796221718192101 - 0.0741624236106873 - <_> - - <_> - - - - <_> - 2 10 1 2 -1. - <_> - 2 11 1 1 2. - 0 - -1.1490810429677367e-003 - -0.2873553931713104 - 0.0329633392393589 - <_> - - <_> - - - - <_> - 11 6 3 2 -1. - <_> - 12 6 1 2 3. - 0 - -3.7716159131377935e-003 - 0.1633304059505463 - -0.0559756606817245 - <_> - - <_> - - - - <_> - 4 6 8 6 -1. - <_> - 4 6 4 3 2. - <_> - 8 9 4 3 2. - 0 - -0.0669165104627609 - -0.3290657103061676 - 0.0309113096445799 - <_> - - <_> - - - - <_> - 11 5 3 2 -1. - <_> - 12 6 1 2 3. - 1 - -0.0461534485220909 - 0.3159846961498261 - -0.0100060403347015 - <_> - - <_> - - - - <_> - 7 5 2 3 -1. - <_> - 6 6 2 1 3. - 1 - -0.0141141302883625 - 0.1911844015121460 - -0.0543416589498520 - <_> - - <_> - - - - <_> - 15 9 1 3 -1. - <_> - 15 10 1 1 3. - 0 - -6.7449989728629589e-003 - -0.4302727878093720 - 0.0176168493926525 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 6 0 2 2 2. - 0 - -0.0124704595655203 - -0.6029021143913269 - 0.0142932496964931 - <_> - - <_> - - - - <_> - 7 0 4 5 -1. - <_> - 8 0 2 5 2. - 0 - -0.0184201803058386 - -0.3858920037746429 - 0.0201335903257132 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - -9.0734250843524933e-003 - -0.4316655993461609 - 0.0188817996531725 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -1.0161520185647532e-004 - 0.0678573772311211 - -0.0575374104082584 - <_> - - <_> - - - - <_> - 6 3 2 2 -1. - <_> - 6 3 1 1 2. - <_> - 7 4 1 1 2. - 0 - -1.2353780039120466e-004 - 0.0973757430911064 - -0.0923620313405991 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 11 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - 9.8377313406672329e-005 - -0.0582359507679939 - 0.0953808873891830 - <_> - - <_> - - - - <_> - 1 2 12 8 -1. - <_> - 1 2 6 4 2. - <_> - 7 6 6 4 2. - 0 - -0.1063909009099007 - -0.2830651104450226 - 0.0329236090183258 - <_> - - <_> - - - - <_> - 1 9 16 3 -1. - <_> - 5 9 8 3 2. - 0 - -0.0636164471507072 - 0.1644766926765442 - -0.0605731010437012 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 5 10 8 2 2. - 0 - 0.0172454807907343 - -0.0639791786670685 - 0.1543094068765640 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 8 11 2 1 2. - 0 - -6.7837438546121120e-003 - -0.6765002012252808 - 0.0136859202757478 - <_> - - <_> - - - - <_> - 0 1 11 4 -1. - <_> - 0 2 11 2 2. - 0 - 0.0199937000870705 - -0.0819841325283051 - 0.1095750033855438 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 2 4 2 2. - 0 - -0.0105753503739834 - 0.1018545031547546 - -0.0355126485228539 - <_> - - <_> - - - - <_> - 8 5 2 1 -1. - <_> - 9 5 1 1 2. - 0 - -1.1901520338142291e-004 - 0.1020810008049011 - -0.0960037186741829 - <_> - - <_> - - - - <_> - 8 4 3 4 -1. - <_> - 9 4 1 4 3. - 0 - 6.7127197980880737e-003 - -0.0256693102419376 - 0.1206037998199463 - <_> - - <_> - - - - <_> - 6 1 6 11 -1. - <_> - 8 1 2 11 3. - 0 - -0.0197343900799751 - 0.0929254367947578 - -0.1092232018709183 - <_> - - <_> - - - - <_> - 16 2 2 8 -1. - <_> - 16 6 2 4 2. - 0 - 5.9160222299396992e-003 - -0.0560943894088268 - 0.0402121692895889 - <_> - - <_> - - - - <_> - 0 1 1 6 -1. - <_> - 0 3 1 2 3. - 0 - 0.0168865993618965 - 0.0257204491645098 - -0.3189992010593414 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 11 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - -8.1426696851849556e-005 - 0.0483190491795540 - -0.0566031485795975 - <_> - - <_> - - - - <_> - 6 3 2 2 -1. - <_> - 6 3 1 1 2. - <_> - 7 4 1 1 2. - 0 - 9.8076612630393356e-005 - -0.0800489932298660 - 0.1101766973733902 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 2.1393799688667059e-003 - 0.0270481202751398 - -0.1764943003654480 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.1872709728777409e-003 - 0.1565327942371368 - -0.0536770410835743 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 8 8 2 2 2. - 0 - 9.3500297516584396e-003 - 0.0220350790768862 - -0.3852975070476532 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0129074901342392 - 0.0858555287122726 - -0.0943521410226822 - <_> - - <_> - - - - <_> - 10 0 8 2 -1. - <_> - 10 0 4 2 2. - 0 - -8.6925812065601349e-003 - 0.0823238119482994 - -0.1126175001263619 - <_> - - <_> - - - - <_> - 0 0 16 2 -1. - <_> - 4 0 8 2 2. - 0 - 0.0262253396213055 - -0.0795982033014297 - 0.2143841981887817 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 11 0 7 6 2. - <_> - 4 6 7 6 2. - 0 - 0.0553246587514877 - -0.0343707986176014 - 0.0618176497519016 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 9 0 2 8 2. - 1 - -0.1364589035511017 - -0.3960858881473541 - 0.0226425901055336 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 7 3 4 2 9. - 0 - 0.4376384913921356 - -0.0212570205330849 - 0.4214116036891937 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 0 0 7 6 2. - <_> - 7 6 7 6 2. - 0 - 0.4012426137924194 - 0.0134781198576093 - -0.6443703174591065 - <_> - - <_> - - - - <_> - 10 5 8 4 -1. - <_> - 14 5 4 2 2. - <_> - 10 7 4 2 2. - 0 - 0.0519283488392830 - 0.0162441805005074 - -0.1429118961095810 - <_> - - <_> - - - - <_> - 0 5 8 4 -1. - <_> - 0 5 4 2 2. - <_> - 4 7 4 2 2. - 0 - 0.0221555996686220 - -0.0787389725446701 - 0.1186705008149147 - <_> - - <_> - - - - <_> - 13 1 4 3 -1. - <_> - 12 2 4 1 3. - 1 - -0.0179059095680714 - 0.1040515974164009 - -0.0427935793995857 - <_> - - <_> - - - - <_> - 5 1 3 4 -1. - <_> - 6 2 1 4 3. - 1 - -0.0261578708887100 - 0.1952134966850281 - -0.0470647886395454 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - 0.0793037265539169 - -5.7728658430278301e-003 - 0.5296401977539063 - <_> - - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - 9.9063310772180557e-003 - -0.0549699105322361 - 0.1701035946607590 - <_> - - <_> - - - - <_> - 14 4 1 2 -1. - <_> - 14 5 1 1 2. - 0 - -1.4349560660775751e-004 - 0.0751546993851662 - -0.0685249194502831 - <_> - - <_> - - - - <_> - 3 4 1 2 -1. - <_> - 3 5 1 1 2. - 0 - -1.0576599743217230e-004 - 0.0893216878175735 - -0.1127184033393860 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 2 1 2 3. - 1 - 0.0126823596656322 - 0.0564630404114723 - -0.4328708946704865 - <_> - - <_> - - - - <_> - 3 11 4 1 -1. - <_> - 4 11 2 1 2. - 0 - -5.5023408494889736e-003 - -0.4438258111476898 - 0.0152419302612543 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 2.9810098931193352e-003 - 0.0180840007960796 - -0.1333236992359161 - <_> - - <_> - - - - <_> - 0 2 14 9 -1. - <_> - 7 2 7 9 2. - 0 - 0.3413197100162506 - -0.0210426002740860 - 0.3842144012451172 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 11 3 1 2 2. - 1 - -0.0240691993385553 - 0.1072318032383919 - -8.4255319088697433e-003 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 2 1 2. - 1 - 0.0285752192139626 - 0.0188344195485115 - -0.4403854012489319 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 1.1502469715196639e-004 - -0.0552201382815838 - 0.0518893711268902 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -6.2718510162085295e-004 - 0.1216868013143539 - -0.0691522806882858 - <_> - - <_> - - - - <_> - 12 0 6 2 -1. - <_> - 12 0 3 2 2. - 0 - -4.9285031855106354e-003 - 0.1189381033182144 - -0.1892953068017960 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 9.6798430604394525e-005 - -0.0841797292232513 - 0.0933803096413612 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - -8.0068537499755621e-005 - 0.0955572128295898 - -0.0642184391617775 - <_> - - <_> - - - - <_> - 3 5 2 1 -1. - <_> - 4 5 1 1 2. - 0 - -9.6070143627002835e-005 - 0.0730910971760750 - -0.1072010025382042 - <_> - - <_> - - - - <_> - 15 2 1 2 -1. - <_> - 15 3 1 1 2. - 0 - -9.3654278316535056e-005 - 0.0649831965565681 - -0.0829758867621422 - <_> - - <_> - - - - <_> - 3 0 2 11 -1. - <_> - 4 0 1 11 2. - 0 - -0.0296139493584633 - -0.3441329002380371 - 0.0216039493680000 - <_> - - <_> - - - - <_> - 13 4 3 4 -1. - <_> - 14 5 1 4 3. - 1 - 0.0197383593767881 - -0.0749104693531990 - 0.1620353013277054 - <_> - - <_> - - - - <_> - 4 6 10 6 -1. - <_> - 4 9 10 3 2. - 0 - -0.0546229109168053 - -0.5384355187416077 - 0.0158262196928263 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 13 1 4 2 2. - 1 - 0.0254069603979588 - -0.0320187695324421 - 0.1385188996791840 - <_> - - <_> - - - - <_> - 0 10 8 2 -1. - <_> - 4 10 4 2 2. - 0 - -0.0153735298663378 - 0.1362162977457047 - -0.0682220980525017 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 13 1 4 2 2. - 1 - 0.0906877592206001 - -4.4694212265312672e-003 - 0.3596541881561279 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 1 2 4 2. - 1 - -0.0251267608255148 - 0.1724008023738861 - -0.0511551387608051 - <_> - - <_> - - - - <_> - 14 10 4 2 -1. - <_> - 16 10 2 1 2. - <_> - 14 11 2 1 2. - 0 - 3.0066540930420160e-003 - -0.0384728088974953 - 0.1070256009697914 - <_> - - <_> - - - - <_> - 0 10 4 2 -1. - <_> - 0 10 2 1 2. - <_> - 2 11 2 1 2. - 0 - 8.4653347730636597e-003 - 0.0234789792448282 - -0.3750950992107391 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 9.7920412372332066e-005 - -0.0509083010256290 - 0.0467324182391167 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -8.7232358055189252e-005 - 0.0991919934749603 - -0.0837992727756500 - <_> - - <_> - - - - <_> - 10 9 8 2 -1. - <_> - 14 9 4 1 2. - <_> - 10 10 4 1 2. - 0 - 4.9487859942018986e-003 - -0.0452641695737839 - 0.0921764075756073 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - -0.0266607701778412 - -0.3804174959659576 - 0.0196713600307703 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 8.6467640358023345e-005 - -0.0794270411133766 - 0.0919691771268845 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -1.8532250542193651e-003 - 0.1768230050802231 - -0.0471489690244198 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - -0.0149155296385288 - -0.3369263112545013 - 0.0239033792167902 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 9 11 9 1 2. - 0 - -0.1022280976176262 - -0.5582759976387024 - 0.0124260298907757 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 5.2015138790011406e-003 - 0.0328004211187363 - -0.1463125050067902 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 9.3680468853563070e-004 - -0.0604381300508976 - 0.1309542059898377 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - -7.4108080007135868e-003 - -0.3467412889003754 - 0.0260078795254231 - -1.5202269554138184 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 1 4 6 -1. - <_> - 0 1 2 3 2. - <_> - 2 4 2 3 2. - 0 - -0.0186657793819904 - 0.2980225086212158 - -0.2016436010599136 - <_> - - <_> - - - - <_> - 7 4 11 8 -1. - <_> - 7 8 11 4 2. - 0 - 0.1787620931863785 - -0.2884173095226288 - 0.0854408368468285 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0243681706488132 - 0.2956128120422363 - -0.1750854998826981 - <_> - - <_> - - - - <_> - 12 5 6 6 -1. - <_> - 12 8 6 3 2. - 0 - 0.1517567932605743 - 0.0551814101636410 - -0.0805568397045136 - <_> - - <_> - - - - <_> - 0 5 6 6 -1. - <_> - 0 8 6 3 2. - 0 - 0.0435656383633614 - -0.3050786852836609 - 0.0904600992798805 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -2.8217849321663380e-003 - 0.1347997933626175 - -0.0458209700882435 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 9 4 3 8 2. - 0 - 0.2915348112583160 - -0.0250420793890953 - -528.6234741210937500 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 5.6751398369669914e-003 - -0.2020815014839172 - 0.1364797055721283 - <_> - - <_> - - - - <_> - 5 3 8 4 -1. - <_> - 5 4 8 2 2. - 0 - -0.0543610006570816 - 0.2182675004005432 - -0.1102183014154434 - <_> - - <_> - - - - <_> - 15 2 3 4 -1. - <_> - 14 3 3 2 2. - 1 - -0.0185149293392897 - 0.0997008830308914 - -0.0876608863472939 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 5 4 1 2 2. - 1 - 0.0108261397108436 - -0.0902396291494370 - 0.2302881032228470 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - -0.0549153909087181 - 0.1484854072332382 - -0.1524683982133865 - <_> - - <_> - - - - <_> - 4 1 6 6 -1. - <_> - 4 3 6 2 3. - 0 - -0.1001823991537094 - 0.3187054097652435 - -0.0595698282122612 - <_> - - <_> - - - - <_> - 9 4 1 4 -1. - <_> - 8 5 1 2 2. - 1 - -0.0124497003853321 - 0.1912271976470947 - -0.0864640176296234 - <_> - - <_> - - - - <_> - 4 0 6 4 -1. - <_> - 6 0 2 4 3. - 0 - -0.0248186197131872 - -0.4252462983131409 - 0.0488429702818394 - <_> - - <_> - - - - <_> - 11 0 3 7 -1. - <_> - 12 1 1 7 3. - 1 - -0.1036828979849815 - -0.3789359927177429 - -2.5603040121495724e-003 - <_> - - <_> - - - - <_> - 7 0 7 3 -1. - <_> - 6 1 7 1 3. - 1 - -0.0277563408017159 - 0.2015216052532196 - -0.0938467606902123 - <_> - - <_> - - - - <_> - 15 9 1 2 -1. - <_> - 15 10 1 1 2. - 0 - 1.2664039968512952e-004 - -0.1043327003717423 - 0.0586948506534100 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 10 1 1 2. - 0 - 1.0114379983860999e-004 - -0.2199925035238266 - 0.0745101571083069 - <_> - - <_> - - - - <_> - 17 3 1 6 -1. - <_> - 17 5 1 2 3. - 0 - -0.0223847609013319 - -0.5483086109161377 - 0.0329390503466129 - <_> - - <_> - - - - <_> - 0 3 1 6 -1. - <_> - 0 5 1 2 3. - 0 - 0.0129075096920133 - 0.0325817689299583 - -0.4388734996318817 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - -0.0280636101961136 - 0.2891145050525665 - -0.0639025270938873 - <_> - - <_> - - - - <_> - 3 0 9 2 -1. - <_> - 3 1 9 1 2. - 0 - 0.0158168207854033 - -0.0771971568465233 - 0.2395129948854446 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 9 0 1 3 3. - 0 - 0.0119507098570466 - 0.0158301703631878 - -0.5384339094161987 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -8.8720219209790230e-003 - -0.4236744046211243 - 0.0330005213618279 - <_> - - <_> - - - - <_> - 10 6 6 2 -1. - <_> - 12 6 2 2 3. - 0 - 0.0369729287922382 - -0.0708592012524605 - 0.3515239953994751 - <_> - - <_> - - - - <_> - 2 6 6 2 -1. - <_> - 4 6 2 2 3. - 0 - 0.0396069586277008 - -0.0469609685242176 - 0.3659656047821045 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 4 0 7 12 2. - 0 - -0.6629592776298523 - -0.3015295863151550 - 9.6956668421626091e-003 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 2.4906129110604525e-003 - 0.0442264191806316 - -0.3290875852108002 - <_> - - <_> - - - - <_> - 11 5 6 5 -1. - <_> - 13 5 2 5 3. - 0 - -0.0139718595892191 - 0.1558924019336700 - -0.1160188987851143 - <_> - - <_> - - - - <_> - 0 3 16 9 -1. - <_> - 4 3 8 9 2. - 0 - -0.1137507036328316 - 0.1148568987846375 - -0.1321364939212799 - <_> - - <_> - - - - <_> - 6 0 12 12 -1. - <_> - 6 0 6 12 2. - 0 - 0.2991181015968323 - 6.8873511627316475e-003 - -0.3881449103355408 - <_> - - <_> - - - - <_> - 0 0 12 12 -1. - <_> - 6 0 6 12 2. - 0 - 0.1768777966499329 - -0.0532504208385944 - 0.3071394860744476 - <_> - - <_> - - - - <_> - 5 1 8 10 -1. - <_> - 5 1 4 10 2. - 0 - 0.1100004985928536 - -0.0616912096738815 - 0.2242321968078613 - <_> - - <_> - - - - <_> - 6 3 3 2 -1. - <_> - 6 4 3 1 2. - 0 - 0.0114818904548883 - -0.0368494503200054 - 0.3699466884136200 - <_> - - <_> - - - - <_> - 12 2 2 6 -1. - <_> - 10 4 2 2 3. - 1 - -0.0434822812676430 - 0.0667590573430061 - -0.0820931717753410 - <_> - - <_> - - - - <_> - 1 8 1 3 -1. - <_> - 1 9 1 1 3. - 0 - -3.2705739140510559e-003 - -0.3120352923870087 - 0.0368611104786396 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 5 1 8 1 3. - 0 - -0.0195399299263954 - 0.2087699025869370 - -0.0635671019554138 - <_> - - <_> - - - - <_> - 0 5 12 5 -1. - <_> - 4 5 4 5 3. - 0 - 0.1141956001520157 - 0.0374830998480320 - -0.3369993865489960 - <_> - - <_> - - - - <_> - 9 9 6 3 -1. - <_> - 11 9 2 3 3. - 0 - -0.0547153502702713 - -0.6484239101409912 - 5.5782468989491463e-003 - <_> - - <_> - - - - <_> - 4 9 6 2 -1. - <_> - 6 9 2 2 3. - 0 - -0.0206970795989037 - -0.4087164998054504 - 0.0278010200709105 - <_> - - <_> - - - - <_> - 8 5 4 4 -1. - <_> - 9 5 2 4 2. - 0 - 0.0162917096167803 - -0.0302606392651796 - 0.2335986942052841 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - 0.0156916603446007 - 0.0331888683140278 - -0.3699297010898590 - <_> - - <_> - - - - <_> - 14 2 3 1 -1. - <_> - 15 3 1 1 3. - 1 - -0.0149823604151607 - -0.5046744942665100 - 0.0266051497310400 - <_> - - <_> - - - - <_> - 0 0 4 10 -1. - <_> - 0 5 4 5 2. - 0 - 0.1630643010139465 - 0.0241505093872547 - -0.4544095993041992 - <_> - - <_> - - - - <_> - 14 1 4 2 -1. - <_> - 14 1 4 1 2. - 1 - -0.0296363700181246 - 0.3234812021255493 - -0.0195190403610468 - <_> - - <_> - - - - <_> - 4 1 2 4 -1. - <_> - 4 1 1 4 2. - 1 - -0.0212267898023129 - 0.3500868082046509 - -0.0368941389024258 - <_> - - <_> - - - - <_> - 3 0 12 9 -1. - <_> - 3 3 12 3 3. - 0 - -0.1838302016258240 - 0.1124954968690872 - -0.1238723024725914 - <_> - - <_> - - - - <_> - 6 5 4 3 -1. - <_> - 5 6 4 1 3. - 1 - -0.0197275504469872 - 0.2218450009822846 - -0.0537588596343994 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 6 1 1 3. - 1 - -5.5899647995829582e-003 - 0.0806023031473160 - -0.0747311115264893 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - -0.0209637805819511 - -0.3925526142120361 - 0.0287585500627756 - <_> - - <_> - - - - <_> - 12 1 6 9 -1. - <_> - 14 1 2 9 3. - 0 - -0.0161387305706739 - 0.1198647990822792 - -0.1285510957241058 - <_> - - <_> - - - - <_> - 6 5 3 4 -1. - <_> - 7 5 1 4 3. - 0 - -7.6363878324627876e-003 - 0.1783673018217087 - -0.0641103908419609 - <_> - - <_> - - - - <_> - 9 1 1 8 -1. - <_> - 7 3 1 4 2. - 1 - 0.0285797696560621 - -7.4946638196706772e-003 - 0.1291497051715851 - <_> - - <_> - - - - <_> - 9 1 8 1 -1. - <_> - 11 3 4 1 2. - 1 - -0.0207129605114460 - 0.0947175025939941 - -0.1375170946121216 - <_> - - <_> - - - - <_> - 9 0 1 8 -1. - <_> - 9 0 1 4 2. - 1 - 3.3245470840483904e-003 - 0.0436914190649986 - -0.0435151495039463 - <_> - - <_> - - - - <_> - 0 1 6 9 -1. - <_> - 2 1 2 9 3. - 0 - -0.0156577993184328 - 0.1105260029435158 - -0.0932034626603127 - <_> - - <_> - - - - <_> - 10 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - -8.9033246040344238e-003 - 0.2136887013912201 - -0.0572282113134861 - <_> - - <_> - - - - <_> - 5 4 1 3 -1. - <_> - 4 5 1 1 3. - 1 - -0.0225170608609915 - -0.5450509190559387 - 0.0241874307394028 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 9 5 1 1 9. - 0 - -9.1859940439462662e-003 - 0.0590406507253647 - -0.0663388669490814 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 8 9 2 2 3. - 0 - -0.0193045996129513 - -0.3458541035652161 - 0.0295628197491169 - <_> - - <_> - - - - <_> - 8 5 3 2 -1. - <_> - 9 5 1 2 3. - 0 - 5.9454459697008133e-003 - -0.0318287797272205 - 0.1574669927358627 - <_> - - <_> - - - - <_> - 6 0 4 5 -1. - <_> - 7 0 2 5 2. - 0 - -0.0214861296117306 - -0.5155659914016724 - 0.0193808004260063 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 9 0 2 4 2. - 0 - -0.0148078501224518 - -0.4462536871433258 - 0.0252729803323746 - <_> - - <_> - - - - <_> - 9 0 8 1 -1. - <_> - 9 0 4 1 2. - 1 - 0.0419156812131405 - 0.0408641397953033 - -0.2249899953603745 - <_> - - <_> - - - - <_> - 12 3 6 4 -1. - <_> - 15 3 3 2 2. - <_> - 12 5 3 2 2. - 0 - 0.0185423605144024 - -0.0456282012164593 - 0.1247989982366562 - <_> - - <_> - - - - <_> - 0 3 6 4 -1. - <_> - 0 3 3 2 2. - <_> - 3 5 3 2 2. - 0 - -0.0219785999506712 - 0.1662651002407074 - -0.0681815296411514 - <_> - - <_> - - - - <_> - 13 3 4 3 -1. - <_> - 12 4 4 1 3. - 1 - -0.0223059095442295 - 0.1217634975910187 - -0.0469965189695358 - <_> - - <_> - - - - <_> - 5 3 3 4 -1. - <_> - 6 4 1 4 3. - 1 - 0.0277811102569103 - -0.0369721204042435 - 0.2852365970611572 - <_> - - <_> - - - - <_> - 3 8 12 4 -1. - <_> - 7 8 4 4 3. - 0 - -0.0179947596043348 - 0.1044797971844673 - -0.0990006625652313 - <_> - - <_> - - - - <_> - 6 1 1 3 -1. - <_> - 5 2 1 1 3. - 1 - 0.0147548001259565 - 0.0218691397458315 - -0.4304389059543610 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 14 5 3 2 2. - 1 - -7.7450848184525967e-003 - 0.0329999700188637 - -0.0984743162989616 - <_> - - <_> - - - - <_> - 5 2 3 3 -1. - <_> - 6 3 1 3 3. - 1 - -0.0274515394121408 - 0.1959954947233200 - -0.0503785088658333 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - -3.0835710931569338e-003 - -0.3375248014926910 - 0.0339105091989040 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - -7.1450988762080669e-003 - -0.6780729889869690 - 0.0119285099208355 - <_> - - <_> - - - - <_> - 16 11 2 1 -1. - <_> - 16 11 1 1 2. - 0 - -1.1973819928243756e-003 - 0.1277793049812317 - -0.0555209293961525 - <_> - - <_> - - - - <_> - 0 11 2 1 -1. - <_> - 1 11 1 1 2. - 0 - 1.2104130291845649e-004 - -0.0973940566182137 - 0.0999899134039879 - <_> - - <_> - - - - <_> - 16 11 2 1 -1. - <_> - 16 11 1 1 2. - 0 - 1.1540119885466993e-004 - -0.0381012484431267 - 0.0531424805521965 - <_> - - <_> - - - - <_> - 0 11 2 1 -1. - <_> - 1 11 1 1 2. - 0 - -1.0320250294171274e-004 - 0.1188025027513504 - -0.0828879326581955 - <_> - - <_> - - - - <_> - 9 10 6 2 -1. - <_> - 11 10 2 2 3. - 0 - 0.0302170701324940 - 0.0130771202966571 - -0.4251112937927246 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 5 10 8 2 2. - 0 - 0.0144805302843452 - -0.0646656006574631 - 0.1365126073360443 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - 7.6259230263531208e-003 - 0.0212066601961851 - -0.4806919991970062 - <_> - - <_> - - - - <_> - 2 2 3 3 -1. - <_> - 3 2 1 3 3. - 0 - 0.0127067798748612 - 0.0204321704804897 - -0.3803671002388001 - <_> - - <_> - - - - <_> - 8 4 3 5 -1. - <_> - 9 4 1 5 3. - 0 - -0.0708498582243919 - -0.6700794100761414 - 5.8502932079136372e-003 - <_> - - <_> - - - - <_> - 0 1 18 10 -1. - <_> - 0 1 9 5 2. - <_> - 9 6 9 5 2. - 0 - -0.3660708963871002 - -0.6565138101577759 - 0.0119380904361606 - <_> - - <_> - - - - <_> - 14 7 4 1 -1. - <_> - 15 8 2 1 2. - 1 - 6.7676370963454247e-003 - -0.0547376014292240 - 0.1334920972585678 - <_> - - <_> - - - - <_> - 2 4 12 4 -1. - <_> - 5 4 6 4 2. - 0 - -5.8495830744504929e-003 - 0.0550069399178028 - -0.1708720028400421 - <_> - - <_> - - - - <_> - 7 1 4 3 -1. - <_> - 7 2 4 1 3. - 0 - -0.0131925102323294 - 0.2025216966867447 - -0.0467488504946232 - <_> - - <_> - - - - <_> - 1 6 6 3 -1. - <_> - 3 6 2 3 3. - 0 - -0.0262439791113138 - 0.1713120043277741 - -0.0517422892153263 - <_> - - <_> - - - - <_> - 13 3 4 9 -1. - <_> - 13 3 2 9 2. - 0 - -0.1983630061149597 - 0.6834859848022461 - -5.4989140480756760e-003 - <_> - - <_> - - - - <_> - 1 3 4 9 -1. - <_> - 3 3 2 9 2. - 0 - -0.0912645831704140 - -0.3812245130538940 - 0.0246560908854008 - <_> - - <_> - - - - <_> - 7 11 10 1 -1. - <_> - 7 11 5 1 2. - 0 - 0.0510455593466759 - 4.7809281386435032e-003 - -0.5138844847679138 - <_> - - <_> - - - - <_> - 0 9 14 3 -1. - <_> - 7 9 7 3 2. - 0 - -0.0626778528094292 - 0.1605121046304703 - -0.0692914128303528 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 5 1 12 2 2. - 0 - 0.0219987593591213 - -0.0635576993227005 - 0.1025841981172562 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 9 2 2 3 2. - 1 - -0.0985590964555740 - 0.4166687130928040 - -0.0229825507849455 - <_> - - <_> - - - - <_> - 10 5 3 1 -1. - <_> - 11 6 1 1 3. - 1 - -7.8866537660360336e-003 - 0.1413310021162033 - -0.0627465471625328 - <_> - - <_> - - - - <_> - 5 11 4 1 -1. - <_> - 6 11 2 1 2. - 0 - 5.7192011736333370e-003 - 0.0149394702166319 - -0.5679485797882080 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 15 1 3 1 2. - 0 - -1.2656320177484304e-004 - 0.1540904939174652 - -0.2722637057304382 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -0.0153636597096920 - -0.5575292110443115 - 0.0166299808770418 - <_> - - <_> - - - - <_> - 10 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - 0.0117473099380732 - -0.0286691505461931 - 0.0849198475480080 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 5 5 2 3 2. - 0 - -6.6546360030770302e-003 - 0.1505744010210037 - -0.0587357692420483 - <_> - - <_> - - - - <_> - 11 11 4 1 -1. - <_> - 12 11 2 1 2. - 0 - -8.2943234592676163e-003 - -0.4902375936508179 - 0.0119769498705864 - <_> - - <_> - - - - <_> - 0 4 12 6 -1. - <_> - 4 4 4 6 3. - 0 - -0.1995773017406464 - -0.3204885125160217 - 0.0244485493749380 - <_> - - <_> - - - - <_> - 9 2 4 4 -1. - <_> - 9 2 2 4 2. - 1 - 0.0916234701871872 - -0.0115658603608608 - 0.1212178021669388 - <_> - - <_> - - - - <_> - 0 5 1 4 -1. - <_> - 0 6 1 2 2. - 0 - 6.1579290777444839e-003 - 0.0234328806400299 - -0.3470208048820496 - <_> - - <_> - - - - <_> - 2 0 14 2 -1. - <_> - 9 0 7 1 2. - <_> - 2 1 7 1 2. - 0 - -6.6728810779750347e-003 - 0.1337269991636276 - -0.0604593902826309 - <_> - - <_> - - - - <_> - 6 2 1 2 -1. - <_> - 6 2 1 1 2. - 1 - 1.1792629811679944e-004 - -0.1125829964876175 - 0.0691333189606667 - <_> - - <_> - - - - <_> - 7 8 5 4 -1. - <_> - 7 9 5 2 2. - 0 - -0.0119264498353004 - 0.1305103003978729 - -0.0385039001703262 - <_> - - <_> - - - - <_> - 3 11 4 1 -1. - <_> - 4 11 2 1 2. - 0 - 6.1339139938354492e-003 - 0.0173263307660818 - -0.4599058032035828 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - -0.3730992078781128 - -0.3402409851551056 - 0.0206207595765591 - <_> - - <_> - - - - <_> - 0 7 5 3 -1. - <_> - 0 8 5 1 3. - 0 - 0.0326316691935062 - 0.0145410597324371 - -0.5091521739959717 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 8 11 4 1 2. - 0 - -3.3705669920891523e-003 - 0.1625149995088577 - -0.0274331904947758 - <_> - - <_> - - - - <_> - 2 9 2 2 -1. - <_> - 2 9 1 1 2. - <_> - 3 10 1 1 2. - 0 - 9.6422692877240479e-005 - -0.0808628499507904 - 0.0870257318019867 - <_> - - <_> - - - - <_> - 6 3 9 6 -1. - <_> - 9 5 3 2 9. - 0 - -0.1367592066526413 - 0.0469436310231686 - -0.0541204884648323 - <_> - - <_> - - - - <_> - 5 4 6 4 -1. - <_> - 7 4 2 4 3. - 0 - -0.0186016298830509 - 0.1153108999133110 - -0.0755600407719612 - <_> - - <_> - - - - <_> - 8 5 8 3 -1. - <_> - 8 5 4 3 2. - 0 - -0.0397062711417675 - -0.0415648892521858 - 0.0342070199549198 - <_> - - <_> - - - - <_> - 2 5 8 3 -1. - <_> - 6 5 4 3 2. - 0 - -0.0977933332324028 - -0.2554945051670075 - 0.0326214581727982 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - -0.1246396973729134 - 0.1353075057268143 - -0.0560001395642757 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 7 6 1 1 3. - 1 - -7.3466179892420769e-003 - 0.1328029036521912 - -0.0599772110581398 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 15 0 2 1 2. - 1 - -9.1007994487881660e-003 - 0.0842158123850822 - -9.5823230221867561e-003 - <_> - - <_> - - - - <_> - 5 3 3 7 -1. - <_> - 6 3 1 7 3. - 0 - -0.0547123290598392 - -0.7497063875198364 - 9.1644506901502609e-003 - <_> - - <_> - - - - <_> - 10 5 4 4 -1. - <_> - 12 5 2 2 2. - <_> - 10 7 2 2 2. - 0 - 7.8011681325733662e-003 - -0.0584721416234970 - 0.0758025124669075 - <_> - - <_> - - - - <_> - 4 5 4 4 -1. - <_> - 4 5 2 2 2. - <_> - 6 7 2 2 2. - 0 - 0.0115047404542565 - -0.0544557087123394 - 0.1310382038354874 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 12 6 3 1 3. - 1 - -3.0265720561146736e-003 - 0.0435957387089729 - -0.0398318208754063 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 6 1 3 3. - 1 - 3.9084558375179768e-003 - -0.0702302232384682 - 0.1185000985860825 - <_> - - <_> - - - - <_> - 10 1 4 4 -1. - <_> - 11 1 2 4 2. - 0 - -0.0171153508126736 - -0.4875336885452271 - 0.0426067188382149 - <_> - - <_> - - - - <_> - 9 1 3 8 -1. - <_> - 9 1 3 4 2. - 1 - 0.0723911821842194 - -0.0307138208299875 - 0.2877641022205353 - <_> - - <_> - - - - <_> - 5 1 8 3 -1. - <_> - 5 1 4 3 2. - 0 - 0.0205427594482899 - -0.0755908265709877 - 0.1041648983955383 - <_> - - <_> - - - - <_> - 4 0 4 5 -1. - <_> - 5 0 2 5 2. - 0 - 0.0123379798606038 - 0.0331671983003616 - -0.2329113930463791 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - -0.0409566015005112 - 0.2457851022481918 - -0.0326002687215805 - <_> - - <_> - - - - <_> - 5 0 6 2 -1. - <_> - 7 0 2 2 3. - 0 - 0.0227553192526102 - 0.0239908695220947 - -0.3313775062561035 - <_> - - <_> - - - - <_> - 10 0 8 1 -1. - <_> - 10 0 4 1 2. - 0 - -2.6924870908260345e-003 - 0.0669525489211082 - -0.1162751019001007 - <_> - - <_> - - - - <_> - 1 0 16 1 -1. - <_> - 5 0 8 1 2. - 0 - 0.0101853199303150 - -0.0643803775310516 - 0.1785684973001480 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - 2.1892699878662825e-003 - 0.0282022804021835 - -0.1946022063493729 - <_> - - <_> - - - - <_> - 0 2 10 8 -1. - <_> - 0 2 5 4 2. - <_> - 5 6 5 4 2. - 0 - 0.1761400997638702 - 0.0162122007459402 - -0.4573405086994171 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -2.4204170331358910e-003 - 0.1735994070768356 - -0.0377625711262226 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -1.4709460083395243e-003 - 0.1408634036779404 - -0.0535050481557846 - <_> - - <_> - - - - <_> - 7 4 6 8 -1. - <_> - 7 8 6 4 2. - 0 - -0.0176293104887009 - -0.4337471127510071 - 0.0179103501141071 - <_> - - <_> - - - - <_> - 0 7 1 4 -1. - <_> - 0 8 1 2 2. - 0 - 5.3175981156527996e-003 - 0.0266184508800507 - -0.2981601059436798 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 9 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 1.8915910040959716e-003 - 0.0359163992106915 - -0.2090456038713455 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.3355260016396642e-003 - 0.0409308485686779 - -0.1843495965003967 - <_> - - <_> - - - - <_> - 9 9 3 2 -1. - <_> - 9 10 3 1 2. - 0 - -6.9594341330230236e-003 - 0.1767732948064804 - -0.0170477591454983 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 9.1313078883104026e-005 - -0.0743692666292191 - 0.0962718501687050 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 9 8 1 2 2. - 1 - -4.2544947937130928e-003 - 0.0446043200790882 - -0.0631061196327209 - <_> - - <_> - - - - <_> - 8 10 2 1 -1. - <_> - 9 10 1 1 2. - 0 - -1.0578350338619202e-004 - 0.0914376825094223 - -0.0829734429717064 - <_> - - <_> - - - - <_> - 8 10 2 1 -1. - <_> - 8 10 1 1 2. - 0 - -1.0263289732392877e-004 - 0.1079393997788429 - -0.0798926129937172 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - -2.4791778996586800e-003 - -0.2586830854415894 - 0.0262862499803305 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 6 11 6 1 3. - 0 - -0.0160746704787016 - 0.1052680015563965 - -0.0656733810901642 - <_> - - <_> - - - - <_> - 3 11 6 1 -1. - <_> - 5 11 2 1 3. - 0 - -0.0143102398142219 - -0.4928967952728272 - 0.0159731097519398 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -8.8974033133126795e-005 - 0.0587449483573437 - -0.0453130416572094 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 1.0300390422344208e-003 - -0.0559087209403515 - 0.1439431011676788 - <_> - - <_> - - - - <_> - 11 9 1 3 -1. - <_> - 11 10 1 1 3. - 0 - 3.9175990968942642e-003 - 0.0292700603604317 - -0.1977055966854096 - <_> - - <_> - - - - <_> - 6 9 1 3 -1. - <_> - 6 10 1 1 3. - 0 - 1.0633670171955600e-004 - -0.1070486009120941 - 0.0962380468845367 - <_> - - <_> - - - - <_> - 12 7 3 2 -1. - <_> - 13 8 1 2 3. - 1 - 0.0421816594898701 - -0.0102994795888662 - 0.5146549940109253 - <_> - - <_> - - - - <_> - 6 7 2 3 -1. - <_> - 5 8 2 1 3. - 1 - -0.0129485102370381 - 0.1917811036109924 - -0.0390722006559372 - <_> - - <_> - - - - <_> - 12 4 4 6 -1. - <_> - 14 4 2 3 2. - <_> - 12 7 2 3 2. - 0 - -0.0116972401738167 - 0.0689069926738739 - -0.0201800093054771 - <_> - - <_> - - - - <_> - 2 4 4 6 -1. - <_> - 2 4 2 3 2. - <_> - 4 7 2 3 2. - 0 - 0.0148155400529504 - -0.0645370036363602 - 0.1153459995985031 - <_> - - <_> - - - - <_> - 11 10 1 2 -1. - <_> - 11 11 1 1 2. - 0 - 1.2253019667696208e-004 - -0.1350754052400589 - 0.0606626793742180 - <_> - - <_> - - - - <_> - 7 5 3 2 -1. - <_> - 8 5 1 2 3. - 0 - -3.1337419059127569e-003 - 0.1123763993382454 - -0.0668947696685791 - <_> - - <_> - - - - <_> - 13 3 4 3 -1. - <_> - 12 4 4 1 3. - 1 - -0.0684925168752670 - 0.3122834861278534 - -0.0100491000339389 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - 0.0281487796455622 - 0.0118344696238637 - -0.5978168845176697 - <_> - - <_> - - - - <_> - 13 2 5 3 -1. - <_> - 12 3 5 1 3. - 1 - 0.0385322310030460 - -0.0222918596118689 - 0.1840278059244156 - <_> - - <_> - - - - <_> - 5 3 3 4 -1. - <_> - 6 4 1 4 3. - 1 - 7.2883451357483864e-003 - -0.0479324683547020 - 0.1401637047529221 - <_> - - <_> - - - - <_> - 10 10 3 1 -1. - <_> - 11 10 1 1 3. - 0 - -6.5842391923069954e-003 - -0.4475187957286835 - 0.0117678297683597 - <_> - - <_> - - - - <_> - 3 4 3 2 -1. - <_> - 3 5 3 1 2. - 0 - -1.1306579835945740e-004 - 0.0654381066560745 - -0.1018785014748573 - <_> - - <_> - - - - <_> - 10 9 3 1 -1. - <_> - 11 9 1 1 3. - 0 - -4.1586891748011112e-003 - -0.2577165067195892 - 0.0203211903572083 - <_> - - <_> - - - - <_> - 5 2 3 2 -1. - <_> - 5 2 3 1 2. - 1 - 0.0305234193801880 - 0.0173887908458710 - -0.3731609880924225 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -8.5078412666916847e-004 - -0.3903968036174774 - 0.0801882669329643 - <_> - - <_> - - - - <_> - 5 10 3 1 -1. - <_> - 6 10 1 1 3. - 0 - -1.0892679711105302e-004 - 0.0835343077778816 - -0.0813964307308197 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 0 8 2 2. - 1 - -0.1989130973815918 - -0.4618039131164551 - 5.7829180732369423e-003 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 3 4 1 2. - 1 - -0.0312434807419777 - 0.2502228915691376 - -0.0300326701253653 - <_> - - <_> - - - - <_> - 8 2 3 3 -1. - <_> - 8 3 3 1 3. - 0 - 0.0234472099691629 - -0.0250616297125816 - 0.1967055052518845 - <_> - - <_> - - - - <_> - 7 2 4 2 -1. - <_> - 8 2 2 2 2. - 0 - 0.0115783698856831 - 0.0172653794288635 - -0.3891330957412720 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - -2.6445279363542795e-003 - 0.0693675428628922 - -0.0406082198023796 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 11 5 4 1 2. - 1 - 0.0357187986373901 - -0.0308767706155777 - 0.2257014065980911 - <_> - - <_> - - - - <_> - 6 2 6 2 -1. - <_> - 8 2 2 2 3. - 0 - -0.0328630693256855 - -0.5208488106727600 - 0.0153109896928072 - <_> - - <_> - - - - <_> - 3 4 10 4 -1. - <_> - 3 4 5 2 2. - <_> - 8 6 5 2 2. - 0 - 0.1200772970914841 - 9.3891620635986328e-003 - -0.5965710282325745 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 15 1 2 1 3. - 1 - -6.8977959454059601e-003 - 0.0718266069889069 - -0.0386913307011127 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - -1.1164099851157516e-004 - 0.0905596464872360 - -0.0741757526993752 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 0 1 1 3. - 0 - -8.6451061069965363e-003 - -0.4649192988872528 - 0.0115801496431232 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 0 1 1 3. - 0 - 1.1185959738213569e-004 - -0.0782822594046593 - 0.0875569581985474 - <_> - - <_> - - - - <_> - 16 4 2 6 -1. - <_> - 16 4 1 6 2. - 0 - -3.3530138898640871e-003 - 0.0635970830917358 - -0.0837680101394653 - <_> - - <_> - - - - <_> - 5 10 8 2 -1. - <_> - 7 10 4 2 2. - 0 - -0.0439138188958168 - -0.7485607862472534 - 8.7825870141386986e-003 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 9 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - -3.0952990055084229e-003 - 0.1695501953363419 - -0.0391984507441521 - <_> - - <_> - - - - <_> - 5 6 4 2 -1. - <_> - 5 7 4 1 2. - 0 - 3.2301219180226326e-003 - -0.1223801970481873 - 0.0610579289495945 - <_> - - <_> - - - - <_> - 11 6 7 3 -1. - <_> - 11 7 7 1 3. - 0 - -0.0459457710385323 - -0.3018592894077301 - 8.8831810280680656e-003 - <_> - - <_> - - - - <_> - 0 6 7 3 -1. - <_> - 0 7 7 1 3. - 0 - 0.0374681018292904 - 0.0152335502207279 - -0.4443348050117493 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - -9.6279982244595885e-004 - 0.1455013006925583 - -0.0553468391299248 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 10 1 1 2. - <_> - 3 11 1 1 2. - 0 - 9.5942807092797011e-005 - -0.0801405012607574 - 0.0842006430029869 - <_> - - <_> - - - - <_> - 14 11 3 1 -1. - <_> - 15 11 1 1 3. - 0 - 1.2208779808133841e-003 - -0.0608549490571022 - 0.1399298012256622 - <_> - - <_> - - - - <_> - 1 11 3 1 -1. - <_> - 2 11 1 1 3. - 0 - 1.0304830357199535e-004 - -0.0913908109068871 - 0.0906987562775612 - <_> - - <_> - - - - <_> - 16 10 1 2 -1. - <_> - 16 11 1 1 2. - 0 - 6.7147910594940186e-003 - 0.0170614607632160 - -0.4784564971923828 - <_> - - <_> - - - - <_> - 1 10 1 2 -1. - <_> - 1 11 1 1 2. - 0 - 1.1389680003048852e-004 - -0.1205118000507355 - 0.0615237914025784 - -1.4360860586166382 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 3 3 -1. - <_> - 6 4 1 3 3. - 1 - -0.0248592402786016 - 0.3221296072006226 - -0.1763000041246414 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 8 4 2 4 3. - 0 - -0.0257150903344154 - 0.2164403051137924 - -0.2033023983240128 - <_> - - <_> - - - - <_> - 2 3 4 4 -1. - <_> - 2 3 2 2 2. - <_> - 4 5 2 2 2. - 0 - 0.1058494970202446 - 1.0783869947772473e-004 - 552.5595092773437500 - <_> - - <_> - - - - <_> - 15 6 2 2 -1. - <_> - 15 6 1 2 2. - 1 - -8.6654294282197952e-003 - 0.0894027128815651 - -0.0852057263255119 - <_> - - <_> - - - - <_> - 3 6 2 2 -1. - <_> - 3 6 2 1 2. - 1 - -0.0113147599622607 - 0.1730434000492096 - -0.1812659949064255 - <_> - - <_> - - - - <_> - 4 3 12 4 -1. - <_> - 4 4 12 2 2. - 0 - -0.0518665499985218 - 0.2489081025123596 - -0.0862086564302444 - <_> - - <_> - - - - <_> - 2 5 4 2 -1. - <_> - 2 5 2 1 2. - <_> - 4 6 2 1 2. - 0 - -4.5156660489737988e-003 - 0.2840644121170044 - -0.1190735995769501 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 11 5 1 2 3. - 1 - -0.0150034101679921 - 0.1888998001813889 - -0.0870354995131493 - <_> - - <_> - - - - <_> - 5 5 4 3 -1. - <_> - 6 5 2 3 2. - 0 - -0.0101075097918510 - 0.2610797882080078 - -0.0966798812150955 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0345476903021336 - 0.1901452988386154 - -0.0962559729814529 - <_> - - <_> - - - - <_> - 3 2 10 4 -1. - <_> - 3 3 10 2 2. - 0 - -0.0448755994439125 - 0.2490932047367096 - -0.0896699726581573 - <_> - - <_> - - - - <_> - 12 6 6 6 -1. - <_> - 12 9 6 3 2. - 0 - 0.0210816301405430 - -0.2106571048498154 - 0.0566333793103695 - <_> - - <_> - - - - <_> - 4 6 3 2 -1. - <_> - 5 6 1 2 3. - 0 - -4.0543689392507076e-003 - 0.2017161995172501 - -0.0784827619791031 - <_> - - <_> - - - - <_> - 16 8 1 2 -1. - <_> - 16 9 1 1 2. - 0 - -2.4460731074213982e-003 - -0.2765552103519440 - 0.0278910603374243 - <_> - - <_> - - - - <_> - 1 8 1 2 -1. - <_> - 1 9 1 1 2. - 0 - 1.0416610166430473e-004 - -0.2172649055719376 - 0.0687249973416328 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 5 1 2 3. - 1 - -7.0905950851738453e-003 - 0.0391716100275517 - -0.0722375586628914 - <_> - - <_> - - - - <_> - 3 9 2 1 -1. - <_> - 3 9 1 1 2. - 1 - 4.2705261148512363e-003 - 0.0344300605356693 - -0.4514735043048859 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 0 2 4 3. - 0 - 0.0212590694427490 - 0.0431625694036484 - -0.4945267140865326 - <_> - - <_> - - - - <_> - 9 3 6 3 -1. - <_> - 8 4 6 1 3. - 1 - -0.0299579892307520 - 0.1630406975746155 - -0.0900246426463127 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 0 2 4 3. - 0 - -0.0476755499839783 - -0.5690860152244568 - 0.0310404300689697 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - -0.0213589593768120 - -0.3672943115234375 - 0.0297099091112614 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - -0.0171300806105137 - 0.1996425986289978 - -0.0617015808820724 - <_> - - <_> - - - - <_> - 1 0 10 4 -1. - <_> - 1 1 10 2 2. - 0 - 0.0269737001508474 - -0.0919989123940468 - 0.1496866047382355 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - 0.0153952101245523 - 0.0589980594813824 - -0.4031142890453339 - <_> - - <_> - - - - <_> - 0 3 2 4 -1. - <_> - 0 4 2 2 2. - 0 - -0.0136130396276712 - -0.3953252136707306 - 0.0261617600917816 - <_> - - <_> - - - - <_> - 14 4 2 6 -1. - <_> - 14 4 2 3 2. - 1 - -0.1020691022276878 - -0.1673035025596619 - 0.0269232895225286 - <_> - - <_> - - - - <_> - 5 3 3 6 -1. - <_> - 6 5 1 2 9. - 0 - -0.0458029210567474 - 0.1123092994093895 - -0.0992796570062637 - <_> - - <_> - - - - <_> - 7 0 6 6 -1. - <_> - 7 2 6 2 3. - 0 - -0.0519687794148922 - 0.1943228989839554 - -0.0509295314550400 - <_> - - <_> - - - - <_> - 0 4 16 7 -1. - <_> - 8 4 8 7 2. - 0 - -0.4248760938644409 - 0.3588601052761078 - -0.0349765606224537 - <_> - - <_> - - - - <_> - 6 4 8 6 -1. - <_> - 10 4 4 3 2. - <_> - 6 7 4 3 2. - 0 - 0.0795173794031143 - 0.0209766197949648 - -0.1981060057878494 - <_> - - <_> - - - - <_> - 3 2 4 3 -1. - <_> - 4 3 2 3 2. - 1 - -0.0453098304569721 - 0.2517420947551727 - -0.0471646413207054 - <_> - - <_> - - - - <_> - 10 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - 0.0406000018119812 - 5.9903971850872040e-003 - -0.5052418708801270 - <_> - - <_> - - - - <_> - 4 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - -0.0282763000577688 - -0.4425860941410065 - 0.0249368306249380 - <_> - - <_> - - - - <_> - 15 4 2 6 -1. - <_> - 15 4 2 3 2. - 1 - 0.0938419625163078 - 1.7748980317264795e-003 - -0.4398832023143768 - <_> - - <_> - - - - <_> - 3 4 6 2 -1. - <_> - 3 4 3 2 2. - 1 - -0.1179158985614777 - -0.3441756069660187 - 0.0337243601679802 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 4 0 7 12 2. - 0 - -0.1513931006193161 - 0.0604117698967457 - -0.0532012209296227 - <_> - - <_> - - - - <_> - 0 0 12 12 -1. - <_> - 4 0 4 12 3. - 0 - -0.2256264984607697 - -0.3211907148361206 - 0.0354291014373302 - <_> - - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 15 3 3 1 3. - 0 - 0.0129303503781557 - 0.0336119495332241 - -0.3941226899623871 - <_> - - <_> - - - - <_> - 3 7 3 1 -1. - <_> - 4 7 1 1 3. - 0 - -2.4919810239225626e-003 - 0.1706133037805557 - -0.0628986880183220 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 14 3 4 1 3. - 0 - -0.0245599597692490 - -0.4133710861206055 - 0.0176101606339216 - <_> - - <_> - - - - <_> - 0 0 15 6 -1. - <_> - 5 2 5 2 9. - 0 - 0.4132049977779388 - -0.0391267985105515 - 0.2658706009387970 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 1 2 3 3. - 0 - -0.0305228494107723 - -0.3815810084342957 - 0.0362733714282513 - <_> - - <_> - - - - <_> - 0 2 14 8 -1. - <_> - 0 2 7 4 2. - <_> - 7 6 7 4 2. - 0 - -0.0988608896732330 - -0.2691383063793182 - 0.0392703898251057 - <_> - - <_> - - - - <_> - 11 10 1 2 -1. - <_> - 11 11 1 1 2. - 0 - 1.1311320122331381e-004 - -0.1455477029085159 - 0.0564275011420250 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - 7.7236247307155281e-005 - -0.1034035980701447 - 0.0881672427058220 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 13 10 3 1 3. - 0 - 0.0199304390698671 - 8.3390101790428162e-003 - -0.4172666966915131 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - -0.0339709594845772 - 0.2317533940076828 - -0.0406417287886143 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 10 9 2 2 3. - 0 - -0.0286305397748947 - -0.5550916790962219 - 0.0162575300782919 - <_> - - <_> - - - - <_> - 0 3 1 4 -1. - <_> - 0 4 1 2 2. - 0 - 4.9788239412009716e-003 - 0.0314742811024189 - -0.2887747883796692 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 10 6 1 1 2. - <_> - 9 7 1 1 2. - 0 - -5.6940698996186256e-003 - 0.2303262054920197 - -0.0201713293790817 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - 1.9577480852603912e-003 - -0.0561040714383125 - 0.1639074981212616 - <_> - - <_> - - - - <_> - 7 0 5 2 -1. - <_> - 7 1 5 1 2. - 0 - -0.0107364300638437 - 0.1388199031352997 - -0.0595018118619919 - <_> - - <_> - - - - <_> - 3 0 3 12 -1. - <_> - 4 0 1 12 3. - 0 - -0.0394460782408714 - -0.5339589118957520 - 0.0185448899865150 - <_> - - <_> - - - - <_> - 7 9 6 3 -1. - <_> - 9 9 2 3 3. - 0 - -0.0255900900810957 - -0.3047420978546143 - 0.0205566901713610 - <_> - - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - -0.0297076292335987 - -0.4385631978511810 - 0.0202575102448463 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - 1.1870719754369929e-004 - -0.0556060783565044 - 0.0558185391128063 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 3 0 5 1 2. - <_> - 8 1 5 1 2. - 0 - 6.0403849929571152e-003 - -0.0625619515776634 - 0.1403312981128693 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - -2.3701060563325882e-003 - 0.1041181012988091 - -0.0466375797986984 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - -0.0568027310073376 - 0.1427363008260727 - -0.0641383230686188 - <_> - - <_> - - - - <_> - 2 11 16 1 -1. - <_> - 6 11 8 1 2. - 0 - 0.0121782803907990 - -0.0576202385127544 - 0.1578823029994965 - <_> - - <_> - - - - <_> - 4 10 4 1 -1. - <_> - 5 10 2 1 2. - 0 - -4.0311398915946484e-003 - -0.3279178142547607 - 0.0291632302105427 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - 5.4544620215892792e-003 - -0.0347655601799488 - 0.2265056073665619 - <_> - - <_> - - - - <_> - 2 2 10 10 -1. - <_> - 7 2 5 10 2. - 0 - -0.1250523030757904 - 0.1168323010206223 - -0.0734387263655663 - <_> - - <_> - - - - <_> - 7 2 8 5 -1. - <_> - 7 2 4 5 2. - 0 - -0.1615020036697388 - 0.1432867050170898 - -7.7370628714561462e-003 - <_> - - <_> - - - - <_> - 3 2 8 5 -1. - <_> - 7 2 4 5 2. - 0 - -0.1536951065063477 - -0.4040772914886475 - 0.0252533908933401 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - 0.0138324601575732 - -9.6680596470832825e-003 - 0.2244905978441238 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - -0.0197528004646301 - -0.2725034952163696 - 0.0313505791127682 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -0.0107629904523492 - -0.3841069042682648 - 0.0130315795540810 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 0.0212287604808807 - 0.0260584298521280 - -0.3080273866653442 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - -9.2247471911832690e-005 - 0.0456283912062645 - -0.0560008101165295 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -1.9652589689940214e-003 - 0.1338568031787872 - -0.0641321912407875 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - 0.0282155107706785 - 0.0153889097273350 - -0.2187536954879761 - <_> - - <_> - - - - <_> - 6 10 1 2 -1. - <_> - 6 11 1 1 2. - 0 - 1.2585399963427335e-004 - -0.1395611017942429 - 0.0592704601585865 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 8 11 4 1 2. - 0 - -6.9362311623990536e-003 - 0.2181659936904907 - -0.0202228892594576 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -1.7958630342036486e-003 - 0.1587557941675186 - -0.0463826395571232 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 9 8 2 1 3. - 0 - 9.5576168969273567e-003 - -0.0390912294387817 - 0.1341481059789658 - <_> - - <_> - - - - <_> - 0 6 9 3 -1. - <_> - 0 7 9 1 3. - 0 - -0.0623961500823498 - -0.4675211906433106 - 0.0186740607023239 - <_> - - <_> - - - - <_> - 11 0 3 5 -1. - <_> - 12 0 1 5 3. - 0 - -1.0964560351567343e-004 - 0.0380669198930264 - -0.0531279891729355 - <_> - - <_> - - - - <_> - 4 0 3 5 -1. - <_> - 5 0 1 5 3. - 0 - -0.0193444695323706 - -0.4780494868755341 - 0.0165918003767729 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 0 11 9 1 2. - 0 - 0.0783272683620453 - 0.0181266497820616 - -0.3980031013488770 - <_> - - <_> - - - - <_> - 0 1 14 11 -1. - <_> - 7 1 7 11 2. - 0 - -0.3698745965957642 - 0.1570519059896469 - -0.0502885915338993 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 0 0 9 1 2. - 0 - -0.0466183982789516 - 0.1856203973293304 - -0.0475008487701416 - <_> - - <_> - - - - <_> - 3 1 9 6 -1. - <_> - 3 3 9 2 3. - 0 - -0.2217787057161331 - 0.3690327107906342 - -0.0218913592398167 - <_> - - <_> - - - - <_> - 11 4 2 1 -1. - <_> - 11 4 1 1 2. - 1 - 0.0101999398320913 - -0.0200084596872330 - 0.1892008036375046 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -1.3876829762011766e-003 - 0.1398168057203293 - -0.0550622008740902 - <_> - - <_> - - - - <_> - 17 9 1 2 -1. - <_> - 17 10 1 1 2. - 0 - 1.0204740101471543e-004 - -0.1553916931152344 - 0.0912320986390114 - <_> - - <_> - - - - <_> - 1 8 2 2 -1. - <_> - 1 8 1 1 2. - <_> - 2 9 1 1 2. - 0 - 9.5603638328611851e-005 - -0.0968784764409065 - 0.0802481397986412 - <_> - - <_> - - - - <_> - 9 4 2 3 -1. - <_> - 9 5 2 1 3. - 0 - -5.3494791500270367e-003 - 0.0732097104191780 - -0.0550112612545490 - <_> - - <_> - - - - <_> - 2 9 3 3 -1. - <_> - 2 10 3 1 3. - 0 - 0.0130077200010419 - 0.0241031497716904 - -0.3123658001422882 - <_> - - <_> - - - - <_> - 5 8 8 3 -1. - <_> - 5 9 8 1 3. - 0 - 0.0290700495243073 - -0.0376428104937077 - 0.2087133973836899 - <_> - - <_> - - - - <_> - 0 9 6 2 -1. - <_> - 0 10 6 1 2. - 0 - 2.1258399647194892e-004 - -0.1939011961221695 - 0.0425931103527546 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - 0.0127672497183084 - 0.0374682694673538 - -0.3492408990859985 - <_> - - <_> - - - - <_> - 6 3 5 3 -1. - <_> - 6 4 5 1 3. - 0 - -0.0350760109722614 - 0.2350210994482040 - -0.0361617095768452 - <_> - - <_> - - - - <_> - 11 4 2 1 -1. - <_> - 11 4 1 1 2. - 1 - 8.1403086369391531e-005 - -0.0320670008659363 - 0.0504004210233688 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 9 0 5 2 2. - 0 - -0.0174106005579233 - 0.0994603335857391 - -0.0751298069953918 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 16 1 1 1 3. - 1 - -5.4158121347427368e-003 - 0.1544888019561768 - -0.0595656000077724 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - -0.0272476803511381 - -0.3538259863853455 - 0.0242353100329638 - <_> - - <_> - - - - <_> - 14 2 3 2 -1. - <_> - 15 3 1 2 3. - 1 - -0.0221972595900297 - -0.2972058951854706 - 0.0214165691286325 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 2 2 4 3. - 1 - -0.0854537934064865 - 0.0739144384860992 - -0.0981438010931015 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 16 1 1 1 3. - 1 - -0.0267432797700167 - -0.3894031047821045 - 5.3767771460115910e-003 - <_> - - <_> - - - - <_> - 1 0 3 1 -1. - <_> - 2 1 1 1 3. - 1 - -8.2498956471681595e-003 - 0.1986034065485001 - -0.0395573712885380 - <_> - - <_> - - - - <_> - 2 2 16 1 -1. - <_> - 6 2 8 1 2. - 0 - -0.0227975007146597 - 0.0996784120798111 - -0.0626135766506195 - <_> - - <_> - - - - <_> - 7 4 1 2 -1. - <_> - 7 4 1 1 2. - 1 - 9.7113639640156180e-005 - -0.0841882526874542 - 0.0938660800457001 - <_> - - <_> - - - - <_> - 13 4 5 3 -1. - <_> - 12 5 5 1 3. - 1 - 0.0298844296485186 - -0.0233569294214249 - 0.1461814045906067 - <_> - - <_> - - - - <_> - 4 1 4 4 -1. - <_> - 5 2 2 4 2. - 1 - -0.0268038399517536 - 0.1417839974164963 - -0.0625500604510307 - <_> - - <_> - - - - <_> - 15 4 3 2 -1. - <_> - 15 5 3 1 2. - 0 - -0.0194113999605179 - -0.6338275074958801 - 0.0161495897918940 - <_> - - <_> - - - - <_> - 0 2 18 4 -1. - <_> - 0 2 9 2 2. - <_> - 9 4 9 2 2. - 0 - 0.1211021989583969 - 0.0232389997690916 - -0.3470253050327301 - <_> - - <_> - - - - <_> - 10 3 2 1 -1. - <_> - 10 3 1 1 2. - 1 - 9.2202579253353179e-005 - -0.0784215033054352 - 0.0439592488110065 - <_> - - <_> - - - - <_> - 5 3 2 2 -1. - <_> - 5 3 2 1 2. - 1 - 0.0172425899654627 - 0.0262610707432032 - -0.2994464933872223 - <_> - - <_> - - - - <_> - 17 7 1 4 -1. - <_> - 17 9 1 2 2. - 0 - -0.0114207100123167 - -0.3652296960353851 - 7.9645831137895584e-003 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 8 5 1 1 9. - 0 - -0.0208100695163012 - 0.1363833993673325 - -0.0540330484509468 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - -0.0141034796833992 - -0.3789392113685608 - 0.0133940102532506 - <_> - - <_> - - - - <_> - 0 7 1 4 -1. - <_> - 0 9 1 2 2. - 0 - -4.7581768594682217e-003 - -0.3374806046485901 - 0.0207511596381664 - <_> - - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 10 10 4 2 2. - 0 - 0.0167098306119442 - -0.0281252600252628 - 0.0791175812482834 - <_> - - <_> - - - - <_> - 8 3 1 6 -1. - <_> - 8 3 1 3 2. - 1 - -0.0754440724849701 - 0.3508261144161224 - -0.0194447692483664 - <_> - - <_> - - - - <_> - 9 4 8 5 -1. - <_> - 9 4 4 5 2. - 0 - 0.1733821034431458 - -3.3310770522803068e-003 - 0.4480153024196625 - <_> - - <_> - - - - <_> - 1 4 8 5 -1. - <_> - 5 4 4 5 2. - 0 - -0.1423203945159912 - -0.2275786995887756 - 0.0330730602145195 - <_> - - <_> - - - - <_> - 9 5 4 1 -1. - <_> - 10 5 2 1 2. - 0 - -2.2956749889999628e-003 - 0.0636061728000641 - -0.0339367985725403 - <_> - - <_> - - - - <_> - 5 5 4 1 -1. - <_> - 6 5 2 1 2. - 0 - -1.0921280045295134e-004 - 0.0879561677575111 - -0.0945142135024071 - <_> - - <_> - - - - <_> - 13 6 4 6 -1. - <_> - 15 6 2 3 2. - <_> - 13 9 2 3 2. - 0 - -0.0151237202808261 - 0.1107197999954224 - -0.0274874195456505 - <_> - - <_> - - - - <_> - 1 6 4 6 -1. - <_> - 1 6 2 3 2. - <_> - 3 9 2 3 2. - 0 - 0.0218355506658554 - -0.0483124591410160 - 0.1472904980182648 - <_> - - <_> - - - - <_> - 5 6 10 4 -1. - <_> - 10 6 5 2 2. - <_> - 5 8 5 2 2. - 0 - 0.0837960764765739 - 0.0168791599571705 - -0.2214743047952652 - <_> - - <_> - - - - <_> - 2 3 3 7 -1. - <_> - 3 3 1 7 3. - 0 - -0.0383711792528629 - -0.5215274095535278 - 0.0143043296411633 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 9 8 2 1 3. - 0 - 1.7588760238140821e-003 - -0.0432747118175030 - 0.0401504114270210 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - -0.0164226293563843 - -0.5844146013259888 - 0.0105171399191022 - <_> - - <_> - - - - <_> - 16 1 2 9 -1. - <_> - 13 4 2 3 3. - 1 - 0.1224516034126282 - -9.6191419288516045e-003 - 0.1829015016555786 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - -0.0275712199509144 - -0.5160552263259888 - 0.0126475701108575 - <_> - - <_> - - - - <_> - 6 3 9 6 -1. - <_> - 6 6 9 3 2. - 0 - -0.2223629057407379 - 0.3475607931613922 - -0.0100844902917743 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 2 2. - 1 - -0.0220033302903175 - -0.2813464105129242 - 0.0227720607072115 - <_> - - <_> - - - - <_> - 4 6 10 6 -1. - <_> - 4 9 10 3 2. - 0 - -0.0429128892719746 - -0.4784662127494812 - 0.0125529700890183 - <_> - - <_> - - - - <_> - 5 6 2 4 -1. - <_> - 4 7 2 2 2. - 1 - -0.0143522303551435 - 0.1664205044507980 - -0.0464727096259594 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -4.1513590258546174e-004 - -0.2572231888771057 - 0.0778907462954521 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 8 1 1 2. - 1 - 1.2504369951784611e-003 - -0.0447785295546055 - 0.1667868047952652 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - 0.0176474805921316 - 7.0636598393321037e-003 - -0.3373652994632721 - <_> - - <_> - - - - <_> - 0 3 2 9 -1. - <_> - 1 3 1 9 2. - 0 - -3.4471070393919945e-003 - 0.0751723274588585 - -0.0881242603063583 - <_> - - <_> - - - - <_> - 15 4 3 2 -1. - <_> - 16 5 1 2 3. - 1 - -5.0494200550019741e-003 - 0.1057507023215294 - -0.0872371271252632 - <_> - - <_> - - - - <_> - 3 4 2 3 -1. - <_> - 2 5 2 1 3. - 1 - -0.0349593013525009 - -0.4684984982013702 - 0.0152084501460195 - <_> - - <_> - - - - <_> - 6 1 12 4 -1. - <_> - 6 2 12 2 2. - 0 - 0.0131617197766900 - -0.0586476512253284 - 0.0702482163906097 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - -0.0305601190775633 - 0.2317059040069580 - -0.0432553105056286 - <_> - - <_> - - - - <_> - 12 1 2 1 -1. - <_> - 12 1 1 1 2. - 1 - 0.0102389100939035 - 0.0315257795155048 - -0.2387672066688538 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 2 1 2. - 1 - 0.0249655991792679 - 0.0187940504401922 - -0.3663749098777771 - <_> - - <_> - - - - <_> - 8 1 10 1 -1. - <_> - 8 1 5 1 2. - 0 - -0.0322535000741482 - 0.1127064973115921 - -0.0292131006717682 - <_> - - <_> - - - - <_> - 0 1 10 1 -1. - <_> - 5 1 5 1 2. - 0 - 7.8411642462015152e-003 - -0.0724216327071190 - 0.1406634002923966 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -1.4276880538091063e-003 - 0.1580734997987747 - -0.0664499625563622 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - 1.1470150202512741e-003 - 0.0495738312602043 - -0.1430808007717133 - <_> - - <_> - - - - <_> - 16 1 2 4 -1. - <_> - 15 2 2 2 2. - 1 - -8.6412113159894943e-003 - 0.0729138031601906 - -0.0539435297250748 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - 1.1576799442991614e-003 - -0.0549531504511833 - 0.1243522018194199 - <_> - - <_> - - - - <_> - 9 10 2 1 -1. - <_> - 9 10 1 1 2. - 0 - 1.1792180157499388e-004 - -0.0482707992196083 - 0.0590828806161880 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - 6.5883439965546131e-003 - 0.0262306500226259 - -0.2602672874927521 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - 2.1313619799911976e-003 - -0.0568075403571129 - 0.2505536079406738 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 5 0 2 1 3. - 0 - 0.0110359499230981 - 0.0289262104779482 - -0.2402517050504684 - <_> - - <_> - - - - <_> - 16 1 2 4 -1. - <_> - 15 2 2 2 2. - 1 - 0.0983377024531364 - -1.6552689485251904e-003 - 0.9984146952629089 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 3 2 2 2 2. - 1 - -0.0368679203093052 - 0.3011547923088074 - -0.0193358901888132 - <_> - - <_> - - - - <_> - 15 4 1 2 -1. - <_> - 15 4 1 1 2. - 1 - -0.0224313102662563 - 0.3668003976345062 - -8.6105773225426674e-003 - <_> - - <_> - - - - <_> - 3 4 2 1 -1. - <_> - 3 4 1 1 2. - 1 - 9.2809292254969478e-005 - -0.1185168027877808 - 0.0700090304017067 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - 6.0986801981925964e-003 - 0.0198251102119684 - -0.5105975866317749 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -1.0700259736040607e-004 - 0.0869450569152832 - -0.0790398493409157 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - -0.0118503598496318 - -0.3488636016845703 - 0.0284637305885553 - <_> - - <_> - - - - <_> - 6 11 3 1 -1. - <_> - 7 11 1 1 3. - 0 - -1.0024739895015955e-003 - 0.1231055036187172 - -0.0563023500144482 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - -9.6648662292864174e-005 - 0.0594199188053608 - -0.0505116507411003 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 6 9 6 1 3. - 0 - -0.0126873599365354 - 0.1612392067909241 - -0.0419987291097641 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - 0.0209341403096914 - 0.0132924700155854 - -0.2538459002971649 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -8.7683666497468948e-003 - -0.2235475927591324 - 0.0272311903536320 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - -7.8724078775849193e-005 - 0.0516533590853214 - -0.0349236987531185 - <_> - - <_> - - - - <_> - 8 7 1 3 -1. - <_> - 8 8 1 1 3. - 0 - -4.5617809519171715e-003 - 0.1884590983390808 - -0.0362181998789310 - <_> - - <_> - - - - <_> - 8 4 2 6 -1. - <_> - 8 7 2 3 2. - 0 - 0.0201015695929527 - -0.1227046027779579 - 0.0588310696184635 - <_> - - <_> - - - - <_> - 8 6 1 3 -1. - <_> - 8 7 1 1 3. - 0 - -3.1801089644432068e-003 - 0.1296007037162781 - -0.0679206773638725 - <_> - - <_> - - - - <_> - 14 8 1 3 -1. - <_> - 14 9 1 1 3. - 0 - 5.7645021006464958e-003 - 0.0183514803647995 - -0.2490340024232864 - <_> - - <_> - - - - <_> - 3 8 1 3 -1. - <_> - 3 9 1 1 3. - 0 - 0.0106930797919631 - 9.6924025565385818e-003 - -0.5950452089309692 - <_> - - <_> - - - - <_> - 13 2 4 3 -1. - <_> - 14 3 2 3 2. - 1 - 2.8986420948058367e-003 - 0.0517189912497997 - -0.1046859994530678 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 9 4 3 8 2. - 0 - 0.1392966061830521 - -0.0176745392382145 - 0.3972356021404266 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 1.1850619921460748e-004 - -0.0445570796728134 - 0.0569949001073837 - <_> - - <_> - - - - <_> - 2 1 9 2 -1. - <_> - 5 4 3 2 3. - 1 - -0.1898158043622971 - -0.2177318930625916 - 0.0291348900645971 - <_> - - <_> - - - - <_> - 10 5 8 3 -1. - <_> - 10 6 8 1 3. - 0 - -0.0553892813622952 - -0.2526654005050659 - 0.0107985101640224 - <_> - - <_> - - - - <_> - 3 5 1 2 -1. - <_> - 3 6 1 1 2. - 0 - -1.0122820094693452e-004 - 0.0827616900205612 - -0.0744562670588493 - <_> - - <_> - - - - <_> - 11 1 4 2 -1. - <_> - 11 2 4 1 2. - 0 - 5.2048019133508205e-003 - -0.0261818505823612 - 0.0788949802517891 - <_> - - <_> - - - - <_> - 4 1 4 2 -1. - <_> - 4 2 4 1 2. - 0 - -5.3310650400817394e-003 - 0.1074334979057312 - -0.0730788037180901 - <_> - - <_> - - - - <_> - 12 3 3 1 -1. - <_> - 13 4 1 1 3. - 1 - 0.0319863595068455 - -4.6606259420514107e-003 - 0.3684920072555542 - <_> - - <_> - - - - <_> - 6 3 1 3 -1. - <_> - 5 4 1 1 3. - 1 - 6.1502759344875813e-003 - 0.0351634211838245 - -0.1980329006910324 - <_> - - <_> - - - - <_> - 13 4 5 3 -1. - <_> - 12 5 5 1 3. - 1 - -7.9923700541257858e-003 - 0.0496804490685463 - -0.0438471511006355 - <_> - - <_> - - - - <_> - 5 4 3 5 -1. - <_> - 6 5 1 5 3. - 1 - 7.9515464603900909e-003 - -0.0503920204937458 - 0.1366129070520401 - <_> - - <_> - - - - <_> - 13 1 4 3 -1. - <_> - 12 2 4 1 3. - 1 - 0.0699777528643608 - -8.1138126552104950e-003 - 0.3419423103332520 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 9 7 1 2 2. - 0 - 5.3981081582605839e-003 - 0.0349396392703056 - -0.1821928024291992 - <_> - - <_> - - - - <_> - 0 4 18 4 -1. - <_> - 9 4 9 2 2. - <_> - 0 6 9 2 2. - 0 - 0.0793964788317680 - 0.0246036890894175 - -0.2849290072917938 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 2.5731830392032862e-003 - -0.0337860099971294 - 0.1911884993314743 - <_> - - <_> - - - - <_> - 6 0 6 1 -1. - <_> - 8 0 2 1 3. - 0 - 0.0150553397834301 - 0.0153282200917602 - -0.4006636142730713 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 6 1 4 1 3. - 0 - -7.9386271536350250e-003 - 0.1250725984573364 - -0.0473169796168804 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - -1.1256839934503660e-004 - 0.0824937224388123 - -0.0687459930777550 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - -1.0478479816811159e-004 - 0.0849223434925079 - -0.0794655531644821 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 1.0192309855483472e-004 - -0.0510621182620525 - 0.0627532824873924 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - 1.2042010348523036e-004 - -0.0798903778195381 - 0.1079823970794678 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - -0.0305393394082785 - -0.4662235081195831 - 8.6310431361198425e-003 - <_> - - <_> - - - - <_> - 4 10 6 2 -1. - <_> - 6 10 2 2 3. - 0 - -0.0144495498389006 - -0.2342748045921326 - 0.0266673006117344 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 14 3 4 1 3. - 0 - 0.0558374412357807 - 1.5657029580324888e-003 - -0.5954551100730896 - <_> - - <_> - - - - <_> - 3 6 11 3 -1. - <_> - 3 7 11 1 3. - 0 - 0.0118985604494810 - -0.0483787991106510 - 0.1172066032886505 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 9 7 1 3 2. - 1 - 0.0232967808842659 - 3.9587449282407761e-003 - -0.2459778040647507 - <_> - - <_> - - - - <_> - 0 2 18 7 -1. - <_> - 6 2 6 7 3. - 0 - -0.0946263968944550 - 0.0516698993742466 - -0.1265788972377777 - <_> - - <_> - - - - <_> - 12 1 6 4 -1. - <_> - 12 1 3 4 2. - 0 - -0.0119962897151709 - 0.0570973381400108 - -0.1079069003462791 - <_> - - <_> - - - - <_> - 0 1 6 4 -1. - <_> - 3 1 3 4 2. - 0 - 0.0330587811768055 - -0.0440202616155148 - 0.2216335982084274 - <_> - - <_> - - - - <_> - 11 1 2 7 -1. - <_> - 11 1 1 7 2. - 1 - 0.0612877309322357 - 0.0138207497075200 - -0.3803952932357788 - <_> - - <_> - - - - <_> - 2 4 9 4 -1. - <_> - 2 6 9 2 2. - 0 - -0.0808761268854141 - 0.2156231999397278 - -0.0343904495239258 - <_> - - <_> - - - - <_> - 9 3 3 1 -1. - <_> - 10 3 1 1 3. - 0 - -1.1805639951489866e-004 - 0.0383309014141560 - -0.0370746590197086 - <_> - - <_> - - - - <_> - 0 0 6 10 -1. - <_> - 2 0 2 10 3. - 0 - -8.8057601824402809e-003 - 0.0789597034454346 - -0.0796236172318459 - <_> - - <_> - - - - <_> - 10 4 4 6 -1. - <_> - 11 4 2 6 2. - 0 - 0.0237250495702028 - -0.0264001805335283 - 0.1383392065763474 - <_> - - <_> - - - - <_> - 4 4 4 6 -1. - <_> - 5 4 2 6 2. - 0 - -0.0138499997556210 - 0.1863771975040436 - -0.0465360693633556 - <_> - - <_> - - - - <_> - 11 0 4 3 -1. - <_> - 12 0 2 3 2. - 0 - -0.0164783298969269 - -0.4737412035465241 - 0.0202428791671991 - <_> - - <_> - - - - <_> - 2 0 6 4 -1. - <_> - 4 0 2 4 3. - 0 - 0.0493974015116692 - 0.0147041296586394 - -0.4025551974773407 - <_> - - <_> - - - - <_> - 8 3 3 5 -1. - <_> - 9 3 1 5 3. - 0 - -9.9877286702394485e-003 - 0.0661891773343086 - -0.0258490201085806 - <_> - - <_> - - - - <_> - 7 3 3 5 -1. - <_> - 8 3 1 5 3. - 0 - -4.5243981294333935e-003 - 0.0973625928163528 - -0.0685955733060837 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 8 4 2 4 3. - 0 - -0.0254425797611475 - -0.1006214991211891 - 0.0721366927027702 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 5 2 1 2. - 1 - -0.0199797898530960 - 0.1233422979712486 - -0.0486902482807636 - <_> - - <_> - - - - <_> - 9 4 8 6 -1. - <_> - 13 4 4 3 2. - <_> - 9 7 4 3 2. - 0 - 0.0859075188636780 - 0.0178996492177248 - -0.1291702985763550 - <_> - - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 5 10 1 1 2. - <_> - 6 11 1 1 2. - 0 - 2.4627919774502516e-003 - 0.0215225107967854 - -0.2741050124168396 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -9.7198048024438322e-005 - 0.1800117045640945 - -0.3015021085739136 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 4 11 8 1 2. - 0 - 0.0104239201173186 - -0.0540018491446972 - 0.1207280978560448 - <_> - - <_> - - - - <_> - 14 9 1 2 -1. - <_> - 14 9 1 1 2. - 1 - -0.0135430600494146 - -0.4493210911750794 - 0.0218673702329397 - <_> - - <_> - - - - <_> - 1 10 12 2 -1. - <_> - 5 10 4 2 3. - 0 - -0.0122252302244306 - 0.1030898019671440 - -0.0681838691234589 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 1 11 8 1 2. - 0 - -0.0545085892081261 - -0.3195317089557648 - 0.0183145105838776 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - 1.1417720088502392e-004 - -0.0720256865024567 - 0.0840362012386322 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 9 10 9 1 2. - <_> - 0 11 9 1 2. - 0 - 0.0336737893521786 - 0.0172971803694963 - -0.3483636975288391 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -1.6943500377237797e-003 - 0.1911813020706177 - -0.0381691195070744 - <_> - - <_> - - - - <_> - 8 4 4 4 -1. - <_> - 10 4 2 2 2. - <_> - 8 6 2 2 2. - 0 - 0.0435684099793434 - 3.3935939427465200e-003 - -0.2254254966974258 - <_> - - <_> - - - - <_> - 6 4 4 4 -1. - <_> - 6 4 2 2 2. - <_> - 8 6 2 2 2. - 0 - -0.0159789901226759 - -0.1744381040334702 - 0.0332464203238487 - <_> - - <_> - - - - <_> - 8 4 3 1 -1. - <_> - 9 4 1 1 3. - 0 - -1.7225230112671852e-003 - 0.0641593784093857 - -0.0286883991211653 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 8 2 2 3 2. - 0 - -0.0115620298311114 - -0.2579245865345001 - 0.0261554904282093 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 9 4 1 1 2. - 0 - 8.8590721134096384e-005 - -0.0595007799565792 - 0.0870544835925102 - <_> - - <_> - - - - <_> - 6 3 3 1 -1. - <_> - 7 3 1 1 3. - 0 - 1.8556630238890648e-003 - -0.0454976111650467 - 0.1441427022218704 - <_> - - <_> - - - - <_> - 12 3 1 2 -1. - <_> - 12 4 1 1 2. - 0 - -1.1980470299022272e-004 - 0.0445301085710526 - -0.0600783415138721 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 8 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - -9.8948839877266437e-005 - 0.0809909999370575 - -0.0747398510575294 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 9 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -9.8720411187969148e-005 - 0.1056438013911247 - -0.0818213969469070 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 8.2602314651012421e-003 - 0.0249921903014183 - -0.2478290945291519 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 9 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - 9.8948839877266437e-005 - -0.0750294923782349 - 0.0795079320669174 - <_> - - <_> - - - - <_> - 1 8 2 4 -1. - <_> - 1 9 2 2 2. - 0 - 4.7536417841911316e-003 - 0.0439062006771564 - -0.1266759037971497 - <_> - - <_> - - - - <_> - 10 9 6 3 -1. - <_> - 10 10 6 1 3. - 0 - -0.0717668011784554 - -0.7341526746749878 - 2.7243639342486858e-003 - <_> - - <_> - - - - <_> - 2 9 6 3 -1. - <_> - 2 10 6 1 3. - 0 - 2.7130648959428072e-003 - -0.0751707628369331 - 0.0756500512361526 - <_> - - <_> - - - - <_> - 6 9 10 3 -1. - <_> - 6 10 10 1 3. - 0 - -0.0252480302006006 - 0.2079502940177918 - -0.0295440293848515 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 5 1 1 3. - 0 - -3.2913060858845711e-003 - 0.1370705068111420 - -0.0409450307488441 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 0 - -1.1903030099347234e-004 - 0.0775482878088951 - -0.1795118004083633 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -1.7214129911735654e-003 - 0.1235081031918526 - -0.0479168817400932 - <_> - - <_> - - - - <_> - 9 7 3 1 -1. - <_> - 10 7 1 1 3. - 0 - 0.0192371606826782 - -6.1758807860314846e-003 - 0.4059542119503021 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -1.6620019450783730e-003 - -0.1858322024345398 - 0.0337677896022797 - <_> - - <_> - - - - <_> - 9 7 3 1 -1. - <_> - 10 7 1 1 3. - 0 - -7.1353819221258163e-003 - 0.1621769964694977 - -0.0149949397891760 - <_> - - <_> - - - - <_> - 6 7 3 1 -1. - <_> - 7 7 1 1 3. - 0 - -1.0784330079331994e-003 - 0.1059558019042015 - -0.0680274367332459 - <_> - - <_> - - - - <_> - 7 1 4 5 -1. - <_> - 8 1 2 5 2. - 0 - 0.0131684402003884 - 0.0252569299191237 - -0.2468155026435852 - <_> - - <_> - - - - <_> - 0 6 6 3 -1. - <_> - 0 7 6 1 3. - 0 - 0.0437662191689014 - 8.1717539578676224e-003 - -0.6821336746215820 - <_> - - <_> - - - - <_> - 12 3 1 2 -1. - <_> - 12 4 1 1 2. - 0 - 9.7744129598140717e-003 - -8.9659281075000763e-003 - 0.3316135108470917 - -1.5257749557495117 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 3 4 -1. - <_> - 5 4 3 2 2. - 0 - -0.0187129899859428 - 0.3169975876808167 - -0.1719827055931091 - <_> - - <_> - - - - <_> - 11 1 2 3 -1. - <_> - 11 1 1 3 2. - 1 - 1.3795300037600100e-004 - -0.2154099047183991 - 0.0661365911364555 - <_> - - <_> - - - - <_> - 8 6 2 6 -1. - <_> - 9 6 1 6 2. - 0 - 0.0674285963177681 - -5.2226951811462641e-004 - -3.5010319824218750e+003 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 9 0 9 3 2. - <_> - 0 3 9 3 2. - 0 - -0.2496598064899445 - -0.2778427004814148 - 5.9022889472544193e-003 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0266050491482019 - 0.2668417096138001 - -0.1390440016984940 - <_> - - <_> - - - - <_> - 14 5 4 6 -1. - <_> - 14 5 2 6 2. - 0 - -0.0231734402477741 - 0.1360118985176086 - -0.1087158992886543 - <_> - - <_> - - - - <_> - 6 4 1 4 -1. - <_> - 5 5 1 2 2. - 1 - -5.5514220148324966e-003 - 0.1947388947010040 - -0.1455153971910477 - <_> - - <_> - - - - <_> - 4 0 10 12 -1. - <_> - 4 6 10 6 2. - 0 - 0.0708251595497131 - -0.2606320977210999 - 0.0790214613080025 - <_> - - <_> - - - - <_> - 8 4 2 3 -1. - <_> - 7 5 2 1 3. - 1 - -0.0235545095056295 - 0.2902652025222778 - -0.0783984586596489 - <_> - - <_> - - - - <_> - 7 0 8 4 -1. - <_> - 7 1 8 2 2. - 0 - -0.0433964505791664 - 0.2480234056711197 - -0.0418625101447105 - <_> - - <_> - - - - <_> - 2 0 9 4 -1. - <_> - 2 1 9 2 2. - 0 - 0.0397554486989975 - -0.0823832079768181 - 0.2556500136852264 - <_> - - <_> - - - - <_> - 16 5 2 4 -1. - <_> - 16 5 1 4 2. - 0 - -4.7884290106594563e-003 - 0.0915648564696312 - -0.0889971032738686 - <_> - - <_> - - - - <_> - 0 6 2 6 -1. - <_> - 0 6 1 3 2. - <_> - 1 9 1 3 2. - 0 - 1.1186640040250495e-004 - -0.1787616014480591 - 0.0934264212846756 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 12 5 1 3 3. - 0 - 0.0186534207314253 - -0.0642055869102478 - 0.3711349070072174 - <_> - - <_> - - - - <_> - 0 2 1 10 -1. - <_> - 0 7 1 5 2. - 0 - 4.3760719709098339e-003 - -0.1995479017496109 - 0.0762146711349487 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 5 1 1 2. - 1 - -0.0149964597076178 - 0.1893073022365570 - -0.0224247798323631 - <_> - - <_> - - - - <_> - 5 5 2 1 -1. - <_> - 5 5 1 1 2. - 1 - 5.5244299583137035e-003 - -0.0741441026329994 - 0.2531807124614716 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -5.6609991006553173e-003 - -0.3397732973098755 - 0.0311144795268774 - <_> - - <_> - - - - <_> - 5 0 6 2 -1. - <_> - 8 0 3 2 2. - 0 - -5.7609830982983112e-003 - 0.1164833977818489 - -0.1157424002885819 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - -0.2648009061813355 - 0.1816468983888626 - -0.0764482319355011 - <_> - - <_> - - - - <_> - 8 3 4 2 -1. - <_> - 8 3 4 1 2. - 1 - -0.0320549011230469 - 0.2739225924015045 - -0.0465570017695427 - <_> - - <_> - - - - <_> - 15 4 2 6 -1. - <_> - 15 4 1 6 2. - 0 - 5.6860670447349548e-003 - -0.0255370903760195 - 0.1257251054048538 - <_> - - <_> - - - - <_> - 1 4 2 6 -1. - <_> - 2 4 1 6 2. - 0 - -4.1426587849855423e-003 - 0.0999652668833733 - -0.1371494978666306 - <_> - - <_> - - - - <_> - 17 7 1 4 -1. - <_> - 17 7 1 2 2. - 1 - -0.0252228304743767 - -0.2159041017293930 - 0.0333611182868481 - <_> - - <_> - - - - <_> - 1 7 4 1 -1. - <_> - 1 7 2 1 2. - 1 - -1.0513579763937742e-004 - 0.0599936395883560 - -0.2243296951055527 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - 0.0321081615984440 - -0.0458225198090076 - 0.2678138017654419 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - -0.0108736101537943 - -0.3429633975028992 - 0.0370439216494560 - <_> - - <_> - - - - <_> - 14 4 2 6 -1. - <_> - 14 4 2 3 2. - 1 - -0.1067221015691757 - -0.1824861019849777 - 0.0230518095195293 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 0 2 3 2. - 0 - 9.5376763492822647e-003 - 0.0331780202686787 - -0.3144476115703583 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - -0.0153979696333408 - -0.4494292140007019 - 0.0255548395216465 - <_> - - <_> - - - - <_> - 2 2 10 3 -1. - <_> - 7 2 5 3 2. - 0 - -0.0188742391765118 - 0.0897385105490685 - -0.1181861013174057 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -0.0138073395937681 - -0.4017077088356018 - 3.7115719169378281e-003 - <_> - - <_> - - - - <_> - 0 10 6 2 -1. - <_> - 0 11 6 1 2. - 0 - -4.8676962032914162e-003 - -0.3639518916606903 - 0.0286557506769896 - <_> - - <_> - - - - <_> - 8 8 2 3 -1. - <_> - 8 9 2 1 3. - 0 - 0.0115470895543695 - -0.0434625707566738 - 0.2495341002941132 - <_> - - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 7 8 4 1 3. - 0 - 0.0186315197497606 - -0.0519451610743999 - 0.2012677043676376 - <_> - - <_> - - - - <_> - 7 4 7 2 -1. - <_> - 7 5 7 1 2. - 0 - 0.0221620593219996 - -0.0283674690872431 - 0.1812507063150406 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - -0.0132822804152966 - -0.4396710991859436 - 0.0231541302055120 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0478182286024094 - 0.1527013927698135 - -0.0647646263241768 - <_> - - <_> - - - - <_> - 3 0 7 6 -1. - <_> - 3 2 7 2 3. - 0 - -0.0707686468958855 - 0.2255931049585342 - -0.0463837198913097 - <_> - - <_> - - - - <_> - 4 1 12 4 -1. - <_> - 4 2 12 2 2. - 0 - 0.0245879907160997 - -0.0798009634017944 - 0.1226278021931648 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 9 1 2 2. - 0 - -2.9572639614343643e-003 - -0.2540132105350494 - 0.0371098108589649 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 6 6 6 4 2. - 0 - 0.0771641880273819 - 0.0317316912114620 - -0.2723929882049561 - <_> - - <_> - - - - <_> - 3 4 3 4 -1. - <_> - 3 6 3 2 2. - 0 - 0.0355004407465458 - -0.0477378703653812 - 0.2348039001226425 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 13 3 4 1 3. - 1 - 0.0244868192821741 - -0.0221184995025396 - 0.1614083051681519 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 5 3 1 4 3. - 1 - 0.0226265992969275 - -0.0505031906068325 - 0.2056812942028046 - <_> - - <_> - - - - <_> - 13 3 3 1 -1. - <_> - 14 4 1 1 3. - 1 - 7.3773749172687531e-003 - 0.0319384485483170 - -0.1698261946439743 - <_> - - <_> - - - - <_> - 0 0 6 4 -1. - <_> - 0 0 3 2 2. - <_> - 3 2 3 2 2. - 0 - -0.0125159500166774 - 0.1257700026035309 - -0.0738597363233566 - <_> - - <_> - - - - <_> - 9 0 6 5 -1. - <_> - 11 0 2 5 3. - 0 - 2.1496510598808527e-003 - 0.0664999634027481 - -0.1594870984554291 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 7 0 7 12 2. - 0 - 0.3278386890888214 - -0.0353878512978554 - 0.2995929121971130 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - -0.0129288099706173 - -0.4243718087673187 - 0.0149258198216558 - <_> - - <_> - - - - <_> - 3 0 6 5 -1. - <_> - 5 0 2 5 3. - 0 - -0.0295433104038239 - -0.2596887052059174 - 0.0306726302951574 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 12 6 2 1 2. - <_> - 10 7 2 1 2. - 0 - 0.0138885397464037 - -0.0291917603462934 - 0.2665095925331116 - <_> - - <_> - - - - <_> - 3 9 12 2 -1. - <_> - 6 9 6 2 2. - 0 - -0.0142434099689126 - 0.1141939014196396 - -0.0750029236078262 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 9 10 2 2 3. - 0 - -0.0249509606510401 - -0.4417090117931366 - 0.0120464395731688 - <_> - - <_> - - - - <_> - 5 10 6 2 -1. - <_> - 7 10 2 2 3. - 0 - -0.0139082102105021 - -0.2965297102928162 - 0.0349816605448723 - <_> - - <_> - - - - <_> - 14 1 3 2 -1. - <_> - 15 2 1 2 3. - 1 - 0.0126208495348692 - 0.0384497605264187 - -0.3253388106822968 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 5 1 3 1 3. - 0 - -7.8615900129079819e-003 - 0.1639689952135086 - -0.0502812713384628 - <_> - - <_> - - - - <_> - 8 0 6 3 -1. - <_> - 8 1 6 1 3. - 0 - 0.0132478503510356 - -0.0481717512011528 - 0.1309133023023605 - <_> - - <_> - - - - <_> - 4 1 2 3 -1. - <_> - 3 2 2 1 3. - 1 - -0.0196284297853708 - -0.3082844018936157 - 0.0261054299771786 - <_> - - <_> - - - - <_> - 8 5 3 1 -1. - <_> - 9 5 1 1 3. - 0 - -1.1116229870822281e-004 - 0.0494998097419739 - -0.0699484497308731 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 5 1 1 3. - 0 - -6.2212720513343811e-003 - 0.2500143051147461 - -0.0391675196588039 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - -7.5383752118796110e-005 - 0.0610463283956051 - -0.0727398172020912 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - -3.9724968373775482e-003 - 0.1830147057771683 - -0.0444073900580406 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 1 2 4 2. - 1 - -0.0499811917543411 - -0.0891634970903397 - 0.0143880601972342 - <_> - - <_> - - - - <_> - 5 0 4 4 -1. - <_> - 4 1 4 2 2. - 1 - 0.0296290908008814 - 0.0262519307434559 - -0.3254190087318420 - <_> - - <_> - - - - <_> - 10 7 6 1 -1. - <_> - 12 7 2 1 3. - 0 - 0.0311100594699383 - -0.0335757881402969 - 0.4515709877014160 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - -0.0741986781358719 - 0.1032688990235329 - -0.0769387409090996 - <_> - - <_> - - - - <_> - 2 1 16 2 -1. - <_> - 6 1 8 2 2. - 0 - 0.0398988984525204 - -0.0258397292345762 - 0.1543582975864410 - <_> - - <_> - - - - <_> - 6 0 4 2 -1. - <_> - 7 0 2 2 2. - 0 - -6.2805712223052979e-003 - -0.2619506120681763 - 0.0273570101708174 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - -4.1073351167142391e-003 - 0.1470880061388016 - -0.0503268390893936 - <_> - - <_> - - - - <_> - 0 4 2 6 -1. - <_> - 1 4 1 6 2. - 0 - -4.9765571020543575e-003 - 0.0866565704345703 - -0.0833212807774544 - <_> - - <_> - - - - <_> - 9 3 2 4 -1. - <_> - 9 3 2 2 2. - 1 - 0.0562253110110760 - -9.0561211109161377e-003 - 0.1364547014236450 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 3 2 2 2. - 1 - -0.0679563283920288 - 0.2271303981542587 - -0.0332352407276630 - <_> - - <_> - - - - <_> - 0 7 18 4 -1. - <_> - 9 7 9 2 2. - <_> - 0 9 9 2 2. - 0 - 0.0857317522168159 - 0.0334422811865807 - -0.2316354960203171 - <_> - - <_> - - - - <_> - 0 6 6 4 -1. - <_> - 0 6 3 2 2. - <_> - 3 8 3 2 2. - 0 - 0.0175412092357874 - -0.0695120915770531 - 0.1189955025911331 - <_> - - <_> - - - - <_> - 17 0 1 12 -1. - <_> - 17 4 1 4 3. - 0 - -1.7374299932271242e-003 - 0.0921720936894417 - -0.2266921997070313 - <_> - - <_> - - - - <_> - 5 4 3 5 -1. - <_> - 6 5 1 5 3. - 1 - 0.0219108797609806 - -0.0436043590307236 - 0.2050873935222626 - <_> - - <_> - - - - <_> - 15 1 3 4 -1. - <_> - 14 2 3 2 2. - 1 - -0.0775934234261513 - -0.3196151852607727 - 7.1907751262187958e-003 - <_> - - <_> - - - - <_> - 3 1 4 3 -1. - <_> - 4 2 2 3 2. - 1 - 9.2180138453841209e-003 - -0.0750737786293030 - 0.1025044992566109 - <_> - - <_> - - - - <_> - 17 0 1 12 -1. - <_> - 17 4 1 4 3. - 0 - 0.0260558295994997 - 0.0133810797706246 - -0.2585015892982483 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 4 1 4 3. - 0 - 0.0282786805182695 - 0.0243920907378197 - -0.3464938998222351 - <_> - - <_> - - - - <_> - 9 9 6 3 -1. - <_> - 11 9 2 3 3. - 0 - -2.8839879669249058e-003 - 0.0463073104619980 - -0.0398905314505100 - <_> - - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 5 9 2 3 3. - 0 - -0.0320219099521637 - -0.4223451912403107 - 0.0160141196101904 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 9 5 6 2 2. - <_> - 3 7 6 2 2. - 0 - 0.0821020230650902 - 0.0188119504600763 - -0.3567441999912262 - <_> - - <_> - - - - <_> - 3 9 9 3 -1. - <_> - 3 10 9 1 3. - 0 - -0.0168902408331633 - 0.1805537045001984 - -0.0396057404577732 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - 0.0394227318465710 - -0.0472475700080395 - 0.1564801037311554 - <_> - - <_> - - - - <_> - 2 11 12 1 -1. - <_> - 5 11 6 1 2. - 0 - -3.4644010011106730e-003 - 0.1040505021810532 - -0.0834775865077972 - <_> - - <_> - - - - <_> - 13 9 1 3 -1. - <_> - 13 10 1 1 3. - 0 - 8.5640960605815053e-005 - -0.0675658807158470 - 0.0669310018420219 - <_> - - <_> - - - - <_> - 5 2 6 3 -1. - <_> - 5 3 6 1 3. - 0 - -0.0238890703767538 - 0.1907691061496735 - -0.0388089008629322 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - 0.0106528801843524 - -0.0686725974082947 - 0.1151766031980515 - <_> - - <_> - - - - <_> - 5 2 1 4 -1. - <_> - 4 3 1 2 2. - 1 - 4.0198648348450661e-003 - 0.0437452308833599 - -0.1759776026010513 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 2.8608399443328381e-003 - 0.0422608293592930 - -0.2983069121837616 - <_> - - <_> - - - - <_> - 4 4 6 2 -1. - <_> - 4 4 3 2 2. - 1 - -0.1306439042091370 - -0.3377709090709686 - 0.0190815906971693 - <_> - - <_> - - - - <_> - 10 5 8 3 -1. - <_> - 10 6 8 1 3. - 0 - 0.0847005397081375 - 2.7477950789034367e-003 - -0.6289582252502441 - <_> - - <_> - - - - <_> - 4 9 1 3 -1. - <_> - 4 10 1 1 3. - 0 - 1.0658860264811665e-004 - -0.0933497101068497 - 0.0758618563413620 - <_> - - <_> - - - - <_> - 10 5 8 3 -1. - <_> - 10 6 8 1 3. - 0 - -0.0602904781699181 - -0.2099086046218872 - 5.9476150199770927e-003 - <_> - - <_> - - - - <_> - 0 5 8 3 -1. - <_> - 0 6 8 1 3. - 0 - 0.0256990306079388 - 0.0220300499349833 - -0.3111168146133423 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 11 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - -9.2062582552898675e-005 - 0.0509819313883781 - -0.0439709611237049 - <_> - - <_> - - - - <_> - 0 10 1 2 -1. - <_> - 0 11 1 1 2. - 0 - -1.6737770056352019e-003 - -0.2601720988750458 - 0.0243080891668797 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - -0.0211783908307552 - 0.1514627039432526 - -0.0653895214200020 - <_> - - <_> - - - - <_> - 6 10 2 2 -1. - <_> - 6 10 1 1 2. - <_> - 7 11 1 1 2. - 0 - 2.3533850908279419e-003 - 0.0229101795703173 - -0.2828744947910309 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - 0.0530839897692204 - -0.0163848996162415 - 0.3809770941734314 - <_> - - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - 0.0399893596768379 - -0.0218689702451229 - 0.3182365894317627 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 12 6 2 1 2. - <_> - 10 7 2 1 2. - 0 - -6.6623869352042675e-003 - 0.1521764993667603 - -0.0212885607033968 - <_> - - <_> - - - - <_> - 4 5 3 4 -1. - <_> - 5 5 1 4 3. - 0 - -0.0455563589930534 - -0.7785742878913879 - 8.6588803678750992e-003 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 12 6 2 1 2. - <_> - 10 7 2 1 2. - 0 - 3.0047509353607893e-003 - -0.0521698184311390 - 0.0708812475204468 - <_> - - <_> - - - - <_> - 4 6 4 2 -1. - <_> - 4 6 2 1 2. - <_> - 6 7 2 1 2. - 0 - -7.3779281228780746e-003 - 0.1926591992378235 - -0.0355221889913082 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - 9.5453477115370333e-005 - -0.0974663197994232 - 0.0964550524950027 - <_> - - <_> - - - - <_> - 9 4 2 3 -1. - <_> - 8 5 2 1 3. - 1 - -0.0109679903835058 - 0.0882787927985191 - -0.0739552006125450 - <_> - - <_> - - - - <_> - 3 4 15 6 -1. - <_> - 8 6 5 2 9. - 0 - -0.8916041254997253 - -0.3586379885673523 - 3.7620719522237778e-003 - <_> - - <_> - - - - <_> - 0 6 12 2 -1. - <_> - 4 6 4 2 3. - 0 - -0.1084647029638290 - -0.3363158106803894 - 0.0197248999029398 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - -1.0542329982854426e-004 - 0.0979688018560410 - -0.0642571598291397 - <_> - - <_> - - - - <_> - 0 2 18 3 -1. - <_> - 6 2 6 3 3. - 0 - -0.0938909202814102 - 0.0870824009180069 - -0.0789611935615540 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - 9.5453477115370333e-005 - -0.0598228089511395 - 0.0568231381475925 - <_> - - <_> - - - - <_> - 2 7 6 1 -1. - <_> - 4 7 2 1 3. - 0 - -9.8177138715982437e-003 - 0.1636597961187363 - -0.0444577299058437 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - -9.3185197329148650e-005 - 0.0564174503087997 - -0.0367961004376411 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 10 1 1 2. - <_> - 3 11 1 1 2. - 0 - 9.4171933596953750e-005 - -0.0805424079298973 - 0.0838058590888977 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 8.7554886704310775e-005 - -0.0404281616210938 - 0.0564757399260998 - <_> - - <_> - - - - <_> - 4 4 1 3 -1. - <_> - 3 5 1 1 3. - 1 - -0.0279500000178814 - -0.6422001719474793 - 9.8489876836538315e-003 - <_> - - <_> - - - - <_> - 12 5 6 5 -1. - <_> - 14 5 2 5 3. - 0 - -0.0222079399973154 - 0.1138591021299362 - -0.0748235136270523 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 9 8 2 1 2. - 1 - -3.5269840154796839e-003 - 0.0563133507966995 - -0.1128031983971596 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - 9.3353092670440674e-003 - 0.0151762701570988 - -0.1791055053472519 - <_> - - <_> - - - - <_> - 6 2 6 10 -1. - <_> - 9 2 3 10 2. - 0 - 0.0794987976551056 - -0.0411159992218018 - 0.2083195000886917 - <_> - - <_> - - - - <_> - 5 3 12 9 -1. - <_> - 8 3 6 9 2. - 0 - -0.0647451728582382 - 0.0590191707015038 - -0.0591640993952751 - <_> - - <_> - - - - <_> - 0 1 16 9 -1. - <_> - 4 1 8 9 2. - 0 - -0.3745405077934265 - -0.3110379874706268 - 0.0250506605952978 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - -1.4513680071104318e-004 - 0.0366916283965111 - -0.0409143306314945 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - 7.7395797707140446e-003 - 0.0251941792666912 - -0.2829059958457947 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 5 11 8 1 2. - 0 - 4.1609802283346653e-003 - -0.0672304183244705 - 0.1104023009538651 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - -0.0109944995492697 - -0.2706933021545410 - 0.0252016205340624 - <_> - - <_> - - - - <_> - 12 5 6 5 -1. - <_> - 14 5 2 5 3. - 0 - -0.0767591297626495 - -0.1789443045854569 - 0.0157413203269243 - <_> - - <_> - - - - <_> - 0 5 6 5 -1. - <_> - 2 5 2 5 3. - 0 - -0.0294161904603243 - 0.1477895975112915 - -0.0616287589073181 - <_> - - <_> - - - - <_> - 0 1 18 10 -1. - <_> - 9 1 9 5 2. - <_> - 0 6 9 5 2. - 0 - 0.2879092991352081 - 0.0151456203311682 - -0.4049035906791687 - <_> - - <_> - - - - <_> - 6 10 2 1 -1. - <_> - 7 10 1 1 2. - 0 - -1.0059560008812696e-004 - 0.0768325403332710 - -0.0835646986961365 - <_> - - <_> - - - - <_> - 10 7 3 1 -1. - <_> - 11 7 1 1 3. - 0 - 4.2243651114404202e-003 - -0.0292564108967781 - 0.1202225014567375 - <_> - - <_> - - - - <_> - 2 1 4 6 -1. - <_> - 3 1 2 6 2. - 0 - -0.0252593904733658 - -0.2860428094863892 - 0.0219927895814180 - <_> - - <_> - - - - <_> - 12 2 6 1 -1. - <_> - 12 2 3 1 2. - 1 - -0.0640388280153275 - -0.2189117968082428 - 0.0108436597511172 - <_> - - <_> - - - - <_> - 6 2 1 6 -1. - <_> - 6 2 1 3 2. - 1 - -0.0705188810825348 - 0.4570961892604828 - -0.0163921993225813 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -7.0195732405409217e-005 - 0.0369329117238522 - -0.0370640791952610 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 2.9889319557696581e-003 - -0.0375480800867081 - 0.1839154064655304 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 8 1 2 1 3. - 0 - -3.4994310699403286e-003 - 0.1126992031931877 - -0.0513408407568932 - <_> - - <_> - - - - <_> - 0 1 16 1 -1. - <_> - 4 1 8 1 2. - 0 - 0.0241271108388901 - -0.0414990000426769 - 0.1732669025659561 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 0 - 5.6061740033328533e-003 - 0.0125992596149445 - -0.4937610030174255 - <_> - - <_> - - - - <_> - 6 1 4 3 -1. - <_> - 6 2 4 1 3. - 0 - -6.8790130317211151e-003 - 0.1268852055072784 - -0.0479303598403931 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - -9.9475309252738953e-003 - -0.3053337037563324 - 0.0356682091951370 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 3 0 6 1 2. - 0 - -6.0581211000680923e-003 - 0.1099371984601021 - -0.0551374815404415 - <_> - - <_> - - - - <_> - 6 1 9 8 -1. - <_> - 6 3 9 4 2. - 0 - -0.0867693275213242 - 0.0561109595000744 - -0.0937650129199028 - <_> - - <_> - - - - <_> - 3 5 7 4 -1. - <_> - 3 7 7 2 2. - 0 - -0.1019223034381867 - 0.5962210893630981 - -0.0114242602139711 - <_> - - <_> - - - - <_> - 9 4 8 6 -1. - <_> - 13 4 4 3 2. - <_> - 9 7 4 3 2. - 0 - 0.1600401997566223 - 7.1362429298460484e-003 - -0.4457210898399353 - <_> - - <_> - - - - <_> - 0 1 4 1 -1. - <_> - 2 1 2 1 2. - 0 - 3.9025470614433289e-003 - -0.0459995791316032 - 0.1221468001604080 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 1 2 1 2. - 1 - 0.0114250397309661 - 0.0357276499271393 - -0.4246379137039185 - <_> - - <_> - - - - <_> - 4 1 9 3 -1. - <_> - 4 2 9 1 3. - 0 - 0.0489798896014690 - -0.0314897783100605 - 0.2036231011152268 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 1 2 1 2. - 1 - -0.0134696504101157 - -0.1755945980548859 - 0.0198173895478249 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - 0.0102756395936012 - 0.0270387604832649 - -0.2331099063158035 - <_> - - <_> - - - - <_> - 12 0 4 2 -1. - <_> - 13 0 2 2 2. - 0 - 6.2424209900200367e-003 - 0.0342171601951122 - -0.3356071114540100 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 0 0 9 1 2. - <_> - 9 1 9 1 2. - 0 - -0.0189317800104618 - 0.1223035007715225 - -0.0508136488497257 - <_> - - <_> - - - - <_> - 7 3 10 6 -1. - <_> - 12 3 5 3 2. - <_> - 7 6 5 3 2. - 0 - 0.1967200040817261 - 2.1031980868428946e-003 - -0.3780081868171692 - <_> - - <_> - - - - <_> - 2 0 4 3 -1. - <_> - 3 0 2 3 2. - 0 - 0.0134580899029970 - 0.0180429704487324 - -0.3095062971115112 - <_> - - <_> - - - - <_> - 12 2 2 1 -1. - <_> - 12 2 1 1 2. - 0 - -1.0042759822681546e-004 - 0.0340725816786289 - -0.0409777685999870 - <_> - - <_> - - - - <_> - 4 2 2 1 -1. - <_> - 5 2 1 1 2. - 0 - -1.0216310329269618e-004 - 0.0738993883132935 - -0.0752342268824577 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 15 1 2 1 3. - 1 - -0.0121406195685267 - 0.1263242065906525 - -0.0378410182893276 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - -0.0111898398026824 - 0.1634252965450287 - -0.0359924808144569 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 10 4 1 3 3. - 1 - -8.0074174329638481e-003 - 0.0303945709019899 - -0.0463669188320637 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -1.3145169941708446e-003 - 0.1130667030811310 - -0.0566126704216003 - <_> - - <_> - - - - <_> - 9 4 8 6 -1. - <_> - 13 4 4 3 2. - <_> - 9 7 4 3 2. - 0 - -0.0115750199183822 - -0.0709848776459694 - 0.0232840292155743 - <_> - - <_> - - - - <_> - 1 4 8 6 -1. - <_> - 1 4 4 3 2. - <_> - 5 7 4 3 2. - 0 - 0.1362794935703278 - 0.0124136796221137 - -0.5066723227500916 - <_> - - <_> - - - - <_> - 10 5 4 3 -1. - <_> - 9 6 4 1 3. - 1 - -0.0395890884101391 - -0.0957747474312782 - 8.6489180102944374e-003 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - -0.0167511291801929 - -0.2523334026336670 - 0.0228890907019377 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -9.3176960945129395e-005 - 0.0870768800377846 - -0.0675204992294312 - <_> - - <_> - - - - <_> - 5 6 3 2 -1. - <_> - 6 6 1 2 3. - 0 - -2.8843290638178587e-003 - 0.1129027977585793 - -0.0522808395326138 - <_> - - <_> - - - - <_> - 16 10 1 2 -1. - <_> - 16 11 1 1 2. - 0 - 3.0579629819840193e-003 - 0.0358746610581875 - -0.1865649968385696 - <_> - - <_> - - - - <_> - 1 10 1 2 -1. - <_> - 1 11 1 1 2. - 0 - 9.7428957815282047e-005 - -0.1145483031868935 - 0.0550135709345341 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 1.2528899824246764e-003 - -0.0554887205362320 - 0.1423428058624268 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - -1.0249209590256214e-003 - -0.1732176989316940 - 0.0386059209704399 - <_> - - <_> - - - - <_> - 5 4 11 8 -1. - <_> - 5 8 11 4 2. - 0 - -0.0931619629263878 - -0.5708081722259522 - 7.1864281781017780e-003 - <_> - - <_> - - - - <_> - 7 10 2 1 -1. - <_> - 8 10 1 1 2. - 0 - -1.1855579941766337e-004 - 0.0736410915851593 - -0.0777508765459061 - <_> - - <_> - - - - <_> - 9 10 2 1 -1. - <_> - 9 10 1 1 2. - 0 - -1.0393650154583156e-004 - 0.0420400910079479 - -0.0343947894871235 - <_> - - <_> - - - - <_> - 7 10 2 1 -1. - <_> - 8 10 1 1 2. - 0 - 1.0028410179074854e-004 - -0.0701517164707184 - 0.1005510017275810 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 6 9 3 2 2. - 0 - 9.8116062581539154e-003 - -0.0575862191617489 - 0.1254398971796036 - <_> - - <_> - - - - <_> - 6 2 4 2 -1. - <_> - 8 2 2 2 2. - 0 - -0.0161872506141663 - -0.2105884999036789 - 0.0296801291406155 - <_> - - <_> - - - - <_> - 9 2 2 4 -1. - <_> - 9 2 2 2 2. - 1 - -0.0795798301696777 - 0.2710951864719391 - -8.4382239729166031e-003 - <_> - - <_> - - - - <_> - 7 3 1 2 -1. - <_> - 7 3 1 1 2. - 1 - -1.1105289449915290e-003 - -0.1055269986391068 - 0.0527812093496323 - <_> - - <_> - - - - <_> - 16 1 2 4 -1. - <_> - 15 2 2 2 2. - 1 - -0.0141785396263003 - 0.0748763382434845 - -0.0377887599170208 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 3 2 2 2 2. - 1 - -0.0376082807779312 - 0.3101431131362915 - -0.0192220509052277 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - 7.7960239723324776e-003 - 0.0206596199423075 - -0.2029390931129456 - <_> - - <_> - - - - <_> - 0 4 1 4 -1. - <_> - 0 5 1 2 2. - 0 - -3.7200350780040026e-003 - -0.1540136039257050 - 0.0365738607943058 - <_> - - <_> - - - - <_> - 10 6 3 3 -1. - <_> - 9 7 3 1 3. - 1 - 0.0232173893600702 - 0.0136170499026775 - -0.1346661001443863 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 1.6200500540435314e-003 - -0.0499108284711838 - 0.1362254023551941 - <_> - - <_> - - - - <_> - 7 3 6 6 -1. - <_> - 9 5 2 2 9. - 0 - -0.1410211026668549 - 0.0673981010913849 - -0.0395831800997257 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 2 2. - 0 - 4.9663311801850796e-003 - 0.0270152706652880 - -0.2032209932804108 - <_> - - <_> - - - - <_> - 7 4 6 6 -1. - <_> - 9 4 2 6 3. - 0 - 0.0625454410910606 - -0.0202993005514145 - 0.2707617878913879 - <_> - - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 9 7 1 3 3. - 1 - 0.0353707298636436 - 0.0146474195644259 - -0.4151732921600342 - <_> - - <_> - - - - <_> - 15 2 3 2 -1. - <_> - 16 3 1 2 3. - 1 - 0.0110299102962017 - 0.0316992104053497 - -0.2413218021392822 - <_> - - <_> - - - - <_> - 7 7 2 3 -1. - <_> - 7 8 2 1 3. - 0 - 6.4016189426183701e-003 - -0.0489480309188366 - 0.1132624968886375 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - -4.9354950897395611e-003 - 0.1465432941913605 - -0.0480414107441902 - <_> - - <_> - - - - <_> - 1 5 2 3 -1. - <_> - 1 6 2 1 3. - 0 - 0.0113536398857832 - 0.0177291706204414 - -0.3483485877513886 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 1.7991849454119802e-003 - 0.0315003693103790 - -0.1100760027766228 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -2.0583570003509521e-003 - 0.1376388967037201 - -0.0382785610854626 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 3 1 1 3. - 1 - -0.0115839401260018 - -0.1979050040245056 - 0.0215400401502848 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.7315410077571869e-003 - 0.1417302042245865 - -0.0389972105622292 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 0 1 1 3. - 0 - -8.4372592391446233e-004 - 0.1365551054477692 - -0.0806939080357552 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 9 11 9 1 2. - 0 - -0.0914738774299622 - -0.4475409090518951 - 0.0119623504579067 - <_> - - <_> - - - - <_> - 8 11 10 1 -1. - <_> - 8 11 5 1 2. - 0 - -0.0181042198091745 - 0.0772896185517311 - -0.0235456004738808 - <_> - - <_> - - - - <_> - 1 0 3 1 -1. - <_> - 2 0 1 1 3. - 0 - -1.1535269732121378e-004 - 0.0768363103270531 - -0.0681343227624893 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - 0.0109061095863581 - 7.2263278998434544e-003 - -0.6970415711402893 - <_> - - <_> - - - - <_> - 0 0 4 1 -1. - <_> - 1 0 2 1 2. - 0 - 1.7245879862457514e-003 - -0.0503533110022545 - 0.1281010955572128 - <_> - - <_> - - - - <_> - 6 4 12 4 -1. - <_> - 10 4 4 4 3. - 0 - 0.2058921009302139 - -0.0133006004616618 - 0.2716938853263855 - <_> - - <_> - - - - <_> - 4 3 6 2 -1. - <_> - 6 3 2 2 3. - 0 - -0.0316697917878628 - -0.3354839980602264 - 0.0158088393509388 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 7 2 3 2. - 0 - 0.0120976697653532 - -0.0718467682600021 - 0.0189812891185284 - <_> - - <_> - - - - <_> - 5 3 2 1 -1. - <_> - 6 3 1 1 2. - 0 - -9.8784686997532845e-005 - 0.0663050413131714 - -0.0796494334936142 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 7 3 4 1 3. - 0 - 0.0346628092229366 - -0.0242437906563282 - 0.2266075015068054 - <_> - - <_> - - - - <_> - 8 3 1 2 -1. - <_> - 8 4 1 1 2. - 0 - 4.1574249044060707e-003 - -0.0237258393317461 - 0.2277520000934601 - <_> - - <_> - - - - <_> - 10 0 4 8 -1. - <_> - 10 0 2 8 2. - 1 - 0.1362545937299728 - 0.0125456601381302 - -0.1869889050722122 - <_> - - <_> - - - - <_> - 8 0 8 4 -1. - <_> - 8 0 8 2 2. - 1 - -0.1879647970199585 - -0.4974902868270874 - 0.0109146004542708 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 9 4 2 2 2. - 0 - -0.0680788531899452 - 0.6581838130950928 - -4.3843579478561878e-003 - <_> - - <_> - - - - <_> - 5 4 4 2 -1. - <_> - 7 4 2 2 2. - 0 - 4.1167731396853924e-003 - 0.0402112491428852 - -0.1413715928792954 - <_> - - <_> - - - - <_> - 12 1 3 2 -1. - <_> - 13 2 1 2 3. - 1 - 0.0122228302061558 - 0.0175553802400827 - -0.1242308020591736 - <_> - - <_> - - - - <_> - 8 3 1 6 -1. - <_> - 8 6 1 3 2. - 0 - -0.0301945097744465 - 0.2896938025951386 - -0.0200853701680899 - <_> - - <_> - - - - <_> - 12 1 3 2 -1. - <_> - 13 2 1 2 3. - 1 - -0.0136304795742035 - -0.0729305371642113 - 0.0204719398170710 - <_> - - <_> - - - - <_> - 2 2 12 4 -1. - <_> - 2 3 12 2 2. - 0 - -0.0491704605519772 - 0.1449605971574783 - -0.0410229898989201 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - -0.0188057795166969 - -0.3085105121135712 - 0.0280869193375111 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 0.0300586391240358 - 0.0125476401299238 - -0.4472235143184662 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 3 0 6 1 2. - 0 - 0.0117461197078228 - -0.0577172487974167 - 0.0878280326724052 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 9 0 9 10 2. - 0 - 0.1092891991138458 - -0.0683912634849548 - 0.0975721478462219 - <_> - - <_> - - - - <_> - 5 2 8 2 -1. - <_> - 5 2 4 2 2. - 0 - 9.1915056109428406e-003 - -0.0741810128092766 - 0.0733941718935966 - <_> - - <_> - - - - <_> - 1 2 12 6 -1. - <_> - 1 2 6 3 2. - <_> - 7 5 6 3 2. - 0 - 0.1846816986799240 - 9.3096662312746048e-003 - -0.5878456234931946 - <_> - - <_> - - - - <_> - 15 8 3 3 -1. - <_> - 15 9 3 1 3. - 0 - 6.8637598305940628e-003 - 0.0309680793434381 - -0.1727750003337860 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -1.9742390140891075e-003 - 0.1306941956281662 - -0.0380300506949425 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -2.6963930577039719e-003 - 0.1624440997838974 - -0.0354813784360886 - <_> - - <_> - - - - <_> - 8 5 3 4 -1. - <_> - 9 6 1 4 3. - 1 - -0.0580139085650444 - -0.4374948143959045 - 0.0127705102786422 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 1 2 2 2. - 0 - 8.9008668437600136e-003 - 0.0430592596530914 - -0.3790155947208405 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - -0.0167404506355524 - -0.4096631109714508 - 0.0104116601869464 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - 2.6413789018988609e-003 - -0.0400578081607819 - 0.2167664021253586 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - -8.0486387014389038e-003 - -0.2788177132606506 - 0.0197779703885317 - <_> - - <_> - - - - <_> - 6 8 6 2 -1. - <_> - 8 8 2 2 3. - 0 - -0.0603763498365879 - 0.5353479981422424 - -0.0114248897880316 - <_> - - <_> - - - - <_> - 6 1 2 3 -1. - <_> - 5 2 2 1 3. - 1 - 0.0231240708380938 - 0.0164581593126059 - -0.3212598860263825 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 5 2 8 2 3. - 0 - 0.2032282948493958 - -0.0231459401547909 - 0.2390325963497162 - <_> - - <_> - - - - <_> - 5 2 2 2 -1. - <_> - 6 2 1 2 2. - 0 - 9.2585664242506027e-003 - 0.0119809396564960 - -0.4384216070175171 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - -9.3168877356220037e-005 - 0.0386874787509441 - -0.0377978086471558 - <_> - - <_> - - - - <_> - 2 4 12 4 -1. - <_> - 6 4 4 4 3. - 0 - -0.3064337968826294 - -0.5577437281608582 - 9.6901366487145424e-003 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - 9.9146942375227809e-005 - -0.0553302392363548 - 0.0668352469801903 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - -2.0753950811922550e-003 - 0.1510539054870606 - -0.0379700884222984 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 1.7292000120505691e-003 - 0.0372065603733063 - -0.1266295015811920 - <_> - - <_> - - - - <_> - 6 7 2 3 -1. - <_> - 5 8 2 1 3. - 1 - 0.0414862893521786 - -7.8654065728187561e-003 - 0.5928629040718079 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - -2.1392209455370903e-003 - -0.2170332968235016 - 0.0255098398774862 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 3 10 1 1 2. - <_> - 4 11 1 1 2. - 0 - -1.2593599967658520e-003 - -0.1543657034635544 - 0.0316766612231731 - <_> - - <_> - - - - <_> - 8 11 10 1 -1. - <_> - 8 11 5 1 2. - 0 - -5.2773267962038517e-003 - 0.0408929102122784 - -0.0284157395362854 - <_> - - <_> - - - - <_> - 4 7 2 3 -1. - <_> - 3 8 2 1 3. - 1 - -0.0111250402405858 - 0.1623205989599228 - -0.0307451691478491 - <_> - - <_> - - - - <_> - 4 6 10 6 -1. - <_> - 4 9 10 3 2. - 0 - -1.6761909937486053e-003 - -0.3309017121791840 - 0.0177685692906380 - <_> - - <_> - - - - <_> - 4 11 4 1 -1. - <_> - 5 11 2 1 2. - 0 - -1.0530459985602647e-004 - 0.0754389390349388 - -0.0669338703155518 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - 7.3067108169198036e-003 - 5.1727588288486004e-003 - -0.5524929165840149 - <_> - - <_> - - - - <_> - 4 10 2 2 -1. - <_> - 4 10 1 1 2. - <_> - 5 11 1 1 2. - 0 - 9.5791132480371743e-005 - -0.0749213472008705 - 0.0863548517227173 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -9.3413247668650001e-005 - 0.0485582686960697 - -0.0403787307441235 - <_> - - <_> - - - - <_> - 7 8 1 4 -1. - <_> - 7 9 1 2 2. - 0 - 4.6156500466167927e-003 - -0.0375327989459038 - 0.1334013938903809 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 11 7 1 2 2. - 1 - -0.0410421490669250 - 0.2982156872749329 - -6.6182389855384827e-003 - <_> - - <_> - - - - <_> - 7 7 2 2 -1. - <_> - 7 7 2 1 2. - 1 - 7.1153012104332447e-003 - -0.0216312408447266 - 0.2358261048793793 - <_> - - <_> - - - - <_> - 10 7 1 3 -1. - <_> - 9 8 1 1 3. - 1 - -0.0310664307326078 - -0.5861052274703980 - 3.6739821080118418e-003 - <_> - - <_> - - - - <_> - 2 11 14 1 -1. - <_> - 9 11 7 1 2. - 0 - 0.0459889099001884 - 0.0169350299984217 - -0.3102642893791199 - <_> - - <_> - - - - <_> - 8 10 10 2 -1. - <_> - 8 10 5 2 2. - 0 - -0.1132673993706703 - 0.1565486043691635 - -5.0538508221507072e-003 - <_> - - <_> - - - - <_> - 0 10 10 2 -1. - <_> - 5 10 5 2 2. - 0 - 6.4136488363146782e-003 - -0.0539362505078316 - 0.1001392006874085 - <_> - - <_> - - - - <_> - 8 11 10 1 -1. - <_> - 8 11 5 1 2. - 0 - 0.0366158299148083 - 8.5446005687117577e-003 - -0.1596466004848480 - <_> - - <_> - - - - <_> - 0 11 10 1 -1. - <_> - 5 11 5 1 2. - 0 - -0.0171479396522045 - 0.1419283002614975 - -0.0537494383752346 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - 5.3531897719949484e-004 - 0.1144033968448639 - -0.2330276966094971 - <_> - - <_> - - - - <_> - 3 4 1 2 -1. - <_> - 3 4 1 1 2. - 1 - 0.0114440796896815 - 0.0124684898182750 - -0.3917421102523804 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 8.3751561760436743e-005 - -0.0499331504106522 - 0.0548286102712154 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -1.8420179840177298e-003 - 0.1435350030660629 - -0.0375447086989880 - <_> - - <_> - - - - <_> - 9 10 4 1 -1. - <_> - 10 10 2 1 2. - 0 - 4.5310789719223976e-003 - 0.0107836900278926 - -0.1858448982238770 - <_> - - <_> - - - - <_> - 0 9 4 2 -1. - <_> - 0 10 4 1 2. - 0 - -6.4388299360871315e-003 - -0.3638176918029785 - 0.0126622598618269 - <_> - - <_> - - - - <_> - 2 11 16 1 -1. - <_> - 6 11 8 1 2. - 0 - 5.8657680638134480e-003 - -0.0501558110117912 - 0.0953462794423103 - <_> - - <_> - - - - <_> - 0 8 18 1 -1. - <_> - 9 8 9 1 2. - 0 - 0.0722144469618797 - 0.0207698997110128 - -0.2323918044567108 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.1799850035458803e-003 - 0.0304791107773781 - -0.1015679016709328 - <_> - - <_> - - - - <_> - 7 8 4 3 -1. - <_> - 7 9 4 1 3. - 0 - -9.1386884450912476e-003 - 0.1459242999553680 - -0.0351009108126163 - <_> - - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 9 7 1 1 9. - 0 - -0.0114875202998519 - 0.0667314082384110 - -0.0409609712660313 - <_> - - <_> - - - - <_> - 8 7 2 4 -1. - <_> - 8 7 1 2 2. - <_> - 9 9 1 2 2. - 0 - 5.9421849437057972e-003 - 0.0267156008630991 - -0.2093899995088577 - <_> - - <_> - - - - <_> - 15 4 2 3 -1. - <_> - 14 5 2 1 3. - 1 - 0.0159670002758503 - -0.0256909001618624 - 0.1629498004913330 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.0477179894223809e-003 - 0.1114815026521683 - -0.0446792207658291 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 1 2 2 2. - 0 - -1.7775410087779164e-003 - 0.0517367497086525 - -0.0340076088905334 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 1 2 2 2. - 0 - 0.0223141908645630 - 0.0110568795353174 - -0.4757811129093170 - <_> - - <_> - - - - <_> - 15 4 2 3 -1. - <_> - 14 5 2 1 3. - 1 - -0.0120756300166249 - 0.0783826783299446 - -0.0386138409376144 - <_> - - <_> - - - - <_> - 3 4 3 2 -1. - <_> - 4 5 1 2 3. - 1 - 5.9365699999034405e-003 - -0.0407924205064774 - 0.1277489066123962 - -1.4309279918670654 - 12 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_mouth.xml b/data/haarcascades/haarcascade_mcs_mouth.xml deleted file mode 100644 index ca7d37d..0000000 --- a/data/haarcascades/haarcascade_mcs_mouth.xml +++ /dev/null @@ -1,21991 +0,0 @@ - - - - - - 25 15 - - <_> - - - <_> - - <_> - - - - <_> - 0 0 14 9 -1. - <_> - 0 3 14 3 3. - 0 - -0.1192855015397072 - 0.7854182124137878 - -0.4541360139846802 - <_> - - <_> - - - - <_> - 17 1 8 14 -1. - <_> - 17 8 8 7 2. - 0 - -0.0641647726297379 - -0.7407680749893189 - 0.2652035951614380 - <_> - - <_> - - - - <_> - 7 3 11 6 -1. - <_> - 7 5 11 2 3. - 0 - 0.0910761803388596 - -0.2063370943069458 - 0.8400946259498596 - <_> - - <_> - - - - <_> - 5 2 15 6 -1. - <_> - 5 4 15 2 3. - 0 - -0.1129330024123192 - 0.8284121751785278 - -0.1866362988948822 - <_> - - <_> - - - - <_> - 6 4 11 6 -1. - <_> - 6 6 11 2 3. - 0 - -0.0741933435201645 - 0.8354660272598267 - -0.1527701020240784 - <_> - - <_> - - - - <_> - 17 1 6 3 -1. - <_> - 19 1 2 3 3. - 0 - 2.1404659491963685e-005 - -0.0716945603489876 - 0.1858334988355637 - <_> - - <_> - - - - <_> - 5 0 15 6 -1. - <_> - 5 2 15 2 3. - 0 - -0.0996975302696228 - 0.6870458126068115 - -0.1721730977296829 - <_> - - <_> - - - - <_> - 7 3 13 6 -1. - <_> - 7 5 13 2 3. - 0 - -0.0900413617491722 - 0.7310237884521484 - -0.1368771940469742 - <_> - - <_> - - - - <_> - 5 3 6 5 -1. - <_> - 8 3 3 5 2. - 0 - 2.5138311320915818e-004 - -0.3469826877117157 - 0.3647777140140533 - <_> - - <_> - - - - <_> - 21 14 4 1 -1. - <_> - 21 14 2 1 2. - 0 - 1.6144449546118267e-005 - -0.3085466027259827 - 0.2320024073123932 - <_> - - <_> - - - - <_> - 0 3 3 12 -1. - <_> - 0 7 3 4 3. - 0 - 1.9363909814273939e-005 - -0.3819856047630310 - 0.2404107004404068 - <_> - - <_> - - - - <_> - 22 10 3 4 -1. - <_> - 22 11 3 2 2. - 0 - 6.9673648104071617e-003 - 0.0545878112316132 - -0.7487065792083740 - <_> - - <_> - - - - <_> - 0 10 3 4 -1. - <_> - 0 11 3 2 2. - 0 - -4.7189309261739254e-003 - -0.7476686835289002 - 0.1205869019031525 - -1.4372119903564453 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 0 15 8 -1. - <_> - 5 2 15 4 2. - 0 - -0.1006335020065308 - 0.7848083972930908 - -0.3866829872131348 - <_> - - <_> - - - - <_> - 20 0 5 9 -1. - <_> - 20 3 5 3 3. - 0 - -0.0366767607629299 - 0.5453233718872070 - -0.4012677967548370 - <_> - - <_> - - - - <_> - 6 2 13 4 -1. - <_> - 6 4 13 2 2. - 0 - 0.0815562233328819 - -0.1315398067235947 - 0.8084958195686340 - <_> - - <_> - - - - <_> - 7 2 15 6 -1. - <_> - 7 4 15 2 3. - 0 - -0.1064186021685600 - 0.6782389879226685 - -0.2083356976509094 - <_> - - <_> - - - - <_> - 2 3 4 12 -1. - <_> - 2 9 4 6 2. - 0 - 0.0156307406723499 - -0.3749788105487824 - 0.3150509893894196 - <_> - - <_> - - - - <_> - 6 1 14 6 -1. - <_> - 6 3 14 2 3. - 0 - 0.0711290463805199 - -0.1557385027408600 - 0.7050542831420898 - <_> - - <_> - - - - <_> - 8 3 9 6 -1. - <_> - 8 5 9 2 3. - 0 - 0.0736639127135277 - -0.1547683030366898 - 0.6715884804725647 - <_> - - <_> - - - - <_> - 21 0 4 6 -1. - <_> - 21 3 4 3 2. - 0 - -1.0592950275167823e-004 - 0.1365388035774231 - -0.2670182883739471 - <_> - - <_> - - - - <_> - 1 12 1 3 -1. - <_> - 1 13 1 1 3. - 0 - -1.9239520188421011e-003 - -0.7261438965797424 - 0.1364576965570450 - <_> - - <_> - - - - <_> - 23 12 1 3 -1. - <_> - 23 13 1 1 3. - 0 - 2.3057300131767988e-003 - 0.0706136971712112 - -0.6423184275627136 - <_> - - <_> - - - - <_> - 1 12 1 3 -1. - <_> - 1 13 1 1 3. - 0 - 1.8073299434036016e-003 - 0.1355642974376679 - -0.7050786018371582 - <_> - - <_> - - - - <_> - 7 7 11 8 -1. - <_> - 7 9 11 4 2. - 0 - -0.0664333626627922 - 0.6158788204193115 - -0.1400263011455536 - <_> - - <_> - - - - <_> - 8 4 9 6 -1. - <_> - 8 6 9 2 3. - 0 - -0.0689277201890945 - 0.6765924096107483 - -0.1224988028407097 - -1.5416599512100220 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 0 15 9 -1. - <_> - 1 3 15 3 3. - 0 - -0.1822655051946640 - 0.5961514711380005 - -0.3195483088493347 - <_> - - <_> - - - - <_> - 9 0 11 15 -1. - <_> - 9 5 11 5 3. - 0 - 0.2893281877040863 - -0.0240151602774858 - 0.3762707114219666 - <_> - - <_> - - - - <_> - 0 8 3 4 -1. - <_> - 0 9 3 2 2. - 0 - -4.2456621304154396e-003 - -0.7117397785186768 - 0.1214720010757446 - <_> - - <_> - - - - <_> - 7 9 12 6 -1. - <_> - 7 12 12 3 2. - 0 - 0.0545681491494179 - -0.1822118014097214 - 0.4597271978855133 - <_> - - <_> - - - - <_> - 0 5 2 6 -1. - <_> - 0 7 2 2 3. - 0 - -4.4434829615056515e-003 - -0.5354676842689514 - 0.1655835956335068 - <_> - - <_> - - - - <_> - 14 0 2 11 -1. - <_> - 14 0 1 11 2. - 0 - -0.0204923897981644 - -0.8770608901977539 - -0.0151639897376299 - <_> - - <_> - - - - <_> - 0 9 2 6 -1. - <_> - 0 11 2 2 3. - 0 - -4.8007471486926079e-003 - -0.5431423187255859 - 0.1356130987405777 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - 0.1226660013198853 - 0.1124472022056580 - -0.6574401855468750 - <_> - - <_> - - - - <_> - 0 0 3 4 -1. - <_> - 0 2 3 2 2. - 0 - -5.5254979088203982e-005 - 0.1536739021539688 - -0.3841981887817383 - <_> - - <_> - - - - <_> - 7 3 14 6 -1. - <_> - 7 5 14 2 3. - 0 - -0.1131860986351967 - 0.4927195906639099 - -0.1094276010990143 - <_> - - <_> - - - - <_> - 5 3 15 4 -1. - <_> - 5 5 15 2 2. - 0 - 0.0792956873774529 - -0.1647461056709290 - 0.4720517992973328 - <_> - - <_> - - - - <_> - 8 13 12 1 -1. - <_> - 12 13 4 1 3. - 0 - 0.0148729300126433 - 0.0740143731236458 - -0.5926275849342346 - <_> - - <_> - - - - <_> - 2 3 12 6 -1. - <_> - 8 3 6 6 2. - 0 - 0.0538397915661335 - -0.2111544013023377 - 0.3537890911102295 - <_> - - <_> - - - - <_> - 21 2 4 9 -1. - <_> - 21 2 2 9 2. - 1 - -0.0759592726826668 - 0.5931801795959473 - -0.1090068966150284 - <_> - - <_> - - - - <_> - 6 2 13 6 -1. - <_> - 6 4 13 2 3. - 0 - 0.1158166006207466 - -0.0984905213117599 - 0.5940334796905518 - <_> - - <_> - - - - <_> - 5 3 15 2 -1. - <_> - 5 4 15 1 2. - 0 - -0.0160826407372952 - 0.3794195055961609 - -0.1654051989316940 - <_> - - <_> - - - - <_> - 0 11 5 3 -1. - <_> - 0 12 5 1 3. - 0 - 6.7254770547151566e-003 - 0.0937571078538895 - -0.7060937881469727 - <_> - - <_> - - - - <_> - 14 0 11 14 -1. - <_> - 14 7 11 7 2. - 0 - -0.0611884109675884 - -0.4381029903888702 - 0.0796229690313339 - <_> - - <_> - - - - <_> - 2 10 4 1 -1. - <_> - 3 11 2 1 2. - 1 - -5.5152038112282753e-003 - -0.7019357085227966 - 0.0781789273023605 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - -0.1988534033298492 - -0.6726130843162537 - 0.0560497716069222 - <_> - - <_> - - - - <_> - 0 4 6 6 -1. - <_> - 0 4 3 3 2. - <_> - 3 7 3 3 2. - 0 - 0.0194473192095757 - -0.1165110021829605 - 0.4151527881622315 - <_> - - <_> - - - - <_> - 23 9 1 4 -1. - <_> - 22 10 1 2 2. - 1 - -4.6706218272447586e-003 - -0.6090158820152283 - 0.1049979999661446 - <_> - - <_> - - - - <_> - 2 9 4 1 -1. - <_> - 3 10 2 1 2. - 1 - 4.0827528573572636e-003 - 0.0689968466758728 - -0.5490871071815491 - <_> - - <_> - - - - <_> - 16 4 8 10 -1. - <_> - 20 4 4 5 2. - <_> - 16 9 4 5 2. - 0 - -0.0201979596167803 - 0.2884930074214935 - -0.1804888993501663 - <_> - - <_> - - - - <_> - 8 7 9 6 -1. - <_> - 8 9 9 2 3. - 0 - 0.0504430681467056 - -0.0897706300020218 - 0.4609920978546143 - <_> - - <_> - - - - <_> - 11 12 4 3 -1. - <_> - 12 12 2 3 2. - 0 - -5.0139562226831913e-003 - -0.4820869863033295 - 0.0588099807500839 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - 8.5741933435201645e-003 - 0.0568646714091301 - -0.5979083180427551 - <_> - - <_> - - - - <_> - 11 9 14 2 -1. - <_> - 11 9 7 2 2. - 0 - -0.0121624497696757 - 0.1446305960416794 - -0.1168325990438461 - <_> - - <_> - - - - <_> - 9 13 4 1 -1. - <_> - 10 13 2 1 2. - 0 - -1.9329390488564968e-003 - -0.5450860857963562 - 0.0609783902764320 - -1.5324319601058960 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 8 6 -1. - <_> - 0 3 8 3 2. - 0 - -0.0320550985634327 - 0.4280030131340027 - -0.4258942902088165 - <_> - - <_> - - - - <_> - 5 1 15 6 -1. - <_> - 5 3 15 2 3. - 0 - -0.1231034025549889 - 0.5121241807937622 - -0.2055584937334061 - <_> - - <_> - - - - <_> - 0 7 4 3 -1. - <_> - 0 8 4 1 3. - 0 - -5.8588259853422642e-003 - -0.7101820707321167 - 0.1075906008481979 - <_> - - <_> - - - - <_> - 3 3 20 6 -1. - <_> - 8 3 10 6 2. - 0 - 0.0977141335606575 - -0.1477957963943481 - 0.4571174979209900 - <_> - - <_> - - - - <_> - 0 6 24 5 -1. - <_> - 6 6 12 5 2. - 0 - -0.0527394600212574 - 0.3743767142295837 - -0.2183827012777329 - <_> - - <_> - - - - <_> - 8 5 9 6 -1. - <_> - 8 7 9 2 3. - 0 - 0.0584189109504223 - -0.1386294066905975 - 0.4993282854557037 - <_> - - <_> - - - - <_> - 5 2 14 4 -1. - <_> - 5 4 14 2 2. - 0 - 0.0887569189071655 - -0.1315895020961762 - 0.6216561794281006 - <_> - - <_> - - - - <_> - 22 8 3 6 -1. - <_> - 22 10 3 2 3. - 0 - 0.0145876696333289 - 0.0915696695446968 - -0.5815675258636475 - <_> - - <_> - - - - <_> - 3 9 18 2 -1. - <_> - 3 9 9 1 2. - <_> - 12 10 9 1 2. - 0 - 0.1044600009918213 - 5.2740359678864479e-003 - -5.6644519531250000e+004 - <_> - - <_> - - - - <_> - 22 8 3 6 -1. - <_> - 22 10 3 2 3. - 0 - -8.4322784096002579e-003 - -0.4866046011447907 - 0.0979617610573769 - <_> - - <_> - - - - <_> - 0 0 24 6 -1. - <_> - 0 0 12 3 2. - <_> - 12 3 12 3 2. - 0 - 0.0406559295952320 - 0.1391579061746597 - -0.3656015992164612 - <_> - - <_> - - - - <_> - 14 11 4 4 -1. - <_> - 15 11 2 4 2. - 0 - 6.3366899266839027e-003 - 0.0641745477914810 - -0.6245471239089966 - <_> - - <_> - - - - <_> - 5 5 15 2 -1. - <_> - 5 6 15 1 2. - 0 - 0.0158455893397331 - -0.1791914999485016 - 0.2889905869960785 - <_> - - <_> - - - - <_> - 5 4 15 6 -1. - <_> - 5 6 15 2 3. - 0 - -0.0746863335371017 - 0.5424023270606995 - -0.1314727962017059 - <_> - - <_> - - - - <_> - 0 7 2 3 -1. - <_> - 0 8 2 1 3. - 0 - 4.7695250250399113e-003 - 0.0965340435504913 - -0.6561154723167419 - <_> - - <_> - - - - <_> - 6 6 13 6 -1. - <_> - 6 8 13 2 3. - 0 - -0.0535226687788963 - 0.4636800885200501 - -0.1353430002927780 - <_> - - <_> - - - - <_> - 0 11 6 3 -1. - <_> - 0 12 6 1 3. - 0 - -6.3648750074207783e-003 - -0.6624563932418823 - 0.0684857368469238 - <_> - - <_> - - - - <_> - 11 0 14 14 -1. - <_> - 11 7 14 7 2. - 0 - -0.2447337061166763 - -0.8181337118148804 - 0.0450799688696861 - <_> - - <_> - - - - <_> - 7 13 4 1 -1. - <_> - 8 13 2 1 2. - 0 - -2.4634969886392355e-003 - -0.7681804895401001 - 0.0495845898985863 - <_> - - <_> - - - - <_> - 6 9 13 6 -1. - <_> - 6 11 13 2 3. - 0 - -0.0358034893870354 - 0.3749603927135468 - -0.1447928994894028 - <_> - - <_> - - - - <_> - 0 9 4 4 -1. - <_> - 0 10 4 2 2. - 0 - -5.6720529682934284e-003 - -0.6127536296844482 - 0.0935847163200378 - <_> - - <_> - - - - <_> - 21 0 4 6 -1. - <_> - 21 3 4 3 2. - 0 - -0.0132687101140618 - 0.2863784134387970 - -0.2551889121532440 - <_> - - <_> - - - - <_> - 0 12 6 3 -1. - <_> - 0 13 6 1 3. - 0 - -6.2518939375877380e-003 - -0.5896773934364319 - 0.0677111670374870 - <_> - - <_> - - - - <_> - 16 11 4 3 -1. - <_> - 17 11 2 3 2. - 0 - 7.3092570528388023e-003 - 0.0272198095917702 - -0.5714861154556274 - <_> - - <_> - - - - <_> - 0 7 10 8 -1. - <_> - 0 7 5 4 2. - <_> - 5 11 5 4 2. - 0 - 0.0258194394409657 - -0.1326007992029190 - 0.3050251901149750 - <_> - - <_> - - - - <_> - 22 2 3 8 -1. - <_> - 22 2 3 4 2. - 1 - -0.0211078803986311 - 0.1200629025697708 - -0.1475265026092529 - <_> - - <_> - - - - <_> - 1 3 16 4 -1. - <_> - 9 3 8 4 2. - 0 - 0.0408483408391476 - -0.1736883074045181 - 0.2530446052551270 - <_> - - <_> - - - - <_> - 1 13 24 2 -1. - <_> - 13 13 12 1 2. - <_> - 1 14 12 1 2. - 0 - -0.0179475992918015 - -0.7117617130279541 - 0.0583698004484177 - <_> - - <_> - - - - <_> - 5 5 4 10 -1. - <_> - 6 5 2 10 2. - 0 - -0.0138895902782679 - -0.6778132915496826 - 0.0435630008578300 - <_> - - <_> - - - - <_> - 13 7 2 6 -1. - <_> - 11 9 2 2 3. - 1 - -9.8488982766866684e-003 - 0.1479212939739227 - -0.0897465273737907 - <_> - - <_> - - - - <_> - 8 9 8 6 -1. - <_> - 8 12 8 3 2. - 0 - -0.0659847036004066 - 0.5683801770210266 - -0.0681742578744888 - <_> - - <_> - - - - <_> - 24 7 1 4 -1. - <_> - 24 8 1 2 2. - 0 - -1.8370660254731774e-003 - -0.4986937940120697 - 0.0779643580317497 - <_> - - <_> - - - - <_> - 5 7 15 6 -1. - <_> - 5 9 15 2 3. - 0 - -0.0277651809155941 - 0.2679949104785919 - -0.1382624953985214 - <_> - - <_> - - - - <_> - 21 8 4 3 -1. - <_> - 21 9 4 1 3. - 0 - 9.9889356642961502e-003 - 0.0445619411766529 - -0.7317379117012024 - -1.4849940538406372 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 15 4 -1. - <_> - 5 3 15 2 2. - 0 - -0.0456383489072323 - 0.6275423169136047 - -0.2494937032461166 - <_> - - <_> - - - - <_> - 6 4 15 3 -1. - <_> - 6 5 15 1 3. - 0 - -0.0310676805675030 - 0.6427816152572632 - -0.1671900004148483 - <_> - - <_> - - - - <_> - 0 3 2 12 -1. - <_> - 0 3 1 6 2. - <_> - 1 9 1 6 2. - 0 - 3.0193419661372900e-003 - -0.2399346977472305 - 0.3676818013191223 - <_> - - <_> - - - - <_> - 7 3 11 4 -1. - <_> - 7 4 11 2 2. - 0 - 0.0315676406025887 - -0.1147691980004311 - 0.5750172734260559 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 0 3 6 3 2. - 0 - -6.4146341755986214e-003 - 0.2154625058174133 - -0.3768770098686218 - <_> - - <_> - - - - <_> - 24 3 1 12 -1. - <_> - 24 7 1 4 3. - 0 - -5.7010860182344913e-003 - -0.4533824026584625 - 0.0946888476610184 - <_> - - <_> - - - - <_> - 0 0 24 12 -1. - <_> - 0 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - 0.1890300065279007 - 0.0801155269145966 - -0.7184885144233704 - <_> - - <_> - - - - <_> - 1 1 24 14 -1. - <_> - 13 1 12 7 2. - <_> - 1 8 12 7 2. - 0 - 0.1293978989124298 - 0.1093719005584717 - -0.5197048783302307 - <_> - - <_> - - - - <_> - 5 3 8 4 -1. - <_> - 5 3 8 2 2. - 1 - -0.0657683908939362 - 0.5003104209899902 - -0.1238735020160675 - <_> - - <_> - - - - <_> - 24 9 1 4 -1. - <_> - 23 10 1 2 2. - 1 - -4.0884059853851795e-003 - -0.5118011236190796 - 0.0594223700463772 - <_> - - <_> - - - - <_> - 7 7 11 8 -1. - <_> - 7 9 11 4 2. - 0 - -0.0306642707437277 - 0.2964648902416229 - -0.1741248071193695 - <_> - - <_> - - - - <_> - 24 9 1 4 -1. - <_> - 23 10 1 2 2. - 1 - 2.7700960636138916e-003 - 0.0846907272934914 - -0.4009515047073364 - <_> - - <_> - - - - <_> - 0 6 1 9 -1. - <_> - 0 9 1 3 3. - 0 - -6.2402039766311646e-003 - -0.5560923218727112 - 0.0800850465893745 - <_> - - <_> - - - - <_> - 8 2 9 3 -1. - <_> - 8 3 9 1 3. - 0 - 0.0105152595788240 - -0.1309404969215393 - 0.3612711131572723 - <_> - - <_> - - - - <_> - 9 4 7 4 -1. - <_> - 9 5 7 2 2. - 0 - 0.0181792695075274 - -0.1245180964469910 - 0.3556562960147858 - <_> - - <_> - - - - <_> - 22 0 3 2 -1. - <_> - 22 1 3 1 2. - 0 - 5.3037698380649090e-003 - 0.0638220235705376 - -0.6178466081619263 - <_> - - <_> - - - - <_> - 0 0 13 14 -1. - <_> - 0 7 13 7 2. - 0 - -0.1947806030511856 - -0.7228901982307434 - 0.0475768186151981 - <_> - - <_> - - - - <_> - 21 9 4 4 -1. - <_> - 21 10 4 2 2. - 0 - 7.2230421938002110e-003 - 0.0453382283449173 - -0.5460836291313171 - <_> - - <_> - - - - <_> - 0 9 4 4 -1. - <_> - 0 10 4 2 2. - 0 - 5.0375838764011860e-003 - 0.0804468318820000 - -0.4817472100257874 - <_> - - <_> - - - - <_> - 22 9 1 4 -1. - <_> - 21 10 1 2 2. - 1 - -7.1934829466044903e-003 - -0.5018991827964783 - 0.0128700295463204 - <_> - - <_> - - - - <_> - 3 9 4 1 -1. - <_> - 4 10 2 1 2. - 1 - -4.4941599480807781e-003 - -0.5862709879875183 - 0.0634675025939941 - <_> - - <_> - - - - <_> - 15 3 10 12 -1. - <_> - 20 3 5 6 2. - <_> - 15 9 5 6 2. - 0 - 0.0874131396412849 - -0.0676202401518822 - 0.4797031879425049 - <_> - - <_> - - - - <_> - 0 8 14 6 -1. - <_> - 0 8 7 3 2. - <_> - 7 11 7 3 2. - 0 - -0.0377015694975853 - 0.3913342952728272 - -0.0978809297084808 - <_> - - <_> - - - - <_> - 23 10 1 4 -1. - <_> - 22 11 1 2 2. - 1 - 3.0070370994508266e-003 - 0.0484924912452698 - -0.2472224980592728 - <_> - - <_> - - - - <_> - 0 3 10 12 -1. - <_> - 0 3 5 6 2. - <_> - 5 9 5 6 2. - 0 - 0.0974098667502403 - -0.0669010728597641 - 0.5813519954681397 - <_> - - <_> - - - - <_> - 23 0 2 1 -1. - <_> - 23 0 1 1 2. - 1 - -4.0166568942368031e-003 - -0.5456554293632507 - 0.0363924615085125 - <_> - - <_> - - - - <_> - 8 3 9 3 -1. - <_> - 8 4 9 1 3. - 0 - 0.0104924896731973 - -0.1087466031312943 - 0.3253425061702728 - <_> - - <_> - - - - <_> - 7 5 11 4 -1. - <_> - 7 6 11 2 2. - 0 - 0.0249659996479750 - -0.1137896031141281 - 0.3056510984897614 - <_> - - <_> - - - - <_> - 2 7 20 8 -1. - <_> - 12 7 10 8 2. - 0 - 0.1301030069589615 - -0.1220476999878883 - 0.3035365939140320 - <_> - - <_> - - - - <_> - 12 5 9 8 -1. - <_> - 15 5 3 8 3. - 0 - -0.0843720883131027 - -0.6943122148513794 - 0.0178856607526541 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -2.9267850331962109e-003 - -0.5401834845542908 - 0.0564073212444782 - <_> - - <_> - - - - <_> - 21 3 4 4 -1. - <_> - 22 4 2 4 2. - 1 - -0.0206745099276304 - 0.4180921018123627 - -0.0685340464115143 - <_> - - <_> - - - - <_> - 4 5 9 8 -1. - <_> - 7 5 3 8 3. - 0 - -0.0514506399631500 - -0.6289098262786865 - 0.0529876984655857 - <_> - - <_> - - - - <_> - 22 10 3 2 -1. - <_> - 22 10 3 1 2. - 1 - -8.9261196553707123e-003 - -0.4644356071949005 - 0.0236550793051720 - <_> - - <_> - - - - <_> - 0 5 24 5 -1. - <_> - 6 5 12 5 2. - 0 - -0.0830484703183174 - 0.3304196894168854 - -0.0938697606325150 - <_> - - <_> - - - - <_> - 9 7 7 3 -1. - <_> - 9 8 7 1 3. - 0 - 0.0113369999453425 - -0.0979600325226784 - 0.3484053015708923 - <_> - - <_> - - - - <_> - 2 0 20 9 -1. - <_> - 7 0 10 9 2. - 0 - 0.0827779024839401 - -0.1159391030669212 - 0.2680957913398743 - <_> - - <_> - - - - <_> - 11 2 8 9 -1. - <_> - 13 2 4 9 2. - 0 - -0.0478848814964294 - -0.6079211235046387 - 0.0222362894564867 - <_> - - <_> - - - - <_> - 1 8 4 1 -1. - <_> - 2 9 2 1 2. - 1 - -3.8582698907703161e-003 - -0.4688901007175446 - 0.0554540418088436 - <_> - - <_> - - - - <_> - 19 5 6 10 -1. - <_> - 22 5 3 5 2. - <_> - 19 10 3 5 2. - 0 - -0.0334531292319298 - 0.4192667901515961 - -0.0631088465452194 - <_> - - <_> - - - - <_> - 0 5 6 10 -1. - <_> - 0 5 3 5 2. - <_> - 3 10 3 5 2. - 0 - 0.0126036396250129 - -0.1227632984519005 - 0.2175220996141434 - <_> - - <_> - - - - <_> - 10 10 9 2 -1. - <_> - 13 10 3 2 3. - 0 - 0.0262600891292095 - 0.0162896700203419 - -0.5688759088516235 - -1.5437099933624268 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 15 2 -1. - <_> - 5 3 15 1 2. - 0 - -0.0197793096303940 - 0.4472095072269440 - -0.2573797106742859 - <_> - - <_> - - - - <_> - 21 4 4 3 -1. - <_> - 21 4 2 3 2. - 0 - -9.1997236013412476e-003 - 0.4397894144058228 - -0.1382309943437576 - <_> - - <_> - - - - <_> - 1 5 15 4 -1. - <_> - 1 6 15 2 2. - 0 - 0.0222425796091557 - -0.1761150062084198 - 0.3406811952590942 - <_> - - <_> - - - - <_> - 21 5 4 10 -1. - <_> - 23 5 2 5 2. - <_> - 21 10 2 5 2. - 0 - 5.3650550544261932e-003 - -0.1087490990757942 - 0.1631094068288803 - <_> - - <_> - - - - <_> - 0 0 21 8 -1. - <_> - 7 0 7 8 3. - 0 - 0.7425013780593872 - 4.6233131433837116e-004 - -1.4172740478515625e+003 - <_> - - <_> - - - - <_> - 5 0 15 6 -1. - <_> - 5 2 15 2 3. - 0 - -0.1289999037981033 - 0.4220936894416809 - -0.1264209002256393 - <_> - - <_> - - - - <_> - 2 2 21 3 -1. - <_> - 9 2 7 3 3. - 0 - 0.4214023947715759 - 3.0299068894237280e-003 - 1.2071870117187500e+003 - <_> - - <_> - - - - <_> - 6 3 15 6 -1. - <_> - 6 5 15 2 3. - 0 - -0.1431712061166763 - 0.5070012211799622 - -0.1091170981526375 - <_> - - <_> - - - - <_> - 0 5 4 10 -1. - <_> - 0 5 2 5 2. - <_> - 2 10 2 5 2. - 0 - 4.4366121292114258e-003 - -0.2218814045190811 - 0.2446105927228928 - <_> - - <_> - - - - <_> - 22 10 1 4 -1. - <_> - 21 11 1 2 2. - 1 - 3.0177310109138489e-003 - 0.1072233989834786 - -0.3470205068588257 - <_> - - <_> - - - - <_> - 0 7 3 4 -1. - <_> - 0 8 3 2 2. - 0 - -4.8220949247479439e-003 - -0.6534119248390198 - 0.0803434476256371 - <_> - - <_> - - - - <_> - 1 3 24 3 -1. - <_> - 7 3 12 3 2. - 0 - 0.0362788289785385 - -0.2207075059413910 - 0.2242490947246552 - <_> - - <_> - - - - <_> - 0 0 24 13 -1. - <_> - 6 0 12 13 2. - 0 - -0.1675994992256165 - 0.4059072136878967 - -0.1054169982671738 - <_> - - <_> - - - - <_> - 5 3 15 4 -1. - <_> - 5 4 15 2 2. - 0 - -0.0509919412434101 - 0.3452283143997192 - -0.1206474006175995 - <_> - - <_> - - - - <_> - 5 4 14 3 -1. - <_> - 5 5 14 1 3. - 0 - 0.0161635298281908 - -0.1465175002813339 - 0.3696750998497009 - <_> - - <_> - - - - <_> - 23 8 2 4 -1. - <_> - 22 9 2 2 2. - 1 - 8.3268675953149796e-003 - 0.0642398297786713 - -0.5490669012069702 - <_> - - <_> - - - - <_> - 2 8 4 2 -1. - <_> - 3 9 2 2 2. - 1 - -7.2614871896803379e-003 - -0.6105815768241882 - 0.0538330897688866 - <_> - - <_> - - - - <_> - 9 8 9 6 -1. - <_> - 9 10 9 2 3. - 0 - -0.0427855290472507 - 0.3435507118701935 - -0.1058441996574402 - <_> - - <_> - - - - <_> - 0 0 11 14 -1. - <_> - 0 7 11 7 2. - 0 - -0.0558885596692562 - -0.4213463068008423 - 0.0855342373251915 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - 0.1077039018273354 - 0.0796676799654961 - -0.5105268955230713 - <_> - - <_> - - - - <_> - 0 0 3 4 -1. - <_> - 0 2 3 2 2. - 0 - -4.8622798203723505e-005 - 0.1164970993995667 - -0.3022361099720001 - <_> - - <_> - - - - <_> - 7 2 15 4 -1. - <_> - 7 3 15 2 2. - 0 - 0.0272718109190464 - -0.0831976532936096 - 0.3410704135894775 - <_> - - <_> - - - - <_> - 2 10 4 1 -1. - <_> - 3 11 2 1 2. - 1 - 2.7942128945142031e-003 - 0.0836139172315598 - -0.4521746933460236 - <_> - - <_> - - - - <_> - 21 11 4 4 -1. - <_> - 21 12 4 2 2. - 0 - -5.9649557806551456e-003 - -0.5814967751502991 - 0.0588471181690693 - <_> - - <_> - - - - <_> - 1 7 12 8 -1. - <_> - 1 7 6 4 2. - <_> - 7 11 6 4 2. - 0 - -0.0364551208913326 - 0.2987614870071411 - -0.1163965016603470 - <_> - - <_> - - - - <_> - 7 8 11 6 -1. - <_> - 7 11 11 3 2. - 0 - 0.0560359284281731 - -0.1189749017357826 - 0.3490499854087830 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 14 2 1 2. - 0 - 1.9068910041823983e-003 - 0.0623399801552296 - -0.5222734212875366 - <_> - - <_> - - - - <_> - 10 3 8 6 -1. - <_> - 12 3 4 6 2. - 0 - -0.0314803011715412 - -0.5988280177116394 - 0.0221100505441427 - <_> - - <_> - - - - <_> - 7 3 8 6 -1. - <_> - 9 3 4 6 2. - 0 - -0.0291779898107052 - -0.7628328204154968 - 0.0378519818186760 - <_> - - <_> - - - - <_> - 22 6 3 3 -1. - <_> - 22 7 3 1 3. - 0 - 9.3441819772124290e-003 - 0.0293787997215986 - -0.5464184880256653 - <_> - - <_> - - - - <_> - 0 5 5 6 -1. - <_> - 0 7 5 2 3. - 0 - 1.2941689928993583e-003 - -0.2152619063854218 - 0.1293071061372757 - <_> - - <_> - - - - <_> - 8 7 9 6 -1. - <_> - 8 9 9 2 3. - 0 - 0.0399527512490749 - -0.0815632417798042 - 0.3440327942371368 - <_> - - <_> - - - - <_> - 2 0 20 13 -1. - <_> - 12 0 10 13 2. - 0 - 0.2579689919948578 - -0.0829713121056557 - 0.2971759140491486 - <_> - - <_> - - - - <_> - 19 3 6 4 -1. - <_> - 22 3 3 2 2. - <_> - 19 5 3 2 2. - 0 - 8.3975978195667267e-003 - -0.1235759034752846 - 0.3130742907524109 - <_> - - <_> - - - - <_> - 3 8 12 3 -1. - <_> - 9 8 6 3 2. - 0 - -0.0210481006652117 - 0.2553890943527222 - -0.1077592000365257 - <_> - - <_> - - - - <_> - 22 3 2 5 -1. - <_> - 22 3 1 5 2. - 1 - 0.0184192396700382 - -0.0348858311772347 - 0.4613004922866821 - <_> - - <_> - - - - <_> - 6 7 8 8 -1. - <_> - 8 7 4 8 2. - 0 - -0.0335993207991123 - -0.6385626196861267 - 0.0432357601821423 - <_> - - <_> - - - - <_> - 20 0 3 1 -1. - <_> - 21 1 1 1 3. - 1 - -5.9369178488850594e-003 - -0.3381235003471375 - 0.0261388104408979 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - 7.4244509451091290e-003 - 0.0416494794189930 - -0.6013135910034180 - <_> - - <_> - - - - <_> - 22 11 1 3 -1. - <_> - 21 12 1 1 3. - 1 - -3.8341500330716372e-003 - -0.3147934973239899 - 0.0227260906249285 - <_> - - <_> - - - - <_> - 1 4 4 3 -1. - <_> - 3 4 2 3 2. - 0 - 5.9263929724693298e-003 - -0.0845179632306099 - 0.2986125946044922 - <_> - - <_> - - - - <_> - 19 4 6 8 -1. - <_> - 22 4 3 4 2. - <_> - 19 8 3 4 2. - 0 - -0.0194444190710783 - 0.2213757932186127 - -0.0513583682477474 - <_> - - <_> - - - - <_> - 0 4 8 8 -1. - <_> - 0 4 4 4 2. - <_> - 4 8 4 4 2. - 0 - 0.0187752693891525 - -0.1223364025354385 - 0.2647691071033478 - <_> - - <_> - - - - <_> - 22 11 1 3 -1. - <_> - 21 12 1 1 3. - 1 - 6.4857508987188339e-003 - 0.0205634497106075 - -0.5246906280517578 - <_> - - <_> - - - - <_> - 0 1 24 14 -1. - <_> - 0 1 12 7 2. - <_> - 12 8 12 7 2. - 0 - -0.2598725855350494 - -0.6570193767547607 - 0.0345496907830238 - <_> - - <_> - - - - <_> - 23 8 2 4 -1. - <_> - 23 9 2 2 2. - 0 - -5.8150831609964371e-003 - -0.6595460772514343 - 0.0302442405372858 - <_> - - <_> - - - - <_> - 5 3 15 4 -1. - <_> - 5 4 15 2 2. - 0 - -0.0261219404637814 - 0.1870407015085220 - -0.1252924054861069 - <_> - - <_> - - - - <_> - 8 1 9 3 -1. - <_> - 8 2 9 1 3. - 0 - -5.7821800000965595e-003 - 0.2328509986400604 - -0.1182496026158333 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 9 2 2 2. - 0 - -2.9595640953630209e-003 - -0.4579938054084778 - 0.0564655400812626 - <_> - - <_> - - - - <_> - 18 10 7 2 -1. - <_> - 18 11 7 1 2. - 0 - -0.0120882000774145 - -0.5189349055290222 - 0.0244996603578329 - <_> - - <_> - - - - <_> - 6 11 12 4 -1. - <_> - 6 12 12 2 2. - 0 - -8.8109169155359268e-003 - 0.2570025026798248 - -0.0927671566605568 - <_> - - <_> - - - - <_> - 14 0 6 15 -1. - <_> - 16 0 2 15 3. - 0 - -0.0459428504109383 - -0.4479719102382660 - 0.0299462303519249 - <_> - - <_> - - - - <_> - 0 10 7 2 -1. - <_> - 0 11 7 1 2. - 0 - -0.0100041404366493 - -0.6149634122848511 - 0.0364212691783905 - <_> - - <_> - - - - <_> - 15 5 6 6 -1. - <_> - 18 5 3 3 2. - <_> - 15 8 3 3 2. - 0 - -0.0116753997281194 - 0.1172877028584480 - -0.0613474808633327 - <_> - - <_> - - - - <_> - 5 0 6 15 -1. - <_> - 7 0 2 15 3. - 0 - -0.0524668507277966 - -0.7613652944564819 - 0.0306894704699516 - <_> - - <_> - - - - <_> - 8 7 9 4 -1. - <_> - 8 8 9 2 2. - 0 - 0.0182263404130936 - -0.0854801833629608 - 0.2695373892784119 - <_> - - <_> - - - - <_> - 7 6 10 6 -1. - <_> - 7 8 10 2 3. - 0 - -0.0452684201300144 - 0.3264470100402832 - -0.0773756429553032 - <_> - - <_> - - - - <_> - 19 11 1 3 -1. - <_> - 18 12 1 1 3. - 1 - -8.1426883116364479e-003 - -0.4582937955856323 - 9.3973511829972267e-003 - <_> - - <_> - - - - <_> - 6 11 3 1 -1. - <_> - 7 12 1 1 3. - 1 - -5.3349281661212444e-003 - -0.5775498151779175 - 0.0352523885667324 - <_> - - <_> - - - - <_> - 16 10 4 1 -1. - <_> - 16 10 2 1 2. - 0 - -1.0754769900813699e-003 - 0.1434753984212875 - -0.1015762984752655 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -3.5198600962758064e-003 - -0.6082041263580322 - 0.0328880697488785 - <_> - - <_> - - - - <_> - 8 1 9 3 -1. - <_> - 8 2 9 1 3. - 0 - 0.0112483501434326 - -0.0905500426888466 - 0.2323783040046692 - <_> - - <_> - - - - <_> - 0 6 5 3 -1. - <_> - 0 7 5 1 3. - 0 - -0.0119920196011662 - -0.5705332159996033 - 0.0367036312818527 - <_> - - <_> - - - - <_> - 21 8 1 4 -1. - <_> - 20 9 1 2 2. - 1 - -0.0121055301278830 - -0.7086269259452820 - 4.4598700478672981e-003 - -1.5637760162353516 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 1 15 6 -1. - <_> - 5 3 15 2 3. - 0 - -0.1112890988588333 - 0.5214446783065796 - -0.2762526869773865 - <_> - - <_> - - - - <_> - 23 0 2 2 -1. - <_> - 24 0 1 1 2. - <_> - 23 1 1 1 2. - 0 - -3.1310080084949732e-003 - -0.6073393225669861 - 0.0243980996310711 - <_> - - <_> - - - - <_> - 3 3 15 6 -1. - <_> - 3 5 15 2 3. - 0 - -0.0975013524293900 - 0.5489286780357361 - -0.1652427017688751 - <_> - - <_> - - - - <_> - 19 0 6 9 -1. - <_> - 19 3 6 3 3. - 0 - -0.0652247071266174 - 0.3402006924152374 - -0.2693930864334106 - <_> - - <_> - - - - <_> - 5 2 15 6 -1. - <_> - 5 4 15 2 3. - 0 - 0.1191802993416786 - -0.1123576015233994 - 0.6395980119705200 - <_> - - <_> - - - - <_> - 17 3 8 3 -1. - <_> - 17 4 8 1 3. - 0 - -0.0140629801899195 - 0.3342761993408203 - -0.1284538954496384 - <_> - - <_> - - - - <_> - 4 3 8 4 -1. - <_> - 4 3 8 2 2. - 1 - -0.0564025007188320 - 0.3790628910064697 - -0.1554156988859177 - <_> - - <_> - - - - <_> - 16 4 6 2 -1. - <_> - 16 5 6 1 2. - 0 - 7.1742408908903599e-003 - -0.1133088991045952 - 0.1825089007616043 - <_> - - <_> - - - - <_> - 0 0 24 12 -1. - <_> - 0 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - 0.1259752959012985 - 0.0945485532283783 - -0.4853444099426270 - <_> - - <_> - - - - <_> - 22 10 3 2 -1. - <_> - 22 10 3 1 2. - 1 - 5.9177991934120655e-003 - 0.0701321363449097 - -0.5377039909362793 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 4 5 6 2 3. - 1 - -0.0439277403056622 - 0.3950741887092590 - -0.1080185994505882 - <_> - - <_> - - - - <_> - 14 4 9 1 -1. - <_> - 17 7 3 1 3. - 1 - -9.8314704373478889e-003 - 0.0959606170654297 - -0.0468075983226299 - <_> - - <_> - - - - <_> - 3 10 2 3 -1. - <_> - 3 10 1 3 2. - 1 - 5.6353402324020863e-003 - 0.0943416282534599 - -0.5247716903686523 - <_> - - <_> - - - - <_> - 20 8 5 2 -1. - <_> - 20 8 5 1 2. - 1 - -0.0115382801741362 - -0.5154880285263062 - 0.0138055300340056 - <_> - - <_> - - - - <_> - 0 9 16 6 -1. - <_> - 0 9 8 3 2. - <_> - 8 12 8 3 2. - 0 - 0.0286462493240833 - -0.1382701992988586 - 0.2750437855720520 - <_> - - <_> - - - - <_> - 6 2 13 3 -1. - <_> - 6 3 13 1 3. - 0 - 0.0138679798692465 - -0.1203586980700493 - 0.3521435856819153 - <_> - - <_> - - - - <_> - 0 1 3 4 -1. - <_> - 0 3 3 2 2. - 0 - -4.0469371015205979e-004 - 0.1522637009620667 - -0.2590084075927734 - <_> - - <_> - - - - <_> - 8 0 9 12 -1. - <_> - 8 6 9 6 2. - 0 - -0.1594581007957459 - -0.6391854882240295 - 0.0514649897813797 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - -2.7928699273616076e-003 - -0.5840150713920593 - 0.0542793795466423 - <_> - - <_> - - - - <_> - 5 3 15 3 -1. - <_> - 5 4 15 1 3. - 0 - 0.0183532107621431 - -0.1051151007413864 - 0.3529815971851349 - <_> - - <_> - - - - <_> - 3 10 2 3 -1. - <_> - 3 10 1 3 2. - 1 - -5.1810559816658497e-003 - -0.4741767942905426 - 0.0798512324690819 - <_> - - <_> - - - - <_> - 19 4 6 4 -1. - <_> - 22 4 3 2 2. - <_> - 19 6 3 2 2. - 0 - 9.2321299016475677e-003 - -0.0759327188134193 - 0.1852813959121704 - <_> - - <_> - - - - <_> - 0 3 8 4 -1. - <_> - 0 3 4 2 2. - <_> - 4 5 4 2 2. - 0 - 0.0121171101927757 - -0.1117528975009918 - 0.2853634953498840 - <_> - - <_> - - - - <_> - 19 10 5 3 -1. - <_> - 19 11 5 1 3. - 0 - -7.2612818330526352e-003 - -0.5885108709335327 - 0.0526883192360401 - <_> - - <_> - - - - <_> - 1 10 5 3 -1. - <_> - 1 11 5 1 3. - 0 - 5.6134900078177452e-003 - 0.0474684908986092 - -0.5394589900970459 - <_> - - <_> - - - - <_> - 12 1 13 14 -1. - <_> - 12 8 13 7 2. - 0 - -0.1945167928934097 - -0.5634222030639648 - 0.0302108898758888 - <_> - - <_> - - - - <_> - 0 1 13 14 -1. - <_> - 0 8 13 7 2. - 0 - 0.3550943136215210 - 0.0630894526839256 - -0.4980587959289551 - <_> - - <_> - - - - <_> - 11 3 6 12 -1. - <_> - 14 3 3 6 2. - <_> - 11 9 3 6 2. - 0 - 0.0331119708716869 - 0.0346324704587460 - -0.5246484875679016 - <_> - - <_> - - - - <_> - 9 5 6 10 -1. - <_> - 9 5 3 5 2. - <_> - 12 10 3 5 2. - 0 - 0.0342818088829517 - 0.0431439802050591 - -0.6470713019371033 - <_> - - <_> - - - - <_> - 20 8 5 4 -1. - <_> - 20 9 5 2 2. - 0 - -7.8256614506244659e-003 - -0.4688000977039337 - 0.0402393713593483 - <_> - - <_> - - - - <_> - 0 8 5 4 -1. - <_> - 0 9 5 2 2. - 0 - 0.0111560495570302 - 0.0401505008339882 - -0.6095538735389710 - <_> - - <_> - - - - <_> - 8 9 9 3 -1. - <_> - 8 10 9 1 3. - 0 - 0.0113630602136254 - -0.0827489867806435 - 0.3811689019203186 - <_> - - <_> - - - - <_> - 7 10 6 4 -1. - <_> - 9 10 2 4 3. - 0 - 0.0204051006585360 - 0.0425756387412548 - -0.7467774152755737 - <_> - - <_> - - - - <_> - 6 6 14 4 -1. - <_> - 6 7 14 2 2. - 0 - 0.0191116295754910 - -0.1239197030663490 - 0.2226520031690598 - <_> - - <_> - - - - <_> - 9 6 5 4 -1. - <_> - 9 7 5 2 2. - 0 - -7.3364898562431335e-003 - 0.3034206926822662 - -0.0926956906914711 - <_> - - <_> - - - - <_> - 22 5 3 6 -1. - <_> - 22 7 3 2 3. - 0 - -8.6538922041654587e-003 - -0.3351745009422302 - 0.0585405789315701 - <_> - - <_> - - - - <_> - 0 5 3 6 -1. - <_> - 0 7 3 2 3. - 0 - 0.0347895994782448 - 0.0337578095495701 - -0.7483453154563904 - <_> - - <_> - - - - <_> - 17 1 5 4 -1. - <_> - 17 2 5 2 2. - 0 - -0.0174188297241926 - 0.2445363998413086 - -0.0698786973953247 - <_> - - <_> - - - - <_> - 3 1 6 4 -1. - <_> - 3 2 6 2 2. - 0 - 3.5119079984724522e-003 - -0.1277886927127838 - 0.2403315007686615 - <_> - - <_> - - - - <_> - 21 14 4 1 -1. - <_> - 21 14 2 1 2. - 0 - 5.0669797929003835e-004 - -0.1169779002666473 - 0.1439380049705505 - <_> - - <_> - - - - <_> - 4 8 3 2 -1. - <_> - 5 9 1 2 3. - 1 - -5.9512741863727570e-003 - -0.5078160762786865 - 0.0478522293269634 - <_> - - <_> - - - - <_> - 14 2 4 7 -1. - <_> - 14 2 2 7 2. - 0 - 0.0503778010606766 - 2.9282520990818739e-003 - -0.7751696109771729 - <_> - - <_> - - - - <_> - 7 2 4 7 -1. - <_> - 9 2 2 7 2. - 0 - 3.8862510118633509e-003 - -0.1550420969724655 - 0.1570920050144196 - <_> - - <_> - - - - <_> - 9 3 8 5 -1. - <_> - 11 3 4 5 2. - 0 - 0.0385116301476955 - 0.0230970401316881 - -0.6291617155075073 - <_> - - <_> - - - - <_> - 5 10 15 1 -1. - <_> - 10 10 5 1 3. - 0 - -5.5746049620211124e-003 - 0.1807070970535278 - -0.1298052966594696 - <_> - - <_> - - - - <_> - 2 6 21 9 -1. - <_> - 9 6 7 9 3. - 0 - 0.1266476064920425 - -0.0865593999624252 - 0.2957325875759125 - <_> - - <_> - - - - <_> - 0 4 6 6 -1. - <_> - 0 6 6 2 3. - 0 - 5.4126111790537834e-003 - -0.1528324931859970 - 0.1662916988134384 - <_> - - <_> - - - - <_> - 1 12 24 3 -1. - <_> - 7 12 12 3 2. - 0 - -0.0361530818045139 - 0.2797313034534454 - -0.1039886027574539 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - 7.1673998609185219e-003 - -0.0945642217993736 - 0.2778528034687042 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 13 8 2 2 2. - 1 - -6.7790350876748562e-003 - 0.1679068058729172 - -0.0839543119072914 - <_> - - <_> - - - - <_> - 8 6 8 5 -1. - <_> - 10 6 4 5 2. - 0 - -0.0298676099628210 - -0.7236117124557495 - 0.0346310697495937 - <_> - - <_> - - - - <_> - 11 5 6 4 -1. - <_> - 11 6 6 2 2. - 0 - 6.5265512093901634e-003 - -0.1173760965466499 - 0.1346033960580826 - <_> - - <_> - - - - <_> - 0 14 4 1 -1. - <_> - 2 14 2 1 2. - 0 - 3.4080960176652297e-005 - -0.1753176003694534 - 0.1322204023599625 - <_> - - <_> - - - - <_> - 16 2 4 13 -1. - <_> - 17 2 2 13 2. - 0 - -0.0176294595003128 - -0.5160853862762451 - 0.0253861900418997 - <_> - - <_> - - - - <_> - 0 7 1 4 -1. - <_> - 0 8 1 2 2. - 0 - -1.5446309698745608e-003 - -0.4142186045646668 - 0.0513300895690918 - <_> - - <_> - - - - <_> - 24 0 1 2 -1. - <_> - 24 1 1 1 2. - 0 - 1.1520429980009794e-003 - 0.0366159491240978 - -0.3692800998687744 - <_> - - <_> - - - - <_> - 0 5 2 4 -1. - <_> - 1 5 1 4 2. - 0 - -2.9612779617309570e-003 - 0.2446188032627106 - -0.0842714235186577 - -1.5267670154571533 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 1 8 4 -1. - <_> - 0 3 8 2 2. - 0 - -0.0141031695529819 - 0.2699790894985199 - -0.3928318023681641 - <_> - - <_> - - - - <_> - 15 11 10 4 -1. - <_> - 20 11 5 2 2. - <_> - 15 13 5 2 2. - 0 - 5.4714400321245193e-003 - -0.2269169986248016 - 0.2749052047729492 - <_> - - <_> - - - - <_> - 7 5 11 3 -1. - <_> - 7 6 11 1 3. - 0 - 0.0166354794055223 - -0.1547908037900925 - 0.3224202096462250 - <_> - - <_> - - - - <_> - 21 4 4 3 -1. - <_> - 21 4 2 3 2. - 0 - -8.4477178752422333e-003 - 0.3320780992507935 - -0.1249654963612557 - <_> - - <_> - - - - <_> - 0 5 4 1 -1. - <_> - 2 5 2 1 2. - 0 - -2.4904569145292044e-003 - 0.2900204956531525 - -0.1460298001766205 - <_> - - <_> - - - - <_> - 7 3 12 4 -1. - <_> - 7 4 12 2 2. - 0 - 0.0282104406505823 - -0.0831937119364738 - 0.4805397987365723 - <_> - - <_> - - - - <_> - 8 6 7 3 -1. - <_> - 8 7 7 1 3. - 0 - 9.3179903924465179e-003 - -0.1692426949739456 - 0.3482030928134918 - <_> - - <_> - - - - <_> - 16 0 9 14 -1. - <_> - 16 7 9 7 2. - 0 - -0.0579102896153927 - -0.5040398836135864 - 0.0840934887528419 - <_> - - <_> - - - - <_> - 0 0 24 6 -1. - <_> - 0 0 12 3 2. - <_> - 12 3 12 3 2. - 0 - 0.0882126465439796 - 0.0733099877834320 - -0.4883395135402679 - <_> - - <_> - - - - <_> - 23 13 2 1 -1. - <_> - 23 13 1 1 2. - 0 - 6.0974380176048726e-005 - -0.1594507992267609 - 0.1473277956247330 - <_> - - <_> - - - - <_> - 0 13 24 2 -1. - <_> - 0 13 12 1 2. - <_> - 12 14 12 1 2. - 0 - -0.0142063600942492 - -0.6365684866905212 - 0.0507153607904911 - <_> - - <_> - - - - <_> - 19 12 5 3 -1. - <_> - 19 13 5 1 3. - 0 - -7.7181900851428509e-003 - -0.6330028772354126 - 0.0328688994050026 - <_> - - <_> - - - - <_> - 9 7 7 4 -1. - <_> - 9 8 7 2 2. - 0 - 0.0120071703568101 - -0.1254525035619736 - 0.2893699109554291 - <_> - - <_> - - - - <_> - 14 0 4 7 -1. - <_> - 14 0 2 7 2. - 1 - 0.0707826167345047 - 0.0305656604468822 - -0.5666698217391968 - <_> - - <_> - - - - <_> - 11 0 7 4 -1. - <_> - 11 0 7 2 2. - 1 - -0.0504123307764530 - -0.5089793801307678 - 0.0710048824548721 - <_> - - <_> - - - - <_> - 9 4 14 2 -1. - <_> - 9 5 14 1 2. - 0 - 0.0220727995038033 - -0.1444841027259827 - 0.2781184911727905 - <_> - - <_> - - - - <_> - 3 2 15 4 -1. - <_> - 3 3 15 2 2. - 0 - 0.0147649403661489 - -0.1283989995718002 - 0.3290185928344727 - <_> - - <_> - - - - <_> - 19 12 5 3 -1. - <_> - 19 13 5 1 3. - 0 - 6.8206568248569965e-003 - 0.0654795467853546 - -0.5463265776634216 - <_> - - <_> - - - - <_> - 0 11 8 4 -1. - <_> - 0 11 4 2 2. - <_> - 4 13 4 2 2. - 0 - 2.0179790444672108e-003 - -0.2028342932462692 - 0.1679659038782120 - <_> - - <_> - - - - <_> - 7 9 11 6 -1. - <_> - 7 11 11 2 3. - 0 - 0.0250812191516161 - -0.1104943975806236 - 0.3191860020160675 - <_> - - <_> - - - - <_> - 0 11 7 4 -1. - <_> - 0 12 7 2 2. - 0 - 8.9391358196735382e-003 - 0.0734132081270218 - -0.5538399219512940 - <_> - - <_> - - - - <_> - 20 0 5 2 -1. - <_> - 20 1 5 1 2. - 0 - -4.6396959805861115e-004 - 0.1123031005263329 - -0.1697127074003220 - <_> - - <_> - - - - <_> - 5 10 3 2 -1. - <_> - 6 11 1 2 3. - 1 - -8.5602197796106339e-003 - -0.7347347736358643 - 0.0417169481515884 - <_> - - <_> - - - - <_> - 17 4 8 10 -1. - <_> - 21 4 4 5 2. - <_> - 17 9 4 5 2. - 0 - -0.0389347188174725 - 0.2292626947164536 - -0.0792299434542656 - <_> - - <_> - - - - <_> - 5 3 15 2 -1. - <_> - 5 4 15 1 2. - 0 - -0.0215415991842747 - 0.3007172048091888 - -0.1152340024709702 - <_> - - <_> - - - - <_> - 16 4 5 2 -1. - <_> - 16 5 5 1 2. - 0 - 4.9337721429765224e-003 - -0.1002838015556335 - 0.1348572969436646 - <_> - - <_> - - - - <_> - 1 0 22 10 -1. - <_> - 1 0 11 5 2. - <_> - 12 5 11 5 2. - 0 - 0.1615066975355148 - 0.0588171891868114 - -0.5656744837760925 - <_> - - <_> - - - - <_> - 20 0 5 2 -1. - <_> - 20 1 5 1 2. - 0 - -0.0123260198161006 - -0.2823328077793121 - 0.0187596306204796 - <_> - - <_> - - - - <_> - 0 0 5 2 -1. - <_> - 0 1 5 1 2. - 0 - 5.2987951785326004e-003 - 0.0524063482880592 - -0.5719032287597656 - <_> - - <_> - - - - <_> - 10 1 6 12 -1. - <_> - 13 1 3 6 2. - <_> - 10 7 3 6 2. - 0 - 0.0289043206721544 - 0.0477108694612980 - -0.4854584038257599 - <_> - - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - 0.0155697297304869 - 0.0493178516626358 - -0.5100051760673523 - <_> - - <_> - - - - <_> - 6 0 13 6 -1. - <_> - 6 2 13 2 3. - 0 - -0.0938120707869530 - 0.2564809024333954 - -0.1057069003582001 - <_> - - <_> - - - - <_> - 4 3 4 4 -1. - <_> - 3 4 4 2 2. - 1 - -0.0286933295428753 - 0.5247043967247009 - -0.0509502515196800 - <_> - - <_> - - - - <_> - 20 8 5 3 -1. - <_> - 20 9 5 1 3. - 0 - 7.2301640175282955e-003 - 0.0583653002977371 - -0.4894312024116516 - <_> - - <_> - - - - <_> - 7 13 2 2 -1. - <_> - 7 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - 8.2664839283097535e-005 - -0.1437218040227890 - 0.1820268929004669 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 17 13 1 1 2. - <_> - 16 14 1 1 2. - 0 - 1.5241750515997410e-003 - 0.0201267991214991 - -0.3884589970111847 - <_> - - <_> - - - - <_> - 7 13 2 2 -1. - <_> - 7 13 1 1 2. - <_> - 8 14 1 1 2. - 0 - -6.5512307628523558e-005 - 0.2280354052782059 - -0.1581206023693085 - <_> - - <_> - - - - <_> - 19 5 6 1 -1. - <_> - 21 5 2 1 3. - 0 - 2.4175599683076143e-003 - -0.0890450775623322 - 0.2839250862598419 - <_> - - <_> - - - - <_> - 0 8 6 6 -1. - <_> - 0 10 6 2 3. - 0 - 0.0343084894120693 - 0.0391304790973663 - -0.6263393163681030 - <_> - - <_> - - - - <_> - 6 8 13 4 -1. - <_> - 6 9 13 2 2. - 0 - 0.0127667998895049 - -0.0984294191002846 - 0.2857427895069122 - <_> - - <_> - - - - <_> - 3 10 8 1 -1. - <_> - 7 10 4 1 2. - 0 - -2.7450299821794033e-003 - 0.2090786993503571 - -0.1267945021390915 - <_> - - <_> - - - - <_> - 16 11 4 4 -1. - <_> - 17 11 2 4 2. - 0 - -7.0629850961267948e-003 - -0.4784719944000244 - 0.0229746792465448 - <_> - - <_> - - - - <_> - 5 6 15 2 -1. - <_> - 5 7 15 1 2. - 0 - 0.0109674101695418 - -0.1310741007328033 - 0.1712857037782669 - <_> - - <_> - - - - <_> - 3 1 20 10 -1. - <_> - 3 1 10 10 2. - 0 - -0.1530689001083374 - 0.2361073046922684 - -0.0965401679277420 - <_> - - <_> - - - - <_> - 2 4 3 3 -1. - <_> - 2 5 3 1 3. - 0 - 2.1676090545952320e-003 - -0.1028804033994675 - 0.2537584006786346 - <_> - - <_> - - - - <_> - 16 11 4 4 -1. - <_> - 17 11 2 4 2. - 0 - 0.0107051497325301 - 0.0160892698913813 - -0.5868526101112366 - <_> - - <_> - - - - <_> - 5 11 4 4 -1. - <_> - 6 11 2 4 2. - 0 - -6.1142919585108757e-003 - -0.6146798133850098 - 0.0344046317040920 - <_> - - <_> - - - - <_> - 17 4 8 10 -1. - <_> - 21 4 4 5 2. - <_> - 17 9 4 5 2. - 0 - -0.0160057693719864 - 0.0954133197665215 - -0.0657811686396599 - <_> - - <_> - - - - <_> - 0 8 5 3 -1. - <_> - 0 9 5 1 3. - 0 - 8.5541699081659317e-003 - 0.0425793603062630 - -0.5490341186523438 - <_> - - <_> - - - - <_> - 23 13 2 1 -1. - <_> - 23 13 1 1 2. - 0 - -5.5742941185599193e-005 - 0.1505846977233887 - -0.0978325977921486 - <_> - - <_> - - - - <_> - 0 13 2 1 -1. - <_> - 1 13 1 1 2. - 0 - 4.9888480134541169e-005 - -0.1522217988967896 - 0.1464709937572479 - <_> - - <_> - - - - <_> - 10 1 7 3 -1. - <_> - 10 2 7 1 3. - 0 - 9.3986131250858307e-003 - -0.0793018564581871 - 0.2222844958305359 - <_> - - <_> - - - - <_> - 0 3 8 12 -1. - <_> - 0 3 4 6 2. - <_> - 4 9 4 6 2. - 0 - -0.0445945896208286 - 0.3217073082923889 - -0.0712599530816078 - <_> - - <_> - - - - <_> - 6 0 16 11 -1. - <_> - 6 0 8 11 2. - 0 - 0.2763071060180664 - -0.0312894396483898 - 0.4636780917644501 - <_> - - <_> - - - - <_> - 2 0 21 3 -1. - <_> - 9 0 7 3 3. - 0 - -0.0459242798388004 - 0.2685551047325134 - -0.0946981832385063 - <_> - - <_> - - - - <_> - 23 1 2 12 -1. - <_> - 23 1 2 6 2. - 1 - 0.0328284502029419 - 0.0420088581740856 - -0.1909179985523224 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 5.8416211977601051e-003 - 0.0443820804357529 - -0.5017232894897461 - <_> - - <_> - - - - <_> - 15 0 6 3 -1. - <_> - 17 0 2 3 3. - 0 - 0.0253127701580524 - 7.6768198050558567e-003 - -0.4524691104888916 - <_> - - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 10 9 2 4 3. - 0 - -0.0206803791224957 - -0.7082331180572510 - 0.0277527105063200 - <_> - - <_> - - - - <_> - 20 5 5 6 -1. - <_> - 20 7 5 2 3. - 0 - 1.9456259906291962e-003 - -0.1725641041994095 - 0.0885240733623505 - <_> - - <_> - - - - <_> - 0 4 24 8 -1. - <_> - 0 4 12 4 2. - <_> - 12 8 12 4 2. - 0 - 0.1318278014659882 - 0.0378756709396839 - -0.5236573815345764 - <_> - - <_> - - - - <_> - 22 10 1 4 -1. - <_> - 21 11 1 2 2. - 1 - -4.8449821770191193e-003 - -0.3831801116466522 - 0.0295521095395088 - <_> - - <_> - - - - <_> - 7 0 11 3 -1. - <_> - 7 1 11 1 3. - 0 - 5.3295581601560116e-003 - -0.1172816008329392 - 0.1712217032909393 - <_> - - <_> - - - - <_> - 6 0 13 4 -1. - <_> - 6 1 13 2 2. - 0 - -0.0353284589946270 - 0.3731549978256226 - -0.0650273412466049 - -1.4507639408111572 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 11 11 4 -1. - <_> - 7 13 11 2 2. - 0 - 0.0136478496715426 - -0.2802368998527527 - 0.3575335144996643 - <_> - - <_> - - - - <_> - 21 3 4 12 -1. - <_> - 23 3 2 6 2. - <_> - 21 9 2 6 2. - 0 - 0.0123078199103475 - -0.1484645009040833 - 0.2714886069297791 - <_> - - <_> - - - - <_> - 2 4 21 6 -1. - <_> - 9 6 7 2 9. - 0 - 0.4659403860569000 - -0.0705008506774902 - 0.5868018865585327 - <_> - - <_> - - - - <_> - 23 3 2 10 -1. - <_> - 24 3 1 5 2. - <_> - 23 8 1 5 2. - 0 - 1.5693339519202709e-003 - -0.1150237023830414 - 0.1375536024570465 - <_> - - <_> - - - - <_> - 0 3 2 10 -1. - <_> - 0 3 1 5 2. - <_> - 1 8 1 5 2. - 0 - 2.5176738854497671e-003 - -0.1778890937566757 - 0.2172407060861588 - <_> - - <_> - - - - <_> - 24 10 1 4 -1. - <_> - 23 11 1 2 2. - 1 - 4.5299702323973179e-003 - 0.0458603501319885 - -0.5376703143119812 - <_> - - <_> - - - - <_> - 1 10 4 1 -1. - <_> - 2 11 2 1 2. - 1 - 4.0295510552823544e-003 - 0.0599071383476257 - -0.5803095102310181 - <_> - - <_> - - - - <_> - 8 10 9 4 -1. - <_> - 8 11 9 2 2. - 0 - 9.0281656011939049e-003 - -0.0889611616730690 - 0.3474006950855255 - <_> - - <_> - - - - <_> - 5 8 13 6 -1. - <_> - 5 11 13 3 2. - 0 - -0.0710994601249695 - 0.4003205001354218 - -0.0876752585172653 - <_> - - <_> - - - - <_> - 5 0 15 4 -1. - <_> - 5 2 15 2 2. - 0 - -0.0905078798532486 - 0.3202385008335114 - -0.1107280030846596 - <_> - - <_> - - - - <_> - 1 0 22 15 -1. - <_> - 12 0 11 15 2. - 0 - 0.3949914872646332 - -0.0544822700321674 - 0.4376561045646668 - <_> - - <_> - - - - <_> - 10 14 8 1 -1. - <_> - 12 14 4 1 2. - 0 - 6.0021281242370605e-003 - 0.0412968583405018 - -0.6277515888214111 - <_> - - <_> - - - - <_> - 1 3 8 4 -1. - <_> - 1 4 8 2 2. - 0 - -0.0126753300428391 - 0.1864306032657623 - -0.1586595028638840 - <_> - - <_> - - - - <_> - 15 13 1 2 -1. - <_> - 15 14 1 1 2. - 0 - 5.2523188060149550e-004 - -0.0737809464335442 - 0.1131825000047684 - <_> - - <_> - - - - <_> - 5 2 15 6 -1. - <_> - 5 4 15 2 3. - 0 - 0.1519853025674820 - -0.0698502063751221 - 0.5526459217071533 - <_> - - <_> - - - - <_> - 23 12 2 1 -1. - <_> - 23 12 1 1 2. - 1 - -5.9174448251724243e-003 - -0.4224376976490021 - 0.0234292708337307 - <_> - - <_> - - - - <_> - 2 12 1 2 -1. - <_> - 2 12 1 1 2. - 1 - 5.1085697486996651e-004 - -0.1782114058732987 - 0.1747542023658752 - <_> - - <_> - - - - <_> - 8 13 9 2 -1. - <_> - 11 13 3 2 3. - 0 - -0.0286266505718231 - -0.7806789875030518 - 0.0430335216224194 - <_> - - <_> - - - - <_> - 8 0 8 2 -1. - <_> - 8 1 8 1 2. - 0 - 3.2388539984822273e-003 - -0.1174874976277351 - 0.2301342934370041 - <_> - - <_> - - - - <_> - 20 12 4 3 -1. - <_> - 20 13 4 1 3. - 0 - -6.8310899659991264e-003 - -0.5170273780822754 - 0.0224770605564117 - <_> - - <_> - - - - <_> - 3 0 18 10 -1. - <_> - 3 0 9 5 2. - <_> - 12 5 9 5 2. - 0 - -0.1381812989711762 - -0.6718307137489319 - 0.0339458398520947 - <_> - - <_> - - - - <_> - 10 12 6 3 -1. - <_> - 12 12 2 3 3. - 0 - 0.0129029303789139 - 0.0190411508083344 - -0.4739249050617218 - <_> - - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 2 1 4 2. - 0 - 6.3398052006959915e-003 - 0.0412811301648617 - -0.5821130871772766 - <_> - - <_> - - - - <_> - 22 5 3 4 -1. - <_> - 22 6 3 2 2. - 0 - 8.4067512943875045e-005 - -0.2301639020442963 - 0.1240853965282440 - <_> - - <_> - - - - <_> - 0 5 4 4 -1. - <_> - 0 6 4 2 2. - 0 - 0.0172388590872288 - 0.0539665818214417 - -0.5818564891815186 - <_> - - <_> - - - - <_> - 6 0 14 10 -1. - <_> - 13 0 7 5 2. - <_> - 6 5 7 5 2. - 0 - -0.0786773264408112 - -0.4061115086078644 - 0.0569235086441040 - <_> - - <_> - - - - <_> - 1 12 4 3 -1. - <_> - 1 13 4 1 3. - 0 - 5.5859591811895370e-003 - 0.0368424393236637 - -0.5646867752075195 - <_> - - <_> - - - - <_> - 20 7 2 2 -1. - <_> - 21 7 1 1 2. - <_> - 20 8 1 1 2. - 0 - -6.1322399415075779e-004 - 0.1785047054290772 - -0.0668883100152016 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - 7.9400849062949419e-004 - -0.0783978328108788 - 0.3054557144641876 - <_> - - <_> - - - - <_> - 22 6 3 4 -1. - <_> - 22 7 3 2 2. - 0 - 0.0128271998837590 - 0.0404374599456787 - -0.6479570865631104 - <_> - - <_> - - - - <_> - 9 6 7 3 -1. - <_> - 9 7 7 1 3. - 0 - 0.0119779799133539 - -0.0993791595101357 - 0.2267276048660278 - <_> - - <_> - - - - <_> - 11 6 4 2 -1. - <_> - 11 7 4 1 2. - 0 - -4.9378769472241402e-003 - 0.2706328034400940 - -0.0839221030473709 - <_> - - <_> - - - - <_> - 0 6 5 4 -1. - <_> - 0 7 5 2 2. - 0 - 0.0203377306461334 - 0.0400571115314960 - -0.6170961260795593 - <_> - - <_> - - - - <_> - 5 3 15 6 -1. - <_> - 5 5 15 2 3. - 0 - -0.1582631021738052 - 0.3718011081218720 - -0.0776448771357536 - <_> - - <_> - - - - <_> - 4 4 5 2 -1. - <_> - 4 5 5 1 2. - 0 - 4.5150578953325748e-003 - -0.1424572020769119 - 0.1946897059679031 - <_> - - <_> - - - - <_> - 11 12 6 3 -1. - <_> - 13 12 2 3 3. - 0 - -0.0179421696811914 - -0.7258480787277222 - 0.0292347799986601 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 5.2153151482343674e-003 - 0.0460041500627995 - -0.4536756873130798 - <_> - - <_> - - - - <_> - 7 11 12 2 -1. - <_> - 11 11 4 2 3. - 0 - -7.7863838523626328e-003 - 0.1746426969766617 - -0.1098980978131294 - <_> - - <_> - - - - <_> - 0 8 4 4 -1. - <_> - 0 9 4 2 2. - 0 - 9.4133447855710983e-003 - 0.0346476286649704 - -0.5983666181564331 - <_> - - <_> - - - - <_> - 8 7 9 3 -1. - <_> - 8 8 9 1 3. - 0 - 7.6218741014599800e-003 - -0.1057026013731957 - 0.2037336975336075 - <_> - - <_> - - - - <_> - 8 8 9 6 -1. - <_> - 8 10 9 2 3. - 0 - 0.0216018799692392 - -0.0909303426742554 - 0.2887038886547089 - <_> - - <_> - - - - <_> - 20 11 5 4 -1. - <_> - 20 12 5 2 2. - 0 - -0.0118230897933245 - -0.6303614974021912 - 0.0240826196968555 - <_> - - <_> - - - - <_> - 7 5 8 3 -1. - <_> - 9 5 4 3 2. - 0 - -0.0202329792082310 - -0.7420278787612915 - 0.0235212203115225 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - 6.4510147785767913e-004 - -0.0552557893097401 - 0.1650166064500809 - <_> - - <_> - - - - <_> - 0 11 5 4 -1. - <_> - 0 12 5 2 2. - 0 - -8.1876022741198540e-003 - -0.5770931839942932 - 0.0352346412837505 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -4.5044958824291825e-004 - 0.1859780997037888 - -0.0824367776513100 - <_> - - <_> - - - - <_> - 5 9 6 6 -1. - <_> - 7 9 2 6 3. - 0 - -0.0273097790777683 - -0.7204548716545105 - 0.0276838503777981 - <_> - - <_> - - - - <_> - 14 10 10 4 -1. - <_> - 19 10 5 2 2. - <_> - 14 12 5 2 2. - 0 - 7.3051019571721554e-003 - -0.0758159905672073 - 0.1228180006146431 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - 7.2118180105462670e-004 - -0.0847066268324852 - 0.2212305068969727 - <_> - - <_> - - - - <_> - 16 6 3 2 -1. - <_> - 17 6 1 2 3. - 0 - -5.5794708896428347e-004 - 0.0922004431486130 - -0.0512673109769821 - <_> - - <_> - - - - <_> - 6 6 3 2 -1. - <_> - 7 6 1 2 3. - 0 - -1.2906070332974195e-003 - 0.2364850938320160 - -0.0856367424130440 - <_> - - <_> - - - - <_> - 13 3 8 4 -1. - <_> - 12 4 8 2 2. - 1 - -0.0234409496188164 - -0.3417592048645020 - 0.0303556900471449 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 6.7003733420278877e-005 - -0.1778312027454376 - 0.1098366007208824 - <_> - - <_> - - - - <_> - 21 0 2 1 -1. - <_> - 21 0 1 1 2. - 1 - -2.0913260523229837e-003 - -0.3296548128128052 - 0.0488219298422337 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 5.2883368916809559e-003 - 0.0476020798087120 - -0.4229690134525299 - <_> - - <_> - - - - <_> - 13 1 8 6 -1. - <_> - 11 3 8 2 3. - 1 - 0.1046722009778023 - 0.0145577099174261 - -0.5163959860801697 - <_> - - <_> - - - - <_> - 12 3 4 8 -1. - <_> - 13 4 2 8 2. - 1 - 0.0410936884582043 - 0.0255694594234228 - -0.6734575033187866 - <_> - - <_> - - - - <_> - 3 0 20 15 -1. - <_> - 3 0 10 15 2. - 0 - 0.4545299112796783 - -0.0473212711513042 - 0.4647259116172791 - <_> - - <_> - - - - <_> - 9 0 7 3 -1. - <_> - 9 1 7 1 3. - 0 - -4.4200271368026733e-003 - 0.2172905951738358 - -0.0805237367749214 - <_> - - <_> - - - - <_> - 12 1 5 2 -1. - <_> - 12 2 5 1 2. - 0 - -3.3253689762204885e-003 - 0.1196364015340805 - -0.0847371667623520 - <_> - - <_> - - - - <_> - 6 1 13 3 -1. - <_> - 6 2 13 1 3. - 0 - 0.0152236903086305 - -0.0892436280846596 - 0.2284111976623535 - <_> - - <_> - - - - <_> - 14 3 10 12 -1. - <_> - 19 3 5 6 2. - <_> - 14 9 5 6 2. - 0 - -0.0312239099293947 - 0.1464260965585709 - -0.1012998968362808 - <_> - - <_> - - - - <_> - 1 6 21 6 -1. - <_> - 8 6 7 6 3. - 0 - -0.0729675367474556 - 0.1977909952402115 - -0.0998045280575752 - <_> - - <_> - - - - <_> - 12 0 10 12 -1. - <_> - 12 0 5 12 2. - 0 - 0.0434687100350857 - -0.0738932862877846 - 0.1571179032325745 - <_> - - <_> - - - - <_> - 7 8 11 3 -1. - <_> - 7 9 11 1 3. - 0 - 7.7427257783710957e-003 - -0.0907922536134720 - 0.2449675947427750 - <_> - - <_> - - - - <_> - 2 5 22 10 -1. - <_> - 2 5 11 10 2. - 0 - -0.0834884494543076 - 0.1732859015464783 - -0.1288128942251205 - <_> - - <_> - - - - <_> - 5 4 15 4 -1. - <_> - 5 6 15 2 2. - 0 - 0.0421115085482597 - -0.1475321054458618 - 0.1373448967933655 - <_> - - <_> - - - - <_> - 7 1 15 6 -1. - <_> - 7 3 15 2 3. - 0 - 0.0966737270355225 - -0.0551961399614811 - 0.3563303947448731 - <_> - - <_> - - - - <_> - 0 8 2 6 -1. - <_> - 0 10 2 2 3. - 0 - -8.8993981480598450e-003 - -0.5261930823326111 - 0.0388906002044678 - <_> - - <_> - - - - <_> - 5 1 15 4 -1. - <_> - 5 2 15 2 2. - 0 - -0.0238508302718401 - 0.1924559026956558 - -0.1050153970718384 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -7.4902130290865898e-004 - 0.2476740926504135 - -0.0738597288727760 - <_> - - <_> - - - - <_> - 11 9 9 2 -1. - <_> - 14 9 3 2 3. - 0 - -0.0230488497763872 - -0.5220348238945007 - 0.0295383799821138 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 5.7920900871977210e-004 - -0.0807055011391640 - 0.2493984997272492 - <_> - - <_> - - - - <_> - 17 10 8 4 -1. - <_> - 17 11 8 2 2. - 0 - -0.0254354309290648 - -0.6520490050315857 - 0.0163280703127384 - <_> - - <_> - - - - <_> - 0 10 8 4 -1. - <_> - 0 11 8 2 2. - 0 - 0.0176391601562500 - 0.0246949195861816 - -0.6850522756576538 - <_> - - <_> - - - - <_> - 16 11 6 4 -1. - <_> - 18 11 2 4 3. - 0 - 0.0205357391387224 - 0.0165182203054428 - -0.4285225868225098 - <_> - - <_> - - - - <_> - 0 13 24 1 -1. - <_> - 6 13 12 1 2. - 0 - 0.0111132804304361 - -0.0871591791510582 - 0.2062001973390579 - -1.3936280012130737 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 9 10 6 -1. - <_> - 0 9 5 3 2. - <_> - 5 12 5 3 2. - 0 - 0.0140618495643139 - -0.2737283110618591 - 0.4017829895019531 - <_> - - <_> - - - - <_> - 13 5 10 10 -1. - <_> - 18 5 5 5 2. - <_> - 13 10 5 5 2. - 0 - -0.0334245301783085 - 0.3433864116668701 - -0.1524070948362351 - <_> - - <_> - - - - <_> - 0 4 4 2 -1. - <_> - 2 4 2 2 2. - 0 - -3.3982729073613882e-003 - 0.3046114146709442 - -0.2162856012582779 - <_> - - <_> - - - - <_> - 13 5 12 10 -1. - <_> - 19 5 6 5 2. - <_> - 13 10 6 5 2. - 0 - 0.0673939511179924 - -0.0539562106132507 - 0.3304964005947113 - <_> - - <_> - - - - <_> - 0 5 12 10 -1. - <_> - 0 5 6 5 2. - <_> - 6 10 6 5 2. - 0 - -0.0515447482466698 - 0.3804036974906921 - -0.1334261000156403 - <_> - - <_> - - - - <_> - 11 11 3 4 -1. - <_> - 11 13 3 2 2. - 0 - 3.6630779504776001e-003 - -0.1760202944278717 - 0.2139966934919357 - <_> - - <_> - - - - <_> - 5 8 2 5 -1. - <_> - 5 8 1 5 2. - 1 - 7.8836623579263687e-003 - 0.0570616200566292 - -0.5150743126869202 - <_> - - <_> - - - - <_> - 4 14 18 1 -1. - <_> - 4 14 9 1 2. - 0 - -8.9480048045516014e-003 - 0.2230996936559677 - -0.1190536990761757 - <_> - - <_> - - - - <_> - 1 0 1 6 -1. - <_> - 1 3 1 3 2. - 0 - -5.5760587565600872e-004 - 0.0999659672379494 - -0.2558285892009735 - <_> - - <_> - - - - <_> - 8 9 9 4 -1. - <_> - 8 10 9 2 2. - 0 - 9.5389392226934433e-003 - -0.0655315071344376 - 0.3246265947818756 - <_> - - <_> - - - - <_> - 0 9 5 4 -1. - <_> - 0 10 5 2 2. - 0 - 7.7904132194817066e-003 - 0.0450260303914547 - -0.6068859100341797 - <_> - - <_> - - - - <_> - 19 5 6 2 -1. - <_> - 21 5 2 2 3. - 0 - 4.0692770853638649e-003 - -0.0624743513762951 - 0.1570695042610169 - <_> - - <_> - - - - <_> - 0 5 6 2 -1. - <_> - 2 5 2 2 3. - 0 - 3.1110940035432577e-003 - -0.0744680091738701 - 0.2600801885128021 - <_> - - <_> - - - - <_> - 13 9 6 3 -1. - <_> - 15 9 2 3 3. - 0 - 0.0156514495611191 - 0.0255663506686687 - -0.5172523260116577 - <_> - - <_> - - - - <_> - 2 3 21 9 -1. - <_> - 9 3 7 9 3. - 0 - 0.2044613063335419 - -0.0763430967926979 - 0.3323906958103180 - <_> - - <_> - - - - <_> - 11 9 10 2 -1. - <_> - 11 9 5 2 2. - 0 - -0.0101691596210003 - 0.1606681048870087 - -0.1091597974300385 - <_> - - <_> - - - - <_> - 0 0 24 14 -1. - <_> - 0 0 12 7 2. - <_> - 12 7 12 7 2. - 0 - 0.1894780993461609 - 0.0538599416613579 - -0.5398759841918945 - <_> - - <_> - - - - <_> - 5 2 15 6 -1. - <_> - 5 4 15 2 3. - 0 - -0.1479240059852600 - 0.2385465949773789 - -0.1132820993661881 - <_> - - <_> - - - - <_> - 2 0 16 11 -1. - <_> - 10 0 8 11 2. - 0 - -0.1483031064271927 - 0.3646511137485504 - -0.0753156766295433 - <_> - - <_> - - - - <_> - 5 0 15 6 -1. - <_> - 5 2 15 2 3. - 0 - -0.1325532943010330 - 0.2919555902481079 - -0.0949441567063332 - <_> - - <_> - - - - <_> - 10 5 5 4 -1. - <_> - 10 6 5 2 2. - 0 - -0.0163901709020138 - 0.3920511901378632 - -0.0685021281242371 - <_> - - <_> - - - - <_> - 23 0 2 3 -1. - <_> - 23 1 2 1 3. - 0 - -6.3240979798138142e-003 - -0.6633772253990173 - 0.0337768010795116 - <_> - - <_> - - - - <_> - 0 0 6 3 -1. - <_> - 0 1 6 1 3. - 0 - 0.0147409504279494 - 0.0431423708796501 - -0.5016931891441345 - <_> - - <_> - - - - <_> - 10 5 15 2 -1. - <_> - 10 6 15 1 2. - 0 - 0.0171020403504372 - -0.1739968061447144 - 0.2036074995994568 - <_> - - <_> - - - - <_> - 0 4 6 4 -1. - <_> - 0 4 3 2 2. - <_> - 3 6 3 2 2. - 0 - -7.5232060626149178e-003 - 0.2614240050315857 - -0.0894730314612389 - <_> - - <_> - - - - <_> - 21 7 2 4 -1. - <_> - 20 8 2 2 2. - 1 - 8.0899456515908241e-003 - 0.0491316393017769 - -0.3869245946407318 - <_> - - <_> - - - - <_> - 4 7 4 2 -1. - <_> - 5 8 2 2 2. - 1 - -0.0111914901062846 - -0.7151393890380859 - 0.0292793400585651 - <_> - - <_> - - - - <_> - 24 13 1 2 -1. - <_> - 24 14 1 1 2. - 0 - -6.4855492382775992e-005 - 0.1147895976901054 - -0.1195824965834618 - <_> - - <_> - - - - <_> - 2 0 4 15 -1. - <_> - 3 0 2 15 2. - 0 - 0.0263162907212973 - 0.0260859299451113 - -0.8071029186248779 - <_> - - <_> - - - - <_> - 21 0 4 1 -1. - <_> - 22 1 2 1 2. - 1 - -0.0132494196295738 - -0.3211443126201630 - 7.5486088171601295e-003 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - 6.2180599197745323e-003 - 0.0555592402815819 - -0.4065248966217041 - <_> - - <_> - - - - <_> - 1 1 24 14 -1. - <_> - 13 1 12 7 2. - <_> - 1 8 12 7 2. - 0 - 0.1724980026483536 - 0.0407503582537174 - -0.5056337714195252 - <_> - - <_> - - - - <_> - 6 9 6 6 -1. - <_> - 8 9 2 6 3. - 0 - -0.0216798391193151 - -0.6235452890396118 - 0.0264780297875404 - <_> - - <_> - - - - <_> - 5 3 15 4 -1. - <_> - 10 3 5 4 3. - 0 - 0.0167031493037939 - -0.1379484981298447 - 0.1374935954809189 - <_> - - <_> - - - - <_> - 0 0 20 10 -1. - <_> - 5 0 10 10 2. - 0 - -0.0904578119516373 - 0.2364515066146851 - -0.0822857320308685 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - -0.0319220200181007 - 0.2578540146350861 - -0.0472433306276798 - <_> - - <_> - - - - <_> - 3 2 7 2 -1. - <_> - 3 3 7 1 2. - 0 - -0.0107858600094914 - 0.1915684044361115 - -0.1092626005411148 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - 0.0153568601235747 - -0.0915980264544487 - 0.1492947041988373 - <_> - - <_> - - - - <_> - 0 3 6 12 -1. - <_> - 0 3 3 6 2. - <_> - 3 9 3 6 2. - 0 - -0.0298386197537184 - 0.3693186044692993 - -0.0698615685105324 - <_> - - <_> - - - - <_> - 19 14 6 1 -1. - <_> - 19 14 3 1 2. - 0 - 1.5088700456544757e-003 - -0.0684053674340248 - 0.1167493984103203 - <_> - - <_> - - - - <_> - 4 2 6 13 -1. - <_> - 6 2 2 13 3. - 0 - -0.0391593612730503 - -0.5139203071594238 - 0.0376962982118130 - <_> - - <_> - - - - <_> - 17 14 8 1 -1. - <_> - 19 14 4 1 2. - 0 - 9.6957627683877945e-003 - 0.0178152993321419 - -0.4685910940170288 - <_> - - <_> - - - - <_> - 0 14 8 1 -1. - <_> - 2 14 4 1 2. - 0 - 7.2683161124587059e-004 - -0.1310783028602600 - 0.1574900001287460 - <_> - - <_> - - - - <_> - 23 11 2 2 -1. - <_> - 23 11 2 1 2. - 1 - 3.9894571527838707e-003 - 0.0452235005795956 - -0.4237715899944305 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 1 2 2. - 1 - -5.1600970327854156e-003 - -0.5150998830795288 - 0.0348056405782700 - <_> - - <_> - - - - <_> - 8 4 9 4 -1. - <_> - 8 5 9 2 2. - 0 - -0.0237389300018549 - 0.2213699966669083 - -0.0842292308807373 - <_> - - <_> - - - - <_> - 8 4 9 3 -1. - <_> - 8 5 9 1 3. - 0 - 0.0145637700334191 - -0.0898087024688721 - 0.2186468988656998 - <_> - - <_> - - - - <_> - 22 6 2 4 -1. - <_> - 23 6 1 2 2. - <_> - 22 8 1 2 2. - 0 - 7.2849658317863941e-004 - -0.0709035396575928 - 0.1204996034502983 - <_> - - <_> - - - - <_> - 7 3 6 8 -1. - <_> - 9 3 2 8 3. - 0 - -0.0311498604714870 - -0.6067348122596741 - 0.0294798705726862 - <_> - - <_> - - - - <_> - 22 4 3 4 -1. - <_> - 22 5 3 2 2. - 0 - 0.0167685598134995 - 0.0236525908112526 - -0.4164066910743713 - <_> - - <_> - - - - <_> - 3 9 4 2 -1. - <_> - 4 10 2 2 2. - 1 - -8.9033348485827446e-003 - -0.5536022186279297 - 0.0302125699818134 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 5.3961132653057575e-004 - -0.0588473901152611 - 0.1531303972005844 - <_> - - <_> - - - - <_> - 9 11 6 1 -1. - <_> - 11 11 2 1 3. - 0 - -8.3886012434959412e-003 - -0.7052780985832214 - 0.0250979401171207 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -3.4085000515915453e-004 - 0.1771869063377380 - -0.1048467978835106 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - 6.1828009784221649e-003 - 0.0330388285219669 - -0.4948574900627136 - <_> - - <_> - - - - <_> - 20 5 5 6 -1. - <_> - 20 7 5 2 3. - 0 - 8.2702568033710122e-004 - -0.1844830960035324 - 0.0777885988354683 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -6.0980831040069461e-004 - 0.1959578990936279 - -0.0837520435452461 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 1.2273030006326735e-004 - -0.0814708098769188 - 0.1209300011396408 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 4.6565610682591796e-004 - -0.0953319519758224 - 0.2288299947977066 - <_> - - <_> - - - - <_> - 15 0 4 9 -1. - <_> - 16 0 2 9 2. - 0 - -0.0216477997601032 - -0.6933805942535400 - 0.0170615408569574 - <_> - - <_> - - - - <_> - 5 1 14 14 -1. - <_> - 5 1 7 7 2. - <_> - 12 8 7 7 2. - 0 - 0.0595006607472897 - 0.0526031702756882 - -0.2782197892665863 - <_> - - <_> - - - - <_> - 15 0 4 9 -1. - <_> - 16 0 2 9 2. - 0 - 0.0253651998937130 - 8.9954538270831108e-003 - -0.6383489966392517 - <_> - - <_> - - - - <_> - 0 7 5 3 -1. - <_> - 0 8 5 1 3. - 0 - -3.9667091332376003e-003 - -0.3175272047519684 - 0.0470112897455692 - <_> - - <_> - - - - <_> - 21 2 3 4 -1. - <_> - 22 3 1 4 3. - 1 - 8.2784779369831085e-003 - -0.0544440597295761 - 0.2219938933849335 - <_> - - <_> - - - - <_> - 6 0 4 15 -1. - <_> - 7 0 2 15 2. - 0 - -0.0221254508942366 - -0.6738150715827942 - 0.0225456394255161 - <_> - - <_> - - - - <_> - 21 2 3 4 -1. - <_> - 22 3 1 4 3. - 1 - -0.0180159192532301 - 0.1972057968378067 - -0.0419279783964157 - <_> - - <_> - - - - <_> - 4 2 4 3 -1. - <_> - 3 3 4 1 3. - 1 - 8.4426235407590866e-003 - -0.0605471916496754 - 0.2649214863777161 - <_> - - <_> - - - - <_> - 13 5 3 7 -1. - <_> - 14 6 1 7 3. - 1 - -0.0325668416917324 - -0.7107285857200623 - 0.0118406098335981 - <_> - - <_> - - - - <_> - 4 10 15 1 -1. - <_> - 9 10 5 1 3. - 0 - -4.7655492089688778e-003 - 0.1384397000074387 - -0.1150531992316246 - <_> - - <_> - - - - <_> - 12 6 10 9 -1. - <_> - 12 6 5 9 2. - 0 - 0.0569362901151180 - -0.0613397099077702 - 0.2665694057941437 - <_> - - <_> - - - - <_> - 1 1 22 14 -1. - <_> - 12 1 11 14 2. - 0 - 0.1374146044254303 - -0.1139679029583931 - 0.1789363026618958 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 11 9 3 1 2. - 0 - 3.4123009536415339e-003 - -0.0668940767645836 - 0.2595616877079010 - <_> - - <_> - - - - <_> - 2 5 11 2 -1. - <_> - 2 6 11 1 2. - 0 - 0.0116290198639035 - -0.1346206963062286 - 0.1518495976924896 - -1.3217060565948486 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 1 10 4 -1. - <_> - 3 2 10 2 2. - 1 - -0.0302658006548882 - 0.3809668123722076 - -0.1337769925594330 - <_> - - <_> - - - - <_> - 5 1 15 6 -1. - <_> - 5 3 15 2 3. - 0 - -0.1888993978500366 - 0.3472220003604889 - -0.1143490970134735 - <_> - - <_> - - - - <_> - 0 9 6 6 -1. - <_> - 0 9 3 3 2. - <_> - 3 12 3 3 2. - 0 - 4.4756601564586163e-003 - -0.1779001951217651 - 0.1983720064163208 - <_> - - <_> - - - - <_> - 19 3 5 2 -1. - <_> - 19 4 5 1 2. - 0 - -9.2559102922677994e-003 - 0.2553296089172363 - -0.0956856831908226 - <_> - - <_> - - - - <_> - 2 10 14 4 -1. - <_> - 2 10 7 2 2. - <_> - 9 12 7 2 2. - 0 - 0.0103751895949245 - -0.1290100961923599 - 0.2047273963689804 - <_> - - <_> - - - - <_> - 1 3 24 8 -1. - <_> - 9 3 8 8 3. - 0 - 0.2527360022068024 - -0.0779134780168533 - 0.3413710892200470 - <_> - - <_> - - - - <_> - 0 8 2 6 -1. - <_> - 0 10 2 2 3. - 0 - 7.9952310770750046e-003 - 0.1191667988896370 - -0.4138369858264923 - <_> - - <_> - - - - <_> - 23 14 2 1 -1. - <_> - 23 14 1 1 2. - 0 - 6.6510503529570997e-005 - -0.2305306047201157 - 0.1328932046890259 - <_> - - <_> - - - - <_> - 0 4 6 4 -1. - <_> - 0 4 3 2 2. - <_> - 3 6 3 2 2. - 0 - 0.0104297399520874 - -0.0622061118483543 - 0.2935121059417725 - <_> - - <_> - - - - <_> - 3 13 21 1 -1. - <_> - 10 13 7 1 3. - 0 - -9.4513092190027237e-003 - 0.1671503931283951 - -0.1161310002207756 - <_> - - <_> - - - - <_> - 0 0 24 14 -1. - <_> - 0 0 12 7 2. - <_> - 12 7 12 7 2. - 0 - -0.1386305987834930 - -0.4514685869216919 - 0.0725729763507843 - <_> - - <_> - - - - <_> - 24 0 1 10 -1. - <_> - 24 5 1 5 2. - 0 - -0.0154232997447252 - -0.4277118146419525 - 0.0248409193009138 - <_> - - <_> - - - - <_> - 4 11 2 2 -1. - <_> - 4 11 1 2 2. - 1 - -6.5782992169260979e-003 - -0.6540787816047669 - 0.0402618311345577 - <_> - - <_> - - - - <_> - 23 14 2 1 -1. - <_> - 23 14 1 1 2. - 0 - -6.8917557655368000e-005 - 0.2068260014057159 - -0.1195247992873192 - <_> - - <_> - - - - <_> - 0 14 2 1 -1. - <_> - 1 14 1 1 2. - 0 - 7.1416288847103715e-005 - -0.1625899970531464 - 0.1518989056348801 - <_> - - <_> - - - - <_> - 7 2 11 6 -1. - <_> - 7 4 11 2 3. - 0 - 0.1354866027832031 - -0.0504554286599159 - 0.4712490141391754 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 2 1 2 2. - 1 - 1.1286230292171240e-003 - -0.1934940963983536 - 0.1492028981447220 - <_> - - <_> - - - - <_> - 24 0 1 10 -1. - <_> - 24 5 1 5 2. - 0 - 0.0376871302723885 - -6.5130472648888826e-004 - -0.5566216707229614 - <_> - - <_> - - - - <_> - 0 0 1 10 -1. - <_> - 0 5 1 5 2. - 0 - -0.0177724994719028 - -0.5733047127723694 - 0.0462512709200382 - <_> - - <_> - - - - <_> - 12 11 6 2 -1. - <_> - 14 11 2 2 3. - 0 - -0.0141524598002434 - -0.7905998826026917 - 0.0153570203110576 - <_> - - <_> - - - - <_> - 2 0 20 2 -1. - <_> - 7 0 10 2 2. - 0 - -0.0194474104791880 - 0.2123239040374756 - -0.1021943986415863 - <_> - - <_> - - - - <_> - 10 0 10 4 -1. - <_> - 10 0 5 4 2. - 0 - 0.0129150198772550 - -0.0788644626736641 - 0.1457864940166473 - <_> - - <_> - - - - <_> - 0 0 20 1 -1. - <_> - 10 0 10 1 2. - 0 - 7.7283121645450592e-003 - -0.1338106989860535 - 0.2055318057537079 - <_> - - <_> - - - - <_> - 8 4 10 3 -1. - <_> - 8 5 10 1 3. - 0 - -0.0264210291206837 - 0.2729040980339050 - -0.0841038301587105 - <_> - - <_> - - - - <_> - 9 6 7 6 -1. - <_> - 9 8 7 2 3. - 0 - -0.0216425806283951 - 0.2165616005659103 - -0.0997976064682007 - <_> - - <_> - - - - <_> - 8 5 9 3 -1. - <_> - 8 6 9 1 3. - 0 - -0.0186041705310345 - 0.3167817890644074 - -0.0684646219015121 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 5 1 1 1 3. - 1 - 7.9184472560882568e-003 - 0.0389325916767120 - -0.5849621891975403 - <_> - - <_> - - - - <_> - 24 0 1 4 -1. - <_> - 24 2 1 2 2. - 0 - -9.0868779807351530e-005 - 0.1183537989854813 - -0.2693997025489807 - <_> - - <_> - - - - <_> - 9 10 2 1 -1. - <_> - 10 10 1 1 2. - 0 - -6.3271610997617245e-005 - 0.1483621001243591 - -0.1414014995098114 - <_> - - <_> - - - - <_> - 22 10 1 4 -1. - <_> - 21 11 1 2 2. - 1 - 3.0123859178274870e-003 - 0.0475597009062767 - -0.3168076872825623 - <_> - - <_> - - - - <_> - 4 0 6 5 -1. - <_> - 6 0 2 5 3. - 0 - 0.0202028602361679 - 0.0363369397819042 - -0.4958786964416504 - <_> - - <_> - - - - <_> - 17 3 8 12 -1. - <_> - 21 3 4 6 2. - <_> - 17 9 4 6 2. - 0 - 0.0681129470467567 - -0.0636018067598343 - 0.3745648860931397 - <_> - - <_> - - - - <_> - 0 3 8 12 -1. - <_> - 0 3 4 6 2. - <_> - 4 9 4 6 2. - 0 - -0.0613449215888977 - 0.3703984022140503 - -0.0626903176307678 - <_> - - <_> - - - - <_> - 10 3 6 10 -1. - <_> - 13 3 3 5 2. - <_> - 10 8 3 5 2. - 0 - -0.0239223092794418 - -0.3475331962108612 - 0.0568292401731014 - <_> - - <_> - - - - <_> - 3 10 4 1 -1. - <_> - 4 11 2 1 2. - 1 - 4.4279401190578938e-003 - 0.0318974405527115 - -0.5085908770561218 - <_> - - <_> - - - - <_> - 16 2 9 4 -1. - <_> - 16 2 9 2 2. - 1 - -0.0923664569854736 - -0.4889659881591797 - 9.9938698112964630e-003 - <_> - - <_> - - - - <_> - 9 2 4 9 -1. - <_> - 9 2 2 9 2. - 1 - -3.1878310255706310e-003 - 0.0857494324445724 - -0.2382344007492065 - <_> - - <_> - - - - <_> - 20 9 3 3 -1. - <_> - 20 10 3 1 3. - 0 - 6.2605291604995728e-003 - 0.0244128108024597 - -0.5500137209892273 - <_> - - <_> - - - - <_> - 6 1 13 4 -1. - <_> - 6 2 13 2 2. - 0 - 0.0217170491814613 - -0.0847987011075020 - 0.2182479947805405 - <_> - - <_> - - - - <_> - 10 4 5 4 -1. - <_> - 10 5 5 2 2. - 0 - 0.0102959601208568 - -0.1032914966344833 - 0.1945870965719223 - <_> - - <_> - - - - <_> - 0 5 3 3 -1. - <_> - 0 6 3 1 3. - 0 - 0.0121496301144362 - 0.0322238989174366 - -0.5932865738868713 - <_> - - <_> - - - - <_> - 21 5 4 4 -1. - <_> - 21 6 4 2 2. - 0 - 0.0191168300807476 - 0.0309407506138086 - -0.4538871943950653 - <_> - - <_> - - - - <_> - 0 5 4 4 -1. - <_> - 0 6 4 2 2. - 0 - 7.1067700628191233e-004 - -0.1545806974172592 - 0.1262297928333283 - <_> - - <_> - - - - <_> - 8 9 9 6 -1. - <_> - 8 11 9 2 3. - 0 - -0.0294274203479290 - 0.2070481926202774 - -0.0861818864941597 - <_> - - <_> - - - - <_> - 4 11 3 1 -1. - <_> - 5 12 1 1 3. - 1 - -3.7067469675093889e-003 - -0.5155926942825317 - 0.0383589081466198 - <_> - - <_> - - - - <_> - 23 14 2 1 -1. - <_> - 23 14 1 1 2. - 0 - 6.0146670875838026e-005 - -0.1023617982864380 - 0.0884054377675056 - <_> - - <_> - - - - <_> - 0 14 2 1 -1. - <_> - 1 14 1 1 2. - 0 - -6.8713612563442439e-005 - 0.1984436959028244 - -0.0994443595409393 - <_> - - <_> - - - - <_> - 11 1 4 14 -1. - <_> - 11 8 4 7 2. - 0 - -0.0848333984613419 - -0.3900933861732483 - 0.0397581607103348 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 0.0115453395992517 - 0.0299104899168015 - -0.5021548867225647 - <_> - - <_> - - - - <_> - 24 12 1 2 -1. - <_> - 24 13 1 1 2. - 0 - 1.2721769744530320e-003 - 0.0357883498072624 - -0.3856284022331238 - <_> - - <_> - - - - <_> - 0 1 14 14 -1. - <_> - 0 8 14 7 2. - 0 - 0.3789406120777130 - 0.0429151207208633 - -0.3726823925971985 - <_> - - <_> - - - - <_> - 13 0 6 15 -1. - <_> - 15 0 2 15 3. - 0 - 0.0587286688387394 - 0.0175066608935595 - -0.7129334807395935 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 3 1 2 2. - 0 - -7.2667418862693012e-005 - 0.0852374136447906 - -0.1796067953109741 - <_> - - <_> - - - - <_> - 24 13 1 2 -1. - <_> - 24 14 1 1 2. - 0 - -2.5661939289420843e-003 - -0.4941900074481964 - 0.0211067497730255 - <_> - - <_> - - - - <_> - 0 13 1 2 -1. - <_> - 0 14 1 1 2. - 0 - -6.2544771935790777e-005 - 0.1260727941989899 - -0.1358107030391693 - <_> - - <_> - - - - <_> - 23 11 2 4 -1. - <_> - 23 12 2 2 2. - 0 - -3.3382088877260685e-003 - -0.3425475955009460 - 0.0313290804624558 - <_> - - <_> - - - - <_> - 0 11 2 4 -1. - <_> - 0 12 2 2 2. - 0 - 4.0032588876783848e-003 - 0.0353341810405254 - -0.4785414040088654 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 17 10 1 1 2. - <_> - 16 11 1 1 2. - 0 - 7.8725446655880660e-005 - -0.0865093916654587 - 0.1098069027066231 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 3.5411381395533681e-004 - -0.0866223275661469 - 0.1815810948610306 - <_> - - <_> - - - - <_> - 1 0 24 6 -1. - <_> - 13 0 12 3 2. - <_> - 1 3 12 3 2. - 0 - -0.1003293022513390 - -0.4118100106716156 - 0.0407990105450153 - <_> - - <_> - - - - <_> - 6 1 6 12 -1. - <_> - 8 1 2 12 3. - 0 - 0.0457341782748699 - 0.0250630006194115 - -0.5801063179969788 - <_> - - <_> - - - - <_> - 19 6 6 3 -1. - <_> - 19 7 6 1 3. - 0 - 0.0143571095541120 - 0.0273739993572235 - -0.3111906945705414 - <_> - - <_> - - - - <_> - 5 6 7 2 -1. - <_> - 5 7 7 1 2. - 0 - 4.2823958210647106e-003 - -0.1212206035852432 - 0.1300680041313171 - <_> - - <_> - - - - <_> - 9 6 7 4 -1. - <_> - 9 7 7 2 2. - 0 - -0.0191692691296339 - 0.3547115027904511 - -0.0586979016661644 - <_> - - <_> - - - - <_> - 0 6 6 3 -1. - <_> - 0 7 6 1 3. - 0 - 0.0203719399869442 - 0.0270470399409533 - -0.6216102838516235 - <_> - - <_> - - - - <_> - 6 8 13 4 -1. - <_> - 6 9 13 2 2. - 0 - -0.0119816595688462 - 0.1762886941432953 - -0.0943156927824020 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -9.4278322649188340e-005 - 0.1507049947977066 - -0.1071290969848633 - <_> - - <_> - - - - <_> - 12 11 6 2 -1. - <_> - 14 11 2 2 3. - 0 - 0.0101822800934315 - 0.0161433499306440 - -0.3503915071487427 - <_> - - <_> - - - - <_> - 6 0 12 10 -1. - <_> - 6 0 6 5 2. - <_> - 12 5 6 5 2. - 0 - -0.0520590804517269 - -0.3121460080146790 - 0.0477841906249523 - <_> - - <_> - - - - <_> - 12 11 6 2 -1. - <_> - 14 11 2 2 3. - 0 - -0.0249434690922499 - -0.7933396100997925 - -4.0430951048620045e-004 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -6.2259827973321080e-004 - 0.2043831050395966 - -0.0712744519114494 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -5.6859298638300970e-005 - 0.0861500576138496 - -0.0658712089061737 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - 4.0834350511431694e-004 - -0.1051706001162529 - 0.2224697023630142 - <_> - - <_> - - - - <_> - 12 11 6 2 -1. - <_> - 14 11 2 2 3. - 0 - -1.1075460352003574e-003 - 0.0464305393397808 - -0.0319086797535419 - <_> - - <_> - - - - <_> - 7 11 6 2 -1. - <_> - 9 11 2 2 3. - 0 - -0.0123662399128079 - -0.6207143068313599 - 0.0261646900326014 - <_> - - <_> - - - - <_> - 5 12 18 3 -1. - <_> - 11 12 6 3 3. - 0 - -0.0354762189090252 - 0.1230582967400551 - -0.0519298203289509 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -2.3794448934495449e-003 - -0.3795419931411743 - 0.0417488515377045 - <_> - - <_> - - - - <_> - 21 4 4 2 -1. - <_> - 23 4 2 1 2. - <_> - 21 5 2 1 2. - 0 - 1.3966970145702362e-003 - -0.0851486772298813 - 0.1512037962675095 - <_> - - <_> - - - - <_> - 9 3 7 3 -1. - <_> - 9 4 7 1 3. - 0 - 5.1437891088426113e-003 - -0.0816644281148911 - 0.1789588034152985 - <_> - - <_> - - - - <_> - 13 2 8 5 -1. - <_> - 15 4 4 5 2. - 1 - -0.1239939033985138 - -0.6658980846405029 - 9.5204189419746399e-003 - <_> - - <_> - - - - <_> - 12 1 6 4 -1. - <_> - 11 2 6 2 2. - 1 - 0.0393908508121967 - 0.0182536505162716 - -0.7637290954589844 - <_> - - <_> - - - - <_> - 22 0 2 2 -1. - <_> - 22 1 2 1 2. - 0 - 2.9372270219027996e-003 - 0.0226261299103498 - -0.3233875036239624 - <_> - - <_> - - - - <_> - 4 1 16 12 -1. - <_> - 12 1 8 12 2. - 0 - 0.1816650927066803 - -0.0618673898279667 - 0.2298932969570160 - <_> - - <_> - - - - <_> - 3 0 20 10 -1. - <_> - 3 0 10 10 2. - 0 - 0.0892752110958099 - -0.0848015919327736 - 0.2109096944332123 - <_> - - <_> - - - - <_> - 0 4 6 6 -1. - <_> - 0 4 3 3 2. - <_> - 3 7 3 3 2. - 0 - 0.0179201308637857 - -0.0663900971412659 - 0.2243462055921555 - <_> - - <_> - - - - <_> - 22 4 3 3 -1. - <_> - 23 5 1 3 3. - 1 - 5.5024111643433571e-003 - -0.0559136196970940 - 0.1079157963395119 - <_> - - <_> - - - - <_> - 3 4 3 3 -1. - <_> - 2 5 3 1 3. - 1 - -0.0126318400725722 - 0.3352184891700745 - -0.0470694787800312 - <_> - - <_> - - - - <_> - 22 7 3 4 -1. - <_> - 22 8 3 2 2. - 0 - 8.2040186971426010e-003 - 0.0521674789488316 - -0.5830680727958679 - <_> - - <_> - - - - <_> - 3 1 4 7 -1. - <_> - 4 1 2 7 2. - 0 - 0.0215438604354858 - 0.0103719802573323 - -0.8169081807136536 - <_> - - <_> - - - - <_> - 22 7 3 4 -1. - <_> - 22 8 3 2 2. - 0 - -4.2779878713190556e-003 - -0.3437061011791229 - 0.0348356589674950 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 9.5721762627363205e-003 - 0.0160374492406845 - -0.7592146992683411 - <_> - - <_> - - - - <_> - 18 4 6 2 -1. - <_> - 18 5 6 1 2. - 0 - 5.9499992057681084e-003 - -0.0835138633847237 - 0.0937561765313149 - <_> - - <_> - - - - <_> - 5 3 15 6 -1. - <_> - 5 5 15 2 3. - 0 - -0.0868803784251213 - 0.1977919936180115 - -0.0735685229301453 - <_> - - <_> - - - - <_> - 16 4 8 4 -1. - <_> - 16 5 8 2 2. - 0 - 5.7690730318427086e-003 - -0.0611343309283257 - 0.0826714411377907 - <_> - - <_> - - - - <_> - 0 1 24 10 -1. - <_> - 0 1 12 5 2. - <_> - 12 6 12 5 2. - 0 - 0.1480645984411240 - 0.0396532900631428 - -0.4085262119770050 - <_> - - <_> - - - - <_> - 14 0 4 7 -1. - <_> - 15 0 2 7 2. - 0 - -0.0186682697385550 - -0.6671301126480103 - 0.0156445093452930 - <_> - - <_> - - - - <_> - 0 7 3 4 -1. - <_> - 0 8 3 2 2. - 0 - 0.0101426700130105 - 0.0211487896740437 - -0.5610821843147278 - <_> - - <_> - - - - <_> - 18 5 4 4 -1. - <_> - 20 5 2 2 2. - <_> - 18 7 2 2 2. - 0 - -2.6263110339641571e-003 - 0.0881423130631447 - -0.0586008317768574 - <_> - - <_> - - - - <_> - 5 5 6 2 -1. - <_> - 5 5 3 1 2. - <_> - 8 6 3 1 2. - 0 - 3.0406240839511156e-003 - -0.0699731782078743 - 0.1942113041877747 - <_> - - <_> - - - - <_> - 21 9 2 3 -1. - <_> - 21 10 2 1 3. - 0 - -4.0523111820220947e-003 - -0.3989843130111694 - 0.0284519009292126 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 3.3293411252088845e-004 - -0.0920187085866928 - 0.1521372944116592 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -1.4471479516942054e-004 - 0.1328881978988648 - -0.0869787335395813 - -1.4393190145492554 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 7 7 6 -1. - <_> - 9 9 7 2 3. - 0 - -0.0305288899689913 - 0.3361127972602844 - -0.1605879068374634 - <_> - - <_> - - - - <_> - 17 2 7 2 -1. - <_> - 17 3 7 1 2. - 0 - -6.8238358944654465e-003 - 0.2510839104652405 - -0.2578383982181549 - <_> - - <_> - - - - <_> - 4 2 9 4 -1. - <_> - 3 3 9 2 2. - 1 - -0.0260700508952141 - 0.3176701068878174 - -0.1111562028527260 - <_> - - <_> - - - - <_> - 19 14 6 1 -1. - <_> - 19 14 3 1 2. - 0 - 1.6021650517359376e-003 - -0.1096177026629448 - 0.1561331003904343 - <_> - - <_> - - - - <_> - 6 9 11 6 -1. - <_> - 6 11 11 2 3. - 0 - -0.0346175394952297 - 0.2614395916461945 - -0.0955564379692078 - <_> - - <_> - - - - <_> - 17 3 8 12 -1. - <_> - 21 3 4 6 2. - <_> - 17 9 4 6 2. - 0 - 0.0825498923659325 - -0.0359772108495235 - 0.3189736902713776 - <_> - - <_> - - - - <_> - 0 7 24 8 -1. - <_> - 0 7 12 4 2. - <_> - 12 11 12 4 2. - 0 - -0.1079908013343811 - -0.4661987125873566 - 0.0965379774570465 - <_> - - <_> - - - - <_> - 5 3 16 12 -1. - <_> - 13 3 8 6 2. - <_> - 5 9 8 6 2. - 0 - -0.0710962936282158 - -0.3290941119194031 - 0.0201707594096661 - <_> - - <_> - - - - <_> - 0 3 24 6 -1. - <_> - 8 5 8 2 9. - 0 - 0.6102272272109985 - -0.0410851910710335 - 0.5919780731201172 - <_> - - <_> - - - - <_> - 1 8 24 1 -1. - <_> - 7 8 12 1 2. - 0 - -9.6180485561490059e-003 - 0.1845327019691467 - -0.1256957054138184 - <_> - - <_> - - - - <_> - 1 9 14 6 -1. - <_> - 1 9 7 3 2. - <_> - 8 12 7 3 2. - 0 - -0.0216567497700453 - 0.3558863103389740 - -0.0654195472598076 - <_> - - <_> - - - - <_> - 19 5 3 2 -1. - <_> - 19 6 3 1 2. - 0 - 3.2288730144500732e-003 - -0.1597114056348801 - 0.1442176997661591 - <_> - - <_> - - - - <_> - 0 14 10 1 -1. - <_> - 5 14 5 1 2. - 0 - 3.6023850552737713e-003 - -0.1301265954971314 - 0.1848530024290085 - <_> - - <_> - - - - <_> - 5 1 15 6 -1. - <_> - 5 3 15 2 3. - 0 - 0.1224254965782166 - -0.0509620085358620 - 0.4787274003028870 - <_> - - <_> - - - - <_> - 1 1 7 6 -1. - <_> - 1 3 7 2 3. - 0 - -0.0398168414831162 - 0.1911015063524246 - -0.1490415036678314 - <_> - - <_> - - - - <_> - 15 12 6 3 -1. - <_> - 17 13 2 1 9. - 0 - 0.0165654607117176 - 0.0250385701656342 - -0.2660810947418213 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 6.7314971238374710e-003 - 0.0361662209033966 - -0.5751237273216248 - <_> - - <_> - - - - <_> - 1 12 24 3 -1. - <_> - 7 12 12 3 2. - 0 - -0.0238826293498278 - 0.1817242056131363 - -0.1013408973813057 - <_> - - <_> - - - - <_> - 3 12 6 3 -1. - <_> - 5 13 2 1 9. - 0 - 0.0168766304850578 - 0.0499957092106342 - -0.4964488148689270 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - 0.0814632922410965 - 0.0508196912705898 - -0.3092927038669586 - <_> - - <_> - - - - <_> - 2 0 21 15 -1. - <_> - 9 0 7 15 3. - 0 - 0.1567866057157517 - -0.0846417918801308 - 0.2097589969635010 - <_> - - <_> - - - - <_> - 17 3 6 2 -1. - <_> - 17 4 6 1 2. - 0 - 0.0107369897887111 - -0.0588766187429428 - 0.2673564851284027 - <_> - - <_> - - - - <_> - 3 3 14 2 -1. - <_> - 3 4 14 1 2. - 0 - -0.0162507798522711 - 0.2185824960470200 - -0.1275278925895691 - <_> - - <_> - - - - <_> - 4 0 21 4 -1. - <_> - 11 0 7 4 3. - 0 - -0.0513998307287693 - 0.1707165986299515 - -0.0564976185560226 - <_> - - <_> - - - - <_> - 6 13 4 1 -1. - <_> - 7 13 2 1 2. - 0 - 1.8661050125956535e-003 - 0.0403385981917381 - -0.4740450084209442 - <_> - - <_> - - - - <_> - 17 3 8 12 -1. - <_> - 21 3 4 6 2. - <_> - 17 9 4 6 2. - 0 - -0.0494354106485844 - 0.1537600010633469 - -0.0417859293520451 - <_> - - <_> - - - - <_> - 0 3 8 12 -1. - <_> - 0 3 4 6 2. - <_> - 4 9 4 6 2. - 0 - 0.0696671828627586 - -0.0588539093732834 - 0.3099964857101440 - <_> - - <_> - - - - <_> - 5 0 16 8 -1. - <_> - 13 0 8 4 2. - <_> - 5 4 8 4 2. - 0 - -0.0781185403466225 - -0.4109517037868500 - 0.0523068793118000 - <_> - - <_> - - - - <_> - 3 7 4 2 -1. - <_> - 4 8 2 2 2. - 1 - -8.6161941289901733e-003 - -0.5668942928314209 - 0.0286804605275393 - <_> - - <_> - - - - <_> - 5 11 15 4 -1. - <_> - 5 12 15 2 2. - 0 - 6.8916371092200279e-003 - -0.0957784205675125 - 0.1680631041526794 - <_> - - <_> - - - - <_> - 10 13 1 2 -1. - <_> - 10 14 1 1 2. - 0 - 8.4734419942833483e-005 - -0.1476065963506699 - 0.1278074979782105 - <_> - - <_> - - - - <_> - 12 14 6 1 -1. - <_> - 14 14 2 1 3. - 0 - -6.5460228361189365e-003 - -0.5353912711143494 - 0.0211423803120852 - <_> - - <_> - - - - <_> - 9 5 6 4 -1. - <_> - 9 6 6 2 2. - 0 - -0.0119369700551033 - 0.2489618957042694 - -0.0659059137105942 - <_> - - <_> - - - - <_> - 12 5 13 2 -1. - <_> - 12 6 13 1 2. - 0 - 0.0160134993493557 - -0.0751639306545258 - 0.0920000970363617 - <_> - - <_> - - - - <_> - 5 0 15 6 -1. - <_> - 5 2 15 2 3. - 0 - -0.1797882020473480 - 0.3122220933437347 - -0.0546800307929516 - <_> - - <_> - - - - <_> - 3 0 20 15 -1. - <_> - 3 0 10 15 2. - 0 - 0.4293603003025055 - -0.0467442497611046 - 0.4671711027622223 - <_> - - <_> - - - - <_> - 1 1 22 14 -1. - <_> - 12 1 11 14 2. - 0 - 0.1762980967760086 - -0.1196762025356293 - 0.2303612977266312 - <_> - - <_> - - - - <_> - 15 5 10 2 -1. - <_> - 15 6 10 1 2. - 0 - 0.0434980615973473 - 0.0213767793029547 - -0.3402695953845978 - <_> - - <_> - - - - <_> - 0 5 13 2 -1. - <_> - 0 6 13 1 2. - 0 - 0.0168955195695162 - -0.1305568963289261 - 0.1834042966365814 - <_> - - <_> - - - - <_> - 5 2 15 4 -1. - <_> - 5 3 15 2 2. - 0 - 0.0185353793203831 - -0.0754243135452271 - 0.2354936003684998 - <_> - - <_> - - - - <_> - 5 4 15 3 -1. - <_> - 5 5 15 1 3. - 0 - 0.0173294302076101 - -0.0853839814662933 - 0.2036404013633728 - <_> - - <_> - - - - <_> - 21 11 4 4 -1. - <_> - 21 12 4 2 2. - 0 - 8.6630741134285927e-003 - 0.0385910011827946 - -0.6201460957527161 - <_> - - <_> - - - - <_> - 5 0 1 2 -1. - <_> - 5 0 1 1 2. - 1 - 5.7052681222558022e-003 - 0.0312472805380821 - -0.4070529043674469 - <_> - - <_> - - - - <_> - 23 3 2 4 -1. - <_> - 23 3 1 4 2. - 0 - -1.8030379433184862e-003 - 0.1957851052284241 - -0.1433366984128952 - <_> - - <_> - - - - <_> - 7 1 4 6 -1. - <_> - 8 1 2 6 2. - 0 - -0.0187879204750061 - -0.8691418766975403 - 0.0169819705188274 - <_> - - <_> - - - - <_> - 8 6 11 3 -1. - <_> - 8 7 11 1 3. - 0 - 0.0186009202152491 - -0.0818153098225594 - 0.1891387999057770 - <_> - - <_> - - - - <_> - 0 13 2 1 -1. - <_> - 1 13 1 1 2. - 0 - 8.4120598330628127e-005 - -0.1289912015199661 - 0.1211050972342491 - <_> - - <_> - - - - <_> - 21 12 3 3 -1. - <_> - 21 13 3 1 3. - 0 - -5.6057129986584187e-003 - -0.4698300957679749 - 0.0159890707582235 - <_> - - <_> - - - - <_> - 1 12 3 3 -1. - <_> - 1 13 3 1 3. - 0 - 3.5192570649087429e-003 - 0.0361930206418037 - -0.4484112858772278 - <_> - - <_> - - - - <_> - 23 3 2 4 -1. - <_> - 23 3 1 4 2. - 0 - 1.7741440096870065e-003 - -0.0433034710586071 - 0.1395574957132340 - <_> - - <_> - - - - <_> - 0 3 2 4 -1. - <_> - 1 3 1 4 2. - 0 - -1.6350420191884041e-003 - 0.1395068019628525 - -0.1124152988195419 - <_> - - <_> - - - - <_> - 21 3 4 10 -1. - <_> - 23 3 2 5 2. - <_> - 21 8 2 5 2. - 0 - 6.4794770441949368e-003 - -0.0600515604019165 - 0.0728941932320595 - <_> - - <_> - - - - <_> - 0 3 4 10 -1. - <_> - 0 3 2 5 2. - <_> - 2 8 2 5 2. - 0 - -0.0203247498720884 - 0.4297815859317780 - -0.0396846085786819 - <_> - - <_> - - - - <_> - 24 1 1 4 -1. - <_> - 24 2 1 2 2. - 0 - -6.3453041948378086e-003 - -0.2533842921257019 - 0.0242939405143261 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 2 1 2 3. - 0 - 9.0959975495934486e-003 - 0.0340887792408466 - -0.4518730044364929 - <_> - - <_> - - - - <_> - 16 1 4 4 -1. - <_> - 17 1 2 4 2. - 0 - 0.0161635801196098 - 6.8225921131670475e-003 - -0.7205737829208374 - <_> - - <_> - - - - <_> - 5 1 4 4 -1. - <_> - 6 1 2 4 2. - 0 - -0.0112293101847172 - -0.6191986203193665 - 0.0222914796322584 - <_> - - <_> - - - - <_> - 15 2 10 12 -1. - <_> - 15 8 10 6 2. - 0 - -0.1763328015804291 - -0.6819115877151489 - 8.8407555595040321e-003 - <_> - - <_> - - - - <_> - 8 5 9 3 -1. - <_> - 8 6 9 1 3. - 0 - 0.0192962400615215 - -0.0796290487051010 - 0.2013067007064819 - <_> - - <_> - - - - <_> - 6 7 14 2 -1. - <_> - 6 8 14 1 2. - 0 - 0.0105654401704669 - -0.0832984521985054 - 0.1872760951519013 - <_> - - <_> - - - - <_> - 10 7 5 4 -1. - <_> - 10 8 5 2 2. - 0 - -6.7616738379001617e-003 - 0.2069583982229233 - -0.0813189968466759 - <_> - - <_> - - - - <_> - 23 12 2 3 -1. - <_> - 23 13 2 1 3. - 0 - -2.3086878936737776e-003 - -0.2798121869564056 - 0.0293897707015276 - <_> - - <_> - - - - <_> - 0 7 4 4 -1. - <_> - 0 8 4 2 2. - 0 - -6.9189318455755711e-003 - -0.5095586180686951 - 0.0291001908481121 - <_> - - <_> - - - - <_> - 3 13 21 2 -1. - <_> - 10 13 7 2 3. - 0 - -0.0195926092565060 - 0.1248695999383926 - -0.0666698589920998 - <_> - - <_> - - - - <_> - 6 1 3 1 -1. - <_> - 7 1 1 1 3. - 0 - -5.6698801927268505e-004 - 0.1772525012493134 - -0.0755556300282478 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - 6.5187108702957630e-004 - -0.0468317084014416 - 0.1377387940883637 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -4.3244438711553812e-004 - 0.1750548034906387 - -0.0822173282504082 - <_> - - <_> - - - - <_> - 23 12 2 3 -1. - <_> - 23 13 2 1 3. - 0 - 3.2091289758682251e-003 - 0.0258904304355383 - -0.3546032905578613 - <_> - - <_> - - - - <_> - 8 8 9 2 -1. - <_> - 11 8 3 2 3. - 0 - -0.0288993604481220 - -0.7315214276313782 - 0.0180548094213009 - <_> - - <_> - - - - <_> - 23 12 2 3 -1. - <_> - 23 13 2 1 3. - 0 - 9.8803699074778706e-005 - -0.0383186303079128 - 0.0343451388180256 - <_> - - <_> - - - - <_> - 0 12 2 3 -1. - <_> - 0 13 2 1 3. - 0 - -2.2848090156912804e-003 - -0.3603490889072418 - 0.0380517281591892 - <_> - - <_> - - - - <_> - 8 4 9 9 -1. - <_> - 8 7 9 3 3. - 0 - 0.2230083048343658 - -0.0353877097368240 - 0.4118692874908447 - <_> - - <_> - - - - <_> - 3 11 12 4 -1. - <_> - 3 11 6 2 2. - <_> - 9 13 6 2 2. - 0 - 3.8663020823150873e-003 - -0.1147940978407860 - 0.1196625977754593 - <_> - - <_> - - - - <_> - 10 10 5 4 -1. - <_> - 10 11 5 2 2. - 0 - 3.6781090311706066e-003 - -0.0887862071394920 - 0.2093122005462647 - <_> - - <_> - - - - <_> - 7 14 6 1 -1. - <_> - 9 14 2 1 3. - 0 - 3.6886930465698242e-003 - 0.0420652516186237 - -0.3311671912670136 - <_> - - <_> - - - - <_> - 4 0 18 15 -1. - <_> - 4 0 9 15 2. - 0 - -0.5000842809677124 - 0.4582319855690002 - -0.0300164502114058 - <_> - - <_> - - - - <_> - 0 3 4 4 -1. - <_> - 1 3 2 4 2. - 0 - 3.2457590568810701e-003 - -0.0581394806504250 - 0.2244455963373184 - <_> - - <_> - - - - <_> - 22 0 3 4 -1. - <_> - 22 2 3 2 2. - 0 - -7.2515371721237898e-004 - 0.0857456997036934 - -0.2164471000432968 - <_> - - <_> - - - - <_> - 0 0 20 8 -1. - <_> - 5 0 10 8 2. - 0 - 0.0756241232156754 - -0.0728698670864105 - 0.1809341013431549 - <_> - - <_> - - - - <_> - 1 5 24 10 -1. - <_> - 13 5 12 5 2. - <_> - 1 10 12 5 2. - 0 - -0.1401147991418839 - -0.3049497008323669 - 0.0322263389825821 - <_> - - <_> - - - - <_> - 0 5 5 6 -1. - <_> - 0 7 5 2 3. - 0 - 1.2914249673485756e-003 - -0.1651930958032608 - 0.0796989724040031 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - 4.8063062131404877e-003 - -0.0511631406843662 - 0.1528493016958237 - <_> - - <_> - - - - <_> - 2 3 4 2 -1. - <_> - 2 3 4 1 2. - 1 - 0.0197005104273558 - -0.0214679203927517 - 0.5898631215095520 - <_> - - <_> - - - - <_> - 14 1 6 6 -1. - <_> - 16 1 2 6 3. - 0 - -0.0282465498894453 - -0.3611007034778595 - 0.0215946007519960 - <_> - - <_> - - - - <_> - 5 1 6 6 -1. - <_> - 7 1 2 6 3. - 0 - 0.0318388007581234 - 0.0213881190866232 - -0.5591915845870972 - <_> - - <_> - - - - <_> - 11 10 6 1 -1. - <_> - 13 10 2 1 3. - 0 - 5.2926959469914436e-003 - 0.0171414706856012 - -0.3245368003845215 - <_> - - <_> - - - - <_> - 6 8 11 4 -1. - <_> - 6 9 11 2 2. - 0 - 9.3176206573843956e-003 - -0.0691479519009590 - 0.1877806931734085 - <_> - - <_> - - - - <_> - 23 13 2 2 -1. - <_> - 24 13 1 1 2. - <_> - 23 14 1 1 2. - 0 - 1.9812679965980351e-004 - -0.0710251703858376 - 0.1166272014379501 - <_> - - <_> - - - - <_> - 6 0 13 4 -1. - <_> - 6 1 13 2 2. - 0 - 0.0172033403068781 - -0.0834768265485764 - 0.1448491960763931 - <_> - - <_> - - - - <_> - 17 0 3 1 -1. - <_> - 18 1 1 1 3. - 1 - 8.0548562109470367e-003 - 0.0214444492012262 - -0.2763100862503052 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - 6.7419088445603848e-003 - 0.0341341383755207 - -0.3555370867252350 - <_> - - <_> - - - - <_> - 22 12 2 2 -1. - <_> - 23 12 1 1 2. - <_> - 22 13 1 1 2. - 0 - 5.7136920077027753e-005 - -0.0699329003691673 - 0.0822271332144737 - <_> - - <_> - - - - <_> - 0 13 2 1 -1. - <_> - 1 13 1 1 2. - 0 - -6.0014430346200243e-005 - 0.1533315926790237 - -0.0801942795515060 - <_> - - <_> - - - - <_> - 22 13 2 1 -1. - <_> - 22 13 1 1 2. - 0 - -6.6377622715663165e-005 - 0.0740585327148438 - -0.0435769110918045 - <_> - - <_> - - - - <_> - 1 13 2 1 -1. - <_> - 2 13 1 1 2. - 0 - 7.0605492510367185e-005 - -0.1192411035299301 - 0.1157367005944252 - <_> - - <_> - - - - <_> - 22 13 3 1 -1. - <_> - 23 13 1 1 3. - 0 - 7.2301438194699585e-005 - -0.0702318474650383 - 0.0793638303875923 - <_> - - <_> - - - - <_> - 1 2 2 12 -1. - <_> - 2 2 1 12 2. - 0 - -1.4867830323055387e-003 - 0.1245760992169380 - -0.1076287999749184 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - -5.2434820681810379e-003 - 0.1116774976253510 - -0.0614912398159504 - <_> - - <_> - - - - <_> - 3 3 4 2 -1. - <_> - 3 4 4 1 2. - 0 - 7.8055239282548428e-003 - -0.0496800504624844 - 0.3046393096446991 - <_> - - <_> - - - - <_> - 24 0 1 12 -1. - <_> - 24 3 1 6 2. - 0 - 0.0167157892137766 - 0.0242684707045555 - -0.5641499757766724 - <_> - - <_> - - - - <_> - 5 8 15 6 -1. - <_> - 5 10 15 2 3. - 0 - -0.0197794307023287 - 0.1293102055788040 - -0.1014008000493050 - <_> - - <_> - - - - <_> - 19 7 6 2 -1. - <_> - 19 7 6 1 2. - 1 - -6.7752218456007540e-005 - 0.0773630663752556 - -0.0876037329435349 - <_> - - <_> - - - - <_> - 1 10 5 3 -1. - <_> - 1 11 5 1 3. - 0 - -0.0129433302208781 - -0.8692914843559265 - 0.0158042199909687 - <_> - - <_> - - - - <_> - 24 0 1 12 -1. - <_> - 24 3 1 6 2. - 0 - -0.0125468103215098 - -0.1350758969783783 - 0.0456306189298630 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 3 1 6 2. - 0 - 7.9727862030267715e-003 - 0.0405779294669628 - -0.3409133851528168 - <_> - - <_> - - - - <_> - 9 0 12 1 -1. - <_> - 13 0 4 1 3. - 0 - -6.3152899965643883e-003 - 0.1372991949319840 - -0.0561671592295170 - <_> - - <_> - - - - <_> - 4 0 12 1 -1. - <_> - 8 0 4 1 3. - 0 - -3.6897659301757813e-003 - 0.1639326065778732 - -0.0914164036512375 - <_> - - <_> - - - - <_> - 3 0 20 1 -1. - <_> - 8 0 10 1 2. - 0 - 5.0578881055116653e-003 - -0.0800797268748283 - 0.1433712989091873 - <_> - - <_> - - - - <_> - 1 0 9 2 -1. - <_> - 4 0 3 2 3. - 0 - -0.0299335699528456 - -0.5326762199401856 - 0.0227312203496695 - <_> - - <_> - - - - <_> - 11 6 8 2 -1. - <_> - 11 7 8 1 2. - 0 - 7.0810988545417786e-003 - -0.0732182189822197 - 0.1027508974075317 - <_> - - <_> - - - - <_> - 11 3 3 8 -1. - <_> - 11 7 3 4 2. - 0 - 0.0508137904107571 - 0.0516868904232979 - -0.2544622123241425 - <_> - - <_> - - - - <_> - 20 4 4 2 -1. - <_> - 21 5 2 2 2. - 1 - 4.7044758684933186e-003 - -0.0572907589375973 - 0.0760648325085640 - <_> - - <_> - - - - <_> - 6 7 2 6 -1. - <_> - 6 7 1 6 2. - 1 - 4.6408819034695625e-003 - 0.0559986904263496 - -0.2172269970178604 - <_> - - <_> - - - - <_> - 20 4 4 2 -1. - <_> - 21 5 2 2 2. - 1 - -9.5121748745441437e-003 - 0.1812860071659088 - -0.0377242304384708 - <_> - - <_> - - - - <_> - 5 4 2 4 -1. - <_> - 4 5 2 2 2. - 1 - 2.5726249441504478e-003 - -0.1238458007574081 - 0.1421934068202972 - -1.3500690460205078 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 5 11 3 -1. - <_> - 7 6 11 1 3. - 0 - 0.0184330195188522 - -0.1618741005659103 - 0.3351263999938965 - <_> - - <_> - - - - <_> - 20 1 3 4 -1. - <_> - 20 2 3 2 2. - 0 - 4.8202150501310825e-003 - -0.0972008332610130 - 0.2755692005157471 - <_> - - <_> - - - - <_> - 8 4 9 3 -1. - <_> - 8 5 9 1 3. - 0 - 0.0214508101344109 - -0.1013654991984367 - 0.3922119140625000 - <_> - - <_> - - - - <_> - 9 6 9 3 -1. - <_> - 9 7 9 1 3. - 0 - 0.0201995000243187 - -0.1041551977396011 - 0.3485709130764008 - <_> - - <_> - - - - <_> - 0 7 8 8 -1. - <_> - 0 7 4 4 2. - <_> - 4 11 4 4 2. - 0 - 0.0154604399576783 - -0.1814713031053543 - 0.2296576052904129 - <_> - - <_> - - - - <_> - 9 7 7 3 -1. - <_> - 9 8 7 1 3. - 0 - 0.0121146701276302 - -0.0955794528126717 - 0.3321264982223511 - <_> - - <_> - - - - <_> - 8 3 9 3 -1. - <_> - 8 4 9 1 3. - 0 - 0.0166161693632603 - -0.0751067474484444 - 0.3475660085678101 - <_> - - <_> - - - - <_> - 21 1 1 6 -1. - <_> - 19 3 1 2 3. - 1 - -0.0151290399953723 - 0.1396238952875137 - -0.1150512024760246 - <_> - - <_> - - - - <_> - 0 7 24 5 -1. - <_> - 6 7 12 5 2. - 0 - -0.0707296282052994 - 0.2683610916137695 - -0.1016533970832825 - <_> - - <_> - - - - <_> - 24 11 1 2 -1. - <_> - 24 11 1 1 2. - 1 - 2.2831759415566921e-003 - 0.0443518795073032 - -0.4632245898246765 - <_> - - <_> - - - - <_> - 5 2 8 5 -1. - <_> - 5 2 4 5 2. - 1 - 5.5853649973869324e-003 - 0.0919516831636429 - -0.3147256970405579 - <_> - - <_> - - - - <_> - 16 3 8 12 -1. - <_> - 20 3 4 6 2. - <_> - 16 9 4 6 2. - 0 - -0.0406785085797310 - 0.1471066027879715 - -0.0726505890488625 - <_> - - <_> - - - - <_> - 0 0 24 12 -1. - <_> - 0 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - -0.1358978003263474 - -0.5053529739379883 - 0.0469954796135426 - <_> - - <_> - - - - <_> - 8 2 10 8 -1. - <_> - 13 2 5 4 2. - <_> - 8 6 5 4 2. - 0 - -0.0384974703192711 - -0.3717043101787567 - 0.0552083589136600 - <_> - - <_> - - - - <_> - 0 3 2 8 -1. - <_> - 0 3 1 4 2. - <_> - 1 7 1 4 2. - 0 - 2.7928350027650595e-003 - -0.1162076964974403 - 0.1937797069549561 - <_> - - <_> - - - - <_> - 22 11 2 4 -1. - <_> - 22 12 2 2 2. - 0 - 5.3412551060318947e-003 - 0.0129640102386475 - -0.4924449026584625 - <_> - - <_> - - - - <_> - 1 11 2 4 -1. - <_> - 1 12 2 2 2. - 0 - -2.6604509912431240e-003 - -0.4564127027988434 - 0.0437755398452282 - <_> - - <_> - - - - <_> - 12 2 13 12 -1. - <_> - 12 8 13 6 2. - 0 - 0.3209887146949768 - 0.0484563298523426 - -0.3930096924304962 - <_> - - <_> - - - - <_> - 5 8 2 4 -1. - <_> - 5 8 1 4 2. - 1 - -7.2495201602578163e-003 - -0.4188942015171051 - 0.0410884395241737 - <_> - - <_> - - - - <_> - 15 6 6 7 -1. - <_> - 17 6 2 7 3. - 0 - 0.0233532395213842 - 0.0302080996334553 - -0.3757928013801575 - <_> - - <_> - - - - <_> - 4 6 6 6 -1. - <_> - 6 6 2 6 3. - 0 - -0.0224980209022760 - -0.4524075090885162 - 0.0389229394495487 - <_> - - <_> - - - - <_> - 13 13 9 2 -1. - <_> - 16 13 3 2 3. - 0 - -0.0238666702061892 - -0.5288146734237671 - 0.0138155296444893 - <_> - - <_> - - - - <_> - 4 4 7 4 -1. - <_> - 3 5 7 2 2. - 1 - -0.0336419306695461 - 0.4436714053153992 - -0.0403416194021702 - <_> - - <_> - - - - <_> - 18 4 6 8 -1. - <_> - 21 4 3 4 2. - <_> - 18 8 3 4 2. - 0 - 0.0221408791840076 - -0.0495454296469688 - 0.2051838934421539 - <_> - - <_> - - - - <_> - 3 14 9 1 -1. - <_> - 6 14 3 1 3. - 0 - 0.0106034297496080 - 0.0319968499243259 - -0.5148760080337524 - <_> - - <_> - - - - <_> - 11 11 14 4 -1. - <_> - 18 11 7 2 2. - <_> - 11 13 7 2 2. - 0 - 9.6357148140668869e-003 - -0.1237379983067513 - 0.1527843028306961 - <_> - - <_> - - - - <_> - 1 4 6 8 -1. - <_> - 1 4 3 4 2. - <_> - 4 8 3 4 2. - 0 - 0.0297187492251396 - -0.0567854084074497 - 0.2904588878154755 - <_> - - <_> - - - - <_> - 23 0 2 2 -1. - <_> - 23 0 1 2 2. - 1 - 2.0548420434352010e-004 - -0.2718465924263001 - 0.1070784032344818 - <_> - - <_> - - - - <_> - 6 0 13 4 -1. - <_> - 6 1 13 2 2. - 0 - -0.0486726500093937 - 0.4235774874687195 - -0.0456859990954399 - <_> - - <_> - - - - <_> - 11 0 4 2 -1. - <_> - 11 1 4 1 2. - 0 - 2.5377809070050716e-003 - -0.0727348327636719 - 0.2103600949048996 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - -3.3941529691219330e-003 - -0.3815236985683441 - 0.0445483289659023 - <_> - - <_> - - - - <_> - 20 9 5 6 -1. - <_> - 20 11 5 2 3. - 0 - -0.0237451493740082 - -0.4413619935512543 - 0.0249414704740047 - <_> - - <_> - - - - <_> - 5 2 15 3 -1. - <_> - 5 3 15 1 3. - 0 - -0.0200922992080450 - 0.1694606989622116 - -0.0953345969319344 - <_> - - <_> - - - - <_> - 9 2 7 3 -1. - <_> - 9 3 7 1 3. - 0 - 0.0110265100374818 - -0.0721762925386429 - 0.2484644949436188 - <_> - - <_> - - - - <_> - 2 14 21 1 -1. - <_> - 9 14 7 1 3. - 0 - -0.0158068798482418 - 0.2241718024015427 - -0.0724460408091545 - <_> - - <_> - - - - <_> - 8 11 16 4 -1. - <_> - 8 11 8 4 2. - 0 - 0.0490073598921299 - -0.0551217384636402 - 0.2583925127983093 - <_> - - <_> - - - - <_> - 0 12 24 2 -1. - <_> - 12 12 12 2 2. - 0 - 0.0288716107606888 - -0.1153011992573738 - 0.1924846023321152 - <_> - - <_> - - - - <_> - 22 9 3 6 -1. - <_> - 22 11 3 2 3. - 0 - 7.3990179225802422e-003 - 0.0522995889186859 - -0.2191856950521469 - <_> - - <_> - - - - <_> - 0 1 12 2 -1. - <_> - 0 1 6 1 2. - <_> - 6 2 6 1 2. - 0 - -6.1737848445773125e-003 - 0.2038096934556961 - -0.0696693286299706 - <_> - - <_> - - - - <_> - 8 9 9 3 -1. - <_> - 8 10 9 1 3. - 0 - 9.4332564622163773e-003 - -0.0534071698784828 - 0.2586283981800079 - <_> - - <_> - - - - <_> - 0 9 3 6 -1. - <_> - 0 11 3 2 3. - 0 - 0.0143210804089904 - 0.0336425192654133 - -0.4679594039916992 - <_> - - <_> - - - - <_> - 11 11 14 4 -1. - <_> - 18 11 7 2 2. - <_> - 11 13 7 2 2. - 0 - 0.0224872808903456 - -0.0431007482111454 - 0.1123055964708328 - <_> - - <_> - - - - <_> - 7 9 4 6 -1. - <_> - 8 9 2 6 2. - 0 - -8.8018830865621567e-003 - -0.5997744798660278 - 0.0238500293344259 - <_> - - <_> - - - - <_> - 10 12 6 2 -1. - <_> - 12 12 2 2 3. - 0 - -9.2824921011924744e-003 - -0.3792850077152252 - 0.0247395392507315 - <_> - - <_> - - - - <_> - 0 12 1 2 -1. - <_> - 0 13 1 1 2. - 0 - -3.8288799260044470e-005 - 0.1094501987099648 - -0.1270592063665390 - <_> - - <_> - - - - <_> - 15 3 10 12 -1. - <_> - 20 3 5 6 2. - <_> - 15 9 5 6 2. - 0 - -0.1060767024755478 - 0.1223917007446289 - -0.0179706607013941 - <_> - - <_> - - - - <_> - 10 9 4 6 -1. - <_> - 10 9 2 3 2. - <_> - 12 12 2 3 2. - 0 - 0.0145011199638247 - 0.0254385806620121 - -0.5499516725540161 - <_> - - <_> - - - - <_> - 11 3 6 4 -1. - <_> - 11 3 3 4 2. - 0 - -0.0294254906475544 - -0.4407989084720612 - 0.0163295306265354 - <_> - - <_> - - - - <_> - 0 0 14 14 -1. - <_> - 0 7 14 7 2. - 0 - -0.2141247987747192 - -0.5817149281501770 - 0.0224080495536327 - <_> - - <_> - - - - <_> - 15 2 10 12 -1. - <_> - 20 2 5 6 2. - <_> - 15 8 5 6 2. - 0 - -0.0159379299730062 - 0.0447719283401966 - -0.0470217689871788 - <_> - - <_> - - - - <_> - 8 3 6 4 -1. - <_> - 11 3 3 4 2. - 0 - 0.0358322896063328 - 0.0257156305015087 - -0.5430511236190796 - <_> - - <_> - - - - <_> - 23 5 2 6 -1. - <_> - 23 7 2 2 3. - 0 - -0.0114978998899460 - -0.4132392108440399 - 0.0246592592447996 - <_> - - <_> - - - - <_> - 10 8 5 3 -1. - <_> - 10 9 5 1 3. - 0 - 7.6680490747094154e-003 - -0.0596144981682301 - 0.2419749945402145 - <_> - - <_> - - - - <_> - 20 7 5 4 -1. - <_> - 20 8 5 2 2. - 0 - 0.0123357502743602 - 0.0375008806586266 - -0.4776956140995026 - <_> - - <_> - - - - <_> - 7 10 11 4 -1. - <_> - 7 11 11 2 2. - 0 - 0.0130474697798491 - -0.0609255395829678 - 0.2419895976781845 - <_> - - <_> - - - - <_> - 16 13 1 2 -1. - <_> - 16 14 1 1 2. - 0 - 5.2074559789616615e-005 - -0.0981822684407234 - 0.0891881734132767 - <_> - - <_> - - - - <_> - 3 1 5 4 -1. - <_> - 3 2 5 2 2. - 0 - 3.2866070978343487e-003 - -0.0941056609153748 - 0.1441165059804916 - <_> - - <_> - - - - <_> - 17 3 8 2 -1. - <_> - 17 4 8 1 2. - 0 - -0.0417326614260674 - -0.6405817270278931 - 0.0221338905394077 - <_> - - <_> - - - - <_> - 0 7 5 4 -1. - <_> - 0 8 5 2 2. - 0 - 9.7638191655278206e-003 - 0.0412781611084938 - -0.3354279994964600 - <_> - - <_> - - - - <_> - 9 4 12 6 -1. - <_> - 13 4 4 6 3. - 0 - 0.1077456995844841 - 8.1762494519352913e-003 - -0.4347884058952332 - <_> - - <_> - - - - <_> - 4 4 12 6 -1. - <_> - 8 4 4 6 3. - 0 - 0.1119699031114578 - 0.0199715103954077 - -0.6503595113754273 - <_> - - <_> - - - - <_> - 11 0 12 9 -1. - <_> - 11 0 6 9 2. - 0 - 0.0680430680513382 - -0.0602735094726086 - 0.1384491026401520 - <_> - - <_> - - - - <_> - 4 5 16 8 -1. - <_> - 12 5 8 8 2. - 0 - 0.1206192970275879 - -0.0666261836886406 - 0.2128939926624298 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 0 - -2.7089789509773254e-003 - -0.4214768111705780 - 7.0062931627035141e-003 - <_> - - <_> - - - - <_> - 7 12 2 1 -1. - <_> - 8 12 1 1 2. - 0 - -9.8798991530202329e-005 - 0.1287330985069275 - -0.1178120002150536 - <_> - - <_> - - - - <_> - 19 3 6 4 -1. - <_> - 22 3 3 2 2. - <_> - 19 5 3 2 2. - 0 - 0.0177976898849010 - -0.0398075394332409 - 0.2582241892814636 - <_> - - <_> - - - - <_> - 8 10 6 3 -1. - <_> - 10 10 2 3 3. - 0 - -0.0155267501249909 - -0.5375617146492004 - 0.0254285801202059 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -1.1374800233170390e-003 - 0.1497129052877426 - -0.0317900516092777 - <_> - - <_> - - - - <_> - 0 0 24 2 -1. - <_> - 0 0 12 1 2. - <_> - 12 1 12 1 2. - 0 - 0.0219873897731304 - 0.0302675794810057 - -0.4156928062438965 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 5.9880971093662083e-005 - -0.0641673132777214 - 0.0799537077546120 - <_> - - <_> - - - - <_> - 0 3 6 4 -1. - <_> - 0 3 3 2 2. - <_> - 3 5 3 2 2. - 0 - 7.6966080814599991e-003 - -0.0727465227246284 - 0.1708455979824066 - <_> - - <_> - - - - <_> - 22 0 3 4 -1. - <_> - 22 2 3 2 2. - 0 - 6.2799488659948111e-004 - 0.0341552086174488 - -0.1379152983427048 - <_> - - <_> - - - - <_> - 11 0 2 3 -1. - <_> - 11 1 2 1 3. - 0 - -1.2622140347957611e-003 - 0.1615235060453415 - -0.0755578279495239 - <_> - - <_> - - - - <_> - 21 7 2 4 -1. - <_> - 20 8 2 2 2. - 1 - -0.0110059296712279 - -0.4823004007339478 - 0.0268340297043324 - <_> - - <_> - - - - <_> - 4 9 10 1 -1. - <_> - 9 9 5 1 2. - 0 - -9.5793791115283966e-003 - 0.1946887969970703 - -0.0669640377163887 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -9.1821959358640015e-005 - 0.0793757066130638 - -0.0674495473504066 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - 1.2134959688410163e-003 - -0.0511140711605549 - 0.2775780856609345 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 7.9206802183762193e-004 - -0.0284809302538633 - 0.1130611971020699 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - 2.7196949813514948e-003 - 0.0362051688134670 - -0.3822895884513855 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -7.0203691720962524e-003 - -0.7084425091743469 - 9.6215400844812393e-005 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - -7.4910762486979365e-004 - 0.1899659931659699 - -0.0707588419318199 - <_> - - <_> - - - - <_> - 8 9 9 6 -1. - <_> - 11 11 3 2 9. - 0 - -0.0300100892782211 - 0.1409595012664795 - -0.0833628922700882 - <_> - - <_> - - - - <_> - 0 5 2 6 -1. - <_> - 0 7 2 2 3. - 0 - 0.0211524497717619 - 0.0258801300078630 - -0.4697616100311279 - <_> - - <_> - - - - <_> - 14 4 4 7 -1. - <_> - 15 5 2 7 2. - 1 - -0.0319705903530121 - -0.5124071240425110 - 0.0121158296242356 - <_> - - <_> - - - - <_> - 2 13 20 2 -1. - <_> - 2 13 10 1 2. - <_> - 12 14 10 1 2. - 0 - 0.0105077195912600 - 0.0386607907712460 - -0.3098644018173218 - <_> - - <_> - - - - <_> - 23 7 2 2 -1. - <_> - 24 7 1 1 2. - <_> - 23 8 1 1 2. - 0 - 4.8152811359614134e-005 - -0.0616559796035290 - 0.0678063929080963 - <_> - - <_> - - - - <_> - 3 2 1 4 -1. - <_> - 3 3 1 2 2. - 0 - 9.6495117759332061e-004 - -0.0613585598766804 - 0.1991685926914215 - <_> - - <_> - - - - <_> - 11 2 14 4 -1. - <_> - 11 3 14 2 2. - 0 - -0.0404121391475201 - 0.1341411024332047 - -0.0717744380235672 - <_> - - <_> - - - - <_> - 5 7 4 5 -1. - <_> - 6 7 2 5 2. - 0 - 5.8856019750237465e-003 - 0.0359793491661549 - -0.3332307040691376 - <_> - - <_> - - - - <_> - 23 8 1 4 -1. - <_> - 22 9 1 2 2. - 1 - 5.3272489458322525e-003 - 0.0328989103436470 - -0.5153871178627014 - <_> - - <_> - - - - <_> - 2 0 10 8 -1. - <_> - 7 0 5 8 2. - 0 - 0.0532727986574173 - -0.0784574225544930 - 0.1582656949758530 - <_> - - <_> - - - - <_> - 1 5 24 3 -1. - <_> - 9 6 8 1 9. - 0 - 0.0174429006874561 - 0.1339583992958069 - -0.1186174973845482 - <_> - - <_> - - - - <_> - 10 0 4 10 -1. - <_> - 10 5 4 5 2. - 0 - -0.0433590598404408 - -0.2269790023565292 - 0.0467031300067902 - <_> - - <_> - - - - <_> - 5 4 15 3 -1. - <_> - 5 5 15 1 3. - 0 - -0.0231206398457289 - 0.1634031981229782 - -0.0685165524482727 - <_> - - <_> - - - - <_> - 11 6 3 6 -1. - <_> - 11 8 3 2 3. - 0 - -9.3796178698539734e-003 - 0.1582739949226379 - -0.0771108269691467 - <_> - - <_> - - - - <_> - 18 8 7 3 -1. - <_> - 18 9 7 1 3. - 0 - -0.0141222495585680 - -0.5691561102867127 - 0.0232016704976559 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 1 4 1 2. - 0 - -0.0155957797542214 - -0.7199953794479370 - 0.0111829601228237 - <_> - - <_> - - - - <_> - 20 0 2 1 -1. - <_> - 20 0 1 1 2. - 1 - 7.4529898120090365e-004 - -0.0766925588250160 - 0.0582969412207603 - <_> - - <_> - - - - <_> - 0 6 1 8 -1. - <_> - 0 8 1 4 2. - 0 - -5.1220599561929703e-003 - -0.4147517085075378 - 0.0252124201506376 - <_> - - <_> - - - - <_> - 23 7 2 2 -1. - <_> - 24 7 1 1 2. - <_> - 23 8 1 1 2. - 0 - -5.7267909141955897e-005 - 0.0905847102403641 - -0.0668906867504120 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - 8.8431767653673887e-004 - -0.0570513382554054 - 0.2420555055141449 - <_> - - <_> - - - - <_> - 24 8 1 4 -1. - <_> - 23 9 1 2 2. - 1 - -6.3992529176175594e-003 - -0.4766991138458252 - 0.0172231607139111 - <_> - - <_> - - - - <_> - 1 8 3 1 -1. - <_> - 2 9 1 1 3. - 1 - 3.4215620253235102e-003 - 0.0330659411847591 - -0.3505514860153198 - <_> - - <_> - - - - <_> - 21 7 2 2 -1. - <_> - 22 7 1 1 2. - <_> - 21 8 1 1 2. - 0 - 6.0761801432818174e-004 - -0.0633307918906212 - 0.1801937073469162 - <_> - - <_> - - - - <_> - 5 8 15 6 -1. - <_> - 5 10 15 2 3. - 0 - -0.0271245595067739 - 0.1347420066595078 - -0.0843034014105797 - <_> - - <_> - - - - <_> - 6 7 14 8 -1. - <_> - 6 9 14 4 2. - 0 - 0.0320383384823799 - -0.0676692426204681 - 0.1796665936708450 - <_> - - <_> - - - - <_> - 1 4 10 2 -1. - <_> - 1 5 10 1 2. - 0 - 7.2583961300551891e-003 - -0.0986167713999748 - 0.1166217997670174 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 6 1 1 9. - 0 - -3.7803640589118004e-003 - 0.1233021020889282 - -0.0477618910372257 - <_> - - <_> - - - - <_> - 0 4 7 3 -1. - <_> - 0 5 7 1 3. - 0 - 0.0392416305840015 - 0.0167705602943897 - -0.7329750061035156 - <_> - - <_> - - - - <_> - 21 7 2 2 -1. - <_> - 22 7 1 1 2. - <_> - 21 8 1 1 2. - 0 - -5.3865249356022105e-005 - 0.0850126668810844 - -0.0751027390360832 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - 8.2592968828976154e-004 - -0.0551505312323570 - 0.2059426009654999 - <_> - - <_> - - - - <_> - 22 9 1 3 -1. - <_> - 21 10 1 1 3. - 1 - -5.6403529015369713e-005 - 0.0762555226683617 - -0.0699946209788322 - <_> - - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 11 13 1 1 2. - <_> - 12 14 1 1 2. - 0 - -5.6928332196548581e-004 - -0.2483194023370743 - 0.0468857996165752 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - 0.0424826890230179 - -0.0344216786324978 - 0.1484764963388443 - <_> - - <_> - - - - <_> - 0 3 6 12 -1. - <_> - 0 3 3 6 2. - <_> - 3 9 3 6 2. - 0 - -0.0339534096419811 - 0.2843470871448517 - -0.0431083589792252 - <_> - - <_> - - - - <_> - 17 1 4 11 -1. - <_> - 18 1 2 11 2. - 0 - 0.0188998207449913 - 0.0142998602241278 - -0.4192070066928864 - <_> - - <_> - - - - <_> - 0 10 6 3 -1. - <_> - 0 11 6 1 3. - 0 - 1.9765710458159447e-003 - 0.0621932409703732 - -0.1786025017499924 - <_> - - <_> - - - - <_> - 23 11 2 1 -1. - <_> - 23 11 1 1 2. - 0 - -5.0894439482362941e-005 - 0.0948854833841324 - -0.0689786225557327 - <_> - - <_> - - - - <_> - 4 1 4 11 -1. - <_> - 5 1 2 11 2. - 0 - 0.0114915501326323 - 0.0331886112689972 - -0.3628959059715271 - <_> - - <_> - - - - <_> - 21 3 4 12 -1. - <_> - 23 3 2 6 2. - <_> - 21 9 2 6 2. - 0 - -0.0215106792747974 - 0.2759737968444824 - -0.0317491404712200 - <_> - - <_> - - - - <_> - 0 3 4 12 -1. - <_> - 0 3 2 6 2. - <_> - 2 9 2 6 2. - 0 - 0.0130551997572184 - -0.0830815583467484 - 0.1449849009513855 - <_> - - <_> - - - - <_> - 11 11 6 4 -1. - <_> - 11 12 6 2 2. - 0 - 6.6747581586241722e-003 - -0.0461902506649494 - 0.1383360028266907 - <_> - - <_> - - - - <_> - 6 11 13 4 -1. - <_> - 6 12 13 2 2. - 0 - -7.0616300217807293e-003 - 0.1968749016523361 - -0.0837985798716545 - <_> - - <_> - - - - <_> - 11 10 3 1 -1. - <_> - 12 10 1 1 3. - 0 - 6.1481661396101117e-004 - 0.0542011298239231 - -0.1981233954429627 - <_> - - <_> - - - - <_> - 5 2 13 8 -1. - <_> - 5 6 13 4 2. - 0 - 0.2860183119773865 - 0.0232954602688551 - -0.4173370003700256 - <_> - - <_> - - - - <_> - 15 2 10 6 -1. - <_> - 15 4 10 2 3. - 0 - 0.0463717207312584 - -0.0290123391896486 - 0.1808013021945953 - <_> - - <_> - - - - <_> - 0 2 10 6 -1. - <_> - 0 4 10 2 3. - 0 - -0.0557247512042522 - 0.1358146965503693 - -0.1061223000288010 - <_> - - <_> - - - - <_> - 12 1 13 8 -1. - <_> - 12 3 13 4 2. - 0 - -0.2584396898746491 - -0.4910731911659241 - 0.0151501996442676 - -1.3960490226745605 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 15 3 -1. - <_> - 5 4 15 1 3. - 0 - -0.0417404398322105 - 0.4202992916107178 - -0.1386588066816330 - <_> - - <_> - - - - <_> - 9 3 9 3 -1. - <_> - 9 4 9 1 3. - 0 - 0.0274386107921600 - -0.0691855624318123 - 0.6378138065338135 - <_> - - <_> - - - - <_> - 3 2 7 3 -1. - <_> - 2 3 7 1 3. - 1 - -0.0319233611226082 - 0.5562999844551086 - -0.0588022507727146 - <_> - - <_> - - - - <_> - 5 2 15 3 -1. - <_> - 5 3 15 1 3. - 0 - -0.0426339097321033 - 0.3957036137580872 - -0.0923223569989204 - <_> - - <_> - - - - <_> - 5 4 15 3 -1. - <_> - 5 5 15 1 3. - 0 - -0.0453329794108868 - 0.4831672012805939 - -0.0990284606814384 - <_> - - <_> - - - - <_> - 17 6 2 2 -1. - <_> - 18 6 1 1 2. - <_> - 17 7 1 1 2. - 0 - 1.4149550115689635e-003 - -0.0383210293948650 - 0.3782787919044495 - <_> - - <_> - - - - <_> - 5 10 2 3 -1. - <_> - 5 10 1 3 2. - 1 - 3.1844570767134428e-003 - 0.0845874175429344 - -0.3629348874092102 - <_> - - <_> - - - - <_> - 23 11 2 4 -1. - <_> - 23 13 2 2 2. - 0 - 7.9865548759698868e-003 - 0.0660245269536972 - -0.4990949034690857 - <_> - - <_> - - - - <_> - 0 11 14 4 -1. - <_> - 0 11 7 2 2. - <_> - 7 13 7 2 2. - 0 - 8.3637079223990440e-003 - -0.1568834036588669 - 0.1732781976461411 - <_> - - <_> - - - - <_> - 10 4 6 3 -1. - <_> - 10 5 6 1 3. - 0 - 0.0166161693632603 - -0.1092156991362572 - 0.3208172023296356 - <_> - - <_> - - - - <_> - 0 1 24 14 -1. - <_> - 0 1 12 7 2. - <_> - 12 8 12 7 2. - 0 - -0.1083723008632660 - -0.3144314885139465 - 0.0960887372493744 - <_> - - <_> - - - - <_> - 1 5 24 8 -1. - <_> - 13 5 12 4 2. - <_> - 1 9 12 4 2. - 0 - -0.0552641600370407 - -0.3238588869571686 - 0.0760045275092125 - <_> - - <_> - - - - <_> - 0 0 24 12 -1. - <_> - 0 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - 0.1263256967067719 - 0.0652572736144066 - -0.4011892974376679 - <_> - - <_> - - - - <_> - 10 0 15 14 -1. - <_> - 10 7 15 7 2. - 0 - 0.3880456089973450 - 0.0290472805500031 - -0.2850419878959656 - <_> - - <_> - - - - <_> - 1 11 2 1 -1. - <_> - 1 11 1 1 2. - 1 - 2.1647498942911625e-003 - 0.0566388815641403 - -0.4483107030391693 - <_> - - <_> - - - - <_> - 1 11 24 4 -1. - <_> - 1 11 12 4 2. - 0 - -0.0850358307361603 - 0.2374248951673508 - -0.1127642020583153 - <_> - - <_> - - - - <_> - 7 7 10 3 -1. - <_> - 7 8 10 1 3. - 0 - 0.0297137200832367 - -0.0403699316084385 - 0.4747174084186554 - <_> - - <_> - - - - <_> - 9 5 7 3 -1. - <_> - 9 6 7 1 3. - 0 - 0.0189488306641579 - -0.0794471576809883 - 0.2721098959445953 - <_> - - <_> - - - - <_> - 0 9 2 6 -1. - <_> - 0 11 2 2 3. - 0 - -5.4433820769190788e-003 - -0.4018659889698029 - 0.0573576912283897 - <_> - - <_> - - - - <_> - 22 8 3 2 -1. - <_> - 22 8 3 1 2. - 1 - -7.4416291899979115e-003 - -0.4642170965671539 - 0.0343283303081989 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 3.1745829619467258e-003 - -0.0719946026802063 - 0.2899833023548126 - <_> - - <_> - - - - <_> - 24 6 1 6 -1. - <_> - 24 8 1 2 3. - 0 - -4.6435040421783924e-003 - -0.4219543039798737 - 0.0394870713353157 - <_> - - <_> - - - - <_> - 3 3 7 2 -1. - <_> - 3 3 7 1 2. - 1 - -0.0225970800966024 - 0.2745698094367981 - -0.0772427767515183 - <_> - - <_> - - - - <_> - 10 4 6 10 -1. - <_> - 13 4 3 5 2. - <_> - 10 9 3 5 2. - 0 - 0.0175681803375483 - 0.0604698508977890 - -0.2755838930606842 - <_> - - <_> - - - - <_> - 0 3 14 6 -1. - <_> - 0 6 14 3 2. - 0 - 0.2285360991954804 - 0.0372774116694927 - -0.5375431180000305 - <_> - - <_> - - - - <_> - 9 0 8 8 -1. - <_> - 13 0 4 4 2. - <_> - 9 4 4 4 2. - 0 - 0.0323306396603584 - 0.0458961501717567 - -0.3844825029373169 - <_> - - <_> - - - - <_> - 3 4 5 3 -1. - <_> - 2 5 5 1 3. - 1 - -0.0285396501421928 - 0.5891790986061096 - -0.0340728089213371 - <_> - - <_> - - - - <_> - 18 9 7 6 -1. - <_> - 18 11 7 2 3. - 0 - 0.0286119598895311 - 0.0241741407662630 - -0.2325512021780014 - <_> - - <_> - - - - <_> - 0 9 7 6 -1. - <_> - 0 11 7 2 3. - 0 - 0.0190214607864618 - 0.0562911406159401 - -0.3404670059680939 - <_> - - <_> - - - - <_> - 12 1 3 3 -1. - <_> - 12 2 3 1 3. - 0 - -5.7942080311477184e-003 - 0.2392093986272812 - -0.0638626366853714 - <_> - - <_> - - - - <_> - 9 2 6 8 -1. - <_> - 9 2 3 4 2. - <_> - 12 6 3 4 2. - 0 - 0.0198575407266617 - 0.0513716302812099 - -0.3405377864837647 - <_> - - <_> - - - - <_> - 1 14 24 1 -1. - <_> - 7 14 12 1 2. - 0 - -0.0227794591337442 - 0.2922581136226654 - -0.0604945607483387 - <_> - - <_> - - - - <_> - 0 3 12 12 -1. - <_> - 0 3 6 6 2. - <_> - 6 9 6 6 2. - 0 - 0.1480142027139664 - -0.0343834199011326 - 0.4667116999626160 - <_> - - <_> - - - - <_> - 11 3 9 4 -1. - <_> - 14 3 3 4 3. - 0 - -0.0337039716541767 - -0.3770483136177063 - 0.0263036508113146 - <_> - - <_> - - - - <_> - 9 4 6 6 -1. - <_> - 9 4 3 3 2. - <_> - 12 7 3 3 2. - 0 - -0.0162283908575773 - -0.3382456898689270 - 0.0570861399173737 - <_> - - <_> - - - - <_> - 20 0 4 1 -1. - <_> - 20 0 2 1 2. - 1 - -4.2941919527947903e-003 - -0.3295148909091950 - 0.0434178002178669 - <_> - - <_> - - - - <_> - 8 3 9 4 -1. - <_> - 11 3 3 4 3. - 0 - -0.0235741101205349 - -0.3945200145244598 - 0.0398236103355885 - <_> - - <_> - - - - <_> - 14 4 6 9 -1. - <_> - 16 4 2 9 3. - 0 - 0.0218487493693829 - 0.0268086697906256 - -0.2596569955348969 - <_> - - <_> - - - - <_> - 5 4 6 9 -1. - <_> - 7 4 2 9 3. - 0 - -0.0209309905767441 - -0.3641955852508545 - 0.0437827892601490 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - 1.6019339673221111e-003 - -0.0240206904709339 - 0.2182880043983460 - <_> - - <_> - - - - <_> - 0 0 15 12 -1. - <_> - 0 4 15 4 3. - 0 - -0.5489655733108521 - -0.5673372149467468 - 0.0286840796470642 - <_> - - <_> - - - - <_> - 8 1 11 3 -1. - <_> - 8 2 11 1 3. - 0 - 0.0151870902627707 - -0.0816961303353310 - 0.2107073962688446 - <_> - - <_> - - - - <_> - 0 6 1 6 -1. - <_> - 0 8 1 2 3. - 0 - -3.0653451103717089e-003 - -0.3701387047767639 - 0.0471426397562027 - <_> - - <_> - - - - <_> - 14 5 1 3 -1. - <_> - 14 6 1 1 3. - 0 - -2.2847671061754227e-003 - 0.1813296973705292 - -0.0419041812419891 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 1.3886080123484135e-003 - -0.0477169714868069 - 0.3120515942573547 - <_> - - <_> - - - - <_> - 22 9 1 4 -1. - <_> - 21 10 1 2 2. - 1 - -4.2354268953204155e-003 - -0.3120726943016052 - 0.0365724302828312 - <_> - - <_> - - - - <_> - 10 5 5 3 -1. - <_> - 10 6 5 1 3. - 0 - 4.9234707839787006e-003 - -0.1105178967118263 - 0.1364745944738388 - <_> - - <_> - - - - <_> - 14 5 1 3 -1. - <_> - 14 6 1 1 3. - 0 - -9.7824353724718094e-004 - 0.1019112989306450 - -0.0396985597908497 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - 2.3952899500727654e-003 - 0.0345855616033077 - -0.4620797038078308 - <_> - - <_> - - - - <_> - 22 9 1 4 -1. - <_> - 21 10 1 2 2. - 1 - -2.7391599360271357e-005 - 0.0470036789774895 - -0.0576489008963108 - <_> - - <_> - - - - <_> - 3 9 4 1 -1. - <_> - 4 10 2 1 2. - 1 - -3.7895010318607092e-003 - -0.3904446959495544 - 0.0392708182334900 - <_> - - <_> - - - - <_> - 8 8 9 3 -1. - <_> - 8 9 9 1 3. - 0 - 0.0251507405191660 - -0.0313480608165264 - 0.4742729067802429 - <_> - - <_> - - - - <_> - 2 8 21 3 -1. - <_> - 9 9 7 1 9. - 0 - -0.0545641481876373 - 0.1494560986757278 - -0.0982013270258904 - <_> - - <_> - - - - <_> - 10 6 8 8 -1. - <_> - 12 6 4 8 2. - 0 - -0.0416621901094913 - -0.4245094060897827 - 0.0152987902984023 - <_> - - <_> - - - - <_> - 7 3 6 12 -1. - <_> - 9 3 2 12 3. - 0 - -0.0207394007593393 - -0.3218981921672821 - 0.0479229800403118 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 0 1 1 3. - 0 - -9.7902817651629448e-004 - 0.2330693006515503 - -0.0597994215786457 - <_> - - <_> - - - - <_> - 10 10 4 4 -1. - <_> - 11 10 2 4 2. - 0 - -4.1547799482941628e-003 - -0.3040251135826111 - 0.0456931404769421 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - -2.6045470804092474e-005 - 0.0553880184888840 - -0.0540977194905281 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 1.0567409917712212e-003 - -0.0526767596602440 - 0.2473292946815491 - <_> - - <_> - - - - <_> - 1 0 24 8 -1. - <_> - 13 0 12 4 2. - <_> - 1 4 12 4 2. - 0 - 0.1842923015356064 - 0.0165581107139587 - -0.5789644718170166 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - 1.4177090488374233e-003 - -0.0524071305990219 - 0.2524789869785309 - <_> - - <_> - - - - <_> - 21 12 4 3 -1. - <_> - 21 13 4 1 3. - 0 - -4.0882350876927376e-003 - -0.3066633939743042 - 0.0269502196460962 - <_> - - <_> - - - - <_> - 0 3 4 4 -1. - <_> - 0 3 2 2 2. - <_> - 2 5 2 2 2. - 0 - 8.5421912372112274e-003 - -0.0481166206300259 - 0.2716326117515564 - <_> - - <_> - - - - <_> - 19 0 2 3 -1. - <_> - 19 0 1 3 2. - 1 - 0.0195690393447876 - 0.0251199807971716 - -0.3371602892875671 - <_> - - <_> - - - - <_> - 2 2 15 6 -1. - <_> - 2 5 15 3 2. - 0 - 0.2677350938320160 - 0.0231193397194147 - -0.5075724124908447 - <_> - - <_> - - - - <_> - 5 0 15 2 -1. - <_> - 5 1 15 1 2. - 0 - -0.0326806083321571 - 0.2773688137531281 - -0.0481392890214920 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 1 2 2 2. - 0 - -5.0574508495628834e-003 - -0.3639586865901947 - 0.0363070890307426 - <_> - - <_> - - - - <_> - 23 1 2 12 -1. - <_> - 20 4 2 6 2. - 1 - 0.0791702270507813 - -0.0295530706644058 - 0.1632819026708603 - <_> - - <_> - - - - <_> - 4 2 2 3 -1. - <_> - 4 3 2 1 3. - 0 - 2.2955629974603653e-003 - -0.0644191280007362 - 0.1921634972095490 - <_> - - <_> - - - - <_> - 20 0 2 2 -1. - <_> - 20 0 1 2 2. - 1 - 2.1744619880337268e-004 - -0.1248127967119217 - 0.0513428300619125 - <_> - - <_> - - - - <_> - 0 12 4 3 -1. - <_> - 0 13 4 1 3. - 0 - -5.9793200343847275e-003 - -0.5400406122207642 - 0.0236572697758675 - <_> - - <_> - - - - <_> - 13 1 12 8 -1. - <_> - 13 3 12 4 2. - 0 - -0.2183004021644592 - -0.3002713024616242 - 0.0188296400010586 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 0 2 1 2. - 1 - -2.5782659649848938e-003 - -0.2936800122261047 - 0.0437353104352951 - <_> - - <_> - - - - <_> - 11 2 14 12 -1. - <_> - 11 8 14 6 2. - 0 - -0.1344317942857742 - -0.2982031106948853 - 0.0219516493380070 - <_> - - <_> - - - - <_> - 0 2 14 12 -1. - <_> - 0 8 14 6 2. - 0 - 0.3329834043979645 - 0.0417996607720852 - -0.3464672863483429 - <_> - - <_> - - - - <_> - 16 7 6 8 -1. - <_> - 18 7 2 8 3. - 0 - -0.0276046600192785 - -0.3169625997543335 - 0.0150398099794984 - <_> - - <_> - - - - <_> - 7 0 13 2 -1. - <_> - 7 0 13 1 2. - 1 - 0.0284599401056767 - 0.0311327595263720 - -0.4115855097770691 - <_> - - <_> - - - - <_> - 16 7 6 8 -1. - <_> - 18 7 2 8 3. - 0 - 0.0568751804530621 - 3.1998890917748213e-003 - -0.8496329784393311 - <_> - - <_> - - - - <_> - 3 7 6 8 -1. - <_> - 5 7 2 8 3. - 0 - -0.0264140591025352 - -0.4030340015888214 - 0.0285327993333340 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 8.2670920528471470e-004 - -0.0478886701166630 - 0.2083473950624466 - <_> - - <_> - - - - <_> - 12 5 3 6 -1. - <_> - 13 6 1 6 3. - 1 - -0.0174812003970146 - -0.4784274101257324 - 0.0261973403394222 - <_> - - <_> - - - - <_> - 20 2 1 6 -1. - <_> - 20 4 1 2 3. - 0 - 0.0102093704044819 - -0.0323491990566254 - 0.3333239853382111 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - -9.0442842338234186e-004 - 0.2252988964319229 - -0.0502184815704823 - <_> - - <_> - - - - <_> - 19 10 2 1 -1. - <_> - 19 10 1 1 2. - 0 - -5.5155509471660480e-005 - 0.0854163095355034 - -0.0922556668519974 - <_> - - <_> - - - - <_> - 6 4 8 2 -1. - <_> - 8 4 4 2 2. - 0 - -7.5864349491894245e-003 - -0.2745333909988403 - 0.0428331792354584 - <_> - - <_> - - - - <_> - 9 5 16 7 -1. - <_> - 13 5 8 7 2. - 0 - 0.0689363330602646 - -0.0362212397158146 - 0.2202139943838120 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 1.0017789900302887e-003 - -0.0464680194854736 - 0.2603206038475037 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -1.5333900228142738e-003 - 0.2831267118453980 - -0.0321949794888496 - <_> - - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 11 13 1 1 2. - <_> - 12 14 1 1 2. - 0 - 5.0275481771677732e-004 - 0.0547226108610630 - -0.2383649945259094 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 6.7827408201992512e-005 - -0.0391390211880207 - 0.0501381084322929 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -9.6863682847470045e-004 - 0.2108709067106247 - -0.0608406700193882 - <_> - - <_> - - - - <_> - 20 8 5 3 -1. - <_> - 20 9 5 1 3. - 0 - 0.0157267302274704 - 0.0115508204326034 - -0.8977199196815491 - <_> - - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 11 13 1 1 2. - <_> - 12 14 1 1 2. - 0 - -6.1983527848497033e-004 - -0.2865422964096069 - 0.0380632318556309 - <_> - - <_> - - - - <_> - 5 11 15 4 -1. - <_> - 5 12 15 2 2. - 0 - -0.0148898903280497 - 0.2188885957002640 - -0.0534253492951393 - <_> - - <_> - - - - <_> - 0 8 6 3 -1. - <_> - 0 9 6 1 3. - 0 - 9.1423774138092995e-003 - 0.0289719104766846 - -0.4331383109092712 - <_> - - <_> - - - - <_> - 19 10 2 1 -1. - <_> - 19 10 1 1 2. - 0 - 4.4567110307980329e-005 - -0.0493506006896496 - 0.0829902365803719 - <_> - - <_> - - - - <_> - 4 10 2 1 -1. - <_> - 5 10 1 1 2. - 0 - -4.6295441279653460e-005 - 0.1145173981785774 - -0.1154157966375351 - <_> - - <_> - - - - <_> - 1 0 24 6 -1. - <_> - 13 0 12 3 2. - <_> - 1 3 12 3 2. - 0 - -0.0951543077826500 - -0.3621807992458344 - 0.0389639586210251 - <_> - - <_> - - - - <_> - 5 1 2 5 -1. - <_> - 5 1 1 5 2. - 1 - 0.0114479204639792 - -0.0633771494030952 - 0.1799890995025635 - <_> - - <_> - - - - <_> - 21 3 4 12 -1. - <_> - 23 3 2 6 2. - <_> - 21 9 2 6 2. - 0 - 0.0168469492346048 - -0.0795559063553810 - 0.2080432027578354 - <_> - - <_> - - - - <_> - 0 3 4 12 -1. - <_> - 0 3 2 6 2. - <_> - 2 9 2 6 2. - 0 - -0.0195328295230865 - 0.3306660056114197 - -0.0368879809975624 - <_> - - <_> - - - - <_> - 24 2 1 6 -1. - <_> - 24 5 1 3 2. - 0 - -9.9951513111591339e-003 - -0.2601873874664307 - 0.0200320500880480 - <_> - - <_> - - - - <_> - 5 2 9 8 -1. - <_> - 8 2 3 8 3. - 0 - 0.0559661500155926 - 0.0298731103539467 - -0.3797968029975891 - <_> - - <_> - - - - <_> - 24 2 1 6 -1. - <_> - 24 5 1 3 2. - 0 - 0.0223989300429821 - 9.4442693516612053e-003 - -0.3070712089538574 - <_> - - <_> - - - - <_> - 0 2 1 6 -1. - <_> - 0 5 1 3 2. - 0 - -0.0111306598410010 - -0.4547461867332459 - 0.0237820893526077 - <_> - - <_> - - - - <_> - 9 6 9 4 -1. - <_> - 9 7 9 2 2. - 0 - 0.0103914495557547 - -0.0801509991288185 - 0.1017400026321411 - <_> - - <_> - - - - <_> - 11 6 3 4 -1. - <_> - 11 7 3 2 2. - 0 - -9.7076389938592911e-003 - 0.3220044970512390 - -0.0475250408053398 - <_> - - <_> - - - - <_> - 20 14 2 1 -1. - <_> - 20 14 1 1 2. - 0 - 1.9170529412804171e-005 - -0.0619046017527580 - 0.0758714973926544 - <_> - - <_> - - - - <_> - 0 8 6 4 -1. - <_> - 0 9 6 2 2. - 0 - -5.7660471647977829e-003 - -0.2893261909484863 - 0.0357113592326641 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -8.0189562868326902e-004 - 0.1487676948308945 - -0.0337995104491711 - <_> - - <_> - - - - <_> - 8 0 9 15 -1. - <_> - 11 5 3 5 9. - 0 - -0.4516898989677429 - -0.5800644755363464 - 0.0182942803949118 - <_> - - <_> - - - - <_> - 13 9 4 6 -1. - <_> - 14 9 2 6 2. - 0 - 7.1167000569403172e-003 - 0.0221952199935913 - -0.4342006146907806 - <_> - - <_> - - - - <_> - 8 2 9 3 -1. - <_> - 8 3 9 1 3. - 0 - 0.0214324798434973 - -0.0425198413431644 - 0.2711758911609650 - -1.3937480449676514 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 9 8 6 -1. - <_> - 0 9 4 3 2. - <_> - 4 12 4 3 2. - 0 - 8.8465185835957527e-003 - -0.2059727013111115 - 0.2158975005149841 - <_> - - <_> - - - - <_> - 20 1 5 4 -1. - <_> - 20 3 5 2 2. - 0 - -0.0114869000390172 - 0.1450283974409103 - -0.2512278854846954 - <_> - - <_> - - - - <_> - 4 3 16 7 -1. - <_> - 8 3 8 7 2. - 0 - 0.0613779015839100 - -0.1210888996720314 - 0.2893109023571014 - <_> - - <_> - - - - <_> - 15 0 10 8 -1. - <_> - 15 2 10 4 2. - 0 - -0.0514667406678200 - 0.0770430117845535 - -0.1447598934173584 - <_> - - <_> - - - - <_> - 0 2 24 10 -1. - <_> - 0 2 12 5 2. - <_> - 12 7 12 5 2. - 0 - 0.0990432873368263 - 0.0879464074969292 - -0.3668490052223206 - <_> - - <_> - - - - <_> - 20 9 5 4 -1. - <_> - 20 10 5 2 2. - 0 - 6.0240789316594601e-003 - 0.0559716187417507 - -0.4230535030364990 - <_> - - <_> - - - - <_> - 0 14 22 1 -1. - <_> - 11 14 11 1 2. - 0 - 9.3228947371244431e-003 - -0.1488721966743469 - 0.1423504054546356 - <_> - - <_> - - - - <_> - 22 0 3 12 -1. - <_> - 22 0 3 6 2. - 1 - -0.0837828367948532 - -0.0506230294704437 - 0.0671857669949532 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 1 4 1 2 2. - 0 - -1.4369570417329669e-003 - 0.1669974029064179 - -0.1184794977307320 - <_> - - <_> - - - - <_> - 20 9 5 4 -1. - <_> - 20 10 5 2 2. - 0 - -8.4923747926950455e-003 - -0.5746508240699768 - 0.0469529181718826 - <_> - - <_> - - - - <_> - 0 9 5 4 -1. - <_> - 0 10 5 2 2. - 0 - 6.1581619083881378e-003 - 0.0387838594615459 - -0.4179377853870392 - <_> - - <_> - - - - <_> - 7 3 18 6 -1. - <_> - 13 5 6 2 9. - 0 - 0.3882668018341065 - -0.0341588892042637 - 0.3883490860462189 - <_> - - <_> - - - - <_> - 4 10 10 1 -1. - <_> - 9 10 5 1 2. - 0 - -6.2880381010472775e-003 - 0.1877942979335785 - -0.1096756979823113 - <_> - - <_> - - - - <_> - 21 1 4 10 -1. - <_> - 21 1 2 10 2. - 1 - -0.0886473506689072 - 0.2961074113845825 - -0.0496502704918385 - <_> - - <_> - - - - <_> - 4 1 10 4 -1. - <_> - 4 1 10 2 2. - 1 - 0.0573849491775036 - -0.0621429793536663 - 0.4039953947067261 - <_> - - <_> - - - - <_> - 16 8 4 7 -1. - <_> - 17 8 2 7 2. - 0 - 6.3049891032278538e-003 - 0.0302408598363400 - -0.2553277909755707 - <_> - - <_> - - - - <_> - 5 8 4 7 -1. - <_> - 6 8 2 7 2. - 0 - -0.0128176100552082 - -0.7491502761840820 - 0.0188356805592775 - <_> - - <_> - - - - <_> - 6 0 13 2 -1. - <_> - 6 1 13 1 2. - 0 - 6.5159690566360950e-003 - -0.0749715119600296 - 0.1975888013839722 - <_> - - <_> - - - - <_> - 0 12 8 3 -1. - <_> - 0 13 8 1 3. - 0 - 8.2992920652031898e-003 - 0.0329895503818989 - -0.4346657097339630 - <_> - - <_> - - - - <_> - 22 0 2 1 -1. - <_> - 22 0 1 1 2. - 1 - 6.3911718316376209e-003 - 0.0297571904957294 - -0.3072845935821533 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - 6.8949637352488935e-005 - -0.1729405969381332 - 0.0927027910947800 - <_> - - <_> - - - - <_> - 17 3 8 8 -1. - <_> - 21 3 4 4 2. - <_> - 17 7 4 4 2. - 0 - 0.0413548089563847 - -0.0279047600924969 - 0.1629645973443985 - <_> - - <_> - - - - <_> - 6 2 13 6 -1. - <_> - 6 4 13 2 3. - 0 - 0.1899937987327576 - -0.0312954708933830 - 0.4835174977779388 - <_> - - <_> - - - - <_> - 10 0 15 14 -1. - <_> - 10 7 15 7 2. - 0 - -0.1273290067911148 - -0.4309565126895905 - 0.0414485186338425 - <_> - - <_> - - - - <_> - 1 1 12 1 -1. - <_> - 1 1 6 1 2. - 1 - -0.0356059707701206 - -0.2009662985801697 - 0.0775555819272995 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - -7.2760661132633686e-003 - 0.1169442981481552 - -0.0564889013767242 - <_> - - <_> - - - - <_> - 7 11 6 4 -1. - <_> - 9 11 2 4 3. - 0 - -0.0167282801121473 - -0.5582438707351685 - 0.0246787108480930 - <_> - - <_> - - - - <_> - 20 4 5 6 -1. - <_> - 20 6 5 2 3. - 0 - 3.5163350403308868e-003 - -0.1312393993139267 - 0.0638676136732101 - <_> - - <_> - - - - <_> - 1 12 5 3 -1. - <_> - 1 13 5 1 3. - 0 - -3.7709469906985760e-003 - -0.3320902884006500 - 0.0413776598870754 - <_> - - <_> - - - - <_> - 1 0 24 2 -1. - <_> - 13 0 12 1 2. - <_> - 1 1 12 1 2. - 0 - -0.0138869602233171 - -0.3127424120903015 - 0.0425702482461929 - <_> - - <_> - - - - <_> - 3 3 5 3 -1. - <_> - 2 4 5 1 3. - 1 - 9.3537326902151108e-003 - -0.0667856708168983 - 0.1907455027103424 - <_> - - <_> - - - - <_> - 17 6 8 4 -1. - <_> - 19 6 4 4 2. - 0 - -0.0194346699863672 - 0.3152694106101990 - -0.0473581515252590 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - 6.2511018477380276e-003 - 0.0309588797390461 - -0.3830946981906891 - <_> - - <_> - - - - <_> - 23 0 2 4 -1. - <_> - 23 2 2 2 2. - 0 - -0.0252969004213810 - -0.2962245941162109 - 0.0151915997266769 - <_> - - <_> - - - - <_> - 0 0 3 6 -1. - <_> - 0 3 3 3 2. - 0 - -3.0754129402339458e-003 - 0.0729133188724518 - -0.1764045059680939 - <_> - - <_> - - - - <_> - 11 1 14 2 -1. - <_> - 18 1 7 1 2. - <_> - 11 2 7 1 2. - 0 - 7.8001008369028568e-003 - -0.0501575507223606 - 0.1162889003753662 - <_> - - <_> - - - - <_> - 0 1 14 2 -1. - <_> - 0 1 7 1 2. - <_> - 7 2 7 1 2. - 0 - -7.7680540271103382e-003 - 0.2415755987167358 - -0.0778944417834282 - <_> - - <_> - - - - <_> - 5 4 15 6 -1. - <_> - 5 6 15 2 3. - 0 - -0.0880923122167587 - 0.2515082955360413 - -0.0482993088662624 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 10 8 2 1 2. - 0 - -1.7023129621520638e-003 - 0.1797576993703842 - -0.0970716699957848 - <_> - - <_> - - - - <_> - 13 2 8 5 -1. - <_> - 15 4 4 5 2. - 1 - -0.0997034236788750 - -0.4700092971324921 - 0.0155829498544335 - <_> - - <_> - - - - <_> - 2 9 2 2 -1. - <_> - 2 9 1 2 2. - 1 - 4.6657170169055462e-003 - 0.0295135807245970 - -0.4018146991729736 - <_> - - <_> - - - - <_> - 12 8 6 3 -1. - <_> - 14 8 2 3 3. - 0 - -0.0176613796502352 - -0.5449513792991638 - 0.0168585199862719 - <_> - - <_> - - - - <_> - 0 9 24 6 -1. - <_> - 8 11 8 2 9. - 0 - -0.2230933010578156 - 0.1843273043632507 - -0.0632233396172524 - <_> - - <_> - - - - <_> - 1 12 24 3 -1. - <_> - 9 13 8 1 9. - 0 - 0.0528507791459560 - -0.0734771713614464 - 0.1994421929121018 - <_> - - <_> - - - - <_> - 5 11 15 4 -1. - <_> - 5 13 15 2 2. - 0 - -0.0246656592935324 - 0.2699545025825501 - -0.0523515492677689 - <_> - - <_> - - - - <_> - 24 10 1 4 -1. - <_> - 23 11 1 2 2. - 1 - -4.9799769185483456e-003 - -0.4495851993560791 - 0.0269833803176880 - <_> - - <_> - - - - <_> - 1 10 4 1 -1. - <_> - 2 11 2 1 2. - 1 - 3.0535869300365448e-003 - 0.0375075116753578 - -0.3464896082878113 - <_> - - <_> - - - - <_> - 15 1 10 14 -1. - <_> - 15 8 10 7 2. - 0 - -0.0263100396841764 - -0.1766241043806076 - 0.0256136003881693 - <_> - - <_> - - - - <_> - 0 7 4 2 -1. - <_> - 2 7 2 2 2. - 0 - -4.8684021458029747e-003 - 0.1877097040414810 - -0.0605575516819954 - <_> - - <_> - - - - <_> - 20 4 5 6 -1. - <_> - 20 6 5 2 3. - 0 - 0.0458405800163746 - 0.0330421291291714 - -0.2026686072349548 - <_> - - <_> - - - - <_> - 0 4 7 6 -1. - <_> - 0 6 7 2 3. - 0 - 6.7487969063222408e-003 - -0.1384654939174652 - 0.1144922971725464 - <_> - - <_> - - - - <_> - 11 7 6 3 -1. - <_> - 11 8 6 1 3. - 0 - 0.0107938302680850 - -0.0550474487245083 - 0.1810662001371384 - <_> - - <_> - - - - <_> - 8 10 9 1 -1. - <_> - 11 10 3 1 3. - 0 - -0.0132016502320766 - -0.4654887914657593 - 0.0258085392415524 - <_> - - <_> - - - - <_> - 5 10 15 1 -1. - <_> - 10 10 5 1 3. - 0 - -4.9963342025876045e-003 - 0.1138966009020805 - -0.1140139997005463 - <_> - - <_> - - - - <_> - 7 8 6 3 -1. - <_> - 9 8 2 3 3. - 0 - -0.0158193595707417 - -0.4853562116622925 - 0.0220876205712557 - <_> - - <_> - - - - <_> - 23 12 2 1 -1. - <_> - 23 12 1 1 2. - 0 - 6.8264620495028794e-005 - -0.0819193720817566 - 0.0840993970632553 - <_> - - <_> - - - - <_> - 0 13 24 2 -1. - <_> - 0 13 12 1 2. - <_> - 12 14 12 1 2. - 0 - -0.0156373791396618 - -0.4515635073184967 - 0.0227358005940914 - <_> - - <_> - - - - <_> - 9 9 7 3 -1. - <_> - 9 10 7 1 3. - 0 - 8.3005577325820923e-003 - -0.0514142103493214 - 0.2212347984313965 - <_> - - <_> - - - - <_> - 0 6 2 4 -1. - <_> - 0 7 2 2 2. - 0 - 6.6999751143157482e-003 - 0.0297896005213261 - -0.3543488979339600 - <_> - - <_> - - - - <_> - 18 2 5 4 -1. - <_> - 18 3 5 2 2. - 0 - 5.1744161173701286e-003 - -0.0496886894106865 - 0.2202914059162140 - <_> - - <_> - - - - <_> - 1 4 8 2 -1. - <_> - 1 4 4 1 2. - <_> - 5 5 4 1 2. - 0 - 6.1278040520846844e-003 - -0.0630758926272392 - 0.1783366054296494 - <_> - - <_> - - - - <_> - 21 8 4 4 -1. - <_> - 21 9 4 2 2. - 0 - 6.8791587837040424e-003 - 0.0284415297210217 - -0.2993854880332947 - <_> - - <_> - - - - <_> - 4 4 8 4 -1. - <_> - 4 5 8 2 2. - 0 - -0.0217361003160477 - 0.1791318953037262 - -0.0602877512574196 - <_> - - <_> - - - - <_> - 11 4 14 4 -1. - <_> - 11 5 14 2 2. - 0 - 0.0140090202912688 - -0.1060196980834007 - 0.1548174023628235 - <_> - - <_> - - - - <_> - 3 0 18 9 -1. - <_> - 12 0 9 9 2. - 0 - 0.2186813950538635 - -0.0483517609536648 - 0.2573468983173370 - <_> - - <_> - - - - <_> - 3 0 20 15 -1. - <_> - 3 0 10 15 2. - 0 - 0.2838009893894196 - -0.0509055890142918 - 0.2936053872108460 - <_> - - <_> - - - - <_> - 12 1 6 8 -1. - <_> - 14 3 2 8 3. - 1 - 0.1209316030144692 - 0.0173095706850290 - -0.6926872134208679 - <_> - - <_> - - - - <_> - 17 4 1 9 -1. - <_> - 14 7 1 3 3. - 1 - 0.0569618307054043 - -0.0186788197606802 - 0.3227567970752716 - <_> - - <_> - - - - <_> - 6 7 4 8 -1. - <_> - 7 7 2 8 2. - 0 - -9.0500963851809502e-003 - -0.4240661859512329 - 0.0268415194004774 - <_> - - <_> - - - - <_> - 21 5 4 3 -1. - <_> - 21 6 4 1 3. - 0 - 0.0231182798743248 - 0.0105462800711393 - -0.5228689908981323 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - 1.1480690445750952e-003 - -0.0459857396781445 - 0.2319914996623993 - <_> - - <_> - - - - <_> - 21 8 4 3 -1. - <_> - 21 9 4 1 3. - 0 - -9.8909307271242142e-003 - -0.5407552123069763 - 0.0142617002129555 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 7.0599978789687157e-004 - -0.0649549588561058 - 0.1677557975053787 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -8.2311293226666749e-005 - 0.0727679133415222 - -0.0542482398450375 - <_> - - <_> - - - - <_> - 0 8 4 3 -1. - <_> - 0 9 4 1 3. - 0 - 5.3380471654236317e-003 - 0.0320924408733845 - -0.3186857998371124 - <_> - - <_> - - - - <_> - 20 9 2 2 -1. - <_> - 21 9 1 1 2. - <_> - 20 10 1 1 2. - 0 - 5.9835889260284603e-005 - -0.0492977797985077 - 0.0571143105626106 - <_> - - <_> - - - - <_> - 3 9 2 2 -1. - <_> - 3 9 1 1 2. - <_> - 4 10 1 1 2. - 0 - 4.0741640987107530e-005 - -0.0992263928055763 - 0.1105673015117645 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - -0.0271146595478058 - 0.2459900975227356 - -0.0621489509940147 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -8.8477227836847305e-004 - 0.2023449987173080 - -0.0529261194169521 - <_> - - <_> - - - - <_> - 7 4 12 3 -1. - <_> - 7 5 12 1 3. - 0 - -0.0192636791616678 - 0.1516259014606476 - -0.0715369805693626 - <_> - - <_> - - - - <_> - 0 0 11 2 -1. - <_> - 0 1 11 1 2. - 0 - 9.6891522407531738e-003 - 0.0357108712196350 - -0.3255082964897156 - <_> - - <_> - - - - <_> - 13 2 6 5 -1. - <_> - 15 2 2 5 3. - 0 - -0.0228419005870819 - -0.3499914109706879 - 0.0171892996877432 - <_> - - <_> - - - - <_> - 0 0 24 10 -1. - <_> - 0 0 12 5 2. - <_> - 12 5 12 5 2. - 0 - -0.1477797031402588 - -0.4319078028202057 - 0.0216299500316381 - <_> - - <_> - - - - <_> - 20 4 2 3 -1. - <_> - 20 5 2 1 3. - 0 - 2.3399880155920982e-003 - -0.0442668199539185 - 0.0963377729058266 - <_> - - <_> - - - - <_> - 0 3 7 4 -1. - <_> - 0 4 7 2 2. - 0 - -0.0728321895003319 - -0.8186188936233521 - 0.0117990002036095 - <_> - - <_> - - - - <_> - 11 1 14 14 -1. - <_> - 11 8 14 7 2. - 0 - -0.3072721064090729 - -0.7007309198379517 - 3.5564110148698092e-003 - <_> - - <_> - - - - <_> - 6 2 6 5 -1. - <_> - 8 2 2 5 3. - 0 - -0.0207666493952274 - -0.3913905024528503 - 0.0246222894638777 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -3.6341920495033264e-003 - -0.4501088857650757 - 5.5562350898981094e-003 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -7.0794070779811591e-005 - 0.1087834984064102 - -0.0905004590749741 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -8.8314860477112234e-005 - 0.0641764104366302 - -0.0494646318256855 - <_> - - <_> - - - - <_> - 2 0 20 1 -1. - <_> - 7 0 10 1 2. - 0 - -0.0110706500709057 - 0.1473083049058914 - -0.0670493170619011 - <_> - - <_> - - - - <_> - 11 0 14 1 -1. - <_> - 11 0 7 1 2. - 0 - 6.3626351766288280e-003 - -0.0400333292782307 - 0.0926633775234222 - <_> - - <_> - - - - <_> - 9 3 6 2 -1. - <_> - 9 4 6 1 2. - 0 - -7.7499519102275372e-003 - 0.1392461061477661 - -0.0774780735373497 - <_> - - <_> - - - - <_> - 11 3 3 4 -1. - <_> - 11 4 3 2 2. - 0 - 4.7532729804515839e-003 - -0.0729171708226204 - 0.1706562042236328 - <_> - - <_> - - - - <_> - 0 11 18 3 -1. - <_> - 6 12 6 1 9. - 0 - -0.0168079808354378 - 0.1308007985353470 - -0.0801806673407555 - <_> - - <_> - - - - <_> - 15 3 10 12 -1. - <_> - 20 3 5 6 2. - <_> - 15 9 5 6 2. - 0 - 0.1279494017362595 - -0.0199226494878531 - 0.3711799085140228 - <_> - - <_> - - - - <_> - 0 3 14 3 -1. - <_> - 0 4 14 1 3. - 0 - -0.0181895997375250 - 0.1235873028635979 - -0.0830406174063683 - <_> - - <_> - - - - <_> - 9 4 8 3 -1. - <_> - 11 4 4 3 2. - 0 - -0.0161725897341967 - -0.4490650892257690 - 0.0227566491812468 - <_> - - <_> - - - - <_> - 0 12 2 1 -1. - <_> - 1 12 1 1 2. - 0 - 6.8046152591705322e-005 - -0.1011824011802673 - 0.0935735777020454 - <_> - - <_> - - - - <_> - 23 13 2 2 -1. - <_> - 24 13 1 1 2. - <_> - 23 14 1 1 2. - 0 - 1.1714019638020545e-004 - -0.0810816064476967 - 0.1062628999352455 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 13 1 1 2. - <_> - 1 14 1 1 2. - 0 - 5.4521678976016119e-005 - -0.0932891815900803 - 0.1159989982843399 - <_> - - <_> - - - - <_> - 9 12 8 1 -1. - <_> - 11 12 4 1 2. - 0 - -9.5095802098512650e-003 - -0.5051903724670410 - 0.0141592798754573 - <_> - - <_> - - - - <_> - 0 7 6 4 -1. - <_> - 0 8 6 2 2. - 0 - -2.8461390174925327e-003 - -0.1991575956344605 - 0.0473652109503746 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - 0.0232862401753664 - -0.0403292290866375 - 0.0805157274007797 - <_> - - <_> - - - - <_> - 0 3 6 12 -1. - <_> - 0 3 3 6 2. - <_> - 3 9 3 6 2. - 0 - -0.0426056496798992 - 0.3344807922840118 - -0.0383727103471756 - <_> - - <_> - - - - <_> - 23 7 2 4 -1. - <_> - 23 8 2 2 2. - 0 - 4.5101181603968143e-003 - 0.0263549294322729 - -0.2349215000867844 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - 6.1817811802029610e-003 - 0.0211725104600191 - -0.4420514106750488 - <_> - - <_> - - - - <_> - 13 7 8 4 -1. - <_> - 17 7 4 2 2. - <_> - 13 9 4 2 2. - 0 - -0.0106069697067142 - 0.0654574930667877 - -0.0324725992977619 - <_> - - <_> - - - - <_> - 0 1 10 14 -1. - <_> - 0 8 10 7 2. - 0 - -0.0858135819435120 - -0.3406231105327606 - 0.0301514994353056 - <_> - - <_> - - - - <_> - 9 8 7 3 -1. - <_> - 9 9 7 1 3. - 0 - 6.2758061103522778e-003 - -0.0619911886751652 - 0.1503033936023712 - <_> - - <_> - - - - <_> - 9 8 3 4 -1. - <_> - 9 9 3 2 2. - 0 - -3.0965260230004787e-003 - 0.1481299996376038 - -0.0813362672924995 - <_> - - <_> - - - - <_> - 18 10 2 3 -1. - <_> - 17 11 2 1 3. - 1 - -0.0111239803954959 - -0.4638158082962036 - 0.0152134699746966 - <_> - - <_> - - - - <_> - 7 10 3 2 -1. - <_> - 8 11 1 2 3. - 1 - -0.0111039802432060 - -0.6005380153656006 - 0.0135854296386242 - <_> - - <_> - - - - <_> - 23 0 2 1 -1. - <_> - 23 0 1 1 2. - 1 - -3.2944830600172281e-003 - -0.4641366004943848 - 0.0262269694358110 - <_> - - <_> - - - - <_> - 12 8 4 3 -1. - <_> - 12 8 2 3 2. - 1 - 0.0113766100257635 - -0.0565435998141766 - 0.1575082987546921 - <_> - - <_> - - - - <_> - 5 7 15 3 -1. - <_> - 10 8 5 1 9. - 0 - -0.0294652003794909 - 0.1486423015594482 - -0.0651882514357567 - <_> - - <_> - - - - <_> - 0 0 20 8 -1. - <_> - 10 0 10 8 2. - 0 - 0.0491673015058041 - -0.0922251716256142 - 0.1015425994992256 - <_> - - <_> - - - - <_> - 21 0 4 3 -1. - <_> - 20 1 4 1 3. - 1 - -0.0209590997546911 - 0.1749638020992279 - -0.0255501996725798 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 5.4627470672130585e-003 - -0.0626592189073563 - 0.1695216000080109 - <_> - - <_> - - - - <_> - 18 3 5 2 -1. - <_> - 18 4 5 1 2. - 0 - -4.3515427969396114e-003 - 0.0822615697979927 - -0.0598390214145184 - <_> - - <_> - - - - <_> - 2 3 5 2 -1. - <_> - 2 4 5 1 2. - 0 - 7.4772499501705170e-003 - -0.0495455190539360 - 0.2469687014818192 - <_> - - <_> - - - - <_> - 13 0 2 5 -1. - <_> - 13 0 1 5 2. - 1 - -0.0374278612434864 - -0.9178332090377808 - 3.5620180424302816e-003 - <_> - - <_> - - - - <_> - 5 12 6 3 -1. - <_> - 7 13 2 1 9. - 0 - -0.0248439908027649 - -0.4893918037414551 - 0.0171825792640448 - <_> - - <_> - - - - <_> - 13 0 2 5 -1. - <_> - 13 0 1 5 2. - 1 - 8.0120442435145378e-003 - 0.0217423699796200 - -0.0648176670074463 - <_> - - <_> - - - - <_> - 9 6 4 2 -1. - <_> - 9 7 4 1 2. - 0 - 5.7306028902530670e-003 - -0.0707883909344673 - 0.1390995979309082 - <_> - - <_> - - - - <_> - 18 9 4 3 -1. - <_> - 18 10 4 1 3. - 0 - 0.0109893204644322 - 7.0361187681555748e-003 - -0.3556833863258362 - <_> - - <_> - - - - <_> - 3 9 4 3 -1. - <_> - 3 10 4 1 3. - 0 - -3.5342550836503506e-003 - -0.2303902953863144 - 0.0395394414663315 - <_> - - <_> - - - - <_> - 7 9 15 6 -1. - <_> - 7 12 15 3 2. - 0 - 0.0326121784746647 - -0.0834509506821632 - 0.0961622893810272 - <_> - - <_> - - - - <_> - 4 1 12 6 -1. - <_> - 4 1 6 3 2. - <_> - 10 4 6 3 2. - 0 - -0.0519190989434719 - -0.3597438931465149 - 0.0235583093017340 - <_> - - <_> - - - - <_> - 10 5 14 10 -1. - <_> - 10 10 14 5 2. - 0 - 0.2802706062793732 - 0.0191025994718075 - -0.2738722860813141 - <_> - - <_> - - - - <_> - 10 6 2 3 -1. - <_> - 10 7 2 1 3. - 0 - -1.8680640496313572e-003 - 0.1557087004184723 - -0.0592420399188995 - <_> - - <_> - - - - <_> - 13 4 4 6 -1. - <_> - 14 5 2 6 2. - 1 - 0.0412711799144745 - 9.2102894559502602e-003 - -0.6225361824035645 - <_> - - <_> - - - - <_> - 12 4 6 4 -1. - <_> - 11 5 6 2 2. - 1 - -0.0341574586927891 - -0.6910676956176758 - 0.0140588199719787 - <_> - - <_> - - - - <_> - 19 0 5 3 -1. - <_> - 19 1 5 1 3. - 0 - 0.0281112492084503 - 6.3892039470374584e-003 - -0.6016489267349243 - <_> - - <_> - - - - <_> - 6 7 3 1 -1. - <_> - 7 7 1 1 3. - 0 - -9.7675784491002560e-004 - 0.1663821935653687 - -0.0533109381794930 - <_> - - <_> - - - - <_> - 19 0 5 3 -1. - <_> - 19 1 5 1 3. - 0 - -0.0284041091799736 - -0.8431190848350525 - 4.9202498048543930e-003 - <_> - - <_> - - - - <_> - 6 7 3 1 -1. - <_> - 7 7 1 1 3. - 0 - 9.7658135928213596e-004 - -0.0524366609752178 - 0.1696853935718536 - <_> - - <_> - - - - <_> - 11 0 6 15 -1. - <_> - 13 0 2 15 3. - 0 - -0.0793864428997040 - -0.7418122291564941 - 4.5842900872230530e-003 - <_> - - <_> - - - - <_> - 0 2 2 6 -1. - <_> - 0 2 1 3 2. - <_> - 1 5 1 3 2. - 0 - 2.9205000028014183e-003 - -0.0499707907438278 - 0.1705241948366165 - <_> - - <_> - - - - <_> - 21 0 2 1 -1. - <_> - 21 0 1 1 2. - 1 - -4.9792099744081497e-003 - -0.4247047007083893 - 0.0113332699984312 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 7.5309360399842262e-003 - 0.0200634505599737 - -0.4817556142807007 - <_> - - <_> - - - - <_> - 9 0 14 8 -1. - <_> - 9 0 7 8 2. - 0 - -0.1206317022442818 - 0.1783839017152786 - -0.0404023304581642 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - 6.4506952185183764e-005 - -0.0858542472124100 - 0.1069532036781311 - <_> - - <_> - - - - <_> - 4 6 18 4 -1. - <_> - 4 6 9 4 2. - 0 - 0.1407386958599091 - -0.0227742493152618 - 0.4258378148078919 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - 5.8708712458610535e-004 - -0.0585701502859592 - 0.1556326001882553 - <_> - - <_> - - - - <_> - 23 7 2 2 -1. - <_> - 24 7 1 1 2. - <_> - 23 8 1 1 2. - 0 - 4.2137140553677455e-005 - -0.0576708205044270 - 0.0648988783359528 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - -5.4859159718034789e-005 - 0.1383187025785446 - -0.0935516208410263 - <_> - - <_> - - - - <_> - 23 7 2 2 -1. - <_> - 24 7 1 1 2. - <_> - 23 8 1 1 2. - 0 - -8.1318263255525380e-005 - 0.0786737129092216 - -0.0584529899060726 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - 1.0710170317906886e-004 - -0.1036069020628929 - 0.1105291023850441 - <_> - - <_> - - - - <_> - 24 6 1 4 -1. - <_> - 24 7 1 2 2. - 0 - 5.9485197998583317e-003 - 0.0124739902094007 - -0.6046726703643799 - <_> - - <_> - - - - <_> - 0 6 1 4 -1. - <_> - 0 7 1 2 2. - 0 - -3.8341151084750891e-003 - -0.5651066899299622 - 0.0139579800888896 - <_> - - <_> - - - - <_> - 11 0 6 15 -1. - <_> - 13 0 2 15 3. - 0 - 0.0481832996010780 - 6.8787620402872562e-003 - -0.2265198975801468 - <_> - - <_> - - - - <_> - 0 1 2 3 -1. - <_> - 0 2 2 1 3. - 0 - 9.8468521609902382e-003 - 0.0149204200133681 - -0.5408421754837036 - <_> - - <_> - - - - <_> - 8 1 9 3 -1. - <_> - 8 2 9 1 3. - 0 - 7.0795980282127857e-003 - -0.0740584135055542 - 0.1212510019540787 - <_> - - <_> - - - - <_> - 8 1 3 3 -1. - <_> - 9 2 1 1 9. - 0 - -1.7187669873237610e-003 - 0.1150275021791458 - -0.0767944231629372 - <_> - - <_> - - - - <_> - 19 7 5 3 -1. - <_> - 18 8 5 1 3. - 1 - 0.0141321197152138 - 0.0222348105162382 - -0.3713991045951843 - <_> - - <_> - - - - <_> - 6 7 3 5 -1. - <_> - 7 8 1 5 3. - 1 - -8.0704037100076675e-003 - -0.2536310851573944 - 0.0307344105094671 - <_> - - <_> - - - - <_> - 1 0 24 14 -1. - <_> - 13 0 12 7 2. - <_> - 1 7 12 7 2. - 0 - 0.2283755987882614 - 0.0168569702655077 - -0.5456647872924805 - <_> - - <_> - - - - <_> - 8 11 9 4 -1. - <_> - 8 12 9 2 2. - 0 - -0.0106975501403213 - 0.1705504059791565 - -0.0482324399054050 - <_> - - <_> - - - - <_> - 6 11 14 4 -1. - <_> - 6 12 14 2 2. - 0 - 6.1057992279529572e-003 - -0.0747807994484901 - 0.1244964972138405 - <_> - - <_> - - - - <_> - 0 11 3 4 -1. - <_> - 0 12 3 2 2. - 0 - 3.5825320519506931e-003 - 0.0343106091022491 - -0.2529211938381195 - <_> - - <_> - - - - <_> - 17 11 8 2 -1. - <_> - 17 12 8 1 2. - 0 - 8.7969396263360977e-003 - 0.0227318406105042 - -0.2092120051383972 - <_> - - <_> - - - - <_> - 0 11 8 2 -1. - <_> - 0 12 8 1 2. - 0 - -0.0117600196972489 - -0.5789325237274170 - 0.0150208799168468 - <_> - - <_> - - - - <_> - 23 13 1 2 -1. - <_> - 23 14 1 1 2. - 0 - 1.4420140068978071e-003 - 0.0108067002147436 - -0.1743503063917160 - <_> - - <_> - - - - <_> - 1 13 1 2 -1. - <_> - 1 14 1 1 2. - 0 - -4.9062469770433381e-005 - 0.0891510024666786 - -0.0946391522884369 - <_> - - <_> - - - - <_> - 9 0 14 8 -1. - <_> - 9 0 7 8 2. - 0 - 0.0330546088516712 - -0.0502973310649395 - 0.0724259391427040 - <_> - - <_> - - - - <_> - 0 1 14 8 -1. - <_> - 0 3 14 4 2. - 0 - -0.0449321903288364 - 0.0714013203978539 - -0.1246540024876595 - <_> - - <_> - - - - <_> - 20 4 2 3 -1. - <_> - 20 5 2 1 3. - 0 - -0.0123274503275752 - 0.2216438055038452 - -0.0160399992018938 - <_> - - <_> - - - - <_> - 0 1 14 9 -1. - <_> - 0 4 14 3 3. - 0 - -0.3724926114082336 - -0.3693152964115143 - 0.0260022208094597 - <_> - - <_> - - - - <_> - 9 13 9 1 -1. - <_> - 12 13 3 1 3. - 0 - 0.0152763100340962 - 5.3399899043142796e-003 - -0.5456783771514893 - <_> - - <_> - - - - <_> - 7 13 9 1 -1. - <_> - 10 13 3 1 3. - 0 - -0.0145687395706773 - -0.5883231163024902 - 0.0139877004548907 - <_> - - <_> - - - - <_> - 20 7 2 2 -1. - <_> - 21 7 1 1 2. - <_> - 20 8 1 1 2. - 0 - 9.9890248384326696e-004 - -0.0358810797333717 - 0.1743257045745850 - -1.3605639934539795 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 9 15 6 -1. - <_> - 5 12 15 3 2. - 0 - 0.0572950802743435 - -0.1768665015697479 - 0.2448291033506393 - <_> - - <_> - - - - <_> - 21 0 2 6 -1. - <_> - 21 3 2 3 2. - 0 - -0.0100825401023030 - 0.1378919035196304 - -0.2031147032976151 - <_> - - <_> - - - - <_> - 4 4 8 10 -1. - <_> - 4 4 4 5 2. - <_> - 8 9 4 5 2. - 0 - -0.0185250397771597 - 0.1623972952365875 - -0.1676190942525864 - <_> - - <_> - - - - <_> - 16 1 8 6 -1. - <_> - 16 3 8 2 3. - 0 - -0.0527544915676117 - 0.1347105056047440 - -0.1428814977407455 - <_> - - <_> - - - - <_> - 2 1 11 2 -1. - <_> - 2 1 11 1 2. - 1 - 0.0243547502905130 - -0.0266546793282032 - 0.4326488971710205 - <_> - - <_> - - - - <_> - 20 4 5 6 -1. - <_> - 20 6 5 2 3. - 0 - 0.0634179636836052 - 0.0422610901296139 - -0.4013176858425140 - <_> - - <_> - - - - <_> - 0 4 5 6 -1. - <_> - 0 6 5 2 3. - 0 - 3.8921029772609472e-003 - -0.1906750947237015 - 0.1267316043376923 - <_> - - <_> - - - - <_> - 19 11 6 4 -1. - <_> - 22 11 3 2 2. - <_> - 19 13 3 2 2. - 0 - 1.5238909982144833e-003 - -0.1371546983718872 - 0.1246439963579178 - <_> - - <_> - - - - <_> - 10 4 5 2 -1. - <_> - 10 5 5 1 2. - 0 - -6.7657418549060822e-003 - 0.2558242976665497 - -0.0607152618467808 - <_> - - <_> - - - - <_> - 7 6 11 4 -1. - <_> - 7 7 11 2 2. - 0 - -0.0241763703525066 - 0.2859889864921570 - -0.0642128363251686 - <_> - - <_> - - - - <_> - 9 2 4 4 -1. - <_> - 9 2 2 4 2. - 1 - -9.1761918738484383e-003 - 0.1021848022937775 - -0.1999447047710419 - <_> - - <_> - - - - <_> - 1 0 24 11 -1. - <_> - 7 0 12 11 2. - 0 - -0.1578399986028671 - 0.2398308068513870 - -0.0785783529281616 - <_> - - <_> - - - - <_> - 4 0 10 10 -1. - <_> - 9 0 5 10 2. - 0 - 0.0487401895225048 - -0.1100914031267166 - 0.1558353006839752 - <_> - - <_> - - - - <_> - 23 8 2 4 -1. - <_> - 23 8 2 2 2. - 1 - 0.0191179793328047 - 0.0197066999971867 - -0.3720233142375946 - <_> - - <_> - - - - <_> - 2 8 4 2 -1. - <_> - 2 8 2 2 2. - 1 - -0.0127781601622701 - -0.4160012900829315 - 0.0353787206113338 - <_> - - <_> - - - - <_> - 23 3 2 12 -1. - <_> - 24 3 1 6 2. - <_> - 23 9 1 6 2. - 0 - 2.6996301021426916e-003 - -0.0985597372055054 - 0.1149144023656845 - <_> - - <_> - - - - <_> - 9 3 6 12 -1. - <_> - 9 3 3 6 2. - <_> - 12 9 3 6 2. - 0 - 0.0245021991431713 - 0.0430920794606209 - -0.3663294017314911 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - 0.0850031301379204 - 0.0430114008486271 - -0.2886289954185486 - <_> - - <_> - - - - <_> - 0 3 2 12 -1. - <_> - 0 3 1 6 2. - <_> - 1 9 1 6 2. - 0 - 3.1647530850023031e-003 - -0.1142930984497070 - 0.1279425024986267 - <_> - - <_> - - - - <_> - 14 8 3 4 -1. - <_> - 14 8 3 2 2. - 1 - 0.0116577902808785 - -0.0515255816280842 - 0.1422376930713654 - <_> - - <_> - - - - <_> - 0 0 6 1 -1. - <_> - 2 0 2 1 3. - 0 - -6.6801449283957481e-003 - -0.4743103981018066 - 0.0287305805832148 - <_> - - <_> - - - - <_> - 9 2 16 7 -1. - <_> - 13 2 8 7 2. - 0 - -0.0388207696378231 - 0.0953134000301361 - -0.0473909191787243 - <_> - - <_> - - - - <_> - 8 7 1 6 -1. - <_> - 8 7 1 3 2. - 1 - -0.0254217702895403 - -0.4219881892204285 - 0.0284377895295620 - <_> - - <_> - - - - <_> - 8 7 9 4 -1. - <_> - 8 8 9 2 2. - 0 - -0.0121460696682334 - 0.1830082982778549 - -0.0762820765376091 - <_> - - <_> - - - - <_> - 7 5 10 4 -1. - <_> - 7 6 10 2 2. - 0 - -0.0267872195690870 - 0.2859373092651367 - -0.0522297993302345 - <_> - - <_> - - - - <_> - 14 2 1 6 -1. - <_> - 12 4 1 2 3. - 1 - -0.0116149904206395 - 0.1138594970107079 - -0.0663506835699081 - <_> - - <_> - - - - <_> - 0 3 8 12 -1. - <_> - 0 3 4 6 2. - <_> - 4 9 4 6 2. - 0 - -0.0599568895995617 - 0.2777940034866333 - -0.0470041483640671 - <_> - - <_> - - - - <_> - 19 13 6 2 -1. - <_> - 19 13 3 2 2. - 0 - -8.6737014353275299e-003 - 0.2129196971654892 - -0.0287764091044664 - <_> - - <_> - - - - <_> - 0 13 6 2 -1. - <_> - 3 13 3 2 2. - 0 - 2.8543549124151468e-003 - -0.1221636980772018 - 0.1421594023704529 - <_> - - <_> - - - - <_> - 23 12 1 3 -1. - <_> - 23 13 1 1 3. - 0 - 2.2713060025125742e-003 - 0.0182375106960535 - -0.4104354083538055 - <_> - - <_> - - - - <_> - 1 12 1 3 -1. - <_> - 1 13 1 1 3. - 0 - -1.2334890197962523e-003 - -0.3772745132446289 - 0.0350435785949230 - <_> - - <_> - - - - <_> - 23 12 1 3 -1. - <_> - 23 13 1 1 3. - 0 - -2.6904400438070297e-003 - -0.4196098148822784 - 0.0100445803254843 - <_> - - <_> - - - - <_> - 4 10 10 1 -1. - <_> - 9 10 5 1 2. - 0 - -2.6551370974630117e-003 - 0.1150795966386795 - -0.1072231009602547 - <_> - - <_> - - - - <_> - 23 12 1 3 -1. - <_> - 23 13 1 1 3. - 0 - -5.6895318266469985e-005 - 0.0416303612291813 - -0.0317232310771942 - <_> - - <_> - - - - <_> - 1 12 1 3 -1. - <_> - 1 13 1 1 3. - 0 - 9.8731368780136108e-004 - 0.0429715514183044 - -0.2815021872520447 - <_> - - <_> - - - - <_> - 11 2 12 4 -1. - <_> - 11 3 12 2 2. - 0 - 0.0182135794311762 - -0.0451830588281155 - 0.1914888024330139 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - -0.0872772708535194 - 0.1718962937593460 - -0.1219599992036820 - <_> - - <_> - - - - <_> - 23 0 2 2 -1. - <_> - 23 0 1 2 2. - 1 - -5.3898650221526623e-003 - -0.3866654038429260 - 0.0155352503061295 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - 0.0108539797365665 - 0.0364841781556606 - -0.3959751129150391 - <_> - - <_> - - - - <_> - 14 13 4 2 -1. - <_> - 15 13 2 2 2. - 0 - -4.1801291517913342e-003 - -0.4820233881473541 - 0.0170424394309521 - <_> - - <_> - - - - <_> - 3 6 6 3 -1. - <_> - 2 7 6 1 3. - 1 - -0.0234517697244883 - 0.4986476898193359 - -0.0220960807055235 - <_> - - <_> - - - - <_> - 14 13 4 2 -1. - <_> - 15 13 2 2 2. - 0 - 2.9061511158943176e-003 - 0.0269486699253321 - -0.3256624042987824 - <_> - - <_> - - - - <_> - 0 7 24 4 -1. - <_> - 0 7 12 2 2. - <_> - 12 9 12 2 2. - 0 - 0.0463646091520786 - 0.0268820300698280 - -0.3762974143028259 - <_> - - <_> - - - - <_> - 23 0 2 2 -1. - <_> - 23 1 2 1 2. - 0 - -2.1972910326439887e-004 - 0.0705367177724838 - -0.1089593023061752 - <_> - - <_> - - - - <_> - 7 13 4 2 -1. - <_> - 8 13 2 2 2. - 0 - -3.7804399617016315e-003 - -0.4887917041778565 - 0.0199932008981705 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - 6.0642170865321532e-005 - -0.0753576681017876 - 0.0811428874731064 - <_> - - <_> - - - - <_> - 8 11 9 4 -1. - <_> - 8 12 9 2 2. - 0 - -0.0106888897716999 - 0.2206722944974899 - -0.0562041401863098 - <_> - - <_> - - - - <_> - 2 12 21 3 -1. - <_> - 9 13 7 1 9. - 0 - 0.0436831787228584 - -0.0610822103917599 - 0.1712581962347031 - <_> - - <_> - - - - <_> - 1 13 21 2 -1. - <_> - 8 13 7 2 3. - 0 - -0.0202471297234297 - 0.1565587073564529 - -0.0770068317651749 - <_> - - <_> - - - - <_> - 22 10 1 4 -1. - <_> - 21 11 1 2 2. - 1 - -5.9285280294716358e-003 - -0.4369310140609741 - 0.0202764291316271 - <_> - - <_> - - - - <_> - 3 5 6 3 -1. - <_> - 2 6 6 1 3. - 1 - 0.0113492002710700 - -0.0597750283777714 - 0.1651744991540909 - <_> - - <_> - - - - <_> - 13 2 8 5 -1. - <_> - 15 4 4 5 2. - 1 - -0.1365716010332108 - -0.8707361817359924 - 4.2868419550359249e-003 - <_> - - <_> - - - - <_> - 4 2 8 6 -1. - <_> - 4 4 8 2 3. - 0 - 0.0663046464323998 - -0.0388697795569897 - 0.2649452090263367 - <_> - - <_> - - - - <_> - 5 1 15 4 -1. - <_> - 5 2 15 2 2. - 0 - 0.0195911191403866 - -0.0803443267941475 - 0.1665123999118805 - <_> - - <_> - - - - <_> - 0 1 8 4 -1. - <_> - 0 2 8 2 2. - 0 - 0.0340932197868824 - 0.0261821094900370 - -0.4526833891868591 - <_> - - <_> - - - - <_> - 10 0 15 14 -1. - <_> - 10 7 15 7 2. - 0 - -0.2061661928892136 - -0.4254589080810547 - 0.0156788490712643 - <_> - - <_> - - - - <_> - 9 13 6 2 -1. - <_> - 11 13 2 2 3. - 0 - -7.6675140298902988e-003 - -0.3513334095478058 - 0.0274340193718672 - <_> - - <_> - - - - <_> - 8 9 11 4 -1. - <_> - 8 10 11 2 2. - 0 - -0.0129145104438066 - 0.1359857022762299 - -0.0633687376976013 - <_> - - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 9 7 1 3 3. - 1 - 0.0160742308944464 - 0.0215212907642126 - -0.4643712937831879 - <_> - - <_> - - - - <_> - 21 5 4 6 -1. - <_> - 21 7 4 2 3. - 0 - 0.0369430296123028 - 0.0274755004793406 - -0.3073608875274658 - <_> - - <_> - - - - <_> - 12 3 6 6 -1. - <_> - 10 5 6 2 3. - 1 - -0.0755213573575020 - -0.4241931140422821 - 0.0237817000597715 - <_> - - <_> - - - - <_> - 12 9 10 6 -1. - <_> - 12 9 5 6 2. - 0 - 0.0243982393294573 - -0.0493879318237305 - 0.1672402024269104 - <_> - - <_> - - - - <_> - 3 9 10 6 -1. - <_> - 8 9 5 6 2. - 0 - 0.1157704964280129 - 0.0166440103203058 - -0.6928011178970337 - <_> - - <_> - - - - <_> - 12 0 4 1 -1. - <_> - 13 0 2 1 2. - 0 - 9.1529998462647200e-004 - -0.0502800084650517 - 0.1328525990247726 - <_> - - <_> - - - - <_> - 3 10 4 1 -1. - <_> - 4 11 2 1 2. - 1 - -3.6248450633138418e-003 - -0.3066833913326263 - 0.0284923594444990 - <_> - - <_> - - - - <_> - 18 12 1 2 -1. - <_> - 18 12 1 1 2. - 1 - -7.3581631295382977e-004 - 0.0559885688126087 - -0.0392797887325287 - <_> - - <_> - - - - <_> - 2 0 20 10 -1. - <_> - 12 0 10 10 2. - 0 - 0.2000436931848526 - -0.0568408109247684 - 0.1685038954019547 - <_> - - <_> - - - - <_> - 22 2 3 6 -1. - <_> - 23 3 1 6 3. - 1 - -0.0178776904940605 - 0.1931751966476440 - -0.0514639392495155 - <_> - - <_> - - - - <_> - 3 2 6 3 -1. - <_> - 2 3 6 1 3. - 1 - 0.0113503802567720 - -0.0489644110202789 - 0.2181939035654068 - <_> - - <_> - - - - <_> - 21 1 4 6 -1. - <_> - 23 1 2 3 2. - <_> - 21 4 2 3 2. - 0 - 0.0125029096379876 - -0.0419848784804344 - 0.2713862061500549 - <_> - - <_> - - - - <_> - 0 1 4 6 -1. - <_> - 0 1 2 3 2. - <_> - 2 4 2 3 2. - 0 - -9.3033276498317719e-003 - 0.1590452045202255 - -0.0626974031329155 - <_> - - <_> - - - - <_> - 24 0 1 6 -1. - <_> - 24 3 1 3 2. - 0 - 9.8205171525478363e-003 - 0.0155331101268530 - -0.3304075896739960 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 3 1 3 2. - 0 - 4.4993069022893906e-003 - 0.0376702398061752 - -0.3112137019634247 - <_> - - <_> - - - - <_> - 18 0 6 6 -1. - <_> - 18 2 6 2 3. - 0 - 0.0140464501455426 - -0.0434262491762638 - 0.1032719984650612 - <_> - - <_> - - - - <_> - 5 1 15 4 -1. - <_> - 5 2 15 2 2. - 0 - -0.0411175191402435 - 0.1867991983890533 - -0.0664343684911728 - <_> - - <_> - - - - <_> - 4 8 18 1 -1. - <_> - 10 8 6 1 3. - 0 - -0.0107145197689533 - 0.1244383975863457 - -0.0663585364818573 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 7 6 2 2. - 0 - 9.2895422130823135e-003 - -0.0821698531508446 - 0.1224353983998299 - <_> - - <_> - - - - <_> - 9 5 8 2 -1. - <_> - 11 5 4 2 2. - 0 - -0.0130508001893759 - -0.4003388881683350 - 0.0166369099169970 - <_> - - <_> - - - - <_> - 5 0 6 6 -1. - <_> - 7 0 2 6 3. - 0 - -0.0364681892096996 - -0.5473737716674805 - 0.0148177295923233 - <_> - - <_> - - - - <_> - 21 8 2 1 -1. - <_> - 21 8 1 1 2. - 0 - -7.5372940045781434e-005 - 0.0594716407358646 - -0.0578790009021759 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 2 1 2. - 1 - 0.0142522901296616 - 0.0252972692251205 - -0.3336473107337952 - <_> - - <_> - - - - <_> - 17 4 8 4 -1. - <_> - 17 5 8 2 2. - 0 - 3.3469200134277344e-003 - -0.0707368031144142 - 0.0745013207197189 - <_> - - <_> - - - - <_> - 6 0 13 2 -1. - <_> - 6 1 13 1 2. - 0 - 4.4445958919823170e-003 - -0.0672459527850151 - 0.1451885998249054 - <_> - - <_> - - - - <_> - 21 5 4 6 -1. - <_> - 21 7 4 2 3. - 0 - -8.7205823510885239e-003 - -0.2021352946758270 - 0.0275202393531799 - <_> - - <_> - - - - <_> - 0 5 4 6 -1. - <_> - 0 7 4 2 3. - 0 - 0.0469216890633106 - 0.0161568503826857 - -0.5311927795410156 - <_> - - <_> - - - - <_> - 21 8 2 1 -1. - <_> - 21 8 1 1 2. - 0 - 5.8387980971019715e-005 - -0.0557161718606949 - 0.0720106214284897 - <_> - - <_> - - - - <_> - 2 8 2 1 -1. - <_> - 3 8 1 1 2. - 0 - -4.6103101340122521e-005 - 0.0959030091762543 - -0.0971473827958107 - <_> - - <_> - - - - <_> - 23 0 2 1 -1. - <_> - 23 0 1 1 2. - 1 - 6.0657761059701443e-003 - 0.0240712091326714 - -0.2376091033220291 - <_> - - <_> - - - - <_> - 4 0 15 4 -1. - <_> - 4 1 15 2 2. - 0 - -0.0555203706026077 - 0.3074511885643005 - -0.0299711804836988 - <_> - - <_> - - - - <_> - 15 1 10 8 -1. - <_> - 15 3 10 4 2. - 0 - -0.0365539006888866 - 0.0328120291233063 - -0.0570152215659618 - <_> - - <_> - - - - <_> - 0 5 4 2 -1. - <_> - 0 5 2 1 2. - <_> - 2 6 2 1 2. - 0 - 1.8784699495881796e-003 - -0.0653261989355087 - 0.1390983015298843 - <_> - - <_> - - - - <_> - 23 0 2 1 -1. - <_> - 23 0 1 1 2. - 1 - -7.4822120368480682e-003 - -0.7748216986656189 - 5.9286328032612801e-003 - <_> - - <_> - - - - <_> - 0 5 1 4 -1. - <_> - 0 6 1 2 2. - 0 - -3.3365150447934866e-003 - -0.3616085052490234 - 0.0226737502962351 - <_> - - <_> - - - - <_> - 19 13 4 2 -1. - <_> - 19 14 4 1 2. - 0 - -0.0122549999505281 - -0.6580218076705933 - 4.3241591192781925e-003 - <_> - - <_> - - - - <_> - 7 12 2 2 -1. - <_> - 7 12 1 1 2. - <_> - 8 13 1 1 2. - 0 - -2.5022740010172129e-004 - 0.1368491053581238 - -0.0613101907074451 - <_> - - <_> - - - - <_> - 1 0 24 8 -1. - <_> - 13 0 12 4 2. - <_> - 1 4 12 4 2. - 0 - 0.1189583986997604 - 0.0244670100510120 - -0.3081929087638855 - <_> - - <_> - - - - <_> - 2 4 3 3 -1. - <_> - 2 5 3 1 3. - 0 - 1.8534749979153275e-003 - -0.0657177790999413 - 0.1380506008863449 - <_> - - <_> - - - - <_> - 20 6 4 3 -1. - <_> - 19 7 4 1 3. - 1 - -0.0139663796871901 - -0.4281671941280365 - 0.0166652500629425 - <_> - - <_> - - - - <_> - 5 6 3 4 -1. - <_> - 6 7 1 4 3. - 1 - -0.0120118902996182 - -0.4546675086021423 - 0.0174813903868198 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - 8.6380320135504007e-004 - 0.0268306396901608 - -0.1949577033519745 - <_> - - <_> - - - - <_> - 7 11 2 2 -1. - <_> - 7 11 1 1 2. - <_> - 8 12 1 1 2. - 0 - -5.4863549303263426e-004 - 0.1728172004222870 - -0.0519250482320786 - <_> - - <_> - - - - <_> - 9 5 9 3 -1. - <_> - 12 5 3 3 3. - 0 - 0.0356420204043388 - 0.0119973402470350 - -0.2636224925518036 - <_> - - <_> - - - - <_> - 0 0 6 1 -1. - <_> - 2 0 2 1 3. - 0 - 9.2830741778016090e-003 - 0.0153813296929002 - -0.5276867151260376 - <_> - - <_> - - - - <_> - 17 4 8 1 -1. - <_> - 19 4 4 1 2. - 0 - 3.3444799482822418e-003 - -0.0448165088891983 - 0.1556369960308075 - <_> - - <_> - - - - <_> - 7 5 9 3 -1. - <_> - 10 5 3 3 3. - 0 - -0.0348524898290634 - -0.6144651770591736 - 0.0147144095972180 - <_> - - <_> - - - - <_> - 17 4 8 1 -1. - <_> - 19 4 4 1 2. - 0 - -3.6836538929492235e-003 - 0.0679996237158775 - -0.0403181910514832 - <_> - - <_> - - - - <_> - 0 4 8 1 -1. - <_> - 2 4 4 1 2. - 0 - 2.6370671112090349e-003 - -0.0527165904641151 - 0.1650273054838181 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - -1.1408380232751369e-003 - -0.1495666950941086 - 0.0155292097479105 - <_> - - <_> - - - - <_> - 6 11 12 2 -1. - <_> - 9 11 6 2 2. - 0 - -5.5604642257094383e-003 - 0.1015162020921707 - -0.0783084183931351 - <_> - - <_> - - - - <_> - 4 6 20 9 -1. - <_> - 9 6 10 9 2. - 0 - 0.0313040204346180 - -0.0519621782004833 - 0.1036399006843567 - <_> - - <_> - - - - <_> - 6 8 12 2 -1. - <_> - 6 9 12 1 2. - 0 - 9.2903850600123405e-003 - -0.0539887212216854 - 0.1653061956167221 - <_> - - <_> - - - - <_> - 6 8 13 4 -1. - <_> - 6 9 13 2 2. - 0 - -0.0108930300921202 - 0.1281013935804367 - -0.0734129622578621 - <_> - - <_> - - - - <_> - 2 13 4 2 -1. - <_> - 2 14 4 1 2. - 0 - -4.9190609715878963e-003 - -0.3507530987262726 - 0.0244891606271267 - <_> - - <_> - - - - <_> - 11 1 3 12 -1. - <_> - 11 4 3 6 2. - 0 - 0.0811754167079926 - 0.0209406390786171 - -0.3776533007621765 - <_> - - <_> - - - - <_> - 7 10 11 4 -1. - <_> - 7 11 11 2 2. - 0 - -7.1189319714903831e-003 - 0.1320966929197311 - -0.0743796005845070 - <_> - - <_> - - - - <_> - 5 9 15 6 -1. - <_> - 5 11 15 2 3. - 0 - 0.0290335901081562 - -0.0601534284651279 - 0.1686525046825409 - <_> - - <_> - - - - <_> - 1 5 14 10 -1. - <_> - 1 10 14 5 2. - 0 - 0.2666859030723572 - 0.0302151106297970 - -0.3336375057697296 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - 1.3437710003927350e-003 - 0.0244619604200125 - -0.3497652113437653 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 1 4 1 2. - 0 - -6.4065970946103334e-005 - 0.0681859701871872 - -0.1218236982822418 - <_> - - <_> - - - - <_> - 18 3 4 2 -1. - <_> - 18 4 4 1 2. - 0 - -2.2273659706115723e-003 - 0.0591664388775826 - -0.0569609887897968 - <_> - - <_> - - - - <_> - 0 7 4 4 -1. - <_> - 0 8 4 2 2. - 0 - 1.0822839976754040e-004 - -0.1183675006031990 - 0.0699028074741364 - <_> - - <_> - - - - <_> - 12 12 6 2 -1. - <_> - 14 12 2 2 3. - 0 - 7.7762501314282417e-003 - 0.0182663407176733 - -0.3238837122917175 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 0 1 1 3. - 0 - -8.5627898806706071e-004 - 0.1596496999263763 - -0.0523401089012623 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - 3.9805951528251171e-003 - 5.6993248872458935e-003 - -0.6384922862052918 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - -4.9052381655201316e-004 - 0.1629474014043808 - -0.0742301419377327 - <_> - - <_> - - - - <_> - 18 3 2 10 -1. - <_> - 18 3 1 10 2. - 0 - -0.0184035003185272 - -0.6773443222045898 - 0.0107059404253960 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -8.9714571367949247e-004 - 0.1691973060369492 - -0.0477185398340225 - <_> - - <_> - - - - <_> - 18 0 7 3 -1. - <_> - 18 1 7 1 3. - 0 - -0.0167341101914644 - -0.3151237964630127 - 0.0124420495703816 - <_> - - <_> - - - - <_> - 7 12 6 2 -1. - <_> - 9 12 2 2 3. - 0 - -0.0119769899174571 - -0.5293223857879639 - 0.0144362701103091 - <_> - - <_> - - - - <_> - 20 7 4 3 -1. - <_> - 20 8 4 1 3. - 0 - 7.0368088781833649e-003 - 0.0264915898442268 - -0.2470992058515549 - <_> - - <_> - - - - <_> - 5 3 2 10 -1. - <_> - 6 3 1 10 2. - 0 - -0.0105798998847604 - -0.4092808067798615 - 0.0187591798603535 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - 6.0849997680634260e-004 - -0.0334094502031803 - 0.0843884497880936 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -5.9445307124406099e-004 - 0.1412419974803925 - -0.0555582903325558 - <_> - - <_> - - - - <_> - 15 0 6 2 -1. - <_> - 17 0 2 2 3. - 0 - -0.0157594103366137 - -0.3833500146865845 - 0.0156633593142033 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -0.0101080304011703 - -0.3391439020633698 - 0.0209970101714134 - <_> - - <_> - - - - <_> - 22 1 2 12 -1. - <_> - 18 5 2 4 3. - 1 - 8.8242385536432266e-003 - 0.0468829013407230 - -0.0345581099390984 - <_> - - <_> - - - - <_> - 4 0 12 3 -1. - <_> - 8 4 4 3 3. - 1 - 0.1695280969142914 - -0.0297883804887533 - 0.2978200018405914 - <_> - - <_> - - - - <_> - 14 13 2 2 -1. - <_> - 15 13 1 1 2. - <_> - 14 14 1 1 2. - 0 - 1.4175090473145247e-003 - 0.0145506802946329 - -0.2557711899280548 - <_> - - <_> - - - - <_> - 11 6 3 3 -1. - <_> - 12 7 1 1 9. - 0 - -6.2455357983708382e-003 - 0.1703144013881683 - -0.0457185097038746 - <_> - - <_> - - - - <_> - 15 1 10 8 -1. - <_> - 15 3 10 4 2. - 0 - 0.0829719901084900 - -0.0108856502920389 - 0.2358570992946625 - <_> - - <_> - - - - <_> - 0 1 10 8 -1. - <_> - 0 3 10 4 2. - 0 - -0.0363879613578320 - 0.0720635578036308 - -0.1351491957902908 - <_> - - <_> - - - - <_> - 11 3 14 10 -1. - <_> - 11 8 14 5 2. - 0 - 0.2605817019939423 - 0.0307604894042015 - -0.2081860005855560 - <_> - - <_> - - - - <_> - 0 0 24 12 -1. - <_> - 0 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - -0.1837086975574493 - -0.4619984030723572 - 0.0176900699734688 - <_> - - <_> - - - - <_> - 20 7 4 3 -1. - <_> - 20 8 4 1 3. - 0 - -3.9726989343762398e-003 - -0.1660892963409424 - 0.0209467206150293 - <_> - - <_> - - - - <_> - 0 1 7 3 -1. - <_> - 0 2 7 1 3. - 0 - 0.0214559100568295 - 0.0231478307396173 - -0.3625465929508209 - <_> - - <_> - - - - <_> - 20 7 4 3 -1. - <_> - 20 8 4 1 3. - 0 - 0.0144318202510476 - 4.4689280912280083e-003 - -0.2445929050445557 - <_> - - <_> - - - - <_> - 0 7 1 8 -1. - <_> - 0 9 1 4 2. - 0 - -3.3524229656904936e-003 - -0.2480840981006622 - 0.0316352993249893 - <_> - - <_> - - - - <_> - 22 4 3 4 -1. - <_> - 23 5 1 4 3. - 1 - -0.0156694706529379 - 0.3172483146190643 - -0.0374899208545685 - <_> - - <_> - - - - <_> - 11 2 12 1 -1. - <_> - 15 6 4 1 3. - 1 - -0.0400774292647839 - -0.2589775919914246 - 0.0327349714934826 - <_> - - <_> - - - - <_> - 22 4 3 4 -1. - <_> - 23 5 1 4 3. - 1 - 0.0123612098395824 - -0.0450748614966869 - 0.1690649986267090 - <_> - - <_> - - - - <_> - 1 7 4 3 -1. - <_> - 1 8 4 1 3. - 0 - 0.0109678898006678 - 0.0187921095639467 - -0.4384852945804596 - <_> - - <_> - - - - <_> - 13 9 6 2 -1. - <_> - 15 9 2 2 3. - 0 - -0.0137434704229236 - -0.4609765112400055 - 0.0122369602322578 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -1.0322439484298229e-003 - 0.1648599952459335 - -0.0516587682068348 - <_> - - <_> - - - - <_> - 13 9 6 2 -1. - <_> - 15 9 2 2 3. - 0 - 8.8313361629843712e-003 - 0.0159355308860540 - -0.2015953958034515 - <_> - - <_> - - - - <_> - 4 0 6 2 -1. - <_> - 6 0 2 2 3. - 0 - 0.0144206797704101 - 0.0160773508250713 - -0.4641633033752441 - <_> - - <_> - - - - <_> - 13 9 6 2 -1. - <_> - 15 9 2 2 3. - 0 - -1.8205989617854357e-003 - 0.0433134213089943 - -0.0280837193131447 - <_> - - <_> - - - - <_> - 7 7 2 6 -1. - <_> - 7 7 1 6 2. - 1 - 3.9304671809077263e-003 - 0.0497011989355087 - -0.1514773964881897 - <_> - - <_> - - - - <_> - 24 0 1 10 -1. - <_> - 24 5 1 5 2. - 0 - -8.3210691809654236e-003 - -0.1029928028583527 - 0.0179813895374537 - <_> - - <_> - - - - <_> - 6 7 3 1 -1. - <_> - 7 7 1 1 3. - 0 - -1.1277500307187438e-003 - 0.1659521013498306 - -0.0483443103730679 - <_> - - <_> - - - - <_> - 14 13 2 2 -1. - <_> - 15 13 1 1 2. - <_> - 14 14 1 1 2. - 0 - -7.8385067172348499e-004 - -0.1946461051702499 - 0.0250845197588205 - <_> - - <_> - - - - <_> - 8 7 4 1 -1. - <_> - 9 7 2 1 2. - 0 - -8.5464341100305319e-004 - 0.1473073959350586 - -0.0529893897473812 - <_> - - <_> - - - - <_> - 24 4 1 9 -1. - <_> - 21 7 1 3 3. - 1 - -6.1449417844414711e-003 - 0.0951583385467529 - -0.0323545187711716 - <_> - - <_> - - - - <_> - 1 4 9 1 -1. - <_> - 4 7 3 1 3. - 1 - 0.0537422299385071 - -0.0160139091312885 - 0.5178387761116028 - <_> - - <_> - - - - <_> - 11 1 6 13 -1. - <_> - 13 1 2 13 3. - 0 - -9.1773690655827522e-003 - 0.0658730715513229 - -0.0286986008286476 - <_> - - <_> - - - - <_> - 10 2 4 7 -1. - <_> - 11 2 2 7 2. - 0 - -1.6262140125036240e-003 - 0.1165013015270233 - -0.0662005692720413 - <_> - - <_> - - - - <_> - 11 1 6 13 -1. - <_> - 13 1 2 13 3. - 0 - -0.0702467709779739 - -0.5561671257019043 - 3.3650770783424377e-003 - <_> - - <_> - - - - <_> - 8 1 6 13 -1. - <_> - 10 1 2 13 3. - 0 - -0.0457130484282970 - -0.5554363131523132 - 0.0145238302648067 - <_> - - <_> - - - - <_> - 16 9 4 1 -1. - <_> - 16 9 2 1 2. - 0 - -1.6252630157396197e-003 - 0.0774459466338158 - -0.0477535910904408 - <_> - - <_> - - - - <_> - 5 9 4 1 -1. - <_> - 7 9 2 1 2. - 0 - -8.7784547358751297e-003 - -0.6660557985305786 - 0.0114997997879982 - <_> - - <_> - - - - <_> - 17 4 1 9 -1. - <_> - 14 7 1 3 3. - 1 - 0.0581780597567558 - -0.0126901902258396 - 0.2431164979934692 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -1.0166700230911374e-003 - 0.1701835989952087 - -0.0434626787900925 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - -8.3186908159404993e-004 - -0.1554417014122009 - 0.0277679692953825 - <_> - - <_> - - - - <_> - 7 11 2 2 -1. - <_> - 7 11 1 1 2. - <_> - 8 12 1 1 2. - 0 - 1.0635660146363080e-004 - -0.0799610763788223 - 0.0975525230169296 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - 7.7358598355203867e-004 - 0.0280197393149138 - -0.1640979051589966 - <_> - - <_> - - - - <_> - 6 13 10 1 -1. - <_> - 11 13 5 1 2. - 0 - -5.1288288086652756e-003 - 0.1435500979423523 - -0.0521811507642269 - <_> - - <_> - - - - <_> - 9 8 10 7 -1. - <_> - 9 8 5 7 2. - 0 - -0.0296237897127867 - 0.1256711930036545 - -0.0727018266916275 - <_> - - <_> - - - - <_> - 4 5 15 10 -1. - <_> - 9 5 5 10 3. - 0 - 0.0479203201830387 - -0.0627507865428925 - 0.1496749967336655 - <_> - - <_> - - - - <_> - 20 6 5 4 -1. - <_> - 20 7 5 2 2. - 0 - 0.0299077890813351 - 3.3279890194535255e-003 - -0.5352283716201782 - <_> - - <_> - - - - <_> - 0 6 5 4 -1. - <_> - 0 7 5 2 2. - 0 - -3.1103161163628101e-003 - -0.1846338063478470 - 0.0402609407901764 - <_> - - <_> - - - - <_> - 11 7 3 1 -1. - <_> - 12 7 1 1 3. - 0 - 1.1777599574998021e-003 - -0.0421488806605339 - 0.1833201944828033 - <_> - - <_> - - - - <_> - 9 4 7 3 -1. - <_> - 9 5 7 1 3. - 0 - 0.0149721698835492 - -0.0501780100166798 - 0.1479559987783432 - <_> - - <_> - - - - <_> - 15 4 4 3 -1. - <_> - 15 4 2 3 2. - 0 - 0.0226974897086620 - 8.8858045637607574e-003 - -0.3510260879993439 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 8 4 2 3 2. - 0 - 0.0128841297701001 - 0.0346549116075039 - -0.2406193017959595 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -1.1240700259804726e-003 - 0.1314530968666077 - -0.0288430396467447 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - -1.3627869775518775e-003 - 0.2013843953609467 - -0.0379555486142635 - <_> - - <_> - - - - <_> - 14 13 2 2 -1. - <_> - 15 13 1 1 2. - <_> - 14 14 1 1 2. - 0 - 5.3557957289740443e-004 - 0.0279592797160149 - -0.1196514964103699 - <_> - - <_> - - - - <_> - 6 0 4 2 -1. - <_> - 6 0 4 1 2. - 1 - -0.0152801796793938 - -0.4851869940757752 - 0.0156223699450493 - <_> - - <_> - - - - <_> - 20 14 2 1 -1. - <_> - 20 14 1 1 2. - 0 - 4.6412500523729250e-005 - -0.0589389093220234 - 0.0601089298725128 - <_> - - <_> - - - - <_> - 1 13 6 2 -1. - <_> - 1 13 3 1 2. - <_> - 4 14 3 1 2. - 0 - 9.6553878393024206e-005 - -0.0965948700904846 - 0.0779175236821175 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 12 2 2 1 2. - 0 - 3.8991239853203297e-003 - -0.0261822007596493 - 0.1902385950088501 - <_> - - <_> - - - - <_> - 8 0 8 8 -1. - <_> - 8 0 4 4 2. - <_> - 12 4 4 4 2. - 0 - 0.0237854700535536 - 0.0403596796095371 - -0.1793317049741745 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 17 12 1 1 2. - <_> - 16 13 1 1 2. - 0 - 5.9117228374816477e-005 - -0.0676945373415947 - 0.0789666101336479 - <_> - - <_> - - - - <_> - 0 4 8 8 -1. - <_> - 0 4 4 4 2. - <_> - 4 8 4 4 2. - 0 - 0.0585355199873447 - -0.0279133208096027 - 0.2635962069034576 - <_> - - <_> - - - - <_> - 19 4 2 1 -1. - <_> - 19 4 1 1 2. - 0 - -6.7125670611858368e-003 - -0.8246011137962341 - 3.6960430443286896e-003 - <_> - - <_> - - - - <_> - 4 4 2 1 -1. - <_> - 5 4 1 1 2. - 0 - -4.6747662127017975e-003 - -0.7625464797019959 - 9.2743840068578720e-003 - <_> - - <_> - - - - <_> - 20 0 2 2 -1. - <_> - 21 0 1 1 2. - <_> - 20 1 1 1 2. - 0 - 5.3981528617441654e-003 - 1.9147379789501429e-003 - -0.8057739734649658 - <_> - - <_> - - - - <_> - 0 5 15 3 -1. - <_> - 0 6 15 1 3. - 0 - 7.7252141200006008e-003 - -0.0822006091475487 - 0.0925986021757126 - <_> - - <_> - - - - <_> - 13 5 1 3 -1. - <_> - 13 6 1 1 3. - 0 - -1.1672140099108219e-003 - 0.1147938966751099 - -0.0459650196135044 - <_> - - <_> - - - - <_> - 4 9 3 2 -1. - <_> - 5 10 1 2 3. - 1 - -7.4022258631885052e-003 - -0.4262216091156006 - 0.0174518898129463 - <_> - - <_> - - - - <_> - 20 0 2 2 -1. - <_> - 21 0 1 1 2. - <_> - 20 1 1 1 2. - 0 - 6.5430802351329476e-005 - -0.0445476993918419 - 0.0498182512819767 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 1 2. - <_> - 4 1 1 1 2. - 0 - 4.6353430661838502e-005 - -0.0820099934935570 - 0.0922331288456917 - -1.2964390516281128 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 11 12 4 -1. - <_> - 0 11 6 2 2. - <_> - 6 13 6 2 2. - 0 - 0.0105607798323035 - -0.1728546023368835 - 0.2072951048612595 - <_> - - <_> - - - - <_> - 17 1 8 4 -1. - <_> - 17 3 8 2 2. - 0 - -0.0382373891770840 - 0.1771112978458405 - -0.1585303992033005 - <_> - - <_> - - - - <_> - 6 6 13 6 -1. - <_> - 6 8 13 2 3. - 0 - -0.0541206710040569 - 0.2564443051815033 - -0.0884335711598396 - <_> - - <_> - - - - <_> - 23 4 2 3 -1. - <_> - 23 4 1 3 2. - 0 - -2.2004460915923119e-003 - 0.2010346055030823 - -0.1101640984416008 - <_> - - <_> - - - - <_> - 2 13 10 2 -1. - <_> - 2 14 10 1 2. - 0 - 0.0654388666152954 - 7.8213139204308391e-004 - -4.3508232421875000e+003 - <_> - - <_> - - - - <_> - 23 4 2 3 -1. - <_> - 23 4 1 3 2. - 0 - -0.0135645801201463 - -0.5407810807228088 - 4.8653590492904186e-003 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 1 4 1 3 2. - 0 - -1.8708320567384362e-003 - 0.1633561998605728 - -0.1228590980172157 - <_> - - <_> - - - - <_> - 2 7 21 3 -1. - <_> - 9 8 7 1 9. - 0 - 0.1699268966913223 - -4.5410599559545517e-003 - 0.4810850024223328 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 1 2 2. - 1 - 3.5981500986963511e-003 - 0.0356757305562496 - -0.4236158132553101 - <_> - - <_> - - - - <_> - 2 2 21 6 -1. - <_> - 9 4 7 2 9. - 0 - 0.5448976159095764 - -0.0198735594749451 - 0.5460472106933594 - <_> - - <_> - - - - <_> - 1 1 8 6 -1. - <_> - 1 3 8 2 3. - 0 - -0.0627753064036369 - 0.1722137033939362 - -0.1143800020217896 - <_> - - <_> - - - - <_> - 6 4 15 4 -1. - <_> - 6 5 15 2 2. - 0 - -0.0459444113075733 - 0.2595784068107605 - -0.0732216089963913 - <_> - - <_> - - - - <_> - 2 10 4 1 -1. - <_> - 3 11 2 1 2. - 1 - 2.1809421014040709e-003 - 0.0495434813201427 - -0.3175086975097656 - <_> - - <_> - - - - <_> - 4 14 18 1 -1. - <_> - 4 14 9 1 2. - 0 - -9.6566081047058105e-003 - 0.1581763029098511 - -0.0890468433499336 - <_> - - <_> - - - - <_> - 0 3 24 10 -1. - <_> - 0 3 12 5 2. - <_> - 12 8 12 5 2. - 0 - 0.0808042436838150 - 0.0503276288509369 - -0.2887117862701416 - <_> - - <_> - - - - <_> - 15 3 10 12 -1. - <_> - 20 3 5 6 2. - <_> - 15 9 5 6 2. - 0 - 0.0987789332866669 - -0.0381883382797241 - 0.3119831085205078 - <_> - - <_> - - - - <_> - 9 5 6 3 -1. - <_> - 9 6 6 1 3. - 0 - 8.4114018827676773e-003 - -0.0949936509132385 - 0.1344850063323975 - <_> - - <_> - - - - <_> - 2 13 21 1 -1. - <_> - 9 13 7 1 3. - 0 - -0.0147700998932123 - 0.1715719997882843 - -0.0750405564904213 - <_> - - <_> - - - - <_> - 0 3 10 12 -1. - <_> - 0 3 5 6 2. - <_> - 5 9 5 6 2. - 0 - 0.1057564020156860 - -0.0440231785178185 - 0.3495194017887116 - <_> - - <_> - - - - <_> - 5 3 15 4 -1. - <_> - 5 4 15 2 2. - 0 - 0.0401043891906738 - -0.0572791509330273 - 0.2763915061950684 - <_> - - <_> - - - - <_> - 8 6 9 3 -1. - <_> - 8 7 9 1 3. - 0 - 0.0135993398725986 - -0.0886402428150177 - 0.1596630066633225 - <_> - - <_> - - - - <_> - 14 13 3 1 -1. - <_> - 15 13 1 1 3. - 0 - -3.3378789667040110e-003 - -0.4990870058536530 - 7.1760369464755058e-003 - <_> - - <_> - - - - <_> - 7 1 10 2 -1. - <_> - 7 2 10 1 2. - 0 - 6.5490198321640491e-003 - -0.0597806982696056 - 0.2110590040683746 - <_> - - <_> - - - - <_> - 14 13 3 1 -1. - <_> - 15 13 1 1 3. - 0 - -6.2758670537732542e-005 - 0.0655476525425911 - -0.0541992485523224 - <_> - - <_> - - - - <_> - 8 13 3 1 -1. - <_> - 9 13 1 1 3. - 0 - 9.0889551211148500e-004 - 0.0425700992345810 - -0.2828716039657593 - <_> - - <_> - - - - <_> - 1 0 24 12 -1. - <_> - 13 0 12 6 2. - <_> - 1 6 12 6 2. - 0 - 0.0881031826138496 - 0.0406627096235752 - -0.2983728945255280 - <_> - - <_> - - - - <_> - 0 0 13 14 -1. - <_> - 0 7 13 7 2. - 0 - -0.1351538002490997 - -0.4011076092720032 - 0.0259989295154810 - <_> - - <_> - - - - <_> - 21 6 3 3 -1. - <_> - 20 7 3 1 3. - 1 - 0.0105496803298593 - 0.0265602301806211 - -0.3554666042327881 - <_> - - <_> - - - - <_> - 8 9 8 4 -1. - <_> - 8 10 8 2 2. - 0 - -0.0109745198860765 - 0.1540209054946899 - -0.0715849623084068 - <_> - - <_> - - - - <_> - 13 10 6 4 -1. - <_> - 15 10 2 4 3. - 0 - -0.0128105496987700 - -0.2680475115776062 - 0.0205432493239641 - <_> - - <_> - - - - <_> - 11 3 4 4 -1. - <_> - 11 3 2 4 2. - 1 - -0.0673751235008240 - -0.5299177169799805 - 0.0192500203847885 - <_> - - <_> - - - - <_> - 13 10 6 4 -1. - <_> - 15 10 2 4 3. - 0 - 0.0133285904303193 - 0.0141924796625972 - -0.2692896127700806 - <_> - - <_> - - - - <_> - 7 10 10 4 -1. - <_> - 7 12 10 2 2. - 0 - -0.0349247902631760 - 0.2877762019634247 - -0.0366922505199909 - <_> - - <_> - - - - <_> - 13 10 6 4 -1. - <_> - 15 10 2 4 3. - 0 - -0.0259607005864382 - -0.5250588059425354 - 4.2013241909444332e-003 - <_> - - <_> - - - - <_> - 6 10 6 4 -1. - <_> - 8 10 2 4 3. - 0 - -0.0144326100125909 - -0.4404621124267578 - 0.0239412691444159 - <_> - - <_> - - - - <_> - 21 14 4 1 -1. - <_> - 21 14 2 1 2. - 0 - 1.0242980206385255e-003 - -0.0813294127583504 - 0.1090075969696045 - <_> - - <_> - - - - <_> - 0 7 4 4 -1. - <_> - 0 8 4 2 2. - 0 - -3.3913699444383383e-003 - -0.2744260132312775 - 0.0353980511426926 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - -0.0254591107368469 - 0.1884281933307648 - -0.0505212917923927 - <_> - - <_> - - - - <_> - 5 1 15 2 -1. - <_> - 5 2 15 1 2. - 0 - -0.0250639300793409 - 0.1583306044340134 - -0.0679820179939270 - <_> - - <_> - - - - <_> - 19 1 3 4 -1. - <_> - 19 2 3 2 2. - 0 - 4.5757358893752098e-003 - -0.0512838996946812 - 0.1146584972739220 - <_> - - <_> - - - - <_> - 2 5 20 4 -1. - <_> - 12 5 10 4 2. - 0 - -0.1538352966308594 - 0.4274145960807800 - -0.0233538504689932 - <_> - - <_> - - - - <_> - 21 14 4 1 -1. - <_> - 21 14 2 1 2. - 0 - 6.7441980354487896e-003 - 0.0116364201530814 - -0.1990616023540497 - <_> - - <_> - - - - <_> - 0 14 4 1 -1. - <_> - 2 14 2 1 2. - 0 - 4.9857632257044315e-004 - -0.1112217977643013 - 0.0913273170590401 - <_> - - <_> - - - - <_> - 19 3 6 12 -1. - <_> - 22 3 3 6 2. - <_> - 19 9 3 6 2. - 0 - 0.0416502095758915 - -0.0342307090759277 - 0.1340909004211426 - <_> - - <_> - - - - <_> - 0 3 6 12 -1. - <_> - 0 3 3 6 2. - <_> - 3 9 3 6 2. - 0 - -0.0486865788698196 - 0.3840608894824982 - -0.0367092713713646 - <_> - - <_> - - - - <_> - 19 1 3 4 -1. - <_> - 19 2 3 2 2. - 0 - -0.0142661100253463 - 0.1904101967811585 - -0.0373262614011765 - <_> - - <_> - - - - <_> - 3 1 3 4 -1. - <_> - 3 2 3 2 2. - 0 - 2.0738251041620970e-003 - -0.0940800234675407 - 0.1367546021938324 - <_> - - <_> - - - - <_> - 10 1 10 2 -1. - <_> - 10 1 5 2 2. - 0 - -0.0127805396914482 - 0.0790209397673607 - -0.0321417711675167 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 9 0 4 3 2. - 0 - 8.7420884519815445e-003 - -0.0805833786725998 - 0.1433219015598297 - <_> - - <_> - - - - <_> - 21 0 2 1 -1. - <_> - 21 0 1 1 2. - 1 - 6.9780537160113454e-005 - -0.1539752036333084 - 0.0694082602858543 - <_> - - <_> - - - - <_> - 2 8 4 2 -1. - <_> - 3 9 2 2 2. - 1 - -7.9981610178947449e-003 - -0.4497911930084229 - 0.0232297703623772 - <_> - - <_> - - - - <_> - 21 0 2 1 -1. - <_> - 21 0 1 1 2. - 1 - 5.3804512135684490e-003 - 0.0246548391878605 - -0.1725358963012695 - <_> - - <_> - - - - <_> - 2 0 21 1 -1. - <_> - 9 0 7 1 3. - 0 - -0.0200069397687912 - 0.1652639061212540 - -0.0625987574458122 - <_> - - <_> - - - - <_> - 21 0 2 1 -1. - <_> - 21 0 1 1 2. - 1 - -4.4656409882009029e-003 - -0.3730463087558746 - 0.0105512700974941 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - -3.1919090542942286e-003 - -0.4411549866199493 - 0.0209588091820478 - <_> - - <_> - - - - <_> - 1 11 24 4 -1. - <_> - 13 11 12 2 2. - <_> - 1 13 12 2 2. - 0 - -0.0622704289853573 - -0.5413467884063721 - 0.0132205402478576 - <_> - - <_> - - - - <_> - 0 11 24 4 -1. - <_> - 0 11 12 2 2. - <_> - 12 13 12 2 2. - 0 - -0.0449563488364220 - -0.4331294000148773 - 0.0206683203577995 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - 1.1595709947869182e-003 - -0.0236924402415752 - 0.1087998002767563 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - -8.8405620772391558e-004 - 0.1649617999792099 - -0.0524947308003902 - <_> - - <_> - - - - <_> - 18 1 6 2 -1. - <_> - 18 1 3 2 2. - 0 - 0.0266917701810598 - 0.0148458201438189 - -0.5571644902229309 - <_> - - <_> - - - - <_> - 2 0 21 2 -1. - <_> - 9 0 7 2 3. - 0 - 0.0182767305523157 - -0.0662862136960030 - 0.1257701069116592 - <_> - - <_> - - - - <_> - 13 0 10 15 -1. - <_> - 13 0 5 15 2. - 0 - -0.0809113383293152 - 0.1131376996636391 - -0.0498078204691410 - <_> - - <_> - - - - <_> - 6 0 13 4 -1. - <_> - 6 1 13 2 2. - 0 - -0.0364037007093430 - 0.2336605936288834 - -0.0383339710533619 - <_> - - <_> - - - - <_> - 11 3 9 3 -1. - <_> - 11 4 9 1 3. - 0 - -0.0139478798955679 - 0.0991646125912666 - -0.0678260922431946 - <_> - - <_> - - - - <_> - 3 2 10 3 -1. - <_> - 2 3 10 1 3. - 1 - -0.0224205106496811 - 0.1904506981372833 - -0.0484246909618378 - <_> - - <_> - - - - <_> - 6 6 16 8 -1. - <_> - 6 6 8 8 2. - 0 - 0.0995163321495056 - -0.0482200607657433 - 0.2056124061346054 - <_> - - <_> - - - - <_> - 5 0 12 15 -1. - <_> - 8 0 6 15 2. - 0 - 0.1495629996061325 - 0.0141723398119211 - -0.6450886726379395 - <_> - - <_> - - - - <_> - 23 8 2 4 -1. - <_> - 23 8 1 4 2. - 0 - 9.6693442901596427e-004 - -0.0378436110913754 - 0.0635498985648155 - <_> - - <_> - - - - <_> - 0 5 3 3 -1. - <_> - 0 6 3 1 3. - 0 - 0.0120417503640056 - 0.0180350895971060 - -0.4774137139320374 - <_> - - <_> - - - - <_> - 21 5 4 2 -1. - <_> - 22 5 2 2 2. - 0 - 2.3097700905054808e-003 - -0.0415334291756153 - 0.1302794069051743 - <_> - - <_> - - - - <_> - 0 5 4 2 -1. - <_> - 1 5 2 2 2. - 0 - 2.2019869647920132e-003 - -0.0514689311385155 - 0.1736146062612534 - <_> - - <_> - - - - <_> - 21 2 3 4 -1. - <_> - 22 3 1 4 3. - 1 - 0.0272558908909559 - -0.0153390001505613 - 0.3625235855579376 - <_> - - <_> - - - - <_> - 4 2 4 3 -1. - <_> - 3 3 4 1 3. - 1 - 8.8747506961226463e-003 - -0.0426916293799877 - 0.2076780050992966 - <_> - - <_> - - - - <_> - 23 2 2 2 -1. - <_> - 23 2 2 1 2. - 1 - 4.7241621650755405e-003 - -0.0500567816197872 - 0.0873611792922020 - <_> - - <_> - - - - <_> - 0 5 4 4 -1. - <_> - 0 6 4 2 2. - 0 - 7.3167313530575484e-005 - -0.1244131028652191 - 0.0726777836680412 - <_> - - <_> - - - - <_> - 23 7 2 5 -1. - <_> - 23 7 1 5 2. - 0 - -1.2639940250664949e-003 - 0.0776199027895927 - -0.0404986217617989 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - 3.6909559275954962e-003 - 0.0311388503760099 - -0.3086219131946564 - <_> - - <_> - - - - <_> - 23 1 2 4 -1. - <_> - 23 3 2 2 2. - 0 - -0.0283522401005030 - -0.3550184071063995 - 0.0135328602045774 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 3 2 2 2. - 0 - -9.6667202888056636e-004 - 0.0676028430461884 - -0.1432974934577942 - <_> - - <_> - - - - <_> - 19 3 5 4 -1. - <_> - 19 4 5 2 2. - 0 - -0.0587403103709221 - -0.5506312847137451 - 4.2741261422634125e-003 - <_> - - <_> - - - - <_> - 12 1 6 2 -1. - <_> - 12 1 6 1 2. - 1 - -0.0272757392376661 - -0.6493160724639893 - 0.0125345299020410 - <_> - - <_> - - - - <_> - 19 11 6 4 -1. - <_> - 19 12 6 2 2. - 0 - -0.0117558799684048 - -0.5648565292358398 - 0.0137637602165341 - <_> - - <_> - - - - <_> - 1 3 6 4 -1. - <_> - 1 4 6 2 2. - 0 - 7.5923758558928967e-003 - -0.0431140698492527 - 0.2005586028099060 - <_> - - <_> - - - - <_> - 23 0 2 1 -1. - <_> - 23 0 1 1 2. - 1 - -7.1979401400312781e-004 - -0.1374174952507019 - 0.0340671092271805 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 4.1190441697835922e-003 - 0.0367105789482594 - -0.2477497011423111 - <_> - - <_> - - - - <_> - 19 0 4 2 -1. - <_> - 20 0 2 2 2. - 0 - 7.5443051755428314e-003 - 7.2344779036939144e-003 - -0.4473736882209778 - <_> - - <_> - - - - <_> - 0 0 2 12 -1. - <_> - 0 0 1 6 2. - <_> - 1 6 1 6 2. - 0 - -5.2358289249241352e-003 - 0.2173164039850235 - -0.0386803299188614 - <_> - - <_> - - - - <_> - 22 4 2 8 -1. - <_> - 23 4 1 4 2. - <_> - 22 8 1 4 2. - 0 - 7.4686598964035511e-004 - -0.0371707193553448 - 0.0385193713009357 - <_> - - <_> - - - - <_> - 1 4 2 8 -1. - <_> - 1 4 1 4 2. - <_> - 2 8 1 4 2. - 0 - 8.8468490866944194e-004 - -0.1020980030298233 - 0.0926149412989616 - <_> - - <_> - - - - <_> - 17 9 4 1 -1. - <_> - 17 9 2 1 2. - 0 - -1.1738609755411744e-003 - 0.1108791977167130 - -0.0856960415840149 - <_> - - <_> - - - - <_> - 12 2 5 8 -1. - <_> - 10 4 5 4 2. - 1 - -0.0989599674940109 - -0.4499149918556213 - 0.0212421305477619 - <_> - - <_> - - - - <_> - 18 13 2 2 -1. - <_> - 19 13 1 1 2. - <_> - 18 14 1 1 2. - 0 - 8.8248471729457378e-004 - 0.0228975899517536 - -0.1995048969984055 - <_> - - <_> - - - - <_> - 6 9 13 6 -1. - <_> - 6 11 13 2 3. - 0 - -0.0413776896893978 - 0.1549389958381653 - -0.0591393709182739 - <_> - - <_> - - - - <_> - 6 10 13 4 -1. - <_> - 6 11 13 2 2. - 0 - 6.7946789786219597e-003 - -0.0783610120415688 - 0.1739570051431656 - <_> - - <_> - - - - <_> - 0 8 24 4 -1. - <_> - 0 8 12 2 2. - <_> - 12 10 12 2 2. - 0 - 0.0447585098445416 - 0.0260890107601881 - -0.3311159014701843 - <_> - - <_> - - - - <_> - 17 10 8 3 -1. - <_> - 17 11 8 1 3. - 0 - 2.9978479724377394e-003 - 0.0459281504154205 - -0.1491470038890839 - <_> - - <_> - - - - <_> - 4 0 16 8 -1. - <_> - 4 0 8 4 2. - <_> - 12 4 8 4 2. - 0 - -0.0595893599092960 - -0.2485350966453552 - 0.0325236506760120 - <_> - - <_> - - - - <_> - 14 0 1 2 -1. - <_> - 14 1 1 1 2. - 0 - 9.4199320301413536e-004 - -0.0425546802580357 - 0.1344856023788452 - <_> - - <_> - - - - <_> - 3 9 6 6 -1. - <_> - 5 9 2 6 3. - 0 - -0.0239475108683109 - -0.4583190977573395 - 0.0178181305527687 - <_> - - <_> - - - - <_> - 13 10 12 3 -1. - <_> - 16 10 6 3 2. - 0 - 7.4462359771132469e-003 - -0.0423585288226604 - 0.0580310709774494 - <_> - - <_> - - - - <_> - 0 10 12 3 -1. - <_> - 3 10 6 3 2. - 0 - -0.0129095697775483 - 0.1973039060831070 - -0.0445232689380646 - <_> - - <_> - - - - <_> - 19 8 5 3 -1. - <_> - 19 9 5 1 3. - 0 - 2.8930921107530594e-003 - 0.0428810603916645 - -0.1371746063232422 - <_> - - <_> - - - - <_> - 7 1 3 1 -1. - <_> - 8 1 1 1 3. - 0 - -6.8186258431524038e-004 - 0.1337869018316269 - -0.0565496906638145 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 1 1 1 3. - 0 - 9.0884382370859385e-004 - -0.0361675098538399 - 0.1220118999481201 - <_> - - <_> - - - - <_> - 7 1 3 1 -1. - <_> - 8 1 1 1 3. - 0 - 4.2305429815314710e-004 - -0.0695094764232636 - 0.1302513927221298 - <_> - - <_> - - - - <_> - 20 8 2 3 -1. - <_> - 20 9 2 1 3. - 0 - -1.6460029873996973e-003 - -0.1300535947084427 - 0.0327382087707520 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 3 0 2 2 2. - 0 - 7.2493818588554859e-003 - 0.0122888395562768 - -0.6227869987487793 - <_> - - <_> - - - - <_> - 19 8 5 3 -1. - <_> - 19 9 5 1 3. - 0 - 7.8207803890109062e-003 - 7.4369488283991814e-003 - -0.1486981958150864 - <_> - - <_> - - - - <_> - 4 1 6 11 -1. - <_> - 6 1 2 11 3. - 0 - 0.0359272807836533 - 0.0188675802201033 - -0.3921496868133545 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 0 - -6.1618811741936952e-005 - 0.0568877793848515 - -0.0677392184734344 - <_> - - <_> - - - - <_> - 5 2 15 4 -1. - <_> - 5 3 15 2 2. - 0 - 0.0374080687761307 - -0.0385471209883690 - 0.2218790054321289 - <_> - - <_> - - - - <_> - 11 2 3 3 -1. - <_> - 11 3 3 1 3. - 0 - -5.2155661396682262e-003 - 0.1363334953784943 - -0.0673948600888252 - <_> - - <_> - - - - <_> - 2 7 18 6 -1. - <_> - 11 7 9 6 2. - 0 - -0.0935681909322739 - 0.1743745058774948 - -0.0487747117877007 - <_> - - <_> - - - - <_> - 1 6 24 9 -1. - <_> - 7 6 12 9 2. - 0 - 0.0762281417846680 - -0.0574758499860764 - 0.1471180021762848 - <_> - - <_> - - - - <_> - 0 0 1 10 -1. - <_> - 0 5 1 5 2. - 0 - -0.0200377702713013 - -0.4157789945602417 - 0.0179230198264122 - <_> - - <_> - - - - <_> - 9 3 10 2 -1. - <_> - 9 4 10 1 2. - 0 - -0.0118243796750903 - 0.1144623011350632 - -0.0700482204556465 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - -1.6057320171967149e-003 - 0.1678820997476578 - -0.0499466583132744 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 0 - -2.5517439935356379e-003 - -0.3828516900539398 - 0.0113612702116370 - <_> - - <_> - - - - <_> - 7 9 2 1 -1. - <_> - 8 9 1 1 2. - 0 - -9.9515629699453712e-005 - 0.0925496816635132 - -0.0903496667742729 - <_> - - <_> - - - - <_> - 16 7 6 6 -1. - <_> - 19 7 3 3 2. - <_> - 16 10 3 3 2. - 0 - -0.0167104993015528 - 0.1787143051624298 - -0.0413177497684956 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -9.6687301993370056e-004 - -0.2522006928920746 - 0.0305528100579977 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -6.0828930145362392e-005 - 0.0542593784630299 - -0.0474381409585476 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -8.6335372179746628e-004 - 0.1779994070529938 - -0.0423120781779289 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - -8.9218461653217673e-004 - -0.1845878958702087 - 0.0251416098326445 - <_> - - <_> - - - - <_> - 11 7 2 3 -1. - <_> - 11 8 2 1 3. - 0 - -3.4870179370045662e-003 - 0.1677664965391159 - -0.0460440590977669 - <_> - - <_> - - - - <_> - 19 0 6 3 -1. - <_> - 19 1 6 1 3. - 0 - 0.0195988900959492 - 0.0180558506399393 - -0.3022567927837372 - <_> - - <_> - - - - <_> - 0 0 6 3 -1. - <_> - 0 1 6 1 3. - 0 - -0.0109872100874782 - -0.3727653026580811 - 0.0197681505233049 - <_> - - <_> - - - - <_> - 24 0 1 2 -1. - <_> - 24 1 1 1 2. - 0 - -6.6390639403834939e-005 - 0.0768569633364677 - -0.1268360018730164 - <_> - - <_> - - - - <_> - 0 0 16 1 -1. - <_> - 4 0 8 1 2. - 0 - -4.2606238275766373e-003 - 0.1132820025086403 - -0.0696604028344154 - <_> - - <_> - - - - <_> - 19 11 6 4 -1. - <_> - 19 12 6 2 2. - 0 - 7.3147160001099110e-003 - 0.0329976715147495 - -0.2646273076534271 - <_> - - <_> - - - - <_> - 0 11 6 4 -1. - <_> - 0 12 6 2 2. - 0 - -0.0101194800809026 - -0.4706184864044190 - 0.0138464700430632 - <_> - - <_> - - - - <_> - 5 3 15 6 -1. - <_> - 5 6 15 3 2. - 0 - 0.0921443328261375 - -0.0886306688189507 - 0.0808285027742386 - <_> - - <_> - - - - <_> - 8 3 9 3 -1. - <_> - 8 4 9 1 3. - 0 - 0.0118425898253918 - -0.0542713403701782 - 0.1590622961521149 - <_> - - <_> - - - - <_> - 12 0 1 12 -1. - <_> - 12 3 1 6 2. - 0 - 0.0260604508221149 - 0.0202190801501274 - -0.3709642887115479 - <_> - - <_> - - - - <_> - 1 3 14 8 -1. - <_> - 1 7 14 4 2. - 0 - 0.2863250076770783 - 0.0171639006584883 - -0.3946934938430786 - <_> - - <_> - - - - <_> - 15 0 6 4 -1. - <_> - 17 0 2 4 3. - 0 - -0.0193374603986740 - -0.2173891961574554 - 0.0148878796026111 - <_> - - <_> - - - - <_> - 3 7 4 2 -1. - <_> - 3 7 2 1 2. - <_> - 5 8 2 1 2. - 0 - 6.8996037589386106e-004 - -0.0642509534955025 - 0.1074123978614807 - <_> - - <_> - - - - <_> - 14 5 1 8 -1. - <_> - 14 9 1 4 2. - 0 - 0.0273154806345701 - 5.0893737934529781e-003 - -0.5541477799415588 - <_> - - <_> - - - - <_> - 0 7 3 3 -1. - <_> - 0 8 3 1 3. - 0 - -7.3149320669472218e-003 - -0.5788456201553345 - 0.0114226602017879 - <_> - - <_> - - - - <_> - 11 12 6 3 -1. - <_> - 13 12 2 3 3. - 0 - 0.0134929800406098 - 6.9531891494989395e-003 - -0.3359794020652771 - <_> - - <_> - - - - <_> - 8 12 6 3 -1. - <_> - 10 12 2 3 3. - 0 - 0.0170349292457104 - 9.6587073057889938e-003 - -0.6638085842132568 - <_> - - <_> - - - - <_> - 16 5 6 10 -1. - <_> - 19 5 3 5 2. - <_> - 16 10 3 5 2. - 0 - -0.0495363213121891 - -0.1099594011902809 - 7.1444557979702950e-003 - <_> - - <_> - - - - <_> - 3 5 6 10 -1. - <_> - 3 5 3 5 2. - <_> - 6 10 3 5 2. - 0 - -0.0326232202351093 - 0.1888170987367630 - -0.0416569598019123 - <_> - - <_> - - - - <_> - 17 8 8 1 -1. - <_> - 19 8 4 1 2. - 0 - 2.5752598885446787e-003 - -0.0510260090231895 - 0.1057118028402329 - <_> - - <_> - - - - <_> - 0 8 8 1 -1. - <_> - 2 8 4 1 2. - 0 - 2.4968909565359354e-003 - -0.0559858083724976 - 0.1347001940011978 - <_> - - <_> - - - - <_> - 9 13 14 2 -1. - <_> - 9 13 7 2 2. - 0 - -0.0116916997358203 - 0.0694792568683624 - -0.0498108491301537 - <_> - - <_> - - - - <_> - 1 14 20 1 -1. - <_> - 6 14 10 1 2. - 0 - 5.0966278649866581e-003 - -0.0719841867685318 - 0.1201341003179550 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - 8.6429098155349493e-004 - -0.0280915908515453 - 0.1105908975005150 - <_> - - <_> - - - - <_> - 0 8 2 2 -1. - <_> - 0 9 2 1 2. - 0 - -3.0658349860459566e-003 - -0.4070394039154053 - 0.0187105592340231 - <_> - - <_> - - - - <_> - 17 7 2 2 -1. - <_> - 18 7 1 1 2. - <_> - 17 8 1 1 2. - 0 - -5.5272910685744137e-005 - 0.0707912817597389 - -0.0700317397713661 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 6.5698497928678989e-004 - -0.0492957085371017 - 0.1548248976469040 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - 5.3707341430708766e-004 - 0.0302961803972721 - -0.1238510981202126 - <_> - - <_> - - - - <_> - 4 0 6 4 -1. - <_> - 6 0 2 4 3. - 0 - -0.0272689107805490 - -0.4674024879932404 - 0.0149874398484826 - <_> - - <_> - - - - <_> - 10 0 6 2 -1. - <_> - 12 0 2 2 3. - 0 - -2.6138951070606709e-003 - 0.1166682019829750 - -0.0615368783473969 - <_> - - <_> - - - - <_> - 8 1 8 3 -1. - <_> - 10 1 4 3 2. - 0 - -0.0277075897902250 - -0.6434546709060669 - 0.0120052499696612 - <_> - - <_> - - - - <_> - 14 6 7 2 -1. - <_> - 14 6 7 1 2. - 1 - -0.0200542695820332 - -0.3493579030036926 - 0.0109763201326132 - <_> - - <_> - - - - <_> - 8 10 4 1 -1. - <_> - 9 10 2 1 2. - 0 - 6.9170317146927118e-004 - 0.0442647784948349 - -0.1491888016462326 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - 6.4560663304291666e-005 - -0.0422041602432728 - 0.0473436005413532 - <_> - - <_> - - - - <_> - 7 11 2 2 -1. - <_> - 7 11 1 1 2. - <_> - 8 12 1 1 2. - 0 - -8.8378103100694716e-005 - 0.1016054973006249 - -0.0740641728043556 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - -6.6106527810916305e-005 - 0.0759406536817551 - -0.0495208092033863 - <_> - - <_> - - - - <_> - 7 11 2 2 -1. - <_> - 7 11 1 1 2. - <_> - 8 12 1 1 2. - 0 - 4.2288508848287165e-004 - -0.0588600113987923 - 0.1385688036680222 - <_> - - <_> - - - - <_> - 17 9 4 1 -1. - <_> - 17 9 2 1 2. - 0 - 2.5251980405300856e-003 - -0.0302844792604446 - 0.1643659025430679 - <_> - - <_> - - - - <_> - 4 9 4 1 -1. - <_> - 6 9 2 1 2. - 0 - -9.0347938239574432e-003 - -0.6502289175987244 - 0.0117079298943281 - <_> - - <_> - - - - <_> - 11 8 3 4 -1. - <_> - 11 9 3 2 2. - 0 - -4.2698681354522705e-003 - 0.1213309019804001 - -0.0608336813747883 - <_> - - <_> - - - - <_> - 9 6 3 2 -1. - <_> - 10 7 1 2 3. - 1 - 0.0166539791971445 - 0.0145571101456881 - -0.5031678080558777 - <_> - - <_> - - - - <_> - 21 0 4 8 -1. - <_> - 19 2 4 4 2. - 1 - -0.1178558021783829 - -0.3486539125442505 - 5.8299610391259193e-003 - <_> - - <_> - - - - <_> - 4 0 8 4 -1. - <_> - 6 2 4 4 2. - 1 - -0.0389890410006046 - 0.1082129999995232 - -0.0824354067444801 - <_> - - <_> - - - - <_> - 20 1 5 2 -1. - <_> - 20 1 5 1 2. - 1 - -6.9744870997965336e-003 - 0.0920993909239769 - -0.0447417609393597 - <_> - - <_> - - - - <_> - 0 6 6 4 -1. - <_> - 0 7 6 2 2. - 0 - 0.0154374102130532 - 0.0294817406684160 - -0.2408691942691803 - <_> - - <_> - - - - <_> - 20 6 5 4 -1. - <_> - 20 7 5 2 2. - 0 - -5.9599988162517548e-003 - -0.2254153043031693 - 0.0256420802325010 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 8 1 1 3. - 0 - -5.3358142031356692e-004 - 0.1183808967471123 - -0.0571242086589336 - <_> - - <_> - - - - <_> - 1 8 24 2 -1. - <_> - 13 8 12 1 2. - <_> - 1 9 12 1 2. - 0 - 0.0176937691867352 - 0.0266077890992165 - -0.3055857121944428 - <_> - - <_> - - - - <_> - 8 8 8 3 -1. - <_> - 8 9 8 1 3. - 0 - 5.3599448874592781e-003 - -0.0569497905671597 - 0.1210888996720314 - <_> - - <_> - - - - <_> - 17 11 6 4 -1. - <_> - 19 11 2 4 3. - 0 - 0.0158548094332218 - 0.0215572193264961 - -0.2521420121192932 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 9 0 9 1 2. - 0 - 0.0549633502960205 - 0.0106362197548151 - -0.5730599761009216 - <_> - - <_> - - - - <_> - 14 6 3 2 -1. - <_> - 15 7 1 2 3. - 1 - -3.7383600138127804e-003 - 0.0774415433406830 - -0.0306048095226288 - <_> - - <_> - - - - <_> - 5 6 13 2 -1. - <_> - 5 7 13 1 2. - 0 - 0.0182623900473118 - -0.0549028292298317 - 0.1176588013768196 - <_> - - <_> - - - - <_> - 14 6 3 2 -1. - <_> - 15 7 1 2 3. - 1 - -0.0318278707563877 - -0.9110031723976135 - 1.3938200427219272e-003 - <_> - - <_> - - - - <_> - 10 6 2 6 -1. - <_> - 10 8 2 2 3. - 0 - -3.6466179881244898e-003 - 0.1085240989923477 - -0.0722526162862778 - <_> - - <_> - - - - <_> - 20 1 5 2 -1. - <_> - 20 1 5 1 2. - 1 - -0.0517431795597076 - -0.9186943173408508 - 1.8797840457409620e-003 - <_> - - <_> - - - - <_> - 5 1 2 5 -1. - <_> - 5 1 1 5 2. - 1 - -9.0449545532464981e-003 - 0.1787680983543396 - -0.0388442091643810 - <_> - - <_> - - - - <_> - 24 7 1 8 -1. - <_> - 24 9 1 4 2. - 0 - -4.5340228825807571e-003 - -0.2472573071718216 - 0.0297267790883780 - <_> - - <_> - - - - <_> - 7 7 11 3 -1. - <_> - 7 8 11 1 3. - 0 - 6.8734101951122284e-003 - -0.0675214827060699 - 0.1065412983298302 - <_> - - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 14 11 1 1 2. - <_> - 13 12 1 1 2. - 0 - 7.7327789040282369e-004 - 0.0221925694495440 - -0.1398307979106903 - <_> - - <_> - - - - <_> - 10 11 3 1 -1. - <_> - 11 11 1 1 3. - 0 - -8.5252941062208265e-005 - 0.0903024971485138 - -0.0786189734935761 - <_> - - <_> - - - - <_> - 24 7 1 8 -1. - <_> - 24 9 1 4 2. - 0 - 4.8931739293038845e-003 - 0.0311242006719112 - -0.1617130041122437 - <_> - - <_> - - - - <_> - 10 5 2 4 -1. - <_> - 10 5 2 2 2. - 1 - -0.0357618294656277 - -0.3406237065792084 - 0.0201859101653099 - <_> - - <_> - - - - <_> - 22 1 2 3 -1. - <_> - 21 2 2 1 3. - 1 - -0.0110698901116848 - 0.1165141984820366 - -0.0340334698557854 - <_> - - <_> - - - - <_> - 3 1 3 2 -1. - <_> - 4 2 1 2 3. - 1 - 3.4201510716229677e-003 - -0.0530161187052727 - 0.1339436024427414 - <_> - - <_> - - - - <_> - 16 4 3 3 -1. - <_> - 17 5 1 1 9. - 0 - -0.0499692708253860 - -0.8493295907974243 - 2.7547380886971951e-003 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 3 0 3 1 2. - 1 - -1.1221430031582713e-003 - -0.1629413068294525 - 0.0413381010293961 - <_> - - <_> - - - - <_> - 17 0 8 3 -1. - <_> - 17 0 4 3 2. - 0 - 0.0371481291949749 - 0.0171750299632549 - -0.2840433120727539 - <_> - - <_> - - - - <_> - 0 12 4 3 -1. - <_> - 0 13 4 1 3. - 0 - 2.3847341071814299e-003 - 0.0348382107913494 - -0.1844726949930191 - <_> - - <_> - - - - <_> - 2 3 21 3 -1. - <_> - 9 3 7 3 3. - 0 - 0.1431124955415726 - 0.0252217296510935 - -0.2543725967407227 - <_> - - <_> - - - - <_> - 8 1 2 5 -1. - <_> - 8 1 1 5 2. - 1 - -0.0119188595563173 - 0.1655784994363785 - -0.0447442717850208 - <_> - - <_> - - - - <_> - 19 7 6 4 -1. - <_> - 22 7 3 2 2. - <_> - 19 9 3 2 2. - 0 - 6.4779450185596943e-003 - -0.0250237993896008 - 0.0799132883548737 - <_> - - <_> - - - - <_> - 0 7 6 4 -1. - <_> - 0 7 3 2 2. - <_> - 3 9 3 2 2. - 0 - 1.4581739669665694e-003 - -0.0797923728823662 - 0.0829188674688339 - <_> - - <_> - - - - <_> - 24 4 1 4 -1. - <_> - 24 5 1 2 2. - 0 - 6.2418850138783455e-003 - 0.0132909296080470 - -0.2995111048221588 - <_> - - <_> - - - - <_> - 4 7 3 4 -1. - <_> - 3 8 3 2 2. - 1 - -0.0227145906537771 - 0.4398984909057617 - -0.0150371296331286 - <_> - - <_> - - - - <_> - 17 9 4 1 -1. - <_> - 18 9 2 1 2. - 0 - -4.3001482263207436e-003 - -0.3546585142612457 - 7.9521266743540764e-003 - <_> - - <_> - - - - <_> - 4 9 4 1 -1. - <_> - 5 9 2 1 2. - 0 - 1.0604769922792912e-003 - 0.0385937690734863 - -0.1762923002243042 - <_> - - <_> - - - - <_> - 23 6 2 2 -1. - <_> - 23 7 2 1 2. - 0 - 4.3205441907048225e-003 - 0.0171245392411947 - -0.1075016036629677 - <_> - - <_> - - - - <_> - 0 6 2 2 -1. - <_> - 0 7 2 1 2. - 0 - -3.8217399269342422e-003 - -0.4589209854602814 - 0.0141258295625448 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 0 1 1 3. - 0 - 9.7336847102269530e-004 - -0.0361551195383072 - 0.1268056929111481 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -7.9081847798079252e-004 - 0.1707147061824799 - -0.0376146212220192 - <_> - - <_> - - - - <_> - 22 7 2 2 -1. - <_> - 23 7 1 1 2. - <_> - 22 8 1 1 2. - 0 - -7.6159887248650193e-004 - 0.2311398983001709 - -0.0603629797697067 - <_> - - <_> - - - - <_> - 2 11 6 4 -1. - <_> - 4 11 2 4 3. - 0 - -0.0210315398871899 - -0.4918564856052399 - 0.0156012997031212 - <_> - - <_> - - - - <_> - 14 1 10 4 -1. - <_> - 19 1 5 2 2. - <_> - 14 3 5 2 2. - 0 - 0.0180973205715418 - -0.0467358492314816 - 0.1050693020224571 - <_> - - <_> - - - - <_> - 6 2 12 2 -1. - <_> - 6 3 12 1 2. - 0 - -0.0131208598613739 - 0.1018344014883041 - -0.0857265591621399 - <_> - - <_> - - - - <_> - 9 6 8 9 -1. - <_> - 9 9 8 3 3. - 0 - 0.2012819051742554 - -9.4874696806073189e-003 - 0.5418189764022827 - <_> - - <_> - - - - <_> - 3 8 3 3 -1. - <_> - 4 9 1 1 9. - 0 - 7.3326090350747108e-003 - 0.0282447207719088 - -0.2452981024980545 - <_> - - <_> - - - - <_> - 22 7 2 2 -1. - <_> - 23 7 1 1 2. - <_> - 22 8 1 1 2. - 0 - 9.0540642850100994e-004 - -0.0559650883078575 - 0.2322594970464706 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 11 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - 5.3532002493739128e-004 - 0.0432194508612156 - -0.1652047038078308 - <_> - - <_> - - - - <_> - 22 7 2 2 -1. - <_> - 23 7 1 1 2. - <_> - 22 8 1 1 2. - 0 - -8.0239711678586900e-005 - 0.0588538907468319 - -0.0475415214896202 - <_> - - <_> - - - - <_> - 4 13 10 1 -1. - <_> - 9 13 5 1 2. - 0 - 4.8403399996459484e-003 - -0.0541158504784107 - 0.1303326934576035 - <_> - - <_> - - - - <_> - 3 0 20 15 -1. - <_> - 3 0 10 15 2. - 0 - 0.6619219779968262 - -0.0147952698171139 - 0.5785722732543945 - <_> - - <_> - - - - <_> - 0 13 24 1 -1. - <_> - 6 13 12 1 2. - 0 - -8.5441237315535545e-003 - 0.1165743991732597 - -0.0628988370299339 - <_> - - <_> - - - - <_> - 22 7 2 2 -1. - <_> - 23 7 1 1 2. - <_> - 22 8 1 1 2. - 0 - 5.4021849791752174e-005 - -0.0602008998394012 - 0.0699716731905937 - -1.2540320158004761 - 15 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_nose.xml b/data/haarcascades/haarcascade_mcs_nose.xml deleted file mode 100644 index 051c38c..0000000 --- a/data/haarcascades/haarcascade_mcs_nose.xml +++ /dev/null @@ -1,48433 +0,0 @@ - - - - - - 18 15 - - <_> - - - <_> - - <_> - - - - <_> - 8 4 4 4 -1. - <_> - 8 4 4 2 2. - 1 - 0.0363217890262604 - -0.6772649884223938 - 0.6687346100807190 - <_> - - <_> - - - - <_> - 3 0 12 7 -1. - <_> - 6 0 6 7 2. - 0 - 0.0544859282672405 - -0.4403176903724670 - 0.4891850948333740 - <_> - - <_> - - - - <_> - 3 5 12 9 -1. - <_> - 3 8 12 3 3. - 0 - -0.1508972942829132 - 0.6370239257812500 - -0.2814675867557526 - <_> - - <_> - - - - <_> - 6 0 6 8 -1. - <_> - 6 0 3 8 2. - 0 - -0.0794939175248146 - 0.6347042918205261 - -0.1611918956041336 - <_> - - <_> - - - - <_> - 3 8 12 4 -1. - <_> - 3 10 12 2 2. - 0 - -0.0670417398214340 - 0.5956599712371826 - -0.1645421981811523 - <_> - - <_> - - - - <_> - 10 1 3 8 -1. - <_> - 10 1 3 4 2. - 1 - 0.1654247045516968 - -0.0291650108993053 - 0.2784962058067322 - <_> - - <_> - - - - <_> - 8 1 8 3 -1. - <_> - 8 1 4 3 2. - 1 - 0.1449110060930252 - -0.1593054980039597 - 0.5626019239425659 - <_> - - <_> - - - - <_> - 3 0 12 3 -1. - <_> - 3 1 12 1 3. - 0 - -0.0126969404518604 - -0.6924440860748291 - 0.1042767018079758 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 8 1 2 1 3. - 0 - 5.2858339622616768e-003 - 0.0736001133918762 - -0.8135973811149597 - <_> - - <_> - - - - <_> - 5 6 11 9 -1. - <_> - 5 9 11 3 3. - 0 - 0.1319603025913239 - -0.0852369293570518 - 0.6464285850524902 - <_> - - <_> - - - - <_> - 7 1 2 1 -1. - <_> - 8 1 1 1 2. - 0 - 2.6259789592586458e-005 - -0.2522526085376740 - 0.2770084142684937 - <_> - - <_> - - - - <_> - 9 1 2 1 -1. - <_> - 9 1 1 1 2. - 0 - 8.9456392743159086e-005 - -0.1598252952098846 - 0.1796030998229981 - <_> - - <_> - - - - <_> - 4 0 9 7 -1. - <_> - 7 0 3 7 3. - 0 - -0.0181720405817032 - 0.4662343859672546 - -0.1598974019289017 - <_> - - <_> - - - - <_> - 3 7 12 8 -1. - <_> - 3 9 12 4 2. - 0 - -0.1194007992744446 - 0.5828961133956909 - -0.1248269975185394 - <_> - - <_> - - - - <_> - 2 0 14 14 -1. - <_> - 9 0 7 14 2. - 0 - -0.4961996078491211 - 0.7593098878860474 - -0.0939436629414558 - <_> - - <_> - - - - <_> - 3 4 12 9 -1. - <_> - 3 7 12 3 3. - 0 - -0.1830939948558807 - 0.5817549228668213 - -0.0883935913443565 - -1.8310650587081909 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 3 6 1 -1. - <_> - 8 3 3 1 2. - 0 - 0.0485280007123947 - 1.5333959890995175e-004 - -2.6736979980468750e+003 - <_> - - <_> - - - - <_> - 9 2 6 4 -1. - <_> - 9 2 3 4 2. - 1 - 0.1116186007857323 - -0.1391783952713013 - 0.4706197082996368 - <_> - - <_> - - - - <_> - 9 2 5 6 -1. - <_> - 9 2 5 3 2. - 1 - 0.1409423947334290 - -0.4590255022048950 - 0.6874074935913086 - <_> - - <_> - - - - <_> - 10 0 4 9 -1. - <_> - 7 3 4 3 3. - 1 - -0.1528792977333069 - 0.2594836950302124 - -0.0452645681798458 - <_> - - <_> - - - - <_> - 8 0 8 4 -1. - <_> - 10 2 4 4 2. - 1 - 0.0578792616724968 - -0.3745568990707398 - 0.4699620902538300 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 7 0 4 1 3. - 0 - 5.9482799842953682e-003 - -0.3329465985298157 - 0.2753989100456238 - <_> - - <_> - - - - <_> - 2 6 14 9 -1. - <_> - 2 9 14 3 3. - 0 - -0.1846064031124115 - 0.4868184924125671 - -0.1640070974826813 - <_> - - <_> - - - - <_> - 9 0 5 3 -1. - <_> - 9 1 5 1 3. - 0 - -6.6531449556350708e-003 - -0.6523829102516174 - 0.1116930022835732 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 0 5 1 2. - <_> - 9 1 5 1 2. - 0 - 8.0141983926296234e-003 - 0.1197912991046906 - -0.7178090810775757 - <_> - - <_> - - - - <_> - 6 0 12 14 -1. - <_> - 9 0 6 14 2. - 0 - 0.1370732933282852 - -0.1418797969818115 - 0.3295237123966217 - <_> - - <_> - - - - <_> - 5 0 6 3 -1. - <_> - 5 1 6 1 3. - 0 - 9.0329283848404884e-003 - 0.1041319966316223 - -0.7335981130599976 - <_> - - <_> - - - - <_> - 14 0 4 14 -1. - <_> - 14 7 4 7 2. - 0 - -0.1803364008665085 - -0.5487949252128601 - 0.0710614770650864 - <_> - - <_> - - - - <_> - 4 1 10 2 -1. - <_> - 4 1 5 1 2. - <_> - 9 2 5 1 2. - 0 - -7.8154532238841057e-003 - -0.6895282268524170 - 0.1063653975725174 - <_> - - <_> - - - - <_> - 2 9 14 4 -1. - <_> - 2 11 14 2 2. - 0 - -0.1088579967617989 - 0.7059208154678345 - -0.1002665981650353 - <_> - - <_> - - - - <_> - 2 4 14 9 -1. - <_> - 2 7 14 3 3. - 0 - -0.1726516932249069 - 0.4895541071891785 - -0.1376973986625671 - <_> - - <_> - - - - <_> - 14 0 4 12 -1. - <_> - 14 6 4 6 2. - 0 - 0.0574669800698757 - 0.0478747487068176 - -0.3361113071441650 - <_> - - <_> - - - - <_> - 0 0 4 12 -1. - <_> - 0 6 4 6 2. - 0 - -0.1294801980257034 - -0.6789883971214294 - 0.1097540035843849 - <_> - - <_> - - - - <_> - 11 1 3 3 -1. - <_> - 11 2 3 1 3. - 0 - -5.8118398301303387e-003 - -0.5081049203872681 - 0.0530205518007278 - <_> - - <_> - - - - <_> - 6 3 4 2 -1. - <_> - 6 3 2 1 2. - <_> - 8 4 2 1 2. - 0 - -5.2181649953126907e-003 - -0.7440345287322998 - 0.0739578828215599 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 1 6 2 2. - 0 - -0.0141012202948332 - -0.5120034217834473 - 0.0294169094413519 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -2.3739310563541949e-005 - 0.2070824950933456 - -0.2183579057455063 - <_> - - <_> - - - - <_> - 7 1 4 3 -1. - <_> - 7 2 4 1 3. - 0 - 6.6746207885444164e-003 - 0.0782192721962929 - -0.5858296751976013 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 4 2 3 1 3. - 0 - -6.5912399441003799e-003 - -0.6527547240257263 - 0.0550902597606182 - <_> - - <_> - - - - <_> - 10 1 8 14 -1. - <_> - 10 8 8 7 2. - 0 - 0.2605709135532379 - 0.0209255293011665 - -0.6453688144683838 - -1.7070330381393433 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 5 8 6 -1. - <_> - 5 8 8 3 2. - 0 - -0.0890733674168587 - 0.5498613119125366 - -0.5031049251556397 - <_> - - <_> - - - - <_> - 9 0 8 12 -1. - <_> - 11 0 4 12 2. - 0 - -0.0470851697027683 - 0.3855659961700440 - -0.1619472056627274 - <_> - - <_> - - - - <_> - 4 0 8 10 -1. - <_> - 8 0 4 10 2. - 0 - 0.1344425976276398 - -0.3161787092685700 - 0.5639414191246033 - <_> - - <_> - - - - <_> - 9 2 2 8 -1. - <_> - 9 2 2 4 2. - 1 - 4.2632790282368660e-003 - -0.2234936952590942 - 0.0977761000394821 - <_> - - <_> - - - - <_> - 9 3 8 2 -1. - <_> - 9 3 4 2 2. - 1 - 0.1214829981327057 - -0.1339429020881653 - 0.5355374813079834 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 10 1 1 2 2. - 0 - -3.3225349616259336e-003 - -0.6828700900077820 - 0.0832272768020630 - <_> - - <_> - - - - <_> - 4 2 10 2 -1. - <_> - 4 2 5 1 2. - <_> - 9 3 5 1 2. - 0 - -7.7031590044498444e-003 - -0.6824396848678589 - 0.1067868992686272 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 9 0 9 2 2. - <_> - 0 2 9 2 2. - 0 - -0.0353097803890705 - -0.6521000862121582 - 0.0987162664532661 - <_> - - <_> - - - - <_> - 1 0 8 14 -1. - <_> - 3 0 4 14 2. - 0 - -0.0304474700242281 - 0.2479538023471832 - -0.2581886053085327 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - 4.8874127678573132e-003 - 0.0805528536438942 - -0.6340317130088806 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 6 12 4 2. - 0 - -0.1415794938802719 - 0.6374232172966003 - -0.0921661630272865 - <_> - - <_> - - - - <_> - 4 4 10 9 -1. - <_> - 4 7 10 3 3. - 0 - 0.1456591933965683 - -0.1032999008893967 - 0.5838242173194885 - <_> - - <_> - - - - <_> - 1 0 8 3 -1. - <_> - 1 1 8 1 3. - 0 - -0.0116241797804832 - -0.6888915896415710 - 0.0828648507595062 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 2 6 2 2. - 0 - -0.0217475499957800 - -0.6213839054107666 - 0.0476981997489929 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 6 0 6 2 2. - 0 - 0.0184830799698830 - -0.2010547071695328 - 0.2679708898067474 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.0369827300310135 - -0.1693059951066971 - 0.2272700071334839 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 7 0 3 1 2. - 1 - 0.0168901197612286 - 0.0774174928665161 - -0.7618877291679382 - <_> - - <_> - - - - <_> - 2 6 14 9 -1. - <_> - 2 9 14 3 3. - 0 - -0.2389906048774719 - 0.4399172961711884 - -0.1319973021745682 - <_> - - <_> - - - - <_> - 4 0 10 7 -1. - <_> - 9 0 5 7 2. - 0 - -0.1849491000175476 - 0.7312037944793701 - -0.0721847563982010 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 9.1745406389236450e-003 - 0.0494462810456753 - -0.5703629255294800 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 7.2624902240931988e-003 - 0.0598880685865879 - -0.7028918266296387 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.0525570586323738 - -0.0988772809505463 - 0.1742382049560547 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 7 0 4 7 2. - 0 - -0.0300392601639032 - 0.4987078011035919 - -0.0794838070869446 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 1 1 2 3. - 1 - -0.0109278596937656 - -0.4537245929241180 - 0.0490351393818855 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 8 1 1 1 3. - 1 - -8.5020083934068680e-003 - -0.7386950850486755 - 0.0514139384031296 - <_> - - <_> - - - - <_> - 1 9 16 6 -1. - <_> - 1 11 16 2 3. - 0 - 0.0552169494330883 - -0.1239347010850906 - 0.3220806121826172 - <_> - - <_> - - - - <_> - 1 9 14 4 -1. - <_> - 1 11 14 2 2. - 0 - -0.0883669406175613 - 0.4828915894031525 - -0.0840416923165321 - <_> - - <_> - - - - <_> - 5 11 8 4 -1. - <_> - 5 13 8 2 2. - 0 - 0.0171657595783472 - -0.1314162015914917 - 0.2680459022521973 - <_> - - <_> - - - - <_> - 8 0 8 2 -1. - <_> - 8 0 4 2 2. - 1 - 0.0905170589685440 - -0.0930236876010895 - 0.4067414999008179 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.0152978999540210 - -0.1135606989264488 - 0.0976252779364586 - <_> - - <_> - - - - <_> - 0 1 16 2 -1. - <_> - 4 1 8 2 2. - 0 - -0.0306295193731785 - 0.4253452122211456 - -0.0865394771099091 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - 0.0798880606889725 - 0.0924375280737877 - -0.3989180028438568 - -1.5818140506744385 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0614461190998554 - -0.4504989981651306 - 0.4854202866554260 - <_> - - <_> - - - - <_> - 10 0 6 7 -1. - <_> - 10 0 3 7 2. - 1 - 0.1895785927772522 - -0.0670469328761101 - 0.4197702109813690 - <_> - - <_> - - - - <_> - 8 0 7 6 -1. - <_> - 8 0 7 3 2. - 1 - 0.1736567020416260 - -0.2891381084918976 - 0.5291916131973267 - <_> - - <_> - - - - <_> - 12 9 6 4 -1. - <_> - 12 9 3 4 2. - 0 - -0.0164134204387665 - 0.2862224876880646 - -0.1747338026762009 - <_> - - <_> - - - - <_> - 0 9 6 4 -1. - <_> - 3 9 3 4 2. - 0 - -0.0107280304655433 - 0.3140093088150024 - -0.2830933034420013 - <_> - - <_> - - - - <_> - 3 1 12 1 -1. - <_> - 7 1 4 1 3. - 0 - 7.7994461171329021e-003 - -0.2857860922813416 - 0.2250297963619232 - <_> - - <_> - - - - <_> - 4 1 8 3 -1. - <_> - 4 2 8 1 3. - 0 - 0.0113080795854330 - 0.1045889034867287 - -0.7427430152893066 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 6 12 4 2. - 0 - 0.1032197996973991 - -0.1167842000722885 - 0.4927442073822022 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 6 1 6 1 3. - 0 - 5.6132972240447998e-003 - 0.0890597030520439 - -0.5344030857086182 - <_> - - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 12 6 2 4 2. - 1 - -0.0606942698359489 - 0.5584030747413635 - -0.0227699298411608 - <_> - - <_> - - - - <_> - 9 1 1 3 -1. - <_> - 8 2 1 1 3. - 1 - 6.2487940303981304e-003 - 0.0758677795529366 - -0.5872176289558411 - <_> - - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 12 6 2 4 2. - 1 - -0.0400232896208763 - 0.1412438005208969 - -0.0172170307487249 - <_> - - <_> - - - - <_> - 7 5 4 4 -1. - <_> - 6 6 4 2 2. - 1 - -0.0412207692861557 - 0.5134109258651733 - -0.0854056328535080 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 1 2 1 2. - 0 - -3.5766770597547293e-003 - -0.6052265167236328 - 0.0409328490495682 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 7 1 2 1 3. - 1 - -9.9679548293352127e-003 - -0.6063398122787476 - 0.0673605129122734 - <_> - - <_> - - - - <_> - 6 0 6 1 -1. - <_> - 6 0 3 1 2. - 0 - -6.7802299745380878e-003 - 0.2780480086803436 - -0.1798703074455261 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 9 0 3 3 2. - 0 - -0.0207993201911449 - 0.4816789031028748 - -0.1240388005971909 - <_> - - <_> - - - - <_> - 5 6 10 9 -1. - <_> - 5 9 10 3 3. - 0 - 0.1391586959362030 - -0.0447275117039680 - 0.5863171219825745 - <_> - - <_> - - - - <_> - 6 8 6 2 -1. - <_> - 6 9 6 1 2. - 0 - -5.3711780346930027e-003 - 0.2039086967706680 - -0.2339323014020920 - <_> - - <_> - - - - <_> - 15 10 3 5 -1. - <_> - 16 10 1 5 3. - 0 - 0.0164771005511284 - 0.0404451601207256 - -0.6250053048133850 - <_> - - <_> - - - - <_> - 0 10 3 5 -1. - <_> - 1 10 1 5 3. - 0 - 0.0110789798200130 - 0.0576713494956493 - -0.5416951179504395 - <_> - - <_> - - - - <_> - 1 11 16 4 -1. - <_> - 1 13 16 2 2. - 0 - 0.0162228699773550 - -0.1663480997085571 - 0.2072461992502213 - <_> - - <_> - - - - <_> - 0 10 3 3 -1. - <_> - 0 11 3 1 3. - 0 - -7.1675870567560196e-003 - -0.4788069128990173 - 0.0757727622985840 - <_> - - <_> - - - - <_> - 3 7 12 8 -1. - <_> - 3 9 12 4 2. - 0 - 0.0589063800871372 - -0.0867818593978882 - 0.3914811015129089 - <_> - - <_> - - - - <_> - 0 1 4 14 -1. - <_> - 0 8 4 7 2. - 0 - 0.0931876674294472 - 0.0619301609694958 - -0.5739055871963501 - <_> - - <_> - - - - <_> - 15 11 3 1 -1. - <_> - 16 12 1 1 3. - 1 - -2.0346969831734896e-003 - -0.1360708028078079 - 0.0450085289776325 - <_> - - <_> - - - - <_> - 3 0 8 1 -1. - <_> - 7 0 4 1 2. - 0 - 5.2366578020155430e-003 - -0.1827117949724197 - 0.1689772009849548 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0105886701494455 - -0.5542160868644714 - 0.0492046102881432 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - 0.0100352102890611 - 0.0409362092614174 - -0.6871048212051392 - <_> - - <_> - - - - <_> - 4 1 12 4 -1. - <_> - 7 1 6 4 2. - 0 - -0.0344069004058838 - 0.3516596853733063 - -0.0428969487547874 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - 7.4508260004222393e-003 - 0.0498083718121052 - -0.6168934106826782 - <_> - - <_> - - - - <_> - 12 0 2 12 -1. - <_> - 12 0 2 6 2. - 1 - 0.0823428034782410 - 0.0836414918303490 - -0.0810145065188408 - <_> - - <_> - - - - <_> - 1 0 12 5 -1. - <_> - 4 0 6 5 2. - 0 - -0.0617706216871738 - 0.3232797980308533 - -0.0792278200387955 - <_> - - <_> - - - - <_> - 5 0 12 7 -1. - <_> - 8 0 6 7 2. - 0 - 0.0364590808749199 - -0.1596114933490753 - 0.1232450976967812 - <_> - - <_> - - - - <_> - 1 0 12 7 -1. - <_> - 4 0 6 7 2. - 0 - 0.0474974289536476 - -0.1659339964389801 - 0.2966628074645996 - <_> - - <_> - - - - <_> - 9 1 1 3 -1. - <_> - 8 2 1 1 3. - 1 - -9.6670873463153839e-003 - -0.5881838202476502 - 0.0336683988571167 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 2 1 1 3. - 1 - 6.9817090407013893e-003 - 0.0585361085832119 - -0.4767274856567383 - <_> - - <_> - - - - <_> - 1 6 16 8 -1. - <_> - 1 8 16 4 2. - 0 - -0.1032517030835152 - 0.2206470966339111 - -0.1236488968133926 - <_> - - <_> - - - - <_> - 3 5 12 8 -1. - <_> - 3 7 12 4 2. - 0 - 0.0696480572223663 - -0.1025395020842552 - 0.3714990019798279 - <_> - - <_> - - - - <_> - 3 4 12 4 -1. - <_> - 3 6 12 2 2. - 0 - -0.0588895305991173 - 0.3248862922191620 - -0.0962660014629364 - <_> - - <_> - - - - <_> - 1 0 8 11 -1. - <_> - 3 0 4 11 2. - 0 - -0.0299398303031921 - 0.1798900961875916 - -0.1531133055686951 - <_> - - <_> - - - - <_> - 11 1 3 1 -1. - <_> - 12 2 1 1 3. - 1 - 8.5012055933475494e-003 - 0.0426186993718147 - -0.5119447112083435 - <_> - - <_> - - - - <_> - 7 1 1 3 -1. - <_> - 6 2 1 1 3. - 1 - -5.8030229993164539e-003 - -0.4962818026542664 - 0.0598989911377430 - <_> - - <_> - - - - <_> - 5 12 12 2 -1. - <_> - 5 12 6 2 2. - 0 - 0.0227242801338434 - -0.0956752821803093 - 0.2338289022445679 - <_> - - <_> - - - - <_> - 2 0 12 5 -1. - <_> - 6 0 4 5 3. - 0 - -0.0372309498488903 - 0.3216434121131897 - -0.0921498537063599 - <_> - - <_> - - - - <_> - 1 2 17 2 -1. - <_> - 1 3 17 1 2. - 0 - 0.0166754201054573 - 0.0617647506296635 - -0.4719795882701874 - -1.5400149822235107 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 4 4 4 -1. - <_> - 8 4 4 2 2. - 1 - 0.0564467795193195 - -0.4791874885559082 - 0.4913735091686249 - <_> - - <_> - - - - <_> - 10 1 2 11 -1. - <_> - 10 1 1 11 2. - 0 - 0.0106428097933531 - -0.1448355019092560 - 0.3184663951396942 - <_> - - <_> - - - - <_> - 3 1 12 9 -1. - <_> - 3 4 12 3 3. - 0 - 0.0598327815532684 - -0.3674696981906891 - 0.2713288962841034 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 9 0 2 2 2. - 1 - -0.0121322497725487 - 0.1230909004807472 - -0.0897226184606552 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 0 2 2 2. - 1 - 3.1117030885070562e-003 - -0.3512226045131683 - 0.2213625013828278 - <_> - - <_> - - - - <_> - 10 8 8 7 -1. - <_> - 10 8 4 7 2. - 0 - -0.0397736988961697 - 0.2041599005460739 - -0.0433022715151310 - <_> - - <_> - - - - <_> - 0 9 8 5 -1. - <_> - 4 9 4 5 2. - 0 - -0.0183949507772923 - 0.1936838030815125 - -0.2287393063306809 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 7 0 4 1 3. - 0 - 9.2628989368677139e-003 - -0.2214957028627396 - 0.2067804038524628 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - 9.8584238439798355e-003 - 0.0557319596409798 - -0.6437491774559021 - <_> - - <_> - - - - <_> - 8 0 8 2 -1. - <_> - 8 1 8 1 2. - 0 - -7.9286862164735794e-003 - -0.6289044022560120 - 0.0527597591280937 - <_> - - <_> - - - - <_> - 2 6 14 6 -1. - <_> - 2 8 14 2 3. - 0 - 0.0654434263706207 - -0.1031555980443955 - 0.4465965032577515 - <_> - - <_> - - - - <_> - 3 9 12 4 -1. - <_> - 3 11 12 2 2. - 0 - 0.0322746597230434 - -0.1719404011964798 - 0.3662515878677368 - <_> - - <_> - - - - <_> - 0 1 3 14 -1. - <_> - 0 8 3 7 2. - 0 - 0.0480254292488098 - 0.0847395211458206 - -0.5135415196418762 - <_> - - <_> - - - - <_> - 2 0 14 2 -1. - <_> - 9 0 7 1 2. - <_> - 2 1 7 1 2. - 0 - -0.0114615103229880 - -0.6505548954010010 - 0.0551190003752708 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 9 0 1 4 2. - 0 - 3.4770029596984386e-003 - -0.1637386977672577 - 0.2640801966190338 - <_> - - <_> - - - - <_> - 8 0 3 6 -1. - <_> - 9 2 1 2 9. - 0 - -0.0417843498289585 - -0.7496129274368286 - 0.0373055487871170 - <_> - - <_> - - - - <_> - 2 1 14 14 -1. - <_> - 9 1 7 14 2. - 0 - -0.3199185132980347 - 0.4014340043067932 - -0.1033769026398659 - <_> - - <_> - - - - <_> - 9 1 2 9 -1. - <_> - 6 4 2 3 3. - 1 - -0.1278306990861893 - 0.2711302936077118 - -9.5342872664332390e-003 - <_> - - <_> - - - - <_> - 9 1 9 2 -1. - <_> - 12 4 3 2 3. - 1 - 0.0639397427439690 - -0.1355940997600555 - 0.3188548088073731 - <_> - - <_> - - - - <_> - 1 6 16 9 -1. - <_> - 1 9 16 3 3. - 0 - 0.1486892998218536 - -0.0747430101037025 - 0.5065084099769592 - <_> - - <_> - - - - <_> - 9 1 4 1 -1. - <_> - 10 2 2 1 2. - 1 - 0.0108674801886082 - 0.0678603425621986 - -0.5648670792579651 - <_> - - <_> - - - - <_> - 5 3 8 6 -1. - <_> - 5 6 8 3 2. - 0 - -0.1110275015234947 - 0.3693794012069702 - -0.1024053022265434 - <_> - - <_> - - - - <_> - 2 5 14 6 -1. - <_> - 2 7 14 2 3. - 0 - 0.0554906614124775 - -0.1338842958211899 - 0.3250921070575714 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 9 0 9 5 2. - <_> - 0 5 9 5 2. - 0 - -0.1232120022177696 - -0.4476852118968964 - 0.0736907273530960 - <_> - - <_> - - - - <_> - 0 4 18 2 -1. - <_> - 0 4 9 1 2. - <_> - 9 5 9 1 2. - 0 - -0.0203750394284725 - -0.6625912785530090 - 0.0422433987259865 - <_> - - <_> - - - - <_> - 16 0 2 10 -1. - <_> - 16 0 1 10 2. - 0 - -3.0578291043639183e-003 - 0.1829244047403336 - -0.1217911988496780 - <_> - - <_> - - - - <_> - 6 0 2 4 -1. - <_> - 5 1 2 2 2. - 1 - -0.0161957796663046 - -0.6317883133888245 - 0.0402268916368485 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 9 0 6 3 2. - 0 - 0.0509672202169895 - -0.0774049535393715 - 0.2435534000396729 - <_> - - <_> - - - - <_> - 3 0 9 9 -1. - <_> - 6 0 3 9 3. - 0 - 0.0580940917134285 - -0.1238128989934921 - 0.2535600960254669 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 4 1 1 3. - 0 - -4.2313118465244770e-003 - -0.5383070111274719 - 0.0235711093991995 - <_> - - <_> - - - - <_> - 5 0 8 8 -1. - <_> - 7 0 4 8 2. - 0 - -0.0187011696398258 - 0.3781844079494476 - -0.0800608471035957 - <_> - - <_> - - - - <_> - 3 12 12 2 -1. - <_> - 3 13 12 1 2. - 0 - 2.5685389991849661e-003 - -0.1653445959091187 - 0.1620604991912842 - <_> - - <_> - - - - <_> - 7 0 2 5 -1. - <_> - 8 0 1 5 2. - 0 - 1.9677819218486547e-003 - -0.1756453961133957 - 0.1530714035034180 - <_> - - <_> - - - - <_> - 12 0 3 12 -1. - <_> - 12 0 3 6 2. - 1 - 0.3548716902732849 - -0.0136137595400214 - 0.3601670861244202 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 6 0 6 3 2. - 1 - 0.2680880129337311 - -0.0809430927038193 - 0.3691290915012360 - <_> - - <_> - - - - <_> - 2 9 15 6 -1. - <_> - 2 11 15 2 3. - 0 - 0.0628807172179222 - -0.0913113132119179 - 0.3295261859893799 - <_> - - <_> - - - - <_> - 6 7 4 2 -1. - <_> - 6 7 4 1 2. - 1 - 0.0241544693708420 - -0.0686313733458519 - 0.4574730098247528 - <_> - - <_> - - - - <_> - 3 1 12 2 -1. - <_> - 9 1 6 1 2. - <_> - 3 2 6 1 2. - 0 - 9.1738719493150711e-003 - 0.0545422695577145 - -0.5137330889701843 - <_> - - <_> - - - - <_> - 6 1 3 3 -1. - <_> - 7 2 1 1 9. - 0 - -0.0130733698606491 - -0.5970230102539063 - 0.0365914106369019 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 11 9 3 1 2. - 0 - 6.8077309988439083e-003 - -0.0354327894747257 - 0.2519941031932831 - <_> - - <_> - - - - <_> - 0 7 18 4 -1. - <_> - 0 7 9 2 2. - <_> - 9 9 9 2 2. - 0 - 0.0451491102576256 - 0.0638899281620979 - -0.3836725056171417 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 1 1 1 3. - 1 - 9.9950553849339485e-003 - 0.0132095599547029 - -0.4537735879421234 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 8 1 1 1 3. - 1 - 7.9643689095973969e-003 - 0.0337183102965355 - -0.6533402204513550 - <_> - - <_> - - - - <_> - 0 1 18 14 -1. - <_> - 9 1 9 7 2. - <_> - 0 8 9 7 2. - 0 - 0.3567276895046234 - 0.0322214402258396 - -0.5800313949584961 - <_> - - <_> - - - - <_> - 0 0 12 3 -1. - <_> - 3 0 6 3 2. - 0 - -0.0362690612673759 - 0.2469438016414642 - -0.1049576029181480 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 5 0 4 3 2. - 0 - 0.0427862294018269 - -0.0707177072763443 - 0.3693887889385223 - <_> - - <_> - - - - <_> - 8 1 1 2 -1. - <_> - 8 2 1 1 2. - 0 - -1.1904439888894558e-003 - -0.3828451037406921 - 0.0615513585507870 - <_> - - <_> - - - - <_> - 17 2 1 12 -1. - <_> - 17 2 1 6 2. - 1 - 0.1074014976620674 - -0.0219720508903265 - 0.1813759058713913 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 6 0 6 8 3. - 0 - 0.0774416774511337 - -0.2010713070631027 - 0.1122270971536636 - <_> - - <_> - - - - <_> - 17 2 1 12 -1. - <_> - 17 2 1 6 2. - 1 - 0.0711435526609421 - -0.0310098994523287 - 0.0730640217661858 - <_> - - <_> - - - - <_> - 2 1 14 8 -1. - <_> - 2 3 14 4 2. - 0 - -0.0573387593030930 - 0.4086444079875946 - -0.0614440515637398 - <_> - - <_> - - - - <_> - 2 5 14 6 -1. - <_> - 2 7 14 2 3. - 0 - -0.0721061602234840 - 0.3398239910602570 - -0.0868131667375565 - <_> - - <_> - - - - <_> - 1 2 12 1 -1. - <_> - 1 2 6 1 2. - 1 - -0.0585803911089897 - -0.4961046874523163 - 0.0615561902523041 - <_> - - <_> - - - - <_> - 7 5 4 2 -1. - <_> - 9 5 2 1 2. - <_> - 7 6 2 1 2. - 0 - 4.4991881586611271e-003 - 0.0394841395318508 - -0.4602204859256744 - <_> - - <_> - - - - <_> - 1 4 16 6 -1. - <_> - 1 6 16 2 3. - 0 - 0.0579723715782166 - -0.1136581003665924 - 0.1817841976881027 - <_> - - <_> - - - - <_> - 5 0 13 12 -1. - <_> - 5 3 13 6 2. - 0 - 0.4121701121330261 - 0.0172915197908878 - -0.8044996857643127 - -1.5587489604949951 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 6 8 4 -1. - <_> - 5 8 8 2 2. - 0 - -0.0492322407662869 - 0.4037728011608124 - -0.4236100018024445 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 9 0 2 10 2. - 0 - 0.0273310504853725 - -0.1327770054340363 - 0.2073374986648560 - <_> - - <_> - - - - <_> - 1 0 9 12 -1. - <_> - 4 0 3 12 3. - 0 - -0.0451007597148418 - 0.3161504864692688 - -0.4204424023628235 - <_> - - <_> - - - - <_> - 4 4 14 10 -1. - <_> - 11 4 7 5 2. - <_> - 4 9 7 5 2. - 0 - -0.2528321146965027 - -0.5749738812446594 - 0.0644379332661629 - <_> - - <_> - - - - <_> - 0 4 12 10 -1. - <_> - 0 4 6 5 2. - <_> - 6 9 6 5 2. - 0 - -0.0427955314517021 - 0.1252602040767670 - -0.3632065951824188 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - -0.1059911996126175 - -0.5933778285980225 - 0.1167925000190735 - <_> - - <_> - - - - <_> - 1 11 15 2 -1. - <_> - 1 12 15 1 2. - 0 - 7.1173040196299553e-003 - -0.2029637992382050 - 0.2159796953201294 - <_> - - <_> - - - - <_> - 3 0 14 2 -1. - <_> - 3 1 14 1 2. - 0 - -0.0115433102473617 - -0.5695471167564392 - 0.0695127025246620 - <_> - - <_> - - - - <_> - 3 0 7 4 -1. - <_> - 3 2 7 2 2. - 0 - 0.0259417798370123 - 0.0406758897006512 - -0.5966268777847290 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 6 12 4 2. - 0 - -0.1111780032515526 - 0.3923074901103973 - -0.0852632820606232 - <_> - - <_> - - - - <_> - 2 1 13 12 -1. - <_> - 2 5 13 4 3. - 0 - 0.1398020982742310 - -0.2032230049371719 - 0.2588416934013367 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 6 0 6 4 2. - 0 - 0.0223447605967522 - -0.2217562943696976 - 0.1535113006830216 - <_> - - <_> - - - - <_> - 7 0 4 7 -1. - <_> - 9 0 2 7 2. - 0 - 0.0356404818594456 - -0.1139336973428726 - 0.2922905087471008 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 1 4 2 2. - 0 - 8.0998390913009644e-003 - 0.0395722091197968 - -0.6671259999275208 - <_> - - <_> - - - - <_> - 2 7 14 6 -1. - <_> - 2 9 14 2 3. - 0 - 0.0534741394221783 - -0.0767945721745491 - 0.4321976900100708 - <_> - - <_> - - - - <_> - 11 1 7 10 -1. - <_> - 11 6 7 5 2. - 0 - -0.0138621004298329 - 0.0846036896109581 - -0.1605919003486633 - <_> - - <_> - - - - <_> - 4 0 10 3 -1. - <_> - 9 0 5 3 2. - 0 - -0.0770997405052185 - 0.5477244257926941 - -0.0663700029253960 - <_> - - <_> - - - - <_> - 0 1 18 2 -1. - <_> - 9 1 9 1 2. - <_> - 0 2 9 1 2. - 0 - -0.0128013696521521 - -0.5547736287117004 - 0.0567846409976482 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 1 2 1 2 2. - 0 - -1.0235139779979363e-004 - 0.1450944989919663 - -0.1950954049825668 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 7.0487200282514095e-003 - 0.0400543101131916 - -0.4442957043647766 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -4.5558041892945766e-003 - -0.4354816973209381 - 0.0606299117207527 - <_> - - <_> - - - - <_> - 14 4 2 7 -1. - <_> - 14 4 1 7 2. - 1 - 0.0193000100553036 - -0.0711913108825684 - 0.0810695365071297 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 1 11 16 1 2. - 0 - 5.4058600217103958e-003 - -0.1416722983121872 - 0.1968034058809280 - <_> - - <_> - - - - <_> - 13 6 2 6 -1. - <_> - 13 6 1 6 2. - 1 - -8.6945146322250366e-003 - -0.1313387006521225 - 0.0205014292150736 - <_> - - <_> - - - - <_> - 4 9 8 4 -1. - <_> - 8 9 4 4 2. - 0 - 9.7174253314733505e-003 - -0.1872030943632126 - 0.1876177042722702 - <_> - - <_> - - - - <_> - 2 8 14 4 -1. - <_> - 2 10 14 2 2. - 0 - -0.1115583032369614 - 0.4086495935916901 - -0.0699931830167770 - <_> - - <_> - - - - <_> - 3 0 12 9 -1. - <_> - 3 3 12 3 3. - 0 - 0.0976407974958420 - -0.1244983971118927 - 0.2161774039268494 - <_> - - <_> - - - - <_> - 14 1 4 12 -1. - <_> - 14 7 4 6 2. - 0 - -0.1506139039993286 - -0.3867461979389191 - 0.0543168187141418 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 6 0 3 1 2. - <_> - 9 1 3 1 2. - 0 - 4.9472171813249588e-003 - 0.0436532311141491 - -0.5155900120735169 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 1 - -0.0204955395311117 - -0.5441694855690002 - 7.6605947688221931e-003 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 7 0 4 6 2. - 0 - -0.0272786691784859 - 0.4267495870590210 - -0.0565182790160179 - <_> - - <_> - - - - <_> - 11 8 4 6 -1. - <_> - 11 10 4 2 3. - 0 - 0.0135246496647596 - -0.0507161505520344 - 0.1838100999593735 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 0 0 9 4 2. - <_> - 9 4 9 4 2. - 0 - -0.0949866473674774 - -0.4232459962368012 - 0.0522982999682426 - <_> - - <_> - - - - <_> - 14 1 4 10 -1. - <_> - 14 6 4 5 2. - 0 - 0.1105156019330025 - 3.5527960862964392e-003 - -0.4166136085987091 - <_> - - <_> - - - - <_> - 0 1 4 10 -1. - <_> - 0 6 4 5 2. - 0 - -0.1319251954555512 - -0.6282796859741211 - 0.0391492694616318 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 1 - 0.0194247197359800 - 6.5935368184000254e-004 - -0.5752815008163452 - <_> - - <_> - - - - <_> - 8 2 2 2 -1. - <_> - 8 2 2 1 2. - 1 - 0.0147077599540353 - 0.0390244014561176 - -0.5651786923408508 - <_> - - <_> - - - - <_> - 10 2 2 1 -1. - <_> - 10 2 1 1 2. - 0 - 2.9291698592714965e-004 - -0.1292673051357269 - 0.1258907020092011 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 8 0 1 3 2. - 0 - 2.1614220459014177e-003 - -0.1379971951246262 - 0.1651082038879395 - <_> - - <_> - - - - <_> - 3 0 12 12 -1. - <_> - 3 6 12 6 2. - 0 - -0.4875395894050598 - 0.4380280971527100 - -0.0606237016618252 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 3 7 12 2 2. - 0 - 0.0505968406796455 - -0.0435010008513927 - 0.5122361779212952 - <_> - - <_> - - - - <_> - 12 1 6 14 -1. - <_> - 12 8 6 7 2. - 0 - 0.1982239037752152 - 0.0168439298868179 - -0.4508939981460571 - <_> - - <_> - - - - <_> - 2 13 14 2 -1. - <_> - 2 14 14 1 2. - 0 - -0.0525614693760872 - 0.6191160082817078 - -0.0332456789910793 - <_> - - <_> - - - - <_> - 0 4 18 6 -1. - <_> - 0 6 18 2 3. - 0 - 0.0394346490502357 - -0.1332457065582275 - 0.1555656045675278 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 9 2 2 2. - 0 - -8.2802558317780495e-003 - -0.4649186134338379 - 0.0463778004050255 - <_> - - <_> - - - - <_> - 6 0 12 10 -1. - <_> - 10 0 4 10 3. - 0 - 0.1878169029951096 - -0.0738439187407494 - 0.2035520970821381 - <_> - - <_> - - - - <_> - 0 0 12 10 -1. - <_> - 4 0 4 10 3. - 0 - 0.0592883005738258 - -0.1004031971096993 - 0.2930684983730316 - <_> - - <_> - - - - <_> - 3 13 12 2 -1. - <_> - 3 14 12 1 2. - 0 - 4.8330631107091904e-003 - -0.1236037984490395 - 0.1822776049375534 - <_> - - <_> - - - - <_> - 3 8 4 6 -1. - <_> - 3 10 4 2 3. - 0 - 0.0134623004123569 - -0.0865014195442200 - 0.2545304000377655 - <_> - - <_> - - - - <_> - 13 11 4 4 -1. - <_> - 14 11 2 4 2. - 0 - 0.0112787801772356 - 0.0359535515308380 - -0.3637040853500366 - <_> - - <_> - - - - <_> - 0 1 5 14 -1. - <_> - 0 8 5 7 2. - 0 - 0.1112084984779358 - 0.0411560982465744 - -0.4935589134693146 - <_> - - <_> - - - - <_> - 10 5 2 1 -1. - <_> - 10 5 1 1 2. - 0 - 5.8954879641532898e-003 - 8.6054708808660507e-003 - -0.5774816274642944 - <_> - - <_> - - - - <_> - 6 5 2 1 -1. - <_> - 7 5 1 1 2. - 0 - 7.0609137765131891e-005 - -0.1943852007389069 - 0.1089660003781319 - <_> - - <_> - - - - <_> - 1 11 17 4 -1. - <_> - 1 12 17 2 2. - 0 - 0.0111626898869872 - -0.1052400022745132 - 0.1769991964101791 - <_> - - <_> - - - - <_> - 7 0 3 3 -1. - <_> - 8 1 1 1 9. - 0 - 0.0147585002705455 - 0.0338271111249924 - -0.5783804059028626 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 2 2 1 2. - 0 - 6.5100449137389660e-003 - 0.0122224902734160 - -0.6832317113876343 - <_> - - <_> - - - - <_> - 1 11 4 4 -1. - <_> - 2 11 2 4 2. - 0 - 0.0132402600720525 - 0.0317283198237419 - -0.4962331950664520 - <_> - - <_> - - - - <_> - 8 3 10 8 -1. - <_> - 8 3 5 8 2. - 0 - -0.2101143002510071 - -0.4922251105308533 - 5.4596872068941593e-003 - <_> - - <_> - - - - <_> - 0 3 10 8 -1. - <_> - 5 3 5 8 2. - 0 - 0.2414025068283081 - 0.0314619205892086 - -0.5690953135490418 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - 3.8006789982318878e-003 - -0.0650670900940895 - 0.0376422517001629 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 9 9 3 2. - <_> - 9 12 9 3 2. - 0 - 0.1262440979480743 - 0.0393773987889290 - -0.4590097963809967 - <_> - - <_> - - - - <_> - 10 7 6 4 -1. - <_> - 13 7 3 2 2. - <_> - 10 9 3 2 2. - 0 - 0.0130107998847961 - -0.0579108111560345 - 0.2962261140346527 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 7.1800998412072659e-003 - 0.0342495106160641 - -0.5636181831359863 - <_> - - <_> - - - - <_> - 4 0 12 2 -1. - <_> - 8 0 4 2 3. - 0 - 0.0242467503994703 - -0.1086483970284462 - 0.1013154983520508 - <_> - - <_> - - - - <_> - 1 5 16 10 -1. - <_> - 1 5 8 5 2. - <_> - 9 10 8 5 2. - 0 - -0.1696685999631882 - -0.3411920964717865 - 0.0499880090355873 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 12 6 1 4 2. - 1 - -0.0204610601067543 - -0.2079558074474335 - 3.4589329734444618e-003 - <_> - - <_> - - - - <_> - 6 6 4 2 -1. - <_> - 6 6 4 1 2. - 1 - -0.0213081296533346 - 0.5027093887329102 - -0.0400764681398869 - <_> - - <_> - - - - <_> - 10 8 6 4 -1. - <_> - 13 8 3 2 2. - <_> - 10 10 3 2 2. - 0 - -0.0109308399260044 - 0.1563555002212524 - -0.0751591026782990 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 1 2 1 2. - 1 - 9.9652167409658432e-003 - 0.0362863987684250 - -0.5052989125251770 - <_> - - <_> - - - - <_> - 17 10 1 3 -1. - <_> - 17 11 1 1 3. - 0 - -3.3498809207230806e-003 - -0.2724232971668243 - 0.0273806899785995 - <_> - - <_> - - - - <_> - 3 0 11 2 -1. - <_> - 3 0 11 1 2. - 1 - 0.0597393512725830 - 0.0268720109015703 - -0.6388636827468872 - <_> - - <_> - - - - <_> - 8 6 10 8 -1. - <_> - 13 6 5 4 2. - <_> - 8 10 5 4 2. - 0 - 0.1278129965066910 - 1.4498339733108878e-003 - -0.3833698928356171 - <_> - - <_> - - - - <_> - 2 12 14 2 -1. - <_> - 2 13 14 1 2. - 0 - 2.9313340783119202e-003 - -0.1309947967529297 - 0.1298779994249344 - <_> - - <_> - - - - <_> - 17 10 1 3 -1. - <_> - 17 11 1 1 3. - 0 - 6.1392742209136486e-003 - 0.0108347898349166 - -0.3170185089111328 - <_> - - <_> - - - - <_> - 7 4 8 3 -1. - <_> - 9 6 4 3 2. - 1 - -0.0811345130205154 - -0.3570674955844879 - 0.0494775287806988 - <_> - - <_> - - - - <_> - 13 9 3 6 -1. - <_> - 13 11 3 2 3. - 0 - -0.0604430399835110 - 0.4088949859142304 - -0.0221638102084398 - <_> - - <_> - - - - <_> - 2 9 3 6 -1. - <_> - 2 11 3 2 3. - 0 - 5.9390361420810223e-003 - -0.1046036034822464 - 0.1944513022899628 - <_> - - <_> - - - - <_> - 17 10 1 3 -1. - <_> - 17 11 1 1 3. - 0 - 7.8998396929819137e-005 - -0.0479567199945450 - 0.0571181289851666 - <_> - - <_> - - - - <_> - 0 10 1 3 -1. - <_> - 0 11 1 1 3. - 0 - -1.8057189881801605e-003 - -0.2924138009548187 - 0.0581192187964916 - <_> - - <_> - - - - <_> - 11 1 6 6 -1. - <_> - 11 1 3 6 2. - 0 - 6.7375837825238705e-003 - -0.0886564627289772 - 0.0441452711820602 - <_> - - <_> - - - - <_> - 3 6 2 1 -1. - <_> - 4 6 1 1 2. - 0 - 5.5221098591573536e-005 - -0.1249044984579086 - 0.1266127973794937 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 14 1 3 1 3. - 1 - 0.0241630896925926 - -0.0133935501798987 - 0.3467755913734436 - <_> - - <_> - - - - <_> - 1 7 8 4 -1. - <_> - 1 7 4 2 2. - <_> - 5 9 4 2 2. - 0 - 0.0127861900255084 - -0.0568488091230392 - 0.2727532982826233 - <_> - - <_> - - - - <_> - 8 8 4 2 -1. - <_> - 8 9 4 1 2. - 0 - -1.3572210446000099e-003 - 0.0654089972376823 - -0.1414448022842407 - -1.5197360515594482 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 2 4 6 -1. - <_> - 9 2 4 3 2. - 1 - 0.1201385036110878 - -0.3657313883304596 - 0.3629319071769714 - <_> - - <_> - - - - <_> - 2 6 14 8 -1. - <_> - 2 8 14 4 2. - 0 - -0.1462011039257050 - 0.3965567946434021 - -0.1946136951446533 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 7 0 4 3 2. - 0 - 0.0123430602252483 - -0.2474983036518097 - 0.2256231009960175 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 3.2748850062489510e-003 - 0.0721044987440109 - -0.3896430134773254 - <_> - - <_> - - - - <_> - 8 3 3 6 -1. - <_> - 8 3 3 3 2. - 1 - 0.2431180030107498 - 9.4664301723241806e-003 - 1.0626879882812500e+003 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - 0.0399235188961029 - -0.1290356069803238 - 0.1935819983482361 - <_> - - <_> - - - - <_> - 0 8 6 7 -1. - <_> - 3 8 3 7 2. - 0 - -7.0425998419523239e-003 - 0.1544698029756546 - -0.2654632031917572 - <_> - - <_> - - - - <_> - 4 1 10 2 -1. - <_> - 9 1 5 1 2. - <_> - 4 2 5 1 2. - 0 - 6.5724221058189869e-003 - 0.0737086832523346 - -0.5816736221313477 - <_> - - <_> - - - - <_> - 3 0 6 6 -1. - <_> - 3 3 6 3 2. - 0 - -0.0233357399702072 - -0.4272454082965851 - 0.0886551067233086 - <_> - - <_> - - - - <_> - 3 9 12 2 -1. - <_> - 3 10 12 1 2. - 0 - -0.0262159798294306 - 0.3560248017311096 - -0.1014178022742271 - <_> - - <_> - - - - <_> - 1 9 16 2 -1. - <_> - 1 10 16 1 2. - 0 - 0.0114004900678992 - -0.1101441010832787 - 0.3644121885299683 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 10 4 1 1 9. - 0 - 0.0145206097513437 - 0.0214245207607746 - -0.4902862012386322 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 5 3 4 1 2. - <_> - 9 4 4 1 2. - 0 - -8.5834655910730362e-003 - -0.6525719761848450 - 0.0546631813049316 - <_> - - <_> - - - - <_> - 2 0 14 12 -1. - <_> - 9 0 7 6 2. - <_> - 2 6 7 6 2. - 0 - -0.1374545991420746 - -0.5049275159835815 - 0.0527309887111187 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 6 1 2 1 3. - 1 - -0.0126157002523541 - -0.6245530843734741 - 0.0316158086061478 - <_> - - <_> - - - - <_> - 15 2 2 1 -1. - <_> - 15 2 1 1 2. - 0 - -2.3604110538144596e-005 - 0.0987414866685867 - -0.0946909487247467 - <_> - - <_> - - - - <_> - 1 2 2 1 -1. - <_> - 2 2 1 1 2. - 0 - -5.8249959693057463e-005 - 0.1445119976997376 - -0.1613789051771164 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 1 2 4 2. - 1 - -0.0199512392282486 - -0.3773136138916016 - 0.0244714803993702 - <_> - - <_> - - - - <_> - 8 5 4 5 -1. - <_> - 8 5 2 5 2. - 1 - -0.0549685694277287 - -0.4405806958675385 - 0.0534904003143311 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 5 1 8 2 2. - 0 - -0.0169392302632332 - -0.6665034890174866 - 0.0315596312284470 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - 0.0110901398584247 - 0.0311973206698895 - -0.5475487709045410 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.0289862100034952 - -0.1251084953546524 - 0.0918823182582855 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 9 0 4 7 2. - 0 - -0.1045346036553383 - 0.4357545971870422 - -0.0606762506067753 - <_> - - <_> - - - - <_> - 11 3 1 8 -1. - <_> - 9 5 1 4 2. - 1 - -4.6273069456219673e-003 - 0.0973885133862495 - -0.0912084132432938 - <_> - - <_> - - - - <_> - 3 3 12 9 -1. - <_> - 7 6 4 3 9. - 0 - 0.5169839859008789 - -0.0609911382198334 - 0.4879719913005829 - <_> - - <_> - - - - <_> - 1 4 16 6 -1. - <_> - 1 6 16 2 3. - 0 - -0.0667436569929123 - 0.3727416992187500 - -0.0635046362876892 - <_> - - <_> - - - - <_> - 6 1 3 2 -1. - <_> - 6 1 3 1 2. - 1 - 0.0154703501611948 - 0.0610504113137722 - -0.4871797859668732 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 7 10 4 1 2. - 0 - -3.5926289856433868e-003 - 0.1421190947294235 - -0.1508843004703522 - <_> - - <_> - - - - <_> - 1 5 14 10 -1. - <_> - 1 5 7 5 2. - <_> - 8 10 7 5 2. - 0 - -0.2056556940078735 - -0.4781495928764343 - 0.0436189286410809 - <_> - - <_> - - - - <_> - 10 9 3 6 -1. - <_> - 10 11 3 2 3. - 0 - 0.0296549908816814 - -0.0354740694165230 - 0.1896422952413559 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 0 5 9 5 2. - <_> - 9 10 9 5 2. - 0 - 0.1328420042991638 - 0.0555178187787533 - -0.3971447050571442 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 8 1 3 1 2. - 0 - 3.3759230282157660e-003 - 0.0415674299001694 - -0.3620547950267792 - <_> - - <_> - - - - <_> - 5 1 2 5 -1. - <_> - 6 1 1 5 2. - 0 - 5.4163701133802533e-004 - -0.1866434067487717 - 0.1040982976555824 - <_> - - <_> - - - - <_> - 4 0 12 7 -1. - <_> - 8 0 4 7 3. - 0 - -0.0527310110628605 - 0.2760218083858490 - -0.0270596593618393 - <_> - - <_> - - - - <_> - 1 0 12 4 -1. - <_> - 4 0 6 4 2. - 0 - -0.0621075518429279 - 0.3134047091007233 - -0.0696556121110916 - <_> - - <_> - - - - <_> - 12 0 6 14 -1. - <_> - 12 7 6 7 2. - 0 - -0.0139620797708631 - 0.0415851585566998 - -0.1057448983192444 - <_> - - <_> - - - - <_> - 2 0 12 5 -1. - <_> - 5 0 6 5 2. - 0 - 0.0591135807335377 - -0.1132714971899986 - 0.2140036970376968 - <_> - - <_> - - - - <_> - 12 0 6 14 -1. - <_> - 12 7 6 7 2. - 0 - -0.3247278034687042 - -0.2102808952331543 - 0.0147817200049758 - <_> - - <_> - - - - <_> - 0 0 6 14 -1. - <_> - 0 7 6 7 2. - 0 - -9.5277121290564537e-003 - 0.1057813987135887 - -0.2166267037391663 - <_> - - <_> - - - - <_> - 10 9 3 6 -1. - <_> - 10 11 3 2 3. - 0 - -0.0557695515453815 - 0.2719202041625977 - -0.0213698092848063 - <_> - - <_> - - - - <_> - 5 9 3 6 -1. - <_> - 5 11 3 2 3. - 0 - 0.0139181502163410 - -0.0888932272791862 - 0.2555867135524750 - <_> - - <_> - - - - <_> - 7 13 6 2 -1. - <_> - 7 14 6 1 2. - 0 - 2.3373179137706757e-003 - -0.1157324984669685 - 0.1542420983314514 - <_> - - <_> - - - - <_> - 8 2 1 3 -1. - <_> - 7 3 1 1 3. - 1 - 7.1918689645826817e-003 - 0.0410376191139221 - -0.5052363872528076 - <_> - - <_> - - - - <_> - 15 3 3 1 -1. - <_> - 16 4 1 1 3. - 1 - 8.5471794009208679e-003 - 0.0143813500180840 - -0.2316330969333649 - <_> - - <_> - - - - <_> - 3 11 1 3 -1. - <_> - 2 12 1 1 3. - 1 - -3.2956521026790142e-003 - -0.2828037142753601 - 0.0618998408317566 - <_> - - <_> - - - - <_> - 11 6 3 4 -1. - <_> - 11 8 3 2 2. - 0 - -0.0220706891268492 - 0.1489437073469162 - -0.0949123501777649 - <_> - - <_> - - - - <_> - 2 5 14 9 -1. - <_> - 2 8 14 3 3. - 0 - 0.1664644032716751 - -0.0590463504195213 - 0.4529106020927429 - <_> - - <_> - - - - <_> - 10 10 8 4 -1. - <_> - 14 10 4 2 2. - <_> - 10 12 4 2 2. - 0 - 7.9817809164524078e-003 - -0.0702360421419144 - 0.1200437024235725 - <_> - - <_> - - - - <_> - 0 12 4 3 -1. - <_> - 1 12 2 3 2. - 0 - 7.7218217775225639e-003 - 0.0476134307682514 - -0.4164519906044006 - <_> - - <_> - - - - <_> - 8 0 8 2 -1. - <_> - 8 1 8 1 2. - 0 - 2.8179560104035772e-005 - -0.1135511025786400 - 0.0995815470814705 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 0 0 9 1 2. - <_> - 9 1 9 1 2. - 0 - 0.0115354498848319 - 0.0479713715612888 - -0.4701226949691773 - <_> - - <_> - - - - <_> - 7 1 4 12 -1. - <_> - 7 1 2 12 2. - 0 - -0.0417897514998913 - 0.1801664978265762 - -0.0923613235354424 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 0 12 18 2 2. - 0 - 7.5845858082175255e-003 - -0.1170279979705811 - 0.1517726927995682 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - 0.0117145096883178 - -0.0399577096104622 - 0.0563791207969189 - <_> - - <_> - - - - <_> - 0 8 18 6 -1. - <_> - 0 10 18 2 3. - 0 - 0.0809042006731033 - -0.0586656406521797 - 0.3254713118076325 - <_> - - <_> - - - - <_> - 11 0 6 6 -1. - <_> - 11 0 3 6 2. - 0 - 0.0111858202144504 - -0.1569270044565201 - 0.1074031963944435 - <_> - - <_> - - - - <_> - 6 7 4 2 -1. - <_> - 6 7 4 1 2. - 1 - 0.0207462906837463 - -0.0727149471640587 - 0.2988258004188538 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 9 6 3 1 2. - <_> - 6 7 3 1 2. - 0 - 7.1547999978065491e-003 - 0.0502206012606621 - -0.3892965018749237 - <_> - - <_> - - - - <_> - 6 7 5 2 -1. - <_> - 6 8 5 1 2. - 0 - -4.7662649303674698e-003 - 0.1062309965491295 - -0.1640899926424027 - <_> - - <_> - - - - <_> - 11 6 3 4 -1. - <_> - 11 8 3 2 2. - 0 - 0.0132446801289916 - -0.0340634994208813 - 0.3189088106155396 - <_> - - <_> - - - - <_> - 7 0 1 2 -1. - <_> - 7 1 1 1 2. - 0 - 2.0384900271892548e-003 - 0.0399366803467274 - -0.4656496047973633 - <_> - - <_> - - - - <_> - 9 13 6 2 -1. - <_> - 11 13 2 2 3. - 0 - 0.0223837792873383 - 0.0195741802453995 - -0.3179920017719269 - <_> - - <_> - - - - <_> - 8 2 2 6 -1. - <_> - 8 2 1 3 2. - <_> - 9 5 1 3 2. - 0 - -6.0196588747203350e-003 - -0.4005850851535797 - 0.0411118082702160 - <_> - - <_> - - - - <_> - 16 8 2 3 -1. - <_> - 16 9 2 1 3. - 0 - 0.0133403996005654 - 7.2229830548167229e-003 - -0.3585583865642548 - <_> - - <_> - - - - <_> - 6 1 10 4 -1. - <_> - 6 1 10 2 2. - 1 - 0.1654804944992065 - 0.0360200293362141 - -0.4420441091060638 - <_> - - <_> - - - - <_> - 10 10 8 4 -1. - <_> - 14 10 4 2 2. - <_> - 10 12 4 2 2. - 0 - -0.0172677896916866 - 0.0957728773355484 - -0.0303796809166670 - <_> - - <_> - - - - <_> - 0 10 8 4 -1. - <_> - 0 10 4 2 2. - <_> - 4 12 4 2 2. - 0 - 3.7873580586165190e-003 - -0.1340985000133514 - 0.1292660981416702 - <_> - - <_> - - - - <_> - 13 6 3 4 -1. - <_> - 14 7 1 4 3. - 1 - 5.5727548897266388e-003 - -0.0669078826904297 - 0.1738217025995255 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 0 9 2 1 3. - 0 - 8.5729602724313736e-003 - 0.0307218804955482 - -0.5853425860404968 - <_> - - <_> - - - - <_> - 13 6 3 4 -1. - <_> - 14 7 1 4 3. - 1 - -0.0263858195394278 - 0.1778002977371216 - -0.0393683984875679 - <_> - - <_> - - - - <_> - 5 6 4 3 -1. - <_> - 4 7 4 1 3. - 1 - 0.0118999304249883 - -0.0571489408612251 - 0.3010109961032867 - <_> - - <_> - - - - <_> - 10 3 8 3 -1. - <_> - 10 3 4 3 2. - 0 - 0.0683530792593956 - 0.0291851498186588 - -0.1551367044448853 - <_> - - <_> - - - - <_> - 0 3 8 3 -1. - <_> - 4 3 4 3 2. - 0 - 0.0108240302652121 - -0.1347029060125351 - 0.1385277062654495 - <_> - - <_> - - - - <_> - 4 2 14 2 -1. - <_> - 4 2 7 2 2. - 0 - 0.0880321934819222 - -0.0365363508462906 - 0.2360302060842514 - <_> - - <_> - - - - <_> - 0 1 12 4 -1. - <_> - 3 1 6 4 2. - 0 - -0.0257761701941490 - 0.1835854053497315 - -0.1334383934736252 - <_> - - <_> - - - - <_> - 13 1 4 10 -1. - <_> - 13 6 4 5 2. - 0 - 0.0820100232958794 - 0.0118177495896816 - -0.3187808990478516 - <_> - - <_> - - - - <_> - 0 2 14 2 -1. - <_> - 7 2 7 2 2. - 0 - -0.0203707292675972 - 0.2503522932529450 - -0.0702304020524025 - <_> - - <_> - - - - <_> - 4 12 12 3 -1. - <_> - 8 12 4 3 3. - 0 - 0.0784170925617218 - 0.0254040490835905 - -0.2163347005844116 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - 5.4000681266188622e-003 - 0.0398776307702065 - -0.3819760978221893 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 10 6 1 2 2. - 0 - 0.0116557897999883 - 8.5724918171763420e-003 - -0.4681785106658936 - <_> - - <_> - - - - <_> - 6 6 2 2 -1. - <_> - 7 6 1 2 2. - 0 - 6.1775790527462959e-005 - -0.1735416948795319 - 0.0904209986329079 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 3 1 1 3. - 1 - -0.0180264692753553 - -0.7927592992782593 - 9.2333797365427017e-003 - <_> - - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 4 8 3 1 3. - 0 - 2.1709210705012083e-003 - -0.0846288874745369 - 0.1654430031776428 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 3 7 12 2 2. - 0 - -0.0822796970605850 - 0.2155113965272903 - -0.0919006466865540 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 0.0102933598682284 - 0.0234903004020453 - -0.6768108010292053 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 11 18 2 3. - 0 - -0.2188197970390320 - 0.5047866702079773 - -0.0318927802145481 - <_> - - <_> - - - - <_> - 0 4 18 2 -1. - <_> - 0 4 9 1 2. - <_> - 9 5 9 1 2. - 0 - -0.0221189390867949 - -0.6315932273864746 - 0.0259883198887110 - <_> - - <_> - - - - <_> - 15 3 3 3 -1. - <_> - 14 4 3 1 3. - 1 - 0.0229423604905605 - -0.0406722798943520 - 0.3567295074462891 - <_> - - <_> - - - - <_> - 2 2 14 6 -1. - <_> - 2 4 14 2 3. - 0 - -0.0567631609737873 - 0.3552303910255432 - -0.0383039787411690 - <_> - - <_> - - - - <_> - 9 2 1 3 -1. - <_> - 8 3 1 1 3. - 1 - -7.5660292059183121e-003 - -0.3711034953594208 - 0.0192387793213129 - <_> - - <_> - - - - <_> - 0 1 6 10 -1. - <_> - 0 6 6 5 2. - 0 - 0.1234833970665932 - 0.0215323101729155 - -0.6329115033149719 - <_> - - <_> - - - - <_> - 9 3 6 2 -1. - <_> - 9 4 6 1 2. - 0 - 2.7259990019956604e-005 - -0.1203657016158104 - 0.1052009984850884 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 0 0 9 3 2. - <_> - 9 3 9 3 2. - 0 - 0.0855550765991211 - 0.0342116691172123 - -0.4872741997241974 - <_> - - <_> - - - - <_> - 4 2 10 6 -1. - <_> - 4 5 10 3 2. - 0 - -0.1498104035854340 - 0.4256885051727295 - -0.0406881310045719 - <_> - - <_> - - - - <_> - 0 5 9 3 -1. - <_> - 3 5 3 3 3. - 0 - 0.0249004401266575 - -0.0469012595713139 - 0.2806226015090942 - <_> - - <_> - - - - <_> - 9 3 2 1 -1. - <_> - 9 3 1 1 2. - 0 - 7.8607350587844849e-003 - 5.2375709637999535e-003 - -0.9763677716255188 - <_> - - <_> - - - - <_> - 7 3 2 1 -1. - <_> - 8 3 1 1 2. - 0 - 7.3002476710826159e-005 - -0.1668099015951157 - 0.1061896979808807 - <_> - - <_> - - - - <_> - 9 2 6 4 -1. - <_> - 9 2 3 4 2. - 1 - 0.1778886020183563 - -0.0167296305298805 - 0.1779063045978546 - <_> - - <_> - - - - <_> - 7 2 3 3 -1. - <_> - 8 3 1 1 9. - 0 - 0.0129577601328492 - 0.0327777788043022 - -0.4429670870304108 - -1.5084979534149170 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 4 4 6 -1. - <_> - 5 6 4 2 3. - 1 - -0.0671501830220222 - 0.3957724869251251 - -0.3151094019412994 - <_> - - <_> - - - - <_> - 4 2 14 8 -1. - <_> - 4 4 14 4 2. - 0 - 0.0489628501236439 - -0.2696126103401184 - 0.1686976999044418 - <_> - - <_> - - - - <_> - 9 0 1 4 -1. - <_> - 9 0 1 2 2. - 1 - 2.7194418944418430e-003 - -0.3519599139690399 - 0.2283660024404526 - <_> - - <_> - - - - <_> - 12 7 6 7 -1. - <_> - 12 7 3 7 2. - 0 - -5.1611121743917465e-003 - 0.2407678067684174 - -0.2207496017217636 - <_> - - <_> - - - - <_> - 2 9 8 4 -1. - <_> - 2 11 8 2 2. - 0 - 0.2363017052412033 - -0.0165349505841732 - -791.9063110351562500 - <_> - - <_> - - - - <_> - 13 6 1 6 -1. - <_> - 13 8 1 2 3. - 0 - -0.0192054994404316 - 0.3679260015487671 - -0.0511916503310204 - <_> - - <_> - - - - <_> - 4 6 1 6 -1. - <_> - 4 8 1 2 3. - 0 - 3.8221171125769615e-003 - -0.1451342999935150 - 0.3284528851509094 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 2 6 2 2. - 0 - -0.0114400796592236 - -0.3580412864685059 - 0.1191418990492821 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 9 0 3 1 2. - 1 - 8.8761039078235626e-003 - -0.2145037949085236 - 0.1795787960290909 - <_> - - <_> - - - - <_> - 6 0 12 1 -1. - <_> - 9 0 6 1 2. - 0 - 8.4572024643421173e-003 - -0.0697467327117920 - 0.1636779010295868 - <_> - - <_> - - - - <_> - 2 7 14 8 -1. - <_> - 2 9 14 4 2. - 0 - -0.1268958002328873 - 0.2483236044645309 - -0.1216669976711273 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 11 9 3 1 2. - 0 - 4.6295030042529106e-003 - -0.0560571514070034 - 0.3574368059635162 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 1 0 1 3 2. - 0 - -7.5959236710332334e-005 - 0.1490119993686676 - -0.1852703988552094 - <_> - - <_> - - - - <_> - 10 0 6 8 -1. - <_> - 10 4 6 4 2. - 0 - 0.1317930966615677 - 0.0314710587263107 - -0.6502394080162048 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 6 0 3 1 2. - 1 - 0.0135068297386169 - 0.0498555004596710 - -0.5204489827156067 - <_> - - <_> - - - - <_> - 14 5 4 10 -1. - <_> - 14 10 4 5 2. - 0 - -0.1392281949520111 - -0.4274164140224457 - 0.0221896991133690 - <_> - - <_> - - - - <_> - 0 5 4 10 -1. - <_> - 0 10 4 5 2. - 0 - 0.0602215304970741 - 0.0557326711714268 - -0.4318253099918366 - <_> - - <_> - - - - <_> - 12 8 6 6 -1. - <_> - 12 8 3 6 2. - 0 - -0.1349826008081436 - -0.7194260954856873 - 6.5442471532151103e-004 - <_> - - <_> - - - - <_> - 0 8 6 6 -1. - <_> - 3 8 3 6 2. - 0 - -3.9722030051052570e-003 - 0.1110355034470558 - -0.2065491974353790 - <_> - - <_> - - - - <_> - 10 0 6 6 -1. - <_> - 10 3 6 3 2. - 0 - -0.0218843296170235 - -0.2502841055393219 - 0.0452274195849895 - <_> - - <_> - - - - <_> - 2 0 6 6 -1. - <_> - 2 3 6 3 2. - 0 - 0.0562942214310169 - 0.0373776294291019 - -0.6217880249023438 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 9 0 9 2 2. - <_> - 0 2 9 2 2. - 0 - -0.0416125096380711 - -0.5870987176895142 - 0.0327165089547634 - <_> - - <_> - - - - <_> - 2 10 14 2 -1. - <_> - 2 11 14 1 2. - 0 - 7.3085748590528965e-003 - -0.1344400942325592 - 0.1841892004013062 - <_> - - <_> - - - - <_> - 11 5 3 6 -1. - <_> - 9 7 3 2 3. - 1 - -0.0391575917601585 - -0.0723762214183807 - 0.0374199710786343 - <_> - - <_> - - - - <_> - 1 4 16 1 -1. - <_> - 5 4 8 1 2. - 0 - 8.2146301865577698e-003 - -0.2051306068897247 - 0.1153298020362854 - <_> - - <_> - - - - <_> - 10 8 4 4 -1. - <_> - 10 9 4 2 2. - 0 - -3.4585020039230585e-003 - 0.0500501617789268 - -0.0578955002129078 - <_> - - <_> - - - - <_> - 4 8 4 4 -1. - <_> - 4 9 4 2 2. - 0 - 4.0681189857423306e-003 - -0.0944659411907196 - 0.2920725941658020 - <_> - - <_> - - - - <_> - 3 6 12 8 -1. - <_> - 9 6 6 4 2. - <_> - 3 10 6 4 2. - 0 - -0.0549114495515823 - -0.3530954122543335 - 0.0700343772768974 - <_> - - <_> - - - - <_> - 3 12 9 3 -1. - <_> - 6 12 3 3 3. - 0 - 0.0693727433681488 - 0.0222254004329443 - -0.7192028760910034 - <_> - - <_> - - - - <_> - 11 4 6 4 -1. - <_> - 13 6 2 4 3. - 1 - 0.0795855373144150 - -0.0380740091204643 - 0.3033491075038910 - <_> - - <_> - - - - <_> - 0 0 3 12 -1. - <_> - 0 6 3 6 2. - 0 - 0.0544063299894333 - 0.0448827184736729 - -0.4495294094085693 - <_> - - <_> - - - - <_> - 4 0 10 9 -1. - <_> - 4 0 5 9 2. - 0 - 0.2690613865852356 - -0.0360089801251888 - 0.5307660102844238 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 4.1156299412250519e-003 - -0.1003653034567833 - 0.1804340034723282 - <_> - - <_> - - - - <_> - 6 9 8 5 -1. - <_> - 6 9 4 5 2. - 0 - -0.1438598036766052 - -0.6201289892196655 - 0.0115139102563262 - <_> - - <_> - - - - <_> - 5 3 3 5 -1. - <_> - 6 4 1 5 3. - 1 - 0.0144033199176192 - -0.0768772587180138 - 0.2608672082424164 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 1 2 2 2. - 0 - 3.9774607867002487e-003 - 0.0425334200263023 - -0.4616906940937042 - <_> - - <_> - - - - <_> - 0 13 18 2 -1. - <_> - 0 14 18 1 2. - 0 - -0.0468562692403793 - 0.4875024855136871 - -0.0433990210294724 - <_> - - <_> - - - - <_> - 6 8 6 2 -1. - <_> - 6 9 6 1 2. - 0 - -5.2139908075332642e-003 - 0.1103964000940323 - -0.1807391047477722 - <_> - - <_> - - - - <_> - 4 0 6 2 -1. - <_> - 4 1 6 1 2. - 0 - -6.7679318599402905e-003 - -0.5230370759963989 - 0.0307772196829319 - <_> - - <_> - - - - <_> - 15 4 3 3 -1. - <_> - 14 5 3 1 3. - 1 - -7.1862619370222092e-003 - 0.1832828968763351 - -0.0569993406534195 - <_> - - <_> - - - - <_> - 0 8 2 2 -1. - <_> - 1 8 1 2 2. - 0 - -9.6733449026942253e-004 - 0.1535539031028748 - -0.1083194985985756 - <_> - - <_> - - - - <_> - 11 4 6 4 -1. - <_> - 13 6 2 4 3. - 1 - 0.0292031392455101 - -0.0377766303718090 - 0.1093320026993752 - <_> - - <_> - - - - <_> - 2 0 12 1 -1. - <_> - 5 0 6 1 2. - 0 - 9.8407091572880745e-003 - -0.1092616990208626 - 0.1679567992687225 - <_> - - <_> - - - - <_> - 1 1 16 11 -1. - <_> - 5 1 8 11 2. - 0 - 0.4450520873069763 - 0.0268258899450302 - -0.7806378006935120 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - -6.1639058403670788e-003 - -0.4938404858112335 - 0.0311304796487093 - <_> - - <_> - - - - <_> - 4 3 10 8 -1. - <_> - 9 3 5 4 2. - <_> - 4 7 5 4 2. - 0 - -0.0491834394633770 - -0.3231860101222992 - 0.0469044297933578 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - 2.6128649551537819e-005 - -0.1063510999083519 - 0.1544602960348129 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 9 1 3 3. - 1 - -0.0368313007056713 - 0.2820610105991364 - -0.0126016000285745 - <_> - - <_> - - - - <_> - 1 5 16 6 -1. - <_> - 1 7 16 2 3. - 0 - -0.0718847513198853 - 0.2314046025276184 - -0.0733308866620064 - <_> - - <_> - - - - <_> - 0 5 18 6 -1. - <_> - 0 7 18 2 3. - 0 - 0.0574985891580582 - -0.0964356362819672 - 0.2050749957561493 - <_> - - <_> - - - - <_> - 0 7 1 3 -1. - <_> - 0 8 1 1 3. - 0 - 3.9720349013805389e-003 - 0.0360010303556919 - -0.5457249283790588 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 9 1 3 3. - 1 - 2.6467780116945505e-003 - -0.0441318899393082 - 0.0756502225995064 - <_> - - <_> - - - - <_> - 8 6 3 1 -1. - <_> - 9 7 1 1 3. - 1 - -8.8836792856454849e-003 - -0.4610821902751923 - 0.0327687896788120 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 9 1 3 3. - 1 - -0.0128562701866031 - 0.0721951574087143 - -0.0297321807593107 - <_> - - <_> - - - - <_> - 6 8 3 3 -1. - <_> - 5 9 3 1 3. - 1 - 0.0120727699249983 - -0.0505888797342777 - 0.2905586063861847 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - 1.8108480435330421e-004 - -0.0714614391326904 - 0.0798238515853882 - <_> - - <_> - - - - <_> - 1 13 16 2 -1. - <_> - 1 13 8 1 2. - <_> - 9 14 8 1 2. - 0 - 0.0160763803869486 - 0.0476631112396717 - -0.3275910019874573 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 1 - -9.5250606536865234e-003 - -0.1898842006921768 - 7.0858187973499298e-003 - <_> - - <_> - - - - <_> - 2 12 1 2 -1. - <_> - 2 12 1 1 2. - 1 - -6.2362798489630222e-003 - -0.4283688962459564 - 0.0339706018567085 - <_> - - <_> - - - - <_> - 12 9 2 2 -1. - <_> - 13 9 1 1 2. - <_> - 12 10 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0803086981177330 - 0.1108464002609253 - <_> - - <_> - - - - <_> - 4 9 2 2 -1. - <_> - 4 9 1 1 2. - <_> - 5 10 1 1 2. - 0 - -1.1949270265176892e-003 - 0.2256557047367096 - -0.0626343935728073 - <_> - - <_> - - - - <_> - 11 2 2 1 -1. - <_> - 11 2 1 1 2. - 0 - 7.5406976975500584e-005 - -0.1237920969724655 - 0.0894999876618385 - <_> - - <_> - - - - <_> - 5 0 8 9 -1. - <_> - 7 0 4 9 2. - 0 - -0.0155067397281528 - 0.3100227117538452 - -0.0654744282364845 - <_> - - <_> - - - - <_> - 11 2 2 1 -1. - <_> - 11 2 1 1 2. - 0 - 5.1327929832041264e-003 - 0.0204462595283985 - -0.4915933012962341 - <_> - - <_> - - - - <_> - 5 2 2 1 -1. - <_> - 6 2 1 1 2. - 0 - 4.8783698730403557e-005 - -0.1722901016473770 - 0.1088512986898422 - <_> - - <_> - - - - <_> - 9 1 1 3 -1. - <_> - 8 2 1 1 3. - 1 - 6.1788759194314480e-003 - 0.0195190999656916 - -0.3139770925045013 - <_> - - <_> - - - - <_> - 4 9 8 6 -1. - <_> - 8 9 4 6 2. - 0 - 0.1713061034679413 - 0.0172466896474361 - -0.7726063132286072 - <_> - - <_> - - - - <_> - 8 1 4 10 -1. - <_> - 8 1 2 10 2. - 0 - -0.0429867096245289 - 0.1577536016702652 - -0.0482686497271061 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 2 1 1 3. - 1 - -5.2703949622809887e-003 - -0.4624505937099457 - 0.0392020307481289 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 9 5 9 5 2. - <_> - 0 10 9 5 2. - 0 - 0.2032378017902374 - 0.0357716716825962 - -0.3940019011497498 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 3 1 3 3. - 1 - 0.0182179491966963 - -0.0407346189022064 - 0.3741911053657532 - <_> - - <_> - - - - <_> - 17 4 1 2 -1. - <_> - 17 5 1 1 2. - 0 - -1.0606779687805101e-004 - 0.1012326031923294 - -0.0911243632435799 - <_> - - <_> - - - - <_> - 0 6 10 1 -1. - <_> - 5 6 5 1 2. - 0 - 3.8906659465283155e-003 - -0.1520171016454697 - 0.0934790223836899 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 0 2 4 2. - 0 - 0.0125372298061848 - -0.0601580515503883 - 0.2558326125144959 - <_> - - <_> - - - - <_> - 3 5 6 5 -1. - <_> - 5 5 2 5 3. - 0 - -9.9574513733386993e-003 - 0.1379802972078323 - -0.1249634027481079 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 3.6789269652217627e-003 - 0.0427718199789524 - -0.3063034117221832 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 3.7803261075168848e-003 - 0.0323704518377781 - -0.4138380885124207 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - 6.8372930400073528e-005 - -0.0645466670393944 - 0.0794665068387985 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 2 1 1 2. - <_> - 1 3 1 1 2. - 0 - -6.3996631070040166e-005 - 0.1355656981468201 - -0.1101491004228592 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - -8.3484519564080983e-005 - 0.1285773962736130 - -0.0937314331531525 - <_> - - <_> - - - - <_> - 7 3 4 4 -1. - <_> - 7 3 2 2 2. - <_> - 9 5 2 2 2. - 0 - -0.0100723998621106 - -0.3828028142452240 - 0.0345466099679470 - <_> - - <_> - - - - <_> - 5 6 8 2 -1. - <_> - 5 7 8 1 2. - 0 - -0.0103168003261089 - 0.1297149956226349 - -0.1024452969431877 - <_> - - <_> - - - - <_> - 7 4 5 4 -1. - <_> - 6 5 5 2 2. - 1 - 0.0107137700542808 - -0.0704529136419296 - 0.2358826994895935 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.0262797605246305 - -0.1242780014872551 - 0.0811929032206535 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - 5.5222269147634506e-003 - 0.0614674314856529 - -0.2642698884010315 - <_> - - <_> - - - - <_> - 0 12 18 3 -1. - <_> - 0 13 18 1 3. - 0 - 7.4345488101243973e-003 - -0.0884712487459183 - 0.1474142968654633 - <_> - - <_> - - - - <_> - 8 4 2 6 -1. - <_> - 8 4 1 3 2. - <_> - 9 7 1 3 2. - 0 - -5.8172550052404404e-003 - -0.3130440115928650 - 0.0437002405524254 - <_> - - <_> - - - - <_> - 5 0 9 4 -1. - <_> - 8 0 3 4 3. - 0 - -0.0365137197077274 - 0.3251106142997742 - -0.0333890803158283 - <_> - - <_> - - - - <_> - 1 12 15 3 -1. - <_> - 1 13 15 1 3. - 0 - -0.0463338792324066 - 0.5042893290519714 - -0.0255471803247929 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - 1.5593919670209289e-004 - -0.0568273402750492 - 0.0776609331369400 - <_> - - <_> - - - - <_> - 1 11 3 1 -1. - <_> - 2 12 1 1 3. - 1 - 8.2058515399694443e-003 - 0.0321849994361401 - -0.4203890860080719 - <_> - - <_> - - - - <_> - 12 7 6 1 -1. - <_> - 12 7 3 1 2. - 1 - -0.0442854613065720 - -0.3896655142307282 - 0.0119123402982950 - <_> - - <_> - - - - <_> - 6 7 1 6 -1. - <_> - 6 7 1 3 2. - 1 - 0.0258340202271938 - 0.0417318902909756 - -0.3318280875682831 - <_> - - <_> - - - - <_> - 7 7 4 6 -1. - <_> - 8 7 2 6 2. - 0 - 0.0309912301599979 - 0.0173530708998442 - -0.6654608249664307 - <_> - - <_> - - - - <_> - 1 8 16 3 -1. - <_> - 1 9 16 1 3. - 0 - 0.0112233497202396 - -0.0643179565668106 - 0.2175581008195877 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 8 2 1 2. - 0 - -1.0795110138133168e-003 - 0.0604902096092701 - -0.1258077025413513 - <_> - - <_> - - - - <_> - 5 0 10 4 -1. - <_> - 5 0 10 2 2. - 1 - 0.1591577976942062 - 0.0323631800711155 - -0.4079827964305878 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - 2.5649809686001390e-005 - -0.0744273290038109 - 0.0895882174372673 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 2 1 1 2. - <_> - 1 3 1 1 2. - 0 - 2.3739310563541949e-005 - -0.0930083170533180 - 0.1334387063980103 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 9 1 2 2 2. - <_> - 7 3 2 2 2. - 0 - 0.0146180903539062 - 0.0191540997475386 - -0.6415231823921204 - <_> - - <_> - - - - <_> - 4 9 4 6 -1. - <_> - 4 11 4 2 3. - 0 - 0.0235322006046772 - -0.0603582113981247 - 0.2178262025117874 - <_> - - <_> - - - - <_> - 5 12 9 2 -1. - <_> - 5 13 9 1 2. - 0 - 1.5804159920662642e-003 - -0.1072172001004219 - 0.0938933715224266 - <_> - - <_> - - - - <_> - 2 1 10 2 -1. - <_> - 2 1 5 2 2. - 1 - 0.1098610013723373 - 0.0602713786065578 - -0.2347172051668167 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - -9.9525712430477142e-003 - -0.5963038802146912 - 0.0226748306304216 - <_> - - <_> - - - - <_> - 0 9 1 3 -1. - <_> - 0 10 1 1 3. - 0 - -2.7224500663578510e-003 - -0.3436203002929688 - 0.0317178517580032 - <_> - - <_> - - - - <_> - 0 8 18 2 -1. - <_> - 0 9 18 1 2. - 0 - -0.0325947701931000 - 0.2031549960374832 - -0.0711073279380798 - <_> - - <_> - - - - <_> - 0 5 1 4 -1. - <_> - 0 6 1 2 2. - 0 - 3.1989789567887783e-003 - 0.0400660485029221 - -0.3138445019721985 - -1.4449690580368042 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0778383314609528 - -0.2895457148551941 - 0.3359082937240601 - <_> - - <_> - - - - <_> - 8 7 9 7 -1. - <_> - 11 7 3 7 3. - 0 - -0.0189563706517220 - 0.1371102929115295 - -0.1191558018326759 - <_> - - <_> - - - - <_> - 0 8 12 4 -1. - <_> - 3 8 6 4 2. - 0 - -0.0290122292935848 - 0.2680377066135407 - -0.2818816900253296 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 1 - 9.8552741110324860e-004 - -0.0815313234925270 - 0.1528104990720749 - <_> - - <_> - - - - <_> - 8 0 1 2 -1. - <_> - 8 0 1 1 2. - 1 - 1.0328469943488017e-004 - -0.2466157972812653 - 0.1760915964841843 - <_> - - <_> - - - - <_> - 6 0 7 2 -1. - <_> - 6 1 7 1 2. - 0 - -4.5671691186726093e-003 - -0.4800229966640472 - 0.0658785030245781 - <_> - - <_> - - - - <_> - 1 10 15 4 -1. - <_> - 1 12 15 2 2. - 0 - 0.0235463008284569 - -0.1611980050802231 - 0.1770496964454651 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - 0.1016383990645409 - 0.0247533395886421 - -0.5653517246246338 - <_> - - <_> - - - - <_> - 8 3 2 12 -1. - <_> - 8 9 2 6 2. - 0 - -0.0117649501189590 - 0.0577937401831150 - -0.3604769110679627 - <_> - - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 9 2 1 2. - 0 - 2.9407900292426348e-003 - -0.0568644516170025 - 0.3267062902450562 - <_> - - <_> - - - - <_> - 9 0 3 3 -1. - <_> - 8 1 3 1 3. - 1 - 0.0120360003784299 - 0.0500290505588055 - -0.4304682016372681 - <_> - - <_> - - - - <_> - 15 1 2 1 -1. - <_> - 15 1 1 1 2. - 0 - -6.2945342506282032e-005 - 0.1441446989774704 - -0.1231764033436775 - <_> - - <_> - - - - <_> - 0 1 4 10 -1. - <_> - 0 6 4 5 2. - 0 - -0.1006926968693733 - -0.4235703051090241 - 0.0498026795685291 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 1 10 1 2. - 0 - 0.0145817296579480 - 0.0301772207021713 - -0.6640638709068298 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - -6.5432410337962210e-005 - 0.1250696033239365 - -0.1638363003730774 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - -9.9888555705547333e-003 - -0.3976281881332398 - 0.0317412391304970 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 5 3 1 4 3. - 1 - 0.0145155703648925 - -0.0675602331757545 - 0.3204439878463745 - <_> - - <_> - - - - <_> - 10 0 6 1 -1. - <_> - 10 0 3 1 2. - 1 - 4.4144429266452789e-003 - -0.1101045012474060 - 0.1062017008662224 - <_> - - <_> - - - - <_> - 3 3 3 3 -1. - <_> - 4 4 1 3 3. - 1 - -0.0190477203577757 - 0.4359183013439179 - -0.0567054599523544 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - 0.0119225401431322 - 0.0226012095808983 - -0.3463886082172394 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 9 0 9 1 2. - 1 - 0.0316638201475143 - -0.0697475075721741 - 0.3346034884452820 - <_> - - <_> - - - - <_> - 8 1 4 2 -1. - <_> - 8 2 4 1 2. - 0 - -4.0487637743353844e-003 - -0.3777567148208618 - 0.0412449985742569 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - 8.5836304351687431e-003 - 0.0405867286026478 - -0.4659684896469116 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 9 5 9 5 2. - <_> - 0 10 9 5 2. - 0 - 0.2546002864837647 - 0.0292705502361059 - -0.6189153790473938 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 0 3 2 3 2. - 0 - -2.7734090108424425e-003 - 0.1460099071264267 - -0.1248235031962395 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - -9.1764237731695175e-003 - 0.2481728941202164 - -0.0557485483586788 - <_> - - <_> - - - - <_> - 6 0 6 1 -1. - <_> - 9 0 3 1 2. - 0 - 7.4874111451208591e-003 - -0.1071233004331589 - 0.1664687991142273 - <_> - - <_> - - - - <_> - 10 0 3 8 -1. - <_> - 8 2 3 4 2. - 1 - 0.0503873117268085 - -0.0504896901547909 - 0.1267845034599304 - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0775756686925888 - 0.1210061982274056 - -0.1771831065416336 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - 0.0104536600410938 - -0.0304590705782175 - 0.2466717064380646 - <_> - - <_> - - - - <_> - 5 8 8 2 -1. - <_> - 5 9 8 1 2. - 0 - -0.0119400899857283 - 0.1431301981210709 - -0.1400607973337174 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 11 9 3 1 2. - 0 - -2.1164349745959044e-003 - 0.0545042082667351 - -0.0924128219485283 - <_> - - <_> - - - - <_> - 4 8 3 2 -1. - <_> - 4 9 3 1 2. - 0 - 4.8259901814162731e-003 - -0.0795849785208702 - 0.4222005903720856 - <_> - - <_> - - - - <_> - 10 2 3 2 -1. - <_> - 10 3 3 1 2. - 0 - 8.0155059695243835e-003 - 0.0197146795690060 - -0.4795632958412170 - <_> - - <_> - - - - <_> - 2 0 8 2 -1. - <_> - 2 1 8 1 2. - 0 - -7.2104120627045631e-003 - -0.4671449959278107 - 0.0325505807995796 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - -0.0316700302064419 - 0.3755325078964233 - -0.0109495399519801 - <_> - - <_> - - - - <_> - 2 2 3 2 -1. - <_> - 3 3 1 2 3. - 1 - 6.3463337719440460e-003 - -0.0652034804224968 - 0.2462629973888397 - <_> - - <_> - - - - <_> - 17 8 1 4 -1. - <_> - 17 9 1 2 2. - 0 - -3.6191360559314489e-003 - -0.1709388941526413 - 0.0311141796410084 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 9 1 2 2. - 0 - 4.3581780046224594e-003 - 0.0366473011672497 - -0.4237492978572846 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 9 0 6 1 2. - <_> - 3 1 6 1 2. - 0 - 7.1306470781564713e-003 - 0.0361863411962986 - -0.3581345081329346 - <_> - - <_> - - - - <_> - 9 1 8 3 -1. - <_> - 9 1 4 3 2. - 1 - 0.2027395069599152 - -0.0464575290679932 - 0.3237068057060242 - <_> - - <_> - - - - <_> - 8 0 2 6 -1. - <_> - 8 0 1 6 2. - 0 - -6.8010999821126461e-003 - 0.1703307926654816 - -0.0903682932257652 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 8 0 3 1 2. - 1 - 0.0198947098106146 - 0.0316714681684971 - -0.6259496808052063 - <_> - - <_> - - - - <_> - 8 8 6 2 -1. - <_> - 11 8 3 1 2. - <_> - 8 9 3 1 2. - 0 - 7.2822818765416741e-004 - -0.0703171566128731 - 0.0968886613845825 - <_> - - <_> - - - - <_> - 0 3 18 12 -1. - <_> - 0 9 18 6 2. - 0 - 0.3695923984050751 - 0.0186286699026823 - -0.7744178175926209 - <_> - - <_> - - - - <_> - 13 8 3 6 -1. - <_> - 14 10 1 2 9. - 0 - 0.0101259099319577 - -0.0668892487883568 - 0.1524703949689865 - <_> - - <_> - - - - <_> - 2 8 14 4 -1. - <_> - 2 10 14 2 2. - 0 - -0.1245594993233681 - 0.2896308004856110 - -0.0485628917813301 - <_> - - <_> - - - - <_> - 13 9 3 1 -1. - <_> - 14 10 1 1 3. - 1 - 2.5091960560530424e-003 - -0.0350436493754387 - 0.1112501993775368 - <_> - - <_> - - - - <_> - 4 0 10 15 -1. - <_> - 9 0 5 15 2. - 0 - -0.2847513854503632 - 0.3567419946193695 - -0.0428154803812504 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - -1.6454169526696205e-003 - 0.1969088017940521 - -0.0439714081585407 - <_> - - <_> - - - - <_> - 5 0 4 1 -1. - <_> - 7 0 2 1 2. - 0 - 1.5759950038045645e-003 - -0.1558419018983841 - 0.1092967018485069 - <_> - - <_> - - - - <_> - 10 2 3 2 -1. - <_> - 10 3 3 1 2. - 0 - 6.7018110712524503e-005 - -0.0937224030494690 - 0.0794489830732346 - <_> - - <_> - - - - <_> - 5 2 3 2 -1. - <_> - 5 3 3 1 2. - 0 - 4.5426278375089169e-003 - 0.0382768400013447 - -0.4256854951381683 - <_> - - <_> - - - - <_> - 10 7 1 2 -1. - <_> - 10 8 1 1 2. - 0 - -5.8855221141129732e-004 - 0.0603053607046604 - -0.1461576074361801 - <_> - - <_> - - - - <_> - 6 6 6 4 -1. - <_> - 6 6 3 2 2. - <_> - 9 8 3 2 2. - 0 - -0.0134366303682327 - -0.2394652962684631 - 0.0633801072835922 - <_> - - <_> - - - - <_> - 10 7 4 3 -1. - <_> - 11 8 2 3 2. - 1 - -4.6623498201370239e-003 - -0.0411083400249481 - 0.0386099815368652 - <_> - - <_> - - - - <_> - 8 7 3 4 -1. - <_> - 7 8 3 2 2. - 1 - 0.0196607392281294 - -0.0376873910427094 - 0.3959226906299591 - <_> - - <_> - - - - <_> - 11 9 4 1 -1. - <_> - 11 9 2 1 2. - 1 - -8.2754753530025482e-003 - 0.1025618016719818 - -0.0427510403096676 - <_> - - <_> - - - - <_> - 7 7 3 3 -1. - <_> - 6 8 3 1 3. - 1 - -0.0317808799445629 - 0.3626415133476257 - -0.0406033694744110 - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - 0.0216846503317356 - 0.0229385606944561 - -0.3512454926967621 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - -0.0154039999470115 - 0.2934393882751465 - -0.0483902990818024 - <_> - - <_> - - - - <_> - 2 1 14 2 -1. - <_> - 9 1 7 1 2. - <_> - 2 2 7 1 2. - 0 - -8.1902230158448219e-003 - -0.3277094960212708 - 0.0413685590028763 - <_> - - <_> - - - - <_> - 9 2 3 1 -1. - <_> - 10 3 1 1 3. - 1 - -7.9587763175368309e-003 - -0.5849394202232361 - 0.0197221394628286 - <_> - - <_> - - - - <_> - 9 3 2 8 -1. - <_> - 7 5 2 4 2. - 1 - 0.0223498903214931 - 6.3248360529541969e-003 - -0.0670235827565193 - <_> - - <_> - - - - <_> - 5 7 1 4 -1. - <_> - 5 8 1 2 2. - 0 - 1.8036609981209040e-003 - -0.0722102373838425 - 0.2062937021255493 - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - -0.0204626396298409 - -0.3445949852466583 - 0.0262401904910803 - <_> - - <_> - - - - <_> - 5 9 1 3 -1. - <_> - 4 10 1 1 3. - 1 - 9.1937501565553248e-005 - -0.1117258965969086 - 0.1140339002013207 - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - -2.0170810166746378e-003 - 0.0586952790617943 - -0.0434083491563797 - <_> - - <_> - - - - <_> - 4 11 1 2 -1. - <_> - 4 11 1 1 2. - 1 - 1.6941629583016038e-003 - 0.0660928636789322 - -0.2047823965549469 - <_> - - <_> - - - - <_> - 9 3 2 8 -1. - <_> - 7 5 2 4 2. - 1 - 0.1120911017060280 - -3.9467259193770587e-004 - -0.5106043815612793 - <_> - - <_> - - - - <_> - 9 3 8 2 -1. - <_> - 11 5 4 2 2. - 1 - 0.0729039311408997 - -0.0399064607918262 - 0.3378052115440369 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 7 4 1 2. - 0 - -3.0249240808188915e-003 - 0.1124901026487351 - -0.1489392966032028 - <_> - - <_> - - - - <_> - 6 7 6 3 -1. - <_> - 8 8 2 1 9. - 0 - -0.0179907791316509 - -0.2489504963159561 - 0.0522084012627602 - <_> - - <_> - - - - <_> - 5 0 8 8 -1. - <_> - 7 0 4 8 2. - 0 - -0.0281639993190765 - 0.3462426960468292 - -0.0468134209513664 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 6 0 6 8 3. - 0 - 0.1455519050359726 - -0.1372732967138290 - 0.0992739796638489 - <_> - - <_> - - - - <_> - 14 0 4 9 -1. - <_> - 14 0 2 9 2. - 1 - 0.1902603954076767 - 0.0178888794034719 - -0.7103316783905029 - <_> - - <_> - - - - <_> - 4 0 9 4 -1. - <_> - 4 0 9 2 2. - 1 - 0.1708780974149704 - 0.0214544609189034 - -0.5676689147949219 - <_> - - <_> - - - - <_> - 3 13 13 2 -1. - <_> - 3 14 13 1 2. - 0 - -0.0493922904133797 - 0.4660165011882782 - -0.0284054595977068 - <_> - - <_> - - - - <_> - 1 13 16 2 -1. - <_> - 1 14 16 1 2. - 0 - 3.9778267964720726e-003 - -0.1049709022045136 - 0.1207138001918793 - <_> - - <_> - - - - <_> - 11 9 6 6 -1. - <_> - 13 11 2 2 9. - 0 - -0.1800612956285477 - 0.3830963969230652 - -0.0141020696610212 - <_> - - <_> - - - - <_> - 1 9 6 6 -1. - <_> - 3 11 2 2 9. - 0 - 3.3417791128158569e-003 - -0.1053301990032196 - 0.1295598000288010 - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - -0.0289579704403877 - -0.3280887007713318 - 8.5954880341887474e-003 - <_> - - <_> - - - - <_> - 1 13 6 2 -1. - <_> - 3 13 2 2 3. - 0 - 0.0129891699180007 - 0.0406576991081238 - -0.3439970016479492 - <_> - - <_> - - - - <_> - 11 3 5 2 -1. - <_> - 11 4 5 1 2. - 0 - 9.3189179897308350e-003 - 0.0200005602091551 - -0.3093312978744507 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -5.2429470088100061e-005 - 0.1268631070852280 - -0.0951527133584023 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - 5.6926601246232167e-005 - -0.0697774663567543 - 0.1006100997328758 - <_> - - <_> - - - - <_> - 7 2 1 3 -1. - <_> - 6 3 1 1 3. - 1 - -6.6324290819466114e-003 - -0.3738464117050171 - 0.0329254008829594 - <_> - - <_> - - - - <_> - 13 0 3 8 -1. - <_> - 14 0 1 8 3. - 0 - -1.8024910241365433e-003 - 0.0833972916007042 - -0.0764525309205055 - <_> - - <_> - - - - <_> - 1 11 16 4 -1. - <_> - 1 11 8 2 2. - <_> - 9 13 8 2 2. - 0 - 0.0651966035366058 - 0.0317757390439510 - -0.3680531978607178 - <_> - - <_> - - - - <_> - 13 0 3 8 -1. - <_> - 14 0 1 8 3. - 0 - -0.0174991004168987 - -0.2574467062950134 - 0.0206988304853439 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 1 1 3 3. - 1 - 8.7240803986787796e-003 - -0.0517450198531151 - 0.2264827042818070 - <_> - - <_> - - - - <_> - 12 2 3 13 -1. - <_> - 13 2 1 13 3. - 0 - -2.4927619379013777e-003 - 0.0974271073937416 - -0.0842309221625328 - <_> - - <_> - - - - <_> - 3 0 3 15 -1. - <_> - 4 0 1 15 3. - 0 - -0.0446004606783390 - -0.7686716914176941 - 0.0147034004330635 - <_> - - <_> - - - - <_> - 17 1 1 14 -1. - <_> - 17 8 1 7 2. - 0 - 0.0325057990849018 - 0.0300058592110872 - -0.4916220009326935 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -2.5649809686001390e-005 - 0.1131459027528763 - -0.0940568000078201 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -2.3604110538144596e-005 - 0.0883647277951241 - -0.0680588483810425 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - 2.6216499463771470e-005 - -0.0913942903280258 - 0.1227736994624138 - <_> - - <_> - - - - <_> - 10 1 5 2 -1. - <_> - 10 2 5 1 2. - 0 - -2.9017529450356960e-003 - -0.1515343040227890 - 0.0306931808590889 - <_> - - <_> - - - - <_> - 3 1 5 2 -1. - <_> - 3 2 5 1 2. - 0 - 6.8409377709031105e-003 - 0.0285490602254868 - -0.3703070878982544 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 9 5 9 5 2. - <_> - 0 10 9 5 2. - 0 - 0.1291435062885284 - 0.0526567809283733 - -0.2027616053819656 - <_> - - <_> - - - - <_> - 8 3 5 6 -1. - <_> - 6 5 5 2 3. - 1 - -0.1138025000691414 - 0.2225105017423630 - -0.0516252294182777 - <_> - - <_> - - - - <_> - 11 4 3 6 -1. - <_> - 12 6 1 2 9. - 0 - 8.2800639793276787e-003 - -0.0659309998154640 - 0.0602529682219028 - <_> - - <_> - - - - <_> - 8 6 1 8 -1. - <_> - 8 6 1 4 2. - 1 - -0.0530367009341717 - -0.4665248095989227 - 0.0276027899235487 - <_> - - <_> - - - - <_> - 1 7 16 6 -1. - <_> - 1 9 16 2 3. - 0 - 0.1186264008283615 - -0.0335345789790154 - 0.3798682987689972 - <_> - - <_> - - - - <_> - 4 4 3 6 -1. - <_> - 5 6 1 2 9. - 0 - 3.0761719681322575e-003 - -0.1226020976901054 - 0.1153718009591103 - <_> - - <_> - - - - <_> - 16 8 2 2 -1. - <_> - 16 8 1 2 2. - 1 - -1.7530350305605680e-004 - 0.0850380733609200 - -0.0923559591174126 - <_> - - <_> - - - - <_> - 1 8 16 4 -1. - <_> - 1 8 8 2 2. - <_> - 9 10 8 2 2. - 0 - 0.0667972564697266 - 0.0270407292991877 - -0.4598272144794464 - <_> - - <_> - - - - <_> - 1 11 17 4 -1. - <_> - 1 12 17 2 2. - 0 - 0.0233794599771500 - -0.0620422512292862 - 0.1758442968130112 - <_> - - <_> - - - - <_> - 0 13 6 2 -1. - <_> - 0 13 3 1 2. - <_> - 3 14 3 1 2. - 0 - 1.0949910210911185e-004 - -0.1238159984350205 - 0.0968135967850685 - <_> - - <_> - - - - <_> - 12 6 1 4 -1. - <_> - 12 6 1 2 2. - 1 - 0.0338632389903069 - 0.0139471795409918 - -0.1836456954479218 - <_> - - <_> - - - - <_> - 2 0 3 8 -1. - <_> - 3 0 1 8 3. - 0 - -0.0349671207368374 - -0.8080993294715881 - 0.0147994095459580 - <_> - - <_> - - - - <_> - 0 4 18 6 -1. - <_> - 6 4 6 6 3. - 0 - 0.4552179872989655 - 0.0136053897440434 - -0.6047881841659546 - <_> - - <_> - - - - <_> - 6 6 4 1 -1. - <_> - 6 6 2 1 2. - 1 - 0.0160876307636499 - 0.0580550096929073 - -0.1982652992010117 - <_> - - <_> - - - - <_> - 8 0 6 10 -1. - <_> - 10 0 2 10 3. - 0 - 0.1723546981811523 - 7.4058459140360355e-003 - -0.5189927220344544 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - 1.5957270516082644e-003 - -0.0428939200937748 - 0.2644946873188019 - <_> - - <_> - - - - <_> - 17 9 1 4 -1. - <_> - 17 10 1 2 2. - 0 - -7.6875099912285805e-003 - -0.2731862962245941 - 0.0131092797964811 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - -1.5951599925756454e-003 - 0.2096793055534363 - -0.0498337894678116 - <_> - - <_> - - - - <_> - 17 9 1 4 -1. - <_> - 17 10 1 2 2. - 0 - 0.0103497896343470 - 7.2593181394040585e-003 - -0.4416640996932983 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 6.9909151643514633e-003 - 0.0249945204705000 - -0.4013820886611939 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 2 1 2 3. - 1 - 4.7854268923401833e-003 - 0.0235026106238365 - -0.0990978032350540 - <_> - - <_> - - - - <_> - 0 9 1 4 -1. - <_> - 0 10 1 2 2. - 0 - -4.3787118047475815e-003 - -0.3618378043174744 - 0.0264573395252228 - <_> - - <_> - - - - <_> - 12 7 3 3 -1. - <_> - 12 8 3 1 3. - 0 - 3.1168339774012566e-003 - -0.0457625910639763 - 0.1117715016007423 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 9 0 2 2 2. - 0 - -0.0118435099720955 - 0.2743585109710693 - -0.0350703783333302 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 2 2. - 0 - -1.5275570331141353e-004 - 0.0845544487237930 - -0.0753161907196045 - <_> - - <_> - - - - <_> - 1 5 15 4 -1. - <_> - 1 7 15 2 2. - 0 - -0.0862143188714981 - 0.1382022053003311 - -0.0711062476038933 - <_> - - <_> - - - - <_> - 9 4 4 8 -1. - <_> - 9 6 4 4 2. - 0 - 0.0363043397665024 - -0.0381477884948254 - 0.1162723004817963 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 8 0 1 2 2. - 0 - 1.4807139523327351e-003 - -0.1041129976511002 - 0.1122824996709824 - <_> - - <_> - - - - <_> - 4 3 10 2 -1. - <_> - 9 3 5 1 2. - <_> - 4 4 5 1 2. - 0 - 7.3545570485293865e-003 - 0.0333745889365673 - -0.3583162128925324 - <_> - - <_> - - - - <_> - 4 0 6 11 -1. - <_> - 6 0 2 11 3. - 0 - 0.0344681590795517 - -0.0549360811710358 - 0.2039003074169159 - <_> - - <_> - - - - <_> - 3 11 12 4 -1. - <_> - 3 12 12 2 2. - 0 - -0.0592398792505264 - 0.4322808086872101 - -0.0247077196836472 - <_> - - <_> - - - - <_> - 1 7 12 6 -1. - <_> - 5 9 4 2 9. - 0 - 0.2427041977643967 - 0.0220374502241611 - -0.5419340133666992 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 1 2 1 2. - 1 - -0.0122847901657224 - -0.3738442957401276 - 9.2992689460515976e-003 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - -0.0116195902228355 - -0.5875784754753113 - 0.0175772104412317 - <_> - - <_> - - - - <_> - 12 7 3 3 -1. - <_> - 12 8 3 1 3. - 0 - 0.0212285108864307 - 5.6798839941620827e-003 - -0.3144912123680115 - <_> - - <_> - - - - <_> - 3 7 3 3 -1. - <_> - 3 8 3 1 3. - 0 - 1.5732479514554143e-003 - -0.0799057930707932 - 0.1397677958011627 - <_> - - <_> - - - - <_> - 5 0 12 15 -1. - <_> - 5 5 12 5 3. - 0 - 0.6112009286880493 - 0.0133211901411414 - -0.5509874224662781 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - -2.0905339624732733e-004 - 0.1030462011694908 - -0.0948901474475861 - <_> - - <_> - - - - <_> - 13 3 2 2 -1. - <_> - 13 4 2 1 2. - 0 - 7.5772361014969647e-005 - -0.0856239274144173 - 0.0874491631984711 - <_> - - <_> - - - - <_> - 1 3 15 8 -1. - <_> - 1 5 15 4 2. - 0 - -0.0481263995170593 - 0.2119800001382828 - -0.0476449094712734 - <_> - - <_> - - - - <_> - 9 6 2 3 -1. - <_> - 9 7 2 1 3. - 0 - -8.6747817695140839e-003 - -0.4238494038581848 - 0.0213676095008850 - <_> - - <_> - - - - <_> - 6 5 4 3 -1. - <_> - 5 6 4 1 3. - 1 - 8.1669818609952927e-003 - -0.0525886192917824 - 0.2005645930767059 - -1.4003620147705078 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 4 4 -1. - <_> - 7 2 2 4 2. - 0 - 8.5009383037686348e-003 - -0.4277128875255585 - 0.2850086092948914 - <_> - - <_> - - - - <_> - 8 7 4 2 -1. - <_> - 8 8 4 1 2. - 0 - -3.6675720475614071e-003 - 0.1830562055110931 - -0.4390658140182495 - <_> - - <_> - - - - <_> - 4 3 8 2 -1. - <_> - 4 3 8 1 2. - 1 - 0.0154511099681258 - -0.2517394125461578 - 0.1886658966541290 - <_> - - <_> - - - - <_> - 2 3 16 10 -1. - <_> - 2 3 8 10 2. - 0 - 0.3004620969295502 - -0.0540388301014900 - 0.4862416088581085 - <_> - - <_> - - - - <_> - 2 2 12 8 -1. - <_> - 2 4 12 4 2. - 0 - 0.3677250146865845 - 0.0251029599457979 - -958.7188110351562500 - <_> - - <_> - - - - <_> - 14 2 4 2 -1. - <_> - 14 2 2 2 2. - 0 - -4.0474338456988335e-003 - 0.2133570015430450 - -0.0978919863700867 - <_> - - <_> - - - - <_> - 0 4 2 9 -1. - <_> - 0 7 2 3 3. - 0 - -0.0533141195774078 - -0.6161444187164307 - 0.0559876188635826 - <_> - - <_> - - - - <_> - 4 3 10 8 -1. - <_> - 4 7 10 4 2. - 0 - -0.2791661024093628 - 0.4078379869461060 - -0.1185386031866074 - <_> - - <_> - - - - <_> - 0 2 4 3 -1. - <_> - 2 2 2 3 2. - 0 - -3.6125730257481337e-003 - 0.2325060069561005 - -0.1566430926322937 - <_> - - <_> - - - - <_> - 8 1 2 4 -1. - <_> - 8 1 1 4 2. - 0 - -2.6726289652287960e-003 - 0.1757100969552994 - -0.1549381017684937 - <_> - - <_> - - - - <_> - 7 0 1 4 -1. - <_> - 6 1 1 2 2. - 1 - -0.0118291797116399 - -0.6674782037734985 - 0.0454935915768147 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 4.4169160537421703e-003 - -0.2293940931558609 - 0.1054278984665871 - <_> - - <_> - - - - <_> - 2 8 14 4 -1. - <_> - 2 10 14 2 2. - 0 - -0.1035784035921097 - 0.3429427146911621 - -0.0699092075228691 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 1 11 16 1 2. - 0 - 3.4325949382036924e-003 - -0.1846843063831329 - 0.1679622977972031 - <_> - - <_> - - - - <_> - 2 9 4 2 -1. - <_> - 2 9 2 2 2. - 1 - -0.0220014695078135 - -0.4447999894618988 - 0.0476888418197632 - <_> - - <_> - - - - <_> - 7 7 8 2 -1. - <_> - 11 7 4 1 2. - <_> - 7 8 4 1 2. - 0 - 3.4049700479954481e-003 - -0.0612011514604092 - 0.1349342018365860 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 5 2. - <_> - 9 5 9 5 2. - 0 - -0.1637541949748993 - -0.4972603917121887 - 0.0431142188608646 - <_> - - <_> - - - - <_> - 11 0 5 10 -1. - <_> - 11 0 5 5 2. - 1 - 0.0426831394433975 - 0.1905709058046341 - -0.0452457703649998 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 6 7 6 1 2. - 0 - -5.8941352181136608e-003 - 0.1255677938461304 - -0.1550654023885727 - <_> - - <_> - - - - <_> - 7 3 4 6 -1. - <_> - 7 6 4 3 2. - 0 - 0.0168734900653362 - -0.0661193132400513 - 0.3474495112895966 - <_> - - <_> - - - - <_> - 0 1 4 14 -1. - <_> - 0 8 4 7 2. - 0 - 0.0430995784699917 - 0.0575836002826691 - -0.3395290076732636 - <_> - - <_> - - - - <_> - 12 11 2 1 -1. - <_> - 12 11 1 1 2. - 1 - -0.0194772295653820 - -0.8039277791976929 - 2.4795620702207088e-003 - <_> - - <_> - - - - <_> - 6 11 1 2 -1. - <_> - 6 11 1 1 2. - 1 - -4.6851670049363747e-005 - 0.1161905005574226 - -0.1725704073905945 - <_> - - <_> - - - - <_> - 3 4 12 6 -1. - <_> - 3 6 12 2 3. - 0 - -0.0618079304695129 - 0.4056524932384491 - -0.0552820302546024 - <_> - - <_> - - - - <_> - 2 0 4 8 -1. - <_> - 2 4 4 4 2. - 0 - -0.0398896597325802 - -0.2851915061473846 - 0.0710409730672836 - <_> - - <_> - - - - <_> - 15 0 2 10 -1. - <_> - 15 0 1 10 2. - 1 - 0.0517902411520481 - 0.0102649601176381 - -0.3324474990367889 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 3 0 10 1 2. - 1 - 5.5987639352679253e-003 - -0.2374172061681747 - 0.0760814696550369 - <_> - - <_> - - - - <_> - 11 1 4 10 -1. - <_> - 11 1 4 5 2. - 1 - 0.3729403018951416 - -0.0144576001912355 - 0.2766433060169220 - <_> - - <_> - - - - <_> - 7 1 10 4 -1. - <_> - 7 1 5 4 2. - 1 - 0.2840290069580078 - -0.0665690526366234 - 0.3055528998374939 - <_> - - <_> - - - - <_> - 5 0 9 7 -1. - <_> - 8 0 3 7 3. - 0 - -0.0336107090115547 - 0.3767885863780975 - -0.0386321581900120 - <_> - - <_> - - - - <_> - 7 2 2 4 -1. - <_> - 8 2 1 4 2. - 0 - 4.1422769427299500e-003 - -0.1114033982157707 - 0.1607939004898071 - <_> - - <_> - - - - <_> - 3 2 12 8 -1. - <_> - 3 4 12 4 2. - 0 - -0.0784781575202942 - 0.5287243723869324 - -0.0308714397251606 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - 7.3427408933639526e-003 - -0.0886204317212105 - 0.1757823973894119 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - 3.6650819238275290e-003 - -0.1401319950819016 - 0.0889945700764656 - <_> - - <_> - - - - <_> - 6 7 5 2 -1. - <_> - 6 7 5 1 2. - 1 - 0.0249476097524166 - -0.0572457909584045 - 0.2909868061542511 - <_> - - <_> - - - - <_> - 11 13 4 2 -1. - <_> - 12 13 2 2 2. - 0 - -9.5206424593925476e-003 - -0.5074890255928040 - 0.0299209896475077 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 0 5 1 2. - <_> - 9 1 5 1 2. - 0 - -5.2697858773171902e-003 - -0.3367429077625275 - 0.0424879901111126 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 9 0 4 1 2. - <_> - 5 1 4 1 2. - 0 - -5.2029830403625965e-003 - -0.3872976899147034 - 0.0390708781778812 - <_> - - <_> - - - - <_> - 3 9 6 6 -1. - <_> - 3 9 3 3 2. - <_> - 6 12 3 3 2. - 0 - 0.0155430398881435 - -0.0815093889832497 - 0.1808387041091919 - <_> - - <_> - - - - <_> - 6 13 9 2 -1. - <_> - 9 13 3 2 3. - 0 - -0.0524194017052650 - -0.5531703829765320 - 0.0184993594884872 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - -0.0111103300005198 - -0.7034459114074707 - 0.0181828700006008 - <_> - - <_> - - - - <_> - 14 10 3 2 -1. - <_> - 15 11 1 2 3. - 1 - 2.4250999558717012e-003 - -0.0457252115011215 - 0.0519403293728828 - <_> - - <_> - - - - <_> - 5 0 3 6 -1. - <_> - 5 3 3 3 2. - 0 - -8.0726835876703262e-003 - -0.2230128943920136 - 0.0591846518218517 - <_> - - <_> - - - - <_> - 4 0 12 8 -1. - <_> - 8 0 4 8 3. - 0 - 0.0830495506525040 - -0.0779340714216232 - 0.0390878692269325 - <_> - - <_> - - - - <_> - 2 0 12 8 -1. - <_> - 6 0 4 8 3. - 0 - -0.0832247883081436 - 0.2976483106613159 - -0.0553525611758232 - <_> - - <_> - - - - <_> - 5 0 12 5 -1. - <_> - 8 0 6 5 2. - 0 - -0.0287941191345453 - 0.1785778999328613 - -0.0220392197370529 - <_> - - <_> - - - - <_> - 1 0 12 5 -1. - <_> - 4 0 6 5 2. - 0 - 0.0564895309507847 - -0.0698909312486649 - 0.2107651978731155 - <_> - - <_> - - - - <_> - 7 0 4 14 -1. - <_> - 9 0 2 7 2. - <_> - 7 7 2 7 2. - 0 - -0.0616075918078423 - -0.6709880232810974 - 0.0254087205976248 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 9 0 9 1 2. - 1 - 0.0404302515089512 - -0.0430069416761398 - 0.3612573146820068 - <_> - - <_> - - - - <_> - 0 6 18 4 -1. - <_> - 9 6 9 2 2. - <_> - 0 8 9 2 2. - 0 - 0.0816636979579926 - 0.0371078401803970 - -0.4014778137207031 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 10 1 2 2 2. - 1 - 0.0200602691620588 - 0.0283941105008125 - -0.4509697854518890 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 7 5 4 2 9. - 0 - 0.4480923116207123 - -0.0288634896278381 - 0.5443242192268372 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 5 2 1 4 3. - 1 - 9.4997808337211609e-003 - -0.0631850063800812 - 0.2014364004135132 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - -2.3604110538144596e-005 - 0.0855014175176620 - -0.0625851824879646 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 2 1 1 2. - <_> - 1 3 1 1 2. - 0 - -8.9380017016083002e-005 - 0.1278081983327866 - -0.1021258011460304 - <_> - - <_> - - - - <_> - 17 2 1 2 -1. - <_> - 17 3 1 1 2. - 0 - -3.0439419788308442e-004 - 0.1362383067607880 - -0.0963960811495781 - <_> - - <_> - - - - <_> - 0 2 1 2 -1. - <_> - 0 3 1 1 2. - 0 - -7.1386282797902822e-005 - 0.1202043965458870 - -0.1152094006538391 - <_> - - <_> - - - - <_> - 10 7 1 3 -1. - <_> - 9 8 1 1 3. - 1 - -7.4278670363128185e-003 - -0.1176512986421585 - 0.0256468392908573 - <_> - - <_> - - - - <_> - 1 2 1 4 -1. - <_> - 1 3 1 2 2. - 0 - 9.1655907453969121e-005 - -0.1066583022475243 - 0.1162258014082909 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -8.8285116362385452e-005 - 0.1020200997591019 - -0.0947737917304039 - <_> - - <_> - - - - <_> - 9 0 8 6 -1. - <_> - 9 0 8 3 2. - 1 - 0.1716001033782959 - -0.0963247865438461 - 0.1393671929836273 - <_> - - <_> - - - - <_> - 12 6 3 4 -1. - <_> - 13 7 1 4 3. - 1 - 6.1614410951733589e-003 - -0.0783397704362869 - 0.1986435055732727 - <_> - - <_> - - - - <_> - 3 3 1 3 -1. - <_> - 2 4 1 1 3. - 1 - 0.0104880100116134 - 0.0224729795008898 - -0.5888965725898743 - <_> - - <_> - - - - <_> - 11 7 3 4 -1. - <_> - 12 8 1 4 3. - 1 - 0.0423890985548496 - 3.2426279503852129e-003 - -0.3817951977252960 - <_> - - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 6 8 4 1 3. - 1 - 0.0189421791583300 - -0.0385925881564617 - 0.3448579013347626 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 8 9 3 1 2. - 0 - -1.8505830084905028e-003 - 0.0621170587837696 - -0.1422298997640610 - <_> - - <_> - - - - <_> - 3 8 8 2 -1. - <_> - 3 8 4 1 2. - <_> - 7 9 4 1 2. - 0 - 3.4762551076710224e-003 - -0.0630814731121063 - 0.2007206976413727 - <_> - - <_> - - - - <_> - 11 8 4 6 -1. - <_> - 11 10 4 2 3. - 0 - 8.2640787586569786e-003 - -0.0460104309022427 - 0.1130814999341965 - <_> - - <_> - - - - <_> - 1 11 14 4 -1. - <_> - 8 11 7 4 2. - 0 - -0.0849933773279190 - 0.2154290974140167 - -0.0659862980246544 - <_> - - <_> - - - - <_> - 9 13 6 2 -1. - <_> - 11 13 2 2 3. - 0 - -0.0231807008385658 - -0.3427445888519287 - 0.0235659405589104 - <_> - - <_> - - - - <_> - 3 13 6 2 -1. - <_> - 5 13 2 2 3. - 0 - 0.0172915291041136 - 0.0314326398074627 - -0.3918023109436035 - <_> - - <_> - - - - <_> - 1 11 16 2 -1. - <_> - 1 12 16 1 2. - 0 - 3.1471049878746271e-003 - -0.1212544962763786 - 0.0950881168246269 - <_> - - <_> - - - - <_> - 1 10 16 4 -1. - <_> - 1 12 16 2 2. - 0 - -0.0957942008972168 - 0.3747287988662720 - -0.0426806211471558 - <_> - - <_> - - - - <_> - 12 13 6 2 -1. - <_> - 14 13 2 2 3. - 0 - -0.0265573691576719 - -0.4792292118072510 - 0.0261464007198811 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -8.1971433246508241e-005 - 0.1034777984023094 - -0.1175799965858460 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -6.4540100283920765e-003 - -0.5270028114318848 - 0.0349571593105793 - <_> - - <_> - - - - <_> - 1 14 12 1 -1. - <_> - 5 14 4 1 3. - 0 - -0.0330873392522335 - -0.3979344069957733 - 0.0254548005759716 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 6 6 6 3 2. - 0 - 0.0701283663511276 - -0.0294641107320786 - 0.4120103120803833 - <_> - - <_> - - - - <_> - 7 12 4 3 -1. - <_> - 8 12 2 3 2. - 0 - -9.6940301591530442e-004 - 0.1289426982402802 - -0.0847874134778976 - <_> - - <_> - - - - <_> - 9 9 1 2 -1. - <_> - 9 9 1 1 2. - 1 - 0.0186607595533133 - -6.2266499735414982e-003 - 0.3669834136962891 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 9 9 1 1 2. - 1 - 0.0135134300217032 - 0.0170807391405106 - -0.7108424901962280 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -7.1627681609243155e-004 - 0.0951879769563675 - -0.0463394597172737 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - 5.4968800395727158e-003 - 0.0190170500427485 - -0.5660678744316101 - <_> - - <_> - - - - <_> - 1 6 16 4 -1. - <_> - 1 7 16 2 2. - 0 - -0.0339884310960770 - 0.2053205966949463 - -0.0537301301956177 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - -9.4949705526232719e-003 - -0.4779914915561676 - 0.0261098798364401 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - 8.8990468066185713e-004 - -0.0538782998919487 - 0.1529861986637116 - <_> - - <_> - - - - <_> - 4 2 2 2 -1. - <_> - 5 2 1 2 2. - 0 - 6.1590311815962195e-005 - -0.1203349977731705 - 0.0874421000480652 - <_> - - <_> - - - - <_> - 7 0 4 11 -1. - <_> - 7 0 2 11 2. - 0 - -0.0583840794861317 - 0.1957484036684036 - -0.0669205635786057 - <_> - - <_> - - - - <_> - 8 5 3 3 -1. - <_> - 7 6 3 1 3. - 1 - 1.6286900499835610e-003 - -0.1063129976391792 - 0.1267475038766861 - <_> - - <_> - - - - <_> - 14 1 2 14 -1. - <_> - 14 8 2 7 2. - 0 - 0.0797880366444588 - 0.0121673298999667 - -0.5167301297187805 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 7 0 4 2 2. - 0 - 5.3892009891569614e-003 - -0.1291144043207169 - 0.0887833982706070 - <_> - - <_> - - - - <_> - 1 3 16 7 -1. - <_> - 5 3 8 7 2. - 0 - 0.2509182095527649 - 0.0321798510849476 - -0.3768610954284668 - <_> - - <_> - - - - <_> - 4 1 9 3 -1. - <_> - 4 2 9 1 3. - 0 - 0.0172097105532885 - 0.0123794004321098 - -0.7875345945358276 - <_> - - <_> - - - - <_> - 6 2 8 13 -1. - <_> - 6 2 4 13 2. - 0 - 0.1891666054725647 - -0.0333567596971989 - 0.1895112991333008 - <_> - - <_> - - - - <_> - 4 0 9 1 -1. - <_> - 7 0 3 1 3. - 0 - -4.8115151003003120e-003 - 0.2050116956233978 - -0.0531618110835552 - <_> - - <_> - - - - <_> - 15 4 3 3 -1. - <_> - 14 5 3 1 3. - 1 - 0.0202697701752186 - -0.0289377495646477 - 0.2185049951076508 - <_> - - <_> - - - - <_> - 8 7 1 2 -1. - <_> - 8 8 1 1 2. - 0 - -7.8484037658199668e-005 - 0.0575751215219498 - -0.1832818984985352 - <_> - - <_> - - - - <_> - 11 8 3 3 -1. - <_> - 11 9 3 1 3. - 0 - 2.2350680083036423e-003 - -0.0324196107685566 - 0.0866090729832649 - <_> - - <_> - - - - <_> - 3 4 3 3 -1. - <_> - 4 5 1 3 3. - 1 - -0.0169897098094225 - 0.2827008068561554 - -0.0383652187883854 - <_> - - <_> - - - - <_> - 15 3 3 3 -1. - <_> - 14 4 3 1 3. - 1 - -6.4167408272624016e-003 - 0.1313406974077225 - -0.0436117313802242 - <_> - - <_> - - - - <_> - 3 3 3 3 -1. - <_> - 4 4 1 3 3. - 1 - 7.4191158637404442e-003 - -0.0706334635615349 - 0.1760067045688629 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 11 0 4 1 2. - <_> - 7 1 4 1 2. - 0 - 6.3850679434835911e-003 - 0.0321756713092327 - -0.3905653953552246 - <_> - - <_> - - - - <_> - 1 6 6 9 -1. - <_> - 3 6 2 9 3. - 0 - -0.1251693069934845 - -0.8182873725891113 - 0.0108839897438884 - <_> - - <_> - - - - <_> - 11 5 2 2 -1. - <_> - 12 5 1 1 2. - <_> - 11 6 1 1 2. - 0 - -4.4671529904007912e-003 - -0.5034620165824890 - 4.6763787977397442e-003 - <_> - - <_> - - - - <_> - 5 5 2 2 -1. - <_> - 5 5 1 1 2. - <_> - 6 6 1 1 2. - 0 - -7.7330769272521138e-005 - 0.1123111024498940 - -0.0961181893944740 - <_> - - <_> - - - - <_> - 14 1 3 14 -1. - <_> - 14 8 3 7 2. - 0 - 0.0487493798136711 - 0.0153942899778485 - -0.1379497051239014 - <_> - - <_> - - - - <_> - 2 5 6 8 -1. - <_> - 4 5 2 8 3. - 0 - -0.0150579595938325 - 0.0967942178249359 - -0.1040832027792931 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 10 4 2 2 2. - 0 - -0.0128671396523714 - -0.5594317913055420 - 8.0226631835103035e-003 - <_> - - <_> - - - - <_> - 4 1 8 14 -1. - <_> - 8 1 4 14 2. - 0 - 0.4015636146068573 - 0.0144503097981215 - -0.6986814141273499 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 10 4 2 2 2. - 0 - 1.4811520231887698e-003 - -0.0602559782564640 - 0.0617385916411877 - <_> - - <_> - - - - <_> - 4 7 3 7 -1. - <_> - 5 7 1 7 3. - 0 - -0.0360164083540440 - -0.7666615247726440 - 0.0140148000791669 - -1.4018720388412476 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0917561426758766 - -0.2386678010225296 - 0.4141280055046082 - <_> - - <_> - - - - <_> - 8 3 10 10 -1. - <_> - 13 3 5 5 2. - <_> - 8 8 5 5 2. - 0 - -0.0639683231711388 - 0.2354369014501572 - -0.2272184938192368 - <_> - - <_> - - - - <_> - 0 0 8 5 -1. - <_> - 2 0 4 5 2. - 0 - -0.0100612798705697 - 0.1903312951326370 - -0.2668313086032867 - <_> - - <_> - - - - <_> - 12 8 6 6 -1. - <_> - 12 8 3 6 2. - 0 - -0.0135615598410368 - 0.1492757946252823 - -0.1808369010686874 - <_> - - <_> - - - - <_> - 0 8 6 6 -1. - <_> - 3 8 3 6 2. - 0 - -0.0150768300518394 - 0.2060939967632294 - -0.1853415071964264 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - -6.1514219269156456e-003 - -0.5257387757301331 - 0.0175556205213070 - <_> - - <_> - - - - <_> - 5 0 11 4 -1. - <_> - 4 1 11 2 2. - 1 - 5.2476930432021618e-004 - -0.1458822041749954 - 0.1516609936952591 - <_> - - <_> - - - - <_> - 2 12 16 2 -1. - <_> - 2 13 16 1 2. - 0 - 2.4739510845392942e-003 - -0.1880511939525604 - 0.0956946983933449 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - 5.1760678179562092e-003 - 0.0520320907235146 - -0.4938291013240814 - <_> - - <_> - - - - <_> - 11 0 4 2 -1. - <_> - 11 0 2 2 2. - 1 - 7.1702478453516960e-003 - -0.0941429212689400 - 0.1121701002120972 - <_> - - <_> - - - - <_> - 8 0 3 4 -1. - <_> - 7 1 3 2 2. - 1 - -0.0200577601790428 - -0.5945836901664734 - 0.0365518406033516 - <_> - - <_> - - - - <_> - 5 0 8 14 -1. - <_> - 5 0 4 14 2. - 0 - -0.2099146991968155 - 0.2629818022251129 - -0.1024070009589195 - <_> - - <_> - - - - <_> - 6 7 3 2 -1. - <_> - 6 8 3 1 2. - 0 - -4.2166719213128090e-003 - 0.1322692036628723 - -0.1503732055425644 - <_> - - <_> - - - - <_> - 10 0 3 8 -1. - <_> - 8 2 3 4 2. - 1 - -0.0149440001696348 - 0.0650079399347305 - -0.0314821898937225 - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0916189774870873 - 0.1145974993705750 - -0.2158081978559494 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 1.3998460490256548e-003 - -0.1513507068157196 - 0.1351508945226669 - <_> - - <_> - - - - <_> - 9 1 9 2 -1. - <_> - 12 4 3 2 3. - 1 - 0.0627878010272980 - -0.1066391989588738 - 0.2077779024839401 - <_> - - <_> - - - - <_> - 3 6 12 9 -1. - <_> - 3 6 6 9 2. - 0 - 0.1603447049856186 - -0.0674448832869530 - 0.3066191077232361 - <_> - - <_> - - - - <_> - 5 5 8 2 -1. - <_> - 5 6 8 1 2. - 0 - -0.0100808003917336 - 0.2236672937870026 - -0.0887190401554108 - <_> - - <_> - - - - <_> - 13 6 2 6 -1. - <_> - 13 6 1 6 2. - 1 - 0.0218050591647625 - -0.0556704215705395 - 0.1359948962926865 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 0 0 9 3 2. - <_> - 9 3 9 3 2. - 0 - -0.0624005310237408 - -0.4434593915939331 - 0.0315365903079510 - <_> - - <_> - - - - <_> - 13 6 2 6 -1. - <_> - 13 6 1 6 2. - 1 - -0.0338275581598282 - 0.2535226047039032 - -0.0142370602115989 - <_> - - <_> - - - - <_> - 5 6 6 2 -1. - <_> - 5 6 6 1 2. - 1 - 0.0249442607164383 - -0.0565281696617603 - 0.2607103884220123 - <_> - - <_> - - - - <_> - 12 8 4 3 -1. - <_> - 13 9 2 3 2. - 1 - 0.0286747291684151 - -0.0299342703074217 - 0.3963845074176788 - <_> - - <_> - - - - <_> - 0 5 18 8 -1. - <_> - 0 5 9 4 2. - <_> - 9 9 9 4 2. - 0 - 0.0907829701900482 - 0.0478614382445812 - -0.3908458948135376 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - -9.8480619490146637e-003 - -0.5313044786453247 - 0.0151046598330140 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 7.7331489883363247e-003 - 0.0242120604962111 - -0.5601106882095337 - <_> - - <_> - - - - <_> - 13 0 5 3 -1. - <_> - 12 1 5 1 3. - 1 - 9.7148418426513672e-003 - -0.0773390233516693 - 0.2003569006919861 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -3.8716041017323732e-003 - 0.0935838297009468 - -0.1630876958370209 - <_> - - <_> - - - - <_> - 12 7 3 3 -1. - <_> - 13 8 1 3 3. - 1 - 4.5740120112895966e-003 - -0.0741003602743149 - 0.1867326050996780 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 0 11 18 1 2. - 0 - 3.5367589443922043e-003 - -0.1337856948375702 - 0.1311887055635452 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - 6.7387451417744160e-003 - 0.0191045496612787 - -0.2671408951282501 - <_> - - <_> - - - - <_> - 8 7 2 1 -1. - <_> - 8 7 1 1 2. - 1 - 9.2638395726680756e-003 - 0.0389440283179283 - -0.3811526894569397 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 6 6 6 2 2. - 0 - 0.0180356502532959 - -0.0563138388097286 - 0.2619901895523071 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - 6.1390590853989124e-003 - 0.0667682513594627 - -0.2474174052476883 - <_> - - <_> - - - - <_> - 12 7 3 3 -1. - <_> - 13 8 1 3 3. - 1 - -0.0207422897219658 - 0.1581667959690094 - -0.0370551086962223 - <_> - - <_> - - - - <_> - 6 7 3 3 -1. - <_> - 5 8 3 1 3. - 1 - 7.1745091117918491e-003 - -0.0627238526940346 - 0.2400090992450714 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 1 2 2 2. - 1 - -0.0139801297336817 - -0.2568688988685608 - 0.0244082696735859 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - 5.0162561237812042e-003 - 0.0346935093402863 - -0.3694097101688385 - <_> - - <_> - - - - <_> - 12 4 2 6 -1. - <_> - 12 6 2 2 3. - 0 - 6.2731141224503517e-003 - -0.0931362733244896 - 0.0891287103295326 - <_> - - <_> - - - - <_> - 2 12 1 2 -1. - <_> - 2 12 1 1 2. - 1 - -6.1432798393070698e-003 - -0.3862429857254028 - 0.0327900089323521 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - -5.4340949282050133e-003 - 0.1252959072589874 - -0.0733088776469231 - <_> - - <_> - - - - <_> - 7 5 3 7 -1. - <_> - 8 5 1 7 3. - 0 - 0.0264763794839382 - 0.0196925196796656 - -0.6520739793777466 - <_> - - <_> - - - - <_> - 7 0 4 11 -1. - <_> - 7 0 2 11 2. - 0 - 0.0531985610723495 - -0.0389075092971325 - 0.3445923030376434 - <_> - - <_> - - - - <_> - 9 2 1 2 -1. - <_> - 9 2 1 1 2. - 1 - 6.8159057991579175e-004 - -0.1429661959409714 - 0.1105147972702980 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - 0.0273211896419525 - -0.0230135805904865 - 0.3866828978061676 - <_> - - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - 0.0164375193417072 - -0.0503561496734619 - 0.2543112933635712 - <_> - - <_> - - - - <_> - 3 0 14 2 -1. - <_> - 10 0 7 1 2. - <_> - 3 1 7 1 2. - 0 - -0.0113530699163675 - -0.3853333890438080 - 0.0233515705913305 - <_> - - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 0 0 2 3 2. - <_> - 2 3 2 3 2. - 0 - -5.6346738710999489e-003 - 0.1851262003183365 - -0.0785678625106812 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 1 2 2 2. - 1 - 6.9470210000872612e-003 - 0.0369826108217239 - -0.1762986034154892 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 3 1 2 2 2. - 1 - -0.0165615193545818 - -0.4984858036041260 - 0.0288834199309349 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - -0.0768493562936783 - -0.3157871961593628 - 0.0435194000601768 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 1 2 3 2. - 1 - -0.0151811297982931 - 0.2342346012592316 - -0.0625914782285690 - <_> - - <_> - - - - <_> - 12 5 6 2 -1. - <_> - 12 6 6 1 2. - 0 - 0.0194898601621389 - 9.9025378003716469e-003 - -0.3876186013221741 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 0.0180505998432636 - -0.0439307093620300 - 0.3334142863750458 - <_> - - <_> - - - - <_> - 15 0 3 15 -1. - <_> - 16 0 1 15 3. - 0 - -2.9345480725169182e-003 - 0.0809545367956162 - -0.0499147698283196 - <_> - - <_> - - - - <_> - 0 0 3 15 -1. - <_> - 1 0 1 15 3. - 0 - 0.0263634100556374 - 0.0291267596185207 - -0.5075094103813171 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 1 2 1 2. - 0 - 2.4248650297522545e-003 - 0.0349614284932613 - -0.2873327136039734 - <_> - - <_> - - - - <_> - 7 0 2 1 -1. - <_> - 8 0 1 1 2. - 0 - 4.9459808506071568e-003 - 0.0231612101197243 - -0.5071476101875305 - <_> - - <_> - - - - <_> - 15 1 3 14 -1. - <_> - 15 8 3 7 2. - 0 - -0.1527924984693527 - -0.3288157880306244 - 0.0251827891916037 - <_> - - <_> - - - - <_> - 0 1 4 12 -1. - <_> - 0 7 4 6 2. - 0 - -1.4403219392988831e-004 - 0.0755192562937737 - -0.1817900985479355 - <_> - - <_> - - - - <_> - 8 2 10 7 -1. - <_> - 8 2 5 7 2. - 0 - 0.2895443141460419 - 0.0112048899754882 - -0.3839797973632813 - <_> - - <_> - - - - <_> - 2 0 9 6 -1. - <_> - 2 3 9 3 2. - 0 - -0.0487764589488506 - -0.3839943110942841 - 0.0332496799528599 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 3 5 12 2 3. - 0 - -0.0326264388859272 - 0.3178147077560425 - -0.0470084510743618 - <_> - - <_> - - - - <_> - 0 5 10 2 -1. - <_> - 5 5 5 2 2. - 0 - 7.5620561838150024e-003 - -0.1639129966497421 - 0.0883946195244789 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 14 10 1 3 3. - 1 - 5.5116498842835426e-003 - -0.0453669391572475 - 0.1035958006978035 - <_> - - <_> - - - - <_> - 1 11 3 3 -1. - <_> - 2 11 1 3 3. - 0 - 7.8960359096527100e-003 - 0.0258352104574442 - -0.4117685854434967 - <_> - - <_> - - - - <_> - 13 3 5 12 -1. - <_> - 13 9 5 6 2. - 0 - 0.0255158301442862 - 0.0233579408377409 - -0.1015767008066177 - <_> - - <_> - - - - <_> - 0 8 4 4 -1. - <_> - 0 8 2 2 2. - <_> - 2 10 2 2 2. - 0 - 2.7663391083478928e-003 - -0.0830834880471230 - 0.1461292952299118 - <_> - - <_> - - - - <_> - 12 8 6 1 -1. - <_> - 14 8 2 1 3. - 0 - -3.0674580484628677e-003 - 0.0921359285712242 - -0.0571467913687229 - <_> - - <_> - - - - <_> - 0 5 1 6 -1. - <_> - 0 7 1 2 3. - 0 - 9.2945564538240433e-003 - 0.0387363918125629 - -0.3532677888870239 - <_> - - <_> - - - - <_> - 1 5 16 6 -1. - <_> - 1 7 16 2 3. - 0 - 0.0674231275916100 - -0.0752417668700218 - 0.1759665012359619 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 6 7 6 1 2. - 0 - -4.4064600951969624e-003 - 0.0977936610579491 - -0.1518930941820145 - <_> - - <_> - - - - <_> - 10 3 3 6 -1. - <_> - 11 5 1 2 9. - 0 - -0.0498286001384258 - -0.4579021930694580 - 6.8976799957454205e-003 - <_> - - <_> - - - - <_> - 5 3 3 6 -1. - <_> - 6 5 1 2 9. - 0 - 0.0365433506667614 - 0.0514394491910934 - -0.2690314948558807 - <_> - - <_> - - - - <_> - 13 3 5 12 -1. - <_> - 13 9 5 6 2. - 0 - -0.0641553029417992 - -0.0376881808042526 - 0.0356850884854794 - <_> - - <_> - - - - <_> - 1 8 4 2 -1. - <_> - 2 8 2 2 2. - 0 - 1.6559410141780972e-003 - -0.0784540399909019 - 0.1445766985416412 - <_> - - <_> - - - - <_> - 12 4 3 11 -1. - <_> - 13 4 1 11 3. - 0 - -0.0435861088335514 - -0.6851059794425964 - 0.0130487699061632 - <_> - - <_> - - - - <_> - 0 3 5 12 -1. - <_> - 0 9 5 6 2. - 0 - -0.2223066985607147 - -0.5776153802871704 - 0.0171249397099018 - <_> - - <_> - - - - <_> - 12 4 3 11 -1. - <_> - 13 4 1 11 3. - 0 - 0.0246731601655483 - 0.0118981599807739 - -0.4052211046218872 - <_> - - <_> - - - - <_> - 5 13 4 2 -1. - <_> - 5 14 4 1 2. - 0 - -0.0119292298331857 - 0.3351877927780151 - -0.0336703099310398 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - 1.2319719826336950e-004 - -0.0857188627123833 - 0.0837130919098854 - <_> - - <_> - - - - <_> - 0 4 7 2 -1. - <_> - 0 5 7 1 2. - 0 - -9.3408823013305664e-003 - -0.2854315042495728 - 0.0407378897070885 - <_> - - <_> - - - - <_> - 14 4 3 3 -1. - <_> - 13 5 3 1 3. - 1 - -7.4626510031521320e-003 - 0.1119131967425346 - -0.0340123288333416 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 7 0 4 7 2. - 0 - -0.0137237096205354 - 0.2498622983694077 - -0.0450337603688240 - <_> - - <_> - - - - <_> - 4 0 12 15 -1. - <_> - 8 0 4 15 3. - 0 - 0.1521987020969391 - -0.0910210907459259 - 0.0909610465168953 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - 7.7259603131096810e-005 - -0.1059086024761200 - 0.1105574965476990 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 4.9416758120059967e-003 - 0.0241890698671341 - -0.3095433115959168 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -8.4537155926227570e-003 - -0.4988319873809815 - 0.0197901595383883 - <_> - - <_> - - - - <_> - 16 10 2 1 -1. - <_> - 16 10 1 1 2. - 0 - -1.5807019372005016e-004 - 0.0810882821679115 - -0.0969615131616592 - <_> - - <_> - - - - <_> - 3 2 3 13 -1. - <_> - 4 2 1 13 3. - 0 - -0.0371250584721565 - -0.6658145189285278 - 0.0148829696699977 - <_> - - <_> - - - - <_> - 14 4 3 3 -1. - <_> - 13 5 3 1 3. - 1 - 0.0268303193151951 - -0.0143090495839715 - 0.1894340068101883 - <_> - - <_> - - - - <_> - 5 3 8 4 -1. - <_> - 5 5 8 2 2. - 0 - -0.0502456203103065 - 0.2932176887989044 - -0.0342677310109138 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - -6.9950302131474018e-003 - -0.3633973896503449 - 0.0245582703500986 - <_> - - <_> - - - - <_> - 4 0 8 13 -1. - <_> - 6 0 4 13 2. - 0 - 0.0658775717020035 - -0.0696238428354263 - 0.1689317971467972 - <_> - - <_> - - - - <_> - 11 1 1 4 -1. - <_> - 10 2 1 2 2. - 1 - -0.0134680103510618 - -0.5744501948356628 - 7.6498151756823063e-003 - <_> - - <_> - - - - <_> - 7 1 4 1 -1. - <_> - 8 2 2 1 2. - 1 - 6.5795979462563992e-003 - 0.0468714609742165 - -0.2604298889636993 - <_> - - <_> - - - - <_> - 14 4 3 3 -1. - <_> - 13 5 3 1 3. - 1 - 0.0837022736668587 - -2.6280758902430534e-003 - 0.9539653062820435 - <_> - - <_> - - - - <_> - 4 4 3 3 -1. - <_> - 5 5 1 3 3. - 1 - -0.0269146692007780 - 0.4341320097446442 - -0.0251872204244137 - <_> - - <_> - - - - <_> - 17 2 1 8 -1. - <_> - 17 2 1 4 2. - 1 - 0.0681707710027695 - 0.0113553795963526 - -0.1976965069770813 - <_> - - <_> - - - - <_> - 1 2 8 1 -1. - <_> - 1 2 4 1 2. - 1 - -0.0183866992592812 - -0.3016122877597809 - 0.0400681607425213 - <_> - - <_> - - - - <_> - 11 6 3 4 -1. - <_> - 12 7 1 4 3. - 1 - -4.8888311721384525e-003 - -0.0474995188415051 - 0.0279497597366571 - <_> - - <_> - - - - <_> - 7 6 4 3 -1. - <_> - 6 7 4 1 3. - 1 - 0.0120319798588753 - -0.0417588092386723 - 0.2567807137966156 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - 0.0452825687825680 - -0.0120907295495272 - 0.5962427258491516 - <_> - - <_> - - - - <_> - 0 4 8 3 -1. - <_> - 0 5 8 1 3. - 0 - 0.0164286494255066 - 0.0317231491208076 - -0.3415141999721527 - <_> - - <_> - - - - <_> - 10 3 6 6 -1. - <_> - 10 5 6 2 3. - 0 - 0.0158072896301746 - -0.0876926332712173 - 0.0733993873000145 - <_> - - <_> - - - - <_> - 4 1 6 8 -1. - <_> - 4 1 3 4 2. - <_> - 7 5 3 4 2. - 0 - 0.0738655477762222 - 0.0175666399300098 - -0.5859189033508301 - <_> - - <_> - - - - <_> - 10 4 4 2 -1. - <_> - 10 4 2 2 2. - 1 - 0.0817420035600662 - -0.0146944299340248 - 0.3817226886749268 - <_> - - <_> - - - - <_> - 6 13 1 2 -1. - <_> - 6 14 1 1 2. - 0 - 1.6201290418393910e-004 - -0.1015762984752655 - 0.1007106006145477 - <_> - - <_> - - - - <_> - 9 11 3 4 -1. - <_> - 9 12 3 2 2. - 0 - 9.6514606848359108e-003 - -0.0391967110335827 - 0.1571251004934311 - <_> - - <_> - - - - <_> - 1 11 10 4 -1. - <_> - 1 13 10 2 2. - 0 - 0.1139461994171143 - 0.0216240193694830 - -0.4994927048683167 - <_> - - <_> - - - - <_> - 14 1 4 2 -1. - <_> - 14 1 4 1 2. - 1 - -3.1548771075904369e-003 - 0.0503181293606758 - -0.0436193607747555 - <_> - - <_> - - - - <_> - 3 1 12 8 -1. - <_> - 3 3 12 4 2. - 0 - -0.0443513505160809 - 0.3084303140640259 - -0.0323894284665585 - <_> - - <_> - - - - <_> - 12 4 2 8 -1. - <_> - 12 4 1 8 2. - 1 - 0.0593373291194439 - 8.8634816929697990e-003 - -0.4340277016162872 - <_> - - <_> - - - - <_> - 6 4 8 2 -1. - <_> - 6 4 8 1 2. - 1 - 8.4961997345089912e-003 - -0.1643534004688263 - 0.0720200389623642 - <_> - - <_> - - - - <_> - 7 0 6 1 -1. - <_> - 7 0 3 1 2. - 0 - 0.0126119097694755 - -0.0547339096665382 - 0.2674084901809692 - <_> - - <_> - - - - <_> - 3 5 12 6 -1. - <_> - 7 7 4 2 9. - 0 - 0.1005614027380943 - 0.0964706912636757 - -0.1237357035279274 - <_> - - <_> - - - - <_> - 10 3 1 2 -1. - <_> - 10 4 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0654680281877518 - 0.0757642164826393 - <_> - - <_> - - - - <_> - 9 0 6 3 -1. - <_> - 8 1 6 1 3. - 1 - 0.0173253808170557 - 0.0493854694068432 - -0.2093895971775055 - <_> - - <_> - - - - <_> - 16 5 2 3 -1. - <_> - 16 6 2 1 3. - 0 - -8.1096980720758438e-003 - -0.2312972992658615 - 0.0138064604252577 - <_> - - <_> - - - - <_> - 2 7 4 4 -1. - <_> - 2 7 2 2 2. - <_> - 4 9 2 2 2. - 0 - 7.0394109934568405e-003 - -0.0485932305455208 - 0.2104512006044388 - <_> - - <_> - - - - <_> - 16 5 2 3 -1. - <_> - 16 6 2 1 3. - 0 - -1.0678370017558336e-003 - 0.0985712036490440 - -0.0456795394420624 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 0 6 2 1 3. - 0 - 7.9888887703418732e-003 - 0.0227227304130793 - -0.4730550050735474 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 12 6 1 4 2. - 1 - -2.8562550432980061e-003 - -0.1266745030879974 - 0.0263468995690346 - <_> - - <_> - - - - <_> - 4 13 8 2 -1. - <_> - 6 13 4 2 2. - 0 - -0.0282390993088484 - -0.4817343056201935 - 0.0202802792191505 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 8 0 1 3 2. - 0 - -3.5814680159091949e-003 - 0.1337555944919586 - -0.0751768574118614 - <_> - - <_> - - - - <_> - 4 3 10 12 -1. - <_> - 4 3 5 6 2. - <_> - 9 9 5 6 2. - 0 - -0.1443670988082886 - -0.3129830062389374 - 0.0385885089635849 - <_> - - <_> - - - - <_> - 7 11 8 4 -1. - <_> - 7 11 4 4 2. - 0 - 0.1250455975532532 - 6.5982979722321033e-003 - -0.8157945275306702 - <_> - - <_> - - - - <_> - 3 11 8 4 -1. - <_> - 7 11 4 4 2. - 0 - -0.0130116604268551 - 0.1292210072278976 - -0.0797087624669075 - <_> - - <_> - - - - <_> - 13 6 2 2 -1. - <_> - 14 6 1 1 2. - <_> - 13 7 1 1 2. - 0 - -1.7209460493177176e-003 - 0.1841018050909042 - -0.0381583906710148 - <_> - - <_> - - - - <_> - 3 6 2 2 -1. - <_> - 3 6 1 1 2. - <_> - 4 7 1 1 2. - 0 - 8.2962076703552157e-005 - -0.0808445066213608 - 0.1240184977650642 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - 6.5386621281504631e-003 - 0.0257210507988930 - -0.3472849130630493 - <_> - - <_> - - - - <_> - 4 1 4 6 -1. - <_> - 4 4 4 3 2. - 0 - -7.6022120192646980e-003 - -0.1327951997518539 - 0.0695039033889771 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - -1.2741329555865377e-004 - 0.0734610781073570 - -0.0567503012716770 - <_> - - <_> - - - - <_> - 5 0 7 3 -1. - <_> - 5 1 7 1 3. - 0 - -8.7483227252960205e-003 - -0.3874781131744385 - 0.0252428594976664 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 1.8606209778226912e-004 - -0.0807940736413002 - 0.1112494990229607 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -2.3457060160581023e-004 - 0.1357578039169312 - -0.0805138573050499 - <_> - - <_> - - - - <_> - 17 0 1 6 -1. - <_> - 17 2 1 2 3. - 0 - 1.7333909636363387e-003 - -0.0408243499696255 - 0.0704857334494591 - <_> - - <_> - - - - <_> - 3 11 12 2 -1. - <_> - 3 12 12 1 2. - 0 - 2.5763779412955046e-003 - -0.1058242991566658 - 0.0882512032985687 - <_> - - <_> - - - - <_> - 17 11 1 2 -1. - <_> - 17 12 1 1 2. - 0 - 3.1439519952982664e-003 - 0.0228503905236721 - -0.2287800014019013 - <_> - - <_> - - - - <_> - 7 1 4 2 -1. - <_> - 7 2 4 1 2. - 0 - -6.6810711286962032e-003 - -0.5519475936889648 - 0.0166440196335316 - <_> - - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 14 3 3 1 3. - 1 - -0.0102156195789576 - 0.1151650995016098 - -0.0309206396341324 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - 6.8375351838767529e-003 - 0.0355978682637215 - -0.2579573988914490 - <_> - - <_> - - - - <_> - 9 2 8 2 -1. - <_> - 9 2 4 2 2. - 0 - 3.1667288858443499e-003 - -0.1131158992648125 - 0.0593770816922188 - <_> - - <_> - - - - <_> - 1 0 12 15 -1. - <_> - 7 0 6 15 2. - 0 - 0.1784611046314240 - -0.0910909771919250 - 0.1021554023027420 - <_> - - <_> - - - - <_> - 17 0 1 6 -1. - <_> - 17 2 1 2 3. - 0 - -2.3922319523990154e-003 - 0.1054854989051819 - -0.0409410186111927 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 2 1 2 3. - 0 - 8.2479801494628191e-004 - -0.0925479605793953 - 0.1070403009653091 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 14 0 4 1 2. - 1 - -2.3213559761643410e-003 - 0.0474837012588978 - -0.0448017083108425 - <_> - - <_> - - - - <_> - 5 0 3 5 -1. - <_> - 6 1 1 5 3. - 1 - 9.9881906062364578e-003 - -0.0531012415885925 - 0.1893334984779358 - <_> - - <_> - - - - <_> - 13 0 3 4 -1. - <_> - 14 0 1 4 3. - 0 - 7.2582447901368141e-003 - 0.0154708195477724 - -0.1627379059791565 - <_> - - <_> - - - - <_> - 9 3 4 8 -1. - <_> - 9 3 2 8 2. - 1 - -0.1220915019512177 - -0.6588258147239685 - 0.0144322402775288 - <_> - - <_> - - - - <_> - 15 3 2 3 -1. - <_> - 14 4 2 1 3. - 1 - 0.0429302901029587 - -8.9507391676306725e-003 - 0.7003753781318665 - <_> - - <_> - - - - <_> - 3 3 3 2 -1. - <_> - 4 4 1 2 3. - 1 - -0.0141837401315570 - 0.2873809039592743 - -0.0324238389730453 - <_> - - <_> - - - - <_> - 12 3 2 2 -1. - <_> - 13 3 1 1 2. - <_> - 12 4 1 1 2. - 0 - 6.5566753619350493e-005 - -0.0600121095776558 - 0.0723430663347244 - <_> - - <_> - - - - <_> - 4 3 2 2 -1. - <_> - 4 3 1 1 2. - <_> - 5 4 1 1 2. - 0 - -9.1673799033742398e-005 - 0.1241253018379211 - -0.0886371731758118 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 0 1 3 3. - 0 - 0.0104515701532364 - 0.0198976993560791 - -0.5485957860946655 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 1 0 1 3 3. - 0 - 7.1406508795917034e-003 - 0.0218714401125908 - -0.3995957076549530 - -1.4323190450668335 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 6 10 4 -1. - <_> - 4 8 10 2 2. - 0 - -0.0790023133158684 - 0.3242895007133484 - -0.2531394064426422 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 9 2 2 8 2. - 0 - 0.0223373007029295 - -0.0941315069794655 - 0.1378436982631683 - <_> - - <_> - - - - <_> - 1 0 9 12 -1. - <_> - 4 0 3 12 3. - 0 - -0.0666114836931229 - 0.1753558069467545 - -0.2632693946361542 - <_> - - <_> - - - - <_> - 6 4 12 10 -1. - <_> - 12 4 6 5 2. - <_> - 6 9 6 5 2. - 0 - 0.0181155707687140 - 0.1001667976379395 - -0.2508405148983002 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 9 0 9 1 2. - 1 - 0.0422082990407944 - -0.0464601181447506 - 0.5075340270996094 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - 0.0219473801553249 - -0.0351926311850548 - 0.2941356897354126 - <_> - - <_> - - - - <_> - 2 0 10 4 -1. - <_> - 2 2 10 2 2. - 0 - 0.0390684790909290 - 0.0343180112540722 - -0.5963727831840515 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - -0.0171588398516178 - 0.2207123041152954 - -0.0628029406070709 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -5.5410808272426948e-005 - 0.1925067007541657 - -0.0979116931557655 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - 0.0577130392193794 - -0.0177523493766785 - 0.3969089984893799 - <_> - - <_> - - - - <_> - 6 6 4 3 -1. - <_> - 5 7 4 1 3. - 1 - -0.0276702996343374 - 0.2730920016765595 - -0.0699228271842003 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 8 2 2 2. - 0 - 4.1078277863562107e-003 - -0.0490987785160542 - 0.2490742951631546 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 4.8231639084406197e-005 - -0.1242284029722214 - 0.1748877018690109 - <_> - - <_> - - - - <_> - 10 0 8 6 -1. - <_> - 14 0 4 3 2. - <_> - 10 3 4 3 2. - 0 - 5.4101468995213509e-003 - -0.1163510009646416 - 0.1120261996984482 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 5 2. - <_> - 9 5 9 5 2. - 0 - 0.1215678006410599 - 0.0358167998492718 - -0.4239023923873901 - <_> - - <_> - - - - <_> - 16 0 2 8 -1. - <_> - 16 4 2 4 2. - 0 - -0.0457986593246460 - -0.3961238861083984 - 0.0269146692007780 - <_> - - <_> - - - - <_> - 0 0 2 8 -1. - <_> - 0 4 2 4 2. - 0 - -4.3434510007500648e-003 - 0.1517422944307327 - -0.1524718999862671 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 11 2 1 2. - 1 - 5.4885639110580087e-004 - -0.1039891019463539 - 0.1021101996302605 - <_> - - <_> - - - - <_> - 4 7 2 4 -1. - <_> - 4 8 2 2 2. - 0 - 2.4605579674243927e-003 - -0.0920632407069206 - 0.2008579969406128 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 11 2 1 2. - 1 - -0.0204001795500517 - 0.3931783139705658 - 5.8226548135280609e-003 - <_> - - <_> - - - - <_> - 4 10 1 4 -1. - <_> - 3 11 1 2 2. - 1 - 2.3037819482851774e-004 - -0.1504732072353363 - 0.1060613021254540 - <_> - - <_> - - - - <_> - 13 0 1 4 -1. - <_> - 13 0 1 2 2. - 1 - -4.2928410694003105e-003 - 0.0726602599024773 - -0.0793565437197685 - <_> - - <_> - - - - <_> - 9 0 8 6 -1. - <_> - 9 0 8 3 2. - 1 - 0.1863780021667481 - -0.1124956011772156 - 0.1569485962390900 - <_> - - <_> - - - - <_> - 1 0 16 4 -1. - <_> - 9 0 8 2 2. - <_> - 1 2 8 2 2. - 0 - -0.0264334604144096 - -0.3909560143947601 - 0.0494861491024494 - <_> - - <_> - - - - <_> - 1 3 16 11 -1. - <_> - 5 3 8 11 2. - 0 - -0.2413793057203293 - -0.6788706183433533 - 0.0180502496659756 - <_> - - <_> - - - - <_> - 9 1 4 1 -1. - <_> - 9 1 2 1 2. - 1 - 0.0304666403681040 - 2.7202309574931860e-003 - -0.6389626860618591 - <_> - - <_> - - - - <_> - 3 9 4 4 -1. - <_> - 3 10 4 2 2. - 0 - 2.7874959632754326e-003 - -0.0831275731325150 - 0.1775137037038803 - <_> - - <_> - - - - <_> - 2 3 14 9 -1. - <_> - 2 6 14 3 3. - 0 - 0.1282777041196823 - -0.0936257764697075 - 0.1679662019014359 - <_> - - <_> - - - - <_> - 7 5 4 2 -1. - <_> - 7 6 4 1 2. - 0 - -3.7217219360172749e-003 - 0.1679864972829819 - -0.1074066013097763 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 13 0 1 4 2. - 1 - 0.0251063294708729 - 0.0170449391007423 - -0.4981293976306915 - <_> - - <_> - - - - <_> - 0 11 4 4 -1. - <_> - 1 11 2 4 2. - 0 - 8.5740294307470322e-003 - 0.0389305390417576 - -0.3350399136543274 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 13 0 1 4 2. - 1 - -0.0162992291152477 - -0.1772850006818771 - 5.9367809444665909e-003 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 5 0 4 1 2. - 1 - 0.0137555897235870 - 0.0492921508848667 - -0.2990570068359375 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - 0.0101705603301525 - 0.0125693203881383 - -0.3271737098693848 - <_> - - <_> - - - - <_> - 0 1 4 12 -1. - <_> - 0 7 4 6 2. - 0 - -0.1183888018131256 - -0.3064275085926056 - 0.0404061898589134 - <_> - - <_> - - - - <_> - 2 3 16 12 -1. - <_> - 10 3 8 6 2. - <_> - 2 9 8 6 2. - 0 - 0.2877846062183380 - 8.6266417056322098e-003 - -0.5840386152267456 - <_> - - <_> - - - - <_> - 5 5 8 2 -1. - <_> - 5 5 4 1 2. - <_> - 9 6 4 1 2. - 0 - -0.0107093695551157 - -0.4581218063831329 - 0.0267107002437115 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - -0.0168365407735109 - -0.4834601879119873 - 1.4101839624345303e-003 - <_> - - <_> - - - - <_> - 6 0 3 6 -1. - <_> - 7 1 1 6 3. - 1 - -0.0268719699233770 - 0.3023610115051270 - -0.0401738695800304 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - 2.0822209771722555e-003 - 0.0263978503644466 - -0.0711281672120094 - <_> - - <_> - - - - <_> - 7 0 8 7 -1. - <_> - 9 2 4 7 2. - 1 - 0.1830713003873825 - 0.0315734706819057 - -0.4311215877532959 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - -5.3969710133969784e-003 - -0.0999102368950844 - 0.0134910000488162 - <_> - - <_> - - - - <_> - 5 0 1 4 -1. - <_> - 4 1 1 2 2. - 1 - 6.5924688242375851e-003 - 0.0344651006162167 - -0.4054282009601593 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - 7.6914830133318901e-003 - -0.0393002107739449 - 0.1681717932224274 - <_> - - <_> - - - - <_> - 2 2 3 2 -1. - <_> - 3 3 1 2 3. - 1 - -0.0134877096861601 - 0.3188030123710632 - -0.0385033711791039 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - -0.0132067799568176 - 0.1150619015097618 - -0.0261230692267418 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 9.5766428858041763e-003 - -0.0562361218035221 - 0.2204838991165161 - <_> - - <_> - - - - <_> - 8 13 7 2 -1. - <_> - 8 14 7 1 2. - 0 - 3.0655260197818279e-003 - -0.0801741108298302 - 0.1032200008630753 - <_> - - <_> - - - - <_> - 8 3 1 2 -1. - <_> - 8 3 1 1 2. - 1 - 8.6779087723698467e-005 - -0.1722442954778671 - 0.0690877288579941 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 10 1 2 8 2. - 1 - 0.0961858332157135 - 1.5162150375545025e-003 - -0.5543875098228455 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 8 1 8 2 2. - 1 - 0.0381203815340996 - 0.0515935495495796 - -0.2627368867397308 - <_> - - <_> - - - - <_> - 5 0 12 10 -1. - <_> - 9 0 4 10 3. - 0 - 0.5056834220886231 - 0.0104669099673629 - -0.5157765746116638 - <_> - - <_> - - - - <_> - 7 7 3 2 -1. - <_> - 7 7 3 1 2. - 1 - -0.0121925799176097 - 0.3058409094810486 - -0.0400131605565548 - <_> - - <_> - - - - <_> - 9 5 9 10 -1. - <_> - 9 10 9 5 2. - 0 - 0.1282064020633698 - 0.0224020406603813 - -0.2776327133178711 - <_> - - <_> - - - - <_> - 1 0 12 10 -1. - <_> - 5 0 4 10 3. - 0 - 0.1294344961643219 - -0.0615348294377327 - 0.2134552001953125 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 5 0 4 7 2. - 0 - -0.0757145211100578 - 0.1529033929109573 - -0.1166701018810272 - <_> - - <_> - - - - <_> - 6 0 2 2 -1. - <_> - 6 0 1 1 2. - <_> - 7 1 1 1 2. - 0 - -5.3732179367216304e-005 - 0.1280037015676498 - -0.0978259593248367 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 0 12 18 2 2. - 0 - 7.5803599320352077e-003 - -0.0979151725769043 - 0.1262035965919495 - <_> - - <_> - - - - <_> - 0 5 5 10 -1. - <_> - 0 10 5 5 2. - 0 - 0.0686360225081444 - 0.0404322184622288 - -0.3132973015308380 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 9 9 1 3 3. - 0 - 0.0114607503637671 - 0.0253615006804466 - -0.4854018986225128 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 13 1 1 2. - <_> - 1 14 1 1 2. - 0 - 2.6128649551537819e-005 - -0.1043203026056290 - 0.1133332997560501 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 17 13 1 1 2. - <_> - 16 14 1 1 2. - 0 - 8.4630657511297613e-005 - -0.1048785969614983 - 0.1274009943008423 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 13 1 1 2. - <_> - 1 14 1 1 2. - 0 - -2.3739310563541949e-005 - 0.1511404961347580 - -0.1025215014815331 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 1 2 1 2. - 1 - 0.0116111198440194 - 0.0148869697004557 - -0.2867495119571686 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - 0.0124207204207778 - -0.0620668604969978 - 0.1777233928442001 - <_> - - <_> - - - - <_> - 14 5 2 6 -1. - <_> - 14 5 1 6 2. - 1 - 0.0234262607991695 - -0.0847592502832413 - 0.1441590040922165 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 9 9 3 2. - <_> - 9 12 9 3 2. - 0 - 0.1436820030212402 - 0.0257685091346502 - -0.4959807097911835 - <_> - - <_> - - - - <_> - 9 1 1 4 -1. - <_> - 9 2 1 2 2. - 0 - -3.6740589421242476e-003 - -0.3470003008842468 - 0.0128000602126122 - <_> - - <_> - - - - <_> - 1 0 1 4 -1. - <_> - 1 1 1 2 2. - 0 - 5.1495590014383197e-005 - -0.1067951023578644 - 0.0999599397182465 - <_> - - <_> - - - - <_> - 1 0 16 2 -1. - <_> - 9 0 8 1 2. - <_> - 1 1 8 1 2. - 0 - 9.9259437993168831e-003 - 0.0326209701597691 - -0.3536975979804993 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 8 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - -5.1487040764186531e-005 - 0.1253120005130768 - -0.0952782332897186 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - 0.0273266006261110 - -8.9491289108991623e-003 - 0.0647247210144997 - <_> - - <_> - - - - <_> - 6 8 3 4 -1. - <_> - 7 8 1 4 3. - 0 - 0.0223257504403591 - 0.0140139004215598 - -0.7404717206954956 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - 0.0402809605002403 - 1.0004050564020872e-003 - -0.1177709996700287 - <_> - - <_> - - - - <_> - 6 7 4 2 -1. - <_> - 6 7 4 1 2. - 1 - 0.0218933299183846 - -0.0508843213319778 - 0.2278957962989807 - <_> - - <_> - - - - <_> - 12 8 3 2 -1. - <_> - 12 9 3 1 2. - 0 - -7.1642571128904819e-003 - 0.1285706013441086 - -0.0535524301230907 - <_> - - <_> - - - - <_> - 0 5 17 6 -1. - <_> - 0 7 17 2 3. - 0 - -0.0808411389589310 - 0.2065366059541702 - -0.0666172280907631 - <_> - - <_> - - - - <_> - 14 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 14 7 1 1 2. - 0 - 5.1331298891454935e-004 - -0.0544428005814552 - 0.1496316045522690 - <_> - - <_> - - - - <_> - 8 8 3 1 -1. - <_> - 9 9 1 1 3. - 1 - 8.6274370551109314e-003 - 0.0308179594576359 - -0.3672313988208771 - <_> - - <_> - - - - <_> - 14 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 14 7 1 1 2. - 0 - -8.7373692076653242e-004 - 0.1390278041362763 - -0.0632526502013206 - <_> - - <_> - - - - <_> - 9 7 3 1 -1. - <_> - 10 8 1 1 3. - 1 - -0.0117200398817658 - -0.4767001867294312 - 0.0244123209267855 - <_> - - <_> - - - - <_> - 9 0 1 6 -1. - <_> - 9 0 1 3 2. - 1 - 0.0488609895110130 - 0.0100850900635123 - -0.4659259021282196 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 9 0 3 1 2. - 1 - 0.0186931006610394 - -0.0719920396804810 - 0.1769388020038605 - <_> - - <_> - - - - <_> - 6 5 6 10 -1. - <_> - 6 5 3 10 2. - 0 - -0.0539086498320103 - 0.1467525959014893 - -0.0904555171728134 - <_> - - <_> - - - - <_> - 9 1 1 2 -1. - <_> - 9 1 1 1 2. - 1 - 8.3356387913227081e-003 - 0.0223987400531769 - -0.4941251873970032 - <_> - - <_> - - - - <_> - 14 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 14 7 1 1 2. - 0 - 2.7100899387733079e-005 - -0.0535624101758003 - 0.0771028995513916 - <_> - - <_> - - - - <_> - 2 6 2 2 -1. - <_> - 2 6 1 1 2. - <_> - 3 7 1 1 2. - 0 - 4.9839400162454695e-005 - -0.0879170671105385 - 0.1276974976062775 - <_> - - <_> - - - - <_> - 14 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 14 7 1 1 2. - 0 - -2.5873789127217606e-005 - 0.0862401127815247 - -0.0919469594955444 - <_> - - <_> - - - - <_> - 2 6 2 2 -1. - <_> - 2 6 1 1 2. - <_> - 3 7 1 1 2. - 0 - -4.5616321585839614e-005 - 0.1086385995149612 - -0.0997067466378212 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 3.4546090755611658e-003 - 0.0336912795901299 - -0.2599461078643799 - <_> - - <_> - - - - <_> - 5 0 8 5 -1. - <_> - 7 0 4 5 2. - 0 - -0.0304389707744122 - 0.3696292936801910 - -0.0292082708328962 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 7 5 4 2 9. - 0 - 0.4395630061626434 - -0.0230350792407990 - 0.4414143860340118 - <_> - - <_> - - - - <_> - 4 6 1 3 -1. - <_> - 4 7 1 1 3. - 0 - 5.8688350691227242e-005 - -0.1096998974680901 - 0.0987688973546028 - <_> - - <_> - - - - <_> - 13 7 2 6 -1. - <_> - 13 9 2 2 3. - 0 - 8.4090819582343102e-003 - -0.0491456389427185 - 0.1781875044107437 - <_> - - <_> - - - - <_> - 1 4 16 2 -1. - <_> - 1 4 8 1 2. - <_> - 9 5 8 1 2. - 0 - -0.0149121098220348 - -0.4213177859783173 - 0.0264007300138474 - <_> - - <_> - - - - <_> - 10 13 6 2 -1. - <_> - 12 13 2 2 3. - 0 - -0.0209064893424511 - -0.2946732044219971 - 0.0150551898404956 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - 5.3503939852816984e-005 - -0.0809751674532890 - 0.1256861984729767 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 8 2 1 2. - 0 - -1.0656829690560699e-003 - 0.0537998713552952 - -0.1491664946079254 - <_> - - <_> - - - - <_> - 7 4 4 4 -1. - <_> - 7 4 2 2 2. - <_> - 9 6 2 2 2. - 0 - 0.0148796895518899 - 0.0201143808662891 - -0.4714792966842651 - <_> - - <_> - - - - <_> - 10 13 6 2 -1. - <_> - 12 13 2 2 3. - 0 - 0.0184495002031326 - 0.0162126608192921 - -0.2607092857360840 - <_> - - <_> - - - - <_> - 3 6 1 4 -1. - <_> - 3 8 1 2 2. - 0 - 1.1283960193395615e-003 - -0.0618423111736774 - 0.1573618054389954 - <_> - - <_> - - - - <_> - 10 13 6 2 -1. - <_> - 12 13 2 2 3. - 0 - 0.0417683906853199 - 4.5171868987381458e-003 - -0.5230177044868469 - <_> - - <_> - - - - <_> - 3 0 11 2 -1. - <_> - 3 1 11 1 2. - 0 - -4.6589840203523636e-003 - -0.2460370063781738 - 0.0389899984002113 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 6 1 6 1 2. - 0 - 0.0121205700561404 - 0.0129689900204539 - -0.6771157979965210 - <_> - - <_> - - - - <_> - 0 9 1 3 -1. - <_> - 0 10 1 1 3. - 0 - 5.1322788931429386e-003 - 0.0152305504307151 - -0.5588334202766419 - <_> - - <_> - - - - <_> - 6 5 12 4 -1. - <_> - 12 5 6 2 2. - <_> - 6 7 6 2 2. - 0 - 0.0852644816040993 - 1.7884389963001013e-003 - -0.5704882144927979 - <_> - - <_> - - - - <_> - 0 5 12 4 -1. - <_> - 0 5 6 2 2. - <_> - 6 7 6 2 2. - 0 - 0.0277299191802740 - -0.0375315397977829 - 0.3102256953716278 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 10 3 2 2 2. - 0 - 4.1674780659377575e-003 - -0.0953240767121315 - 0.0961099192500114 - <_> - - <_> - - - - <_> - 0 4 4 4 -1. - <_> - 0 6 4 2 2. - 0 - -0.0350565910339355 - -0.3769027888774872 - 0.0244747009128332 - <_> - - <_> - - - - <_> - 16 8 2 1 -1. - <_> - 16 8 1 1 2. - 1 - 0.0171847604215145 - -7.0347599685192108e-003 - 0.4858829975128174 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 8 1 1 2. - 1 - 3.7842839956283569e-003 - 0.0439080595970154 - -0.2523730993270874 - <_> - - <_> - - - - <_> - 0 0 18 15 -1. - <_> - 6 0 6 15 3. - 0 - 0.8206691741943359 - 0.0151718696579337 - -0.5394846200942993 - <_> - - <_> - - - - <_> - 1 2 6 4 -1. - <_> - 4 2 3 4 2. - 0 - 0.0100911604240537 - -0.0969208627939224 - 0.1118957996368408 - <_> - - <_> - - - - <_> - 13 2 2 13 -1. - <_> - 13 2 1 13 2. - 0 - -0.0160295106470585 - -0.2344131022691727 - 0.0234555192291737 - <_> - - <_> - - - - <_> - 3 2 2 13 -1. - <_> - 4 2 1 13 2. - 0 - 0.0108496798202395 - 0.0441476404666901 - -0.2696352899074554 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 0.0130452997982502 - 2.2153200116008520e-003 - -0.7978491783142090 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 1 1 3 3. - 1 - 0.0112366396933794 - -0.0430468209087849 - 0.2401491999626160 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -7.7543058432638645e-003 - -0.3550145030021668 - 0.0110251400619745 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 3.3010800834745169e-003 - 0.0303408205509186 - -0.3713628947734833 - <_> - - <_> - - - - <_> - 2 12 16 2 -1. - <_> - 2 13 16 1 2. - 0 - 6.5340842120349407e-003 - -0.0858052521944046 - 0.0916388481855392 - <_> - - <_> - - - - <_> - 2 13 14 2 -1. - <_> - 2 14 14 1 2. - 0 - -0.0476196818053722 - 0.4086326956748962 - -0.0264201592653990 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 6.8403937621042132e-004 - -0.0323128588497639 - 0.0880808010697365 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -7.6149452070239931e-005 - 0.1152559965848923 - -0.0890749320387840 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0609943717718124 - 0.0818466916680336 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - -8.2685357483569533e-005 - 0.1123972982168198 - -0.0878406614065170 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - -5.1181959861423820e-005 - 0.1241813972592354 - -0.0961579829454422 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - -8.0426130443811417e-003 - -0.4060375988483429 - 0.0250931605696678 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0734931826591492 - 0.0902145579457283 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - 5.0119768275180832e-005 - -0.0829944536089897 - 0.1139464974403381 - <_> - - <_> - - - - <_> - 8 3 8 2 -1. - <_> - 8 4 8 1 2. - 0 - -9.5925288042053580e-004 - -0.0712060630321503 - 0.0428064316511154 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 6 1 1 1 3. - 0 - 2.0211040973663330e-003 - 0.0255169607698917 - -0.3551217019557953 - <_> - - <_> - - - - <_> - 8 6 4 4 -1. - <_> - 10 6 2 2 2. - <_> - 8 8 2 2 2. - 0 - 0.0122425798326731 - 0.0187698900699615 - -0.1980791985988617 - <_> - - <_> - - - - <_> - 5 1 7 6 -1. - <_> - 5 3 7 2 3. - 0 - -0.0142810503020883 - 0.1960750967264175 - -0.0502470508217812 - <_> - - <_> - - - - <_> - 7 0 6 15 -1. - <_> - 7 5 6 5 3. - 0 - 0.4095694124698639 - 0.0131073901429772 - -0.7247236967086792 - <_> - - <_> - - - - <_> - 6 6 4 4 -1. - <_> - 6 6 2 2 2. - <_> - 8 8 2 2 2. - 0 - 2.6600460842018947e-005 - -0.0870764032006264 - 0.1110621020197868 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 8 7 2 1 2. - 0 - -1.1234419653192163e-003 - 0.0774560794234276 - -0.1328455954790115 - <_> - - <_> - - - - <_> - 7 7 2 1 -1. - <_> - 7 7 1 1 2. - 1 - 5.6427060626447201e-003 - 0.0484460406005383 - -0.2187103033065796 - <_> - - <_> - - - - <_> - 13 6 4 3 -1. - <_> - 12 7 4 1 3. - 1 - -0.0135915102437139 - 0.0825356394052505 - -0.0227083601057529 - <_> - - <_> - - - - <_> - 5 6 3 4 -1. - <_> - 6 7 1 4 3. - 1 - 0.0115914195775986 - -0.0487906895577908 - 0.1949059069156647 - <_> - - <_> - - - - <_> - 13 0 2 12 -1. - <_> - 13 6 2 6 2. - 0 - -0.1260856986045837 - 0.4181518852710724 - -9.5796259120106697e-003 - <_> - - <_> - - - - <_> - 3 1 1 10 -1. - <_> - 3 6 1 5 2. - 0 - 0.0263312608003616 - 0.0167261492460966 - -0.5749161243438721 - <_> - - <_> - - - - <_> - 10 3 1 8 -1. - <_> - 8 5 1 4 2. - 1 - 0.0410546697676182 - -0.0108851799741387 - 0.3410010039806366 - <_> - - <_> - - - - <_> - 8 3 8 1 -1. - <_> - 10 5 4 1 2. - 1 - 0.0710404366254807 - -0.0139168696478009 - 0.6054865121841431 - <_> - - <_> - - - - <_> - 0 3 18 2 -1. - <_> - 9 3 9 1 2. - <_> - 0 4 9 1 2. - 0 - -0.0168137494474649 - -0.4152989089488983 - 0.0231689400970936 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 5 2 1 4 3. - 1 - -0.0169783309102058 - 0.2203284054994583 - -0.0398988015949726 - <_> - - <_> - - - - <_> - 15 9 2 6 -1. - <_> - 15 9 1 6 2. - 0 - -9.5234332547988743e-005 - 0.0811500027775764 - -0.1343881934881210 - <_> - - <_> - - - - <_> - 1 9 2 6 -1. - <_> - 2 9 1 6 2. - 0 - -0.0171206202358007 - -0.4246828854084015 - 0.0203172601759434 - <_> - - <_> - - - - <_> - 15 9 3 6 -1. - <_> - 16 9 1 6 3. - 0 - 0.0212412606924772 - 0.0140559002757072 - -0.5432608127593994 - <_> - - <_> - - - - <_> - 1 12 14 3 -1. - <_> - 1 13 14 1 3. - 0 - -0.0468163415789604 - 0.3992395997047424 - -0.0228534191846848 - <_> - - <_> - - - - <_> - 15 9 3 6 -1. - <_> - 16 9 1 6 3. - 0 - -0.0220952108502388 - -0.4197512865066528 - 0.0116702402010560 - <_> - - <_> - - - - <_> - 0 3 9 12 -1. - <_> - 0 6 9 6 2. - 0 - 0.2213370054960251 - 0.0133688803762197 - -0.5849164724349976 - <_> - - <_> - - - - <_> - 11 6 3 4 -1. - <_> - 12 7 1 4 3. - 1 - 5.7718330062925816e-003 - -0.0393010601401329 - 0.0762483775615692 - <_> - - <_> - - - - <_> - 7 6 4 3 -1. - <_> - 6 7 4 1 3. - 1 - 9.2696389183402061e-003 - -0.0408090092241764 - 0.2058036029338837 - <_> - - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 14 10 4 1 2. - <_> - 10 11 4 1 2. - 0 - 1.6822699690237641e-003 - -0.0605597309768200 - 0.0894235521554947 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 8 7 1 1 9. - 0 - -0.0152791002765298 - -0.3989386856555939 - 0.0227994602173567 - <_> - - <_> - - - - <_> - 9 2 2 3 -1. - <_> - 9 2 1 3 2. - 0 - -3.1749838963150978e-003 - 0.1322595030069351 - -0.0460287705063820 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 8 1 2 4 2. - 0 - 2.8258180245757103e-003 - -0.1063044965267181 - 0.0968753024935722 - <_> - - <_> - - - - <_> - 14 1 4 2 -1. - <_> - 14 1 4 1 2. - 1 - -5.4384778195526451e-005 - 0.0512824915349483 - -0.0842741429805756 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 5 3 1 4 3. - 1 - 0.0145618002861738 - -0.0433528609573841 - 0.1977739930152893 - <_> - - <_> - - - - <_> - 10 11 2 2 -1. - <_> - 11 11 1 1 2. - <_> - 10 12 1 1 2. - 0 - 4.3724558781832457e-004 - -0.0508190095424652 - 0.1038798987865448 - <_> - - <_> - - - - <_> - 1 8 16 6 -1. - <_> - 1 8 8 3 2. - <_> - 9 11 8 3 2. - 0 - -0.1090848967432976 - -0.3327077925205231 - 0.0268289800733328 - <_> - - <_> - - - - <_> - 15 8 3 7 -1. - <_> - 16 8 1 7 3. - 0 - -7.0241180947050452e-004 - 0.0761685222387314 - -0.0645192116498947 - <_> - - <_> - - - - <_> - 0 8 3 7 -1. - <_> - 1 8 1 7 3. - 0 - -0.0156365707516670 - -0.4480968117713928 - 0.0202762503176928 - <_> - - <_> - - - - <_> - 9 9 2 4 -1. - <_> - 10 9 1 2 2. - <_> - 9 11 1 2 2. - 0 - -0.0118979997932911 - -0.4953711926937103 - 4.4984170235693455e-003 - <_> - - <_> - - - - <_> - 7 9 2 4 -1. - <_> - 7 9 1 2 2. - <_> - 8 11 1 2 2. - 0 - -1.5789919998496771e-003 - 0.1295803040266037 - -0.0726606398820877 - <_> - - <_> - - - - <_> - 3 6 14 9 -1. - <_> - 3 6 7 9 2. - 0 - -0.4996011853218079 - -0.6673018932342529 - 7.9309539869427681e-003 - -1.3140599727630615 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 5 3 6 -1. - <_> - 6 7 3 2 3. - 1 - -0.0789403170347214 - 0.3298887908458710 - -0.1970188021659851 - <_> - - <_> - - - - <_> - 9 0 8 3 -1. - <_> - 11 0 4 3 2. - 0 - -0.0173211302608252 - 0.2198147028684616 - -0.0811920836567879 - <_> - - <_> - - - - <_> - 3 3 8 2 -1. - <_> - 7 3 4 2 2. - 0 - 0.0123552503064275 - -0.3098889887332916 - 0.1442392021417618 - <_> - - <_> - - - - <_> - 1 6 16 8 -1. - <_> - 1 8 16 4 2. - 0 - -0.1042677983641625 - 0.1562684029340744 - -0.1835990995168686 - <_> - - <_> - - - - <_> - 2 7 14 8 -1. - <_> - 2 7 7 4 2. - <_> - 9 11 7 4 2. - 0 - -0.0851838812232018 - -0.2902274131774902 - 0.1274231970310211 - <_> - - <_> - - - - <_> - 9 7 4 6 -1. - <_> - 9 9 4 2 3. - 0 - -0.1335712969303131 - -0.3019841909408569 - -0.0168216507881880 - <_> - - <_> - - - - <_> - 5 6 3 9 -1. - <_> - 5 9 3 3 3. - 0 - 0.2229336053133011 - 0.0184083096683025 - -916.7813110351562500 - <_> - - <_> - - - - <_> - 12 7 6 8 -1. - <_> - 12 7 3 8 2. - 0 - -0.0277230702340603 - 0.0996664837002754 - -0.1188244000077248 - <_> - - <_> - - - - <_> - 9 2 9 4 -1. - <_> - 12 5 3 4 3. - 1 - 0.1818269938230515 - -0.0572614409029484 - 0.4625281095504761 - <_> - - <_> - - - - <_> - 12 7 6 8 -1. - <_> - 12 7 3 8 2. - 0 - 0.0246847905218601 - 0.0688610523939133 - -0.1928416937589645 - <_> - - <_> - - - - <_> - 4 7 3 4 -1. - <_> - 4 9 3 2 2. - 0 - 0.0138146495446563 - -0.0780585184693336 - 0.3078015148639679 - <_> - - <_> - - - - <_> - 8 0 8 6 -1. - <_> - 8 3 8 3 2. - 0 - -0.0245245005935431 - -0.2686735093593597 - 0.0682309865951538 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 7.0112771354615688e-003 - -0.1854297965764999 - 0.1132294982671738 - <_> - - <_> - - - - <_> - 12 9 6 6 -1. - <_> - 12 9 3 6 2. - 0 - -0.1054819002747536 - -0.3402459919452667 - 0.0109034497290850 - <_> - - <_> - - - - <_> - 0 9 6 6 -1. - <_> - 3 9 3 6 2. - 0 - -6.3391570001840591e-003 - 0.1041952967643738 - -0.2051645964384079 - <_> - - <_> - - - - <_> - 15 1 3 14 -1. - <_> - 15 8 3 7 2. - 0 - 0.0789474770426750 - 0.0161181092262268 - -0.4154053926467896 - <_> - - <_> - - - - <_> - 5 1 8 2 -1. - <_> - 5 1 4 1 2. - <_> - 9 2 4 1 2. - 0 - 4.8509850166738033e-003 - 0.0488411597907543 - -0.3838480114936829 - <_> - - <_> - - - - <_> - 5 0 12 5 -1. - <_> - 8 0 6 5 2. - 0 - 0.0458627305924892 - -0.1582973003387451 - 0.1020084023475647 - <_> - - <_> - - - - <_> - 5 0 4 4 -1. - <_> - 5 2 4 2 2. - 0 - 0.0134294098243117 - 0.0545731112360954 - -0.3658663928508759 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 0 1 3 2. - 1 - 0.0191512107849121 - 0.0119114201515913 - -0.4372132122516632 - <_> - - <_> - - - - <_> - 4 0 10 15 -1. - <_> - 9 0 5 15 2. - 0 - -0.2203599959611893 - 0.3832859992980957 - -0.0577213913202286 - <_> - - <_> - - - - <_> - 5 0 12 3 -1. - <_> - 8 0 6 3 2. - 0 - 0.0423834510147572 - -0.0653426200151443 - 0.0784513726830482 - <_> - - <_> - - - - <_> - 0 1 2 14 -1. - <_> - 0 8 2 7 2. - 0 - 0.0305247306823730 - 0.0496221706271172 - -0.3494651019573212 - <_> - - <_> - - - - <_> - 5 4 8 4 -1. - <_> - 5 6 8 2 2. - 0 - 0.0195040404796600 - -0.0683437287807465 - 0.2646135091781616 - <_> - - <_> - - - - <_> - 2 9 14 2 -1. - <_> - 2 10 14 1 2. - 0 - 9.8469397053122520e-003 - -0.0779279768466949 - 0.2089402973651886 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - -0.0321953706443310 - 0.2680011987686157 - -0.0700547993183136 - <_> - - <_> - - - - <_> - 5 6 8 2 -1. - <_> - 5 7 8 1 2. - 0 - -9.8907537758350372e-003 - 0.1219308972358704 - -0.1397545933723450 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 6 1 1 9. - 0 - 0.0164340194314718 - 0.0296364594250917 - -0.2387409955263138 - <_> - - <_> - - - - <_> - 0 2 2 1 -1. - <_> - 1 2 1 1 2. - 0 - -8.7646512838546187e-005 - 0.1085129007697105 - -0.1371634006500244 - <_> - - <_> - - - - <_> - 12 0 4 2 -1. - <_> - 13 1 2 2 2. - 1 - -0.0145368697121739 - -0.3846626877784729 - 0.0236762408167124 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 6 0 3 1 2. - 1 - 0.0117109399288893 - 0.0416956692934036 - -0.3195604085922241 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 6 1 1 9. - 0 - -0.0116417696699500 - -0.2868010997772217 - 0.0145577499642968 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 6 1 1 9. - 0 - 0.0212982799857855 - 0.0255194008350372 - -0.4896689057350159 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - -9.2027969658374786e-003 - -0.6225293874740601 - 8.7586138397455215e-003 - <_> - - <_> - - - - <_> - 4 13 10 2 -1. - <_> - 4 14 10 1 2. - 0 - -0.0201745200902224 - 0.3080742061138153 - -0.0395388789474964 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - 0.0106579503044486 - 0.0104256300255656 - -0.3719728887081146 - <_> - - <_> - - - - <_> - 1 12 14 2 -1. - <_> - 1 13 14 1 2. - 0 - 4.5577301643788815e-003 - -0.1160800009965897 - 0.1050620973110199 - <_> - - <_> - - - - <_> - 10 5 4 6 -1. - <_> - 8 7 4 2 3. - 1 - 0.0598958581686020 - -8.2911262288689613e-003 - 0.0757109001278877 - <_> - - <_> - - - - <_> - 8 5 6 4 -1. - <_> - 10 7 2 4 3. - 1 - -0.0925180464982986 - -0.3972209990024567 - 0.0354158990085125 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 15 9 3 3 2. - 0 - 5.3780227899551392e-003 - -0.0451698005199432 - 0.1016537994146347 - <_> - - <_> - - - - <_> - 7 8 3 2 -1. - <_> - 7 9 3 1 2. - 0 - -2.1006090100854635e-003 - 0.0736289173364639 - -0.1836252957582474 - <_> - - <_> - - - - <_> - 2 8 14 2 -1. - <_> - 2 9 14 1 2. - 0 - 8.4413066506385803e-003 - -0.0506231300532818 - 0.2713204920291901 - <_> - - <_> - - - - <_> - 3 0 3 8 -1. - <_> - 3 4 3 4 2. - 0 - -0.0289131104946136 - -0.2333088964223862 - 0.0561418682336807 - <_> - - <_> - - - - <_> - 0 1 18 8 -1. - <_> - 9 1 9 4 2. - <_> - 0 5 9 4 2. - 0 - 0.0894289314746857 - 0.0421395003795624 - -0.2966344952583313 - <_> - - <_> - - - - <_> - 5 0 8 7 -1. - <_> - 7 0 4 7 2. - 0 - -0.0222117304801941 - 0.3223718106746674 - -0.0411601513624191 - <_> - - <_> - - - - <_> - 10 1 4 1 -1. - <_> - 10 1 2 1 2. - 1 - 3.7851219531148672e-003 - -0.0707370936870575 - 0.1099132969975472 - <_> - - <_> - - - - <_> - 2 0 10 2 -1. - <_> - 2 0 10 1 2. - 1 - 8.3305174484848976e-003 - -0.1936282962560654 - 0.0662610232830048 - <_> - - <_> - - - - <_> - 4 4 10 6 -1. - <_> - 9 4 5 3 2. - <_> - 4 7 5 3 2. - 0 - -0.0234631896018982 - -0.2286916971206665 - 0.0538989901542664 - <_> - - <_> - - - - <_> - 5 8 4 2 -1. - <_> - 5 8 2 1 2. - <_> - 7 9 2 1 2. - 0 - 1.0604270501062274e-003 - -0.0725375488400459 - 0.1586951017379761 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 15 9 3 3 2. - 0 - 0.0659593567252159 - 5.6216111406683922e-003 - -0.3923929035663605 - <_> - - <_> - - - - <_> - 1 4 16 6 -1. - <_> - 1 6 16 2 3. - 0 - -0.0548790097236633 - 0.2852548062801361 - -0.0444187112152576 - <_> - - <_> - - - - <_> - 9 0 1 4 -1. - <_> - 9 1 1 2 2. - 0 - 3.4504090435802937e-003 - 0.0136751402169466 - -0.4430586099624634 - <_> - - <_> - - - - <_> - 0 7 2 3 -1. - <_> - 0 8 2 1 3. - 0 - 7.9733468592166901e-003 - 0.0208843499422073 - -0.5048171281814575 - <_> - - <_> - - - - <_> - 15 5 3 3 -1. - <_> - 14 6 3 1 3. - 1 - 0.0184303596615791 - -0.0379651300609112 - 0.2141716927289963 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - -6.0115829110145569e-003 - -0.3419860005378723 - 0.0299799200147390 - <_> - - <_> - - - - <_> - 6 1 12 3 -1. - <_> - 9 1 6 3 2. - 0 - -0.0407630987465382 - 0.2418240010738373 - -0.0324762500822544 - <_> - - <_> - - - - <_> - 0 1 12 3 -1. - <_> - 3 1 6 3 2. - 0 - -0.0456319898366928 - 0.1947166025638580 - -0.0898651406168938 - <_> - - <_> - - - - <_> - 15 5 3 3 -1. - <_> - 14 6 3 1 3. - 1 - -0.0130249597132206 - 0.1837466955184937 - -0.0397638715803623 - <_> - - <_> - - - - <_> - 0 0 8 7 -1. - <_> - 4 0 4 7 2. - 0 - 0.0353647805750370 - -0.0993380174040794 - 0.1346897035837174 - <_> - - <_> - - - - <_> - 14 4 4 6 -1. - <_> - 14 4 4 3 2. - 1 - 0.1877132058143616 - 0.0116381403058767 - -0.3422963023185730 - <_> - - <_> - - - - <_> - 4 4 6 4 -1. - <_> - 4 4 3 4 2. - 1 - -7.5244922190904617e-003 - -0.2090182006359100 - 0.0642698332667351 - <_> - - <_> - - - - <_> - 4 1 10 8 -1. - <_> - 4 3 10 4 2. - 0 - -0.0345222912728786 - 0.3521693944931030 - -0.0368988513946533 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 8 2 1 2. - 0 - -1.1451860191300511e-003 - 0.0721520334482193 - -0.2084126025438309 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - -0.0108127798885107 - -0.3391103148460388 - 0.0102402996271849 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 6 1 2 1 3. - 1 - 4.4051618315279484e-003 - 0.0448350198566914 - -0.2321110069751740 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 9 0 6 1 2. - <_> - 3 1 6 1 2. - 0 - -6.1400611884891987e-003 - -0.2683916091918945 - 0.0390401408076286 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 2 1 1 2. - <_> - 1 3 1 1 2. - 0 - -2.5988669221987948e-005 - 0.1104065030813217 - -0.0973475277423859 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - -9.7707603126764297e-003 - 0.1318017989397049 - -0.0422173812985420 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - 0.0146375196054578 - -0.0399371199309826 - 0.2667961120605469 - <_> - - <_> - - - - <_> - 2 0 14 4 -1. - <_> - 9 0 7 2 2. - <_> - 2 2 7 2 2. - 0 - 0.0173694007098675 - 0.0430083684623241 - -0.2683846950531006 - <_> - - <_> - - - - <_> - 6 1 3 6 -1. - <_> - 7 2 1 6 3. - 1 - 0.0207157004624605 - -0.0441390685737133 - 0.2528851032257080 - <_> - - <_> - - - - <_> - 16 6 2 4 -1. - <_> - 16 8 2 2 2. - 0 - 4.4260770082473755e-003 - -0.0181482806801796 - 0.0637400820851326 - <_> - - <_> - - - - <_> - 0 6 2 4 -1. - <_> - 0 8 2 2 2. - 0 - -0.0218196604400873 - -0.4530546069145203 - 0.0241426993161440 - <_> - - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 9 3 3 1 2. - 0 - 4.8437709920108318e-003 - 0.0123435202986002 - -0.1561755985021591 - <_> - - <_> - - - - <_> - 6 2 3 2 -1. - <_> - 6 3 3 1 2. - 0 - -2.7822460979223251e-003 - -0.3078184127807617 - 0.0338872000575066 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 0 2 4 2. - 0 - -1.4766600215807557e-003 - 0.0376610010862350 - -0.0371170900762081 - <_> - - <_> - - - - <_> - 1 0 4 4 -1. - <_> - 2 0 2 4 2. - 0 - 0.0203950908035040 - 0.0135211497545242 - -0.7287003993988037 - <_> - - <_> - - - - <_> - 8 13 10 2 -1. - <_> - 13 13 5 1 2. - <_> - 8 14 5 1 2. - 0 - 1.4377470361068845e-003 - -0.0554642193019390 - 0.0552656501531601 - <_> - - <_> - - - - <_> - 4 4 3 3 -1. - <_> - 5 5 1 3 3. - 1 - -0.0298325493931770 - 0.4261128008365631 - -0.0218381006270647 - <_> - - <_> - - - - <_> - 7 7 4 6 -1. - <_> - 8 7 2 6 2. - 0 - 0.0305558592081070 - 0.0176318995654583 - -0.6095407009124756 - <_> - - <_> - - - - <_> - 7 1 8 2 -1. - <_> - 9 3 4 2 2. - 1 - 0.1229958981275559 - -0.0266627203673124 - 0.3695833981037140 - <_> - - <_> - - - - <_> - 4 1 11 4 -1. - <_> - 4 2 11 2 2. - 0 - -0.0229585207998753 - -0.4633212983608246 - 0.0184264499694109 - <_> - - <_> - - - - <_> - 4 12 4 3 -1. - <_> - 5 12 2 3 2. - 0 - -0.0132682900875807 - -0.4380893111228943 - 0.0190128590911627 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - -0.0461827516555786 - -0.7000507116317749 - 0.0115271303802729 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 11 18 2 3. - 0 - 0.0263124592602253 - -0.0715227574110031 - 0.1276880055665970 - <_> - - <_> - - - - <_> - 12 13 1 2 -1. - <_> - 12 14 1 1 2. - 0 - 6.8344743340276182e-005 - -0.0716612488031387 - 0.0649365931749344 - <_> - - <_> - - - - <_> - 8 5 1 8 -1. - <_> - 8 5 1 4 2. - 1 - -0.0374639108777046 - -0.3165304958820343 - 0.0307877492159605 - <_> - - <_> - - - - <_> - 10 2 4 13 -1. - <_> - 11 2 2 13 2. - 0 - 0.0563586615025997 - 8.4295487031340599e-003 - -0.6067206263542175 - <_> - - <_> - - - - <_> - 4 2 4 13 -1. - <_> - 5 2 2 13 2. - 0 - -7.3837172240018845e-003 - 0.0977723896503448 - -0.0991689264774323 - <_> - - <_> - - - - <_> - 11 8 3 3 -1. - <_> - 12 9 1 1 9. - 0 - 2.9623919544974342e-005 - -0.0549541302025318 - 0.0757452771067619 - <_> - - <_> - - - - <_> - 5 0 10 4 -1. - <_> - 5 0 10 2 2. - 1 - 0.1653591990470886 - 0.0260911695659161 - -0.3525250852108002 - <_> - - <_> - - - - <_> - 0 7 18 4 -1. - <_> - 9 7 9 2 2. - <_> - 0 9 9 2 2. - 0 - -0.0830756202340126 - -0.5360965728759766 - 0.0153222400695086 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 1 2. - <_> - 5 9 1 1 2. - 0 - 1.3314849929884076e-003 - -0.0434926301240921 - 0.2146005928516388 - <_> - - <_> - - - - <_> - 7 0 8 3 -1. - <_> - 9 0 4 3 2. - 0 - -0.0240376498550177 - 0.3358427882194519 - -0.0249130893498659 - <_> - - <_> - - - - <_> - 8 6 3 1 -1. - <_> - 9 7 1 1 3. - 1 - 6.2097259797155857e-003 - 0.0491514205932617 - -0.1990129053592682 - <_> - - <_> - - - - <_> - 2 3 14 8 -1. - <_> - 2 5 14 4 2. - 0 - 0.0736415982246399 - -0.0872314572334290 - 0.1094933003187180 - <_> - - <_> - - - - <_> - 8 6 1 8 -1. - <_> - 8 6 1 4 2. - 1 - 0.0289185196161270 - 0.0510564483702183 - -0.2057587951421738 - <_> - - <_> - - - - <_> - 11 8 4 4 -1. - <_> - 11 9 4 2 2. - 0 - 3.7253550253808498e-003 - -0.0367016084492207 - 0.1051134988665581 - <_> - - <_> - - - - <_> - 1 11 4 2 -1. - <_> - 2 11 2 2 2. - 0 - 8.2107484340667725e-003 - 0.0238303001970053 - -0.3580070137977600 - <_> - - <_> - - - - <_> - 10 8 4 2 -1. - <_> - 12 8 2 1 2. - <_> - 10 9 2 1 2. - 0 - 1.8392279744148254e-003 - -0.0447077900171280 - 0.1189830973744392 - <_> - - <_> - - - - <_> - 7 7 3 3 -1. - <_> - 8 8 1 1 9. - 0 - -6.8104080855846405e-003 - -0.1684007942676544 - 0.0483481995761395 - <_> - - <_> - - - - <_> - 13 8 4 2 -1. - <_> - 15 8 2 1 2. - <_> - 13 9 2 1 2. - 0 - 3.3966489136219025e-003 - -0.0308044198900461 - 0.1346226930618286 - <_> - - <_> - - - - <_> - 1 8 4 2 -1. - <_> - 1 8 2 1 2. - <_> - 3 9 2 1 2. - 0 - 3.3915819949470460e-004 - -0.0775286927819252 - 0.1130381003022194 - <_> - - <_> - - - - <_> - 5 3 10 12 -1. - <_> - 5 3 5 12 2. - 0 - -0.1835324019193649 - 0.0953205227851868 - -0.0324969291687012 - <_> - - <_> - - - - <_> - 3 3 10 12 -1. - <_> - 8 3 5 12 2. - 0 - 0.4486036896705627 - 0.0139211900532246 - -0.7289006114006043 - <_> - - <_> - - - - <_> - 5 0 12 8 -1. - <_> - 9 0 4 8 3. - 0 - 0.0888018906116486 - -0.0640209093689919 - 0.0364004485309124 - <_> - - <_> - - - - <_> - 1 0 12 8 -1. - <_> - 5 0 4 8 3. - 0 - 0.1080844029784203 - -0.0643229931592941 - 0.1937687993049622 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - -6.9059031084179878e-003 - -0.3109242916107178 - 0.0205565802752972 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - 2.5598949287086725e-003 - -0.0915503427386284 - 0.0920273736119270 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 1 1 2 2. - 1 - 4.9356167437508702e-004 - -0.0242713205516338 - 0.0657608583569527 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 1 2 1 2. - 1 - 0.0153526701033115 - 0.0173107199370861 - -0.4890041947364807 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 9.7035951912403107e-003 - 8.9735705405473709e-003 - -0.4127190113067627 - <_> - - <_> - - - - <_> - 6 0 4 2 -1. - <_> - 6 1 4 1 2. - 0 - -2.1431730128824711e-003 - -0.1955125033855438 - 0.0380251109600067 - <_> - - <_> - - - - <_> - 9 0 1 2 -1. - <_> - 9 1 1 1 2. - 0 - -5.3084579121787101e-005 - 0.0705076232552528 - -0.0471289381384850 - <_> - - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 9 5 2 2 2. - 1 - 0.0868036672472954 - -0.0163518991321325 - 0.4782052040100098 - <_> - - <_> - - - - <_> - 8 8 6 4 -1. - <_> - 11 8 3 2 2. - <_> - 8 10 3 2 2. - 0 - 0.0110789397731423 - -0.0255244206637144 - 0.1099068000912666 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -6.1349938623607159e-003 - -0.3572841882705689 - 0.0223970897495747 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 2 1 2 3. - 1 - -4.7654299996793270e-003 - -0.0850082710385323 - 0.0223076492547989 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - 0.0122526502236724 - 0.0178576093167067 - -0.4197686016559601 - <_> - - <_> - - - - <_> - 16 1 2 3 -1. - <_> - 15 2 2 1 3. - 1 - 0.0119714401662350 - -0.0210712291300297 - 0.2378973066806793 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 3 2 1 2 3. - 1 - 3.2991201151162386e-003 - -0.0615648999810219 - 0.1329257041215897 - <_> - - <_> - - - - <_> - 14 1 4 2 -1. - <_> - 14 1 4 1 2. - 1 - -0.0184490196406841 - 0.1429833024740219 - -0.0252068098634481 - <_> - - <_> - - - - <_> - 4 1 2 4 -1. - <_> - 4 1 1 4 2. - 1 - -7.4155619367957115e-003 - 0.1799412965774536 - -0.0498336292803288 - <_> - - <_> - - - - <_> - 13 2 5 6 -1. - <_> - 13 5 5 3 2. - 0 - 0.0482065714895725 - 0.0272459890693426 - -0.3813177943229675 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 1.1687170481309295e-003 - 0.0469573400914669 - -0.1817303001880646 - <_> - - <_> - - - - <_> - 2 0 14 9 -1. - <_> - 2 3 14 3 3. - 0 - -0.1361666023731232 - 0.4079889953136444 - -0.0224768593907356 - <_> - - <_> - - - - <_> - 2 1 1 2 -1. - <_> - 2 2 1 1 2. - 0 - -2.3739310563541949e-005 - 0.1014733985066414 - -0.0845235288143158 - <_> - - <_> - - - - <_> - 13 2 5 6 -1. - <_> - 13 5 5 3 2. - 0 - 0.0767729580402374 - 6.4514591358602047e-003 - -0.4604128003120422 - <_> - - <_> - - - - <_> - 0 0 8 9 -1. - <_> - 2 0 4 9 2. - 0 - 0.0634575635194778 - -0.0202501695603132 - 0.3972662985324860 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 6 2 1 2. - 0 - -3.3444589935243130e-003 - 0.1526169925928116 - -0.0526536405086517 - <_> - - <_> - - - - <_> - 9 0 8 5 -1. - <_> - 11 2 4 5 2. - 1 - 0.0572412200272083 - -0.1344574987888336 - 0.0807463303208351 - <_> - - <_> - - - - <_> - 13 2 5 6 -1. - <_> - 13 5 5 3 2. - 0 - -0.0416314415633678 - -0.1082227975130081 - 0.0224370695650578 - <_> - - <_> - - - - <_> - 0 2 5 6 -1. - <_> - 0 5 5 3 2. - 0 - 0.0149030797183514 - 0.0450070798397064 - -0.2200184017419815 - <_> - - <_> - - - - <_> - 3 4 12 10 -1. - <_> - 9 4 6 5 2. - <_> - 3 9 6 5 2. - 0 - 0.2230342030525208 - 0.0124958604574203 - -0.6004509925842285 - <_> - - <_> - - - - <_> - 6 6 2 3 -1. - <_> - 7 6 1 3 2. - 0 - 0.0169060304760933 - 0.0127502698451281 - -0.5323861837387085 - <_> - - <_> - - - - <_> - 11 1 6 6 -1. - <_> - 13 3 2 6 3. - 1 - 0.2447734028100967 - 3.1138889025896788e-003 - -0.5712805986404419 - <_> - - <_> - - - - <_> - 7 1 6 6 -1. - <_> - 5 3 6 2 3. - 1 - -0.1874004006385803 - 0.4374476075172424 - -0.0196508895605803 - <_> - - <_> - - - - <_> - 13 4 1 6 -1. - <_> - 13 6 1 2 3. - 0 - 5.0131231546401978e-003 - -0.0674036368727684 - 0.1013251990079880 - <_> - - <_> - - - - <_> - 8 0 1 2 -1. - <_> - 8 1 1 1 2. - 0 - 1.2101340107619762e-003 - 0.0345095582306385 - -0.2193517982959747 - <_> - - <_> - - - - <_> - 10 13 6 2 -1. - <_> - 13 13 3 1 2. - <_> - 10 14 3 1 2. - 0 - -0.0109212100505829 - -0.1589787006378174 - 6.7669888958334923e-003 - <_> - - <_> - - - - <_> - 2 13 6 2 -1. - <_> - 2 13 3 1 2. - <_> - 5 14 3 1 2. - 0 - 1.0091220028698444e-003 - -0.0808166116476059 - 0.0902162864804268 - <_> - - <_> - - - - <_> - 5 12 9 3 -1. - <_> - 8 12 3 3 3. - 0 - -0.0791598334908485 - -0.4955776035785675 - 9.0577276423573494e-003 - <_> - - <_> - - - - <_> - 1 14 12 1 -1. - <_> - 5 14 4 1 3. - 0 - 0.0231257900595665 - 0.0261550601571798 - -0.2640474140644074 - <_> - - <_> - - - - <_> - 4 0 12 15 -1. - <_> - 8 0 4 15 3. - 0 - 0.2539966106414795 - -0.0417557582259178 - 0.0842676386237144 - <_> - - <_> - - - - <_> - 3 0 8 14 -1. - <_> - 5 0 4 14 2. - 0 - 0.0413385704159737 - -0.0543079786002636 - 0.1632328033447266 - <_> - - <_> - - - - <_> - 10 10 8 4 -1. - <_> - 14 10 4 2 2. - <_> - 10 12 4 2 2. - 0 - 7.9801427200436592e-003 - -0.0563799887895584 - 0.0850874036550522 - <_> - - <_> - - - - <_> - 2 0 12 5 -1. - <_> - 6 0 4 5 3. - 0 - -0.0221821498125792 - 0.1568063944578171 - -0.0526730790734291 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 1 - 8.8383043475914747e-005 - -0.1125876978039742 - 0.0710221901535988 - <_> - - <_> - - - - <_> - 6 0 1 2 -1. - <_> - 6 0 1 1 2. - 1 - -5.0613721832633018e-003 - -0.3759906888008118 - 0.0229838006198406 - <_> - - <_> - - - - <_> - 12 5 2 8 -1. - <_> - 12 5 1 8 2. - 1 - 0.0636510029435158 - 4.1155992075800896e-003 - -0.4183712899684906 - <_> - - <_> - - - - <_> - 6 5 8 2 -1. - <_> - 6 5 8 1 2. - 1 - 0.0198200307786465 - -0.0826675072312355 - 0.0975382328033447 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 1.2445739703252912e-003 - -0.0334467291831970 - 0.1453846991062164 - <_> - - <_> - - - - <_> - 2 4 14 4 -1. - <_> - 2 6 14 2 2. - 0 - -0.1117865964770317 - 0.2502450942993164 - -0.0353329405188560 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -2.4203520733863115e-003 - 0.1733037978410721 - -0.0227931998670101 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - 1.2127320223953575e-004 - -0.0742904022336006 - 0.1193578988313675 - <_> - - <_> - - - - <_> - 12 5 1 4 -1. - <_> - 12 6 1 2 2. - 0 - 8.6516663432121277e-003 - 0.0119632603600621 - -0.2848285138607025 - <_> - - <_> - - - - <_> - 5 5 1 4 -1. - <_> - 5 6 1 2 2. - 0 - 2.5779709176276810e-005 - -0.1187881007790566 - 0.0836797133088112 - <_> - - <_> - - - - <_> - 12 7 3 2 -1. - <_> - 13 8 1 2 3. - 1 - 6.6892090253531933e-003 - -0.0259499493986368 - 0.0986363664269447 - <_> - - <_> - - - - <_> - 3 9 6 4 -1. - <_> - 3 9 3 2 2. - <_> - 6 11 3 2 2. - 0 - 7.3373341001570225e-003 - -0.0568680502474308 - 0.1380600035190582 - <_> - - <_> - - - - <_> - 9 12 6 1 -1. - <_> - 9 12 3 1 2. - 0 - -4.8734410665929317e-003 - 0.0774335265159607 - -0.0352366790175438 - <_> - - <_> - - - - <_> - 7 3 4 1 -1. - <_> - 8 3 2 1 2. - 0 - 6.4124629716388881e-005 - -0.1245692968368530 - 0.0716082230210304 - <_> - - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 6 13 4 2 2. - 0 - -0.0303157493472099 - -0.1957962065935135 - 0.0308573506772518 - <_> - - <_> - - - - <_> - 9 0 6 2 -1. - <_> - 9 0 3 2 2. - 1 - -0.0350410714745522 - 0.1788015067577362 - -0.0489667803049088 - <_> - - <_> - - - - <_> - 7 11 10 4 -1. - <_> - 7 11 5 4 2. - 0 - 0.0419709086418152 - -0.0401918590068817 - 0.1294634044170380 - <_> - - <_> - - - - <_> - 1 11 15 4 -1. - <_> - 6 11 5 4 3. - 0 - -0.0408818498253822 - 0.1301825046539307 - -0.0782763436436653 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 7 1 6 2 2. - 0 - -5.2412762306630611e-003 - -0.1829565018415451 - 0.0371690504252911 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - 5.0555911002447829e-005 - -0.0837283581495285 - 0.0939808636903763 - <_> - - <_> - - - - <_> - 8 10 3 2 -1. - <_> - 9 10 1 2 3. - 0 - 0.0165926907211542 - 5.7793757878243923e-003 - -0.8148245811462402 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 0 9 2 1 3. - 0 - 6.3152369111776352e-003 - 0.0213363692164421 - -0.3248454928398132 - <_> - - <_> - - - - <_> - 11 8 4 4 -1. - <_> - 11 9 4 2 2. - 0 - -0.0568882115185261 - -0.4159530103206635 - 3.6880860570818186e-003 - <_> - - <_> - - - - <_> - 3 8 4 4 -1. - <_> - 3 9 4 2 2. - 0 - 3.4150490537285805e-003 - -0.0535964109003544 - 0.1404040008783341 - <_> - - <_> - - - - <_> - 2 7 16 2 -1. - <_> - 6 7 8 2 2. - 0 - 0.1477995961904526 - 4.9799410626292229e-003 - -0.6226087212562561 - <_> - - <_> - - - - <_> - 0 7 16 2 -1. - <_> - 4 7 8 2 2. - 0 - -0.0695117115974426 - -0.4330480098724365 - 0.0189262200146914 - <_> - - <_> - - - - <_> - 12 10 4 2 -1. - <_> - 14 10 2 1 2. - <_> - 12 11 2 1 2. - 0 - 1.6076939646154642e-003 - -0.0367941483855248 - 0.0683272704482079 - <_> - - <_> - - - - <_> - 2 10 4 2 -1. - <_> - 2 10 2 1 2. - <_> - 4 11 2 1 2. - 0 - 1.5456780092790723e-003 - -0.0668036863207817 - 0.1335151940584183 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 0.0159673895686865 - 6.9505311548709869e-003 - -0.4713656008243561 - <_> - - <_> - - - - <_> - 6 4 6 9 -1. - <_> - 8 7 2 3 9. - 0 - 0.2871150970458984 - -0.0153487697243690 - 0.4745875895023346 - <_> - - <_> - - - - <_> - 8 0 4 15 -1. - <_> - 8 5 4 5 3. - 0 - 0.3409349918365479 - 5.4452791810035706e-003 - -0.7917565107345581 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - 6.6727129742503166e-003 - 0.0294574107974768 - -0.2547746896743774 - <_> - - <_> - - - - <_> - 6 1 7 2 -1. - <_> - 6 2 7 1 2. - 0 - -2.6719029992818832e-003 - -0.1707005947828293 - 0.0357673391699791 - <_> - - <_> - - - - <_> - 0 7 6 2 -1. - <_> - 0 7 3 1 2. - <_> - 3 8 3 1 2. - 0 - 5.2617820911109447e-003 - -0.0336550511419773 - 0.2133263945579529 - <_> - - <_> - - - - <_> - 12 3 5 3 -1. - <_> - 11 4 5 1 3. - 1 - 8.1078894436359406e-003 - 0.0301098693162203 - -0.0460237488150597 - <_> - - <_> - - - - <_> - 6 3 3 5 -1. - <_> - 7 4 1 5 3. - 1 - 0.0167319998145103 - -0.0437199696898460 - 0.1943642944097519 - <_> - - <_> - - - - <_> - 7 8 4 3 -1. - <_> - 7 9 4 1 3. - 0 - 0.0191528107970953 - 0.0174971204251051 - -0.4282760024070740 - <_> - - <_> - - - - <_> - 2 1 6 14 -1. - <_> - 2 1 3 7 2. - <_> - 5 8 3 7 2. - 0 - -0.1417188942432404 - -0.3899391889572144 - 0.0170895904302597 - <_> - - <_> - - - - <_> - 10 1 8 9 -1. - <_> - 10 1 4 9 2. - 0 - 3.8122260011732578e-003 - -0.1158609017729759 - 0.0506625697016716 - <_> - - <_> - - - - <_> - 7 7 4 4 -1. - <_> - 8 7 2 4 2. - 0 - -0.0170307997614145 - -0.5399131178855896 - 0.0119414301589131 - <_> - - <_> - - - - <_> - 9 9 2 4 -1. - <_> - 10 9 1 2 2. - <_> - 9 11 1 2 2. - 0 - -8.8250916451215744e-003 - -0.3324021995067596 - 8.3178747445344925e-003 - <_> - - <_> - - - - <_> - 3 9 4 2 -1. - <_> - 3 9 2 1 2. - <_> - 5 10 2 1 2. - 0 - -5.9308991767466068e-003 - 0.2211183011531830 - -0.0314335711300373 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - -3.7457819562405348e-003 - -0.1030357033014298 - 0.0240999702364206 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - 4.8495861701667309e-003 - 0.0257306694984436 - -0.2665663063526154 - <_> - - <_> - - - - <_> - 2 0 16 9 -1. - <_> - 6 0 8 9 2. - 0 - 0.3076910078525543 - 0.0261018890887499 - -0.1869533061981201 - <_> - - <_> - - - - <_> - 1 1 8 4 -1. - <_> - 5 1 4 4 2. - 0 - 0.0117959501221776 - -0.1118796989321709 - 0.0688933432102203 - <_> - - <_> - - - - <_> - 9 3 2 6 -1. - <_> - 7 5 2 2 3. - 1 - -0.1020568981766701 - 0.1641097962856293 - -3.9911000058054924e-003 - <_> - - <_> - - - - <_> - 9 3 6 2 -1. - <_> - 11 5 2 2 3. - 1 - 0.1050693020224571 - -0.0170984808355570 - 0.4288966059684753 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - 4.8301670176442713e-005 - -0.0416239388287067 - 0.0495718717575073 - <_> - - <_> - - - - <_> - 2 3 3 2 -1. - <_> - 3 4 1 2 3. - 1 - 2.2682799026370049e-003 - -0.0688075497746468 - 0.1021673977375031 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 15 0 1 2 2. - 1 - -6.0366461984813213e-003 - -0.1738830953836441 - 0.0198664106428623 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 2 1 2. - 1 - 4.9747680313885212e-003 - 0.0331093408167362 - -0.2326231002807617 - <_> - - <_> - - - - <_> - 10 0 1 8 -1. - <_> - 8 2 1 4 2. - 1 - -0.0342620797455311 - -0.2156396061182022 - 0.0115074804052711 - -1.2872380018234253 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 12 8 -1. - <_> - 3 4 12 4 2. - 0 - 0.0882937535643578 - -0.2489404976367950 - 0.2646526992321014 - <_> - - <_> - - - - <_> - 8 0 9 2 -1. - <_> - 11 0 3 2 3. - 0 - -0.0165174994617701 - 0.1308764964342117 - -0.0483017005026340 - <_> - - <_> - - - - <_> - 4 5 9 6 -1. - <_> - 4 8 9 3 2. - 0 - 0.2429573982954025 - 2.4608039529994130e-004 - -1.2118969726562500e+003 - <_> - - <_> - - - - <_> - 8 0 9 2 -1. - <_> - 11 0 3 2 3. - 0 - 0.0178556293249130 - -0.0218822807073593 - 0.0629134327173233 - <_> - - <_> - - - - <_> - 1 0 9 2 -1. - <_> - 4 0 3 2 3. - 0 - -0.0112768700346351 - 0.1816959977149963 - -0.2307166010141373 - <_> - - <_> - - - - <_> - 7 0 8 4 -1. - <_> - 7 2 8 2 2. - 0 - 0.0232120305299759 - 0.1088896989822388 - -0.2810558974742889 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 6 7 3 1 3. - 1 - -0.0334626212716103 - 0.4264681041240692 - -0.1128323003649712 - <_> - - <_> - - - - <_> - 2 0 14 6 -1. - <_> - 9 0 7 3 2. - <_> - 2 3 7 3 2. - 0 - 0.0309944301843643 - 0.0578055083751678 - -0.3916975855827332 - <_> - - <_> - - - - <_> - 0 0 4 14 -1. - <_> - 0 7 4 7 2. - 0 - -0.1508056074380875 - -0.4463602006435394 - 0.0689948424696922 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 9 5 9 5 2. - <_> - 0 10 9 5 2. - 0 - 0.1966764926910400 - 0.0504155196249485 - -0.5162950158119202 - <_> - - <_> - - - - <_> - 5 7 1 3 -1. - <_> - 5 8 1 1 3. - 0 - 2.2066079545766115e-003 - -0.0707260966300964 - 0.2782576084136963 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 3 7 12 2 2. - 0 - -0.1075704991817474 - 0.2446808069944382 - -0.0725844725966454 - <_> - - <_> - - - - <_> - 2 5 14 6 -1. - <_> - 2 7 14 2 3. - 0 - 0.0601789988577366 - -0.0937738493084908 - 0.2090716958045960 - <_> - - <_> - - - - <_> - 11 2 6 6 -1. - <_> - 11 5 6 3 2. - 0 - 0.0721643567085266 - 0.0246197003871202 - -0.3774946033954620 - <_> - - <_> - - - - <_> - 6 0 2 2 -1. - <_> - 6 1 2 1 2. - 0 - -1.8397889798507094e-003 - -0.3659551143646240 - 0.0356928594410419 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 3.3323359675705433e-003 - 0.0274193398654461 - -0.2183060944080353 - <_> - - <_> - - - - <_> - 0 0 9 15 -1. - <_> - 3 5 3 5 9. - 0 - 0.2554239928722382 - 0.0424718111753464 - -0.4045555889606476 - <_> - - <_> - - - - <_> - 10 8 5 3 -1. - <_> - 10 9 5 1 3. - 0 - 8.3238910883665085e-003 - -0.0382980890572071 - 0.1997260004281998 - <_> - - <_> - - - - <_> - 6 0 3 4 -1. - <_> - 6 1 3 2 2. - 0 - 3.6837169900536537e-003 - 0.0516507886350155 - -0.3148872852325440 - <_> - - <_> - - - - <_> - 7 9 8 6 -1. - <_> - 7 9 4 6 2. - 0 - 0.1580109000205994 - 7.9839415848255157e-003 - -0.6459161043167114 - <_> - - <_> - - - - <_> - 4 9 8 5 -1. - <_> - 8 9 4 5 2. - 0 - 0.1195484027266502 - 0.0303646996617317 - -0.4835926890373230 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 16 1 1 1 2. - 0 - -8.1479396612849087e-005 - 0.0919145867228508 - -0.1064620986580849 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 2.5267980527132750e-003 - 0.0452573001384735 - -0.3438262939453125 - <_> - - <_> - - - - <_> - 9 0 6 8 -1. - <_> - 11 2 2 8 3. - 1 - 0.1789875030517578 - 0.0144175197929144 - -0.5026544928550720 - <_> - - <_> - - - - <_> - 9 8 1 6 -1. - <_> - 9 8 1 3 2. - 1 - -0.0395551882684231 - -0.3588069081306458 - 0.0342500805854797 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 0 11 18 1 2. - 0 - 7.6789730228483677e-003 - -0.1114436984062195 - 0.1351636946201325 - <_> - - <_> - - - - <_> - 3 8 5 3 -1. - <_> - 3 9 5 1 3. - 0 - 0.0105727799236774 - -0.0437579788267612 - 0.3159857988357544 - <_> - - <_> - - - - <_> - 1 1 16 4 -1. - <_> - 5 1 8 4 2. - 0 - 0.0357067584991455 - -0.1592438071966171 - 0.0833674669265747 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 9 0 3 2 2. - 0 - 0.0151766203343868 - -0.1096644029021263 - 0.1435447037220001 - <_> - - <_> - - - - <_> - 14 4 4 7 -1. - <_> - 15 5 2 7 2. - 1 - -0.0519099794328213 - 0.1371318995952606 - -0.0289334002882242 - <_> - - <_> - - - - <_> - 4 4 7 4 -1. - <_> - 3 5 7 2 2. - 1 - -0.0249809008091688 - 0.1281910985708237 - -0.1016400977969170 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 8 3 6 1 2. - 0 - 5.1697930321097374e-003 - 0.0397001393139362 - -0.1693688929080963 - <_> - - <_> - - - - <_> - 4 2 10 2 -1. - <_> - 4 2 5 1 2. - <_> - 9 3 5 1 2. - 0 - -4.7851498238742352e-003 - -0.2804721891880035 - 0.0424798987805843 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 16 11 2 1 2. - 1 - -0.0114343902096152 - -0.3007369041442871 - 0.0279115606099367 - <_> - - <_> - - - - <_> - 2 12 14 3 -1. - <_> - 2 13 14 1 3. - 0 - 0.0310384295880795 - -0.0384156294167042 - 0.3191024065017700 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 16 12 1 2 2. - 0 - 1.9539990462362766e-003 - 0.0490082204341888 - -0.2434009015560150 - <_> - - <_> - - - - <_> - 0 12 2 2 -1. - <_> - 1 12 1 2 2. - 0 - 1.5783209819346666e-003 - 0.0490619093179703 - -0.2172895967960358 - <_> - - <_> - - - - <_> - 10 7 6 6 -1. - <_> - 12 9 2 2 9. - 0 - -0.1410228013992310 - 0.1238534972071648 - -0.0194560904055834 - <_> - - <_> - - - - <_> - 2 7 6 6 -1. - <_> - 4 9 2 2 9. - 0 - 0.0257594697177410 - -0.0577305890619755 - 0.2235246002674103 - <_> - - <_> - - - - <_> - 11 5 1 9 -1. - <_> - 8 8 1 3 3. - 1 - -0.1394301950931549 - -0.4331279098987579 - 5.1124738529324532e-003 - <_> - - <_> - - - - <_> - 0 5 18 4 -1. - <_> - 0 5 9 2 2. - <_> - 9 7 9 2 2. - 0 - -0.0970044583082199 - -0.5865799188613892 - 0.0171818397939205 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 16 4 1 1 3. - 1 - 9.5027927309274673e-003 - -0.0287947598844767 - 0.2973892986774445 - <_> - - <_> - - - - <_> - 4 5 6 4 -1. - <_> - 4 5 3 4 2. - 1 - -0.0262469295412302 - -0.2123412042856216 - 0.0494075715541840 - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - -0.0285178907215595 - -0.4101974964141846 - 0.0107241403311491 - <_> - - <_> - - - - <_> - 1 3 3 1 -1. - <_> - 2 4 1 1 3. - 1 - -7.9501066356897354e-003 - 0.2974866032600403 - -0.0357652083039284 - <_> - - <_> - - - - <_> - 0 1 18 4 -1. - <_> - 9 1 9 2 2. - <_> - 0 3 9 2 2. - 0 - -0.0294742994010448 - -0.2744587957859039 - 0.0378581508994102 - <_> - - <_> - - - - <_> - 1 13 6 2 -1. - <_> - 3 13 2 2 3. - 0 - -0.0197004098445177 - -0.3731251060962677 - 0.0246061906218529 - <_> - - <_> - - - - <_> - 11 5 1 9 -1. - <_> - 8 8 1 3 3. - 1 - 0.0202972404658794 - -0.0114561002701521 - 0.1300147026777268 - <_> - - <_> - - - - <_> - 7 5 9 1 -1. - <_> - 10 8 3 1 3. - 1 - -0.0733654201030731 - -0.3339675962924957 - 0.0288594998419285 - <_> - - <_> - - - - <_> - 1 9 16 2 -1. - <_> - 1 10 16 1 2. - 0 - 6.3272351399064064e-003 - -0.0767316669225693 - 0.1508390009403229 - <_> - - <_> - - - - <_> - 1 7 16 8 -1. - <_> - 1 9 16 4 2. - 0 - -0.1366160064935684 - 0.1624336987733841 - -0.0956437736749649 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 1 2 2 2. - 1 - -0.0107580302283168 - -0.2373815029859543 - 0.0315589606761932 - <_> - - <_> - - - - <_> - 3 1 11 2 -1. - <_> - 3 1 11 1 2. - 1 - 0.0666851326823235 - 0.0154138403013349 - -0.6251338124275208 - <_> - - <_> - - - - <_> - 5 3 9 6 -1. - <_> - 8 5 3 2 9. - 0 - 0.3032520115375519 - -0.0291348807513714 - 0.3611342906951904 - <_> - - <_> - - - - <_> - 6 0 2 4 -1. - <_> - 5 1 2 2 2. - 1 - -0.0158231593668461 - -0.4098587930202484 - 0.0231184493750334 - <_> - - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 14 3 3 1 3. - 1 - 0.0253745596855879 - -0.0204721000045538 - 0.2705202996730804 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 3 1 3 3. - 1 - 0.0163469407707453 - -0.0353308208286762 - 0.2803629040718079 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 10 3 2 2 2. - 0 - 3.4061360638588667e-003 - -0.1116679012775421 - 0.0920868366956711 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 9 1 6 6 2. - 0 - 0.2318589985370636 - -0.0533741116523743 - 0.2265139967203140 - <_> - - <_> - - - - <_> - 7 5 4 6 -1. - <_> - 9 5 2 3 2. - <_> - 7 8 2 3 2. - 0 - 8.7358150631189346e-003 - 0.0622405707836151 - -0.1609788984060288 - <_> - - <_> - - - - <_> - 3 6 12 6 -1. - <_> - 3 6 6 3 2. - <_> - 9 9 6 3 2. - 0 - 0.0479816384613514 - 0.0325308404862881 - -0.2702659070491791 - <_> - - <_> - - - - <_> - 7 4 4 6 -1. - <_> - 7 7 4 3 2. - 0 - 0.0325526595115662 - -0.0267996098846197 - 0.3613330125808716 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 8 6 1 2 2. - 1 - -5.2017602138221264e-003 - -0.2269695997238159 - 0.0536908693611622 - <_> - - <_> - - - - <_> - 2 12 14 2 -1. - <_> - 2 13 14 1 2. - 0 - -0.0520097799599171 - 0.5167415738105774 - -0.0205913390964270 - <_> - - <_> - - - - <_> - 2 8 6 7 -1. - <_> - 4 8 2 7 3. - 0 - -5.0841891206800938e-003 - 0.0838762521743774 - -0.1215421035885811 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 1 2 2 2. - 1 - 5.3035072050988674e-003 - 0.0314468108117580 - -0.1233906000852585 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 4 7 1 1 9. - 0 - 4.5940061099827290e-003 - -0.0627442970871925 - 0.1418178975582123 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 9 0 6 1 2. - <_> - 3 1 6 1 2. - 0 - 6.9754808209836483e-003 - 0.0279876105487347 - -0.3049218058586121 - <_> - - <_> - - - - <_> - 0 13 4 2 -1. - <_> - 1 13 2 2 2. - 0 - -3.3900879789143801e-003 - -0.2176389992237091 - 0.0362194888293743 - <_> - - <_> - - - - <_> - 13 6 3 5 -1. - <_> - 14 7 1 5 3. - 1 - 9.5793427899479866e-003 - -0.0433258786797524 - 0.1642747074365616 - <_> - - <_> - - - - <_> - 7 4 6 3 -1. - <_> - 9 6 2 3 3. - 1 - -0.0550329610705376 - -0.2693688869476318 - 0.0320559591054916 - <_> - - <_> - - - - <_> - 1 5 16 6 -1. - <_> - 1 7 16 2 3. - 0 - -0.0955175980925560 - 0.2161073982715607 - -0.0582397803664207 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 10 2 1 2. - 0 - -8.8512140791863203e-004 - 0.0752959027886391 - -0.1217793971300125 - <_> - - <_> - - - - <_> - 8 9 8 2 -1. - <_> - 12 9 4 1 2. - <_> - 8 10 4 1 2. - 0 - 8.4586488083004951e-003 - -0.0455720499157906 - 0.2856633067131043 - <_> - - <_> - - - - <_> - 0 0 12 15 -1. - <_> - 3 0 6 15 2. - 0 - 0.1383175998926163 - -0.0303479190915823 - 0.2803717851638794 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 10 3 2 2 2. - 0 - -8.5889035835862160e-003 - 0.2595542967319489 - -0.0248014405369759 - <_> - - <_> - - - - <_> - 4 3 4 2 -1. - <_> - 6 3 2 2 2. - 0 - 2.6830460410565138e-003 - -0.1356775015592575 - 0.0750199928879738 - <_> - - <_> - - - - <_> - 6 0 9 9 -1. - <_> - 9 0 3 9 3. - 0 - 0.0561147592961788 - -0.1331470012664795 - 0.0675303786993027 - <_> - - <_> - - - - <_> - 0 2 8 2 -1. - <_> - 2 2 4 2 2. - 0 - 6.4768209122121334e-003 - -0.0428345091640949 - 0.2283774018287659 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 1 - 7.5396071188151836e-003 - 0.0175717808306217 - -0.4712331891059876 - <_> - - <_> - - - - <_> - 8 1 2 8 -1. - <_> - 8 5 2 4 2. - 0 - -0.0322765894234180 - 0.1667342931032181 - -0.0572832897305489 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 16 3 1 2 2. - 1 - 8.1356316804885864e-003 - 0.0272685103118420 - -0.1111190989613533 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 2 1 2. - 1 - 0.0104770399630070 - 0.0260039307177067 - -0.3676153123378754 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 13 3 4 1 3. - 1 - 0.0309956707060337 - -0.0286454297602177 - 0.3315067887306213 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 5 3 4 1 2. - <_> - 9 4 4 1 2. - 0 - -7.0666121318936348e-003 - -0.4054433107376099 - 0.0251925494521856 - <_> - - <_> - - - - <_> - 13 1 5 3 -1. - <_> - 12 2 5 1 3. - 1 - -3.6987180355936289e-003 - 0.0631407573819160 - -0.0327784791588783 - <_> - - <_> - - - - <_> - 5 1 3 5 -1. - <_> - 6 2 1 5 3. - 1 - -0.0306662693619728 - 0.3254658877849579 - -0.0277023594826460 - <_> - - <_> - - - - <_> - 7 0 9 6 -1. - <_> - 7 3 9 3 2. - 0 - 0.0788802430033684 - 0.0153381098061800 - -0.2206629961729050 - <_> - - <_> - - - - <_> - 2 0 9 6 -1. - <_> - 2 3 9 3 2. - 0 - -0.0326623804867268 - -0.2611115872859955 - 0.0396143011748791 - <_> - - <_> - - - - <_> - 4 0 10 8 -1. - <_> - 4 4 10 4 2. - 0 - -0.2029986977577210 - 0.4685623049736023 - -0.0211902894079685 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -1.3156479690223932e-003 - 0.0511390715837479 - -0.1778022050857544 - <_> - - <_> - - - - <_> - 9 0 6 8 -1. - <_> - 11 2 2 8 3. - 1 - 0.2458626925945282 - 2.0771999843418598e-003 - -0.7230259180068970 - <_> - - <_> - - - - <_> - 5 6 4 3 -1. - <_> - 4 7 4 1 3. - 1 - 9.6061620861291885e-003 - -0.0438566096127033 - 0.2025624066591263 - <_> - - <_> - - - - <_> - 9 0 6 8 -1. - <_> - 11 2 2 8 3. - 1 - 0.0928886383771896 - 0.0257623400539160 - -0.0818297490477562 - <_> - - <_> - - - - <_> - 1 11 6 4 -1. - <_> - 1 11 3 2 2. - <_> - 4 13 3 2 2. - 0 - 1.8360089743509889e-003 - -0.1065806970000267 - 0.0778321474790573 - <_> - - <_> - - - - <_> - 9 0 6 8 -1. - <_> - 11 2 2 8 3. - 1 - -0.0101813804358244 - -0.0704501271247864 - 0.0211151205003262 - <_> - - <_> - - - - <_> - 9 0 8 6 -1. - <_> - 7 2 8 2 3. - 1 - 0.2291380017995834 - 0.0105785802006722 - -0.8155276179313660 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 15 1 2 4 2. - 1 - -0.0212600603699684 - -0.2375449985265732 - 0.0127379801124334 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 4 2 3 2 2. - 0 - 1.9725849851965904e-003 - 0.0572128705680370 - -0.1377062946557999 - <_> - - <_> - - - - <_> - 13 0 3 1 -1. - <_> - 14 0 1 1 3. - 0 - -4.6411700168391690e-005 - 0.0502910390496254 - -0.0575029999017715 - <_> - - <_> - - - - <_> - 0 7 11 8 -1. - <_> - 0 11 11 4 2. - 0 - -0.3620679974555969 - -0.7733700871467590 - 0.0101746097207069 - <_> - - <_> - - - - <_> - 1 9 17 4 -1. - <_> - 1 11 17 2 2. - 0 - -0.1428683996200562 - 0.3628562092781067 - -0.0296504106372595 - <_> - - <_> - - - - <_> - 1 6 16 6 -1. - <_> - 1 8 16 2 3. - 0 - -0.0601753890514374 - 0.1093005985021591 - -0.0907286480069160 - <_> - - <_> - - - - <_> - 13 0 3 1 -1. - <_> - 14 0 1 1 3. - 0 - 4.7640471166232601e-005 - -0.0555778108537197 - 0.0779178664088249 - <_> - - <_> - - - - <_> - 2 0 3 1 -1. - <_> - 3 0 1 1 3. - 0 - -5.4806099797133356e-005 - 0.0850946307182312 - -0.0902227982878685 - <_> - - <_> - - - - <_> - 5 2 9 6 -1. - <_> - 5 4 9 2 3. - 0 - -8.2555618137121201e-003 - 0.1677850037813187 - -0.0391292311251163 - <_> - - <_> - - - - <_> - 7 1 3 2 -1. - <_> - 7 2 3 1 2. - 0 - -2.4975580163300037e-003 - -0.2542758882045746 - 0.0310085993260145 - <_> - - <_> - - - - <_> - 6 11 12 4 -1. - <_> - 6 13 12 2 2. - 0 - 0.1691354960203171 - 7.6711731962859631e-003 - -0.4777897894382477 - <_> - - <_> - - - - <_> - 0 0 16 2 -1. - <_> - 0 0 8 1 2. - <_> - 8 1 8 1 2. - 0 - 8.0642458051443100e-003 - 0.0320016816258430 - -0.2201628983020783 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - 5.8364861615700647e-005 - -0.0927060320973396 - 0.0926686972379684 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - -0.0242639407515526 - 0.3061330020427704 - -0.0236746892333031 - <_> - - <_> - - - - <_> - 12 0 6 2 -1. - <_> - 14 2 2 2 3. - 1 - 0.1245393976569176 - -1.1398720089346170e-003 - 0.6500102877616882 - <_> - - <_> - - - - <_> - 6 0 2 6 -1. - <_> - 4 2 2 2 3. - 1 - -0.0308606103062630 - -0.2340030968189240 - 0.0343167595565319 - <_> - - <_> - - - - <_> - 15 8 3 6 -1. - <_> - 16 10 1 2 9. - 0 - 0.0127543099224567 - -0.0391327291727066 - 0.0949018001556396 - <_> - - <_> - - - - <_> - 0 8 3 6 -1. - <_> - 1 10 1 2 9. - 0 - 0.0376567393541336 - 0.0261963903903961 - -0.3091090917587280 - <_> - - <_> - - - - <_> - 14 4 3 3 -1. - <_> - 13 5 3 1 3. - 1 - -0.0312218796461821 - -0.2861835062503815 - 5.0922371447086334e-003 - <_> - - <_> - - - - <_> - 4 4 3 3 -1. - <_> - 5 5 1 3 3. - 1 - -0.0134689500555396 - 0.2125725001096726 - -0.0359573401510715 - <_> - - <_> - - - - <_> - 11 9 3 6 -1. - <_> - 12 9 1 6 3. - 0 - -7.5858170166611671e-003 - -0.1451039016246796 - 0.0284003801643848 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 12 3 3 2 3. - 1 - -0.0325641296803951 - 0.2121015936136246 - -0.0337405614554882 - <_> - - <_> - - - - <_> - 15 4 1 8 -1. - <_> - 13 6 1 4 2. - 1 - -0.0478576682507992 - -0.2893986105918884 - 8.2710552960634232e-003 - <_> - - <_> - - - - <_> - 3 4 8 1 -1. - <_> - 5 6 4 1 2. - 1 - 0.0408857800066471 - 0.0154061401262879 - -0.5273528099060059 - <_> - - <_> - - - - <_> - 6 0 6 6 -1. - <_> - 8 0 2 6 3. - 0 - -0.0111554395407438 - 0.2048159986734390 - -0.0385781601071358 - <_> - - <_> - - - - <_> - 8 3 10 1 -1. - <_> - 8 3 5 1 2. - 1 - -0.0436525382101536 - -0.5605732202529907 - 0.0155440401285887 - <_> - - <_> - - - - <_> - 8 8 3 5 -1. - <_> - 9 8 1 5 3. - 0 - -0.0237427093088627 - -0.7845674157142639 - 3.1750639900565147e-003 - <_> - - <_> - - - - <_> - 7 2 8 2 -1. - <_> - 9 4 4 2 2. - 1 - 0.1069891974329948 - -0.0261800494045019 - 0.2701598107814789 - <_> - - <_> - - - - <_> - 11 2 3 13 -1. - <_> - 12 2 1 13 3. - 0 - 0.0378550700843334 - 6.5697189420461655e-003 - -0.4029164910316467 - <_> - - <_> - - - - <_> - 4 2 3 13 -1. - <_> - 5 2 1 13 3. - 0 - -0.0300023406744003 - -0.3640936017036438 - 0.0191395506262779 - <_> - - <_> - - - - <_> - 17 7 1 6 -1. - <_> - 17 9 1 2 3. - 0 - 0.0177240408957005 - 0.0121768601238728 - -0.3674328923225403 - <_> - - <_> - - - - <_> - 0 7 1 6 -1. - <_> - 0 9 1 2 3. - 0 - -7.9289022833108902e-003 - -0.2345584928989410 - 0.0312652811408043 - <_> - - <_> - - - - <_> - 8 7 8 4 -1. - <_> - 12 7 4 2 2. - <_> - 8 9 4 2 2. - 0 - -0.0411901511251926 - 0.1780917942523956 - -0.0286607407033443 - <_> - - <_> - - - - <_> - 2 7 8 4 -1. - <_> - 2 7 4 2 2. - <_> - 6 9 4 2 2. - 0 - 0.0104142995551229 - -0.0461356192827225 - 0.2206518948078156 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 9 5 6 2 2. - <_> - 3 7 6 2 2. - 0 - -0.0623511299490929 - -0.6013355255126953 - 0.0119700403884053 - <_> - - <_> - - - - <_> - 7 12 3 3 -1. - <_> - 8 13 1 1 9. - 0 - 0.0107688298448920 - -0.0378835014998913 - 0.1919409930706024 - <_> - - <_> - - - - <_> - 8 12 2 3 -1. - <_> - 8 13 2 1 3. - 0 - -1.5350959729403257e-003 - 0.1343532949686050 - -0.0599097199738026 - <_> - - <_> - - - - <_> - 5 0 6 3 -1. - <_> - 5 1 6 1 3. - 0 - -4.9390122294425964e-003 - -0.2264474928379059 - 0.0331381000578403 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - 2.9866439290344715e-003 - 0.0395365394651890 - -0.1798572987318039 - <_> - - <_> - - - - <_> - 3 4 4 1 -1. - <_> - 5 4 2 1 2. - 0 - 7.1302180003840476e-005 - -0.1217418983578682 - 0.0578663200139999 - <_> - - <_> - - - - <_> - 6 0 9 1 -1. - <_> - 9 0 3 1 3. - 0 - 0.0141327697783709 - -0.0697263032197952 - 0.1077838987112045 - <_> - - <_> - - - - <_> - 6 8 4 2 -1. - <_> - 6 8 4 1 2. - 1 - -8.7037831544876099e-003 - 0.1353736072778702 - -0.0617493800818920 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 7 1 4 2. - 1 - -0.0396597199141979 - 0.2866846919059753 - -4.0120128542184830e-003 - <_> - - <_> - - - - <_> - 6 7 4 2 -1. - <_> - 6 7 4 1 2. - 1 - 0.0165502801537514 - -0.0549145303666592 - 0.1501951068639755 - <_> - - <_> - - - - <_> - 4 1 12 4 -1. - <_> - 7 1 6 4 2. - 0 - 0.0182081703096628 - -0.0716051831841469 - 0.0196856409311295 - <_> - - <_> - - - - <_> - 2 1 12 4 -1. - <_> - 5 1 6 4 2. - 0 - -0.0295192506164312 - 0.2099193036556244 - -0.0432162992656231 - <_> - - <_> - - - - <_> - 5 1 12 3 -1. - <_> - 9 1 4 3 3. - 0 - -0.0212850607931614 - 0.1869163960218430 - -0.0237888600677252 - <_> - - <_> - - - - <_> - 3 1 11 8 -1. - <_> - 3 3 11 4 2. - 0 - 0.0378306210041046 - -0.1275478005409241 - 0.0723592489957809 - <_> - - <_> - - - - <_> - 2 7 15 4 -1. - <_> - 2 8 15 2 2. - 0 - 0.0116437599062920 - -0.0464428104460239 - 0.1379096060991287 - <_> - - <_> - - - - <_> - 5 11 2 2 -1. - <_> - 5 11 1 2 2. - 1 - -5.9127039276063442e-003 - -0.1696089953184128 - 0.0449999384582043 - <_> - - <_> - - - - <_> - 6 10 8 5 -1. - <_> - 8 10 4 5 2. - 0 - -0.0576444491744041 - -0.2977206110954285 - 8.5106249898672104e-003 - <_> - - <_> - - - - <_> - 4 10 8 5 -1. - <_> - 6 10 4 5 2. - 0 - -0.0539292395114899 - -0.3482970893383026 - 0.0207772795110941 - <_> - - <_> - - - - <_> - 1 11 17 2 -1. - <_> - 1 12 17 1 2. - 0 - 7.7844387851655483e-004 - -0.1067842990159988 - 0.0631283298134804 - <_> - - <_> - - - - <_> - 0 9 17 4 -1. - <_> - 0 10 17 2 2. - 0 - 0.0217015091329813 - -0.0430709086358547 - 0.2051513940095902 - <_> - - <_> - - - - <_> - 0 6 18 2 -1. - <_> - 9 6 9 1 2. - <_> - 0 7 9 1 2. - 0 - 0.0142901800572872 - 0.0401067808270454 - -0.1963661015033722 - <_> - - <_> - - - - <_> - 7 1 3 6 -1. - <_> - 5 3 3 2 3. - 1 - 0.0479065105319023 - 0.0266829095780849 - -0.2608106136322022 - <_> - - <_> - - - - <_> - 9 13 6 2 -1. - <_> - 11 13 2 2 3. - 0 - 0.0207046903669834 - 8.2300165668129921e-003 - -0.1717294007539749 - <_> - - <_> - - - - <_> - 3 13 6 2 -1. - <_> - 5 13 2 2 3. - 0 - -0.0228998996317387 - -0.3708100020885468 - 0.0185417495667934 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - -1.9879220053553581e-003 - 0.1643680930137634 - -0.0217982996255159 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - 5.4986838222248480e-005 - -0.0649014934897423 - 0.1062330007553101 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - 1.3559920480474830e-003 - -0.0245978496968746 - 0.1436166018247604 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - -2.6802290449268185e-005 - 0.0772759467363358 - -0.0916534364223480 - <_> - - <_> - - - - <_> - 13 0 5 8 -1. - <_> - 13 4 5 4 2. - 0 - -0.0716202333569527 - -0.2455226033926010 - 0.0295341201126575 - <_> - - <_> - - - - <_> - 8 6 6 3 -1. - <_> - 10 8 2 3 3. - 1 - 0.0243309102952480 - 0.0413995198905468 - -0.1590318977832794 - <_> - - <_> - - - - <_> - 9 11 1 3 -1. - <_> - 8 12 1 1 3. - 1 - 0.0279465708881617 - 2.2586109116673470e-003 - -0.6731820106506348 - <_> - - <_> - - - - <_> - 9 11 3 1 -1. - <_> - 10 12 1 1 3. - 1 - -1.4360989443957806e-003 - 0.1064805015921593 - -0.0644265785813332 - <_> - - <_> - - - - <_> - 7 1 6 2 -1. - <_> - 10 1 3 1 2. - <_> - 7 2 3 1 2. - 0 - 4.7291368246078491e-003 - 0.0197015404701233 - -0.2857697010040283 - <_> - - <_> - - - - <_> - 1 5 16 5 -1. - <_> - 5 5 8 5 2. - 0 - -0.0992026627063751 - -0.3520042896270752 - 0.0168160591274500 - <_> - - <_> - - - - <_> - 12 6 6 1 -1. - <_> - 14 6 2 1 3. - 0 - -8.9718345552682877e-003 - 0.0913507118821144 - -0.0237340200692415 - <_> - - <_> - - - - <_> - 0 6 6 1 -1. - <_> - 2 6 2 1 3. - 0 - 3.2134570647031069e-003 - -0.0494450889527798 - 0.1423113048076630 - <_> - - <_> - - - - <_> - 15 4 2 1 -1. - <_> - 15 4 1 1 2. - 0 - -1.0166129795834422e-003 - 0.0645815804600716 - -0.0191290695220232 - <_> - - <_> - - - - <_> - 1 4 2 1 -1. - <_> - 2 4 1 1 2. - 0 - -6.1253100284375250e-005 - 0.0835471376776695 - -0.0906196907162666 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 8 1 2 1 2. - 0 - -1.1647429782897234e-003 - -0.1799729019403458 - 0.0400951690971851 - <_> - - <_> - - - - <_> - 0 0 2 10 -1. - <_> - 0 5 2 5 2. - 0 - -0.0643320977687836 - -0.3869268894195557 - 0.0174406096339226 - <_> - - <_> - - - - <_> - 3 2 12 6 -1. - <_> - 3 5 12 3 2. - 0 - -0.1375796943902969 - 0.2280858010053635 - -0.0328599512577057 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 5 1 4 1 3. - 1 - 7.3165339417755604e-003 - 0.0429877601563931 - -0.1599061042070389 - <_> - - <_> - - - - <_> - 9 0 3 6 -1. - <_> - 10 1 1 6 3. - 1 - 0.0210752394050360 - 0.0137607501819730 - -0.0974362194538116 - <_> - - <_> - - - - <_> - 0 0 8 8 -1. - <_> - 4 0 4 8 2. - 0 - 0.0470838211476803 - -0.0716910064220428 - 0.1070054024457932 - <_> - - <_> - - - - <_> - 6 0 9 1 -1. - <_> - 9 0 3 1 3. - 0 - 5.9396019205451012e-003 - -0.0633967369794846 - 0.0387225411832333 - <_> - - <_> - - - - <_> - 0 0 18 9 -1. - <_> - 6 0 6 9 3. - 0 - 0.5819712877273560 - 0.0216003507375717 - -0.3787331879138947 - <_> - - <_> - - - - <_> - 5 11 9 4 -1. - <_> - 5 12 9 2 2. - 0 - 0.0160421207547188 - -0.0466817095875740 - 0.1436420977115631 - <_> - - <_> - - - - <_> - 3 2 3 13 -1. - <_> - 4 2 1 13 3. - 0 - -0.0383162610232830 - -0.6240848898887634 - 0.0108488202095032 - <_> - - <_> - - - - <_> - 10 3 6 2 -1. - <_> - 10 3 3 2 2. - 1 - 0.1245153993368149 - -9.1985529288649559e-003 - 0.1117267012596130 - <_> - - <_> - - - - <_> - 8 3 2 6 -1. - <_> - 8 3 2 3 2. - 1 - 0.1228756979107857 - -0.0130921201780438 - 0.5222136974334717 - <_> - - <_> - - - - <_> - 13 6 3 3 -1. - <_> - 12 7 3 1 3. - 1 - -9.1833565384149551e-003 - -0.0758661031723022 - 0.0255879797041416 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 6 7 1 3 3. - 1 - 0.0168187208473682 - -0.0309611707925797 - 0.2313760071992874 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 12 6 1 1 2. - <_> - 11 7 1 1 2. - 0 - 6.6163040173705667e-005 - -0.0593904405832291 - 0.0742034986615181 - <_> - - <_> - - - - <_> - 7 0 4 11 -1. - <_> - 9 0 2 11 2. - 0 - -0.0548779107630253 - 0.2598169147968292 - -0.0269930195063353 - <_> - - <_> - - - - <_> - 8 0 2 5 -1. - <_> - 8 0 1 5 2. - 0 - -7.6188119128346443e-003 - 0.1337952017784119 - -0.0559991188347340 - <_> - - <_> - - - - <_> - 2 2 5 12 -1. - <_> - 2 8 5 6 2. - 0 - -0.2336242049932480 - 0.3275535106658936 - -0.0214694291353226 - <_> - - <_> - - - - <_> - 0 5 18 10 -1. - <_> - 9 5 9 5 2. - <_> - 0 10 9 5 2. - 0 - -0.1114932000637054 - -0.2446383982896805 - 0.0362425111234188 - <_> - - <_> - - - - <_> - 0 10 8 4 -1. - <_> - 0 10 4 2 2. - <_> - 4 12 4 2 2. - 0 - -0.0441570281982422 - 0.4340217113494873 - -0.0166491009294987 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 9 1 1 1 3. - 0 - -5.7168701459886506e-005 - 0.0668948367238045 - -0.0507181882858276 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 1 1 2. - <_> - 3 12 1 1 2. - 0 - 5.3646868764190003e-005 - -0.0803783014416695 - 0.0818097665905952 - <_> - - <_> - - - - <_> - 14 1 2 14 -1. - <_> - 14 8 2 7 2. - 0 - 0.1059508994221687 - 5.0716297701001167e-003 - -0.6473715901374817 - <_> - - <_> - - - - <_> - 2 1 2 14 -1. - <_> - 2 8 2 7 2. - 0 - 0.0836684033274651 - 8.6071500554680824e-003 - -0.6509302854537964 - <_> - - <_> - - - - <_> - 14 7 3 4 -1. - <_> - 15 8 1 4 3. - 1 - 8.3153052255511284e-003 - -0.0472831390798092 - 0.1902991980314255 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 9 9 3 2. - <_> - 9 12 9 3 2. - 0 - -0.0621465183794498 - -0.1851356029510498 - 0.0434024408459663 - <_> - - <_> - - - - <_> - 11 7 3 5 -1. - <_> - 12 8 1 5 3. - 1 - -1.5061040176078677e-003 - -0.0425548888742924 - 0.0472707785665989 - <_> - - <_> - - - - <_> - 7 7 5 3 -1. - <_> - 6 8 5 1 3. - 1 - -0.0126304496079683 - 0.1005629971623421 - -0.0700350031256676 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - -7.2226561605930328e-003 - -0.1351246982812882 - 0.0165191907435656 - <_> - - <_> - - - - <_> - 7 8 4 5 -1. - <_> - 8 8 2 5 2. - 0 - 0.0398441106081009 - 6.1076539568603039e-003 - -1.0002349615097046 - <_> - - <_> - - - - <_> - 8 1 10 12 -1. - <_> - 8 5 10 4 3. - 0 - 0.5386329293251038 - 4.2299588676542044e-004 - -0.9881020188331604 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - -0.0243477690964937 - -0.9888607263565064 - 4.6373298391699791e-003 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 16 6 1 1 3. - 1 - 4.4827940873801708e-003 - -0.0541374906897545 - 0.1380057930946350 - <_> - - <_> - - - - <_> - 0 0 15 4 -1. - <_> - 5 0 5 4 3. - 0 - 0.0796409398317337 - -0.0579614713788033 - 0.1078020036220551 - <_> - - <_> - - - - <_> - 12 0 6 5 -1. - <_> - 12 0 3 5 2. - 0 - 6.5154298208653927e-003 - -0.0951096937060356 - 0.0761779919266701 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 3 0 3 5 2. - 0 - 0.0639263466000557 - 0.0221496708691120 - -0.3681097030639648 - -1.2998509407043457 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 6 2 4 -1. - <_> - 7 7 2 2 2. - 1 - -0.0227022804319859 - 0.3458436131477356 - -0.1496108025312424 - <_> - - <_> - - - - <_> - 6 3 10 12 -1. - <_> - 11 3 5 6 2. - <_> - 6 9 5 6 2. - 0 - -0.0113259796053171 - 0.0946362167596817 - -0.1482031047344208 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 5 0 2 1 3. - 0 - -1.0080899810418487e-003 - 0.1488129943609238 - -0.2323223948478699 - <_> - - <_> - - - - <_> - 2 4 16 8 -1. - <_> - 10 4 8 4 2. - <_> - 2 8 8 4 2. - 0 - -0.1050098985433579 - -0.2153766006231308 - 0.0894507020711899 - <_> - - <_> - - - - <_> - 1 6 4 4 -1. - <_> - 1 6 2 2 2. - <_> - 3 8 2 2 2. - 0 - -0.0126776201650500 - 0.2758413851261139 - -0.1148819997906685 - <_> - - <_> - - - - <_> - 13 0 4 2 -1. - <_> - 14 1 2 2 2. - 1 - 4.9704289995133877e-003 - 0.0440389215946198 - -0.1627631038427353 - <_> - - <_> - - - - <_> - 5 0 2 4 -1. - <_> - 4 1 2 2 2. - 1 - 6.1556040309369564e-003 - 0.0742129236459732 - -0.3247778117656708 - <_> - - <_> - - - - <_> - 12 8 1 3 -1. - <_> - 12 9 1 1 3. - 0 - -7.2180028073489666e-003 - 0.4252533912658691 - -0.0276413895189762 - <_> - - <_> - - - - <_> - 5 8 1 3 -1. - <_> - 5 9 1 1 3. - 0 - 2.9266420751810074e-003 - -0.0529128387570381 - 0.3920814096927643 - <_> - - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 10 1 4 2 2. - 0 - 7.9688094556331635e-003 - 0.0333337001502514 - -0.4196723997592926 - <_> - - <_> - - - - <_> - 5 7 1 3 -1. - <_> - 5 8 1 1 3. - 0 - 4.5101311989128590e-003 - -0.0477215312421322 - 0.4440034925937653 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 3 1 12 1 2. - 0 - -7.2346827946603298e-003 - -0.4201810956001282 - 0.0553282685577869 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 4 1 4 2 2. - 0 - 5.4523041471838951e-003 - 0.0427102707326412 - -0.4007393121719360 - <_> - - <_> - - - - <_> - 6 3 10 12 -1. - <_> - 11 3 5 6 2. - <_> - 6 9 5 6 2. - 0 - 0.1354739069938660 - 0.0132751995697618 - -0.4189395010471344 - <_> - - <_> - - - - <_> - 2 3 10 12 -1. - <_> - 2 3 5 6 2. - <_> - 7 9 5 6 2. - 0 - -0.0285219997167587 - 0.0712370425462723 - -0.2356449067592621 - <_> - - <_> - - - - <_> - 9 0 2 9 -1. - <_> - 9 0 1 9 2. - 1 - -0.0678908079862595 - -0.6082717180252075 - 2.7981699531665072e-005 - <_> - - <_> - - - - <_> - 0 3 2 1 -1. - <_> - 1 3 1 1 2. - 0 - -2.7107769710710272e-005 - 0.1002285033464432 - -0.1364476978778839 - <_> - - <_> - - - - <_> - 12 1 6 14 -1. - <_> - 12 8 6 7 2. - 0 - -0.2596256136894226 - -0.1378504037857056 - 0.0266530998051167 - <_> - - <_> - - - - <_> - 0 1 6 14 -1. - <_> - 0 8 6 7 2. - 0 - 0.1188557967543602 - 0.0274891909211874 - -0.5429527163505554 - <_> - - <_> - - - - <_> - 9 0 2 9 -1. - <_> - 9 0 1 9 2. - 1 - 0.0568522512912750 - -0.0112552195787430 - 0.3833953142166138 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 9 0 9 1 2. - 1 - 0.0415694713592529 - -0.0417712591588497 - 0.3420456945896149 - <_> - - <_> - - - - <_> - 2 12 14 3 -1. - <_> - 2 13 14 1 3. - 0 - 0.0441399216651917 - -0.0225493591278791 - 0.4669098854064941 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 0 0 9 4 2. - <_> - 9 4 9 4 2. - 0 - 0.1063582971692085 - 0.0297107696533203 - -0.4509320855140686 - <_> - - <_> - - - - <_> - 11 1 5 6 -1. - <_> - 11 4 5 3 2. - 0 - -8.2869287580251694e-003 - -0.1222324967384338 - 0.0532477386295795 - <_> - - <_> - - - - <_> - 2 1 5 6 -1. - <_> - 2 4 5 3 2. - 0 - 0.0367316715419292 - 0.0420367904007435 - -0.4483470916748047 - <_> - - <_> - - - - <_> - 6 10 8 5 -1. - <_> - 8 10 4 5 2. - 0 - -0.0577655285596848 - -0.5459136962890625 - 7.4861990287899971e-003 - <_> - - <_> - - - - <_> - 4 9 10 6 -1. - <_> - 9 9 5 6 2. - 0 - 0.1748784929513931 - 0.0281722098588943 - -0.4324407875537872 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -2.5779709176276810e-005 - 0.0849614813923836 - -0.0936162620782852 - <_> - - <_> - - - - <_> - 0 11 6 4 -1. - <_> - 0 11 3 2 2. - <_> - 3 13 3 2 2. - 0 - 4.4103060645284131e-005 - -0.1574534028768539 - 0.0785599797964096 - <_> - - <_> - - - - <_> - 14 14 2 1 -1. - <_> - 14 14 1 1 2. - 0 - -2.5306469760835171e-003 - -0.1860491931438446 - 0.0132554396986961 - <_> - - <_> - - - - <_> - 2 14 2 1 -1. - <_> - 3 14 1 1 2. - 0 - -2.5649809686001390e-005 - 0.1080086007714272 - -0.1149718016386032 - <_> - - <_> - - - - <_> - 0 3 18 8 -1. - <_> - 0 7 18 4 2. - 0 - -0.5427448749542236 - -0.6514676809310913 - 0.0198722109198570 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 3 1 3 3. - 1 - 0.0104538202285767 - -0.0576840490102768 - 0.2180927991867065 - <_> - - <_> - - - - <_> - 16 3 1 2 -1. - <_> - 16 4 1 1 2. - 0 - -2.4684870368218981e-005 - 0.0703076869249344 - -0.0687716603279114 - <_> - - <_> - - - - <_> - 2 4 6 8 -1. - <_> - 5 4 3 8 2. - 0 - -0.0386879108846188 - -0.2357024997472763 - 0.0593729391694069 - <_> - - <_> - - - - <_> - 8 9 4 2 -1. - <_> - 10 9 2 1 2. - <_> - 8 10 2 1 2. - 0 - 0.0146778095513582 - -4.5802700333297253e-003 - 0.6644542217254639 - <_> - - <_> - - - - <_> - 6 9 4 2 -1. - <_> - 6 9 2 1 2. - <_> - 8 10 2 1 2. - 0 - -0.0101802004501224 - 0.5220292210578919 - -0.0238862205296755 - <_> - - <_> - - - - <_> - 16 3 1 2 -1. - <_> - 16 4 1 1 2. - 0 - 2.5779709176276810e-005 - -0.0755427628755569 - 0.1076302006840706 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - -2.3739310563541949e-005 - 0.1134765967726708 - -0.1176417991518974 - <_> - - <_> - - - - <_> - 1 1 16 2 -1. - <_> - 9 1 8 1 2. - <_> - 1 2 8 1 2. - 0 - -0.0110010495409369 - -0.4163585901260376 - 0.0291555207222700 - <_> - - <_> - - - - <_> - 6 10 4 2 -1. - <_> - 6 10 2 1 2. - <_> - 8 11 2 1 2. - 0 - -0.0100403595715761 - 0.5015233755111694 - -0.0244732499122620 - <_> - - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 8 7 2 3 2. - 0 - 0.0110518001019955 - 0.0379601791501045 - -0.2977263033390045 - <_> - - <_> - - - - <_> - 6 0 4 4 -1. - <_> - 6 0 2 2 2. - <_> - 8 2 2 2 2. - 0 - -0.0120895402505994 - -0.5163480043411255 - 0.0215219203382730 - <_> - - <_> - - - - <_> - 12 6 6 3 -1. - <_> - 14 7 2 1 9. - 0 - -0.0844105631113052 - 0.4913380146026611 - -0.0146038103848696 - <_> - - <_> - - - - <_> - 0 6 6 3 -1. - <_> - 2 7 2 1 9. - 0 - 0.0227140001952648 - -0.0488631390035152 - 0.2357286959886551 - <_> - - <_> - - - - <_> - 14 13 2 2 -1. - <_> - 15 13 1 1 2. - <_> - 14 14 1 1 2. - 0 - 2.3879110813140869e-005 - -0.0642457678914070 - 0.0656965523958206 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 1 1 2. - <_> - 3 14 1 1 2. - 0 - 2.5649809686001390e-005 - -0.1007627993822098 - 0.1006717979907990 - <_> - - <_> - - - - <_> - 14 12 4 2 -1. - <_> - 15 12 2 2 2. - 0 - 0.0106822997331619 - 0.0119797298684716 - -0.4758862853050232 - <_> - - <_> - - - - <_> - 9 4 7 4 -1. - <_> - 9 4 7 2 2. - 1 - 0.1425171047449112 - 0.0269787404686213 - -0.3589037954807282 - <_> - - <_> - - - - <_> - 17 9 1 2 -1. - <_> - 17 10 1 1 2. - 0 - 2.6178720872849226e-005 - -0.0519438087940216 - 0.0596988387405872 - <_> - - <_> - - - - <_> - 0 9 1 2 -1. - <_> - 0 10 1 1 2. - 0 - 1.5015379758551717e-003 - 0.0426829196512699 - -0.2474233061075211 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - 2.7750380468205549e-005 - -0.0659698769450188 - 0.0952353179454803 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -2.3739310563541949e-005 - 0.0914406329393387 - -0.1140132024884224 - <_> - - <_> - - - - <_> - 16 4 2 2 -1. - <_> - 17 4 1 1 2. - <_> - 16 5 1 1 2. - 0 - 1.8318339716643095e-003 - -0.0358028709888458 - 0.2800019085407257 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 0 4 1 1 2. - <_> - 1 5 1 1 2. - 0 - -2.6216499463771470e-005 - 0.1192717030644417 - -0.0900511220097542 - <_> - - <_> - - - - <_> - 7 3 4 6 -1. - <_> - 9 3 2 3 2. - <_> - 7 6 2 3 2. - 0 - 0.0184157993644476 - 0.0286770407110453 - -0.3459722101688385 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -2.5649809686001390e-005 - 0.1055520027875900 - -0.0939618200063705 - <_> - - <_> - - - - <_> - 1 3 16 4 -1. - <_> - 9 3 8 2 2. - <_> - 1 5 8 2 2. - 0 - -0.0442830286920071 - -0.3937725126743317 - 0.0249951407313347 - <_> - - <_> - - - - <_> - 2 12 14 2 -1. - <_> - 2 13 14 1 2. - 0 - -0.0374921411275864 - 0.4075055122375488 - -0.0246863309293985 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 13 0 1 1 2. - <_> - 12 1 1 1 2. - 0 - -2.4684870368218981e-005 - 0.0595886707305908 - -0.0425871796905994 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 0 1 1 2. - <_> - 5 1 1 1 2. - 0 - -2.3879110813140869e-005 - 0.1165246963500977 - -0.0811222568154335 - <_> - - <_> - - - - <_> - 5 1 8 2 -1. - <_> - 5 2 8 1 2. - 0 - -3.9012550842016935e-003 - -0.2543003857135773 - 0.0380770415067673 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -2.6903450489044189e-003 - 0.3091157972812653 - -0.0310623906552792 - <_> - - <_> - - - - <_> - 12 14 6 1 -1. - <_> - 14 14 2 1 3. - 0 - -7.0722219534218311e-003 - -0.2149100005626679 - 0.0302512794733047 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - 2.1917349658906460e-003 - 0.0556822307407856 - -0.1667632013559341 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - 2.5904899302986450e-005 - -0.1224227026104927 - 0.0827013477683067 - <_> - - <_> - - - - <_> - 1 1 16 6 -1. - <_> - 1 3 16 2 3. - 0 - -8.6123133078217506e-003 - 0.1525671035051346 - -0.0702950879931450 - <_> - - <_> - - - - <_> - 8 7 10 8 -1. - <_> - 8 7 5 8 2. - 0 - -0.0323125012218952 - 0.1056381016969681 - -0.0887572914361954 - <_> - - <_> - - - - <_> - 0 7 11 8 -1. - <_> - 0 9 11 4 2. - 0 - -0.2404166013002396 - -0.5687471032142639 - 0.0155827002599835 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 12 8 1 1 2. - <_> - 11 9 1 1 2. - 0 - -3.6818000953644514e-003 - 0.3900842964649200 - -0.0244826804846525 - <_> - - <_> - - - - <_> - 0 7 16 1 -1. - <_> - 4 7 8 1 2. - 0 - -0.0375609807670116 - -0.5919058918952942 - 0.0148836802691221 - <_> - - <_> - - - - <_> - 8 7 10 8 -1. - <_> - 8 7 5 8 2. - 0 - -0.2604623138904572 - -0.8078975081443787 - 8.0495169386267662e-003 - <_> - - <_> - - - - <_> - 0 7 10 8 -1. - <_> - 5 7 5 8 2. - 0 - 0.2200307995080948 - 0.0114593897014856 - -0.6656962037086487 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - 0.0142070800065994 - 0.0114870695397258 - -0.4328494071960449 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - 1.9708760082721710e-003 - -0.0313467793166637 - 0.2830441892147064 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0168589502573013 - -0.6498271822929382 - 9.0222535654902458e-003 - <_> - - <_> - - - - <_> - 0 7 18 8 -1. - <_> - 0 7 9 4 2. - <_> - 9 11 9 4 2. - 0 - 0.1187689974904060 - 0.0299480501562357 - -0.2969210147857666 - <_> - - <_> - - - - <_> - 14 12 4 2 -1. - <_> - 15 12 2 2 2. - 0 - 3.5489429719746113e-003 - 0.0224479902535677 - -0.1188597008585930 - <_> - - <_> - - - - <_> - 0 12 4 2 -1. - <_> - 1 12 2 2 2. - 0 - 3.2591039780527353e-003 - 0.0439781881868839 - -0.2000851929187775 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 14 1 3 1 3. - 1 - -6.9489958696067333e-003 - 0.1097998991608620 - -0.0513728708028793 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 1 1 3 3. - 1 - 0.0116512998938560 - -0.0391622781753540 - 0.2311145961284638 - <_> - - <_> - - - - <_> - 14 2 3 3 -1. - <_> - 13 3 3 1 3. - 1 - -2.0093740895390511e-003 - 0.0655085071921349 - -0.0361764915287495 - <_> - - <_> - - - - <_> - 4 2 3 3 -1. - <_> - 5 3 1 3 3. - 1 - 4.4954619370400906e-003 - -0.0742958337068558 - 0.1480637043714523 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 2 1 1 3. - 1 - 4.0165609680116177e-003 - 0.0192055609077215 - -0.1320295929908752 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 5.1109711639583111e-003 - 0.0305455308407545 - -0.3213159143924713 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 2.6829841081053019e-003 - 0.0255360994488001 - -0.1154488995671272 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -3.2579500693827868e-003 - -0.2527283132076263 - 0.0394384711980820 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -1.9859049934893847e-003 - 0.2665804922580719 - -0.0468473583459854 - <_> - - <_> - - - - <_> - 6 4 6 5 -1. - <_> - 8 6 2 5 3. - 1 - -0.1254094988107681 - -0.4057011008262634 - 0.0230680201202631 - <_> - - <_> - - - - <_> - 6 9 10 2 -1. - <_> - 11 9 5 1 2. - <_> - 6 10 5 1 2. - 0 - 5.4464139975607395e-003 - -0.0338515192270279 - 0.1091032028198242 - <_> - - <_> - - - - <_> - 4 7 5 8 -1. - <_> - 4 9 5 4 2. - 0 - -0.0291290692985058 - 0.0829424485564232 - -0.1039045974612236 - <_> - - <_> - - - - <_> - 2 5 15 6 -1. - <_> - 2 7 15 2 3. - 0 - -0.0533427894115448 - 0.1423411965370178 - -0.0637678280472755 - <_> - - <_> - - - - <_> - 3 0 2 15 -1. - <_> - 3 5 2 5 3. - 0 - -0.0698260366916656 - -0.2996051907539368 - 0.0381423793733120 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 1.0430120164528489e-003 - -0.0486700199544430 - 0.2204319983720779 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 0 11 18 1 2. - 0 - 4.8559759743511677e-003 - -0.0910003632307053 - 0.0976040363311768 - <_> - - <_> - - - - <_> - 9 8 2 4 -1. - <_> - 9 10 2 2 2. - 0 - -5.6559829972684383e-003 - 0.0504679903388023 - -0.0828957930207253 - <_> - - <_> - - - - <_> - 0 5 18 6 -1. - <_> - 0 8 18 3 2. - 0 - -0.3969191014766693 - -0.5970314741134644 - 0.0172442905604839 - <_> - - <_> - - - - <_> - 3 11 12 4 -1. - <_> - 3 12 12 2 2. - 0 - -0.0546870790421963 - 0.3900310099124908 - -0.0251556299626827 - <_> - - <_> - - - - <_> - 0 14 6 1 -1. - <_> - 2 14 2 1 3. - 0 - -6.4253779128193855e-003 - -0.2550624907016754 - 0.0394066199660301 - <_> - - <_> - - - - <_> - 12 14 6 1 -1. - <_> - 14 14 2 1 3. - 0 - 8.5719041526317596e-003 - 0.0186648592352867 - -0.2220326066017151 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 9 0 1 1 2. - 0 - 1.2086849892511964e-003 - -0.0721488967537880 - 0.1184407994151115 - <_> - - <_> - - - - <_> - 5 0 12 1 -1. - <_> - 8 0 6 1 2. - 0 - -0.0130339497700334 - 0.2058676034212112 - -0.0158201493322849 - <_> - - <_> - - - - <_> - 4 0 8 1 -1. - <_> - 6 0 4 1 2. - 0 - 7.2425887919962406e-003 - -0.0630722567439079 - 0.1470635980367661 - <_> - - <_> - - - - <_> - 12 14 6 1 -1. - <_> - 14 14 2 1 3. - 0 - -0.0152673702687025 - -0.2679902017116547 - 6.9345328956842422e-003 - <_> - - <_> - - - - <_> - 0 14 6 1 -1. - <_> - 2 14 2 1 3. - 0 - 5.9866169467568398e-003 - 0.0335439704358578 - -0.2607846856117249 - <_> - - <_> - - - - <_> - 6 9 10 2 -1. - <_> - 11 9 5 1 2. - <_> - 6 10 5 1 2. - 0 - -0.0108856903389096 - 0.0855251327157021 - -0.0212142392992973 - <_> - - <_> - - - - <_> - 4 9 6 2 -1. - <_> - 4 9 3 1 2. - <_> - 7 10 3 1 2. - 0 - 4.8979911953210831e-003 - -0.0451360605657101 - 0.2241200953722000 - <_> - - <_> - - - - <_> - 16 3 2 9 -1. - <_> - 13 6 2 3 3. - 1 - -0.1925639063119888 - -0.6348158717155457 - 4.2262570932507515e-003 - <_> - - <_> - - - - <_> - 2 3 9 2 -1. - <_> - 5 6 3 2 3. - 1 - 0.1086068972945213 - 0.0170917399227619 - -0.5451073050498962 - <_> - - <_> - - - - <_> - 11 0 6 2 -1. - <_> - 13 2 2 2 3. - 1 - -0.0548367016017437 - -0.3548921942710877 - 4.5531531795859337e-003 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 7 1 3 1 2. - 0 - 5.8792168274521828e-003 - 0.0155201097950339 - -0.5407999157905579 - <_> - - <_> - - - - <_> - 11 0 2 3 -1. - <_> - 11 0 1 3 2. - 1 - 7.5071100145578384e-003 - -0.0158542692661285 - 0.0666517317295074 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 7 0 3 1 2. - 1 - 0.0169021207839251 - 0.0222053807228804 - -0.3737033903598785 - <_> - - <_> - - - - <_> - 9 2 2 1 -1. - <_> - 9 2 1 1 2. - 1 - -3.1124811357585713e-005 - 0.0337283685803413 - -0.0621243193745613 - <_> - - <_> - - - - <_> - 4 2 10 8 -1. - <_> - 4 4 10 4 2. - 0 - -0.0782682672142982 - 0.4304488897323608 - -0.0193186104297638 - <_> - - <_> - - - - <_> - 11 0 3 3 -1. - <_> - 12 1 1 3 3. - 1 - 0.0221087392419577 - 0.0139799099415541 - -0.4232504069805145 - <_> - - <_> - - - - <_> - 7 0 3 3 -1. - <_> - 6 1 3 1 3. - 1 - 5.4141050204634666e-003 - 0.0420096218585968 - -0.1836881935596466 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 13 0 1 1 2. - <_> - 12 1 1 1 2. - 0 - 2.6600460842018947e-005 - -0.0531449504196644 - 0.0663439631462097 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 0 1 1 2. - <_> - 5 1 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0851690322160721 - 0.1034568026661873 - <_> - - <_> - - - - <_> - 0 12 18 3 -1. - <_> - 0 13 18 1 3. - 0 - 9.6517298370599747e-003 - -0.0677581280469894 - 0.1238183006644249 - <_> - - <_> - - - - <_> - 4 0 2 1 -1. - <_> - 5 0 1 1 2. - 0 - 2.3739310563541949e-005 - -0.1085200011730194 - 0.0826930627226830 - <_> - - <_> - - - - <_> - 11 1 4 2 -1. - <_> - 11 1 2 2 2. - 0 - 2.5218860246241093e-003 - -0.1045825034379959 - 0.0663281828165054 - <_> - - <_> - - - - <_> - 0 0 15 2 -1. - <_> - 5 0 5 2 3. - 0 - -0.0529961399734020 - 0.2392195016145706 - -0.0411417894065380 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - 2.9717630241066217e-003 - 0.0353552810847759 - -0.1536100953817368 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 5 1 1 1 3. - 1 - -5.0528207793831825e-003 - -0.2838408052921295 - 0.0291973706334829 - <_> - - <_> - - - - <_> - 11 3 2 1 -1. - <_> - 11 3 1 1 2. - 0 - -1.4023650437593460e-003 - 0.1938752979040146 - -0.0234654601663351 - <_> - - <_> - - - - <_> - 5 3 2 1 -1. - <_> - 6 3 1 1 2. - 0 - 2.6361160053056665e-005 - -0.1317539066076279 - 0.0617644004523754 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 15 1 2 2 2. - 1 - 5.7318392209708691e-003 - -0.0376738198101521 - 0.1486400067806244 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 3 1 2 2 2. - 1 - 4.6025160700082779e-003 - -0.0600823499262333 - 0.1475746929645538 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 9 0 9 1 2. - <_> - 0 1 9 1 2. - 0 - 4.9826940521597862e-003 - 0.0502174682915211 - -0.1770825982093811 - <_> - - <_> - - - - <_> - 0 4 18 4 -1. - <_> - 0 4 9 2 2. - <_> - 9 6 9 2 2. - 0 - -0.0732960328459740 - -0.4974305033683777 - 0.0167066808789968 - <_> - - <_> - - - - <_> - 10 7 4 2 -1. - <_> - 12 7 2 1 2. - <_> - 10 8 2 1 2. - 0 - -0.0142388697713614 - 0.5217555761337280 - -0.0113009298220277 - <_> - - <_> - - - - <_> - 4 3 3 4 -1. - <_> - 5 4 1 4 3. - 1 - 0.0181554593145847 - -0.0388248786330223 - 0.2092700004577637 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -2.5779709176276810e-005 - 0.0649056732654572 - -0.0738614425063133 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 2.9359169275267050e-005 - -0.0757590234279633 - 0.1107048019766808 - <_> - - <_> - - - - <_> - 10 7 4 2 -1. - <_> - 12 7 2 1 2. - <_> - 10 8 2 1 2. - 0 - 2.5904899302986450e-005 - -0.0566908791661263 - 0.0705650299787521 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 1 2. - <_> - 7 9 1 1 2. - 0 - 2.5659629609435797e-003 - -0.0226817093789577 - 0.3264203071594238 - <_> - - <_> - - - - <_> - 8 3 2 8 -1. - <_> - 8 7 2 4 2. - 0 - -0.0431340709328651 - 0.0913139432668686 - -0.0776849165558815 - <_> - - <_> - - - - <_> - 1 4 16 9 -1. - <_> - 1 7 16 3 3. - 0 - 0.1150510013103485 - -0.0538835301995277 - 0.1738277971744537 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 15 8 3 2 3. - 0 - 0.0376834310591221 - 0.0119111798703671 - -0.1632004976272583 - <_> - - <_> - - - - <_> - 0 6 3 6 -1. - <_> - 0 8 3 2 3. - 0 - 0.0287051200866699 - 0.0230644904077053 - -0.3434646129608154 - <_> - - <_> - - - - <_> - 6 0 6 11 -1. - <_> - 6 0 3 11 2. - 0 - 0.0741745382547379 - -0.0364534594118595 - 0.2226549983024597 - <_> - - <_> - - - - <_> - 6 0 4 10 -1. - <_> - 8 0 2 10 2. - 0 - 0.0387266613543034 - -0.0861116796731949 - 0.0941641926765442 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 1 2 4 2. - 1 - -4.1428101249039173e-003 - -0.1222383007407188 - 0.0341765694320202 - <_> - - <_> - - - - <_> - 9 5 6 2 -1. - <_> - 9 5 6 1 2. - 1 - 0.0246735997498035 - 0.0565831884741783 - -0.1488883048295975 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 11 10 3 1 2. - <_> - 8 11 3 1 2. - 0 - 9.9808704107999802e-003 - -0.0197595097124577 - 0.3030026853084564 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -6.6217122366651893e-005 - 0.0897242724895477 - -0.0896338075399399 - <_> - - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 10 1 3 1 3. - 0 - 1.9440250471234322e-003 - 0.0459239892661572 - -0.1608746051788330 - <_> - - <_> - - - - <_> - 4 0 10 3 -1. - <_> - 4 1 10 1 3. - 0 - -9.9218348041176796e-003 - -0.3382751941680908 - 0.0233459603041410 - <_> - - <_> - - - - <_> - 15 7 1 2 -1. - <_> - 15 8 1 1 2. - 0 - 2.7032099751522765e-005 - -0.0716137290000916 - 0.1437425017356873 - <_> - - <_> - - - - <_> - 5 7 8 2 -1. - <_> - 5 8 8 1 2. - 0 - -0.0115753803402185 - 0.0729895383119583 - -0.1120665967464447 - <_> - - <_> - - - - <_> - 11 5 6 9 -1. - <_> - 13 8 2 3 9. - 0 - 0.3822771012783051 - 4.3869050568901002e-004 - -0.9693664908409119 - <_> - - <_> - - - - <_> - 1 5 6 9 -1. - <_> - 3 8 2 3 9. - 0 - 0.0256045106798410 - -0.0532096885144711 - 0.1605699956417084 - <_> - - <_> - - - - <_> - 11 6 3 6 -1. - <_> - 9 8 3 2 3. - 1 - 0.0652327984571457 - -5.0901030190289021e-003 - 0.1052659004926682 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 9 8 2 3 3. - 1 - -0.0765335634350777 - -0.2762224972248077 - 0.0298370793461800 - <_> - - <_> - - - - <_> - 10 10 1 3 -1. - <_> - 10 11 1 1 3. - 0 - -3.0668321414850652e-005 - 0.0497616194188595 - -0.0646989569067955 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - -7.1437079459428787e-003 - 0.4274195134639740 - -0.0177215505391359 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 9 11 9 2 2. - <_> - 0 13 9 2 2. - 0 - -0.0706991031765938 - -0.3164018988609314 - 0.0242118407040834 - <_> - - <_> - - - - <_> - 4 11 6 4 -1. - <_> - 7 11 3 4 2. - 0 - 0.0839718133211136 - 7.6198792085051537e-003 - -0.8065518140792847 - <_> - - <_> - - - - <_> - 0 2 18 12 -1. - <_> - 0 5 18 6 2. - 0 - 0.4975746870040894 - 6.2387259677052498e-003 - -0.8305639028549194 - <_> - - <_> - - - - <_> - 0 10 1 4 -1. - <_> - 0 12 1 2 2. - 0 - 5.4929931648075581e-003 - 0.0266029108315706 - -0.2259957939386368 - <_> - - <_> - - - - <_> - 12 6 3 3 -1. - <_> - 13 7 1 1 9. - 0 - -0.0275369994342327 - 0.1843355000019074 - -7.0537109859287739e-003 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 4 7 1 1 9. - 0 - 4.5211901888251305e-003 - -0.0542923994362354 - 0.1254532933235169 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 1 2 4 2. - 1 - 0.0386416800320148 - 8.4282690659165382e-003 - -0.2196173965930939 - <_> - - <_> - - - - <_> - 5 0 4 4 -1. - <_> - 4 1 4 2 2. - 1 - -0.0216541700065136 - -0.2808293104171753 - 0.0244111791253090 - <_> - - <_> - - - - <_> - 5 6 8 4 -1. - <_> - 9 6 4 2 2. - <_> - 5 8 4 2 2. - 0 - -0.0290211308747530 - -0.3131417036056519 - 0.0223867595195770 - <_> - - <_> - - - - <_> - 3 11 2 2 -1. - <_> - 3 11 1 1 2. - <_> - 4 12 1 1 2. - 0 - -4.4424049556255341e-003 - 0.6493849158287048 - -0.0114663699641824 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 1 11 16 1 2. - 0 - 0.0140129495412111 - -0.0560599118471146 - 0.1226307973265648 - <_> - - <_> - - - - <_> - 1 13 15 2 -1. - <_> - 1 14 15 1 2. - 0 - 7.5773880816996098e-003 - -0.0738088190555573 - 0.0975568890571594 - <_> - - <_> - - - - <_> - 16 12 1 2 -1. - <_> - 16 12 1 1 2. - 1 - -2.6077621150761843e-003 - -0.0911063700914383 - 0.0298527106642723 - <_> - - <_> - - - - <_> - 0 8 4 2 -1. - <_> - 0 8 2 1 2. - <_> - 2 9 2 1 2. - 0 - 2.3739310563541949e-005 - -0.0737720802426338 - 0.0916053429245949 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0690594092011452 - 0.1320232003927231 - <_> - - <_> - - - - <_> - 4 4 10 4 -1. - <_> - 4 6 10 2 2. - 0 - -0.0574019812047482 - 0.1449442952871323 - -0.0600692182779312 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - -9.3912649899721146e-003 - 0.5008565187454224 - -4.1706929914653301e-003 - <_> - - <_> - - - - <_> - 4 5 1 2 -1. - <_> - 4 6 1 1 2. - 0 - 2.6128649551537819e-005 - -0.0762275531888008 - 0.1260772049427033 - <_> - - <_> - - - - <_> - 13 2 3 7 -1. - <_> - 14 3 1 7 3. - 1 - 0.0503179281949997 - 0.0103605901822448 - -0.3189758956432343 - <_> - - <_> - - - - <_> - 5 2 7 3 -1. - <_> - 4 3 7 1 3. - 1 - 5.1848609000444412e-003 - -0.0647242292761803 - 0.1234103962779045 - <_> - - <_> - - - - <_> - 13 5 2 7 -1. - <_> - 13 5 1 7 2. - 0 - -3.3910661004483700e-003 - -0.1028840020298958 - 0.0440409816801548 - <_> - - <_> - - - - <_> - 3 5 2 7 -1. - <_> - 4 5 1 7 2. - 0 - 6.0285101644694805e-003 - 0.0370522104203701 - -0.2127301990985870 - <_> - - <_> - - - - <_> - 9 2 6 2 -1. - <_> - 9 2 3 2 2. - 0 - -0.0247735399752855 - 0.3038080930709839 - -0.0141654303297400 - <_> - - <_> - - - - <_> - 3 2 6 2 -1. - <_> - 6 2 3 2 2. - 0 - 0.0162911191582680 - -0.0679637491703033 - 0.1020710021257401 - <_> - - <_> - - - - <_> - 13 3 5 6 -1. - <_> - 13 6 5 3 2. - 0 - 0.0864686071872711 - 4.0547042153775692e-003 - -0.4740296006202698 - <_> - - <_> - - - - <_> - 5 10 4 2 -1. - <_> - 5 10 2 1 2. - <_> - 7 11 2 1 2. - 0 - 3.6333149764686823e-003 - -0.0353813916444778 - 0.2016796022653580 - <_> - - <_> - - - - <_> - 11 11 4 2 -1. - <_> - 12 11 2 2 2. - 0 - 1.8694689497351646e-003 - 0.0223653502762318 - -0.0570879615843296 - <_> - - <_> - - - - <_> - 3 11 4 2 -1. - <_> - 4 11 2 2 2. - 0 - -3.7068868987262249e-003 - -0.1603562980890274 - 0.0456907190382481 - <_> - - <_> - - - - <_> - 16 12 1 2 -1. - <_> - 16 12 1 1 2. - 1 - -3.0651168344775215e-005 - 0.0354789905250072 - -0.0344920493662357 - <_> - - <_> - - - - <_> - 2 12 2 1 -1. - <_> - 2 12 1 1 2. - 1 - -4.0897028520703316e-003 - -0.2681294083595276 - 0.0277175307273865 - <_> - - <_> - - - - <_> - 16 3 2 3 -1. - <_> - 15 4 2 1 3. - 1 - -9.0142004191875458e-003 - 0.1276749074459076 - -0.0258717201650143 - <_> - - <_> - - - - <_> - 0 3 5 6 -1. - <_> - 0 6 5 3 2. - 0 - 0.0101045602932572 - 0.0417612902820110 - -0.1633320003747940 - <_> - - <_> - - - - <_> - 16 3 2 3 -1. - <_> - 15 4 2 1 3. - 1 - 0.0232086200267076 - -0.0154512897133827 - 0.2684479057788849 - <_> - - <_> - - - - <_> - 1 3 16 9 -1. - <_> - 1 6 16 3 3. - 0 - 0.1134508028626442 - -0.0744702816009521 - 0.1102133989334106 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - -1.1667109793052077e-003 - -0.0686589777469635 - 0.0979631170630455 - <_> - - <_> - - - - <_> - 1 11 2 2 -1. - <_> - 1 11 1 1 2. - <_> - 2 12 1 1 2. - 0 - 6.1848782934248447e-005 - -0.0807370617985725 - 0.0817197933793068 - <_> - - <_> - - - - <_> - 15 13 2 2 -1. - <_> - 16 13 1 1 2. - <_> - 15 14 1 1 2. - 0 - 2.7750380468205549e-005 - -0.0818600133061409 - 0.0863137766718864 - <_> - - <_> - - - - <_> - 1 13 2 2 -1. - <_> - 1 13 1 1 2. - <_> - 2 14 1 1 2. - 0 - 2.7259990019956604e-005 - -0.0809563770890236 - 0.0821038633584976 - <_> - - <_> - - - - <_> - 15 13 2 2 -1. - <_> - 16 13 1 1 2. - <_> - 15 14 1 1 2. - 0 - -2.9359169275267050e-005 - 0.1045090034604073 - -0.0726457983255386 - <_> - - <_> - - - - <_> - 1 13 2 2 -1. - <_> - 1 13 1 1 2. - <_> - 2 14 1 1 2. - 0 - -2.5649809686001390e-005 - 0.1062941998243332 - -0.0679890736937523 - <_> - - <_> - - - - <_> - 11 6 2 4 -1. - <_> - 10 7 2 2 2. - 1 - -0.0163933802396059 - -0.1715642064809799 - 0.0276966094970703 - <_> - - <_> - - - - <_> - 2 3 3 2 -1. - <_> - 3 4 1 2 3. - 1 - -0.0233597904443741 - 0.3885076045989990 - -0.0166453197598457 - <_> - - <_> - - - - <_> - 14 3 2 2 -1. - <_> - 15 3 1 1 2. - <_> - 14 4 1 1 2. - 0 - 2.2364470642060041e-003 - -0.0172002408653498 - 0.2104862928390503 - <_> - - <_> - - - - <_> - 6 2 6 4 -1. - <_> - 6 2 3 2 2. - <_> - 9 4 3 2 2. - 0 - -0.0127381896600127 - -0.2532509863376617 - 0.0284554697573185 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 2 2 1 9. - 0 - 0.0130351698026061 - -0.0366394892334938 - 0.0509026385843754 - <_> - - <_> - - - - <_> - 7 3 1 2 -1. - <_> - 7 4 1 1 2. - 0 - 2.8332999136182480e-005 - -0.0837918072938919 - 0.0838518589735031 - <_> - - <_> - - - - <_> - 12 1 6 4 -1. - <_> - 12 1 3 4 2. - 0 - 0.0123362001031637 - -0.0514171607792377 - 0.0532306805253029 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 12 3 3 2 3. - 1 - -0.0327928103506565 - 0.2327339947223663 - -0.0373882502317429 - <_> - - <_> - - - - <_> - 8 7 2 1 -1. - <_> - 8 7 1 1 2. - 0 - 2.0052760373800993e-003 - 0.0278136208653450 - -0.2950099110603333 - <_> - - <_> - - - - <_> - 0 1 6 4 -1. - <_> - 3 1 3 4 2. - 0 - 0.0139068197458982 - -0.0543732605874538 - 0.1252592056989670 - <_> - - <_> - - - - <_> - 1 1 16 7 -1. - <_> - 5 1 8 7 2. - 0 - 0.2173788994550705 - 0.0416372790932655 - -0.1780032962560654 - <_> - - <_> - - - - <_> - 3 3 12 9 -1. - <_> - 7 6 4 3 9. - 0 - 0.6798750162124634 - -0.0189819093793631 - 0.3512358963489533 - <_> - - <_> - - - - <_> - 6 8 7 2 -1. - <_> - 6 9 7 1 2. - 0 - -0.0497565008699894 - -0.8002396821975708 - 9.7657497972249985e-003 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 4 1 3 1 3. - 0 - 4.5796870253980160e-003 - 0.0210781805217266 - -0.2844468951225281 - -1.2603249549865723 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 1 8 2 -1. - <_> - 9 3 4 2 2. - 1 - 0.1051426008343697 - -0.1030462011694908 - 0.5264183282852173 - <_> - - <_> - - - - <_> - 6 5 8 5 -1. - <_> - 8 5 4 5 2. - 0 - 0.0218748692423105 - -0.1149196997284889 - 0.0879510119557381 - <_> - - <_> - - - - <_> - 6 0 4 11 -1. - <_> - 8 0 2 11 2. - 0 - 0.2591390013694763 - -1.8469070710125379e-005 - -789.6055297851562500 - <_> - - <_> - - - - <_> - 12 8 6 5 -1. - <_> - 12 8 3 5 2. - 0 - -8.2329362630844116e-003 - 0.1215251982212067 - -0.2199721932411194 - <_> - - <_> - - - - <_> - 0 1 9 2 -1. - <_> - 3 1 3 2 3. - 0 - -7.4537489563226700e-003 - 0.1169904991984367 - -0.1987470984458923 - <_> - - <_> - - - - <_> - 12 8 6 5 -1. - <_> - 12 8 3 5 2. - 0 - 0.0507839918136597 - 0.0343447588384151 - -0.1997928023338318 - <_> - - <_> - - - - <_> - 0 8 6 5 -1. - <_> - 3 8 3 5 2. - 0 - -5.3065801039338112e-003 - 0.1021941006183624 - -0.2324876040220261 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 1 - -0.0198521409183741 - -0.5773574709892273 - 0.0107486303895712 - <_> - - <_> - - - - <_> - 9 1 1 4 -1. - <_> - 9 1 1 2 2. - 1 - 0.0251020099967718 - 0.0335165187716484 - -0.5189111232757568 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 1 11 16 1 2. - 0 - 3.9596240967512131e-003 - -0.1546567976474762 - 0.1001181975007057 - <_> - - <_> - - - - <_> - 3 2 12 2 -1. - <_> - 3 2 6 1 2. - <_> - 9 3 6 1 2. - 0 - -5.9100659564137459e-003 - -0.3358919024467468 - 0.0603443384170532 - <_> - - <_> - - - - <_> - 15 0 3 2 -1. - <_> - 16 1 1 2 3. - 1 - 9.0328548103570938e-003 - -0.0104679698124528 - -0.3561008870601654 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - 8.5141025483608246e-003 - 0.0334267392754555 - -0.4149996042251587 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 7 0 4 1 3. - 0 - 0.0145813003182411 - -0.1194749996066093 - 0.1058669984340668 - <_> - - <_> - - - - <_> - 9 2 9 2 -1. - <_> - 12 5 3 2 3. - 1 - 0.1152421012520790 - -0.0234193205833435 - 0.3951525986194611 - <_> - - <_> - - - - <_> - 16 0 2 6 -1. - <_> - 16 3 2 3 2. - 0 - -2.1557710133492947e-003 - 0.1136960014700890 - -0.1149196028709412 - <_> - - <_> - - - - <_> - 0 6 18 6 -1. - <_> - 0 6 9 3 2. - <_> - 9 9 9 3 2. - 0 - -0.1315298974514008 - -0.4076144099235535 - 0.0280955005437136 - <_> - - <_> - - - - <_> - 0 1 18 6 -1. - <_> - 9 1 9 3 2. - <_> - 0 4 9 3 2. - 0 - 0.0877189636230469 - 0.0119158001616597 - -0.6239578723907471 - <_> - - <_> - - - - <_> - 6 0 6 1 -1. - <_> - 9 0 3 1 2. - 0 - 5.1810648292303085e-003 - -0.1093714982271195 - 0.1119602024555206 - <_> - - <_> - - - - <_> - 9 5 1 2 -1. - <_> - 9 5 1 1 2. - 1 - -3.5339239984750748e-003 - 0.1208496019244194 - -5.4252031259238720e-003 - <_> - - <_> - - - - <_> - 9 5 2 1 -1. - <_> - 9 5 1 1 2. - 1 - 1.1804329697042704e-003 - -0.1230735033750534 - 0.1281574070453644 - <_> - - <_> - - - - <_> - 7 1 5 2 -1. - <_> - 7 2 5 1 2. - 0 - 5.6288531050086021e-003 - 0.0316065102815628 - -0.2810359895229340 - <_> - - <_> - - - - <_> - 5 8 1 3 -1. - <_> - 5 9 1 1 3. - 0 - 9.9457567557692528e-004 - -0.0659783333539963 - 0.1489125043153763 - <_> - - <_> - - - - <_> - 7 7 5 2 -1. - <_> - 7 8 5 1 2. - 0 - -3.7337269168347120e-003 - 0.0598995685577393 - -0.1800362020730972 - <_> - - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 7 7 3 1 3. - 1 - 1.0250649938825518e-004 - -0.0862240791320801 - 0.1390471011400223 - <_> - - <_> - - - - <_> - 11 9 3 2 -1. - <_> - 11 10 3 1 2. - 0 - 4.1721882298588753e-003 - -0.0246597994118929 - 0.0794360563158989 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 0 8 9 2 2. - <_> - 9 10 9 2 2. - 0 - 0.0485266894102097 - 0.0381521992385387 - -0.3375906944274902 - <_> - - <_> - - - - <_> - 16 8 2 3 -1. - <_> - 16 9 2 1 3. - 0 - 8.4143159911036491e-003 - 5.1525980234146118e-003 - -0.1651131063699722 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 0 9 2 1 3. - 0 - -3.5702888853847980e-003 - -0.2356259971857071 - 0.0417603217065334 - <_> - - <_> - - - - <_> - 11 8 4 6 -1. - <_> - 11 10 4 2 3. - 0 - 0.0222564004361629 - -0.0281212199479342 - 0.1349356025457382 - <_> - - <_> - - - - <_> - 0 11 18 2 -1. - <_> - 0 12 18 1 2. - 0 - 3.8191271014511585e-003 - -0.1185360997915268 - 0.0843502730131149 - <_> - - <_> - - - - <_> - 2 5 14 8 -1. - <_> - 2 7 14 4 2. - 0 - 0.1453399956226349 - -0.0286314208060503 - 0.3568331897258759 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 9 2 1 2. - 0 - -8.9769659098237753e-004 - 0.0549010299146175 - -0.1785632967948914 - <_> - - <_> - - - - <_> - 11 8 4 6 -1. - <_> - 11 10 4 2 3. - 0 - 0.0416826009750366 - -0.0183632392436266 - 0.1616858989000320 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 9 0 3 3 2. - 0 - 0.0501397587358952 - -0.0449284687638283 - 0.2146534025669098 - <_> - - <_> - - - - <_> - 7 1 4 2 -1. - <_> - 9 1 2 1 2. - <_> - 7 2 2 1 2. - 0 - 3.0929069034755230e-003 - 0.0301715005189180 - -0.3513563871383667 - <_> - - <_> - - - - <_> - 3 8 4 6 -1. - <_> - 3 10 4 2 3. - 0 - 0.0181560907512903 - -0.0552617982029915 - 0.1947118937969208 - <_> - - <_> - - - - <_> - 6 6 6 4 -1. - <_> - 9 6 3 2 2. - <_> - 6 8 3 2 2. - 0 - 0.0202469304203987 - 0.0373657196760178 - -0.3007850944995880 - <_> - - <_> - - - - <_> - 1 7 6 3 -1. - <_> - 3 8 2 1 9. - 0 - 0.0117160901427269 - -0.0614580996334553 - 0.1639769971370697 - <_> - - <_> - - - - <_> - 10 7 2 3 -1. - <_> - 9 8 2 1 3. - 1 - -8.1182513386011124e-003 - -0.0887261107563972 - 0.0327240005135536 - <_> - - <_> - - - - <_> - 0 8 18 6 -1. - <_> - 0 8 9 3 2. - <_> - 9 11 9 3 2. - 0 - -0.1468164026737213 - -0.4930160939693451 - 0.0201582796871662 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 2 1 1 3. - 1 - -5.2891620434820652e-003 - -0.2514236867427826 - 9.5387678593397141e-003 - <_> - - <_> - - - - <_> - 5 0 8 5 -1. - <_> - 7 0 4 5 2. - 0 - -0.0148622198030353 - 0.2594371140003204 - -0.0313785411417484 - <_> - - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 10 3 1 2 3. - 1 - -0.0177154596894979 - -0.5113834142684937 - 7.5401309877634048e-003 - <_> - - <_> - - - - <_> - 7 2 2 1 -1. - <_> - 7 2 1 1 2. - 1 - -9.5196522306650877e-004 - 0.0692363083362579 - -0.1258170008659363 - <_> - - <_> - - - - <_> - 12 1 6 3 -1. - <_> - 11 2 6 1 3. - 1 - 0.0662163421511650 - -9.8208645358681679e-003 - 0.3608235120773315 - <_> - - <_> - - - - <_> - 6 1 3 6 -1. - <_> - 7 2 1 6 3. - 1 - 8.2799885421991348e-003 - -0.0748182237148285 - 0.1512002944946289 - <_> - - <_> - - - - <_> - 1 3 16 4 -1. - <_> - 9 3 8 2 2. - <_> - 1 5 8 2 2. - 0 - 0.0126259000971913 - 0.0625171065330505 - -0.1584693044424057 - <_> - - <_> - - - - <_> - 9 4 4 4 -1. - <_> - 8 5 4 2 2. - 1 - -0.0506105907261372 - 0.4304474890232086 - -0.0195215903222561 - <_> - - <_> - - - - <_> - 3 0 15 14 -1. - <_> - 8 0 5 14 3. - 0 - 0.6441524028778076 - 0.0196064803749323 - -0.3712278902530670 - <_> - - <_> - - - - <_> - 3 1 12 10 -1. - <_> - 6 1 6 10 2. - 0 - 0.0629194527864456 - -0.1244589984416962 - 0.0681276023387909 - <_> - - <_> - - - - <_> - 15 11 3 1 -1. - <_> - 16 12 1 1 3. - 1 - 0.0158867593854666 - 3.7582379300147295e-003 - -0.2513279914855957 - <_> - - <_> - - - - <_> - 3 11 1 3 -1. - <_> - 2 12 1 1 3. - 1 - -2.3676711134612560e-003 - -0.1814053952693939 - 0.0453032106161118 - <_> - - <_> - - - - <_> - 15 0 1 14 -1. - <_> - 15 7 1 7 2. - 0 - 0.0252422392368317 - 0.0168007891625166 - -0.3151563107967377 - <_> - - <_> - - - - <_> - 8 3 2 6 -1. - <_> - 8 6 2 3 2. - 0 - 0.0137373497709632 - -0.0329083986580372 - 0.2309325933456421 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 7 4 1 2. - 0 - -2.1248359698802233e-003 - 0.0645555630326271 - -0.1412463039159775 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 1 2 2 2. - 0 - -6.0910829342901707e-003 - -0.4605179131031036 - 0.0166283007711172 - <_> - - <_> - - - - <_> - 12 3 1 3 -1. - <_> - 12 4 1 1 3. - 0 - 4.0456880815327168e-003 - 8.3615174517035484e-003 - -0.2696534991264343 - <_> - - <_> - - - - <_> - 4 0 9 9 -1. - <_> - 7 0 3 9 3. - 0 - -0.0344691611826420 - 0.2158204019069672 - -0.0349247604608536 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 2 1 1 3. - 1 - 8.9153727458324283e-005 - -0.0510439388453960 - 0.0346905216574669 - <_> - - <_> - - - - <_> - 9 1 1 3 -1. - <_> - 8 2 1 1 3. - 1 - -6.6213719546794891e-003 - -0.4158585965633392 - 0.0193911194801331 - <_> - - <_> - - - - <_> - 6 7 12 8 -1. - <_> - 6 7 6 8 2. - 0 - 0.1363825052976608 - -0.0445473901927471 - 0.1760841012001038 - <_> - - <_> - - - - <_> - 7 1 2 3 -1. - <_> - 8 1 1 3 2. - 0 - 2.5193500332534313e-003 - -0.0905184969305992 - 0.0875409692525864 - <_> - - <_> - - - - <_> - 2 4 14 6 -1. - <_> - 2 6 14 2 3. - 0 - -0.0783995389938354 - 0.2648878097534180 - -0.0324346311390400 - <_> - - <_> - - - - <_> - 4 4 3 6 -1. - <_> - 4 6 3 2 3. - 0 - 7.1002319455146790e-003 - -0.1140376999974251 - 0.1040271967649460 - <_> - - <_> - - - - <_> - 12 1 5 8 -1. - <_> - 12 5 5 4 2. - 0 - -0.0626892074942589 - -0.0568519681692123 - 0.0147632304579020 - <_> - - <_> - - - - <_> - 1 1 5 8 -1. - <_> - 1 5 5 4 2. - 0 - 0.0698204934597015 - 0.0167288593947887 - -0.5039923191070557 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 14 1 3 1 3. - 1 - 0.0102383298799396 - -0.0286362692713737 - 0.1852203011512756 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 4 1 1 3 3. - 1 - -0.0149942804127932 - 0.2242967933416367 - -0.0332668386399746 - <_> - - <_> - - - - <_> - 6 0 10 2 -1. - <_> - 11 0 5 1 2. - <_> - 6 1 5 1 2. - 0 - 5.2933390252292156e-003 - 0.0299122091382742 - -0.2173777073621750 - <_> - - <_> - - - - <_> - 1 0 16 2 -1. - <_> - 1 0 8 1 2. - <_> - 9 1 8 1 2. - 0 - 8.0084912478923798e-003 - 0.0341741293668747 - -0.2623764872550964 - <_> - - <_> - - - - <_> - 6 3 12 6 -1. - <_> - 9 3 6 6 2. - 0 - 0.1146114021539688 - -0.0244884397834539 - 0.0970916673541069 - <_> - - <_> - - - - <_> - 6 6 6 3 -1. - <_> - 8 7 2 1 9. - 0 - -0.0521271787583828 - -0.6413993835449219 - 0.0115570602938533 - <_> - - <_> - - - - <_> - 6 1 12 10 -1. - <_> - 6 1 6 10 2. - 0 - 0.0748131424188614 - -0.0502658300101757 - 0.0502240210771561 - <_> - - <_> - - - - <_> - 2 13 6 2 -1. - <_> - 4 13 2 2 3. - 0 - -0.0191232096403837 - -0.3109129071235657 - 0.0227278098464012 - <_> - - <_> - - - - <_> - 12 0 6 3 -1. - <_> - 11 1 6 1 3. - 1 - 0.0540968813002110 - -9.0643512085080147e-003 - 0.2507429122924805 - <_> - - <_> - - - - <_> - 6 0 3 6 -1. - <_> - 7 1 1 6 3. - 1 - -0.0256583709269762 - 0.2121652960777283 - -0.0351778715848923 - <_> - - <_> - - - - <_> - 8 4 10 4 -1. - <_> - 8 4 5 4 2. - 0 - 0.1509605050086975 - 0.0186689905822277 - -0.2159824073314667 - <_> - - <_> - - - - <_> - 0 4 10 4 -1. - <_> - 5 4 5 4 2. - 0 - 0.1112224012613297 - 0.0342452004551888 - -0.2157337963581085 - <_> - - <_> - - - - <_> - 16 9 2 4 -1. - <_> - 16 10 2 2 2. - 0 - 6.0547110479092225e-005 - -0.0372137017548084 - 0.0372152701020241 - <_> - - <_> - - - - <_> - 1 13 16 2 -1. - <_> - 1 14 16 1 2. - 0 - 5.8619431219995022e-003 - -0.0773961320519447 - 0.0930630415678024 - <_> - - <_> - - - - <_> - 2 13 14 2 -1. - <_> - 2 14 14 1 2. - 0 - -0.0341941900551319 - 0.3447993993759155 - -0.0335593782365322 - <_> - - <_> - - - - <_> - 0 9 2 4 -1. - <_> - 0 10 2 2 2. - 0 - -7.2817560285329819e-003 - -0.2960028946399689 - 0.0260884091258049 - <_> - - <_> - - - - <_> - 2 7 15 3 -1. - <_> - 2 8 15 1 3. - 0 - 0.0109525797888637 - -0.0587211996316910 - 0.1384337991476059 - <_> - - <_> - - - - <_> - 3 1 12 8 -1. - <_> - 3 3 12 4 2. - 0 - 0.0810781270265579 - -0.0729383602738380 - 0.0964554026722908 - <_> - - <_> - - - - <_> - 11 4 3 6 -1. - <_> - 9 6 3 2 3. - 1 - 0.1066536009311676 - -0.0128484796732664 - 0.1897089034318924 - <_> - - <_> - - - - <_> - 7 4 6 3 -1. - <_> - 9 6 2 3 3. - 1 - -0.0685272365808487 - -0.3246979117393494 - 0.0234368797391653 - <_> - - <_> - - - - <_> - 8 0 8 13 -1. - <_> - 10 0 4 13 2. - 0 - 0.0367356203496456 - -0.0583354011178017 - 0.0843546465039253 - <_> - - <_> - - - - <_> - 1 0 12 7 -1. - <_> - 5 0 4 7 3. - 0 - 0.0846856981515884 - -0.0645033568143845 - 0.1606536060571671 - <_> - - <_> - - - - <_> - 10 9 6 2 -1. - <_> - 13 9 3 1 2. - <_> - 10 10 3 1 2. - 0 - 3.6365711130201817e-003 - -0.0495950989425182 - 0.1717385947704315 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - -4.8055797815322876e-003 - -0.2732417881488800 - 0.0275324694812298 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 1 1 2 3. - 1 - -9.6100764349102974e-003 - -0.2327723056077957 - 0.0202909894287586 - <_> - - <_> - - - - <_> - 6 1 10 4 -1. - <_> - 5 2 10 2 2. - 1 - 0.0781866833567619 - 0.0119251701980829 - -0.5618839263916016 - <_> - - <_> - - - - <_> - 15 2 3 8 -1. - <_> - 16 3 1 8 3. - 1 - 0.0749451220035553 - 2.2771470248699188e-003 - -0.6749752163887024 - <_> - - <_> - - - - <_> - 3 2 8 3 -1. - <_> - 2 3 8 1 3. - 1 - -0.0366185903549194 - 0.1956354975700378 - -0.0443037599325180 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 1 1 2 3. - 1 - 2.5921240448951721e-003 - 0.0411940589547157 - -0.1164683029055595 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 6.7376391962170601e-003 - 0.0310751292854548 - -0.2554813921451569 - <_> - - <_> - - - - <_> - 15 5 2 4 -1. - <_> - 16 5 1 2 2. - <_> - 15 7 1 2 2. - 0 - 2.8166980482637882e-003 - -0.0413872785866261 - 0.2016701996326447 - <_> - - <_> - - - - <_> - 3 0 2 14 -1. - <_> - 3 7 2 7 2. - 0 - 0.0658822432160378 - 0.0130075104534626 - -0.5545914173126221 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - 1.5577779849991202e-003 - -0.0237464196980000 - 0.0413672998547554 - <_> - - <_> - - - - <_> - 0 6 2 3 -1. - <_> - 0 7 2 1 3. - 0 - -5.4769590497016907e-003 - -0.2681433856487274 - 0.0244701895862818 - <_> - - <_> - - - - <_> - 15 5 2 4 -1. - <_> - 16 5 1 2 2. - <_> - 15 7 1 2 2. - 0 - -5.5535528808832169e-003 - 0.2032303065061569 - -0.0357219502329826 - <_> - - <_> - - - - <_> - 1 0 8 6 -1. - <_> - 1 3 8 3 2. - 0 - -0.0669888928532600 - -0.5183855295181274 - 0.0108443703502417 - <_> - - <_> - - - - <_> - 16 0 2 6 -1. - <_> - 16 3 2 3 2. - 0 - 0.0414705388247967 - 2.7333609759807587e-003 - -0.3563300967216492 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 0 3 2 3 2. - 0 - -3.4693330526351929e-003 - 0.0982717424631119 - -0.0729679390788078 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - -8.2196565344929695e-003 - 0.1082827970385552 - -0.0472562387585640 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 9.9876541644334793e-003 - -0.0470379404723644 - 0.1751355975866318 - <_> - - <_> - - - - <_> - 3 0 12 15 -1. - <_> - 3 0 6 15 2. - 0 - -0.2835718095302582 - 0.1180493980646133 - -0.0566624216735363 - <_> - - <_> - - - - <_> - 6 1 4 7 -1. - <_> - 8 1 2 7 2. - 0 - -0.0311159901320934 - 0.3807953000068665 - -0.0197968706488609 - <_> - - <_> - - - - <_> - 9 0 3 4 -1. - <_> - 10 1 1 4 3. - 1 - 0.0109928799793124 - 0.0220177192240953 - -0.0803828462958336 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 8 1 4 1 3. - 1 - -0.0165618509054184 - -0.4399909079074860 - 0.0151666197925806 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - 1.8488729838281870e-003 - -0.0196843091398478 - 0.1602668017148972 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - -6.8709079641848803e-005 - 0.0893735587596893 - -0.0703077465295792 - <_> - - <_> - - - - <_> - 15 2 2 2 -1. - <_> - 16 2 1 1 2. - <_> - 15 3 1 1 2. - 0 - -5.3440540796145797e-005 - 0.1077063977718353 - -0.0792713835835457 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - 5.1137150876456872e-005 - -0.0742689892649651 - 0.0928685069084167 - <_> - - <_> - - - - <_> - 10 3 3 1 -1. - <_> - 11 4 1 1 3. - 1 - -0.0109409997239709 - -0.6095427870750427 - 7.1117929182946682e-003 - <_> - - <_> - - - - <_> - 5 0 9 4 -1. - <_> - 5 0 9 2 2. - 1 - 0.1670096963644028 - 0.0173986200243235 - -0.3483031988143921 - <_> - - <_> - - - - <_> - 10 2 3 7 -1. - <_> - 11 3 1 7 3. - 1 - -0.0536270104348660 - -0.2517541944980621 - 3.0668680556118488e-003 - <_> - - <_> - - - - <_> - 8 2 7 3 -1. - <_> - 7 3 7 1 3. - 1 - -0.0168547891080379 - -0.2322666049003601 - 0.0295417997986078 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - -6.6016108030453324e-004 - 0.0844743698835373 - -0.0292119607329369 - <_> - - <_> - - - - <_> - 6 6 2 2 -1. - <_> - 6 6 1 1 2. - <_> - 7 7 1 1 2. - 0 - 5.8979410823667422e-005 - -0.0716504007577896 - 0.0894464477896690 - <_> - - <_> - - - - <_> - 7 4 4 4 -1. - <_> - 7 6 4 2 2. - 0 - -0.0290991999208927 - 0.1513338983058929 - -0.0443021915853024 - <_> - - <_> - - - - <_> - 0 1 10 6 -1. - <_> - 0 3 10 2 3. - 0 - 0.0603702887892723 - 0.0239160899072886 - -0.2869639098644257 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - 5.2198538469383493e-005 - -0.0552247799932957 - 0.0630851984024048 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - -5.3573388868244365e-005 - 0.0917791575193405 - -0.0733837336301804 - <_> - - <_> - - - - <_> - 6 7 12 8 -1. - <_> - 6 7 6 8 2. - 0 - -0.0921942219138145 - 0.0845907479524612 - -0.0435498803853989 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 6 7 3 1 3. - 1 - 6.8016350269317627e-003 - -0.0395293086767197 - 0.1772428005933762 - <_> - - <_> - - - - <_> - 13 8 2 5 -1. - <_> - 13 8 1 5 2. - 1 - 0.0136591903865337 - -0.0314534008502960 - 0.0921841263771057 - <_> - - <_> - - - - <_> - 7 7 4 4 -1. - <_> - 7 7 4 2 2. - 1 - -0.0202402602881193 - 0.1293997019529343 - -0.0722166895866394 - <_> - - <_> - - - - <_> - 6 7 12 8 -1. - <_> - 6 7 6 8 2. - 0 - -0.3310942053794861 - -0.5684415102005005 - 4.8965080641210079e-003 - <_> - - <_> - - - - <_> - 0 2 12 13 -1. - <_> - 6 2 6 13 2. - 0 - -0.3559010922908783 - -0.6088926196098328 - 0.0121664199978113 - <_> - - <_> - - - - <_> - 0 8 18 6 -1. - <_> - 0 11 18 3 2. - 0 - 0.3267132937908173 - 0.0114083802327514 - -0.5427042245864868 - <_> - - <_> - - - - <_> - 2 2 4 13 -1. - <_> - 3 2 2 13 2. - 0 - -0.0637968480587006 - -0.8073747158050537 - 7.3937238194048405e-003 - <_> - - <_> - - - - <_> - 10 3 3 1 -1. - <_> - 11 4 1 1 3. - 1 - 4.1656321845948696e-003 - 0.0186478793621063 - -0.0633438527584076 - <_> - - <_> - - - - <_> - 3 2 12 9 -1. - <_> - 7 5 4 3 9. - 0 - 0.6281797885894775 - -0.0229623205959797 - 0.2844201028347015 - <_> - - <_> - - - - <_> - 10 3 3 1 -1. - <_> - 11 4 1 1 3. - 1 - 5.7043769629672170e-005 - -0.0583966001868248 - 0.0271189305931330 - <_> - - <_> - - - - <_> - 8 3 1 3 -1. - <_> - 7 4 1 1 3. - 1 - -8.2484260201454163e-003 - -0.3674455881118774 - 0.0179638694971800 - <_> - - <_> - - - - <_> - 9 2 8 6 -1. - <_> - 9 2 4 6 2. - 0 - 0.2131956070661545 - 4.8015988431870937e-003 - -0.2512898147106171 - <_> - - <_> - - - - <_> - 1 2 8 6 -1. - <_> - 5 2 4 6 2. - 0 - -0.0926481783390045 - 0.4080882966518402 - -0.0169616807252169 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 1 - 6.7387576564215124e-005 - -0.1143013015389442 - 0.0627095922827721 - <_> - - <_> - - - - <_> - 6 0 1 2 -1. - <_> - 6 0 1 1 2. - 1 - -5.2264030091464520e-003 - -0.3810344934463501 - 0.0188566204160452 - <_> - - <_> - - - - <_> - 10 0 4 2 -1. - <_> - 10 1 4 1 2. - 0 - -4.5156818814575672e-003 - -0.3234907984733582 - 0.0157586503773928 - <_> - - <_> - - - - <_> - 4 0 8 2 -1. - <_> - 4 0 4 1 2. - <_> - 8 1 4 1 2. - 0 - 3.1322699505835772e-003 - 0.0371164008975029 - -0.1631309986114502 - <_> - - <_> - - - - <_> - 7 12 8 3 -1. - <_> - 9 12 4 3 2. - 0 - -0.0309491790831089 - -0.2248778045177460 - 0.0159355606883764 - <_> - - <_> - - - - <_> - 1 13 16 1 -1. - <_> - 5 13 8 1 2. - 0 - -0.0119997104629874 - 0.1060421019792557 - -0.0560035184025764 - <_> - - <_> - - - - <_> - 7 13 10 1 -1. - <_> - 7 13 5 1 2. - 0 - 0.0336425602436066 - 9.4332182779908180e-003 - -0.2461027950048447 - <_> - - <_> - - - - <_> - 1 13 10 1 -1. - <_> - 6 13 5 1 2. - 0 - 0.0119730802252889 - -0.0456926003098488 - 0.1521279066801071 - <_> - - <_> - - - - <_> - 0 13 18 2 -1. - <_> - 0 13 9 2 2. - 0 - -0.1410526931285858 - -0.4025206863880158 - 0.0161248706281185 - <_> - - <_> - - - - <_> - 4 6 3 2 -1. - <_> - 5 7 1 2 3. - 1 - -5.8696339838206768e-003 - 0.1223559975624085 - -0.0487510599195957 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - 2.1555710118263960e-003 - -0.0184163097292185 - 0.1451521962881088 - <_> - - <_> - - - - <_> - 1 12 13 2 -1. - <_> - 1 13 13 1 2. - 0 - 2.4534349795430899e-003 - -0.0905656665563583 - 0.0633557364344597 - <_> - - <_> - - - - <_> - 11 9 3 6 -1. - <_> - 11 11 3 2 3. - 0 - 5.2382410503923893e-003 - -0.0410471595823765 - 0.0727308094501495 - <_> - - <_> - - - - <_> - 8 7 4 2 -1. - <_> - 9 8 2 2 2. - 1 - -0.0143192103132606 - -0.1792961955070496 - 0.0365735515952110 - <_> - - <_> - - - - <_> - 11 5 1 3 -1. - <_> - 10 6 1 1 3. - 1 - -0.0105856303125620 - -0.3884933888912201 - 7.9265926033258438e-003 - <_> - - <_> - - - - <_> - 1 9 8 4 -1. - <_> - 1 9 4 2 2. - <_> - 5 11 4 2 2. - 0 - 8.9276917278766632e-003 - -0.0575792603194714 - 0.1015077978372574 - <_> - - <_> - - - - <_> - 10 5 8 10 -1. - <_> - 14 5 4 5 2. - <_> - 10 10 4 5 2. - 0 - 0.0579179786145687 - 0.0137350102886558 - -0.1917247027158737 - <_> - - <_> - - - - <_> - 2 10 3 2 -1. - <_> - 3 11 1 2 3. - 1 - -9.2071853578090668e-003 - -0.2001218944787979 - 0.0331920385360718 - <_> - - <_> - - - - <_> - 1 1 16 9 -1. - <_> - 1 4 16 3 3. - 0 - -0.0835009291768074 - 0.2925198078155518 - -0.0229036696255207 - <_> - - <_> - - - - <_> - 7 4 4 2 -1. - <_> - 8 5 2 2 2. - 1 - -4.5707109384238720e-003 - -0.1910977959632874 - 0.0408679395914078 - <_> - - <_> - - - - <_> - 12 0 6 3 -1. - <_> - 14 2 2 3 3. - 1 - -0.0281076692044735 - -0.1395559012889862 - 0.0228978395462036 - <_> - - <_> - - - - <_> - 1 12 6 3 -1. - <_> - 3 12 2 3 3. - 0 - -0.0228165406733751 - -0.2577002942562103 - 0.0229892395436764 - <_> - - <_> - - - - <_> - 11 7 3 2 -1. - <_> - 12 8 1 2 3. - 1 - -5.2285268902778625e-003 - -0.0617472901940346 - 0.0377134010195732 - <_> - - <_> - - - - <_> - 4 8 4 4 -1. - <_> - 4 8 2 2 2. - <_> - 6 10 2 2 2. - 0 - 6.0513508506119251e-003 - -0.0416271314024925 - 0.1556749045848846 - <_> - - <_> - - - - <_> - 6 0 9 11 -1. - <_> - 9 0 3 11 3. - 0 - -0.0407820083200932 - 0.2559697926044464 - -0.0251890700310469 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 10 2 2 1 3. - 1 - 6.2671699561178684e-003 - -0.0976725667715073 - 0.0727524906396866 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 10 2 1 2. - 0 - -1.1280509643256664e-003 - 0.0736560374498367 - -0.1138757988810539 - <_> - - <_> - - - - <_> - 0 9 17 2 -1. - <_> - 0 10 17 1 2. - 0 - 6.8747308105230331e-003 - -0.0667891502380371 - 0.1315107941627502 - <_> - - <_> - - - - <_> - 2 0 14 6 -1. - <_> - 2 3 14 3 2. - 0 - -0.0337627902626991 - -0.1893121004104614 - 0.0347666181623936 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 13 1 1 2. - <_> - 1 14 1 1 2. - 0 - 5.1757418987108395e-005 - -0.0780986174941063 - 0.0798301994800568 - <_> - - <_> - - - - <_> - 5 4 10 10 -1. - <_> - 10 4 5 5 2. - <_> - 5 9 5 5 2. - 0 - 0.1017585024237633 - 0.0175233595073223 - -0.2194790989160538 - <_> - - <_> - - - - <_> - 3 1 12 9 -1. - <_> - 7 4 4 3 9. - 0 - 0.1176455989480019 - 0.1473899036645889 - -0.0428058393299580 - <_> - - <_> - - - - <_> - 12 4 5 6 -1. - <_> - 12 4 5 3 2. - 1 - -0.1903167963027954 - -0.3762378990650177 - 3.8982050027698278e-003 - <_> - - <_> - - - - <_> - 6 4 6 5 -1. - <_> - 6 4 3 5 2. - 1 - 0.2182461023330689 - 7.8864647075533867e-003 - -0.6451690196990967 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 9 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 6.1720587837044150e-005 - -0.0688135400414467 - 0.0783134102821350 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 8 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 7.6815136708319187e-005 - -0.0691982433199883 - 0.0981492102146149 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 8 2 1 2. - 0 - -1.5573709970340133e-003 - 0.0455104112625122 - -0.1185887008905411 - <_> - - <_> - - - - <_> - 0 8 18 3 -1. - <_> - 0 9 18 1 3. - 0 - 0.0153560703620315 - -0.0377323292195797 - 0.1619653999805450 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 8 7 1 1 3. - 1 - -6.4422818832099438e-004 - -0.0492143407464027 - 0.0385965816676617 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 6 1 2 1 3. - 0 - 3.0240670312196016e-003 - 0.0198773108422756 - -0.2735247015953064 - <_> - - <_> - - - - <_> - 12 5 6 10 -1. - <_> - 12 10 6 5 2. - 0 - -0.2404906004667282 - -0.3223324120044708 - 9.9804811179637909e-003 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - -6.8453960120677948e-003 - -0.2682495117187500 - 0.0200939793139696 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 5 12 2 2. - 0 - -0.0982210710644722 - 0.3673144876956940 - -0.0167514402419329 - <_> - - <_> - - - - <_> - 5 5 7 3 -1. - <_> - 5 6 7 1 3. - 0 - -0.0333984605967999 - -0.7586281895637512 - 9.9286399781703949e-003 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - -0.0322372205555439 - 0.2238357961177826 - -0.0126148099079728 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 5 2 1 4 3. - 1 - -0.0332839600741863 - 0.2973837852478027 - -0.0196489002555609 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - -6.3496932853013277e-005 - 0.0579334609210491 - -0.0438858605921268 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - 7.6012212957721204e-005 - -0.0718164891004562 - 0.0869365110993385 - <_> - - <_> - - - - <_> - 10 0 4 2 -1. - <_> - 11 1 2 2 2. - 1 - 0.0270447190850973 - 7.5920550152659416e-003 - -0.5451955795288086 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 7 1 2 2 2. - 1 - 9.8314275965094566e-003 - 0.0235845800489187 - -0.2437285035848618 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - -0.0142732895910740 - 0.1202424988150597 - -0.0208050198853016 - <_> - - <_> - - - - <_> - 0 5 1 4 -1. - <_> - 0 6 1 2 2. - 0 - 3.4047421067953110e-003 - 0.0242772400379181 - -0.2434611022472382 - <_> - - <_> - - - - <_> - 15 5 2 3 -1. - <_> - 14 6 2 1 3. - 1 - -2.1703050006181002e-003 - 0.0476825311779976 - -0.0285765398293734 - <_> - - <_> - - - - <_> - 0 4 18 6 -1. - <_> - 0 6 18 2 3. - 0 - 0.0646167024970055 - -0.0725622028112412 - 0.0955711901187897 - <_> - - <_> - - - - <_> - 15 5 2 3 -1. - <_> - 14 6 2 1 3. - 1 - -0.0361361317336559 - -0.2291781008243561 - 2.1050409413874149e-003 - <_> - - <_> - - - - <_> - 3 5 3 2 -1. - <_> - 4 6 1 2 3. - 1 - -0.0191675499081612 - 0.3006345927715302 - -0.0226390194147825 - <_> - - <_> - - - - <_> - 11 6 1 4 -1. - <_> - 10 7 1 2 2. - 1 - 0.0103014996275306 - 0.0199798997491598 - -0.1185344010591507 - <_> - - <_> - - - - <_> - 2 8 4 7 -1. - <_> - 3 8 2 7 2. - 0 - 0.0250420607626438 - 0.0137328598648310 - -0.4401232004165649 - <_> - - <_> - - - - <_> - 9 0 9 4 -1. - <_> - 9 0 9 2 2. - 1 - 0.1180287972092629 - -0.0238245893269777 - 0.0961270332336426 - <_> - - <_> - - - - <_> - 1 9 6 6 -1. - <_> - 3 11 2 2 9. - 0 - -8.2905329763889313e-003 - -0.0817760676145554 - 0.0683934092521667 - <_> - - <_> - - - - <_> - 12 5 6 10 -1. - <_> - 12 10 6 5 2. - 0 - -0.0107107702642679 - 0.0433344282209873 - -0.0750979110598564 - <_> - - <_> - - - - <_> - 0 0 15 14 -1. - <_> - 5 0 5 14 3. - 0 - 0.2691828906536102 - -0.0395036600530148 - 0.1450473070144653 - <_> - - <_> - - - - <_> - 7 3 4 9 -1. - <_> - 7 3 2 9 2. - 0 - -0.0227638091892004 - 0.0996726229786873 - -0.0775553807616234 - <_> - - <_> - - - - <_> - 9 0 4 9 -1. - <_> - 9 0 2 9 2. - 1 - -0.1211519017815590 - -0.3949747085571289 - 0.0166401192545891 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - 7.1451293479185551e-005 - -0.0532115213572979 - 0.0365702211856842 - <_> - - <_> - - - - <_> - 5 4 6 3 -1. - <_> - 7 4 2 3 3. - 0 - 3.8077360950410366e-003 - -0.0913413763046265 - 0.0747274905443192 - <_> - - <_> - - - - <_> - 5 0 8 8 -1. - <_> - 7 0 4 8 2. - 0 - -0.0622831098735332 - 0.4490456879138947 - -0.0142916804179549 - <_> - - <_> - - - - <_> - 3 4 3 3 -1. - <_> - 4 5 1 3 3. - 1 - -0.0165455099195242 - 0.2153764069080353 - -0.0266895107924938 - <_> - - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 10 3 1 2 3. - 1 - -9.5320530235767365e-003 - -0.1502870023250580 - 8.1632016226649284e-003 - <_> - - <_> - - - - <_> - 3 14 2 1 -1. - <_> - 4 14 1 1 2. - 0 - -5.1539638661779463e-005 - 0.0777021870017052 - -0.0744352191686630 - <_> - - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 10 3 1 2 3. - 1 - 8.1616528332233429e-003 - 0.0125406999140978 - -0.0472638383507729 - <_> - - <_> - - - - <_> - 9 2 2 3 -1. - <_> - 8 3 2 1 3. - 1 - -0.0160646103322506 - -0.6305596828460693 - 8.5211051627993584e-003 - <_> - - <_> - - - - <_> - 1 5 16 6 -1. - <_> - 1 7 16 2 3. - 0 - -0.0944218188524246 - 0.1380808949470520 - -0.0399546995759010 - <_> - - <_> - - - - <_> - 0 3 4 9 -1. - <_> - 0 6 4 3 3. - 0 - -0.0701284334063530 - -0.2750720083713532 - 0.0264193192124367 - <_> - - <_> - - - - <_> - 10 8 6 4 -1. - <_> - 13 8 3 2 2. - <_> - 10 10 3 2 2. - 0 - -0.0142810000106692 - 0.0840907394886017 - -0.0420290790498257 - <_> - - <_> - - - - <_> - 2 8 6 4 -1. - <_> - 2 8 3 2 2. - <_> - 5 10 3 2 2. - 0 - -0.0205234792083502 - 0.1520801037549973 - -0.0386744514107704 - <_> - - <_> - - - - <_> - 1 4 16 6 -1. - <_> - 5 4 8 6 2. - 0 - 0.3157497048377991 - 8.8831735774874687e-003 - -0.6855131983757019 - <_> - - <_> - - - - <_> - 6 2 2 1 -1. - <_> - 7 2 1 1 2. - 0 - 5.9291431680321693e-003 - 6.9111599586904049e-003 - -0.6073105931282044 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 9 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 6.0803038650192320e-005 - -0.0669746771454811 - 0.0759973376989365 - <_> - - <_> - - - - <_> - 2 8 6 4 -1. - <_> - 2 8 3 2 2. - <_> - 5 10 3 2 2. - 0 - 8.9074257994070649e-004 - -0.0574223808944225 - 0.0896140709519386 - <_> - - <_> - - - - <_> - 15 3 2 10 -1. - <_> - 15 3 1 10 2. - 1 - 0.0755855664610863 - 5.4939449764788151e-003 - -0.5068221092224121 - <_> - - <_> - - - - <_> - 3 3 10 2 -1. - <_> - 3 3 10 1 2. - 1 - 0.0170325208455324 - -0.0700998529791832 - 0.0843230485916138 - <_> - - <_> - - - - <_> - 0 12 18 2 -1. - <_> - 9 12 9 1 2. - <_> - 0 13 9 1 2. - 0 - 0.0122383302077651 - 0.0335065089166164 - -0.1545374989509583 - <_> - - <_> - - - - <_> - 5 9 6 4 -1. - <_> - 5 9 3 2 2. - <_> - 8 11 3 2 2. - 0 - 0.0126505699008703 - -0.0344986617565155 - 0.1735837012529373 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 16 0 1 2 2. - 1 - 3.9281910285353661e-003 - 0.0331528484821320 - -0.1206599026918411 - <_> - - <_> - - - - <_> - 0 7 7 8 -1. - <_> - 0 11 7 4 2. - 0 - -0.1848583966493607 - -0.4430884122848511 - 0.0122470501810312 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -6.5704691223800182e-003 - -0.2837153971195221 - 0.0119533604010940 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - -5.8720408560475335e-005 - 0.0606255605816841 - -0.0905942320823669 - <_> - - <_> - - - - <_> - 14 0 3 15 -1. - <_> - 15 0 1 15 3. - 0 - -2.1587649825960398e-003 - 0.0718974173069000 - -0.0716387107968330 - <_> - - <_> - - - - <_> - 1 0 3 15 -1. - <_> - 2 0 1 15 3. - 0 - -0.0426199585199356 - -0.6301267743110657 - 9.0704262256622314e-003 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 2 1 2 2. - 0 - -2.1494319662451744e-003 - 0.0701255127787590 - -0.0302376300096512 - <_> - - <_> - - - - <_> - 3 14 8 1 -1. - <_> - 5 14 4 1 2. - 0 - -9.0273208916187286e-003 - -0.2084393054246903 - 0.0256627295166254 - <_> - - <_> - - - - <_> - 17 3 1 8 -1. - <_> - 17 7 1 4 2. - 0 - -0.0193650294095278 - -0.2186844944953919 - 0.0394974797964096 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 11 18 2 3. - 0 - -0.1413332968950272 - 0.1758708953857422 - -0.0300297401845455 - <_> - - <_> - - - - <_> - 8 3 2 4 -1. - <_> - 8 5 2 2 2. - 0 - -7.0533920079469681e-003 - 0.1257833987474442 - -0.0422852896153927 - <_> - - <_> - - - - <_> - 1 0 10 8 -1. - <_> - 1 0 5 4 2. - <_> - 6 4 5 4 2. - 0 - 9.1119036369491369e-005 - -0.0801948532462120 - 0.0698323473334312 - <_> - - <_> - - - - <_> - 16 0 2 12 -1. - <_> - 16 6 2 6 2. - 0 - 0.0569412186741829 - 0.0166890900582075 - -0.5283920764923096 - <_> - - <_> - - - - <_> - 0 0 2 12 -1. - <_> - 0 6 2 6 2. - 0 - -0.0546842515468597 - -0.2039314955472946 - 0.0286209303885698 - <_> - - <_> - - - - <_> - 17 6 1 2 -1. - <_> - 17 7 1 1 2. - 0 - -5.8811619965126738e-005 - 0.0418041013181210 - -0.0470252297818661 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 1 2 1 2. - 1 - 1.7949440516531467e-003 - -0.0756849274039268 - 0.0691110491752625 - <_> - - <_> - - - - <_> - 7 2 4 1 -1. - <_> - 7 2 2 1 2. - 0 - 2.9679369181394577e-003 - -0.0375063605606556 - 0.1656157970428467 - <_> - - <_> - - - - <_> - 3 2 10 8 -1. - <_> - 3 4 10 4 2. - 0 - 0.0288094598799944 - -0.1236065030097961 - 0.0496754795312881 - <_> - - <_> - - - - <_> - 1 7 16 2 -1. - <_> - 1 8 16 1 2. - 0 - 4.0495251305401325e-003 - -0.0319622196257114 - 0.1952590048313141 - <_> - - <_> - - - - <_> - 3 0 2 12 -1. - <_> - 3 4 2 4 3. - 0 - -0.0620033591985703 - -0.3827818930149078 - 0.0150613198056817 - <_> - - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 16 3 1 1 2. - <_> - 15 4 1 1 2. - 0 - -5.1115748647134751e-005 - 0.0677575394511223 - -0.0526314005255699 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 3 1 1 2. - <_> - 2 4 1 1 2. - 0 - -8.5218940512277186e-005 - 0.0864468365907669 - -0.0672251731157303 - <_> - - <_> - - - - <_> - 15 3 2 4 -1. - <_> - 16 3 1 2 2. - <_> - 15 5 1 2 2. - 0 - 5.5194161832332611e-003 - -0.0172452796250582 - 0.1654276996850967 - <_> - - <_> - - - - <_> - 0 1 18 2 -1. - <_> - 0 1 9 1 2. - <_> - 9 2 9 1 2. - 0 - -0.0103026004508138 - -0.2367701977491379 - 0.0223297607153654 - <_> - - <_> - - - - <_> - 14 5 3 3 -1. - <_> - 15 5 1 3 3. - 0 - 4.1106292046606541e-003 - -0.0202375706285238 - 0.0889737829566002 - <_> - - <_> - - - - <_> - 1 5 3 3 -1. - <_> - 2 5 1 3 3. - 0 - 2.2337420377880335e-003 - -0.0461580082774162 - 0.1101254001259804 - <_> - - <_> - - - - <_> - 13 8 4 7 -1. - <_> - 13 8 2 7 2. - 0 - -0.0754150971770287 - -0.4367196857929230 - 7.0562111213803291e-003 - <_> - - <_> - - - - <_> - 1 12 2 1 -1. - <_> - 1 12 1 1 2. - 1 - -3.5641689319163561e-003 - -0.2036014944314957 - 0.0260564293712378 - <_> - - <_> - - - - <_> - 16 4 2 10 -1. - <_> - 17 4 1 5 2. - <_> - 16 9 1 5 2. - 0 - -7.5477738864719868e-003 - 0.0682261064648628 - -0.0227576401084661 - <_> - - <_> - - - - <_> - 0 4 2 10 -1. - <_> - 0 4 1 5 2. - <_> - 1 9 1 5 2. - 0 - 3.1273330096155405e-003 - -0.0515966191887856 - 0.1104556024074554 - <_> - - <_> - - - - <_> - 16 10 2 1 -1. - <_> - 16 10 1 1 2. - 0 - -7.2469911538064480e-003 - -0.2812859117984772 - 3.2531570177525282e-003 - <_> - - <_> - - - - <_> - 0 10 2 1 -1. - <_> - 1 10 1 1 2. - 0 - -5.2346920710988343e-005 - 0.0701061934232712 - -0.0941527709364891 - <_> - - <_> - - - - <_> - 16 6 2 1 -1. - <_> - 16 6 1 1 2. - 1 - -0.0246129799634218 - -0.8730425238609314 - 1.3450640253722668e-003 - <_> - - <_> - - - - <_> - 2 6 1 2 -1. - <_> - 2 6 1 1 2. - 1 - -3.5978900268673897e-003 - -0.1704172044992447 - 0.0319982208311558 - <_> - - <_> - - - - <_> - 13 8 4 7 -1. - <_> - 13 8 2 7 2. - 0 - 0.0729575231671333 - 5.0021768547594547e-003 - -0.4682140052318573 - <_> - - <_> - - - - <_> - 1 8 4 7 -1. - <_> - 3 8 2 7 2. - 0 - -0.0829254165291786 - -0.6825491189956665 - 6.8542738445103168e-003 - <_> - - <_> - - - - <_> - 0 9 18 4 -1. - <_> - 9 9 9 2 2. - <_> - 0 11 9 2 2. - 0 - 0.1458497941493988 - 4.4581899419426918e-003 - -0.9136692881584168 - <_> - - <_> - - - - <_> - 8 6 3 2 -1. - <_> - 9 7 1 2 3. - 1 - 0.0121017899364233 - 0.0244141705334187 - -0.1811750978231430 - <_> - - <_> - - - - <_> - 8 7 8 4 -1. - <_> - 12 7 4 2 2. - <_> - 8 9 4 2 2. - 0 - -0.0606673695147038 - 0.2293484061956406 - -0.0143234599381685 - <_> - - <_> - - - - <_> - 1 12 9 3 -1. - <_> - 1 13 9 1 3. - 0 - 0.0207455400377512 - -0.0269107203930616 - 0.1933422982692719 - <_> - - <_> - - - - <_> - 13 13 1 2 -1. - <_> - 13 14 1 1 2. - 0 - 7.7412481186911464e-004 - -0.0299135297536850 - 0.0458732806146145 - <_> - - <_> - - - - <_> - 0 13 18 2 -1. - <_> - 0 13 9 1 2. - <_> - 9 14 9 1 2. - 0 - 0.0135493697598577 - 0.0344336815178394 - -0.1811697930097580 - <_> - - <_> - - - - <_> - 7 11 8 4 -1. - <_> - 7 13 8 2 2. - 0 - 0.1226418018341065 - 8.5802376270294189e-003 - -0.3556774854660034 - <_> - - <_> - - - - <_> - 0 7 18 4 -1. - <_> - 0 7 9 2 2. - <_> - 9 9 9 2 2. - 0 - 0.0671608373522758 - 0.0152594400569797 - -0.3348085880279541 - <_> - - <_> - - - - <_> - 5 2 9 6 -1. - <_> - 5 4 9 2 3. - 0 - -0.0246475301682949 - 0.1960427016019821 - -0.0251305196434259 - <_> - - <_> - - - - <_> - 6 5 6 4 -1. - <_> - 6 5 3 2 2. - <_> - 9 7 3 2 2. - 0 - 0.0161939505487680 - 0.0255086906254292 - -0.2101009041070938 - <_> - - <_> - - - - <_> - 6 0 9 9 -1. - <_> - 9 3 3 3 9. - 0 - 0.4493438005447388 - -0.0108507098630071 - 0.2636126875877380 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 0 2 2 2. - <_> - 9 2 2 2 2. - 0 - 0.0100060002878308 - 0.0162830203771591 - -0.3397836983203888 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -3.3295390312559903e-004 - 0.0482161790132523 - -0.0331645794212818 - <_> - - <_> - - - - <_> - 6 0 3 6 -1. - <_> - 4 2 3 2 3. - 1 - -0.0285563599318266 - -0.1401145011186600 - 0.0359319001436234 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 16 1 1 1 3. - 1 - 6.8772169761359692e-003 - -0.0123321795836091 - 0.1552557051181793 - <_> - - <_> - - - - <_> - 1 0 3 1 -1. - <_> - 2 1 1 1 3. - 1 - 2.6129318866878748e-003 - -0.0435581207275391 - 0.1222198009490967 - <_> - - <_> - - - - <_> - 10 0 3 15 -1. - <_> - 11 5 1 5 9. - 0 - 0.3278479874134064 - 1.3112389715388417e-003 - -0.8163402080535889 - <_> - - <_> - - - - <_> - 5 0 3 15 -1. - <_> - 6 5 1 5 9. - 0 - 0.1535089015960693 - 0.0153489299118519 - -0.3360393047332764 - <_> - - <_> - - - - <_> - 16 0 1 4 -1. - <_> - 16 1 1 2 2. - 0 - 9.0102507965639234e-004 - -0.0325689390301704 - 0.0637555792927742 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -7.4206269346177578e-005 - 0.0817376524209976 - -0.0669129565358162 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -3.3565158955752850e-003 - -0.1260069012641907 - 0.0223339106887579 - <_> - - <_> - - - - <_> - 0 0 17 10 -1. - <_> - 0 5 17 5 2. - 0 - 0.0652299970388412 - -0.0320342108607292 - 0.1782056987285614 - <_> - - <_> - - - - <_> - 12 0 3 10 -1. - <_> - 12 5 3 5 2. - 0 - -2.0175189711153507e-003 - 0.0244843903928995 - -0.0572246313095093 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 7.0746080018579960e-003 - 9.8791662603616714e-003 - -0.5422024726867676 - <_> - - <_> - - - - <_> - 15 2 2 2 -1. - <_> - 16 2 1 1 2. - <_> - 15 3 1 1 2. - 0 - 6.5917898609768599e-005 - -0.0516582205891609 - 0.0567629300057888 - <_> - - <_> - - - - <_> - 3 3 9 6 -1. - <_> - 6 5 3 2 9. - 0 - 0.3082883059978485 - -9.5853386446833611e-003 - 0.5343317985534668 - <_> - - <_> - - - - <_> - 6 3 11 2 -1. - <_> - 6 4 11 1 2. - 0 - 0.0102557903155684 - 0.0248383395373821 - -0.1651663035154343 - <_> - - <_> - - - - <_> - 1 2 2 2 -1. - <_> - 1 2 1 1 2. - <_> - 2 3 1 1 2. - 0 - -5.3460840717889369e-005 - 0.0798209980130196 - -0.0650218427181244 - <_> - - <_> - - - - <_> - 14 1 4 2 -1. - <_> - 14 1 4 1 2. - 1 - -2.3789680562913418e-003 - 0.0478302501142025 - -0.0529914908111095 - <_> - - <_> - - - - <_> - 4 1 2 4 -1. - <_> - 4 1 1 4 2. - 1 - -5.6755929253995419e-003 - 0.1244622021913528 - -0.0447519905865192 - -1.2427099943161011 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 4 4 6 -1. - <_> - 6 6 4 2 3. - 1 - -0.1075673997402191 - 0.3405114114284515 - -0.1520918011665344 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 13 1 4 2 2. - 1 - 0.0435164310038090 - -0.0135334003716707 - 0.2857075035572052 - <_> - - <_> - - - - <_> - 0 9 8 4 -1. - <_> - 0 9 4 2 2. - <_> - 4 11 4 2 2. - 0 - 0.1509097069501877 - 5.0420017214491963e-004 - -560.7666015625000000 - <_> - - <_> - - - - <_> - 15 8 3 3 -1. - <_> - 16 9 1 3 3. - 1 - 8.1543149426579475e-003 - -0.0573937706649303 - 0.1638182997703552 - <_> - - <_> - - - - <_> - 2 7 14 4 -1. - <_> - 2 9 14 2 2. - 0 - -0.1034078970551491 - 0.2298991978168488 - -0.1285800039768219 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 9 0 2 1 2. - 1 - -7.5287488289177418e-003 - 0.0714707821607590 - -0.0257890298962593 - <_> - - <_> - - - - <_> - 9 0 1 4 -1. - <_> - 9 0 1 2 2. - 1 - 3.6443499848246574e-003 - -0.2222723066806793 - 0.1241116970777512 - <_> - - <_> - - - - <_> - 2 0 14 15 -1. - <_> - 2 0 7 15 2. - 0 - 0.5374997854232788 - 0.0139470295980573 - 0.5212510824203491 - <_> - - <_> - - - - <_> - 1 7 14 4 -1. - <_> - 1 9 14 2 2. - 0 - 0.2701308131217957 - -0.0199047792702913 - -630.8125000000000000 - <_> - - <_> - - - - <_> - 9 8 8 7 -1. - <_> - 11 8 4 7 2. - 0 - -0.0103687699884176 - 0.1052728965878487 - -0.1294572055339813 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 1 2 4 2. - 1 - -0.0156045500189066 - 0.2159546017646790 - -0.0988422036170959 - <_> - - <_> - - - - <_> - 8 6 9 8 -1. - <_> - 11 6 3 8 3. - 0 - -0.2028758972883225 - -0.2773951888084412 - 3.4634380135685205e-003 - <_> - - <_> - - - - <_> - 1 6 9 8 -1. - <_> - 4 6 3 8 3. - 0 - -0.0271604191511869 - 0.1002269983291626 - -0.2054217010736466 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 7 4 1 2. - 0 - -5.2366848103702068e-003 - 0.1270543932914734 - -0.1254777014255524 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 7 1 2 1 3. - 1 - 4.6215238980948925e-003 - 0.0448268912732601 - -0.2724570035934448 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 7 1 2 3. - 1 - -6.7956638522446156e-003 - -0.1338658928871155 - 0.0271778404712677 - <_> - - <_> - - - - <_> - 0 1 18 14 -1. - <_> - 0 1 9 7 2. - <_> - 9 8 9 7 2. - 0 - -0.2197666019201279 - -0.2527695000171661 - 0.0464650392532349 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 11 1 2 1 2. - 0 - 4.6517988666892052e-003 - 0.0109347002580762 - -0.3559803962707520 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 1 2 1 2. - 0 - -1.5317969955503941e-003 - -0.2499942928552628 - 0.0443512909114361 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 4.6969428658485413e-003 - 0.0218366198241711 - -0.2871651947498322 - <_> - - <_> - - - - <_> - 4 4 10 6 -1. - <_> - 4 4 5 3 2. - <_> - 9 7 5 3 2. - 0 - 0.0481894090771675 - 0.0288693699985743 - -0.3616079092025757 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 11 9 3 1 2. - <_> - 8 10 3 1 2. - 0 - -7.6267770491540432e-003 - 0.1311608999967575 - -0.0371875613927841 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -4.5027391024632379e-005 - 0.0719915106892586 - -0.1249687001109123 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - -5.3772819228470325e-005 - 0.0795105397701263 - -0.0796041265130043 - <_> - - <_> - - - - <_> - 2 3 3 2 -1. - <_> - 3 4 1 2 3. - 1 - 9.2382878065109253e-003 - -0.0459494404494762 - 0.2055145949125290 - <_> - - <_> - - - - <_> - 16 3 2 10 -1. - <_> - 16 8 2 5 2. - 0 - 0.0336009599268436 - 0.0239669401198626 - -0.2274771928787231 - <_> - - <_> - - - - <_> - 0 3 2 10 -1. - <_> - 0 8 2 5 2. - 0 - -0.0418576300144196 - -0.2567035853862763 - 0.0433881990611553 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 11 9 3 1 2. - <_> - 8 10 3 1 2. - 0 - 4.3434980325400829e-003 - -0.0360659398138523 - 0.1335407048463821 - <_> - - <_> - - - - <_> - 1 7 10 2 -1. - <_> - 1 7 5 1 2. - <_> - 6 8 5 1 2. - 0 - 8.7262392044067383e-003 - -0.0280333999544382 - 0.2965970933437347 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - 0.0725063979625702 - 0.0339310988783836 - -0.2645680010318756 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - 6.9837369956076145e-003 - 0.0230753999203444 - -0.3671954870223999 - <_> - - <_> - - - - <_> - 10 4 4 4 -1. - <_> - 11 5 2 4 2. - 1 - 0.0939587205648422 - 5.1443470874801278e-004 - -0.6915786862373352 - <_> - - <_> - - - - <_> - 8 4 4 4 -1. - <_> - 7 5 4 2 2. - 1 - -0.0546111688017845 - 0.3563387095928192 - -0.0255911909043789 - <_> - - <_> - - - - <_> - 16 1 2 10 -1. - <_> - 16 1 1 10 2. - 1 - 8.3599044010043144e-003 - -0.1183891966938973 - 0.0540960207581520 - <_> - - <_> - - - - <_> - 5 0 8 9 -1. - <_> - 7 0 4 9 2. - 0 - -8.5311960428953171e-003 - 0.2580164074897766 - -0.0432965084910393 - <_> - - <_> - - - - <_> - 16 1 2 10 -1. - <_> - 16 1 1 10 2. - 1 - 0.0530957616865635 - 0.0134461699053645 - -0.2001762986183167 - <_> - - <_> - - - - <_> - 2 1 10 2 -1. - <_> - 2 1 10 1 2. - 1 - 7.1099922060966492e-003 - -0.1717357933521271 - 0.0664152875542641 - <_> - - <_> - - - - <_> - 13 0 3 2 -1. - <_> - 14 1 1 2 3. - 1 - -0.0121456598863006 - -0.3498241901397705 - 0.0152532299980521 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 6 0 6 6 2. - 0 - 0.0491840504109859 - -0.1462731063365936 - 0.0766353383660316 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - 0.0642079263925552 - -0.0426980294287205 - 0.0898953378200531 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 6 6 6 3 2. - 0 - 0.0505671091377735 - -0.0342714004218578 - 0.3211781084537506 - <_> - - <_> - - - - <_> - 6 3 12 7 -1. - <_> - 6 3 6 7 2. - 0 - 0.3818750083446503 - 5.9737069532275200e-003 - -0.4150918126106262 - <_> - - <_> - - - - <_> - 0 3 12 7 -1. - <_> - 6 3 6 7 2. - 0 - 0.2414198964834213 - 0.0428920909762383 - -0.2574456036090851 - <_> - - <_> - - - - <_> - 13 0 3 2 -1. - <_> - 14 1 1 2 3. - 1 - 8.7335016578435898e-003 - 0.0215238109230995 - -0.2581614851951599 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 4 1 2 1 3. - 1 - 5.5905920453369617e-003 - 0.0368825495243073 - -0.2680523991584778 - <_> - - <_> - - - - <_> - 0 9 18 4 -1. - <_> - 0 11 18 2 2. - 0 - 0.0145109295845032 - -0.1092017963528633 - 0.0991731509566307 - <_> - - <_> - - - - <_> - 9 6 1 8 -1. - <_> - 9 6 1 4 2. - 1 - -0.0274284295737743 - -0.2504880130290985 - 0.0452128499746323 - <_> - - <_> - - - - <_> - 2 5 14 6 -1. - <_> - 2 7 14 2 3. - 0 - -0.1233676970005035 - 0.2255768030881882 - -0.0428952686488628 - <_> - - <_> - - - - <_> - 2 0 5 8 -1. - <_> - 2 4 5 4 2. - 0 - -0.0616077184677124 - -0.2777282893657684 - 0.0325213186442852 - <_> - - <_> - - - - <_> - 4 3 10 4 -1. - <_> - 4 5 10 2 2. - 0 - -0.0762168914079666 - 0.3657267093658447 - -0.0255184806883335 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 9 0 1 3 2. - 0 - 4.3231542222201824e-003 - -0.0599518194794655 - 0.1285364925861359 - <_> - - <_> - - - - <_> - 15 6 1 3 -1. - <_> - 14 7 1 1 3. - 1 - -7.2015187470242381e-005 - 0.0668459609150887 - -0.0653621777892113 - <_> - - <_> - - - - <_> - 3 6 3 4 -1. - <_> - 3 7 3 2 2. - 0 - 3.8772630505263805e-003 - -0.0746818333864212 - 0.1490433961153030 - <_> - - <_> - - - - <_> - 9 4 8 10 -1. - <_> - 13 4 4 5 2. - <_> - 9 9 4 5 2. - 0 - -0.0308424606919289 - 0.0467762798070908 - -0.0792699083685875 - <_> - - <_> - - - - <_> - 3 8 3 3 -1. - <_> - 4 9 1 1 9. - 0 - 2.9754610732197762e-003 - -0.0631382465362549 - 0.1299404948949814 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 10 1 1 2. - 0 - -4.3571940623223782e-003 - 0.1760174036026001 - -0.0209502801299095 - <_> - - <_> - - - - <_> - 4 9 1 2 -1. - <_> - 4 10 1 1 2. - 0 - 2.5649809686001390e-005 - -0.0934598371386528 - 0.1056388020515442 - <_> - - <_> - - - - <_> - 8 4 2 10 -1. - <_> - 8 9 2 5 2. - 0 - -0.0190466307103634 - 0.0378969013690948 - -0.2042724043130875 - <_> - - <_> - - - - <_> - 7 7 4 4 -1. - <_> - 7 9 4 2 2. - 0 - -0.0590843781828880 - -0.2602826952934265 - 0.0318774096667767 - <_> - - <_> - - - - <_> - 14 0 2 10 -1. - <_> - 14 0 1 10 2. - 1 - -0.0399503409862518 - -0.3506382107734680 - 9.2909233644604683e-003 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 0 10 1 2. - 1 - 0.0508347414433956 - 0.0219123102724552 - -0.3803296983242035 - <_> - - <_> - - - - <_> - 16 4 2 3 -1. - <_> - 15 5 2 1 3. - 1 - -0.0136031899601221 - 0.2038068026304245 - -0.0212994609028101 - <_> - - <_> - - - - <_> - 4 12 9 3 -1. - <_> - 7 12 3 3 3. - 0 - -0.0674393326044083 - -0.4756908118724823 - 0.0163150597363710 - <_> - - <_> - - - - <_> - 16 4 2 3 -1. - <_> - 15 5 2 1 3. - 1 - 0.0177440494298935 - -0.0262153502553701 - 0.1731224954128265 - <_> - - <_> - - - - <_> - 2 1 14 4 -1. - <_> - 2 3 14 2 2. - 0 - 0.0408229492604733 - 0.0269718896597624 - -0.2531566023826599 - <_> - - <_> - - - - <_> - 9 1 4 2 -1. - <_> - 9 2 4 1 2. - 0 - -3.5472789313644171e-003 - -0.1938990056514740 - 0.0151813402771950 - <_> - - <_> - - - - <_> - 1 3 12 4 -1. - <_> - 1 3 6 2 2. - <_> - 7 5 6 2 2. - 0 - 0.0134509503841400 - -0.0560166388750076 - 0.1336188018321991 - <_> - - <_> - - - - <_> - 9 3 8 2 -1. - <_> - 9 3 4 2 2. - 0 - 0.0702156871557236 - 0.0121993301436305 - -0.2975654006004334 - <_> - - <_> - - - - <_> - 1 3 8 2 -1. - <_> - 5 3 4 2 2. - 0 - 0.0158290397375822 - -0.0871118977665901 - 0.0889551267027855 - <_> - - <_> - - - - <_> - 15 8 3 4 -1. - <_> - 16 9 1 4 3. - 1 - -0.0203911308199167 - 0.1782993972301483 - -0.0371981598436832 - <_> - - <_> - - - - <_> - 3 8 4 3 -1. - <_> - 2 9 4 1 3. - 1 - 3.6189330276101828e-003 - -0.0762976333498955 - 0.0969681292772293 - <_> - - <_> - - - - <_> - 15 12 2 3 -1. - <_> - 15 13 2 1 3. - 0 - 1.0060019558295608e-003 - -0.0498901791870594 - 0.0658943429589272 - <_> - - <_> - - - - <_> - 0 7 1 4 -1. - <_> - 0 8 1 2 2. - 0 - 2.9275720007717609e-003 - 0.0298173800110817 - -0.2424031049013138 - <_> - - <_> - - - - <_> - 15 12 2 3 -1. - <_> - 15 13 2 1 3. - 0 - -0.0122589897364378 - 0.1903184950351715 - -7.5331269763410091e-003 - <_> - - <_> - - - - <_> - 1 12 2 3 -1. - <_> - 1 13 2 1 3. - 0 - 2.3739310563541949e-005 - -0.0887768194079399 - 0.0806454271078110 - <_> - - <_> - - - - <_> - 10 0 3 8 -1. - <_> - 8 2 3 4 2. - 1 - -0.0128609901294112 - 0.0695679932832718 - -0.0297688208520412 - <_> - - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 9 0 6 8 2. - 0 - -0.0491925515234470 - 0.1511365026235580 - -0.0546999201178551 - <_> - - <_> - - - - <_> - 5 14 12 1 -1. - <_> - 8 14 6 1 2. - 0 - -0.0194404404610395 - -0.1785937994718552 - 0.0176323205232620 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 1 2 2 2. - 0 - 2.5363420136272907e-003 - 0.0300990603864193 - -0.2170494049787521 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -0.0209271106868982 - 0.1529344022274017 - -0.0265916306525469 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 2.1768060978502035e-003 - -0.0801318064332008 - 0.0870366171002388 - <_> - - <_> - - - - <_> - 8 13 8 2 -1. - <_> - 8 14 8 1 2. - 0 - 3.2644919119775295e-003 - -0.0506618581712246 - 0.0504105202853680 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 0 11 9 2 2. - <_> - 9 13 9 2 2. - 0 - 0.0531350895762444 - 0.0313573814928532 - -0.2432748973369598 - <_> - - <_> - - - - <_> - 9 9 8 2 -1. - <_> - 13 9 4 1 2. - <_> - 9 10 4 1 2. - 0 - 6.5658721141517162e-003 - -0.0314484387636185 - 0.1314239054918289 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 10 2 1 2. - 0 - -1.6994590405374765e-003 - 0.0787288174033165 - -0.0930547267198563 - <_> - - <_> - - - - <_> - 9 9 8 2 -1. - <_> - 13 9 4 1 2. - <_> - 9 10 4 1 2. - 0 - -0.0231965091079474 - 0.2017091065645218 - -0.0152339404448867 - <_> - - <_> - - - - <_> - 1 9 8 2 -1. - <_> - 1 9 4 1 2. - <_> - 5 10 4 1 2. - 0 - 7.1990801952779293e-003 - -0.0436348989605904 - 0.2130060940980911 - <_> - - <_> - - - - <_> - 11 7 1 3 -1. - <_> - 10 8 1 1 3. - 1 - 6.9829211570322514e-003 - 0.0317675210535526 - -0.2128593027591705 - <_> - - <_> - - - - <_> - 7 7 3 1 -1. - <_> - 8 8 1 1 3. - 1 - -4.4900798238813877e-003 - -0.1751292943954468 - 0.0440214611589909 - <_> - - <_> - - - - <_> - 10 0 3 8 -1. - <_> - 8 2 3 4 2. - 1 - -0.1209999993443489 - -0.3690679967403412 - 4.4225710444152355e-003 - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - -0.0380082689225674 - 0.5277379751205444 - -0.0147407604381442 - <_> - - <_> - - - - <_> - 5 7 8 2 -1. - <_> - 5 8 8 1 2. - 0 - -0.0111320000141859 - 0.0634055435657501 - -0.1106311976909638 - <_> - - <_> - - - - <_> - 4 1 9 9 -1. - <_> - 7 4 3 3 9. - 0 - 0.1212562024593353 - 0.1124370023608208 - -0.0671258494257927 - <_> - - <_> - - - - <_> - 10 3 3 7 -1. - <_> - 11 4 1 7 3. - 1 - -0.0588735602796078 - 0.1949198991060257 - -7.9787842696532607e-004 - <_> - - <_> - - - - <_> - 8 3 7 3 -1. - <_> - 7 4 7 1 3. - 1 - -0.0123289301991463 - -0.1880646944046021 - 0.0393505804240704 - <_> - - <_> - - - - <_> - 7 5 4 2 -1. - <_> - 7 6 4 1 2. - 0 - -4.4250390492379665e-003 - 0.1126734018325806 - -0.0681002363562584 - <_> - - <_> - - - - <_> - 7 0 2 6 -1. - <_> - 7 3 2 3 2. - 0 - -5.0966828130185604e-003 - -0.1794558018445969 - 0.0475732088088989 - <_> - - <_> - - - - <_> - 8 0 3 6 -1. - <_> - 9 2 1 2 9. - 0 - -0.0403452403843403 - -0.5704476833343506 - 5.5092480033636093e-003 - <_> - - <_> - - - - <_> - 9 3 6 3 -1. - <_> - 11 5 2 3 3. - 1 - 0.1125494018197060 - -0.0269452705979347 - 0.2580899000167847 - <_> - - <_> - - - - <_> - 5 14 12 1 -1. - <_> - 8 14 6 1 2. - 0 - 0.0699782967567444 - -1.1665009660646319e-003 - 0.8676825165748596 - <_> - - <_> - - - - <_> - 1 14 12 1 -1. - <_> - 4 14 6 1 2. - 0 - 0.0165449008345604 - 0.0243071895092726 - -0.2559692859649658 - <_> - - <_> - - - - <_> - 1 7 16 6 -1. - <_> - 1 9 16 2 3. - 0 - 0.0822774171829224 - -0.0268739499151707 - 0.2409840971231461 - <_> - - <_> - - - - <_> - 0 10 3 4 -1. - <_> - 0 11 3 2 2. - 0 - -4.6195117756724358e-003 - -0.1658201962709427 - 0.0400424189865589 - <_> - - <_> - - - - <_> - 14 7 4 1 -1. - <_> - 15 7 2 1 2. - 0 - -2.4694160092622042e-003 - 0.0927710607647896 - -0.0273753199726343 - <_> - - <_> - - - - <_> - 8 1 1 4 -1. - <_> - 8 1 1 2 2. - 1 - 1.0857389861484990e-004 - -0.1348482966423035 - 0.0436066016554832 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 15 2 2 3 2. - 1 - -0.0164907705038786 - -0.1666806042194367 - 0.0177498105913401 - <_> - - <_> - - - - <_> - 2 6 2 4 -1. - <_> - 2 6 1 2 2. - <_> - 3 8 1 2 2. - 0 - -4.7164629213511944e-003 - 0.1780464947223663 - -0.0365630798041821 - <_> - - <_> - - - - <_> - 15 5 3 10 -1. - <_> - 15 10 3 5 2. - 0 - 0.0906244590878487 - 0.0174008794128895 - -0.4898025989532471 - <_> - - <_> - - - - <_> - 3 9 6 4 -1. - <_> - 3 9 3 2 2. - <_> - 6 11 3 2 2. - 0 - 2.7714879252016544e-003 - -0.0659386664628983 - 0.0964076220989227 - <_> - - <_> - - - - <_> - 13 3 3 7 -1. - <_> - 14 4 1 7 3. - 1 - 0.0434898696839809 - 0.0139165297150612 - -0.2709555923938751 - <_> - - <_> - - - - <_> - 6 2 7 4 -1. - <_> - 5 3 7 2 2. - 1 - 6.3884491100907326e-003 - -0.0581430904567242 - 0.1046271026134491 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - -0.0142638003453612 - 0.1401764005422592 - -0.0269160307943821 - <_> - - <_> - - - - <_> - 0 4 8 3 -1. - <_> - 0 5 8 1 3. - 0 - -5.6627448648214340e-003 - -0.1896232962608337 - 0.0316337496042252 - <_> - - <_> - - - - <_> - 14 4 3 5 -1. - <_> - 15 5 1 5 3. - 1 - 7.5204060412943363e-003 - -0.0435900315642357 - 0.1000792011618614 - <_> - - <_> - - - - <_> - 5 4 5 2 -1. - <_> - 5 4 5 1 2. - 1 - -0.0110979797318578 - 0.3084025979042053 - -0.0212082397192717 - <_> - - <_> - - - - <_> - 10 7 1 6 -1. - <_> - 8 9 1 2 3. - 1 - -0.0618321411311626 - 0.1831555068492889 - -7.7433600090444088e-003 - <_> - - <_> - - - - <_> - 8 7 6 1 -1. - <_> - 10 9 2 1 3. - 1 - 3.4768159966915846e-003 - 0.0506381392478943 - -0.1340041011571884 - <_> - - <_> - - - - <_> - 10 4 6 10 -1. - <_> - 13 4 3 5 2. - <_> - 10 9 3 5 2. - 0 - 0.0977838635444641 - 2.0544449798762798e-003 - -0.6877961754798889 - <_> - - <_> - - - - <_> - 2 4 6 10 -1. - <_> - 2 4 3 5 2. - <_> - 5 9 3 5 2. - 0 - -0.0918209478259087 - -0.2558689117431641 - 0.0251086503267288 - <_> - - <_> - - - - <_> - 4 5 10 2 -1. - <_> - 9 5 5 1 2. - <_> - 4 6 5 1 2. - 0 - -0.0140088303014636 - -0.3638179898262024 - 0.0155368996784091 - <_> - - <_> - - - - <_> - 6 2 3 6 -1. - <_> - 7 3 1 6 3. - 1 - -0.0470989495515823 - 0.4120045006275177 - -0.0147856995463371 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 2 2 2 2. - 0 - -0.0240776594728231 - -0.2649717926979065 - 4.3284958228468895e-003 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 2 2 2 2. - 0 - -3.0720019713044167e-003 - 0.1134819984436035 - -0.0527238808572292 - <_> - - <_> - - - - <_> - 8 0 10 4 -1. - <_> - 8 2 10 2 2. - 0 - -0.0232353191822767 - -0.1618241071701050 - 0.0139071401208639 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 0 0 9 2 2. - <_> - 9 2 9 2 2. - 0 - 0.0217532292008400 - 0.0320463292300701 - -0.1815026998519898 - <_> - - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 9 0 6 2 2. - 0 - -0.0284193791449070 - 0.0735991299152374 - -0.0121852997690439 - <_> - - <_> - - - - <_> - 0 0 12 2 -1. - <_> - 3 0 6 2 2. - 0 - -0.0990353375673294 - -0.8003916144371033 - 7.5543550774455070e-003 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 16 4 1 1 3. - 1 - 3.6745260003954172e-003 - -0.0425384715199471 - 0.1313553005456924 - <_> - - <_> - - - - <_> - 0 4 12 6 -1. - <_> - 3 4 6 6 2. - 0 - -0.2490209937095642 - 0.5709738135337830 - -0.0100652799010277 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 16 4 1 1 3. - 1 - -2.5670630857348442e-003 - 0.1004543974995613 - -0.0438447706401348 - <_> - - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 8 1 1 3. - 1 - 6.2725669704377651e-003 - 0.0282882191240788 - -0.1991124004125595 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 16 4 1 1 3. - 1 - 0.0121860196813941 - -8.9298561215400696e-003 - 0.1723618954420090 - <_> - - <_> - - - - <_> - 1 3 3 1 -1. - <_> - 2 4 1 1 3. - 1 - -8.4080873057246208e-003 - 0.2205967009067535 - -0.0254241600632668 - <_> - - <_> - - - - <_> - 15 2 3 1 -1. - <_> - 16 3 1 1 3. - 1 - 7.6226810924708843e-003 - 0.0226176194846630 - -0.3504024147987366 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - -3.5278380382806063e-003 - -0.2129029035568237 - 0.0337668098509312 - <_> - - <_> - - - - <_> - 2 3 14 6 -1. - <_> - 2 5 14 2 3. - 0 - -0.0487591288983822 - 0.2639946937561035 - -0.0227282308042049 - <_> - - <_> - - - - <_> - 4 2 3 8 -1. - <_> - 4 6 3 4 2. - 0 - 0.0421630106866360 - 0.0164839699864388 - -0.3725509941577911 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 13 3 4 1 3. - 1 - 0.0412516593933105 - -5.6340959854424000e-003 - 0.1074742004275322 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 5 3 1 4 3. - 1 - -0.0335065908730030 - 0.3244982957839966 - -0.0198305491358042 - <_> - - <_> - - - - <_> - 12 2 4 13 -1. - <_> - 13 2 2 13 2. - 0 - -4.0785958990454674e-003 - 0.0712641105055809 - -0.0864052474498749 - <_> - - <_> - - - - <_> - 2 2 4 13 -1. - <_> - 3 2 2 13 2. - 0 - -0.0396881289780140 - -0.3553381860256195 - 0.0168110895901918 - <_> - - <_> - - - - <_> - 9 4 8 3 -1. - <_> - 9 4 4 3 2. - 1 - 0.2625074088573456 - 3.3027199096977711e-003 - -0.3045256137847900 - <_> - - <_> - - - - <_> - 9 4 3 8 -1. - <_> - 9 4 3 4 2. - 1 - -0.1033687964081764 - -0.4427754878997803 - 0.0152687802910805 - <_> - - <_> - - - - <_> - 17 10 1 2 -1. - <_> - 17 11 1 1 2. - 0 - 2.5352418888360262e-003 - 0.0226268991827965 - -0.1935666948556900 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 1.3277910184115171e-003 - -0.0842633768916130 - 0.0657716765999794 - <_> - - <_> - - - - <_> - 6 0 9 13 -1. - <_> - 9 0 3 13 3. - 0 - -0.0692616030573845 - 0.1914274990558624 - -0.0148142697289586 - <_> - - <_> - - - - <_> - 0 1 1 10 -1. - <_> - 0 6 1 5 2. - 0 - -0.0319452695548534 - -0.3099650144577026 - 0.0180993191897869 - <_> - - <_> - - - - <_> - 0 11 18 2 -1. - <_> - 0 12 18 1 2. - 0 - 7.1500530466437340e-003 - -0.0755150690674782 - 0.0713425576686859 - <_> - - <_> - - - - <_> - 4 7 3 6 -1. - <_> - 5 9 1 2 9. - 0 - 2.4518880527466536e-003 - -0.0526761785149574 - 0.1191487014293671 - <_> - - <_> - - - - <_> - 12 7 2 5 -1. - <_> - 12 7 1 5 2. - 1 - 0.0254793707281351 - -0.0215268898755312 - 0.1125423014163971 - <_> - - <_> - - - - <_> - 6 5 2 1 -1. - <_> - 7 5 1 1 2. - 0 - 8.3662307588383555e-005 - -0.1237241029739380 - 0.0447584912180901 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 11 2 3 1 2. - <_> - 8 3 3 1 2. - 0 - 5.2631269209086895e-003 - 0.0166446994990110 - -0.2792761921882629 - <_> - - <_> - - - - <_> - 4 6 3 1 -1. - <_> - 5 6 1 1 3. - 0 - 5.9906251408392563e-005 - -0.0590216182172298 - 0.0907072424888611 - <_> - - <_> - - - - <_> - 0 1 18 14 -1. - <_> - 9 1 9 7 2. - <_> - 0 8 9 7 2. - 0 - 0.4049279987812042 - 9.8951030522584915e-003 - -0.5390074849128723 - <_> - - <_> - - - - <_> - 0 9 6 6 -1. - <_> - 0 9 3 3 2. - <_> - 3 12 3 3 2. - 0 - 4.5421868562698364e-003 - -0.0830420330166817 - 0.0579336211085320 - <_> - - <_> - - - - <_> - 8 9 10 6 -1. - <_> - 13 9 5 3 2. - <_> - 8 12 5 3 2. - 0 - -0.0286024697124958 - 0.0987989678978920 - -0.0411834083497524 - <_> - - <_> - - - - <_> - 1 10 15 3 -1. - <_> - 1 11 15 1 3. - 0 - 6.0981088317930698e-003 - -0.0496008917689323 - 0.1082315966486931 - <_> - - <_> - - - - <_> - 16 11 1 2 -1. - <_> - 16 11 1 1 2. - 1 - 2.4081019219011068e-003 - 0.0317933000624180 - -0.0897006466984749 - <_> - - <_> - - - - <_> - 4 4 9 2 -1. - <_> - 7 7 3 2 3. - 1 - -0.1049328967928886 - -0.1838400065898895 - 0.0292720291763544 - <_> - - <_> - - - - <_> - 7 7 4 2 -1. - <_> - 7 8 4 1 2. - 0 - -7.2810851270332932e-004 - 0.0346079505980015 - -0.1805756986141205 - <_> - - <_> - - - - <_> - 2 7 4 2 -1. - <_> - 2 7 2 1 2. - <_> - 4 8 2 1 2. - 0 - 2.3983051069080830e-003 - -0.0366495698690414 - 0.1469368040561676 - <_> - - <_> - - - - <_> - 8 0 5 2 -1. - <_> - 8 1 5 1 2. - 0 - 4.4842050410807133e-003 - 0.0254560094326735 - -0.1706009060144424 - <_> - - <_> - - - - <_> - 6 2 4 11 -1. - <_> - 7 2 2 11 2. - 0 - 0.0559289082884789 - 6.9079152308404446e-003 - -0.7426319122314453 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -0.0113146202638745 - -0.6569160223007202 - 3.0682450160384178e-003 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 5.2855871617794037e-003 - 0.0122091500088573 - -0.4113836884498596 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - -3.5499120131134987e-003 - 0.1567400991916657 - -0.0136733297258615 - <_> - - <_> - - - - <_> - 7 8 4 4 -1. - <_> - 8 8 2 4 2. - 0 - -0.0162009894847870 - -0.4511883854866028 - 0.0105137201026082 - <_> - - <_> - - - - <_> - 5 0 8 1 -1. - <_> - 7 0 4 1 2. - 0 - -6.3212178647518158e-003 - 0.2467146962881088 - -0.0221792291849852 - <_> - - <_> - - - - <_> - 4 0 6 8 -1. - <_> - 4 0 3 4 2. - <_> - 7 4 3 4 2. - 0 - 0.0678062811493874 - 0.0141928596422076 - -0.4557569921016693 - <_> - - <_> - - - - <_> - 5 1 9 9 -1. - <_> - 8 4 3 3 9. - 0 - 0.4499514997005463 - -0.0205099303275347 - 0.2384169995784760 - <_> - - <_> - - - - <_> - 0 4 4 10 -1. - <_> - 0 9 4 5 2. - 0 - -0.1606801003217697 - -0.7912417054176331 - 5.4184817709028721e-003 - <_> - - <_> - - - - <_> - 16 11 1 2 -1. - <_> - 16 11 1 1 2. - 1 - -9.4610815867781639e-003 - -0.2421163022518158 - 9.1182524338364601e-003 - <_> - - <_> - - - - <_> - 1 7 16 4 -1. - <_> - 1 8 16 2 2. - 0 - 0.0147587396204472 - -0.0416104607284069 - 0.1353428959846497 - <_> - - <_> - - - - <_> - 16 11 1 2 -1. - <_> - 16 11 1 1 2. - 1 - 6.5756370313465595e-003 - 9.3746017664670944e-003 - -0.0832142680883408 - <_> - - <_> - - - - <_> - 2 11 2 1 -1. - <_> - 2 11 1 1 2. - 1 - 5.7711522094905376e-003 - 0.0266925692558289 - -0.1980333030223846 - <_> - - <_> - - - - <_> - 2 13 14 2 -1. - <_> - 2 14 14 1 2. - 0 - -0.0509134791791439 - 0.3214649856090546 - -0.0169861502945423 - <_> - - <_> - - - - <_> - 0 13 4 2 -1. - <_> - 0 13 2 1 2. - <_> - 2 14 2 1 2. - 0 - 6.3694868003949523e-005 - -0.0845351293683052 - 0.0685012266039848 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 15 1 3 1 2. - 1 - -2.1522149909287691e-003 - 0.0548588298261166 - -0.0481257401406765 - <_> - - <_> - - - - <_> - 5 9 2 2 -1. - <_> - 5 9 1 1 2. - <_> - 6 10 1 1 2. - 0 - -4.0621249936521053e-003 - 0.3157261908054352 - -0.0174344405531883 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 6 10 6 1 2. - 0 - -0.0351190604269505 - -0.4585689902305603 - 0.0149546898901463 - <_> - - <_> - - - - <_> - 0 6 18 2 -1. - <_> - 0 6 9 1 2. - <_> - 9 7 9 1 2. - 0 - -0.0127988802269101 - -0.1521113961935043 - 0.0345015898346901 - <_> - - <_> - - - - <_> - 15 13 2 2 -1. - <_> - 15 13 1 2 2. - 0 - -5.3432481363415718e-003 - -0.2026983946561813 - 0.0139673100784421 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -3.0109770596027374e-003 - 0.2396494001150131 - -0.0214331708848476 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 9 8 9 2 2. - <_> - 0 10 9 2 2. - 0 - 0.0795640870928764 - 0.0169675108045340 - -0.3126080930233002 - <_> - - <_> - - - - <_> - 8 4 2 4 -1. - <_> - 8 6 2 2 2. - 0 - -0.0168946702033281 - 0.1459030061960220 - -0.0348196700215340 - <_> - - <_> - - - - <_> - 3 4 12 9 -1. - <_> - 7 7 4 3 9. - 0 - 0.6578676104545593 - -0.0130230896174908 - 0.4104476869106293 - <_> - - <_> - - - - <_> - 9 1 4 7 -1. - <_> - 9 1 2 7 2. - 1 - -0.1127222031354904 - -0.3777270913124085 - 0.0159226898103952 - <_> - - <_> - - - - <_> - 11 0 4 2 -1. - <_> - 12 1 2 2 2. - 1 - 0.0177928805351257 - 0.0118195097893476 - -0.2466803938150406 - <_> - - <_> - - - - <_> - 7 0 2 4 -1. - <_> - 6 1 2 2 2. - 1 - 3.3843109849840403e-003 - 0.0420966595411301 - -0.1362892985343933 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 12 0 1 2 2. - 1 - 0.0129303801804781 - 0.0156342405825853 - -0.3155972063541412 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - 0.0198661200702190 - -0.0198671799153090 - 0.2729283869266510 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0202569793909788 - -0.7507926821708679 - 3.6987708881497383e-003 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - -6.8132500164210796e-003 - -0.1871719062328339 - 0.0291250105947256 - <_> - - <_> - - - - <_> - 13 1 4 4 -1. - <_> - 15 1 2 2 2. - <_> - 13 3 2 2 2. - 0 - -0.0134505499154329 - 0.2419849932193756 - -0.0111368801444769 - <_> - - <_> - - - - <_> - 2 0 2 1 -1. - <_> - 3 0 1 1 2. - 0 - -5.3866169764660299e-005 - 0.0751902163028717 - -0.0758378133177757 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 15 0 1 1 2. - <_> - 14 1 1 1 2. - 0 - 5.0485909014241770e-005 - -0.0479880385100842 - 0.0507909804582596 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 1 1 2. - <_> - 3 1 1 1 2. - 0 - -6.4496016420889646e-005 - 0.0863163173198700 - -0.0676591396331787 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 15 0 1 1 2. - <_> - 14 1 1 1 2. - 0 - -4.8561800213064998e-005 - 0.0952962711453438 - -0.0720320492982864 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 1 1 2. - <_> - 3 1 1 1 2. - 0 - 5.0147060392191634e-005 - -0.0706219524145126 - 0.0916848704218864 - <_> - - <_> - - - - <_> - 16 0 1 4 -1. - <_> - 16 1 1 2 2. - 0 - 7.7007611980661750e-004 - -0.0312023907899857 - 0.0549915507435799 - <_> - - <_> - - - - <_> - 0 3 6 2 -1. - <_> - 3 3 3 2 2. - 0 - 9.6719879657030106e-003 - -0.0433308891952038 - 0.1151764988899231 - <_> - - <_> - - - - <_> - 16 1 2 6 -1. - <_> - 17 1 1 3 2. - <_> - 16 4 1 3 2. - 0 - 7.5680748559534550e-003 - -0.0232947506010532 - 0.2060377001762390 - <_> - - <_> - - - - <_> - 1 13 2 2 -1. - <_> - 2 13 1 2 2. - 0 - 5.0460308557376266e-004 - 0.0510324798524380 - -0.1127713993191719 - <_> - - <_> - - - - <_> - 16 1 2 6 -1. - <_> - 17 1 1 3 2. - <_> - 16 4 1 3 2. - 0 - -3.7291790358722210e-003 - 0.0791396573185921 - -0.0201081596314907 - <_> - - <_> - - - - <_> - 5 0 3 4 -1. - <_> - 5 2 3 2 2. - 0 - 0.0155905103310943 - 0.0178762990981340 - -0.3296821117401123 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 15 1 2 1 3. - 1 - -0.0543143115937710 - -0.5602126121520996 - 1.0424769716337323e-003 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - 7.8423749655485153e-003 - -0.0343349911272526 - 0.1776601970195770 - <_> - - <_> - - - - <_> - 11 2 3 3 -1. - <_> - 11 3 3 1 3. - 0 - 6.9496310316026211e-003 - 0.0119108697399497 - -0.2833696901798248 - <_> - - <_> - - - - <_> - 4 2 3 3 -1. - <_> - 4 3 3 1 3. - 0 - -4.2853900231420994e-003 - -0.2330842018127441 - 0.0223415307700634 - <_> - - <_> - - - - <_> - 10 3 1 2 -1. - <_> - 10 4 1 1 2. - 0 - 4.8665860958863050e-005 - -0.0438981205224991 - 0.0437583401799202 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 1 1 2. - <_> - 8 4 1 1 2. - 0 - -5.6118220527423546e-005 - 0.0808287113904953 - -0.0694800913333893 - <_> - - <_> - - - - <_> - 6 8 6 2 -1. - <_> - 6 9 6 1 2. - 0 - -0.0484328605234623 - -0.7912955284118652 - 6.5139750950038433e-003 - <_> - - <_> - - - - <_> - 0 10 9 3 -1. - <_> - 3 10 3 3 3. - 0 - 0.0152241997420788 - -0.0400892198085785 - 0.1345576941967011 - <_> - - <_> - - - - <_> - 6 12 10 1 -1. - <_> - 6 12 5 1 2. - 0 - -0.0128723401576281 - 0.0560490600764751 - -0.0245438907295465 - <_> - - <_> - - - - <_> - 2 12 8 3 -1. - <_> - 6 12 4 3 2. - 0 - 0.0282472502440214 - -0.0394716411828995 - 0.1513788998126984 - <_> - - <_> - - - - <_> - 13 12 4 2 -1. - <_> - 14 12 2 2 2. - 0 - 7.4682589620351791e-003 - 0.0130424499511719 - -0.2048127055168152 - <_> - - <_> - - - - <_> - 4 11 3 4 -1. - <_> - 4 12 3 2 2. - 0 - -0.0469749011099339 - 0.8017169833183289 - -7.1750162169337273e-003 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 13 10 1 2 2. - 1 - 0.0132254697382450 - -0.0139600699767470 - 0.1729875057935715 - <_> - - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 5 10 2 1 2. - 1 - 2.1193178836256266e-003 - 0.0469035208225250 - -0.1572621017694473 - <_> - - <_> - - - - <_> - 11 0 6 9 -1. - <_> - 13 2 2 9 3. - 1 - 0.2148717045783997 - 3.7922300398349762e-003 - -0.3814384043216705 - <_> - - <_> - - - - <_> - 6 2 8 3 -1. - <_> - 8 4 4 3 2. - 1 - 0.1509134024381638 - -0.0139226997271180 - 0.4097478985786438 - <_> - - <_> - - - - <_> - 11 0 6 9 -1. - <_> - 13 2 2 9 3. - 1 - -0.2302934974431992 - -0.5820657014846802 - 1.1216839775443077e-003 - <_> - - <_> - - - - <_> - 7 0 9 6 -1. - <_> - 5 2 9 2 3. - 1 - 0.1403041034936905 - 0.0169044900685549 - -0.3682535886764526 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 9 4 1 1 2. - 0 - 7.0036112447269261e-005 - -0.0551543496549129 - 0.0726215615868568 - <_> - - <_> - - - - <_> - 3 2 10 13 -1. - <_> - 8 2 5 13 2. - 0 - 0.4960846900939941 - 7.3583098128437996e-003 - -0.7018330097198486 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - -2.3255969863384962e-003 - -0.1482249945402145 - 0.0326147899031639 - <_> - - <_> - - - - <_> - 5 0 7 8 -1. - <_> - 5 2 7 4 2. - 0 - -0.0138854403048754 - 0.1609764993190765 - -0.0331473685801029 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - -7.6077110134065151e-003 - -0.5095651745796204 - 5.0284918397665024e-003 - <_> - - <_> - - - - <_> - 8 6 1 3 -1. - <_> - 8 7 1 1 3. - 0 - 2.9671129304915667e-003 - 0.0319776199758053 - -0.1969588994979858 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - 5.5358321405947208e-003 - -0.0565205812454224 - 0.1075361967086792 - <_> - - <_> - - - - <_> - 0 7 17 4 -1. - <_> - 0 9 17 2 2. - 0 - -0.0710219964385033 - 0.0791943371295929 - -0.0813843309879303 - <_> - - <_> - - - - <_> - 12 6 6 9 -1. - <_> - 12 9 6 3 3. - 0 - 0.0458000712096691 - -0.0307503994554281 - 0.1565207988023758 - <_> - - <_> - - - - <_> - 1 0 3 3 -1. - <_> - 2 0 1 3 3. - 0 - 6.7807468585669994e-003 - 0.0189444404095411 - -0.3011228144168854 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 12 8 1 1 2. - <_> - 11 9 1 1 2. - 0 - -1.9455070141702890e-003 - 0.1272296011447907 - -0.0254848394542933 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 0 10 18 2 2. - 0 - 0.1861845999956131 - 9.0244021266698837e-003 - -0.5448626279830933 - <_> - - <_> - - - - <_> - 9 0 1 3 -1. - <_> - 9 1 1 1 3. - 0 - -5.9605968999676406e-005 - 0.0626633614301682 - -0.0534323900938034 - <_> - - <_> - - - - <_> - 0 4 18 2 -1. - <_> - 0 4 9 1 2. - <_> - 9 5 9 1 2. - 0 - -0.0237148292362690 - -0.6018021106719971 - 7.9368790611624718e-003 - <_> - - <_> - - - - <_> - 5 2 12 4 -1. - <_> - 11 2 6 2 2. - <_> - 5 4 6 2 2. - 0 - -0.0313583016395569 - -0.1772198975086212 - 9.2706838622689247e-003 - <_> - - <_> - - - - <_> - 1 2 12 4 -1. - <_> - 1 2 6 2 2. - <_> - 7 4 6 2 2. - 0 - -0.0349689982831478 - 0.3794535100460053 - -0.0169909205287695 - <_> - - <_> - - - - <_> - 15 4 1 8 -1. - <_> - 13 6 1 4 2. - 1 - -0.0624166503548622 - -0.4159173965454102 - 4.8467209562659264e-003 - <_> - - <_> - - - - <_> - 3 4 8 1 -1. - <_> - 5 6 4 1 2. - 1 - 0.0422837510704994 - 9.8220221698284149e-003 - -0.4765555858612061 - <_> - - <_> - - - - <_> - 9 8 8 2 -1. - <_> - 13 8 4 1 2. - <_> - 9 9 4 1 2. - 0 - 5.1127527840435505e-003 - -0.0367820709943771 - 0.1647402048110962 - <_> - - <_> - - - - <_> - 4 8 6 2 -1. - <_> - 4 8 3 1 2. - <_> - 7 9 3 1 2. - 0 - -0.0112114502117038 - 0.1880359053611755 - -0.0276528596878052 - <_> - - <_> - - - - <_> - 3 3 12 2 -1. - <_> - 9 3 6 1 2. - <_> - 3 4 6 1 2. - 0 - 5.2367132157087326e-003 - 0.0286790002137423 - -0.1775102019309998 - <_> - - <_> - - - - <_> - 4 1 1 4 -1. - <_> - 4 2 1 2 2. - 0 - -5.3686140745412558e-005 - 0.0753717795014381 - -0.0666650682687759 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 6 1 1 9. - 0 - 0.0128402002155781 - 0.0218078903853893 - -0.1272031962871552 - <_> - - <_> - - - - <_> - 0 1 3 14 -1. - <_> - 1 1 1 14 3. - 0 - 0.0427928082644939 - 7.5381440110504627e-003 - -0.7186136245727539 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 15 7 2 1 3. - 1 - -5.2706589922308922e-003 - 0.0988220199942589 - -0.0448588803410530 - <_> - - <_> - - - - <_> - 4 1 3 2 -1. - <_> - 4 2 3 1 2. - 0 - -8.2180468598380685e-004 - -0.1059567034244537 - 0.0440276414155960 - <_> - - <_> - - - - <_> - 16 1 2 6 -1. - <_> - 17 1 1 3 2. - <_> - 16 4 1 3 2. - 0 - -0.0192952807992697 - -0.4121721982955933 - 2.9048579744994640e-003 - <_> - - <_> - - - - <_> - 0 1 2 6 -1. - <_> - 0 1 1 3 2. - <_> - 1 4 1 3 2. - 0 - -2.0072490442544222e-003 - 0.1149147972464562 - -0.0455907806754112 - <_> - - <_> - - - - <_> - 6 0 9 7 -1. - <_> - 9 0 3 7 3. - 0 - -0.0550463087856770 - 0.1894032955169678 - -0.0119002396240830 - <_> - - <_> - - - - <_> - 3 0 9 7 -1. - <_> - 6 0 3 7 3. - 0 - -0.1124947965145111 - 0.2426909953355789 - -0.0220534801483154 - <_> - - <_> - - - - <_> - 9 0 1 6 -1. - <_> - 9 0 1 3 2. - 1 - 9.5265945419669151e-003 - -0.0385538190603256 - 0.0301385801285505 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 9 0 3 1 2. - 1 - 8.8573405519127846e-003 - -0.0646601468324661 - 0.0850300714373589 - <_> - - <_> - - - - <_> - 11 3 5 4 -1. - <_> - 11 5 5 2 2. - 0 - -5.3099901415407658e-003 - -0.0779245272278786 - 0.0518223904073238 - <_> - - <_> - - - - <_> - 9 0 9 6 -1. - <_> - 7 2 9 2 3. - 1 - 0.1524796932935715 - 0.0170198101550341 - -0.2801989912986755 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 6 2 3 2. - 1 - -0.0514544583857059 - -0.2223165035247803 - 8.8541666045784950e-003 - <_> - - <_> - - - - <_> - 7 3 4 7 -1. - <_> - 9 3 2 7 2. - 0 - 0.0254663806408644 - -0.0549487285315990 - 0.0890722572803497 - <_> - - <_> - - - - <_> - 12 1 4 6 -1. - <_> - 10 3 4 2 3. - 1 - 0.2543771862983704 - 2.0636660046875477e-003 - -0.8708871006965637 - <_> - - <_> - - - - <_> - 4 1 4 14 -1. - <_> - 4 8 4 7 2. - 0 - -0.2286273986101151 - 0.2003466039896011 - -0.0253187809139490 - <_> - - <_> - - - - <_> - 1 6 16 3 -1. - <_> - 1 7 16 1 3. - 0 - -0.0118133397772908 - 0.1338717043399811 - -0.0365035310387611 - <_> - - <_> - - - - <_> - 5 6 6 3 -1. - <_> - 7 7 2 1 9. - 0 - -0.0201183203607798 - -0.2012384980916977 - 0.0280736796557903 - <_> - - <_> - - - - <_> - 9 8 8 2 -1. - <_> - 13 8 4 1 2. - <_> - 9 9 4 1 2. - 0 - 0.0217740796506405 - -6.5130768343806267e-003 - 0.2802217006683350 - <_> - - <_> - - - - <_> - 1 8 8 2 -1. - <_> - 1 8 4 1 2. - <_> - 5 9 4 1 2. - 0 - 4.8404871486127377e-003 - -0.0298142507672310 - 0.1597764939069748 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -1.1922290286747739e-004 - 0.0340446382761002 - -0.1605768054723740 - <_> - - <_> - - - - <_> - 0 9 1 4 -1. - <_> - 0 10 1 2 2. - 0 - -7.2792158462107182e-003 - -0.4833438098430634 - 9.9527724087238312e-003 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 11 8 1 1 2. - <_> - 10 9 1 1 2. - 0 - 2.5904899302986450e-005 - -0.0381436906754971 - 0.0470281802117825 - <_> - - <_> - - - - <_> - 6 4 5 8 -1. - <_> - 6 6 5 4 2. - 0 - -0.0909861028194427 - 0.2697112858295441 - -0.0179479792714119 - <_> - - <_> - - - - <_> - 1 8 16 6 -1. - <_> - 1 10 16 2 3. - 0 - -0.2087876945734024 - 0.2300664037466049 - -0.0216091796755791 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - -7.0507721975445747e-003 - -0.2504821121692658 - 0.0200520195066929 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - 8.9825186878442764e-003 - -0.0180237293243408 - 0.2951684892177582 - <_> - - <_> - - - - <_> - 8 3 6 1 -1. - <_> - 10 5 2 1 3. - 1 - 0.0597062110900879 - -0.0128449099138379 - 0.3559386134147644 - <_> - - <_> - - - - <_> - 0 4 18 2 -1. - <_> - 9 4 9 1 2. - <_> - 0 5 9 1 2. - 0 - -0.0103647699579597 - -0.2009311020374298 - 0.0278272200375795 - <_> - - <_> - - - - <_> - 0 9 2 5 -1. - <_> - 1 9 1 5 2. - 0 - -0.0194542594254017 - -0.5303530097007752 - 9.0706236660480499e-003 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 16 6 1 1 3. - 1 - -2.1027070470154285e-003 - 0.0885996073484421 - -0.0361577197909355 - <_> - - <_> - - - - <_> - 1 5 3 1 -1. - <_> - 2 6 1 1 3. - 1 - 7.5333649292588234e-003 - -0.0244578700512648 - 0.1936513036489487 - <_> - - <_> - - - - <_> - 17 6 1 4 -1. - <_> - 17 7 1 2 2. - 0 - 5.1182601600885391e-003 - 0.0174081493169069 - -0.2255457043647766 - <_> - - <_> - - - - <_> - 0 6 1 4 -1. - <_> - 0 7 1 2 2. - 0 - 2.1947720088064671e-003 - 0.0296904593706131 - -0.1958502978086472 - <_> - - <_> - - - - <_> - 14 3 4 6 -1. - <_> - 14 5 4 2 3. - 0 - 0.0412029810249805 - -0.0132970996201038 - 0.1000028029084206 - <_> - - <_> - - - - <_> - 0 3 4 6 -1. - <_> - 0 5 4 2 3. - 0 - 0.0161616802215576 - 0.0401702187955379 - -0.1321049034595490 - <_> - - <_> - - - - <_> - 7 7 6 6 -1. - <_> - 9 9 2 2 9. - 0 - 0.1274060010910034 - 9.2737795785069466e-003 - -0.2394157946109772 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -2.6743640191853046e-003 - 0.2325102984905243 - -0.0232730191200972 - <_> - - <_> - - - - <_> - 2 9 16 3 -1. - <_> - 6 9 8 3 2. - 0 - -0.1170528009533882 - -0.2183447033166885 - 0.0135161597281694 - <_> - - <_> - - - - <_> - 3 4 3 2 -1. - <_> - 4 5 1 2 3. - 1 - 6.6700777970254421e-003 - -0.0436670817434788 - 0.1079972982406616 - <_> - - <_> - - - - <_> - 15 5 3 3 -1. - <_> - 14 6 3 1 3. - 1 - 0.0400560796260834 - -6.8564810790121555e-003 - 0.2937721014022827 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 6 1 3 3. - 1 - -4.5556342229247093e-003 - 0.1104653999209404 - -0.0465722493827343 - <_> - - <_> - - - - <_> - 10 2 3 10 -1. - <_> - 11 2 1 10 3. - 0 - 0.0315735116600990 - 9.8816202953457832e-003 - -0.4157396852970123 - <_> - - <_> - - - - <_> - 3 2 4 5 -1. - <_> - 4 2 2 5 2. - 0 - -0.0248094201087952 - -0.3319647908210754 - 0.0140330903232098 - <_> - - <_> - - - - <_> - 13 4 2 2 -1. - <_> - 13 4 1 2 2. - 1 - -2.8404951444827020e-004 - -0.0977882891893387 - 0.0236715003848076 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 5 4 2 1 2. - 1 - 4.0798787958920002e-003 - 0.0679533332586288 - -0.0907793864607811 - <_> - - <_> - - - - <_> - 9 2 1 6 -1. - <_> - 9 4 1 2 3. - 0 - -0.0226807501167059 - -0.8081390261650085 - 3.1646140851080418e-003 - <_> - - <_> - - - - <_> - 6 13 3 1 -1. - <_> - 7 13 1 1 3. - 0 - -1.6572299646213651e-003 - 0.1429641991853714 - -0.0321753397583961 - <_> - - <_> - - - - <_> - 9 8 2 6 -1. - <_> - 10 8 1 3 2. - <_> - 9 11 1 3 2. - 0 - -0.0209627896547318 - -0.7540594935417175 - 3.1872680410742760e-003 - <_> - - <_> - - - - <_> - 7 12 4 2 -1. - <_> - 8 12 2 2 2. - 0 - -1.0227429447695613e-003 - 0.0832900702953339 - -0.0552086904644966 - <_> - - <_> - - - - <_> - 9 0 3 7 -1. - <_> - 10 1 1 7 3. - 1 - -3.0178760644048452e-003 - -0.0410230606794357 - 0.0196295809000731 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 6 3 3 6 2. - 1 - 0.1914006024599075 - 0.0175436791032553 - -0.2556655108928680 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -0.0189527608454227 - 0.3286316096782684 - -4.8918230459094048e-003 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 0 9 3 1 3. - 0 - -4.5249331742525101e-003 - -0.1561917066574097 - 0.0295387599617243 - <_> - - <_> - - - - <_> - 9 2 1 3 -1. - <_> - 8 3 1 1 3. - 1 - -4.9335299991071224e-003 - -0.1536104977130890 - 0.0127125997096300 - <_> - - <_> - - - - <_> - 1 6 16 3 -1. - <_> - 1 7 16 1 3. - 0 - 0.0189859308302403 - -0.0395853891968727 - 0.1203117966651917 - <_> - - <_> - - - - <_> - 9 9 1 2 -1. - <_> - 9 9 1 1 2. - 1 - -1.5369809698313475e-003 - 0.0511838011443615 - -0.0198078006505966 - <_> - - <_> - - - - <_> - 7 9 3 3 -1. - <_> - 8 10 1 1 9. - 0 - 0.0313022881746292 - 7.9048639163374901e-003 - -0.5422518253326416 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 17 1 1 1 3. - 0 - -7.9099438153207302e-004 - 0.0733341798186302 - -0.0247610397636890 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - 4.5027391024632379e-005 - -0.0677618235349655 - 0.0672639682888985 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 5.1923059800174087e-005 - -0.0342731587588787 - 0.0385947003960609 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -5.7095869124168530e-005 - 0.0838238298892975 - -0.0660852268338203 - <_> - - <_> - - - - <_> - 13 2 4 6 -1. - <_> - 13 5 4 3 2. - 0 - -0.1215929016470909 - -0.7001026272773743 - 1.8631670391187072e-003 - <_> - - <_> - - - - <_> - 1 2 4 6 -1. - <_> - 1 5 4 3 2. - 0 - 0.0174945406615734 - 0.0259598605334759 - -0.1810075044631958 - <_> - - <_> - - - - <_> - 4 0 12 11 -1. - <_> - 8 0 4 11 3. - 0 - -0.0633600726723671 - 0.1302110999822617 - -8.8773788884282112e-003 - <_> - - <_> - - - - <_> - 0 1 12 14 -1. - <_> - 6 1 6 14 2. - 0 - -0.3935186862945557 - -0.6352580785751343 - 8.2348221912980080e-003 - <_> - - <_> - - - - <_> - 10 5 8 9 -1. - <_> - 12 5 4 9 2. - 0 - -0.0147491302341223 - 0.0573673695325851 - -0.0774541124701500 - <_> - - <_> - - - - <_> - 0 12 18 2 -1. - <_> - 9 12 9 2 2. - 0 - 7.4586831033229828e-003 - -0.0738315135240555 - 0.0729713514447212 - <_> - - <_> - - - - <_> - 8 14 2 1 -1. - <_> - 8 14 1 1 2. - 0 - 6.0465059505077079e-005 - -0.0687413066625595 - 0.0833826810121536 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 8 13 1 1 2. - <_> - 9 14 1 1 2. - 0 - 6.3182349549606442e-005 - -0.0648377612233162 - 0.0794876664876938 - <_> - - <_> - - - - <_> - 9 11 4 4 -1. - <_> - 10 11 2 4 2. - 0 - -0.0179907493293285 - -0.3418853878974915 - 8.2358242943882942e-003 - <_> - - <_> - - - - <_> - 5 11 4 4 -1. - <_> - 6 11 2 4 2. - 0 - -1.7810800345614552e-003 - 0.0831420794129372 - -0.0662932470440865 - -1.1628010272979736 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 2 12 9 -1. - <_> - 7 5 4 3 9. - 0 - 0.5282195806503296 - -0.1120738014578819 - 0.4649200141429901 - <_> - - <_> - - - - <_> - 11 8 6 3 -1. - <_> - 11 8 3 3 2. - 0 - -8.3934608846902847e-003 - 0.1242000982165337 - -0.0984233617782593 - <_> - - <_> - - - - <_> - 2 7 8 4 -1. - <_> - 4 7 4 4 2. - 0 - -0.0125337103381753 - 0.1294067054986954 - -0.2182607054710388 - <_> - - <_> - - - - <_> - 14 2 4 2 -1. - <_> - 14 2 2 2 2. - 0 - -2.6514590717852116e-003 - 0.1074666976928711 - -0.0652235969901085 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 8 7 2 1 2. - 0 - -1.2469879584386945e-003 - 0.0948277264833450 - -0.1972541064023972 - <_> - - <_> - - - - <_> - 9 5 4 2 -1. - <_> - 10 6 2 2 2. - 1 - -0.0105062201619148 - -0.1786229014396668 - 0.0707185864448547 - <_> - - <_> - - - - <_> - 0 2 4 2 -1. - <_> - 2 2 2 2 2. - 0 - -1.4628679491579533e-003 - 0.0773052126169205 - -0.1588167995214462 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 7 1 2 3. - 1 - 0.0117471702396870 - 0.0412793383002281 - -0.1657488942146301 - <_> - - <_> - - - - <_> - 8 6 2 3 -1. - <_> - 7 7 2 1 3. - 1 - 2.1636099554598331e-003 - -0.0817365422844887 - 0.1844726949930191 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 11 8 1 2 2. - 1 - -0.0156048499047756 - 0.1840981990098953 - 9.1587323695421219e-003 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 2 1 2. - 1 - -6.7909010685980320e-003 - 0.1927130073308945 - -0.0610056594014168 - <_> - - <_> - - - - <_> - 8 8 2 4 -1. - <_> - 8 10 2 2 2. - 0 - -4.6382728032767773e-003 - 0.0721243992447853 - -0.1547524929046631 - <_> - - <_> - - - - <_> - 5 3 8 6 -1. - <_> - 5 6 8 3 2. - 0 - -0.1059508025646210 - 0.1698832064867020 - -0.0774008184671402 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 13 0 1 4 2. - 1 - 0.0222781002521515 - 0.0300818495452404 - -0.3189120888710022 - <_> - - <_> - - - - <_> - 4 5 10 4 -1. - <_> - 4 7 10 2 2. - 0 - 0.0383511297404766 - -0.0293571297079325 - 0.3784500956535339 - <_> - - <_> - - - - <_> - 10 14 6 1 -1. - <_> - 12 14 2 1 3. - 0 - 0.0127405496314168 - 0.0121086901053786 - -0.2898040115833283 - <_> - - <_> - - - - <_> - 5 0 3 6 -1. - <_> - 5 3 3 3 2. - 0 - -0.0119678396731615 - -0.2752982974052429 - 0.0334202796220779 - <_> - - <_> - - - - <_> - 7 0 6 2 -1. - <_> - 7 1 6 1 2. - 0 - 6.2382412143051624e-003 - 0.0232270695269108 - -0.2876886129379273 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 0 11 18 1 2. - 0 - 1.2571290135383606e-003 - -0.1228341981768608 - 0.0775459334254265 - <_> - - <_> - - - - <_> - 14 3 4 12 -1. - <_> - 14 9 4 6 2. - 0 - 0.0977464169263840 - 0.0120771396905184 - -0.3209269940853119 - <_> - - <_> - - - - <_> - 3 0 12 3 -1. - <_> - 3 1 12 1 3. - 0 - -5.9180860407650471e-003 - -0.2275620996952057 - 0.0447532683610916 - <_> - - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 7 1 1 2. - 1 - 6.4139030873775482e-003 - 0.0401469282805920 - -0.0504605211317539 - <_> - - <_> - - - - <_> - 2 14 6 1 -1. - <_> - 4 14 2 1 3. - 0 - 9.2285759747028351e-003 - 0.0234754905104637 - -0.3772892057895660 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -2.6009760331362486e-003 - 0.0580360703170300 - -0.0397480018436909 - <_> - - <_> - - - - <_> - 3 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 4.5100939460098743e-003 - -0.1500709950923920 - 0.0647656172513962 - <_> - - <_> - - - - <_> - 8 0 10 15 -1. - <_> - 8 0 5 15 2. - 0 - -0.3092997968196869 - -0.3616220951080322 - 5.2778669632971287e-003 - <_> - - <_> - - - - <_> - 0 0 10 15 -1. - <_> - 5 0 5 15 2. - 0 - 0.1664361059665680 - 0.0580257400870323 - -0.1667063981294632 - <_> - - <_> - - - - <_> - 15 0 1 14 -1. - <_> - 15 7 1 7 2. - 0 - -0.0292491707950830 - -0.1041812002658844 - 0.0473819412291050 - <_> - - <_> - - - - <_> - 9 1 9 2 -1. - <_> - 12 4 3 2 3. - 1 - 0.0578976906836033 - -0.0827134624123573 - 0.1230174973607063 - <_> - - <_> - - - - <_> - 15 0 1 14 -1. - <_> - 15 7 1 7 2. - 0 - 0.0439998507499695 - 3.1090460252016783e-003 - -0.3888421058654785 - <_> - - <_> - - - - <_> - 3 5 12 10 -1. - <_> - 3 5 6 5 2. - <_> - 9 10 6 5 2. - 0 - -0.1334455013275147 - -0.2756403982639313 - 0.0307342596352100 - <_> - - <_> - - - - <_> - 1 0 16 2 -1. - <_> - 9 0 8 1 2. - <_> - 1 1 8 1 2. - 0 - 8.4765329957008362e-003 - 0.0265623796731234 - -0.2864835858345032 - <_> - - <_> - - - - <_> - 0 6 2 3 -1. - <_> - 0 7 2 1 3. - 0 - 6.2942858785390854e-003 - 0.0198616907000542 - -0.3646562099456787 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 13 2 4 1 3. - 1 - 0.0118541996926069 - -0.0481690689921379 - 0.1577796936035156 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 5 2. - <_> - 9 5 9 5 2. - 0 - -0.1097894981503487 - -0.2161000967025757 - 0.0352399796247482 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 0 - 1.2859810376539826e-003 - -0.0768053531646729 - 0.0990003198385239 - <_> - - <_> - - - - <_> - 4 0 10 8 -1. - <_> - 9 0 5 8 2. - 0 - 0.1088009998202324 - -0.0982203707098961 - 0.1162839010357857 - <_> - - <_> - - - - <_> - 8 3 4 1 -1. - <_> - 8 3 2 1 2. - 0 - 0.0142060602083802 - 4.8896879889070988e-003 - -0.3838334977626801 - <_> - - <_> - - - - <_> - 6 3 4 1 -1. - <_> - 8 3 2 1 2. - 0 - 0.0132633903995156 - 0.0221766997128725 - -0.3880636096000671 - <_> - - <_> - - - - <_> - 3 12 15 2 -1. - <_> - 3 13 15 1 2. - 0 - 7.9566845670342445e-003 - -0.0713148191571236 - 0.0741146504878998 - <_> - - <_> - - - - <_> - 0 7 18 8 -1. - <_> - 0 9 18 4 2. - 0 - 0.0769576579332352 - -0.0361662209033966 - 0.2575767934322357 - <_> - - <_> - - - - <_> - 11 4 3 6 -1. - <_> - 11 6 3 2 3. - 0 - 0.0100203501060605 - -0.0785313323140144 - 0.0633838027715683 - <_> - - <_> - - - - <_> - 3 3 2 3 -1. - <_> - 2 4 2 1 3. - 1 - 9.2017520219087601e-003 - 0.0293919891119003 - -0.2573288083076477 - <_> - - <_> - - - - <_> - 15 3 3 3 -1. - <_> - 14 4 3 1 3. - 1 - 0.0307231806218624 - -0.0187381394207478 - 0.2283234000205994 - <_> - - <_> - - - - <_> - 3 3 3 3 -1. - <_> - 4 4 1 3 3. - 1 - 0.0110199600458145 - -0.0532967299222946 - 0.1749452054500580 - <_> - - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 14 3 3 1 3. - 1 - -0.0274540707468987 - 0.1702467948198319 - -8.2028387114405632e-003 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 3 1 3 3. - 1 - -0.0136898197233677 - 0.2001978009939194 - -0.0419919602572918 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 1 1 2 3. - 1 - -8.1678535789251328e-003 - -0.2626230120658875 - 0.0103546399623156 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 0.0100999800488353 - -0.0449482612311840 - 0.1852373033761978 - <_> - - <_> - - - - <_> - 3 5 12 10 -1. - <_> - 3 5 6 10 2. - 0 - 0.2002492994070053 - -0.0368244796991348 - 0.2407283037900925 - <_> - - <_> - - - - <_> - 9 1 1 4 -1. - <_> - 9 1 1 2 2. - 1 - 3.7789789494127035e-003 - -0.1391090005636215 - 0.0761268436908722 - <_> - - <_> - - - - <_> - 6 0 6 5 -1. - <_> - 8 0 2 5 3. - 0 - -0.0111010000109673 - 0.2399149984121323 - -0.0364109985530376 - <_> - - <_> - - - - <_> - 0 1 18 6 -1. - <_> - 0 1 9 3 2. - <_> - 9 4 9 3 2. - 0 - 0.0620720200240612 - 0.0276025105267763 - -0.2976244091987610 - <_> - - <_> - - - - <_> - 10 7 1 2 -1. - <_> - 10 8 1 1 2. - 0 - -4.9415021203458309e-004 - 0.0430329516530037 - -0.1610901951789856 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 7 3 1 2. - <_> - 9 8 3 1 2. - 0 - -3.5258450079709291e-003 - -0.1741313040256500 - 0.0575136989355087 - <_> - - <_> - - - - <_> - 12 6 1 6 -1. - <_> - 12 8 1 2 3. - 0 - 5.6127668358385563e-003 - -0.0242344699800015 - 0.0987889915704727 - <_> - - <_> - - - - <_> - 5 9 4 2 -1. - <_> - 5 9 2 1 2. - <_> - 7 10 2 1 2. - 0 - 3.7660789676010609e-003 - -0.0366232991218567 - 0.2009083032608032 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 1 1 2 3. - 1 - 0.0154594099149108 - 7.6649021357297897e-003 - -0.2016355991363525 - <_> - - <_> - - - - <_> - 9 0 2 3 -1. - <_> - 8 1 2 1 3. - 1 - -0.0103579899296165 - -0.4239524006843567 - 0.0170050095766783 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 15 1 2 2 2. - 1 - -0.0131801199167967 - -0.2812205851078033 - 0.0253022592514753 - <_> - - <_> - - - - <_> - 8 0 9 6 -1. - <_> - 8 0 9 3 2. - 1 - 0.3639352023601532 - 0.0106940995901823 - -0.6518303751945496 - <_> - - <_> - - - - <_> - 6 9 8 2 -1. - <_> - 10 9 4 1 2. - <_> - 6 10 4 1 2. - 0 - 0.0457970909774303 - -1.0829409584403038e-003 - -0.6091793775558472 - <_> - - <_> - - - - <_> - 4 9 8 2 -1. - <_> - 4 9 4 1 2. - <_> - 8 10 4 1 2. - 0 - -0.0168178994208574 - 0.2406727969646454 - -0.0288416408002377 - <_> - - <_> - - - - <_> - 15 0 1 14 -1. - <_> - 15 7 1 7 2. - 0 - -0.0699327737092972 - -0.2456905990839005 - 1.4374910097103566e-004 - <_> - - <_> - - - - <_> - 2 0 1 14 -1. - <_> - 2 7 1 7 2. - 0 - 0.0370729491114616 - 0.0120472796261311 - -0.6182494759559631 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - -2.2509139962494373e-003 - -0.1386857032775879 - 0.0234417803585529 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - -0.0411305986344814 - -0.4958019852638245 - 0.0126163000240922 - <_> - - <_> - - - - <_> - 17 10 1 4 -1. - <_> - 17 11 1 2 2. - 0 - 2.3879110813140869e-005 - -0.0702746585011482 - 0.0652459263801575 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -3.2828738912940025e-003 - -0.2180141061544418 - 0.0284525100141764 - <_> - - <_> - - - - <_> - 14 2 4 8 -1. - <_> - 14 6 4 4 2. - 0 - -0.0589578114449978 - -0.1131016984581947 - 0.0356478206813335 - <_> - - <_> - - - - <_> - 1 9 16 2 -1. - <_> - 1 10 16 1 2. - 0 - 3.2863670639926568e-005 - -0.0697758123278618 - 0.0949401631951332 - <_> - - <_> - - - - <_> - 5 7 8 6 -1. - <_> - 5 10 8 3 2. - 0 - -0.0730367004871368 - 0.1069146022200584 - -0.0896811932325363 - <_> - - <_> - - - - <_> - 0 2 16 8 -1. - <_> - 0 2 8 4 2. - <_> - 8 6 8 4 2. - 0 - -0.1058195978403091 - 0.1823062002658844 - -0.0388196706771851 - <_> - - <_> - - - - <_> - 14 10 4 4 -1. - <_> - 16 10 2 2 2. - <_> - 14 12 2 2 2. - 0 - 4.6694820048287511e-004 - -0.1007533967494965 - 0.0651198998093605 - <_> - - <_> - - - - <_> - 0 9 1 3 -1. - <_> - 0 10 1 1 3. - 0 - -2.5920490734279156e-003 - -0.2544820904731751 - 0.0231018606573343 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 0.0104395002126694 - 4.0941308252513409e-003 - -0.5827335715293884 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -2.3739310563541949e-005 - 0.0606367290019989 - -0.1001473963260651 - <_> - - <_> - - - - <_> - 16 0 1 4 -1. - <_> - 16 1 1 2 2. - 0 - -2.2808990906924009e-003 - 0.1851990967988968 - -0.0254341196268797 - <_> - - <_> - - - - <_> - 0 10 1 4 -1. - <_> - 0 11 1 2 2. - 0 - -2.0937379449605942e-003 - -0.1919911056756973 - 0.0333683788776398 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 11 18 2 3. - 0 - -0.2182179987430573 - 0.3065988123416901 - -0.0218403805047274 - <_> - - <_> - - - - <_> - 3 0 8 2 -1. - <_> - 3 0 8 1 2. - 1 - 0.0115180201828480 - -0.1070621013641357 - 0.0582328587770462 - <_> - - <_> - - - - <_> - 8 9 10 6 -1. - <_> - 13 9 5 3 2. - <_> - 8 12 5 3 2. - 0 - -0.0315043888986111 - 0.1176773980259895 - -0.0459064915776253 - <_> - - <_> - - - - <_> - 1 12 12 1 -1. - <_> - 5 12 4 1 3. - 0 - -0.0294614192098379 - -0.2296009957790375 - 0.0288945809006691 - <_> - - <_> - - - - <_> - 13 0 2 8 -1. - <_> - 11 2 2 4 2. - 1 - -7.9243192449212074e-003 - 0.1419624984264374 - -0.0125654498115182 - <_> - - <_> - - - - <_> - 1 8 4 2 -1. - <_> - 1 8 2 1 2. - <_> - 3 9 2 1 2. - 0 - 4.1360300965607166e-003 - -0.0285923406481743 - 0.2037373036146164 - <_> - - <_> - - - - <_> - 12 4 2 6 -1. - <_> - 12 6 2 2 3. - 0 - 0.0104305995628238 - -0.0423329882323742 - 0.0525090992450714 - <_> - - <_> - - - - <_> - 4 0 10 8 -1. - <_> - 9 0 5 8 2. - 0 - -0.2438413947820664 - 0.3361566960811615 - -0.0189900696277618 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - 7.5686741620302200e-003 - 6.4027151092886925e-003 - -0.3058831095695496 - <_> - - <_> - - - - <_> - 9 0 1 2 -1. - <_> - 9 0 1 1 2. - 1 - 1.2688450515270233e-003 - -0.0901417508721352 - 0.0729410126805305 - <_> - - <_> - - - - <_> - 13 11 3 4 -1. - <_> - 13 12 3 2 2. - 0 - 0.0308157093822956 - 2.9594700317829847e-003 - -0.2435165941715241 - <_> - - <_> - - - - <_> - 2 11 3 4 -1. - <_> - 2 12 3 2 2. - 0 - 2.1978209260851145e-003 - -0.0633767321705818 - 0.1006520017981529 - <_> - - <_> - - - - <_> - 8 13 7 2 -1. - <_> - 8 14 7 1 2. - 0 - 6.1282119713723660e-003 - -0.0383862592279911 - 0.0665621683001518 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 2.8037100564688444e-003 - 0.0357193090021610 - -0.1542093008756638 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 15 1 2 1 3. - 1 - -3.9568650536239147e-003 - 0.0709167122840881 - -0.0399580597877502 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - 0.0139292301610112 - -0.0233923103660345 - 0.2814770042896271 - <_> - - <_> - - - - <_> - 13 0 4 3 -1. - <_> - 14 0 2 3 2. - 0 - -0.0101550603285432 - -0.1404235959053040 - 0.0185156203806400 - <_> - - <_> - - - - <_> - 1 0 4 3 -1. - <_> - 2 0 2 3 2. - 0 - 0.0146013703197241 - 0.0123592196032405 - -0.5497545003890991 - <_> - - <_> - - - - <_> - 16 0 1 4 -1. - <_> - 16 1 1 2 2. - 0 - 5.3091858717380092e-005 - -0.0439675599336624 - 0.0347095616161823 - <_> - - <_> - - - - <_> - 1 0 1 4 -1. - <_> - 1 1 1 2 2. - 0 - -2.1016378886997700e-003 - 0.2275288999080658 - -0.0287020802497864 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 1 2 1 2. - 1 - 6.4648198895156384e-003 - 0.0181927904486656 - -0.2227513045072556 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - -2.6089660823345184e-003 - -0.1483312994241715 - 0.0421623699367046 - <_> - - <_> - - - - <_> - 0 4 18 6 -1. - <_> - 0 6 18 2 3. - 0 - -0.0491728708148003 - 0.1821604967117310 - -0.0349443815648556 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -1.7964000580832362e-003 - 0.0488241016864777 - -0.1821431964635849 - <_> - - <_> - - - - <_> - 1 8 16 2 -1. - <_> - 1 9 16 1 2. - 0 - 7.3850047774612904e-003 - -0.0418660007417202 - 0.1861997991800308 - <_> - - <_> - - - - <_> - 3 4 8 2 -1. - <_> - 3 4 8 1 2. - 1 - 0.0205026101320982 - -0.0581343583762646 - 0.1378950029611588 - <_> - - <_> - - - - <_> - 6 0 9 11 -1. - <_> - 9 0 3 11 3. - 0 - 0.1163681969046593 - -0.0551596693694592 - 0.0670195221900940 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - -5.8732312172651291e-003 - 0.2340030074119568 - -0.0273893792182207 - <_> - - <_> - - - - <_> - 4 0 12 11 -1. - <_> - 7 0 6 11 2. - 0 - 0.2888160049915314 - 0.0193629097193480 - -0.1619012057781220 - <_> - - <_> - - - - <_> - 2 0 12 11 -1. - <_> - 5 0 6 11 2. - 0 - -0.1196641996502876 - 0.2455915063619614 - -0.0259939599782228 - <_> - - <_> - - - - <_> - 11 2 6 4 -1. - <_> - 11 2 3 4 2. - 0 - 3.8372459821403027e-003 - -0.1389679014682770 - 0.0567790493369102 - <_> - - <_> - - - - <_> - 5 1 2 2 -1. - <_> - 5 2 2 1 2. - 0 - -1.1065569706261158e-003 - -0.1620949953794479 - 0.0360417217016220 - <_> - - <_> - - - - <_> - 10 3 2 6 -1. - <_> - 8 5 2 2 3. - 1 - 0.0863595679402351 - -0.0102093601599336 - 0.2500715851783752 - <_> - - <_> - - - - <_> - 4 2 8 4 -1. - <_> - 4 3 8 2 2. - 0 - -0.0359533615410328 - -0.7569807171821594 - 8.1533808261156082e-003 - <_> - - <_> - - - - <_> - 11 1 2 8 -1. - <_> - 9 3 2 4 2. - 1 - 0.0827576965093613 - -0.0119722299277782 - 0.1315149962902069 - <_> - - <_> - - - - <_> - 0 1 18 14 -1. - <_> - 0 1 9 7 2. - <_> - 9 8 9 7 2. - 0 - 0.1455516070127487 - 0.0256695207208395 - -0.2337771952152252 - <_> - - <_> - - - - <_> - 13 5 5 10 -1. - <_> - 13 10 5 5 2. - 0 - 0.0666986927390099 - 0.0182299092411995 - -0.1238626986742020 - <_> - - <_> - - - - <_> - 9 3 6 2 -1. - <_> - 11 5 2 2 3. - 1 - 0.0987812727689743 - -0.0197382606565952 - 0.3210687935352325 - <_> - - <_> - - - - <_> - 9 0 7 8 -1. - <_> - 7 2 7 4 2. - 1 - -0.2824327945709229 - -0.5469413995742798 - 2.3887760471552610e-003 - <_> - - <_> - - - - <_> - 9 0 8 7 -1. - <_> - 11 2 4 7 2. - 1 - 0.2101342976093292 - 0.0181991197168827 - -0.3624803125858307 - <_> - - <_> - - - - <_> - 13 2 4 3 -1. - <_> - 12 3 4 1 3. - 1 - -6.5322709269821644e-004 - 0.0552163012325764 - -0.0308924391865730 - <_> - - <_> - - - - <_> - 5 2 3 4 -1. - <_> - 6 3 1 4 3. - 1 - -0.0345937386155128 - 0.3355734944343567 - -0.0155041199177504 - <_> - - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 10 1 3 1 3. - 0 - -5.2095651626586914e-003 - -0.2595745027065277 - 0.0123718800023198 - <_> - - <_> - - - - <_> - 2 3 13 6 -1. - <_> - 2 5 13 2 3. - 0 - 0.0672681182622910 - -0.0627519264817238 - 0.0915589928627014 - <_> - - <_> - - - - <_> - 8 5 2 3 -1. - <_> - 8 6 2 1 3. - 0 - 4.0582818910479546e-003 - 0.0410736314952374 - -0.1567548066377640 - <_> - - <_> - - - - <_> - 0 3 4 6 -1. - <_> - 0 6 4 3 2. - 0 - -0.0444693900644779 - -0.1934425979852676 - 0.0311934594064951 - <_> - - <_> - - - - <_> - 1 9 16 2 -1. - <_> - 1 10 16 1 2. - 0 - -2.8536471072584391e-003 - -0.0742046609520912 - 0.0826525837182999 - <_> - - <_> - - - - <_> - 5 5 6 4 -1. - <_> - 5 5 6 2 2. - 1 - 0.1215196028351784 - -0.0172205492854118 - 0.3772569000720978 - <_> - - <_> - - - - <_> - 13 0 2 8 -1. - <_> - 13 4 2 4 2. - 0 - 0.0527439787983894 - 7.3638479225337505e-003 - -0.3958064913749695 - <_> - - <_> - - - - <_> - 3 0 2 8 -1. - <_> - 3 4 2 4 2. - 0 - 0.0133668296039104 - 0.0302810091525316 - -0.1715900003910065 - <_> - - <_> - - - - <_> - 16 1 2 3 -1. - <_> - 15 2 2 1 3. - 1 - 7.8486632555723190e-003 - -0.0223950203508139 - 0.1505244970321655 - <_> - - <_> - - - - <_> - 1 3 3 1 -1. - <_> - 2 4 1 1 3. - 1 - -3.8255099207162857e-003 - 0.1378811001777649 - -0.0390050299465656 - <_> - - <_> - - - - <_> - 13 4 5 10 -1. - <_> - 13 9 5 5 2. - 0 - -0.1473706960678101 - 0.0984983816742897 - -0.0175660997629166 - <_> - - <_> - - - - <_> - 0 4 5 10 -1. - <_> - 0 9 5 5 2. - 0 - 0.0714110434055328 - 0.0232200995087624 - -0.2675958871841431 - <_> - - <_> - - - - <_> - 16 5 2 3 -1. - <_> - 15 6 2 1 3. - 1 - 0.0166891291737556 - -0.0217618402093649 - 0.1461742073297501 - <_> - - <_> - - - - <_> - 2 5 3 2 -1. - <_> - 3 6 1 2 3. - 1 - -3.2251640222966671e-003 - 0.1193147972226143 - -0.0540297999978065 - <_> - - <_> - - - - <_> - 10 10 8 4 -1. - <_> - 14 10 4 2 2. - <_> - 10 12 4 2 2. - 0 - 7.9702045768499374e-003 - -0.0543896183371544 - 0.0729502886533737 - <_> - - <_> - - - - <_> - 1 5 4 9 -1. - <_> - 3 5 2 9 2. - 0 - 0.0116266896948218 - 0.0324149206280708 - -0.1705735027790070 - <_> - - <_> - - - - <_> - 10 1 8 9 -1. - <_> - 10 1 4 9 2. - 0 - -0.0332335010170937 - -0.1532150954008102 - 0.0276584308594465 - <_> - - <_> - - - - <_> - 0 1 8 9 -1. - <_> - 4 1 4 9 2. - 0 - 0.0162025205790997 - -0.0798396766185761 - 0.0804151371121407 - <_> - - <_> - - - - <_> - 10 10 8 4 -1. - <_> - 14 10 4 2 2. - <_> - 10 12 4 2 2. - 0 - -0.0169930998235941 - 0.1070884987711906 - -0.0270955804735422 - <_> - - <_> - - - - <_> - 0 9 8 4 -1. - <_> - 0 9 4 2 2. - <_> - 4 11 4 2 2. - 0 - 5.2699539810419083e-003 - -0.0776714086532593 - 0.0904784426093102 - <_> - - <_> - - - - <_> - 3 0 14 2 -1. - <_> - 10 0 7 1 2. - <_> - 3 1 7 1 2. - 0 - -0.0112306997179985 - -0.3688867092132568 - 0.0147642102092505 - <_> - - <_> - - - - <_> - 0 13 18 2 -1. - <_> - 0 13 9 1 2. - <_> - 9 14 9 1 2. - 0 - 0.0216833408921957 - 0.0211919397115707 - -0.2431215047836304 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - -2.7136749122291803e-003 - 0.1293199062347412 - -0.0180541593581438 - <_> - - <_> - - - - <_> - 3 13 8 2 -1. - <_> - 3 14 8 1 2. - 0 - 3.8232649676501751e-003 - -0.0677571818232536 - 0.0790435373783112 - <_> - - <_> - - - - <_> - 4 13 10 2 -1. - <_> - 9 13 5 1 2. - <_> - 4 14 5 1 2. - 0 - 0.0129264900460839 - 0.0228535197675228 - -0.2579326927661896 - <_> - - <_> - - - - <_> - 6 13 1 2 -1. - <_> - 6 14 1 1 2. - 0 - -2.6950810570269823e-003 - 0.2166609019041061 - -0.0270976908504963 - <_> - - <_> - - - - <_> - 14 0 4 9 -1. - <_> - 14 0 2 9 2. - 1 - 0.2159149050712585 - 4.6611670404672623e-003 - -0.8688737154006958 - <_> - - <_> - - - - <_> - 4 0 9 4 -1. - <_> - 4 0 9 2 2. - 1 - 0.1681632995605469 - 0.0141299199312925 - -0.3501074910163879 - <_> - - <_> - - - - <_> - 6 5 6 3 -1. - <_> - 8 6 2 1 9. - 0 - -0.0491994395852089 - -0.7729945778846741 - 6.0964501462876797e-003 - <_> - - <_> - - - - <_> - 2 9 3 2 -1. - <_> - 3 10 1 2 3. - 1 - 0.0261047407984734 - 6.1850231140851974e-003 - -0.6686937212944031 - <_> - - <_> - - - - <_> - 6 0 7 2 -1. - <_> - 6 1 7 1 2. - 0 - 0.0145413503050804 - 5.0752838142216206e-003 - -0.7429249882698059 - <_> - - <_> - - - - <_> - 4 7 1 2 -1. - <_> - 4 8 1 1 2. - 0 - 1.1107119498774409e-003 - -0.0341122597455978 - 0.1507174968719482 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 10 5 2 3 2. - 1 - -0.0107706598937511 - -0.0934311375021935 - 0.0101868798956275 - <_> - - <_> - - - - <_> - 0 0 15 6 -1. - <_> - 5 0 5 6 3. - 0 - 0.0942776203155518 - -0.0600805804133415 - 0.0837868973612785 - <_> - - <_> - - - - <_> - 7 0 9 14 -1. - <_> - 10 0 3 14 3. - 0 - 0.1235508024692535 - -0.0419926010072231 - 0.0931324735283852 - <_> - - <_> - - - - <_> - 0 0 18 15 -1. - <_> - 6 0 6 15 3. - 0 - 0.8364567756652832 - 0.0113448603078723 - -0.5479543209075928 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 10 5 2 3 2. - 1 - 0.0352501794695854 - -0.0108188204467297 - 0.0904011875391006 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -5.1221748435636982e-005 - 0.0795160531997681 - -0.0667194202542305 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - 6.7162756749894470e-005 - -0.0442888401448727 - 0.0536684095859528 - <_> - - <_> - - - - <_> - 0 11 8 4 -1. - <_> - 0 11 4 2 2. - <_> - 4 13 4 2 2. - 0 - 4.6395221725106239e-003 - -0.0847273468971252 - 0.0621006116271019 - <_> - - <_> - - - - <_> - 16 12 2 3 -1. - <_> - 16 13 2 1 3. - 0 - -1.3368109939619899e-003 - -0.0803513526916504 - 0.0279868002980947 - <_> - - <_> - - - - <_> - 0 10 8 4 -1. - <_> - 0 10 4 2 2. - <_> - 4 12 4 2 2. - 0 - -0.0337816514074802 - 0.3246152102947235 - -0.0163126401603222 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 12 1 2 1 2. - 0 - -1.7830280121415854e-003 - -0.1649041026830673 - 0.0217570792883635 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 1 2 1 2. - 0 - 2.0984211005270481e-003 - 0.0295347701758146 - -0.1795125007629395 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - -5.3364270570455119e-005 - 0.0443317405879498 - -0.0367653109133244 - <_> - - <_> - - - - <_> - 0 11 11 4 -1. - <_> - 0 13 11 2 2. - 0 - 0.1226925998926163 - 0.0124071799218655 - -0.4055337905883789 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 10 5 2 3 2. - 1 - 0.0949875265359879 - -3.5644270246848464e-004 - -0.9999405145645142 - <_> - - <_> - - - - <_> - 9 4 3 4 -1. - <_> - 8 5 3 2 2. - 1 - -0.0637726783752441 - 0.7416344881057739 - -6.8990588188171387e-003 - <_> - - <_> - - - - <_> - 9 3 4 3 -1. - <_> - 10 4 2 3 2. - 1 - 0.0555911287665367 - -3.5102190449833870e-003 - 0.2164891064167023 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 6 4 3 2 2. - <_> - 9 6 3 2 2. - 0 - -0.0157034005969763 - -0.2336577028036118 - 0.0235169809311628 - <_> - - <_> - - - - <_> - 9 3 3 9 -1. - <_> - 10 4 1 9 3. - 1 - -0.1162799000740051 - -1. - 5.0003651995211840e-004 - <_> - - <_> - - - - <_> - 9 3 9 3 -1. - <_> - 8 4 9 1 3. - 1 - 0.0639397129416466 - 8.5324635729193687e-003 - -0.5650091767311096 - <_> - - <_> - - - - <_> - 16 12 2 3 -1. - <_> - 16 13 2 1 3. - 0 - 1.8591650296002626e-003 - -0.0215167496353388 - 0.0431870110332966 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 3 0 5 1 2. - <_> - 8 1 5 1 2. - 0 - 2.3360128980129957e-003 - 0.0451245903968811 - -0.1088766977190971 - <_> - - <_> - - - - <_> - 13 1 3 13 -1. - <_> - 14 1 1 13 3. - 0 - -0.0587388910353184 - -0.5649691224098206 - 5.2059069275856018e-003 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - 3.7132750730961561e-003 - -0.0134631600230932 - 0.3763531148433685 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 2.0255730487406254e-003 - 0.0314449593424797 - -0.1232260987162590 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 1 1 1 2. - 0 - -6.3382161897607148e-005 - 0.0770330131053925 - -0.0667390972375870 - <_> - - <_> - - - - <_> - 14 6 4 8 -1. - <_> - 14 10 4 4 2. - 0 - 0.1296906024217606 - 3.6417250521481037e-003 - -0.4113129973411560 - <_> - - <_> - - - - <_> - 0 6 4 8 -1. - <_> - 0 10 4 4 2. - 0 - -0.1191373988986015 - -0.6026347875595093 - 7.9903472214937210e-003 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -0.0128018800169230 - -0.5977100133895874 - 1.0519300121814013e-003 - <_> - - <_> - - - - <_> - 0 0 6 13 -1. - <_> - 2 0 2 13 3. - 0 - -0.1910737007856369 - -0.8129808902740479 - 5.7100728154182434e-003 - <_> - - <_> - - - - <_> - 5 14 12 1 -1. - <_> - 9 14 4 1 3. - 0 - 0.0228933207690716 - 0.0194525197148323 - -0.1632170975208283 - <_> - - <_> - - - - <_> - 7 2 9 2 -1. - <_> - 10 5 3 2 3. - 1 - 0.1703315973281860 - -0.0198107101023197 - 0.2434374988079071 - <_> - - <_> - - - - <_> - 6 1 6 12 -1. - <_> - 6 5 6 4 3. - 0 - 0.3816856145858765 - 7.4787861667573452e-003 - -0.8387240767478943 - <_> - - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 9 5 1 4 2. - 1 - -6.2416237778961658e-003 - -0.1422827988862991 - 0.0332785397768021 - <_> - - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 11 5 4 2 2. - 1 - 0.0845880135893822 - 0.0167654994875193 - -0.0928579717874527 - <_> - - <_> - - - - <_> - 4 0 12 1 -1. - <_> - 4 0 6 1 2. - 1 - 0.0225149597972631 - 0.0879255905747414 - -0.0715503692626953 - <_> - - <_> - - - - <_> - 10 2 5 10 -1. - <_> - 10 7 5 5 2. - 0 - -0.1966812014579773 - 0.0833218693733215 - -0.0203528292477131 - <_> - - <_> - - - - <_> - 3 2 5 10 -1. - <_> - 3 7 5 5 2. - 0 - -0.2161691039800644 - 0.2964927852153778 - -0.0161115303635597 - <_> - - <_> - - - - <_> - 2 2 14 6 -1. - <_> - 2 4 14 2 3. - 0 - -8.8920090347528458e-003 - 0.1377834975719452 - -0.0358431711792946 - <_> - - <_> - - - - <_> - 4 4 5 3 -1. - <_> - 4 5 5 1 3. - 0 - -0.0120847998186946 - -0.4384394884109497 - 0.0123654901981354 - <_> - - <_> - - - - <_> - 2 1 15 3 -1. - <_> - 7 2 5 1 9. - 0 - 0.2580629885196686 - -5.2921390160918236e-003 - 0.3777414858341217 - <_> - - <_> - - - - <_> - 5 2 2 3 -1. - <_> - 6 2 1 3 2. - 0 - 0.0148832304403186 - 9.0738674625754356e-003 - -0.5520840287208557 - <_> - - <_> - - - - <_> - 4 2 12 9 -1. - <_> - 8 5 4 3 9. - 0 - 0.6691424250602722 - -0.0149384997785091 - 0.1785112023353577 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -4.9930079840123653e-003 - -0.2314859032630920 - 0.0234815701842308 - <_> - - <_> - - - - <_> - 8 0 6 11 -1. - <_> - 10 0 2 11 3. - 0 - 0.2031546980142593 - 2.1833679638803005e-003 - -0.4934430122375488 - <_> - - <_> - - - - <_> - 1 1 3 1 -1. - <_> - 2 2 1 1 3. - 1 - -5.6780078448355198e-003 - 0.1934317052364349 - -0.0277863405644894 - <_> - - <_> - - - - <_> - 16 0 1 6 -1. - <_> - 16 2 1 2 3. - 0 - 5.9304530732333660e-003 - -0.0200895592570305 - 0.1090969964861870 - <_> - - <_> - - - - <_> - 0 4 1 2 -1. - <_> - 0 5 1 1 2. - 0 - -2.3739310563541949e-005 - 0.0694196820259094 - -0.0834254324436188 - <_> - - <_> - - - - <_> - 15 6 3 2 -1. - <_> - 15 6 3 1 2. - 1 - -6.2176208011806011e-003 - 0.0786899477243423 - -0.0139514803886414 - <_> - - <_> - - - - <_> - 3 6 2 3 -1. - <_> - 3 6 1 3 2. - 1 - 5.5320560932159424e-003 - -0.0663150474429131 - 0.0798476189374924 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 9 0 9 2 2. - <_> - 0 2 9 2 2. - 0 - -0.0369591601192951 - -0.2938030958175659 - 0.0157649908214808 - <_> - - <_> - - - - <_> - 4 5 3 4 -1. - <_> - 5 6 1 4 3. - 1 - 0.0163652505725622 - -0.0322352685034275 - 0.1461254954338074 - <_> - - <_> - - - - <_> - 13 1 4 12 -1. - <_> - 15 1 2 6 2. - <_> - 13 7 2 6 2. - 0 - -0.0785978734493256 - -0.1932214051485062 - 9.7729396075010300e-003 - <_> - - <_> - - - - <_> - 3 1 2 14 -1. - <_> - 3 8 2 7 2. - 0 - -0.0371479801833630 - -0.0805545896291733 - 0.0657810792326927 - <_> - - <_> - - - - <_> - 7 6 5 3 -1. - <_> - 7 7 5 1 3. - 0 - 0.0117284599691629 - 0.0272431094199419 - -0.1464972943067551 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - -0.0103350402787328 - 0.0627673566341400 - -0.0815778523683548 - <_> - - <_> - - - - <_> - 7 8 9 3 -1. - <_> - 10 9 3 1 9. - 0 - -0.0225539691746235 - -0.0534550100564957 - 0.0260324496775866 - <_> - - <_> - - - - <_> - 2 8 9 3 -1. - <_> - 5 9 3 1 9. - 0 - -0.0209841597825289 - -0.0704301372170448 - 0.0790670588612556 - <_> - - <_> - - - - <_> - 10 4 4 7 -1. - <_> - 11 4 2 7 2. - 0 - -7.0778899826109409e-003 - 0.0680953115224838 - -0.0216820295900106 - <_> - - <_> - - - - <_> - 4 4 4 7 -1. - <_> - 5 4 2 7 2. - 0 - -1.9395829876884818e-003 - 0.0617897398769856 - -0.1004408970475197 - <_> - - <_> - - - - <_> - 10 14 3 1 -1. - <_> - 11 14 1 1 3. - 0 - 1.5511269448325038e-003 - -0.0237703006714582 - 0.1048393994569778 - <_> - - <_> - - - - <_> - 5 14 3 1 -1. - <_> - 6 14 1 1 3. - 0 - -8.7477812485303730e-005 - 0.0735548809170723 - -0.0689330399036407 - <_> - - <_> - - - - <_> - 5 14 12 1 -1. - <_> - 9 14 4 1 3. - 0 - -4.8028680612333119e-004 - 0.0447285212576389 - -0.0435139797627926 - <_> - - <_> - - - - <_> - 0 1 18 8 -1. - <_> - 0 1 9 4 2. - <_> - 9 5 9 4 2. - 0 - -0.1720701009035111 - -0.5927919149398804 - 8.8808601722121239e-003 - <_> - - <_> - - - - <_> - 9 1 6 4 -1. - <_> - 9 1 6 2 2. - 1 - 0.1584734022617340 - 3.0388650484383106e-003 - -0.2743625938892365 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 1 2 6 2. - 1 - -0.1497168987989426 - -0.7600219845771790 - 6.4801289699971676e-003 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 12 8 1 1 2. - <_> - 11 9 1 1 2. - 0 - -2.0640289876610041e-003 - 0.1553120017051697 - -0.0304844807833433 - <_> - - <_> - - - - <_> - 5 0 8 11 -1. - <_> - 7 0 4 11 2. - 0 - -0.0771084874868393 - 0.4302985966205597 - -0.0116477198898792 - <_> - - <_> - - - - <_> - 7 7 6 3 -1. - <_> - 9 8 2 1 9. - 0 - -0.0343285612761974 - -0.2315476983785629 - 0.0161607693880796 - <_> - - <_> - - - - <_> - 4 0 6 9 -1. - <_> - 6 0 2 9 3. - 0 - 0.0435740090906620 - -0.0281460192054510 - 0.1697372943162918 - <_> - - <_> - - - - <_> - 10 0 3 2 -1. - <_> - 11 1 1 2 3. - 1 - 7.4282230343669653e-005 - -0.0652616396546364 - 0.0352620482444763 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 7 1 2 1 3. - 1 - 2.1579340100288391e-003 - 0.0431658513844013 - -0.1101099997758865 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - 2.0436691120266914e-003 - 0.0295867193490267 - -0.0619979798793793 - <_> - - <_> - - - - <_> - 6 4 6 11 -1. - <_> - 8 4 2 11 3. - 0 - 0.1842591017484665 - 5.3550167940557003e-003 - -0.9289578795433044 - <_> - - <_> - - - - <_> - 10 8 3 3 -1. - <_> - 11 8 1 3 3. - 0 - 0.0191197507083416 - 5.3580361418426037e-003 - -0.6534789204597473 - <_> - - <_> - - - - <_> - 8 1 9 2 -1. - <_> - 8 1 9 1 2. - 1 - 0.0641443729400635 - -0.0103305000811815 - 0.4671950936317444 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - -4.3394681997597218e-003 - -0.1537874042987824 - 0.0111428704112768 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 0 9 9 3 2. - <_> - 9 12 9 3 2. - 0 - -0.2232117950916290 - -0.9469724893569946 - 4.8918798565864563e-003 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -5.6038159527815878e-005 - 0.0709768906235695 - -0.0623531192541122 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - 1.3452749699354172e-003 - -0.0286097601056099 - 0.1554924994707108 - <_> - - <_> - - - - <_> - 10 8 3 3 -1. - <_> - 11 8 1 3 3. - 0 - 1.3946880353614688e-003 - -0.0402705408632755 - 0.0586122795939446 - <_> - - <_> - - - - <_> - 5 8 3 3 -1. - <_> - 6 8 1 3 3. - 0 - 0.0156203303486109 - 7.3195630684494972e-003 - -0.6321095824241638 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - -5.5555468861712143e-005 - 0.0450235009193420 - -0.0287142004817724 - <_> - - <_> - - - - <_> - 0 6 1 6 -1. - <_> - 0 8 1 2 3. - 0 - 0.0111428601667285 - 0.0157248601317406 - -0.2853612005710602 - <_> - - <_> - - - - <_> - 11 8 5 6 -1. - <_> - 11 10 5 2 3. - 0 - 0.0131013197824359 - -0.0355839505791664 - 0.1051271036267281 - <_> - - <_> - - - - <_> - 0 8 1 6 -1. - <_> - 0 10 1 2 3. - 0 - 8.7957009673118591e-003 - 0.0244174394756556 - -0.1893509030342102 - <_> - - <_> - - - - <_> - 11 8 6 6 -1. - <_> - 11 10 6 2 3. - 0 - -0.0499279797077179 - 0.0787372216582298 - -0.0277854092419147 - <_> - - <_> - - - - <_> - 1 8 6 6 -1. - <_> - 1 10 6 2 3. - 0 - 0.0398713387548923 - -0.0298023894429207 - 0.1944461017847061 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 1 1 1 3. - 1 - -0.0157816000282764 - -0.7665395736694336 - 9.5044961199164391e-004 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - -6.1174961738288403e-003 - -0.2676964104175568 - 0.0171274207532406 - <_> - - <_> - - - - <_> - 5 3 9 9 -1. - <_> - 8 6 3 3 9. - 0 - 0.4499483108520508 - -0.0190667398273945 - 0.2348536998033524 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 7 0 8 1 2. - 1 - -0.0433428809046745 - -0.7188379168510437 - 6.2806149944663048e-003 - <_> - - <_> - - - - <_> - 11 9 3 6 -1. - <_> - 12 9 1 6 3. - 0 - -0.0301288608461618 - -0.6576640009880066 - 4.9726511351764202e-003 - <_> - - <_> - - - - <_> - 1 14 12 1 -1. - <_> - 5 14 4 1 3. - 0 - -0.0227169692516327 - -0.1927156001329422 - 0.0224213097244501 - <_> - - <_> - - - - <_> - 8 14 4 1 -1. - <_> - 9 14 2 1 2. - 0 - -1.0098509956151247e-003 - 0.0785590186715126 - -0.0356715284287930 - <_> - - <_> - - - - <_> - 6 14 4 1 -1. - <_> - 7 14 2 1 2. - 0 - -1.0692490031942725e-003 - 0.1281787008047104 - -0.0513950809836388 - <_> - - <_> - - - - <_> - 14 14 2 1 -1. - <_> - 14 14 1 1 2. - 0 - -5.7365992106497288e-003 - -0.4571113884449005 - 4.0395711548626423e-003 - <_> - - <_> - - - - <_> - 2 14 2 1 -1. - <_> - 3 14 1 1 2. - 0 - -5.0038979679811746e-005 - 0.0696846470236778 - -0.0743912681937218 - <_> - - <_> - - - - <_> - 11 9 3 6 -1. - <_> - 12 9 1 6 3. - 0 - 0.0336750186979771 - 3.2588799949735403e-003 - -0.8050068020820618 - <_> - - <_> - - - - <_> - 4 9 3 6 -1. - <_> - 5 9 1 6 3. - 0 - 0.0159147903323174 - 0.0107761099934578 - -0.4024600088596344 - <_> - - <_> - - - - <_> - 5 12 12 2 -1. - <_> - 5 13 12 1 2. - 0 - -4.2607940849848092e-004 - -0.0471980608999729 - 0.0233493093401194 - <_> - - <_> - - - - <_> - 0 0 15 15 -1. - <_> - 5 0 5 15 3. - 0 - 0.2248571068048477 - -0.0398878902196884 - 0.1068518981337547 - <_> - - <_> - - - - <_> - 8 1 2 4 -1. - <_> - 8 1 1 4 2. - 0 - -2.9953860212117434e-003 - 0.0916093885898590 - -0.0748484134674072 - <_> - - <_> - - - - <_> - 0 3 2 8 -1. - <_> - 0 3 1 4 2. - <_> - 1 7 1 4 2. - 0 - -4.1523170657455921e-003 - 0.1153976023197174 - -0.0425119213759899 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - 0.0498369298875332 - -3.9297798648476601e-003 - 0.5181720256805420 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - -0.0200233291834593 - 0.1912897974252701 - -0.0231510493904352 - <_> - - <_> - - - - <_> - 14 0 4 6 -1. - <_> - 16 0 2 3 2. - <_> - 14 3 2 3 2. - 0 - -6.2091718427836895e-003 - 0.1013979017734528 - -0.0324465110898018 - <_> - - <_> - - - - <_> - 3 3 12 2 -1. - <_> - 3 3 6 1 2. - <_> - 9 4 6 1 2. - 0 - -5.2683670073747635e-003 - -0.1818909049034119 - 0.0307422205805779 - <_> - - <_> - - - - <_> - 16 10 2 1 -1. - <_> - 16 10 1 1 2. - 1 - 2.5454410351812840e-003 - 0.0155313396826386 - -0.0760350972414017 - <_> - - <_> - - - - <_> - 2 10 1 2 -1. - <_> - 2 10 1 1 2. - 1 - -3.3172550611197948e-003 - -0.1350935995578766 - 0.0359591096639633 - <_> - - <_> - - - - <_> - 10 7 6 4 -1. - <_> - 13 7 3 2 2. - <_> - 10 9 3 2 2. - 0 - -0.0261108204722404 - 0.0872836336493492 - -0.0217705499380827 - <_> - - <_> - - - - <_> - 0 4 18 5 -1. - <_> - 6 4 6 5 3. - 0 - 0.2431263029575348 - 0.0361428782343864 - -0.1462513059377670 - <_> - - <_> - - - - <_> - 11 1 5 6 -1. - <_> - 9 3 5 2 3. - 1 - 0.1904131025075913 - 7.3239780031144619e-003 - -0.2772952020168304 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 10 2 2 6 3. - 1 - 0.0163597594946623 - -0.1068542972207069 - 0.0491146706044674 - <_> - - <_> - - - - <_> - 4 4 14 4 -1. - <_> - 11 4 7 2 2. - <_> - 4 6 7 2 2. - 0 - -0.0688577666878700 - -0.4238899052143097 - 8.5399514064192772e-003 - <_> - - <_> - - - - <_> - 0 4 14 4 -1. - <_> - 0 4 7 2 2. - <_> - 7 6 7 2 2. - 0 - 0.0203291904181242 - -0.0396039597690105 - 0.1634790003299713 - <_> - - <_> - - - - <_> - 10 7 6 4 -1. - <_> - 13 7 3 2 2. - <_> - 10 9 3 2 2. - 0 - 0.0129730198532343 - -0.0195611193776131 - 0.1110479012131691 - <_> - - <_> - - - - <_> - 2 7 6 4 -1. - <_> - 2 7 3 2 2. - <_> - 5 9 3 2 2. - 0 - 6.2990398146212101e-003 - -0.0387555509805679 - 0.1649558991193771 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 0 - 4.6493619447574019e-004 - -0.0703989788889885 - 0.0591666884720325 - <_> - - <_> - - - - <_> - 6 14 6 1 -1. - <_> - 9 14 3 1 2. - 0 - -0.0114370100200176 - -0.2558253109455109 - 0.0225616004317999 - <_> - - <_> - - - - <_> - 0 9 18 6 -1. - <_> - 9 9 9 3 2. - <_> - 0 12 9 3 2. - 0 - -0.0605634413659573 - -0.1502590030431747 - 0.0358815304934978 - <_> - - <_> - - - - <_> - 1 0 1 14 -1. - <_> - 1 7 1 7 2. - 0 - -0.0571704693138599 - -0.5516524910926819 - 8.8588111102581024e-003 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - -3.7495139986276627e-003 - -0.1063347011804581 - 0.0165663603693247 - <_> - - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 3 8 3 1 3. - 1 - 3.6156480200588703e-003 - -0.0469515882432461 - 0.0984329879283905 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - 3.9375461637973785e-003 - 0.0158571396023035 - -0.1276154965162277 - <_> - - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 7 2 1 2 2. - 0 - 6.9156679091975093e-004 - -0.0969325676560402 - 0.0460354201495647 - <_> - - <_> - - - - <_> - 5 0 8 12 -1. - <_> - 7 0 4 12 2. - 0 - -0.0171396601945162 - 0.1832552999258041 - -0.0297442600131035 - <_> - - <_> - - - - <_> - 9 8 2 1 -1. - <_> - 9 8 1 1 2. - 1 - -2.1130971144884825e-003 - -0.1469496935606003 - 0.0371412001550198 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -6.3239036535378546e-005 - 0.0560943596065044 - -0.0452513098716736 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 5.2524639613693580e-005 - -0.0660794675350189 - 0.0848461315035820 - <_> - - <_> - - - - <_> - 7 8 4 4 -1. - <_> - 8 8 2 4 2. - 0 - 2.2989229764789343e-003 - -0.0628855079412460 - 0.0724585726857185 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 7 1 1 3. - 1 - 8.5239242762327194e-003 - 0.0245985891669989 - -0.2040424942970276 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 0 11 18 1 2. - 0 - 0.0152474995702505 - -0.0463051386177540 - 0.0926802083849907 - <_> - - <_> - - - - <_> - 8 5 2 8 -1. - <_> - 8 5 2 4 2. - 1 - -0.0411155596375465 - -0.1647908985614777 - 0.0320520587265491 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 5 12 2 2. - 0 - -0.0570124983787537 - 0.1769132018089294 - -0.0289100594818592 - <_> - - <_> - - - - <_> - 4 0 8 1 -1. - <_> - 6 2 4 1 2. - 1 - -0.0361419506371021 - 0.3357386887073517 - -0.0146681498736143 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 11 0 2 5 2. - <_> - 9 5 2 5 2. - 0 - -0.0473424009978771 - -0.3646846115589142 - 9.7021097317337990e-003 - <_> - - <_> - - - - <_> - 4 2 10 2 -1. - <_> - 4 3 10 1 2. - 0 - 1.5224410162772983e-004 - -0.0855662599205971 - 0.0563358217477798 - <_> - - <_> - - - - <_> - 11 0 3 4 -1. - <_> - 12 0 1 4 3. - 0 - -1.0744449682533741e-003 - 0.0676028802990913 - -0.0449445992708206 - <_> - - <_> - - - - <_> - 6 0 5 2 -1. - <_> - 6 1 5 1 2. - 0 - 2.4688818957656622e-003 - 0.0393917709589005 - -0.1143665015697479 - <_> - - <_> - - - - <_> - 11 0 3 4 -1. - <_> - 12 0 1 4 3. - 0 - -0.0223950799554586 - -0.4149968922138214 - 3.3534979447722435e-003 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 0 1 4 3. - 0 - 0.0141458800062537 - 7.8060040250420570e-003 - -0.5624625086784363 - <_> - - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 10 1 3 1 3. - 0 - -5.6172739277826622e-005 - 0.0422396287322044 - -0.0399822406470776 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 5 1 3 1 3. - 0 - -4.6720141544938087e-003 - -0.3006666898727417 - 0.0159843992441893 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 12 8 1 1 2. - <_> - 11 9 1 1 2. - 0 - 5.9289661294315010e-005 - -0.0410341098904610 - 0.0526925884187222 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - -1.9730681087821722e-003 - 0.1511884927749634 - -0.0325110815465450 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 12 8 1 1 2. - <_> - 11 9 1 1 2. - 0 - -2.3879110813140869e-005 - 0.0414035692811012 - -0.0429901182651520 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - 5.1802700909320265e-005 - -0.0583424791693687 - 0.0939400717616081 - <_> - - <_> - - - - <_> - 11 7 1 4 -1. - <_> - 10 8 1 2 2. - 1 - 2.2840979509055614e-003 - 0.0185070801526308 - -0.0458313114941120 - <_> - - <_> - - - - <_> - 3 3 5 12 -1. - <_> - 3 6 5 6 2. - 0 - -0.1312506943941116 - -0.1768728047609329 - 0.0260149408131838 - <_> - - <_> - - - - <_> - 11 10 4 1 -1. - <_> - 11 10 2 1 2. - 1 - -1.1948959436267614e-003 - 0.0419367291033268 - -0.0555466488003731 - <_> - - <_> - - - - <_> - 6 1 3 6 -1. - <_> - 4 3 3 2 3. - 1 - 0.0722346305847168 - 0.0106889596208930 - -0.4012762010097504 - <_> - - <_> - - - - <_> - 2 1 16 1 -1. - <_> - 6 1 8 1 2. - 0 - -0.0563969314098358 - -0.8849198818206787 - 3.6692508729174733e-004 - <_> - - <_> - - - - <_> - 3 6 12 4 -1. - <_> - 3 6 6 2 2. - <_> - 9 8 6 2 2. - 0 - -0.0541536509990692 - -0.2249650955200195 - 0.0179232098162174 - <_> - - <_> - - - - <_> - 1 7 16 3 -1. - <_> - 1 8 16 1 3. - 0 - -0.0251673292368650 - 0.1300235986709595 - -0.0366861596703529 - <_> - - <_> - - - - <_> - 2 6 6 6 -1. - <_> - 4 8 2 2 9. - 0 - 0.0137102100998163 - -0.0405139811336994 - 0.1120186001062393 - <_> - - <_> - - - - <_> - 14 4 4 3 -1. - <_> - 14 5 4 1 3. - 0 - -0.0278908200562000 - -0.7313765883445740 - 3.7337029352784157e-003 - <_> - - <_> - - - - <_> - 0 4 4 3 -1. - <_> - 0 5 4 1 3. - 0 - -7.5335809960961342e-003 - -0.2311984002590179 - 0.0176145397126675 - <_> - - <_> - - - - <_> - 14 1 1 3 -1. - <_> - 14 2 1 1 3. - 0 - 3.2403611112385988e-003 - -8.7237963452935219e-003 - 0.2038265019655228 - <_> - - <_> - - - - <_> - 1 9 9 3 -1. - <_> - 4 9 3 3 3. - 0 - 0.0844089612364769 - 5.1954388618469238e-003 - -0.8245453238487244 - <_> - - <_> - - - - <_> - 14 2 2 3 -1. - <_> - 14 2 1 3 2. - 1 - -8.2196877337992191e-004 - -0.0817157030105591 - 0.0218308698385954 - <_> - - <_> - - - - <_> - 3 2 2 4 -1. - <_> - 3 2 1 2 2. - <_> - 4 4 1 2 2. - 0 - 2.9956221114844084e-003 - -0.0280322693288326 - 0.1512784063816071 - <_> - - <_> - - - - <_> - 10 5 4 10 -1. - <_> - 12 5 2 5 2. - <_> - 10 10 2 5 2. - 0 - -0.0703764632344246 - -0.1352009028196335 - 3.9681098423898220e-003 - <_> - - <_> - - - - <_> - 4 5 4 10 -1. - <_> - 4 5 2 5 2. - <_> - 6 10 2 5 2. - 0 - 0.0321913808584213 - 0.0131358997896314 - -0.3347019851207733 - <_> - - <_> - - - - <_> - 11 2 2 2 -1. - <_> - 11 2 2 1 2. - 1 - 5.4974909871816635e-003 - -0.0265497900545597 - 0.1170909032225609 - <_> - - <_> - - - - <_> - 5 4 3 6 -1. - <_> - 5 6 3 2 3. - 0 - 0.0164293907582760 - -0.0533613413572311 - 0.0821190625429153 - <_> - - <_> - - - - <_> - 11 2 2 2 -1. - <_> - 11 2 2 1 2. - 1 - -7.4506900273263454e-003 - 0.0808582007884979 - -0.0223928596824408 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 2 2. - 1 - 4.9851150251924992e-003 - -0.0205729696899652 - 0.2598786056041718 - <_> - - <_> - - - - <_> - 9 5 2 1 -1. - <_> - 9 5 1 1 2. - 1 - 2.9100670944899321e-003 - -0.0231053698807955 - 0.0452293008565903 - <_> - - <_> - - - - <_> - 2 0 9 14 -1. - <_> - 5 0 3 14 3. - 0 - -0.1352230012416840 - 0.1116971969604492 - -0.0436136610805988 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - -9.8680844530463219e-003 - -0.1834681928157806 - 3.8948319852352142e-003 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 4.0301959961652756e-003 - 0.0233750492334366 - -0.2056623995304108 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 11 0 2 5 2. - <_> - 9 5 2 5 2. - 0 - 0.0396324507892132 - 7.7001759782433510e-003 - -0.1663939058780670 - <_> - - <_> - - - - <_> - 5 0 2 5 -1. - <_> - 5 0 1 5 2. - 1 - -0.0127424998208880 - 0.1485241055488586 - -0.0306067708879709 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 1 - 3.7017830181866884e-003 - 0.0209220908582211 - -0.1147229969501495 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 2.2704519797116518e-003 - 0.0270258691161871 - -0.1654057949781418 - <_> - - <_> - - - - <_> - 12 1 4 4 -1. - <_> - 12 1 2 4 2. - 1 - 0.1495328992605209 - -2.0300289615988731e-003 - 0.5981509089469910 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -5.1417769864201546e-003 - 0.3844088912010193 - -0.0112848002463579 - <_> - - <_> - - - - <_> - 8 7 2 4 -1. - <_> - 9 7 1 2 2. - <_> - 8 9 1 2 2. - 0 - -6.3616367988288403e-003 - -0.3109016120433807 - 0.0143518401309848 - <_> - - <_> - - - - <_> - 1 5 16 2 -1. - <_> - 5 5 8 2 2. - 0 - -0.0598138608038425 - -0.7037869095802307 - 5.7968678884208202e-003 - <_> - - <_> - - - - <_> - 5 0 8 12 -1. - <_> - 5 4 8 4 3. - 0 - 0.3535721004009247 - 0.0112126599997282 - -0.3322969973087311 - <_> - - <_> - - - - <_> - 2 2 12 9 -1. - <_> - 6 5 4 3 9. - 0 - 0.6899908185005188 - -0.0105861099436879 - 0.3837656974792481 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 14 1 1 3 3. - 1 - 4.8297038301825523e-003 - 0.0210381299257278 - -0.0573535598814487 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 4 1 3 1 3. - 1 - 0.0178284905850887 - -0.0106050595641136 - 0.3956354856491089 - <_> - - <_> - - - - <_> - 2 2 16 7 -1. - <_> - 6 2 8 7 2. - 0 - 0.0642841011285782 - -0.0638428777456284 - 0.0267954096198082 - <_> - - <_> - - - - <_> - 0 2 16 7 -1. - <_> - 4 2 8 7 2. - 0 - 0.2549147009849548 - 0.0193274095654488 - -0.2430274933576584 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 16 13 1 2 2. - 0 - 5.1334970630705357e-003 - 0.0115080103278160 - -0.2383089959621429 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 1 13 1 2 2. - 0 - -3.9797872304916382e-003 - -0.2042689025402069 - 0.0203900802880526 - <_> - - <_> - - - - <_> - 16 7 2 8 -1. - <_> - 17 7 1 4 2. - <_> - 16 11 1 4 2. - 0 - 2.7258729096502066e-003 - -0.0465084612369537 - 0.0794106870889664 - <_> - - <_> - - - - <_> - 0 7 2 8 -1. - <_> - 0 7 1 4 2. - <_> - 1 11 1 4 2. - 0 - -0.0149838598445058 - 0.3958691954612732 - -0.0113431699573994 - <_> - - <_> - - - - <_> - 11 2 7 3 -1. - <_> - 11 3 7 1 3. - 0 - 2.9130540788173676e-003 - 0.0363716296851635 - -0.0906147211790085 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 1 8 1 3 2. - 0 - -9.0548500884324312e-004 - 0.0620919205248356 - -0.0684250965714455 - <_> - - <_> - - - - <_> - 10 5 6 4 -1. - <_> - 12 7 2 4 3. - 1 - -0.1165482997894287 - 0.1156952977180481 - -0.0132687203586102 - <_> - - <_> - - - - <_> - 9 7 2 1 -1. - <_> - 9 7 1 1 2. - 1 - 0.0107813002541661 - 0.0174200199544430 - -0.2803607881069183 - <_> - - <_> - - - - <_> - 0 3 18 8 -1. - <_> - 0 7 18 4 2. - 0 - -0.5344784855842590 - -0.4741159081459045 - 8.6649907752871513e-003 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - 5.6615539506310597e-005 - -0.0586382709443569 - 0.0750202611088753 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 12 6 1 1 2. - <_> - 11 7 1 1 2. - 0 - 6.2536040786653757e-005 - -0.0498466081917286 - 0.0593500696122646 - <_> - - <_> - - - - <_> - 8 5 4 6 -1. - <_> - 6 7 4 2 3. - 1 - 0.0730543434619904 - -0.0140366898849607 - 0.3588446080684662 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 16 3 1 2 2. - 1 - -0.0165301598608494 - -0.3463242053985596 - 6.7927599884569645e-003 - <_> - - <_> - - - - <_> - 8 14 2 1 -1. - <_> - 9 14 1 1 2. - 0 - -6.3628758653067052e-005 - 0.0716383680701256 - -0.0592160597443581 - <_> - - <_> - - - - <_> - 11 2 7 3 -1. - <_> - 11 3 7 1 3. - 0 - -0.0194537602365017 - -0.5169472098350525 - 6.2814089469611645e-003 - <_> - - <_> - - - - <_> - 0 2 9 12 -1. - <_> - 0 5 9 6 2. - 0 - 0.2120210975408554 - 7.6583931222558022e-003 - -0.5098584294319153 - <_> - - <_> - - - - <_> - 16 0 2 11 -1. - <_> - 16 0 1 11 2. - 1 - 0.0196576490998268 - -0.0431430488824844 - 0.0518909394741058 - -1.1554880142211914 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0868941992521286 - -0.1896995007991791 - 0.2203574031591415 - <_> - - <_> - - - - <_> - 12 8 4 2 -1. - <_> - 12 8 2 2 2. - 1 - -9.6704717725515366e-003 - 0.1185135021805763 - -0.0863395631313324 - <_> - - <_> - - - - <_> - 6 4 5 6 -1. - <_> - 4 6 5 2 3. - 1 - -0.0814679488539696 - 0.1499083936214447 - -0.1296371966600418 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 16 2 1 3 2. - 0 - -1.7537999665364623e-003 - 0.1775088012218475 - -0.1069336980581284 - <_> - - <_> - - - - <_> - 0 2 2 3 -1. - <_> - 1 2 1 3 2. - 0 - -7.4387797212693840e-005 - 0.0960103869438171 - -0.1622508019208908 - <_> - - <_> - - - - <_> - 13 7 3 3 -1. - <_> - 14 8 1 1 9. - 0 - 8.0011058598756790e-003 - -0.0185400806367397 - 0.2466017007827759 - <_> - - <_> - - - - <_> - 2 4 4 9 -1. - <_> - 4 4 2 9 2. - 0 - 0.0170908197760582 - 0.0325614809989929 - -0.2618162035942078 - <_> - - <_> - - - - <_> - 10 0 4 1 -1. - <_> - 10 0 2 1 2. - 1 - 9.9246148020029068e-003 - -0.0193589702248573 - 0.1254267990589142 - <_> - - <_> - - - - <_> - 8 2 2 2 -1. - <_> - 8 2 2 1 2. - 1 - 0.0122903902083635 - 0.0343302115797997 - -0.3286471068859100 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 2.1256268955767155e-003 - -0.0717979818582535 - 0.0692160725593567 - <_> - - <_> - - - - <_> - 2 0 14 15 -1. - <_> - 9 0 7 15 2. - 0 - 0.2496016025543213 - -0.1123834997415543 - 0.1429843008518219 - <_> - - <_> - - - - <_> - 13 4 4 3 -1. - <_> - 12 5 4 1 3. - 1 - -4.9557890743017197e-003 - 0.1379792988300324 - -0.0583309903740883 - <_> - - <_> - - - - <_> - 3 6 12 8 -1. - <_> - 3 6 6 4 2. - <_> - 9 10 6 4 2. - 0 - 0.0697411075234413 - 0.0297146998345852 - -0.3442580103874207 - <_> - - <_> - - - - <_> - 12 5 3 6 -1. - <_> - 13 7 1 2 9. - 0 - 8.1527782604098320e-003 - -0.0469510108232498 - 0.0782470628619194 - <_> - - <_> - - - - <_> - 5 4 3 4 -1. - <_> - 6 5 1 4 3. - 1 - 0.0103493202477694 - -0.0694328024983406 - 0.1585589051246643 - <_> - - <_> - - - - <_> - 12 7 3 3 -1. - <_> - 13 8 1 3 3. - 1 - 6.3299350440502167e-003 - -0.0399102084338665 - 0.1524983942508698 - <_> - - <_> - - - - <_> - 0 1 4 14 -1. - <_> - 0 8 4 7 2. - 0 - 0.0309557206928730 - 0.0419439598917961 - -0.2322739958763123 - <_> - - <_> - - - - <_> - 12 8 3 4 -1. - <_> - 13 9 1 4 3. - 1 - 0.0125044696033001 - -0.0183122493326664 - 0.0996528565883636 - <_> - - <_> - - - - <_> - 6 8 4 3 -1. - <_> - 5 9 4 1 3. - 1 - 7.4256081134080887e-003 - -0.0621832795441151 - 0.1663811951875687 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 9 0 6 2 2. - <_> - 3 2 6 2 2. - 0 - 0.0200669895857573 - 0.0226579904556274 - -0.3470891118049622 - <_> - - <_> - - - - <_> - 3 2 12 12 -1. - <_> - 3 8 12 6 2. - 0 - -0.5828899741172791 - 0.2862842977046967 - -0.0296743903309107 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 12 8 2 2 2. - 0 - -0.0142788495868444 - 0.1778019964694977 - -0.0291071794927120 - <_> - - <_> - - - - <_> - 5 6 1 6 -1. - <_> - 5 8 1 2 3. - 0 - 5.9483898803591728e-003 - -0.0514614395797253 - 0.2133691012859345 - <_> - - <_> - - - - <_> - 17 1 1 14 -1. - <_> - 17 8 1 7 2. - 0 - -0.0376777388155460 - -0.3693261146545410 - 0.0577233098447323 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 5 2. - <_> - 9 5 9 5 2. - 0 - 0.0658088922500610 - 0.0406517907977104 - -0.2107470035552979 - <_> - - <_> - - - - <_> - 5 0 12 11 -1. - <_> - 9 0 4 11 3. - 0 - -0.2313210964202881 - 0.4183537065982819 - -0.0121959000825882 - <_> - - <_> - - - - <_> - 7 0 2 4 -1. - <_> - 7 0 2 2 2. - 1 - 9.2640687944367528e-004 - -0.1446887999773026 - 0.0585397295653820 - <_> - - <_> - - - - <_> - 8 13 10 2 -1. - <_> - 13 13 5 1 2. - <_> - 8 14 5 1 2. - 0 - 1.0040670167654753e-003 - -0.0440565086901188 - 0.0339186899363995 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 3 2 3 2 2. - 1 - -0.0161782503128052 - -0.2537319064140320 - 0.0289683602750301 - <_> - - <_> - - - - <_> - 13 8 4 1 -1. - <_> - 14 8 2 1 2. - 0 - -6.0239218873903155e-004 - 0.0413237288594246 - -0.0400842092931271 - <_> - - <_> - - - - <_> - 3 6 3 2 -1. - <_> - 4 7 1 2 3. - 1 - -6.0449438169598579e-003 - 0.1437224000692368 - -0.0471708290278912 - <_> - - <_> - - - - <_> - 13 0 3 1 -1. - <_> - 14 1 1 1 3. - 1 - 2.2208129521459341e-003 - 0.0451353900134563 - -0.1686334013938904 - <_> - - <_> - - - - <_> - 3 2 3 3 -1. - <_> - 4 3 1 3 3. - 1 - -0.0254353806376457 - 0.2748624980449677 - -0.0250210706144571 - <_> - - <_> - - - - <_> - 13 0 3 1 -1. - <_> - 14 1 1 1 3. - 1 - -9.7569217905402184e-003 - -0.3510535955429077 - 6.7487931810319424e-003 - <_> - - <_> - - - - <_> - 2 11 2 2 -1. - <_> - 2 11 1 2 2. - 1 - -5.8798119425773621e-003 - -0.2365276068449020 - 0.0292028002440929 - <_> - - <_> - - - - <_> - 2 11 16 2 -1. - <_> - 2 12 16 1 2. - 0 - 1.7566860187798738e-003 - -0.0990074127912521 - 0.0523698702454567 - <_> - - <_> - - - - <_> - 8 6 6 3 -1. - <_> - 10 8 2 3 3. - 1 - -0.0742733180522919 - -0.2623257040977478 - 0.0324768982827663 - <_> - - <_> - - - - <_> - 2 12 16 3 -1. - <_> - 2 13 16 1 3. - 0 - 0.0311077497899532 - -0.0317390114068985 - 0.1974492967128754 - <_> - - <_> - - - - <_> - 0 10 18 4 -1. - <_> - 0 10 9 2 2. - <_> - 9 12 9 2 2. - 0 - 0.0637038722634315 - 0.0268714595586061 - -0.2767395079135895 - <_> - - <_> - - - - <_> - 6 12 9 2 -1. - <_> - 9 12 3 2 3. - 0 - -0.0475392416119576 - -0.4051026105880737 - 0.0122220404446125 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - -3.5632580984383821e-003 - -0.1999291926622391 - 0.0335399098694324 - <_> - - <_> - - - - <_> - 8 0 9 6 -1. - <_> - 8 3 9 3 2. - 0 - -0.0265275891870260 - -0.1629005968570709 - 0.0278331693261862 - <_> - - <_> - - - - <_> - 0 3 12 9 -1. - <_> - 6 3 6 9 2. - 0 - 0.2804817855358124 - 0.0288105905056000 - -0.2271182984113693 - <_> - - <_> - - - - <_> - 3 4 12 6 -1. - <_> - 7 6 4 2 9. - 0 - 0.4559194147586823 - -0.0227571800351143 - 0.3102968931198120 - <_> - - <_> - - - - <_> - 8 0 8 3 -1. - <_> - 10 2 4 3 2. - 1 - 0.0867485329508781 - 0.0726863965392113 - -0.1027626991271973 - <_> - - <_> - - - - <_> - 11 1 1 2 -1. - <_> - 11 1 1 1 2. - 1 - 1.6994470497593284e-003 - -0.0318094082176685 - 0.0871460884809494 - <_> - - <_> - - - - <_> - 7 1 2 1 -1. - <_> - 7 1 1 1 2. - 1 - -1.1253879638388753e-003 - 0.0680664330720901 - -0.1239006966352463 - <_> - - <_> - - - - <_> - 13 1 4 3 -1. - <_> - 12 2 4 1 3. - 1 - 0.0508721508085728 - -8.7517164647579193e-003 - 0.3118421137332916 - <_> - - <_> - - - - <_> - 1 0 12 11 -1. - <_> - 5 0 4 11 3. - 0 - 0.1996172964572907 - -0.0309105496853590 - 0.2165288031101227 - <_> - - <_> - - - - <_> - 13 1 4 3 -1. - <_> - 12 2 4 1 3. - 1 - -0.0638386905193329 - -0.6026582717895508 - 1.3233360368758440e-003 - <_> - - <_> - - - - <_> - 5 1 3 4 -1. - <_> - 6 2 1 4 3. - 1 - 6.3007958233356476e-003 - -0.0520633496344090 - 0.1260793954133987 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - 5.6697470135986805e-003 - 9.0780286118388176e-003 - -0.1944532990455627 - <_> - - <_> - - - - <_> - 0 13 10 2 -1. - <_> - 0 13 5 1 2. - <_> - 5 14 5 1 2. - 0 - 1.4293550048023462e-003 - -0.0857814326882362 - 0.0712894573807716 - <_> - - <_> - - - - <_> - 12 12 4 3 -1. - <_> - 13 12 2 3 2. - 0 - 0.0138120101764798 - 8.0618355423212051e-003 - -0.3879789113998413 - <_> - - <_> - - - - <_> - 3 6 1 2 -1. - <_> - 3 7 1 1 2. - 0 - 2.3739310563541949e-005 - -0.0624911710619926 - 0.1092092990875244 - <_> - - <_> - - - - <_> - 7 7 4 2 -1. - <_> - 7 8 4 1 2. - 0 - -3.9398381486535072e-003 - 0.0509323291480541 - -0.1498032063245773 - <_> - - <_> - - - - <_> - 0 10 18 4 -1. - <_> - 0 12 18 2 2. - 0 - -0.1235888004302979 - 0.3147651851177216 - -0.0257598794996738 - <_> - - <_> - - - - <_> - 12 12 4 3 -1. - <_> - 13 12 2 3 2. - 0 - -0.0109574301168323 - -0.2607482075691223 - 0.0158497299998999 - <_> - - <_> - - - - <_> - 5 10 4 2 -1. - <_> - 5 10 2 1 2. - <_> - 7 11 2 1 2. - 0 - -7.6301600784063339e-003 - 0.2610065937042236 - -0.0243298895657063 - <_> - - <_> - - - - <_> - 13 1 2 8 -1. - <_> - 13 5 2 4 2. - 0 - -0.0678390711545944 - 0.1969130933284760 - -8.3496840670704842e-003 - <_> - - <_> - - - - <_> - 3 1 2 8 -1. - <_> - 3 5 2 4 2. - 0 - 0.0186073090881109 - 0.0256039593368769 - -0.2541362941265106 - <_> - - <_> - - - - <_> - 12 12 4 3 -1. - <_> - 13 12 2 3 2. - 0 - -5.8711939345812425e-005 - 0.0356258116662502 - -0.0410842113196850 - <_> - - <_> - - - - <_> - 9 0 1 2 -1. - <_> - 9 0 1 1 2. - 1 - 8.3914608694612980e-005 - -0.1306141018867493 - 0.0493933893740177 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - 0.0177341904491186 - -0.0342735201120377 - 0.1212686002254486 - <_> - - <_> - - - - <_> - 2 12 4 3 -1. - <_> - 3 12 2 3 2. - 0 - 6.8113701418042183e-003 - 0.0226712208241224 - -0.2659026980400085 - <_> - - <_> - - - - <_> - 9 5 1 6 -1. - <_> - 7 7 1 2 3. - 1 - 0.0454825609922409 - -6.1395200900733471e-003 - 0.4723165929317474 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 2 2 2 2. - 0 - -7.0767141878604889e-003 - -0.3165093064308167 - 0.0200363900512457 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - 7.3222210630774498e-004 - -0.0228806100785732 - 0.0647242665290833 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - -3.2817400060594082e-003 - 0.2516623139381409 - -0.0231686402112246 - <_> - - <_> - - - - <_> - 3 6 12 4 -1. - <_> - 9 6 6 2 2. - <_> - 3 8 6 2 2. - 0 - -0.0461158901453018 - -0.3592045903205872 - 0.0159878805279732 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 7 1 1 2 2. - 0 - 0.0105268899351358 - 9.6597811207175255e-003 - -0.5830839872360230 - <_> - - <_> - - - - <_> - 17 7 1 6 -1. - <_> - 17 9 1 2 3. - 0 - 0.0218886006623507 - 2.8070888947695494e-003 - -0.2902213037014008 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 1 2. - <_> - 7 9 1 1 2. - 0 - -3.7969578988850117e-003 - 0.2682308852672577 - -0.0220357701182365 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 9 7 2 1 9. - 0 - 0.0291505903005600 - 0.0370618589222431 - -0.0972430408000946 - <_> - - <_> - - - - <_> - 0 4 17 6 -1. - <_> - 0 6 17 2 3. - 0 - 0.0796693712472916 - -0.0613007396459579 - 0.1079474985599518 - <_> - - <_> - - - - <_> - 1 6 16 3 -1. - <_> - 1 7 16 1 3. - 0 - -0.0276291705667973 - 0.2252894937992096 - -0.0325724296271801 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 3 0 6 1 2. - 0 - -0.0120179802179337 - 0.1010048985481262 - -0.0664613619446754 - <_> - - <_> - - - - <_> - 11 5 3 4 -1. - <_> - 12 6 1 4 3. - 1 - -0.0119251403957605 - -0.1859060972929001 - 0.0324855595827103 - <_> - - <_> - - - - <_> - 7 1 8 4 -1. - <_> - 7 1 4 4 2. - 1 - 0.2512350976467133 - -0.0248921401798725 - 0.2803005874156952 - <_> - - <_> - - - - <_> - 2 0 16 1 -1. - <_> - 6 0 8 1 2. - 0 - 6.9036600179970264e-003 - -0.0628988519310951 - 0.0317778214812279 - <_> - - <_> - - - - <_> - 9 5 6 1 -1. - <_> - 11 7 2 1 3. - 1 - 0.0535753183066845 - -0.0124396402388811 - 0.4609141051769257 - <_> - - <_> - - - - <_> - 11 6 6 8 -1. - <_> - 13 6 2 8 3. - 0 - -9.4652660191059113e-003 - 0.0841030478477478 - -0.1130022034049034 - <_> - - <_> - - - - <_> - 9 0 8 7 -1. - <_> - 11 2 4 7 2. - 1 - 0.1846922039985657 - 0.0215761400759220 - -0.2691057026386261 - <_> - - <_> - - - - <_> - 11 6 6 8 -1. - <_> - 13 6 2 8 3. - 0 - -0.1181607022881508 - -0.4720633924007416 - 9.0096276253461838e-003 - <_> - - <_> - - - - <_> - 7 5 4 3 -1. - <_> - 6 6 4 1 3. - 1 - 3.6900841223541647e-005 - -0.0588331595063210 - 0.0994533821940422 - <_> - - <_> - - - - <_> - 11 6 6 8 -1. - <_> - 13 6 2 8 3. - 0 - -0.1633061021566391 - -0.6099013090133667 - 1.3118899660184979e-003 - <_> - - <_> - - - - <_> - 1 6 6 8 -1. - <_> - 3 6 2 8 3. - 0 - -0.0965555906295776 - -0.5272396206855774 - 0.0116685898974538 - <_> - - <_> - - - - <_> - 6 2 6 6 -1. - <_> - 6 5 6 3 2. - 0 - 0.0401624515652657 - -0.0327838994562626 - 0.1810777038335800 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 6 6 6 2 2. - 0 - -0.0296869408339262 - 0.1054842993617058 - -0.0615133084356785 - <_> - - <_> - - - - <_> - 17 8 1 2 -1. - <_> - 17 9 1 1 2. - 0 - 7.5436946644913405e-005 - -0.0359807685017586 - 0.0499344505369663 - <_> - - <_> - - - - <_> - 0 8 1 2 -1. - <_> - 0 9 1 1 2. - 0 - 2.0552529022097588e-003 - 0.0275182090699673 - -0.2457398027181625 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 9 2 2 2. - 0 - 2.3879110813140869e-005 - -0.0258090496063232 - 0.0299507193267345 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 9 2 2 2. - 0 - -5.0713717937469482e-003 - -0.2063910961151123 - 0.0320026017725468 - <_> - - <_> - - - - <_> - 1 4 17 2 -1. - <_> - 1 5 17 1 2. - 0 - -4.8216218128800392e-003 - -0.0975668132305145 - 0.0551092401146889 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 0 0 9 2 2. - <_> - 9 2 9 2 2. - 0 - 0.0652106925845146 - 6.3420450314879417e-003 - -0.7882834076881409 - <_> - - <_> - - - - <_> - 12 9 4 2 -1. - <_> - 13 10 2 2 2. - 1 - 0.0158219691365957 - -0.0214756801724434 - 0.1222712993621826 - <_> - - <_> - - - - <_> - 6 9 2 4 -1. - <_> - 5 10 2 2 2. - 1 - -0.0300759393721819 - 0.3701142966747284 - -0.0154766896739602 - <_> - - <_> - - - - <_> - 9 8 1 2 -1. - <_> - 9 9 1 1 2. - 0 - -5.5496598361060023e-004 - 0.0414319299161434 - -0.1214471980929375 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -0.0247548408806324 - -0.3526229858398438 - 0.0153448497876525 - <_> - - <_> - - - - <_> - 17 3 1 3 -1. - <_> - 16 4 1 1 3. - 1 - -8.7477359920740128e-003 - 0.1915535926818848 - -0.0225379504263401 - <_> - - <_> - - - - <_> - 5 9 2 3 -1. - <_> - 4 10 2 1 3. - 1 - -3.5500800004228950e-004 - -0.0846040025353432 - 0.0653416514396667 - <_> - - <_> - - - - <_> - 1 3 16 6 -1. - <_> - 1 5 16 2 3. - 0 - -0.0578844510018826 - 0.2597366869449616 - -0.0210837107151747 - <_> - - <_> - - - - <_> - 2 12 1 2 -1. - <_> - 2 12 1 1 2. - 1 - 3.7522350903600454e-003 - 0.0316149704158306 - -0.1879500001668930 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 1 1 2 2. - 0 - 2.0266280625946820e-004 - -0.0488242693245411 - 0.0477622412145138 - <_> - - <_> - - - - <_> - 6 5 4 2 -1. - <_> - 6 5 2 2 2. - 1 - -0.0179599896073341 - -0.1835830062627792 - 0.0270573794841766 - <_> - - <_> - - - - <_> - 0 13 18 2 -1. - <_> - 0 14 18 1 2. - 0 - -0.0512004382908344 - 0.2723462879657745 - -0.0199546292424202 - <_> - - <_> - - - - <_> - 8 4 6 3 -1. - <_> - 7 5 6 1 3. - 1 - -7.3698651976883411e-003 - -0.1229937970638275 - 0.0452794395387173 - <_> - - <_> - - - - <_> - 9 4 2 1 -1. - <_> - 9 4 1 1 2. - 0 - -8.1579107791185379e-004 - 0.0460813082754612 - -0.0212064106017351 - <_> - - <_> - - - - <_> - 7 4 2 1 -1. - <_> - 8 4 1 1 2. - 0 - 7.7019751188345253e-005 - -0.1122386977076531 - 0.0467198304831982 - <_> - - <_> - - - - <_> - 8 0 6 10 -1. - <_> - 10 0 2 10 3. - 0 - 0.0337534099817276 - -0.0296947807073593 - 0.0309586394578218 - <_> - - <_> - - - - <_> - 4 0 6 10 -1. - <_> - 6 0 2 10 3. - 0 - 0.0288798399269581 - -0.0476091802120209 - 0.1637064069509506 - <_> - - <_> - - - - <_> - 8 3 6 6 -1. - <_> - 10 5 2 2 9. - 0 - -0.1380393058061600 - -0.7450910210609436 - 2.3958049714565277e-003 - <_> - - <_> - - - - <_> - 4 3 6 6 -1. - <_> - 6 5 2 2 9. - 0 - 0.0903065428137779 - 0.0284100994467735 - -0.2060600072145462 - <_> - - <_> - - - - <_> - 9 5 4 6 -1. - <_> - 9 5 2 6 2. - 1 - 0.1313064992427826 - 5.8837989345192909e-003 - -0.2589462995529175 - <_> - - <_> - - - - <_> - 9 5 6 4 -1. - <_> - 9 5 6 2 2. - 1 - 0.1362369954586029 - 0.0184906795620918 - -0.2909663021564484 - <_> - - <_> - - - - <_> - 14 3 4 1 -1. - <_> - 15 3 2 1 2. - 0 - 1.1483960552141070e-003 - -0.0253341905772686 - 0.0819629207253456 - <_> - - <_> - - - - <_> - 0 3 4 1 -1. - <_> - 1 3 2 1 2. - 0 - 7.0390116889029741e-005 - -0.0650801733136177 - 0.0823377668857574 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - -5.8111059479415417e-003 - -0.2012600004673004 - 0.0141831701621413 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 3 2 1 2 3. - 1 - -0.0121500901877880 - 0.2102168947458267 - -0.0297118108719587 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - 4.3220389634370804e-003 - 0.0221526604145765 - -0.1970590054988861 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 4.6673179604113102e-003 - 0.0223421193659306 - -0.2634218931198120 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 1 1 2 2. - 0 - -1.3583960244432092e-003 - 0.0737654492259026 - -0.0178339798003435 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - -5.0764158368110657e-003 - -0.1749037057161331 - 0.0299977697432041 - <_> - - <_> - - - - <_> - 14 5 3 1 -1. - <_> - 15 5 1 1 3. - 0 - 1.9497750326991081e-003 - -0.0271147508174181 - 0.1616608947515488 - <_> - - <_> - - - - <_> - 1 5 3 1 -1. - <_> - 2 5 1 1 3. - 0 - -2.5937429163604975e-003 - 0.1807800978422165 - -0.0271914806216955 - <_> - - <_> - - - - <_> - 1 13 16 2 -1. - <_> - 5 13 8 2 2. - 0 - -0.0217158906161785 - 0.0960418581962585 - -0.0522431582212448 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 1 1 2. - <_> - 3 4 1 1 2. - 0 - -2.5649809686001390e-005 - 0.0830500423908234 - -0.0617705583572388 - <_> - - <_> - - - - <_> - 14 3 2 2 -1. - <_> - 15 3 1 1 2. - <_> - 14 4 1 1 2. - 0 - 9.8641996737569571e-004 - -0.0246842093765736 - 0.0971914604306221 - <_> - - <_> - - - - <_> - 2 3 2 2 -1. - <_> - 2 3 1 1 2. - <_> - 3 4 1 1 2. - 0 - 2.3739310563541949e-005 - -0.0695554167032242 - 0.0771528929471970 - <_> - - <_> - - - - <_> - 4 1 11 3 -1. - <_> - 4 2 11 1 3. - 0 - -0.0109101701527834 - -0.2544479072093964 - 0.0161350406706333 - <_> - - <_> - - - - <_> - 7 3 1 2 -1. - <_> - 7 4 1 1 2. - 0 - 5.6066219258354977e-005 - -0.0764008387923241 - 0.0709967613220215 - <_> - - <_> - - - - <_> - 7 14 9 1 -1. - <_> - 10 14 3 1 3. - 0 - 0.0277181603014469 - 7.7127898111939430e-003 - -0.3020167946815491 - <_> - - <_> - - - - <_> - 5 10 6 2 -1. - <_> - 5 10 3 1 2. - <_> - 8 11 3 1 2. - 0 - 4.3827071785926819e-003 - -0.0343367606401443 - 0.1395512074232101 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 9 10 9 1 2. - <_> - 0 11 9 1 2. - 0 - -0.0375617109239101 - -0.4568941891193390 - 0.0118549996986985 - <_> - - <_> - - - - <_> - 0 11 15 4 -1. - <_> - 0 13 15 2 2. - 0 - 0.0137532595545053 - -0.0834474489092827 - 0.0594723001122475 - <_> - - <_> - - - - <_> - 2 12 16 3 -1. - <_> - 2 13 16 1 3. - 0 - -0.0275797992944717 - 0.2129182070493698 - -0.0230544097721577 - <_> - - <_> - - - - <_> - 0 0 16 1 -1. - <_> - 4 0 8 1 2. - 0 - -0.0408227592706680 - -0.5026323199272156 - 0.0106398798525333 - <_> - - <_> - - - - <_> - 6 5 12 5 -1. - <_> - 9 5 6 5 2. - 0 - 0.1474343985319138 - 7.7440468594431877e-003 - -0.1845449060201645 - <_> - - <_> - - - - <_> - 0 5 12 5 -1. - <_> - 3 5 6 5 2. - 0 - -0.1937156021595001 - 0.4649069905281067 - -0.0140745798125863 - <_> - - <_> - - - - <_> - 8 11 9 3 -1. - <_> - 11 12 3 1 9. - 0 - -0.0414674803614616 - -0.1333149969577789 - 0.0317224115133286 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - 2.1617549937218428e-003 - 0.0348884016275406 - -0.1198396012187004 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - -2.8305849991738796e-003 - -0.2148375064134598 - 0.0255391206592321 - <_> - - <_> - - - - <_> - 5 1 4 3 -1. - <_> - 7 1 2 3 2. - 0 - -0.0108386399224401 - 0.3380304872989655 - -0.0135911796241999 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - 2.1821239497512579e-003 - -0.0311352293938398 - 0.0836798921227455 - <_> - - <_> - - - - <_> - 3 0 7 2 -1. - <_> - 3 0 7 1 2. - 1 - 6.8489680415950716e-005 - -0.1545356065034866 - 0.0330539792776108 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 3 7 12 2 2. - 0 - 5.2545121870934963e-003 - -0.0294149704277515 - 0.1650622040033341 - <_> - - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 8 1 1 3. - 1 - 7.5199748389422894e-003 - 0.0233634002506733 - -0.2177156955003738 - <_> - - <_> - - - - <_> - 5 11 8 4 -1. - <_> - 7 11 4 4 2. - 0 - -0.0451239906251431 - -0.3253602981567383 - 0.0132816601544619 - <_> - - <_> - - - - <_> - 6 14 6 1 -1. - <_> - 8 14 2 1 3. - 0 - -2.0451450254768133e-003 - 0.0958046466112137 - -0.0509931109845638 - <_> - - <_> - - - - <_> - 7 13 4 1 -1. - <_> - 8 13 2 1 2. - 0 - 2.9070109594613314e-003 - -0.0276902206242085 - 0.1959555000066757 - <_> - - <_> - - - - <_> - 2 12 8 2 -1. - <_> - 4 12 4 2 2. - 0 - -0.0255583897233009 - -0.2762543857097626 - 0.0211479291319847 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 16 11 1 2 3. - 1 - 2.6447090785950422e-003 - -0.0326275005936623 - 0.0412402711808681 - <_> - - <_> - - - - <_> - 3 10 2 3 -1. - <_> - 2 11 2 1 3. - 1 - 2.8334530725260265e-005 - -0.0848775878548622 - 0.0558658987283707 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 17 12 1 1 2. - <_> - 16 13 1 1 2. - 0 - 6.6109612816944718e-004 - -0.0328278504312038 - 0.0740109831094742 - <_> - - <_> - - - - <_> - 0 10 18 4 -1. - <_> - 0 12 18 2 2. - 0 - 0.2091878950595856 - 0.0100189801305532 - -0.4741156101226807 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 17 12 1 1 2. - <_> - 16 13 1 1 2. - 0 - -6.0340400523273274e-005 - 0.0483234487473965 - -0.0327794998884201 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - 6.6149746999144554e-005 - -0.0749692469835281 - 0.0619521290063858 - <_> - - <_> - - - - <_> - 16 1 2 4 -1. - <_> - 16 1 1 4 2. - 1 - -5.1479000831022859e-004 - -0.0949240326881409 - 0.0353007800877094 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 2 1 4 1 2. - 1 - 7.3261340148746967e-003 - 0.0385022200644016 - -0.1484065949916840 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - 0.0244394596666098 - -0.0134110199287534 - 0.1884368062019348 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 1 1 4 3. - 1 - 4.1021420620381832e-003 - -0.0499801896512508 - 0.1074775010347366 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - -2.2003119811415672e-003 - 0.1520256996154785 - -0.0104131698608398 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 2 1 1 2. - <_> - 1 3 1 1 2. - 0 - -6.3748419051989913e-005 - 0.0831847265362740 - -0.0730274766683578 - <_> - - <_> - - - - <_> - 12 5 6 1 -1. - <_> - 12 5 3 1 2. - 0 - 0.0169174205511808 - 0.0226879809051752 - -0.1706082969903946 - <_> - - <_> - - - - <_> - 0 5 6 1 -1. - <_> - 3 5 3 1 2. - 0 - 2.3382799699902534e-003 - -0.0599084608256817 - 0.0865803733468056 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 9 3 4 1 2. - <_> - 5 4 4 1 2. - 0 - 3.5319819580763578e-003 - 0.0330129303038120 - -0.1592663973569870 - <_> - - <_> - - - - <_> - 7 0 2 8 -1. - <_> - 8 0 1 8 2. - 0 - 8.2293795421719551e-003 - -0.0760265216231346 - 0.0753199979662895 - <_> - - <_> - - - - <_> - 9 2 2 3 -1. - <_> - 9 2 1 3 2. - 1 - -0.0413003005087376 - -0.6109560728073120 - 2.1895230747759342e-003 - <_> - - <_> - - - - <_> - 9 2 3 2 -1. - <_> - 9 2 3 1 2. - 1 - -4.3179420754313469e-003 - 0.1440498977899551 - -0.0388708002865314 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 17 12 1 1 2. - <_> - 16 13 1 1 2. - 0 - 4.7153229388641194e-005 - -0.0498175993561745 - 0.0487685203552246 - <_> - - <_> - - - - <_> - 0 12 2 2 -1. - <_> - 0 12 1 1 2. - <_> - 1 13 1 1 2. - 0 - 7.9003963037393987e-005 - -0.0683221071958542 - 0.0680771768093109 - <_> - - <_> - - - - <_> - 16 12 2 2 -1. - <_> - 17 12 1 1 2. - <_> - 16 13 1 1 2. - 0 - -6.0340400523273274e-005 - 0.0513286590576172 - -0.0355508588254452 - <_> - - <_> - - - - <_> - 0 12 2 2 -1. - <_> - 0 12 1 1 2. - <_> - 1 13 1 1 2. - 0 - -5.1807070121867582e-005 - 0.0842122733592987 - -0.0549248084425926 - <_> - - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 8 13 4 2 2. - 0 - 0.0472138598561287 - 2.3352450225502253e-003 - -0.3441792130470276 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 0 4 1 2. - <_> - 9 1 4 1 2. - 0 - -4.0626591071486473e-003 - -0.1841911971569061 - 0.0257207695394754 - <_> - - <_> - - - - <_> - 13 8 1 4 -1. - <_> - 13 8 1 2 2. - 1 - -0.0227853395044804 - -0.1396211981773377 - 0.0121513595804572 - <_> - - <_> - - - - <_> - 0 5 16 6 -1. - <_> - 0 7 16 2 3. - 0 - -0.0758542269468308 - 0.1125688031315804 - -0.0392036698758602 - <_> - - <_> - - - - <_> - 12 5 1 6 -1. - <_> - 12 7 1 2 3. - 0 - 7.5154039077460766e-003 - -0.0197846591472626 - 0.0587355606257916 - <_> - - <_> - - - - <_> - 5 5 1 6 -1. - <_> - 5 7 1 2 3. - 0 - 3.1700478866696358e-003 - -0.0542454309761524 - 0.0902648568153381 - <_> - - <_> - - - - <_> - 12 8 6 4 -1. - <_> - 15 8 3 2 2. - <_> - 12 10 3 2 2. - 0 - 3.2852489966899157e-003 - -0.0545393712818623 - 0.0909095332026482 - <_> - - <_> - - - - <_> - 0 5 18 4 -1. - <_> - 0 5 9 2 2. - <_> - 9 7 9 2 2. - 0 - -0.0938187167048454 - -0.4816806912422180 - 9.7587006166577339e-003 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 11 3 1 1 2. - <_> - 10 4 1 1 2. - 0 - -6.3132712966762483e-005 - 0.0410898402333260 - -0.0365439392626286 - <_> - - <_> - - - - <_> - 2 10 6 3 -1. - <_> - 4 11 2 1 9. - 0 - -0.0198575109243393 - -0.1172147020697594 - 0.0405645594000816 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 17 6 1 1 3. - 0 - 6.7911748774349689e-003 - 6.4080609008669853e-003 - -0.3227761089801788 - <_> - - <_> - - - - <_> - 8 3 3 8 -1. - <_> - 8 3 3 4 2. - 1 - -0.0894692763686180 - -0.3574151098728180 - 0.0124983703717589 - <_> - - <_> - - - - <_> - 12 7 4 1 -1. - <_> - 13 8 2 1 2. - 1 - 7.4639841914176941e-003 - -0.0199772007763386 - 0.1834387928247452 - <_> - - <_> - - - - <_> - 1 3 9 12 -1. - <_> - 4 7 3 4 9. - 0 - 0.3588905930519104 - 0.0110323298722506 - -0.5567330121994019 - <_> - - <_> - - - - <_> - 12 7 4 1 -1. - <_> - 13 8 2 1 2. - 1 - -0.0288398806005716 - 0.1999306976795197 - -8.9885722845792770e-003 - <_> - - <_> - - - - <_> - 6 7 1 4 -1. - <_> - 5 8 1 2 2. - 1 - 1.3966220431029797e-003 - -0.0439058393239975 - 0.1105595976114273 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 17 6 1 1 3. - 0 - -8.6227077990770340e-003 - -0.4303059875965118 - 4.9329511821269989e-003 - <_> - - <_> - - - - <_> - 0 5 1 3 -1. - <_> - 0 6 1 1 3. - 0 - 8.1372596323490143e-003 - 6.1173681169748306e-003 - -0.7087032198905945 - <_> - - <_> - - - - <_> - 13 1 1 3 -1. - <_> - 13 2 1 1 3. - 0 - -5.2080889872740954e-005 - 0.0546860583126545 - -0.0489871315658093 - <_> - - <_> - - - - <_> - 6 3 2 2 -1. - <_> - 6 3 1 1 2. - <_> - 7 4 1 1 2. - 0 - -6.2907347455620766e-005 - 0.0777546167373657 - -0.0597959607839584 - <_> - - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 8 13 4 2 2. - 0 - -0.0226010698825121 - -0.1179111003875732 - 7.3637152090668678e-003 - <_> - - <_> - - - - <_> - 5 5 4 3 -1. - <_> - 6 6 2 3 2. - 1 - -4.6634320169687271e-003 - 0.0752310603857040 - -0.0575729906558990 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 6 10 6 1 2. - 0 - -4.7270618379116058e-003 - 0.0710658580064774 - -0.0859678834676743 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 6 0 6 11 3. - 0 - 0.7271161079406738 - 0.0102728903293610 - -0.4684585928916931 - <_> - - <_> - - - - <_> - 16 3 2 4 -1. - <_> - 17 3 1 2 2. - <_> - 16 5 1 2 2. - 0 - -3.0634279828518629e-003 - 0.1082748025655747 - -0.0231780707836151 - <_> - - <_> - - - - <_> - 5 3 6 6 -1. - <_> - 5 3 3 3 2. - <_> - 8 6 3 3 2. - 0 - 0.0512203201651573 - 0.0100829303264618 - -0.4622367024421692 - <_> - - <_> - - - - <_> - 5 2 8 6 -1. - <_> - 7 2 4 6 2. - 0 - -0.0233622491359711 - 0.2221122980117798 - -0.0204992592334747 - <_> - - <_> - - - - <_> - 3 2 12 4 -1. - <_> - 6 2 6 4 2. - 0 - 0.0226982291787863 - -0.1140964999794960 - 0.0413477197289467 - <_> - - <_> - - - - <_> - 16 3 2 4 -1. - <_> - 17 3 1 2 2. - <_> - 16 5 1 2 2. - 0 - 3.2806419767439365e-003 - -0.0227168798446655 - 0.1028605028986931 - <_> - - <_> - - - - <_> - 1 0 3 2 -1. - <_> - 2 0 1 2 3. - 0 - 3.5968020092695951e-003 - 0.0211614202708006 - -0.2068026065826416 - <_> - - <_> - - - - <_> - 16 3 2 4 -1. - <_> - 17 3 1 2 2. - <_> - 16 5 1 2 2. - 0 - -0.0120496097952127 - -0.2600671947002411 - 2.0481001120060682e-003 - <_> - - <_> - - - - <_> - 0 3 2 4 -1. - <_> - 0 3 1 2 2. - <_> - 1 5 1 2 2. - 0 - -2.6617539115250111e-003 - 0.1557877063751221 - -0.0324140116572380 - <_> - - <_> - - - - <_> - 14 3 4 1 -1. - <_> - 15 4 2 1 2. - 1 - -0.0147399995476007 - -0.1630623042583466 - 7.1668480522930622e-003 - <_> - - <_> - - - - <_> - 5 5 6 6 -1. - <_> - 5 5 3 3 2. - <_> - 8 8 3 3 2. - 0 - -0.0702147036790848 - 0.3676038086414337 - -0.0122618498280644 - <_> - - <_> - - - - <_> - 8 3 2 10 -1. - <_> - 8 8 2 5 2. - 0 - -0.1149382963776588 - -0.4100660979747772 - 0.0111378999426961 - <_> - - <_> - - - - <_> - 4 3 1 4 -1. - <_> - 3 4 1 2 2. - 1 - -0.0165353007614613 - -0.4933117032051086 - 8.9259371161460876e-003 - <_> - - <_> - - - - <_> - 11 8 6 1 -1. - <_> - 11 8 3 1 2. - 1 - -0.0684577375650406 - -0.6294438838958740 - 1.3810090022161603e-003 - <_> - - <_> - - - - <_> - 7 8 1 6 -1. - <_> - 7 8 1 3 2. - 1 - 1.7950909677892923e-003 - 0.0439951792359352 - -0.0981230884790421 - <_> - - <_> - - - - <_> - 6 13 12 1 -1. - <_> - 6 13 6 1 2. - 0 - 9.2409765347838402e-003 - -0.0319279804825783 - 0.0786244422197342 - <_> - - <_> - - - - <_> - 0 13 16 2 -1. - <_> - 8 13 8 2 2. - 0 - 0.0150848804041743 - -0.0652311071753502 - 0.0835528671741486 - <_> - - <_> - - - - <_> - 10 9 4 4 -1. - <_> - 10 11 4 2 2. - 0 - -0.0147555302828550 - 0.0596954599022865 - -0.0246289800852537 - <_> - - <_> - - - - <_> - 4 1 7 3 -1. - <_> - 4 2 7 1 3. - 0 - 0.0138705503195524 - 6.8354210816323757e-003 - -0.6697801947593689 - <_> - - <_> - - - - <_> - 11 2 2 2 -1. - <_> - 12 2 1 1 2. - <_> - 11 3 1 1 2. - 0 - 8.4027196862734854e-005 - -0.0388491488993168 - 0.0505469888448715 - <_> - - <_> - - - - <_> - 5 2 2 2 -1. - <_> - 5 2 1 1 2. - <_> - 6 3 1 1 2. - 0 - -2.3879110813140869e-005 - 0.0776163190603256 - -0.0570690892636776 - <_> - - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 8 13 4 2 2. - 0 - -3.7118638865649700e-003 - 0.0576838590204716 - -0.0364302918314934 - <_> - - <_> - - - - <_> - 4 13 8 2 -1. - <_> - 6 13 4 2 2. - 0 - 0.0293781608343124 - 0.0116572398692369 - -0.3750464916229248 - <_> - - <_> - - - - <_> - 4 3 12 9 -1. - <_> - 8 6 4 3 9. - 0 - 0.7575286030769348 - -0.0124912802129984 - 0.3014566004276276 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 2 2 4 3. - 1 - 0.0284970905631781 - -0.0739599689841270 - 0.0625938624143600 - <_> - - <_> - - - - <_> - 13 8 1 4 -1. - <_> - 13 8 1 2 2. - 1 - 0.0307283699512482 - 8.5481833666563034e-003 - -0.2512742877006531 - <_> - - <_> - - - - <_> - 5 8 4 1 -1. - <_> - 5 8 2 1 2. - 1 - 0.0336146205663681 - -0.0114417197182775 - 0.4936141073703766 - <_> - - <_> - - - - <_> - 4 1 12 5 -1. - <_> - 7 1 6 5 2. - 0 - -0.0226515103131533 - 0.2068635970354080 - -9.4910562038421631e-003 - <_> - - <_> - - - - <_> - 5 0 4 1 -1. - <_> - 6 0 2 1 2. - 0 - -5.5092899856390432e-005 - 0.0643607303500175 - -0.0726891383528709 - <_> - - <_> - - - - <_> - 9 0 1 4 -1. - <_> - 8 1 1 2 2. - 1 - -6.5959710627794266e-003 - -0.1754118949174881 - 0.0161602105945349 - <_> - - <_> - - - - <_> - 4 2 2 2 -1. - <_> - 4 2 1 1 2. - <_> - 5 3 1 1 2. - 0 - -6.0941398260183632e-005 - 0.0750486701726913 - -0.0528231002390385 - <_> - - <_> - - - - <_> - 12 2 2 2 -1. - <_> - 13 2 1 1 2. - <_> - 12 3 1 1 2. - 0 - 2.5904899302986450e-005 - -0.0497396588325500 - 0.0585739016532898 - <_> - - <_> - - - - <_> - 4 2 2 2 -1. - <_> - 4 2 1 1 2. - <_> - 5 3 1 1 2. - 0 - 5.0394570280332118e-005 - -0.0618803091347218 - 0.0666748136281967 - <_> - - <_> - - - - <_> - 7 0 5 4 -1. - <_> - 7 2 5 2 2. - 0 - 0.0125536797568202 - 0.0249107405543327 - -0.1277243942022324 - <_> - - <_> - - - - <_> - 9 3 1 6 -1. - <_> - 9 3 1 3 2. - 1 - 0.0580843500792980 - -0.0178222507238388 - 0.2289890944957733 - <_> - - <_> - - - - <_> - 15 6 2 4 -1. - <_> - 15 7 2 2 2. - 0 - 8.0750687047839165e-003 - -0.0227536000311375 - 0.1436315029859543 - <_> - - <_> - - - - <_> - 0 6 18 2 -1. - <_> - 0 6 9 1 2. - <_> - 9 7 9 1 2. - 0 - 0.0121633401140571 - 0.0267546195536852 - -0.1825599968433380 - <_> - - <_> - - - - <_> - 13 6 2 2 -1. - <_> - 14 6 1 1 2. - <_> - 13 7 1 1 2. - 0 - -1.5941649908199906e-003 - 0.0994387790560722 - -0.0237834397703409 - <_> - - <_> - - - - <_> - 0 0 5 8 -1. - <_> - 0 4 5 4 2. - 0 - -0.1208584979176521 - -0.5958552956581116 - 6.8441159091889858e-003 - <_> - - <_> - - - - <_> - 12 2 2 2 -1. - <_> - 12 2 2 1 2. - 1 - 8.7481532245874405e-003 - -0.0220798607915640 - 0.2665669023990631 - <_> - - <_> - - - - <_> - 8 0 10 2 -1. - <_> - 8 0 10 1 2. - 1 - 0.0161353591829538 - 0.0678508132696152 - -0.0773861631751060 - <_> - - <_> - - - - <_> - 5 0 11 12 -1. - <_> - 5 4 11 4 3. - 0 - 0.2290714979171753 - -0.0353788398206234 - 0.0487073697149754 - <_> - - <_> - - - - <_> - 2 0 11 12 -1. - <_> - 2 4 11 4 3. - 0 - 0.5067147016525269 - 5.8341762050986290e-003 - -0.6683058738708496 - <_> - - <_> - - - - <_> - 11 1 2 14 -1. - <_> - 12 1 1 7 2. - <_> - 11 8 1 7 2. - 0 - -0.0358187593519688 - -0.2682330906391144 - 1.7747150268405676e-003 - <_> - - <_> - - - - <_> - 5 1 2 14 -1. - <_> - 5 1 1 7 2. - <_> - 6 8 1 7 2. - 0 - -0.0265013501048088 - -0.3013739883899689 - 0.0139737101271749 - <_> - - <_> - - - - <_> - 11 8 2 1 -1. - <_> - 11 8 1 1 2. - 1 - 0.0247978400439024 - 2.4552580434828997e-003 - -0.5952212214469910 - <_> - - <_> - - - - <_> - 3 6 2 2 -1. - <_> - 3 6 1 1 2. - <_> - 4 7 1 1 2. - 0 - 1.6543349483981729e-003 - -0.0251259692013264 - 0.1939691007137299 - <_> - - <_> - - - - <_> - 11 8 2 1 -1. - <_> - 11 8 1 1 2. - 1 - 7.0274528115987778e-003 - 0.0204041302204132 - -0.0531757883727551 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 0 8 9 2 2. - <_> - 9 10 9 2 2. - 0 - 0.0742075890302658 - 0.0124620702117682 - -0.3335205912590027 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 1 - -2.3010969161987305e-003 - -0.1495874971151352 - 0.0201095491647720 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 1.3790120137855411e-003 - 0.0333775207400322 - -0.1239598989486694 - <_> - - <_> - - - - <_> - 3 0 15 14 -1. - <_> - 8 0 5 14 3. - 0 - 0.8267709016799927 - 4.6560140326619148e-003 - -0.7640576958656311 - <_> - - <_> - - - - <_> - 4 0 9 13 -1. - <_> - 7 0 3 13 3. - 0 - 0.2946146130561829 - -0.0152309397235513 - 0.3104419112205505 - <_> - - <_> - - - - <_> - 7 5 4 9 -1. - <_> - 7 5 2 9 2. - 0 - 0.0746835619211197 - 8.8676074519753456e-003 - -0.5228682756423950 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 2 4 2. - 1 - 0.0880003422498703 - -0.0119359400123358 - 0.4041942954063416 - <_> - - <_> - - - - <_> - 7 2 6 2 -1. - <_> - 10 2 3 1 2. - <_> - 7 3 3 1 2. - 0 - 5.3336159326136112e-003 - 0.0136402798816562 - -0.2447970956563950 - <_> - - <_> - - - - <_> - 7 4 6 2 -1. - <_> - 9 6 2 2 3. - 1 - -0.0543241314589977 - -0.3354822993278503 - 0.0117584997788072 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 12 9 1 2 3. - 1 - 0.0325612500309944 - 1.3724969467148185e-003 - -0.3325941860675812 - <_> - - <_> - - - - <_> - 7 8 2 3 -1. - <_> - 6 9 2 1 3. - 1 - 4.8455069772899151e-003 - -0.0363678596913815 - 0.1394127011299133 - <_> - - <_> - - - - <_> - 12 14 4 1 -1. - <_> - 12 14 2 1 2. - 0 - -9.4578228890895844e-003 - -0.1517935991287231 - 7.1280989795923233e-003 - <_> - - <_> - - - - <_> - 2 14 4 1 -1. - <_> - 4 14 2 1 2. - 0 - 6.5718130208551884e-003 - 0.0160512197762728 - -0.2522624135017395 - <_> - - <_> - - - - <_> - 12 11 4 4 -1. - <_> - 14 11 2 2 2. - <_> - 12 13 2 2 2. - 0 - 0.0234677102416754 - 6.1246878467500210e-003 - -0.2341949939727783 - <_> - - <_> - - - - <_> - 6 12 1 3 -1. - <_> - 6 13 1 1 3. - 0 - 1.7358670011162758e-003 - -0.0396148599684238 - 0.1216652020812035 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - 8.0753577640280128e-004 - -0.0265275705605745 - 0.0391027294099331 - <_> - - <_> - - - - <_> - 3 10 4 4 -1. - <_> - 3 11 4 2 2. - 0 - -5.5824369192123413e-003 - -0.1007393002510071 - 0.0372616909444332 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - -2.6079979725182056e-003 - 0.0740168169140816 - -0.0109551800414920 - <_> - - <_> - - - - <_> - 6 13 1 2 -1. - <_> - 6 14 1 1 2. - 0 - 6.9571033236570656e-005 - -0.0852629169821739 - 0.0644899830222130 - <_> - - <_> - - - - <_> - 7 7 10 4 -1. - <_> - 12 7 5 2 2. - <_> - 7 9 5 2 2. - 0 - 0.0819417685270309 - 2.0980359986424446e-003 - -0.6184495091438294 - <_> - - <_> - - - - <_> - 1 7 10 4 -1. - <_> - 1 7 5 2 2. - <_> - 6 9 5 2 2. - 0 - 0.0194270908832550 - -0.0222837105393410 - 0.1991835981607437 - <_> - - <_> - - - - <_> - 0 4 18 4 -1. - <_> - 6 4 6 4 3. - 0 - -0.1507761031389237 - -0.6439470052719116 - 7.0817708037793636e-003 - <_> - - <_> - - - - <_> - 2 11 4 4 -1. - <_> - 2 11 2 2 2. - <_> - 4 13 2 2 2. - 0 - -1.5093310503289104e-003 - -0.1065026968717575 - 0.0375769101083279 - <_> - - <_> - - - - <_> - 9 14 6 1 -1. - <_> - 11 14 2 1 3. - 0 - 0.0362875610589981 - 6.2272557988762856e-004 - -1.0000269412994385 - <_> - - <_> - - - - <_> - 3 14 6 1 -1. - <_> - 5 14 2 1 3. - 0 - -1.7432459862902761e-003 - 0.0829876065254211 - -0.0519000887870789 - <_> - - <_> - - - - <_> - 11 12 3 1 -1. - <_> - 12 12 1 1 3. - 0 - -6.1345883295871317e-005 - 0.0411302000284195 - -0.0397632196545601 - <_> - - <_> - - - - <_> - 4 12 3 1 -1. - <_> - 5 12 1 1 3. - 0 - 2.6694999178289436e-005 - -0.0574894510209560 - 0.0767864733934402 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0332492999732494 - 0.0608417689800262 - <_> - - <_> - - - - <_> - 5 3 6 4 -1. - <_> - 5 4 6 2 2. - 0 - -0.0216660704463720 - -0.4239960014820099 - 9.5887510105967522e-003 - <_> - - <_> - - - - <_> - 4 3 12 9 -1. - <_> - 8 6 4 3 9. - 0 - 0.6512408256530762 - -0.0139236301183701 - 0.2035869956016541 - <_> - - <_> - - - - <_> - 4 6 10 2 -1. - <_> - 4 7 10 1 2. - 0 - -8.1125432625412941e-003 - 0.0472846701741219 - -0.0877940282225609 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - 8.7661407887935638e-003 - 3.6122149322181940e-004 - -0.4613266885280609 - <_> - - <_> - - - - <_> - 4 5 1 2 -1. - <_> - 4 6 1 1 2. - 0 - 5.6974760809680447e-005 - -0.0540806017816067 - 0.0876793190836906 - <_> - - <_> - - - - <_> - 11 4 4 2 -1. - <_> - 11 5 4 1 2. - 0 - 8.2681202911771834e-005 - -0.0361079499125481 - 0.0403531081974506 - <_> - - <_> - - - - <_> - 3 4 4 2 -1. - <_> - 3 5 4 1 2. - 0 - 3.6902779247611761e-003 - 0.0328456684947014 - -0.1765446066856384 - <_> - - <_> - - - - <_> - 5 4 8 2 -1. - <_> - 9 4 4 1 2. - <_> - 5 5 4 1 2. - 0 - -2.4884620215743780e-003 - -0.1116909012198448 - 0.0380927696824074 - <_> - - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 6 2 1 2 2. - 1 - 6.1029191128909588e-003 - -0.0218723006546497 - 0.2147480994462967 - <_> - - <_> - - - - <_> - 14 3 2 11 -1. - <_> - 14 3 1 11 2. - 0 - 8.4216389805078506e-003 - 0.0250333193689585 - -0.1052472963929176 - <_> - - <_> - - - - <_> - 2 3 2 11 -1. - <_> - 3 3 1 11 2. - 0 - -0.0112776597961783 - -0.1206863969564438 - 0.0366918705403805 - <_> - - <_> - - - - <_> - 14 6 4 3 -1. - <_> - 15 6 2 3 2. - 0 - -2.5908139068633318e-003 - 0.0489619709551334 - -0.0271127801388502 - <_> - - <_> - - - - <_> - 0 6 4 5 -1. - <_> - 1 6 2 5 2. - 0 - 3.9354357868432999e-003 - -0.0488033294677734 - 0.0915941670536995 - <_> - - <_> - - - - <_> - 11 0 6 3 -1. - <_> - 13 0 2 3 3. - 0 - -5.7140849530696869e-003 - 0.0652810335159302 - -0.0544281415641308 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 2 2. - 1 - 7.5044799596071243e-003 - 0.0404559001326561 - -0.1001691967248917 - <_> - - <_> - - - - <_> - 13 3 1 6 -1. - <_> - 13 5 1 2 3. - 0 - 3.6039410624653101e-003 - -0.0484412014484406 - 0.0443660393357277 - <_> - - <_> - - - - <_> - 4 4 4 4 -1. - <_> - 5 4 2 4 2. - 0 - -0.0142484996467829 - -0.1895865947008133 - 0.0223791096359491 - <_> - - <_> - - - - <_> - 8 1 3 9 -1. - <_> - 9 4 1 3 9. - 0 - 0.1074685975909233 - -0.0145733403041959 - 0.1853380054235458 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 5 1 1 3. - 1 - 6.5448340028524399e-003 - 0.0309639498591423 - -0.1545622944831848 - <_> - - <_> - - - - <_> - 6 2 9 9 -1. - <_> - 9 5 3 3 9. - 0 - 0.4055879116058350 - -0.0106067704036832 - 0.0930665135383606 - <_> - - <_> - - - - <_> - 3 2 9 9 -1. - <_> - 6 5 3 3 9. - 0 - 0.4504162073135376 - -0.0119176097214222 - 0.3723948001861572 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 6 4 6 4 9. - 0 - 1.0484869480133057 - 0.0248466003686190 - -0.2055020928382874 - <_> - - <_> - - - - <_> - 1 3 14 4 -1. - <_> - 1 3 7 2 2. - <_> - 8 5 7 2 2. - 0 - -0.0317365005612373 - 0.1823897957801819 - -0.0208370704203844 - <_> - - <_> - - - - <_> - 0 0 18 8 -1. - <_> - 9 0 9 4 2. - <_> - 0 4 9 4 2. - 0 - 0.1016217023134232 - 0.0152149600908160 - -0.2873800098896027 - <_> - - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 5 10 1 1 2. - <_> - 6 11 1 1 2. - 0 - 1.6911029815673828e-003 - -0.0272036101669073 - 0.1536138951778412 - <_> - - <_> - - - - <_> - 9 8 2 3 -1. - <_> - 8 9 2 1 3. - 1 - -0.0550902001559734 - 0.4018200933933258 - -2.6924409903585911e-003 - <_> - - <_> - - - - <_> - 9 8 3 2 -1. - <_> - 10 9 1 2 3. - 1 - -6.6355741582810879e-003 - -0.1039951965212822 - 0.0399309694766998 - <_> - - <_> - - - - <_> - 9 0 6 9 -1. - <_> - 9 0 3 9 2. - 1 - -0.2823461890220642 - -0.6573529839515686 - 2.2085180971771479e-003 - <_> - - <_> - - - - <_> - 9 0 9 6 -1. - <_> - 9 0 9 3 2. - 1 - 0.3560608029365540 - 8.8273994624614716e-003 - -0.4184055030345917 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 9 4 2 2 2. - 0 - 2.8794088866561651e-003 - -0.0477025806903839 - 0.0486192405223846 - <_> - - <_> - - - - <_> - 0 2 18 1 -1. - <_> - 9 2 9 1 2. - 0 - -0.0345713905990124 - -0.1654108017683029 - 0.0324508398771286 - <_> - - <_> - - - - <_> - 9 10 6 3 -1. - <_> - 11 11 2 1 9. - 0 - 0.0700211822986603 - 7.1347500197589397e-003 - -0.5142191052436829 - <_> - - <_> - - - - <_> - 0 3 8 4 -1. - <_> - 0 5 8 2 2. - 0 - -0.0253863092511892 - -0.1287622004747391 - 0.0291819702833891 - <_> - - <_> - - - - <_> - 14 3 3 8 -1. - <_> - 14 5 3 4 2. - 0 - 7.7927471138536930e-003 - 0.0385298691689968 - -0.0494838394224644 - <_> - - <_> - - - - <_> - 5 0 2 1 -1. - <_> - 5 0 1 1 2. - 1 - 0.0142815597355366 - 5.6447219103574753e-003 - -0.7038524746894836 - <_> - - <_> - - - - <_> - 13 1 2 2 -1. - <_> - 14 1 1 1 2. - <_> - 13 2 1 1 2. - 0 - 2.3879110813140869e-005 - -0.0420181788504124 - 0.0442302897572517 - <_> - - <_> - - - - <_> - 3 1 2 2 -1. - <_> - 3 1 1 1 2. - <_> - 4 2 1 1 2. - 0 - -3.5789560060948133e-003 - 0.4614329040050507 - -9.7652971744537354e-003 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 0 2 1 2. - 0 - -6.9024448748677969e-005 - 0.0501331388950348 - -0.0589645393192768 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 2 0 2 1 2. - 0 - -3.0192299745976925e-003 - -0.1949381977319717 - 0.0247106906026602 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 0 1 1 2. - 1 - -2.5278010871261358e-003 - 0.0835050269961357 - -0.0252687390893698 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 1 0 1 1 2. - 1 - 1.7980269622057676e-003 - -0.0484824590384960 - 0.0943117365241051 - <_> - - <_> - - - - <_> - 16 0 1 8 -1. - <_> - 16 2 1 4 2. - 0 - -0.0226906202733517 - -0.2997882068157196 - 2.2890099789947271e-003 - <_> - - <_> - - - - <_> - 1 0 1 8 -1. - <_> - 1 2 1 4 2. - 0 - 1.4375130413100123e-003 - -0.0624394081532955 - 0.0752900913357735 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 8.2696974277496338e-003 - -0.0303539503365755 - 0.0880893915891647 - <_> - - <_> - - - - <_> - 2 0 12 15 -1. - <_> - 5 0 6 15 2. - 0 - -0.1505593955516815 - 0.1941386014223099 - -0.0227722208946943 - <_> - - <_> - - - - <_> - 11 2 6 4 -1. - <_> - 11 2 3 4 2. - 0 - 1.7811149591580033e-003 - -0.0603102482855320 - 0.0200738906860352 - <_> - - <_> - - - - <_> - 4 2 8 6 -1. - <_> - 4 2 4 3 2. - <_> - 8 5 4 3 2. - 0 - 4.7450647689402103e-003 - -0.0518799908459187 - 0.0740923434495926 - <_> - - <_> - - - - <_> - 10 1 1 4 -1. - <_> - 9 2 1 2 2. - 1 - -3.9645358920097351e-003 - -0.1222385987639427 - 0.0184847600758076 - <_> - - <_> - - - - <_> - 9 0 7 6 -1. - <_> - 7 2 7 2 3. - 1 - 0.2112957984209061 - 6.9678751751780510e-003 - -0.6340553164482117 - <_> - - <_> - - - - <_> - 10 6 8 2 -1. - <_> - 10 6 4 2 2. - 0 - 0.0679322928190231 - 0.0112383002415299 - -0.2989783883094788 - <_> - - <_> - - - - <_> - 0 0 17 9 -1. - <_> - 0 3 17 3 3. - 0 - 0.3546049892902374 - 0.0108207296580076 - -0.4018031060695648 - <_> - - <_> - - - - <_> - 7 0 5 6 -1. - <_> - 7 3 5 3 2. - 0 - 0.0678805708885193 - -9.0837832540273666e-003 - 0.2855814099311829 - <_> - - <_> - - - - <_> - 5 1 8 4 -1. - <_> - 5 1 4 2 2. - <_> - 9 3 4 2 2. - 0 - 0.0231790095567703 - 0.0120336599647999 - -0.3428303003311157 - <_> - - <_> - - - - <_> - 9 0 3 9 -1. - <_> - 9 3 3 3 3. - 0 - -0.0250181294977665 - 0.1685106009244919 - -0.0148548297584057 - <_> - - <_> - - - - <_> - 9 2 4 2 -1. - <_> - 9 2 4 1 2. - 1 - 0.0108465002849698 - -0.0498660691082478 - 0.0913302898406982 - <_> - - <_> - - - - <_> - 4 2 11 8 -1. - <_> - 4 4 11 4 2. - 0 - 0.0674327909946442 - -0.0671769231557846 - 0.0522870086133480 - <_> - - <_> - - - - <_> - 1 4 16 6 -1. - <_> - 1 6 16 2 3. - 0 - -0.1040098965167999 - 0.2126909047365189 - -0.0196353103965521 - <_> - - <_> - - - - <_> - 10 6 8 2 -1. - <_> - 10 6 4 2 2. - 0 - -0.0195524599403143 - -0.0859493836760521 - 0.0108785601332784 - <_> - - <_> - - - - <_> - 0 6 8 2 -1. - <_> - 4 6 4 2 2. - 0 - -1.0041260393336415e-003 - -0.0881467536091805 - 0.0533496886491776 - <_> - - <_> - - - - <_> - 13 8 4 2 -1. - <_> - 15 8 2 1 2. - <_> - 13 9 2 1 2. - 0 - 3.1779510900378227e-003 - -0.0257080793380737 - 0.1262018978595734 - <_> - - <_> - - - - <_> - 0 7 3 3 -1. - <_> - 0 8 3 1 3. - 0 - -5.1974221132695675e-003 - -0.1490999013185501 - 0.0257342308759689 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 16 6 1 1 3. - 1 - -8.4385536611080170e-003 - 0.1762731969356537 - -0.0173361804336309 - <_> - - <_> - - - - <_> - 1 5 3 1 -1. - <_> - 2 6 1 1 3. - 1 - 6.3723679631948471e-003 - -0.0288299303501844 - 0.1601462066173554 - <_> - - <_> - - - - <_> - 17 6 1 2 -1. - <_> - 17 7 1 1 2. - 0 - 6.4913480309769511e-004 - 0.0250607505440712 - -0.0684819966554642 - <_> - - <_> - - - - <_> - 0 6 1 2 -1. - <_> - 0 7 1 1 2. - 0 - -2.3739310563541949e-005 - 0.0597767196595669 - -0.0690794587135315 - <_> - - <_> - - - - <_> - 17 1 1 12 -1. - <_> - 17 7 1 6 2. - 0 - 0.0219023097306490 - 0.0158000495284796 - -0.2590233981609345 - <_> - - <_> - - - - <_> - 0 1 1 12 -1. - <_> - 0 7 1 6 2. - 0 - -0.0232256501913071 - -0.1524018943309784 - 0.0343589708209038 - <_> - - <_> - - - - <_> - 0 6 18 4 -1. - <_> - 0 7 18 2 2. - 0 - 0.0173969995230436 - -0.0445144101977348 - 0.0861461684107780 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - -4.3821102008223534e-003 - -0.0655946731567383 - 0.0700312927365303 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 6 8 6 1 2. - 0 - -0.0522718392312527 - -0.8459323048591614 - 4.0736538358032703e-003 - <_> - - <_> - - - - <_> - 0 9 3 1 -1. - <_> - 1 9 1 1 3. - 0 - -2.6945039280690253e-005 - 0.0711033865809441 - -0.0569700710475445 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 16 10 2 1 2. - 0 - 7.3246699757874012e-003 - 0.0101481601595879 - -0.1649581938982010 - <_> - - <_> - - - - <_> - 3 10 6 3 -1. - <_> - 5 11 2 1 9. - 0 - 0.0796489417552948 - 4.9309800378978252e-003 - -0.7393599152565002 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - 0.0256457198411226 - -9.9361119791865349e-003 - 0.1957349032163620 - <_> - - <_> - - - - <_> - 2 5 14 2 -1. - <_> - 2 5 7 1 2. - <_> - 9 6 7 1 2. - 0 - -0.0215177107602358 - -0.3739817142486572 - 0.0105646802112460 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - 3.1084879301488400e-003 - -0.0232892800122499 - 0.0444528982043266 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - -0.0203057900071144 - 0.1845038980245590 - -0.0220416504889727 - <_> - - <_> - - - - <_> - 14 4 3 2 -1. - <_> - 14 5 3 1 2. - 0 - -2.3073209740687162e-004 - -0.0425330288708210 - 0.0405342392623425 - <_> - - <_> - - - - <_> - 1 4 3 2 -1. - <_> - 1 5 3 1 2. - 0 - 5.1654567942023277e-003 - 0.0195509009063244 - -0.2752223014831543 - <_> - - <_> - - - - <_> - 15 3 3 11 -1. - <_> - 16 3 1 11 3. - 0 - -0.0133738899603486 - -0.1067676991224289 - 0.0157130900770426 - <_> - - <_> - - - - <_> - 0 3 3 11 -1. - <_> - 1 3 1 11 3. - 0 - -0.0305575095117092 - -0.4903602004051209 - 8.4824627265334129e-003 - <_> - - <_> - - - - <_> - 14 5 2 2 -1. - <_> - 15 5 1 1 2. - <_> - 14 6 1 1 2. - 0 - -4.4938637875020504e-003 - 0.2458741962909699 - -7.3765181005001068e-003 - <_> - - <_> - - - - <_> - 2 5 2 2 -1. - <_> - 2 5 1 1 2. - <_> - 3 6 1 1 2. - 0 - 1.5328789595514536e-003 - -0.0219983607530594 - 0.1710575073957443 - <_> - - <_> - - - - <_> - 15 5 3 4 -1. - <_> - 15 6 3 2 2. - 0 - 0.0284645706415176 - -4.4271750375628471e-003 - 0.3786450028419495 - <_> - - <_> - - - - <_> - 0 5 3 4 -1. - <_> - 0 6 3 2 2. - 0 - -3.6278439220041037e-003 - -0.1194301024079323 - 0.0363873392343521 - <_> - - <_> - - - - <_> - 17 8 1 3 -1. - <_> - 17 9 1 1 3. - 0 - 6.5880590118467808e-003 - 4.7421031631529331e-003 - -0.2304062992334366 - <_> - - <_> - - - - <_> - 0 8 1 3 -1. - <_> - 0 9 1 1 3. - 0 - -1.7257609870284796e-003 - -0.1512462049722672 - 0.0245305094867945 - <_> - - <_> - - - - <_> - 16 6 2 4 -1. - <_> - 17 6 1 2 2. - <_> - 16 8 1 2 2. - 0 - -4.0079229511320591e-003 - 0.1179575026035309 - -0.0284553095698357 - <_> - - <_> - - - - <_> - 0 6 2 4 -1. - <_> - 0 6 1 2 2. - <_> - 1 8 1 2 2. - 0 - 6.0597620904445648e-003 - -0.0159428808838129 - 0.2634926140308380 - <_> - - <_> - - - - <_> - 0 6 18 6 -1. - <_> - 9 6 9 3 2. - <_> - 0 9 9 3 2. - 0 - 0.1020618006587029 - 0.0228738095611334 - -0.1756930947303772 - <_> - - <_> - - - - <_> - 5 1 6 2 -1. - <_> - 5 1 3 1 2. - <_> - 8 2 3 1 2. - 0 - -5.3605949506163597e-003 - -0.2843278944492340 - 0.0135392798110843 - <_> - - <_> - - - - <_> - 10 1 2 2 -1. - <_> - 11 1 1 1 2. - <_> - 10 2 1 1 2. - 0 - 1.3634009519591928e-003 - 0.0150163397192955 - -0.2169246971607208 - <_> - - <_> - - - - <_> - 6 1 2 2 -1. - <_> - 6 1 1 1 2. - <_> - 7 2 1 1 2. - 0 - -5.1867151341866702e-005 - 0.0715956836938858 - -0.0591941215097904 - <_> - - <_> - - - - <_> - 10 1 6 3 -1. - <_> - 10 1 3 3 2. - 0 - 5.5599510669708252e-003 - -0.0504433810710907 - 0.0246312096714973 - <_> - - <_> - - - - <_> - 2 1 6 3 -1. - <_> - 5 1 3 3 2. - 0 - -8.1721879541873932e-003 - 0.1485853940248489 - -0.0320550985634327 - <_> - - <_> - - - - <_> - 12 0 6 3 -1. - <_> - 14 0 2 3 3. - 0 - -0.0511872991919518 - -0.2539905905723572 - 6.8093240261077881e-003 - <_> - - <_> - - - - <_> - 0 0 6 3 -1. - <_> - 2 0 2 3 3. - 0 - 0.0402427017688751 - 7.3603428900241852e-003 - -0.5389612913131714 - <_> - - <_> - - - - <_> - 13 8 4 2 -1. - <_> - 15 8 2 1 2. - <_> - 13 9 2 1 2. - 0 - -8.6354929953813553e-003 - 0.2015924006700516 - -0.0168281905353069 - <_> - - <_> - - - - <_> - 1 8 4 2 -1. - <_> - 1 8 2 1 2. - <_> - 3 9 2 1 2. - 0 - 6.2959326896816492e-005 - -0.0544128902256489 - 0.0732978805899620 - -1.1236120462417603 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 6 1 6 -1. - <_> - 7 8 1 2 3. - 1 - -0.0465844385325909 - 0.3975890874862671 - -0.1048778966069222 - <_> - - <_> - - - - <_> - 10 0 6 6 -1. - <_> - 12 2 2 2 9. - 0 - -0.0135460803285241 - 0.1016070991754532 - -0.0605821199715137 - <_> - - <_> - - - - <_> - 5 0 4 8 -1. - <_> - 7 0 2 8 2. - 0 - 0.0212406199425459 - -0.2152090966701508 - 0.0991928800940514 - <_> - - <_> - - - - <_> - 12 7 1 3 -1. - <_> - 12 8 1 1 3. - 0 - -6.8675312213599682e-003 - 0.3455908000469208 - -0.0272973105311394 - <_> - - <_> - - - - <_> - 4 7 1 3 -1. - <_> - 4 8 1 1 3. - 0 - 1.8874719971790910e-003 - -0.0626463666558266 - 0.2202863991260529 - <_> - - <_> - - - - <_> - 15 5 1 3 -1. - <_> - 14 6 1 1 3. - 1 - -9.6648931503295898e-003 - 0.1264203935861588 - -2.9440899379551411e-003 - <_> - - <_> - - - - <_> - 3 5 3 1 -1. - <_> - 4 6 1 1 3. - 1 - 5.7599171996116638e-003 - -0.0645451918244362 - 0.2116688936948776 - <_> - - <_> - - - - <_> - 0 9 18 4 -1. - <_> - 9 9 9 2 2. - <_> - 0 11 9 2 2. - 0 - 0.0426046885550022 - 0.0816654786467552 - -0.2211515009403229 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 1.1809020070359111e-003 - 0.0537825897336006 - -0.2183254957199097 - <_> - - <_> - - - - <_> - 8 0 7 4 -1. - <_> - 8 2 7 2 2. - 0 - 0.0258668307214975 - -3.4579040948301554e-003 - -0.2280915975570679 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 0 6 2 2. - <_> - 9 2 6 2 2. - 0 - -0.0130240898579359 - -0.2336263954639435 - 0.0455196797847748 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -2.6178720872849226e-005 - 0.0630585104227066 - -0.0357771515846252 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 0 2 2 2. - <_> - 9 2 2 2 2. - 0 - 3.8649858906865120e-003 - 0.0413089096546173 - -0.2126125991344452 - <_> - - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 9 2 1 2. - 0 - -4.3429462239146233e-003 - 0.1096725985407829 - -0.0673774331808090 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 9 2 1 2. - 0 - 3.2463369425386190e-003 - -0.0599126406013966 - 0.2478830069303513 - <_> - - <_> - - - - <_> - 11 5 4 10 -1. - <_> - 11 5 2 10 2. - 0 - -0.0446722097694874 - -0.1378764957189560 - 7.5812488794326782e-003 - <_> - - <_> - - - - <_> - 3 5 4 10 -1. - <_> - 5 5 2 10 2. - 0 - -0.0596978403627872 - -0.3720127940177918 - 0.0243327803909779 - <_> - - <_> - - - - <_> - 1 10 16 3 -1. - <_> - 5 10 8 3 2. - 0 - -9.9666267633438110e-003 - 0.0740873217582703 - -0.1286740005016327 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - 1.1090090265497565e-003 - -0.0450637899339199 - 0.1985294967889786 - <_> - - <_> - - - - <_> - 0 5 18 8 -1. - <_> - 9 5 9 4 2. - <_> - 0 9 9 4 2. - 0 - 0.1913764029741287 - 0.0166084691882133 - -0.4066238999366760 - <_> - - <_> - - - - <_> - 0 3 3 9 -1. - <_> - 0 6 3 3 3. - 0 - 0.0291308406740427 - 0.0361067317426205 - -0.2113531976938248 - <_> - - <_> - - - - <_> - 9 3 8 2 -1. - <_> - 9 4 8 1 2. - 0 - -3.9123510941863060e-003 - -0.1371506005525589 - 0.0311542004346848 - <_> - - <_> - - - - <_> - 0 3 18 2 -1. - <_> - 0 3 9 1 2. - <_> - 9 4 9 1 2. - 0 - 0.0102061899378896 - 0.0290562491863966 - -0.2503226995468140 - <_> - - <_> - - - - <_> - 6 11 8 4 -1. - <_> - 8 11 4 4 2. - 0 - -0.0544211715459824 - -0.3678776025772095 - 4.9542388878762722e-003 - <_> - - <_> - - - - <_> - 2 4 3 2 -1. - <_> - 3 5 1 2 3. - 1 - 0.0105043696239591 - -0.0391194783151150 - 0.1786668002605438 - <_> - - <_> - - - - <_> - 14 4 4 6 -1. - <_> - 14 7 4 3 2. - 0 - -0.0389032289385796 - -0.1115652024745941 - 0.0494851097464561 - <_> - - <_> - - - - <_> - 9 0 9 3 -1. - <_> - 8 1 9 1 3. - 1 - -3.0581050086766481e-003 - 0.1185448989272118 - -0.0652535036206245 - <_> - - <_> - - - - <_> - 6 11 8 4 -1. - <_> - 8 11 4 4 2. - 0 - 0.0120711103081703 - 0.0169083792716265 - -0.0460892505943775 - <_> - - <_> - - - - <_> - 4 11 8 4 -1. - <_> - 6 11 4 4 2. - 0 - -0.0361215807497501 - -0.2858510911464691 - 0.0273920707404613 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - -7.0450740167871118e-005 - 0.0811922177672386 - -0.0853394791483879 - <_> - - <_> - - - - <_> - 4 4 6 2 -1. - <_> - 6 6 2 2 3. - 1 - -0.0614753998816013 - -0.3050264120101929 - 0.0216726101934910 - <_> - - <_> - - - - <_> - 9 3 6 4 -1. - <_> - 11 5 2 4 3. - 1 - 0.1238436028361321 - -8.6616817861795425e-003 - 0.0958835631608963 - <_> - - <_> - - - - <_> - 9 3 4 6 -1. - <_> - 7 5 4 2 3. - 1 - -0.1372978985309601 - 0.3248777985572815 - -0.0273847002536058 - <_> - - <_> - - - - <_> - 3 1 15 14 -1. - <_> - 3 8 15 7 2. - 0 - -0.3766013085842133 - 0.0695123001933098 - -0.0875100269913673 - <_> - - <_> - - - - <_> - 0 1 4 14 -1. - <_> - 0 8 4 7 2. - 0 - -0.1042848974466324 - -0.1743391007184982 - 0.0465723089873791 - <_> - - <_> - - - - <_> - 12 0 2 2 -1. - <_> - 12 0 1 2 2. - 1 - 0.0153772495687008 - 7.2437077760696411e-003 - -0.3706468939781189 - <_> - - <_> - - - - <_> - 6 0 2 2 -1. - <_> - 6 0 2 1 2. - 1 - 0.0103409802541137 - 0.0195991508662701 - -0.3505811989307404 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - 2.6178720872849226e-005 - -0.0371437408030033 - 0.0463190414011478 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -5.1104918384226039e-005 - 0.0750196501612663 - -0.0955687314271927 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 1.2594480067491531e-003 - -0.0361403413116932 - 0.1402405053377152 - <_> - - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 0 0 2 3 2. - <_> - 2 3 2 3 2. - 0 - -4.4775051064789295e-003 - 0.1198429986834526 - -0.0559747815132141 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -2.5892409030348063e-003 - 0.2098380029201508 - -0.0216069091111422 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - 2.8334530725260265e-005 - -0.0646458193659782 - 0.1100763976573944 - <_> - - <_> - - - - <_> - 14 6 4 5 -1. - <_> - 14 6 2 5 2. - 1 - 0.0493306517601013 - -0.0343082509934902 - 0.1055921986699104 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 8 2 1 2. - 0 - -3.1046869116835296e-004 - 0.0380286201834679 - -0.2067811042070389 - <_> - - <_> - - - - <_> - 1 8 16 3 -1. - <_> - 1 9 16 1 3. - 0 - 0.0112909199669957 - -0.0430234186351299 - 0.1697725951671600 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 1 11 16 1 2. - 0 - -1.9364829640835524e-003 - -0.1082670986652374 - 0.0643948465585709 - <_> - - <_> - - - - <_> - 14 6 4 5 -1. - <_> - 14 6 2 5 2. - 1 - 0.1330419927835465 - -0.0107648801058531 - 0.3024955093860626 - <_> - - <_> - - - - <_> - 4 6 5 4 -1. - <_> - 4 6 5 2 2. - 1 - -0.1217804998159409 - -0.4010885059833527 - 0.0199013296514750 - <_> - - <_> - - - - <_> - 15 1 1 2 -1. - <_> - 15 2 1 1 2. - 0 - -4.8507350584259257e-005 - 0.0578306503593922 - -0.0554163902997971 - <_> - - <_> - - - - <_> - 2 1 10 2 -1. - <_> - 2 1 10 1 2. - 1 - 8.1427283585071564e-003 - -0.1303842961788178 - 0.0504461117088795 - <_> - - <_> - - - - <_> - 10 0 6 9 -1. - <_> - 12 2 2 9 3. - 1 - 0.2504931092262268 - 4.9552097916603088e-003 - -0.8452144265174866 - <_> - - <_> - - - - <_> - 4 9 3 3 -1. - <_> - 4 10 3 1 3. - 0 - 2.9000479262322187e-003 - -0.0486341603100300 - 0.1397586017847061 - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 10 1 3 2 2. - 0 - -9.5292963087558746e-003 - -0.4822708964347839 - 8.9182211086153984e-003 - <_> - - <_> - - - - <_> - 1 10 2 1 -1. - <_> - 1 10 1 1 2. - 1 - -1.2608580291271210e-003 - -0.1439639925956726 - 0.0446254611015320 - <_> - - <_> - - - - <_> - 15 11 3 1 -1. - <_> - 16 12 1 1 3. - 1 - 6.9864251418039203e-004 - -0.0534688793122768 - 0.0444802902638912 - <_> - - <_> - - - - <_> - 3 11 1 3 -1. - <_> - 2 12 1 1 3. - 1 - 5.0955888582393527e-005 - -0.0910912230610847 - 0.0615591295063496 - <_> - - <_> - - - - <_> - 10 0 6 9 -1. - <_> - 12 2 2 9 3. - 1 - -0.0422890111804008 - -0.1452918946743012 - 0.0229476597160101 - <_> - - <_> - - - - <_> - 8 0 9 6 -1. - <_> - 6 2 9 2 3. - 1 - 0.0839773416519165 - 0.0371137298643589 - -0.1620655953884125 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 10 10 3 1 2. - <_> - 7 11 3 1 2. - 0 - 9.1143082827329636e-003 - -8.4407972171902657e-003 - 0.1036289036273956 - <_> - - <_> - - - - <_> - 7 7 2 2 -1. - <_> - 7 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - 4.6319790271809325e-005 - -0.0675051584839821 - 0.0853116363286972 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 7 5 4 2 9. - 0 - 0.5213608741760254 - -0.0144045604392886 - 0.4496696889400482 - <_> - - <_> - - - - <_> - 6 3 1 6 -1. - <_> - 6 5 1 2 3. - 0 - 0.0158583596348763 - 0.0245071090757847 - -0.2806138098239899 - <_> - - <_> - - - - <_> - 16 0 1 3 -1. - <_> - 16 1 1 1 3. - 0 - 9.0295937843620777e-004 - -0.0197774693369865 - 0.0582239516079426 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 4 1 3 1 2. - 0 - -1.6763530438765883e-003 - -0.1580125987529755 - 0.0340122990310192 - <_> - - <_> - - - - <_> - 16 0 1 3 -1. - <_> - 16 1 1 1 3. - 0 - -2.4684870368218981e-005 - 0.0519807413220406 - -0.0352598205208778 - <_> - - <_> - - - - <_> - 1 0 1 3 -1. - <_> - 1 1 1 1 3. - 0 - 2.3879110813140869e-005 - -0.0777395367622375 - 0.0757706016302109 - <_> - - <_> - - - - <_> - 10 3 8 2 -1. - <_> - 10 3 4 2 2. - 0 - 5.9450380504131317e-003 - -0.1076762974262238 - 0.0473425313830376 - <_> - - <_> - - - - <_> - 0 3 8 2 -1. - <_> - 4 3 4 2 2. - 0 - -0.0338867083191872 - 0.2539583146572113 - -0.0263967607170343 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 7 0 2 1 2. - 0 - 5.5312961339950562e-003 - -0.0277216397225857 - 0.2323354035615921 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 0 0 9 1 2. - <_> - 9 1 9 1 2. - 0 - -6.0472032055258751e-003 - -0.1738715022802353 - 0.0345614999532700 - <_> - - <_> - - - - <_> - 12 3 2 12 -1. - <_> - 12 9 2 6 2. - 0 - -0.0319555215537548 - -0.0191999804228544 - 0.0308420602232218 - <_> - - <_> - - - - <_> - 4 3 2 12 -1. - <_> - 4 9 2 6 2. - 0 - 0.0907370969653130 - 7.7871060930192471e-003 - -0.7586475014686585 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 10 10 3 1 2. - <_> - 7 11 3 1 2. - 0 - -0.0124458596110344 - 0.1437095999717712 - -0.0104776499792933 - <_> - - <_> - - - - <_> - 6 4 7 2 -1. - <_> - 6 4 7 1 2. - 1 - 0.0113015202805400 - -0.1322194039821625 - 0.0409673303365707 - <_> - - <_> - - - - <_> - 13 13 4 1 -1. - <_> - 13 13 2 1 2. - 0 - -0.0105583202093840 - -0.3396332859992981 - 0.0126309199258685 - <_> - - <_> - - - - <_> - 4 9 6 2 -1. - <_> - 4 9 3 1 2. - <_> - 7 10 3 1 2. - 0 - 4.6060150489211082e-003 - -0.0353191308677197 - 0.1581331938505173 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 7 9 4 1 2. - 0 - -0.0306612607091665 - -0.5879328250885010 - 9.6826143562793732e-003 - <_> - - <_> - - - - <_> - 1 13 4 1 -1. - <_> - 3 13 2 1 2. - 0 - -6.2674311921000481e-003 - -0.1976262032985687 - 0.0269288308918476 - <_> - - <_> - - - - <_> - 12 10 1 3 -1. - <_> - 12 11 1 1 3. - 0 - 1.2989880051463842e-003 - -0.0291242301464081 - 0.0762825235724449 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 6 0 3 1 2. - <_> - 9 1 3 1 2. - 0 - 4.8161852173507214e-003 - 0.0180221293121576 - -0.2925927042961121 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 2 2. - 1 - -4.4622411951422691e-003 - 0.0485544018447399 - -0.0468474701046944 - <_> - - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 6 2 1 1 2. - <_> - 7 3 1 1 2. - 0 - -4.9135680455947295e-005 - 0.0812152177095413 - -0.0633795633912086 - <_> - - <_> - - - - <_> - 8 0 3 4 -1. - <_> - 8 1 3 2 2. - 0 - 5.0573139451444149e-003 - 0.0140971401706338 - -0.2068593055009842 - <_> - - <_> - - - - <_> - 6 7 1 3 -1. - <_> - 6 8 1 1 3. - 0 - 1.3823669869452715e-003 - -0.0426558181643486 - 0.1154166981577873 - <_> - - <_> - - - - <_> - 4 8 10 4 -1. - <_> - 9 8 5 2 2. - <_> - 4 10 5 2 2. - 0 - -0.0401844494044781 - -0.2984366118907929 - 0.0174637306481600 - <_> - - <_> - - - - <_> - 0 9 18 2 -1. - <_> - 0 10 18 1 2. - 0 - 7.0384680293500423e-003 - -0.0521952509880066 - 0.0946906581521034 - <_> - - <_> - - - - <_> - 9 9 1 2 -1. - <_> - 9 10 1 1 2. - 0 - -5.6935990869533271e-005 - 0.0507361218333244 - -0.1222994998097420 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 5.9834190324181691e-005 - -0.0615346282720566 - 0.0821938663721085 - <_> - - <_> - - - - <_> - 3 5 12 6 -1. - <_> - 7 7 4 2 9. - 0 - 0.0239803306758404 - 0.0899486094713211 - -0.0531572587788105 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 6 6 6 2 2. - 0 - 0.0198573190718889 - -0.0290171504020691 - 0.1902642995119095 - <_> - - <_> - - - - <_> - 9 0 7 8 -1. - <_> - 7 2 7 4 2. - 1 - -0.1887260973453522 - -0.1891600936651230 - 9.1472929343581200e-003 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 6 7 6 1 2. - 0 - -5.3056180477142334e-003 - 0.0595022700726986 - -0.1106636002659798 - <_> - - <_> - - - - <_> - 12 0 3 3 -1. - <_> - 13 1 1 3 3. - 1 - 0.0179616697132587 - 6.9341547787189484e-003 - -0.2935161888599396 - <_> - - <_> - - - - <_> - 6 0 3 3 -1. - <_> - 5 1 3 1 3. - 1 - 4.4897631742060184e-003 - 0.0345449112355709 - -0.1438962072134018 - <_> - - <_> - - - - <_> - 5 1 8 6 -1. - <_> - 5 4 8 3 2. - 0 - -0.1378097981214523 - 0.6665669083595276 - -7.6799020171165466e-003 - <_> - - <_> - - - - <_> - 9 0 7 3 -1. - <_> - 8 1 7 1 3. - 1 - 0.0250661708414555 - 0.0270246397703886 - -0.1813068985939026 - <_> - - <_> - - - - <_> - 14 5 4 4 -1. - <_> - 14 7 4 2 2. - 0 - -6.6011329181492329e-003 - -0.0471079796552658 - 0.0535648204386234 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 0 13 18 2 2. - 0 - 0.0446340888738632 - -0.0582992509007454 - 0.0854041278362274 - <_> - - <_> - - - - <_> - 1 13 16 2 -1. - <_> - 1 14 16 1 2. - 0 - -0.0209591109305620 - 0.1715489029884338 - -0.0302498191595078 - <_> - - <_> - - - - <_> - 2 0 6 10 -1. - <_> - 2 0 3 5 2. - <_> - 5 5 3 5 2. - 0 - 0.0486911907792091 - 0.0214052200317383 - -0.2313596010208130 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 13 4 4 1 3. - 1 - 0.0334771387279034 - -0.0175353996455669 - 0.2070588022470474 - <_> - - <_> - - - - <_> - 4 3 3 3 -1. - <_> - 5 4 1 3 3. - 1 - -0.0157824493944645 - 0.2044699937105179 - -0.0294545702636242 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - 0.0216255001723766 - -0.0121418898925185 - 0.2520450055599213 - <_> - - <_> - - - - <_> - 7 7 4 1 -1. - <_> - 8 8 2 1 2. - 1 - -5.1940139383077621e-003 - -0.1221897974610329 - 0.0451432801783085 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - -0.0313102789223194 - 0.2868792116641998 - -8.2902582362294197e-003 - <_> - - <_> - - - - <_> - 4 0 2 10 -1. - <_> - 4 5 2 5 2. - 0 - 0.0155427400022745 - 0.0274001006036997 - -0.2035340964794159 - <_> - - <_> - - - - <_> - 16 2 2 3 -1. - <_> - 15 3 2 1 3. - 1 - -5.2836928516626358e-003 - 0.0541945882141590 - -0.0240161493420601 - <_> - - <_> - - - - <_> - 2 2 3 2 -1. - <_> - 3 3 1 2 3. - 1 - -6.4056441187858582e-003 - 0.1331644058227539 - -0.0465831793844700 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 2 1 2 3. - 1 - -4.7195679508149624e-003 - -0.1046644002199173 - 0.0291981901973486 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - -0.0122418403625488 - -0.3540002107620239 - 0.0156168602406979 - <_> - - <_> - - - - <_> - 10 0 2 8 -1. - <_> - 8 2 2 4 2. - 1 - -3.4770739730447531e-003 - 0.0471543706953526 - -0.0372542105615139 - <_> - - <_> - - - - <_> - 0 0 15 13 -1. - <_> - 5 0 5 13 3. - 0 - 0.1831195950508118 - -0.0496848896145821 - 0.1203569024801254 - <_> - - <_> - - - - <_> - 5 6 12 9 -1. - <_> - 8 6 6 9 2. - 0 - -0.1365886926651001 - -0.2270102053880692 - 8.3362739533185959e-003 - <_> - - <_> - - - - <_> - 1 6 12 9 -1. - <_> - 4 6 6 9 2. - 0 - -0.0449327491223812 - 0.0796067118644714 - -0.0694770887494087 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - -1.0785179911181331e-003 - 0.1114739030599594 - -0.0302823390811682 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 3 2 1 2. - 0 - -8.6406682385131717e-004 - -0.1434711962938309 - 0.0378380417823792 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - 1.4584630262106657e-003 - -0.0272518005222082 - 0.1547423005104065 - <_> - - <_> - - - - <_> - 4 0 10 13 -1. - <_> - 9 0 5 13 2. - 0 - -0.1886447966098785 - 0.1795275956392288 - -0.0304256193339825 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 17 5 1 1 2. - <_> - 16 6 1 1 2. - 0 - -9.0535402705427259e-005 - 0.0379448309540749 - -0.0349269211292267 - <_> - - <_> - - - - <_> - 0 5 2 2 -1. - <_> - 0 5 1 1 2. - <_> - 1 6 1 1 2. - 0 - -9.8015682306140661e-004 - 0.1471706032752991 - -0.0350825004279613 - <_> - - <_> - - - - <_> - 0 5 18 2 -1. - <_> - 9 5 9 1 2. - <_> - 0 6 9 1 2. - 0 - -0.0126139298081398 - -0.2303957939147949 - 0.0261014793068171 - <_> - - <_> - - - - <_> - 0 13 2 2 -1. - <_> - 0 13 1 1 2. - <_> - 1 14 1 1 2. - 0 - 5.1353210437810048e-005 - -0.0731913670897484 - 0.0707238763570786 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 17 10 1 1 2. - <_> - 16 11 1 1 2. - 0 - -1.1017440119758248e-003 - 0.1000130027532578 - -0.0199915599077940 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 10 1 1 2. - <_> - 1 11 1 1 2. - 0 - 2.3879110813140869e-005 - -0.0730697214603424 - 0.0769988894462585 - <_> - - <_> - - - - <_> - 7 7 5 2 -1. - <_> - 7 8 5 1 2. - 0 - -8.5628936067223549e-003 - 0.0538700483739376 - -0.0811710432171822 - <_> - - <_> - - - - <_> - 8 3 9 3 -1. - <_> - 11 6 3 3 3. - 1 - 0.2404216974973679 - -0.0140129402279854 - 0.5036615729331970 - <_> - - <_> - - - - <_> - 15 1 3 2 -1. - <_> - 16 2 1 2 3. - 1 - 5.4416628554463387e-003 - 0.0254909899085760 - -0.1216735988855362 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - 0.0123843001201749 - 0.0125095099210739 - -0.3812165856361389 - <_> - - <_> - - - - <_> - 11 2 1 10 -1. - <_> - 11 2 1 5 2. - 1 - 0.0969182103872299 - -0.0125396698713303 - 0.1020260006189346 - <_> - - <_> - - - - <_> - 7 2 10 1 -1. - <_> - 7 2 5 1 2. - 1 - 0.1247290968894959 - 8.6807161569595337e-003 - -0.6021987199783325 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 14 0 1 1 2. - <_> - 13 1 1 1 2. - 0 - 5.1862320106010884e-005 - -0.0602015890181065 - 0.0648947283625603 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 1 2. - <_> - 4 1 1 1 2. - 0 - -5.2220391808077693e-005 - 0.0786095485091209 - -0.0601177997887135 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 14 0 1 1 2. - <_> - 13 1 1 1 2. - 0 - -2.3879110813140869e-005 - 0.0795721486210823 - -0.0547612011432648 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 1 2. - <_> - 4 1 1 1 2. - 0 - 2.4684870368218981e-005 - -0.0759956613183022 - 0.0895266085863113 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 8 9 2 1 9. - 0 - 0.0666326731443405 - 0.0116960098966956 - -0.3817116022109985 - <_> - - <_> - - - - <_> - 5 10 1 3 -1. - <_> - 5 11 1 1 3. - 0 - 2.0522400736808777e-003 - -0.0348950810730457 - 0.1341329067945480 - <_> - - <_> - - - - <_> - 17 7 1 6 -1. - <_> - 17 9 1 2 3. - 0 - -3.9307191036641598e-003 - -0.0662832930684090 - 0.0296108499169350 - <_> - - <_> - - - - <_> - 0 7 1 6 -1. - <_> - 0 9 1 2 3. - 0 - 0.0124414796009660 - 0.0159051697701216 - -0.3205035030841827 - <_> - - <_> - - - - <_> - 11 4 3 9 -1. - <_> - 12 7 1 3 9. - 0 - 0.0388024896383286 - -0.0152452699840069 - 0.0636296123266220 - <_> - - <_> - - - - <_> - 0 5 1 2 -1. - <_> - 0 6 1 1 2. - 0 - -6.3351631979458034e-005 - 0.0617886707186699 - -0.0717490166425705 - <_> - - <_> - - - - <_> - 7 10 8 2 -1. - <_> - 11 10 4 1 2. - <_> - 7 11 4 1 2. - 0 - -0.0240201298147440 - 0.2426270991563797 - -8.7506501004099846e-003 - <_> - - <_> - - - - <_> - 3 10 8 2 -1. - <_> - 3 10 4 1 2. - <_> - 7 11 4 1 2. - 0 - 6.7699998617172241e-003 - -0.0331209786236286 - 0.1440421938896179 - <_> - - <_> - - - - <_> - 10 5 3 6 -1. - <_> - 8 7 3 2 3. - 1 - -0.1688836067914963 - 0.3515259027481079 - -7.1931672282516956e-003 - <_> - - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 10 7 2 3 3. - 1 - -0.0675780624151230 - -0.2268631011247635 - 0.0256022103130817 - <_> - - <_> - - - - <_> - 12 11 1 2 -1. - <_> - 12 12 1 1 2. - 0 - -0.0113558797165751 - -0.6245070099830627 - 2.5642369873821735e-003 - <_> - - <_> - - - - <_> - 8 0 9 4 -1. - <_> - 7 1 9 2 2. - 1 - 0.0778802484273911 - 7.9159401357173920e-003 - -0.5605946183204651 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 6 2 1 2. - 0 - -2.9031829908490181e-003 - 0.0941536873579025 - -0.0496119000017643 - <_> - - <_> - - - - <_> - 4 1 10 6 -1. - <_> - 4 3 10 2 3. - 0 - -2.4730090517550707e-003 - 0.1085821017622948 - -0.0538938194513321 - <_> - - <_> - - - - <_> - 6 0 7 3 -1. - <_> - 6 1 7 1 3. - 0 - 3.8511860184371471e-003 - 0.0234237797558308 - -0.1309089958667755 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 7 1 3 1 2. - 0 - -2.2390179801732302e-003 - -0.2174324989318848 - 0.0244357194751501 - <_> - - <_> - - - - <_> - 15 2 3 2 -1. - <_> - 15 2 3 1 2. - 1 - 7.3695750907063484e-003 - -0.0247745793312788 - 0.1158865988254547 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 3 2 1 3 2. - 1 - -4.6323970891535282e-003 - 0.1298937946557999 - -0.0381496995687485 - <_> - - <_> - - - - <_> - 14 0 2 14 -1. - <_> - 14 0 1 14 2. - 0 - 0.0199226494878531 - 0.0158690698444843 - -0.1856296062469482 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 7 5 4 2 9. - 0 - 0.0167268496006727 - 0.1692277044057846 - -0.0321176983416080 - <_> - - <_> - - - - <_> - 12 3 1 2 -1. - <_> - 12 3 1 1 2. - 1 - -1.4559989795088768e-003 - 0.0727108269929886 - -0.0531024895608425 - <_> - - <_> - - - - <_> - 8 0 9 6 -1. - <_> - 8 0 9 3 2. - 1 - 0.1436896026134491 - -0.1099907010793686 - 0.0632115080952644 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 15 1 2 1 3. - 1 - -5.9681031852960587e-003 - 0.0853514671325684 - -0.0319969989359379 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 1 1 2 3. - 1 - 8.6067931260913610e-004 - -0.0677398666739464 - 0.0783357918262482 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 1 - 2.2462129127234221e-003 - 0.0421381592750549 - -0.1537978053092957 - <_> - - <_> - - - - <_> - 3 12 12 2 -1. - <_> - 3 13 12 1 2. - 0 - -0.0231840107589960 - 0.2355968058109283 - -0.0220876298844814 - <_> - - <_> - - - - <_> - 12 11 1 2 -1. - <_> - 12 12 1 1 2. - 0 - 8.3518847532104701e-005 - -0.0491336695849895 - 0.0353255607187748 - <_> - - <_> - - - - <_> - 4 9 2 2 -1. - <_> - 4 9 1 1 2. - <_> - 5 10 1 1 2. - 0 - -2.2380428854376078e-003 - 0.1797892004251480 - -0.0249581690877676 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 1 - -3.6487199831753969e-003 - -0.0488890595734119 - 0.0157207604497671 - <_> - - <_> - - - - <_> - 2 12 1 2 -1. - <_> - 2 12 1 1 2. - 1 - 2.4686430115252733e-003 - 0.0342142805457115 - -0.1369293928146362 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 11 2 1 2. - 1 - -0.0179013404995203 - 0.2017021030187607 - -5.8616171590983868e-003 - <_> - - <_> - - - - <_> - 4 10 1 4 -1. - <_> - 3 11 1 2 2. - 1 - 5.4372870363295078e-004 - -0.0817660167813301 - 0.0578251294791698 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 7.2202371666207910e-004 - 0.0245023705065250 - -0.0610220991075039 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - -3.6474859807640314e-003 - -0.1414107978343964 - 0.0364049896597862 - <_> - - <_> - - - - <_> - 11 5 2 1 -1. - <_> - 11 5 1 1 2. - 0 - 7.3206011438742280e-004 - -0.0436596609652042 - 0.0481952391564846 - <_> - - <_> - - - - <_> - 9 0 7 4 -1. - <_> - 8 1 7 2 2. - 1 - 0.0310860797762871 - 0.0367696695029736 - -0.1427676975727081 - <_> - - <_> - - - - <_> - 11 4 2 2 -1. - <_> - 11 4 1 2 2. - 0 - -6.9447411224246025e-003 - 0.3504368066787720 - -7.0687229745090008e-003 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 6 4 1 2 2. - 0 - 6.0204358305782080e-005 - -0.1218914985656738 - 0.0413166508078575 - <_> - - <_> - - - - <_> - 7 4 6 3 -1. - <_> - 9 5 2 1 9. - 0 - 0.0366099290549755 - 0.0199259296059608 - -0.0984719917178154 - <_> - - <_> - - - - <_> - 5 4 4 7 -1. - <_> - 6 4 2 7 2. - 0 - -0.0109604299068451 - 0.1281152069568634 - -0.0383881889283657 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 2 1 2 2. - 0 - -2.3295450955629349e-003 - 0.0707607492804527 - -0.0289194602519274 - <_> - - <_> - - - - <_> - 4 3 8 4 -1. - <_> - 4 3 8 2 2. - 1 - 0.0618558302521706 - -0.0475871004164219 - 0.0985863581299782 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 7 2 2 2. - 1 - -0.0234752092510462 - 0.0869645625352860 - -0.0122541096061468 - <_> - - <_> - - - - <_> - 7 8 3 2 -1. - <_> - 7 8 3 1 2. - 1 - -9.3669712077826262e-004 - 0.0812510773539543 - -0.0542218498885632 - <_> - - <_> - - - - <_> - 8 3 6 9 -1. - <_> - 10 6 2 3 9. - 0 - -0.1315189003944397 - -0.1539728045463562 - 0.0100725498050451 - <_> - - <_> - - - - <_> - 7 4 4 6 -1. - <_> - 7 4 2 3 2. - <_> - 9 7 2 3 2. - 0 - 8.8957380503416061e-003 - 0.0319623500108719 - -0.1361542940139771 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 16 1 1 1 2. - 0 - -8.2765902334358543e-005 - 0.0532807409763336 - -0.0550383105874062 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 2.0361710339784622e-003 - 0.0354836508631706 - -0.1206891983747482 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 2 1 2 2. - 0 - 2.8764940798282623e-003 - -0.0278693605214357 - 0.1044073998928070 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -9.9125062115490437e-004 - 0.0979837700724602 - -0.0593339614570141 - <_> - - <_> - - - - <_> - 13 3 4 10 -1. - <_> - 13 3 2 10 2. - 0 - 0.0300707891583443 - 0.0164330396801233 - -0.0933536067605019 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 1 2. - <_> - 4 1 1 1 2. - 0 - -5.2220391808077693e-005 - 0.0752206817269325 - -0.0577298216521740 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 0 3 18 3 2. - 0 - -0.1495593935251236 - -0.5717309117317200 - 7.4865440838038921e-003 - <_> - - <_> - - - - <_> - 4 3 2 6 -1. - <_> - 4 5 2 2 3. - 0 - -0.0101018501445651 - 0.1866167932748795 - -0.0265819206833839 - <_> - - <_> - - - - <_> - 14 3 1 6 -1. - <_> - 12 5 1 2 3. - 1 - -0.0235938206315041 - -0.3616523146629334 - 8.6832279339432716e-003 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 11 2 4 4 2. - 1 - -0.0562989898025990 - 0.3809157013893127 - -0.0125403897836804 - <_> - - <_> - - - - <_> - 12 4 2 2 -1. - <_> - 12 5 2 1 2. - 0 - 4.8374498874181882e-005 - -0.0372395589947701 - 0.0435059703886509 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - 7.3194838478229940e-005 - -0.0574802309274673 - 0.0801668912172318 - <_> - - <_> - - - - <_> - 14 0 2 15 -1. - <_> - 14 0 1 15 2. - 0 - -0.0226483792066574 - -0.0914651080965996 - 6.0311011038720608e-003 - <_> - - <_> - - - - <_> - 2 0 2 15 -1. - <_> - 3 0 1 15 2. - 0 - 7.5446818955242634e-003 - 0.0277416408061981 - -0.1718125045299530 - <_> - - <_> - - - - <_> - 11 1 6 6 -1. - <_> - 11 1 3 6 2. - 0 - -0.1057740971446037 - 0.5344142913818359 - -5.1590129733085632e-003 - <_> - - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 8 1 1 3. - 1 - 4.4444771483540535e-003 - 0.0343015491962433 - -0.1451483964920044 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 14 10 1 1 9. - 0 - 5.6781400926411152e-003 - -0.0430911704897881 - 0.1463333964347839 - <_> - - <_> - - - - <_> - 0 5 16 6 -1. - <_> - 4 5 8 6 2. - 0 - -0.1010930985212326 - -0.1747801005840302 - 0.0280684307217598 - <_> - - <_> - - - - <_> - 4 0 12 15 -1. - <_> - 7 0 6 15 2. - 0 - -0.0473572388291359 - 0.1670453995466232 - -0.0158186703920364 - <_> - - <_> - - - - <_> - 0 5 16 10 -1. - <_> - 8 5 8 10 2. - 0 - -0.5767403244972229 - -0.6224312782287598 - 7.9542007297277451e-003 - <_> - - <_> - - - - <_> - 9 9 1 3 -1. - <_> - 8 10 1 1 3. - 1 - 1.8059749854728580e-003 - -0.0164429899305105 - 0.0462612397968769 - <_> - - <_> - - - - <_> - 9 9 3 1 -1. - <_> - 10 10 1 1 3. - 1 - 0.0146800400689244 - 8.1173582002520561e-003 - -0.5566685795783997 - <_> - - <_> - - - - <_> - 13 0 5 10 -1. - <_> - 13 5 5 5 2. - 0 - -0.1689784973859787 - -0.3140147924423218 - 0.0125729897990823 - <_> - - <_> - - - - <_> - 2 6 14 3 -1. - <_> - 2 7 14 1 3. - 0 - -0.0193899292498827 - 0.1551029980182648 - -0.0279963091015816 - <_> - - <_> - - - - <_> - 6 6 6 3 -1. - <_> - 8 7 2 1 9. - 0 - -0.0264466702938080 - -0.3146206140518189 - 0.0173935592174530 - <_> - - <_> - - - - <_> - 0 6 3 4 -1. - <_> - 0 7 3 2 2. - 0 - -4.5732469297945499e-003 - -0.1358314007520676 - 0.0376659594476223 - <_> - - <_> - - - - <_> - 12 11 1 2 -1. - <_> - 12 12 1 1 2. - 0 - 7.8531084582209587e-003 - -3.6102959420531988e-003 - 0.1896488964557648 - <_> - - <_> - - - - <_> - 5 11 1 2 -1. - <_> - 5 12 1 1 2. - 0 - 2.7107769710710272e-005 - -0.0843098610639572 - 0.0545401610434055 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 14 10 1 1 9. - 0 - -0.0203770492225885 - 0.1165964007377625 - -0.0136959999799728 - <_> - - <_> - - - - <_> - 0 3 12 11 -1. - <_> - 3 3 6 11 2. - 0 - 0.1735146939754486 - -0.0126557499170303 - 0.3574686050415039 - <_> - - <_> - - - - <_> - 7 12 9 3 -1. - <_> - 10 12 3 3 3. - 0 - 0.0542285591363907 - 9.2725036665797234e-003 - -0.1769926995038986 - <_> - - <_> - - - - <_> - 3 8 2 6 -1. - <_> - 3 10 2 2 3. - 0 - 5.4582608863711357e-003 - -0.0437470003962517 - 0.1033746972680092 - <_> - - <_> - - - - <_> - 12 3 6 12 -1. - <_> - 12 9 6 6 2. - 0 - 0.0637689232826233 - 0.0219606403261423 - -0.2052810937166214 - <_> - - <_> - - - - <_> - 2 13 12 2 -1. - <_> - 8 13 6 2 2. - 0 - 0.0112160202115774 - -0.0601588003337383 - 0.0776893869042397 - <_> - - <_> - - - - <_> - 8 12 8 3 -1. - <_> - 8 12 4 3 2. - 0 - 0.0393657200038433 - -0.0201384108513594 - 0.1276084035634995 - <_> - - <_> - - - - <_> - 2 12 8 3 -1. - <_> - 6 12 4 3 2. - 0 - -0.0161337107419968 - 0.1127976030111313 - -0.0601407214999199 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 1 2 2. - 1 - -1.6923110233619809e-003 - 0.0280561596155167 - -0.0492299310863018 - <_> - - <_> - - - - <_> - 5 4 2 2 -1. - <_> - 5 4 1 1 2. - <_> - 6 5 1 1 2. - 0 - -4.9907790526049212e-005 - 0.0722095370292664 - -0.0577128715813160 - <_> - - <_> - - - - <_> - 11 0 2 4 -1. - <_> - 11 1 2 2 2. - 0 - 8.3856992423534393e-003 - 4.2978320270776749e-003 - -0.4872570931911469 - <_> - - <_> - - - - <_> - 8 0 2 2 -1. - <_> - 8 0 2 1 2. - 1 - -6.8764640018343925e-003 - -0.3555175065994263 - 0.0109930103644729 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 7 0 4 4 2. - 0 - -7.4763470329344273e-003 - 0.1619573980569840 - -0.0268841590732336 - <_> - - <_> - - - - <_> - 3 1 12 1 -1. - <_> - 6 1 6 1 2. - 0 - 3.8878160994499922e-003 - -0.1101962998509407 - 0.0409429408609867 - <_> - - <_> - - - - <_> - 10 3 6 4 -1. - <_> - 10 3 3 4 2. - 0 - -0.0632312968373299 - 0.4909915924072266 - -5.1781800575554371e-003 - <_> - - <_> - - - - <_> - 2 3 6 4 -1. - <_> - 5 3 3 4 2. - 0 - -0.0566077493131161 - 0.3793733119964600 - -0.0108209000900388 - <_> - - <_> - - - - <_> - 1 2 16 13 -1. - <_> - 5 2 8 13 2. - 0 - -0.2626726925373077 - -0.4480285942554474 - 0.0105561902746558 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - -5.4856478527653962e-005 - 0.0653926804661751 - -0.0620450004935265 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 4.7022080252645537e-005 - -0.0353392213582993 - 0.0484495908021927 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - 7.6384996646083891e-005 - -0.0554682798683643 - 0.0811991393566132 - <_> - - <_> - - - - <_> - 10 8 8 7 -1. - <_> - 12 8 4 7 2. - 0 - -0.1349100023508072 - -0.5649768114089966 - 5.8416058309376240e-003 - <_> - - <_> - - - - <_> - 0 8 8 7 -1. - <_> - 2 8 4 7 2. - 0 - -0.0173286907374859 - 0.0686116516590118 - -0.0624860487878323 - <_> - - <_> - - - - <_> - 11 8 6 3 -1. - <_> - 13 9 2 1 9. - 0 - -0.1159003973007202 - 0.3599152863025665 - -7.0457011461257935e-003 - <_> - - <_> - - - - <_> - 1 8 6 3 -1. - <_> - 3 9 2 1 9. - 0 - -2.5972709991037846e-003 - -0.0610489808022976 - 0.0729080066084862 - <_> - - <_> - - - - <_> - 1 0 16 12 -1. - <_> - 1 6 16 6 2. - 0 - -0.5851712226867676 - 0.1706732064485550 - -0.0274902693927288 - <_> - - <_> - - - - <_> - 9 0 5 4 -1. - <_> - 9 0 5 2 2. - 1 - -0.0164765398949385 - 0.1303893029689789 - -0.0331927388906479 - <_> - - <_> - - - - <_> - 7 0 4 10 -1. - <_> - 7 0 2 10 2. - 0 - -0.0474574081599712 - 0.0938887968659401 - -0.0477792508900166 - <_> - - <_> - - - - <_> - 7 4 3 2 -1. - <_> - 8 5 1 2 3. - 1 - -7.1776830591261387e-003 - -0.1972271949052811 - 0.0238158907741308 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 8.9368229964748025e-004 - -0.0385106988251209 - 0.1253774017095566 - <_> - - <_> - - - - <_> - 0 6 9 3 -1. - <_> - 3 7 3 1 9. - 0 - -0.1589708030223846 - 0.4269199967384338 - -0.0113530196249485 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -1.5724339755252004e-003 - 0.1303405016660690 - -0.0292303599417210 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - 6.2912302382756025e-005 - -0.0539115294814110 - 0.0894209668040276 - <_> - - <_> - - - - <_> - 5 7 8 2 -1. - <_> - 9 7 4 1 2. - <_> - 5 8 4 1 2. - 0 - 7.9537890851497650e-003 - 0.0292203202843666 - -0.1614741981029511 - <_> - - <_> - - - - <_> - 6 4 3 9 -1. - <_> - 7 4 1 9 3. - 0 - 0.0278543103486300 - 8.1461891531944275e-003 - -0.5010797977447510 - <_> - - <_> - - - - <_> - 12 4 3 7 -1. - <_> - 13 4 1 7 3. - 0 - -0.0307268109172583 - -0.3919588029384613 - 6.9215041585266590e-003 - <_> - - <_> - - - - <_> - 3 4 3 7 -1. - <_> - 4 4 1 7 3. - 0 - -0.0356646999716759 - -0.7585719227790833 - 5.3641172125935555e-003 - <_> - - <_> - - - - <_> - 4 12 10 3 -1. - <_> - 4 13 10 1 3. - 0 - 0.0360276810824871 - -0.0191031396389008 - 0.2439292967319489 - <_> - - <_> - - - - <_> - 4 13 8 2 -1. - <_> - 4 14 8 1 2. - 0 - 6.5820151939988136e-004 - -0.0886877924203873 - 0.0565083399415016 - <_> - - <_> - - - - <_> - 13 3 5 12 -1. - <_> - 13 6 5 6 2. - 0 - -0.1285891979932785 - -0.1347049027681351 - 0.0150261903181672 - <_> - - <_> - - - - <_> - 0 0 6 8 -1. - <_> - 0 2 6 4 2. - 0 - -0.0254423692822456 - -0.1902146935462952 - 0.0212604906409979 - <_> - - <_> - - - - <_> - 14 5 3 3 -1. - <_> - 13 6 3 1 3. - 1 - 0.0512643307447433 - -3.6050491034984589e-003 - 0.3700175881385803 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 6 1 3 3. - 1 - 0.0326501503586769 - -0.0135911498218775 - 0.3276687860488892 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 16 1 1 1 3. - 1 - 5.5878241546452045e-003 - -8.4945466369390488e-003 - 0.0897279679775238 - <_> - - <_> - - - - <_> - 9 4 3 4 -1. - <_> - 8 5 3 2 2. - 1 - -0.0458750911056995 - 0.4126788973808289 - -9.8934909328818321e-003 - <_> - - <_> - - - - <_> - 7 3 6 2 -1. - <_> - 7 3 3 2 2. - 0 - 5.4674488492310047e-003 - -0.0308022703975439 - 0.0607560500502586 - <_> - - <_> - - - - <_> - 9 0 9 2 -1. - <_> - 12 3 3 2 3. - 1 - 0.1069127991795540 - -0.0305466204881668 - 0.1470393985509872 - <_> - - <_> - - - - <_> - 7 3 6 2 -1. - <_> - 7 3 3 2 2. - 0 - 0.0582343190908432 - 1.7207229975610971e-003 - -0.6001799702644348 - <_> - - <_> - - - - <_> - 5 3 6 2 -1. - <_> - 8 3 3 2 2. - 0 - 0.0541815198957920 - 0.0111133400350809 - -0.4260107874870300 - <_> - - <_> - - - - <_> - 13 3 5 12 -1. - <_> - 13 6 5 6 2. - 0 - 0.1989209949970245 - 1.5127729857340455e-003 - -0.6666517853736877 - <_> - - <_> - - - - <_> - 0 3 5 12 -1. - <_> - 0 6 5 6 2. - 0 - -0.0836698114871979 - -0.1597495973110199 - 0.0258307307958603 - <_> - - <_> - - - - <_> - 4 14 10 1 -1. - <_> - 4 14 5 1 2. - 0 - -0.0383935607969761 - -0.4158290028572083 - 9.7704501822590828e-003 - <_> - - <_> - - - - <_> - 2 12 9 3 -1. - <_> - 5 12 3 3 3. - 0 - 0.0576191917061806 - 9.3507859855890274e-003 - -0.4187014102935791 - <_> - - <_> - - - - <_> - 2 9 14 4 -1. - <_> - 2 11 14 2 2. - 0 - 0.0440335609018803 - -0.0463782697916031 - 0.0919744595885277 - <_> - - <_> - - - - <_> - 0 2 18 8 -1. - <_> - 0 4 18 4 2. - 0 - 0.2660895884037018 - 0.0100852102041245 - -0.3897384107112885 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 9 7 2 1 9. - 0 - -0.0536184795200825 - -0.5088896155357361 - 4.0682330727577209e-003 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -6.6047519794665277e-005 - 0.0691266432404518 - -0.0591945089399815 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - 5.5685410188743845e-005 - -0.0400558486580849 - 0.0543046407401562 - <_> - - <_> - - - - <_> - 7 0 1 3 -1. - <_> - 7 1 1 1 3. - 0 - -5.3049330745125189e-005 - 0.0731744170188904 - -0.0598583295941353 - <_> - - <_> - - - - <_> - 4 0 11 3 -1. - <_> - 4 1 11 1 3. - 0 - -0.0124693904072046 - -0.3152252137660980 - 0.0117351301014423 - <_> - - <_> - - - - <_> - 0 9 10 6 -1. - <_> - 0 9 5 3 2. - <_> - 5 12 5 3 2. - 0 - -0.0927336066961288 - 0.3232898116111755 - -0.0127641502767801 - <_> - - <_> - - - - <_> - 0 4 18 9 -1. - <_> - 6 4 6 9 3. - 0 - 0.5954974293708801 - 8.3142714574933052e-003 - -0.5672199130058289 - <_> - - <_> - - - - <_> - 2 4 12 9 -1. - <_> - 6 7 4 3 9. - 0 - 0.5378745198249817 - -0.0141389099881053 - 0.3267138004302979 - <_> - - <_> - - - - <_> - 6 7 6 6 -1. - <_> - 6 10 6 3 2. - 0 - -0.1902792006731033 - -0.6616215705871582 - 7.4805710464715958e-003 - <_> - - <_> - - - - <_> - 0 9 3 6 -1. - <_> - 0 12 3 3 2. - 0 - 0.0674360468983650 - 5.3405929356813431e-003 - -0.5753700733184815 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 8 9 3 1 2. - 0 - -1.7849049763754010e-003 - 0.0343016088008881 - -0.1244985982775688 - <_> - - <_> - - - - <_> - 4 4 10 2 -1. - <_> - 4 5 10 1 2. - 0 - -0.0179164893925190 - 0.2131116986274719 - -0.0218786392360926 - <_> - - <_> - - - - <_> - 8 2 5 3 -1. - <_> - 8 3 5 1 3. - 0 - 3.4813389647752047e-003 - 0.0268206801265478 - -0.1016602963209152 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 8 13 1 1 2. - <_> - 9 14 1 1 2. - 0 - 1.6392209799960256e-003 - -0.0226296707987785 - 0.1679535061120987 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - 5.8717228966997936e-005 - -0.0969148203730583 - 0.0540798194706440 - <_> - - <_> - - - - <_> - 4 4 3 2 -1. - <_> - 4 5 3 1 2. - 0 - -1.1430910089984536e-003 - -0.0913046523928642 - 0.0478410087525845 - <_> - - <_> - - - - <_> - 1 5 16 4 -1. - <_> - 1 7 16 2 2. - 0 - -0.1274714022874832 - 0.1231575012207031 - -0.0393226295709610 - <_> - - <_> - - - - <_> - 4 6 1 2 -1. - <_> - 4 7 1 1 2. - 0 - 5.0409889809088781e-005 - -0.0465187989175320 - 0.0935849994421005 - <_> - - <_> - - - - <_> - 16 11 2 2 -1. - <_> - 17 11 1 1 2. - <_> - 16 12 1 1 2. - 0 - -7.7158221974968910e-003 - -0.6546670794487000 - 3.9967028424143791e-003 - <_> - - <_> - - - - <_> - 0 11 2 2 -1. - <_> - 0 11 1 1 2. - <_> - 1 12 1 1 2. - 0 - 2.7107769710710272e-005 - -0.0640250220894814 - 0.0632654428482056 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 0 - 1.5383179998025298e-003 - 0.0226351507008076 - -0.1935117989778519 - <_> - - <_> - - - - <_> - 0 12 2 1 -1. - <_> - 1 12 1 1 2. - 0 - -6.4936917624436319e-005 - 0.0578822083771229 - -0.0738588199019432 - <_> - - <_> - - - - <_> - 0 7 18 6 -1. - <_> - 0 9 18 2 3. - 0 - 0.1365308016538620 - -0.0149675700813532 - 0.2666974067687988 - <_> - - <_> - - - - <_> - 4 2 7 12 -1. - <_> - 4 5 7 6 2. - 0 - 0.1899372041225433 - 0.0125067904591560 - -0.3534477949142456 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 9 7 2 1 9. - 0 - 0.0314559191465378 - 0.0183809790760279 - -0.0603883489966393 - <_> - - <_> - - - - <_> - 5 6 6 3 -1. - <_> - 7 7 2 1 9. - 0 - -0.0269035492092371 - -0.2218240946531296 - 0.0186347793787718 - <_> - - <_> - - - - <_> - 12 3 6 6 -1. - <_> - 12 3 6 3 2. - 1 - -0.2581453025341034 - -0.8018553853034973 - 3.8440190837718546e-004 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 6 3 3 6 2. - 1 - 0.1513974070549011 - 0.0267061796039343 - -0.1536087989807129 - <_> - - <_> - - - - <_> - 4 2 12 9 -1. - <_> - 8 2 4 9 3. - 0 - 0.0440951585769653 - 0.0494831092655659 - -0.0132203595712781 - <_> - - <_> - - - - <_> - 1 7 3 1 -1. - <_> - 2 7 1 1 3. - 0 - 1.7376670148223639e-003 - -0.0296104997396469 - 0.1274116039276123 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - 6.7472518421709538e-003 - 0.0369098298251629 - -0.1863466948270798 - <_> - - <_> - - - - <_> - 2 2 12 9 -1. - <_> - 6 2 4 9 3. - 0 - -0.2713251113891602 - 0.4345330893993378 - -9.0847145766019821e-003 - <_> - - <_> - - - - <_> - 9 1 1 4 -1. - <_> - 8 2 1 2 2. - 1 - 4.7428919933736324e-003 - 0.0166457295417786 - -0.0998101606965065 - <_> - - <_> - - - - <_> - 2 0 12 1 -1. - <_> - 5 0 6 1 2. - 0 - 9.8173134028911591e-003 - -0.0557747483253479 - 0.0711958929896355 - <_> - - <_> - - - - <_> - 11 0 4 1 -1. - <_> - 11 0 2 1 2. - 1 - 1.1679739691317081e-003 - -0.0676950290799141 - 0.0412361510097981 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 9 0 2 1 2. - 1 - -3.1285739969462156e-003 - 0.0793463066220284 - -0.0644870027899742 - <_> - - <_> - - - - <_> - 9 3 2 1 -1. - <_> - 9 3 1 1 2. - 0 - -2.1147250663489103e-003 - -0.1048358008265495 - 0.0149682499468327 - <_> - - <_> - - - - <_> - 7 3 2 1 -1. - <_> - 8 3 1 1 2. - 0 - -1.7796000465750694e-003 - 0.2892560958862305 - -0.0134435798972845 - <_> - - <_> - - - - <_> - 9 2 8 4 -1. - <_> - 9 2 4 4 2. - 1 - -0.2185384035110474 - -0.5621880292892456 - 2.4572419933974743e-003 - <_> - - <_> - - - - <_> - 0 3 18 1 -1. - <_> - 9 3 9 1 2. - 0 - -0.0542420297861099 - -0.2120805978775024 - 0.0192837398499250 - <_> - - <_> - - - - <_> - 13 13 2 2 -1. - <_> - 13 13 1 2 2. - 0 - 2.2505840752273798e-003 - 8.7050450965762138e-003 - -0.0469894893467426 - <_> - - <_> - - - - <_> - 7 0 1 4 -1. - <_> - 7 0 1 2 2. - 1 - 0.0273687392473221 - 5.3823711350560188e-003 - -0.7339485287666321 - <_> - - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 8 2 2 2. - 0 - -0.0171208307147026 - 0.1783629953861237 - -7.9886056482791901e-003 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - 5.8321221731603146e-003 - 0.0193902608007193 - -0.2057818025350571 - <_> - - <_> - - - - <_> - 9 13 3 2 -1. - <_> - 10 13 1 2 3. - 0 - -6.9258757866919041e-004 - 0.0525361597537994 - -0.0348935909569263 - <_> - - <_> - - - - <_> - 6 13 3 2 -1. - <_> - 7 13 1 2 3. - 0 - 2.1873079240322113e-003 - -0.0308929309248924 - 0.1182458028197289 - <_> - - <_> - - - - <_> - 13 13 2 2 -1. - <_> - 13 13 1 2 2. - 0 - -2.6870400179177523e-003 - -0.0478884391486645 - 0.0109662897884846 - <_> - - <_> - - - - <_> - 3 13 2 2 -1. - <_> - 4 13 1 2 2. - 0 - 1.7761799972504377e-003 - 0.0283233094960451 - -0.1357100009918213 - <_> - - <_> - - - - <_> - 10 11 6 4 -1. - <_> - 12 11 2 4 3. - 0 - 0.0268767699599266 - 0.0109366700053215 - -0.1321447044610977 - <_> - - <_> - - - - <_> - 2 11 6 4 -1. - <_> - 4 11 2 4 3. - 0 - -0.0397437512874603 - -0.2774949073791504 - 0.0147927999496460 - <_> - - <_> - - - - <_> - 0 11 18 3 -1. - <_> - 6 11 6 3 3. - 0 - 0.0519120208919048 - -0.0306210797280073 - 0.1386394947767258 - <_> - - <_> - - - - <_> - 6 13 4 1 -1. - <_> - 7 13 2 1 2. - 0 - -4.9659938667900860e-005 - 0.0652230083942413 - -0.0611205287277699 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 7 10 4 1 3. - 0 - 0.0208992697298527 - 0.0100139798596501 - -0.3789927065372467 - <_> - - <_> - - - - <_> - 5 5 4 9 -1. - <_> - 5 8 4 3 3. - 0 - 0.0346408486366272 - -0.0236316304653883 - 0.1669196039438248 - <_> - - <_> - - - - <_> - 13 5 2 8 -1. - <_> - 11 7 2 4 2. - 1 - 2.8383019380271435e-003 - 0.0228540804237127 - -0.0597838684916496 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 1 2. - <_> - 7 9 1 1 2. - 0 - 2.1739569492638111e-003 - -0.0186796691268682 - 0.1997753977775574 - <_> - - <_> - - - - <_> - 9 1 1 4 -1. - <_> - 8 2 1 2 2. - 1 - -0.0150487199425697 - -0.3185037970542908 - 3.2470070291310549e-003 - <_> - - <_> - - - - <_> - 9 1 4 1 -1. - <_> - 10 2 2 1 2. - 1 - -7.0679760538041592e-003 - -0.3494650125503540 - 0.0113516096025705 - <_> - - <_> - - - - <_> - 6 2 6 9 -1. - <_> - 6 5 6 3 3. - 0 - 0.2012647986412048 - -0.0153439603745937 - 0.2706956863403320 - <_> - - <_> - - - - <_> - 9 6 1 6 -1. - <_> - 7 8 1 2 3. - 1 - -0.0454341918230057 - -0.1544011980295181 - 0.0267359893769026 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 11 6 1 1 2. - <_> - 10 7 1 1 2. - 0 - 5.0224931328557432e-005 - -0.0454120188951492 - 0.0583584196865559 - <_> - - <_> - - - - <_> - 6 7 3 2 -1. - <_> - 7 7 1 2 3. - 0 - 2.8120330534875393e-003 - -0.0352263003587723 - 0.1206099987030029 - <_> - - <_> - - - - <_> - 12 4 2 6 -1. - <_> - 10 6 2 2 3. - 1 - 0.1098996996879578 - -8.2655288279056549e-003 - 0.2711330056190491 - <_> - - <_> - - - - <_> - 6 4 6 2 -1. - <_> - 8 6 2 2 3. - 1 - 0.0350026711821556 - 0.0418249294161797 - -0.1444368064403534 - <_> - - <_> - - - - <_> - 0 5 18 6 -1. - <_> - 0 7 18 2 3. - 0 - 0.0569862984120846 - -0.0448646917939186 - 0.0947646573185921 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 7 4 1 2. - 0 - -1.9248030148446560e-003 - 0.0438571982085705 - -0.1155669018626213 - <_> - - <_> - - - - <_> - 12 6 6 9 -1. - <_> - 14 9 2 3 9. - 0 - 0.0364132300019264 - -0.0259249694645405 - 0.0877993777394295 - <_> - - <_> - - - - <_> - 4 6 10 3 -1. - <_> - 4 7 10 1 3. - 0 - 4.9817138351500034e-003 - -0.0624991990625858 - 0.0629830136895180 - <_> - - <_> - - - - <_> - 13 3 4 8 -1. - <_> - 13 5 4 4 2. - 0 - -0.0157324392348528 - 0.1091820001602173 - -0.0354424603283405 - <_> - - <_> - - - - <_> - 0 4 11 2 -1. - <_> - 0 5 11 1 2. - 0 - -0.0323861613869667 - -0.6141089797019959 - 6.1990139074623585e-003 - <_> - - <_> - - - - <_> - 16 5 2 2 -1. - <_> - 16 5 1 2 2. - 0 - 0.0191630292683840 - -3.0063120648264885e-003 - 0.4802902936935425 - <_> - - <_> - - - - <_> - 0 5 2 2 -1. - <_> - 1 5 1 2 2. - 0 - -6.6093212808482349e-005 - 0.0573367811739445 - -0.0716157332062721 - <_> - - <_> - - - - <_> - 16 0 2 13 -1. - <_> - 16 0 1 13 2. - 0 - 1.1779610067605972e-003 - 0.0471811406314373 - -0.0946075767278671 - <_> - - <_> - - - - <_> - 0 0 2 13 -1. - <_> - 1 0 1 13 2. - 0 - -0.0148553596809506 - -0.1387726068496704 - 0.0338439010083675 - <_> - - <_> - - - - <_> - 6 1 9 3 -1. - <_> - 9 1 3 3 3. - 0 - -0.0238599907606840 - 0.1998057067394257 - -0.0122430603951216 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 9 2 4 4 2. - 1 - -0.0785807296633720 - -0.4961810111999512 - 9.5836250111460686e-003 - <_> - - <_> - - - - <_> - 3 1 12 9 -1. - <_> - 3 4 12 3 3. - 0 - -0.0289697498083115 - 0.2014721035957336 - -0.0211850497871637 - <_> - - <_> - - - - <_> - 0 10 8 3 -1. - <_> - 0 11 8 1 3. - 0 - 0.0450992509722710 - 7.2327218949794769e-003 - -0.5757725238800049 - <_> - - <_> - - - - <_> - 0 11 18 4 -1. - <_> - 9 11 9 2 2. - <_> - 0 13 9 2 2. - 0 - 0.0393024682998657 - 0.0255729109048843 - -0.1493856012821198 - <_> - - <_> - - - - <_> - 5 5 2 4 -1. - <_> - 4 6 2 2 2. - 1 - 0.0384178198873997 - 4.3327999301254749e-003 - -0.8469793796539307 - <_> - - <_> - - - - <_> - 8 0 3 6 -1. - <_> - 9 2 1 2 9. - 0 - 0.0157523807138205 - 0.0215584896504879 - -0.0945848673582077 - <_> - - <_> - - - - <_> - 6 1 4 2 -1. - <_> - 6 1 4 1 2. - 1 - 6.5488961990922689e-004 - -0.1137140020728111 - 0.0342830009758472 - <_> - - <_> - - - - <_> - 13 12 2 3 -1. - <_> - 13 13 2 1 3. - 0 - 6.0493252240121365e-003 - -0.0153995295986533 - 0.1082850024104118 - <_> - - <_> - - - - <_> - 6 0 4 8 -1. - <_> - 6 0 2 4 2. - <_> - 8 4 2 4 2. - 0 - 0.0380066595971584 - 8.7194433435797691e-003 - -0.4566295146942139 - <_> - - <_> - - - - <_> - 10 2 6 2 -1. - <_> - 10 2 3 2 2. - 0 - 2.2284449078142643e-003 - -0.0540577992796898 - 0.0205975491553545 - <_> - - <_> - - - - <_> - 2 2 6 2 -1. - <_> - 5 2 3 2 2. - 0 - -0.0116986101493239 - 0.1834432035684586 - -0.0235534105449915 - <_> - - <_> - - - - <_> - 13 0 4 3 -1. - <_> - 14 0 2 3 2. - 0 - -0.0235775094479322 - -0.3377870023250580 - 4.2076371610164642e-003 - <_> - - <_> - - - - <_> - 2 3 5 2 -1. - <_> - 2 4 5 1 2. - 0 - -1.7685960046947002e-003 - -0.1034085005521774 - 0.0397500097751617 - <_> - - <_> - - - - <_> - 13 0 3 11 -1. - <_> - 14 1 1 11 3. - 1 - -0.0626740828156471 - 0.2563458979129791 - -2.6633420493453741e-003 - <_> - - <_> - - - - <_> - 5 0 11 3 -1. - <_> - 4 1 11 1 3. - 1 - 4.9983179196715355e-003 - -0.0596107505261898 - 0.0683519020676613 - <_> - - <_> - - - - <_> - 11 0 2 12 -1. - <_> - 12 0 1 6 2. - <_> - 11 6 1 6 2. - 0 - -0.0137960799038410 - -0.1292528063058853 - 0.0131471604108810 - <_> - - <_> - - - - <_> - 5 0 2 12 -1. - <_> - 5 0 1 6 2. - <_> - 6 6 1 6 2. - 0 - 7.3155229911208153e-003 - 0.0236708596348763 - -0.1731462031602860 - <_> - - <_> - - - - <_> - 11 5 2 4 -1. - <_> - 11 5 1 4 2. - 1 - 0.0160576999187469 - 0.0210999101400375 - -0.0365347005426884 - <_> - - <_> - - - - <_> - 1 3 3 12 -1. - <_> - 1 7 3 4 3. - 0 - -0.1364033967256546 - 0.3252066969871521 - -0.0125922495499253 - <_> - - <_> - - - - <_> - 11 5 2 4 -1. - <_> - 11 5 1 4 2. - 1 - -4.3760128319263458e-003 - -0.0689269527792931 - 0.0126556698232889 - <_> - - <_> - - - - <_> - 7 5 4 2 -1. - <_> - 7 5 4 1 2. - 1 - -0.0251937098801136 - 0.6360712051391602 - -6.9624311290681362e-003 - <_> - - <_> - - - - <_> - 13 0 5 10 -1. - <_> - 13 5 5 5 2. - 0 - -0.0992545634508133 - -0.1638306975364685 - 0.0402428992092609 - <_> - - <_> - - - - <_> - 0 1 6 8 -1. - <_> - 0 5 6 4 2. - 0 - -4.1403169743716717e-003 - 0.0453241616487503 - -0.0904397219419479 - <_> - - <_> - - - - <_> - 14 7 4 2 -1. - <_> - 14 8 4 1 2. - 0 - -9.2972591519355774e-003 - 0.0730063766241074 - -0.0215709600597620 - <_> - - <_> - - - - <_> - 0 7 4 2 -1. - <_> - 0 8 4 1 2. - 0 - -6.5849390812218189e-003 - -0.1413342058658600 - 0.0347219407558441 - <_> - - <_> - - - - <_> - 14 3 3 8 -1. - <_> - 14 5 3 4 2. - 0 - 0.0825936570763588 - 2.2461370099335909e-003 - -0.3325017094612122 - <_> - - <_> - - - - <_> - 1 3 3 8 -1. - <_> - 1 5 3 4 2. - 0 - 0.0447855107486248 - -0.0163932293653488 - 0.3196890950202942 - <_> - - <_> - - - - <_> - 11 3 4 10 -1. - <_> - 12 3 2 10 2. - 0 - 0.0149416103959084 - -0.0136180296540260 - 0.0911836773157120 - <_> - - <_> - - - - <_> - 3 3 4 10 -1. - <_> - 4 3 2 10 2. - 0 - -4.8578871064819396e-004 - 0.0450273416936398 - -0.0991435274481773 - <_> - - <_> - - - - <_> - 11 2 4 7 -1. - <_> - 12 2 2 7 2. - 0 - -1.0591340251266956e-003 - 0.0437940806150436 - -0.0463229306042194 - <_> - - <_> - - - - <_> - 3 2 4 7 -1. - <_> - 4 2 2 7 2. - 0 - -0.0124091897159815 - -0.1189147979021072 - 0.0417256988584995 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -2.0622629672288895e-003 - 0.1331578940153122 - -0.0239935107529163 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - 8.8945101015269756e-004 - -0.0329415686428547 - 0.1312008947134018 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - -1.6302269650623202e-003 - -0.0539117492735386 - 0.0144488299265504 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 0 2 1 2. - 1 - 7.9654958099126816e-003 - 0.0144072799012065 - -0.2618730962276459 - <_> - - <_> - - - - <_> - 12 4 2 2 -1. - <_> - 13 4 1 1 2. - <_> - 12 5 1 1 2. - 0 - -6.1501268646679819e-005 - 0.0330021195113659 - -0.0297673903405666 - <_> - - <_> - - - - <_> - 5 1 8 14 -1. - <_> - 5 1 4 7 2. - <_> - 9 8 4 7 2. - 0 - -0.2012939006090164 - -0.4931235909461975 - 7.3236711323261261e-003 - <_> - - <_> - - - - <_> - 13 0 5 10 -1. - <_> - 13 5 5 5 2. - 0 - 1.2285460252314806e-003 - 0.0346601791679859 - -0.0940746665000916 - <_> - - <_> - - - - <_> - 1 4 16 4 -1. - <_> - 1 6 16 2 2. - 0 - 0.0104913795366883 - -0.0389849282801151 - 0.1268351972103119 - -1.0771520137786865 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_rightear.xml b/data/haarcascades/haarcascade_mcs_rightear.xml deleted file mode 100644 index eaf17b0..0000000 --- a/data/haarcascades/haarcascade_mcs_rightear.xml +++ /dev/null @@ -1,9671 +0,0 @@ - - - - - - 12 20 - - <_> - - - <_> - - <_> - - - - <_> - 2 7 8 12 -1. - <_> - 2 7 4 6 2. - <_> - 6 13 4 6 2. - 0 - -1.2393590062856674e-001 - 8.2578802108764648e-001 - -6.7602032423019409e-001 - <_> - - <_> - - - - <_> - 3 7 8 2 -1. - <_> - 5 7 4 2 2. - 0 - 9.4228880479931831e-003 - -1.2722210586071014e-001 - 3.3211699128150940e-001 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 5 5 3 2 2. - 1 - -1.1084940284490585e-002 - 5.6749510765075684e-001 - -5.6716197729110718e-001 - <_> - - <_> - - - - <_> - 4 0 8 18 -1. - <_> - 4 9 8 9 2. - 0 - -2.0189690589904785e-001 - -7.6717972755432129e-001 - 1.9637049734592438e-001 - <_> - - <_> - - - - <_> - 0 18 3 2 -1. - <_> - 0 19 3 1 2. - 0 - -4.7402849304489791e-005 - 3.8455748558044434e-001 - -6.7010718584060669e-001 - <_> - - <_> - - - - <_> - 11 0 1 10 -1. - <_> - 11 5 1 5 2. - 0 - -8.6445426568388939e-003 - -6.9345837831497192e-001 - 1.0593380033969879e-001 - <_> - - <_> - - - - <_> - 0 0 10 1 -1. - <_> - 5 0 5 1 2. - 0 - 5.0770420784829184e-005 - -6.8352818489074707e-001 - 3.5795739293098450e-001 - -1.3802499771118164e+000 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 5 8 14 -1. - <_> - 2 5 4 7 2. - <_> - 6 12 4 7 2. - 0 - -1.8316349387168884e-001 - 7.8830862045288086e-001 - -5.8876812458038330e-001 - <_> - - <_> - - - - <_> - 0 0 12 8 -1. - <_> - 0 4 12 4 2. - 0 - 2.5380790233612061e-002 - -7.4764448404312134e-001 - 4.1486009955406189e-001 - <_> - - <_> - - - - <_> - 2 7 6 10 -1. - <_> - 2 12 6 5 2. - 0 - 1.4207419939339161e-002 - -7.8411531448364258e-001 - 2.7354270219802856e-001 - <_> - - <_> - - - - <_> - 8 2 4 8 -1. - <_> - 10 2 2 4 2. - <_> - 8 6 2 4 2. - 0 - 8.6809601634740829e-003 - -1.0974329710006714e-001 - 9.4718709588050842e-002 - <_> - - <_> - - - - <_> - 0 2 4 8 -1. - <_> - 0 2 2 4 2. - <_> - 2 6 2 4 2. - 0 - -4.1219559498131275e-003 - 3.1739580631256104e-001 - -5.4334312677383423e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 1 2. - <_> - 0 19 6 1 2. - 0 - -1.1700070463120937e-002 - 3.9653539657592773e-001 - -3.7434050440788269e-001 - <_> - - <_> - - - - <_> - 0 14 12 6 -1. - <_> - 6 14 6 6 2. - 0 - 2.8762829303741455e-001 - -1.7733460664749146e-001 - 8.8516682386398315e-001 - <_> - - <_> - - - - <_> - 6 12 2 6 -1. - <_> - 6 12 2 3 2. - 1 - -4.8463501036167145e-002 - -6.0947227478027344e-001 - 1.3633400201797485e-001 - <_> - - <_> - - - - <_> - 6 12 6 2 -1. - <_> - 6 12 3 2 2. - 1 - 7.6523773372173309e-002 - -2.9950559139251709e-001 - 6.1522072553634644e-001 - -1.4652169942855835e+000 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 8 10 2 6 3. - 1 - 1.1777380108833313e-001 - -5.8754861354827881e-001 - 6.1994218826293945e-001 - <_> - - <_> - - - - <_> - 3 6 9 3 -1. - <_> - 6 7 3 1 9. - 0 - 2.9533330351114273e-002 - -4.2420691251754761e-001 - 3.6524820327758789e-001 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - 6.1603458598256111e-003 - -7.9607379436492920e-001 - 3.2861700654029846e-001 - <_> - - <_> - - - - <_> - 6 2 4 5 -1. - <_> - 6 2 2 5 2. - 1 - -5.9753831010311842e-005 - 1.0398519784212112e-001 - -4.5819509029388428e-001 - <_> - - <_> - - - - <_> - 4 5 4 4 -1. - <_> - 4 7 4 2 2. - 0 - -3.6190438549965620e-004 - 5.3506380319595337e-001 - -6.4719748497009277e-001 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 8 2 4 2 2. - 0 - 2.0906500518321991e-002 - -1.6793949902057648e-001 - 2.4539050459861755e-001 - <_> - - <_> - - - - <_> - 3 0 3 20 -1. - <_> - 3 10 3 10 2. - 0 - 8.2527771592140198e-003 - -8.5986042022705078e-001 - 2.2863869369029999e-001 - <_> - - <_> - - - - <_> - 9 16 3 4 -1. - <_> - 9 17 3 2 2. - 0 - 5.9341029264032841e-003 - -4.6319939196109772e-002 - -6.0758531093597412e-001 - <_> - - <_> - - - - <_> - 0 0 4 4 -1. - <_> - 0 2 4 2 2. - 0 - 1.8554080452304333e-004 - -5.7996147871017456e-001 - 3.7694430351257324e-001 - <_> - - <_> - - - - <_> - 9 16 3 4 -1. - <_> - 9 17 3 2 2. - 0 - -7.2531788609921932e-003 - -5.6681227684020996e-001 - -1.9910290837287903e-002 - <_> - - <_> - - - - <_> - 0 16 3 4 -1. - <_> - 0 17 3 2 2. - 0 - 4.0826769691193476e-005 - -6.2813758850097656e-001 - 4.0546119213104248e-001 - <_> - - <_> - - - - <_> - 3 7 8 1 -1. - <_> - 5 7 4 1 2. - 0 - -1.0268500074744225e-002 - 4.5032399892807007e-001 - -2.7399060130119324e-001 - <_> - - <_> - - - - <_> - 0 4 9 6 -1. - <_> - 3 6 3 2 9. - 0 - -3.5408639814704657e-003 - 3.4393149614334106e-001 - -6.7639619112014771e-001 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 8 15 2 1 3. - 1 - -6.9421626627445221e-002 - 6.5173202753067017e-001 - -7.4326410889625549e-002 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 4 15 1 2 3. - 1 - 7.1986039984039962e-005 - -4.5737218856811523e-001 - 3.0109271407127380e-001 - <_> - - <_> - - - - <_> - 2 3 9 2 -1. - <_> - 2 4 9 1 2. - 0 - 6.3741732446942478e-005 - -5.5820369720458984e-001 - 1.9148319959640503e-001 - <_> - - <_> - - - - <_> - 0 6 1 4 -1. - <_> - 0 8 1 2 2. - 0 - 4.4920871005160734e-005 - -5.7379388809204102e-001 - 2.1276189386844635e-001 - <_> - - <_> - - - - <_> - 4 8 7 10 -1. - <_> - 4 13 7 5 2. - 0 - 1.3159319758415222e-001 - -2.2754240036010742e-001 - 2.8766331076622009e-001 - -2.0372869968414307e+000 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 7 8 12 -1. - <_> - 2 7 4 6 2. - <_> - 6 13 4 6 2. - 0 - -1.5496319532394409e-001 - 7.2985649108886719e-001 - -5.9489607810974121e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 6 1 3 3. - 1 - 8.4833214059472084e-003 - 1.3606220483779907e-001 - -4.3773031234741211e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 5 6 3 1 3. - 1 - -3.2831680029630661e-002 - 6.7158091068267822e-001 - -2.8739199042320251e-001 - <_> - - <_> - - - - <_> - 5 16 4 4 -1. - <_> - 5 18 4 2 2. - 0 - -2.8853790834546089e-002 - 4.5923650264739990e-001 - -4.9327030777931213e-002 - <_> - - <_> - - - - <_> - 0 17 12 3 -1. - <_> - 6 17 6 3 2. - 0 - 1.7052419483661652e-001 - -1.6527549922466278e-001 - 8.4507262706756592e-001 - <_> - - <_> - - - - <_> - 0 15 12 3 -1. - <_> - 0 15 6 3 2. - 0 - 1.0879129916429520e-001 - -2.8913050889968872e-001 - 5.3111201524734497e-001 - <_> - - <_> - - - - <_> - 0 0 2 16 -1. - <_> - 0 4 2 8 2. - 0 - 3.0960019212216139e-003 - -5.5323868989944458e-001 - 2.6134639978408813e-001 - <_> - - <_> - - - - <_> - 2 0 8 13 -1. - <_> - 2 0 4 13 2. - 0 - -3.3618099987506866e-002 - 2.2911429405212402e-001 - -5.5924427509307861e-001 - <_> - - <_> - - - - <_> - 0 0 6 2 -1. - <_> - 0 1 6 1 2. - 0 - -1.1074040085077286e-003 - -6.3096380233764648e-001 - 1.5855440497398376e-001 - <_> - - <_> - - - - <_> - 7 18 5 2 -1. - <_> - 7 19 5 1 2. - 0 - -4.4385627843439579e-003 - -6.3817399740219116e-001 - 1.2779480218887329e-001 - <_> - - <_> - - - - <_> - 0 18 5 2 -1. - <_> - 0 19 5 1 2. - 0 - -9.4127003103494644e-003 - 3.5108420252799988e-001 - -3.4738400578498840e-001 - <_> - - <_> - - - - <_> - 6 15 2 3 -1. - <_> - 6 15 1 3 2. - 1 - -3.2499480992555618e-002 - 6.7672997713088989e-001 - -5.5984470993280411e-002 - <_> - - <_> - - - - <_> - 6 15 3 2 -1. - <_> - 6 15 3 1 2. - 1 - -1.3464169576764107e-002 - -7.5412607192993164e-001 - 1.5986099839210510e-001 - -1.5061739683151245e+000 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 7 8 12 -1. - <_> - 2 7 4 6 2. - <_> - 6 13 4 6 2. - 0 - -1.8050560355186462e-001 - 7.1835839748382568e-001 - -5.2469527721405029e-001 - <_> - - <_> - - - - <_> - 5 16 4 4 -1. - <_> - 5 18 4 2 2. - 0 - -1.5271560288965702e-002 - 3.2215949892997742e-001 - -1.5855640172958374e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 4 5 6 2 3. - 1 - -3.4879799932241440e-002 - 3.2105189561843872e-001 - -5.3338629007339478e-001 - <_> - - <_> - - - - <_> - 0 16 12 4 -1. - <_> - 6 16 6 2 2. - <_> - 0 18 6 2 2. - 0 - -3.1743600964546204e-002 - 4.1040870547294617e-001 - -3.7935909628868103e-001 - <_> - - <_> - - - - <_> - 0 2 10 4 -1. - <_> - 0 4 10 2 2. - 0 - 4.8427619040012360e-003 - -6.9584208726882935e-001 - 2.4080069363117218e-001 - <_> - - <_> - - - - <_> - 8 9 2 8 -1. - <_> - 6 11 2 4 2. - 1 - 4.9639631062746048e-002 - 8.0581977963447571e-003 - -5.4770648479461670e-001 - <_> - - <_> - - - - <_> - 4 9 8 3 -1. - <_> - 6 11 4 3 2. - 1 - 1.1154930293560028e-001 - -2.4036459624767303e-001 - 5.6387817859649658e-001 - <_> - - <_> - - - - <_> - 6 12 1 6 -1. - <_> - 6 12 1 3 2. - 1 - -2.6947790756821632e-002 - -4.5162969827651978e-001 - 6.0060828924179077e-002 - <_> - - <_> - - - - <_> - 6 12 6 1 -1. - <_> - 6 12 3 1 2. - 1 - -4.9296129494905472e-002 - 8.3912831544876099e-001 - -1.8871270120143890e-001 - <_> - - <_> - - - - <_> - 8 1 4 10 -1. - <_> - 10 1 2 5 2. - <_> - 8 6 2 5 2. - 0 - 2.8315439820289612e-002 - 6.9766468368470669e-003 - 1.8534269928932190e-001 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - 3.3421538770198822e-002 - -3.1101679801940918e-001 - 4.0044930577278137e-001 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -6.2644667923450470e-003 - -4.4615790247917175e-001 - 6.6276572644710541e-002 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - 2.5548560079187155e-003 - 1.3413320481777191e-001 - -7.4927258491516113e-001 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - 2.9710179194808006e-002 - 6.1377300880849361e-004 - -7.7615362405776978e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 5 6 3 1 3. - 1 - -4.1485700756311417e-002 - 5.9405767917633057e-001 - -1.6889290511608124e-001 - <_> - - <_> - - - - <_> - 10 2 2 3 -1. - <_> - 10 3 2 1 3. - 0 - 1.2231590226292610e-002 - 5.1312480121850967e-002 - -7.5303572416305542e-001 - <_> - - <_> - - - - <_> - 0 2 2 3 -1. - <_> - 0 3 2 1 3. - 0 - -4.3153190053999424e-003 - -6.4812111854553223e-001 - 1.3281610608100891e-001 - -1.5266020298004150e+000 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 8 8 4 -1. - <_> - 6 10 4 4 2. - 1 - 1.1714699864387512e-001 - -5.1155489683151245e-001 - 5.4587250947952271e-001 - <_> - - <_> - - - - <_> - 3 6 9 3 -1. - <_> - 6 7 3 1 9. - 0 - 5.2537951618432999e-002 - -2.6988661289215088e-001 - 3.4098041057586670e-001 - <_> - - <_> - - - - <_> - 0 1 4 10 -1. - <_> - 0 1 2 5 2. - <_> - 2 6 2 5 2. - 0 - -1.9980749115347862e-002 - 3.5662230849266052e-001 - -4.4640049338340759e-001 - <_> - - <_> - - - - <_> - 3 3 8 17 -1. - <_> - 5 3 4 17 2. - 0 - -1.2166350334882736e-001 - 4.5662569999694824e-001 - -6.7647598683834076e-002 - <_> - - <_> - - - - <_> - 4 0 4 8 -1. - <_> - 6 0 2 8 2. - 0 - 1.6176940873265266e-002 - -4.8407769203186035e-001 - 2.5647491216659546e-001 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 10 3 3 2. - 1 - -1.2731030583381653e-001 - 7.8568279743194580e-001 - -7.6182372868061066e-002 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 19 4 1 2. - 0 - -3.7296859081834555e-003 - 2.7144059538841248e-001 - -4.8822438716888428e-001 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 10 3 3 2. - 1 - -1.7392159998416901e-001 - 7.3156762123107910e-001 - -4.0217950940132141e-002 - <_> - - <_> - - - - <_> - 1 6 9 3 -1. - <_> - 4 7 3 1 9. - 0 - -9.4516716897487640e-002 - 4.9297851324081421e-001 - -2.1850970387458801e-001 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 10 3 3 2. - 1 - 7.9759500920772552e-002 - -1.0667549818754196e-001 - 2.1722890436649323e-001 - <_> - - <_> - - - - <_> - 6 10 3 6 -1. - <_> - 6 10 3 3 2. - 1 - 2.9159070923924446e-002 - 1.5513190627098083e-001 - -7.9432719945907593e-001 - <_> - - <_> - - - - <_> - 0 0 12 10 -1. - <_> - 0 5 12 5 2. - 0 - 6.8567609414458275e-003 - -7.7142190933227539e-001 - 1.0970850288867950e-001 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 2.6352910790592432e-003 - 9.6235923469066620e-002 - -7.4925291538238525e-001 - <_> - - <_> - - - - <_> - 4 5 4 8 -1. - <_> - 4 7 4 4 2. - 0 - -4.1161300614476204e-003 - 1.7448060214519501e-001 - -4.6480000019073486e-001 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 1 0 1 3 2. - 0 - -2.7307260315865278e-003 - -5.8561611175537109e-001 - 1.1779639869928360e-001 - <_> - - <_> - - - - <_> - 0 8 12 4 -1. - <_> - 0 9 12 2 2. - 0 - -1.9059289246797562e-002 - -6.8809962272644043e-001 - 1.0283970087766647e-001 - <_> - - <_> - - - - <_> - 1 3 1 3 -1. - <_> - 1 4 1 1 3. - 0 - -2.9182219877839088e-003 - -6.6901868581771851e-001 - 8.3721928298473358e-002 - -1.4295140504837036e+000 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 9 8 2 -1. - <_> - 6 11 4 2 2. - 1 - 8.1108748912811279e-002 - -3.9180481433868408e-001 - 5.3625607490539551e-001 - <_> - - <_> - - - - <_> - 5 3 2 6 -1. - <_> - 5 5 2 2 3. - 0 - 9.1598061844706535e-003 - -4.6528929471969604e-001 - 3.3383831381797791e-001 - <_> - - <_> - - - - <_> - 0 0 1 8 -1. - <_> - 0 4 1 4 2. - 0 - 8.0795027315616608e-004 - -7.5230997800827026e-001 - 1.4381100237369537e-001 - <_> - - <_> - - - - <_> - 2 5 8 14 -1. - <_> - 6 5 4 7 2. - <_> - 2 12 4 7 2. - 0 - 2.4406640231609344e-001 - -2.2846619784832001e-001 - 5.0088721513748169e-001 - <_> - - <_> - - - - <_> - 0 6 1 8 -1. - <_> - 0 8 1 4 2. - 0 - 9.9084907560609281e-005 - -4.9552011489868164e-001 - 2.3163549602031708e-001 - <_> - - <_> - - - - <_> - 0 17 12 3 -1. - <_> - 0 17 6 3 2. - 0 - -1.6304260492324829e-001 - 8.0807077884674072e-001 - -1.4503139257431030e-001 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 4 1 2 1 3. - 0 - 9.9489316344261169e-003 - -1.3804569840431213e-001 - 6.0897988080978394e-001 - <_> - - <_> - - - - <_> - 5 12 6 8 -1. - <_> - 5 14 6 4 2. - 0 - 7.6701432466506958e-002 - 3.7772629410028458e-002 - -5.3447282314300537e-001 - <_> - - <_> - - - - <_> - 3 11 4 9 -1. - <_> - 3 14 4 3 3. - 0 - 4.7309949994087219e-002 - -3.6191630363464355e-001 - 2.8269779682159424e-001 - <_> - - <_> - - - - <_> - 2 0 10 16 -1. - <_> - 2 8 10 8 2. - 0 - -2.2022439166903496e-002 - -5.2068692445755005e-001 - 9.4968706369400024e-002 - <_> - - <_> - - - - <_> - 5 15 3 2 -1. - <_> - 5 15 3 1 2. - 1 - 1.3980070129036903e-002 - 1.1217589676380157e-001 - -6.8278092145919800e-001 - <_> - - <_> - - - - <_> - 8 15 4 1 -1. - <_> - 9 16 2 1 2. - 1 - -6.6961131989955902e-002 - 8.7730789184570313e-001 - -2.7844179421663284e-002 - <_> - - <_> - - - - <_> - 4 15 1 4 -1. - <_> - 3 16 1 2 2. - 1 - 1.1592600494623184e-003 - -3.4661638736724854e-001 - 2.0498119294643402e-001 - <_> - - <_> - - - - <_> - 6 14 3 3 -1. - <_> - 7 15 1 3 3. - 1 - 1.9640380516648293e-002 - -1.2608189880847931e-001 - 2.8791791200637817e-001 - <_> - - <_> - - - - <_> - 6 14 3 3 -1. - <_> - 5 15 3 1 3. - 1 - -1.0507949627935886e-002 - -6.1253058910369873e-001 - 1.2488999962806702e-001 - <_> - - <_> - - - - <_> - 3 6 8 2 -1. - <_> - 5 6 4 2 2. - 0 - 1.7976740375161171e-002 - -1.2991739809513092e-001 - 1.4235779643058777e-001 - <_> - - <_> - - - - <_> - 3 2 6 17 -1. - <_> - 5 2 2 17 3. - 0 - -3.1597379595041275e-002 - 3.3326789736747742e-001 - -2.4774129688739777e-001 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 1 1 1 2. - 0 - -1.8917859997600317e-003 - -5.3087908029556274e-001 - 8.8928163051605225e-002 - <_> - - <_> - - - - <_> - 6 14 4 2 -1. - <_> - 6 14 4 1 2. - 1 - -1.7453400418162346e-002 - -6.4604520797729492e-001 - 1.1086379736661911e-001 - <_> - - <_> - - - - <_> - 3 0 8 1 -1. - <_> - 3 0 4 1 2. - 0 - 1.0619490407407284e-002 - 1.4190349727869034e-002 - -2.1650099754333496e-001 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.1998750269412994e-003 - -6.4023351669311523e-001 - 1.0543160140514374e-001 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - 9.0056620538234711e-003 - 6.6442847251892090e-002 - -3.8506388664245605e-001 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 5 5 3 1 3. - 1 - -3.1365811824798584e-002 - 4.9019768834114075e-001 - -1.3340839743614197e-001 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 10 0 2 1 2. - <_> - 8 1 2 1 2. - 0 - 8.8146664202213287e-003 - -7.5805522501468658e-002 - 5.1142227649688721e-001 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - -2.4432060308754444e-003 - -5.3494578599929810e-001 - 1.3186639547348022e-001 - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 8 6 1 3 3. - 1 - 3.3595509827136993e-002 - 1.8829340115189552e-002 - -8.7616902589797974e-001 - -1.5588049888610840e+000 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 2 5 8 14 -1. - <_> - 2 5 4 7 2. - <_> - 6 12 4 7 2. - 0 - -1.9901029765605927e-001 - 4.1589239239692688e-001 - -4.6403810381889343e-001 - <_> - - <_> - - - - <_> - 7 7 4 1 -1. - <_> - 7 7 2 1 2. - 0 - 1.0957729537039995e-003 - -2.7428150177001953e-001 - 2.1992009878158569e-001 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 5 1 1 1 3. - 0 - 3.5783050116151571e-003 - -2.5449270009994507e-001 - 5.4316788911819458e-001 - <_> - - <_> - - - - <_> - 8 6 4 1 -1. - <_> - 8 6 2 1 2. - 1 - 3.5569820553064346e-002 - 4.2951688170433044e-002 - -6.6588342189788818e-001 - <_> - - <_> - - - - <_> - 4 6 1 4 -1. - <_> - 4 6 1 2 2. - 1 - -3.8403531070798635e-003 - 1.9703429937362671e-001 - -5.4586201906204224e-001 - <_> - - <_> - - - - <_> - 3 1 7 9 -1. - <_> - 3 4 7 3 3. - 0 - 3.9690821431577206e-003 - -5.1554411649703979e-001 - 2.2360439598560333e-001 - <_> - - <_> - - - - <_> - 3 9 6 3 -1. - <_> - 3 9 3 3 2. - 1 - 7.4965478852391243e-003 - 1.5371499955654144e-001 - -6.1535251140594482e-001 - <_> - - <_> - - - - <_> - 2 18 10 2 -1. - <_> - 7 18 5 1 2. - <_> - 2 19 5 1 2. - 0 - -8.9704096317291260e-003 - 1.8355900049209595e-001 - -2.8429880738258362e-001 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 6 13 3 1 2. - 1 - -5.6080069392919540e-002 - 7.7755087614059448e-001 - -9.8359443247318268e-002 - <_> - - <_> - - - - <_> - 8 5 2 3 -1. - <_> - 8 5 1 3 2. - 1 - 1.0908209718763828e-002 - 6.3484668731689453e-002 - -6.9791257381439209e-001 - <_> - - <_> - - - - <_> - 4 5 3 2 -1. - <_> - 4 5 3 1 2. - 1 - -9.8930671811103821e-003 - 4.0726318955421448e-001 - -2.5781801342964172e-001 - <_> - - <_> - - - - <_> - 0 14 12 5 -1. - <_> - 0 14 6 5 2. - 0 - 1.8678830564022064e-001 - -2.7086579799652100e-001 - 3.6147558689117432e-001 - <_> - - <_> - - - - <_> - 1 0 8 2 -1. - <_> - 5 0 4 2 2. - 0 - -9.4373157480731606e-004 - -5.8118808269500732e-001 - 1.5266190469264984e-001 - <_> - - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 1 2 2. - 1 - -2.6823019608855247e-002 - 7.3039489984512329e-001 - -5.7183459401130676e-002 - <_> - - <_> - - - - <_> - 6 16 2 2 -1. - <_> - 6 16 2 1 2. - 1 - -8.4266774356365204e-003 - -6.9740217924118042e-001 - 1.1783199757337570e-001 - <_> - - <_> - - - - <_> - 6 9 1 6 -1. - <_> - 4 11 1 2 3. - 1 - 4.4732030481100082e-002 - -6.6901608370244503e-003 - -3.9551690220832825e-001 - <_> - - <_> - - - - <_> - 6 9 6 1 -1. - <_> - 8 11 2 1 3. - 1 - 1.9846759736537933e-002 - -2.5491309165954590e-001 - 2.6959219574928284e-001 - <_> - - <_> - - - - <_> - 10 17 1 3 -1. - <_> - 10 18 1 1 3. - 0 - -1.1466080322861671e-003 - -4.7784709930419922e-001 - 1.4147639274597168e-001 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - 9.8631740547716618e-004 - -2.9782509803771973e-001 - 2.1989880502223969e-001 - <_> - - <_> - - - - <_> - 11 2 1 18 -1. - <_> - 11 8 1 6 3. - 0 - -1.3526080548763275e-001 - 7.3641002178192139e-001 - -3.6679711192846298e-002 - <_> - - <_> - - - - <_> - 0 0 1 20 -1. - <_> - 0 5 1 10 2. - 0 - -1.4555889647454023e-003 - -4.9741968512535095e-001 - 1.4351129531860352e-001 - <_> - - <_> - - - - <_> - 4 0 6 2 -1. - <_> - 7 0 3 1 2. - <_> - 4 1 3 1 2. - 0 - -1.3439180329442024e-002 - 4.4307011365890503e-001 - -6.1504751443862915e-002 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 0 6 2 1 3. - 0 - 5.8535612188279629e-003 - 8.6272820830345154e-002 - -6.9572478532791138e-001 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -3.6728219129145145e-003 - -2.4009980261325836e-001 - 7.2359912097454071e-002 - <_> - - <_> - - - - <_> - 2 3 4 2 -1. - <_> - 3 4 2 2 2. - 1 - 2.8104060329496861e-003 - -2.8405401110649109e-001 - 2.0643989741802216e-001 - -1.5198639631271362e+000 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 5 2 2 -1. - <_> - 6 5 2 1 2. - 1 - 1.6374010592699051e-002 - -3.7089619040489197e-001 - 5.0737190246582031e-001 - <_> - - <_> - - - - <_> - 0 12 12 5 -1. - <_> - 3 12 6 5 2. - 0 - 9.4187058508396149e-002 - -3.1576469540596008e-001 - 4.0862488746643066e-001 - <_> - - <_> - - - - <_> - 0 18 10 2 -1. - <_> - 0 18 5 1 2. - <_> - 5 19 5 1 2. - 0 - 1.1773589998483658e-002 - -3.5064500570297241e-001 - 3.1217798590660095e-001 - <_> - - <_> - - - - <_> - 3 3 8 13 -1. - <_> - 5 3 4 13 2. - 0 - 1.0922340303659439e-001 - -1.2247060239315033e-001 - 2.5683128833770752e-001 - <_> - - <_> - - - - <_> - 1 3 8 13 -1. - <_> - 3 3 4 13 2. - 0 - -6.6653150133788586e-003 - 2.3083719611167908e-001 - -4.8135739564895630e-001 - <_> - - <_> - - - - <_> - 11 0 1 4 -1. - <_> - 11 0 1 2 2. - 1 - -4.5095751993358135e-003 - 1.6601459681987762e-001 - -1.2917369604110718e-001 - <_> - - <_> - - - - <_> - 0 1 10 2 -1. - <_> - 0 1 5 1 2. - <_> - 5 2 5 1 2. - 0 - -1.1136589571833611e-002 - 3.8687920570373535e-001 - -2.2618110477924347e-001 - <_> - - <_> - - - - <_> - 4 11 8 5 -1. - <_> - 4 11 4 5 2. - 0 - -1.5101970732212067e-001 - 7.8407418727874756e-001 - -5.6705389171838760e-002 - <_> - - <_> - - - - <_> - 0 0 1 14 -1. - <_> - 0 7 1 7 2. - 0 - 3.5842441022396088e-002 - -3.3353409171104431e-001 - 2.6884201169013977e-001 - <_> - - <_> - - - - <_> - 8 10 4 6 -1. - <_> - 6 12 4 2 3. - 1 - 6.0237798839807510e-002 - 6.6777043044567108e-002 - -5.8397102355957031e-001 - <_> - - <_> - - - - <_> - 4 10 6 4 -1. - <_> - 6 12 2 4 3. - 1 - 6.8902626633644104e-002 - -3.2930138707160950e-001 - 2.3172050714492798e-001 - <_> - - <_> - - - - <_> - 0 17 12 2 -1. - <_> - 0 17 6 2 2. - 0 - -1.1977110058069229e-001 - 7.2716677188873291e-001 - -1.0525380074977875e-001 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 4 7 3 1 3. - 1 - 1.8936740234494209e-002 - -1.3431450724601746e-001 - 5.6203877925872803e-001 - <_> - - <_> - - - - <_> - 6 9 6 4 -1. - <_> - 6 9 3 4 2. - 1 - 8.3808198571205139e-002 - -4.9557849764823914e-002 - 1.0450640320777893e-001 - <_> - - <_> - - - - <_> - 6 9 4 6 -1. - <_> - 6 9 4 3 2. - 1 - 3.3902268856763840e-002 - 9.9094279110431671e-002 - -7.6239812374114990e-001 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 1 - -8.1007126718759537e-003 - -4.3555849790573120e-001 - 2.2304659709334373e-002 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 2.4974169209599495e-003 - 9.3714617192745209e-002 - -6.8376600742340088e-001 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - 1.0426550172269344e-002 - -1.1307760328054428e-001 - 4.3951630592346191e-001 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 1 0 1 4 2. - 0 - -2.4919810239225626e-003 - -4.9109318852424622e-001 - 1.2399309873580933e-001 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - -4.4614528305828571e-003 - 3.4285509586334229e-001 - -1.3288980722427368e-001 - <_> - - <_> - - - - <_> - 1 9 3 2 -1. - <_> - 2 9 1 2 3. - 0 - -6.9255861453711987e-003 - 4.0674179792404175e-001 - -1.4747169613838196e-001 - <_> - - <_> - - - - <_> - 8 1 4 1 -1. - <_> - 9 2 2 1 2. - 1 - 1.4747819863259792e-002 - -1.7921010032296181e-002 - 1.5927059948444366e-001 - <_> - - <_> - - - - <_> - 4 1 1 4 -1. - <_> - 3 2 1 2 2. - 1 - 9.8200701177120209e-003 - 8.6944580078125000e-002 - -6.7220121622085571e-001 - -1.2744859457015991e+000 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 2 12 4 -1. - <_> - 0 4 12 2 2. - 0 - 3.0345980077981949e-002 - -5.6813991069793701e-001 - 2.7571758627891541e-001 - <_> - - <_> - - - - <_> - 8 9 3 8 -1. - <_> - 6 11 3 4 2. - 1 - -4.5385681092739105e-002 - -5.6568390130996704e-001 - 4.2446270585060120e-002 - <_> - - <_> - - - - <_> - 2 6 8 14 -1. - <_> - 2 6 4 7 2. - <_> - 6 13 4 7 2. - 0 - -2.4006670713424683e-001 - 3.9162129163742065e-001 - -3.0378338694572449e-001 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - -1.0817600414156914e-003 - -7.0329940319061279e-001 - 1.1626099795103073e-001 - <_> - - <_> - - - - <_> - 0 18 2 2 -1. - <_> - 0 19 2 1 2. - 0 - -1.6060429625213146e-003 - 2.2388499975204468e-001 - -4.8557040095329285e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -1.0570240020751953e-001 - -7.4889171123504639e-001 - 2.8992230072617531e-002 - <_> - - <_> - - - - <_> - 4 6 4 4 -1. - <_> - 4 7 4 2 2. - 0 - -2.3500300012528896e-003 - 2.3428779840469360e-001 - -4.2647179961204529e-001 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 7 1 2 1 3. - 1 - -6.1817590147256851e-002 - -8.9189022779464722e-001 - -1.0216370224952698e-002 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 1 1 2 3. - 1 - 5.4469848982989788e-003 - -2.6281470060348511e-001 - 3.1677961349487305e-001 - <_> - - <_> - - - - <_> - 11 7 1 2 -1. - <_> - 11 8 1 1 2. - 0 - -6.7602698691189289e-003 - -7.9144752025604248e-001 - 1.2072199955582619e-002 - <_> - - <_> - - - - <_> - 0 7 1 2 -1. - <_> - 0 8 1 1 2. - 0 - 7.8887082054279745e-005 - -4.4443818926811218e-001 - 1.9887650012969971e-001 - <_> - - <_> - - - - <_> - 4 0 8 8 -1. - <_> - 6 0 4 8 2. - 0 - 6.4817398786544800e-002 - -2.3440040647983551e-001 - 2.8372839093208313e-001 - <_> - - <_> - - - - <_> - 0 12 12 7 -1. - <_> - 6 12 6 7 2. - 0 - 2.9690501093864441e-001 - -1.1379630118608475e-001 - 8.4734469652175903e-001 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -1.2669449672102928e-002 - -5.3791618347167969e-001 - 5.0364010035991669e-002 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 3.2963419798761606e-003 - 9.5009326934814453e-002 - -6.9295811653137207e-001 - <_> - - <_> - - - - <_> - 6 10 2 6 -1. - <_> - 4 12 2 2 3. - 1 - 8.1940039992332458e-002 - 6.4861620776355267e-003 - -4.8242160677909851e-001 - <_> - - <_> - - - - <_> - 0 4 1 3 -1. - <_> - 0 5 1 1 3. - 0 - 4.5874840579926968e-003 - 7.4269242584705353e-002 - -8.5056728124618530e-001 - <_> - - <_> - - - - <_> - 9 8 3 4 -1. - <_> - 10 8 1 4 3. - 0 - 1.3228190131485462e-002 - -1.8141390383243561e-001 - 5.5488282442092896e-001 - <_> - - <_> - - - - <_> - 0 6 1 2 -1. - <_> - 0 7 1 1 2. - 0 - 8.3280639955773950e-005 - -3.5342589020729065e-001 - 1.6182580590248108e-001 - <_> - - <_> - - - - <_> - 4 4 6 12 -1. - <_> - 4 7 6 6 2. - 0 - 9.3232236802577972e-002 - 3.6166220903396606e-002 - -3.9560291171073914e-001 - <_> - - <_> - - - - <_> - 3 16 4 4 -1. - <_> - 3 18 4 2 2. - 0 - -1.7989000305533409e-002 - 1.8585060536861420e-001 - -2.9997050762176514e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 7 4 1 6 3. - 1 - 8.5582181811332703e-002 - -2.3212260566651821e-003 - -7.5706237554550171e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 5 4 6 1 3. - 1 - 1.4874819666147232e-002 - -2.1825970709323883e-001 - 2.7366569638252258e-001 - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 8 6 1 3 3. - 1 - 2.0184369757771492e-002 - 3.5116590559482574e-002 - -4.5619380474090576e-001 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 4 6 3 1 3. - 1 - 1.4273890294134617e-002 - -1.2478730082511902e-001 - 6.1065578460693359e-001 - <_> - - <_> - - - - <_> - 11 0 1 6 -1. - <_> - 11 3 1 3 2. - 0 - 2.6945620775222778e-002 - -5.6217260658740997e-002 - 4.3960160017013550e-001 - <_> - - <_> - - - - <_> - 0 4 6 16 -1. - <_> - 0 12 6 8 2. - 0 - -1.4722250401973724e-002 - -7.0504772663116455e-001 - 8.9823968708515167e-002 - <_> - - <_> - - - - <_> - 11 0 1 6 -1. - <_> - 11 3 1 3 2. - 0 - -3.9676232263445854e-003 - -2.0258559286594391e-001 - 2.4594809859991074e-002 - <_> - - <_> - - - - <_> - 6 12 6 1 -1. - <_> - 6 12 3 1 2. - 1 - -6.9255158305168152e-002 - 7.7862018346786499e-001 - -8.2329802215099335e-002 - -1.3562519550323486e+000 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 13 12 3 -1. - <_> - 3 13 6 3 2. - 0 - 4.2280860245227814e-002 - -4.3323940038681030e-001 - 3.1084230542182922e-001 - <_> - - <_> - - - - <_> - 4 6 8 2 -1. - <_> - 6 6 4 2 2. - 0 - 3.2466039061546326e-002 - -2.5457349419593811e-001 - 2.8453230857849121e-001 - <_> - - <_> - - - - <_> - 4 2 4 2 -1. - <_> - 4 2 2 1 2. - <_> - 6 3 2 1 2. - 0 - 3.9204079657793045e-003 - -2.4197019636631012e-001 - 3.8850378990173340e-001 - <_> - - <_> - - - - <_> - 10 0 2 6 -1. - <_> - 10 3 2 3 2. - 0 - 1.4881529845297337e-002 - -2.0224849879741669e-001 - 2.0803029835224152e-001 - <_> - - <_> - - - - <_> - 0 4 4 4 -1. - <_> - 0 4 2 2 2. - <_> - 2 6 2 2 2. - 0 - -4.8258059541694820e-004 - 2.0644129812717438e-001 - -4.6135428547859192e-001 - <_> - - <_> - - - - <_> - 10 0 2 6 -1. - <_> - 10 3 2 3 2. - 0 - 1.0871110111474991e-001 - -1.1968149803578854e-002 - -8.3505737781524658e-001 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 0 3 2 3 2. - 0 - 1.1553530202945694e-004 - -6.2181282043457031e-001 - 1.2894719839096069e-001 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - 1.9984820391982794e-003 - 1.2071420252323151e-001 - -5.1865231990814209e-001 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -1.9442409393377602e-004 - 1.5316960215568542e-001 - -4.6682178974151611e-001 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 6 13 1 3 2. - 1 - 3.4691508859395981e-002 - 5.2325479686260223e-002 - -5.6493771076202393e-001 - <_> - - <_> - - - - <_> - 0 17 12 3 -1. - <_> - 6 17 6 3 2. - 0 - 1.2708869576454163e-001 - -1.1623410135507584e-001 - 6.6390967369079590e-001 - <_> - - <_> - - - - <_> - 0 13 12 6 -1. - <_> - 0 13 6 6 2. - 0 - 1.8425850570201874e-001 - -2.9410699009895325e-001 - 2.7760609984397888e-001 - <_> - - <_> - - - - <_> - 0 5 8 4 -1. - <_> - 0 5 4 2 2. - <_> - 4 7 4 2 2. - 0 - -1.0079169645905495e-002 - 2.0110170543193817e-001 - -3.7747490406036377e-001 - <_> - - <_> - - - - <_> - 1 0 10 3 -1. - <_> - 1 1 10 1 3. - 0 - 2.3211309686303139e-002 - -1.5770949423313141e-001 - 4.1628879308700562e-001 - <_> - - <_> - - - - <_> - 0 2 12 6 -1. - <_> - 0 5 12 3 2. - 0 - -8.5837738588452339e-003 - -6.4297300577163696e-001 - 9.1064400970935822e-002 - <_> - - <_> - - - - <_> - 5 0 5 18 -1. - <_> - 5 6 5 6 3. - 0 - 3.0105128884315491e-001 - 1.8554370850324631e-002 - -3.6014398932456970e-001 - <_> - - <_> - - - - <_> - 0 0 9 9 -1. - <_> - 3 0 3 9 3. - 0 - 5.5468631908297539e-003 - 1.1459550261497498e-001 - -5.0818997621536255e-001 - <_> - - <_> - - - - <_> - 11 6 1 3 -1. - <_> - 11 7 1 1 3. - 0 - -3.2614849042147398e-003 - -6.5068858861923218e-001 - 7.1761913597583771e-002 - <_> - - <_> - - - - <_> - 2 12 4 2 -1. - <_> - 2 12 2 2 2. - 1 - -2.1482119336724281e-003 - 1.3169400393962860e-001 - -3.7837469577789307e-001 - <_> - - <_> - - - - <_> - 11 6 1 3 -1. - <_> - 11 7 1 1 3. - 0 - 4.2770840227603912e-003 - 4.9258850514888763e-002 - -5.8316987752914429e-001 - <_> - - <_> - - - - <_> - 1 10 3 1 -1. - <_> - 2 10 1 1 3. - 0 - -2.8884320054203272e-003 - 3.1445708870887756e-001 - -1.6602359712123871e-001 - <_> - - <_> - - - - <_> - 9 14 3 4 -1. - <_> - 9 16 3 2 2. - 0 - -4.7958120703697205e-002 - -7.2590202093124390e-001 - 1.5948530286550522e-002 - <_> - - <_> - - - - <_> - 0 14 3 4 -1. - <_> - 0 16 3 2 2. - 0 - 2.6324709877371788e-002 - 7.4111200869083405e-002 - -6.6733390092849731e-001 - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 8 6 1 3 3. - 1 - 1.3688339851796627e-002 - 4.7244258224964142e-002 - -3.2059279084205627e-001 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 4 6 3 1 3. - 1 - 1.5577600337564945e-002 - -9.6644677221775055e-002 - 5.0794398784637451e-001 - <_> - - <_> - - - - <_> - 11 6 1 3 -1. - <_> - 11 7 1 1 3. - 0 - -8.4227044135332108e-003 - -9.9238747358322144e-001 - 2.0270830020308495e-002 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - 3.8861939683556557e-003 - 7.3856048285961151e-002 - -6.7188322544097900e-001 - <_> - - <_> - - - - <_> - 3 6 6 8 -1. - <_> - 3 10 6 4 2. - 0 - -3.3598121255636215e-002 - -7.3445242643356323e-001 - 5.7080879807472229e-002 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 5 5 4 1 3. - 1 - 1.7251629382371902e-002 - -1.3607659935951233e-001 - 4.2951139807701111e-001 - <_> - - <_> - - - - <_> - 8 5 3 4 -1. - <_> - 9 6 1 4 3. - 1 - -3.1715810298919678e-002 - -7.4400889873504639e-001 - 3.3651608973741531e-002 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 3 6 4 1 3. - 1 - 1.0187040083110332e-002 - -1.6512380540370941e-001 - 3.5162070393562317e-001 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 1 1 1 3. - 1 - 3.7060850299894810e-003 - 6.8452596664428711e-002 - -1.8737269937992096e-001 - <_> - - <_> - - - - <_> - 3 0 2 3 -1. - <_> - 2 1 2 1 3. - 1 - -9.5564024522900581e-003 - -5.8053100109100342e-001 - 8.2600042223930359e-002 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -1.4073489606380463e-001 - -1. - -6.1561721377074718e-003 - -1.4609309434890747e+000 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 4 2 4 -1. - <_> - 5 5 2 2 2. - 0 - 8.2872863858938217e-003 - -3.3240118622779846e-001 - 4.0866941213607788e-001 - <_> - - <_> - - - - <_> - 3 14 6 6 -1. - <_> - 3 17 6 3 2. - 0 - -5.3943969309329987e-002 - 2.7990311384201050e-001 - -3.5782578587532043e-001 - <_> - - <_> - - - - <_> - 0 5 8 12 -1. - <_> - 2 5 4 12 2. - 0 - -1.1539819650352001e-002 - 2.1358589828014374e-001 - -4.5100399851799011e-001 - <_> - - <_> - - - - <_> - 11 0 1 4 -1. - <_> - 11 0 1 2 2. - 1 - -1.5745559707283974e-002 - 2.1471889317035675e-001 - -9.9175170063972473e-002 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 1 0 2 1 2. - 1 - -1.3527829432860017e-003 - 1.5119549632072449e-001 - -5.2674210071563721e-001 - <_> - - <_> - - - - <_> - 4 18 6 2 -1. - <_> - 7 18 3 1 2. - <_> - 4 19 3 1 2. - 0 - -1.1468210257589817e-002 - 1.3523469865322113e-001 - -3.7286050617694855e-002 - <_> - - <_> - - - - <_> - 0 18 8 2 -1. - <_> - 0 18 4 1 2. - <_> - 4 19 4 1 2. - 0 - 8.5535906255245209e-003 - -2.5730869174003601e-001 - 2.4693550169467926e-001 - <_> - - <_> - - - - <_> - 4 0 8 8 -1. - <_> - 6 0 4 8 2. - 0 - 5.6266319006681442e-002 - -2.1571849286556244e-001 - 1.8734970688819885e-001 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - 2.0349300466477871e-003 - 8.9395299553871155e-002 - -6.2484967708587646e-001 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - -1.0920839849859476e-003 - -3.2366481423377991e-001 - 6.9054901599884033e-002 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 6 13 3 1 2. - 1 - -5.1597058773040771e-002 - 6.1383968591690063e-001 - -9.5396347343921661e-002 - <_> - - <_> - - - - <_> - 0 13 12 1 -1. - <_> - 3 13 6 1 2. - 0 - 1.7433969303965569e-002 - -2.5729641318321228e-001 - 2.5275719165802002e-001 - <_> - - <_> - - - - <_> - 0 11 8 5 -1. - <_> - 4 11 4 5 2. - 0 - 7.6819643378257751e-002 - 8.7492428719997406e-002 - -6.7382502555847168e-001 - <_> - - <_> - - - - <_> - 8 6 4 14 -1. - <_> - 10 6 2 7 2. - <_> - 8 13 2 7 2. - 0 - 8.0648958683013916e-002 - -5.7000648230314255e-002 - 4.2771929502487183e-001 - <_> - - <_> - - - - <_> - 0 6 4 14 -1. - <_> - 0 6 2 7 2. - <_> - 2 13 2 7 2. - 0 - 7.0360638201236725e-003 - -4.2870849370956421e-001 - 1.4574399590492249e-001 - <_> - - <_> - - - - <_> - 4 3 8 2 -1. - <_> - 4 4 8 1 2. - 0 - 4.9487157957628369e-004 - -4.4867759943008423e-001 - 8.7952293455600739e-002 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -2.0319919567555189e-003 - -6.9378471374511719e-001 - 7.9090960323810577e-002 - <_> - - <_> - - - - <_> - 1 0 10 3 -1. - <_> - 1 1 10 1 3. - 0 - 1.5986919403076172e-002 - -1.8177279829978943e-001 - 3.3544349670410156e-001 - <_> - - <_> - - - - <_> - 0 18 3 2 -1. - <_> - 1 18 1 2 3. - 0 - 1.0031439887825400e-004 - -2.8036159276962280e-001 - 1.8939669430255890e-001 - <_> - - <_> - - - - <_> - 0 4 12 12 -1. - <_> - 0 8 12 4 3. - 0 - -2.0664870738983154e-001 - -7.0004421472549438e-001 - 6.2915571033954620e-002 - <_> - - <_> - - - - <_> - 0 6 6 14 -1. - <_> - 0 13 6 7 2. - 0 - 1.0939550120383501e-003 - -5.6122779846191406e-001 - 7.9117156565189362e-002 - <_> - - <_> - - - - <_> - 8 0 3 1 -1. - <_> - 9 1 1 1 3. - 1 - 1.0714650154113770e-002 - 3.6672711372375488e-002 - -4.8171210289001465e-001 - <_> - - <_> - - - - <_> - 5 7 2 3 -1. - <_> - 4 8 2 1 3. - 1 - 1.2993469834327698e-002 - -1.3089600205421448e-001 - 3.2844379544258118e-001 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - 5.4268362000584602e-003 - 4.6886149793863297e-002 - -5.8115488290786743e-001 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 2 1 3 1 2. - 1 - 1.0718739591538906e-002 - 5.9297699481248856e-002 - -6.6856807470321655e-001 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - -3.1285220757126808e-003 - -3.5857740044593811e-001 - 2.8134709224104881e-002 - <_> - - <_> - - - - <_> - 3 17 1 2 -1. - <_> - 3 17 1 1 2. - 1 - 5.2357040112838149e-004 - -3.4198528528213501e-001 - 1.2199939787387848e-001 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - 1.0644399560987949e-002 - 3.9803087711334229e-003 - -6.9705927371978760e-001 - <_> - - <_> - - - - <_> - 6 6 2 3 -1. - <_> - 5 7 2 1 3. - 1 - 1.5901770442724228e-002 - -7.6809287071228027e-002 - 5.2953928709030151e-001 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - -1.0395360179245472e-002 - -6.4491081237792969e-001 - 1.0781600140035152e-002 - <_> - - <_> - - - - <_> - 0 3 1 3 -1. - <_> - 0 4 1 1 3. - 0 - 3.7131321150809526e-003 - 6.6979996860027313e-002 - -6.2111258506774902e-001 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 7 5 1 2 3. - 1 - 2.3174570873379707e-002 - 1.6732679679989815e-002 - -4.5888119935989380e-001 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 5 5 2 1 3. - 1 - 1.1146579869091511e-002 - -1.1638499796390533e-001 - 4.3002909421920776e-001 - <_> - - <_> - - - - <_> - 11 8 1 4 -1. - <_> - 11 9 1 2 2. - 0 - 1.2715480290353298e-002 - 1.6517929732799530e-002 - -6.6795057058334351e-001 - <_> - - <_> - - - - <_> - 6 2 4 6 -1. - <_> - 4 4 4 2 3. - 1 - -1.2653400190174580e-002 - 1.1365109682083130e-001 - -3.7035998702049255e-001 - <_> - - <_> - - - - <_> - 5 17 6 2 -1. - <_> - 8 17 3 1 2. - <_> - 5 18 3 1 2. - 0 - -7.1139880456030369e-003 - 1.7468209564685822e-001 - -1.2769439816474915e-001 - <_> - - <_> - - - - <_> - 3 0 6 2 -1. - <_> - 3 0 3 1 2. - <_> - 6 1 3 1 2. - 0 - -1.3703290373086929e-002 - 4.2330458760261536e-001 - -9.5448397099971771e-002 - <_> - - <_> - - - - <_> - 11 3 1 2 -1. - <_> - 11 4 1 1 2. - 0 - 7.5888428837060928e-003 - -8.7192570790648460e-003 - 3.0307659506797791e-001 - <_> - - <_> - - - - <_> - 0 3 1 2 -1. - <_> - 0 4 1 1 2. - 0 - -5.7711452245712280e-004 - -5.0375598669052124e-001 - 9.0188682079315186e-002 - <_> - - <_> - - - - <_> - 10 4 2 4 -1. - <_> - 10 5 2 2 2. - 0 - -6.1391671188175678e-003 - -6.0663592815399170e-001 - 4.6589769423007965e-002 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 9 1 2 2. - 0 - 9.4300412456505001e-005 - -2.6559790968894958e-001 - 1.5030109882354736e-001 - <_> - - <_> - - - - <_> - 0 13 12 5 -1. - <_> - 0 13 6 5 2. - 0 - -2.4399429559707642e-001 - 6.4060389995574951e-001 - -6.8897739052772522e-002 - <_> - - <_> - - - - <_> - 1 9 10 10 -1. - <_> - 1 9 5 5 2. - <_> - 6 14 5 5 2. - 0 - -1.2823240458965302e-001 - 2.1190899610519409e-001 - -2.7341139316558838e-001 - -1.4843599796295166e+000 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 1 6 2 -1. - <_> - 1 1 3 1 2. - <_> - 4 2 3 1 2. - 0 - -9.8697589710354805e-003 - 4.8807978630065918e-001 - -2.6589471101760864e-001 - <_> - - <_> - - - - <_> - 7 4 3 5 -1. - <_> - 8 5 1 5 3. - 1 - 3.3131919801235199e-002 - 3.2597500830888748e-002 - -6.3295251131057739e-001 - <_> - - <_> - - - - <_> - 6 3 6 1 -1. - <_> - 8 5 2 1 3. - 1 - 1.7511799931526184e-002 - -3.5473251342773438e-001 - 2.8011149168014526e-001 - <_> - - <_> - - - - <_> - 11 4 1 12 -1. - <_> - 11 8 1 4 3. - 0 - -7.3885500431060791e-002 - 4.7378170490264893e-001 - -1.1292530223727226e-002 - <_> - - <_> - - - - <_> - 0 4 1 12 -1. - <_> - 0 8 1 4 3. - 0 - 1.8212760332971811e-003 - -4.6179610490798950e-001 - 1.4266149699687958e-001 - <_> - - <_> - - - - <_> - 8 8 4 8 -1. - <_> - 6 10 4 4 2. - 1 - -8.5360601544380188e-002 - -6.6754668951034546e-001 - 7.5132578611373901e-002 - <_> - - <_> - - - - <_> - 1 7 10 12 -1. - <_> - 1 7 5 6 2. - <_> - 6 13 5 6 2. - 0 - -2.7539798617362976e-001 - 3.8147959113121033e-001 - -2.3665140569210052e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - 3.0699970200657845e-002 - 5.1691979169845581e-002 - -2.4286730587482452e-001 - <_> - - <_> - - - - <_> - 3 6 4 4 -1. - <_> - 3 6 2 2 2. - <_> - 5 8 2 2 2. - 0 - -9.6332989633083344e-003 - 3.3072310686111450e-001 - -2.0818190276622772e-001 - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 3 2 1 2. - 0 - 1.6330240294337273e-002 - 3.4118140320060775e-005 - -8.0960237979888916e-001 - <_> - - <_> - - - - <_> - 0 2 2 2 -1. - <_> - 0 3 2 1 2. - 0 - 8.6133222794160247e-005 - -3.7730661034584045e-001 - 1.3947279751300812e-001 - <_> - - <_> - - - - <_> - 8 17 2 1 -1. - <_> - 8 17 1 1 2. - 1 - -3.0760519206523895e-002 - 6.7611587047576904e-001 - -1.4665770344436169e-002 - <_> - - <_> - - - - <_> - 0 8 3 3 -1. - <_> - 1 8 1 3 3. - 0 - 6.8717780523002148e-003 - -1.6677060723304749e-001 - 3.0840030312538147e-001 - <_> - - <_> - - - - <_> - 5 14 3 6 -1. - <_> - 6 14 1 6 3. - 0 - 1.7696250230073929e-002 - 3.8468770682811737e-002 - -5.9128028154373169e-001 - <_> - - <_> - - - - <_> - 4 14 3 5 -1. - <_> - 5 14 1 5 3. - 0 - 1.4457659795880318e-002 - 7.1180373430252075e-002 - -6.8788748979568481e-001 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 1 2 1 2. - 0 - 4.4003669172525406e-003 - -1.7107939720153809e-001 - 3.3334150910377502e-001 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -1.9785019103437662e-003 - -6.3402158021926880e-001 - 8.5248172283172607e-002 - <_> - - <_> - - - - <_> - 0 12 12 7 -1. - <_> - 0 12 6 7 2. - 0 - -3.5506778955459595e-001 - 6.9163411855697632e-001 - -8.7763786315917969e-002 - <_> - - <_> - - - - <_> - 6 14 3 2 -1. - <_> - 7 15 1 2 3. - 1 - 1.2596770189702511e-002 - -2.0116379857063293e-001 - 3.4040948748588562e-001 - <_> - - <_> - - - - <_> - 11 16 1 4 -1. - <_> - 11 18 1 2 2. - 0 - -2.3926040157675743e-003 - -6.2525659799575806e-001 - 1.1060170084238052e-001 - <_> - - <_> - - - - <_> - 0 16 1 4 -1. - <_> - 0 18 1 2 2. - 0 - -8.7672837253194302e-005 - 1.4002850651741028e-001 - -3.9103108644485474e-001 - <_> - - <_> - - - - <_> - 4 2 6 4 -1. - <_> - 4 4 6 2 2. - 0 - 5.4524061270058155e-003 - -3.1052809953689575e-001 - 6.3757672905921936e-002 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 4 7 3 1 3. - 1 - 1.2568219564855099e-002 - -1.3675519824028015e-001 - 3.2680550217628479e-001 - <_> - - <_> - - - - <_> - 8 0 4 20 -1. - <_> - 8 10 4 10 2. - 0 - 3.7843358516693115e-001 - -3.7364691495895386e-002 - 3.7789309024810791e-001 - <_> - - <_> - - - - <_> - 3 11 2 3 -1. - <_> - 3 12 2 1 3. - 0 - -3.3601790200918913e-003 - 2.9605069756507874e-001 - -1.5206739306449890e-001 - <_> - - <_> - - - - <_> - 8 0 4 20 -1. - <_> - 8 10 4 10 2. - 0 - -4.3185380101203918e-001 - -6.8029761314392090e-001 - 1.2745309621095657e-002 - <_> - - <_> - - - - <_> - 0 0 4 20 -1. - <_> - 0 10 4 10 2. - 0 - 7.3479618877172470e-003 - -6.6707527637481689e-001 - 6.7926846444606781e-002 - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 6 6 3 1 3. - 1 - 7.5943907722830772e-003 - -1.1112800240516663e-001 - 2.2462299466133118e-001 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 6 1 3 3. - 1 - -7.3589297244325280e-005 - 1.3988719880580902e-001 - -3.4220328927040100e-001 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 1 1 1 3. - 1 - -1.0304169700248167e-004 - 8.2018472254276276e-002 - -1.0476870089769363e-001 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - -5.4624290205538273e-003 - -5.1264250278472900e-001 - 9.2095062136650085e-002 - <_> - - <_> - - - - <_> - 0 9 12 3 -1. - <_> - 0 10 12 1 3. - 0 - 1.9663229584693909e-002 - 6.1935991048812866e-002 - -6.1648821830749512e-001 - <_> - - <_> - - - - <_> - 0 0 8 1 -1. - <_> - 2 0 4 1 2. - 0 - -1.1055600043619052e-004 - 1.4308770000934601e-001 - -2.7447059750556946e-001 - <_> - - <_> - - - - <_> - 7 13 4 2 -1. - <_> - 9 13 2 1 2. - <_> - 7 14 2 1 2. - 0 - 3.8737419527024031e-003 - -1.0690200328826904e-001 - 2.0657220482826233e-001 - <_> - - <_> - - - - <_> - 1 13 4 2 -1. - <_> - 1 13 2 1 2. - <_> - 3 14 2 1 2. - 0 - -4.5131230726838112e-003 - 3.4341660141944885e-001 - -1.2317349761724472e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - -6.1594668775796890e-002 - 9.3623742461204529e-002 - -4.5765519142150879e-002 - <_> - - <_> - - - - <_> - 2 9 2 1 -1. - <_> - 3 9 1 1 2. - 0 - 1.2142979539930820e-003 - -1.3058850169181824e-001 - 3.0691918730735779e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - 1.3168719410896301e-001 - 1.1348670348525047e-002 - -3.6062520742416382e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - -9.8962578922510147e-003 - 9.7268536686897278e-002 - -4.5470228791236877e-001 - <_> - - <_> - - - - <_> - 10 6 2 3 -1. - <_> - 10 7 2 1 3. - 0 - -4.3822340667247772e-003 - -6.9014567136764526e-001 - 7.1008093655109406e-002 - <_> - - <_> - - - - <_> - 6 3 4 3 -1. - <_> - 5 4 4 1 3. - 1 - -2.4433590471744537e-002 - 5.0112801790237427e-001 - -9.8408728837966919e-002 - <_> - - <_> - - - - <_> - 7 0 3 1 -1. - <_> - 8 1 1 1 3. - 1 - -8.6958734318614006e-003 - -1.4006440341472626e-001 - 3.6845669150352478e-002 - -1.4225620031356812e+000 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 5 1 3 -1. - <_> - 5 6 1 1 3. - 1 - -1.7152750864624977e-002 - 4.7029718756675720e-001 - -2.2067089378833771e-001 - <_> - - <_> - - - - <_> - 8 9 3 8 -1. - <_> - 6 11 3 4 2. - 1 - 8.3040937781333923e-002 - 5.5113639682531357e-002 - -5.5488407611846924e-001 - <_> - - <_> - - - - <_> - 4 9 8 3 -1. - <_> - 6 11 4 3 2. - 1 - 1.2245059758424759e-001 - -2.8312590718269348e-001 - 3.4973090887069702e-001 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 6 1 1 1 3. - 0 - 7.3496531695127487e-003 - -1.3282130658626556e-001 - 4.8876601457595825e-001 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 2 1 2. - <_> - 6 1 2 1 2. - 0 - -9.3082878738641739e-003 - 4.5475938916206360e-001 - -1.4194749295711517e-001 - <_> - - <_> - - - - <_> - 0 10 12 2 -1. - <_> - 0 11 12 1 2. - 0 - 1.7290420830249786e-002 - 9.8470740020275116e-002 - -6.8155962228775024e-001 - <_> - - <_> - - - - <_> - 0 11 8 5 -1. - <_> - 4 11 4 5 2. - 0 - 6.8027682602405548e-002 - 1.2287759780883789e-001 - -5.8085542917251587e-001 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 0 2 2 2. - 0 - -2.5710109621286392e-003 - -2.8932929039001465e-001 - 9.2327423393726349e-002 - <_> - - <_> - - - - <_> - 2 2 7 8 -1. - <_> - 2 4 7 4 2. - 0 - -2.7197790332138538e-003 - -4.8277780413627625e-001 - 1.2942260503768921e-001 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 0 2 2 2. - 0 - 3.6168839782476425e-002 - -3.3225961029529572e-002 - 2.8994488716125488e-001 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 3 0 2 2 2. - 0 - -4.5704417861998081e-003 - -5.9805792570114136e-001 - 1.0446850210428238e-001 - <_> - - <_> - - - - <_> - 9 17 3 3 -1. - <_> - 9 18 3 1 3. - 0 - 3.7568379193544388e-003 - 1.2488850206136703e-001 - -5.7084852457046509e-001 - <_> - - <_> - - - - <_> - 0 17 3 3 -1. - <_> - 0 18 3 1 3. - 0 - 3.0054030939936638e-003 - -3.2693040370941162e-001 - 1.9752669334411621e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 2 2. - 0 - -1.0322710126638412e-001 - 5.9689277410507202e-001 - -9.9626749753952026e-002 - <_> - - <_> - - - - <_> - 0 11 12 5 -1. - <_> - 3 11 6 5 2. - 0 - 8.5584551095962524e-002 - -2.3595149815082550e-001 - 2.7769410610198975e-001 - <_> - - <_> - - - - <_> - 8 7 4 1 -1. - <_> - 8 7 2 1 2. - 1 - -1.7628820613026619e-002 - 2.3300230503082275e-001 - -3.8094460964202881e-002 - <_> - - <_> - - - - <_> - 4 7 1 4 -1. - <_> - 4 7 1 2 2. - 1 - -7.3259319178760052e-003 - 1.5533800423145294e-001 - -3.4289830923080444e-001 - <_> - - <_> - - - - <_> - 4 0 6 7 -1. - <_> - 6 0 2 7 3. - 0 - 1.6643910109996796e-001 - 1.3593060430139303e-004 - -6.0628050565719604e-001 - <_> - - <_> - - - - <_> - 2 0 6 7 -1. - <_> - 4 0 2 7 3. - 0 - 1.3041920028626919e-002 - 1.0876829922199249e-001 - -4.7265630960464478e-001 - <_> - - <_> - - - - <_> - 0 16 12 3 -1. - <_> - 0 17 12 1 3. - 0 - -1.3597619719803333e-002 - -5.8280581235885620e-001 - 7.2698637843132019e-002 - <_> - - <_> - - - - <_> - 4 17 4 2 -1. - <_> - 4 17 2 1 2. - <_> - 6 18 2 1 2. - 0 - 6.8220919929444790e-003 - -1.4359709620475769e-001 - 3.4434759616851807e-001 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 0 1 1 3. - 0 - -1.3025919906795025e-004 - 7.5394742190837860e-002 - -6.7537508904933929e-002 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -2.4602119810879230e-003 - -5.1882988214492798e-001 - 8.0956049263477325e-002 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 7 5 1 2 3. - 1 - -3.2538071274757385e-002 - -5.8500260114669800e-001 - 5.7338178157806396e-003 - <_> - - <_> - - - - <_> - 3 6 3 1 -1. - <_> - 4 6 1 1 3. - 0 - 2.0106420852243900e-003 - -1.0640989989042282e-001 - 4.0276700258255005e-001 - <_> - - <_> - - - - <_> - 9 2 3 7 -1. - <_> - 10 3 1 7 3. - 1 - -4.6432539820671082e-002 - -4.2023709416389465e-001 - 4.2063061147928238e-002 - <_> - - <_> - - - - <_> - 5 5 2 2 -1. - <_> - 5 5 2 1 2. - 1 - -1.2824350036680698e-002 - 4.8449409008026123e-001 - -9.4362497329711914e-002 - <_> - - <_> - - - - <_> - 7 5 3 4 -1. - <_> - 8 6 1 4 3. - 1 - 3.4120719879865646e-002 - 2.7428179979324341e-002 - -5.6730318069458008e-001 - <_> - - <_> - - - - <_> - 5 5 4 3 -1. - <_> - 4 6 4 1 3. - 1 - -4.4012650847434998e-002 - 3.7047350406646729e-001 - -1.3064679503440857e-001 - <_> - - <_> - - - - <_> - 10 4 2 2 -1. - <_> - 10 5 2 1 2. - 0 - -3.7362610455602407e-003 - -6.1717242002487183e-001 - 4.6860579401254654e-002 - <_> - - <_> - - - - <_> - 0 3 2 3 -1. - <_> - 0 4 2 1 3. - 0 - -5.2141821943223476e-003 - -6.5322470664978027e-001 - 5.3996030241250992e-002 - <_> - - <_> - - - - <_> - 10 4 2 2 -1. - <_> - 10 5 2 1 2. - 0 - 6.4924731850624084e-003 - 4.4800970703363419e-002 - -4.3987420201301575e-001 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 0 5 2 1 2. - 0 - -4.2384970001876354e-003 - -7.1687930822372437e-001 - 5.4430369287729263e-002 - <_> - - <_> - - - - <_> - 7 10 2 1 -1. - <_> - 7 10 1 1 2. - 0 - -3.1804300379008055e-003 - 2.4815900623798370e-001 - -8.9008152484893799e-002 - <_> - - <_> - - - - <_> - 3 10 2 1 -1. - <_> - 4 10 1 1 2. - 0 - 2.9277798603288829e-004 - -2.1440739929676056e-001 - 2.0239150524139404e-001 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 1 2 1 2. - 0 - -1.1838439851999283e-002 - 6.8225288391113281e-001 - -5.6109890341758728e-002 - <_> - - <_> - - - - <_> - 5 14 4 2 -1. - <_> - 5 14 4 1 2. - 1 - -2.0604960620403290e-002 - -6.4495718479156494e-001 - 6.5811157226562500e-002 - -1.3051190376281738e+000 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 6 3 3 -1. - <_> - 4 7 3 1 3. - 0 - -5.7252319529652596e-003 - 3.4108111262321472e-001 - -3.3441230654716492e-001 - <_> - - <_> - - - - <_> - 3 5 6 14 -1. - <_> - 6 5 3 7 2. - <_> - 3 12 3 7 2. - 0 - 1.5814049541950226e-001 - -2.9555070400238037e-001 - 2.9280221462249756e-001 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 3 1 3 1 2. - 0 - 3.5558689851313829e-003 - -2.8485581278800964e-001 - 2.4933080375194550e-001 - <_> - - <_> - - - - <_> - 7 18 5 2 -1. - <_> - 7 19 5 1 2. - 0 - -3.1524680089205503e-003 - -4.6672669053077698e-001 - 7.6127722859382629e-002 - <_> - - <_> - - - - <_> - 0 18 10 2 -1. - <_> - 0 19 10 1 2. - 0 - -1.4493550173938274e-002 - 2.5777289271354675e-001 - -2.4369129538536072e-001 - <_> - - <_> - - - - <_> - 11 2 1 15 -1. - <_> - 11 7 1 5 3. - 0 - -6.8386606872081757e-002 - 5.2669358253479004e-001 - 8.9219277724623680e-003 - <_> - - <_> - - - - <_> - 0 4 1 6 -1. - <_> - 0 7 1 3 2. - 0 - 1.0660409461706877e-003 - -4.9784231185913086e-001 - 1.1696430295705795e-001 - <_> - - <_> - - - - <_> - 3 2 9 8 -1. - <_> - 3 4 9 4 2. - 0 - 1.6208799555897713e-002 - -3.0983239412307739e-001 - 9.5886580646038055e-002 - <_> - - <_> - - - - <_> - 0 15 12 5 -1. - <_> - 6 15 6 5 2. - 0 - 2.8249868750572205e-001 - -7.3715627193450928e-002 - 6.4200782775878906e-001 - <_> - - <_> - - - - <_> - 6 9 3 6 -1. - <_> - 4 11 3 2 3. - 1 - 8.6361259222030640e-002 - 4.0710549801588058e-002 - -5.0559818744659424e-001 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 8 11 2 3 3. - 1 - 5.1451180130243301e-002 - -3.3384099602699280e-001 - 1.6614030301570892e-001 - <_> - - <_> - - - - <_> - 2 0 10 2 -1. - <_> - 2 0 5 2 2. - 0 - -6.9037936627864838e-002 - -3.1987860798835754e-001 - 3.4255299717187881e-002 - <_> - - <_> - - - - <_> - 0 0 10 2 -1. - <_> - 5 0 5 2 2. - 0 - -5.6569739244878292e-003 - -6.1266559362411499e-001 - 8.3148159086704254e-002 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - -7.1886749938130379e-003 - 4.2386818677186966e-002 - -9.7789242863655090e-002 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 4 5 6 2 3. - 1 - -2.6780599728226662e-002 - 1.2735369801521301e-001 - -3.4852239489555359e-001 - <_> - - <_> - - - - <_> - 6 0 6 5 -1. - <_> - 6 0 3 5 2. - 1 - -6.9346590898931026e-003 - 4.4443860650062561e-002 - -2.6666578650474548e-001 - <_> - - <_> - - - - <_> - 6 0 5 6 -1. - <_> - 6 0 5 3 2. - 1 - 1.2057109922170639e-001 - 9.1515138745307922e-002 - -5.5102181434631348e-001 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 9 9 1 2 3. - 1 - 1.0571300052106380e-002 - -1.1927139759063721e-001 - 1.5043540298938751e-001 - <_> - - <_> - - - - <_> - 4 8 2 3 -1. - <_> - 3 9 2 1 3. - 1 - -1.4446419663727283e-002 - 3.2619118690490723e-001 - -1.3021939992904663e-001 - <_> - - <_> - - - - <_> - 11 6 1 3 -1. - <_> - 11 7 1 1 3. - 0 - 4.9188970588147640e-003 - 2.4317760020494461e-002 - -5.8825939893722534e-001 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - -3.8240209687501192e-003 - -6.5660482645034790e-001 - 6.3337683677673340e-002 - <_> - - <_> - - - - <_> - 0 11 12 8 -1. - <_> - 0 15 12 4 2. - 0 - -1.7404669523239136e-001 - -5.4772597551345825e-001 - 6.0019370168447495e-002 - <_> - - <_> - - - - <_> - 3 13 6 3 -1. - <_> - 5 13 2 3 3. - 0 - 4.5922618359327316e-002 - 5.0438169389963150e-002 - -6.9467681646347046e-001 - <_> - - <_> - - - - <_> - 5 16 2 4 -1. - <_> - 5 17 2 2 2. - 0 - -3.9035470690578222e-003 - 2.2018410265445709e-001 - -1.8376649916172028e-001 - <_> - - <_> - - - - <_> - 1 1 2 1 -1. - <_> - 1 1 1 1 2. - 1 - 1.7436769558116794e-003 - 6.1212658882141113e-002 - -5.7988357543945313e-001 - <_> - - <_> - - - - <_> - 6 15 2 3 -1. - <_> - 5 16 2 1 3. - 1 - -9.7301546484231949e-003 - -5.1599711179733276e-001 - 4.9021121114492416e-002 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 4 6 3 1 3. - 1 - -5.0866428762674332e-002 - 4.3118700385093689e-001 - -9.5599338412284851e-002 - <_> - - <_> - - - - <_> - 6 5 2 3 -1. - <_> - 6 6 2 1 3. - 0 - 1.5334750059992075e-004 - -8.4842063486576080e-002 - 5.3982339799404144e-002 - <_> - - <_> - - - - <_> - 4 5 2 3 -1. - <_> - 4 6 2 1 3. - 0 - -7.9509448260068893e-003 - 4.7792288661003113e-001 - -9.3340940773487091e-002 - <_> - - <_> - - - - <_> - 10 5 2 3 -1. - <_> - 10 6 2 1 3. - 0 - -4.4662738218903542e-003 - -6.6406428813934326e-001 - 7.0635370910167694e-002 - <_> - - <_> - - - - <_> - 6 5 2 3 -1. - <_> - 5 6 2 1 3. - 1 - 6.7459428682923317e-003 - -9.5945097506046295e-002 - 4.5204031467437744e-001 - <_> - - <_> - - - - <_> - 8 7 1 8 -1. - <_> - 6 9 1 4 2. - 1 - -4.8576910048723221e-002 - -2.5402069091796875e-001 - 3.5480510443449020e-002 - <_> - - <_> - - - - <_> - 0 5 2 3 -1. - <_> - 0 6 2 1 3. - 0 - -8.1895291805267334e-003 - -6.9631862640380859e-001 - 5.4189778864383698e-002 - <_> - - <_> - - - - <_> - 5 5 2 3 -1. - <_> - 5 5 1 3 2. - 0 - -1.3830559328198433e-004 - 7.7265933156013489e-002 - -4.3882951140403748e-001 - <_> - - <_> - - - - <_> - 4 7 8 1 -1. - <_> - 6 9 4 1 2. - 1 - -2.9827160760760307e-002 - 5.1934647560119629e-001 - -7.4816159904003143e-002 - <_> - - <_> - - - - <_> - 6 15 2 3 -1. - <_> - 5 16 2 1 3. - 1 - 1.9728230312466621e-002 - 4.6895399689674377e-002 - -5.6989020109176636e-001 - <_> - - <_> - - - - <_> - 6 15 3 2 -1. - <_> - 7 16 1 2 3. - 1 - 1.2107780203223228e-002 - -1.3739739358425140e-001 - 3.2666760683059692e-001 - <_> - - <_> - - - - <_> - 9 13 2 3 -1. - <_> - 9 14 2 1 3. - 0 - 6.9206808693706989e-003 - 4.6539328992366791e-002 - -4.9861478805541992e-001 - <_> - - <_> - - - - <_> - 1 13 2 3 -1. - <_> - 1 14 2 1 3. - 0 - 7.5631309300661087e-003 - -1.0235120356082916e-001 - 3.9567971229553223e-001 - <_> - - <_> - - - - <_> - 0 5 12 12 -1. - <_> - 0 9 12 4 3. - 0 - -2.3844289779663086e-001 - -7.1881687641143799e-001 - 4.9742348492145538e-002 - <_> - - <_> - - - - <_> - 0 9 3 2 -1. - <_> - 1 9 1 2 3. - 0 - -9.2327659949660301e-003 - 4.8625311255455017e-001 - -7.8327029943466187e-002 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 8 15 2 1 3. - 1 - 1.2344529852271080e-002 - -4.5567270368337631e-002 - 1.6513639688491821e-001 - <_> - - <_> - - - - <_> - 0 9 2 4 -1. - <_> - 0 9 1 2 2. - <_> - 1 11 1 2 2. - 0 - -1.0889769764617085e-003 - 2.3016020655632019e-001 - -1.4696329832077026e-001 - <_> - - <_> - - - - <_> - 2 17 8 2 -1. - <_> - 6 17 4 1 2. - <_> - 2 18 4 1 2. - 0 - -5.1214238628745079e-003 - 1.7787009477615356e-001 - -1.9967870414257050e-001 - <_> - - <_> - - - - <_> - 1 8 9 2 -1. - <_> - 1 9 9 1 2. - 0 - 2.3381220176815987e-002 - 3.9966959506273270e-002 - -7.6583552360534668e-001 - -1.2928479909896851e+000 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 4 1 4 -1. - <_> - 5 5 1 2 2. - 0 - 5.8875479735434055e-003 - -2.6197949051856995e-001 - 3.9267268776893616e-001 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 7 1 3 1 3. - 1 - -2.0563710480928421e-002 - 2.3240800201892853e-001 - -3.6058109253644943e-002 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 5 1 1 3 3. - 1 - 2.4195060133934021e-002 - -1.7246599495410919e-001 - 4.0554100275039673e-001 - <_> - - <_> - - - - <_> - 0 13 12 6 -1. - <_> - 0 13 6 6 2. - 0 - 2.2053229808807373e-001 - -2.4937939643859863e-001 - 2.4980540573596954e-001 - <_> - - <_> - - - - <_> - 5 4 3 3 -1. - <_> - 6 5 1 3 3. - 1 - 8.1213507801294327e-003 - 9.8432846367359161e-002 - -5.0667357444763184e-001 - <_> - - <_> - - - - <_> - 9 17 1 3 -1. - <_> - 9 18 1 1 3. - 0 - -1.5637070173397660e-003 - -4.1526609659194946e-001 - 1.3340100646018982e-001 - <_> - - <_> - - - - <_> - 2 17 1 3 -1. - <_> - 2 18 1 1 3. - 0 - 1.2210609856992960e-003 - -2.5663951039314270e-001 - 2.1268320083618164e-001 - <_> - - <_> - - - - <_> - 0 9 12 6 -1. - <_> - 0 11 12 2 3. - 0 - 4.5655488967895508e-002 - 8.5712976753711700e-002 - -5.5701047182083130e-001 - <_> - - <_> - - - - <_> - 5 6 6 2 -1. - <_> - 5 6 3 2 2. - 1 - -1.7322370782494545e-002 - 1.0083419829607010e-001 - -4.3052899837493896e-001 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - 2.7879169210791588e-002 - 4.4392268173396587e-003 - -5.7203328609466553e-001 - <_> - - <_> - - - - <_> - 6 4 4 3 -1. - <_> - 5 5 4 1 3. - 1 - -4.7942388802766800e-002 - 4.9971351027488708e-001 - -1.0569220036268234e-001 - <_> - - <_> - - - - <_> - 11 4 1 16 -1. - <_> - 11 8 1 8 2. - 0 - -9.0003162622451782e-002 - 7.7226841449737549e-001 - -3.5037949681282043e-002 - <_> - - <_> - - - - <_> - 0 0 1 20 -1. - <_> - 0 5 1 10 2. - 0 - 2.1878979168832302e-003 - -4.3980291485786438e-001 - 1.0962349921464920e-001 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -1.1160460300743580e-002 - -6.0748499631881714e-001 - 2.5118330493569374e-002 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - 2.3293609265238047e-003 - 7.4755467474460602e-002 - -5.6645327806472778e-001 - <_> - - <_> - - - - <_> - 6 13 6 6 -1. - <_> - 9 13 3 3 2. - <_> - 6 16 3 3 2. - 0 - -3.2051369547843933e-002 - 1.3710969686508179e-001 - -1.4014610648155212e-001 - <_> - - <_> - - - - <_> - 6 10 6 4 -1. - <_> - 8 12 2 4 3. - 1 - -1.0117290169000626e-001 - 6.2204962968826294e-001 - -6.4412176609039307e-002 - <_> - - <_> - - - - <_> - 1 0 10 3 -1. - <_> - 1 1 10 1 3. - 0 - 4.2040869593620300e-002 - -8.5930466651916504e-002 - 4.9315661191940308e-001 - <_> - - <_> - - - - <_> - 0 13 6 6 -1. - <_> - 0 13 3 3 2. - <_> - 3 16 3 3 2. - 0 - 2.5582410395145416e-002 - 6.1051581054925919e-002 - -6.5449321269989014e-001 - <_> - - <_> - - - - <_> - 8 8 3 1 -1. - <_> - 9 9 1 1 3. - 1 - 1.0514019988477230e-002 - -1.0234809666872025e-001 - 2.6112779974937439e-001 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 8 2 1 2. - 0 - 1.1631770030362532e-004 - -3.1768348813056946e-001 - 1.2542060017585754e-001 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 2 2. - 0 - -4.4300020672380924e-003 - 1.9109399616718292e-001 - -5.2662618458271027e-002 - <_> - - <_> - - - - <_> - 2 9 2 2 -1. - <_> - 3 9 1 2 2. - 0 - 2.0806640386581421e-003 - -1.4428110420703888e-001 - 3.0112838745117188e-001 - <_> - - <_> - - - - <_> - 11 1 1 2 -1. - <_> - 11 2 1 1 2. - 0 - 5.4104570299386978e-003 - -5.4554589092731476e-002 - 3.5240170359611511e-001 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 4 1 1 1 3. - 1 - 1.0801830329000950e-002 - 5.5018458515405655e-002 - -7.4443417787551880e-001 - <_> - - <_> - - - - <_> - 4 4 5 12 -1. - <_> - 4 8 5 4 3. - 0 - 4.2296931147575378e-002 - 6.1844110488891602e-002 - -3.3144399523735046e-001 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 1 0 1 3 3. - 0 - 5.9895617887377739e-003 - 6.4745798707008362e-002 - -5.6030327081680298e-001 - <_> - - <_> - - - - <_> - 8 7 3 3 -1. - <_> - 9 8 1 3 3. - 1 - -9.4227874651551247e-003 - -3.0067789554595947e-001 - 4.3195281177759171e-002 - <_> - - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 3 8 3 1 3. - 1 - -2.0783370360732079e-002 - 3.7524980306625366e-001 - -1.0968690365552902e-001 - <_> - - <_> - - - - <_> - 11 1 1 2 -1. - <_> - 11 2 1 1 2. - 0 - -5.2015861729159951e-004 - -1.1337819695472717e-001 - 3.7144880741834641e-002 - <_> - - <_> - - - - <_> - 0 1 1 2 -1. - <_> - 0 2 1 1 2. - 0 - -8.0162001540884376e-004 - -5.2545320987701416e-001 - 6.6209748387336731e-002 - <_> - - <_> - - - - <_> - 8 17 2 1 -1. - <_> - 8 17 1 1 2. - 1 - -2.5214110501110554e-003 - -1.5936410427093506e-001 - 5.1849711686372757e-002 - <_> - - <_> - - - - <_> - 4 17 1 2 -1. - <_> - 4 17 1 1 2. - 1 - 9.0704779722727835e-005 - -3.3334940671920776e-001 - 1.0919860005378723e-001 - <_> - - <_> - - - - <_> - 7 6 2 4 -1. - <_> - 8 6 1 2 2. - <_> - 7 8 1 2 2. - 0 - -1.8114539561793208e-003 - 1.1214060336351395e-001 - -9.0960927307605743e-002 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 6 8 6 3 2. - 1 - -1.9519029557704926e-001 - -7.2080957889556885e-001 - 5.0182379782199860e-002 - <_> - - <_> - - - - <_> - 7 6 2 4 -1. - <_> - 8 6 1 2 2. - <_> - 7 8 1 2 2. - 0 - -1.4884449541568756e-002 - -6.0010558366775513e-001 - 9.1695934534072876e-003 - <_> - - <_> - - - - <_> - 3 6 2 4 -1. - <_> - 3 6 1 2 2. - <_> - 4 8 1 2 2. - 0 - -9.3493862077593803e-003 - 4.8005661368370056e-001 - -7.6954081654548645e-002 - <_> - - <_> - - - - <_> - 6 1 6 2 -1. - <_> - 8 3 2 2 3. - 1 - 7.1461386978626251e-002 - -5.7781968265771866e-002 - 2.6106640696525574e-001 - <_> - - <_> - - - - <_> - 0 11 6 5 -1. - <_> - 3 11 3 5 2. - 0 - 5.1590640097856522e-002 - 7.1806840598583221e-002 - -4.6015501022338867e-001 - <_> - - <_> - - - - <_> - 7 13 3 3 -1. - <_> - 8 13 1 3 3. - 0 - 3.0857140664011240e-003 - -9.2065691947937012e-002 - 1.1266019940376282e-001 - <_> - - <_> - - - - <_> - 2 13 3 3 -1. - <_> - 3 13 1 3 3. - 0 - 1.7517179949209094e-003 - -1.9908079504966736e-001 - 1.9879740476608276e-001 - <_> - - <_> - - - - <_> - 6 1 6 2 -1. - <_> - 8 3 2 2 3. - 1 - 6.3493461348116398e-003 - -1.0544289648532867e-001 - 4.3338119983673096e-002 - <_> - - <_> - - - - <_> - 6 1 2 6 -1. - <_> - 4 3 2 2 3. - 1 - 4.2910311371088028e-002 - 5.2926450967788696e-002 - -6.6493779420852661e-001 - <_> - - <_> - - - - <_> - 0 0 12 7 -1. - <_> - 0 0 6 7 2. - 0 - -2.8933840990066528e-001 - -5.9245282411575317e-001 - 5.0023719668388367e-002 - <_> - - <_> - - - - <_> - 1 9 10 3 -1. - <_> - 1 10 10 1 3. - 0 - 1.9839199259877205e-002 - 4.1037648916244507e-002 - -6.7570680379867554e-001 - <_> - - <_> - - - - <_> - 0 9 12 4 -1. - <_> - 0 10 12 2 2. - 0 - -2.9357530176639557e-002 - -6.5960741043090820e-001 - 4.1811358183622360e-002 - <_> - - <_> - - - - <_> - 0 5 3 15 -1. - <_> - 0 10 3 5 3. - 0 - 8.8180392980575562e-002 - 6.5817430615425110e-002 - -4.4950678944587708e-001 - <_> - - <_> - - - - <_> - 5 0 7 18 -1. - <_> - 5 9 7 9 2. - 0 - -1.3282440602779388e-001 - -2.1098449826240540e-001 - 3.9650738239288330e-002 - <_> - - <_> - - - - <_> - 0 0 4 5 -1. - <_> - 2 0 2 5 2. - 0 - 8.0266319855581969e-005 - -2.5888821482658386e-001 - 1.1488880217075348e-001 - -1.3127609491348267e+000 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 2 4 2 -1. - <_> - 4 2 2 1 2. - <_> - 6 3 2 1 2. - 0 - 6.5426998771727085e-003 - -2.2366699576377869e-001 - 4.7720021009445190e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 6 1 3 3. - 1 - -2.2333480592351407e-004 - 1.0184849798679352e-001 - -1.8614460527896881e-001 - <_> - - <_> - - - - <_> - 3 7 6 2 -1. - <_> - 3 7 3 1 2. - <_> - 6 8 3 1 2. - 0 - -6.0191731899976730e-003 - 3.1382268667221069e-001 - -2.3328569531440735e-001 - <_> - - <_> - - - - <_> - 1 8 10 10 -1. - <_> - 6 8 5 5 2. - <_> - 1 13 5 5 2. - 0 - 1.7179940640926361e-001 - -2.9191988706588745e-001 - 2.1794080734252930e-001 - <_> - - <_> - - - - <_> - 1 0 10 3 -1. - <_> - 1 1 10 1 3. - 0 - 1.6310229897499084e-002 - -1.4051440358161926e-001 - 3.2606941461563110e-001 - <_> - - <_> - - - - <_> - 0 17 12 3 -1. - <_> - 0 17 6 3 2. - 0 - -1.5107460319995880e-001 - 6.4690059423446655e-001 - -5.2486609667539597e-002 - <_> - - <_> - - - - <_> - 0 0 1 12 -1. - <_> - 0 6 1 6 2. - 0 - 4.6439900994300842e-002 - -2.4340909719467163e-001 - 2.6854258775711060e-001 - <_> - - <_> - - - - <_> - 10 17 2 1 -1. - <_> - 10 17 1 1 2. - 1 - -4.3716500513255596e-003 - -2.9228550195693970e-001 - 9.8407112061977386e-002 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 0 18 6 1 2. - <_> - 6 19 6 1 2. - 0 - 1.6864160075783730e-002 - -2.8363880515098572e-001 - 1.9571739435195923e-001 - <_> - - <_> - - - - <_> - 6 3 3 5 -1. - <_> - 7 4 1 5 3. - 1 - 2.5575649924576283e-003 - 4.4347479939460754e-002 - -1.3447460532188416e-001 - <_> - - <_> - - - - <_> - 6 3 5 3 -1. - <_> - 5 4 5 1 3. - 1 - 2.0957190543413162e-002 - -1.8374939262866974e-001 - 2.6384368538856506e-001 - <_> - - <_> - - - - <_> - 11 5 1 3 -1. - <_> - 11 6 1 1 3. - 0 - 4.1607948951423168e-003 - 4.9291279166936874e-002 - -6.1921811103820801e-001 - <_> - - <_> - - - - <_> - 0 5 1 3 -1. - <_> - 0 6 1 1 3. - 0 - 4.1489768773317337e-003 - 4.1641891002655029e-002 - -7.3988562822341919e-001 - <_> - - <_> - - - - <_> - 7 5 3 2 -1. - <_> - 8 6 1 2 3. - 1 - 2.1313559263944626e-002 - 2.3694250732660294e-002 - -5.6835669279098511e-001 - <_> - - <_> - - - - <_> - 5 5 2 3 -1. - <_> - 4 6 2 1 3. - 1 - 1.2101300060749054e-002 - -9.5187656581401825e-002 - 4.6901950240135193e-001 - <_> - - <_> - - - - <_> - 6 0 2 1 -1. - <_> - 6 0 1 1 2. - 0 - 1.8083410104736686e-003 - 4.7500770539045334e-002 - -3.0990800261497498e-001 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 1 2 1 2. - 0 - -1.0990530252456665e-002 - 6.7560458183288574e-001 - -6.0268498957157135e-002 - <_> - - <_> - - - - <_> - 11 8 1 2 -1. - <_> - 11 9 1 1 2. - 0 - -8.9888361981138587e-004 - 1.6142509877681732e-001 - -8.0034710466861725e-002 - <_> - - <_> - - - - <_> - 0 8 1 2 -1. - <_> - 0 9 1 1 2. - 0 - 8.5803032561670989e-005 - -2.5957980751991272e-001 - 1.5043449401855469e-001 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 9 0 2 1 2. - <_> - 7 1 2 1 2. - 0 - -1.0529270395636559e-002 - 4.8798549175262451e-001 - -1.0572060197591782e-001 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 5 0 1 2 2. - 0 - -2.5140570942312479e-003 - -5.9965860843658447e-001 - 7.1445137262344360e-002 - <_> - - <_> - - - - <_> - 8 0 3 1 -1. - <_> - 9 1 1 1 3. - 1 - -2.0928360521793365e-002 - -6.3737767934799194e-001 - 1.1195439845323563e-002 - <_> - - <_> - - - - <_> - 0 4 8 12 -1. - <_> - 0 7 8 6 2. - 0 - 8.4567293524742126e-003 - 1.0487599670886993e-001 - -3.3027571439743042e-001 - <_> - - <_> - - - - <_> - 0 14 12 6 -1. - <_> - 0 16 12 2 3. - 0 - 1.1649870127439499e-001 - 4.9215629696846008e-002 - -7.1875381469726563e-001 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 1.0911310091614723e-002 - 4.0617398917675018e-002 - -7.1910649538040161e-001 - <_> - - <_> - - - - <_> - 10 17 2 1 -1. - <_> - 10 17 1 1 2. - 1 - -2.4141639471054077e-002 - 4.6759098768234253e-001 - -3.2959330826997757e-002 - <_> - - <_> - - - - <_> - 2 17 1 2 -1. - <_> - 2 17 1 1 2. - 1 - 1.2029770296066999e-003 - -3.1624960899353027e-001 - 1.1505530029535294e-001 - <_> - - <_> - - - - <_> - 9 2 3 1 -1. - <_> - 10 3 1 1 3. - 1 - 9.8068173974752426e-003 - -3.6025181412696838e-002 - 1.7123579978942871e-001 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - 6.7418841645121574e-003 - 6.2854416668415070e-002 - -5.5376541614532471e-001 - <_> - - <_> - - - - <_> - 10 11 2 2 -1. - <_> - 10 12 2 1 2. - 0 - -1.3345720246434212e-002 - -7.5741612911224365e-001 - 9.3524847179651260e-003 - <_> - - <_> - - - - <_> - 0 9 12 8 -1. - <_> - 0 11 12 4 2. - 0 - 8.8471651077270508e-002 - 5.5774558335542679e-002 - -5.2644717693328857e-001 - <_> - - <_> - - - - <_> - 5 8 2 8 -1. - <_> - 5 10 2 4 2. - 0 - -1.4308050274848938e-002 - -5.0163388252258301e-001 - 6.1552900820970535e-002 - <_> - - <_> - - - - <_> - 5 5 1 2 -1. - <_> - 5 6 1 1 2. - 0 - 2.3234330583363771e-003 - -8.7273299694061279e-002 - 3.7597200274467468e-001 - <_> - - <_> - - - - <_> - 9 4 3 4 -1. - <_> - 9 5 3 2 2. - 0 - -6.6605149768292904e-003 - -5.6011527776718140e-001 - 4.5979429036378860e-002 - <_> - - <_> - - - - <_> - 1 7 4 1 -1. - <_> - 3 7 2 1 2. - 0 - -2.3684150073677301e-004 - 9.2453077435493469e-002 - -3.4188869595527649e-001 - <_> - - <_> - - - - <_> - 10 9 2 1 -1. - <_> - 10 9 1 1 2. - 0 - 5.2499719895422459e-003 - -1.0243079811334610e-001 - 3.8211381435394287e-001 - <_> - - <_> - - - - <_> - 0 9 2 1 -1. - <_> - 1 9 1 1 2. - 0 - 9.6710777143016458e-005 - -1.4891329407691956e-001 - 2.4878869950771332e-001 - <_> - - <_> - - - - <_> - 10 6 2 1 -1. - <_> - 10 6 1 1 2. - 1 - -3.1435599084943533e-003 - 2.0501570403575897e-001 - -5.9435389935970306e-002 - <_> - - <_> - - - - <_> - 2 6 1 2 -1. - <_> - 2 6 1 1 2. - 1 - -1.9189229351468384e-004 - 1.2612619996070862e-001 - -3.2496848702430725e-001 - <_> - - <_> - - - - <_> - 6 5 1 3 -1. - <_> - 6 6 1 1 3. - 0 - -4.6893218532204628e-003 - 3.2404568791389465e-001 - -3.2848190516233444e-002 - <_> - - <_> - - - - <_> - 0 4 1 3 -1. - <_> - 0 5 1 1 3. - 0 - 3.0783370602875948e-003 - 5.5750191211700439e-002 - -5.7443851232528687e-001 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 9 0 2 1 2. - <_> - 7 1 2 1 2. - 0 - 1.3539710082113743e-002 - -3.2638911157846451e-002 - 4.8875731229782104e-001 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 1 0 2 1 2. - <_> - 3 1 2 1 2. - 0 - 8.2393882621545345e-005 - -2.2491760551929474e-001 - 1.5178939700126648e-001 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 6 0 1 3 3. - 0 - -9.3342671170830727e-003 - -5.7278221845626831e-001 - 4.6149488538503647e-002 - <_> - - <_> - - - - <_> - 4 11 3 3 -1. - <_> - 5 12 1 3 3. - 1 - 4.5541571453213692e-003 - -2.0548130571842194e-001 - 1.4704200625419617e-001 - <_> - - <_> - - - - <_> - 6 10 1 6 -1. - <_> - 6 10 1 3 2. - 1 - 2.4691719561815262e-002 - 2.0886249840259552e-002 - -5.6028658151626587e-001 - <_> - - <_> - - - - <_> - 2 9 2 1 -1. - <_> - 3 9 1 1 2. - 0 - 9.7412186732981354e-005 - -1.5648730099201202e-001 - 1.9009509682655334e-001 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 9 1 3 1 2. - 0 - 5.7823117822408676e-003 - -1.2173660099506378e-001 - 2.1024130284786224e-001 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 6 11 3 1 2. - 1 - -6.4938321709632874e-002 - 5.5764448642730713e-001 - -6.1514221131801605e-002 - <_> - - <_> - - - - <_> - 7 15 1 3 -1. - <_> - 6 16 1 1 3. - 1 - -5.9424177743494511e-003 - -4.4680491089820862e-001 - 5.5648550391197205e-002 - <_> - - <_> - - - - <_> - 2 16 6 2 -1. - <_> - 2 16 3 1 2. - <_> - 5 17 3 1 2. - 0 - -5.0992597825825214e-003 - 1.9794790446758270e-001 - -1.8055149912834167e-001 - <_> - - <_> - - - - <_> - 6 1 2 6 -1. - <_> - 6 1 1 6 2. - 1 - -1.5280229970812798e-002 - -8.6270570755004883e-002 - 3.5552538931369781e-002 - <_> - - <_> - - - - <_> - 6 1 6 2 -1. - <_> - 6 1 6 1 2. - 1 - -7.4432790279388428e-003 - 1.7408570647239685e-001 - -1.8400490283966064e-001 - <_> - - <_> - - - - <_> - 8 9 3 1 -1. - <_> - 9 9 1 1 3. - 0 - 5.1331128925085068e-003 - -8.8491149246692657e-002 - 3.1532418727874756e-001 - <_> - - <_> - - - - <_> - 1 9 3 1 -1. - <_> - 2 9 1 1 3. - 0 - 2.4648790713399649e-003 - -8.3607397973537445e-002 - 3.5939309000968933e-001 - -1.3777979612350464e+000 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 2 6 1 -1. - <_> - 8 4 2 1 3. - 1 - 3.2584890723228455e-002 - -2.9446709156036377e-001 - 3.8783320784568787e-001 - <_> - - <_> - - - - <_> - 7 7 2 4 -1. - <_> - 8 7 1 2 2. - <_> - 7 9 1 2 2. - 0 - -1.5954829752445221e-002 - -8.7387222051620483e-001 - 1.3140209950506687e-002 - <_> - - <_> - - - - <_> - 3 7 2 4 -1. - <_> - 3 7 1 2 2. - <_> - 4 9 1 2 2. - 0 - 6.5294029191136360e-003 - -1.8746000528335571e-001 - 3.4920379519462585e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -6.9139063358306885e-002 - -3.2066041231155396e-001 - 2.1070230752229691e-002 - <_> - - <_> - - - - <_> - 2 4 5 12 -1. - <_> - 2 7 5 6 2. - 0 - -2.7401080355048180e-002 - 1.6137300431728363e-001 - -3.3988159894943237e-001 - <_> - - <_> - - - - <_> - 5 0 7 18 -1. - <_> - 5 9 7 9 2. - 0 - 5.4834091663360596e-001 - -1.1290470138192177e-002 - -1.0005040168762207e+000 - <_> - - <_> - - - - <_> - 0 0 7 18 -1. - <_> - 0 9 7 9 2. - 0 - 4.6463169157505035e-002 - -7.0668822526931763e-001 - 5.8523610234260559e-002 - <_> - - <_> - - - - <_> - 11 9 1 6 -1. - <_> - 11 12 1 3 2. - 0 - 3.5692781209945679e-002 - -1.2722860090434551e-002 - 5.1669907569885254e-001 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 2 1 2. - <_> - 6 1 2 1 2. - 0 - -8.8253971189260483e-003 - 3.5113370418548584e-001 - -1.2264049798250198e-001 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 9 1 2 3. - 0 - -2.4928439408540726e-002 - -4.1226190328598022e-001 - 8.2819983363151550e-003 - <_> - - <_> - - - - <_> - 0 7 1 6 -1. - <_> - 0 9 1 2 3. - 0 - 8.3438487490639091e-004 - -3.1004768610000610e-001 - 1.2824219465255737e-001 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 0 1 3 2. - 0 - 4.3677380308508873e-003 - 8.7895832955837250e-002 - -5.5109828710556030e-001 - <_> - - <_> - - - - <_> - 3 15 6 2 -1. - <_> - 3 15 3 1 2. - <_> - 6 16 3 1 2. - 0 - -6.0594570823013783e-003 - 2.3694829642772675e-001 - -1.6963149607181549e-001 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 6 13 1 3 2. - 1 - -1.3386299833655357e-002 - -2.9353159666061401e-001 - 3.3642090857028961e-002 - <_> - - <_> - - - - <_> - 0 11 8 5 -1. - <_> - 4 11 4 5 2. - 0 - 5.5047020316123962e-002 - 9.9271617829799652e-002 - -4.0973669290542603e-001 - <_> - - <_> - - - - <_> - 10 1 2 5 -1. - <_> - 10 1 1 5 2. - 0 - 1.7345769330859184e-002 - -1.0950370132923126e-001 - 4.2251870036125183e-001 - <_> - - <_> - - - - <_> - 0 7 12 13 -1. - <_> - 6 7 6 13 2. - 0 - 5.1694452762603760e-001 - -5.7410959154367447e-002 - 6.4137631654739380e-001 - <_> - - <_> - - - - <_> - 8 8 3 8 -1. - <_> - 6 10 3 4 2. - 1 - 6.5628431737422943e-002 - 3.3641148358583450e-002 - -6.0003411769866943e-001 - <_> - - <_> - - - - <_> - 4 8 8 3 -1. - <_> - 6 10 4 3 2. - 1 - 1.0161089897155762e-001 - -2.5070580840110779e-001 - 1.8186099827289581e-001 - <_> - - <_> - - - - <_> - 1 0 10 3 -1. - <_> - 1 1 10 1 3. - 0 - 2.9830370098352432e-002 - -1.1608160287141800e-001 - 3.5246831178665161e-001 - <_> - - <_> - - - - <_> - 0 2 1 2 -1. - <_> - 0 3 1 1 2. - 0 - -6.6538550890982151e-004 - -5.6480127573013306e-001 - 6.4513862133026123e-002 - <_> - - <_> - - - - <_> - 9 12 2 3 -1. - <_> - 9 13 2 1 3. - 0 - 8.9011844247579575e-003 - 3.7113070487976074e-002 - -6.2943869829177856e-001 - <_> - - <_> - - - - <_> - 1 12 2 3 -1. - <_> - 1 13 2 1 3. - 0 - -5.7988148182630539e-003 - 3.3002421259880066e-001 - -1.1569269746541977e-001 - <_> - - <_> - - - - <_> - 9 0 3 1 -1. - <_> - 10 1 1 1 3. - 1 - 1.8202450126409531e-002 - 2.2297389805316925e-002 - -6.8679827451705933e-001 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -6.3430098816752434e-003 - -5.9504687786102295e-001 - 5.3902018815279007e-002 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - 1.0256610065698624e-001 - 1.1425909586250782e-002 - -3.4088680148124695e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - -2.1729130297899246e-002 - 1.0024060308933258e-001 - -3.6016431450843811e-001 - <_> - - <_> - - - - <_> - 7 5 2 3 -1. - <_> - 7 5 1 3 2. - 1 - -4.0402188897132874e-002 - -7.9971337318420410e-001 - 1.0374830104410648e-002 - <_> - - <_> - - - - <_> - 5 5 3 2 -1. - <_> - 5 5 3 1 2. - 1 - -1.1156830005347729e-002 - 4.1818261146545410e-001 - -1.0622619837522507e-001 - <_> - - <_> - - - - <_> - 8 10 2 1 -1. - <_> - 8 10 1 1 2. - 0 - 1.0242810240015388e-003 - -7.2071209549903870e-002 - 9.9886089563369751e-002 - <_> - - <_> - - - - <_> - 2 10 2 1 -1. - <_> - 3 10 1 1 2. - 0 - 9.5549278194084764e-004 - -1.6656149923801422e-001 - 2.7860009670257568e-001 - <_> - - <_> - - - - <_> - 4 4 4 2 -1. - <_> - 4 5 4 1 2. - 0 - 1.3702700380235910e-004 - -3.1575959920883179e-001 - 1.1808790266513824e-001 - <_> - - <_> - - - - <_> - 0 9 12 9 -1. - <_> - 3 9 6 9 2. - 0 - -1.9174149632453918e-001 - 5.2235382795333862e-001 - -7.6672300696372986e-002 - <_> - - <_> - - - - <_> - 9 12 1 3 -1. - <_> - 9 13 1 1 3. - 0 - 2.5123620871454477e-003 - -8.5517987608909607e-002 - 2.7882871031761169e-001 - <_> - - <_> - - - - <_> - 2 12 1 3 -1. - <_> - 2 13 1 1 3. - 0 - 3.6384440027177334e-003 - -1.0173840075731277e-001 - 3.6575859785079956e-001 - <_> - - <_> - - - - <_> - 6 12 3 5 -1. - <_> - 7 13 1 5 3. - 1 - -9.1068800538778305e-003 - -1.9999110698699951e-001 - 3.5431660711765289e-002 - <_> - - <_> - - - - <_> - 6 12 5 3 -1. - <_> - 5 13 5 1 3. - 1 - -2.5456059724092484e-002 - -6.6976618766784668e-001 - 5.1672291010618210e-002 - <_> - - <_> - - - - <_> - 3 17 6 3 -1. - <_> - 3 18 6 1 3. - 0 - -2.5856729596853256e-002 - -7.3498648405075073e-001 - 2.7689380571246147e-002 - <_> - - <_> - - - - <_> - 5 15 2 4 -1. - <_> - 5 16 2 2 2. - 0 - 8.5871294140815735e-003 - -1.1443380266427994e-001 - 2.7319890260696411e-001 - <_> - - <_> - - - - <_> - 7 18 3 2 -1. - <_> - 8 18 1 2 3. - 0 - 3.5716209094971418e-003 - 6.0280900448560715e-002 - -2.6631888747215271e-001 - <_> - - <_> - - - - <_> - 1 4 2 4 -1. - <_> - 1 5 2 2 2. - 0 - 1.0332760401070118e-002 - 3.8581959903240204e-002 - -6.7532962560653687e-001 - <_> - - <_> - - - - <_> - 10 4 2 3 -1. - <_> - 9 5 2 1 3. - 1 - -8.3224009722471237e-003 - 2.5268268585205078e-001 - -6.8770729005336761e-002 - <_> - - <_> - - - - <_> - 2 4 3 2 -1. - <_> - 3 5 1 2 3. - 1 - -1.8182119820266962e-003 - -3.1761169433593750e-001 - 9.2666782438755035e-002 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - -1.3169780373573303e-002 - -5.3651332855224609e-001 - 2.8106879442930222e-002 - <_> - - <_> - - - - <_> - 6 6 2 3 -1. - <_> - 5 7 2 1 3. - 1 - 2.0408600568771362e-002 - -6.0603220015764236e-002 - 5.0572431087493896e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 8 5 2 6 3. - 1 - 1.7321230471134186e-001 - 2.1015009842813015e-003 - 3.2260191440582275e-001 - <_> - - <_> - - - - <_> - 6 3 6 6 -1. - <_> - 4 5 6 2 3. - 1 - -5.8910921216011047e-002 - 1.4044930040836334e-001 - -2.0362600684165955e-001 - <_> - - <_> - - - - <_> - 10 4 2 3 -1. - <_> - 10 5 2 1 3. - 0 - 4.9123559147119522e-003 - 7.1367353200912476e-002 - -5.0733560323715210e-001 - <_> - - <_> - - - - <_> - 0 18 1 2 -1. - <_> - 0 19 1 1 2. - 0 - -1.3819620653521270e-004 - 7.6624020934104919e-002 - -3.4903231263160706e-001 - <_> - - <_> - - - - <_> - 0 1 12 8 -1. - <_> - 0 5 12 4 2. - 0 - 1.2017219560220838e-003 - -5.1169282197952271e-001 - 5.4793931543827057e-002 - <_> - - <_> - - - - <_> - 0 4 2 3 -1. - <_> - 0 5 2 1 3. - 0 - -5.4135429672896862e-003 - -5.0181478261947632e-001 - 5.0226181745529175e-002 - <_> - - <_> - - - - <_> - 7 6 3 2 -1. - <_> - 8 7 1 2 3. - 1 - -3.3707648515701294e-002 - -8.5764700174331665e-001 - 4.7642397694289684e-003 - <_> - - <_> - - - - <_> - 5 6 2 3 -1. - <_> - 4 7 2 1 3. - 1 - 1.2718940153717995e-002 - -1.0830610245466232e-001 - 2.8867751359939575e-001 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 7 5 1 2 3. - 1 - -2.0672269165515900e-002 - -3.0906811356544495e-001 - 2.1581029519438744e-002 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 5 5 2 1 3. - 1 - 1.5933969989418983e-002 - -8.3755359053611755e-002 - 4.1743949055671692e-001 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 6 0 1 2 3. - 0 - 9.3405526131391525e-003 - 4.7591928392648697e-002 - -6.5143817663192749e-001 - <_> - - <_> - - - - <_> - 5 15 3 2 -1. - <_> - 5 15 3 1 2. - 1 - 1.3016579672694206e-002 - 5.3528260439634323e-002 - -4.8644289374351501e-001 - -1.2673230171203613e+000 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 5 1 1 1 3. - 0 - 5.0423052161931992e-003 - -2.2111539542675018e-001 - 4.3673288822174072e-001 - <_> - - <_> - - - - <_> - 5 4 4 3 -1. - <_> - 5 5 4 1 3. - 0 - 3.3594230189919472e-003 - -1.7003799974918365e-001 - 1.2387859821319580e-001 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 4 7 1 1 9. - 0 - -2.2854709997773170e-002 - 3.0707350373268127e-001 - -1.9186529517173767e-001 - <_> - - <_> - - - - <_> - 7 16 1 4 -1. - <_> - 7 18 1 2 2. - 0 - 4.3850108049809933e-003 - 3.2038759440183640e-002 - -1.4620819687843323e-001 - <_> - - <_> - - - - <_> - 4 16 1 4 -1. - <_> - 4 18 1 2 2. - 0 - -5.3011639975011349e-003 - 1.6375949978828430e-001 - -2.8174880146980286e-001 - <_> - - <_> - - - - <_> - 6 13 1 6 -1. - <_> - 6 13 1 3 2. - 1 - 4.9680870026350021e-002 - 4.2250480502843857e-002 - -6.0391640663146973e-001 - <_> - - <_> - - - - <_> - 6 13 6 1 -1. - <_> - 6 13 3 1 2. - 1 - -5.1453109830617905e-002 - 6.5720152854919434e-001 - -7.0812806487083435e-002 - <_> - - <_> - - - - <_> - 6 7 1 6 -1. - <_> - 4 9 1 2 3. - 1 - 2.7113489806652069e-002 - 2.9805190861225128e-002 - -4.0825900435447693e-001 - <_> - - <_> - - - - <_> - 6 7 6 1 -1. - <_> - 8 9 2 1 3. - 1 - 2.3578230291604996e-002 - -3.0918011069297791e-001 - 2.1382910013198853e-001 - <_> - - <_> - - - - <_> - 11 9 1 6 -1. - <_> - 11 12 1 3 2. - 0 - 2.9583559371531010e-003 - 2.3970389738678932e-002 - -1.6768220067024231e-001 - <_> - - <_> - - - - <_> - 0 9 1 6 -1. - <_> - 0 12 1 3 2. - 0 - -2.8374159592203796e-004 - 1.9550369679927826e-001 - -2.6317828893661499e-001 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 3 0 6 1 2. - 0 - 3.8295589387416840e-002 - -8.1490896642208099e-002 - 4.1922101378440857e-001 - <_> - - <_> - - - - <_> - 3 0 6 8 -1. - <_> - 3 4 6 4 2. - 0 - -1.0575760155916214e-002 - -5.5699461698532104e-001 - 6.0772120952606201e-002 - <_> - - <_> - - - - <_> - 3 3 6 12 -1. - <_> - 3 7 6 4 3. - 0 - -1.3283690204843879e-003 - 9.2958763241767883e-002 - -3.3554950356483459e-001 - <_> - - <_> - - - - <_> - 4 6 1 2 -1. - <_> - 4 7 1 1 2. - 0 - 1.8217159667983651e-003 - -9.9800482392311096e-002 - 3.8015770912170410e-001 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 1 1 1 2. - 0 - -1.8067359924316406e-003 - -5.1108711957931519e-001 - 6.8366326391696930e-002 - <_> - - <_> - - - - <_> - 0 12 8 3 -1. - <_> - 4 12 4 3 2. - 0 - 6.6835001111030579e-002 - 3.1457249075174332e-002 - -6.9415211677551270e-001 - <_> - - <_> - - - - <_> - 10 0 2 4 -1. - <_> - 11 0 1 2 2. - <_> - 10 2 1 2 2. - 0 - -1.3109239749610424e-002 - 6.0284411907196045e-001 - -8.0423787236213684e-002 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 0 1 2 2. - <_> - 1 2 1 2 2. - 0 - -1.9930349662899971e-003 - -4.1979709267616272e-001 - 8.9367941021919250e-002 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - -1.0855719447135925e-003 - -2.4703420698642731e-001 - 5.2764680236577988e-002 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -2.0320110488682985e-003 - -6.1820042133331299e-001 - 5.1938790827989578e-002 - <_> - - <_> - - - - <_> - 10 9 2 6 -1. - <_> - 11 9 1 3 2. - <_> - 10 12 1 3 2. - 0 - 1.6026819124817848e-002 - -8.5486106574535370e-002 - 5.8234047889709473e-001 - <_> - - <_> - - - - <_> - 0 10 12 3 -1. - <_> - 0 11 12 1 3. - 0 - 1.7896020784974098e-002 - 6.8894177675247192e-002 - -5.8082962036132813e-001 - <_> - - <_> - - - - <_> - 7 11 1 3 -1. - <_> - 7 12 1 1 3. - 0 - -2.4853560607880354e-003 - 2.0646420121192932e-001 - -6.0466051101684570e-002 - <_> - - <_> - - - - <_> - 4 11 1 3 -1. - <_> - 4 12 1 1 3. - 0 - -1.8073250539600849e-003 - 2.5038561224937439e-001 - -1.3862800598144531e-001 - <_> - - <_> - - - - <_> - 6 11 2 3 -1. - <_> - 6 12 2 1 3. - 0 - -1.1800680309534073e-002 - -5.5517327785491943e-001 - 2.3907609283924103e-002 - <_> - - <_> - - - - <_> - 4 11 2 3 -1. - <_> - 4 12 2 1 3. - 0 - 5.3180782124400139e-003 - -1.0365380346775055e-001 - 3.5622540116310120e-001 - <_> - - <_> - - - - <_> - 6 0 3 1 -1. - <_> - 7 1 1 1 3. - 1 - -1.9885929941665381e-004 - 7.9137459397315979e-002 - -7.1248553693294525e-002 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 5 1 1 1 3. - 1 - 1.2722889892756939e-002 - 3.6043450236320496e-002 - -7.7585661411285400e-001 - <_> - - <_> - - - - <_> - 4 1 4 2 -1. - <_> - 6 1 2 1 2. - <_> - 4 2 2 1 2. - 0 - 5.4894611239433289e-003 - -1.1198099702596664e-001 - 2.9539060592651367e-001 - <_> - - <_> - - - - <_> - 6 0 2 6 -1. - <_> - 4 2 2 2 3. - 1 - 3.1117599457502365e-002 - 6.8027697503566742e-002 - -4.7621628642082214e-001 - <_> - - <_> - - - - <_> - 10 9 2 6 -1. - <_> - 11 9 1 3 2. - <_> - 10 12 1 3 2. - 0 - -1.0922919958829880e-002 - 3.7011030316352844e-001 - -1.5059700608253479e-001 - <_> - - <_> - - - - <_> - 0 9 2 6 -1. - <_> - 0 9 1 3 2. - <_> - 1 12 1 3 2. - 0 - -1.7167469486594200e-003 - 2.7644971013069153e-001 - -1.1304590106010437e-001 - <_> - - <_> - - - - <_> - 3 8 6 2 -1. - <_> - 3 9 6 1 2. - 0 - -1.3501050416380167e-003 - -3.5303080081939697e-001 - 9.9187247455120087e-002 - <_> - - <_> - - - - <_> - 0 8 12 3 -1. - <_> - 0 9 12 1 3. - 0 - 1.9909780472517014e-002 - 6.5169408917427063e-002 - -4.9353629350662231e-001 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 7 5 1 2 3. - 1 - 2.3044180124998093e-002 - 1.7247360199689865e-002 - -3.9788180589675903e-001 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 5 5 2 1 3. - 1 - 9.6177039667963982e-003 - -1.1394459754228592e-001 - 3.1357648968696594e-001 - <_> - - <_> - - - - <_> - 11 7 1 2 -1. - <_> - 11 8 1 1 2. - 0 - -7.6275239698588848e-003 - -9.2318731546401978e-001 - 7.8877164050936699e-003 - <_> - - <_> - - - - <_> - 0 7 1 2 -1. - <_> - 0 8 1 1 2. - 0 - 8.7190303020179272e-005 - -3.0970078706741333e-001 - 9.5611982047557831e-002 - <_> - - <_> - - - - <_> - 5 0 4 2 -1. - <_> - 7 0 2 1 2. - <_> - 5 1 2 1 2. - 0 - -1.1889990419149399e-002 - 4.7901371121406555e-001 - -3.5577189177274704e-002 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 5 0 1 3 3. - 0 - 8.4557365626096725e-003 - 5.2709650248289108e-002 - -5.7321697473526001e-001 - <_> - - <_> - - - - <_> - 8 5 2 3 -1. - <_> - 8 5 1 3 2. - 1 - 1.1996040120720863e-002 - 1.9709009677171707e-002 - -6.9532912969589233e-001 - <_> - - <_> - - - - <_> - 2 0 6 2 -1. - <_> - 2 0 3 1 2. - <_> - 5 1 3 1 2. - 0 - -2.7005810290575027e-002 - 5.9652292728424072e-001 - -5.1673818379640579e-002 - <_> - - <_> - - - - <_> - 10 17 1 3 -1. - <_> - 10 18 1 1 3. - 0 - 1.8543410114943981e-003 - 7.2791919112205505e-002 - -5.0846791267395020e-001 - <_> - - <_> - - - - <_> - 0 0 4 4 -1. - <_> - 0 2 4 2 2. - 0 - 7.5675587868317962e-004 - -3.8867241144180298e-001 - 6.5925061702728271e-002 - <_> - - <_> - - - - <_> - 8 5 2 3 -1. - <_> - 8 5 1 3 2. - 1 - -3.8905180990695953e-002 - -6.0740387439727783e-001 - 3.5101689863950014e-003 - <_> - - <_> - - - - <_> - 4 5 3 2 -1. - <_> - 4 5 3 1 2. - 1 - -5.7714940048754215e-003 - 1.7274090647697449e-001 - -1.7644210159778595e-001 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - -9.1350553557276726e-003 - -2.8621628880500793e-001 - 3.0258299782872200e-002 - <_> - - <_> - - - - <_> - 6 5 1 3 -1. - <_> - 5 6 1 1 3. - 1 - 4.5439298264682293e-003 - -8.5076972842216492e-002 - 4.1360539197921753e-001 - <_> - - <_> - - - - <_> - 10 1 2 7 -1. - <_> - 10 1 1 7 2. - 0 - 1.5785360708832741e-002 - -9.6528999507427216e-002 - 2.8125289082527161e-001 - <_> - - <_> - - - - <_> - 0 1 2 8 -1. - <_> - 1 1 1 8 2. - 0 - 1.7944289371371269e-002 - 5.0230890512466431e-002 - -6.4134520292282104e-001 - <_> - - <_> - - - - <_> - 11 11 1 6 -1. - <_> - 11 11 1 3 2. - 1 - -3.8975570350885391e-002 - -2.5966680049896240e-001 - 3.0592629685997963e-002 - <_> - - <_> - - - - <_> - 1 11 6 1 -1. - <_> - 1 11 3 1 2. - 1 - 5.2373361540958285e-004 - 1.0446350276470184e-001 - -3.1365889310836792e-001 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 8 5 2 3 3. - 1 - -2.5457229465246201e-002 - -1.6731269657611847e-001 - 3.7427790462970734e-002 - <_> - - <_> - - - - <_> - 0 2 6 6 -1. - <_> - 2 4 2 2 9. - 0 - -4.2908679693937302e-002 - -4.0295800566673279e-001 - 6.5455727279186249e-002 - <_> - - <_> - - - - <_> - 8 3 4 1 -1. - <_> - 9 4 2 1 2. - 1 - -5.1728109829127789e-003 - 3.1299790740013123e-001 - -7.0367880165576935e-002 - <_> - - <_> - - - - <_> - 4 3 1 4 -1. - <_> - 3 4 1 2 2. - 1 - -1.8753990298137069e-004 - 1.5299630165100098e-001 - -2.0695990324020386e-001 - <_> - - <_> - - - - <_> - 4 14 4 2 -1. - <_> - 6 14 2 1 2. - <_> - 4 15 2 1 2. - 0 - -1.9984589889645576e-003 - 2.6436290144920349e-001 - -1.0118020325899124e-001 - <_> - - <_> - - - - <_> - 5 16 1 4 -1. - <_> - 5 17 1 2 2. - 0 - -3.7929560057818890e-003 - 2.8518161177635193e-001 - -1.0743419826030731e-001 - <_> - - <_> - - - - <_> - 6 12 3 5 -1. - <_> - 7 13 1 5 3. - 1 - 4.5540980994701385e-002 - 4.5009840279817581e-002 - -2.0425949990749359e-001 - <_> - - <_> - - - - <_> - 6 12 5 3 -1. - <_> - 5 13 5 1 3. - 1 - 2.4831600487232208e-002 - 4.9255561083555222e-002 - -6.0236537456512451e-001 - -1.3531359434127808e+000 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 2 4 2 -1. - <_> - 4 2 2 1 2. - <_> - 6 3 2 1 2. - 0 - 3.9991321973502636e-003 - -2.6711270213127136e-001 - 3.5392650961875916e-001 - <_> - - <_> - - - - <_> - 8 8 3 3 -1. - <_> - 9 9 1 3 3. - 1 - 1.1023290455341339e-002 - -1.0786689817905426e-001 - 1.0729049891233444e-001 - <_> - - <_> - - - - <_> - 5 4 5 3 -1. - <_> - 4 5 5 1 3. - 1 - -3.7521351128816605e-002 - 3.0647391080856323e-001 - -2.1749919652938843e-001 - <_> - - <_> - - - - <_> - 9 17 2 3 -1. - <_> - 9 18 2 1 3. - 0 - -2.7670729905366898e-003 - -3.9869681000709534e-001 - 8.7402120232582092e-002 - <_> - - <_> - - - - <_> - 1 17 2 3 -1. - <_> - 1 18 2 1 3. - 0 - 1.9890109542757273e-003 - -3.2719919085502625e-001 - 2.0264029502868652e-001 - <_> - - <_> - - - - <_> - 8 2 4 10 -1. - <_> - 10 2 2 5 2. - <_> - 8 7 2 5 2. - 0 - 1.9364669919013977e-002 - -5.1705140620470047e-002 - 1.2021850049495697e-001 - <_> - - <_> - - - - <_> - 0 2 4 10 -1. - <_> - 0 2 2 5 2. - <_> - 2 7 2 5 2. - 0 - -1.1918369680643082e-002 - 1.2546530365943909e-001 - -3.7106749415397644e-001 - <_> - - <_> - - - - <_> - 0 13 12 5 -1. - <_> - 3 13 6 5 2. - 0 - 9.5910847187042236e-002 - -1.7389330267906189e-001 - 2.2600440680980682e-001 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 6 18 6 2 2. - 0 - 1.0751710087060928e-001 - -7.8588336706161499e-002 - 5.7250618934631348e-001 - <_> - - <_> - - - - <_> - 4 14 5 6 -1. - <_> - 4 17 5 3 2. - 0 - -3.1022340059280396e-002 - 1.4575169980525970e-001 - -3.2396531105041504e-001 - <_> - - <_> - - - - <_> - 0 0 12 3 -1. - <_> - 0 1 12 1 3. - 0 - 1.6883790493011475e-002 - -1.6565980017185211e-001 - 2.9082998633384705e-001 - <_> - - <_> - - - - <_> - 0 3 12 2 -1. - <_> - 0 4 12 1 2. - 0 - 5.0262849981663749e-005 - -5.7035660743713379e-001 - 6.2110569328069687e-002 - <_> - - <_> - - - - <_> - 0 0 8 8 -1. - <_> - 2 0 4 8 2. - 0 - 9.1006923466920853e-003 - 5.5405318737030029e-002 - -4.9272969365119934e-001 - <_> - - <_> - - - - <_> - 6 10 6 3 -1. - <_> - 6 10 3 3 2. - 1 - -1.6937600076198578e-001 - 5.4915368556976318e-001 - -3.9581310003995895e-002 - <_> - - <_> - - - - <_> - 4 10 6 4 -1. - <_> - 4 10 6 2 2. - 1 - 1.9913749769330025e-002 - 9.4958506524562836e-002 - -5.1041561365127563e-001 - <_> - - <_> - - - - <_> - 6 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 6 1 1 1 2. - 0 - 3.0223759822547436e-003 - -6.3331179320812225e-002 - 2.0407359302043915e-001 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 0 1 1 2. - <_> - 5 1 1 1 2. - 0 - -4.5423391275107861e-003 - 4.2783120274543762e-001 - -7.8888073563575745e-002 - <_> - - <_> - - - - <_> - 7 13 5 2 -1. - <_> - 7 13 5 1 2. - 1 - -3.5147000104188919e-002 - -6.1061471700668335e-001 - 2.5506079196929932e-002 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - 2.0077088847756386e-003 - 6.3804052770137787e-002 - -4.4934588670730591e-001 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 1 1 1 2. - 0 - -1.5540630556643009e-003 - -4.0192028880119324e-001 - 3.1636688858270645e-002 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 4 6 3 1 3. - 1 - 1.4254899695515633e-002 - -7.9566307365894318e-002 - 3.8706529140472412e-001 - <_> - - <_> - - - - <_> - 6 3 3 4 -1. - <_> - 7 4 1 4 3. - 1 - 1.1024920269846916e-002 - 6.7027233541011810e-002 - -2.8063619136810303e-001 - <_> - - <_> - - - - <_> - 3 6 2 4 -1. - <_> - 3 6 1 2 2. - <_> - 4 8 1 2 2. - 0 - -5.1981899887323380e-003 - 3.6570119857788086e-001 - -1.1679860204458237e-001 - <_> - - <_> - - - - <_> - 7 13 5 2 -1. - <_> - 7 13 5 1 2. - 1 - 4.9434448592364788e-003 - 4.9997199326753616e-002 - -1.4642210304737091e-001 - <_> - - <_> - - - - <_> - 5 13 2 5 -1. - <_> - 5 13 1 5 2. - 1 - -1.6670800745487213e-002 - -4.9238750338554382e-001 - 6.1317440122365952e-002 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 1 1 1 2. - 0 - 7.7939140610396862e-003 - -2.9953140765428543e-002 - 2.3316749930381775e-001 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.4590610517188907e-003 - -5.7006311416625977e-001 - 5.3406499326229095e-002 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 5 6 3 1 3. - 1 - -2.2517830133438110e-002 - 1.1464659869670868e-001 - -1.2585699558258057e-001 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 6 1 3 3. - 1 - 1.4919370412826538e-002 - 5.2204128354787827e-002 - -5.6187790632247925e-001 - <_> - - <_> - - - - <_> - 0 15 12 5 -1. - <_> - 3 15 6 5 2. - 0 - -1.8656760454177856e-001 - 6.0989791154861450e-001 - -5.0142709165811539e-002 - <_> - - <_> - - - - <_> - 3 17 1 2 -1. - <_> - 3 17 1 1 2. - 1 - 1.2466400221455842e-004 - -3.2725819945335388e-001 - 8.6407169699668884e-002 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - -8.5008898749947548e-003 - 4.0898931026458740e-001 - -8.6464531719684601e-002 - <_> - - <_> - - - - <_> - 1 14 4 6 -1. - <_> - 1 14 2 3 2. - <_> - 3 17 2 3 2. - 0 - 1.4465590007603168e-002 - 5.5936750024557114e-002 - -5.2939140796661377e-001 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - 1.1536439880728722e-002 - -9.3967936933040619e-002 - 4.0461421012878418e-001 - <_> - - <_> - - - - <_> - 2 9 8 3 -1. - <_> - 2 10 8 1 3. - 0 - 1.6789000481367111e-002 - 4.9098148941993713e-002 - -6.1509531736373901e-001 - <_> - - <_> - - - - <_> - 8 9 3 2 -1. - <_> - 9 9 1 2 3. - 0 - -2.9727790970355272e-003 - 1.5688349306583405e-001 - -7.9878687858581543e-002 - <_> - - <_> - - - - <_> - 3 12 1 3 -1. - <_> - 3 13 1 1 3. - 0 - 2.7876989915966988e-003 - -1.1298049986362457e-001 - 2.3814339935779572e-001 - <_> - - <_> - - - - <_> - 8 12 1 3 -1. - <_> - 8 13 1 1 3. - 0 - 2.6815771125257015e-003 - -6.3131898641586304e-002 - 1.7341490089893341e-001 - <_> - - <_> - - - - <_> - 3 12 1 3 -1. - <_> - 3 13 1 1 3. - 0 - -1.6932430444285274e-003 - 2.9134979844093323e-001 - -9.7688913345336914e-002 - <_> - - <_> - - - - <_> - 9 3 3 6 -1. - <_> - 10 5 1 2 9. - 0 - -2.1838879212737083e-002 - 2.2410179674625397e-001 - -6.3271783292293549e-002 - <_> - - <_> - - - - <_> - 0 3 3 6 -1. - <_> - 1 5 1 2 9. - 0 - -4.6455059200525284e-002 - -6.6729080677032471e-001 - 4.1569691151380539e-002 - <_> - - <_> - - - - <_> - 6 4 6 16 -1. - <_> - 6 12 6 8 2. - 0 - 3.4257268905639648e-001 - -4.3775469064712524e-002 - 4.2250889539718628e-001 - <_> - - <_> - - - - <_> - 1 9 3 2 -1. - <_> - 2 9 1 2 3. - 0 - -9.7134057432413101e-003 - 2.8876009583473206e-001 - -1.0904739797115326e-001 - <_> - - <_> - - - - <_> - 8 5 2 6 -1. - <_> - 9 5 1 3 2. - <_> - 8 8 1 3 2. - 0 - -1.9520539790391922e-003 - 1.1463859677314758e-001 - -1.0175020247697830e-001 - <_> - - <_> - - - - <_> - 2 5 2 6 -1. - <_> - 2 5 1 3 2. - <_> - 3 8 1 3 2. - 0 - -1.8771419301629066e-002 - 6.2400698661804199e-001 - -5.0913780927658081e-002 - <_> - - <_> - - - - <_> - 0 2 12 18 -1. - <_> - 6 2 6 9 2. - <_> - 0 11 6 9 2. - 0 - 2.5264939665794373e-001 - -2.2805340588092804e-001 - 1.4274069666862488e-001 - <_> - - <_> - - - - <_> - 0 13 12 4 -1. - <_> - 0 13 6 2 2. - <_> - 6 15 6 2 2. - 0 - -7.8301310539245605e-002 - -4.9581411480903625e-001 - 5.4817609488964081e-002 - <_> - - <_> - - - - <_> - 0 4 12 12 -1. - <_> - 0 7 12 6 2. - 0 - -1.6115349531173706e-001 - -5.7617807388305664e-001 - 4.2033191770315170e-002 - <_> - - <_> - - - - <_> - 4 14 3 6 -1. - <_> - 5 14 1 6 3. - 0 - 1.3769039884209633e-002 - 4.6666219830513000e-002 - -5.0551378726959229e-001 - <_> - - <_> - - - - <_> - 6 11 2 3 -1. - <_> - 6 12 2 1 3. - 0 - -1.8329080194234848e-002 - -7.9812979698181152e-001 - -6.3357828184962273e-004 - <_> - - <_> - - - - <_> - 4 11 2 3 -1. - <_> - 4 12 2 1 3. - 0 - -3.9759539067745209e-003 - 2.6330900192260742e-001 - -1.0175059735774994e-001 - <_> - - <_> - - - - <_> - 1 9 10 2 -1. - <_> - 6 9 5 1 2. - <_> - 1 10 5 1 2. - 0 - 1.9660349935293198e-002 - 3.9909198880195618e-002 - -6.7467451095581055e-001 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 4 5 3 2 3. - 1 - -8.9697521179914474e-003 - 5.5054008960723877e-002 - -4.3380209803581238e-001 - <_> - - <_> - - - - <_> - 4 10 8 7 -1. - <_> - 4 10 4 7 2. - 0 - 1.7052260041236877e-001 - -8.9983023703098297e-002 - 1.5587039291858673e-001 - <_> - - <_> - - - - <_> - 6 7 6 4 -1. - <_> - 6 7 3 4 2. - 1 - -6.7584879696369171e-002 - 1.8699319660663605e-001 - -1.3449880480766296e-001 - <_> - - <_> - - - - <_> - 7 13 4 2 -1. - <_> - 9 13 2 1 2. - <_> - 7 14 2 1 2. - 0 - -4.9654832109808922e-003 - 2.1740439534187317e-001 - -6.8494133651256561e-002 - <_> - - <_> - - - - <_> - 1 13 4 2 -1. - <_> - 1 13 2 1 2. - <_> - 3 14 2 1 2. - 0 - -3.6419339012354612e-003 - 2.2659860551357269e-001 - -1.1511819809675217e-001 - <_> - - <_> - - - - <_> - 9 8 2 3 -1. - <_> - 9 8 1 3 2. - 0 - 3.0941639095544815e-002 - 9.5881456509232521e-003 - -4.3764260411262512e-001 - <_> - - <_> - - - - <_> - 1 8 2 3 -1. - <_> - 2 8 1 3 2. - 0 - 2.0714900456368923e-003 - -6.9400407373905182e-002 - 3.5815268754959106e-001 - -1.1971529722213745e+000 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_righteye.xml b/data/haarcascades/haarcascade_mcs_righteye.xml deleted file mode 100644 index dc99176..0000000 --- a/data/haarcascades/haarcascade_mcs_righteye.xml +++ /dev/null @@ -1,42252 +0,0 @@ - - - - - - - 18 12 - - <_> - - - <_> - - <_> - - - - <_> - 3 0 12 12 -1. - <_> - 3 4 12 4 3. - 0 - -0.2442477047443390 - 0.6987577080726624 - -0.6865804791450501 - <_> - - <_> - - - - <_> - 16 0 2 5 -1. - <_> - 16 0 1 5 2. - 0 - -7.8023127571213990e-005 - 0.1840998977422714 - -0.1586786955595017 - <_> - - <_> - - - - <_> - 7 4 4 8 -1. - <_> - 7 8 4 4 2. - 0 - 0.0618633292615414 - -0.5806958079338074 - 0.4242902100086212 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 0 - 1.0108880087500438e-004 - -0.2148032933473587 - 0.2565456926822662 - <_> - - <_> - - - - <_> - 0 0 2 5 -1. - <_> - 1 0 1 5 2. - 0 - -9.1220928879920393e-005 - 0.3836745917797089 - -0.6165490746498108 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 3 2 3 2. - 1 - -0.0305094793438911 - 0.3936012983322144 - -0.1342229992151260 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 3 0 2 2 2. - 0 - -9.1780202637892216e-005 - 0.2778655886650085 - -0.4300774037837982 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 3 2 3 2. - 1 - 0.0277718994766474 - -0.0807764828205109 - 0.2831164002418518 - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 8 3 3 2 2. - 1 - -0.0296204704791307 - 0.4858390986919403 - -0.1975446939468384 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 8 9 2 3 3. - 0 - 0.0228665992617607 - 0.1063619032502174 - -0.7517626881599426 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 8 11 2 1 2. - 0 - -4.1282488964498043e-003 - -0.6706575751304627 - 0.1047971993684769 - <_> - - <_> - - - - <_> - 6 10 12 2 -1. - <_> - 6 11 12 1 2. - 0 - 4.9167869292432442e-005 - -0.4347186088562012 - 0.1980224996805191 - <_> - - <_> - - - - <_> - 6 0 6 8 -1. - <_> - 6 2 6 4 2. - 0 - 0.1071999967098236 - -0.0898068472743034 - 0.7468281984329224 - <_> - - <_> - - - - <_> - 4 1 10 6 -1. - <_> - 4 3 10 2 3. - 0 - -0.1007362976670265 - 0.5093917250633240 - -0.1339354068040848 - -1.8531819581985474 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.1780235022306442 - -0.7587028145790100 - 0.5346593260765076 - <_> - - <_> - - - - <_> - 3 0 12 12 -1. - <_> - 7 4 4 4 9. - 0 - -0.6557739973068237 - 0.6469265222549439 - -0.4350259006023407 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -4.0021299355430529e-005 - 0.2996597886085510 - -0.5688586235046387 - <_> - - <_> - - - - <_> - 9 0 2 7 -1. - <_> - 9 0 1 7 2. - 1 - -0.0371546186506748 - 0.3491890132427216 - -0.0255894307047129 - <_> - - <_> - - - - <_> - 4 2 10 6 -1. - <_> - 4 4 10 2 3. - 0 - -0.1217394024133682 - 0.6158639788627625 - -0.2062674015760422 - <_> - - <_> - - - - <_> - 9 10 9 2 -1. - <_> - 9 11 9 1 2. - 0 - 5.2311879699118435e-005 - -0.4364793896675110 - 0.2195827066898346 - <_> - - <_> - - - - <_> - 6 1 6 6 -1. - <_> - 6 3 6 2 3. - 0 - 0.0808591768145561 - -0.1994501054286957 - 0.6732668876647949 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 4.0166039980249479e-005 - -0.0456401109695435 - 0.1943069994449616 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -3.1046951335156336e-005 - 0.2788721024990082 - -0.3936826884746552 - <_> - - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 10 11 8 1 2. - 0 - 0.0447648614645004 - 0.0153042702004313 - -0.5497850179672241 - <_> - - <_> - - - - <_> - 0 10 8 2 -1. - <_> - 0 11 8 1 2. - 0 - 4.1439689084654674e-005 - -0.4088754951953888 - 0.2429337948560715 - <_> - - <_> - - - - <_> - 12 5 6 3 -1. - <_> - 14 5 2 3 3. - 0 - -6.8109878338873386e-003 - 0.2047584950923920 - -0.1761040985584259 - <_> - - <_> - - - - <_> - 0 5 6 3 -1. - <_> - 2 5 2 3 3. - 0 - -0.0119599401950836 - 0.3201091885566711 - -0.2438212037086487 - <_> - - <_> - - - - <_> - 8 11 4 1 -1. - <_> - 9 11 2 1 2. - 0 - 4.1247010231018066e-003 - 0.1014249995350838 - -0.6714876890182495 - <_> - - <_> - - - - <_> - 6 11 4 1 -1. - <_> - 7 11 2 1 2. - 0 - 4.8378468491137028e-003 - 0.1029687970876694 - -0.7677686214447022 - <_> - - <_> - - - - <_> - 15 9 3 3 -1. - <_> - 15 10 3 1 3. - 0 - -6.9100200198590755e-003 - -0.5312659144401550 - 0.1042772009968758 - <_> - - <_> - - - - <_> - 3 0 10 6 -1. - <_> - 3 2 10 2 3. - 0 - -0.1008033975958824 - 0.5077794194221497 - -0.1302364021539688 - <_> - - <_> - - - - <_> - 6 2 6 9 -1. - <_> - 8 5 2 3 9. - 0 - -0.1996715962886810 - 0.3898678123950958 - -0.1677277982234955 - -1.7752469778060913 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.2577688097953796 - -0.5834887027740479 - 0.5534026026725769 - <_> - - <_> - - - - <_> - 0 1 18 9 -1. - <_> - 6 4 6 3 9. - 0 - -0.7306826710700989 - 0.5579602718353272 - -0.3256570100784302 - <_> - - <_> - - - - <_> - 6 5 6 3 -1. - <_> - 8 5 2 3 3. - 0 - -0.0275345090776682 - 0.4805935025215149 - -0.2384431064128876 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 10 2 1 2. - 0 - -2.3275651037693024e-003 - -0.3652119040489197 - 0.0450289994478226 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 1 0 1 1 2. - 1 - 1.1417310452088714e-003 - -0.3495636880397797 - 0.2976998090744019 - <_> - - <_> - - - - <_> - 14 8 4 4 -1. - <_> - 14 10 4 2 2. - 0 - -3.3687320537865162e-003 - -0.7028983831405640 - 0.1298096030950546 - <_> - - <_> - - - - <_> - 0 2 3 9 -1. - <_> - 0 5 3 3 3. - 0 - 0.0246144495904446 - 0.1310756951570511 - -0.5470896959304810 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -5.8426922187209129e-003 - -0.5864722132682800 - 0.0977318063378334 - <_> - - <_> - - - - <_> - 0 10 6 2 -1. - <_> - 0 11 6 1 2. - 0 - -5.4343082010746002e-003 - -0.5732660889625549 - 0.1127808988094330 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - 0.0220540799200535 - -0.0928885713219643 - 0.1365782022476196 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - -0.0153475897386670 - -0.6442934274673462 - 0.0743546336889267 - <_> - - <_> - - - - <_> - 10 1 8 2 -1. - <_> - 12 1 4 2 2. - 0 - 0.0505729615688324 - 5.6103519164025784e-003 - -0.5007994771003723 - <_> - - <_> - - - - <_> - 5 11 6 1 -1. - <_> - 7 11 2 1 3. - 0 - -0.0132617400959134 - -0.7339289188385010 - 0.0654333606362343 - <_> - - <_> - - - - <_> - 9 6 3 1 -1. - <_> - 10 6 1 1 3. - 0 - -3.8969300221651793e-003 - 0.3148984909057617 - -0.0814321637153625 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - -0.0248226597905159 - 0.3860459923744202 - -0.1226689964532852 - <_> - - <_> - - - - <_> - 15 9 3 3 -1. - <_> - 15 10 3 1 3. - 0 - -0.0110844299197197 - -0.5629314184188843 - 0.0541458912193775 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - 0.0183873008936644 - 0.0600279495120049 - -0.6509069800376892 - <_> - - <_> - - - - <_> - 12 4 6 5 -1. - <_> - 14 4 2 5 3. - 0 - -0.0271802507340908 - 0.2160355001688004 - -0.0932569727301598 - <_> - - <_> - - - - <_> - 0 4 6 5 -1. - <_> - 2 4 2 5 3. - 0 - -0.0181546900421381 - 0.2488728016614914 - -0.1724843978881836 - <_> - - <_> - - - - <_> - 1 3 16 8 -1. - <_> - 5 3 8 8 2. - 0 - -0.0744006186723709 - 0.2263507992029190 - -0.1956623047590256 - <_> - - <_> - - - - <_> - 5 2 7 3 -1. - <_> - 5 3 7 1 3. - 0 - 0.0255609806627035 - -0.1158379018306732 - 0.3817107975482941 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - -0.1483628004789352 - 0.4417867958545685 - -0.0909504368901253 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 2.7006680611521006e-003 - 0.0779470279812813 - -0.5542747974395752 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - -8.6278393864631653e-003 - -0.6993731856346130 - 0.0498309284448624 - <_> - - <_> - - - - <_> - 4 5 6 4 -1. - <_> - 6 5 2 4 3. - 0 - 0.0684392526745796 - -0.0759785771369934 - 0.6204671263694763 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -0.0109751401469111 - -0.6014745831489563 - 0.0712781772017479 - <_> - - <_> - - - - <_> - 0 6 3 4 -1. - <_> - 0 7 3 2 2. - 0 - 0.0180992893874645 - 0.0516250692307949 - -0.6182760000228882 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 1 1 3 3. - 1 - -0.0334893018007278 - -0.4786315858364105 - 0.0187696199864149 - -1.6665699481964111 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 6 4 6 4 9. - 0 - -1.0777440071105957 - 0.6412066221237183 - -0.4257067143917084 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - -0.0914443284273148 - -0.4795799851417542 - 0.0577692091464996 - <_> - - <_> - - - - <_> - 0 0 4 4 -1. - <_> - 2 0 2 4 2. - 0 - -7.4071469716727734e-003 - 0.2862192988395691 - -0.4199469089508057 - <_> - - <_> - - - - <_> - 8 4 2 8 -1. - <_> - 8 8 2 4 2. - 0 - 0.0470627583563328 - -0.4361920058727264 - 0.2682892084121704 - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 8 3 3 2 2. - 1 - -0.0364041812717915 - 0.3589976131916046 - -0.2142743021249771 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - 8.6630545556545258e-003 - 0.1466244012117386 - -0.6770737767219544 - <_> - - <_> - - - - <_> - 4 0 3 4 -1. - <_> - 5 0 1 4 3. - 0 - 9.3371979892253876e-003 - 0.0512493513524532 - -0.6235939860343933 - <_> - - <_> - - - - <_> - 9 7 3 2 -1. - <_> - 9 7 3 1 2. - 1 - -8.9909201487898827e-003 - 0.0186654794961214 - -0.1294005066156387 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 6.0002477839589119e-003 - 0.1241246014833450 - -0.4503139853477478 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - -4.1527119465172291e-003 - -0.6131383180618286 - 0.1069767996668816 - <_> - - <_> - - - - <_> - 0 0 3 2 -1. - <_> - 0 1 3 1 2. - 0 - -9.4439463282469660e-005 - 0.1672407984733582 - -0.2933245897293091 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - 7.7140098437666893e-003 - 0.0917944386601448 - -0.5245196819305420 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0292334090918303 - -0.1565355956554413 - 0.3073590099811554 - <_> - - <_> - - - - <_> - 2 0 16 3 -1. - <_> - 6 0 8 3 2. - 0 - -0.0287294797599316 - 0.2040888965129852 - -0.1519030034542084 - <_> - - <_> - - - - <_> - 0 10 6 2 -1. - <_> - 0 11 6 1 2. - 0 - -9.4922380521893501e-003 - -0.6557272076606751 - 0.0800310894846916 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 8 1 6 2 2. - 1 - 0.0152548598125577 - -0.0707184970378876 - 0.1803774982690811 - <_> - - <_> - - - - <_> - 2 5 9 3 -1. - <_> - 5 5 3 3 3. - 0 - 0.0850850269198418 - -0.0871615931391716 - 0.5452963113784790 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - -0.0124320797622204 - -0.6059554815292358 - 0.0634162202477455 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - 7.8379884362220764e-003 - 0.0858781784772873 - -0.4838706851005554 - <_> - - <_> - - - - <_> - 6 0 12 5 -1. - <_> - 10 0 4 5 3. - 0 - 0.0306104104965925 - -0.0859913006424904 - 0.1277828961610794 - <_> - - <_> - - - - <_> - 0 9 3 3 -1. - <_> - 0 10 3 1 3. - 0 - -7.8582251444458961e-003 - -0.4712431132793427 - 0.0818758681416512 - <_> - - <_> - - - - <_> - 11 3 3 4 -1. - <_> - 12 4 1 4 3. - 1 - -0.0406207516789436 - 0.3408096134662628 - -0.0697003379464149 - <_> - - <_> - - - - <_> - 2 0 12 4 -1. - <_> - 8 0 6 4 2. - 0 - 0.3847332894802094 - 9.9060591310262680e-004 - -4.8748442382812500e+003 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - 8.8061448186635971e-003 - 0.0215488392859697 - -0.3819910883903503 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - -9.8602060461416841e-005 - 0.1434576958417893 - -0.2561168968677521 - <_> - - <_> - - - - <_> - 11 3 3 4 -1. - <_> - 12 4 1 4 3. - 1 - 0.0441750586032867 - -0.0352665185928345 - 0.5083830952644348 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 1 0 1 2 2. - 0 - 1.6760559519752860e-003 - 0.0922279134392738 - -0.4089589118957520 - <_> - - <_> - - - - <_> - 11 3 3 4 -1. - <_> - 12 4 1 4 3. - 1 - -0.0203842706978321 - 0.1131026968359947 - -0.0671710297465324 - <_> - - <_> - - - - <_> - 7 3 4 3 -1. - <_> - 6 4 4 1 3. - 1 - -0.0283244606107473 - 0.3251419067382813 - -0.1122096031904221 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 0.0111482404172421 - 0.0437063910067081 - -0.5629075765609741 - <_> - - <_> - - - - <_> - 0 9 16 3 -1. - <_> - 4 9 8 3 2. - 0 - -0.0612310208380222 - 0.3229255080223084 - -0.1184210032224655 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - -2.5340579450130463e-003 - -0.2856656908988953 - 0.0971375629305840 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - 9.4344420358538628e-003 - 0.0558381788432598 - -0.6130396723747253 - <_> - - <_> - - - - <_> - 5 0 8 2 -1. - <_> - 5 1 8 1 2. - 0 - -0.0249963607639074 - 0.3737947940826416 - -0.0954389572143555 - <_> - - <_> - - - - <_> - 3 1 2 3 -1. - <_> - 2 2 2 1 3. - 1 - -0.0155799295753241 - -0.4332109987735748 - 0.0820814818143845 - <_> - - <_> - - - - <_> - 5 2 8 6 -1. - <_> - 5 4 8 2 3. - 0 - -0.0749959871172905 - 0.2219358980655670 - -0.1562748998403549 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 6 4 6 4 9. - 0 - -1.0779550075531006 - -0.2700729966163635 - 0.1383638978004456 - <_> - - <_> - - - - <_> - 3 6 12 6 -1. - <_> - 3 9 12 3 2. - 0 - 0.0592220015823841 - -0.3738270103931427 - 0.1169560030102730 - <_> - - <_> - - - - <_> - 0 5 2 5 -1. - <_> - 1 5 1 5 2. - 0 - -8.6024785414338112e-003 - 0.2768104970455170 - -0.1252626031637192 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -9.9356677383184433e-003 - -0.5147562026977539 - 0.0634185597300529 - <_> - - <_> - - - - <_> - 4 1 10 6 -1. - <_> - 4 3 10 2 3. - 0 - 0.1224820017814636 - -0.0834920331835747 - 0.3879792094230652 - <_> - - <_> - - - - <_> - 15 4 3 4 -1. - <_> - 15 5 3 2 2. - 0 - 0.0123114399611950 - 0.0549950301647186 - -0.3695249855518341 - -1.6865210533142090 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 7 2 4 2 3. - 1 - -0.0672003626823425 - 0.4510818123817444 - -0.5353423953056335 - <_> - - <_> - - - - <_> - 10 2 2 6 -1. - <_> - 8 4 2 2 3. - 1 - -0.0826620385050774 - 0.3477509915828705 - -0.1251765042543411 - <_> - - <_> - - - - <_> - 0 0 4 8 -1. - <_> - 2 0 2 8 2. - 0 - -0.0259404201060534 - 0.3183360993862152 - -0.3600414097309113 - <_> - - <_> - - - - <_> - 4 6 10 3 -1. - <_> - 4 6 5 3 2. - 0 - 0.0535808615386486 - -0.0654266998171806 - 0.1614775061607361 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 10 4 2 2 3. - 1 - -0.0570381581783295 - 0.3793540894985199 - -0.2545681893825531 - <_> - - <_> - - - - <_> - 10 8 8 4 -1. - <_> - 10 10 8 2 2. - 0 - 0.0132423304021358 - -0.4440726041793823 - 0.2349175065755844 - <_> - - <_> - - - - <_> - 5 2 8 4 -1. - <_> - 5 3 8 2 2. - 0 - -0.0395097397267818 - 0.4327434003353119 - -0.1949962973594666 - <_> - - <_> - - - - <_> - 3 0 15 3 -1. - <_> - 8 0 5 3 3. - 0 - -0.0282989908009768 - 0.2039777934551239 - -0.0895894691348076 - <_> - - <_> - - - - <_> - 0 7 5 4 -1. - <_> - 0 9 5 2 2. - 0 - 6.3852379098534584e-003 - -0.3548800945281982 - 0.1913830935955048 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 9 0 6 3 2. - 0 - 0.0113749401643872 - -0.1345770955085754 - 0.1240473017096520 - <_> - - <_> - - - - <_> - 0 1 1 8 -1. - <_> - 0 3 1 4 2. - 0 - 6.5829078666865826e-003 - 0.0955012589693069 - -0.4721026122570038 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 12 5 2 3 2. - 0 - -8.6454320698976517e-003 - 0.3212260901927948 - -0.0840040221810341 - <_> - - <_> - - - - <_> - 3 5 4 3 -1. - <_> - 4 5 2 3 2. - 0 - -6.4918738789856434e-003 - 0.3712219893932343 - -0.1415515989065170 - <_> - - <_> - - - - <_> - 16 2 2 1 -1. - <_> - 16 2 1 1 2. - 1 - 9.4650797545909882e-003 - 0.0480176210403442 - -0.4904443919658661 - <_> - - <_> - - - - <_> - 3 2 12 3 -1. - <_> - 3 3 12 1 3. - 0 - 0.0228204391896725 - -0.1255510002374649 - 0.3209761977195740 - <_> - - <_> - - - - <_> - 0 6 18 4 -1. - <_> - 9 6 9 2 2. - <_> - 0 8 9 2 2. - 0 - 0.0599250793457031 - 0.0847113132476807 - -0.4562759101390839 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 8.8552264496684074e-003 - 0.0603585913777351 - -0.6077554225921631 - <_> - - <_> - - - - <_> - 2 0 16 3 -1. - <_> - 6 0 8 3 2. - 0 - -0.0170453190803528 - 0.0945347622036934 - -0.1072309985756874 - <_> - - <_> - - - - <_> - 4 0 6 4 -1. - <_> - 6 0 2 4 3. - 0 - -0.0383144803345203 - -0.5787793993949890 - 0.0672162473201752 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 9 0 6 3 2. - 0 - -0.0693335384130478 - -0.3391959071159363 - 0.0194808505475521 - <_> - - <_> - - - - <_> - 0 0 12 3 -1. - <_> - 3 0 6 3 2. - 0 - -0.0187771301716566 - 0.1683091968297958 - -0.2085199058055878 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 1 - 0.0327199697494507 - 0.0305141303688288 - -0.4569686949253082 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - -0.0211149696260691 - -0.4819678068161011 - 0.0782186836004257 - <_> - - <_> - - - - <_> - 4 11 14 1 -1. - <_> - 4 11 7 1 2. - 0 - 0.0487852692604065 - 0.0200977902859449 - -0.3514721095561981 - <_> - - <_> - - - - <_> - 0 11 14 1 -1. - <_> - 7 11 7 1 2. - 0 - 0.0590097792446613 - 0.0500082001090050 - -0.7149816155433655 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 15 8 3 2 3. - 0 - -0.0130959004163742 - -0.2007983028888702 - 0.0744620934128761 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 5 9 1 1 2. - 1 - 4.8975921235978603e-003 - 0.0552431307733059 - -0.5740934014320374 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - -5.4940162226557732e-003 - 0.3567714989185333 - -0.0868079811334610 - <_> - - <_> - - - - <_> - 0 6 3 6 -1. - <_> - 0 8 3 2 3. - 0 - -0.0315615087747574 - -0.4661540985107422 - 0.0702446326613426 - <_> - - <_> - - - - <_> - 15 5 3 7 -1. - <_> - 16 5 1 7 3. - 0 - 2.2134589962661266e-003 - -0.0682832822203636 - 0.0795365273952484 - <_> - - <_> - - - - <_> - 0 5 3 7 -1. - <_> - 1 5 1 7 3. - 0 - -8.2062073051929474e-003 - 0.2730633020401001 - -0.1122042983770371 - <_> - - <_> - - - - <_> - 13 5 4 3 -1. - <_> - 14 5 2 3 2. - 0 - -4.2711659334599972e-003 - 0.2038374990224838 - -0.1113440021872520 - <_> - - <_> - - - - <_> - 1 5 4 3 -1. - <_> - 2 5 2 3 2. - 0 - -4.5153028331696987e-003 - 0.2168048024177551 - -0.1469801068305969 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - -6.8448767997324467e-003 - -0.5170065164566040 - 0.0576137304306030 - <_> - - <_> - - - - <_> - 6 10 4 2 -1. - <_> - 7 10 2 2 2. - 0 - -9.3936352059245110e-003 - -0.7091892957687378 - 0.0414515696465969 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 12 5 1 3 3. - 1 - -0.0354949496686459 - 0.4131678044795990 - -0.0618235208094120 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 6 5 3 1 3. - 1 - -0.0301141906529665 - 0.4965862929821014 - -0.0593134202063084 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -2.8231500182300806e-003 - -0.4243640005588532 - 0.0717189013957977 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -5.4673277772963047e-003 - -0.5509548187255859 - 0.0463911294937134 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - 1.0120819933945313e-004 - -0.0581513382494450 - 0.0586022511124611 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -9.6490257419645786e-005 - 0.1258217990398407 - -0.2290157973766327 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 5 2 8 2 3. - 0 - -0.0612941607832909 - 0.2926610112190247 - -0.0954039767384529 - <_> - - <_> - - - - <_> - 3 0 11 4 -1. - <_> - 3 1 11 2 2. - 0 - 0.0281027704477310 - -0.1117186024785042 - 0.2847988009452820 - <_> - - <_> - - - - <_> - 15 3 3 2 -1. - <_> - 15 4 3 1 2. - 0 - 8.5702445358037949e-003 - 0.0338167585432529 - -0.2539558112621307 - <_> - - <_> - - - - <_> - 0 3 3 2 -1. - <_> - 0 4 3 1 2. - 0 - -0.0107089597731829 - -0.4025137126445770 - 0.0619920082390308 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 7.7682421542704105e-003 - 0.0455148890614510 - -0.4453949034214020 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 8 0 2 4 3. - 0 - -0.0394368804991245 - -0.5912693142890930 - 0.0369159504771233 - <_> - - <_> - - - - <_> - 8 6 3 1 -1. - <_> - 9 6 1 1 3. - 0 - -8.3061866462230682e-003 - 0.4190779030323029 - -0.0380433388054371 - <_> - - <_> - - - - <_> - 7 6 3 1 -1. - <_> - 8 6 1 1 3. - 0 - -2.6948580052703619e-003 - 0.2684659957885742 - -0.1014489009976387 - <_> - - <_> - - - - <_> - 4 0 12 12 -1. - <_> - 7 0 6 12 2. - 0 - -0.0504651106894016 - 0.1237343996763229 - -0.1233476996421814 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 2 2. - 1 - -1.0141739767277613e-004 - 0.1086450964212418 - -0.2414274066686630 - <_> - - <_> - - - - <_> - 8 7 4 3 -1. - <_> - 8 8 4 1 3. - 0 - 0.0129281897097826 - -0.0786427631974220 - 0.2586899995803833 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - -1.6396190039813519e-003 - -0.2585735023021698 - 0.0837872698903084 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 6.9712791591882706e-003 - -0.0256771892309189 - 0.2035631984472275 - <_> - - <_> - - - - <_> - 0 5 4 7 -1. - <_> - 2 5 2 7 2. - 0 - 0.0393610298633575 - -0.0553763508796692 - 0.3994536995887756 - <_> - - <_> - - - - <_> - 6 0 7 4 -1. - <_> - 6 1 7 2 2. - 0 - -0.0309880394488573 - 0.3205797076225281 - -0.0644736066460609 - -1.6953380107879639 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 1 12 9 -1. - <_> - 3 4 12 3 3. - 0 - -0.2449467033147812 - 0.4074676036834717 - -0.4046924114227295 - <_> - - <_> - - - - <_> - 6 5 6 3 -1. - <_> - 8 5 2 3 3. - 0 - -0.0189727395772934 - 0.3448567092418671 - -0.3054808974266052 - <_> - - <_> - - - - <_> - 0 0 12 4 -1. - <_> - 4 0 4 4 3. - 0 - -0.0296954493969679 - 0.2447504997253418 - -0.3678677082061768 - <_> - - <_> - - - - <_> - 3 6 12 6 -1. - <_> - 3 9 12 3 2. - 0 - 0.1206924989819527 - -0.3379305899143219 - 0.2032227963209152 - <_> - - <_> - - - - <_> - 5 3 8 4 -1. - <_> - 5 4 8 2 2. - 0 - -0.0540625192224979 - 0.4593938887119293 - -0.1167109012603760 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 0 - -7.3384187999181449e-005 - 0.0183537304401398 - -0.1090292036533356 - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 1 0 1 4 2. - 0 - -7.9208686656784266e-005 - 0.1507748067378998 - -0.3754600882530212 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 12 5 2 3 2. - 0 - 0.0264477804303169 - -0.0411122590303421 - 0.5351629257202148 - <_> - - <_> - - - - <_> - 5 5 4 3 -1. - <_> - 6 5 2 3 2. - 0 - -8.7839355692267418e-003 - 0.3766488134860992 - -0.1337814927101135 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - 0.1580272018909454 - -0.0758658424019814 - 0.5655363798141480 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - -0.0235771592706442 - 0.5058456063270569 - -0.0654344409704208 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 0 2 4 3. - 0 - 0.0359524488449097 - 0.0682315528392792 - -0.5315253138542175 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 3 6 4 1 3. - 1 - -8.6752548813819885e-003 - 0.2187145948410034 - -0.1859243959188461 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 11 0 2 4 3. - 0 - -0.0313347987830639 - -0.5255485773086548 - 0.0634018406271935 - <_> - - <_> - - - - <_> - 3 0 6 4 -1. - <_> - 5 0 2 4 3. - 0 - -0.0444684810936451 - -0.6197052001953125 - 0.0473798587918282 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 0.0105663202702999 - 0.0193625409156084 - -0.3820643126964569 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -9.7126147011294961e-005 - 0.1422282010316849 - -0.2281993925571442 - <_> - - <_> - - - - <_> - 0 7 18 4 -1. - <_> - 9 7 9 2 2. - <_> - 0 9 9 2 2. - 0 - 0.0436283685266972 - 0.0927592962980270 - -0.3608382046222687 - <_> - - <_> - - - - <_> - 7 10 1 2 -1. - <_> - 7 11 1 1 2. - 0 - 1.0665970330592245e-004 - -0.2523975968360901 - 0.1265285015106201 - <_> - - <_> - - - - <_> - 17 8 1 4 -1. - <_> - 17 10 1 2 2. - 0 - -3.2759020105004311e-003 - -0.5001428723335266 - 0.0554119981825352 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 10 1 2 2. - 0 - -5.1345061510801315e-003 - -0.4991737902164459 - 0.0530271902680397 - <_> - - <_> - - - - <_> - 16 4 2 5 -1. - <_> - 16 4 1 5 2. - 0 - -2.3086380679160357e-003 - 0.1456024944782257 - -0.1567739993333817 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - -0.0113956900313497 - -0.5659071803092957 - 0.0483581908047199 - <_> - - <_> - - - - <_> - 16 4 2 5 -1. - <_> - 16 4 1 5 2. - 0 - 0.0213777106255293 - -0.0204284507781267 - 0.3320764005184174 - <_> - - <_> - - - - <_> - 0 4 2 5 -1. - <_> - 1 4 1 5 2. - 0 - -5.4581598378717899e-003 - 0.1887505948543549 - -0.1600019037723541 - <_> - - <_> - - - - <_> - 10 6 4 1 -1. - <_> - 11 6 2 1 2. - 0 - -6.5560699440538883e-003 - 0.3980642855167389 - -0.0507725998759270 - <_> - - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - -0.0300299003720284 - -0.6390048265457153 - 0.0487387515604496 - <_> - - <_> - - - - <_> - 10 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - 0.0176608301699162 - -0.0595817789435387 - 0.3628444969654083 - <_> - - <_> - - - - <_> - 6 9 2 3 -1. - <_> - 7 9 1 3 2. - 0 - 7.7252220362424850e-003 - 0.0484723597764969 - -0.5804312229156494 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 11 6 2 2 2. - 0 - -3.8417279720306396e-003 - 0.1348226964473724 - -0.0610821805894375 - <_> - - <_> - - - - <_> - 4 6 4 2 -1. - <_> - 5 6 2 2 2. - 0 - 0.0166973602026701 - -0.0615264996886253 - 0.4571023881435394 - <_> - - <_> - - - - <_> - 17 6 1 4 -1. - <_> - 17 8 1 2 2. - 0 - -4.7411560080945492e-003 - -0.4163604080677033 - 0.0598057210445404 - <_> - - <_> - - - - <_> - 4 5 3 4 -1. - <_> - 5 5 1 4 3. - 0 - -6.6320500336587429e-003 - 0.2973583042621613 - -0.0882061421871185 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - 0.0114865396171808 - 0.0501688085496426 - -0.5068880915641785 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 3 0 3 1 2. - 1 - -0.0213055107742548 - -0.5806246995925903 - 0.0410045497119427 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - -0.0470060892403126 - 0.3606848120689392 - -0.0726907923817635 - <_> - - <_> - - - - <_> - 5 0 6 2 -1. - <_> - 5 1 6 1 2. - 0 - 0.0178320500999689 - -0.0745304971933365 - 0.4049322009086609 - <_> - - <_> - - - - <_> - 0 2 18 6 -1. - <_> - 6 2 6 6 3. - 0 - -0.1559220999479294 - 0.1743181943893433 - -0.1708821058273315 - <_> - - <_> - - - - <_> - 0 2 1 8 -1. - <_> - 0 4 1 4 2. - 0 - 5.4303607903420925e-003 - 0.0795872509479523 - -0.3668319880962372 - <_> - - <_> - - - - <_> - 4 4 10 2 -1. - <_> - 4 5 10 1 2. - 0 - 0.0309371203184128 - -0.0652794018387794 - 0.4582205116748810 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -0.0100753400474787 - -0.3820677101612091 - 0.0585339218378067 - <_> - - <_> - - - - <_> - 12 5 4 3 -1. - <_> - 13 5 2 3 2. - 0 - -2.4391389451920986e-003 - 0.1646111011505127 - -0.1268818974494934 - <_> - - <_> - - - - <_> - 4 7 10 3 -1. - <_> - 4 8 10 1 3. - 0 - 0.0278460495173931 - -0.0685255527496338 - 0.2914296090602875 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 5 1 3 3. - 0 - -2.5113900192081928e-003 - 0.0792385712265968 - -0.0430091917514801 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 8 10 1 2 2. - 0 - 5.5342530831694603e-003 - 0.0363894514739513 - -0.4939846098423004 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - -0.0119995800778270 - -0.5277841091156006 - 0.0348490700125694 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 5 1 3 3. - 0 - -3.9921961724758148e-003 - 0.2196546047925949 - -0.0967817977070808 - <_> - - <_> - - - - <_> - 6 6 9 6 -1. - <_> - 9 6 3 6 3. - 0 - -0.1383754014968872 - -0.2243703007698059 - 0.0150382695719600 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - 3.9730938151478767e-003 - 0.0486323907971382 - -0.3849464952945709 - <_> - - <_> - - - - <_> - 4 6 12 6 -1. - <_> - 8 6 4 6 3. - 0 - -0.0275308508425951 - 0.0918577909469604 - -0.1133136972784996 - <_> - - <_> - - - - <_> - 0 8 12 4 -1. - <_> - 3 8 6 4 2. - 0 - -0.0483737103641033 - 0.2359331995248795 - -0.0890349075198174 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - -1.5814600046724081e-003 - 0.1099656000733376 - -0.0692868083715439 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 5 1 3 3. - 0 - -8.7159816175699234e-003 - 0.3035643994808197 - -0.0668695718050003 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - 0.0189945492893457 - 0.0177838001400232 - -0.5162413716316223 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 9.0731251984834671e-003 - 0.0439187400043011 - -0.4184378981590271 - <_> - - <_> - - - - <_> - 7 1 6 2 -1. - <_> - 7 2 6 1 2. - 0 - 0.0154860503971577 - -0.0585356988012791 - 0.2742938101291657 - <_> - - <_> - - - - <_> - 4 0 6 2 -1. - <_> - 6 0 2 2 3. - 0 - 0.0278208591043949 - 0.0296929199248552 - -0.6208760738372803 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -1.3044780353084207e-003 - 0.1631810069084168 - -0.0597193688154221 - <_> - - <_> - - - - <_> - 0 2 12 10 -1. - <_> - 3 2 6 10 2. - 0 - 0.0850326716899872 - -0.0649644434452057 - 0.2742621898651123 - <_> - - <_> - - - - <_> - 14 8 4 4 -1. - <_> - 14 9 4 2 2. - 0 - 0.0173957291990519 - 0.0384723208844662 - -0.3161869943141937 - <_> - - <_> - - - - <_> - 0 4 11 8 -1. - <_> - 0 8 11 4 2. - 0 - -0.0217651501297951 - -0.5277308821678162 - 0.0345700308680534 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 3 2 12 2 3. - 0 - -0.0974483937025070 - 0.2586145997047424 - -0.0740926116704941 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -1.5628200490027666e-003 - 0.2566618025302887 - -0.0725982785224915 - <_> - - <_> - - - - <_> - 4 2 12 9 -1. - <_> - 4 5 12 3 3. - 0 - -0.3764745891094208 - 0.2623197138309479 - -0.0712177082896233 - <_> - - <_> - - - - <_> - 0 8 4 4 -1. - <_> - 0 9 4 2 2. - 0 - -0.0219475291669369 - -0.5547178983688355 - 0.0329972393810749 - <_> - - <_> - - - - <_> - 0 1 18 10 -1. - <_> - 9 1 9 5 2. - <_> - 0 6 9 5 2. - 0 - 0.3863297104835510 - 0.0250742398202419 - -0.6083266735076904 - <_> - - <_> - - - - <_> - 2 5 3 3 -1. - <_> - 3 5 1 3 3. - 0 - -3.1041959300637245e-003 - 0.1647011041641235 - -0.1067690998315811 - <_> - - <_> - - - - <_> - 13 7 2 3 -1. - <_> - 12 8 2 1 3. - 1 - -0.0348609089851379 - -0.5792121887207031 - 0.0120840696617961 - <_> - - <_> - - - - <_> - 5 7 3 2 -1. - <_> - 6 8 1 2 3. - 1 - 0.0114234201610088 - 0.0562634691596031 - -0.2940773963928223 - <_> - - <_> - - - - <_> - 9 11 3 1 -1. - <_> - 10 11 1 1 3. - 0 - 5.8854189701378345e-003 - 0.0177149493247271 - -0.6431944966316223 - <_> - - <_> - - - - <_> - 0 7 3 4 -1. - <_> - 1 7 1 4 3. - 0 - -6.7278537899255753e-003 - 0.2264174073934555 - -0.0793665796518326 - <_> - - <_> - - - - <_> - 11 2 3 7 -1. - <_> - 12 3 1 7 3. - 1 - -0.0159681793302298 - 0.0849055498838425 - -0.0660248175263405 - -1.6599390506744385 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 1 9 9 -1. - <_> - 7 4 3 3 9. - 0 - -0.3678449988365173 - 0.4580034017562866 - -0.3384974896907806 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - -0.0948718935251236 - -0.4566903114318848 - 0.0328791812062263 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 3 0 3 5 2. - 0 - -0.0186041202396154 - 0.2092476040124893 - -0.3656792938709259 - <_> - - <_> - - - - <_> - 3 1 12 4 -1. - <_> - 3 2 12 2 2. - 0 - 0.0299748107790947 - -0.1928942054510117 - 0.3244841098785400 - <_> - - <_> - - - - <_> - 4 1 4 2 -1. - <_> - 5 1 2 2 2. - 0 - 0.0582082718610764 - 1.3660140102729201e-003 - -1.2704019775390625e+003 - <_> - - <_> - - - - <_> - 9 5 1 6 -1. - <_> - 9 5 1 3 2. - 1 - -0.0281898695975542 - 0.0971240922808647 - -0.1766522973775864 - <_> - - <_> - - - - <_> - 4 6 6 2 -1. - <_> - 6 6 2 2 3. - 0 - 0.0368029810488224 - -0.0573113784193993 - 0.5550702214241028 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 0 11 9 1 2. - 0 - 0.0501738302409649 - 0.0679184496402740 - -0.5538372993469238 - <_> - - <_> - - - - <_> - 0 6 3 4 -1. - <_> - 0 8 3 2 2. - 0 - 1.2276550114620477e-004 - -0.3669844865798950 - 0.1177998036146164 - <_> - - <_> - - - - <_> - 10 4 3 1 -1. - <_> - 11 5 1 1 3. - 1 - -0.0120473699644208 - 0.2811866104602814 - -0.0912861377000809 - <_> - - <_> - - - - <_> - 4 1 10 6 -1. - <_> - 4 3 10 2 3. - 0 - -0.1350065022706986 - 0.4058797955513001 - -0.1128389984369278 - <_> - - <_> - - - - <_> - 10 4 3 3 -1. - <_> - 11 5 1 3 3. - 1 - -0.0149468900635839 - 0.1118426024913788 - -0.0698558315634727 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - -0.0280802305787802 - 0.3713436126708984 - -0.1133548989892006 - <_> - - <_> - - - - <_> - 11 10 1 2 -1. - <_> - 11 11 1 1 2. - 0 - 8.9532906713429838e-005 - -0.2402140945196152 - 0.1545256972312927 - <_> - - <_> - - - - <_> - 2 3 1 2 -1. - <_> - 2 3 1 1 2. - 1 - 3.3625299111008644e-003 - 0.0762816965579987 - -0.4224978089332581 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - 7.7109010890126228e-003 - 0.0644295737147331 - -0.5258095860481262 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -4.0021299355430529e-005 - 0.1231333985924721 - -0.2576245069503784 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - -3.1202889513224363e-003 - -0.4603602886199951 - 0.0516123101115227 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -0.0100119300186634 - -0.5961192250251770 - 0.0472298003733158 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 6 4 6 1 3. - 0 - 0.0172056704759598 - -0.0876918286085129 - 0.3653124868869782 - <_> - - <_> - - - - <_> - 0 1 18 4 -1. - <_> - 6 1 6 4 3. - 0 - -0.0801585912704468 - 0.1794288009405136 - -0.1876136064529419 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 0 2 4 3. - 0 - -0.0308953896164894 - -0.5302869081497192 - 0.0623620413243771 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 7 0 2 4 3. - 0 - -0.0406635701656342 - -0.6517754793167114 - 0.0426155887544155 - <_> - - <_> - - - - <_> - 7 6 6 1 -1. - <_> - 9 6 2 1 3. - 0 - 0.0135178798809648 - -0.0641047134995461 - 0.3931429088115692 - <_> - - <_> - - - - <_> - 0 6 16 4 -1. - <_> - 0 6 8 2 2. - <_> - 8 8 8 2 2. - 0 - 0.0201111808419228 - -0.1706081032752991 - 0.1848185062408447 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - 0.0102605698630214 - 0.0333989486098289 - -0.4384176135063171 - <_> - - <_> - - - - <_> - 0 6 6 2 -1. - <_> - 2 6 2 2 3. - 0 - -0.0104852300137281 - 0.1974097937345505 - -0.1458822041749954 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - 4.0648399590281770e-005 - -0.0799942836165428 - 0.0417191497981548 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - -3.8299830630421638e-003 - -0.5332717895507813 - 0.0532816015183926 - <_> - - <_> - - - - <_> - 5 0 8 3 -1. - <_> - 5 1 8 1 3. - 0 - 0.0176424402743578 - -0.0992513522505760 - 0.2718920111656189 - <_> - - <_> - - - - <_> - 4 0 8 4 -1. - <_> - 4 1 8 2 2. - 0 - -0.0246081203222275 - 0.3012436032295227 - -0.0865402370691299 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - 0.0133686801418662 - 0.0436953492462635 - -0.6141436100006104 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 1 0 1 2 2. - 0 - -1.0268009646097198e-004 - 0.0897217988967896 - -0.2524099051952362 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 1 - -0.0282680708914995 - -0.4575898051261902 - 0.0269570406526327 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 2 2. - 1 - 4.5313038863241673e-003 - 0.0623464882373810 - -0.3822343945503235 - <_> - - <_> - - - - <_> - 0 4 18 8 -1. - <_> - 6 4 6 8 3. - 0 - -0.1472924947738648 - 0.1517153978347778 - -0.1768392026424408 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - -0.0150915598496795 - -0.3211879134178162 - 0.0812556594610214 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 12 5 2 3 2. - 0 - -7.1740341372787952e-003 - 0.1700261980295181 - -0.0606861785054207 - <_> - - <_> - - - - <_> - 3 5 4 3 -1. - <_> - 4 5 2 3 2. - 0 - -8.0513395369052887e-003 - 0.2949821054935455 - -0.0932806879281998 - <_> - - <_> - - - - <_> - 0 2 18 8 -1. - <_> - 9 2 9 4 2. - <_> - 0 6 9 4 2. - 0 - -0.1863020062446594 - -0.4409607946872711 - 0.0534295588731766 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - -0.0123886503279209 - -0.5852305889129639 - 0.0311960391700268 - <_> - - <_> - - - - <_> - 10 5 8 7 -1. - <_> - 12 5 4 7 2. - 0 - -5.3622801788151264e-003 - 0.1043976992368698 - -0.1043438985943794 - <_> - - <_> - - - - <_> - 3 0 4 4 -1. - <_> - 4 0 2 4 2. - 0 - -0.0195625107735395 - -0.5782986879348755 - 0.0322338417172432 - <_> - - <_> - - - - <_> - 10 5 8 7 -1. - <_> - 12 5 4 7 2. - 0 - -0.1455397009849548 - -0.4188070893287659 - 1.1629059445112944e-003 - <_> - - <_> - - - - <_> - 5 4 3 4 -1. - <_> - 6 4 1 4 3. - 0 - -7.3159099556505680e-003 - 0.2421896010637283 - -0.0783864632248878 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 9.5743779093027115e-003 - 0.0328008383512497 - -0.3508315980434418 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 4 0 3 1 2. - 1 - 0.0243859998881817 - 0.0358471088111401 - -0.4714579880237579 - <_> - - <_> - - - - <_> - 5 1 8 3 -1. - <_> - 5 2 8 1 3. - 0 - 0.0156095195561647 - -0.0903318300843239 - 0.2007496953010559 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 0.0185696799308062 - 0.0354041494429111 - -0.5211303830146790 - <_> - - <_> - - - - <_> - 6 2 12 10 -1. - <_> - 9 2 6 10 2. - 0 - 0.1385211050510407 - 0.0197376292198896 - -0.2735294103622437 - <_> - - <_> - - - - <_> - 1 9 12 2 -1. - <_> - 4 9 6 2 2. - 0 - -0.0207591392099857 - 0.1961200982332230 - -0.0967685729265213 - <_> - - <_> - - - - <_> - 6 2 12 10 -1. - <_> - 9 2 6 10 2. - 0 - -0.0262317098677158 - 0.0556492917239666 - -0.0586276985704899 - <_> - - <_> - - - - <_> - 0 2 12 10 -1. - <_> - 3 2 6 10 2. - 0 - 0.1103352978825569 - -0.0651929825544357 - 0.3279745876789093 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - 8.1975180655717850e-003 - -0.0367207713425159 - 0.1898375004529953 - <_> - - <_> - - - - <_> - 0 4 12 8 -1. - <_> - 0 8 12 4 2. - 0 - 0.0119252400472760 - -0.4718218147754669 - 0.0396095700562000 - <_> - - <_> - - - - <_> - 4 0 10 6 -1. - <_> - 4 2 10 2 3. - 0 - -0.1044408008456230 - 0.3060879111289978 - -0.0691674426198006 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 7 3 4 1 3. - 0 - 9.1293286532163620e-003 - -0.0964495763182640 - 0.2288205027580261 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 3.5521490644896403e-005 - -0.1374741941690445 - 0.1272355020046234 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - -6.4568631350994110e-003 - -0.4170354902744293 - 0.0472096502780914 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - -3.6431129556149244e-003 - 0.1455006003379822 - -0.0792814567685127 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 5 1 3 3. - 0 - -5.1797907799482346e-003 - 0.2031257003545761 - -0.0839847773313522 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 7 10 2 2 2. - 0 - 0.0146435899659991 - 0.0396593287587166 - -0.4402894079685211 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - -8.0946777015924454e-003 - -0.4590525031089783 - 0.0334861613810062 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 16 6 1 6 3. - 0 - 0.1076761037111282 - -1.4604750322178006e-003 - -0.9796121120452881 - <_> - - <_> - - - - <_> - 0 6 3 6 -1. - <_> - 1 6 1 6 3. - 0 - -6.4884279854595661e-003 - 0.1848790943622589 - -0.0934059023857117 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - -0.0164000391960144 - -0.4000653028488159 - 0.0326183289289474 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 3.0795740894973278e-003 - 0.0639369264245033 - -0.2440309971570969 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 6 1 12 2 2. - 0 - 0.0239280201494694 - -0.0744988173246384 - 0.1554102003574371 - <_> - - <_> - - - - <_> - 6 9 4 2 -1. - <_> - 7 9 2 2 2. - 0 - -8.8588669896125793e-003 - -0.4577736854553223 - 0.0322783701121807 - <_> - - <_> - - - - <_> - 12 4 3 5 -1. - <_> - 13 5 1 5 3. - 1 - -0.0300641693174839 - 0.2033582925796509 - -0.0448447391390800 - <_> - - <_> - - - - <_> - 7 2 4 7 -1. - <_> - 8 2 2 7 2. - 0 - -4.7341538593173027e-003 - 0.1222975030541420 - -0.1287313997745514 - <_> - - <_> - - - - <_> - 12 4 3 5 -1. - <_> - 13 5 1 5 3. - 1 - -0.0859813019633293 - 0.4308358132839203 - -6.3731619156897068e-003 - <_> - - <_> - - - - <_> - 6 4 5 3 -1. - <_> - 5 5 5 1 3. - 1 - -0.0216855593025684 - 0.2872771918773651 - -0.0603438317775726 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 9 0 2 2 2. - 0 - -0.0139413597062230 - -0.5132985711097717 - 0.0182015206664801 - <_> - - <_> - - - - <_> - 8 7 1 3 -1. - <_> - 8 8 1 1 3. - 0 - 2.4440600536763668e-003 - -0.0862608700990677 - 0.1663472950458527 - <_> - - <_> - - - - <_> - 16 2 2 4 -1. - <_> - 16 3 2 2 2. - 0 - 0.0175129994750023 - 0.0190671496093273 - -0.4114474952220917 - <_> - - <_> - - - - <_> - 3 10 4 2 -1. - <_> - 3 11 4 1 2. - 0 - 1.1205240298295394e-004 - -0.1976952999830246 - 0.0752563327550888 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 0 0 9 12 2. - 0 - 0.2471189051866531 - -0.0840330570936203 - 0.1738753020763397 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - 9.2011861852370203e-005 - -0.1085717976093292 - 0.1380801945924759 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 7 11 2 1 2. - 0 - -9.0258494019508362e-003 - -0.4781965911388397 - 0.0323574282228947 - <_> - - <_> - - - - <_> - 0 2 12 4 -1. - <_> - 4 2 4 4 3. - 0 - -0.0364946611225605 - 0.1140113025903702 - -0.1302298009395599 - <_> - - <_> - - - - <_> - 4 4 10 4 -1. - <_> - 4 6 10 2 2. - 0 - -0.1274674981832504 - 0.5173221826553345 - -0.0295272395014763 - <_> - - <_> - - - - <_> - 0 0 3 9 -1. - <_> - 0 3 3 3 3. - 0 - -0.0145612796768546 - 0.1106462031602860 - -0.1492325961589813 - <_> - - <_> - - - - <_> - 16 3 2 7 -1. - <_> - 16 3 1 7 2. - 0 - -1.3745570322498679e-004 - 0.0589876212179661 - -0.0936712697148323 - <_> - - <_> - - - - <_> - 0 3 2 7 -1. - <_> - 1 3 1 7 2. - 0 - 0.0101257096976042 - -0.0469427704811096 - 0.3477950096130371 - <_> - - <_> - - - - <_> - 14 7 3 2 -1. - <_> - 14 7 3 1 2. - 1 - -1.4763530343770981e-003 - 0.0670574381947517 - -0.1526874005794525 - <_> - - <_> - - - - <_> - 9 2 6 1 -1. - <_> - 9 2 3 1 2. - 1 - -0.0517815612256527 - 0.3281255960464478 - -0.0494284704327583 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -8.7604322470724583e-004 - 0.0952432081103325 - -0.0494834296405315 - <_> - - <_> - - - - <_> - 2 0 4 4 -1. - <_> - 3 0 2 4 2. - 0 - -0.0229231994599104 - -0.6071078181266785 - 0.0219025295227766 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - 3.9328118873527274e-005 - -0.0764032974839211 - 0.0959084108471870 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -2.6600218843668699e-003 - 0.2443193942308426 - -0.0640988200902939 - <_> - - <_> - - - - <_> - 12 4 6 8 -1. - <_> - 14 4 2 8 3. - 0 - 0.0796696171164513 - -0.0112138101831079 - 0.1594066023826599 - <_> - - <_> - - - - <_> - 0 4 6 8 -1. - <_> - 2 4 2 8 3. - 0 - -0.0283483900129795 - 0.1525990962982178 - -0.0880621299147606 - <_> - - <_> - - - - <_> - 14 9 1 2 -1. - <_> - 14 9 1 1 2. - 1 - 7.4440040625631809e-003 - 0.0216696392744780 - -0.4013268947601318 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - -0.0110876401886344 - -0.3900437057018280 - 0.0354469195008278 - <_> - - <_> - - - - <_> - 6 0 6 6 -1. - <_> - 6 2 6 2 3. - 0 - 0.1426142007112503 - -0.0394678115844727 - 0.3423734009265900 - <_> - - <_> - - - - <_> - 6 1 1 3 -1. - <_> - 5 2 1 1 3. - 1 - 0.0107092801481485 - 0.0392963103950024 - -0.3375889956951141 - -1.7070800065994263 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 2 18 6 -1. - <_> - 6 4 6 2 9. - 0 - -0.4944294989109039 - 0.4432367086410523 - -0.2731918096542358 - <_> - - <_> - - - - <_> - 6 4 6 6 -1. - <_> - 8 6 2 2 9. - 0 - -0.1255495995283127 - 0.4086275100708008 - -0.2286864072084427 - <_> - - <_> - - - - <_> - 0 0 4 5 -1. - <_> - 2 0 2 5 2. - 0 - -5.2924221381545067e-003 - 0.1653403043746948 - -0.4309850931167603 - <_> - - <_> - - - - <_> - 3 2 12 6 -1. - <_> - 3 4 12 2 3. - 0 - -0.1019280999898911 - 0.2675485014915466 - -0.1803811043500900 - <_> - - <_> - - - - <_> - 0 0 12 9 -1. - <_> - 4 3 4 3 9. - 0 - 1.8004419803619385 - -0.0218416098505259 - -1.4260159912109375e+003 - <_> - - <_> - - - - <_> - 7 6 6 1 -1. - <_> - 9 6 2 1 3. - 0 - 0.0106081003323197 - -0.0599600598216057 - 0.3470948934555054 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -1.6630759928375483e-003 - 0.2880687117576599 - -0.1544501930475235 - <_> - - <_> - - - - <_> - 13 8 2 2 -1. - <_> - 13 8 2 1 2. - 1 - -1.1193910177098587e-004 - 0.0988647714257240 - -0.1179578006267548 - <_> - - <_> - - - - <_> - 9 5 6 1 -1. - <_> - 9 5 3 1 2. - 1 - -0.0428598895668983 - 0.1675925999879837 - -0.2145795971155167 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - -9.3869988631922752e-005 - 0.0969651266932487 - -0.0838379636406899 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 2 1 2 3. - 0 - 0.0115309301763773 - 0.0575596801936626 - -0.5271893143653870 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 12 5 2 3 2. - 0 - 0.0191066004335880 - -0.0451174601912498 - 0.3824315071105957 - <_> - - <_> - - - - <_> - 3 5 4 3 -1. - <_> - 4 5 2 3 2. - 0 - 0.0176006890833378 - -0.0881981328129768 - 0.4344091117382050 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 9 1 1 2. - 1 - -0.0137698398903012 - -0.4392161071300507 - 0.0283458400517702 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 5 9 1 1 2. - 1 - -8.7673062807880342e-005 - 0.1201528012752533 - -0.2929485142230988 - <_> - - <_> - - - - <_> - 12 10 2 1 -1. - <_> - 12 10 1 1 2. - 0 - -7.6127682405058295e-005 - 0.1565580964088440 - -0.1553092002868652 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - 0.0849090367555618 - -0.0912368968129158 - 0.3245357871055603 - <_> - - <_> - - - - <_> - 17 2 1 6 -1. - <_> - 17 4 1 2 3. - 0 - -0.0153678599745035 - -0.2972925901412964 - 0.0476994700729847 - <_> - - <_> - - - - <_> - 0 2 1 6 -1. - <_> - 0 4 1 2 3. - 0 - 9.9366791546344757e-003 - 0.0579129010438919 - -0.5025929212570190 - <_> - - <_> - - - - <_> - 12 10 2 1 -1. - <_> - 12 10 1 1 2. - 0 - 7.6439202530309558e-005 - -0.0994988903403282 - 0.1319828033447266 - <_> - - <_> - - - - <_> - 4 10 2 1 -1. - <_> - 5 10 1 1 2. - 0 - -8.2395068602636456e-005 - 0.1773208975791931 - -0.1624138057231903 - <_> - - <_> - - - - <_> - 6 4 6 2 -1. - <_> - 6 5 6 1 2. - 0 - 0.0158796999603510 - -0.0755143687129021 - 0.3582257032394409 - <_> - - <_> - - - - <_> - 2 0 8 4 -1. - <_> - 4 0 4 4 2. - 0 - -3.0790620949119329e-003 - 0.1157094016671181 - -0.2188936024904251 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 1 2 1 3. - 0 - -0.0149054499343038 - -0.3903988897800446 - 0.0172546096146107 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 0 1 2 1 3. - 0 - 8.6873043328523636e-003 - 0.0447169505059719 - -0.4975813925266266 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - 0.0320288799703121 - -0.0829745233058929 - 0.2825737893581390 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 5 1 6 2 2. - 0 - -0.0319186113774776 - 0.3584215939044952 - -0.0685920417308807 - <_> - - <_> - - - - <_> - 14 9 3 3 -1. - <_> - 14 10 3 1 3. - 0 - -9.8993210121989250e-003 - -0.4575395882129669 - 0.0432857908308506 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -9.1577637940645218e-003 - 0.3282673060894013 - -0.0666982084512711 - <_> - - <_> - - - - <_> - 15 6 2 4 -1. - <_> - 15 6 2 2 2. - 1 - -0.0101063996553421 - 0.0910731330513954 - -0.2090729027986527 - <_> - - <_> - - - - <_> - 5 8 3 1 -1. - <_> - 6 9 1 1 3. - 1 - -0.0104028303176165 - -0.4887495934963226 - 0.0389311015605927 - <_> - - <_> - - - - <_> - 12 9 6 3 -1. - <_> - 12 10 6 1 3. - 0 - 0.0205620005726814 - 0.0399953089654446 - -0.4745224118232727 - <_> - - <_> - - - - <_> - 4 0 6 4 -1. - <_> - 6 0 2 4 3. - 0 - -0.0383521914482117 - -0.4705803990364075 - 0.0379087999463081 - <_> - - <_> - - - - <_> - 9 5 3 2 -1. - <_> - 10 5 1 2 3. - 0 - -6.9335498847067356e-003 - 0.2498701959848404 - -0.0568830110132694 - <_> - - <_> - - - - <_> - 5 5 6 3 -1. - <_> - 7 5 2 3 3. - 0 - -0.0198519993573427 - 0.1899172961711884 - -0.1151091009378433 - <_> - - <_> - - - - <_> - 16 5 2 6 -1. - <_> - 16 5 1 6 2. - 0 - -9.5688046712893993e-005 - 0.1311149001121521 - -0.2073902040719986 - <_> - - <_> - - - - <_> - 9 1 9 1 -1. - <_> - 12 4 3 1 3. - 1 - -0.0456793308258057 - 0.1472624987363815 - -0.1260557025671005 - <_> - - <_> - - - - <_> - 5 1 8 4 -1. - <_> - 5 2 8 2 2. - 0 - -0.0442554093897343 - 0.3928618133068085 - -0.0561437383294106 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - -0.0779984071850777 - 0.1794721037149429 - -0.1183350011706352 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 8.4853731095790863e-003 - 0.0254964195191860 - -0.2206833958625794 - <_> - - <_> - - - - <_> - 6 8 6 4 -1. - <_> - 6 9 6 2 2. - 0 - -0.0170472599565983 - 0.2729797959327698 - -0.0701882988214493 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 7.9200501204468310e-005 - -0.0676054432988167 - 0.0715299770236015 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 6.2673659995198250e-003 - 0.0545715093612671 - -0.3661769926548004 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 7.8682642197236419e-005 - -0.0711669325828552 - 0.0792106315493584 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.0391850082669407e-004 - 0.1148732006549835 - -0.2016350030899048 - <_> - - <_> - - - - <_> - 15 5 1 6 -1. - <_> - 15 5 1 3 2. - 1 - 3.4147119149565697e-003 - 0.0404553487896919 - -0.2310896068811417 - <_> - - <_> - - - - <_> - 7 5 3 2 -1. - <_> - 8 5 1 2 3. - 0 - 8.3642201498150826e-003 - -0.0459274612367153 - 0.4052931070327759 - <_> - - <_> - - - - <_> - 14 9 4 3 -1. - <_> - 14 10 4 1 3. - 0 - 0.0363622494041920 - 7.8255804255604744e-003 - -0.7447971105575562 - <_> - - <_> - - - - <_> - 5 0 3 4 -1. - <_> - 5 0 3 2 2. - 1 - -0.0402664281427860 - -0.2923462986946106 - 0.0579853095114231 - <_> - - <_> - - - - <_> - 14 9 4 3 -1. - <_> - 14 10 4 1 3. - 0 - -0.0364161692559719 - -0.5792301893234253 - 5.2343257702887058e-003 - <_> - - <_> - - - - <_> - 0 9 4 3 -1. - <_> - 0 10 4 1 3. - 0 - 0.0145023297518492 - 0.0371914505958557 - -0.4779016971588135 - <_> - - <_> - - - - <_> - 14 6 4 6 -1. - <_> - 14 8 4 2 3. - 0 - 0.0718946009874344 - 0.0136800501495600 - -0.4205363988876343 - <_> - - <_> - - - - <_> - 0 5 4 6 -1. - <_> - 0 7 4 2 3. - 0 - 0.0470776110887527 - 0.0373116098344326 - -0.4420563876628876 - <_> - - <_> - - - - <_> - 9 3 3 6 -1. - <_> - 10 4 1 6 3. - 1 - -0.0206916201859713 - 0.0925844237208366 - -0.0546560809016228 - <_> - - <_> - - - - <_> - 6 1 6 10 -1. - <_> - 6 1 3 5 2. - <_> - 9 6 3 5 2. - 0 - 0.0587022304534912 - 0.0428943000733852 - -0.3946191966533661 - <_> - - <_> - - - - <_> - 16 5 2 6 -1. - <_> - 16 5 1 6 2. - 0 - 0.0262665394693613 - -0.0163683108985424 - 0.4108464121818543 - <_> - - <_> - - - - <_> - 0 5 2 6 -1. - <_> - 1 5 1 6 2. - 0 - -6.7523908801376820e-003 - 0.1412699967622757 - -0.1112271025776863 - <_> - - <_> - - - - <_> - 13 0 5 2 -1. - <_> - 13 0 5 1 2. - 1 - -0.0306247491389513 - 0.3300161957740784 - -0.0244121495634317 - <_> - - <_> - - - - <_> - 5 0 2 5 -1. - <_> - 5 0 1 5 2. - 1 - -0.0201119296252728 - 0.3670873045921326 - -0.0443142503499985 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 6 8 6 4 2. - 0 - 0.0234196204692125 - -0.3760148882865906 - 0.0436353385448456 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -3.6192089319229126e-003 - 0.2946003973484039 - -0.0584158189594746 - <_> - - <_> - - - - <_> - 1 10 16 2 -1. - <_> - 5 10 8 2 2. - 0 - -0.0464851483702660 - 0.2271838039159775 - -0.0799866020679474 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 8 9 2 3 3. - 0 - -0.0279610902070999 - -0.4885483086109161 - 0.0407610014081001 - <_> - - <_> - - - - <_> - 9 10 4 2 -1. - <_> - 10 10 2 2 2. - 0 - -8.8993441313505173e-003 - -0.6105641126632690 - 0.0314365103840828 - <_> - - <_> - - - - <_> - 9 4 3 4 -1. - <_> - 8 5 3 2 2. - 1 - -0.0477569997310638 - 0.3569563031196594 - -0.0477065816521645 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - 0.0152032002806664 - 0.0323973484337330 - -0.5112919807434082 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 8 0 2 3 3. - 0 - -0.0266036298125982 - -0.4552874863147736 - 0.0307058691978455 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -2.0662199240177870e-003 - 0.1982124000787735 - -0.0512503385543823 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 0 9 2 1 3. - 0 - 6.8433540873229504e-003 - 0.0428170002996922 - -0.3479677140712738 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 1.3943660305812955e-003 - -0.0766242891550064 - 0.1794779002666473 - <_> - - <_> - - - - <_> - 1 4 2 4 -1. - <_> - 1 5 2 2 2. - 0 - -1.5453259402420372e-004 - 0.0940354913473129 - -0.1508911997079849 - <_> - - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 3 2 12 4 2. - 0 - -0.1606334000825882 - 0.1889608055353165 - -0.0759271532297134 - <_> - - <_> - - - - <_> - 0 3 12 9 -1. - <_> - 3 3 6 9 2. - 0 - 0.1632349044084549 - -0.0359818488359451 - 0.3854643106460571 - <_> - - <_> - - - - <_> - 16 0 2 10 -1. - <_> - 16 0 2 5 2. - 1 - -0.2156265974044800 - -0.3006359040737152 - 0.0103279901668429 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 1 2 2. - 1 - -0.0182593408972025 - -0.3508914113044739 - 0.0386066697537899 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - 8.7421722128055990e-005 - -0.0849973484873772 - 0.0894383564591408 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 9.1984707978554070e-005 - -0.1202903985977173 - 0.1293579936027527 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - -9.7184813057538122e-005 - 0.1522649973630905 - -0.1057697013020515 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - -8.1813501310534775e-005 - 0.1512914001941681 - -0.1008976027369499 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - 0.3695268929004669 - 0.0335036404430866 - -0.4041796028614044 - <_> - - <_> - - - - <_> - 0 6 6 6 -1. - <_> - 0 9 6 3 2. - 0 - 0.0221050791442394 - -0.2156080007553101 - 0.0644896999001503 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - 0.0131700001657009 - 0.0329808294773102 - -0.2844839990139008 - <_> - - <_> - - - - <_> - 6 1 6 2 -1. - <_> - 6 2 6 1 2. - 0 - 0.0136407203972340 - -0.0565987192094326 - 0.2403969019651413 - <_> - - <_> - - - - <_> - 16 2 2 1 -1. - <_> - 16 2 1 1 2. - 1 - 0.0123014897108078 - 0.0198160801082850 - -0.4614421129226685 - <_> - - <_> - - - - <_> - 2 1 10 1 -1. - <_> - 2 1 5 1 2. - 1 - -0.0954839587211609 - -0.3497360944747925 - 0.0355318300426006 - <_> - - <_> - - - - <_> - 16 2 2 1 -1. - <_> - 16 2 1 1 2. - 1 - -0.0100814895704389 - -0.3135909140110016 - 0.0211787000298500 - <_> - - <_> - - - - <_> - 2 2 1 2 -1. - <_> - 2 2 1 1 2. - 1 - 8.1625310704112053e-003 - 0.0320664905011654 - -0.4284090995788574 - <_> - - <_> - - - - <_> - 11 4 2 6 -1. - <_> - 11 4 1 6 2. - 1 - 0.0599948391318321 - 4.8301668721251190e-004 - -0.2856814861297607 - <_> - - <_> - - - - <_> - 7 4 6 2 -1. - <_> - 7 4 6 1 2. - 1 - -0.0582982301712036 - 0.2886638045310974 - -0.0453336387872696 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 10 6 1 2 2. - 0 - 8.0641999375075102e-004 - -0.0275020804256201 - 0.0551308505237103 - <_> - - <_> - - - - <_> - 6 6 2 2 -1. - <_> - 7 6 1 2 2. - 0 - 9.2612383014056832e-005 - -0.0907249227166176 - 0.1626842021942139 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - -0.0140318702906370 - -0.1737713962793350 - 0.0275894906371832 - <_> - - <_> - - - - <_> - 6 0 6 11 -1. - <_> - 8 0 2 11 3. - 0 - -0.0218567494302988 - 0.1125387996435165 - -0.1132863983511925 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - -0.0427514202892780 - -0.5299208164215088 - 4.2229499667882919e-003 - <_> - - <_> - - - - <_> - 4 10 6 2 -1. - <_> - 6 10 2 2 3. - 0 - -0.0303758494555950 - -0.7117819190025330 - 0.0175708904862404 - <_> - - <_> - - - - <_> - 14 2 4 4 -1. - <_> - 14 3 4 2 2. - 0 - 0.0374990999698639 - 6.9999499246478081e-003 - -0.3700616061687470 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 1.1432570172473788e-003 - -0.0622201003134251 - 0.1770377010107040 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -8.5832587501499802e-005 - 0.0600301809608936 - -0.0511055402457714 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -9.4309507403522730e-005 - 0.1062557995319367 - -0.1129119992256165 - <_> - - <_> - - - - <_> - 14 2 4 4 -1. - <_> - 14 3 4 2 2. - 0 - 3.9328118873527274e-005 - -0.0646813288331032 - 0.0718460232019424 - <_> - - <_> - - - - <_> - 0 2 4 4 -1. - <_> - 0 3 4 2 2. - 0 - 0.0181304607540369 - 0.0342655815184116 - -0.3621313869953156 - <_> - - <_> - - - - <_> - 15 0 3 4 -1. - <_> - 14 1 3 2 2. - 1 - -0.0345147810876369 - 0.3102214932441711 - -0.0410985611379147 - <_> - - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 1 2 3 2. - 1 - 0.0279743708670139 - -0.0394241884350777 - 0.3085164129734039 - <_> - - <_> - - - - <_> - 5 0 10 3 -1. - <_> - 5 0 5 3 2. - 0 - -0.0282010808587074 - 0.1152570024132729 - -0.0745114237070084 - <_> - - <_> - - - - <_> - 5 2 6 2 -1. - <_> - 7 2 2 2 3. - 0 - -0.0303798001259565 - -0.5247095823287964 - 0.0261528994888067 - <_> - - <_> - - - - <_> - 3 0 12 2 -1. - <_> - 3 1 12 1 2. - 0 - -0.0320389606058598 - 0.1934390068054199 - -0.0616701394319534 - <_> - - <_> - - - - <_> - 5 0 6 3 -1. - <_> - 5 1 6 1 3. - 0 - 0.0119982901960611 - -0.0754646733403206 - 0.1925584971904755 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0353140681982040 - -0.5070567131042481 - 0.0105850100517273 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - -0.0186556205153465 - -0.3621180057525635 - 0.0364059507846832 - <_> - - <_> - - - - <_> - 10 5 8 7 -1. - <_> - 12 5 4 7 2. - 0 - -2.8076169546693563e-003 - 0.0532416105270386 - -0.0615109205245972 - <_> - - <_> - - - - <_> - 0 5 8 7 -1. - <_> - 2 5 4 7 2. - 0 - 0.0612496584653854 - -0.0462308190762997 - 0.2610364854335785 - <_> - - <_> - - - - <_> - 12 8 6 2 -1. - <_> - 14 8 2 2 3. - 0 - 3.8007500115782022e-003 - -0.0336081497371197 - 0.0631855279207230 - <_> - - <_> - - - - <_> - 0 8 6 2 -1. - <_> - 2 8 2 2 3. - 0 - -6.8106069229543209e-003 - 0.1389688998460770 - -0.0913678631186485 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - -1.4018400106579065e-003 - 0.0502283200621605 - -0.0678105130791664 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - 4.1776038706302643e-003 - 0.0316176787018776 - -0.3886192142963409 - <_> - - <_> - - - - <_> - 5 4 8 4 -1. - <_> - 5 5 8 2 2. - 0 - -0.0333176814019680 - 0.1512963026762009 - -0.0808627232909203 - -1.6312040090560913 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0174887608736753 - 0.3290168046951294 - -0.2589027881622315 - <_> - - <_> - - - - <_> - 16 0 2 6 -1. - <_> - 16 0 1 6 2. - 0 - -7.6176282018423080e-003 - 0.0715411528944969 - -0.0239514596760273 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.2771295011043549 - -0.3484548032283783 - 0.1825670003890991 - <_> - - <_> - - - - <_> - 1 2 16 4 -1. - <_> - 5 2 8 4 2. - 0 - -0.0622215606272221 - 0.1067496016621590 - -0.1420153975486755 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 1 0 1 6 2. - 0 - -2.7581760659813881e-003 - 0.2068990021944046 - -0.3423182964324951 - <_> - - <_> - - - - <_> - 3 1 12 4 -1. - <_> - 3 2 12 2 2. - 0 - 0.0243921894580126 - -0.1896311938762665 - 0.2594645917415619 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -4.5020319521427155e-003 - 0.4086619019508362 - -0.1162187978625298 - <_> - - <_> - - - - <_> - 10 6 3 1 -1. - <_> - 11 6 1 1 3. - 0 - -3.3270670101046562e-003 - 0.2864105105400085 - -0.0700594931840897 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 3.1234470661729574e-003 - -0.3179500102996826 - 0.1126864999532700 - <_> - - <_> - - - - <_> - 10 6 3 1 -1. - <_> - 11 6 1 1 3. - 0 - 4.7244699671864510e-003 - -0.0749227777123451 - 0.3298830986022949 - <_> - - <_> - - - - <_> - 1 0 8 3 -1. - <_> - 3 0 4 3 2. - 0 - -5.5989590473473072e-003 - 0.1410644948482513 - -0.2187085002660751 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - -0.0136737404391170 - -0.2918831110000610 - 0.0518858097493649 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - -0.0157100707292557 - -0.4745010137557983 - 0.0724115073680878 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - -6.2331659719347954e-003 - 0.1514564007520676 - -0.0478630699217319 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 5 1 3 3. - 0 - -5.9798290021717548e-003 - 0.3030067086219788 - -0.1002055034041405 - <_> - - <_> - - - - <_> - 11 5 6 4 -1. - <_> - 13 5 2 4 3. - 0 - -0.0196141097694635 - 0.2390653938055039 - -0.1238047033548355 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 9 3 4 1 2. - 1 - -0.0976585298776627 - 0.3355017006397247 - -0.0849311873316765 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 6 1 3 3. - 1 - 0.0559934414923191 - -0.0157214999198914 - 0.4002408981323242 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 4 6 3 1 3. - 1 - -9.7235292196273804e-003 - 0.2175637930631638 - -0.1143577992916107 - <_> - - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 11 0 2 4 2. - 0 - -0.0147228604182601 - -0.5574753880500794 - 0.0360783897340298 - <_> - - <_> - - - - <_> - 4 3 10 3 -1. - <_> - 4 4 10 1 3. - 0 - 0.0255173705518246 - -0.0822562575340271 - 0.3133553862571716 - <_> - - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 8 2 1 2. - 1 - 0.0135676600039005 - 0.0231330506503582 - -0.4129768908023834 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 2 2. - 1 - -0.0172048993408680 - -0.4416218101978302 - 0.0526054985821247 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 14 1 1 3 3. - 1 - 0.0349194593727589 - 0.0143976099789143 - -0.3956964910030365 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 0 2 4 2. - 0 - -0.0177818108350039 - -0.5853496193885803 - 0.0370465889573097 - <_> - - <_> - - - - <_> - 14 6 4 6 -1. - <_> - 14 8 4 2 3. - 0 - 0.0601220987737179 - 0.0144355399534106 - -0.3374317884445190 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -5.4228208027780056e-003 - 0.2567724883556366 - -0.0792531073093414 - <_> - - <_> - - - - <_> - 12 5 6 6 -1. - <_> - 14 5 2 6 3. - 0 - -0.0124845402315259 - 0.1183615997433662 - -0.0817201063036919 - <_> - - <_> - - - - <_> - 0 5 6 6 -1. - <_> - 2 5 2 6 3. - 0 - -0.0160043202340603 - 0.1676249951124191 - -0.1424752026796341 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 6 1 6 1 3. - 0 - 0.0187443494796753 - -0.0759247988462448 - 0.2739894986152649 - <_> - - <_> - - - - <_> - 4 2 2 2 -1. - <_> - 4 2 2 1 2. - 1 - 0.0114670097827911 - 0.0580740086734295 - -0.3760870099067688 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 5 2 8 2 3. - 0 - 0.2045127004384995 - -0.0525430813431740 - 0.5065112709999085 - <_> - - <_> - - - - <_> - 6 0 5 2 -1. - <_> - 6 1 5 1 2. - 0 - -0.0153748402372003 - 0.2850579023361206 - -0.0851908996701241 - <_> - - <_> - - - - <_> - 10 8 4 4 -1. - <_> - 11 8 2 4 2. - 0 - 8.3877835422754288e-003 - 0.0507229194045067 - -0.2402483969926834 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 8 8 2 3 3. - 0 - 0.0194639600813389 - 0.0477014482021332 - -0.4016815125942230 - <_> - - <_> - - - - <_> - 15 3 1 2 -1. - <_> - 15 4 1 1 2. - 0 - -9.6702417067717761e-005 - 0.0800572633743286 - -0.1014837995171547 - <_> - - <_> - - - - <_> - 0 5 3 4 -1. - <_> - 0 6 3 2 2. - 0 - -0.0282712094485760 - -0.6657310724258423 - 0.0270669497549534 - <_> - - <_> - - - - <_> - 15 2 3 9 -1. - <_> - 15 5 3 3 3. - 0 - 0.0409858599305153 - 0.0239809006452560 - -0.2898535132408142 - <_> - - <_> - - - - <_> - 0 2 3 9 -1. - <_> - 0 5 3 3 3. - 0 - -2.4697459302842617e-003 - 0.0906313583254814 - -0.2157569974660873 - <_> - - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 8 1 2 3 3. - 0 - -0.0369532108306885 - -0.6170697212219238 - 0.0249697696417570 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - -0.0143134100362659 - -0.4372077882289887 - 0.0345618687570095 - <_> - - <_> - - - - <_> - 6 2 6 2 -1. - <_> - 6 3 6 1 2. - 0 - 0.0154698099941015 - -0.0557254999876022 - 0.2945851981639862 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0154017601162195 - -0.1255502998828888 - 0.1701169013977051 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - 0.0204499401152134 - 0.0133307501673698 - -0.3555453121662140 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.1459179950179532e-004 - 0.1009780988097191 - -0.1790259927511215 - <_> - - <_> - - - - <_> - 2 0 16 9 -1. - <_> - 2 0 8 9 2. - 0 - 0.2134594023227692 - -0.0602789297699928 - 0.2471397966146469 - <_> - - <_> - - - - <_> - 1 0 15 12 -1. - <_> - 6 0 5 12 3. - 0 - -0.0763418376445770 - 0.1017488986253738 - -0.1740338951349258 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 5 1 3 3. - 0 - -2.7297199703752995e-003 - 0.0790330320596695 - -0.0480748713016510 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 5 1 3 3. - 0 - -3.9923721924424171e-003 - 0.1913011968135834 - -0.0882533565163612 - <_> - - <_> - - - - <_> - 15 3 2 3 -1. - <_> - 14 4 2 1 3. - 1 - 8.8855503126978874e-003 - -0.0750358998775482 - 0.2404378056526184 - <_> - - <_> - - - - <_> - 3 3 3 2 -1. - <_> - 4 4 1 2 3. - 1 - -9.9884327501058578e-003 - 0.1900804042816162 - -0.1013688966631889 - <_> - - <_> - - - - <_> - 13 0 4 1 -1. - <_> - 14 1 2 1 2. - 1 - -0.0271024703979492 - -0.5596001148223877 - 8.8603552430868149e-003 - <_> - - <_> - - - - <_> - 5 0 1 4 -1. - <_> - 4 1 1 2 2. - 1 - 0.0109577896073461 - 0.0418252907693386 - -0.4544624090194702 - <_> - - <_> - - - - <_> - 12 0 4 5 -1. - <_> - 13 0 2 5 2. - 0 - -0.0174607001245022 - -0.2339920997619629 - 0.0163397602736950 - <_> - - <_> - - - - <_> - 2 0 4 5 -1. - <_> - 3 0 2 5 2. - 0 - -0.0198533497750759 - -0.4893226921558380 - 0.0327089615166187 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 2 2. - 0 - -6.1350357718765736e-003 - -0.5119137167930603 - 0.0277235507965088 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 9 11 9 1 2. - 0 - -0.0489922799170017 - -0.3657616078853607 - 0.0404207296669483 - <_> - - <_> - - - - <_> - 0 2 18 10 -1. - <_> - 9 2 9 5 2. - <_> - 0 7 9 5 2. - 0 - -0.3345969021320343 - -0.5915396809577942 - 0.0214608106762171 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - -0.0288625191897154 - -0.5981599092483521 - 0.0197811909019947 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -1.1251099640503526e-003 - 0.2012231945991516 - -0.0877450332045555 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - -6.4093400724232197e-003 - -0.6194838285446167 - 0.0233440306037664 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - 1.1830270523205400e-003 - -0.0693428590893745 - 0.1403933018445969 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -1.0599560337141156e-003 - 0.1726070940494537 - -0.0810974463820457 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - -8.5180420428514481e-003 - -0.5305172204971314 - 0.0261807590723038 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 6 5 4 1 3. - 1 - -0.0235210992395878 - 0.2543213963508606 - -0.0569511689245701 - <_> - - <_> - - - - <_> - 15 7 3 2 -1. - <_> - 15 7 3 1 2. - 1 - 7.3622940108180046e-003 - 0.0304503105580807 - -0.2679772078990936 - <_> - - <_> - - - - <_> - 3 7 2 3 -1. - <_> - 3 7 1 3 2. - 1 - -0.0214394908398390 - -0.3360837996006012 - 0.0430436097085476 - <_> - - <_> - - - - <_> - 14 5 4 7 -1. - <_> - 14 5 2 7 2. - 0 - -0.0117694595828652 - 0.1021286025643349 - -0.1081041991710663 - <_> - - <_> - - - - <_> - 0 5 4 7 -1. - <_> - 2 5 2 7 2. - 0 - 0.0285888798534870 - -0.0607876889407635 - 0.3114551901817322 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - -0.0118945203721523 - -0.4558668136596680 - 0.0326492898166180 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 10 1 1 2. - 0 - 8.9476241555530578e-005 - -0.1775503009557724 - 0.0792321562767029 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 9 4 1 3 3. - 0 - 0.0105876196175814 - -0.0244111903011799 - 0.2277595996856690 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 8 4 3 1 3. - 1 - -0.0136775597929955 - 0.1086378991603851 - -0.1219365000724793 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 5 12 2 2. - 0 - 0.1324439048767090 - -0.0332038290798664 - 0.4541761875152588 - <_> - - <_> - - - - <_> - 6 1 2 4 -1. - <_> - 5 2 2 2 2. - 1 - -0.0344199985265732 - -0.4487634897232056 - 0.0336807481944561 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - 0.0143925296142697 - 0.0172506701201200 - -0.2875052094459534 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - -0.0159694403409958 - -0.5441995263099670 - 0.0224903207272291 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.7835280159488320e-003 - 0.0288773793727160 - -0.2226925939321518 - <_> - - <_> - - - - <_> - 0 6 3 5 -1. - <_> - 1 6 1 5 3. - 0 - -4.9637211486697197e-003 - 0.1536799073219299 - -0.0800541564822197 - <_> - - <_> - - - - <_> - 15 5 3 7 -1. - <_> - 16 5 1 7 3. - 0 - 3.7779840640723705e-003 - -0.0495440810918808 - 0.0890248715877533 - <_> - - <_> - - - - <_> - 0 4 4 8 -1. - <_> - 1 4 2 8 2. - 0 - 7.8981714323163033e-003 - -0.0748666971921921 - 0.2043195068836212 - <_> - - <_> - - - - <_> - 12 3 6 4 -1. - <_> - 12 4 6 2 2. - 0 - -0.0805533528327942 - -0.5644226074218750 - 9.1366795822978020e-003 - <_> - - <_> - - - - <_> - 0 3 4 4 -1. - <_> - 0 4 4 2 2. - 0 - -0.0307595804333687 - -0.4434016942977905 - 0.0241375993937254 - <_> - - <_> - - - - <_> - 16 3 1 2 -1. - <_> - 16 4 1 1 2. - 0 - -9.2535447329282761e-003 - -0.5626115798950195 - 9.2792203649878502e-003 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - -1.2369129399303347e-004 - 0.1064539998769760 - -0.1200010031461716 - <_> - - <_> - - - - <_> - 7 1 8 3 -1. - <_> - 7 2 8 1 3. - 0 - 0.0325675383210182 - -0.0400038696825504 - 0.1998082995414734 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 1 4 2 2. - 0 - -0.0112470798194408 - 0.1840949058532715 - -0.0681177005171776 - <_> - - <_> - - - - <_> - 11 1 1 8 -1. - <_> - 9 3 1 4 2. - 1 - -0.0291797891259193 - 0.0487212613224983 - -0.0474253706634045 - <_> - - <_> - - - - <_> - 0 6 4 6 -1. - <_> - 0 8 4 2 3. - 0 - 0.0495177395641804 - 0.0327079109847546 - -0.3887144029140472 - <_> - - <_> - - - - <_> - 10 10 4 2 -1. - <_> - 11 10 2 2 2. - 0 - -7.7525358647108078e-003 - -0.4073589146137238 - 0.0279740598052740 - <_> - - <_> - - - - <_> - 4 7 9 3 -1. - <_> - 4 8 9 1 3. - 0 - 0.0200609304010868 - -0.0703030899167061 - 0.1721252948045731 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - -6.1907349154353142e-003 - 0.2657611072063446 - -0.0604360885918140 - <_> - - <_> - - - - <_> - 0 7 1 2 -1. - <_> - 0 8 1 1 2. - 0 - -3.2592790666967630e-003 - -0.4408865869045258 - 0.0299361795186996 - <_> - - <_> - - - - <_> - 10 10 4 2 -1. - <_> - 11 10 2 2 2. - 0 - 6.9727632217109203e-003 - 0.0229022298008204 - -0.3056279122829437 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0312182195484638 - 0.1367868036031723 - -0.0864943265914917 - <_> - - <_> - - - - <_> - 8 1 2 8 -1. - <_> - 8 3 2 4 2. - 0 - -0.0212390292435884 - 0.0925004631280899 - -0.1443676054477692 - <_> - - <_> - - - - <_> - 7 6 4 3 -1. - <_> - 7 7 4 1 3. - 0 - -0.0112035702914000 - 0.1707620024681091 - -0.0702753216028214 - <_> - - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 10 5 2 3 3. - 0 - -0.0258593093603849 - 0.1418247967958450 - -0.0330011397600174 - <_> - - <_> - - - - <_> - 0 6 1 2 -1. - <_> - 0 7 1 1 2. - 0 - 1.2670049909502268e-004 - -0.1300669014453888 - 0.0923628434538841 - <_> - - <_> - - - - <_> - 14 6 4 2 -1. - <_> - 15 7 2 2 2. - 1 - 4.3577109463512897e-003 - -0.0358654595911503 - 0.0444562286138535 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.2767834961414337 - 0.1298899948596954 - -0.0901319086551666 - <_> - - <_> - - - - <_> - 10 10 4 2 -1. - <_> - 11 10 2 2 2. - 0 - -0.0253986492753029 - -0.8255242109298706 - 3.6853079218417406e-003 - <_> - - <_> - - - - <_> - 4 10 4 2 -1. - <_> - 5 10 2 2 2. - 0 - -0.0123520400375128 - -0.5634952783584595 - 0.0188088994473219 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 8.2362545654177666e-003 - 7.0837750099599361e-003 - -0.5506197214126587 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 1.1910520261153579e-003 - -0.0749291330575943 - 0.1604215949773789 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 1.3469549594447017e-004 - -0.0513388700783253 - 0.0538881197571754 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -1.7835580511018634e-003 - 0.2161719948053360 - -0.0530820712447166 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 2 1 2. - 1 - 0.0236619804054499 - 5.9997271746397018e-003 - -0.6888967752456665 - <_> - - <_> - - - - <_> - 8 2 8 1 -1. - <_> - 8 2 4 1 2. - 1 - -0.0991822928190231 - 0.3414858877658844 - -0.0335216782987118 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 10 2. - 0 - 0.1666304022073746 - -0.0820632502436638 - 0.1550506949424744 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 8 1 2 2. - 1 - -3.2383298967033625e-003 - 0.0949897691607475 - -0.1371320039033890 - <_> - - <_> - - - - <_> - 8 10 3 1 -1. - <_> - 9 10 1 1 3. - 0 - -4.0861237794160843e-003 - -0.2961224913597107 - 0.0148761896416545 - <_> - - <_> - - - - <_> - 7 10 3 1 -1. - <_> - 8 10 1 1 3. - 0 - -7.7778939157724380e-004 - 0.1517342031002045 - -0.0785195380449295 - <_> - - <_> - - - - <_> - 17 2 1 3 -1. - <_> - 17 3 1 1 3. - 0 - 7.2721489705145359e-003 - 0.0242718104273081 - -0.4986915886402130 - <_> - - <_> - - - - <_> - 0 2 1 3 -1. - <_> - 0 3 1 1 3. - 0 - -1.1204819747945294e-004 - 0.1062247976660729 - -0.1097714006900787 - <_> - - <_> - - - - <_> - 6 0 10 2 -1. - <_> - 6 0 5 2 2. - 0 - -0.0907989591360092 - -0.2769601047039032 - 0.0168835297226906 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 8 0 5 2 2. - 0 - 0.0170638300478458 - -0.0946752578020096 - 0.1504784971475601 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - 0.4220880866050720 - 0.0224983394145966 - -0.4699710905551910 - <_> - - <_> - - - - <_> - 4 6 6 4 -1. - <_> - 6 6 2 4 3. - 0 - 0.0823230370879173 - -0.0245812702924013 - 0.4494928121566773 - <_> - - <_> - - - - <_> - 11 11 2 1 -1. - <_> - 11 11 1 1 2. - 0 - -1.3997350470162928e-004 - 0.1096709966659546 - -0.1020278036594391 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 8 11 8 1 2. - 0 - 0.0544916912913322 - 0.0271866992115974 - -0.3552537858486176 - <_> - - <_> - - - - <_> - 14 0 3 8 -1. - <_> - 15 0 1 8 3. - 0 - 8.6169438436627388e-003 - -0.0233892109245062 - 0.0846412628889084 - <_> - - <_> - - - - <_> - 0 0 8 1 -1. - <_> - 2 0 4 1 2. - 0 - -0.0263720192015171 - -0.4804699122905731 - 0.0202242694795132 - <_> - - <_> - - - - <_> - 14 0 3 8 -1. - <_> - 15 0 1 8 3. - 0 - -2.0510379690676928e-003 - 0.0640581995248795 - -0.0531572513282299 - <_> - - <_> - - - - <_> - 1 0 3 8 -1. - <_> - 2 0 1 8 3. - 0 - -2.8355750255286694e-003 - 0.1057931035757065 - -0.1018309965729713 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 16 7 1 3 2. - 1 - -3.5882219672203064e-003 - 0.0415502190589905 - -0.0885380730032921 - -1.5601739883422852 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 5 0 6 2 2. - 1 - -0.0295858997851610 - 0.2368033975362778 - -0.4284169077873230 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 14 0 2 2 2. - 0 - 4.3837837874889374e-003 - -0.1096661016345024 - 0.2141799926757813 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -3.3207288943231106e-003 - 0.2049497961997986 - -0.3599955141544342 - <_> - - <_> - - - - <_> - 9 4 2 6 -1. - <_> - 9 4 2 3 2. - 1 - -0.1306236982345581 - 0.1959908008575440 - -0.0554960817098618 - <_> - - <_> - - - - <_> - 4 3 10 4 -1. - <_> - 4 4 10 2 2. - 0 - -0.0400747098028660 - 0.3506031930446625 - -0.1451456993818283 - <_> - - <_> - - - - <_> - 2 10 16 1 -1. - <_> - 6 10 8 1 2. - 0 - -9.1901496052742004e-003 - 0.1958469003438950 - -0.1830701977014542 - <_> - - <_> - - - - <_> - 3 9 12 2 -1. - <_> - 9 9 6 2 2. - 0 - 0.0313908383250237 - -0.1253876984119415 - 0.3584018051624298 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - -0.0281545296311378 - 0.2404550015926361 - -0.1066574975848198 - <_> - - <_> - - - - <_> - 4 7 4 1 -1. - <_> - 4 7 2 1 2. - 1 - -3.1386429909616709e-003 - 0.1087210997939110 - -0.2864834070205689 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 4 1 4 3. - 1 - 0.0374451503157616 - -0.0192611292004585 - 0.2921327054500580 - <_> - - <_> - - - - <_> - 8 3 4 3 -1. - <_> - 7 4 4 1 3. - 1 - -0.0237269308418036 - 0.2107300013303757 - -0.1566237956285477 - <_> - - <_> - - - - <_> - 16 3 2 1 -1. - <_> - 16 3 1 1 2. - 0 - -1.2667299597524107e-004 - 0.0657644718885422 - -0.0882668867707253 - <_> - - <_> - - - - <_> - 0 3 2 1 -1. - <_> - 1 3 1 1 2. - 0 - -1.1386990081518888e-004 - 0.1257196068763733 - -0.2538045048713684 - <_> - - <_> - - - - <_> - 13 0 4 4 -1. - <_> - 14 0 2 4 2. - 0 - 0.0174100603908300 - 0.0215547606348991 - -0.3788085877895355 - <_> - - <_> - - - - <_> - 1 0 4 4 -1. - <_> - 2 0 2 4 2. - 0 - -0.0204246696084738 - -0.6272798776626587 - 0.0445664301514626 - <_> - - <_> - - - - <_> - 7 2 5 3 -1. - <_> - 7 3 5 1 3. - 0 - -0.0195224899798632 - 0.3057304024696350 - -0.0741596966981888 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 3 5 12 2 3. - 0 - -0.1489385068416596 - 0.2161584049463272 - -0.1347829997539520 - <_> - - <_> - - - - <_> - 13 1 4 1 -1. - <_> - 14 2 2 1 2. - 1 - -0.0187267791479826 - -0.4210177958011627 - 0.0184232201427221 - <_> - - <_> - - - - <_> - 5 1 1 4 -1. - <_> - 4 2 1 2 2. - 1 - 0.0110003799200058 - 0.0486276708543301 - -0.4883274137973785 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - 1.8614949658513069e-003 - 0.0541867800056934 - -0.4012809991836548 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - -9.9544697150122374e-005 - 0.1597914993762970 - -0.1536813974380493 - <_> - - <_> - - - - <_> - 10 3 4 4 -1. - <_> - 11 4 2 4 2. - 1 - -0.0457186289131641 - 0.1908975988626480 - -0.0679941996932030 - <_> - - <_> - - - - <_> - 5 4 8 2 -1. - <_> - 5 5 8 1 2. - 0 - 0.0194216798990965 - -0.0712067112326622 - 0.3188664913177490 - <_> - - <_> - - - - <_> - 12 10 1 2 -1. - <_> - 12 11 1 1 2. - 0 - 1.3375740672927350e-004 - -0.1960963010787964 - 0.0983939990401268 - <_> - - <_> - - - - <_> - 0 0 12 4 -1. - <_> - 0 0 6 2 2. - <_> - 6 2 6 2 2. - 0 - 0.0562716685235500 - -0.0701819136738777 - 0.2917883992195129 - <_> - - <_> - - - - <_> - 5 1 12 2 -1. - <_> - 11 1 6 1 2. - <_> - 5 2 6 1 2. - 0 - -9.5227472484111786e-003 - 0.1254553049802780 - -0.0567288510501385 - <_> - - <_> - - - - <_> - 2 1 12 2 -1. - <_> - 2 1 6 1 2. - <_> - 8 2 6 1 2. - 0 - -8.3248773589730263e-003 - 0.2177367061376572 - -0.0905109718441963 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 9 0 2 4 2. - 0 - -0.0138616999611259 - -0.5075417160987854 - 0.0342014096677303 - <_> - - <_> - - - - <_> - 6 0 4 4 -1. - <_> - 7 0 2 4 2. - 0 - -0.0170329492539167 - -0.6041864156723023 - 0.0292360708117485 - <_> - - <_> - - - - <_> - 16 4 2 2 -1. - <_> - 17 4 1 1 2. - <_> - 16 5 1 1 2. - 0 - 1.8115249695256352e-003 - 0.0535990297794342 - -0.3850235044956207 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 0 4 1 1 2. - <_> - 1 5 1 1 2. - 0 - -1.0465639934409410e-004 - 0.1482961028814316 - -0.1314526051282883 - <_> - - <_> - - - - <_> - 11 6 4 3 -1. - <_> - 12 6 2 3 2. - 0 - -4.5165838673710823e-003 - 0.1651957035064697 - -0.0822698324918747 - <_> - - <_> - - - - <_> - 3 6 4 3 -1. - <_> - 4 6 2 3 2. - 0 - -5.8911121450364590e-003 - 0.2383646965026856 - -0.0960646271705627 - <_> - - <_> - - - - <_> - 14 7 2 3 -1. - <_> - 13 8 2 1 3. - 1 - 1.0750669753178954e-004 - -0.1088969036936760 - 0.0837295129895210 - <_> - - <_> - - - - <_> - 4 7 3 2 -1. - <_> - 5 8 1 2 3. - 1 - -0.0214066598564386 - -0.5740059018135071 - 0.0344026908278465 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - -3.3456799574196339e-003 - 0.1794597059488297 - -0.0829986184835434 - <_> - - <_> - - - - <_> - 0 8 5 4 -1. - <_> - 0 9 5 2 2. - 0 - 0.0274894293397665 - 0.0308244396001101 - -0.5802283287048340 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - 2.1110640373080969e-003 - -0.0666235610842705 - 0.1123189032077789 - <_> - - <_> - - - - <_> - 0 1 2 1 -1. - <_> - 1 1 1 1 2. - 0 - -1.0807989747263491e-004 - 0.0897969231009483 - -0.1795606017112732 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - -0.0114361103624105 - -0.2884098887443543 - 0.0148200402036309 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -0.0119476895779371 - -0.6132228970527649 - 0.0303100403398275 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - -1.1076559894718230e-004 - 0.0622568093240261 - -0.0665758922696114 - <_> - - <_> - - - - <_> - 5 6 3 2 -1. - <_> - 6 6 1 2 3. - 0 - -3.4022140316665173e-003 - 0.2061467021703720 - -0.0824373364448547 - <_> - - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 11 0 2 5 2. - 0 - -0.0218145493417978 - -0.5282177925109863 - 0.0191657505929470 - <_> - - <_> - - - - <_> - 2 5 4 4 -1. - <_> - 3 5 2 4 2. - 0 - -5.7069370523095131e-003 - 0.1602185964584351 - -0.1021412983536720 - <_> - - <_> - - - - <_> - 12 0 3 10 -1. - <_> - 13 0 1 10 3. - 0 - -0.0457574091851711 - -0.5925638079643250 - 0.0156816802918911 - <_> - - <_> - - - - <_> - 3 0 6 5 -1. - <_> - 5 0 2 5 3. - 0 - -0.0612924098968506 - -0.6024196147918701 - 0.0236716698855162 - <_> - - <_> - - - - <_> - 6 2 6 1 -1. - <_> - 6 2 3 1 2. - 0 - -3.3792359754443169e-003 - 0.1354988068342209 - -0.1118332967162132 - <_> - - <_> - - - - <_> - 1 0 12 2 -1. - <_> - 1 0 6 1 2. - <_> - 7 1 6 1 2. - 0 - -0.0131389498710632 - 0.2546099126338959 - -0.0600356310606003 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 6 1 6 1 2. - 0 - 0.0136036500334740 - -0.0669290572404861 - 0.2539474964141846 - <_> - - <_> - - - - <_> - 0 3 1 4 -1. - <_> - 0 4 1 2 2. - 0 - 3.9979619905352592e-003 - 0.0455100610852242 - -0.3456248939037323 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 7.2696888819336891e-003 - 0.0146756302565336 - -0.4906772077083588 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.9900960614904761e-004 - 0.0953011512756348 - -0.1655271053314209 - <_> - - <_> - - - - <_> - 14 4 2 6 -1. - <_> - 14 4 2 3 2. - 1 - -0.1152622997760773 - -0.1929956972599030 - 0.0265051908791065 - <_> - - <_> - - - - <_> - 3 6 8 4 -1. - <_> - 3 6 4 2 2. - <_> - 7 8 4 2 2. - 0 - 0.0151087399572134 - -0.1241521984338760 - 0.1312544047832489 - <_> - - <_> - - - - <_> - 11 4 3 4 -1. - <_> - 12 5 1 4 3. - 1 - -0.0370756909251213 - 0.2368742972612381 - -0.0402807407081127 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 6 5 4 1 3. - 1 - -0.0269807707518339 - 0.2897762954235077 - -0.0562714003026485 - <_> - - <_> - - - - <_> - 7 8 6 3 -1. - <_> - 9 8 2 3 3. - 0 - 0.0277619995176792 - 0.0212433803826571 - -0.3172019124031067 - <_> - - <_> - - - - <_> - 1 1 16 1 -1. - <_> - 5 1 8 1 2. - 0 - -0.0230276994407177 - 0.1769967973232269 - -0.0870423093438149 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 6 0 6 2 3. - 0 - 0.0540885701775551 - -0.0618086308240891 - 0.2930361926555634 - <_> - - <_> - - - - <_> - 7 9 2 1 -1. - <_> - 7 9 1 1 2. - 1 - -5.8628612896427512e-004 - 0.0858488529920578 - -0.1695760041475296 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - -0.0152233699336648 - -0.3714756965637207 - 0.0118030896410346 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - -0.0114889396354556 - -0.4509704113006592 - 0.0316148512065411 - <_> - - <_> - - - - <_> - 14 7 4 3 -1. - <_> - 15 7 2 3 2. - 0 - 2.0920310635119677e-003 - -0.0616594292223454 - 0.0885069966316223 - <_> - - <_> - - - - <_> - 0 7 4 3 -1. - <_> - 1 7 2 3 2. - 0 - -4.0617170743644238e-003 - 0.1551833003759384 - -0.0919912979006767 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - 1.1135039676446468e-004 - -0.0878409892320633 - 0.1013308987021446 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 10 1 1 2. - <_> - 3 11 1 1 2. - 0 - 1.1977129906881601e-004 - -0.1171346977353096 - 0.1250396966934204 - <_> - - <_> - - - - <_> - 12 2 2 7 -1. - <_> - 12 2 1 7 2. - 1 - -0.0329018495976925 - 0.0930084884166718 - -0.0265259593725204 - <_> - - <_> - - - - <_> - 6 2 7 2 -1. - <_> - 6 2 7 1 2. - 1 - -0.0482922606170177 - 0.2587944865226746 - -0.0593694187700748 - <_> - - <_> - - - - <_> - 13 2 3 9 -1. - <_> - 14 5 1 3 9. - 0 - -0.0540560893714428 - 0.1013524010777473 - -0.1045273020863533 - <_> - - <_> - - - - <_> - 0 4 3 4 -1. - <_> - 0 5 3 2 2. - 0 - 9.4745680689811707e-003 - 0.0349197797477245 - -0.3624351918697357 - <_> - - <_> - - - - <_> - 4 11 14 1 -1. - <_> - 4 11 7 1 2. - 0 - 0.0128386402502656 - -0.0332473814487457 - 0.0816350281238556 - <_> - - <_> - - - - <_> - 0 11 14 1 -1. - <_> - 7 11 7 1 2. - 0 - 0.0585130900144577 - 0.0221725497394800 - -0.6318789720535278 - <_> - - <_> - - - - <_> - 14 10 2 2 -1. - <_> - 15 10 1 1 2. - <_> - 14 11 1 1 2. - 0 - 3.1740390695631504e-003 - 0.0218435004353523 - -0.4179362058639526 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 10 1 1 2. - <_> - 3 11 1 1 2. - 0 - -8.3488157542888075e-005 - 0.1398368030786514 - -0.0947381034493446 - <_> - - <_> - - - - <_> - 6 3 12 9 -1. - <_> - 9 3 6 9 2. - 0 - -0.2414795011281967 - -0.2980383038520813 - 0.0107155097648501 - <_> - - <_> - - - - <_> - 0 3 12 9 -1. - <_> - 3 3 6 9 2. - 0 - -0.1526979953050613 - 0.2102728039026260 - -0.0627913326025009 - <_> - - <_> - - - - <_> - 15 11 2 1 -1. - <_> - 15 11 1 1 2. - 0 - 8.1526712165214121e-005 - -0.1268849968910217 - 0.1406469941139221 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 9 1 1 2. - 1 - 2.8918751049786806e-003 - -0.0537874512374401 - 0.2572360038757324 - <_> - - <_> - - - - <_> - 6 1 6 6 -1. - <_> - 6 3 6 2 3. - 0 - 0.1033475026488304 - -0.0453108586370945 - 0.2924998104572296 - <_> - - <_> - - - - <_> - 3 2 12 4 -1. - <_> - 3 3 12 2 2. - 0 - -0.0443160496652126 - 0.2268631011247635 - -0.0732592865824699 - <_> - - <_> - - - - <_> - 17 8 1 2 -1. - <_> - 17 9 1 1 2. - 0 - 1.0020990157499909e-004 - -0.1954070031642914 - 0.0969341918826103 - <_> - - <_> - - - - <_> - 2 0 6 5 -1. - <_> - 4 0 2 5 3. - 0 - -0.0545740984380245 - -0.4813745915889740 - 0.0249858107417822 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 7.3195910081267357e-003 - 0.0310021396726370 - -0.2797059118747711 - <_> - - <_> - - - - <_> - 3 1 4 4 -1. - <_> - 4 1 2 4 2. - 0 - 0.0101351998746395 - 0.0438175089657307 - -0.2937490046024323 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - 1.0032069985754788e-004 - -0.0718891695141792 - 0.0552317388355732 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - -0.0106699801981449 - -0.5418168902397156 - 0.0227454993873835 - <_> - - <_> - - - - <_> - 12 10 6 2 -1. - <_> - 12 11 6 1 2. - 0 - 1.3994649634696543e-004 - -0.1790038943290710 - 0.0555826388299465 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 6 1 1 3 3. - 1 - -0.0191009808331728 - 0.2132578939199448 - -0.0555730909109116 - <_> - - <_> - - - - <_> - 0 5 18 1 -1. - <_> - 6 5 6 1 3. - 0 - -0.0371388792991638 - 0.1022277027368546 - -0.1321451961994171 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 5 0 6 2 2. - 1 - -0.0300815608352423 - -0.0922112017869949 - 0.1368260979652405 - <_> - - <_> - - - - <_> - 12 4 3 5 -1. - <_> - 13 5 1 5 3. - 1 - 0.0842056870460510 - -8.9014582335948944e-003 - 0.4981901943683624 - <_> - - <_> - - - - <_> - 6 4 5 3 -1. - <_> - 5 5 5 1 3. - 1 - 0.0541966818273067 - -0.0368971601128578 - 0.3046922981739044 - <_> - - <_> - - - - <_> - 14 10 4 2 -1. - <_> - 14 11 4 1 2. - 0 - -3.0808220617473125e-003 - -0.2180203944444656 - 0.0258681401610374 - <_> - - <_> - - - - <_> - 3 1 3 9 -1. - <_> - 4 1 1 9 3. - 0 - -0.0389522090554237 - -0.5694518089294434 - 0.0183076094835997 - <_> - - <_> - - - - <_> - 11 7 2 1 -1. - <_> - 11 7 1 1 2. - 0 - -2.0182169973850250e-003 - 0.0904084295034409 - -0.0395149216055870 - <_> - - <_> - - - - <_> - 5 7 2 1 -1. - <_> - 6 7 1 1 2. - 0 - 1.2030619836878031e-004 - -0.0886533409357071 - 0.1296637952327728 - <_> - - <_> - - - - <_> - 16 4 2 2 -1. - <_> - 17 4 1 1 2. - <_> - 16 5 1 1 2. - 0 - -3.4868849907070398e-003 - -0.4617758989334106 - 0.0327817313373089 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 1.9827641081064939e-003 - -0.0572574399411678 - 0.2026420980691910 - <_> - - <_> - - - - <_> - 8 0 3 12 -1. - <_> - 9 0 1 12 3. - 0 - -0.0656558573246002 - -0.6054087281227112 - 9.3178926035761833e-003 - <_> - - <_> - - - - <_> - 7 0 3 12 -1. - <_> - 8 0 1 12 3. - 0 - -0.0671804770827293 - -0.7710319757461548 - 0.0142328096553683 - <_> - - <_> - - - - <_> - 16 4 2 2 -1. - <_> - 17 4 1 1 2. - <_> - 16 5 1 1 2. - 0 - -1.0016120359068736e-004 - 0.0771050527691841 - -0.0757509991526604 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 0 4 1 1 2. - <_> - 1 5 1 1 2. - 0 - 1.0698969708755612e-004 - -0.0954898223280907 - 0.1198818981647492 - <_> - - <_> - - - - <_> - 14 2 4 6 -1. - <_> - 14 4 4 2 3. - 0 - -0.0799307227134705 - -0.1638025939464569 - 0.0134236998856068 - <_> - - <_> - - - - <_> - 0 2 4 6 -1. - <_> - 0 4 4 2 3. - 0 - -0.0844736695289612 - -0.4843102991580963 - 0.0226374305784702 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - -1.2981670442968607e-004 - 0.0869597271084785 - -0.0794283226132393 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 1.0976740159094334e-003 - -0.0712043717503548 - 0.1708732992410660 - <_> - - <_> - - - - <_> - 13 9 4 3 -1. - <_> - 13 10 4 1 3. - 0 - 1.6371599631384015e-003 - -0.0552093610167503 - 0.0608719997107983 - <_> - - <_> - - - - <_> - 1 9 4 3 -1. - <_> - 1 10 4 1 3. - 0 - 0.0166199207305908 - 0.0241604093462229 - -0.4580740034580231 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - -0.4850777089595795 - -0.6808027029037476 - 0.0140135502442718 - <_> - - <_> - - - - <_> - 0 3 7 2 -1. - <_> - 0 4 7 1 2. - 0 - -2.2336160764098167e-003 - 0.0917611792683601 - -0.1299124956130981 - <_> - - <_> - - - - <_> - 4 1 10 4 -1. - <_> - 4 2 10 2 2. - 0 - -0.0400873012840748 - 0.2566314041614533 - -0.0528745092451572 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0204793103039265 - 0.1325452029705048 - -0.1141510978341103 - -1.5219190120697021 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 8 3 3 2 2. - 1 - -0.0302798692137003 - 0.2607480883598328 - -0.2991187870502472 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 9 0 6 3 2. - 0 - 0.0255449693650007 - -0.0761685371398926 - 0.1498177051544190 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 3 0 3 5 2. - 0 - -0.0302330907434225 - 0.1964890956878662 - -0.2840611040592194 - <_> - - <_> - - - - <_> - 9 3 2 4 -1. - <_> - 8 4 2 2 2. - 1 - -0.0313644297420979 - 0.1331268996000290 - -0.0680499672889709 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 9 3 4 1 2. - 1 - -0.0665302574634552 - 0.2301152944564819 - -0.1532402932643890 - <_> - - <_> - - - - <_> - 13 6 3 3 -1. - <_> - 14 7 1 3 3. - 1 - -0.0168423801660538 - 0.3306404054164887 - -0.1067927032709122 - <_> - - <_> - - - - <_> - 0 0 4 12 -1. - <_> - 0 0 2 6 2. - <_> - 2 6 2 6 2. - 0 - 0.3063302040100098 - -5.1862299442291260e-003 - -1.7709560546875000e+003 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 16 1 1 1 2. - 1 - 8.6503643542528152e-003 - 0.0416002497076988 - -0.3957656025886536 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 0 8 2 2. - 1 - 0.1116157025098801 - 0.0679274871945381 - -0.4827916026115418 - <_> - - <_> - - - - <_> - 3 1 12 4 -1. - <_> - 3 2 12 2 2. - 0 - 0.0183748491108418 - -0.1492644995450974 - 0.1623656004667282 - <_> - - <_> - - - - <_> - 5 10 1 2 -1. - <_> - 5 11 1 1 2. - 0 - 1.1767529940698296e-004 - -0.2573150098323822 - 0.0885581970214844 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 0 - 4.1459160856902599e-003 - -0.0126878004521132 - 0.0773667767643929 - <_> - - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 1 0 2 6 2. - 0 - 0.0193850304931402 - 0.0386606492102146 - -0.5652210116386414 - <_> - - <_> - - - - <_> - 12 6 4 2 -1. - <_> - 13 6 2 2 2. - 0 - -4.7151502221822739e-003 - 0.1793348044157028 - -0.1019069999456406 - <_> - - <_> - - - - <_> - 6 3 6 5 -1. - <_> - 9 3 3 5 2. - 0 - -0.0635654777288437 - 0.3796977102756500 - -0.0612664781510830 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 12 5 1 3 3. - 1 - -0.0212643295526505 - 0.1749497950077057 - -0.0613238103687763 - <_> - - <_> - - - - <_> - 5 1 8 6 -1. - <_> - 5 3 8 2 3. - 0 - -0.1554197072982788 - 0.3742021024227142 - -0.0596259310841560 - <_> - - <_> - - - - <_> - 6 6 9 6 -1. - <_> - 9 6 3 6 3. - 0 - -0.1592870950698853 - -0.2091342955827713 - 9.9482368677854538e-003 - <_> - - <_> - - - - <_> - 3 6 9 6 -1. - <_> - 6 6 3 6 3. - 0 - -0.0485001504421234 - 0.2010118961334229 - -0.1165876984596252 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 14 1 1 2 2. - 1 - 0.0273657608777285 - 0.0179616604000330 - -0.5052819848060608 - <_> - - <_> - - - - <_> - 4 1 2 2 -1. - <_> - 4 1 2 1 2. - 1 - 0.0138428201898932 - 0.0452274382114410 - -0.4157164096832275 - <_> - - <_> - - - - <_> - 15 5 1 6 -1. - <_> - 15 5 1 3 2. - 1 - -0.0730725526809692 - -0.2477712035179138 - 0.0110630299896002 - <_> - - <_> - - - - <_> - 3 5 6 1 -1. - <_> - 3 5 3 1 2. - 1 - -3.2598939724266529e-003 - 0.0802513435482979 - -0.2958165109157562 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 1 1 3 3. - 1 - 0.0250176899135113 - 0.0193660706281662 - -0.3585720062255859 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 2 1 3 1 3. - 1 - 0.0166778303682804 - 0.0415645688772202 - -0.4355818927288055 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 12 5 1 3 3. - 0 - -4.7600651159882545e-003 - 0.2571597993373871 - -0.1032269001007080 - <_> - - <_> - - - - <_> - 3 6 4 2 -1. - <_> - 4 6 2 2 2. - 0 - -5.4333410225808620e-003 - 0.2318900972604752 - -0.0818010121583939 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -3.3548839855939150e-003 - 0.1978082954883575 - -0.0302414596080780 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - 0.0116230798885226 - 0.0346168503165245 - -0.4649324119091034 - <_> - - <_> - - - - <_> - 12 5 2 3 -1. - <_> - 12 5 1 3 2. - 1 - -0.0323938988149166 - 0.1131320968270302 - -0.0351406894624233 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 6 5 3 1 2. - 1 - -0.0489137098193169 - 0.4890474975109100 - -0.0341222882270813 - <_> - - <_> - - - - <_> - 6 1 7 3 -1. - <_> - 6 2 7 1 3. - 0 - -0.0184744298458099 - 0.2658073008060455 - -0.0581631995737553 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0543839782476425 - -0.0665107220411301 - 0.2559019923210144 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 8 1 4 1 3. - 0 - -9.6155777573585510e-003 - 0.2105295956134796 - -0.0728513374924660 - <_> - - <_> - - - - <_> - 5 2 4 2 -1. - <_> - 6 2 2 2 2. - 0 - -0.0106889102607965 - -0.5145711898803711 - 0.0377274490892887 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - -9.2319631949067116e-003 - -0.3874436020851135 - 0.0310801900923252 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - -0.0142035195603967 - -0.5272583961486816 - 0.0287526194006205 - <_> - - <_> - - - - <_> - 12 6 6 2 -1. - <_> - 14 6 2 2 3. - 0 - -0.0110132899135351 - 0.1865382045507431 - -0.1161068975925446 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - -8.6668403819203377e-003 - -0.3877575099468231 - 0.0387702584266663 - <_> - - <_> - - - - <_> - 13 6 5 6 -1. - <_> - 13 8 5 2 3. - 0 - 0.0626988932490349 - 0.0309834405779839 - -0.3326539099216461 - <_> - - <_> - - - - <_> - 6 10 4 2 -1. - <_> - 7 10 2 2 2. - 0 - -8.5753016173839569e-003 - -0.5714030265808106 - 0.0258798897266388 - <_> - - <_> - - - - <_> - 13 5 4 3 -1. - <_> - 14 5 2 3 2. - 0 - -0.0472016409039497 - -0.6905822753906250 - 2.5752310175448656e-003 - <_> - - <_> - - - - <_> - 1 5 4 3 -1. - <_> - 2 5 2 3 2. - 0 - -4.5456448569893837e-003 - 0.1420798003673554 - -0.1076816022396088 - <_> - - <_> - - - - <_> - 13 6 5 6 -1. - <_> - 13 8 5 2 3. - 0 - 6.5161921083927155e-003 - -0.0647447407245636 - 0.0687564089894295 - <_> - - <_> - - - - <_> - 0 6 5 6 -1. - <_> - 0 8 5 2 3. - 0 - 0.0592589601874352 - 0.0356106907129288 - -0.4234701097011566 - <_> - - <_> - - - - <_> - 13 4 1 2 -1. - <_> - 13 5 1 1 2. - 0 - -1.0237420065095648e-004 - 0.0896984264254570 - -0.1164036020636559 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -1.3284040323924273e-004 - 0.0818888396024704 - -0.1685649007558823 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 1.1395310139050707e-004 - -0.0665313079953194 - 0.0629500299692154 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -7.9775685444474220e-003 - -0.3696162998676300 - 0.0396222993731499 - <_> - - <_> - - - - <_> - 15 6 3 2 -1. - <_> - 16 6 1 2 3. - 0 - 0.0112805804237723 - 0.0205128900706768 - -0.3265044987201691 - <_> - - <_> - - - - <_> - 0 6 3 2 -1. - <_> - 1 6 1 2 3. - 0 - -2.8830489609390497e-003 - 0.1799075007438660 - -0.0898088067770004 - <_> - - <_> - - - - <_> - 13 4 1 2 -1. - <_> - 13 5 1 1 2. - 0 - 4.2662010528147221e-003 - -0.0416404716670513 - 0.3237116038799286 - <_> - - <_> - - - - <_> - 4 4 1 2 -1. - <_> - 4 5 1 1 2. - 0 - -1.3183150440454483e-004 - 0.1396773010492325 - -0.1172707974910736 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 9 10 2 2 3. - 0 - -0.0224761608988047 - -0.6284412741661072 - 0.0290740095078945 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 7 10 4 2 3. - 0 - -0.0143703902140260 - 0.1536899954080582 - -0.1052054017782211 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 1.1654799891402945e-004 - -0.0830586031079292 - 0.0929041430354118 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - 2.2677709348499775e-003 - -0.0724625363945961 - 0.2130980044603348 - <_> - - <_> - - - - <_> - 2 0 14 12 -1. - <_> - 2 0 7 12 2. - 0 - 0.2394694983959198 - -0.0594511888921261 - 0.2351520955562592 - <_> - - <_> - - - - <_> - 5 1 8 3 -1. - <_> - 9 1 4 3 2. - 0 - 0.0178772993385792 - -0.1102612987160683 - 0.1415838003158569 - <_> - - <_> - - - - <_> - 8 0 2 5 -1. - <_> - 8 0 1 5 2. - 0 - -0.0153610697016120 - -0.4989778101444244 - 0.0237610898911953 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 7 1 4 1 3. - 0 - 7.5403959490358829e-003 - -0.0819474980235100 - 0.1490086019039154 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - 8.1448331475257874e-003 - 0.0353420190513134 - -0.3709149956703186 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 1.3363580219447613e-003 - -0.0760951563715935 - 0.1621375977993012 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -1.2043320020893589e-004 - 0.0900542065501213 - -0.0551597215235233 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -1.2009990314254537e-004 - 0.1414579004049301 - -0.0948031172156334 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 1.0903520160354674e-004 - -0.1224201992154121 - 0.1174184009432793 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 9.7870870376937091e-005 - -0.1204390972852707 - 0.1150856018066406 - <_> - - <_> - - - - <_> - 0 1 18 1 -1. - <_> - 6 1 6 1 3. - 0 - -0.0230919197201729 - 0.1331007927656174 - -0.0997344627976418 - <_> - - <_> - - - - <_> - 5 0 2 1 -1. - <_> - 5 0 1 1 2. - 1 - -3.9068670012056828e-003 - 0.2405481934547424 - -0.0593380406498909 - <_> - - <_> - - - - <_> - 17 7 1 4 -1. - <_> - 17 9 1 2 2. - 0 - -5.9686671011149883e-003 - -0.4968338012695313 - 0.0298917908221483 - <_> - - <_> - - - - <_> - 3 0 4 5 -1. - <_> - 4 0 2 5 2. - 0 - -0.0159168094396591 - -0.3419587016105652 - 0.0313088409602642 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 5 4 8 1 2. - 0 - 0.0231041405349970 - -0.0363240204751492 - 0.3503256142139435 - <_> - - <_> - - - - <_> - 6 2 6 6 -1. - <_> - 8 4 2 2 9. - 0 - -0.1155956014990807 - 0.1462989002466202 - -0.0876143202185631 - <_> - - <_> - - - - <_> - 16 1 2 9 -1. - <_> - 16 4 2 3 3. - 0 - 0.0334504097700119 - 0.0248193908482790 - -0.2561104893684387 - <_> - - <_> - - - - <_> - 0 1 2 9 -1. - <_> - 0 4 2 3 3. - 0 - -7.0857969112694263e-003 - 0.0782061666250229 - -0.1548050045967102 - <_> - - <_> - - - - <_> - 0 5 18 4 -1. - <_> - 6 5 6 4 3. - 0 - -0.0668771266937256 - 0.0793947800993919 - -0.1614978015422821 - <_> - - <_> - - - - <_> - 0 9 16 3 -1. - <_> - 4 9 8 3 2. - 0 - 0.0388744398951530 - -0.0618554912507534 - 0.2067653983831406 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 1 1 1 3. - 1 - 0.0285445600748062 - 5.5605778470635414e-003 - -0.3890460133552551 - <_> - - <_> - - - - <_> - 2 6 4 2 -1. - <_> - 3 6 2 2 2. - 0 - -5.5549708195030689e-003 - 0.1629687994718552 - -0.0693661421537399 - <_> - - <_> - - - - <_> - 10 5 4 4 -1. - <_> - 11 5 2 4 2. - 0 - -8.0097168684005737e-003 - 0.1413090974092484 - -0.0476790405809879 - <_> - - <_> - - - - <_> - 4 6 3 2 -1. - <_> - 5 6 1 2 3. - 0 - -5.1694051362574100e-003 - 0.2164455950260162 - -0.0584318116307259 - <_> - - <_> - - - - <_> - 17 8 1 2 -1. - <_> - 17 9 1 1 2. - 0 - 5.8240639045834541e-003 - 0.0342782810330391 - -0.3147383034229279 - <_> - - <_> - - - - <_> - 0 8 1 2 -1. - <_> - 0 9 1 1 2. - 0 - 1.0263649892294779e-004 - -0.1552401930093765 - 0.0913992822170258 - <_> - - <_> - - - - <_> - 16 8 2 3 -1. - <_> - 16 9 2 1 3. - 0 - -0.0129859596490860 - -0.3654532134532929 - 0.0128205902874470 - <_> - - <_> - - - - <_> - 0 8 2 3 -1. - <_> - 0 9 2 1 3. - 0 - 8.9552644640207291e-003 - 0.0293969791382551 - -0.4428124129772186 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - 0.0188702307641506 - 0.0204879399389029 - -0.5307945013046265 - <_> - - <_> - - - - <_> - 4 4 4 2 -1. - <_> - 4 4 2 1 2. - <_> - 6 5 2 1 2. - 0 - -4.4253231026232243e-003 - 0.1609849035739899 - -0.0709628164768219 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - -8.5866253357380629e-005 - 0.0730708092451096 - -0.0717170536518097 - <_> - - <_> - - - - <_> - 7 0 1 3 -1. - <_> - 6 1 1 1 3. - 1 - 0.0101403202861547 - 0.0352483615279198 - -0.3271554112434387 - <_> - - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 3 2 12 4 2. - 0 - 0.2276325970888138 - -0.0269240606576204 - 0.4179322123527527 - <_> - - <_> - - - - <_> - 3 4 2 1 -1. - <_> - 4 4 1 1 2. - 0 - -8.8044107542373240e-005 - 0.0911437720060349 - -0.1231226995587349 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -0.0106452200561762 - -0.4365834891796112 - 0.0236242301762104 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 4.6525610378012061e-004 - -0.0798127576708794 - 0.1341284066438675 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -3.3041620627045631e-003 - -0.3825547993183136 - 0.0169969405978918 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -1.0777499846881256e-004 - 0.1675481945276260 - -0.1296115964651108 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 3.1904759816825390e-003 - 0.0175844598561525 - -0.3353562057018280 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 9.7345822723582387e-005 - -0.1232642009854317 - 0.1472721993923187 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 9.7421427199151367e-005 - -0.0609778389334679 - 0.0796235501766205 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -7.4847228825092316e-004 - 0.1023807004094124 - -0.1190652027726173 - <_> - - <_> - - - - <_> - 10 0 8 4 -1. - <_> - 14 0 4 2 2. - <_> - 10 2 4 2 2. - 0 - -0.0157044902443886 - 0.0934558287262917 - -0.0604689717292786 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -8.1626698374748230e-005 - 0.1133280023932457 - -0.0882229804992676 - <_> - - <_> - - - - <_> - 8 5 3 3 -1. - <_> - 9 5 1 3 3. - 0 - -6.9608110934495926e-003 - 0.1103900969028473 - -0.0406594499945641 - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 8 5 1 3 3. - 0 - -4.4434489682316780e-003 - 0.1283808946609497 - -0.0813618078827858 - <_> - - <_> - - - - <_> - 17 10 1 2 -1. - <_> - 17 11 1 1 2. - 0 - -1.6160740051418543e-003 - -0.3373889923095703 - 0.0351585112512112 - <_> - - <_> - - - - <_> - 0 10 1 2 -1. - <_> - 0 11 1 1 2. - 0 - 1.0108389687957242e-004 - -0.1252482980489731 - 0.0799361616373062 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 9.9391723051667213e-004 - -0.0844927281141281 - 0.1966180950403214 - <_> - - <_> - - - - <_> - 2 9 2 1 -1. - <_> - 2 9 1 1 2. - 1 - -8.4912832826375961e-003 - -0.2957800030708313 - 0.0427396111190319 - <_> - - <_> - - - - <_> - 15 11 2 1 -1. - <_> - 15 11 1 1 2. - 0 - 9.5672323368489742e-005 - -0.0646254122257233 - 0.0634407624602318 - <_> - - <_> - - - - <_> - 1 11 2 1 -1. - <_> - 2 11 1 1 2. - 0 - 1.1625020124483854e-004 - -0.0912744775414467 - 0.1193609982728958 - <_> - - <_> - - - - <_> - 14 9 4 2 -1. - <_> - 14 9 2 2 2. - 0 - -1.7826290568336844e-003 - 0.0957069471478462 - -0.0846342518925667 - <_> - - <_> - - - - <_> - 0 9 4 2 -1. - <_> - 2 9 2 2 2. - 0 - -6.2756668776273727e-003 - 0.1374486982822418 - -0.0911678224802017 - <_> - - <_> - - - - <_> - 15 7 2 3 -1. - <_> - 14 8 2 1 3. - 1 - -8.2775605842471123e-003 - -0.1392340064048767 - 0.0364407896995544 - <_> - - <_> - - - - <_> - 3 9 1 2 -1. - <_> - 3 9 1 1 2. - 1 - 3.0183959752321243e-003 - -0.0461803190410137 - 0.2205502986907959 - <_> - - <_> - - - - <_> - 14 8 2 2 -1. - <_> - 14 8 2 1 2. - 1 - 0.0174056906253099 - 8.9857252314686775e-003 - -0.4943833947181702 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 2 2. - 1 - -1.2369710020720959e-004 - 0.0622675903141499 - -0.1596798002719879 - <_> - - <_> - - - - <_> - 14 8 2 2 -1. - <_> - 14 8 2 1 2. - 1 - -5.8059301227331161e-003 - 0.0494428016245365 - -0.0465396009385586 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 2 2. - 1 - -0.0105302399024367 - -0.1974261999130249 - 0.0691461414098740 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - -0.0293374396860600 - -0.6431521773338318 - 4.9710599705576897e-003 - <_> - - <_> - - - - <_> - 2 0 3 9 -1. - <_> - 3 0 1 9 3. - 0 - -0.0566655881702900 - -0.7838971018791199 - 0.0107647497206926 - <_> - - <_> - - - - <_> - 10 4 3 5 -1. - <_> - 11 4 1 5 3. - 0 - -0.0583645217120647 - -0.7541475296020508 - 2.7036149986088276e-003 - <_> - - <_> - - - - <_> - 5 4 3 5 -1. - <_> - 6 4 1 5 3. - 0 - -6.0695819556713104e-003 - 0.1555521041154862 - -0.0635142400860786 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - -4.9055949784815311e-003 - 0.1541114002466202 - -0.0600240901112556 - <_> - - <_> - - - - <_> - 0 3 6 8 -1. - <_> - 2 3 2 8 3. - 0 - -0.0243495907634497 - 0.1106669977307320 - -0.0893546566367149 - <_> - - <_> - - - - <_> - 14 0 3 8 -1. - <_> - 15 0 1 8 3. - 0 - -0.0205104593187571 - -0.1706621944904327 - 0.0188752599060535 - <_> - - <_> - - - - <_> - 1 0 3 8 -1. - <_> - 2 0 1 8 3. - 0 - -0.0404061600565910 - -0.5120133757591248 - 0.0182661600410938 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 5 1 3 3. - 0 - 0.0116391396149993 - -0.0266639906913042 - 0.1538694947957993 - <_> - - <_> - - - - <_> - 6 0 4 2 -1. - <_> - 7 0 2 2 2. - 0 - 8.9536290615797043e-003 - 0.0229302104562521 - -0.4016638994216919 - <_> - - <_> - - - - <_> - 10 0 8 4 -1. - <_> - 14 0 4 2 2. - <_> - 10 2 4 2 2. - 0 - 0.0222562793642282 - -0.0491682402789593 - 0.1887927949428558 - <_> - - <_> - - - - <_> - 0 0 8 4 -1. - <_> - 0 0 4 2 2. - <_> - 4 2 4 2 2. - 0 - -0.0230097491294146 - 0.1875075995922089 - -0.0621726289391518 - <_> - - <_> - - - - <_> - 9 2 1 8 -1. - <_> - 9 2 1 4 2. - 1 - -0.1106169000267983 - -0.2101010978221893 - 7.2418609634041786e-003 - <_> - - <_> - - - - <_> - 9 2 8 1 -1. - <_> - 9 2 4 1 2. - 1 - -0.1064613014459610 - 0.3761788010597229 - -0.0249611008912325 - <_> - - <_> - - - - <_> - 11 0 1 2 -1. - <_> - 11 0 1 1 2. - 1 - -3.5521229729056358e-003 - 0.1120482981204987 - -0.0318953283131123 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - -4.2262352071702480e-003 - -0.3739255070686340 - 0.0241840407252312 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 6.2988628633320332e-003 - 8.1449449062347412e-003 - -0.1855967044830322 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - 2.7100159786641598e-003 - -0.0479965209960938 - 0.2312102019786835 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 10 2 2 2. - 0 - 3.3773749601095915e-003 - -0.0948456600308418 - 0.0506850294768810 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 7 5 1 2 3. - 0 - -2.8979899361729622e-003 - 0.1275189071893692 - -0.0750841796398163 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 15 8 2 1 3. - 1 - 2.3524831049144268e-003 - -0.0411028414964676 - 0.0595306493341923 - <_> - - <_> - - - - <_> - 2 7 3 2 -1. - <_> - 3 8 1 2 3. - 1 - 7.7729858458042145e-003 - 0.0454946309328079 - -0.2112002968788147 - <_> - - <_> - - - - <_> - 10 3 1 3 -1. - <_> - 10 4 1 1 3. - 0 - -3.6903400905430317e-003 - 0.1154965981841087 - -0.0491219200193882 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 10 2 2 2. - 0 - -9.3724876642227173e-003 - -0.3591741919517517 - 0.0262743607163429 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -1.7983719590120018e-004 - 0.0540649816393852 - -0.0513208284974098 - <_> - - <_> - - - - <_> - 6 4 6 2 -1. - <_> - 6 4 3 1 2. - <_> - 9 5 3 1 2. - 0 - -5.0172610208392143e-003 - 0.1341710984706879 - -0.0692522525787354 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 1.0011839913204312e-004 - -0.0490679889917374 - 0.0641175583004951 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 5 0 2 2 2. - 0 - 8.1611080095171928e-003 - 0.0246829092502594 - -0.3852142095565796 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -9.0656030806712806e-005 - 0.0988887026906013 - -0.0882333070039749 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 6 1 2 1 3. - 0 - -4.5008701272308826e-003 - 0.1580072045326233 - -0.0575342290103436 - <_> - - <_> - - - - <_> - 12 3 1 6 -1. - <_> - 12 5 1 2 3. - 0 - 0.0195870809257030 - -0.0179807692766190 - 0.2623027861118317 - <_> - - <_> - - - - <_> - 5 3 1 6 -1. - <_> - 5 5 1 2 3. - 0 - -2.9633310623466969e-003 - 0.0829950720071793 - -0.1223156973719597 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 0 1 2 3. - 0 - 0.0107432901859283 - 0.0124824196100235 - -0.3427470922470093 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 4 0 5 1 2. - <_> - 9 1 5 1 2. - 0 - -4.9855629913508892e-003 - 0.1381690949201584 - -0.0640109404921532 - <_> - - <_> - - - - <_> - 12 0 3 3 -1. - <_> - 13 1 1 3 3. - 1 - 0.1256643980741501 - -1.7671900568529963e-003 - 1.0003019571304321 - <_> - - <_> - - - - <_> - 6 0 3 3 -1. - <_> - 5 1 3 1 3. - 1 - 0.0237387400120497 - 0.0277555696666241 - -0.3600992858409882 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - -1.4753870200365782e-003 - 0.1572327017784119 - -0.0470801405608654 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - -1.2558279559016228e-004 - 0.1031595990061760 - -0.0847925171256065 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - 1.2353599595371634e-004 - -0.1026787981390953 - 0.1029829010367394 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - 1.0993010364472866e-003 - -0.0721449106931686 - 0.1614561975002289 - <_> - - <_> - - - - <_> - 0 0 18 9 -1. - <_> - 0 0 9 9 2. - 0 - -0.4335260093212128 - 0.2633365094661713 - -0.0371690094470978 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 2 2. - 0 - 5.0879339687526226e-003 - 0.0348459109663963 - -0.3075034916400909 - <_> - - <_> - - - - <_> - 6 6 12 6 -1. - <_> - 6 6 6 6 2. - 0 - -0.1396152973175049 - 0.1071010008454323 - -0.0468530394136906 - <_> - - <_> - - - - <_> - 0 5 14 7 -1. - <_> - 7 5 7 7 2. - 0 - 0.0968080908060074 - 0.0478955693542957 - -0.2078001052141190 - <_> - - <_> - - - - <_> - 13 0 5 3 -1. - <_> - 12 1 5 1 3. - 1 - -0.0382985584437847 - 0.3205702006816864 - -0.0431652106344700 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 9 0 2 1 2. - 0 - 0.0100372200831771 - 0.0301105193793774 - -0.3147934079170227 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 8 1 3 1 2. - 0 - 4.8312591388821602e-003 - -0.0576671697199345 - 0.1406105011701584 - <_> - - <_> - - - - <_> - 5 0 3 5 -1. - <_> - 6 1 1 5 3. - 1 - -0.0214726999402046 - 0.1523465067148209 - -0.0655626729130745 - -1.5396820306777954 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 1 6 9 -1. - <_> - 8 4 2 3 9. - 0 - -0.2224314063787460 - 0.2231249958276749 - -0.2639634907245636 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 9 0 6 4 2. - 0 - 0.0323768109083176 - -0.0519407503306866 - 0.1089413017034531 - <_> - - <_> - - - - <_> - 0 0 12 4 -1. - <_> - 3 0 6 4 2. - 0 - -0.0447171591222286 - 0.2062368988990784 - -0.2361153066158295 - <_> - - <_> - - - - <_> - 7 6 6 2 -1. - <_> - 9 6 2 2 3. - 0 - -0.0326235406100750 - 0.2723740935325623 - -0.0662741512060165 - <_> - - <_> - - - - <_> - 5 6 6 2 -1. - <_> - 7 6 2 2 3. - 0 - -0.0269252099096775 - 0.3126347064971924 - -0.1298332065343857 - <_> - - <_> - - - - <_> - 7 10 10 2 -1. - <_> - 7 11 10 1 2. - 0 - 5.2859159186482430e-003 - -0.1923509985208511 - 0.1680357009172440 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.2229153066873550 - -0.3441314995288849 - 0.0565448589622974 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 15 6 1 4 3. - 1 - -0.0171593204140663 - 0.1732428967952728 - -0.0551525503396988 - <_> - - <_> - - - - <_> - 4 5 4 3 -1. - <_> - 3 6 4 1 3. - 1 - -9.4694783911108971e-003 - 0.1844538003206253 - -0.1291459053754807 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 0 1 4 2. - 0 - -1.2710930313915014e-003 - 9.0124821290373802e-003 - -0.0276416391134262 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 8.4737753495573997e-003 - 0.0496796406805515 - -0.4601907134056091 - <_> - - <_> - - - - <_> - 3 1 12 4 -1. - <_> - 3 2 12 2 2. - 0 - 0.0459890216588974 - -0.1000047996640205 - 0.2388436943292618 - <_> - - <_> - - - - <_> - 1 1 2 1 -1. - <_> - 2 1 1 1 2. - 0 - -1.0296510299667716e-004 - 0.0988985970616341 - -0.1950798034667969 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - -0.0308705307543278 - 0.3780609071254730 - -0.0523016490042210 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 9 0 1 4 2. - 0 - 0.0101055102422833 - 0.0415108799934387 - -0.4591662883758545 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 9 2 2 2. - 0 - -3.2147150486707687e-003 - -0.2818039059638977 - 0.0649717524647713 - <_> - - <_> - - - - <_> - 7 2 4 2 -1. - <_> - 7 3 4 1 2. - 0 - 9.1434055939316750e-003 - -0.0632906928658485 - 0.3107604980468750 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 9 2 2 2. - 0 - 0.0131005300208926 - 0.0313256718218327 - -0.4402256011962891 - <_> - - <_> - - - - <_> - 3 1 3 2 -1. - <_> - 3 1 3 1 2. - 1 - -0.0150012401863933 - -0.3328796029090881 - 0.0449805110692978 - <_> - - <_> - - - - <_> - 2 5 16 6 -1. - <_> - 10 5 8 3 2. - <_> - 2 8 8 3 2. - 0 - 0.1314658969640732 - 0.0464403517544270 - -0.3983089029788971 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 9 2 2 2. - 0 - -7.5358957983553410e-003 - -0.3955987095832825 - 0.0363840498030186 - <_> - - <_> - - - - <_> - 10 0 4 3 -1. - <_> - 11 0 2 3 2. - 0 - 0.0117068598046899 - 0.0257238596677780 - -0.3871735036373138 - <_> - - <_> - - - - <_> - 3 0 6 2 -1. - <_> - 3 1 6 1 2. - 0 - 0.0115056503564119 - -0.0626951828598976 - 0.2350490987300873 - <_> - - <_> - - - - <_> - 13 0 4 2 -1. - <_> - 14 1 2 2 2. - 1 - 0.0385086797177792 - 0.0135290399193764 - -0.4679746031761169 - <_> - - <_> - - - - <_> - 5 0 2 4 -1. - <_> - 4 1 2 2 2. - 1 - 0.0135920401662588 - 0.0478039309382439 - -0.3514148890972138 - <_> - - <_> - - - - <_> - 13 4 2 3 -1. - <_> - 12 5 2 1 3. - 1 - -0.0192299298942089 - 0.1774591058492661 - -0.0599881298840046 - <_> - - <_> - - - - <_> - 3 5 4 3 -1. - <_> - 4 5 2 3 2. - 0 - -6.2505668029189110e-003 - 0.2013417929410934 - -0.0815811604261398 - <_> - - <_> - - - - <_> - 10 3 3 5 -1. - <_> - 11 4 1 5 3. - 1 - -0.0181782599538565 - 0.0549052990972996 - -0.0436737313866615 - <_> - - <_> - - - - <_> - 0 2 18 2 -1. - <_> - 6 2 6 2 3. - 0 - -0.0568425096571445 - 0.1439307928085327 - -0.1194335967302322 - <_> - - <_> - - - - <_> - 11 3 3 4 -1. - <_> - 12 4 1 4 3. - 1 - -0.0249537806957960 - 0.1254595965147018 - -0.0654635876417160 - <_> - - <_> - - - - <_> - 7 3 4 3 -1. - <_> - 6 4 4 1 3. - 1 - -0.0263232495635748 - 0.2233556061983109 - -0.0967509001493454 - <_> - - <_> - - - - <_> - 13 3 3 6 -1. - <_> - 14 5 1 2 9. - 0 - -0.0279333498328924 - 0.1325373947620392 - -0.1229358986020088 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 1 0 1 2 2. - 0 - -1.2998450256418437e-004 - 0.0714990422129631 - -0.2023586034774780 - <_> - - <_> - - - - <_> - 15 9 1 2 -1. - <_> - 15 9 1 1 2. - 1 - -9.2149457486812025e-005 - 0.0591559484601021 - -0.1443143039941788 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 2 2. - 1 - -0.0173880401998758 - -0.3335185945034027 - 0.0396992191672325 - <_> - - <_> - - - - <_> - 10 8 2 1 -1. - <_> - 10 8 1 1 2. - 0 - -8.6862171883694828e-005 - 0.0573970302939415 - -0.0706167966127396 - <_> - - <_> - - - - <_> - 6 8 2 1 -1. - <_> - 7 8 1 1 2. - 0 - 8.9044791820924729e-005 - -0.1067010983824730 - 0.1441559940576553 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - 9.6210632473230362e-003 - 0.0290066096931696 - -0.4204496145248413 - <_> - - <_> - - - - <_> - 3 9 2 1 -1. - <_> - 3 9 1 1 2. - 1 - -1.3927029795013368e-004 - 0.0770795568823814 - -0.1637451946735382 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 5 1 3 3. - 0 - -0.0306570604443550 - -0.6142712235450745 - 0.0141039201989770 - <_> - - <_> - - - - <_> - 2 5 3 3 -1. - <_> - 3 5 1 3 3. - 0 - -4.7086398117244244e-003 - 0.1623038053512573 - -0.0884896516799927 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - 0.0104497699066997 - 0.0209085103124380 - -0.5780171751976013 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 2 2. - 1 - -0.0165804401040077 - -0.3236370980739594 - 0.0362409017980099 - <_> - - <_> - - - - <_> - 14 4 4 6 -1. - <_> - 15 4 2 6 2. - 0 - -0.0181382503360510 - 0.1010593995451927 - -0.0175809897482395 - <_> - - <_> - - - - <_> - 0 4 4 6 -1. - <_> - 1 4 2 6 2. - 0 - -7.6911728829145432e-003 - 0.1442753970623016 - -0.0953501388430595 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 16 7 1 3 2. - 1 - -9.3184299767017365e-003 - 0.0882709771394730 - -0.1190169975161552 - <_> - - <_> - - - - <_> - 0 10 16 2 -1. - <_> - 4 10 8 2 2. - 0 - 0.0270957108587027 - -0.0667734965682030 - 0.2255190014839172 - <_> - - <_> - - - - <_> - 3 3 15 9 -1. - <_> - 8 3 5 9 3. - 0 - 2.5444820057600737e-003 - 0.0524233691394329 - -0.1591587960720062 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 3 2 2 2. - 1 - -0.0592848397791386 - 0.2784332931041718 - -0.0489787198603153 - <_> - - <_> - - - - <_> - 5 8 8 4 -1. - <_> - 5 9 8 2 2. - 0 - 0.0224572997540236 - -0.0662148594856262 - 0.1996265947818756 - <_> - - <_> - - - - <_> - 0 10 9 2 -1. - <_> - 0 11 9 1 2. - 0 - 3.1462030019611120e-003 - -0.1824429035186768 - 0.0855493098497391 - <_> - - <_> - - - - <_> - 2 11 16 1 -1. - <_> - 2 11 8 1 2. - 0 - -0.0705860927700996 - -0.2766785919666290 - 0.0148940803483129 - <_> - - <_> - - - - <_> - 2 10 2 1 -1. - <_> - 3 10 1 1 2. - 0 - -8.0054822319652885e-005 - 0.1087960004806519 - -0.1061087027192116 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 16 7 1 3 2. - 1 - -0.0305800605565310 - 0.1077807992696762 - -0.0205856300890446 - <_> - - <_> - - - - <_> - 2 7 3 2 -1. - <_> - 2 7 3 1 2. - 1 - 9.1068223118782043e-003 - -0.0457172207534313 - 0.3254370987415314 - <_> - - <_> - - - - <_> - 17 4 1 4 -1. - <_> - 17 5 1 2 2. - 0 - 5.0897640176117420e-003 - 0.0340511910617352 - -0.3589951097965241 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 5 1 8 2 2. - 0 - -0.0501431599259377 - 0.3139671087265015 - -0.0409798398613930 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - -0.0103163998574018 - -0.4392380118370056 - 0.0293227192014456 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -5.7999929413199425e-003 - 0.2046186029911041 - -0.0581888891756535 - <_> - - <_> - - - - <_> - 17 7 1 2 -1. - <_> - 17 8 1 1 2. - 0 - 3.5368890967220068e-003 - 0.0535202883183956 - -0.2161519974470139 - <_> - - <_> - - - - <_> - 0 7 1 2 -1. - <_> - 0 8 1 1 2. - 0 - -2.6618309784680605e-003 - -0.3862974047660828 - 0.0314719788730145 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - 3.1112500000745058e-003 - -0.0335823595523834 - 0.1447290033102036 - <_> - - <_> - - - - <_> - 0 6 1 3 -1. - <_> - 0 7 1 1 3. - 0 - -6.1837960965931416e-003 - -0.3984715044498444 - 0.0267127305269241 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - -9.6736097475513816e-005 - 0.0965919420123100 - -0.0766165331006050 - <_> - - <_> - - - - <_> - 0 0 11 8 -1. - <_> - 0 4 11 4 2. - 0 - 0.0983294770121574 - 0.0437419712543488 - -0.2585690021514893 - <_> - - <_> - - - - <_> - 4 4 10 2 -1. - <_> - 4 5 10 1 2. - 0 - 0.0203898698091507 - -0.0552306994795799 - 0.2188194990158081 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 4 2 1 2. - 0 - -7.8190360218286514e-003 - -0.3098830878734589 - 0.0345868691802025 - <_> - - <_> - - - - <_> - 12 3 3 6 -1. - <_> - 13 5 1 2 9. - 0 - -0.0590948499739170 - 0.1629485040903091 - -0.0637980028986931 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 9 0 9 10 2. - 0 - -0.2436560988426209 - 0.1703152060508728 - -0.0687157586216927 - <_> - - <_> - - - - <_> - 5 2 12 10 -1. - <_> - 9 2 4 10 3. - 0 - -0.3018443882465363 - -0.3464204967021942 - 0.0250850692391396 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -1.2000049464404583e-003 - 0.1788769960403442 - -0.0609927587211132 - <_> - - <_> - - - - <_> - 3 3 15 9 -1. - <_> - 8 3 5 9 3. - 0 - -0.1053579971194267 - 0.0544629395008087 - -0.0643209517002106 - <_> - - <_> - - - - <_> - 4 1 2 3 -1. - <_> - 3 2 2 1 3. - 1 - -0.0241085104644299 - -0.4786548912525177 - 0.0206138491630554 - <_> - - <_> - - - - <_> - 11 5 6 3 -1. - <_> - 13 6 2 1 9. - 0 - 0.1198955997824669 - -0.0134480595588684 - 0.4898738861083984 - <_> - - <_> - - - - <_> - 1 5 6 3 -1. - <_> - 3 6 2 1 9. - 0 - -0.0257082507014275 - 0.1392762959003449 - -0.0736217200756073 - <_> - - <_> - - - - <_> - 5 3 12 9 -1. - <_> - 9 3 4 9 3. - 0 - -0.4371986985206604 - -0.7323942184448242 - 4.4073038734495640e-003 - <_> - - <_> - - - - <_> - 1 3 12 9 -1. - <_> - 5 3 4 9 3. - 0 - -0.0797886028885841 - 0.1034927964210510 - -0.1036674976348877 - <_> - - <_> - - - - <_> - 17 1 1 10 -1. - <_> - 17 1 1 5 2. - 1 - -0.0351695306599140 - 0.0584867298603058 - -0.0428446717560291 - <_> - - <_> - - - - <_> - 9 3 4 3 -1. - <_> - 8 4 4 1 3. - 1 - -0.0176300294697285 - 0.1013825982809067 - -0.1042573973536491 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - -8.3025526255369186e-003 - -0.4406606853008270 - 0.0216828491538763 - <_> - - <_> - - - - <_> - 6 10 4 2 -1. - <_> - 7 10 2 2 2. - 0 - -8.2851955667138100e-003 - -0.4854117929935455 - 0.0209180898964405 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 7.9370345920324326e-003 - 5.9423311613500118e-003 - -0.4182822108268738 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.0507660044822842e-004 - 0.0761699303984642 - -0.1441141068935394 - <_> - - <_> - - - - <_> - 14 6 4 2 -1. - <_> - 15 7 2 2 2. - 1 - -0.0217579305171967 - 0.1715206056833267 - -0.0297044906765223 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - 0.0129220103845000 - 0.0292046405375004 - -0.3230991959571838 - <_> - - <_> - - - - <_> - 15 2 3 3 -1. - <_> - 14 3 3 1 3. - 1 - 0.0161684192717075 - -0.0761471912264824 - 0.2608844041824341 - <_> - - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 3 2 12 4 2. - 0 - -0.1505793929100037 - 0.1485286951065064 - -0.0702022090554237 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - -0.6342707276344299 - 0.3490458130836487 - -0.0298928990960121 - <_> - - <_> - - - - <_> - 7 6 4 3 -1. - <_> - 7 7 4 1 3. - 0 - -0.0114828702062368 - 0.1506868004798889 - -0.0692764073610306 - <_> - - <_> - - - - <_> - 9 2 6 3 -1. - <_> - 11 2 2 3 3. - 0 - -0.0629287734627724 - -0.5994452238082886 - 6.5263039432466030e-003 - <_> - - <_> - - - - <_> - 6 0 2 6 -1. - <_> - 6 0 1 6 2. - 1 - -0.0278967693448067 - 0.3123224079608917 - -0.0307328701019287 - <_> - - <_> - - - - <_> - 10 2 4 2 -1. - <_> - 11 2 2 2 2. - 0 - 0.0112866898998618 - 0.0143170095980167 - -0.2289423942565918 - <_> - - <_> - - - - <_> - 0 3 2 4 -1. - <_> - 1 3 1 4 2. - 0 - -3.8705959450453520e-003 - 0.0851025730371475 - -0.1167310997843742 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 1 2 1 2. - 1 - -0.0142750302329659 - -0.2076234072446823 - 0.0182626098394394 - <_> - - <_> - - - - <_> - 4 0 1 4 -1. - <_> - 3 1 1 2 2. - 1 - -0.0128161096945405 - -0.2864235937595367 - 0.0352547205984592 - <_> - - <_> - - - - <_> - 14 7 4 1 -1. - <_> - 15 8 2 1 2. - 1 - 4.9328650347888470e-003 - -0.0498688295483589 - 0.0812330693006516 - <_> - - <_> - - - - <_> - 4 7 1 4 -1. - <_> - 3 8 1 2 2. - 1 - -8.6533632129430771e-003 - 0.2170380055904388 - -0.0462555289268494 - <_> - - <_> - - - - <_> - 5 6 8 2 -1. - <_> - 5 7 8 1 2. - 0 - 0.0135765802115202 - -0.1087943017482758 - 0.0836703404784203 - <_> - - <_> - - - - <_> - 0 4 5 4 -1. - <_> - 0 5 5 2 2. - 0 - -0.0426411889493465 - -0.4999229013919830 - 0.0190836805850267 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 9 1 1 2 2. - 1 - -0.0378671102225780 - -0.5306941866874695 - -2.1276540064718574e-004 - <_> - - <_> - - - - <_> - 8 0 4 1 -1. - <_> - 9 1 2 1 2. - 1 - -0.0110354097560048 - 0.2267073988914490 - -0.0438595414161682 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 2.4298341013491154e-003 - -0.0345609895884991 - 0.1505295038223267 - <_> - - <_> - - - - <_> - 3 8 3 1 -1. - <_> - 4 9 1 1 3. - 1 - 0.0132728703320026 - 0.0186223499476910 - -0.4704827070236206 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -1.1064320278819650e-004 - 0.0962657928466797 - -0.0817501097917557 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -2.3866009432822466e-003 - 0.1809435039758682 - -0.0492622703313828 - <_> - - <_> - - - - <_> - 14 7 4 4 -1. - <_> - 14 9 4 2 2. - 0 - -7.9415831714868546e-004 - -0.1656564027070999 - 0.0242880098521709 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 6 5 3 1 3. - 1 - -0.0224558301270008 - 0.1984329968690872 - -0.0445095002651215 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - 3.0328119173645973e-003 - 0.0277534201741219 - -0.3939420878887177 - <_> - - <_> - - - - <_> - 4 1 4 1 -1. - <_> - 5 1 2 1 2. - 0 - -9.1960644349455833e-003 - -0.5917292237281799 - 0.0125251496210694 - <_> - - <_> - - - - <_> - 10 0 4 4 -1. - <_> - 11 0 2 4 2. - 0 - -0.0395006500184536 - -0.9854124784469605 - 1.5248659765347838e-003 - <_> - - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 0 2 4 2. - 0 - 0.0125679997727275 - 0.0200229100883007 - -0.3839789927005768 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - -9.2911832325626165e-005 - 0.0731418803334236 - -0.0678976476192474 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0321439318358898 - -0.0642571970820427 - 0.1372379064559937 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -1.8411510391160846e-003 - -0.2682056128978729 - 0.0448815301060677 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 1 2 1 3. - 0 - -5.5849379859864712e-003 - 0.1665173023939133 - -0.0556441210210323 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - 1.2912580277770758e-003 - 0.0621426105499268 - -0.2701449096202850 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - 1.0070719872601330e-004 - -0.0884931981563568 - 0.1000239998102188 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -4.2259409092366695e-003 - -0.3203744888305664 - 0.0122187901288271 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -1.4590879436582327e-004 - 0.1136439964175224 - -0.0941786393523216 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 17 1 1 1 3. - 0 - 5.3230789490044117e-003 - 0.0171751007437706 - -0.2201112955808640 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 1 9. - 0 - -0.0178215894848108 - 0.1416147947311401 - -0.0618716105818748 - <_> - - <_> - - - - <_> - 3 9 15 2 -1. - <_> - 8 9 5 2 3. - 0 - -0.0358189009130001 - 0.0878595411777496 - -0.0388277992606163 - <_> - - <_> - - - - <_> - 1 7 4 4 -1. - <_> - 1 9 4 2 2. - 0 - 4.9706641584634781e-003 - -0.1706542968750000 - 0.0508530512452126 - <_> - - <_> - - - - <_> - 7 4 4 8 -1. - <_> - 7 4 2 8 2. - 0 - 0.0665896236896515 - -0.0235904399305582 - 0.3613381981849670 - <_> - - <_> - - - - <_> - 0 0 18 10 -1. - <_> - 0 0 9 5 2. - <_> - 9 5 9 5 2. - 0 - -0.3272193968296051 - -0.3584249913692474 - 0.0254358202219009 - <_> - - <_> - - - - <_> - 6 5 12 3 -1. - <_> - 6 5 6 3 2. - 0 - -0.0393267609179020 - 0.0472845211625099 - -0.0626059472560883 - <_> - - <_> - - - - <_> - 5 4 3 3 -1. - <_> - 6 5 1 3 3. - 1 - 0.0280177891254425 - -0.0336177684366703 - 0.2713123857975006 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 17 1 1 1 3. - 0 - -0.0125006502494216 - -0.4793778061866760 - 7.0343599654734135e-003 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 0 10 2 1 3. - 0 - 5.7694758288562298e-003 - 0.0319538600742817 - -0.2603254914283752 - <_> - - <_> - - - - <_> - 5 4 9 8 -1. - <_> - 5 8 9 4 2. - 0 - -0.0477077215909958 - -0.4974170923233032 - 0.0130439503118396 - <_> - - <_> - - - - <_> - 8 1 10 1 -1. - <_> - 8 1 5 1 2. - 1 - 0.0354431197047234 - -0.0317368507385254 - 0.3197698891162872 - <_> - - <_> - - - - <_> - 6 9 12 3 -1. - <_> - 9 9 6 3 2. - 0 - 0.0140401795506477 - -0.0330494716763496 - 0.0705065280199051 - <_> - - <_> - - - - <_> - 0 6 14 6 -1. - <_> - 7 6 7 6 2. - 0 - 0.2303791940212250 - 0.0188837293535471 - -0.4358792901039124 - <_> - - <_> - - - - <_> - 10 9 8 3 -1. - <_> - 12 9 4 3 2. - 0 - -0.0965821668505669 - -0.7183210849761963 - 9.9819665774703026e-004 - <_> - - <_> - - - - <_> - 0 9 8 3 -1. - <_> - 2 9 4 3 2. - 0 - -0.0143663203343749 - 0.1456798017024994 - -0.0655726268887520 - <_> - - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 12 10 4 2 2. - 0 - -7.1069528348743916e-003 - 0.0663732588291168 - -0.0204512905329466 - <_> - - <_> - - - - <_> - 0 10 8 2 -1. - <_> - 2 10 4 2 2. - 0 - 8.4905643016099930e-003 - -0.0638917833566666 - 0.1573988050222397 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 5 12 2 2. - 0 - 0.1119176000356674 - -0.0282820593565702 - 0.2997005879878998 - <_> - - <_> - - - - <_> - 7 9 2 1 -1. - <_> - 8 9 1 1 2. - 0 - 1.2471539957914501e-004 - -0.0849561989307404 - 0.0983415171504021 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - -0.0135517800226808 - -0.3502771854400635 - 0.0110731096938252 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - -0.0128084300085902 - -0.4507825970649719 - 0.0197897497564554 - <_> - - <_> - - - - <_> - 14 5 3 1 -1. - <_> - 15 6 1 1 3. - 1 - -0.0399983711540699 - -0.6841586828231812 - 2.3409149143844843e-003 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -1.4464680571109056e-003 - 0.1493912935256958 - -0.0520951002836227 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 11 3 2 2 2. - 0 - -0.0124293398112059 - -0.1585797965526581 - 8.9363977313041687e-003 - <_> - - <_> - - - - <_> - 4 5 1 3 -1. - <_> - 3 6 1 1 3. - 1 - -0.0297835506498814 - -0.6947104930877686 - 0.0111151598393917 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - -5.6329318322241306e-003 - 0.1411222070455551 - -0.0527584590017796 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - -6.5792538225650787e-003 - -0.3462558984756470 - 0.0232703406363726 - <_> - - <_> - - - - <_> - 3 2 15 3 -1. - <_> - 8 2 5 3 3. - 0 - -0.0900577902793884 - 0.0759730264544487 - -0.0296420399099588 - <_> - - <_> - - - - <_> - 3 2 12 4 -1. - <_> - 6 2 6 4 2. - 0 - -0.1307234019041061 - -0.3242084085941315 - 0.0274100005626678 - <_> - - <_> - - - - <_> - 7 7 5 3 -1. - <_> - 7 8 5 1 3. - 0 - 9.8338117823004723e-003 - -0.0608530081808567 - 0.1006532981991768 - <_> - - <_> - - - - <_> - 0 1 12 2 -1. - <_> - 0 1 6 1 2. - <_> - 6 2 6 1 2. - 0 - -0.0122338300570846 - 0.1525288969278336 - -0.0526078604161739 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0234215892851353 - 0.1087090000510216 - -0.0919852703809738 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 5 1 3 3. - 0 - -8.4613403305411339e-003 - 0.1825762987136841 - -0.0478721708059311 - <_> - - <_> - - - - <_> - 10 3 4 2 -1. - <_> - 11 3 2 2 2. - 0 - -5.2086021751165390e-003 - -0.0704010799527168 - 0.0160417892038822 - <_> - - <_> - - - - <_> - 4 3 4 2 -1. - <_> - 5 3 2 2 2. - 0 - -0.0144471703097224 - -0.4148913025856018 - 0.0196003206074238 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -1.7468390287831426e-003 - -0.1947599053382874 - 0.0309568401426077 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -2.9236089903861284e-003 - 0.1661830991506577 - -0.0457322783768177 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 16 1 1 1 2. - <_> - 15 2 1 1 2. - 0 - -1.1378220515325665e-003 - 0.1349772065877914 - -0.0577374398708344 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 5 1 3 3. - 0 - -2.2203589323908091e-003 - 0.0962903425097466 - -0.0783626213669777 - <_> - - <_> - - - - <_> - 15 1 2 2 -1. - <_> - 16 1 1 1 2. - <_> - 15 2 1 1 2. - 0 - 7.3363608680665493e-004 - -0.0809390023350716 - 0.1686428934335709 - <_> - - <_> - - - - <_> - 1 1 2 2 -1. - <_> - 1 1 1 1 2. - <_> - 2 2 1 1 2. - 0 - -1.0410290269646794e-004 - 0.0975357294082642 - -0.0833811163902283 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - -2.9475050978362560e-003 - -0.2108094990253449 - 0.0202223192900419 - <_> - - <_> - - - - <_> - 0 1 1 2 -1. - <_> - 0 2 1 1 2. - 0 - -8.3546721725724638e-005 - 0.0709813982248306 - -0.1054240986704826 - <_> - - <_> - - - - <_> - 2 0 16 1 -1. - <_> - 2 0 8 1 2. - 0 - -0.0320321284234524 - 0.1008249968290329 - -0.0365646705031395 - <_> - - <_> - - - - <_> - 9 0 6 6 -1. - <_> - 9 0 3 6 2. - 1 - -0.2737559974193573 - -0.4755606949329376 - 0.0161025598645210 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - 1.1218780418857932e-003 - 0.0273505095392466 - -0.0969684273004532 - <_> - - <_> - - - - <_> - 0 4 3 8 -1. - <_> - 0 6 3 4 2. - 0 - 0.0409108214080334 - 0.0204440392553806 - -0.3838598132133484 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 9 9 1 1 2. - 0 - 1.0185709834331647e-004 - -0.0626654326915741 - 0.0867116525769234 - <_> - - <_> - - - - <_> - 0 5 1 2 -1. - <_> - 0 6 1 1 2. - 0 - 8.8024331489577889e-005 - -0.0905174836516380 - 0.0833771973848343 - <_> - - <_> - - - - <_> - 12 0 6 6 -1. - <_> - 15 0 3 3 2. - <_> - 12 3 3 3 2. - 0 - -0.0238954797387123 - 0.1273964941501617 - -0.0839652866125107 - <_> - - <_> - - - - <_> - 2 2 12 4 -1. - <_> - 2 3 12 2 2. - 0 - 0.0224859099835157 - -0.0550553388893604 - 0.1391312927007675 - <_> - - <_> - - - - <_> - 12 0 6 6 -1. - <_> - 15 0 3 3 2. - <_> - 12 3 3 3 2. - 0 - 0.0416929312050343 - -0.0169638209044933 - 0.1845320016145706 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 0 0 3 3 2. - <_> - 3 3 3 3 2. - 0 - -0.0266163200139999 - 0.1597883999347687 - -0.0559013411402702 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0376732200384140 - -0.5601174831390381 - 7.0831510238349438e-003 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 8.7794396677054465e-005 - -0.0820113569498062 - 0.0946104824542999 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.1703169438987970e-003 - 0.0331387892365456 - -0.1225493997335434 - <_> - - <_> - - - - <_> - 0 9 15 1 -1. - <_> - 5 9 5 1 3. - 0 - -0.0184615794569254 - 0.1198432967066765 - -0.0735558867454529 - <_> - - <_> - - - - <_> - 9 3 1 3 -1. - <_> - 9 4 1 1 3. - 0 - -4.9685002304613590e-003 - 0.1529157012701035 - -0.0450497604906559 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - 9.4893397763371468e-003 - 0.0382261611521244 - -0.2069741934537888 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 0 1 3 2. - 1 - 0.0426369495689869 - 4.7441869974136353e-003 - -0.2412880063056946 - <_> - - <_> - - - - <_> - 1 10 16 1 -1. - <_> - 5 10 8 1 2. - 0 - 0.0122608998790383 - -0.0523452311754227 - 0.1539171040058136 - <_> - - <_> - - - - <_> - 17 8 1 4 -1. - <_> - 17 10 1 2 2. - 0 - -3.6220869515091181e-003 - -0.3113552033901215 - 0.0275549292564392 - <_> - - <_> - - - - <_> - 0 8 1 4 -1. - <_> - 0 10 1 2 2. - 0 - 1.8543130136094987e-004 - -0.1315813064575195 - 0.0584329999983311 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 1.9817280117422342e-003 - -0.0155919399112463 - 0.0793351829051971 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - 3.0786939896643162e-003 - -0.0398325808346272 - 0.2016884982585907 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 0 1 3 2. - 1 - -4.9620792269706726e-003 - 0.0436300411820412 - -0.0161675307899714 - <_> - - <_> - - - - <_> - 0 7 1 2 -1. - <_> - 0 8 1 1 2. - 0 - 1.0100869985762984e-004 - -0.1089489981532097 - 0.0662855580449104 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 0 1 3 2. - 1 - 4.5535610988736153e-003 - -0.0256787594407797 - 0.0255745891481638 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 6 0 3 1 2. - 1 - 0.0184725802391768 - 0.0452767312526703 - -0.1889552026987076 - <_> - - <_> - - - - <_> - 14 1 2 2 -1. - <_> - 15 1 1 1 2. - <_> - 14 2 1 1 2. - 0 - -1.2821660493500531e-004 - 0.0656939074397087 - -0.0615577585995197 - <_> - - <_> - - - - <_> - 2 1 2 2 -1. - <_> - 2 1 1 1 2. - <_> - 3 2 1 1 2. - 0 - -9.1399750090204179e-005 - 0.0948623865842819 - -0.0797668322920799 - <_> - - <_> - - - - <_> - 9 1 2 3 -1. - <_> - 9 2 2 1 3. - 0 - 0.0191030092537403 - -0.0158239193260670 - 0.2006770074367523 - <_> - - <_> - - - - <_> - 1 1 3 6 -1. - <_> - 2 1 1 6 3. - 0 - 0.0326261594891548 - 0.0112808002158999 - -0.6205667853355408 - <_> - - <_> - - - - <_> - 12 8 1 3 -1. - <_> - 11 9 1 1 3. - 1 - -3.7017529830336571e-003 - 0.0628415197134018 - -0.0235861502587795 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 9 1 1 3. - 1 - -0.0177477393299341 - -0.5614045262336731 - 0.0129818804562092 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 7 2 2 2. - 0 - 0.0590741001069546 - -3.3294579479843378e-003 - 0.8448117971420288 - <_> - - <_> - - - - <_> - 5 7 4 2 -1. - <_> - 7 7 2 2 2. - 0 - -0.0548281408846378 - 0.5551471114158630 - -0.0116949900984764 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.0296080290572718e-004 - -0.0454848892986774 - 0.0589250102639198 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -9.7072806966025382e-005 - 0.0969356074929237 - -0.0802500471472740 - <_> - - <_> - - - - <_> - 8 9 4 1 -1. - <_> - 9 9 2 1 2. - 0 - 5.8545041829347610e-003 - 0.0148356901481748 - -0.3575314879417419 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 1.6329690115526319e-003 - -0.0442379005253315 - 0.1675571948289871 - <_> - - <_> - - - - <_> - 15 7 1 4 -1. - <_> - 14 8 1 2 2. - 1 - 0.0158124193549156 - 7.1729267947375774e-003 - -0.0784970596432686 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 10 2 1 2. - 0 - -4.3562431819736958e-003 - 0.2531307041645050 - -0.0289743505418301 - <_> - - <_> - - - - <_> - 15 7 1 4 -1. - <_> - 14 8 1 2 2. - 1 - 0.0355602800846100 - 1.7037480138242245e-003 - -0.4062184989452362 - <_> - - <_> - - - - <_> - 3 7 4 1 -1. - <_> - 4 8 2 1 2. - 1 - 0.0105311702936888 - 0.0292331501841545 - -0.2678278088569641 - <_> - - <_> - - - - <_> - 14 7 2 3 -1. - <_> - 13 8 2 1 3. - 1 - 0.0311877094209194 - 4.4837938621640205e-003 - -0.1900950968265533 - <_> - - <_> - - - - <_> - 4 7 3 2 -1. - <_> - 5 8 1 2 3. - 1 - -0.0239828396588564 - -0.4606791138648987 - 0.0155534995719790 - <_> - - <_> - - - - <_> - 11 3 6 6 -1. - <_> - 13 5 2 2 9. - 0 - 0.0470008403062820 - -0.0182699393481016 - 0.0814154371619225 - <_> - - <_> - - - - <_> - 1 3 6 6 -1. - <_> - 3 5 2 2 9. - 0 - 0.2608605921268463 - -0.0113393897190690 - 0.5635589957237244 - <_> - - <_> - - - - <_> - 13 2 1 9 -1. - <_> - 13 5 1 3 3. - 0 - -0.0883189365267754 - -0.7169824242591858 - 5.8255391195416451e-003 - <_> - - <_> - - - - <_> - 4 2 1 9 -1. - <_> - 4 5 1 3 3. - 0 - -3.1121359206736088e-003 - 0.0577253587543964 - -0.1249380037188530 - -1.4944460391998291 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 5 3 3 -1. - <_> - 6 6 3 1 3. - 1 - 0.0280871801078320 - -0.1541370004415512 - 0.4572769999504089 - <_> - - <_> - - - - <_> - 4 3 10 4 -1. - <_> - 4 4 10 2 2. - 0 - -0.0559035688638687 - 0.3625510931015015 - -0.1486621052026749 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 1 0 1 6 2. - 0 - -5.3916401229798794e-003 - 0.1121535971760750 - -0.3065716922283173 - <_> - - <_> - - - - <_> - 13 0 4 3 -1. - <_> - 13 0 2 3 2. - 1 - -0.0574903115630150 - -0.3776184022426605 - 0.0669829323887825 - <_> - - <_> - - - - <_> - 5 0 3 4 -1. - <_> - 5 0 3 2 2. - 1 - 0.0330815315246582 - 0.0892426222562790 - -0.4110145866870880 - <_> - - <_> - - - - <_> - 6 5 6 3 -1. - <_> - 8 6 2 1 9. - 0 - -0.0339714512228966 - 0.1730615049600601 - -0.1798561960458756 - <_> - - <_> - - - - <_> - 4 0 10 4 -1. - <_> - 4 1 10 2 2. - 0 - 0.0603961497545242 - -0.0521394684910774 - 0.4201976954936981 - <_> - - <_> - - - - <_> - 7 0 5 3 -1. - <_> - 7 1 5 1 3. - 0 - -0.0150269400328398 - 0.3377434015274048 - -0.0935636013746262 - <_> - - <_> - - - - <_> - 5 9 6 3 -1. - <_> - 7 9 2 3 3. - 0 - 0.0116876997053623 - 0.0853242129087448 - -0.3328708112239838 - <_> - - <_> - - - - <_> - 11 6 3 1 -1. - <_> - 12 6 1 1 3. - 0 - -4.4202590361237526e-003 - 0.3026230037212372 - -0.0732256472110748 - <_> - - <_> - - - - <_> - 0 0 1 9 -1. - <_> - 0 3 1 3 3. - 0 - 9.8442351445555687e-003 - 0.0675883069634438 - -0.3628098070621491 - <_> - - <_> - - - - <_> - 11 6 3 1 -1. - <_> - 12 6 1 1 3. - 0 - 6.5739490091800690e-003 - -0.0665203407406807 - 0.3675388097763062 - <_> - - <_> - - - - <_> - 0 2 6 7 -1. - <_> - 2 2 2 7 3. - 0 - -0.0124707799404860 - 0.1337161958217621 - -0.1360636055469513 - <_> - - <_> - - - - <_> - 11 6 3 1 -1. - <_> - 12 6 1 1 3. - 0 - -8.7947519205044955e-005 - 0.0701857879757881 - -0.0713831335306168 - <_> - - <_> - - - - <_> - 4 6 3 1 -1. - <_> - 5 6 1 1 3. - 0 - -4.1784630157053471e-003 - 0.3389731049537659 - -0.0602834299206734 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - -0.0101581001654267 - -0.4323292076587677 - 0.0297090206295252 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - -0.0259398706257343 - 0.2918795049190521 - -0.0584340393543243 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 7 3 4 1 3. - 0 - 0.0166381802409887 - -0.0773533508181572 - 0.2378093004226685 - <_> - - <_> - - - - <_> - 3 0 6 5 -1. - <_> - 5 0 2 5 3. - 0 - 1.4849379658699036e-003 - 0.0896981582045555 - -0.2072698026895523 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - 0.0243238899856806 - 0.0461349897086620 - -0.2363197058439255 - <_> - - <_> - - - - <_> - 2 0 4 5 -1. - <_> - 3 0 2 5 2. - 0 - 7.4536320753395557e-003 - 0.0568705797195435 - -0.2988435924053192 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 12 0 2 4 3. - 0 - 0.0271364096552134 - 0.0331432409584522 - -0.2613714039325714 - <_> - - <_> - - - - <_> - 2 0 6 4 -1. - <_> - 4 0 2 4 3. - 0 - -0.0392157584428787 - -0.4293881058692932 - 0.0398426391184330 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0267243608832359 - -0.1013026982545853 - 0.1530607938766480 - <_> - - <_> - - - - <_> - 0 10 7 2 -1. - <_> - 0 11 7 1 2. - 0 - -7.7838180586695671e-003 - -0.5043134093284607 - 0.0322048217058182 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - 0.0313477218151093 - -0.0528112687170506 - 0.3277122974395752 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - 5.1572020165622234e-003 - 0.0392642803490162 - -0.4024018943309784 - <_> - - <_> - - - - <_> - 6 3 6 2 -1. - <_> - 8 3 2 2 3. - 0 - 0.0192569997161627 - 0.0336286500096321 - -0.3624106943607330 - <_> - - <_> - - - - <_> - 7 8 4 3 -1. - <_> - 7 9 4 1 3. - 0 - 0.0175872296094894 - -0.0515547506511211 - 0.2759918868541718 - <_> - - <_> - - - - <_> - 7 8 4 4 -1. - <_> - 7 9 4 2 2. - 0 - -9.7410473972558975e-003 - 0.2356055974960327 - -0.0603438392281532 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 2 2. - 1 - -1.1508379975566640e-004 - 0.0693937391042709 - -0.2050524055957794 - <_> - - <_> - - - - <_> - 0 3 18 6 -1. - <_> - 9 3 9 3 2. - <_> - 0 6 9 3 2. - 0 - -0.1330437064170837 - -0.3920258879661560 - 0.0319706909358501 - <_> - - <_> - - - - <_> - 0 11 18 1 -1. - <_> - 9 11 9 1 2. - 0 - -0.0474476590752602 - -0.3572238087654114 - 0.0372174791991711 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 5 1 3 3. - 0 - -4.1948170401155949e-003 - 0.1363786011934280 - -0.0693715736269951 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 5 1 3 3. - 0 - -3.9906660094857216e-003 - 0.1492844969034195 - -0.0805713534355164 - <_> - - <_> - - - - <_> - 10 6 3 1 -1. - <_> - 11 6 1 1 3. - 0 - -8.4894258179701865e-005 - 0.0887596681714058 - -0.0793792009353638 - <_> - - <_> - - - - <_> - 5 6 3 1 -1. - <_> - 6 6 1 1 3. - 0 - -4.1100149246631190e-005 - 0.1228988990187645 - -0.1032209023833275 - <_> - - <_> - - - - <_> - 15 5 3 4 -1. - <_> - 15 6 3 2 2. - 0 - 0.0147270802408457 - 0.0197445098310709 - -0.3674651980400085 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -8.5327234119176865e-003 - -0.3629939854145050 - 0.0311319306492805 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 8 4 2 8 3. - 0 - -0.0165539197623730 - 0.1010579019784927 - -0.1532938927412033 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 9 2 2 2. - 0 - -0.0123379798606038 - -0.4629243910312653 - 0.0227365903556347 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 16 7 1 3 2. - 1 - -3.6450990010052919e-003 - 0.0426290184259415 - -0.1378117948770523 - <_> - - <_> - - - - <_> - 2 7 3 2 -1. - <_> - 2 7 3 1 2. - 1 - 0.0128391403704882 - -0.0410482808947563 - 0.4376184046268463 - <_> - - <_> - - - - <_> - 4 0 10 6 -1. - <_> - 4 2 10 2 3. - 0 - -0.0930804535746574 - 0.2291785925626755 - -0.0500329211354256 - <_> - - <_> - - - - <_> - 1 0 12 2 -1. - <_> - 1 0 6 1 2. - <_> - 7 1 6 1 2. - 0 - 0.0217623207718134 - -0.0502710007131100 - 0.2288144975900650 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 1 1 2 3. - 1 - 0.0173615608364344 - 0.0253105498850346 - -0.2676073908805847 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - -0.0130847096443176 - -0.2977434098720551 - 0.0438059307634830 - <_> - - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 7 1 4 2. - 0 - -8.4787927335128188e-005 - 0.0740567967295647 - -0.1138205975294113 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 1 7 1 4 2. - 0 - -5.2169840782880783e-003 - 0.1296218037605286 - -0.0891220718622208 - <_> - - <_> - - - - <_> - 6 4 8 6 -1. - <_> - 6 7 8 3 2. - 0 - 0.0552566796541214 - -0.1671513020992279 - 0.0490113683044910 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 6 7 1 1 9. - 0 - -0.0108995595946908 - 0.1747363060712814 - -0.0655686333775520 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - 0.0147227300330997 - 0.0212226193398237 - -0.3685390055179596 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - 0.0307149104773998 - -0.0470328703522682 - 0.2277777045965195 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 9 0 2 2 2. - 0 - -6.8415720015764236e-003 - -0.2593953907489777 - 0.0244969706982374 - <_> - - <_> - - - - <_> - 1 0 10 4 -1. - <_> - 1 0 5 2 2. - <_> - 6 2 5 2 2. - 0 - 0.0178221594542265 - -0.0791869163513184 - 0.1489434987306595 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 2.8468179516494274e-003 - -0.0371160991489887 - 0.1639361977577210 - <_> - - <_> - - - - <_> - 3 2 1 3 -1. - <_> - 2 3 1 1 3. - 1 - -0.0136566795408726 - -0.3989264070987701 - 0.0265143308788538 - <_> - - <_> - - - - <_> - 14 3 4 6 -1. - <_> - 14 5 4 2 3. - 0 - -0.1248378008604050 - -0.3875510096549988 - 8.9756725355982780e-003 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -4.3433021346572787e-005 - 0.1197383031249046 - -0.0854677110910416 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -2.1456810645759106e-003 - 0.2069278061389923 - -0.0501870587468147 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -9.6643620054237545e-005 - 0.1003450006246567 - -0.1166310012340546 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - -4.7470871359109879e-003 - -0.4449481964111328 - 0.0195832494646311 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -2.2244181018322706e-003 - 0.1985644996166229 - -0.0558203905820847 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 3.7989660631865263e-003 - 0.0367146991193295 - -0.2994151115417481 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - -5.7312021963298321e-003 - -0.5283203721046448 - 0.0185503307729959 - <_> - - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 6 2 6 1 3. - 0 - -0.0259102098643780 - 0.2876461148262024 - -0.0384897701442242 - <_> - - <_> - - - - <_> - 0 3 4 6 -1. - <_> - 0 5 4 2 3. - 0 - -0.0969470068812370 - -0.5990254878997803 - 0.0189795494079590 - <_> - - <_> - - - - <_> - 11 1 3 9 -1. - <_> - 12 4 1 3 9. - 0 - -0.0549227409064770 - 0.0714821293950081 - -0.1085847988724709 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 4 11 8 1 2. - 0 - -0.0270808003842831 - 0.1864906996488571 - -0.0595682188868523 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 9 10 2 2 2. - 0 - 5.0297360867261887e-003 - 0.0333631299436092 - -0.3083158135414124 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 2 1 2. - 1 - 3.3542269375175238e-003 - -0.0545712299644947 - 0.2253412008285523 - <_> - - <_> - - - - <_> - 14 8 4 4 -1. - <_> - 14 10 4 2 2. - 0 - 1.2667280388996005e-003 - -0.1784033030271530 - 0.0343464389443398 - <_> - - <_> - - - - <_> - 0 4 3 4 -1. - <_> - 0 5 3 2 2. - 0 - 0.0113399196416140 - 0.0264065898954868 - -0.3811934888362885 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 9.1608919319696724e-005 - -0.1006613969802856 - 0.0871704965829849 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - 7.8464552643708885e-005 - -0.1021668016910553 - 0.1010992005467415 - <_> - - <_> - - - - <_> - 15 7 3 1 -1. - <_> - 16 7 1 1 3. - 0 - 7.5286210631020367e-005 - -0.0560614392161369 - 0.0584244504570961 - <_> - - <_> - - - - <_> - 0 7 3 1 -1. - <_> - 1 7 1 1 3. - 0 - -2.6337830349802971e-003 - 0.1721587032079697 - -0.0578800700604916 - <_> - - <_> - - - - <_> - 11 3 3 6 -1. - <_> - 12 5 1 2 9. - 0 - 0.0630315616726875 - -0.0192014090716839 - 0.2779996097087860 - <_> - - <_> - - - - <_> - 4 3 3 6 -1. - <_> - 5 5 1 2 9. - 0 - -0.0232195295393467 - 0.1028477996587753 - -0.0982399880886078 - <_> - - <_> - - - - <_> - 10 2 1 8 -1. - <_> - 10 2 1 4 2. - 1 - -9.0258438140153885e-003 - 0.0221676900982857 - -0.0829488188028336 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - 0.0387321896851063 - -0.0288261603564024 - 0.3477306962013245 - <_> - - <_> - - - - <_> - 6 6 6 6 -1. - <_> - 6 9 6 3 2. - 0 - -0.0477024912834167 - -0.6710342764854431 - 0.0165736693888903 - <_> - - <_> - - - - <_> - 0 8 4 4 -1. - <_> - 0 10 4 2 2. - 0 - -0.0128478202968836 - -0.3864395022392273 - 0.0200334694236517 - <_> - - <_> - - - - <_> - 11 2 3 7 -1. - <_> - 12 3 1 7 3. - 1 - 0.0573811605572701 - -0.0114638702943921 - 0.2673436105251312 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - -0.0106211900711060 - -0.3121894896030426 - 0.0282483603805304 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 10 1 2 4 2. - 0 - -0.0136766098439693 - -0.1268973052501679 - 8.6436048150062561e-003 - <_> - - <_> - - - - <_> - 5 0 4 5 -1. - <_> - 6 0 2 5 2. - 0 - 4.3348008766770363e-003 - 0.0510339587926865 - -0.1739407926797867 - <_> - - <_> - - - - <_> - 0 3 18 1 -1. - <_> - 6 3 6 1 3. - 0 - 0.0759916305541992 - -0.0233285892754793 - 0.4284586012363434 - <_> - - <_> - - - - <_> - 6 4 2 3 -1. - <_> - 6 5 2 1 3. - 0 - 0.0130986003205180 - -0.0247476603835821 - 0.3378502130508423 - <_> - - <_> - - - - <_> - 10 2 1 8 -1. - <_> - 10 2 1 4 2. - 1 - -0.0357360206544399 - 0.0379134491086006 - -0.0535590909421444 - <_> - - <_> - - - - <_> - 6 10 2 1 -1. - <_> - 7 10 1 1 2. - 0 - 1.0628229938447475e-004 - -0.0845223218202591 - 0.1064075976610184 - <_> - - <_> - - - - <_> - 10 10 4 1 -1. - <_> - 11 10 2 1 2. - 0 - 2.1813490893691778e-003 - 0.0403837785124779 - -0.1914857029914856 - <_> - - <_> - - - - <_> - 5 0 6 10 -1. - <_> - 8 0 3 10 2. - 0 - -0.0944921076297760 - 0.2070422023534775 - -0.0440482199192047 - <_> - - <_> - - - - <_> - 5 1 12 4 -1. - <_> - 8 1 6 4 2. - 0 - -0.1352936029434204 - -0.2685205936431885 - 5.2231121808290482e-003 - <_> - - <_> - - - - <_> - 0 1 15 5 -1. - <_> - 5 1 5 5 3. - 0 - -0.1212956011295319 - 0.0902662202715874 - -0.0925426632165909 - <_> - - <_> - - - - <_> - 12 0 1 2 -1. - <_> - 12 0 1 1 2. - 1 - -2.3765969090163708e-003 - 0.0825258493423462 - -0.0318351909518242 - <_> - - <_> - - - - <_> - 7 7 3 3 -1. - <_> - 7 8 3 1 3. - 0 - 0.0126321800053120 - -0.0499357804656029 - 0.1827003061771393 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 3.7632249295711517e-003 - 0.0149961495772004 - -0.1362649053335190 - <_> - - <_> - - - - <_> - 4 3 1 3 -1. - <_> - 3 4 1 1 3. - 1 - -4.1556770156603307e-005 - 0.0748788267374039 - -0.1122751981019974 - <_> - - <_> - - - - <_> - 7 7 4 3 -1. - <_> - 7 8 4 1 3. - 0 - -6.9654630497097969e-003 - 0.1607120931148529 - -0.0548016093671322 - <_> - - <_> - - - - <_> - 4 10 4 1 -1. - <_> - 5 10 2 1 2. - 0 - -4.2004981078207493e-003 - -0.2997260093688965 - 0.0288936607539654 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - -1.9440690521150827e-003 - 0.1252965927124023 - -0.0355084314942360 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 2 1 1 2. - <_> - 3 3 1 1 2. - 0 - -8.9434572146274149e-005 - 0.0989118963479996 - -0.0858442336320877 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 9.9513839813880622e-005 - -0.0414522588253021 - 0.0545227117836475 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -8.9198641944676638e-005 - 0.0732288733124733 - -0.1297810971736908 - <_> - - <_> - - - - <_> - 1 0 16 2 -1. - <_> - 9 0 8 1 2. - <_> - 1 1 8 1 2. - 0 - 5.7081338018178940e-003 - -0.0704252570867538 - 0.1426298022270203 - <_> - - <_> - - - - <_> - 8 2 8 1 -1. - <_> - 8 2 4 1 2. - 1 - -0.0948576331138611 - 0.2331040948629379 - -0.0371481999754906 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 13 3 4 1 3. - 1 - 0.0284713208675385 - -0.0485380589962006 - 0.3514353930950165 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 5 3 1 4 3. - 1 - 0.0414011105895042 - -0.0182231999933720 - 0.3972957134246826 - <_> - - <_> - - - - <_> - 15 5 3 4 -1. - <_> - 15 6 3 2 2. - 0 - -0.0289418101310730 - -0.2241653054952622 - 0.0144770499318838 - <_> - - <_> - - - - <_> - 0 5 3 4 -1. - <_> - 0 6 3 2 2. - 0 - 4.3586310930550098e-003 - 0.0456358417868614 - -0.1863248050212860 - <_> - - <_> - - - - <_> - 5 2 9 3 -1. - <_> - 8 2 3 3 3. - 0 - -0.0733222812414169 - -0.1923848986625671 - 0.0124553302302957 - <_> - - <_> - - - - <_> - 3 7 3 2 -1. - <_> - 3 7 3 1 2. - 1 - 0.0195182003080845 - -0.0205002296715975 - 0.4198358952999115 - <_> - - <_> - - - - <_> - 13 7 3 1 -1. - <_> - 14 8 1 1 3. - 1 - 3.9780829101800919e-003 - -0.0459756888449192 - 0.1032186970114708 - <_> - - <_> - - - - <_> - 6 8 1 3 -1. - <_> - 6 9 1 1 3. - 0 - -9.7237170848529786e-005 - 0.1050683036446571 - -0.0875330418348312 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - 8.7185493612196296e-005 - -0.0629522725939751 - 0.0786994695663452 - <_> - - <_> - - - - <_> - 5 9 2 2 -1. - <_> - 5 9 1 1 2. - <_> - 6 10 1 1 2. - 0 - 2.6201619766652584e-003 - 0.0290769003331661 - -0.3187983036041260 - <_> - - <_> - - - - <_> - 12 5 2 4 -1. - <_> - 12 5 1 4 2. - 1 - 0.0688075572252274 - -6.5168988658115268e-004 - -0.7223829030990601 - <_> - - <_> - - - - <_> - 6 5 4 2 -1. - <_> - 6 5 4 1 2. - 1 - -0.0644654780626297 - 0.4331586956977844 - -0.0217861291021109 - <_> - - <_> - - - - <_> - 14 0 2 4 -1. - <_> - 13 1 2 2 2. - 1 - 8.7852329015731812e-003 - -0.0572669692337513 - 0.0773734599351883 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 5 1 2 2 2. - 1 - -0.0154979797080159 - 0.1733758002519608 - -0.0580087192356586 - <_> - - <_> - - - - <_> - 3 10 15 2 -1. - <_> - 8 10 5 2 3. - 0 - -0.0229432601481676 - 0.0691009834408760 - -0.0418080314993858 - <_> - - <_> - - - - <_> - 0 1 2 3 -1. - <_> - 0 2 2 1 3. - 0 - -8.2105891779065132e-003 - -0.2796316146850586 - 0.0295252203941345 - <_> - - <_> - - - - <_> - 11 0 3 7 -1. - <_> - 12 1 1 7 3. - 1 - -0.0334756709635258 - 0.1103840023279190 - -0.0332381986081600 - <_> - - <_> - - - - <_> - 4 0 10 2 -1. - <_> - 9 0 5 2 2. - 0 - 8.7814498692750931e-003 - -0.0891718864440918 - 0.0870016366243362 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - 0.3470915853977203 - -0.0481206811964512 - 0.1803553998470306 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -1.0401030158391222e-004 - 0.0946480333805084 - -0.0832195132970810 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - -2.7705188840627670e-003 - 0.1577380001544952 - -0.0250011291354895 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -8.6398613348137587e-005 - 0.0712807923555374 - -0.1460004001855850 - <_> - - <_> - - - - <_> - 4 5 14 7 -1. - <_> - 4 5 7 7 2. - 0 - -0.2675904929637909 - 0.1255885958671570 - -0.0389952883124352 - <_> - - <_> - - - - <_> - 4 3 10 4 -1. - <_> - 4 4 10 2 2. - 0 - -0.0242311302572489 - 0.0884227827191353 - -0.0939786136150360 - <_> - - <_> - - - - <_> - 8 3 2 3 -1. - <_> - 8 4 2 1 3. - 0 - 0.0108853299170733 - -0.0412720292806625 - 0.2597633004188538 - <_> - - <_> - - - - <_> - 2 4 12 2 -1. - <_> - 2 5 12 1 2. - 0 - 0.0210325606167316 - -0.0434833616018295 - 0.1844277977943420 - <_> - - <_> - - - - <_> - 8 6 2 3 -1. - <_> - 8 7 2 1 3. - 0 - -4.2315269820392132e-003 - 0.1218812018632889 - -0.0777490064501762 - <_> - - <_> - - - - <_> - 1 5 6 3 -1. - <_> - 3 6 2 1 9. - 0 - -0.0158731304109097 - 0.1043139994144440 - -0.0840821787714958 - <_> - - <_> - - - - <_> - 10 9 1 2 -1. - <_> - 10 9 1 1 2. - 1 - -1.9862418994307518e-003 - 0.0375437885522842 - -0.0485844612121582 - <_> - - <_> - - - - <_> - 7 8 2 1 -1. - <_> - 8 8 1 1 2. - 0 - 7.8583601862192154e-005 - -0.0805812627077103 - 0.1091108992695808 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - 2.9601699206978083e-003 - 0.0245511103421450 - -0.3355880081653595 - <_> - - <_> - - - - <_> - 7 0 7 3 -1. - <_> - 6 1 7 1 3. - 1 - -0.0950161367654800 - -0.5991563200950623 - 0.0115513298660517 - <_> - - <_> - - - - <_> - 8 4 2 2 -1. - <_> - 9 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 1.1362539953552186e-004 - -0.0869231671094894 - 0.0934892818331718 - <_> - - <_> - - - - <_> - 8 3 3 3 -1. - <_> - 7 4 3 1 3. - 1 - -9.8137762397527695e-003 - 0.0764314830303192 - -0.1093885973095894 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - 9.8380893177818507e-005 - -0.0662638321518898 - 0.0816182568669319 - <_> - - <_> - - - - <_> - 3 9 2 2 -1. - <_> - 3 9 1 1 2. - <_> - 4 10 1 1 2. - 0 - 2.2226599976420403e-003 - 0.0317179784178734 - -0.2463603019714356 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - 2.3853180464357138e-003 - -0.0278553999960423 - 0.1208064034581184 - <_> - - <_> - - - - <_> - 0 5 6 4 -1. - <_> - 0 6 6 2 2. - 0 - -0.0394575186073780 - -0.3502756953239441 - 0.0212135706096888 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - -7.9605240898672491e-005 - 0.0882474035024643 - -0.0597987510263920 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - -2.2772089578211308e-003 - 0.1896196007728577 - -0.0375142507255077 - <_> - - <_> - - - - <_> - 12 0 6 6 -1. - <_> - 14 0 2 6 3. - 0 - 0.0205863900482655 - 0.0274811405688524 - -0.0803420618176460 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 2 0 2 6 3. - 0 - -0.0742730572819710 - -0.3368605971336365 - 0.0219481997191906 - <_> - - <_> - - - - <_> - 6 2 8 1 -1. - <_> - 6 2 4 1 2. - 0 - 0.0180752705782652 - -0.0219126101583242 - 0.2031902968883514 - <_> - - <_> - - - - <_> - 4 7 3 2 -1. - <_> - 5 8 1 2 3. - 1 - -0.0149537203833461 - -0.2655959129333496 - 0.0263714101165533 - <_> - - <_> - - - - <_> - 11 8 2 1 -1. - <_> - 11 8 1 1 2. - 0 - -4.8192208632826805e-003 - 0.1670712977647781 - -0.0142157897353172 - <_> - - <_> - - - - <_> - 5 8 2 1 -1. - <_> - 6 8 1 1 2. - 0 - 3.6314369936008006e-005 - -0.0771988034248352 - 0.1018676012754440 - <_> - - <_> - - - - <_> - 9 8 4 2 -1. - <_> - 10 8 2 2 2. - 0 - -8.3623798564076424e-003 - -0.1606740951538086 - 0.0155232800170779 - <_> - - <_> - - - - <_> - 5 8 4 2 -1. - <_> - 6 8 2 2 2. - 0 - 2.3804600350558758e-003 - 0.0588995404541492 - -0.1310853064060211 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 1.6680910484865308e-003 - 0.0309699401259422 - -0.2259887009859085 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 1.5265520196408033e-003 - -0.0492406897246838 - 0.2079126983880997 - <_> - - <_> - - - - <_> - 9 0 7 3 -1. - <_> - 9 1 7 1 3. - 0 - 0.0145751498639584 - -0.0368372909724712 - 0.1015444025397301 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 6 1 4 1 3. - 0 - -7.6943649910390377e-003 - 0.1571006029844284 - -0.0578264892101288 - <_> - - <_> - - - - <_> - 15 7 3 2 -1. - <_> - 15 7 3 1 2. - 1 - -9.0497516794130206e-005 - 0.0475732013583183 - -0.1652150005102158 - <_> - - <_> - - - - <_> - 3 7 2 3 -1. - <_> - 3 7 1 3 2. - 1 - -0.0227940101176500 - -0.2597321867942810 - 0.0265597999095917 - <_> - - <_> - - - - <_> - 10 8 8 4 -1. - <_> - 12 8 4 4 2. - 0 - -9.0023465454578400e-003 - 0.0412062294781208 - -0.0224165208637714 - <_> - - <_> - - - - <_> - 1 8 3 4 -1. - <_> - 2 8 1 4 3. - 0 - 6.7992340773344040e-003 - -0.0393711812794209 - 0.1710024029016495 - <_> - - <_> - - - - <_> - 14 7 3 3 -1. - <_> - 15 7 1 3 3. - 0 - -4.3460330925881863e-003 - 0.0609644018113613 - -0.0208171792328358 - <_> - - <_> - - - - <_> - 1 7 3 3 -1. - <_> - 2 7 1 3 3. - 0 - -3.7276789080351591e-003 - 0.1230709031224251 - -0.0589388608932495 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - -8.4070830780547112e-005 - 0.1386191993951798 - -0.0827647596597672 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - 1.1763629736378789e-003 - 0.0503585301339626 - -0.1593372970819473 - <_> - - <_> - - - - <_> - 12 11 2 1 -1. - <_> - 12 11 1 1 2. - 0 - 5.5893128737807274e-003 - 7.0979949086904526e-003 - -0.5802838206291199 - <_> - - <_> - - - - <_> - 4 11 2 1 -1. - <_> - 5 11 1 1 2. - 0 - -1.0127289715455845e-004 - 0.0832657590508461 - -0.0823785737156868 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 9 1 1 2. - 1 - -0.0244648903608322 - -0.8722183704376221 - 1.3292940566316247e-003 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 5 9 1 1 2. - 1 - -4.4401640479918569e-005 - 0.0560028105974197 - -0.1514776945114136 - <_> - - <_> - - - - <_> - 10 8 8 4 -1. - <_> - 12 8 4 4 2. - 0 - 0.0570377893745899 - 5.0832000561058521e-003 - -0.1104736998677254 - <_> - - <_> - - - - <_> - 0 8 8 4 -1. - <_> - 2 8 4 4 2. - 0 - 0.0202431399375200 - -0.0490843802690506 - 0.1544373929500580 - <_> - - <_> - - - - <_> - 10 9 8 2 -1. - <_> - 12 9 4 2 2. - 0 - 9.7376257181167603e-003 - -0.0197007898241282 - 0.0521511696279049 - <_> - - <_> - - - - <_> - 0 9 8 2 -1. - <_> - 2 9 4 2 2. - 0 - -0.0150084495544434 - 0.1469714045524597 - -0.0502718612551689 - <_> - - <_> - - - - <_> - 7 10 6 2 -1. - <_> - 9 10 2 2 3. - 0 - -0.0210466906428337 - -0.3653112053871155 - 0.0176721606403589 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 9 11 2 1 2. - 0 - 9.5258541405200958e-003 - 0.0156482309103012 - -0.4015314877033234 - <_> - - <_> - - - - <_> - 7 9 5 3 -1. - <_> - 7 10 5 1 3. - 0 - -0.0227943304926157 - 0.2992678880691528 - -0.0234474092721939 - <_> - - <_> - - - - <_> - 0 4 8 3 -1. - <_> - 0 5 8 1 3. - 0 - -0.0786303579807281 - -0.6549656987190247 - 0.0108367195352912 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 9 0 2 2 2. - 0 - 9.5926318317651749e-003 - 0.0153890596702695 - -0.3642185032367706 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -2.7699070051312447e-003 - 0.1949023008346558 - -0.0323633886873722 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 10 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -1.1783170339185745e-004 - 0.0640629008412361 - -0.0434256009757519 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -2.1889989729970694e-003 - -0.2682260870933533 - 0.0259604807943106 - <_> - - <_> - - - - <_> - 11 0 3 9 -1. - <_> - 12 0 1 9 3. - 0 - -0.0568541400134563 - -0.6960669755935669 - 5.1044360734522343e-003 - <_> - - <_> - - - - <_> - 0 4 9 3 -1. - <_> - 3 5 3 1 9. - 0 - 0.2152263969182968 - -0.0117097701877356 - 0.5646790266036987 - <_> - - <_> - - - - <_> - 9 3 1 2 -1. - <_> - 9 3 1 1 2. - 1 - -0.0204569902271032 - 0.3634766936302185 - -3.6606830544769764e-003 - <_> - - <_> - - - - <_> - 9 3 2 1 -1. - <_> - 9 3 1 1 2. - 1 - 7.7381962910294533e-005 - -0.1112214028835297 - 0.0589827485382557 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 10 7 3 3 2. - 0 - 0.0413619987666607 - -0.0511510893702507 - 0.0395247712731361 - <_> - - <_> - - - - <_> - 7 7 2 2 -1. - <_> - 7 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - -9.8949691164307296e-005 - 0.1055416986346245 - -0.0724391415715218 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 9 1 1 2 2. - 1 - 0.0180218406021595 - 0.0149949202314019 - -0.1417670994997025 - <_> - - <_> - - - - <_> - 5 3 8 8 -1. - <_> - 5 3 4 4 2. - <_> - 9 7 4 4 2. - 0 - 0.0820801481604576 - 0.0233146902173758 - -0.2817586064338684 - <_> - - <_> - - - - <_> - 9 9 3 1 -1. - <_> - 10 9 1 1 3. - 0 - -1.0621119872666895e-004 - 0.0628695264458656 - -0.0611588284373283 - <_> - - <_> - - - - <_> - 6 9 3 1 -1. - <_> - 7 9 1 1 3. - 0 - -7.9379147791769356e-005 - 0.0875504314899445 - -0.0821940675377846 - <_> - - <_> - - - - <_> - 7 7 4 4 -1. - <_> - 8 7 2 4 2. - 0 - 5.5925888009369373e-003 - 0.0376118496060371 - -0.1958578974008560 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - 2.2940209601074457e-003 - -0.0440440215170383 - 0.1696826964616776 - <_> - - <_> - - - - <_> - 4 5 14 7 -1. - <_> - 4 5 7 7 2. - 0 - -0.4060401916503906 - 0.1727411001920700 - -0.0168506093323231 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - 0.0410226099193096 - -0.0456387810409069 - 0.1580004990100861 - <_> - - <_> - - - - <_> - 6 10 12 2 -1. - <_> - 6 10 6 2 2. - 0 - -0.0141386901959777 - 0.0657031685113907 - -0.0570850409567356 - <_> - - <_> - - - - <_> - 0 10 12 2 -1. - <_> - 6 10 6 2 2. - 0 - 0.0694381296634674 - 0.0227822698652744 - -0.3271782100200653 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - 4.5383367687463760e-003 - -0.0164108294993639 - 0.1902132034301758 - <_> - - <_> - - - - <_> - 8 1 2 4 -1. - <_> - 8 2 2 2 2. - 0 - -7.3475250974297523e-003 - 0.1583296954631805 - -0.0416678786277771 - <_> - - <_> - - - - <_> - 10 0 8 2 -1. - <_> - 14 0 4 1 2. - <_> - 10 1 4 1 2. - 0 - -2.8285540174692869e-003 - 0.0670291632413864 - -0.0455086603760719 - <_> - - <_> - - - - <_> - 0 0 8 2 -1. - <_> - 0 0 4 1 2. - <_> - 4 1 4 1 2. - 0 - 9.2704901471734047e-003 - -0.0524564608931541 - 0.1591601073741913 - <_> - - <_> - - - - <_> - 11 0 3 9 -1. - <_> - 12 0 1 9 3. - 0 - 0.0737437903881073 - 2.7622079942375422e-003 - -0.5893092751502991 - <_> - - <_> - - - - <_> - 1 4 1 4 -1. - <_> - 1 5 1 2 2. - 0 - -7.9017343523446470e-005 - 0.0589525103569031 - -0.1028880998492241 - <_> - - <_> - - - - <_> - 14 4 2 2 -1. - <_> - 15 4 1 1 2. - <_> - 14 5 1 1 2. - 0 - -1.1446610005805269e-004 - 0.0664405226707459 - -0.0660694465041161 - <_> - - <_> - - - - <_> - 2 4 2 2 -1. - <_> - 2 4 1 1 2. - <_> - 3 5 1 1 2. - 0 - -8.8836946815717965e-005 - 0.0875052437186241 - -0.0719425380229950 - <_> - - <_> - - - - <_> - 14 4 2 2 -1. - <_> - 15 4 1 1 2. - <_> - 14 5 1 1 2. - 0 - 8.6307860328815877e-005 - -0.0624070391058922 - 0.0858614966273308 - <_> - - <_> - - - - <_> - 2 4 2 2 -1. - <_> - 2 4 1 1 2. - <_> - 3 5 1 1 2. - 0 - 2.8763279260601848e-005 - -0.0727148726582527 - 0.0818640068173409 - -1.5047789812088013 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0273202396929264 - 0.3296490907669067 - -0.1742476969957352 - <_> - - <_> - - - - <_> - 3 2 12 6 -1. - <_> - 3 4 12 2 3. - 0 - -0.1269344985485077 - 0.1998887956142426 - -0.1809320002794266 - <_> - - <_> - - - - <_> - 0 0 4 3 -1. - <_> - 2 0 2 3 2. - 0 - -5.8230119757354259e-003 - 0.1337977051734924 - -0.2958489954471588 - <_> - - <_> - - - - <_> - 9 6 4 2 -1. - <_> - 10 6 2 2 2. - 0 - -0.0101022198796272 - 0.3093211948871613 - -0.0105964103713632 - <_> - - <_> - - - - <_> - 5 6 4 2 -1. - <_> - 6 6 2 2 2. - 0 - -6.1621540226042271e-003 - 0.2676512897014618 - -0.1174649000167847 - <_> - - <_> - - - - <_> - 3 4 12 8 -1. - <_> - 3 8 12 4 2. - 0 - 0.1575161963701248 - -0.4408175945281982 - 0.0252789296209812 - <_> - - <_> - - - - <_> - 4 4 5 3 -1. - <_> - 3 5 5 1 3. - 1 - -0.0111214602366090 - 0.2267270982265472 - -0.1299867928028107 - <_> - - <_> - - - - <_> - 9 1 9 8 -1. - <_> - 9 5 9 4 2. - 0 - 0.1818567961454392 - 0.0273298397660255 - -0.2915304005146027 - <_> - - <_> - - - - <_> - 2 0 9 4 -1. - <_> - 5 0 3 4 3. - 0 - -0.0129448603838682 - 0.0969436466693878 - -0.1688731014728546 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 10 2 2 2 3. - 0 - -0.0214889198541641 - -0.2917475104331970 - 0.0229472704231739 - <_> - - <_> - - - - <_> - 0 6 16 6 -1. - <_> - 0 6 8 3 2. - <_> - 8 9 8 3 2. - 0 - 0.0196488294750452 - -0.1594862937927246 - 0.1027441024780273 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 10 6 1 3 3. - 1 - -0.0207736305892468 - 0.0316569805145264 - -0.0215030498802662 - <_> - - <_> - - - - <_> - 1 10 12 2 -1. - <_> - 1 11 12 1 2. - 0 - 3.9682849310338497e-003 - -0.2193669974803925 - 0.0784783586859703 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 10 1 2 3 3. - 0 - 0.0304208099842072 - 0.0101654697209597 - -0.3096511960029602 - <_> - - <_> - - - - <_> - 5 3 6 6 -1. - <_> - 7 5 2 2 9. - 0 - -0.1089195981621742 - 0.1235319003462791 - -0.1282604038715363 - <_> - - <_> - - - - <_> - 6 4 6 2 -1. - <_> - 6 5 6 1 2. - 0 - 7.3761628009378910e-003 - -0.0743413195014000 - 0.1841955035924912 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - 0.0810763463377953 - -0.0774555727839470 - 0.2257239967584610 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 2 1 1 3. - 1 - -0.0110074700787663 - -0.2986437976360321 - 0.0365623682737350 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 7.6382579281926155e-003 - 0.0302652791142464 - -0.4043698012828827 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - -0.0391731299459934 - 0.3628548085689545 - -0.0361531190574169 - <_> - - <_> - - - - <_> - 4 1 6 4 -1. - <_> - 6 1 2 4 3. - 0 - -0.0386924706399441 - -0.3689450025558472 - 0.0413283705711365 - <_> - - <_> - - - - <_> - 9 10 4 2 -1. - <_> - 10 10 2 2 2. - 0 - 7.3556299321353436e-003 - 0.0146254701539874 - -0.4254915118217468 - <_> - - <_> - - - - <_> - 4 6 3 2 -1. - <_> - 5 6 1 2 3. - 0 - -3.3073050435632467e-003 - 0.1806840002536774 - -0.0691574066877365 - <_> - - <_> - - - - <_> - 14 7 1 4 -1. - <_> - 13 8 1 2 2. - 1 - 1.6253300418611616e-004 - -0.0688626766204834 - 0.0515955090522766 - <_> - - <_> - - - - <_> - 5 10 4 2 -1. - <_> - 6 10 2 2 2. - 0 - -9.4225285574793816e-003 - -0.5476201176643372 - 0.0218330100178719 - <_> - - <_> - - - - <_> - 14 7 1 4 -1. - <_> - 13 8 1 2 2. - 1 - -8.5778563516214490e-005 - 0.0331584811210632 - -0.0290578808635473 - <_> - - <_> - - - - <_> - 4 7 4 1 -1. - <_> - 5 8 2 1 2. - 1 - -0.0124680204316974 - -0.4036431908607483 - 0.0339870788156986 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 0 1 3 2. - 1 - 0.0330084897577763 - 7.6816817745566368e-003 - -0.5042331218719482 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - 0.0108686303719878 - 0.0456154011189938 - -0.2567707896232605 - <_> - - <_> - - - - <_> - 15 2 2 8 -1. - <_> - 15 4 2 4 2. - 0 - -0.0844091325998306 - -0.3102942109107971 - 4.6273539774119854e-003 - <_> - - <_> - - - - <_> - 1 2 2 8 -1. - <_> - 1 4 2 4 2. - 0 - -9.3027371913194656e-003 - 0.0849931016564369 - -0.1412423998117447 - <_> - - <_> - - - - <_> - 13 6 5 6 -1. - <_> - 13 8 5 2 3. - 0 - 0.0923030376434326 - 7.9931216314435005e-003 - -0.4258207082748413 - <_> - - <_> - - - - <_> - 5 4 3 4 -1. - <_> - 6 4 1 4 3. - 0 - -0.0108158998191357 - 0.2146805971860886 - -0.0521533712744713 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - -1.1681180330924690e-004 - 0.0484504103660584 - -0.0398338511586189 - <_> - - <_> - - - - <_> - 3 6 3 2 -1. - <_> - 4 6 1 2 3. - 0 - -4.0612979792058468e-003 - 0.1664638966321945 - -0.0690636336803436 - <_> - - <_> - - - - <_> - 13 6 5 6 -1. - <_> - 13 8 5 2 3. - 0 - 5.7951388880610466e-003 - -0.0906832516193390 - 0.0837462022900581 - <_> - - <_> - - - - <_> - 0 6 5 6 -1. - <_> - 0 8 5 2 3. - 0 - 0.0493390485644341 - 0.0391735397279263 - -0.3328993916511536 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 1.1971060303039849e-004 - -0.0530186295509338 - 0.0596752986311913 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.0609890159685165e-004 - 0.0809956490993500 - -0.1632189005613327 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - -0.0308709107339382 - -0.0952577516436577 - 0.0112979598343372 - <_> - - <_> - - - - <_> - 0 0 18 3 -1. - <_> - 6 0 6 3 3. - 0 - 0.1212034001946449 - -0.0364735312759876 - 0.2985072135925293 - <_> - - <_> - - - - <_> - 9 0 6 12 -1. - <_> - 9 0 3 12 2. - 0 - -0.2062622010707855 - -0.2369849979877472 - 0.0108141796663404 - <_> - - <_> - - - - <_> - 3 0 6 12 -1. - <_> - 6 0 3 12 2. - 0 - 0.0456733107566834 - 0.0462003909051418 - -0.2862215042114258 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - -0.4655497968196869 - 0.2393129020929337 - -0.0438891500234604 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - -0.0272475592792034 - 0.2201029062271118 - -0.0473358817398548 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 1 4 1 2. - 0 - 6.7061851732432842e-003 - -0.0809647291898727 - 0.1979459971189499 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - 0.0100689297541976 - 0.0214726701378822 - -0.4235540032386780 - <_> - - <_> - - - - <_> - 6 1 6 8 -1. - <_> - 8 1 2 8 3. - 0 - -0.0208537392318249 - 0.0881766080856323 - -0.1137354969978333 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 4 0 3 1 2. - 1 - -0.0168565604835749 - -0.3347699940204620 - 0.0281140897423029 - <_> - - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 8 2 2 2. - 0 - 0.0107796397060156 - 0.0220914296805859 - -0.2659238874912262 - <_> - - <_> - - - - <_> - 0 6 18 6 -1. - <_> - 0 6 9 3 2. - <_> - 9 9 9 3 2. - 0 - -0.1449262052774429 - -0.4147103130817413 - 0.0202359594404697 - <_> - - <_> - - - - <_> - 0 6 18 1 -1. - <_> - 6 6 6 1 3. - 0 - -0.1422227025032044 - -0.5089812278747559 - 0.0144176995381713 - <_> - - <_> - - - - <_> - 4 0 3 3 -1. - <_> - 3 1 3 1 3. - 1 - -0.0261274091899395 - -0.3684940040111542 - 0.0210769791156054 - <_> - - <_> - - - - <_> - 5 1 8 4 -1. - <_> - 5 2 8 2 2. - 0 - -0.0443067885935307 - 0.2436566948890686 - -0.0331517010927200 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - -0.0471067316830158 - 0.2279410064220429 - -0.0371938496828079 - <_> - - <_> - - - - <_> - 9 4 1 4 -1. - <_> - 8 5 1 2 2. - 1 - -0.0132200196385384 - 0.0921247974038124 - -0.0404453501105309 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 1 9 1 2 2. - 0 - -2.2011219989508390e-003 - 0.1164930015802383 - -0.0722887367010117 - <_> - - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 8 2 2 2. - 0 - -0.0131634604185820 - -0.2795081138610840 - 0.0181010290980339 - <_> - - <_> - - - - <_> - 3 7 2 3 -1. - <_> - 2 8 2 1 3. - 1 - 0.0131683098152280 - -0.0476347208023071 - 0.1865935027599335 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -3.1536500900983810e-003 - -0.3466306030750275 - 0.0350298099219799 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -6.2986309640109539e-003 - -0.4451709985733032 - 0.0163948908448219 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 1.0520889918552712e-004 - -0.1222165003418922 - 0.0915297716856003 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - 6.7712259478867054e-003 - -0.0629105493426323 - 0.1366516053676605 - <_> - - <_> - - - - <_> - 16 9 1 3 -1. - <_> - 16 10 1 1 3. - 0 - 1.0879420442506671e-003 - 0.0547202602028847 - -0.0996565967798233 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - -3.3788580913096666e-003 - -0.2991569936275482 - 0.0291057508438826 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 15 8 1 2 2. - 1 - -4.8709530383348465e-003 - 0.0828113034367561 - -0.1302850991487503 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 2 1 2. - 1 - 5.3894789889454842e-003 - -0.0421475805342197 - 0.2219095975160599 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 9 1 1 2. - 1 - 0.0175544191151857 - 2.4383009877055883e-003 - -0.7208433747291565 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 5 9 1 1 2. - 1 - -8.7206506577786058e-005 - 0.0533305890858173 - -0.1519621014595032 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 6 9 6 1 3. - 0 - 0.0151795102283359 - -0.0574978999793530 - 0.1627566963434219 - <_> - - <_> - - - - <_> - 4 7 4 1 -1. - <_> - 4 7 2 1 2. - 1 - -0.0256178304553032 - -0.2213671058416367 - 0.0440652184188366 - <_> - - <_> - - - - <_> - 7 8 4 3 -1. - <_> - 7 9 4 1 3. - 0 - -8.7506044656038284e-003 - 0.1802169978618622 - -0.0483475998044014 - <_> - - <_> - - - - <_> - 1 8 1 2 -1. - <_> - 1 9 1 1 2. - 0 - 1.2497880379669368e-004 - -0.1305837035179138 - 0.0635067373514175 - <_> - - <_> - - - - <_> - 9 2 1 6 -1. - <_> - 7 4 1 2 3. - 1 - 5.6294607929885387e-003 - 0.0226444806903601 - -0.0859711170196533 - <_> - - <_> - - - - <_> - 6 4 6 2 -1. - <_> - 6 4 3 1 2. - <_> - 9 5 3 1 2. - 0 - -7.9026613384485245e-003 - 0.1551897972822189 - -0.0588974803686142 - <_> - - <_> - - - - <_> - 15 4 3 3 -1. - <_> - 15 5 3 1 3. - 0 - -0.0247161407023668 - -0.4979600012302399 - 0.0187135990709066 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - 7.5827902182936668e-003 - 0.0138079095631838 - -0.4695352911949158 - <_> - - <_> - - - - <_> - 14 4 2 3 -1. - <_> - 13 5 2 1 3. - 1 - 0.0152134504169226 - -0.0618659406900406 - 0.3366141021251679 - <_> - - <_> - - - - <_> - 7 0 8 2 -1. - <_> - 7 0 8 1 2. - 1 - 0.0565007589757442 - 0.0230288691818714 - -0.3872621059417725 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 7 5 4 1 3. - 0 - -0.0126690799370408 - 0.1125534027814865 - -0.0717377290129662 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - 8.1679318100214005e-003 - 0.0305980406701565 - -0.2757478058338165 - <_> - - <_> - - - - <_> - 16 0 2 10 -1. - <_> - 16 0 2 5 2. - 1 - 0.2462574988603592 - -3.1543320510536432e-003 - 0.4191165864467621 - <_> - - <_> - - - - <_> - 3 5 3 1 -1. - <_> - 4 6 1 1 3. - 1 - -6.3956580124795437e-003 - 0.1245488971471787 - -0.0590359382331371 - <_> - - <_> - - - - <_> - 17 1 1 10 -1. - <_> - 17 1 1 5 2. - 1 - 0.0255880896002054 - 0.0165778007358313 - -0.0753592774271965 - <_> - - <_> - - - - <_> - 1 1 10 1 -1. - <_> - 1 1 5 1 2. - 1 - -0.0742044970393181 - -0.2226208001375198 - 0.0406068898737431 - <_> - - <_> - - - - <_> - 13 1 3 9 -1. - <_> - 14 1 1 9 3. - 0 - -0.0347150601446629 - -0.4041124880313873 - 0.0158088803291321 - <_> - - <_> - - - - <_> - 0 5 4 5 -1. - <_> - 1 5 2 5 2. - 0 - -0.0117282401770353 - 0.1330981999635696 - -0.0563377514481544 - <_> - - <_> - - - - <_> - 14 3 2 1 -1. - <_> - 14 3 1 1 2. - 1 - 0.0128312399610877 - 0.0199099201709032 - -0.3775787949562073 - <_> - - <_> - - - - <_> - 6 0 4 3 -1. - <_> - 7 0 2 3 2. - 0 - -0.0105634396895766 - -0.3250890970230103 - 0.0232219099998474 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - -0.3594289124011993 - -0.3752793967723846 - 0.0196000393480062 - <_> - - <_> - - - - <_> - 1 2 3 6 -1. - <_> - 2 2 1 6 3. - 0 - -0.0370117388665676 - -0.5413631796836853 - 0.0128476396203041 - <_> - - <_> - - - - <_> - 11 0 1 3 -1. - <_> - 10 1 1 1 3. - 1 - -0.0250813793390989 - -0.3735496103763580 - 1.8088519573211670e-003 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 8 1 1 1 3. - 0 - -4.7535188496112823e-003 - 0.1972749978303909 - -0.0417747087776661 - <_> - - <_> - - - - <_> - 16 7 2 4 -1. - <_> - 16 8 2 2 2. - 0 - -0.0349073298275471 - -0.7257403135299683 - 1.4851300511509180e-003 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - -7.4698338285088539e-003 - -0.2486099004745483 - 0.0292803291231394 - <_> - - <_> - - - - <_> - 6 1 12 2 -1. - <_> - 12 1 6 1 2. - <_> - 6 2 6 1 2. - 0 - -8.5913809016346931e-003 - 0.0673476234078407 - -0.0403586998581886 - <_> - - <_> - - - - <_> - 7 2 6 3 -1. - <_> - 6 3 6 1 3. - 1 - -0.0227004103362560 - 0.0892396569252014 - -0.0787817612290382 - <_> - - <_> - - - - <_> - 11 7 2 1 -1. - <_> - 11 7 1 1 2. - 0 - 2.2053509019315243e-003 - -0.0299121607095003 - 0.1097740009427071 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 9 3 4 1 2. - 1 - -0.0989101976156235 - 0.1826681047677994 - -0.0545164085924625 - <_> - - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 12 5 2 4 2. - 0 - 0.0186248794198036 - -0.0286598391830921 - 0.1823419928550720 - <_> - - <_> - - - - <_> - 4 0 10 8 -1. - <_> - 4 2 10 4 2. - 0 - 0.2184634953737259 - -0.0214602109044790 - 0.3576447963714600 - <_> - - <_> - - - - <_> - 3 5 12 4 -1. - <_> - 6 5 6 4 2. - 0 - -0.0875929221510887 - -0.1381793022155762 - 0.0536578781902790 - <_> - - <_> - - - - <_> - 6 11 4 1 -1. - <_> - 7 11 2 1 2. - 0 - -5.9761269949376583e-003 - -0.4603489935398102 - 0.0133409397676587 - <_> - - <_> - - - - <_> - 7 11 6 1 -1. - <_> - 9 11 2 1 3. - 0 - -0.0124210799112916 - -0.3319649994373322 - 0.0128794498741627 - <_> - - <_> - - - - <_> - 0 1 2 1 -1. - <_> - 1 1 1 1 2. - 0 - -1.3781080488115549e-003 - 0.0866163298487663 - -0.0743492767214775 - <_> - - <_> - - - - <_> - 14 4 2 3 -1. - <_> - 13 5 2 1 3. - 1 - -0.0146219599992037 - 0.1300131976604462 - -0.0675984174013138 - <_> - - <_> - - - - <_> - 0 3 18 9 -1. - <_> - 6 3 6 9 3. - 0 - -0.2473503053188324 - 0.0852373018860817 - -0.0846451967954636 - <_> - - <_> - - - - <_> - 6 9 12 3 -1. - <_> - 9 9 6 3 2. - 0 - 0.0593086108565331 - 0.0132606597617269 - -0.1915708929300308 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - 0.0270131696015596 - -0.0543497614562511 - 0.1440072953701019 - <_> - - <_> - - - - <_> - 2 11 15 1 -1. - <_> - 7 11 5 1 3. - 0 - -0.0100431097671390 - 0.0975323393940926 - -0.0678704231977463 - <_> - - <_> - - - - <_> - 4 4 3 2 -1. - <_> - 5 5 1 2 3. - 1 - 0.0163337104022503 - -0.0346452295780182 - 0.2196021974086762 - <_> - - <_> - - - - <_> - 10 2 4 6 -1. - <_> - 12 2 2 3 2. - <_> - 10 5 2 3 2. - 0 - -0.0123086301609874 - 0.0820065066218376 - -0.0419768206775188 - <_> - - <_> - - - - <_> - 4 2 4 6 -1. - <_> - 4 2 2 3 2. - <_> - 6 5 2 3 2. - 0 - 0.0104857496917248 - -0.0512248501181602 - 0.1448884010314941 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -1.3628990564029664e-004 - 0.0613846108317375 - -0.0581913106143475 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 8.5936411051079631e-004 - -0.0591479800641537 - 0.1336715072393417 - <_> - - <_> - - - - <_> - 11 1 4 1 -1. - <_> - 12 2 2 1 2. - 1 - 8.3236678619869053e-005 - -0.0249018892645836 - 0.0254033803939819 - <_> - - <_> - - - - <_> - 7 1 1 4 -1. - <_> - 6 2 1 2 2. - 1 - 0.0132442796602845 - 0.0232019908726215 - -0.3130002915859222 - <_> - - <_> - - - - <_> - 8 5 3 1 -1. - <_> - 9 5 1 1 3. - 0 - 5.1960810087621212e-003 - -0.0206433702260256 - 0.1693665981292725 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -1.0730049689300358e-004 - 0.0753579363226891 - -0.0856767073273659 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 0.0191234592348337 - 7.9347174614667892e-003 - -0.4075416922569275 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 0.0155549002811313 - 0.0118627902120352 - -0.5296347141265869 - <_> - - <_> - - - - <_> - 3 1 12 2 -1. - <_> - 9 1 6 1 2. - <_> - 3 2 6 1 2. - 0 - 0.0122897401452065 - -0.0471808388829231 - 0.1515799015760422 - <_> - - <_> - - - - <_> - 6 6 5 6 -1. - <_> - 6 9 5 3 2. - 0 - -0.0145739102736115 - -0.3666937053203583 - 0.0173969194293022 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 11 0 2 1 3. - 0 - 9.7942277789115906e-003 - 0.0224469508975744 - -0.1937240064144135 - <_> - - <_> - - - - <_> - 5 6 2 4 -1. - <_> - 4 7 2 2 2. - 1 - -0.0111292498186231 - 0.1202244982123375 - -0.0504909195005894 - <_> - - <_> - - - - <_> - 14 1 3 3 -1. - <_> - 15 2 1 3 3. - 1 - -0.0284782592207193 - -0.1574227958917618 - 0.0152361104264855 - <_> - - <_> - - - - <_> - 4 1 3 3 -1. - <_> - 3 2 3 1 3. - 1 - 0.0174966808408499 - 0.0256908591836691 - -0.2340987026691437 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 13 1 3 1 3. - 1 - 0.0155218997970223 - -0.0551309399306774 - 0.1345825940370560 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 3 2 12 2 3. - 0 - -0.0769618898630142 - 0.1482017934322357 - -0.0526547282934189 - <_> - - <_> - - - - <_> - 9 0 1 2 -1. - <_> - 9 0 1 1 2. - 1 - 0.0125417597591877 - 0.0199286900460720 - -0.1956893950700760 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 1.4891889877617359e-003 - -0.0522845499217510 - 0.1244328990578651 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -8.7659856944810599e-005 - 0.0562420114874840 - -0.0350842699408531 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -7.8899807704146951e-005 - 0.1003030017018318 - -0.0722441077232361 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 1.0928830306511372e-004 - -0.0682743266224861 - 0.0615268386900425 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 9.7802199888974428e-005 - -0.0849419981241226 - 0.0790703520178795 - <_> - - <_> - - - - <_> - 13 1 3 9 -1. - <_> - 14 1 1 9 3. - 0 - -3.6586909554898739e-003 - 0.0845769569277763 - -0.0619796700775623 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0271652303636074 - -0.1325498968362808 - 0.0475470088422298 - <_> - - <_> - - - - <_> - 6 2 12 9 -1. - <_> - 9 2 6 9 2. - 0 - -0.2441554069519043 - -0.2877975106239319 - 0.0101037696003914 - <_> - - <_> - - - - <_> - 0 2 12 9 -1. - <_> - 3 2 6 9 2. - 0 - 0.2189393937587738 - -0.0191531907767057 - 0.4388386011123657 - <_> - - <_> - - - - <_> - 11 7 2 3 -1. - <_> - 10 8 2 1 3. - 1 - -0.0376634895801544 - -0.5316759943962097 - 8.6589939892292023e-003 - <_> - - <_> - - - - <_> - 7 7 3 2 -1. - <_> - 8 8 1 2 3. - 1 - 9.8570194095373154e-003 - 0.0354113392531872 - -0.1753361970186234 - <_> - - <_> - - - - <_> - 9 1 5 3 -1. - <_> - 9 2 5 1 3. - 0 - -0.0110693201422691 - 0.0876741334795952 - -0.0239711105823517 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -3.2092579640448093e-003 - 0.1167766973376274 - -0.0529380701482296 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - 0.0312991216778755 - 5.0855642184615135e-003 - -0.1607283949851990 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -1.6410440439358354e-003 - -0.1999541074037552 - 0.0321949385106564 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -8.7659856944810599e-005 - 0.0714974105358124 - -0.0458981394767761 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -2.0864999387413263e-003 - 0.1711021065711975 - -0.0359485596418381 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - -0.0605272799730301 - -0.7627351880073547 - 1.3608309673145413e-003 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - 0.0122301597148180 - 0.0285950507968664 - -0.2239228039979935 - <_> - - <_> - - - - <_> - 2 0 14 3 -1. - <_> - 2 0 7 3 2. - 0 - -0.1787638068199158 - -0.3521367907524109 - 0.0174969397485256 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 5 1 2 3. - 1 - -9.4217322766780853e-003 - 0.0767493769526482 - -0.0783747434616089 - <_> - - <_> - - - - <_> - 15 8 1 3 -1. - <_> - 14 9 1 1 3. - 1 - 5.1809968426823616e-003 - 0.0325499214231968 - -0.1073770001530647 - <_> - - <_> - - - - <_> - 3 8 3 1 -1. - <_> - 4 9 1 1 3. - 1 - 0.0123001104220748 - 0.0159029308706522 - -0.3870312869548798 - <_> - - <_> - - - - <_> - 15 2 1 2 -1. - <_> - 15 3 1 1 2. - 0 - -1.2951259850524366e-004 - 0.0526566281914711 - -0.0606149993836880 - <_> - - <_> - - - - <_> - 4 5 6 6 -1. - <_> - 4 8 6 3 2. - 0 - -0.1017021015286446 - -0.7759314775466919 - 6.8476120941340923e-003 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - -3.6904220469295979e-003 - 0.1903592944145203 - -0.0239952597767115 - <_> - - <_> - - - - <_> - 2 7 3 2 -1. - <_> - 3 8 1 2 3. - 1 - 0.0157220792025328 - 0.0200756508857012 - -0.2848424017429352 - <_> - - <_> - - - - <_> - 16 8 2 2 -1. - <_> - 16 8 1 2 2. - 0 - 1.5800909604877234e-003 - 0.0145344799384475 - -0.0460878908634186 - <_> - - <_> - - - - <_> - 0 8 2 2 -1. - <_> - 1 8 1 2 2. - 0 - 1.9083570223301649e-003 - -0.0432771183550358 - 0.1481475979089737 - <_> - - <_> - - - - <_> - 11 0 1 3 -1. - <_> - 10 1 1 1 3. - 1 - 0.0453680492937565 - 1.2600870104506612e-003 - -1.0040459632873535 - <_> - - <_> - - - - <_> - 5 3 6 3 -1. - <_> - 4 4 6 1 3. - 1 - -0.0316132009029388 - 0.1904114037752152 - -0.0300776790827513 - <_> - - <_> - - - - <_> - 10 3 6 6 -1. - <_> - 12 5 2 2 9. - 0 - -0.0595927201211452 - 0.0596353597939014 - -0.0629790872335434 - <_> - - <_> - - - - <_> - 2 3 6 6 -1. - <_> - 4 5 2 2 9. - 0 - -0.2243428975343704 - -0.4117513895034790 - 0.0156417302787304 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 6 10 6 1 2. - 0 - -6.5899849869310856e-003 - 0.1944317966699600 - -0.0316946282982826 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 6 10 6 1 3. - 0 - 7.9618580639362335e-003 - -0.0518234409391880 - 0.1194353997707367 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 2 1 2. - 1 - 0.0240972694009542 - 2.5083899963647127e-003 - -0.5838950872421265 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 8 1 2 2. - 1 - -0.0197977498173714 - -0.2489371001720429 - 0.0233198106288910 - <_> - - <_> - - - - <_> - 6 9 12 3 -1. - <_> - 9 9 6 3 2. - 0 - 0.0303597208112478 - -0.0222993493080139 - 0.0859800428152084 - <_> - - <_> - - - - <_> - 0 9 2 1 -1. - <_> - 1 9 1 1 2. - 0 - -8.3497361629270017e-005 - 0.0643437430262566 - -0.0896775498986244 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 9 1 6 2 2. - 0 - -0.0239149201661348 - 0.1210905984044075 - -0.0252606999129057 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -8.6520854383707047e-003 - -0.4716542959213257 - 0.0129489703103900 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 9 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.8689059652388096e-003 - -0.1858464926481247 - 0.0285442303866148 - <_> - - <_> - - - - <_> - 9 3 6 3 -1. - <_> - 8 4 6 1 3. - 1 - -0.0147120300680399 - 0.0738334804773331 - -0.0795455127954483 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - 9.6776559075806290e-005 - -0.0538084506988525 - 0.0670524090528488 - <_> - - <_> - - - - <_> - 6 2 7 3 -1. - <_> - 5 3 7 1 3. - 1 - -0.0408816002309322 - 0.1570951044559479 - -0.0397202111780643 - <_> - - <_> - - - - <_> - 6 4 12 4 -1. - <_> - 12 4 6 2 2. - <_> - 6 6 6 2 2. - 0 - 4.3581537902355194e-003 - -0.0688919574022293 - 0.0545098185539246 - <_> - - <_> - - - - <_> - 1 10 12 1 -1. - <_> - 5 10 4 1 3. - 0 - -7.9926364123821259e-003 - 0.0958441868424416 - -0.0695804804563522 - <_> - - <_> - - - - <_> - 3 2 12 2 -1. - <_> - 9 2 6 1 2. - <_> - 3 3 6 1 2. - 0 - 0.0103330099955201 - -0.0546866692602634 - 0.1301154941320419 - <_> - - <_> - - - - <_> - 2 2 1 2 -1. - <_> - 2 3 1 1 2. - 0 - -1.1435869964770973e-004 - 0.0674262791872025 - -0.0983930975198746 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 14 0 4 1 2. - 1 - -0.0207094196230173 - 0.2010686993598938 - -0.0260807499289513 - <_> - - <_> - - - - <_> - 0 10 1 2 -1. - <_> - 0 11 1 1 2. - 0 - -1.6621459508314729e-003 - -0.2237641066312790 - 0.0260494295507669 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - 1.9625460263341665e-003 - -0.0430153384804726 - 0.1208487972617149 - <_> - - <_> - - - - <_> - 2 1 3 9 -1. - <_> - 3 1 1 9 3. - 0 - -0.0479951314628124 - -0.5940802097320557 - 9.8937414586544037e-003 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - -8.1422913353890181e-005 - 0.0632673725485802 - -0.0467902906239033 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - -3.5077799111604691e-003 - 0.2096547931432724 - -0.0258604791015387 - <_> - - <_> - - - - <_> - 7 10 6 1 -1. - <_> - 9 10 2 1 3. - 0 - 6.1466880142688751e-003 - 0.0213899202644825 - -0.1576749980449677 - <_> - - <_> - - - - <_> - 0 8 4 4 -1. - <_> - 0 9 4 2 2. - 0 - -0.0224751308560371 - -0.3864986896514893 - 0.0135000301524997 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 8 0 2 4 2. - 0 - -0.0128545099869370 - -0.3104354143142700 - 0.0168517995625734 - <_> - - <_> - - - - <_> - 2 2 6 3 -1. - <_> - 4 2 2 3 3. - 0 - -0.0329444594681263 - -0.2413513064384460 - 0.0212185792624950 - <_> - - <_> - - - - <_> - 8 3 9 1 -1. - <_> - 11 3 3 1 3. - 0 - -4.2211711406707764e-003 - 0.0549830906093121 - -0.0362559109926224 - <_> - - <_> - - - - <_> - 1 3 9 1 -1. - <_> - 4 3 3 1 3. - 0 - -2.5159320794045925e-003 - 0.0672404095530510 - -0.1056317016482353 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 14 0 4 1 2. - 1 - 0.0125369299203157 - -0.0312975607812405 - 0.0446358397603035 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 0 1 4 2. - 1 - -0.0125440703704953 - 0.2484444975852966 - -0.0305495392531157 - <_> - - <_> - - - - <_> - 11 4 4 5 -1. - <_> - 12 4 2 5 2. - 0 - -0.0466093197464943 - -0.4119884967803955 - 7.2858459316194057e-003 - <_> - - <_> - - - - <_> - 3 4 4 5 -1. - <_> - 4 4 2 5 2. - 0 - -0.0132949203252792 - 0.1613669991493225 - -0.0405621491372585 - <_> - - <_> - - - - <_> - 13 6 3 2 -1. - <_> - 14 6 1 2 3. - 0 - -2.8895901050418615e-003 - 0.0692208483815193 - -0.0349487699568272 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 9.2754911747761071e-005 - -0.0627996027469635 - 0.0902306735515594 - <_> - - <_> - - - - <_> - 10 6 6 3 -1. - <_> - 12 7 2 1 9. - 0 - 0.1296412944793701 - -8.1927813589572906e-003 - 0.3886387944221497 - <_> - - <_> - - - - <_> - 0 1 6 10 -1. - <_> - 2 1 2 10 3. - 0 - -0.0289361402392387 - 0.0840752571821213 - -0.0677407830953598 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 9 1 3 2. - 0 - -1.4308850513771176e-003 - -0.0548570305109024 - 0.0292194895446301 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 1 9 1 3 2. - 0 - 2.3652089294046164e-003 - -0.0480296798050404 - 0.1370418071746826 - <_> - - <_> - - - - <_> - 15 8 3 4 -1. - <_> - 16 8 1 4 3. - 0 - 1.5420720446854830e-003 - -0.0494991503655910 - 0.0658477395772934 - <_> - - <_> - - - - <_> - 0 9 1 2 -1. - <_> - 0 10 1 1 2. - 0 - -1.8509089713916183e-003 - -0.2354457974433899 - 0.0255073904991150 - <_> - - <_> - - - - <_> - 15 8 3 4 -1. - <_> - 16 8 1 4 3. - 0 - -6.0786440735682845e-004 - 0.0409776605665684 - -0.0308325197547674 - <_> - - <_> - - - - <_> - 0 8 3 4 -1. - <_> - 1 8 1 4 3. - 0 - -4.1273389942944050e-003 - 0.1139305010437965 - -0.0524647496640682 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 8 9 2 2 3. - 0 - -0.0211441405117512 - -0.2858177125453949 - 0.0190208908170462 - <_> - - <_> - - - - <_> - 7 6 4 2 -1. - <_> - 7 6 4 1 2. - 1 - -0.0686234086751938 - 0.5240252017974854 - -0.0133707895874977 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 15 8 2 1 2. - 1 - -0.0232736095786095 - -0.1959027945995331 - 0.0153907798230648 - <_> - - <_> - - - - <_> - 5 11 6 1 -1. - <_> - 7 11 2 1 3. - 0 - 0.0117295598611236 - 0.0128045696765184 - -0.3997536897659302 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.9197949441149831e-003 - -0.2599411010742188 - 0.0284589901566505 - <_> - - <_> - - - - <_> - 7 11 3 1 -1. - <_> - 8 11 1 1 3. - 0 - 1.1447600554674864e-003 - -0.0450720004737377 - 0.1386038959026337 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - -1.0227440361632034e-004 - 0.0555926002562046 - -0.0491130091249943 - <_> - - <_> - - - - <_> - 7 11 3 1 -1. - <_> - 8 11 1 1 3. - 0 - -1.0123359970748425e-004 - 0.0945054665207863 - -0.0882372930645943 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - 1.0893570288317278e-004 - -0.0457418188452721 - 0.0586585812270641 - <_> - - <_> - - - - <_> - 7 11 3 1 -1. - <_> - 8 11 1 1 3. - 0 - 7.4765441240742803e-005 - -0.0804187580943108 - 0.1051798984408379 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 15 8 2 1 2. - 1 - -1.0043049696832895e-003 - 0.0372912287712097 - -0.0957288667559624 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 1 2 2. - 1 - -0.0136052202433348 - -0.1795760989189148 - 0.0329711399972439 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 2.8680460527539253e-003 - 0.0121853100135922 - -0.2621279060840607 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - -1.2858140689786524e-004 - 0.0860119834542274 - -0.0690807029604912 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 1.2469210196286440e-003 - 0.0222700405865908 - -0.1104416996240616 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 8.2425161963328719e-004 - -0.0548337288200855 - 0.1249864995479584 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 7.8583601862192154e-005 - -0.0545481108129025 - 0.0661989673972130 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -8.3637831266969442e-004 - 0.1339506953954697 - -0.0571260303258896 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 1.0339979780837893e-004 - -0.0373748987913132 - 0.0555646084249020 - <_> - - <_> - - - - <_> - 5 1 8 11 -1. - <_> - 9 1 4 11 2. - 0 - 0.1128436028957367 - -0.0478577986359596 - 0.1491996049880981 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 10 1 6 2 2. - 0 - -0.0219915006309748 - 0.0740989968180656 - -0.0156541392207146 - <_> - - <_> - - - - <_> - 0 5 10 4 -1. - <_> - 0 5 5 2 2. - <_> - 5 7 5 2 2. - 0 - -5.8295959606766701e-003 - -0.1222886964678764 - 0.0463617295026779 - <_> - - <_> - - - - <_> - 4 3 10 9 -1. - <_> - 4 6 10 3 3. - 0 - -0.4761604964733124 - 0.2989759147167206 - -0.0194761995226145 - <_> - - <_> - - - - <_> - 0 0 2 9 -1. - <_> - 0 3 2 3 3. - 0 - -9.6184182912111282e-003 - 0.0656328722834587 - -0.0977645292878151 - <_> - - <_> - - - - <_> - 8 0 4 10 -1. - <_> - 8 0 2 10 2. - 0 - -9.8459348082542419e-003 - 0.0299536604434252 - -0.0417832285165787 - <_> - - <_> - - - - <_> - 6 0 4 10 -1. - <_> - 8 0 2 10 2. - 0 - -0.0344930589199066 - 0.1481402963399887 - -0.0522958189249039 - <_> - - <_> - - - - <_> - 9 1 6 3 -1. - <_> - 11 1 2 3 3. - 0 - -0.0271706990897655 - -0.1875742971897125 - 0.0123584102839231 - <_> - - <_> - - - - <_> - 3 1 6 3 -1. - <_> - 5 1 2 3 3. - 0 - 0.0327253006398678 - 0.0133652295917273 - -0.4113903939723969 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 9 4 1 1 2. - 0 - 8.4677049017045647e-005 - -0.0365086309611797 - 0.0448634102940559 - <_> - - <_> - - - - <_> - 6 0 3 1 -1. - <_> - 7 1 1 1 3. - 1 - 4.8961658030748367e-003 - -0.0499065108597279 - 0.1198576986789703 - <_> - - <_> - - - - <_> - 10 0 6 4 -1. - <_> - 10 1 6 2 2. - 0 - -0.0981739610433578 - -0.4047581851482391 - 2.2186879068613052e-003 - <_> - - <_> - - - - <_> - 2 0 6 4 -1. - <_> - 2 1 6 2 2. - 0 - -0.0291906204074621 - 0.2012470960617065 - -0.0345567613840103 - <_> - - <_> - - - - <_> - 13 2 4 1 -1. - <_> - 14 3 2 1 2. - 1 - 1.6377819702029228e-003 - 0.0488565489649773 - -0.1152480021119118 - <_> - - <_> - - - - <_> - 2 3 2 1 -1. - <_> - 3 3 1 1 2. - 0 - -1.1581239959923550e-004 - 0.0576246008276939 - -0.0952451899647713 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 9 4 1 1 2. - 0 - -1.2790900655090809e-004 - 0.0644371435046196 - -0.0611837916076183 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 1 1 2. - <_> - 8 4 1 1 2. - 0 - 1.8525200430303812e-003 - -0.0391179211437702 - 0.1579277962446213 - <_> - - <_> - - - - <_> - 14 3 3 1 -1. - <_> - 15 4 1 1 3. - 1 - -0.0163713600486517 - -0.2718529999256134 - 0.0163074694573879 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 9.7776018083095551e-004 - -0.0520382709801197 - 0.1138171032071114 - <_> - - <_> - - - - <_> - 14 3 3 1 -1. - <_> - 15 4 1 1 3. - 1 - 0.0154157197102904 - 0.0139771401882172 - -0.3419792950153351 - <_> - - <_> - - - - <_> - 7 6 2 2 -1. - <_> - 7 6 1 1 2. - <_> - 8 7 1 1 2. - 0 - 1.4122789725661278e-003 - -0.0494842603802681 - 0.1159690991044045 - <_> - - <_> - - - - <_> - 6 5 8 4 -1. - <_> - 10 5 4 2 2. - <_> - 6 7 4 2 2. - 0 - 0.1091736033558846 - 4.8475428484380245e-003 - -0.5397536158561707 - <_> - - <_> - - - - <_> - 4 5 8 4 -1. - <_> - 4 5 4 2 2. - <_> - 8 7 4 2 2. - 0 - 0.0605213195085526 - 0.0210772007703781 - -0.2800574004650116 - <_> - - <_> - - - - <_> - 10 3 6 6 -1. - <_> - 12 5 2 2 9. - 0 - 0.2519331872463226 - -7.9183783382177353e-003 - 0.4091844856739044 - <_> - - <_> - - - - <_> - 2 3 6 6 -1. - <_> - 4 5 2 2 9. - 0 - 0.2725316882133484 - -0.0129834404215217 - 0.4201065897941589 - <_> - - <_> - - - - <_> - 15 3 3 4 -1. - <_> - 15 4 3 2 2. - 0 - 0.0372460186481476 - 8.6529608815908432e-003 - -0.5930305123329163 - <_> - - <_> - - - - <_> - 0 3 3 4 -1. - <_> - 0 4 3 2 2. - 0 - -0.0215892493724823 - -0.3137733042240143 - 0.0169776007533073 - <_> - - <_> - - - - <_> - 14 3 3 1 -1. - <_> - 15 4 1 1 3. - 1 - -0.0269348807632923 - -0.3696512877941132 - 2.5225139688700438e-003 - <_> - - <_> - - - - <_> - 4 3 1 3 -1. - <_> - 3 4 1 1 3. - 1 - 0.0102303503081203 - 0.0202190801501274 - -0.2822374105453491 - <_> - - <_> - - - - <_> - 9 4 1 4 -1. - <_> - 8 5 1 2 2. - 1 - -2.4981389287859201e-003 - 0.0288020092993975 - -0.0413321591913700 - <_> - - <_> - - - - <_> - 5 4 6 8 -1. - <_> - 7 4 2 8 3. - 0 - 0.0619334913790226 - -0.0214369799941778 - 0.2810235023498535 - <_> - - <_> - - - - <_> - 4 5 14 7 -1. - <_> - 4 5 7 7 2. - 0 - -0.1554124951362610 - 0.0941823497414589 - -0.0535030812025070 - <_> - - <_> - - - - <_> - 4 4 10 4 -1. - <_> - 9 4 5 4 2. - 0 - 0.1432832032442093 - 0.0189585909247398 - -0.3232985138893127 - <_> - - <_> - - - - <_> - 12 1 1 2 -1. - <_> - 12 2 1 1 2. - 0 - 1.0829309467226267e-003 - -0.0399809516966343 - 0.0849505290389061 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 8 11 8 1 2. - 0 - 0.0426235496997833 - 0.0257142093032599 - -0.2026225030422211 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - -9.4770672149024904e-005 - 0.0724026933312416 - -0.0726250112056732 - <_> - - <_> - - - - <_> - 7 10 4 2 -1. - <_> - 8 10 2 2 2. - 0 - -4.9279178492724895e-003 - -0.2133928984403610 - 0.0280356202274561 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 2.2998640779405832e-003 - 0.0176189504563808 - -0.1747786998748779 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.8047069897875190e-003 - 0.1526252031326294 - -0.0332683213055134 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 8 8 2 2 2. - 0 - 6.3559878617525101e-003 - 0.0245369896292686 - -0.2502197921276093 - <_> - - <_> - - - - <_> - 0 9 12 3 -1. - <_> - 3 9 6 3 2. - 0 - 0.0179844796657562 - -0.0447909198701382 - 0.1159334033727646 - <_> - - <_> - - - - <_> - 6 3 6 9 -1. - <_> - 6 3 3 9 2. - 0 - -0.1337286978960037 - 0.3045699894428253 - -0.0196011401712894 - <_> - - <_> - - - - <_> - 8 0 8 1 -1. - <_> - 10 2 4 1 2. - 1 - -0.0765669867396355 - 0.3262727856636047 - -0.0164111293852329 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 5.7867518626153469e-004 - -0.0538454391062260 - 0.0802813470363617 - <_> - - <_> - - - - <_> - 0 4 1 4 -1. - <_> - 0 5 1 2 2. - 0 - -1.0546330304350704e-004 - 0.0571209788322449 - -0.0863175317645073 - <_> - - <_> - - - - <_> - 9 5 1 4 -1. - <_> - 8 6 1 2 2. - 1 - 6.7152240080758929e-004 - -0.0304049700498581 - 0.0309431795030832 - <_> - - <_> - - - - <_> - 2 6 12 3 -1. - <_> - 2 7 12 1 3. - 0 - -0.0186906605958939 - 0.1081271022558212 - -0.0552013516426086 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - -3.6627850495278835e-003 - 0.1079265028238297 - -0.0355842001736164 - <_> - - <_> - - - - <_> - 5 6 1 3 -1. - <_> - 5 7 1 1 3. - 0 - 1.9153920002281666e-003 - -0.0556528791785240 - 0.1089192032814026 - <_> - - <_> - - - - <_> - 0 0 18 2 -1. - <_> - 6 0 6 2 3. - 0 - -0.0582819618284702 - 0.0922212898731232 - -0.0596722811460495 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - 0.0208806693553925 - -0.0448416285216808 - 0.1499453037977219 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 11 0 2 1 3. - 0 - -0.0128724500536919 - -0.1829722970724106 - 0.0121314199641347 - <_> - - <_> - - - - <_> - 0 3 1 3 -1. - <_> - 0 4 1 1 3. - 0 - -1.5816009545233101e-004 - 0.0676255375146866 - -0.0749342963099480 - <_> - - <_> - - - - <_> - 13 1 4 4 -1. - <_> - 15 1 2 2 2. - <_> - 13 3 2 2 2. - 0 - -3.6091450601816177e-003 - 0.0628881230950356 - -0.0611806809902191 - <_> - - <_> - - - - <_> - 6 0 3 2 -1. - <_> - 6 0 3 1 2. - 1 - 0.0152570502832532 - 0.0403869599103928 - -0.1302959024906158 - <_> - - <_> - - - - <_> - 13 1 4 4 -1. - <_> - 15 1 2 2 2. - <_> - 13 3 2 2 2. - 0 - 7.2127310559153557e-003 - -0.0245830193161964 - 0.0964493229985237 - <_> - - <_> - - - - <_> - 1 1 4 4 -1. - <_> - 1 1 2 2 2. - <_> - 3 3 2 2 2. - 0 - -6.6937888041138649e-003 - 0.1209539026021957 - -0.0568843781948090 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 11 0 2 1 3. - 0 - -0.0296970698982477 - -0.4496015906333923 - 2.3813890293240547e-003 - <_> - - <_> - - - - <_> - 0 8 2 2 -1. - <_> - 0 8 1 1 2. - <_> - 1 9 1 1 2. - 0 - 1.4415530022233725e-003 - 0.0377333015203476 - -0.1273778975009918 - <_> - - <_> - - - - <_> - 12 6 5 6 -1. - <_> - 12 9 5 3 2. - 0 - 1.4221980236470699e-003 - -0.2117042988538742 - 0.0169409606605768 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - -1.5120590105652809e-003 - 0.1228592023253441 - -0.0418549291789532 - <_> - - <_> - - - - <_> - 13 2 3 2 -1. - <_> - 14 3 1 2 3. - 1 - 0.0203042104840279 - 0.0135547798126936 - -0.1957805007696152 - <_> - - <_> - - - - <_> - 5 2 2 3 -1. - <_> - 4 3 2 1 3. - 1 - -0.0200622100383043 - -0.2179318070411682 - 0.0213638897985220 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 9 2 1 2. - 0 - -8.2440199330449104e-003 - 0.2983539998531342 - -0.0160301402211189 - <_> - - <_> - - - - <_> - 4 6 10 6 -1. - <_> - 4 9 10 3 2. - 0 - -0.1238135993480682 - -0.7218785285949707 - 7.2500761598348618e-003 - <_> - - <_> - - - - <_> - 0 2 18 4 -1. - <_> - 9 2 9 2 2. - <_> - 0 4 9 2 2. - 0 - 0.1466318964958191 - 0.0109294103458524 - -0.3825891911983490 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 4 1 1 2 3. - 1 - -0.0102778002619743 - 0.1152886003255844 - -0.0406586490571499 - <_> - - <_> - - - - <_> - 11 0 6 1 -1. - <_> - 13 0 2 1 3. - 0 - 3.3496099058538675e-003 - -0.0308651290833950 - 0.0637148097157478 - <_> - - <_> - - - - <_> - 1 0 6 1 -1. - <_> - 3 0 2 1 3. - 0 - -0.0147897899150848 - -0.2689478099346161 - 0.0221472494304180 - <_> - - <_> - - - - <_> - 9 0 6 1 -1. - <_> - 11 0 2 1 3. - 0 - 0.0526399016380310 - -1.1888500303030014e-003 - 0.8430677056312561 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 5 0 2 1 3. - 0 - -0.0226879604160786 - -0.5010350942611694 - 0.0106030004099011 - <_> - - <_> - - - - <_> - 16 0 2 3 -1. - <_> - 16 1 2 1 3. - 0 - 0.0133579401299357 - 0.0133582400158048 - -0.3440786898136139 - <_> - - <_> - - - - <_> - 4 1 6 3 -1. - <_> - 4 2 6 1 3. - 0 - 0.0403476804494858 - -0.0225418396294117 - 0.2142466008663178 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 9 0 2 1 2. - <_> - 7 1 2 1 2. - 0 - 0.0203990507870913 - 5.7352068834006786e-003 - -0.8154234290122986 - <_> - - <_> - - - - <_> - 8 0 4 1 -1. - <_> - 9 1 2 1 2. - 1 - -0.0207944102585316 - 0.2813980877399445 - -0.0173508506268263 - <_> - - <_> - - - - <_> - 12 0 4 5 -1. - <_> - 13 0 2 5 2. - 0 - -0.0229910705238581 - -0.2311549931764603 - 0.0100621599704027 - -1.4390770196914673 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0325295589864254 - 0.3804416060447693 - -0.1522749066352844 - <_> - - <_> - - - - <_> - 13 6 3 3 -1. - <_> - 14 7 1 3 3. - 1 - -9.6866730600595474e-003 - 0.1711030006408691 - -0.0644353926181793 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - -0.0428187213838100 - 0.3590965867042542 - -0.0822441726922989 - <_> - - <_> - - - - <_> - 6 0 12 3 -1. - <_> - 9 0 6 3 2. - 0 - 0.0473564714193344 - -0.0450574010610580 - 0.1172553971409798 - <_> - - <_> - - - - <_> - 0 0 4 8 -1. - <_> - 2 0 2 8 2. - 0 - -0.0338832512497902 - 0.1565635055303574 - -0.1966083049774170 - <_> - - <_> - - - - <_> - 11 6 4 2 -1. - <_> - 12 6 2 2 2. - 0 - 0.0165065191686153 - -0.0378297194838524 - 0.4353322982788086 - <_> - - <_> - - - - <_> - 3 6 4 2 -1. - <_> - 4 6 2 2 2. - 0 - 0.0140330102294683 - -0.0843034610152245 - 0.3907249867916107 - <_> - - <_> - - - - <_> - 6 4 6 3 -1. - <_> - 6 5 6 1 3. - 0 - -0.0436745695769787 - 0.3578970134258270 - -0.0566181689500809 - <_> - - <_> - - - - <_> - 6 0 3 4 -1. - <_> - 6 0 3 2 2. - 1 - 0.0393909700214863 - 0.0745265930891037 - -0.2872151136398315 - <_> - - <_> - - - - <_> - 5 4 12 8 -1. - <_> - 5 8 12 4 2. - 0 - 0.2796753942966461 - -0.1792768985033035 - 0.0957169830799103 - <_> - - <_> - - - - <_> - 0 9 12 2 -1. - <_> - 3 9 6 2 2. - 0 - -0.0273093804717064 - 0.2064234018325806 - -0.0969977900385857 - <_> - - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 12 0 6 1 2. - <_> - 6 1 6 1 2. - 0 - 8.1798024475574493e-003 - -0.0432301610708237 - 0.1015388965606690 - <_> - - <_> - - - - <_> - 7 7 1 3 -1. - <_> - 7 8 1 1 3. - 0 - 4.8562590964138508e-003 - -0.0662354379892349 - 0.2237173020839691 - <_> - - <_> - - - - <_> - 14 8 2 2 -1. - <_> - 14 8 2 1 2. - 1 - -0.0211110506206751 - -0.2359738051891327 - 0.0209807306528091 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 2 2. - 1 - 2.9689490329474211e-003 - 0.0553195513784885 - -0.3142198920249939 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - -1.4177729608491063e-003 - -0.0993169024586678 - 0.0409304201602936 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 1.8895609537139535e-003 - 0.0477366708219051 - -0.3356002867221832 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 0 2 4 3. - 0 - -0.0325478799641132 - -0.4610036909580231 - 0.0220666807144880 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 7 0 2 4 3. - 0 - -0.0320476293563843 - -0.3709990978240967 - 0.0357711687684059 - <_> - - <_> - - - - <_> - 3 0 12 3 -1. - <_> - 7 1 4 1 9. - 0 - -0.1090650036931038 - 0.2738077938556671 - -0.0512458607554436 - <_> - - <_> - - - - <_> - 3 0 12 4 -1. - <_> - 3 1 12 2 2. - 0 - 0.0450857616961002 - -0.0803769379854202 - 0.2019039988517761 - <_> - - <_> - - - - <_> - 16 2 2 1 -1. - <_> - 16 2 1 1 2. - 0 - 9.6619682153686881e-005 - -0.0386441089212894 - 0.0450123585760593 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 1 1 1 4 2. - 0 - -1.2527930084615946e-004 - 0.0608216188848019 - -0.2344056963920593 - <_> - - <_> - - - - <_> - 10 0 4 3 -1. - <_> - 11 0 2 3 2. - 0 - -7.6730418950319290e-003 - -0.2569715082645416 - 0.0301364492624998 - <_> - - <_> - - - - <_> - 6 6 1 3 -1. - <_> - 5 7 1 1 3. - 1 - -2.4111960083246231e-003 - 0.1345535963773727 - -0.0941235870122910 - <_> - - <_> - - - - <_> - 12 6 4 1 -1. - <_> - 13 6 2 1 2. - 0 - -3.5480279475450516e-003 - 0.1636862009763718 - -0.0657358989119530 - <_> - - <_> - - - - <_> - 4 6 2 1 -1. - <_> - 5 6 1 1 2. - 0 - -7.4420678429305553e-003 - 0.4358369112014771 - -0.0340858511626720 - <_> - - <_> - - - - <_> - 10 0 4 3 -1. - <_> - 11 0 2 3 2. - 0 - 6.9531807675957680e-003 - 0.0340822115540504 - -0.1555286049842835 - <_> - - <_> - - - - <_> - 4 0 4 3 -1. - <_> - 5 0 2 3 2. - 0 - -0.0115668103098869 - -0.3722215890884399 - 0.0319689214229584 - <_> - - <_> - - - - <_> - 15 6 3 2 -1. - <_> - 16 6 1 2 3. - 0 - 7.3271869041491300e-005 - -0.0478666089475155 - 0.0393419302999973 - <_> - - <_> - - - - <_> - 0 6 3 2 -1. - <_> - 1 6 1 2 3. - 0 - -4.7459648922085762e-003 - 0.1868629008531570 - -0.0622164495289326 - <_> - - <_> - - - - <_> - 13 9 5 3 -1. - <_> - 13 10 5 1 3. - 0 - -0.0247545000165701 - -0.5059617757797241 - 0.0132283903658390 - <_> - - <_> - - - - <_> - 0 9 6 3 -1. - <_> - 0 10 6 1 3. - 0 - 0.0115494802594185 - 0.0414995588362217 - -0.2630571126937866 - <_> - - <_> - - - - <_> - 9 3 1 6 -1. - <_> - 7 5 1 2 3. - 1 - 7.6468382030725479e-003 - 0.0140651902183890 - -0.0360976383090019 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - 0.0293713696300983 - -0.0568474791944027 - 0.1884523034095764 - <_> - - <_> - - - - <_> - 8 2 2 3 -1. - <_> - 8 3 2 1 3. - 0 - -6.5610869787633419e-003 - 0.2440913021564484 - -0.0740771293640137 - <_> - - <_> - - - - <_> - 6 1 2 3 -1. - <_> - 5 2 2 1 3. - 1 - -0.0173624996095896 - -0.2695508003234863 - 0.0458060503005981 - <_> - - <_> - - - - <_> - 15 3 3 4 -1. - <_> - 15 5 3 2 2. - 0 - -0.0643286630511284 - -0.6735954284667969 - 8.9323017746210098e-003 - <_> - - <_> - - - - <_> - 0 3 3 4 -1. - <_> - 0 5 3 2 2. - 0 - -0.0258605293929577 - -0.2840223014354706 - 0.0376985482871532 - <_> - - <_> - - - - <_> - 9 3 1 6 -1. - <_> - 7 5 1 2 3. - 1 - -0.0397039614617825 - -0.0484800599515438 - 0.0109694898128510 - <_> - - <_> - - - - <_> - 9 3 6 1 -1. - <_> - 11 5 2 1 3. - 1 - -0.0331417508423328 - 0.1478970050811768 - -0.0825527012348175 - <_> - - <_> - - - - <_> - 3 1 15 3 -1. - <_> - 8 1 5 3 3. - 0 - -0.0390321090817451 - 0.0932827964425087 - -0.0561488717794418 - <_> - - <_> - - - - <_> - 2 1 6 3 -1. - <_> - 4 1 2 3 3. - 0 - -1.1510000331327319e-004 - 0.0768302530050278 - -0.1459158957004547 - <_> - - <_> - - - - <_> - 16 1 2 3 -1. - <_> - 16 1 1 3 2. - 1 - 0.0287740807980299 - 0.0142454104498029 - -0.4292789101600647 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 2 1 3 1 2. - 1 - -0.0179673805832863 - -0.2855528891086578 - 0.0350161194801331 - <_> - - <_> - - - - <_> - 14 0 3 2 -1. - <_> - 15 1 1 2 3. - 1 - -0.0141839301213622 - -0.2055743932723999 - 0.0241910293698311 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 3 1 2 1 3. - 1 - 9.5999464392662048e-003 - 0.0388488695025444 - -0.2532997131347656 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 2.8658700175583363e-003 - -0.0388979613780975 - 0.2164103984832764 - <_> - - <_> - - - - <_> - 5 5 3 1 -1. - <_> - 6 5 1 1 3. - 0 - 9.8942127078771591e-003 - -0.0220404900610447 - 0.4119409024715424 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - 5.3157331421971321e-003 - 0.0340690501034260 - -0.1933677941560745 - <_> - - <_> - - - - <_> - 6 10 6 2 -1. - <_> - 8 10 2 2 3. - 0 - 0.0116676697507501 - 0.0287045594304800 - -0.3233655989170075 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - 7.9165054485201836e-003 - -0.0217102095484734 - 0.2727940082550049 - <_> - - <_> - - - - <_> - 8 8 2 3 -1. - <_> - 8 9 2 1 3. - 0 - 0.0148961795493960 - -0.0287054106593132 - 0.2999373972415924 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 11 0 2 1 2. - 1 - -0.0460519716143608 - -0.7171403765678406 - 1.6391549725085497e-003 - <_> - - <_> - - - - <_> - 0 5 2 5 -1. - <_> - 1 5 1 5 2. - 0 - 0.0125253498554230 - -0.0241711195558310 - 0.3461709916591644 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - -7.3274560272693634e-003 - -0.1279774010181427 - 0.0412659682333469 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 9 9 1 1 2. - 1 - -1.0679940169211477e-004 - 0.0585944503545761 - -0.1546311974525452 - <_> - - <_> - - - - <_> - 8 9 4 3 -1. - <_> - 9 9 2 3 2. - 0 - 0.0116606000810862 - 0.0116934701800346 - -0.4916518032550812 - <_> - - <_> - - - - <_> - 3 6 12 5 -1. - <_> - 6 6 6 5 2. - 0 - -0.1617010980844498 - -0.3966900110244751 - 0.0224929098039865 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 11 0 2 1 2. - 1 - -0.0213329195976257 - 0.1032774969935417 - -7.7664600685238838e-003 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 2 2. - 1 - 0.0223976708948612 - -0.0315599814057350 - 0.2693521976470947 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - -9.1192683612462133e-005 - 0.0773374736309052 - -0.0757004171609879 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 6 3 4 1 3. - 1 - -0.0242610201239586 - 0.1071325019001961 - -0.0823714807629585 - <_> - - <_> - - - - <_> - 9 5 3 2 -1. - <_> - 10 5 1 2 3. - 0 - 8.2271397113800049e-003 - -0.0297865103930235 - 0.1634255051612854 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 7 5 1 2 3. - 0 - 0.0140933301299810 - -0.0284043699502945 - 0.3529922068119049 - <_> - - <_> - - - - <_> - 0 9 18 3 -1. - <_> - 6 9 6 3 3. - 0 - -0.1091820970177651 - 0.1702737957239151 - -0.0622828491032124 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0327302105724812 - -0.1778834015130997 - 0.0529623590409756 - <_> - - <_> - - - - <_> - 12 5 3 3 -1. - <_> - 13 6 1 1 9. - 0 - -0.0120677901431918 - 0.1120619028806686 - -0.0612555406987667 - <_> - - <_> - - - - <_> - 1 9 15 3 -1. - <_> - 6 10 5 1 9. - 0 - 0.1043680980801582 - -0.0325219817459583 - 0.2892068922519684 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 5.5702589452266693e-003 - 0.0327054597437382 - -0.1888339072465897 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 6 1 1 9. - 0 - -7.4505289085209370e-003 - 0.1110955029726028 - -0.0760653465986252 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 0.0185071993619204 - 5.1278448663651943e-003 - -0.3245492875576019 - <_> - - <_> - - - - <_> - 5 4 6 1 -1. - <_> - 7 4 2 1 3. - 0 - -1.3000619946978986e-004 - 0.0659063681960106 - -0.1160850971937180 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 0 - -1.0110549919772893e-004 - 0.0668744668364525 - -0.0611872784793377 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - -8.2355996710248291e-005 - 0.0561983399093151 - -0.1323087960481644 - <_> - - <_> - - - - <_> - 10 3 1 3 -1. - <_> - 10 4 1 1 3. - 0 - 6.7807449959218502e-003 - -0.0328019596636295 - 0.2269562929868698 - <_> - - <_> - - - - <_> - 0 4 6 6 -1. - <_> - 0 6 6 2 3. - 0 - -0.1028971970081329 - -0.3203893899917603 - 0.0256160795688629 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 1.0858030145755038e-004 - -0.0239709895104170 - 0.0361435487866402 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 3.4920300822705030e-003 - 0.0405214987695217 - -0.2074369043111801 - <_> - - <_> - - - - <_> - 15 7 2 3 -1. - <_> - 14 8 2 1 3. - 1 - 8.4493216127157211e-003 - 0.0273433793336153 - -0.0809736400842667 - <_> - - <_> - - - - <_> - 0 7 3 4 -1. - <_> - 1 7 1 4 3. - 0 - -5.8201588690280914e-003 - 0.1403073966503143 - -0.0530146099627018 - <_> - - <_> - - - - <_> - 13 10 2 2 -1. - <_> - 14 10 1 1 2. - <_> - 13 11 1 1 2. - 0 - -2.0276790019124746e-003 - -0.2381516993045807 - 0.0282068699598312 - <_> - - <_> - - - - <_> - 1 6 3 3 -1. - <_> - 2 7 1 1 9. - 0 - -6.2650619074702263e-003 - 0.1095068976283073 - -0.0717863366007805 - <_> - - <_> - - - - <_> - 13 8 2 2 -1. - <_> - 13 8 2 1 2. - 1 - 0.0183297805488110 - 3.2881149090826511e-003 - -0.2440374940633774 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 2 2. - 1 - -0.0140557102859020 - -0.2098830044269562 - 0.0373497307300568 - <_> - - <_> - - - - <_> - 9 5 1 3 -1. - <_> - 8 6 1 1 3. - 1 - 0.0164367500692606 - -0.0200204104185104 - 0.1758172959089279 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 6 1 1 3. - 1 - -7.6040881685912609e-003 - 0.1112065985798836 - -0.0663779824972153 - <_> - - <_> - - - - <_> - 11 9 2 2 -1. - <_> - 12 9 1 1 2. - <_> - 11 10 1 1 2. - 0 - -1.7437810311093926e-003 - -0.1176389977335930 - 0.0209200792014599 - <_> - - <_> - - - - <_> - 5 9 2 2 -1. - <_> - 5 9 1 1 2. - <_> - 6 10 1 1 2. - 0 - 2.0605439785867929e-003 - 0.0304929707199335 - -0.2332395017147064 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 9 8 2 1 3. - 0 - -4.7545689158141613e-003 - 0.1585076004266739 - -0.0490322895348072 - <_> - - <_> - - - - <_> - 0 5 12 4 -1. - <_> - 0 5 6 2 2. - <_> - 6 7 6 2 2. - 0 - 0.0103623103350401 - -0.1072522029280663 - 0.0729451104998589 - <_> - - <_> - - - - <_> - 11 4 3 4 -1. - <_> - 12 5 1 4 3. - 1 - 0.0195815693587065 - -0.0301783401519060 - 0.1278894990682602 - <_> - - <_> - - - - <_> - 6 3 5 3 -1. - <_> - 5 4 5 1 3. - 1 - -0.0373241081833839 - 0.2500756978988648 - -0.0345487110316753 - <_> - - <_> - - - - <_> - 13 4 3 1 -1. - <_> - 14 5 1 1 3. - 1 - -0.0221151299774647 - -0.3568401038646698 - 0.0142953703179955 - <_> - - <_> - - - - <_> - 5 4 5 3 -1. - <_> - 4 5 5 1 3. - 1 - -0.0173370204865932 - 0.1519189029932022 - -0.0537409000098705 - <_> - - <_> - - - - <_> - 10 8 4 4 -1. - <_> - 11 8 2 4 2. - 0 - -0.0113691603764892 - -0.1540627032518387 - 0.0147855496034026 - <_> - - <_> - - - - <_> - 4 8 4 4 -1. - <_> - 5 8 2 4 2. - 0 - -0.0147615503519773 - -0.3767249882221222 - 0.0230180397629738 - <_> - - <_> - - - - <_> - 13 7 3 2 -1. - <_> - 14 8 1 2 3. - 1 - -0.0117666097357869 - 0.1472276002168655 - -0.0351644307374954 - <_> - - <_> - - - - <_> - 1 6 12 4 -1. - <_> - 1 6 6 2 2. - <_> - 7 8 6 2 2. - 0 - -5.1778471097350121e-003 - -0.1588086038827896 - 0.0552030093967915 - <_> - - <_> - - - - <_> - 8 5 10 6 -1. - <_> - 13 5 5 3 2. - <_> - 8 8 5 3 2. - 0 - 0.1811628043651581 - 5.9258830733597279e-003 - -0.3407937884330750 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 8 2 1 2. - 0 - -2.8401340823620558e-003 - -0.2519057095050812 - 0.0297407601028681 - <_> - - <_> - - - - <_> - 9 0 8 2 -1. - <_> - 11 0 4 2 2. - 0 - -0.0564627498388290 - -0.4231503009796143 - 9.2743232380598783e-004 - <_> - - <_> - - - - <_> - 1 0 8 2 -1. - <_> - 3 0 4 2 2. - 0 - -3.3624221105128527e-003 - 0.0656666979193687 - -0.1082675978541374 - <_> - - <_> - - - - <_> - 13 0 4 3 -1. - <_> - 14 0 2 3 2. - 0 - 8.3388388156890869e-003 - 0.0104883098974824 - -0.0749815925955772 - <_> - - <_> - - - - <_> - 1 0 4 3 -1. - <_> - 2 0 2 3 2. - 0 - -0.0156651306897402 - -0.3921967148780823 - 0.0185104198753834 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - -1.7687210347503424e-003 - 0.1586028933525085 - -0.0396187193691731 - <_> - - <_> - - - - <_> - 6 9 4 3 -1. - <_> - 7 9 2 3 2. - 0 - -6.9300839677453041e-003 - -0.2133703976869583 - 0.0319012701511383 - <_> - - <_> - - - - <_> - 5 8 9 1 -1. - <_> - 8 8 3 1 3. - 0 - -0.0626346170902252 - 0.4689739048480988 - -0.0108877895399928 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - 3.6505470052361488e-003 - -0.0261303205043077 - 0.2374887019395828 - <_> - - <_> - - - - <_> - 13 8 1 3 -1. - <_> - 13 9 1 1 3. - 0 - 0.0111512402072549 - 5.3229848854243755e-003 - -0.3213076889514923 - <_> - - <_> - - - - <_> - 1 5 3 3 -1. - <_> - 2 6 1 1 9. - 0 - -4.5365858823060989e-003 - 0.0828445479273796 - -0.0801159814000130 - <_> - - <_> - - - - <_> - 8 9 4 1 -1. - <_> - 9 9 2 1 2. - 0 - -4.3989070691168308e-003 - -0.2206248939037323 - 0.0239568892866373 - <_> - - <_> - - - - <_> - 4 8 1 3 -1. - <_> - 4 9 1 1 3. - 0 - -8.0931422417052090e-005 - 0.0831837207078934 - -0.0761050805449486 - <_> - - <_> - - - - <_> - 3 10 14 2 -1. - <_> - 10 10 7 1 2. - <_> - 3 11 7 1 2. - 0 - 0.0171800404787064 - 0.0308912396430969 - -0.2115070968866348 - <_> - - <_> - - - - <_> - 4 9 10 3 -1. - <_> - 4 10 10 1 3. - 0 - -0.0196282807737589 - 0.1830679029226303 - -0.0387071706354618 - <_> - - <_> - - - - <_> - 6 6 6 6 -1. - <_> - 6 9 6 3 2. - 0 - 0.0244442392140627 - -0.2672393918037415 - 0.0278125796467066 - <_> - - <_> - - - - <_> - 7 8 4 3 -1. - <_> - 7 9 4 1 3. - 0 - -3.6335210315883160e-003 - 0.1294199973344803 - -0.0608544088900089 - <_> - - <_> - - - - <_> - 5 0 8 6 -1. - <_> - 5 2 8 2 3. - 0 - -0.1558378934860230 - 0.2920193970203400 - -0.0220444500446320 - <_> - - <_> - - - - <_> - 5 8 8 3 -1. - <_> - 5 9 8 1 3. - 0 - 0.0126459598541260 - -0.0579568110406399 - 0.1200053021311760 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - -0.0182566605508327 - 0.1145614981651306 - -0.0668806582689285 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 12 2. - 0 - 0.7869147062301636 - -0.0195975508540869 - 0.3985547125339508 - <_> - - <_> - - - - <_> - 10 11 2 1 -1. - <_> - 10 11 1 1 2. - 0 - -2.6444930117577314e-003 - -0.2064650952816010 - 0.0242805499583483 - <_> - - <_> - - - - <_> - 6 11 2 1 -1. - <_> - 7 11 1 1 2. - 0 - -1.0909110278589651e-004 - 0.0931777134537697 - -0.0849808678030968 - <_> - - <_> - - - - <_> - 10 11 2 1 -1. - <_> - 10 11 1 1 2. - 0 - -9.1609297669492662e-005 - 0.0638853386044502 - -0.0705938562750816 - <_> - - <_> - - - - <_> - 6 11 2 1 -1. - <_> - 7 11 1 1 2. - 0 - 1.0280970309395343e-004 - -0.0837678387761116 - 0.1135537996888161 - <_> - - <_> - - - - <_> - 6 0 12 2 -1. - <_> - 6 0 6 2 2. - 0 - 0.0651712268590927 - -0.0210088696330786 - 0.1622298061847687 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - -0.0331896916031837 - 0.1484674960374832 - -0.0529593899846077 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - -0.4018939137458801 - -0.4948689043521881 - 0.0156333707273006 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 0 2 3 2. - 0 - 7.2733121924102306e-003 - 0.0277926903218031 - -0.2312889993190765 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 8 1 2 4 2. - 0 - -0.0132446596398950 - -0.2810297012329102 - 0.0265720896422863 - <_> - - <_> - - - - <_> - 8 3 2 2 -1. - <_> - 8 3 1 2 2. - 1 - -2.2069490514695644e-003 - -0.1349938064813614 - 0.0532955788075924 - <_> - - <_> - - - - <_> - 10 2 1 3 -1. - <_> - 10 3 1 1 3. - 0 - 6.3389358110725880e-003 - -0.0297105703502893 - 0.1262006014585495 - <_> - - <_> - - - - <_> - 7 2 1 3 -1. - <_> - 7 3 1 1 3. - 0 - -1.9882840570062399e-003 - 0.1408981978893280 - -0.0644808784127235 - <_> - - <_> - - - - <_> - 15 8 3 4 -1. - <_> - 15 9 3 2 2. - 0 - 0.0111096799373627 - 0.0360366813838482 - -0.2015558928251267 - <_> - - <_> - - - - <_> - 0 8 3 4 -1. - <_> - 0 9 3 2 2. - 0 - -0.0157545208930969 - -0.3857845962047577 - 0.0171017292886972 - <_> - - <_> - - - - <_> - 14 4 2 2 -1. - <_> - 15 4 1 1 2. - <_> - 14 5 1 1 2. - 0 - -2.0075829233974218e-003 - 0.1072375029325485 - -0.0328454785048962 - <_> - - <_> - - - - <_> - 2 4 2 2 -1. - <_> - 2 4 1 1 2. - <_> - 3 5 1 1 2. - 0 - -1.0277600085828453e-004 - 0.0896512120962143 - -0.0734534636139870 - <_> - - <_> - - - - <_> - 14 7 4 5 -1. - <_> - 14 7 2 5 2. - 0 - -0.0128776095807552 - 0.1186745986342430 - -0.0819637328386307 - <_> - - <_> - - - - <_> - 0 7 4 5 -1. - <_> - 2 7 2 5 2. - 0 - 0.0221341401338577 - -0.0386347100138664 - 0.2006410062313080 - <_> - - <_> - - - - <_> - 13 2 4 1 -1. - <_> - 14 3 2 1 2. - 1 - -0.0141580197960138 - -0.1355341970920563 - 0.0224557109177113 - <_> - - <_> - - - - <_> - 5 2 1 4 -1. - <_> - 4 3 1 2 2. - 1 - 3.5068059805780649e-003 - 0.0416405089199543 - -0.1710430979728699 - <_> - - <_> - - - - <_> - 13 7 1 3 -1. - <_> - 13 8 1 1 3. - 0 - 3.4302179701626301e-003 - -0.0386436693370342 - 0.1346091926097870 - <_> - - <_> - - - - <_> - 0 9 1 2 -1. - <_> - 0 10 1 1 2. - 0 - -2.5867659132927656e-003 - -0.3337867856025696 - 0.0203944407403469 - <_> - - <_> - - - - <_> - 13 7 1 3 -1. - <_> - 13 8 1 1 3. - 0 - -8.3075952716171741e-005 - 0.0431861095130444 - -0.0368947610259056 - <_> - - <_> - - - - <_> - 4 7 1 3 -1. - <_> - 4 8 1 1 3. - 0 - -2.9514790512621403e-003 - 0.1636092066764832 - -0.0409914404153824 - <_> - - <_> - - - - <_> - 13 2 5 6 -1. - <_> - 13 4 5 2 3. - 0 - -0.0669720768928528 - 0.0793442726135254 - -0.0173391196876764 - <_> - - <_> - - - - <_> - 0 2 5 6 -1. - <_> - 0 4 5 2 3. - 0 - -0.0877361670136452 - -0.2799862027168274 - 0.0232090204954147 - <_> - - <_> - - - - <_> - 11 3 2 6 -1. - <_> - 11 6 2 3 2. - 0 - 0.0289253592491150 - -0.0326436907052994 - 0.0691755712032318 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 4 1 1 2 3. - 1 - 0.0136973904445767 - -0.0344126187264919 - 0.1831139028072357 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 9 1 4 1 3. - 0 - -5.0847078673541546e-003 - 0.0938481912016869 - -0.0423147901892662 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 9 0 3 2 2. - 0 - 3.8608049508184195e-003 - -0.0879151374101639 - 0.0792635381221771 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 10 7 3 3 2. - 0 - 0.1034412011504173 - 0.0142942201346159 - -0.1782447993755341 - <_> - - <_> - - - - <_> - 5 4 3 6 -1. - <_> - 5 7 3 3 2. - 0 - 5.3322589956223965e-003 - -0.1981106996536255 - 0.0334678404033184 - <_> - - <_> - - - - <_> - 4 3 10 1 -1. - <_> - 4 3 5 1 2. - 0 - 0.0249723996967077 - -0.0299708805978298 - 0.2503108978271484 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 8.0840502050705254e-005 - -0.0812621563673019 - 0.0767677277326584 - <_> - - <_> - - - - <_> - 15 9 2 2 -1. - <_> - 16 9 1 1 2. - <_> - 15 10 1 1 2. - 0 - -9.6944597316905856e-005 - 0.0682642534375191 - -0.0470880307257175 - <_> - - <_> - - - - <_> - 1 9 2 2 -1. - <_> - 1 9 1 1 2. - <_> - 2 10 1 1 2. - 0 - 1.6829340020194650e-003 - 0.0386239998042583 - -0.1651223003864288 - <_> - - <_> - - - - <_> - 15 8 3 1 -1. - <_> - 16 9 1 1 3. - 1 - 0.0252962298691273 - 2.4244319647550583e-003 - -0.4947941899299622 - <_> - - <_> - - - - <_> - 3 8 1 3 -1. - <_> - 2 9 1 1 3. - 1 - 7.7065881341695786e-003 - -0.0400910712778568 - 0.1783736050128937 - <_> - - <_> - - - - <_> - 11 7 2 3 -1. - <_> - 10 8 2 1 3. - 1 - -0.0635519325733185 - -0.9635990858078003 - 1.2983690248802304e-003 - <_> - - <_> - - - - <_> - 7 7 3 2 -1. - <_> - 8 8 1 2 3. - 1 - 0.0120436297729611 - 0.0323274806141853 - -0.2057034969329834 - <_> - - <_> - - - - <_> - 7 5 6 4 -1. - <_> - 9 5 2 4 3. - 0 - -0.0517770014703274 - 0.1271823048591614 - -0.0257682502269745 - <_> - - <_> - - - - <_> - 4 7 4 2 -1. - <_> - 6 7 2 2 2. - 0 - -0.0522792488336563 - 0.5908886194229126 - -0.0106967100873590 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - -2.8587870765477419e-003 - -0.2156655937433243 - 0.0211606305092573 - <_> - - <_> - - - - <_> - 4 7 3 1 -1. - <_> - 5 7 1 1 3. - 0 - -2.2894500289112329e-003 - 0.1404791027307510 - -0.0456651300191879 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - 4.4600428082048893e-003 - 0.0415587387979031 - -0.1157182976603508 - <_> - - <_> - - - - <_> - 0 10 12 2 -1. - <_> - 0 10 6 1 2. - <_> - 6 11 6 1 2. - 0 - -0.0251354705542326 - 0.3258450031280518 - -0.0196546297520399 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 8 0 2 1 2. - 0 - -4.1408590041100979e-003 - -0.2493184059858322 - 0.0248906202614307 - <_> - - <_> - - - - <_> - 0 0 14 2 -1. - <_> - 0 0 7 1 2. - <_> - 7 1 7 1 2. - 0 - 0.0253230500966311 - -0.0400927811861038 - 0.1653905957937241 - <_> - - <_> - - - - <_> - 10 1 1 3 -1. - <_> - 10 2 1 1 3. - 0 - -3.0261930078268051e-003 - 0.1325923949480057 - -0.0367441810667515 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 3 10 1 1 2. - <_> - 4 11 1 1 2. - 0 - -2.0923390984535217e-003 - -0.2318208962678909 - 0.0265033300966024 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - 1.1389939754735678e-004 - -0.0864922106266022 - 0.0331539288163185 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 8 9 2 2 2. - 0 - 4.1002789512276649e-003 - 0.0285316202789545 - -0.1876665949821472 - <_> - - <_> - - - - <_> - 15 2 2 4 -1. - <_> - 16 2 1 2 2. - <_> - 15 4 1 2 2. - 0 - -1.0652170021785423e-004 - 0.0738644078373909 - -0.1064125970005989 - <_> - - <_> - - - - <_> - 0 5 3 1 -1. - <_> - 1 5 1 1 3. - 0 - -1.1209140211576596e-004 - 0.0749416872859001 - -0.0734812393784523 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -1.0086740076076239e-004 - 0.0588733293116093 - -0.0507819987833500 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 8.7035987235140055e-005 - -0.0698294714093208 - 0.0824211612343788 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 9.9490047432482243e-005 - -0.0508731789886951 - 0.0627391934394836 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - -9.9564917036332190e-005 - 0.0956918671727180 - -0.0816784426569939 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - 0.0350381284952164 - 2.4704539682716131e-003 - -0.7510399222373962 - <_> - - <_> - - - - <_> - 0 6 3 4 -1. - <_> - 0 7 3 2 2. - 0 - -0.0228413101285696 - -0.3884224891662598 - 0.0125806797295809 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -1.0086740076076239e-004 - 0.0485138483345509 - -0.0443578511476517 - <_> - - <_> - - - - <_> - 7 1 2 2 -1. - <_> - 7 1 1 1 2. - <_> - 8 2 1 1 2. - 0 - 8.7035987235140055e-005 - -0.0692753717303276 - 0.0807017683982849 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 2 1 1 3. - 1 - 8.4506031125783920e-003 - 0.0288182795047760 - -0.2352052927017212 - <_> - - <_> - - - - <_> - 9 3 6 1 -1. - <_> - 9 3 3 1 2. - 1 - 0.0338745117187500 - -0.0187100693583488 - 0.2915647923946381 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - 0.0305270701646805 - 2.8566541150212288e-003 - -0.6272156238555908 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 4.5102681033313274e-003 - -0.0217630993574858 - 0.2478137016296387 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - -0.0117119504138827 - -0.0823327228426933 - 7.1632838808000088e-003 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 5 1 1 1 3. - 1 - -0.0192936006933451 - -0.5453320145606995 - 9.4053568318486214e-003 - <_> - - <_> - - - - <_> - 6 0 8 3 -1. - <_> - 6 1 8 1 3. - 0 - -0.0276950206607580 - 0.1256987005472183 - -0.0247780196368694 - <_> - - <_> - - - - <_> - 5 0 3 1 -1. - <_> - 6 1 1 1 3. - 1 - 6.4738709479570389e-003 - -0.0404209308326244 - 0.1392498016357422 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 8.3701964467763901e-003 - 0.0213147606700659 - -0.1358024030923843 - <_> - - <_> - - - - <_> - 0 1 1 4 -1. - <_> - 0 2 1 2 2. - 0 - 9.5793809741735458e-003 - 0.0105320503935218 - -0.4682159125804901 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 8.8913729996420443e-005 - -0.0261487700045109 - 0.0671710595488548 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - -7.8428974375128746e-003 - 0.1404262930154800 - -0.0404535718262196 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 2 1 1 3. - 1 - -0.0155517496168613 - -0.2372324019670487 - 8.9765731245279312e-003 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - -0.0109406895935535 - -0.2482887059450150 - 0.0212545003741980 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - 1.3340170262381434e-003 - 0.0519655197858810 - -0.2496636062860489 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -3.9200708270072937e-003 - 0.2156686037778854 - -0.0292066391557455 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 13 1 2 2 2. - 0 - -8.4352102130651474e-003 - 0.1389434933662415 - -0.0275647994130850 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - 1.0151269816560671e-004 - -0.0747890397906303 - 0.0788527578115463 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 1 2. - <_> - 9 1 1 1 2. - 0 - 1.1394869943615049e-004 - -0.0339591689407825 - 0.0400152392685413 - <_> - - <_> - - - - <_> - 7 0 2 2 -1. - <_> - 7 0 1 1 2. - <_> - 8 1 1 1 2. - 0 - -1.0446170199429616e-004 - 0.0933676883578300 - -0.0707034692168236 - <_> - - <_> - - - - <_> - 3 3 12 6 -1. - <_> - 6 3 6 6 2. - 0 - 0.0716996192932129 - 0.0200745593756437 - -0.2840169966220856 - <_> - - <_> - - - - <_> - 5 2 6 7 -1. - <_> - 7 2 2 7 3. - 0 - 0.0761361420154572 - -0.0186745896935463 - 0.3435168862342835 - <_> - - <_> - - - - <_> - 6 1 6 3 -1. - <_> - 6 1 3 3 2. - 0 - -0.0101393703371286 - 0.0790482535958290 - -0.0762415528297424 - <_> - - <_> - - - - <_> - 5 2 4 2 -1. - <_> - 6 2 2 2 2. - 0 - -0.0117877097800374 - -0.3868721127510071 - 0.0150325195863843 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.1715809814631939e-003 - -0.1256632953882217 - 0.0427483692765236 - <_> - - <_> - - - - <_> - 1 4 2 2 -1. - <_> - 1 4 1 1 2. - <_> - 2 5 1 1 2. - 0 - -1.1624010221567005e-004 - 0.0777573063969612 - -0.0702833235263824 - <_> - - <_> - - - - <_> - 15 1 3 3 -1. - <_> - 14 2 3 1 3. - 1 - -0.0402961894869804 - 0.4078941941261292 - -0.0246845092624426 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 2 1 3 3. - 1 - -0.0201485902070999 - 0.1608587950468063 - -0.0378730483353138 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 10 4 1 3 3. - 1 - -9.9596334621310234e-003 - 0.0469715595245361 - -0.0552784688770771 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - 0.0104588298127055 - 6.4418478868901730e-003 - -0.7192186117172241 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - -8.3341188728809357e-003 - 0.0595527403056622 - -0.0164905209094286 - <_> - - <_> - - - - <_> - 0 3 2 9 -1. - <_> - 1 3 1 9 2. - 0 - 6.4220251515507698e-003 - -0.0312880389392376 - 0.1608612984418869 - <_> - - <_> - - - - <_> - 5 3 12 2 -1. - <_> - 9 3 4 2 3. - 0 - -0.1417139023542404 - -0.4852159917354584 - 4.3316078372299671e-003 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 1 2 2. - 1 - -9.2059485614299774e-003 - -0.1373703926801682 - 0.0393142104148865 - <_> - - <_> - - - - <_> - 16 10 2 2 -1. - <_> - 16 11 2 1 2. - 0 - -0.0118281003087759 - -0.5623261928558350 - 1.8052730010822415e-003 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 11 2 1 2. - 0 - -2.6902719400823116e-003 - -0.2229678034782410 - 0.0234585292637348 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 0.0168998204171658 - -2.2523698862642050e-003 - 0.3274954855442047 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - 6.6508129239082336e-003 - -0.0221514403820038 - 0.2680481076240540 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 1 1 1 3. - 1 - -0.0112539604306221 - -0.2126916944980621 - 0.0190857294946909 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 8.1370659172534943e-003 - 0.0191864501684904 - -0.2712506949901581 - <_> - - <_> - - - - <_> - 13 7 3 2 -1. - <_> - 14 8 1 2 3. - 1 - 0.0182587206363678 - -0.0208493992686272 - 0.1639769971370697 - <_> - - <_> - - - - <_> - 5 7 2 3 -1. - <_> - 4 8 2 1 3. - 1 - -7.3184021748602390e-003 - 0.1144068017601967 - -0.0451365485787392 - <_> - - <_> - - - - <_> - 5 5 11 6 -1. - <_> - 5 8 11 3 2. - 0 - 7.0838169194757938e-003 - -0.3057332932949066 - 0.0153630701825023 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 1 2. - <_> - 7 9 1 1 2. - 0 - 7.9824047861620784e-004 - 0.0548062883317471 - -0.0966483429074287 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 11 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - 3.8189259357750416e-003 - -0.0249067898839712 - 0.1704774051904678 - <_> - - <_> - - - - <_> - 6 7 2 2 -1. - <_> - 6 7 1 1 2. - <_> - 7 8 1 1 2. - 0 - -9.7243173513561487e-005 - 0.0973410606384277 - -0.0591427795588970 - <_> - - <_> - - - - <_> - 10 3 3 6 -1. - <_> - 11 4 1 6 3. - 1 - 0.0384803898632526 - -6.9969161413609982e-003 - 0.1177110001444817 - <_> - - <_> - - - - <_> - 8 3 6 3 -1. - <_> - 7 4 6 1 3. - 1 - -0.0168992299586535 - 0.0787092670798302 - -0.0809604078531265 - <_> - - <_> - - - - <_> - 5 6 8 4 -1. - <_> - 9 6 4 2 2. - <_> - 5 8 4 2 2. - 0 - 0.0341400206089020 - 0.0296475607901812 - -0.2115397006273270 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -1.3483889633789659e-003 - 0.1222158968448639 - -0.0523715801537037 - <_> - - <_> - - - - <_> - 11 4 6 3 -1. - <_> - 13 5 2 1 9. - 0 - -0.0454331785440445 - 0.0932266488671303 - -0.0242486093193293 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 2 0 2 1 2. - 0 - -9.8451746453065425e-005 - 0.0656162425875664 - -0.0774970427155495 - <_> - - <_> - - - - <_> - 11 4 6 3 -1. - <_> - 13 5 2 1 9. - 0 - 0.0948706567287445 - -6.5743089653551579e-003 - 0.2436172962188721 - <_> - - <_> - - - - <_> - 1 4 6 3 -1. - <_> - 3 5 2 1 9. - 0 - -4.5803082175552845e-003 - 0.0648695975542068 - -0.0816634073853493 - <_> - - <_> - - - - <_> - 11 0 6 9 -1. - <_> - 13 0 2 9 3. - 0 - 0.0720966234803200 - -0.0134420702233911 - 0.1469615995883942 - <_> - - <_> - - - - <_> - 1 0 6 9 -1. - <_> - 3 0 2 9 3. - 0 - -0.0864822566509247 - -0.2606137096881867 - 0.0243279598653317 - <_> - - <_> - - - - <_> - 11 3 3 6 -1. - <_> - 12 5 1 2 9. - 0 - -0.0361259095370770 - 0.0714905187487602 - -0.0678000524640083 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 3 2 12 2 3. - 0 - -0.0763527303934097 - 0.1337468028068543 - -0.0503261387348175 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0109738903120160 - -0.0693406313657761 - 0.0154059603810310 - <_> - - <_> - - - - <_> - 0 0 16 2 -1. - <_> - 8 0 8 2 2. - 0 - 0.1466732025146484 - 0.0135633898898959 - -0.4045988023281097 - <_> - - <_> - - - - <_> - 12 0 4 5 -1. - <_> - 13 0 2 5 2. - 0 - 0.0123975900933146 - 0.0183435007929802 - -0.1474552005529404 - <_> - - <_> - - - - <_> - 0 1 2 6 -1. - <_> - 0 3 2 2 3. - 0 - -0.0430754087865353 - -0.3504169881343842 - 0.0138142900541425 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 14 2 2 3 2. - 1 - -0.0369404889643192 - -0.0785052329301834 - 0.0349403396248817 - <_> - - <_> - - - - <_> - 4 3 3 6 -1. - <_> - 5 5 1 2 9. - 0 - -0.1312624067068100 - -0.4406721889972687 - 0.0120856696739793 - <_> - - <_> - - - - <_> - 3 0 12 8 -1. - <_> - 3 4 12 4 2. - 0 - -0.4955801069736481 - -0.3159318864345551 - 0.0148493601009250 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -2.4269169662147760e-003 - -0.2459854930639267 - 0.0212739594280720 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 9 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -6.1519298469647765e-004 - -0.1108976006507874 - 0.0521528087556362 - <_> - - <_> - - - - <_> - 4 3 3 2 -1. - <_> - 5 4 1 2 3. - 1 - 0.0335218794643879 - -0.0144746499136090 - 0.3357664942741394 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - -0.0449548587203026 - -0.4777626097202301 - 2.3775880690664053e-003 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - -9.6803857013583183e-003 - -0.1349118947982788 - 0.0371019691228867 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 13 1 2 2 2. - 0 - -0.0150806801393628 - 0.1476604044437408 - -0.0146933598443866 - <_> - - <_> - - - - <_> - 3 0 2 4 -1. - <_> - 3 1 2 2 2. - 0 - -7.0486129261553288e-003 - 0.1285776048898697 - -0.0385534018278122 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 1 8 2 2. - 0 - 0.0106084002181888 - -0.0640195980668068 - 0.0780019685626030 - <_> - - <_> - - - - <_> - 2 3 6 3 -1. - <_> - 4 4 2 1 9. - 0 - -5.9643429704010487e-003 - 0.0695547685027123 - -0.0819435268640518 - <_> - - <_> - - - - <_> - 6 11 12 1 -1. - <_> - 10 11 4 1 3. - 0 - 0.0392883010208607 - 6.0737589374184608e-003 - -0.1782744973897934 - <_> - - <_> - - - - <_> - 0 11 12 1 -1. - <_> - 4 11 4 1 3. - 0 - -0.0152770699933171 - 0.1298716962337494 - -0.0451280511915684 - <_> - - <_> - - - - <_> - 14 11 2 1 -1. - <_> - 14 11 1 1 2. - 0 - 9.2299269454088062e-005 - -0.0551587082445621 - 0.0721732228994370 - <_> - - <_> - - - - <_> - 0 5 14 7 -1. - <_> - 7 5 7 7 2. - 0 - 0.2407757043838501 - 0.0130517901852727 - -0.3754403889179230 - <_> - - <_> - - - - <_> - 14 11 2 1 -1. - <_> - 14 11 1 1 2. - 0 - -8.2777936768252403e-005 - 0.0874329134821892 - -0.0804484263062477 - <_> - - <_> - - - - <_> - 2 11 2 1 -1. - <_> - 3 11 1 1 2. - 0 - 1.0664980072760954e-004 - -0.0680534169077873 - 0.0798244327306747 - <_> - - <_> - - - - <_> - 14 11 2 1 -1. - <_> - 14 11 1 1 2. - 0 - 9.2299269454088062e-005 - -0.0575552992522717 - 0.0746123567223549 - <_> - - <_> - - - - <_> - 2 11 2 1 -1. - <_> - 3 11 1 1 2. - 0 - -8.7791820988059044e-005 - 0.0897706225514412 - -0.0787267908453941 - <_> - - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 14 10 1 1 2. - 0 - -9.7666241344995797e-005 - 0.0795112624764442 - -0.0807784274220467 - <_> - - <_> - - - - <_> - 2 10 2 1 -1. - <_> - 3 10 1 1 2. - 0 - 1.5842399443499744e-004 - -0.0637307092547417 - 0.0887293666601181 - <_> - - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 14 10 1 1 2. - 0 - 1.2284370313864201e-004 - -0.0560887791216373 - 0.0812737122178078 - <_> - - <_> - - - - <_> - 2 10 2 1 -1. - <_> - 3 10 1 1 2. - 0 - -1.1712549894582480e-004 - 0.0755575895309448 - -0.0765867307782173 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 15 8 2 1 2. - 1 - 0.0103286104276776 - 0.0101521601900458 - -0.2853390872478485 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 1 2 2. - 1 - 2.9327110387384892e-003 - 0.0322528108954430 - -0.1563557982444763 - <_> - - <_> - - - - <_> - 12 11 2 1 -1. - <_> - 12 11 1 1 2. - 0 - -1.0308229684596881e-004 - 0.0506098307669163 - -0.0563462004065514 - <_> - - <_> - - - - <_> - 4 11 2 1 -1. - <_> - 5 11 1 1 2. - 0 - 1.0124980326509103e-004 - -0.0616130307316780 - 0.0890738219022751 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 14 2 2 3 2. - 1 - 0.0389370582997799 - 0.0208916198462248 - -0.1296304017305374 - <_> - - <_> - - - - <_> - 8 1 10 1 -1. - <_> - 8 1 5 1 2. - 1 - 0.0112043395638466 - -0.0285740904510021 - 0.1761730015277863 - <_> - - <_> - - - - <_> - 14 2 4 3 -1. - <_> - 14 2 2 3 2. - 1 - 0.1031446009874344 - 3.9013950154185295e-003 - -0.4366630911827087 - <_> - - <_> - - - - <_> - 4 2 3 4 -1. - <_> - 4 2 3 2 2. - 1 - -0.1119102984666824 - 0.3386552929878235 - -0.0141557203605771 - <_> - - <_> - - - - <_> - 10 2 6 4 -1. - <_> - 12 2 2 4 3. - 0 - -0.0262805595993996 - -0.0890435278415680 - 0.0184484701603651 - -1.4224710464477539 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0126762101426721 - 0.2023731023073196 - -0.2507770955562592 - <_> - - <_> - - - - <_> - 4 3 11 4 -1. - <_> - 4 4 11 2 2. - 0 - -0.0463197603821754 - 0.2199923992156982 - -0.1614672988653183 - <_> - - <_> - - - - <_> - 0 0 12 3 -1. - <_> - 4 0 4 3 3. - 0 - -0.0350815393030643 - 0.1592323929071426 - -0.2178049981594086 - <_> - - <_> - - - - <_> - 13 6 3 3 -1. - <_> - 14 7 1 3 3. - 1 - -0.0183820798993111 - 0.2510378062725067 - -3.1736700329929590e-003 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 4 7 3 1 3. - 1 - -7.4837259016931057e-003 - 0.1570875048637390 - -0.1267182976007462 - <_> - - <_> - - - - <_> - 9 4 5 6 -1. - <_> - 9 7 5 3 2. - 0 - 0.0465647801756859 - -0.2200078964233398 - 0.0568897388875484 - <_> - - <_> - - - - <_> - 8 4 3 3 -1. - <_> - 7 5 3 1 3. - 1 - -0.0205301195383072 - 0.2248428016901016 - -0.0807669982314110 - <_> - - <_> - - - - <_> - 13 4 3 5 -1. - <_> - 14 5 1 5 3. - 1 - -0.0216438490897417 - 0.1953482031822205 - -0.0761466771364212 - <_> - - <_> - - - - <_> - 0 0 2 7 -1. - <_> - 1 0 1 7 2. - 0 - -3.3336980268359184e-003 - 0.0970433726906776 - -0.2086212933063507 - <_> - - <_> - - - - <_> - 12 5 3 2 -1. - <_> - 13 6 1 2 3. - 1 - 0.0277468301355839 - -0.0426856093108654 - 0.1973669975996018 - <_> - - <_> - - - - <_> - 4 0 10 4 -1. - <_> - 4 1 10 2 2. - 0 - 0.0311991497874260 - -0.0881234183907509 - 0.1608421057462692 - <_> - - <_> - - - - <_> - 12 5 3 2 -1. - <_> - 13 6 1 2 3. - 1 - -0.0148837696760893 - 0.1288404017686844 - -0.0498834811151028 - <_> - - <_> - - - - <_> - 5 4 3 3 -1. - <_> - 4 5 3 1 3. - 1 - -0.0124980695545673 - 0.1955710053443909 - -0.0733390524983406 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 9 7 4 3 2. - 0 - 6.8398728035390377e-003 - -0.1910061985254288 - 0.0300177391618490 - <_> - - <_> - - - - <_> - 6 3 6 3 -1. - <_> - 6 4 6 1 3. - 0 - 0.0166982691735029 - -0.0665356218814850 - 0.2430689036846161 - <_> - - <_> - - - - <_> - 11 0 4 5 -1. - <_> - 12 0 2 5 2. - 0 - -0.0135851800441742 - -0.3115785121917725 - 0.0303322505205870 - <_> - - <_> - - - - <_> - 3 0 4 5 -1. - <_> - 4 0 2 5 2. - 0 - -0.0160121805965900 - -0.3815053999423981 - 0.0299901198595762 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 14 1 1 3 3. - 1 - 0.0249597802758217 - 0.0171270407736301 - -0.1717474013566971 - <_> - - <_> - - - - <_> - 0 6 18 6 -1. - <_> - 0 6 9 3 2. - <_> - 9 9 9 3 2. - 0 - -0.0626798123121262 - -0.2478262037038803 - 0.0506812483072281 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 14 1 1 3 3. - 1 - -0.0514681600034237 - -0.6060296297073364 - 2.3179119452834129e-003 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 4 1 3 1 3. - 1 - 0.0174158196896315 - 0.0332504510879517 - -0.3639439940452576 - <_> - - <_> - - - - <_> - 6 2 6 3 -1. - <_> - 6 3 6 1 3. - 0 - 0.0332676507532597 - -0.0590903013944626 - 0.2393801957368851 - <_> - - <_> - - - - <_> - 4 9 2 1 -1. - <_> - 4 9 1 1 2. - 1 - -1.0759649740066379e-004 - 0.0670252367854118 - -0.1739394962787628 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - -0.0111192697659135 - -0.2102672010660172 - 0.0160253103822470 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - -8.6540812626481056e-003 - -0.2900137901306152 - 0.0345591492950916 - <_> - - <_> - - - - <_> - 10 10 1 2 -1. - <_> - 10 11 1 1 2. - 0 - 1.0427879897179082e-004 - -0.1361563950777054 - 0.0553204081952572 - <_> - - <_> - - - - <_> - 6 9 6 2 -1. - <_> - 8 9 2 2 3. - 0 - -0.0149594703689218 - -0.2810682952404022 - 0.0338884107768536 - <_> - - <_> - - - - <_> - 16 0 2 10 -1. - <_> - 16 0 2 5 2. - 1 - -0.1503134965896606 - -0.1020976975560188 - 9.4559686258435249e-003 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 2 0 3 1 2. - 1 - -0.0202923100441694 - -0.3691214919090271 - 0.0257286392152309 - <_> - - <_> - - - - <_> - 14 3 2 1 -1. - <_> - 14 3 1 1 2. - 1 - 0.0162273198366165 - 6.1225090175867081e-003 - -0.4635617136955261 - <_> - - <_> - - - - <_> - 2 1 3 2 -1. - <_> - 2 1 3 1 2. - 1 - 0.0120456600561738 - 0.0315311886370182 - -0.2953037023544312 - <_> - - <_> - - - - <_> - 16 0 2 10 -1. - <_> - 16 0 2 5 2. - 1 - 0.0957063436508179 - 9.0816244482994080e-003 - -0.0690838173031807 - <_> - - <_> - - - - <_> - 2 0 10 2 -1. - <_> - 2 0 5 2 2. - 1 - -0.1454890072345734 - -0.3188687860965729 - 0.0348804295063019 - <_> - - <_> - - - - <_> - 17 6 1 4 -1. - <_> - 17 8 1 2 2. - 0 - 0.0110594900324941 - 0.0389895997941494 - -0.1371185034513474 - <_> - - <_> - - - - <_> - 0 6 1 4 -1. - <_> - 0 8 1 2 2. - 0 - -5.6998720392584801e-003 - -0.3579429090023041 - 0.0268858391791582 - <_> - - <_> - - - - <_> - 6 11 12 1 -1. - <_> - 9 11 6 1 2. - 0 - -4.9371081404387951e-003 - 0.1014261990785599 - -0.0512798093259335 - <_> - - <_> - - - - <_> - 0 6 6 2 -1. - <_> - 2 6 2 2 3. - 0 - -0.0147125897929072 - 0.1249597966670990 - -0.0776917487382889 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 12 5 1 3 3. - 0 - 0.0112822102382779 - -0.0338287502527237 - 0.1497938036918640 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -9.6910931169986725e-003 - 0.2374307960271835 - -0.0488566905260086 - <_> - - <_> - - - - <_> - 9 0 4 3 -1. - <_> - 10 0 2 3 2. - 0 - -0.0172296799719334 - -0.5651538968086243 - 8.7145604193210602e-003 - <_> - - <_> - - - - <_> - 0 11 6 1 -1. - <_> - 3 11 3 1 2. - 0 - 5.6609478779137135e-003 - -0.0606760084629059 - 0.1527134031057358 - <_> - - <_> - - - - <_> - 6 3 9 2 -1. - <_> - 9 3 3 2 3. - 0 - -0.0536043904721737 - -0.2147203981876373 - 0.0148901101201773 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 6 0 2 3 2. - 0 - -0.0101536000147462 - -0.3109748065471649 - 0.0281606391072273 - <_> - - <_> - - - - <_> - 3 3 15 1 -1. - <_> - 8 3 5 1 3. - 0 - -0.0170729104429483 - 0.0718822330236435 - -0.0528442710638046 - <_> - - <_> - - - - <_> - 5 0 4 3 -1. - <_> - 5 1 4 1 3. - 0 - -0.0107288099825382 - 0.1638951003551483 - -0.0542779006063938 - <_> - - <_> - - - - <_> - 10 0 4 2 -1. - <_> - 10 1 4 1 2. - 0 - 0.0107149295508862 - -0.0435292609035969 - 0.1549257040023804 - <_> - - <_> - - - - <_> - 2 3 9 2 -1. - <_> - 5 3 3 2 3. - 0 - -9.1774649918079376e-003 - 0.0826616212725639 - -0.1104895994067192 - <_> - - <_> - - - - <_> - 11 5 1 3 -1. - <_> - 10 6 1 1 3. - 1 - -5.1653548143804073e-003 - 0.0468391105532646 - -0.0500712096691132 - <_> - - <_> - - - - <_> - 0 3 3 4 -1. - <_> - 0 4 3 2 2. - 0 - 0.0134725701063871 - 0.0239944793283939 - -0.3620741069316864 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 9.8625328973866999e-005 - -0.0724037066102028 - 0.0852795019745827 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 6 1 1 3. - 1 - -3.8795128930360079e-003 - 0.0995271727442741 - -0.0933156535029411 - <_> - - <_> - - - - <_> - 17 0 1 6 -1. - <_> - 17 2 1 2 3. - 0 - 0.0248702596873045 - 0.0162439309060574 - -0.4667921960353851 - <_> - - <_> - - - - <_> - 0 5 10 6 -1. - <_> - 0 5 5 3 2. - <_> - 5 8 5 3 2. - 0 - 0.1328742057085037 - 0.0293023698031902 - -0.2821770906448364 - <_> - - <_> - - - - <_> - 10 6 3 2 -1. - <_> - 11 6 1 2 3. - 0 - 0.0130533203482628 - -0.0225841496139765 - 0.1915173977613449 - <_> - - <_> - - - - <_> - 5 6 3 2 -1. - <_> - 6 6 1 2 3. - 0 - -2.3439459037035704e-003 - 0.1317458003759384 - -0.0718552991747856 - <_> - - <_> - - - - <_> - 5 0 12 4 -1. - <_> - 11 0 6 2 2. - <_> - 5 2 6 2 2. - 0 - -0.0434579290449619 - 0.0693696215748787 - -0.0228853095322847 - <_> - - <_> - - - - <_> - 1 0 12 4 -1. - <_> - 1 0 6 2 2. - <_> - 7 2 6 2 2. - 0 - -0.0597754307091236 - 0.2359338998794556 - -0.0397230610251427 - <_> - - <_> - - - - <_> - 17 1 1 4 -1. - <_> - 17 2 1 2 2. - 0 - -6.1264610849320889e-003 - -0.2199499011039734 - 0.0223336406052113 - <_> - - <_> - - - - <_> - 3 5 3 3 -1. - <_> - 4 5 1 3 3. - 0 - -2.2975069005042315e-003 - 0.1148883029818535 - -0.0849059075117111 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 2 1 2 2. - 0 - 0.0329430699348450 - 8.4422080544754863e-004 - -0.8797280192375183 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -1.9385489868000150e-003 - 0.0859673470258713 - -0.1124712973833084 - <_> - - <_> - - - - <_> - 12 0 1 2 -1. - <_> - 12 0 1 1 2. - 1 - -2.1609459072351456e-003 - 0.0784622505307198 - -0.0373938381671906 - <_> - - <_> - - - - <_> - 5 9 4 2 -1. - <_> - 6 9 2 2 2. - 0 - -9.0928059071302414e-003 - -0.4109156131744385 - 0.0182528793811798 - <_> - - <_> - - - - <_> - 12 1 6 6 -1. - <_> - 12 4 6 3 2. - 0 - -0.1602786928415299 - -0.2254175990819931 - 0.0157823506742716 - <_> - - <_> - - - - <_> - 4 5 6 1 -1. - <_> - 4 5 3 1 2. - 1 - -0.0499500893056393 - -0.1864100992679596 - 0.0422774888575077 - <_> - - <_> - - - - <_> - 5 6 9 6 -1. - <_> - 5 9 9 3 2. - 0 - -0.0109699098393321 - -0.4180412888526917 - 0.0161490291357040 - <_> - - <_> - - - - <_> - 5 7 2 1 -1. - <_> - 6 7 1 1 2. - 0 - 9.3183261924423277e-005 - -0.0769077464938164 - 0.1007246971130371 - <_> - - <_> - - - - <_> - 10 0 4 5 -1. - <_> - 11 0 2 5 2. - 0 - 0.0132654104381800 - 0.0195433106273413 - -0.1777738034725189 - <_> - - <_> - - - - <_> - 4 0 4 5 -1. - <_> - 5 0 2 5 2. - 0 - -0.0125699099153280 - -0.2100770026445389 - 0.0351571217179298 - <_> - - <_> - - - - <_> - 15 7 3 1 -1. - <_> - 16 7 1 1 3. - 0 - 9.8762623965740204e-003 - 6.7626000382006168e-003 - -0.3076184988021851 - <_> - - <_> - - - - <_> - 0 7 3 1 -1. - <_> - 1 7 1 1 3. - 0 - -2.1076570264995098e-003 - 0.1336320936679840 - -0.0570927001535892 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - -7.1060168556869030e-004 - -0.1766926944255829 - 0.0653932690620422 - <_> - - <_> - - - - <_> - 6 1 4 3 -1. - <_> - 7 1 2 3 2. - 0 - -9.2764664441347122e-003 - -0.2467814981937408 - 0.0276107899844646 - <_> - - <_> - - - - <_> - 8 5 3 1 -1. - <_> - 9 5 1 1 3. - 0 - 6.5380721352994442e-003 - -0.0233616996556520 - 0.2577081918716431 - <_> - - <_> - - - - <_> - 1 0 12 2 -1. - <_> - 1 0 6 1 2. - <_> - 7 1 6 1 2. - 0 - -0.0112989898771048 - 0.1573182940483093 - -0.0437809303402901 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 15 1 3 1 3. - 0 - -0.0280481409281492 - -0.3999130129814148 - 9.0252067893743515e-003 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 0 1 3 1 3. - 0 - 0.0117148999124765 - 0.0225809291005135 - -0.3137451112270355 - <_> - - <_> - - - - <_> - 8 2 4 1 -1. - <_> - 8 2 2 1 2. - 0 - -1.2955210695508868e-004 - 0.0377207584679127 - -0.0605338700115681 - <_> - - <_> - - - - <_> - 8 0 2 1 -1. - <_> - 8 0 1 1 2. - 1 - -3.7807179614901543e-003 - 0.1348771005868912 - -0.0565831400454044 - <_> - - <_> - - - - <_> - 10 1 1 3 -1. - <_> - 10 2 1 1 3. - 0 - -4.9128020182251930e-003 - 0.1456490010023117 - -0.0278352592140436 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - -0.0163919106125832 - -0.6401032209396362 - 0.0117270601913333 - <_> - - <_> - - - - <_> - 13 4 5 4 -1. - <_> - 13 5 5 2 2. - 0 - -0.0114646395668387 - 0.0393679514527321 - -0.0330333784222603 - <_> - - <_> - - - - <_> - 0 4 5 4 -1. - <_> - 0 5 5 2 2. - 0 - -0.0349160097539425 - -0.3398657143115997 - 0.0204815808683634 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 10 7 3 3 2. - 0 - 0.0498701184988022 - -0.0500458218157291 - 0.0465992391109467 - <_> - - <_> - - - - <_> - 5 7 4 1 -1. - <_> - 6 7 2 1 2. - 0 - -1.0137989738723263e-004 - 0.0865164771676064 - -0.0813745930790901 - <_> - - <_> - - - - <_> - 10 8 2 4 -1. - <_> - 10 9 2 2 2. - 0 - -8.1614796072244644e-003 - 0.1258589029312134 - -0.0242530107498169 - <_> - - <_> - - - - <_> - 2 7 14 3 -1. - <_> - 9 7 7 3 2. - 0 - -0.0513628087937832 - 0.1238332018256187 - -0.0575372986495495 - <_> - - <_> - - - - <_> - 5 9 8 1 -1. - <_> - 5 9 4 1 2. - 0 - -9.2184888198971748e-003 - 0.1331509053707123 - -0.0626712366938591 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 8 11 8 1 2. - 0 - 0.0597352087497711 - 0.0193870291113853 - -0.3745259046554565 - <_> - - <_> - - - - <_> - 13 5 4 5 -1. - <_> - 14 5 2 5 2. - 0 - -3.7147789262235165e-003 - 0.1358835995197296 - -0.1157322973012924 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -1.6745850443840027e-003 - -0.2143753021955490 - 0.0312791988253593 - <_> - - <_> - - - - <_> - 13 5 4 5 -1. - <_> - 14 5 2 5 2. - 0 - 0.0273674000054598 - 6.2164650298655033e-003 - -0.1658226996660233 - <_> - - <_> - - - - <_> - 1 5 4 5 -1. - <_> - 2 5 2 5 2. - 0 - -5.6425300426781178e-003 - 0.0899431630969048 - -0.0772494301199913 - <_> - - <_> - - - - <_> - 11 3 3 6 -1. - <_> - 12 5 1 2 9. - 0 - -0.0449441596865654 - 0.1017730981111527 - -0.0794094726443291 - <_> - - <_> - - - - <_> - 2 7 4 1 -1. - <_> - 3 8 2 1 2. - 1 - -0.0123977502807975 - -0.2552298009395599 - 0.0259325504302979 - <_> - - <_> - - - - <_> - 10 0 2 10 -1. - <_> - 10 0 1 10 2. - 1 - 0.1325749009847641 - -6.0667068464681506e-004 - -0.9046273827552795 - <_> - - <_> - - - - <_> - 8 0 10 2 -1. - <_> - 8 0 10 1 2. - 1 - -0.0476878508925438 - -0.2963404059410095 - 0.0220607798546553 - <_> - - <_> - - - - <_> - 12 0 1 4 -1. - <_> - 11 1 1 2 2. - 1 - -1.3438980386126786e-004 - 0.0348079502582550 - -0.0230077002197504 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 6 5 4 1 3. - 1 - -0.0477597489953041 - 0.3204304873943329 - -0.0207200702279806 - <_> - - <_> - - - - <_> - 16 6 2 3 -1. - <_> - 16 7 2 1 3. - 0 - 8.4569696336984634e-003 - 0.0169004499912262 - -0.2343410998582840 - <_> - - <_> - - - - <_> - 0 6 2 3 -1. - <_> - 0 7 2 1 3. - 0 - -9.0884640812873840e-003 - -0.2740140855312347 - 0.0239206794649363 - <_> - - <_> - - - - <_> - 14 11 4 1 -1. - <_> - 15 11 2 1 2. - 0 - 1.1316059681121260e-004 - -0.0719088912010193 - 0.0643374994397163 - <_> - - <_> - - - - <_> - 0 11 4 1 -1. - <_> - 1 11 2 1 2. - 0 - -2.2978619672358036e-003 - 0.1413930952548981 - -0.0466270111501217 - <_> - - <_> - - - - <_> - 13 9 1 2 -1. - <_> - 13 9 1 1 2. - 1 - -7.0250302087515593e-005 - 0.0436318814754486 - -0.0898446813225746 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 5 1 1 3. - 0 - -2.4793320335447788e-003 - 0.1153194010257721 - -0.0547942109405994 - <_> - - <_> - - - - <_> - 9 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 9 5 1 1 2. - 0 - -0.0237797498703003 - -0.8962308764457703 - 8.2168419612571597e-004 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 1.5105960192158818e-003 - -0.0462512001395226 - 0.1463750004768372 - <_> - - <_> - - - - <_> - 1 0 16 1 -1. - <_> - 5 0 8 1 2. - 0 - -0.0199297703802586 - 0.1034549996256828 - -0.0693263709545136 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 5 9 1 1 2. - 1 - 5.6873750872910023e-003 - 0.0157147701829672 - -0.4355126917362213 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - 0.0255281794816256 - 0.0179604105651379 - -0.1027155965566635 - <_> - - <_> - - - - <_> - 0 0 12 1 -1. - <_> - 6 0 6 1 2. - 0 - 6.2439180910587311e-003 - -0.0508896596729755 - 0.1210234984755516 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - -0.0384338907897472 - -0.1135198995471001 - 0.0111098503693938 - <_> - - <_> - - - - <_> - 6 0 4 1 -1. - <_> - 7 1 2 1 2. - 1 - -0.0116557897999883 - 0.1818843036890030 - -0.0343860499560833 - <_> - - <_> - - - - <_> - 10 2 2 6 -1. - <_> - 10 4 2 2 3. - 0 - 0.0170190297067165 - -0.0288226101547480 - 0.1792289018630981 - <_> - - <_> - - - - <_> - 6 2 4 6 -1. - <_> - 6 4 4 2 3. - 0 - -0.0212818402796984 - 0.0793612226843834 - -0.1483716964721680 - <_> - - <_> - - - - <_> - 9 4 2 4 -1. - <_> - 8 5 2 2 2. - 1 - 0.0646305978298187 - -8.3243446424603462e-003 - 0.3440467119216919 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 10 5 2 2 2. - 1 - -0.0201653894037008 - 0.0995751395821571 - -0.0649810135364532 - <_> - - <_> - - - - <_> - 5 9 12 3 -1. - <_> - 8 9 6 3 2. - 0 - -4.8298938199877739e-003 - 0.0398935005068779 - -0.0400783717632294 - <_> - - <_> - - - - <_> - 1 9 12 3 -1. - <_> - 4 9 6 3 2. - 0 - -0.0330534912645817 - 0.1169769018888474 - -0.0554271712899208 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 10 7 3 3 2. - 0 - 0.0624069198966026 - -0.0227369796484709 - 0.0363251790404320 - <_> - - <_> - - - - <_> - 4 2 10 4 -1. - <_> - 4 3 10 2 2. - 0 - -0.0611964501440525 - 0.1936902999877930 - -0.0356403514742851 - <_> - - <_> - - - - <_> - 8 11 6 1 -1. - <_> - 10 11 2 1 3. - 0 - 0.0106785595417023 - 0.0165350195020437 - -0.4233641028404236 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 5 11 8 1 2. - 0 - 0.0164913590997458 - -0.0432940982282162 - 0.1735623031854630 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -5.2192797884345055e-003 - -0.4095064103603363 - 0.0208157207816839 - <_> - - <_> - - - - <_> - 3 8 12 3 -1. - <_> - 3 9 12 1 3. - 0 - 0.0375569313764572 - -0.0350214615464211 - 0.1987593024969101 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - 1.1630539665929973e-004 - -0.0661010071635246 - 0.0282463207840919 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -2.9590369667857885e-003 - -0.2329861968755722 - 0.0267476607114077 - <_> - - <_> - - - - <_> - 10 5 3 4 -1. - <_> - 10 7 3 2 2. - 0 - 0.0973349735140800 - 1.6407809453085065e-003 - -0.5268908739089966 - <_> - - <_> - - - - <_> - 5 5 3 4 -1. - <_> - 5 7 3 2 2. - 0 - 9.4552114605903625e-003 - -0.1295641958713532 - 0.0431520491838455 - <_> - - <_> - - - - <_> - 10 0 2 3 -1. - <_> - 10 0 1 3 2. - 1 - -1.9573559984564781e-003 - 0.0940229967236519 - -0.0507294684648514 - <_> - - <_> - - - - <_> - 5 0 6 2 -1. - <_> - 7 0 2 2 3. - 0 - -0.0198132097721100 - -0.2809917032718658 - 0.0254314094781876 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - 4.6183229424059391e-003 - 0.0201521404087543 - -0.2858322858810425 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - -1.3847060035914183e-003 - 0.1245215013623238 - -0.0481383316218853 - <_> - - <_> - - - - <_> - 12 5 3 4 -1. - <_> - 13 6 1 4 3. - 1 - 0.0423474386334419 - 0.0142380604520440 - -0.1434195935726166 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 0 0 9 6 2. - <_> - 9 6 9 6 2. - 0 - -0.3725706040859222 - -0.3128691017627716 - 0.0184928793460131 - <_> - - <_> - - - - <_> - 12 4 4 1 -1. - <_> - 13 5 2 1 2. - 1 - -0.0306915007531643 - -0.4115782082080841 - 0.0108227096498013 - <_> - - <_> - - - - <_> - 6 5 4 3 -1. - <_> - 5 6 4 1 3. - 1 - -0.0163958799093962 - 0.1450517028570175 - -0.0407909303903580 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - -6.2989019788801670e-003 - -0.4182048141956329 - 0.0122968303039670 - <_> - - <_> - - - - <_> - 0 4 10 4 -1. - <_> - 0 4 5 2 2. - <_> - 5 6 5 2 2. - 0 - 0.0940605327486992 - 0.0135232899338007 - -0.3603284955024719 - <_> - - <_> - - - - <_> - 6 4 6 3 -1. - <_> - 8 5 2 1 9. - 0 - -0.0326385609805584 - 0.0818490833044052 - -0.0747229531407356 - <_> - - <_> - - - - <_> - 2 0 4 5 -1. - <_> - 3 0 2 5 2. - 0 - -0.0146137503907084 - -0.2218458950519562 - 0.0258192792534828 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 10 6 1 1 2. - <_> - 9 7 1 1 2. - 0 - -1.7758510075509548e-003 - 0.0878588706254959 - -0.0271167401224375 - <_> - - <_> - - - - <_> - 0 9 1 3 -1. - <_> - 0 10 1 1 3. - 0 - -3.7843519821763039e-003 - -0.2504645884037018 - 0.0214362796396017 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 17 9 1 1 2. - <_> - 16 10 1 1 2. - 0 - -6.0635298723354936e-004 - -0.4773195087909699 - 0.1140917986631393 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - 1.0241969721391797e-004 - -0.0934473872184753 - 0.0676550865173340 - <_> - - <_> - - - - <_> - 16 8 2 2 -1. - <_> - 16 8 1 2 2. - 1 - 6.5193139016628265e-003 - -0.0146125396713614 - 0.2081597000360489 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 2 1 2. - 1 - 5.3755999542772770e-003 - -0.0382656008005142 - 0.1994156986474991 - <_> - - <_> - - - - <_> - 10 10 8 2 -1. - <_> - 12 10 4 2 2. - 0 - 2.5083690416067839e-003 - -0.0392662994563580 - 0.0416212603449821 - <_> - - <_> - - - - <_> - 0 10 8 2 -1. - <_> - 2 10 4 2 2. - 0 - -6.1823232099413872e-003 - 0.1058105006814003 - -0.0582520514726639 - <_> - - <_> - - - - <_> - 14 7 2 2 -1. - <_> - 15 7 1 1 2. - <_> - 14 8 1 1 2. - 0 - -1.7877219943329692e-003 - 0.1587581038475037 - -0.0386720411479473 - <_> - - <_> - - - - <_> - 3 6 1 4 -1. - <_> - 3 8 1 2 2. - 0 - 2.0424230024218559e-003 - -0.1231693029403687 - 0.0476923882961273 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -7.9678567999508232e-005 - 0.0580078810453415 - -0.0372097901999950 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -2.4312110617756844e-003 - 0.1821894943714142 - -0.0317189991474152 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - 9.7082564607262611e-003 - 0.0250935498625040 - -0.2158152014017105 - <_> - - <_> - - - - <_> - 2 7 12 3 -1. - <_> - 2 8 12 1 3. - 0 - 0.0186512898653746 - -0.0562217906117439 - 0.1007692962884903 - <_> - - <_> - - - - <_> - 17 5 1 6 -1. - <_> - 17 7 1 2 3. - 0 - -0.0434251986443996 - -0.5258082151412964 - 2.3139629047363997e-003 - <_> - - <_> - - - - <_> - 0 5 1 6 -1. - <_> - 0 7 1 2 3. - 0 - 9.8262643441557884e-003 - 0.0287584401667118 - -0.2045837044715881 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -2.5310849305242300e-003 - 0.2245956063270569 - -0.0477442517876625 - <_> - - <_> - - - - <_> - 1 1 2 1 -1. - <_> - 2 1 1 1 2. - 0 - -9.8680997325573117e-005 - 0.0525039993226528 - -0.1161613017320633 - <_> - - <_> - - - - <_> - 9 9 1 3 -1. - <_> - 9 10 1 1 3. - 0 - 8.7780077592469752e-005 - -0.0579219013452530 - 0.0529744587838650 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -2.0101759582757950e-003 - 0.1303994059562683 - -0.0416458807885647 - <_> - - <_> - - - - <_> - 8 9 4 2 -1. - <_> - 9 9 2 2 2. - 0 - -6.9859880022704601e-003 - -0.2574073970317841 - 0.0229239203035831 - <_> - - <_> - - - - <_> - 6 9 4 2 -1. - <_> - 7 9 2 2 2. - 0 - -8.5653923451900482e-003 - -0.3481613099575043 - 0.0163218304514885 - <_> - - <_> - - - - <_> - 10 7 3 2 -1. - <_> - 10 7 3 1 2. - 1 - 4.1130301542580128e-003 - -0.0111931599676609 - 0.0782399326562881 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 7 1 3 2. - 1 - -0.0286494400352240 - -0.2492145001888275 - 0.0232535693794489 - <_> - - <_> - - - - <_> - 3 4 12 4 -1. - <_> - 3 6 12 2 2. - 0 - -0.0716685727238655 - 0.1823417991399765 - -0.0329522117972374 - <_> - - <_> - - - - <_> - 5 1 4 4 -1. - <_> - 5 1 4 2 2. - 1 - 0.0200473591685295 - 0.0345450118184090 - -0.1759392023086548 - <_> - - <_> - - - - <_> - 17 0 1 2 -1. - <_> - 17 1 1 1 2. - 0 - 9.2730745673179626e-003 - 2.4312171153724194e-003 - -0.3625670969486237 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.3696910173166543e-004 - 0.0538496598601341 - -0.1045247986912727 - <_> - - <_> - - - - <_> - 11 0 4 4 -1. - <_> - 11 1 4 2 2. - 0 - -0.0164316501468420 - 0.1072364002466202 - -0.0233075600117445 - <_> - - <_> - - - - <_> - 2 0 7 4 -1. - <_> - 2 1 7 2 2. - 0 - 0.0155437700450420 - -0.0624712593853474 - 0.1201794967055321 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 2 4 2. - 1 - 0.1675571948289871 - 2.9874350875616074e-003 - -0.2567144930362701 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 1 4 2 2. - 1 - -0.1084768027067184 - 0.3714981973171234 - -0.0161003004759550 - <_> - - <_> - - - - <_> - 10 1 3 8 -1. - <_> - 11 2 1 8 3. - 1 - -0.0366924181580544 - 0.1060388982295990 - -0.0280711296945810 - <_> - - <_> - - - - <_> - 8 1 8 3 -1. - <_> - 7 2 8 1 3. - 1 - -0.1018788963556290 - -0.5475057959556580 - 0.0108562298119068 - <_> - - <_> - - - - <_> - 12 0 3 1 -1. - <_> - 13 1 1 1 3. - 1 - -0.0230839904397726 - -0.3901723921298981 - 2.3198500275611877e-003 - <_> - - <_> - - - - <_> - 6 0 1 3 -1. - <_> - 5 1 1 1 3. - 1 - 0.0117387799546123 - 0.0178492199629545 - -0.2960726916790009 - <_> - - <_> - - - - <_> - 13 2 3 2 -1. - <_> - 14 3 1 2 3. - 1 - 0.0111867701634765 - 0.0176839902997017 - -0.1094954982399941 - <_> - - <_> - - - - <_> - 5 2 8 3 -1. - <_> - 5 3 8 1 3. - 0 - 0.0130849098786712 - -0.0554930306971073 - 0.0937640666961670 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 4 12 2 2. - 0 - -0.0482949912548065 - -0.1096362024545670 - 0.0604815185070038 - <_> - - <_> - - - - <_> - 2 2 3 6 -1. - <_> - 3 4 1 2 9. - 0 - -0.0120758702978492 - 0.0686463937163353 - -0.0882055312395096 - <_> - - <_> - - - - <_> - 15 3 3 3 -1. - <_> - 14 4 3 1 3. - 1 - 0.0226164199411869 - -0.0527171790599823 - 0.3771780133247376 - <_> - - <_> - - - - <_> - 3 3 3 3 -1. - <_> - 4 4 1 3 3. - 1 - 0.0291846599429846 - -0.0173167102038860 - 0.3240751922130585 - <_> - - <_> - - - - <_> - 0 5 18 2 -1. - <_> - 9 5 9 1 2. - <_> - 0 6 9 1 2. - 0 - 0.0566471293568611 - 0.0142098097130656 - -0.4031187891960144 - <_> - - <_> - - - - <_> - 7 3 1 4 -1. - <_> - 7 3 1 2 2. - 1 - -0.0600385703146458 - 0.6332418918609619 - -9.3253394588828087e-003 - <_> - - <_> - - - - <_> - 13 2 3 2 -1. - <_> - 14 3 1 2 3. - 1 - -0.0210410393774509 - -0.0707780122756958 - 0.0109511399641633 - <_> - - <_> - - - - <_> - 5 2 2 3 -1. - <_> - 4 3 2 1 3. - 1 - 0.0106987198814750 - 0.0307394992560148 - -0.1862394958734512 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -1.4163380255922675e-003 - 0.1420788019895554 - -0.0560512915253639 - <_> - - <_> - - - - <_> - 0 1 3 3 -1. - <_> - 0 2 3 1 3. - 0 - 0.0190572496503592 - 0.0115687204524875 - -0.4189380109310150 - <_> - - <_> - - - - <_> - 7 4 5 8 -1. - <_> - 7 8 5 4 2. - 0 - 0.0242554005235434 - -0.2742288112640381 - 0.0153051996603608 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -1.6801659949123859e-003 - 0.1245557963848114 - -0.0451746992766857 - <_> - - <_> - - - - <_> - 11 6 3 1 -1. - <_> - 12 6 1 1 3. - 0 - -7.1042921626940370e-004 - 0.0521892793476582 - -0.0377888716757298 - <_> - - <_> - - - - <_> - 4 6 3 1 -1. - <_> - 5 6 1 1 3. - 0 - -9.6175346698146313e-005 - 0.0803735628724098 - -0.0659776106476784 - <_> - - <_> - - - - <_> - 10 2 6 9 -1. - <_> - 12 5 2 3 9. - 0 - 0.3025397062301636 - -6.4190649427473545e-003 - 0.2873455882072449 - <_> - - <_> - - - - <_> - 2 2 6 9 -1. - <_> - 4 5 2 3 9. - 0 - -0.3384765088558197 - -0.2994962036609650 - 0.0193111095577478 - <_> - - <_> - - - - <_> - 16 4 2 4 -1. - <_> - 16 5 2 2 2. - 0 - 0.0184147693216801 - 4.1407728567719460e-003 - -0.3200998902320862 - <_> - - <_> - - - - <_> - 0 4 2 4 -1. - <_> - 0 5 2 2 2. - 0 - 2.0269309170544147e-003 - 0.0388519205152988 - -0.1365053951740265 - <_> - - <_> - - - - <_> - 15 4 2 2 -1. - <_> - 16 4 1 1 2. - <_> - 15 5 1 1 2. - 0 - -2.6168529875576496e-003 - 0.2172144949436188 - -0.0457929298281670 - <_> - - <_> - - - - <_> - 1 4 2 2 -1. - <_> - 1 4 1 1 2. - <_> - 2 5 1 1 2. - 0 - -1.4506299339700490e-004 - 0.0773575529456139 - -0.0701647475361824 - <_> - - <_> - - - - <_> - 9 3 9 6 -1. - <_> - 12 5 3 2 9. - 0 - 1.5293279429897666e-003 - 0.0228269193321466 - -0.0646257102489471 - <_> - - <_> - - - - <_> - 2 3 12 4 -1. - <_> - 2 5 12 2 2. - 0 - 0.0924655571579933 - -0.0304490607231855 - 0.2237693965435028 - <_> - - <_> - - - - <_> - 12 3 1 2 -1. - <_> - 12 3 1 1 2. - 1 - 4.2030760087072849e-003 - -0.0684539377689362 - 0.0619283095002174 - <_> - - <_> - - - - <_> - 7 3 2 2 -1. - <_> - 7 3 1 1 2. - <_> - 8 4 1 1 2. - 0 - 8.0572906881570816e-005 - -0.0595343001186848 - 0.0814523473381996 - <_> - - <_> - - - - <_> - 7 7 6 3 -1. - <_> - 7 7 3 3 2. - 0 - 0.1128631979227066 - -1.3413679553195834e-003 - 0.5481302142143250 - <_> - - <_> - - - - <_> - 7 2 4 2 -1. - <_> - 8 2 2 2 2. - 0 - -6.4409552142024040e-003 - -0.1875568032264710 - 0.0263920295983553 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 16 0 2 2 2. - <_> - 14 2 2 2 2. - 0 - -0.0107489898800850 - 0.1255268007516861 - -0.0404654294252396 - <_> - - <_> - - - - <_> - 5 4 6 7 -1. - <_> - 7 4 2 7 3. - 0 - -0.0531399808824062 - 0.1246182993054390 - -0.0410951003432274 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 16 0 2 2 2. - <_> - 14 2 2 2 2. - 0 - 0.0226043593138456 - -0.0178690701723099 - 0.2413221001625061 - <_> - - <_> - - - - <_> - 5 8 2 2 -1. - <_> - 5 8 1 1 2. - <_> - 6 9 1 1 2. - 0 - 2.2205261047929525e-003 - 0.0319688208401203 - -0.1695228070020676 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 16 0 2 2 2. - <_> - 14 2 2 2 2. - 0 - -3.9627980440855026e-003 - 0.0385388396680355 - -0.0291970893740654 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 5 1 1 2 3. - 1 - -0.0151524096727371 - 0.1515447944402695 - -0.0337559208273888 - <_> - - <_> - - - - <_> - 7 1 4 4 -1. - <_> - 8 1 2 4 2. - 0 - 0.0129096200689673 - 0.0193079207092524 - -0.2681475877761841 - <_> - - <_> - - - - <_> - 4 2 7 3 -1. - <_> - 3 3 7 1 3. - 1 - -0.0503015816211700 - 0.2684217095375061 - -0.0198326092213392 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 0 0 9 12 2. - 0 - 0.2314469069242477 - -0.0443175397813320 - 0.1135526970028877 - <_> - - <_> - - - - <_> - 0 0 18 6 -1. - <_> - 9 0 9 6 2. - 0 - 0.2480666041374207 - -0.0363661609590054 - 0.1545974016189575 - <_> - - <_> - - - - <_> - 5 8 9 3 -1. - <_> - 5 9 9 1 3. - 0 - 0.0107518397271633 - -0.0561991594731808 - 0.0919531509280205 - <_> - - <_> - - - - <_> - 9 2 8 1 -1. - <_> - 9 2 4 1 2. - 1 - -0.1040994003415108 - 0.2615548074245453 - -0.0220737308263779 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 9 1 1 2 2. - 1 - 3.4987339749932289e-003 - -0.0345944389700890 - 0.0525442212820053 - <_> - - <_> - - - - <_> - 0 0 6 4 -1. - <_> - 0 0 3 2 2. - <_> - 3 2 3 2 2. - 0 - -0.0187893696129322 - 0.1442369073629379 - -0.0376270711421967 - <_> - - <_> - - - - <_> - 8 0 9 9 -1. - <_> - 11 3 3 3 9. - 0 - 0.0237853694707155 - -0.0141420001164079 - 0.0405883789062500 - <_> - - <_> - - - - <_> - 1 0 9 9 -1. - <_> - 4 3 3 3 9. - 0 - -0.5359470248222351 - -0.3114108145236969 - 0.0168340392410755 - <_> - - <_> - - - - <_> - 15 11 3 1 -1. - <_> - 16 11 1 1 3. - 0 - -9.9058146588504314e-005 - 0.1165444031357765 - -0.0948451086878777 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 3 0 2 2 2. - 0 - 5.1509789191186428e-003 - 0.0247672796249390 - -0.2117238044738770 - <_> - - <_> - - - - <_> - 6 2 12 3 -1. - <_> - 6 3 12 1 3. - 0 - -0.0246658101677895 - 0.0897385403513908 - -0.0252305306494236 - <_> - - <_> - - - - <_> - 0 11 3 1 -1. - <_> - 1 11 1 1 3. - 0 - -1.0207219747826457e-004 - 0.0712431967258453 - -0.0695428922772408 - <_> - - <_> - - - - <_> - 16 10 1 2 -1. - <_> - 16 11 1 1 2. - 0 - 8.9753637439571321e-005 - -0.0641386732459068 - 0.0345887802541256 - <_> - - <_> - - - - <_> - 0 10 2 2 -1. - <_> - 0 10 1 1 2. - <_> - 1 11 1 1 2. - 0 - 7.5129319156985730e-005 - -0.0709985122084618 - 0.0692985430359840 - <_> - - <_> - - - - <_> - 17 10 1 2 -1. - <_> - 17 11 1 1 2. - 0 - 0.0126702096313238 - 1.9961479119956493e-003 - -0.6185489296913147 - <_> - - <_> - - - - <_> - 0 10 1 2 -1. - <_> - 0 11 1 1 2. - 0 - 1.3350560038816184e-004 - -0.0939981266856194 - 0.0603710711002350 - <_> - - <_> - - - - <_> - 15 8 3 1 -1. - <_> - 16 9 1 1 3. - 1 - 3.5089589655399323e-003 - -0.0430766604840755 - 0.0694756135344505 - <_> - - <_> - - - - <_> - 3 8 1 3 -1. - <_> - 2 9 1 1 3. - 1 - 5.0673130899667740e-003 - -0.0515751503407955 - 0.1206697002053261 - <_> - - <_> - - - - <_> - 9 3 9 6 -1. - <_> - 12 5 3 2 9. - 0 - -0.4943839013576508 - -0.3359481096267700 - 3.4810409415513277e-003 - <_> - - <_> - - - - <_> - 0 3 9 6 -1. - <_> - 3 5 3 2 9. - 0 - 0.3180195093154907 - -0.0153783401474357 - 0.3391914069652557 - <_> - - <_> - - - - <_> - 12 3 1 6 -1. - <_> - 12 5 1 2 3. - 0 - -0.0351306609809399 - 0.1859847009181976 - -0.0189941208809614 - <_> - - <_> - - - - <_> - 3 3 2 1 -1. - <_> - 4 3 1 1 2. - 0 - -1.0103350359713659e-004 - 0.0591298602521420 - -0.0865357294678688 - <_> - - <_> - - - - <_> - 5 2 12 2 -1. - <_> - 8 2 6 2 2. - 0 - -0.0737898126244545 - -0.1897754073143005 - 3.4424799960106611e-003 - <_> - - <_> - - - - <_> - 1 2 12 2 -1. - <_> - 4 2 6 2 2. - 0 - 0.0484847389161587 - -0.0191279202699661 - 0.3373787999153137 - <_> - - <_> - - - - <_> - 9 1 8 11 -1. - <_> - 9 1 4 11 2. - 0 - -0.3295015990734100 - -0.2467179000377655 - 8.9904768392443657e-003 - <_> - - <_> - - - - <_> - 1 1 8 11 -1. - <_> - 5 1 4 11 2. - 0 - 0.0519321300089359 - 0.0298863500356674 - -0.1766546964645386 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 10 5 2 6 3. - 0 - -0.0478289984166622 - 0.1335633993148804 - -0.0222636293619871 - <_> - - <_> - - - - <_> - 4 7 2 3 -1. - <_> - 4 7 1 3 2. - 1 - 6.8820808082818985e-003 - 0.0262108203023672 - -0.2010024935007095 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 7.0850020274519920e-003 - 7.2960550896823406e-003 - -0.2237119972705841 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - -0.0276956800371408 - 0.5093744993209839 - -0.0101297600194812 - <_> - - <_> - - - - <_> - 9 11 4 1 -1. - <_> - 10 11 2 1 2. - 0 - -3.7936570588499308e-003 - -0.2736755907535553 - 0.0228881407529116 - <_> - - <_> - - - - <_> - 4 7 6 5 -1. - <_> - 6 7 2 5 3. - 0 - 0.0664900466799736 - -0.0177679192274809 - 0.3024312853813171 - <_> - - <_> - - - - <_> - 13 8 5 4 -1. - <_> - 13 9 5 2 2. - 0 - 0.0244923494756222 - 0.0161996204406023 - -0.1805908977985382 - <_> - - <_> - - - - <_> - 0 8 5 4 -1. - <_> - 0 9 5 2 2. - 0 - 0.0392244905233383 - 6.2305349856615067e-003 - -0.7274122238159180 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 6 1 1 3. - 1 - -3.9555127732455730e-003 - 0.0832375064492226 - -0.0599719583988190 - <_> - - <_> - - - - <_> - 5 5 1 3 -1. - <_> - 4 6 1 1 3. - 1 - -0.0401174798607826 - -0.8991225957870483 - 5.7570450007915497e-003 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 7 10 4 1 3. - 0 - 0.0373459383845329 - -0.0102782202884555 - 0.5561997890472412 - <_> - - <_> - - - - <_> - 5 9 2 2 -1. - <_> - 5 9 1 1 2. - <_> - 6 10 1 1 2. - 0 - 3.5555940121412277e-003 - 0.0166571494191885 - -0.3364852964878082 - <_> - - <_> - - - - <_> - 14 2 3 1 -1. - <_> - 15 2 1 1 3. - 0 - -1.7665129853412509e-003 - 0.1198145970702171 - -0.0396248809993267 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 9 1 1 3. - 1 - 4.8014218918979168e-003 - 0.0343171209096909 - -0.1424250006675720 - <_> - - <_> - - - - <_> - 11 10 2 1 -1. - <_> - 11 10 1 1 2. - 0 - -4.8842090182006359e-003 - -0.2405641973018646 - 5.4772831499576569e-003 - <_> - - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - 1.1965839803451672e-004 - -0.0651118308305740 - 0.0911865308880806 - <_> - - <_> - - - - <_> - 4 10 14 2 -1. - <_> - 11 10 7 1 2. - <_> - 4 11 7 1 2. - 0 - 0.0614632107317448 - 2.2536460310220718e-003 - -0.5860543847084045 - <_> - - <_> - - - - <_> - 0 10 14 2 -1. - <_> - 0 10 7 1 2. - <_> - 7 11 7 1 2. - 0 - 6.9882362149655819e-003 - -0.0516327209770679 - 0.1006963029503822 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - -0.0152486404404044 - -0.3964903056621552 - 7.3884390294551849e-003 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -9.1895330115221441e-005 - 0.0669767707586288 - -0.0695802271366119 - <_> - - <_> - - - - <_> - 2 0 15 3 -1. - <_> - 7 0 5 3 3. - 0 - -0.0380731709301472 - 0.0716788172721863 - -0.0542189404368401 - <_> - - <_> - - - - <_> - 5 1 7 3 -1. - <_> - 5 2 7 1 3. - 0 - 0.0602137409150600 - -0.0179180298000574 - 0.2827722132205963 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.1608110507950187e-003 - -0.1359837949275971 - 0.0295908600091934 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 11 2 1 2. - 0 - -1.8159779720008373e-003 - 0.1769666969776154 - -0.0339061692357063 - <_> - - <_> - - - - <_> - 10 10 1 2 -1. - <_> - 10 11 1 1 2. - 0 - 5.7966040913015604e-004 - -0.0382490195333958 - 0.0241343490779400 - <_> - - <_> - - - - <_> - 0 2 3 1 -1. - <_> - 1 2 1 1 3. - 0 - -9.4094357336871326e-005 - 0.0682957619428635 - -0.0686579570174217 - <_> - - <_> - - - - <_> - 14 1 4 3 -1. - <_> - 15 1 2 3 2. - 0 - 0.0182331502437592 - -9.2594744637608528e-003 - 0.2203055024147034 - <_> - - <_> - - - - <_> - 0 1 4 3 -1. - <_> - 1 1 2 3 2. - 0 - -0.0219090394675732 - -0.4080224931240082 - 0.0130471400916576 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -8.4120110841467977e-005 - 0.0465093888342381 - -0.0440796911716461 - <_> - - <_> - - - - <_> - 6 3 2 1 -1. - <_> - 6 3 1 1 2. - 1 - 3.1046951335156336e-005 - -0.0899138003587723 - 0.0489123500883579 - <_> - - <_> - - - - <_> - 15 4 2 2 -1. - <_> - 16 4 1 1 2. - <_> - 15 5 1 1 2. - 0 - 2.5289219338446856e-003 - -0.0235427394509315 - 0.1547923982143402 - <_> - - <_> - - - - <_> - 0 0 18 4 -1. - <_> - 0 0 9 2 2. - <_> - 9 2 9 2 2. - 0 - -0.1294097006320953 - -0.3973000943660736 - 0.0126067101955414 - <_> - - <_> - - - - <_> - 14 3 2 3 -1. - <_> - 13 4 2 1 3. - 1 - 0.0128587195649743 - -0.0362225584685802 - 0.1621775031089783 - <_> - - <_> - - - - <_> - 7 10 1 2 -1. - <_> - 7 11 1 1 2. - 0 - 1.1377360351616517e-004 - -0.1077087968587875 - 0.0467652194201946 - <_> - - <_> - - - - <_> - 14 3 2 3 -1. - <_> - 13 4 2 1 3. - 1 - -0.0293912198394537 - 0.2289258986711502 - -0.0340899489820004 - <_> - - <_> - - - - <_> - 2 4 9 7 -1. - <_> - 5 4 3 7 3. - 0 - 0.1751185953617096 - -0.0181707795709372 - 0.2603265941143036 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 11 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - 1.3814390404149890e-003 - 0.0335002802312374 - -0.1677235066890717 - <_> - - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 6 11 1 1 2. - 0 - -1.0088009730679914e-004 - 0.0699355229735374 - -0.0701637491583824 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -5.2363821305334568e-003 - -0.3871470987796783 - 3.8488220889121294e-003 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 1.1944399448111653e-003 - -0.0401751883327961 - 0.1186838001012802 - <_> - - <_> - - - - <_> - 9 10 2 1 -1. - <_> - 9 10 1 1 2. - 0 - -1.0081879736389965e-004 - 0.0537537410855293 - -0.0563947707414627 - <_> - - <_> - - - - <_> - 7 10 3 1 -1. - <_> - 8 10 1 1 3. - 0 - 1.2026460171910003e-004 - -0.0627641826868057 - 0.0771231427788734 - <_> - - <_> - - - - <_> - 9 11 4 1 -1. - <_> - 10 11 2 1 2. - 0 - -1.1322049977025017e-004 - 0.0562352202832699 - -0.0541092306375504 - <_> - - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 6 11 1 1 2. - 0 - 1.1329459812259302e-004 - -0.0560050718486309 - 0.0798556208610535 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - -1.0272819781675935e-004 - 0.0509867295622826 - -0.0456718504428864 - <_> - - <_> - - - - <_> - 7 11 3 1 -1. - <_> - 8 11 1 1 3. - 0 - -9.1088571934960783e-005 - 0.0854120030999184 - -0.0780271887779236 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - 2.6975329965353012e-003 - 0.0113609898835421 - -0.1308414041996002 - <_> - - <_> - - - - <_> - 0 8 18 4 -1. - <_> - 0 8 9 2 2. - <_> - 9 10 9 2 2. - 0 - 0.1156395971775055 - 0.0131410304456949 - -0.3490034937858582 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 1.1328439723001793e-004 - -0.0467782393097878 - 0.0665601268410683 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - 9.8681906820274889e-005 - -0.0631256178021431 - 0.0736744776368141 - <_> - - <_> - - - - <_> - 7 11 6 1 -1. - <_> - 9 11 2 1 3. - 0 - -6.7920819856226444e-003 - -0.0864722430706024 - 0.0136657496914268 - <_> - - <_> - - - - <_> - 6 11 6 1 -1. - <_> - 8 11 2 1 3. - 0 - 7.4815307743847370e-003 - 0.0189338698983192 - -0.2470030933618546 - <_> - - <_> - - - - <_> - 15 4 2 2 -1. - <_> - 16 4 1 1 2. - <_> - 15 5 1 1 2. - 0 - -9.6308911452069879e-005 - 0.0398688018321991 - -0.0444242805242538 - <_> - - <_> - - - - <_> - 2 3 3 6 -1. - <_> - 3 5 1 2 9. - 0 - -0.1409496963024139 - -0.8144829273223877 - 5.2730259485542774e-003 - <_> - - <_> - - - - <_> - 14 3 2 3 -1. - <_> - 13 4 2 1 3. - 1 - 6.3983728177845478e-003 - -0.0234888195991516 - 0.0646706670522690 - <_> - - <_> - - - - <_> - 4 3 3 2 -1. - <_> - 5 4 1 2 3. - 1 - -0.0252398904412985 - 0.1693976074457169 - -0.0280494391918182 - <_> - - <_> - - - - <_> - 10 2 8 6 -1. - <_> - 14 2 4 3 2. - <_> - 10 5 4 3 2. - 0 - 0.1742652952671051 - 2.0990138873457909e-003 - -0.5828589797019959 - <_> - - <_> - - - - <_> - 0 2 8 6 -1. - <_> - 0 2 4 3 2. - <_> - 4 5 4 3 2. - 0 - 0.1317418068647385 - 0.0119872698560357 - -0.4519009888172150 - <_> - - <_> - - - - <_> - 15 4 2 2 -1. - <_> - 16 4 1 1 2. - <_> - 15 5 1 1 2. - 0 - 1.1509929754538462e-004 - -0.0481133498251438 - 0.0680357292294502 - <_> - - <_> - - - - <_> - 1 4 2 2 -1. - <_> - 1 4 1 1 2. - <_> - 2 5 1 1 2. - 0 - 9.7694486612454057e-005 - -0.0656652525067329 - 0.0814810618758202 - <_> - - <_> - - - - <_> - 14 4 3 8 -1. - <_> - 14 8 3 4 2. - 0 - 8.2227466627955437e-003 - -0.1136455014348030 - 0.0199991893023252 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 7 10 4 1 2. - 0 - -7.2657060809433460e-003 - 0.1964225023984909 - -0.0234439708292484 - <_> - - <_> - - - - <_> - 16 2 2 4 -1. - <_> - 16 3 2 2 2. - 0 - -0.0138209303840995 - -0.3510661125183106 - 0.0219971500337124 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 3 2 2 2. - 0 - 3.1349230557680130e-003 - 0.0349419005215168 - -0.1172460988163948 - <_> - - <_> - - - - <_> - 14 0 1 12 -1. - <_> - 14 6 1 6 2. - 0 - 0.0718465596437454 - 0.0118787195533514 - -0.3486002981662750 - <_> - - <_> - - - - <_> - 6 2 1 4 -1. - <_> - 5 3 1 2 2. - 1 - -0.0148654896765947 - -0.2000685036182404 - 0.0219756998121738 - <_> - - <_> - - - - <_> - 14 0 4 6 -1. - <_> - 16 0 2 3 2. - <_> - 14 3 2 3 2. - 0 - 0.0224161595106125 - -0.0143699599429965 - 0.1235324963927269 - <_> - - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 0 0 2 3 2. - <_> - 2 3 2 3 2. - 0 - -8.5451323539018631e-003 - 0.0965315029025078 - -0.0560366883873940 - <_> - - <_> - - - - <_> - 15 0 3 10 -1. - <_> - 16 0 1 10 3. - 0 - -0.0224419105798006 - -0.1770517975091934 - 0.0155712300911546 - <_> - - <_> - - - - <_> - 4 2 3 2 -1. - <_> - 5 3 1 2 3. - 1 - 7.0013068616390228e-003 - -0.0404384918510914 - 0.1099677979946137 - <_> - - <_> - - - - <_> - 9 3 8 1 -1. - <_> - 11 3 4 1 2. - 0 - 0.0226825494319201 - 6.6524217836558819e-003 - -0.1840651929378510 - <_> - - <_> - - - - <_> - 1 3 8 1 -1. - <_> - 3 3 4 1 2. - 0 - -2.5074880104511976e-003 - 0.0579352304339409 - -0.0787824392318726 - <_> - - <_> - - - - <_> - 14 0 4 2 -1. - <_> - 14 0 4 1 2. - 1 - -0.0143212201073766 - 0.1282124072313309 - -0.0250921398401260 - <_> - - <_> - - - - <_> - 1 1 12 2 -1. - <_> - 1 1 6 1 2. - <_> - 7 2 6 1 2. - 0 - -4.5356648042798042e-003 - 0.0917360335588455 - -0.0579336211085320 - <_> - - <_> - - - - <_> - 17 0 1 9 -1. - <_> - 17 3 1 3 3. - 0 - 0.0194090604782104 - 0.0223368108272552 - -0.1605166047811508 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 1 2 1 2. - 0 - -1.8575839931145310e-003 - 0.0672148764133453 - -0.0716848224401474 - <_> - - <_> - - - - <_> - 10 0 7 2 -1. - <_> - 10 1 7 1 2. - 0 - 0.0141233503818512 - -0.0183407906442881 - 0.0655035823583603 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - 9.8213102319277823e-005 - -0.0616786107420921 - 0.0733509212732315 - -1.3818249702453613 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 8 3 3 2 2. - 1 - -0.0338823609054089 - 0.2023905068635941 - -0.2294656038284302 - <_> - - <_> - - - - <_> - 12 0 6 1 -1. - <_> - 12 0 3 1 2. - 0 - 5.7477080263197422e-003 - -0.0509406290948391 - 0.1218611001968384 - <_> - - <_> - - - - <_> - 0 0 6 1 -1. - <_> - 3 0 3 1 2. - 0 - -2.9972488991916180e-003 - 0.1065756976604462 - -0.2507000863552094 - <_> - - <_> - - - - <_> - 3 3 12 4 -1. - <_> - 3 4 12 2 2. - 0 - -0.0493759997189045 - 0.2235513031482697 - -0.0938506424427032 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 6 1 1 3. - 1 - -8.8743809610605240e-003 - 0.1882819980382919 - -0.1073134019970894 - <_> - - <_> - - - - <_> - 3 1 15 3 -1. - <_> - 8 1 5 3 3. - 0 - -0.0150414099916816 - 0.0538447797298431 - -0.0817029029130936 - <_> - - <_> - - - - <_> - 5 6 3 3 -1. - <_> - 4 7 3 1 3. - 1 - -0.0118035497143865 - 0.2060492038726807 - -0.0741482973098755 - <_> - - <_> - - - - <_> - 5 1 8 2 -1. - <_> - 5 1 4 2 2. - 0 - -8.9601287618279457e-003 - 0.0987984389066696 - -0.1481903940439224 - <_> - - <_> - - - - <_> - 7 5 3 2 -1. - <_> - 8 5 1 2 3. - 0 - -8.7451227009296417e-003 - 0.2251446992158890 - -0.0802809968590736 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 9 0 2 8 2. - 1 - -0.1303977072238922 - -0.1951210051774979 - 0.0297076702117920 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 0 8 2 2. - 1 - 0.0940735563635826 - 0.0446697995066643 - -0.3460465967655182 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 0.0111145703122020 - 8.7716905400156975e-003 - -0.3636988103389740 - <_> - - <_> - - - - <_> - 7 3 4 3 -1. - <_> - 6 4 4 1 3. - 1 - -0.0285642594099045 - 0.1779592931270599 - -0.0701572000980377 - <_> - - <_> - - - - <_> - 13 2 5 8 -1. - <_> - 13 4 5 4 2. - 0 - -0.0403057001531124 - 0.0614082813262939 - -0.1147043034434319 - <_> - - <_> - - - - <_> - 0 0 2 6 -1. - <_> - 1 0 1 6 2. - 0 - -2.6785670779645443e-003 - 0.0700545981526375 - -0.2123523056507111 - <_> - - <_> - - - - <_> - 11 5 2 6 -1. - <_> - 12 5 1 3 2. - <_> - 11 8 1 3 2. - 0 - -0.0124763697385788 - 0.2541719079017639 - -0.0367397293448448 - <_> - - <_> - - - - <_> - 5 5 2 6 -1. - <_> - 5 5 1 3 2. - <_> - 6 8 1 3 2. - 0 - -3.7886248901486397e-003 - 0.1847607940435410 - -0.0626496970653534 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 8 8 6 3 2. - 0 - 0.0473003312945366 - -0.1839402019977570 - 0.0202179793268442 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 2 0 2 5 3. - 0 - -0.0519646294414997 - -0.3371193110942841 - 0.0308893099427223 - <_> - - <_> - - - - <_> - 3 10 12 2 -1. - <_> - 3 11 12 1 2. - 0 - 6.8056071177124977e-003 - -0.1525437980890274 - 0.0630845725536346 - <_> - - <_> - - - - <_> - 1 9 1 3 -1. - <_> - 1 10 1 1 3. - 0 - 2.8190209995955229e-003 - 0.0310949701815844 - -0.2683776021003723 - <_> - - <_> - - - - <_> - 4 0 10 4 -1. - <_> - 4 1 10 2 2. - 0 - -0.0669122189283371 - 0.3112691044807434 - -0.0328225009143353 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 6 1 6 2 2. - 0 - 0.0174880996346474 - -0.0884957537055016 - 0.1404712945222855 - <_> - - <_> - - - - <_> - 17 0 1 4 -1. - <_> - 17 1 1 2 2. - 0 - 3.4225170966237783e-003 - 0.0422041304409504 - -0.1985697001218796 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 1 1 2 2. - 0 - -7.7762128785252571e-003 - -0.3810865879058838 - 0.0286064203828573 - <_> - - <_> - - - - <_> - 7 0 5 3 -1. - <_> - 7 1 5 1 3. - 0 - -0.0126154003664851 - 0.1600296944379807 - -0.0572896301746368 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 10 2 2 1 3. - 1 - -0.0421723313629627 - 0.2769444882869721 - -0.0336120016872883 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - -0.0297900792211294 - -0.2913467884063721 - 0.0134719703346491 - <_> - - <_> - - - - <_> - 3 1 6 4 -1. - <_> - 5 1 2 4 3. - 0 - -0.0368420407176018 - -0.2936111092567444 - 0.0295197200030088 - <_> - - <_> - - - - <_> - 6 0 6 4 -1. - <_> - 8 0 2 4 3. - 0 - -0.0334961004555225 - -0.3866539001464844 - 0.0228297393769026 - <_> - - <_> - - - - <_> - 3 0 3 2 -1. - <_> - 3 0 3 1 2. - 1 - 0.0164872203022242 - 0.0276451706886292 - -0.3067953884601593 - <_> - - <_> - - - - <_> - 10 5 3 3 -1. - <_> - 11 5 1 3 3. - 0 - -7.6681151986122131e-003 - 0.1963977962732315 - -0.0564779005944729 - <_> - - <_> - - - - <_> - 5 5 4 3 -1. - <_> - 6 5 2 3 2. - 0 - -8.4842611104249954e-003 - 0.1465914994478226 - -0.0587921887636185 - <_> - - <_> - - - - <_> - 13 2 5 9 -1. - <_> - 13 5 5 3 3. - 0 - -6.6472780890762806e-003 - 0.0245392508804798 - -0.1250316947698593 - <_> - - <_> - - - - <_> - 0 2 5 8 -1. - <_> - 0 4 5 4 2. - 0 - -4.3351850472390652e-003 - 0.0488904602825642 - -0.1897149980068207 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - -0.0167089905589819 - -0.0840148031711578 - 0.0142561895772815 - <_> - - <_> - - - - <_> - 2 0 10 2 -1. - <_> - 2 0 5 1 2. - <_> - 7 1 5 1 2. - 0 - 0.0137307196855545 - -0.0592450685799122 - 0.1666802018880844 - <_> - - <_> - - - - <_> - 13 3 5 2 -1. - <_> - 13 4 5 1 2. - 0 - -0.0497476682066917 - -0.5022218227386475 - -7.9818630183581263e-005 - <_> - - <_> - - - - <_> - 0 3 5 2 -1. - <_> - 0 4 5 1 2. - 0 - -0.0153985200449824 - -0.2470442950725555 - 0.0378574803471565 - <_> - - <_> - - - - <_> - 14 0 1 3 -1. - <_> - 13 1 1 1 3. - 1 - 6.9194408133625984e-003 - -0.0254834406077862 - 0.0596691295504570 - <_> - - <_> - - - - <_> - 4 0 3 1 -1. - <_> - 5 1 1 1 3. - 1 - 7.9743033275008202e-003 - -0.0454620011150837 - 0.2177440971136093 - <_> - - <_> - - - - <_> - 7 2 10 2 -1. - <_> - 12 2 5 1 2. - <_> - 7 3 5 1 2. - 0 - 0.0159872695803642 - -0.0262031499296427 - 0.1660802960395813 - <_> - - <_> - - - - <_> - 5 9 4 3 -1. - <_> - 6 9 2 3 2. - 0 - -0.0114838099107146 - -0.4275760054588318 - 0.0196345709264278 - <_> - - <_> - - - - <_> - 14 2 3 2 -1. - <_> - 15 3 1 2 3. - 1 - -0.0209100507199764 - -0.1916399002075195 - 0.0187674108892679 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - -9.1570820659399033e-003 - -0.3391259908676148 - 0.0220938809216022 - <_> - - <_> - - - - <_> - 0 10 18 2 -1. - <_> - 6 10 6 2 3. - 0 - -0.0446026585996151 - 0.1153429001569748 - -0.0715335980057716 - <_> - - <_> - - - - <_> - 8 2 6 1 -1. - <_> - 10 4 2 1 3. - 1 - -0.0338394306600094 - 0.0971396565437317 - -0.0787356272339821 - <_> - - <_> - - - - <_> - 10 0 1 4 -1. - <_> - 9 1 1 2 2. - 1 - 0.0225536096841097 - 8.4229987114667892e-003 - -0.1570526063442230 - <_> - - <_> - - - - <_> - 4 1 3 4 -1. - <_> - 5 2 1 4 3. - 1 - -0.0295851808041334 - 0.1958663016557694 - -0.0429201908409595 - <_> - - <_> - - - - <_> - 12 5 4 3 -1. - <_> - 13 5 2 3 2. - 0 - -4.5955018140375614e-003 - 0.1202234029769898 - -0.0838829874992371 - <_> - - <_> - - - - <_> - 3 1 3 3 -1. - <_> - 4 1 1 3 3. - 0 - -9.5542743802070618e-003 - -0.3151493072509766 - 0.0211198199540377 - <_> - - <_> - - - - <_> - 3 1 14 4 -1. - <_> - 10 1 7 2 2. - <_> - 3 3 7 2 2. - 0 - -0.0803688019514084 - 0.1392085999250412 - -0.0208025593310595 - <_> - - <_> - - - - <_> - 2 5 4 3 -1. - <_> - 3 5 2 3 2. - 0 - -7.9689081758260727e-003 - 0.1237114965915680 - -0.0552087202668190 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 11 6 2 2 2. - 0 - -6.4949761144816875e-003 - 0.1759853959083557 - -0.0498577393591404 - <_> - - <_> - - - - <_> - 5 5 5 6 -1. - <_> - 5 8 5 3 2. - 0 - 0.0151453902944922 - -0.2686654925346375 - 0.0277689993381500 - <_> - - <_> - - - - <_> - 7 3 4 6 -1. - <_> - 7 6 4 3 2. - 0 - -0.1065445020794869 - 0.3889439105987549 - -0.0219894107431173 - <_> - - <_> - - - - <_> - 4 4 10 2 -1. - <_> - 4 5 10 1 2. - 0 - 0.0180476196110249 - -0.0479870513081551 - 0.1813859939575195 - <_> - - <_> - - - - <_> - 11 6 3 2 -1. - <_> - 12 6 1 2 3. - 0 - -6.9957501254975796e-003 - 0.1074696034193039 - -0.0226500295102596 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.0456600284669548e-004 - 0.0587001889944077 - -0.1229956001043320 - <_> - - <_> - - - - <_> - 7 4 6 8 -1. - <_> - 7 6 6 4 2. - 0 - 0.0937326774001122 - 0.0150365298613906 - -0.2152476012706757 - <_> - - <_> - - - - <_> - 0 7 2 4 -1. - <_> - 0 8 2 2 2. - 0 - 6.5442179329693317e-003 - 0.0361783094704151 - -0.1966421008110046 - <_> - - <_> - - - - <_> - 11 6 3 2 -1. - <_> - 12 6 1 2 3. - 0 - 6.9820377975702286e-003 - -0.0275315903127193 - 0.0992078930139542 - <_> - - <_> - - - - <_> - 0 2 2 8 -1. - <_> - 0 2 1 4 2. - <_> - 1 6 1 4 2. - 0 - -3.6357950884848833e-003 - 0.1232554987072945 - -0.0540689118206501 - <_> - - <_> - - - - <_> - 14 0 4 4 -1. - <_> - 15 0 2 4 2. - 0 - -0.0171332191675901 - -0.1571476012468338 - 0.0112576903775334 - <_> - - <_> - - - - <_> - 0 0 4 4 -1. - <_> - 1 0 2 4 2. - 0 - 6.4856321550905704e-003 - 0.0357328690588474 - -0.1930260062217712 - <_> - - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 8 2 1 2. - 1 - 0.0154557703062892 - 7.3288627900183201e-003 - -0.3383303880691528 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 6 8 1 2 2. - 1 - -0.0158088691532612 - -0.2245627045631409 - 0.0294516701251268 - <_> - - <_> - - - - <_> - 11 6 3 2 -1. - <_> - 12 6 1 2 3. - 0 - -0.0324714891612530 - -0.5580310821533203 - 2.8975890018045902e-003 - <_> - - <_> - - - - <_> - 4 6 3 2 -1. - <_> - 5 6 1 2 3. - 0 - -3.9141788147389889e-003 - 0.1402135938405991 - -0.0505544207990170 - <_> - - <_> - - - - <_> - 10 9 4 3 -1. - <_> - 11 9 2 3 2. - 0 - -0.0109443301334977 - -0.3515453934669495 - 0.0184004101902246 - <_> - - <_> - - - - <_> - 2 10 2 2 -1. - <_> - 2 10 1 1 2. - <_> - 3 11 1 1 2. - 0 - 1.0616300278343260e-004 - -0.0836856514215469 - 0.0768900290131569 - <_> - - <_> - - - - <_> - 10 9 4 3 -1. - <_> - 11 9 2 3 2. - 0 - 6.1605898663401604e-003 - 0.0294530093669891 - -0.1955859959125519 - <_> - - <_> - - - - <_> - 4 7 2 1 -1. - <_> - 5 7 1 1 2. - 0 - 8.2721293438225985e-005 - -0.0800766274333000 - 0.0837494730949402 - <_> - - <_> - - - - <_> - 12 5 1 3 -1. - <_> - 11 6 1 1 3. - 1 - -8.6001930758357048e-003 - 0.1014314964413643 - -0.0460386686027050 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - -2.0330580882728100e-003 - 0.0905255228281021 - -0.0838051810860634 - <_> - - <_> - - - - <_> - 6 6 12 4 -1. - <_> - 12 6 6 2 2. - <_> - 6 8 6 2 2. - 0 - 0.0793746709823608 - 0.0184124000370502 - -0.1255899071693420 - <_> - - <_> - - - - <_> - 4 9 4 3 -1. - <_> - 5 9 2 3 2. - 0 - -0.0117064695805311 - -0.3456414043903351 - 0.0178995206952095 - <_> - - <_> - - - - <_> - 3 1 15 3 -1. - <_> - 8 1 5 3 3. - 0 - 0.0759916380047798 - -0.0171069093048573 - 0.0679803788661957 - <_> - - <_> - - - - <_> - 0 1 15 3 -1. - <_> - 5 1 5 3 3. - 0 - -0.0505471006035805 - 0.0824068635702133 - -0.0994781181216240 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - -0.0315869301557541 - -0.2531143128871918 - 0.0216704607009888 - <_> - - <_> - - - - <_> - 4 0 6 5 -1. - <_> - 6 0 2 5 3. - 0 - -0.0386167503893375 - -0.2513645887374878 - 0.0306409504264593 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 11 1 2 1 2. - 0 - -2.8309430927038193e-003 - 0.0586214289069176 - -0.0346746593713760 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 5 1 3 1 2. - 0 - 3.4507629461586475e-003 - -0.0596966892480850 - 0.1428205966949463 - <_> - - <_> - - - - <_> - 8 7 2 3 -1. - <_> - 8 8 2 1 3. - 0 - -6.4924471080303192e-003 - 0.1606030017137528 - -0.0395815707743168 - <_> - - <_> - - - - <_> - 0 7 2 3 -1. - <_> - 0 8 2 1 3. - 0 - -8.9043304324150085e-003 - -0.2934117913246155 - 0.0201715491712093 - <_> - - <_> - - - - <_> - 6 4 6 3 -1. - <_> - 8 5 2 1 9. - 0 - -0.0279516205191612 - 0.0720930323004723 - -0.0811423882842064 - <_> - - <_> - - - - <_> - 7 8 2 1 -1. - <_> - 8 8 1 1 2. - 0 - 7.9951416410040110e-005 - -0.0677469521760941 - 0.0934612080454826 - <_> - - <_> - - - - <_> - 7 3 4 2 -1. - <_> - 7 4 4 1 2. - 0 - 0.0111028598621488 - -0.0280354097485542 - 0.2270462065935135 - <_> - - <_> - - - - <_> - 3 7 3 2 -1. - <_> - 3 7 3 1 2. - 1 - 0.0135522596538067 - -0.0210366602987051 - 0.2690554857254028 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 0.0141261704266071 - 0.0143263097852468 - -0.2223462015390396 - <_> - - <_> - - - - <_> - 5 2 4 3 -1. - <_> - 6 2 2 3 2. - 0 - 4.2146299965679646e-003 - 0.0370770618319511 - -0.1536048948764801 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 15 5 1 4 3. - 0 - -2.0096069201827049e-003 - 0.1090234965085983 - -0.0855122730135918 - <_> - - <_> - - - - <_> - 3 2 11 3 -1. - <_> - 3 3 11 1 3. - 0 - 0.0183028206229210 - -0.0568241290748119 - 0.1052284017205238 - <_> - - <_> - - - - <_> - 13 0 4 2 -1. - <_> - 14 1 2 2 2. - 1 - 6.5802307799458504e-003 - 0.0339594595134258 - -0.0703420788049698 - <_> - - <_> - - - - <_> - 1 5 3 4 -1. - <_> - 2 5 1 4 3. - 0 - -3.5527150612324476e-003 - 0.0924384966492653 - -0.0680148974061012 - <_> - - <_> - - - - <_> - 13 0 4 3 -1. - <_> - 14 1 2 3 2. - 1 - 0.0188330095261335 - 0.0161422807723284 - -0.0799089372158051 - <_> - - <_> - - - - <_> - 4 3 1 2 -1. - <_> - 4 3 1 1 2. - 1 - 6.4154029823839664e-003 - 0.0247674006968737 - -0.2494422942399979 - <_> - - <_> - - - - <_> - 17 8 1 3 -1. - <_> - 17 9 1 1 3. - 0 - 4.6186340041458607e-003 - 0.0245362203568220 - -0.3133564889431000 - <_> - - <_> - - - - <_> - 0 5 12 7 -1. - <_> - 6 5 6 7 2. - 0 - 0.1188485994935036 - 0.0209803692996502 - -0.2581875920295715 - <_> - - <_> - - - - <_> - 11 8 2 1 -1. - <_> - 11 8 1 1 2. - 0 - 1.0991309682140127e-004 - -0.0371808111667633 - 0.0466539412736893 - <_> - - <_> - - - - <_> - 0 1 18 10 -1. - <_> - 9 1 9 10 2. - 0 - 0.6173641085624695 - -0.0214671306312084 - 0.3179117143154144 - <_> - - <_> - - - - <_> - 7 0 4 10 -1. - <_> - 7 0 2 10 2. - 0 - 0.0384084284305573 - -0.0351275987923145 - 0.1854905039072037 - <_> - - <_> - - - - <_> - 1 0 14 4 -1. - <_> - 1 0 7 2 2. - <_> - 8 2 7 2 2. - 0 - 0.0535368397831917 - -0.0418954491615295 - 0.1398871988058090 - <_> - - <_> - - - - <_> - 8 4 7 6 -1. - <_> - 8 7 7 3 2. - 0 - 0.0880341231822968 - -0.0683778598904610 - 0.0416932813823223 - <_> - - <_> - - - - <_> - 5 0 9 3 -1. - <_> - 4 1 9 1 3. - 1 - -0.0120016597211361 - 0.0610668212175369 - -0.1032821014523506 - <_> - - <_> - - - - <_> - 8 8 3 3 -1. - <_> - 8 9 3 1 3. - 0 - -4.8769591376185417e-003 - 0.1213096007704735 - -0.0434806793928146 - <_> - - <_> - - - - <_> - 4 3 1 4 -1. - <_> - 4 5 1 2 2. - 0 - -2.9313350096344948e-003 - 0.0986971408128738 - -0.0545285306870937 - <_> - - <_> - - - - <_> - 8 0 4 2 -1. - <_> - 9 0 2 2 2. - 0 - 8.7714530527591705e-003 - 0.0152027802541852 - -0.2723265886306763 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 7 5 1 1 2. - <_> - 8 6 1 1 2. - 0 - 2.5236629880964756e-003 - -0.0352022312581539 - 0.1597099006175995 - <_> - - <_> - - - - <_> - 17 6 1 6 -1. - <_> - 17 9 1 3 2. - 0 - -7.2554531507194042e-003 - -0.3329834938049316 - 0.0176891293376684 - <_> - - <_> - - - - <_> - 0 8 1 3 -1. - <_> - 0 9 1 1 3. - 0 - -5.7377000339329243e-003 - -0.3450056016445160 - 0.0135456901043653 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -1.7369260312989354e-003 - 0.0803874582052231 - -0.0293304100632668 - <_> - - <_> - - - - <_> - 0 5 2 6 -1. - <_> - 1 5 1 6 2. - 0 - 7.4976221658289433e-003 - -0.0292406808584929 - 0.1816447973251343 - <_> - - <_> - - - - <_> - 15 7 3 5 -1. - <_> - 16 7 1 5 3. - 0 - 2.6569119654595852e-003 - -0.0212246607989073 - 0.0317994095385075 - <_> - - <_> - - - - <_> - 0 6 1 6 -1. - <_> - 0 9 1 3 2. - 0 - 1.0299009736627340e-003 - -0.1261347979307175 - 0.0483353808522224 - <_> - - <_> - - - - <_> - 15 7 3 5 -1. - <_> - 16 7 1 5 3. - 0 - 7.3244851082563400e-003 - 0.0112008899450302 - -0.0447182096540928 - <_> - - <_> - - - - <_> - 0 7 3 5 -1. - <_> - 1 7 1 5 3. - 0 - -8.6582284420728683e-003 - 0.1406579017639160 - -0.0430521517992020 - <_> - - <_> - - - - <_> - 15 10 2 2 -1. - <_> - 16 10 1 1 2. - <_> - 15 11 1 1 2. - 0 - 1.1580599675653502e-004 - -0.0729234963655472 - 0.0673857331275940 - <_> - - <_> - - - - <_> - 1 10 2 2 -1. - <_> - 1 10 1 1 2. - <_> - 2 11 1 1 2. - 0 - -1.4025709824636579e-003 - -0.1874566972255707 - 0.0320261903107166 - <_> - - <_> - - - - <_> - 16 2 2 6 -1. - <_> - 16 4 2 2 3. - 0 - 0.0348335802555084 - 0.0128746600821614 - -0.2505807876586914 - <_> - - <_> - - - - <_> - 0 2 2 6 -1. - <_> - 0 4 2 2 3. - 0 - -0.0409640707075596 - -0.3309549093246460 - 0.0153227299451828 - <_> - - <_> - - - - <_> - 16 8 2 1 -1. - <_> - 16 8 1 1 2. - 1 - -9.9130235612392426e-003 - 0.0505889803171158 - -0.0143007002770901 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 8 1 1 2. - 1 - 3.1872559338808060e-003 - -0.0312062501907349 - 0.1851916015148163 - <_> - - <_> - - - - <_> - 16 7 2 3 -1. - <_> - 15 8 2 1 3. - 1 - 1.2019430141663179e-004 - -0.0453361496329308 - 0.0444967895746231 - <_> - - <_> - - - - <_> - 2 7 3 2 -1. - <_> - 3 8 1 2 3. - 1 - 7.7739008702337742e-003 - 0.0316056795418262 - -0.1786414980888367 - <_> - - <_> - - - - <_> - 16 2 2 2 -1. - <_> - 17 2 1 1 2. - <_> - 16 3 1 1 2. - 0 - -2.1307980641722679e-003 - -0.3188408017158508 - 0.0441081412136555 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 1.4493019552901387e-003 - -0.0523897185921669 - 0.1042447015643120 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - -0.1845221072435379 - 0.1759579926729202 - -0.0333869718015194 - <_> - - <_> - - - - <_> - 5 4 1 3 -1. - <_> - 4 5 1 1 3. - 1 - -1.1728370009222999e-004 - 0.0603763908147812 - -0.0882846415042877 - <_> - - <_> - - - - <_> - 12 5 2 4 -1. - <_> - 12 5 1 4 2. - 1 - -0.0199011005461216 - 0.0229723993688822 - -0.0317902415990829 - <_> - - <_> - - - - <_> - 5 4 5 3 -1. - <_> - 4 5 5 1 3. - 1 - 0.0623721405863762 - -0.0225914902985096 - 0.2811095118522644 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 1 2 1 3. - 0 - -3.3517589326947927e-003 - 0.0689097419381142 - -0.0287042800337076 - <_> - - <_> - - - - <_> - 4 7 4 1 -1. - <_> - 5 7 2 1 2. - 0 - -7.4083356594201177e-005 - 0.0833086371421814 - -0.0594450905919075 - <_> - - <_> - - - - <_> - 9 5 3 1 -1. - <_> - 10 5 1 1 3. - 0 - -1.2365039438009262e-003 - 0.0714493617415428 - -0.0419210195541382 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - -1.5120030147954822e-003 - 0.0887956768274307 - -0.0597924999892712 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - 7.4081351049244404e-003 - 8.0022467300295830e-003 - -0.3263536989688873 - <_> - - <_> - - - - <_> - 2 9 2 1 -1. - <_> - 2 9 1 1 2. - 1 - -0.0129171703010798 - -0.3427627980709076 - 0.0135126104578376 - <_> - - <_> - - - - <_> - 12 0 2 3 -1. - <_> - 12 1 2 1 3. - 0 - 5.6006559170782566e-003 - -0.0387778505682945 - 0.1108907982707024 - <_> - - <_> - - - - <_> - 1 4 12 1 -1. - <_> - 7 4 6 1 2. - 0 - 0.0293035991489887 - -0.0252368692308664 - 0.2050002962350845 - <_> - - <_> - - - - <_> - 6 3 6 2 -1. - <_> - 8 3 2 2 3. - 0 - -3.3195200376212597e-004 - 0.0627422407269478 - -0.0964774191379547 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 4 1 2 1 3. - 0 - -4.3038749136030674e-003 - 0.1131367981433868 - -0.0463734492659569 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - -0.0172962099313736 - -0.3834935128688812 - 0.0100169396027923 - <_> - - <_> - - - - <_> - 3 1 12 5 -1. - <_> - 7 1 4 5 3. - 0 - -0.2203014940023422 - -0.3579089939594269 - 0.0131021495908499 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - 0.0179112702608109 - 4.1835359297692776e-003 - -0.2560080885887146 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - -0.0113902604207397 - -0.2658109962940216 - 0.0190572999417782 - <_> - - <_> - - - - <_> - 4 1 10 3 -1. - <_> - 4 2 10 1 3. - 0 - -0.0280784796923399 - 0.1617469936609268 - -0.0324814990162849 - <_> - - <_> - - - - <_> - 8 0 2 3 -1. - <_> - 7 1 2 1 3. - 1 - -0.0195835791528225 - -0.2607037127017975 - 0.0225472003221512 - <_> - - <_> - - - - <_> - 14 10 4 2 -1. - <_> - 15 10 2 2 2. - 0 - 7.3393443017266691e-005 - -0.0546662211418152 - 0.0407672896981239 - <_> - - <_> - - - - <_> - 4 5 9 6 -1. - <_> - 4 8 9 3 2. - 0 - -0.0469952784478664 - -0.4460343122482300 - 0.0111026903614402 - <_> - - <_> - - - - <_> - 14 10 4 2 -1. - <_> - 15 10 2 2 2. - 0 - -1.1355779861332849e-004 - 0.0335563607513905 - -0.0244480799883604 - <_> - - <_> - - - - <_> - 0 10 4 2 -1. - <_> - 1 10 2 2 2. - 0 - 4.7428491525352001e-003 - -0.0338760502636433 - 0.1443267017602921 - <_> - - <_> - - - - <_> - 11 5 1 2 -1. - <_> - 11 6 1 1 2. - 0 - 6.0940310359001160e-003 - -0.0269398000091314 - 0.1838485002517700 - <_> - - <_> - - - - <_> - 0 9 5 2 -1. - <_> - 0 10 5 1 2. - 0 - -7.4838818982243538e-003 - -0.2926619052886963 - 0.0153999496251345 - <_> - - <_> - - - - <_> - 14 9 2 1 -1. - <_> - 14 9 1 1 2. - 1 - 7.8164823353290558e-003 - 9.0713957324624062e-003 - -0.3541418910026550 - <_> - - <_> - - - - <_> - 3 8 1 3 -1. - <_> - 2 9 1 1 3. - 1 - -5.1856059581041336e-003 - 0.1490866988897324 - -0.0382707901299000 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - -0.4847548007965088 - -0.5652968883514404 - 9.0100103989243507e-003 - <_> - - <_> - - - - <_> - 4 0 3 12 -1. - <_> - 5 0 1 12 3. - 0 - -0.0601495690643787 - -0.6645119190216065 - 5.7822549715638161e-003 - <_> - - <_> - - - - <_> - 11 0 2 8 -1. - <_> - 12 0 1 4 2. - <_> - 11 4 1 4 2. - 0 - -0.0321755707263947 - -0.1621474027633667 - 2.4788419250398874e-003 - <_> - - <_> - - - - <_> - 5 0 2 8 -1. - <_> - 5 0 1 4 2. - <_> - 6 4 1 4 2. - 0 - 6.7587220109999180e-003 - -0.0371113084256649 - 0.1314667016267777 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 8 9 2 3 2. - 0 - 0.0128485802561045 - 8.4516126662492752e-003 - -0.5276265144348145 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - 0.0518223717808723 - -0.0220254007726908 - 0.2200472950935364 - <_> - - <_> - - - - <_> - 12 1 4 2 -1. - <_> - 13 2 2 2 2. - 1 - 0.0438695214688778 - 4.6415599063038826e-003 - -0.2968459129333496 - <_> - - <_> - - - - <_> - 6 1 2 4 -1. - <_> - 5 2 2 2 2. - 1 - -0.0282151792198420 - -0.2383546978235245 - 0.0209445301443338 - <_> - - <_> - - - - <_> - 15 3 2 1 -1. - <_> - 15 3 1 1 2. - 0 - 1.1462989496067166e-003 - -0.0323239006102085 - 0.0984472930431366 - <_> - - <_> - - - - <_> - 1 3 2 1 -1. - <_> - 2 3 1 1 2. - 0 - -9.1807021817658097e-005 - 0.0483916215598583 - -0.1035260036587715 - <_> - - <_> - - - - <_> - 10 6 1 3 -1. - <_> - 10 7 1 1 3. - 0 - -3.1447969377040863e-003 - 0.0794122666120529 - -0.0373160690069199 - <_> - - <_> - - - - <_> - 2 0 3 2 -1. - <_> - 3 0 1 2 3. - 0 - -0.0123547101393342 - -0.4468534886837006 - 0.0102314203977585 - <_> - - <_> - - - - <_> - 9 4 9 1 -1. - <_> - 12 4 3 1 3. - 0 - 0.0731980130076408 - -2.3037230130285025e-003 - 0.4229289889335632 - <_> - - <_> - - - - <_> - 0 2 18 2 -1. - <_> - 9 2 9 2 2. - 0 - 0.2070014029741287 - 6.5427711233496666e-003 - -0.6865466833114624 - <_> - - <_> - - - - <_> - 9 4 4 8 -1. - <_> - 9 6 4 4 2. - 0 - -0.0288761500269175 - -0.0347090885043144 - 0.0228563398122787 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 6 10 6 1 3. - 0 - 0.0117939403280616 - -0.0370165891945362 - 0.1296298056840897 - <_> - - <_> - - - - <_> - 6 9 6 3 -1. - <_> - 6 10 6 1 3. - 0 - -8.4449667483568192e-003 - 0.1318210959434509 - -0.0461019687354565 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 3 10 1 1 2. - <_> - 4 11 1 1 2. - 0 - -1.7379879718646407e-003 - -0.1948242038488388 - 0.0256671998649836 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 2 1 2. - 1 - -0.0132887000218034 - -0.0448042005300522 - 0.0157102607190609 - <_> - - <_> - - - - <_> - 2 6 12 2 -1. - <_> - 8 6 6 2 2. - 0 - 0.0953349173069000 - 0.0103526096791029 - -0.4437564015388489 - <_> - - <_> - - - - <_> - 11 9 2 3 -1. - <_> - 11 10 2 1 3. - 0 - 1.1624330363702029e-004 - -0.0520620718598366 - 0.0438341796398163 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.0214909707428887e-004 - 0.0846469923853874 - -0.0531991012394428 - <_> - - <_> - - - - <_> - 15 0 3 11 -1. - <_> - 16 0 1 11 3. - 0 - 0.0332607291638851 - 0.0105573702603579 - -0.1779527962207794 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 1.0356389975640923e-004 - -0.0697307586669922 - 0.0587730184197426 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - -0.8650822043418884 - 0.5256429910659790 - -7.9431589692831039e-003 - <_> - - <_> - - - - <_> - 0 0 15 6 -1. - <_> - 5 2 5 2 9. - 0 - 0.5544881820678711 - -0.0118622798472643 - 0.3396987020969391 - <_> - - <_> - - - - <_> - 9 3 1 8 -1. - <_> - 9 3 1 4 2. - 1 - -0.1239880993962288 - -0.3005965054035187 - 0.0105516295880079 - <_> - - <_> - - - - <_> - 2 3 12 3 -1. - <_> - 5 3 6 3 2. - 0 - -0.0180671494454145 - 0.0485382191836834 - -0.0949063971638680 - <_> - - <_> - - - - <_> - 14 0 4 9 -1. - <_> - 14 3 4 3 3. - 0 - 0.1728439033031464 - 2.9056880157440901e-003 - -0.2622331082820892 - <_> - - <_> - - - - <_> - 0 0 4 9 -1. - <_> - 0 3 4 3 3. - 0 - -5.6298580602742732e-005 - 0.0354916602373123 - -0.1194294020533562 - <_> - - <_> - - - - <_> - 10 1 1 10 -1. - <_> - 10 1 1 5 2. - 1 - 0.0438917614519596 - -5.7431817986071110e-003 - 0.1287872046232224 - <_> - - <_> - - - - <_> - 3 3 3 2 -1. - <_> - 4 4 1 2 3. - 1 - 0.0116010000929236 - -0.0275804195553064 - 0.1638944000005722 - <_> - - <_> - - - - <_> - 4 11 14 1 -1. - <_> - 4 11 7 1 2. - 0 - 0.0109695903956890 - -0.0240612197667360 - 0.0662351101636887 - <_> - - <_> - - - - <_> - 0 10 16 2 -1. - <_> - 4 10 8 2 2. - 0 - -0.0654957666993141 - 0.1479927003383637 - -0.0376853197813034 - <_> - - <_> - - - - <_> - 11 9 2 3 -1. - <_> - 11 10 2 1 3. - 0 - -0.0418917983770370 - -0.7035319805145264 - 1.4793720329180360e-003 - <_> - - <_> - - - - <_> - 5 9 2 3 -1. - <_> - 5 10 2 1 3. - 0 - 1.0460639896336943e-004 - -0.0687503665685654 - 0.0689986720681190 - <_> - - <_> - - - - <_> - 6 8 7 3 -1. - <_> - 6 9 7 1 3. - 0 - 0.0300878006964922 - -0.0249972306191921 - 0.1601042002439499 - <_> - - <_> - - - - <_> - 0 5 12 6 -1. - <_> - 4 7 4 2 9. - 0 - -0.3539502918720245 - -0.2677601873874664 - 0.0195147898048162 - <_> - - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 16 3 1 1 2. - <_> - 15 4 1 1 2. - 0 - -1.7325379885733128e-003 - 0.0904076620936394 - -0.0338093489408493 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 3 1 1 2. - <_> - 2 4 1 1 2. - 0 - -9.1078240075148642e-005 - 0.0667389631271362 - -0.0642288327217102 - <_> - - <_> - - - - <_> - 15 3 2 2 -1. - <_> - 16 3 1 1 2. - <_> - 15 4 1 1 2. - 0 - 1.0164060222450644e-004 - -0.0550763607025146 - 0.0860065296292305 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 3 1 1 2. - <_> - 2 4 1 1 2. - 0 - 1.0091240255860612e-004 - -0.0669887587428093 - 0.0904173329472542 - <_> - - <_> - - - - <_> - 11 10 1 2 -1. - <_> - 11 11 1 1 2. - 0 - 1.1433399777160957e-004 - -0.0793864279985428 - 0.0333604291081429 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 3 1 1 2. - <_> - 2 4 1 1 2. - 0 - -9.1078240075148642e-005 - 0.0685568824410439 - -0.0679403916001320 - <_> - - <_> - - - - <_> - 9 2 1 4 -1. - <_> - 9 2 1 2 2. - 1 - -0.0392006598412991 - 0.2659541070461273 - -0.0115810101851821 - <_> - - <_> - - - - <_> - 7 4 3 3 -1. - <_> - 6 5 3 1 3. - 1 - -0.0408496893942356 - 0.2369962036609650 - -0.0182286705821753 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - 1.5409139450639486e-003 - 0.0328545495867729 - -0.1387972980737686 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 2.2081700153648853e-003 - 0.0284625198692083 - -0.1539631038904190 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 9 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - 2.5576550979167223e-003 - -0.0316214412450790 - 0.1356454938650131 - <_> - - <_> - - - - <_> - 8 0 2 5 -1. - <_> - 9 0 1 5 2. - 0 - -0.0103569002822042 - -0.2808640897274017 - 0.0163790099322796 - <_> - - <_> - - - - <_> - 9 4 1 4 -1. - <_> - 8 5 1 2 2. - 1 - 0.0269482694566250 - -7.6934508979320526e-003 - 0.1326196044683456 - <_> - - <_> - - - - <_> - 9 4 4 1 -1. - <_> - 10 5 2 1 2. - 1 - -9.3930400907993317e-003 - 0.0711908936500549 - -0.0629229173064232 - <_> - - <_> - - - - <_> - 10 6 8 4 -1. - <_> - 14 6 4 2 2. - <_> - 10 8 4 2 2. - 0 - 0.0329438000917435 - -0.0338172987103462 - 0.0875230580568314 - <_> - - <_> - - - - <_> - 3 7 12 2 -1. - <_> - 3 8 12 1 2. - 0 - 0.0885892584919930 - 0.0152411898598075 - -0.3670681118965149 - <_> - - <_> - - - - <_> - 11 10 1 2 -1. - <_> - 11 11 1 1 2. - 0 - -8.0594501923769712e-005 - 0.0506751500070095 - -0.0187248792499304 - <_> - - <_> - - - - <_> - 6 10 1 2 -1. - <_> - 6 11 1 1 2. - 0 - 7.6212047133594751e-005 - -0.1171004995703697 - 0.0464286506175995 - <_> - - <_> - - - - <_> - 9 0 2 4 -1. - <_> - 8 1 2 2 2. - 1 - 0.0296344906091690 - 6.1184200458228588e-003 - -0.0813111588358879 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 9 0 4 1 2. - 1 - 0.0493118092417717 - 0.0152683099731803 - -0.2942040860652924 - <_> - - <_> - - - - <_> - 10 0 8 4 -1. - <_> - 14 0 4 2 2. - <_> - 10 2 4 2 2. - 0 - 0.0548937506973743 - -0.0105098998174071 - 0.1487656980752945 - <_> - - <_> - - - - <_> - 0 0 8 4 -1. - <_> - 0 0 4 2 2. - <_> - 4 2 4 2 2. - 0 - -0.0228862091898918 - 0.1170215979218483 - -0.0405157692730427 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - 5.3369901143014431e-003 - 0.0224588401615620 - -0.0476465709507465 - <_> - - <_> - - - - <_> - 9 2 4 1 -1. - <_> - 9 2 2 1 2. - 1 - -0.0432912707328796 - 0.4272671043872833 - -0.0102139804512262 - <_> - - <_> - - - - <_> - 13 6 2 6 -1. - <_> - 13 9 2 3 2. - 0 - 7.1153361350297928e-003 - -0.0937134698033333 - 0.0148595096543431 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - 1.9230809994041920e-003 - -0.0287360306829214 - 0.1519293040037155 - <_> - - <_> - - - - <_> - 7 8 4 2 -1. - <_> - 8 8 2 2 2. - 0 - -4.8766369000077248e-003 - -0.1218810006976128 - 0.0356885008513927 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 8.1249003414995968e-005 - -0.0697417035698891 - 0.0790079534053802 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - -3.0618819873780012e-003 - -0.2477747946977615 - 0.0167690906673670 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.0020760237239301e-004 - 0.0893831923604012 - -0.0752460211515427 - <_> - - <_> - - - - <_> - 3 9 14 2 -1. - <_> - 10 9 7 1 2. - <_> - 3 10 7 1 2. - 0 - -3.5711210221052170e-003 - 0.0328685902059078 - -0.0263196304440498 - <_> - - <_> - - - - <_> - 0 0 3 10 -1. - <_> - 1 0 1 10 3. - 0 - 0.0441582612693310 - 9.1490726917982101e-003 - -0.4947269856929779 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -0.0124112302437425 - -0.7908090949058533 - 1.2701259693130851e-003 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 3.1543849036097527e-003 - -0.0265824105590582 - 0.1674415022134781 - <_> - - <_> - - - - <_> - 17 8 1 3 -1. - <_> - 16 9 1 1 3. - 1 - -0.0108321495354176 - -0.1465618014335632 - 9.8041100427508354e-003 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -9.0239293058402836e-005 - 0.0808458104729652 - -0.0584610514342785 - <_> - - <_> - - - - <_> - 17 0 1 6 -1. - <_> - 17 2 1 2 3. - 0 - -7.7505349181592464e-003 - -0.0616677999496460 - 0.0165473297238350 - <_> - - <_> - - - - <_> - 0 0 1 6 -1. - <_> - 0 2 1 2 3. - 0 - 0.0145659502595663 - 0.0152137996628881 - -0.2675304114818573 - <_> - - <_> - - - - <_> - 4 6 14 1 -1. - <_> - 4 6 7 1 2. - 0 - -8.4792282432317734e-003 - 0.0305882897228003 - -0.0448902584612370 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 2.5341829750686884e-003 - -0.0238939598202705 - 0.1722858995199204 - <_> - - <_> - - - - <_> - 11 5 1 2 -1. - <_> - 11 6 1 1 2. - 0 - -5.7597858831286430e-003 - 0.1359476000070572 - -0.0152444001287222 - <_> - - <_> - - - - <_> - 5 5 6 2 -1. - <_> - 5 6 6 1 2. - 0 - -1.4607460470870137e-003 - -0.1162500008940697 - 0.0519852600991726 - <_> - - <_> - - - - <_> - 10 1 1 2 -1. - <_> - 10 2 1 1 2. - 0 - 2.8517120517790318e-003 - -0.0179404392838478 - 0.0602376610040665 - <_> - - <_> - - - - <_> - 3 6 2 6 -1. - <_> - 3 9 2 3 2. - 0 - 0.0897699519991875 - -9.4037447124719620e-003 - 0.4420016109943390 - <_> - - <_> - - - - <_> - 17 8 1 3 -1. - <_> - 16 9 1 1 3. - 1 - 0.0189080405980349 - 4.9003809690475464e-003 - -0.2750914990901947 - <_> - - <_> - - - - <_> - 1 8 3 1 -1. - <_> - 2 9 1 1 3. - 1 - -8.5895955562591553e-003 - -0.1746388971805573 - 0.0249784197658300 - <_> - - <_> - - - - <_> - 14 5 4 5 -1. - <_> - 15 5 2 5 2. - 0 - -0.0140332896262407 - 0.1138918027281761 - -0.0226369109004736 - <_> - - <_> - - - - <_> - 0 5 4 5 -1. - <_> - 1 5 2 5 2. - 0 - -0.0120711401104927 - 0.1037771999835968 - -0.0419570505619049 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - 7.8776637092232704e-003 - 4.4563128612935543e-003 - -0.2538577914237976 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 9.7573982202447951e-005 - -0.0717894136905670 - 0.0641175583004951 - <_> - - <_> - - - - <_> - 12 2 3 9 -1. - <_> - 13 5 1 3 9. - 0 - 0.1175699010491371 - -0.0101039502769709 - 0.2867121100425720 - <_> - - <_> - - - - <_> - 3 2 3 9 -1. - <_> - 4 5 1 3 9. - 0 - -0.1769372969865799 - -0.3267252147197723 - 0.0133686903864145 - <_> - - <_> - - - - <_> - 9 3 1 3 -1. - <_> - 9 4 1 1 3. - 0 - 6.9278101436793804e-003 - -0.0266136694699526 - 0.1671929955482483 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 8 1 2 1 2. - 1 - 8.2964971661567688e-003 - -0.0506786108016968 - 0.1066664010286331 - <_> - - <_> - - - - <_> - 13 3 3 1 -1. - <_> - 14 4 1 1 3. - 1 - -0.0175621900707483 - -0.2220605015754700 - 0.0127520598471165 - <_> - - <_> - - - - <_> - 5 3 1 3 -1. - <_> - 4 4 1 1 3. - 1 - 7.2527178563177586e-003 - 0.0250161793082953 - -0.1814745962619782 - <_> - - <_> - - - - <_> - 14 5 1 2 -1. - <_> - 14 5 1 1 2. - 1 - -8.3280522376298904e-003 - 0.1026294976472855 - -0.0318419188261032 - <_> - - <_> - - - - <_> - 4 5 2 1 -1. - <_> - 4 5 1 1 2. - 1 - 8.1564113497734070e-003 - -0.0260942596942186 - 0.1940490007400513 - <_> - - <_> - - - - <_> - 14 2 4 1 -1. - <_> - 14 2 2 1 2. - 0 - 9.6458224579691887e-003 - -0.0175041407346725 - 0.1857111006975174 - <_> - - <_> - - - - <_> - 0 2 4 1 -1. - <_> - 2 2 2 1 2. - 0 - -2.6147949974983931e-003 - 0.0572851300239563 - -0.0852068364620209 - <_> - - <_> - - - - <_> - 11 11 2 1 -1. - <_> - 11 11 1 1 2. - 0 - -9.0203131549060345e-005 - 0.0448432900011539 - -0.0558591298758984 - <_> - - <_> - - - - <_> - 1 0 5 8 -1. - <_> - 1 4 5 4 2. - 0 - -0.2297088950872421 - 0.4133816063404083 - -0.0104670301079750 - <_> - - <_> - - - - <_> - 14 6 2 2 -1. - <_> - 15 6 1 1 2. - <_> - 14 7 1 1 2. - 0 - -9.3038368504494429e-005 - 0.0656109005212784 - -0.0460131801664829 - <_> - - <_> - - - - <_> - 5 11 2 1 -1. - <_> - 6 11 1 1 2. - 0 - 3.2218669075518847e-003 - 0.0143946595489979 - -0.2886064946651459 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 7 2 2 2. - 0 - -0.0544044598937035 - 0.3496404886245728 - -4.6711899340152740e-003 - <_> - - <_> - - - - <_> - 9 2 9 1 -1. - <_> - 12 5 3 1 3. - 1 - 0.0838521718978882 - 9.7965141758322716e-003 - -0.4514091014862061 - <_> - - <_> - - - - <_> - 8 11 6 1 -1. - <_> - 10 11 2 1 3. - 0 - -7.3948511853814125e-003 - -0.1605723947286606 - 0.0203181300312281 - <_> - - <_> - - - - <_> - 0 8 15 3 -1. - <_> - 5 9 5 1 9. - 0 - 0.2624664008617401 - -9.4673177227377892e-003 - 0.4484412074089050 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 9 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.0621179826557636e-003 - -0.1175997033715248 - 0.0370683297514915 - <_> - - <_> - - - - <_> - 5 7 2 2 -1. - <_> - 5 7 1 1 2. - <_> - 6 8 1 1 2. - 0 - 3.9175958372652531e-003 - -0.0288782007992268 - 0.1559911966323853 - <_> - - <_> - - - - <_> - 10 6 8 4 -1. - <_> - 14 6 4 2 2. - <_> - 10 8 4 2 2. - 0 - 0.0233748797327280 - -0.0303057003766298 - 0.0496085882186890 - <_> - - <_> - - - - <_> - 1 6 10 4 -1. - <_> - 1 6 5 2 2. - <_> - 6 8 5 2 2. - 0 - 0.0700461268424988 - 0.0302719399333000 - -0.1687671989202499 - <_> - - <_> - - - - <_> - 13 2 2 8 -1. - <_> - 13 2 1 8 2. - 1 - -0.0148356901481748 - 0.0371782816946507 - -0.0505724586546421 - <_> - - <_> - - - - <_> - 5 2 8 2 -1. - <_> - 5 2 8 1 2. - 1 - -0.0611110404133797 - 0.1495435982942581 - -0.0333888009190559 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 1.2960570165887475e-003 - 0.0776193663477898 - -0.3018206059932709 - <_> - - <_> - - - - <_> - 0 6 2 2 -1. - <_> - 0 6 1 1 2. - <_> - 1 7 1 1 2. - 0 - -9.6840893093030900e-005 - 0.0768221318721771 - -0.0601639896631241 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -1.2722789542749524e-003 - -0.3261046111583710 - 0.0762677118182182 - <_> - - <_> - - - - <_> - 2 6 1 3 -1. - <_> - 2 7 1 1 3. - 0 - 2.7745799161493778e-003 - -0.0374240800738335 - 0.1573497951030731 - <_> - - <_> - - - - <_> - 16 8 2 1 -1. - <_> - 16 8 1 1 2. - 1 - -0.0138587700203061 - 0.1015847995877266 - -0.0111264800652862 - <_> - - <_> - - - - <_> - 8 3 1 3 -1. - <_> - 8 4 1 1 3. - 0 - -7.4661108665168285e-003 - 0.1580483019351959 - -0.0295583792030811 - <_> - - <_> - - - - <_> - 11 0 2 3 -1. - <_> - 11 0 1 3 2. - 1 - -6.5499739721417427e-003 - 0.0535778701305389 - -0.0188590008765459 - <_> - - <_> - - - - <_> - 9 0 2 3 -1. - <_> - 8 1 2 1 3. - 1 - 0.0171376094222069 - 0.0285664293915033 - -0.1667284071445465 - <_> - - <_> - - - - <_> - 11 1 1 10 -1. - <_> - 11 1 1 5 2. - 1 - -0.1542979031801224 - -0.5300828814506531 - 4.6510128304362297e-003 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 8 1 1 2. - 1 - 0.0106106298044324 - -0.0140054197981954 - 0.3535827994346619 - <_> - - <_> - - - - <_> - 11 1 1 10 -1. - <_> - 11 1 1 5 2. - 1 - -0.1248741969466209 - -0.0923418626189232 - 7.7773127704858780e-003 - <_> - - <_> - - - - <_> - 7 1 10 1 -1. - <_> - 7 1 5 1 2. - 1 - 0.0249523594975472 - -0.0191409904509783 - 0.2202495932579041 - <_> - - <_> - - - - <_> - 4 1 11 8 -1. - <_> - 4 3 11 4 2. - 0 - -0.1032380983233452 - 0.0466021485626698 - -0.0811085924506187 - <_> - - <_> - - - - <_> - 0 11 6 1 -1. - <_> - 3 11 3 1 2. - 0 - -4.5149028301239014e-003 - 0.0897223278880119 - -0.0513927191495895 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - -1.1647379724308848e-003 - 0.0666804164648056 - -0.0285771097987890 - <_> - - <_> - - - - <_> - 0 0 10 6 -1. - <_> - 0 3 10 3 2. - 0 - -0.2022943943738937 - -0.1466293931007385 - 0.0327576510608196 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - 6.6811027936637402e-003 - -0.0227770395576954 - 0.0640591979026794 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 1.3379199663177133e-003 - -0.0389982499182224 - 0.1149839982390404 - <_> - - <_> - - - - <_> - 14 8 1 3 -1. - <_> - 13 9 1 1 3. - 1 - 0.0111301597207785 - 0.0111835198476911 - -0.1270809024572372 - <_> - - <_> - - - - <_> - 4 8 3 1 -1. - <_> - 5 9 1 1 3. - 1 - -0.0164206605404615 - -0.4436047971248627 - 8.8887596502900124e-003 - <_> - - <_> - - - - <_> - 9 2 2 2 -1. - <_> - 10 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - 0.0123065803200006 - 1.6212840564548969e-003 - -0.6929082274436951 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - -1.5455400571227074e-003 - 0.1073644012212753 - -0.0384054891765118 - <_> - - <_> - - - - <_> - 17 0 1 10 -1. - <_> - 17 0 1 5 2. - 1 - 0.1231120005249977 - -4.0762219578027725e-003 - 0.2466257959604263 - <_> - - <_> - - - - <_> - 1 0 10 1 -1. - <_> - 1 0 5 1 2. - 1 - -0.0585530214011669 - -0.1753731071949005 - 0.0242126900702715 - <_> - - <_> - - - - <_> - 14 11 2 1 -1. - <_> - 14 11 1 1 2. - 0 - 4.9732271581888199e-003 - 8.6330175399780273e-003 - -0.3455787897109985 - <_> - - <_> - - - - <_> - 2 11 2 1 -1. - <_> - 3 11 1 1 2. - 0 - 1.0527500126045197e-004 - -0.0619044303894043 - 0.0730999633669853 - <_> - - <_> - - - - <_> - 12 5 6 6 -1. - <_> - 15 5 3 3 2. - <_> - 12 8 3 3 2. - 0 - 0.0334588885307312 - -0.0568953007459641 - 0.1123374998569489 - <_> - - <_> - - - - <_> - 0 5 8 6 -1. - <_> - 0 5 4 3 2. - <_> - 4 8 4 3 2. - 0 - 0.1023463010787964 - 0.0171831101179123 - -0.2630634009838104 - <_> - - <_> - - - - <_> - 12 2 3 1 -1. - <_> - 13 3 1 1 3. - 1 - -0.0110734496265650 - -0.1201782003045082 - 0.0151609703898430 - <_> - - <_> - - - - <_> - 0 6 14 1 -1. - <_> - 7 6 7 1 2. - 0 - -0.0929452031850815 - -0.3835205137729645 - 0.0115048401057720 - <_> - - <_> - - - - <_> - 12 2 3 1 -1. - <_> - 13 3 1 1 3. - 1 - 9.8843947052955627e-003 - 9.4814822077751160e-003 - -0.0790450423955917 - <_> - - <_> - - - - <_> - 7 7 2 3 -1. - <_> - 7 8 2 1 3. - 0 - 8.5867056623101234e-003 - -0.0381792597472668 - 0.1150671988725662 - <_> - - <_> - - - - <_> - 17 5 1 3 -1. - <_> - 17 6 1 1 3. - 0 - 7.7010630629956722e-003 - 8.2067763432860374e-003 - -0.3194504976272583 - <_> - - <_> - - - - <_> - 6 2 1 3 -1. - <_> - 5 3 1 1 3. - 1 - 9.9160419777035713e-003 - 0.0183108691126108 - -0.2395883947610855 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 9 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - -2.6565459556877613e-003 - 0.1470277011394501 - -0.0320378206670284 - <_> - - <_> - - - - <_> - 0 5 1 3 -1. - <_> - 0 6 1 1 3. - 0 - -7.6955580152571201e-003 - -0.3151684999465942 - 0.0135936299338937 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 1 - 7.8387549147009850e-003 - 0.0100838402286172 - -0.0819656178355217 - <_> - - <_> - - - - <_> - 3 0 12 6 -1. - <_> - 3 2 12 2 3. - 0 - -0.2059206068515778 - 0.2360569983720779 - -0.0178451202809811 - <_> - - <_> - - - - <_> - 13 0 1 3 -1. - <_> - 13 1 1 1 3. - 0 - -1.0210929758613929e-004 - 0.0456973910331726 - -0.0361605398356915 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 4 1 1 1 3. - 0 - 7.4321818538010120e-003 - 0.0151757402345538 - -0.2634527087211609 - <_> - - <_> - - - - <_> - 10 4 1 3 -1. - <_> - 9 5 1 1 3. - 1 - -5.3089652210474014e-003 - 0.0328724794089794 - -0.0424998812377453 - <_> - - <_> - - - - <_> - 4 8 2 2 -1. - <_> - 4 8 1 2 2. - 1 - -0.0102119101211429 - -0.1072304025292397 - 0.0350723788142204 - <_> - - <_> - - - - <_> - 6 8 12 4 -1. - <_> - 6 10 12 2 2. - 0 - 0.0156533699482679 - -0.1420883983373642 - 0.0252327695488930 - <_> - - <_> - - - - <_> - 0 6 6 5 -1. - <_> - 2 6 2 5 3. - 0 - -0.0155309597030282 - 0.0714680626988411 - -0.0606012381613255 - <_> - - <_> - - - - <_> - 14 9 4 3 -1. - <_> - 14 9 2 3 2. - 0 - -4.0227901190519333e-003 - 0.0612696111202240 - -0.0442985892295837 - <_> - - <_> - - - - <_> - 0 9 4 3 -1. - <_> - 2 9 2 3 2. - 0 - 7.8046880662441254e-003 - -0.0428393594920635 - 0.1211913973093033 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - -2.9384619556367397e-003 - -0.1605672985315323 - 0.0142185799777508 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 4.7694980166852474e-003 - -0.0199991408735514 - 0.2146819978952408 - <_> - - <_> - - - - <_> - 15 10 3 2 -1. - <_> - 15 11 3 1 2. - 0 - 6.9417068734765053e-003 - 0.0220838803797960 - -0.0683898627758026 - <_> - - <_> - - - - <_> - 0 10 3 2 -1. - <_> - 0 11 3 1 2. - 0 - -3.3458590041846037e-003 - -0.2146618068218231 - 0.0204129107296467 - <_> - - <_> - - - - <_> - 7 9 4 3 -1. - <_> - 7 9 2 3 2. - 0 - -0.0289619602262974 - -0.4123224020004273 - 9.1418614611029625e-003 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - -0.0125595303252339 - -0.3822813034057617 - 9.3479985371232033e-003 - <_> - - <_> - - - - <_> - 6 0 7 4 -1. - <_> - 6 1 7 2 2. - 0 - 0.0782332122325897 - -0.0149154299870133 - 0.2425014972686768 - <_> - - <_> - - - - <_> - 0 6 7 2 -1. - <_> - 0 7 7 1 2. - 0 - 0.0550036691129208 - 5.6673302315175533e-003 - -0.6444560885429382 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 16 0 2 1 2. - 1 - -0.0121130803599954 - 0.1475615054368973 - -0.0274819303303957 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 0 1 1 2. - <_> - 6 1 1 1 2. - 0 - -9.3241877038963139e-005 - 0.0713232979178429 - -0.0544973686337471 - <_> - - <_> - - - - <_> - 9 0 4 1 -1. - <_> - 10 0 2 1 2. - 0 - -5.1809228025376797e-003 - -0.1966172009706497 - 0.0103872595354915 - <_> - - <_> - - - - <_> - 5 0 4 1 -1. - <_> - 6 0 2 1 2. - 0 - 2.8799069114029408e-003 - 0.0226891692727804 - -0.1853619962930679 - <_> - - <_> - - - - <_> - 16 7 2 2 -1. - <_> - 17 7 1 1 2. - <_> - 16 8 1 1 2. - 0 - 1.4433950127568096e-004 - -0.1638966053724289 - 0.1328233927488327 - <_> - - <_> - - - - <_> - 0 7 2 2 -1. - <_> - 0 7 1 1 2. - <_> - 1 8 1 1 2. - 0 - -2.9764540959149599e-003 - 0.1981490999460220 - -0.0229323599487543 - <_> - - <_> - - - - <_> - 11 9 3 1 -1. - <_> - 12 9 1 1 3. - 0 - -0.0174362007528543 - -1. - 1.6758659621700644e-003 - <_> - - <_> - - - - <_> - 4 9 3 1 -1. - <_> - 5 9 1 1 3. - 0 - -9.5769818872213364e-003 - -0.6039785146713257 - 5.7854237966239452e-003 - <_> - - <_> - - - - <_> - 10 8 6 1 -1. - <_> - 12 8 2 1 3. - 0 - 0.0268076304346323 - -0.0142364604398608 - 0.3632611036300659 - <_> - - <_> - - - - <_> - 4 7 8 2 -1. - <_> - 6 7 4 2 2. - 0 - -0.0909549072384834 - 0.5940983295440674 - -5.7622790336608887e-003 - <_> - - <_> - - - - <_> - 15 8 1 3 -1. - <_> - 14 9 1 1 3. - 1 - 9.7699109464883804e-003 - 0.0109679596498609 - -0.0909992828965187 - <_> - - <_> - - - - <_> - 3 8 3 1 -1. - <_> - 4 9 1 1 3. - 1 - 6.5793031826615334e-003 - 0.0226521100848913 - -0.1703016012907028 - <_> - - <_> - - - - <_> - 15 4 2 8 -1. - <_> - 15 8 2 4 2. - 0 - -0.0756355971097946 - 0.6655542850494385 - -2.2662319242954254e-003 - <_> - - <_> - - - - <_> - 1 4 2 8 -1. - <_> - 1 8 2 4 2. - 0 - 0.0993361175060272 - -0.0171422604471445 - 0.2314914017915726 - <_> - - <_> - - - - <_> - 7 2 6 3 -1. - <_> - 7 3 6 1 3. - 0 - 0.0164619702845812 - -0.0406862907111645 - 0.0885168462991714 - <_> - - <_> - - - - <_> - 2 3 14 2 -1. - <_> - 9 3 7 2 2. - 0 - -0.0762981399893761 - 0.1907761991024017 - -0.0217152498662472 - <_> - - <_> - - - - <_> - 8 4 7 6 -1. - <_> - 8 7 7 3 2. - 0 - -0.2141840010881424 - 0.6839479207992554 - -2.8622080571949482e-003 - <_> - - <_> - - - - <_> - 3 4 7 6 -1. - <_> - 3 7 7 3 2. - 0 - 0.0252861697226763 - -0.1609179973602295 - 0.0311554893851280 - <_> - - <_> - - - - <_> - 11 3 6 6 -1. - <_> - 13 5 2 2 9. - 0 - 0.1495689004659653 - -0.0106830298900604 - 0.2177554070949554 - <_> - - <_> - - - - <_> - 1 3 6 6 -1. - <_> - 3 5 2 2 9. - 0 - 0.2967295944690704 - -7.5341230258345604e-003 - 0.5379850268363953 - <_> - - <_> - - - - <_> - 13 7 5 4 -1. - <_> - 13 9 5 2 2. - 0 - 0.1584071069955826 - -2.0367559045553207e-003 - 0.7834367156028748 - <_> - - <_> - - - - <_> - 0 7 5 4 -1. - <_> - 0 9 5 2 2. - 0 - -2.0454709883779287e-003 - -0.1681185066699982 - 0.0254036299884319 - <_> - - <_> - - - - <_> - 11 9 2 1 -1. - <_> - 11 9 1 1 2. - 1 - 1.4253250556066632e-003 - -0.0192096196115017 - 0.0999193415045738 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 8 11 8 1 2. - 0 - -0.0620848089456558 - -0.3263863027095795 - 0.0150109399110079 - <_> - - <_> - - - - <_> - 7 5 8 4 -1. - <_> - 11 5 4 2 2. - <_> - 7 7 4 2 2. - 0 - 0.0535316914319992 - 0.0151444301009178 - -0.1200674995779991 - <_> - - <_> - - - - <_> - 6 3 3 3 -1. - <_> - 6 4 3 1 3. - 0 - 0.0107875699177384 - -0.0312778390944004 - 0.1431857943534851 - <_> - - <_> - - - - <_> - 5 3 8 2 -1. - <_> - 9 3 4 1 2. - <_> - 5 4 4 1 2. - 0 - -0.0134498402476311 - 0.1521801948547363 - -0.0276127103716135 - <_> - - <_> - - - - <_> - 2 0 6 4 -1. - <_> - 4 0 2 4 3. - 0 - 0.0119310803711414 - 0.0297223404049873 - -0.1551758050918579 - <_> - - <_> - - - - <_> - 6 2 9 2 -1. - <_> - 9 2 3 2 3. - 0 - -0.0451962091028690 - -0.1840907037258148 - 8.7686460465192795e-003 - <_> - - <_> - - - - <_> - 2 3 6 2 -1. - <_> - 4 3 2 2 3. - 0 - 0.0656720399856567 - -6.2955729663372040e-003 - 0.7049232125282288 - <_> - - <_> - - - - <_> - 3 6 12 3 -1. - <_> - 3 7 12 1 3. - 0 - 7.7328020706772804e-003 - -0.0445311293005943 - 0.0860469117760658 - <_> - - <_> - - - - <_> - 7 6 1 3 -1. - <_> - 7 7 1 1 3. - 0 - -3.0604829080402851e-003 - 0.1011342033743858 - -0.0428855493664742 - <_> - - <_> - - - - <_> - 6 2 9 2 -1. - <_> - 9 2 3 2 3. - 0 - 0.0823473408818245 - 3.0522139277309179e-003 - -0.2324313968420029 - <_> - - <_> - - - - <_> - 3 2 9 2 -1. - <_> - 6 2 3 2 3. - 0 - -6.9534480571746826e-003 - 0.0577978491783142 - -0.0761403590440750 - <_> - - <_> - - - - <_> - 10 0 8 2 -1. - <_> - 10 0 4 2 2. - 0 - -0.0149396397173405 - 0.0690819472074509 - -0.0438149087131023 - <_> - - <_> - - - - <_> - 0 0 8 2 -1. - <_> - 4 0 4 2 2. - 0 - 0.0114186601713300 - -0.0329726487398148 - 0.1668100953102112 - <_> - - <_> - - - - <_> - 3 9 12 2 -1. - <_> - 3 9 6 2 2. - 0 - 0.0257708206772804 - -0.0423020683228970 - 0.1195508986711502 - <_> - - <_> - - - - <_> - 2 9 8 2 -1. - <_> - 4 9 4 2 2. - 0 - -8.1753218546509743e-003 - 0.0915561020374298 - -0.0530720911920071 - <_> - - <_> - - - - <_> - 14 9 2 1 -1. - <_> - 14 9 1 1 2. - 1 - -0.0213972497731447 - 0.2022473961114883 - -2.8093929868191481e-003 - <_> - - <_> - - - - <_> - 4 9 1 2 -1. - <_> - 4 9 1 1 2. - 1 - 1.2690890580415726e-003 - -0.0357911512255669 - 0.1262194961309433 - <_> - - <_> - - - - <_> - 12 0 6 5 -1. - <_> - 14 0 2 5 3. - 0 - 8.2354843616485596e-003 - 0.0314325913786888 - -0.0557960681617260 - <_> - - <_> - - - - <_> - 0 0 6 5 -1. - <_> - 2 0 2 5 3. - 0 - 0.0440603308379650 - 0.0124736595898867 - -0.3680464029312134 - <_> - - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 8 6 2 2 2. - 1 - 1.0450479749124497e-004 - -0.0454845204949379 - 0.0328115411102772 - <_> - - <_> - - - - <_> - 6 7 2 3 -1. - <_> - 6 8 2 1 3. - 0 - -6.3033318147063255e-003 - 0.1380178928375244 - -0.0319953300058842 - -1.3049939870834351 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0273166503757238 - 0.2748773097991943 - -0.1585085988044739 - <_> - - <_> - - - - <_> - 13 1 3 3 -1. - <_> - 14 2 1 1 9. - 0 - 7.6439790427684784e-003 - -0.0745837762951851 - 0.1512560993432999 - <_> - - <_> - - - - <_> - 4 3 10 4 -1. - <_> - 4 4 10 2 2. - 0 - -0.0698627978563309 - 0.2870751917362213 - -0.0899949297308922 - <_> - - <_> - - - - <_> - 6 0 12 4 -1. - <_> - 10 0 4 4 3. - 0 - -0.1078850999474526 - -0.3359695076942444 - 0.0208930205553770 - <_> - - <_> - - - - <_> - 0 0 6 4 -1. - <_> - 3 0 3 4 2. - 0 - -0.0150349000468850 - 0.0865437164902687 - -0.2316527068614960 - <_> - - <_> - - - - <_> - 9 6 4 2 -1. - <_> - 10 6 2 2 2. - 0 - 0.0170964896678925 - 0.0123423803597689 - 0.3777126073837280 - <_> - - <_> - - - - <_> - 4 7 2 2 -1. - <_> - 4 7 1 1 2. - <_> - 5 8 1 1 2. - 0 - -2.1886809263378382e-003 - 0.1567547023296356 - -0.1113869026303291 - <_> - - <_> - - - - <_> - 8 6 6 2 -1. - <_> - 10 6 2 2 3. - 0 - -0.0243731699883938 - 0.2101043015718460 - -0.0143677899613976 - <_> - - <_> - - - - <_> - 4 6 6 1 -1. - <_> - 6 6 2 1 3. - 0 - -8.1659909337759018e-003 - 0.1786542981863022 - -0.0957834124565125 - <_> - - <_> - - - - <_> - 9 0 3 9 -1. - <_> - 6 3 3 3 3. - 1 - -7.5612151995301247e-003 - 0.0257025491446257 - -0.0793446972966194 - <_> - - <_> - - - - <_> - 2 5 14 6 -1. - <_> - 2 5 7 3 2. - <_> - 9 8 7 3 2. - 0 - -6.5740081481635571e-004 - -0.1408917009830475 - 0.0806073322892189 - <_> - - <_> - - - - <_> - 14 3 4 1 -1. - <_> - 15 4 2 1 2. - 1 - -8.8607652287464589e-005 - 0.0754608362913132 - -0.1875680983066559 - <_> - - <_> - - - - <_> - 3 4 6 2 -1. - <_> - 3 4 3 2 2. - 1 - 6.2588072614744306e-004 - 0.0464858114719391 - -0.2517656981945038 - <_> - - <_> - - - - <_> - 2 10 16 1 -1. - <_> - 6 10 8 1 2. - 0 - -0.0121038099750876 - 0.1348441988229752 - -0.0890479534864426 - <_> - - <_> - - - - <_> - 4 5 3 3 -1. - <_> - 5 5 1 3 3. - 0 - -6.8692131899297237e-003 - 0.2117352038621903 - -0.0653861016035080 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 16 0 1 2 2. - 0 - 5.6604170240461826e-003 - -0.0135955400764942 - 0.1875016987323761 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 1 0 1 2 2. - 0 - -9.4631352112628520e-005 - 0.0508677214384079 - -0.1878003031015396 - <_> - - <_> - - - - <_> - 10 7 1 3 -1. - <_> - 10 8 1 1 3. - 0 - 3.4878090955317020e-003 - -0.0513593889772892 - 0.1150688976049423 - <_> - - <_> - - - - <_> - 3 4 5 3 -1. - <_> - 2 5 5 1 3. - 1 - -9.4707533717155457e-003 - 0.0988224893808365 - -0.0936973690986633 - <_> - - <_> - - - - <_> - 10 5 1 6 -1. - <_> - 10 8 1 3 2. - 0 - 0.0143855903297663 - -0.0787550136446953 - 0.0313639417290688 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -1.4251519460231066e-003 - 0.1444451063871384 - -0.0631012171506882 - <_> - - <_> - - - - <_> - 17 9 1 2 -1. - <_> - 17 9 1 1 2. - 1 - 3.6899289116263390e-003 - 0.0239898599684238 - -0.3214646875858307 - <_> - - <_> - - - - <_> - 1 9 2 1 -1. - <_> - 1 9 1 1 2. - 1 - -6.8723889999091625e-003 - -0.2544673085212708 - 0.0331288501620293 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - 2.4660020135343075e-003 - -0.0436444208025932 - 0.1403793990612030 - <_> - - <_> - - - - <_> - 6 9 4 3 -1. - <_> - 7 9 2 3 2. - 0 - 9.1303391382098198e-003 - 0.0236473008990288 - -0.3790624141693115 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - -3.0127069912850857e-003 - 0.2355199009180069 - -0.0427313297986984 - <_> - - <_> - - - - <_> - 3 3 2 2 -1. - <_> - 3 3 2 1 2. - 1 - 0.0112458495423198 - 0.0238051190972328 - -0.3176544904708862 - <_> - - <_> - - - - <_> - 11 0 6 5 -1. - <_> - 13 0 2 5 3. - 0 - 0.0440335199236870 - 0.0150658795610070 - -0.2523517012596130 - <_> - - <_> - - - - <_> - 1 0 6 5 -1. - <_> - 3 0 2 5 3. - 0 - -0.0411049909889698 - -0.2506304085254669 - 0.0306930895894766 - <_> - - <_> - - - - <_> - 3 0 12 3 -1. - <_> - 3 1 12 1 3. - 0 - -0.0366346091032028 - 0.1931945979595184 - -0.0412355512380600 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 6 1 6 1 3. - 0 - 0.0146330101415515 - -0.0664591193199158 - 0.1565050929784775 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - 6.3870670273900032e-003 - -0.0269446894526482 - 0.0378875993192196 - <_> - - <_> - - - - <_> - 0 2 6 5 -1. - <_> - 2 2 2 5 3. - 0 - -8.5294283926486969e-003 - 0.0776193886995316 - -0.1026839986443520 - <_> - - <_> - - - - <_> - 14 2 3 1 -1. - <_> - 15 3 1 1 3. - 1 - 0.0101751303300262 - 0.0211451407521963 - -0.2743897140026093 - <_> - - <_> - - - - <_> - 5 3 8 3 -1. - <_> - 5 4 8 1 3. - 0 - 0.0462528206408024 - -0.0320850796997547 - 0.2951698899269104 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - -0.0206452105194330 - 0.0904278308153152 - -3.8768420927226543e-003 - <_> - - <_> - - - - <_> - 7 0 2 3 -1. - <_> - 6 1 2 1 3. - 1 - -0.0183830298483372 - -0.3152266144752502 - 0.0302396994084120 - <_> - - <_> - - - - <_> - 0 3 18 2 -1. - <_> - 6 3 6 2 3. - 0 - -0.0704747065901756 - 0.0842628031969070 - -0.0942537933588028 - <_> - - <_> - - - - <_> - 0 5 4 7 -1. - <_> - 2 5 2 7 2. - 0 - 0.0287798792123795 - -0.0430834107100964 - 0.2538292109966278 - <_> - - <_> - - - - <_> - 13 10 5 2 -1. - <_> - 13 11 5 1 2. - 0 - -3.9638858288526535e-003 - -0.3034366071224213 - 0.0263171494007111 - <_> - - <_> - - - - <_> - 0 10 5 2 -1. - <_> - 0 11 5 1 2. - 0 - -7.3942821472883224e-003 - -0.4304679036140442 - 0.0158940404653549 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 0 2 4 3. - 0 - -0.0390920788049698 - -0.4636006951332092 - 0.0116170402616262 - <_> - - <_> - - - - <_> - 5 0 6 4 -1. - <_> - 7 0 2 4 3. - 0 - -0.0426510497927666 - -0.4405274987220764 - 0.0149345397949219 - <_> - - <_> - - - - <_> - 11 0 1 4 -1. - <_> - 10 1 1 2 2. - 1 - -0.0329709500074387 - -0.3487468063831329 - -3.7375820102170110e-004 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 8 1 2 1 2. - 1 - -0.0136881796643138 - 0.2402547001838684 - -0.0306639894843102 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 9 2 2 1 2. - 0 - 3.6174680572003126e-003 - -0.0431502200663090 - 0.1114408001303673 - <_> - - <_> - - - - <_> - 5 9 6 2 -1. - <_> - 7 9 2 2 3. - 0 - -0.0184087194502354 - -0.3048374056816101 - 0.0228278990834951 - <_> - - <_> - - - - <_> - 7 4 6 8 -1. - <_> - 9 4 2 8 3. - 0 - 0.0845044404268265 - -9.5612574368715286e-003 - 0.2010266035795212 - <_> - - <_> - - - - <_> - 3 4 12 4 -1. - <_> - 6 4 6 4 2. - 0 - 0.0319400802254677 - 0.0281961709260941 - -0.2627530097961426 - <_> - - <_> - - - - <_> - 12 5 4 4 -1. - <_> - 13 5 2 4 2. - 0 - -5.6045739911496639e-003 - 0.0954593494534492 - -0.0707950070500374 - <_> - - <_> - - - - <_> - 6 6 6 2 -1. - <_> - 8 6 2 2 3. - 0 - -0.0274864900857210 - -0.1258618980646133 - 0.0532095991075039 - <_> - - <_> - - - - <_> - 12 5 4 4 -1. - <_> - 13 5 2 4 2. - 0 - 0.0400801487267017 - -1.9919050391763449e-003 - 0.2677854895591736 - <_> - - <_> - - - - <_> - 2 5 4 4 -1. - <_> - 3 5 2 4 2. - 0 - -6.0500898398458958e-003 - 0.1080766022205353 - -0.0765023976564407 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 16 1 1 3 3. - 1 - 0.0163098704069853 - 0.0311133395880461 - -0.2290662974119186 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 2 1 3 1 3. - 1 - -0.0212691500782967 - -0.2722933888435364 - 0.0260289702564478 - <_> - - <_> - - - - <_> - 7 6 4 5 -1. - <_> - 8 6 2 5 2. - 0 - -1.1312039714539424e-004 - 0.0540715605020523 - -0.1231838017702103 - <_> - - <_> - - - - <_> - 7 4 4 3 -1. - <_> - 6 5 4 1 3. - 1 - -0.0251061804592609 - 0.1908266991376877 - -0.0403265804052353 - <_> - - <_> - - - - <_> - 10 2 3 5 -1. - <_> - 11 3 1 5 3. - 1 - -0.0322669111192226 - 0.0607553310692310 - -0.0230144001543522 - <_> - - <_> - - - - <_> - 8 2 5 3 -1. - <_> - 7 3 5 1 3. - 1 - -0.0159039795398712 - 0.0668608024716377 - -0.1106446012854576 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 6.2107760459184647e-003 - 8.0979540944099426e-003 - -0.2553803920745850 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -9.4095463282428682e-005 - 0.0639280602335930 - -0.1183399036526680 - <_> - - <_> - - - - <_> - 7 4 4 2 -1. - <_> - 7 5 4 1 2. - 0 - 5.5843768641352654e-003 - -0.0503448806703091 - 0.1463675945997238 - <_> - - <_> - - - - <_> - 5 6 8 6 -1. - <_> - 5 6 4 3 2. - <_> - 9 9 4 3 2. - 0 - -0.0734161436557770 - -0.3642606139183044 - 0.0175880603492260 - <_> - - <_> - - - - <_> - 11 7 3 1 -1. - <_> - 12 7 1 1 3. - 0 - 7.9857250675559044e-003 - -0.0204075407236815 - 0.2058283984661102 - <_> - - <_> - - - - <_> - 5 5 3 3 -1. - <_> - 6 5 1 3 3. - 0 - -4.6555800363421440e-003 - 0.1192449033260346 - -0.0530605912208557 - <_> - - <_> - - - - <_> - 11 7 3 1 -1. - <_> - 12 7 1 1 3. - 0 - -1.4567379839718342e-003 - 0.0808789506554604 - -0.0349698700010777 - <_> - - <_> - - - - <_> - 3 6 4 2 -1. - <_> - 4 6 2 2 2. - 0 - -4.0669189766049385e-003 - 0.1347555071115494 - -0.0607637912034988 - <_> - - <_> - - - - <_> - 14 7 4 2 -1. - <_> - 15 7 2 2 2. - 0 - -1.9439009483903646e-003 - 0.0352327413856983 - -0.0188679303973913 - <_> - - <_> - - - - <_> - 0 7 4 2 -1. - <_> - 1 7 2 2 2. - 0 - -2.1124959457665682e-003 - 0.0935894697904587 - -0.0727694779634476 - <_> - - <_> - - - - <_> - 11 4 1 4 -1. - <_> - 10 5 1 2 2. - 1 - -4.3111350387334824e-003 - 0.0239617303013802 - -0.0584113597869873 - <_> - - <_> - - - - <_> - 7 7 3 2 -1. - <_> - 8 8 1 2 3. - 1 - 5.6312880478799343e-003 - 0.0497821606695652 - -0.1389342993497849 - <_> - - <_> - - - - <_> - 11 5 1 3 -1. - <_> - 10 6 1 1 3. - 1 - -0.0297755096107721 - -0.2382882982492447 - 8.3421133458614349e-003 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 6 1 1 3. - 1 - -2.4996970314532518e-003 - 0.0705288574099541 - -0.0884268134832382 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 2 1 2. - 1 - -0.0416187196969986 - -0.4570477902889252 - 2.4038259289227426e-004 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 8 8 1 2 2. - 1 - -0.0173854008316994 - -0.2189574986696243 - 0.0290168393403292 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - -1.5565169742330909e-003 - 0.0351988784968853 - -0.0479552596807480 - <_> - - <_> - - - - <_> - 7 9 2 1 -1. - <_> - 8 9 1 1 2. - 0 - 1.1509309842949733e-004 - -0.0753424763679504 - 0.0821998119354248 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 9 9 1 1 2. - 0 - 4.9892379902303219e-003 - 5.8806170709431171e-003 - -0.3606824874877930 - <_> - - <_> - - - - <_> - 7 9 2 1 -1. - <_> - 8 9 1 1 2. - 0 - -1.0128300345968455e-004 - 0.0842761769890785 - -0.0687631368637085 - <_> - - <_> - - - - <_> - 15 4 1 3 -1. - <_> - 15 5 1 1 3. - 0 - 9.9149248853791505e-005 - -0.0613700188696384 - 0.0929628536105156 - <_> - - <_> - - - - <_> - 2 4 1 3 -1. - <_> - 2 5 1 1 3. - 0 - -7.4688978202175349e-005 - 0.0662619024515152 - -0.0897239074110985 - <_> - - <_> - - - - <_> - 15 3 3 6 -1. - <_> - 15 5 3 2 3. - 0 - -0.1168771013617516 - -0.2694670855998993 - 2.2773561067879200e-003 - <_> - - <_> - - - - <_> - 0 3 3 6 -1. - <_> - 0 5 3 2 3. - 0 - -0.0455940999090672 - -0.2146074026823044 - 0.0271735806018114 - <_> - - <_> - - - - <_> - 15 2 3 2 -1. - <_> - 16 3 1 2 3. - 1 - -0.0201674308627844 - -0.2118619978427887 - 0.0216926895081997 - <_> - - <_> - - - - <_> - 4 6 10 6 -1. - <_> - 4 9 10 3 2. - 0 - -0.0201165992766619 - -0.4257997870445252 - 0.0128648299723864 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 10 9 1 1 2. - <_> - 9 10 1 1 2. - 0 - 1.0467610554769635e-003 - 0.0356891304254532 - -0.1311022043228149 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 2 3 2 1 3. - 1 - -0.0225771404802799 - -0.2851760983467102 - 0.0197168700397015 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - -1.6918679466471076e-003 - -0.2205944955348969 - 0.0347193814814091 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - -1.7014020122587681e-003 - 0.1605311036109924 - -0.0382460802793503 - <_> - - <_> - - - - <_> - 16 1 2 2 -1. - <_> - 17 1 1 1 2. - <_> - 16 2 1 1 2. - 0 - 6.3295272411778569e-004 - 0.0615980587899685 - -0.1541680991649628 - <_> - - <_> - - - - <_> - 5 0 3 2 -1. - <_> - 5 1 3 1 2. - 0 - 6.3840970396995544e-003 - -0.0446851104497910 - 0.1461316943168640 - <_> - - <_> - - - - <_> - 9 2 8 2 -1. - <_> - 13 2 4 1 2. - <_> - 9 3 4 1 2. - 0 - 0.0114873396232724 - -0.0202031005173922 - 0.1099053993821144 - <_> - - <_> - - - - <_> - 0 1 2 2 -1. - <_> - 0 1 1 1 2. - <_> - 1 2 1 1 2. - 0 - -9.9725337349809706e-005 - 0.0887523069977760 - -0.0780500620603561 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 1 1 1 3. - 1 - -0.0135157303884625 - 0.1238387972116470 - -6.8068411201238632e-003 - <_> - - <_> - - - - <_> - 3 0 6 1 -1. - <_> - 5 0 2 1 3. - 0 - -0.0191297102719545 - -0.4059008955955505 - 0.0146180298179388 - <_> - - <_> - - - - <_> - 7 2 4 3 -1. - <_> - 7 3 4 1 3. - 0 - -0.0344656705856323 - 0.2818404138088226 - -0.0221523307263851 - <_> - - <_> - - - - <_> - 0 1 15 1 -1. - <_> - 5 1 5 1 3. - 0 - -0.0204874705523252 - 0.0860062465071678 - -0.0742898583412170 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - 0.0214179009199142 - -0.0505673699080944 - 0.1760845929384232 - <_> - - <_> - - - - <_> - 7 3 1 2 -1. - <_> - 7 3 1 1 2. - 1 - 1.0022870264947414e-004 - -0.0761366114020348 - 0.0774534568190575 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - -1.1440980015322566e-003 - 0.1310613006353378 - -0.0594271086156368 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -1.4926489675417542e-003 - 0.1156916022300720 - -0.0513039901852608 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 10 2 1 3. - 0 - -1.4178160345181823e-003 - -0.1165667995810509 - 0.0362184718251228 - <_> - - <_> - - - - <_> - 2 2 8 3 -1. - <_> - 4 2 4 3 2. - 0 - -0.0475702397525311 - -0.3015395104885101 - 0.0179957207292318 - <_> - - <_> - - - - <_> - 13 2 2 1 -1. - <_> - 13 2 1 1 2. - 0 - 6.7516998387873173e-003 - 4.5671020634472370e-003 - -0.3280004858970642 - <_> - - <_> - - - - <_> - 3 2 2 1 -1. - <_> - 4 2 1 1 2. - 0 - -9.9902870715595782e-005 - 0.0628313496708870 - -0.0902426168322563 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - 4.4691278599202633e-003 - 0.0168812293559313 - -0.2561958134174347 - <_> - - <_> - - - - <_> - 7 10 2 2 -1. - <_> - 7 10 1 1 2. - <_> - 8 11 1 1 2. - 0 - -1.5597039600834250e-003 - 0.1514205038547516 - -0.0342835783958435 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - -2.9167518950998783e-003 - -0.2307295054197311 - 0.0136303398758173 - <_> - - <_> - - - - <_> - 7 11 2 1 -1. - <_> - 8 11 1 1 2. - 0 - 9.9341967143118382e-005 - -0.0710053816437721 - 0.0816974267363548 - <_> - - <_> - - - - <_> - 9 11 2 1 -1. - <_> - 9 11 1 1 2. - 0 - 1.1012300092261285e-004 - -0.0366888009011745 - 0.0552108995616436 - <_> - - <_> - - - - <_> - 7 11 4 1 -1. - <_> - 8 11 2 1 2. - 0 - -1.2116230209358037e-004 - 0.0769307911396027 - -0.0780136585235596 - <_> - - <_> - - - - <_> - 17 9 1 3 -1. - <_> - 17 10 1 1 3. - 0 - 8.2692378782667220e-005 - -0.0695118680596352 - 0.0547541007399559 - <_> - - <_> - - - - <_> - 0 9 1 3 -1. - <_> - 0 10 1 1 3. - 0 - -5.7337670587003231e-003 - -0.3814592063426971 - 0.0132495202124119 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - 8.4541890828404576e-005 - -0.0585276298224926 - 0.0521145090460777 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - -3.2148940954357386e-003 - 0.1981866955757141 - -0.0277347099035978 - <_> - - <_> - - - - <_> - 11 6 6 4 -1. - <_> - 14 6 3 2 2. - <_> - 11 8 3 2 2. - 0 - 0.0261573903262615 - -0.0291611906141043 - 0.0937418788671494 - <_> - - <_> - - - - <_> - 5 7 3 2 -1. - <_> - 6 8 1 2 3. - 1 - -0.0145058901980519 - -0.2287662029266357 - 0.0232911501079798 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - 8.5460231639444828e-004 - -0.0174634996801615 - 0.0499418899416924 - <_> - - <_> - - - - <_> - 6 9 2 1 -1. - <_> - 6 9 1 1 2. - 1 - -7.4818951543420553e-004 - 0.0537553206086159 - -0.1201307028532028 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 9 1 3 2. - 0 - 0.0277366396039724 - -4.6890750527381897e-003 - 0.5590116977691650 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 1 9 1 3 2. - 0 - 3.9643929339945316e-003 - -0.0362920500338078 - 0.1513205021619797 - <_> - - <_> - - - - <_> - 16 9 2 3 -1. - <_> - 16 9 1 3 2. - 0 - -2.2398240398615599e-003 - -0.0361485593020916 - 0.0134520595893264 - <_> - - <_> - - - - <_> - 0 9 2 3 -1. - <_> - 1 9 1 3 2. - 0 - -3.9014678914099932e-003 - 0.1166571006178856 - -0.0580239109694958 - <_> - - <_> - - - - <_> - 14 4 2 3 -1. - <_> - 13 5 2 1 3. - 1 - 7.8577287495136261e-003 - -0.0451774410903454 - 0.1568287014961243 - <_> - - <_> - - - - <_> - 5 4 3 6 -1. - <_> - 5 7 3 3 2. - 0 - 0.0226380992680788 - -0.1357982009649277 - 0.0425547398626804 - <_> - - <_> - - - - <_> - 14 4 2 3 -1. - <_> - 13 5 2 1 3. - 1 - -0.0259864497929811 - 0.1788821071386337 - -0.0474426113069057 - <_> - - <_> - - - - <_> - 4 4 3 2 -1. - <_> - 5 5 1 2 3. - 1 - 0.0197327006608248 - -0.0276006404310465 - 0.2124480009078980 - <_> - - <_> - - - - <_> - 3 8 15 4 -1. - <_> - 8 8 5 4 3. - 0 - -4.2725708335638046e-003 - 0.0489750616252422 - -0.0693250671029091 - <_> - - <_> - - - - <_> - 0 3 15 9 -1. - <_> - 5 3 5 9 3. - 0 - 0.3920710980892181 - -0.0128574203699827 - 0.4395439028739929 - <_> - - <_> - - - - <_> - 9 11 4 1 -1. - <_> - 10 11 2 1 2. - 0 - -5.9483079239726067e-003 - -0.3763462901115418 - 8.6762178689241409e-003 - <_> - - <_> - - - - <_> - 5 11 4 1 -1. - <_> - 6 11 2 1 2. - 0 - -8.9699737145565450e-005 - 0.0760805308818817 - -0.0808239802718163 - <_> - - <_> - - - - <_> - 15 7 1 4 -1. - <_> - 14 8 1 2 2. - 1 - -8.3298161625862122e-003 - -0.1102873980998993 - 0.0142992101609707 - <_> - - <_> - - - - <_> - 8 8 2 3 -1. - <_> - 8 9 2 1 3. - 0 - -0.0110610900446773 - 0.2340999990701675 - -0.0229869391769171 - <_> - - <_> - - - - <_> - 9 7 1 3 -1. - <_> - 9 8 1 1 3. - 0 - -3.4027020446956158e-003 - 0.1220372989773750 - -0.0292258393019438 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 8.6490763351321220e-005 - -0.0672513768076897 - 0.0762282535433769 - <_> - - <_> - - - - <_> - 10 6 8 4 -1. - <_> - 14 6 4 2 2. - <_> - 10 8 4 2 2. - 0 - 0.0660045072436333 - 8.9948913082480431e-003 - -0.1108527034521103 - <_> - - <_> - - - - <_> - 0 6 8 4 -1. - <_> - 0 6 4 2 2. - <_> - 4 8 4 2 2. - 0 - -0.0613849088549614 - -0.3770815134048462 - 0.0137589499354362 - <_> - - <_> - - - - <_> - 9 9 8 2 -1. - <_> - 11 9 4 2 2. - 0 - 0.0224670507013798 - 0.0131855504587293 - -0.1580487936735153 - <_> - - <_> - - - - <_> - 1 9 8 2 -1. - <_> - 3 9 4 2 2. - 0 - -0.0101280296221375 - 0.1087284013628960 - -0.0533886589109898 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 5 11 8 1 2. - 0 - 0.0100576998665929 - -0.0427169911563396 - 0.1205267980694771 - <_> - - <_> - - - - <_> - 3 7 3 2 -1. - <_> - 4 8 1 2 3. - 1 - -0.0141736697405577 - -0.2030597031116486 - 0.0245511792600155 - <_> - - <_> - - - - <_> - 13 0 4 2 -1. - <_> - 14 0 2 2 2. - 0 - -0.0234011597931385 - -0.4085808098316193 - 2.0997230894863605e-003 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 2 0 2 2 2. - 0 - -0.0129139898344874 - -0.3534688055515289 - 0.0132385501638055 - <_> - - <_> - - - - <_> - 10 0 8 2 -1. - <_> - 14 0 4 1 2. - <_> - 10 1 4 1 2. - 0 - 0.0118879396468401 - -0.0249942708760500 - 0.1062968969345093 - <_> - - <_> - - - - <_> - 7 0 1 3 -1. - <_> - 6 1 1 1 3. - 1 - 0.0147288702428341 - 0.0125844804570079 - -0.3587088882923126 - <_> - - <_> - - - - <_> - 11 0 6 2 -1. - <_> - 14 0 3 1 2. - <_> - 11 1 3 1 2. - 0 - -2.6837689802050591e-003 - 0.0553370006382465 - -0.0330834090709686 - <_> - - <_> - - - - <_> - 0 0 8 2 -1. - <_> - 0 0 4 1 2. - <_> - 4 1 4 1 2. - 0 - 8.5124364122748375e-003 - -0.0525816082954407 - 0.1218032985925674 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 17 1 1 1 3. - 0 - -9.1770477592945099e-003 - -0.3420186042785645 - 8.0853570252656937e-003 - <_> - - <_> - - - - <_> - 0 0 10 12 -1. - <_> - 5 0 5 12 2. - 0 - 0.0864098072052002 - 0.0229978393763304 - -0.2093093991279602 - <_> - - <_> - - - - <_> - 15 9 1 2 -1. - <_> - 15 9 1 1 2. - 1 - -0.0146147096529603 - -0.3137187063694000 - 8.6596552282571793e-003 - <_> - - <_> - - - - <_> - 3 9 2 1 -1. - <_> - 3 9 1 1 2. - 1 - -1.0003909847000614e-004 - 0.0475739799439907 - -0.1131187006831169 - <_> - - <_> - - - - <_> - 15 8 3 3 -1. - <_> - 16 8 1 3 3. - 0 - 1.4839449431747198e-003 - -0.0542558208107948 - 0.0701155588030815 - <_> - - <_> - - - - <_> - 0 8 3 4 -1. - <_> - 1 8 1 4 3. - 0 - 4.3706027790904045e-003 - -0.0446861498057842 - 0.1204715967178345 - <_> - - <_> - - - - <_> - 6 1 12 6 -1. - <_> - 10 1 4 6 3. - 0 - 0.1413207948207855 - 0.0127376103773713 - -0.1452215015888214 - <_> - - <_> - - - - <_> - 3 2 12 2 -1. - <_> - 3 2 6 1 2. - <_> - 9 3 6 1 2. - 0 - 0.0241033900529146 - -0.0247014593333006 - 0.1927594989538193 - <_> - - <_> - - - - <_> - 17 1 1 4 -1. - <_> - 17 2 1 2 2. - 0 - 4.3824901804327965e-003 - 0.0271430499851704 - -0.1631152033805847 - <_> - - <_> - - - - <_> - 0 1 7 6 -1. - <_> - 0 4 7 3 2. - 0 - -0.1032496988773346 - -0.1472969949245453 - 0.0312857888638973 - <_> - - <_> - - - - <_> - 13 3 3 6 -1. - <_> - 14 5 1 2 9. - 0 - -0.0583823509514332 - 0.0981350615620613 - -0.0391028001904488 - <_> - - <_> - - - - <_> - 2 3 3 6 -1. - <_> - 3 5 1 2 9. - 0 - -0.0191917903721333 - 0.0719358101487160 - -0.0822541117668152 - <_> - - <_> - - - - <_> - 15 0 3 3 -1. - <_> - 14 1 3 1 3. - 1 - 0.0161172002553940 - -0.0392024815082550 - 0.0958671793341637 - <_> - - <_> - - - - <_> - 2 2 3 2 -1. - <_> - 3 3 1 2 3. - 1 - -6.6582779400050640e-003 - 0.0940629914402962 - -0.0573298186063766 - <_> - - <_> - - - - <_> - 7 1 10 4 -1. - <_> - 7 1 5 4 2. - 0 - -0.1611957997083664 - -0.1767559945583344 - 0.0133906695991755 - <_> - - <_> - - - - <_> - 1 1 10 4 -1. - <_> - 6 1 5 4 2. - 0 - -0.1616878956556320 - 0.2736622095108032 - -0.0195692908018827 - <_> - - <_> - - - - <_> - 0 0 18 11 -1. - <_> - 0 0 9 11 2. - 0 - -0.4063118100166321 - 0.1601513028144836 - -0.0334747210144997 - <_> - - <_> - - - - <_> - 9 3 4 3 -1. - <_> - 9 3 2 3 2. - 1 - 0.0261025205254555 - -0.0336591117084026 - 0.1711813956499100 - <_> - - <_> - - - - <_> - 13 1 3 2 -1. - <_> - 14 2 1 2 3. - 1 - 0.0206018202006817 - 0.0160009600222111 - -0.2306675016880035 - <_> - - <_> - - - - <_> - 5 1 2 3 -1. - <_> - 4 2 2 1 3. - 1 - 0.0109519902616739 - 0.0243262406438589 - -0.1932314932346344 - <_> - - <_> - - - - <_> - 11 0 3 4 -1. - <_> - 11 1 3 2 2. - 0 - -0.0153848202899098 - 0.1291140019893646 - -0.0231525991111994 - <_> - - <_> - - - - <_> - 5 4 2 4 -1. - <_> - 5 4 1 2 2. - <_> - 6 6 1 2 2. - 0 - 9.1529190540313721e-003 - -0.0275521203875542 - 0.1949432045221329 - <_> - - <_> - - - - <_> - 10 2 4 3 -1. - <_> - 10 3 4 1 3. - 0 - 5.8382698334753513e-003 - -0.0376906692981720 - 0.0539483316242695 - <_> - - <_> - - - - <_> - 3 1 12 6 -1. - <_> - 3 3 12 2 3. - 0 - -0.1735664010047913 - 0.1535699963569641 - -0.0336336009204388 - <_> - - <_> - - - - <_> - 12 0 3 3 -1. - <_> - 13 1 1 3 3. - 1 - 0.0762767791748047 - 1.5475229592993855e-003 - -0.7598376870155335 - <_> - - <_> - - - - <_> - 6 0 3 3 -1. - <_> - 5 1 3 1 3. - 1 - -0.0176547393202782 - -0.1510183960199356 - 0.0349602513015270 - <_> - - <_> - - - - <_> - 10 3 4 1 -1. - <_> - 11 3 2 1 2. - 0 - 5.0020511262118816e-003 - 0.0109761096537113 - -0.1128285005688667 - <_> - - <_> - - - - <_> - 4 3 4 1 -1. - <_> - 5 3 2 1 2. - 0 - -7.6133022957947105e-005 - 0.0651452392339706 - -0.0866271033883095 - <_> - - <_> - - - - <_> - 12 4 1 2 -1. - <_> - 12 4 1 1 2. - 1 - 8.4629254415631294e-003 - -0.0301378704607487 - 0.0795185118913651 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 1 2 2 2. - 0 - -5.5159530602395535e-003 - 0.1191764026880264 - -0.0470462702214718 - <_> - - <_> - - - - <_> - 7 0 6 1 -1. - <_> - 9 0 2 1 3. - 0 - -0.0109236398711801 - -0.2052682936191559 - 0.0147112598642707 - <_> - - <_> - - - - <_> - 5 0 6 1 -1. - <_> - 7 0 2 1 3. - 0 - -0.0115158995613456 - -0.2465135008096695 - 0.0228720307350159 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 9 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - 3.6823050322709605e-005 - -0.0668980032205582 - 0.0762347802519798 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 0 1 4 2. - 1 - -0.0137132704257965 - 0.2056750953197479 - -0.0236061606556177 - <_> - - <_> - - - - <_> - 12 5 5 4 -1. - <_> - 12 6 5 2 2. - 0 - -0.0558895282447338 - -0.2744989991188049 - 0.0131967095658183 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - -7.8329117968678474e-003 - -0.3597202897071838 - 0.0129906898364425 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -7.7925767982378602e-004 - -0.1407848000526428 - 0.0493853688240051 - <_> - - <_> - - - - <_> - 5 7 3 1 -1. - <_> - 6 7 1 1 3. - 0 - -5.0162840634584427e-003 - 0.1925511062145233 - -0.0268735606223345 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - 8.3736347733065486e-004 - 0.0665552914142609 - -0.1942030042409897 - <_> - - <_> - - - - <_> - 0 0 18 1 -1. - <_> - 6 0 6 1 3. - 0 - -0.0358317717909813 - 0.0878710672259331 - -0.0557079203426838 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -2.4628289975225925e-003 - -0.2092158049345017 - 0.0181145593523979 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - 9.1072899522259831e-005 - -0.0690144225955009 - 0.0842405110597610 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 17 0 1 1 2. - <_> - 16 1 1 1 2. - 0 - -9.2241833044681698e-005 - 0.0454156100749969 - -0.0362024903297424 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 0 1 1 2. - <_> - 1 1 1 1 2. - 0 - -9.7194097179453820e-005 - 0.0817145630717278 - -0.0737292990088463 - <_> - - <_> - - - - <_> - 6 1 6 9 -1. - <_> - 8 4 2 3 9. - 0 - -0.1469123065471649 - 0.0472536496818066 - -0.1103558987379074 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - 4.6493168920278549e-003 - -0.0226820297539234 - 0.2307204008102417 - <_> - - <_> - - - - <_> - 13 3 1 4 -1. - <_> - 13 3 1 2 2. - 1 - -0.0307849701493979 - 0.1500014960765839 - -8.1769423559308052e-003 - <_> - - <_> - - - - <_> - 5 3 4 1 -1. - <_> - 5 3 2 1 2. - 1 - 0.0478212088346481 - 0.0123518398031592 - -0.3618851006031036 - <_> - - <_> - - - - <_> - 9 1 2 2 -1. - <_> - 10 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 9.8456286650616676e-005 - -0.0343333110213280 - 0.0400870405137539 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - 1.0053080040961504e-004 - -0.0624896697700024 - 0.0690512433648109 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - -1.1028290027752519e-003 - 0.1122284978628159 - -0.0474149510264397 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -1.0884639777941629e-004 - 0.0791450515389442 - -0.0712428465485573 - <_> - - <_> - - - - <_> - 9 8 2 3 -1. - <_> - 9 8 1 3 2. - 0 - 7.7682570554316044e-003 - 8.4031699225306511e-003 - -0.1845135986804962 - <_> - - <_> - - - - <_> - 4 6 1 3 -1. - <_> - 4 7 1 1 3. - 0 - -1.0334140388295054e-003 - 0.0771647468209267 - -0.0555744990706444 - <_> - - <_> - - - - <_> - 13 0 4 10 -1. - <_> - 14 0 2 10 2. - 0 - -3.0169570818543434e-003 - 0.0653708428144455 - -0.0688954070210457 - <_> - - <_> - - - - <_> - 1 0 4 10 -1. - <_> - 2 0 2 10 2. - 0 - 0.0426015295088291 - 9.5762135460972786e-003 - -0.4529556930065155 - <_> - - <_> - - - - <_> - 3 6 12 2 -1. - <_> - 6 6 6 2 2. - 0 - 0.0897185727953911 - 5.8670719154179096e-003 - -0.6613194942474365 - <_> - - <_> - - - - <_> - 2 7 2 2 -1. - <_> - 2 7 1 1 2. - <_> - 3 8 1 1 2. - 0 - -1.9257919630035758e-003 - 0.1235575973987579 - -0.0355314686894417 - <_> - - <_> - - - - <_> - 15 5 3 4 -1. - <_> - 15 6 3 2 2. - 0 - -0.0467299707233906 - -0.3821094930171967 - 2.5716701056808233e-003 - <_> - - <_> - - - - <_> - 0 5 3 4 -1. - <_> - 0 6 3 2 2. - 0 - -0.0193904805928469 - -0.2605437040328980 - 0.0184088293462992 - <_> - - <_> - - - - <_> - 12 4 6 4 -1. - <_> - 12 5 6 2 2. - 0 - -0.0338188298046589 - -0.0830006673932076 - 0.0189593508839607 - <_> - - <_> - - - - <_> - 0 4 6 4 -1. - <_> - 0 5 6 2 2. - 0 - -2.7817259542644024e-003 - 0.0517917089164257 - -0.0948727726936340 - <_> - - <_> - - - - <_> - 10 1 2 3 -1. - <_> - 10 2 2 1 3. - 0 - 6.0290079563856125e-003 - -0.0428525693714619 - 0.0880555063486099 - <_> - - <_> - - - - <_> - 6 1 2 3 -1. - <_> - 6 2 2 1 3. - 0 - -6.8631009198725224e-003 - 0.1601720005273819 - -0.0372034013271332 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 9 6 2 3 3. - 0 - 0.1177287995815277 - -1.8191840499639511e-003 - 0.6778408885002136 - <_> - - <_> - - - - <_> - 5 6 6 3 -1. - <_> - 7 6 2 3 3. - 0 - 0.0985777378082275 - -6.5248049795627594e-003 - 0.6235495209693909 - <_> - - <_> - - - - <_> - 9 8 2 3 -1. - <_> - 9 8 1 3 2. - 0 - -0.0114624500274658 - -0.1990157067775726 - 8.0179795622825623e-003 - <_> - - <_> - - - - <_> - 2 3 12 9 -1. - <_> - 6 3 4 9 3. - 0 - -0.1633179932832718 - 0.0903689563274384 - -0.0534111298620701 - <_> - - <_> - - - - <_> - 15 7 3 5 -1. - <_> - 16 7 1 5 3. - 0 - -7.8257713466882706e-003 - 0.0745467469096184 - -0.0134700303897262 - <_> - - <_> - - - - <_> - 7 8 2 3 -1. - <_> - 8 8 1 3 2. - 0 - 8.9898668229579926e-003 - 0.0122990002855659 - -0.3748194873332977 - <_> - - <_> - - - - <_> - 15 7 3 5 -1. - <_> - 16 7 1 5 3. - 0 - -0.0566452182829380 - 0.3539797961711884 - -2.1140910685062408e-003 - <_> - - <_> - - - - <_> - 0 7 3 5 -1. - <_> - 1 7 1 5 3. - 0 - -4.2577688582241535e-003 - 0.0908835232257843 - -0.0505221299827099 - <_> - - <_> - - - - <_> - 10 0 4 8 -1. - <_> - 11 1 2 8 2. - 1 - -0.0703874528408051 - 0.0831828564405441 - -0.0116044403985143 - <_> - - <_> - - - - <_> - 8 0 8 4 -1. - <_> - 7 1 8 2 2. - 1 - -0.1362756937742233 - -0.4914687871932983 - 9.1721685603260994e-003 - <_> - - <_> - - - - <_> - 11 3 3 5 -1. - <_> - 12 4 1 5 3. - 1 - -0.0389153696596622 - 0.0661449134349823 - -0.0204146895557642 - <_> - - <_> - - - - <_> - 6 8 6 1 -1. - <_> - 8 8 2 1 3. - 0 - -8.5782501846551895e-003 - -0.1290004998445511 - 0.0424058698117733 - <_> - - <_> - - - - <_> - 9 7 6 2 -1. - <_> - 11 7 2 2 3. - 0 - 0.0430980809032917 - -0.0180075708776712 - 0.2412995994091034 - <_> - - <_> - - - - <_> - 7 4 2 2 -1. - <_> - 7 4 1 1 2. - <_> - 8 5 1 1 2. - 0 - -3.3460808917880058e-003 - 0.1477863937616348 - -0.0332625284790993 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 8 0 2 1 2. - 0 - 5.3540067747235298e-003 - 0.0143190100789070 - -0.2952983081340790 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - -1.1729090329026803e-004 - 0.0579866990447044 - -0.0750294998288155 - <_> - - <_> - - - - <_> - 11 1 1 10 -1. - <_> - 11 1 1 5 2. - 1 - -0.1368360966444016 - -0.2751351892948151 - 8.0752503126859665e-003 - <_> - - <_> - - - - <_> - 7 1 10 1 -1. - <_> - 7 1 5 1 2. - 1 - 0.0576930195093155 - -0.0114714596420527 - 0.3797467052936554 - <_> - - <_> - - - - <_> - 12 0 2 8 -1. - <_> - 12 0 1 8 2. - 1 - 0.0217462796717882 - 0.0223821606487036 - -0.0546633191406727 - <_> - - <_> - - - - <_> - 6 4 6 8 -1. - <_> - 6 8 6 4 2. - 0 - -0.0544783286750317 - -0.5731750130653381 - 8.2423100247979164e-003 - <_> - - <_> - - - - <_> - 5 4 8 3 -1. - <_> - 5 5 8 1 3. - 0 - 0.0239756703376770 - -0.0239427797496319 - 0.1898276954889298 - <_> - - <_> - - - - <_> - 4 4 5 8 -1. - <_> - 4 6 5 4 2. - 0 - -0.0340613387525082 - -0.0908569097518921 - 0.0498547293245792 - <_> - - <_> - - - - <_> - 13 6 4 6 -1. - <_> - 13 9 4 3 2. - 0 - 5.6406371295452118e-003 - -0.2446964979171753 - 0.0198372602462769 - <_> - - <_> - - - - <_> - 1 6 4 6 -1. - <_> - 1 9 4 3 2. - 0 - 0.1580929011106491 - -0.0137304095551372 - 0.3853820860385895 - <_> - - <_> - - - - <_> - 15 8 2 2 -1. - <_> - 15 8 2 1 2. - 1 - -0.0179641395807266 - -0.0793163478374481 - 0.0123217497020960 - <_> - - <_> - - - - <_> - 3 8 2 2 -1. - <_> - 3 8 1 2 2. - 1 - -0.0119720501825213 - -0.1430099010467529 - 0.0301174893975258 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 0.0131621500477195 - 0.0113032795488834 - -0.1748618036508560 - <_> - - <_> - - - - <_> - 0 2 4 6 -1. - <_> - 0 4 4 2 3. - 0 - -0.0852654725313187 - -0.3967854976654053 - 0.0108603304252028 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 14 7 1 1 2. - <_> - 13 8 1 1 2. - 0 - 1.7804340459406376e-003 - -0.0397569611668587 - 0.1124197989702225 - <_> - - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - -9.3962233222555369e-005 - 0.0674501806497574 - -0.0684378072619438 - <_> - - <_> - - - - <_> - 10 10 3 1 -1. - <_> - 11 10 1 1 3. - 0 - -2.9045040719211102e-003 - -0.1542993038892746 - 0.0168986804783344 - <_> - - <_> - - - - <_> - 5 10 3 1 -1. - <_> - 6 10 1 1 3. - 0 - 1.0914620361290872e-004 - -0.0640993192791939 - 0.0843561589717865 - <_> - - <_> - - - - <_> - 12 7 2 3 -1. - <_> - 11 8 2 1 3. - 1 - -0.0265634898096323 - -0.2342021018266678 - 6.7638568580150604e-003 - <_> - - <_> - - - - <_> - 6 7 3 2 -1. - <_> - 7 8 1 2 3. - 1 - 5.8761797845363617e-003 - 0.0410624183714390 - -0.1133254021406174 - <_> - - <_> - - - - <_> - 6 8 7 3 -1. - <_> - 6 9 7 1 3. - 0 - 0.0168180596083403 - -0.0372611396014690 - 0.1030753999948502 - <_> - - <_> - - - - <_> - 7 8 1 3 -1. - <_> - 7 9 1 1 3. - 0 - -6.8439432652667165e-005 - 0.0766019672155380 - -0.0650594830513000 - <_> - - <_> - - - - <_> - 5 9 8 1 -1. - <_> - 5 9 4 1 2. - 0 - 5.9544979594647884e-003 - -0.0517451390624046 - 0.1178207024931908 - <_> - - <_> - - - - <_> - 5 8 8 2 -1. - <_> - 9 8 4 2 2. - 0 - 0.0245425198227167 - -0.0445021204650402 - 0.1351568996906281 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 10 2 2 2. - 0 - -0.0174391791224480 - -0.3598788976669312 - 4.2388997972011566e-003 - <_> - - <_> - - - - <_> - 3 7 6 2 -1. - <_> - 5 7 2 2 3. - 0 - 0.0846996903419495 - -9.4887204468250275e-003 - 0.4898504912853241 - <_> - - <_> - - - - <_> - 16 8 2 4 -1. - <_> - 16 10 2 2 2. - 0 - 0.0584264695644379 - -1.7764889635145664e-003 - 0.2401265054941177 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 10 2 2 2. - 0 - -4.6921251341700554e-003 - -0.1834792941808701 - 0.0243666004389524 - <_> - - <_> - - - - <_> - 16 8 2 1 -1. - <_> - 16 8 1 1 2. - 1 - 1.6189800226129591e-004 - -0.0158065706491470 - 0.0609016194939613 - <_> - - <_> - - - - <_> - 2 8 1 2 -1. - <_> - 2 8 1 1 2. - 1 - 9.7161885350942612e-003 - -0.0157584808766842 - 0.3374285995960236 - <_> - - <_> - - - - <_> - 8 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.4382590306922793e-003 - -0.1221797019243240 - 0.0353457704186440 - <_> - - <_> - - - - <_> - 5 8 2 1 -1. - <_> - 6 8 1 1 2. - 0 - 7.7670789323747158e-005 - -0.0622465088963509 - 0.0730406492948532 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 9 3 2 1 2. - 1 - -0.0415734015405178 - 0.4114865064620972 - -4.6173711307346821e-003 - <_> - - <_> - - - - <_> - 9 3 2 2 -1. - <_> - 9 3 1 2 2. - 1 - 1.1024770356016234e-004 - -0.0937157720327377 - 0.0526912212371826 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - 1.0518720373511314e-003 - 0.0403174199163914 - -0.1021045967936516 - <_> - - <_> - - - - <_> - 0 5 10 4 -1. - <_> - 0 5 5 2 2. - <_> - 5 7 5 2 2. - 0 - 0.0876763835549355 - 0.0184549000114203 - -0.2423200011253357 - <_> - - <_> - - - - <_> - 13 5 2 6 -1. - <_> - 13 5 1 6 2. - 0 - -0.0312626697123051 - -0.4882456958293915 - 6.7201550118625164e-003 - <_> - - <_> - - - - <_> - 3 5 2 6 -1. - <_> - 4 5 1 6 2. - 0 - 3.5472500603646040e-003 - -0.0474511012434959 - 0.0982778668403625 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 10 8 1 1 2. - <_> - 9 9 1 1 2. - 0 - -6.1450069770216942e-003 - -0.3889381885528565 - 8.0250157043337822e-003 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.1112130014225841e-003 - 0.1266880929470062 - -0.0416722185909748 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 10 0 2 6 2. - 0 - -0.0240488704293966 - -0.1937647014856339 - 7.5982958078384399e-003 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 3 3. - 1 - -0.0116094397380948 - 0.0874211937189102 - -0.0513797514140606 - <_> - - <_> - - - - <_> - 15 6 3 3 -1. - <_> - 14 7 3 1 3. - 1 - -0.0463419705629349 - 0.2960300147533417 - -7.7182101085782051e-003 - <_> - - <_> - - - - <_> - 4 7 3 2 -1. - <_> - 5 8 1 2 3. - 1 - -0.0196004994213581 - -0.3047837913036346 - 0.0146696800366044 - <_> - - <_> - - - - <_> - 12 5 3 1 -1. - <_> - 13 5 1 1 3. - 0 - -2.6132878847420216e-003 - 0.0896942168474197 - -0.0290126390755177 - <_> - - <_> - - - - <_> - 6 2 2 3 -1. - <_> - 5 3 2 1 3. - 1 - 3.4202230162918568e-003 - 0.0399987809360027 - -0.1071655973792076 - <_> - - <_> - - - - <_> - 12 5 3 1 -1. - <_> - 13 5 1 1 3. - 0 - 1.2173360300948843e-004 - -0.0327198095619679 - 0.0398633889853954 - <_> - - <_> - - - - <_> - 3 5 3 1 -1. - <_> - 4 5 1 1 3. - 0 - -8.2835118519142270e-005 - 0.0690588131546974 - -0.0651404336094856 - <_> - - <_> - - - - <_> - 12 3 2 7 -1. - <_> - 12 3 1 7 2. - 1 - -0.0886721312999725 - -0.2595139145851135 - 2.3857909254729748e-003 - <_> - - <_> - - - - <_> - 3 0 9 3 -1. - <_> - 2 1 9 1 3. - 1 - 0.0564529486000538 - -0.0244329907000065 - 0.1943967044353485 - <_> - - <_> - - - - <_> - 9 0 4 7 -1. - <_> - 10 0 2 7 2. - 0 - 0.0352844297885895 - -6.3825729303061962e-003 - 0.1302241981029511 - <_> - - <_> - - - - <_> - 5 0 4 7 -1. - <_> - 6 0 2 7 2. - 0 - 3.3733129967004061e-003 - 0.0459797382354736 - -0.1080064997076988 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - 2.8562510851770639e-003 - 0.0167033392935991 - -0.0340115912258625 - <_> - - <_> - - - - <_> - 8 7 1 3 -1. - <_> - 8 8 1 1 3. - 0 - -1.4414669713005424e-003 - 0.0993241667747498 - -0.0425297208130360 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 10 2 2 3 2. - 0 - -8.5116196423768997e-003 - -0.0755092576146126 - 0.0102032897993922 - <_> - - <_> - - - - <_> - 5 2 4 3 -1. - <_> - 6 2 2 3 2. - 0 - -9.2428773641586304e-003 - -0.1581107974052429 - 0.0253618899732828 - <_> - - <_> - - - - <_> - 9 2 1 3 -1. - <_> - 9 3 1 1 3. - 0 - -2.8794261161237955e-003 - 0.0794534385204315 - -0.0275142192840576 - <_> - - <_> - - - - <_> - 8 2 2 2 -1. - <_> - 8 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - 1.0851400293176994e-004 - -0.0613191910088062 - 0.0741009116172791 - <_> - - <_> - - - - <_> - 3 0 15 3 -1. - <_> - 8 1 5 1 9. - 0 - 0.1777645051479340 - -0.0142687996849418 - 0.1216413006186485 - <_> - - <_> - - - - <_> - 0 0 15 3 -1. - <_> - 5 1 5 1 9. - 0 - -0.1714946925640106 - 0.1508314013481140 - -0.0349265895783901 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 1.5180290210992098e-004 - -0.0415346212685108 - 0.0423766002058983 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 6.3419649377465248e-003 - 0.0221059005707502 - -0.2163116037845612 - <_> - - <_> - - - - <_> - 16 0 2 1 -1. - <_> - 16 0 1 1 2. - 1 - 0.0139359897002578 - 5.4779318161308765e-003 - -0.2566483020782471 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - -9.7202723845839500e-003 - -0.2787249088287354 - 0.0153812197968364 - <_> - - <_> - - - - <_> - 10 7 1 3 -1. - <_> - 10 8 1 1 3. - 0 - -0.0279809609055519 - -0.8680973052978516 - 1.1637150309979916e-003 - <_> - - <_> - - - - <_> - 7 7 1 3 -1. - <_> - 7 8 1 1 3. - 0 - 3.6777809727936983e-003 - -0.0439085103571415 - 0.0968960523605347 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - -3.1721419654786587e-003 - -0.2407802045345306 - 0.0137234004214406 - <_> - - <_> - - - - <_> - 3 7 2 2 -1. - <_> - 3 7 1 1 2. - <_> - 4 8 1 1 2. - 0 - -3.9061410352587700e-003 - 0.1714020967483521 - -0.0223179291933775 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - 9.6693192608654499e-004 - 0.0329513512551785 - -0.1008007973432541 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - -8.9019339065998793e-004 - -0.1100971996784210 - 0.0389971695840359 - <_> - - <_> - - - - <_> - 11 3 3 5 -1. - <_> - 12 4 1 5 3. - 1 - -0.0114977899938822 - 0.0339279212057590 - -0.0398428998887539 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - -7.9675206507090479e-005 - 0.0772038027644157 - -0.0616980418562889 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - 8.9554538135416806e-005 - -0.0579389482736588 - 0.0674481466412544 - <_> - - <_> - - - - <_> - 4 7 2 3 -1. - <_> - 3 8 2 1 3. - 1 - -5.9674619697034359e-003 - 0.1024459004402161 - -0.0394676700234413 - <_> - - <_> - - - - <_> - 14 9 2 2 -1. - <_> - 15 9 1 1 2. - <_> - 14 10 1 1 2. - 0 - 8.7341177277266979e-005 - -0.0592451207339764 - 0.0648630335927010 - <_> - - <_> - - - - <_> - 2 9 2 2 -1. - <_> - 2 9 1 1 2. - <_> - 3 10 1 1 2. - 0 - 7.7206510468386114e-005 - -0.0700068399310112 - 0.0639012232422829 - <_> - - <_> - - - - <_> - 10 1 6 4 -1. - <_> - 12 1 2 4 3. - 0 - -0.0360133796930313 - -0.2044741064310074 - 0.0152392601594329 - <_> - - <_> - - - - <_> - 7 5 3 1 -1. - <_> - 8 5 1 1 3. - 0 - -5.5890497751533985e-003 - 0.1546787023544312 - -0.0262218993157148 - <_> - - <_> - - - - <_> - 16 3 2 1 -1. - <_> - 16 3 1 1 2. - 0 - -3.0190621037036180e-003 - 0.1182160004973412 - -0.0196828804910183 - <_> - - <_> - - - - <_> - 0 3 2 1 -1. - <_> - 1 3 1 1 2. - 0 - -1.0563310206634924e-004 - 0.0396224707365036 - -0.1021222025156021 - <_> - - <_> - - - - <_> - 10 1 6 4 -1. - <_> - 12 1 2 4 3. - 0 - 0.0292609799653292 - 9.6228392794728279e-003 - -0.0790486484766006 - <_> - - <_> - - - - <_> - 2 1 6 4 -1. - <_> - 4 1 2 4 3. - 0 - -0.0243638902902603 - -0.1273649930953980 - 0.0323355086147785 - <_> - - <_> - - - - <_> - 16 3 2 2 -1. - <_> - 17 3 1 1 2. - <_> - 16 4 1 1 2. - 0 - 6.9917208747938275e-004 - 0.0656140670180321 - -0.2333559989929199 - <_> - - <_> - - - - <_> - 5 9 8 3 -1. - <_> - 5 10 8 1 3. - 0 - -0.0164595209062099 - 0.1308584064245224 - -0.0320973210036755 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 9 10 1 1 9. - 0 - 3.0983570031821728e-003 - -0.0322582796216011 - 0.0500438287854195 - <_> - - <_> - - - - <_> - 0 8 7 4 -1. - <_> - 0 9 7 2 2. - 0 - -0.0326381810009480 - -0.2740997076034546 - 0.0148940803483129 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 1.5158359892666340e-003 - -0.0171369109302759 - 0.0813518017530441 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - -0.0256133303046227 - 0.4109638035297394 - -9.7792968153953552e-003 - <_> - - <_> - - - - <_> - 17 8 1 4 -1. - <_> - 17 9 1 2 2. - 0 - -1.3288609916344285e-003 - -0.1267981976270676 - 0.0374262891709805 - <_> - - <_> - - - - <_> - 0 6 2 4 -1. - <_> - 0 7 2 2 2. - 0 - -0.0197326596826315 - -0.5678799748420715 - 6.9732400588691235e-003 - <_> - - <_> - - - - <_> - 4 2 11 4 -1. - <_> - 4 3 11 2 2. - 0 - 0.0274254009127617 - -0.0403345897793770 - 0.0948806926608086 - <_> - - <_> - - - - <_> - 0 1 10 2 -1. - <_> - 0 1 5 1 2. - <_> - 5 2 5 1 2. - 0 - -6.8159690126776695e-003 - 0.1012991964817047 - -0.0492946915328503 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - -9.7623662441037595e-005 - 0.0576133392751217 - -0.0436381287872791 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - 7.9219877079594880e-005 - -0.0620024800300598 - 0.0700365826487541 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - -9.2277792282402515e-004 - -0.0710998997092247 - 0.0233439598232508 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 1 1 2. - <_> - 7 10 1 1 2. - 0 - 1.0547949932515621e-003 - 0.0386410690844059 - -0.1152891963720322 - <_> - - <_> - - - - <_> - 8 1 3 1 -1. - <_> - 9 1 1 1 3. - 0 - 1.1142979928990826e-004 - -0.0438570901751518 - 0.0502055808901787 - <_> - - <_> - - - - <_> - 0 2 1 3 -1. - <_> - 0 3 1 1 3. - 0 - -1.1004459811374545e-003 - 0.0836255997419357 - -0.0462212897837162 - <_> - - <_> - - - - <_> - 14 4 2 6 -1. - <_> - 14 4 1 6 2. - 0 - -0.0201331395655870 - -0.1819795966148377 - 0.0193990692496300 - <_> - - <_> - - - - <_> - 2 4 2 6 -1. - <_> - 3 4 1 6 2. - 0 - 0.0250241402536631 - 0.0112704597413540 - -0.3441075980663300 - <_> - - <_> - - - - <_> - 11 3 4 1 -1. - <_> - 11 3 2 1 2. - 1 - -0.0441904999315739 - 0.2924847006797791 - -0.0148494699969888 - <_> - - <_> - - - - <_> - 7 3 1 4 -1. - <_> - 7 3 1 2 2. - 1 - -0.0574402585625649 - 0.4708757102489471 - -7.9044541344046593e-003 - <_> - - <_> - - - - <_> - 9 1 4 2 -1. - <_> - 9 2 4 1 2. - 0 - 0.0148673597723246 - -0.0192680396139622 - 0.1109855026006699 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - 1.9520210335031152e-003 - -0.0343626998364925 - 0.1134907975792885 - <_> - - <_> - - - - <_> - 15 7 2 2 -1. - <_> - 16 7 1 1 2. - <_> - 15 8 1 1 2. - 0 - -0.0135906096547842 - -0.7936090230941773 - 1.8023570301011205e-003 - <_> - - <_> - - - - <_> - 1 7 2 2 -1. - <_> - 1 7 1 1 2. - <_> - 2 8 1 1 2. - 0 - -2.6812639553099871e-003 - 0.1689673960208893 - -0.0260897409170866 - <_> - - <_> - - - - <_> - 14 9 2 2 -1. - <_> - 15 9 1 1 2. - <_> - 14 10 1 1 2. - 0 - -8.6407686467282474e-005 - 0.0617756806313992 - -0.0446039810776711 - <_> - - <_> - - - - <_> - 2 9 2 2 -1. - <_> - 2 9 1 1 2. - <_> - 3 10 1 1 2. - 0 - 1.2983200140297413e-003 - 0.0349389500916004 - -0.1101967990398407 - <_> - - <_> - - - - <_> - 14 9 3 3 -1. - <_> - 15 9 1 3 3. - 0 - 2.6221210137009621e-003 - -0.0320504494011402 - 0.0681399479508400 - <_> - - <_> - - - - <_> - 0 4 3 2 -1. - <_> - 0 5 3 1 2. - 0 - 0.0122806504368782 - 0.0123599302023649 - -0.2986221909523010 - <_> - - <_> - - - - <_> - 16 3 1 3 -1. - <_> - 16 4 1 1 3. - 0 - -5.0658849067986012e-003 - -0.2809391915798187 - 0.0240037497133017 - <_> - - <_> - - - - <_> - 1 3 1 3 -1. - <_> - 1 4 1 1 3. - 0 - -1.0383049811935052e-004 - 0.0608946606516838 - -0.0702530369162560 - <_> - - <_> - - - - <_> - 17 1 1 3 -1. - <_> - 17 2 1 1 3. - 0 - 9.8692486062645912e-003 - 6.2764049507677555e-003 - -0.3604516983032227 - <_> - - <_> - - - - <_> - 0 1 1 3 -1. - <_> - 0 2 1 1 3. - 0 - -9.1246962256263942e-005 - 0.0636363625526428 - -0.0646700933575630 - <_> - - <_> - - - - <_> - 8 2 3 5 -1. - <_> - 9 2 1 5 3. - 0 - -7.5011849403381348e-003 - 0.0954736098647118 - -0.0367636382579803 - <_> - - <_> - - - - <_> - 9 0 6 4 -1. - <_> - 8 1 6 2 2. - 1 - -0.1474543958902359 - -0.7921406030654907 - 5.0740689039230347e-003 - <_> - - <_> - - - - <_> - 14 9 3 3 -1. - <_> - 15 9 1 3 3. - 0 - -2.1300138905644417e-003 - 0.1033352985978127 - -0.0428916811943054 - <_> - - <_> - - - - <_> - 1 9 3 3 -1. - <_> - 2 9 1 3 3. - 0 - 2.5524429511278868e-003 - -0.0419290699064732 - 0.0879960134625435 - <_> - - <_> - - - - <_> - 1 11 16 1 -1. - <_> - 1 11 8 1 2. - 0 - 0.0581399388611317 - 0.0126118101179600 - -0.3033181130886078 - <_> - - <_> - - - - <_> - 0 10 12 2 -1. - <_> - 3 10 6 2 2. - 0 - 0.0237430091947317 - -0.0298020895570517 - 0.1232284978032112 - <_> - - <_> - - - - <_> - 2 10 16 2 -1. - <_> - 6 10 8 2 2. - 0 - -0.0622484982013702 - 0.1111064031720161 - -0.0208172500133514 - <_> - - <_> - - - - <_> - 1 9 3 1 -1. - <_> - 2 9 1 1 3. - 0 - -9.1270900156814605e-005 - 0.0643820092082024 - -0.0609378181397915 - <_> - - <_> - - - - <_> - 12 8 4 2 -1. - <_> - 13 8 2 2 2. - 0 - -0.0390825681388378 - 0.5669565200805664 - -1.1460679816082120e-003 - <_> - - <_> - - - - <_> - 2 8 4 2 -1. - <_> - 3 8 2 2 2. - 0 - 0.0132483700290322 - 0.0124056600034237 - -0.3085829913616180 - <_> - - <_> - - - - <_> - 4 9 14 2 -1. - <_> - 11 9 7 1 2. - <_> - 4 10 7 1 2. - 0 - -0.0502357184886932 - 0.1608469933271408 - -3.1474840361624956e-003 - <_> - - <_> - - - - <_> - 0 9 14 2 -1. - <_> - 0 9 7 1 2. - <_> - 7 10 7 1 2. - 0 - 8.1979725509881973e-003 - -0.0431106388568878 - 0.0833378136157990 - <_> - - <_> - - - - <_> - 11 8 7 4 -1. - <_> - 11 10 7 2 2. - 0 - 4.5282919891178608e-003 - -0.1473769992589951 - 0.0222668796777725 - <_> - - <_> - - - - <_> - 0 8 2 4 -1. - <_> - 0 10 2 2 2. - 0 - -7.0286458358168602e-003 - -0.2166559994220734 - 0.0180825907737017 - <_> - - <_> - - - - <_> - 5 5 8 4 -1. - <_> - 5 7 8 2 2. - 0 - 0.0329962112009525 - -0.1114479973912239 - 0.0356937386095524 - <_> - - <_> - - - - <_> - 5 8 1 3 -1. - <_> - 4 9 1 1 3. - 1 - 6.9042239338159561e-003 - -0.0326694808900356 - 0.1269308030605316 - <_> - - <_> - - - - <_> - 14 8 1 3 -1. - <_> - 14 9 1 1 3. - 0 - 6.4168781973421574e-003 - 0.0134054096415639 - -0.2267629057168961 - <_> - - <_> - - - - <_> - 6 8 6 3 -1. - <_> - 6 9 6 1 3. - 0 - 0.0327656008303165 - -0.0207374691963196 - 0.2009093016386032 - <_> - - <_> - - - - <_> - 10 8 8 3 -1. - <_> - 10 9 8 1 3. - 0 - -0.0690061226487160 - -0.4887377023696899 - 2.5993511080741882e-003 - <_> - - <_> - - - - <_> - 0 8 8 3 -1. - <_> - 0 9 8 1 3. - 0 - -1.5318569785449654e-004 - 0.0692518576979637 - -0.0646361634135246 - <_> - - <_> - - - - <_> - 12 9 6 3 -1. - <_> - 12 10 6 1 3. - 0 - 0.0139683997258544 - 0.0237690396606922 - -0.1365654021501541 - <_> - - <_> - - - - <_> - 0 9 6 3 -1. - <_> - 0 10 6 1 3. - 0 - 0.0243236999958754 - 9.9094482138752937e-003 - -0.3678967952728272 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 9 10 1 1 9. - 0 - 0.0537719912827015 - -3.4769340418279171e-003 - 0.5661581158638001 - <_> - - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - 3.7300360854715109e-003 - 0.0117311300709844 - -0.3576517999172211 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 9 10 1 1 9. - 0 - -0.0595172084867954 - -0.4959082901477814 - 1.2971699470654130e-003 - <_> - - <_> - - - - <_> - 7 9 3 3 -1. - <_> - 8 10 1 1 9. - 0 - 7.5328880921006203e-003 - -0.0369591489434242 - 0.1090314015746117 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 2.3298559244722128e-003 - 0.0146774696186185 - -0.1842717975378037 - <_> - - <_> - - - - <_> - 7 10 3 1 -1. - <_> - 8 10 1 1 3. - 0 - -1.3588890433311462e-003 - 0.1198329031467438 - -0.0408487692475319 - <_> - - <_> - - - - <_> - 9 3 9 3 -1. - <_> - 12 4 3 1 9. - 0 - -0.0691622570157051 - 0.0999828428030014 - -0.0220057591795921 - <_> - - <_> - - - - <_> - 0 4 6 3 -1. - <_> - 3 4 3 3 2. - 0 - -0.1089052036404610 - 0.3532336056232452 - -0.0115018598735332 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 4 0 7 12 2. - 0 - 0.3434326052665710 - -0.0179773606359959 - 0.2303715050220490 - <_> - - <_> - - - - <_> - 0 0 14 12 -1. - <_> - 7 0 7 12 2. - 0 - -0.6663107872009277 - -0.4369150102138519 - 0.0113666104152799 - <_> - - <_> - - - - <_> - 2 0 16 9 -1. - <_> - 6 0 8 9 2. - 0 - -0.0450541712343693 - 0.0329158082604408 - -0.0855351388454437 - <_> - - <_> - - - - <_> - 0 0 9 3 -1. - <_> - 3 0 3 3 3. - 0 - -0.0140888104215264 - 0.0531004704535007 - -0.0771832093596458 - <_> - - <_> - - - - <_> - 8 0 2 4 -1. - <_> - 8 1 2 2 2. - 0 - -9.3094259500503540e-003 - 0.1241753995418549 - -0.0329468399286270 - <_> - - <_> - - - - <_> - 4 0 10 4 -1. - <_> - 4 1 10 2 2. - 0 - 0.0148078603670001 - -0.0706440284848213 - 0.0814755633473396 - <_> - - <_> - - - - <_> - 9 3 9 3 -1. - <_> - 12 4 3 1 9. - 0 - 0.1039924994111061 - -0.0149245001375675 - 0.1835743039846420 - <_> - - <_> - - - - <_> - 0 3 9 3 -1. - <_> - 3 4 3 1 9. - 0 - 0.1940699964761734 - -6.4371521584689617e-003 - 0.6097124218940735 - <_> - - <_> - - - - <_> - 9 11 9 1 -1. - <_> - 12 11 3 1 3. - 0 - -0.0380649007856846 - -0.5225595831871033 - 5.7811117731034756e-003 - <_> - - <_> - - - - <_> - 0 11 9 1 -1. - <_> - 3 11 3 1 3. - 0 - -6.6563528962433338e-003 - 0.0948712229728699 - -0.0397894605994225 - <_> - - <_> - - - - <_> - 17 0 1 3 -1. - <_> - 17 1 1 1 3. - 0 - -1.0609209857648239e-004 - 0.0455161705613136 - -0.0414181500673294 - <_> - - <_> - - - - <_> - 0 11 16 1 -1. - <_> - 8 11 8 1 2. - 0 - 0.0708718523383141 - 9.3520022928714752e-003 - -0.3643955886363983 - <_> - - <_> - - - - <_> - 6 0 6 2 -1. - <_> - 8 0 2 2 3. - 0 - 0.0120854498818517 - 0.0234655290842056 - -0.1440993994474411 - <_> - - <_> - - - - <_> - 0 0 1 3 -1. - <_> - 0 1 1 1 3. - 0 - -9.9468030384741724e-005 - 0.0579567216336727 - -0.0609177798032761 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 1.6888909740373492e-003 - -0.0467657893896103 - 0.1903689950704575 - <_> - - <_> - - - - <_> - 1 0 2 2 -1. - <_> - 1 0 1 1 2. - <_> - 2 1 1 1 2. - 0 - -9.8317061201669276e-005 - 0.0726464465260506 - -0.0580519586801529 - <_> - - <_> - - - - <_> - 2 0 14 2 -1. - <_> - 9 0 7 1 2. - <_> - 2 1 7 1 2. - 0 - 8.1128161400556564e-003 - -0.0406208597123623 - 0.0976111814379692 - <_> - - <_> - - - - <_> - 6 0 2 3 -1. - <_> - 5 1 2 1 3. - 1 - 0.0172555204480886 - 0.0171617697924376 - -0.2435871958732605 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 14 0 1 3 2. - 1 - 0.0316928215324879 - 0.0119671402499080 - -0.2916052043437958 - <_> - - <_> - - - - <_> - 4 0 3 2 -1. - <_> - 4 0 3 1 2. - 1 - -9.4834472984075546e-003 - -0.1456626057624817 - 0.0312083102762699 - <_> - - <_> - - - - <_> - 15 0 3 1 -1. - <_> - 16 0 1 1 3. - 0 - 1.8280290532857180e-003 - -0.0147117301821709 - 0.0556681081652641 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - 8.6632797319907695e-005 - -0.0611560605466366 - 0.0709745436906815 - <_> - - <_> - - - - <_> - 11 3 3 5 -1. - <_> - 12 4 1 5 3. - 1 - 0.0250250492244959 - -0.0133975502103567 - 0.1055693030357361 - <_> - - <_> - - - - <_> - 7 3 5 3 -1. - <_> - 6 4 5 1 3. - 1 - 0.0559404902160168 - -0.0147893903777003 - 0.2496054023504257 - <_> - - <_> - - - - <_> - 10 6 2 6 -1. - <_> - 10 9 2 3 2. - 0 - 0.0163375101983547 - -0.0567525997757912 - 0.0133827701210976 - <_> - - <_> - - - - <_> - 2 2 6 9 -1. - <_> - 4 5 2 3 9. - 0 - -0.4597268998622894 - -0.7128785252571106 - 4.9509857781231403e-003 - <_> - - <_> - - - - <_> - 12 0 4 5 -1. - <_> - 12 0 2 5 2. - 1 - -0.0651727765798569 - -0.0825435370206833 - 0.0151981897652149 - <_> - - <_> - - - - <_> - 1 0 4 7 -1. - <_> - 2 0 2 7 2. - 0 - -0.0267047807574272 - -0.2091623991727829 - 0.0185813792049885 - <_> - - <_> - - - - <_> - 12 0 4 5 -1. - <_> - 12 0 2 5 2. - 1 - 0.1849551051855087 - 1.8260549986734986e-003 - -0.3918307125568390 - <_> - - <_> - - - - <_> - 6 0 5 4 -1. - <_> - 6 0 5 2 2. - 1 - 0.0956118628382683 - -0.0152323301881552 - 0.3004105985164642 - <_> - - <_> - - - - <_> - 0 0 18 12 -1. - <_> - 9 0 9 6 2. - <_> - 0 6 9 6 2. - 0 - 0.5474516749382019 - 6.3382647931575775e-003 - -0.6203535795211792 - <_> - - <_> - - - - <_> - 3 1 12 1 -1. - <_> - 9 1 6 1 2. - 0 - 7.9493559896945953e-003 - -0.0620486587285995 - 0.0612094290554523 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 9 0 2 8 2. - 1 - 0.2717502117156982 - -1.6191200120374560e-003 - 0.5800688266754150 - <_> - - <_> - - - - <_> - 9 0 8 4 -1. - <_> - 9 0 8 2 2. - 1 - 0.1367141008377075 - 0.0144465100020170 - -0.2629972994327545 - <_> - - <_> - - - - <_> - 14 3 4 3 -1. - <_> - 14 4 4 1 3. - 0 - 0.0231442693620920 - 0.0151772303506732 - -0.3359493017196655 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - -1.4187960186973214e-003 - 0.0954093709588051 - -0.0367577895522118 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 10 0 2 6 3. - 0 - -0.0188197195529938 - -0.0401841215789318 - 0.0132702598348260 - <_> - - <_> - - - - <_> - 4 0 8 3 -1. - <_> - 8 0 4 3 2. - 0 - -0.0817246884107590 - 0.3249298036098480 - -0.0115589201450348 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 8 0 2 2 2. - 0 - -8.0951452255249023e-003 - -0.2676523029804230 - 0.0145770898088813 - <_> - - <_> - - - - <_> - 1 0 2 1 -1. - <_> - 2 0 1 1 2. - 0 - -8.2515813119243830e-005 - 0.0382131598889828 - -0.0928251221776009 - <_> - - <_> - - - - <_> - 8 2 6 3 -1. - <_> - 8 3 6 1 3. - 0 - 0.0491492711007595 - -0.0114412000402808 - 0.1334352046251297 - <_> - - <_> - - - - <_> - 2 0 3 1 -1. - <_> - 3 1 1 1 3. - 1 - 5.3070918656885624e-003 - -0.0308899395167828 - 0.1200186982750893 - <_> - - <_> - - - - <_> - 11 11 6 1 -1. - <_> - 13 11 2 1 3. - 0 - 0.0124346399679780 - 0.0100919296965003 - -0.1618265062570572 - <_> - - <_> - - - - <_> - 1 11 6 1 -1. - <_> - 3 11 2 1 3. - 0 - 1.3028579996898770e-003 - -0.0562199801206589 - 0.0666626170277596 - <_> - - <_> - - - - <_> - 17 3 1 4 -1. - <_> - 17 5 1 2 2. - 0 - -0.0109491897746921 - -0.2103808969259262 - 0.0211303997784853 - <_> - - <_> - - - - <_> - 0 3 1 4 -1. - <_> - 0 5 1 2 2. - 0 - -0.0158395506441593 - -0.3207955062389374 - 0.0108829103410244 - -1.3446700572967529 - 16 - -1 - diff --git a/data/haarcascades/haarcascade_mcs_upperbody.xml b/data/haarcascades/haarcascade_mcs_upperbody.xml deleted file mode 100644 index 792b8d1..0000000 --- a/data/haarcascades/haarcascade_mcs_upperbody.xml +++ /dev/null @@ -1,46327 +0,0 @@ - - - - - - 22 20 - - <_> - - - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 10 4 2 4 3. - 0 - 1.2492679525166750e-003 - -0.4920325875282288 - 0.3854399025440216 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 7 6 2 2. - 0 - 3.1020329333841801e-004 - -0.3749389052391052 - 0.2843770980834961 - <_> - - <_> - - - - <_> - 5 4 12 7 -1. - <_> - 8 4 6 7 2. - 0 - 0.0963153466582298 - -0.1161305010318756 - 0.7296751141548157 - <_> - - <_> - - - - <_> - 3 1 16 8 -1. - <_> - 7 1 8 8 2. - 0 - -0.0253816507756710 - 0.3430817127227783 - -0.2171147018671036 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -3.3788379369070753e-005 - 0.2308478057384491 - -0.2142890989780426 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 10 8 2 3 2. - 0 - -9.9204434081912041e-003 - -0.5459647774696350 - 0.1485244929790497 - <_> - - <_> - - - - <_> - 0 0 15 9 -1. - <_> - 0 3 15 3 3. - 0 - 0.3743768036365509 - -0.0556398294866085 - -3.8648000488281250e+003 - <_> - - <_> - - - - <_> - 5 2 12 6 -1. - <_> - 9 4 4 2 9. - 0 - 0.1577703058719635 - -0.0836010500788689 - 0.6361330747604370 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - -8.6156948236748576e-004 - -0.4247361123561859 - 0.1151752024888992 - <_> - - <_> - - - - <_> - 14 17 2 3 -1. - <_> - 14 18 2 1 3. - 0 - 1.4470949536189437e-003 - 0.0880990624427795 - -0.3370375037193298 - <_> - - <_> - - - - <_> - 6 17 2 3 -1. - <_> - 6 18 2 1 3. - 0 - 9.6110720187425613e-004 - 0.1464686989784241 - -0.3953909873962402 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 8 2 6 2 3. - 0 - -0.0178647805005312 - 0.3449226915836334 - -0.1188969984650612 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - 1.4062010450288653e-005 - -0.1764784008264542 - 0.2489051073789597 - <_> - - <_> - - - - <_> - 12 13 4 1 -1. - <_> - 12 13 2 1 2. - 0 - -4.6323220885824412e-005 - 0.1130303964018822 - -0.1276499927043915 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - 7.5712718535214663e-004 - 0.1678117066621780 - -0.3505190014839172 - <_> - - <_> - - - - <_> - 20 1 2 4 -1. - <_> - 21 1 1 2 2. - <_> - 20 3 1 2 2. - 0 - 8.4784009959548712e-004 - 0.0470854490995407 - -0.2779000997543335 - <_> - - <_> - - - - <_> - 0 1 2 4 -1. - <_> - 0 1 1 2 2. - <_> - 1 3 1 2 2. - 0 - -1.3911760179325938e-003 - -0.4445956945419312 - 0.1260281950235367 - <_> - - <_> - - - - <_> - 13 5 3 4 -1. - <_> - 14 5 1 4 3. - 0 - -6.3936309888958931e-003 - 0.4080690145492554 - -0.1045631989836693 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 8 2 1 2. - 0 - -3.4687869629124179e-005 - 0.2089911997318268 - -0.1785988062620163 - <_> - - <_> - - - - <_> - 15 4 3 1 -1. - <_> - 16 5 1 1 3. - 1 - 4.6302800910780206e-005 - -0.0813364833593369 - 0.0632260069251060 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 5 1 3 3. - 0 - -5.2149579860270023e-003 - 0.3453747928142548 - -0.1022202968597412 - <_> - - <_> - - - - <_> - 20 6 2 4 -1. - <_> - 21 6 1 2 2. - <_> - 20 8 1 2 2. - 0 - -1.4078790554776788e-003 - -0.3131918013095856 - 0.1276133060455322 - <_> - - <_> - - - - <_> - 1 0 1 3 -1. - <_> - 1 1 1 1 3. - 0 - -1.7251130193471909e-003 - -0.5323169827461243 - 0.0307671204209328 - <_> - - <_> - - - - <_> - 20 0 1 2 -1. - <_> - 20 1 1 1 2. - 0 - 6.3083309214562178e-004 - 0.0737423971295357 - -0.2974672019481659 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 0.0283000692725182 - -0.0505856089293957 - 0.5723134279251099 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 3.0987561331130564e-005 - -0.1961929947137833 - 0.1545110940933228 - <_> - - <_> - - - - <_> - 0 16 18 2 -1. - <_> - 6 16 6 2 3. - 0 - 0.2026561051607132 - -8.0046234652400017e-003 - -2.8372451171875000e+003 - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 10 4 2 4 3. - 0 - -3.0515150865539908e-004 - 0.2812474966049194 - -0.1499256938695908 - <_> - - <_> - - - - <_> - 10 7 1 6 -1. - <_> - 10 10 1 3 2. - 0 - 4.3186601251363754e-003 - 0.0904247611761093 - -0.5376241207122803 - <_> - - <_> - - - - <_> - 5 3 17 8 -1. - <_> - 5 7 17 4 2. - 0 - -0.1059990003705025 - -0.4829052984714508 - 8.8053867220878601e-003 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 4 7 1 3 3. - 1 - 0.0642996132373810 - -2.2408259974326938e-004 - -3.2261879882812500e+003 - <_> - - <_> - - - - <_> - 10 5 4 2 -1. - <_> - 12 5 2 1 2. - <_> - 10 6 2 1 2. - 0 - -4.6435470721917227e-005 - 0.1345859020948410 - -0.1200902014970779 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - 5.3147651487961411e-004 - 0.1287430971860886 - -0.3338285088539124 - <_> - - <_> - - - - <_> - 10 4 9 14 -1. - <_> - 13 4 3 14 3. - 0 - 0.1049555018544197 - -0.0725827515125275 - 0.4076276123523712 - -1.3463230133056641 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 10 4 2 4 3. - 0 - 2.6972210034728050e-003 - -0.4966320991516113 - 0.5279619097709656 - <_> - - <_> - - - - <_> - 12 0 4 3 -1. - <_> - 11 1 4 1 3. - 1 - -3.1051780097186565e-003 - 0.3083263039588928 - -0.1750009059906006 - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -4.6089510433375835e-003 - 0.3982521891593933 - -0.2383888959884644 - <_> - - <_> - - - - <_> - 5 2 12 9 -1. - <_> - 8 2 6 9 2. - 0 - 0.0768667832016945 - -0.1288637071847916 - 0.5626823902130127 - <_> - - <_> - - - - <_> - 10 11 4 2 -1. - <_> - 10 11 2 2 2. - 1 - 0.0601817518472672 - 0.0119924601167440 - -5.7196899414062500e+003 - <_> - - <_> - - - - <_> - 7 14 8 6 -1. - <_> - 7 17 8 3 2. - 0 - -2.3719770833849907e-003 - 0.0964064374566078 - -0.0725315734744072 - <_> - - <_> - - - - <_> - 5 4 12 11 -1. - <_> - 9 4 4 11 3. - 0 - -0.0223513897508383 - 0.4273299872875214 - -0.2333548963069916 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 7 6 2 2. - 0 - 1.1298250174149871e-003 - -0.2456167936325073 - 0.2300640046596527 - <_> - - <_> - - - - <_> - 1 17 17 3 -1. - <_> - 1 18 17 1 3. - 0 - -0.0165429003536701 - -0.7295318245887756 - 0.0713227689266205 - <_> - - <_> - - - - <_> - 1 17 20 3 -1. - <_> - 1 18 20 1 3. - 0 - 0.0162927191704512 - 0.0535473413765430 - -0.6581004858016968 - <_> - - <_> - - - - <_> - 11 0 5 3 -1. - <_> - 10 1 5 1 3. - 1 - 1.4970790361985564e-003 - -0.1805673986673355 - 0.2456158995628357 - <_> - - <_> - - - - <_> - 8 1 8 2 -1. - <_> - 8 1 4 2 2. - 0 - -1.4413120225071907e-003 - 0.1115280017256737 - -0.0821675211191177 - <_> - - <_> - - - - <_> - 9 7 3 6 -1. - <_> - 9 9 3 2 3. - 0 - -0.0103522101417184 - -0.5168197154998779 - 0.0773808211088181 - <_> - - <_> - - - - <_> - 13 0 4 18 -1. - <_> - 13 0 2 18 2. - 0 - -5.2497540600597858e-003 - 0.1565202027559280 - -0.1293860971927643 - <_> - - <_> - - - - <_> - 1 0 2 3 -1. - <_> - 1 1 2 1 3. - 0 - 1.5690580476075411e-003 - 0.1506969034671783 - -0.4013290107250214 - <_> - - <_> - - - - <_> - 10 6 9 12 -1. - <_> - 13 6 3 12 3. - 0 - -0.0265003796666861 - 0.1006537973880768 - -0.1319037973880768 - <_> - - <_> - - - - <_> - 7 6 3 2 -1. - <_> - 8 6 1 2 3. - 0 - 6.9238577270880342e-004 - -0.1602074950933456 - 0.2651351094245911 - <_> - - <_> - - - - <_> - 19 0 2 3 -1. - <_> - 19 1 2 1 3. - 0 - -1.2375250225886703e-003 - -0.3643004000186920 - 0.1563878953456879 - <_> - - <_> - - - - <_> - 0 7 20 1 -1. - <_> - 10 7 10 1 2. - 0 - 0.0830973386764526 - -0.0505811609327793 - -1.1069330078125000e+004 - <_> - - <_> - - - - <_> - 13 5 4 4 -1. - <_> - 13 7 4 2 2. - 0 - 0.0274593606591225 - 0.0120037598535419 - -0.6037219166755676 - <_> - - <_> - - - - <_> - 2 0 2 3 -1. - <_> - 2 1 2 1 3. - 0 - -9.3256239779293537e-004 - -0.3219343125820160 - 0.1004130020737648 - <_> - - <_> - - - - <_> - 9 6 6 6 -1. - <_> - 9 8 6 2 3. - 0 - 1.3935200404375792e-003 - -0.1690497994422913 - 0.1530787050724030 - <_> - - <_> - - - - <_> - 3 6 3 2 -1. - <_> - 3 7 3 1 2. - 0 - 1.1394890025258064e-003 - 0.1456533074378967 - -0.2962946891784668 - <_> - - <_> - - - - <_> - 3 4 16 16 -1. - <_> - 7 4 8 16 2. - 0 - 0.0791297703981400 - -0.1599674969911575 - 0.2649135887622833 - -1.3991409540176392 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 2 6 4 -1. - <_> - 6 2 3 2 2. - <_> - 9 4 3 2 2. - 0 - 4.6252529136836529e-003 - -0.3476319015026093 - 0.4884343147277832 - <_> - - <_> - - - - <_> - 7 3 8 9 -1. - <_> - 9 3 4 9 2. - 0 - 0.0444272607564926 - -0.1623889952898026 - 0.6096100211143494 - <_> - - <_> - - - - <_> - 4 2 6 13 -1. - <_> - 7 2 3 13 2. - 0 - -0.0124322902411222 - 0.3017083108425140 - -0.1730691939592362 - <_> - - <_> - - - - <_> - 3 3 16 6 -1. - <_> - 7 3 8 6 2. - 0 - 0.0989821180701256 - -0.0922055691480637 - 0.5940859913825989 - <_> - - <_> - - - - <_> - 0 0 4 20 -1. - <_> - 0 0 2 10 2. - <_> - 2 10 2 10 2. - 0 - 0.2084957957267761 - 0.0104049202054739 - -1.1054240234375000e+004 - <_> - - <_> - - - - <_> - 11 9 3 2 -1. - <_> - 11 9 3 1 2. - 1 - 0.0424603596329689 - 1.3334839604794979e-004 - -29.9719600677490230 - <_> - - <_> - - - - <_> - 7 0 6 6 -1. - <_> - 9 2 2 2 9. - 0 - 0.2533499896526337 - 2.1595309954136610e-004 - -2.6144009765625000e+004 - <_> - - <_> - - - - <_> - 3 6 16 14 -1. - <_> - 3 13 16 7 2. - 0 - -0.1670836061239243 - 0.4091899096965790 - -0.1035474017262459 - <_> - - <_> - - - - <_> - 8 4 6 3 -1. - <_> - 11 4 3 3 2. - 0 - 0.0698548927903175 - 4.6605318784713745e-003 - -5.1069450000000000e+005 - <_> - - <_> - - - - <_> - 12 12 2 2 -1. - <_> - 12 12 1 2 2. - 1 - -1.1447629658505321e-003 - 0.1422235071659088 - -0.0855058878660202 - <_> - - <_> - - - - <_> - 4 3 3 3 -1. - <_> - 4 4 3 1 3. - 0 - -3.4705658908933401e-003 - -0.5297111868858337 - 0.0830497220158577 - <_> - - <_> - - - - <_> - 16 3 2 3 -1. - <_> - 16 4 2 1 3. - 0 - 2.1921019069850445e-003 - 0.0711619704961777 - -0.4043358862400055 - <_> - - <_> - - - - <_> - 4 3 2 3 -1. - <_> - 4 4 2 1 3. - 0 - 1.1649200459942222e-003 - 0.1267627030611038 - -0.4060060977935791 - <_> - - <_> - - - - <_> - 12 3 4 8 -1. - <_> - 12 3 4 4 2. - 1 - -4.4645569287240505e-003 - 0.1118199974298477 - -0.0557420700788498 - <_> - - <_> - - - - <_> - 0 3 7 3 -1. - <_> - 0 4 7 1 3. - 0 - 0.0889142602682114 - 3.0051500070840120e-003 - -4.1628109375000000e+004 - <_> - - <_> - - - - <_> - 8 0 8 4 -1. - <_> - 8 2 8 2 2. - 0 - -6.0652620159089565e-003 - 0.2627792060375214 - -0.1512638926506043 - <_> - - <_> - - - - <_> - 1 6 14 2 -1. - <_> - 1 6 7 1 2. - <_> - 8 7 7 1 2. - 0 - 0.0628576278686523 - -0.0137155596166849 - -8.7274068750000000e+005 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - 5.6487987749278545e-003 - -0.1591373980045319 - 0.3185926079750061 - <_> - - <_> - - - - <_> - 8 6 5 12 -1. - <_> - 8 9 5 6 2. - 0 - 0.1402298063039780 - -9.5816357061266899e-003 - -1.0553549804687500e+004 - <_> - - <_> - - - - <_> - 2 1 18 2 -1. - <_> - 2 1 9 2 2. - 0 - 0.0230996198952198 - 0.0976014509797096 - -0.3803542852401733 - <_> - - <_> - - - - <_> - 0 5 2 6 -1. - <_> - 0 8 2 3 2. - 0 - 0.0621806606650352 - 7.3636812157928944e-003 - -2183168. - <_> - - <_> - - - - <_> - 15 17 4 3 -1. - <_> - 15 18 4 1 3. - 0 - -5.5402978323400021e-003 - -0.5089601874351502 - 0.0546819083392620 - <_> - - <_> - - - - <_> - 0 13 13 3 -1. - <_> - 0 14 13 1 3. - 0 - 0.1539259999990463 - 4.8121181316673756e-003 - -1.8279500000000000e+004 - <_> - - <_> - - - - <_> - 12 17 1 3 -1. - <_> - 12 18 1 1 3. - 0 - -7.0815882645547390e-004 - -0.2277985960245132 - 0.0580231212079525 - <_> - - <_> - - - - <_> - 9 6 1 2 -1. - <_> - 9 7 1 1 2. - 0 - 3.2015278702601790e-004 - -0.1508460938930512 - 0.2145934998989105 - <_> - - <_> - - - - <_> - 18 10 4 10 -1. - <_> - 20 10 2 5 2. - <_> - 18 15 2 5 2. - 0 - 0.0236649997532368 - -0.0356902889907360 - 0.3169997930526733 - <_> - - <_> - - - - <_> - 1 17 3 3 -1. - <_> - 1 18 3 1 3. - 0 - -3.3508460037410259e-003 - -0.4599010050296783 - 0.0609511509537697 - <_> - - <_> - - - - <_> - 11 2 9 15 -1. - <_> - 14 7 3 5 9. - 0 - -0.0755221471190453 - 0.1105789020657539 - -0.0405144505202770 - <_> - - <_> - - - - <_> - 5 3 12 2 -1. - <_> - 8 3 6 2 2. - 0 - -5.7262121699750423e-003 - 0.2327114939689636 - -0.1340714991092682 - <_> - - <_> - - - - <_> - 4 5 18 2 -1. - <_> - 13 5 9 1 2. - <_> - 4 6 9 1 2. - 0 - 0.0210247393697500 - 5.9381611645221710e-003 - -0.5503371953964233 - <_> - - <_> - - - - <_> - 7 2 2 9 -1. - <_> - 8 2 1 9 2. - 0 - 3.1837709248065948e-003 - -0.1280966997146606 - 0.2665301859378815 - <_> - - <_> - - - - <_> - 16 17 4 3 -1. - <_> - 16 18 4 1 3. - 0 - 1.9705400336533785e-003 - 0.0784664973616600 - -0.3240619897842407 - <_> - - <_> - - - - <_> - 6 0 10 1 -1. - <_> - 11 0 5 1 2. - 0 - 6.6750179976224899e-003 - 0.0915311574935913 - -0.3724919855594635 - <_> - - <_> - - - - <_> - 15 17 6 3 -1. - <_> - 15 18 6 1 3. - 0 - -2.4148779921233654e-003 - -0.1711169034242630 - 0.0567627996206284 - <_> - - <_> - - - - <_> - 5 2 8 4 -1. - <_> - 5 2 4 2 2. - <_> - 9 4 4 2 2. - 0 - -9.5466198399662971e-003 - 0.4066280126571655 - -0.0744117125868797 - <_> - - <_> - - - - <_> - 5 10 12 3 -1. - <_> - 5 11 12 1 3. - 0 - -0.0329076610505581 - -0.7188897728919983 - 0.0147215398028493 - <_> - - <_> - - - - <_> - 8 8 5 4 -1. - <_> - 8 10 5 2 2. - 0 - -8.1849691923707724e-004 - 0.1456910073757172 - -0.1996337026357651 - <_> - - <_> - - - - <_> - 18 2 2 3 -1. - <_> - 18 3 2 1 3. - 0 - 7.2181539144366980e-004 - 0.0822310671210289 - -0.2197355926036835 - <_> - - <_> - - - - <_> - 2 17 4 3 -1. - <_> - 2 18 4 1 3. - 0 - 2.2785319015383720e-003 - 0.0753178074955940 - -0.3454377055168152 - <_> - - <_> - - - - <_> - 13 3 1 2 -1. - <_> - 13 3 1 1 2. - 1 - -5.9232191415503621e-004 - 0.1639717966318131 - -0.1422377973794937 - <_> - - <_> - - - - <_> - 7 8 2 3 -1. - <_> - 8 8 1 3 2. - 0 - -1.4906689757481217e-003 - 0.2706500887870789 - -0.1018522009253502 - <_> - - <_> - - - - <_> - 18 2 2 3 -1. - <_> - 18 3 2 1 3. - 0 - -5.0783937331289053e-004 - -0.2323700040578842 - 0.1248771995306015 - <_> - - <_> - - - - <_> - 2 2 2 3 -1. - <_> - 2 3 2 1 3. - 0 - 1.2358260573819280e-003 - 0.0718894228339195 - -0.3229227066040039 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 9.5672700554132462e-003 - -0.0773614421486855 - 0.3149167001247406 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 8 2 6 2 3. - 0 - -4.9210679717361927e-003 - 0.2001828998327255 - -0.1614425927400589 - <_> - - <_> - - - - <_> - 16 17 2 3 -1. - <_> - 16 18 2 1 3. - 0 - 5.0535827176645398e-004 - 0.0707560107111931 - -0.1763390004634857 - <_> - - <_> - - - - <_> - 2 14 8 3 -1. - <_> - 2 15 8 1 3. - 0 - -0.0136406198143959 - -0.6640126109123230 - 0.0409870184957981 - <_> - - <_> - - - - <_> - 2 13 18 4 -1. - <_> - 11 13 9 2 2. - <_> - 2 15 9 2 2. - 0 - -0.0654274374246597 - -0.7154648900032044 - -1.4467790024355054e-003 - <_> - - <_> - - - - <_> - 0 0 22 20 -1. - <_> - 11 0 11 20 2. - 0 - -0.5741670727729797 - -0.6421157121658325 - 0.0370770692825317 - <_> - - <_> - - - - <_> - 12 3 5 3 -1. - <_> - 12 4 5 1 3. - 0 - -0.0146807404235005 - -0.5791106820106506 - 0.0123324804008007 - <_> - - <_> - - - - <_> - 5 3 5 3 -1. - <_> - 5 4 5 1 3. - 0 - 0.0104034496471286 - 0.0308694597333670 - -0.6532388925552368 - <_> - - <_> - - - - <_> - 10 10 6 4 -1. - <_> - 13 10 3 2 2. - <_> - 10 12 3 2 2. - 0 - 3.1473999843001366e-003 - -0.0635934323072433 - 0.1531693935394287 - <_> - - <_> - - - - <_> - 6 10 6 4 -1. - <_> - 6 10 3 2 2. - <_> - 9 12 3 2 2. - 0 - -3.7591080181300640e-003 - 0.2394174039363861 - -0.1098086014389992 - <_> - - <_> - - - - <_> - 16 1 2 1 -1. - <_> - 16 1 1 1 2. - 0 - -1.1320270132273436e-003 - -0.3407621085643768 - 0.0471142791211605 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 10 4 2 6 2. - 0 - 0.0239110793918371 - 0.0242940206080675 - -0.8737456202507019 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 10 0 2 8 2. - 0 - 1.6331439837813377e-003 - -0.1486710011959076 - 0.1468683034181595 - -1.1955209970474243 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 4 8 2 -1. - <_> - 9 4 4 2 2. - 0 - 0.0142739498987794 - -0.2202817052602768 - 0.5827869772911072 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 8 2 6 2 3. - 0 - -0.0131552601233125 - 0.3237678110599518 - -0.1758868992328644 - <_> - - <_> - - - - <_> - 6 5 3 5 -1. - <_> - 7 5 1 5 3. - 0 - -4.7336989082396030e-003 - 0.3277125954627991 - -0.1350404024124146 - <_> - - <_> - - - - <_> - 8 5 6 4 -1. - <_> - 8 7 6 2 2. - 0 - -4.9824719317257404e-003 - -0.4071232080459595 - 0.1072907000780106 - <_> - - <_> - - - - <_> - 6 3 3 9 -1. - <_> - 7 3 1 9 3. - 0 - 5.3574908524751663e-003 - -0.0611884407699108 - 0.4217612147331238 - <_> - - <_> - - - - <_> - 18 3 1 2 -1. - <_> - 18 4 1 1 2. - 0 - 7.2625762550160289e-004 - 0.0706811919808388 - -0.3924930989742279 - <_> - - <_> - - - - <_> - 0 18 4 2 -1. - <_> - 0 18 2 1 2. - <_> - 2 19 2 1 2. - 0 - 0.0317543894052505 - -4.8160050064325333e-003 - -2.6766890625000000e+004 - <_> - - <_> - - - - <_> - 18 1 1 4 -1. - <_> - 18 2 1 2 2. - 0 - 7.4712611967697740e-004 - 0.1004415974020958 - -0.3584552109241486 - <_> - - <_> - - - - <_> - 6 3 4 12 -1. - <_> - 7 3 2 12 2. - 0 - -6.1364839784801006e-003 - 0.2293076962232590 - -0.1484947949647903 - <_> - - <_> - - - - <_> - 18 3 1 2 -1. - <_> - 18 4 1 1 2. - 0 - -3.1043920898810029e-004 - -0.1260652989149094 - 0.0529814399778843 - <_> - - <_> - - - - <_> - 4 7 3 3 -1. - <_> - 5 8 1 1 9. - 0 - 0.0950973704457283 - 6.5563217503950000e-004 - -4.3957660156250000e+004 - <_> - - <_> - - - - <_> - 18 3 1 2 -1. - <_> - 18 4 1 1 2. - 0 - 1.7895869677886367e-004 - 0.0660799294710159 - -0.1616372019052506 - <_> - - <_> - - - - <_> - 3 3 1 2 -1. - <_> - 3 4 1 1 2. - 0 - 6.2283757142722607e-004 - 0.0813361480832100 - -0.3785324990749359 - <_> - - <_> - - - - <_> - 9 0 5 4 -1. - <_> - 9 2 5 2 2. - 0 - 0.0161214191466570 - -0.0701244771480560 - 0.4218684136867523 - <_> - - <_> - - - - <_> - 0 0 22 19 -1. - <_> - 11 0 11 19 2. - 0 - 0.4940983951091766 - 0.0561053603887558 - -0.5526896715164185 - <_> - - <_> - - - - <_> - 17 9 3 6 -1. - <_> - 18 10 1 6 3. - 1 - 2.6086641009896994e-003 - -0.0543038509786129 - 0.0833500325679779 - <_> - - <_> - - - - <_> - 0 1 22 3 -1. - <_> - 11 1 11 3 2. - 0 - -0.0809855908155441 - -0.5188968181610107 - 0.0761135816574097 - <_> - - <_> - - - - <_> - 3 3 16 4 -1. - <_> - 7 3 8 4 2. - 0 - -0.0182068496942520 - 0.2345086038112640 - -0.1502858996391296 - <_> - - <_> - - - - <_> - 6 17 2 2 -1. - <_> - 6 18 2 1 2. - 0 - 0.0244538690894842 - 7.7094620792195201e-005 - -3.4958081054687500e+003 - <_> - - <_> - - - - <_> - 10 7 3 6 -1. - <_> - 10 10 3 3 2. - 0 - 7.3357089422643185e-003 - 0.0649792924523354 - -0.4484853148460388 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 4 4 2 2. - 0 - 2.6216730475425720e-003 - -0.1416749060153961 - 0.2085988968610764 - <_> - - <_> - - - - <_> - 15 18 3 2 -1. - <_> - 15 19 3 1 2. - 0 - 1.1409450089558959e-003 - 0.0767014995217323 - -0.2944692969322205 - <_> - - <_> - - - - <_> - 3 8 2 1 -1. - <_> - 4 8 1 1 2. - 0 - 0.0125809302553535 - -1.9673809874802828e-003 - -2.9883010253906250e+003 - <_> - - <_> - - - - <_> - 8 4 8 6 -1. - <_> - 12 4 4 3 2. - <_> - 8 7 4 3 2. - 0 - -0.0399915799498558 - -0.6527891755104065 - 0.0188802499324083 - <_> - - <_> - - - - <_> - 6 4 8 6 -1. - <_> - 6 4 4 3 2. - <_> - 10 7 4 3 2. - 0 - -0.0298809893429279 - -0.5795301198959351 - 0.0433299690485001 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 9 3 4 1 3. - 0 - 1.7895980272442102e-003 - -0.1057242974638939 - 0.2399346977472305 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - 2.6439139619469643e-003 - 0.0537548698484898 - -0.4962024986743927 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 8.2859180110972375e-005 - -0.2041904926300049 - 0.1280695050954819 - <_> - - <_> - - - - <_> - 9 1 4 4 -1. - <_> - 9 3 4 2 2. - 0 - -0.0109112402424216 - 0.3440020084381104 - -0.0761992409825325 - <_> - - <_> - - - - <_> - 15 18 3 2 -1. - <_> - 15 19 3 1 2. - 0 - -4.1699931025505066e-003 - -0.5004233717918396 - 0.0357670485973358 - <_> - - <_> - - - - <_> - 11 1 5 3 -1. - <_> - 10 2 5 1 3. - 1 - 2.0652399398386478e-003 - -0.1520075052976608 - 0.1669902950525284 - <_> - - <_> - - - - <_> - 15 18 3 2 -1. - <_> - 15 19 3 1 2. - 0 - -1.2707760324701667e-003 - -0.1039770990610123 - 0.0264265798032284 - <_> - - <_> - - - - <_> - 4 18 3 2 -1. - <_> - 4 19 3 1 2. - 0 - 8.2581391325220466e-004 - 0.0910732299089432 - -0.2843176126480103 - <_> - - <_> - - - - <_> - 12 1 4 9 -1. - <_> - 13 1 2 9 2. - 0 - 6.9688400253653526e-003 - -0.0564119815826416 - 0.2326754927635193 - <_> - - <_> - - - - <_> - 0 0 4 2 -1. - <_> - 0 0 2 1 2. - <_> - 2 1 2 1 2. - 0 - -1.5607889508828521e-003 - -0.3696976006031036 - 0.0694737508893013 - <_> - - <_> - - - - <_> - 11 11 3 3 -1. - <_> - 12 11 1 3 3. - 0 - 1.2131650000810623e-003 - -0.0793238207697868 - 0.1587685942649841 - <_> - - <_> - - - - <_> - 9 0 3 6 -1. - <_> - 10 0 1 6 3. - 0 - 0.0106247495859861 - 0.0433616712689400 - -0.5741243958473206 - <_> - - <_> - - - - <_> - 11 11 3 3 -1. - <_> - 12 11 1 3 3. - 0 - -7.2990538319572806e-004 - 0.1950937956571579 - -0.1366575062274933 - <_> - - <_> - - - - <_> - 1 11 18 4 -1. - <_> - 7 11 6 4 3. - 0 - 0.2957299053668976 - 2.2201120373210870e-005 - -3.4219890136718750e+003 - <_> - - <_> - - - - <_> - 5 8 16 5 -1. - <_> - 9 8 8 5 2. - 0 - 0.0259992908686399 - -0.0363694615662098 - 0.0774904936552048 - <_> - - <_> - - - - <_> - 4 0 14 1 -1. - <_> - 11 0 7 1 2. - 0 - 8.0749327316880226e-003 - 0.0807059034705162 - -0.2821913957595825 - <_> - - <_> - - - - <_> - 11 11 3 3 -1. - <_> - 12 11 1 3 3. - 0 - 7.5860577635467052e-004 - -0.0776436701416969 - 0.1297709047794342 - <_> - - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 11 1 3 3. - 0 - -1.7625710461288691e-003 - 0.2214173972606659 - -0.0988869816064835 - <_> - - <_> - - - - <_> - 21 9 1 2 -1. - <_> - 21 10 1 1 2. - 0 - 1.1849809670820832e-003 - 0.0384862981736660 - -0.2790533006191254 - <_> - - <_> - - - - <_> - 0 13 22 7 -1. - <_> - 11 13 11 7 2. - 0 - -0.1762558966875076 - -0.4392026066780090 - 0.0519713610410690 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 11 8 1 2 2. - 0 - -1.4031480532139540e-004 - 0.1291642040014267 - -0.1132370978593826 - <_> - - <_> - - - - <_> - 6 4 6 10 -1. - <_> - 8 4 2 10 3. - 0 - 9.1363089159131050e-003 - -0.1149204000830650 - 0.2224934995174408 - <_> - - <_> - - - - <_> - 17 6 2 3 -1. - <_> - 17 7 2 1 3. - 0 - -2.0029260776937008e-003 - -0.2192959040403366 - 0.0408548898994923 - <_> - - <_> - - - - <_> - 0 0 16 19 -1. - <_> - 8 0 8 19 2. - 0 - 0.5505223274230957 - 0.0256549399346113 - -0.8305245041847229 - <_> - - <_> - - - - <_> - 10 5 4 6 -1. - <_> - 10 8 4 3 2. - 0 - -0.0335072614252567 - -0.7028989195823669 - 0.0128860799595714 - <_> - - <_> - - - - <_> - 3 6 2 3 -1. - <_> - 3 7 2 1 3. - 0 - -2.7022568974643946e-003 - -0.3987897932529450 - 0.0498935617506504 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - 3.3577920403331518e-003 - -0.0918346270918846 - 0.2374632954597473 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.3520480133593082e-003 - 0.2580905854701996 - -0.1176111027598381 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 11 9 3 1 2. - <_> - 8 10 3 1 2. - 0 - 5.6797950528562069e-003 - 0.0373957902193069 - -0.5930835008621216 - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 8 7 3 2 2. - <_> - 11 9 3 2 2. - 0 - 0.0145224798470736 - 0.0268653593957424 - -0.6355267763137817 - <_> - - <_> - - - - <_> - 11 6 2 3 -1. - <_> - 11 7 2 1 3. - 0 - 8.3791668293997645e-004 - -0.1066875979304314 - 0.1506800949573517 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 7 2 1 2. - 0 - 8.3057529991492629e-004 - 0.0769276171922684 - -0.2665997147560120 - <_> - - <_> - - - - <_> - 16 6 1 2 -1. - <_> - 16 7 1 1 2. - 0 - 6.6323182545602322e-004 - 0.0406722910702229 - -0.1780118048191071 - <_> - - <_> - - - - <_> - 5 6 1 2 -1. - <_> - 5 7 1 1 2. - 0 - -5.4344389354810119e-004 - -0.2698814868927002 - 0.0732588469982147 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - -0.0368602909147739 - 0.4315085113048554 - -0.0494703687727451 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - 7.5951730832457542e-003 - 0.0474716387689114 - -0.4490992128849030 - <_> - - <_> - - - - <_> - 16 14 6 6 -1. - <_> - 16 14 3 6 2. - 0 - 0.0254625808447599 - -0.0597328282892704 - 0.2876763939857483 - <_> - - <_> - - - - <_> - 5 7 12 4 -1. - <_> - 8 7 6 4 2. - 0 - -3.7006419152021408e-003 - 0.1736236065626144 - -0.1099757030606270 - <_> - - <_> - - - - <_> - 7 10 8 1 -1. - <_> - 9 10 4 1 2. - 0 - 2.5741709396243095e-003 - -0.1062102988362312 - 0.2023967057466507 - <_> - - <_> - - - - <_> - 8 6 4 2 -1. - <_> - 9 7 2 2 2. - 1 - -7.0176380686461926e-003 - -0.3643814027309418 - 0.0538663491606712 - <_> - - <_> - - - - <_> - 16 0 2 2 -1. - <_> - 16 1 2 1 2. - 0 - 9.4404182163998485e-004 - 0.0566301792860031 - -0.2545656859874725 - <_> - - <_> - - - - <_> - 0 14 6 5 -1. - <_> - 3 14 3 5 2. - 0 - -0.0176643393933773 - 0.2650383114814758 - -0.0743824616074562 - <_> - - <_> - - - - <_> - 21 9 1 2 -1. - <_> - 21 10 1 1 2. - 0 - -3.6102120066061616e-004 - -0.1735589951276779 - 0.0607707090675831 - <_> - - <_> - - - - <_> - 2 5 18 1 -1. - <_> - 8 5 6 1 3. - 0 - -0.0459519512951374 - 0.5918372869491577 - -0.0301302094012499 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 1 2. - <_> - 12 6 1 1 2. - 0 - -4.7274961252696812e-004 - 0.1760887950658798 - -0.0872486382722855 - <_> - - <_> - - - - <_> - 0 9 1 2 -1. - <_> - 0 10 1 1 2. - 0 - 2.6895289192907512e-004 - 0.0806882008910179 - -0.2275611013174057 - <_> - - <_> - - - - <_> - 0 0 22 7 -1. - <_> - 0 0 11 7 2. - 0 - 0.3168278038501740 - 0.0215719398111105 - -0.7648239731788635 - -1.2550790309906006 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 2 2 2 -1. - <_> - 10 2 1 2 2. - 1 - -3.0944950412958860e-003 - 0.4391439855098724 - -0.2815640866756439 - <_> - - <_> - - - - <_> - 7 4 8 9 -1. - <_> - 9 4 4 9 2. - 0 - 0.0691797062754631 - -0.0936916396021843 - 0.6062453985214233 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 8 0 2 3 2. - 1 - 6.4804498106241226e-003 - -0.1834186017513275 - 0.3055534958839417 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 9 6 4 1 3. - 0 - -9.8769506439566612e-004 - 0.1924224048852921 - -0.1790128052234650 - <_> - - <_> - - - - <_> - 0 1 4 10 -1. - <_> - 0 1 2 5 2. - <_> - 2 6 2 5 2. - 0 - 0.0975852236151695 - 2.1803719573654234e-004 - -1.2009589843750000e+003 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 3.0975039408076555e-005 - -0.2339016944169998 - 0.1308266967535019 - <_> - - <_> - - - - <_> - 3 3 2 2 -1. - <_> - 3 4 2 1 2. - 0 - -7.0616282755509019e-004 - -0.2987985014915466 - 0.1391354948282242 - <_> - - <_> - - - - <_> - 12 6 3 2 -1. - <_> - 13 6 1 2 3. - 0 - 1.1368830455467105e-003 - -0.1522697955369949 - 0.2229983061552048 - <_> - - <_> - - - - <_> - 3 1 1 4 -1. - <_> - 3 2 1 2 2. - 0 - -5.0543190445750952e-004 - -0.2767955064773560 - 0.1421986967325211 - <_> - - <_> - - - - <_> - 11 3 4 7 -1. - <_> - 12 3 2 7 2. - 0 - -5.1033319905400276e-003 - 0.1286972016096115 - -0.0930294170975685 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 10 2 2 8 2. - 0 - 0.0145841399207711 - 0.0862514376640320 - -0.4242984950542450 - <_> - - <_> - - - - <_> - 5 4 12 6 -1. - <_> - 8 4 6 6 2. - 0 - 0.0882340967655182 - -0.1065097972750664 - 0.4438385069370270 - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 8 7 3 2 2. - <_> - 11 9 3 2 2. - 0 - -0.0128616895526648 - -0.5896822810173035 - 0.0735257565975189 - <_> - - <_> - - - - <_> - 5 2 12 3 -1. - <_> - 8 2 6 3 2. - 0 - -0.0491349399089813 - 0.5227485895156860 - -0.0813575834035873 - <_> - - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 11 1 1 3 3. - 1 - 8.5799451917409897e-003 - -0.0323671996593475 - 0.4282180964946747 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 11 9 3 1 2. - <_> - 8 10 3 1 2. - 0 - -5.7424148544669151e-003 - -0.6208313107490540 - 0.0406383201479912 - <_> - - <_> - - - - <_> - 8 8 3 1 -1. - <_> - 9 8 1 1 3. - 0 - 3.6491660284809768e-004 - -0.1532564014196396 - 0.1411397010087967 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 8 0 3 1 2. - 0 - -5.1613878458738327e-003 - -0.4173679947853088 - 0.0818374827504158 - <_> - - <_> - - - - <_> - 6 0 10 1 -1. - <_> - 11 0 5 1 2. - 0 - -4.7439550980925560e-003 - -0.2980839014053345 - 0.0810170024633408 - <_> - - <_> - - - - <_> - 18 9 2 3 -1. - <_> - 18 10 2 1 3. - 0 - 4.1151638142764568e-003 - -3.0103120952844620e-003 - -0.2490278929471970 - <_> - - <_> - - - - <_> - 2 14 12 3 -1. - <_> - 5 14 6 3 2. - 0 - 0.1224298030138016 - 1.5216519823297858e-003 - -1.7302570312500000e+005 - <_> - - <_> - - - - <_> - 12 6 3 3 -1. - <_> - 13 6 1 3 3. - 0 - -1.2401449494063854e-003 - 0.1706403046846390 - -0.0793684273958206 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 8 6 1 3 3. - 0 - 1.6567549901083112e-003 - -0.0922353118658066 - 0.2384988963603973 - <_> - - <_> - - - - <_> - 9 8 10 12 -1. - <_> - 14 8 5 6 2. - <_> - 9 14 5 6 2. - 0 - 8.1565687432885170e-003 - -0.0969640612602234 - 0.1442842036485672 - <_> - - <_> - - - - <_> - 0 12 21 6 -1. - <_> - 7 14 7 2 9. - 0 - 0.7345591187477112 - 3.2895841286517680e-004 - -2.5542700195312500e+003 - <_> - - <_> - - - - <_> - 12 7 1 2 -1. - <_> - 12 7 1 1 2. - 1 - -3.5420949570834637e-003 - -0.2512946128845215 - 0.0243886206299067 - <_> - - <_> - - - - <_> - 11 2 4 11 -1. - <_> - 12 3 2 11 2. - 1 - 0.1815982013940811 - -2.5665969587862492e-003 - -6.3014418945312500e+003 - <_> - - <_> - - - - <_> - 10 5 4 6 -1. - <_> - 10 8 4 3 2. - 0 - -0.0257737003266811 - -0.5545318126678467 - 0.0251185204833746 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 1 6 2 2. - 0 - -3.6018029786646366e-003 - 0.2042717933654785 - -0.1154955029487610 - <_> - - <_> - - - - <_> - 16 1 3 2 -1. - <_> - 16 2 3 1 2. - 0 - 2.0895600318908691e-003 - 0.0502794906497002 - -0.3169372975826263 - <_> - - <_> - - - - <_> - 2 10 11 10 -1. - <_> - 2 15 11 5 2. - 0 - -0.0257172007113695 - 0.1780318021774292 - -0.1179426014423370 - <_> - - <_> - - - - <_> - 2 6 18 6 -1. - <_> - 2 8 18 2 3. - 0 - 0.1264100968837738 - 8.8736182078719139e-003 - -0.8052924275398254 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 10 7 1 2 2. - 0 - -3.0391849577426910e-003 - -0.5089867115020752 - 0.0389041900634766 - <_> - - <_> - - - - <_> - 13 17 6 1 -1. - <_> - 13 17 3 1 2. - 0 - 3.4312950447201729e-003 - 0.0112604703754187 - -0.0685158669948578 - <_> - - <_> - - - - <_> - 10 14 1 2 -1. - <_> - 10 15 1 1 2. - 0 - 1.3510970347851980e-005 - -0.1411712020635605 - 0.1520387977361679 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 12 1 3 1 3. - 1 - -6.0387961566448212e-003 - 0.2028543949127197 - -0.1038281992077828 - <_> - - <_> - - - - <_> - 11 0 8 1 -1. - <_> - 13 2 4 1 2. - 1 - 0.0757262483239174 - 3.9297537878155708e-003 - -1.7562469482421875e+003 - <_> - - <_> - - - - <_> - 3 4 16 4 -1. - <_> - 11 4 8 2 2. - <_> - 3 6 8 2 2. - 0 - -0.0198192708194256 - -0.4016780853271484 - 0.0567933097481728 - <_> - - <_> - - - - <_> - 9 0 3 3 -1. - <_> - 10 1 1 3 3. - 1 - 4.9060788005590439e-003 - -0.0838991403579712 - 0.2904154956340790 - <_> - - <_> - - - - <_> - 0 2 22 4 -1. - <_> - 0 2 11 4 2. - 0 - -0.0816489011049271 - -0.3635343015193939 - 0.0631477981805801 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 0 4 1 2. - 1 - -0.0103847701102495 - -0.5342981815338135 - 0.0369341894984245 - <_> - - <_> - - - - <_> - 8 1 9 17 -1. - <_> - 11 1 3 17 3. - 0 - 0.0866287127137184 - -0.0663368999958038 - 0.2717345058917999 - <_> - - <_> - - - - <_> - 3 1 16 17 -1. - <_> - 7 1 8 17 2. - 0 - -0.0350500307977200 - 0.1794217973947525 - -0.1223483979701996 - <_> - - <_> - - - - <_> - 15 6 7 2 -1. - <_> - 15 7 7 1 2. - 0 - -4.8283189535140991e-003 - -0.2445065975189209 - 0.0351963788270950 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 1 2 1 2. - 0 - 6.4928561914712191e-004 - 0.0686805993318558 - -0.2686598896980286 - <_> - - <_> - - - - <_> - 16 10 5 4 -1. - <_> - 16 10 5 2 2. - 1 - -0.0385411381721497 - 0.3020485043525696 - -0.0369875393807888 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - -4.1178430547006428e-004 - -0.2559803128242493 - 0.0731064677238464 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - -0.0113901402801275 - 0.2473514974117279 - -0.0734748467803001 - <_> - - <_> - - - - <_> - 6 3 8 3 -1. - <_> - 6 4 8 1 3. - 0 - 9.6719461726024747e-004 - -0.1448757052421570 - 0.1691514998674393 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 5.8444878086447716e-003 - -0.0884323865175247 - 0.2580049932003021 - <_> - - <_> - - - - <_> - 0 0 22 4 -1. - <_> - 0 0 11 2 2. - <_> - 11 2 11 2 2. - 0 - 0.2382801026105881 - 1.7703069606795907e-003 - -5.5330332031250000e+003 - <_> - - <_> - - - - <_> - 11 4 1 3 -1. - <_> - 11 5 1 1 3. - 0 - 1.5342529513873160e-004 - -0.0991612374782562 - 0.1108618006110191 - <_> - - <_> - - - - <_> - 9 4 3 9 -1. - <_> - 9 7 3 3 3. - 0 - -0.0188919492065907 - -0.5473247170448303 - 0.0368514098227024 - <_> - - <_> - - - - <_> - 15 15 2 4 -1. - <_> - 15 16 2 2 2. - 0 - -1.4927709707990289e-003 - -0.2011432051658630 - 0.0447068996727467 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -4.1659721173346043e-003 - 0.3255642950534821 - -0.0601323209702969 - <_> - - <_> - - - - <_> - 9 7 4 4 -1. - <_> - 11 7 2 2 2. - <_> - 9 9 2 2 2. - 0 - -0.0112433601170778 - -0.7022691965103149 - 0.0294330306351185 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -3.3863231074064970e-003 - 0.2791276872158051 - -0.0719835981726646 - <_> - - <_> - - - - <_> - 3 15 16 2 -1. - <_> - 11 15 8 1 2. - <_> - 3 16 8 1 2. - 0 - -0.0125141497701406 - -0.6051716804504395 - 0.0340842194855213 - <_> - - <_> - - - - <_> - 9 12 2 2 -1. - <_> - 9 13 2 1 2. - 0 - 1.3723900337936357e-005 - -0.1431418955326080 - 0.1346196979284287 - <_> - - <_> - - - - <_> - 12 4 6 2 -1. - <_> - 12 5 6 1 2. - 0 - -7.5697568245232105e-003 - -0.3767654895782471 - 0.0253027696162462 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 10 7 2 2 2. - 0 - 2.5683428975753486e-004 - -0.1497844010591507 - 0.1169036030769348 - <_> - - <_> - - - - <_> - 13 15 1 2 -1. - <_> - 13 16 1 1 2. - 0 - -7.2857661871239543e-004 - -0.1668930053710938 - 0.0384287312626839 - <_> - - <_> - - - - <_> - 0 2 21 18 -1. - <_> - 7 8 7 6 9. - 0 - -0.3696745932102203 - -0.3146063089370728 - 0.0504875108599663 - <_> - - <_> - - - - <_> - 11 10 4 6 -1. - <_> - 9 12 4 2 3. - 1 - -8.5158832371234894e-003 - 0.1145934015512466 - -0.0684032216668129 - <_> - - <_> - - - - <_> - 8 15 1 2 -1. - <_> - 8 16 1 1 2. - 0 - 8.1972801126539707e-004 - 0.0527363307774067 - -0.3149968087673187 - <_> - - <_> - - - - <_> - 13 7 3 9 -1. - <_> - 14 7 1 9 3. - 0 - -4.1751582175493240e-003 - 0.1761153042316437 - -0.0816769897937775 - <_> - - <_> - - - - <_> - 7 7 8 9 -1. - <_> - 9 7 4 9 2. - 0 - -9.8344944417476654e-003 - 0.2044977992773056 - -0.0902331173419952 - <_> - - <_> - - - - <_> - 17 6 5 2 -1. - <_> - 17 7 5 1 2. - 0 - 4.3716239742934704e-003 - 0.0418008901178837 - -0.3798278868198395 - <_> - - <_> - - - - <_> - 7 1 2 6 -1. - <_> - 7 1 1 3 2. - <_> - 8 4 1 3 2. - 0 - 1.7981700366362929e-003 - -0.0974533930420876 - 0.1710412055253983 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 13 0 1 2 2. - 1 - -7.8003508970141411e-003 - -0.4325407147407532 - 0.0297872498631477 - <_> - - <_> - - - - <_> - 0 1 22 19 -1. - <_> - 11 1 11 19 2. - 0 - -0.4429234862327576 - -0.4741122126579285 - 0.0333376489579678 - <_> - - <_> - - - - <_> - 13 4 3 5 -1. - <_> - 14 4 1 5 3. - 0 - -4.7213938087224960e-003 - 0.2291138023138046 - -0.0942387282848358 - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 10 2 1 4 3. - 0 - -9.7442632541060448e-003 - -0.6454465985298157 - 0.0300154406577349 - <_> - - <_> - - - - <_> - 16 1 4 1 -1. - <_> - 16 1 2 1 2. - 0 - 1.5859480481594801e-003 - 0.0436721183359623 - -0.2222118973731995 - <_> - - <_> - - - - <_> - 7 3 3 9 -1. - <_> - 8 3 1 9 3. - 0 - -2.3678180295974016e-003 - 0.1518370062112808 - -0.1077573001384735 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 11 7 1 2 2. - 1 - -3.2757879234850407e-003 - -0.2587513029575348 - 0.0506400205194950 - <_> - - <_> - - - - <_> - 6 5 6 10 -1. - <_> - 6 5 3 5 2. - <_> - 9 10 3 5 2. - 0 - 0.0295365508645773 - -0.0431258007884026 - 0.3963609039783478 - <_> - - <_> - - - - <_> - 16 6 6 2 -1. - <_> - 16 7 6 1 2. - 0 - 1.4104120200499892e-003 - 0.0263098403811455 - -0.0716166496276855 - <_> - - <_> - - - - <_> - 0 6 6 2 -1. - <_> - 0 7 6 1 2. - 0 - -2.9282430186867714e-003 - -0.3100580871105194 - 0.0568981394171715 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -1.2943849433213472e-003 - 0.1901364028453827 - -0.0881586894392967 - -1.2471400499343872 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 4 8 2 -1. - <_> - 9 4 4 2 2. - 0 - 0.0207641199231148 - -0.1497574001550674 - 0.5230230093002319 - <_> - - <_> - - - - <_> - 3 2 16 2 -1. - <_> - 7 2 8 2 2. - 0 - -0.0109672900289297 - 0.2750652134418488 - -0.1714518964290619 - <_> - - <_> - - - - <_> - 5 7 12 4 -1. - <_> - 8 7 6 4 2. - 0 - 0.0450524613261223 - -0.1064431965351105 - 0.3685629963874817 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 11 4 2 3 2. - <_> - 9 7 2 3 2. - 0 - 0.0105905998498201 - 0.0623173192143440 - -0.5382245779037476 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 9 4 2 3 2. - <_> - 11 7 2 3 2. - 0 - 6.0975952073931694e-003 - 0.1145500987768173 - -0.3733528852462769 - <_> - - <_> - - - - <_> - 9 1 4 3 -1. - <_> - 9 2 4 1 3. - 0 - -3.7739051040261984e-003 - 0.2665776908397675 - -0.1053360998630524 - <_> - - <_> - - - - <_> - 0 2 20 7 -1. - <_> - 10 2 10 7 2. - 0 - 0.4288235008716583 - -1.0790639789775014e-003 - -2.2903289062500000e+004 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - -6.7734188633039594e-004 - -0.3062162101268768 - 0.0697424933314323 - <_> - - <_> - - - - <_> - 0 0 2 3 -1. - <_> - 1 0 1 3 2. - 0 - 0.0342434793710709 - 6.6037551732733846e-004 - -1.2504589843750000e+004 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - 4.0923009510152042e-004 - 0.1007919982075691 - -0.3528747856616974 - <_> - - <_> - - - - <_> - 5 16 11 4 -1. - <_> - 5 18 11 2 2. - 0 - 0.2338259965181351 - -0.0158805008977652 - -1.7048220214843750e+003 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 0.0161090493202209 - -0.0620046295225620 - 0.4006240963935852 - <_> - - <_> - - - - <_> - 9 4 3 3 -1. - <_> - 9 5 3 1 3. - 0 - 6.8031012779101729e-004 - -0.1487611979246140 - 0.1779333055019379 - <_> - - <_> - - - - <_> - 2 0 18 9 -1. - <_> - 8 3 6 3 9. - 0 - -0.3910480141639710 - 0.5488514900207520 - -0.0464946106076241 - <_> - - <_> - - - - <_> - 4 0 7 8 -1. - <_> - 4 2 7 4 2. - 0 - 0.1572365015745163 - 6.0893679037690163e-003 - -1.7285980224609375e+003 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - -3.7645339034497738e-004 - -0.2536345124244690 - 0.0826325118541718 - <_> - - <_> - - - - <_> - 7 6 8 4 -1. - <_> - 7 7 8 2 2. - 0 - 8.7999942479655147e-004 - -0.1880773007869721 - 0.1185230016708374 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - 6.7365981522016227e-006 - -0.0741515085101128 - 0.0899976491928101 - <_> - - <_> - - - - <_> - 3 15 2 3 -1. - <_> - 2 16 2 1 3. - 1 - 0.0832097381353378 - 2.1281070075929165e-003 - -6.3955561523437500e+003 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - 1.6005210636649281e-004 - 0.0489190593361855 - -0.1072489991784096 - <_> - - <_> - - - - <_> - 10 7 1 4 -1. - <_> - 10 9 1 2 2. - 0 - -5.7949139736592770e-003 - -0.5865659713745117 - 0.0331664681434631 - <_> - - <_> - - - - <_> - 8 7 6 1 -1. - <_> - 10 7 2 1 3. - 0 - -1.4493979979306459e-003 - -0.2673879861831665 - 0.0749789699912071 - <_> - - <_> - - - - <_> - 9 3 3 3 -1. - <_> - 9 4 3 1 3. - 0 - 7.8148208558559418e-004 - -0.1311205029487610 - 0.1476036012172699 - <_> - - <_> - - - - <_> - 11 4 10 12 -1. - <_> - 11 4 5 12 2. - 0 - -0.0256432592868805 - 0.1625065058469772 - -0.0910258218646050 - <_> - - <_> - - - - <_> - 10 0 2 3 -1. - <_> - 9 1 2 1 3. - 1 - -0.0129299797117710 - -0.6502810716629028 - 0.0317780710756779 - <_> - - <_> - - - - <_> - 13 6 3 2 -1. - <_> - 14 6 1 2 3. - 0 - -2.3630550131201744e-003 - 0.2041016966104507 - -0.0998410135507584 - <_> - - <_> - - - - <_> - 5 1 1 2 -1. - <_> - 5 2 1 1 2. - 0 - 8.1470218719914556e-004 - 0.0623135901987553 - -0.3627943098545075 - <_> - - <_> - - - - <_> - 16 1 1 2 -1. - <_> - 16 2 1 1 2. - 0 - 6.7365981522016227e-006 - -0.0521405786275864 - 0.0628693625330925 - <_> - - <_> - - - - <_> - 5 1 1 2 -1. - <_> - 5 2 1 1 2. - 0 - -3.5238551208749413e-004 - -0.2451200038194656 - 0.0847872868180275 - <_> - - <_> - - - - <_> - 4 16 14 4 -1. - <_> - 4 17 14 2 2. - 0 - 0.0172863006591797 - 0.0224504992365837 - -0.3806996941566467 - <_> - - <_> - - - - <_> - 5 14 2 2 -1. - <_> - 5 14 1 1 2. - <_> - 6 15 1 1 2. - 0 - 0.0222245808690786 - -7.4508157558739185e-004 - -3.7578330078125000e+003 - <_> - - <_> - - - - <_> - 10 1 3 4 -1. - <_> - 10 3 3 2 2. - 0 - -6.9434130564332008e-003 - 0.3034599125385284 - -0.0682586207985878 - <_> - - <_> - - - - <_> - 6 6 3 2 -1. - <_> - 7 6 1 2 3. - 0 - -1.9307930488139391e-003 - 0.1953448951244354 - -0.1063164994120598 - <_> - - <_> - - - - <_> - 13 6 3 3 -1. - <_> - 14 6 1 3 3. - 0 - 2.9717159923166037e-003 - -0.0769132897257805 - 0.2877508103847504 - <_> - - <_> - - - - <_> - 6 6 3 3 -1. - <_> - 7 6 1 3 3. - 0 - 1.4184940373525023e-003 - -0.0953775569796562 - 0.2396468967199326 - <_> - - <_> - - - - <_> - 13 16 1 2 -1. - <_> - 13 17 1 1 2. - 0 - -5.2888790378347039e-004 - -0.2012093961238861 - 0.0588361099362373 - <_> - - <_> - - - - <_> - 9 0 3 3 -1. - <_> - 10 0 1 3 3. - 0 - -6.4028277993202209e-003 - -0.5148981809616089 - 0.0383809804916382 - <_> - - <_> - - - - <_> - 10 1 3 6 -1. - <_> - 11 1 1 6 3. - 0 - -6.9917421787977219e-003 - -0.3849856853485107 - 0.0340507291257381 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - 1.1123559670522809e-003 - -0.0821419730782509 - 0.2012232989072800 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -1.9065090455114841e-003 - 0.2369046956300736 - -0.0877728834748268 - <_> - - <_> - - - - <_> - 8 16 1 2 -1. - <_> - 8 17 1 1 2. - 0 - -7.7383301686495543e-004 - -0.3383798897266388 - 0.0640578716993332 - <_> - - <_> - - - - <_> - 18 8 2 8 -1. - <_> - 18 8 2 4 2. - 1 - -0.0320065282285213 - 0.1932954937219620 - -0.0425478592514992 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - 1.0583669645711780e-003 - 0.0556027106940746 - -0.3309327960014343 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 8 2 1 2. - 0 - -3.8688271160935983e-005 - 0.1298872977495194 - -0.1273244023323059 - <_> - - <_> - - - - <_> - 0 4 1 2 -1. - <_> - 0 5 1 1 2. - 0 - 4.2495719389989972e-004 - 0.0660073310136795 - -0.2493356019258499 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - -1.0858799796551466e-003 - 0.1753628998994827 - -0.0880979225039482 - <_> - - <_> - - - - <_> - 5 3 1 2 -1. - <_> - 5 4 1 1 2. - 0 - -4.4220269774086773e-004 - -0.2447447925806046 - 0.0673236101865768 - <_> - - <_> - - - - <_> - 10 3 4 6 -1. - <_> - 12 3 2 3 2. - <_> - 10 6 2 3 2. - 0 - -0.0234880503267050 - -0.7938411235809326 - 0.0220996104180813 - <_> - - <_> - - - - <_> - 1 4 12 15 -1. - <_> - 5 4 4 15 3. - 0 - -0.1194026023149490 - 0.2468383014202118 - -0.0709523037075996 - <_> - - <_> - - - - <_> - 9 10 12 7 -1. - <_> - 13 10 4 7 3. - 0 - 0.0137559697031975 - -0.0840900093317032 - 0.1350011974573135 - <_> - - <_> - - - - <_> - 6 18 2 2 -1. - <_> - 6 19 2 1 2. - 0 - 1.1233439436182380e-003 - 0.0575016699731350 - -0.2911410033702850 - <_> - - <_> - - - - <_> - 12 8 10 9 -1. - <_> - 12 8 5 9 2. - 0 - 0.0556609705090523 - -0.0264598093926907 - 0.0878172665834427 - <_> - - <_> - - - - <_> - 0 11 15 6 -1. - <_> - 5 11 5 6 3. - 0 - 0.0589987114071846 - -0.0588458292186260 - 0.2684657871723175 - <_> - - <_> - - - - <_> - 11 5 10 12 -1. - <_> - 11 5 5 12 2. - 0 - 0.2950527966022492 - 4.5877238735556602e-003 - -0.5790743231773377 - <_> - - <_> - - - - <_> - 1 5 10 12 -1. - <_> - 6 5 5 12 2. - 0 - -0.0185084193944931 - 0.1577802002429962 - -0.1083363965153694 - <_> - - <_> - - - - <_> - 15 0 6 11 -1. - <_> - 15 0 3 11 2. - 1 - -0.1461883932352066 - -0.4979709088802338 - 0.0108001204207540 - <_> - - <_> - - - - <_> - 4 0 2 8 -1. - <_> - 4 4 2 4 2. - 0 - 5.1881098188459873e-003 - 0.0716628804802895 - -0.2364231050014496 - <_> - - <_> - - - - <_> - 2 9 20 3 -1. - <_> - 2 10 20 1 3. - 0 - 0.0345163010060787 - 0.0158721990883350 - -0.7691177129745483 - <_> - - <_> - - - - <_> - 3 7 13 12 -1. - <_> - 3 13 13 6 2. - 0 - -0.1352206021547318 - 0.2353117018938065 - -0.0661492273211479 - <_> - - <_> - - - - <_> - 9 11 5 6 -1. - <_> - 9 14 5 3 2. - 0 - 2.9648290947079659e-003 - -0.1120676025748253 - 0.1591424047946930 - <_> - - <_> - - - - <_> - 0 2 21 18 -1. - <_> - 7 8 7 6 9. - 0 - -0.3250069916248322 - -0.2958883941173554 - 0.0540772303938866 - <_> - - <_> - - - - <_> - 10 6 7 2 -1. - <_> - 10 7 7 1 2. - 0 - 0.0183311700820923 - 8.5066035389900208e-003 - -0.7375900149345398 - <_> - - <_> - - - - <_> - 11 7 1 2 -1. - <_> - 11 7 1 1 2. - 1 - -4.9089170061051846e-003 - -0.5890269875526428 - 0.0219775307923555 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -3.5843739751726389e-003 - 0.2574572861194611 - -0.0638654381036758 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - 2.4481210857629776e-003 - -0.0969017669558525 - 0.1887596994638443 - <_> - - <_> - - - - <_> - 20 4 2 2 -1. - <_> - 20 5 2 1 2. - 0 - 6.8095198366791010e-004 - 0.0534333698451519 - -0.1844217032194138 - <_> - - <_> - - - - <_> - 9 5 4 5 -1. - <_> - 10 5 2 5 2. - 0 - 0.0194640997797251 - 0.0230364091694355 - -0.6850895881652832 - <_> - - <_> - - - - <_> - 20 4 2 2 -1. - <_> - 20 5 2 1 2. - 0 - -1.3493030564859509e-003 - -0.2561500966548920 - 0.0445856600999832 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 9 1 1 2 3. - 1 - 6.7073898389935493e-003 - -0.0556395798921585 - 0.2708708941936493 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - 3.5809920518659055e-004 - 0.0764997079968452 - -0.2301544994115830 - <_> - - <_> - - - - <_> - 7 0 7 4 -1. - <_> - 7 1 7 2 2. - 0 - -2.1596080623567104e-003 - 0.1389248967170715 - -0.1093723997473717 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 9 1 4 2 2. - 0 - 2.8032960835844278e-003 - -0.0670898705720901 - 0.2217696011066437 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 9 0 2 5 2. - <_> - 11 5 2 5 2. - 0 - 0.0278880391269922 - 0.0268336609005928 - -0.5662286877632141 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - 6.7365981522016227e-006 - -0.0721275880932808 - 0.0850581228733063 - <_> - - <_> - - - - <_> - 5 0 2 1 -1. - <_> - 6 0 1 1 2. - 0 - -6.2904052902013063e-004 - -0.2511523067951202 - 0.0562628917396069 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - 1.5627900138497353e-003 - -0.0576660707592964 - 0.2659468948841095 - <_> - - <_> - - - - <_> - 5 6 7 2 -1. - <_> - 5 7 7 1 2. - 0 - 0.0173570308834314 - 0.0160165093839169 - -0.8605338931083679 - <_> - - <_> - - - - <_> - 10 5 2 9 -1. - <_> - 10 8 2 3 3. - 0 - -9.3336682766675949e-003 - -0.3224127888679504 - 0.0396003089845181 - <_> - - <_> - - - - <_> - 9 5 4 2 -1. - <_> - 10 5 2 2 2. - 0 - 2.3083039559423923e-004 - -0.1635604947805405 - 0.0984729602932930 - <_> - - <_> - - - - <_> - 11 3 4 7 -1. - <_> - 12 3 2 7 2. - 0 - 2.9408670961856842e-003 - -0.0684329792857170 - 0.1397136002779007 - <_> - - <_> - - - - <_> - 7 3 4 7 -1. - <_> - 8 3 2 7 2. - 0 - 4.0767160244286060e-003 - -0.0797895565629005 - 0.1782798022031784 - <_> - - <_> - - - - <_> - 13 3 6 6 -1. - <_> - 15 3 2 6 3. - 0 - 7.0768459700047970e-003 - -0.0725936517119408 - 0.1449348926544190 - <_> - - <_> - - - - <_> - 0 1 1 6 -1. - <_> - 0 3 1 2 3. - 0 - 3.5675889812409878e-003 - 0.0460597388446331 - -0.3389335870742798 - <_> - - <_> - - - - <_> - 13 3 6 6 -1. - <_> - 15 3 2 6 3. - 0 - 0.0756917968392372 - 6.0740611515939236e-003 - -0.6131657958030701 - <_> - - <_> - - - - <_> - 3 3 6 6 -1. - <_> - 5 3 2 6 3. - 0 - 3.8123109843581915e-003 - -0.0985156074166298 - 0.1470690965652466 - <_> - - <_> - - - - <_> - 14 6 8 2 -1. - <_> - 18 6 4 1 2. - <_> - 14 7 4 1 2. - 0 - -7.3113790713250637e-003 - -0.4722943007946014 - 0.0216795504093170 - <_> - - <_> - - - - <_> - 1 0 20 20 -1. - <_> - 1 10 20 10 2. - 0 - -0.7298945188522339 - -0.6859539747238159 - 0.0195386800915003 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - 1.4671859389636666e-004 - 0.0512204207479954 - -0.1144647002220154 - <_> - - <_> - - - - <_> - 0 6 8 2 -1. - <_> - 0 6 4 1 2. - <_> - 4 7 4 1 2. - 0 - -5.5560008622705936e-003 - -0.4161239862442017 - 0.0327023789286613 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 1 2. - <_> - 12 6 1 1 2. - 0 - -1.5673910093028098e-004 - 0.1328687071800232 - -0.1324993073940277 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - -2.7738639619201422e-003 - 0.2094320952892304 - -0.0639172568917274 - <_> - - <_> - - - - <_> - 10 1 2 10 -1. - <_> - 11 1 1 5 2. - <_> - 10 6 1 5 2. - 0 - 2.2972989827394485e-003 - 0.0743914172053337 - -0.2078606933355331 - <_> - - <_> - - - - <_> - 8 4 5 3 -1. - <_> - 8 5 5 1 3. - 0 - 5.2493470720946789e-003 - -0.0640073269605637 - 0.2206687927246094 - <_> - - <_> - - - - <_> - 13 3 2 3 -1. - <_> - 13 4 2 1 3. - 0 - 6.3456031493842602e-003 - 0.0196491591632366 - -0.5350763201713562 - <_> - - <_> - - - - <_> - 7 3 2 3 -1. - <_> - 7 4 2 1 3. - 0 - -6.7409980110824108e-003 - -0.6135385036468506 - 0.0215105190873146 - <_> - - <_> - - - - <_> - 5 18 16 2 -1. - <_> - 13 18 8 1 2. - <_> - 5 19 8 1 2. - 0 - -0.0111705400049686 - -0.3782677948474884 - 0.0205064099282026 - <_> - - <_> - - - - <_> - 6 3 4 6 -1. - <_> - 7 3 2 6 2. - 0 - 3.8897111080586910e-003 - -0.0661974474787712 - 0.2168062031269074 - -1.1778520345687866 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -9.1578466817736626e-003 - 0.4297220110893250 - -0.2351080030202866 - <_> - - <_> - - - - <_> - 16 0 6 6 -1. - <_> - 16 2 6 2 3. - 0 - 0.1402714997529984 - 7.2441468946635723e-003 - -32.5314102172851560 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 9 8 1 2 3. - 0 - 2.2851820103824139e-003 - -0.1287254989147186 - 0.3293642103672028 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 1 2. - <_> - 12 6 1 1 2. - 0 - -4.8890261678025126e-004 - 0.2392725944519043 - -0.1488088071346283 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 9 2 2 4 2. - <_> - 11 6 2 4 2. - 0 - -0.0136168003082275 - -0.5497769117355347 - 0.0518189892172813 - <_> - - <_> - - - - <_> - 8 11 6 1 -1. - <_> - 10 11 2 1 3. - 0 - 2.3789319675415754e-003 - -0.0984305664896965 - 0.2368808984756470 - <_> - - <_> - - - - <_> - 10 7 2 6 -1. - <_> - 10 10 2 3 2. - 0 - -1.4167469998938031e-005 - 0.1016424968838692 - -0.2179713994264603 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 10 10 2 1 2. - 0 - 2.8050719265593216e-005 - -0.1042459979653359 - 0.2608137130737305 - <_> - - <_> - - - - <_> - 3 4 16 4 -1. - <_> - 7 4 8 4 2. - 0 - -0.0198016706854105 - 0.1677625030279160 - -0.1398258060216904 - <_> - - <_> - - - - <_> - 3 2 16 6 -1. - <_> - 11 2 8 3 2. - <_> - 3 5 8 3 2. - 0 - -0.0189289506524801 - -0.2852298021316528 - 0.0734288766980171 - <_> - - <_> - - - - <_> - 11 0 5 2 -1. - <_> - 11 0 5 1 2. - 1 - -0.0139253903180361 - 0.3541125059127808 - -0.0625523477792740 - <_> - - <_> - - - - <_> - 16 11 6 9 -1. - <_> - 18 11 2 9 3. - 0 - 8.3792414516210556e-003 - -0.0479432307183743 - 0.1088014021515846 - <_> - - <_> - - - - <_> - 1 8 18 9 -1. - <_> - 7 8 6 9 3. - 0 - 0.6234381794929504 - -3.8946459535509348e-003 - -3.5067338867187500e+003 - <_> - - <_> - - - - <_> - 12 3 7 4 -1. - <_> - 12 5 7 2 2. - 0 - 0.0215776003897190 - 0.0251157302409410 - -0.2866066098213196 - <_> - - <_> - - - - <_> - 9 0 3 3 -1. - <_> - 10 1 1 3 3. - 1 - 0.0105129899457097 - -0.0460954904556274 - 0.4104490876197815 - <_> - - <_> - - - - <_> - 11 0 2 10 -1. - <_> - 11 0 1 10 2. - 0 - 0.0135604199022055 - 0.0257372800260782 - -0.3851518034934998 - <_> - - <_> - - - - <_> - 4 1 8 6 -1. - <_> - 4 4 8 3 2. - 0 - 0.2116516977548599 - 2.4527360219508410e-003 - -7.2768730468750000e+003 - <_> - - <_> - - - - <_> - 11 0 2 10 -1. - <_> - 11 0 1 10 2. - 0 - -3.3338558860123158e-003 - -0.2040586024522781 - 0.0436336584389210 - <_> - - <_> - - - - <_> - 4 0 3 8 -1. - <_> - 4 4 3 4 2. - 0 - 8.9795915409922600e-003 - 0.0789536610245705 - -0.2779375910758972 - <_> - - <_> - - - - <_> - 12 6 8 4 -1. - <_> - 14 8 4 4 2. - 1 - 5.3711910732090473e-003 - -0.0243443492799997 - 0.0669215396046638 - <_> - - <_> - - - - <_> - 6 1 10 1 -1. - <_> - 11 1 5 1 2. - 0 - -8.3309561014175415e-003 - -0.3500913083553314 - 0.0590515993535519 - <_> - - <_> - - - - <_> - 9 6 6 6 -1. - <_> - 9 8 6 2 3. - 0 - 2.8106879908591509e-003 - -0.1231127008795738 - 0.1022505983710289 - <_> - - <_> - - - - <_> - 0 3 22 1 -1. - <_> - 11 3 11 1 2. - 0 - 0.0210456103086472 - 0.0556264109909534 - -0.3356165885925293 - <_> - - <_> - - - - <_> - 12 6 3 3 -1. - <_> - 13 6 1 3 3. - 0 - 3.7455770652741194e-003 - -0.0674435868859291 - 0.2244254946708679 - <_> - - <_> - - - - <_> - 0 4 20 13 -1. - <_> - 10 4 10 13 2. - 0 - 0.6953166723251343 - 1.5418729744851589e-003 - -1.3301940429687500e+004 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 0 - -6.6458311630412936e-004 - -0.2234025001525879 - 0.0511555001139641 - <_> - - <_> - - - - <_> - 10 3 2 3 -1. - <_> - 10 4 2 1 3. - 0 - 5.3947657579556108e-004 - -0.1327797025442123 - 0.1371753960847855 - <_> - - <_> - - - - <_> - 10 4 2 9 -1. - <_> - 10 7 2 3 3. - 0 - -0.0179904196411371 - -0.6257631778717041 - 0.0290631502866745 - <_> - - <_> - - - - <_> - 4 8 13 10 -1. - <_> - 4 13 13 5 2. - 0 - 0.0476338304579258 - -0.0774188190698624 - 0.2374081015586853 - <_> - - <_> - - - - <_> - 4 9 14 10 -1. - <_> - 4 14 14 5 2. - 0 - -0.0338206589221954 - 0.1533441990613937 - -0.1141415983438492 - <_> - - <_> - - - - <_> - 1 1 1 2 -1. - <_> - 1 2 1 1 2. - 0 - -2.8191189630888402e-004 - -0.2367727011442184 - 0.0828078612685204 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - -1.3994389446452260e-003 - -0.2852096855640411 - 0.0221878308802843 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 9 1 1 3 3. - 1 - -7.1874959394335747e-003 - 0.2714895009994507 - -0.0663270875811577 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 0 - 4.0477450238540769e-004 - 0.0645949617028236 - -0.2224017977714539 - <_> - - <_> - - - - <_> - 10 0 2 4 -1. - <_> - 10 2 2 2 2. - 0 - -3.2028779387474060e-003 - 0.2137742042541504 - -0.0970738828182220 - <_> - - <_> - - - - <_> - 11 5 2 1 -1. - <_> - 11 5 1 1 2. - 0 - 1.4322189599624835e-005 - -0.1437651962041855 - 0.0979718714952469 - <_> - - <_> - - - - <_> - 9 1 3 4 -1. - <_> - 9 2 3 2 2. - 0 - 1.2757449876517057e-003 - -0.0847516581416130 - 0.2238063067197800 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - 4.8291438724845648e-004 - 0.0465225800871849 - -0.2226213067770004 - <_> - - <_> - - - - <_> - 8 6 1 2 -1. - <_> - 8 7 1 1 2. - 0 - 1.3836859579896554e-005 - -0.1603007018566132 - 0.1164596006274223 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - -2.6899509248323739e-004 - -0.1268095970153809 - 0.0512570887804031 - <_> - - <_> - - - - <_> - 1 4 18 3 -1. - <_> - 1 5 18 1 3. - 0 - 1.3922810321673751e-003 - -0.1231502965092659 - 0.1502535939216614 - <_> - - <_> - - - - <_> - 20 1 1 2 -1. - <_> - 20 2 1 1 2. - 0 - 1.3342479360289872e-004 - 0.0336655192077160 - -0.0816102325916290 - <_> - - <_> - - - - <_> - 1 1 1 2 -1. - <_> - 1 2 1 1 2. - 0 - 6.1454152455553412e-004 - 0.0565197616815567 - -0.3143323063850403 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -1.7104489961639047e-003 - 0.2299017012119293 - -0.0815841481089592 - <_> - - <_> - - - - <_> - 9 15 2 2 -1. - <_> - 9 16 2 1 2. - 0 - 1.3824190318700857e-005 - -0.1194149032235146 - 0.1325094997882843 - <_> - - <_> - - - - <_> - 12 9 2 6 -1. - <_> - 13 9 1 3 2. - <_> - 12 12 1 3 2. - 0 - 2.7970890514552593e-003 - -0.0471032895147800 - 0.1990848034620285 - <_> - - <_> - - - - <_> - 11 5 4 2 -1. - <_> - 12 6 2 2 2. - 1 - -3.9447317831218243e-003 - -0.3210462033748627 - 0.0613108985126019 - <_> - - <_> - - - - <_> - 12 9 2 6 -1. - <_> - 13 9 1 3 2. - <_> - 12 12 1 3 2. - 0 - -3.4402438905090094e-003 - 0.2135432958602905 - -0.0612124688923359 - <_> - - <_> - - - - <_> - 6 3 9 9 -1. - <_> - 9 3 3 9 3. - 0 - -0.0246547795832157 - 0.2334077954292297 - -0.0668469667434692 - <_> - - <_> - - - - <_> - 11 5 4 1 -1. - <_> - 11 5 2 1 2. - 0 - 6.3331361161544919e-004 - -0.0940388366580009 - 0.0784796699881554 - <_> - - <_> - - - - <_> - 6 0 2 1 -1. - <_> - 7 0 1 1 2. - 0 - -4.2303430382162333e-004 - -0.2380173951387405 - 0.0726420730352402 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 5 1 3 3. - 0 - 2.9926518909633160e-003 - -0.0646496266126633 - 0.2483333945274353 - <_> - - <_> - - - - <_> - 9 3 3 9 -1. - <_> - 10 6 1 3 9. - 0 - -0.0117980204522610 - -0.3016653060913086 - 0.0611184202134609 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 10 1 3 2. - 0 - -9.7868414595723152e-003 - -0.4501554965972900 - 0.0283771902322769 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 7 5 1 3 3. - 0 - -5.7037919759750366e-003 - 0.2485335022211075 - -0.0693554431200027 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - 1.4342799659061711e-005 - -0.1143101006746292 - 0.1224792003631592 - <_> - - <_> - - - - <_> - 5 6 1 2 -1. - <_> - 5 7 1 1 2. - 0 - 3.3727320260368288e-004 - 0.0712894424796104 - -0.2122046947479248 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.3521739747375250e-003 - 0.1840752065181732 - -0.0889021083712578 - <_> - - <_> - - - - <_> - 9 2 4 4 -1. - <_> - 9 3 4 2 2. - 0 - 3.9903540164232254e-003 - -0.0753622278571129 - 0.2054972052574158 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 15 1 1 3 3. - 1 - 0.0192009396851063 - 0.0138682899996638 - -0.4204528033733368 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 7 1 3 1 3. - 1 - -0.0135465096682310 - -0.5132575035095215 - 0.0294547490775585 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - -1.5859559644013643e-003 - 0.2254945933818817 - -0.0844166874885559 - <_> - - <_> - - - - <_> - 4 15 7 2 -1. - <_> - 4 16 7 1 2. - 0 - 2.0342590287327766e-003 - 0.0670202672481537 - -0.2372235953807831 - <_> - - <_> - - - - <_> - 12 4 10 4 -1. - <_> - 12 6 10 2 2. - 0 - 0.0658356994390488 - 2.2492709103971720e-003 - -0.6338260769844055 - <_> - - <_> - - - - <_> - 0 4 10 4 -1. - <_> - 0 6 10 2 2. - 0 - -0.0195674207061529 - -0.4072571992874146 - 0.0354226715862751 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - 4.8953219084069133e-004 - -0.0603426694869995 - 0.1327389925718308 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 8 6 1 1 2. - <_> - 9 7 1 1 2. - 0 - 1.4131540410744492e-005 - -0.1164193004369736 - 0.1268204003572464 - <_> - - <_> - - - - <_> - 11 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 11 12 1 1 2. - 0 - 1.4203680620994419e-004 - -0.0883677825331688 - 0.1355469971895218 - <_> - - <_> - - - - <_> - 1 16 20 2 -1. - <_> - 1 16 10 1 2. - <_> - 11 17 10 1 2. - 0 - 7.1458360180258751e-003 - 0.0435118488967419 - -0.3186442852020264 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - -3.3641001209616661e-004 - 0.1020468026399612 - -0.0942991226911545 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - 1.0267529869452119e-003 - -0.0593343488872051 - 0.2253963947296143 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 0 - -1.7631480295676738e-004 - -0.1078993976116180 - 0.0541985705494881 - <_> - - <_> - - - - <_> - 8 5 2 1 -1. - <_> - 9 5 1 1 2. - 0 - 2.8943250072188675e-005 - -0.1470935940742493 - 0.0997143834829330 - <_> - - <_> - - - - <_> - 14 0 2 1 -1. - <_> - 14 0 1 1 2. - 0 - -1.3899109944759402e-005 - 0.0806034728884697 - -0.0662512034177780 - <_> - - <_> - - - - <_> - 6 0 2 1 -1. - <_> - 7 0 1 1 2. - 0 - 3.2039379584603012e-004 - 0.0713432729244232 - -0.2052617073059082 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 4 4 2 2. - 0 - -3.6573910620063543e-003 - 0.2458195984363556 - -0.0602875202894211 - <_> - - <_> - - - - <_> - 9 9 4 2 -1. - <_> - 9 9 2 1 2. - <_> - 11 10 2 1 2. - 0 - 1.3356460258364677e-003 - 0.0584368705749512 - -0.2410932928323746 - <_> - - <_> - - - - <_> - 19 16 1 4 -1. - <_> - 19 18 1 2 2. - 0 - -1.4866300261928700e-005 - 0.0683136582374573 - -0.0784729868173599 - <_> - - <_> - - - - <_> - 8 1 5 4 -1. - <_> - 8 2 5 2 2. - 0 - -2.8311789501458406e-003 - 0.1354293972253799 - -0.0976065173745155 - <_> - - <_> - - - - <_> - 2 15 18 4 -1. - <_> - 11 15 9 2 2. - <_> - 2 17 9 2 2. - 0 - 0.0300819091498852 - 0.0320588797330856 - -0.4443610906600952 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 10 8 2 3 2. - 0 - -0.0182636305689812 - -0.7223858833312988 - 0.0155908400192857 - <_> - - <_> - - - - <_> - 11 14 3 1 -1. - <_> - 12 14 1 1 3. - 0 - -3.3928160555660725e-003 - 0.2198332995176315 - -0.0214653406292200 - <_> - - <_> - - - - <_> - 7 5 2 1 -1. - <_> - 8 5 1 1 2. - 0 - 1.7436090274713933e-004 - -0.1053124964237213 - 0.1154318973422051 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 5 1 3 2. - 1 - -2.3402511142194271e-003 - -0.0878688097000122 - 0.0533454902470112 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 10 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - -1.4445939996221568e-005 - 0.1216074973344803 - -0.1129266023635864 - <_> - - <_> - - - - <_> - 12 9 2 6 -1. - <_> - 13 9 1 3 2. - <_> - 12 12 1 3 2. - 0 - 6.8112200824543834e-004 - -0.0468691289424896 - 0.0806133523583412 - <_> - - <_> - - - - <_> - 7 1 3 2 -1. - <_> - 8 2 1 2 3. - 1 - 5.8264320250600576e-004 - -0.0963988080620766 - 0.1194145977497101 - <_> - - <_> - - - - <_> - 16 6 1 2 -1. - <_> - 16 7 1 1 2. - 0 - 1.9176679779775441e-004 - 0.0503207594156265 - -0.1163712963461876 - <_> - - <_> - - - - <_> - 5 6 1 2 -1. - <_> - 5 7 1 1 2. - 0 - -2.7771131135523319e-004 - -0.1948352009057999 - 0.0661778226494789 - <_> - - <_> - - - - <_> - 9 1 4 3 -1. - <_> - 9 2 4 1 3. - 0 - 3.9666048251092434e-003 - -0.0509240813553333 - 0.2549062967300415 - <_> - - <_> - - - - <_> - 4 3 5 4 -1. - <_> - 4 4 5 2 2. - 0 - -0.0116857998073101 - -0.4999768137931824 - 0.0252358596771955 - <_> - - <_> - - - - <_> - 0 8 22 8 -1. - <_> - 0 8 11 8 2. - 0 - 0.2621197998523712 - 0.0220271404832602 - -0.5047935843467712 - <_> - - <_> - - - - <_> - 8 14 3 1 -1. - <_> - 9 14 1 1 3. - 0 - 2.6809240225702524e-003 - -0.0412976406514645 - 0.3101181089878082 - <_> - - <_> - - - - <_> - 14 14 2 2 -1. - <_> - 14 14 1 2 2. - 1 - -1.4688560440845322e-005 - 0.0980607867240906 - -0.0905921086668968 - <_> - - <_> - - - - <_> - 4 18 14 1 -1. - <_> - 11 18 7 1 2. - 0 - 6.3697979785501957e-003 - 0.0665962174534798 - -0.2027879953384399 - <_> - - <_> - - - - <_> - 14 7 7 6 -1. - <_> - 12 9 7 2 3. - 1 - 0.0468425191938877 - -0.0514526218175888 - 0.2597778141498566 - <_> - - <_> - - - - <_> - 1 16 2 4 -1. - <_> - 1 18 2 2 2. - 0 - -1.3824669622408692e-005 - 0.1048332974314690 - -0.1180268004536629 - <_> - - <_> - - - - <_> - 18 18 3 1 -1. - <_> - 19 18 1 1 3. - 0 - 4.4806601363234222e-004 - -0.0337514206767082 - 0.0799962133169174 - <_> - - <_> - - - - <_> - 1 18 3 1 -1. - <_> - 2 18 1 1 3. - 0 - 3.8907579437363893e-005 - -0.1054759025573731 - 0.1246711015701294 - <_> - - <_> - - - - <_> - 13 17 2 3 -1. - <_> - 13 18 2 1 3. - 0 - 1.3659050455316901e-003 - 0.0403454005718231 - -0.1973236054182053 - <_> - - <_> - - - - <_> - 9 10 4 8 -1. - <_> - 9 14 4 4 2. - 0 - 5.0416071899235249e-003 - -0.0862080231308937 - 0.1377595067024231 - <_> - - <_> - - - - <_> - 4 6 14 12 -1. - <_> - 4 12 14 6 2. - 0 - -0.0461407117545605 - 0.1417331993579865 - -0.0958949401974678 - -1.1284530162811279 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 2 8 4 -1. - <_> - 5 2 4 2 2. - <_> - 9 4 4 2 2. - 0 - 8.3971247076988220e-003 - -0.2519161999225617 - 0.3748430907726288 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - 0.0214252006262541 - -0.0970071703195572 - 0.5168768167495728 - <_> - - <_> - - - - <_> - 7 0 7 4 -1. - <_> - 7 2 7 2 2. - 0 - -0.0103187700733542 - 0.2933588922023773 - -0.1273393034934998 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 7 4 2 2. - 0 - 1.1448180302977562e-003 - -0.1866510063409805 - 0.1731390953063965 - <_> - - <_> - - - - <_> - 7 4 8 8 -1. - <_> - 9 4 4 8 2. - 0 - 0.0753935202956200 - -0.0606487281620502 - 0.3612788021564484 - <_> - - <_> - - - - <_> - 2 0 18 11 -1. - <_> - 8 0 6 11 3. - 0 - -0.0933705121278763 - 0.2343841046094894 - -0.0871179476380348 - <_> - - <_> - - - - <_> - 3 3 16 2 -1. - <_> - 3 3 8 1 2. - <_> - 11 4 8 1 2. - 0 - 5.2113737910985947e-003 - 0.0612743906676769 - -0.3077687919139862 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 9.9769225344061852e-003 - -0.0640871077775955 - 0.3110612034797669 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - 1.9360840087756515e-003 - -0.1233680024743080 - 0.1817514002323151 - <_> - - <_> - - - - <_> - 10 6 3 6 -1. - <_> - 10 9 3 3 2. - 0 - 7.2699370793998241e-003 - 0.0974746793508530 - -0.2754136025905609 - <_> - - <_> - - - - <_> - 0 11 1 2 -1. - <_> - 0 12 1 1 2. - 0 - 0.0219360198825598 - -0.0419079288840294 - -1356970. - <_> - - <_> - - - - <_> - 11 8 2 4 -1. - <_> - 12 8 1 2 2. - <_> - 11 10 1 2 2. - 0 - 2.1171040134504437e-004 - -0.1092913970351219 - 0.1300686001777649 - <_> - - <_> - - - - <_> - 7 6 2 4 -1. - <_> - 7 7 2 2 2. - 0 - 0.0337506607174873 - 0.0281213205307722 - -1164827. - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 11 7 3 2 2. - <_> - 8 9 3 2 2. - 0 - 7.5086490251123905e-003 - 0.0471324101090431 - -0.3740671873092651 - <_> - - <_> - - - - <_> - 4 0 2 2 -1. - <_> - 4 1 2 1 2. - 0 - 4.4921328662894666e-004 - 0.0763953030109406 - -0.2318594008684158 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - -6.6751212580129504e-004 - -0.2480995059013367 - 0.0450456589460373 - <_> - - <_> - - - - <_> - 6 2 8 3 -1. - <_> - 6 2 4 3 2. - 1 - 0.1652213931083679 - -0.0258559100329876 - -2.0928300781250000e+004 - <_> - - <_> - - - - <_> - 10 0 6 6 -1. - <_> - 13 0 3 3 2. - <_> - 10 3 3 3 2. - 0 - -0.0231442097574472 - 0.4005987942218781 - -0.0274594295769930 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 6 8 3 6 2. - 1 - -0.1304834038019180 - 0.6629037261009216 - 3.1869049416854978e-004 - <_> - - <_> - - - - <_> - 4 6 14 2 -1. - <_> - 11 6 7 1 2. - <_> - 4 7 7 1 2. - 0 - 3.1665959395468235e-003 - 0.0497007891535759 - -0.1588412970304489 - <_> - - <_> - - - - <_> - 9 16 1 3 -1. - <_> - 9 17 1 1 3. - 0 - 0.0226371791213751 - -0.0224922504276037 - -1.7191429443359375e+003 - <_> - - <_> - - - - <_> - 1 10 20 10 -1. - <_> - 1 15 20 5 2. - 0 - -0.0370337106287479 - 0.1775891035795212 - -0.1133036017417908 - <_> - - <_> - - - - <_> - 3 6 16 14 -1. - <_> - 3 13 16 7 2. - 0 - 0.0957055464386940 - -0.0493116416037083 - 0.2703442871570587 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 4.9114227294921875e-004 - 0.0563700906932354 - -0.2764115929603577 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 7 8 3 2 3. - 0 - 1.5984029741957784e-003 - -0.1394491940736771 - 0.1152516007423401 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - -2.3700800375081599e-004 - -0.1202694028615952 - 0.0450531989336014 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -1.7486650031059980e-003 - 0.2248543053865433 - -0.0691196322441101 - <_> - - <_> - - - - <_> - 8 2 6 8 -1. - <_> - 11 2 3 4 2. - <_> - 8 6 3 4 2. - 0 - 8.1553738564252853e-003 - 0.0681412369012833 - -0.2362017929553986 - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 8 4 3 2 2. - <_> - 11 6 3 2 2. - 0 - 5.3146569989621639e-003 - 0.0602959804236889 - -0.2696734070777893 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 2.0854989998042583e-004 - -0.0992822572588921 - 0.1405574977397919 - <_> - - <_> - - - - <_> - 6 6 3 4 -1. - <_> - 7 6 1 4 3. - 0 - -2.0299179013818502e-003 - 0.1462122946977615 - -0.1029042005538940 - <_> - - <_> - - - - <_> - 13 5 3 4 -1. - <_> - 14 5 1 4 3. - 0 - -4.4038048945367336e-003 - 0.1760924011468887 - -0.0776556134223938 - <_> - - <_> - - - - <_> - 6 5 3 4 -1. - <_> - 7 5 1 4 3. - 0 - 2.3809750564396381e-003 - -0.0719719380140305 - 0.2199517935514450 - <_> - - <_> - - - - <_> - 6 0 10 1 -1. - <_> - 6 0 5 1 2. - 0 - 5.7388218119740486e-003 - 0.0616430193185806 - -0.2828576862812042 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 10 6 2 4 2. - 0 - -6.7427940666675568e-003 - -0.4573194086551666 - 0.0266257096081972 - <_> - - <_> - - - - <_> - 11 4 1 4 -1. - <_> - 11 6 1 2 2. - 0 - -1.2488880020100623e-004 - 0.0715798288583755 - -0.0749574974179268 - <_> - - <_> - - - - <_> - 9 4 3 9 -1. - <_> - 9 7 3 3 3. - 0 - -7.2185341268777847e-003 - -0.2961963117122650 - 0.0492331795394421 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 10 1 3 2. - 0 - -5.8523979969322681e-003 - -0.2419392019510269 - 0.0391878001391888 - <_> - - <_> - - - - <_> - 6 7 3 12 -1. - <_> - 6 13 3 6 2. - 0 - -0.0159999504685402 - 0.1795984953641892 - -0.0903806835412979 - <_> - - <_> - - - - <_> - 10 5 2 2 -1. - <_> - 11 5 1 1 2. - <_> - 10 6 1 1 2. - 0 - -1.4750259651918896e-005 - 0.1260585933923721 - -0.1127424985170364 - <_> - - <_> - - - - <_> - 9 5 2 3 -1. - <_> - 9 6 2 1 3. - 0 - 1.2057370040565729e-003 - -0.0606505610048771 - 0.2197345048189163 - <_> - - <_> - - - - <_> - 15 3 2 3 -1. - <_> - 15 4 2 1 3. - 0 - -4.5243799686431885e-003 - -0.4326902031898499 - 0.0258536208420992 - <_> - - <_> - - - - <_> - 5 3 2 3 -1. - <_> - 5 4 2 1 3. - 0 - 2.5474729482084513e-003 - 0.0335928201675415 - -0.3606418073177338 - <_> - - <_> - - - - <_> - 9 0 7 4 -1. - <_> - 9 1 7 2 2. - 0 - -1.2268190039321780e-003 - 0.0952192768454552 - -0.0968890637159348 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 9 1 4 2 2. - 0 - 7.5668231584131718e-003 - -0.0420039817690849 - 0.3147489130496979 - <_> - - <_> - - - - <_> - 11 3 5 8 -1. - <_> - 11 5 5 4 2. - 0 - -0.0299402400851250 - -0.4118678867816925 - 0.0150121198967099 - <_> - - <_> - - - - <_> - 10 4 1 4 -1. - <_> - 10 6 1 2 2. - 0 - -1.4460280362982303e-004 - 0.1128280013799667 - -0.1156454980373383 - <_> - - <_> - - - - <_> - 10 4 3 1 -1. - <_> - 11 4 1 1 3. - 0 - 5.5179679766297340e-003 - 0.0147834103554487 - -0.7806923985481262 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 4 1 1 3. - 0 - 4.3602618388831615e-003 - 0.0191977098584175 - -0.5717526078224182 - <_> - - <_> - - - - <_> - 9 4 5 3 -1. - <_> - 9 5 5 1 3. - 0 - -1.7657090211287141e-003 - 0.1633666008710861 - -0.0723521411418915 - <_> - - <_> - - - - <_> - 10 13 1 2 -1. - <_> - 10 14 1 1 2. - 0 - 1.4166040637064725e-004 - -0.0967558026313782 - 0.1280945986509323 - <_> - - <_> - - - - <_> - 2 14 19 3 -1. - <_> - 2 15 19 1 3. - 0 - 0.0312300100922585 - 0.0156405698508024 - -0.6475753188133240 - <_> - - <_> - - - - <_> - 2 18 5 2 -1. - <_> - 2 19 5 1 2. - 0 - -4.3514901335584000e-005 - 0.1005311012268066 - -0.1240810006856918 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -3.5158041282556951e-004 - 0.1543152928352356 - -0.0673903599381447 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 2.0108280295971781e-004 - -0.0983629524707794 - 0.1376408040523529 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - 4.1300798766314983e-003 - 5.7529108598828316e-003 - -0.5346755981445313 - <_> - - <_> - - - - <_> - 5 0 1 2 -1. - <_> - 5 1 1 1 2. - 0 - -2.4093700631055981e-004 - -0.1990021020174027 - 0.0742841362953186 - <_> - - <_> - - - - <_> - 18 17 3 1 -1. - <_> - 19 17 1 1 3. - 0 - -1.2804890284314752e-003 - 0.1639658063650131 - -0.0369872897863388 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - -4.7115217894315720e-003 - -0.3158268034458160 - 0.0397362187504768 - <_> - - <_> - - - - <_> - 8 0 6 8 -1. - <_> - 8 4 6 4 2. - 0 - 0.0111407702788711 - -0.1018226966261864 - 0.1254808008670807 - <_> - - <_> - - - - <_> - 6 3 5 8 -1. - <_> - 6 5 5 4 2. - 0 - 0.0380288809537888 - 0.0239160396158695 - -0.6053447127342224 - <_> - - <_> - - - - <_> - 11 3 6 2 -1. - <_> - 11 3 3 2 2. - 0 - -1.7240589950233698e-003 - 0.1215725019574165 - -0.1009232997894287 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - 1.0013659484684467e-003 - -0.0498758405447006 - 0.2287252992391586 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 19 2 1 2. - 0 - 1.1469529708847404e-003 - 0.0413996987044811 - -0.2337713986635208 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 8 9 3 1 2. - <_> - 11 10 3 1 2. - 0 - 3.5106660798192024e-003 - 0.0339972712099552 - -0.3234651088714600 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -1.4566490426659584e-003 - 0.2534640133380890 - -0.0411506108939648 - <_> - - <_> - - - - <_> - 0 0 22 17 -1. - <_> - 11 0 11 17 2. - 0 - 0.3748399913311005 - 0.0334773510694504 - -0.3648450076580048 - <_> - - <_> - - - - <_> - 14 17 2 3 -1. - <_> - 14 18 2 1 3. - 0 - -1.4147689798846841e-003 - -0.2028492987155914 - 0.0373192690312862 - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -0.0215422809123993 - 0.3041875958442688 - -0.0388174615800381 - <_> - - <_> - - - - <_> - 17 6 2 4 -1. - <_> - 18 6 1 2 2. - <_> - 17 8 1 2 2. - 0 - -4.7629610635340214e-003 - -0.3301889002323151 - 0.0130887301638722 - <_> - - <_> - - - - <_> - 9 0 3 4 -1. - <_> - 10 1 1 4 3. - 1 - 0.0140965702012181 - -0.0362602993845940 - 0.3295580148696899 - <_> - - <_> - - - - <_> - 17 6 2 4 -1. - <_> - 18 6 1 2 2. - <_> - 17 8 1 2 2. - 0 - 3.5879030474461615e-004 - 0.0399288311600685 - -0.0781079828739166 - <_> - - <_> - - - - <_> - 6 17 2 3 -1. - <_> - 6 18 2 1 3. - 0 - 2.0676909480243921e-003 - 0.0373096689581871 - -0.3191820085048676 - <_> - - <_> - - - - <_> - 5 2 12 6 -1. - <_> - 8 2 6 6 2. - 0 - 0.0228802207857370 - -0.0859039798378944 - 0.1533433943986893 - <_> - - <_> - - - - <_> - 6 0 6 3 -1. - <_> - 8 0 2 3 3. - 0 - 0.0212015099823475 - 0.0264725107699633 - -0.5055732131004334 - <_> - - <_> - - - - <_> - 19 6 3 3 -1. - <_> - 20 7 1 1 9. - 0 - -6.0203541070222855e-003 - -0.1631824970245361 - 0.0207324903458357 - <_> - - <_> - - - - <_> - 1 17 3 1 -1. - <_> - 2 17 1 1 3. - 0 - -5.0420581828802824e-004 - 0.1666868031024933 - -0.0666975826025009 - <_> - - <_> - - - - <_> - 18 16 3 2 -1. - <_> - 19 16 1 2 3. - 0 - 6.0316012240946293e-004 - -0.0647938475012779 - 0.1326615065336227 - <_> - - <_> - - - - <_> - 0 6 3 3 -1. - <_> - 1 7 1 1 9. - 0 - 3.4756860695779324e-003 - 0.0569241195917130 - -0.2480261027812958 - <_> - - <_> - - - - <_> - 18 16 3 2 -1. - <_> - 19 16 1 2 3. - 0 - -2.8164550894871354e-004 - 0.1073189005255699 - -0.0688894465565681 - <_> - - <_> - - - - <_> - 1 16 3 2 -1. - <_> - 2 16 1 2 3. - 0 - 1.0619480162858963e-003 - -0.0713295787572861 - 0.1913377046585083 - <_> - - <_> - - - - <_> - 17 0 4 8 -1. - <_> - 19 0 2 4 2. - <_> - 17 4 2 4 2. - 0 - -0.0120390104129910 - -0.1853135973215103 - 0.0198695193976164 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - 7.3727907147258520e-004 - 0.0695572420954704 - -0.1689265072345734 - <_> - - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 8 6 6 1 3. - 0 - -8.9795957319438457e-004 - 0.1004858016967773 - -0.1124922037124634 - <_> - - <_> - - - - <_> - 3 18 2 2 -1. - <_> - 3 19 2 1 2. - 0 - -1.4421059750020504e-003 - -0.2594228088855743 - 0.0434616208076477 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - 0.0121280997991562 - 1.0867379605770111e-003 - -0.9621928930282593 - <_> - - <_> - - - - <_> - 10 9 2 1 -1. - <_> - 10 9 1 1 2. - 1 - -3.8773349951952696e-003 - -0.4458861947059631 - 0.0232714507728815 - <_> - - <_> - - - - <_> - 8 0 9 2 -1. - <_> - 8 1 9 1 2. - 0 - -1.8645300297066569e-003 - 0.1158886030316353 - -0.0744214877486229 - <_> - - <_> - - - - <_> - 6 0 10 4 -1. - <_> - 6 1 10 2 2. - 0 - 1.5988890081644058e-003 - -0.0719761624932289 - 0.1381413936614990 - <_> - - <_> - - - - <_> - 8 4 6 6 -1. - <_> - 10 6 2 2 9. - 0 - -0.0104822600260377 - -0.1841841936111450 - 0.0580828599631786 - <_> - - <_> - - - - <_> - 8 8 2 6 -1. - <_> - 8 8 1 3 2. - <_> - 9 11 1 3 2. - 0 - 2.5457469746470451e-003 - -0.0497190393507481 - 0.2216221988201141 - <_> - - <_> - - - - <_> - 11 7 3 2 -1. - <_> - 11 7 3 1 2. - 1 - -5.3013530559837818e-003 - -0.1510517001152039 - 0.0171321202069521 - <_> - - <_> - - - - <_> - 8 9 2 4 -1. - <_> - 8 9 1 2 2. - <_> - 9 11 1 2 2. - 0 - -7.1186490822583437e-004 - 0.1243685036897659 - -0.0896343588829041 - <_> - - <_> - - - - <_> - 11 8 1 4 -1. - <_> - 11 10 1 2 2. - 0 - -8.6922161281108856e-003 - -0.5959401726722717 - 0.0113699501380324 - <_> - - <_> - - - - <_> - 1 0 4 8 -1. - <_> - 1 0 2 4 2. - <_> - 3 4 2 4 2. - 0 - 4.9854819662868977e-003 - 0.0485452413558960 - -0.2162587940692902 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.9476209999993443e-003 - 0.1720295995473862 - -0.0662417113780975 - <_> - - <_> - - - - <_> - 8 2 4 3 -1. - <_> - 8 3 4 1 3. - 0 - 4.6425309847109020e-004 - -0.0873881131410599 - 0.1256251931190491 - <_> - - <_> - - - - <_> - 20 12 2 2 -1. - <_> - 20 13 2 1 2. - 0 - -7.8054452314972878e-003 - -0.5402312278747559 - 5.5168392136693001e-003 - <_> - - <_> - - - - <_> - 0 12 1 2 -1. - <_> - 0 13 1 1 2. - 0 - -1.7876500496640801e-003 - -0.4162572026252747 - 0.0237602591514587 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 3.4986619721166790e-004 - -0.1064530014991760 - 0.1341595053672791 - <_> - - <_> - - - - <_> - 3 7 8 1 -1. - <_> - 7 7 4 1 2. - 0 - -1.7780930502340198e-003 - 0.1413051038980484 - -0.0802407637238503 - <_> - - <_> - - - - <_> - 3 5 18 12 -1. - <_> - 9 9 6 4 9. - 0 - -0.1886038035154343 - -0.2014852017164230 - 0.0366587117314339 - <_> - - <_> - - - - <_> - 11 9 6 5 -1. - <_> - 13 11 2 5 3. - 1 - -0.0106771299615502 - 0.1341644972562790 - -0.0764063671231270 - <_> - - <_> - - - - <_> - 10 7 3 6 -1. - <_> - 10 9 3 2 3. - 0 - 0.0229883696883917 - 0.0181326903402805 - -0.4854438900947571 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - -1.3255500234663486e-003 - 0.2557215988636017 - -0.0407051295042038 - <_> - - <_> - - - - <_> - 2 18 18 2 -1. - <_> - 11 18 9 1 2. - <_> - 2 19 9 1 2. - 0 - 5.9496019966900349e-003 - 0.0393141806125641 - -0.2797056138515472 - <_> - - <_> - - - - <_> - 9 0 3 14 -1. - <_> - 9 7 3 7 2. - 0 - -0.0665675029158592 - -0.5570551156997681 - 0.0164448097348213 - <_> - - <_> - - - - <_> - 14 8 8 4 -1. - <_> - 13 9 8 2 2. - 1 - 0.0249361302703619 - -0.0282545704394579 - 0.2345370054244995 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 7 2 1 2. - 0 - 6.7102699540555477e-004 - 0.0522451288998127 - -0.1954842954874039 - <_> - - <_> - - - - <_> - 14 8 8 4 -1. - <_> - 13 9 8 2 2. - 1 - -6.5158591605722904e-003 - 0.1305941045284271 - -0.0542463697493076 - <_> - - <_> - - - - <_> - 8 8 4 8 -1. - <_> - 9 9 2 8 2. - 1 - -0.0203843992203474 - 0.2677623927593231 - -0.0373038016259670 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 17 0 4 1 2. - 1 - -4.9205501563847065e-003 - -0.0874042734503746 - 0.0167930908501148 - <_> - - <_> - - - - <_> - 6 4 6 9 -1. - <_> - 8 7 2 3 9. - 0 - -0.0292923692613840 - -0.2326478064060211 - 0.0436552017927170 - <_> - - <_> - - - - <_> - 8 8 9 7 -1. - <_> - 11 8 3 7 3. - 0 - 0.0725465714931488 - -0.0364902690052986 - 0.2723152041435242 - <_> - - <_> - - - - <_> - 10 8 2 4 -1. - <_> - 10 8 2 2 2. - 1 - -3.7642000243067741e-003 - 0.1823145002126694 - -0.0716272965073586 - <_> - - <_> - - - - <_> - 10 8 3 6 -1. - <_> - 11 10 1 2 9. - 0 - -7.5870528817176819e-003 - -0.1008785963058472 - 0.0353172197937965 - <_> - - <_> - - - - <_> - 4 15 4 4 -1. - <_> - 4 15 2 2 2. - <_> - 6 17 2 2 2. - 0 - 1.8255389295518398e-004 - -0.0939937606453896 - 0.1011620014905930 - <_> - - <_> - - - - <_> - 13 4 4 4 -1. - <_> - 12 5 4 2 2. - 1 - 0.0323019102215767 - 7.2117331437766552e-003 - -0.3548626005649567 - <_> - - <_> - - - - <_> - 9 2 4 6 -1. - <_> - 9 4 4 2 3. - 0 - 0.0258929301053286 - -0.0372038893401623 - 0.2502770125865936 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 11 4 1 2 3. - 0 - 4.9849660135805607e-003 - 0.0239546708762646 - -0.3099892139434815 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 4 1 2 3. - 0 - 3.6892869975417852e-003 - 0.0367699302732944 - -0.2646284997463226 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 9 1 3 3. - 1 - 5.7481178082525730e-003 - -0.0416551306843758 - 0.1422546058893204 - <_> - - <_> - - - - <_> - 7 14 1 2 -1. - <_> - 7 14 1 1 2. - 1 - -8.9322368148714304e-004 - -0.1685795038938522 - 0.0550902597606182 - <_> - - <_> - - - - <_> - 12 8 3 3 -1. - <_> - 13 9 1 3 3. - 1 - -3.4081860212609172e-004 - 0.0396647192537785 - -0.0381792001426220 - <_> - - <_> - - - - <_> - 10 8 3 3 -1. - <_> - 9 9 3 1 3. - 1 - 7.7733430080115795e-003 - -0.0422981604933739 - 0.2419148981571198 - -1.1831159591674805 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 0 4 6 -1. - <_> - 7 0 2 3 2. - <_> - 9 3 2 3 2. - 0 - 5.8826277963817120e-003 - -0.2675273120403290 - 0.3730367124080658 - <_> - - <_> - - - - <_> - 6 18 10 2 -1. - <_> - 6 19 10 1 2. - 0 - -2.4791009491309524e-004 - 0.0785010531544685 - -0.0652772337198257 - <_> - - <_> - - - - <_> - 10 17 1 3 -1. - <_> - 10 18 1 1 3. - 0 - 0.0233476795256138 - 1.7821240180637687e-004 - -2.9028310546875000e+003 - <_> - - <_> - - - - <_> - 8 0 12 4 -1. - <_> - 14 0 6 2 2. - <_> - 8 2 6 2 2. - 0 - -0.0115824099630117 - 0.3008429110050201 - -0.1122511029243469 - <_> - - <_> - - - - <_> - 11 0 5 2 -1. - <_> - 11 0 5 1 2. - 1 - -7.4398629367351532e-003 - 0.3301422894001007 - -0.1445001065731049 - <_> - - <_> - - - - <_> - 14 14 7 2 -1. - <_> - 14 15 7 1 2. - 0 - -1.2356679653748870e-003 - 0.0995962694287300 - -0.0448849014937878 - <_> - - <_> - - - - <_> - 2 0 12 6 -1. - <_> - 2 0 6 3 2. - <_> - 8 3 6 3 2. - 0 - -0.0310983005911112 - 0.3472402095794678 - -0.0500898696482182 - <_> - - <_> - - - - <_> - 11 5 1 2 -1. - <_> - 11 6 1 1 2. - 0 - -8.6721731349825859e-005 - 0.1279385983943939 - -0.1305004060268402 - <_> - - <_> - - - - <_> - 8 7 4 6 -1. - <_> - 8 10 4 3 2. - 0 - 4.8631811514496803e-003 - 0.0915801003575325 - -0.2896300852298737 - <_> - - <_> - - - - <_> - 12 6 10 4 -1. - <_> - 12 6 10 2 2. - 1 - -0.0823284164071083 - 0.4864082932472229 - -8.5621501784771681e-004 - <_> - - <_> - - - - <_> - 3 18 3 1 -1. - <_> - 4 18 1 1 3. - 0 - 0.0268458202481270 - 8.0719226389192045e-005 - -2.7684570312500000e+003 - <_> - - <_> - - - - <_> - 8 2 12 18 -1. - <_> - 8 11 12 9 2. - 0 - -0.0520398095250130 - 0.0793963223695755 - -0.0580047108232975 - <_> - - <_> - - - - <_> - 10 6 4 10 -1. - <_> - 10 6 2 10 2. - 1 - -0.0696753710508347 - 0.4987396001815796 - -0.0373143106698990 - <_> - - <_> - - - - <_> - 4 1 14 4 -1. - <_> - 11 1 7 2 2. - <_> - 4 3 7 2 2. - 0 - -0.0227376893162727 - -0.4068807959556580 - 0.0427510291337967 - <_> - - <_> - - - - <_> - 2 1 18 9 -1. - <_> - 8 1 6 9 3. - 0 - -0.0538445301353931 - 0.1621432006359100 - -0.0971083194017410 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 7.2368777182418853e-005 - -0.1838538944721222 - 0.1015525013208389 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 9 7 2 1 2. - 0 - 2.3242140014190227e-004 - -0.1427734941244125 - 0.1225999966263771 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 8 2 1 2. - 0 - -4.3009149521822110e-005 - 0.1280446052551270 - -0.1254591047763825 - <_> - - <_> - - - - <_> - 0 13 12 7 -1. - <_> - 4 13 4 7 3. - 0 - -0.0278567709028721 - 0.1785857975482941 - -0.0847316309809685 - <_> - - <_> - - - - <_> - 12 0 4 1 -1. - <_> - 13 0 2 1 2. - 0 - -4.7926288098096848e-003 - -0.4375748038291931 - 0.0163025204092264 - <_> - - <_> - - - - <_> - 6 0 4 1 -1. - <_> - 7 0 2 1 2. - 0 - 1.3976480113342404e-003 - 0.0495155192911625 - -0.2880213856697083 - <_> - - <_> - - - - <_> - 14 6 4 12 -1. - <_> - 14 12 4 6 2. - 0 - 0.0144695499911904 - -0.0676347091794014 - 0.1359827071428299 - <_> - - <_> - - - - <_> - 4 17 2 2 -1. - <_> - 4 18 2 1 2. - 0 - -1.3993920219945721e-005 - 0.1096796989440918 - -0.1163211017847061 - <_> - - <_> - - - - <_> - 16 2 5 2 -1. - <_> - 16 3 5 1 2. - 0 - 3.3816839568316936e-003 - 0.0287957508116961 - -0.2408276945352554 - <_> - - <_> - - - - <_> - 3 0 15 6 -1. - <_> - 8 2 5 2 9. - 0 - 0.2558062970638275 - -0.0287046507000923 - 0.4660161137580872 - <_> - - <_> - - - - <_> - 9 6 5 3 -1. - <_> - 9 7 5 1 3. - 0 - -1.7578320112079382e-003 - 0.1510833054780960 - -0.0634596869349480 - <_> - - <_> - - - - <_> - 0 17 19 2 -1. - <_> - 0 18 19 1 2. - 0 - -8.2289418205618858e-003 - -0.2996680140495300 - 0.0433614514768124 - <_> - - <_> - - - - <_> - 18 15 1 2 -1. - <_> - 18 16 1 1 2. - 0 - -1.3895850315748248e-005 - 0.1062221974134445 - -0.1080453991889954 - <_> - - <_> - - - - <_> - 5 9 4 5 -1. - <_> - 6 10 2 5 2. - 1 - 5.4432791657745838e-003 - -0.0722699090838432 - 0.1668815016746521 - <_> - - <_> - - - - <_> - 3 6 18 2 -1. - <_> - 3 6 9 2 2. - 0 - 0.0366324000060558 - 0.0359354317188263 - -0.1974726021289825 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 10 7 2 2 9. - 0 - -0.0122313098981977 - -0.2623592019081116 - 0.0476102009415627 - <_> - - <_> - - - - <_> - 13 8 2 2 -1. - <_> - 13 8 1 2 2. - 1 - -0.0138060003519058 - 0.3029296100139618 - -4.8921317793428898e-003 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 9 8 2 1 2. - 1 - -1.2311399914324284e-003 - 0.1745906025171280 - -0.0683531463146210 - <_> - - <_> - - - - <_> - 10 9 6 10 -1. - <_> - 13 9 3 5 2. - <_> - 10 14 3 5 2. - 0 - -0.0260059200227261 - 0.1905090957880020 - -0.0461660213768482 - <_> - - <_> - - - - <_> - 2 9 6 8 -1. - <_> - 2 9 3 4 2. - <_> - 5 13 3 4 2. - 0 - 4.6127731911838055e-003 - -0.0833760872483253 - 0.1526211947202683 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - 5.7869260199368000e-003 - 7.0412610657513142e-003 - -0.7138695120811462 - <_> - - <_> - - - - <_> - 8 17 1 3 -1. - <_> - 8 18 1 1 3. - 0 - 6.7721348023042083e-004 - 0.0492670312523842 - -0.2489742040634155 - <_> - - <_> - - - - <_> - 12 11 7 3 -1. - <_> - 12 12 7 1 3. - 0 - -0.0227317698299885 - -0.5920349955558777 - 6.8012541159987450e-003 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - -7.6365371933206916e-004 - 0.1065258011221886 - -0.1059994995594025 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - -4.3849581852555275e-003 - 0.2341835945844650 - -0.0468676090240479 - <_> - - <_> - - - - <_> - 9 4 2 6 -1. - <_> - 9 7 2 3 2. - 0 - 3.9877369999885559e-003 - 0.0775564536452293 - -0.1815335005521774 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - 1.3219149550423026e-003 - -0.0676131173968315 - 0.1717159003019333 - <_> - - <_> - - - - <_> - 10 9 2 3 -1. - <_> - 10 10 2 1 3. - 0 - 6.7325757117941976e-004 - -0.0898267328739166 - 0.1402070969343185 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 16 1 2 2 2. - 0 - 9.2688068980351090e-004 - 0.0560859106481075 - -0.1854691058397293 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 1 2 2 2. - 0 - -1.5381709672510624e-003 - -0.2373339980840683 - 0.0488908588886261 - <_> - - <_> - - - - <_> - 11 1 4 4 -1. - <_> - 13 1 2 2 2. - <_> - 11 3 2 2 2. - 0 - 2.7073239907622337e-003 - -0.0751243829727173 - 0.0964071974158287 - <_> - - <_> - - - - <_> - 6 1 6 4 -1. - <_> - 6 1 3 2 2. - <_> - 9 3 3 2 2. - 0 - -2.8456549625843763e-003 - 0.2272288948297501 - -0.0720553770661354 - <_> - - <_> - - - - <_> - 10 1 2 3 -1. - <_> - 10 1 1 3 2. - 0 - 3.1373579986393452e-003 - 0.0368636511266232 - -0.3278087973594666 - <_> - - <_> - - - - <_> - 10 9 2 1 -1. - <_> - 10 9 1 1 2. - 1 - -3.7588209379464388e-003 - -0.4229508042335510 - 0.0236505307257175 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - 2.2759051062166691e-003 - -0.0549955591559410 - 0.1204935014247894 - <_> - - <_> - - - - <_> - 1 5 18 12 -1. - <_> - 7 9 6 4 9. - 0 - -0.1946942955255508 - -0.2432401031255722 - 0.0463316589593887 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - -9.6125272102653980e-004 - 0.1379798948764801 - -0.0920638069510460 - <_> - - <_> - - - - <_> - 5 1 12 12 -1. - <_> - 9 1 4 12 3. - 0 - -0.2052289992570877 - 0.4730313122272492 - -0.0221725106239319 - <_> - - <_> - - - - <_> - 8 3 6 11 -1. - <_> - 8 3 3 11 2. - 0 - -0.0686995312571526 - 0.3519163131713867 - -0.0286913607269526 - <_> - - <_> - - - - <_> - 9 0 3 5 -1. - <_> - 10 0 1 5 3. - 0 - -5.8615300804376602e-003 - -0.3611701130867004 - 0.0356137417256832 - <_> - - <_> - - - - <_> - 10 3 6 9 -1. - <_> - 12 6 2 3 9. - 0 - -0.0308238808065653 - -0.1548070013523102 - 0.0360303595662117 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - 6.5875430591404438e-003 - -0.0496180802583694 - 0.2278371006250382 - <_> - - <_> - - - - <_> - 3 1 18 8 -1. - <_> - 3 5 18 4 2. - 0 - 0.1785579025745392 - 0.0166440196335316 - -0.5230593085289002 - <_> - - <_> - - - - <_> - 5 0 1 2 -1. - <_> - 5 1 1 1 2. - 0 - 4.7204419388435781e-004 - 0.0431692190468311 - -0.2419106066226959 - <_> - - <_> - - - - <_> - 12 0 4 3 -1. - <_> - 11 1 4 1 3. - 1 - 0.0109382998198271 - -0.0346212014555931 - 0.2364511042833328 - <_> - - <_> - - - - <_> - 10 0 5 4 -1. - <_> - 10 0 5 2 2. - 1 - 2.6551820337772369e-004 - 0.1079739034175873 - -0.1406449973583221 - <_> - - <_> - - - - <_> - 12 0 4 3 -1. - <_> - 11 1 4 1 3. - 1 - -0.0183845702558756 - 0.2213944941759110 - -0.0265456903725863 - <_> - - <_> - - - - <_> - 10 10 2 1 -1. - <_> - 10 10 1 1 2. - 1 - 2.6976049412041903e-003 - 0.0441173389554024 - -0.2498563975095749 - <_> - - <_> - - - - <_> - 12 0 4 3 -1. - <_> - 11 1 4 1 3. - 1 - 0.0192139707505703 - -0.0142115997150540 - 0.2034156024456024 - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - 0.0187654905021191 - -0.0264146197587252 - 0.4224489927291870 - <_> - - <_> - - - - <_> - 13 3 3 3 -1. - <_> - 13 4 3 1 3. - 0 - -4.8726210370659828e-003 - -0.3153735101222992 - 0.0274170804768801 - <_> - - <_> - - - - <_> - 6 3 3 3 -1. - <_> - 6 4 3 1 3. - 0 - 6.8514510057866573e-003 - 0.0186858102679253 - -0.6005340218544006 - <_> - - <_> - - - - <_> - 10 4 6 9 -1. - <_> - 12 7 2 3 9. - 0 - 3.4302549902349710e-003 - 0.0555390492081642 - -0.0510632283985615 - <_> - - <_> - - - - <_> - 6 2 3 7 -1. - <_> - 7 2 1 7 3. - 0 - -5.1368698477745056e-003 - 0.1482364982366562 - -0.0760430470108986 - <_> - - <_> - - - - <_> - 7 0 15 3 -1. - <_> - 12 1 5 1 9. - 0 - 0.0405474901199341 - 0.0226830001920462 - -0.1468686014413834 - <_> - - <_> - - - - <_> - 6 4 6 9 -1. - <_> - 8 7 2 3 9. - 0 - -0.0306987706571817 - -0.2355591058731079 - 0.0429299883544445 - <_> - - <_> - - - - <_> - 14 9 2 6 -1. - <_> - 14 9 1 6 2. - 1 - -4.8826341517269611e-003 - 0.1082136034965515 - -0.0402585305273533 - <_> - - <_> - - - - <_> - 8 13 4 2 -1. - <_> - 10 13 2 2 2. - 0 - -1.1315810261294246e-003 - 0.1330590993165970 - -0.0767586529254913 - <_> - - <_> - - - - <_> - 11 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 11 12 1 1 2. - 0 - 1.0131190065294504e-003 - -0.0428567714989185 - 0.2208255976438522 - <_> - - <_> - - - - <_> - 11 7 2 3 -1. - <_> - 11 7 1 3 2. - 1 - 4.5927320607006550e-003 - 0.0496400594711304 - -0.2326525002717972 - <_> - - <_> - - - - <_> - 18 16 1 4 -1. - <_> - 18 18 1 2 2. - 0 - -1.4334080333355814e-005 - 0.0860820114612579 - -0.1004189997911453 - <_> - - <_> - - - - <_> - 7 13 2 1 -1. - <_> - 8 13 1 1 2. - 0 - -4.3432948586996645e-005 - 0.1028202995657921 - -0.0946492105722427 - <_> - - <_> - - - - <_> - 12 13 6 1 -1. - <_> - 14 13 2 1 3. - 0 - -2.2497640457004309e-003 - 0.1031557023525238 - -0.0418889783322811 - <_> - - <_> - - - - <_> - 4 13 6 1 -1. - <_> - 6 13 2 1 3. - 0 - -6.4464588649570942e-004 - 0.1162943020462990 - -0.0854857489466667 - <_> - - <_> - - - - <_> - 7 0 15 3 -1. - <_> - 12 1 5 1 9. - 0 - -0.0146396402269602 - -0.0828757435083389 - 0.0406665913760662 - <_> - - <_> - - - - <_> - 0 0 15 3 -1. - <_> - 5 1 5 1 9. - 0 - -0.0252171400934458 - -0.2057131975889206 - 0.0561926588416100 - <_> - - <_> - - - - <_> - 14 0 4 3 -1. - <_> - 13 1 4 1 3. - 1 - 0.0101231997832656 - -0.0421519614756107 - 0.2970798909664154 - <_> - - <_> - - - - <_> - 6 0 7 4 -1. - <_> - 6 1 7 2 2. - 0 - -1.9428769592195749e-003 - 0.1110576018691063 - -0.0956824198365211 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - -1.5970990061759949e-003 - -0.1875156015157700 - 0.0260986592620611 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 10 9 1 1 2. - 0 - -4.1399329347768798e-005 - 0.1021045967936516 - -0.0955331698060036 - <_> - - <_> - - - - <_> - 1 14 20 3 -1. - <_> - 1 15 20 1 3. - 0 - -0.0127402897924185 - -0.3007934093475342 - 0.0309581998735666 - <_> - - <_> - - - - <_> - 0 18 6 2 -1. - <_> - 2 18 2 2 3. - 0 - -1.0377629660069942e-003 - 0.1188953965902329 - -0.0833392590284348 - <_> - - <_> - - - - <_> - 15 16 6 4 -1. - <_> - 17 16 2 4 3. - 0 - 7.3452817741781473e-004 - -0.0455793403089046 - 0.0653328672051430 - <_> - - <_> - - - - <_> - 1 16 6 4 -1. - <_> - 3 16 2 4 3. - 0 - 2.1210229024291039e-003 - -0.0776476413011551 - 0.1355203986167908 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - -3.9646559162065387e-004 - -0.1303946971893311 - 0.0442217811942101 - <_> - - <_> - - - - <_> - 3 8 16 10 -1. - <_> - 3 13 16 5 2. - 0 - -0.0290114805102348 - 0.1091156005859375 - -0.0868529826402664 - <_> - - <_> - - - - <_> - 12 12 1 2 -1. - <_> - 12 13 1 1 2. - 0 - 2.8868720619357191e-005 - -0.0972230732440948 - 0.1093911007046700 - <_> - - <_> - - - - <_> - 9 12 1 2 -1. - <_> - 9 13 1 1 2. - 0 - 4.4219941628398374e-005 - -0.0966265872120857 - 0.1039673015475273 - <_> - - <_> - - - - <_> - 9 12 4 3 -1. - <_> - 9 13 4 1 3. - 0 - -2.1061650477349758e-003 - 0.1559444963932037 - -0.0693883821368217 - <_> - - <_> - - - - <_> - 3 6 4 2 -1. - <_> - 3 6 2 1 2. - <_> - 5 7 2 1 2. - 0 - -1.3419709866866469e-003 - -0.2355991005897522 - 0.0438526310026646 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - 5.4303952492773533e-004 - 0.0376529209315777 - -0.1470025032758713 - <_> - - <_> - - - - <_> - 9 15 1 4 -1. - <_> - 9 17 1 2 2. - 0 - 1.9228000019211322e-004 - -0.0859587863087654 - 0.1148663014173508 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - 6.4260498620569706e-003 - 0.0300038997083902 - -0.2626453936100006 - <_> - - <_> - - - - <_> - 11 0 4 5 -1. - <_> - 12 1 2 5 2. - 1 - 0.0178574491292238 - -0.0383921787142754 - 0.2549147009849548 - <_> - - <_> - - - - <_> - 11 5 2 2 -1. - <_> - 11 5 2 1 2. - 1 - 0.0143460398539901 - 8.1513654440641403e-003 - -0.6636884212493897 - <_> - - <_> - - - - <_> - 10 1 4 3 -1. - <_> - 11 2 2 3 2. - 1 - -0.0156169896945357 - 0.2735700905323029 - -0.0391043610870838 - <_> - - <_> - - - - <_> - 8 2 6 6 -1. - <_> - 11 2 3 3 2. - <_> - 8 5 3 3 2. - 0 - 0.0274348091334105 - 0.0189590007066727 - -0.5542492270469666 - <_> - - <_> - - - - <_> - 8 18 1 2 -1. - <_> - 8 19 1 1 2. - 0 - 5.8466667542234063e-004 - 0.0379403606057167 - -0.2236526012420654 - <_> - - <_> - - - - <_> - 9 10 7 3 -1. - <_> - 9 11 7 1 3. - 0 - -6.7438739351928234e-003 - 0.1305554062128067 - -0.0271279606968164 - <_> - - <_> - - - - <_> - 9 3 2 6 -1. - <_> - 10 3 1 6 2. - 0 - 2.8279089747229591e-005 - -0.1174881011247635 - 0.0737703368067741 - <_> - - <_> - - - - <_> - 3 15 17 2 -1. - <_> - 3 16 17 1 2. - 0 - -0.0258573908358812 - -0.7185956239700317 - 0.0106672495603561 - <_> - - <_> - - - - <_> - 4 13 1 2 -1. - <_> - 4 14 1 1 2. - 0 - -1.4455829841608647e-005 - 0.0888259187340736 - -0.0965608134865761 - <_> - - <_> - - - - <_> - 12 8 1 2 -1. - <_> - 12 9 1 1 2. - 0 - -2.8761640351149254e-005 - 0.0712249726057053 - -0.0815362930297852 - <_> - - <_> - - - - <_> - 8 4 4 11 -1. - <_> - 10 4 2 11 2. - 0 - -0.0446761511266232 - 0.4655976891517639 - -0.0182184204459190 - <_> - - <_> - - - - <_> - 18 10 2 4 -1. - <_> - 18 10 1 4 2. - 1 - -0.0174739398062229 - -0.2589420080184937 - 9.1081187129020691e-003 - <_> - - <_> - - - - <_> - 4 10 4 2 -1. - <_> - 4 10 4 1 2. - 1 - 0.0117524601519108 - 0.0238668192178011 - -0.3638462126255035 - <_> - - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 14 11 1 1 2. - <_> - 13 12 1 1 2. - 0 - -1.9191680476069450e-003 - 0.2519066929817200 - -0.0306519605219364 - <_> - - <_> - - - - <_> - 2 6 15 12 -1. - <_> - 7 10 5 4 9. - 0 - -0.1080946996808052 - -0.1567361056804657 - 0.0571251213550568 - <_> - - <_> - - - - <_> - 12 10 4 3 -1. - <_> - 12 11 4 1 3. - 0 - -0.0200074408203363 - -0.6976168751716614 - 2.1351710893213749e-003 - <_> - - <_> - - - - <_> - 6 10 4 3 -1. - <_> - 6 11 4 1 3. - 0 - -9.3738699797540903e-004 - 0.1202720999717712 - -0.0827307403087616 - <_> - - <_> - - - - <_> - 7 4 12 15 -1. - <_> - 11 4 4 15 3. - 0 - -0.0197259802371264 - 0.0651034265756607 - -0.0431048683822155 - <_> - - <_> - - - - <_> - 5 5 8 13 -1. - <_> - 7 5 4 13 2. - 0 - -0.0159657094627619 - 0.1442113965749741 - -0.0770616903901100 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 15 0 2 1 2. - 0 - 3.1250261235982180e-004 - 0.0343938209116459 - -0.0807022973895073 - <_> - - <_> - - - - <_> - 4 0 4 1 -1. - <_> - 5 0 2 1 2. - 0 - 1.4896600041538477e-003 - 0.0351835489273071 - -0.2588649988174439 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - -5.3775031119585037e-004 - 0.1162061020731926 - -0.0636111870408058 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - 2.0904899574816227e-003 - -0.0411866009235382 - 0.2230055034160614 - <_> - - <_> - - - - <_> - 9 7 4 4 -1. - <_> - 11 7 2 2 2. - <_> - 9 9 2 2 2. - 0 - 2.9691499657928944e-003 - 0.0482693091034889 - -0.2033527940511704 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 11 6 1 2 2. - 0 - 1.4572769941878505e-005 - -0.0989575535058975 - 0.0930419564247131 - <_> - - <_> - - - - <_> - 10 4 2 2 -1. - <_> - 11 4 1 1 2. - <_> - 10 5 1 1 2. - 0 - -3.1554070301353931e-003 - -0.6676012277603149 - 0.0135200796648860 - <_> - - <_> - - - - <_> - 8 4 3 1 -1. - <_> - 9 4 1 1 3. - 0 - 2.9881219234084710e-005 - -0.1035604029893875 - 0.0860934033989906 - -1.0558769702911377 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 2 6 6 -1. - <_> - 10 4 2 2 9. - 0 - 0.0491291098296642 - -0.1561374962329865 - 0.3932853043079376 - <_> - - <_> - - - - <_> - 5 2 12 2 -1. - <_> - 8 2 6 2 2. - 0 - -0.0172863602638245 - 0.3020491898059845 - -0.0975653305649757 - <_> - - <_> - - - - <_> - 0 0 6 6 -1. - <_> - 0 3 6 3 2. - 0 - 0.1704691052436829 - 2.3067509755492210e-003 - -1.9497540283203125e+003 - <_> - - <_> - - - - <_> - 5 1 12 8 -1. - <_> - 8 1 6 8 2. - 0 - 0.0887033864855766 - -0.0749171376228333 - 0.2831664979457855 - <_> - - <_> - - - - <_> - 0 0 3 5 -1. - <_> - 1 0 1 5 3. - 0 - 0.0654915422201157 - 1.6591310268267989e-003 - -2.0010880126953125e+003 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 7 6 2 2. - 0 - 1.3477590400725603e-003 - -0.1620326936244965 - 0.1084320992231369 - <_> - - <_> - - - - <_> - 5 0 11 4 -1. - <_> - 5 2 11 2 2. - 0 - -0.0127406204119325 - 0.1757448017597199 - -0.0932447686791420 - <_> - - <_> - - - - <_> - 10 4 4 6 -1. - <_> - 12 4 2 3 2. - <_> - 10 7 2 3 2. - 0 - -5.6134728947654366e-004 - 0.1145535036921501 - -0.1735402047634125 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 9 4 2 3 2. - <_> - 11 7 2 3 2. - 0 - 3.5389710683375597e-003 - 0.1171715036034584 - -0.2097637951374054 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 12 5 1 3 3. - 1 - 0.0247361399233341 - 0.0163648799061775 - -0.4725561141967773 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 10 5 3 1 3. - 1 - -0.0106510501354933 - -0.4548909068107605 - 0.0319395288825035 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 0.0175598897039890 - -0.0483626686036587 - 0.3206248879432678 - <_> - - <_> - - - - <_> - 3 7 2 1 -1. - <_> - 4 7 1 1 2. - 0 - -6.6924717975780368e-004 - -0.2463971972465515 - 0.0579358190298080 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 1 2. - <_> - 12 6 1 1 2. - 0 - -5.8407627511769533e-004 - 0.1120434030890465 - -0.0987447872757912 - <_> - - <_> - - - - <_> - 2 4 4 4 -1. - <_> - 2 4 2 2 2. - <_> - 4 6 2 2 2. - 0 - 3.7473749835044146e-003 - 0.0628221631050110 - -0.2691569030284882 - <_> - - <_> - - - - <_> - 13 4 3 5 -1. - <_> - 14 4 1 5 3. - 0 - -5.7835220359265804e-003 - 0.1772509068250656 - -0.1072299033403397 - <_> - - <_> - - - - <_> - 9 5 4 6 -1. - <_> - 9 8 4 3 2. - 0 - -0.0139944702386856 - -0.3229129016399384 - 0.0591331608593464 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -5.0094961188733578e-003 - 0.3241341114044190 - -0.0469461902976036 - <_> - - <_> - - - - <_> - 1 4 8 8 -1. - <_> - 3 4 4 8 2. - 0 - 0.2097467929124832 - 1.2724619591608644e-003 - -1.5398029785156250e+003 - <_> - - <_> - - - - <_> - 2 5 18 14 -1. - <_> - 2 12 18 7 2. - 0 - -0.2300280034542084 - 0.2434650063514710 - -0.0520763397216797 - <_> - - <_> - - - - <_> - 3 9 15 10 -1. - <_> - 3 14 15 5 2. - 0 - 0.1549279987812042 - -0.0382566489279270 - 0.3839800953865051 - <_> - - <_> - - - - <_> - 17 1 2 1 -1. - <_> - 17 1 1 1 2. - 1 - -1.6321489820256829e-003 - -0.2689873874187470 - 0.0514754094183445 - <_> - - <_> - - - - <_> - 0 14 20 1 -1. - <_> - 5 14 10 1 2. - 0 - 0.0711399763822556 - -1.7741069896146655e-003 - -3.6228640136718750e+003 - <_> - - <_> - - - - <_> - 17 1 2 1 -1. - <_> - 17 1 1 1 2. - 1 - 1.1452710023149848e-003 - 0.0600548200309277 - -0.2297728955745697 - <_> - - <_> - - - - <_> - 8 5 2 2 -1. - <_> - 8 5 1 1 2. - <_> - 9 6 1 1 2. - 0 - -4.5410130405798554e-004 - 0.1281362026929855 - -0.1009076014161110 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 10 1 1 2. - 0 - -1.4720089893671684e-005 - 0.1032200008630753 - -0.1264183074235916 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 11 0 1 1 2. - 0 - -1.1304479558020830e-003 - -0.3193599879741669 - 0.0347232185304165 - <_> - - <_> - - - - <_> - 14 14 8 6 -1. - <_> - 14 14 4 6 2. - 0 - -0.0169223193079233 - 0.1395736038684845 - -0.0515430793166161 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 8 9 3 1 2. - <_> - 11 10 3 1 2. - 0 - -2.3215101100504398e-003 - -0.2389529049396515 - 0.0476681999862194 - <_> - - <_> - - - - <_> - 13 4 3 5 -1. - <_> - 14 4 1 5 3. - 0 - 3.7084489595144987e-003 - -0.0658250674605370 - 0.2275764048099518 - <_> - - <_> - - - - <_> - 3 2 2 3 -1. - <_> - 4 2 1 3 2. - 0 - 1.0309210047125816e-003 - 0.0512789487838745 - -0.1925736963748932 - <_> - - <_> - - - - <_> - 13 3 4 2 -1. - <_> - 13 3 2 2 2. - 0 - -1.5648710541427135e-003 - 0.0896341875195503 - -0.0735850781202316 - <_> - - <_> - - - - <_> - 6 6 4 6 -1. - <_> - 7 6 2 6 2. - 0 - -4.1427151300013065e-003 - 0.1304855048656464 - -0.0843951106071472 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 10 0 2 10 2. - 0 - 0.0261134095489979 - 0.0221527405083179 - -0.5338773131370544 - <_> - - <_> - - - - <_> - 9 8 1 2 -1. - <_> - 9 9 1 1 2. - 0 - -2.8209320589667186e-005 - 0.0882203429937363 - -0.1184448003768921 - <_> - - <_> - - - - <_> - 4 0 18 18 -1. - <_> - 4 0 9 18 2. - 0 - -0.1884635984897614 - -0.1483291983604431 - 0.0275753792375326 - <_> - - <_> - - - - <_> - 9 7 1 3 -1. - <_> - 9 8 1 1 3. - 0 - -3.1241099350154400e-004 - 0.1532350927591324 - -0.0678580328822136 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 8 4 1 2. - 0 - 1.1768529657274485e-003 - -0.0881875678896904 - 0.1461451053619385 - <_> - - <_> - - - - <_> - 11 4 4 5 -1. - <_> - 12 5 2 5 2. - 1 - -8.1158941611647606e-003 - -0.2593370079994202 - 0.0401612408459187 - <_> - - <_> - - - - <_> - 11 8 1 4 -1. - <_> - 11 10 1 2 2. - 0 - -2.1158249583095312e-003 - -0.1295143961906433 - 0.0376220308244228 - <_> - - <_> - - - - <_> - 0 15 8 5 -1. - <_> - 4 15 4 5 2. - 0 - -0.0166895892471075 - 0.1623011976480484 - -0.0640938207507133 - <_> - - <_> - - - - <_> - 12 17 10 3 -1. - <_> - 12 17 5 3 2. - 0 - 3.5482600796967745e-003 - -0.0796670168638229 - 0.1127301976084709 - <_> - - <_> - - - - <_> - 0 12 1 2 -1. - <_> - 0 13 1 1 2. - 0 - 5.6378880981355906e-004 - 0.0500508695840836 - -0.2288206964731216 - <_> - - <_> - - - - <_> - 10 0 3 1 -1. - <_> - 11 0 1 1 3. - 0 - 7.8708422370254993e-004 - 0.0361623615026474 - -0.1507268995046616 - <_> - - <_> - - - - <_> - 0 17 8 3 -1. - <_> - 4 17 4 3 2. - 0 - 7.2509991005063057e-003 - -0.0623016692698002 - 0.1649259030818939 - <_> - - <_> - - - - <_> - 16 16 1 2 -1. - <_> - 16 17 1 1 2. - 0 - 6.6566158784553409e-004 - 0.0377932414412498 - -0.2119169980287552 - <_> - - <_> - - - - <_> - 0 0 18 18 -1. - <_> - 9 0 9 18 2. - 0 - 0.5804743170738220 - 0.0109524801373482 - -0.8081377148628235 - <_> - - <_> - - - - <_> - 8 3 6 12 -1. - <_> - 8 3 3 12 2. - 0 - -0.0791050717234612 - 0.3639448881149292 - -0.0306098293513060 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 8 1 1 3. - 0 - 5.6401832262054086e-004 - -0.0661079809069633 - 0.1477486044168472 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - -9.1791141312569380e-004 - 0.0998616293072701 - -0.0567335113883018 - <_> - - <_> - - - - <_> - 5 16 1 2 -1. - <_> - 5 17 1 1 2. - 0 - 5.6301942095160484e-004 - 0.0467893816530705 - -0.2421973943710327 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - 8.3375308895483613e-004 - -0.0537605583667755 - 0.1365087032318115 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 8 1 1 3. - 0 - -3.1824249308556318e-003 - 0.2526057064533234 - -0.0417674109339714 - <_> - - <_> - - - - <_> - 6 3 10 2 -1. - <_> - 11 3 5 1 2. - <_> - 6 4 5 1 2. - 0 - -7.2406530380249023e-003 - -0.3458428084850311 - 0.0322350896894932 - <_> - - <_> - - - - <_> - 9 0 3 6 -1. - <_> - 10 0 1 6 3. - 0 - -8.3251204341650009e-003 - -0.4130955040454865 - 0.0216233208775520 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 13 1 2 1 3. - 1 - 0.0133094396442175 - -0.0232308898121119 - 0.3745413124561310 - <_> - - <_> - - - - <_> - 0 2 20 6 -1. - <_> - 0 2 10 3 2. - <_> - 10 5 10 3 2. - 0 - -0.0232595708221197 - -0.2135006040334702 - 0.0452404618263245 - <_> - - <_> - - - - <_> - 9 2 4 4 -1. - <_> - 9 3 4 2 2. - 0 - 0.0115224700421095 - -0.0377001315355301 - 0.2987278997898102 - <_> - - <_> - - - - <_> - 0 12 20 3 -1. - <_> - 0 13 20 1 3. - 0 - -0.0256795994937420 - -0.4919328093528748 - 0.0207600891590118 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 13 1 2 1 3. - 1 - -4.0818247944116592e-003 - 0.0983204469084740 - -0.0592925585806370 - <_> - - <_> - - - - <_> - 8 3 6 3 -1. - <_> - 10 4 2 1 9. - 0 - 0.0138231702148914 - 0.0804206803441048 - -0.1479638963937759 - <_> - - <_> - - - - <_> - 10 4 4 2 -1. - <_> - 12 4 2 1 2. - <_> - 10 5 2 1 2. - 0 - -1.4133610420685727e-005 - 0.0721544176340103 - -0.0784070119261742 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 9 1 1 2 3. - 1 - 0.0137496301904321 - -0.0257189404219389 - 0.3519011139869690 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 1 - -4.7446079552173615e-003 - -0.2991796135902405 - 0.0161139704287052 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - -6.0454257763922215e-003 - -0.5365071296691895 - 0.0167921297252178 - <_> - - <_> - - - - <_> - 9 4 6 4 -1. - <_> - 12 4 3 2 2. - <_> - 9 6 3 2 2. - 0 - -0.0288238301873207 - -0.6879510879516602 - 3.6530119832605124e-003 - <_> - - <_> - - - - <_> - 8 4 6 3 -1. - <_> - 8 5 6 1 3. - 0 - 9.7567550837993622e-003 - -0.0389709211885929 - 0.2409314960241318 - <_> - - <_> - - - - <_> - 13 5 3 2 -1. - <_> - 13 6 3 1 2. - 0 - 5.4871398024260998e-003 - 0.0141169801354408 - -0.2580494880676270 - <_> - - <_> - - - - <_> - 6 5 3 2 -1. - <_> - 6 6 3 1 2. - 0 - -1.2061520246788859e-003 - -0.1920727044343948 - 0.0495003797113895 - <_> - - <_> - - - - <_> - 12 0 5 3 -1. - <_> - 11 1 5 1 3. - 1 - 9.8257837817072868e-003 - -0.0385854989290237 - 0.2269767969846726 - <_> - - <_> - - - - <_> - 0 2 19 12 -1. - <_> - 0 5 19 6 2. - 0 - 0.2201866954565048 - 0.0127775100991130 - -0.7536318898200989 - <_> - - <_> - - - - <_> - 6 4 15 16 -1. - <_> - 6 12 15 8 2. - 0 - -0.0455280095338821 - 0.1083147972822189 - -0.0882676467299461 - <_> - - <_> - - - - <_> - 9 13 4 2 -1. - <_> - 9 14 4 1 2. - 0 - 8.6856030975468457e-005 - -0.1028465032577515 - 0.0993604883551598 - <_> - - <_> - - - - <_> - 14 8 8 4 -1. - <_> - 14 8 8 2 2. - 1 - -0.0565851703286171 - 0.2391014993190765 - -0.0237362496554852 - <_> - - <_> - - - - <_> - 3 16 4 4 -1. - <_> - 3 17 4 2 2. - 0 - -3.1276450026780367e-003 - -0.2272775024175644 - 0.0387688502669334 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 9 6 4 1 3. - 0 - 3.9087659679353237e-003 - -0.0391923412680626 - 0.2408719062805176 - <_> - - <_> - - - - <_> - 11 4 2 3 -1. - <_> - 10 5 2 1 3. - 1 - 7.8154838411137462e-004 - 0.0745629817247391 - -0.1290518045425415 - <_> - - <_> - - - - <_> - 14 1 3 8 -1. - <_> - 15 2 1 8 3. - 1 - -2.4408260360360146e-003 - -0.0910204425454140 - 0.0392515212297440 - <_> - - <_> - - - - <_> - 7 1 2 6 -1. - <_> - 7 1 1 3 2. - <_> - 8 4 1 3 2. - 0 - 2.8101990465074778e-003 - -0.0648370385169983 - 0.1392538994550705 - <_> - - <_> - - - - <_> - 12 0 5 3 -1. - <_> - 11 1 5 1 3. - 1 - -3.9855740033090115e-003 - 0.0918173715472221 - -0.0830311179161072 - <_> - - <_> - - - - <_> - 3 0 10 8 -1. - <_> - 3 0 5 4 2. - <_> - 8 4 5 4 2. - 0 - -0.0172977894544601 - 0.2096557021141052 - -0.0521949790418148 - <_> - - <_> - - - - <_> - 15 0 3 9 -1. - <_> - 16 1 1 9 3. - 1 - -0.0322477482259274 - -0.4582394063472748 - 8.3728311583399773e-003 - <_> - - <_> - - - - <_> - 7 0 9 3 -1. - <_> - 6 1 9 1 3. - 1 - -6.8068369291722775e-003 - -0.2019720971584320 - 0.0556313209235668 - <_> - - <_> - - - - <_> - 10 3 2 4 -1. - <_> - 10 5 2 2 2. - 0 - -1.0506629478186369e-003 - 0.1320981979370117 - -0.0768856704235077 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - 3.7760898703709245e-004 - 0.0461616106331348 - -0.1969414055347443 - <_> - - <_> - - - - <_> - 20 2 2 4 -1. - <_> - 21 2 1 2 2. - <_> - 20 4 1 2 2. - 0 - -5.7537568500265479e-004 - -0.1071737036108971 - 0.0362402983009815 - <_> - - <_> - - - - <_> - 10 1 1 6 -1. - <_> - 10 4 1 3 2. - 0 - 7.4092741124331951e-004 - -0.1047587022185326 - 0.0809786766767502 - <_> - - <_> - - - - <_> - 14 8 2 2 -1. - <_> - 15 8 1 1 2. - <_> - 14 9 1 1 2. - 0 - 1.4430390438064933e-003 - -0.0203307196497917 - 0.1477313041687012 - <_> - - <_> - - - - <_> - 8 9 2 2 -1. - <_> - 8 10 2 1 2. - 0 - -4.0292008779942989e-003 - -0.4060789048671722 - 0.0223583597689867 - <_> - - <_> - - - - <_> - 1 15 20 3 -1. - <_> - 6 15 10 3 2. - 0 - -0.0271806307137012 - 0.1710847020149231 - -0.0552556887269020 - <_> - - <_> - - - - <_> - 1 17 7 2 -1. - <_> - 1 18 7 1 2. - 0 - -0.0119564197957516 - -0.7186712026596069 - 0.0130945695564151 - <_> - - <_> - - - - <_> - 20 2 2 4 -1. - <_> - 21 2 1 2 2. - <_> - 20 4 1 2 2. - 0 - 4.1116480133496225e-004 - 0.0481534600257874 - -0.1243325993418694 - <_> - - <_> - - - - <_> - 0 12 2 2 -1. - <_> - 0 12 1 1 2. - <_> - 1 13 1 1 2. - 0 - -1.3963999663246796e-005 - 0.1029293984174728 - -0.0869583114981651 - <_> - - <_> - - - - <_> - 19 17 1 2 -1. - <_> - 19 18 1 1 2. - 0 - -1.4570109669875819e-005 - 0.0744701474905014 - -0.0704705417156219 - <_> - - <_> - - - - <_> - 10 0 3 5 -1. - <_> - 11 1 1 5 3. - 1 - 0.0171391908079386 - -0.0261726304888725 - 0.3308500945568085 - <_> - - <_> - - - - <_> - 18 17 2 2 -1. - <_> - 18 18 2 1 2. - 0 - -1.6302539734169841e-003 - -0.2391628026962280 - 0.0358716994524002 - <_> - - <_> - - - - <_> - 2 17 1 2 -1. - <_> - 2 18 1 1 2. - 0 - -1.4535409718519077e-005 - 0.0969021767377853 - -0.0920610874891281 - <_> - - <_> - - - - <_> - 14 8 8 4 -1. - <_> - 14 8 8 2 2. - 1 - -0.0215660408139229 - 0.0789621323347092 - -0.0253362096846104 - <_> - - <_> - - - - <_> - 0 2 22 15 -1. - <_> - 11 2 11 15 2. - 0 - -0.3645570874214172 - -0.3550829887390137 - 0.0256311092525721 - <_> - - <_> - - - - <_> - 13 3 4 2 -1. - <_> - 13 3 2 2 2. - 0 - 0.0245886500924826 - -4.8407679423689842e-003 - 0.3994390070438385 - <_> - - <_> - - - - <_> - 5 3 4 2 -1. - <_> - 7 3 2 2 2. - 0 - -7.7711517224088311e-004 - 0.0972019731998444 - -0.0957432314753532 - <_> - - <_> - - - - <_> - 4 2 16 4 -1. - <_> - 8 2 8 4 2. - 0 - 0.0218967702239752 - -0.0452991686761379 - 0.1075690016150475 - <_> - - <_> - - - - <_> - 8 18 4 1 -1. - <_> - 10 18 2 1 2. - 0 - -4.4443400838645175e-005 - 0.1013159975409508 - -0.0888435319066048 - <_> - - <_> - - - - <_> - 20 2 2 4 -1. - <_> - 21 2 1 2 2. - <_> - 20 4 1 2 2. - 0 - -7.6723480597138405e-003 - -0.4573858082294464 - 4.6079889871180058e-003 - <_> - - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - -1.4039639609109145e-005 - 0.0984160676598549 - -0.0875535979866982 - <_> - - <_> - - - - <_> - 20 2 2 4 -1. - <_> - 21 2 1 2 2. - <_> - 20 4 1 2 2. - 0 - 8.6473729461431503e-003 - 3.3540779259055853e-003 - -0.4177199900150299 - <_> - - <_> - - - - <_> - 1 12 2 2 -1. - <_> - 1 12 1 1 2. - <_> - 2 13 1 1 2. - 0 - -1.3825670066580642e-005 - 0.0998570173978806 - -0.0856943875551224 - <_> - - <_> - - - - <_> - 20 2 2 4 -1. - <_> - 21 2 1 2 2. - <_> - 20 4 1 2 2. - 0 - -2.6278168661519885e-004 - -0.0561131089925766 - 0.0273464899510145 - <_> - - <_> - - - - <_> - 0 2 2 4 -1. - <_> - 0 2 1 2 2. - <_> - 1 4 1 2 2. - 0 - -7.9181697219610214e-004 - -0.1811832040548325 - 0.0474297702312469 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -1.4099719701334834e-003 - 0.2745879888534546 - -0.0514848083257675 - <_> - - <_> - - - - <_> - 5 1 11 8 -1. - <_> - 5 3 11 4 2. - 0 - 0.0707035735249519 - 0.0154734198004007 - -0.5770652890205383 - <_> - - <_> - - - - <_> - 16 10 3 2 -1. - <_> - 17 11 1 2 3. - 1 - 0.0201893392950296 - 3.1696720980107784e-003 - -0.4830755889415741 - <_> - - <_> - - - - <_> - 8 9 4 7 -1. - <_> - 9 10 2 7 2. - 1 - -0.0212236605584621 - 0.2465700060129166 - -0.0328861288726330 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - -3.0176939908415079e-003 - -0.2452419996261597 - 9.7305262461304665e-003 - <_> - - <_> - - - - <_> - 7 9 4 7 -1. - <_> - 7 9 2 7 2. - 1 - -0.0460385493934155 - 0.2714579999446869 - -0.0308964792639017 - <_> - - <_> - - - - <_> - 6 5 10 4 -1. - <_> - 11 5 5 2 2. - <_> - 6 7 5 2 2. - 0 - 3.5309030208736658e-003 - 0.0639805123209953 - -0.1388819068670273 - <_> - - <_> - - - - <_> - 5 5 8 3 -1. - <_> - 5 6 8 1 3. - 0 - -1.6515320166945457e-003 - 0.0957191884517670 - -0.0879030972719193 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - 4.9779191613197327e-003 - 4.1744681075215340e-003 - -0.5408412814140320 - <_> - - <_> - - - - <_> - 6 3 6 9 -1. - <_> - 8 6 2 3 9. - 0 - -0.0267042201012373 - -0.1762084066867828 - 0.0477740094065666 - <_> - - <_> - - - - <_> - 5 8 12 5 -1. - <_> - 9 8 4 5 3. - 0 - -0.0195968002080917 - 0.1471294015645981 - -0.0637876018881798 - <_> - - <_> - - - - <_> - 9 5 4 6 -1. - <_> - 10 5 2 6 2. - 0 - -3.7246679421514273e-003 - -0.2385219037532806 - 0.0447404608130455 - <_> - - <_> - - - - <_> - 14 6 3 5 -1. - <_> - 15 7 1 5 3. - 1 - 0.0115394303575158 - -0.0220726002007723 - 0.1152592003345490 - <_> - - <_> - - - - <_> - 8 17 1 3 -1. - <_> - 8 18 1 1 3. - 0 - 4.7176578664220870e-004 - 0.0471278317272663 - -0.1814745068550110 - <_> - - <_> - - - - <_> - 9 6 5 3 -1. - <_> - 9 7 5 1 3. - 0 - -1.9762469455599785e-003 - 0.1374807059764862 - -0.0590927787125111 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - 5.5772662162780762e-003 - -0.0450199581682682 - 0.2103448957204819 - <_> - - <_> - - - - <_> - 16 10 3 2 -1. - <_> - 17 11 1 2 3. - 1 - -0.0201573893427849 - -0.5749697089195252 - 5.7354308664798737e-003 - <_> - - <_> - - - - <_> - 6 10 2 3 -1. - <_> - 5 11 2 1 3. - 1 - 0.0173071101307869 - 0.0111907199025154 - -0.7170798182487488 - <_> - - <_> - - - - <_> - 17 14 3 4 -1. - <_> - 17 16 3 2 2. - 0 - -4.8755120951682329e-004 - 0.0503945909440517 - -0.0486664809286594 - <_> - - <_> - - - - <_> - 5 10 7 4 -1. - <_> - 5 11 7 2 2. - 0 - -0.0265115592628717 - -0.8947893977165222 - 9.4358548521995544e-003 - <_> - - <_> - - - - <_> - 13 7 1 4 -1. - <_> - 12 8 1 2 2. - 1 - -2.2744829766452312e-003 - -0.1289436966180801 - 0.0224403496831656 - <_> - - <_> - - - - <_> - 9 11 4 1 -1. - <_> - 10 11 2 1 2. - 0 - -5.0057587213814259e-004 - 0.1437755972146988 - -0.0715989023447037 - <_> - - <_> - - - - <_> - 12 8 3 5 -1. - <_> - 13 9 1 5 3. - 1 - 6.6602397710084915e-003 - -0.0232074391096830 - 0.0713639035820961 - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 8 7 3 2 2. - <_> - 11 9 3 2 2. - 0 - 3.1885830685496330e-003 - 0.0580109804868698 - -0.1645087003707886 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - 5.7782739168033004e-004 - -0.0434856005012989 - 0.1338324993848801 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -6.0897087678313255e-004 - 0.1478766053915024 - -0.0624955296516418 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -1.6388659423682839e-004 - 0.0933259725570679 - -0.0765543207526207 - <_> - - <_> - - - - <_> - 4 0 2 3 -1. - <_> - 4 1 2 1 3. - 0 - 6.1837752582505345e-004 - 0.0514718890190125 - -0.1738296002149582 - <_> - - <_> - - - - <_> - 12 8 3 5 -1. - <_> - 13 9 1 5 3. - 1 - -0.0337931104004383 - -0.3646135032176971 - 3.7170569412410259e-003 - <_> - - <_> - - - - <_> - 10 8 5 3 -1. - <_> - 9 9 5 1 3. - 1 - 0.0144119495525956 - -0.0352405086159706 - 0.2813816964626312 - <_> - - <_> - - - - <_> - 12 8 3 8 -1. - <_> - 13 8 1 8 3. - 0 - -0.0417710691690445 - -0.8469383716583252 - 5.6314789690077305e-003 - <_> - - <_> - - - - <_> - 7 8 3 8 -1. - <_> - 8 8 1 8 3. - 0 - 0.0262506492435932 - 0.0110485199838877 - -0.6560487747192383 - <_> - - <_> - - - - <_> - 8 7 6 6 -1. - <_> - 8 9 6 2 3. - 0 - 0.0383641906082630 - 0.0133811198174953 - -0.5102859735488892 - <_> - - <_> - - - - <_> - 4 2 1 18 -1. - <_> - 4 11 1 9 2. - 0 - -4.2627542279660702e-003 - 0.1029867008328438 - -0.0775174275040627 - <_> - - <_> - - - - <_> - 15 1 2 6 -1. - <_> - 15 3 2 2 3. - 0 - 2.6290370151400566e-003 - 0.0535368397831917 - -0.1671081930398941 - <_> - - <_> - - - - <_> - 3 9 3 8 -1. - <_> - 3 13 3 4 2. - 0 - 3.0461929272860289e-003 - -0.0705061703920364 - 0.1297105997800827 - <_> - - <_> - - - - <_> - 20 11 1 2 -1. - <_> - 20 12 1 1 2. - 0 - -8.1220280844718218e-004 - -0.1502757072448731 - 0.0249199401587248 - <_> - - <_> - - - - <_> - 1 11 1 2 -1. - <_> - 1 12 1 1 2. - 0 - -1.3896619748265948e-005 - 0.0944280475378037 - -0.0876622274518013 - <_> - - <_> - - - - <_> - 15 1 2 6 -1. - <_> - 15 3 2 2 3. - 0 - -1.1810410069301724e-003 - -0.0786897018551826 - 0.0423853993415833 - <_> - - <_> - - - - <_> - 2 1 18 4 -1. - <_> - 2 2 18 2 2. - 0 - -4.3100272305309772e-003 - 0.1054285988211632 - -0.0769242495298386 - <_> - - <_> - - - - <_> - 9 0 6 6 -1. - <_> - 9 2 6 2 3. - 0 - 4.9178837798535824e-003 - -0.0440457686781883 - 0.1121983975172043 - <_> - - <_> - - - - <_> - 3 2 7 4 -1. - <_> - 3 3 7 2 2. - 0 - 2.7417130768299103e-003 - 0.0484114997088909 - -0.1571823060512543 - <_> - - <_> - - - - <_> - 13 0 2 3 -1. - <_> - 13 0 1 3 2. - 1 - -0.0207752995193005 - -0.5544490218162537 - 5.7630650699138641e-003 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 9 0 3 1 2. - 1 - 9.2838220298290253e-003 - 0.0231507606804371 - -0.3256551921367645 - <_> - - <_> - - - - <_> - 10 18 12 2 -1. - <_> - 14 18 4 2 3. - 0 - 2.9645489994436502e-003 - -0.0515611805021763 - 0.0786585733294487 - <_> - - <_> - - - - <_> - 0 18 12 2 -1. - <_> - 4 18 4 2 3. - 0 - -3.5985060967504978e-003 - 0.1040901988744736 - -0.0786266103386879 - <_> - - <_> - - - - <_> - 5 9 16 8 -1. - <_> - 9 9 8 8 2. - 0 - 0.2903754115104675 - 2.0822859369218349e-003 - -0.9992691278457642 - <_> - - <_> - - - - <_> - 1 9 16 8 -1. - <_> - 5 9 8 8 2. - 0 - -0.1738304942846298 - -0.6118578910827637 - 0.0119051802903414 - <_> - - <_> - - - - <_> - 20 16 1 2 -1. - <_> - 20 17 1 1 2. - 0 - -1.4491450201603584e-005 - 0.0772903934121132 - -0.0797871425747871 - <_> - - <_> - - - - <_> - 11 0 6 4 -1. - <_> - 11 0 6 2 2. - 1 - 0.0593693703413010 - -0.0158813800662756 - 0.4913812875747681 - -1.0136179924011230 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 2 4 6 -1. - <_> - 9 4 4 2 3. - 0 - 0.0121479695662856 - -0.1702784001827240 - 0.3027854859828949 - <_> - - <_> - - - - <_> - 12 4 4 5 -1. - <_> - 13 4 2 5 2. - 0 - -5.1608979701995850e-003 - 0.1607093960046768 - -0.0976431667804718 - <_> - - <_> - - - - <_> - 6 4 4 5 -1. - <_> - 7 4 2 5 2. - 0 - -5.6379679590463638e-003 - 0.1769694983959198 - -0.1181396991014481 - <_> - - <_> - - - - <_> - 8 5 6 4 -1. - <_> - 8 7 6 2 2. - 0 - -1.3411770341917872e-003 - -0.2160972952842712 - 0.0842369720339775 - <_> - - <_> - - - - <_> - 3 15 1 4 -1. - <_> - 3 16 1 2 2. - 0 - 0.0168993696570396 - 0.0397095903754234 - -715.1629028320312500 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 10 8 2 3 2. - 0 - 0.0604093298316002 - 9.9979763035662472e-005 - -385.2774963378906200 - <_> - - <_> - - - - <_> - 6 16 6 4 -1. - <_> - 6 17 6 2 2. - 0 - 0.0621340908110142 - 6.3906911236699671e-005 - -3.9919741210937500e+003 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 10 8 2 3 2. - 0 - 1.0131259914487600e-003 - 0.0977808237075806 - -0.1926001012325287 - <_> - - <_> - - - - <_> - 4 2 9 18 -1. - <_> - 7 8 3 6 9. - 0 - 0.8558567166328430 - -0.0122138299047947 - -3.4853699218750000e+004 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 2 6 2 2. - 0 - -0.0322187095880508 - 0.3983246982097626 - -0.0459903515875340 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 0.0222356691956520 - -0.0403698310256004 - 0.3678930103778839 - <_> - - <_> - - - - <_> - 16 0 4 2 -1. - <_> - 18 0 2 1 2. - <_> - 16 1 2 1 2. - 0 - -8.8841008255258203e-004 - -0.2188061028718948 - 0.0505604296922684 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 8 6 1 3 3. - 0 - 3.5561749245971441e-003 - -0.0520093291997910 - 0.2138987928628922 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 10 1 1 2. - 0 - 9.6833909628912807e-004 - 0.0146138602867723 - -0.1975435018539429 - <_> - - <_> - - - - <_> - 8 0 4 12 -1. - <_> - 8 0 2 6 2. - <_> - 10 6 2 6 2. - 0 - -0.0277368295937777 - -0.4504640996456146 - 0.0276018790900707 - <_> - - <_> - - - - <_> - 12 4 10 14 -1. - <_> - 17 4 5 7 2. - <_> - 12 11 5 7 2. - 0 - 0.0749006867408752 - -0.0157380905002356 - 0.1375117003917694 - <_> - - <_> - - - - <_> - 9 9 1 2 -1. - <_> - 9 10 1 1 2. - 0 - -1.4089980140852276e-005 - 0.0822342932224274 - -0.1290208995342255 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 10 10 2 1 2. - 0 - 2.8132699299021624e-005 - -0.0894152373075485 - 0.1424764990806580 - <_> - - <_> - - - - <_> - 10 7 2 6 -1. - <_> - 10 10 2 3 2. - 0 - 3.6726798862218857e-003 - 0.0367537587881088 - -0.3023861944675446 - <_> - - <_> - - - - <_> - 12 9 7 8 -1. - <_> - 12 13 7 4 2. - 0 - 0.0583163313567638 - -0.0283717904239893 - 0.2301498949527741 - <_> - - <_> - - - - <_> - 6 4 3 5 -1. - <_> - 7 4 1 5 3. - 0 - 7.8186690807342529e-003 - -0.0427242703735828 - 0.2927964031696320 - <_> - - <_> - - - - <_> - 5 3 12 1 -1. - <_> - 5 3 6 1 2. - 0 - 8.1707425415515900e-003 - 0.0563905499875546 - -0.2270783931016922 - <_> - - <_> - - - - <_> - 4 3 8 2 -1. - <_> - 8 3 4 2 2. - 0 - -4.8393788747489452e-003 - 0.1425185054540634 - -0.0919003188610077 - <_> - - <_> - - - - <_> - 11 0 2 6 -1. - <_> - 11 0 1 6 2. - 1 - -0.0175237208604813 - 0.2059810012578964 - -0.0287028402090073 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 6 2 2 3. - 0 - -1.7228579963557422e-004 - 0.1086516007781029 - -0.1042758971452713 - <_> - - <_> - - - - <_> - 16 1 1 4 -1. - <_> - 16 3 1 2 2. - 0 - 1.4811339788138866e-003 - 0.0461132004857063 - -0.2398981004953384 - <_> - - <_> - - - - <_> - 5 3 12 2 -1. - <_> - 5 3 6 1 2. - <_> - 11 4 6 1 2. - 0 - -2.7818970847874880e-003 - -0.1962970942258835 - 0.0570604316890240 - <_> - - <_> - - - - <_> - 7 2 13 10 -1. - <_> - 7 7 13 5 2. - 0 - 0.0185161307454109 - -0.0683998763561249 - 0.0925250574946404 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - 1.2470349902287126e-003 - -0.0474701896309853 - 0.2386903017759323 - <_> - - <_> - - - - <_> - 20 1 2 8 -1. - <_> - 21 1 1 4 2. - <_> - 20 5 1 4 2. - 0 - 8.1306131323799491e-004 - 0.0586811900138855 - -0.1329372972249985 - <_> - - <_> - - - - <_> - 9 11 2 2 -1. - <_> - 9 11 1 1 2. - <_> - 10 12 1 1 2. - 0 - 1.0061890352517366e-003 - -0.0471850596368313 - 0.2078454941511154 - <_> - - <_> - - - - <_> - 12 9 1 3 -1. - <_> - 11 10 1 1 3. - 1 - 1.3212660560384393e-003 - -0.0320928618311882 - 0.0613701604306698 - <_> - - <_> - - - - <_> - 2 6 4 2 -1. - <_> - 2 6 2 1 2. - <_> - 4 7 2 1 2. - 0 - 7.1786798071116209e-004 - 0.0552506484091282 - -0.1808910071849823 - <_> - - <_> - - - - <_> - 16 6 4 2 -1. - <_> - 18 6 2 1 2. - <_> - 16 7 2 1 2. - 0 - -9.6626102458685637e-004 - -0.1304779946804047 - 0.0333184786140919 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - 1.7763959476724267e-003 - -0.0468324907124043 - 0.2068244069814682 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 9 1 2 3. - 0 - -2.8751560021191835e-003 - -0.2103876024484634 - 0.0449654795229435 - <_> - - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 8 1 1 2. - 0 - 1.9038280006498098e-003 - -0.0450242199003696 - 0.2811700105667114 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 11 7 2 2 2. - 1 - 2.9590770136564970e-003 - 0.0481742918491364 - -0.0674095824360847 - <_> - - <_> - - - - <_> - 7 5 2 2 -1. - <_> - 8 5 1 2 2. - 0 - 9.4039470423012972e-004 - -0.0884407684206963 - 0.1157006025314331 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 11 7 2 2 2. - 1 - 0.0241250395774841 - 7.2013828903436661e-003 - -0.3896116912364960 - <_> - - <_> - - - - <_> - 3 6 2 2 -1. - <_> - 3 6 1 1 2. - <_> - 4 7 1 1 2. - 0 - -6.2984478427097201e-004 - -0.2336063981056213 - 0.0425626896321774 - <_> - - <_> - - - - <_> - 15 7 7 6 -1. - <_> - 13 9 7 2 3. - 1 - -0.0291726607829332 - 0.1717405021190643 - -0.0464487895369530 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - -1.4338050277729053e-005 - 0.1039599999785423 - -0.0900665074586868 - <_> - - <_> - - - - <_> - 19 16 2 2 -1. - <_> - 20 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -1.4969659787311684e-005 - 0.0506783686578274 - -0.0396143086254597 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - 1.4065210052649491e-005 - -0.0931864529848099 - 0.1220884993672371 - <_> - - <_> - - - - <_> - 15 2 2 1 -1. - <_> - 15 2 1 1 2. - 0 - -2.7412388590164483e-004 - -0.1086578965187073 - 0.0432620309293270 - <_> - - <_> - - - - <_> - 5 2 2 1 -1. - <_> - 6 2 1 1 2. - 0 - -2.1822929556947201e-004 - -0.1442843973636627 - 0.0630619227886200 - <_> - - <_> - - - - <_> - 21 7 1 12 -1. - <_> - 21 7 1 6 2. - 1 - 2.9122079722583294e-003 - -0.0527749210596085 - 0.0591918304562569 - <_> - - <_> - - - - <_> - 7 7 6 7 -1. - <_> - 9 9 2 7 3. - 1 - -0.0367253310978413 - 0.2131368964910507 - -0.0514878481626511 - <_> - - <_> - - - - <_> - 16 8 6 6 -1. - <_> - 14 10 6 2 3. - 1 - 0.0130132399499416 - -0.0575253404676914 - 0.1210384964942932 - <_> - - <_> - - - - <_> - 3 16 16 1 -1. - <_> - 11 16 8 1 2. - 0 - 0.0116020403802395 - 0.0506706088781357 - -0.2141700983047485 - <_> - - <_> - - - - <_> - 8 7 6 1 -1. - <_> - 10 7 2 1 3. - 0 - -2.1189039107412100e-003 - -0.2399324029684067 - 0.0390679799020290 - <_> - - <_> - - - - <_> - 7 4 8 5 -1. - <_> - 9 4 4 5 2. - 0 - -9.8798265680670738e-003 - 0.2031767070293427 - -0.0468720681965351 - <_> - - <_> - - - - <_> - 9 9 6 3 -1. - <_> - 9 9 3 3 2. - 0 - 4.1930121369659901e-003 - -0.0490941107273102 - 0.0718272104859352 - <_> - - <_> - - - - <_> - 10 6 4 2 -1. - <_> - 11 7 2 2 2. - 1 - 0.0154045596718788 - 0.0251845493912697 - -0.3792628049850464 - <_> - - <_> - - - - <_> - 14 6 3 5 -1. - <_> - 15 7 1 5 3. - 1 - 0.0472048893570900 - 6.5619370434433222e-004 - -0.8516178131103516 - <_> - - <_> - - - - <_> - 7 9 6 3 -1. - <_> - 10 9 3 3 2. - 0 - 6.5289321355521679e-003 - -0.0784554630517960 - 0.1284262984991074 - <_> - - <_> - - - - <_> - 16 8 6 6 -1. - <_> - 14 10 6 2 3. - 1 - 0.0567356385290623 - -0.0140931503847241 - 0.1242636963725090 - <_> - - <_> - - - - <_> - 4 12 12 6 -1. - <_> - 4 12 6 3 2. - <_> - 10 15 6 3 2. - 0 - 2.6140250265598297e-003 - -0.0923743396997452 - 0.1097887009382248 - <_> - - <_> - - - - <_> - 13 17 3 3 -1. - <_> - 13 18 3 1 3. - 0 - 8.9589040726423264e-004 - 0.0347498282790184 - -0.1092950031161308 - <_> - - <_> - - - - <_> - 6 17 3 3 -1. - <_> - 6 18 3 1 3. - 0 - -9.0662058210000396e-004 - -0.1622029989957809 - 0.0507027804851532 - <_> - - <_> - - - - <_> - 15 17 1 3 -1. - <_> - 15 18 1 1 3. - 0 - -5.6750950170680881e-004 - -0.1397681981325150 - 0.0335630699992180 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - 3.9271891000680625e-004 - 0.0537795089185238 - -0.1718800067901611 - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 10 1 3 2 2. - 0 - -8.0099105834960938e-003 - 0.1983468979597092 - -0.0388249605894089 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 9 1 4 2 2. - 0 - 0.0106841996312141 - -0.0282902698963881 - 0.3439582884311676 - <_> - - <_> - - - - <_> - 19 16 2 2 -1. - <_> - 20 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - 1.4759440091438591e-005 - -0.0780980288982391 - 0.0976568832993507 - <_> - - <_> - - - - <_> - 4 8 4 10 -1. - <_> - 4 13 4 5 2. - 0 - 0.0169758591800928 - -0.0563262403011322 - 0.1558312028646469 - <_> - - <_> - - - - <_> - 19 16 1 2 -1. - <_> - 19 17 1 1 2. - 0 - -1.3971020052849781e-005 - 0.0721500664949417 - -0.0714413374662399 - <_> - - <_> - - - - <_> - 5 10 3 6 -1. - <_> - 5 13 3 3 2. - 0 - -2.6035839691758156e-003 - 0.1094136014580727 - -0.0814515128731728 - <_> - - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 11 0 6 2 2. - 0 - 0.0251788999885321 - 0.0122074997052550 - -0.2275604009628296 - <_> - - <_> - - - - <_> - 6 0 10 2 -1. - <_> - 11 0 5 2 2. - 0 - -0.0395594015717506 - -0.5832849740982056 - 0.0149106997996569 - <_> - - <_> - - - - <_> - 19 16 2 2 -1. - <_> - 20 16 1 1 2. - <_> - 19 17 1 1 2. - 0 - -1.4030520105734468e-005 - 0.0530069693922997 - -0.0461184307932854 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - -1.4760649719391949e-005 - 0.0978306829929352 - -0.0852368474006653 - <_> - - <_> - - - - <_> - 12 5 4 4 -1. - <_> - 11 6 4 2 2. - 1 - -7.2725438512861729e-003 - -0.1778313964605331 - 0.0211424902081490 - <_> - - <_> - - - - <_> - 1 16 1 2 -1. - <_> - 1 17 1 1 2. - 0 - -1.3526830116461497e-005 - 0.0910947322845459 - -0.0880548730492592 - <_> - - <_> - - - - <_> - 5 0 16 10 -1. - <_> - 5 5 16 5 2. - 0 - 0.2716980874538422 - 6.9690002128481865e-003 - -0.5776339769363403 - <_> - - <_> - - - - <_> - 10 5 4 4 -1. - <_> - 11 6 2 4 2. - 1 - -0.0141489496454597 - -0.4217475950717926 - 0.0179595593363047 - <_> - - <_> - - - - <_> - 10 9 2 2 -1. - <_> - 11 9 1 1 2. - <_> - 10 10 1 1 2. - 0 - -2.7665561065077782e-003 - -0.5913475155830383 - 0.0116501599550247 - <_> - - <_> - - - - <_> - 3 0 10 2 -1. - <_> - 3 0 5 1 2. - <_> - 8 1 5 1 2. - 0 - -2.0631540101021528e-003 - 0.1215090975165367 - -0.0647212266921997 - <_> - - <_> - - - - <_> - 21 0 1 2 -1. - <_> - 21 1 1 1 2. - 0 - 1.3370909982768353e-005 - -0.0564792193472385 - 0.0750401765108109 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 1 2 1 2. - 0 - 6.4982241019606590e-004 - 0.0421735309064388 - -0.1976653039455414 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 2.4920518626458943e-004 - -0.0623538382351398 - 0.0944023430347443 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -1.2078540166839957e-003 - 0.1632377058267593 - -0.0640282332897186 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - -2.2494650911539793e-003 - 0.1825089007616043 - -0.0133322896435857 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 5.9620937099680305e-004 - -0.0658389478921890 - 0.1542183011770248 - <_> - - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 1 1 1 2. - 0 - -3.9258919423446059e-004 - -0.1471531987190247 - 0.0395559482276440 - <_> - - <_> - - - - <_> - 10 1 7 3 -1. - <_> - 9 2 7 1 3. - 1 - -8.1223007291555405e-003 - -0.2244410961866379 - 0.0421616211533546 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 8 8 6 3 2. - 0 - -0.0478814207017422 - -0.8709182143211365 - 8.1774117425084114e-003 - <_> - - <_> - - - - <_> - 7 8 3 7 -1. - <_> - 8 9 1 7 3. - 1 - -0.0227483902126551 - 0.2997905015945435 - -0.0283465292304754 - <_> - - <_> - - - - <_> - 19 9 3 2 -1. - <_> - 19 10 3 1 2. - 0 - 1.0392880067229271e-003 - 0.0270987600088120 - -0.1033013984560967 - <_> - - <_> - - - - <_> - 9 8 1 2 -1. - <_> - 9 9 1 1 2. - 0 - -2.8231230317032896e-005 - 0.0775851830840111 - -0.1031709015369415 - <_> - - <_> - - - - <_> - 11 6 2 6 -1. - <_> - 11 6 2 3 2. - 1 - -4.2344927787780762e-003 - 0.1019338965415955 - -0.0431518293917179 - <_> - - <_> - - - - <_> - 11 0 6 3 -1. - <_> - 10 1 6 1 3. - 1 - 0.0159323308616877 - -0.0340681485831738 - 0.2295179069042206 - <_> - - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 1 1 1 2. - 0 - 1.8464079766999930e-004 - 0.0455912910401821 - -0.1255594044923782 - <_> - - <_> - - - - <_> - 10 0 2 9 -1. - <_> - 10 3 2 3 3. - 0 - -0.0197332594543695 - 0.2206435948610306 - -0.0359281189739704 - <_> - - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 1 1 1 2. - 0 - 1.4354330232890788e-005 - -0.0538936704397202 - 0.0739264115691185 - <_> - - <_> - - - - <_> - 0 9 3 2 -1. - <_> - 0 10 3 1 2. - 0 - 7.6591788092628121e-004 - 0.0486480481922627 - -0.1668861061334610 - <_> - - <_> - - - - <_> - 10 1 2 3 -1. - <_> - 10 1 1 3 2. - 0 - 4.8519670963287354e-003 - 0.0189167093485594 - -0.3822551071643829 - <_> - - <_> - - - - <_> - 8 8 2 4 -1. - <_> - 8 8 1 2 2. - <_> - 9 10 1 2 2. - 0 - 7.8907480929046869e-004 - -0.0583289787173271 - 0.1341709047555924 - <_> - - <_> - - - - <_> - 13 6 3 4 -1. - <_> - 12 7 3 2 2. - 1 - 0.0323836691677570 - 4.5701907947659492e-003 - -0.3788760006427765 - <_> - - <_> - - - - <_> - 9 7 4 1 -1. - <_> - 10 8 2 1 2. - 1 - -1.2292680330574512e-003 - -0.1583478003740311 - 0.0476142801344395 - <_> - - <_> - - - - <_> - 8 11 11 3 -1. - <_> - 8 12 11 1 3. - 0 - 0.0270470604300499 - 6.6439821384847164e-003 - -0.5965548157691956 - <_> - - <_> - - - - <_> - 5 4 12 3 -1. - <_> - 9 5 4 1 9. - 0 - 0.1437598019838333 - -0.0178426392376423 - 0.4235152900218964 - <_> - - <_> - - - - <_> - 11 6 2 6 -1. - <_> - 11 6 2 3 2. - 1 - -0.0157832596451044 - 0.0882440730929375 - -0.0124643296003342 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 6 2 2 2. - <_> - 11 8 2 2 2. - 0 - -1.4875989872962236e-003 - -0.1313078999519348 - 0.0574465692043304 - <_> - - <_> - - - - <_> - 11 4 3 11 -1. - <_> - 12 5 1 11 3. - 1 - 0.0253486093133688 - -0.0189718604087830 - 0.1528109014034271 - <_> - - <_> - - - - <_> - 9 4 4 4 -1. - <_> - 10 5 2 4 2. - 1 - 0.0349810309708118 - 0.0102432202547789 - -0.7760412096977234 - <_> - - <_> - - - - <_> - 11 4 3 11 -1. - <_> - 12 5 1 11 3. - 1 - -0.0105137201026082 - 0.1082314997911453 - -0.0287874303758144 - <_> - - <_> - - - - <_> - 9 9 4 2 -1. - <_> - 9 9 2 1 2. - <_> - 11 10 2 1 2. - 0 - -7.3121190071105957e-003 - -0.8325800895690918 - 9.2471670359373093e-003 - <_> - - <_> - - - - <_> - 11 5 10 3 -1. - <_> - 11 5 5 3 2. - 1 - -0.1320170015096664 - -0.2958199977874756 - 1.6155829653143883e-003 - <_> - - <_> - - - - <_> - 3 9 16 11 -1. - <_> - 7 9 8 11 2. - 0 - 0.3134536147117615 - 0.0101329898461699 - -0.7184575200080872 - <_> - - <_> - - - - <_> - 18 14 4 3 -1. - <_> - 18 15 4 1 3. - 0 - 6.7774970084428787e-003 - 0.0161213595420122 - -0.3059360086917877 - <_> - - <_> - - - - <_> - 0 7 14 5 -1. - <_> - 7 7 7 5 2. - 0 - -0.1648826003074646 - -0.7305217981338501 - 9.3599827960133553e-003 - <_> - - <_> - - - - <_> - 10 6 6 10 -1. - <_> - 13 6 3 5 2. - <_> - 10 11 3 5 2. - 0 - 0.0302635692059994 - -0.0214909501373768 - 0.2147663980722427 - <_> - - <_> - - - - <_> - 5 6 12 8 -1. - <_> - 5 6 6 4 2. - <_> - 11 10 6 4 2. - 0 - -0.0101648401468992 - -0.1252814978361130 - 0.0605088211596012 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -4.9876107368618250e-004 - 0.1173653975129128 - -0.0653684362769127 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 1 1 1 2. - 0 - -2.0281779870856553e-004 - -0.1458016932010651 - 0.0533178411424160 - <_> - - <_> - - - - <_> - 18 17 4 3 -1. - <_> - 19 17 2 3 2. - 0 - 7.5787317473441362e-004 - -0.0509013086557388 - 0.0964314863085747 - <_> - - <_> - - - - <_> - 0 17 4 3 -1. - <_> - 1 17 2 3 2. - 0 - 3.0924860038794577e-004 - -0.0741724297404289 - 0.1003668010234833 - <_> - - <_> - - - - <_> - 18 14 4 3 -1. - <_> - 18 15 4 1 3. - 0 - -0.0173474606126547 - -0.7004374861717224 - 5.1052640192210674e-003 - <_> - - <_> - - - - <_> - 0 0 14 6 -1. - <_> - 0 0 7 3 2. - <_> - 7 3 7 3 2. - 0 - 0.0426747389137745 - -0.0432474799454212 - 0.1810068935155869 - <_> - - <_> - - - - <_> - 14 0 8 11 -1. - <_> - 14 0 4 11 2. - 1 - -0.3105606138706207 - -0.8162639141082764 - 1.7991130007430911e-003 - <_> - - <_> - - - - <_> - 8 0 11 8 -1. - <_> - 8 0 11 4 2. - 1 - 0.2655039131641388 - 0.0134346000850201 - -0.6240668892860413 - <_> - - <_> - - - - <_> - 18 14 4 3 -1. - <_> - 18 15 4 1 3. - 0 - 4.2594179831212386e-005 - -0.0398995690047741 - 0.0361331701278687 - <_> - - <_> - - - - <_> - 0 14 4 3 -1. - <_> - 0 15 4 1 3. - 0 - -5.9230630286037922e-003 - -0.3380753099918366 - 0.0220333691686392 - <_> - - <_> - - - - <_> - 11 4 3 11 -1. - <_> - 12 5 1 11 3. - 1 - 0.0740493535995483 - 1.3915670569986105e-003 - -0.6935318112373352 - <_> - - <_> - - - - <_> - 11 4 11 3 -1. - <_> - 10 5 11 1 3. - 1 - -0.0172208994626999 - 0.2374791949987412 - -0.0333674587309361 - <_> - - <_> - - - - <_> - 8 3 6 6 -1. - <_> - 11 3 3 3 2. - <_> - 8 6 3 3 2. - 0 - 5.3963330574333668e-003 - 0.0509315393865108 - -0.1556290984153748 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 10 7 2 3 2. - 1 - -1.8919620197266340e-003 - -0.1516934931278229 - 0.0539932809770107 - <_> - - <_> - - - - <_> - 11 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 11 12 1 1 2. - 0 - -1.5097260475158691e-003 - 0.1985154002904892 - -0.0335953086614609 - <_> - - <_> - - - - <_> - 9 7 2 9 -1. - <_> - 9 7 1 9 2. - 1 - 0.0300207696855068 - -0.0171369705349207 - 0.4157114923000336 - <_> - - <_> - - - - <_> - 19 12 2 1 -1. - <_> - 19 12 1 1 2. - 1 - 5.0775688141584396e-003 - 9.6978880465030670e-003 - -0.1726316064596176 - <_> - - <_> - - - - <_> - 3 12 1 2 -1. - <_> - 3 12 1 1 2. - 1 - -1.1930350447073579e-003 - -0.1707147955894470 - 0.0440787002444267 - <_> - - <_> - - - - <_> - 9 0 10 4 -1. - <_> - 9 2 10 2 2. - 0 - -4.3130549602210522e-003 - 0.0737997069954872 - -0.0617075599730015 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 9 1 4 1 2. - 0 - 3.7032270338386297e-003 - -0.0366375707089901 - 0.2282540053129196 - <_> - - <_> - - - - <_> - 12 2 9 9 -1. - <_> - 12 5 9 3 3. - 0 - -0.1233571022748947 - -0.8032327890396118 - 5.5564441718161106e-003 - <_> - - <_> - - - - <_> - 4 3 6 17 -1. - <_> - 6 3 2 17 3. - 0 - -0.1667128950357437 - -0.7474268078804016 - 7.7674849890172482e-003 - <_> - - <_> - - - - <_> - 8 4 13 16 -1. - <_> - 8 12 13 8 2. - 0 - -0.4220887124538422 - -0.4744696915149689 - 6.5842550247907639e-003 - <_> - - <_> - - - - <_> - 1 2 9 9 -1. - <_> - 1 5 9 3 3. - 0 - -0.0916788727045059 - -0.6094763278961182 - 0.0108979595825076 - <_> - - <_> - - - - <_> - 12 10 3 2 -1. - <_> - 13 11 1 2 3. - 1 - 6.3239918090403080e-003 - -0.0338266417384148 - 0.1824333965778351 - <_> - - <_> - - - - <_> - 5 6 3 14 -1. - <_> - 6 6 1 14 3. - 0 - 0.0421293713152409 - 9.4385631382465363e-003 - -0.7724804878234863 - <_> - - <_> - - - - <_> - 14 2 2 4 -1. - <_> - 15 2 1 2 2. - <_> - 14 4 1 2 2. - 0 - -9.3927257694303989e-004 - 0.0715791434049606 - -0.0353120490908623 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - -2.5862399488687515e-003 - -0.1761429011821747 - 0.0389703810214996 - <_> - - <_> - - - - <_> - 10 0 4 3 -1. - <_> - 11 0 2 3 2. - 0 - -6.0188758652657270e-005 - 0.0579977296292782 - -0.0648379772901535 - <_> - - <_> - - - - <_> - 8 0 4 3 -1. - <_> - 9 0 2 3 2. - 0 - -2.8638429284910671e-005 - 0.0914083495736122 - -0.1047587990760803 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 8 2 6 2 3. - 0 - 3.8879539351910353e-003 - -0.0572163201868534 - 0.1338610053062439 - <_> - - <_> - - - - <_> - 9 3 3 9 -1. - <_> - 10 6 1 3 9. - 0 - -0.0115574095398188 - -0.2050994932651520 - 0.0368685908615589 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.3373260153457522e-003 - 0.1227068975567818 - -0.0622216984629631 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - 1.6762840095907450e-003 - -0.0884211733937263 - 0.1343490034341812 - <_> - - <_> - - - - <_> - 11 7 1 4 -1. - <_> - 11 9 1 2 2. - 0 - 7.7090170234441757e-003 - 4.9661491066217422e-003 - -0.7532501816749573 - <_> - - <_> - - - - <_> - 10 7 1 4 -1. - <_> - 10 9 1 2 2. - 0 - -1.7691600369289517e-003 - -0.1591065973043442 - 0.0502478592097759 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - 0.0140200303867459 - -0.0214019902050495 - 0.3833423852920532 - <_> - - <_> - - - - <_> - 6 18 2 2 -1. - <_> - 6 18 1 1 2. - <_> - 7 19 1 1 2. - 0 - 1.4426360394281801e-005 - -0.0780590921640396 - 0.0893047824501991 - <_> - - <_> - - - - <_> - 10 4 4 12 -1. - <_> - 10 4 2 12 2. - 0 - -0.0315593294799328 - 0.2335845977067947 - -0.0219069607555866 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 8 6 1 1 3. - 0 - -1.1780899949371815e-003 - -0.1711665987968445 - 0.0401738286018372 - <_> - - <_> - - - - <_> - 9 10 4 6 -1. - <_> - 9 10 2 6 2. - 0 - 0.0147882802411914 - -0.0367103815078735 - 0.2181137055158615 - <_> - - <_> - - - - <_> - 9 3 4 2 -1. - <_> - 9 3 4 1 2. - 1 - 7.2554568760097027e-004 - -0.0915873125195503 - 0.0785703584551811 - <_> - - <_> - - - - <_> - 11 6 1 2 -1. - <_> - 11 7 1 1 2. - 0 - 5.7623899920145050e-005 - -0.0875413492321968 - 0.0721847116947174 - <_> - - <_> - - - - <_> - 9 1 3 2 -1. - <_> - 9 1 3 1 2. - 1 - 2.2748520132154226e-003 - 0.0574466586112976 - -0.1314813047647476 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 1 - -4.1168648749589920e-003 - -0.2022953033447266 - 0.0126937497407198 - <_> - - <_> - - - - <_> - 0 14 10 6 -1. - <_> - 5 14 5 6 2. - 0 - -0.0103324502706528 - 0.1051608026027679 - -0.0701248571276665 - <_> - - <_> - - - - <_> - 12 17 10 2 -1. - <_> - 12 17 5 2 2. - 0 - 3.3246190287172794e-003 - -0.0405303388834000 - 0.0599881187081337 - <_> - - <_> - - - - <_> - 0 17 10 2 -1. - <_> - 5 17 5 2 2. - 0 - 1.7478669760748744e-003 - -0.0811739563941956 - 0.1110830977559090 - <_> - - <_> - - - - <_> - 15 16 1 2 -1. - <_> - 15 17 1 1 2. - 0 - 3.9028140599839389e-004 - 0.0482336618006229 - -0.1948453933000565 - <_> - - <_> - - - - <_> - 9 2 5 3 -1. - <_> - 8 3 5 1 3. - 1 - 1.6148900613188744e-004 - 0.0828140676021576 - -0.0946637690067291 - <_> - - <_> - - - - <_> - 10 7 12 12 -1. - <_> - 16 7 6 6 2. - <_> - 10 13 6 6 2. - 0 - -0.1712162941694260 - 0.3198448121547699 - -0.0115755898877978 - <_> - - <_> - - - - <_> - 3 0 12 14 -1. - <_> - 3 7 12 7 2. - 0 - 0.2454354017972946 - 0.0142517900094390 - -0.5064139962196350 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 6 2 1 3. - 0 - 3.0413989443331957e-003 - -0.0242350995540619 - 0.1834878027439117 - <_> - - <_> - - - - <_> - 1 15 18 4 -1. - <_> - 1 17 18 2 2. - 0 - -0.0356975905597210 - -0.2829301059246063 - 0.0249106995761395 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - -2.9557330999523401e-003 - 0.2477200031280518 - -0.0242359396070242 - <_> - - <_> - - - - <_> - 6 16 1 2 -1. - <_> - 6 17 1 1 2. - 0 - 7.2135991649702191e-004 - 0.0345066189765930 - -0.2216565012931824 - <_> - - <_> - - - - <_> - 10 3 2 6 -1. - <_> - 11 3 1 3 2. - <_> - 10 6 1 3 2. - 0 - -0.0107069900259376 - -0.8676891922950745 - 6.9787860848009586e-003 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - 3.4451750107109547e-003 - -0.0228231996297836 - 0.3198244869709015 - <_> - - <_> - - - - <_> - 11 11 6 3 -1. - <_> - 11 12 6 1 3. - 0 - 0.0261119995266199 - 3.6254660226404667e-003 - -0.7587574124336243 - <_> - - <_> - - - - <_> - 5 11 6 3 -1. - <_> - 5 12 6 1 3. - 0 - -0.0125270001590252 - -0.4579072892665863 - 0.0162503495812416 - <_> - - <_> - - - - <_> - 5 7 12 6 -1. - <_> - 11 7 6 3 2. - <_> - 5 10 6 3 2. - 0 - 0.0438750088214874 - 0.0174826402217150 - -0.3945938050746918 - <_> - - <_> - - - - <_> - 3 11 5 6 -1. - <_> - 3 13 5 2 3. - 0 - 6.7723668180406094e-003 - -0.0524763800203800 - 0.1457563936710358 - <_> - - <_> - - - - <_> - 11 12 8 8 -1. - <_> - 15 12 4 4 2. - <_> - 11 16 4 4 2. - 0 - 7.8281061723828316e-003 - -0.0421769581735134 - 0.0775432810187340 - <_> - - <_> - - - - <_> - 3 12 8 8 -1. - <_> - 3 12 4 4 2. - <_> - 7 16 4 4 2. - 0 - -0.0132257603108883 - 0.1508186012506485 - -0.0511933416128159 - <_> - - <_> - - - - <_> - 16 12 2 1 -1. - <_> - 16 12 1 1 2. - 0 - 1.0840999893844128e-003 - 0.0358370803296566 - -0.2213875055313110 - <_> - - <_> - - - - <_> - 5 14 4 4 -1. - <_> - 5 14 2 2 2. - <_> - 7 16 2 2 2. - 0 - 1.9366490596439689e-004 - -0.0871035978198051 - 0.0884382501244545 - -0.9439712762832642 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 3 2 1 -1. - <_> - 9 3 1 1 2. - 1 - -4.8138638958334923e-003 - 0.3330551087856293 - -0.1118412017822266 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 9 6 4 1 3. - 0 - -4.8076249659061432e-003 - 0.2294300049543381 - -0.0877920314669609 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 4 0 1 2 2. - 0 - -6.3146371394395828e-004 - -0.2559472918510437 - 0.0787744671106339 - <_> - - <_> - - - - <_> - 17 0 2 2 -1. - <_> - 17 0 1 2 2. - 0 - -3.3615701249800622e-004 - -0.1815436035394669 - 0.0774075463414192 - <_> - - <_> - - - - <_> - 3 12 7 3 -1. - <_> - 3 13 7 1 3. - 0 - 0.0583663396537304 - 0.0201593395322561 - -3.7257949218750000e+004 - <_> - - <_> - - - - <_> - 17 0 2 2 -1. - <_> - 17 0 1 2 2. - 0 - 6.9574371445924044e-004 - 0.0855601504445076 - -0.2829465866088867 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 4 0 1 2 2. - 0 - 6.4000801648944616e-004 - 0.1121385022997856 - -0.2499731034040451 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 5 1 3 3. - 0 - -8.4167812019586563e-003 - 0.3411510884761810 - -0.0916691422462463 - <_> - - <_> - - - - <_> - 6 7 3 1 -1. - <_> - 7 7 1 1 3. - 0 - -2.2956470493227243e-003 - 0.2493681013584137 - -0.0565690696239471 - <_> - - <_> - - - - <_> - 9 1 4 8 -1. - <_> - 11 1 2 4 2. - <_> - 9 5 2 4 2. - 0 - 0.0116768795996904 - 0.0359415188431740 - -0.3649426102638245 - <_> - - <_> - - - - <_> - 8 1 3 3 -1. - <_> - 9 2 1 1 9. - 0 - -1.7014340264722705e-003 - 0.1473715007305145 - -0.1168621033430100 - <_> - - <_> - - - - <_> - 11 4 2 6 -1. - <_> - 12 4 1 3 2. - <_> - 11 7 1 3 2. - 0 - -7.0934131508693099e-004 - 0.0956543684005737 - -0.1120724007487297 - <_> - - <_> - - - - <_> - 9 3 4 6 -1. - <_> - 9 3 2 3 2. - <_> - 11 6 2 3 2. - 0 - 4.3072118423879147e-003 - 0.0729159563779831 - -0.2325101047754288 - <_> - - <_> - - - - <_> - 13 7 3 2 -1. - <_> - 14 7 1 2 3. - 0 - 5.1240371540188789e-003 - -0.0474545285105705 - 0.3807871043682098 - <_> - - <_> - - - - <_> - 6 7 3 2 -1. - <_> - 7 7 1 2 3. - 0 - 3.5788940731436014e-003 - -0.0473014898598194 - 0.2989667952060700 - <_> - - <_> - - - - <_> - 14 18 5 2 -1. - <_> - 14 19 5 1 2. - 0 - -3.3787379506975412e-003 - -0.2102563977241516 - 0.0315660387277603 - <_> - - <_> - - - - <_> - 4 18 14 2 -1. - <_> - 4 18 7 1 2. - <_> - 11 19 7 1 2. - 0 - 1.6957529587671161e-003 - 0.0778307095170021 - -0.1784853935241699 - <_> - - <_> - - - - <_> - 14 18 2 2 -1. - <_> - 14 19 2 1 2. - 0 - 5.4554390953853726e-004 - 0.0343143083155155 - -0.1111057028174400 - <_> - - <_> - - - - <_> - 8 7 3 3 -1. - <_> - 9 8 1 1 9. - 0 - 7.1256239898502827e-003 - -0.0677921026945114 - 0.1908272057771683 - <_> - - <_> - - - - <_> - 14 18 2 2 -1. - <_> - 14 19 2 1 2. - 0 - -7.1168097201734781e-004 - -0.1431163996458054 - 0.0470338985323906 - <_> - - <_> - - - - <_> - 9 0 3 2 -1. - <_> - 10 1 1 2 3. - 1 - 9.6405223011970520e-003 - -0.0355590507388115 - 0.3504177033901215 - <_> - - <_> - - - - <_> - 14 18 2 2 -1. - <_> - 14 19 2 1 2. - 0 - -1.4268929589889012e-005 - 0.0718558430671692 - -0.0730074271559715 - <_> - - <_> - - - - <_> - 11 5 4 1 -1. - <_> - 11 5 2 1 2. - 1 - -3.9352979511022568e-003 - -0.2143121957778931 - 0.0530923008918762 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - -0.0112730199471116 - 0.4378206133842468 - -0.0259345304220915 - <_> - - <_> - - - - <_> - 4 17 4 3 -1. - <_> - 4 18 4 1 3. - 0 - -2.8332630172371864e-003 - -0.2615567147731781 - 0.0411566011607647 - <_> - - <_> - - - - <_> - 11 11 2 2 -1. - <_> - 12 11 1 1 2. - <_> - 11 12 1 1 2. - 0 - -1.3269010232761502e-003 - 0.1596702039241791 - -0.0337373912334442 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 6 3 2 2. - <_> - 11 8 3 2 2. - 0 - -9.1561209410429001e-003 - -0.3196761012077332 - 0.0338903293013573 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 12 6 1 3 3. - 1 - -0.0179156400263309 - -0.7005323767662048 - 4.4488841667771339e-003 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 10 6 3 1 3. - 1 - 3.8176840171217918e-003 - 0.0625125020742416 - -0.1692132055759430 - <_> - - <_> - - - - <_> - 11 6 1 2 -1. - <_> - 11 7 1 1 2. - 0 - 4.5008640881860629e-005 - -0.0986627265810966 - 0.0795650109648705 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -5.6530670262873173e-003 - 0.2945300936698914 - -0.0430361405014992 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 1.3065920211374760e-003 - -0.0661263093352318 - 0.1936067938804627 - <_> - - <_> - - - - <_> - 3 6 16 2 -1. - <_> - 3 6 8 1 2. - <_> - 11 7 8 1 2. - 0 - 4.9355439841747284e-003 - 0.0495940707623959 - -0.2215404063463211 - <_> - - <_> - - - - <_> - 5 3 12 6 -1. - <_> - 11 3 6 3 2. - <_> - 5 6 6 3 2. - 0 - 0.0159952100366354 - 0.0453370586037636 - -0.2101494073867798 - <_> - - <_> - - - - <_> - 8 2 6 9 -1. - <_> - 8 5 6 3 3. - 0 - 1.0815339628607035e-003 - -0.1154263988137245 - 0.0832884907722473 - <_> - - <_> - - - - <_> - 15 17 2 3 -1. - <_> - 15 18 2 1 3. - 0 - 8.7853492004796863e-004 - 0.0278968494385481 - -0.0991334095597267 - <_> - - <_> - - - - <_> - 7 7 2 2 -1. - <_> - 7 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - 7.3434278601780534e-004 - -0.0565023310482502 - 0.1766120046377182 - <_> - - <_> - - - - <_> - 15 17 2 3 -1. - <_> - 15 18 2 1 3. - 0 - -1.0622059926390648e-003 - -0.1003327965736389 - 0.0245927497744560 - <_> - - <_> - - - - <_> - 9 11 2 2 -1. - <_> - 9 11 1 1 2. - <_> - 10 12 1 1 2. - 0 - -6.9304608041420579e-004 - 0.1593257039785385 - -0.0586679503321648 - <_> - - <_> - - - - <_> - 20 6 2 4 -1. - <_> - 21 6 1 2 2. - <_> - 20 8 1 2 2. - 0 - 9.1822311514988542e-004 - 0.0338710211217403 - -0.1169342026114464 - <_> - - <_> - - - - <_> - 9 11 2 2 -1. - <_> - 9 11 1 1 2. - <_> - 10 12 1 1 2. - 0 - 3.5730420495383441e-004 - -0.0703675076365471 - 0.1459266990423203 - <_> - - <_> - - - - <_> - 20 6 2 4 -1. - <_> - 21 6 1 2 2. - <_> - 20 8 1 2 2. - 0 - -7.4347230838611722e-004 - -0.1323186010122299 - 0.0425157882273197 - <_> - - <_> - - - - <_> - 8 2 7 3 -1. - <_> - 7 3 7 1 3. - 1 - -0.0279191695153713 - -0.6466109156608582 - 0.0143629601225257 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 15 5 1 4 3. - 0 - -7.2348387911915779e-003 - 0.1520843952894211 - -0.0250763408839703 - <_> - - <_> - - - - <_> - 10 6 1 8 -1. - <_> - 10 10 1 4 2. - 0 - -0.0123356301337481 - -0.3277204930782318 - 0.0274944193661213 - <_> - - <_> - - - - <_> - 12 7 1 3 -1. - <_> - 12 8 1 1 3. - 0 - 8.9493131963536143e-004 - -0.0737893134355545 - 0.1471516937017441 - <_> - - <_> - - - - <_> - 9 7 1 3 -1. - <_> - 9 8 1 1 3. - 0 - -1.1678929440677166e-003 - 0.2327986061573029 - -0.0467862710356712 - <_> - - <_> - - - - <_> - 15 17 2 3 -1. - <_> - 15 18 2 1 3. - 0 - -1.4189979992806911e-005 - 0.0439305417239666 - -0.0378886014223099 - <_> - - <_> - - - - <_> - 5 17 2 3 -1. - <_> - 5 18 2 1 3. - 0 - 1.1783849913626909e-003 - 0.0464351512491703 - -0.2255553007125855 - <_> - - <_> - - - - <_> - 12 6 1 2 -1. - <_> - 12 6 1 1 2. - 1 - 3.1638250220566988e-003 - 0.0142665402963758 - -0.1583072990179062 - <_> - - <_> - - - - <_> - 9 0 2 10 -1. - <_> - 10 0 1 10 2. - 0 - -4.2278678156435490e-003 - -0.2311190962791443 - 0.0395855717360973 - <_> - - <_> - - - - <_> - 11 5 4 8 -1. - <_> - 11 5 2 8 2. - 0 - -0.0290550608187914 - 0.2200579941272736 - -0.0189482606947422 - <_> - - <_> - - - - <_> - 9 1 2 1 -1. - <_> - 10 1 1 1 2. - 0 - -1.4660089618701022e-005 - 0.0940574184060097 - -0.0895898714661598 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 13 1 1 1 2. - <_> - 12 2 1 1 2. - 0 - 1.5642490470781922e-003 - -0.0298029892146587 - 0.2067041993141174 - <_> - - <_> - - - - <_> - 0 6 2 4 -1. - <_> - 0 6 1 2 2. - <_> - 1 8 1 2 2. - 0 - -1.6279580304399133e-003 - -0.2332343012094498 - 0.0365630201995373 - <_> - - <_> - - - - <_> - 16 17 6 1 -1. - <_> - 18 17 2 1 3. - 0 - -1.0405499488115311e-003 - 0.0590832307934761 - -0.0326850712299347 - <_> - - <_> - - - - <_> - 0 17 6 1 -1. - <_> - 2 17 2 1 3. - 0 - -1.6444999491795897e-003 - 0.1349329948425293 - -0.0602243989706039 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - -5.3500832291319966e-004 - -0.1038099005818367 - 0.0262425094842911 - <_> - - <_> - - - - <_> - 10 18 1 2 -1. - <_> - 10 19 1 1 2. - 0 - 8.8775012409314513e-004 - 0.0357182398438454 - -0.2586294114589691 - <_> - - <_> - - - - <_> - 11 14 3 1 -1. - <_> - 12 14 1 1 3. - 0 - 3.7019669543951750e-003 - -0.0227465592324734 - 0.2716599106788635 - <_> - - <_> - - - - <_> - 8 14 3 1 -1. - <_> - 9 14 1 1 3. - 0 - -1.9900789484381676e-003 - 0.2230225056409836 - -0.0363042801618576 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 10 1 1 2. - 0 - 3.3227570820599794e-003 - 6.1393459327518940e-003 - -0.5935828089714050 - <_> - - <_> - - - - <_> - 10 7 3 10 -1. - <_> - 10 7 3 5 2. - 1 - 0.0871278867125511 - 0.0315860994160175 - -0.2444157004356384 - <_> - - <_> - - - - <_> - 10 7 9 12 -1. - <_> - 10 13 9 6 2. - 0 - -0.0225450098514557 - 0.0603223890066147 - -0.0503784008324146 - <_> - - <_> - - - - <_> - 8 9 6 3 -1. - <_> - 7 10 6 1 3. - 1 - 7.1416068822145462e-003 - -0.0517041310667992 - 0.1600423008203507 - <_> - - <_> - - - - <_> - 9 0 4 5 -1. - <_> - 10 0 2 5 2. - 0 - -0.0157224405556917 - -0.7170577049255371 - 0.0113718695938587 - <_> - - <_> - - - - <_> - 1 3 2 2 -1. - <_> - 1 4 2 1 2. - 0 - -3.6207420635037124e-004 - -0.1463758051395416 - 0.0520746298134327 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - -0.0309462398290634 - 0.2851543128490448 - -0.0282999891787767 - <_> - - <_> - - - - <_> - 7 0 4 2 -1. - <_> - 7 0 4 1 2. - 1 - -3.8750860840082169e-003 - -0.1872780025005341 - 0.0475766994059086 - <_> - - <_> - - - - <_> - 12 0 1 3 -1. - <_> - 12 1 1 1 3. - 0 - -5.3602852858603001e-004 - 0.0794753730297089 - -0.0397834815084934 - <_> - - <_> - - - - <_> - 1 3 1 2 -1. - <_> - 1 4 1 1 2. - 0 - 9.3597290106117725e-004 - 0.0309391897171736 - -0.2681480050086975 - <_> - - <_> - - - - <_> - 13 3 3 1 -1. - <_> - 14 3 1 1 3. - 0 - 8.5998268332332373e-004 - -0.0619055889546871 - 0.1495943963527679 - <_> - - <_> - - - - <_> - 10 0 6 2 -1. - <_> - 10 0 6 1 2. - 1 - -1.0758650023490191e-003 - 0.0756125599145889 - -0.1149493977427483 - <_> - - <_> - - - - <_> - 11 6 1 2 -1. - <_> - 11 7 1 1 2. - 0 - 4.5355302281677723e-003 - 5.6059500202536583e-003 - -0.5701342225074768 - <_> - - <_> - - - - <_> - 10 6 1 2 -1. - <_> - 10 7 1 1 2. - 0 - 4.7198678657878190e-005 - -0.1079989001154900 - 0.0854062065482140 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.0689400369301438e-003 - 0.1318995952606201 - -0.0726404264569283 - <_> - - <_> - - - - <_> - 8 14 1 2 -1. - <_> - 8 15 1 1 2. - 0 - -7.7435292769223452e-004 - -0.2081927955150604 - 0.0419186800718308 - <_> - - <_> - - - - <_> - 13 6 3 4 -1. - <_> - 13 6 3 2 2. - 1 - -0.0415704213082790 - -0.3860394954681397 - 6.2196617946028709e-003 - <_> - - <_> - - - - <_> - 1 16 20 4 -1. - <_> - 11 16 10 4 2. - 0 - -0.1276704072952271 - -0.4122628867626190 - 0.0195464305579662 - <_> - - <_> - - - - <_> - 11 5 4 8 -1. - <_> - 11 5 2 8 2. - 0 - 4.6110390685498714e-003 - -0.0705343708395958 - 0.0642436370253563 - <_> - - <_> - - - - <_> - 3 8 10 1 -1. - <_> - 8 8 5 1 2. - 0 - -1.9830530509352684e-003 - 0.1559942066669464 - -0.0755353868007660 - <_> - - <_> - - - - <_> - 12 5 3 5 -1. - <_> - 13 5 1 5 3. - 0 - 5.5741341784596443e-003 - -0.0538692809641361 - 0.1766355037689209 - <_> - - <_> - - - - <_> - 8 6 4 2 -1. - <_> - 9 7 2 2 2. - 1 - -6.2112910673022270e-003 - -0.2493589967489243 - 0.0374812595546246 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -1.4880870003253222e-003 - 0.1745371967554092 - -0.0298566408455372 - <_> - - <_> - - - - <_> - 4 8 14 2 -1. - <_> - 4 8 7 1 2. - <_> - 11 9 7 1 2. - 0 - -1.6566930571570992e-003 - -0.1382555961608887 - 0.0643158927559853 - <_> - - <_> - - - - <_> - 11 5 1 6 -1. - <_> - 11 8 1 3 2. - 0 - -0.0121794696897268 - -0.7345255017280579 - 6.6957371309399605e-003 - <_> - - <_> - - - - <_> - 10 1 2 1 -1. - <_> - 11 1 1 1 2. - 0 - -8.2790851593017578e-004 - -0.2159553021192551 - 0.0370855703949928 - <_> - - <_> - - - - <_> - 15 7 7 6 -1. - <_> - 13 9 7 2 3. - 1 - -0.0165153108537197 - 0.0861329063773155 - -0.0399826988577843 - <_> - - <_> - - - - <_> - 7 7 6 7 -1. - <_> - 9 9 2 7 3. - 1 - 0.0630354732275009 - -0.0321194604039192 - 0.2759613096714020 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 10 0 1 2 2. - 0 - -1.4381350483745337e-003 - -0.2179982066154480 - 0.0402281209826469 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 9 1 1 2 3. - 1 - -8.3341673016548157e-003 - 0.2055165022611618 - -0.0436870492994785 - <_> - - <_> - - - - <_> - 13 3 3 1 -1. - <_> - 14 3 1 1 3. - 0 - -2.6486050337553024e-003 - 0.1160414963960648 - -0.0156336501240730 - <_> - - <_> - - - - <_> - 6 3 3 1 -1. - <_> - 7 3 1 1 3. - 0 - 1.0625630384311080e-003 - -0.0592821091413498 - 0.1766609996557236 - <_> - - <_> - - - - <_> - 11 18 2 2 -1. - <_> - 11 18 1 2 2. - 0 - 1.6927489778026938e-003 - 0.0217064507305622 - -0.1204186975955963 - <_> - - <_> - - - - <_> - 8 3 1 3 -1. - <_> - 8 4 1 1 3. - 0 - 4.3286401778459549e-003 - 0.0127770202234387 - -0.6845877170562744 - <_> - - <_> - - - - <_> - 8 11 8 5 -1. - <_> - 10 11 4 5 2. - 0 - -5.0025819800794125e-003 - 0.0697429776191711 - -0.0451282002031803 - <_> - - <_> - - - - <_> - 8 7 6 2 -1. - <_> - 10 7 2 2 3. - 0 - -4.0001221932470798e-003 - -0.2125232070684433 - 0.0405662693083286 - <_> - - <_> - - - - <_> - 11 8 1 4 -1. - <_> - 11 10 1 2 2. - 0 - -2.9794070869684219e-003 - -0.1922518014907837 - 0.0377900488674641 - <_> - - <_> - - - - <_> - 6 2 6 4 -1. - <_> - 6 2 3 2 2. - <_> - 9 4 3 2 2. - 0 - -4.7926669940352440e-003 - 0.2076411992311478 - -0.0418482497334480 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 10 2 2 2 2. - 0 - -1.2958609731867909e-003 - 0.1058659031987190 - -0.1016210988163948 - <_> - - <_> - - - - <_> - 2 8 6 5 -1. - <_> - 4 8 2 5 3. - 0 - -0.0398349687457085 - -0.4622850120067596 - 0.0178820006549358 - <_> - - <_> - - - - <_> - 10 6 2 3 -1. - <_> - 10 6 1 3 2. - 0 - -3.5444050445221364e-004 - 0.0983698591589928 - -0.0798366665840149 - <_> - - <_> - - - - <_> - 6 14 1 3 -1. - <_> - 6 15 1 1 3. - 0 - 7.3516031261533499e-004 - 0.0431845597922802 - -0.1770561039447784 - <_> - - <_> - - - - <_> - 11 13 2 2 -1. - <_> - 12 13 1 1 2. - <_> - 11 14 1 1 2. - 0 - -2.2232010960578918e-003 - 0.2609331905841827 - -0.0208962894976139 - <_> - - <_> - - - - <_> - 6 10 9 1 -1. - <_> - 9 13 3 1 3. - 1 - -0.0339182093739510 - -0.4281868934631348 - 0.0186916198581457 - <_> - - <_> - - - - <_> - 15 10 4 3 -1. - <_> - 14 11 4 1 3. - 1 - 1.6966359689831734e-003 - -0.0379303582012653 - 0.0537452399730682 - <_> - - <_> - - - - <_> - 7 10 3 4 -1. - <_> - 8 11 1 4 3. - 1 - -0.0160691104829311 - 0.2746849060058594 - -0.0267089307308197 - <_> - - <_> - - - - <_> - 13 3 3 3 -1. - <_> - 13 4 3 1 3. - 0 - 6.7740790545940399e-003 - 0.0144122503697872 - -0.4326404929161072 - <_> - - <_> - - - - <_> - 6 3 3 3 -1. - <_> - 6 4 3 1 3. - 0 - -4.1755018755793571e-003 - -0.2596294879913330 - 0.0282923299819231 - <_> - - <_> - - - - <_> - 19 12 2 3 -1. - <_> - 18 13 2 1 3. - 1 - 0.0120533201843500 - -0.0165761299431324 - 0.2322483956813812 - <_> - - <_> - - - - <_> - 3 18 3 2 -1. - <_> - 3 19 3 1 2. - 0 - -2.6080579118570313e-005 - 0.0813469216227531 - -0.0904878973960876 - <_> - - <_> - - - - <_> - 15 18 4 2 -1. - <_> - 15 19 4 1 2. - 0 - -1.4344100236485247e-005 - 0.0368528701364994 - -0.0411852002143860 - <_> - - <_> - - - - <_> - 3 18 4 2 -1. - <_> - 3 19 4 1 2. - 0 - -3.9379368536174297e-003 - -0.3154301047325134 - 0.0254172794520855 - <_> - - <_> - - - - <_> - 10 7 6 2 -1. - <_> - 12 7 2 2 3. - 0 - 0.0403810702264309 - 2.3525550495833158e-003 - -0.6261631250381470 - <_> - - <_> - - - - <_> - 6 7 6 2 -1. - <_> - 8 7 2 2 3. - 0 - 6.4301681704819202e-003 - -0.0538770705461502 - 0.1447926014661789 - <_> - - <_> - - - - <_> - 14 6 3 4 -1. - <_> - 14 6 3 2 2. - 1 - -0.0463328398764133 - -0.3872421979904175 - 9.4530889764428139e-003 - <_> - - <_> - - - - <_> - 9 6 3 2 -1. - <_> - 10 7 1 2 3. - 1 - 0.0102195702493191 - 0.0273507107049227 - -0.2691288888454437 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 15 5 1 4 3. - 0 - 3.5570480395108461e-003 - -0.0316938497126102 - 0.0956660136580467 - <_> - - <_> - - - - <_> - 9 16 1 2 -1. - <_> - 9 17 1 1 2. - 0 - 3.3236679882975295e-005 - -0.0782346725463867 - 0.0947765409946442 - <_> - - <_> - - - - <_> - 9 7 6 3 -1. - <_> - 9 8 6 1 3. - 0 - -5.1339739002287388e-003 - 0.1668560951948166 - -0.0275052897632122 - <_> - - <_> - - - - <_> - 10 8 1 2 -1. - <_> - 10 9 1 1 2. - 0 - -1.4517169802275021e-005 - 0.0756863430142403 - -0.1013337001204491 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - 3.1801449949853122e-004 - 0.0487777590751648 - -0.1433755010366440 - <_> - - <_> - - - - <_> - 8 8 3 1 -1. - <_> - 9 8 1 1 3. - 0 - 3.1173340976238251e-003 - -0.0330603383481503 - 0.2330691069364548 - <_> - - <_> - - - - <_> - 14 0 6 10 -1. - <_> - 14 0 6 5 2. - 1 - 0.2518137097358704 - 2.5762580335140228e-003 - -0.8733972907066345 - <_> - - <_> - - - - <_> - 8 0 10 6 -1. - <_> - 8 0 5 6 2. - 1 - -0.2110535949468613 - -0.4901143908500671 - 0.0146970897912979 - <_> - - <_> - - - - <_> - 12 0 2 6 -1. - <_> - 12 0 1 6 2. - 0 - 0.0203972496092319 - 6.3519459217786789e-003 - -0.4998654127120972 - <_> - - <_> - - - - <_> - 5 0 3 1 -1. - <_> - 6 0 1 1 3. - 0 - 5.0813501002267003e-004 - 0.0447902604937553 - -0.1476114988327026 - <_> - - <_> - - - - <_> - 19 12 2 3 -1. - <_> - 18 13 2 1 3. - 1 - -3.8189589977264404e-003 - 0.0977415218949318 - -0.0303010102361441 - <_> - - <_> - - - - <_> - 9 13 2 2 -1. - <_> - 9 13 1 1 2. - <_> - 10 14 1 1 2. - 0 - -1.7395459581166506e-003 - 0.2467561960220337 - -0.0290200300514698 - <_> - - <_> - - - - <_> - 15 3 2 3 -1. - <_> - 15 4 2 1 3. - 0 - 4.1809340473264456e-004 - 0.0509206317365170 - -0.1085608005523682 - <_> - - <_> - - - - <_> - 5 4 12 2 -1. - <_> - 5 4 6 1 2. - <_> - 11 5 6 1 2. - 0 - 1.3991099549457431e-003 - 0.0587580092251301 - -0.1171239987015724 - <_> - - <_> - - - - <_> - 19 12 2 3 -1. - <_> - 18 13 2 1 3. - 1 - 8.7988591985777020e-004 - -0.0384139306843281 - 0.0606278218328953 - <_> - - <_> - - - - <_> - 3 12 3 2 -1. - <_> - 4 13 1 2 3. - 1 - -1.7343460349366069e-003 - 0.1232753992080689 - -0.0589276216924191 - <_> - - <_> - - - - <_> - 3 0 16 3 -1. - <_> - 3 0 8 3 2. - 0 - -0.0519646294414997 - -0.2752340137958527 - 0.0257692001760006 - <_> - - <_> - - - - <_> - 7 2 8 9 -1. - <_> - 11 2 4 9 2. - 0 - 0.1167984008789063 - -0.0169483590871096 - 0.4890722036361694 - <_> - - <_> - - - - <_> - 16 13 4 2 -1. - <_> - 18 13 2 1 2. - <_> - 16 14 2 1 2. - 0 - 1.5027469999040477e-005 - -0.0429307296872139 - 0.0450537502765656 - <_> - - <_> - - - - <_> - 7 8 2 12 -1. - <_> - 7 14 2 6 2. - 0 - -6.2790908850729465e-003 - 0.1005797013640404 - -0.0716046467423439 - <_> - - <_> - - - - <_> - 13 4 5 16 -1. - <_> - 13 12 5 8 2. - 0 - 0.0222924295812845 - -0.0332605391740799 - 0.0598763711750507 - <_> - - <_> - - - - <_> - 7 3 2 4 -1. - <_> - 7 5 2 2 2. - 0 - 0.0111129097640514 - 0.0184615608304739 - -0.4005638957023621 - <_> - - <_> - - - - <_> - 5 14 12 5 -1. - <_> - 5 14 6 5 2. - 0 - -0.0276781208813190 - -0.1582171022891998 - 0.0445266999304295 - <_> - - <_> - - - - <_> - 6 10 6 4 -1. - <_> - 9 10 3 4 2. - 0 - 0.0110283801332116 - -0.0585203506052494 - 0.1206140965223312 - <_> - - <_> - - - - <_> - 10 0 9 18 -1. - <_> - 13 0 3 18 3. - 0 - -0.3540732860565186 - -0.9047710895538330 - 3.2190340571105480e-003 - <_> - - <_> - - - - <_> - 2 13 4 2 -1. - <_> - 2 13 2 1 2. - <_> - 4 14 2 1 2. - 0 - -2.9098710510879755e-003 - 0.2330009937286377 - -0.0322748795151711 - <_> - - <_> - - - - <_> - 2 4 18 1 -1. - <_> - 2 4 9 1 2. - 0 - 6.7031742073595524e-003 - 0.0544422492384911 - -0.1411132067441940 - <_> - - <_> - - - - <_> - 7 5 4 8 -1. - <_> - 9 5 2 8 2. - 0 - -0.0235699508339167 - 0.2652854919433594 - -0.0275911502540112 - <_> - - <_> - - - - <_> - 12 7 1 4 -1. - <_> - 11 8 1 2 2. - 1 - 8.1230228533968329e-004 - -0.0346543192863464 - 0.0386164002120495 - <_> - - <_> - - - - <_> - 9 7 2 3 -1. - <_> - 10 7 1 3 2. - 0 - -4.9135009758174419e-003 - -0.4499981105327606 - 0.0173772592097521 - <_> - - <_> - - - - <_> - 10 18 2 1 -1. - <_> - 10 18 1 1 2. - 0 - 4.7644469304941595e-004 - 0.0430530607700348 - -0.1622253060340881 - <_> - - <_> - - - - <_> - 3 1 2 2 -1. - <_> - 3 2 2 1 2. - 0 - -1.2371529592201114e-003 - -0.1952732950448990 - 0.0347816981375217 - <_> - - <_> - - - - <_> - 14 5 3 4 -1. - <_> - 15 5 1 4 3. - 0 - 0.0272134300321341 - 2.6703500188887119e-003 - -0.4680710136890411 - <_> - - <_> - - - - <_> - 5 5 3 4 -1. - <_> - 6 5 1 4 3. - 0 - 7.8581515699625015e-003 - -0.0314543582499027 - 0.2396831065416336 - <_> - - <_> - - - - <_> - 2 14 19 3 -1. - <_> - 2 15 19 1 3. - 0 - -9.4054918736219406e-003 - -0.1850629001855850 - 0.0261614602059126 - <_> - - <_> - - - - <_> - 1 14 19 3 -1. - <_> - 1 15 19 1 3. - 0 - 0.0218835808336735 - 0.0153678897768259 - -0.4711188077926636 - <_> - - <_> - - - - <_> - 9 3 5 4 -1. - <_> - 9 4 5 2 2. - 0 - 0.0180641598999500 - -0.0221106093376875 - 0.2488380074501038 - <_> - - <_> - - - - <_> - 10 1 3 4 -1. - <_> - 11 2 1 4 3. - 1 - 9.4773704186081886e-003 - -0.0320087000727654 - 0.2151926010847092 - <_> - - <_> - - - - <_> - 10 4 4 8 -1. - <_> - 10 6 4 4 2. - 0 - -0.0161337591707706 - -0.3268057107925415 - 0.0190199203789234 - <_> - - <_> - - - - <_> - 5 4 3 16 -1. - <_> - 5 12 3 8 2. - 0 - 0.0244902707636356 - -0.0535730198025703 - 0.1347523927688599 - <_> - - <_> - - - - <_> - 14 9 5 8 -1. - <_> - 14 13 5 4 2. - 0 - -4.5099710114300251e-003 - 0.0635830536484718 - -0.0490546487271786 - <_> - - <_> - - - - <_> - 7 14 3 2 -1. - <_> - 8 15 1 2 3. - 1 - 1.4463099651038647e-003 - 0.0550471283495426 - -0.1359364986419678 - <_> - - <_> - - - - <_> - 16 0 6 4 -1. - <_> - 15 1 6 2 2. - 1 - 2.7760691009461880e-003 - -0.0423844903707504 - 0.0679337531328201 - <_> - - <_> - - - - <_> - 2 8 18 6 -1. - <_> - 8 10 6 2 9. - 0 - -0.1407369971275330 - -0.2445566058158875 - 0.0288794301450253 - -1.0122050046920776 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -0.0136823700740933 - 0.3241379857063294 - -0.1417520940303803 - <_> - - <_> - - - - <_> - 11 0 2 5 -1. - <_> - 11 0 1 5 2. - 1 - -0.0143727604299784 - 0.2413523048162460 - -0.0445342995226383 - <_> - - <_> - - - - <_> - 8 4 4 6 -1. - <_> - 8 4 2 3 2. - <_> - 10 7 2 3 2. - 0 - -8.1836461322382092e-004 - 0.1067276969552040 - -0.1566537022590637 - <_> - - <_> - - - - <_> - 2 2 18 3 -1. - <_> - 8 3 6 1 9. - 0 - -0.1248653009533882 - 0.3407737016677856 - -0.0433156304061413 - <_> - - <_> - - - - <_> - 0 12 4 8 -1. - <_> - 0 14 4 4 2. - 0 - 0.1630425006151199 - 1.5282359672710299e-003 - -407.4866027832031200 - <_> - - <_> - - - - <_> - 7 8 8 4 -1. - <_> - 9 8 4 4 2. - 0 - 0.0326057188212872 - -0.0619429200887680 - 0.2556105852127075 - <_> - - <_> - - - - <_> - 8 2 1 2 -1. - <_> - 8 3 1 1 2. - 0 - 0.0186936203390360 - 1.0656840167939663e-003 - -1.1298509521484375e+003 - <_> - - <_> - - - - <_> - 10 1 2 6 -1. - <_> - 11 1 1 3 2. - <_> - 10 4 1 3 2. - 0 - 4.1687521152198315e-003 - 0.0362053103744984 - -0.3435891866683960 - <_> - - <_> - - - - <_> - 9 2 10 4 -1. - <_> - 9 2 5 4 2. - 1 - 0.2481018006801605 - 0.0104174604639411 - -1.4925009765625000e+003 - <_> - - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 8 6 6 1 3. - 0 - -1.5247239498421550e-003 - 0.1044768989086151 - -0.1128230020403862 - <_> - - <_> - - - - <_> - 0 15 18 5 -1. - <_> - 6 15 6 5 3. - 0 - 0.4330801069736481 - -4.9477489665150642e-003 - -2.2265880859375000e+004 - <_> - - <_> - - - - <_> - 10 6 3 6 -1. - <_> - 10 9 3 3 2. - 0 - 1.2200199998915195e-003 - 0.0481324009597301 - -0.1194564029574394 - <_> - - <_> - - - - <_> - 1 11 2 3 -1. - <_> - 1 12 2 1 3. - 0 - 0.0340348593890667 - 0.0123634496703744 - -1.2715170312500000e+005 - <_> - - <_> - - - - <_> - 12 14 2 2 -1. - <_> - 12 15 2 1 2. - 0 - 2.9459499273798428e-005 - -0.0422581695020199 - 0.0461573489010334 - <_> - - <_> - - - - <_> - 11 14 2 3 -1. - <_> - 11 14 1 3 2. - 1 - 0.0504107810556889 - 0.0319297984242439 - -731.7086181640625000 - <_> - - <_> - - - - <_> - 8 4 6 6 -1. - <_> - 11 4 3 3 2. - <_> - 8 7 3 3 2. - 0 - 3.4591180738061666e-003 - 0.0652308985590935 - -0.1842384040355682 - <_> - - <_> - - - - <_> - 2 8 15 11 -1. - <_> - 7 8 5 11 3. - 0 - 0.6174101829528809 - -9.0229194611310959e-003 - -1.5548990234375000e+004 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 12 1 3 1 3. - 1 - 0.0161725506186485 - -0.0217322409152985 - 0.4360015988349915 - <_> - - <_> - - - - <_> - 8 2 6 2 -1. - <_> - 11 2 3 2 2. - 0 - 4.3139848858118057e-003 - 0.0741047188639641 - -0.1569827049970627 - <_> - - <_> - - - - <_> - 3 6 17 14 -1. - <_> - 3 13 17 7 2. - 0 - 0.2588641941547394 - -0.0333735495805740 - 0.2765713930130005 - <_> - - <_> - - - - <_> - 3 2 16 8 -1. - <_> - 7 2 8 8 2. - 0 - -0.0563551187515259 - 0.1657727956771851 - -0.0707222670316696 - <_> - - <_> - - - - <_> - 19 1 1 18 -1. - <_> - 13 7 1 6 3. - 1 - -0.0286779794842005 - -0.1873297989368439 - 0.0381043404340744 - <_> - - <_> - - - - <_> - 7 8 2 1 -1. - <_> - 7 8 1 1 2. - 1 - 0.0263423193246126 - -6.6387602128088474e-003 - -1.2419830078125000e+004 - <_> - - <_> - - - - <_> - 10 10 6 5 -1. - <_> - 12 10 2 5 3. - 0 - 0.0230094902217388 - -0.0226575303822756 - 0.1287097036838532 - <_> - - <_> - - - - <_> - 7 11 4 5 -1. - <_> - 8 11 2 5 2. - 0 - -2.8790850192308426e-003 - 0.1293289065361023 - -0.0700023397803307 - <_> - - <_> - - - - <_> - 2 1 18 8 -1. - <_> - 11 1 9 4 2. - <_> - 2 5 9 4 2. - 0 - -0.0366612710058689 - -0.2094440013170242 - 0.0512859709560871 - <_> - - <_> - - - - <_> - 0 3 16 2 -1. - <_> - 4 3 8 2 2. - 0 - 0.1013944968581200 - 6.2089762650430202e-004 - -1.0912600097656250e+003 - <_> - - <_> - - - - <_> - 13 0 3 15 -1. - <_> - 14 0 1 15 3. - 0 - -9.5230191946029663e-003 - 0.1107454001903534 - -0.0497466288506985 - <_> - - <_> - - - - <_> - 11 0 6 4 -1. - <_> - 11 0 6 2 2. - 1 - 0.0471482388675213 - -0.0189740806818008 - 0.4404538869857788 - <_> - - <_> - - - - <_> - 15 18 1 2 -1. - <_> - 15 19 1 1 2. - 0 - 2.6617941330187023e-004 - 0.0352455116808414 - -0.1274701058864594 - <_> - - <_> - - - - <_> - 6 1 7 3 -1. - <_> - 6 2 7 1 3. - 0 - -1.6388510121032596e-003 - 0.0904504805803299 - -0.0912943482398987 - <_> - - <_> - - - - <_> - 18 3 1 3 -1. - <_> - 18 4 1 1 3. - 0 - 1.0469569824635983e-003 - 0.0350245907902718 - -0.2455316036939621 - <_> - - <_> - - - - <_> - 7 6 3 3 -1. - <_> - 8 6 1 3 3. - 0 - 5.7105771265923977e-003 - -0.0411175601184368 - 0.2072966992855072 - <_> - - <_> - - - - <_> - 20 1 2 8 -1. - <_> - 21 1 1 4 2. - <_> - 20 5 1 4 2. - 0 - -3.0254309531301260e-003 - -0.1691372990608215 - 0.0325373001396656 - <_> - - <_> - - - - <_> - 8 8 3 1 -1. - <_> - 9 8 1 1 3. - 0 - 4.3001459562219679e-004 - -0.0907876417040825 - 0.0957262963056564 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 12 1 3 1 3. - 1 - -0.0281515605747700 - 0.3178203105926514 - -0.0157544203102589 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 10 2 2 8 2. - 0 - 0.0142030203714967 - 0.0365433208644390 - -0.2477217018604279 - <_> - - <_> - - - - <_> - 9 1 4 3 -1. - <_> - 9 2 4 1 3. - 0 - 1.4925509458407760e-003 - -0.0568953901529312 - 0.1645023971796036 - <_> - - <_> - - - - <_> - 8 7 6 1 -1. - <_> - 10 7 2 1 3. - 0 - -1.5694119501858950e-003 - -0.2196945995092392 - 0.0421653799712658 - <_> - - <_> - - - - <_> - 12 4 6 8 -1. - <_> - 14 4 2 8 3. - 0 - 0.0334601588547230 - -0.0303763505071402 - 0.2488369047641754 - <_> - - <_> - - - - <_> - 3 5 6 4 -1. - <_> - 3 5 3 2 2. - <_> - 6 7 3 2 2. - 0 - 2.1535790438065305e-005 - -0.1155892983078957 - 0.0752673670649529 - <_> - - <_> - - - - <_> - 18 6 1 2 -1. - <_> - 18 7 1 1 2. - 0 - 2.2091339633334428e-004 - 0.0471167005598545 - -0.1377124935388565 - <_> - - <_> - - - - <_> - 3 6 1 2 -1. - <_> - 3 7 1 1 2. - 0 - -3.0852231429889798e-004 - -0.1730858981609345 - 0.0529468208551407 - <_> - - <_> - - - - <_> - 14 2 3 18 -1. - <_> - 14 11 3 9 2. - 0 - -0.0229874104261398 - 0.0938596725463867 - -0.0491693988442421 - <_> - - <_> - - - - <_> - 11 0 6 2 -1. - <_> - 11 0 6 1 2. - 1 - -0.0198736097663641 - 0.2217212021350861 - -0.0402039885520935 - <_> - - <_> - - - - <_> - 13 4 3 2 -1. - <_> - 14 4 1 2 3. - 0 - -2.1868769545108080e-003 - 0.0739766433835030 - -0.0404149182140827 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - 1.9180430099368095e-003 - 0.0229191407561302 - -0.3711954057216644 - <_> - - <_> - - - - <_> - 13 4 3 2 -1. - <_> - 14 4 1 2 3. - 0 - 1.9919909536838531e-003 - -0.0437578111886978 - 0.1503525972366333 - <_> - - <_> - - - - <_> - 11 0 6 1 -1. - <_> - 11 0 3 1 2. - 1 - -0.0183714106678963 - -0.3485428094863892 - 0.0228850897401571 - <_> - - <_> - - - - <_> - 13 0 2 3 -1. - <_> - 13 0 1 3 2. - 1 - 3.3407800365239382e-003 - 0.0345708690583706 - -0.1248847991228104 - <_> - - <_> - - - - <_> - 7 1 6 11 -1. - <_> - 10 1 3 11 2. - 0 - -0.0587046705186367 - 0.3790520131587982 - -0.0264609195291996 - <_> - - <_> - - - - <_> - 11 0 2 2 -1. - <_> - 11 0 1 2 2. - 0 - 6.8355379626154900e-003 - 6.1131529510021210e-003 - -0.3238506913185120 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 10 0 1 2 2. - 0 - -2.8255670331418514e-003 - -0.3115552067756653 - 0.0265048108994961 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 6 2 1 3. - 0 - 2.2296449169516563e-003 - -0.0312060099095106 - 0.1711089015007019 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - 6.5813441760838032e-003 - -0.0474041216075420 - 0.1783571988344193 - <_> - - <_> - - - - <_> - 8 2 10 9 -1. - <_> - 8 5 10 3 3. - 0 - 0.1012196019291878 - 0.0142613900825381 - -0.4314535856246948 - <_> - - <_> - - - - <_> - 10 8 2 1 -1. - <_> - 10 8 1 1 2. - 1 - 3.0684550292789936e-003 - 0.0300597008317709 - -0.2484648972749710 - <_> - - <_> - - - - <_> - 12 7 8 2 -1. - <_> - 12 7 8 1 2. - 1 - -0.0307720396667719 - 0.3227208852767944 - -0.0101834703236818 - <_> - - <_> - - - - <_> - 10 7 2 8 -1. - <_> - 10 7 1 8 2. - 1 - 0.0226505696773529 - -0.0234840400516987 - 0.3251582980155945 - <_> - - <_> - - - - <_> - 9 8 11 12 -1. - <_> - 9 14 11 6 2. - 0 - 0.0335874892771244 - -0.0359071902930737 - 0.0903259590268135 - <_> - - <_> - - - - <_> - 9 4 4 9 -1. - <_> - 9 7 4 3 3. - 0 - -0.0103848101571202 - -0.2455613017082214 - 0.0305614098906517 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 7 2 3 2. - 0 - -1.3354570546653122e-004 - 0.0839602127671242 - -0.0917179286479950 - <_> - - <_> - - - - <_> - 8 4 5 3 -1. - <_> - 8 5 5 1 3. - 0 - -2.9986540321260691e-003 - 0.1654735058546066 - -0.0502499788999558 - <_> - - <_> - - - - <_> - 12 1 1 4 -1. - <_> - 11 2 1 2 2. - 1 - -2.9653869205503725e-005 - 0.0485149398446083 - -0.0377189293503761 - <_> - - <_> - - - - <_> - 10 0 4 1 -1. - <_> - 11 1 2 1 2. - 1 - -1.8298539798706770e-003 - 0.1031228974461556 - -0.0701638907194138 - <_> - - <_> - - - - <_> - 20 17 1 3 -1. - <_> - 20 18 1 1 3. - 0 - -7.9780339729040861e-004 - -0.1615508049726486 - 0.0334252417087555 - <_> - - <_> - - - - <_> - 8 13 3 3 -1. - <_> - 9 14 1 1 9. - 0 - 0.0160901993513107 - -0.0231724493205547 - 0.3131231963634491 - <_> - - <_> - - - - <_> - 1 12 20 6 -1. - <_> - 11 12 10 3 2. - <_> - 1 15 10 3 2. - 0 - -0.0261172391474247 - -0.1828335970640183 - 0.0444061607122421 - <_> - - <_> - - - - <_> - 6 15 1 2 -1. - <_> - 6 16 1 1 2. - 0 - 5.3988862782716751e-004 - 0.0378797501325607 - -0.1942088007926941 - <_> - - <_> - - - - <_> - 3 0 18 20 -1. - <_> - 3 10 18 10 2. - 0 - 0.0834463685750961 - -0.0542225986719131 - 0.1187658011913300 - <_> - - <_> - - - - <_> - 0 0 19 20 -1. - <_> - 0 10 19 10 2. - 0 - -0.0580484606325626 - 0.1139445006847382 - -0.0911984667181969 - <_> - - <_> - - - - <_> - 15 14 2 3 -1. - <_> - 15 15 2 1 3. - 0 - -1.8814830109477043e-003 - -0.1526201069355011 - 0.0238645095378160 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - 1.3132189633324742e-003 - -0.0461375601589680 - 0.1467961072921753 - <_> - - <_> - - - - <_> - 14 8 2 3 -1. - <_> - 14 8 1 3 2. - 1 - -1.7690629465505481e-003 - 0.0940710529685020 - -0.0347228012979031 - <_> - - <_> - - - - <_> - 9 11 2 2 -1. - <_> - 9 11 1 1 2. - <_> - 10 12 1 1 2. - 0 - -1.0372219840064645e-003 - 0.1826138943433762 - -0.0463821403682232 - <_> - - <_> - - - - <_> - 15 14 2 3 -1. - <_> - 15 15 2 1 3. - 0 - 1.0254649678245187e-003 - 0.0467827692627907 - -0.1573414057493210 - <_> - - <_> - - - - <_> - 5 14 2 3 -1. - <_> - 5 15 2 1 3. - 0 - 6.0706451768055558e-004 - 0.0507578290998936 - -0.1438096016645432 - <_> - - <_> - - - - <_> - 15 4 3 14 -1. - <_> - 15 11 3 7 2. - 0 - 0.0285123195499182 - -0.0410360805690289 - 0.1350166946649551 - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 8 7 3 2 2. - <_> - 11 9 3 2 2. - 0 - 0.0131213404238224 - 0.0182428508996964 - -0.4065996110439301 - <_> - - <_> - - - - <_> - 9 6 5 4 -1. - <_> - 9 8 5 2 2. - 0 - -1.0520350188016891e-003 - -0.0914813131093979 - 0.0482087209820747 - <_> - - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 8 1 1 2. - 0 - -5.2031682571396232e-004 - 0.1700346022844315 - -0.0562239699065685 - <_> - - <_> - - - - <_> - 8 8 6 2 -1. - <_> - 11 8 3 1 2. - <_> - 8 9 3 1 2. - 0 - 3.6587389186024666e-003 - 0.0277094505727291 - -0.2825919091701508 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 8 4 1 2. - 0 - 6.9533567875623703e-003 - -0.0277935396879911 - 0.2669697105884552 - <_> - - <_> - - - - <_> - 17 1 1 6 -1. - <_> - 17 4 1 3 2. - 0 - -2.7009609621018171e-003 - -0.1184986010193825 - 0.0295755397528410 - <_> - - <_> - - - - <_> - 4 1 1 6 -1. - <_> - 4 4 1 3 2. - 0 - 2.6926631107926369e-003 - 0.0347012206912041 - -0.1970425993204117 - <_> - - <_> - - - - <_> - 2 0 18 20 -1. - <_> - 8 0 6 20 3. - 0 - 0.8904849290847778 - 9.4922678545117378e-003 - -0.6925765275955200 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 10 8 2 2 2. - 0 - 0.0125707304105163 - 0.0104820700362325 - -0.5368549227714539 - <_> - - <_> - - - - <_> - 16 1 4 15 -1. - <_> - 11 6 4 5 3. - 1 - -0.0985181033611298 - -0.1387366950511932 - 0.0165020208805799 - <_> - - <_> - - - - <_> - 1 17 3 2 -1. - <_> - 2 17 1 2 3. - 0 - 2.2518350742757320e-003 - -0.0387940406799316 - 0.1772751957178116 - <_> - - <_> - - - - <_> - 18 18 3 2 -1. - <_> - 19 18 1 2 3. - 0 - 2.5133260060101748e-003 - -0.0272757206112146 - 0.1445610970258713 - <_> - - <_> - - - - <_> - 1 18 3 2 -1. - <_> - 2 18 1 2 3. - 0 - -1.6838839510455728e-003 - 0.1590812057256699 - -0.0438302718102932 - <_> - - <_> - - - - <_> - 20 17 1 3 -1. - <_> - 20 18 1 1 3. - 0 - 1.0922889923676848e-003 - 0.0304626692086458 - -0.2094078958034515 - <_> - - <_> - - - - <_> - 9 9 4 2 -1. - <_> - 9 9 2 1 2. - <_> - 11 10 2 1 2. - 0 - -4.6525499783456326e-003 - -0.5055990219116211 - 0.0128498496487737 - <_> - - <_> - - - - <_> - 10 4 3 1 -1. - <_> - 11 4 1 1 3. - 0 - 3.9402171969413757e-003 - 0.0125100603327155 - -0.3625462055206299 - <_> - - <_> - - - - <_> - 10 4 2 2 -1. - <_> - 10 4 1 1 2. - <_> - 11 5 1 1 2. - 0 - 3.1555439345538616e-003 - 9.6861021593213081e-003 - -0.6014677286148071 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - -7.4672501068562269e-004 - 0.0798265710473061 - -0.0662000775337219 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - 3.4551098942756653e-003 - -0.0216486304998398 - 0.2734104990959168 - <_> - - <_> - - - - <_> - 13 4 4 2 -1. - <_> - 15 4 2 1 2. - <_> - 13 5 2 1 2. - 0 - -1.8974170088768005e-003 - -0.0909534022212029 - 0.0161434095352888 - <_> - - <_> - - - - <_> - 5 4 4 2 -1. - <_> - 5 4 2 1 2. - <_> - 7 5 2 1 2. - 0 - 3.5065270494669676e-003 - 0.0226604603230953 - -0.2787635028362274 - <_> - - <_> - - - - <_> - 14 3 6 2 -1. - <_> - 17 3 3 1 2. - <_> - 14 4 3 1 2. - 0 - -2.8986909455852583e-005 - 0.0513366200029850 - -0.0615163892507553 - <_> - - <_> - - - - <_> - 6 1 3 16 -1. - <_> - 7 1 1 16 3. - 0 - -7.4356691911816597e-003 - 0.1070874035358429 - -0.0603334605693817 - <_> - - <_> - - - - <_> - 13 8 2 1 -1. - <_> - 13 8 1 1 2. - 1 - 3.8960299571044743e-004 - -0.0497832000255585 - 0.0426518283784390 - <_> - - <_> - - - - <_> - 9 8 1 2 -1. - <_> - 9 8 1 1 2. - 1 - -3.8861521170474589e-004 - 0.1171564981341362 - -0.0653980895876884 - <_> - - <_> - - - - <_> - 12 6 3 13 -1. - <_> - 13 6 1 13 3. - 0 - 0.0611523091793060 - 3.6394819617271423e-003 - -0.6609907150268555 - <_> - - <_> - - - - <_> - 6 0 16 2 -1. - <_> - 10 4 8 2 2. - 1 - -0.0330386087298393 - -0.1784556061029434 - 0.0365287102758884 - <_> - - <_> - - - - <_> - 12 1 2 4 -1. - <_> - 12 1 2 2 2. - 1 - -4.0356258978135884e-004 - 0.0265953596681356 - -0.0364930182695389 - <_> - - <_> - - - - <_> - 9 2 3 4 -1. - <_> - 9 4 3 2 2. - 0 - -2.9699380975216627e-003 - 0.1788347959518433 - -0.0494079589843750 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 13 0 1 2 2. - 1 - 5.5536800064146519e-003 - 0.0206493400037289 - -0.1571733057498932 - <_> - - <_> - - - - <_> - 10 0 2 6 -1. - <_> - 10 2 2 2 3. - 0 - -0.0200246404856443 - 0.2215252071619034 - -0.0309204608201981 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 13 0 1 2 2. - 1 - -6.8768248893320560e-003 - -0.2043360024690628 - 0.0141371600329876 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - 2.7050529606640339e-003 - 0.0448820702731609 - -0.1658900976181030 - <_> - - <_> - - - - <_> - 12 0 2 1 -1. - <_> - 12 0 1 1 2. - 1 - 4.5226789079606533e-003 - -9.3675320968031883e-003 - 0.0811652764678001 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - -1.0950569994747639e-003 - -0.1635632067918778 - 0.0437799096107483 - <_> - - <_> - - - - <_> - 12 0 1 2 -1. - <_> - 12 0 1 1 2. - 1 - -9.1500708367675543e-004 - 0.1162123978137970 - -0.0409835912287235 - <_> - - <_> - - - - <_> - 8 1 11 8 -1. - <_> - 8 1 11 4 2. - 1 - 0.2840236127376556 - 0.0101290801540017 - -0.6031985282897949 - <_> - - <_> - - - - <_> - 14 6 6 8 -1. - <_> - 16 8 2 8 3. - 1 - -0.0167655404657125 - 0.0755744874477386 - -0.0479834489524364 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 11 0 1 2 2. - 0 - -1.0621249675750732e-003 - -0.1764557063579559 - 0.0372668094933033 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 13 1 2 1 3. - 1 - -0.0138594303280115 - 0.1920533031225205 - -0.0250516794621944 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 9 1 1 2 3. - 1 - 6.3116271048784256e-003 - -0.0372396595776081 - 0.1716836988925934 - <_> - - <_> - - - - <_> - 18 9 4 2 -1. - <_> - 18 9 2 2 2. - 0 - 0.0178771503269672 - 5.6739561259746552e-003 - -0.3887721002101898 - <_> - - <_> - - - - <_> - 0 9 4 2 -1. - <_> - 2 9 2 2 2. - 0 - 5.4825581610202789e-003 - 0.0303106103092432 - -0.2273005992174149 - <_> - - <_> - - - - <_> - 20 8 2 2 -1. - <_> - 20 8 2 1 2. - 1 - -0.0135532896965742 - 0.2605741918087006 - -6.3845720142126083e-003 - <_> - - <_> - - - - <_> - 2 8 2 2 -1. - <_> - 2 8 1 2 2. - 1 - 2.5274800136685371e-003 - 0.0402345992624760 - -0.1754951030015945 - <_> - - <_> - - - - <_> - 17 4 2 16 -1. - <_> - 17 12 2 8 2. - 0 - -6.4695789478719234e-003 - 0.0765883699059486 - -0.0572953782975674 - <_> - - <_> - - - - <_> - 3 4 6 15 -1. - <_> - 3 9 6 5 3. - 0 - -0.0677571967244148 - 0.2222197949886322 - -0.0331346504390240 - <_> - - <_> - - - - <_> - 16 4 4 6 -1. - <_> - 14 6 4 2 3. - 1 - -0.0845181494951248 - -0.5001984834671021 - 4.1239801794290543e-003 - <_> - - <_> - - - - <_> - 6 4 6 4 -1. - <_> - 8 6 2 4 3. - 1 - -0.0819151028990746 - -0.6500021219253540 - 9.2215994372963905e-003 - <_> - - <_> - - - - <_> - 16 9 2 1 -1. - <_> - 16 9 1 1 2. - 1 - 5.9685902670025826e-004 - 0.0317042283713818 - -0.0708710402250290 - <_> - - <_> - - - - <_> - 3 0 8 12 -1. - <_> - 5 0 4 12 2. - 0 - -0.0233892407268286 - 0.1062448024749756 - -0.0647903084754944 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 11 4 1 2 3. - 0 - -8.0898992018774152e-004 - -0.1190088987350464 - 0.0326293110847473 - <_> - - <_> - - - - <_> - 10 7 4 2 -1. - <_> - 10 7 4 1 2. - 1 - 1.9939169287681580e-003 - 0.0748168528079987 - -0.0953086316585541 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -3.4726969897747040e-003 - 0.2107000946998596 - -0.0395406186580658 - <_> - - <_> - - - - <_> - 8 10 4 7 -1. - <_> - 9 10 2 7 2. - 0 - -3.3657159656286240e-003 - 0.1270954012870789 - -0.0557358190417290 - <_> - - <_> - - - - <_> - 10 6 3 9 -1. - <_> - 11 9 1 3 9. - 0 - -0.0135759199038148 - -0.1544986963272095 - 0.0402653589844704 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 10 7 2 2 2. - 0 - 1.6253659850917757e-004 - -0.1107352972030640 - 0.0691581070423126 - <_> - - <_> - - - - <_> - 9 6 7 3 -1. - <_> - 9 7 7 1 3. - 0 - -8.3766528405249119e-004 - 0.0850445032119751 - -0.0508072786033154 - <_> - - <_> - - - - <_> - 8 15 1 2 -1. - <_> - 8 16 1 1 2. - 0 - 6.7485118051990867e-004 - 0.0338500589132309 - -0.1868139058351517 - <_> - - <_> - - - - <_> - 13 14 9 6 -1. - <_> - 16 14 3 6 3. - 0 - 0.0450863316655159 - -0.0222175400704145 - 0.1627822965383530 - <_> - - <_> - - - - <_> - 3 19 16 1 -1. - <_> - 7 19 8 1 2. - 0 - 3.5375991137698293e-004 - -0.0848611220717430 - 0.0795493721961975 - <_> - - <_> - - - - <_> - 11 18 5 2 -1. - <_> - 11 19 5 1 2. - 0 - -5.7213287800550461e-003 - -0.1520120054483414 - 8.8938418775796890e-003 - <_> - - <_> - - - - <_> - 2 18 11 2 -1. - <_> - 2 19 11 1 2. - 0 - -7.2676259151194245e-005 - 0.0744275599718094 - -0.0942571982741356 - <_> - - <_> - - - - <_> - 19 7 1 3 -1. - <_> - 19 8 1 1 3. - 0 - -1.5427060425281525e-003 - 0.0990665331482887 - -0.0142380101606250 - <_> - - <_> - - - - <_> - 6 11 1 4 -1. - <_> - 5 12 1 2 2. - 1 - -3.1625840347260237e-003 - -0.1806315034627914 - 0.0339443497359753 - <_> - - <_> - - - - <_> - 16 17 6 1 -1. - <_> - 16 17 3 1 2. - 0 - 6.6523120040073991e-004 - -0.0408945195376873 - 0.0600588507950306 - <_> - - <_> - - - - <_> - 0 17 6 1 -1. - <_> - 3 17 3 1 2. - 0 - -2.7951318770647049e-004 - 0.0879632234573364 - -0.0790218114852905 - <_> - - <_> - - - - <_> - 6 0 16 1 -1. - <_> - 10 0 8 1 2. - 0 - 2.1129949018359184e-003 - 0.0362798199057579 - -0.0841323286294937 - <_> - - <_> - - - - <_> - 0 11 6 8 -1. - <_> - 3 11 3 8 2. - 0 - 9.9497847259044647e-003 - -0.0552642494440079 - 0.1231862008571625 - <_> - - <_> - - - - <_> - 18 13 2 2 -1. - <_> - 18 13 1 2 2. - 1 - 5.4585319012403488e-003 - 0.0172714199870825 - -0.1471485942602158 - <_> - - <_> - - - - <_> - 6 2 3 1 -1. - <_> - 7 2 1 1 3. - 0 - -1.5861300053074956e-003 - 0.1724368035793304 - -0.0371524505317211 - <_> - - <_> - - - - <_> - 15 0 2 1 -1. - <_> - 15 0 1 1 2. - 0 - -3.7650260492227972e-004 - -0.1584102958440781 - 0.0420544408261776 - <_> - - <_> - - - - <_> - 7 3 2 4 -1. - <_> - 7 3 1 2 2. - <_> - 8 5 1 2 2. - 0 - 4.8947380855679512e-004 - -0.0864459276199341 - 0.0840950310230255 - <_> - - <_> - - - - <_> - 13 2 2 2 -1. - <_> - 14 2 1 1 2. - <_> - 13 3 1 1 2. - 0 - -4.2103161104023457e-004 - 0.1295838057994843 - -0.0570108108222485 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 1.7509369645267725e-003 - -0.0315696708858013 - 0.2353761047124863 - <_> - - <_> - - - - <_> - 15 0 3 9 -1. - <_> - 16 1 1 9 3. - 1 - 0.0323888994753361 - 9.8493462428450584e-003 - -0.2509359121322632 - <_> - - <_> - - - - <_> - 5 0 2 1 -1. - <_> - 6 0 1 1 2. - 0 - -1.1695439752656966e-004 - -0.1205277964472771 - 0.0572918094694614 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 15 0 1 2 2. - 0 - 5.2962708286941051e-004 - 0.0383723191916943 - -0.1212226003408432 - <_> - - <_> - - - - <_> - 0 6 16 11 -1. - <_> - 4 6 8 11 2. - 0 - -0.0166938994079828 - 0.0930273234844208 - -0.0672625899314880 - <_> - - <_> - - - - <_> - 15 3 1 2 -1. - <_> - 15 4 1 1 2. - 0 - -4.4602990965358913e-004 - -0.0971551015973091 - 0.0322637297213078 - <_> - - <_> - - - - <_> - 0 12 10 6 -1. - <_> - 5 12 5 6 2. - 0 - 0.0277058407664299 - -0.0456736497581005 - 0.1346905976533890 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 15 0 1 2 2. - 0 - 1.4168629604682792e-005 - -0.0516468510031700 - 0.0574428699910641 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 6 0 1 2 2. - 0 - 6.5597752109169960e-004 - 0.0415804497897625 - -0.1547989994287491 - <_> - - <_> - - - - <_> - 14 6 8 14 -1. - <_> - 18 6 4 7 2. - <_> - 14 13 4 7 2. - 0 - -0.0199505407363176 - 0.1015876010060310 - -0.0411945506930351 - <_> - - <_> - - - - <_> - 1 2 8 18 -1. - <_> - 1 2 4 9 2. - <_> - 5 11 4 9 2. - 0 - -0.1027738004922867 - 0.2764283120632172 - -0.0222329106181860 - <_> - - <_> - - - - <_> - 19 13 2 2 -1. - <_> - 19 13 1 2 2. - 1 - -0.0113963596522808 - -0.2909221947193146 - 7.6221348717808723e-003 - <_> - - <_> - - - - <_> - 3 13 2 2 -1. - <_> - 3 13 2 1 2. - 1 - 4.2369891889393330e-003 - 0.0289510805159807 - -0.2113339006900787 - <_> - - <_> - - - - <_> - 19 7 1 3 -1. - <_> - 19 8 1 1 3. - 0 - 1.3533539604395628e-003 - -0.0171004105359316 - 0.1120581030845642 - <_> - - <_> - - - - <_> - 0 0 18 15 -1. - <_> - 9 0 9 15 2. - 0 - 0.3803138136863709 - 0.0177929308265448 - -0.3308737874031067 - <_> - - <_> - - - - <_> - 19 17 2 2 -1. - <_> - 19 18 2 1 2. - 0 - -4.9306880100630224e-005 - 0.0574947893619537 - -0.0579947791993618 - <_> - - <_> - - - - <_> - 1 17 2 2 -1. - <_> - 1 18 2 1 2. - 0 - -2.0659419242292643e-003 - -0.2428840994834900 - 0.0264204498380423 - <_> - - <_> - - - - <_> - 15 1 3 5 -1. - <_> - 16 2 1 5 3. - 1 - -5.7952571660280228e-004 - 0.0433087497949600 - -0.0518445298075676 - <_> - - <_> - - - - <_> - 9 5 2 2 -1. - <_> - 10 5 1 2 2. - 0 - 2.9111439289408736e-005 - -0.1059674024581909 - 0.0588393807411194 - <_> - - <_> - - - - <_> - 11 3 3 3 -1. - <_> - 12 3 1 3 3. - 0 - 1.4325099982670508e-005 - -0.0778769925236702 - 0.0667654573917389 - <_> - - <_> - - - - <_> - 8 3 3 3 -1. - <_> - 9 3 1 3 3. - 0 - 7.4459682218730450e-004 - -0.0830455273389816 - 0.1016990989446640 - <_> - - <_> - - - - <_> - 11 1 3 4 -1. - <_> - 10 2 3 2 2. - 1 - -2.7282300870865583e-003 - 0.0778976604342461 - -0.0255075208842754 - <_> - - <_> - - - - <_> - 8 9 6 3 -1. - <_> - 8 10 6 1 3. - 0 - 0.0155674498528242 - 0.0105068599805236 - -0.5992534160614014 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -6.8032061681151390e-003 - 0.2631745934486389 - -0.0271215699613094 - <_> - - <_> - - - - <_> - 10 0 8 3 -1. - <_> - 9 1 8 1 3. - 1 - 0.0479384809732437 - 7.4435519054532051e-003 - -0.8811345100402832 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 11 6 3 2 2. - <_> - 8 8 3 2 2. - 0 - -1.7394230235368013e-003 - -0.1097526028752327 - 0.0552947111427784 - <_> - - <_> - - - - <_> - 11 5 9 3 -1. - <_> - 10 6 9 1 3. - 1 - 0.0201280601322651 - -0.0291494205594063 - 0.2217292040586472 - <_> - - <_> - - - - <_> - 12 9 1 3 -1. - <_> - 11 10 1 1 3. - 1 - -4.3711899779736996e-003 - -0.1292454004287720 - 0.0158917307853699 - <_> - - <_> - - - - <_> - 10 10 3 3 -1. - <_> - 9 11 3 1 3. - 1 - 0.0106578599661589 - -0.0268251299858093 - 0.2296731024980545 - <_> - - <_> - - - - <_> - 11 4 2 4 -1. - <_> - 10 5 2 2 2. - 1 - -0.0255621802061796 - -0.9601855874061585 - 2.4847979657351971e-003 - <_> - - <_> - - - - <_> - 11 4 4 2 -1. - <_> - 12 5 2 2 2. - 1 - 1.2549740495160222e-003 - 0.0654283016920090 - -0.0907150432467461 - <_> - - <_> - - - - <_> - 11 1 3 4 -1. - <_> - 10 2 3 2 2. - 1 - -0.0365839600563049 - -0.8261988759040833 - 9.8219967912882566e-004 - <_> - - <_> - - - - <_> - 11 1 4 3 -1. - <_> - 12 2 2 3 2. - 1 - -0.0104277003556490 - 0.2094039022922516 - -0.0296886507421732 - <_> - - <_> - - - - <_> - 10 3 3 4 -1. - <_> - 11 3 1 4 3. - 0 - 4.6284540439955890e-004 - -0.0957978665828705 - 0.0645048171281815 - <_> - - <_> - - - - <_> - 9 3 3 4 -1. - <_> - 10 3 1 4 3. - 0 - -1.7270300304517150e-003 - -0.1825059950351715 - 0.0435646884143353 - <_> - - <_> - - - - <_> - 8 5 6 1 -1. - <_> - 10 5 2 1 3. - 0 - -2.0097640808671713e-003 - 0.1739504039287567 - -0.0347779393196106 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 6 6 3 1 3. - 0 - -0.0105651598423719 - -0.6704695820808411 - 9.1460766270756721e-003 - <_> - - <_> - - - - <_> - 10 4 3 3 -1. - <_> - 10 5 3 1 3. - 0 - 3.6083920858800411e-003 - -0.0403180383145809 - 0.1065298020839691 - <_> - - <_> - - - - <_> - 5 12 1 2 -1. - <_> - 5 12 1 1 2. - 1 - -1.0259989649057388e-003 - -0.1457242071628571 - 0.0429517999291420 - <_> - - <_> - - - - <_> - 12 15 10 4 -1. - <_> - 17 15 5 2 2. - <_> - 12 17 5 2 2. - 0 - -3.7319560069590807e-003 - 0.0717576518654823 - -0.0291409902274609 - <_> - - <_> - - - - <_> - 0 15 10 4 -1. - <_> - 0 15 5 2 2. - <_> - 5 17 5 2 2. - 0 - 1.2519509764388204e-003 - -0.0767440795898438 - 0.0888733565807343 - <_> - - <_> - - - - <_> - 10 7 3 6 -1. - <_> - 10 9 3 2 3. - 0 - -0.0262955706566572 - -0.5425025820732117 - 6.4060981385409832e-003 - <_> - - <_> - - - - <_> - 9 7 3 6 -1. - <_> - 9 9 3 2 3. - 0 - 0.0216770898550749 - 0.0146955400705338 - -0.4240323901176453 - <_> - - <_> - - - - <_> - 13 8 3 3 -1. - <_> - 14 9 1 3 3. - 1 - 0.0127614904195070 - -0.0178909506648779 - 0.1942054033279419 - <_> - - <_> - - - - <_> - 8 8 6 8 -1. - <_> - 8 10 6 4 2. - 0 - -2.0567029714584351e-003 - 0.0677160173654556 - -0.0913681536912918 - <_> - - <_> - - - - <_> - 11 11 2 6 -1. - <_> - 9 13 2 2 3. - 1 - -7.7950339764356613e-003 - 0.0694713070988655 - -0.0326361991465092 - <_> - - <_> - - - - <_> - 8 16 2 2 -1. - <_> - 8 17 2 1 2. - 0 - 1.2084699701517820e-003 - 0.0393064506351948 - -0.1976372003555298 - <_> - - <_> - - - - <_> - 11 11 2 6 -1. - <_> - 9 13 2 2 3. - 1 - 0.0411142893135548 - -9.3598989769816399e-003 - 0.1951023042201996 - <_> - - <_> - - - - <_> - 11 11 6 2 -1. - <_> - 13 13 2 2 3. - 1 - -1.9867620430886745e-003 - 0.0893209576606750 - -0.0701979920268059 - <_> - - <_> - - - - <_> - 8 12 6 2 -1. - <_> - 8 13 6 1 2. - 0 - 4.3194511090405285e-004 - -0.0729922279715538 - 0.0872220769524574 - <_> - - <_> - - - - <_> - 9 8 3 6 -1. - <_> - 10 10 1 2 9. - 0 - -0.0128561398014426 - -0.1929104030132294 - 0.0374533012509346 - <_> - - <_> - - - - <_> - 10 8 3 1 -1. - <_> - 11 8 1 1 3. - 0 - 3.3460529521107674e-003 - -0.0173675995320082 - 0.2734157145023346 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - 3.0642180354334414e-004 - 0.0387341789901257 - -0.1539638936519623 - <_> - - <_> - - - - <_> - 19 7 1 3 -1. - <_> - 19 8 1 1 3. - 0 - 0.0104123996570706 - -2.2793370299041271e-003 - 0.4405697882175446 - <_> - - <_> - - - - <_> - 2 7 1 3 -1. - <_> - 2 8 1 1 3. - 0 - 2.8117289766669273e-003 - -0.0191402900964022 - 0.2953486144542694 - <_> - - <_> - - - - <_> - 17 5 2 2 -1. - <_> - 17 6 2 1 2. - 0 - 5.9893741272389889e-003 - 5.6822518818080425e-003 - -0.3980135917663574 - <_> - - <_> - - - - <_> - 3 5 2 2 -1. - <_> - 3 6 2 1 2. - 0 - -1.4277939953899477e-005 - 0.0752059519290924 - -0.0723551809787750 - <_> - - <_> - - - - <_> - 13 2 9 9 -1. - <_> - 16 5 3 3 9. - 0 - 0.2813890874385834 - 3.0617320444434881e-003 - -0.5306937098503113 - <_> - - <_> - - - - <_> - 0 2 9 9 -1. - <_> - 3 5 3 3 9. - 0 - -8.7479073554277420e-003 - -0.0907022207975388 - 0.0612583011388779 - <_> - - <_> - - - - <_> - 16 7 6 6 -1. - <_> - 14 9 6 2 3. - 1 - -0.0567207112908363 - 0.1773761957883835 - -0.0177465602755547 - <_> - - <_> - - - - <_> - 6 7 6 6 -1. - <_> - 8 9 2 6 3. - 1 - 0.0682970732450485 - -0.0233185198158026 - 0.2779389023780823 - <_> - - <_> - - - - <_> - 18 0 3 10 -1. - <_> - 18 0 3 5 2. - 1 - 0.1262779980897903 - 0.0121150398626924 - -0.4139586985111237 - <_> - - <_> - - - - <_> - 6 11 1 4 -1. - <_> - 6 11 1 2 2. - 1 - 6.1351219192147255e-003 - 0.0295873302966356 - -0.1923047006130219 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -1.8394199432805181e-003 - 0.1759290993213654 - -0.0258442908525467 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 9 6 1 1 2. - <_> - 10 7 1 1 2. - 0 - 2.9283049516379833e-003 - 0.0112186595797539 - -0.5041614174842835 - <_> - - <_> - - - - <_> - 9 10 4 7 -1. - <_> - 10 10 2 7 2. - 0 - -6.1085459310561419e-004 - 0.0825492888689041 - -0.0657016783952713 - <_> - - <_> - - - - <_> - 11 1 2 2 -1. - <_> - 11 1 2 1 2. - 1 - -4.8793861060403287e-004 - 0.0718109980225563 - -0.0763544067740440 - <_> - - <_> - - - - <_> - 7 3 9 6 -1. - <_> - 7 5 9 2 3. - 0 - 8.6069349199533463e-003 - 0.0407749600708485 - -0.1150725036859512 - <_> - - <_> - - - - <_> - 9 5 2 3 -1. - <_> - 9 6 2 1 3. - 0 - 1.4266039943322539e-003 - -0.0416569598019123 - 0.1679863035678864 - <_> - - <_> - - - - <_> - 11 6 1 2 -1. - <_> - 11 7 1 1 2. - 0 - 4.8269471153616905e-003 - 4.0586888790130615e-003 - -0.6345018744468689 - <_> - - <_> - - - - <_> - 10 6 1 2 -1. - <_> - 10 7 1 1 2. - 0 - 3.0349730513989925e-004 - -0.0743058621883392 - 0.0928853079676628 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 5 1 3 2. - 1 - 4.0700649842619896e-003 - 0.0176011994481087 - -0.1404276043176651 - <_> - - <_> - - - - <_> - 10 5 1 8 -1. - <_> - 10 7 1 4 2. - 0 - 1.7230060184374452e-003 - 0.0673287212848663 - -0.1114963963627815 - <_> - - <_> - - - - <_> - 5 8 13 10 -1. - <_> - 5 13 13 5 2. - 0 - -0.0429598614573479 - 0.0891637429594994 - -0.0535499900579453 - <_> - - <_> - - - - <_> - 8 6 5 4 -1. - <_> - 7 7 5 2 2. - 1 - -7.6154018752276897e-003 - 0.1131260022521019 - -0.0562405884265900 - <_> - - <_> - - - - <_> - 3 12 16 2 -1. - <_> - 11 12 8 1 2. - <_> - 3 13 8 1 2. - 0 - 0.0112040098756552 - 0.0214110501110554 - -0.3148828148841858 - <_> - - <_> - - - - <_> - 0 0 22 2 -1. - <_> - 11 0 11 2 2. - 0 - -0.0352135300636292 - -0.2060962021350861 - 0.0285860300064087 - <_> - - <_> - - - - <_> - 11 11 4 2 -1. - <_> - 13 11 2 1 2. - <_> - 11 12 2 1 2. - 0 - 4.5947679318487644e-003 - -0.0170908495783806 - 0.2270724028348923 - <_> - - <_> - - - - <_> - 11 2 4 5 -1. - <_> - 11 2 2 5 2. - 1 - 0.0457968786358833 - -0.0132303601130843 - 0.4320279061794281 - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 11 4 3 2 2. - <_> - 8 6 3 2 2. - 0 - -2.9980540275573730e-003 - -0.1264556944370270 - 0.0503671504557133 - <_> - - <_> - - - - <_> - 8 1 6 6 -1. - <_> - 10 3 2 2 9. - 0 - -5.3378548473119736e-003 - 0.0954700633883476 - -0.0588487610220909 - <_> - - <_> - - - - <_> - 7 3 9 3 -1. - <_> - 7 4 9 1 3. - 0 - 1.0418590391054749e-003 - -0.0611769407987595 - 0.0656773820519447 - <_> - - <_> - - - - <_> - 9 4 3 3 -1. - <_> - 9 5 3 1 3. - 0 - 6.4219138585031033e-004 - -0.0785840675234795 - 0.0709610804915428 - <_> - - <_> - - - - <_> - 10 3 2 4 -1. - <_> - 11 3 1 2 2. - <_> - 10 5 1 2 2. - 0 - 1.0756379924714565e-003 - 0.0413852408528328 - -0.1434291005134583 - <_> - - <_> - - - - <_> - 3 13 4 3 -1. - <_> - 3 13 2 3 2. - 1 - -5.4661920294165611e-003 - 0.1205272972583771 - -0.0477681197226048 - -0.9514755010604858 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 0 4 6 -1. - <_> - 7 0 2 3 2. - <_> - 9 3 2 3 2. - 0 - 0.0140449097380042 - -0.1175483018159866 - 0.2996670007705689 - <_> - - <_> - - - - <_> - 12 17 1 2 -1. - <_> - 12 18 1 1 2. - 0 - 1.3747519915341400e-005 - -0.0406956002116203 - 0.0532886609435081 - <_> - - <_> - - - - <_> - 11 3 3 1 -1. - <_> - 12 4 1 1 3. - 1 - 6.1071332311257720e-004 - -0.1588149964809418 - 0.0936987325549126 - <_> - - <_> - - - - <_> - 19 0 3 12 -1. - <_> - 20 0 1 12 3. - 0 - -1.2948609655722976e-003 - -0.0546279884874821 - 0.0279831998050213 - <_> - - <_> - - - - <_> - 0 5 6 9 -1. - <_> - 2 8 2 3 9. - 0 - 0.3462465107440949 - 0.0263210199773312 - -1.4812429687500000e+004 - <_> - - <_> - - - - <_> - 13 1 2 4 -1. - <_> - 14 1 1 2 2. - <_> - 13 3 1 2 2. - 0 - -3.8160590920597315e-003 - 0.2408894002437592 - -0.0292963292449713 - <_> - - <_> - - - - <_> - 5 4 1 6 -1. - <_> - 5 7 1 3 2. - 0 - 0.0341906808316708 - -2.7402290143072605e-003 - -3.1396430664062500e+003 - <_> - - <_> - - - - <_> - 13 1 2 4 -1. - <_> - 14 1 1 2 2. - <_> - 13 3 1 2 2. - 0 - 1.1889369925484061e-003 - -0.0668015033006668 - 0.1254453957080841 - <_> - - <_> - - - - <_> - 0 0 14 4 -1. - <_> - 0 0 7 2 2. - <_> - 7 2 7 2 2. - 0 - -0.0111604603007436 - 0.1404553949832916 - -0.0825128033757210 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 10 1 3 2. - 0 - 1.5963950427249074e-003 - 0.0635383874177933 - -0.1724518984556198 - <_> - - <_> - - - - <_> - 11 7 3 2 -1. - <_> - 12 8 1 2 3. - 1 - 1.0270989732816815e-003 - 0.0877216830849648 - -0.1298810988664627 - <_> - - <_> - - - - <_> - 8 10 6 3 -1. - <_> - 10 10 2 3 3. - 0 - 3.6547291092574596e-003 - -0.0919824764132500 - 0.1175205036997795 - <_> - - <_> - - - - <_> - 10 3 2 4 -1. - <_> - 10 5 2 2 2. - 0 - -1.7952709458768368e-003 - 0.1428688019514084 - -0.0768013671040535 - <_> - - <_> - - - - <_> - 16 1 3 2 -1. - <_> - 16 2 3 1 2. - 0 - -6.8708707112818956e-004 - -0.1337599009275436 - 0.0659707784652710 - <_> - - <_> - - - - <_> - 3 1 3 2 -1. - <_> - 3 2 3 1 2. - 0 - 2.2609028965234756e-003 - 0.0315253883600235 - -0.2933394014835358 - <_> - - <_> - - - - <_> - 13 1 2 4 -1. - <_> - 14 1 1 2 2. - <_> - 13 3 1 2 2. - 0 - -7.9880550038069487e-004 - 0.0926524028182030 - -0.0488657206296921 - <_> - - <_> - - - - <_> - 4 6 10 4 -1. - <_> - 4 6 5 4 2. - 1 - -0.1420563012361527 - 0.2997421920299530 - -0.0319554209709167 - <_> - - <_> - - - - <_> - 14 4 6 16 -1. - <_> - 14 12 6 8 2. - 0 - -0.0265524294227362 - 0.0938528180122375 - -0.0594301782548428 - <_> - - <_> - - - - <_> - 7 3 7 9 -1. - <_> - 7 6 7 3 3. - 0 - -0.0130338100716472 - -0.2156720012426376 - 0.0438257306814194 - <_> - - <_> - - - - <_> - 14 7 2 4 -1. - <_> - 14 7 1 4 2. - 1 - 0.0154984202235937 - -0.0141129195690155 - 0.1002783998847008 - <_> - - <_> - - - - <_> - 8 7 4 2 -1. - <_> - 8 7 4 1 2. - 1 - -2.1014609374105930e-003 - 0.1640467941761017 - -0.0664254128932953 - <_> - - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 11 9 3 2 2. - <_> - 8 11 3 2 2. - 0 - 9.5388311892747879e-003 - 0.0380934998393059 - -0.2998372018337250 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.5687920385971665e-003 - 0.2394963055849075 - -0.0462319105863571 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 8 4 1 2. - 0 - 4.2190421372652054e-003 - -0.0447862297296524 - 0.2081111967563629 - <_> - - <_> - - - - <_> - 11 5 3 2 -1. - <_> - 11 5 3 1 2. - 1 - -3.0952331144362688e-004 - -0.1258251965045929 - 0.0819644629955292 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 11 7 2 1 2. - 0 - 4.6312180347740650e-004 - -0.0968068093061447 - 0.0942978709936142 - <_> - - <_> - - - - <_> - 3 1 16 2 -1. - <_> - 3 1 8 1 2. - <_> - 11 2 8 1 2. - 0 - 2.4860999546945095e-003 - 0.0556310005486012 - -0.1515945941209793 - <_> - - <_> - - - - <_> - 8 0 6 1 -1. - <_> - 8 0 3 1 2. - 0 - -5.3660441190004349e-003 - -0.2840887904167175 - 0.0276065394282341 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - -1.3755810214206576e-003 - 0.2181538045406342 - -0.0393569506704807 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 11 4 1 2 3. - 0 - 4.6460707671940327e-003 - 0.0257408898323774 - -0.2468605041503906 - <_> - - <_> - - - - <_> - 10 7 3 3 -1. - <_> - 9 8 3 1 3. - 1 - 6.6427360288798809e-003 - -0.0522071607410908 - 0.1593783050775528 - <_> - - <_> - - - - <_> - 10 4 3 2 -1. - <_> - 11 4 1 2 3. - 0 - -8.5125081241130829e-003 - -0.5195388197898865 - 5.7587879709899426e-003 - <_> - - <_> - - - - <_> - 6 2 3 4 -1. - <_> - 6 3 3 2 2. - 0 - -0.0101865101605654 - -0.4941608011722565 - 0.0143782002851367 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 9 2 4 2 3. - 0 - 0.0338719114661217 - -0.0213674195110798 - 0.3426747918128967 - <_> - - <_> - - - - <_> - 9 1 3 3 -1. - <_> - 9 2 3 1 3. - 0 - -1.2628670083358884e-003 - 0.0815796181559563 - -0.0850919932126999 - <_> - - <_> - - - - <_> - 16 6 1 2 -1. - <_> - 16 7 1 1 2. - 0 - 5.8080098824575543e-004 - 0.0408640913665295 - -0.1904173046350479 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - -1.5919590368866920e-003 - 0.2113285958766937 - -0.0323833189904690 - <_> - - <_> - - - - <_> - 15 1 1 6 -1. - <_> - 15 3 1 2 3. - 0 - 1.9183800322934985e-003 - 0.0354224406182766 - -0.1295464038848877 - <_> - - <_> - - - - <_> - 8 9 1 3 -1. - <_> - 8 10 1 1 3. - 0 - -3.3837689552456141e-003 - -0.3920099139213562 - 0.0172848105430603 - <_> - - <_> - - - - <_> - 13 8 1 3 -1. - <_> - 13 9 1 1 3. - 0 - -4.4958260841667652e-003 - -0.6526948213577271 - 8.9287841692566872e-003 - <_> - - <_> - - - - <_> - 2 8 8 8 -1. - <_> - 2 10 8 4 2. - 0 - 0.0111234402284026 - -0.0494510792195797 - 0.1399092972278595 - <_> - - <_> - - - - <_> - 14 7 4 9 -1. - <_> - 14 10 4 3 3. - 0 - -0.0211866702884436 - 0.1402201056480408 - -0.0325610414147377 - <_> - - <_> - - - - <_> - 0 12 22 4 -1. - <_> - 0 12 11 2 2. - <_> - 11 14 11 2 2. - 0 - 0.0478131808340549 - 0.0174377001821995 - -0.4082455933094025 - <_> - - <_> - - - - <_> - 13 7 2 2 -1. - <_> - 13 7 2 1 2. - 1 - 4.3155639432370663e-003 - 0.0190359503030777 - -0.1533664017915726 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 10 8 2 2 2. - 0 - 4.8115472309291363e-003 - 0.0317865684628487 - -0.2205659002065659 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - 9.8020406439900398e-003 - -0.0368951186537743 - 0.2331008017063141 - <_> - - <_> - - - - <_> - 11 6 6 1 -1. - <_> - 11 6 3 1 2. - 1 - -3.0184770002961159e-003 - 0.1591627001762390 - -0.0529956482350826 - <_> - - <_> - - - - <_> - 9 6 6 6 -1. - <_> - 9 8 6 2 3. - 0 - 2.6722450274974108e-003 - -0.0752431228756905 - 0.0502697005867958 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - 1.2502169702202082e-003 - -0.0510912500321865 - 0.1444122940301895 - <_> - - <_> - - - - <_> - 13 8 1 3 -1. - <_> - 13 9 1 1 3. - 0 - 1.4972910284996033e-003 - 0.0268125291913748 - -0.1631575971841812 - <_> - - <_> - - - - <_> - 8 8 1 3 -1. - <_> - 8 9 1 1 3. - 0 - -2.8825521003454924e-003 - -0.4158861041069031 - 0.0182845499366522 - <_> - - <_> - - - - <_> - 9 6 5 3 -1. - <_> - 9 7 5 1 3. - 0 - -2.2845040075480938e-003 - 0.1172616034746170 - -0.0501361489295959 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 4 1 2 3. - 0 - 5.2596088498830795e-003 - 0.0249501708894968 - -0.3013161122798920 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - 1.5561799518764019e-003 - -0.1046281009912491 - 0.0718232467770576 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 4 4 2 2. - 0 - -2.5602891109883785e-003 - 0.1615357995033264 - -0.0442454107105732 - <_> - - <_> - - - - <_> - 13 17 3 3 -1. - <_> - 13 18 3 1 3. - 0 - 8.9566741371527314e-004 - 0.0281135197728872 - -0.0869038105010986 - <_> - - <_> - - - - <_> - 9 4 2 1 -1. - <_> - 10 4 1 1 2. - 0 - 1.3984919860376976e-005 - -0.1063700988888741 - 0.0642370209097862 - <_> - - <_> - - - - <_> - 16 6 1 2 -1. - <_> - 16 7 1 1 2. - 0 - -3.0262451036833227e-004 - -0.1656976044178009 - 0.0597518086433411 - <_> - - <_> - - - - <_> - 2 9 4 11 -1. - <_> - 4 9 2 11 2. - 0 - -2.5108361151069403e-003 - 0.0889127776026726 - -0.0726525411009789 - <_> - - <_> - - - - <_> - 16 14 2 2 -1. - <_> - 16 14 1 2 2. - 1 - 1.9389450317248702e-003 - 0.0291525200009346 - -0.0918663889169693 - <_> - - <_> - - - - <_> - 9 8 2 2 -1. - <_> - 9 8 1 1 2. - <_> - 10 9 1 1 2. - 0 - 7.3843088466674089e-004 - -0.0420579314231873 - 0.1599503010511398 - <_> - - <_> - - - - <_> - 16 14 2 2 -1. - <_> - 16 14 1 2 2. - 1 - -3.6558669526129961e-003 - -0.0951426774263382 - 0.0170930493623018 - <_> - - <_> - - - - <_> - 0 9 8 11 -1. - <_> - 4 9 4 11 2. - 0 - 0.0269057191908360 - -0.0516771413385868 - 0.1244539991021156 - <_> - - <_> - - - - <_> - 16 6 1 2 -1. - <_> - 16 7 1 1 2. - 0 - 1.5600489859934896e-004 - 0.0480495616793633 - -0.1082883030176163 - <_> - - <_> - - - - <_> - 11 4 4 1 -1. - <_> - 12 5 2 1 2. - 1 - -2.9363629437284544e-005 - 0.0776766166090965 - -0.0836022272706032 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 10 1 3 2. - 0 - -0.0131527502089739 - -0.5362514257431030 - 9.8441755399107933e-003 - <_> - - <_> - - - - <_> - 10 7 1 6 -1. - <_> - 10 10 1 3 2. - 0 - 1.2583429925143719e-003 - 0.0366974808275700 - -0.1978503018617630 - <_> - - <_> - - - - <_> - 8 4 6 5 -1. - <_> - 8 4 3 5 2. - 0 - -0.0352802313864231 - 0.2876056134700775 - -0.0243325103074312 - <_> - - <_> - - - - <_> - 7 3 4 4 -1. - <_> - 8 3 2 4 2. - 0 - 1.0623750276863575e-003 - -0.0649361163377762 - 0.1077542006969452 - <_> - - <_> - - - - <_> - 13 6 1 2 -1. - <_> - 13 7 1 1 2. - 0 - 1.3485189811035525e-005 - -0.0919174477458000 - 0.0594762712717056 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 6 3 2 2. - <_> - 11 8 3 2 2. - 0 - 2.6417789049446583e-003 - 0.0526227317750454 - -0.1338035017251968 - <_> - - <_> - - - - <_> - 7 7 10 3 -1. - <_> - 7 8 10 1 3. - 0 - -4.2458991520106792e-003 - 0.1562263071537018 - -0.0397152192890644 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 7 1 2 2. - 1 - -0.0127474498003721 - -0.3963215947151184 - 0.0168924108147621 - <_> - - <_> - - - - <_> - 11 10 1 3 -1. - <_> - 11 11 1 1 3. - 0 - 5.0329609075561166e-004 - -0.0464489795267582 - 0.0874528288841248 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -1.3987520105729345e-005 - 0.0908190235495567 - -0.0834910869598389 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 1 1 1 3. - 0 - 3.3579400042071939e-004 - 0.0302316602319479 - -0.0843499600887299 - <_> - - <_> - - - - <_> - 5 0 6 16 -1. - <_> - 5 0 3 8 2. - <_> - 8 8 3 8 2. - 0 - 5.5269408039748669e-003 - -0.0738580897450447 - 0.0856688171625137 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 1 1 1 3. - 0 - -1.7237789870705456e-004 - -0.0706095770001411 - 0.0341582894325256 - <_> - - <_> - - - - <_> - 9 0 2 1 -1. - <_> - 9 0 1 1 2. - 1 - -2.7978639118373394e-003 - 0.1951501071453095 - -0.0338449887931347 - <_> - - <_> - - - - <_> - 15 1 3 1 -1. - <_> - 16 1 1 1 3. - 0 - -1.4513960195472464e-005 - 0.0436141714453697 - -0.0347471497952938 - <_> - - <_> - - - - <_> - 4 1 3 1 -1. - <_> - 5 1 1 1 3. - 0 - 6.4136547734960914e-004 - 0.0409887582063675 - -0.1733229011297226 - <_> - - <_> - - - - <_> - 6 0 16 2 -1. - <_> - 6 1 16 1 2. - 0 - -9.5870634540915489e-003 - 0.1479877978563309 - -0.0335172601044178 - <_> - - <_> - - - - <_> - 6 17 3 3 -1. - <_> - 6 18 3 1 3. - 0 - -1.6748090274631977e-003 - -0.1828985959291458 - 0.0340562500059605 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - -3.5602890420705080e-004 - -0.0904502719640732 - 0.0296894405037165 - <_> - - <_> - - - - <_> - 6 13 2 2 -1. - <_> - 6 13 1 1 2. - <_> - 7 14 1 1 2. - 0 - -2.5170370936393738e-003 - 0.3326792120933533 - -0.0191509108990431 - <_> - - <_> - - - - <_> - 9 17 7 3 -1. - <_> - 9 18 7 1 3. - 0 - 3.6662290804088116e-003 - 0.0207946896553040 - -0.1146228983998299 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - 3.3933550585061312e-003 - -0.0206701904535294 - 0.2856794893741608 - <_> - - <_> - - - - <_> - 14 11 2 1 -1. - <_> - 14 11 1 1 2. - 1 - -9.3351822579279542e-004 - 0.0877352133393288 - -0.0416677109897137 - <_> - - <_> - - - - <_> - 6 9 3 4 -1. - <_> - 6 9 3 2 2. - 1 - 0.0155879398807883 - 0.0323991589248180 - -0.1978013962507248 - <_> - - <_> - - - - <_> - 10 2 4 9 -1. - <_> - 10 5 4 3 3. - 0 - 3.8261379813775420e-004 - -0.0883363932371140 - 0.0558091104030609 - <_> - - <_> - - - - <_> - 7 17 2 3 -1. - <_> - 7 18 2 1 3. - 0 - 1.2352470075711608e-003 - 0.0342702902853489 - -0.1784871965646744 - <_> - - <_> - - - - <_> - 8 7 7 2 -1. - <_> - 8 8 7 1 2. - 0 - 7.5910572195425630e-004 - -0.0557783618569374 - 0.0618570707738400 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 8 1 1 3. - 0 - 2.8413049876689911e-003 - -0.0270835198462009 - 0.2320352941751480 - <_> - - <_> - - - - <_> - 14 8 2 2 -1. - <_> - 14 8 1 2 2. - 0 - -1.4313060091808438e-005 - 0.0660509318113327 - -0.0597520694136620 - <_> - - <_> - - - - <_> - 2 5 2 2 -1. - <_> - 2 6 2 1 2. - 0 - -3.6771351005882025e-003 - -0.4004508852958679 - 0.0143874799832702 - <_> - - <_> - - - - <_> - 13 8 3 2 -1. - <_> - 14 8 1 2 3. - 0 - -2.5888609234243631e-003 - 0.1122099980711937 - -0.0471371896564960 - <_> - - <_> - - - - <_> - 6 8 2 2 -1. - <_> - 7 8 1 2 2. - 0 - 1.1471610050648451e-003 - 0.0473305508494377 - -0.1319912970066071 - <_> - - <_> - - - - <_> - 11 0 10 6 -1. - <_> - 16 0 5 3 2. - <_> - 11 3 5 3 2. - 0 - 0.0165016409009695 - -0.0345978289842606 - 0.0957699418067932 - <_> - - <_> - - - - <_> - 6 3 10 2 -1. - <_> - 6 3 5 1 2. - <_> - 11 4 5 1 2. - 0 - 3.3293468877673149e-003 - 0.0412587188184261 - -0.1655870974063873 - <_> - - <_> - - - - <_> - 13 11 2 2 -1. - <_> - 14 11 1 1 2. - <_> - 13 12 1 1 2. - 0 - 1.7063439590856433e-003 - -0.0325846299529076 - 0.2761943936347961 - <_> - - <_> - - - - <_> - 0 15 8 5 -1. - <_> - 2 15 4 5 2. - 0 - -2.7118679136037827e-003 - 0.0896090418100357 - -0.0648580566048622 - <_> - - <_> - - - - <_> - 5 1 15 3 -1. - <_> - 5 2 15 1 3. - 0 - -0.0419438593089581 - -0.5332993268966675 - 6.9506950676441193e-003 - <_> - - <_> - - - - <_> - 0 15 4 5 -1. - <_> - 2 15 2 5 2. - 0 - 2.2219200618565083e-003 - -0.0563441812992096 - 0.1051039993762970 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 9 9 1 2 3. - 1 - 0.0443964712321758 - 8.1383727956563234e-004 - -1.0001629590988159 - <_> - - <_> - - - - <_> - 11 7 6 1 -1. - <_> - 13 9 2 1 3. - 1 - -6.6766492091119289e-003 - -0.1404832005500794 - 0.0436470806598663 - <_> - - <_> - - - - <_> - 14 8 1 3 -1. - <_> - 13 9 1 1 3. - 1 - -0.0140533102676272 - -0.7801256179809570 - 2.0627910271286964e-003 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 10 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - 2.8836489946115762e-005 - -0.0698651000857353 - 0.0815502628684044 - <_> - - <_> - - - - <_> - 11 1 2 5 -1. - <_> - 11 1 1 5 2. - 1 - 0.0232469495385885 - -0.0102301798760891 - 0.2224310040473938 - <_> - - <_> - - - - <_> - 7 4 3 6 -1. - <_> - 8 6 1 2 9. - 0 - -0.0184246506541967 - -0.2130834013223648 - 0.0302489604800940 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 5 4 2 2. - 0 - -0.0114840297028422 - 0.1942780017852783 - -0.0301982108503580 - <_> - - <_> - - - - <_> - 9 3 3 9 -1. - <_> - 10 6 1 3 9. - 0 - -0.0112780500203371 - -0.1828068941831589 - 0.0321260094642639 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 9 8 4 1 2. - 0 - 8.0079799517989159e-003 - -0.0221458803862333 - 0.2803351879119873 - <_> - - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 7 1 1 3. - 0 - 2.4508950300514698e-003 - -0.0315733589231968 - 0.1902862042188644 - <_> - - <_> - - - - <_> - 11 7 4 1 -1. - <_> - 12 7 2 1 2. - 0 - -7.3367758886888623e-004 - 0.0628828331828117 - -0.0294108092784882 - <_> - - <_> - - - - <_> - 7 7 4 1 -1. - <_> - 8 7 2 1 2. - 0 - 4.7427918761968613e-003 - 0.0186592005193233 - -0.3619312047958374 - <_> - - <_> - - - - <_> - 20 11 2 3 -1. - <_> - 20 11 1 3 2. - 1 - -0.0151663096621633 - -0.3008362054824829 - 5.1251458935439587e-003 - <_> - - <_> - - - - <_> - 7 8 3 1 -1. - <_> - 8 8 1 1 3. - 0 - 2.0500000100582838e-003 - -0.0338697806000710 - 0.1667698025703430 - <_> - - <_> - - - - <_> - 20 11 2 3 -1. - <_> - 20 11 1 3 2. - 1 - 8.9623825624585152e-003 - 9.9547952413558960e-003 - -0.1332125961780548 - <_> - - <_> - - - - <_> - 2 11 3 2 -1. - <_> - 2 11 3 1 2. - 1 - 5.8658542111515999e-003 - 0.0280313398689032 - -0.2109428048133850 - <_> - - <_> - - - - <_> - 18 10 2 10 -1. - <_> - 18 15 2 5 2. - 0 - 7.1393670514225960e-003 - -0.0332738682627678 - 0.0926091969013214 - <_> - - <_> - - - - <_> - 2 10 2 10 -1. - <_> - 2 15 2 5 2. - 0 - -2.3449780419468880e-003 - 0.0960211083292961 - -0.0812955573201180 - <_> - - <_> - - - - <_> - 13 12 8 8 -1. - <_> - 17 12 4 4 2. - <_> - 13 16 4 4 2. - 0 - 6.0673272237181664e-003 - -0.0371607393026352 - 0.0595638193190098 - <_> - - <_> - - - - <_> - 1 12 8 8 -1. - <_> - 1 12 4 4 2. - <_> - 5 16 4 4 2. - 0 - -7.9464316368103027e-003 - 0.1279087066650391 - -0.0606624707579613 - <_> - - <_> - - - - <_> - 13 15 1 2 -1. - <_> - 13 16 1 1 2. - 0 - 6.3600740395486355e-004 - 0.0248379409313202 - -0.1169919967651367 - <_> - - <_> - - - - <_> - 8 15 1 2 -1. - <_> - 8 16 1 1 2. - 0 - -5.9671682538464665e-004 - -0.1757982969284058 - 0.0396440103650093 - <_> - - <_> - - - - <_> - 0 5 22 12 -1. - <_> - 0 5 11 12 2. - 0 - 0.3873338103294373 - 0.0124545395374298 - -0.4646933972835541 - <_> - - <_> - - - - <_> - 3 0 12 10 -1. - <_> - 3 5 12 5 2. - 0 - 0.2096173018217087 - 8.1857265904545784e-003 - -0.6081448793411255 - <_> - - <_> - - - - <_> - 13 0 6 1 -1. - <_> - 15 0 2 1 3. - 0 - -3.6388849839568138e-003 - -0.1947824060916901 - 0.0263407006859779 - <_> - - <_> - - - - <_> - 6 14 2 4 -1. - <_> - 6 14 1 2 2. - <_> - 7 16 1 2 2. - 0 - -3.9718127809464931e-003 - 0.2773989140987396 - -0.0220290496945381 - <_> - - <_> - - - - <_> - 14 12 2 2 -1. - <_> - 14 12 1 2 2. - 0 - -8.7379878095816821e-005 - 0.0368669889867306 - -0.0343074798583984 - <_> - - <_> - - - - <_> - 7 9 7 6 -1. - <_> - 7 11 7 2 3. - 0 - -0.0492151416838169 - -0.4526224136352539 - 0.0125790601596236 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - -1.6017559682950377e-003 - 0.2002131044864655 - -0.0430424399673939 - <_> - - <_> - - - - <_> - 6 12 2 2 -1. - <_> - 7 12 1 2 2. - 0 - -1.4037380424269941e-005 - 0.0733637064695358 - -0.0792421996593475 - <_> - - <_> - - - - <_> - 17 0 5 10 -1. - <_> - 17 0 5 5 2. - 1 - 0.2011111974716187 - 7.1724099107086658e-003 - -0.3625296056270599 - <_> - - <_> - - - - <_> - 10 5 1 6 -1. - <_> - 10 8 1 3 2. - 0 - 1.1730849510058761e-003 - 0.0454830899834633 - -0.1236419975757599 - <_> - - <_> - - - - <_> - 11 5 1 4 -1. - <_> - 11 6 1 2 2. - 0 - -4.1541741666151211e-005 - 0.0536581911146641 - -0.0577384196221828 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 9 7 2 1 2. - 0 - 3.6186390207149088e-004 - -0.0898434072732925 - 0.0768973082304001 - <_> - - <_> - - - - <_> - 10 7 3 6 -1. - <_> - 10 9 3 2 3. - 0 - -5.7938909158110619e-003 - -0.1396186053752899 - 0.0301404297351837 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - -9.3461759388446808e-004 - 0.1350739002227783 - -0.0466728694736958 - <_> - - <_> - - - - <_> - 14 0 3 6 -1. - <_> - 15 1 1 6 3. - 1 - 0.0402812585234642 - 5.6996531784534454e-003 - -0.5340784788131714 - <_> - - <_> - - - - <_> - 8 0 6 3 -1. - <_> - 7 1 6 1 3. - 1 - -0.0233437307178974 - -0.5659263134002686 - 9.9596958607435226e-003 - <_> - - <_> - - - - <_> - 13 5 3 8 -1. - <_> - 14 5 1 8 3. - 0 - 0.0108349798247218 - -0.0207273904234171 - 0.1392078995704651 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 8 0 3 1 2. - 1 - -0.0106922797858715 - -0.3903450071811676 - 0.0148586295545101 - <_> - - <_> - - - - <_> - 13 5 3 8 -1. - <_> - 14 5 1 8 3. - 0 - -3.7577420007437468e-003 - 0.0727097764611244 - -0.0554852411150932 - <_> - - <_> - - - - <_> - 6 5 3 8 -1. - <_> - 7 5 1 8 3. - 0 - 4.8496359959244728e-003 - -0.0441440790891647 - 0.1452039927244186 - <_> - - <_> - - - - <_> - 14 0 4 1 -1. - <_> - 14 0 2 1 2. - 0 - -2.0216009579598904e-003 - -0.1222824007272720 - 0.0195893291383982 - <_> - - <_> - - - - <_> - 11 4 1 4 -1. - <_> - 10 5 1 2 2. - 1 - -3.0792229808866978e-003 - -0.1373960971832275 - 0.0442691594362259 - <_> - - <_> - - - - <_> - 2 1 18 3 -1. - <_> - 8 1 6 3 3. - 0 - -0.0304458104074001 - 0.1040337979793549 - -0.0630970969796181 - <_> - - <_> - - - - <_> - 9 0 9 1 -1. - <_> - 12 3 3 1 3. - 1 - 0.0321410596370697 - -0.0346904806792736 - 0.1973233968019486 - <_> - - <_> - - - - <_> - 12 14 4 3 -1. - <_> - 12 15 4 1 3. - 0 - 1.0678219841793180e-003 - 0.0311458706855774 - -0.0744919031858444 - <_> - - <_> - - - - <_> - 8 4 7 6 -1. - <_> - 6 6 7 2 3. - 1 - 0.0575947389006615 - -0.0211557801812887 - 0.2782573997974396 - <_> - - <_> - - - - <_> - 14 10 2 1 -1. - <_> - 14 10 1 1 2. - 1 - -4.3557130265980959e-004 - 0.0705622509121895 - -0.0439413003623486 - <_> - - <_> - - - - <_> - 8 10 1 2 -1. - <_> - 8 10 1 1 2. - 1 - 2.6335280854254961e-003 - 0.0343430414795876 - -0.1972844004631043 - <_> - - <_> - - - - <_> - 14 10 4 1 -1. - <_> - 15 11 2 1 2. - 1 - -1.8992539844475687e-004 - 0.0381835885345936 - -0.0398992300033569 - <_> - - <_> - - - - <_> - 8 10 1 4 -1. - <_> - 7 11 1 2 2. - 1 - 2.3401959333568811e-003 - 0.0434998609125614 - -0.1429668962955475 - <_> - - <_> - - - - <_> - 2 14 20 4 -1. - <_> - 7 14 10 4 2. - 0 - 0.0229362603276968 - -0.0453273393213749 - 0.0966574102640152 - <_> - - <_> - - - - <_> - 8 15 2 1 -1. - <_> - 8 15 1 1 2. - 1 - -9.9645974114537239e-004 - -0.1301389932632446 - 0.0429476015269756 - <_> - - <_> - - - - <_> - 10 12 2 3 -1. - <_> - 10 13 2 1 3. - 0 - -1.6800489975139499e-003 - 0.1212913990020752 - -0.0482793003320694 - <_> - - <_> - - - - <_> - 10 12 1 2 -1. - <_> - 10 13 1 1 2. - 0 - 1.4437539903155994e-005 - -0.0761201977729797 - 0.0832460522651672 - <_> - - <_> - - - - <_> - 11 7 1 12 -1. - <_> - 11 13 1 6 2. - 0 - -0.0248431898653507 - -0.1338019073009491 - 0.0132207795977592 - <_> - - <_> - - - - <_> - 10 11 1 9 -1. - <_> - 10 14 1 3 3. - 0 - -1.0164140257984400e-003 - 0.1027292981743813 - -0.0768023431301117 - <_> - - <_> - - - - <_> - 17 8 1 2 -1. - <_> - 17 9 1 1 2. - 0 - -4.1430609417147934e-004 - -0.1124525964260101 - 0.0305149108171463 - <_> - - <_> - - - - <_> - 4 8 1 2 -1. - <_> - 4 9 1 1 2. - 0 - -6.7945162300020456e-004 - -0.1632515043020248 - 0.0335361696779728 - <_> - - <_> - - - - <_> - 8 11 7 3 -1. - <_> - 8 12 7 1 3. - 0 - 0.0194955207407475 - 5.7650068774819374e-003 - -0.4526542127132416 - <_> - - <_> - - - - <_> - 8 14 6 6 -1. - <_> - 8 17 6 3 2. - 0 - -5.3661768324673176e-003 - 0.0997181013226509 - -0.0565159097313881 - <_> - - <_> - - - - <_> - 10 14 3 4 -1. - <_> - 10 16 3 2 2. - 0 - 5.6726497132331133e-004 - -0.0608695596456528 - 0.0793143436312675 - <_> - - <_> - - - - <_> - 0 4 20 3 -1. - <_> - 10 4 10 3 2. - 0 - 0.1302043944597244 - 8.3379819989204407e-003 - -0.6465747952461243 - <_> - - <_> - - - - <_> - 11 6 4 10 -1. - <_> - 11 6 4 5 2. - 1 - -0.1551728993654251 - -0.1994746029376984 - 2.8714579530060291e-003 - <_> - - <_> - - - - <_> - 5 6 4 3 -1. - <_> - 5 7 4 1 3. - 0 - -0.0101033896207809 - -0.5550448894500732 - 9.4422968104481697e-003 - <_> - - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 18 1 1 2. - 0 - -5.3147180005908012e-004 - -0.1153801009058952 - 0.0250665992498398 - <_> - - <_> - - - - <_> - 10 11 2 3 -1. - <_> - 10 12 2 1 3. - 0 - 2.7250559069216251e-003 - -0.0313892886042595 - 0.1699489951133728 - <_> - - <_> - - - - <_> - 11 13 1 2 -1. - <_> - 11 14 1 1 2. - 0 - 5.7027460570679978e-005 - -0.0530735589563847 - 0.0539626814424992 - <_> - - <_> - - - - <_> - 4 10 13 10 -1. - <_> - 4 15 13 5 2. - 0 - -0.0155320297926664 - 0.0798271894454956 - -0.0676809474825859 - <_> - - <_> - - - - <_> - 11 16 2 1 -1. - <_> - 11 16 1 1 2. - 1 - 8.5362847894430161e-003 - -7.0293392054736614e-003 - 0.3080514967441559 - <_> - - <_> - - - - <_> - 11 16 1 2 -1. - <_> - 11 16 1 1 2. - 1 - -3.7575151509372517e-005 - 0.0846639201045036 - -0.0763994827866554 - <_> - - <_> - - - - <_> - 11 12 1 4 -1. - <_> - 11 14 1 2 2. - 0 - -8.6169335991144180e-003 - -0.2509947121143341 - 6.7693921737372875e-003 - <_> - - <_> - - - - <_> - 5 14 5 3 -1. - <_> - 5 15 5 1 3. - 0 - -4.6231658197939396e-003 - -0.2175658047199249 - 0.0263029690831900 - <_> - - <_> - - - - <_> - 9 6 10 8 -1. - <_> - 9 8 10 4 2. - 0 - -3.0669190455228090e-003 - 0.0490402691066265 - -0.0293889008462429 - <_> - - <_> - - - - <_> - 10 5 1 4 -1. - <_> - 10 6 1 2 2. - 0 - -2.0297299488447607e-004 - 0.0731293782591820 - -0.0736500993371010 - <_> - - <_> - - - - <_> - 10 5 2 2 -1. - <_> - 10 6 2 1 2. - 0 - 3.7411341327242553e-004 - -0.0570024289190769 - 0.1157651022076607 - <_> - - <_> - - - - <_> - 10 3 6 2 -1. - <_> - 10 3 6 1 2. - 1 - -3.6344649270176888e-003 - -0.1203356012701988 - 0.0512672588229179 - <_> - - <_> - - - - <_> - 9 0 5 6 -1. - <_> - 9 2 5 2 3. - 0 - -0.0417089797556400 - 0.1725593060255051 - -0.0255250502377748 - <_> - - <_> - - - - <_> - 8 4 6 6 -1. - <_> - 8 7 6 3 2. - 0 - -0.0384033992886543 - -0.5657055974006653 - 9.7671225666999817e-003 - <_> - - <_> - - - - <_> - 11 2 1 16 -1. - <_> - 11 10 1 8 2. - 0 - 0.0413298010826111 - 1.8378839595243335e-003 - -0.7432677745819092 - <_> - - <_> - - - - <_> - 9 13 4 4 -1. - <_> - 10 13 2 4 2. - 0 - 5.1363147795200348e-003 - -0.0357783697545528 - 0.1566379070281982 - <_> - - <_> - - - - <_> - 2 2 18 3 -1. - <_> - 2 3 18 1 3. - 0 - -0.0433872006833553 - -0.7418355941772461 - 7.4417991563677788e-003 - <_> - - <_> - - - - <_> - 0 8 15 12 -1. - <_> - 5 8 5 12 3. - 0 - -0.3933387994766235 - -0.8078219294548035 - 5.0263358280062675e-003 - <_> - - <_> - - - - <_> - 18 5 3 2 -1. - <_> - 18 5 3 1 2. - 1 - -4.5350207947194576e-003 - -0.1064238995313644 - 0.0157278403639793 - <_> - - <_> - - - - <_> - 4 5 2 3 -1. - <_> - 4 5 1 3 2. - 1 - 0.0199195295572281 - 6.0822288505733013e-003 - -0.8291648030281067 - <_> - - <_> - - - - <_> - 11 2 1 16 -1. - <_> - 11 10 1 8 2. - 0 - 0.0237305890768766 - 6.4080459997057915e-003 - -0.1686720997095108 - <_> - - <_> - - - - <_> - 3 6 10 8 -1. - <_> - 3 8 10 4 2. - 0 - -0.0285529792308807 - 0.2090290039777756 - -0.0254014208912849 - <_> - - <_> - - - - <_> - 10 6 2 9 -1. - <_> - 10 9 2 3 3. - 0 - -0.0101532200351357 - -0.1743156015872955 - 0.0322794616222382 - <_> - - <_> - - - - <_> - 7 9 4 7 -1. - <_> - 8 10 2 7 2. - 1 - -0.0137432198971510 - 0.1448151022195816 - -0.0380156598985195 - <_> - - <_> - - - - <_> - 16 8 6 6 -1. - <_> - 14 10 6 2 3. - 1 - -0.0500180087983608 - 0.1279361993074417 - -0.0170246902853251 - <_> - - <_> - - - - <_> - 6 8 6 6 -1. - <_> - 8 10 2 6 3. - 1 - 7.3427949100732803e-003 - -0.0619666613638401 - 0.0967767834663391 - <_> - - <_> - - - - <_> - 17 13 2 1 -1. - <_> - 17 13 1 1 2. - 0 - -2.8415350243449211e-005 - 0.0382223390042782 - -0.0345788709819317 - <_> - - <_> - - - - <_> - 1 16 7 2 -1. - <_> - 1 17 7 1 2. - 0 - -4.7856881283223629e-003 - -0.2331856042146683 - 0.0263585895299912 - <_> - - <_> - - - - <_> - 16 15 4 4 -1. - <_> - 16 17 4 2 2. - 0 - -0.0259148906916380 - -0.3986401855945587 - 5.1441029645502567e-003 - <_> - - <_> - - - - <_> - 2 15 4 4 -1. - <_> - 2 17 4 2 2. - 0 - -2.9252108652144670e-004 - 0.0714962482452393 - -0.0804304033517838 - <_> - - <_> - - - - <_> - 17 10 2 9 -1. - <_> - 17 13 2 3 3. - 0 - -1.1403319658711553e-003 - 0.0546250194311142 - -0.0389245301485062 - <_> - - <_> - - - - <_> - 3 13 2 1 -1. - <_> - 4 13 1 1 2. - 0 - 8.4561068797484040e-004 - 0.0336058288812637 - -0.1625137031078339 - <_> - - <_> - - - - <_> - 5 6 15 12 -1. - <_> - 5 12 15 6 2. - 0 - 0.0655370205640793 - -0.0431040599942207 - 0.1217345967888832 - <_> - - <_> - - - - <_> - 11 6 10 4 -1. - <_> - 11 6 5 4 2. - 1 - -0.1426808983087540 - -0.3979291021823883 - 0.0144901797175407 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 7 1 3 2. - 1 - -0.0190596003085375 - 0.1452665030956268 - -8.6782136932015419e-003 - <_> - - <_> - - - - <_> - 3 8 6 12 -1. - <_> - 3 12 6 4 3. - 0 - -0.0155157698318362 - 0.1113314032554627 - -0.0536970309913158 - <_> - - <_> - - - - <_> - 16 2 4 10 -1. - <_> - 16 2 4 5 2. - 1 - 0.1388541013002396 - -5.0534959882497787e-003 - 0.1678923964500427 - <_> - - <_> - - - - <_> - 6 2 10 4 -1. - <_> - 6 2 5 4 2. - 1 - 0.1703386008739471 - 0.0100477198138833 - -0.6449456810951233 - <_> - - <_> - - - - <_> - 11 12 5 6 -1. - <_> - 11 15 5 3 2. - 0 - 0.0526464506983757 - 3.6884329747408628e-003 - -0.1877508014440537 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 1 2 2. - 1 - -7.9300440847873688e-003 - -0.3244206905364990 - 0.0161161608994007 - <_> - - <_> - - - - <_> - 8 2 6 15 -1. - <_> - 10 7 2 5 9. - 0 - 0.3159322142601013 - -0.0128461997956038 - 0.4556333124637604 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 8 8 1 2 9. - 0 - 8.8319703936576843e-003 - 0.0524103008210659 - -0.1141491979360580 - <_> - - <_> - - - - <_> - 11 6 3 3 -1. - <_> - 12 7 1 1 9. - 0 - -0.0129738003015518 - 0.2378648072481155 - -0.0203137602657080 - <_> - - <_> - - - - <_> - 6 1 9 3 -1. - <_> - 5 2 9 1 3. - 1 - 3.0844169668853283e-003 - 0.0603804588317871 - -0.1009114012122154 - <_> - - <_> - - - - <_> - 11 1 4 11 -1. - <_> - 12 2 2 11 2. - 1 - -0.0278399698436260 - 0.1008429005742073 - -0.0105456700548530 - <_> - - <_> - - - - <_> - 8 7 6 6 -1. - <_> - 8 7 3 3 2. - <_> - 11 10 3 3 2. - 0 - -3.0661900527775288e-003 - -0.1045947000384331 - 0.0512402988970280 - <_> - - <_> - - - - <_> - 11 3 4 4 -1. - <_> - 13 3 2 2 2. - <_> - 11 5 2 2 2. - 0 - -8.1280972808599472e-003 - 0.1510628014802933 - -0.0196443498134613 - <_> - - <_> - - - - <_> - 4 7 4 4 -1. - <_> - 6 7 2 4 2. - 0 - 0.0387679301202297 - 6.2415110878646374e-003 - -0.8395208716392517 - <_> - - <_> - - - - <_> - 8 1 6 14 -1. - <_> - 8 1 3 14 2. - 0 - 0.0663393586874008 - -0.0238701999187469 - 0.2262579947710037 - <_> - - <_> - - - - <_> - 9 0 4 10 -1. - <_> - 10 0 2 10 2. - 0 - -2.9363119974732399e-003 - -0.1504088938236237 - 0.0366939604282379 - <_> - - <_> - - - - <_> - 11 5 1 4 -1. - <_> - 11 5 1 2 2. - 1 - -9.2636849731206894e-003 - 0.1202069967985153 - -0.0112933199852705 - <_> - - <_> - - - - <_> - 11 5 4 1 -1. - <_> - 11 5 2 1 2. - 1 - 0.0133614903315902 - 0.0153417997062206 - -0.3525857031345367 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - 4.6068900264799595e-003 - -0.0453614592552185 - 0.0555423982441425 - <_> - - <_> - - - - <_> - 5 6 1 2 -1. - <_> - 5 7 1 1 2. - 0 - 5.9639662504196167e-004 - 0.0321203917264938 - -0.1770257949829102 - <_> - - <_> - - - - <_> - 16 5 1 3 -1. - <_> - 16 6 1 1 3. - 0 - 1.5830510528758168e-004 - 0.0429004393517971 - -0.0805149599909782 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - 9.4060867559164762e-004 - -0.0398821607232094 - 0.1345465928316116 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 11 5 2 3 2. - 0 - -0.0384631194174290 - -1. - 1.4261410105973482e-003 - <_> - - <_> - - - - <_> - 7 5 4 3 -1. - <_> - 9 5 2 3 2. - 0 - 1.2119730236008763e-003 - -0.1046990007162094 - 0.0657109469175339 - <_> - - <_> - - - - <_> - 8 1 6 14 -1. - <_> - 10 1 2 14 3. - 0 - -5.8379401452839375e-003 - 0.1471531987190247 - -0.0656102895736694 - <_> - - <_> - - - - <_> - 8 4 1 4 -1. - <_> - 8 5 1 2 2. - 0 - -1.4856379712000489e-003 - -0.1636724025011063 - 0.0360014699399471 - <_> - - <_> - - - - <_> - 12 7 2 4 -1. - <_> - 13 7 1 2 2. - <_> - 12 9 1 2 2. - 0 - -4.6175359748303890e-003 - 0.1889287978410721 - -0.0146633898839355 - <_> - - <_> - - - - <_> - 8 7 2 4 -1. - <_> - 8 7 1 2 2. - <_> - 9 9 1 2 2. - 0 - 1.9380920275580138e-004 - -0.0708647668361664 - 0.0936045572161675 - <_> - - <_> - - - - <_> - 13 6 1 2 -1. - <_> - 13 7 1 1 2. - 0 - -2.9661089647561312e-003 - -0.6180348992347717 - 8.6903069168329239e-003 - <_> - - <_> - - - - <_> - 8 6 1 2 -1. - <_> - 8 7 1 1 2. - 0 - 1.4307440324046183e-005 - -0.0905125364661217 - 0.0598042383790016 - <_> - - <_> - - - - <_> - 11 6 3 2 -1. - <_> - 11 7 3 1 2. - 0 - 0.0121804401278496 - 2.3737740702927113e-003 - -0.5606415867805481 - <_> - - <_> - - - - <_> - 8 6 3 2 -1. - <_> - 8 7 3 1 2. - 0 - -3.3536320552229881e-003 - 0.2561439871788025 - -0.0214374605566263 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 9 6 4 1 3. - 0 - -0.0126978298649192 - 0.2751877009868622 - -0.0215013492852449 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 6 2 2 3. - 0 - -0.0177516005933285 - -0.4644564092159271 - 0.0150549700483680 - <_> - - <_> - - - - <_> - 13 1 3 9 -1. - <_> - 14 2 1 9 3. - 1 - 0.0436732098460197 - 3.3700480125844479e-003 - -0.3144119977951050 - <_> - - <_> - - - - <_> - 9 1 9 3 -1. - <_> - 8 2 9 1 3. - 1 - 0.0454921610653400 - 8.5049429908394814e-003 - -0.6404350996017456 - <_> - - <_> - - - - <_> - 11 0 4 11 -1. - <_> - 12 1 2 11 2. - 1 - -0.1014112010598183 - -1. - 1.4608280616812408e-004 - <_> - - <_> - - - - <_> - 11 0 11 4 -1. - <_> - 10 1 11 2 2. - 1 - -0.0279505196958780 - 0.2328241020441055 - -0.0247425399720669 - <_> - - <_> - - - - <_> - 8 3 8 3 -1. - <_> - 8 4 8 1 3. - 0 - 6.3734117429703474e-004 - -0.0652018785476685 - 0.0583422817289829 - <_> - - <_> - - - - <_> - 9 1 4 8 -1. - <_> - 9 1 2 4 2. - <_> - 11 5 2 4 2. - 0 - -3.2297719735652208e-003 - -0.1201381012797356 - 0.0482955388724804 - <_> - - <_> - - - - <_> - 8 0 12 2 -1. - <_> - 11 0 6 2 2. - 0 - -0.0473592393100262 - -0.6535071134567261 - 2.3264330811798573e-003 - <_> - - <_> - - - - <_> - 5 5 1 12 -1. - <_> - 5 8 1 6 2. - 0 - 1.8326259450986981e-003 - -0.0557417310774326 - 0.0955053269863129 - -0.8981577157974243 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 2 6 6 -1. - <_> - 10 4 2 2 9. - 0 - 0.0692872628569603 - -0.1032539010047913 - 0.3670325875282288 - <_> - - <_> - - - - <_> - 21 0 1 3 -1. - <_> - 21 1 1 1 3. - 0 - -7.8862551599740982e-003 - -0.7536771893501282 - 6.1004441231489182e-003 - <_> - - <_> - - - - <_> - 5 1 12 3 -1. - <_> - 9 2 4 1 9. - 0 - -0.0867614671587944 - 0.4229876995086670 - -0.0488611608743668 - <_> - - <_> - - - - <_> - 11 0 9 14 -1. - <_> - 14 0 3 14 3. - 0 - -0.0461937598884106 - 0.1282953023910523 - -0.0628906562924385 - <_> - - <_> - - - - <_> - 8 4 2 2 -1. - <_> - 9 4 1 2 2. - 0 - 4.5601249439641833e-004 - -0.1454011946916580 - 0.0891712084412575 - <_> - - <_> - - - - <_> - 12 3 6 10 -1. - <_> - 12 3 6 5 2. - 1 - 0.2215195000171661 - 0.0104950796812773 - -0.1937278062105179 - <_> - - <_> - - - - <_> - 9 8 1 2 -1. - <_> - 9 9 1 1 2. - 0 - -2.8609700166271068e-005 - 0.0893091708421707 - -0.1204816028475761 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 13 1 3 1 3. - 1 - 0.0116618601605296 - -0.0364421792328358 - 0.3271952867507935 - <_> - - <_> - - - - <_> - 5 0 12 10 -1. - <_> - 9 0 4 10 3. - 0 - -0.0392928607761860 - 0.2363822013139725 - -0.0219022501260042 - <_> - - <_> - - - - <_> - 11 9 3 1 -1. - <_> - 12 9 1 1 3. - 0 - 4.7508609713986516e-004 - -0.0820939913392067 - 0.0708998963236809 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - 0.0275300499051809 - -0.0461798608303070 - 0.2297827005386353 - <_> - - <_> - - - - <_> - 8 7 6 3 -1. - <_> - 10 7 2 3 3. - 0 - 0.0240883305668831 - 0.0250075701624155 - -0.3683111071586609 - <_> - - <_> - - - - <_> - 9 6 4 1 -1. - <_> - 10 6 2 1 2. - 0 - 3.1142881198320538e-005 - -0.1529716998338699 - 0.0743592530488968 - <_> - - <_> - - - - <_> - 10 5 4 8 -1. - <_> - 10 7 4 4 2. - 0 - -3.8976089563220739e-003 - -0.1800003945827484 - 0.0523922517895699 - <_> - - <_> - - - - <_> - 11 0 6 1 -1. - <_> - 11 0 3 1 2. - 1 - -7.5943870469927788e-003 - -0.1921773999929428 - 0.0482564903795719 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 14 5 1 3 3. - 0 - -3.4858959261327982e-003 - 0.0813019201159477 - -0.0661109983921051 - <_> - - <_> - - - - <_> - 10 0 12 1 -1. - <_> - 14 4 4 1 3. - 1 - -0.0351178385317326 - -0.2603352069854736 - 0.0396320410072804 - <_> - - <_> - - - - <_> - 3 7 16 12 -1. - <_> - 3 13 16 6 2. - 0 - 0.2261487990617752 - -0.0298969093710184 - 0.2866604924201965 - <_> - - <_> - - - - <_> - 2 6 5 12 -1. - <_> - 2 9 5 6 2. - 0 - 0.1938672959804535 - -1.4692339755129069e-004 - -7.1909208984375000e+003 - <_> - - <_> - - - - <_> - 11 13 4 3 -1. - <_> - 12 14 2 3 2. - 1 - -4.5231450349092484e-003 - -0.0710155665874481 - 0.0214368496090174 - <_> - - <_> - - - - <_> - 2 4 6 16 -1. - <_> - 2 12 6 8 2. - 0 - -0.0298550892621279 - 0.1195001006126404 - -0.0757685601711273 - <_> - - <_> - - - - <_> - 11 9 3 1 -1. - <_> - 12 9 1 1 3. - 0 - -7.8530138125643134e-004 - 0.1539223045110703 - -0.0437038615345955 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 10 9 1 1 2. - 0 - -4.3314939830452204e-005 - 0.0924579724669456 - -0.0911113992333412 - <_> - - <_> - - - - <_> - 11 9 4 2 -1. - <_> - 11 9 2 2 2. - 0 - 9.0954294428229332e-003 - -0.0206828303635120 - 0.0755210593342781 - <_> - - <_> - - - - <_> - 3 3 1 3 -1. - <_> - 3 4 1 1 3. - 0 - -6.4024911262094975e-004 - -0.2059540003538132 - 0.0433131791651249 - <_> - - <_> - - - - <_> - 13 6 3 1 -1. - <_> - 14 6 1 1 3. - 0 - 2.1848140750080347e-003 - -0.0239590704441071 - 0.1392033994197846 - <_> - - <_> - - - - <_> - 6 6 3 1 -1. - <_> - 7 6 1 1 3. - 0 - -6.5740908030420542e-004 - 0.0962148681282997 - -0.0846071466803551 - <_> - - <_> - - - - <_> - 18 3 1 3 -1. - <_> - 18 4 1 1 3. - 0 - -2.6019528741016984e-004 - -0.1302479952573776 - 0.0512344688177109 - <_> - - <_> - - - - <_> - 11 7 1 2 -1. - <_> - 11 7 1 1 2. - 1 - -5.0155790522694588e-003 - -0.5747873187065125 - 0.0119193699210882 - <_> - - <_> - - - - <_> - 18 3 1 3 -1. - <_> - 18 4 1 1 3. - 0 - 3.2060540979728103e-004 - 0.0456755794584751 - -0.1523613035678864 - <_> - - <_> - - - - <_> - 10 0 3 3 -1. - <_> - 11 1 1 3 3. - 1 - 8.5811875760555267e-003 - -0.0303575005382299 - 0.2157559990882874 - <_> - - <_> - - - - <_> - 12 0 6 3 -1. - <_> - 11 1 6 1 3. - 1 - 0.0119251096621156 - -0.0282484199851751 - 0.1968275010585785 - <_> - - <_> - - - - <_> - 5 0 10 6 -1. - <_> - 5 2 10 2 3. - 0 - -4.7097587957978249e-003 - 0.0826254263520241 - -0.1123199015855789 - <_> - - <_> - - - - <_> - 13 0 6 10 -1. - <_> - 13 5 6 5 2. - 0 - -1.0695779928937554e-003 - 0.0346126109361649 - -0.0347695089876652 - <_> - - <_> - - - - <_> - 6 5 10 4 -1. - <_> - 6 7 10 2 2. - 0 - -4.9490150995552540e-003 - -0.1842706054449081 - 0.0423874817788601 - <_> - - <_> - - - - <_> - 10 4 2 4 -1. - <_> - 10 6 2 2 2. - 0 - -6.7667837720364332e-004 - 0.0935481786727905 - -0.0879691466689110 - <_> - - <_> - - - - <_> - 3 0 6 10 -1. - <_> - 3 5 6 5 2. - 0 - 0.0497573092579842 - 0.0275876894593239 - -0.2563813030719757 - <_> - - <_> - - - - <_> - 12 7 1 3 -1. - <_> - 12 8 1 1 3. - 0 - -1.0812530526891351e-003 - 0.1665499955415726 - -0.0373814888298512 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - 5.0784139893949032e-003 - 0.0214012693613768 - -0.3290201127529144 - <_> - - <_> - - - - <_> - 11 9 4 2 -1. - <_> - 11 9 2 2 2. - 0 - -1.4780629426240921e-003 - 0.0582060217857361 - -0.0283094793558121 - <_> - - <_> - - - - <_> - 7 9 4 2 -1. - <_> - 9 9 2 2 2. - 0 - 8.3614438772201538e-003 - -0.0506708994507790 - 0.1692695021629334 - <_> - - <_> - - - - <_> - 9 4 4 2 -1. - <_> - 10 4 2 2 2. - 0 - 8.0310832709074020e-003 - 0.0235826000571251 - -0.3037504851818085 - <_> - - <_> - - - - <_> - 5 17 1 2 -1. - <_> - 5 18 1 1 2. - 0 - -2.8671300242422149e-005 - 0.0771576985716820 - -0.0789438337087631 - <_> - - <_> - - - - <_> - 8 3 7 9 -1. - <_> - 8 6 7 3 3. - 0 - -7.9513173550367355e-003 - -0.1314260065555573 - 0.0348816402256489 - <_> - - <_> - - - - <_> - 6 6 3 3 -1. - <_> - 7 6 1 3 3. - 0 - 1.4974420191720128e-003 - -0.0512811690568924 - 0.1281597018241882 - <_> - - <_> - - - - <_> - 8 6 9 3 -1. - <_> - 8 7 9 1 3. - 0 - -2.2107020486146212e-003 - 0.0789083614945412 - -0.0351109988987446 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - 3.3375908969901502e-004 - -0.0738000273704529 - 0.0901845023036003 - <_> - - <_> - - - - <_> - 8 8 6 2 -1. - <_> - 11 8 3 1 2. - <_> - 8 9 3 1 2. - 0 - -1.5214539598673582e-003 - -0.1459252983331680 - 0.0476549491286278 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 8 2 1 2. - 0 - 4.4929070281796157e-004 - -0.0701535269618034 - 0.0954658314585686 - <_> - - <_> - - - - <_> - 15 17 3 3 -1. - <_> - 15 18 3 1 3. - 0 - 1.5836360398679972e-003 - 0.0283011607825756 - -0.1439356952905655 - <_> - - <_> - - - - <_> - 8 10 4 6 -1. - <_> - 9 11 2 6 2. - 1 - -0.0162352900952101 - 0.1838701963424683 - -0.0369088612496853 - <_> - - <_> - - - - <_> - 4 6 16 8 -1. - <_> - 4 8 16 4 2. - 0 - -0.0340983085334301 - 0.1675633937120438 - -0.0257174391299486 - <_> - - <_> - - - - <_> - 8 17 1 3 -1. - <_> - 8 18 1 1 3. - 0 - -2.9732889379374683e-004 - -0.1329717040061951 - 0.0480402484536171 - <_> - - <_> - - - - <_> - 13 17 1 3 -1. - <_> - 13 18 1 1 3. - 0 - 1.3863020285498351e-005 - -0.0446197986602783 - 0.0491054207086563 - <_> - - <_> - - - - <_> - 8 17 1 3 -1. - <_> - 8 18 1 1 3. - 0 - 4.7123921103775501e-004 - 0.0432682111859322 - -0.1617282032966614 - <_> - - <_> - - - - <_> - 12 5 1 3 -1. - <_> - 12 6 1 1 3. - 0 - -4.1129379533231258e-003 - 0.2153217047452927 - -0.0222124103456736 - <_> - - <_> - - - - <_> - 9 5 1 3 -1. - <_> - 9 6 1 1 3. - 0 - 8.4233487723395228e-004 - -0.0391228310763836 - 0.1634548008441925 - <_> - - <_> - - - - <_> - 13 3 1 3 -1. - <_> - 13 4 1 1 3. - 0 - 1.3869360554963350e-003 - 0.0408144295215607 - -0.2476126998662949 - <_> - - <_> - - - - <_> - 8 4 6 2 -1. - <_> - 8 4 3 1 2. - <_> - 11 5 3 1 2. - 0 - 2.3325090296566486e-003 - 0.0364280305802822 - -0.1585029065608978 - <_> - - <_> - - - - <_> - 5 0 16 16 -1. - <_> - 5 8 16 8 2. - 0 - 0.0920670926570892 - -0.0365116596221924 - 0.0942528769373894 - <_> - - <_> - - - - <_> - 2 0 12 10 -1. - <_> - 2 0 6 5 2. - <_> - 8 5 6 5 2. - 0 - -0.0669904425740242 - 0.3124797046184540 - -0.0211452208459377 - <_> - - <_> - - - - <_> - 1 5 21 12 -1. - <_> - 8 9 7 4 9. - 0 - -0.2028432041406632 - -0.1455641984939575 - 0.0341330617666245 - <_> - - <_> - - - - <_> - 1 5 20 15 -1. - <_> - 6 5 10 15 2. - 0 - -0.1977735012769699 - 0.2086053043603897 - -0.0309378392994404 - <_> - - <_> - - - - <_> - 12 5 3 5 -1. - <_> - 13 6 1 5 3. - 1 - 2.9955860227346420e-003 - 0.0514781698584557 - -0.0906424522399902 - <_> - - <_> - - - - <_> - 11 3 6 6 -1. - <_> - 13 5 2 6 3. - 1 - -0.0135887898504734 - -0.1597944945096970 - 0.0427133515477180 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -1.0466199601069093e-003 - 0.1074796020984650 - -0.0582288689911366 - <_> - - <_> - - - - <_> - 10 10 1 3 -1. - <_> - 10 11 1 1 3. - 0 - 2.8862239560112357e-004 - -0.0728585720062256 - 0.1097768023610115 - <_> - - <_> - - - - <_> - 17 0 3 10 -1. - <_> - 18 1 1 10 3. - 1 - -0.0279210805892944 - -0.2489071935415268 - 8.8059734553098679e-003 - <_> - - <_> - - - - <_> - 9 7 5 3 -1. - <_> - 8 8 5 1 3. - 1 - -0.0114472899585962 - 0.1515222936868668 - -0.0381702408194542 - <_> - - <_> - - - - <_> - 5 7 12 3 -1. - <_> - 9 8 4 1 9. - 0 - -3.3761549275368452e-003 - 0.1130957007408142 - -0.0550871081650257 - <_> - - <_> - - - - <_> - 10 5 5 3 -1. - <_> - 9 6 5 1 3. - 1 - -5.2940822206437588e-003 - -0.1551858037710190 - 0.0371754989027977 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - 6.9440458901226521e-004 - -0.0393652282655239 - 0.1307191997766495 - <_> - - <_> - - - - <_> - 8 15 2 2 -1. - <_> - 8 16 2 1 2. - 0 - 1.4813370398769621e-005 - -0.0717078223824501 - 0.0747656375169754 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 11 9 3 1 2. - <_> - 8 10 3 1 2. - 0 - -1.3590740272775292e-003 - -0.1291756033897400 - 0.0430698990821838 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 6.9750571856275201e-004 - -0.0432589389383793 - 0.1451248973608017 - <_> - - <_> - - - - <_> - 12 10 2 2 -1. - <_> - 13 10 1 1 2. - <_> - 12 11 1 1 2. - 0 - -4.6163110528141260e-004 - 0.0914378464221954 - -0.0532902106642723 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 8 9 3 1 2. - <_> - 11 10 3 1 2. - 0 - -3.0486299656331539e-003 - -0.2148638963699341 - 0.0274086706340313 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - -3.3797100186347961e-003 - 0.1076484024524689 - -0.0438442304730415 - <_> - - <_> - - - - <_> - 6 0 2 1 -1. - <_> - 7 0 1 1 2. - 0 - -8.4170768968760967e-004 - -0.1980396956205368 - 0.0293081197887659 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - 1.0257579851895571e-003 - -0.0740675404667854 - 0.1248897016048431 - <_> - - <_> - - - - <_> - 5 15 6 4 -1. - <_> - 5 16 6 2 2. - 0 - 8.0574918538331985e-003 - 0.0208153892308474 - -0.2604598104953766 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - -8.3471642574295402e-004 - 0.0871648788452148 - -0.0663936436176300 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - -1.9537750631570816e-004 - 0.0808343365788460 - -0.0682158693671227 - <_> - - <_> - - - - <_> - 18 3 1 3 -1. - <_> - 18 4 1 1 3. - 0 - -6.3116732053458691e-003 - -0.7206460237503052 - 3.9312788285315037e-003 - <_> - - <_> - - - - <_> - 3 3 1 3 -1. - <_> - 3 4 1 1 3. - 0 - 1.4718360034748912e-004 - 0.0515080988407135 - -0.1090720966458321 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - 2.8240380343049765e-003 - -0.0351137816905975 - 0.0860871523618698 - <_> - - <_> - - - - <_> - 0 18 6 2 -1. - <_> - 2 18 2 2 3. - 0 - -1.0794559493660927e-003 - 0.0863564088940620 - -0.0621437802910805 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - 0.0479466803371906 - 1.2823230354115367e-003 - -0.9107720255851746 - <_> - - <_> - - - - <_> - 0 18 6 2 -1. - <_> - 2 18 2 2 3. - 0 - 2.9353320132941008e-004 - -0.0742364823818207 - 0.0953429490327835 - <_> - - <_> - - - - <_> - 12 9 3 3 -1. - <_> - 13 10 1 1 9. - 0 - 0.0347002111375332 - 2.1481830626726151e-003 - -0.8769165277481079 - <_> - - <_> - - - - <_> - 7 9 3 3 -1. - <_> - 8 10 1 1 9. - 0 - -0.0204022601246834 - -0.4998964071273804 - 9.8876487463712692e-003 - <_> - - <_> - - - - <_> - 11 11 1 6 -1. - <_> - 11 11 1 3 2. - 1 - 1.9776409026235342e-003 - -0.0468288883566856 - 0.0564080700278282 - <_> - - <_> - - - - <_> - 6 15 4 1 -1. - <_> - 6 15 2 1 2. - 1 - -6.9213248789310455e-003 - -0.1962072998285294 - 0.0271094404160976 - <_> - - <_> - - - - <_> - 13 8 7 9 -1. - <_> - 13 11 7 3 3. - 0 - 0.0430531501770020 - -0.0161716900765896 - 0.1153767034411430 - <_> - - <_> - - - - <_> - 10 14 1 2 -1. - <_> - 10 15 1 1 2. - 0 - 4.0770901250652969e-005 - -0.0723698735237122 - 0.0786480903625488 - <_> - - <_> - - - - <_> - 11 12 4 6 -1. - <_> - 13 12 2 3 2. - <_> - 11 15 2 3 2. - 0 - -0.0111167598515749 - 0.1770945042371750 - -0.0267580002546310 - <_> - - <_> - - - - <_> - 5 15 12 5 -1. - <_> - 11 15 6 5 2. - 0 - 0.0222607105970383 - 0.0428048595786095 - -0.1330620944499970 - <_> - - <_> - - - - <_> - 11 12 4 6 -1. - <_> - 13 12 2 3 2. - <_> - 11 15 2 3 2. - 0 - 0.0223977491259575 - -8.4760002791881561e-003 - 0.2014195024967194 - <_> - - <_> - - - - <_> - 7 12 4 6 -1. - <_> - 7 12 2 3 2. - <_> - 9 15 2 3 2. - 0 - -2.2704310249537230e-003 - 0.1032940968871117 - -0.0595880784094334 - <_> - - <_> - - - - <_> - 7 16 8 3 -1. - <_> - 7 16 4 3 2. - 0 - 8.6120571941137314e-003 - 0.0448973290622234 - -0.1525600999593735 - <_> - - <_> - - - - <_> - 10 13 1 2 -1. - <_> - 10 14 1 1 2. - 0 - 4.2043669964186847e-005 - -0.0755151808261871 - 0.0743293166160584 - <_> - - <_> - - - - <_> - 10 12 5 3 -1. - <_> - 10 13 5 1 3. - 0 - -0.0266887396574020 - -0.9028220772743225 - 2.5531589053571224e-003 - <_> - - <_> - - - - <_> - 9 0 4 2 -1. - <_> - 9 1 4 1 2. - 0 - -1.2111039832234383e-003 - 0.0873311311006546 - -0.0613279789686203 - <_> - - <_> - - - - <_> - 17 10 3 3 -1. - <_> - 18 10 1 3 3. - 0 - 6.6678058356046677e-003 - 0.0121444202959538 - -0.1770282983779907 - <_> - - <_> - - - - <_> - 0 0 12 4 -1. - <_> - 0 0 6 2 2. - <_> - 6 2 6 2 2. - 0 - 5.1054819487035275e-003 - -0.0525535494089127 - 0.1099506020545960 - <_> - - <_> - - - - <_> - 21 0 1 2 -1. - <_> - 21 1 1 1 2. - 0 - -4.3119120527990162e-004 - -0.1132960990071297 - 0.0272602792829275 - <_> - - <_> - - - - <_> - 7 0 4 1 -1. - <_> - 7 0 2 1 2. - 1 - 9.0407149400562048e-004 - -0.0749575570225716 - 0.0706021189689636 - <_> - - <_> - - - - <_> - 1 5 21 12 -1. - <_> - 8 9 7 4 9. - 0 - -0.4252609908580780 - -0.2262981981039047 - 0.0129588004201651 - <_> - - <_> - - - - <_> - 7 8 2 2 -1. - <_> - 7 8 1 1 2. - <_> - 8 9 1 1 2. - 0 - -1.8204950029030442e-003 - 0.2107277065515518 - -0.0283979792147875 - <_> - - <_> - - - - <_> - 7 1 8 14 -1. - <_> - 7 1 4 14 2. - 0 - 0.1607939004898071 - -0.0115751195698977 - 0.4761418104171753 - <_> - - <_> - - - - <_> - 2 10 3 3 -1. - <_> - 3 10 1 3 3. - 0 - 1.7258119769394398e-003 - 0.0410943999886513 - -0.1427533030509949 - <_> - - <_> - - - - <_> - 8 7 6 1 -1. - <_> - 10 7 2 1 3. - 0 - -1.4840350486338139e-003 - -0.1667011976242065 - 0.0325350500643253 - <_> - - <_> - - - - <_> - 9 4 3 9 -1. - <_> - 10 7 1 3 9. - 0 - 7.1747507899999619e-003 - 0.0708197280764580 - -0.0891060307621956 - <_> - - <_> - - - - <_> - 15 8 6 3 -1. - <_> - 14 9 6 1 3. - 1 - -8.2580056041479111e-003 - 0.1030450016260147 - -0.0334327891469002 - <_> - - <_> - - - - <_> - 10 3 1 6 -1. - <_> - 10 5 1 2 3. - 0 - -6.7563762422651052e-004 - 0.0925454124808311 - -0.0626006796956062 - <_> - - <_> - - - - <_> - 12 1 1 4 -1. - <_> - 11 2 1 2 2. - 1 - 1.5063700266182423e-003 - 0.0342875905334949 - -0.0526970513164997 - <_> - - <_> - - - - <_> - 9 1 4 9 -1. - <_> - 9 4 4 3 3. - 0 - 6.4832060597836971e-003 - -0.0795518904924393 - 0.0835652872920036 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 1 6 2 2. - 0 - 0.0150106502696872 - -0.0230170600116253 - 0.2891820073127747 - <_> - - <_> - - - - <_> - 10 8 1 4 -1. - <_> - 10 10 1 2 2. - 0 - 2.3918910883367062e-003 - 0.0228612907230854 - -0.2880432903766632 - <_> - - <_> - - - - <_> - 12 0 3 2 -1. - <_> - 13 1 1 2 3. - 1 - 0.0184419900178909 - 5.6940279901027679e-003 - -0.4064288139343262 - <_> - - <_> - - - - <_> - 10 0 2 3 -1. - <_> - 9 1 2 1 3. - 1 - 0.0158940795809031 - 9.7483089193701744e-003 - -0.5418081879615784 - <_> - - <_> - - - - <_> - 12 10 3 3 -1. - <_> - 13 11 1 3 3. - 1 - -6.0511790215969086e-003 - 0.0517028197646141 - -0.0186669696122408 - <_> - - <_> - - - - <_> - 7 12 5 3 -1. - <_> - 7 13 5 1 3. - 0 - -0.0173080693930388 - -0.6487432122230530 - 8.5127726197242737e-003 - <_> - - <_> - - - - <_> - 12 10 3 3 -1. - <_> - 13 11 1 3 3. - 1 - -0.0309109799563885 - -0.3517454862594605 - 1.5809880569577217e-003 - <_> - - <_> - - - - <_> - 10 10 3 3 -1. - <_> - 9 11 3 1 3. - 1 - -9.6330260857939720e-003 - 0.1610354930162430 - -0.0355620905756950 - <_> - - <_> - - - - <_> - 11 1 3 4 -1. - <_> - 12 1 1 4 3. - 0 - -3.8023660890758038e-003 - -0.1070196032524109 - 0.0232167802751064 - <_> - - <_> - - - - <_> - 6 8 8 11 -1. - <_> - 8 8 4 11 2. - 0 - -0.1125271990895271 - -0.8678287863731384 - 5.9430040419101715e-003 - <_> - - <_> - - - - <_> - 5 6 12 6 -1. - <_> - 9 6 4 6 3. - 0 - -0.0803290978074074 - 0.2347930073738098 - -0.0245810691267252 - <_> - - <_> - - - - <_> - 8 1 3 4 -1. - <_> - 9 1 1 4 3. - 0 - -4.8303799703717232e-003 - -0.2004380971193314 - 0.0294667705893517 - <_> - - <_> - - - - <_> - 15 8 6 3 -1. - <_> - 14 9 6 1 3. - 1 - 5.9475651942193508e-003 - -0.0416121594607830 - 0.1092766970396042 - <_> - - <_> - - - - <_> - 9 6 8 6 -1. - <_> - 7 8 8 2 3. - 1 - -0.1595470011234283 - -0.9299647212028503 - 5.9394179843366146e-003 - <_> - - <_> - - - - <_> - 15 8 6 3 -1. - <_> - 14 9 6 1 3. - 1 - -0.0621176101267338 - -1. - -9.8518899176269770e-004 - <_> - - <_> - - - - <_> - 7 8 3 6 -1. - <_> - 8 9 1 6 3. - 1 - -0.0167226605117321 - 0.2035854011774063 - -0.0266774296760559 - <_> - - <_> - - - - <_> - 21 0 1 2 -1. - <_> - 21 1 1 1 2. - 0 - 2.5412259856238961e-004 - 0.0357727110385895 - -0.1149799004197121 - <_> - - <_> - - - - <_> - 0 11 20 3 -1. - <_> - 0 12 20 1 3. - 0 - -0.0445897094905376 - -0.8233116865158081 - 5.8186561800539494e-003 - <_> - - <_> - - - - <_> - 0 3 22 1 -1. - <_> - 0 3 11 1 2. - 0 - 0.0500295087695122 - 6.5201208926737309e-003 - -0.6030862927436829 - <_> - - <_> - - - - <_> - 0 7 14 12 -1. - <_> - 0 13 14 6 2. - 0 - 0.2731642127037048 - 0.0101052299141884 - -0.4474408030509949 - <_> - - <_> - - - - <_> - 16 4 4 3 -1. - <_> - 15 5 4 1 3. - 1 - 0.0196797605603933 - 7.3466659523546696e-003 - -0.2791317999362946 - <_> - - <_> - - - - <_> - 6 4 3 4 -1. - <_> - 7 5 1 4 3. - 1 - -0.0263828206807375 - -0.6031485795974731 - 7.7110212296247482e-003 - <_> - - <_> - - - - <_> - 9 4 8 2 -1. - <_> - 13 4 4 1 2. - <_> - 9 5 4 1 2. - 0 - -6.1990451067686081e-003 - 0.1520272940397263 - -0.0201599597930908 - <_> - - <_> - - - - <_> - 5 4 8 2 -1. - <_> - 5 4 4 1 2. - <_> - 9 5 4 1 2. - 0 - 9.0291406959295273e-003 - -0.0239909794181585 - 0.2417683005332947 - <_> - - <_> - - - - <_> - 12 3 4 3 -1. - <_> - 12 4 4 1 3. - 0 - -0.0131732197478414 - -0.4744279086589813 - 6.2788990326225758e-003 - <_> - - <_> - - - - <_> - 6 3 4 3 -1. - <_> - 6 4 4 1 3. - 0 - 9.9061578512191772e-003 - 0.0111615201458335 - -0.5154187083244324 - <_> - - <_> - - - - <_> - 4 5 15 3 -1. - <_> - 9 6 5 1 9. - 0 - 0.0969107225537300 - 0.0197568796575069 - -0.1122033968567848 - <_> - - <_> - - - - <_> - 0 5 21 12 -1. - <_> - 7 9 7 4 9. - 0 - -0.1275129020214081 - -0.1165013983845711 - 0.0435131490230560 - <_> - - <_> - - - - <_> - 13 0 2 6 -1. - <_> - 14 0 1 3 2. - <_> - 13 3 1 3 2. - 0 - 7.3522380553185940e-003 - -0.0152237899601460 - 0.1286599040031433 - <_> - - <_> - - - - <_> - 3 7 16 2 -1. - <_> - 7 7 8 2 2. - 0 - -8.0287149176001549e-003 - 0.1093005985021591 - -0.0523799397051334 - <_> - - <_> - - - - <_> - 14 4 5 9 -1. - <_> - 14 7 5 3 3. - 0 - 0.0601382702589035 - 5.8138328604400158e-003 - -0.1784086972475052 - <_> - - <_> - - - - <_> - 3 4 5 9 -1. - <_> - 3 7 5 3 3. - 0 - -0.0240240395069122 - 0.1885994970798492 - -0.0296588707715273 - <_> - - <_> - - - - <_> - 9 3 7 9 -1. - <_> - 9 6 7 3 3. - 0 - -0.0163344498723745 - -0.1318735927343369 - 0.0221400205045938 - <_> - - <_> - - - - <_> - 11 4 2 1 -1. - <_> - 11 4 1 1 2. - 1 - 4.8175701522268355e-005 - -0.0762748494744301 - 0.0707153230905533 - <_> - - <_> - - - - <_> - 8 4 6 2 -1. - <_> - 11 4 3 1 2. - <_> - 8 5 3 1 2. - 0 - 1.1565199820324779e-003 - 0.0442132093012333 - -0.1171799972653389 - <_> - - <_> - - - - <_> - 8 8 2 4 -1. - <_> - 8 8 1 2 2. - <_> - 9 10 1 2 2. - 0 - 2.5506340898573399e-003 - -0.0306679308414459 - 0.1819691956043243 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 11 6 1 2 9. - 0 - -6.5251272171735764e-003 - -0.1144345030188561 - 0.0351839698851109 - <_> - - <_> - - - - <_> - 8 1 6 15 -1. - <_> - 11 1 3 15 2. - 0 - 0.0661531686782837 - -0.0272544492036104 - 0.1924168020486832 - <_> - - <_> - - - - <_> - 10 9 2 6 -1. - <_> - 10 9 1 6 2. - 0 - 4.2829991434700787e-004 - -0.0632675588130951 - 0.0830966234207153 - <_> - - <_> - - - - <_> - 9 9 1 2 -1. - <_> - 9 10 1 1 2. - 0 - -2.9148950488888659e-005 - 0.0591669008135796 - -0.0914677232503891 - <_> - - <_> - - - - <_> - 21 0 1 2 -1. - <_> - 21 1 1 1 2. - 0 - 1.3398390365182422e-005 - -0.0627722218632698 - 0.0767510980367661 - <_> - - <_> - - - - <_> - 7 8 2 1 -1. - <_> - 8 8 1 1 2. - 0 - -3.1628899159841239e-004 - 0.1065268963575363 - -0.0484270118176937 - <_> - - <_> - - - - <_> - 16 15 1 2 -1. - <_> - 16 16 1 1 2. - 0 - 4.7857520985417068e-004 - 0.0313587710261345 - -0.1349878013134003 - <_> - - <_> - - - - <_> - 5 5 2 14 -1. - <_> - 5 12 2 7 2. - 0 - 5.3419070318341255e-003 - -0.0597675181925297 - 0.0976499170064926 - <_> - - <_> - - - - <_> - 10 15 12 2 -1. - <_> - 13 15 6 2 2. - 0 - -4.8007210716605186e-003 - 0.0576845481991768 - -0.0333687812089920 - <_> - - <_> - - - - <_> - 0 15 12 2 -1. - <_> - 3 15 6 2 2. - 0 - -2.5623580440878868e-003 - 0.0824480429291725 - -0.0671344771981239 - <_> - - <_> - - - - <_> - 16 15 1 2 -1. - <_> - 16 16 1 1 2. - 0 - -7.8163482248783112e-004 - -0.1310914009809494 - 0.0225507393479347 - <_> - - <_> - - - - <_> - 11 15 1 2 -1. - <_> - 11 15 1 1 2. - 1 - -5.9796901041409001e-005 - 0.0780176669359207 - -0.0722332373261452 - <_> - - <_> - - - - <_> - 15 0 4 2 -1. - <_> - 17 0 2 1 2. - <_> - 15 1 2 1 2. - 0 - -1.4955470105633140e-003 - -0.1784947067499161 - 0.0265124402940273 - <_> - - <_> - - - - <_> - 7 13 8 7 -1. - <_> - 11 13 4 7 2. - 0 - -0.1073193028569222 - -0.5597835183143616 - 7.9387873411178589e-003 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -0.0115703502669930 - 0.3272190988063812 - -0.0153343500569463 - <_> - - <_> - - - - <_> - 9 6 2 3 -1. - <_> - 9 7 2 1 3. - 0 - 1.2698080390691757e-003 - -0.0526738688349724 - 0.0954173430800438 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 17 0 1 2 2. - <_> - 16 2 1 2 2. - 0 - -2.1792970073875040e-004 - -0.0677463784813881 - 0.0351213514804840 - <_> - - <_> - - - - <_> - 10 4 1 3 -1. - <_> - 10 5 1 1 3. - 0 - 2.7424149448052049e-004 - -0.0724511370062828 - 0.0690996870398521 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 19 2 1 2. - 0 - -1.4675620150228497e-005 - 0.0616963692009449 - -0.0634195730090141 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 8 6 1 1 3. - 0 - 4.5412341132760048e-003 - 8.6941216140985489e-003 - -0.5615516901016235 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 4 4 2 2. - 0 - -1.7456309869885445e-003 - 0.1221444010734558 - -0.0432390794157982 - <_> - - <_> - - - - <_> - 11 5 3 1 -1. - <_> - 12 6 1 1 3. - 1 - 2.1515421103686094e-003 - 0.0427000001072884 - -0.1358067989349365 - <_> - - <_> - - - - <_> - 7 11 12 1 -1. - <_> - 10 11 6 1 2. - 0 - 0.0257726795971394 - -6.7501049488782883e-003 - 0.2092396020889282 - <_> - - <_> - - - - <_> - 3 11 12 1 -1. - <_> - 6 11 6 1 2. - 0 - -0.0228534601628780 - -0.6348258256912231 - 7.7631678432226181e-003 - <_> - - <_> - - - - <_> - 7 9 14 4 -1. - <_> - 7 9 7 4 2. - 0 - 0.1044545024633408 - 8.2119172438979149e-003 - -0.1173992976546288 - <_> - - <_> - - - - <_> - 7 11 3 1 -1. - <_> - 8 11 1 1 3. - 0 - 3.4289199393242598e-003 - -0.0193932503461838 - 0.2536127865314484 - <_> - - <_> - - - - <_> - 17 0 3 10 -1. - <_> - 18 1 1 10 3. - 1 - -4.4450531277107075e-005 - 0.0304916594177485 - -0.0335327312350273 - <_> - - <_> - - - - <_> - 10 7 4 1 -1. - <_> - 11 8 2 1 2. - 1 - -1.3084859820082784e-003 - -0.1254328936338425 - 0.0421751998364925 - <_> - - <_> - - - - <_> - 8 8 6 3 -1. - <_> - 8 9 6 1 3. - 0 - -8.2920619752258062e-004 - 0.0887028723955154 - -0.0599494613707066 - <_> - - <_> - - - - <_> - 10 10 2 1 -1. - <_> - 10 10 1 1 2. - 1 - -1.1649610241875052e-003 - -0.1226091980934143 - 0.0397772490978241 - <_> - - <_> - - - - <_> - 11 11 2 8 -1. - <_> - 11 11 1 8 2. - 0 - -1.1792209697887301e-003 - 0.0488037802278996 - -0.0316172614693642 - <_> - - <_> - - - - <_> - 9 12 4 6 -1. - <_> - 10 12 2 6 2. - 0 - 1.4045130228623748e-003 - -0.0685785636305809 - 0.1080681979656220 - <_> - - <_> - - - - <_> - 13 0 6 4 -1. - <_> - 13 0 3 4 2. - 1 - 0.0815357863903046 - 7.5162621214985847e-003 - -0.1991456001996994 - <_> - - <_> - - - - <_> - 1 9 14 4 -1. - <_> - 8 9 7 4 2. - 0 - 0.1340264976024628 - 0.0113464398309588 - -0.4238702058792114 - <_> - - <_> - - - - <_> - 11 5 6 9 -1. - <_> - 13 7 2 9 3. - 1 - 0.0518463812768459 - -0.0248056706041098 - 0.1061187013983727 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 0 1 2 2. - <_> - 5 2 1 2 2. - 0 - 2.2436599829234183e-004 - 0.0498790405690670 - -0.1032276004552841 - <_> - - <_> - - - - <_> - 12 4 6 10 -1. - <_> - 14 6 2 10 3. - 1 - 0.2050427943468094 - 1.2941809836775064e-003 - -0.7312456965446472 - <_> - - <_> - - - - <_> - 10 4 10 6 -1. - <_> - 8 6 10 2 3. - 1 - 0.0492210201919079 - -0.0323143303394318 - 0.1634157001972199 - <_> - - <_> - - - - <_> - 12 5 2 4 -1. - <_> - 12 5 1 4 2. - 1 - -2.7643840294331312e-003 - -0.0727092623710632 - 0.0290633905678988 - <_> - - <_> - - - - <_> - 9 5 6 2 -1. - <_> - 9 5 3 2 2. - 1 - 1.7601479776203632e-003 - 0.0706555023789406 - -0.0996559709310532 - <_> - - <_> - - - - <_> - 11 1 4 3 -1. - <_> - 10 2 4 1 3. - 1 - -0.0153384096920490 - 0.1084942966699600 - -6.5918280743062496e-003 - <_> - - <_> - - - - <_> - 11 1 3 4 -1. - <_> - 12 2 1 4 3. - 1 - 0.0136291999369860 - -0.0318546704947948 - 0.1738771945238113 - <_> - - <_> - - - - <_> - 8 3 6 2 -1. - <_> - 11 3 3 1 2. - <_> - 8 4 3 1 2. - 0 - -1.4116940292296931e-005 - 0.0709699094295502 - -0.0763736292719841 - <_> - - <_> - - - - <_> - 5 0 10 3 -1. - <_> - 4 1 10 1 3. - 1 - -0.0155394598841667 - -0.2292293012142181 - 0.0222287401556969 - <_> - - <_> - - - - <_> - 21 9 1 4 -1. - <_> - 21 11 1 2 2. - 0 - 9.2819044366478920e-003 - -4.8776720650494099e-003 - 0.2090207934379578 - <_> - - <_> - - - - <_> - 0 9 1 4 -1. - <_> - 0 11 1 2 2. - 0 - -1.4155480130284559e-005 - 0.0677579864859581 - -0.0723067596554756 - <_> - - <_> - - - - <_> - 16 18 2 2 -1. - <_> - 16 19 2 1 2. - 0 - -8.7379867909476161e-004 - -0.1342428028583527 - 0.0306135695427656 - <_> - - <_> - - - - <_> - 1 7 12 2 -1. - <_> - 1 7 6 1 2. - <_> - 7 8 6 1 2. - 0 - -0.0109975300729275 - 0.3022933006286621 - -0.0165193900465965 - <_> - - <_> - - - - <_> - 13 7 1 4 -1. - <_> - 13 8 1 2 2. - 0 - 6.6538681276142597e-003 - 6.3065579161047935e-003 - -0.6272541880607605 - <_> - - <_> - - - - <_> - 8 7 1 4 -1. - <_> - 8 8 1 2 2. - 0 - -1.3275049859657884e-003 - -0.1798093020915985 - 0.0274824202060699 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 14 0 1 2 2. - <_> - 13 2 1 2 2. - 0 - -9.1509369667619467e-004 - 0.0823795571923256 - -0.0446981601417065 - <_> - - <_> - - - - <_> - 4 18 2 2 -1. - <_> - 4 19 2 1 2. - 0 - 3.7874261033721268e-004 - 0.0390999987721443 - -0.1211375966668129 - <_> - - <_> - - - - <_> - 15 19 3 1 -1. - <_> - 16 19 1 1 3. - 0 - 3.1279059476219118e-004 - -0.0404678694903851 - 0.0809220969676971 - <_> - - <_> - - - - <_> - 5 18 1 2 -1. - <_> - 5 19 1 1 2. - 0 - -4.4098051148466766e-004 - -0.1357087045907974 - 0.0346400216221809 - <_> - - <_> - - - - <_> - 15 18 1 2 -1. - <_> - 15 19 1 1 2. - 0 - -2.3545681033283472e-003 - 0.1831694990396500 - -6.5944390371441841e-003 - <_> - - <_> - - - - <_> - 6 18 1 2 -1. - <_> - 6 19 1 1 2. - 0 - -1.4042760085430928e-005 - 0.0710666403174400 - -0.0727127194404602 - <_> - - <_> - - - - <_> - 18 19 3 1 -1. - <_> - 19 19 1 1 3. - 0 - -3.4967949613928795e-003 - 0.2807917892932892 - -0.0201214402914047 - <_> - - <_> - - - - <_> - 9 3 1 3 -1. - <_> - 9 4 1 1 3. - 0 - 3.8677681004628539e-005 - -0.0774830728769302 - 0.0616322085261345 - <_> - - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 13 1 3 1 3. - 1 - 4.0409551002085209e-003 - -0.0287912897765636 - 0.1014470010995865 - <_> - - <_> - - - - <_> - 0 0 6 2 -1. - <_> - 0 0 3 1 2. - <_> - 3 1 3 1 2. - 0 - 4.3885988998226821e-004 - 0.0442854911088943 - -0.1066751033067703 - <_> - - <_> - - - - <_> - 12 4 1 3 -1. - <_> - 12 5 1 1 3. - 0 - 2.8847819194197655e-003 - -0.0301104299724102 - 0.1977003067731857 - <_> - - <_> - - - - <_> - 10 4 1 6 -1. - <_> - 10 6 1 2 3. - 0 - -3.6182960029691458e-003 - -0.1585350930690765 - 0.0312486998736858 - <_> - - <_> - - - - <_> - 7 4 10 4 -1. - <_> - 7 4 5 4 2. - 0 - -0.0741272419691086 - 0.2684713900089264 - -7.5118849053978920e-003 - <_> - - <_> - - - - <_> - 11 2 9 1 -1. - <_> - 14 5 3 1 3. - 1 - -1.7701960168778896e-003 - 0.0703483298420906 - -0.0766619071364403 - <_> - - <_> - - - - <_> - 0 2 22 14 -1. - <_> - 0 2 11 14 2. - 0 - -0.2296461015939713 - -0.1767463982105255 - 0.0263049807399511 - <_> - - <_> - - - - <_> - 1 19 3 1 -1. - <_> - 2 19 1 1 3. - 0 - -8.4374961443245411e-004 - 0.1228009015321732 - -0.0394703112542629 - <_> - - <_> - - - - <_> - 18 17 3 3 -1. - <_> - 19 17 1 3 3. - 0 - 6.2283687293529510e-004 - -0.0594021007418633 - 0.1022758036851883 - <_> - - <_> - - - - <_> - 1 17 3 3 -1. - <_> - 2 17 1 3 3. - 0 - 3.7774170050397515e-004 - -0.0657318681478500 - 0.0944617763161659 - <_> - - <_> - - - - <_> - 15 4 1 6 -1. - <_> - 15 6 1 2 3. - 0 - -9.1600026935338974e-003 - -0.2360451966524124 - 8.3174835890531540e-003 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 6 1 1 3. - 1 - -3.9922599680721760e-003 - -0.1614550054073334 - 0.0323462896049023 - <_> - - <_> - - - - <_> - 12 4 1 3 -1. - <_> - 12 5 1 1 3. - 0 - -3.3894251100718975e-003 - 0.2553631067276001 - -0.0162827502936125 - <_> - - <_> - - - - <_> - 9 4 1 3 -1. - <_> - 9 5 1 1 3. - 0 - 2.0170630887150764e-003 - -0.0337309613823891 - 0.1432740986347199 - <_> - - <_> - - - - <_> - 16 1 1 4 -1. - <_> - 16 2 1 2 2. - 0 - 6.0314318398013711e-004 - 0.0208382997661829 - -0.0807667374610901 - <_> - - <_> - - - - <_> - 5 1 1 4 -1. - <_> - 5 2 1 2 2. - 0 - -3.5625399323180318e-004 - -0.1164830029010773 - 0.0417282506823540 - <_> - - <_> - - - - <_> - 18 16 3 2 -1. - <_> - 19 16 1 2 3. - 0 - -2.3485629935748875e-004 - 0.0502369888126850 - -0.0357635393738747 - <_> - - <_> - - - - <_> - 3 9 2 2 -1. - <_> - 3 9 1 1 2. - <_> - 4 10 1 1 2. - 0 - 4.1733398102223873e-003 - 6.2450668774545193e-003 - -0.7531508803367615 - <_> - - <_> - - - - <_> - 12 3 2 8 -1. - <_> - 13 3 1 4 2. - <_> - 12 7 1 4 2. - 0 - -0.0151046803221107 - -0.3711706101894379 - 3.5868769045919180e-003 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 9 0 1 3 3. - 0 - -3.3432588679715991e-004 - 0.0731299817562103 - -0.0634622275829315 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - 9.2645268887281418e-004 - -0.0283603798598051 - 0.0812028720974922 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 10 1 1 2 2. - <_> - 11 3 1 2 2. - 0 - -1.6456949524581432e-003 - -0.1456387042999268 - 0.0339516587555408 - <_> - - <_> - - - - <_> - 15 1 2 3 -1. - <_> - 14 2 2 1 3. - 1 - -1.2158240424469113e-003 - 0.0458822213113308 - -0.0572574697434902 - <_> - - <_> - - - - <_> - 7 0 7 6 -1. - <_> - 7 2 7 2 3. - 0 - 4.9246400594711304e-003 - -0.0439813807606697 - 0.1151001974940300 - <_> - - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 10 2 2 2 9. - 0 - -6.6806487739086151e-003 - 0.0714843496680260 - -0.0776061713695526 - <_> - - <_> - - - - <_> - 7 1 3 2 -1. - <_> - 8 2 1 2 3. - 1 - -4.2396718636155128e-003 - 0.1248759999871254 - -0.0412283800542355 - <_> - - <_> - - - - <_> - 8 2 8 8 -1. - <_> - 8 4 8 4 2. - 0 - 0.0590240918099880 - 8.7620420381426811e-003 - -0.2397470027208328 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 4 1 1 3. - 0 - -8.4677420090883970e-004 - -0.1606123000383377 - 0.0298587009310722 - <_> - - <_> - - - - <_> - 11 11 4 2 -1. - <_> - 13 11 2 1 2. - <_> - 11 12 2 1 2. - 0 - 3.0823849374428391e-004 - -0.0427486188709736 - 0.0651599317789078 - <_> - - <_> - - - - <_> - 8 14 6 1 -1. - <_> - 10 14 2 1 3. - 0 - -1.5910139773041010e-003 - 0.1017490029335022 - -0.0520414784550667 - <_> - - <_> - - - - <_> - 11 0 5 6 -1. - <_> - 11 0 5 3 2. - 1 - 0.0659383535385132 - -8.7185706943273544e-003 - 0.1277870982885361 - <_> - - <_> - - - - <_> - 3 15 12 2 -1. - <_> - 3 15 6 1 2. - <_> - 9 16 6 1 2. - 0 - 6.9909919984638691e-003 - 0.0219580605626106 - -0.2243299037218094 - <_> - - <_> - - - - <_> - 7 4 10 4 -1. - <_> - 7 4 5 4 2. - 0 - -0.0372450016438961 - 0.1023978963494301 - -0.0122169703245163 - <_> - - <_> - - - - <_> - 4 2 9 12 -1. - <_> - 7 6 3 4 9. - 0 - -0.0718090385198593 - -0.1463029980659485 - 0.0356787517666817 - <_> - - <_> - - - - <_> - 14 2 2 4 -1. - <_> - 15 2 1 2 2. - <_> - 14 4 1 2 2. - 0 - 1.2186600361019373e-003 - -0.0307460092008114 - 0.0900864303112030 - <_> - - <_> - - - - <_> - 6 2 2 4 -1. - <_> - 6 2 1 2 2. - <_> - 7 4 1 2 2. - 0 - -1.4185549844114576e-005 - 0.0721841305494308 - -0.0807849168777466 - <_> - - <_> - - - - <_> - 11 0 5 6 -1. - <_> - 11 0 5 3 2. - 1 - -0.0473592691123486 - -0.0514882206916809 - 8.3303246647119522e-003 - <_> - - <_> - - - - <_> - 5 4 10 4 -1. - <_> - 10 4 5 4 2. - 0 - -0.0991227477788925 - 0.7483668923377991 - -7.0312391035258770e-003 - <_> - - <_> - - - - <_> - 16 15 2 2 -1. - <_> - 17 15 1 1 2. - <_> - 16 16 1 1 2. - 0 - 6.5616220235824585e-003 - 2.9704109765589237e-003 - -0.8661692738533020 - <_> - - <_> - - - - <_> - 4 15 2 2 -1. - <_> - 4 15 1 1 2. - <_> - 5 16 1 1 2. - 0 - 1.4554029803548474e-005 - -0.0664173364639282 - 0.0699432194232941 - <_> - - <_> - - - - <_> - 16 15 1 2 -1. - <_> - 16 16 1 1 2. - 0 - -1.4783379810978658e-005 - 0.0481681190431118 - -0.0455418713390827 - <_> - - <_> - - - - <_> - 5 15 1 2 -1. - <_> - 5 16 1 1 2. - 0 - 3.4434479312039912e-004 - 0.0395643599331379 - -0.1381704956293106 - <_> - - <_> - - - - <_> - 20 6 2 12 -1. - <_> - 20 6 2 6 2. - 1 - -0.0152200898155570 - 0.0564254783093929 - -0.0318325906991959 - <_> - - <_> - - - - <_> - 3 12 3 6 -1. - <_> - 3 14 3 2 3. - 0 - -9.9003070499747992e-004 - 0.0845257267355919 - -0.0608710385859013 - <_> - - <_> - - - - <_> - 2 10 18 4 -1. - <_> - 11 10 9 2 2. - <_> - 2 12 9 2 2. - 0 - 5.0106819253414869e-004 - -0.0742696896195412 - 0.0751448869705200 - <_> - - <_> - - - - <_> - 1 0 14 8 -1. - <_> - 8 0 7 8 2. - 0 - 0.2156558036804199 - 0.0135323302820325 - -0.3694488108158112 - <_> - - <_> - - - - <_> - 8 6 14 14 -1. - <_> - 8 13 14 7 2. - 0 - 0.0465145781636238 - -0.0328527390956879 - 0.0755783766508102 - <_> - - <_> - - - - <_> - 6 4 10 16 -1. - <_> - 6 12 10 8 2. - 0 - -0.0332919582724571 - 0.0982256382703781 - -0.0843592584133148 - <_> - - <_> - - - - <_> - 8 6 14 14 -1. - <_> - 8 13 14 7 2. - 0 - -0.3774070143699646 - -0.4059436917304993 - 6.7579401656985283e-003 - <_> - - <_> - - - - <_> - 2 6 4 1 -1. - <_> - 2 6 2 1 2. - 1 - 0.0139586403965950 - 0.0144774196669459 - -0.3532333076000214 - <_> - - <_> - - - - <_> - 7 3 12 15 -1. - <_> - 7 8 12 5 3. - 0 - -0.0103549296036363 - 0.0499571301043034 - -0.0333166904747486 - <_> - - <_> - - - - <_> - 0 8 20 9 -1. - <_> - 10 8 10 9 2. - 0 - -0.3525981009006500 - -0.8835458159446716 - 5.2982778288424015e-003 - <_> - - <_> - - - - <_> - 11 5 3 6 -1. - <_> - 11 8 3 3 2. - 0 - -0.0254976898431778 - -0.5005962252616882 - 3.3401530236005783e-003 - <_> - - <_> - - - - <_> - 0 12 1 6 -1. - <_> - 0 14 1 2 3. - 0 - -0.0135790696367621 - -0.7921078205108643 - 5.2573881112039089e-003 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - -6.4325397834181786e-003 - 0.2247907966375351 - -0.0124902101233602 - <_> - - <_> - - - - <_> - 5 0 6 1 -1. - <_> - 7 0 2 1 3. - 0 - 1.7743050120770931e-003 - 0.0364163890480995 - -0.1267435997724533 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 13 1 1 1 2. - <_> - 12 2 1 1 2. - 0 - -2.8727769386023283e-003 - 0.2628813982009888 - -0.0141634698957205 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 8 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 9.7850046586245298e-005 - -0.0639546513557434 - 0.0806310325860977 - <_> - - <_> - - - - <_> - 13 0 2 6 -1. - <_> - 14 0 1 3 2. - <_> - 13 3 1 3 2. - 0 - 0.0173741504549980 - 2.8990509454160929e-003 - -0.4222680032253265 - <_> - - <_> - - - - <_> - 7 0 2 6 -1. - <_> - 7 0 1 3 2. - <_> - 8 3 1 3 2. - 0 - -1.4066740404814482e-003 - 0.1037238985300064 - -0.0464741513133049 - <_> - - <_> - - - - <_> - 12 1 4 2 -1. - <_> - 13 2 2 2 2. - 1 - -0.0167241301387548 - -0.2844854891300201 - 9.2373117804527283e-003 - <_> - - <_> - - - - <_> - 7 2 3 6 -1. - <_> - 8 4 1 2 9. - 0 - -0.0105585204437375 - -0.1054736971855164 - 0.0528896600008011 - <_> - - <_> - - - - <_> - 14 7 7 6 -1. - <_> - 12 9 7 2 3. - 1 - 0.1529330015182495 - 3.2300320453941822e-003 - -0.4754551947116852 - <_> - - <_> - - - - <_> - 8 7 6 7 -1. - <_> - 10 9 2 7 3. - 1 - 7.7029820531606674e-003 - -0.0609842985868454 - 0.0865678489208221 - <_> - - <_> - - - - <_> - 14 9 7 4 -1. - <_> - 13 10 7 2 2. - 1 - 0.0146332699805498 - -0.0172540694475174 - 0.0737695172429085 - <_> - - <_> - - - - <_> - 8 9 4 7 -1. - <_> - 9 10 2 7 2. - 1 - -5.9058261103928089e-003 - 0.1076534986495972 - -0.0582168586552143 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - -8.6052267579361796e-004 - -0.2470556944608688 - 0.0398328490555286 - <_> - - <_> - - - - <_> - 6 10 2 2 -1. - <_> - 6 10 1 1 2. - <_> - 7 11 1 1 2. - 0 - 1.3982819837110583e-005 - -0.0684815272688866 - 0.0724193900823593 - -0.9510170221328735 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -0.0227670203894377 - 0.3785588145256043 - -0.0745797529816628 - <_> - - <_> - - - - <_> - 11 0 4 4 -1. - <_> - 12 1 2 4 2. - 1 - 0.0138485003262758 - -0.0383959487080574 - 0.1586530059576035 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 4 4 2 2. - 0 - 0.0165016409009695 - -0.0403569899499416 - 0.3194091916084290 - <_> - - <_> - - - - <_> - 8 16 6 3 -1. - <_> - 8 17 6 1 3. - 0 - 0.0499459505081177 - 1.3500959612429142e-003 - -71.9016189575195310 - <_> - - <_> - - - - <_> - 9 5 4 2 -1. - <_> - 10 5 2 2 2. - 0 - 2.3085280554369092e-004 - -0.1594835072755814 - 0.0623017288744450 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 8 2 1 2. - 0 - -3.2616918906569481e-004 - 0.1148580983281136 - -0.0826259329915047 - <_> - - <_> - - - - <_> - 11 5 2 2 -1. - <_> - 11 5 1 2 2. - 1 - 2.0700939930975437e-003 - 0.0992442369461060 - -0.1876274943351746 - <_> - - <_> - - - - <_> - 9 12 10 1 -1. - <_> - 9 12 5 1 2. - 0 - 3.6466990131884813e-003 - -0.0594868212938309 - 0.0239153299480677 - <_> - - <_> - - - - <_> - 0 1 12 6 -1. - <_> - 4 3 4 2 9. - 0 - 0.4325824081897736 - -3.5108299925923347e-003 - -880.2276000976562500 - <_> - - <_> - - - - <_> - 3 2 16 12 -1. - <_> - 7 2 8 12 2. - 0 - -0.1513549983501434 - 0.2138621062040329 - -0.0371475294232368 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 5 1 1 3. - 1 - 1.4268080121837556e-005 - -0.0787627771496773 - 0.1108864992856979 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 19 0 2 1 2. - <_> - 17 1 2 1 2. - 0 - 4.5837109792046249e-004 - 0.0313378088176250 - -0.1278129965066910 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 7 4 2 2. - 0 - 8.5760722868144512e-004 - -0.1143099963665009 - 0.0847795307636261 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 9 7 4 1 3. - 0 - -1.3306170003488660e-003 - 0.1238019987940788 - -0.0631083622574806 - <_> - - <_> - - - - <_> - 9 7 4 3 -1. - <_> - 9 8 4 1 3. - 0 - -7.8581267734989524e-004 - 0.1447447985410690 - -0.0661315992474556 - <_> - - <_> - - - - <_> - 12 2 3 6 -1. - <_> - 12 5 3 3 2. - 0 - 0.0292032193392515 - 0.0158351194113493 - -0.2788634002208710 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 1 0 2 1 2. - <_> - 3 1 2 1 2. - 0 - -3.3595840795896947e-004 - -0.1398050934076309 - 0.0521566905081272 - <_> - - <_> - - - - <_> - 17 0 4 2 -1. - <_> - 19 0 2 1 2. - <_> - 17 1 2 1 2. - 0 - -4.9088441301137209e-004 - -0.1618237048387528 - 0.0529297590255737 - <_> - - <_> - - - - <_> - 0 5 18 12 -1. - <_> - 0 9 18 4 3. - 0 - -0.1088346019387245 - 0.2057444006204605 - -0.0400607995688915 - <_> - - <_> - - - - <_> - 5 6 12 14 -1. - <_> - 5 13 12 7 2. - 0 - -0.0354583896696568 - 0.1013875976204872 - -0.0837501436471939 - <_> - - <_> - - - - <_> - 1 0 4 2 -1. - <_> - 1 0 2 1 2. - <_> - 3 1 2 1 2. - 0 - 8.7126181460916996e-004 - 0.0444406084716320 - -0.1968950927257538 - <_> - - <_> - - - - <_> - 11 5 3 6 -1. - <_> - 11 8 3 3 2. - 0 - -0.0139932697638869 - -0.2245962023735046 - 0.0127666303887963 - <_> - - <_> - - - - <_> - 11 0 5 2 -1. - <_> - 11 0 5 1 2. - 1 - -2.2845380008220673e-003 - 0.0768024325370789 - -0.0921346619725227 - <_> - - <_> - - - - <_> - 7 0 9 6 -1. - <_> - 10 0 3 6 3. - 0 - -0.0101833296939731 - 0.1123685017228127 - -0.0539739802479744 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 9 4 2 3 2. - <_> - 11 7 2 3 2. - 0 - 3.5436619073152542e-003 - 0.0446331799030304 - -0.1477473974227905 - <_> - - <_> - - - - <_> - 13 4 2 1 -1. - <_> - 13 4 1 1 2. - 1 - 2.3777359456289560e-004 - -0.0862999036908150 - 0.0558211281895638 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - 1.0005419608205557e-003 - -0.0392572395503521 - 0.1532911956310272 - <_> - - <_> - - - - <_> - 11 12 1 4 -1. - <_> - 11 14 1 2 2. - 0 - 6.4915331313386559e-004 - -0.0499395616352558 - 0.0754400491714478 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 10 5 3 1 3. - 1 - -7.5847338885068893e-003 - -0.2426521033048630 - 0.0252703204751015 - <_> - - <_> - - - - <_> - 9 0 4 8 -1. - <_> - 9 4 4 4 2. - 0 - -0.0157125405967236 - 0.1729701012372971 - -0.0390575416386127 - <_> - - <_> - - - - <_> - 0 1 21 18 -1. - <_> - 7 7 7 6 9. - 0 - -0.3932178020477295 - -0.2507410943508148 - 0.0355131886899471 - <_> - - <_> - - - - <_> - 7 3 8 4 -1. - <_> - 11 3 4 2 2. - <_> - 7 5 4 2 2. - 0 - 6.4803091809153557e-003 - 0.0358161889016628 - -0.1549371033906937 - <_> - - <_> - - - - <_> - 10 0 3 6 -1. - <_> - 11 1 1 6 3. - 1 - -3.6928490735590458e-003 - 0.0660104975104332 - -0.0919773876667023 - <_> - - <_> - - - - <_> - 12 2 2 2 -1. - <_> - 13 2 1 1 2. - <_> - 12 3 1 1 2. - 0 - 4.0171178989112377e-004 - -0.0537318103015423 - 0.0623309798538685 - <_> - - <_> - - - - <_> - 8 2 2 2 -1. - <_> - 8 2 1 1 2. - <_> - 9 3 1 1 2. - 0 - -1.0566849960014224e-003 - 0.2406937927007675 - -0.0383795015513897 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 11 1 1 2 2. - <_> - 10 3 1 2 2. - 0 - -6.2974360771477222e-003 - -0.5507751107215881 - 0.0114449001848698 - <_> - - <_> - - - - <_> - 9 1 3 1 -1. - <_> - 10 1 1 1 3. - 0 - -2.2626901045441628e-003 - -0.3005490899085999 - 0.0199662297964096 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 4.4639740372076631e-004 - -0.0928699672222137 - 0.1191940978169441 - <_> - - <_> - - - - <_> - 10 7 2 2 -1. - <_> - 10 8 2 1 2. - 0 - 1.2323829287197441e-004 - -0.0805859193205833 - 0.0965828672051430 - <_> - - <_> - - - - <_> - 11 6 1 4 -1. - <_> - 11 8 1 2 2. - 0 - -4.2977688281098381e-005 - 0.0563250407576561 - -0.0618254691362381 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 6 2 2 2. - <_> - 11 8 2 2 2. - 0 - -1.3477250467985868e-003 - -0.1200817003846169 - 0.0559167712926865 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 13 6 1 2 2. - <_> - 12 8 1 2 2. - 0 - 4.2214780114591122e-004 - -0.0841756910085678 - 0.0996710807085037 - <_> - - <_> - - - - <_> - 11 5 4 3 -1. - <_> - 10 6 4 1 3. - 1 - 2.8857209254056215e-003 - 0.0653454735875130 - -0.1093126013875008 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - 3.0309830326586962e-003 - -0.0252474099397659 - 0.1988489031791687 - <_> - - <_> - - - - <_> - 8 1 6 6 -1. - <_> - 10 3 2 2 9. - 0 - -5.3361342288553715e-003 - 0.1004031002521515 - -0.0580721795558929 - <_> - - <_> - - - - <_> - 10 3 2 4 -1. - <_> - 10 5 2 2 2. - 0 - -3.8242610171437263e-003 - 0.1589820981025696 - -0.0421408489346504 - <_> - - <_> - - - - <_> - 8 7 6 3 -1. - <_> - 10 7 2 3 3. - 0 - -1.7378249904140830e-003 - -0.1345462054014206 - 0.0554777905344963 - <_> - - <_> - - - - <_> - 7 9 8 8 -1. - <_> - 9 9 4 8 2. - 0 - -0.0101921902969480 - 0.1206753030419350 - -0.0533065795898438 - <_> - - <_> - - - - <_> - 8 2 3 9 -1. - <_> - 8 5 3 3 3. - 0 - -7.0896078832447529e-003 - -0.1541862934827805 - 0.0441623888909817 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - -2.4648339021950960e-003 - 0.1708061993122101 - -0.0272748507559299 - <_> - - <_> - - - - <_> - 8 16 1 4 -1. - <_> - 8 17 1 2 2. - 0 - -6.4241851214319468e-004 - -0.1544283926486969 - 0.0400641709566116 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - 6.6317862365394831e-004 - -0.0303772501647472 - 0.0562707595527172 - <_> - - <_> - - - - <_> - 0 3 8 2 -1. - <_> - 0 3 4 1 2. - <_> - 4 4 4 1 2. - 0 - -8.2941073924303055e-003 - -0.4181183874607086 - 0.0134926298633218 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - -3.6951078800484538e-004 - 0.0484808310866356 - -0.0338374711573124 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - 1.3221809640526772e-003 - -0.0429062210023403 - 0.1283885985612869 - <_> - - <_> - - - - <_> - 12 10 1 2 -1. - <_> - 12 10 1 1 2. - 1 - -1.2671080185100436e-003 - -0.1104345023632050 - 0.0254413206130266 - <_> - - <_> - - - - <_> - 10 10 2 1 -1. - <_> - 10 10 1 1 2. - 1 - 2.4836331140249968e-003 - 0.0347067192196846 - -0.1894908994436264 - <_> - - <_> - - - - <_> - 9 7 6 5 -1. - <_> - 9 7 3 5 2. - 0 - -0.0625265166163445 - -0.5900452733039856 - 2.7786649297922850e-003 - <_> - - <_> - - - - <_> - 7 7 6 5 -1. - <_> - 10 7 3 5 2. - 0 - -0.0148974098265171 - 0.1875285059213638 - -0.0339591093361378 - <_> - - <_> - - - - <_> - 12 7 3 2 -1. - <_> - 12 7 3 1 2. - 1 - -0.0120027903467417 - -0.2891429066658020 - 7.3392977938055992e-003 - <_> - - <_> - - - - <_> - 10 7 2 3 -1. - <_> - 10 7 1 3 2. - 1 - 3.1435370910912752e-003 - 0.0440843887627125 - -0.1531521975994110 - <_> - - <_> - - - - <_> - 11 4 2 3 -1. - <_> - 11 5 2 1 3. - 0 - -2.4036609102040529e-003 - 0.1186152994632721 - -0.0273134093731642 - <_> - - <_> - - - - <_> - 8 9 6 5 -1. - <_> - 10 11 2 5 3. - 1 - -0.0357918106019497 - 0.1668061017990112 - -0.0354696512222290 - <_> - - <_> - - - - <_> - 15 8 6 2 -1. - <_> - 15 8 3 2 2. - 0 - 5.7867588475346565e-003 - 0.0224319491535425 - -0.0843387469649315 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - -2.6954410132020712e-003 - -0.3490492105484009 - 0.0147006995975971 - <_> - - <_> - - - - <_> - 18 17 3 1 -1. - <_> - 19 17 1 1 3. - 0 - 6.2262167921289802e-004 - -0.0424273908138275 - 0.1065089032053947 - <_> - - <_> - - - - <_> - 1 17 3 1 -1. - <_> - 2 17 1 1 3. - 0 - -8.7842030916363001e-004 - 0.1331004053354263 - -0.0418424494564533 - <_> - - <_> - - - - <_> - 20 17 1 3 -1. - <_> - 20 18 1 1 3. - 0 - -2.0373899023979902e-003 - -0.2330629974603653 - 0.0178129095584154 - <_> - - <_> - - - - <_> - 1 17 1 3 -1. - <_> - 1 18 1 1 3. - 0 - 1.3666530139744282e-003 - 0.0251803193241358 - -0.2123603969812393 - <_> - - <_> - - - - <_> - 18 17 3 1 -1. - <_> - 19 17 1 1 3. - 0 - -1.3152270112186670e-003 - 0.1921271979808807 - -0.0466171316802502 - <_> - - <_> - - - - <_> - 1 8 6 2 -1. - <_> - 4 8 3 2 2. - 0 - 0.0198018793016672 - 0.0149018000811338 - -0.3531922996044159 - <_> - - <_> - - - - <_> - 18 17 3 1 -1. - <_> - 19 17 1 1 3. - 0 - 3.1510000117123127e-003 - -0.0129411695525050 - 0.1473525017499924 - <_> - - <_> - - - - <_> - 9 1 4 9 -1. - <_> - 10 1 2 9 2. - 0 - 0.0352914296090603 - 7.3530990630388260e-003 - -0.7155619859695435 - <_> - - <_> - - - - <_> - 18 17 3 1 -1. - <_> - 19 17 1 1 3. - 0 - -2.8649759769905359e-005 - 0.0347856394946575 - -0.0339283198118210 - <_> - - <_> - - - - <_> - 1 17 3 1 -1. - <_> - 2 17 1 1 3. - 0 - 1.2113710399717093e-003 - -0.0355178192257881 - 0.1394135057926178 - <_> - - <_> - - - - <_> - 15 15 2 1 -1. - <_> - 15 15 1 1 2. - 1 - -1.8620840273797512e-003 - -0.1302960962057114 - 0.0245348103344440 - <_> - - <_> - - - - <_> - 3 8 6 9 -1. - <_> - 3 11 6 3 3. - 0 - -0.0276194699108601 - 0.1436026990413666 - -0.0343166403472424 - <_> - - <_> - - - - <_> - 7 8 12 4 -1. - <_> - 13 8 6 2 2. - <_> - 7 10 6 2 2. - 0 - 5.0724758766591549e-003 - 0.0204050894826651 - -0.0694124475121498 - <_> - - <_> - - - - <_> - 3 6 14 8 -1. - <_> - 3 6 7 4 2. - <_> - 10 10 7 4 2. - 0 - 0.0109031200408936 - 0.0509896799921989 - -0.1149106025695801 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 13 1 1 1 2. - <_> - 12 2 1 1 2. - 0 - -2.7553900144994259e-003 - 0.1967844069004059 - -0.0126979695633054 - <_> - - <_> - - - - <_> - 6 4 1 2 -1. - <_> - 6 5 1 1 2. - 0 - -1.8694249447435141e-003 - -0.2991512119770050 - 0.0168382208794355 - <_> - - <_> - - - - <_> - 15 15 2 1 -1. - <_> - 15 15 1 1 2. - 1 - 1.5511639649048448e-003 - 0.0247504301369190 - -0.1084539964795113 - <_> - - <_> - - - - <_> - 11 1 5 2 -1. - <_> - 11 1 5 1 2. - 1 - -0.0141589296981692 - 0.1219734027981758 - -0.0411658510565758 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 10 1 3 2. - 0 - -0.0127178598195314 - -0.4390971064567566 - 7.9397717490792274e-003 - <_> - - <_> - - - - <_> - 7 15 1 2 -1. - <_> - 7 15 1 1 2. - 1 - -1.6385139897465706e-003 - -0.1657593995332718 - 0.0310982801020145 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 13 1 1 1 2. - <_> - 12 2 1 1 2. - 0 - 3.5357510205358267e-004 - -0.0361883901059628 - 0.0645375177264214 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 8 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - -1.3709410559386015e-003 - 0.1969410032033920 - -0.0304013695567846 - <_> - - <_> - - - - <_> - 12 2 1 4 -1. - <_> - 11 3 1 2 2. - 1 - 0.0123117296025157 - 9.1771297156810760e-003 - -0.1316055953502655 - <_> - - <_> - - - - <_> - 10 0 2 4 -1. - <_> - 10 0 1 2 2. - <_> - 11 2 1 2 2. - 0 - 1.8457289552316070e-003 - 0.0308372508734465 - -0.1660210043191910 - <_> - - <_> - - - - <_> - 8 5 6 2 -1. - <_> - 8 5 3 2 2. - 0 - -0.0154733797535300 - 0.2588028907775879 - -0.0220113992691040 - <_> - - <_> - - - - <_> - 9 7 4 6 -1. - <_> - 9 7 2 3 2. - <_> - 11 10 2 3 2. - 0 - -2.1259100176393986e-003 - -0.1096803992986679 - 0.0471882894635201 - <_> - - <_> - - - - <_> - 14 5 6 6 -1. - <_> - 16 7 2 6 3. - 1 - -0.0314774885773659 - 0.0879504233598709 - -0.0290756598114967 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 6 7 6 2 3. - 1 - 8.3510661497712135e-003 - -0.0574183911085129 - 0.1225942969322205 - <_> - - <_> - - - - <_> - 4 5 17 3 -1. - <_> - 4 6 17 1 3. - 0 - -1.5261439839377999e-003 - 0.0512263886630535 - -0.0565888509154320 - <_> - - <_> - - - - <_> - 8 9 1 2 -1. - <_> - 8 10 1 1 2. - 0 - -4.0471060201525688e-003 - -0.7375336885452271 - 6.5819500014185905e-003 - <_> - - <_> - - - - <_> - 12 5 3 5 -1. - <_> - 13 5 1 5 3. - 0 - 2.3618470877408981e-003 - -0.0580767989158630 - 0.0973853766918182 - <_> - - <_> - - - - <_> - 8 12 4 1 -1. - <_> - 9 12 2 1 2. - 0 - -5.0288718193769455e-003 - -0.4069651067256928 - 0.0124501995742321 - <_> - - <_> - - - - <_> - 15 6 1 2 -1. - <_> - 15 7 1 1 2. - 0 - -4.5899039832875133e-004 - -0.1197678968310356 - 0.0304937604814768 - <_> - - <_> - - - - <_> - 9 4 2 3 -1. - <_> - 9 5 2 1 3. - 0 - -7.6553300023078918e-003 - 0.3279764056205750 - -0.0146796498447657 - <_> - - <_> - - - - <_> - 14 0 2 12 -1. - <_> - 14 6 2 6 2. - 0 - 0.0316511802375317 - 9.8373405635356903e-003 - -0.0994274765253067 - <_> - - <_> - - - - <_> - 10 5 2 4 -1. - <_> - 10 6 2 2 2. - 0 - -4.2005829163827002e-004 - 0.0694751963019371 - -0.0663179233670235 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 11 6 1 2 9. - 0 - -4.3475469574332237e-003 - -0.0922396034002304 - 0.0373974889516830 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - 3.5791029222309589e-003 - -0.0198549907654524 - 0.2408428043127060 - <_> - - <_> - - - - <_> - 13 0 2 8 -1. - <_> - 14 0 1 4 2. - <_> - 13 4 1 4 2. - 0 - -0.0109427496790886 - 0.2654236853122711 - -0.0124230701476336 - <_> - - <_> - - - - <_> - 7 0 2 8 -1. - <_> - 7 0 1 4 2. - <_> - 8 4 1 4 2. - 0 - 3.8771289400756359e-003 - -0.0578854791820049 - 0.1013325974345207 - <_> - - <_> - - - - <_> - 15 6 1 2 -1. - <_> - 15 7 1 1 2. - 0 - 5.1080808043479919e-003 - 4.0216930210590363e-003 - -0.8989754915237427 - <_> - - <_> - - - - <_> - 6 6 1 2 -1. - <_> - 6 7 1 1 2. - 0 - 4.7296998673118651e-004 - 0.0394651889801025 - -0.1323612928390503 - <_> - - <_> - - - - <_> - 15 6 1 3 -1. - <_> - 15 7 1 1 3. - 0 - -8.7365293875336647e-003 - -0.8564053177833557 - 6.3242338364943862e-004 - <_> - - <_> - - - - <_> - 6 6 1 3 -1. - <_> - 6 7 1 1 3. - 0 - -2.3332149721682072e-003 - -0.3086788058280945 - 0.0177113693207502 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 13 0 1 2 2. - 1 - 9.1973934322595596e-003 - 0.0128819104284048 - -0.2706327140331268 - <_> - - <_> - - - - <_> - 10 2 4 1 -1. - <_> - 11 3 2 1 2. - 1 - -9.0592764317989349e-003 - 0.3711126148700714 - -0.0154356602579355 - <_> - - <_> - - - - <_> - 13 0 2 2 -1. - <_> - 13 0 1 2 2. - 1 - -6.8536121398210526e-003 - -0.2324856072664261 - 0.0143964197486639 - <_> - - <_> - - - - <_> - 2 10 1 3 -1. - <_> - 2 11 1 1 3. - 0 - 3.2640730496495962e-003 - -0.0168301407247782 - 0.2882859110832214 - <_> - - <_> - - - - <_> - 18 17 1 2 -1. - <_> - 18 18 1 1 2. - 0 - 8.4918318316340446e-004 - 0.0280293095856905 - -0.1990423053503037 - <_> - - <_> - - - - <_> - 8 11 2 2 -1. - <_> - 8 11 1 1 2. - <_> - 9 12 1 1 2. - 0 - -2.1864029113203287e-003 - 0.2062786966562271 - -0.0222901403903961 - <_> - - <_> - - - - <_> - 18 17 1 2 -1. - <_> - 18 18 1 1 2. - 0 - -4.4997650547884405e-004 - -0.1590310931205750 - 0.0429443605244160 - <_> - - <_> - - - - <_> - 5 17 2 2 -1. - <_> - 5 17 1 1 2. - <_> - 6 18 1 1 2. - 0 - 2.9121869374648668e-005 - -0.0652820169925690 - 0.0711596980690956 - <_> - - <_> - - - - <_> - 11 4 4 9 -1. - <_> - 11 4 2 9 2. - 1 - 0.0434676595032215 - -0.0169599298387766 - 0.1099824011325836 - <_> - - <_> - - - - <_> - 3 17 1 2 -1. - <_> - 3 18 1 1 2. - 0 - -1.1365989921614528e-003 - -0.2205885946750641 - 0.0230355095118284 - <_> - - <_> - - - - <_> - 9 11 12 2 -1. - <_> - 9 12 12 1 2. - 0 - -0.0182069204747677 - -0.2978934049606323 - 9.9594965577125549e-003 - <_> - - <_> - - - - <_> - 11 4 9 4 -1. - <_> - 11 4 9 2 2. - 1 - 0.0668355897068977 - -0.0189572591334581 - 0.3066379129886627 - <_> - - <_> - - - - <_> - 18 16 1 4 -1. - <_> - 18 18 1 2 2. - 0 - -1.4330899830383714e-005 - 0.0570819117128849 - -0.0659035369753838 - <_> - - <_> - - - - <_> - 9 7 2 4 -1. - <_> - 9 7 1 2 2. - <_> - 10 9 1 2 2. - 0 - 1.4206670457497239e-003 - -0.0387372411787510 - 0.1287681013345718 - <_> - - <_> - - - - <_> - 8 6 9 4 -1. - <_> - 8 8 9 2 2. - 0 - 2.7356849750503898e-004 - -0.0769595876336098 - 0.0575614199042320 - <_> - - <_> - - - - <_> - 10 8 1 3 -1. - <_> - 10 9 1 1 3. - 0 - -4.3629730498651043e-005 - 0.0684175565838814 - -0.0727430880069733 - <_> - - <_> - - - - <_> - 10 5 3 6 -1. - <_> - 10 7 3 2 3. - 0 - 0.0224422607570887 - 0.0129069304093719 - -0.2776598930358887 - <_> - - <_> - - - - <_> - 0 7 14 2 -1. - <_> - 0 7 7 1 2. - <_> - 7 8 7 1 2. - 0 - -9.5062162727117538e-003 - 0.2252040952444077 - -0.0225529503077269 - <_> - - <_> - - - - <_> - 12 9 1 2 -1. - <_> - 12 9 1 1 2. - 1 - 0.0121538797393441 - 1.4640049776062369e-003 - -0.8271362781524658 - <_> - - <_> - - - - <_> - 10 9 2 1 -1. - <_> - 10 9 1 1 2. - 1 - -3.8760809693485498e-003 - -0.3000937104225159 - 0.0158183500170708 - <_> - - <_> - - - - <_> - 8 0 12 4 -1. - <_> - 14 0 6 2 2. - <_> - 8 2 6 2 2. - 0 - 0.0180561803281307 - -0.0273006390780210 - 0.1184393018484116 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - -0.0101981898769736 - -0.4674232900142670 - 0.0114392498508096 - <_> - - <_> - - - - <_> - 11 0 3 2 -1. - <_> - 12 1 1 2 3. - 1 - -1.8736829515546560e-003 - 0.0617134310305119 - -0.0543247610330582 - <_> - - <_> - - - - <_> - 2 17 2 2 -1. - <_> - 2 18 2 1 2. - 0 - -1.4160489627101924e-005 - 0.0658544227480888 - -0.0714039802551270 - <_> - - <_> - - - - <_> - 20 18 2 1 -1. - <_> - 20 18 1 1 2. - 0 - -7.5924489647150040e-004 - -0.0733705908060074 - 0.0153952101245523 - <_> - - <_> - - - - <_> - 10 9 5 3 -1. - <_> - 9 10 5 1 3. - 1 - 0.0196787305176258 - -0.0176703892648220 - 0.2626330852508545 - <_> - - <_> - - - - <_> - 11 1 8 19 -1. - <_> - 13 1 4 19 2. - 0 - -0.1782118976116180 - -0.5270333290100098 - 9.4334492459893227e-003 - <_> - - <_> - - - - <_> - 0 18 2 1 -1. - <_> - 1 18 1 1 2. - 0 - 1.4515940165438224e-005 - -0.0647079199552536 - 0.0695488601922989 - <_> - - <_> - - - - <_> - 16 16 6 4 -1. - <_> - 18 16 2 4 3. - 0 - -1.4563810545951128e-003 - 0.0425495803356171 - -0.0330005399882793 - <_> - - <_> - - - - <_> - 6 9 2 6 -1. - <_> - 6 9 2 3 2. - 1 - 0.0211800206452608 - 0.0269629806280136 - -0.1782280951738358 - <_> - - <_> - - - - <_> - 16 16 6 4 -1. - <_> - 18 16 2 4 3. - 0 - 7.7891332330182195e-004 - -0.0579324103891850 - 0.0770260766148567 - <_> - - <_> - - - - <_> - 0 16 6 4 -1. - <_> - 2 16 2 4 3. - 0 - -3.8158979732543230e-003 - 0.0972263216972351 - -0.0520601682364941 - <_> - - <_> - - - - <_> - 21 17 1 3 -1. - <_> - 21 18 1 1 3. - 0 - 7.4426521314308047e-004 - 0.0191511008888483 - -0.0979020223021507 - <_> - - <_> - - - - <_> - 2 12 6 8 -1. - <_> - 2 12 3 4 2. - <_> - 5 16 3 4 2. - 0 - -6.9776270538568497e-003 - 0.1150783002376556 - -0.0477221906185150 - <_> - - <_> - - - - <_> - 21 17 1 3 -1. - <_> - 21 18 1 1 3. - 0 - 1.4204400031303521e-005 - -0.0414903201162815 - 0.0492478497326374 - <_> - - <_> - - - - <_> - 0 17 1 3 -1. - <_> - 0 18 1 1 3. - 0 - -5.6304200552403927e-004 - -0.1438972055912018 - 0.0368015393614769 - <_> - - <_> - - - - <_> - 16 0 6 4 -1. - <_> - 15 1 6 2 2. - 1 - 2.6648829225450754e-003 - -0.0601117610931396 - 0.0932973474264145 - <_> - - <_> - - - - <_> - 5 6 12 9 -1. - <_> - 9 9 4 3 9. - 0 - -0.0882256180047989 - -0.1700637042522430 - 0.0295284707099199 - <_> - - <_> - - - - <_> - 11 11 3 1 -1. - <_> - 12 11 1 1 3. - 0 - -8.7953936308622360e-003 - -0.5826954841613770 - 1.8716199556365609e-003 - <_> - - <_> - - - - <_> - 8 11 3 1 -1. - <_> - 9 11 1 1 3. - 0 - -1.1649719672277570e-003 - 0.1248968988656998 - -0.0434571206569672 - <_> - - <_> - - - - <_> - 14 8 4 1 -1. - <_> - 15 8 2 1 2. - 0 - 1.3699769624508917e-005 - -0.0429619103670120 - 0.0449305102229118 - <_> - - <_> - - - - <_> - 8 3 1 3 -1. - <_> - 8 4 1 1 3. - 0 - 2.8596229385584593e-003 - 0.0143351303413510 - -0.3057282865047455 - <_> - - <_> - - - - <_> - 11 6 3 3 -1. - <_> - 12 7 1 1 9. - 0 - -0.0226747207343578 - 0.4061759114265442 - -0.0108558498322964 - <_> - - <_> - - - - <_> - 7 1 3 1 -1. - <_> - 8 2 1 1 3. - 1 - -9.9256280809640884e-003 - 0.2725431919097900 - -0.0161586608737707 - <_> - - <_> - - - - <_> - 13 0 2 16 -1. - <_> - 13 0 1 16 2. - 0 - 0.0595025010406971 - 4.5848288573324680e-003 - -0.7374308705329895 - <_> - - <_> - - - - <_> - 7 0 2 16 -1. - <_> - 8 0 1 16 2. - 0 - 0.0510611608624458 - 5.0964308902621269e-003 - -0.7698494195938110 - <_> - - <_> - - - - <_> - 14 0 7 3 -1. - <_> - 13 1 7 1 3. - 1 - -0.0124725401401520 - 0.0844977796077728 - -0.0331250391900539 - <_> - - <_> - - - - <_> - 6 4 3 2 -1. - <_> - 6 5 3 1 2. - 0 - 1.4897279907017946e-003 - 0.0369121618568897 - -0.1381831020116806 - <_> - - <_> - - - - <_> - 15 0 1 12 -1. - <_> - 15 6 1 6 2. - 0 - -0.0221475102007389 - -0.1614422947168350 - 9.0466598048806190e-003 - <_> - - <_> - - - - <_> - 2 2 18 6 -1. - <_> - 2 2 9 3 2. - <_> - 11 5 9 3 2. - 0 - 9.4495322555303574e-003 - 0.0469722002744675 - -0.1071633994579315 - <_> - - <_> - - - - <_> - 11 12 4 3 -1. - <_> - 11 12 2 3 2. - 0 - 1.9293139921501279e-003 - -0.0342863313853741 - 0.0527777411043644 - <_> - - <_> - - - - <_> - 1 5 9 15 -1. - <_> - 4 10 3 5 9. - 0 - -0.3889464139938355 - -0.7678672075271606 - 5.8184252120554447e-003 - <_> - - <_> - - - - <_> - 11 6 8 3 -1. - <_> - 10 7 8 1 3. - 1 - 0.0225085206329823 - -0.0116242896765471 - 0.0884225070476532 - <_> - - <_> - - - - <_> - 11 6 3 8 -1. - <_> - 12 7 1 8 3. - 1 - -0.0226056594401598 - 0.2446119040250778 - -0.0177405793219805 - <_> - - <_> - - - - <_> - 12 15 9 3 -1. - <_> - 12 16 9 1 3. - 0 - -0.0116660501807928 - -0.2560279965400696 - 0.0114545496180654 - <_> - - <_> - - - - <_> - 9 6 3 6 -1. - <_> - 9 8 3 2 3. - 0 - -0.0207105800509453 - -0.5588365197181702 - 7.5737191364169121e-003 - <_> - - <_> - - - - <_> - 13 2 3 11 -1. - <_> - 14 3 1 11 3. - 1 - 0.0788275003433228 - 3.9148649193521123e-006 - -0.7562364935874939 - <_> - - <_> - - - - <_> - 9 2 11 3 -1. - <_> - 8 3 11 1 3. - 1 - 0.0237265992909670 - -0.0231465008109808 - 0.1993750929832459 - <_> - - <_> - - - - <_> - 10 4 3 1 -1. - <_> - 11 4 1 1 3. - 0 - 1.2368409661576152e-003 - 0.0382889211177826 - -0.1217764019966126 - <_> - - <_> - - - - <_> - 2 3 6 2 -1. - <_> - 2 3 3 1 2. - <_> - 5 4 3 1 2. - 0 - -1.4358550288307015e-005 - 0.0606589391827583 - -0.0736541226506233 - <_> - - <_> - - - - <_> - 2 19 20 1 -1. - <_> - 7 19 10 1 2. - 0 - 8.7936148047447205e-003 - -0.0338966101408005 - 0.0952057018876076 - <_> - - <_> - - - - <_> - 6 3 1 2 -1. - <_> - 6 4 1 1 2. - 0 - -2.3806949320714921e-004 - -0.0999665334820747 - 0.0454784408211708 - <_> - - <_> - - - - <_> - 12 5 3 5 -1. - <_> - 13 5 1 5 3. - 0 - -8.3054965361952782e-003 - 0.1342037022113800 - -0.0255438499152660 - <_> - - <_> - - - - <_> - 7 14 1 2 -1. - <_> - 7 14 1 1 2. - 1 - 8.1005110405385494e-004 - 0.0404906198382378 - -0.1121520996093750 - <_> - - <_> - - - - <_> - 5 13 12 7 -1. - <_> - 5 13 6 7 2. - 0 - -0.1723805963993073 - -0.5044224262237549 - 8.9577194303274155e-003 - <_> - - <_> - - - - <_> - 6 13 2 4 -1. - <_> - 6 13 1 2 2. - <_> - 7 15 1 2 2. - 0 - 2.9706210625590757e-005 - -0.0709579810500145 - 0.0634167864918709 - <_> - - <_> - - - - <_> - 10 9 5 8 -1. - <_> - 10 11 5 4 2. - 0 - -0.0354120284318924 - -0.1748563945293427 - 9.6797533333301544e-003 - <_> - - <_> - - - - <_> - 7 5 3 5 -1. - <_> - 8 5 1 5 3. - 0 - 8.2069952040910721e-003 - -0.0289697796106339 - 0.1615198999643326 - <_> - - <_> - - - - <_> - 9 1 4 1 -1. - <_> - 10 1 2 1 2. - 0 - -4.4735260307788849e-003 - -0.4466044902801514 - 0.0101117203012109 - <_> - - <_> - - - - <_> - 6 5 3 1 -1. - <_> - 7 5 1 1 3. - 0 - 4.2432491318322718e-004 - -0.0454507395625114 - 0.0987225472927094 - <_> - - <_> - - - - <_> - 5 1 16 6 -1. - <_> - 13 1 8 3 2. - <_> - 5 4 8 3 2. - 0 - -0.0937954634428024 - 0.4735692143440247 - -5.7168500497937202e-003 - <_> - - <_> - - - - <_> - 1 1 16 6 -1. - <_> - 1 1 8 3 2. - <_> - 9 4 8 3 2. - 0 - -6.3939332903828472e-005 - -0.1003025025129318 - 0.0560995712876320 - <_> - - <_> - - - - <_> - 14 4 4 8 -1. - <_> - 15 4 2 8 2. - 0 - -0.0517758615314960 - -0.8506289124488831 - 2.1091110538691282e-003 - <_> - - <_> - - - - <_> - 4 4 4 8 -1. - <_> - 5 4 2 8 2. - 0 - 2.3427829146385193e-003 - -0.0607027187943459 - 0.0873003974556923 - <_> - - <_> - - - - <_> - 12 0 4 13 -1. - <_> - 13 0 2 13 2. - 0 - -0.0556834787130356 - -0.3628343939781189 - 6.0013919137418270e-003 - <_> - - <_> - - - - <_> - 8 13 3 3 -1. - <_> - 9 14 1 1 9. - 0 - 0.0196561794728041 - -0.0154549600556493 - 0.2935960888862610 - <_> - - <_> - - - - <_> - 15 12 2 1 -1. - <_> - 15 12 1 1 2. - 1 - -5.2067539654672146e-003 - -0.1410772949457169 - 9.3313539400696754e-003 - <_> - - <_> - - - - <_> - 6 0 4 20 -1. - <_> - 7 0 2 20 2. - 0 - -0.0819322168827057 - -0.7035617232322693 - 6.1017181724309921e-003 - <_> - - <_> - - - - <_> - 5 5 15 15 -1. - <_> - 5 10 15 5 3. - 0 - -0.1077117994427681 - 0.1223495006561279 - -0.0272945296019316 - <_> - - <_> - - - - <_> - 7 9 5 8 -1. - <_> - 7 11 5 4 2. - 0 - -0.0442637391388416 - -0.4697397053241730 - 0.0111725702881813 - <_> - - <_> - - - - <_> - 10 9 12 3 -1. - <_> - 10 9 6 3 2. - 0 - -0.0117348497733474 - 0.0799076333642006 - -0.0392458103597164 - <_> - - <_> - - - - <_> - 11 3 6 4 -1. - <_> - 10 4 6 2 2. - 1 - -4.9447570927441120e-003 - -0.1425386965274811 - 0.0360192991793156 - <_> - - <_> - - - - <_> - 9 3 4 4 -1. - <_> - 9 5 4 2 2. - 0 - -0.0127587001770735 - 0.2107456028461456 - -0.0270084906369448 - <_> - - <_> - - - - <_> - 7 12 1 2 -1. - <_> - 7 12 1 1 2. - 1 - -2.4229190312325954e-003 - -0.1734836995601654 - 0.0270113106817007 - <_> - - <_> - - - - <_> - 14 9 3 10 -1. - <_> - 14 14 3 5 2. - 0 - 0.0127624897286296 - -0.0409950800240040 - 0.1002665981650353 - <_> - - <_> - - - - <_> - 9 6 3 9 -1. - <_> - 10 9 1 3 9. - 0 - -0.0198467504233122 - -0.1718955934047699 - 0.0278430990874767 - <_> - - <_> - - - - <_> - 1 13 20 6 -1. - <_> - 1 16 20 3 2. - 0 - -9.6252951771020889e-003 - 0.0752357318997383 - -0.0624770410358906 - <_> - - <_> - - - - <_> - 5 9 3 10 -1. - <_> - 5 14 3 5 2. - 0 - 0.0144210597500205 - -0.0447469614446163 - 0.1276118010282517 - <_> - - <_> - - - - <_> - 14 1 3 6 -1. - <_> - 15 2 1 6 3. - 1 - -0.0176012292504311 - -0.1841177046298981 - 7.5616179965436459e-003 - <_> - - <_> - - - - <_> - 8 1 6 3 -1. - <_> - 7 2 6 1 3. - 1 - 2.6960249524563551e-003 - 0.0513096414506435 - -0.0992342904210091 - <_> - - <_> - - - - <_> - 11 6 3 3 -1. - <_> - 12 7 1 1 9. - 0 - 8.8272113353013992e-003 - -0.0294266995042562 - 0.1287119984626770 - <_> - - <_> - - - - <_> - 3 9 8 1 -1. - <_> - 3 9 4 1 2. - 1 - 1.5159220201894641e-003 - -0.0709519833326340 - 0.0702581033110619 - <_> - - <_> - - - - <_> - 10 9 12 3 -1. - <_> - 10 9 6 3 2. - 0 - 0.0999002829194069 - 4.2045200243592262e-003 - -0.2563616037368774 - <_> - - <_> - - - - <_> - 0 9 12 3 -1. - <_> - 6 9 6 3 2. - 0 - -0.0906451717019081 - -0.7347174882888794 - 7.1614691987633705e-003 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -8.4249622887000442e-004 - -0.1590052992105484 - 0.0246664192527533 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - -3.0089109204709530e-003 - 0.2317329943180084 - -0.0218157097697258 - <_> - - <_> - - - - <_> - 10 4 3 6 -1. - <_> - 11 6 1 2 9. - 0 - -0.0336374416947365 - -0.3621835112571716 - 7.5414488092064857e-003 - <_> - - <_> - - - - <_> - 3 8 9 12 -1. - <_> - 3 14 9 6 2. - 0 - -0.2282427996397018 - -0.5342617034912109 - 8.0225821584463120e-003 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 16 7 1 6 3. - 1 - 0.0182167608290911 - -0.0155835496261716 - 0.1687787026166916 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 8 9 3 1 2. - <_> - 11 10 3 1 2. - 0 - 3.0790129676461220e-003 - 0.0245129801332951 - -0.1923595070838928 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - -4.4569619931280613e-003 - -0.2031261026859283 - 0.0244771391153336 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 11 6 1 4 2. - 0 - -0.0121450796723366 - 0.5403389930725098 - -8.7826717644929886e-003 - <_> - - <_> - - - - <_> - 11 6 2 6 -1. - <_> - 11 6 2 3 2. - 1 - -0.0238737594336271 - 0.1376380026340485 - -0.0117327095940709 - <_> - - <_> - - - - <_> - 6 4 6 9 -1. - <_> - 8 7 2 3 9. - 0 - -0.0274476502090693 - -0.1619385927915573 - 0.0283788703382015 - <_> - - <_> - - - - <_> - 8 7 6 8 -1. - <_> - 8 7 3 8 2. - 0 - -0.0454043895006180 - 0.2264519035816193 - -0.0287702493369579 - <_> - - <_> - - - - <_> - 10 15 2 2 -1. - <_> - 11 15 1 2 2. - 0 - 1.6533889574930072e-003 - 0.0300143100321293 - -0.1552712023258209 - <_> - - <_> - - - - <_> - 15 6 3 6 -1. - <_> - 16 7 1 6 3. - 1 - -0.0123942801728845 - 0.1113084033131599 - -0.0258273594081402 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 6 7 6 1 3. - 1 - 0.0187195092439651 - -0.0193438399583101 - 0.2607466876506805 - <_> - - <_> - - - - <_> - 11 3 2 2 -1. - <_> - 12 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - -2.9856900218874216e-003 - -0.2821316123008728 - 7.8225499019026756e-003 - <_> - - <_> - - - - <_> - 2 12 7 4 -1. - <_> - 2 13 7 2 2. - 0 - -0.0204809904098511 - -0.5602949857711792 - 8.0386884510517120e-003 - <_> - - <_> - - - - <_> - 11 7 10 10 -1. - <_> - 16 7 5 5 2. - <_> - 11 12 5 5 2. - 0 - 6.2915110029280186e-003 - -0.0470076017081738 - 0.0690912976861000 - <_> - - <_> - - - - <_> - 1 13 3 3 -1. - <_> - 2 14 1 1 9. - 0 - -0.0111426999792457 - 0.2155677974224091 - -0.0202549807727337 - <_> - - <_> - - - - <_> - 13 9 1 3 -1. - <_> - 13 10 1 1 3. - 0 - -3.1025360804051161e-003 - -0.2167268991470337 - 0.0130149200558662 - <_> - - <_> - - - - <_> - 0 12 3 2 -1. - <_> - 1 12 1 2 3. - 0 - 7.7247130684554577e-003 - 9.9663622677326202e-003 - -0.4480985999107361 - <_> - - <_> - - - - <_> - 14 0 2 14 -1. - <_> - 14 7 2 7 2. - 0 - -0.0885263234376907 - 0.5446575880050659 - -1.8960989546030760e-003 - <_> - - <_> - - - - <_> - 6 0 2 14 -1. - <_> - 6 7 2 7 2. - 0 - 0.0616876892745495 - 8.9669581502676010e-003 - -0.5000360012054443 - <_> - - <_> - - - - <_> - 6 0 11 2 -1. - <_> - 6 1 11 1 2. - 0 - 0.0137229301035404 - -0.0131843797862530 - 0.2320412993431091 - <_> - - <_> - - - - <_> - 7 3 7 6 -1. - <_> - 7 5 7 2 3. - 0 - -0.0496747195720673 - -0.3970086872577667 - 0.0112912002950907 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - 1.4873009640723467e-003 - -0.0374900102615356 - 0.1498876065015793 - <_> - - <_> - - - - <_> - 8 9 1 3 -1. - <_> - 8 10 1 1 3. - 0 - 1.4871370512992144e-003 - 0.0251839403063059 - -0.1825831979513168 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - -4.9300859682261944e-003 - 0.2332993000745773 - -0.0202095806598663 - <_> - - <_> - - - - <_> - 0 0 22 14 -1. - <_> - 11 0 11 14 2. - 0 - 0.3870880901813507 - 0.0141891995444894 - -0.3303585052490234 - <_> - - <_> - - - - <_> - 17 9 3 6 -1. - <_> - 18 9 1 6 3. - 0 - -0.0156427994370461 - -0.2209980934858322 - 7.4994498863816261e-003 - <_> - - <_> - - - - <_> - 2 9 3 6 -1. - <_> - 3 9 1 6 3. - 0 - 4.7617158852517605e-003 - 0.0275772009044886 - -0.1608694940805435 - <_> - - <_> - - - - <_> - 16 8 6 4 -1. - <_> - 15 9 6 2 2. - 1 - 6.0681640170514584e-003 - -0.0376585908234119 - 0.0900749191641808 - <_> - - <_> - - - - <_> - 1 14 4 6 -1. - <_> - 2 14 2 6 2. - 0 - 7.3775771306827664e-004 - -0.0576814897358418 - 0.0817965418100357 - <_> - - <_> - - - - <_> - 18 16 3 3 -1. - <_> - 19 17 1 1 9. - 0 - 9.9665368907153606e-004 - -0.0294811502099037 - 0.0495949499309063 - <_> - - <_> - - - - <_> - 1 16 3 3 -1. - <_> - 2 17 1 1 9. - 0 - -7.1411498356610537e-004 - 0.0798537507653236 - -0.0568893998861313 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - 4.0103218634612858e-004 - 0.0396456308662891 - -0.1250797957181931 - <_> - - <_> - - - - <_> - 1 2 3 1 -1. - <_> - 2 2 1 1 3. - 0 - -4.3492428958415985e-003 - 0.3426715135574341 - -0.0131715796887875 - <_> - - <_> - - - - <_> - 20 3 2 2 -1. - <_> - 21 3 1 1 2. - <_> - 20 4 1 1 2. - 0 - -4.5664971694350243e-003 - -0.5734894275665283 - 3.4244819544255733e-003 - <_> - - <_> - - - - <_> - 8 17 6 2 -1. - <_> - 11 17 3 2 2. - 0 - -0.0166549496352673 - -0.2947582900524139 - 0.0145107097923756 - <_> - - <_> - - - - <_> - 20 6 2 12 -1. - <_> - 20 6 2 6 2. - 1 - 0.1676367968320847 - 7.0861837593838573e-004 - -0.9997239708900452 - <_> - - <_> - - - - <_> - 2 6 12 2 -1. - <_> - 2 6 6 2 2. - 1 - -0.0144386803731322 - 0.0916193425655365 - -0.0519604682922363 - <_> - - <_> - - - - <_> - 18 12 1 2 -1. - <_> - 18 13 1 1 2. - 0 - 6.6305609652772546e-004 - 0.0293652098625898 - -0.1349090039730072 - <_> - - <_> - - - - <_> - 3 12 1 2 -1. - <_> - 3 13 1 1 2. - 0 - -1.4088350326346699e-005 - 0.0681181475520134 - -0.0697581395506859 - <_> - - <_> - - - - <_> - 16 8 6 4 -1. - <_> - 15 9 6 2 2. - 1 - -0.0144993504509330 - 0.1063626036047936 - -0.0263395793735981 - <_> - - <_> - - - - <_> - 3 15 1 2 -1. - <_> - 3 16 1 1 2. - 0 - -1.4112069948168937e-005 - 0.0679335296154022 - -0.0715385526418686 - <_> - - <_> - - - - <_> - 14 0 2 2 -1. - <_> - 14 0 1 2 2. - 1 - 3.2297680154442787e-003 - 0.0356169603765011 - -0.1498717069625855 - <_> - - <_> - - - - <_> - 1 10 7 3 -1. - <_> - 1 11 7 1 3. - 0 - -1.2449090136215091e-003 - 0.0853109732270241 - -0.0503032281994820 - <_> - - <_> - - - - <_> - 14 8 4 6 -1. - <_> - 14 10 4 2 3. - 0 - 1.9396430579945445e-003 - -0.0329930782318115 - 0.0527110584080219 - <_> - - <_> - - - - <_> - 2 14 11 3 -1. - <_> - 2 15 11 1 3. - 0 - 1.5153799904510379e-003 - 0.0473504513502121 - -0.0901075974106789 - <_> - - <_> - - - - <_> - 11 13 3 3 -1. - <_> - 12 14 1 1 9. - 0 - -0.0201515797525644 - 0.3101863861083984 - -0.0105604100972414 - <_> - - <_> - - - - <_> - 6 14 1 3 -1. - <_> - 6 15 1 1 3. - 0 - -1.0241220006719232e-003 - -0.1578308939933777 - 0.0268511995673180 - <_> - - <_> - - - - <_> - 16 8 6 4 -1. - <_> - 15 9 6 2 2. - 1 - 0.0283792000263929 - -9.9058141931891441e-003 - 0.1426537930965424 - <_> - - <_> - - - - <_> - 10 1 10 4 -1. - <_> - 9 2 10 2 2. - 1 - 0.0536109507083893 - 0.0104730296880007 - -0.4455065131187439 - <_> - - <_> - - - - <_> - 13 4 2 1 -1. - <_> - 13 4 1 1 2. - 1 - -0.0141603900119662 - -1. - 7.1694981306791306e-004 - <_> - - <_> - - - - <_> - 9 4 1 2 -1. - <_> - 9 4 1 1 2. - 1 - 2.1303679386619478e-004 - -0.0696763172745705 - 0.0648595094680786 - <_> - - <_> - - - - <_> - 13 3 3 6 -1. - <_> - 14 3 1 6 3. - 0 - -4.8539000563323498e-003 - 0.0713236927986145 - -0.0461753495037556 - <_> - - <_> - - - - <_> - 6 3 3 6 -1. - <_> - 7 3 1 6 3. - 0 - 3.0484499875456095e-003 - -0.0513212792575359 - 0.1462662965059280 - <_> - - <_> - - - - <_> - 11 3 2 9 -1. - <_> - 8 6 2 3 3. - 1 - 0.1264737993478775 - 7.6361437095329165e-004 - -1.0042829513549805 - <_> - - <_> - - - - <_> - 11 3 9 2 -1. - <_> - 14 6 3 2 3. - 1 - -0.0310129392892122 - -0.1655513048171997 - 0.0310505498200655 - <_> - - <_> - - - - <_> - 12 5 1 9 -1. - <_> - 9 8 1 3 3. - 1 - 0.0510119982063770 - 1.7226659692823887e-003 - -0.3514971137046814 - <_> - - <_> - - - - <_> - 10 5 9 1 -1. - <_> - 13 8 3 1 3. - 1 - 0.0108261099085212 - 0.0385181196033955 - -0.1305204033851624 - <_> - - <_> - - - - <_> - 6 6 12 8 -1. - <_> - 6 8 12 4 2. - 0 - 0.0487448200583458 - -0.0224283598363400 - 0.1827031970024109 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 7 8 3 2 3. - 0 - -0.0125707797706127 - 0.2890127003192902 - -0.0173910893499851 - <_> - - <_> - - - - <_> - 11 13 3 3 -1. - <_> - 12 14 1 1 9. - 0 - 0.0174124799668789 - -0.0103308400139213 - 0.1696172952651978 - <_> - - <_> - - - - <_> - 0 3 2 2 -1. - <_> - 0 3 1 1 2. - <_> - 1 4 1 1 2. - 0 - 2.0524440333247185e-004 - 0.0385092012584209 - -0.1221916973590851 - <_> - - <_> - - - - <_> - 11 13 3 3 -1. - <_> - 12 14 1 1 9. - 0 - -1.2439410202205181e-003 - 0.0540020093321800 - -0.0351045317947865 - <_> - - <_> - - - - <_> - 11 4 2 2 -1. - <_> - 11 4 2 1 2. - 1 - 6.1096338322386146e-004 - -0.0704459324479103 - 0.0623629316687584 - <_> - - <_> - - - - <_> - 9 0 12 6 -1. - <_> - 15 0 6 3 2. - <_> - 9 3 6 3 2. - 0 - -0.0137419197708368 - 0.0925441011786461 - -0.0306410696357489 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 10 5 3 1 3. - 1 - -2.8044390492141247e-003 - -0.1233078017830849 - 0.0421051718294621 - <_> - - <_> - - - - <_> - 11 13 3 3 -1. - <_> - 12 14 1 1 9. - 0 - 0.0470487587153912 - 1.0950920404866338e-003 - -0.8419005274772644 - <_> - - <_> - - - - <_> - 8 13 3 3 -1. - <_> - 9 14 1 1 9. - 0 - -0.0148905701935291 - 0.2551788985729218 - -0.0179528892040253 - <_> - - <_> - - - - <_> - 12 5 3 6 -1. - <_> - 13 6 1 6 3. - 1 - 3.8549639284610748e-003 - 0.0222355704754591 - -0.0424143709242344 - <_> - - <_> - - - - <_> - 10 5 6 3 -1. - <_> - 9 6 6 1 3. - 1 - -8.3304597064852715e-003 - -0.1728084981441498 - 0.0261876303702593 - <_> - - <_> - - - - <_> - 6 0 16 2 -1. - <_> - 6 1 16 1 2. - 0 - -2.4235919117927551e-003 - 0.0615216791629791 - -0.0423467904329300 - <_> - - <_> - - - - <_> - 5 0 11 2 -1. - <_> - 5 1 11 1 2. - 0 - 2.0981200505048037e-003 - -0.0451520197093487 - 0.1258704066276550 - <_> - - <_> - - - - <_> - 16 3 2 9 -1. - <_> - 16 3 1 9 2. - 1 - -0.0312790982425213 - -0.4962173998355866 - 3.0154960695654154e-003 - <_> - - <_> - - - - <_> - 6 3 5 2 -1. - <_> - 6 3 5 1 2. - 1 - -9.8806107416749001e-004 - 0.0786856487393379 - -0.0610104911029339 - <_> - - <_> - - - - <_> - 13 0 7 3 -1. - <_> - 12 1 7 1 3. - 1 - -3.1887448858469725e-003 - 0.0486667007207870 - -0.0690955519676209 - <_> - - <_> - - - - <_> - 3 6 2 1 -1. - <_> - 4 6 1 1 2. - 0 - 3.6120909499004483e-004 - 0.0379865393042564 - -0.1291670948266983 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - -4.7003240324556828e-003 - 0.1573586016893387 - -0.0319875106215477 - <_> - - <_> - - - - <_> - 10 4 2 3 -1. - <_> - 10 5 2 1 3. - 0 - 4.0772740612737834e-004 - -0.0817006826400757 - 0.0702771991491318 - <_> - - <_> - - - - <_> - 11 4 1 4 -1. - <_> - 11 5 1 2 2. - 0 - -1.5688460553064942e-004 - 0.0660891830921173 - -0.0586844608187675 - <_> - - <_> - - - - <_> - 10 9 2 1 -1. - <_> - 11 9 1 1 2. - 0 - -8.8306762336287647e-005 - 0.0766480863094330 - -0.0614611282944679 - <_> - - <_> - - - - <_> - 11 3 1 6 -1. - <_> - 9 5 1 2 3. - 1 - -8.4060793742537498e-003 - -0.0479354709386826 - 0.0196607392281294 - <_> - - <_> - - - - <_> - 11 3 6 1 -1. - <_> - 13 5 2 1 3. - 1 - -7.5640631839632988e-003 - -0.1312979012727737 - 0.0368356294929981 - <_> - - <_> - - - - <_> - 17 15 2 2 -1. - <_> - 18 15 1 1 2. - <_> - 17 16 1 1 2. - 0 - 2.9140699552954175e-005 - -0.0487714111804962 - 0.0541090108454227 - <_> - - <_> - - - - <_> - 3 15 2 2 -1. - <_> - 3 15 1 1 2. - <_> - 4 16 1 1 2. - 0 - -2.9703689506277442e-005 - 0.0775053724646568 - -0.0625666305422783 - <_> - - <_> - - - - <_> - 4 7 18 12 -1. - <_> - 4 7 9 12 2. - 0 - 0.4652022123336792 - 3.2388810068368912e-003 - -0.9539070129394531 - <_> - - <_> - - - - <_> - 0 7 18 12 -1. - <_> - 9 7 9 12 2. - 0 - 0.4361734092235565 - -0.0104711996391416 - 0.4927437901496887 - <_> - - <_> - - - - <_> - 8 0 14 19 -1. - <_> - 8 0 7 19 2. - 0 - 0.4762246906757355 - 0.0101920496672392 - -0.3060969114303589 - -0.8897982835769653 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 0 3 4 -1. - <_> - 11 1 1 4 3. - 1 - -6.9590657949447632e-003 - 0.1586847007274628 - -0.1623982042074204 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 9 6 4 1 3. - 0 - -3.0573920812457800e-003 - 0.1538061052560806 - -0.1044771000742912 - <_> - - <_> - - - - <_> - 2 17 6 2 -1. - <_> - 2 18 6 1 2. - 0 - 0.0491136200726032 - 3.1365771428681910e-004 - -591.0366821289062500 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 12 8 1 2 3. - 0 - 3.5433040466159582e-003 - -0.0586945302784443 - 0.1902541965246201 - <_> - - <_> - - - - <_> - 7 6 6 3 -1. - <_> - 7 7 6 1 3. - 0 - -3.1152060255408287e-003 - 0.1691839993000031 - -0.0572613514959812 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 10 8 2 3 2. - 0 - -3.0493480153381824e-004 - 0.0873399525880814 - -0.1160937026143074 - <_> - - <_> - - - - <_> - 8 5 6 4 -1. - <_> - 8 7 6 2 2. - 0 - -2.9056929051876068e-003 - -0.1656973958015442 - 0.0894973203539848 - <_> - - <_> - - - - <_> - 13 15 5 2 -1. - <_> - 13 16 5 1 2. - 0 - 2.4364320561289787e-003 - -6.1192200519144535e-003 - -0.1170884966850281 - <_> - - <_> - - - - <_> - 1 4 20 15 -1. - <_> - 1 9 20 5 3. - 0 - -0.1927244067192078 - 0.2519929111003876 - -0.0253725405782461 - <_> - - <_> - - - - <_> - 5 2 12 9 -1. - <_> - 8 2 6 9 2. - 0 - -0.1584742069244385 - 0.4734934866428375 - 0.0119436504319310 - <_> - - <_> - - - - <_> - 10 0 2 4 -1. - <_> - 10 0 1 4 2. - 1 - -0.0144659196957946 - 0.2601493895053864 - -0.0329485982656479 - <_> - - <_> - - - - <_> - 19 6 1 12 -1. - <_> - 15 10 1 4 3. - 1 - 0.1493694037199020 - 1.3150180166121572e-004 - -18.8447494506835940 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 2 1 2. - <_> - 4 1 2 1 2. - 0 - -8.5310498252511024e-004 - -0.1798812001943588 - 0.0397865995764732 - <_> - - <_> - - - - <_> - 3 0 16 20 -1. - <_> - 3 10 16 10 2. - 0 - -0.0716765671968460 - 0.0977268964052200 - -0.0726781785488129 - <_> - - <_> - - - - <_> - 10 4 4 1 -1. - <_> - 11 5 2 1 2. - 1 - -1.6500559868291020e-003 - -0.1622869074344635 - 0.0455433502793312 - <_> - - <_> - - - - <_> - 12 0 10 8 -1. - <_> - 12 4 10 4 2. - 0 - 0.0876812785863876 - 0.0107319103553891 - -0.2547324001789093 - <_> - - <_> - - - - <_> - 1 1 7 18 -1. - <_> - 1 10 7 9 2. - 0 - 0.0421371795237064 - -0.0585855990648270 - 0.1230780035257340 - <_> - - <_> - - - - <_> - 16 0 3 10 -1. - <_> - 17 1 1 10 3. - 1 - 1.5697469934821129e-003 - 0.0391958914697170 - -0.0375770889222622 - <_> - - <_> - - - - <_> - 6 0 10 3 -1. - <_> - 5 1 10 1 3. - 1 - 4.3402929441072047e-004 - 0.0724392980337143 - -0.0915380865335464 - <_> - - <_> - - - - <_> - 11 8 3 2 -1. - <_> - 12 8 1 2 3. - 0 - -4.3872660025954247e-003 - 0.1826038956642151 - -0.0186356808990240 - <_> - - <_> - - - - <_> - 9 7 2 1 -1. - <_> - 9 7 1 1 2. - 1 - -6.7455501994118094e-004 - 0.0804041177034378 - -0.0823323726654053 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 11 2 2 4 2. - <_> - 9 6 2 4 2. - 0 - 6.0816952027380466e-003 - 0.0427697785198689 - -0.1874497979879379 - <_> - - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 9 6 2 2 2. - 0 - 1.6488720430061221e-003 - -0.0427550785243511 - 0.1421277970075607 - <_> - - <_> - - - - <_> - 11 4 3 2 -1. - <_> - 12 5 1 2 3. - 1 - 3.2328169327229261e-003 - 0.0336269401013851 - -0.0783163234591484 - <_> - - <_> - - - - <_> - 9 2 4 6 -1. - <_> - 9 4 4 2 3. - 0 - 0.0472564399242401 - -0.0225910209119320 - 0.3001196980476379 - <_> - - <_> - - - - <_> - 10 5 4 8 -1. - <_> - 10 7 4 4 2. - 0 - -6.2247258611023426e-003 - -0.1014766991138458 - 0.0167884007096291 - <_> - - <_> - - - - <_> - 9 4 4 6 -1. - <_> - 9 4 2 3 2. - <_> - 11 7 2 3 2. - 0 - 1.6149500152096152e-003 - 0.0558336898684502 - -0.1070766001939774 - <_> - - <_> - - - - <_> - 12 6 3 2 -1. - <_> - 13 6 1 2 3. - 0 - 9.1500347480177879e-004 - -0.0693526417016983 - 0.0881612375378609 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 6 3 2 2. - <_> - 11 8 3 2 2. - 0 - -2.2576500196009874e-003 - -0.1270630955696106 - 0.0548807084560394 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - -0.0345388390123844 - 0.2715457975864410 - -0.0243826508522034 - <_> - - <_> - - - - <_> - 8 7 2 4 -1. - <_> - 9 7 1 4 2. - 0 - -1.7117150127887726e-003 - 0.1499692052602768 - -0.0408253185451031 - <_> - - <_> - - - - <_> - 12 6 2 4 -1. - <_> - 11 7 2 2 2. - 1 - -3.2278900034725666e-003 - -0.1276414990425110 - 0.0234314501285553 - <_> - - <_> - - - - <_> - 9 9 2 1 -1. - <_> - 10 9 1 1 2. - 0 - -4.4023559894412756e-005 - 0.0773926600813866 - -0.0741771534085274 - <_> - - <_> - - - - <_> - 16 0 4 2 -1. - <_> - 18 0 2 1 2. - <_> - 16 1 2 1 2. - 0 - 7.5647688936442137e-004 - 0.0339273288846016 - -0.1441735029220581 - <_> - - <_> - - - - <_> - 8 8 2 8 -1. - <_> - 9 8 1 8 2. - 0 - 8.4927473217248917e-003 - -0.0400824993848801 - 0.1281743049621582 - <_> - - <_> - - - - <_> - 11 2 5 9 -1. - <_> - 11 5 5 3 3. - 0 - -7.6771569438278675e-003 - -0.0684606879949570 - 0.0278009399771690 - <_> - - <_> - - - - <_> - 9 3 3 4 -1. - <_> - 9 5 3 2 2. - 0 - -7.1219368837773800e-003 - 0.1710779964923859 - -0.0334374904632568 - <_> - - <_> - - - - <_> - 11 1 1 10 -1. - <_> - 11 1 1 5 2. - 1 - -0.0556285902857780 - 0.2742103040218353 - -5.5358181707561016e-003 - <_> - - <_> - - - - <_> - 11 1 10 1 -1. - <_> - 11 1 5 1 2. - 1 - -8.6285015568137169e-003 - 0.0961542725563049 - -0.0592331588268280 - <_> - - <_> - - - - <_> - 3 7 18 9 -1. - <_> - 9 10 6 3 9. - 0 - -0.0846193134784698 - -0.1036486998200417 - 0.0414444990456104 - <_> - - <_> - - - - <_> - 10 12 1 4 -1. - <_> - 10 14 1 2 2. - 0 - 3.9100160938687623e-004 - -0.0713212490081787 - 0.0897550210356712 - <_> - - <_> - - - - <_> - 13 14 1 2 -1. - <_> - 13 14 1 1 2. - 1 - -1.8672130536288023e-003 - -0.1145986020565033 - 0.0258958991616964 - <_> - - <_> - - - - <_> - 8 15 2 1 -1. - <_> - 9 15 1 1 2. - 0 - -3.3822900149971247e-005 - 0.0799025669693947 - -0.0676629692316055 - <_> - - <_> - - - - <_> - 12 8 2 10 -1. - <_> - 13 8 1 5 2. - <_> - 12 13 1 5 2. - 0 - 8.1294048577547073e-003 - -0.0153079703450203 - 0.1364161074161530 - <_> - - <_> - - - - <_> - 11 5 4 2 -1. - <_> - 12 6 2 2 2. - 1 - -3.7496020086109638e-003 - -0.1991330981254578 - 0.0303196292370558 - <_> - - <_> - - - - <_> - 14 10 2 8 -1. - <_> - 14 14 2 4 2. - 0 - -0.0120668401941657 - 0.0935598462820053 - -0.0259583704173565 - <_> - - <_> - - - - <_> - 6 3 7 9 -1. - <_> - 6 6 7 3 3. - 0 - 0.0755989626049995 - 0.0150411101058126 - -0.3671826124191284 - <_> - - <_> - - - - <_> - 10 3 3 1 -1. - <_> - 11 3 1 1 3. - 0 - -1.6014720313251019e-003 - -0.1582455933094025 - 0.0164955090731382 - <_> - - <_> - - - - <_> - 9 6 4 2 -1. - <_> - 9 7 4 1 2. - 0 - -1.6493949806317687e-003 - 0.1561239957809448 - -0.0332136303186417 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 7.5000891229137778e-004 - -0.0667098164558411 - 0.1122504025697708 - <_> - - <_> - - - - <_> - 1 6 1 2 -1. - <_> - 1 7 1 1 2. - 0 - 4.4484718819148839e-004 - 0.0363352708518505 - -0.1628486961126328 - <_> - - <_> - - - - <_> - 20 6 1 2 -1. - <_> - 20 7 1 1 2. - 0 - 2.5233838823623955e-004 - 0.0339835695922375 - -0.1095184013247490 - <_> - - <_> - - - - <_> - 11 11 6 1 -1. - <_> - 13 13 2 1 3. - 1 - -3.3512299414724112e-003 - 0.0966230630874634 - -0.0554587207734585 - <_> - - <_> - - - - <_> - 20 6 1 2 -1. - <_> - 20 7 1 1 2. - 0 - -9.4628758961334825e-004 - -0.1707631945610046 - 0.0222197007387877 - <_> - - <_> - - - - <_> - 8 8 2 10 -1. - <_> - 8 8 1 5 2. - <_> - 9 13 1 5 2. - 0 - 9.0931905433535576e-003 - -0.0223027803003788 - 0.2324786931276321 - <_> - - <_> - - - - <_> - 20 6 1 2 -1. - <_> - 20 7 1 1 2. - 0 - 1.4432819625653792e-005 - -0.0178190898150206 - 0.0254448708146811 - <_> - - <_> - - - - <_> - 1 6 1 2 -1. - <_> - 1 7 1 1 2. - 0 - -1.2126220099162310e-004 - -0.1007698029279709 - 0.0484617613255978 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - -1.5898300334811211e-003 - 0.0710148066282272 - -0.0429430007934570 - <_> - - <_> - - - - <_> - 4 7 6 3 -1. - <_> - 4 8 6 1 3. - 0 - 6.1745261773467064e-003 - -0.0297293998301029 - 0.1617079973220825 - <_> - - <_> - - - - <_> - 15 17 1 3 -1. - <_> - 15 18 1 1 3. - 0 - -3.0631071422249079e-004 - -0.0870927870273590 - 0.0314426012337208 - <_> - - <_> - - - - <_> - 1 4 2 10 -1. - <_> - 1 9 2 5 2. - 0 - -5.8703188551589847e-004 - 0.0699149817228317 - -0.0680440068244934 - <_> - - <_> - - - - <_> - 14 1 4 8 -1. - <_> - 15 2 2 8 2. - 1 - -6.2474939040839672e-003 - -0.0960133671760559 - 0.0298224296420813 - <_> - - <_> - - - - <_> - 8 7 6 2 -1. - <_> - 8 7 3 1 2. - <_> - 11 8 3 1 2. - 0 - -8.4606884047389030e-003 - -0.4926598072052002 - 9.7682923078536987e-003 - <_> - - <_> - - - - <_> - 2 5 18 9 -1. - <_> - 2 8 18 3 3. - 0 - -0.0820770487189293 - 0.2417106032371521 - -0.0210627801716328 - <_> - - <_> - - - - <_> - 8 9 2 4 -1. - <_> - 8 9 1 4 2. - 1 - 0.0240031406283379 - -0.0114662796258926 - 0.4226445853710175 - <_> - - <_> - - - - <_> - 10 8 12 6 -1. - <_> - 10 10 12 2 3. - 0 - 0.0506431199610233 - 0.0117976497858763 - -0.3037626147270203 - <_> - - <_> - - - - <_> - 0 8 12 6 -1. - <_> - 0 10 12 2 3. - 0 - -0.0758055374026299 - -0.6014410257339478 - 7.6154861599206924e-003 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 8 4 2 2. - 0 - 2.1794199710711837e-004 - -0.0761924833059311 - 0.0603028498589993 - <_> - - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 8 1 1 2. - 0 - -1.1538410035427660e-004 - 0.0972868204116821 - -0.0639967173337936 - <_> - - <_> - - - - <_> - 12 7 1 3 -1. - <_> - 12 8 1 1 3. - 0 - -5.6703570298850536e-003 - 0.4741989970207214 - -8.9765265583992004e-003 - <_> - - <_> - - - - <_> - 9 7 1 3 -1. - <_> - 9 8 1 1 3. - 0 - 9.0920249931514263e-004 - -0.0540961287915707 - 0.0998443290591240 - <_> - - <_> - - - - <_> - 15 17 1 3 -1. - <_> - 15 18 1 1 3. - 0 - 6.6968752071261406e-004 - 0.0290929991751909 - -0.1408957988023758 - <_> - - <_> - - - - <_> - 9 7 2 6 -1. - <_> - 9 9 2 2 3. - 0 - -0.0130452699959278 - -0.3684042096138001 - 0.0135952299460769 - <_> - - <_> - - - - <_> - 17 6 2 4 -1. - <_> - 18 6 1 2 2. - <_> - 17 8 1 2 2. - 0 - 8.1813009455800056e-004 - 0.0209970492869616 - -0.0710032880306244 - <_> - - <_> - - - - <_> - 1 17 3 1 -1. - <_> - 2 17 1 1 3. - 0 - 3.0674310401082039e-003 - -0.0203191991895437 - 0.2180572003126144 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - 2.4622390046715736e-003 - -0.0434030704200268 - 0.0962218418717384 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - 4.0511658880859613e-004 - 0.0388972796499729 - -0.1326813995838165 - <_> - - <_> - - - - <_> - 16 18 6 2 -1. - <_> - 18 18 2 2 3. - 0 - -8.4437627810984850e-004 - 0.0502051189541817 - -0.0372804999351501 - <_> - - <_> - - - - <_> - 0 18 6 2 -1. - <_> - 2 18 2 2 3. - 0 - -1.3546720147132874e-003 - 0.0878797918558121 - -0.0582796297967434 - <_> - - <_> - - - - <_> - 17 6 2 4 -1. - <_> - 18 6 1 2 2. - <_> - 17 8 1 2 2. - 0 - -3.7650408921763301e-004 - -0.0948659181594849 - 0.0420816689729691 - <_> - - <_> - - - - <_> - 3 6 2 4 -1. - <_> - 3 6 1 2 2. - <_> - 4 8 1 2 2. - 0 - 3.3679799525998533e-004 - 0.0473107211291790 - -0.1024342030286789 - <_> - - <_> - - - - <_> - 14 18 5 2 -1. - <_> - 14 19 5 1 2. - 0 - -2.8126540200901218e-005 - 0.0472696386277676 - -0.0557663701474667 - <_> - - <_> - - - - <_> - 8 10 4 2 -1. - <_> - 8 10 2 1 2. - <_> - 10 11 2 1 2. - 0 - 4.1841669008135796e-003 - -0.0197334606200457 - 0.2308433949947357 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -1.1791250435635448e-003 - 0.1776273995637894 - -0.0357045717537403 - <_> - - <_> - - - - <_> - 8 9 5 2 -1. - <_> - 8 10 5 1 2. - 0 - -2.4450810160487890e-003 - -0.1174001023173332 - 0.0444173701107502 - <_> - - <_> - - - - <_> - 6 9 10 2 -1. - <_> - 6 10 10 1 2. - 0 - 2.6766739320009947e-003 - 0.0336448587477207 - -0.1542195975780487 - <_> - - <_> - - - - <_> - 8 10 3 7 -1. - <_> - 9 11 1 7 3. - 1 - 9.7273271530866623e-003 - -0.0360129810869694 - 0.1424019038677216 - <_> - - <_> - - - - <_> - 16 15 1 2 -1. - <_> - 16 16 1 1 2. - 0 - -4.9499998567625880e-004 - -0.0816047489643097 - 0.0205727107822895 - <_> - - <_> - - - - <_> - 9 1 2 12 -1. - <_> - 9 1 1 6 2. - <_> - 10 7 1 6 2. - 0 - -0.0148892300203443 - -0.4609675109386444 - 9.8663335666060448e-003 - <_> - - <_> - - - - <_> - 14 7 1 3 -1. - <_> - 14 8 1 1 3. - 0 - -3.0629769898951054e-003 - 0.2692955136299133 - -0.0196348596364260 - <_> - - <_> - - - - <_> - 10 1 1 2 -1. - <_> - 10 1 1 1 2. - 1 - -2.3329691030085087e-003 - -0.1805693060159683 - 0.0261950306594372 - <_> - - <_> - - - - <_> - 13 3 3 2 -1. - <_> - 14 3 1 2 3. - 0 - 1.4440430095419288e-003 - -0.0367369391024113 - 0.0956652685999870 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 1 6 2 2. - 0 - -2.4700779467821121e-003 - 0.0713559910655022 - -0.0698264166712761 - <_> - - <_> - - - - <_> - 8 0 6 4 -1. - <_> - 8 1 6 2 2. - 0 - 2.5538569316267967e-003 - -0.0524303801357746 - 0.1446232944726944 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - 1.2297700159251690e-003 - 0.0532233007252216 - -0.1088751032948494 - <_> - - <_> - - - - <_> - 6 0 16 2 -1. - <_> - 6 1 16 1 2. - 0 - -0.0112727703526616 - 0.1231755018234253 - -0.0238907299935818 - <_> - - <_> - - - - <_> - 4 5 6 6 -1. - <_> - 4 5 3 3 2. - <_> - 7 8 3 3 2. - 0 - 8.5928626358509064e-003 - 0.0421214215457439 - -0.1186340004205704 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 2 2. - <_> - 13 10 1 2 2. - 0 - 3.3916949760168791e-003 - -0.0280214399099350 - 0.2157142013311386 - <_> - - <_> - - - - <_> - 8 4 1 3 -1. - <_> - 8 5 1 1 3. - 0 - 3.9071948267519474e-003 - 0.0125985601916909 - -0.3970834016799927 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 2 2. - <_> - 13 10 1 2 2. - 0 - -1.7956830561161041e-003 - 0.1264771074056625 - -0.0572371482849121 - <_> - - <_> - - - - <_> - 5 15 1 2 -1. - <_> - 5 16 1 1 2. - 0 - -7.7512441202998161e-004 - -0.1687643975019455 - 0.0289733298122883 - <_> - - <_> - - - - <_> - 7 7 8 8 -1. - <_> - 7 7 4 8 2. - 0 - 0.1027168035507202 - -0.0120806600898504 - 0.3971601128578186 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 7 2 3 2. - 0 - -4.0367760811932385e-004 - 0.0675996020436287 - -0.0673884823918343 - <_> - - <_> - - - - <_> - 7 5 8 6 -1. - <_> - 7 8 8 3 2. - 0 - -2.2988640703260899e-003 - -0.0967521071434021 - 0.0560148805379868 - <_> - - <_> - - - - <_> - 7 7 1 3 -1. - <_> - 7 8 1 1 3. - 0 - -7.7720789704471827e-004 - 0.1228042989969254 - -0.0383510701358318 - <_> - - <_> - - - - <_> - 11 7 2 1 -1. - <_> - 11 7 1 1 2. - 1 - 4.3838539568241686e-005 - -0.0294461902230978 - 0.0250655207782984 - <_> - - <_> - - - - <_> - 7 13 4 3 -1. - <_> - 8 14 2 3 2. - 1 - -4.3220039515290409e-005 - 0.0608766190707684 - -0.0743607208132744 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 1.8013520457316190e-004 - 0.0440032109618187 - -0.1216726973652840 - <_> - - <_> - - - - <_> - 6 9 3 3 -1. - <_> - 5 10 3 1 3. - 1 - -0.0159889906644821 - -0.3642522096633911 - 0.0116110900416970 - <_> - - <_> - - - - <_> - 14 5 3 1 -1. - <_> - 15 5 1 1 3. - 0 - 3.0585259664803743e-003 - -0.0176746305078268 - 0.1448695063591003 - <_> - - <_> - - - - <_> - 4 0 18 1 -1. - <_> - 10 6 6 1 3. - 1 - -0.0796877369284630 - -0.5168790817260742 - 9.3473158776760101e-003 - <_> - - <_> - - - - <_> - 7 5 10 12 -1. - <_> - 7 9 10 4 3. - 0 - -0.0190539695322514 - 0.0665424615144730 - -0.0390889011323452 - <_> - - <_> - - - - <_> - 6 8 3 1 -1. - <_> - 7 8 1 1 3. - 0 - 6.2866392545402050e-004 - -0.0429917797446251 - 0.1002883985638619 - <_> - - <_> - - - - <_> - 13 1 3 9 -1. - <_> - 14 1 1 9 3. - 0 - -4.6688509173691273e-003 - 0.0555517598986626 - -0.0427531488239765 - <_> - - <_> - - - - <_> - 6 7 2 1 -1. - <_> - 7 7 1 1 2. - 0 - -1.4348989680001978e-005 - 0.0733639225363731 - -0.0753516331315041 - <_> - - <_> - - - - <_> - 14 7 1 3 -1. - <_> - 13 8 1 1 3. - 1 - 2.9872718732804060e-004 - -0.0777614116668701 - 0.0541079789400101 - <_> - - <_> - - - - <_> - 9 14 2 1 -1. - <_> - 9 14 1 1 2. - 1 - -1.4901659451425076e-003 - -0.1237241029739380 - 0.0369120612740517 - <_> - - <_> - - - - <_> - 11 14 2 2 -1. - <_> - 12 14 1 1 2. - <_> - 11 15 1 1 2. - 0 - 3.0812988989055157e-003 - -8.6249075829982758e-003 - 0.1933659017086029 - <_> - - <_> - - - - <_> - 9 14 2 2 -1. - <_> - 9 14 1 1 2. - <_> - 10 15 1 1 2. - 0 - -2.1335019264370203e-003 - 0.2385984957218170 - -0.0181268490850925 - <_> - - <_> - - - - <_> - 14 7 1 3 -1. - <_> - 13 8 1 1 3. - 1 - 9.9391005933284760e-003 - 0.0114310598000884 - -0.2213822007179260 - <_> - - <_> - - - - <_> - 7 13 1 2 -1. - <_> - 7 13 1 1 2. - 1 - 8.2578818546608090e-004 - 0.0396701991558075 - -0.1073718965053558 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 2 2. - <_> - 13 10 1 2 2. - 0 - 1.8395700026303530e-003 - -0.0271361693739891 - 0.1113077029585838 - <_> - - <_> - - - - <_> - 1 9 7 8 -1. - <_> - 1 11 7 4 2. - 0 - 3.8778909947723150e-003 - -0.0544715411961079 - 0.0847037807106972 - <_> - - <_> - - - - <_> - 20 15 1 4 -1. - <_> - 20 16 1 2 2. - 0 - 1.1750679695978761e-003 - 0.0216968003660440 - -0.1357146948575974 - <_> - - <_> - - - - <_> - 3 7 3 12 -1. - <_> - 3 11 3 4 3. - 0 - -1.5827510505914688e-003 - 0.0779939591884613 - -0.0625939071178436 - <_> - - <_> - - - - <_> - 20 15 1 4 -1. - <_> - 20 16 1 2 2. - 0 - -8.1443432718515396e-003 - -0.8941742181777954 - 2.4376239161938429e-003 - <_> - - <_> - - - - <_> - 1 15 1 4 -1. - <_> - 1 16 1 2 2. - 0 - -3.5362979397177696e-003 - -0.3373984098434448 - 0.0130516001954675 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 2 2. - <_> - 13 10 1 2 2. - 0 - -7.5185662135481834e-003 - 0.1790322959423065 - -9.4940410926938057e-003 - <_> - - <_> - - - - <_> - 8 7 3 1 -1. - <_> - 9 8 1 1 3. - 1 - -0.0136781800538301 - -0.7125880718231201 - 6.1758197844028473e-003 - <_> - - <_> - - - - <_> - 16 7 5 12 -1. - <_> - 16 10 5 6 2. - 0 - 2.9812520369887352e-003 - -0.0626313835382462 - 0.0801123082637787 - <_> - - <_> - - - - <_> - 5 12 3 2 -1. - <_> - 6 13 1 2 3. - 1 - -3.6354900803416967e-003 - 0.1105177998542786 - -0.0369505286216736 - <_> - - <_> - - - - <_> - 15 6 4 2 -1. - <_> - 15 6 4 1 2. - 1 - 4.4591492041945457e-003 - 0.0258968304842710 - -0.1062071993947029 - <_> - - <_> - - - - <_> - 9 5 3 2 -1. - <_> - 10 6 1 2 3. - 1 - 0.0161044001579285 - 0.0103944800794125 - -0.4147635102272034 - <_> - - <_> - - - - <_> - 13 8 2 4 -1. - <_> - 14 8 1 2 2. - <_> - 13 10 1 2 2. - 0 - 0.0141123495995998 - 6.1774178175255656e-004 - -0.6869323253631592 - <_> - - <_> - - - - <_> - 7 8 2 4 -1. - <_> - 7 8 1 2 2. - <_> - 8 10 1 2 2. - 0 - -3.7388880737125874e-003 - 0.1531803011894226 - -0.0296745300292969 - <_> - - <_> - - - - <_> - 12 2 3 6 -1. - <_> - 13 3 1 6 3. - 1 - -0.0386055707931519 - -0.7035688757896423 - 2.6169209741055965e-003 - <_> - - <_> - - - - <_> - 10 2 6 3 -1. - <_> - 9 3 6 1 3. - 1 - 1.8483239691704512e-003 - 0.0755724832415581 - -0.0615672804415226 - <_> - - <_> - - - - <_> - 13 11 3 1 -1. - <_> - 14 11 1 1 3. - 0 - -3.7039730232208967e-003 - 0.1679506003856659 - -0.0201404001563787 - <_> - - <_> - - - - <_> - 6 17 1 3 -1. - <_> - 6 18 1 1 3. - 0 - -6.7307491553947330e-004 - -0.1537275016307831 - 0.0298865605145693 - <_> - - <_> - - - - <_> - 12 1 1 3 -1. - <_> - 12 2 1 1 3. - 0 - 1.9836979918181896e-003 - -0.0183472894132137 - 0.1355724036693573 - <_> - - <_> - - - - <_> - 9 1 1 3 -1. - <_> - 9 2 1 1 3. - 0 - -1.9738670380320400e-004 - 0.0666147172451019 - -0.0809208974242210 - <_> - - <_> - - - - <_> - 15 6 4 2 -1. - <_> - 15 6 4 1 2. - 1 - -0.0142395803704858 - -0.1332059949636459 - 0.0128757804632187 - <_> - - <_> - - - - <_> - 7 6 2 4 -1. - <_> - 7 6 1 4 2. - 1 - 4.0507009252905846e-003 - 0.0404932089149952 - -0.1137031018733978 - <_> - - <_> - - - - <_> - 9 2 4 4 -1. - <_> - 9 3 4 2 2. - 0 - -1.0803360491991043e-003 - 0.0825518518686295 - -0.0546687506139278 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 3 2 1 2. - 0 - -1.4226039638742805e-003 - -0.1200990006327629 - 0.0372436493635178 - <_> - - <_> - - - - <_> - 13 4 3 3 -1. - <_> - 14 5 1 1 9. - 0 - -0.0215261392295361 - 0.1959894001483917 - -0.0110420398414135 - <_> - - <_> - - - - <_> - 6 4 3 3 -1. - <_> - 7 5 1 1 9. - 0 - -0.0207124408334494 - 0.2912296950817108 - -0.0159124508500099 - <_> - - <_> - - - - <_> - 16 10 2 1 -1. - <_> - 16 10 1 1 2. - 0 - -1.4033130137249827e-003 - -0.1235907971858978 - 0.0164182595908642 - <_> - - <_> - - - - <_> - 4 10 2 1 -1. - <_> - 5 10 1 1 2. - 0 - 5.8878812706097960e-004 - 0.0344287306070328 - -0.1327963024377823 - <_> - - <_> - - - - <_> - 17 13 1 3 -1. - <_> - 17 14 1 1 3. - 0 - -4.0147930121747777e-005 - 0.0527956411242485 - -0.0469906590878963 - <_> - - <_> - - - - <_> - 4 13 1 3 -1. - <_> - 4 14 1 1 3. - 0 - 2.2268320899456739e-003 - -0.0212388299405575 - 0.2140408009290695 - <_> - - <_> - - - - <_> - 12 12 10 3 -1. - <_> - 12 13 10 1 3. - 0 - 0.0133187295868993 - 0.0144803803414106 - -0.2312303036451340 - <_> - - <_> - - - - <_> - 0 12 10 3 -1. - <_> - 0 13 10 1 3. - 0 - -0.0171607602387667 - -0.3946898877620697 - 0.0109439296647906 - <_> - - <_> - - - - <_> - 12 4 3 5 -1. - <_> - 13 4 1 5 3. - 0 - 0.0307743698358536 - 2.1721019875258207e-003 - -0.3150196969509125 - <_> - - <_> - - - - <_> - 7 4 3 5 -1. - <_> - 8 4 1 5 3. - 0 - -0.0166799891740084 - 0.2576119899749756 - -0.0176673699170351 - <_> - - <_> - - - - <_> - 12 2 3 1 -1. - <_> - 13 3 1 1 3. - 1 - -9.7562937298789620e-004 - -0.0768572166562080 - 0.0277077890932560 - <_> - - <_> - - - - <_> - 8 4 6 2 -1. - <_> - 10 4 2 2 3. - 0 - -6.4838528633117676e-003 - 0.2052160948514938 - -0.0211780592799187 - <_> - - <_> - - - - <_> - 9 1 4 8 -1. - <_> - 10 1 2 8 2. - 0 - -2.4545229971408844e-003 - -0.1558642983436585 - 0.0324817411601543 - <_> - - <_> - - - - <_> - 8 0 6 5 -1. - <_> - 10 0 2 5 3. - 0 - -2.4111429229378700e-003 - 0.0912789329886436 - -0.0485870689153671 - <_> - - <_> - - - - <_> - 12 4 2 1 -1. - <_> - 12 4 1 1 2. - 0 - 1.5041510050650686e-004 - -0.0955092236399651 - 0.0542792901396751 - <_> - - <_> - - - - <_> - 7 0 3 11 -1. - <_> - 8 0 1 11 3. - 0 - 0.0419289395213127 - 5.5031818337738514e-003 - -0.7747929096221924 - <_> - - <_> - - - - <_> - 13 11 3 1 -1. - <_> - 14 11 1 1 3. - 0 - 2.0099419634789228e-003 - -0.0286403708159924 - 0.1418222934007645 - <_> - - <_> - - - - <_> - 10 3 2 2 -1. - <_> - 10 3 1 1 2. - <_> - 11 4 1 1 2. - 0 - 1.9516570027917624e-003 - 0.0148935802280903 - -0.3189088106155396 - <_> - - <_> - - - - <_> - 13 11 3 1 -1. - <_> - 14 11 1 1 3. - 0 - -1.2247270205989480e-003 - 0.0728246569633484 - -0.0316674411296844 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 8 8 1 2 9. - 0 - -0.0104129100218415 - -0.1413532942533493 - 0.0327255204319954 - <_> - - <_> - - - - <_> - 12 8 2 2 -1. - <_> - 12 8 2 1 2. - 1 - -8.6048692464828491e-003 - -0.1725414991378784 - 3.4668690059334040e-003 - <_> - - <_> - - - - <_> - 10 8 2 2 -1. - <_> - 10 8 1 2 2. - 1 - 3.4611239098012447e-003 - 0.0315949581563473 - -0.1540535986423492 - <_> - - <_> - - - - <_> - 10 4 4 12 -1. - <_> - 10 4 2 12 2. - 0 - 0.0443332307040691 - -0.0209141392260790 - 0.1613682955503464 - <_> - - <_> - - - - <_> - 8 2 6 12 -1. - <_> - 10 6 2 4 9. - 0 - -0.0326356105506420 - 0.2100338935852051 - -0.0297804903239012 - <_> - - <_> - - - - <_> - 8 7 8 12 -1. - <_> - 8 10 8 6 2. - 0 - -0.0790525078773499 - 0.1849261969327927 - -0.0119767300784588 - <_> - - <_> - - - - <_> - 0 10 14 2 -1. - <_> - 7 10 7 2 2. - 0 - 0.0731152072548866 - 8.8554704561829567e-003 - -0.5134624242782593 - <_> - - <_> - - - - <_> - 10 1 3 3 -1. - <_> - 11 1 1 3 3. - 0 - 6.3138650730252266e-003 - 0.0129378596320748 - -0.2146552950143814 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 1 - -1.0274830274283886e-003 - 0.1124119982123375 - -0.0421391800045967 - <_> - - <_> - - - - <_> - 17 0 2 2 -1. - <_> - 18 0 1 1 2. - <_> - 17 1 1 1 2. - 0 - -1.6066900570876896e-004 - -0.0925965979695320 - 0.0334039889276028 - <_> - - <_> - - - - <_> - 8 7 3 3 -1. - <_> - 9 8 1 1 9. - 0 - 0.0145754301920533 - -0.0235004108399153 - 0.1877277046442032 - <_> - - <_> - - - - <_> - 10 4 2 6 -1. - <_> - 10 6 2 2 3. - 0 - -5.7197501882910728e-003 - -0.1418451964855194 - 0.0338932909071445 - <_> - - <_> - - - - <_> - 7 12 8 2 -1. - <_> - 7 12 4 1 2. - <_> - 11 13 4 1 2. - 0 - -0.0100956801325083 - -0.3697681128978729 - 0.0111134499311447 - <_> - - <_> - - - - <_> - 8 0 9 2 -1. - <_> - 8 1 9 1 2. - 0 - -1.2176940217614174e-003 - 0.0518184490501881 - -0.0474578514695168 - <_> - - <_> - - - - <_> - 6 2 16 1 -1. - <_> - 6 2 8 1 2. - 1 - 0.0789807364344597 - 9.7751449793577194e-003 - -0.4359354972839356 - <_> - - <_> - - - - <_> - 12 10 3 2 -1. - <_> - 13 11 1 2 3. - 1 - -9.6514541655778885e-004 - 0.0482711382210255 - -0.0464835092425346 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 9 11 2 1 3. - 1 - 9.1809416189789772e-003 - -0.0215797703713179 - 0.1992489993572235 - <_> - - <_> - - - - <_> - 11 11 3 2 -1. - <_> - 12 12 1 2 3. - 1 - -0.0184952300041914 - -0.3422820866107941 - 6.5597319044172764e-003 - <_> - - <_> - - - - <_> - 11 11 2 3 -1. - <_> - 10 12 2 1 3. - 1 - -2.2168110590428114e-003 - 0.0908674895763397 - -0.0550275407731533 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - -1.5820340195205063e-004 - -0.0908936709165573 - 0.0401111505925655 - <_> - - <_> - - - - <_> - 7 13 4 2 -1. - <_> - 9 13 2 2 2. - 0 - 1.5867890324443579e-003 - -0.0514453388750553 - 0.0823112130165100 - <_> - - <_> - - - - <_> - 8 0 12 3 -1. - <_> - 12 1 4 1 9. - 0 - 0.1458207964897156 - 1.1615890543907881e-003 - -0.8753253221511841 - <_> - - <_> - - - - <_> - 8 13 2 1 -1. - <_> - 8 13 1 1 2. - 1 - -6.6445011179894209e-004 - -0.0980490893125534 - 0.0443433113396168 - <_> - - <_> - - - - <_> - 17 0 2 2 -1. - <_> - 18 0 1 1 2. - <_> - 17 1 1 1 2. - 0 - 5.8919959701597691e-003 - 1.5775660285726190e-003 - -1.0001260042190552 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 1 2. - <_> - 4 1 1 1 2. - 0 - -1.3995329936733469e-005 - 0.0730667784810066 - -0.0576915815472603 - <_> - - <_> - - - - <_> - 8 8 6 2 -1. - <_> - 11 8 3 1 2. - <_> - 8 9 3 1 2. - 0 - -9.9132228642702103e-003 - -0.7552946209907532 - 5.2168890833854675e-003 - <_> - - <_> - - - - <_> - 9 5 4 4 -1. - <_> - 9 6 4 2 2. - 0 - -0.0157924294471741 - 0.2822212874889374 - -0.0170606300234795 - <_> - - <_> - - - - <_> - 17 0 4 4 -1. - <_> - 19 0 2 2 2. - <_> - 17 2 2 2 2. - 0 - -2.6797680184245110e-003 - -0.0792629271745682 - 0.0152305699884892 - <_> - - <_> - - - - <_> - 10 2 1 3 -1. - <_> - 9 3 1 1 3. - 1 - -0.0141441700980067 - -0.7679110169410706 - 5.3670979104936123e-003 - <_> - - <_> - - - - <_> - 12 0 9 15 -1. - <_> - 15 0 3 15 3. - 0 - 0.1681811958551407 - 9.6734073013067245e-003 - -0.3358711898326874 - <_> - - <_> - - - - <_> - 1 0 9 15 -1. - <_> - 4 0 3 15 3. - 0 - -0.2067981958389282 - -0.4464499950408936 - 8.5481600835919380e-003 - <_> - - <_> - - - - <_> - 16 2 3 10 -1. - <_> - 17 2 1 10 3. - 0 - 1.4232929970603436e-005 - -0.0488443486392498 - 0.0451794601976871 - <_> - - <_> - - - - <_> - 3 2 3 10 -1. - <_> - 4 2 1 10 3. - 0 - -0.0203783791512251 - 0.3288941979408264 - -0.0138009199872613 - <_> - - <_> - - - - <_> - 18 1 1 4 -1. - <_> - 18 1 1 2 2. - 1 - 0.0142150297760963 - -0.0104705402627587 - 0.1133866980671883 - <_> - - <_> - - - - <_> - 2 8 3 2 -1. - <_> - 3 8 1 2 3. - 0 - 4.8233679262921214e-004 - 0.0442165806889534 - -0.1009349972009659 - <_> - - <_> - - - - <_> - 14 18 4 1 -1. - <_> - 14 18 2 1 2. - 0 - 4.3106778321089223e-005 - -0.0380597412586212 - 0.0379955098032951 - <_> - - <_> - - - - <_> - 5 10 12 8 -1. - <_> - 5 10 6 4 2. - <_> - 11 14 6 4 2. - 0 - 0.0903883576393127 - 8.3996197208762169e-003 - -0.4961088895797730 - <_> - - <_> - - - - <_> - 13 6 1 6 -1. - <_> - 13 6 1 3 2. - 1 - 0.0374586507678032 - 2.8608210850507021e-003 - -0.3529886007308960 - <_> - - <_> - - - - <_> - 9 6 6 1 -1. - <_> - 9 6 3 1 2. - 1 - 0.0312193706631660 - -8.9630456641316414e-003 - 0.5293065905570984 - <_> - - <_> - - - - <_> - 15 3 1 6 -1. - <_> - 15 6 1 3 2. - 0 - 0.0147175798192620 - -3.5097280051559210e-003 - 0.2686617970466614 - <_> - - <_> - - - - <_> - 6 3 1 6 -1. - <_> - 6 6 1 3 2. - 0 - 0.0145051004365087 - 6.5859002061188221e-003 - -0.6708629131317139 - <_> - - <_> - - - - <_> - 17 0 4 4 -1. - <_> - 19 0 2 2 2. - <_> - 17 2 2 2 2. - 0 - 2.6275549316778779e-004 - 0.0320626497268677 - -0.0537641681730747 - <_> - - <_> - - - - <_> - 7 7 2 2 -1. - <_> - 7 7 1 1 2. - <_> - 8 8 1 1 2. - 0 - -1.5802070265635848e-003 - 0.1792829036712647 - -0.0229880791157484 - <_> - - <_> - - - - <_> - 17 0 4 4 -1. - <_> - 19 0 2 2 2. - <_> - 17 2 2 2 2. - 0 - -0.0249616801738739 - -0.7622991800308228 - 1.3633499620482326e-003 - <_> - - <_> - - - - <_> - 1 0 4 4 -1. - <_> - 1 0 2 2 2. - <_> - 3 2 2 2 2. - 0 - -0.0108273001387715 - -0.4135999977588654 - 0.0101237902417779 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - 3.1056890729814768e-003 - -0.0149688702076674 - 0.1461230963468552 - <_> - - <_> - - - - <_> - 2 13 15 2 -1. - <_> - 2 14 15 1 2. - 0 - -0.0328393206000328 - -0.8361241221427918 - 5.1855011843144894e-003 - <_> - - <_> - - - - <_> - 14 8 1 4 -1. - <_> - 14 10 1 2 2. - 0 - -8.2352161407470703e-003 - 0.2232607007026672 - -9.2590171843767166e-003 - <_> - - <_> - - - - <_> - 7 8 1 4 -1. - <_> - 7 10 1 2 2. - 0 - 9.3107353895902634e-003 - -9.7794700413942337e-003 - 0.4223946034908295 - <_> - - <_> - - - - <_> - 15 6 2 3 -1. - <_> - 14 7 2 1 3. - 1 - -0.0145917702466249 - -0.2420409023761749 - 8.5437763482332230e-003 - <_> - - <_> - - - - <_> - 7 6 3 2 -1. - <_> - 8 7 1 2 3. - 1 - -0.0217647198587656 - -0.6060310006141663 - 7.0369099266827106e-003 - <_> - - <_> - - - - <_> - 20 0 1 2 -1. - <_> - 20 1 1 1 2. - 0 - 1.3476300409820396e-005 - -0.0522699393332005 - 0.0655876025557518 - <_> - - <_> - - - - <_> - 9 4 12 4 -1. - <_> - 8 5 12 2 2. - 1 - 0.0133512597531080 - -0.0404189899563789 - 0.1095172986388207 - <_> - - <_> - - - - <_> - 9 7 4 8 -1. - <_> - 11 7 2 4 2. - <_> - 9 11 2 4 2. - 0 - -6.3701579347252846e-003 - -0.1311102062463760 - 0.0384814292192459 - <_> - - <_> - - - - <_> - 8 6 3 3 -1. - <_> - 9 7 1 1 9. - 0 - 0.0151436300948262 - -0.0202496591955423 - 0.2171640992164612 - <_> - - <_> - - - - <_> - 13 6 1 3 -1. - <_> - 13 7 1 1 3. - 0 - 4.5786341652274132e-003 - 0.0143220797181129 - -0.5722224116325378 - <_> - - <_> - - - - <_> - 7 8 3 12 -1. - <_> - 8 8 1 12 3. - 0 - -0.0467410311102867 - -0.7226592898368835 - 4.1450331918895245e-003 - <_> - - <_> - - - - <_> - 16 16 3 3 -1. - <_> - 17 16 1 3 3. - 0 - 9.5456670969724655e-003 - -0.0103923603892326 - 0.1831796020269394 - <_> - - <_> - - - - <_> - 3 0 16 18 -1. - <_> - 3 0 8 9 2. - <_> - 11 9 8 9 2. - 0 - -0.1709713935852051 - -0.2662901878356934 - 0.0157145708799362 - <_> - - <_> - - - - <_> - 19 7 1 3 -1. - <_> - 19 8 1 1 3. - 0 - -7.1421632310375571e-004 - 0.0688211172819138 - -0.0185359399765730 - <_> - - <_> - - - - <_> - 8 6 1 3 -1. - <_> - 8 7 1 1 3. - 0 - 4.7080889344215393e-003 - 8.7029086425900459e-003 - -0.4738290011882782 - <_> - - <_> - - - - <_> - 19 7 1 3 -1. - <_> - 19 8 1 1 3. - 0 - 2.8823789762100205e-005 - -0.0350331701338291 - 0.0410102605819702 - <_> - - <_> - - - - <_> - 2 7 1 3 -1. - <_> - 2 8 1 1 3. - 0 - -2.3279939778149128e-003 - 0.2326104938983917 - -0.0178356692194939 - <_> - - <_> - - - - <_> - 10 1 2 1 -1. - <_> - 10 1 1 1 2. - 0 - 8.4805669030174613e-004 - 0.0252829696983099 - -0.1715715974569321 - <_> - - <_> - - - - <_> - 7 1 2 4 -1. - <_> - 7 1 1 2 2. - <_> - 8 3 1 2 2. - 0 - -6.5123359672725201e-004 - 0.0868118479847908 - -0.0470687299966812 - <_> - - <_> - - - - <_> - 13 2 2 2 -1. - <_> - 14 2 1 1 2. - <_> - 13 3 1 1 2. - 0 - -1.1371539440006018e-003 - 0.0802426710724831 - -0.0165205206722021 - <_> - - <_> - - - - <_> - 6 5 1 2 -1. - <_> - 6 6 1 1 2. - 0 - -5.6554668117314577e-004 - -0.1470963060855866 - 0.0324207283556461 - <_> - - <_> - - - - <_> - 13 2 2 2 -1. - <_> - 14 2 1 1 2. - <_> - 13 3 1 1 2. - 0 - 2.4779029190540314e-003 - -9.6723642200231552e-003 - 0.1350625008344650 - <_> - - <_> - - - - <_> - 7 2 2 2 -1. - <_> - 7 2 1 1 2. - <_> - 8 3 1 1 2. - 0 - 1.7332839779555798e-003 - -0.0245615299791098 - 0.1761213988065720 - <_> - - <_> - - - - <_> - 6 14 16 4 -1. - <_> - 6 15 16 2 2. - 0 - -0.0448064915835857 - -0.6094818115234375 - 3.4338440746068954e-003 - <_> - - <_> - - - - <_> - 0 11 3 3 -1. - <_> - 1 12 1 1 9. - 0 - -0.0205011405050755 - -0.5464386940002441 - 7.2927437722682953e-003 - <_> - - <_> - - - - <_> - 11 4 1 9 -1. - <_> - 11 7 1 3 3. - 0 - -0.0161981396377087 - -0.6613004803657532 - 2.1677929908037186e-003 - <_> - - <_> - - - - <_> - 1 0 1 2 -1. - <_> - 1 1 1 1 2. - 0 - 1.4479210221907124e-005 - -0.0551896803081036 - 0.0725234970450401 - <_> - - <_> - - - - <_> - 16 0 1 2 -1. - <_> - 16 1 1 1 2. - 0 - -1.7286660149693489e-003 - -0.1738739013671875 - 8.9998291805386543e-003 - <_> - - <_> - - - - <_> - 6 5 1 2 -1. - <_> - 6 6 1 1 2. - 0 - -1.3669549844053108e-005 - 0.0662043467164040 - -0.0610105209052563 - <_> - - <_> - - - - <_> - 13 0 8 12 -1. - <_> - 13 0 4 12 2. - 1 - 0.3513059020042419 - 1.3569389702752233e-003 - -0.8120009899139404 - <_> - - <_> - - - - <_> - 9 0 12 8 -1. - <_> - 9 0 12 4 2. - 1 - 0.2445469945669174 - 9.9658807739615440e-003 - -0.4124791026115418 - <_> - - <_> - - - - <_> - 14 1 4 4 -1. - <_> - 14 1 4 2 2. - 1 - -0.0326145812869072 - 0.0706263110041618 - -0.0266394205391407 - <_> - - <_> - - - - <_> - 5 0 1 2 -1. - <_> - 5 1 1 1 2. - 0 - 2.4752068566158414e-004 - 0.0332267582416534 - -0.1320351958274841 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - -1.3165399432182312e-003 - 0.0785178467631340 - -0.0195807497948408 - <_> - - <_> - - - - <_> - 5 0 1 3 -1. - <_> - 5 1 1 1 3. - 0 - -1.6912100545596331e-004 - -0.0976355224847794 - 0.0435252487659454 - <_> - - <_> - - - - <_> - 13 2 3 1 -1. - <_> - 14 2 1 1 3. - 0 - 9.2338479589670897e-004 - -0.0294018499553204 - 0.0808561593294144 - <_> - - <_> - - - - <_> - 6 2 3 1 -1. - <_> - 7 2 1 1 3. - 0 - -1.0980790248140693e-003 - 0.1256226003170013 - -0.0353786014020443 - <_> - - <_> - - - - <_> - 14 0 3 1 -1. - <_> - 15 1 1 1 3. - 1 - 7.5967791490256786e-003 - 0.0129363099113107 - -0.2960098981857300 - <_> - - <_> - - - - <_> - 8 0 1 3 -1. - <_> - 7 1 1 1 3. - 1 - 3.6338350037112832e-004 - 0.0471692904829979 - -0.0952284932136536 - <_> - - <_> - - - - <_> - 14 11 8 6 -1. - <_> - 18 11 4 3 2. - <_> - 14 14 4 3 2. - 0 - -6.4660399220883846e-003 - 0.0983742699027061 - -0.0416563488543034 - <_> - - <_> - - - - <_> - 7 0 3 2 -1. - <_> - 8 1 1 2 3. - 1 - 5.0431757699698210e-004 - -0.0675730407238007 - 0.0657468810677528 - <_> - - <_> - - - - <_> - 8 7 6 5 -1. - <_> - 8 7 3 5 2. - 0 - 0.0201810002326965 - -0.0269140899181366 - 0.1678425073623657 - <_> - - <_> - - - - <_> - 9 9 3 6 -1. - <_> - 10 11 1 2 9. - 0 - 8.3369575440883636e-003 - 0.0403642393648624 - -0.1343698948621750 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 10 11 2 1 2. - 0 - 6.0851150192320347e-004 - -0.0424444414675236 - 0.1286035031080246 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 8 11 6 1 2. - 0 - 2.4325479753315449e-003 - 0.0319407396018505 - -0.1847638934850693 - <_> - - <_> - - - - <_> - 9 8 4 8 -1. - <_> - 9 8 2 8 2. - 0 - -9.9839484319090843e-003 - 0.1194287985563278 - -0.0421620607376099 - <_> - - <_> - - - - <_> - 2 9 15 6 -1. - <_> - 7 11 5 2 9. - 0 - -0.0550006292760372 - -0.1192566007375717 - 0.0463245585560799 - <_> - - <_> - - - - <_> - 1 7 21 3 -1. - <_> - 8 8 7 1 9. - 0 - 0.0194331202656031 - 0.0510370098054409 - -0.0555111914873123 - <_> - - <_> - - - - <_> - 8 1 4 4 -1. - <_> - 8 1 2 4 2. - 1 - -5.4839542135596275e-003 - 0.0814060866832733 - -0.0601227208971977 - <_> - - <_> - - - - <_> - 17 0 1 8 -1. - <_> - 17 0 1 4 2. - 1 - -0.0302434395998716 - -0.0977850705385208 - 0.0219156593084335 - <_> - - <_> - - - - <_> - 2 4 1 3 -1. - <_> - 2 5 1 1 3. - 0 - 2.0199140999466181e-003 - -0.0187898799777031 - 0.2405363023281097 - <_> - - <_> - - - - <_> - 13 7 1 4 -1. - <_> - 12 8 1 2 2. - 1 - 0.0127148600295186 - 3.9840238168835640e-003 - -0.3106569945812225 - <_> - - <_> - - - - <_> - 9 7 4 1 -1. - <_> - 10 8 2 1 2. - 1 - -1.6343439929187298e-003 - -0.1442185044288635 - 0.0344646386802197 - <_> - - <_> - - - - <_> - 11 7 3 3 -1. - <_> - 12 7 1 3 3. - 0 - -7.7880651224404573e-004 - 0.0644840523600578 - -0.0321304202079773 - <_> - - <_> - - - - <_> - 8 7 3 3 -1. - <_> - 9 7 1 3 3. - 0 - -5.3918338380753994e-003 - 0.2077516019344330 - -0.0223830100148916 - <_> - - <_> - - - - <_> - 13 6 2 6 -1. - <_> - 13 6 1 6 2. - 1 - 5.8038760907948017e-003 - 0.0252641309052706 - -0.0870341137051582 - <_> - - <_> - - - - <_> - 10 7 2 1 -1. - <_> - 10 7 1 1 2. - 1 - -1.5872420044615865e-003 - -0.1328077018260956 - 0.0328645892441273 - <_> - - <_> - - - - <_> - 9 10 5 6 -1. - <_> - 9 12 5 2 3. - 0 - -2.0254219416528940e-003 - 0.0545970685780048 - -0.0619214512407780 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -1.0030369739979506e-003 - 0.0922593027353287 - -0.0512121208012104 - <_> - - <_> - - - - <_> - 10 13 3 3 -1. - <_> - 11 14 1 1 9. - 0 - 0.0215105302631855 - -8.8652186095714569e-003 - 0.2467681020498276 - <_> - - <_> - - - - <_> - 9 13 3 3 -1. - <_> - 10 14 1 1 9. - 0 - -3.9943971205502748e-004 - 0.0753221064805985 - -0.0651679784059525 - <_> - - <_> - - - - <_> - 11 5 2 5 -1. - <_> - 11 5 1 5 2. - 0 - 9.4137862324714661e-003 - 0.0107083898037672 - -0.2173873037099838 - <_> - - <_> - - - - <_> - 8 3 6 10 -1. - <_> - 10 3 2 10 3. - 0 - 0.0559008494019508 - -0.0296661593019962 - 0.1580380052328110 - <_> - - <_> - - - - <_> - 3 14 16 3 -1. - <_> - 3 15 16 1 3. - 0 - 0.0125837000086904 - 0.0204096809029579 - -0.2315654009580612 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 7 1 2 2. - 1 - -0.0121950898319483 - -0.3142809867858887 - 0.0135035701096058 - <_> - - <_> - - - - <_> - 14 10 4 9 -1. - <_> - 14 13 4 3 3. - 0 - 0.0283860899507999 - -0.0190670993179083 - 0.1243837997317314 - <_> - - <_> - - - - <_> - 10 12 2 4 -1. - <_> - 11 12 1 4 2. - 0 - -2.5152720627374947e-004 - 0.0713802427053452 - -0.0585605800151825 - <_> - - <_> - - - - <_> - 15 2 4 10 -1. - <_> - 17 2 2 5 2. - <_> - 15 7 2 5 2. - 0 - 0.0295074395835400 - 6.3799307681620121e-003 - -0.1419329941272736 - <_> - - <_> - - - - <_> - 5 10 6 4 -1. - <_> - 5 10 3 4 2. - 1 - 0.0120229404419661 - -0.0536224916577339 - 0.0809247866272926 - <_> - - <_> - - - - <_> - 14 3 3 16 -1. - <_> - 14 11 3 8 2. - 0 - 0.0128393396735191 - -0.0262215007096529 - 0.0414627604186535 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 8 6 1 1 3. - 0 - 5.8855762472376227e-004 - 0.0382059998810291 - -0.1123263984918594 - <_> - - <_> - - - - <_> - 14 3 3 16 -1. - <_> - 14 11 3 8 2. - 0 - -0.0186024494469166 - 0.0429389700293541 - -0.0216047801077366 - <_> - - <_> - - - - <_> - 5 3 3 16 -1. - <_> - 5 11 3 8 2. - 0 - 9.6901757642626762e-003 - -0.0658379420638084 - 0.0950843393802643 - <_> - - <_> - - - - <_> - 15 7 3 8 -1. - <_> - 15 11 3 4 2. - 0 - -0.0215594805777073 - 0.1058064997196198 - -0.0185519102960825 - <_> - - <_> - - - - <_> - 3 2 4 10 -1. - <_> - 3 2 2 5 2. - <_> - 5 7 2 5 2. - 0 - 7.3115159757435322e-003 - 0.0362274199724197 - -0.1283949017524719 - <_> - - <_> - - - - <_> - 11 5 3 3 -1. - <_> - 11 6 3 1 3. - 0 - 3.5540990065783262e-003 - -0.0147685296833515 - 0.1096227988600731 - <_> - - <_> - - - - <_> - 10 8 2 10 -1. - <_> - 10 8 2 5 2. - 1 - -0.0352783091366291 - -0.1688088029623032 - 0.0261964593082666 - <_> - - <_> - - - - <_> - 10 8 2 4 -1. - <_> - 10 9 2 2 2. - 0 - -4.6638878993690014e-003 - 0.2200984954833984 - -0.0196922998875380 - <_> - - <_> - - - - <_> - 8 11 3 4 -1. - <_> - 8 12 3 2 2. - 0 - 1.9794099498540163e-003 - 0.0366751104593277 - -0.1191075965762138 - <_> - - <_> - - - - <_> - 10 8 3 6 -1. - <_> - 11 10 1 2 9. - 0 - -6.8223169073462486e-003 - -0.0760138034820557 - 0.0261976607143879 - <_> - - <_> - - - - <_> - 9 8 3 6 -1. - <_> - 10 10 1 2 9. - 0 - 5.9645362198352814e-003 - 0.0492133684456348 - -0.1078047007322311 - <_> - - <_> - - - - <_> - 12 12 6 2 -1. - <_> - 15 12 3 1 2. - <_> - 12 13 3 1 2. - 0 - 0.0144590502604842 - 3.2462789677083492e-003 - -0.8547673821449280 - <_> - - <_> - - - - <_> - 0 8 8 12 -1. - <_> - 0 8 4 6 2. - <_> - 4 14 4 6 2. - 0 - -0.0317131094634533 - 0.1375728994607925 - -0.0364001989364624 - <_> - - <_> - - - - <_> - 16 10 4 8 -1. - <_> - 18 10 2 4 2. - <_> - 16 14 2 4 2. - 0 - 1.7335789743810892e-003 - -0.0437189489603043 - 0.0598351582884789 - <_> - - <_> - - - - <_> - 11 4 4 4 -1. - <_> - 10 5 4 2 2. - 1 - -5.0536859780550003e-003 - -0.1502123028039932 - 0.0291829593479633 - <_> - - <_> - - - - <_> - 12 4 10 4 -1. - <_> - 11 5 10 2 2. - 1 - 0.0842173695564270 - 1.3661800185218453e-003 - -0.9581394195556641 - <_> - - <_> - - - - <_> - 11 7 6 2 -1. - <_> - 11 7 3 2 2. - 1 - -0.0103970402851701 - 0.1397981047630310 - -0.0338630490005016 - <_> - - <_> - - - - <_> - 9 19 6 1 -1. - <_> - 9 19 3 1 2. - 0 - 2.2687430027872324e-003 - 0.0188055709004402 - -0.0665837228298187 - <_> - - <_> - - - - <_> - 3 11 10 8 -1. - <_> - 3 11 5 4 2. - <_> - 8 15 5 4 2. - 0 - -8.4558986127376556e-003 - 0.0905604586005211 - -0.0506104789674282 - <_> - - <_> - - - - <_> - 18 15 1 2 -1. - <_> - 18 16 1 1 2. - 0 - 1.3801630120724440e-003 - 0.0177544206380844 - -0.2163805067539215 - <_> - - <_> - - - - <_> - 10 9 3 1 -1. - <_> - 11 10 1 1 3. - 1 - -5.5963802151381969e-003 - -0.2849820852279663 - 0.0153767196461558 - <_> - - <_> - - - - <_> - 12 13 2 2 -1. - <_> - 13 13 1 1 2. - <_> - 12 14 1 1 2. - 0 - 2.6721679023467004e-004 - -0.0391111709177494 - 0.0667968168854713 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 8 13 1 1 2. - <_> - 9 14 1 1 2. - 0 - -2.1694051101803780e-003 - 0.2280647009611130 - -0.0190595109015703 - <_> - - <_> - - - - <_> - 5 1 14 2 -1. - <_> - 5 1 7 2 2. - 0 - -0.0315382890403271 - -0.0869315415620804 - 9.8167890682816505e-003 - <_> - - <_> - - - - <_> - 6 8 4 1 -1. - <_> - 8 8 2 1 2. - 0 - -7.5018982170149684e-004 - 0.0996761769056320 - -0.0423625893890858 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 13 5 1 1 2. - <_> - 12 6 1 1 2. - 0 - -6.4003129955381155e-004 - 0.0629896670579910 - -0.0394466295838356 - <_> - - <_> - - - - <_> - 4 1 4 1 -1. - <_> - 4 1 2 1 2. - 1 - -0.0158669501543045 - -0.4836722910404205 - 8.9298039674758911e-003 - <_> - - <_> - - - - <_> - 12 6 2 6 -1. - <_> - 12 8 2 2 3. - 0 - 8.7925972184166312e-004 - -0.0721010193228722 - 0.0438675694167614 - <_> - - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 8 9 3 2 2. - <_> - 11 11 3 2 2. - 0 - -4.5651597902178764e-003 - -0.1310862004756928 - 0.0371734611690044 - <_> - - <_> - - - - <_> - 5 7 12 3 -1. - <_> - 5 8 12 1 3. - 0 - -2.7413619682192802e-003 - 0.1147352978587151 - -0.0421697981655598 - <_> - - <_> - - - - <_> - 5 0 3 3 -1. - <_> - 6 1 1 1 9. - 0 - -0.0213424693793058 - -0.6854861974716187 - 5.8210380375385284e-003 - <_> - - <_> - - - - <_> - 19 8 2 2 -1. - <_> - 20 8 1 1 2. - <_> - 19 9 1 1 2. - 0 - 1.4491120055026840e-005 - -0.0291323401033878 - 0.0338317491114140 - -0.8675044178962708 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 1 3 3 -1. - <_> - 10 2 1 3 3. - 1 - -0.0185522492974997 - 0.3323687911033630 - -0.0767882913351059 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - 3.7926589720882475e-004 - 0.0174140203744173 - -0.0576317794620991 - <_> - - <_> - - - - <_> - 9 1 4 6 -1. - <_> - 9 3 4 2 3. - 0 - 0.0214243605732918 - -0.0643023997545242 - 0.2473767995834351 - <_> - - <_> - - - - <_> - 9 4 4 3 -1. - <_> - 9 5 4 1 3. - 0 - 4.4263061136007309e-003 - -0.0778626203536987 - 0.1687957942485809 - <_> - - <_> - - - - <_> - 9 8 4 1 -1. - <_> - 10 8 2 1 2. - 0 - -1.5863520093262196e-004 - 0.1473990976810455 - -0.0507220104336739 - <_> - - <_> - - - - <_> - 6 1 16 11 -1. - <_> - 6 1 8 11 2. - 0 - -0.0661889910697937 - 0.0574754700064659 - -0.0558690689504147 - <_> - - <_> - - - - <_> - 2 15 1 3 -1. - <_> - 2 16 1 1 3. - 0 - 0.0345590896904469 - -6.9819921627640724e-003 - -410.3931884765625000 - <_> - - <_> - - - - <_> - 8 6 6 4 -1. - <_> - 8 8 6 2 2. - 0 - 0.0739305317401886 - 6.0889549786224961e-005 - -199.6035003662109400 - <_> - - <_> - - - - <_> - 10 14 2 2 -1. - <_> - 10 15 2 1 2. - 0 - 0.0189021602272987 - 2.9056149287498556e-005 - -5.2581162109375000e+003 - <_> - - <_> - - - - <_> - 17 6 3 4 -1. - <_> - 18 7 1 4 3. - 1 - 1.9612549804151058e-003 - -0.0233280193060637 - 0.0422865897417068 - <_> - - <_> - - - - <_> - 8 5 6 6 -1. - <_> - 10 7 2 2 9. - 0 - -2.7586980722844601e-003 - -0.1750102043151856 - 0.0494708716869354 - <_> - - <_> - - - - <_> - 13 3 2 6 -1. - <_> - 13 3 1 6 2. - 0 - -0.0120468903332949 - 0.2203541994094849 - 0.0127888796851039 - <_> - - <_> - - - - <_> - 7 3 2 6 -1. - <_> - 8 3 1 6 2. - 0 - -0.0182797908782959 - 0.4582200050354004 - -0.0196342207491398 - <_> - - <_> - - - - <_> - 10 16 2 2 -1. - <_> - 10 17 2 1 2. - 0 - 4.3859930883627385e-005 - -0.0340290889143944 - 0.0381454788148403 - <_> - - <_> - - - - <_> - 4 8 4 10 -1. - <_> - 4 13 4 5 2. - 0 - 0.0767348930239677 - -0.0311220195144415 - 0.2937301099300385 - <_> - - <_> - - - - <_> - 10 13 12 6 -1. - <_> - 13 13 6 6 2. - 0 - -0.0227844808250666 - 0.1099961996078491 - -0.0472607500851154 - <_> - - <_> - - - - <_> - 6 0 8 3 -1. - <_> - 5 1 8 1 3. - 1 - 1.7537520034238696e-003 - 0.0779445916414261 - -0.0936910435557365 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 17 0 1 2 2. - <_> - 16 2 1 2 2. - 0 - -7.5380277121439576e-004 - -0.1200727969408035 - 0.0371891111135483 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - 4.9356842646375299e-004 - -0.0565293505787849 - 0.1193263009190559 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - -3.1938559841364622e-003 - 0.2388623058795929 - -0.0104292100295424 - <_> - - <_> - - - - <_> - 4 0 2 4 -1. - <_> - 4 0 1 2 2. - <_> - 5 2 1 2 2. - 0 - -6.2314997194334865e-004 - -0.1465436071157455 - 0.0466516390442848 - <_> - - <_> - - - - <_> - 11 10 2 2 -1. - <_> - 12 10 1 1 2. - <_> - 11 11 1 1 2. - 0 - 7.5532711343839765e-004 - -0.0326167196035385 - 0.1027849018573761 - <_> - - <_> - - - - <_> - 9 10 2 2 -1. - <_> - 9 10 1 1 2. - <_> - 10 11 1 1 2. - 0 - -6.0558720724657178e-004 - 0.1480251997709274 - -0.0558548606932163 - <_> - - <_> - - - - <_> - 18 17 1 3 -1. - <_> - 18 18 1 1 3. - 0 - -1.2911390513181686e-003 - -0.2432972937822342 - 0.0217299591749907 - <_> - - <_> - - - - <_> - 3 17 1 3 -1. - <_> - 3 18 1 1 3. - 0 - 1.0470219422131777e-003 - 0.0317961387336254 - -0.2025438994169235 - <_> - - <_> - - - - <_> - 13 6 2 1 -1. - <_> - 13 6 1 1 2. - 0 - 2.2770989744458348e-004 - -0.0990478396415710 - 0.0850042030215263 - <_> - - <_> - - - - <_> - 0 0 14 4 -1. - <_> - 0 0 7 2 2. - <_> - 7 2 7 2 2. - 0 - -6.8532312288880348e-003 - 0.0952584370970726 - -0.0666904672980309 - <_> - - <_> - - - - <_> - 13 3 2 3 -1. - <_> - 13 4 2 1 3. - 0 - 1.6310160281136632e-003 - 0.0258614793419838 - -0.1291349977254868 - <_> - - <_> - - - - <_> - 6 3 8 3 -1. - <_> - 6 4 8 1 3. - 0 - 8.4447831613942981e-004 - -0.0995584502816200 - 0.0782443210482597 - <_> - - <_> - - - - <_> - 13 1 3 3 -1. - <_> - 12 2 3 1 3. - 1 - 0.0129075897857547 - -0.0193130802363157 - 0.1587181985378265 - <_> - - <_> - - - - <_> - 9 1 3 3 -1. - <_> - 10 2 1 3 3. - 1 - -0.0183758493512869 - -0.1642740964889526 - 0.0372903086245060 - <_> - - <_> - - - - <_> - 11 0 9 6 -1. - <_> - 11 3 9 3 2. - 0 - 0.0770011171698570 - 4.6129091642796993e-003 - -0.3555409908294678 - <_> - - <_> - - - - <_> - 7 6 2 1 -1. - <_> - 8 6 1 1 2. - 0 - 4.3118221219629049e-004 - -0.0740132331848145 - 0.0778647214174271 - <_> - - <_> - - - - <_> - 5 6 12 3 -1. - <_> - 9 7 4 1 9. - 0 - -2.3275790736079216e-003 - 0.1211223006248474 - -0.0609132088720798 - <_> - - <_> - - - - <_> - 11 3 7 2 -1. - <_> - 11 3 7 1 2. - 1 - 3.4061390906572342e-003 - 0.0463812611997128 - -0.1536995023488998 - <_> - - <_> - - - - <_> - 12 6 1 3 -1. - <_> - 12 7 1 1 3. - 0 - 1.6798749566078186e-003 - -0.0480457916855812 - 0.1689691990613937 - <_> - - <_> - - - - <_> - 3 18 3 2 -1. - <_> - 3 19 3 1 2. - 0 - -2.8759230190189555e-005 - 0.0712340474128723 - -0.0849672034382820 - <_> - - <_> - - - - <_> - 17 12 1 8 -1. - <_> - 17 14 1 4 2. - 0 - -3.8337870500981808e-003 - 0.0860940665006638 - -0.0180246904492378 - <_> - - <_> - - - - <_> - 4 18 8 2 -1. - <_> - 4 19 8 1 2. - 0 - -3.9875688962638378e-003 - -0.1995317041873932 - 0.0322066210210323 - <_> - - <_> - - - - <_> - 13 16 9 2 -1. - <_> - 16 16 3 2 3. - 0 - 9.3647763133049011e-003 - -0.0318453498184681 - 0.1125456988811493 - <_> - - <_> - - - - <_> - 0 16 9 2 -1. - <_> - 3 16 3 2 3. - 0 - -1.8147890223190188e-003 - 0.0856131166219711 - -0.0688078626990318 - <_> - - <_> - - - - <_> - 6 3 10 2 -1. - <_> - 11 3 5 1 2. - <_> - 6 4 5 1 2. - 0 - 2.3888219147920609e-003 - 0.0411066189408302 - -0.1384187042713165 - <_> - - <_> - - - - <_> - 0 16 6 4 -1. - <_> - 3 16 3 4 2. - 0 - 7.7157230116426945e-003 - -0.0488350614905357 - 0.1287523061037064 - <_> - - <_> - - - - <_> - 20 13 1 6 -1. - <_> - 20 13 1 3 2. - 1 - 0.0129593499004841 - 0.0121010895818472 - -0.0723995193839073 - <_> - - <_> - - - - <_> - 2 13 6 1 -1. - <_> - 2 13 3 1 2. - 1 - 2.0204610191285610e-003 - -0.0758197605609894 - 0.0940041095018387 - <_> - - <_> - - - - <_> - 21 12 1 2 -1. - <_> - 21 13 1 1 2. - 0 - 2.4580449098721147e-004 - 0.0279818996787071 - -0.0796591192483902 - <_> - - <_> - - - - <_> - 1 0 18 10 -1. - <_> - 1 5 18 5 2. - 0 - 0.2629162967205048 - 7.6313978061079979e-003 - -0.6248887181282044 - <_> - - <_> - - - - <_> - 16 0 2 4 -1. - <_> - 17 0 1 2 2. - <_> - 16 2 1 2 2. - 0 - 5.4684141650795937e-004 - 0.0360207110643387 - -0.1203714013099670 - <_> - - <_> - - - - <_> - 9 7 1 2 -1. - <_> - 9 8 1 1 2. - 0 - 2.2176979109644890e-003 - -0.0253673102706671 - 0.1918577998876572 - <_> - - <_> - - - - <_> - 12 4 1 4 -1. - <_> - 11 5 1 2 2. - 1 - -1.7476399661973119e-003 - -0.0658792629837990 - 0.0297189392149448 - <_> - - <_> - - - - <_> - 11 3 11 3 -1. - <_> - 10 4 11 1 3. - 1 - -0.0236190203577280 - 0.2684723138809204 - -0.0184158999472857 - <_> - - <_> - - - - <_> - 11 7 1 6 -1. - <_> - 11 9 1 2 3. - 0 - -2.8751560021191835e-003 - -0.1289857029914856 - 0.0243939291685820 - <_> - - <_> - - - - <_> - 10 7 1 6 -1. - <_> - 10 9 1 2 3. - 0 - 6.8191969767212868e-003 - 0.0185448806732893 - -0.2790479063987732 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - 3.0725370161235332e-003 - -0.0214833207428455 - 0.2426352947950363 - <_> - - <_> - - - - <_> - 7 2 3 12 -1. - <_> - 8 6 1 4 9. - 0 - -0.0202987492084503 - -0.1407659947872162 - 0.0325660295784473 - <_> - - <_> - - - - <_> - 12 9 3 2 -1. - <_> - 13 9 1 2 3. - 0 - -0.0156890898942947 - -0.6994019746780396 - 3.9432961493730545e-003 - <_> - - <_> - - - - <_> - 7 9 3 2 -1. - <_> - 8 9 1 2 3. - 0 - -1.1604740284383297e-003 - 0.0957653522491455 - -0.0627165883779526 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 9 1 4 2 2. - 0 - 7.5667561031877995e-003 - -0.0265957191586494 - 0.1935597956180573 - <_> - - <_> - - - - <_> - 10 4 1 4 -1. - <_> - 10 6 1 2 2. - 0 - -3.1542551005259156e-004 - 0.0705791190266609 - -0.0717888027429581 - <_> - - <_> - - - - <_> - 10 1 4 10 -1. - <_> - 10 6 4 5 2. - 0 - 2.9042719397693872e-003 - -0.0618459209799767 - 0.0424315109848976 - <_> - - <_> - - - - <_> - 10 7 5 2 -1. - <_> - 10 7 5 1 2. - 1 - 3.5413689911365509e-003 - 0.0590174309909344 - -0.0965484380722046 - <_> - - <_> - - - - <_> - 10 6 2 6 -1. - <_> - 10 9 2 3 2. - 0 - 1.1393419699743390e-003 - 0.0430816709995270 - -0.1423912048339844 - <_> - - <_> - - - - <_> - 9 2 4 6 -1. - <_> - 9 4 4 2 3. - 0 - -4.6505071222782135e-003 - 0.1361459940671921 - -0.0451100207865238 - <_> - - <_> - - - - <_> - 6 2 12 2 -1. - <_> - 12 2 6 1 2. - <_> - 6 3 6 1 2. - 0 - -3.4854039549827576e-003 - -0.0696755573153496 - 0.0146330697461963 - <_> - - <_> - - - - <_> - 4 2 12 2 -1. - <_> - 4 2 6 1 2. - <_> - 10 3 6 1 2. - 0 - -3.7426329217851162e-003 - -0.1596772968769074 - 0.0336696915328503 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - -2.9627270996570587e-003 - 0.2082224041223526 - -0.0222252607345581 - <_> - - <_> - - - - <_> - 9 0 3 6 -1. - <_> - 9 2 3 2 3. - 0 - -0.0342830903828144 - 0.2109573036432266 - -0.0239020492881536 - <_> - - <_> - - - - <_> - 10 0 2 1 -1. - <_> - 10 0 1 1 2. - 0 - 3.3819628879427910e-004 - 0.0396742187440395 - -0.1327472031116486 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - 2.3642720188945532e-003 - -0.0248296707868576 - 0.2082667052745819 - <_> - - <_> - - - - <_> - 12 3 3 3 -1. - <_> - 13 4 1 3 3. - 1 - -0.0123708602041006 - -0.1795863062143326 - 7.0276390761137009e-003 - <_> - - <_> - - - - <_> - 10 3 3 3 -1. - <_> - 9 4 3 1 3. - 1 - -9.7465672297403216e-004 - 0.0690084621310234 - -0.0721720084547997 - <_> - - <_> - - - - <_> - 9 9 6 3 -1. - <_> - 9 9 3 3 2. - 0 - 4.1931481100618839e-003 - -0.0440497882664204 - 0.0607572384178638 - <_> - - <_> - - - - <_> - 6 4 10 6 -1. - <_> - 6 4 5 3 2. - <_> - 11 7 5 3 2. - 0 - -5.9395581483840942e-003 - -0.1156857982277870 - 0.0463068783283234 - <_> - - <_> - - - - <_> - 10 0 2 2 -1. - <_> - 11 0 1 1 2. - <_> - 10 1 1 1 2. - 0 - 3.3657620660960674e-003 - 7.1067977696657181e-003 - -0.5680009722709656 - <_> - - <_> - - - - <_> - 11 1 4 3 -1. - <_> - 11 1 2 3 2. - 1 - 0.0526649914681911 - -8.0993287265300751e-003 - 0.6179720759391785 - <_> - - <_> - - - - <_> - 6 1 10 7 -1. - <_> - 6 1 5 7 2. - 0 - -8.6903236806392670e-003 - 0.0881302729249001 - -0.0536997206509113 - <_> - - <_> - - - - <_> - 0 12 1 2 -1. - <_> - 0 13 1 1 2. - 0 - 5.1246141083538532e-004 - 0.0324901193380356 - -0.1488039046525955 - <_> - - <_> - - - - <_> - 14 1 3 14 -1. - <_> - 15 2 1 14 3. - 1 - 0.0417893901467323 - -0.0107490001246333 - 0.1739660054445267 - <_> - - <_> - - - - <_> - 10 8 1 3 -1. - <_> - 9 9 1 1 3. - 1 - 1.2822130229324102e-003 - -0.0435907393693924 - 0.1042452007532120 - <_> - - <_> - - - - <_> - 12 4 3 5 -1. - <_> - 13 5 1 5 3. - 1 - 0.0153936501592398 - 0.0124135399237275 - -0.1146071031689644 - <_> - - <_> - - - - <_> - 10 4 5 3 -1. - <_> - 9 5 5 1 3. - 1 - -7.1986489929258823e-003 - -0.1554702967405319 - 0.0325183309614658 - <_> - - <_> - - - - <_> - 14 4 3 6 -1. - <_> - 15 4 1 6 3. - 0 - 2.4960329756140709e-003 - -0.0320732407271862 - 0.0622239410877228 - <_> - - <_> - - - - <_> - 8 1 14 3 -1. - <_> - 7 2 14 1 3. - 1 - 0.0158246401697397 - -0.0338761508464813 - 0.1340938955545425 - <_> - - <_> - - - - <_> - 17 4 2 3 -1. - <_> - 17 4 1 3 2. - 0 - -1.1245839996263385e-003 - -0.1091853007674217 - 0.0328951515257359 - <_> - - <_> - - - - <_> - 0 5 9 2 -1. - <_> - 3 5 3 2 3. - 0 - 1.5742470277473330e-003 - -0.0663205087184906 - 0.0631740614771843 - <_> - - <_> - - - - <_> - 13 6 3 2 -1. - <_> - 14 6 1 2 3. - 0 - 1.3438949827104807e-003 - -0.0317974388599396 - 0.0856420397758484 - <_> - - <_> - - - - <_> - 5 4 2 5 -1. - <_> - 6 4 1 5 2. - 0 - -1.7369530396535993e-003 - -0.1002003997564316 - 0.0457102395594120 - <_> - - <_> - - - - <_> - 13 8 3 4 -1. - <_> - 14 9 1 4 3. - 1 - 0.0137916402891278 - -0.0132539197802544 - 0.1021431013941765 - <_> - - <_> - - - - <_> - 9 8 4 3 -1. - <_> - 8 9 4 1 3. - 1 - -0.0107351401820779 - 0.1284653991460800 - -0.0394040495157242 - <_> - - <_> - - - - <_> - 11 6 2 4 -1. - <_> - 11 6 1 4 2. - 1 - 2.9586190357804298e-003 - 0.0203588306903839 - -0.0651129633188248 - <_> - - <_> - - - - <_> - 6 6 3 2 -1. - <_> - 7 6 1 2 3. - 0 - 4.0438622236251831e-003 - -0.0244864895939827 - 0.1787620931863785 - <_> - - <_> - - - - <_> - 11 5 1 8 -1. - <_> - 9 7 1 4 2. - 1 - -0.0365257114171982 - -0.3076668083667755 - 3.2902029342949390e-003 - <_> - - <_> - - - - <_> - 11 5 8 1 -1. - <_> - 13 7 4 1 2. - 1 - 8.7369624525308609e-003 - 0.0294704902917147 - -0.1532458961009979 - <_> - - <_> - - - - <_> - 18 9 4 10 -1. - <_> - 20 9 2 5 2. - <_> - 18 14 2 5 2. - 0 - 2.0252179820090532e-003 - -0.0408196710050106 - 0.0597058683633804 - <_> - - <_> - - - - <_> - 5 4 4 2 -1. - <_> - 5 4 2 1 2. - <_> - 7 5 2 1 2. - 0 - 5.5626290850341320e-003 - 0.0110835898667574 - -0.3831363022327423 - <_> - - <_> - - - - <_> - 18 9 4 10 -1. - <_> - 20 9 2 5 2. - <_> - 18 14 2 5 2. - 0 - -1.4883900294080377e-003 - 0.0875046178698540 - -0.0649117976427078 - <_> - - <_> - - - - <_> - 8 5 3 1 -1. - <_> - 9 5 1 1 3. - 0 - 1.4624910363636445e-005 - -0.0741161033511162 - 0.0555896013975143 - <_> - - <_> - - - - <_> - 12 6 1 2 -1. - <_> - 12 7 1 1 2. - 0 - 3.4180650254711509e-004 - -0.0539408102631569 - 0.0534572787582874 - <_> - - <_> - - - - <_> - 11 4 3 3 -1. - <_> - 10 5 3 1 3. - 1 - 1.5538090374320745e-003 - 0.0562337003648281 - -0.0846224203705788 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 6 2 1 3. - 0 - 6.7849917104467750e-004 - -0.0389598906040192 - 0.1043417975306511 - <_> - - <_> - - - - <_> - 4 0 8 18 -1. - <_> - 6 0 4 18 2. - 0 - -0.0475195012986660 - 0.1088557988405228 - -0.0406184792518616 - <_> - - <_> - - - - <_> - 8 0 12 1 -1. - <_> - 11 0 6 1 2. - 0 - 0.0240749008953571 - 3.5018681082874537e-003 - -0.6423854231834412 - <_> - - <_> - - - - <_> - 9 4 3 2 -1. - <_> - 10 4 1 2 3. - 0 - 3.7433409597724676e-003 - 0.0260274708271027 - -0.1649311929941177 - <_> - - <_> - - - - <_> - 11 4 3 4 -1. - <_> - 11 5 3 2 2. - 0 - 7.2088050656020641e-003 - -0.0127126500010490 - 0.1313410997390747 - <_> - - <_> - - - - <_> - 5 5 10 3 -1. - <_> - 5 6 10 1 3. - 0 - -1.0108030401170254e-003 - 0.0618374012410641 - -0.0829963684082031 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 6 2 1 3. - 0 - 4.1825440712273121e-003 - -0.0100300600752234 - 0.1192855015397072 - <_> - - <_> - - - - <_> - 1 5 3 2 -1. - <_> - 1 6 3 1 2. - 0 - -3.1841539312154055e-003 - -0.2501884102821350 - 0.0174551904201508 - <_> - - <_> - - - - <_> - 8 6 6 3 -1. - <_> - 10 7 2 1 9. - 0 - -0.0253018699586391 - -0.4026100039482117 - 0.0100777000188828 - <_> - - <_> - - - - <_> - 7 2 6 13 -1. - <_> - 10 2 3 13 2. - 0 - -0.0733123868703842 - 0.2758834958076477 - -0.0174550004303455 - <_> - - <_> - - - - <_> - 2 3 20 9 -1. - <_> - 2 3 10 9 2. - 0 - 0.2885189950466156 - 9.3694366514682770e-003 - -0.2508297860622406 - <_> - - <_> - - - - <_> - 9 6 2 2 -1. - <_> - 9 7 2 1 2. - 0 - -3.0820369720458984e-003 - 0.2515836060047150 - -0.0187910292297602 - <_> - - <_> - - - - <_> - 11 4 2 6 -1. - <_> - 11 7 2 3 2. - 0 - -0.0153799196705222 - -0.3329795897006989 - 6.7029618658125401e-003 - <_> - - <_> - - - - <_> - 9 0 2 2 -1. - <_> - 9 0 2 1 2. - 1 - -2.5755220558494329e-003 - -0.1443480998277664 - 0.0300391595810652 - <_> - - <_> - - - - <_> - 10 1 6 1 -1. - <_> - 10 1 3 1 2. - 0 - -2.1770859602838755e-003 - 0.0626539364457130 - -0.0343692190945148 - <_> - - <_> - - - - <_> - 1 7 18 9 -1. - <_> - 7 10 6 3 9. - 0 - -0.1160145998001099 - -0.1272418051958084 - 0.0352428294718266 - <_> - - <_> - - - - <_> - 16 8 6 6 -1. - <_> - 14 10 6 2 3. - 1 - 0.0394029803574085 - -0.0179629400372505 - 0.0821348428726196 - <_> - - <_> - - - - <_> - 8 1 8 8 -1. - <_> - 8 1 4 8 2. - 1 - 0.0312576591968536 - -0.0499647893011570 - 0.1035379022359848 - <_> - - <_> - - - - <_> - 11 7 8 12 -1. - <_> - 11 13 8 6 2. - 0 - 0.0268398392945528 - -0.0348292589187622 - 0.0772499963641167 - <_> - - <_> - - - - <_> - 2 0 16 12 -1. - <_> - 2 3 16 6 2. - 0 - 0.0618169791996479 - -0.0327882803976536 - 0.1360058039426804 - <_> - - <_> - - - - <_> - 8 2 10 9 -1. - <_> - 8 5 10 3 3. - 0 - 0.0637388080358505 - 0.0156526304781437 - -0.1457045972347260 - <_> - - <_> - - - - <_> - 10 4 4 5 -1. - <_> - 11 5 2 5 2. - 1 - -3.6892290227115154e-003 - -0.1312115043401718 - 0.0363550186157227 - <_> - - <_> - - - - <_> - 11 0 4 5 -1. - <_> - 11 0 2 5 2. - 1 - -0.0825870707631111 - -0.1744731962680817 - 5.7495138607919216e-003 - <_> - - <_> - - - - <_> - 11 0 5 4 -1. - <_> - 11 0 5 2 2. - 1 - 0.0566366016864777 - -0.0109418304637074 - 0.4263165891170502 - <_> - - <_> - - - - <_> - 15 8 7 4 -1. - <_> - 14 9 7 2 2. - 1 - -6.5044318325817585e-003 - 0.0748591572046280 - -0.0353831797838211 - <_> - - <_> - - - - <_> - 10 0 9 6 -1. - <_> - 8 2 9 2 3. - 1 - -0.0237805694341660 - -0.1540167927742004 - 0.0305526498705149 - <_> - - <_> - - - - <_> - 5 4 15 9 -1. - <_> - 10 7 5 3 9. - 0 - 0.0286470595747232 - 0.0497629791498184 - -0.0451813898980618 - <_> - - <_> - - - - <_> - 9 5 2 3 -1. - <_> - 8 6 2 1 3. - 1 - -5.7239918969571590e-003 - 0.1339392066001892 - -0.0365998409688473 - <_> - - <_> - - - - <_> - 7 1 12 18 -1. - <_> - 11 7 4 6 9. - 0 - -0.1880867034196854 - -0.0827486664056778 - 0.0132015999406576 - <_> - - <_> - - - - <_> - 10 4 4 10 -1. - <_> - 11 5 2 10 2. - 1 - -0.0157910604029894 - 0.1639848947525024 - -0.0275885500013828 - <_> - - <_> - - - - <_> - 7 1 12 18 -1. - <_> - 11 7 4 6 9. - 0 - 0.9551311135292053 - -2.2177249193191528e-003 - 0.3400256037712097 - <_> - - <_> - - - - <_> - 3 1 12 18 -1. - <_> - 7 7 4 6 9. - 0 - 0.6958097219467163 - -0.0108475396409631 - 0.4218420088291168 - <_> - - <_> - - - - <_> - 15 11 2 2 -1. - <_> - 15 11 1 2 2. - 1 - -0.0226386897265911 - -0.6921870112419128 - 1.8343270057812333e-003 - <_> - - <_> - - - - <_> - 7 11 2 2 -1. - <_> - 7 11 2 1 2. - 1 - 2.4945749901235104e-003 - 0.0342442803084850 - -0.1283912956714630 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 13 9 1 2 2. - 1 - 0.0117486603558064 - -0.0133515195921063 - 0.1392697989940643 - <_> - - <_> - - - - <_> - 9 9 2 2 -1. - <_> - 9 9 2 1 2. - 1 - -9.7356218611821532e-004 - 0.1027709022164345 - -0.0544988811016083 - <_> - - <_> - - - - <_> - 10 7 6 6 -1. - <_> - 12 9 2 2 9. - 0 - -0.0251241791993380 - -0.1222632005810738 - 0.0245465692132711 - <_> - - <_> - - - - <_> - 6 3 6 12 -1. - <_> - 8 7 2 4 9. - 0 - -0.0291094798594713 - -0.1338727027177811 - 0.0348044112324715 - <_> - - <_> - - - - <_> - 8 0 12 10 -1. - <_> - 14 0 6 5 2. - <_> - 8 5 6 5 2. - 0 - -0.0252094604074955 - 0.1542696952819824 - -0.0290930606424809 - <_> - - <_> - - - - <_> - 9 5 2 4 -1. - <_> - 10 5 1 4 2. - 0 - 2.8921720513608307e-005 - -0.0878734067082405 - 0.0500448904931545 - <_> - - <_> - - - - <_> - 11 0 8 2 -1. - <_> - 13 0 4 2 2. - 0 - 1.5944410115480423e-003 - -0.0214876998215914 - 0.0337944589555264 - <_> - - <_> - - - - <_> - 0 11 6 4 -1. - <_> - 0 11 3 2 2. - <_> - 3 13 3 2 2. - 0 - -2.4497460108250380e-003 - 0.0939320698380470 - -0.0460011400282383 - <_> - - <_> - - - - <_> - 8 5 6 3 -1. - <_> - 10 6 2 1 9. - 0 - 0.0107403900474310 - 0.0453026816248894 - -0.0928004905581474 - <_> - - <_> - - - - <_> - 4 1 6 6 -1. - <_> - 4 1 3 3 2. - <_> - 7 4 3 3 2. - 0 - 3.4238519147038460e-003 - -0.0631316602230072 - 0.0782740935683250 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 13 1 2 1 3. - 1 - 0.0126877902075648 - -0.0149534000083804 - 0.2368267029523850 - <_> - - <_> - - - - <_> - 2 0 12 1 -1. - <_> - 5 0 6 1 2. - 0 - -7.3656099848449230e-003 - -0.1947627961635590 - 0.0243602208793163 - <_> - - <_> - - - - <_> - 12 0 6 4 -1. - <_> - 12 0 3 4 2. - 1 - 0.1020089015364647 - 4.0122540667653084e-003 - -0.5372496247291565 - <_> - - <_> - - - - <_> - 3 6 11 8 -1. - <_> - 3 8 11 4 2. - 0 - -0.0266255792230368 - 0.1718401014804840 - -0.0254446491599083 - <_> - - <_> - - - - <_> - 20 12 1 2 -1. - <_> - 20 13 1 1 2. - 0 - -2.9014078900218010e-003 - -0.3608188033103943 - 8.7030120193958282e-003 - <_> - - <_> - - - - <_> - 1 12 1 2 -1. - <_> - 1 13 1 1 2. - 0 - -1.4157840269035660e-005 - 0.0687069892883301 - -0.0642861276865005 - <_> - - <_> - - - - <_> - 20 12 2 2 -1. - <_> - 20 13 2 1 2. - 0 - -6.1351951444521546e-004 - -0.0660509169101715 - 0.0225727800279856 - <_> - - <_> - - - - <_> - 8 10 2 2 -1. - <_> - 8 10 1 1 2. - <_> - 9 11 1 1 2. - 0 - 2.0250449888408184e-003 - -0.0197515599429607 - 0.2237375974655151 - <_> - - <_> - - - - <_> - 12 11 3 3 -1. - <_> - 13 12 1 1 9. - 0 - 4.2518540285527706e-003 - 0.0231745801866055 - -0.0701143369078636 - <_> - - <_> - - - - <_> - 7 11 3 3 -1. - <_> - 8 12 1 1 9. - 0 - -0.0216896794736385 - -0.5193939208984375 - 8.3778435364365578e-003 - <_> - - <_> - - - - <_> - 20 12 2 2 -1. - <_> - 20 13 2 1 2. - 0 - -1.4693619959871285e-005 - 0.0434211418032646 - -0.0434816107153893 - <_> - - <_> - - - - <_> - 0 12 2 2 -1. - <_> - 0 13 2 1 2. - 0 - -1.1886609718203545e-003 - -0.1490051001310349 - 0.0284468401223421 - <_> - - <_> - - - - <_> - 12 5 4 8 -1. - <_> - 13 5 2 8 2. - 0 - -2.3027509450912476e-003 - 0.0385272391140461 - -0.0409060902893543 - <_> - - <_> - - - - <_> - 6 5 4 8 -1. - <_> - 7 5 2 8 2. - 0 - -0.0125956004485488 - 0.1046164035797119 - -0.0381859205663204 - <_> - - <_> - - - - <_> - 8 11 6 7 -1. - <_> - 10 11 2 7 3. - 0 - -6.2729697674512863e-003 - 0.0933212563395500 - -0.0481757111847401 - <_> - - <_> - - - - <_> - 10 7 1 6 -1. - <_> - 10 10 1 3 2. - 0 - -4.6335258521139622e-003 - -0.1334223002195358 - 0.0319440588355064 - <_> - - <_> - - - - <_> - 11 0 4 20 -1. - <_> - 11 0 2 20 2. - 0 - -0.0976690873503685 - -0.4156445860862732 - 4.0813097730278969e-003 - <_> - - <_> - - - - <_> - 4 0 5 16 -1. - <_> - 4 4 5 8 2. - 0 - -0.1052298992872238 - -0.4210839867591858 - 9.7584994509816170e-003 - <_> - - <_> - - - - <_> - 19 0 2 14 -1. - <_> - 19 7 2 7 2. - 0 - 0.0302241109311581 - 0.0178108904510736 - -0.1800812035799027 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -4.4741849415004253e-003 - 0.1710882931947708 - -0.0255971699953079 - <_> - - <_> - - - - <_> - 11 11 1 4 -1. - <_> - 11 12 1 2 2. - 0 - -1.4250929780246224e-005 - 0.0389472804963589 - -0.0489896610379219 - <_> - - <_> - - - - <_> - 8 9 6 4 -1. - <_> - 8 9 3 2 2. - <_> - 11 11 3 2 2. - 0 - -0.0139524200931191 - -0.2858611941337585 - 0.0142102995887399 - <_> - - <_> - - - - <_> - 14 0 2 3 -1. - <_> - 13 1 2 1 3. - 1 - -5.9520517243072391e-004 - 0.0284589398652315 - -0.0487700589001179 - <_> - - <_> - - - - <_> - 8 0 3 2 -1. - <_> - 9 1 1 2 3. - 1 - 0.0126683395355940 - -0.0199146401137114 - 0.2291443049907684 - <_> - - <_> - - - - <_> - 18 0 2 4 -1. - <_> - 18 0 2 2 2. - 1 - -0.0656304135918617 - 0.9594963192939758 - -8.1838190089911222e-004 - <_> - - <_> - - - - <_> - 4 0 4 2 -1. - <_> - 4 0 2 2 2. - 1 - 5.1044370047748089e-004 - -0.0622126683592796 - 0.0687538534402847 - <_> - - <_> - - - - <_> - 8 9 6 2 -1. - <_> - 8 10 6 1 2. - 0 - 8.2773733884096146e-003 - 7.8722098842263222e-003 - -0.5236067771911621 - <_> - - <_> - - - - <_> - 7 6 3 6 -1. - <_> - 7 8 3 2 3. - 0 - -0.0137142902240157 - 0.2913095951080322 - -0.0161863993853331 - <_> - - <_> - - - - <_> - 13 7 1 4 -1. - <_> - 13 8 1 2 2. - 0 - -1.6599230002611876e-003 - -0.1865099072456360 - 0.0217757690697908 - <_> - - <_> - - - - <_> - 0 12 16 6 -1. - <_> - 8 12 8 6 2. - 0 - 0.0139172403141856 - -0.0548330694437027 - 0.0751454830169678 - <_> - - <_> - - - - <_> - 5 16 12 3 -1. - <_> - 5 16 6 3 2. - 0 - -0.0141046997159719 - -0.1266054958105087 - 0.0390711016952991 - <_> - - <_> - - - - <_> - 0 14 12 6 -1. - <_> - 6 14 6 6 2. - 0 - -0.0265988595783710 - 0.0996238365769386 - -0.0454570800065994 - <_> - - <_> - - - - <_> - 18 15 1 4 -1. - <_> - 18 16 1 2 2. - 0 - -5.3842482157051563e-004 - -0.0820263475179672 - 0.0271883103996515 - <_> - - <_> - - - - <_> - 3 5 2 3 -1. - <_> - 4 5 1 3 2. - 0 - 1.4044049748918042e-005 - -0.0623605288565159 - 0.0673013329505920 - <_> - - <_> - - - - <_> - 6 1 14 2 -1. - <_> - 6 2 14 1 2. - 0 - -0.0395619906485081 - -0.4817497134208679 - 4.6106358058750629e-003 - <_> - - <_> - - - - <_> - 3 15 1 4 -1. - <_> - 3 16 1 2 2. - 0 - 1.0853289859369397e-003 - 0.0263139903545380 - -0.1530676037073135 - <_> - - <_> - - - - <_> - 14 0 6 2 -1. - <_> - 14 0 6 1 2. - 1 - -0.0191534794867039 - 0.1840032041072846 - -9.7944093868136406e-003 - <_> - - <_> - - - - <_> - 8 0 2 6 -1. - <_> - 8 0 1 6 2. - 1 - 0.0303064491599798 - -0.0107938703149557 - 0.3988673985004425 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 17 13 1 1 2. - <_> - 16 14 1 1 2. - 0 - 1.6124650137498975e-003 - -0.0117918103933334 - 0.1205805987119675 - <_> - - <_> - - - - <_> - 6 1 10 2 -1. - <_> - 6 1 5 1 2. - <_> - 11 2 5 1 2. - 0 - 0.0126326698809862 - 9.2375585809350014e-003 - -0.4237918853759766 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 17 13 1 1 2. - <_> - 16 14 1 1 2. - 0 - -4.3210129661019892e-005 - 0.0536564290523529 - -0.0434505492448807 - <_> - - <_> - - - - <_> - 4 13 2 2 -1. - <_> - 4 13 1 1 2. - <_> - 5 14 1 1 2. - 0 - 1.4556180394720286e-004 - -0.0502750091254711 - 0.0761211514472961 - <_> - - <_> - - - - <_> - 16 13 2 2 -1. - <_> - 17 13 1 1 2. - <_> - 16 14 1 1 2. - 0 - 1.4344939700094983e-005 - -0.0512023717164993 - 0.0558291897177696 - <_> - - <_> - - - - <_> - 4 13 2 2 -1. - <_> - 4 13 1 1 2. - <_> - 5 14 1 1 2. - 0 - -7.3230598354712129e-004 - 0.1392274945974350 - -0.0324546210467815 - <_> - - <_> - - - - <_> - 14 10 3 1 -1. - <_> - 15 11 1 1 3. - 1 - 0.0113876201212406 - -6.2937070615589619e-003 - 0.1851273030042648 - <_> - - <_> - - - - <_> - 8 10 1 3 -1. - <_> - 7 11 1 1 3. - 1 - -2.5180529337376356e-003 - -0.1374939978122711 - 0.0329079292714596 - <_> - - <_> - - - - <_> - 13 8 7 9 -1. - <_> - 13 11 7 3 3. - 0 - 0.0515285097062588 - -0.0116172498092055 - 0.1077732965350151 - <_> - - <_> - - - - <_> - 2 8 7 9 -1. - <_> - 2 11 7 3 3. - 0 - -0.0256449505686760 - 0.1232414022088051 - -0.0351012088358402 - <_> - - <_> - - - - <_> - 17 13 2 1 -1. - <_> - 17 13 1 1 2. - 1 - 1.6199030214920640e-003 - 0.0335271507501602 - -0.1358591020107269 - <_> - - <_> - - - - <_> - 5 13 1 2 -1. - <_> - 5 13 1 1 2. - 1 - -1.8191960407420993e-003 - -0.1648955047130585 - 0.0303196106106043 - <_> - - <_> - - - - <_> - 13 11 3 1 -1. - <_> - 14 11 1 1 3. - 0 - -3.1801960431039333e-003 - 0.1168484017252922 - -0.0187390595674515 - <_> - - <_> - - - - <_> - 5 14 1 2 -1. - <_> - 5 14 1 1 2. - 1 - 9.2808151384815574e-004 - 0.0383957698941231 - -0.1152070984244347 - <_> - - <_> - - - - <_> - 16 9 4 9 -1. - <_> - 16 12 4 3 3. - 0 - -4.1049402207136154e-003 - 0.0447799190878868 - -0.0277370307594538 - <_> - - <_> - - - - <_> - 2 9 4 9 -1. - <_> - 2 12 4 3 3. - 0 - 6.7887702025473118e-003 - -0.0489114783704281 - 0.0970025882124901 - <_> - - <_> - - - - <_> - 15 0 3 9 -1. - <_> - 16 1 1 9 3. - 1 - -4.7330660745501518e-003 - -0.0938211381435394 - 0.0270407702773809 - <_> - - <_> - - - - <_> - 2 0 12 10 -1. - <_> - 2 0 6 5 2. - <_> - 8 5 6 5 2. - 0 - -0.0215075109153986 - 0.1403248012065888 - -0.0319635793566704 - <_> - - <_> - - - - <_> - 4 2 18 11 -1. - <_> - 4 2 9 11 2. - 0 - 0.5043737888336182 - 8.9663412654772401e-004 - -1.0000989437103271 - <_> - - <_> - - - - <_> - 0 2 18 11 -1. - <_> - 9 2 9 11 2. - 0 - -0.2880448102951050 - -0.3175429999828339 - 0.0126268798485398 - <_> - - <_> - - - - <_> - 10 1 8 14 -1. - <_> - 14 1 4 7 2. - <_> - 10 8 4 7 2. - 0 - -0.0526234805583954 - 0.0816660374403000 - -0.0129981096833944 - <_> - - <_> - - - - <_> - 4 1 8 14 -1. - <_> - 4 1 4 7 2. - <_> - 8 8 4 7 2. - 0 - 4.1319038718938828e-003 - -0.0729146301746368 - 0.0738606527447701 - <_> - - <_> - - - - <_> - 15 6 2 4 -1. - <_> - 15 8 2 2 2. - 0 - 3.5127711016684771e-003 - 0.0217157993465662 - -0.0987667068839073 - <_> - - <_> - - - - <_> - 5 6 2 4 -1. - <_> - 5 8 2 2 2. - 0 - -6.7080818116664886e-003 - -0.2490347027778626 - 0.0204803403466940 - <_> - - <_> - - - - <_> - 14 10 7 3 -1. - <_> - 13 11 7 1 3. - 1 - -0.0138761401176453 - 0.0724597200751305 - -0.0113815898075700 - <_> - - <_> - - - - <_> - 8 10 3 7 -1. - <_> - 9 11 1 7 3. - 1 - 3.6984090693295002e-003 - -0.0503532588481903 - 0.1023285016417503 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 18 1 2 2. - 0 - -5.5892078671604395e-004 - 0.0551689006388187 - -0.0232596397399902 - <_> - - <_> - - - - <_> - 3 18 2 2 -1. - <_> - 4 18 1 2 2. - 0 - 1.9318210252095014e-004 - -0.0530244894325733 - 0.0808200314640999 - <_> - - <_> - - - - <_> - 15 0 3 9 -1. - <_> - 16 1 1 9 3. - 1 - 0.0544434003531933 - 1.9684119615703821e-003 - -0.4933665096759796 - <_> - - <_> - - - - <_> - 7 0 9 3 -1. - <_> - 6 1 9 1 3. - 1 - 5.7882429100573063e-003 - 0.0422352701425552 - -0.0936568975448608 - <_> - - <_> - - - - <_> - 9 2 6 8 -1. - <_> - 9 4 6 4 2. - 0 - -5.3214468061923981e-004 - -0.0682112798094749 - 0.0409150607883930 - <_> - - <_> - - - - <_> - 8 4 4 2 -1. - <_> - 10 4 2 2 2. - 0 - -1.5291050076484680e-003 - 0.1307808011770248 - -0.0310371704399586 - <_> - - <_> - - - - <_> - 10 4 3 1 -1. - <_> - 11 4 1 1 3. - 0 - 1.4692340300825890e-005 - -0.0971663072705269 - 0.0586754009127617 - <_> - - <_> - - - - <_> - 9 7 3 2 -1. - <_> - 9 8 3 1 2. - 0 - 8.1570359179750085e-004 - -0.0527401193976402 - 0.0848385319113731 - <_> - - <_> - - - - <_> - 11 6 2 3 -1. - <_> - 11 7 2 1 3. - 0 - 8.3234731573611498e-004 - -0.0458317697048187 - 0.0602561496198177 - <_> - - <_> - - - - <_> - 9 4 3 1 -1. - <_> - 10 4 1 1 3. - 0 - -1.8306729616597295e-003 - -0.2721442878246307 - 0.0186648108065128 - <_> - - <_> - - - - <_> - 12 7 2 2 -1. - <_> - 13 7 1 1 2. - <_> - 12 8 1 1 2. - 0 - 1.6016690060496330e-003 - -0.0239818897098303 - 0.1574192047119141 - <_> - - <_> - - - - <_> - 9 5 3 6 -1. - <_> - 9 8 3 3 2. - 0 - 1.5611300477758050e-003 - 0.0490818992257118 - -0.0934773907065392 - <_> - - <_> - - - - <_> - 10 4 8 2 -1. - <_> - 10 4 4 2 2. - 0 - -5.3921141661703587e-003 - 0.0872934237122536 - -0.0399561896920204 - <_> - - <_> - - - - <_> - 7 12 4 2 -1. - <_> - 9 12 2 2 2. - 0 - 1.6652110498398542e-003 - -0.0511854700744152 - 0.0776330605149269 - <_> - - <_> - - - - <_> - 14 14 1 2 -1. - <_> - 14 14 1 1 2. - 1 - -1.2331049656495452e-003 - -0.0742883682250977 - 0.0231933705508709 - <_> - - <_> - - - - <_> - 10 13 2 4 -1. - <_> - 10 15 2 2 2. - 0 - 5.6793959811329842e-004 - -0.0667561218142509 - 0.0828810334205627 - <_> - - <_> - - - - <_> - 14 14 1 2 -1. - <_> - 14 14 1 1 2. - 1 - 1.5132910339161754e-003 - 0.0200817007571459 - -0.0765797197818756 - <_> - - <_> - - - - <_> - 8 14 2 1 -1. - <_> - 8 14 1 1 2. - 1 - -1.0698379483073950e-003 - -0.1322969943284988 - 0.0421966612339020 - <_> - - <_> - - - - <_> - 13 13 3 3 -1. - <_> - 14 14 1 1 9. - 0 - -0.0173697192221880 - 0.2793881893157959 - -0.0150342304259539 - <_> - - <_> - - - - <_> - 8 5 4 8 -1. - <_> - 8 7 4 4 2. - 0 - -9.2626689001917839e-003 - -0.2275322973728180 - 0.0191799793392420 - <_> - - <_> - - - - <_> - 13 13 3 3 -1. - <_> - 14 14 1 1 9. - 0 - 0.0184820108115673 - -0.0149244302883744 - 0.3127726018428803 - <_> - - <_> - - - - <_> - 6 13 3 3 -1. - <_> - 7 14 1 1 9. - 0 - -0.0149985896423459 - 0.2619952857494354 - -0.0153770204633474 - <_> - - <_> - - - - <_> - 17 3 2 2 -1. - <_> - 18 3 1 1 2. - <_> - 17 4 1 1 2. - 0 - 6.5004371572285891e-004 - 0.0245071295648813 - -0.1683053970336914 - <_> - - <_> - - - - <_> - 5 10 9 3 -1. - <_> - 5 11 9 1 3. - 0 - -0.0251953192055225 - -0.5932958722114563 - 6.0378611087799072e-003 - <_> - - <_> - - - - <_> - 10 4 4 4 -1. - <_> - 10 5 4 2 2. - 0 - 8.1507470458745956e-003 - -0.0157750491052866 - 0.1255595982074738 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 8 6 1 1 3. - 0 - 4.5397952198982239e-003 - 7.2475941851735115e-003 - -0.5612310767173767 - <_> - - <_> - - - - <_> - 12 6 2 2 -1. - <_> - 13 6 1 1 2. - <_> - 12 7 1 1 2. - 0 - 2.8840870072599500e-005 - -0.0650302171707153 - 0.0556433796882629 - <_> - - <_> - - - - <_> - 3 0 16 20 -1. - <_> - 7 0 8 20 2. - 0 - -0.4339280128479004 - -0.5763419866561890 - 7.1343099698424339e-003 - <_> - - <_> - - - - <_> - 8 6 9 3 -1. - <_> - 8 7 9 1 3. - 0 - -2.1952809765934944e-003 - 0.0458067283034325 - -0.0213124807924032 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - -1.1394290486350656e-003 - 0.1423736065626144 - -0.0259463693946600 - <_> - - <_> - - - - <_> - 13 5 1 3 -1. - <_> - 13 6 1 1 3. - 0 - 3.0147060751914978e-003 - 0.0173126198351383 - -0.3825038969516754 - <_> - - <_> - - - - <_> - 5 3 2 2 -1. - <_> - 5 3 1 1 2. - <_> - 6 4 1 1 2. - 0 - 1.5648039698135108e-004 - 0.0397671312093735 - -0.0997032076120377 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - 1.0532010346651077e-003 - -0.0156485699117184 - 0.0976454913616180 - <_> - - <_> - - - - <_> - 7 3 4 4 -1. - <_> - 7 3 2 2 2. - <_> - 9 5 2 2 2. - 0 - -7.9741291701793671e-003 - 0.1854470968246460 - -0.0220986194908619 - <_> - - <_> - - - - <_> - 17 3 2 2 -1. - <_> - 18 3 1 1 2. - <_> - 17 4 1 1 2. - 0 - -4.7134719789028168e-003 - -0.9161971211433411 - 3.6266651004552841e-003 - <_> - - <_> - - - - <_> - 8 4 3 4 -1. - <_> - 8 5 3 2 2. - 0 - 0.0149994604289532 - -9.6984812989830971e-003 - 0.5032694935798645 - <_> - - <_> - - - - <_> - 17 3 2 2 -1. - <_> - 18 3 1 1 2. - <_> - 17 4 1 1 2. - 0 - 2.7833459898829460e-003 - 4.8701078630983829e-003 - -0.2608759999275208 - <_> - - <_> - - - - <_> - 3 3 2 2 -1. - <_> - 3 3 1 1 2. - <_> - 4 4 1 1 2. - 0 - 2.1982809994369745e-004 - 0.0376429483294487 - -0.1163849011063576 - <_> - - <_> - - - - <_> - 14 2 2 2 -1. - <_> - 15 2 1 1 2. - <_> - 14 3 1 1 2. - 0 - -5.5281631648540497e-004 - 0.0536623112857342 - -0.0184577107429504 - <_> - - <_> - - - - <_> - 6 2 2 2 -1. - <_> - 6 2 1 1 2. - <_> - 7 3 1 1 2. - 0 - 8.1757438601925969e-004 - -0.0303962007164955 - 0.1433943063020706 - <_> - - <_> - - - - <_> - 14 0 7 3 -1. - <_> - 13 1 7 1 3. - 1 - -0.0578770115971565 - -0.5625041723251343 - 3.0934759415686131e-003 - <_> - - <_> - - - - <_> - 8 0 3 7 -1. - <_> - 9 1 1 7 3. - 1 - -0.0449834093451500 - -0.8433150053024292 - 4.5743319205939770e-003 - <_> - - <_> - - - - <_> - 13 5 1 3 -1. - <_> - 13 6 1 1 3. - 0 - -1.6125569818541408e-003 - -0.1645680069923401 - 0.0255093593150377 - <_> - - <_> - - - - <_> - 2 7 6 9 -1. - <_> - 2 10 6 3 3. - 0 - 7.2911148890852928e-003 - -0.0470563210546970 - 0.0808353871107101 - <_> - - <_> - - - - <_> - 12 1 2 12 -1. - <_> - 13 1 1 6 2. - <_> - 12 7 1 6 2. - 0 - 1.7726710066199303e-003 - 0.0379351601004601 - -0.0669366866350174 - <_> - - <_> - - - - <_> - 8 1 2 12 -1. - <_> - 8 1 1 6 2. - <_> - 9 7 1 6 2. - 0 - -8.0677121877670288e-003 - -0.1903111934661865 - 0.0247771702706814 - <_> - - <_> - - - - <_> - 13 14 3 1 -1. - <_> - 14 14 1 1 3. - 0 - -7.9460779670625925e-004 - 0.0866639465093613 - -0.0353981591761112 - <_> - - <_> - - - - <_> - 3 8 3 2 -1. - <_> - 3 9 3 1 2. - 0 - -1.4300229850050528e-005 - 0.0604873001575470 - -0.0655588135123253 - <_> - - <_> - - - - <_> - 13 14 3 1 -1. - <_> - 14 14 1 1 3. - 0 - 2.0962581038475037e-003 - -0.0201923307031393 - 0.1314775943756104 - <_> - - <_> - - - - <_> - 5 9 2 1 -1. - <_> - 6 9 1 1 2. - 0 - 5.0030398415401578e-004 - 0.0347235910594463 - -0.1132232993841171 - <_> - - <_> - - - - <_> - 18 2 3 1 -1. - <_> - 19 3 1 1 3. - 1 - 2.0867818966507912e-003 - -0.0138740297406912 - 0.0689213871955872 - <_> - - <_> - - - - <_> - 6 11 3 1 -1. - <_> - 7 11 1 1 3. - 0 - 3.3986899070441723e-003 - -0.0189866703003645 - 0.2040019035339356 - <_> - - <_> - - - - <_> - 14 9 3 1 -1. - <_> - 15 9 1 1 3. - 0 - 0.0112534100189805 - 2.2273620124906301e-003 - -0.9225565195083618 - <_> - - <_> - - - - <_> - 5 9 3 1 -1. - <_> - 6 9 1 1 3. - 0 - -1.2344319839030504e-003 - -0.1252402961254120 - 0.0313392691314220 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - 1.6126739792525768e-003 - -0.0156651698052883 - 0.0848377197980881 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - -5.2141858031973243e-004 - 0.0954792872071266 - -0.0478741303086281 - <_> - - <_> - - - - <_> - 13 5 1 2 -1. - <_> - 13 6 1 1 2. - 0 - 3.8721379823982716e-003 - 5.4993298836052418e-003 - -0.4460256099700928 - <_> - - <_> - - - - <_> - 0 5 21 6 -1. - <_> - 7 7 7 2 9. - 0 - 0.1761834025382996 - -0.0413412414491177 - 0.1000951975584030 - <_> - - <_> - - - - <_> - 11 4 6 1 -1. - <_> - 11 4 3 1 2. - 0 - -1.0830520186573267e-003 - 0.0686402469873428 - -0.0441312007606030 - <_> - - <_> - - - - <_> - 8 8 2 3 -1. - <_> - 8 9 2 1 3. - 0 - 1.0719549609348178e-003 - 0.0391411893069744 - -0.1048939004540443 - <_> - - <_> - - - - <_> - 9 9 4 2 -1. - <_> - 11 9 2 1 2. - <_> - 9 10 2 1 2. - 0 - 9.4975891988724470e-004 - 0.0360733717679977 - -0.1223741024732590 - <_> - - <_> - - - - <_> - 5 5 8 2 -1. - <_> - 5 5 4 1 2. - <_> - 9 6 4 1 2. - 0 - -9.6825882792472839e-003 - 0.2174330949783325 - -0.0195038095116615 - <_> - - <_> - - - - <_> - 11 5 2 3 -1. - <_> - 11 6 2 1 3. - 0 - 2.9981420375406742e-003 - -0.0119319399818778 - 0.0940617173910141 - <_> - - <_> - - - - <_> - 8 7 6 4 -1. - <_> - 8 7 3 2 2. - <_> - 11 9 3 2 2. - 0 - 3.3787859138101339e-003 - 0.0380039699375629 - -0.1136076003313065 - <_> - - <_> - - - - <_> - 10 5 2 6 -1. - <_> - 11 5 1 3 2. - <_> - 10 8 1 3 2. - 0 - -2.6151719503104687e-003 - 0.1547725945711136 - -0.0295186396688223 - <_> - - <_> - - - - <_> - 8 5 1 2 -1. - <_> - 8 6 1 1 2. - 0 - -1.1613050010055304e-003 - -0.2024853974580765 - 0.0200971402227879 - <_> - - <_> - - - - <_> - 13 3 2 3 -1. - <_> - 13 4 2 1 3. - 0 - -1.6141240485012531e-003 - -0.1093695014715195 - 0.0291487406939268 - <_> - - <_> - - - - <_> - 4 2 1 3 -1. - <_> - 3 3 1 1 3. - 1 - -2.1682349033653736e-003 - 0.1338678002357483 - -0.0298869907855988 - <_> - - <_> - - - - <_> - 8 11 7 3 -1. - <_> - 8 12 7 1 3. - 0 - 0.0211318992078304 - 4.5307017862796783e-003 - -0.5361217856407166 - <_> - - <_> - - - - <_> - 2 1 4 2 -1. - <_> - 2 1 2 1 2. - <_> - 4 2 2 1 2. - 0 - 1.6037460591178387e-004 - 0.0435970984399319 - -0.0841111466288567 - <_> - - <_> - - - - <_> - 14 5 3 1 -1. - <_> - 15 5 1 1 3. - 0 - -9.3009177362546325e-004 - 0.0957190915942192 - -0.0357180312275887 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 1 2 2. - 1 - -8.7824072688817978e-003 - -0.3611846864223480 - 0.0106297098100185 - <_> - - <_> - - - - <_> - 18 3 3 2 -1. - <_> - 19 3 1 2 3. - 0 - 5.3067589178681374e-003 - -8.9432783424854279e-003 - 0.1580702960491180 - <_> - - <_> - - - - <_> - 1 3 3 2 -1. - <_> - 2 3 1 2 3. - 0 - 4.6785878948867321e-003 - -0.0160609409213066 - 0.2492123991250992 - <_> - - <_> - - - - <_> - 14 10 8 8 -1. - <_> - 14 12 8 4 2. - 0 - 6.7471889778971672e-003 - -0.0329832397401333 - 0.0617379285395145 - <_> - - <_> - - - - <_> - 0 18 22 2 -1. - <_> - 0 18 11 1 2. - <_> - 11 19 11 1 2. - 0 - -4.1250120848417282e-003 - -0.1327160000801086 - 0.0308331903070211 - <_> - - <_> - - - - <_> - 15 10 2 1 -1. - <_> - 15 10 1 1 2. - 0 - 6.8065262166783214e-004 - 0.0255452506244183 - -0.1034165993332863 - <_> - - <_> - - - - <_> - 5 5 3 1 -1. - <_> - 6 5 1 1 3. - 0 - 2.1838350221514702e-003 - -0.0253765508532524 - 0.1528404057025909 - <_> - - <_> - - - - <_> - 1 5 21 12 -1. - <_> - 8 9 7 4 9. - 0 - -0.0820077806711197 - -0.0685298889875412 - 0.0381782203912735 - <_> - - <_> - - - - <_> - 5 10 2 1 -1. - <_> - 6 10 1 1 2. - 0 - 5.4427138529717922e-003 - 4.2902021668851376e-003 - -0.8735119104385376 - <_> - - <_> - - - - <_> - 13 3 2 3 -1. - <_> - 13 4 2 1 3. - 0 - 5.6404271163046360e-004 - 0.0354451909661293 - -0.0854481533169746 - <_> - - <_> - - - - <_> - 7 3 2 3 -1. - <_> - 7 4 2 1 3. - 0 - -4.0039150044322014e-003 - -0.2254444062709808 - 0.0166589505970478 - <_> - - <_> - - - - <_> - 13 8 3 1 -1. - <_> - 14 8 1 1 3. - 0 - 7.1750470669940114e-004 - -0.0350139997899532 - 0.0857319533824921 - <_> - - <_> - - - - <_> - 7 1 5 4 -1. - <_> - 7 2 5 2 2. - 0 - 2.1980039309710264e-003 - -0.0353953503072262 - 0.1017671972513199 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 10 2 2 2 2. - 0 - -6.0970097547397017e-004 - 0.0600248090922832 - -0.0846930667757988 - <_> - - <_> - - - - <_> - 9 2 4 3 -1. - <_> - 9 3 4 1 3. - 0 - 5.7354441378265619e-004 - -0.0555397011339664 - 0.0817333683371544 - <_> - - <_> - - - - <_> - 8 2 6 3 -1. - <_> - 10 3 2 1 9. - 0 - 0.0110205896198750 - 0.0449615791440010 - -0.1010605990886688 - <_> - - <_> - - - - <_> - 0 0 16 4 -1. - <_> - 0 0 8 2 2. - <_> - 8 2 8 2 2. - 0 - 3.2966160215437412e-003 - -0.0513890907168388 - 0.0813892632722855 - <_> - - <_> - - - - <_> - 11 3 6 2 -1. - <_> - 11 3 3 2 2. - 0 - -2.0174959208816290e-003 - 0.0405284613370895 - -0.0323421508073807 - <_> - - <_> - - - - <_> - 7 0 1 2 -1. - <_> - 7 1 1 1 2. - 0 - -4.8243958735838532e-004 - -0.1175279989838600 - 0.0343294702470303 - <_> - - <_> - - - - <_> - 13 0 3 6 -1. - <_> - 14 2 1 2 9. - 0 - -0.0379818007349968 - 0.2070638984441757 - -9.8644997924566269e-003 - <_> - - <_> - - - - <_> - 6 0 2 4 -1. - <_> - 6 0 1 2 2. - <_> - 7 2 1 2 2. - 0 - -6.9430111907422543e-003 - 0.3368993997573853 - -0.0118078701198101 - <_> - - <_> - - - - <_> - 13 9 1 3 -1. - <_> - 13 10 1 1 3. - 0 - -4.8804618418216705e-003 - -0.4148504137992859 - 8.2202637568116188e-003 - <_> - - <_> - - - - <_> - 2 2 2 2 -1. - <_> - 2 3 2 1 2. - 0 - 1.4070210454519838e-005 - -0.0563984811306000 - 0.0685126781463623 - <_> - - <_> - - - - <_> - 9 2 4 8 -1. - <_> - 11 2 2 4 2. - <_> - 9 6 2 4 2. - 0 - -0.0276320800185204 - -0.5707557201385498 - 6.3934479840099812e-003 - <_> - - <_> - - - - <_> - 8 9 1 3 -1. - <_> - 8 10 1 1 3. - 0 - 6.5936171449720860e-004 - 0.0321178883314133 - -0.1134731024503708 - <_> - - <_> - - - - <_> - 13 9 7 4 -1. - <_> - 12 10 7 2 2. - 1 - 0.0504420511424541 - 3.5058089997619390e-003 - -0.2430704981088638 - <_> - - <_> - - - - <_> - 9 9 4 7 -1. - <_> - 10 10 2 7 2. - 1 - -3.5251879598945379e-003 - 0.0735160112380981 - -0.0504340007901192 - <_> - - <_> - - - - <_> - 11 10 3 6 -1. - <_> - 9 12 3 2 3. - 1 - -9.8136421293020248e-003 - 0.0669508427381516 - -0.0371149703860283 - <_> - - <_> - - - - <_> - 8 8 2 12 -1. - <_> - 8 11 2 6 2. - 0 - 7.7288062311708927e-003 - -0.0334622710943222 - 0.1444507986307144 - <_> - - <_> - - - - <_> - 11 14 1 4 -1. - <_> - 11 14 1 2 2. - 1 - -6.5115757752209902e-004 - 0.0496588386595249 - -0.0333317108452320 - <_> - - <_> - - - - <_> - 7 18 2 1 -1. - <_> - 8 18 1 1 2. - 0 - -7.3544832412153482e-004 - -0.1664627939462662 - 0.0306070595979691 - -0.7988746166229248 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 3 2 1 -1. - <_> - 9 3 1 1 2. - 1 - -6.5500719938427210e-004 - 0.1061194017529488 - -0.1811545044183731 - <_> - - <_> - - - - <_> - 13 0 2 4 -1. - <_> - 14 0 1 2 2. - <_> - 13 2 1 2 2. - 0 - -1.9778949208557606e-003 - 0.1350383013486862 - -0.0468807592988014 - <_> - - <_> - - - - <_> - 9 6 1 2 -1. - <_> - 9 7 1 1 2. - 0 - 5.9389008674770594e-004 - -0.0846482217311859 - 0.1240442991256714 - <_> - - <_> - - - - <_> - 12 7 1 2 -1. - <_> - 12 8 1 1 2. - 0 - 1.0614610509946942e-003 - -0.0595604591071606 - 0.1825948059558868 - <_> - - <_> - - - - <_> - 5 2 9 12 -1. - <_> - 5 8 9 6 2. - 0 - 0.2760679125785828 - 6.2563497340306640e-004 - -2.1944240234375000e+004 - <_> - - <_> - - - - <_> - 10 4 2 8 -1. - <_> - 10 8 2 4 2. - 0 - -2.9046900453977287e-004 - 0.0741436332464218 - -0.1194837987422943 - <_> - - <_> - - - - <_> - 7 0 4 3 -1. - <_> - 8 1 2 3 2. - 1 - 0.0119331199675798 - -0.0134605001658201 - 0.2752451002597809 - <_> - - <_> - - - - <_> - 15 3 4 4 -1. - <_> - 15 3 4 2 2. - 1 - 0.1009671986103058 - -5.6561990641057491e-003 - -24.9968700408935550 - <_> - - <_> - - - - <_> - 11 0 5 2 -1. - <_> - 11 0 5 1 2. - 1 - -0.0151560902595520 - 0.1405642926692963 - -0.0448417700827122 - <_> - - <_> - - - - <_> - 9 7 4 2 -1. - <_> - 11 7 2 1 2. - <_> - 9 8 2 1 2. - 0 - -1.5076439594849944e-003 - -0.1762800961732864 - 0.0381936393678188 - <_> - - <_> - - - - <_> - 4 4 8 1 -1. - <_> - 8 4 4 1 2. - 0 - -1.9093969604000449e-003 - 0.1120752990245819 - -0.0488060787320137 - <_> - - <_> - - - - <_> - 16 3 1 2 -1. - <_> - 16 4 1 1 2. - 0 - 3.5581018892116845e-004 - 0.0503055192530155 - -0.1202839985489845 - <_> - - <_> - - - - <_> - 7 3 3 6 -1. - <_> - 8 3 1 6 3. - 0 - 1.2928070500493050e-003 - -0.0675174593925476 - 0.0856755673885345 - <_> - - <_> - - - - <_> - 10 7 4 1 -1. - <_> - 10 7 2 1 2. - 0 - -1.1862709652632475e-003 - -0.0717553496360779 - 0.0290500391274691 - <_> - - <_> - - - - <_> - 8 7 4 1 -1. - <_> - 10 7 2 1 2. - 0 - 2.9675700716325082e-005 - -0.0975504964590073 - 0.0552631095051765 - <_> - - <_> - - - - <_> - 9 7 4 1 -1. - <_> - 10 7 2 1 2. - 0 - -5.1812059246003628e-004 - 0.1301476955413818 - -0.0401467904448509 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - -2.4787770234979689e-004 - -0.1299761980772018 - 0.0451603904366493 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - 5.0375860882923007e-004 - 0.0252434890717268 - -0.1117812991142273 - <_> - - <_> - - - - <_> - 8 7 2 2 -1. - <_> - 8 7 1 1 2. - <_> - 9 8 1 1 2. - 0 - 6.3750747358426452e-004 - -0.0518446303904057 - 0.1138076037168503 - <_> - - <_> - - - - <_> - 16 6 2 2 -1. - <_> - 17 6 1 1 2. - <_> - 16 7 1 1 2. - 0 - -5.5010168580338359e-004 - -0.1510933041572571 - 0.0300217308104038 - <_> - - <_> - - - - <_> - 4 6 2 2 -1. - <_> - 4 6 1 1 2. - <_> - 5 7 1 1 2. - 0 - 2.0001670054625720e-004 - 0.0466035604476929 - -0.1211061030626297 - <_> - - <_> - - - - <_> - 13 7 3 3 -1. - <_> - 14 8 1 1 9. - 0 - -0.0128485802561045 - 0.1440055966377258 - -0.0245805904269218 - <_> - - <_> - - - - <_> - 6 7 3 3 -1. - <_> - 7 8 1 1 9. - 0 - 8.7248822674155235e-003 - -0.0300275795161724 - 0.1880919933319092 - <_> - - <_> - - - - <_> - 11 6 1 6 -1. - <_> - 11 8 1 2 3. - 0 - 9.0796118602156639e-003 - 8.9979087933897972e-003 - -0.2175593972206116 - <_> - - <_> - - - - <_> - 9 6 4 4 -1. - <_> - 9 6 2 2 2. - <_> - 11 8 2 2 2. - 0 - -6.0907658189535141e-003 - -0.2417660951614380 - 0.0208483003079891 - <_> - - <_> - - - - <_> - 13 0 3 3 -1. - <_> - 12 1 3 1 3. - 1 - -0.0206026900559664 - 0.1498509943485260 - -0.0224436894059181 - <_> - - <_> - - - - <_> - 8 1 5 4 -1. - <_> - 7 2 5 2 2. - 1 - 2.1011219359934330e-004 - 0.0584006309509277 - -0.0825078189373016 - <_> - - <_> - - - - <_> - 9 6 4 10 -1. - <_> - 9 6 2 10 2. - 0 - 7.6200407929718494e-003 - -0.0466057881712914 - 0.1116458997130394 - <_> - - <_> - - - - <_> - 9 3 3 4 -1. - <_> - 10 3 1 4 3. - 0 - 0.0130286803469062 - 0.0113679701462388 - -0.4487810134887695 - <_> - - <_> - - - - <_> - 12 7 1 3 -1. - <_> - 12 8 1 1 3. - 0 - 3.9239479228854179e-003 - -0.0173839498311281 - 0.1823168992996216 - <_> - - <_> - - - - <_> - 9 7 1 3 -1. - <_> - 9 8 1 1 3. - 0 - -1.3659669784829021e-003 - 0.1715372055768967 - -0.0288989692926407 - <_> - - <_> - - - - <_> - 11 8 2 2 -1. - <_> - 11 9 2 1 2. - 0 - -1.4295619621407241e-005 - 0.0364725701510906 - -0.0571279115974903 - <_> - - <_> - - - - <_> - 9 6 4 6 -1. - <_> - 9 6 2 3 2. - <_> - 11 9 2 3 2. - 0 - -1.4978270046412945e-003 - -0.1058461964130402 - 0.0529035888612270 - <_> - - <_> - - - - <_> - 11 7 2 2 -1. - <_> - 12 7 1 1 2. - <_> - 11 8 1 1 2. - 0 - 7.7579449862241745e-004 - -0.0320085287094116 - 0.1633010059595108 - <_> - - <_> - - - - <_> - 9 7 2 2 -1. - <_> - 9 7 1 1 2. - <_> - 10 8 1 1 2. - 0 - -5.3715571993961930e-004 - 0.1031259000301361 - -0.0513780489563942 - <_> - - <_> - - - - <_> - 11 7 1 4 -1. - <_> - 11 9 1 2 2. - 0 - -1.8734990153461695e-003 - -0.1009460017085075 - 0.0316213704645634 - <_> - - <_> - - - - <_> - 10 5 4 1 -1. - <_> - 11 6 2 1 2. - 1 - -2.7301919180899858e-003 - -0.1888266056776047 - 0.0254456400871277 - <_> - - <_> - - - - <_> - 12 1 4 7 -1. - <_> - 13 2 2 7 2. - 1 - -0.0275199897587299 - 0.2020739018917084 - -8.7642138823866844e-003 - <_> - - <_> - - - - <_> - 10 1 7 4 -1. - <_> - 9 2 7 2 2. - 1 - -5.7156491093337536e-003 - -0.1473066061735153 - 0.0386532284319401 - <_> - - <_> - - - - <_> - 10 2 2 4 -1. - <_> - 10 4 2 2 2. - 0 - -3.8841580972075462e-003 - 0.1932404041290283 - -0.0331581197679043 - <_> - - <_> - - - - <_> - 11 0 3 1 -1. - <_> - 12 1 1 1 3. - 1 - -2.9681410524062812e-004 - 0.0709782168269157 - -0.0834406018257141 - <_> - - <_> - - - - <_> - 9 5 6 2 -1. - <_> - 12 5 3 1 2. - <_> - 9 6 3 1 2. - 0 - -7.3247430846095085e-003 - 0.0992897674441338 - -7.1985991671681404e-003 - <_> - - <_> - - - - <_> - 8 4 6 2 -1. - <_> - 8 4 3 1 2. - <_> - 11 5 3 1 2. - 0 - 4.0174159221351147e-003 - 0.0233492404222488 - -0.2059562951326370 - <_> - - <_> - - - - <_> - 9 5 6 2 -1. - <_> - 12 5 3 1 2. - <_> - 9 6 3 1 2. - 0 - 3.0161300674080849e-003 - -0.0118568502366543 - 0.0750350430607796 - <_> - - <_> - - - - <_> - 7 5 6 2 -1. - <_> - 7 5 3 1 2. - <_> - 10 6 3 1 2. - 0 - -6.0926907462999225e-004 - 0.0669415667653084 - -0.0740885064005852 - <_> - - <_> - - - - <_> - 12 4 4 3 -1. - <_> - 11 5 4 1 3. - 1 - -2.8288490138947964e-003 - -0.0843469500541687 - 0.0206413902342319 - <_> - - <_> - - - - <_> - 10 4 3 4 -1. - <_> - 11 5 1 4 3. - 1 - 0.0159457102417946 - 0.0188282094895840 - -0.2590250074863434 - <_> - - <_> - - - - <_> - 10 11 4 1 -1. - <_> - 11 11 2 1 2. - 0 - -6.2250817427411675e-004 - 0.0835376828908920 - -0.0431643985211849 - <_> - - <_> - - - - <_> - 2 3 16 12 -1. - <_> - 2 6 16 6 2. - 0 - 0.0939026027917862 - -0.0288740601390600 - 0.1493096947669983 - <_> - - <_> - - - - <_> - 12 10 7 6 -1. - <_> - 12 13 7 3 2. - 0 - 0.0427350886166096 - -0.0211694203317165 - 0.1816219985485077 - <_> - - <_> - - - - <_> - 5 3 1 2 -1. - <_> - 5 4 1 1 2. - 0 - 2.3074240016285330e-004 - 0.0373335592448711 - -0.1176737993955612 - <_> - - <_> - - - - <_> - 20 4 2 2 -1. - <_> - 20 4 1 2 2. - 0 - 1.4175169781083241e-005 - -0.0377607010304928 - 0.0416849814355373 - <_> - - <_> - - - - <_> - 0 3 8 2 -1. - <_> - 0 3 4 1 2. - <_> - 4 4 4 1 2. - 0 - -4.4660810381174088e-003 - -0.2030844986438751 - 0.0211158804595470 - <_> - - <_> - - - - <_> - 11 11 1 6 -1. - <_> - 11 11 1 3 2. - 1 - 1.2269329745322466e-003 - -0.0324960015714169 - 0.0327943488955498 - <_> - - <_> - - - - <_> - 0 13 6 7 -1. - <_> - 3 13 3 7 2. - 0 - 0.0399166010320187 - -0.0256089493632317 - 0.1946955025196075 - <_> - - <_> - - - - <_> - 16 14 6 6 -1. - <_> - 16 14 3 6 2. - 0 - -7.3776850476861000e-003 - 0.0809244066476822 - -0.0429324097931385 - <_> - - <_> - - - - <_> - 10 9 1 4 -1. - <_> - 10 11 1 2 2. - 0 - 2.3230710066854954e-003 - 0.0200827494263649 - -0.2216991931200028 - <_> - - <_> - - - - <_> - 10 10 2 2 -1. - <_> - 10 11 2 1 2. - 0 - 5.5887812050059438e-004 - -0.0493217706680298 - 0.1354908943176270 - <_> - - <_> - - - - <_> - 0 4 2 2 -1. - <_> - 1 4 1 2 2. - 0 - 1.4422759704757482e-005 - -0.0624629706144333 - 0.0701368004083633 - <_> - - <_> - - - - <_> - 18 5 4 3 -1. - <_> - 18 5 2 3 2. - 0 - -9.0111764147877693e-003 - -0.1179082989692688 - 0.0137641001492739 - <_> - - <_> - - - - <_> - 0 14 4 5 -1. - <_> - 2 14 2 5 2. - 0 - -2.5969429407268763e-003 - 0.0853114277124405 - -0.0537042990326881 - <_> - - <_> - - - - <_> - 17 9 2 8 -1. - <_> - 17 13 2 4 2. - 0 - 4.2405598796904087e-003 - -0.0346560589969158 - 0.0761225372552872 - <_> - - <_> - - - - <_> - 4 16 3 4 -1. - <_> - 4 18 3 2 2. - 0 - -2.8519309125840664e-004 - 0.0671232864260674 - -0.0716202110052109 - <_> - - <_> - - - - <_> - 6 18 10 2 -1. - <_> - 11 18 5 1 2. - <_> - 6 19 5 1 2. - 0 - -9.1536442050710320e-004 - -0.1028669029474258 - 0.0462755188345909 - <_> - - <_> - - - - <_> - 0 5 4 3 -1. - <_> - 2 5 2 3 2. - 0 - 8.9915059506893158e-003 - 0.0210477393120527 - -0.2034562975168228 - <_> - - <_> - - - - <_> - 17 14 4 5 -1. - <_> - 18 14 2 5 2. - 0 - -2.3468779399991035e-003 - 0.0618367083370686 - -0.0277948807924986 - <_> - - <_> - - - - <_> - 1 14 4 5 -1. - <_> - 2 14 2 5 2. - 0 - 7.8483502147719264e-004 - -0.0567251294851303 - 0.0826262310147285 - <_> - - <_> - - - - <_> - 17 18 2 2 -1. - <_> - 17 19 2 1 2. - 0 - -4.2987228371202946e-003 - -0.4648546874523163 - 0.0121365897357464 - <_> - - <_> - - - - <_> - 10 9 1 3 -1. - <_> - 10 10 1 1 3. - 0 - 3.7865751073695719e-004 - -0.0578947104513645 - 0.0789720490574837 - <_> - - <_> - - - - <_> - 14 17 2 3 -1. - <_> - 14 18 2 1 3. - 0 - -1.8922489834949374e-004 - -0.0487782396376133 - 0.0284049008041620 - <_> - - <_> - - - - <_> - 0 14 6 6 -1. - <_> - 0 14 3 3 2. - <_> - 3 17 3 3 2. - 0 - 1.4289650134742260e-003 - -0.0546189397573471 - 0.0746330395340919 - <_> - - <_> - - - - <_> - 15 18 1 2 -1. - <_> - 15 19 1 1 2. - 0 - -6.3519232207909226e-004 - -0.1223511025309563 - 0.0225364901125431 - <_> - - <_> - - - - <_> - 8 6 5 3 -1. - <_> - 8 7 5 1 3. - 0 - -1.3744450407102704e-003 - 0.0874680429697037 - -0.0462270118296146 - <_> - - <_> - - - - <_> - 11 6 2 3 -1. - <_> - 11 7 2 1 3. - 0 - 8.3811202785000205e-004 - -0.0530811585485935 - 0.0662980303168297 - <_> - - <_> - - - - <_> - 5 10 3 3 -1. - <_> - 4 11 3 1 3. - 1 - -4.7142491675913334e-003 - -0.1442818045616150 - 0.0318518392741680 - <_> - - <_> - - - - <_> - 0 12 22 4 -1. - <_> - 11 12 11 2 2. - <_> - 0 14 11 2 2. - 0 - 3.5760139580816031e-003 - -0.0545585006475449 - 0.0779832601547241 - <_> - - <_> - - - - <_> - 9 7 7 6 -1. - <_> - 7 9 7 2 3. - 1 - 0.0139589598402381 - -0.0432134084403515 - 0.1022794991731644 - <_> - - <_> - - - - <_> - 11 15 2 2 -1. - <_> - 11 16 2 1 2. - 0 - 1.4338699656946119e-005 - -0.0567581392824650 - 0.0595479495823383 - <_> - - <_> - - - - <_> - 8 6 1 4 -1. - <_> - 8 7 1 2 2. - 0 - -1.0628110030665994e-003 - -0.1648938953876495 - 0.0272618606686592 - <_> - - <_> - - - - <_> - 11 12 3 1 -1. - <_> - 12 13 1 1 3. - 1 - 0.0100515102967620 - -9.7075058147311211e-003 - 0.1943812966346741 - <_> - - <_> - - - - <_> - 11 12 1 3 -1. - <_> - 10 13 1 1 3. - 1 - -1.1699779424816370e-003 - 0.0867023766040802 - -0.0516723208129406 - <_> - - <_> - - - - <_> - 11 10 5 6 -1. - <_> - 11 12 5 2 3. - 0 - -0.0339622199535370 - -0.2388944029808044 - 9.8034106194972992e-003 - <_> - - <_> - - - - <_> - 8 14 3 1 -1. - <_> - 9 14 1 1 3. - 0 - 3.5306809004396200e-003 - -0.0204341206699610 - 0.2075832039117813 - <_> - - <_> - - - - <_> - 5 14 14 3 -1. - <_> - 5 15 14 1 3. - 0 - -7.7752848155796528e-003 - -0.1538358032703400 - 0.0246210098266602 - <_> - - <_> - - - - <_> - 6 14 4 3 -1. - <_> - 6 15 4 1 3. - 0 - 1.8700800137594342e-003 - 0.0361345596611500 - -0.1363855004310608 - <_> - - <_> - - - - <_> - 14 10 1 3 -1. - <_> - 14 11 1 1 3. - 0 - 2.8848159126937389e-003 - -0.0189146604388952 - 0.1857028007507324 - <_> - - <_> - - - - <_> - 2 5 12 1 -1. - <_> - 5 5 6 1 2. - 0 - -0.0198612697422504 - 0.3691847026348114 - -0.0116651598364115 - <_> - - <_> - - - - <_> - 10 1 2 4 -1. - <_> - 11 1 1 2 2. - <_> - 10 3 1 2 2. - 0 - -2.7482518926262856e-003 - -0.2102839052677155 - 0.0238939598202705 - <_> - - <_> - - - - <_> - 7 10 1 3 -1. - <_> - 7 11 1 1 3. - 0 - -2.7001290582120419e-003 - 0.2078628987073898 - -0.0217987205833197 - <_> - - <_> - - - - <_> - 6 7 10 6 -1. - <_> - 11 7 5 3 2. - <_> - 6 10 5 3 2. - 0 - -4.5068548060953617e-003 - -0.0867026001214981 - 0.0486029088497162 - <_> - - <_> - - - - <_> - 9 0 4 6 -1. - <_> - 10 1 2 6 2. - 1 - 0.0249514896422625 - -0.0155523000285029 - 0.2778587937355042 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - 1.2935699487570673e-004 - -0.0738889425992966 - 0.0484027899801731 - <_> - - <_> - - - - <_> - 8 4 5 4 -1. - <_> - 8 5 5 2 2. - 0 - 9.3646477907896042e-003 - -0.0252819396555424 - 0.1837060004472733 - <_> - - <_> - - - - <_> - 8 2 10 9 -1. - <_> - 8 5 10 3 3. - 0 - 0.0841518267989159 - 0.0108242696151137 - -0.1955264955759049 - <_> - - <_> - - - - <_> - 7 0 3 4 -1. - <_> - 8 0 1 4 3. - 0 - 0.0112702799960971 - 0.0105616599321365 - -0.3981338143348694 - <_> - - <_> - - - - <_> - 7 9 9 3 -1. - <_> - 7 10 9 1 3. - 0 - -0.0239378605037928 - -0.6086012125015259 - 4.2452588677406311e-003 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 9 7 1 1 3. - 0 - 2.0148959010839462e-003 - -0.0304305199533701 - 0.1325232982635498 - <_> - - <_> - - - - <_> - 11 6 1 6 -1. - <_> - 11 8 1 2 3. - 0 - -9.2081452021375299e-004 - -0.0647878125309944 - 0.0276793893426657 - <_> - - <_> - - - - <_> - 11 7 3 3 -1. - <_> - 12 8 1 3 3. - 1 - 2.4192659184336662e-003 - 0.0470413789153099 - -0.0897191092371941 - <_> - - <_> - - - - <_> - 12 6 4 10 -1. - <_> - 13 7 2 10 2. - 1 - -0.0651864036917686 - -0.5667145848274231 - 2.5166301056742668e-003 - <_> - - <_> - - - - <_> - 10 6 10 4 -1. - <_> - 9 7 10 2 2. - 1 - 0.0285713393241167 - -0.0252014100551605 - 0.1900646984577179 - <_> - - <_> - - - - <_> - 13 5 3 3 -1. - <_> - 13 6 3 1 3. - 0 - -3.3785749692469835e-003 - -0.1272971034049988 - 0.0196698401123285 - <_> - - <_> - - - - <_> - 1 7 3 3 -1. - <_> - 2 8 1 1 9. - 0 - 0.0102531695738435 - -0.0206594392657280 - 0.2029871940612793 - <_> - - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 18 9 1 1 9. - 0 - 4.9304449930787086e-003 - 0.0217374898493290 - -0.1234709993004799 - <_> - - <_> - - - - <_> - 6 5 3 3 -1. - <_> - 6 6 3 1 3. - 0 - 9.6938945353031158e-003 - 6.0204151086509228e-003 - -0.6406397819519043 - <_> - - <_> - - - - <_> - 13 6 3 1 -1. - <_> - 14 7 1 1 3. - 1 - -4.8665871145203710e-004 - 0.0476435497403145 - -0.0284831505268812 - <_> - - <_> - - - - <_> - 9 6 1 3 -1. - <_> - 8 7 1 1 3. - 1 - -2.1001850254833698e-003 - 0.0813888534903526 - -0.0483437292277813 - <_> - - <_> - - - - <_> - 9 6 6 3 -1. - <_> - 11 7 2 1 9. - 0 - 7.1035227738320827e-003 - 0.0486379191279411 - -0.0593680590391159 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 11 6 1 4 2. - 0 - 7.6833309140056372e-004 - -0.0559485815465450 - 0.0903241634368896 - <_> - - <_> - - - - <_> - 11 4 1 9 -1. - <_> - 11 7 1 3 3. - 0 - 3.0236479360610247e-003 - 0.0245931297540665 - -0.0480181016027927 - <_> - - <_> - - - - <_> - 10 4 1 9 -1. - <_> - 10 7 1 3 3. - 0 - -1.5640349593013525e-003 - -0.1417675018310547 - 0.0442735590040684 - <_> - - <_> - - - - <_> - 10 5 2 4 -1. - <_> - 11 5 1 2 2. - <_> - 10 7 1 2 2. - 0 - -4.9588200636208057e-003 - 0.3329944014549255 - -0.0138667998835444 - <_> - - <_> - - - - <_> - 3 0 2 4 -1. - <_> - 3 0 1 2 2. - <_> - 4 2 1 2 2. - 0 - -3.1740468693897128e-004 - -0.0999359115958214 - 0.0412562899291515 - <_> - - <_> - - - - <_> - 12 1 2 2 -1. - <_> - 13 1 1 1 2. - <_> - 12 2 1 1 2. - 0 - -8.0420851008966565e-004 - 0.1063916981220245 - -0.0283729899674654 - <_> - - <_> - - - - <_> - 8 1 2 2 -1. - <_> - 8 1 1 1 2. - <_> - 9 2 1 1 2. - 0 - 1.6408630181103945e-003 - -0.0240303501486778 - 0.1748683005571365 - <_> - - <_> - - - - <_> - 4 0 18 20 -1. - <_> - 4 0 9 20 2. - 0 - -0.6179625988006592 - -0.3570896983146668 - 4.0679760277271271e-003 - <_> - - <_> - - - - <_> - 4 7 9 11 -1. - <_> - 7 7 3 11 3. - 0 - -0.1773506999015808 - -0.6174048781394959 - 6.5281139686703682e-003 - <_> - - <_> - - - - <_> - 10 14 8 1 -1. - <_> - 12 14 4 1 2. - 0 - 9.8318364471197128e-003 - -9.5694959163665771e-003 - 0.0941023677587509 - <_> - - <_> - - - - <_> - 4 14 8 1 -1. - <_> - 6 14 4 1 2. - 0 - -9.9137630313634872e-003 - 0.2084176987409592 - -0.0200388692319393 - <_> - - <_> - - - - <_> - 14 13 3 4 -1. - <_> - 15 13 1 4 3. - 0 - 0.0101390797644854 - 8.6421063169836998e-003 - -0.1647603958845139 - <_> - - <_> - - - - <_> - 0 6 2 2 -1. - <_> - 0 6 1 1 2. - <_> - 1 7 1 1 2. - 0 - -4.7524129040539265e-003 - -0.9319952130317688 - 4.2677428573369980e-003 - <_> - - <_> - - - - <_> - 14 13 3 4 -1. - <_> - 15 13 1 4 3. - 0 - -3.5657559055835009e-003 - -0.0700028166174889 - 0.0135445101186633 - <_> - - <_> - - - - <_> - 9 0 4 4 -1. - <_> - 10 0 2 4 2. - 0 - -7.5818779878318310e-003 - -0.2561743855476379 - 0.0151198003441095 - <_> - - <_> - - - - <_> - 11 2 4 4 -1. - <_> - 13 2 2 2 2. - <_> - 11 4 2 2 2. - 0 - 3.2128070015460253e-003 - -0.0471173897385597 - 0.0422839783132076 - <_> - - <_> - - - - <_> - 8 8 3 2 -1. - <_> - 9 8 1 2 3. - 0 - -1.4448419678956270e-003 - 0.1206997036933899 - -0.0340358689427376 - <_> - - <_> - - - - <_> - 11 7 2 1 -1. - <_> - 11 7 1 1 2. - 1 - 4.3855889089172706e-005 - -0.0337582007050514 - 0.0292513091117144 - <_> - - <_> - - - - <_> - 11 7 1 2 -1. - <_> - 11 7 1 1 2. - 1 - 7.9919979907572269e-004 - 0.0521056614816189 - -0.1043552979826927 - <_> - - <_> - - - - <_> - 12 5 3 9 -1. - <_> - 13 8 1 3 9. - 0 - 0.0166699197143316 - 0.0314983800053597 - -0.0757124572992325 - <_> - - <_> - - - - <_> - 8 9 4 3 -1. - <_> - 10 9 2 3 2. - 0 - 4.4861449860036373e-003 - -0.0601009391248226 - 0.1067992001771927 - <_> - - <_> - - - - <_> - 12 10 1 2 -1. - <_> - 12 10 1 1 2. - 1 - 1.5718489885330200e-003 - 0.0229577608406544 - -0.0519991293549538 - <_> - - <_> - - - - <_> - 9 11 4 4 -1. - <_> - 9 12 4 2 2. - 0 - -1.0987470159307122e-003 - 0.0678085088729858 - -0.0622327402234077 - <_> - - <_> - - - - <_> - 4 0 18 20 -1. - <_> - 4 0 9 20 2. - 0 - 0.3657428920269013 - 8.5034789517521858e-003 - -0.0879447832703590 - <_> - - <_> - - - - <_> - 0 0 18 20 -1. - <_> - 9 0 9 20 2. - 0 - 0.6232867240905762 - 6.2737329863011837e-003 - -0.6587176918983460 - <_> - - <_> - - - - <_> - 7 7 8 2 -1. - <_> - 7 7 4 2 2. - 0 - -0.0203819293528795 - 0.2058995962142944 - -0.0213297195732594 - <_> - - <_> - - - - <_> - 9 6 4 3 -1. - <_> - 11 6 2 3 2. - 0 - 0.0122314300388098 - 0.0166629701852798 - -0.2495936006307602 - <_> - - <_> - - - - <_> - 10 11 11 9 -1. - <_> - 10 14 11 3 3. - 0 - 0.1189161017537117 - 4.6012690290808678e-003 - -0.2406598031520844 - <_> - - <_> - - - - <_> - 7 5 6 8 -1. - <_> - 9 5 2 8 3. - 0 - -0.0453361682593822 - 0.2601368129253388 - -0.0153072299435735 - <_> - - <_> - - - - <_> - 9 7 6 1 -1. - <_> - 11 7 2 1 3. - 0 - 0.0106356497853994 - 0.0139687303453684 - -0.1873012036085129 - <_> - - <_> - - - - <_> - 6 3 8 2 -1. - <_> - 6 3 4 2 2. - 1 - 0.0804206132888794 - 6.4792581833899021e-003 - -0.7373915910720825 - <_> - - <_> - - - - <_> - 11 0 3 8 -1. - <_> - 11 0 3 4 2. - 1 - 4.1983132250607014e-003 - -0.0407184213399887 - 0.0491234995424747 - <_> - - <_> - - - - <_> - 8 0 3 3 -1. - <_> - 9 1 1 3 3. - 1 - 2.7840971015393734e-003 - -0.0468470007181168 - 0.0830455869436264 - <_> - - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 18 9 1 1 9. - 0 - -2.3969069588929415e-003 - -0.1030504032969475 - 0.0362199395895004 - <_> - - <_> - - - - <_> - 10 2 12 3 -1. - <_> - 9 3 12 1 3. - 1 - 0.0238017290830612 - -0.0264406297355890 - 0.1556645035743713 - <_> - - <_> - - - - <_> - 10 6 2 2 -1. - <_> - 10 7 2 1 2. - 0 - 5.8980349422199652e-005 - -0.0741512775421143 - 0.0536947511136532 - <_> - - <_> - - - - <_> - 7 5 3 6 -1. - <_> - 8 7 1 2 9. - 0 - 4.2179841548204422e-003 - 0.0581981800496578 - -0.0693382471799850 - <_> - - <_> - - - - <_> - 12 3 3 9 -1. - <_> - 13 6 1 3 9. - 0 - -7.3058279231190681e-003 - -0.0900652632117271 - 0.0340091288089752 - <_> - - <_> - - - - <_> - 8 5 3 3 -1. - <_> - 8 6 3 1 3. - 0 - 5.0189117901027203e-003 - -0.0187052395194769 - 0.2244399040937424 - <_> - - <_> - - - - <_> - 11 4 3 2 -1. - <_> - 12 5 1 2 3. - 1 - -2.0936098881065845e-003 - -0.0660034492611885 - 0.0198561903089285 - <_> - - <_> - - - - <_> - 11 4 2 3 -1. - <_> - 10 5 2 1 3. - 1 - 6.8444077624008060e-004 - 0.0545123815536499 - -0.0927616432309151 - <_> - - <_> - - - - <_> - 11 0 3 7 -1. - <_> - 12 0 1 7 3. - 0 - -4.1365441866219044e-003 - -0.1007594019174576 - 0.0294409897178411 - <_> - - <_> - - - - <_> - 10 2 3 3 -1. - <_> - 11 3 1 3 3. - 1 - 9.9968025460839272e-003 - -0.0389698706567287 - 0.1408362984657288 - <_> - - <_> - - - - <_> - 18 1 1 2 -1. - <_> - 18 2 1 1 2. - 0 - 4.1777390288189054e-004 - 0.0163493994623423 - -0.0876818373799324 - <_> - - <_> - - - - <_> - 3 1 1 2 -1. - <_> - 3 2 1 1 2. - 0 - 1.4318599824036937e-005 - -0.0601495690643787 - 0.0755719989538193 - <_> - - <_> - - - - <_> - 13 2 1 6 -1. - <_> - 13 5 1 3 2. - 0 - 0.0103863701224327 - 0.0138268098235130 - -0.1328960955142975 - <_> - - <_> - - - - <_> - 8 12 5 8 -1. - <_> - 8 16 5 4 2. - 0 - -3.4228169824928045e-003 - 0.0683445781469345 - -0.0586226098239422 - <_> - - <_> - - - - <_> - 11 15 2 2 -1. - <_> - 11 16 2 1 2. - 0 - 1.4140920029603876e-005 - -0.0336728990077972 - 0.0347423292696476 - <_> - - <_> - - - - <_> - 6 2 10 18 -1. - <_> - 6 11 10 9 2. - 0 - -0.2915072143077850 - -0.2670665085315704 - 0.0169694591313601 - <_> - - <_> - - - - <_> - 16 8 1 12 -1. - <_> - 16 12 1 4 3. - 0 - -2.2624819539487362e-003 - 0.0589304305613041 - -0.0387481413781643 - <_> - - <_> - - - - <_> - 9 2 13 4 -1. - <_> - 8 3 13 2 2. - 1 - 6.0357558540999889e-003 - -0.0544989481568336 - 0.0838629305362701 - <_> - - <_> - - - - <_> - 13 2 1 8 -1. - <_> - 13 4 1 4 2. - 0 - -4.2928759939968586e-003 - -0.0730043128132820 - 0.0146518098190427 - <_> - - <_> - - - - <_> - 8 2 1 8 -1. - <_> - 8 4 1 4 2. - 0 - 0.0110447201877832 - 0.0120782498270273 - -0.3940410017967224 - <_> - - <_> - - - - <_> - 12 3 2 4 -1. - <_> - 12 3 2 2 2. - 1 - -1.0535520268604159e-003 - 0.0483187288045883 - -0.0349198915064335 - <_> - - <_> - - - - <_> - 11 2 4 4 -1. - <_> - 11 2 2 4 2. - 1 - 0.0564046502113342 - -6.8446230143308640e-003 - 0.6175550222396851 - <_> - - <_> - - - - <_> - 19 15 3 2 -1. - <_> - 20 16 1 2 3. - 1 - -8.4812091663479805e-003 - -0.1383949965238571 - 0.0124898403882980 - <_> - - <_> - - - - <_> - 3 15 2 3 -1. - <_> - 2 16 2 1 3. - 1 - 0.0161932408809662 - 9.0974392369389534e-003 - -0.4463374018669128 - <_> - - <_> - - - - <_> - 18 19 3 1 -1. - <_> - 19 19 1 1 3. - 0 - -2.8318920521996915e-004 - 0.0824748799204826 - -0.0473719313740730 - <_> - - <_> - - - - <_> - 1 19 3 1 -1. - <_> - 2 19 1 1 3. - 0 - 4.1413828730583191e-003 - -0.0148484800010920 - 0.2813205122947693 - <_> - - <_> - - - - <_> - 11 5 2 5 -1. - <_> - 11 5 1 5 2. - 0 - -3.4166331170126796e-004 - -0.0609375685453415 - 0.0290263108909130 - <_> - - <_> - - - - <_> - 8 5 1 3 -1. - <_> - 8 6 1 1 3. - 0 - 2.0170300267636776e-003 - 0.0196043495088816 - -0.2082277983427048 - <_> - - <_> - - - - <_> - 9 7 6 2 -1. - <_> - 9 8 6 1 2. - 0 - -2.0873220637440681e-003 - 0.1031048968434334 - -0.0376349613070488 - <_> - - <_> - - - - <_> - 11 6 6 1 -1. - <_> - 13 8 2 1 3. - 1 - -5.6890142150223255e-003 - -0.1254439949989319 - 0.0339157208800316 - <_> - - <_> - - - - <_> - 14 3 2 12 -1. - <_> - 14 3 2 6 2. - 1 - 0.1091770976781845 - 7.4923089705407619e-003 - -0.1190487965941429 - <_> - - <_> - - - - <_> - 9 6 3 2 -1. - <_> - 9 7 3 1 2. - 0 - -5.0970359006896615e-004 - 0.0979087129235268 - -0.0397580116987228 - <_> - - <_> - - - - <_> - 14 3 2 12 -1. - <_> - 14 3 2 6 2. - 1 - -0.1432058066129684 - -0.8041638135910034 - 6.3695549033582211e-004 - <_> - - <_> - - - - <_> - 8 3 12 2 -1. - <_> - 8 3 6 2 2. - 1 - -0.0807990804314613 - 0.3133823871612549 - -0.0138463601469994 - <_> - - <_> - - - - <_> - 11 11 11 9 -1. - <_> - 11 14 11 3 3. - 0 - -0.0938559174537659 - -0.1418638974428177 - 4.8957560211420059e-003 - <_> - - <_> - - - - <_> - 0 11 11 9 -1. - <_> - 0 14 11 3 3. - 0 - 0.1071197018027306 - 0.0103950295597315 - -0.3930034935474396 - <_> - - <_> - - - - <_> - 15 7 2 9 -1. - <_> - 15 10 2 3 3. - 0 - 0.0566285401582718 - 1.6760550206527114e-003 - -0.7529776096343994 - <_> - - <_> - - - - <_> - 5 7 2 9 -1. - <_> - 5 10 2 3 3. - 0 - -5.9830099344253540e-003 - 0.0988645330071449 - -0.0423378497362137 - <_> - - <_> - - - - <_> - 14 10 4 3 -1. - <_> - 14 11 4 1 3. - 0 - 0.0325636602938175 - 7.7907292870804667e-004 - -1.0018880367279053 - <_> - - <_> - - - - <_> - 4 10 4 3 -1. - <_> - 4 11 4 1 3. - 0 - 5.2614361047744751e-003 - -0.0235920809209347 - 0.1856147944927216 - <_> - - <_> - - - - <_> - 17 8 3 3 -1. - <_> - 18 9 1 1 9. - 0 - -0.0285370294004679 - -0.8791831731796265 - 2.7133359108120203e-003 - <_> - - <_> - - - - <_> - 2 8 3 3 -1. - <_> - 3 9 1 1 9. - 0 - -0.0114688398316503 - -0.2856670022010803 - 0.0149483103305101 - <_> - - <_> - - - - <_> - 15 18 1 2 -1. - <_> - 15 19 1 1 2. - 0 - 5.8335228823125362e-004 - 0.0160998106002808 - -0.1004339978098869 - <_> - - <_> - - - - <_> - 0 6 2 2 -1. - <_> - 0 6 1 1 2. - <_> - 1 7 1 1 2. - 0 - 4.0041147731244564e-003 - 5.0489702261984348e-003 - -0.7133231163024902 - <_> - - <_> - - - - <_> - 13 16 2 2 -1. - <_> - 14 16 1 1 2. - <_> - 13 17 1 1 2. - 0 - -2.3596179671585560e-003 - 0.2419005036354065 - -0.0140859298408031 - <_> - - <_> - - - - <_> - 6 18 1 2 -1. - <_> - 6 19 1 1 2. - 0 - 3.3726831316016614e-004 - 0.0296794101595879 - -0.1296799033880234 - <_> - - <_> - - - - <_> - 16 18 6 1 -1. - <_> - 16 18 3 1 2. - 0 - 6.7051057703793049e-004 - -0.0423489697277546 - 0.0643624588847160 - <_> - - <_> - - - - <_> - 0 18 6 1 -1. - <_> - 3 18 3 1 2. - 0 - -3.4773809602484107e-004 - 0.0696163028478622 - -0.0637605488300323 - <_> - - <_> - - - - <_> - 17 17 3 3 -1. - <_> - 18 18 1 1 9. - 0 - 0.0260001793503761 - 3.4755310043692589e-003 - -0.5205311775207520 - <_> - - <_> - - - - <_> - 2 17 3 3 -1. - <_> - 3 18 1 1 9. - 0 - -0.0169871691614389 - -0.4334256052970886 - 8.5654119029641151e-003 - <_> - - <_> - - - - <_> - 13 16 2 2 -1. - <_> - 14 16 1 1 2. - <_> - 13 17 1 1 2. - 0 - 2.9391179850790650e-005 - -0.0366279892623425 - 0.0419104807078838 - <_> - - <_> - - - - <_> - 7 16 2 2 -1. - <_> - 7 16 1 1 2. - <_> - 8 17 1 1 2. - 0 - -2.4438139516860247e-003 - 0.3013032078742981 - -0.0133011303842068 - <_> - - <_> - - - - <_> - 9 8 4 2 -1. - <_> - 11 8 2 1 2. - <_> - 9 9 2 1 2. - 0 - 6.4233690500259399e-003 - 7.3442691937088966e-003 - -0.5752292275428772 - <_> - - <_> - - - - <_> - 10 0 4 6 -1. - <_> - 10 0 4 3 2. - 1 - 0.1168102025985718 - 3.3814390189945698e-003 - -0.8793833255767822 - <_> - - <_> - - - - <_> - 10 18 2 2 -1. - <_> - 11 18 1 1 2. - <_> - 10 19 1 1 2. - 0 - -2.7548689104150981e-005 - 0.0646801963448524 - -0.0574110411107540 - <_> - - <_> - - - - <_> - 10 6 2 4 -1. - <_> - 10 7 2 2 2. - 0 - 2.4947611382231116e-004 - -0.0753268003463745 - 0.0485924184322357 - <_> - - <_> - - - - <_> - 9 7 5 6 -1. - <_> - 9 9 5 2 3. - 0 - -7.1671740151941776e-003 - -0.0835471004247665 - 0.0215624198317528 - <_> - - <_> - - - - <_> - 10 10 2 3 -1. - <_> - 10 11 2 1 3. - 0 - -1.8627879908308387e-003 - 0.1004308015108109 - -0.0381857492029667 - <_> - - <_> - - - - <_> - 8 9 6 6 -1. - <_> - 10 11 2 2 9. - 0 - -0.0160365402698517 - -0.0918253734707832 - 0.0395154692232609 - <_> - - <_> - - - - <_> - 8 10 6 2 -1. - <_> - 10 10 2 2 3. - 0 - -0.0123157799243927 - 0.2311840951442719 - -0.0171569101512432 - <_> - - <_> - - - - <_> - 11 5 2 5 -1. - <_> - 11 5 1 5 2. - 0 - -0.0136959897354245 - -0.4631792902946472 - 2.2789770737290382e-003 - <_> - - <_> - - - - <_> - 8 10 1 6 -1. - <_> - 8 12 1 2 3. - 0 - -8.4357131272554398e-003 - -0.2642551958560944 - 0.0148321297019720 - <_> - - <_> - - - - <_> - 10 11 2 3 -1. - <_> - 10 12 2 1 3. - 0 - -9.2736718943342566e-004 - 0.0796454027295113 - -0.0498405806720257 - <_> - - <_> - - - - <_> - 8 13 2 2 -1. - <_> - 8 13 1 1 2. - <_> - 9 14 1 1 2. - 0 - -7.3909357888624072e-004 - 0.1167574003338814 - -0.0328423194587231 - <_> - - <_> - - - - <_> - 15 1 2 10 -1. - <_> - 15 1 1 10 2. - 1 - -5.3007681854069233e-003 - -0.0583554506301880 - 0.0249154902994633 - <_> - - <_> - - - - <_> - 4 9 10 2 -1. - <_> - 4 9 5 1 2. - <_> - 9 10 5 1 2. - 0 - 2.3519468959420919e-003 - 0.0341840013861656 - -0.1236156001687050 - <_> - - <_> - - - - <_> - 11 18 1 2 -1. - <_> - 11 19 1 1 2. - 0 - 3.6758350324817002e-004 - 0.0243773404508829 - -0.0928664579987526 - <_> - - <_> - - - - <_> - 10 18 1 2 -1. - <_> - 10 19 1 1 2. - 0 - -1.8738239305093884e-004 - -0.0971893966197968 - 0.0455815605819225 - <_> - - <_> - - - - <_> - 16 10 4 8 -1. - <_> - 18 10 2 4 2. - <_> - 16 14 2 4 2. - 0 - -4.3005049228668213e-003 - 0.0596556402742863 - -0.0265509895980358 - <_> - - <_> - - - - <_> - 2 10 4 8 -1. - <_> - 2 10 2 4 2. - <_> - 4 14 2 4 2. - 0 - 3.0303259845823050e-003 - -0.0466524213552475 - 0.0830904319882393 - <_> - - <_> - - - - <_> - 17 8 2 6 -1. - <_> - 17 8 1 6 2. - 0 - 9.1612888500094414e-003 - 8.1623140722513199e-003 - -0.1429411023855209 - <_> - - <_> - - - - <_> - 3 8 2 6 -1. - <_> - 4 8 1 6 2. - 0 - -7.1365521289408207e-003 - -0.2128344029188156 - 0.0195323191583157 - <_> - - <_> - - - - <_> - 18 6 3 14 -1. - <_> - 19 6 1 14 3. - 0 - 4.0135360322892666e-003 - -0.0279777795076370 - 0.0653733536601067 - <_> - - <_> - - - - <_> - 1 6 3 14 -1. - <_> - 2 6 1 14 3. - 0 - 7.3571591638028622e-003 - -0.0336338616907597 - 0.1191610023379326 - <_> - - <_> - - - - <_> - 16 17 2 2 -1. - <_> - 17 17 1 1 2. - <_> - 16 18 1 1 2. - 0 - -1.4602700248360634e-003 - 0.1401118934154511 - -0.0120516801252961 - <_> - - <_> - - - - <_> - 4 17 2 2 -1. - <_> - 4 17 1 1 2. - <_> - 5 18 1 1 2. - 0 - 1.4471929716819432e-005 - -0.0572556406259537 - 0.0688293203711510 - <_> - - <_> - - - - <_> - 17 17 1 2 -1. - <_> - 17 18 1 1 2. - 0 - -1.4309570360637736e-005 - 0.0827891081571579 - -0.0843554735183716 - <_> - - <_> - - - - <_> - 4 17 1 2 -1. - <_> - 4 18 1 1 2. - 0 - -5.5356771918013692e-004 - -0.1438367962837219 - 0.0319339409470558 - <_> - - <_> - - - - <_> - 12 2 1 4 -1. - <_> - 11 3 1 2 2. - 1 - 0.0214848890900612 - -3.0742040835320950e-003 - 0.3788169026374817 - <_> - - <_> - - - - <_> - 10 2 4 1 -1. - <_> - 11 3 2 1 2. - 1 - -9.8766442388296127e-003 - 0.3502343893051148 - -0.0106074400246143 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - -4.5920489355921745e-004 - -0.1130118966102600 - 0.0231395997107029 - <_> - - <_> - - - - <_> - 1 0 5 6 -1. - <_> - 1 3 5 3 2. - 0 - -1.6422939952462912e-003 - 0.0747471228241920 - -0.0504540503025055 - <_> - - <_> - - - - <_> - 16 3 1 2 -1. - <_> - 16 4 1 1 2. - 0 - -5.3874298464506865e-004 - -0.1392264962196350 - 0.0298740696161985 - <_> - - <_> - - - - <_> - 6 0 16 3 -1. - <_> - 5 1 16 1 3. - 1 - -5.7828719727694988e-003 - 0.0801083222031593 - -0.0493187196552753 - <_> - - <_> - - - - <_> - 12 0 2 20 -1. - <_> - 12 0 1 20 2. - 0 - -0.0112545304000378 - -0.0949608385562897 - 0.0128153599798679 - <_> - - <_> - - - - <_> - 7 7 6 2 -1. - <_> - 7 8 6 1 2. - 0 - -6.3977600075304508e-003 - 0.1850531995296478 - -0.0198162607848644 - <_> - - <_> - - - - <_> - 18 1 1 9 -1. - <_> - 18 4 1 3 3. - 0 - -1.7287230002693832e-004 - -0.0447367615997791 - 0.0315139405429363 - <_> - - <_> - - - - <_> - 8 0 2 20 -1. - <_> - 9 0 1 20 2. - 0 - -0.0442902706563473 - -0.8437100052833557 - 4.1946070268750191e-003 - <_> - - <_> - - - - <_> - 18 1 2 3 -1. - <_> - 18 1 1 3 2. - 0 - 1.4135680430626962e-005 - -0.0287040099501610 - 0.0296640694141388 - <_> - - <_> - - - - <_> - 2 1 2 3 -1. - <_> - 3 1 1 3 2. - 0 - 1.4838889910606667e-005 - -0.0577502809464931 - 0.0598775781691074 - <_> - - <_> - - - - <_> - 18 1 3 2 -1. - <_> - 19 1 1 2 3. - 0 - 1.4357990039570723e-005 - -0.0480695813894272 - 0.0520670488476753 - <_> - - <_> - - - - <_> - 5 3 1 2 -1. - <_> - 5 4 1 1 2. - 0 - -3.0332439928315580e-004 - -0.1139155030250549 - 0.0334201082587242 - <_> - - <_> - - - - <_> - 1 3 20 1 -1. - <_> - 6 3 10 1 2. - 0 - -0.0213415399193764 - 0.1341401934623718 - -0.0286970194429159 - <_> - - <_> - - - - <_> - 11 0 5 3 -1. - <_> - 10 1 5 1 3. - 1 - 0.0122206695377827 - -0.0318151302635670 - 0.1244729980826378 - <_> - - <_> - - - - <_> - 13 6 3 4 -1. - <_> - 12 7 3 2 2. - 1 - -1.7970399931073189e-003 - -0.0789726004004478 - 0.0238199997693300 - <_> - - <_> - - - - <_> - 9 4 8 1 -1. - <_> - 11 6 4 1 2. - 1 - 1.0250660125166178e-003 - 0.0917154476046562 - -0.0518535897135735 - <_> - - <_> - - - - <_> - 13 6 1 4 -1. - <_> - 12 7 1 2 2. - 1 - 2.9596749300253578e-005 - -0.0458775013685226 - 0.0222761407494545 - <_> - - <_> - - - - <_> - 8 7 2 6 -1. - <_> - 8 9 2 2 3. - 0 - -2.9857519548386335e-003 - -0.1098759025335312 - 0.0391637496650219 - <_> - - <_> - - - - <_> - 14 11 4 6 -1. - <_> - 14 13 4 2 3. - 0 - 3.4685849677771330e-003 - -0.0314001999795437 - 0.0592695996165276 - <_> - - <_> - - - - <_> - 6 8 9 3 -1. - <_> - 6 9 9 1 3. - 0 - -5.0253752851858735e-004 - 0.0689936131238937 - -0.0568091794848442 - <_> - - <_> - - - - <_> - 8 9 9 2 -1. - <_> - 8 10 9 1 2. - 0 - 3.1805990729480982e-003 - 0.0174885895103216 - -0.1099487021565437 - <_> - - <_> - - - - <_> - 2 13 6 2 -1. - <_> - 2 13 3 1 2. - <_> - 5 14 3 1 2. - 0 - -6.3892719335854053e-003 - 0.2323150932788849 - -0.0163451004773378 - <_> - - <_> - - - - <_> - 12 0 3 6 -1. - <_> - 13 1 1 6 3. - 1 - 0.0473457500338554 - 3.2520359382033348e-003 - -0.7197151184082031 - <_> - - <_> - - - - <_> - 0 10 8 8 -1. - <_> - 0 12 8 4 2. - 0 - -0.0634739771485329 - -0.5714529156684876 - 5.7878792285919189e-003 - <_> - - <_> - - - - <_> - 11 12 10 4 -1. - <_> - 11 12 5 4 2. - 0 - 0.0182835906744003 - -0.0307766292244196 - 0.0670688599348068 - <_> - - <_> - - - - <_> - 10 0 6 3 -1. - <_> - 9 1 6 1 3. - 1 - 0.0335112884640694 - 9.5050930976867676e-003 - -0.3941178917884827 - <_> - - <_> - - - - <_> - 12 1 3 8 -1. - <_> - 13 2 1 8 3. - 1 - 0.0584806390106678 - 8.8002288248389959e-004 - -0.7219312191009522 - <_> - - <_> - - - - <_> - 10 1 8 3 -1. - <_> - 9 2 8 1 3. - 1 - -6.8779820576310158e-003 - -0.1366014927625656 - 0.0285505391657352 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - -7.4082398787140846e-003 - -1. - 1.4721560291945934e-003 - <_> - - <_> - - - - <_> - 8 7 2 4 -1. - <_> - 8 7 1 2 2. - <_> - 9 9 1 2 2. - 0 - 1.9716760143637657e-003 - -0.0312497206032276 - 0.1249724030494690 - <_> - - <_> - - - - <_> - 4 0 14 12 -1. - <_> - 4 3 14 6 2. - 0 - -8.5898824036121368e-003 - 0.0738317593932152 - -0.0516258813440800 - <_> - - <_> - - - - <_> - 1 0 16 12 -1. - <_> - 1 3 16 6 2. - 0 - 0.0386656299233437 - -0.0401255488395691 - 0.1006902009248734 - <_> - - <_> - - - - <_> - 12 0 8 6 -1. - <_> - 12 3 8 3 2. - 0 - -2.3928559385240078e-003 - 0.0455891415476799 - -0.0451002307236195 - <_> - - <_> - - - - <_> - 8 14 1 3 -1. - <_> - 8 15 1 1 3. - 0 - -6.2895438168197870e-004 - -0.1166744977235794 - 0.0327684208750725 - <_> - - <_> - - - - <_> - 13 9 2 2 -1. - <_> - 14 9 1 1 2. - <_> - 13 10 1 1 2. - 0 - -2.3187010083347559e-003 - 0.1300189048051834 - -0.0107180699706078 - <_> - - <_> - - - - <_> - 8 6 2 2 -1. - <_> - 8 6 1 1 2. - <_> - 9 7 1 1 2. - 0 - 1.4138329788693227e-005 - -0.0644049197435379 - 0.0572638288140297 - <_> - - <_> - - - - <_> - 12 4 4 4 -1. - <_> - 11 5 4 2 2. - 1 - -0.0285548605024815 - -0.5063989758491516 - 1.1023499537259340e-003 - <_> - - <_> - - - - <_> - 8 4 6 4 -1. - <_> - 8 4 3 2 2. - <_> - 11 6 3 2 2. - 0 - 3.2312930561602116e-003 - 0.0362675487995148 - -0.1010669991374016 - <_> - - <_> - - - - <_> - 13 6 2 4 -1. - <_> - 13 8 2 2 2. - 0 - 1.6222210251726210e-004 - -0.0402855016291142 - 0.0316792987287045 - <_> - - <_> - - - - <_> - 7 9 2 2 -1. - <_> - 7 9 1 1 2. - <_> - 8 10 1 1 2. - 0 - 4.2762039811350405e-004 - -0.0362032093107700 - 0.1036157980561256 - <_> - - <_> - - - - <_> - 12 5 2 2 -1. - <_> - 12 5 1 2 2. - 1 - 3.3335629268549383e-004 - -0.0298668406903744 - 0.0298821590840817 - <_> - - <_> - - - - <_> - 0 4 20 7 -1. - <_> - 10 4 10 7 2. - 0 - -0.2218914031982422 - -0.3824369907379150 - 9.5520019531250000e-003 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - 8.7596403318457305e-005 - 0.0390019305050373 - -0.0811835527420044 - <_> - - <_> - - - - <_> - 10 15 3 2 -1. - <_> - 10 15 3 1 2. - 1 - -1.1259169696131721e-004 - 0.0637104436755180 - -0.0584609694778919 - <_> - - <_> - - - - <_> - 5 16 17 4 -1. - <_> - 5 18 17 2 2. - 0 - -1.6238780226558447e-003 - 0.0419947989284992 - -0.0448734797537327 - <_> - - <_> - - - - <_> - 4 1 9 1 -1. - <_> - 7 4 3 1 3. - 1 - -0.0601433701813221 - -0.6943441033363342 - 5.1933941431343555e-003 - <_> - - <_> - - - - <_> - 12 5 1 6 -1. - <_> - 10 7 1 2 3. - 1 - 0.0222635697573423 - 7.1151661686599255e-003 - -0.1624536961317062 - <_> - - <_> - - - - <_> - 10 5 6 1 -1. - <_> - 12 7 2 1 3. - 1 - 0.0152872195467353 - -0.0315781384706497 - 0.1315965056419373 - <_> - - <_> - - - - <_> - 9 0 12 2 -1. - <_> - 9 0 6 2 2. - 0 - -2.7766029816120863e-003 - 0.0337839685380459 - -0.0310777891427279 - <_> - - <_> - - - - <_> - 7 17 3 3 -1. - <_> - 8 18 1 1 9. - 0 - 1.6177409561350942e-003 - 0.0391197316348553 - -0.0992788970470428 - <_> - - <_> - - - - <_> - 1 0 20 2 -1. - <_> - 1 0 10 2 2. - 0 - 1.9479090115055442e-003 - -0.0536544099450111 - 0.0701180472970009 - <_> - - <_> - - - - <_> - 0 0 15 3 -1. - <_> - 5 1 5 1 9. - 0 - 0.0121303899213672 - 0.0403061807155609 - -0.0906403213739395 - <_> - - <_> - - - - <_> - 8 1 12 1 -1. - <_> - 11 1 6 1 2. - 0 - -0.0130283897742629 - 0.1170063018798828 - -6.7425691522657871e-003 - <_> - - <_> - - - - <_> - 2 1 12 1 -1. - <_> - 5 1 6 1 2. - 0 - -5.0146891735494137e-003 - -0.1367214024066925 - 0.0284402891993523 - <_> - - <_> - - - - <_> - 13 5 3 1 -1. - <_> - 14 5 1 1 3. - 0 - 2.9157409444451332e-003 - -0.0202235095202923 - 0.1789506971836090 - <_> - - <_> - - - - <_> - 9 15 3 2 -1. - <_> - 10 16 1 2 3. - 1 - 0.0147040495648980 - -0.0117541300132871 - 0.3048641085624695 - <_> - - <_> - - - - <_> - 12 6 3 13 -1. - <_> - 13 6 1 13 3. - 0 - -0.0604797787964344 - -0.7813993096351624 - 2.7442490682005882e-003 - <_> - - <_> - - - - <_> - 9 5 4 3 -1. - <_> - 10 6 2 3 2. - 1 - -4.3481457978487015e-003 - -0.1380956023931503 - 0.0242401193827391 - <_> - - <_> - - - - <_> - 8 2 9 9 -1. - <_> - 11 2 3 9 3. - 0 - -0.0203658696264029 - 0.0478864610195160 - -0.0219222102314234 - <_> - - <_> - - - - <_> - 11 2 5 4 -1. - <_> - 11 2 5 2 2. - 1 - 0.0384875610470772 - -0.0148159498348832 - 0.2836642861366272 - <_> - - <_> - - - - <_> - 15 6 6 6 -1. - <_> - 13 8 6 2 3. - 1 - 0.0881689190864563 - 6.1495671980082989e-003 - -0.1128956973552704 - <_> - - <_> - - - - <_> - 11 2 6 3 -1. - <_> - 13 4 2 3 3. - 1 - 4.0345671586692333e-003 - -0.0682965070009232 - 0.0552248694002628 - <_> - - <_> - - - - <_> - 9 6 6 3 -1. - <_> - 11 7 2 1 9. - 0 - 9.2876404523849487e-003 - 0.0346231013536453 - -0.0543170906603336 - <_> - - <_> - - - - <_> - 10 5 2 4 -1. - <_> - 10 5 1 2 2. - <_> - 11 7 1 2 2. - 0 - 1.6310110222548246e-003 - -0.0292043201625347 - 0.1298943012952805 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 12 6 1 1 2. - <_> - 11 7 1 1 2. - 0 - -1.2771799811162055e-004 - 0.0578554011881351 - -0.0630302503705025 - <_> - - <_> - - - - <_> - 6 4 9 3 -1. - <_> - 9 5 3 1 9. - 0 - 0.0139377797022462 - 0.0692806988954544 - -0.0615266412496567 - <_> - - <_> - - - - <_> - 11 3 1 3 -1. - <_> - 11 4 1 1 3. - 0 - 6.8672648631036282e-003 - 7.0364428684115410e-003 - -0.4455792903900147 - <_> - - <_> - - - - <_> - 9 2 3 6 -1. - <_> - 9 4 3 2 3. - 0 - 0.0210034698247910 - -0.0352685004472733 - 0.1535921990871429 - <_> - - <_> - - - - <_> - 11 6 2 2 -1. - <_> - 12 6 1 1 2. - <_> - 11 7 1 1 2. - 0 - -5.0168340094387531e-003 - -0.5230156183242798 - 3.5861700307577848e-003 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 0 1 1 2. - <_> - 6 1 1 1 2. - 0 - -3.1568898702971637e-004 - -0.1186849027872086 - 0.0292666200548410 - <_> - - <_> - - - - <_> - 15 0 2 3 -1. - <_> - 14 1 2 1 3. - 1 - -9.4318166375160217e-003 - 0.1285338997840881 - -0.0245645008981228 - <_> - - <_> - - - - <_> - 1 6 16 2 -1. - <_> - 9 6 8 2 2. - 0 - 0.0607496909797192 - 0.0154568599537015 - -0.2376493960618973 - <_> - - <_> - - - - <_> - 9 0 8 2 -1. - <_> - 13 0 4 1 2. - <_> - 9 1 4 1 2. - 0 - 1.4245889615267515e-003 - -0.0277316998690367 - 0.0753397569060326 - <_> - - <_> - - - - <_> - 8 14 1 3 -1. - <_> - 8 15 1 1 3. - 0 - 4.5280749909579754e-003 - 7.9670632258057594e-003 - -0.4647890031337738 - <_> - - <_> - - - - <_> - 13 14 3 1 -1. - <_> - 14 14 1 1 3. - 0 - -1.1256569996476173e-003 - 0.0874058604240417 - -0.0282354708760977 - <_> - - <_> - - - - <_> - 3 15 3 5 -1. - <_> - 4 15 1 5 3. - 0 - 7.1023160126060247e-004 - -0.0459129586815834 - 0.0778680965304375 - <_> - - <_> - - - - <_> - 15 0 2 2 -1. - <_> - 16 0 1 1 2. - <_> - 15 1 1 1 2. - 0 - -1.0647220187820494e-004 - -0.0691291168332100 - 0.0348066203296185 - <_> - - <_> - - - - <_> - 3 7 12 1 -1. - <_> - 9 7 6 1 2. - 0 - 0.0404833108186722 - -6.7497747950255871e-003 - 0.5771843194961548 - <_> - - <_> - - - - <_> - 13 14 3 1 -1. - <_> - 14 14 1 1 3. - 0 - 3.1162700615823269e-003 - -0.0151975201442838 - 0.1535487025976181 - <_> - - <_> - - - - <_> - 9 5 3 2 -1. - <_> - 10 5 1 2 3. - 0 - 4.5352601446211338e-003 - 0.0195775702595711 - -0.1931602954864502 - <_> - - <_> - - - - <_> - 10 7 3 3 -1. - <_> - 11 7 1 3 3. - 0 - -4.1040619835257530e-003 - 0.1686359941959381 - -0.0230522099882364 - <_> - - <_> - - - - <_> - 9 5 2 5 -1. - <_> - 10 5 1 5 2. - 0 - -1.2791199842467904e-003 - -0.1226363033056259 - 0.0338529013097286 - <_> - - <_> - - - - <_> - 10 2 6 15 -1. - <_> - 12 7 2 5 9. - 0 - 0.0377502292394638 - 0.0272953808307648 - -0.0390297807753086 - <_> - - <_> - - - - <_> - 8 2 3 15 -1. - <_> - 9 7 1 5 9. - 0 - -0.0313290692865849 - -0.1769587993621826 - 0.0236526709049940 - <_> - - <_> - - - - <_> - 11 7 10 10 -1. - <_> - 16 7 5 5 2. - <_> - 11 12 5 5 2. - 0 - 0.0699080079793930 - -0.0136077404022217 - 0.1770582050085068 - <_> - - <_> - - - - <_> - 3 14 3 6 -1. - <_> - 4 14 1 6 3. - 0 - -1.7724529607221484e-003 - 0.0894430428743362 - -0.0441953204572201 - <_> - - <_> - - - - <_> - 9 4 4 4 -1. - <_> - 11 4 2 2 2. - <_> - 9 6 2 2 2. - 0 - 9.5961341867223382e-004 - 0.0462647788226604 - -0.0851467177271843 - <_> - - <_> - - - - <_> - 0 0 21 2 -1. - <_> - 7 0 7 2 3. - 0 - 4.8880279064178467e-003 - -0.0434573516249657 - 0.0836659669876099 - <_> - - <_> - - - - <_> - 11 1 8 1 -1. - <_> - 11 1 4 1 2. - 0 - -0.0185217000544071 - -0.1984609961509705 - 7.7576087787747383e-003 - <_> - - <_> - - - - <_> - 3 1 8 1 -1. - <_> - 7 1 4 1 2. - 0 - -2.9453789466060698e-004 - 0.0651950165629387 - -0.0738651677966118 - <_> - - <_> - - - - <_> - 15 3 3 3 -1. - <_> - 15 4 3 1 3. - 0 - 3.2816329039633274e-003 - 0.0106137795373797 - -0.1212972030043602 - <_> - - <_> - - - - <_> - 9 12 3 3 -1. - <_> - 9 13 3 1 3. - 0 - -4.1478020139038563e-003 - 0.1321949064731598 - -0.0278387796133757 - <_> - - <_> - - - - <_> - 12 12 2 2 -1. - <_> - 12 13 2 1 2. - 0 - 2.9324321076273918e-003 - 0.0156259909272194 - -0.1333270072937012 - <_> - - <_> - - - - <_> - 8 12 2 2 -1. - <_> - 8 13 2 1 2. - 0 - 1.4735000149812549e-005 - -0.0667673870921135 - 0.0677794069051743 - <_> - - <_> - - - - <_> - 10 7 8 12 -1. - <_> - 10 11 8 4 3. - 0 - 0.0105500202625990 - -0.0186907295137644 - 0.0354603081941605 - <_> - - <_> - - - - <_> - 8 13 1 2 -1. - <_> - 8 14 1 1 2. - 0 - 6.6441838862374425e-004 - 0.0316820591688156 - -0.1259083002805710 - <_> - - <_> - - - - <_> - 10 13 4 2 -1. - <_> - 12 13 2 1 2. - <_> - 10 14 2 1 2. - 0 - -7.8891811426728964e-004 - 0.0414474904537201 - -0.0194939300417900 - <_> - - <_> - - - - <_> - 6 14 3 1 -1. - <_> - 7 14 1 1 3. - 0 - 4.0985438972711563e-003 - -0.0141388997435570 - 0.2555218935012817 - <_> - - <_> - - - - <_> - 15 15 2 4 -1. - <_> - 16 15 1 2 2. - <_> - 15 17 1 2 2. - 0 - -1.1657159775495529e-003 - -0.0995266065001488 - 0.0252099297940731 - <_> - - <_> - - - - <_> - 4 3 3 3 -1. - <_> - 4 4 3 1 3. - 0 - 8.3427336066961288e-003 - 6.7264190874993801e-003 - -0.5316439270973206 - <_> - - <_> - - - - <_> - 15 0 2 3 -1. - <_> - 14 1 2 1 3. - 1 - 0.0112649099901319 - -0.0207103695720434 - 0.1793667972087860 - <_> - - <_> - - - - <_> - 3 12 2 2 -1. - <_> - 3 12 1 1 2. - <_> - 4 13 1 1 2. - 0 - -4.5051681809127331e-003 - -0.6612719297409058 - 5.7547520846128464e-003 - <_> - - <_> - - - - <_> - 17 10 1 3 -1. - <_> - 17 11 1 1 3. - 0 - -1.4798439806327224e-003 - 0.1081055998802185 - -0.0195885691791773 - <_> - - <_> - - - - <_> - 5 1 3 2 -1. - <_> - 6 1 1 2 3. - 0 - 1.6471470007672906e-004 - 0.0532388500869274 - -0.0696926116943359 - <_> - - <_> - - - - <_> - 13 0 3 18 -1. - <_> - 14 0 1 18 3. - 0 - 0.0445828884840012 - 7.8089488670229912e-003 - -0.3765332996845245 - <_> - - <_> - - - - <_> - 6 0 3 18 -1. - <_> - 7 0 1 18 3. - 0 - -0.0197736807167530 - 0.1356068998575211 - -0.0307493191212416 - <_> - - <_> - - - - <_> - 15 15 2 4 -1. - <_> - 16 15 1 2 2. - <_> - 15 17 1 2 2. - 0 - 4.3540569022297859e-003 - 9.3921516090631485e-003 - -0.1949453055858612 - <_> - - <_> - - - - <_> - 0 12 12 8 -1. - <_> - 4 12 4 8 3. - 0 - -0.2417521029710770 - -0.6327394247055054 - 5.7554137893021107e-003 - <_> - - <_> - - - - <_> - 10 8 2 3 -1. - <_> - 10 8 1 3 2. - 0 - -4.4678640551865101e-004 - 0.0745783671736717 - -0.0503282397985458 - <_> - - <_> - - - - <_> - 3 0 10 3 -1. - <_> - 3 0 5 3 2. - 1 - 0.1453706026077271 - 7.1067730896174908e-003 - -0.5064842104911804 - <_> - - <_> - - - - <_> - 15 15 2 4 -1. - <_> - 16 15 1 2 2. - <_> - 15 17 1 2 2. - 0 - 1.4327790267998353e-005 - -0.0286750700324774 - 0.0276442691683769 - <_> - - <_> - - - - <_> - 5 15 2 4 -1. - <_> - 5 15 1 2 2. - <_> - 6 17 1 2 2. - 0 - 6.7291660234332085e-003 - 8.8470866903662682e-003 - -0.4233070015907288 - <_> - - <_> - - - - <_> - 17 10 1 3 -1. - <_> - 17 11 1 1 3. - 0 - 2.2473030257970095e-003 - -0.0142893400043249 - 0.1441075950860977 - -0.7782620191574097 - 17 - -1 - diff --git a/data/haarcascades/haarcascade_profileface.xml b/data/haarcascades/haarcascade_profileface.xml deleted file mode 100644 index 5c0a5fd..0000000 --- a/data/haarcascades/haarcascade_profileface.xml +++ /dev/null @@ -1,31930 +0,0 @@ - - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_>8 7 2 6 -1. - <_>8 10 2 3 2. - 0 - 1.1384399840608239e-003 - -0.8377197980880737 - 0.7341383099555969 - <_> - - <_> - - - - <_>8 3 10 7 -1. - <_>13 3 5 7 2. - 0 - -0.0113423503935337 - 0.6270201802253723 - -0.7239630222320557 - <_> - - <_> - - - - <_>10 11 3 6 -1. - <_>10 14 3 3 2. - 0 - -1.1023089755326509e-003 - 0.3760018944740295 - -0.6608840823173523 - -1.1856809854507446 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>10 4 8 8 -1. - <_>14 4 4 8 2. - 0 - -0.0195538699626923 - 0.4924583137035370 - -0.6339616775512695 - <_> - - <_> - - - - <_>5 7 5 4 -1. - <_>5 9 5 2 2. - 0 - 2.2794529795646667e-003 - -0.6460496783256531 - 0.3581846058368683 - <_> - - <_> - - - - <_>8 4 6 6 -1. - <_>8 4 3 3 2. - <_>11 7 3 3 2. - 0 - 2.4270440917462111e-003 - -0.4725323021411896 - 0.2849431037902832 - <_> - - <_> - - - - <_>10 14 5 2 -1. - <_>10 15 5 1 2. - 0 - 1.9644061103463173e-003 - 0.1699953973293304 - -0.7786815762519836 - <_> - - <_> - - - - <_>7 11 8 4 -1. - <_>7 13 8 2 2. - 0 - 2.2895270958542824e-003 - 0.1555171012878418 - -0.6672509908676148 - <_> - - <_> - - - - <_>11 14 3 3 -1. - <_>11 15 3 1 3. - 0 - -3.0143910553306341e-003 - -0.6872130036354065 - 0.1460456997156143 - <_> - - <_> - - - - <_>3 5 3 11 -1. - <_>4 5 1 11 3. - 0 - -0.0173990093171597 - 0.7252438068389893 - -0.1657290011644363 - <_> - - <_> - - - - <_>8 7 9 6 -1. - <_>8 10 9 3 2. - 0 - 9.0722442837432027e-004 - -0.4638808071613312 - 0.2360499948263168 - <_> - - <_> - - - - <_>13 12 1 2 -1. - <_>13 13 1 1 2. - 0 - -1.5043979510664940e-003 - -0.7595962882041931 - 0.1143691986799240 - <_> - - <_> - - - - <_>1 3 6 17 -1. - <_>4 3 3 17 2. - 0 - 0.1080468967556953 - -0.1286551952362061 - 0.7909234166145325 - <_> - - <_> - - - - <_>11 12 1 3 -1. - <_>11 13 1 1 3. - 0 - -1.1923050042241812e-003 - -0.6240354776382446 - 0.1484749019145966 - <_> - - <_> - - - - <_>1 9 6 9 -1. - <_>4 9 3 9 2. - 0 - -0.0205713901668787 - 0.4080848991870880 - -0.2128700017929077 - -1.4913179874420166 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>10 5 8 6 -1. - <_>14 5 4 6 2. - 0 - -0.0368992090225220 - 0.5330861806869507 - -0.4087265133857727 - <_> - - <_> - - - - <_>7 8 9 6 -1. - <_>7 10 9 2 3. - 0 - 2.4960909504443407e-003 - -0.6948931217193604 - 0.2712517976760864 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>5 8 3 3 2. - <_>8 11 3 3 2. - 0 - 2.4068039783742279e-004 - -0.5620825290679932 - 0.2193035036325455 - <_> - - <_> - - - - <_>2 0 4 18 -1. - <_>4 0 2 18 2. - 0 - -0.0580218285322189 - 0.6906061768531799 - -0.1508214026689529 - <_> - - <_> - - - - <_>10 12 3 4 -1. - <_>10 14 3 2 2. - 0 - 1.1526979506015778e-003 - 0.1392538994550705 - -0.6631165742874146 - <_> - - <_> - - - - <_>7 0 3 9 -1. - <_>7 3 3 3 3. - 0 - 7.4388440698385239e-003 - -0.3333317041397095 - 0.3169938027858734 - <_> - - <_> - - - - <_>11 13 1 3 -1. - <_>11 14 1 1 3. - 0 - -1.4158539706841111e-003 - -0.6800730228424072 - 0.1324332058429718 - <_> - - <_> - - - - <_>4 8 5 2 -1. - <_>4 9 5 1 2. - 0 - 8.8562711607664824e-004 - -0.3867216110229492 - 0.1973295956850052 - <_> - - <_> - - - - <_>11 13 2 3 -1. - <_>11 14 2 1 3. - 0 - 2.5714060757309198e-003 - 0.1203565970063210 - -0.7317706942558289 - <_> - - <_> - - - - <_>12 12 1 3 -1. - <_>12 13 1 1 3. - 0 - 1.8255549948662519e-003 - 0.0779798403382301 - -0.7719609141349793 - <_> - - <_> - - - - <_>9 12 2 8 -1. - <_>9 16 2 4 2. - 0 - -1.1993020307272673e-003 - 0.1682122945785523 - -0.4147912859916687 - <_> - - <_> - - - - <_>6 3 4 13 -1. - <_>8 3 2 13 2. - 0 - 0.0231790803372860 - 0.0753373205661774 - -0.7104706764221191 - <_> - - <_> - - - - <_>2 6 4 12 -1. - <_>4 6 2 12 2. - 0 - 0.0465394183993340 - -0.1046483963727951 - 0.6627069711685181 - <_> - - <_> - - - - <_>11 13 3 2 -1. - <_>12 13 1 2 3. - 0 - -1.7157640540972352e-003 - -0.4961821138858795 - 0.1627524048089981 - <_> - - <_> - - - - <_>3 5 3 11 -1. - <_>4 5 1 11 3. - 0 - -0.0127788297832012 - 0.4625453948974609 - -0.1602790057659149 - <_> - - <_> - - - - <_>3 6 13 12 -1. - <_>3 12 13 6 2. - 0 - -0.1521482020616531 - -0.7059270143508911 - 0.1002250984311104 - <_> - - <_> - - - - <_>7 7 6 6 -1. - <_>7 7 3 3 2. - <_>10 10 3 3 2. - 0 - 3.1789899803698063e-003 - 0.1234574988484383 - -0.3909341990947723 - <_> - - <_> - - - - <_>4 7 3 2 -1. - <_>5 7 1 2 3. - 0 - -2.2882770281285048e-003 - 0.3708150088787079 - -0.1621042042970657 - <_> - - <_> - - - - <_>5 4 14 3 -1. - <_>12 4 7 3 2. - 0 - -2.9806189704686403e-003 - 0.1808705925941467 - -0.3323985934257507 - <_> - - <_> - - - - <_>10 12 3 2 -1. - <_>11 12 1 2 3. - 0 - -1.5072739915922284e-003 - -0.4947231113910675 - 0.0982888564467430 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 1.9225040450692177e-003 - -0.1779111027717590 - 0.3077332973480225 - <_> - - <_> - - - - <_>12 14 1 3 -1. - <_>12 15 1 1 3. - 0 - 1.9025449873879552e-003 - 0.0847949981689453 - -0.5902097225189209 - <_> - - <_> - - - - <_>3 6 3 3 -1. - <_>4 6 1 3 3. - 0 - -3.5421559587121010e-003 - 0.3117577135562897 - -0.1439293026924133 - <_> - - <_> - - - - <_>8 4 3 2 -1. - <_>9 4 1 2 3. - 0 - -2.9751660767942667e-003 - -0.6364914178848267 - 0.0826398879289627 - <_> - - <_> - - - - <_>3 3 3 13 -1. - <_>4 3 1 13 3. - 0 - 0.0100032901391387 - -0.1169926002621651 - 0.4238753020763397 - <_> - - <_> - - - - <_>15 4 2 3 -1. - <_>15 5 2 1 3. - 0 - -1.9193530315533280e-003 - -0.4711583852767944 - 0.1103824004530907 - <_> - - <_> - - - - <_>12 8 4 4 -1. - <_>12 10 4 2 2. - 0 - 0.0250706207007170 - 0.0487759299576283 - -0.8035132884979248 - -1.9596290588378906 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>8 7 8 9 -1. - <_>8 10 8 3 3. - 0 - 0.0142147997394204 - -0.6357787847518921 - 0.3346172869205475 - <_> - - <_> - - - - <_>8 0 12 6 -1. - <_>8 0 6 3 2. - <_>14 3 6 3 2. - 0 - -0.0125259095802903 - 0.3276613056659699 - -0.4133152961730957 - <_> - - <_> - - - - <_>5 9 3 6 -1. - <_>5 12 3 3 2. - 0 - -2.2514370357384905e-005 - 0.2310263067483902 - -0.5428205132484436 - <_> - - <_> - - - - <_>11 12 2 4 -1. - <_>12 12 1 4 2. - 0 - 1.8600060138851404e-003 - 0.1793334931135178 - -0.6913194060325623 - <_> - - <_> - - - - <_>10 11 3 8 -1. - <_>11 11 1 8 3. - 0 - 7.8344792127609253e-003 - 0.0910713002085686 - -0.7812684774398804 - <_> - - <_> - - - - <_>5 5 5 6 -1. - <_>5 7 5 2 3. - 0 - -4.2322301305830479e-003 - 0.2065840959548950 - -0.4290603101253510 - <_> - - <_> - - - - <_>10 13 2 6 -1. - <_>10 16 2 3 2. - 0 - -7.5860600918531418e-004 - 0.2073071002960205 - -0.4207031130790710 - <_> - - <_> - - - - <_>10 15 3 4 -1. - <_>11 15 1 4 3. - 0 - -3.5626380704343319e-003 - -0.6322708725929260 - 0.1311862021684647 - <_> - - <_> - - - - <_>7 3 3 3 -1. - <_>8 3 1 3 3. - 0 - -4.9960161559283733e-003 - -0.7511237859725952 - 0.0782033279538155 - <_> - - <_> - - - - <_>5 8 6 2 -1. - <_>8 8 3 2 2. - 0 - 7.3098740540444851e-003 - 0.0934286415576935 - -0.6631010770797730 - <_> - - <_> - - - - <_>8 7 4 2 -1. - <_>10 7 2 2 2. - 0 - 2.2772040392737836e-004 - -0.3414882123470306 - 0.2000820040702820 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>6 6 1 3 2. - 0 - 8.3124160300940275e-004 - -0.2544816136360169 - 0.2585771083831787 - <_> - - <_> - - - - <_>8 0 3 8 -1. - <_>9 0 1 8 3. - 0 - -7.5492179021239281e-003 - -0.6613898873329163 - 0.0830044224858284 - <_> - - <_> - - - - <_>5 10 3 8 -1. - <_>5 14 3 4 2. - 0 - -0.0380399487912655 - -0.8216357231140137 - 0.0592315904796124 - <_> - - <_> - - - - <_>12 3 3 2 -1. - <_>13 3 1 2 3. - 0 - 2.8484580107033253e-003 - 0.0897299572825432 - -0.5833374261856079 - <_> - - <_> - - - - <_>8 2 3 4 -1. - <_>9 2 1 4 3. - 0 - 4.8181698657572269e-003 - 0.0939605608582497 - -0.5761976838111877 - <_> - - <_> - - - - <_>14 10 1 8 -1. - <_>14 14 1 4 2. - 0 - -0.0111904898658395 - -0.6254429817199707 - 0.0736088976264000 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - -6.4537129364907742e-003 - 0.5512338876724243 - -0.1002079024910927 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 3.3225629013031721e-003 - -0.1079789027571678 - 0.5366494059562683 - <_> - - <_> - - - - <_>9 12 3 2 -1. - <_>10 12 1 2 3. - 0 - 4.6705761924386024e-003 - 0.0883211269974709 - -0.6768360137939453 - <_> - - <_> - - - - <_>12 2 1 12 -1. - <_>12 6 1 4 3. - 0 - -0.0116133103147149 - -0.5071188211441040 - 0.0765566304326057 - <_> - - <_> - - - - <_>2 8 14 6 -1. - <_>2 8 7 3 2. - <_>9 11 7 3 2. - 0 - -0.0375156104564667 - -0.7293627262115479 - 0.0594486109912395 - <_> - - <_> - - - - <_>11 3 3 17 -1. - <_>12 3 1 17 3. - 0 - 0.0230860300362110 - 0.0507189594209194 - -0.7845978140830994 - <_> - - <_> - - - - <_>12 12 1 2 -1. - <_>12 13 1 1 2. - 0 - -7.1651988946541678e-006 - 0.1668622046709061 - -0.2571322023868561 - <_> - - <_> - - - - <_>13 1 2 1 -1. - <_>14 1 1 1 2. - 0 - 7.1611627936363220e-004 - 0.1063603013753891 - -0.4279364049434662 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 4.1476460173726082e-003 - -0.1206965968012810 - 0.4199318885803223 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -2.5815099943429232e-003 - 0.4871808886528015 - -0.1004581004381180 - <_> - - <_> - - - - <_>12 12 2 3 -1. - <_>12 13 2 1 3. - 0 - -1.7147070029750466e-003 - -0.4609631001949310 - 0.1037511005997658 - -1.9849590063095093 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>8 2 10 10 -1. - <_>13 2 5 10 2. - 0 - -0.0612027198076248 - 0.3907910883426666 - -0.3940125107765198 - <_> - - <_> - - - - <_>11 13 3 1 -1. - <_>12 13 1 1 3. - 0 - -1.4643670292571187e-003 - -0.7369784116744995 - 0.1566022038459778 - <_> - - <_> - - - - <_>12 10 1 4 -1. - <_>12 12 1 2 2. - 0 - 7.2080420795828104e-004 - 0.2167553007602692 - -0.5801265835762024 - <_> - - <_> - - - - <_>8 7 2 6 -1. - <_>8 10 2 3 2. - 0 - 6.4895692048594356e-004 - -0.7230809926986694 - 0.1278524994850159 - <_> - - <_> - - - - <_>12 11 1 3 -1. - <_>12 12 1 1 3. - 0 - -1.7158190021291375e-003 - -0.7710043191909790 - 0.1021030992269516 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>10 12 1 3 3. - 0 - -2.2490581031888723e-003 - -0.6062312722206116 - 0.1242726966738701 - <_> - - <_> - - - - <_>6 0 8 6 -1. - <_>6 3 8 3 2. - 0 - 0.0538419783115387 - -0.1716974973678589 - 0.5335056781768799 - <_> - - <_> - - - - <_>0 0 8 19 -1. - <_>4 0 4 19 2. - 0 - -0.1328897029161453 - 0.5592436790466309 - -0.1895489990711212 - <_> - - <_> - - - - <_>5 6 4 9 -1. - <_>5 9 4 3 3. - 0 - 9.0965389972552657e-004 - -0.4716643095016480 - 0.1692426055669785 - <_> - - <_> - - - - <_>13 14 1 2 -1. - <_>13 15 1 1 2. - 0 - 6.0799147468060255e-004 - 0.1134722009301186 - -0.5984687805175781 - <_> - - <_> - - - - <_>1 3 8 15 -1. - <_>5 3 4 15 2. - 0 - 0.1607262939214706 - -0.1029551997780800 - 0.6648719906806946 - <_> - - <_> - - - - <_>13 14 2 3 -1. - <_>13 15 2 1 3. - 0 - -1.7097239615395665e-003 - -0.4727627933025360 - 0.1339205056428909 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>6 7 1 2 3. - 0 - 1.1734620202332735e-003 - -0.2279558926820755 - 0.2613565027713776 - <_> - - <_> - - - - <_>8 5 3 1 -1. - <_>9 5 1 1 3. - 0 - -1.5138329472392797e-003 - -0.5539500117301941 - 0.1102833971381187 - <_> - - <_> - - - - <_>9 5 3 1 -1. - <_>10 5 1 1 3. - 0 - -2.1774161141365767e-003 - -0.6222890019416809 - 0.0784866735339165 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - -2.7727920096367598e-003 - 0.4614112079143524 - -0.1349655985832214 - <_> - - <_> - - - - <_>18 4 1 2 -1. - <_>18 5 1 1 2. - 0 - 9.3199027469381690e-004 - 0.1016277000308037 - -0.5163183808326721 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 2.9746659565716982e-003 - -0.1299920976161957 - 0.4211730062961578 - <_> - - <_> - - - - <_>10 10 3 4 -1. - <_>11 10 1 4 3. - 0 - -5.0399480387568474e-003 - -0.6370617151260376 - 0.0776241272687912 - <_> - - <_> - - - - <_>6 5 2 14 -1. - <_>6 12 2 7 2. - 0 - 0.0234148502349854 - 0.0721827968955040 - -0.5983113050460815 - <_> - - <_> - - - - <_>14 8 3 4 -1. - <_>14 10 3 2 2. - 0 - -1.0927390540018678e-003 - -0.4166488051414490 - 0.1182999014854431 - <_> - - <_> - - - - <_>4 5 3 6 -1. - <_>4 7 3 2 3. - 0 - -1.6441360348835588e-003 - 0.1858306974172592 - -0.2755101919174194 - <_> - - <_> - - - - <_>5 10 2 8 -1. - <_>5 14 2 4 2. - 0 - -0.0257362797856331 - -0.7514647841453552 - 0.0639077499508858 - <_> - - <_> - - - - <_>9 1 3 2 -1. - <_>10 1 1 2 3. - 0 - -2.8924590442329645e-003 - -0.5678088068962097 - 0.0732977390289307 - <_> - - <_> - - - - <_>10 1 3 3 -1. - <_>11 1 1 3 3. - 0 - -5.2889231592416763e-003 - -0.6373888850212097 - 0.0686869472265244 - <_> - - <_> - - - - <_>9 12 8 8 -1. - <_>9 12 4 4 2. - <_>13 16 4 4 2. - 0 - 3.2964269630610943e-003 - -0.2506295144557953 - 0.1598978042602539 - <_> - - <_> - - - - <_>8 13 6 4 -1. - <_>10 13 2 4 3. - 0 - 0.0249144397675991 - 0.0552609786391258 - -0.7620877027511597 - <_> - - <_> - - - - <_>3 6 3 12 -1. - <_>4 6 1 12 3. - 0 - -0.0150885004550219 - 0.3703337907791138 - -0.1200395971536636 - -1.8260079622268677 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>9 3 8 5 -1. - <_>13 3 4 5 2. - 0 - -0.0118571799248457 - 0.2942155897617340 - -0.5170331001281738 - <_> - - <_> - - - - <_>7 7 3 6 -1. - <_>7 10 3 3 2. - 0 - 2.0991980563849211e-003 - -0.6147174835205078 - 0.2064850032329559 - <_> - - <_> - - - - <_>5 10 10 4 -1. - <_>5 12 10 2 2. - 0 - -1.5772449842188507e-004 - 0.2287074029445648 - -0.5525804758071899 - <_> - - <_> - - - - <_>11 12 1 6 -1. - <_>11 15 1 3 2. - 0 - -2.0669099467340857e-004 - 0.1207000985741615 - -0.5492612719535828 - <_> - - <_> - - - - <_>5 8 6 2 -1. - <_>8 8 3 2 2. - 0 - 2.2675560321658850e-003 - 0.1535481065511704 - -0.4607430100440979 - <_> - - <_> - - - - <_>2 0 8 4 -1. - <_>2 0 4 2 2. - <_>6 2 4 2 2. - 0 - 0.0144694996997714 - -0.1897630989551544 - 0.4207141101360321 - <_> - - <_> - - - - <_>11 7 3 5 -1. - <_>12 7 1 5 3. - 0 - -1.2127560330554843e-003 - -0.4513986110687256 - 0.0994258671998978 - <_> - - <_> - - - - <_>12 13 2 3 -1. - <_>12 14 2 1 3. - 0 - 2.1505509503185749e-003 - 0.1020087972283363 - -0.6206424236297607 - <_> - - <_> - - - - <_>12 12 1 2 -1. - <_>12 13 1 1 2. - 0 - -1.6638869419693947e-003 - -0.7036749124526978 - 0.0772146806120873 - <_> - - <_> - - - - <_>5 11 6 3 -1. - <_>8 11 3 3 2. - 0 - 1.0530210565775633e-003 - -0.3245396018028259 - 0.1761610954999924 - <_> - - <_> - - - - <_>2 6 3 9 -1. - <_>3 6 1 9 3. - 0 - 0.0118364095687866 - -0.1350782066583633 - 0.4264113008975983 - <_> - - <_> - - - - <_>12 12 1 3 -1. - <_>12 13 1 1 3. - 0 - 9.6512871095910668e-004 - 0.0945027694106102 - -0.4854493141174316 - <_> - - <_> - - - - <_>5 8 4 2 -1. - <_>5 9 4 1 2. - 0 - 7.5651629595085979e-004 - -0.2995952963829041 - 0.1686761975288391 - <_> - - <_> - - - - <_>3 8 3 7 -1. - <_>4 8 1 7 3. - 0 - 0.0108391502872109 - -0.1112103015184403 - 0.4691441059112549 - <_> - - <_> - - - - <_>1 3 6 15 -1. - <_>3 3 2 15 3. - 0 - -0.0514394193887711 - 0.4172692000865936 - -0.1177640035748482 - <_> - - <_> - - - - <_>12 14 4 3 -1. - <_>12 15 4 1 3. - 0 - 3.4927250817418098e-003 - 0.0925122797489166 - -0.5259935259819031 - <_> - - <_> - - - - <_>9 0 2 20 -1. - <_>9 0 1 10 2. - <_>10 10 1 10 2. - 0 - -0.0139263998717070 - -0.6663349866867065 - 0.0523864589631557 - <_> - - <_> - - - - <_>6 12 3 3 -1. - <_>6 13 3 1 3. - 0 - 4.5590959489345551e-003 - -0.0933838412165642 - 0.4377475082874298 - <_> - - <_> - - - - <_>5 7 3 10 -1. - <_>5 12 3 5 2. - 0 - -0.0373186990618706 - -0.5958368778228760 - 0.0726278498768806 - <_> - - <_> - - - - <_>8 5 2 1 -1. - <_>9 5 1 1 2. - 0 - 1.2496879789978266e-003 - 0.0695372372865677 - -0.4877246022224426 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>5 13 3 1 3. - 0 - -3.7307639140635729e-003 - 0.3269925117492676 - -0.1173909008502960 - <_> - - <_> - - - - <_>15 5 4 2 -1. - <_>15 6 4 1 2. - 0 - 2.1144179627299309e-003 - 0.0928890928626060 - -0.4178802073001862 - <_> - - <_> - - - - <_>15 5 3 2 -1. - <_>15 6 3 1 2. - 0 - -6.4239342464134097e-004 - -0.2933219075202942 - 0.1310780942440033 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - -3.1379980500787497e-003 - 0.3244552016258240 - -0.1150685027241707 - <_> - - <_> - - - - <_>6 5 4 12 -1. - <_>8 5 2 12 2. - 0 - -0.0391869693994522 - -0.7936044931411743 - 0.0500534810125828 - <_> - - <_> - - - - <_>7 4 3 3 -1. - <_>8 4 1 3 3. - 0 - 4.4646807946264744e-003 - 0.0547760203480721 - -0.5653573870658875 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>6 6 1 3 2. - 0 - 8.6451368406414986e-004 - -0.1747120022773743 - 0.1975816041231155 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - 2.4237011093646288e-003 - -0.0952961891889572 - 0.4076026082038879 - <_> - - <_> - - - - <_>12 10 2 1 -1. - <_>13 10 1 1 2. - 0 - -2.5377490092068911e-003 - -0.6245474219322205 - 0.0699205473065376 - <_> - - <_> - - - - <_>10 13 5 2 -1. - <_>10 14 5 1 2. - 0 - -7.3309220169903710e-006 - 0.1224924996495247 - -0.2815726995468140 - <_> - - <_> - - - - <_>11 13 1 3 -1. - <_>11 14 1 1 3. - 0 - -1.8882560543715954e-003 - -0.6267039775848389 - 0.0658209323883057 - <_> - - <_> - - - - <_>7 2 3 6 -1. - <_>7 4 3 2 3. - 0 - 6.0609861975535750e-004 - -0.2548140883445740 - 0.1290224045515060 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - 2.3213759995996952e-003 - -0.0974301174283028 - 0.3245609104633331 - <_> - - <_> - - - - <_>12 14 2 3 -1. - <_>12 15 2 1 3. - 0 - -1.8534410046413541e-003 - -0.4406534135341644 - 0.0829688534140587 - <_> - - <_> - - - - <_>8 5 3 3 -1. - <_>8 6 3 1 3. - 0 - 2.3999500554054976e-003 - -0.1204126998782158 - 0.2828806042671204 - <_> - - <_> - - - - <_>7 6 9 10 -1. - <_>7 11 9 5 2. - 0 - -0.0813561975955963 - -0.7397223114967346 - 0.0465683005750179 - <_> - - <_> - - - - <_>0 18 18 2 -1. - <_>6 18 6 2 3. - 0 - -2.9865680262446404e-003 - 0.1633462011814117 - -0.1983491033315659 - <_> - - <_> - - - - <_>0 5 1 8 -1. - <_>0 9 1 4 2. - 0 - 2.8128880076110363e-003 - 0.1183737963438034 - -0.2939819991588593 - <_> - - <_> - - - - <_>1 3 8 10 -1. - <_>1 8 8 5 2. - 0 - -0.1006079018115997 - -0.7371764779090881 - 0.0425100214779377 - <_> - - <_> - - - - <_>9 12 6 2 -1. - <_>9 13 6 1 2. - 0 - 1.1854549666168168e-004 - 0.1047106012701988 - -0.2913986146450043 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>9 7 2 1 3. - 0 - 2.2375308908522129e-003 - -0.0960420593619347 - 0.3404592871665955 - <_> - - <_> - - - - <_>9 4 3 3 -1. - <_>10 4 1 3 3. - 0 - -4.4986992143094540e-003 - -0.5823466181755066 - 0.0562368407845497 - <_> - - <_> - - - - <_>13 13 1 3 -1. - <_>13 14 1 1 3. - 0 - -3.6484538577497005e-004 - -0.2795613110065460 - 0.1011399030685425 - <_> - - <_> - - - - <_>2 6 13 3 -1. - <_>2 7 13 1 3. - 0 - -7.9940296709537506e-003 - 0.2777594923973084 - -0.1194123029708862 - <_> - - <_> - - - - <_>10 15 2 4 -1. - <_>11 15 1 4 2. - 0 - -5.1547219045460224e-003 - -0.6022951006889343 - 0.0489171408116817 - <_> - - <_> - - - - <_>7 7 2 3 -1. - <_>8 7 1 3 2. - 0 - -8.1772619159892201e-004 - 0.1766050010919571 - -0.1640768945217133 - <_> - - <_> - - - - <_>3 6 12 8 -1. - <_>3 6 6 4 2. - <_>9 10 6 4 2. - 0 - 0.0674346983432770 - 0.0407614596188068 - -0.7186576128005981 - <_> - - <_> - - - - <_>12 0 8 4 -1. - <_>12 0 4 2 2. - <_>16 2 4 2 2. - 0 - -2.4103289470076561e-003 - 0.1767168045043945 - -0.1608185023069382 - <_> - - <_> - - - - <_>9 15 3 3 -1. - <_>10 15 1 3 3. - 0 - -3.5183799918740988e-003 - -0.4307860136032105 - 0.0706716328859329 - <_> - - <_> - - - - <_>10 14 1 2 -1. - <_>10 15 1 1 2. - 0 - -1.4561560419679154e-005 - 0.1271470040082932 - -0.2338785976171494 - <_> - - <_> - - - - <_>6 11 5 6 -1. - <_>6 14 5 3 2. - 0 - -0.0479518212378025 - -0.7908576726913452 - 0.0368030816316605 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 2.1735159680247307e-003 - -0.1308927983045578 - 0.2533034980297089 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -3.4542270004749298e-003 - 0.5102524757385254 - -0.0753372535109520 - -1.9446740150451660 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>5 6 3 4 -1. - <_>6 6 1 4 3. - 0 - 4.5243161730468273e-003 - -0.3048551976680756 - 0.5190864205360413 - <_> - - <_> - - - - <_>9 6 6 4 -1. - <_>11 6 2 4 3. - 0 - 2.3372350260615349e-003 - -0.4290454089641571 - 0.2905215919017792 - <_> - - <_> - - - - <_>6 5 12 6 -1. - <_>6 7 12 2 3. - 0 - -4.4243237935006618e-003 - 0.2106857001781464 - -0.4595498144626617 - <_> - - <_> - - - - <_>3 1 16 7 -1. - <_>11 1 8 7 2. - 0 - -0.0128874396905303 - 0.1913823038339615 - -0.4587906897068024 - <_> - - <_> - - - - <_>12 11 1 6 -1. - <_>12 14 1 3 2. - 0 - -5.2370920457178727e-005 - 0.1414148956537247 - -0.5026736855506897 - <_> - - <_> - - - - <_>6 6 9 8 -1. - <_>6 10 9 4 2. - 0 - -4.7738491557538509e-003 - -0.4876083135604858 - 0.1234100982546806 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>5 12 4 3 2. - 0 - 9.6315861446782947e-004 - 0.1336739957332611 - -0.4479374885559082 - <_> - - <_> - - - - <_>1 0 6 14 -1. - <_>4 0 3 14 2. - 0 - -0.0891403034329414 - 0.5038766860961914 - -0.1592300981283188 - <_> - - <_> - - - - <_>8 1 1 9 -1. - <_>8 4 1 3 3. - 0 - 1.7201449954882264e-003 - -0.2053536027669907 - 0.2434068024158478 - <_> - - <_> - - - - <_>11 13 2 2 -1. - <_>11 14 2 1 2. - 0 - -2.6712119579315186e-003 - -0.6331971287727356 - 0.0530356504023075 - <_> - - <_> - - - - <_>2 7 4 13 -1. - <_>4 7 2 13 2. - 0 - 0.0373532809317112 - -0.1136024966835976 - 0.4664533138275147 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>8 8 3 6 2. - 0 - -0.0315109603106976 - -0.6882048249244690 - 0.0693718567490578 - <_> - - <_> - - - - <_>18 0 2 20 -1. - <_>19 0 1 20 2. - 0 - 0.0152938198298216 - -0.1004384011030197 - 0.4626778960227966 - <_> - - <_> - - - - <_>6 7 3 3 -1. - <_>7 7 1 3 3. - 0 - 5.4966909810900688e-003 - -0.0935146436095238 - 0.4512706100940704 - <_> - - <_> - - - - <_>13 10 1 4 -1. - <_>13 12 1 2 2. - 0 - -4.6311439946293831e-003 - -0.6431459784507752 - 0.0850035473704338 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>12 12 2 1 2. - 0 - 8.0943357897922397e-004 - 0.0797389671206474 - -0.4932079911231995 - <_> - - <_> - - - - <_>3 6 12 6 -1. - <_>3 6 6 3 2. - <_>9 9 6 3 2. - 0 - 0.0297459401190281 - 0.0784204676747322 - -0.5048243999481201 - <_> - - <_> - - - - <_>10 13 2 2 -1. - <_>10 14 2 1 2. - 0 - 9.7070122137665749e-004 - 0.0581354387104511 - -0.5703517794609070 - <_> - - <_> - - - - <_>6 13 2 3 -1. - <_>6 14 2 1 3. - 0 - 2.4534659460186958e-003 - -0.1125906035304070 - 0.3685297071933746 - <_> - - <_> - - - - <_>13 5 1 3 -1. - <_>13 6 1 1 3. - 0 - 1.9709810148924589e-003 - 0.0771853104233742 - -0.5268386006355286 - <_> - - <_> - - - - <_>6 14 3 3 -1. - <_>6 15 3 1 3. - 0 - 4.8643019981682301e-003 - -0.1047953963279724 - 0.4147444069385529 - <_> - - <_> - - - - <_>5 15 3 3 -1. - <_>5 16 3 1 3. - 0 - 1.0143260005861521e-003 - -0.1473156064748764 - 0.2867107987403870 - <_> - - <_> - - - - <_>15 3 1 3 -1. - <_>15 4 1 1 3. - 0 - -9.5099088503047824e-004 - -0.3807004988193512 - 0.0881083533167839 - <_> - - <_> - - - - <_>3 8 3 12 -1. - <_>4 8 1 12 3. - 0 - -5.6730289943516254e-003 - 0.2481890022754669 - -0.1369633972644806 - <_> - - <_> - - - - <_>3 4 3 14 -1. - <_>4 4 1 14 3. - 0 - 0.0169878993183374 - -0.0808960422873497 - 0.5278167128562927 - <_> - - <_> - - - - <_>6 11 6 2 -1. - <_>9 11 3 2 2. - 0 - -7.5278789736330509e-003 - -0.4688000977039337 - 0.0893896669149399 - <_> - - <_> - - - - <_>4 8 8 4 -1. - <_>8 8 4 4 2. - 0 - 0.0339485295116901 - 0.0505947917699814 - -0.6739956140518189 - <_> - - <_> - - - - <_>4 5 2 4 -1. - <_>5 5 1 4 2. - 0 - 8.3328841719776392e-004 - -0.1893136054277420 - 0.1960709989070892 - <_> - - <_> - - - - <_>7 3 2 1 -1. - <_>8 3 1 1 2. - 0 - -5.9632491320371628e-004 - -0.3622928857803345 - 0.1054477021098137 - <_> - - <_> - - - - <_>12 16 2 3 -1. - <_>12 17 2 1 3. - 0 - 3.0905720777809620e-003 - 0.0572096295654774 - -0.5531697273254395 - <_> - - <_> - - - - <_>3 16 6 3 -1. - <_>3 17 6 1 3. - 0 - 3.5152619238942862e-003 - -0.1221107020974159 - 0.2936989963054657 - <_> - - <_> - - - - <_>13 4 2 1 -1. - <_>14 4 1 1 2. - 0 - 7.9333729809150100e-004 - 0.0759779065847397 - -0.4453982114791870 - <_> - - <_> - - - - <_>9 16 4 4 -1. - <_>11 16 2 4 2. - 0 - -0.0111893601715565 - -0.5059651732444763 - 0.0574383698403835 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -1.1787790572270751e-003 - 0.3079969882965088 - -0.1076223030686379 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>6 9 2 1 2. - 0 - 5.4418851505033672e-005 - -0.2599756121635437 - 0.1313844025135040 - <_> - - <_> - - - - <_>12 13 2 1 -1. - <_>13 13 1 1 2. - 0 - -7.2562302193546202e-006 - 0.1543983966112137 - -0.2109470069408417 - <_> - - <_> - - - - <_>6 7 6 3 -1. - <_>8 7 2 3 3. - 0 - -8.3436258137226105e-004 - 0.1368986964225769 - -0.2436766028404236 - <_> - - <_> - - - - <_>5 8 2 10 -1. - <_>5 13 2 5 2. - 0 - -0.0333806090056896 - -0.6747735738754273 - 0.0509867407381535 - <_> - - <_> - - - - <_>0 8 1 2 -1. - <_>0 9 1 1 2. - 0 - 7.4093497823923826e-004 - 0.0912485271692276 - -0.3522076010704041 - <_> - - <_> - - - - <_>2 11 4 4 -1. - <_>4 11 2 4 2. - 0 - -2.0966369193047285e-003 - 0.1911004930734634 - -0.1638002991676331 - <_> - - <_> - - - - <_>1 9 12 3 -1. - <_>5 9 4 3 3. - 0 - -0.0693395063281059 - -0.8770086765289307 - 0.0357266291975975 - <_> - - <_> - - - - <_>8 15 2 3 -1. - <_>9 15 1 3 2. - 0 - -5.7089990004897118e-003 - -0.6806722879409790 - 0.0355459600687027 - <_> - - <_> - - - - <_>8 6 3 3 -1. - <_>8 7 3 1 3. - 0 - 6.8668760359287262e-003 - -0.0648868680000305 - 0.5226590037345886 - <_> - - <_> - - - - <_>1 2 1 2 -1. - <_>1 3 1 1 2. - 0 - 5.4602831369265914e-004 - 0.1092441976070404 - -0.3028525114059448 - <_> - - <_> - - - - <_>5 1 7 6 -1. - <_>5 3 7 2 3. - 0 - 6.4349039457738400e-003 - -0.1656195074319840 - 0.1902212947607040 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - -0.0101124197244644 - 0.7452300190925598 - -0.0383473299443722 - <_> - - <_> - - - - <_>13 7 3 4 -1. - <_>13 9 3 2 2. - 0 - -7.5152877252548933e-004 - -0.2814728021621704 - 0.1132168993353844 - <_> - - <_> - - - - <_>5 10 3 3 -1. - <_>5 11 3 1 3. - 0 - 2.8225290589034557e-003 - -0.1236440017819405 - 0.2560853064060211 - <_> - - <_> - - - - <_>7 5 3 1 -1. - <_>8 5 1 1 3. - 0 - 2.2058798931539059e-003 - 0.0573342815041542 - -0.5615208148956299 - <_> - - <_> - - - - <_>0 0 11 16 -1. - <_>0 8 11 8 2. - 0 - 0.2816418111324310 - 0.0420923791825771 - -0.6492379903793335 - <_> - - <_> - - - - <_>7 4 3 2 -1. - <_>8 4 1 2 3. - 0 - -4.2593148536980152e-003 - -0.6485499739646912 - 0.0435026586055756 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 2.6586679741740227e-003 - -0.0935261398553848 - 0.3415873050689697 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 2.0971989724785089e-003 - -0.1106892973184586 - 0.3176026940345764 - <_> - - <_> - - - - <_>13 5 2 2 -1. - <_>13 6 2 1 2. - 0 - -1.0267860488966107e-003 - -0.3761210143566132 - 0.0989731103181839 - -1.8389279842376709 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>8 8 2 6 -1. - <_>8 10 2 2 3. - 0 - 2.6354179717600346e-003 - -0.5249680876731873 - 0.2771103084087372 - <_> - - <_> - - - - <_>5 6 3 4 -1. - <_>6 6 1 4 3. - 0 - 2.6279650628566742e-003 - -0.3219544887542725 - 0.3701362907886505 - <_> - - <_> - - - - <_>10 0 10 8 -1. - <_>10 0 5 4 2. - <_>15 4 5 4 2. - 0 - -5.8889109641313553e-003 - 0.2377752959728241 - -0.4180032908916473 - <_> - - <_> - - - - <_>9 7 2 12 -1. - <_>9 11 2 4 3. - 0 - 1.9291159696877003e-003 - -0.4712206125259399 - 0.1369217038154602 - <_> - - <_> - - - - <_>6 3 12 12 -1. - <_>6 3 6 6 2. - <_>12 9 6 6 2. - 0 - -0.0152054801583290 - -0.3961842954158783 - 0.1740240007638931 - <_> - - <_> - - - - <_>5 7 4 6 -1. - <_>5 9 4 2 3. - 0 - 2.3393579758703709e-003 - -0.3850890100002289 - 0.1565911024808884 - <_> - - <_> - - - - <_>5 7 10 10 -1. - <_>5 7 5 5 2. - <_>10 12 5 5 2. - 0 - 0.0423956215381622 - 0.1047870963811874 - -0.6216400265693665 - <_> - - <_> - - - - <_>2 1 4 15 -1. - <_>4 1 2 15 2. - 0 - -0.0569596402347088 - 0.5122585892677307 - -0.1268478035926819 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>13 11 1 2 2. - 0 - -7.2845568865886889e-006 - 0.1513689011335373 - -0.3118562102317810 - <_> - - <_> - - - - <_>6 11 10 6 -1. - <_>6 14 10 3 2. - 0 - -0.0796337500214577 - -0.8432474732398987 - 0.0449784286320210 - <_> - - <_> - - - - <_>5 12 4 3 -1. - <_>5 13 4 1 3. - 0 - 5.9168688021600246e-003 - -0.1074597984552383 - 0.4743410050868988 - <_> - - <_> - - - - <_>6 12 1 3 -1. - <_>6 13 1 1 3. - 0 - -1.4736950397491455e-003 - 0.3606745004653931 - -0.1476064026355743 - <_> - - <_> - - - - <_>3 7 12 8 -1. - <_>3 7 6 4 2. - <_>9 11 6 4 2. - 0 - -0.0396309718489647 - -0.6583898067474365 - 0.0748667865991592 - <_> - - <_> - - - - <_>6 2 2 6 -1. - <_>6 4 2 2 3. - 0 - 6.2401412287726998e-004 - -0.2619565129280090 - 0.1565213948488236 - <_> - - <_> - - - - <_>11 11 5 4 -1. - <_>11 13 5 2 2. - 0 - -2.3399210476782173e-005 - 0.1215751022100449 - -0.3032081127166748 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>8 8 3 6 2. - 0 - 0.0308020301163197 - 0.0444087311625481 - -0.6660987734794617 - <_> - - <_> - - - - <_>5 12 4 2 -1. - <_>7 12 2 2 2. - 0 - 1.4787449617870152e-004 - -0.2444950938224793 - 0.1472305059432983 - <_> - - <_> - - - - <_>3 13 3 7 -1. - <_>4 13 1 7 3. - 0 - 4.8630568198859692e-003 - -0.1126781031489372 - 0.3259679973125458 - <_> - - <_> - - - - <_>11 7 5 9 -1. - <_>11 10 5 3 3. - 0 - 0.0621918812394142 - 0.0574399605393410 - -0.6403107047080994 - <_> - - <_> - - - - <_>4 3 15 9 -1. - <_>4 6 15 3 3. - 0 - 1.4668420189991593e-003 - 0.0953566431999207 - -0.3372788131237030 - <_> - - <_> - - - - <_>15 13 2 2 -1. - <_>15 13 1 1 2. - <_>16 14 1 1 2. - 0 - -1.4742349776497576e-005 - 0.1975961029529572 - -0.1708389967679977 - <_> - - <_> - - - - <_>6 5 6 13 -1. - <_>9 5 3 13 2. - 0 - -0.0324956700205803 - -0.3684872984886169 - 0.0903633311390877 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -1.5333830378949642e-003 - 0.3225637972354889 - -0.1041681990027428 - <_> - - <_> - - - - <_>6 1 2 15 -1. - <_>6 6 2 5 3. - 0 - -0.0279989093542099 - -0.4909791052341461 - 0.0826537832617760 - <_> - - <_> - - - - <_>11 0 4 3 -1. - <_>13 0 2 3 2. - 0 - 4.9783890135586262e-003 - 0.0732380300760269 - -0.4405778050422669 - <_> - - <_> - - - - <_>0 0 2 4 -1. - <_>0 2 2 2 2. - 0 - 6.8226028233766556e-003 - 0.0767660290002823 - -0.4146091043949127 - <_> - - <_> - - - - <_>4 8 9 3 -1. - <_>4 9 9 1 3. - 0 - 0.0114978803321719 - -0.0914401113986969 - 0.4009974896907806 - <_> - - <_> - - - - <_>6 5 6 2 -1. - <_>8 5 2 2 3. - 0 - -0.0110030695796013 - -0.5741754174232483 - 0.0727767273783684 - <_> - - <_> - - - - <_>4 15 2 2 -1. - <_>4 15 1 1 2. - <_>5 16 1 1 2. - 0 - 4.9345887964591384e-004 - -0.1335359066724777 - 0.2457520961761475 - <_> - - <_> - - - - <_>6 14 2 3 -1. - <_>6 15 2 1 3. - 0 - 2.2130589932203293e-003 - -0.1075384020805359 - 0.3163211941719055 - <_> - - <_> - - - - <_>6 12 1 6 -1. - <_>6 15 1 3 2. - 0 - 5.1011620089411736e-003 - 0.0789853185415268 - -0.4294820129871368 - <_> - - <_> - - - - <_>5 9 2 10 -1. - <_>5 14 2 5 2. - 0 - -0.0373056381940842 - -0.6792119145393372 - 0.0450499393045902 - <_> - - <_> - - - - <_>3 6 3 10 -1. - <_>4 6 1 10 3. - 0 - -6.1271698214113712e-003 - 0.2306205928325653 - -0.1455928981304169 - <_> - - <_> - - - - <_>3 7 3 5 -1. - <_>4 7 1 5 3. - 0 - 7.6517700217664242e-003 - -0.0903551727533340 - 0.4307296872138977 - <_> - - <_> - - - - <_>11 0 6 2 -1. - <_>13 0 2 2 3. - 0 - -0.0112808700650930 - -0.4785071909427643 - 0.0746744498610497 - <_> - - <_> - - - - <_>11 12 2 1 -1. - <_>12 12 1 1 2. - 0 - -1.4724049833603203e-005 - 0.1445989012718201 - -0.2253564000129700 - <_> - - <_> - - - - <_>11 12 2 1 -1. - <_>12 12 1 1 2. - 0 - -1.9895960576832294e-003 - -0.6152756810188294 - 0.0549059212207794 - <_> - - <_> - - - - <_>6 16 1 3 -1. - <_>6 17 1 1 3. - 0 - 1.6876959707587957e-003 - -0.0976197868585587 - 0.3300470113754273 - <_> - - <_> - - - - <_>10 16 5 3 -1. - <_>10 17 5 1 3. - 0 - 9.8390737548470497e-003 - 0.0409724116325378 - -0.7551510930061340 - <_> - - <_> - - - - <_>7 13 1 3 -1. - <_>7 14 1 1 3. - 0 - 1.3243829598650336e-003 - -0.1004628017544746 - 0.3066510856151581 - <_> - - <_> - - - - <_>12 4 8 2 -1. - <_>12 5 8 1 2. - 0 - 3.1150300055742264e-003 - 0.0898044705390930 - -0.3352459967136383 - <_> - - <_> - - - - <_>8 7 4 3 -1. - <_>10 7 2 3 2. - 0 - 7.3907422120100819e-006 - -0.2241040021181107 - 0.1328824013471603 - <_> - - <_> - - - - <_>12 10 5 9 -1. - <_>12 13 5 3 3. - 0 - 0.0325595699250698 - 0.0501133985817432 - -0.5424032807350159 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - -2.9865119140595198e-003 - 0.2838534116744995 - -0.1116421967744827 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 1.6058710170909762e-003 - -0.1202408000826836 - 0.2903267145156860 - <_> - - <_> - - - - <_>11 0 2 4 -1. - <_>12 0 1 4 2. - 0 - 2.2018649615347385e-003 - 0.0781101286411285 - -0.4384604990482330 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - -5.7107508182525635e-003 - -0.3260880112648010 - 0.0929412990808487 - <_> - - <_> - - - - <_>6 12 3 3 -1. - <_>6 13 3 1 3. - 0 - 8.9503038907423615e-004 - -0.1350415945053101 - 0.2233189940452576 - <_> - - <_> - - - - <_>1 3 6 12 -1. - <_>1 9 6 6 2. - 0 - 0.0772592499852180 - 0.0732213407754898 - -0.4171401858329773 - <_> - - <_> - - - - <_>1 5 5 10 -1. - <_>1 10 5 5 2. - 0 - -0.0101456101983786 - -0.2733097076416016 - 0.1409918963909149 - <_> - - <_> - - - - <_>10 14 1 2 -1. - <_>10 15 1 1 2. - 0 - -7.0878718361200299e-006 - 0.1260295957326889 - -0.2325371950864792 - <_> - - <_> - - - - <_>9 5 2 8 -1. - <_>9 5 1 4 2. - <_>10 9 1 4 2. - 0 - -8.0232005566358566e-003 - -0.6268284916877747 - 0.0441995784640312 - <_> - - <_> - - - - <_>17 12 3 1 -1. - <_>18 12 1 1 3. - 0 - -1.5409339684993029e-003 - 0.3215487897396088 - -0.0958197265863419 - <_> - - <_> - - - - <_>5 16 2 3 -1. - <_>5 17 2 1 3. - 0 - -1.3815560378134251e-003 - 0.2390906065702438 - -0.1084505990147591 - <_> - - <_> - - - - <_>11 18 7 2 -1. - <_>11 19 7 1 2. - 0 - -8.5559524595737457e-003 - -0.6288099288940430 - 0.0469044595956802 - <_> - - <_> - - - - <_>12 6 3 8 -1. - <_>13 6 1 8 3. - 0 - 1.4967939932830632e-005 - -0.1733105033636093 - 0.1626560986042023 - -1.8807189464569092 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>11 6 6 5 -1. - <_>14 6 3 5 2. - 0 - -9.2911375686526299e-003 - 0.2667650878429413 - -0.4868162870407105 - <_> - - <_> - - - - <_>9 7 4 6 -1. - <_>9 7 2 3 2. - <_>11 10 2 3 2. - 0 - -1.0201609693467617e-003 - 0.2146916985511780 - -0.4297147095203400 - <_> - - <_> - - - - <_>10 8 6 6 -1. - <_>10 10 6 2 3. - 0 - 1.8099240260198712e-003 - -0.4708526134490967 - 0.1729315072298050 - <_> - - <_> - - - - <_>2 1 4 17 -1. - <_>4 1 2 17 2. - 0 - -0.0631954520940781 - 0.5586851239204407 - -0.1192208006978035 - <_> - - <_> - - - - <_>7 1 9 4 -1. - <_>7 3 9 2 2. - 0 - 1.5157799934968352e-003 - -0.3308742940425873 - 0.1425653994083405 - <_> - - <_> - - - - <_>7 6 3 4 -1. - <_>8 6 1 4 3. - 0 - -3.1134260352700949e-003 - 0.3189736008644104 - -0.1556340008974075 - <_> - - <_> - - - - <_>5 9 8 2 -1. - <_>9 9 4 2 2. - 0 - 6.7187240347266197e-003 - 0.1130800992250443 - -0.4614211022853851 - <_> - - <_> - - - - <_>11 12 1 4 -1. - <_>11 14 1 2 2. - 0 - -1.4929190001566894e-005 - 0.1130312010645866 - -0.3826808929443359 - <_> - - <_> - - - - <_>13 11 1 3 -1. - <_>13 12 1 1 3. - 0 - -1.9974811002612114e-003 - -0.6783381104469299 - 0.0555626712739468 - <_> - - <_> - - - - <_>10 19 4 1 -1. - <_>12 19 2 1 2. - 0 - 4.4361899199429899e-005 - -0.2147872000932694 - 0.1752458959817886 - <_> - - <_> - - - - <_>5 4 10 12 -1. - <_>5 4 5 6 2. - <_>10 10 5 6 2. - 0 - -9.4379335641860962e-003 - -0.2900882065296173 - 0.1049441024661064 - <_> - - <_> - - - - <_>4 6 5 6 -1. - <_>4 9 5 3 2. - 0 - 1.0263459989801049e-004 - -0.3680945038795471 - 0.1158011034131050 - <_> - - <_> - - - - <_>5 10 4 8 -1. - <_>5 14 4 4 2. - 0 - -0.0435120798647404 - -0.5796747803688049 - 0.0451606288552284 - <_> - - <_> - - - - <_>7 5 3 3 -1. - <_>7 6 3 1 3. - 0 - 2.3894330952316523e-003 - -0.1244383007287979 - 0.2572689950466156 - <_> - - <_> - - - - <_>7 4 2 2 -1. - <_>8 4 1 2 2. - 0 - 3.6203579511493444e-003 - 0.0483852699398994 - -0.6445654034614563 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - -4.2086638859473169e-004 - -0.2996363937854767 - 0.0975081324577332 - <_> - - <_> - - - - <_>0 3 6 16 -1. - <_>2 3 2 16 3. - 0 - -0.0363201610743999 - 0.3249903023242950 - -0.1037318035960197 - <_> - - <_> - - - - <_>2 6 3 12 -1. - <_>3 6 1 12 3. - 0 - 5.5678240023553371e-003 - -0.1286551952362061 - 0.2772139012813568 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>12 12 2 1 2. - 0 - 1.4324679505079985e-003 - 0.0630446672439575 - -0.5041165947914124 - <_> - - <_> - - - - <_>18 0 2 13 -1. - <_>19 0 1 13 2. - 0 - 1.2268769787624478e-003 - -0.1707358956336975 - 0.1794432997703552 - <_> - - <_> - - - - <_>9 14 5 4 -1. - <_>9 16 5 2 2. - 0 - 4.0125530213117599e-003 - 0.0721001327037811 - -0.4132161140441895 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 4.7377590090036392e-003 - -0.0901008769869804 - 0.3430379927158356 - <_> - - <_> - - - - <_>10 14 4 3 -1. - <_>10 15 4 1 3. - 0 - 4.3965759687125683e-003 - 0.0547530911862850 - -0.5917593836784363 - <_> - - <_> - - - - <_>12 13 1 3 -1. - <_>12 14 1 1 3. - 0 - 1.8952810205519199e-003 - 0.0401207096874714 - -0.6490725874900818 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -1.3425230281427503e-003 - 0.3032169938087463 - -0.1100924015045166 - <_> - - <_> - - - - <_>6 6 6 14 -1. - <_>9 6 3 14 2. - 0 - -0.0464057400822639 - -0.4602647125720978 - 0.0703070312738419 - <_> - - <_> - - - - <_>5 11 6 3 -1. - <_>8 11 3 3 2. - 0 - 0.0258755497634411 - 0.0389873199164867 - -0.6484752297401428 - <_> - - <_> - - - - <_>5 7 2 4 -1. - <_>6 7 1 4 2. - 0 - 1.0986380511894822e-003 - -0.1645876020193100 - 0.1813354045152664 - <_> - - <_> - - - - <_>7 3 11 9 -1. - <_>7 6 11 3 3. - 0 - -3.9583959733135998e-004 - 0.0978056564927101 - -0.2755435109138489 - <_> - - <_> - - - - <_>10 4 9 6 -1. - <_>10 6 9 2 3. - 0 - -0.0456339903175831 - -0.5427601933479309 - 0.0548557713627815 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - -4.7068470157682896e-003 - 0.4096142053604126 - -0.0696870908141136 - <_> - - <_> - - - - <_>0 0 3 1 -1. - <_>1 0 1 1 3. - 0 - 2.0004810357932001e-004 - 0.1290896981954575 - -0.2109135985374451 - <_> - - <_> - - - - <_>9 4 4 6 -1. - <_>9 4 2 3 2. - <_>11 7 2 3 2. - 0 - 1.1126570170745254e-003 - -0.2221307009458542 - 0.1245858967304230 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -1.4747029636055231e-003 - 0.2918517887592316 - -0.0907562375068665 - <_> - - <_> - - - - <_>6 4 3 2 -1. - <_>7 4 1 2 3. - 0 - 4.3162931688129902e-003 - 0.0615429095923901 - -0.5106865167617798 - <_> - - <_> - - - - <_>7 14 1 3 -1. - <_>7 15 1 1 3. - 0 - 2.0302709890529513e-004 - -0.1563991010189056 - 0.1646644026041031 - <_> - - <_> - - - - <_>1 3 1 2 -1. - <_>1 4 1 1 2. - 0 - 3.4639390651136637e-004 - 0.1077354028820992 - -0.2553279995918274 - <_> - - <_> - - - - <_>7 16 2 3 -1. - <_>7 17 2 1 3. - 0 - 1.5631220303475857e-003 - -0.0954280197620392 - 0.2545036077499390 - <_> - - <_> - - - - <_>19 6 1 2 -1. - <_>19 7 1 1 2. - 0 - 5.5476918350905180e-004 - 0.0797742530703545 - -0.3079142868518829 - <_> - - <_> - - - - <_>6 15 2 3 -1. - <_>6 16 2 1 3. - 0 - 2.7690480928868055e-003 - -0.0919008925557137 - 0.3019863963127136 - <_> - - <_> - - - - <_>11 13 1 3 -1. - <_>11 14 1 1 3. - 0 - 1.1085179867222905e-003 - 0.0626248866319656 - -0.4168049097061157 - <_> - - <_> - - - - <_>17 10 3 1 -1. - <_>18 10 1 1 3. - 0 - 3.4288389142602682e-003 - -0.0574735589325428 - 0.4729351997375488 - <_> - - <_> - - - - <_>10 0 6 1 -1. - <_>13 0 3 1 2. - 0 - -2.0233790855854750e-003 - -0.2412866055965424 - 0.1080666035413742 - <_> - - <_> - - - - <_>14 0 6 4 -1. - <_>14 0 3 2 2. - <_>17 2 3 2 2. - 0 - -9.1446418082341552e-004 - 0.1799096018075943 - -0.1603191941976547 - <_> - - <_> - - - - <_>12 7 4 6 -1. - <_>12 10 4 3 2. - 0 - 0.0388806909322739 - 0.0391326211392879 - -0.6408532261848450 - <_> - - <_> - - - - <_>14 5 1 2 -1. - <_>14 6 1 1 2. - 0 - 1.2836069799959660e-003 - 0.0529120489954948 - -0.4391455948352814 - <_> - - <_> - - - - <_>6 13 4 3 -1. - <_>6 14 4 1 3. - 0 - 3.5828219261020422e-003 - -0.0974621623754501 - 0.3077293038368225 - <_> - - <_> - - - - <_>5 12 4 3 -1. - <_>5 13 4 1 3. - 0 - 2.3203529417514801e-003 - -0.1092979982495308 - 0.2673572897911072 - <_> - - <_> - - - - <_>9 3 2 1 -1. - <_>10 3 1 1 2. - 0 - 1.1978139809798449e-004 - 0.1162312999367714 - -0.2358634024858475 - <_> - - <_> - - - - <_>9 3 3 3 -1. - <_>10 3 1 3 3. - 0 - -2.8259279206395149e-003 - -0.4193572998046875 - 0.0570084005594254 - <_> - - <_> - - - - <_>9 5 3 1 -1. - <_>10 5 1 1 3. - 0 - 2.4410230107605457e-003 - 0.0427068807184696 - -0.5336285829544067 - <_> - - <_> - - - - <_>7 8 4 3 -1. - <_>7 9 4 1 3. - 0 - 2.6899650692939758e-003 - -0.1135182976722717 - 0.2477902024984360 - <_> - - <_> - - - - <_>1 4 1 6 -1. - <_>1 6 1 2 3. - 0 - -3.1081750057637691e-003 - -0.2948892116546631 - 0.0825432091951370 - <_> - - <_> - - - - <_>3 2 3 11 -1. - <_>4 2 1 11 3. - 0 - -6.6210748627781868e-003 - 0.2295868992805481 - -0.1144362017512322 - <_> - - <_> - - - - <_>3 2 3 18 -1. - <_>4 2 1 18 3. - 0 - 4.6786409802734852e-003 - -0.1287520974874497 - 0.2677769958972931 - <_> - - <_> - - - - <_>5 12 6 2 -1. - <_>8 12 3 2 2. - 0 - -1.2973829871043563e-003 - -0.2728042900562286 - 0.0964717268943787 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 2.9523740522563457e-003 - -0.0870406925678253 - 0.2920745015144348 - <_> - - <_> - - - - <_>7 17 3 1 -1. - <_>8 17 1 1 3. - 0 - -1.6173559706658125e-003 - -0.4020785093307495 - 0.0653864666819572 - <_> - - <_> - - - - <_>3 10 8 6 -1. - <_>3 13 8 3 2. - 0 - -0.0754177570343018 - -0.8972333073616028 - 0.0246026907116175 - <_> - - <_> - - - - <_>3 2 3 17 -1. - <_>4 2 1 17 3. - 0 - -2.5402200408279896e-003 - 0.1525865048170090 - -0.1502546072006226 - <_> - - <_> - - - - <_>4 9 8 1 -1. - <_>8 9 4 1 2. - 0 - 3.7864660844206810e-003 - 0.0764772072434425 - -0.3388194143772125 - <_> - - <_> - - - - <_>2 7 3 6 -1. - <_>3 7 1 6 3. - 0 - -0.0140055101364851 - 0.4442639052867889 - -0.0590039305388927 - <_> - - <_> - - - - <_>18 4 1 2 -1. - <_>18 5 1 1 2. - 0 - 5.5956508731469512e-004 - 0.0740071237087250 - -0.3560470938682556 - <_> - - <_> - - - - <_>7 8 2 6 -1. - <_>7 10 2 2 3. - 0 - 2.5946850655600429e-004 - -0.2812618911266327 - 0.0873992070555687 - <_> - - <_> - - - - <_>11 12 2 3 -1. - <_>11 13 2 1 3. - 0 - 4.4409232214093208e-003 - 0.0286236591637135 - -0.7728418707847595 - <_> - - <_> - - - - <_>16 11 3 1 -1. - <_>17 11 1 1 3. - 0 - -2.3343560751527548e-003 - 0.3546060025691986 - -0.0712075382471085 - <_> - - <_> - - - - <_>16 11 3 2 -1. - <_>17 11 1 2 3. - 0 - 9.7654951969161630e-004 - -0.1013842001557350 - 0.2254537045955658 - <_> - - <_> - - - - <_>15 3 1 4 -1. - <_>15 5 1 2 2. - 0 - -4.3227209243923426e-004 - -0.2109587937593460 - 0.1227314993739128 - -1.7268099784851074 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>11 0 9 11 -1. - <_>14 0 3 11 3. - 0 - -0.0124802095815539 - 0.2611210942268372 - -0.4700151979923248 - <_> - - <_> - - - - <_>7 0 5 6 -1. - <_>7 3 5 3 2. - 0 - 0.0354509614408016 - -0.2000845968723297 - 0.4771861135959625 - <_> - - <_> - - - - <_>8 7 2 6 -1. - <_>8 10 2 3 2. - 0 - 2.0369330886751413e-003 - -0.4770315885543823 - 0.1513264030218124 - <_> - - <_> - - - - <_>11 11 4 6 -1. - <_>11 14 4 3 2. - 0 - -4.3946420191787183e-005 - 0.1228848025202751 - -0.5179628729820252 - <_> - - <_> - - - - <_>4 7 3 2 -1. - <_>5 7 1 2 3. - 0 - -3.8480788934975863e-003 - 0.4111368060112000 - -0.1459532976150513 - <_> - - <_> - - - - <_>3 7 3 2 -1. - <_>4 7 1 2 3. - 0 - -2.8316550888121128e-003 - 0.2871097028255463 - -0.1762959957122803 - <_> - - <_> - - - - <_>11 11 2 3 -1. - <_>11 12 2 1 3. - 0 - 2.5026081129908562e-003 - 0.0796688422560692 - -0.5780801177024841 - <_> - - <_> - - - - <_>5 9 4 6 -1. - <_>5 12 4 3 2. - 0 - 3.0812958721071482e-004 - 0.0828387066721916 - -0.4254018068313599 - <_> - - <_> - - - - <_>16 4 2 3 -1. - <_>17 4 1 3 2. - 0 - 6.1186961829662323e-004 - 0.1364181041717529 - -0.3059141933917999 - <_> - - <_> - - - - <_>12 12 2 1 -1. - <_>13 12 1 1 2. - 0 - -1.4354350241774227e-005 - 0.1419748961925507 - -0.2568199932575226 - <_> - - <_> - - - - <_>8 5 6 4 -1. - <_>8 5 3 2 2. - <_>11 7 3 2 2. - 0 - 1.6148330178111792e-003 - -0.2623932957649231 - 0.1328839063644409 - <_> - - <_> - - - - <_>10 15 3 3 -1. - <_>11 15 1 3 3. - 0 - 2.0318101160228252e-003 - 0.0757495686411858 - -0.4314146041870117 - <_> - - <_> - - - - <_>3 7 3 7 -1. - <_>4 7 1 7 3. - 0 - 9.5563679933547974e-003 - -0.0914244800806046 - 0.4000456929206848 - <_> - - <_> - - - - <_>11 4 1 2 -1. - <_>11 5 1 1 2. - 0 - -7.8439561184495687e-004 - -0.3661993145942688 - 0.0917778164148331 - <_> - - <_> - - - - <_>3 9 3 5 -1. - <_>4 9 1 5 3. - 0 - -3.9661130867898464e-003 - 0.2369821071624756 - -0.1428164988756180 - <_> - - <_> - - - - <_>10 15 3 3 -1. - <_>11 15 1 3 3. - 0 - -2.3194469977170229e-003 - -0.4224534034729004 - 0.0786841064691544 - <_> - - <_> - - - - <_>3 3 6 12 -1. - <_>3 9 6 6 2. - 0 - -0.0734902024269104 - -0.6221855282783508 - 0.0404968708753586 - <_> - - <_> - - - - <_>3 5 5 6 -1. - <_>3 7 5 2 3. - 0 - -3.6803178954869509e-003 - 0.1261202991008759 - -0.2099042981863022 - <_> - - <_> - - - - <_>6 6 4 11 -1. - <_>8 6 2 11 2. - 0 - -0.0410192906856537 - -0.8031694293022156 - 0.0279939491301775 - <_> - - <_> - - - - <_>6 5 2 6 -1. - <_>7 5 1 6 2. - 0 - -4.8213129048235714e-004 - 0.1482598036527634 - -0.1786963045597076 - <_> - - <_> - - - - <_>2 6 3 8 -1. - <_>3 6 1 8 3. - 0 - -0.0165982507169247 - 0.4144228100776672 - -0.0640516877174377 - <_> - - <_> - - - - <_>6 4 3 1 -1. - <_>7 4 1 1 3. - 0 - -1.0631670011207461e-003 - -0.3346652090549469 - 0.0824259966611862 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 1.8658409826457500e-003 - -0.1311978995800018 - 0.2318338006734848 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -2.5827190838754177e-003 - 0.3841595053672791 - -0.0841216668486595 - <_> - - <_> - - - - <_>13 14 2 3 -1. - <_>13 15 2 1 3. - 0 - 1.7159619601443410e-003 - 0.0769715383648872 - -0.4109899103641510 - <_> - - <_> - - - - <_>10 11 2 3 -1. - <_>10 12 2 1 3. - 0 - -3.9140181615948677e-003 - -0.6250861883163452 - 0.0384184606373310 - <_> - - <_> - - - - <_>19 5 1 3 -1. - <_>19 6 1 1 3. - 0 - 4.2724498780444264e-004 - 0.0860165730118752 - -0.2697522938251495 - <_> - - <_> - - - - <_>5 14 5 3 -1. - <_>5 15 5 1 3. - 0 - 3.3992920070886612e-003 - -0.1017651036381722 - 0.2703082859516144 - <_> - - <_> - - - - <_>4 10 10 4 -1. - <_>9 10 5 4 2. - 0 - -0.0364572815597057 - -0.4926198124885559 - 0.0558542497456074 - <_> - - <_> - - - - <_>12 12 2 3 -1. - <_>12 13 2 1 3. - 0 - 1.6230379696935415e-003 - 0.0575670786201954 - -0.4205349981784821 - <_> - - <_> - - - - <_>5 13 4 3 -1. - <_>5 14 4 1 3. - 0 - 4.6655549667775631e-003 - -0.0911583974957466 - 0.3209528028964996 - <_> - - <_> - - - - <_>6 12 3 3 -1. - <_>6 13 3 1 3. - 0 - 3.1331549398601055e-003 - -0.0969326570630074 - 0.3407345116138458 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>7 15 1 2 3. - 0 - -1.6835830174386501e-003 - -0.3676624894142151 - 0.0822260826826096 - <_> - - <_> - - - - <_>4 11 8 2 -1. - <_>8 11 4 2 2. - 0 - 0.0277286507189274 - 0.0401174984872341 - -0.6519839167594910 - <_> - - <_> - - - - <_>14 3 6 8 -1. - <_>14 7 6 4 2. - 0 - 0.0950153097510338 - 0.0230651199817657 - -0.8888198137283325 - <_> - - <_> - - - - <_>8 5 12 5 -1. - <_>12 5 4 5 3. - 0 - 0.0747556164860725 - -0.0639468729496002 - 0.4739970862865448 - <_> - - <_> - - - - <_>5 14 6 2 -1. - <_>7 14 2 2 3. - 0 - 0.0166933406144381 - 0.0464772582054138 - -0.7115241885185242 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 1.2088769581168890e-003 - -0.1135926991701126 - 0.2242414951324463 - <_> - - <_> - - - - <_>13 12 1 3 -1. - <_>13 13 1 1 3. - 0 - -6.1751517932862043e-004 - -0.3126823008060455 - 0.0850189328193665 - <_> - - <_> - - - - <_>6 3 14 12 -1. - <_>6 3 7 6 2. - <_>13 9 7 6 2. - 0 - 8.5786692798137665e-003 - -0.1555946022272110 - 0.1564093977212906 - <_> - - <_> - - - - <_>18 6 2 2 -1. - <_>18 7 2 1 2. - 0 - 6.1184767400845885e-004 - 0.0944039374589920 - -0.2652013897895813 - <_> - - <_> - - - - <_>14 7 6 10 -1. - <_>16 7 2 10 3. - 0 - -3.4570440184324980e-003 - 0.1514606028795242 - -0.1622052937746048 - <_> - - <_> - - - - <_>9 8 2 3 -1. - <_>9 9 2 1 3. - 0 - 1.3953070156276226e-003 - -0.0999962165951729 - 0.2499831020832062 - <_> - - <_> - - - - <_>0 6 2 4 -1. - <_>0 8 2 2 2. - 0 - 3.5910680890083313e-003 - 0.0810116827487946 - -0.3008154928684235 - <_> - - <_> - - - - <_>9 0 6 2 -1. - <_>11 0 2 2 3. - 0 - 5.4192831739783287e-003 - 0.0676500424742699 - -0.3235566020011902 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>12 0 4 1 2. - <_>16 1 4 1 2. - 0 - -1.1379310162737966e-003 - 0.1888744980096817 - -0.1272972971200943 - <_> - - <_> - - - - <_>3 10 14 6 -1. - <_>3 12 14 2 3. - 0 - 9.1047259047627449e-003 - 0.1016054004430771 - -0.2228015065193176 - <_> - - <_> - - - - <_>6 7 3 4 -1. - <_>7 7 1 4 3. - 0 - 6.5050171688199043e-003 - -0.0729864165186882 - 0.3577027022838593 - <_> - - <_> - - - - <_>10 13 2 1 -1. - <_>11 13 1 1 2. - 0 - -1.4676549653813709e-005 - 0.1469310969114304 - -0.1740354001522064 - <_> - - <_> - - - - <_>11 6 5 10 -1. - <_>11 11 5 5 2. - 0 - -9.4403158873319626e-003 - -0.2653675079345703 - 0.0966195464134216 - <_> - - <_> - - - - <_>3 16 4 4 -1. - <_>3 16 2 2 2. - <_>5 18 2 2 2. - 0 - -4.2933300137519836e-003 - 0.2565683126449585 - -0.1055020987987518 - <_> - - <_> - - - - <_>6 2 3 3 -1. - <_>7 2 1 3 3. - 0 - 4.3133171275258064e-003 - 0.0659365728497505 - -0.4571993947029114 - <_> - - <_> - - - - <_>4 0 8 20 -1. - <_>4 0 4 10 2. - <_>8 10 4 10 2. - 0 - 0.0588544681668282 - 0.0679182633757591 - -0.3307807147502899 - <_> - - <_> - - - - <_>3 16 3 4 -1. - <_>4 16 1 4 3. - 0 - -2.8407620266079903e-003 - 0.2395350039005280 - -0.0920921564102173 - <_> - - <_> - - - - <_>3 16 3 1 -1. - <_>4 16 1 1 3. - 0 - 9.6359942108392715e-004 - -0.1098238006234169 - 0.2646299898624420 - <_> - - <_> - - - - <_>11 13 1 2 -1. - <_>11 14 1 1 2. - 0 - -1.4724590073456056e-005 - 0.1111116036772728 - -0.2270458042621613 - <_> - - <_> - - - - <_>11 13 1 3 -1. - <_>11 14 1 1 3. - 0 - -8.0675468780100346e-004 - -0.3633514046669006 - 0.0781226530671120 - <_> - - <_> - - - - <_>6 19 14 1 -1. - <_>13 19 7 1 2. - 0 - 7.3296198388561606e-004 - -0.1560512930154800 - 0.1518490016460419 - <_> - - <_> - - - - <_>5 7 3 3 -1. - <_>6 7 1 3 3. - 0 - 6.3753738068044186e-003 - -0.0719579532742500 - 0.2972387969493866 - <_> - - <_> - - - - <_>7 4 3 2 -1. - <_>8 4 1 2 3. - 0 - 4.6390579082071781e-003 - 0.0359696000814438 - -0.6113234758377075 - <_> - - <_> - - - - <_>9 18 2 1 -1. - <_>10 18 1 1 2. - 0 - -7.1079272311180830e-004 - -0.2880684137344360 - 0.0693146288394928 - <_> - - <_> - - - - <_>6 17 2 3 -1. - <_>6 18 2 1 3. - 0 - 2.9162289574742317e-003 - -0.0759684592485428 - 0.3268168866634369 - <_> - - <_> - - - - <_>9 7 3 6 -1. - <_>9 9 3 2 3. - 0 - -0.0178531408309937 - 0.4420630931854248 - -0.0481740310788155 - <_> - - <_> - - - - <_>9 12 3 7 -1. - <_>10 12 1 7 3. - 0 - 8.3874985575675964e-003 - 0.0489138998091221 - -0.5441532731056213 - <_> - - <_> - - - - <_>8 9 1 3 -1. - <_>8 10 1 1 3. - 0 - 2.9458320568664931e-005 - -0.2113123983144760 - 0.1062937006354332 - <_> - - <_> - - - - <_>8 5 12 11 -1. - <_>12 5 4 11 3. - 0 - -0.0981927067041397 - 0.3531824052333832 - -0.0692968666553497 - <_> - - <_> - - - - <_>2 0 1 2 -1. - <_>2 1 1 1 2. - 0 - 4.6140368795022368e-004 - 0.0962707772850990 - -0.2581192851066589 - <_> - - <_> - - - - <_>0 0 1 2 -1. - <_>0 1 1 1 2. - 0 - -2.4016610404942185e-004 - -0.2297642976045609 - 0.0999848917126656 - <_> - - <_> - - - - <_>8 0 12 16 -1. - <_>12 0 4 16 3. - 0 - 0.0378824807703495 - -0.1036543995141983 - 0.2316477000713348 - <_> - - <_> - - - - <_>0 0 1 2 -1. - <_>0 1 1 1 2. - 0 - 3.2621581340208650e-004 - 0.0979339405894279 - -0.2368970066308975 - -1.6056820154190063 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>11 0 9 11 -1. - <_>14 0 3 11 3. - 0 - -0.0367441214621067 - 0.3407934010028839 - -0.3177989125251770 - <_> - - <_> - - - - <_>5 5 3 6 -1. - <_>6 5 1 6 3. - 0 - 2.1955010015517473e-003 - -0.2872959077358246 - 0.2586979866027832 - <_> - - <_> - - - - <_>8 8 3 4 -1. - <_>8 10 3 2 2. - 0 - 8.3034839481115341e-003 - -0.2180044949054718 - 0.2675926983356476 - <_> - - <_> - - - - <_>13 2 6 12 -1. - <_>13 8 6 6 2. - 0 - 2.6289420202374458e-003 - -0.3600608110427856 - 0.1463983952999115 - <_> - - <_> - - - - <_>10 6 4 14 -1. - <_>10 13 4 7 2. - 0 - 1.9458869937807322e-003 - 0.1367772072553635 - -0.4205875992774963 - <_> - - <_> - - - - <_>1 1 10 1 -1. - <_>6 1 5 1 2. - 0 - -0.0217043906450272 - 0.4890331923961639 - -0.0980915725231171 - <_> - - <_> - - - - <_>4 2 13 6 -1. - <_>4 4 13 2 3. - 0 - 4.2956420220434666e-003 - -0.2782556116580963 - 0.1571262925863266 - <_> - - <_> - - - - <_>11 13 2 3 -1. - <_>12 13 1 3 2. - 0 - 4.9894629046320915e-004 - 0.1100381016731262 - -0.3377942144870758 - <_> - - <_> - - - - <_>6 9 4 9 -1. - <_>6 12 4 3 3. - 0 - 0.0246527995914221 - 0.0458206608891487 - -0.5471053719520569 - <_> - - <_> - - - - <_>6 6 3 10 -1. - <_>6 11 3 5 2. - 0 - -0.0230757407844067 - -0.4980142116546631 - 0.0670447796583176 - <_> - - <_> - - - - <_>2 10 3 4 -1. - <_>3 10 1 4 3. - 0 - 0.0119912801310420 - -0.0708770230412483 - 0.4829424917697907 - <_> - - <_> - - - - <_>3 8 3 6 -1. - <_>4 8 1 6 3. - 0 - 0.0154306795448065 - -0.0659497380256653 - 0.4523684978485107 - <_> - - <_> - - - - <_>11 12 3 6 -1. - <_>12 12 1 6 3. - 0 - -4.5555769465863705e-003 - -0.4466569125652313 - 0.0678776577115059 - <_> - - <_> - - - - <_>8 6 2 3 -1. - <_>8 7 2 1 3. - 0 - -4.4582979753613472e-003 - 0.3365691900253296 - -0.0947923585772514 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>5 8 3 3 2. - <_>8 11 3 3 2. - 0 - 1.3494009908754379e-004 - -0.3028885126113892 - 0.1029383018612862 - <_> - - <_> - - - - <_>3 7 3 1 -1. - <_>4 7 1 1 3. - 0 - -4.2500188574194908e-003 - 0.4255012869834900 - -0.0729563832283020 - <_> - - <_> - - - - <_>10 12 3 3 -1. - <_>10 13 3 1 3. - 0 - -1.4293759595602751e-003 - -0.3011676073074341 - 0.0900392532348633 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - -6.3978550024330616e-003 - 0.4194355010986328 - -0.0793208703398705 - <_> - - <_> - - - - <_>10 12 4 3 -1. - <_>10 13 4 1 3. - 0 - 2.6083870325237513e-003 - 0.0835989266633987 - -0.4189716875553131 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 8.6870808154344559e-003 - -0.0630156993865967 - 0.5264474153518677 - <_> - - <_> - - - - <_>9 2 3 1 -1. - <_>10 2 1 1 3. - 0 - -1.0380990570411086e-003 - -0.3622015118598938 - 0.0803010389208794 - <_> - - <_> - - - - <_>2 0 18 14 -1. - <_>2 7 18 7 2. - 0 - 0.4407005012035370 - 0.0349130593240261 - -0.7276449203491211 - <_> - - <_> - - - - <_>9 2 3 2 -1. - <_>10 2 1 2 3. - 0 - 3.3689520787447691e-003 - 0.0573327802121639 - -0.4863327145576477 - <_> - - <_> - - - - <_>8 6 4 3 -1. - <_>8 7 4 1 3. - 0 - 1.7443710239604115e-003 - -0.1099466010928154 - 0.2702358067035675 - <_> - - <_> - - - - <_>4 8 5 2 -1. - <_>4 9 5 1 2. - 0 - 5.3788698278367519e-004 - -0.2743942141532898 - 0.1006338000297546 - <_> - - <_> - - - - <_>0 3 1 6 -1. - <_>0 5 1 2 3. - 0 - 1.0072899749502540e-003 - 0.1075676977634430 - -0.2322160005569458 - <_> - - <_> - - - - <_>13 9 1 6 -1. - <_>13 12 1 3 2. - 0 - -8.2518812268972397e-003 - -0.6521630287170410 - 0.0357042290270329 - <_> - - <_> - - - - <_>6 16 3 3 -1. - <_>6 17 3 1 3. - 0 - 3.5490558948367834e-003 - -0.0842548683285713 - 0.3176743090152741 - <_> - - <_> - - - - <_>3 16 7 3 -1. - <_>3 17 7 1 3. - 0 - -0.0110333599150181 - 0.4127162098884583 - -0.0625870525836945 - <_> - - <_> - - - - <_>10 15 5 3 -1. - <_>10 16 5 1 3. - 0 - 3.2278439030051231e-003 - 0.0712669864296913 - -0.4117225110530853 - <_> - - <_> - - - - <_>4 0 5 20 -1. - <_>4 10 5 10 2. - 0 - 0.1754038929939270 - 0.0349589809775352 - -0.6377506852149963 - <_> - - <_> - - - - <_>6 2 2 2 -1. - <_>7 2 1 2 2. - 0 - -4.8067080206237733e-004 - -0.2450311034917831 - 0.0989306494593620 - <_> - - <_> - - - - <_>18 0 2 15 -1. - <_>18 5 2 5 3. - 0 - -1.8284550169482827e-003 - 0.1348651945590973 - -0.1979990005493164 - <_> - - <_> - - - - <_>6 15 7 3 -1. - <_>6 16 7 1 3. - 0 - 1.7096720403060317e-003 - -0.1052595004439354 - 0.2100570946931839 - <_> - - <_> - - - - <_>10 13 6 2 -1. - <_>10 14 6 1 2. - 0 - 3.9468301110900939e-004 - 0.0809525474905968 - -0.2740539908409119 - <_> - - <_> - - - - <_>13 8 1 9 -1. - <_>13 11 1 3 3. - 0 - 2.3097719531506300e-003 - 0.1233822032809258 - -0.1995880007743835 - <_> - - <_> - - - - <_>3 0 4 4 -1. - <_>3 0 2 2 2. - <_>5 2 2 2 2. - 0 - 3.1529190018773079e-003 - -0.1061254963278770 - 0.2208960056304932 - <_> - - <_> - - - - <_>0 3 1 6 -1. - <_>0 5 1 2 3. - 0 - -1.9097010372206569e-003 - -0.2509470880031586 - 0.0870225802063942 - <_> - - <_> - - - - <_>5 8 3 1 -1. - <_>6 8 1 1 3. - 0 - -1.2370609911158681e-003 - 0.3076052069664002 - -0.0759372934699059 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>6 6 1 3 2. - 0 - 3.7081091431900859e-004 - -0.1606508046388626 - 0.1348019987344742 - <_> - - <_> - - - - <_>6 11 6 7 -1. - <_>8 11 2 7 3. - 0 - 0.0342688485980034 - 0.0352609492838383 - -0.6354715824127197 - <_> - - <_> - - - - <_>8 7 4 3 -1. - <_>8 8 4 1 3. - 0 - 4.6664681285619736e-003 - -0.0524948611855507 - 0.4324232041835785 - <_> - - <_> - - - - <_>3 8 8 1 -1. - <_>7 8 4 1 2. - 0 - 0.0104235699400306 - 0.0516124293208122 - -0.5074523091316223 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>5 13 3 1 3. - 0 - 0.0112151801586151 - -0.0386142507195473 - 0.5764592885971069 - <_> - - <_> - - - - <_>9 7 2 8 -1. - <_>9 7 1 4 2. - <_>10 11 1 4 2. - 0 - -7.3029109444178175e-006 - 0.1205231994390488 - -0.1727436929941177 - <_> - - <_> - - - - <_>14 2 3 5 -1. - <_>15 2 1 5 3. - 0 - -4.9072802066802979e-003 - -0.3481855094432831 - 0.0591164417564869 - <_> - - <_> - - - - <_>6 13 2 3 -1. - <_>6 14 2 1 3. - 0 - 1.9488829420879483e-003 - -0.0888612270355225 - 0.2402089983224869 - <_> - - <_> - - - - <_>6 14 1 2 -1. - <_>6 15 1 1 2. - 0 - 1.3313010276760906e-004 - -0.1465771943330765 - 0.1992992013692856 - <_> - - <_> - - - - <_>12 10 2 3 -1. - <_>12 11 2 1 3. - 0 - -1.4298240421339869e-003 - -0.3900522887706757 - 0.0599094182252884 - <_> - - <_> - - - - <_>1 14 12 3 -1. - <_>5 14 4 3 3. - 0 - -6.4831459894776344e-003 - 0.1814136952161789 - -0.1165544986724854 - <_> - - <_> - - - - <_>11 8 3 1 -1. - <_>12 8 1 1 3. - 0 - 7.2958500823006034e-006 - -0.1821924000978470 - 0.1181278005242348 - <_> - - <_> - - - - <_>14 4 2 3 -1. - <_>14 5 2 1 3. - 0 - 4.1690681246109307e-004 - 0.1059167981147766 - -0.2035371065139771 - <_> - - <_> - - - - <_>7 8 3 2 -1. - <_>8 8 1 2 3. - 0 - 5.1982058212161064e-003 - -0.0359626412391663 - 0.6026421189308167 - <_> - - <_> - - - - <_>2 7 3 11 -1. - <_>3 7 1 11 3. - 0 - -4.0649957954883575e-003 - 0.2069641947746277 - -0.0985998436808586 - <_> - - <_> - - - - <_>0 14 2 1 -1. - <_>1 14 1 1 2. - 0 - -4.7734950203448534e-004 - -0.2462954968214035 - 0.0931742712855339 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>7 15 1 2 3. - 0 - 5.2415160462260246e-003 - 0.0365285202860832 - -0.5493478775024414 - <_> - - <_> - - - - <_>18 10 2 4 -1. - <_>18 10 1 2 2. - <_>19 12 1 2 2. - 0 - 3.7873629480600357e-003 - -0.0575970895588398 - 0.3873398005962372 - <_> - - <_> - - - - <_>13 12 2 2 -1. - <_>14 12 1 2 2. - 0 - -1.4434250260819681e-005 - 0.1129285991191864 - -0.1744707971811295 - <_> - - <_> - - - - <_>9 5 8 12 -1. - <_>13 5 4 12 2. - 0 - 0.0420115999877453 - -0.0465568602085114 - 0.4545480012893677 - <_> - - <_> - - - - <_>11 5 3 3 -1. - <_>12 5 1 3 3. - 0 - 7.9663433134555817e-003 - 0.0422587394714355 - -0.5370252132415772 - <_> - - <_> - - - - <_>16 11 2 2 -1. - <_>16 11 1 1 2. - <_>17 12 1 1 2. - 0 - 5.3092982852831483e-004 - -0.0979187190532684 - 0.2179591953754425 - <_> - - <_> - - - - <_>14 5 1 2 -1. - <_>14 6 1 1 2. - 0 - 5.2906107157468796e-004 - 0.0779610574245453 - -0.2886753976345062 - <_> - - <_> - - - - <_>3 0 8 16 -1. - <_>3 8 8 8 2. - 0 - -0.1955624967813492 - -0.7647573947906494 - 0.0272760000079870 - <_> - - <_> - - - - <_>3 11 3 5 -1. - <_>4 11 1 5 3. - 0 - -0.0115599501878023 - 0.3352600038051605 - -0.0636149868369102 - <_> - - <_> - - - - <_>0 8 12 6 -1. - <_>4 8 4 6 3. - 0 - -0.1400565952062607 - -0.7623205184936523 - 0.0280244704335928 - <_> - - <_> - - - - <_>6 9 4 2 -1. - <_>6 9 2 1 2. - <_>8 10 2 1 2. - 0 - 4.4643289584200829e-005 - -0.2032092958688736 - 0.0993916988372803 - <_> - - <_> - - - - <_>11 15 3 5 -1. - <_>12 15 1 5 3. - 0 - 3.9411801844835281e-003 - 0.0499362796545029 - -0.3758454024791718 - <_> - - <_> - - - - <_>18 10 2 6 -1. - <_>18 10 1 3 2. - <_>19 13 1 3 2. - 0 - -4.5965691097080708e-003 - 0.3303121030330658 - -0.0638099312782288 - <_> - - <_> - - - - <_>13 15 6 1 -1. - <_>16 15 3 1 2. - 0 - -6.9790292764082551e-004 - 0.1609371006488800 - -0.1319292038679123 - <_> - - <_> - - - - <_>5 10 7 6 -1. - <_>5 13 7 3 2. - 0 - 6.1886821640655398e-004 - 0.0746211931109428 - -0.3302145898342133 - <_> - - <_> - - - - <_>2 11 6 6 -1. - <_>2 14 6 3 2. - 0 - -0.0327551402151585 - -0.4064356088638306 - 0.0493086613714695 - <_> - - <_> - - - - <_>11 14 3 3 -1. - <_>11 15 3 1 3. - 0 - 3.3697509206831455e-003 - 0.0406270995736122 - -0.4975732862949371 - <_> - - <_> - - - - <_>7 14 6 3 -1. - <_>7 15 6 1 3. - 0 - 3.7391821388155222e-004 - -0.1493179947137833 - 0.1651796996593475 - <_> - - <_> - - - - <_>5 14 5 3 -1. - <_>5 15 5 1 3. - 0 - -4.0217190980911255e-003 - 0.2953197062015533 - -0.0766421034932137 - <_> - - <_> - - - - <_>6 16 3 1 -1. - <_>7 16 1 1 3. - 0 - -7.2943832492455840e-004 - -0.2735581099987030 - 0.0792439877986908 - <_> - - <_> - - - - <_>4 15 4 3 -1. - <_>4 16 4 1 3. - 0 - -5.7726111263036728e-003 - 0.3474124073982239 - -0.0760872066020966 - <_> - - <_> - - - - <_>2 2 4 8 -1. - <_>2 2 2 4 2. - <_>4 6 2 4 2. - 0 - -2.1122458856552839e-003 - 0.1729051023721695 - -0.1244447007775307 - <_> - - <_> - - - - <_>12 13 2 3 -1. - <_>12 14 2 1 3. - 0 - 4.4956691563129425e-003 - 0.0302187297493219 - -0.7400333881378174 - <_> - - <_> - - - - <_>9 13 4 3 -1. - <_>9 14 4 1 3. - 0 - -1.1419389629736543e-003 - -0.2349448949098587 - 0.0769115462899208 - <_> - - <_> - - - - <_>8 8 5 3 -1. - <_>8 9 5 1 3. - 0 - 2.7658098842948675e-003 - -0.0916666612029076 - 0.2100971043109894 - <_> - - <_> - - - - <_>9 12 3 2 -1. - <_>10 12 1 2 3. - 0 - -7.2281848406419158e-004 - -0.2558746933937073 - 0.0753781422972679 - <_> - - <_> - - - - <_>4 0 8 2 -1. - <_>4 0 4 1 2. - <_>8 1 4 1 2. - 0 - 1.8604539800435305e-003 - -0.0945110693573952 - 0.1972692012786865 - <_> - - <_> - - - - <_>0 12 1 2 -1. - <_>0 13 1 1 2. - 0 - -2.8568008565343916e-004 - -0.2107331007719040 - 0.0972900390625000 - <_> - - <_> - - - - <_>8 14 8 4 -1. - <_>8 16 8 2 2. - 0 - -0.0387961007654667 - -0.7872459292411804 - 0.0244103092700243 - <_> - - <_> - - - - <_>4 17 9 3 -1. - <_>4 18 9 1 3. - 0 - -0.0121198697015643 - 0.3646681010723114 - -0.0579074993729591 - -1.5173089504241943 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>10 0 2 8 -1. - <_>10 4 2 4 2. - 0 - 5.6008538231253624e-003 - -0.3849158883094788 - 0.3381746113300324 - <_> - - <_> - - - - <_>10 13 2 6 -1. - <_>10 16 2 3 2. - 0 - -3.7205789703875780e-003 - 0.2461411952972412 - -0.3067378103733063 - <_> - - <_> - - - - <_>7 2 10 5 -1. - <_>12 2 5 5 2. - 0 - -2.5333440862596035e-003 - 0.1253120005130768 - -0.4272018969058991 - <_> - - <_> - - - - <_>9 7 4 6 -1. - <_>9 7 2 3 2. - <_>11 10 2 3 2. - 0 - -7.3425087612122297e-004 - 0.1331433057785034 - -0.3511157035827637 - <_> - - <_> - - - - <_>12 10 1 6 -1. - <_>12 13 1 3 2. - 0 - -1.4792960428167135e-004 - 0.1254530996084213 - -0.3859119117259979 - <_> - - <_> - - - - <_>1 2 6 8 -1. - <_>4 2 3 8 2. - 0 - -0.0489763393998146 - 0.3645674884319305 - -0.1149478033185005 - <_> - - <_> - - - - <_>10 12 1 3 -1. - <_>10 13 1 1 3. - 0 - 1.0917349718511105e-003 - 0.0790053382515907 - -0.4139983057975769 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>6 7 1 2 3. - 0 - 5.4457997903227806e-003 - -0.1192184016108513 - 0.3308556079864502 - <_> - - <_> - - - - <_>10 13 1 3 -1. - <_>10 14 1 1 3. - 0 - 1.5979419695213437e-003 - 0.0411811992526054 - -0.5502822995185852 - <_> - - <_> - - - - <_>4 3 16 9 -1. - <_>4 6 16 3 3. - 0 - -1.3023250503465533e-003 - 0.0828394368290901 - -0.3571932017803192 - <_> - - <_> - - - - <_>5 12 4 3 -1. - <_>7 12 2 3 2. - 0 - 4.8810569569468498e-004 - -0.2092863023281097 - 0.1497281044721603 - <_> - - <_> - - - - <_>10 14 1 3 -1. - <_>10 15 1 1 3. - 0 - 2.1033850498497486e-003 - 0.0518394187092781 - -0.6109995841979981 - <_> - - <_> - - - - <_>10 6 3 8 -1. - <_>11 6 1 8 3. - 0 - 0.0119843604043126 - 0.0410223491489887 - -0.5898572206497192 - <_> - - <_> - - - - <_>1 8 3 5 -1. - <_>2 8 1 5 3. - 0 - -0.0118985902518034 - 0.4584499895572662 - -0.0647147074341774 - <_> - - <_> - - - - <_>6 7 3 2 -1. - <_>7 7 1 2 3. - 0 - 5.3713661618530750e-003 - -0.0615604706108570 - 0.4120436906814575 - <_> - - <_> - - - - <_>9 10 3 3 -1. - <_>10 10 1 3 3. - 0 - 4.3421140871942043e-003 - 0.0605016611516476 - -0.4870339035987854 - <_> - - <_> - - - - <_>11 4 4 3 -1. - <_>11 5 4 1 3. - 0 - 6.6142519935965538e-003 - 0.0468731895089149 - -0.5034617185592651 - <_> - - <_> - - - - <_>16 11 3 1 -1. - <_>17 11 1 1 3. - 0 - 1.2339729582890868e-003 - -0.0815384387969971 - 0.3042829930782318 - <_> - - <_> - - - - <_>8 0 6 3 -1. - <_>10 0 2 3 3. - 0 - -0.0129756601527333 - -0.4783433079719544 - 0.0486814901232719 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - -1.7806360265240073e-003 - 0.3769873082637787 - -0.0681260377168655 - <_> - - <_> - - - - <_>11 3 7 3 -1. - <_>11 4 7 1 3. - 0 - 7.8339744359254837e-003 - 0.0545012801885605 - -0.4673858880996704 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - -6.0113701038062572e-003 - 0.5487005114555359 - -0.0444346405565739 - <_> - - <_> - - - - <_>7 4 3 2 -1. - <_>8 4 1 2 3. - 0 - -2.0694560371339321e-003 - -0.3775554895401001 - 0.0643834024667740 - <_> - - <_> - - - - <_>7 3 3 3 -1. - <_>8 3 1 3 3. - 0 - 4.7843591310083866e-003 - 0.0462521500885487 - -0.5263398289680481 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - -6.2808818183839321e-003 - 0.3945186138153076 - -0.0690513029694557 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 1.6099009662866592e-003 - -0.1031619012355804 - 0.2732166945934296 - <_> - - <_> - - - - <_>10 12 2 3 -1. - <_>10 13 2 1 3. - 0 - -8.2392559852451086e-004 - -0.2803941071033478 - 0.0846015736460686 - <_> - - <_> - - - - <_>5 0 12 2 -1. - <_>5 1 12 1 2. - 0 - -0.0101233199238777 - 0.3363595008850098 - -0.0613229498267174 - <_> - - <_> - - - - <_>4 11 8 4 -1. - <_>4 13 8 2 2. - 0 - 0.0105257201939821 - 0.0461656004190445 - -0.5167213082313538 - <_> - - <_> - - - - <_>6 12 8 4 -1. - <_>6 14 8 2 2. - 0 - -0.0267744995653629 - -0.5032597184181213 - 0.0398578196763992 - <_> - - <_> - - - - <_>4 0 4 2 -1. - <_>4 0 2 1 2. - <_>6 1 2 1 2. - 0 - 4.0248301811516285e-003 - -0.0615013800561428 - 0.3665980994701386 - <_> - - <_> - - - - <_>13 9 4 2 -1. - <_>13 10 4 1 2. - 0 - -4.6271650353446603e-004 - -0.2643983066082001 - 0.0813112631440163 - <_> - - <_> - - - - <_>12 10 2 2 -1. - <_>13 10 1 2 2. - 0 - -5.1834900659741834e-005 - 0.1115439981222153 - -0.2026937007904053 - <_> - - <_> - - - - <_>9 9 6 1 -1. - <_>12 9 3 1 2. - 0 - 4.8874281346797943e-003 - -0.0696449875831604 - 0.3361203074455261 - <_> - - <_> - - - - <_>6 6 14 6 -1. - <_>6 9 14 3 2. - 0 - 0.1263823062181473 - 0.0368136391043663 - -0.6584991812705994 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - -8.0248164013028145e-003 - 0.4660192131996155 - -0.0488858595490456 - <_> - - <_> - - - - <_>11 11 1 3 -1. - <_>11 12 1 1 3. - 0 - -1.1518909595906734e-003 - -0.4046675860881805 - 0.0585728511214256 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 9.8190037533640862e-004 - -0.1319722980260849 - 0.1774435043334961 - <_> - - <_> - - - - <_>12 11 6 2 -1. - <_>14 11 2 2 3. - 0 - -0.0194479804486036 - -0.6848952770233154 - 0.0338345915079117 - <_> - - <_> - - - - <_>11 11 2 1 -1. - <_>12 11 1 1 2. - 0 - -7.2442039709130768e-006 - 0.1155311018228531 - -0.1872612982988358 - <_> - - <_> - - - - <_>3 11 14 1 -1. - <_>10 11 7 1 2. - 0 - -0.0170390605926514 - -0.3510529100894928 - 0.0677377134561539 - <_> - - <_> - - - - <_>1 13 6 5 -1. - <_>3 13 2 5 3. - 0 - 0.0111865801736712 - -0.0934200435876846 - 0.2107709944248200 - <_> - - <_> - - - - <_>14 0 2 1 -1. - <_>15 0 1 1 2. - 0 - 7.6585268834605813e-004 - 0.0659657567739487 - -0.3212788105010986 - <_> - - <_> - - - - <_>10 0 10 1 -1. - <_>15 0 5 1 2. - 0 - 1.4231950626708567e-004 - -0.1546013057231903 - 0.1375764012336731 - <_> - - <_> - - - - <_>5 15 3 3 -1. - <_>5 16 3 1 3. - 0 - -5.5553209967911243e-003 - 0.3131935000419617 - -0.0647535324096680 - <_> - - <_> - - - - <_>12 14 2 2 -1. - <_>12 15 2 1 2. - 0 - 1.2308239820413291e-004 - 0.0976666212081909 - -0.2225106954574585 - <_> - - <_> - - - - <_>12 14 2 3 -1. - <_>12 15 2 1 3. - 0 - -1.6092039877548814e-003 - -0.3621559143066406 - 0.0644525587558746 - <_> - - <_> - - - - <_>8 6 1 3 -1. - <_>8 7 1 1 3. - 0 - -1.5626100357621908e-003 - 0.2258878052234650 - -0.0955511033535004 - <_> - - <_> - - - - <_>0 2 1 3 -1. - <_>0 3 1 1 3. - 0 - -5.0116342026740313e-004 - -0.2228921949863434 - 0.0891745314002037 - <_> - - <_> - - - - <_>0 2 1 3 -1. - <_>0 3 1 1 3. - 0 - 3.7322030402719975e-004 - 0.0919690132141113 - -0.2112991958856583 - <_> - - <_> - - - - <_>4 8 2 2 -1. - <_>4 8 1 1 2. - <_>5 9 1 1 2. - 0 - -2.2882660850882530e-003 - 0.3898904919624329 - -0.0534558594226837 - <_> - - <_> - - - - <_>3 6 8 10 -1. - <_>3 6 4 5 2. - <_>7 11 4 5 2. - 0 - -0.0468840301036835 - -0.6235709190368652 - 0.0321945212781429 - <_> - - <_> - - - - <_>6 15 1 3 -1. - <_>6 16 1 1 3. - 0 - 1.8901260336861014e-003 - -0.0726151466369629 - 0.2742008864879608 - <_> - - <_> - - - - <_>12 0 3 8 -1. - <_>13 0 1 8 3. - 0 - 0.0158053301274776 - 0.0286018308252096 - -0.6960816979408264 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>10 0 5 3 2. - <_>15 3 5 3 2. - 0 - 0.0326441787183285 - -0.0407722517848015 - 0.5087339878082275 - <_> - - <_> - - - - <_>17 2 2 2 -1. - <_>17 3 2 1 2. - 0 - 6.5482832724228501e-004 - 0.0857249125838280 - -0.2758063077926636 - <_> - - <_> - - - - <_>8 0 12 14 -1. - <_>14 0 6 14 2. - 0 - -0.0111429300159216 - 0.0873260125517845 - -0.2091481983661652 - <_> - - <_> - - - - <_>10 18 2 1 -1. - <_>11 18 1 1 2. - 0 - -5.8072229148820043e-004 - -0.2947142124176025 - 0.0663378909230232 - <_> - - <_> - - - - <_>18 9 2 6 -1. - <_>18 9 1 3 2. - <_>19 12 1 3 2. - 0 - -7.4414577102288604e-004 - 0.1801795959472656 - -0.1065462976694107 - <_> - - <_> - - - - <_>18 4 2 16 -1. - <_>18 4 1 8 2. - <_>19 12 1 8 2. - 0 - 7.6460661366581917e-003 - -0.0636081472039223 - 0.3158234059810638 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>8 8 3 6 2. - 0 - 0.0326172113418579 - 0.0326064415276051 - -0.6054118871688843 - <_> - - <_> - - - - <_>6 5 4 11 -1. - <_>8 5 2 11 2. - 0 - -0.0345272310078144 - -0.5977085828781128 - 0.0278887692838907 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>7 8 1 2 2. - 0 - 3.2211719080805779e-003 - -0.0491839200258255 - 0.4030562043190002 - <_> - - <_> - - - - <_>6 5 2 5 -1. - <_>7 5 1 5 2. - 0 - -4.1549839079380035e-004 - 0.1353314071893692 - -0.1584533005952835 - <_> - - <_> - - - - <_>10 16 3 4 -1. - <_>11 16 1 4 3. - 0 - 2.5140501093119383e-003 - 0.0632185712456703 - -0.3076852858066559 - <_> - - <_> - - - - <_>3 0 8 18 -1. - <_>3 9 8 9 2. - 0 - -0.2081820964813232 - -0.7575026154518127 - 0.0226959604769945 - <_> - - <_> - - - - <_>1 7 7 3 -1. - <_>1 8 7 1 3. - 0 - -0.0260672792792320 - -0.7495995759963989 - 0.0193754807114601 - <_> - - <_> - - - - <_>5 5 2 6 -1. - <_>5 7 2 2 3. - 0 - -5.8264029212296009e-004 - 0.0946582332253456 - -0.1991982012987137 - <_> - - <_> - - - - <_>3 8 3 10 -1. - <_>4 8 1 10 3. - 0 - -3.2769259996712208e-003 - 0.1621433049440384 - -0.1232203021645546 - <_> - - <_> - - - - <_>3 12 3 2 -1. - <_>4 12 1 2 3. - 0 - 1.3998829526826739e-003 - -0.1084920018911362 - 0.2315165996551514 - <_> - - <_> - - - - <_>3 9 10 3 -1. - <_>8 9 5 3 2. - 0 - -0.0120559800416231 - -0.2400285005569458 - 0.0932729616761208 - <_> - - <_> - - - - <_>6 15 6 2 -1. - <_>8 15 2 2 3. - 0 - 3.1805539038032293e-003 - 0.0762641206383705 - -0.2543506920337677 - <_> - - <_> - - - - <_>5 9 3 2 -1. - <_>6 9 1 2 3. - 0 - -1.0693799704313278e-003 - 0.2225888967514038 - -0.0907302424311638 - <_> - - <_> - - - - <_>17 5 3 3 -1. - <_>17 6 3 1 3. - 0 - -2.9467688873410225e-003 - -0.3424269855022430 - 0.0605810396373272 - <_> - - <_> - - - - <_>8 6 1 3 -1. - <_>8 7 1 1 3. - 0 - 8.8108901400119066e-004 - -0.0783262029290199 - 0.2691198885440826 - <_> - - <_> - - - - <_>18 5 1 3 -1. - <_>18 6 1 1 3. - 0 - 2.8118939371779561e-004 - 0.0983708277344704 - -0.2194790989160538 - <_> - - <_> - - - - <_>5 2 5 6 -1. - <_>5 5 5 3 2. - 0 - -0.0185748692601919 - 0.2672972083091736 - -0.0712407529354095 - <_> - - <_> - - - - <_>11 1 6 3 -1. - <_>13 1 2 3 3. - 0 - -0.0248103495687246 - -0.6832203269004822 - 0.0294463094323874 - <_> - - <_> - - - - <_>6 7 2 10 -1. - <_>6 12 2 5 2. - 0 - 2.8904930222779512e-003 - 0.0761610120534897 - -0.2402520030736923 - <_> - - <_> - - - - <_>3 14 4 4 -1. - <_>5 14 2 4 2. - 0 - 3.5410430282354355e-003 - -0.1074208989739418 - 0.1850941926240921 - <_> - - <_> - - - - <_>2 11 4 1 -1. - <_>4 11 2 1 2. - 0 - -8.4244477329775691e-004 - 0.1872722953557968 - -0.1140777021646500 - <_> - - <_> - - - - <_>6 4 3 2 -1. - <_>7 4 1 2 3. - 0 - -2.5338360574096441e-003 - -0.3587019145488739 - 0.0512516610324383 - <_> - - <_> - - - - <_>8 3 2 6 -1. - <_>8 5 2 2 3. - 0 - 1.9654980860650539e-003 - -0.1406472027301788 - 0.1304101943969727 - <_> - - <_> - - - - <_>0 10 20 10 -1. - <_>10 10 10 10 2. - 0 - 0.3157410025596619 - 0.0295509696006775 - -0.6315789222717285 - <_> - - <_> - - - - <_>13 7 2 2 -1. - <_>13 8 2 1 2. - 0 - -2.9846638790331781e-004 - -0.2291108071804047 - 0.0788754224777222 - <_> - - <_> - - - - <_>10 8 10 4 -1. - <_>15 8 5 4 2. - 0 - -0.1154548004269600 - -0.8189594149589539 - 0.0222614500671625 - <_> - - <_> - - - - <_>0 10 16 2 -1. - <_>8 10 8 2 2. - 0 - -0.0358172990381718 - -0.3061293959617615 - 0.0606441907584667 - <_> - - <_> - - - - <_>10 14 6 6 -1. - <_>10 14 3 3 2. - <_>13 17 3 3 2. - 0 - 0.0170716904103756 - -0.0611348412930965 - 0.3215267956256867 - <_> - - <_> - - - - <_>13 10 1 3 -1. - <_>13 11 1 1 3. - 0 - -2.1385080181062222e-003 - -0.5479816198348999 - 0.0386673696339130 - <_> - - <_> - - - - <_>4 4 10 8 -1. - <_>4 4 5 4 2. - <_>9 8 5 4 2. - 0 - 0.0654244571924210 - 0.0178842600435019 - -0.8562883138656616 - <_> - - <_> - - - - <_>5 1 6 6 -1. - <_>5 1 3 3 2. - <_>8 4 3 3 2. - 0 - -0.0134199298918247 - 0.3099510073661804 - -0.0675596669316292 - <_> - - <_> - - - - <_>11 10 8 3 -1. - <_>11 11 8 1 3. - 0 - 0.0189397092908621 - 0.0287297293543816 - -0.7533819079399109 - <_> - - <_> - - - - <_>3 11 3 6 -1. - <_>3 13 3 2 3. - 0 - -0.0291204601526260 - -0.7359461784362793 - 0.0203595496714115 - -1.6563049554824829 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>8 0 12 6 -1. - <_>8 0 6 3 2. - <_>14 3 6 3 2. - 0 - -0.0134190302342176 - 0.3053801059722900 - -0.4178233146667481 - <_> - - <_> - - - - <_>7 8 2 4 -1. - <_>7 8 1 2 2. - <_>8 10 1 2 2. - 0 - 1.7404999816790223e-003 - -0.2710157930850983 - 0.3540956079959869 - <_> - - <_> - - - - <_>11 1 7 10 -1. - <_>11 6 7 5 2. - 0 - 7.7174860052764416e-003 - -0.3127137124538422 - 0.2118998020887375 - <_> - - <_> - - - - <_>10 15 3 2 -1. - <_>10 16 3 1 2. - 0 - -1.4514879694615956e-005 - 0.1615709066390991 - -0.3352273106575012 - <_> - - <_> - - - - <_>11 11 2 3 -1. - <_>12 11 1 3 2. - 0 - -1.4871519852022175e-005 - 0.1457162052392960 - -0.2936952114105225 - <_> - - <_> - - - - <_>6 8 3 2 -1. - <_>6 9 3 1 2. - 0 - 1.5004149463493377e-004 - -0.4014987945556641 - 0.1040794998407364 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - 1.8634879961609840e-003 - 0.0490628406405449 - -0.6520826816558838 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - -2.9590800404548645e-003 - 0.2880443036556244 - -0.1329340934753418 - <_> - - <_> - - - - <_>12 12 2 2 -1. - <_>12 13 2 1 2. - 0 - 3.3067780896089971e-004 - 0.0396153703331947 - -0.4154086112976074 - <_> - - <_> - - - - <_>11 3 8 9 -1. - <_>11 6 8 3 3. - 0 - -1.6816710121929646e-003 - 0.1303257942199707 - -0.2323751002550125 - <_> - - <_> - - - - <_>10 11 3 3 -1. - <_>11 11 1 3 3. - 0 - 3.4896740689873695e-003 - 0.0688529163599014 - -0.4717600941658020 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - 1.6204500570893288e-003 - -0.1099696010351181 - 0.3488718867301941 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>10 6 1 3 2. - 0 - 1.9125849939882755e-004 - -0.2031732052564621 - 0.1477562040090561 - <_> - - <_> - - - - <_>7 8 2 6 -1. - <_>7 10 2 2 3. - 0 - 0.0224852599203587 - 0.0519297309219837 - -0.5481569170951843 - <_> - - <_> - - - - <_>3 0 4 6 -1. - <_>3 0 2 3 2. - <_>5 3 2 3 2. - 0 - 0.0100359497591853 - -0.1094331964850426 - 0.2600057125091553 - <_> - - <_> - - - - <_>5 0 3 17 -1. - <_>6 0 1 17 3. - 0 - 0.0400916300714016 - 0.0386570505797863 - -0.7472460269927979 - <_> - - <_> - - - - <_>12 9 6 3 -1. - <_>12 10 6 1 3. - 0 - 0.0153190195560455 - 0.0285793691873550 - -0.7771779894828796 - <_> - - <_> - - - - <_>10 19 8 1 -1. - <_>14 19 4 1 2. - 0 - 9.0913427993655205e-004 - -0.1504954993724823 - 0.1736337989568710 - <_> - - <_> - - - - <_>13 3 5 3 -1. - <_>13 4 5 1 3. - 0 - -6.0226190835237503e-003 - -0.4770449101924896 - 0.0581856705248356 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>6 7 1 2 2. - 0 - 7.8066787682473660e-004 - -0.1634933948516846 - 0.1623692065477371 - <_> - - <_> - - - - <_>12 10 3 10 -1. - <_>13 10 1 10 3. - 0 - -0.0114920204505324 - -0.5618547797203064 - 0.0460096113383770 - <_> - - <_> - - - - <_>4 7 6 3 -1. - <_>7 7 3 3 2. - 0 - 8.9691327884793282e-003 - 0.0665704831480980 - -0.3382484018802643 - <_> - - <_> - - - - <_>6 10 1 3 -1. - <_>6 11 1 1 3. - 0 - 7.2241941234096885e-004 - -0.1288266927003861 - 0.1900296956300736 - <_> - - <_> - - - - <_>6 9 2 3 -1. - <_>6 10 2 1 3. - 0 - 1.4879239643050823e-005 - -0.2176592946052551 - 0.1315100938081741 - <_> - - <_> - - - - <_>11 3 6 3 -1. - <_>11 4 6 1 3. - 0 - 8.7159732356667519e-003 - 0.0481882393360138 - -0.5236771702766419 - <_> - - <_> - - - - <_>13 14 2 3 -1. - <_>13 15 2 1 3. - 0 - -1.3809900265187025e-003 - -0.3173463046550751 - 0.0670123621821404 - <_> - - <_> - - - - <_>6 16 8 4 -1. - <_>6 16 4 2 2. - <_>10 18 4 2 2. - 0 - 0.0140041103586555 - -0.0721551775932312 - 0.3490039110183716 - <_> - - <_> - - - - <_>10 5 3 15 -1. - <_>11 5 1 15 3. - 0 - -0.0128834601491690 - -0.5967429876327515 - 0.0392199903726578 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>10 0 5 3 2. - <_>15 3 5 3 2. - 0 - 9.9220760166645050e-003 - -0.0736170485615730 - 0.3549165129661560 - <_> - - <_> - - - - <_>11 2 3 16 -1. - <_>12 2 1 16 3. - 0 - -0.0103603601455688 - -0.4965578019618988 - 0.0545167215168476 - <_> - - <_> - - - - <_>7 12 2 2 -1. - <_>7 12 1 1 2. - <_>8 13 1 1 2. - 0 - 5.9103948296979070e-004 - -0.0916490927338600 - 0.2373840957880020 - <_> - - <_> - - - - <_>6 4 2 1 -1. - <_>7 4 1 1 2. - 0 - 1.4986419955675956e-005 - -0.1562436074018478 - 0.1421668976545334 - <_> - - <_> - - - - <_>6 3 3 4 -1. - <_>7 3 1 4 3. - 0 - 6.2526292167603970e-003 - 0.0465709418058395 - -0.4386126101016998 - <_> - - <_> - - - - <_>0 13 16 6 -1. - <_>0 15 16 2 3. - 0 - 0.0907229781150818 - 0.0235441196709871 - -0.7555767893791199 - <_> - - <_> - - - - <_>7 14 2 3 -1. - <_>7 15 2 1 3. - 0 - 1.2880839640274644e-003 - -0.1099981963634491 - 0.1995418965816498 - <_> - - <_> - - - - <_>15 17 2 2 -1. - <_>15 18 2 1 2. - 0 - -5.3202832350507379e-004 - -0.2368102073669434 - 0.0943498313426971 - <_> - - <_> - - - - <_>17 12 2 2 -1. - <_>17 12 1 1 2. - <_>18 13 1 1 2. - 0 - 1.4669039519503713e-003 - -0.0604179389774799 - 0.3543792963027954 - <_> - - <_> - - - - <_>11 1 3 19 -1. - <_>12 1 1 19 3. - 0 - 0.0259292703121901 - 0.0302053801715374 - -0.7117512226104736 - <_> - - <_> - - - - <_>1 11 19 4 -1. - <_>1 13 19 2 2. - 0 - -0.0722578391432762 - -0.7683005928993225 - 0.0220785401761532 - <_> - - <_> - - - - <_>17 8 2 10 -1. - <_>17 8 1 5 2. - <_>18 13 1 5 2. - 0 - -2.5999830104410648e-003 - 0.2287825047969818 - -0.0925756469368935 - <_> - - <_> - - - - <_>9 0 11 20 -1. - <_>9 10 11 10 2. - 0 - 0.4203611016273499 - 0.0341291502118111 - -0.6394466757774353 - <_> - - <_> - - - - <_>4 1 12 12 -1. - <_>4 1 6 6 2. - <_>10 7 6 6 2. - 0 - -2.1722039673477411e-003 - -0.2045879960060120 - 0.0967273488640785 - <_> - - <_> - - - - <_>5 11 3 6 -1. - <_>6 11 1 6 3. - 0 - -0.0185732506215572 - -0.7232174277305603 - 0.0265874005854130 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - 2.1321140229701996e-003 - -0.0792631730437279 - 0.2900441884994507 - <_> - - <_> - - - - <_>18 1 2 4 -1. - <_>19 1 1 4 2. - 0 - 1.4585970347980037e-005 - -0.1581220030784607 - 0.1285791993141174 - <_> - - <_> - - - - <_>11 0 8 15 -1. - <_>15 0 4 15 2. - 0 - -0.2591994106769562 - -0.8320639133453369 - 0.0213276296854019 - <_> - - <_> - - - - <_>5 5 6 2 -1. - <_>7 5 2 2 3. - 0 - -0.0127138802781701 - -0.4867066144943237 - 0.0352829098701477 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - 2.1182969212532043e-003 - -0.0481418594717979 - 0.4349882006645203 - <_> - - <_> - - - - <_>6 8 2 8 -1. - <_>6 12 2 4 2. - 0 - 4.9225408583879471e-003 - 0.0593890100717545 - -0.3571991026401520 - <_> - - <_> - - - - <_>9 9 2 4 -1. - <_>9 11 2 2 2. - 0 - 7.1720690466463566e-003 - -0.0727212205529213 - 0.3171677887439728 - <_> - - <_> - - - - <_>0 8 2 2 -1. - <_>0 9 2 1 2. - 0 - 1.5319329686462879e-003 - 0.0761052817106247 - -0.2982640862464905 - <_> - - <_> - - - - <_>7 12 8 4 -1. - <_>7 14 8 2 2. - 0 - -0.0261416807770729 - -0.4812982976436615 - 0.0419912002980709 - <_> - - <_> - - - - <_>11 13 3 2 -1. - <_>11 14 3 1 2. - 0 - -7.1861818469187710e-006 - 0.1038590967655182 - -0.2554089128971100 - <_> - - <_> - - - - <_>5 8 2 2 -1. - <_>5 8 1 1 2. - <_>6 9 1 1 2. - 0 - -5.8513309340924025e-004 - 0.2155243009328842 - -0.1044678017497063 - <_> - - <_> - - - - <_>12 11 2 3 -1. - <_>12 12 2 1 3. - 0 - 7.3564669582992792e-004 - 0.0828503072261810 - -0.2322968989610672 - <_> - - <_> - - - - <_>10 8 2 2 -1. - <_>10 8 1 1 2. - <_>11 9 1 1 2. - 0 - -4.4216000242158771e-004 - 0.1984968930482864 - -0.1108435988426209 - <_> - - <_> - - - - <_>6 16 3 2 -1. - <_>7 16 1 2 3. - 0 - 6.6545000299811363e-003 - 0.0298448391258717 - -0.6381940245628357 - <_> - - <_> - - - - <_>13 12 2 1 -1. - <_>14 12 1 1 2. - 0 - -1.4856060261081439e-005 - 0.1064781025052071 - -0.1630474030971527 - <_> - - <_> - - - - <_>16 9 2 6 -1. - <_>16 9 1 3 2. - <_>17 12 1 3 2. - 0 - 4.4933347962796688e-003 - -0.0583121813833714 - 0.3220021128654480 - <_> - - <_> - - - - <_>17 2 2 6 -1. - <_>17 4 2 2 3. - 0 - 3.8110970053821802e-003 - 0.0712374374270439 - -0.2714948058128357 - <_> - - <_> - - - - <_>13 2 7 6 -1. - <_>13 4 7 2 3. - 0 - -0.0383090190589428 - -0.6238747835159302 - 0.0297903995960951 - <_> - - <_> - - - - <_>16 10 4 4 -1. - <_>16 10 2 2 2. - <_>18 12 2 2 2. - 0 - -2.5534629821777344e-003 - 0.2094762027263641 - -0.0934725701808929 - <_> - - <_> - - - - <_>11 10 2 2 -1. - <_>11 11 2 1 2. - 0 - -2.9908109354437329e-005 - 0.1477189958095551 - -0.1285872012376785 - <_> - - <_> - - - - <_>6 13 3 3 -1. - <_>6 14 3 1 3. - 0 - 2.0549520850181580e-003 - -0.0936039835214615 - 0.2191116958856583 - <_> - - <_> - - - - <_>4 14 4 2 -1. - <_>4 15 4 1 2. - 0 - 3.3064800663851202e-004 - -0.1443066000938416 - 0.1690506041049957 - <_> - - <_> - - - - <_>0 9 2 1 -1. - <_>1 9 1 1 2. - 0 - 4.0969369001686573e-004 - 0.0898449569940567 - -0.2179321050643921 - <_> - - <_> - - - - <_>7 6 4 8 -1. - <_>7 10 4 4 2. - 0 - -5.1680381875485182e-004 - -0.2733086049556732 - 0.0724907070398331 - <_> - - <_> - - - - <_>9 17 7 3 -1. - <_>9 18 7 1 3. - 0 - -0.0122852995991707 - -0.5789995193481445 - 0.0288281291723251 - <_> - - <_> - - - - <_>7 12 2 3 -1. - <_>7 13 2 1 3. - 0 - 1.4923219569027424e-003 - -0.0897484272718430 - 0.2131579071283341 - <_> - - <_> - - - - <_>12 17 4 3 -1. - <_>12 18 4 1 3. - 0 - 3.7809570785611868e-003 - 0.0568691305816174 - -0.3258047997951508 - <_> - - <_> - - - - <_>11 7 9 11 -1. - <_>14 7 3 11 3. - 0 - -0.1363079994916916 - -0.5195829272270203 - 0.0340148694813252 - <_> - - <_> - - - - <_>16 14 4 5 -1. - <_>18 14 2 5 2. - 0 - 0.0211922507733107 - -0.0598157495260239 - 0.4313400089740753 - <_> - - <_> - - - - <_>9 2 3 4 -1. - <_>10 2 1 4 3. - 0 - -2.2501780185848475e-003 - -0.3272511065006256 - 0.0694940388202667 - <_> - - <_> - - - - <_>3 11 2 8 -1. - <_>3 11 1 4 2. - <_>4 15 1 4 2. - 0 - -0.0133094396442175 - 0.5568472146987915 - -0.0380551107227802 - <_> - - <_> - - - - <_>13 2 6 18 -1. - <_>13 2 3 9 2. - <_>16 11 3 9 2. - 0 - -0.0486744008958340 - 0.3750388920307159 - -0.0480452999472618 - <_> - - <_> - - - - <_>9 12 5 2 -1. - <_>9 13 5 1 2. - 0 - -1.4651560377387796e-005 - 0.0930435433983803 - -0.2298455983400345 - <_> - - <_> - - - - <_>11 8 4 10 -1. - <_>11 8 2 5 2. - <_>13 13 2 5 2. - 0 - -7.7605661936104298e-003 - 0.3885821104049683 - -0.0546693094074726 - <_> - - <_> - - - - <_>0 11 20 1 -1. - <_>10 11 10 1 2. - 0 - 0.0244293306022882 - 0.0458986498415470 - -0.5106111168861389 - <_> - - <_> - - - - <_>1 12 1 2 -1. - <_>1 13 1 1 2. - 0 - -2.1317049686331302e-004 - -0.2051361054182053 - 0.1050731018185616 - -1.5920439958572388 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>6 7 6 3 -1. - <_>8 7 2 3 3. - 0 - -5.7014292106032372e-003 - 0.2757621109485626 - -0.3312371969223023 - <_> - - <_> - - - - <_>8 5 10 3 -1. - <_>13 5 5 3 2. - 0 - -4.4359369203448296e-003 - 0.1558748036623001 - -0.5028861761093140 - <_> - - <_> - - - - <_>5 5 4 6 -1. - <_>5 7 4 2 3. - 0 - -5.0388257950544357e-003 - 0.1610901057720184 - -0.3519606888294220 - <_> - - <_> - - - - <_>5 11 6 3 -1. - <_>8 11 3 3 2. - 0 - 8.0847437493503094e-004 - -0.3331570029258728 - 0.1444645971059799 - <_> - - <_> - - - - <_>2 8 3 7 -1. - <_>3 8 1 7 3. - 0 - 0.0216053295880556 - -0.0867235735058784 - 0.5910193920135498 - <_> - - <_> - - - - <_>2 10 3 6 -1. - <_>3 10 1 6 3. - 0 - -0.0182668399065733 - 0.5026186108589172 - -0.0846208631992340 - <_> - - <_> - - - - <_>14 0 2 2 -1. - <_>15 0 1 2 2. - 0 - -8.3384668687358499e-004 - -0.3083251118659973 - 0.1135276034474373 - <_> - - <_> - - - - <_>8 7 4 4 -1. - <_>8 7 2 2 2. - <_>10 9 2 2 2. - 0 - -0.0153366001322865 - -0.6861060857772827 - 0.0330578386783600 - <_> - - <_> - - - - <_>4 13 4 3 -1. - <_>4 14 4 1 3. - 0 - -5.0607877783477306e-003 - 0.3439927995204926 - -0.0921182334423065 - <_> - - <_> - - - - <_>8 11 6 2 -1. - <_>8 12 6 1 2. - 0 - -1.4741700397280511e-005 - 0.1177816987037659 - -0.2523517906665802 - <_> - - <_> - - - - <_>17 3 1 4 -1. - <_>17 5 1 2 2. - 0 - -1.1485730065032840e-003 - -0.2905001938343048 - 0.0835330486297607 - <_> - - <_> - - - - <_>6 13 2 3 -1. - <_>6 14 2 1 3. - 0 - 2.8824089094996452e-003 - -0.0906742364168167 - 0.3127414882183075 - <_> - - <_> - - - - <_>7 9 6 8 -1. - <_>7 9 3 4 2. - <_>10 13 3 4 2. - 0 - -0.0292243603616953 - -0.6915637850761414 - 0.0332797802984715 - <_> - - <_> - - - - <_>5 15 2 3 -1. - <_>5 16 2 1 3. - 0 - 2.1423520520329475e-003 - -0.1008772999048233 - 0.2460308969020844 - <_> - - <_> - - - - <_>7 10 4 9 -1. - <_>7 13 4 3 3. - 0 - -0.0334710590541363 - -0.5095394253730774 - 0.0550520718097687 - <_> - - <_> - - - - <_>5 4 2 1 -1. - <_>6 4 1 1 2. - 0 - 1.4763450053578708e-005 - -0.1782314926385880 - 0.1281639933586121 - <_> - - <_> - - - - <_>0 1 6 19 -1. - <_>2 1 2 19 3. - 0 - 0.0163415595889091 - -0.1325473934412003 - 0.1966349929571152 - <_> - - <_> - - - - <_>5 8 6 2 -1. - <_>8 8 3 2 2. - 0 - 2.2475779987871647e-003 - 0.0790484473109245 - -0.2947632074356079 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 4.6113221906125546e-003 - -0.0763384476304054 - 0.3239440917968750 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 2.8979079797863960e-003 - -0.1083905026316643 - 0.2635338902473450 - <_> - - <_> - - - - <_>9 12 2 4 -1. - <_>9 12 1 2 2. - <_>10 14 1 2 2. - 0 - 1.3482819776982069e-003 - 0.0791345611214638 - -0.3483985960483551 - <_> - - <_> - - - - <_>12 7 2 10 -1. - <_>12 12 2 5 2. - 0 - 4.6576592139899731e-003 - 0.0763560906052589 - -0.3111054003238678 - <_> - - <_> - - - - <_>10 6 6 8 -1. - <_>10 10 6 4 2. - 0 - -3.9915097877383232e-003 - -0.3415162861347199 - 0.0826234668493271 - <_> - - <_> - - - - <_>4 3 2 6 -1. - <_>5 3 1 6 2. - 0 - 6.0268798843026161e-003 - -0.0962778329849243 - 0.2634766101837158 - <_> - - <_> - - - - <_>4 6 3 3 -1. - <_>5 6 1 3 3. - 0 - -4.1388701647520065e-003 - 0.2357172966003418 - -0.0943352878093719 - <_> - - <_> - - - - <_>10 7 2 8 -1. - <_>10 7 1 4 2. - <_>11 11 1 4 2. - 0 - -0.0103717502206564 - -0.7297279834747315 - 0.0336452201008797 - <_> - - <_> - - - - <_>2 0 6 10 -1. - <_>2 5 6 5 2. - 0 - 0.1037362962961197 - 0.0313470698893070 - -0.5824512839317322 - <_> - - <_> - - - - <_>8 10 6 2 -1. - <_>8 11 6 1 2. - 0 - -1.8832299974747002e-004 - 0.1666329950094223 - -0.1372316032648087 - <_> - - <_> - - - - <_>10 0 2 1 -1. - <_>11 0 1 1 2. - 0 - -6.0749921249225736e-004 - -0.2725754082202911 - 0.0814833715558052 - <_> - - <_> - - - - <_>4 16 4 3 -1. - <_>4 17 4 1 3. - 0 - 2.3499270901083946e-003 - -0.1028544008731842 - 0.2185488939285278 - <_> - - <_> - - - - <_>7 4 3 2 -1. - <_>8 4 1 2 3. - 0 - -3.1354159582406282e-003 - -0.4924603998661041 - 0.0447473600506783 - <_> - - <_> - - - - <_>7 5 3 1 -1. - <_>8 5 1 1 3. - 0 - 1.5564589994028211e-003 - 0.0530962608754635 - -0.4052621126174927 - <_> - - <_> - - - - <_>5 5 6 3 -1. - <_>5 6 6 1 3. - 0 - 6.3236099667847157e-003 - -0.0791168063879013 - 0.2841371893882752 - <_> - - <_> - - - - <_>5 5 5 3 -1. - <_>5 6 5 1 3. - 0 - -4.8074051737785339e-003 - 0.2999025881290436 - -0.0828240811824799 - <_> - - <_> - - - - <_>10 7 6 9 -1. - <_>10 10 6 3 3. - 0 - 0.0764323025941849 - 0.0391463711857796 - -0.5731434226036072 - <_> - - <_> - - - - <_>17 4 1 2 -1. - <_>17 5 1 1 2. - 0 - 7.0249952841550112e-004 - 0.0528328716754913 - -0.3324547111988068 - <_> - - <_> - - - - <_>4 9 10 4 -1. - <_>4 9 5 2 2. - <_>9 11 5 2 2. - 0 - -8.2157138967886567e-004 - -0.2123001962900162 - 0.0881458297371864 - <_> - - <_> - - - - <_>5 6 3 10 -1. - <_>5 11 3 5 2. - 0 - -0.0101482803002000 - -0.2207161039113998 - 0.0965974032878876 - <_> - - <_> - - - - <_>2 13 18 5 -1. - <_>11 13 9 5 2. - 0 - -0.1734880954027176 - -0.5982220172882080 - 0.0325470604002476 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>5 13 3 1 3. - 0 - 4.3031540699303150e-003 - -0.0682535469532013 - 0.2898102998733521 - <_> - - <_> - - - - <_>9 12 2 4 -1. - <_>9 14 2 2 2. - 0 - -7.3378678280278109e-006 - 0.0751555636525154 - -0.2586359083652496 - <_> - - <_> - - - - <_>5 11 15 6 -1. - <_>5 13 15 2 3. - 0 - 1.9277239916846156e-003 - 0.1085646003484726 - -0.1659514009952545 - <_> - - <_> - - - - <_>16 0 4 6 -1. - <_>16 0 2 3 2. - <_>18 3 2 3 2. - 0 - -4.2054480873048306e-003 - 0.1981130987405777 - -0.0919417068362236 - <_> - - <_> - - - - <_>11 12 2 2 -1. - <_>11 12 1 1 2. - <_>12 13 1 1 2. - 0 - 1.1466189753264189e-003 - 0.0420787297189236 - -0.4399102926254273 - <_> - - <_> - - - - <_>6 6 3 5 -1. - <_>7 6 1 5 3. - 0 - -6.7244949750602245e-003 - 0.3445686101913452 - -0.0570969581604004 - <_> - - <_> - - - - <_>13 13 2 1 -1. - <_>14 13 1 1 2. - 0 - -1.4554189874615986e-005 - 0.1163256019353867 - -0.1625221073627472 - <_> - - <_> - - - - <_>5 8 3 2 -1. - <_>6 8 1 2 3. - 0 - -2.6114559732377529e-003 - 0.2808496952056885 - -0.0682430416345596 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - -1.9477460591588169e-004 - -0.1936886012554169 - 0.0934132263064384 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - 2.6438338682055473e-004 - 0.0993543714284897 - -0.2158662974834442 - <_> - - <_> - - - - <_>16 12 3 1 -1. - <_>17 12 1 1 3. - 0 - 2.0134719088673592e-003 - -0.0612092018127441 - 0.2912097871303558 - <_> - - <_> - - - - <_>8 5 12 8 -1. - <_>14 5 6 8 2. - 0 - -0.2602435946464539 - -0.8380218148231506 - 0.0211507603526115 - <_> - - <_> - - - - <_>5 13 4 4 -1. - <_>5 13 2 2 2. - <_>7 15 2 2 2. - 0 - -0.0159447006881237 - -0.6397479772567749 - 0.0221448391675949 - <_> - - <_> - - - - <_>5 7 2 3 -1. - <_>6 7 1 3 2. - 0 - 6.7249889252707362e-004 - -0.1401409059762955 - 0.1232635006308556 - <_> - - <_> - - - - <_>9 2 2 10 -1. - <_>9 2 1 5 2. - <_>10 7 1 5 2. - 0 - 0.0130427703261375 - 0.0243068896234035 - -0.6630306839942932 - <_> - - <_> - - - - <_>9 14 1 2 -1. - <_>9 15 1 1 2. - 0 - -1.4540290067088790e-005 - 0.0901373624801636 - -0.1740916967391968 - <_> - - <_> - - - - <_>15 7 2 4 -1. - <_>15 9 2 2 2. - 0 - 0.0179208293557167 - 0.0256446208804846 - -0.6506714224815369 - <_> - - <_> - - - - <_>7 5 4 3 -1. - <_>7 6 4 1 3. - 0 - 1.6542300581932068e-003 - -0.1038570031523705 - 0.1668816059827805 - <_> - - <_> - - - - <_>3 10 8 2 -1. - <_>7 10 4 2 2. - 0 - 0.0353620909154415 - 0.0230930093675852 - -0.6900941729545593 - <_> - - <_> - - - - <_>13 8 2 2 -1. - <_>13 9 2 1 2. - 0 - 3.3049840567400679e-005 - -0.1740894019603729 - 0.0938730984926224 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>9 7 2 1 3. - 0 - 3.3775588963180780e-003 - -0.0585224591195583 - 0.3049055933952332 - <_> - - <_> - - - - <_>13 10 5 2 -1. - <_>13 11 5 1 2. - 0 - 7.3239738121628761e-003 - 0.0409994088113308 - -0.4616098105907440 - <_> - - <_> - - - - <_>16 11 2 2 -1. - <_>16 11 1 1 2. - <_>17 12 1 1 2. - 0 - -2.9797051101922989e-003 - 0.5113676190376282 - -0.0362468697130680 - <_> - - <_> - - - - <_>0 10 2 4 -1. - <_>0 10 1 2 2. - <_>1 12 1 2 2. - 0 - 2.0306499209254980e-003 - 0.0653093531727791 - -0.2669849991798401 - <_> - - <_> - - - - <_>0 8 2 8 -1. - <_>0 8 1 4 2. - <_>1 12 1 4 2. - 0 - -6.8856950383633375e-004 - -0.1760412007570267 - 0.0993618965148926 - <_> - - <_> - - - - <_>6 14 5 3 -1. - <_>6 15 5 1 3. - 0 - 1.5746579738333821e-003 - -0.1031226962804794 - 0.1694055050611496 - <_> - - <_> - - - - <_>18 8 2 4 -1. - <_>19 8 1 4 2. - 0 - 1.5011089853942394e-003 - -0.0881284475326538 - 0.1889909058809280 - <_> - - <_> - - - - <_>14 2 3 1 -1. - <_>15 2 1 1 3. - 0 - 1.3503979425877333e-004 - 0.0941454768180847 - -0.1848344057798386 - <_> - - <_> - - - - <_>9 13 3 3 -1. - <_>9 14 3 1 3. - 0 - 5.5570588447153568e-003 - 0.0299590602517128 - -0.5548262000083923 - <_> - - <_> - - - - <_>5 13 6 3 -1. - <_>5 14 6 1 3. - 0 - 9.4529995694756508e-003 - -0.0531363897025585 - 0.4013828933238983 - <_> - - <_> - - - - <_>12 12 1 3 -1. - <_>12 13 1 1 3. - 0 - -6.1030662618577480e-004 - -0.2706044912338257 - 0.0668813511729240 - <_> - - <_> - - - - <_>2 14 14 6 -1. - <_>2 17 14 3 2. - 0 - -0.1132924035191536 - -0.6517850756645203 - 0.0250429902225733 - <_> - - <_> - - - - <_>7 5 2 4 -1. - <_>7 5 1 2 2. - <_>8 7 1 2 2. - 0 - -2.0354389562271535e-004 - 0.1089242026209831 - -0.1517436951398850 - <_> - - <_> - - - - <_>5 17 2 2 -1. - <_>5 17 1 1 2. - <_>6 18 1 1 2. - 0 - -1.4983189757913351e-003 - 0.2738873064517975 - -0.0584670491516590 - <_> - - <_> - - - - <_>9 3 3 5 -1. - <_>10 3 1 5 3. - 0 - 7.5277159921824932e-003 - 0.0409915298223495 - -0.4273988902568817 - <_> - - <_> - - - - <_>6 17 4 3 -1. - <_>6 18 4 1 3. - 0 - 3.6209179088473320e-003 - -0.0673092380166054 - 0.2606475055217743 - <_> - - <_> - - - - <_>10 0 6 4 -1. - <_>12 0 2 4 3. - 0 - 0.0121530499309301 - 0.0507682710886002 - -0.3831908106803894 - <_> - - <_> - - - - <_>4 8 6 10 -1. - <_>4 8 3 5 2. - <_>7 13 3 5 2. - 0 - 0.0461263395845890 - 0.0242329891771078 - -0.6503952741622925 - <_> - - <_> - - - - <_>4 3 2 6 -1. - <_>5 3 1 6 2. - 0 - 7.1408541407436132e-004 - -0.1347637027502060 - 0.1220854967832565 - <_> - - <_> - - - - <_>3 4 6 6 -1. - <_>5 4 2 6 3. - 0 - -4.4331620447337627e-003 - 0.1993961036205292 - -0.1021870970726013 - <_> - - <_> - - - - <_>5 8 2 8 -1. - <_>5 12 2 4 2. - 0 - 1.3099729549139738e-003 - 0.0745170265436172 - -0.2450371980667114 - <_> - - <_> - - - - <_>5 11 2 2 -1. - <_>5 12 2 1 2. - 0 - 2.6161450659856200e-004 - -0.0842879563570023 - 0.1992460042238236 - <_> - - <_> - - - - <_>12 13 1 3 -1. - <_>12 14 1 1 3. - 0 - -2.7577539440244436e-003 - -0.6873446702957153 - 0.0248511098325253 - <_> - - <_> - - - - <_>5 1 4 15 -1. - <_>5 6 4 5 3. - 0 - 0.0694696903228760 - 0.0384387299418449 - -0.3971717953681946 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - -1.3031469425186515e-003 - 0.2008994966745377 - -0.0917233079671860 - <_> - - <_> - - - - <_>6 11 3 3 -1. - <_>6 12 3 1 3. - 0 - 1.3012000126764178e-003 - -0.0953058525919914 - 0.1924819052219391 - <_> - - <_> - - - - <_>11 0 3 3 -1. - <_>12 0 1 3 3. - 0 - -3.9377259090542793e-003 - -0.3922409117221832 - 0.0437380112707615 - <_> - - <_> - - - - <_>2 2 15 3 -1. - <_>7 2 5 3 3. - 0 - 0.0961257070302963 - -0.0432694405317307 - 0.3744184970855713 - <_> - - <_> - - - - <_>4 0 16 5 -1. - <_>12 0 8 5 2. - 0 - -0.1918185949325562 - -0.6132056117057800 - 0.0287755392491817 - <_> - - <_> - - - - <_>13 7 6 8 -1. - <_>13 11 6 4 2. - 0 - -3.2945619896054268e-003 - -0.2244682013988495 - 0.0776550173759460 - <_> - - <_> - - - - <_>9 9 3 4 -1. - <_>9 11 3 2 2. - 0 - -8.5190916433930397e-003 - 0.4472055137157440 - -0.0413103885948658 - <_> - - <_> - - - - <_>5 2 6 16 -1. - <_>5 2 3 8 2. - <_>8 10 3 8 2. - 0 - -0.0494314692914486 - -0.5181968212127686 - 0.0368637405335903 - <_> - - <_> - - - - <_>10 7 6 3 -1. - <_>13 7 3 3 2. - 0 - 0.0231108795851469 - -0.0330784209072590 - 0.5914663076400757 - <_> - - <_> - - - - <_>12 11 2 1 -1. - <_>13 11 1 1 2. - 0 - -4.3400399590609595e-005 - 0.1139502972364426 - -0.1952629983425140 - <_> - - <_> - - - - <_>0 0 1 8 -1. - <_>0 4 1 4 2. - 0 - 5.4926839657127857e-003 - 0.0616160705685616 - -0.2559199035167694 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - 1.1886029969900846e-003 - -0.0685091167688370 - 0.2429125010967255 - <_> - - <_> - - - - <_>6 5 4 15 -1. - <_>8 5 2 15 2. - 0 - 8.8473428040742874e-003 - 0.0764672830700874 - -0.2317638993263245 - <_> - - <_> - - - - <_>7 7 2 2 -1. - <_>8 7 1 2 2. - 0 - 2.3952820338308811e-003 - -0.0446208603680134 - 0.4581176936626434 - <_> - - <_> - - - - <_>1 3 1 2 -1. - <_>1 4 1 1 2. - 0 - -1.5011220239102840e-004 - -0.1656074970960617 - 0.1062223985791206 - <_> - - <_> - - - - <_>6 2 6 11 -1. - <_>9 2 3 11 2. - 0 - -0.0234658997505903 - -0.2493131011724472 - 0.0661793574690819 - <_> - - <_> - - - - <_>9 6 9 6 -1. - <_>9 8 9 2 3. - 0 - -6.6368370316922665e-003 - 0.1435842067003250 - -0.1151050999760628 - <_> - - <_> - - - - <_>9 8 3 3 -1. - <_>9 9 3 1 3. - 0 - 1.1986029567196965e-003 - -0.0983475223183632 - 0.1760554015636444 - <_> - - <_> - - - - <_>6 8 2 3 -1. - <_>6 9 2 1 3. - 0 - 7.9502072185277939e-003 - 0.0354813784360886 - -0.5017663836479187 - <_> - - <_> - - - - <_>13 1 2 8 -1. - <_>13 5 2 4 2. - 0 - -4.5950649655424058e-004 - -0.1692876070737839 - 0.0934000834822655 - <_> - - <_> - - - - <_>6 0 6 4 -1. - <_>6 2 6 2 2. - 0 - -0.0193010699003935 - 0.4183666110038757 - -0.0511401109397411 - <_> - - <_> - - - - <_>0 6 20 14 -1. - <_>10 6 10 14 2. - 0 - 0.4016349911689758 - 0.0293589197099209 - -0.6476805806159973 - -1.6632529497146606 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>8 0 12 6 -1. - <_>8 0 6 3 2. - <_>14 3 6 3 2. - 0 - -0.0362842902541161 - 0.4284189939498901 - -0.2584043145179749 - <_> - - <_> - - - - <_>8 7 9 9 -1. - <_>8 10 9 3 3. - 0 - 0.0305208303034306 - -0.2971504032611847 - 0.2175661027431488 - <_> - - <_> - - - - <_>10 14 6 6 -1. - <_>10 14 3 3 2. - <_>13 17 3 3 2. - 0 - 3.3444820437580347e-003 - -0.2173435986042023 - 0.1975443959236145 - <_> - - <_> - - - - <_>8 7 4 10 -1. - <_>8 7 2 5 2. - <_>10 12 2 5 2. - 0 - -1.3315919786691666e-003 - 0.1553592979907990 - -0.2313368022441864 - <_> - - <_> - - - - <_>15 4 3 3 -1. - <_>15 5 3 1 3. - 0 - -1.9773480016738176e-003 - -0.4200130105018616 - 0.0885544270277023 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>16 0 2 6 3. - 0 - -3.7038238951936364e-004 - 0.1276978999376297 - -0.2387913018465042 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - -7.3736459016799927e-003 - -0.4072006046772003 - 0.0297653190791607 - <_> - - <_> - - - - <_>11 12 2 1 -1. - <_>12 12 1 1 2. - 0 - -2.1873020159546286e-005 - 0.1233820989727974 - -0.2223708927631378 - <_> - - <_> - - - - <_>11 7 3 7 -1. - <_>12 7 1 7 3. - 0 - 4.5575048716273159e-005 - -0.2309291064739227 - 0.1295361965894699 - <_> - - <_> - - - - <_>9 0 2 18 -1. - <_>9 0 1 9 2. - <_>10 9 1 9 2. - 0 - -0.0112471701577306 - -0.5476273894309998 - 0.0419076606631279 - <_> - - <_> - - - - <_>3 6 3 4 -1. - <_>4 6 1 4 3. - 0 - -8.9430268853902817e-003 - 0.2794528901576996 - -0.0908012166619301 - <_> - - <_> - - - - <_>14 10 2 2 -1. - <_>14 10 1 1 2. - <_>15 11 1 1 2. - 0 - 1.4646670024376363e-005 - -0.1677788048982620 - 0.1496804058551788 - <_> - - <_> - - - - <_>4 7 3 2 -1. - <_>5 7 1 2 3. - 0 - -6.5398351289331913e-003 - 0.3365462124347687 - -0.0719872564077377 - <_> - - <_> - - - - <_>10 14 4 3 -1. - <_>10 15 4 1 3. - 0 - 3.3825531136244535e-003 - 0.0499318800866604 - -0.4580630064010620 - <_> - - <_> - - - - <_>12 12 2 3 -1. - <_>12 13 2 1 3. - 0 - 2.7450500056147575e-003 - 0.0361195094883442 - -0.5711386203765869 - <_> - - <_> - - - - <_>3 0 2 8 -1. - <_>3 0 1 4 2. - <_>4 4 1 4 2. - 0 - 0.0103563796728849 - -0.0530491583049297 - 0.4212119877338409 - <_> - - <_> - - - - <_>14 4 5 3 -1. - <_>14 5 5 1 3. - 0 - 3.1687319278717041e-003 - 0.0628499388694763 - -0.3467491865158081 - <_> - - <_> - - - - <_>6 16 1 3 -1. - <_>6 17 1 1 3. - 0 - 1.3616570504382253e-003 - -0.0906610563397408 - 0.2525748014450073 - <_> - - <_> - - - - <_>5 16 2 3 -1. - <_>5 17 2 1 3. - 0 - -2.2238260135054588e-003 - 0.2659519016742706 - -0.0966490805149078 - <_> - - <_> - - - - <_>4 6 10 6 -1. - <_>4 6 5 3 2. - <_>9 9 5 3 2. - 0 - 0.0110908998176456 - 0.0866380631923676 - -0.3010335862636566 - <_> - - <_> - - - - <_>9 14 7 4 -1. - <_>9 16 7 2 2. - 0 - -6.7766150459647179e-004 - 0.0942778289318085 - -0.2146414965391159 - <_> - - <_> - - - - <_>10 11 2 4 -1. - <_>10 11 1 2 2. - <_>11 13 1 2 2. - 0 - -3.3104580361396074e-003 - -0.5916264057159424 - 0.0327384881675243 - <_> - - <_> - - - - <_>5 12 4 3 -1. - <_>5 13 4 1 3. - 0 - 2.3221869487315416e-003 - -0.0955572500824928 - 0.2054619938135147 - <_> - - <_> - - - - <_>5 13 3 2 -1. - <_>5 14 3 1 2. - 0 - 3.0947118648327887e-004 - -0.1299227029085159 - 0.1770471930503845 - <_> - - <_> - - - - <_>7 13 8 4 -1. - <_>7 15 8 2 2. - 0 - -0.0322141684591770 - -0.6466249227523804 - 0.0317492596805096 - <_> - - <_> - - - - <_>8 4 3 1 -1. - <_>9 4 1 1 3. - 0 - -8.3192758029326797e-004 - -0.3066675066947937 - 0.0610405914485455 - <_> - - <_> - - - - <_>6 1 1 4 -1. - <_>6 3 1 2 2. - 0 - 3.9188290247693658e-004 - -0.1579546928405762 - 0.1183035001158714 - <_> - - <_> - - - - <_>8 0 12 6 -1. - <_>8 0 6 3 2. - <_>14 3 6 3 2. - 0 - -0.0362037383019924 - -0.2273122966289520 - 0.0831830129027367 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - 2.6437509804964066e-003 - -0.0766910612583160 - 0.2354550957679749 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - -3.4368310589343309e-003 - 0.3605703115463257 - -0.0736729875206947 - <_> - - <_> - - - - <_>7 4 3 1 -1. - <_>8 4 1 1 3. - 0 - -5.5921601597219706e-004 - -0.2534317970275879 - 0.0782756432890892 - <_> - - <_> - - - - <_>7 9 2 2 -1. - <_>7 9 1 1 2. - <_>8 10 1 1 2. - 0 - 4.3010139052057639e-005 - -0.1822309941053391 - 0.0975393801927567 - <_> - - <_> - - - - <_>15 14 4 6 -1. - <_>15 14 2 3 2. - <_>17 17 2 3 2. - 0 - 5.3192679770290852e-003 - -0.0769019499421120 - 0.2422181069850922 - <_> - - <_> - - - - <_>7 9 1 4 -1. - <_>7 11 1 2 2. - 0 - -6.9484501145780087e-003 - -0.5827587246894836 - 0.0346019491553307 - <_> - - <_> - - - - <_>10 11 3 9 -1. - <_>11 11 1 9 3. - 0 - 0.0124477799981833 - 0.0238836593925953 - -0.6171249747276306 - <_> - - <_> - - - - <_>17 11 3 1 -1. - <_>18 11 1 1 3. - 0 - 1.0083100060001016e-003 - -0.0751521810889244 - 0.2474427074193955 - <_> - - <_> - - - - <_>17 11 3 1 -1. - <_>18 11 1 1 3. - 0 - -2.3544009309262037e-003 - 0.3145940005779266 - -0.0650262311100960 - <_> - - <_> - - - - <_>0 1 1 2 -1. - <_>0 2 1 1 2. - 0 - 4.5676861191168427e-004 - 0.0797581970691681 - -0.2377721965312958 - <_> - - <_> - - - - <_>9 15 7 3 -1. - <_>9 16 7 1 3. - 0 - 6.6723190248012543e-003 - 0.0387791991233826 - -0.4604541957378388 - <_> - - <_> - - - - <_>15 0 2 2 -1. - <_>16 0 1 2 2. - 0 - 7.1861818469187710e-006 - -0.1311053931713104 - 0.1253253072500229 - <_> - - <_> - - - - <_>5 0 1 14 -1. - <_>5 7 1 7 2. - 0 - 0.0303925909101963 - 0.0296705309301615 - -0.5387092828750610 - <_> - - <_> - - - - <_>7 3 1 2 -1. - <_>7 4 1 1 2. - 0 - 1.4835850379313342e-005 - -0.1577858030796051 - 0.1056685969233513 - <_> - - <_> - - - - <_>7 0 4 6 -1. - <_>7 2 4 2 3. - 0 - 0.0144158601760864 - -0.0762713477015495 - 0.3059771060943604 - <_> - - <_> - - - - <_>7 2 3 2 -1. - <_>8 2 1 2 3. - 0 - 3.2787520904093981e-003 - 0.0444643087685108 - -0.3892802894115448 - <_> - - <_> - - - - <_>5 12 4 3 -1. - <_>5 13 4 1 3. - 0 - 0.0107705201953650 - -0.0393240116536617 - 0.4149397909641266 - <_> - - <_> - - - - <_>18 5 1 2 -1. - <_>18 6 1 1 2. - 0 - 5.4678268497809768e-004 - 0.0587216913700104 - -0.2754693031311035 - <_> - - <_> - - - - <_>18 0 2 10 -1. - <_>18 0 1 5 2. - <_>19 5 1 5 2. - 0 - -1.8106499919667840e-003 - 0.1828175038099289 - -0.0936754271388054 - <_> - - <_> - - - - <_>0 2 13 6 -1. - <_>0 4 13 2 3. - 0 - 0.1177124977111816 - 0.0231757592409849 - -0.7069668173789978 - <_> - - <_> - - - - <_>0 0 2 2 -1. - <_>0 0 1 1 2. - <_>1 1 1 1 2. - 0 - -3.1166549888439476e-004 - -0.2058593034744263 - 0.0765738412737846 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - -9.7939418628811836e-003 - 0.4873268008232117 - -0.0347460284829140 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 1.0002780472859740e-003 - -0.1100362017750740 - 0.1549056023359299 - <_> - - <_> - - - - <_>6 12 2 4 -1. - <_>7 12 1 4 2. - 0 - 6.9929230958223343e-003 - 0.0329236090183258 - -0.5432611703872681 - <_> - - <_> - - - - <_>7 9 4 10 -1. - <_>9 9 2 10 2. - 0 - 0.0341630205512047 - 0.0180628206580877 - -0.7080914974212647 - <_> - - <_> - - - - <_>2 0 9 16 -1. - <_>2 8 9 8 2. - 0 - -0.2080841064453125 - -0.6787961125373840 - 0.0202558208256960 - <_> - - <_> - - - - <_>10 3 2 8 -1. - <_>10 3 1 4 2. - <_>11 7 1 4 2. - 0 - 2.4889659835025668e-004 - -0.1771952062845230 - 0.0881523564457893 - <_> - - <_> - - - - <_>1 2 12 3 -1. - <_>5 2 4 3 3. - 0 - -9.3355607241392136e-003 - 0.1794805973768234 - -0.0944746211171150 - <_> - - <_> - - - - <_>4 6 2 3 -1. - <_>5 6 1 3 2. - 0 - 2.9192469082772732e-004 - -0.1378616988658905 - 0.1381925940513611 - <_> - - <_> - - - - <_>1 7 6 10 -1. - <_>3 7 2 10 3. - 0 - 9.1989226639270782e-003 - -0.1026910990476608 - 0.1761810034513474 - <_> - - <_> - - - - <_>1 14 2 1 -1. - <_>2 14 1 1 2. - 0 - 6.8165437551215291e-004 - 0.0748213082551956 - -0.2362183034420013 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - -1.4507620107906405e-005 - 0.0958617702126503 - -0.1778573989868164 - <_> - - <_> - - - - <_>12 8 3 5 -1. - <_>13 8 1 5 3. - 0 - 1.7662490427028388e-004 - -0.1380535960197449 - 0.1339432001113892 - <_> - - <_> - - - - <_>6 5 9 6 -1. - <_>6 7 9 2 3. - 0 - -1.7513500060886145e-003 - 0.0776235833764076 - -0.2317402958869934 - <_> - - <_> - - - - <_>13 8 2 3 -1. - <_>13 9 2 1 3. - 0 - 5.1342020742595196e-003 - 0.0303639695048332 - -0.5242084860801697 - <_> - - <_> - - - - <_>7 15 6 4 -1. - <_>7 15 3 2 2. - <_>10 17 3 2 2. - 0 - 9.4114318490028381e-003 - -0.0589945688843727 - 0.3029138147830963 - <_> - - <_> - - - - <_>10 15 6 3 -1. - <_>10 16 6 1 3. - 0 - -1.0448819957673550e-003 - -0.1712469011545181 - 0.1015603020787239 - <_> - - <_> - - - - <_>3 2 2 6 -1. - <_>3 2 1 3 2. - <_>4 5 1 3 2. - 0 - -6.3579198904335499e-003 - 0.3198671042919159 - -0.0506944507360458 - <_> - - <_> - - - - <_>10 15 3 5 -1. - <_>11 15 1 5 3. - 0 - -6.3502117991447449e-003 - -0.5241327285766602 - 0.0318000689148903 - <_> - - <_> - - - - <_>12 9 5 2 -1. - <_>12 10 5 1 2. - 0 - 0.0122517598792911 - 0.0165596809238195 - -0.7942218780517578 - <_> - - <_> - - - - <_>4 11 10 1 -1. - <_>9 11 5 1 2. - 0 - -0.0140007203444839 - -0.5444440245628357 - 0.0246525593101978 - <_> - - <_> - - - - <_>6 12 6 2 -1. - <_>6 12 3 1 2. - <_>9 13 3 1 2. - 0 - 1.9229920580983162e-003 - -0.0769449770450592 - 0.2188820987939835 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - -3.4030789975076914e-003 - 0.3014340102672577 - -0.0580233298242092 - <_> - - <_> - - - - <_>3 12 8 4 -1. - <_>3 12 4 2 2. - <_>7 14 4 2 2. - 0 - -0.0277286097407341 - -0.5670499801635742 - 0.0300717204809189 - <_> - - <_> - - - - <_>0 3 1 3 -1. - <_>0 4 1 1 3. - 0 - 1.4990579802542925e-004 - 0.0914046168327332 - -0.1698942929506302 - <_> - - <_> - - - - <_>10 12 2 1 -1. - <_>11 12 1 1 2. - 0 - -1.4532960449287202e-005 - 0.1044266000390053 - -0.1398334950208664 - <_> - - <_> - - - - <_>3 10 3 6 -1. - <_>3 12 3 2 3. - 0 - 0.0283159501850605 - 0.0178121291100979 - -0.8120127916336060 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - -1.7363600200042129e-003 - 0.1968863010406494 - -0.0763988196849823 - <_> - - <_> - - - - <_>8 7 4 6 -1. - <_>8 9 4 2 3. - 0 - -0.0220814906060696 - 0.4449751079082489 - -0.0334458686411381 - <_> - - <_> - - - - <_>12 11 1 3 -1. - <_>12 12 1 1 3. - 0 - 1.2189210392534733e-003 - 0.0491547808051109 - -0.3779031038284302 - <_> - - <_> - - - - <_>12 11 2 3 -1. - <_>12 12 2 1 3. - 0 - -5.4838892538100481e-004 - -0.2282302975654602 - 0.0804464966058731 - <_> - - <_> - - - - <_>6 10 2 2 -1. - <_>6 10 1 1 2. - <_>7 11 1 1 2. - 0 - -9.3702552840113640e-004 - 0.2525896131992340 - -0.0653892010450363 - <_> - - <_> - - - - <_>3 10 9 6 -1. - <_>3 13 9 3 2. - 0 - 0.0124967200681567 - 0.0382158793509007 - -0.4046553075313568 - <_> - - <_> - - - - <_>4 8 7 10 -1. - <_>4 13 7 5 2. - 0 - -0.0167643707245588 - -0.1450871974229813 - 0.1211981028318405 - <_> - - <_> - - - - <_>6 8 11 3 -1. - <_>6 9 11 1 3. - 0 - 5.6504327803850174e-003 - -0.0871391370892525 - 0.2219441980123520 - <_> - - <_> - - - - <_>6 5 1 14 -1. - <_>6 12 1 7 2. - 0 - 5.2610319107770920e-004 - 0.0872220769524574 - -0.2050247043371201 - <_> - - <_> - - - - <_>13 6 5 10 -1. - <_>13 11 5 5 2. - 0 - 1.5574200078845024e-003 - -0.1703668981790543 - 0.0944352820515633 - <_> - - <_> - - - - <_>2 0 13 15 -1. - <_>2 5 13 5 3. - 0 - 0.2560909092426300 - 0.0177901107817888 - -0.7405092120170593 - <_> - - <_> - - - - <_>6 7 2 2 -1. - <_>7 7 1 2 2. - 0 - 3.3561999443918467e-003 - -0.0426672697067261 - 0.3757339119911194 - <_> - - <_> - - - - <_>4 5 9 4 -1. - <_>7 5 3 4 3. - 0 - 0.0470729283988476 - 0.0320152193307877 - -0.6452227830886841 - <_> - - <_> - - - - <_>6 7 3 3 -1. - <_>7 7 1 3 3. - 0 - -2.2168930154293776e-003 - 0.2075704038143158 - -0.0773726925253868 - <_> - - <_> - - - - <_>8 1 3 4 -1. - <_>9 1 1 4 3. - 0 - 5.0796428695321083e-003 - 0.0418293289840221 - -0.3772296905517578 - <_> - - <_> - - - - <_>8 11 7 2 -1. - <_>8 12 7 1 2. - 0 - 7.0120906457304955e-005 - 0.0810318887233734 - -0.1850626021623612 - <_> - - <_> - - - - <_>4 7 3 2 -1. - <_>5 7 1 2 3. - 0 - -5.2204862004145980e-004 - 0.1252845972776413 - -0.1309031993150711 - <_> - - <_> - - - - <_>4 14 2 6 -1. - <_>4 14 1 3 2. - <_>5 17 1 3 2. - 0 - -6.1609707772731781e-003 - 0.3117778897285461 - -0.0512521788477898 - <_> - - <_> - - - - <_>0 7 8 13 -1. - <_>4 7 4 13 2. - 0 - -0.2842487990856171 - -0.7034050822257996 - 0.0228110793977976 - <_> - - <_> - - - - <_>6 3 4 9 -1. - <_>8 3 2 9 2. - 0 - -0.0417467206716537 - -0.7891426086425781 - 0.0166863501071930 - <_> - - <_> - - - - <_>9 12 2 3 -1. - <_>9 13 2 1 3. - 0 - -1.0051350109279156e-003 - -0.2218129932880402 - 0.0618873983621597 - <_> - - <_> - - - - <_>16 14 2 6 -1. - <_>16 14 1 3 2. - <_>17 17 1 3 2. - 0 - -1.3900640187785029e-003 - 0.1879747956991196 - -0.0765824019908905 - <_> - - <_> - - - - <_>11 14 2 3 -1. - <_>11 15 2 1 3. - 0 - -4.0118378819897771e-004 - -0.1729117035865784 - 0.0868067592382431 - <_> - - <_> - - - - <_>11 14 1 2 -1. - <_>11 15 1 1 2. - 0 - -2.9202610676293261e-005 - 0.0923197790980339 - -0.1713646054267883 - <_> - - <_> - - - - <_>8 8 3 2 -1. - <_>8 9 3 1 2. - 0 - -2.6532830670475960e-003 - 0.3942284882068634 - -0.0398264490067959 - <_> - - <_> - - - - <_>13 1 3 5 -1. - <_>14 1 1 5 3. - 0 - -7.8933471813797951e-003 - -0.4332689046859741 - 0.0366033613681793 - <_> - - <_> - - - - <_>6 15 8 2 -1. - <_>6 15 4 1 2. - <_>10 16 4 1 2. - 0 - 8.7933447211980820e-003 - -0.0332059487700462 - 0.4874078929424286 - <_> - - <_> - - - - <_>13 2 3 4 -1. - <_>14 2 1 4 3. - 0 - 0.0120147597044706 - 0.0222442205995321 - -0.8159726858139038 - <_> - - <_> - - - - <_>1 8 1 6 -1. - <_>1 10 1 2 3. - 0 - 2.1147020161151886e-003 - 0.0649429336190224 - -0.2095922976732254 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>12 0 4 1 2. - <_>16 1 4 1 2. - 0 - -9.9916034378111362e-004 - 0.1540234982967377 - -0.1014946997165680 - <_> - - <_> - - - - <_>5 8 3 1 -1. - <_>6 8 1 1 3. - 0 - -7.6499581336975098e-004 - 0.2023645043373108 - -0.0711996629834175 - <_> - - <_> - - - - <_>7 5 2 4 -1. - <_>8 5 1 4 2. - 0 - -4.2193511035293341e-004 - 0.1152143031358719 - -0.1284545958042145 - <_> - - <_> - - - - <_>7 2 2 1 -1. - <_>8 2 1 1 2. - 0 - -4.1548791341483593e-004 - -0.2116852998733521 - 0.0703761428594589 - <_> - - <_> - - - - <_>0 4 2 3 -1. - <_>0 5 2 1 3. - 0 - 1.5300279483199120e-003 - 0.0612637586891651 - -0.2226932048797607 - <_> - - <_> - - - - <_>3 17 2 2 -1. - <_>3 17 1 1 2. - <_>4 18 1 1 2. - 0 - -2.6573969516903162e-003 - 0.3846232891082764 - -0.0382760204374790 - <_> - - <_> - - - - <_>6 0 12 9 -1. - <_>12 0 6 9 2. - 0 - -0.2198860049247742 - -0.5154678225517273 - 0.0280993897467852 - <_> - - <_> - - - - <_>7 0 12 3 -1. - <_>11 0 4 3 3. - 0 - -8.7377207819372416e-004 - 0.1014932990074158 - -0.1399068981409073 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 0 3 3 2. - <_>17 3 3 3 2. - 0 - 7.5169820338487625e-003 - -0.0616716407239437 - 0.2548643052577972 - <_> - - <_> - - - - <_>15 2 1 2 -1. - <_>15 3 1 1 2. - 0 - -1.3438290625344962e-004 - -0.1661804020404816 - 0.0889388769865036 - -1.5384509563446045 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>8 2 1 6 -1. - <_>8 4 1 2 3. - 0 - 3.5007519181817770e-003 - -0.2825669050216675 - 0.3362810909748077 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>6 7 1 2 3. - 0 - 4.1042729280889034e-003 - -0.1587762981653214 - 0.3409196138381958 - <_> - - <_> - - - - <_>6 7 4 6 -1. - <_>6 10 4 3 2. - 0 - 9.8724407143890858e-004 - -0.4609476029872894 - 0.1177171990275383 - <_> - - <_> - - - - <_>8 6 10 2 -1. - <_>13 6 5 2 2. - 0 - -4.0168981067836285e-003 - 0.1399492025375366 - -0.3847660124301910 - <_> - - <_> - - - - <_>2 1 4 15 -1. - <_>4 1 2 15 2. - 0 - -0.0427845008671284 - 0.3151994943618774 - -0.1167381033301354 - <_> - - <_> - - - - <_>5 9 3 6 -1. - <_>5 12 3 3 2. - 0 - -5.6273501832038164e-004 - 0.0823151096701622 - -0.3359470069408417 - <_> - - <_> - - - - <_>12 11 2 1 -1. - <_>13 11 1 1 2. - 0 - -4.3416650441940874e-005 - 0.1069177985191345 - -0.2506802976131439 - <_> - - <_> - - - - <_>6 4 6 2 -1. - <_>8 4 2 2 3. - 0 - 0.0153475701808929 - 9.7383828833699226e-003 - -0.6461243033409119 - <_> - - <_> - - - - <_>12 9 4 8 -1. - <_>12 13 4 4 2. - 0 - 1.8295480404049158e-003 - 0.0891644433140755 - -0.2963764071464539 - <_> - - <_> - - - - <_>15 8 2 4 -1. - <_>15 10 2 2 2. - 0 - 3.2098879455588758e-004 - -0.2313679009675980 - 0.1147847995162010 - <_> - - <_> - - - - <_>6 12 3 3 -1. - <_>6 13 3 1 3. - 0 - 1.0728760389611125e-003 - -0.1298218965530396 - 0.1965368986129761 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - -4.9566011875867844e-003 - 0.3531399965286255 - -0.0769897773861885 - <_> - - <_> - - - - <_>5 10 4 6 -1. - <_>7 10 2 6 2. - 0 - -1.6319400165230036e-003 - -0.2370198965072632 - 0.1031965985894203 - <_> - - <_> - - - - <_>7 8 2 9 -1. - <_>7 11 2 3 3. - 0 - 0.0198620501905680 - 0.0591875985264778 - -0.4095511138439179 - <_> - - <_> - - - - <_>5 13 4 3 -1. - <_>5 14 4 1 3. - 0 - -9.5205483958125114e-003 - 0.3906176984310150 - -0.0576475784182549 - <_> - - <_> - - - - <_>11 12 2 2 -1. - <_>11 12 1 1 2. - <_>12 13 1 1 2. - 0 - -1.0885810479521751e-003 - -0.5290268063545227 - 0.0449610017240047 - <_> - - <_> - - - - <_>5 13 5 3 -1. - <_>5 14 5 1 3. - 0 - 3.5348529927432537e-003 - -0.0927075371146202 - 0.2444998025894165 - <_> - - <_> - - - - <_>4 9 8 1 -1. - <_>8 9 4 1 2. - 0 - 5.7174800895154476e-003 - 0.0573061890900135 - -0.3987899124622345 - <_> - - <_> - - - - <_>12 0 8 6 -1. - <_>12 0 4 3 2. - <_>16 3 4 3 2. - 0 - -1.4010589802637696e-003 - 0.1075778007507324 - -0.1952082067728043 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - -2.2306239698082209e-003 - -0.6132832765579224 - 0.0278753396123648 - <_> - - <_> - - - - <_>8 4 3 3 -1. - <_>9 4 1 3 3. - 0 - -5.0583072006702423e-003 - -0.5473973155021668 - 0.0304825305938721 - <_> - - <_> - - - - <_>8 0 7 15 -1. - <_>8 5 7 5 3. - 0 - 0.1372572034597397 - 0.0281623005867004 - -0.6081774830818176 - <_> - - <_> - - - - <_>3 0 8 4 -1. - <_>3 0 4 2 2. - <_>7 2 4 2 2. - 0 - 3.7828299682587385e-003 - -0.1264097988605499 - 0.1338230967521668 - <_> - - <_> - - - - <_>0 11 20 1 -1. - <_>10 11 10 1 2. - 0 - -0.0106290299445391 - -0.1734337955713272 - 0.0999545827507973 - <_> - - <_> - - - - <_>3 14 3 2 -1. - <_>4 14 1 2 3. - 0 - 5.6623672135174274e-003 - -0.0524192303419113 - 0.3294081985950470 - <_> - - <_> - - - - <_>3 11 3 8 -1. - <_>4 11 1 8 3. - 0 - -4.5901038683950901e-003 - 0.1878466010093689 - -0.0926810428500175 - <_> - - <_> - - - - <_>7 13 2 5 -1. - <_>8 13 1 5 2. - 0 - 7.1088741533458233e-003 - 0.0326054096221924 - -0.5796813964843750 - <_> - - <_> - - - - <_>14 4 3 3 -1. - <_>14 5 3 1 3. - 0 - -1.9310249481350183e-003 - -0.2870723903179169 - 0.0586587004363537 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - 3.5559700336307287e-003 - -0.0628413930535316 - 0.3023276031017304 - <_> - - <_> - - - - <_>6 12 1 2 -1. - <_>6 13 1 1 2. - 0 - 2.1007249597460032e-004 - -0.1202944964170456 - 0.2072288990020752 - <_> - - <_> - - - - <_>5 13 3 1 -1. - <_>6 13 1 1 3. - 0 - 3.0181880574673414e-003 - 0.0427644215524197 - -0.4556720852851868 - <_> - - <_> - - - - <_>12 11 1 3 -1. - <_>12 12 1 1 3. - 0 - -2.0919379312545061e-003 - -0.5806704163551331 - 0.0247723907232285 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 4.9380292184650898e-003 - -0.0678257793188095 - 0.2671546041965485 - <_> - - <_> - - - - <_>5 9 1 3 -1. - <_>5 10 1 1 3. - 0 - 1.0227119782939553e-003 - -0.1105057969689369 - 0.1713601052761078 - <_> - - <_> - - - - <_>1 9 12 9 -1. - <_>1 12 12 3 3. - 0 - -0.0912167131900787 - -0.5561740994453430 - 0.0311765093356371 - <_> - - <_> - - - - <_>12 14 3 3 -1. - <_>12 15 3 1 3. - 0 - 1.9377609714865685e-003 - 0.0524700693786144 - -0.3340210020542145 - <_> - - <_> - - - - <_>10 14 5 3 -1. - <_>10 15 5 1 3. - 0 - -4.5235231518745422e-003 - -0.3862803876399994 - 0.0448835305869579 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 1.1070469627156854e-003 - -0.0946480110287666 - 0.1769437044858933 - <_> - - <_> - - - - <_>5 11 2 6 -1. - <_>5 14 2 3 2. - 0 - -0.0145228896290064 - -0.4485464096069336 - 0.0406540706753731 - <_> - - <_> - - - - <_>6 5 2 14 -1. - <_>6 12 2 7 2. - 0 - 0.0208956394344568 - 0.0359883904457092 - -0.4431704878807068 - <_> - - <_> - - - - <_>2 8 5 2 -1. - <_>2 9 5 1 2. - 0 - 7.3273790803796146e-006 - -0.1973697990179062 - 0.0881317630410194 - <_> - - <_> - - - - <_>10 14 1 2 -1. - <_>10 15 1 1 2. - 0 - -1.4750339687452652e-005 - 0.0882030129432678 - -0.1938769966363907 - <_> - - <_> - - - - <_>7 14 4 6 -1. - <_>7 16 4 2 3. - 0 - 0.0101600196212530 - -0.0736835226416588 - 0.2772558927536011 - <_> - - <_> - - - - <_>8 12 3 1 -1. - <_>9 12 1 1 3. - 0 - 1.4658429790870287e-005 - -0.1351404041051865 - 0.1116539016366005 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - 2.9789519030600786e-003 - -0.0563563890755177 - 0.2903389930725098 - <_> - - <_> - - - - <_>3 6 3 4 -1. - <_>4 6 1 4 3. - 0 - 6.7907930351793766e-003 - -0.0554680600762367 - 0.2965075075626373 - <_> - - <_> - - - - <_>4 4 3 8 -1. - <_>4 8 3 4 2. - 0 - 0.0357466191053391 - 0.0442322716116905 - -0.3794310092926025 - <_> - - <_> - - - - <_>12 5 2 2 -1. - <_>12 6 2 1 2. - 0 - -8.6023868061602116e-004 - -0.2552424073219299 - 0.0639833286404610 - <_> - - <_> - - - - <_>16 10 2 2 -1. - <_>16 10 1 1 2. - <_>17 11 1 1 2. - 0 - -3.2749359961599112e-003 - 0.5164237022399902 - -0.0308024100959301 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - -1.4287419617176056e-004 - -0.1701482981443405 - 0.0902005508542061 - <_> - - <_> - - - - <_>7 0 5 8 -1. - <_>7 4 5 4 2. - 0 - -0.0592520609498024 - 0.4478740096092224 - -0.0348029993474483 - <_> - - <_> - - - - <_>4 5 8 10 -1. - <_>4 5 4 5 2. - <_>8 10 4 5 2. - 0 - 0.0491697415709496 - 0.0437972284853458 - -0.3933770060539246 - <_> - - <_> - - - - <_>7 5 3 3 -1. - <_>7 6 3 1 3. - 0 - 2.4047859478741884e-003 - -0.0859821587800980 - 0.1759777069091797 - <_> - - <_> - - - - <_>10 6 10 14 -1. - <_>10 13 10 7 2. - 0 - -0.0885699987411499 - -0.2969442903995514 - 0.0567525215446949 - <_> - - <_> - - - - <_>8 6 2 3 -1. - <_>8 7 2 1 3. - 0 - 3.5266599152237177e-003 - -0.0541605390608311 - 0.3235999047756195 - <_> - - <_> - - - - <_>13 10 1 4 -1. - <_>13 12 1 2 2. - 0 - -1.4674359590571839e-005 - 0.1009529978036881 - -0.1719594001770020 - <_> - - <_> - - - - <_>3 9 12 4 -1. - <_>3 9 6 2 2. - <_>9 11 6 2 2. - 0 - -0.0106728803366423 - -0.3910335898399353 - 0.0396874994039536 - <_> - - <_> - - - - <_>7 14 3 6 -1. - <_>7 16 3 2 3. - 0 - -0.0131775699555874 - 0.2746025025844574 - -0.0555244088172913 - <_> - - <_> - - - - <_>10 10 3 2 -1. - <_>11 10 1 2 3. - 0 - -2.0427990239113569e-003 - -0.3261694014072418 - 0.0511519387364388 - <_> - - <_> - - - - <_>3 4 10 4 -1. - <_>3 4 5 2 2. - <_>8 6 5 2 2. - 0 - 0.0254307091236115 - 0.0344121493399143 - -0.3912068009376526 - <_> - - <_> - - - - <_>4 10 4 3 -1. - <_>4 11 4 1 3. - 0 - 6.6575622186064720e-003 - -0.0621246397495270 - 0.2549391090869904 - <_> - - <_> - - - - <_>5 3 6 4 -1. - <_>5 3 3 2 2. - <_>8 5 3 2 2. - 0 - -0.0249226298183203 - -0.7561764717102051 - 0.0205200500786304 - <_> - - <_> - - - - <_>6 8 6 10 -1. - <_>9 8 3 10 2. - 0 - 0.0648694783449173 - 0.0135357603430748 - -0.8518260717391968 - <_> - - <_> - - - - <_>10 15 6 3 -1. - <_>10 16 6 1 3. - 0 - -1.9129139836877584e-003 - -0.2060957998037338 - 0.0688096135854721 - <_> - - <_> - - - - <_>3 4 3 7 -1. - <_>4 4 1 7 3. - 0 - -2.7280850335955620e-003 - 0.1385322064161301 - -0.1130895987153053 - <_> - - <_> - - - - <_>3 3 3 11 -1. - <_>4 3 1 11 3. - 0 - 3.9647668600082397e-003 - -0.0859800502657890 - 0.1886792927980423 - <_> - - <_> - - - - <_>7 14 5 3 -1. - <_>7 15 5 1 3. - 0 - 8.6866566562093794e-005 - -0.1340935975313187 - 0.1154389008879662 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - -1.0680439881980419e-003 - 0.2404395937919617 - -0.0595842301845551 - <_> - - <_> - - - - <_>9 0 3 4 -1. - <_>10 0 1 4 3. - 0 - 6.4973197877407074e-003 - 0.0357217416167259 - -0.4382789134979248 - <_> - - <_> - - - - <_>11 1 3 1 -1. - <_>12 1 1 1 3. - 0 - 3.3825050923041999e-004 - 0.0751887708902359 - -0.1924086958169937 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - 2.4638089817017317e-003 - -0.0381082482635975 - 0.4139853119850159 - <_> - - <_> - - - - <_>0 10 2 1 -1. - <_>1 10 1 1 2. - 0 - 7.1629788726568222e-004 - 0.0676755607128143 - -0.2312994003295898 - <_> - - <_> - - - - <_>17 0 2 8 -1. - <_>17 0 1 4 2. - <_>18 4 1 4 2. - 0 - -1.1354340240359306e-003 - 0.1641391962766647 - -0.0982241407036781 - <_> - - <_> - - - - <_>6 7 6 2 -1. - <_>8 7 2 2 3. - 0 - -4.6024488983675838e-004 - 0.0788791030645370 - -0.1819128990173340 - <_> - - <_> - - - - <_>5 7 6 9 -1. - <_>8 7 3 9 2. - 0 - -8.1474315375089645e-003 - -0.1862782984972000 - 0.0776966735720634 - <_> - - <_> - - - - <_>6 8 9 3 -1. - <_>9 8 3 3 3. - 0 - -0.0338823311030865 - 0.4181846082210541 - -0.0401093512773514 - <_> - - <_> - - - - <_>11 7 6 4 -1. - <_>13 7 2 4 3. - 0 - -4.3395790271461010e-003 - 0.1896183937788010 - -0.0835095569491386 - <_> - - <_> - - - - <_>8 5 2 2 -1. - <_>9 5 1 2 2. - 0 - 2.4691419675946236e-003 - 0.0437569916248322 - -0.3828414082527161 - <_> - - <_> - - - - <_>15 3 4 10 -1. - <_>15 8 4 5 2. - 0 - 0.0876881778240204 - 0.0234664306044579 - -0.5999131798744202 - <_> - - <_> - - - - <_>9 2 1 2 -1. - <_>9 3 1 1 2. - 0 - 7.1277258939517196e-006 - -0.1457494944334030 - 0.0941810384392738 - <_> - - <_> - - - - <_>7 15 8 2 -1. - <_>7 15 4 1 2. - <_>11 16 4 1 2. - 0 - -2.2863550111651421e-003 - 0.2217684984207153 - -0.0626305416226387 - <_> - - <_> - - - - <_>6 5 2 9 -1. - <_>7 5 1 9 2. - 0 - -1.4718780221301131e-005 - 0.1121044009923935 - -0.1340776979923248 - <_> - - <_> - - - - <_>6 6 2 4 -1. - <_>7 6 1 4 2. - 0 - 2.9124629218131304e-003 - -0.0611139312386513 - 0.2692106962203980 - <_> - - <_> - - - - <_>10 15 2 4 -1. - <_>11 15 1 4 2. - 0 - -7.2532321792095900e-004 - -0.1831759065389633 - 0.0902047231793404 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -1.7109309555962682e-003 - -0.2915098071098328 - 0.0568658001720905 - <_> - - <_> - - - - <_>12 9 7 4 -1. - <_>12 11 7 2 2. - 0 - 0.0350501388311386 - 0.0242599993944168 - -0.5992606878280640 - <_> - - <_> - - - - <_>5 9 9 3 -1. - <_>8 9 3 3 3. - 0 - 0.0251192599534988 - -0.0464993901550770 - 0.3307805955410004 - <_> - - <_> - - - - <_>5 8 6 5 -1. - <_>8 8 3 5 2. - 0 - 0.0139249796047807 - 0.0543940998613834 - -0.3243145942687988 - <_> - - <_> - - - - <_>7 16 4 3 -1. - <_>7 17 4 1 3. - 0 - 1.2507860083132982e-003 - -0.0862751007080078 - 0.1608397960662842 - <_> - - <_> - - - - <_>15 4 4 3 -1. - <_>15 5 4 1 3. - 0 - 3.2347340602427721e-003 - 0.0402146689593792 - -0.3341436982154846 - <_> - - <_> - - - - <_>16 10 2 2 -1. - <_>16 10 1 1 2. - <_>17 11 1 1 2. - 0 - 2.3993090726435184e-003 - -0.0360994488000870 - 0.4033296108245850 - <_> - - <_> - - - - <_>5 6 6 9 -1. - <_>8 6 3 9 2. - 0 - -0.0644688606262207 - -0.9235547184944153 - 0.0171044394373894 - <_> - - <_> - - - - <_>10 0 10 6 -1. - <_>10 0 5 3 2. - <_>15 3 5 3 2. - 0 - 0.0269838795065880 - -0.0413239710032940 - 0.3809542059898377 - <_> - - <_> - - - - <_>13 14 1 2 -1. - <_>13 15 1 1 2. - 0 - -1.4244250451156404e-005 - 0.0984536781907082 - -0.1385474950075150 - <_> - - <_> - - - - <_>10 4 3 1 -1. - <_>11 4 1 1 3. - 0 - 3.6304299719631672e-003 - 0.0225328207015991 - -0.5774018764495850 - <_> - - <_> - - - - <_>6 16 1 3 -1. - <_>6 17 1 1 3. - 0 - -2.7509450446814299e-003 - 0.2865664958953857 - -0.0490126796066761 - <_> - - <_> - - - - <_>11 13 4 3 -1. - <_>11 14 4 1 3. - 0 - 3.4084690269082785e-003 - 0.0385661609470844 - -0.3518727123737335 - <_> - - <_> - - - - <_>14 10 6 6 -1. - <_>14 10 3 3 2. - <_>17 13 3 3 2. - 0 - -2.0442469976842403e-003 - 0.1549983024597168 - -0.0812809988856316 - <_> - - <_> - - - - <_>1 1 1 2 -1. - <_>1 2 1 1 2. - 0 - -3.3763761166483164e-004 - -0.1896982043981552 - 0.0734975412487984 - <_> - - <_> - - - - <_>6 15 1 3 -1. - <_>6 16 1 1 3. - 0 - -1.9649739842861891e-003 - 0.2403029948472977 - -0.0536984503269196 - <_> - - <_> - - - - <_>7 15 1 3 -1. - <_>7 16 1 1 3. - 0 - 2.6115038781426847e-004 - -0.1058589965105057 - 0.1455180048942566 - <_> - - <_> - - - - <_>8 16 3 2 -1. - <_>9 16 1 2 3. - 0 - -2.4496200494468212e-003 - -0.3351194858551025 - 0.0439496412873268 - <_> - - <_> - - - - <_>5 8 3 9 -1. - <_>6 8 1 9 3. - 0 - 0.0257911700755358 - 0.0194439701735973 - -0.6313567757606506 - <_> - - <_> - - - - <_>3 3 2 10 -1. - <_>3 3 1 5 2. - <_>4 8 1 5 2. - 0 - -1.7996380338445306e-003 - 0.1562016010284424 - -0.0896696224808693 - <_> - - <_> - - - - <_>3 6 3 1 -1. - <_>4 6 1 1 3. - 0 - -5.5190739221870899e-003 - 0.3842960000038147 - -0.0393082201480865 - <_> - - <_> - - - - <_>2 0 2 1 -1. - <_>3 0 1 1 2. - 0 - 9.3076081248000264e-004 - 0.0531460605561733 - -0.2748290002346039 - <_> - - <_> - - - - <_>7 13 2 3 -1. - <_>7 14 2 1 3. - 0 - 2.7754770126193762e-003 - -0.0534882806241512 - 0.2487884014844894 - <_> - - <_> - - - - <_>7 9 1 9 -1. - <_>7 12 1 3 3. - 0 - 1.9387940410524607e-003 - 0.0751778632402420 - -0.1943241953849793 - <_> - - <_> - - - - <_>7 8 1 9 -1. - <_>7 11 1 3 3. - 0 - -4.0069930255413055e-003 - -0.2733064889907837 - 0.0620003603398800 - <_> - - <_> - - - - <_>15 7 3 10 -1. - <_>16 7 1 10 3. - 0 - 7.4540930800139904e-003 - -0.0509779490530491 - 0.2705546915531158 - <_> - - <_> - - - - <_>14 7 6 10 -1. - <_>16 7 2 10 3. - 0 - -1.6338729765266180e-003 - 0.1092085018754005 - -0.1482111066579819 - <_> - - <_> - - - - <_>2 12 18 6 -1. - <_>2 14 18 2 3. - 0 - -0.1162687018513680 - -0.9430736899375916 - 0.0145114399492741 - <_> - - <_> - - - - <_>0 9 12 1 -1. - <_>4 9 4 1 3. - 0 - -0.0120513103902340 - -0.3096499145030975 - 0.0377263091504574 - <_> - - <_> - - - - <_>1 7 3 6 -1. - <_>2 7 1 6 3. - 0 - 0.0155920004472137 - -0.0385263487696648 - 0.3670614063739777 - <_> - - <_> - - - - <_>5 6 8 1 -1. - <_>9 6 4 1 2. - 0 - -1.1198739521205425e-003 - -0.1464426070451737 - 0.0960570424795151 - <_> - - <_> - - - - <_>10 14 2 1 -1. - <_>11 14 1 1 2. - 0 - -1.4623399692936800e-005 - 0.1064181998372078 - -0.1339446008205414 - <_> - - <_> - - - - <_>14 8 6 10 -1. - <_>16 8 2 10 3. - 0 - -0.1031963974237442 - -0.7019655704498291 - 0.0188917703926563 - -1.5079799890518188 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>10 5 8 7 -1. - <_>14 5 4 7 2. - 0 - -0.0374694317579269 - 0.2907924950122833 - -0.3520519137382507 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 5 4 2 2. - <_>12 7 4 2 2. - 0 - 4.0861819870769978e-003 - -0.2909860014915466 - 0.1844502985477448 - <_> - - <_> - - - - <_>11 11 1 8 -1. - <_>11 15 1 4 2. - 0 - -9.2446897178888321e-004 - 0.1108753010630608 - -0.4106451869010925 - <_> - - <_> - - - - <_>5 6 2 4 -1. - <_>6 6 1 4 2. - 0 - 8.5803697584196925e-004 - -0.2212982028722763 - 0.1546505987644196 - <_> - - <_> - - - - <_>7 8 2 2 -1. - <_>7 9 2 1 2. - 0 - 2.3659599537495524e-004 - -0.3218517899513245 - 0.1118369027972221 - <_> - - <_> - - - - <_>0 2 8 11 -1. - <_>4 2 4 11 2. - 0 - -0.0350210294127464 - 0.2272146046161652 - -0.1415652930736542 - <_> - - <_> - - - - <_>8 6 8 8 -1. - <_>8 10 8 4 2. - 0 - -3.4688229206949472e-003 - -0.4024738073348999 - 0.0437915287911892 - <_> - - <_> - - - - <_>4 4 2 6 -1. - <_>5 4 1 6 2. - 0 - 5.0372090190649033e-003 - -0.1238728016614914 - 0.2270132005214691 - <_> - - <_> - - - - <_>13 12 1 2 -1. - <_>13 13 1 1 2. - 0 - -1.1929610045626760e-003 - -0.4869248867034912 - 0.0525685101747513 - <_> - - <_> - - - - <_>3 8 3 2 -1. - <_>4 8 1 2 3. - 0 - 9.5561221241950989e-003 - -0.0462040007114410 - 0.5114902853965759 - <_> - - <_> - - - - <_>13 12 1 3 -1. - <_>13 13 1 1 3. - 0 - 1.1109219631180167e-003 - 0.0454968810081482 - -0.4527831077575684 - <_> - - <_> - - - - <_>9 19 4 1 -1. - <_>11 19 2 1 2. - 0 - 5.7835641200654209e-005 - -0.1564171016216278 - 0.1327690929174423 - <_> - - <_> - - - - <_>15 4 2 3 -1. - <_>15 5 2 1 3. - 0 - -9.4595848349854350e-004 - -0.2847130894660950 - 0.0645495578646660 - <_> - - <_> - - - - <_>5 11 11 4 -1. - <_>5 13 11 2 2. - 0 - 8.8587577920407057e-004 - 0.0659902766346931 - -0.3250587880611420 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - 2.1180589683353901e-003 - -0.0718209072947502 - 0.3313274085521698 - <_> - - <_> - - - - <_>6 12 4 4 -1. - <_>6 14 4 2 2. - 0 - -0.0160044692456722 - -0.4926666021347046 - 0.0357587598264217 - <_> - - <_> - - - - <_>7 11 1 3 -1. - <_>7 12 1 1 3. - 0 - 1.4956319937482476e-003 - -0.0830955430865288 - 0.2761321067810059 - <_> - - <_> - - - - <_>9 10 3 3 -1. - <_>10 10 1 3 3. - 0 - 7.5204619206488132e-003 - 0.0269876793026924 - -0.6550794839859009 - <_> - - <_> - - - - <_>10 12 2 1 -1. - <_>11 12 1 1 2. - 0 - -1.4567610378435347e-005 - 0.1118192970752716 - -0.1827971041202545 - <_> - - <_> - - - - <_>7 1 12 16 -1. - <_>7 1 6 8 2. - <_>13 9 6 8 2. - 0 - 1.5564640052616596e-003 - -0.1568105965852737 - 0.1127140000462532 - <_> - - <_> - - - - <_>10 5 8 7 -1. - <_>14 5 4 7 2. - 0 - -0.0365227982401848 - -0.1425486952066422 - 0.1302226930856705 - <_> - - <_> - - - - <_>18 8 2 10 -1. - <_>18 8 1 5 2. - <_>19 13 1 5 2. - 0 - 9.4677843153476715e-003 - -0.0434319004416466 - 0.3652131855487824 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>13 11 1 2 2. - 0 - -1.4508370441035368e-005 - 0.0840565115213394 - -0.2037386000156403 - <_> - - <_> - - - - <_>3 15 3 1 -1. - <_>4 15 1 1 3. - 0 - 9.7979931160807610e-004 - -0.0925702825188637 - 0.1976581066846848 - <_> - - <_> - - - - <_>5 14 2 1 -1. - <_>6 14 1 1 2. - 0 - 1.4909260244166944e-005 - -0.1416793018579483 - 0.1254208981990814 - <_> - - <_> - - - - <_>11 9 1 2 -1. - <_>11 10 1 1 2. - 0 - -2.1510709484573454e-004 - 0.2015448063611984 - -0.0809787511825562 - <_> - - <_> - - - - <_>10 12 3 1 -1. - <_>11 12 1 1 3. - 0 - -1.3552160235121846e-003 - -0.3964821100234985 - 0.0451370999217033 - <_> - - <_> - - - - <_>5 9 7 2 -1. - <_>5 10 7 1 2. - 0 - 8.4163509309291840e-003 - -0.0759626403450966 - 0.2232768982648850 - <_> - - <_> - - - - <_>11 0 2 1 -1. - <_>12 0 1 1 2. - 0 - -3.0116800917312503e-004 - -0.1983765065670013 - 0.0859178826212883 - <_> - - <_> - - - - <_>11 0 2 2 -1. - <_>12 0 1 2 2. - 0 - 9.7665376961231232e-004 - 0.0610607191920280 - -0.3131501078605652 - <_> - - <_> - - - - <_>5 0 2 2 -1. - <_>5 0 1 1 2. - <_>6 1 1 1 2. - 0 - 1.9718110561370850e-003 - -0.0541248805820942 - 0.3293100893497467 - <_> - - <_> - - - - <_>8 3 12 6 -1. - <_>8 5 12 2 3. - 0 - 0.0642203763127327 - 0.0310349203646183 - -0.5833930969238281 - <_> - - <_> - - - - <_>17 0 3 12 -1. - <_>18 0 1 12 3. - 0 - -4.8852190375328064e-003 - 0.1866690963506699 - -0.0854924321174622 - <_> - - <_> - - - - <_>11 1 2 1 -1. - <_>12 1 1 1 2. - 0 - -2.5309080956503749e-004 - -0.1657499969005585 - 0.0924723818898201 - <_> - - <_> - - - - <_>5 5 2 1 -1. - <_>6 5 1 1 2. - 0 - 2.9818940674886107e-005 - -0.1419505029916763 - 0.1015437990427017 - <_> - - <_> - - - - <_>7 14 6 6 -1. - <_>7 14 3 3 2. - <_>10 17 3 3 2. - 0 - -0.0102887600660324 - 0.2513369917869568 - -0.0592866614460945 - <_> - - <_> - - - - <_>11 10 1 2 -1. - <_>11 11 1 1 2. - 0 - -2.9165179512347095e-005 - 0.1295766979455948 - -0.1173385009169579 - <_> - - <_> - - - - <_>3 9 12 4 -1. - <_>3 9 6 2 2. - <_>9 11 6 2 2. - 0 - -2.0741471089422703e-003 - -0.2263393998146057 - 0.0667929425835609 - <_> - - <_> - - - - <_>5 10 1 2 -1. - <_>5 11 1 1 2. - 0 - 1.1343799997121096e-003 - -0.0639137029647827 - 0.2795625030994415 - <_> - - <_> - - - - <_>6 10 2 1 -1. - <_>7 10 1 1 2. - 0 - -1.5007710317149758e-005 - 0.1345475018024445 - -0.1170506030321121 - <_> - - <_> - - - - <_>8 16 3 2 -1. - <_>9 16 1 2 3. - 0 - 4.9826782196760178e-003 - 0.0265050102025270 - -0.6001067161560059 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -3.4576859325170517e-003 - 0.3128620982170105 - -0.0541551709175110 - <_> - - <_> - - - - <_>7 15 3 2 -1. - <_>8 15 1 2 3. - 0 - 5.4344828240573406e-003 - 0.0287027508020401 - -0.5682408213615418 - <_> - - <_> - - - - <_>8 15 2 1 -1. - <_>9 15 1 1 2. - 0 - -1.4558049770130310e-005 - 0.1075678020715714 - -0.1312769949436188 - <_> - - <_> - - - - <_>5 10 4 3 -1. - <_>5 11 4 1 3. - 0 - 1.5321969985961914e-003 - -0.1191162019968033 - 0.1402143985033035 - <_> - - <_> - - - - <_>6 7 4 12 -1. - <_>8 7 2 12 2. - 0 - -0.0224494300782681 - -0.3337636888027191 - 0.0493732206523418 - <_> - - <_> - - - - <_>5 6 6 7 -1. - <_>8 6 3 7 2. - 0 - 0.0119230300188065 - 0.0635587424039841 - -0.2474693059921265 - <_> - - <_> - - - - <_>8 4 6 11 -1. - <_>11 4 3 11 2. - 0 - 0.0206859502941370 - -0.0619051195681095 - 0.2636730074882507 - <_> - - <_> - - - - <_>7 9 6 3 -1. - <_>9 9 2 3 3. - 0 - 5.0756777636706829e-004 - -0.1252831965684891 - 0.1450580060482025 - <_> - - <_> - - - - <_>0 5 1 2 -1. - <_>0 6 1 1 2. - 0 - 9.2508539091795683e-004 - 0.0590095892548561 - -0.2620438039302826 - <_> - - <_> - - - - <_>6 8 3 1 -1. - <_>7 8 1 1 3. - 0 - 8.6694798665121198e-004 - -0.0889427214860916 - 0.1779575049877167 - <_> - - <_> - - - - <_>12 1 2 2 -1. - <_>13 1 1 2 2. - 0 - 4.7340960009023547e-004 - 0.0681376308202744 - -0.2188030034303665 - <_> - - <_> - - - - <_>4 4 10 12 -1. - <_>4 4 5 6 2. - <_>9 10 5 6 2. - 0 - 0.0903666019439697 - 0.0185164697468281 - -0.6573687195777893 - <_> - - <_> - - - - <_>5 18 2 2 -1. - <_>5 18 1 1 2. - <_>6 19 1 1 2. - 0 - 2.0585930906236172e-003 - -0.0455689989030361 - 0.3287942111492157 - <_> - - <_> - - - - <_>6 3 3 3 -1. - <_>7 3 1 3 3. - 0 - -4.0761628188192844e-003 - -0.3589670956134796 - 0.0409034900367260 - <_> - - <_> - - - - <_>5 12 2 3 -1. - <_>5 13 2 1 3. - 0 - 3.2309619709849358e-003 - -0.0587724708020687 - 0.2551850974559784 - <_> - - <_> - - - - <_>11 15 2 3 -1. - <_>11 16 2 1 3. - 0 - 2.0424150861799717e-003 - 0.0432094410061836 - -0.3339330852031708 - <_> - - <_> - - - - <_>11 15 1 3 -1. - <_>11 16 1 1 3. - 0 - -2.8341729193925858e-004 - -0.1668505966663361 - 0.0815553367137909 - <_> - - <_> - - - - <_>6 7 3 2 -1. - <_>7 7 1 2 3. - 0 - -1.0859699686989188e-003 - 0.1780744940042496 - -0.0921712368726730 - <_> - - <_> - - - - <_>3 11 14 1 -1. - <_>10 11 7 1 2. - 0 - -0.0200895201414824 - -0.3523639142513275 - 0.0446077510714531 - <_> - - <_> - - - - <_>5 7 3 1 -1. - <_>6 7 1 1 3. - 0 - -1.8073120154440403e-003 - 0.3022094070911408 - -0.0520475804805756 - <_> - - <_> - - - - <_>14 9 3 3 -1. - <_>14 10 3 1 3. - 0 - 0.0103371497243643 - 0.0247871391475201 - -0.6883816123008728 - <_> - - <_> - - - - <_>4 17 2 2 -1. - <_>4 17 1 1 2. - <_>5 18 1 1 2. - 0 - -2.4023749865591526e-003 - 0.3317334055900574 - -0.0461994893848896 - <_> - - <_> - - - - <_>15 16 2 2 -1. - <_>15 17 2 1 2. - 0 - -5.8347097365185618e-004 - -0.1885682046413422 - 0.0773477926850319 - <_> - - <_> - - - - <_>18 12 2 2 -1. - <_>18 12 1 1 2. - <_>19 13 1 1 2. - 0 - -2.1759211085736752e-003 - 0.3306734859943390 - -0.0408558696508408 - <_> - - <_> - - - - <_>5 11 4 3 -1. - <_>7 11 2 3 2. - 0 - -1.1984390439465642e-003 - -0.2158033996820450 - 0.0685345828533173 - <_> - - <_> - - - - <_>9 7 2 3 -1. - <_>9 8 2 1 3. - 0 - 1.4474330237135291e-003 - -0.0580749288201332 - 0.2336236983537674 - <_> - - <_> - - - - <_>18 6 2 2 -1. - <_>18 7 2 1 2. - 0 - 5.1625841297209263e-004 - 0.0756555795669556 - -0.2095647007226944 - <_> - - <_> - - - - <_>18 6 2 2 -1. - <_>18 7 2 1 2. - 0 - -1.4388939598575234e-003 - -0.3094814121723175 - 0.0581599995493889 - <_> - - <_> - - - - <_>4 5 2 6 -1. - <_>4 7 2 2 3. - 0 - -1.7495449865236878e-003 - 0.1023629009723663 - -0.1571523994207382 - <_> - - <_> - - - - <_>3 11 6 4 -1. - <_>3 11 3 2 2. - <_>6 13 3 2 2. - 0 - 0.0167749393731356 - 0.0237116999924183 - -0.5859457254409790 - <_> - - <_> - - - - <_>1 10 3 3 -1. - <_>2 10 1 3 3. - 0 - -8.3265192806720734e-003 - 0.3094334900379181 - -0.0488075613975525 - <_> - - <_> - - - - <_>15 0 4 4 -1. - <_>15 0 2 2 2. - <_>17 2 2 2 2. - 0 - -4.4853150029666722e-005 - 0.1061550974845886 - -0.1308971047401428 - <_> - - <_> - - - - <_>5 6 4 10 -1. - <_>5 11 4 5 2. - 0 - 5.9908269904553890e-003 - 0.0801688730716705 - -0.1681780964136124 - <_> - - <_> - - - - <_>7 13 1 3 -1. - <_>7 14 1 1 3. - 0 - 1.4110070187598467e-003 - -0.0699415877461433 - 0.2204508036375046 - <_> - - <_> - - - - <_>3 10 16 4 -1. - <_>3 10 8 2 2. - <_>11 12 8 2 2. - 0 - 0.0412059985101223 - 0.0317214317619801 - -0.4417685866355896 - <_> - - <_> - - - - <_>7 14 1 3 -1. - <_>7 15 1 1 3. - 0 - 1.5044870087876916e-004 - -0.1215230002999306 - 0.1124142035841942 - <_> - - <_> - - - - <_>5 14 3 3 -1. - <_>5 15 3 1 3. - 0 - -4.8399530351161957e-003 - 0.2824499905109406 - -0.0516066104173660 - <_> - - <_> - - - - <_>9 9 3 8 -1. - <_>10 9 1 8 3. - 0 - -1.0831269901245832e-003 - -0.1697801947593689 - 0.0837310478091240 - <_> - - <_> - - - - <_>6 0 7 4 -1. - <_>6 2 7 2 2. - 0 - -0.0134832002222538 - 0.2826932072639465 - -0.0522285997867584 - <_> - - <_> - - - - <_>8 0 1 4 -1. - <_>8 2 1 2 2. - 0 - 5.9854640858247876e-004 - -0.1374914944171906 - 0.1228089034557343 - <_> - - <_> - - - - <_>1 4 1 6 -1. - <_>1 6 1 2 3. - 0 - -6.4943352481350303e-004 - -0.1693159937858582 - 0.0881716907024384 - <_> - - <_> - - - - <_>0 2 15 3 -1. - <_>5 2 5 3 3. - 0 - -6.3191158697009087e-003 - 0.1624546051025391 - -0.0863000601530075 - <_> - - <_> - - - - <_>0 8 2 2 -1. - <_>0 9 2 1 2. - 0 - -2.5179239455610514e-003 - -0.3185339868068695 - 0.0526881888508797 - <_> - - <_> - - - - <_>3 10 6 4 -1. - <_>5 10 2 4 3. - 0 - -0.0469249710440636 - -0.6577314138412476 - 0.0205050799995661 - <_> - - <_> - - - - <_>8 5 3 1 -1. - <_>9 5 1 1 3. - 0 - -9.6446421230211854e-004 - -0.2725659906864166 - 0.0454412996768951 - <_> - - <_> - - - - <_>15 11 2 2 -1. - <_>15 11 1 1 2. - <_>16 12 1 1 2. - 0 - 1.5073099639266729e-003 - -0.0504794605076313 - 0.2848648130893707 - <_> - - <_> - - - - <_>4 11 6 2 -1. - <_>7 11 3 2 2. - 0 - 0.0161499306559563 - 0.0387690588831902 - -0.3614957034587860 - <_> - - <_> - - - - <_>6 8 6 4 -1. - <_>8 8 2 4 3. - 0 - 0.0191265102475882 - -0.0362336412072182 - 0.4757354855537415 - <_> - - <_> - - - - <_>6 5 6 6 -1. - <_>8 5 2 6 3. - 0 - -1.2546279467642307e-003 - 0.1100990995764732 - -0.1555414050817490 - <_> - - <_> - - - - <_>14 12 2 3 -1. - <_>15 12 1 3 2. - 0 - -1.4754529729543719e-005 - 0.0965491533279419 - -0.1394743025302887 - <_> - - <_> - - - - <_>11 5 3 7 -1. - <_>12 5 1 7 3. - 0 - 0.0156801696866751 - 0.0232145208865404 - -0.5771318078041077 - <_> - - <_> - - - - <_>7 16 8 4 -1. - <_>7 16 4 2 2. - <_>11 18 4 2 2. - 0 - 0.0122933601960540 - -0.0578098893165588 - 0.2395139038562775 - <_> - - <_> - - - - <_>5 16 12 4 -1. - <_>5 16 6 2 2. - <_>11 18 6 2 2. - 0 - -9.6596255898475647e-003 - 0.2409874051809311 - -0.0658235326409340 - <_> - - <_> - - - - <_>10 17 6 3 -1. - <_>10 18 6 1 3. - 0 - 4.4940081425011158e-003 - 0.0545324906706810 - -0.3147468864917755 - <_> - - <_> - - - - <_>6 8 2 3 -1. - <_>6 9 2 1 3. - 0 - 0.0114805800840259 - 0.0174192991107702 - -0.7472283244132996 - <_> - - <_> - - - - <_>0 0 20 18 -1. - <_>10 0 10 18 2. - 0 - -0.6549963951110840 - -0.4548397064208984 - 0.0261871200054884 - <_> - - <_> - - - - <_>8 0 6 5 -1. - <_>11 0 3 5 2. - 0 - -1.5746919962111861e-004 - 0.0843414589762688 - -0.1824031025171280 - <_> - - <_> - - - - <_>13 5 4 2 -1. - <_>13 5 2 1 2. - <_>15 6 2 1 2. - 0 - -1.0111900046467781e-003 - -0.2086289972066879 - 0.0676762163639069 - <_> - - <_> - - - - <_>10 4 4 11 -1. - <_>12 4 2 11 2. - 0 - 0.0184888392686844 - -0.0354996211826801 - 0.4134215116500855 - <_> - - <_> - - - - <_>5 10 3 1 -1. - <_>6 10 1 1 3. - 0 - -3.8888910785317421e-004 - 0.1569246053695679 - -0.0862994790077209 - <_> - - <_> - - - - <_>17 4 2 3 -1. - <_>17 5 2 1 3. - 0 - -4.5315301977097988e-003 - -0.4391221106052399 - 0.0341036207973957 - <_> - - <_> - - - - <_>6 13 8 6 -1. - <_>6 13 4 3 2. - <_>10 16 4 3 2. - 0 - 0.0335360206663609 - -0.0322315283119679 - 0.4709657132625580 - <_> - - <_> - - - - <_>17 5 3 10 -1. - <_>18 5 1 10 3. - 0 - 2.0854349713772535e-003 - -0.0760010108351707 - 0.1737388074398041 - <_> - - <_> - - - - <_>13 11 2 2 -1. - <_>14 11 1 2 2. - 0 - -1.4060589819564484e-005 - 0.0859609991312027 - -0.1634878069162369 - <_> - - <_> - - - - <_>5 9 4 9 -1. - <_>5 12 4 3 3. - 0 - 0.0429956801235676 - 0.0220331195741892 - -0.5927429199218750 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - 2.4928380735218525e-003 - -0.0630207732319832 - 0.2139886021614075 - <_> - - <_> - - - - <_>15 15 2 2 -1. - <_>15 15 1 1 2. - <_>16 16 1 1 2. - 0 - 1.4520809600071516e-005 - -0.1121812984347343 - 0.1199731975793839 - <_> - - <_> - - - - <_>6 13 6 5 -1. - <_>8 13 2 5 3. - 0 - 0.0211523603647947 - 0.0302707105875015 - -0.4460080862045288 - <_> - - <_> - - - - <_>9 7 2 8 -1. - <_>9 7 1 4 2. - <_>10 11 1 4 2. - 0 - 2.1028789342381060e-004 - 0.0803844183683395 - -0.1720902025699616 - <_> - - <_> - - - - <_>4 12 2 2 -1. - <_>4 12 1 1 2. - <_>5 13 1 1 2. - 0 - 1.0620340472087264e-003 - -0.0640519708395004 - 0.2130492031574249 - <_> - - <_> - - - - <_>7 4 3 1 -1. - <_>8 4 1 1 3. - 0 - -2.5768030900508165e-003 - -0.5230960249900818 - 0.0261464696377516 - <_> - - <_> - - - - <_>12 3 3 4 -1. - <_>13 3 1 4 3. - 0 - 4.7555579803884029e-003 - 0.0362137295305729 - -0.3440873026847839 - <_> - - <_> - - - - <_>2 0 18 20 -1. - <_>2 10 18 10 2. - 0 - -0.5906254053115845 - -0.9170126914978027 - 0.0134163796901703 - <_> - - <_> - - - - <_>11 2 7 12 -1. - <_>11 8 7 6 2. - 0 - -0.0970318317413330 - 0.4828839898109436 - -0.0323441810905933 - <_> - - <_> - - - - <_>13 5 2 2 -1. - <_>14 5 1 2 2. - 0 - 1.4890159945935011e-003 - 0.0405917502939701 - -0.3889848887920380 - <_> - - <_> - - - - <_>4 17 4 1 -1. - <_>6 17 2 1 2. - 0 - 2.4702500086277723e-003 - -0.0631592199206352 - 0.2132260948419571 - <_> - - <_> - - - - <_>3 14 4 4 -1. - <_>5 14 2 4 2. - 0 - -2.9705299530178308e-003 - 0.1496088951826096 - -0.1018164977431297 - <_> - - <_> - - - - <_>0 2 8 18 -1. - <_>0 11 8 9 2. - 0 - 0.1555549949407578 - 0.0366748794913292 - -0.3598398864269257 - <_> - - <_> - - - - <_>5 7 3 3 -1. - <_>5 8 3 1 3. - 0 - 0.0141136599704623 - 0.0138346403837204 - -0.8711295723915100 - <_> - - <_> - - - - <_>8 2 3 2 -1. - <_>9 2 1 2 3. - 0 - -9.5594127196818590e-004 - -0.2235932946205139 - 0.0556467510759830 - -1.4499469995498657 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>5 7 15 4 -1. - <_>5 9 15 2 2. - 0 - 0.0230683200061321 - -0.3073453903198242 - 0.2575811147689819 - <_> - - <_> - - - - <_>10 0 10 8 -1. - <_>10 0 5 4 2. - <_>15 4 5 4 2. - 0 - -0.0116030303761363 - 0.1734793931245804 - -0.2991755902767181 - <_> - - <_> - - - - <_>10 8 4 4 -1. - <_>10 8 2 2 2. - <_>12 10 2 2 2. - 0 - -1.0232869535684586e-003 - 0.1928901970386505 - -0.2492682933807373 - <_> - - <_> - - - - <_>5 6 3 10 -1. - <_>5 11 3 5 2. - 0 - 0.0121949603781104 - 0.0875914171338081 - -0.4085389077663422 - <_> - - <_> - - - - <_>7 6 3 4 -1. - <_>8 6 1 4 3. - 0 - -1.2484550243243575e-003 - 0.1634556949138641 - -0.1881189942359924 - <_> - - <_> - - - - <_>12 13 2 2 -1. - <_>12 14 2 1 2. - 0 - 3.2145460136234760e-004 - 0.0791359096765518 - -0.3772250115871429 - <_> - - <_> - - - - <_>7 8 4 12 -1. - <_>7 12 4 4 3. - 0 - -7.9707789700478315e-004 - -0.2637738883495331 - 0.0969362631440163 - <_> - - <_> - - - - <_>0 0 6 18 -1. - <_>2 0 2 18 3. - 0 - 0.0709249228239059 - -0.1253806054592133 - 0.2526729106903076 - <_> - - <_> - - - - <_>6 1 10 6 -1. - <_>6 3 10 2 3. - 0 - 2.5408361107110977e-003 - -0.1392325013875961 - 0.1497431993484497 - <_> - - <_> - - - - <_>13 9 3 2 -1. - <_>13 10 3 1 2. - 0 - -6.9253891706466675e-004 - -0.3136391937732697 - 0.0394197404384613 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - 2.5845640338957310e-003 - -0.0700671225786209 - 0.2809658050537109 - <_> - - <_> - - - - <_>6 10 1 10 -1. - <_>6 15 1 5 2. - 0 - -0.0168039500713348 - -0.4625408053398132 - 0.0365094691514969 - <_> - - <_> - - - - <_>9 9 3 4 -1. - <_>9 11 3 2 2. - 0 - -2.1332600153982639e-003 - 0.2269130945205689 - -0.0844474807381630 - <_> - - <_> - - - - <_>7 4 2 2 -1. - <_>7 5 2 1 2. - 0 - -5.5397138930857182e-004 - -0.2072816044092178 - 0.1004170030355454 - <_> - - <_> - - - - <_>12 12 2 1 -1. - <_>13 12 1 1 2. - 0 - -1.4573110092896968e-005 - 0.0885343402624130 - -0.2081342041492462 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - 8.0281507689505816e-004 - -0.0885214433073998 - 0.1955396980047226 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 3.6762449890375137e-003 - -0.0839662775397301 - 0.2423270046710968 - <_> - - <_> - - - - <_>1 0 1 2 -1. - <_>1 1 1 1 2. - 0 - -1.6549570136703551e-004 - -0.1940200030803680 - 0.1004450991749764 - <_> - - <_> - - - - <_>10 16 6 3 -1. - <_>10 17 6 1 3. - 0 - 5.5225789546966553e-003 - 0.0460141412913799 - -0.4109568893909454 - <_> - - <_> - - - - <_>9 4 4 6 -1. - <_>9 4 2 3 2. - <_>11 7 2 3 2. - 0 - 1.1023939587175846e-003 - -0.2105371952056885 - 0.0841698274016380 - <_> - - <_> - - - - <_>10 9 10 1 -1. - <_>15 9 5 1 2. - 0 - -0.0216103605926037 - -0.3472487926483154 - 0.0511969402432442 - <_> - - <_> - - - - <_>9 11 1 2 -1. - <_>9 12 1 1 2. - 0 - -1.4869699953123927e-005 - 0.1118715032935143 - -0.1624923050403595 - <_> - - <_> - - - - <_>7 8 3 6 -1. - <_>7 10 3 2 3. - 0 - 0.0317270606756210 - 0.0375460311770439 - -0.4535711109638214 - <_> - - <_> - - - - <_>1 18 8 2 -1. - <_>1 18 4 1 2. - <_>5 19 4 1 2. - 0 - -6.5588178113102913e-003 - 0.2975679039955139 - -0.0615393109619617 - <_> - - <_> - - - - <_>5 13 3 3 -1. - <_>5 14 3 1 3. - 0 - 3.7398359272629023e-003 - -0.0693628415465355 - 0.2288192063570023 - <_> - - <_> - - - - <_>4 6 5 6 -1. - <_>4 9 5 3 2. - 0 - -2.1445790771394968e-003 - -0.3069198131561279 - 0.0570855401456356 - <_> - - <_> - - - - <_>6 5 2 1 -1. - <_>7 5 1 1 2. - 0 - 1.4241340104490519e-003 - 0.0477477200329304 - -0.3514148890972138 - <_> - - <_> - - - - <_>11 6 1 6 -1. - <_>11 9 1 3 2. - 0 - 1.8902820302173495e-003 - 0.1125065013766289 - -0.1507499963045120 - <_> - - <_> - - - - <_>6 17 4 3 -1. - <_>6 18 4 1 3. - 0 - -6.4917900599539280e-003 - 0.2871277928352356 - -0.0625736787915230 - <_> - - <_> - - - - <_>10 4 2 10 -1. - <_>10 4 1 5 2. - <_>11 9 1 5 2. - 0 - -8.7750004604458809e-003 - -0.5414124131202698 - 0.0295595303177834 - <_> - - <_> - - - - <_>8 4 9 13 -1. - <_>11 4 3 13 3. - 0 - 0.0936476886272430 - -0.0569437891244888 - 0.2963837981224060 - <_> - - <_> - - - - <_>10 11 2 2 -1. - <_>11 11 1 2 2. - 0 - -4.4028809497831389e-005 - 0.1072629019618034 - -0.1516932994127274 - <_> - - <_> - - - - <_>13 15 1 2 -1. - <_>13 16 1 1 2. - 0 - 7.9690842540003359e-005 - 0.0877043381333351 - -0.1815764009952545 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -6.6510448232293129e-003 - 0.2125076949596405 - -0.0787653997540474 - <_> - - <_> - - - - <_>0 0 14 10 -1. - <_>0 5 14 5 2. - 0 - 0.2135832011699677 - 0.0327049307525158 - -0.4989534914493561 - <_> - - <_> - - - - <_>12 5 6 15 -1. - <_>14 5 2 15 3. - 0 - -0.0980354100465775 - -0.6362007260322571 - 0.0243007503449917 - <_> - - <_> - - - - <_>11 10 2 3 -1. - <_>11 11 2 1 3. - 0 - -3.6894609220325947e-003 - -0.5787317156791687 - 0.0253432206809521 - <_> - - <_> - - - - <_>5 14 3 3 -1. - <_>5 15 3 1 3. - 0 - 4.7867568209767342e-003 - -0.0697197988629341 - 0.2464102953672409 - <_> - - <_> - - - - <_>5 15 3 2 -1. - <_>5 16 3 1 2. - 0 - 4.0250780875794590e-004 - -0.1185259968042374 - 0.1716368943452835 - <_> - - <_> - - - - <_>11 14 3 6 -1. - <_>12 14 1 6 3. - 0 - -3.8258030544966459e-003 - -0.3170871138572693 - 0.0527966506779194 - <_> - - <_> - - - - <_>12 18 2 1 -1. - <_>13 18 1 1 2. - 0 - 2.9255099434521981e-005 - -0.1215787008404732 - 0.1244350969791412 - <_> - - <_> - - - - <_>16 5 1 2 -1. - <_>16 6 1 1 2. - 0 - -5.5969221284613013e-004 - -0.2394244968891144 - 0.0615640208125114 - <_> - - <_> - - - - <_>17 8 3 4 -1. - <_>18 8 1 4 3. - 0 - 1.6149280127137899e-003 - -0.0895366817712784 - 0.1939617991447449 - <_> - - <_> - - - - <_>8 15 2 3 -1. - <_>9 15 1 3 2. - 0 - -5.9165759012103081e-003 - -0.6074134707450867 - 0.0241075009107590 - <_> - - <_> - - - - <_>6 7 2 4 -1. - <_>6 7 1 2 2. - <_>7 9 1 2 2. - 0 - 4.5592039823532104e-003 - -0.0540901198983192 - 0.2872112989425659 - <_> - - <_> - - - - <_>3 7 12 2 -1. - <_>7 7 4 2 3. - 0 - -0.0517677888274193 - -0.6485347151756287 - 0.0243290998041630 - <_> - - <_> - - - - <_>4 7 3 3 -1. - <_>5 7 1 3 3. - 0 - -0.0106355696916580 - 0.3235976099967957 - -0.0502317883074284 - <_> - - <_> - - - - <_>1 10 2 1 -1. - <_>2 10 1 1 2. - 0 - 2.5121110957115889e-004 - 0.0952744483947754 - -0.1485994011163712 - <_> - - <_> - - - - <_>4 4 2 5 -1. - <_>5 4 1 5 2. - 0 - 1.3107099803164601e-003 - -0.1161269024014473 - 0.1264725029468536 - <_> - - <_> - - - - <_>6 7 14 2 -1. - <_>13 7 7 2 2. - 0 - -0.0736297219991684 - -0.6297783255577087 - 0.0241974107921124 - <_> - - <_> - - - - <_>14 17 2 3 -1. - <_>14 18 2 1 3. - 0 - 5.1864539273083210e-004 - 0.0808439701795578 - -0.1803835034370422 - <_> - - <_> - - - - <_>6 11 1 3 -1. - <_>6 12 1 1 3. - 0 - -2.0541099365800619e-003 - 0.2069077044725418 - -0.0715596377849579 - <_> - - <_> - - - - <_>11 3 8 16 -1. - <_>11 11 8 8 2. - 0 - -7.2738518938422203e-003 - -0.1804922074079514 - 0.0846181586384773 - <_> - - <_> - - - - <_>9 12 5 3 -1. - <_>9 13 5 1 3. - 0 - -7.0418710820376873e-003 - -0.5525584816932678 - 0.0242430008947849 - <_> - - <_> - - - - <_>5 9 1 3 -1. - <_>5 10 1 1 3. - 0 - 2.3678881116211414e-003 - -0.0743150636553764 - 0.2201319932937622 - <_> - - <_> - - - - <_>3 8 8 4 -1. - <_>3 8 4 2 2. - <_>7 10 4 2 2. - 0 - -4.1341409087181091e-003 - -0.3146111071109772 - 0.0576455406844616 - <_> - - <_> - - - - <_>10 15 2 3 -1. - <_>10 16 2 1 3. - 0 - 5.9597631916403770e-003 - 0.0215512104332447 - -0.6639922261238098 - <_> - - <_> - - - - <_>14 9 1 6 -1. - <_>14 12 1 3 2. - 0 - -1.4643320355389733e-005 - 0.1032539978623390 - -0.1437864005565643 - <_> - - <_> - - - - <_>13 11 1 3 -1. - <_>13 12 1 1 3. - 0 - -8.0324069131165743e-004 - -0.2802684903144836 - 0.0521755404770374 - <_> - - <_> - - - - <_>8 7 6 6 -1. - <_>8 9 6 2 3. - 0 - -0.0178602207452059 - 0.3154763877391815 - -0.0472954809665680 - <_> - - <_> - - - - <_>9 8 4 3 -1. - <_>9 9 4 1 3. - 0 - 8.5229711839929223e-004 - -0.1086079031229019 - 0.1690572947263718 - <_> - - <_> - - - - <_>8 2 2 5 -1. - <_>9 2 1 5 2. - 0 - 8.8618341833353043e-003 - 0.0206294208765030 - -0.7168679833412170 - <_> - - <_> - - - - <_>13 6 3 3 -1. - <_>13 7 3 1 3. - 0 - 4.1418620385229588e-003 - 0.0313132107257843 - -0.3975364863872528 - <_> - - <_> - - - - <_>12 0 5 14 -1. - <_>12 7 5 7 2. - 0 - -0.0966165810823441 - 0.4237889945507050 - -0.0322910994291306 - <_> - - <_> - - - - <_>2 2 7 10 -1. - <_>2 7 7 5 2. - 0 - -0.0848536491394043 - -0.4836021065711975 - 0.0344205088913441 - <_> - - <_> - - - - <_>5 5 6 11 -1. - <_>8 5 3 11 2. - 0 - -0.0273994896560907 - -0.2898151874542236 - 0.0468055084347725 - <_> - - <_> - - - - <_>6 17 3 3 -1. - <_>6 18 3 1 3. - 0 - 1.9653420895338058e-003 - -0.0762211307883263 - 0.1889424026012421 - <_> - - <_> - - - - <_>9 5 2 8 -1. - <_>9 5 1 4 2. - <_>10 9 1 4 2. - 0 - -9.0222749859094620e-003 - -0.5825505852699280 - 0.0260387808084488 - <_> - - <_> - - - - <_>14 0 4 16 -1. - <_>14 8 4 8 2. - 0 - 0.1785901039838791 - 0.0141130797564983 - -0.7587677240371704 - <_> - - <_> - - - - <_>10 7 1 3 -1. - <_>10 8 1 1 3. - 0 - 2.6170860510319471e-003 - -0.0420114099979401 - 0.3458263874053955 - <_> - - <_> - - - - <_>7 16 3 2 -1. - <_>8 16 1 2 3. - 0 - -1.8247140105813742e-003 - -0.2512575089931488 - 0.0541134513914585 - <_> - - <_> - - - - <_>10 6 1 3 -1. - <_>10 7 1 1 3. - 0 - 1.0635840008035302e-003 - -0.0699880570173264 - 0.2111109048128128 - <_> - - <_> - - - - <_>5 11 14 6 -1. - <_>5 14 14 3 2. - 0 - -0.0857941210269928 - -0.5295022130012512 - 0.0242343097925186 - <_> - - <_> - - - - <_>9 6 1 3 -1. - <_>9 7 1 1 3. - 0 - -2.4844249710440636e-003 - 0.2279888987541199 - -0.0578949414193630 - <_> - - <_> - - - - <_>6 11 5 4 -1. - <_>6 13 5 2 2. - 0 - 2.4517390411347151e-003 - 0.0477582700550556 - -0.2993184030056000 - <_> - - <_> - - - - <_>6 9 10 8 -1. - <_>6 9 5 4 2. - <_>11 13 5 4 2. - 0 - 7.2088139131665230e-003 - 0.0891904607415199 - -0.1466365009546280 - <_> - - <_> - - - - <_>18 9 2 6 -1. - <_>18 9 1 3 2. - <_>19 12 1 3 2. - 0 - -6.0728411190211773e-003 - 0.2977311015129089 - -0.0441877916455269 - <_> - - <_> - - - - <_>5 12 8 2 -1. - <_>9 12 4 2 2. - 0 - 0.0293797198683023 - 0.0183849204331636 - -0.7279959917068481 - <_> - - <_> - - - - <_>8 8 6 12 -1. - <_>8 8 3 6 2. - <_>11 14 3 6 2. - 0 - 0.0352654606103897 - -0.0403451286256313 - 0.3436934947967529 - <_> - - <_> - - - - <_>12 7 3 5 -1. - <_>13 7 1 5 3. - 0 - 8.0668088048696518e-004 - -0.1017149016261101 - 0.1332406997680664 - <_> - - <_> - - - - <_>10 13 4 3 -1. - <_>10 14 4 1 3. - 0 - -1.4964640140533447e-003 - -0.2329643964767456 - 0.0591932795941830 - <_> - - <_> - - - - <_>12 4 3 15 -1. - <_>13 4 1 15 3. - 0 - 0.0261369794607162 - 0.0179935190826654 - -0.7309460043907166 - <_> - - <_> - - - - <_>4 12 4 2 -1. - <_>6 12 2 2 2. - 0 - 0.0186632592231035 - 0.0146938003599644 - -0.7210518121719360 - <_> - - <_> - - - - <_>14 1 6 1 -1. - <_>16 1 2 1 3. - 0 - -5.0944439863087609e-005 - 0.0981138125061989 - -0.1348700970411301 - <_> - - <_> - - - - <_>15 3 2 8 -1. - <_>16 3 1 8 2. - 0 - -5.5268028518185019e-004 - -0.1131390035152435 - 0.1193132027983666 - <_> - - <_> - - - - <_>13 16 6 4 -1. - <_>13 16 3 2 2. - <_>16 18 3 2 2. - 0 - 5.4916120134294033e-003 - -0.0689969286322594 - 0.2231263071298599 - <_> - - <_> - - - - <_>9 5 6 7 -1. - <_>12 5 3 7 2. - 0 - 0.0312431994825602 - -0.0323944389820099 - 0.3925015032291412 - <_> - - <_> - - - - <_>18 3 2 2 -1. - <_>18 4 2 1 2. - 0 - 2.7375440113246441e-003 - 0.0367135107517242 - -0.4063234925270081 - <_> - - <_> - - - - <_>2 0 18 4 -1. - <_>11 0 9 4 2. - 0 - 0.0909608900547028 - 0.0277091991156340 - -0.4161289930343628 - <_> - - <_> - - - - <_>0 8 2 2 -1. - <_>1 8 1 2 2. - 0 - -4.2210621177218854e-004 - -0.1599356979131699 - 0.0784403532743454 - <_> - - <_> - - - - <_>4 12 3 6 -1. - <_>5 12 1 6 3. - 0 - -2.3689800873398781e-003 - 0.1437219977378845 - -0.0904172435402870 - <_> - - <_> - - - - <_>3 13 4 2 -1. - <_>5 13 2 2 2. - 0 - 4.5116269029676914e-003 - -0.0680682063102722 - 0.2101106941699982 - <_> - - <_> - - - - <_>4 14 11 2 -1. - <_>4 15 11 1 2. - 0 - -1.4441140228882432e-003 - -0.1337653994560242 - 0.1181610971689224 - <_> - - <_> - - - - <_>4 13 8 3 -1. - <_>4 14 8 1 3. - 0 - 2.1477979607880116e-003 - -0.0980670824646950 - 0.1757165044546127 - <_> - - <_> - - - - <_>3 7 6 10 -1. - <_>3 7 3 5 2. - <_>6 12 3 5 2. - 0 - 0.0225345995277166 - 0.0532467402517796 - -0.2808521091938019 - <_> - - <_> - - - - <_>5 7 6 4 -1. - <_>7 7 2 4 3. - 0 - -0.0161652900278568 - 0.2605862915515900 - -0.0563493184745312 - <_> - - <_> - - - - <_>2 11 10 6 -1. - <_>2 14 10 3 2. - 0 - 0.0131579097360373 - 0.0449605993926525 - -0.3108432888984680 - <_> - - <_> - - - - <_>5 7 9 12 -1. - <_>5 13 9 6 2. - 0 - -0.0252186302095652 - -0.1224538981914520 - 0.1170765012502670 - <_> - - <_> - - - - <_>9 12 7 4 -1. - <_>9 14 7 2 2. - 0 - -1.0043029760709032e-004 - 0.0626686066389084 - -0.2366541028022766 - <_> - - <_> - - - - <_>2 0 8 4 -1. - <_>2 0 4 2 2. - <_>6 2 4 2 2. - 0 - 0.0228843092918396 - -0.0563933886587620 - 0.2695189118385315 - <_> - - <_> - - - - <_>4 0 4 4 -1. - <_>4 0 2 2 2. - <_>6 2 2 2 2. - 0 - -3.7653960753232241e-003 - 0.2426504939794540 - -0.0603278391063213 - <_> - - <_> - - - - <_>6 2 3 2 -1. - <_>7 2 1 2 3. - 0 - -1.2131360126659274e-003 - -0.2258134037256241 - 0.0638662725687027 - <_> - - <_> - - - - <_>2 11 3 4 -1. - <_>3 11 1 4 3. - 0 - 3.6897920072078705e-003 - -0.0750563070178032 - 0.1712114065885544 - <_> - - <_> - - - - <_>1 17 2 1 -1. - <_>2 17 1 1 2. - 0 - 3.9484380977228284e-004 - 0.0729255601763725 - -0.1800608038902283 - <_> - - <_> - - - - <_>15 12 4 3 -1. - <_>15 13 4 1 3. - 0 - -2.8756330721080303e-003 - 0.2333267927169800 - -0.0583127997815609 - <_> - - <_> - - - - <_>9 15 7 3 -1. - <_>9 16 7 1 3. - 0 - -0.0129395499825478 - -0.5996682047843933 - 0.0247462093830109 - <_> - - <_> - - - - <_>6 7 3 2 -1. - <_>7 7 1 2 3. - 0 - 4.8920139670372009e-003 - -0.0508085489273071 - 0.2714282870292664 - <_> - - <_> - - - - <_>3 5 12 10 -1. - <_>3 5 6 5 2. - <_>9 10 6 5 2. - 0 - -6.3685458153486252e-003 - -0.1775954961776733 - 0.0787207037210464 - <_> - - <_> - - - - <_>4 2 12 5 -1. - <_>10 2 6 5 2. - 0 - 0.0917000621557236 - -0.0243162196129560 - 0.5661062002182007 - <_> - - <_> - - - - <_>9 5 3 1 -1. - <_>10 5 1 1 3. - 0 - -2.9075080528855324e-003 - -0.5347344279289246 - 0.0267383493483067 - <_> - - <_> - - - - <_>2 10 3 4 -1. - <_>3 10 1 4 3. - 0 - -3.9782752282917500e-003 - 0.1789894998073578 - -0.0736341625452042 - <_> - - <_> - - - - <_>11 5 2 10 -1. - <_>11 10 2 5 2. - 0 - 3.8189089391380548e-003 - 0.0966401472687721 - -0.1261541992425919 - <_> - - <_> - - - - <_>8 6 7 8 -1. - <_>8 10 7 4 2. - 0 - -6.1400169506669044e-003 - -0.2802591025829315 - 0.0489520691335201 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - 4.6048378571867943e-003 - -0.0352979190647602 - 0.3627172112464905 - <_> - - <_> - - - - <_>2 8 8 4 -1. - <_>6 8 4 4 2. - 0 - 0.0695981532335281 - 0.0282364506274462 - -0.4752317965030670 - <_> - - <_> - - - - <_>0 9 2 2 -1. - <_>1 9 1 2 2. - 0 - 8.2954921526834369e-004 - 0.0650106668472290 - -0.1960850059986115 - <_> - - <_> - - - - <_>13 11 4 2 -1. - <_>15 11 2 2 2. - 0 - 0.0100734503939748 - 0.0240914300084114 - -0.5270252823829651 - <_> - - <_> - - - - <_>8 6 12 5 -1. - <_>12 6 4 5 3. - 0 - -0.0499641709029675 - 0.2706043124198914 - -0.0529397688806057 - <_> - - <_> - - - - <_>11 11 9 1 -1. - <_>14 11 3 1 3. - 0 - -0.0234257206320763 - -0.6553804278373718 - 0.0203999504446983 - <_> - - <_> - - - - <_>15 10 2 4 -1. - <_>15 10 1 2 2. - <_>16 12 1 2 2. - 0 - 4.5370758743956685e-004 - -0.1014572978019714 - 0.1257548928260803 - <_> - - <_> - - - - <_>18 5 1 3 -1. - <_>18 6 1 1 3. - 0 - -9.4329239800572395e-004 - -0.2367783039808273 - 0.0521473698318005 - <_> - - <_> - - - - <_>4 10 7 3 -1. - <_>4 11 7 1 3. - 0 - -2.5503130163997412e-003 - 0.1869580000638962 - -0.0643835365772247 - <_> - - <_> - - - - <_>8 5 3 1 -1. - <_>9 5 1 1 3. - 0 - -2.1031149663031101e-003 - -0.4038110971450806 - 0.0287637803703547 - <_> - - <_> - - - - <_>7 13 2 3 -1. - <_>7 14 2 1 3. - 0 - 2.3942890111356974e-003 - -0.0589619092643261 - 0.2015120983123779 - <_> - - <_> - - - - <_>7 14 3 3 -1. - <_>7 15 3 1 3. - 0 - 3.4859919105656445e-004 - -0.1159474030137062 - 0.1155984997749329 - <_> - - <_> - - - - <_>7 15 3 3 -1. - <_>7 16 3 1 3. - 0 - 6.5279641421511769e-004 - -0.0965832471847534 - 0.1454613059759140 - <_> - - <_> - - - - <_>14 15 1 3 -1. - <_>14 16 1 1 3. - 0 - 6.6208152566105127e-004 - 0.0556666404008865 - -0.2340817004442215 - <_> - - <_> - - - - <_>2 14 10 6 -1. - <_>2 17 10 3 2. - 0 - -0.1124671995639801 - -0.7212910056114197 - 0.0167008098214865 - <_> - - <_> - - - - <_>5 12 5 3 -1. - <_>5 13 5 1 3. - 0 - 2.4760260712355375e-003 - -0.0707524418830872 - 0.1683201044797897 - <_> - - <_> - - - - <_>7 9 1 6 -1. - <_>7 11 1 2 3. - 0 - -8.7723489850759506e-003 - -0.4866676032543182 - 0.0260061193257570 - <_> - - <_> - - - - <_>0 6 5 6 -1. - <_>0 8 5 2 3. - 0 - 0.0288402792066336 - 0.0333086997270584 - -0.3454917073249817 - <_> - - <_> - - - - <_>6 10 3 4 -1. - <_>6 12 3 2 2. - 0 - 4.7115320921875536e-004 - 0.0586104691028595 - -0.2133412063121796 - <_> - - <_> - - - - <_>4 9 9 2 -1. - <_>4 10 9 1 2. - 0 - -7.5157210230827332e-003 - 0.3786672055721283 - -0.0363076403737068 - <_> - - <_> - - - - <_>7 3 1 2 -1. - <_>7 4 1 1 2. - 0 - -1.7479779489804059e-004 - -0.1868792027235031 - 0.0703804418444633 - <_> - - <_> - - - - <_>8 9 4 4 -1. - <_>8 11 4 2 2. - 0 - 6.9826189428567886e-003 - -0.0753762125968933 - 0.1854144930839539 - <_> - - <_> - - - - <_>11 10 3 1 -1. - <_>12 10 1 1 3. - 0 - -2.5053499266505241e-003 - -0.4734547138214111 - 0.0267652906477451 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>5 8 3 1 2. - 0 - 6.5240712137892842e-004 - -0.1139867976307869 - 0.1146010980010033 - -1.4971179962158203 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>7 0 6 6 -1. - <_>7 3 6 3 2. - 0 - 0.0279688294976950 - -0.2405429035425186 - 0.3397671878337860 - <_> - - <_> - - - - <_>5 6 3 4 -1. - <_>6 6 1 4 3. - 0 - 4.7484100796282291e-003 - -0.1859841048717499 - 0.2652375996112824 - <_> - - <_> - - - - <_>11 1 9 12 -1. - <_>14 1 3 12 3. - 0 - -9.6774380654096603e-003 - 0.1357457935810089 - -0.3173474073410034 - <_> - - <_> - - - - <_>6 7 4 9 -1. - <_>6 10 4 3 3. - 0 - 1.0649940231814981e-003 - -0.5035613179206848 - 0.0703831836581230 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>11 7 4 3 2. - <_>15 10 4 3 2. - 0 - 3.0151519458740950e-003 - -0.1758576929569244 - 0.1675014048814774 - <_> - - <_> - - - - <_>8 9 7 3 -1. - <_>8 10 7 1 3. - 0 - 7.6821137918159366e-004 - -0.2315856069326401 - 0.1274846047163010 - <_> - - <_> - - - - <_>3 2 4 18 -1. - <_>5 2 2 18 2. - 0 - -0.0566227808594704 - 0.3010323047637940 - -0.1152542978525162 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 4.7889677807688713e-003 - -0.0687973499298096 - 0.3577465116977692 - <_> - - <_> - - - - <_>6 11 8 6 -1. - <_>6 11 4 3 2. - <_>10 14 4 3 2. - 0 - 3.7908130325376987e-003 - 0.1125058010220528 - -0.2338984012603760 - <_> - - <_> - - - - <_>5 9 4 7 -1. - <_>7 9 2 7 2. - 0 - -3.6302749067544937e-003 - -0.2742595076560974 - 0.0601800717413425 - <_> - - <_> - - - - <_>5 8 6 5 -1. - <_>8 8 3 5 2. - 0 - 0.0149861602112651 - 0.0583701506257057 - -0.3508821129798889 - <_> - - <_> - - - - <_>7 11 1 3 -1. - <_>7 12 1 1 3. - 0 - 6.1338639352470636e-004 - -0.1004550009965897 - 0.1800414025783539 - <_> - - <_> - - - - <_>15 10 3 1 -1. - <_>16 10 1 1 3. - 0 - 1.7827099654823542e-003 - -0.0585045702755451 - 0.2816573083400726 - <_> - - <_> - - - - <_>10 12 2 2 -1. - <_>10 13 2 1 2. - 0 - 1.0279649868607521e-003 - 0.0460491515696049 - -0.4163356125354767 - <_> - - <_> - - - - <_>11 13 2 1 -1. - <_>12 13 1 1 2. - 0 - -1.4470520000031684e-005 - 0.0975944772362709 - -0.1700523942708969 - <_> - - <_> - - - - <_>6 12 2 2 -1. - <_>6 13 2 1 2. - 0 - 7.2919862577691674e-004 - -0.0892776921391487 - 0.1968380063772202 - <_> - - <_> - - - - <_>11 2 2 12 -1. - <_>11 2 1 6 2. - <_>12 8 1 6 2. - 0 - -1.2752750189974904e-003 - -0.2132434993982315 - 0.0777813196182251 - <_> - - <_> - - - - <_>7 0 6 6 -1. - <_>7 3 6 3 2. - 0 - 0.0275105703622103 - 0.0980590879917145 - -0.1846397966146469 - <_> - - <_> - - - - <_>4 8 4 2 -1. - <_>4 9 4 1 2. - 0 - 3.9082998409867287e-003 - -0.0982400774955750 - 0.1790283024311066 - <_> - - <_> - - - - <_>14 12 1 2 -1. - <_>14 13 1 1 2. - 0 - 2.8285238659009337e-004 - 0.0648823827505112 - -0.2590380907058716 - <_> - - <_> - - - - <_>4 0 2 4 -1. - <_>4 0 1 2 2. - <_>5 2 1 2 2. - 0 - 5.8698928914964199e-003 - -0.0484365001320839 - 0.3558405935764313 - <_> - - <_> - - - - <_>15 2 2 1 -1. - <_>16 2 1 1 2. - 0 - 5.2106438670307398e-004 - 0.0642008930444717 - -0.2426872998476028 - <_> - - <_> - - - - <_>3 14 3 1 -1. - <_>4 14 1 1 3. - 0 - -3.8013618905097246e-003 - 0.3134953081607819 - -0.0493724904954433 - <_> - - <_> - - - - <_>5 11 10 4 -1. - <_>5 11 5 2 2. - <_>10 13 5 2 2. - 0 - -3.5830549895763397e-003 - -0.1901564002037048 - 0.0859288871288300 - <_> - - <_> - - - - <_>4 10 12 3 -1. - <_>4 11 12 1 3. - 0 - 7.3326388373970985e-003 - -0.0872440785169601 - 0.1859602928161621 - <_> - - <_> - - - - <_>15 2 4 6 -1. - <_>15 2 2 3 2. - <_>17 5 2 3 2. - 0 - 6.8118958733975887e-004 - 0.0903531834483147 - -0.1738087981939316 - <_> - - <_> - - - - <_>5 8 1 4 -1. - <_>5 10 1 2 2. - 0 - -2.4127468932420015e-003 - 0.2658387124538422 - -0.0620182603597641 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>7 15 1 2 3. - 0 - 4.4389287941157818e-003 - 0.0386724397540092 - -0.4403919875621796 - <_> - - <_> - - - - <_>11 19 2 1 -1. - <_>12 19 1 1 2. - 0 - 2.9394390367087908e-005 - -0.1311666071414948 - 0.1238996013998985 - <_> - - <_> - - - - <_>6 7 3 2 -1. - <_>7 7 1 2 3. - 0 - 5.2613918669521809e-003 - -0.0543261393904686 - 0.3143467903137207 - <_> - - <_> - - - - <_>6 4 2 1 -1. - <_>7 4 1 1 2. - 0 - 2.3712380789220333e-003 - 0.0352349318563938 - -0.4593602120876312 - <_> - - <_> - - - - <_>6 4 3 2 -1. - <_>7 4 1 2 3. - 0 - -2.4774149060249329e-003 - -0.3257965147495270 - 0.0416763089597225 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>6 8 1 1 2. - <_>7 9 1 1 2. - 0 - 5.1308068213984370e-004 - -0.0980328395962715 - 0.1520960032939911 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>7 15 1 2 3. - 0 - -7.6761870877817273e-004 - -0.2094428986310959 - 0.0695636570453644 - <_> - - <_> - - - - <_>4 8 2 4 -1. - <_>4 8 1 2 2. - <_>5 10 1 2 2. - 0 - 4.1551832109689713e-003 - -0.0591424182057381 - 0.2478885948657990 - <_> - - <_> - - - - <_>10 4 7 3 -1. - <_>10 5 7 1 3. - 0 - 0.0143151497468352 - 0.0247133504599333 - -0.6266369223594666 - <_> - - <_> - - - - <_>4 5 2 6 -1. - <_>5 5 1 6 2. - 0 - 8.9347898028790951e-004 - -0.1338738054037094 - 0.1062666028738022 - <_> - - <_> - - - - <_>10 13 1 3 -1. - <_>10 14 1 1 3. - 0 - -5.8425782481208444e-004 - -0.2158381044864655 - 0.0675528720021248 - <_> - - <_> - - - - <_>6 11 6 3 -1. - <_>9 11 3 3 2. - 0 - 8.9712149929255247e-004 - -0.1599808931350708 - 0.0968595966696739 - <_> - - <_> - - - - <_>10 14 3 2 -1. - <_>10 15 3 1 2. - 0 - -4.4576660729944706e-003 - -0.4683977961540222 - 0.0344811081886292 - <_> - - <_> - - - - <_>8 8 4 2 -1. - <_>10 8 2 2 2. - 0 - 0.0163166504353285 - 0.0161764807999134 - -0.7699069976806641 - <_> - - <_> - - - - <_>17 12 3 1 -1. - <_>18 12 1 1 3. - 0 - -1.9581869710236788e-003 - 0.2342319041490555 - -0.0636050030589104 - <_> - - <_> - - - - <_>9 0 11 16 -1. - <_>9 8 11 8 2. - 0 - 0.2962863147258759 - 0.0380072817206383 - -0.3899135887622833 - <_> - - <_> - - - - <_>17 0 3 6 -1. - <_>17 2 3 2 3. - 0 - -9.1676972806453705e-004 - 0.1208648979663849 - -0.1091248020529747 - <_> - - <_> - - - - <_>0 0 1 2 -1. - <_>0 1 1 1 2. - 0 - -2.5543299852870405e-004 - -0.1875578016042709 - 0.0711042210459709 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 8.2945115864276886e-003 - -0.0399125702679157 - 0.3355168104171753 - <_> - - <_> - - - - <_>4 10 10 9 -1. - <_>4 13 10 3 3. - 0 - -0.0583876892924309 - -0.3347511887550354 - 0.0410111397504807 - <_> - - <_> - - - - <_>3 3 3 5 -1. - <_>4 3 1 5 3. - 0 - 1.0927469702437520e-003 - -0.0832434892654419 - 0.1604676991701126 - <_> - - <_> - - - - <_>6 1 2 6 -1. - <_>6 3 2 2 3. - 0 - 1.0653319768607616e-003 - -0.1192004010081291 - 0.1056177988648415 - <_> - - <_> - - - - <_>5 0 8 6 -1. - <_>5 2 8 2 3. - 0 - -0.0353237204253674 - 0.2839944958686829 - -0.0476509109139442 - <_> - - <_> - - - - <_>0 0 1 2 -1. - <_>0 1 1 1 2. - 0 - 6.7976478021591902e-004 - 0.0592235215008259 - -0.2274127006530762 - <_> - - <_> - - - - <_>6 3 6 4 -1. - <_>8 3 2 4 3. - 0 - -0.0248105190694332 - -0.6578854918479919 - 0.0188289396464825 - <_> - - <_> - - - - <_>8 6 3 3 -1. - <_>8 7 3 1 3. - 0 - 4.5880349352955818e-003 - -0.0507998690009117 - 0.2688626050949097 - <_> - - <_> - - - - <_>9 6 3 6 -1. - <_>9 8 3 2 3. - 0 - 3.9034360088407993e-003 - -0.0591830201447010 - 0.2264453023672104 - <_> - - <_> - - - - <_>4 3 12 12 -1. - <_>4 3 6 6 2. - <_>10 9 6 6 2. - 0 - 0.1236065998673439 - 0.0220522992312908 - -0.6784409880638123 - <_> - - <_> - - - - <_>13 8 3 2 -1. - <_>13 9 3 1 2. - 0 - -3.7856408744119108e-004 - -0.2171549946069717 - 0.0575223006308079 - <_> - - <_> - - - - <_>4 3 10 2 -1. - <_>9 3 5 2 2. - 0 - 0.0285622291266918 - -0.0340952686965466 - 0.4247479140758514 - <_> - - <_> - - - - <_>18 14 2 2 -1. - <_>18 14 1 1 2. - <_>19 15 1 1 2. - 0 - 2.2348840720951557e-003 - -0.0356555283069611 - 0.3505004048347473 - <_> - - <_> - - - - <_>5 6 6 2 -1. - <_>8 6 3 2 2. - 0 - 0.0192110594362020 - 0.0250783506780863 - -0.5931491851806641 - <_> - - <_> - - - - <_>0 14 20 5 -1. - <_>10 14 10 5 2. - 0 - 0.1561163961887360 - 0.0236126407980919 - -0.4874055087566376 - <_> - - <_> - - - - <_>9 17 2 1 -1. - <_>10 17 1 1 2. - 0 - -1.2261980446055532e-003 - -0.3042171895503998 - 0.0395263917744160 - <_> - - <_> - - - - <_>5 16 5 3 -1. - <_>5 17 5 1 3. - 0 - 3.6561759188771248e-003 - -0.0776275396347046 - 0.2026260942220688 - <_> - - <_> - - - - <_>9 16 3 2 -1. - <_>10 16 1 2 3. - 0 - 1.1567790061235428e-003 - 0.0556823983788490 - -0.2436849027872086 - <_> - - <_> - - - - <_>6 5 5 3 -1. - <_>6 6 5 1 3. - 0 - 6.2764538452029228e-003 - -0.0644526034593582 - 0.2118301987648010 - <_> - - <_> - - - - <_>11 12 3 8 -1. - <_>12 12 1 8 3. - 0 - 0.0120912399142981 - 0.0206679794937372 - -0.6223167777061462 - <_> - - <_> - - - - <_>4 3 3 9 -1. - <_>4 6 3 3 3. - 0 - 3.7568950210697949e-004 - 0.0736704766750336 - -0.1780910938978195 - <_> - - <_> - - - - <_>11 0 3 3 -1. - <_>12 0 1 3 3. - 0 - 3.8157668896019459e-003 - 0.0338457114994526 - -0.3626295924186707 - <_> - - <_> - - - - <_>5 17 10 2 -1. - <_>5 17 5 1 2. - <_>10 18 5 1 2. - 0 - -1.3252210337668657e-003 - 0.1473249047994614 - -0.0817274227738380 - <_> - - <_> - - - - <_>5 15 2 3 -1. - <_>5 16 2 1 3. - 0 - 2.1575710270553827e-003 - -0.0686241984367371 - 0.1756231933832169 - <_> - - <_> - - - - <_>6 14 2 4 -1. - <_>6 14 1 2 2. - <_>7 16 1 2 2. - 0 - -6.4548188820481300e-003 - -0.5815926790237427 - 0.0230200495570898 - <_> - - <_> - - - - <_>10 17 6 3 -1. - <_>10 18 6 1 3. - 0 - -8.1042833626270294e-003 - -0.3554920852184296 - 0.0353723317384720 - <_> - - <_> - - - - <_>19 5 1 3 -1. - <_>19 6 1 1 3. - 0 - 1.6489460540469736e-004 - 0.0744726881384850 - -0.1571836024522781 - <_> - - <_> - - - - <_>16 13 2 2 -1. - <_>16 13 1 1 2. - <_>17 14 1 1 2. - 0 - -1.9494029693305492e-003 - 0.3515708148479462 - -0.0362138189375401 - <_> - - <_> - - - - <_>0 11 2 1 -1. - <_>1 11 1 1 2. - 0 - -1.5267659910023212e-004 - -0.1411571949720383 - 0.0848027616739273 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>4 12 3 3 2. - <_>7 15 3 3 2. - 0 - 0.0238904207944870 - 0.0193176697939634 - -0.6318603157997131 - <_> - - <_> - - - - <_>5 15 4 3 -1. - <_>5 16 4 1 3. - 0 - -4.4950367882847786e-003 - 0.2125412970781326 - -0.0591430887579918 - <_> - - <_> - - - - <_>10 16 3 2 -1. - <_>11 16 1 2 3. - 0 - 2.8725271113216877e-003 - 0.0327940396964550 - -0.3950523138046265 - <_> - - <_> - - - - <_>1 0 10 2 -1. - <_>1 0 5 1 2. - <_>6 1 5 1 2. - 0 - 2.0885460544377565e-003 - -0.0854437872767448 - 0.1434766948223114 - <_> - - <_> - - - - <_>2 0 18 14 -1. - <_>11 0 9 14 2. - 0 - -0.4434382915496826 - -0.4005231857299805 - 0.0294280499219894 - <_> - - <_> - - - - <_>15 7 4 7 -1. - <_>17 7 2 7 2. - 0 - 0.0201991703361273 - 0.0400005504488945 - -0.3176333904266357 - <_> - - <_> - - - - <_>5 10 2 4 -1. - <_>6 10 1 4 2. - 0 - 0.0145708797499537 - 0.0136628001928329 - -0.8644195199012756 - <_> - - <_> - - - - <_>15 16 3 1 -1. - <_>16 16 1 1 3. - 0 - -3.8080150261521339e-003 - 0.4093072116374970 - -0.0338389687240124 - <_> - - <_> - - - - <_>7 15 5 3 -1. - <_>7 16 5 1 3. - 0 - 1.0009920224547386e-003 - -0.0826002508401871 - 0.1392879039049149 - <_> - - <_> - - - - <_>12 1 6 3 -1. - <_>14 1 2 3 3. - 0 - 1.1500980472192168e-003 - 0.0696775466203690 - -0.1743306070566177 - <_> - - <_> - - - - <_>16 2 2 1 -1. - <_>17 2 1 1 2. - 0 - 3.4720861003734171e-004 - 0.0666593834757805 - -0.1740380972623825 - <_> - - <_> - - - - <_>17 0 2 2 -1. - <_>17 0 1 1 2. - <_>18 1 1 1 2. - 0 - 2.7565560303628445e-003 - -0.0292856805026531 - 0.4024356901645660 - <_> - - <_> - - - - <_>1 0 4 6 -1. - <_>1 2 4 2 3. - 0 - -0.0241242200136185 - -0.3242420852184296 - 0.0373305082321167 - <_> - - <_> - - - - <_>3 1 6 18 -1. - <_>3 7 6 6 3. - 0 - -0.1398912072181702 - -0.6596748828887940 - 0.0179296191781759 - <_> - - <_> - - - - <_>5 1 1 12 -1. - <_>5 7 1 6 2. - 0 - 0.0309976805001497 - 0.0141005897894502 - -0.6953263878822327 - <_> - - <_> - - - - <_>16 9 2 2 -1. - <_>16 9 1 1 2. - <_>17 10 1 1 2. - 0 - 4.6191760338842869e-004 - -0.0679441466927528 - 0.1806613951921463 - <_> - - <_> - - - - <_>4 2 2 11 -1. - <_>5 2 1 11 2. - 0 - 0.0342644900083542 - 0.0222986396402121 - -0.5863891839981079 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - 3.9756381884217262e-003 - -0.0418037213385105 - 0.3166910111904144 - <_> - - <_> - - - - <_>14 18 2 2 -1. - <_>14 19 2 1 2. - 0 - -3.4192908788099885e-004 - -0.1581079065799713 - 0.0774840563535690 - <_> - - <_> - - - - <_>10 0 10 10 -1. - <_>10 0 5 5 2. - <_>15 5 5 5 2. - 0 - 0.0716729536652565 - -0.0233027692884207 - 0.5246502757072449 - <_> - - <_> - - - - <_>19 6 1 2 -1. - <_>19 7 1 1 2. - 0 - 7.1812322130426764e-004 - 0.0482687801122665 - -0.2777172923088074 - <_> - - <_> - - - - <_>11 0 6 8 -1. - <_>11 0 3 4 2. - <_>14 4 3 4 2. - 0 - -1.8881190335378051e-003 - 0.0831849873065948 - -0.1480201035737991 - <_> - - <_> - - - - <_>5 0 2 2 -1. - <_>5 0 1 1 2. - <_>6 1 1 1 2. - 0 - -1.2498029973357916e-003 - 0.2532911896705627 - -0.0497693903744221 - <_> - - <_> - - - - <_>3 1 9 11 -1. - <_>6 1 3 11 3. - 0 - -0.1275610029697418 - -0.6797056794166565 - 0.0208717007189989 - <_> - - <_> - - - - <_>10 11 3 2 -1. - <_>10 12 3 1 2. - 0 - -1.4621549780713394e-005 - 0.0793385133147240 - -0.1504373997449875 - <_> - - <_> - - - - <_>10 9 4 2 -1. - <_>12 9 2 2 2. - 0 - 3.5788679961115122e-003 - -0.0554691106081009 - 0.2407550960779190 - <_> - - <_> - - - - <_>13 7 1 6 -1. - <_>13 9 1 2 3. - 0 - 9.4902152195572853e-003 - 0.0286372397094965 - -0.5368028879165649 - <_> - - <_> - - - - <_>8 10 6 2 -1. - <_>8 10 3 1 2. - <_>11 11 3 1 2. - 0 - 0.0102830501273274 - 0.0115505298599601 - -0.7750126719474793 - <_> - - <_> - - - - <_>4 11 4 6 -1. - <_>4 14 4 3 2. - 0 - -0.0425072908401489 - -0.8877049088478088 - 9.7261751070618629e-003 - <_> - - <_> - - - - <_>17 4 2 3 -1. - <_>17 5 2 1 3. - 0 - 3.6155930138193071e-004 - 0.0644070133566856 - -0.1710951030254364 - <_> - - <_> - - - - <_>10 2 8 14 -1. - <_>10 2 4 7 2. - <_>14 9 4 7 2. - 0 - -0.0342456288635731 - 0.2423160970211029 - -0.0471888706088066 - <_> - - <_> - - - - <_>12 8 8 7 -1. - <_>16 8 4 7 2. - 0 - -0.1280671060085297 - -0.5486940145492554 - 0.0218543000519276 - <_> - - <_> - - - - <_>1 2 18 1 -1. - <_>7 2 6 1 3. - 0 - 0.0539183393120766 - -0.0254150591790676 - 0.4826321899890900 - <_> - - <_> - - - - <_>0 1 8 19 -1. - <_>4 1 4 19 2. - 0 - -0.0377118103206158 - 0.1417693942785263 - -0.0888717100024223 - <_> - - <_> - - - - <_>0 0 8 12 -1. - <_>4 0 4 12 2. - 0 - -0.2831090986728668 - -0.6492571234703064 - 0.0205638203769922 - <_> - - <_> - - - - <_>13 5 5 12 -1. - <_>13 11 5 6 2. - 0 - -0.0119260195642710 - -0.2175675928592682 - 0.0518516600131989 - <_> - - <_> - - - - <_>7 9 1 4 -1. - <_>7 11 1 2 2. - 0 - 3.7750680348835886e-004 - 0.0723406225442886 - -0.1636016964912415 - <_> - - <_> - - - - <_>0 13 10 3 -1. - <_>5 13 5 3 2. - 0 - 0.0158659107983112 - -0.0799402371048927 - 0.1645365953445435 - <_> - - <_> - - - - <_>2 7 12 4 -1. - <_>6 7 4 4 3. - 0 - 0.0711757093667984 - 0.0315890200436115 - -0.4198819100856781 - <_> - - <_> - - - - <_>9 1 2 6 -1. - <_>9 1 1 3 2. - <_>10 4 1 3 2. - 0 - 5.8520520105957985e-003 - 0.0232790801674128 - -0.4860427081584930 - <_> - - <_> - - - - <_>6 8 3 3 -1. - <_>7 8 1 3 3. - 0 - -1.3924130471423268e-003 - 0.1690838038921356 - -0.0737839266657829 - <_> - - <_> - - - - <_>4 11 3 1 -1. - <_>5 11 1 1 3. - 0 - -1.8412459758110344e-004 - 0.1223205998539925 - -0.1031398996710777 - <_> - - <_> - - - - <_>5 10 1 2 -1. - <_>5 11 1 1 2. - 0 - 2.2130980505608022e-004 - -0.0819763764739037 - 0.1633287072181702 - <_> - - <_> - - - - <_>0 17 4 1 -1. - <_>2 17 2 1 2. - 0 - 2.0723740453831851e-004 - 0.0927302017807961 - -0.1373358070850372 - <_> - - <_> - - - - <_>1 16 2 1 -1. - <_>2 16 1 1 2. - 0 - -3.8736319402232766e-004 - -0.2000461965799332 - 0.0848383828997612 - <_> - - <_> - - - - <_>7 14 2 3 -1. - <_>7 15 2 1 3. - 0 - 3.2468559220433235e-003 - -0.0564392581582069 - 0.2236497998237610 - <_> - - <_> - - - - <_>10 13 2 2 -1. - <_>10 14 2 1 2. - 0 - 9.3086768174543977e-004 - 0.0319265797734261 - -0.3970127999782562 - <_> - - <_> - - - - <_>16 11 3 1 -1. - <_>17 11 1 1 3. - 0 - 1.0306099429726601e-003 - -0.0601548887789249 - 0.2018976062536240 - <_> - - <_> - - - - <_>16 10 3 2 -1. - <_>17 10 1 2 3. - 0 - -7.6027261093258858e-004 - 0.1490111947059631 - -0.0996653735637665 - <_> - - <_> - - - - <_>7 2 3 1 -1. - <_>8 2 1 1 3. - 0 - -4.0442569297738373e-004 - -0.1911340951919556 - 0.0741251483559608 - <_> - - <_> - - - - <_>14 4 5 3 -1. - <_>14 5 5 1 3. - 0 - -4.7783120535314083e-003 - -0.3573026955127716 - 0.0365316793322563 - <_> - - <_> - - - - <_>7 7 2 3 -1. - <_>8 7 1 3 2. - 0 - -7.7672587940469384e-004 - 0.1024286970496178 - -0.1297499984502792 - <_> - - <_> - - - - <_>5 7 6 7 -1. - <_>8 7 3 7 2. - 0 - -5.7417969219386578e-003 - -0.1669895052909851 - 0.0701112821698189 - <_> - - <_> - - - - <_>4 2 2 6 -1. - <_>4 2 1 3 2. - <_>5 5 1 3 2. - 0 - -0.0108793200924993 - 0.4412057101726532 - -0.0292555894702673 - <_> - - <_> - - - - <_>4 9 2 3 -1. - <_>4 10 2 1 3. - 0 - 6.4163492061197758e-004 - -0.1119527965784073 - 0.1068117991089821 - <_> - - <_> - - - - <_>8 6 7 12 -1. - <_>8 10 7 4 3. - 0 - 0.0183418300002813 - 0.1638768017292023 - -0.0801891162991524 - <_> - - <_> - - - - <_>8 5 2 10 -1. - <_>8 10 2 5 2. - 0 - -1.5051739756017923e-003 - -0.2231325954198837 - 0.0615417100489140 - <_> - - <_> - - - - <_>4 3 3 5 -1. - <_>5 3 1 5 3. - 0 - 4.4345208443701267e-003 - -0.0666461363434792 - 0.2229906022548676 - <_> - - <_> - - - - <_>9 12 2 1 -1. - <_>10 12 1 1 2. - 0 - -1.4749550246051513e-005 - 0.1159788966178894 - -0.1037781015038490 - <_> - - <_> - - - - <_>3 8 3 4 -1. - <_>4 8 1 4 3. - 0 - -2.6539659593254328e-003 - 0.1311603039503098 - -0.0864887833595276 - <_> - - <_> - - - - <_>13 14 3 3 -1. - <_>13 15 3 1 3. - 0 - 2.7743550017476082e-003 - 0.0410640686750412 - -0.3122506141662598 - <_> - - <_> - - - - <_>1 14 2 3 -1. - <_>2 14 1 3 2. - 0 - 1.1590829817578197e-003 - 0.0643094778060913 - -0.1741307973861694 - <_> - - <_> - - - - <_>5 0 2 4 -1. - <_>5 0 1 2 2. - <_>6 2 1 2 2. - 0 - 9.2315068468451500e-004 - -0.0829740017652512 - 0.1443908065557480 - <_> - - <_> - - - - <_>5 14 4 3 -1. - <_>5 15 4 1 3. - 0 - -8.2323597744107246e-003 - 0.3038038909435272 - -0.0412291102111340 - <_> - - <_> - - - - <_>6 12 2 6 -1. - <_>6 12 1 3 2. - <_>7 15 1 3 2. - 0 - 3.5314110573381186e-003 - 0.0395112596452236 - -0.3309716880321503 - <_> - - <_> - - - - <_>6 13 2 2 -1. - <_>7 13 1 2 2. - 0 - 5.7490761391818523e-003 - 0.0198216605931520 - -0.5878059267997742 - <_> - - <_> - - - - <_>9 10 4 5 -1. - <_>11 10 2 5 2. - 0 - 7.8584970906376839e-003 - -0.0499522387981415 - 0.2724958956241608 - <_> - - <_> - - - - <_>11 3 2 1 -1. - <_>12 3 1 1 2. - 0 - -1.4245980310079176e-005 - 0.0880103409290314 - -0.1322834938764572 - <_> - - <_> - - - - <_>6 7 2 2 -1. - <_>6 7 1 1 2. - <_>7 8 1 1 2. - 0 - 6.9364177761599422e-004 - -0.0673918873071671 - 0.1746363043785095 - <_> - - <_> - - - - <_>5 3 6 5 -1. - <_>7 3 2 5 3. - 0 - -0.0298377498984337 - -0.5170981287956238 - 0.0248714108020067 - <_> - - <_> - - - - <_>5 6 4 8 -1. - <_>7 6 2 8 2. - 0 - 7.1383598260581493e-003 - 0.0674305036664009 - -0.1903724968433380 - <_> - - <_> - - - - <_>5 7 6 3 -1. - <_>7 7 2 3 3. - 0 - 0.0175825692713261 - -0.0366223715245724 - 0.3533546924591065 - <_> - - <_> - - - - <_>9 12 3 4 -1. - <_>10 12 1 4 3. - 0 - -1.2527840444818139e-003 - -0.2173064947128296 - 0.0612000189721584 - <_> - - <_> - - - - <_>16 9 3 1 -1. - <_>17 9 1 1 3. - 0 - 7.4575009057298303e-004 - -0.0644676610827446 - 0.1977504044771195 - <_> - - <_> - - - - <_>13 14 3 3 -1. - <_>13 15 3 1 3. - 0 - -7.2683871258050203e-004 - -0.1723337024450302 - 0.0717199519276619 - <_> - - <_> - - - - <_>7 13 4 2 -1. - <_>7 13 2 1 2. - <_>9 14 2 1 2. - 0 - 2.6301289908587933e-003 - -0.0392743386328220 - 0.3306629061698914 - <_> - - <_> - - - - <_>10 13 1 2 -1. - <_>10 14 1 1 2. - 0 - -1.4553769688063767e-005 - 0.0796985775232315 - -0.1785241961479187 - <_> - - <_> - - - - <_>9 13 2 3 -1. - <_>9 14 2 1 3. - 0 - -4.5518940896727145e-004 - -0.1666225045919418 - 0.0756603628396988 - <_> - - <_> - - - - <_>9 14 2 3 -1. - <_>9 15 2 1 3. - 0 - -4.0261688991449773e-004 - -0.1421436965465546 - 0.0810172930359840 - -1.5120370388031006 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>9 6 8 1 -1. - <_>13 6 4 1 2. - 0 - -8.3439666777849197e-003 - 0.3194215893745422 - -0.2676644921302795 - <_> - - <_> - - - - <_>6 8 3 2 -1. - <_>6 9 3 1 2. - 0 - 7.8073277836665511e-004 - -0.3485263884067535 - 0.1362888067960739 - <_> - - <_> - - - - <_>5 6 2 3 -1. - <_>6 6 1 3 2. - 0 - 8.6505862418562174e-004 - -0.2532368004322052 - 0.1741763949394226 - <_> - - <_> - - - - <_>12 10 2 6 -1. - <_>12 13 2 3 2. - 0 - -2.0879819930996746e-004 - 0.0885037034749985 - -0.3603850901126862 - <_> - - <_> - - - - <_>1 0 18 2 -1. - <_>7 0 6 2 3. - 0 - -7.4667241424322128e-003 - 0.1612063050270081 - -0.1736644953489304 - <_> - - <_> - - - - <_>9 7 4 6 -1. - <_>9 7 2 3 2. - <_>11 10 2 3 2. - 0 - -6.9383758818730712e-004 - 0.0968730077147484 - -0.2679347991943359 - <_> - - <_> - - - - <_>12 10 2 4 -1. - <_>13 10 1 4 2. - 0 - -4.7926991101121530e-005 - 0.0917562469840050 - -0.2621222138404846 - <_> - - <_> - - - - <_>13 12 1 2 -1. - <_>13 13 1 1 2. - 0 - -1.5861799474805593e-003 - -0.6140087246894836 - -7.4168378487229347e-003 - <_> - - <_> - - - - <_>13 18 2 2 -1. - <_>14 18 1 2 2. - 0 - 4.4573731429409236e-005 - -0.1484186053276062 - 0.1385574042797089 - <_> - - <_> - - - - <_>15 4 2 1 -1. - <_>16 4 1 1 2. - 0 - 5.0104141701012850e-004 - 0.0590889416635036 - -0.2959606945514679 - <_> - - <_> - - - - <_>5 7 6 3 -1. - <_>7 7 2 3 3. - 0 - -4.7243628650903702e-003 - 0.1709202975034714 - -0.1062470003962517 - <_> - - <_> - - - - <_>5 8 8 3 -1. - <_>9 8 4 3 2. - 0 - 3.9171050302684307e-003 - 0.0886052027344704 - -0.2277520000934601 - <_> - - <_> - - - - <_>6 12 6 3 -1. - <_>9 12 3 3 2. - 0 - 8.8675727602094412e-004 - -0.1683963984251022 - 0.1195868030190468 - <_> - - <_> - - - - <_>12 14 3 6 -1. - <_>13 14 1 6 3. - 0 - -4.2634559795260429e-003 - -0.3366324007511139 - 0.0472662709653378 - <_> - - <_> - - - - <_>18 9 2 8 -1. - <_>18 9 1 4 2. - <_>19 13 1 4 2. - 0 - 6.8006501533091068e-003 - -0.0592370815575123 - 0.3167530000209808 - <_> - - <_> - - - - <_>5 5 7 3 -1. - <_>5 6 7 1 3. - 0 - -0.0131689896807075 - 0.3716256916522980 - -0.0427148900926113 - <_> - - <_> - - - - <_>10 13 2 2 -1. - <_>10 13 1 1 2. - <_>11 14 1 1 2. - 0 - 7.3881301796063781e-004 - 0.0591581016778946 - -0.3095371127128601 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - 1.7939460230991244e-003 - -0.0846152827143669 - 0.2045253068208695 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 1.6819390002638102e-003 - -0.0867037624120712 - 0.2058054953813553 - <_> - - <_> - - - - <_>9 13 4 2 -1. - <_>9 13 2 1 2. - <_>11 14 2 1 2. - 0 - -2.5033599231392145e-003 - -0.4347319006919861 - 0.0387078300118446 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - 3.3658559550531209e-004 - -0.1071731001138687 - 0.1523838043212891 - <_> - - <_> - - - - <_>7 10 3 6 -1. - <_>7 12 3 2 3. - 0 - 0.0130378799512982 - 0.0446826592087746 - -0.4039565026760101 - <_> - - <_> - - - - <_>13 8 4 4 -1. - <_>13 10 4 2 2. - 0 - 1.3743729505222291e-004 - -0.2143251001834869 - 0.0686434134840965 - <_> - - <_> - - - - <_>8 0 12 18 -1. - <_>8 9 12 9 2. - 0 - 0.3717888891696930 - 0.0345029309391975 - -0.4599837958812714 - <_> - - <_> - - - - <_>18 9 2 10 -1. - <_>18 9 1 5 2. - <_>19 14 1 5 2. - 0 - -7.1649150922894478e-003 - 0.2664088010787964 - -0.0545579493045807 - <_> - - <_> - - - - <_>14 2 3 6 -1. - <_>14 5 3 3 2. - 0 - -7.1985478280112147e-004 - -0.1441569030284882 - 0.0982544869184494 - <_> - - <_> - - - - <_>10 0 3 14 -1. - <_>11 0 1 14 3. - 0 - 0.0168545395135880 - 0.0284286793321371 - -0.4522759914398193 - <_> - - <_> - - - - <_>6 16 8 4 -1. - <_>6 16 4 2 2. - <_>10 18 4 2 2. - 0 - 0.0136247295886278 - -0.0604742988944054 - 0.2271599024534226 - <_> - - <_> - - - - <_>5 3 5 12 -1. - <_>5 7 5 4 3. - 0 - 0.0136201400309801 - 0.0791776031255722 - -0.1810465008020401 - <_> - - <_> - - - - <_>4 15 6 3 -1. - <_>4 16 6 1 3. - 0 - -4.4976719655096531e-003 - 0.2130009979009628 - -0.0713925734162331 - <_> - - <_> - - - - <_>6 15 1 3 -1. - <_>6 16 1 1 3. - 0 - 7.1611418388783932e-004 - -0.0942373797297478 - 0.1583044975996018 - <_> - - <_> - - - - <_>13 1 2 1 -1. - <_>14 1 1 1 2. - 0 - 7.0651061832904816e-004 - 0.0488406717777252 - -0.2915244996547699 - <_> - - <_> - - - - <_>2 2 18 9 -1. - <_>11 2 9 9 2. - 0 - -0.3100227117538452 - -0.3851189017295837 - 0.0343696512281895 - <_> - - <_> - - - - <_>4 16 2 4 -1. - <_>4 16 1 2 2. - <_>5 18 1 2 2. - 0 - 4.3721711263060570e-003 - -0.0468803010880947 - 0.2995291054248810 - <_> - - <_> - - - - <_>15 1 3 8 -1. - <_>16 1 1 8 3. - 0 - -0.0143830096349120 - -0.4546372890472412 - 0.0341845192015171 - <_> - - <_> - - - - <_>11 11 2 3 -1. - <_>11 12 2 1 3. - 0 - -3.7763800937682390e-003 - -0.5670902729034424 - 0.0216847192496061 - <_> - - <_> - - - - <_>9 9 2 4 -1. - <_>9 11 2 2 2. - 0 - -3.4393940586596727e-003 - 0.2818368971347809 - -0.0526400096714497 - <_> - - <_> - - - - <_>5 9 8 4 -1. - <_>5 9 4 2 2. - <_>9 11 4 2 2. - 0 - -3.5846829414367676e-003 - -0.2922739982604981 - 0.0522315204143524 - <_> - - <_> - - - - <_>9 6 2 3 -1. - <_>9 7 2 1 3. - 0 - 3.6200750619173050e-003 - -0.0533787682652473 - 0.2636413872241974 - <_> - - <_> - - - - <_>7 9 2 3 -1. - <_>7 10 2 1 3. - 0 - 7.6435408554971218e-003 - 0.0368976294994354 - -0.3924233913421631 - <_> - - <_> - - - - <_>11 15 4 3 -1. - <_>11 16 4 1 3. - 0 - 3.5417820326983929e-003 - 0.0356899984180927 - -0.3560107946395874 - <_> - - <_> - - - - <_>8 6 2 3 -1. - <_>8 7 2 1 3. - 0 - -2.4041049182415009e-003 - 0.1631305962800980 - -0.0892399623990059 - <_> - - <_> - - - - <_>6 8 2 3 -1. - <_>6 9 2 1 3. - 0 - 6.5479031763970852e-003 - 0.0367087088525295 - -0.3418768942356110 - <_> - - <_> - - - - <_>6 9 6 3 -1. - <_>8 9 2 3 3. - 0 - -0.0123500004410744 - 0.2615779936313629 - -0.0524758212268353 - <_> - - <_> - - - - <_>6 9 4 2 -1. - <_>6 9 2 1 2. - <_>8 10 2 1 2. - 0 - 1.4726500012329780e-005 - -0.1786914020776749 - 0.0778074637055397 - <_> - - <_> - - - - <_>4 7 9 1 -1. - <_>7 7 3 1 3. - 0 - -0.0215636193752289 - -0.6392611861228943 - 0.0190501995384693 - <_> - - <_> - - - - <_>5 7 2 6 -1. - <_>5 7 1 3 2. - <_>6 10 1 3 2. - 0 - 5.0762481987476349e-003 - -0.0516654811799526 - 0.2912625074386597 - <_> - - <_> - - - - <_>4 8 4 8 -1. - <_>4 12 4 4 2. - 0 - -0.0595319494605064 - -0.7529155015945435 - 0.0202382300049067 - <_> - - <_> - - - - <_>7 0 2 19 -1. - <_>8 0 1 19 2. - 0 - -0.0168084893375635 - -0.4283326864242554 - 0.0259977299720049 - <_> - - <_> - - - - <_>5 9 1 3 -1. - <_>5 10 1 1 3. - 0 - 3.4431689418852329e-003 - -0.0549125708639622 - 0.2423350065946579 - <_> - - <_> - - - - <_>9 5 3 1 -1. - <_>10 5 1 1 3. - 0 - -1.0451589478179812e-003 - -0.2624354064464569 - 0.0457485690712929 - <_> - - <_> - - - - <_>16 4 3 6 -1. - <_>16 6 3 2 3. - 0 - -4.8333409358747303e-004 - 0.0897919535636902 - -0.1289211064577103 - <_> - - <_> - - - - <_>10 15 5 3 -1. - <_>10 16 5 1 3. - 0 - -4.7575961798429489e-003 - -0.3186874091625214 - 0.0360205285251141 - <_> - - <_> - - - - <_>13 1 5 14 -1. - <_>13 8 5 7 2. - 0 - -0.1040714979171753 - 0.5139874219894409 - -0.0235981196165085 - <_> - - <_> - - - - <_>3 0 4 4 -1. - <_>3 0 2 2 2. - <_>5 2 2 2 2. - 0 - 9.6292654052376747e-003 - -0.0479655787348747 - 0.2179042994976044 - <_> - - <_> - - - - <_>6 5 4 13 -1. - <_>8 5 2 13 2. - 0 - 5.9226430021226406e-003 - 0.0642751306295395 - -0.1821085959672928 - <_> - - <_> - - - - <_>4 2 2 16 -1. - <_>4 2 1 8 2. - <_>5 10 1 8 2. - 0 - 0.0169437993317842 - -0.0375093482434750 - 0.3145883083343506 - <_> - - <_> - - - - <_>4 8 8 3 -1. - <_>8 8 4 3 2. - 0 - -6.5468349494040012e-003 - -0.1581242978572846 - 0.0905207470059395 - <_> - - <_> - - - - <_>5 6 2 12 -1. - <_>5 12 2 6 2. - 0 - 9.4754863530397415e-003 - 0.0489958785474300 - -0.2785384953022003 - <_> - - <_> - - - - <_>8 7 2 4 -1. - <_>9 7 1 4 2. - 0 - -4.9254479818046093e-003 - 0.3190219104290009 - -0.0456094704568386 - <_> - - <_> - - - - <_>13 9 5 4 -1. - <_>13 11 5 2 2. - 0 - -9.4199541490525007e-004 - -0.1647298932075501 - 0.0739662274718285 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>12 0 4 1 2. - <_>16 1 4 1 2. - 0 - 7.0046652108430862e-003 - -0.0363423414528370 - 0.3384662866592407 - <_> - - <_> - - - - <_>14 0 6 4 -1. - <_>14 0 3 2 2. - <_>17 2 3 2 2. - 0 - -9.1483298456296325e-004 - 0.1046098992228508 - -0.1120643988251686 - <_> - - <_> - - - - <_>4 9 6 2 -1. - <_>6 9 2 2 3. - 0 - -1.8404760339763016e-004 - 0.1421570926904678 - -0.0876273736357689 - <_> - - <_> - - - - <_>13 1 2 1 -1. - <_>14 1 1 1 2. - 0 - -3.1692520133219659e-004 - -0.1606785058975220 - 0.0700968429446220 - <_> - - <_> - - - - <_>0 0 12 3 -1. - <_>6 0 6 3 2. - 0 - 0.0231080092489719 - -0.0537845008075237 - 0.2078001946210861 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>6 12 1 3 3. - 0 - 6.3212551176548004e-003 - 0.0293422397226095 - -0.3837850093841553 - <_> - - <_> - - - - <_>5 11 4 3 -1. - <_>5 12 4 1 3. - 0 - 7.3698158375918865e-003 - -0.0416256897151470 - 0.2652654945850372 - <_> - - <_> - - - - <_>5 13 2 4 -1. - <_>5 13 1 2 2. - <_>6 15 1 2 2. - 0 - 3.3730969298630953e-003 - 0.0377533212304115 - -0.3013829886913300 - <_> - - <_> - - - - <_>4 11 3 3 -1. - <_>4 12 3 1 3. - 0 - -6.4016957767307758e-003 - 0.2183986008167267 - -0.0545513406395912 - <_> - - <_> - - - - <_>1 8 6 2 -1. - <_>1 9 6 1 2. - 0 - 0.0135539202019572 - 0.0281212609261274 - -0.4360117018222809 - <_> - - <_> - - - - <_>6 8 4 12 -1. - <_>6 12 4 4 3. - 0 - -6.7636291496455669e-003 - -0.1632225066423416 - 0.0673396587371826 - <_> - - <_> - - - - <_>7 14 6 4 -1. - <_>7 14 3 2 2. - <_>10 16 3 2 2. - 0 - -1.3078070478513837e-003 - 0.1231539994478226 - -0.1009631976485252 - <_> - - <_> - - - - <_>8 16 8 4 -1. - <_>8 16 4 2 2. - <_>12 18 4 2 2. - 0 - -7.6282368972897530e-003 - 0.2516534924507141 - -0.0504607111215591 - <_> - - <_> - - - - <_>5 10 10 6 -1. - <_>5 12 10 2 3. - 0 - 7.9994397237896919e-003 - 0.0730206519365311 - -0.1887779980897903 - <_> - - <_> - - - - <_>6 13 1 3 -1. - <_>6 14 1 1 3. - 0 - -3.1321209389716387e-003 - 0.2765319943428040 - -0.0432768389582634 - <_> - - <_> - - - - <_>3 11 4 6 -1. - <_>3 13 4 2 3. - 0 - -0.0409313105046749 - -0.6551824808120728 - 0.0186009202152491 - <_> - - <_> - - - - <_>10 14 6 3 -1. - <_>10 15 6 1 3. - 0 - 7.0344978012144566e-003 - 0.0219147708266974 - -0.4859581887722015 - <_> - - <_> - - - - <_>3 15 4 2 -1. - <_>5 15 2 2 2. - 0 - -2.5299859698861837e-003 - 0.1403076946735382 - -0.0805664733052254 - <_> - - <_> - - - - <_>3 14 4 3 -1. - <_>5 14 2 3 2. - 0 - 3.8867890834808350e-003 - -0.0890756994485855 - 0.1683240979909897 - <_> - - <_> - - - - <_>1 2 1 2 -1. - <_>1 3 1 1 2. - 0 - 3.8210590719245374e-004 - 0.0652008727192879 - -0.1859952956438065 - <_> - - <_> - - - - <_>0 12 8 4 -1. - <_>4 12 4 4 2. - 0 - 0.1095478981733322 - 0.0150360204279423 - -0.8690835833549500 - <_> - - <_> - - - - <_>1 2 1 2 -1. - <_>1 3 1 1 2. - 0 - -1.4177490083966404e-004 - -0.1466926932334900 - 0.0790501534938812 - <_> - - <_> - - - - <_>5 11 1 3 -1. - <_>5 12 1 1 3. - 0 - 2.0990408957004547e-003 - -0.0464896783232689 - 0.2304524928331375 - <_> - - <_> - - - - <_>10 19 2 1 -1. - <_>11 19 1 1 2. - 0 - -2.3089480237103999e-004 - -0.1678400933742523 - 0.0697731003165245 - <_> - - <_> - - - - <_>6 6 4 4 -1. - <_>6 6 2 2 2. - <_>8 8 2 2 2. - 0 - -4.3103471398353577e-004 - 0.0817587599158287 - -0.1293924003839493 - <_> - - <_> - - - - <_>6 3 1 2 -1. - <_>6 4 1 1 2. - 0 - -2.9572288622148335e-004 - -0.1906823068857193 - 0.0584200806915760 - <_> - - <_> - - - - <_>0 4 10 2 -1. - <_>5 4 5 2 2. - 0 - -4.0046018548309803e-003 - 0.1294852942228317 - -0.0815996229648590 - <_> - - <_> - - - - <_>4 5 2 1 -1. - <_>5 5 1 1 2. - 0 - 1.4935520084691234e-005 - -0.1336472034454346 - 0.0986640229821205 - <_> - - <_> - - - - <_>0 12 2 1 -1. - <_>1 12 1 1 2. - 0 - 5.7824450777843595e-004 - 0.0590956397354603 - -0.1831808984279633 - <_> - - <_> - - - - <_>1 4 6 11 -1. - <_>3 4 2 11 3. - 0 - 0.0132513204589486 - -0.0714886710047722 - 0.1563598960638046 - <_> - - <_> - - - - <_>6 4 2 1 -1. - <_>7 4 1 1 2. - 0 - 7.1273561843554489e-006 - -0.1228308975696564 - 0.0977525115013123 - <_> - - <_> - - - - <_>7 0 1 6 -1. - <_>7 2 1 2 3. - 0 - 1.4193489914759994e-003 - -0.0816967487335205 - 0.1370157003402710 - <_> - - <_> - - - - <_>7 0 8 4 -1. - <_>7 2 8 2 2. - 0 - -8.0165416002273560e-003 - 0.2469722926616669 - -0.0565270408987999 - <_> - - <_> - - - - <_>13 6 2 2 -1. - <_>13 7 2 1 2. - 0 - -2.3803471121937037e-003 - -0.3790158927440643 - 0.0345325507223606 - <_> - - <_> - - - - <_>16 15 2 2 -1. - <_>16 15 1 1 2. - <_>17 16 1 1 2. - 0 - -4.8633730039000511e-003 - 0.6544101238250732 - -0.0192961990833282 - <_> - - <_> - - - - <_>11 12 1 2 -1. - <_>11 13 1 1 2. - 0 - -1.4388219824468251e-005 - 0.0751018822193146 - -0.1439446061849594 - <_> - - <_> - - - - <_>4 4 5 2 -1. - <_>4 5 5 1 2. - 0 - 1.4798780284763779e-005 - -0.1080738976597786 - 0.0962138101458550 - <_> - - <_> - - - - <_>4 3 3 9 -1. - <_>4 6 3 3 3. - 0 - 0.0241761393845081 - 0.0269836802035570 - -0.4070847928524017 - <_> - - <_> - - - - <_>6 7 2 3 -1. - <_>7 7 1 3 2. - 0 - -3.9851912297308445e-003 - 0.2178670018911362 - -0.0541703104972839 - <_> - - <_> - - - - <_>4 8 6 1 -1. - <_>7 8 3 1 2. - 0 - -2.5377580896019936e-003 - -0.1531459987163544 - 0.0880592390894890 - <_> - - <_> - - - - <_>3 8 12 5 -1. - <_>9 8 6 5 2. - 0 - 2.1663319785147905e-003 - 0.1025272011756897 - -0.1203925013542175 - <_> - - <_> - - - - <_>9 8 1 3 -1. - <_>9 9 1 1 3. - 0 - 3.5593929351307452e-004 - -0.0822677686810493 - 0.1322889029979706 - <_> - - <_> - - - - <_>9 9 6 1 -1. - <_>12 9 3 1 2. - 0 - 1.1394560569897294e-003 - -0.0863934904336929 - 0.1569389998912811 - <_> - - <_> - - - - <_>13 7 7 6 -1. - <_>13 9 7 2 3. - 0 - 0.0555638186633587 - 0.0171081107109785 - -0.7047374248504639 - <_> - - <_> - - - - <_>0 2 20 18 -1. - <_>10 2 10 18 2. - 0 - 0.5551459193229675 - 0.0133453896269202 - -0.6991689205169678 - <_> - - <_> - - - - <_>12 5 6 3 -1. - <_>12 6 6 1 3. - 0 - -4.6235490590333939e-003 - -0.2398367971181870 - 0.0395153500139713 - <_> - - <_> - - - - <_>8 8 3 2 -1. - <_>8 9 3 1 2. - 0 - -4.5803869143128395e-003 - 0.4290086925029755 - -0.0264305397868156 - <_> - - <_> - - - - <_>4 9 11 6 -1. - <_>4 11 11 2 3. - 0 - 7.0851319469511509e-003 - 0.1123107969760895 - -0.1071150973439217 - <_> - - <_> - - - - <_>7 7 7 6 -1. - <_>7 10 7 3 2. - 0 - -4.0524810901843011e-004 - -0.2574095129966736 - 0.0466700196266174 - <_> - - <_> - - - - <_>15 7 2 8 -1. - <_>15 7 1 4 2. - <_>16 11 1 4 2. - 0 - -4.9121538177132607e-003 - 0.2712928056716919 - -0.0439662411808968 - <_> - - <_> - - - - <_>4 10 2 6 -1. - <_>4 12 2 2 3. - 0 - -0.0193480998277664 - -0.4064385890960693 - 0.0291767697781324 - <_> - - <_> - - - - <_>7 13 2 2 -1. - <_>7 13 1 1 2. - <_>8 14 1 1 2. - 0 - -1.3842330081388354e-003 - 0.2353720963001251 - -0.0502275489270687 - <_> - - <_> - - - - <_>7 2 3 4 -1. - <_>8 2 1 4 3. - 0 - 6.2752598896622658e-003 - 0.0281135700643063 - -0.3991320133209229 - <_> - - <_> - - - - <_>7 3 2 3 -1. - <_>8 3 1 3 2. - 0 - 1.4853129869152326e-005 - -0.1075062975287437 - 0.1020639017224312 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -1.1780710192397237e-003 - 0.1811279058456421 - -0.0589980408549309 - <_> - - <_> - - - - <_>14 6 3 8 -1. - <_>15 6 1 8 3. - 0 - -0.0321663916110992 - -0.9813510179519653 - 0.0118171395733953 - <_> - - <_> - - - - <_>4 10 2 6 -1. - <_>4 13 2 3 2. - 0 - 2.8749080374836922e-003 - 0.0507743693888187 - -0.2065003961324692 - <_> - - <_> - - - - <_>0 17 10 3 -1. - <_>0 18 10 1 3. - 0 - -3.5098160151392221e-003 - 0.1435403972864151 - -0.0780067369341850 - <_> - - <_> - - - - <_>5 18 7 2 -1. - <_>5 19 7 1 2. - 0 - -7.2203627787530422e-003 - 0.2385395020246506 - -0.0461761802434921 - <_> - - <_> - - - - <_>13 12 1 3 -1. - <_>13 13 1 1 3. - 0 - 2.0837699994444847e-003 - 0.0228014606982470 - -0.5094562172889710 - <_> - - <_> - - - - <_>9 2 4 16 -1. - <_>9 2 2 8 2. - <_>11 10 2 8 2. - 0 - 0.0361754000186920 - 0.0147347403690219 - -0.6134936213493347 - <_> - - <_> - - - - <_>6 7 2 3 -1. - <_>6 8 2 1 3. - 0 - 7.5545758008956909e-003 - 0.0161661300808191 - -0.5886300802230835 - <_> - - <_> - - - - <_>9 8 2 4 -1. - <_>9 10 2 2 2. - 0 - -2.6058950461447239e-003 - 0.3643600940704346 - -0.0346243008971214 - <_> - - <_> - - - - <_>18 4 2 3 -1. - <_>18 5 2 1 3. - 0 - 6.4669351559132338e-004 - 0.0634447336196899 - -0.1895352005958557 - <_> - - <_> - - - - <_>16 10 2 2 -1. - <_>16 10 1 1 2. - <_>17 11 1 1 2. - 0 - -3.1747641041874886e-003 - 0.4287785887718201 - -0.0269687902182341 - <_> - - <_> - - - - <_>14 2 6 6 -1. - <_>14 4 6 2 3. - 0 - -0.0238397307693958 - -0.3687137067317963 - 0.0336885005235672 - <_> - - <_> - - - - <_>16 11 3 1 -1. - <_>17 11 1 1 3. - 0 - 1.1973649961873889e-003 - -0.0628985092043877 - 0.1917916983366013 - <_> - - <_> - - - - <_>17 10 2 1 -1. - <_>18 10 1 1 2. - 0 - 4.4593929487746209e-005 - -0.1102266013622284 - 0.1215995997190476 - <_> - - <_> - - - - <_>16 8 2 4 -1. - <_>17 8 1 4 2. - 0 - 9.1575905680656433e-003 - 0.0253538899123669 - -0.4992873072624207 - <_> - - <_> - - - - <_>11 15 6 3 -1. - <_>11 16 6 1 3. - 0 - 2.3933469783514738e-003 - 0.0482820905745029 - -0.2268545031547546 - <_> - - <_> - - - - <_>3 7 3 4 -1. - <_>4 7 1 4 3. - 0 - -1.1994830565527081e-003 - 0.1088657006621361 - -0.1066953986883164 - <_> - - <_> - - - - <_>3 5 3 5 -1. - <_>4 5 1 5 3. - 0 - 2.1603968925774097e-003 - -0.0760766267776489 - 0.1650795936584473 - <_> - - <_> - - - - <_>2 10 6 1 -1. - <_>5 10 3 1 2. - 0 - -0.0165563393384218 - -0.5416721105575562 - 0.0207116492092609 - <_> - - <_> - - - - <_>12 0 4 2 -1. - <_>14 0 2 2 2. - 0 - -8.8350269943475723e-003 - -0.3671090900897980 - 0.0288704000413418 - <_> - - <_> - - - - <_>9 14 1 2 -1. - <_>9 15 1 1 2. - 0 - -1.4592399566026870e-005 - 0.0787240713834763 - -0.1362261027097702 - <_> - - <_> - - - - <_>15 12 5 6 -1. - <_>15 14 5 2 3. - 0 - -1.4897900400683284e-003 - 0.1143611967563629 - -0.1010489985346794 - <_> - - <_> - - - - <_>4 13 10 4 -1. - <_>4 15 10 2 2. - 0 - -3.9764028042554855e-003 - -0.1025056019425392 - 0.1046606004238129 - <_> - - <_> - - - - <_>7 16 6 4 -1. - <_>7 16 3 2 2. - <_>10 18 3 2 2. - 0 - -7.2657042182981968e-003 - 0.2298226952552795 - -0.0451555810868740 - <_> - - <_> - - - - <_>9 16 7 3 -1. - <_>9 17 7 1 3. - 0 - 8.9115025475621223e-003 - 0.0296811591833830 - -0.4423500895500183 - <_> - - <_> - - - - <_>4 8 2 2 -1. - <_>4 8 1 1 2. - <_>5 9 1 1 2. - 0 - -1.8145949579775333e-003 - 0.2391141951084137 - -0.0468561202287674 - <_> - - <_> - - - - <_>0 17 20 2 -1. - <_>10 17 10 2 2. - 0 - -0.0375463217496872 - -0.1856968998908997 - 0.0615337491035461 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - -1.0010029654949903e-003 - 0.1436135023832321 - -0.0869904831051826 - <_> - - <_> - - - - <_>4 7 2 6 -1. - <_>4 7 1 3 2. - <_>5 10 1 3 2. - 0 - -3.7357229739427567e-003 - 0.2024545967578888 - -0.0611675307154655 - <_> - - <_> - - - - <_>11 11 1 2 -1. - <_>11 12 1 1 2. - 0 - -1.4672010365757160e-005 - 0.0881808698177338 - -0.1303700953722000 - <_> - - <_> - - - - <_>10 13 5 2 -1. - <_>10 14 5 1 2. - 0 - 9.4379713118541986e-005 - 0.0556265302002430 - -0.2002536952495575 - <_> - - <_> - - - - <_>8 16 3 3 -1. - <_>8 17 3 1 3. - 0 - 1.5706509293522686e-004 - -0.0983358770608902 - 0.1151885017752647 - <_> - - <_> - - - - <_>9 18 3 1 -1. - <_>10 18 1 1 3. - 0 - -8.1810058327391744e-004 - -0.2170155048370361 - 0.0528804101049900 - <_> - - <_> - - - - <_>8 6 11 12 -1. - <_>8 10 11 4 3. - 0 - -0.0516892597079277 - 0.5771527886390686 - -0.0187611002475023 - <_> - - <_> - - - - <_>2 4 13 12 -1. - <_>2 10 13 6 2. - 0 - -0.0907194092869759 - -0.3627884984016419 - 0.0367411300539970 - <_> - - <_> - - - - <_>0 15 10 4 -1. - <_>0 15 5 2 2. - <_>5 17 5 2 2. - 0 - -0.0109590403735638 - 0.1678718030452728 - -0.0697256475687027 - <_> - - <_> - - - - <_>4 8 6 2 -1. - <_>7 8 3 2 2. - 0 - 3.7122920621186495e-003 - 0.0603603087365627 - -0.2056706994771957 - <_> - - <_> - - - - <_>10 1 6 2 -1. - <_>12 1 2 2 3. - 0 - -0.0193157307803631 - -0.5739740133285523 - 0.0197053197771311 - <_> - - <_> - - - - <_>7 8 6 7 -1. - <_>9 8 2 7 3. - 0 - -0.0270511899143457 - 0.3498320877552033 - -0.0360842905938625 - <_> - - <_> - - - - <_>9 9 6 2 -1. - <_>11 9 2 2 3. - 0 - 0.0217429101467133 - 0.0227670799940825 - -0.6531919836997986 - <_> - - <_> - - - - <_>3 14 15 4 -1. - <_>8 14 5 4 3. - 0 - 0.0996085926890373 - -0.0312595590949059 - 0.3827111124992371 - <_> - - <_> - - - - <_>7 3 2 14 -1. - <_>7 10 2 7 2. - 0 - 4.6517839655280113e-003 - 0.1008803024888039 - -0.1239601969718933 - <_> - - <_> - - - - <_>11 14 1 2 -1. - <_>11 15 1 1 2. - 0 - -1.4784580343984999e-005 - 0.0796834826469421 - -0.1557302027940750 - <_> - - <_> - - - - <_>5 11 1 3 -1. - <_>5 12 1 1 3. - 0 - -1.6718909610062838e-003 - 0.1707732975482941 - -0.0677338093519211 - <_> - - <_> - - - - <_>11 14 3 3 -1. - <_>11 15 3 1 3. - 0 - 1.4456630196946207e-005 - -0.1010603010654450 - 0.1111683025956154 - <_> - - <_> - - - - <_>10 7 9 4 -1. - <_>13 7 3 4 3. - 0 - -2.7084909379482269e-003 - 0.1131272017955780 - -0.1088062971830368 - -1.4741109609603882 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>11 6 6 5 -1. - <_>14 6 3 5 2. - 0 - -0.0226868595927954 - 0.2731691002845764 - -0.2735877931118012 - <_> - - <_> - - - - <_>8 9 1 2 -1. - <_>8 10 1 1 2. - 0 - 4.2952829971909523e-004 - -0.2510795891284943 - 0.1574072986841202 - <_> - - <_> - - - - <_>16 3 1 10 -1. - <_>16 8 1 5 2. - 0 - 2.5115790776908398e-003 - -0.2200254946947098 - 0.1566022932529450 - <_> - - <_> - - - - <_>6 11 10 4 -1. - <_>6 13 10 2 2. - 0 - -6.3958892133086920e-004 - 0.0726099386811256 - -0.3827897906303406 - <_> - - <_> - - - - <_>5 7 2 2 -1. - <_>6 7 1 2 2. - 0 - 2.6575280353426933e-003 - -0.1152343973517418 - 0.2341423928737640 - <_> - - <_> - - - - <_>1 6 6 11 -1. - <_>4 6 3 11 2. - 0 - -0.0759164094924927 - 0.3251757919788361 - -0.0826222673058510 - <_> - - <_> - - - - <_>6 8 3 2 -1. - <_>6 9 3 1 2. - 0 - 1.4966350136091933e-005 - -0.3564029037952423 - 0.0523535907268524 - <_> - - <_> - - - - <_>10 15 1 2 -1. - <_>10 16 1 1 2. - 0 - -1.4678399566037115e-005 - 0.1019821986556053 - -0.2245268970727921 - <_> - - <_> - - - - <_>8 0 12 1 -1. - <_>14 0 6 1 2. - 0 - 5.2314779168227687e-005 - -0.1775784939527512 - 0.1010707989335060 - <_> - - <_> - - - - <_>5 3 2 2 -1. - <_>6 3 1 2 2. - 0 - 1.4088390162214637e-004 - -0.1513977050781250 - 0.1387276053428650 - <_> - - <_> - - - - <_>11 6 6 5 -1. - <_>14 6 3 5 2. - 0 - -0.0234117899090052 - -0.1643598973751068 - 0.1070213988423348 - <_> - - <_> - - - - <_>6 12 3 3 -1. - <_>6 13 3 1 3. - 0 - 2.3284659255295992e-003 - -0.0809507295489311 - 0.2233397066593170 - <_> - - <_> - - - - <_>10 10 3 3 -1. - <_>11 10 1 3 3. - 0 - -3.3611140679568052e-003 - -0.4432994127273560 - 0.0344890393316746 - <_> - - <_> - - - - <_>6 13 2 2 -1. - <_>6 14 2 1 2. - 0 - 5.8458978310227394e-004 - -0.1108347028493881 - 0.1721502989530563 - <_> - - <_> - - - - <_>4 2 16 8 -1. - <_>12 2 8 8 2. - 0 - -3.3180968603119254e-004 - 0.0691525936126709 - -0.2632124125957489 - <_> - - <_> - - - - <_>10 12 2 2 -1. - <_>10 12 1 1 2. - <_>11 13 1 1 2. - 0 - -8.8515877723693848e-004 - -0.3476473093032837 - 0.0432582013309002 - <_> - - <_> - - - - <_>10 7 2 2 -1. - <_>11 7 1 2 2. - 0 - 1.4169749920256436e-004 - -0.1460068970918655 - 0.1014982014894486 - <_> - - <_> - - - - <_>13 13 1 3 -1. - <_>13 14 1 1 3. - 0 - 1.4851680025458336e-003 - 0.0299831703305244 - -0.4178613126277924 - <_> - - <_> - - - - <_>13 13 2 3 -1. - <_>13 14 2 1 3. - 0 - -7.5329327955842018e-004 - -0.2155763953924179 - 0.0645342096686363 - <_> - - <_> - - - - <_>1 13 6 4 -1. - <_>4 13 3 4 2. - 0 - 0.0142605397850275 - -0.0800133273005486 - 0.1951199024915695 - <_> - - <_> - - - - <_>10 13 2 1 -1. - <_>11 13 1 1 2. - 0 - -1.4687920156575274e-005 - 0.0971216633915901 - -0.1350235044956207 - <_> - - <_> - - - - <_>10 6 2 10 -1. - <_>10 6 1 5 2. - <_>11 11 1 5 2. - 0 - -9.8925074562430382e-003 - -0.5103526115417481 - 0.0293358005583286 - <_> - - <_> - - - - <_>16 11 2 2 -1. - <_>16 11 1 1 2. - <_>17 12 1 1 2. - 0 - -1.8316040514037013e-003 - 0.3267607986927033 - -0.0450140200555325 - <_> - - <_> - - - - <_>16 12 3 1 -1. - <_>17 12 1 1 3. - 0 - 8.6495577124878764e-004 - -0.0778365135192871 - 0.1876493990421295 - <_> - - <_> - - - - <_>9 5 7 12 -1. - <_>9 9 7 4 3. - 0 - 0.1490266025066376 - 0.0195689909160137 - -0.6245067715644836 - <_> - - <_> - - - - <_>4 1 10 18 -1. - <_>4 1 5 9 2. - <_>9 10 5 9 2. - 0 - -0.0171267203986645 - -0.1814144998788834 - 0.0730486810207367 - <_> - - <_> - - - - <_>17 12 2 2 -1. - <_>17 12 1 1 2. - <_>18 13 1 1 2. - 0 - -1.7061959952116013e-003 - 0.3123683929443359 - -0.0441520288586617 - <_> - - <_> - - - - <_>12 5 6 2 -1. - <_>12 6 6 1 2. - 0 - 3.8261809386312962e-003 - 0.0515185296535492 - -0.2933003008365631 - <_> - - <_> - - - - <_>4 7 5 2 -1. - <_>4 8 5 1 2. - 0 - 3.8093670736998320e-003 - -0.0767072066664696 - 0.1757443994283676 - <_> - - <_> - - - - <_>7 3 1 2 -1. - <_>7 4 1 1 2. - 0 - -3.4228331060148776e-004 - -0.2345802038908005 - 0.0617266409099102 - <_> - - <_> - - - - <_>6 0 7 6 -1. - <_>6 3 7 3 2. - 0 - -0.0416978709399700 - 0.4392912983894348 - -0.0368928201496601 - <_> - - <_> - - - - <_>13 11 2 8 -1. - <_>13 11 1 4 2. - <_>14 15 1 4 2. - 0 - 1.9080520723946393e-004 - -0.1348893940448761 - 0.0971686616539955 - <_> - - <_> - - - - <_>8 7 4 2 -1. - <_>10 7 2 2 2. - 0 - 2.6400710339657962e-004 - -0.1653952002525330 - 0.0732702314853668 - <_> - - <_> - - - - <_>4 1 2 4 -1. - <_>4 1 1 2 2. - <_>5 3 1 2 2. - 0 - 7.9839164391160011e-003 - -0.0335273407399654 - 0.3653585910797119 - <_> - - <_> - - - - <_>4 0 2 8 -1. - <_>4 0 1 4 2. - <_>5 4 1 4 2. - 0 - -0.0142674101516604 - 0.4673924148082733 - -0.0271544195711613 - <_> - - <_> - - - - <_>6 3 2 1 -1. - <_>7 3 1 1 2. - 0 - -9.4726070528849959e-005 - -0.1501774936914444 - 0.0876573026180267 - <_> - - <_> - - - - <_>14 12 1 3 -1. - <_>14 13 1 1 3. - 0 - -2.9629279742948711e-004 - -0.1619454026222229 - 0.0738632306456566 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 2.3301010951399803e-003 - -0.0799251571297646 - 0.1577855050563812 - <_> - - <_> - - - - <_>5 11 2 2 -1. - <_>5 12 2 1 2. - 0 - 3.6623800406232476e-004 - -0.0870193466544151 - 0.2049566954374313 - <_> - - <_> - - - - <_>5 1 4 15 -1. - <_>5 6 4 5 3. - 0 - -0.0444996692240238 - -0.2989141047000885 - 0.0456480011343956 - <_> - - <_> - - - - <_>11 5 4 14 -1. - <_>11 5 2 7 2. - <_>13 12 2 7 2. - 0 - -6.0768700204789639e-003 - 0.2374615073204041 - -0.0535807088017464 - <_> - - <_> - - - - <_>9 18 3 1 -1. - <_>10 18 1 1 3. - 0 - 6.6064862767234445e-004 - 0.0592214390635490 - -0.2356991022825241 - <_> - - <_> - - - - <_>4 10 5 6 -1. - <_>4 12 5 2 3. - 0 - 7.4699260294437408e-003 - 0.0513040497899055 - -0.2338664978742600 - <_> - - <_> - - - - <_>5 13 3 3 -1. - <_>5 14 3 1 3. - 0 - -6.7128022201359272e-003 - 0.2706164121627808 - -0.0500311218202114 - <_> - - <_> - - - - <_>8 1 3 5 -1. - <_>9 1 1 5 3. - 0 - 4.6589970588684082e-003 - 0.0449322015047073 - -0.3073048889636993 - <_> - - <_> - - - - <_>4 7 3 2 -1. - <_>5 7 1 2 3. - 0 - 4.9815201200544834e-003 - -0.0482554100453854 - 0.2685301005840302 - <_> - - <_> - - - - <_>6 14 3 3 -1. - <_>7 14 1 3 3. - 0 - 9.9244136363267899e-003 - 0.0194467697292566 - -0.7035238742828369 - <_> - - <_> - - - - <_>7 13 2 3 -1. - <_>7 14 2 1 3. - 0 - 6.1988402158021927e-003 - -0.0351072698831558 - 0.3546040058135986 - <_> - - <_> - - - - <_>4 3 2 9 -1. - <_>4 6 2 3 3. - 0 - 8.8433362543582916e-003 - 0.0453283898532391 - -0.2748593091964722 - <_> - - <_> - - - - <_>4 8 3 2 -1. - <_>4 9 3 1 2. - 0 - 0.0111105600371957 - 0.0223914198577404 - -0.5017204284667969 - <_> - - <_> - - - - <_>10 10 2 2 -1. - <_>10 11 2 1 2. - 0 - -6.9408811395987868e-004 - 0.1707949042320252 - -0.0638494268059731 - <_> - - <_> - - - - <_>7 8 12 6 -1. - <_>7 8 6 3 2. - <_>13 11 6 3 2. - 0 - 8.0377031117677689e-003 - 0.0889374613761902 - -0.1641612946987152 - <_> - - <_> - - - - <_>14 10 3 2 -1. - <_>14 11 3 1 2. - 0 - 1.4750069567526225e-005 - -0.1371303051710129 - 0.0969811230897903 - <_> - - <_> - - - - <_>5 16 6 2 -1. - <_>5 17 6 1 2. - 0 - 1.2381490087136626e-003 - -0.0694912225008011 - 0.1655137985944748 - <_> - - <_> - - - - <_>8 15 4 3 -1. - <_>8 16 4 1 3. - 0 - 2.6584148872643709e-004 - -0.0968036130070686 - 0.1202037036418915 - <_> - - <_> - - - - <_>14 9 2 2 -1. - <_>14 10 2 1 2. - 0 - -5.4076651576906443e-004 - -0.2318537980318070 - 0.0489878505468369 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - -5.1092808134853840e-003 - 0.3039175868034363 - -0.0408004708588123 - <_> - - <_> - - - - <_>8 5 3 3 -1. - <_>8 6 3 1 3. - 0 - 1.5575919533148408e-003 - -0.1015098020434380 - 0.1446592956781387 - <_> - - <_> - - - - <_>1 7 17 9 -1. - <_>1 10 17 3 3. - 0 - 0.0283960197120905 - 0.1509854048490524 - -0.0883143097162247 - <_> - - <_> - - - - <_>5 10 6 8 -1. - <_>5 14 6 4 2. - 0 - 1.5096530551090837e-003 - 0.0515897385776043 - -0.2619952857494354 - <_> - - <_> - - - - <_>18 1 2 2 -1. - <_>18 1 1 1 2. - <_>19 2 1 1 2. - 0 - 1.4308419777080417e-003 - -0.0454978495836258 - 0.2758454084396362 - <_> - - <_> - - - - <_>0 0 11 6 -1. - <_>0 3 11 3 2. - 0 - 0.1303036957979202 - 0.0203299894928932 - -0.5749182105064392 - <_> - - <_> - - - - <_>3 0 16 3 -1. - <_>3 1 16 1 3. - 0 - -3.3548770006746054e-003 - 0.1228995025157929 - -0.0899374112486839 - <_> - - <_> - - - - <_>10 10 10 3 -1. - <_>10 11 10 1 3. - 0 - 0.0270948391407728 - 0.0143423900008202 - -0.7895252108573914 - <_> - - <_> - - - - <_>0 0 15 18 -1. - <_>0 9 15 9 2. - 0 - -0.3621011078357697 - -0.6256042718887329 - 0.0140213295817375 - <_> - - <_> - - - - <_>15 11 2 2 -1. - <_>15 11 1 1 2. - <_>16 12 1 1 2. - 0 - -6.6879601217806339e-004 - 0.2196612954139710 - -0.0524151995778084 - <_> - - <_> - - - - <_>14 12 6 3 -1. - <_>17 12 3 3 2. - 0 - -0.0373892411589623 - -0.4731368124485016 - 0.0257044993340969 - <_> - - <_> - - - - <_>8 4 3 4 -1. - <_>9 4 1 4 3. - 0 - -7.4386061169207096e-003 - -0.5291485786437988 - 0.0200388804078102 - <_> - - <_> - - - - <_>8 6 12 4 -1. - <_>12 6 4 4 3. - 0 - 0.1044311970472336 - -0.0229094605892897 - 0.5159202814102173 - <_> - - <_> - - - - <_>9 12 2 2 -1. - <_>9 13 2 1 2. - 0 - -6.1161867051851004e-005 - 0.0770166069269180 - -0.1462540030479431 - <_> - - <_> - - - - <_>6 3 1 2 -1. - <_>6 4 1 1 2. - 0 - 6.5830379026010633e-004 - 0.0700152814388275 - -0.1556992977857590 - <_> - - <_> - - - - <_>4 7 2 8 -1. - <_>4 7 1 4 2. - <_>5 11 1 4 2. - 0 - 9.7367232665419579e-003 - -0.0315822400152683 - 0.3275456130504608 - <_> - - <_> - - - - <_>9 17 3 2 -1. - <_>10 17 1 2 3. - 0 - -2.9574360232800245e-003 - -0.3424771130084992 - 0.0321847200393677 - <_> - - <_> - - - - <_>9 6 1 3 -1. - <_>9 7 1 1 3. - 0 - 1.6319820424541831e-003 - -0.0494004786014557 - 0.2265644073486328 - <_> - - <_> - - - - <_>6 4 1 6 -1. - <_>6 7 1 3 2. - 0 - 0.0138449398800731 - 0.0204766597598791 - -0.5460066795349121 - <_> - - <_> - - - - <_>5 6 13 6 -1. - <_>5 8 13 2 3. - 0 - 0.0315802991390228 - -0.0424220487475395 - 0.2909148037433624 - <_> - - <_> - - - - <_>6 7 4 12 -1. - <_>8 7 2 12 2. - 0 - 8.6624026298522949e-003 - 0.0544328987598419 - -0.2189218997955322 - <_> - - <_> - - - - <_>6 12 2 4 -1. - <_>7 12 1 4 2. - 0 - -4.6714721247553825e-004 - -0.1820573061704636 - 0.0714919120073318 - <_> - - <_> - - - - <_>5 14 4 3 -1. - <_>5 15 4 1 3. - 0 - 4.1834521107375622e-003 - -0.0674912035465240 - 0.1728577017784119 - <_> - - <_> - - - - <_>10 5 3 1 -1. - <_>11 5 1 1 3. - 0 - -5.3335628472268581e-003 - -0.8468174934387207 - 0.0138048296794295 - <_> - - <_> - - - - <_>4 15 4 3 -1. - <_>4 16 4 1 3. - 0 - 7.8782793134450912e-003 - -0.0481667183339596 - 0.2424273043870926 - <_> - - <_> - - - - <_>11 12 3 2 -1. - <_>12 12 1 2 3. - 0 - 3.8775329012423754e-003 - 0.0243111494928598 - -0.4976325929164887 - <_> - - <_> - - - - <_>11 10 8 2 -1. - <_>15 10 4 2 2. - 0 - -1.6564880206715316e-004 - 0.0555463805794716 - -0.1955423057079315 - <_> - - <_> - - - - <_>14 18 6 2 -1. - <_>17 18 3 2 2. - 0 - 0.0189934000372887 - -0.0364790894091129 - 0.2847271859645844 - <_> - - <_> - - - - <_>7 5 3 2 -1. - <_>8 5 1 2 3. - 0 - -3.4308759495615959e-003 - -0.3281300067901611 - 0.0365241989493370 - <_> - - <_> - - - - <_>11 8 2 1 -1. - <_>12 8 1 1 2. - 0 - 1.4614370229537599e-005 - -0.1010643988847733 - 0.1062249019742012 - <_> - - <_> - - - - <_>12 6 3 6 -1. - <_>12 8 3 2 3. - 0 - 0.0159789193421602 - 0.0300593990832567 - -0.3931018114089966 - <_> - - <_> - - - - <_>11 9 1 2 -1. - <_>11 10 1 1 2. - 0 - -2.2245719446800649e-004 - 0.1858648955821991 - -0.0721516534686089 - <_> - - <_> - - - - <_>12 9 3 9 -1. - <_>13 9 1 9 3. - 0 - 0.0206159092485905 - 0.0152509901672602 - -0.7839120030403137 - <_> - - <_> - - - - <_>0 8 1 3 -1. - <_>0 9 1 1 3. - 0 - 2.8645060956478119e-004 - 0.0687455981969833 - -0.1530831009149551 - <_> - - <_> - - - - <_>0 8 1 3 -1. - <_>0 9 1 1 3. - 0 - -5.9233439969830215e-005 - -0.1254501938819885 - 0.0984484925866127 - <_> - - <_> - - - - <_>3 8 2 2 -1. - <_>3 8 1 1 2. - <_>4 9 1 1 2. - 0 - -7.6257862383499742e-004 - 0.2154624015092850 - -0.0537602193653584 - <_> - - <_> - - - - <_>4 6 2 6 -1. - <_>4 9 2 3 2. - 0 - -1.4181639999151230e-003 - -0.1987688988447189 - 0.0519821383059025 - <_> - - <_> - - - - <_>4 9 2 9 -1. - <_>4 12 2 3 3. - 0 - -0.0447168685495853 - -0.7550839781761169 - 0.0129064498469234 - <_> - - <_> - - - - <_>7 13 2 2 -1. - <_>7 13 1 1 2. - <_>8 14 1 1 2. - 0 - -1.3735699467360973e-003 - 0.2200313955545425 - -0.0513946898281574 - <_> - - <_> - - - - <_>3 6 10 6 -1. - <_>3 6 5 3 2. - <_>8 9 5 3 2. - 0 - -0.0153527799993753 - -0.2142284959554672 - 0.0537811703979969 - <_> - - <_> - - - - <_>9 9 4 6 -1. - <_>11 9 2 6 2. - 0 - 0.0138174397870898 - -0.0351581200957298 - 0.2939909100532532 - <_> - - <_> - - - - <_>2 12 14 3 -1. - <_>9 12 7 3 2. - 0 - 0.0879816263914108 - 0.0166887491941452 - -0.7205359935760498 - <_> - - <_> - - - - <_>0 0 11 18 -1. - <_>0 9 11 9 2. - 0 - 0.4048612117767334 - 9.4695771113038063e-003 - -0.8272560834884644 - <_> - - <_> - - - - <_>4 18 4 2 -1. - <_>4 18 2 1 2. - <_>6 19 2 1 2. - 0 - 1.9231239566579461e-003 - -0.0580163188278675 - 0.1769602000713348 - <_> - - <_> - - - - <_>7 13 4 6 -1. - <_>7 13 2 3 2. - <_>9 16 2 3 2. - 0 - -4.0756969247013330e-004 - 0.0876009464263916 - -0.1263372004032135 - <_> - - <_> - - - - <_>8 17 3 1 -1. - <_>9 17 1 1 3. - 0 - -2.3862780071794987e-003 - -0.4008556902408600 - 0.0271830298006535 - <_> - - <_> - - - - <_>5 14 8 6 -1. - <_>5 14 4 3 2. - <_>9 17 4 3 2. - 0 - 0.0562350898981094 - -0.0175413191318512 - 0.7381873726844788 - <_> - - <_> - - - - <_>7 12 2 3 -1. - <_>7 13 2 1 3. - 0 - 4.9810402560979128e-004 - -0.0764870718121529 - 0.1269799023866653 - <_> - - <_> - - - - <_>14 4 4 2 -1. - <_>14 4 2 1 2. - <_>16 5 2 1 2. - 0 - 5.3285917965695262e-004 - 0.0595963001251221 - -0.1760033965110779 - <_> - - <_> - - - - <_>7 13 2 3 -1. - <_>7 14 2 1 3. - 0 - 5.9949647402390838e-004 - -0.0825090631842613 - 0.1300280988216400 - <_> - - <_> - - - - <_>7 14 4 2 -1. - <_>7 14 2 1 2. - <_>9 15 2 1 2. - 0 - -2.0725550712086260e-004 - 0.0933742225170136 - -0.1172676980495453 - <_> - - <_> - - - - <_>10 14 2 6 -1. - <_>10 16 2 2 3. - 0 - 8.1314949784427881e-004 - -0.0800631269812584 - 0.1470173001289368 - <_> - - <_> - - - - <_>9 6 9 1 -1. - <_>12 6 3 1 3. - 0 - -3.4973450237885118e-004 - 0.1105792969465256 - -0.1088170036673546 - <_> - - <_> - - - - <_>2 5 18 7 -1. - <_>11 5 9 7 2. - 0 - -0.2144889980554581 - -0.3170115947723389 - 0.0417115315794945 - <_> - - <_> - - - - <_>18 6 1 2 -1. - <_>18 7 1 1 2. - 0 - 5.9010740369558334e-004 - 0.0462803281843662 - -0.2351225018501282 - <_> - - <_> - - - - <_>4 14 14 6 -1. - <_>4 17 14 3 2. - 0 - -0.1209399998188019 - -0.6895709037780762 - 0.0149820400401950 - <_> - - <_> - - - - <_>8 0 6 20 -1. - <_>10 0 2 20 3. - 0 - 0.1018135026097298 - 0.0112981395795941 - -0.7119964957237244 - <_> - - <_> - - - - <_>12 0 8 18 -1. - <_>12 9 8 9 2. - 0 - 0.3520832955837250 - 0.0129445102065802 - -0.6757240891456604 - <_> - - <_> - - - - <_>12 5 2 1 -1. - <_>13 5 1 1 2. - 0 - -1.4602140254282858e-005 - 0.0695503130555153 - -0.1428806036710739 - <_> - - <_> - - - - <_>0 6 6 13 -1. - <_>3 6 3 13 2. - 0 - -0.2321286052465439 - -0.7528740167617798 - 0.0113943303003907 - <_> - - <_> - - - - <_>3 15 3 4 -1. - <_>4 15 1 4 3. - 0 - -1.4764709630981088e-003 - 0.1354779005050659 - -0.0854709073901176 - <_> - - <_> - - - - <_>3 13 3 6 -1. - <_>4 13 1 6 3. - 0 - 9.9324379116296768e-003 - -0.0487588010728359 - 0.2458269000053406 - <_> - - <_> - - - - <_>3 11 9 2 -1. - <_>6 11 3 2 3. - 0 - -0.0268572904169559 - -0.4397571086883545 - 0.0250822398811579 - <_> - - <_> - - - - <_>0 11 6 8 -1. - <_>3 11 3 8 2. - 0 - -7.3618912138044834e-003 - 0.1238470003008843 - -0.0972262099385262 - <_> - - <_> - - - - <_>16 0 3 7 -1. - <_>17 0 1 7 3. - 0 - -0.0197857301682234 - -0.5093231797218323 - 0.0234819799661636 - <_> - - <_> - - - - <_>16 1 2 6 -1. - <_>16 1 1 3 2. - <_>17 4 1 3 2. - 0 - -1.4635100342275109e-005 - 0.0940439179539680 - -0.1214566975831986 - <_> - - <_> - - - - <_>3 7 6 10 -1. - <_>3 7 3 5 2. - <_>6 12 3 5 2. - 0 - -0.0540670305490494 - -0.5458620786666870 - 0.0195001401007175 - <_> - - <_> - - - - <_>2 0 6 7 -1. - <_>5 0 3 7 2. - 0 - 0.0115321697667241 - -0.0764091536402702 - 0.1376397013664246 - <_> - - <_> - - - - <_>1 2 12 2 -1. - <_>5 2 4 2 3. - 0 - -4.4358540326356888e-003 - 0.1235975995659828 - -0.0917192995548248 - <_> - - <_> - - - - <_>6 4 1 2 -1. - <_>6 5 1 1 2. - 0 - 8.3216017810627818e-004 - 0.0636590719223022 - -0.2044076025485992 - <_> - - <_> - - - - <_>0 14 8 6 -1. - <_>4 14 4 6 2. - 0 - -0.1250396966934204 - -0.4152475893497467 - 0.0271991007030010 - <_> - - <_> - - - - <_>3 11 9 3 -1. - <_>6 11 3 3 3. - 0 - 0.0496183186769485 - 0.0159551091492176 - -0.6166685223579407 - <_> - - <_> - - - - <_>4 14 2 2 -1. - <_>4 14 1 1 2. - <_>5 15 1 1 2. - 0 - -3.0613599810749292e-003 - 0.3666220903396606 - -0.0334494486451149 - <_> - - <_> - - - - <_>11 2 3 2 -1. - <_>12 2 1 2 3. - 0 - 3.5273379180580378e-003 - 0.0317579805850983 - -0.3847880959510803 - <_> - - <_> - - - - <_>18 5 2 6 -1. - <_>18 5 1 3 2. - <_>19 8 1 3 2. - 0 - -6.6726570948958397e-003 - 0.3209584057331085 - -0.0344086810946465 - <_> - - <_> - - - - <_>0 5 1 2 -1. - <_>0 6 1 1 2. - 0 - -2.5795500259846449e-003 - -0.3787052929401398 - 0.0285621304064989 - <_> - - <_> - - - - <_>8 4 6 1 -1. - <_>11 4 3 1 2. - 0 - 7.8417789191007614e-003 - -0.0204797703772783 - 0.5170410871505737 - <_> - - <_> - - - - <_>4 5 2 3 -1. - <_>5 5 1 3 2. - 0 - 3.1101319473236799e-004 - -0.1080913990736008 - 0.0972045212984085 - <_> - - <_> - - - - <_>1 3 6 4 -1. - <_>3 3 2 4 3. - 0 - 2.6113479398190975e-003 - -0.0817704275250435 - 0.1469120979309082 - <_> - - <_> - - - - <_>12 5 6 1 -1. - <_>14 5 2 1 3. - 0 - 7.3472261428833008e-003 - 0.0251312591135502 - -0.4302506148815155 - <_> - - <_> - - - - <_>6 9 3 3 -1. - <_>6 10 3 1 3. - 0 - 1.3528259296435863e-004 - -0.1475106030702591 - 0.0675846785306931 - <_> - - <_> - - - - <_>4 3 2 2 -1. - <_>4 4 2 1 2. - 0 - -5.1026898290729150e-005 - -0.1216135993599892 - 0.0843330472707748 - <_> - - <_> - - - - <_>8 7 3 3 -1. - <_>8 8 3 1 3. - 0 - 1.1552199721336365e-003 - -0.0546638295054436 - 0.1977366060018539 - <_> - - <_> - - - - <_>5 5 10 14 -1. - <_>5 5 5 7 2. - <_>10 12 5 7 2. - 0 - -0.0829317122697830 - -0.5192332863807678 - 0.0205823592841625 - <_> - - <_> - - - - <_>16 5 2 6 -1. - <_>16 7 2 2 3. - 0 - -4.6260739327408373e-004 - 0.0855882689356804 - -0.1172529980540276 - <_> - - <_> - - - - <_>19 5 1 3 -1. - <_>19 6 1 1 3. - 0 - 6.7906372714787722e-004 - 0.0459801182150841 - -0.2262842059135437 - <_> - - <_> - - - - <_>3 6 2 2 -1. - <_>3 6 1 1 2. - <_>4 7 1 1 2. - 0 - 1.4090019976720214e-003 - -0.0476289205253124 - 0.2272271960973740 - <_> - - <_> - - - - <_>0 1 10 10 -1. - <_>5 1 5 10 2. - 0 - 0.2895491123199463 - 0.0167012400925159 - -0.6396701931953430 - <_> - - <_> - - - - <_>3 0 8 1 -1. - <_>7 0 4 1 2. - 0 - 0.0193761307746172 - -0.0225694105029106 - 0.5059049725532532 - <_> - - <_> - - - - <_>14 5 6 1 -1. - <_>16 5 2 1 3. - 0 - 4.2641081381589174e-004 - 0.0660417228937149 - -0.1666630059480667 - <_> - - <_> - - - - <_>6 16 1 3 -1. - <_>6 17 1 1 3. - 0 - 1.7502580303698778e-003 - -0.0580779090523720 - 0.1951259970664978 - <_> - - <_> - - - - <_>6 14 2 4 -1. - <_>6 14 1 2 2. - <_>7 16 1 2 2. - 0 - -3.2605750020593405e-003 - -0.2910188138484955 - 0.0383287183940411 - <_> - - <_> - - - - <_>0 7 2 5 -1. - <_>1 7 1 5 2. - 0 - 1.9519040361046791e-003 - 0.0595659688115120 - -0.1691060066223145 - <_> - - <_> - - - - <_>18 0 2 8 -1. - <_>18 0 1 4 2. - <_>19 4 1 4 2. - 0 - -3.2053990289568901e-003 - 0.1992776989936829 - -0.0560532584786415 - <_> - - <_> - - - - <_>5 8 6 2 -1. - <_>8 8 3 2 2. - 0 - 1.7617279663681984e-003 - 0.0506975315511227 - -0.2127664983272553 - <_> - - <_> - - - - <_>4 8 8 3 -1. - <_>8 8 4 3 2. - 0 - -6.0043102130293846e-003 - -0.1369926929473877 - 0.0822752788662910 - <_> - - <_> - - - - <_>8 0 2 2 -1. - <_>8 1 2 1 2. - 0 - 2.4830829352140427e-003 - -0.0515616610646248 - 0.2168422043323517 - <_> - - <_> - - - - <_>13 8 6 11 -1. - <_>15 8 2 11 3. - 0 - -0.1082193031907082 - -0.7837529182434082 - 0.0144336502999067 - <_> - - <_> - - - - <_>11 15 9 5 -1. - <_>14 15 3 5 3. - 0 - -7.5229378417134285e-003 - 0.1345372945070267 - -0.0905826985836029 - <_> - - <_> - - - - <_>5 4 12 15 -1. - <_>9 4 4 15 3. - 0 - 0.0307509899139404 - 0.1108169034123421 - -0.0994755998253822 - <_> - - <_> - - - - <_>16 12 2 8 -1. - <_>16 12 1 4 2. - <_>17 16 1 4 2. - 0 - -2.8948320541530848e-003 - 0.1900573968887329 - -0.0526392608880997 - <_> - - <_> - - - - <_>7 13 10 6 -1. - <_>7 16 10 3 2. - 0 - 2.7011099737137556e-003 - 0.0585735589265823 - -0.1985194981098175 - <_> - - <_> - - - - <_>6 15 3 4 -1. - <_>6 17 3 2 2. - 0 - 1.2562989722937346e-003 - -0.0735653117299080 - 0.1543684005737305 - -1.3943890333175659 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>9 5 8 2 -1. - <_>13 5 4 2 2. - 0 - -0.0214605797082186 - 0.3250505030155182 - -0.2089038044214249 - <_> - - <_> - - - - <_>5 6 3 4 -1. - <_>6 6 1 4 3. - 0 - 7.6785432174801826e-003 - -0.1323131024837494 - 0.3052583932876587 - <_> - - <_> - - - - <_>10 8 7 6 -1. - <_>10 10 7 2 3. - 0 - 3.4118059556931257e-003 - -0.3079307973384857 - 0.1101097986102104 - <_> - - <_> - - - - <_>12 13 1 4 -1. - <_>12 15 1 2 2. - 0 - -1.4710490177094471e-005 - 0.0958588570356369 - -0.2964186072349548 - <_> - - <_> - - - - <_>2 10 3 4 -1. - <_>3 10 1 4 3. - 0 - 0.0105380499735475 - -0.0792525410652161 - 0.3723484873771668 - <_> - - <_> - - - - <_>8 7 6 6 -1. - <_>8 7 3 3 2. - <_>11 10 3 3 2. - 0 - -2.5260078837163746e-004 - 0.0671211108565331 - -0.3078433871269226 - <_> - - <_> - - - - <_>2 0 15 2 -1. - <_>7 0 5 2 3. - 0 - -3.5665810573846102e-003 - 0.1466760933399200 - -0.1708378940820694 - <_> - - <_> - - - - <_>13 10 1 3 -1. - <_>13 11 1 1 3. - 0 - -1.2677359627559781e-003 - -0.4906372129917145 - 0.0203741192817688 - <_> - - <_> - - - - <_>2 9 3 4 -1. - <_>3 9 1 4 3. - 0 - -6.7669381387531757e-003 - 0.2576732933521271 - -0.0741759017109871 - <_> - - <_> - - - - <_>6 4 3 2 -1. - <_>6 5 3 1 2. - 0 - -6.0447258874773979e-004 - -0.1919641047716141 - 0.0913498476147652 - <_> - - <_> - - - - <_>10 16 2 3 -1. - <_>11 16 1 3 2. - 0 - -2.5375590194016695e-003 - -0.3566387891769409 - 0.0515472516417503 - <_> - - <_> - - - - <_>7 13 2 3 -1. - <_>7 14 2 1 3. - 0 - -7.0200557820498943e-003 - 0.3971908092498779 - -0.0439679883420467 - <_> - - <_> - - - - <_>6 12 2 4 -1. - <_>6 12 1 2 2. - <_>7 14 1 2 2. - 0 - -5.7049379684031010e-003 - -0.5001549124717712 - 0.0298259295523167 - <_> - - <_> - - - - <_>9 1 6 1 -1. - <_>12 1 3 1 2. - 0 - 1.4744909713044763e-003 - 0.0585462115705013 - -0.2613981068134308 - <_> - - <_> - - - - <_>6 6 3 4 -1. - <_>7 6 1 4 3. - 0 - 9.2834811657667160e-003 - -0.0428367592394352 - 0.3344317078590393 - <_> - - <_> - - - - <_>9 8 3 3 -1. - <_>9 9 3 1 3. - 0 - 9.9660153500735760e-004 - -0.1042511016130447 - 0.1619178056716919 - <_> - - <_> - - - - <_>8 7 12 3 -1. - <_>14 7 6 3 2. - 0 - -0.0759327337145805 - -0.3735632002353668 - 0.0430756881833076 - <_> - - <_> - - - - <_>12 10 4 2 -1. - <_>12 10 2 1 2. - <_>14 11 2 1 2. - 0 - 5.5370710470015183e-005 - -0.1457054018974304 - 0.1156015023589134 - <_> - - <_> - - - - <_>16 11 1 2 -1. - <_>16 12 1 1 2. - 0 - 1.4746849956281949e-005 - -0.1297267973423004 - 0.1174774020910263 - <_> - - <_> - - - - <_>6 2 1 2 -1. - <_>6 3 1 1 2. - 0 - -1.4875919441692531e-004 - -0.1800293028354645 - 0.0787826925516129 - <_> - - <_> - - - - <_>5 10 2 3 -1. - <_>5 11 2 1 3. - 0 - 3.3751460723578930e-003 - -0.0772420093417168 - 0.1859685927629471 - <_> - - <_> - - - - <_>5 9 2 3 -1. - <_>5 10 2 1 3. - 0 - 3.4271259210072458e-004 - -0.1539334058761597 - 0.1047258004546166 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - -4.5711229904554784e-004 - -0.2230052947998047 - 0.0618186704814434 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - 3.2788628595881164e-004 - 0.0794487074017525 - -0.1888982951641083 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>12 0 4 1 2. - <_>16 1 4 1 2. - 0 - -9.6754019614309072e-004 - 0.1313713043928146 - -0.1080107018351555 - <_> - - <_> - - - - <_>10 11 3 8 -1. - <_>11 11 1 8 3. - 0 - 0.0105370096862316 - 0.0221382696181536 - -0.5747975111007690 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 5.6796409189701080e-003 - -0.0560345798730850 - 0.2484958022832871 - <_> - - <_> - - - - <_>5 10 1 6 -1. - <_>5 13 1 3 2. - 0 - -8.8083967566490173e-003 - -0.3716768026351929 - 0.0427269488573074 - <_> - - <_> - - - - <_>6 2 6 6 -1. - <_>6 2 3 3 2. - <_>9 5 3 3 2. - 0 - -0.0283197108656168 - -0.6238784790039063 - 0.0208440497517586 - <_> - - <_> - - - - <_>11 4 1 6 -1. - <_>11 6 1 2 3. - 0 - 0.0136378603056073 - 0.0144342398270965 - -0.7153713703155518 - <_> - - <_> - - - - <_>18 3 2 16 -1. - <_>18 3 1 8 2. - <_>19 11 1 8 2. - 0 - 0.0118227703496814 - -0.0431810915470123 - 0.3068254888057709 - <_> - - <_> - - - - <_>10 12 3 2 -1. - <_>11 12 1 2 3. - 0 - -6.1035697581246495e-004 - -0.2041833996772766 - 0.0621156208217144 - <_> - - <_> - - - - <_>7 14 2 3 -1. - <_>7 15 2 1 3. - 0 - -5.6125568225979805e-003 - 0.3648501038551331 - -0.0354489609599113 - <_> - - <_> - - - - <_>16 12 2 1 -1. - <_>17 12 1 1 2. - 0 - 1.4603640011046082e-005 - -0.0960969105362892 - 0.1214229017496109 - <_> - - <_> - - - - <_>15 6 4 2 -1. - <_>15 7 4 1 2. - 0 - 1.9061230123043060e-003 - 0.0531358681619167 - -0.2297890931367874 - <_> - - <_> - - - - <_>4 6 2 3 -1. - <_>4 7 2 1 3. - 0 - -3.6644220817834139e-003 - 0.1961452960968018 - -0.0685569122433662 - <_> - - <_> - - - - <_>8 19 6 1 -1. - <_>11 19 3 1 2. - 0 - 1.2336249928921461e-003 - -0.0870003476738930 - 0.1392022967338562 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - 5.4660569876432419e-003 - 0.0226608905941248 - -0.4832952916622162 - <_> - - <_> - - - - <_>10 12 1 3 -1. - <_>10 13 1 1 3. - 0 - -6.1730947345495224e-004 - -0.2195954024791718 - 0.0552585199475288 - <_> - - <_> - - - - <_>8 6 2 3 -1. - <_>8 7 2 1 3. - 0 - 2.9604700393974781e-003 - -0.0505482293665409 - 0.2747671008110046 - <_> - - <_> - - - - <_>5 7 6 5 -1. - <_>8 7 3 5 2. - 0 - 0.0280150007456541 - 0.0188746508210897 - -0.6049836874008179 - <_> - - <_> - - - - <_>14 10 1 2 -1. - <_>14 11 1 1 2. - 0 - -7.1651988946541678e-006 - 0.1083621978759766 - -0.1060696989297867 - <_> - - <_> - - - - <_>11 7 6 3 -1. - <_>13 7 2 3 3. - 0 - -0.0163671504706144 - 0.2864503860473633 - -0.0371376909315586 - <_> - - <_> - - - - <_>14 6 6 1 -1. - <_>16 6 2 1 3. - 0 - 1.0280719725415111e-003 - 0.0563181415200233 - -0.2179502993822098 - <_> - - <_> - - - - <_>9 7 1 3 -1. - <_>9 8 1 1 3. - 0 - 1.3662660494446754e-003 - -0.0468035005033016 - 0.2380400002002716 - <_> - - <_> - - - - <_>9 5 2 8 -1. - <_>9 5 1 4 2. - <_>10 9 1 4 2. - 0 - 7.6626739464700222e-003 - 0.0215952601283789 - -0.5684748888015747 - <_> - - <_> - - - - <_>6 12 1 4 -1. - <_>6 14 1 2 2. - 0 - -4.5117521658539772e-003 - -0.3579497933387756 - 0.0304854903370142 - <_> - - <_> - - - - <_>5 13 4 2 -1. - <_>5 14 4 1 2. - 0 - -4.3773967772722244e-003 - 0.2319266051054001 - -0.0539998188614845 - <_> - - <_> - - - - <_>12 9 2 4 -1. - <_>12 11 2 2 2. - 0 - -7.2474628686904907e-003 - -0.4344038069248200 - 0.0263741891831160 - <_> - - <_> - - - - <_>12 7 3 6 -1. - <_>13 7 1 6 3. - 0 - 7.9146260395646095e-004 - -0.0999245867133141 - 0.1108850017189980 - <_> - - <_> - - - - <_>5 0 2 14 -1. - <_>5 7 2 7 2. - 0 - 0.0641668066382408 - 0.0189386699348688 - -0.5784941911697388 - <_> - - <_> - - - - <_>9 3 1 2 -1. - <_>9 4 1 1 2. - 0 - -1.1797840124927461e-004 - -0.1488956958055496 - 0.0687772035598755 - <_> - - <_> - - - - <_>6 1 14 12 -1. - <_>6 5 14 4 3. - 0 - 0.0128012895584106 - 0.0561793297529221 - -0.2086596935987473 - <_> - - <_> - - - - <_>13 6 7 6 -1. - <_>13 9 7 3 2. - 0 - -0.0270187407732010 - 0.4535689055919647 - -0.0250545796006918 - <_> - - <_> - - - - <_>14 9 3 3 -1. - <_>14 10 3 1 3. - 0 - -6.9431727752089500e-003 - -0.5291655063629150 - 0.0218001399189234 - <_> - - <_> - - - - <_>17 12 3 1 -1. - <_>18 12 1 1 3. - 0 - 3.3396780490875244e-003 - -0.0372959598898888 - 0.3119843900203705 - <_> - - <_> - - - - <_>8 2 3 2 -1. - <_>9 2 1 2 3. - 0 - -3.8888349081389606e-004 - -0.1563013046979904 - 0.0709818303585052 - <_> - - <_> - - - - <_>7 11 2 1 -1. - <_>8 11 1 1 2. - 0 - -7.1400677552446723e-004 - 0.2179943025112152 - -0.0540692806243896 - <_> - - <_> - - - - <_>5 7 3 2 -1. - <_>5 8 3 1 2. - 0 - 0.0125496303662658 - 0.0173571798950434 - -0.7832044959068298 - <_> - - <_> - - - - <_>11 11 2 1 -1. - <_>12 11 1 1 2. - 0 - -1.4623020433646161e-005 - 0.0786401033401489 - -0.1421297043561935 - <_> - - <_> - - - - <_>11 11 3 1 -1. - <_>12 11 1 1 3. - 0 - -1.2133170384913683e-003 - -0.3137122988700867 - 0.0342876389622688 - <_> - - <_> - - - - <_>9 5 1 3 -1. - <_>9 6 1 1 3. - 0 - 3.6882720887660980e-003 - -0.0383823812007904 - 0.3012467920780182 - <_> - - <_> - - - - <_>12 9 1 2 -1. - <_>12 10 1 1 2. - 0 - -1.4818239833402913e-005 - 0.1256116926670075 - -0.0917033776640892 - <_> - - <_> - - - - <_>12 7 2 3 -1. - <_>13 7 1 3 2. - 0 - 3.0302109662443399e-003 - -0.0295430701225996 - 0.3788954019546509 - <_> - - <_> - - - - <_>5 11 6 3 -1. - <_>8 11 3 3 2. - 0 - 5.9340851294109598e-005 - -0.1774571985006332 - 0.0701024308800697 - <_> - - <_> - - - - <_>6 10 2 2 -1. - <_>6 10 1 1 2. - <_>7 11 1 1 2. - 0 - -2.9449560315697454e-005 - 0.1205231994390488 - -0.1112897992134094 - <_> - - <_> - - - - <_>17 2 1 9 -1. - <_>17 5 1 3 3. - 0 - -0.0177711397409439 - -0.4710831046104431 - 0.0256007891148329 - <_> - - <_> - - - - <_>4 7 2 6 -1. - <_>4 7 1 3 2. - <_>5 10 1 3 2. - 0 - 7.6775359921157360e-003 - -0.0407578796148300 - 0.2702176868915558 - <_> - - <_> - - - - <_>0 1 11 18 -1. - <_>0 10 11 9 2. - 0 - -0.1851301938295364 - -0.3023875057697296 - 0.0387909114360809 - <_> - - <_> - - - - <_>7 6 2 8 -1. - <_>7 10 2 4 2. - 0 - 0.0276971906423569 - 0.0267128106206656 - -0.4416660070419312 - <_> - - <_> - - - - <_>6 2 4 6 -1. - <_>6 5 4 3 2. - 0 - -0.0204276498407125 - 0.2508660852909088 - -0.0556727014482021 - <_> - - <_> - - - - <_>2 12 12 4 -1. - <_>2 14 12 2 2. - 0 - 9.0200370177626610e-003 - 0.0473440699279308 - -0.2744598090648651 - <_> - - <_> - - - - <_>9 0 6 1 -1. - <_>12 0 3 1 2. - 0 - -1.2504979968070984e-003 - -0.1497119069099426 - 0.0796676501631737 - <_> - - <_> - - - - <_>5 0 12 2 -1. - <_>5 1 12 1 2. - 0 - -0.0100211603567004 - 0.2424885928630829 - -0.0492179095745087 - <_> - - <_> - - - - <_>10 0 2 1 -1. - <_>11 0 1 1 2. - 0 - 2.6042328681796789e-004 - 0.0631924271583557 - -0.1854428052902222 - <_> - - <_> - - - - <_>7 14 3 3 -1. - <_>7 15 3 1 3. - 0 - 1.1920549441128969e-003 - -0.0865479111671448 - 0.1355233937501907 - <_> - - <_> - - - - <_>4 13 5 3 -1. - <_>4 14 5 1 3. - 0 - 3.0391330365091562e-003 - -0.0729652196168900 - 0.1647980064153671 - <_> - - <_> - - - - <_>9 16 6 2 -1. - <_>9 17 6 1 2. - 0 - -2.9615699531859718e-005 - 0.0820479765534401 - -0.1450296938419342 - <_> - - <_> - - - - <_>11 16 5 3 -1. - <_>11 17 5 1 3. - 0 - -0.0122263403609395 - -0.5301417708396912 - 0.0204057991504669 - <_> - - <_> - - - - <_>5 0 3 15 -1. - <_>6 0 1 15 3. - 0 - -0.0281248893588781 - -0.5514876246452332 - 0.0176881197839975 - <_> - - <_> - - - - <_>9 16 8 4 -1. - <_>9 18 8 2 2. - 0 - -0.0483071096241474 - -0.8257979154586792 - 0.0110205402597785 - <_> - - <_> - - - - <_>0 6 3 2 -1. - <_>0 7 3 1 2. - 0 - 4.6184109523892403e-003 - 0.0320699699223042 - -0.3011536896228790 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -8.4275740664452314e-004 - 0.1703443974256516 - -0.0630094334483147 - <_> - - <_> - - - - <_>9 11 4 2 -1. - <_>9 11 2 1 2. - <_>11 12 2 1 2. - 0 - 6.3863280229270458e-003 - 0.0163072999566793 - -0.7134649157524109 - <_> - - <_> - - - - <_>4 13 2 2 -1. - <_>4 13 1 1 2. - <_>5 14 1 1 2. - 0 - -7.7203067485243082e-004 - 0.1671528071165085 - -0.0661927834153175 - <_> - - <_> - - - - <_>6 4 1 2 -1. - <_>6 5 1 1 2. - 0 - -2.2645338904112577e-003 - -0.3510709106922150 - 0.0281686708331108 - <_> - - <_> - - - - <_>14 18 2 2 -1. - <_>14 18 1 1 2. - <_>15 19 1 1 2. - 0 - -3.7738790269941092e-003 - 0.5276281833648682 - -0.0202226098626852 - <_> - - <_> - - - - <_>7 10 5 6 -1. - <_>7 12 5 2 3. - 0 - 5.8204168453812599e-003 - 0.0708640664815903 - -0.1467539072036743 - <_> - - <_> - - - - <_>8 7 4 6 -1. - <_>8 9 4 2 3. - 0 - -0.0120692504569888 - 0.2392809987068176 - -0.0443129688501358 - <_> - - <_> - - - - <_>7 9 6 2 -1. - <_>9 9 2 2 3. - 0 - 3.3203759230673313e-003 - -0.0657495334744453 - 0.2027768045663834 - <_> - - <_> - - - - <_>6 6 6 4 -1. - <_>6 6 3 2 2. - <_>9 8 3 2 2. - 0 - 2.1621929481625557e-003 - 0.0674079805612564 - -0.1812534928321838 - <_> - - <_> - - - - <_>10 3 1 6 -1. - <_>10 5 1 2 3. - 0 - 0.0122291501611471 - 0.0225593093782663 - -0.4918099939823151 - <_> - - <_> - - - - <_>5 2 12 14 -1. - <_>5 2 6 7 2. - <_>11 9 6 7 2. - 0 - -6.7253508605062962e-003 - -0.1529005020856857 - 0.0697866529226303 - <_> - - <_> - - - - <_>13 5 6 2 -1. - <_>13 6 6 1 2. - 0 - 2.3579499684274197e-003 - 0.0492121018469334 - -0.2083828002214432 - <_> - - <_> - - - - <_>16 0 4 8 -1. - <_>16 0 2 4 2. - <_>18 4 2 4 2. - 0 - -2.2950689308345318e-003 - 0.1240044012665749 - -0.0966249182820320 - <_> - - <_> - - - - <_>3 12 3 1 -1. - <_>4 12 1 1 3. - 0 - 1.0958530474454165e-003 - -0.0732707530260086 - 0.1520861983299255 - <_> - - <_> - - - - <_>3 10 3 4 -1. - <_>4 10 1 4 3. - 0 - -1.3427219819277525e-003 - 0.1223303973674774 - -0.0956898778676987 - <_> - - <_> - - - - <_>4 6 1 6 -1. - <_>4 9 1 3 2. - 0 - 5.4691417608410120e-004 - -0.1392416059970856 - 0.0843817368149757 - <_> - - <_> - - - - <_>3 7 15 1 -1. - <_>8 7 5 1 3. - 0 - 8.4598818793892860e-003 - 0.0896898731589317 - -0.1331889927387238 - <_> - - <_> - - - - <_>1 15 6 5 -1. - <_>4 15 3 5 2. - 0 - -0.0915971174836159 - -0.6185473203659058 - 0.0228678695857525 - <_> - - <_> - - - - <_>11 9 8 4 -1. - <_>15 9 4 4 2. - 0 - -1.1090439511463046e-003 - 0.0585137493908405 - -0.1880645006895065 - <_> - - <_> - - - - <_>15 7 2 4 -1. - <_>16 7 1 4 2. - 0 - 2.2256910597207025e-005 - -0.0844882801175117 - 0.1278091073036194 - <_> - - <_> - - - - <_>19 1 1 2 -1. - <_>19 2 1 1 2. - 0 - -1.5437819820363075e-004 - -0.1222802996635437 - 0.0860469788312912 - <_> - - <_> - - - - <_>6 15 3 3 -1. - <_>7 15 1 3 3. - 0 - -2.6862788945436478e-003 - -0.2448700070381165 - 0.0442559607326984 - <_> - - <_> - - - - <_>3 16 3 1 -1. - <_>4 16 1 1 3. - 0 - -4.0478641167283058e-003 - 0.2703068852424622 - -0.0422008708119392 - <_> - - <_> - - - - <_>3 10 3 10 -1. - <_>4 10 1 10 3. - 0 - -0.0533402413129807 - -0.7623234987258911 - 0.0143880397081375 - <_> - - <_> - - - - <_>18 17 2 2 -1. - <_>18 17 1 1 2. - <_>19 18 1 1 2. - 0 - 2.8256059158593416e-003 - -0.0298770703375340 - 0.3969297111034393 - <_> - - <_> - - - - <_>3 12 6 4 -1. - <_>3 12 3 2 2. - <_>6 14 3 2 2. - 0 - 0.0144437300041318 - 0.0301867108792067 - -0.3660664856433868 - <_> - - <_> - - - - <_>5 17 2 2 -1. - <_>5 17 1 1 2. - <_>6 18 1 1 2. - 0 - 1.3111650478094816e-003 - -0.0481403693556786 - 0.2243445962667465 - <_> - - <_> - - - - <_>7 16 2 3 -1. - <_>7 17 2 1 3. - 0 - 1.6730680363252759e-003 - -0.0599833987653255 - 0.1639419049024582 - <_> - - <_> - - - - <_>5 11 6 3 -1. - <_>8 11 3 3 2. - 0 - 0.0235171206295490 - 0.0241097006946802 - -0.4049243927001953 - <_> - - <_> - - - - <_>7 16 1 3 -1. - <_>7 17 1 1 3. - 0 - -3.5689130891114473e-003 - 0.3190355896949768 - -0.0342958793044090 - <_> - - <_> - - - - <_>0 16 2 1 -1. - <_>1 16 1 1 2. - 0 - -2.8193008620291948e-004 - -0.1487416028976440 - 0.0706698969006538 - <_> - - <_> - - - - <_>11 7 9 6 -1. - <_>11 10 9 3 2. - 0 - 0.1021585986018181 - 0.0128405001014471 - -0.7784854173660278 - <_> - - <_> - - - - <_>9 4 9 16 -1. - <_>12 4 3 16 3. - 0 - -0.1917548030614853 - -0.7570657730102539 - 0.0105877602472901 - <_> - - <_> - - - - <_>14 12 5 3 -1. - <_>14 13 5 1 3. - 0 - 5.3162658587098122e-003 - -0.0400665700435638 - 0.2605018019676209 - <_> - - <_> - - - - <_>8 18 3 2 -1. - <_>9 18 1 2 3. - 0 - -1.1487120063975453e-003 - -0.1801722049713135 - 0.0616104304790497 - <_> - - <_> - - - - <_>4 0 11 16 -1. - <_>4 8 11 8 2. - 0 - -0.2831673026084900 - -0.8491340875625610 - 0.0116471396759152 - <_> - - <_> - - - - <_>2 4 12 15 -1. - <_>2 9 12 5 3. - 0 - 0.0337317585945129 - 0.1235760971903801 - -0.0774822309613228 - <_> - - <_> - - - - <_>3 13 11 4 -1. - <_>3 15 11 2 2. - 0 - 9.8635945469141006e-003 - 0.0439580306410789 - -0.2554177939891815 - <_> - - <_> - - - - <_>7 5 4 3 -1. - <_>7 6 4 1 3. - 0 - -3.1564768869429827e-003 - 0.1894298940896988 - -0.0582210384309292 - <_> - - <_> - - - - <_>6 5 4 3 -1. - <_>6 6 4 1 3. - 0 - 1.5572150005027652e-003 - -0.1037613973021507 - 0.1410734951496124 - <_> - - <_> - - - - <_>5 0 2 9 -1. - <_>5 3 2 3 3. - 0 - 0.0623604208230972 - 9.6462322399020195e-003 - -0.8580496907234192 - <_> - - <_> - - - - <_>16 8 2 2 -1. - <_>16 8 1 1 2. - <_>17 9 1 1 2. - 0 - 1.1480550165288150e-004 - -0.0844199284911156 - 0.1131270006299019 - <_> - - <_> - - - - <_>12 10 8 2 -1. - <_>12 10 4 1 2. - <_>16 11 4 1 2. - 0 - -5.9252730570733547e-003 - -0.3165077865123749 - 0.0320798493921757 - <_> - - <_> - - - - <_>6 2 2 8 -1. - <_>7 2 1 8 2. - 0 - -2.4660851340740919e-004 - 0.0886976793408394 - -0.1108511015772820 - <_> - - <_> - - - - <_>6 6 2 3 -1. - <_>7 6 1 3 2. - 0 - 1.6946049872785807e-003 - -0.0596571490168571 - 0.2090421020984650 - <_> - - <_> - - - - <_>17 4 1 3 -1. - <_>17 5 1 1 3. - 0 - 9.0623252617660910e-005 - 0.0774419605731964 - -0.1280633956193924 - <_> - - <_> - - - - <_>15 13 3 2 -1. - <_>16 13 1 2 3. - 0 - 1.1666920036077499e-003 - -0.0617485791444778 - 0.1570245027542114 - <_> - - <_> - - - - <_>11 13 2 3 -1. - <_>11 14 2 1 3. - 0 - 1.2541549513116479e-003 - 0.0446083806455135 - -0.2314036041498184 - <_> - - <_> - - - - <_>14 5 6 11 -1. - <_>16 5 2 11 3. - 0 - -6.0275900177657604e-003 - 0.0952818468213081 - -0.1028309017419815 - <_> - - <_> - - - - <_>6 0 12 8 -1. - <_>12 0 6 8 2. - 0 - -0.2047284990549088 - -0.4111475944519043 - 0.0235375501215458 - <_> - - <_> - - - - <_>7 15 8 4 -1. - <_>7 15 4 2 2. - <_>11 17 4 2 2. - 0 - 0.0176912806928158 - -0.0392571501433849 - 0.2856444120407105 - <_> - - <_> - - - - <_>4 14 16 6 -1. - <_>4 16 16 2 3. - 0 - -0.1287564933300018 - -0.8203077912330627 - 0.0117352902889252 - <_> - - <_> - - - - <_>6 12 2 6 -1. - <_>6 12 1 3 2. - <_>7 15 1 3 2. - 0 - 1.2868089834228158e-003 - 0.0508588701486588 - -0.1784801036119461 - <_> - - <_> - - - - <_>7 14 6 4 -1. - <_>7 14 3 2 2. - <_>10 16 3 2 2. - 0 - -4.5859832316637039e-003 - 0.1680210977792740 - -0.0615825988352299 - <_> - - <_> - - - - <_>0 0 2 4 -1. - <_>0 0 1 2 2. - <_>1 2 1 2 2. - 0 - 4.6391240903176367e-004 - 0.0667470470070839 - -0.1423780024051666 - <_> - - <_> - - - - <_>15 12 1 3 -1. - <_>15 13 1 1 3. - 0 - -4.4439961202442646e-003 - 0.4571498036384583 - -0.0217468105256557 - <_> - - <_> - - - - <_>7 16 3 1 -1. - <_>8 16 1 1 3. - 0 - 3.8220020942389965e-003 - 0.0180943291634321 - -0.6024454236030579 - <_> - - <_> - - - - <_>1 8 1 2 -1. - <_>1 9 1 1 2. - 0 - 1.3894500443711877e-003 - 0.0340078510344028 - -0.2715348005294800 - <_> - - <_> - - - - <_>3 14 3 2 -1. - <_>4 14 1 2 3. - 0 - -7.2111929766833782e-003 - 0.2731257081031799 - -0.0368551313877106 - <_> - - <_> - - - - <_>3 13 3 5 -1. - <_>4 13 1 5 3. - 0 - 1.6509749693796039e-003 - -0.0844070166349411 - 0.1313444972038269 - <_> - - <_> - - - - <_>7 2 3 4 -1. - <_>8 2 1 4 3. - 0 - -5.0506892148405313e-004 - -0.1419333964586258 - 0.0736280530691147 - <_> - - <_> - - - - <_>10 1 4 4 -1. - <_>10 3 4 2 2. - 0 - -0.0112053295597434 - 0.3009375035762787 - -0.0341713912785053 - <_> - - <_> - - - - <_>9 2 1 2 -1. - <_>9 3 1 1 2. - 0 - -3.4860160667449236e-004 - -0.2453830987215042 - 0.0598239786922932 - <_> - - <_> - - - - <_>7 12 2 2 -1. - <_>7 12 1 1 2. - <_>8 13 1 1 2. - 0 - 7.3347258148714900e-004 - -0.0617702603340149 - 0.1636794954538345 - <_> - - <_> - - - - <_>4 11 4 4 -1. - <_>4 11 2 2 2. - <_>6 13 2 2 2. - 0 - -9.2969406396150589e-003 - -0.3023664057254791 - 0.0392578989267349 - <_> - - <_> - - - - <_>9 10 6 4 -1. - <_>12 10 3 4 2. - 0 - 0.0239571202546358 - -0.0239007193595171 - 0.4834083020687103 - <_> - - <_> - - - - <_>8 12 3 2 -1. - <_>9 12 1 2 3. - 0 - 3.6422210541786626e-005 - -0.1228303983807564 - 0.0912589505314827 - <_> - - <_> - - - - <_>13 9 6 6 -1. - <_>13 9 3 3 2. - <_>16 12 3 3 2. - 0 - 0.0504582002758980 - 0.0135291498154402 - -0.7782772779464722 - <_> - - <_> - - - - <_>14 0 3 5 -1. - <_>15 0 1 5 3. - 0 - -9.8683983087539673e-003 - -0.4406045973300934 - 0.0204043593257666 - <_> - - <_> - - - - <_>9 8 6 4 -1. - <_>9 8 3 2 2. - <_>12 10 3 2 2. - 0 - -0.0108512397855520 - 0.2016550004482269 - -0.0522485896945000 - <_> - - <_> - - - - <_>10 6 3 3 -1. - <_>11 6 1 3 3. - 0 - 1.7670930537860841e-004 - -0.1369144022464752 - 0.0831705927848816 - <_> - - <_> - - - - <_>13 3 2 1 -1. - <_>14 3 1 1 2. - 0 - 1.2582179624587297e-004 - 0.0612753517925739 - -0.1654271036386490 - <_> - - <_> - - - - <_>4 5 2 2 -1. - <_>4 5 1 1 2. - <_>5 6 1 1 2. - 0 - -7.0588971721008420e-004 - 0.1521912962198257 - -0.0661646202206612 - <_> - - <_> - - - - <_>4 5 2 2 -1. - <_>4 5 1 1 2. - <_>5 6 1 1 2. - 0 - 1.1355109745636582e-003 - -0.0541153699159622 - 0.2131109982728958 - <_> - - <_> - - - - <_>7 9 2 6 -1. - <_>7 11 2 2 3. - 0 - -3.7436310667544603e-003 - -0.2346985042095184 - 0.0495910011231899 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 1.2309269513934851e-003 - -0.0751960128545761 - 0.1464654058218002 - <_> - - <_> - - - - <_>6 13 2 3 -1. - <_>6 14 2 1 3. - 0 - 3.6228948738425970e-004 - -0.0977894067764282 - 0.1209172978997231 - <_> - - <_> - - - - <_>7 4 3 2 -1. - <_>8 4 1 2 3. - 0 - 7.5996189843863249e-004 - 0.0697139203548431 - -0.1627878993749619 - <_> - - <_> - - - - <_>13 1 3 4 -1. - <_>14 1 1 4 3. - 0 - -1.8509250367060304e-003 - -0.1838289052248001 - 0.0575015209615231 - <_> - - <_> - - - - <_>6 8 11 3 -1. - <_>6 9 11 1 3. - 0 - 7.9539678990840912e-003 - -0.0588487088680267 - 0.1884644031524658 - <_> - - <_> - - - - <_>13 10 5 2 -1. - <_>13 11 5 1 2. - 0 - -3.1013600528240204e-004 - -0.1457546055316925 - 0.0724031999707222 - <_> - - <_> - - - - <_>13 9 3 6 -1. - <_>13 12 3 3 2. - 0 - 1.6956350300461054e-003 - 0.0705502629280090 - -0.1674093008041382 - <_> - - <_> - - - - <_>3 14 5 2 -1. - <_>3 15 5 1 2. - 0 - 2.9058079235255718e-005 - -0.1034158989787102 - 0.0953762829303741 - <_> - - <_> - - - - <_>11 0 8 2 -1. - <_>11 0 4 1 2. - <_>15 1 4 1 2. - 0 - 0.0144669199362397 - -0.0175320692360401 - 0.5476716756820679 - <_> - - <_> - - - - <_>13 1 7 6 -1. - <_>13 3 7 2 3. - 0 - -0.0571564994752407 - -0.7478930950164795 - 0.0163944195955992 - <_> - - <_> - - - - <_>11 0 6 1 -1. - <_>13 0 2 1 3. - 0 - 3.0681469943374395e-003 - 0.0387028194963932 - -0.2416436970233917 - <_> - - <_> - - - - <_>8 1 5 3 -1. - <_>8 2 5 1 3. - 0 - 3.7490210961550474e-003 - -0.0565554313361645 - 0.2030832022428513 - <_> - - <_> - - - - <_>12 11 1 3 -1. - <_>12 12 1 1 3. - 0 - -1.0643450077623129e-003 - -0.2821192145347595 - 0.0352075099945068 - <_> - - <_> - - - - <_>17 13 3 6 -1. - <_>17 15 3 2 3. - 0 - -8.9807435870170593e-003 - 0.2175476998090744 - -0.0506281815469265 - <_> - - <_> - - - - <_>12 11 1 3 -1. - <_>12 12 1 1 3. - 0 - 2.4643479264341295e-004 - 0.0727275311946869 - -0.1476881951093674 - <_> - - <_> - - - - <_>15 9 3 1 -1. - <_>16 9 1 1 3. - 0 - 2.2197801154106855e-003 - -0.0367548614740372 - 0.2693927884101868 - -1.4785599708557129 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>10 4 6 11 -1. - <_>13 4 3 11 2. - 0 - -0.0353284217417240 - 0.2412399053573608 - -0.2796190083026886 - <_> - - <_> - - - - <_>13 9 4 4 -1. - <_>13 9 2 2 2. - <_>15 11 2 2 2. - 0 - 2.6829841081053019e-003 - -0.1636255979537964 - 0.2343350052833557 - <_> - - <_> - - - - <_>8 2 1 6 -1. - <_>8 4 1 2 3. - 0 - 2.1330378949642181e-003 - -0.2010063976049423 - 0.1567952930927277 - <_> - - <_> - - - - <_>5 6 4 6 -1. - <_>5 9 4 3 2. - 0 - 4.2972870869562030e-004 - -0.3779098093509674 - 0.0740836933255196 - <_> - - <_> - - - - <_>2 6 4 8 -1. - <_>4 6 2 8 2. - 0 - -0.0346459187567234 - 0.3055624067783356 - -0.0835465267300606 - <_> - - <_> - - - - <_>11 15 1 2 -1. - <_>11 16 1 1 2. - 0 - -1.4237920368032064e-005 - 0.0826991423964500 - -0.2358395010232925 - <_> - - <_> - - - - <_>11 1 7 10 -1. - <_>11 6 7 5 2. - 0 - 4.9165110103785992e-003 - -0.1955605000257492 - 0.0969653874635696 - <_> - - <_> - - - - <_>7 11 9 6 -1. - <_>7 13 9 2 3. - 0 - 6.0989488847553730e-003 - 0.0784705504775047 - -0.2320964038372040 - <_> - - <_> - - - - <_>4 9 8 1 -1. - <_>8 9 4 1 2. - 0 - 7.4874181300401688e-003 - 7.1725919842720032e-003 - -0.5156626105308533 - <_> - - <_> - - - - <_>10 10 3 3 -1. - <_>11 10 1 3 3. - 0 - 4.2871991172432899e-003 - 0.0405305102467537 - -0.4108628928661346 - <_> - - <_> - - - - <_>8 0 7 6 -1. - <_>8 2 7 2 3. - 0 - 0.0168561805039644 - -0.0775062665343285 - 0.2365777939558029 - <_> - - <_> - - - - <_>11 13 2 2 -1. - <_>11 13 1 1 2. - <_>12 14 1 1 2. - 0 - -1.0347689967602491e-003 - -0.4670444130897522 - 0.0344685688614845 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - 1.6820980235934258e-003 - -0.0672067403793335 - 0.2367143034934998 - <_> - - <_> - - - - <_>7 10 3 9 -1. - <_>7 13 3 3 3. - 0 - -0.0120182400569320 - -0.2237260043621063 - 0.0742819532752037 - <_> - - <_> - - - - <_>5 9 1 3 -1. - <_>5 10 1 1 3. - 0 - 1.3802549801766872e-003 - -0.0999901890754700 - 0.1527086049318314 - <_> - - <_> - - - - <_>2 8 18 6 -1. - <_>11 8 9 6 2. - 0 - -0.1428107023239136 - -0.2834411859512329 - 0.0622993484139442 - <_> - - <_> - - - - <_>11 7 6 4 -1. - <_>13 7 2 4 3. - 0 - -0.0154634900391102 - 0.2908419072628021 - -0.0533956885337830 - <_> - - <_> - - - - <_>7 8 4 6 -1. - <_>7 10 4 2 3. - 0 - -9.9617196246981621e-004 - -0.3601182103157044 - 0.0419229716062546 - <_> - - <_> - - - - <_>10 4 4 6 -1. - <_>10 6 4 2 3. - 0 - -0.0269566792994738 - -0.4373672902584076 - 0.0317311286926270 - <_> - - <_> - - - - <_>11 12 6 1 -1. - <_>13 12 2 1 3. - 0 - -8.7780617177486420e-003 - -0.5037447214126587 - 0.0251468494534492 - <_> - - <_> - - - - <_>5 7 2 1 -1. - <_>6 7 1 1 2. - 0 - 4.2969950300175697e-005 - -0.1540649980306625 - 0.0884783565998077 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>5 13 3 1 3. - 0 - -6.2619051896035671e-003 - 0.2243591994047165 - -0.0598498210310936 - <_> - - <_> - - - - <_>16 17 1 2 -1. - <_>16 18 1 1 2. - 0 - -6.4296770142391324e-004 - -0.2437708973884583 - 0.0593897402286530 - <_> - - <_> - - - - <_>1 0 2 1 -1. - <_>2 0 1 1 2. - 0 - -1.5573870041407645e-004 - -0.1686799973249435 - 0.0784763172268867 - <_> - - <_> - - - - <_>5 12 2 2 -1. - <_>5 13 2 1 2. - 0 - 4.1139780660159886e-004 - -0.0890175700187683 - 0.1401938050985336 - <_> - - <_> - - - - <_>12 13 2 3 -1. - <_>12 14 2 1 3. - 0 - 1.8635790329426527e-003 - 0.0386036895215511 - -0.3211897015571594 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 1.6059159534052014e-003 - -0.0788015201687813 - 0.1580146998167038 - <_> - - <_> - - - - <_>1 0 2 1 -1. - <_>2 0 1 1 2. - 0 - 8.6740078404545784e-004 - 0.0541344806551933 - -0.2353843003511429 - <_> - - <_> - - - - <_>16 0 4 4 -1. - <_>16 0 2 2 2. - <_>18 2 2 2 2. - 0 - -7.9801032552495599e-004 - 0.1333000957965851 - -0.0957318171858788 - <_> - - <_> - - - - <_>4 5 8 10 -1. - <_>4 5 4 5 2. - <_>8 10 4 5 2. - 0 - -4.8548211343586445e-003 - -0.2073605954647064 - 0.0610386207699776 - <_> - - <_> - - - - <_>3 14 4 5 -1. - <_>5 14 2 5 2. - 0 - -0.0114267403259873 - 0.1720180958509445 - -0.0711522772908211 - <_> - - <_> - - - - <_>2 16 6 2 -1. - <_>5 16 3 2 2. - 0 - 8.7062492966651917e-003 - -0.0721856728196144 - 0.1908296942710877 - <_> - - <_> - - - - <_>8 0 8 1 -1. - <_>12 0 4 1 2. - 0 - -1.1634400580078363e-003 - -0.1375169008970261 - 0.0918181315064430 - <_> - - <_> - - - - <_>0 4 15 6 -1. - <_>0 7 15 3 2. - 0 - 6.8914610892534256e-003 - 0.0962259694933891 - -0.1324615925550461 - <_> - - <_> - - - - <_>9 9 3 2 -1. - <_>9 10 3 1 2. - 0 - -2.2426620125770569e-003 - 0.3568324148654938 - -0.0362800508737564 - <_> - - <_> - - - - <_>7 9 2 6 -1. - <_>7 11 2 2 3. - 0 - 0.0123015204444528 - 0.0469409897923470 - -0.3062332868576050 - <_> - - <_> - - - - <_>5 10 4 3 -1. - <_>5 11 4 1 3. - 0 - 3.9963610470294952e-003 - -0.0829993933439255 - 0.1548645943403244 - <_> - - <_> - - - - <_>12 10 1 2 -1. - <_>12 11 1 1 2. - 0 - -2.2026189981261268e-005 - 0.1177809983491898 - -0.1189965009689331 - <_> - - <_> - - - - <_>17 3 1 3 -1. - <_>17 4 1 1 3. - 0 - 5.8708270080387592e-004 - 0.0568646602332592 - -0.2250989973545075 - <_> - - <_> - - - - <_>11 9 4 4 -1. - <_>11 9 2 2 2. - <_>13 11 2 2 2. - 0 - -5.8760121464729309e-003 - 0.2662526965141296 - -0.0445701293647289 - <_> - - <_> - - - - <_>10 14 6 2 -1. - <_>10 15 6 1 2. - 0 - 4.3262130930088460e-004 - 0.0580498389899731 - -0.2117380052804947 - <_> - - <_> - - - - <_>11 12 2 8 -1. - <_>11 16 2 4 2. - 0 - 4.7852578572928905e-003 - -0.0407105684280396 - 0.2950912117958069 - <_> - - <_> - - - - <_>11 7 5 6 -1. - <_>11 10 5 3 2. - 0 - 4.5480159315047786e-005 - -0.1820161044597626 - 0.0601795390248299 - <_> - - <_> - - - - <_>4 2 2 6 -1. - <_>5 2 1 6 2. - 0 - 2.5633929762989283e-003 - -0.0870397612452507 - 0.1269284039735794 - <_> - - <_> - - - - <_>6 0 5 2 -1. - <_>6 1 5 1 2. - 0 - -4.7383471392095089e-003 - 0.2396183013916016 - -0.0499149002134800 - <_> - - <_> - - - - <_>10 17 4 3 -1. - <_>10 18 4 1 3. - 0 - 4.4647231698036194e-003 - 0.0405400209128857 - -0.3246757090091705 - <_> - - <_> - - - - <_>12 3 7 3 -1. - <_>12 4 7 1 3. - 0 - -6.7061209119856358e-003 - -0.3278968036174774 - 0.0322996489703655 - <_> - - <_> - - - - <_>8 1 12 8 -1. - <_>8 1 6 4 2. - <_>14 5 6 4 2. - 0 - 0.0717610493302345 - -0.0237136706709862 - 0.4777205884456635 - <_> - - <_> - - - - <_>11 0 3 20 -1. - <_>12 0 1 20 3. - 0 - 0.0305848605930805 - 0.0167939104139805 - -0.7806122899055481 - <_> - - <_> - - - - <_>17 1 2 2 -1. - <_>17 1 1 1 2. - <_>18 2 1 1 2. - 0 - 3.8672669325023890e-003 - -0.0248768907040358 - 0.5126066207885742 - <_> - - <_> - - - - <_>2 10 7 6 -1. - <_>2 12 7 2 3. - 0 - -0.0528022088110447 - -0.5075966119766235 - 0.0238730404525995 - <_> - - <_> - - - - <_>7 3 3 1 -1. - <_>8 3 1 1 3. - 0 - -6.5651582553982735e-004 - -0.2012232989072800 - 0.0496728010475636 - <_> - - <_> - - - - <_>4 17 11 3 -1. - <_>4 18 11 1 3. - 0 - 8.5785267874598503e-003 - -0.0450070202350616 - 0.2351890951395035 - <_> - - <_> - - - - <_>7 15 3 2 -1. - <_>8 15 1 2 3. - 0 - -1.2620680499821901e-003 - -0.1996205002069473 - 0.0555642098188400 - <_> - - <_> - - - - <_>3 4 3 13 -1. - <_>4 4 1 13 3. - 0 - 0.0142152896150947 - -0.0469839796423912 - 0.2078115046024323 - <_> - - <_> - - - - <_>5 2 12 14 -1. - <_>5 2 6 7 2. - <_>11 9 6 7 2. - 0 - 0.1639381051063538 - 0.0149732697755098 - -0.6502568721771240 - <_> - - <_> - - - - <_>0 0 10 6 -1. - <_>0 3 10 3 2. - 0 - 0.1483764052391052 - 8.1885885447263718e-003 - -0.9429618716239929 - <_> - - <_> - - - - <_>5 4 2 1 -1. - <_>6 4 1 1 2. - 0 - 1.4631190424552187e-005 - -0.1238375976681709 - 0.0824895799160004 - <_> - - <_> - - - - <_>7 7 6 13 -1. - <_>10 7 3 13 2. - 0 - -0.0339093916118145 - -0.2281876057386398 - 0.0433024987578392 - <_> - - <_> - - - - <_>7 2 2 8 -1. - <_>7 2 1 4 2. - <_>8 6 1 4 2. - 0 - 3.8288589566946030e-003 - -0.0372769199311733 - 0.2761304974555969 - <_> - - <_> - - - - <_>6 1 3 4 -1. - <_>7 1 1 4 3. - 0 - 8.0947913229465485e-003 - 0.0284453593194485 - -0.3938880860805512 - <_> - - <_> - - - - <_>7 8 2 1 -1. - <_>8 8 1 1 2. - 0 - -7.0019601844251156e-004 - 0.1219938024878502 - -0.0927142575383186 - <_> - - <_> - - - - <_>4 0 4 2 -1. - <_>4 0 2 1 2. - <_>6 1 2 1 2. - 0 - 3.4412490203976631e-003 - -0.0489726811647415 - 0.2061723023653030 - <_> - - <_> - - - - <_>3 10 16 8 -1. - <_>3 14 16 4 2. - 0 - -0.1633749008178711 - -0.6185023784637451 - 0.0164678208529949 - <_> - - <_> - - - - <_>10 5 5 10 -1. - <_>10 10 5 5 2. - 0 - 6.5640709362924099e-003 - 0.1100718975067139 - -0.0923400074243546 - <_> - - <_> - - - - <_>13 6 3 4 -1. - <_>13 8 3 2 2. - 0 - 4.4708838686347008e-004 - -0.1393330991268158 - 0.0770396962761879 - <_> - - <_> - - - - <_>13 10 5 3 -1. - <_>13 11 5 1 3. - 0 - 0.0175687000155449 - 9.7569692879915237e-003 - -0.8003290295600891 - <_> - - <_> - - - - <_>16 12 2 2 -1. - <_>16 12 1 1 2. - <_>17 13 1 1 2. - 0 - -1.9571769516915083e-003 - 0.2800033092498779 - -0.0364282391965389 - <_> - - <_> - - - - <_>16 3 2 1 -1. - <_>17 3 1 1 2. - 0 - 5.1913037896156311e-004 - 0.0535153411328793 - -0.1942557990550995 - <_> - - <_> - - - - <_>5 1 3 5 -1. - <_>6 1 1 5 3. - 0 - 9.6273031085729599e-003 - 0.0313177518546581 - -0.3180254101753235 - <_> - - <_> - - - - <_>5 7 8 6 -1. - <_>5 9 8 2 3. - 0 - -0.0503328107297421 - 0.5665906071662903 - -0.0184949804097414 - <_> - - <_> - - - - <_>6 10 8 2 -1. - <_>6 10 4 1 2. - <_>10 11 4 1 2. - 0 - -6.4624901860952377e-003 - -0.4189467132091522 - 0.0273508504033089 - <_> - - <_> - - - - <_>6 9 4 8 -1. - <_>6 9 2 4 2. - <_>8 13 2 4 2. - 0 - -5.2857249975204468e-003 - 0.1775650978088379 - -0.0583777390420437 - <_> - - <_> - - - - <_>0 7 8 4 -1. - <_>4 7 4 4 2. - 0 - 0.0994544625282288 - 0.0164877194911242 - -0.5852617025375366 - <_> - - <_> - - - - <_>14 13 2 6 -1. - <_>14 13 1 3 2. - <_>15 16 1 3 2. - 0 - 2.1917840058449656e-004 - -0.1071425005793572 - 0.0918841734528542 - <_> - - <_> - - - - <_>12 13 2 1 -1. - <_>13 13 1 1 2. - 0 - -4.3873358663404360e-005 - 0.0780369266867638 - -0.1272391974925995 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>6 9 2 1 2. - 0 - -6.7227642284706235e-004 - -0.2570942044258118 - 0.0388433784246445 - <_> - - <_> - - - - <_>15 12 2 1 -1. - <_>16 12 1 1 2. - 0 - 1.1754270235542208e-004 - -0.0796959623694420 - 0.1209397017955780 - <_> - - <_> - - - - <_>0 0 18 14 -1. - <_>0 7 18 7 2. - 0 - 0.4606119096279144 - 0.0138860698789358 - -0.6524127125740051 - <_> - - <_> - - - - <_>11 5 3 3 -1. - <_>12 5 1 3 3. - 0 - 0.0111156003549695 - 0.0138716604560614 - -0.6022251844406128 - <_> - - <_> - - - - <_>4 7 3 3 -1. - <_>5 7 1 3 3. - 0 - 9.0776477009057999e-003 - -0.0361186601221561 - 0.2570241987705231 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - -4.9597548786550760e-004 - 0.1101704984903336 - -0.0892495065927505 - <_> - - <_> - - - - <_>5 9 1 8 -1. - <_>5 13 1 4 2. - 0 - 1.5807070303708315e-003 - 0.0481312796473503 - -0.2021591067314148 - <_> - - <_> - - - - <_>4 2 3 15 -1. - <_>5 2 1 15 3. - 0 - -0.0690129324793816 - -0.8153606057167053 - 0.0106600103899837 - <_> - - <_> - - - - <_>15 0 4 4 -1. - <_>17 0 2 4 2. - 0 - 1.9330780196469277e-004 - -0.1123182997107506 - 0.0850464329123497 - <_> - - <_> - - - - <_>10 7 1 3 -1. - <_>10 8 1 1 3. - 0 - 7.8813207801431417e-004 - -0.0552008189260960 - 0.1765443980693817 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - 9.5367128960788250e-004 - 0.0544111989438534 - -0.1867419928312302 - <_> - - <_> - - - - <_>8 17 3 2 -1. - <_>9 17 1 2 3. - 0 - -2.3191540967673063e-003 - -0.2754440903663635 - 0.0385133214294910 - <_> - - <_> - - - - <_>10 6 1 3 -1. - <_>10 7 1 1 3. - 0 - 9.5087959198281169e-004 - -0.0682189017534256 - 0.1608213931322098 - <_> - - <_> - - - - <_>6 7 4 4 -1. - <_>6 7 2 2 2. - <_>8 9 2 2 2. - 0 - 9.5385108143091202e-003 - -0.0388268791139126 - 0.3037083148956299 - <_> - - <_> - - - - <_>8 7 4 4 -1. - <_>8 7 2 2 2. - <_>10 9 2 2 2. - 0 - -0.0144891897216439 - -0.4698973000049591 - 0.0235500205308199 - <_> - - <_> - - - - <_>15 8 2 7 -1. - <_>16 8 1 7 2. - 0 - 0.0107560502365232 - 0.0205651000142097 - -0.4724313020706177 - <_> - - <_> - - - - <_>8 3 3 2 -1. - <_>9 3 1 2 3. - 0 - -2.0074830390512943e-003 - -0.2794669866561890 - 0.0360215492546558 - <_> - - <_> - - - - <_>16 17 3 1 -1. - <_>17 17 1 1 3. - 0 - -1.7316909506917000e-003 - 0.2090279012918472 - -0.0463009811937809 - <_> - - <_> - - - - <_>3 2 12 14 -1. - <_>3 2 6 7 2. - <_>9 9 6 7 2. - 0 - 0.1523479968309403 - 0.0149342501536012 - -0.6046112775802612 - <_> - - <_> - - - - <_>16 16 1 2 -1. - <_>16 17 1 1 2. - 0 - 6.3340878114104271e-004 - 0.0503071509301662 - -0.1827719956636429 - <_> - - <_> - - - - <_>7 12 2 3 -1. - <_>7 13 2 1 3. - 0 - -8.2793915644288063e-003 - 0.3646303117275238 - -0.0264742895960808 - <_> - - <_> - - - - <_>7 13 2 6 -1. - <_>8 13 1 6 2. - 0 - 0.0136676700785756 - 0.0125116202980280 - -0.8902382850646973 - <_> - - <_> - - - - <_>8 14 2 6 -1. - <_>8 16 2 2 3. - 0 - 2.0979309920221567e-003 - -0.0802471935749054 - 0.1298995018005371 - <_> - - <_> - - - - <_>6 14 4 6 -1. - <_>6 16 4 2 3. - 0 - -8.9776562526822090e-003 - 0.1741108000278473 - -0.0617711097002029 - <_> - - <_> - - - - <_>11 12 3 6 -1. - <_>12 12 1 6 3. - 0 - 1.2094390112906694e-003 - 0.0687117204070091 - -0.1656129062175751 - <_> - - <_> - - - - <_>0 6 1 12 -1. - <_>0 10 1 4 3. - 0 - 6.8200258538126945e-003 - 0.0577957592904568 - -0.1823161989450455 - <_> - - <_> - - - - <_>3 3 2 10 -1. - <_>3 3 1 5 2. - <_>4 8 1 5 2. - 0 - -1.8268059939146042e-003 - 0.1334033012390137 - -0.0753439664840698 - <_> - - <_> - - - - <_>3 3 2 8 -1. - <_>3 3 1 4 2. - <_>4 7 1 4 2. - 0 - 7.9908408224582672e-003 - -0.0450944714248180 - 0.2459415942430496 - <_> - - <_> - - - - <_>9 4 1 12 -1. - <_>9 10 1 6 2. - 0 - -2.5262041017413139e-003 - -0.2076396048069000 - 0.0523341298103333 - <_> - - <_> - - - - <_>0 5 6 4 -1. - <_>3 5 3 4 2. - 0 - -0.0748255103826523 - -0.5468875765800476 - 0.0178033895790577 - <_> - - <_> - - - - <_>9 9 1 4 -1. - <_>9 11 1 2 2. - 0 - -3.3099399879574776e-003 - 0.3345581889152527 - -0.0289664193987846 - <_> - - <_> - - - - <_>4 6 6 4 -1. - <_>4 6 3 2 2. - <_>7 8 3 2 2. - 0 - 8.2276277244091034e-003 - 0.0415798611938953 - -0.2665227055549622 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>7 8 1 2 2. - 0 - 3.1686299480497837e-003 - -0.0418171100318432 - 0.2976978123188019 - <_> - - <_> - - - - <_>6 4 4 14 -1. - <_>8 4 2 14 2. - 0 - 0.0151702901348472 - 0.0433923602104187 - -0.2461796998977661 - <_> - - <_> - - - - <_>6 7 3 3 -1. - <_>7 7 1 3 3. - 0 - -1.5946379862725735e-003 - 0.1505718976259232 - -0.0730177387595177 - <_> - - <_> - - - - <_>4 7 6 5 -1. - <_>7 7 3 5 2. - 0 - -8.5226353257894516e-003 - -0.1505008041858673 - 0.0696560367941856 - <_> - - <_> - - - - <_>0 4 8 10 -1. - <_>4 4 4 10 2. - 0 - -0.0114181200042367 - 0.1297474950551987 - -0.0951223298907280 - <_> - - <_> - - - - <_>0 6 18 14 -1. - <_>9 6 9 14 2. - 0 - -0.2885639965534210 - -0.2112454026937485 - 0.0474108196794987 - <_> - - <_> - - - - <_>11 15 3 5 -1. - <_>12 15 1 5 3. - 0 - -3.9014229550957680e-003 - -0.2684378027915955 - 0.0386986583471298 - <_> - - <_> - - - - <_>3 18 4 2 -1. - <_>3 18 2 1 2. - <_>5 19 2 1 2. - 0 - -3.5567739978432655e-003 - 0.2338503003120422 - -0.0457238815724850 - <_> - - <_> - - - - <_>7 10 2 2 -1. - <_>7 11 2 1 2. - 0 - -6.4394129440188408e-003 - -0.6046388149261475 - 0.0161560494452715 - <_> - - <_> - - - - <_>10 1 3 10 -1. - <_>10 6 3 5 2. - 0 - -7.4861319735646248e-003 - 0.1686796993017197 - -0.0559758804738522 - <_> - - <_> - - - - <_>9 0 8 10 -1. - <_>13 0 4 10 2. - 0 - 2.3621210129931569e-004 - 0.0535967499017715 - -0.2187291979789734 - <_> - - <_> - - - - <_>7 2 8 13 -1. - <_>11 2 4 13 2. - 0 - 0.0260992497205734 - -0.0539374910295010 - 0.2272893041372299 - <_> - - <_> - - - - <_>3 3 12 7 -1. - <_>9 3 6 7 2. - 0 - -1.7809759592637420e-003 - 0.0867595225572586 - -0.1200997978448868 - <_> - - <_> - - - - <_>11 8 3 2 -1. - <_>12 8 1 2 3. - 0 - -1.1987469770247117e-004 - -0.1534754931926727 - 0.0707077831029892 - <_> - - <_> - - - - <_>11 7 2 8 -1. - <_>11 7 1 4 2. - <_>12 11 1 4 2. - 0 - -6.8248361349105835e-003 - -0.3734101951122284 - 0.0267799608409405 - <_> - - <_> - - - - <_>0 6 3 2 -1. - <_>0 7 3 1 2. - 0 - -1.3119089999236166e-004 - -0.1164086982607842 - 0.0872111618518829 - <_> - - <_> - - - - <_>6 17 2 3 -1. - <_>6 18 2 1 3. - 0 - -1.8228540429845452e-003 - 0.1566449999809265 - -0.0680060908198357 - <_> - - <_> - - - - <_>4 7 2 2 -1. - <_>4 7 1 1 2. - <_>5 8 1 1 2. - 0 - 2.6267999783158302e-003 - -0.0369872190058231 - 0.2639312148094177 - <_> - - <_> - - - - <_>9 2 10 9 -1. - <_>9 5 10 3 3. - 0 - -0.0706771835684776 - -0.2829599976539612 - 0.0350355207920074 - <_> - - <_> - - - - <_>9 0 10 4 -1. - <_>9 0 5 2 2. - <_>14 2 5 2 2. - 0 - 0.0180613193660975 - -0.0280416496098042 - 0.3531377911567688 - <_> - - <_> - - - - <_>7 5 2 1 -1. - <_>8 5 1 1 2. - 0 - 9.2649407451972365e-004 - 0.0446002781391144 - -0.2278853952884674 - <_> - - <_> - - - - <_>7 5 2 1 -1. - <_>8 5 1 1 2. - 0 - -5.3023721557110548e-004 - -0.2086668014526367 - 0.0627185031771660 - <_> - - <_> - - - - <_>4 9 3 3 -1. - <_>4 10 3 1 3. - 0 - 3.6058931145817041e-003 - -0.0677969083189964 - 0.1490000933408737 - <_> - - <_> - - - - <_>4 10 4 3 -1. - <_>4 11 4 1 3. - 0 - 8.5915643721818924e-003 - -0.0456267595291138 - 0.2307848036289215 - <_> - - <_> - - - - <_>6 7 2 3 -1. - <_>6 8 2 1 3. - 0 - -8.8329352438449860e-003 - -0.4111708998680115 - 0.0282306894659996 - <_> - - <_> - - - - <_>18 4 1 3 -1. - <_>18 5 1 1 3. - 0 - 4.0959479520097375e-004 - 0.0536566302180290 - -0.1824354976415634 - <_> - - <_> - - - - <_>17 0 3 5 -1. - <_>18 0 1 5 3. - 0 - -2.5011589750647545e-003 - 0.1631354987621307 - -0.0609547011554241 - <_> - - <_> - - - - <_>11 2 8 3 -1. - <_>11 3 8 1 3. - 0 - -0.0146221695467830 - -0.4998840093612671 - 0.0185727607458830 - <_> - - <_> - - - - <_>14 9 6 5 -1. - <_>17 9 3 5 2. - 0 - -0.0637906789779663 - -0.4832960069179535 - 0.0179033894091845 - <_> - - <_> - - - - <_>0 7 4 6 -1. - <_>0 9 4 2 3. - 0 - -0.0166711397469044 - -0.2666158974170685 - 0.0348860099911690 - <_> - - <_> - - - - <_>12 7 4 12 -1. - <_>12 7 2 6 2. - <_>14 13 2 6 2. - 0 - -0.0125260697677732 - 0.3406133949756622 - -0.0280948001891375 - <_> - - <_> - - - - <_>8 7 9 3 -1. - <_>11 7 3 3 3. - 0 - 0.0483251586556435 - -0.0331761911511421 - 0.2902565896511078 - <_> - - <_> - - - - <_>12 12 2 3 -1. - <_>12 13 2 1 3. - 0 - 1.3246550224721432e-003 - 0.0371814407408237 - -0.2685065865516663 - <_> - - <_> - - - - <_>11 0 6 20 -1. - <_>14 0 3 20 2. - 0 - -0.2222131937742233 - -0.8989276885986328 - 0.0100644398480654 - <_> - - <_> - - - - <_>4 5 2 6 -1. - <_>5 5 1 6 2. - 0 - 1.2954319827258587e-003 - -0.1016175970435143 - 0.0905886217951775 - <_> - - <_> - - - - <_>1 7 6 11 -1. - <_>3 7 2 11 3. - 0 - 0.0137946698814631 - -0.0742446482181549 - 0.1431425958871841 - <_> - - <_> - - - - <_>2 15 2 1 -1. - <_>3 15 1 1 2. - 0 - 8.5643801139667630e-004 - 0.0597539693117142 - -0.1866019070148468 - <_> - - <_> - - - - <_>5 11 2 6 -1. - <_>5 14 2 3 2. - 0 - -0.0233175400644541 - -0.6925991773605347 - 0.0136673199012876 - <_> - - <_> - - - - <_>6 17 2 3 -1. - <_>6 18 2 1 3. - 0 - 1.6281680436804891e-003 - -0.0610607489943504 - 0.1550529003143311 - <_> - - <_> - - - - <_>5 8 11 12 -1. - <_>5 12 11 4 3. - 0 - -0.0123803298920393 - -0.1514685004949570 - 0.0617676004767418 - <_> - - <_> - - - - <_>16 10 2 2 -1. - <_>16 10 1 1 2. - <_>17 11 1 1 2. - 0 - 1.8393599893897772e-003 - -0.0371679887175560 - 0.2482217997312546 - <_> - - <_> - - - - <_>15 11 3 1 -1. - <_>16 11 1 1 3. - 0 - 3.5529870074242353e-003 - -0.0292007904499769 - 0.3359228968620300 - <_> - - <_> - - - - <_>13 14 1 3 -1. - <_>13 15 1 1 3. - 0 - 1.0305979521945119e-003 - 0.0376940816640854 - -0.2908569872379303 - <_> - - <_> - - - - <_>6 14 3 4 -1. - <_>6 16 3 2 2. - 0 - 2.9916960556874983e-005 - -0.0880141928792000 - 0.1051521003246307 - <_> - - <_> - - - - <_>6 6 2 14 -1. - <_>6 13 2 7 2. - 0 - -4.1505339322611690e-004 - 0.0657262429594994 - -0.1502110064029694 - <_> - - <_> - - - - <_>11 14 2 1 -1. - <_>12 14 1 1 2. - 0 - -1.4631619706051424e-005 - 0.0781703516840935 - -0.1196243986487389 - <_> - - <_> - - - - <_>9 13 6 6 -1. - <_>9 13 3 3 2. - <_>12 16 3 3 2. - 0 - -4.3779090046882629e-003 - 0.2075245976448059 - -0.0520893298089504 - <_> - - <_> - - - - <_>10 17 3 1 -1. - <_>11 17 1 1 3. - 0 - 4.7036199248395860e-004 - 0.0633484795689583 - -0.1876772940158844 - <_> - - <_> - - - - <_>9 13 2 6 -1. - <_>9 13 1 3 2. - <_>10 16 1 3 2. - 0 - 1.4788640328333713e-005 - -0.0958288535475731 - 0.1121309995651245 - <_> - - <_> - - - - <_>11 18 4 2 -1. - <_>13 18 2 2 2. - 0 - 3.7048431113362312e-004 - -0.0987230092287064 - 0.0986476764082909 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>10 12 1 3 3. - 0 - -1.8590339459478855e-003 - -0.2687363028526306 - 0.0383525788784027 - <_> - - <_> - - - - <_>5 6 1 12 -1. - <_>5 12 1 6 2. - 0 - -7.0764529518783092e-003 - -0.1598400026559830 - 0.0578413307666779 - <_> - - <_> - - - - <_>2 4 6 6 -1. - <_>4 4 2 6 3. - 0 - 0.0149200102314353 - -0.0511781498789787 - 0.1924290955066681 - <_> - - <_> - - - - <_>1 4 9 3 -1. - <_>4 4 3 3 3. - 0 - -5.0713191740214825e-003 - 0.1386325955390930 - -0.1112122982740402 - <_> - - <_> - - - - <_>5 10 3 3 -1. - <_>5 11 3 1 3. - 0 - -0.0150055000558496 - 0.4858393073081970 - -0.0188117604702711 - <_> - - <_> - - - - <_>8 9 1 3 -1. - <_>8 10 1 1 3. - 0 - -2.0439480431377888e-003 - -0.3275485932826996 - 0.0278163105249405 - <_> - - <_> - - - - <_>11 19 6 1 -1. - <_>13 19 2 1 3. - 0 - -1.3060690253041685e-004 - 0.0988680422306061 - -0.0849575772881508 - <_> - - <_> - - - - <_>18 4 2 8 -1. - <_>18 4 1 4 2. - <_>19 8 1 4 2. - 0 - 8.8742617517709732e-003 - -0.0252356007695198 - 0.3238987922668457 - <_> - - <_> - - - - <_>17 5 2 3 -1. - <_>17 6 2 1 3. - 0 - 7.0397509261965752e-004 - 0.0563275218009949 - -0.1739207953214645 - <_> - - <_> - - - - <_>12 15 8 4 -1. - <_>16 15 4 4 2. - 0 - -0.0254024695605040 - 0.1967539042234421 - -0.0473623014986515 - <_> - - <_> - - - - <_>14 8 4 10 -1. - <_>14 13 4 5 2. - 0 - -9.3743661418557167e-003 - -0.1520421952009201 - 0.0599326305091381 - -1.3372850418090820 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>11 0 3 18 -1. - <_>11 6 3 6 3. - 0 - 0.0404530204832554 - -0.2363782972097397 - 0.2886553108692169 - <_> - - <_> - - - - <_>8 5 12 6 -1. - <_>8 7 12 2 3. - 0 - -0.0110560497269034 - 0.1606290042400360 - -0.2625974118709564 - <_> - - <_> - - - - <_>10 11 4 2 -1. - <_>12 11 2 2 2. - 0 - -3.9778949576430023e-004 - 0.1159109994769096 - -0.2708101868629456 - <_> - - <_> - - - - <_>5 7 2 8 -1. - <_>6 7 1 8 2. - 0 - 1.0191530454903841e-003 - -0.2096937000751495 - 0.1364289969205856 - <_> - - <_> - - - - <_>6 3 12 12 -1. - <_>6 3 6 6 2. - <_>12 9 6 6 2. - 0 - 3.6101979203522205e-003 - -0.2172545939683914 - 0.1261779069900513 - <_> - - <_> - - - - <_>6 10 4 2 -1. - <_>6 10 2 1 2. - <_>8 11 2 1 2. - 0 - 4.4545531272888184e-004 - -0.1597453951835632 - 0.1259648948907852 - <_> - - <_> - - - - <_>0 2 6 10 -1. - <_>2 2 2 10 3. - 0 - 5.8226222172379494e-003 - -0.1548444926738739 - 0.0977838113903999 - <_> - - <_> - - - - <_>10 15 3 2 -1. - <_>11 15 1 2 3. - 0 - -2.1416260860860348e-003 - -0.3637767136096954 - 0.0401033498346806 - <_> - - <_> - - - - <_>6 8 10 2 -1. - <_>6 8 5 1 2. - <_>11 9 5 1 2. - 0 - -2.6691620587371290e-004 - 0.0844707563519478 - -0.1749610006809235 - <_> - - <_> - - - - <_>6 12 1 6 -1. - <_>6 15 1 3 2. - 0 - -5.4352330043911934e-003 - -0.3183093070983887 - 0.0497860386967659 - <_> - - <_> - - - - <_>9 0 4 1 -1. - <_>11 0 2 1 2. - 0 - -1.5426309546455741e-003 - -0.2133370935916901 - 0.0648845136165619 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - -2.7932289522141218e-003 - 0.2548325061798096 - -0.0651709288358688 - <_> - - <_> - - - - <_>7 4 2 1 -1. - <_>8 4 1 1 2. - 0 - 1.3845940120518208e-003 - 0.0393045805394650 - -0.3740482926368713 - <_> - - <_> - - - - <_>2 11 3 1 -1. - <_>3 11 1 1 3. - 0 - -3.2193479128181934e-003 - 0.2629042863845825 - -0.0563963614404202 - <_> - - <_> - - - - <_>1 10 3 3 -1. - <_>2 10 1 3 3. - 0 - -9.7977351397275925e-003 - 0.3204438984394074 - -0.0463822893798351 - <_> - - <_> - - - - <_>12 0 8 2 -1. - <_>12 0 4 1 2. - <_>16 1 4 1 2. - 0 - -1.7625789623707533e-003 - 0.1505081951618195 - -0.0888924375176430 - <_> - - <_> - - - - <_>6 6 6 8 -1. - <_>9 6 3 8 2. - 0 - -0.0360968895256519 - -0.4313783943653107 - 0.0317858010530472 - <_> - - <_> - - - - <_>6 10 1 3 -1. - <_>6 11 1 1 3. - 0 - 2.0813369192183018e-003 - -0.0659579187631607 - 0.1927528977394104 - <_> - - <_> - - - - <_>8 12 7 2 -1. - <_>8 13 7 1 2. - 0 - -6.0533690266311169e-003 - -0.3137460947036743 - 0.0510074310004711 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - 3.7253410555422306e-003 - -0.0614025890827179 - 0.2563137114048004 - <_> - - <_> - - - - <_>6 6 2 12 -1. - <_>6 12 2 6 2. - 0 - 5.0668260082602501e-003 - 0.0579627305269241 - -0.2434016019105911 - <_> - - <_> - - - - <_>6 12 2 3 -1. - <_>6 13 2 1 3. - 0 - 2.8038739692419767e-003 - -0.0703297033905983 - 0.2137586027383804 - <_> - - <_> - - - - <_>12 12 1 3 -1. - <_>12 13 1 1 3. - 0 - 1.5925259795039892e-003 - 0.0266377609223127 - -0.5112913846969605 - <_> - - <_> - - - - <_>8 9 1 2 -1. - <_>8 10 1 1 2. - 0 - 2.9422679290291853e-005 - -0.2171020060777664 - 0.0649850517511368 - <_> - - <_> - - - - <_>7 11 4 6 -1. - <_>7 11 2 3 2. - <_>9 14 2 3 2. - 0 - -2.2399190129362978e-005 - 0.0815825685858727 - -0.1513561010360718 - <_> - - <_> - - - - <_>10 10 4 3 -1. - <_>10 11 4 1 3. - 0 - 6.7072827368974686e-004 - 0.1050219014286995 - -0.1178736016154289 - <_> - - <_> - - - - <_>12 10 2 3 -1. - <_>12 11 2 1 3. - 0 - -1.5262300148606300e-003 - -0.3462037146091461 - 0.0392440892755985 - <_> - - <_> - - - - <_>6 13 2 3 -1. - <_>6 14 2 1 3. - 0 - 1.8151829717680812e-003 - -0.0746694579720497 - 0.1684775948524475 - <_> - - <_> - - - - <_>7 14 1 3 -1. - <_>7 15 1 1 3. - 0 - 5.8078771689906716e-004 - -0.0979524105787277 - 0.1419274955987930 - <_> - - <_> - - - - <_>6 10 8 6 -1. - <_>6 12 8 2 3. - 0 - -8.9623313397169113e-003 - -0.1960162073373795 - 0.0662680417299271 - <_> - - <_> - - - - <_>5 8 6 12 -1. - <_>5 12 6 4 3. - 0 - 0.1114680990576744 - 0.0170001406222582 - -0.6491770744323731 - <_> - - <_> - - - - <_>1 14 2 1 -1. - <_>2 14 1 1 2. - 0 - -1.7872039461508393e-004 - -0.1405359953641892 - 0.0801087021827698 - <_> - - <_> - - - - <_>8 6 2 3 -1. - <_>8 7 2 1 3. - 0 - -4.6587768010795116e-003 - 0.1953022927045822 - -0.0586023405194283 - <_> - - <_> - - - - <_>4 6 8 4 -1. - <_>4 6 4 2 2. - <_>8 8 4 2 2. - 0 - 3.4576000180095434e-003 - 0.0598057992756367 - -0.2199078947305679 - <_> - - <_> - - - - <_>0 14 3 1 -1. - <_>1 14 1 1 3. - 0 - -1.9979270291514695e-004 - -0.1372614949941635 - 0.0834302306175232 - <_> - - <_> - - - - <_>4 1 2 2 -1. - <_>4 1 1 1 2. - <_>5 2 1 1 2. - 0 - -4.8079751431941986e-003 - 0.5504192113876343 - -0.0207152999937534 - <_> - - <_> - - - - <_>14 10 1 6 -1. - <_>14 13 1 3 2. - 0 - -7.3389292083447799e-006 - 0.0753020271658897 - -0.1448659002780914 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -3.5799799952656031e-003 - 0.2627722024917603 - -0.0425504595041275 - <_> - - <_> - - - - <_>5 10 3 3 -1. - <_>5 11 3 1 3. - 0 - 1.1689850362017751e-003 - -0.1098416969180107 - 0.1297184973955154 - <_> - - <_> - - - - <_>2 3 12 4 -1. - <_>2 3 6 2 2. - <_>8 5 6 2 2. - 0 - 0.0326395481824875 - 0.0310383792966604 - -0.3947426080703735 - <_> - - <_> - - - - <_>10 15 3 2 -1. - <_>11 15 1 2 3. - 0 - 1.1596709955483675e-003 - 0.0520218983292580 - -0.2203582972288132 - <_> - - <_> - - - - <_>12 14 8 1 -1. - <_>16 14 4 1 2. - 0 - -1.4262240147218108e-003 - 0.1074569970369339 - -0.1006707996129990 - <_> - - <_> - - - - <_>11 0 8 13 -1. - <_>15 0 4 13 2. - 0 - -0.2366832941770554 - -0.7317435145378113 - 0.0169996097683907 - <_> - - <_> - - - - <_>12 12 2 8 -1. - <_>12 12 1 4 2. - <_>13 16 1 4 2. - 0 - 1.9279429398011416e-004 - -0.1324844062328339 - 0.0781860277056694 - <_> - - <_> - - - - <_>4 7 8 12 -1. - <_>4 13 8 6 2. - 0 - -0.0172921493649483 - -0.0971998423337936 - 0.1106956005096436 - <_> - - <_> - - - - <_>10 9 2 4 -1. - <_>10 11 2 2 2. - 0 - -1.2431619688868523e-003 - 0.1774147003889084 - -0.0725483372807503 - <_> - - <_> - - - - <_>4 4 3 1 -1. - <_>5 4 1 1 3. - 0 - 2.1754560293629766e-005 - -0.0969520509243011 - 0.1089940965175629 - <_> - - <_> - - - - <_>18 5 1 3 -1. - <_>18 6 1 1 3. - 0 - 3.0975879053585231e-004 - 0.0622498914599419 - -0.1738471984863281 - <_> - - <_> - - - - <_>6 9 9 1 -1. - <_>9 9 3 1 3. - 0 - -0.0115905702114105 - 0.2616280913352966 - -0.0419940799474716 - <_> - - <_> - - - - <_>12 5 4 6 -1. - <_>12 7 4 2 3. - 0 - 0.0181509200483561 - 0.0263535492122173 - -0.4468541145324707 - <_> - - <_> - - - - <_>16 0 4 4 -1. - <_>18 0 2 4 2. - 0 - 8.0223509576171637e-004 - -0.1214386969804764 - 0.0870927870273590 - <_> - - <_> - - - - <_>3 10 2 2 -1. - <_>3 10 1 1 2. - <_>4 11 1 1 2. - 0 - -1.4258639421314001e-003 - 0.1923608034849167 - -0.0529874302446842 - <_> - - <_> - - - - <_>0 0 2 1 -1. - <_>1 0 1 1 2. - 0 - -2.4536260752938688e-004 - -0.1668370068073273 - 0.0656048208475113 - <_> - - <_> - - - - <_>17 4 2 8 -1. - <_>17 4 1 4 2. - <_>18 8 1 4 2. - 0 - 2.2050029656384140e-005 - -0.0934774726629257 - 0.1071171984076500 - <_> - - <_> - - - - <_>7 15 1 3 -1. - <_>7 16 1 1 3. - 0 - 4.7658861149102449e-004 - -0.0805966332554817 - 0.1251268982887268 - <_> - - <_> - - - - <_>0 15 2 1 -1. - <_>1 15 1 1 2. - 0 - 4.0533850551582873e-004 - 0.0689906179904938 - -0.1574075967073441 - <_> - - <_> - - - - <_>7 10 2 4 -1. - <_>7 12 2 2 2. - 0 - -0.0164717491716146 - -0.5966786146163940 - 0.0188761092722416 - <_> - - <_> - - - - <_>4 19 3 1 -1. - <_>5 19 1 1 3. - 0 - 2.2267159074544907e-003 - -0.0458038300275803 - 0.2307108938694000 - <_> - - <_> - - - - <_>2 14 4 5 -1. - <_>4 14 2 5 2. - 0 - 0.0493831895291805 - 0.0198377296328545 - -0.5930610895156860 - <_> - - <_> - - - - <_>4 11 4 4 -1. - <_>4 11 2 2 2. - <_>6 13 2 2 2. - 0 - 8.6411498486995697e-003 - 0.0286973696202040 - -0.3516111969947815 - <_> - - <_> - - - - <_>4 13 2 6 -1. - <_>4 13 1 3 2. - <_>5 16 1 3 2. - 0 - -4.8241391777992249e-003 - 0.2247433960437775 - -0.0484632104635239 - <_> - - <_> - - - - <_>7 3 3 4 -1. - <_>8 3 1 4 3. - 0 - -8.6174849420785904e-003 - -0.5708895921707153 - 0.0191831905394793 - <_> - - <_> - - - - <_>17 11 3 2 -1. - <_>18 11 1 2 3. - 0 - -5.7220697635784745e-004 - 0.1169726997613907 - -0.0889380574226379 - <_> - - <_> - - - - <_>10 4 6 2 -1. - <_>10 5 6 1 2. - 0 - 1.1997730471193790e-003 - 0.0841811224818230 - -0.1256549954414368 - <_> - - <_> - - - - <_>12 3 6 3 -1. - <_>12 4 6 1 3. - 0 - 2.6049909647554159e-003 - 0.0595000311732292 - -0.2063814997673035 - <_> - - <_> - - - - <_>17 12 2 2 -1. - <_>17 12 1 1 2. - <_>18 13 1 1 2. - 0 - -1.4789920533075929e-003 - 0.2511498034000397 - -0.0475350506603718 - <_> - - <_> - - - - <_>5 12 15 8 -1. - <_>10 12 5 8 3. - 0 - -0.2574672102928162 - -0.7303876876831055 - 0.0154406800866127 - <_> - - <_> - - - - <_>4 18 2 2 -1. - <_>4 18 1 1 2. - <_>5 19 1 1 2. - 0 - -1.2104290071874857e-003 - 0.1864697039127350 - -0.0557898096740246 - <_> - - <_> - - - - <_>0 15 2 2 -1. - <_>0 15 1 1 2. - <_>1 16 1 1 2. - 0 - 3.4140399657189846e-004 - 0.0677076727151871 - -0.1559716016054153 - <_> - - <_> - - - - <_>5 9 1 6 -1. - <_>5 12 1 3 2. - 0 - 3.1749058980494738e-003 - 0.0350034609436989 - -0.2952930927276611 - <_> - - <_> - - - - <_>1 0 18 14 -1. - <_>1 7 18 7 2. - 0 - 0.4433881938457489 - 0.0145500199869275 - -0.6103466153144836 - <_> - - <_> - - - - <_>6 2 7 6 -1. - <_>6 5 7 3 2. - 0 - 0.0394582599401474 - -0.0457793287932873 - 0.2292751967906952 - <_> - - <_> - - - - <_>6 16 2 1 -1. - <_>7 16 1 1 2. - 0 - 3.0410829931497574e-003 - 0.0163041297346354 - -0.5749111771583557 - <_> - - <_> - - - - <_>4 11 16 9 -1. - <_>4 14 16 3 3. - 0 - -0.1485302001237869 - -0.5622090101242065 - 0.0157710500061512 - <_> - - <_> - - - - <_>16 9 2 2 -1. - <_>17 9 1 2 2. - 0 - 4.4339009036775678e-005 - -0.0912843719124794 - 0.1092097982764244 - <_> - - <_> - - - - <_>6 8 2 2 -1. - <_>7 8 1 2 2. - 0 - 2.2139810025691986e-003 - -0.0476682893931866 - 0.2229178994894028 - <_> - - <_> - - - - <_>0 14 12 3 -1. - <_>6 14 6 3 2. - 0 - 0.0878319665789604 - 0.0267180595546961 - -0.4039632976055145 - <_> - - <_> - - - - <_>7 6 3 10 -1. - <_>7 11 3 5 2. - 0 - -2.2798930294811726e-003 - -0.1616093069314957 - 0.0660711079835892 - <_> - - <_> - - - - <_>10 11 1 2 -1. - <_>10 12 1 1 2. - 0 - -1.4653969628852792e-005 - 0.0852983593940735 - -0.1272401958703995 - <_> - - <_> - - - - <_>5 17 2 2 -1. - <_>6 17 1 2 2. - 0 - 1.2313240440562367e-003 - -0.0659174770116806 - 0.1660642027854919 - <_> - - <_> - - - - <_>2 0 18 18 -1. - <_>11 0 9 18 2. - 0 - 0.4511098861694336 - 0.0134579604491591 - -0.7152550220489502 - <_> - - <_> - - - - <_>12 11 6 3 -1. - <_>14 11 2 3 3. - 0 - -0.0245186407119036 - -0.4328263998031616 - 0.0204007197171450 - <_> - - <_> - - - - <_>12 12 6 1 -1. - <_>14 12 2 1 3. - 0 - -1.1901959805982187e-004 - 0.0894203335046768 - -0.1183476001024246 - <_> - - <_> - - - - <_>15 10 2 2 -1. - <_>15 10 1 1 2. - <_>16 11 1 1 2. - 0 - -1.3584910193458200e-003 - 0.2472229003906250 - -0.0439074002206326 - <_> - - <_> - - - - <_>3 11 3 8 -1. - <_>4 11 1 8 3. - 0 - 6.9289728999137878e-003 - -0.0568326190114021 - 0.1666574031114578 - <_> - - <_> - - - - <_>6 1 4 12 -1. - <_>8 1 2 12 2. - 0 - -6.9041848182678223e-003 - -0.1274220943450928 - 0.0793106034398079 - <_> - - <_> - - - - <_>6 3 4 8 -1. - <_>8 3 2 8 2. - 0 - 1.2964820489287376e-003 - 0.0724624395370483 - -0.1686387062072754 - <_> - - <_> - - - - <_>8 4 6 12 -1. - <_>11 4 3 12 2. - 0 - 0.0230600591748953 - -0.0509130805730820 - 0.2166478931903839 - <_> - - <_> - - - - <_>16 12 4 5 -1. - <_>18 12 2 5 2. - 0 - -0.0409605689346790 - -0.5647913813591003 - 0.0196095500141382 - <_> - - <_> - - - - <_>14 9 2 3 -1. - <_>15 9 1 3 2. - 0 - 7.4867479270324111e-005 - -0.0694503337144852 - 0.1461513936519623 - <_> - - <_> - - - - <_>9 7 10 6 -1. - <_>14 7 5 6 2. - 0 - -6.8458272144198418e-003 - 0.0660499781370163 - -0.2084072977304459 - <_> - - <_> - - - - <_>12 7 3 11 -1. - <_>13 7 1 11 3. - 0 - 0.0193956494331360 - 0.0161688998341560 - -0.5639616250991821 - <_> - - <_> - - - - <_>19 16 1 2 -1. - <_>19 17 1 1 2. - 0 - -1.6121419321279973e-004 - -0.1319456994533539 - 0.0740941166877747 - <_> - - <_> - - - - <_>8 15 12 1 -1. - <_>14 15 6 1 2. - 0 - 6.6511691547930241e-003 - -0.0552618205547333 - 0.1989438980817795 - <_> - - <_> - - - - <_>10 15 6 3 -1. - <_>10 16 6 1 3. - 0 - 4.5172171667218208e-003 - 0.0328636616468430 - -0.3098089098930359 - <_> - - <_> - - - - <_>6 8 10 4 -1. - <_>6 8 5 2 2. - <_>11 10 5 2 2. - 0 - -0.0402470417320728 - -0.6898034811019898 - 0.0124387396499515 - <_> - - <_> - - - - <_>10 15 1 3 -1. - <_>10 16 1 1 3. - 0 - 7.2544030444987584e-006 - -0.0959498733282089 - 0.0979197993874550 - <_> - - <_> - - - - <_>10 1 9 12 -1. - <_>10 7 9 6 2. - 0 - -0.1602565050125122 - 0.4947263896465302 - -0.0186434295028448 - <_> - - <_> - - - - <_>10 1 1 4 -1. - <_>10 3 1 2 2. - 0 - 5.0598900998011231e-004 - -0.1221657991409302 - 0.0866990983486176 - <_> - - <_> - - - - <_>1 5 18 4 -1. - <_>1 7 18 2 2. - 0 - -0.1050689965486527 - -0.8585562705993652 - 8.2870386540889740e-003 - <_> - - <_> - - - - <_>6 4 12 6 -1. - <_>12 4 6 6 2. - 0 - -0.1821838021278381 - -0.5847731232643127 - 0.0131606003269553 - <_> - - <_> - - - - <_>13 1 7 3 -1. - <_>13 2 7 1 3. - 0 - 0.0164354108273983 - 0.0162963606417179 - -0.5513756275177002 - <_> - - <_> - - - - <_>14 0 6 4 -1. - <_>14 0 3 2 2. - <_>17 2 3 2 2. - 0 - 0.0192825198173523 - -0.0250274799764156 - 0.4364516139030457 - <_> - - <_> - - - - <_>9 12 3 3 -1. - <_>9 13 3 1 3. - 0 - 3.4772949293255806e-003 - 0.0316327810287476 - -0.2924675941467285 - <_> - - <_> - - - - <_>5 14 8 4 -1. - <_>5 14 4 2 2. - <_>9 16 4 2 2. - 0 - 0.0226208698004484 - -0.0239857397973537 - 0.4310530126094818 - <_> - - <_> - - - - <_>1 6 14 14 -1. - <_>8 6 7 14 2. - 0 - -0.1817232072353363 - -0.1803786009550095 - 0.0519034899771214 - <_> - - <_> - - - - <_>13 4 6 2 -1. - <_>13 4 3 1 2. - <_>16 5 3 1 2. - 0 - -4.3819830752909184e-003 - -0.2830285131931305 - 0.0330240391194820 - <_> - - <_> - - - - <_>8 7 6 6 -1. - <_>8 9 6 2 3. - 0 - -0.0152461202815175 - 0.2351991981267929 - -0.0412422493100166 - <_> - - <_> - - - - <_>8 0 12 20 -1. - <_>8 10 12 10 2. - 0 - 0.3904328942298889 - 0.0285306293517351 - -0.3584577143192291 - <_> - - <_> - - - - <_>9 8 4 3 -1. - <_>9 9 4 1 3. - 0 - 3.9103450253605843e-003 - -0.0515237487852573 - 0.1782976984977722 - <_> - - <_> - - - - <_>10 18 8 2 -1. - <_>10 19 8 1 2. - 0 - -0.0108475601300597 - -0.4835528135299683 - 0.0187657903879881 - <_> - - <_> - - - - <_>9 12 4 2 -1. - <_>9 12 2 1 2. - <_>11 13 2 1 2. - 0 - 5.7015339843928814e-003 - 0.0122508304193616 - -0.7045748829841614 - <_> - - <_> - - - - <_>4 14 2 2 -1. - <_>4 14 1 1 2. - <_>5 15 1 1 2. - 0 - -1.1917110532522202e-003 - 0.1840443015098572 - -0.0501446202397347 - <_> - - <_> - - - - <_>5 14 3 2 -1. - <_>5 15 3 1 2. - 0 - 4.0988530963659286e-004 - -0.0973996669054031 - 0.1087457984685898 - <_> - - <_> - - - - <_>11 1 6 3 -1. - <_>13 1 2 3 3. - 0 - 4.5295488089323044e-003 - 0.0453568398952484 - -0.2106914073228836 - <_> - - <_> - - - - <_>6 14 2 3 -1. - <_>6 15 2 1 3. - 0 - -5.4893731139600277e-003 - 0.2964279055595398 - -0.0358708314597607 - <_> - - <_> - - - - <_>14 1 2 2 -1. - <_>15 1 1 2 2. - 0 - 1.9906361121684313e-003 - 0.0343328714370728 - -0.3150646984577179 - <_> - - <_> - - - - <_>0 13 6 7 -1. - <_>3 13 3 7 2. - 0 - 0.0833584666252136 - 0.0196845196187496 - -0.4427998065948486 - <_> - - <_> - - - - <_>17 11 3 1 -1. - <_>18 11 1 1 3. - 0 - 3.0363420955836773e-003 - -0.0336938314139843 - 0.2666968107223511 - <_> - - <_> - - - - <_>5 10 8 4 -1. - <_>9 10 4 4 2. - 0 - 0.0577999688684940 - 8.5875885561108589e-003 - -0.9896581768989563 - <_> - - <_> - - - - <_>7 16 8 4 -1. - <_>7 16 4 2 2. - <_>11 18 4 2 2. - 0 - -7.8585641458630562e-003 - 0.2008845955133438 - -0.0465836413204670 - <_> - - <_> - - - - <_>11 16 4 3 -1. - <_>11 17 4 1 3. - 0 - 1.9253200152888894e-003 - 0.0479223690927029 - -0.2264011055231094 - <_> - - <_> - - - - <_>3 10 6 2 -1. - <_>3 10 3 1 2. - <_>6 11 3 1 2. - 0 - 0.0109969098120928 - 0.0162586607038975 - -0.5404816865921021 - <_> - - <_> - - - - <_>11 7 3 2 -1. - <_>12 7 1 2 3. - 0 - 1.6405170026700944e-004 - -0.1154251024127007 - 0.0760014131665230 - <_> - - <_> - - - - <_>8 7 9 2 -1. - <_>11 7 3 2 3. - 0 - 5.3780381567776203e-003 - 0.1117902994155884 - -0.0841798484325409 - <_> - - <_> - - - - <_>13 6 3 10 -1. - <_>14 6 1 10 3. - 0 - 2.2905960213392973e-003 - -0.0579694807529449 - 0.1689942926168442 - <_> - - <_> - - - - <_>15 10 4 3 -1. - <_>17 10 2 3 2. - 0 - 6.3102580606937408e-003 - 0.0414713993668556 - -0.2047820985317230 - <_> - - <_> - - - - <_>1 10 6 10 -1. - <_>3 10 2 10 3. - 0 - -0.1434257030487061 - -0.7857347726821899 - 0.0116343097761273 - <_> - - <_> - - - - <_>5 0 2 2 -1. - <_>5 0 1 1 2. - <_>6 1 1 1 2. - 0 - 1.2364640133455396e-003 - -0.0518007315695286 - 0.1773435026407242 - <_> - - <_> - - - - <_>3 11 3 6 -1. - <_>3 13 3 2 3. - 0 - -0.0200465507805347 - -0.3142091035842896 - 0.0288490708917379 - <_> - - <_> - - - - <_>4 6 9 10 -1. - <_>7 6 3 10 3. - 0 - 0.1086810976266861 - 0.0161835309118032 - -0.5195630788803101 - <_> - - <_> - - - - <_>6 10 9 5 -1. - <_>9 10 3 5 3. - 0 - 0.0511734895408154 - -0.0324603095650673 - 0.3123018145561218 - <_> - - <_> - - - - <_>10 5 3 9 -1. - <_>11 5 1 9 3. - 0 - 0.0132510699331760 - 0.0236550606787205 - -0.4421024918556213 - <_> - - <_> - - - - <_>3 7 3 4 -1. - <_>4 7 1 4 3. - 0 - -2.0110961049795151e-003 - 0.1035939976572990 - -0.0939614623785019 - <_> - - <_> - - - - <_>4 6 2 2 -1. - <_>4 6 1 1 2. - <_>5 7 1 1 2. - 0 - -3.2843051012605429e-003 - 0.3319692909717560 - -0.0299212802201509 - <_> - - <_> - - - - <_>0 2 2 3 -1. - <_>0 3 2 1 3. - 0 - 8.8341237278655171e-004 - 0.0598918199539185 - -0.1619275063276291 - <_> - - <_> - - - - <_>12 0 8 4 -1. - <_>12 0 4 2 2. - <_>16 2 4 2 2. - 0 - 8.4265992045402527e-003 - -0.0369287505745888 - 0.2369119971990585 - <_> - - <_> - - - - <_>11 1 8 2 -1. - <_>11 1 4 1 2. - <_>15 2 4 1 2. - 0 - -1.4503750207950361e-005 - 0.0773738473653793 - -0.1329060941934586 - <_> - - <_> - - - - <_>12 2 7 3 -1. - <_>12 3 7 1 3. - 0 - 8.0891689285635948e-003 - 0.0288175698369741 - -0.3096123039722443 - <_> - - <_> - - - - <_>3 6 3 2 -1. - <_>4 6 1 2 3. - 0 - 0.0103399399667978 - -0.0248505696654320 - 0.3706004917621613 - <_> - - <_> - - - - <_>4 6 4 6 -1. - <_>4 9 4 3 2. - 0 - -2.2790539078414440e-003 - -0.2205137014389038 - 0.0418775305151939 - <_> - - <_> - - - - <_>13 12 6 4 -1. - <_>13 12 3 2 2. - <_>16 14 3 2 2. - 0 - -1.7716860165819526e-003 - 0.1420508027076721 - -0.0652523636817932 - <_> - - <_> - - - - <_>13 10 2 4 -1. - <_>13 12 2 2 2. - 0 - -6.9317207671701908e-003 - -0.3355607986450195 - 0.0276059694588184 - <_> - - <_> - - - - <_>15 12 3 3 -1. - <_>15 13 3 1 3. - 0 - -4.2506060563027859e-003 - 0.2359198033809662 - -0.0373453199863434 - <_> - - <_> - - - - <_>14 14 2 3 -1. - <_>14 15 2 1 3. - 0 - 1.5317599754780531e-003 - 0.0396570116281509 - -0.2343820035457611 - <_> - - <_> - - - - <_>18 4 2 8 -1. - <_>18 4 1 4 2. - <_>19 8 1 4 2. - 0 - 1.4941049739718437e-003 - -0.0603119991719723 - 0.1446844041347504 - <_> - - <_> - - - - <_>7 14 2 4 -1. - <_>7 14 1 2 2. - <_>8 16 1 2 2. - 0 - -5.2249869331717491e-003 - -0.4066025018692017 - 0.0232572704553604 - <_> - - <_> - - - - <_>14 3 6 6 -1. - <_>14 5 6 2 3. - 0 - 6.4759532688185573e-004 - 0.0648282393813133 - -0.1298730969429016 - <_> - - <_> - - - - <_>19 7 1 2 -1. - <_>19 8 1 1 2. - 0 - 3.2836120226420462e-004 - 0.0619176290929317 - -0.1483581066131592 - <_> - - <_> - - - - <_>8 8 6 2 -1. - <_>8 8 3 1 2. - <_>11 9 3 1 2. - 0 - -3.4691279288381338e-003 - 0.1566284000873566 - -0.0572003498673439 - <_> - - <_> - - - - <_>19 6 1 3 -1. - <_>19 7 1 1 3. - 0 - 4.5903379213996232e-004 - 0.0525178983807564 - -0.1909317970275879 - <_> - - <_> - - - - <_>7 8 7 3 -1. - <_>7 9 7 1 3. - 0 - -2.6641879230737686e-003 - 0.1523590981960297 - -0.0681547001004219 - <_> - - <_> - - - - <_>18 6 2 6 -1. - <_>18 6 1 3 2. - <_>19 9 1 3 2. - 0 - -8.2513149827718735e-003 - 0.3668031096458435 - -0.0284806098788977 - <_> - - <_> - - - - <_>5 8 8 6 -1. - <_>5 10 8 2 3. - 0 - 7.1076201274991035e-003 - 0.1544535011053085 - -0.0679929703474045 - <_> - - <_> - - - - <_>1 1 18 15 -1. - <_>10 1 9 15 2. - 0 - -0.4380800127983093 - -0.2887153029441834 - 0.0366394892334938 - <_> - - <_> - - - - <_>11 7 5 4 -1. - <_>11 9 5 2 2. - 0 - 6.3719082390889525e-004 - -0.1599503010511398 - 0.0598603412508965 - <_> - - <_> - - - - <_>10 12 2 3 -1. - <_>11 12 1 3 2. - 0 - -1.9303169392514974e-004 - 0.0867039710283279 - -0.1092481985688210 - <_> - - <_> - - - - <_>0 7 2 4 -1. - <_>0 9 2 2 2. - 0 - 3.0723758973181248e-003 - 0.0485439598560333 - -0.1770005971193314 - <_> - - <_> - - - - <_>6 12 4 2 -1. - <_>6 12 2 1 2. - <_>8 13 2 1 2. - 0 - 1.8341860268265009e-003 - -0.0519012399017811 - 0.1823212951421738 - <_> - - <_> - - - - <_>7 7 6 8 -1. - <_>7 11 6 4 2. - 0 - 0.0631723105907440 - 0.0233088992536068 - -0.4287061095237732 - <_> - - <_> - - - - <_>9 9 2 4 -1. - <_>9 11 2 2 2. - 0 - 2.4458649568259716e-003 - -0.0864252895116806 - 0.1197450011968613 - <_> - - <_> - - - - <_>9 10 6 6 -1. - <_>9 12 6 2 3. - 0 - 1.1953969951719046e-003 - 0.1168588995933533 - -0.1043049022555351 - <_> - - <_> - - - - <_>12 13 4 2 -1. - <_>12 14 4 1 2. - 0 - 3.1024610507301986e-004 - 0.0622819885611534 - -0.1919602006673813 - <_> - - <_> - - - - <_>0 4 8 1 -1. - <_>4 4 4 1 2. - 0 - -0.0319701582193375 - -0.6418489813804627 - 0.0130875697359443 - <_> - - <_> - - - - <_>14 13 1 2 -1. - <_>14 14 1 1 2. - 0 - -1.0163170518353581e-003 - -0.2521066069602966 - 0.0340962111949921 - <_> - - <_> - - - - <_>8 7 2 6 -1. - <_>8 7 1 3 2. - <_>9 10 1 3 2. - 0 - -5.1776540931314230e-004 - 0.1187409013509750 - -0.0828137770295143 - <_> - - <_> - - - - <_>5 8 10 6 -1. - <_>5 8 5 3 2. - <_>10 11 5 3 2. - 0 - -4.0794219821691513e-003 - -0.1613530963659287 - 0.0657089725136757 - <_> - - <_> - - - - <_>5 12 3 3 -1. - <_>5 13 3 1 3. - 0 - 9.9409874528646469e-003 - -0.0301602203398943 - 0.3510453104972839 - <_> - - <_> - - - - <_>5 10 2 2 -1. - <_>5 11 2 1 2. - 0 - 1.9788760691881180e-003 - -0.0449453592300415 - 0.2329564988613129 - <_> - - <_> - - - - <_>6 2 4 15 -1. - <_>6 7 4 5 3. - 0 - 0.1097524985671043 - 0.0166202206164598 - -0.6042336225509644 - <_> - - <_> - - - - <_>7 6 2 4 -1. - <_>7 6 1 2 2. - <_>8 8 1 2 2. - 0 - -9.2024728655815125e-003 - -0.5600035786628723 - 0.0141229098662734 - <_> - - <_> - - - - <_>5 9 2 3 -1. - <_>5 10 2 1 3. - 0 - 5.8626191457733512e-004 - -0.1062211990356445 - 0.0841980874538422 - <_> - - <_> - - - - <_>15 16 2 2 -1. - <_>15 16 1 1 2. - <_>16 17 1 1 2. - 0 - 3.3601750619709492e-003 - -0.0215835291892290 - 0.4182012975215912 - <_> - - <_> - - - - <_>4 11 4 6 -1. - <_>4 13 4 2 3. - 0 - -0.0481436699628830 - -0.7209215760231018 - 0.0149544598534703 - <_> - - <_> - - - - <_>5 0 3 6 -1. - <_>6 0 1 6 3. - 0 - 0.0122098596766591 - 0.0215442907065153 - -0.3548215031623840 - <_> - - <_> - - - - <_>4 11 12 4 -1. - <_>4 11 6 2 2. - <_>10 13 6 2 2. - 0 - -0.0399614498019218 - -0.8884826898574829 - 9.4328429549932480e-003 - <_> - - <_> - - - - <_>7 13 3 3 -1. - <_>7 14 3 1 3. - 0 - 1.5312479808926582e-003 - -0.0640708804130554 - 0.1356963068246841 - <_> - - <_> - - - - <_>9 12 6 2 -1. - <_>9 13 6 1 2. - 0 - 8.9791123173199594e-005 - 0.0509327687323093 - -0.1839367002248764 - -1.3418790102005005 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>8 0 12 8 -1. - <_>8 0 6 4 2. - <_>14 4 6 4 2. - 0 - -0.0387413688004017 - 0.2877883017063141 - -0.2331219017505646 - <_> - - <_> - - - - <_>10 8 4 4 -1. - <_>10 8 2 2 2. - <_>12 10 2 2 2. - 0 - -2.5511500425636768e-003 - 0.2510859966278076 - -0.2111607044935226 - <_> - - <_> - - - - <_>12 10 1 6 -1. - <_>12 13 1 3 2. - 0 - -2.7973129181191325e-004 - 0.0899169221520424 - -0.3406926989555359 - <_> - - <_> - - - - <_>5 5 3 10 -1. - <_>6 5 1 10 3. - 0 - 1.1981100542470813e-003 - -0.2254222929477692 - 0.1360266059637070 - <_> - - <_> - - - - <_>4 0 14 6 -1. - <_>11 0 7 6 2. - 0 - -5.6686070747673512e-003 - 0.0828472599387169 - -0.2808071076869965 - <_> - - <_> - - - - <_>9 7 2 6 -1. - <_>9 7 1 3 2. - <_>10 10 1 3 2. - 0 - -2.7642669738270342e-004 - 0.1048547998070717 - -0.1884865015745163 - <_> - - <_> - - - - <_>8 4 3 1 -1. - <_>9 4 1 1 3. - 0 - 2.0516710355877876e-003 - 3.4714280627667904e-003 - -0.4860847890377045 - <_> - - <_> - - - - <_>11 14 2 2 -1. - <_>11 15 2 1 2. - 0 - -1.4435249795496929e-005 - 0.0842758193612099 - -0.1935610026121140 - <_> - - <_> - - - - <_>9 18 6 2 -1. - <_>12 18 3 2 2. - 0 - 7.4418791336938739e-004 - -0.1252675056457520 - 0.1176951974630356 - <_> - - <_> - - - - <_>8 12 8 6 -1. - <_>8 15 8 3 2. - 0 - -0.0499232411384583 - -0.4008029997348785 - 0.0279103908687830 - <_> - - <_> - - - - <_>7 0 8 6 -1. - <_>7 2 8 2 3. - 0 - 9.2694535851478577e-003 - -0.0910889133810997 - 0.1755045056343079 - <_> - - <_> - - - - <_>1 2 12 3 -1. - <_>5 2 4 3 3. - 0 - -7.4646030552685261e-003 - 0.1638046950101852 - -0.1038549989461899 - <_> - - <_> - - - - <_>5 4 10 12 -1. - <_>5 4 5 6 2. - <_>10 10 5 6 2. - 0 - -8.1985909491777420e-003 - -0.1916898041963577 - 0.0854150205850601 - <_> - - <_> - - - - <_>5 8 3 2 -1. - <_>5 9 3 1 2. - 0 - -8.1690691877156496e-004 - -0.3079330921173096 - 0.0408335812389851 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - 2.8902110643684864e-003 - -0.0503242015838623 - 0.2925941944122315 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>5 12 3 1 3. - 0 - 8.0008199438452721e-003 - -0.0468635782599449 - 0.3196487128734589 - <_> - - <_> - - - - <_>8 10 6 9 -1. - <_>8 13 6 3 3. - 0 - -5.8349180035293102e-003 - -0.1548918038606644 - 0.0881372615695000 - <_> - - <_> - - - - <_>7 8 3 6 -1. - <_>7 10 3 2 3. - 0 - -1.2492289533838630e-003 - -0.3629462122917175 - 0.0361209884285927 - <_> - - <_> - - - - <_>3 4 3 14 -1. - <_>4 4 1 14 3. - 0 - 0.0229504797607660 - -0.0471197701990604 - 0.2853271961212158 - <_> - - <_> - - - - <_>3 10 3 6 -1. - <_>4 10 1 6 3. - 0 - -6.9193239323794842e-003 - 0.1787364929914475 - -0.0735475569963455 - <_> - - <_> - - - - <_>4 8 2 2 -1. - <_>4 8 1 1 2. - <_>5 9 1 1 2. - 0 - -1.9392240210436285e-004 - 0.1391142010688782 - -0.0924891009926796 - <_> - - <_> - - - - <_>10 13 2 3 -1. - <_>10 14 2 1 3. - 0 - 1.9811228848993778e-003 - 0.0434480085968971 - -0.3094269037246704 - <_> - - <_> - - - - <_>6 14 8 4 -1. - <_>6 14 4 2 2. - <_>10 16 4 2 2. - 0 - 0.0160184893757105 - -0.0397189185023308 - 0.3424893915653229 - <_> - - <_> - - - - <_>5 12 3 4 -1. - <_>6 12 1 4 3. - 0 - 9.3541406095027924e-003 - 0.0324826501309872 - -0.4450210034847260 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - -1.3822780456393957e-003 - 0.2162707000970841 - -0.0564102008938789 - <_> - - <_> - - - - <_>15 6 1 10 -1. - <_>15 11 1 5 2. - 0 - 0.0250658206641674 - 0.0231232307851315 - -0.5395401120185852 - <_> - - <_> - - - - <_>7 1 12 6 -1. - <_>7 3 12 2 3. - 0 - 0.0597985796630383 - 0.0287475790828466 - -0.3657259047031403 - <_> - - <_> - - - - <_>4 9 2 4 -1. - <_>4 9 1 2 2. - <_>5 11 1 2 2. - 0 - -2.7519159484654665e-003 - 0.1749134957790375 - -0.0639909729361534 - <_> - - <_> - - - - <_>6 7 6 12 -1. - <_>9 7 3 12 2. - 0 - -0.0320936404168606 - -0.2569555044174194 - 0.0409451089799404 - <_> - - <_> - - - - <_>7 6 2 3 -1. - <_>8 6 1 3 2. - 0 - -2.3349749390035868e-003 - 0.1543388068675995 - -0.0728366896510124 - <_> - - <_> - - - - <_>0 1 1 3 -1. - <_>0 2 1 1 3. - 0 - 2.6897678617388010e-004 - 0.0727212429046631 - -0.1551322042942047 - <_> - - <_> - - - - <_>0 1 1 3 -1. - <_>0 2 1 1 3. - 0 - -8.9813407976180315e-004 - -0.2069962024688721 - 0.0537382215261459 - <_> - - <_> - - - - <_>11 15 3 5 -1. - <_>12 15 1 5 3. - 0 - 3.8521869573742151e-003 - 0.0365620106458664 - -0.2807596921920776 - <_> - - <_> - - - - <_>8 6 4 6 -1. - <_>8 8 4 2 3. - 0 - 0.0134400902315974 - -0.0360464788973331 - 0.3187696039676666 - <_> - - <_> - - - - <_>5 3 3 12 -1. - <_>5 7 3 4 3. - 0 - 7.7129118144512177e-003 - 0.0959600135684013 - -0.1178748980164528 - <_> - - <_> - - - - <_>7 9 2 2 -1. - <_>7 9 1 1 2. - <_>8 10 1 1 2. - 0 - 2.1991880203131586e-004 - -0.1324986964464188 - 0.0849395766854286 - <_> - - <_> - - - - <_>4 4 2 12 -1. - <_>4 8 2 4 3. - 0 - -7.4781170114874840e-003 - -0.2307303994894028 - 0.0503109283745289 - <_> - - <_> - - - - <_>4 5 7 3 -1. - <_>4 6 7 1 3. - 0 - 8.9175272732973099e-003 - -0.0539247691631317 - 0.2032064050436020 - <_> - - <_> - - - - <_>13 5 2 3 -1. - <_>13 6 2 1 3. - 0 - 2.2819850128144026e-003 - 0.0352649092674255 - -0.3084133863449097 - <_> - - <_> - - - - <_>4 0 2 2 -1. - <_>4 0 1 1 2. - <_>5 1 1 1 2. - 0 - 2.6413009036332369e-003 - -0.0329392291605473 - 0.3172146081924439 - <_> - - <_> - - - - <_>11 8 3 11 -1. - <_>12 8 1 11 3. - 0 - -1.4605689793825150e-003 - -0.1715427935123444 - 0.0633745566010475 - <_> - - <_> - - - - <_>4 0 2 2 -1. - <_>4 0 1 1 2. - <_>5 1 1 1 2. - 0 - -3.1993410084396601e-003 - 0.3450168073177338 - -0.0307174902409315 - <_> - - <_> - - - - <_>9 3 2 2 -1. - <_>9 3 1 1 2. - <_>10 4 1 1 2. - 0 - 2.3919229861348867e-003 - 0.0208875201642513 - -0.4856416881084442 - <_> - - <_> - - - - <_>7 11 3 2 -1. - <_>8 11 1 2 3. - 0 - -3.5997610539197922e-003 - 0.2890053093433380 - -0.0356058217585087 - <_> - - <_> - - - - <_>11 12 2 1 -1. - <_>12 12 1 1 2. - 0 - -1.4754279618500732e-005 - 0.0727446228265762 - -0.1458061933517456 - <_> - - <_> - - - - <_>8 8 4 2 -1. - <_>10 8 2 2 2. - 0 - 0.0159683600068092 - 0.0125485500320792 - -0.6744545102119446 - <_> - - <_> - - - - <_>17 15 3 1 -1. - <_>18 15 1 1 3. - 0 - -4.0752082131803036e-003 - 0.3144747018814087 - -0.0321554504334927 - <_> - - <_> - - - - <_>12 6 2 4 -1. - <_>12 6 1 2 2. - <_>13 8 1 2 2. - 0 - 7.5432872108649462e-005 - -0.0997386574745178 - 0.0896650925278664 - <_> - - <_> - - - - <_>8 3 9 11 -1. - <_>11 3 3 11 3. - 0 - -0.0396322496235371 - 0.2761740088462830 - -0.0348007306456566 - <_> - - <_> - - - - <_>10 8 2 2 -1. - <_>11 8 1 2 2. - 0 - 2.9354610887821764e-005 - -0.1402300000190735 - 0.0885196104645729 - <_> - - <_> - - - - <_>12 5 3 9 -1. - <_>12 8 3 3 3. - 0 - 0.0318189896643162 - 0.0299256499856710 - -0.3395833969116211 - <_> - - <_> - - - - <_>13 0 6 17 -1. - <_>15 0 2 17 3. - 0 - 0.1269010007381439 - 0.0112633900716901 - -0.8993232846260071 - <_> - - <_> - - - - <_>6 6 3 4 -1. - <_>7 6 1 4 3. - 0 - -3.5952320322394371e-003 - 0.1775175929069519 - -0.0581134893000126 - <_> - - <_> - - - - <_>5 6 4 7 -1. - <_>7 6 2 7 2. - 0 - -0.0192312598228455 - -0.3317398130893707 - 0.0405871011316776 - <_> - - <_> - - - - <_>7 5 3 2 -1. - <_>8 5 1 2 3. - 0 - 2.2836721036583185e-003 - 0.0372060090303421 - -0.2837064862251282 - <_> - - <_> - - - - <_>7 15 6 2 -1. - <_>7 15 3 1 2. - <_>10 16 3 1 2. - 0 - -1.6381660243496299e-003 - 0.1462917029857636 - -0.0677815228700638 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - 2.1173330023884773e-003 - 0.0207739695906639 - -0.4392867982387543 - <_> - - <_> - - - - <_>2 12 6 7 -1. - <_>4 12 2 7 3. - 0 - 6.4710620790719986e-003 - -0.0721339285373688 - 0.1398161053657532 - <_> - - <_> - - - - <_>11 17 5 3 -1. - <_>11 18 5 1 3. - 0 - -3.1431620009243488e-003 - -0.1990344971418381 - 0.0475446693599224 - <_> - - <_> - - - - <_>17 11 2 2 -1. - <_>17 11 1 1 2. - <_>18 12 1 1 2. - 0 - 1.6056640306487679e-003 - -0.0397518984973431 - 0.2593173980712891 - <_> - - <_> - - - - <_>10 17 6 3 -1. - <_>10 18 6 1 3. - 0 - 4.8740832135081291e-003 - 0.0340823791921139 - -0.2761198878288269 - <_> - - <_> - - - - <_>2 15 1 2 -1. - <_>2 16 1 1 2. - 0 - -9.6354109700769186e-005 - -0.1070960983633995 - 0.0835031867027283 - <_> - - <_> - - - - <_>8 6 3 3 -1. - <_>8 7 3 1 3. - 0 - 7.7706458978354931e-003 - -0.0300953499972820 - 0.2949387133121491 - <_> - - <_> - - - - <_>7 7 1 2 -1. - <_>7 8 1 1 2. - 0 - 1.3028859393671155e-004 - -0.1123289018869400 - 0.0945786833763123 - <_> - - <_> - - - - <_>2 15 2 2 -1. - <_>2 16 2 1 2. - 0 - 1.2239719508215785e-003 - 0.0519996210932732 - -0.1810626983642578 - <_> - - <_> - - - - <_>3 16 3 1 -1. - <_>4 16 1 1 3. - 0 - -8.7549741147086024e-004 - 0.1427669972181320 - -0.0750989466905594 - <_> - - <_> - - - - <_>3 0 3 20 -1. - <_>4 0 1 20 3. - 0 - -0.0880819931626320 - -0.7084882855415344 - 0.0143536403775215 - <_> - - <_> - - - - <_>8 2 12 12 -1. - <_>14 2 6 12 2. - 0 - -0.3285416066646576 - -0.4968742132186890 - 0.0166046004742384 - <_> - - <_> - - - - <_>5 3 2 3 -1. - <_>5 4 2 1 3. - 0 - 9.8696127533912659e-003 - 0.0193643700331450 - -0.4997830092906952 - <_> - - <_> - - - - <_>3 4 2 2 -1. - <_>3 4 1 1 2. - <_>4 5 1 1 2. - 0 - -2.7273639570921659e-003 - 0.2961252033710480 - -0.0328314006328583 - <_> - - <_> - - - - <_>0 15 20 3 -1. - <_>10 15 10 3 2. - 0 - 0.0991001427173615 - 0.0197990797460079 - -0.4734495878219605 - <_> - - <_> - - - - <_>6 13 2 4 -1. - <_>6 13 1 2 2. - <_>7 15 1 2 2. - 0 - -6.3501899130642414e-003 - -0.5150471925735474 - 0.0169860105961561 - <_> - - <_> - - - - <_>12 8 3 7 -1. - <_>13 8 1 7 3. - 0 - 2.9596920285257511e-005 - -0.1092301979660988 - 0.0896561071276665 - <_> - - <_> - - - - <_>8 9 6 10 -1. - <_>8 9 3 5 2. - <_>11 14 3 5 2. - 0 - 0.0212476700544357 - -0.0414621904492378 - 0.2268427014350891 - <_> - - <_> - - - - <_>2 10 16 2 -1. - <_>10 10 8 2 2. - 0 - -0.0729779899120331 - -0.6322783827781677 - 0.0166788697242737 - <_> - - <_> - - - - <_>5 3 15 6 -1. - <_>10 3 5 6 3. - 0 - 0.1623091995716095 - -0.0256619099527597 - 0.3753314018249512 - <_> - - <_> - - - - <_>10 14 2 1 -1. - <_>11 14 1 1 2. - 0 - -1.4590819773729891e-005 - 0.0856136009097099 - -0.1190098971128464 - <_> - - <_> - - - - <_>9 11 4 4 -1. - <_>11 11 2 4 2. - 0 - 2.7719149366021156e-003 - -0.0546492487192154 - 0.2031137943267822 - <_> - - <_> - - - - <_>12 8 2 4 -1. - <_>12 10 2 2 2. - 0 - -8.7484354153275490e-003 - -0.7367451786994934 - 0.0155718903988600 - <_> - - <_> - - - - <_>1 3 10 14 -1. - <_>1 3 5 7 2. - <_>6 10 5 7 2. - 0 - 0.0136791998520494 - 0.0789029300212860 - -0.1159050017595291 - <_> - - <_> - - - - <_>8 0 3 4 -1. - <_>8 2 3 2 2. - 0 - -0.0110011501237750 - 0.3169082105159760 - -0.0323849916458130 - <_> - - <_> - - - - <_>10 2 2 1 -1. - <_>11 2 1 1 2. - 0 - 3.2964799902401865e-004 - 0.0500165298581123 - -0.2045145034790039 - <_> - - <_> - - - - <_>5 12 5 3 -1. - <_>5 13 5 1 3. - 0 - 2.7753270696848631e-003 - -0.0674074292182922 - 0.1593590974807739 - <_> - - <_> - - - - <_>7 12 1 3 -1. - <_>7 13 1 1 3. - 0 - -2.8740249108523130e-003 - 0.2245596051216126 - -0.0510314889252186 - <_> - - <_> - - - - <_>10 12 6 3 -1. - <_>10 13 6 1 3. - 0 - 8.1631669308990240e-004 - 0.0698495507240295 - -0.1479161977767944 - <_> - - <_> - - - - <_>6 4 1 3 -1. - <_>6 5 1 1 3. - 0 - 3.7573580630123615e-003 - 0.0315946005284786 - -0.3138797879219055 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>2 1 18 1 3. - 0 - -3.4902389161288738e-003 - 0.1163842976093292 - -0.0859479308128357 - <_> - - <_> - - - - <_>8 8 11 6 -1. - <_>8 10 11 2 3. - 0 - -0.0294153206050396 - 0.6840342879295349 - -0.0161406099796295 - <_> - - <_> - - - - <_>2 6 10 8 -1. - <_>2 6 5 4 2. - <_>7 10 5 4 2. - 0 - -8.8095385581254959e-003 - -0.2077531963586807 - 0.0499508902430534 - <_> - - <_> - - - - <_>9 2 6 2 -1. - <_>11 2 2 2 3. - 0 - -0.0154599398374558 - -0.4874846041202545 - 0.0200655590742826 - <_> - - <_> - - - - <_>13 9 6 3 -1. - <_>15 9 2 3 3. - 0 - -0.0364813692867756 - -0.5239514112472534 - 0.0158509891480207 - <_> - - <_> - - - - <_>5 3 1 2 -1. - <_>5 4 1 1 2. - 0 - -8.8937362306751311e-005 - -0.1329932063817978 - 0.0669268071651459 - <_> - - <_> - - - - <_>1 7 3 1 -1. - <_>2 7 1 1 3. - 0 - 1.4536709932144731e-004 - 0.0871703699231148 - -0.1043582037091255 - <_> - - <_> - - - - <_>0 6 8 6 -1. - <_>4 6 4 6 2. - 0 - 0.1521687954664230 - 0.0161405801773071 - -0.6497017145156860 - <_> - - <_> - - - - <_>11 9 1 2 -1. - <_>11 10 1 1 2. - 0 - -4.2344830580987036e-004 - 0.1804583966732025 - -0.0529745407402515 - <_> - - <_> - - - - <_>12 13 1 2 -1. - <_>12 14 1 1 2. - 0 - 1.0672640055418015e-003 - 0.0205483809113503 - -0.4824204146862030 - <_> - - <_> - - - - <_>10 15 10 4 -1. - <_>10 15 5 2 2. - <_>15 17 5 2 2. - 0 - 0.0154916802421212 - -0.0515408515930176 - 0.1836396008729935 - <_> - - <_> - - - - <_>12 11 1 2 -1. - <_>12 12 1 1 2. - 0 - 6.1393307987600565e-004 - 0.0299837291240692 - -0.3103170096874237 - <_> - - <_> - - - - <_>6 11 2 1 -1. - <_>7 11 1 1 2. - 0 - -1.4619939975091256e-005 - 0.1036849990487099 - -0.0916341319680214 - <_> - - <_> - - - - <_>11 3 3 2 -1. - <_>12 3 1 2 3. - 0 - 6.9900648668408394e-003 - 0.0146839097142220 - -0.5948538184165955 - <_> - - <_> - - - - <_>4 7 6 5 -1. - <_>7 7 3 5 2. - 0 - -5.3000110201537609e-003 - -0.1245777010917664 - 0.0705427825450897 - <_> - - <_> - - - - <_>3 16 3 1 -1. - <_>4 16 1 1 3. - 0 - 5.0289987120777369e-004 - -0.0771356895565987 - 0.1222871020436287 - <_> - - <_> - - - - <_>4 7 6 5 -1. - <_>7 7 3 5 2. - 0 - 0.0111909797415137 - 0.0503080599009991 - -0.1809180974960327 - <_> - - <_> - - - - <_>5 7 6 3 -1. - <_>7 7 2 3 3. - 0 - 0.0170198194682598 - -0.0388167686760426 - 0.3085198104381561 - <_> - - <_> - - - - <_>7 8 4 8 -1. - <_>7 8 2 4 2. - <_>9 12 2 4 2. - 0 - -5.8241572696715593e-004 - 0.1253779977560043 - -0.0761154815554619 - <_> - - <_> - - - - <_>4 2 14 12 -1. - <_>4 6 14 4 3. - 0 - 0.0200366694480181 - 0.0498994812369347 - -0.1808298975229263 - <_> - - <_> - - - - <_>4 14 2 6 -1. - <_>4 14 1 3 2. - <_>5 17 1 3 2. - 0 - -5.4328818805515766e-003 - 0.2340977042913437 - -0.0423854105174541 - <_> - - <_> - - - - <_>7 11 2 4 -1. - <_>7 13 2 2 2. - 0 - -2.9535360226873308e-005 - 0.0576302409172058 - -0.1575352996587753 - <_> - - <_> - - - - <_>6 4 10 15 -1. - <_>6 9 10 5 3. - 0 - -0.1035237014293671 - 0.7158774137496948 - -0.0129899298772216 - <_> - - <_> - - - - <_>6 11 12 6 -1. - <_>6 13 12 2 3. - 0 - -0.0121222697198391 - -0.1478897035121918 - 0.0665664374828339 - <_> - - <_> - - - - <_>6 17 4 3 -1. - <_>6 18 4 1 3. - 0 - 3.0254870653152466e-003 - -0.0543786287307739 - 0.1714082956314087 - <_> - - <_> - - - - <_>6 17 4 3 -1. - <_>6 18 4 1 3. - 0 - -5.8111078105866909e-003 - 0.2442214936017990 - -0.0576526410877705 - <_> - - <_> - - - - <_>9 13 3 7 -1. - <_>10 13 1 7 3. - 0 - 8.2830740138888359e-003 - 0.0227204002439976 - -0.4296199977397919 - <_> - - <_> - - - - <_>2 8 5 2 -1. - <_>2 9 5 1 2. - 0 - 0.0123751200735569 - 0.0228102896362543 - -0.3750562965869904 - <_> - - <_> - - - - <_>14 1 3 8 -1. - <_>15 1 1 8 3. - 0 - 0.0192112103104591 - 0.0117910597473383 - -0.6552945971488953 - <_> - - <_> - - - - <_>2 12 1 2 -1. - <_>2 13 1 1 2. - 0 - 3.1843129545450211e-004 - 0.0641300603747368 - -0.1399556994438171 - <_> - - <_> - - - - <_>8 6 2 2 -1. - <_>8 6 1 1 2. - <_>9 7 1 1 2. - 0 - 8.4224628517404199e-004 - -0.0541342794895172 - 0.1752558052539825 - <_> - - <_> - - - - <_>4 3 10 12 -1. - <_>4 9 10 6 2. - 0 - -0.1608504951000214 - -0.9457141757011414 - 7.8549478203058243e-003 - <_> - - <_> - - - - <_>5 9 8 4 -1. - <_>5 9 4 2 2. - <_>9 11 4 2 2. - 0 - -1.6774870455265045e-003 - -0.1916612982749939 - 0.0457870289683342 - <_> - - <_> - - - - <_>9 9 4 4 -1. - <_>9 11 4 2 2. - 0 - -1.8989649834111333e-003 - 0.1578315049409866 - -0.0658969134092331 - <_> - - <_> - - - - <_>5 10 4 2 -1. - <_>5 11 4 1 2. - 0 - 4.0205760160461068e-004 - -0.0735990926623344 - 0.1311838030815125 - <_> - - <_> - - - - <_>6 17 2 1 -1. - <_>7 17 1 1 2. - 0 - 2.4369959719479084e-003 - 0.0235228706151247 - -0.4274596869945526 - <_> - - <_> - - - - <_>12 12 2 1 -1. - <_>13 12 1 1 2. - 0 - -2.8488409952842630e-005 - 0.0632806196808815 - -0.1359900981187820 - <_> - - <_> - - - - <_>11 6 4 8 -1. - <_>13 6 2 8 2. - 0 - 0.0195386391133070 - -0.0214582700282335 - 0.4753474891185761 - <_> - - <_> - - - - <_>9 4 3 10 -1. - <_>10 4 1 10 3. - 0 - -1.6530340071767569e-003 - -0.1532326042652130 - 0.0594559796154499 - <_> - - <_> - - - - <_>0 18 9 2 -1. - <_>3 18 3 2 3. - 0 - -2.1052840165793896e-003 - 0.1101763993501663 - -0.0831181034445763 - <_> - - <_> - - - - <_>15 13 3 3 -1. - <_>15 14 3 1 3. - 0 - -4.5266482047736645e-003 - 0.2581537961959839 - -0.0357439406216145 - <_> - - <_> - - - - <_>9 12 2 2 -1. - <_>9 12 1 1 2. - <_>10 13 1 1 2. - 0 - -1.6275560483336449e-004 - -0.1354829072952271 - 0.0692957267165184 - <_> - - <_> - - - - <_>13 12 7 3 -1. - <_>13 13 7 1 3. - 0 - -3.3048219047486782e-003 - 0.1780602931976318 - -0.0521564409136772 - <_> - - <_> - - - - <_>14 10 6 2 -1. - <_>14 11 6 1 2. - 0 - -5.1905210129916668e-003 - -0.3489732146263123 - 0.0259909909218550 - <_> - - <_> - - - - <_>14 5 5 14 -1. - <_>14 12 5 7 2. - 0 - 0.1119081005454063 - 0.0299620293080807 - -0.2959755063056946 - <_> - - <_> - - - - <_>4 16 5 3 -1. - <_>4 17 5 1 3. - 0 - -5.2873138338327408e-003 - 0.1856449991464615 - -0.0502162985503674 - <_> - - <_> - - - - <_>5 16 5 3 -1. - <_>5 17 5 1 3. - 0 - 2.6098049711436033e-003 - -0.0735592767596245 - 0.1436513066291809 - <_> - - <_> - - - - <_>8 14 4 5 -1. - <_>10 14 2 5 2. - 0 - -2.8581928927451372e-003 - -0.1260513961315155 - 0.0754330828785896 - <_> - - <_> - - - - <_>9 14 2 1 -1. - <_>10 14 1 1 2. - 0 - -2.9555680157500319e-005 - 0.1073331013321877 - -0.1038620024919510 - <_> - - <_> - - - - <_>6 10 6 2 -1. - <_>6 10 3 1 2. - <_>9 11 3 1 2. - 0 - 5.9023561334470287e-005 - -0.1302911937236786 - 0.0764783918857574 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>8 8 3 6 2. - 0 - -0.0433447211980820 - -0.6929922103881836 - 0.0141733000054955 - <_> - - <_> - - - - <_>10 13 7 6 -1. - <_>10 15 7 2 3. - 0 - -0.0469469986855984 - -0.5580375194549561 - 0.0124229202046990 - <_> - - <_> - - - - <_>4 1 2 8 -1. - <_>4 1 1 4 2. - <_>5 5 1 4 2. - 0 - -0.0151890600100160 - 0.3704977035522461 - -0.0255641192197800 - <_> - - <_> - - - - <_>3 6 6 4 -1. - <_>3 6 3 2 2. - <_>6 8 3 2 2. - 0 - 0.0163618791848421 - 0.0270499791949987 - -0.3427892029285431 - <_> - - <_> - - - - <_>15 2 3 13 -1. - <_>16 2 1 13 3. - 0 - 0.0407528392970562 - 9.3995258212089539e-003 - -0.8868371248245239 - <_> - - <_> - - - - <_>16 10 2 6 -1. - <_>16 10 1 3 2. - <_>17 13 1 3 2. - 0 - -0.0108798695728183 - 0.5326058268547058 - -0.0194508600980043 - <_> - - <_> - - - - <_>13 19 2 1 -1. - <_>14 19 1 1 2. - 0 - -7.7538257755804807e-005 - -0.1169624999165535 - 0.0772882327437401 - <_> - - <_> - - - - <_>7 11 2 1 -1. - <_>8 11 1 1 2. - 0 - -4.0953079587779939e-004 - 0.1621436029672623 - -0.0537114888429642 - <_> - - <_> - - - - <_>4 10 3 4 -1. - <_>5 10 1 4 3. - 0 - -0.0184642393141985 - -0.5084478855133057 - 0.0198381897062063 - <_> - - <_> - - - - <_>4 7 2 4 -1. - <_>4 7 1 2 2. - <_>5 9 1 2 2. - 0 - -5.6788129732012749e-003 - 0.3020392060279846 - -0.0302039906382561 - <_> - - <_> - - - - <_>10 7 5 4 -1. - <_>10 9 5 2 2. - 0 - 3.8324110209941864e-004 - -0.1684108972549439 - 0.0549020282924175 - <_> - - <_> - - - - <_>7 4 8 16 -1. - <_>7 4 4 8 2. - <_>11 12 4 8 2. - 0 - 6.4761550165712833e-003 - 0.0951402634382248 - -0.1074616014957428 - <_> - - <_> - - - - <_>5 9 10 6 -1. - <_>5 9 5 3 2. - <_>10 12 5 3 2. - 0 - -2.4377859663218260e-003 - -0.1564771980047226 - 0.0634076073765755 - <_> - - <_> - - - - <_>5 11 3 2 -1. - <_>5 12 3 1 2. - 0 - 5.4156291298568249e-004 - -0.0659622997045517 - 0.1844162940979004 - <_> - - <_> - - - - <_>12 12 4 8 -1. - <_>12 16 4 4 2. - 0 - 0.0279170293360949 - -0.0275902301073074 - 0.3503274023532867 - <_> - - <_> - - - - <_>8 13 6 2 -1. - <_>8 14 6 1 2. - 0 - 4.6622849185951054e-004 - 0.0496288202702999 - -0.2262417972087860 - <_> - - <_> - - - - <_>3 12 5 6 -1. - <_>3 14 5 2 3. - 0 - -0.0373167991638184 - -0.4297817051410675 - 0.0213376805186272 - <_> - - <_> - - - - <_>16 0 2 2 -1. - <_>16 0 1 1 2. - <_>17 1 1 1 2. - 0 - -2.6047111023217440e-003 - 0.3665099143981934 - -0.0254050493240356 - <_> - - <_> - - - - <_>13 3 3 4 -1. - <_>14 3 1 4 3. - 0 - 5.1927138119935989e-003 - 0.0268779303878546 - -0.3347857892513275 - <_> - - <_> - - - - <_>15 11 3 1 -1. - <_>16 11 1 1 3. - 0 - 3.0462879221886396e-003 - -0.0308482907712460 - 0.2978835999965668 - <_> - - <_> - - - - <_>14 0 6 5 -1. - <_>16 0 2 5 3. - 0 - -4.1325599886476994e-004 - 0.0729867890477180 - -0.1214753016829491 - <_> - - <_> - - - - <_>10 1 8 18 -1. - <_>10 10 8 9 2. - 0 - -0.1145612001419067 - 0.3195546865463257 - -0.0333798006176949 - <_> - - <_> - - - - <_>11 5 3 2 -1. - <_>11 6 3 1 2. - 0 - -1.3044059742242098e-003 - -0.2062529027462006 - 0.0546343699097633 - <_> - - <_> - - - - <_>5 5 2 1 -1. - <_>6 5 1 1 2. - 0 - 4.5045089791528881e-005 - -0.1137655004858971 - 0.0781233832240105 - <_> - - <_> - - - - <_>3 4 3 3 -1. - <_>4 4 1 3 3. - 0 - 1.8890319624915719e-003 - -0.0655787289142609 - 0.1700129956007004 - <_> - - <_> - - - - <_>11 14 1 3 -1. - <_>11 15 1 1 3. - 0 - -5.4107961477711797e-004 - -0.1818414032459259 - 0.0516118109226227 - <_> - - <_> - - - - <_>16 13 3 3 -1. - <_>16 14 3 1 3. - 0 - 4.4150161556899548e-003 - -0.0363247804343700 - 0.2493844926357269 - <_> - - <_> - - - - <_>15 8 5 12 -1. - <_>15 14 5 6 2. - 0 - -0.0218780506402254 - -0.1764367967844009 - 0.0548111088573933 - <_> - - <_> - - - - <_>3 0 3 10 -1. - <_>4 0 1 10 3. - 0 - -2.0328219980001450e-003 - 0.0942661836743355 - -0.0971294119954109 - <_> - - <_> - - - - <_>15 15 1 2 -1. - <_>15 16 1 1 2. - 0 - 2.6754371356219053e-004 - 0.0574879311025143 - -0.1544201970100403 - <_> - - <_> - - - - <_>15 0 4 2 -1. - <_>15 0 2 1 2. - <_>17 1 2 1 2. - 0 - 1.4061420224606991e-003 - -0.0502689592540264 - 0.1881417036056519 - <_> - - <_> - - - - <_>17 2 2 1 -1. - <_>18 2 1 1 2. - 0 - 2.0725419744849205e-004 - 0.0776591897010803 - -0.1253813058137894 - <_> - - <_> - - - - <_>8 13 1 3 -1. - <_>8 14 1 1 3. - 0 - 1.8001600401476026e-003 - -0.0426756404340267 - 0.2243064939975739 - <_> - - <_> - - - - <_>9 1 2 6 -1. - <_>9 1 1 3 2. - <_>10 4 1 3 2. - 0 - -4.6744230203330517e-003 - -0.3348047137260437 - 0.0293644201010466 - <_> - - <_> - - - - <_>1 12 9 3 -1. - <_>1 13 9 1 3. - 0 - 7.2110369801521301e-003 - -0.0524413287639618 - 0.1889156997203827 - <_> - - <_> - - - - <_>12 14 3 3 -1. - <_>12 15 3 1 3. - 0 - 2.3627521004527807e-003 - 0.0344000607728958 - -0.2720044851303101 - <_> - - <_> - - - - <_>15 10 3 1 -1. - <_>16 10 1 1 3. - 0 - -1.3181479880586267e-003 - 0.1776771992444992 - -0.0563636310398579 - <_> - - <_> - - - - <_>9 6 9 1 -1. - <_>12 6 3 1 3. - 0 - -1.7586319881957024e-004 - 0.0915342420339584 - -0.1041231006383896 - <_> - - <_> - - - - <_>12 5 3 7 -1. - <_>13 5 1 7 3. - 0 - -2.5801590527407825e-004 - -0.1122677996754646 - 0.0813818126916885 - <_> - - <_> - - - - <_>8 2 2 2 -1. - <_>8 3 2 1 2. - 0 - 9.6790950919967145e-005 - -0.1188192963600159 - 0.0718831866979599 - <_> - - <_> - - - - <_>7 0 9 2 -1. - <_>7 1 9 1 2. - 0 - 8.2001117989420891e-003 - -0.0402545295655727 - 0.2279089987277985 - <_> - - <_> - - - - <_>13 5 2 5 -1. - <_>14 5 1 5 2. - 0 - -6.7277951166033745e-004 - -0.0709791034460068 - 0.1277576982975006 - <_> - - <_> - - - - <_>14 2 3 6 -1. - <_>15 2 1 6 3. - 0 - 3.7424470065161586e-004 - 0.0670964494347572 - -0.1364576071500778 - <_> - - <_> - - - - <_>8 6 4 3 -1. - <_>8 7 4 1 3. - 0 - 2.5741120334714651e-003 - -0.0543198287487030 - 0.1672026067972183 - <_> - - <_> - - - - <_>6 8 1 9 -1. - <_>6 11 1 3 3. - 0 - 4.3884690967388451e-004 - 0.0821140334010124 - -0.1102467998862267 - <_> - - <_> - - - - <_>3 9 7 6 -1. - <_>3 11 7 2 3. - 0 - -0.0481806285679340 - -0.7221773266792297 - 0.0122232101857662 - <_> - - <_> - - - - <_>6 6 2 3 -1. - <_>6 7 2 1 3. - 0 - 9.9836904555559158e-003 - 0.0121956402435899 - -0.6744806170463562 - <_> - - <_> - - - - <_>5 9 3 1 -1. - <_>6 9 1 1 3. - 0 - -1.2344559654593468e-003 - 0.1714538037776947 - -0.0553813390433788 - <_> - - <_> - - - - <_>4 5 4 4 -1. - <_>4 5 2 2 2. - <_>6 7 2 2 2. - 0 - -2.7302911039441824e-003 - -0.1304433941841126 - 0.0742667093873024 - <_> - - <_> - - - - <_>8 5 2 3 -1. - <_>8 6 2 1 3. - 0 - 5.5562541820108891e-004 - -0.1018731966614723 - 0.1045415997505188 - <_> - - <_> - - - - <_>5 6 4 7 -1. - <_>7 6 2 7 2. - 0 - 1.5140359755605459e-003 - 0.0828438401222229 - -0.1189856007695198 - <_> - - <_> - - - - <_>10 8 3 5 -1. - <_>11 8 1 5 3. - 0 - -7.2555973019916564e-005 - -0.1251229941844940 - 0.0711324065923691 - <_> - - <_> - - - - <_>11 4 3 13 -1. - <_>12 4 1 13 3. - 0 - -2.4981278693303466e-004 - -0.1312561035156250 - 0.0689631029963493 - <_> - - <_> - - - - <_>2 13 3 3 -1. - <_>3 13 1 3 3. - 0 - -6.0206428170204163e-003 - 0.2128445059061050 - -0.0476031117141247 - <_> - - <_> - - - - <_>4 8 3 2 -1. - <_>5 8 1 2 3. - 0 - -7.2469102451577783e-004 - 0.1049965992569923 - -0.0855496302247047 - <_> - - <_> - - - - <_>0 4 1 3 -1. - <_>0 5 1 1 3. - 0 - 6.3740357290953398e-004 - 0.0546554811298847 - -0.1735329031944275 - <_> - - <_> - - - - <_>7 6 6 6 -1. - <_>9 6 2 6 3. - 0 - 0.0109011903405190 - -0.0528322793543339 - 0.1875264942646027 - <_> - - <_> - - - - <_>7 7 4 12 -1. - <_>9 7 2 12 2. - 0 - 7.0734010078012943e-003 - 0.0629588067531586 - -0.1646843999624252 - <_> - - <_> - - - - <_>6 12 6 3 -1. - <_>9 12 3 3 2. - 0 - 1.3333789538592100e-003 - -0.1259087026119232 - 0.0947168096899986 - -1.3934370279312134 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_>8 6 9 12 -1. - <_>8 10 9 4 3. - 0 - 0.0620539896190166 - -0.2542702853679657 - 0.2359109967947006 - <_> - - <_> - - - - <_>11 0 3 15 -1. - <_>11 5 3 5 3. - 0 - 5.9534627944231033e-003 - -0.2254436016082764 - 0.1775193959474564 - <_> - - <_> - - - - <_>8 16 6 4 -1. - <_>8 16 3 2 2. - <_>11 18 3 2 2. - 0 - 7.2477371431887150e-003 - -0.1139805018901825 - 0.2755671143531799 - <_> - - <_> - - - - <_>6 5 10 6 -1. - <_>6 7 10 2 3. - 0 - -2.2824530024081469e-003 - 0.0862776786088943 - -0.3141239881515503 - <_> - - <_> - - - - <_>2 12 3 4 -1. - <_>3 12 1 4 3. - 0 - 0.0117760198190808 - -0.0623603388667107 - 0.3444347977638245 - <_> - - <_> - - - - <_>9 13 4 3 -1. - <_>9 14 4 1 3. - 0 - 4.3855342082679272e-003 - 0.0181057695299387 - -0.5012872815132141 - <_> - - <_> - - - - <_>3 0 4 6 -1. - <_>3 0 2 3 2. - <_>5 3 2 3 2. - 0 - 0.0158590693026781 - -0.0787651464343071 - 0.2640259861946106 - <_> - - <_> - - - - <_>5 9 6 1 -1. - <_>8 9 3 1 2. - 0 - 3.0654110014438629e-003 - 0.0332502387464046 - -0.4342781901359558 - <_> - - <_> - - - - <_>11 14 2 3 -1. - <_>11 15 2 1 3. - 0 - 2.5912460405379534e-003 - 0.0405785702168942 - -0.4965820014476776 - <_> - - <_> - - - - <_>5 8 2 1 -1. - <_>6 8 1 1 2. - 0 - 3.0834769131615758e-004 - -0.1461576968431473 - 0.1233901977539063 - <_> - - <_> - - - - <_>17 0 3 12 -1. - <_>17 4 3 4 3. - 0 - -2.4314899928867817e-003 - 0.0727393329143524 - -0.1999931037425995 - <_> - - <_> - - - - <_>10 13 3 6 -1. - <_>11 13 1 6 3. - 0 - -1.8934230320155621e-003 - -0.2337359935045242 - 0.0564643703401089 - <_> - - <_> - - - - <_>10 13 3 7 -1. - <_>11 13 1 7 3. - 0 - 4.4724289327859879e-003 - 0.0470428802073002 - -0.3125874102115631 - <_> - - <_> - - - - <_>6 5 6 1 -1. - <_>8 5 2 1 3. - 0 - 1.5810050535947084e-004 - -0.1309830993413925 - 0.1013709008693695 - <_> - - <_> - - - - <_>18 2 2 8 -1. - <_>19 2 1 8 2. - 0 - 0.0187559891492128 - -0.0381837897002697 - 0.3714911043643951 - <_> - - <_> - - - - <_>5 8 3 1 -1. - <_>6 8 1 1 3. - 0 - -7.4876967119053006e-004 - 0.1998195946216583 - -0.0602783896028996 - <_> - - <_> - - - - <_>8 7 4 6 -1. - <_>8 7 2 3 2. - <_>10 10 2 3 2. - 0 - -9.3861011555418372e-004 - 0.0874677076935768 - -0.1600127071142197 - <_> - - <_> - - - - <_>8 3 2 2 -1. - <_>8 3 1 1 2. - <_>9 4 1 1 2. - 0 - -1.3442989438772202e-003 - -0.3307205140590668 - 0.0365641117095947 - <_> - - <_> - - - - <_>18 5 2 3 -1. - <_>18 6 2 1 3. - 0 - -1.1384190293028951e-003 - -0.2063006013631821 - 0.0566144809126854 - <_> - - <_> - - - - <_>17 7 3 4 -1. - <_>18 7 1 4 3. - 0 - 2.5966269895434380e-003 - -0.0626760199666023 - 0.1919585019350052 - <_> - - <_> - - - - <_>8 2 2 4 -1. - <_>8 2 1 2 2. - <_>9 4 1 2 2. - 0 - 1.2499650474637747e-003 - 0.0573902800679207 - -0.1960525959730148 - <_> - - <_> - - - - <_>4 6 2 2 -1. - <_>5 6 1 2 2. - 0 - 1.1832700110971928e-003 - -0.0857887566089630 - 0.1368297934532166 - <_> - - <_> - - - - <_>4 8 3 1 -1. - <_>5 8 1 1 3. - 0 - -5.1836138591170311e-003 - 0.3163569867610931 - -0.0467364601790905 - <_> - - <_> - - - - <_>10 9 9 10 -1. - <_>10 14 9 5 2. - 0 - -0.1318579018115997 - -0.6227962970733643 - 0.0187980905175209 - <_> - - <_> - - - - <_>6 4 3 1 -1. - <_>7 4 1 1 3. - 0 - 1.8653980223461986e-003 - 0.0388372689485550 - -0.3010432124137878 - <_> - - <_> - - - - <_>8 14 1 3 -1. - <_>8 15 1 1 3. - 0 - 7.3482480365782976e-004 - -0.0766120478510857 - 0.1500207930803299 - <_> - - <_> - - - - <_>6 4 2 1 -1. - <_>7 4 1 1 2. - 0 - -1.5738410002086312e-004 - -0.1658836007118225 - 0.0700204521417618 - <_> - - <_> - - - - <_>5 9 3 9 -1. - <_>5 12 3 3 3. - 0 - 5.1779212662950158e-004 - 0.0748010799288750 - -0.1635819971561432 - <_> - - <_> - - - - <_>5 13 7 3 -1. - <_>5 14 7 1 3. - 0 - 7.5904270634055138e-003 - -0.0510509908199310 - 0.2448772042989731 - <_> - - <_> - - - - <_>9 6 2 10 -1. - <_>9 6 1 5 2. - <_>10 11 1 5 2. - 0 - -0.0110102500766516 - -0.5838040113449097 - 0.0206220094114542 - <_> - - <_> - - - - <_>13 1 3 18 -1. - <_>13 10 3 9 2. - 0 - 0.1162184998393059 - 0.0251750592142344 - -0.4126267135143280 - <_> - - <_> - - - - <_>5 13 2 3 -1. - <_>5 14 2 1 3. - 0 - -7.4468040838837624e-004 - 0.1272978931665421 - -0.0896755009889603 - <_> - - <_> - - - - <_>9 10 3 7 -1. - <_>10 10 1 7 3. - 0 - 0.0117653096094728 - 0.0209066793322563 - -0.5317276120185852 - <_> - - <_> - - - - <_>17 0 3 13 -1. - <_>18 0 1 13 3. - 0 - -4.4441698119044304e-003 - 0.1428263932466507 - -0.0787624120712280 - <_> - - <_> - - - - <_>13 6 1 2 -1. - <_>13 7 1 1 2. - 0 - -4.3369788909330964e-004 - -0.2213145941495895 - 0.0545549504458904 - <_> - - <_> - - - - <_>6 15 3 2 -1. - <_>7 15 1 2 3. - 0 - -1.9204010022804141e-003 - -0.2561072111129761 - 0.0406009182333946 - <_> - - <_> - - - - <_>5 14 2 3 -1. - <_>5 15 2 1 3. - 0 - -2.9081690590828657e-003 - 0.2020632028579712 - -0.0562228299677372 - <_> - - <_> - - - - <_>16 6 1 6 -1. - <_>16 8 1 2 3. - 0 - -1.4549949810316321e-005 - 0.0900005027651787 - -0.1177052035927773 - <_> - - <_> - - - - <_>0 6 2 2 -1. - <_>1 6 1 2 2. - 0 - -5.3217669483274221e-004 - -0.1529943048954010 - 0.0689254924654961 - <_> - - <_> - - - - <_>3 12 4 8 -1. - <_>3 12 2 4 2. - <_>5 16 2 4 2. - 0 - -0.0145901795476675 - 0.2177651971578598 - -0.0518504306674004 - <_> - - <_> - - - - <_>6 2 2 8 -1. - <_>7 2 1 8 2. - 0 - -4.0213059401139617e-004 - 0.0940178930759430 - -0.1102764010429382 - <_> - - <_> - - - - <_>6 7 2 6 -1. - <_>6 7 1 3 2. - <_>7 10 1 3 2. - 0 - -2.3089889436960220e-003 - 0.2479234933853149 - -0.0578570403158665 - <_> - - <_> - - - - <_>5 12 4 2 -1. - <_>7 12 2 2 2. - 0 - 3.1196139752864838e-004 - -0.1402194052934647 - 0.0772474929690361 - <_> - - <_> - - - - <_>4 9 13 2 -1. - <_>4 10 13 1 2. - 0 - -9.1317007318139076e-003 - 0.4024280905723572 - -0.0289535094052553 - <_> - - <_> - - - - <_>19 5 1 2 -1. - <_>19 6 1 1 2. - 0 - 4.2655199649743736e-004 - 0.0531143881380558 - -0.2135533988475800 - <_> - - <_> - - - - <_>4 8 9 1 -1. - <_>7 8 3 1 3. - 0 - 3.9956220425665379e-003 - 0.0440669208765030 - -0.2299441993236542 - <_> - - <_> - - - - <_>8 8 2 1 -1. - <_>9 8 1 1 2. - 0 - -1.4012040337547660e-003 - 0.2710689902305603 - -0.0451718308031559 - <_> - - <_> - - - - <_>3 0 2 10 -1. - <_>3 5 2 5 2. - 0 - 0.0360647700726986 - 0.0336280800402164 - -0.3283013105392456 - <_> - - <_> - - - - <_>6 2 2 1 -1. - <_>7 2 1 1 2. - 0 - -1.3408949598670006e-004 - -0.1388804018497467 - 0.0800780504941940 - <_> - - <_> - - - - <_>14 5 3 3 -1. - <_>15 5 1 3 3. - 0 - -6.9480319507420063e-003 - -0.3931545019149780 - 0.0273029301315546 - <_> - - <_> - - - - <_>4 8 2 2 -1. - <_>4 8 1 1 2. - <_>5 9 1 1 2. - 0 - -1.4855440240353346e-003 - 0.1976166963577271 - -0.0515620708465576 - <_> - - <_> - - - - <_>8 16 9 2 -1. - <_>8 17 9 1 2. - 0 - -0.0137575399130583 - -0.5562098026275635 - 0.0183015707880259 - <_> - - <_> - - - - <_>6 7 2 3 -1. - <_>6 8 2 1 3. - 0 - 8.4021147340536118e-003 - 0.0136904800310731 - -0.6317132115364075 - <_> - - <_> - - - - <_>12 11 2 2 -1. - <_>12 11 1 1 2. - <_>13 12 1 1 2. - 0 - -1.7845979891717434e-004 - -0.1453599035739899 - 0.0639211311936378 - <_> - - <_> - - - - <_>15 9 2 4 -1. - <_>15 11 2 2 2. - 0 - -0.0113268503919244 - 0.6587061285972595 - -0.0164606291800737 - <_> - - <_> - - - - <_>5 11 2 3 -1. - <_>5 12 2 1 3. - 0 - 1.5268150018528104e-003 - -0.0603895410895348 - 0.1545401066541672 - <_> - - <_> - - - - <_>6 11 2 3 -1. - <_>6 12 2 1 3. - 0 - -6.0069989413022995e-003 - 0.2585973143577576 - -0.0494669713079929 - <_> - - <_> - - - - <_>6 12 1 6 -1. - <_>6 15 1 3 2. - 0 - -7.4241221882402897e-003 - -0.3880611062049866 - 0.0293931905180216 - <_> - - <_> - - - - <_>6 9 5 9 -1. - <_>6 12 5 3 3. - 0 - -3.9992430247366428e-003 - -0.1378819942474365 - 0.0779918804764748 - <_> - - <_> - - - - <_>8 11 2 2 -1. - <_>8 12 2 1 2. - 0 - 1.0202969860984012e-004 - 0.0727107375860214 - -0.1703258007764816 - <_> - - <_> - - - - <_>8 10 4 2 -1. - <_>10 10 2 2 2. - 0 - 4.0135599556379020e-004 - -0.0927880182862282 - 0.1230544000864029 - <_> - - <_> - - - - <_>8 10 4 6 -1. - <_>8 10 2 3 2. - <_>10 13 2 3 2. - 0 - -9.7611807286739349e-003 - -0.3663052022457123 - 0.0297488998621702 - <_> - - <_> - - - - <_>2 0 9 20 -1. - <_>5 0 3 20 3. - 0 - -0.3074553906917572 - -0.7865182161331177 - 0.0130586903542280 - <_> - - <_> - - - - <_>12 3 2 4 -1. - <_>12 3 1 2 2. - <_>13 5 1 2 2. - 0 - -6.0231718234717846e-003 - -0.5090023875236511 - 0.0181716196238995 - <_> - - <_> - - - - <_>15 0 2 10 -1. - <_>16 0 1 10 2. - 0 - -2.3784159566275775e-004 - -0.0998225212097168 - 0.1053086966276169 - <_> - - <_> - - - - <_>13 7 3 4 -1. - <_>14 7 1 4 3. - 0 - 1.3516229810193181e-003 - -0.0664440169930458 - 0.1542510986328125 - <_> - - <_> - - - - <_>14 10 1 2 -1. - <_>14 11 1 1 2. - 0 - -1.6924949595704675e-003 - -0.4413385093212128 - 0.0251007005572319 - <_> - - <_> - - - - <_>16 11 3 1 -1. - <_>17 11 1 1 3. - 0 - 1.0610929457470775e-003 - -0.0605778992176056 - 0.1721791028976440 - <_> - - <_> - - - - <_>16 11 2 2 -1. - <_>16 11 1 1 2. - <_>17 12 1 1 2. - 0 - 5.6644581491127610e-004 - -0.0786877796053886 - 0.1678466945886612 - <_> - - <_> - - - - <_>13 12 6 1 -1. - <_>15 12 2 1 3. - 0 - -0.0139553900808096 - -0.5784109830856323 - 0.0190871395170689 - <_> - - <_> - - - - <_>3 2 14 9 -1. - <_>10 2 7 9 2. - 0 - -1.8862909637391567e-003 - 0.0621181502938271 - -0.1652339994907379 - <_> - - <_> - - - - <_>5 4 12 2 -1. - <_>11 4 6 2 2. - 0 - 0.0167841706424952 - -0.0303809195756912 - 0.3610531985759735 - <_> - - <_> - - - - <_>13 6 2 1 -1. - <_>14 6 1 1 2. - 0 - -1.4158519661577884e-005 - 0.0721826329827309 - -0.1440749019384384 - <_> - - <_> - - - - <_>7 10 3 3 -1. - <_>7 11 3 1 3. - 0 - 7.3750452138483524e-003 - 0.0297915805131197 - -0.2927787005901337 - <_> - - <_> - - - - <_>16 17 4 2 -1. - <_>18 17 2 2 2. - 0 - 8.0517530441284180e-003 - -0.0446812994778156 - 0.2176039963960648 - <_> - - <_> - - - - <_>4 12 8 8 -1. - <_>4 12 4 4 2. - <_>8 16 4 4 2. - 0 - -0.0795196965336800 - -0.6520869135856628 - 0.0146189099177718 - <_> - - <_> - - - - <_>14 8 4 5 -1. - <_>16 8 2 5 2. - 0 - 0.0120657002553344 - 0.0292028803378344 - -0.2945412099361420 - <_> - - <_> - - - - <_>11 8 6 2 -1. - <_>13 8 2 2 3. - 0 - -0.0101226996630430 - 0.2774623930454254 - -0.0437135696411133 - <_> - - <_> - - - - <_>4 5 16 5 -1. - <_>12 5 8 5 2. - 0 - -0.1851581037044525 - -0.4613685905933380 - 0.0240932404994965 - <_> - - <_> - - - - <_>14 9 6 10 -1. - <_>16 9 2 10 3. - 0 - -0.0807261317968369 - -0.4467343091964722 - 0.0208454597741365 - <_> - - <_> - - - - <_>4 18 3 1 -1. - <_>5 18 1 1 3. - 0 - 1.5173270367085934e-003 - -0.0515759699046612 - 0.1806337982416153 - <_> - - <_> - - - - <_>4 13 4 4 -1. - <_>4 13 2 2 2. - <_>6 15 2 2 2. - 0 - -0.0111848199740052 - -0.3537395894527435 - 0.0270595401525497 - <_> - - <_> - - - - <_>6 15 2 3 -1. - <_>6 16 2 1 3. - 0 - -3.5008399281650782e-003 - 0.2054871022701263 - -0.0460320599377155 - <_> - - <_> - - - - <_>6 15 1 3 -1. - <_>6 16 1 1 3. - 0 - 1.4720410108566284e-003 - -0.0638717114925385 - 0.1816830039024353 - <_> - - <_> - - - - <_>7 17 3 1 -1. - <_>8 17 1 1 3. - 0 - -4.5021830010227859e-004 - -0.1635392010211945 - 0.0593277402222157 - <_> - - <_> - - - - <_>7 17 3 1 -1. - <_>8 17 1 1 3. - 0 - 6.1653478769585490e-004 - 0.0690893232822418 - -0.1915604025125504 - <_> - - <_> - - - - <_>9 10 4 1 -1. - <_>11 10 2 1 2. - 0 - 1.4797239564359188e-003 - -0.0522419996559620 - 0.1863134056329727 - <_> - - <_> - - - - <_>11 12 2 1 -1. - <_>12 12 1 1 2. - 0 - -1.4754989933862817e-005 - 0.0735861435532570 - -0.1509232074022293 - <_> - - <_> - - - - <_>7 8 1 6 -1. - <_>7 11 1 3 2. - 0 - 8.6423632455989718e-004 - 0.0669300779700279 - -0.1397610008716583 - <_> - - <_> - - - - <_>6 7 3 3 -1. - <_>7 7 1 3 3. - 0 - -4.1005611419677734e-003 - 0.2094669938087463 - -0.0471750088036060 - <_> - - <_> - - - - <_>13 10 1 3 -1. - <_>13 11 1 1 3. - 0 - -2.1505339536815882e-003 - -0.5275384187698364 - 0.0176652502268553 - <_> - - <_> - - - - <_>5 8 2 4 -1. - <_>5 10 2 2 2. - 0 - 7.8334724530577660e-003 - -0.0451250113546848 - 0.2037491947412491 - <_> - - <_> - - - - <_>5 8 6 6 -1. - <_>8 8 3 6 2. - 0 - -3.2690390944480896e-003 - -0.1383669972419739 - 0.0706531628966331 - <_> - - <_> - - - - <_>6 5 4 13 -1. - <_>8 5 2 13 2. - 0 - 3.9274748414754868e-003 - 0.0684285983443260 - -0.1621017009019852 - <_> - - <_> - - - - <_>8 4 10 8 -1. - <_>8 4 5 4 2. - <_>13 8 5 4 2. - 0 - 7.6534547843039036e-003 - -0.0931621566414833 - 0.0999126806855202 - <_> - - <_> - - - - <_>8 3 9 6 -1. - <_>11 3 3 6 3. - 0 - -0.0326201505959034 - 0.3545354902744293 - -0.0307653397321701 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>13 0 2 3 3. - 0 - -0.0182472094893456 - -0.3817118108272553 - 0.0277641806751490 - <_> - - <_> - - - - <_>11 1 3 15 -1. - <_>12 1 1 15 3. - 0 - -8.0104079097509384e-004 - -0.1432909965515137 - 0.0649366304278374 - <_> - - <_> - - - - <_>4 8 14 9 -1. - <_>4 11 14 3 3. - 0 - -0.1099310964345932 - 0.8731942772865295 - -0.0112426700070500 - <_> - - <_> - - - - <_>11 2 1 16 -1. - <_>11 10 1 8 2. - 0 - -0.0305081997066736 - -0.6126984953880310 - 0.0193726997822523 - <_> - - <_> - - - - <_>12 1 2 14 -1. - <_>12 8 2 7 2. - 0 - -0.0191878192126751 - 0.2853302061557770 - -0.0368323288857937 - <_> - - <_> - - - - <_>11 1 3 4 -1. - <_>12 1 1 4 3. - 0 - 2.3266570642590523e-003 - 0.0472893603146076 - -0.2125295996665955 - <_> - - <_> - - - - <_>9 8 4 2 -1. - <_>9 8 2 1 2. - <_>11 9 2 1 2. - 0 - -1.4535760274156928e-003 - 0.1377892047166824 - -0.0745014920830727 - <_> - - <_> - - - - <_>17 3 2 2 -1. - <_>18 3 1 2 2. - 0 - -1.0573640465736389e-003 - -0.2218683063983917 - 0.0420391708612442 - <_> - - <_> - - - - <_>2 6 3 2 -1. - <_>3 6 1 2 3. - 0 - 1.7203199677169323e-003 - -0.0692997500300407 - 0.1379489004611969 - <_> - - <_> - - - - <_>9 8 2 2 -1. - <_>9 9 2 1 2. - 0 - -1.4716150471940637e-003 - 0.2429670989513397 - -0.0407950095832348 - <_> - - <_> - - - - <_>6 15 6 1 -1. - <_>8 15 2 1 3. - 0 - -5.2822660654783249e-003 - -0.3195948004722595 - 0.0342152602970600 - <_> - - <_> - - - - <_>16 10 2 4 -1. - <_>16 10 1 2 2. - <_>17 12 1 2 2. - 0 - -4.7165742143988609e-003 - 0.3058119118213654 - -0.0317729189991951 - <_> - - <_> - - - - <_>6 6 10 6 -1. - <_>6 6 5 3 2. - <_>11 9 5 3 2. - 0 - 7.3668370023369789e-003 - 0.0610850788652897 - -0.1639001965522766 - <_> - - <_> - - - - <_>13 8 3 3 -1. - <_>13 9 3 1 3. - 0 - -7.6594999991357327e-003 - -0.4647234976291657 - 0.0188697502017021 - <_> - - <_> - - - - <_>13 0 4 2 -1. - <_>13 0 2 1 2. - <_>15 1 2 1 2. - 0 - 7.6969028450548649e-003 - -0.0181915909051895 - 0.5539581179618835 - <_> - - <_> - - - - <_>10 0 10 2 -1. - <_>10 0 5 1 2. - <_>15 1 5 1 2. - 0 - -5.6195858633145690e-004 - 0.0976184830069542 - -0.1084408983588219 - <_> - - <_> - - - - <_>13 13 2 1 -1. - <_>14 13 1 1 2. - 0 - -1.4587530131393578e-005 - 0.0745851323008537 - -0.1235361024737358 - <_> - - <_> - - - - <_>4 9 2 2 -1. - <_>4 9 1 1 2. - <_>5 10 1 1 2. - 0 - -9.5779378898441792e-004 - 0.1637014001607895 - -0.0586100816726685 - <_> - - <_> - - - - <_>6 8 2 3 -1. - <_>6 9 2 1 3. - 0 - 8.0253500491380692e-003 - 0.0268576703965664 - -0.4150776863098145 - <_> - - <_> - - - - <_>2 12 2 3 -1. - <_>2 13 2 1 3. - 0 - 1.6938529442995787e-003 - 0.0485362708568573 - -0.1788846999406815 - <_> - - <_> - - - - <_>2 0 10 2 -1. - <_>2 0 5 1 2. - <_>7 1 5 1 2. - 0 - -4.3334178626537323e-003 - 0.1979822069406509 - -0.0480850599706173 - <_> - - <_> - - - - <_>6 2 2 2 -1. - <_>6 3 2 1 2. - 0 - -2.2440029715653509e-004 - -0.1511324942111969 - 0.0604286491870880 - <_> - - <_> - - - - <_>5 10 8 2 -1. - <_>5 11 8 1 2. - 0 - -0.0113925095647573 - 0.3273792862892151 - -0.0297512598335743 - <_> - - <_> - - - - <_>11 7 5 10 -1. - <_>11 12 5 5 2. - 0 - -9.3984175473451614e-003 - -0.1291299015283585 - 0.0763022825121880 - <_> - - <_> - - - - <_>5 10 4 3 -1. - <_>5 11 4 1 3. - 0 - 8.7430170970037580e-004 - -0.0975561663508415 - 0.0978080108761787 - <_> - - <_> - - - - <_>9 6 6 12 -1. - <_>9 12 6 6 2. - 0 - 7.5171617791056633e-003 - 0.0650843530893326 - -0.1541941016912460 - <_> - - <_> - - - - <_>16 10 3 5 -1. - <_>17 10 1 5 3. - 0 - -2.7937069535255432e-003 - 0.1500952988862991 - -0.0633553937077522 - <_> - - <_> - - - - <_>15 12 2 4 -1. - <_>15 12 1 2 2. - <_>16 14 1 2 2. - 0 - -3.4385098842903972e-004 - 0.1240428984165192 - -0.0757806301116943 - <_> - - <_> - - - - <_>8 0 12 8 -1. - <_>8 0 6 4 2. - <_>14 4 6 4 2. - 0 - 0.0875579267740250 - -0.0159059409052134 - 0.5660734772682190 - <_> - - <_> - - - - <_>14 1 5 3 -1. - <_>14 2 5 1 3. - 0 - -9.3594435602426529e-003 - -0.3303920030593872 - 0.0308747105300426 - <_> - - <_> - - - - <_>2 2 3 6 -1. - <_>3 2 1 6 3. - 0 - -6.7703737877309322e-003 - 0.1796087026596069 - -0.0513103194534779 - <_> - - <_> - - - - <_>6 5 2 2 -1. - <_>7 5 1 2 2. - 0 - -6.2513751909136772e-003 - -0.5795233845710754 - 0.0154257696121931 - <_> - - <_> - - - - <_>7 12 12 1 -1. - <_>11 12 4 1 3. - 0 - -0.0252064093947411 - -0.6377707123756409 - 0.0130511196330190 - <_> - - <_> - - - - <_>13 9 7 2 -1. - <_>13 10 7 1 2. - 0 - -1.1819769861176610e-003 - -0.2047811001539230 - 0.0404945313930511 - <_> - - <_> - - - - <_>5 10 1 3 -1. - <_>5 11 1 1 3. - 0 - -1.0458839824423194e-003 - 0.1481287926435471 - -0.0626315921545029 - <_> - - <_> - - - - <_>0 4 15 2 -1. - <_>5 4 5 2 3. - 0 - -2.5445020291954279e-003 - 0.1302101016044617 - -0.0694300234317780 - <_> - - <_> - - - - <_>3 0 9 13 -1. - <_>6 0 3 13 3. - 0 - -0.0806736275553703 - -0.2805421948432922 - 0.0389562807977200 - <_> - - <_> - - - - <_>5 10 6 2 -1. - <_>7 10 2 2 3. - 0 - -1.4390920114237815e-004 - 0.1078051999211311 - -0.0965507626533508 - <_> - - <_> - - - - <_>8 3 4 2 -1. - <_>8 3 2 1 2. - <_>10 4 2 1 2. - 0 - 7.6481432188302279e-004 - 0.0606672391295433 - -0.1574261039495468 - <_> - - <_> - - - - <_>8 7 2 6 -1. - <_>8 7 1 3 2. - <_>9 10 1 3 2. - 0 - -3.4516688901931047e-004 - 0.1141576990485191 - -0.0888323709368706 - <_> - - <_> - - - - <_>8 7 2 3 -1. - <_>9 7 1 3 2. - 0 - -2.2118249908089638e-003 - 0.2298803925514221 - -0.0504987388849258 - <_> - - <_> - - - - <_>5 11 3 3 -1. - <_>6 11 1 3 3. - 0 - 9.4616543501615524e-003 - 0.0198270604014397 - -0.5063353180885315 - <_> - - <_> - - - - <_>0 1 1 2 -1. - <_>0 2 1 1 2. - 0 - 1.0567939607426524e-003 - 0.0387446396052837 - -0.2350935935974121 - <_> - - <_> - - - - <_>7 0 1 6 -1. - <_>7 2 1 2 3. - 0 - 2.9194469098001719e-003 - -0.0618954785168171 - 0.1531331986188889 - <_> - - <_> - - - - <_>14 0 2 5 -1. - <_>15 0 1 5 2. - 0 - -0.0107680102810264 - -0.5529810190200806 - 0.0178472399711609 - <_> - - <_> - - - - <_>3 2 12 1 -1. - <_>7 2 4 1 3. - 0 - -1.0197740048170090e-003 - 0.1155930012464523 - -0.0801858529448509 - <_> - - <_> - - - - <_>11 13 5 2 -1. - <_>11 14 5 1 2. - 0 - 1.8127029761672020e-004 - 0.0566528700292110 - -0.1654936969280243 - <_> - - <_> - - - - <_>13 14 1 3 -1. - <_>13 15 1 1 3. - 0 - 7.1620188464294188e-006 - -0.0914800912141800 - 0.0979150906205177 - <_> - - <_> - - - - <_>7 17 12 2 -1. - <_>11 17 4 2 3. - 0 - 0.0529100708663464 - -0.0135912001132965 - 0.6609022021293640 - <_> - - <_> - - - - <_>0 0 13 20 -1. - <_>0 10 13 10 2. - 0 - 0.4018537104129791 - 0.0195744894444942 - -0.4901585876941681 - <_> - - <_> - - - - <_>4 7 10 12 -1. - <_>4 13 10 6 2. - 0 - -0.0179147701710463 - -0.0883170366287231 - 0.1053296029567719 - <_> - - <_> - - - - <_>10 12 2 2 -1. - <_>11 12 1 2 2. - 0 - -1.4578569789591711e-005 - 0.0785131528973579 - -0.1230034977197647 - <_> - - <_> - - - - <_>9 11 4 4 -1. - <_>11 11 2 4 2. - 0 - 6.4994548447430134e-003 - -0.0408434681594372 - 0.2933715879917145 - <_> - - <_> - - - - <_>4 9 16 5 -1. - <_>12 9 8 5 2. - 0 - 0.0957629829645157 - 0.0193324796855450 - -0.5344405770301819 - <_> - - <_> - - - - <_>16 9 2 4 -1. - <_>17 9 1 4 2. - 0 - 1.4263469893194269e-005 - -0.0888975337147713 - 0.1063278988003731 - <_> - - <_> - - - - <_>15 9 3 1 -1. - <_>16 9 1 1 3. - 0 - 2.2215039934962988e-003 - -0.0407779514789581 - 0.2640512883663178 - <_> - - <_> - - - - <_>14 3 4 11 -1. - <_>16 3 2 11 2. - 0 - 3.1875250861048698e-003 - 0.0597250387072563 - -0.1620295941829681 - <_> - - <_> - - - - <_>4 3 10 10 -1. - <_>4 3 5 5 2. - <_>9 8 5 5 2. - 0 - 0.0960695892572403 - 0.0113184601068497 - -0.7911068797111511 - <_> - - <_> - - - - <_>16 9 3 1 -1. - <_>17 9 1 1 3. - 0 - 1.9584870897233486e-003 - -0.0392520204186440 - 0.2363992929458618 - <_> - - <_> - - - - <_>6 4 14 9 -1. - <_>6 7 14 3 3. - 0 - -0.1846846938133240 - -0.5897439718246460 - 0.0157584100961685 - <_> - - <_> - - - - <_>8 11 2 4 -1. - <_>8 13 2 2 2. - 0 - 2.1685050160158426e-004 - 0.0463204495608807 - -0.1827467978000641 - <_> - - <_> - - - - <_>5 9 6 8 -1. - <_>5 9 3 4 2. - <_>8 13 3 4 2. - 0 - 0.0188097096979618 - -0.0433571189641953 - 0.2783260047435761 - <_> - - <_> - - - - <_>5 11 4 4 -1. - <_>5 13 4 2 2. - 0 - -6.2639699317514896e-003 - -0.1389119029045105 - 0.0771159008145332 - <_> - - <_> - - - - <_>7 14 1 3 -1. - <_>7 15 1 1 3. - 0 - 3.2622940489090979e-004 - -0.0918030217289925 - 0.1058828979730606 - <_> - - <_> - - - - <_>9 10 3 1 -1. - <_>10 10 1 1 3. - 0 - 5.3745559416711330e-003 - 0.0108034899458289 - -0.7671645879745483 - <_> - - <_> - - - - <_>4 8 2 4 -1. - <_>4 8 1 2 2. - <_>5 10 1 2 2. - 0 - 2.8126770630478859e-003 - -0.0596188604831696 - 0.1613305062055588 - <_> - - <_> - - - - <_>14 6 2 5 -1. - <_>15 6 1 5 2. - 0 - -6.5314618404954672e-004 - -0.0856908112764359 - 0.1154076978564262 - <_> - - <_> - - - - <_>13 7 6 7 -1. - <_>15 7 2 7 3. - 0 - -1.7845110269263387e-003 - 0.0818319916725159 - -0.1270080059766769 - <_> - - <_> - - - - <_>15 6 4 7 -1. - <_>17 6 2 7 2. - 0 - 3.0969830695539713e-003 - 0.0683666393160820 - -0.1447543948888779 - <_> - - <_> - - - - <_>9 11 6 5 -1. - <_>11 11 2 5 3. - 0 - -4.1442047804594040e-003 - 0.1863203048706055 - -0.0540303103625774 - <_> - - <_> - - - - <_>0 8 20 4 -1. - <_>10 8 10 4 2. - 0 - -0.0499725192785263 - -0.1280035972595215 - 0.0850491598248482 - <_> - - <_> - - - - <_>1 2 8 14 -1. - <_>1 2 4 7 2. - <_>5 9 4 7 2. - 0 - -0.0107439104467630 - 0.1370172947645187 - -0.0773664563894272 - <_> - - <_> - - - - <_>10 13 3 1 -1. - <_>11 13 1 1 3. - 0 - -3.0474149389192462e-004 - -0.1693834066390991 - 0.0579711683094502 - <_> - - <_> - - - - <_>7 0 6 4 -1. - <_>9 0 2 4 3. - 0 - 0.0360233187675476 - 0.0135613000020385 - -0.6327974796295166 - <_> - - <_> - - - - <_>7 14 6 2 -1. - <_>7 14 3 1 2. - <_>10 15 3 1 2. - 0 - 2.5479190517216921e-003 - -0.0438243597745895 - 0.2215041965246201 - -1.2739679813385010 - 24 - -1 - diff --git a/data/haarcascades/haarcascade_righteye_2splits.xml b/data/haarcascades/haarcascade_righteye_2splits.xml deleted file mode 100644 index 2c260e8..0000000 --- a/data/haarcascades/haarcascade_righteye_2splits.xml +++ /dev/null @@ -1,9833 +0,0 @@ - - - - - - 20 20 - - <_> - - - <_> - - <_> - - - - <_> - 8 7 3 12 -1. - <_> - 8 11 3 4 3. - 0 - -0.0482105500996113 - 1 - -0.8614044785499573 - <_> - - - - <_> - 8 7 8 3 -1. - <_> - 10 9 4 3 2. - 1 - -0.0415761992335320 - 0.9176905751228333 - -0.2128400951623917 - <_> - - <_> - - - - <_> - 9 13 2 6 -1. - <_> - 9 16 2 3 2. - 0 - 9.3528684228658676e-03 - -0.6978576779365540 - 1 - <_> - - - - <_> - 8 2 12 8 -1. - <_> - 11 2 6 8 2. - 0 - -2.2144919785205275e-04 - 0.7952337265014648 - -0.4894809126853943 - <_> - - <_> - - - - <_> - 14 0 6 6 -1. - <_> - 14 3 6 3 2. - 0 - -0.0218533501029015 - 0.7057464122772217 - 1 - <_> - - - - <_> - 8 1 5 12 -1. - <_> - 8 4 5 6 2. - 0 - 0.0996729284524918 - -0.7066624164581299 - 0.7921097874641418 - <_> - - <_> - - - - <_> - 1 8 3 12 -1. - <_> - 1 12 3 4 3. - 0 - -0.0216648206114769 - 1 - -0.6089860796928406 - <_> - - - - <_> - 0 11 2 7 -1. - <_> - 1 11 1 7 2. - 0 - -7.5680727604776621e-04 - 0.7168570160865784 - -0.3046456873416901 - <_> - - <_> - - - - <_> - 6 12 9 7 -1. - <_> - 9 12 3 7 3. - 0 - -0.0133330496028066 - 1 - -0.4684469103813171 - <_> - - - - <_> - 13 4 6 9 -1. - <_> - 15 4 2 9 3. - 0 - 9.2925298959016800e-03 - 0.6423593163490295 - -0.5118042826652527 - -2.2325520515441895 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 12 12 -1. - <_> - 8 11 4 4 9. - 0 - -0.3394871950149536 - 0.7791326045989990 - 1 - <_> - - - - <_> - 15 0 4 20 -1. - <_> - 15 5 4 10 2. - 0 - -0.1367247998714447 - 0.2642127871513367 - -0.8791009187698364 - <_> - - <_> - - - - <_> - 0 12 5 8 -1. - <_> - 0 16 5 4 2. - 0 - 0.0313945002853870 - -0.6995670199394226 - 1 - <_> - - - - <_> - 8 2 12 8 -1. - <_> - 12 2 4 8 3. - 0 - -0.0108281401917338 - 0.7650449275970459 - -0.4371921122074127 - <_> - - <_> - - - - <_> - 19 0 1 8 -1. - <_> - 19 4 1 4 2. - 0 - -4.2506768368184566e-03 - 1 - -0.5756158232688904 - <_> - - - - <_> - 9 7 3 12 -1. - <_> - 9 11 3 4 3. - 0 - -0.0226754695177078 - 0.7408059239387512 - -0.3667725026607513 - <_> - - <_> - - - - <_> - 1 2 8 8 -1. - <_> - 1 6 8 4 2. - 0 - 0.0391614809632301 - 1 - 0.6404516100883484 - <_> - - - - <_> - 0 12 4 4 -1. - <_> - 2 12 2 4 2. - 0 - -3.1934089493006468e-03 - 0.1604758948087692 - -0.7101097702980042 - <_> - - <_> - - - - <_> - 9 7 6 8 -1. - <_> - 9 7 3 4 2. - <_> - 12 11 3 4 2. - 0 - 0.0253219902515411 - 1 - 0.4957486093044281 - <_> - - - - <_> - 13 18 7 2 -1. - <_> - 13 19 7 1 2. - 0 - 7.7583367237821221e-04 - -0.7173789739608765 - -0.0185817703604698 - -2.1598019599914551 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 12 12 -1. - <_> - 8 11 4 4 9. - 0 - -0.2655405998229980 - 1 - -0.8471245169639587 - <_> - - - - <_> - 0 8 5 12 -1. - <_> - 0 12 5 4 3. - 0 - -0.0225327797234058 - 0.8797718882560730 - -0.3339469134807587 - <_> - - <_> - - - - <_> - 16 0 4 8 -1. - <_> - 18 0 2 8 2. - 0 - 8.5310067515820265e-04 - -0.8203244805335999 - 1 - <_> - - - - <_> - 16 12 1 8 -1. - <_> - 16 16 1 4 2. - 0 - 1.5820249973330647e-04 - -0.7517635822296143 - 0.6776971220970154 - <_> - - <_> - - - - <_> - 9 1 9 9 -1. - <_> - 12 1 3 9 3. - 0 - -1.0837490117410198e-04 - 1 - -0.8331400156021118 - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 15 17 1 1 3. - 1 - 2.6810260023921728e-03 - 0.5384474992752075 - -0.7653415799140930 - <_> - - <_> - - - - <_> - 2 14 2 4 -1. - <_> - 2 16 2 2 2. - 0 - 8.5202371701598167e-04 - -0.7751489877700806 - 1 - <_> - - - - <_> - 6 12 9 3 -1. - <_> - 9 12 3 3 3. - 0 - -0.0122417397797108 - 0.6324015259742737 - -0.6339520812034607 - <_> - - <_> - - - - <_> - 0 18 5 2 -1. - <_> - 0 19 5 1 2. - 0 - 6.2314196838997304e-05 - 1 - 0.4429041147232056 - <_> - - - - <_> - 1 7 18 12 -1. - <_> - 7 11 6 4 9. - 0 - -0.7191110849380493 - 0.8013592958450317 - -0.5343109965324402 - <_> - - <_> - - - - <_> - 4 0 16 12 -1. - <_> - 4 0 8 6 2. - <_> - 12 6 8 6 2. - 0 - -0.0242803394794464 - 1 - -0.6779791712760925 - <_> - - - - <_> - 8 3 2 5 -1. - <_> - 9 3 1 5 2. - 0 - 3.4558640327304602e-03 - 0.4903061091899872 - -0.8844798207283020 - <_> - - <_> - - - - <_> - 17 17 1 2 -1. - <_> - 17 17 1 1 2. - 1 - -6.2993327446747571e-05 - 1 - -0.5788341760635376 - <_> - - - - <_> - 18 16 1 3 -1. - <_> - 17 17 1 1 3. - 1 - -4.6443562023341656e-03 - -0.8587880730628967 - 0.5245460271835327 - <_> - - <_> - - - - <_> - 0 9 2 6 -1. - <_> - 1 9 1 6 2. - 0 - -4.0299328247783706e-05 - 1 - -0.5271345973014832 - <_> - - - - <_> - 3 3 3 4 -1. - <_> - 4 3 1 4 3. - 0 - -3.7485519424080849e-03 - -0.8562619090080261 - 0.4894461035728455 - -2.3451159000396729 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 12 12 -1. - <_> - 8 11 4 4 9. - 0 - -0.3837707936763763 - 0.7171502113342285 - 1 - <_> - - - - <_> - 10 0 7 8 -1. - <_> - 10 4 7 4 2. - 0 - -0.1383703052997589 - 0.3439235985279083 - -0.7993127703666687 - <_> - - <_> - - - - <_> - 18 0 2 9 -1. - <_> - 19 0 1 9 2. - 0 - 3.3107071067206562e-04 - -0.6835243105888367 - 1 - <_> - - - - <_> - 4 13 1 4 -1. - <_> - 4 13 1 2 2. - 1 - -5.1273438148200512e-03 - 0.5825061798095703 - -0.4095500111579895 - <_> - - <_> - - - - <_> - 10 8 6 2 -1. - <_> - 12 10 2 2 3. - 1 - -0.0261006802320480 - 1 - -0.4371330142021179 - <_> - - - - <_> - 14 11 4 7 -1. - <_> - 15 11 2 7 2. - 0 - -1.0628979653120041e-03 - 0.7068073749542236 - -0.2681793868541718 - <_> - - <_> - - - - <_> - 4 0 13 8 -1. - <_> - 4 2 13 4 2. - 0 - -0.0978548526763916 - 0.7394003868103027 - 1 - <_> - - - - <_> - 9 1 7 8 -1. - <_> - 9 5 7 4 2. - 0 - -0.1182982027530670 - 0.6381418108940125 - -0.3872187137603760 - <_> - - <_> - - - - <_> - 7 0 12 9 -1. - <_> - 10 0 6 9 2. - 0 - -7.5409049168229103e-03 - 1 - -0.4880301952362061 - <_> - - - - <_> - 14 3 4 4 -1. - <_> - 15 3 2 4 2. - 0 - 2.6851659640669823e-03 - 0.3908346891403198 - -0.6556153893470764 - <_> - - <_> - - - - <_> - 0 16 4 4 -1. - <_> - 0 18 4 2 2. - 0 - 1.6870240215212107e-03 - -0.4989174902439117 - 1 - <_> - - - - <_> - 3 17 2 1 -1. - <_> - 3 17 1 1 2. - 1 - -3.8136160001158714e-03 - -0.6640558838844299 - 0.4065074920654297 - <_> - - <_> - - - - <_> - 17 16 1 3 -1. - <_> - 16 17 1 1 3. - 1 - 2.0289309322834015e-03 - 1 - -0.6998921036720276 - <_> - - - - <_> - 11 10 6 4 -1. - <_> - 10 11 6 2 2. - 1 - -7.6308869756758213e-03 - 0.4320684075355530 - -0.2966496944427490 - <_> - - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 2 1 2 2. - 0 - -3.3815231290645897e-04 - 1 - -0.4680854082107544 - <_> - - - - <_> - 17 0 3 3 -1. - <_> - 18 1 1 1 9. - 0 - 7.5163291767239571e-03 - 0.3652149140834808 - -0.7601454257965088 - <_> - - <_> - - - - <_> - 2 1 12 6 -1. - <_> - 2 4 12 3 2. - 0 - 0.0614795088768005 - 1 - 0.5699062943458557 - <_> - - - - <_> - 19 2 1 16 -1. - <_> - 15 6 1 8 2. - 1 - -0.0462865792214870 - 0.2262506037950516 - -0.4533078074455261 - <_> - - <_> - - - - <_> - 12 2 4 6 -1. - <_> - 13 2 2 6 2. - 0 - 4.6903551556169987e-03 - 1 - -0.7728670835494995 - <_> - - - - <_> - 11 3 3 3 -1. - <_> - 12 3 1 3 3. - 0 - 1.8803169950842857e-03 - 0.2734912037849426 - -0.6666783094406128 - -2.3431489467620850 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 1 7 18 12 -1. - <_> - 7 11 6 4 9. - 0 - -0.5542067289352417 - 1 - -0.6062026023864746 - <_> - - - - <_> - 8 1 12 9 -1. - <_> - 12 1 4 9 3. - 0 - -6.9329799152910709e-03 - 0.7854202985763550 - -0.3552212119102478 - <_> - - <_> - - - - <_> - 18 0 2 10 -1. - <_> - 18 5 2 5 2. - 0 - -0.0211699604988098 - 0.5294768810272217 - 1 - <_> - - - - <_> - 4 5 12 15 -1. - <_> - 8 10 4 5 9. - 0 - -0.6742839813232422 - 0.4606522023677826 - -0.7005820870399475 - <_> - - <_> - - - - <_> - 1 8 4 12 -1. - <_> - 1 12 4 4 3. - 0 - -0.0427250787615776 - 1 - -0.5990480780601501 - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 8 13 4 2 2. - 0 - -0.0101093295961618 - 0.6810922026634216 - -0.2073187977075577 - <_> - - <_> - - - - <_> - 16 0 4 15 -1. - <_> - 18 0 2 15 2. - 0 - 6.5861130133271217e-03 - -0.5242084860801697 - 1 - <_> - - - - <_> - 14 0 4 8 -1. - <_> - 15 0 2 8 2. - 0 - -7.6380418613553047e-03 - -0.7016978263854980 - 0.4410013854503632 - <_> - - <_> - - - - <_> - 5 0 8 9 -1. - <_> - 5 3 8 3 3. - 0 - -0.0976815819740295 - 0.5770874023437500 - 1 - <_> - - - - <_> - 8 0 6 6 -1. - <_> - 10 0 2 6 3. - 0 - 0.0101973600685596 - -0.0985185503959656 - -0.8811169862747192 - <_> - - <_> - - - - <_> - 10 17 3 3 -1. - <_> - 11 17 1 3 3. - 0 - -2.5724549777805805e-03 - -0.8323333859443665 - 1 - <_> - - - - <_> - 10 17 4 3 -1. - <_> - 11 17 2 3 2. - 0 - 2.6594230439513922e-03 - 0.3099535107612610 - -0.8160917758941650 - <_> - - <_> - - - - <_> - 14 12 4 4 -1. - <_> - 15 12 2 4 2. - 0 - -1.0042720241472125e-03 - 1 - -0.4355852007865906 - <_> - - - - <_> - 8 18 4 2 -1. - <_> - 9 18 2 2 2. - 0 - 2.6080000679939985e-03 - 0.3356660008430481 - -0.8188933134078979 - <_> - - <_> - - - - <_> - 6 1 4 5 -1. - <_> - 7 1 2 5 2. - 0 - 4.9724509008228779e-03 - 1 - -0.7704818248748779 - <_> - - - - <_> - 2 0 6 5 -1. - <_> - 4 0 2 5 3. - 0 - 0.0122432401403785 - 0.2253420054912567 - -0.6869555115699768 - -2.1268370151519775 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 7 8 3 -1. - <_> - 10 9 4 3 2. - 1 - -0.0577849298715591 - 1 - -0.7051600813865662 - <_> - - - - <_> - 14 12 4 3 -1. - <_> - 15 12 2 3 2. - 0 - -1.7517809756100178e-03 - 0.8565592169761658 - -0.0924034193158150 - <_> - - <_> - - - - <_> - 10 10 3 4 -1. - <_> - 9 11 3 2 2. - 1 - -0.0115223797038198 - 1 - -0.4274964034557343 - <_> - - - - <_> - 17 0 2 6 -1. - <_> - 17 3 2 3 2. - 0 - -3.8323760963976383e-03 - 0.7591353058815002 - -0.1089404970407486 - <_> - - <_> - - - - <_> - 1 9 6 9 -1. - <_> - 3 12 2 3 9. - 0 - -0.0809223875403404 - 1 - -0.3136476874351501 - <_> - - - - <_> - 5 11 8 4 -1. - <_> - 9 11 4 4 2. - 0 - -6.2537011690437794e-03 - 0.6999592185020447 - -0.1180569007992744 - <_> - - <_> - - - - <_> - 1 0 16 6 -1. - <_> - 1 3 16 3 2. - 0 - -0.1222786009311676 - 0.5207250118255615 - 1 - <_> - - - - <_> - 2 0 14 6 -1. - <_> - 2 2 14 2 3. - 0 - -0.0641681104898453 - 0.3927274942398071 - -0.4219441115856171 - <_> - - <_> - - - - <_> - 0 11 2 9 -1. - <_> - 1 11 1 9 2. - 0 - -5.3712888620793819e-04 - 1 - -0.4952454864978790 - <_> - - - - <_> - 18 11 1 8 -1. - <_> - 18 11 1 4 2. - 1 - -2.8175620827823877e-03 - 0.4135014116764069 - -0.3891927897930145 - <_> - - <_> - - - - <_> - 10 12 3 2 -1. - <_> - 11 12 1 2 3. - 0 - -3.6368549335747957e-03 - 0.6761502027511597 - 1 - <_> - - - - <_> - 11 13 3 1 -1. - <_> - 12 13 1 1 3. - 0 - -1.3223909772932529e-03 - 0.4342699944972992 - -0.3764213025569916 - <_> - - <_> - - - - <_> - 15 0 4 8 -1. - <_> - 17 0 2 8 2. - 0 - 3.7143539520911872e-04 - -0.5563088059425354 - 1 - <_> - - - - <_> - 12 17 4 3 -1. - <_> - 14 17 2 3 2. - 0 - -5.0255712121725082e-03 - -0.5232859253883362 - 0.3464682102203369 - <_> - - <_> - - - - <_> - 15 17 1 2 -1. - <_> - 15 17 1 1 2. - 1 - -9.2711612523999065e-05 - 1 - -0.4965266883373260 - <_> - - - - <_> - 15 16 1 3 -1. - <_> - 14 17 1 1 3. - 1 - 1.9847028888761997e-03 - 0.3340164124965668 - -0.6244689226150513 - <_> - - <_> - - - - <_> - 3 0 14 8 -1. - <_> - 3 2 14 4 2. - 0 - 0.0472034402191639 - 1 - 0.5756261944770813 - <_> - - - - <_> - 18 1 1 2 -1. - <_> - 18 2 1 1 2. - 0 - -6.8562600063160062e-05 - 0.0261726602911949 - -0.6084907054901123 - <_> - - <_> - - - - <_> - 6 0 8 3 -1. - <_> - 8 0 4 3 2. - 0 - 7.5034219771623611e-03 - 1 - -0.6857675909996033 - <_> - - - - <_> - 9 4 1 9 -1. - <_> - 9 7 1 3 3. - 0 - 6.3834791071712971e-03 - -0.1731251031160355 - 0.3856042921543121 - -2.0604379177093506 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 13 9 2 -1. - <_> - 9 13 3 2 3. - 0 - -0.0155844502151012 - 1 - -0.6664896011352539 - <_> - - - - <_> - 0 13 5 6 -1. - <_> - 0 16 5 3 2. - 0 - 0.0145570198073983 - -0.4374513030052185 - 0.7222781777381897 - <_> - - <_> - - - - <_> - 13 12 6 4 -1. - <_> - 15 12 2 4 3. - 0 - -5.7889888994395733e-03 - 1 - -0.4318324029445648 - <_> - - - - <_> - 4 6 12 2 -1. - <_> - 8 10 4 2 3. - 1 - -0.0819367691874504 - 0.6846765279769897 - -0.2254672944545746 - <_> - - <_> - - - - <_> - 19 0 1 8 -1. - <_> - 19 4 1 4 2. - 0 - -4.2995368130505085e-03 - 1 - -0.5240963101387024 - <_> - - - - <_> - 8 2 12 8 -1. - <_> - 11 2 6 8 2. - 0 - -0.0137366401031613 - 0.6162620782852173 - -0.3589316010475159 - <_> - - <_> - - - - <_> - 0 12 4 4 -1. - <_> - 2 12 2 4 2. - 0 - -4.8069912008941174e-03 - 1 - -0.4238238930702209 - <_> - - - - <_> - 7 8 13 9 -1. - <_> - 7 11 13 3 3. - 0 - -0.0771310999989510 - 0.6059936285018921 - -0.3155533075332642 - <_> - - <_> - - - - <_> - 18 1 2 6 -1. - <_> - 19 1 1 6 2. - 0 - 4.4640208943746984e-04 - -0.4920611083507538 - 1 - <_> - - - - <_> - 7 4 5 8 -1. - <_> - 7 6 5 4 2. - 0 - 0.0348415784537792 - -0.0410178899765015 - 0.6133087873458862 - <_> - - <_> - - - - <_> - 11 18 9 2 -1. - <_> - 11 19 9 1 2. - 0 - 8.2969048526138067e-04 - -0.4547941982746124 - 1 - <_> - - - - <_> - 10 7 2 3 -1. - <_> - 11 7 1 3 2. - 0 - -7.8510129242204130e-05 - 0.4000732898712158 - -0.2088876962661743 - <_> - - <_> - - - - <_> - 4 18 6 2 -1. - <_> - 6 18 2 2 3. - 0 - 4.6054688282310963e-03 - 1 - -0.6793137788772583 - <_> - - - - <_> - 6 13 6 7 -1. - <_> - 8 13 2 7 3. - 0 - -7.1904482319951057e-03 - 0.4706067144870758 - -0.1413861066102982 - <_> - - <_> - - - - <_> - 5 18 6 2 -1. - <_> - 7 18 2 2 3. - 0 - -5.5724480189383030e-03 - -0.7052550911903381 - 1 - <_> - - - - <_> - 18 5 2 2 -1. - <_> - 18 6 2 1 2. - 0 - -7.0458237314596772e-04 - 0.3609785139560699 - -0.1836154013872147 - <_> - - <_> - - - - <_> - 6 2 9 4 -1. - <_> - 6 4 9 2 2. - 0 - 0.0185950603336096 - 1 - 0.4176576137542725 - <_> - - - - <_> - 13 0 7 4 -1. - <_> - 13 0 7 2 2. - 1 - 0.0500725507736206 - -0.4186944961547852 - 0.2818650901317596 - <_> - - <_> - - - - <_> - 13 9 3 6 -1. - <_> - 11 11 3 2 3. - 1 - -0.0203559193760157 - 1 - -0.3649415075778961 - <_> - - - - <_> - 16 8 4 6 -1. - <_> - 16 11 4 3 2. - 0 - -0.0286865197122097 - -0.5386778712272644 - 0.3476788103580475 - <_> - - <_> - - - - <_> - 19 2 1 2 -1. - <_> - 19 3 1 1 2. - 0 - -7.1101690991781652e-05 - 1 - -0.4015679061412811 - <_> - - - - <_> - 19 1 1 3 -1. - <_> - 19 2 1 1 3. - 0 - 2.0686469506472349e-03 - 0.3296366035938263 - -0.7095105051994324 - <_> - - <_> - - - - <_> - 13 12 2 4 -1. - <_> - 13 12 1 2 2. - <_> - 14 14 1 2 2. - 0 - 1.1430920567363501e-03 - 1 - 0.4417298138141632 - <_> - - - - <_> - 14 9 3 5 -1. - <_> - 15 10 1 5 3. - 1 - -8.8636036962270737e-03 - 0.1842613071203232 - -0.4127517044544220 - -2.3187489509582520 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 7 8 3 -1. - <_> - 10 9 4 3 2. - 1 - -0.0776376426219940 - 1 - -0.4932152926921844 - <_> - - - - <_> - 7 7 9 4 -1. - <_> - 6 8 9 2 2. - 1 - -8.4830820560455322e-03 - 0.7813854217529297 - -0.3606229126453400 - <_> - - <_> - - - - <_> - 0 11 2 6 -1. - <_> - 1 11 1 6 2. - 0 - -1.7180460272356868e-03 - 1 - -0.4769004881381989 - <_> - - - - <_> - 0 13 5 6 -1. - <_> - 0 16 5 3 2. - 0 - 0.0247409492731094 - -0.3242008090019226 - 0.5928000211715698 - <_> - - <_> - - - - <_> - 16 2 4 6 -1. - <_> - 18 2 2 6 2. - 0 - 3.3028100151568651e-03 - -0.5399159789085388 - 1 - <_> - - - - <_> - 13 5 6 7 -1. - <_> - 15 7 2 7 3. - 1 - -0.0346220396459103 - 0.5207672715187073 - -0.3353079855442047 - <_> - - <_> - - - - <_> - 19 2 1 4 -1. - <_> - 19 4 1 2 2. - 0 - -7.1505777304992080e-04 - 1 - -0.4898169934749603 - <_> - - - - <_> - 14 1 6 2 -1. - <_> - 16 1 2 2 3. - 0 - -9.0145105496048927e-03 - -0.7796980142593384 - 0.3658635914325714 - <_> - - <_> - - - - <_> - 14 12 4 5 -1. - <_> - 15 12 2 5 2. - 0 - -1.0250939521938562e-03 - 1 - -0.4697051048278809 - <_> - - - - <_> - 18 15 2 3 -1. - <_> - 17 16 2 1 3. - 1 - -5.5693178437650204e-03 - -0.6969562172889709 - 0.3502543866634369 - <_> - - <_> - - - - <_> - 14 16 3 4 -1. - <_> - 14 18 3 2 2. - 0 - 1.3235070509836078e-03 - -0.4470798075199127 - 1 - <_> - - - - <_> - 16 16 1 2 -1. - <_> - 16 16 1 1 2. - 1 - -3.3737940248101950e-03 - -0.5619515180587769 - 0.3183380961418152 - <_> - - <_> - - - - <_> - 18 0 1 2 -1. - <_> - 18 1 1 1 2. - 0 - -6.4095242123585194e-05 - 1 - -0.3547363877296448 - <_> - - - - <_> - 9 8 1 6 -1. - <_> - 9 11 1 3 2. - 0 - -2.7294119354337454e-03 - 0.4128524065017700 - -0.3141682147979736 - <_> - - <_> - - - - <_> - 18 5 2 1 -1. - <_> - 19 5 1 1 2. - 0 - 6.3087652961257845e-05 - -0.3594656884670258 - 1 - <_> - - - - <_> - 14 3 6 4 -1. - <_> - 16 3 2 4 3. - 0 - -0.0154360998421907 - -0.6132907867431641 - 0.3430199921131134 - <_> - - <_> - - - - <_> - 8 18 4 2 -1. - <_> - 9 18 2 2 2. - 0 - -2.1025019232183695e-03 - -0.7696225047111511 - 1 - <_> - - - - <_> - 6 13 9 7 -1. - <_> - 9 13 3 7 3. - 0 - -0.0168495699763298 - 0.3656980991363525 - -0.2121037989854813 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 17 2 1 2. - 0 - 5.6847798987291753e-05 - -0.4046655893325806 - 1 - <_> - - - - <_> - 0 16 3 4 -1. - <_> - 0 17 3 2 2. - 0 - 5.9984489344060421e-03 - 0.2850377857685089 - -0.5875617861747742 - <_> - - <_> - - - - <_> - 8 1 4 5 -1. - <_> - 9 1 2 5 2. - 0 - 6.1389962211251259e-03 - 1 - -0.8718982934951782 - <_> - - - - <_> - 10 1 6 9 -1. - <_> - 12 1 2 9 3. - 0 - -2.8117469628341496e-04 - 0.2518250942230225 - -0.3186821937561035 - <_> - - <_> - - - - <_> - 10 8 10 4 -1. - <_> - 10 10 10 2 2. - 0 - -4.5429798774421215e-03 - 1 - -0.3672421872615814 - <_> - - - - <_> - 15 8 5 4 -1. - <_> - 15 10 5 2 2. - 0 - -0.0321671105921268 - -0.7948120236396790 - 0.2888720035552979 - <_> - - <_> - - - - <_> - 17 1 3 2 -1. - <_> - 18 2 1 2 3. - 1 - 5.0912089645862579e-03 - 1 - -0.7147749066352844 - <_> - - - - <_> - 13 11 3 5 -1. - <_> - 14 11 1 5 3. - 0 - -1.5173070132732391e-03 - 0.4451462924480438 - -0.0952073410153389 - <_> - - <_> - - - - <_> - 8 7 4 3 -1. - <_> - 10 7 2 3 2. - 0 - -6.0079508693888783e-04 - 1 - -0.3602145016193390 - <_> - - - - <_> - 3 0 8 1 -1. - <_> - 5 0 4 1 2. - 0 - 4.4868541881442070e-03 - 0.2827636003494263 - -0.7208412885665894 - <_> - - <_> - - - - <_> - 1 13 6 5 -1. - <_> - 3 13 2 5 3. - 0 - -3.7957848981022835e-03 - 1 - -0.2871744036674500 - <_> - - - - <_> - 13 9 3 5 -1. - <_> - 14 10 1 5 3. - 1 - -9.1829998418688774e-03 - 0.5047904253005981 - -0.0707810372114182 - -2.2203750610351562 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 8 4 6 -1. - <_> - 9 10 4 2 3. - 1 - -0.0557602494955063 - 1 - -0.5585464835166931 - <_> - - - - <_> - 11 7 6 6 -1. - <_> - 13 9 2 6 3. - 1 - -0.0594366900622845 - 0.6894369721412659 - -0.3719508051872253 - <_> - - <_> - - - - <_> - 7 0 7 6 -1. - <_> - 7 3 7 3 2. - 0 - -0.0546371787786484 - 0.5304033160209656 - 1 - <_> - - - - <_> - 3 1 10 12 -1. - <_> - 3 5 10 4 3. - 0 - 0.2360835969448090 - -0.4735530912876129 - 0.4632248878479004 - <_> - - <_> - - - - <_> - 13 12 6 4 -1. - <_> - 15 12 2 4 3. - 0 - -9.4560505822300911e-03 - 1 - -0.3254477977752686 - <_> - - - - <_> - 0 9 6 9 -1. - <_> - 2 12 2 3 9. - 0 - -0.0531827099621296 - 0.6346856951713562 - -0.2826836109161377 - <_> - - <_> - - - - <_> - 8 0 12 11 -1. - <_> - 12 0 4 11 3. - 0 - -0.0106381997466087 - 1 - -0.5577635169029236 - <_> - - - - <_> - 13 11 1 8 -1. - <_> - 13 11 1 4 2. - 1 - -0.0212070196866989 - 0.3904919028282166 - -0.4211193025112152 - <_> - - <_> - - - - <_> - 19 4 1 2 -1. - <_> - 19 5 1 1 2. - 0 - -5.6731878430582583e-05 - 1 - -0.4180330932140350 - <_> - - - - <_> - 2 15 1 2 -1. - <_> - 2 15 1 1 2. - 1 - -4.4976451317779720e-04 - 0.3735578954219818 - -0.3919964134693146 - <_> - - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 2 1 2. - 1 - 2.7574670966714621e-03 - 1 - -0.7910463213920593 - <_> - - - - <_> - 16 16 1 3 -1. - <_> - 15 17 1 1 3. - 1 - 2.5649419985711575e-03 - 0.1925818026065826 - -0.7534446120262146 - <_> - - <_> - - - - <_> - 5 11 3 2 -1. - <_> - 6 12 1 2 3. - 1 - -9.4359368085861206e-03 - 0.4483475089073181 - 1 - <_> - - - - <_> - 4 11 2 2 -1. - <_> - 4 11 1 1 2. - <_> - 5 12 1 1 2. - 0 - 1.4136210083961487e-03 - -0.3387843072414398 - 0.4429191946983337 - <_> - - <_> - - - - <_> - 17 7 3 2 -1. - <_> - 18 8 1 2 3. - 1 - 3.9976350963115692e-03 - 1 - -0.6663758158683777 - <_> - - - - <_> - 16 9 3 8 -1. - <_> - 16 11 3 4 2. - 0 - -1.5278969658538699e-03 - 0.3129239976406097 - -0.2802799046039581 - <_> - - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 2 1 2 2. - 0 - -3.2376639865105972e-05 - 1 - -0.4667209088802338 - <_> - - - - <_> - 19 0 1 3 -1. - <_> - 19 1 1 1 3. - 0 - 1.6323389718309045e-03 - 0.2799555957317352 - -0.6132150888442993 - <_> - - <_> - - - - <_> - 9 0 10 3 -1. - <_> - 14 0 5 3 2. - 0 - 7.7096219174563885e-03 - 1 - 0.2035254985094070 - <_> - - - - <_> - 3 3 15 17 -1. - <_> - 8 3 5 17 3. - 0 - -0.0785993188619614 - 0.0727269127964973 - -0.6867709755897522 - <_> - - <_> - - - - <_> - 8 0 4 4 -1. - <_> - 9 0 2 4 2. - 0 - -3.6581400781869888e-03 - -0.6807945966720581 - 1 - <_> - - - - <_> - 1 11 8 1 -1. - <_> - 1 11 4 1 2. - 1 - -0.0426121987402439 - -0.8455178141593933 - 0.1599057018756866 - <_> - - <_> - - - - <_> - 4 10 2 4 -1. - <_> - 3 11 2 2 2. - 1 - -4.8822778626345098e-04 - 1 - -0.4794569909572601 - <_> - - - - <_> - 4 17 4 3 -1. - <_> - 5 17 2 3 2. - 0 - -4.6951142139732838e-03 - -0.8223428130149841 - 0.2043157964944839 - <_> - - <_> - - - - <_> - 18 7 2 1 -1. - <_> - 19 7 1 1 2. - 0 - 6.1706348787993193e-05 - -0.3174282014369965 - 1 - <_> - - - - <_> - 2 7 18 3 -1. - <_> - 11 7 9 3 2. - 0 - 0.0138099100440741 - 0.3076930046081543 - -0.4354496896266937 - <_> - - <_> - - - - <_> - 4 11 4 2 -1. - <_> - 4 11 2 1 2. - <_> - 6 12 2 1 2. - 0 - -4.2187729850411415e-03 - 0.6249998211860657 - 1 - <_> - - - - <_> - 4 9 2 4 -1. - <_> - 4 11 2 2 2. - 0 - -3.9540808647871017e-03 - 0.1322520971298218 - -0.3974510133266449 - <_> - - <_> - - - - <_> - 16 1 3 1 -1. - <_> - 17 2 1 1 3. - 1 - 2.2203531116247177e-03 - 1 - -0.6004533171653748 - <_> - - - - <_> - 4 18 1 2 -1. - <_> - 4 19 1 1 2. - 0 - 6.2806582718621939e-05 - -0.2242998033761978 - 0.2976852059364319 - <_> - - <_> - - - - <_> - 9 18 4 2 -1. - <_> - 10 18 2 2 2. - 0 - 2.3292789701372385e-03 - 1 - -0.7598208189010620 - <_> - - - - <_> - 12 11 5 4 -1. - <_> - 11 12 5 2 2. - 1 - -5.3711822256445885e-03 - 0.2648491859436035 - -0.2600553929805756 - <_> - - <_> - - - - <_> - 18 2 2 1 -1. - <_> - 19 2 1 1 2. - 0 - 6.4782587287481874e-05 - -0.3211930096149445 - 1 - <_> - - - - <_> - 7 0 6 2 -1. - <_> - 9 0 2 2 3. - 0 - 7.6606678776443005e-03 - 0.2417640984058380 - -0.8382272720336914 - -2.1757249832153320 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 13 8 2 -1. - <_> - 8 13 4 2 2. - 0 - -0.0148482797667384 - 1 - -0.5339112877845764 - <_> - - - - <_> - 14 12 4 4 -1. - <_> - 15 12 2 4 2. - 0 - -1.6066679963842034e-03 - 0.7600271105766296 - -0.2109173983335495 - <_> - - <_> - - - - <_> - 3 8 17 9 -1. - <_> - 3 11 17 3 3. - 0 - -0.1565192043781281 - 1 - -0.4281854927539825 - <_> - - - - <_> - 0 12 4 3 -1. - <_> - 2 12 2 3 2. - 0 - -5.5439779534935951e-03 - 0.6562075018882751 - -0.2294984012842178 - <_> - - <_> - - - - <_> - 8 3 12 6 -1. - <_> - 12 3 4 6 3. - 0 - -0.0194483399391174 - 1 - -0.4421252012252808 - <_> - - - - <_> - 0 14 3 6 -1. - <_> - 0 17 3 3 2. - 0 - 7.6653067953884602e-03 - -0.3395059108734131 - 0.4658721983432770 - <_> - - <_> - - - - <_> - 3 0 13 9 -1. - <_> - 3 3 13 3 3. - 0 - -0.2114201039075851 - 0.5500797033309937 - 1 - <_> - - - - <_> - 8 2 8 6 -1. - <_> - 8 5 8 3 2. - 0 - -0.1062842980027199 - 0.6828094720840454 - -0.3098773956298828 - <_> - - <_> - - - - <_> - 1 11 18 3 -1. - <_> - 7 11 6 3 3. - 0 - -0.0526535995304585 - 1 - -0.3481881916522980 - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 17 1 1 2. - 1 - -5.3522300731856376e-05 - 0.5056676268577576 - -0.2522951960563660 - <_> - - <_> - - - - <_> - 14 12 6 4 -1. - <_> - 16 12 2 4 3. - 0 - -5.7972650974988937e-03 - 0.3023801147937775 - 1 - <_> - - - - <_> - 13 11 4 5 -1. - <_> - 14 11 2 5 2. - 0 - -3.7428899668157101e-03 - 0.2287323027849197 - -0.4836657941341400 - <_> - - <_> - - - - <_> - 19 3 1 2 -1. - <_> - 19 4 1 1 2. - 0 - -5.2694038458866999e-05 - 1 - -0.3798896074295044 - <_> - - - - <_> - 19 0 1 3 -1. - <_> - 19 1 1 1 3. - 0 - -1.1983739677816629e-03 - -0.6744245290756226 - 0.2861126065254211 - <_> - - <_> - - - - <_> - 7 2 8 4 -1. - <_> - 7 4 8 2 2. - 0 - 0.0225447993725538 - 1 - 0.4756571948528290 - <_> - - - - <_> - 9 12 3 2 -1. - <_> - 10 12 1 2 3. - 0 - 3.1783939339220524e-03 - -0.2889334857463837 - 0.5550963878631592 - <_> - - <_> - - - - <_> - 15 8 3 2 -1. - <_> - 16 9 1 2 3. - 1 - 3.4742769785225391e-03 - 1 - -0.5982655286788940 - <_> - - - - <_> - 16 15 3 2 -1. - <_> - 16 15 3 1 2. - 1 - -8.1408787518739700e-03 - -0.5593379139900208 - 0.2234921008348465 - <_> - - <_> - - - - <_> - 6 12 3 3 -1. - <_> - 7 12 1 3 3. - 0 - -3.0238809995353222e-03 - 0.4591797888278961 - 1 - <_> - - - - <_> - 13 12 3 1 -1. - <_> - 14 13 1 1 3. - 1 - -5.9159598313271999e-03 - 0.6223490238189697 - -0.2446815073490143 - <_> - - <_> - - - - <_> - 4 0 1 3 -1. - <_> - 3 1 1 1 3. - 1 - 2.3184430319815874e-03 - 1 - -0.6047807931900024 - <_> - - - - <_> - 8 2 6 4 -1. - <_> - 10 2 2 4 3. - 0 - 7.7198208309710026e-03 - 0.2100450992584229 - -0.6433128118515015 - <_> - - <_> - - - - <_> - 15 15 2 3 -1. - <_> - 14 16 2 1 3. - 1 - -5.5973320268094540e-03 - -0.7162581086158752 - 1 - <_> - - - - <_> - 12 18 8 2 -1. - <_> - 12 19 8 1 2. - 0 - 2.0320380281191319e-04 - -0.3801802992820740 - 0.2133689969778061 - <_> - - <_> - - - - <_> - 7 12 6 7 -1. - <_> - 9 12 2 7 3. - 0 - -3.8205389864742756e-03 - 1 - -0.3595725893974304 - <_> - - - - <_> - 4 18 6 2 -1. - <_> - 6 18 2 2 3. - 0 - 4.8883338458836079e-03 - 0.2647193074226379 - -0.5899668931961060 - <_> - - <_> - - - - <_> - 11 12 3 3 -1. - <_> - 12 12 1 3 3. - 0 - -1.3334590476006269e-03 - 0.3225848972797394 - 1 - <_> - - - - <_> - 12 12 2 2 -1. - <_> - 13 12 1 2 2. - 0 - -1.5447080368176103e-03 - 0.3697105050086975 - -0.3130857050418854 - <_> - - <_> - - - - <_> - 18 5 2 1 -1. - <_> - 19 5 1 1 2. - 0 - 7.5150746852159500e-05 - -0.3467453122138977 - 1 - <_> - - - - <_> - 5 19 4 1 -1. - <_> - 6 19 2 1 2. - 0 - -1.1108840117231011e-03 - -0.5747753977775574 - 0.2920114099979401 - <_> - - <_> - - - - <_> - 0 11 5 2 -1. - <_> - 0 12 5 1 2. - 0 - -1.6881119518075138e-04 - 1 - -0.3604178130626678 - <_> - - - - <_> - 18 0 2 2 -1. - <_> - 18 1 2 1 2. - 0 - -1.2814450019504875e-04 - 0.3504320979118347 - -0.2201405018568039 - <_> - - <_> - - - - <_> - 1 0 12 6 -1. - <_> - 1 2 12 2 3. - 0 - 0.0195469707250595 - 1 - 0.4129591882228851 - <_> - - - - <_> - 1 1 6 1 -1. - <_> - 3 3 2 1 3. - 1 - -0.0110611803829670 - 0.2596271932125092 - -0.3487595021724701 - <_> - - <_> - - - - <_> - 16 9 3 1 -1. - <_> - 17 10 1 1 3. - 1 - 1.8147419905290008e-03 - 1 - -0.5201988816261292 - <_> - - - - <_> - 14 10 1 6 -1. - <_> - 12 12 1 2 3. - 1 - -7.1724010631442070e-03 - 0.2745266854763031 - -0.2682884931564331 - <_> - - <_> - - - - <_> - 3 1 1 3 -1. - <_> - 2 2 1 1 3. - 1 - 2.2158189676702023e-03 - 1 - -0.5734090805053711 - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 2 1 4 1 3. - 1 - -9.6856858581304550e-03 - -0.5802857279777527 - 0.1856441050767899 - -2.2618789672851562 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 14 8 1 -1. - <_> - 8 14 4 1 2. - 0 - -0.0120652196928859 - 0.6167957186698914 - 1 - <_> - - - - <_> - 1 8 18 9 -1. - <_> - 7 11 6 3 9. - 0 - -0.4906777143478394 - 0.1406393945217133 - -0.5535774230957031 - <_> - - <_> - - - - <_> - 19 0 1 18 -1. - <_> - 19 6 1 6 3. - 0 - -6.6585717722773552e-03 - 1 - -0.5133228898048401 - <_> - - - - <_> - 1 13 3 6 -1. - <_> - 1 16 3 3 2. - 0 - 0.0158275607973337 - -0.3630152046680450 - 0.4334334135055542 - <_> - - <_> - - - - <_> - 6 10 7 3 -1. - <_> - 6 11 7 1 3. - 0 - -0.0140811800956726 - 0.5422372221946716 - 1 - <_> - - - - <_> - 6 9 7 3 -1. - <_> - 6 10 7 1 3. - 0 - -0.0121394498273730 - 0.4428128898143768 - -0.3417111933231354 - <_> - - <_> - - - - <_> - 14 1 6 8 -1. - <_> - 17 1 3 8 2. - 0 - 7.8055798076093197e-03 - -0.4865975975990295 - 1 - <_> - - - - <_> - 9 6 2 4 -1. - <_> - 10 6 1 4 2. - 0 - -7.0759910158813000e-05 - 0.3481867909431458 - -0.3280673921108246 - <_> - - <_> - - - - <_> - 6 11 7 2 -1. - <_> - 6 12 7 1 2. - 0 - -0.0181996300816536 - 0.5659415125846863 - 1 - <_> - - - - <_> - 17 11 3 6 -1. - <_> - 18 12 1 6 3. - 1 - -2.5289389304816723e-03 - 0.1131006032228470 - -0.4077238142490387 - <_> - - <_> - - - - <_> - 19 17 1 2 -1. - <_> - 19 17 1 1 2. - 1 - 1.0156990028917789e-03 - 1 - -0.5984297990798950 - <_> - - - - <_> - 16 9 4 2 -1. - <_> - 17 10 2 2 2. - 1 - 2.9432660085149109e-04 - 0.2843945026397705 - -0.3219023048877716 - <_> - - <_> - - - - <_> - 6 18 4 2 -1. - <_> - 7 18 2 2 2. - 0 - 2.0865290425717831e-03 - 1 - -0.7828571200370789 - <_> - - - - <_> - 2 12 4 4 -1. - <_> - 3 12 2 4 2. - 0 - -1.7371569992974401e-03 - 0.3358530104160309 - -0.2058237046003342 - <_> - - <_> - - - - <_> - 19 2 1 2 -1. - <_> - 19 3 1 1 2. - 0 - -7.0026202592998743e-05 - 1 - -0.3910934925079346 - <_> - - - - <_> - 19 2 1 3 -1. - <_> - 19 3 1 1 3. - 0 - -1.4891549944877625e-03 - -0.4695341885089874 - 0.2760924100875854 - <_> - - <_> - - - - <_> - 1 12 12 3 -1. - <_> - 7 12 6 3 2. - 0 - -0.0117884296923876 - 1 - -0.4011414945125580 - <_> - - - - <_> - 6 18 4 1 -1. - <_> - 7 18 2 1 2. - 0 - -1.5155089786276221e-03 - -0.7429047822952271 - 0.2769562900066376 - <_> - - <_> - - - - <_> - 5 2 12 6 -1. - <_> - 5 5 12 3 2. - 0 - 0.0683967173099518 - 1 - 0.4523564875125885 - <_> - - - - <_> - 9 1 6 6 -1. - <_> - 9 4 6 3 2. - 0 - -0.0764414072036743 - 0.4284816980361938 - -0.3163630962371826 - <_> - - <_> - - - - <_> - 7 0 11 9 -1. - <_> - 7 3 11 3 3. - 0 - 0.0683102011680603 - 1 - 0.5140427947044373 - <_> - - - - <_> - 2 0 8 9 -1. - <_> - 2 3 8 3 3. - 0 - -0.0645080134272575 - 0.1808187067508698 - -0.3421795070171356 - <_> - - <_> - - - - <_> - 5 3 4 3 -1. - <_> - 6 3 2 3 2. - 0 - -2.8335719835013151e-03 - -0.6950976848602295 - 1 - <_> - - - - <_> - 0 18 3 2 -1. - <_> - 0 19 3 1 2. - 0 - -9.9732237868010998e-04 - -0.4372459053993225 - 0.2022608071565628 - <_> - - <_> - - - - <_> - 1 0 10 19 -1. - <_> - 6 0 5 19 2. - 0 - -0.2286991029977798 - 0.6466220021247864 - 1 - <_> - - - - <_> - 3 8 2 3 -1. - <_> - 2 9 2 1 3. - 1 - 2.9855249449610710e-03 - 8.1149758771061897e-03 - -0.6021029949188232 - <_> - - <_> - - - - <_> - 10 17 4 3 -1. - <_> - 11 17 2 3 2. - 0 - -2.9535989742726088e-03 - -0.7201312780380249 - 1 - <_> - - - - <_> - 11 13 3 2 -1. - <_> - 12 13 1 2 3. - 0 - -2.1225619129836559e-03 - 0.5087562203407288 - -0.0593666099011898 - <_> - - <_> - - - - <_> - 10 12 3 2 -1. - <_> - 11 12 1 2 3. - 0 - -2.9382819775491953e-03 - 0.3928753137588501 - 1 - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 10 11 1 3 3. - 0 - -5.8961478061974049e-03 - 0.4186604022979736 - -0.2540551126003265 - <_> - - <_> - - - - <_> - 17 2 3 1 -1. - <_> - 18 3 1 1 3. - 1 - 2.5730929337441921e-03 - 1 - -0.5870727896690369 - <_> - - - - <_> - 12 0 6 13 -1. - <_> - 14 0 2 13 3. - 0 - 0.0166477393358946 - 0.1920848041772842 - -0.6038894057273865 - <_> - - <_> - - - - <_> - 16 0 3 1 -1. - <_> - 17 1 1 1 3. - 1 - 2.4041840806603432e-03 - 1 - -0.5719233751296997 - <_> - - - - <_> - 5 11 1 2 -1. - <_> - 5 12 1 1 2. - 0 - -9.0452830772846937e-04 - 0.3486076891422272 - -0.1304924041032791 - <_> - - <_> - - - - <_> - 2 11 4 2 -1. - <_> - 2 11 2 1 2. - <_> - 4 12 2 1 2. - 0 - 4.0814210660755634e-03 - 1 - 0.5177801847457886 - <_> - - - - <_> - 16 15 2 3 -1. - <_> - 15 16 2 1 3. - 1 - 3.3811479806900024e-03 - -6.3828541897237301e-03 - -0.6144781708717346 - <_> - - <_> - - - - <_> - 8 17 4 2 -1. - <_> - 9 17 2 2 2. - 0 - -2.7499340940266848e-03 - -0.6540778875350952 - 1 - <_> - - - - <_> - 0 16 4 3 -1. - <_> - 0 17 4 1 3. - 0 - -4.8207710497081280e-03 - -0.6002961993217468 - 0.1437458992004395 - -2.0994780063629150 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 13 6 2 -1. - <_> - 12 13 3 2 2. - 0 - 7.9710120335221291e-03 - -0.6199223995208740 - 1 - <_> - - - - <_> - 2 14 1 2 -1. - <_> - 2 14 1 1 2. - 1 - -9.7160867881029844e-04 - 0.5487716197967529 - -0.4060696065425873 - <_> - - <_> - - - - <_> - 5 10 8 3 -1. - <_> - 5 11 8 1 3. - 0 - -0.0109458696097136 - 0.4693686962127686 - 1 - <_> - - - - <_> - 15 0 3 8 -1. - <_> - 13 2 3 4 2. - 1 - -0.0611748211085796 - 0.3057084977626801 - -0.4445989131927490 - <_> - - <_> - - - - <_> - 14 11 4 7 -1. - <_> - 15 11 2 7 2. - 0 - -2.3100150283426046e-03 - 1 - -0.3781644105911255 - <_> - - - - <_> - 3 11 15 4 -1. - <_> - 8 11 5 4 3. - 0 - -0.0475850515067577 - 0.4886583983898163 - -0.2972886860370636 - <_> - - <_> - - - - <_> - 9 1 9 9 -1. - <_> - 12 1 3 9 3. - 0 - -2.5944279041141272e-03 - 1 - -0.5440536737442017 - <_> - - - - <_> - 0 11 4 7 -1. - <_> - 2 11 2 7 2. - 0 - -3.9469371549785137e-03 - 0.3638249039649963 - -0.3046984970569611 - <_> - - <_> - - - - <_> - 0 16 1 4 -1. - <_> - 0 18 1 2 2. - 0 - 3.1871569808572531e-04 - -0.4682297110557556 - 1 - <_> - - - - <_> - 19 0 1 6 -1. - <_> - 19 3 1 3 2. - 0 - -2.6655721012502909e-03 - 0.3313196897506714 - -0.2991823852062225 - <_> - - <_> - - - - <_> - 11 8 9 9 -1. - <_> - 11 11 9 3 3. - 0 - -0.0395346507430077 - 1 - -0.3531683087348938 - <_> - - - - <_> - 9 17 8 3 -1. - <_> - 11 17 4 3 2. - 0 - -9.4085611635819077e-04 - 0.4444710016250610 - -0.1108866035938263 - <_> - - <_> - - - - <_> - 18 4 2 2 -1. - <_> - 19 4 1 2 2. - 0 - 6.9526307925116271e-05 - -0.3940326869487762 - 1 - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 12 1 1 9. - 0 - -9.6976682543754578e-03 - 0.5718188881874084 - -0.0163709502667189 - <_> - - <_> - - - - <_> - 13 2 3 4 -1. - <_> - 13 2 3 2 2. - 1 - 0.0394690409302711 - 1 - 0.6915212273597717 - <_> - - - - <_> - 4 6 16 3 -1. - <_> - 12 6 8 3 2. - 0 - -8.2811042666435242e-03 - 0.1334999054670334 - -0.4706448018550873 - <_> - - <_> - - - - <_> - 10 12 1 3 -1. - <_> - 9 13 1 1 3. - 1 - -4.3219728395342827e-03 - 0.3823925852775574 - 1 - <_> - - - - <_> - 8 12 3 3 -1. - <_> - 9 13 1 1 9. - 0 - -5.5436040274798870e-03 - 0.1564587950706482 - -0.4108820855617523 - <_> - - <_> - - - - <_> - 17 17 1 2 -1. - <_> - 17 17 1 1 2. - 1 - -5.9953341406071559e-05 - 1 - -0.3922179937362671 - <_> - - - - <_> - 16 16 2 2 -1. - <_> - 16 16 2 1 2. - 1 - -5.9089371934533119e-03 - -0.5908386707305908 - 0.2792448103427887 - <_> - - <_> - - - - <_> - 6 0 9 6 -1. - <_> - 6 2 9 2 3. - 0 - -0.0447213910520077 - 0.4145449101924896 - 1 - <_> - - - - <_> - 5 0 10 8 -1. - <_> - 5 2 10 4 2. - 0 - 0.0412670187652111 - -0.3224200904369354 - 0.3784987926483154 - <_> - - <_> - - - - <_> - 17 5 2 1 -1. - <_> - 18 5 1 1 2. - 0 - 5.6728709751041606e-05 - -0.3222804069519043 - 1 - <_> - - - - <_> - 11 0 9 9 -1. - <_> - 14 0 3 9 3. - 0 - -0.0624278709292412 - -0.5966644883155823 - 0.2891578078269958 - <_> - - <_> - - - - <_> - 6 9 7 3 -1. - <_> - 6 10 7 1 3. - 0 - -5.6994128972291946e-03 - 0.3749934136867523 - 1 - <_> - - - - <_> - 3 12 6 2 -1. - <_> - 3 12 3 1 2. - <_> - 6 13 3 1 2. - 0 - 7.5202910229563713e-03 - -0.2813245952129364 - 0.5098885893821716 - <_> - - <_> - - - - <_> - 2 10 1 2 -1. - <_> - 2 10 1 1 2. - 1 - -3.3640549518167973e-03 - -0.6397820711135864 - 1 - <_> - - - - <_> - 13 15 2 3 -1. - <_> - 12 16 2 1 3. - 1 - -6.8076648749411106e-03 - -0.7310581803321838 - 0.1447525024414062 - <_> - - <_> - - - - <_> - 7 2 6 5 -1. - <_> - 9 2 2 5 3. - 0 - 0.0126334596425295 - 1 - -0.7772529721260071 - <_> - - - - <_> - 13 13 6 3 -1. - <_> - 15 13 2 3 3. - 0 - -2.9199919663369656e-03 - 0.2325859963893890 - -0.2049060016870499 - <_> - - <_> - - - - <_> - 17 9 3 8 -1. - <_> - 17 11 3 4 2. - 0 - -0.0305822491645813 - -0.6573882102966309 - 1 - <_> - - - - <_> - 8 3 4 3 -1. - <_> - 9 3 2 3 2. - 0 - -2.7796169742941856e-03 - -0.5488834977149963 - 0.1383789032697678 - <_> - - <_> - - - - <_> - 15 6 2 12 -1. - <_> - 15 6 1 12 2. - 1 - -7.6163080520927906e-03 - -0.3591234982013702 - 1 - <_> - - - - <_> - 11 14 4 2 -1. - <_> - 11 14 4 1 2. - 1 - -1.8409560434520245e-03 - 0.2240446954965591 - -0.3788186013698578 - <_> - - <_> - - - - <_> - 9 2 5 4 -1. - <_> - 9 4 5 2 2. - 0 - -0.0392002612352371 - 0.5009055137634277 - 1 - <_> - - - - <_> - 13 12 3 3 -1. - <_> - 14 12 1 3 3. - 0 - -2.2543789818882942e-03 - 0.3136400878429413 - -0.2213186025619507 - <_> - - <_> - - - - <_> - 18 1 2 3 -1. - <_> - 18 2 2 1 3. - 0 - 2.3894659243524075e-03 - 1 - -0.5869951248168945 - <_> - - - - <_> - 5 13 4 1 -1. - <_> - 6 13 2 1 2. - 0 - -1.0725490283221006e-03 - 0.4714120924472809 - -0.0325704887509346 - <_> - - <_> - - - - <_> - 5 10 2 2 -1. - <_> - 5 10 2 1 2. - 1 - 8.9095337898470461e-05 - -0.3044430911540985 - 1 - <_> - - - - <_> - 2 11 1 2 -1. - <_> - 2 11 1 1 2. - 1 - 1.6920049674808979e-03 - 0.3028089106082916 - -0.3890272974967957 - <_> - - <_> - - - - <_> - 18 3 2 6 -1. - <_> - 18 5 2 2 3. - 0 - 0.0117840003222227 - 1 - -0.6899343729019165 - <_> - - - - <_> - 10 4 6 2 -1. - <_> - 10 5 6 1 2. - 0 - 3.9335917681455612e-03 - -0.0677639394998550 - 0.4649978876113892 - -2.1254189014434814 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - 0.0114308400079608 - -0.3927457034587860 - 1 - <_> - - - - <_> - 9 11 3 4 -1. - <_> - 9 11 3 2 2. - 1 - -0.0322429202497005 - 0.6556879878044128 - -0.3106881082057953 - <_> - - <_> - - - - <_> - 0 11 2 5 -1. - <_> - 1 11 1 5 2. - 0 - -1.8382760463282466e-03 - 1 - -0.4082506895065308 - <_> - - - - <_> - 0 8 20 9 -1. - <_> - 0 11 20 3 3. - 0 - -0.1076439991593361 - 0.4328007996082306 - -0.4226345121860504 - <_> - - <_> - - - - <_> - 18 0 1 6 -1. - <_> - 18 3 1 3 2. - 0 - -2.3866090923547745e-03 - 1 - -0.4643520116806030 - <_> - - - - <_> - 14 1 6 7 -1. - <_> - 17 1 3 7 2. - 0 - 8.6586214601993561e-03 - -0.4067307114601135 - 0.4126786887645721 - <_> - - <_> - - - - <_> - 4 13 2 4 -1. - <_> - 4 13 1 2 2. - <_> - 5 15 1 2 2. - 0 - -1.6437229933217168e-03 - 1 - -0.2134404927492142 - <_> - - - - <_> - 1 9 18 6 -1. - <_> - 7 9 6 6 3. - 0 - -0.0985111370682716 - 0.6843231916427612 - -0.0970350131392479 - <_> - - <_> - - - - <_> - 0 16 5 4 -1. - <_> - 0 18 5 2 2. - 0 - 4.4292360544204712e-03 - -0.3949891030788422 - 1 - <_> - - - - <_> - 8 14 3 4 -1. - <_> - 8 15 3 2 2. - 0 - 4.6966210938990116e-03 - -0.1134598031640053 - 0.4968199133872986 - <_> - - <_> - - - - <_> - 7 7 8 3 -1. - <_> - 11 7 4 3 2. - 0 - -8.8480701670050621e-03 - 1 - -0.3129310011863708 - <_> - - - - <_> - 12 3 4 7 -1. - <_> - 13 3 2 7 2. - 0 - -6.7258379422128201e-03 - -0.6163579225540161 - 0.3176476955413818 - <_> - - <_> - - - - <_> - 13 12 2 8 -1. - <_> - 13 12 1 4 2. - <_> - 14 16 1 4 2. - 0 - 2.0052040927112103e-03 - 1 - 0.3172427117824554 - <_> - - - - <_> - 13 10 3 5 -1. - <_> - 14 11 1 5 3. - 1 - -0.0134073402732611 - 0.1973506063222885 - -0.3719918131828308 - <_> - - <_> - - - - <_> - 10 5 4 5 -1. - <_> - 11 5 2 5 2. - 0 - -4.4199679978191853e-03 - -0.5716447830200195 - 1 - <_> - - - - <_> - 2 11 18 2 -1. - <_> - 8 11 6 2 3. - 0 - -0.0328009389340878 - 0.3059993088245392 - -0.1739796996116638 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 4.9407979531679302e-05 - -0.2827053070068359 - 1 - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 4.1550169698894024e-03 - 0.2968680858612061 - -0.4849430918693542 - <_> - - <_> - - - - <_> - 15 17 1 2 -1. - <_> - 15 17 1 1 2. - 1 - -7.5589967309497297e-05 - 1 - -0.3853113949298859 - <_> - - - - <_> - 17 16 1 3 -1. - <_> - 16 17 1 1 3. - 1 - -3.2147730235010386e-03 - -0.6330680847167969 - 0.2343475073575974 - <_> - - <_> - - - - <_> - 18 0 2 10 -1. - <_> - 19 0 1 10 2. - 0 - 1.6021779738366604e-03 - -0.2957904934883118 - 1 - <_> - - - - <_> - 14 2 6 7 -1. - <_> - 16 2 2 7 3. - 0 - -0.0194780193269253 - -0.4962520897388458 - 0.2609257996082306 - <_> - - <_> - - - - <_> - 12 0 4 4 -1. - <_> - 12 0 4 2 2. - 1 - -0.0251937508583069 - 0.3938488066196442 - 1 - <_> - - - - <_> - 0 3 15 6 -1. - <_> - 0 5 15 2 3. - 0 - -0.0464877299964428 - 0.2216883003711700 - -0.2969174087047577 - <_> - - <_> - - - - <_> - 5 1 4 4 -1. - <_> - 6 1 2 4 2. - 0 - 4.3414267711341381e-03 - 1 - -0.6766117811203003 - <_> - - - - <_> - 7 13 6 7 -1. - <_> - 9 13 2 7 3. - 0 - -2.4886759929358959e-03 - 0.2050992995500565 - -0.2977114021778107 - <_> - - <_> - - - - <_> - 6 18 6 2 -1. - <_> - 8 18 2 2 3. - 0 - -5.8827269822359085e-03 - -0.6130179762840271 - 1 - <_> - - - - <_> - 0 15 5 2 -1. - <_> - 0 16 5 1 2. - 0 - 9.0498890494927764e-04 - -0.3402321934700012 - 0.1816820949316025 - <_> - - <_> - - - - <_> - 4 1 12 6 -1. - <_> - 4 3 12 2 3. - 0 - -0.0983389019966125 - 0.4772956967353821 - 1 - <_> - - - - <_> - 5 0 13 8 -1. - <_> - 5 2 13 4 2. - 0 - 0.0561418086290359 - -0.2290443927049637 - 0.3441008925437927 - <_> - - <_> - - - - <_> - 13 10 6 6 -1. - <_> - 15 12 2 2 9. - 0 - -5.5787130258977413e-03 - 1 - -0.3591017127037048 - <_> - - - - <_> - 15 9 3 1 -1. - <_> - 16 10 1 1 3. - 1 - 1.5108759980648756e-03 - 0.2490043044090271 - -0.4379807114601135 - <_> - - <_> - - - - <_> - 5 11 3 3 -1. - <_> - 6 12 1 1 9. - 0 - -6.0129738412797451e-03 - 0.3116418123245239 - 1 - <_> - - - - <_> - 6 11 2 2 -1. - <_> - 6 11 1 1 2. - <_> - 7 12 1 1 2. - 0 - -7.9341192031279206e-04 - 0.2675966024398804 - -0.3680290877819061 - <_> - - <_> - - - - <_> - 17 3 3 2 -1. - <_> - 18 4 1 2 3. - 1 - 6.1855330131947994e-03 - 1 - -0.7215331792831421 - <_> - - - - <_> - 16 3 3 3 -1. - <_> - 17 4 1 3 3. - 1 - -7.3785060085356236e-03 - -0.5371438264846802 - 0.1382489055395126 - <_> - - <_> - - - - <_> - 12 13 3 1 -1. - <_> - 13 13 1 1 3. - 0 - -6.7488732747733593e-04 - 0.3740605115890503 - 1 - <_> - - - - <_> - 11 12 3 2 -1. - <_> - 12 12 1 2 3. - 0 - -1.3102099765092134e-03 - 0.1900379061698914 - -0.3163227140903473 - <_> - - <_> - - - - <_> - 10 0 1 2 -1. - <_> - 10 0 1 1 2. - 1 - 4.9453211249783635e-04 - -0.2328317016363144 - 1 - <_> - - - - <_> - 17 13 1 6 -1. - <_> - 17 13 1 3 2. - 1 - 1.2824690202251077e-03 - 0.3046380877494812 - -0.4809210896492004 - <_> - - <_> - - - - <_> - 16 14 2 4 -1. - <_> - 16 14 2 2 2. - 1 - -0.0226248204708099 - -0.6878347992897034 - 1 - <_> - - - - <_> - 3 0 4 3 -1. - <_> - 4 0 2 3 2. - 0 - 4.3685249984264374e-03 - 0.1240309029817581 - -0.7922073006629944 - <_> - - <_> - - - - <_> - 6 0 14 1 -1. - <_> - 13 0 7 1 2. - 0 - 5.6756488047540188e-03 - 1 - 0.1761142015457153 - <_> - - - - <_> - 2 15 18 5 -1. - <_> - 8 15 6 5 3. - 0 - -0.0817692130804062 - 0.3894216120243073 - -0.4509401023387909 - -2.0614759922027588 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 11 8 5 -1. - <_> - 8 11 4 5 2. - 0 - -0.0200035497546196 - 1 - -0.5665075182914734 - <_> - - - - <_> - 0 8 5 12 -1. - <_> - 0 11 5 6 2. - 0 - -0.0326212085783482 - 0.5080708265304565 - -0.4534570872783661 - <_> - - <_> - - - - <_> - 14 0 6 2 -1. - <_> - 14 0 6 1 2. - 1 - 0.0106681399047375 - -0.3231683969497681 - 1 - <_> - - - - <_> - 13 8 4 5 -1. - <_> - 14 9 2 5 2. - 1 - -0.0162766892462969 - 0.6018949747085571 - -0.2405951023101807 - <_> - - <_> - - - - <_> - 0 11 4 9 -1. - <_> - 2 11 2 9 2. - 0 - -2.8211208991706371e-03 - 1 - -0.4718115031719208 - <_> - - - - <_> - 6 9 2 6 -1. - <_> - 6 11 2 2 3. - 0 - -0.0142911802977324 - 0.5128008723258972 - -0.1074400022625923 - <_> - - <_> - - - - <_> - 12 18 4 2 -1. - <_> - 12 19 4 1 2. - 0 - 1.0120410006493330e-03 - -0.3884469866752625 - 1 - <_> - - - - <_> - 14 13 6 2 -1. - <_> - 16 13 2 2 3. - 0 - -5.9822672046720982e-03 - 0.4692885875701904 - -0.0913559198379517 - <_> - - <_> - - - - <_> - 19 9 1 10 -1. - <_> - 19 9 1 5 2. - 1 - -2.4705699179321527e-03 - 1 - -0.4596441090106964 - <_> - - - - <_> - 11 5 4 4 -1. - <_> - 12 5 2 4 2. - 0 - 2.4079859722405672e-03 - 0.2183067053556442 - -0.5937340259552002 - <_> - - <_> - - - - <_> - 14 12 3 5 -1. - <_> - 15 12 1 5 3. - 0 - -1.4312269631773233e-03 - 1 - -0.2473167032003403 - <_> - - - - <_> - 17 0 2 6 -1. - <_> - 18 0 1 6 2. - 0 - 2.9141810955479741e-04 - -0.2597224116325378 - 0.3820636868476868 - <_> - - <_> - - - - <_> - 13 16 3 3 -1. - <_> - 14 16 1 3 3. - 0 - -3.2818811014294624e-03 - -0.7718012928962708 - 1 - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 2 1 2 2. - 0 - -1.0365940397605300e-03 - 0.2356985956430435 - -0.2206770032644272 - <_> - - <_> - - - - <_> - 6 13 4 2 -1. - <_> - 7 13 2 2 2. - 0 - -2.2078400943428278e-03 - 0.3088611960411072 - 1 - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 10 11 1 3 3. - 0 - 3.5239339340478182e-03 - -0.2849600017070770 - 0.4754430055618286 - <_> - - <_> - - - - <_> - 14 15 2 3 -1. - <_> - 13 16 2 1 3. - 1 - -6.1774807982146740e-03 - -0.7031838297843933 - 1 - <_> - - - - <_> - 11 7 3 4 -1. - <_> - 12 7 1 4 3. - 0 - -3.2023619860410690e-03 - -0.5136131048202515 - 0.1565625965595245 - <_> - - <_> - - - - <_> - 5 12 1 3 -1. - <_> - 4 13 1 1 3. - 1 - -8.7003601947799325e-04 - 1 - -0.2992512881755829 - <_> - - - - <_> - 1 11 6 2 -1. - <_> - 1 11 3 1 2. - <_> - 4 12 3 1 2. - 0 - -3.8079950027167797e-03 - 0.5521563887596130 - -8.0608041025698185e-04 - <_> - - <_> - - - - <_> - 5 7 2 3 -1. - <_> - 4 8 2 1 3. - 1 - 4.9994210712611675e-03 - 1 - -0.4354174137115479 - <_> - - - - <_> - 5 12 2 2 -1. - <_> - 5 12 1 1 2. - <_> - 6 13 1 1 2. - 0 - -1.0323170572519302e-03 - 0.5499215126037598 - -5.0770761445164680e-03 - <_> - - <_> - - - - <_> - 8 8 4 3 -1. - <_> - 8 9 4 1 3. - 0 - 6.9215619005262852e-03 - 1 - 0.3390001058578491 - <_> - - - - <_> - 7 8 5 3 -1. - <_> - 7 9 5 1 3. - 0 - -8.1578325480222702e-03 - 0.3435488939285278 - -0.2448388934135437 - <_> - - <_> - - - - <_> - 6 19 4 1 -1. - <_> - 7 19 2 1 2. - 0 - -1.6159559600055218e-03 - -0.7465370297431946 - 1 - <_> - - - - <_> - 5 0 4 4 -1. - <_> - 6 0 2 4 2. - 0 - 4.7165839932858944e-03 - 0.1185505986213684 - -0.7180386781692505 - <_> - - <_> - - - - <_> - 4 0 16 8 -1. - <_> - 8 0 8 8 2. - 0 - -0.0160931199789047 - 1 - -0.3298721015453339 - <_> - - - - <_> - 12 11 3 4 -1. - <_> - 11 12 3 2 2. - 1 - -5.9861610643565655e-03 - 0.3126398026943207 - -0.2319402992725372 - <_> - - <_> - - - - <_> - 0 4 20 6 -1. - <_> - 5 4 10 6 2. - 0 - 0.0641226172447205 - 1 - 0.4623914957046509 - <_> - - - - <_> - 13 2 2 4 -1. - <_> - 13 2 2 2 2. - 1 - 0.0215181596577168 - -0.2427732050418854 - 0.4096390902996063 - <_> - - <_> - - - - <_> - 0 5 14 15 -1. - <_> - 7 5 7 15 2. - 0 - -0.2854138016700745 - 0.4452179968357086 - 1 - <_> - - - - <_> - 1 18 3 2 -1. - <_> - 1 19 3 1 2. - 0 - 2.7372559998184443e-04 - -0.4730761051177979 - 0.0767397210001945 - <_> - - <_> - - - - <_> - 3 6 3 3 -1. - <_> - 2 7 3 1 3. - 1 - -6.4039281569421291e-03 - -0.5616778731346130 - 1 - <_> - - - - <_> - 0 1 6 8 -1. - <_> - 0 1 3 4 2. - <_> - 3 5 3 4 2. - 0 - 0.0142796700820327 - -0.0673118904232979 - 0.4380675852298737 - <_> - - <_> - - - - <_> - 5 0 6 6 -1. - <_> - 7 0 2 6 3. - 0 - -0.0131798600777984 - -0.6767266988754272 - 1 - <_> - - - - <_> - 1 1 15 8 -1. - <_> - 1 3 15 4 2. - 0 - 0.0668280720710754 - -0.0321829095482826 - 0.5130872130393982 - <_> - - <_> - - - - <_> - 0 0 16 1 -1. - <_> - 8 0 8 1 2. - 0 - 6.3021448440849781e-03 - -0.2008266001939774 - 1 - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - -1.6806010389700532e-03 - -0.5176724195480347 - 0.3857651054859161 - <_> - - <_> - - - - <_> - 3 13 4 1 -1. - <_> - 4 13 2 1 2. - 0 - -1.5057720011100173e-03 - 0.3935809135437012 - 1 - <_> - - - - <_> - 4 11 2 2 -1. - <_> - 4 11 1 1 2. - <_> - 5 12 1 1 2. - 0 - 1.1699240421876311e-03 - -0.2557956874370575 - 0.3192729949951172 - <_> - - <_> - - - - <_> - 17 2 3 3 -1. - <_> - 18 3 1 1 9. - 0 - 7.2735180146992207e-03 - 1 - -0.7166724205017090 - <_> - - - - <_> - 16 3 2 1 -1. - <_> - 17 3 1 1 2. - 0 - 7.8693883551750332e-05 - -0.1890882998704910 - 0.2384908050298691 - <_> - - <_> - - - - <_> - 0 11 3 2 -1. - <_> - 0 12 3 1 2. - 0 - 1.9624589476734400e-03 - 1 - -0.5158377289772034 - <_> - - - - <_> - 4 11 4 2 -1. - <_> - 4 11 2 1 2. - <_> - 6 12 2 1 2. - 0 - -3.1472831033170223e-03 - 0.4803304970264435 - -0.0362379103899002 - <_> - - <_> - - - - <_> - 10 0 4 11 -1. - <_> - 11 0 2 11 2. - 0 - 5.0133569166064262e-03 - 1 - -0.5272933840751648 - <_> - - - - <_> - 18 15 2 3 -1. - <_> - 17 16 2 1 3. - 1 - -6.5994369797408581e-03 - -0.6940053105354309 - 0.1227589026093483 - <_> - - <_> - - - - <_> - 2 11 8 1 -1. - <_> - 2 11 4 1 2. - 1 - -0.0427003614604473 - -0.6821854710578918 - 1 - <_> - - - - <_> - 17 13 1 6 -1. - <_> - 17 13 1 3 2. - 1 - -3.5096149076707661e-05 - 0.1216031014919281 - -0.4214228987693787 - -1.9795049428939819 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 13 6 2 -1. - <_> - 13 13 2 2 3. - 0 - 8.7128365412354469e-03 - -0.4404883980751038 - 1 - <_> - - - - <_> - 19 0 1 10 -1. - <_> - 19 5 1 5 2. - 0 - -4.0675927884876728e-03 - 0.6003010272979736 - -0.2604264914989471 - <_> - - <_> - - - - <_> - 2 8 7 9 -1. - <_> - 2 11 7 3 3. - 0 - -0.0839333981275558 - 1 - -0.3794398903846741 - <_> - - - - <_> - 0 11 20 2 -1. - <_> - 5 11 10 2 2. - 0 - -0.0226261802017689 - 0.5252948999404907 - -0.3273332118988037 - <_> - - <_> - - - - <_> - 6 14 6 1 -1. - <_> - 8 14 2 1 3. - 0 - -3.5725389607250690e-03 - 1 - -0.2603093981742859 - <_> - - - - <_> - 10 3 8 7 -1. - <_> - 12 3 4 7 2. - 0 - -1.6297569964081049e-03 - 0.4843423068523407 - -0.3836326897144318 - <_> - - <_> - - - - <_> - 7 0 5 9 -1. - <_> - 7 3 5 3 3. - 0 - -0.0800115764141083 - 0.3957956135272980 - 1 - <_> - - - - <_> - 0 0 16 6 -1. - <_> - 0 2 16 2 3. - 0 - -0.0960614532232285 - 0.4287418127059937 - -0.2909663915634155 - <_> - - <_> - - - - <_> - 6 10 2 6 -1. - <_> - 4 12 2 2 3. - 1 - -9.3183852732181549e-03 - 1 - -0.3932549953460693 - <_> - - - - <_> - 16 0 4 14 -1. - <_> - 18 0 2 14 2. - 0 - 9.2205153778195381e-03 - -0.2985737919807434 - 0.3173330128192902 - <_> - - <_> - - - - <_> - 6 0 9 6 -1. - <_> - 6 2 9 2 3. - 0 - 0.0232087504118681 - 1 - 0.3929522931575775 - <_> - - - - <_> - 8 18 12 2 -1. - <_> - 8 19 12 1 2. - 0 - 1.6389730153605342e-03 - -0.5403599739074707 - -0.0218368805944920 - <_> - - <_> - - - - <_> - 10 17 4 3 -1. - <_> - 11 17 2 3 2. - 0 - 2.8872499242424965e-03 - 1 - -0.7817273736000061 - <_> - - - - <_> - 5 0 1 4 -1. - <_> - 4 1 1 2 2. - 1 - 4.7465260140597820e-03 - 0.1447418928146362 - -0.6423770189285278 - <_> - - <_> - - - - <_> - 18 6 2 2 -1. - <_> - 18 6 1 2 2. - 1 - -5.7432148605585098e-03 - -0.6555628776550293 - 1 - <_> - - - - <_> - 12 10 3 4 -1. - <_> - 11 11 3 2 2. - 1 - -8.5324952378869057e-03 - 0.2209030985832214 - -0.2579030096530914 - <_> - - <_> - - - - <_> - 9 9 4 3 -1. - <_> - 9 10 4 1 3. - 0 - -8.8752172887325287e-03 - 0.4659686088562012 - 1 - <_> - - - - <_> - 9 10 4 3 -1. - <_> - 9 11 4 1 3. - 0 - -7.7129527926445007e-03 - 0.2527978122234344 - -0.2617045044898987 - <_> - - <_> - - - - <_> - 17 4 3 4 -1. - <_> - 18 5 1 4 3. - 1 - 7.6909800991415977e-03 - 1 - -0.5935081839561462 - <_> - - - - <_> - 18 0 2 3 -1. - <_> - 18 1 2 1 3. - 0 - 2.6657560374587774e-03 - 0.1696972995996475 - -0.5412395000457764 - <_> - - <_> - - - - <_> - 18 1 2 2 -1. - <_> - 18 2 2 1 2. - 0 - -4.4685939792543650e-04 - 1 - -0.3038387000560760 - <_> - - - - <_> - 19 1 1 3 -1. - <_> - 19 2 1 1 3. - 0 - -1.5998890157788992e-03 - -0.5481774806976318 - 0.2497155964374542 - <_> - - <_> - - - - <_> - 8 18 4 2 -1. - <_> - 9 18 2 2 2. - 0 - 1.9368670182302594e-03 - 1 - -0.6320034861564636 - <_> - - - - <_> - 2 13 4 2 -1. - <_> - 2 13 2 1 2. - <_> - 4 14 2 1 2. - 0 - -2.4878541007637978e-03 - 0.4705137908458710 - -0.0451872199773788 - <_> - - <_> - - - - <_> - 3 11 4 2 -1. - <_> - 3 11 2 1 2. - <_> - 5 12 2 1 2. - 0 - -2.8134910389780998e-03 - 0.3927085101604462 - 1 - <_> - - - - <_> - 2 10 4 2 -1. - <_> - 2 10 2 1 2. - <_> - 4 11 2 1 2. - 0 - -1.4107710449025035e-03 - 0.1801708042621613 - -0.2571457922458649 - <_> - - <_> - - - - <_> - 5 9 2 3 -1. - <_> - 4 10 2 1 3. - 1 - -6.9013070315122604e-03 - -0.5338624119758606 - 1 - <_> - - - - <_> - 2 10 4 6 -1. - <_> - 3 10 2 6 2. - 0 - -1.1458620429039001e-03 - 0.2817435860633850 - -0.1608024984598160 - <_> - - <_> - - - - <_> - 13 0 6 8 -1. - <_> - 16 0 3 8 2. - 0 - 9.2800445854663849e-03 - -0.3002896010875702 - 1 - <_> - - - - <_> - 10 0 8 9 -1. - <_> - 12 0 4 9 2. - 0 - -0.0412813015282154 - -0.6240906715393066 - 0.2054990977048874 - <_> - - <_> - - - - <_> - 1 11 8 1 -1. - <_> - 1 11 4 1 2. - 1 - -0.0356253609061241 - -0.5252934098243713 - 1 - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - -4.1647539474070072e-03 - -0.6353800892829895 - 0.1284665018320084 - <_> - - <_> - - - - <_> - 13 13 2 2 -1. - <_> - 14 13 1 2 2. - 0 - -9.5598259940743446e-04 - 0.2650550901889801 - 1 - <_> - - - - <_> - 4 12 3 4 -1. - <_> - 5 12 1 4 3. - 0 - -8.9347851462662220e-04 - 0.1826681047677994 - -0.3753179013729095 - <_> - - <_> - - - - <_> - 6 17 4 3 -1. - <_> - 7 17 2 3 2. - 0 - 2.5431478861719370e-03 - 1 - -0.6105722188949585 - <_> - - - - <_> - 14 1 2 6 -1. - <_> - 14 1 2 3 2. - 1 - -0.0158538892865181 - 0.3075476884841919 - -0.0981439203023911 - <_> - - <_> - - - - <_> - 8 4 8 4 -1. - <_> - 8 6 8 2 2. - 0 - -0.0413157604634762 - 0.4924758970737457 - 1 - <_> - - - - <_> - 8 3 4 5 -1. - <_> - 10 3 2 5 2. - 0 - -6.8226549774408340e-04 - 0.0629759430885315 - -0.4263429939746857 - <_> - - <_> - - - - <_> - 13 12 2 2 -1. - <_> - 13 12 1 1 2. - <_> - 14 13 1 1 2. - 0 - 6.3098431564867496e-04 - 1 - 0.3139733970165253 - <_> - - - - <_> - 6 12 3 3 -1. - <_> - 7 12 1 3 3. - 0 - -2.8946860693395138e-03 - 0.2859097123146057 - -0.2562322914600372 - <_> - - <_> - - - - <_> - 5 7 3 3 -1. - <_> - 4 8 3 1 3. - 1 - -0.0102441404014826 - -0.6973748207092285 - 1 - <_> - - - - <_> - 15 10 5 4 -1. - <_> - 15 11 5 2 2. - 0 - -0.0169798508286476 - -0.7312573194503784 - 0.1038917973637581 - <_> - - <_> - - - - <_> - 14 8 4 9 -1. - <_> - 14 11 4 3 3. - 0 - -7.0198569446802139e-03 - 1 - -0.3507063984870911 - <_> - - - - <_> - 16 9 4 3 -1. - <_> - 16 10 4 1 3. - 0 - -6.0688778758049011e-03 - -0.5339580774307251 - 0.1733485013246536 - <_> - - <_> - - - - <_> - 18 7 2 13 -1. - <_> - 19 7 1 13 2. - 0 - -9.6911415457725525e-03 - 0.5639979839324951 - 1 - <_> - - - - <_> - 0 0 16 1 -1. - <_> - 8 0 8 1 2. - 0 - 8.5460003465414047e-03 - -0.2471649050712585 - 0.1821652054786682 - <_> - - <_> - - - - <_> - 12 11 5 4 -1. - <_> - 11 12 5 2 2. - 1 - -4.9479231238365173e-03 - 1 - -0.2833398878574371 - <_> - - - - <_> - 17 13 2 4 -1. - <_> - 18 13 1 4 2. - 0 - 1.9269150216132402e-03 - -0.0681960731744766 - 0.3778719902038574 - -1.9048260450363159 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 13 9 2 -1. - <_> - 9 13 3 2 3. - 0 - -0.0286398194730282 - 1 - -0.3771826028823853 - <_> - - - - <_> - 3 8 6 8 -1. - <_> - 3 10 6 4 2. - 0 - -0.0421766601502895 - 0.7229869961738586 - -0.0761411637067795 - <_> - - <_> - - - - <_> - 14 12 4 3 -1. - <_> - 15 12 2 3 2. - 0 - -2.2537210024893284e-03 - 1 - -0.3272745907306671 - <_> - - - - <_> - 12 6 6 4 -1. - <_> - 14 8 2 4 3. - 1 - -0.0306833293288946 - 0.5150523781776428 - -0.2223519980907440 - <_> - - <_> - - - - <_> - 4 0 12 6 -1. - <_> - 4 3 12 3 2. - 0 - -0.1234126985073090 - 0.4469901025295258 - 1 - <_> - - - - <_> - 0 0 17 2 -1. - <_> - 0 1 17 1 2. - 0 - -0.0236741509288549 - 0.3470853865146637 - -0.3177390098571777 - <_> - - <_> - - - - <_> - 2 14 1 6 -1. - <_> - 2 17 1 3 2. - 0 - 3.1951239798218012e-03 - -0.4977504909038544 - 1 - <_> - - - - <_> - 3 10 3 3 -1. - <_> - 2 11 3 1 3. - 1 - -1.4915530337020755e-03 - 0.2638441920280457 - -0.3891254961490631 - <_> - - <_> - - - - <_> - 18 2 2 9 -1. - <_> - 19 2 1 9 2. - 0 - 8.8097527623176575e-04 - -0.4093979001045227 - 1 - <_> - - - - <_> - 7 9 13 8 -1. - <_> - 7 11 13 4 2. - 0 - -0.0583557710051537 - 0.3228761851787567 - -0.2304559946060181 - <_> - - <_> - - - - <_> - 17 6 3 4 -1. - <_> - 18 7 1 4 3. - 1 - 5.1132370717823505e-03 - 1 - -0.5135368108749390 - <_> - - - - <_> - 6 13 2 2 -1. - <_> - 7 13 1 2 2. - 0 - -4.5418320223689079e-03 - 0.5301175713539124 - -0.0306493304669857 - <_> - - <_> - - - - <_> - 15 16 1 3 -1. - <_> - 14 17 1 1 3. - 1 - 1.6811339883133769e-03 - 1 - -0.5316147208213806 - <_> - - - - <_> - 11 16 6 4 -1. - <_> - 11 16 3 2 2. - <_> - 14 18 3 2 2. - 0 - 2.8129699639976025e-03 - -0.0675240531563759 - 0.3854224979877472 - <_> - - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 1 1 2 2. - 0 - 2.1835418883711100e-03 - 1 - -0.6429883241653442 - <_> - - - - <_> - 19 0 1 2 -1. - <_> - 19 1 1 1 2. - 0 - -2.4335379712283611e-03 - -0.6631330847740173 - 0.1388237029314041 - <_> - - <_> - - - - <_> - 12 3 3 6 -1. - <_> - 13 3 1 6 3. - 0 - 3.0736608896404505e-03 - 1 - -0.6343315839767456 - <_> - - - - <_> - 8 10 4 3 -1. - <_> - 8 11 4 1 3. - 0 - -9.6425544470548630e-03 - 0.3869616091251373 - -0.0687377974390984 - <_> - - <_> - - - - <_> - 19 0 1 8 -1. - <_> - 19 4 1 4 2. - 0 - -7.2082108817994595e-03 - 0.1612125039100647 - 1 - <_> - - - - <_> - 14 0 6 6 -1. - <_> - 14 0 3 3 2. - <_> - 17 3 3 3 2. - 0 - -8.0191977322101593e-03 - 0.3801113069057465 - -0.4139797985553741 - <_> - - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 12 1 1 9. - 0 - -7.2479159571230412e-03 - 0.2435187995433807 - 1 - <_> - - - - <_> - 1 6 10 12 -1. - <_> - 6 6 5 12 2. - 0 - -0.2263164073228836 - 0.6066794991493225 - -0.2252188026905060 - <_> - - <_> - - - - <_> - 10 6 2 1 -1. - <_> - 11 6 1 1 2. - 0 - -7.0091613451950252e-05 - 0.1711532026529312 - 1 - <_> - - - - <_> - 8 1 7 10 -1. - <_> - 8 6 7 5 2. - 0 - -0.1816139966249466 - 0.5272598266601562 - -0.3524754047393799 - <_> - - <_> - - - - <_> - 13 11 3 3 -1. - <_> - 14 12 1 3 3. - 1 - -9.4038434326648712e-03 - 0.3497051894664764 - 1 - <_> - - - - <_> - 10 13 4 4 -1. - <_> - 10 13 2 2 2. - <_> - 12 15 2 2 2. - 0 - -2.1289030555635691e-03 - 0.0558786988258362 - -0.4981659054756165 - <_> - - <_> - - - - <_> - 15 15 2 3 -1. - <_> - 14 16 2 1 3. - 1 - -5.1798550412058830e-03 - -0.6309564113616943 - 1 - <_> - - - - <_> - 13 13 3 1 -1. - <_> - 14 13 1 1 3. - 0 - -6.5030192490667105e-04 - 0.3585645854473114 - -0.0782810524106026 - <_> - - <_> - - - - <_> - 10 4 6 3 -1. - <_> - 12 4 2 3 3. - 0 - -0.0105559304356575 - -0.5550283193588257 - 1 - <_> - - - - <_> - 1 7 6 4 -1. - <_> - 1 7 3 2 2. - <_> - 4 9 3 2 2. - 0 - -5.1852981559932232e-03 - 0.3554868102073669 - -0.0688922926783562 - <_> - - <_> - - - - <_> - 15 7 4 2 -1. - <_> - 16 8 2 2 2. - 1 - -7.8725479543209076e-03 - -0.4859617948532104 - 1 - <_> - - - - <_> - 10 4 9 6 -1. - <_> - 13 4 3 6 3. - 0 - -6.5342970192432404e-03 - 0.2117895931005478 - -0.2317408025264740 - <_> - - <_> - - - - <_> - 14 2 6 2 -1. - <_> - 14 2 6 1 2. - 1 - -0.0139099201187491 - 0.5993698239326477 - 1 - <_> - - - - <_> - 5 18 4 2 -1. - <_> - 6 18 2 2 2. - 0 - 1.5418450348079205e-03 - -9.5086917281150818e-03 - -0.6479613184928894 - <_> - - <_> - - - - <_> - 0 12 2 8 -1. - <_> - 1 12 1 8 2. - 0 - -1.1549900518730283e-03 - 1 - -0.2750172019004822 - <_> - - - - <_> - 1 19 18 1 -1. - <_> - 10 19 9 1 2. - 0 - -0.0326870307326317 - -0.6733620762825012 - 0.1952040046453476 - <_> - - <_> - - - - <_> - 2 0 12 20 -1. - <_> - 8 0 6 20 2. - 0 - -0.2642259001731873 - 0.3698686957359314 - 1 - <_> - - - - <_> - 2 0 14 1 -1. - <_> - 9 0 7 1 2. - 0 - 6.9438670761883259e-03 - -0.3002974092960358 - 0.1499896943569183 - <_> - - <_> - - - - <_> - 7 9 8 3 -1. - <_> - 7 10 8 1 3. - 0 - -0.0120779201388359 - 0.4164412915706635 - 1 - <_> - - - - <_> - 3 11 2 2 -1. - <_> - 3 11 1 1 2. - <_> - 4 12 1 1 2. - 0 - -1.3986700214445591e-03 - 0.4124872982501984 - -0.1953365951776505 - <_> - - <_> - - - - <_> - 11 0 9 2 -1. - <_> - 14 0 3 2 3. - 0 - 0.0131383398547769 - 1 - -0.6420493125915527 - <_> - - - - <_> - 6 0 9 1 -1. - <_> - 9 0 3 1 3. - 0 - 7.2417110204696655e-03 - 0.1135936006903648 - -0.7383887171745300 - <_> - - <_> - - - - <_> - 4 8 1 4 -1. - <_> - 3 9 1 2 2. - 1 - -7.4837901629507542e-03 - -0.6924629807472229 - 1 - <_> - - - - <_> - 0 9 3 3 -1. - <_> - 0 10 3 1 3. - 0 - 6.8022231571376324e-03 - 0.0928734391927719 - -0.6004747152328491 - <_> - - <_> - - - - <_> - 3 4 15 12 -1. - <_> - 8 8 5 4 9. - 0 - 0.4532290995121002 - 1 - 0.5626053214073181 - <_> - - - - <_> - 7 13 6 6 -1. - <_> - 9 13 2 6 3. - 0 - -5.5721630342304707e-03 - 0.0778201594948769 - -0.3399060070514679 - <_> - - <_> - - - - <_> - 2 1 12 6 -1. - <_> - 2 3 12 2 3. - 0 - 0.0315839610993862 - 1 - 0.3229267001152039 - <_> - - - - <_> - 1 1 6 1 -1. - <_> - 3 3 2 1 3. - 1 - -5.7926177978515625e-03 - 0.1553445011377335 - -0.3571783900260925 - <_> - - <_> - - - - <_> - 3 4 5 3 -1. - <_> - 2 5 5 1 3. - 1 - -7.6025379821658134e-03 - -0.5185949802398682 - 1 - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - 9.5151038840413094e-04 - -0.0295706707984209 - 0.4602751135826111 - <_> - - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 11 1 3 3. - 0 - 1.9723300356417894e-03 - 1 - 0.3692665100097656 - <_> - - - - <_> - 9 11 3 4 -1. - <_> - 10 11 1 4 3. - 0 - 2.3158260155469179e-03 - -0.2129974067211151 - 0.2694854140281677 - <_> - - <_> - - - - <_> - 17 2 3 1 -1. - <_> - 18 3 1 1 3. - 1 - 2.1179600153118372e-03 - 1 - -0.4836950004100800 - <_> - - - - <_> - 5 11 6 3 -1. - <_> - 8 11 3 3 2. - 0 - -2.6946600992232561e-03 - 0.1854566037654877 - -0.2941196858882904 - <_> - - <_> - - - - <_> - 2 12 12 8 -1. - <_> - 2 12 6 4 2. - <_> - 8 16 6 4 2. - 0 - 0.0588654093444347 - 1 - -0.4677037894725800 - <_> - - - - <_> - 13 15 2 3 -1. - <_> - 12 16 2 1 3. - 1 - -6.8408921360969543e-03 - -0.6637132167816162 - 0.1272134929895401 - -1.9407349824905396 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 14 9 1 -1. - <_> - 8 14 3 1 3. - 0 - -0.0127664897590876 - 1 - -0.3796809911727905 - <_> - - - - <_> - 13 13 4 6 -1. - <_> - 13 13 2 3 2. - <_> - 15 16 2 3 2. - 0 - 3.7821640726178885e-03 - -0.1600182950496674 - 0.6195328831672668 - <_> - - <_> - - - - <_> - 8 7 9 1 -1. - <_> - 11 10 3 1 3. - 1 - -0.0330498814582825 - 1 - -0.3682548105716705 - <_> - - - - <_> - 16 0 4 4 -1. - <_> - 16 0 4 2 2. - 1 - 0.0450502410531044 - 9.3770343810319901e-03 - 0.7157058119773865 - <_> - - <_> - - - - <_> - 2 13 2 2 -1. - <_> - 2 13 2 1 2. - 1 - -3.5275409463793039e-03 - 1 - -0.3733660876750946 - <_> - - - - <_> - 5 12 2 2 -1. - <_> - 5 13 2 1 2. - 0 - 2.2250709589570761e-03 - -0.0667124912142754 - 0.4990611970424652 - <_> - - <_> - - - - <_> - 0 16 2 4 -1. - <_> - 0 18 2 2 2. - 0 - 1.3609490124508739e-03 - 1 - 0.1716292947530746 - <_> - - - - <_> - 0 8 14 11 -1. - <_> - 7 8 7 11 2. - 0 - -0.2908785939216614 - 0.3615890145301819 - -0.5087137222290039 - <_> - - <_> - - - - <_> - 4 17 4 3 -1. - <_> - 5 17 2 3 2. - 0 - 3.3148950897157192e-03 - 1 - -0.7178813815116882 - <_> - - - - <_> - 3 12 3 5 -1. - <_> - 4 12 1 5 3. - 0 - -8.8641437469050288e-04 - 0.2571361958980560 - -0.1797894984483719 - <_> - - <_> - - - - <_> - 5 11 1 3 -1. - <_> - 5 12 1 1 3. - 0 - 1.1313590221107006e-03 - 1 - 0.3538742065429688 - <_> - - - - <_> - 4 10 4 2 -1. - <_> - 4 10 2 1 2. - <_> - 6 11 2 1 2. - 0 - -3.0621800106018782e-03 - 0.3079080879688263 - -0.3121724128723145 - <_> - - <_> - - - - <_> - 15 9 3 1 -1. - <_> - 16 10 1 1 3. - 1 - 2.5443620979785919e-03 - 1 - -0.5678855180740356 - <_> - - - - <_> - 3 0 16 7 -1. - <_> - 7 0 8 7 2. - 0 - -6.7088878713548183e-03 - 0.2122289985418320 - -0.2682110965251923 - <_> - - <_> - - - - <_> - 2 2 17 6 -1. - <_> - 2 5 17 3 2. - 0 - -0.1644680947065353 - 0.4901696145534515 - 1 - <_> - - - - <_> - 2 4 14 6 -1. - <_> - 2 6 14 2 3. - 0 - 0.0408281087875366 - -0.3121747076511383 - 0.2474814951419830 - <_> - - <_> - - - - <_> - 2 9 6 2 -1. - <_> - 2 9 3 1 2. - <_> - 5 10 3 1 2. - 0 - -3.6051510833203793e-03 - 0.3435586094856262 - 1 - <_> - - - - <_> - 3 11 4 2 -1. - <_> - 3 11 2 1 2. - <_> - 5 12 2 1 2. - 0 - -2.3608640767633915e-03 - 0.2656646072864532 - -0.2864471971988678 - <_> - - <_> - - - - <_> - 16 13 4 2 -1. - <_> - 18 13 2 2 2. - 0 - 1.2965350179001689e-03 - -0.2931776046752930 - 1 - <_> - - - - <_> - 15 7 3 2 -1. - <_> - 16 8 1 2 3. - 1 - 6.0111000202596188e-03 - 0.2194170057773590 - -0.6001421809196472 - <_> - - <_> - - - - <_> - 0 11 4 2 -1. - <_> - 0 12 4 1 2. - 0 - -6.1628420371562243e-04 - 1 - -0.3129233121871948 - <_> - - - - <_> - 4 9 2 3 -1. - <_> - 3 10 2 1 3. - 1 - 2.0573718938976526e-03 - 0.2876316905021667 - -0.3732070922851562 - <_> - - <_> - - - - <_> - 3 18 6 2 -1. - <_> - 5 18 2 2 3. - 0 - -7.7166007831692696e-03 - -0.7168325185775757 - 1 - <_> - - - - <_> - 11 12 3 2 -1. - <_> - 12 12 1 2 3. - 0 - -2.8222459368407726e-03 - 0.4250183105468750 - -0.0532948896288872 - <_> - - <_> - - - - <_> - 19 0 1 2 -1. - <_> - 19 1 1 1 2. - 0 - -7.3861207056324929e-05 - 0.1490345001220703 - 1 - <_> - - - - <_> - 0 0 14 1 -1. - <_> - 7 0 7 1 2. - 0 - 5.8680498041212559e-03 - -0.5843665003776550 - 0.1072475984692574 - <_> - - <_> - - - - <_> - 11 10 3 4 -1. - <_> - 10 11 3 2 2. - 1 - -7.9013723880052567e-03 - 1 - -0.3431994915008545 - <_> - - - - <_> - 14 16 1 3 -1. - <_> - 13 17 1 1 3. - 1 - 2.7825690340250731e-03 - 0.1765536069869995 - -0.6147375702857971 - <_> - - <_> - - - - <_> - 18 1 2 4 -1. - <_> - 19 1 1 4 2. - 0 - 3.2751538674347103e-04 - -0.3383756875991821 - 1 - <_> - - - - <_> - 15 13 5 6 -1. - <_> - 15 15 5 2 3. - 0 - 0.0307008996605873 - 0.1856613010168076 - -0.5345026850700378 - <_> - - <_> - - - - <_> - 16 4 3 3 -1. - <_> - 17 5 1 3 3. - 1 - 5.6932470761239529e-03 - 1 - -0.5175045132637024 - <_> - - - - <_> - 4 6 16 14 -1. - <_> - 12 6 8 14 2. - 0 - 0.2137514054775238 - 0.1233239993453026 - -0.6428813934326172 - <_> - - <_> - - - - <_> - 10 12 3 1 -1. - <_> - 11 12 1 1 3. - 0 - -4.4024959206581116e-03 - 0.5853567719459534 - 1 - <_> - - - - <_> - 5 12 2 2 -1. - <_> - 5 12 1 1 2. - <_> - 6 13 1 1 2. - 0 - -4.5719969784840941e-04 - 0.2336882054805756 - -0.1903900951147079 - <_> - - <_> - - - - <_> - 9 3 4 5 -1. - <_> - 10 3 2 5 2. - 0 - -4.2587839998304844e-03 - -0.5119084715843201 - 1 - <_> - - - - <_> - 18 1 2 3 -1. - <_> - 18 2 2 1 3. - 0 - -2.3462621029466391e-03 - -0.4716477096080780 - 0.1478340029716492 - <_> - - <_> - - - - <_> - 19 17 1 2 -1. - <_> - 19 17 1 1 2. - 1 - -6.5065571106970310e-05 - 1 - -0.2988634109497070 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 2 1 2. - 1 - -5.5082160979509354e-03 - -0.4850896000862122 - 0.2001491039991379 - <_> - - <_> - - - - <_> - 10 2 7 6 -1. - <_> - 10 4 7 2 3. - 0 - 0.0189427901059389 - 1 - 0.3102895021438599 - <_> - - - - <_> - 2 0 13 4 -1. - <_> - 2 1 13 2 2. - 0 - 6.9123771972954273e-03 - -0.2870123982429504 - 0.2053406983613968 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 1 2 2. - 1 - 8.1696882843971252e-03 - 1 - 0.4581083059310913 - <_> - - - - <_> - 0 3 6 8 -1. - <_> - 3 3 3 8 2. - 0 - 0.0100697698071599 - -0.2417591959238052 - 0.1759382039308548 - <_> - - <_> - - - - <_> - 3 0 1 3 -1. - <_> - 2 1 1 1 3. - 1 - 2.1663580555468798e-03 - 1 - -0.4987790882587433 - <_> - - - - <_> - 8 0 6 9 -1. - <_> - 10 0 2 9 3. - 0 - 0.0105057302862406 - 0.1623128056526184 - -0.4298886954784393 - <_> - - <_> - - - - <_> - 17 9 3 2 -1. - <_> - 18 10 1 2 3. - 1 - 5.7576788822188973e-04 - 1 - -0.3101257085800171 - <_> - - - - <_> - 16 8 4 6 -1. - <_> - 16 10 4 2 3. - 0 - -0.0306088998913765 - -0.7406430244445801 - 0.1621717959642410 - <_> - - <_> - - - - <_> - 6 9 7 3 -1. - <_> - 6 10 7 1 3. - 0 - -0.0134306596592069 - 0.4550563991069794 - 1 - <_> - - - - <_> - 2 10 3 4 -1. - <_> - 2 11 3 2 2. - 0 - 1.1859040241688490e-03 - -0.2722725868225098 - 0.2247501015663147 - <_> - - <_> - - - - <_> - 15 8 1 6 -1. - <_> - 15 8 1 3 2. - 1 - -4.9311347538605332e-04 - -0.3959831893444061 - 1 - <_> - - - - <_> - 19 3 1 12 -1. - <_> - 19 7 1 4 3. - 0 - -2.4509918875992298e-03 - 0.2500421106815338 - -0.1614051014184952 - <_> - - <_> - - - - <_> - 2 0 5 2 -1. - <_> - 2 0 5 1 2. - 1 - 0.0136419497430325 - 1 - -0.6452549099922180 - <_> - - - - <_> - 1 3 11 6 -1. - <_> - 1 5 11 2 3. - 0 - -0.0367333292961121 - 0.3419705927371979 - -0.0659683272242546 - -1.8931059837341309 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 14 13 2 4 -1. - <_> - 14 13 1 2 2. - <_> - 15 15 1 2 2. - 0 - 1.3613830087706447e-03 - -0.3438392877578735 - 1 - <_> - - - - <_> - 8 11 10 3 -1. - <_> - 13 11 5 3 2. - 0 - 0.0122110601514578 - -0.4035860002040863 - 0.5787363052368164 - <_> - - <_> - - - - <_> - 6 11 1 4 -1. - <_> - 6 13 1 2 2. - 0 - 3.2929528970271349e-03 - -0.2216434925794601 - 1 - <_> - - - - <_> - 2 9 3 9 -1. - <_> - 3 12 1 3 9. - 0 - -0.0248319804668427 - 0.5425691008567810 - -0.4758560061454773 - <_> - - <_> - - - - <_> - 4 0 15 9 -1. - <_> - 9 3 5 3 9. - 0 - -0.3408153057098389 - 0.5343874096870422 - 1 - <_> - - - - <_> - 12 0 6 4 -1. - <_> - 12 0 6 2 2. - 1 - 0.0609296411275864 - -0.2601535916328430 - 0.3762655854225159 - <_> - - <_> - - - - <_> - 10 5 4 5 -1. - <_> - 12 5 2 5 2. - 0 - -1.4399300562217832e-03 - 1 - -0.4163514971733093 - <_> - - - - <_> - 1 7 18 12 -1. - <_> - 7 11 6 4 9. - 0 - -0.7571117877960205 - 0.4776453971862793 - -0.1237422972917557 - <_> - - <_> - - - - <_> - 14 12 6 4 -1. - <_> - 16 12 2 4 3. - 0 - -5.9891431592404842e-03 - 0.2184862047433853 - 1 - <_> - - - - <_> - 13 12 3 3 -1. - <_> - 14 12 1 3 3. - 0 - -8.9398561976850033e-04 - 0.1772602945566177 - -0.5481501817703247 - <_> - - <_> - - - - <_> - 14 9 4 1 -1. - <_> - 15 10 2 1 2. - 1 - 2.9013510793447495e-03 - 1 - -0.5670918226242065 - <_> - - - - <_> - 17 7 3 2 -1. - <_> - 18 8 1 2 3. - 1 - 4.4361278414726257e-03 - 0.1418378055095673 - -0.5878441929817200 - <_> - - <_> - - - - <_> - 19 3 1 2 -1. - <_> - 19 4 1 1 2. - 0 - -5.3319290600484237e-05 - 1 - -0.3482188880443573 - <_> - - - - <_> - 19 1 1 4 -1. - <_> - 19 2 1 2 2. - 0 - 2.5481029879301786e-03 - 0.1974532008171082 - -0.5597922205924988 - <_> - - <_> - - - - <_> - 3 2 12 8 -1. - <_> - 3 4 12 4 2. - 0 - 0.0748829394578934 - 1 - 0.4664795100688934 - <_> - - - - <_> - 1 0 16 6 -1. - <_> - 1 2 16 2 3. - 0 - 0.0488163083791733 - -0.2257521003484726 - 0.3232581913471222 - <_> - - <_> - - - - <_> - 16 8 3 1 -1. - <_> - 17 9 1 1 3. - 1 - -3.9128339849412441e-03 - -0.5977287292480469 - 1 - <_> - - - - <_> - 7 13 6 3 -1. - <_> - 9 14 2 1 9. - 0 - -0.0138206295669079 - 0.2603121101856232 - -0.2021141052246094 - <_> - - <_> - - - - <_> - 11 18 6 2 -1. - <_> - 11 19 6 1 2. - 0 - 9.4047200400382280e-04 - -0.3400524854660034 - 1 - <_> - - - - <_> - 15 17 5 3 -1. - <_> - 15 18 5 1 3. - 0 - -4.6419431455433369e-03 - -0.4518780112266541 - 0.2105485945940018 - <_> - - <_> - - - - <_> - 2 1 18 4 -1. - <_> - 8 1 6 4 3. - 0 - -0.0319609418511391 - 1 - -0.2082601934671402 - <_> - - - - <_> - 5 0 1 2 -1. - <_> - 5 1 1 1 2. - 0 - -1.2651160068344325e-04 - 0.3855319023132324 - -0.2311642020940781 - <_> - - <_> - - - - <_> - 1 11 6 6 -1. - <_> - 3 13 2 2 9. - 0 - -0.0504137091338634 - 0.2284615933895111 - 1 - <_> - - - - <_> - 3 12 4 2 -1. - <_> - 3 12 2 1 2. - <_> - 5 13 2 1 2. - 0 - -2.0950778853148222e-03 - 0.3263955116271973 - -0.3438543081283569 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 2 1 3 1 3. - 1 - -0.0110178804025054 - -0.7738878130912781 - 1 - <_> - - - - <_> - 8 10 3 3 -1. - <_> - 9 11 1 1 9. - 0 - -9.7415763884782791e-03 - 0.3673199117183685 - -0.0657460018992424 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 17 2 1 2. - 0 - 5.3386680519906804e-05 - -0.3557175099849701 - 1 - <_> - - - - <_> - 0 16 4 3 -1. - <_> - 0 17 4 1 3. - 0 - 5.9820311143994331e-03 - 0.1765311956405640 - -0.4611007869243622 - <_> - - <_> - - - - <_> - 0 13 12 1 -1. - <_> - 6 13 6 1 2. - 0 - -1.9558269996196032e-03 - 1 - -0.3617269098758698 - <_> - - - - <_> - 13 2 6 9 -1. - <_> - 15 2 2 9 3. - 0 - 7.6739699579775333e-03 - 0.1803857982158661 - -0.4045203030109406 - <_> - - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 11 1 3 3. - 0 - 4.2935381643474102e-03 - 1 - 0.5208635926246643 - <_> - - - - <_> - 9 11 3 4 -1. - <_> - 10 11 1 4 3. - 0 - 1.4181300066411495e-03 - -0.2208580970764160 - 0.2735756039619446 - <_> - - <_> - - - - <_> - 13 0 6 10 -1. - <_> - 15 0 2 10 3. - 0 - -0.0282630994915962 - -0.6383373141288757 - 1 - <_> - - - - <_> - 4 10 1 4 -1. - <_> - 3 11 1 2 2. - 1 - 6.3434068579226732e-04 - 0.1563638001680374 - -0.3214890062808990 - <_> - - <_> - - - - <_> - 9 11 3 3 -1. - <_> - 10 12 1 1 9. - 0 - -7.2387307882308960e-03 - 0.2312625944614410 - 1 - <_> - - - - <_> - 6 12 3 3 -1. - <_> - 5 13 3 1 3. - 1 - -9.9928081035614014e-03 - 0.3039731979370117 - -0.2447843998670578 - <_> - - <_> - - - - <_> - 17 6 2 1 -1. - <_> - 18 6 1 1 2. - 0 - 6.4995248976629227e-05 - 1 - 0.1513298004865646 - <_> - - - - <_> - 16 2 1 4 -1. - <_> - 16 2 1 2 2. - 1 - -5.3049270063638687e-03 - 0.2041787058115005 - -0.4626043140888214 - <_> - - <_> - - - - <_> - 2 5 13 4 -1. - <_> - 2 6 13 2 2. - 0 - -0.0166130997240543 - 0.3339976966381073 - 1 - <_> - - - - <_> - 14 4 6 2 -1. - <_> - 14 4 6 1 2. - 1 - -0.0116302901878953 - 0.3705343008041382 - -0.1936154961585999 - <_> - - <_> - - - - <_> - 3 8 1 3 -1. - <_> - 2 9 1 1 3. - 1 - 1.9068180117756128e-03 - 1 - -0.3810505867004395 - <_> - - - - <_> - 7 7 8 3 -1. - <_> - 7 8 8 1 3. - 0 - -5.6926468387246132e-03 - 0.5064520835876465 - 6.5170922316610813e-03 - <_> - - <_> - - - - <_> - 8 8 4 3 -1. - <_> - 10 8 2 3 2. - 0 - -2.2453670680988580e-04 - 1 - -0.3152601122856140 - <_> - - - - <_> - 10 11 3 8 -1. - <_> - 10 15 3 4 2. - 0 - 9.5565039664506912e-03 - -0.5303559899330139 - 0.2053276002407074 - <_> - - <_> - - - - <_> - 13 15 2 3 -1. - <_> - 12 16 2 1 3. - 1 - 3.1540619675070047e-03 - 1 - -0.4592832922935486 - <_> - - - - <_> - 0 0 12 20 -1. - <_> - 6 0 6 20 2. - 0 - -0.3068132996559143 - 0.5071771740913391 - -0.0144392503425479 - <_> - - <_> - - - - <_> - 0 0 10 1 -1. - <_> - 5 0 5 1 2. - 0 - 2.8239809907972813e-03 - -0.1543793976306915 - 1 - <_> - - - - <_> - 0 0 6 3 -1. - <_> - 0 1 6 1 3. - 0 - -3.3063529990613461e-03 - -0.4357138872146606 - 0.3934271931648254 - <_> - - <_> - - - - <_> - 14 13 2 2 -1. - <_> - 14 13 1 1 2. - <_> - 15 14 1 1 2. - 0 - 3.7848789361305535e-04 - 1 - 0.2521260082721710 - <_> - - - - <_> - 12 10 4 2 -1. - <_> - 12 10 2 1 2. - <_> - 14 11 2 1 2. - 0 - -3.0488630291074514e-03 - 0.4666233956813812 - -0.2279223054647446 - <_> - - <_> - - - - <_> - 7 0 6 4 -1. - <_> - 9 0 2 4 3. - 0 - -0.0147243803367019 - -0.7860211133956909 - 1 - <_> - - - - <_> - 0 0 10 10 -1. - <_> - 0 0 5 5 2. - <_> - 5 5 5 5 2. - 0 - 0.0360623002052307 - -0.0685713216662407 - 0.3669883906841278 - <_> - - <_> - - - - <_> - 6 3 4 2 -1. - <_> - 7 3 2 2 2. - 0 - -2.2327410988509655e-03 - -0.5974019765853882 - 1 - <_> - - - - <_> - 1 5 4 11 -1. - <_> - 2 5 2 11 2. - 0 - -7.8541820403188467e-04 - 0.2027346938848495 - -0.1722168028354645 - <_> - - <_> - - - - <_> - 12 8 3 1 -1. - <_> - 13 8 1 1 3. - 0 - 7.8553898492828012e-04 - 1 - -0.4340744912624359 - <_> - - - - <_> - 2 2 6 2 -1. - <_> - 2 2 6 1 2. - 1 - 0.0100781098008156 - 0.1246414035558701 - -0.4839141964912415 - <_> - - <_> - - - - <_> - 13 5 7 3 -1. - <_> - 12 6 7 1 3. - 1 - 0.0209287907928228 - 1 - 0.5686420798301697 - <_> - - - - <_> - 13 7 3 4 -1. - <_> - 14 7 1 4 3. - 0 - 1.3340089935809374e-03 - 0.0145246395841241 - -0.4600321054458618 - -1.9677840471267700 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 12 3 2 -1. - <_> - 8 12 3 1 2. - 1 - -0.0153139596804976 - 1 - -0.3434768915176392 - <_> - - - - <_> - 0 10 4 8 -1. - <_> - 0 12 4 4 2. - 0 - -0.0142658604308963 - 0.5820953249931335 - -0.3552739918231964 - <_> - - <_> - - - - <_> - 14 13 2 6 -1. - <_> - 14 13 1 3 2. - <_> - 15 16 1 3 2. - 0 - 1.2652979930862784e-03 - -0.3149831891059875 - 1 - <_> - - - - <_> - 16 17 1 2 -1. - <_> - 16 17 1 1 2. - 1 - -7.3807648732326925e-05 - 0.4724959135055542 - -0.2638080120086670 - <_> - - <_> - - - - <_> - 12 0 3 6 -1. - <_> - 10 2 3 2 3. - 1 - -0.0385270304977894 - 0.4155685007572174 - 1 - <_> - - - - <_> - 4 10 14 3 -1. - <_> - 4 11 14 1 3. - 0 - -0.0147587703540921 - 0.1567724943161011 - -0.3765023946762085 - <_> - - <_> - - - - <_> - 19 4 1 12 -1. - <_> - 19 8 1 4 3. - 0 - -1.5448270132765174e-03 - 1 - -0.3593201935291290 - <_> - - - - <_> - 19 2 1 6 -1. - <_> - 19 4 1 2 3. - 0 - 6.4564580097794533e-03 - 0.2127663940191269 - -0.7228717803955078 - <_> - - <_> - - - - <_> - 8 12 12 3 -1. - <_> - 14 12 6 3 2. - 0 - 0.0102673498913646 - -0.4604580998420715 - 1 - <_> - - - - <_> - 0 13 2 3 -1. - <_> - 1 13 1 3 2. - 0 - -8.6422899039462209e-04 - 0.2492025941610336 - -0.2672136127948761 - <_> - - <_> - - - - <_> - 16 0 4 9 -1. - <_> - 18 0 2 9 2. - 0 - 3.2311889808624983e-03 - -0.4093919992446899 - 1 - <_> - - - - <_> - 9 2 6 4 -1. - <_> - 9 4 6 2 2. - 0 - 0.0136765297502279 - -0.0273916907608509 - 0.4525907039642334 - <_> - - <_> - - - - <_> - 16 2 3 1 -1. - <_> - 17 3 1 1 3. - 1 - 3.2787120435386896e-03 - 1 - -0.7002565264701843 - <_> - - - - <_> - 15 12 3 6 -1. - <_> - 16 12 1 6 3. - 0 - -1.4256529975682497e-03 - 0.2578780055046082 - -0.1509343981742859 - <_> - - <_> - - - - <_> - 13 12 3 3 -1. - <_> - 14 12 1 3 3. - 0 - -2.2095029707998037e-03 - 0.3514811098575592 - 1 - <_> - - - - <_> - 3 3 15 4 -1. - <_> - 3 5 15 2 2. - 0 - -0.0877013728022575 - 0.4197874069213867 - -0.2360018044710159 - <_> - - <_> - - - - <_> - 11 11 3 4 -1. - <_> - 12 11 1 4 3. - 0 - -2.8805620968341827e-03 - 0.3047986924648285 - 1 - <_> - - - - <_> - 10 11 3 3 -1. - <_> - 11 11 1 3 3. - 0 - -2.5028509553521872e-03 - 0.1331669986248016 - -0.3169130086898804 - <_> - - <_> - - - - <_> - 19 0 1 4 -1. - <_> - 19 2 1 2 2. - 0 - -5.1710562547668815e-04 - 1 - -0.3519909083843231 - <_> - - - - <_> - 14 0 3 3 -1. - <_> - 15 1 1 3 3. - 1 - 6.7088729701936245e-03 - 0.2016315013170242 - -0.6094800829887390 - <_> - - <_> - - - - <_> - 2 10 8 2 -1. - <_> - 2 10 4 2 2. - 1 - -0.0760587528347969 - -0.6369420886039734 - 1 - <_> - - - - <_> - 9 18 4 2 -1. - <_> - 10 18 2 2 2. - 0 - -3.0889140907675028e-03 - -0.7902534008026123 - 0.1036607995629311 - <_> - - <_> - - - - <_> - 10 0 4 9 -1. - <_> - 11 0 2 9 2. - 0 - 2.5740528944879770e-03 - 1 - -0.4542419910430908 - <_> - - - - <_> - 15 10 5 6 -1. - <_> - 15 12 5 2 3. - 0 - -5.4877097718417645e-03 - 0.2148129940032959 - -0.1932951062917709 - <_> - - <_> - - - - <_> - 2 13 4 2 -1. - <_> - 3 13 2 2 2. - 0 - -1.2507289648056030e-03 - 1 - -0.2165144979953766 - <_> - - - - <_> - 2 15 4 1 -1. - <_> - 3 16 2 1 2. - 1 - -4.3231048621237278e-03 - -0.6279907822608948 - 0.2427074015140533 - <_> - - <_> - - - - <_> - 15 8 3 2 -1. - <_> - 16 9 1 2 3. - 1 - 4.3724630959331989e-03 - 1 - -0.5188937783241272 - <_> - - - - <_> - 0 6 4 2 -1. - <_> - 2 6 2 2 2. - 0 - 7.4632692849263549e-04 - -0.1137868016958237 - 0.2822437882423401 - <_> - - <_> - - - - <_> - 9 17 6 1 -1. - <_> - 12 17 3 1 2. - 0 - -1.3375070411711931e-03 - 0.2458911985158920 - 1 - <_> - - - - <_> - 14 19 6 1 -1. - <_> - 17 19 3 1 2. - 0 - -2.9367550741881132e-03 - 0.2433581948280334 - -0.2911281883716583 - <_> - - <_> - - - - <_> - 17 18 1 2 -1. - <_> - 17 19 1 1 2. - 0 - 6.3193867390509695e-05 - -0.2580659091472626 - 1 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 2 1 2. - 1 - -5.1338938064873219e-03 - -0.4611040949821472 - 0.2433398067951202 - <_> - - <_> - - - - <_> - 19 3 1 9 -1. - <_> - 19 6 1 3 3. - 0 - 4.9400608986616135e-03 - 1 - -0.3963299095630646 - <_> - - - - <_> - 10 10 3 3 -1. - <_> - 9 11 3 1 3. - 1 - -5.6112580932676792e-03 - 0.2450238019227982 - -0.1563901007175446 - <_> - - <_> - - - - <_> - 3 0 3 3 -1. - <_> - 2 1 3 1 3. - 1 - 4.2950599454343319e-03 - 1 - -0.4767167866230011 - <_> - - - - <_> - 17 16 2 2 -1. - <_> - 17 16 2 1 2. - 1 - 4.5142881572246552e-03 - 0.1069843024015427 - -0.9047132134437561 - <_> - - <_> - - - - <_> - 5 11 3 3 -1. - <_> - 6 12 1 3 3. - 1 - 7.5297639705240726e-03 - 1 - 0.4123980998992920 - <_> - - - - <_> - 3 11 2 2 -1. - <_> - 3 11 1 1 2. - <_> - 4 12 1 1 2. - 0 - -1.2225280515849590e-03 - 0.2848817110061646 - -0.1981569975614548 - <_> - - <_> - - - - <_> - 16 9 2 2 -1. - <_> - 16 9 1 2 2. - 1 - -3.4703810233622789e-03 - -0.4496796131134033 - 1 - <_> - - - - <_> - 4 9 2 2 -1. - <_> - 4 9 2 1 2. - 1 - 8.3724651485681534e-03 - 0.1532424986362457 - -0.3866685032844543 - <_> - - <_> - - - - <_> - 3 10 2 3 -1. - <_> - 2 11 2 1 3. - 1 - -3.3934618841158226e-05 - 1 - -0.3142907023429871 - <_> - - - - <_> - 0 0 20 20 -1. - <_> - 0 0 10 10 2. - <_> - 10 10 10 10 2. - 0 - -0.2724170982837677 - -0.5584210157394409 - 0.1662781983613968 - <_> - - <_> - - - - <_> - 7 16 5 3 -1. - <_> - 7 17 5 1 3. - 0 - -2.7582740876823664e-03 - 0.2718957066535950 - 1 - <_> - - - - <_> - 14 1 3 6 -1. - <_> - 12 3 3 2 3. - 1 - 0.0255304891616106 - -0.1917200982570648 - 0.4378049969673157 - <_> - - <_> - - - - <_> - 6 0 4 7 -1. - <_> - 7 0 2 7 2. - 0 - 4.2080380953848362e-03 - 1 - -0.4468413889408112 - <_> - - - - <_> - 9 5 9 6 -1. - <_> - 12 5 3 6 3. - 0 - -8.2151442766189575e-03 - 0.2278670966625214 - -0.1744178980588913 - <_> - - <_> - - - - <_> - 5 18 4 2 -1. - <_> - 6 18 2 2 2. - 0 - -2.9405429959297180e-03 - -0.7264354825019836 - 1 - <_> - - - - <_> - 7 7 6 8 -1. - <_> - 9 7 2 8 3. - 0 - -9.4840265810489655e-03 - 0.2079429030418396 - -0.1523991972208023 - <_> - - <_> - - - - <_> - 18 16 2 4 -1. - <_> - 18 16 1 2 2. - <_> - 19 18 1 2 2. - 0 - 4.2596450075507164e-03 - 1 - 0.6177268028259277 - <_> - - - - <_> - 11 18 2 2 -1. - <_> - 12 18 1 2 2. - 0 - -1.7117479583248496e-03 - -0.7110661268234253 - -6.1875251121819019e-03 - <_> - - <_> - - - - <_> - 3 2 5 2 -1. - <_> - 3 3 5 1 2. - 0 - -1.3266160385683179e-03 - 0.1718126982450485 - 1 - <_> - - - - <_> - 7 1 6 4 -1. - <_> - 7 3 6 2 2. - 0 - 9.1314306482672691e-03 - -0.4113875925540924 - 0.1812427937984467 - <_> - - <_> - - - - <_> - 2 0 2 2 -1. - <_> - 2 0 2 1 2. - 1 - 6.8382360041141510e-03 - 1 - -0.5760108232498169 - <_> - - - - <_> - 0 1 16 1 -1. - <_> - 8 1 8 1 2. - 0 - 7.5181988067924976e-03 - -0.1081907972693443 - 0.2956142127513885 - <_> - - <_> - - - - <_> - 11 1 3 10 -1. - <_> - 12 1 1 10 3. - 0 - -7.2788819670677185e-03 - -0.5811352133750916 - 1 - <_> - - - - <_> - 4 0 4 4 -1. - <_> - 5 1 2 4 2. - 1 - -0.0180394705384970 - 0.4518306851387024 - -0.0270830895751715 - <_> - - <_> - - - - <_> - 4 13 3 2 -1. - <_> - 5 13 1 2 3. - 0 - -1.0126599809154868e-03 - 0.2434411942958832 - 1 - <_> - - - - <_> - 8 11 4 3 -1. - <_> - 7 12 4 1 3. - 1 - -6.7263199016451836e-03 - 0.1687044054269791 - -0.2700772881507874 - <_> - - <_> - - - - <_> - 7 17 4 3 -1. - <_> - 8 17 2 3 2. - 0 - -3.2334970310330391e-03 - -0.6004822254180908 - 1 - <_> - - - - <_> - 5 19 2 1 -1. - <_> - 6 19 1 1 2. - 0 - -7.7852200774941593e-05 - 0.2424176931381226 - -0.1241324990987778 - <_> - - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - -6.7774722992908210e-05 - 0.1572915017604828 - 1 - <_> - - - - <_> - 0 9 2 2 -1. - <_> - 0 9 1 1 2. - <_> - 1 10 1 1 2. - 0 - 7.1789676439948380e-05 - -0.5289350748062134 - -0.0316655710339546 - <_> - - <_> - - - - <_> - 6 9 2 2 -1. - <_> - 6 9 2 1 2. - 1 - 0.0100242998450994 - 1 - -0.4864695966243744 - <_> - - - - <_> - 0 10 5 3 -1. - <_> - 0 11 5 1 3. - 0 - 9.4298496842384338e-03 - 0.1124086976051331 - -0.4257048964500427 - <_> - - <_> - - - - <_> - 3 10 2 2 -1. - <_> - 3 10 1 1 2. - <_> - 4 11 1 1 2. - 0 - -7.4433721601963043e-04 - 0.2754076123237610 - 1 - <_> - - - - <_> - 0 10 18 1 -1. - <_> - 6 10 6 1 3. - 0 - 0.0116605600342155 - -0.2311726063489914 - 0.2244233042001724 - <_> - - <_> - - - - <_> - 17 4 3 1 -1. - <_> - 18 5 1 1 3. - 1 - 3.9079408161342144e-03 - 1 - -0.6351963877677917 - <_> - - - - <_> - 17 1 2 7 -1. - <_> - 17 1 1 7 2. - 1 - 0.0165501497685909 - 0.1061910018324852 - -0.4765498936176300 - -1.9657919406890869 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 13 9 2 -1. - <_> - 9 13 3 2 3. - 0 - -0.0184390302747488 - 1 - -0.4874570965766907 - <_> - - - - <_> - 4 9 16 6 -1. - <_> - 4 11 16 2 3. - 0 - -0.0533645190298557 - 0.5103781223297119 - -0.2267013043165207 - <_> - - <_> - - - - <_> - 1 1 16 4 -1. - <_> - 1 3 16 2 2. - 0 - -0.0757063180208206 - 0.4148775041103363 - 1 - <_> - - - - <_> - 14 12 3 3 -1. - <_> - 15 12 1 3 3. - 0 - -1.5329009620472789e-03 - 0.0857649371027946 - -0.4347091019153595 - <_> - - <_> - - - - <_> - 2 9 6 2 -1. - <_> - 4 11 2 2 3. - 1 - -0.0244948901236057 - 1 - -0.2753269970417023 - <_> - - - - <_> - 10 0 8 10 -1. - <_> - 12 0 4 10 2. - 0 - -3.8144161226227880e-04 - 0.3804396986961365 - -0.4396784901618958 - <_> - - <_> - - - - <_> - 1 12 16 4 -1. - <_> - 5 12 8 4 2. - 0 - -8.8816778734326363e-03 - 1 - -0.4325881898403168 - <_> - - - - <_> - 13 8 6 9 -1. - <_> - 15 11 2 3 9. - 0 - -0.0396251305937767 - 0.2448122054338455 - -0.2619363963603973 - <_> - - <_> - - - - <_> - 19 0 1 8 -1. - <_> - 19 4 1 4 2. - 0 - -3.5907390993088484e-03 - 1 - -0.3619948029518127 - <_> - - - - <_> - 8 2 10 6 -1. - <_> - 8 5 10 3 2. - 0 - 0.0370088703930378 - 0.0226374603807926 - 0.5577843785285950 - <_> - - <_> - - - - <_> - 18 7 2 1 -1. - <_> - 19 7 1 1 2. - 0 - 7.8503930126316845e-05 - -0.3386113047599792 - 1 - <_> - - - - <_> - 19 4 1 12 -1. - <_> - 19 7 1 6 2. - 0 - -4.7969701699912548e-03 - 0.3185609877109528 - -0.1660024970769882 - <_> - - <_> - - - - <_> - 8 11 3 3 -1. - <_> - 9 12 1 1 9. - 0 - -0.0112980101257563 - 0.3730547130107880 - 1 - <_> - - - - <_> - 7 12 3 3 -1. - <_> - 8 12 1 3 3. - 0 - -4.4886539690196514e-03 - 0.2969295978546143 - -0.2523576021194458 - <_> - - <_> - - - - <_> - 6 13 3 2 -1. - <_> - 7 13 1 2 3. - 0 - -2.2497780155390501e-03 - 0.3426302969455719 - 1 - <_> - - - - <_> - 17 15 3 2 -1. - <_> - 17 15 3 1 2. - 1 - 2.9247230850160122e-03 - -0.0565932393074036 - -0.7062603235244751 - <_> - - <_> - - - - <_> - 11 6 3 3 -1. - <_> - 12 6 1 3 3. - 0 - 1.7976630479097366e-03 - 1 - -0.5418022871017456 - <_> - - - - <_> - 0 15 2 4 -1. - <_> - 0 17 2 2 2. - 0 - 1.9808609504252672e-03 - -0.2564300894737244 - 0.1844687014818192 - <_> - - <_> - - - - <_> - 12 9 7 2 -1. - <_> - 12 9 7 1 2. - 1 - -4.7688339836895466e-03 - -0.2969822883605957 - 1 - <_> - - - - <_> - 6 5 8 7 -1. - <_> - 10 5 4 7 2. - 0 - -0.0157556105405092 - 0.2895937860012054 - -0.1648074984550476 - <_> - - <_> - - - - <_> - 6 17 8 3 -1. - <_> - 8 17 4 3 2. - 0 - -0.0119196400046349 - -0.5856721997261047 - 1 - <_> - - - - <_> - 0 17 4 3 -1. - <_> - 0 18 4 1 3. - 0 - 4.2308131232857704e-03 - 0.1360127031803131 - -0.4816245138645172 - <_> - - <_> - - - - <_> - 5 1 10 6 -1. - <_> - 5 3 10 2 3. - 0 - 0.0205485504120588 - 1 - 0.3014349937438965 - <_> - - - - <_> - 0 2 18 2 -1. - <_> - 6 2 6 2 3. - 0 - -7.3943338356912136e-03 - 0.0463677607476711 - -0.4237951934337616 - <_> - - <_> - - - - <_> - 7 8 6 3 -1. - <_> - 7 9 6 1 3. - 0 - -6.2137800268828869e-03 - 0.4572427868843079 - 1 - <_> - - - - <_> - 10 8 1 3 -1. - <_> - 10 9 1 1 3. - 0 - 1.4182809973135591e-03 - -0.3014363944530487 - 0.1820451021194458 - <_> - - <_> - - - - <_> - 16 1 3 2 -1. - <_> - 17 2 1 2 3. - 1 - 4.1609420441091061e-03 - 1 - -0.5265483856201172 - <_> - - - - <_> - 2 10 1 2 -1. - <_> - 2 10 1 1 2. - 1 - -3.7915320135653019e-03 - -0.5867707133293152 - 0.1170366033911705 - <_> - - <_> - - - - <_> - 2 9 1 2 -1. - <_> - 2 9 1 1 2. - 1 - 2.0879150833934546e-03 - 1 - -0.3530772924423218 - <_> - - - - <_> - 3 9 2 3 -1. - <_> - 2 10 2 1 3. - 1 - 1.5018540434539318e-03 - 0.1862480044364929 - -0.3272973001003265 - <_> - - <_> - - - - <_> - 2 14 12 6 -1. - <_> - 2 14 6 3 2. - <_> - 8 17 6 3 2. - 0 - 0.0212488099932671 - 1 - -0.3197925984859467 - <_> - - - - <_> - 15 17 1 2 -1. - <_> - 15 17 1 1 2. - 1 - -5.5249751312658191e-04 - 0.2337023019790649 - -0.1738619953393936 - <_> - - <_> - - - - <_> - 17 11 3 3 -1. - <_> - 18 12 1 3 3. - 1 - -3.0085169710218906e-03 - 0.1759604960680008 - 1 - <_> - - - - <_> - 13 12 3 2 -1. - <_> - 14 12 1 2 3. - 0 - -1.1611919617280364e-03 - 0.1603343039751053 - -0.3968097865581512 - <_> - - <_> - - - - <_> - 16 18 4 2 -1. - <_> - 18 18 2 2 2. - 0 - -3.9655580185353756e-03 - 0.3669176995754242 - 1 - <_> - - - - <_> - 18 14 2 4 -1. - <_> - 17 15 2 2 2. - 1 - -6.5836100839078426e-03 - -0.6296635866165161 - -0.0249264501035213 - <_> - - <_> - - - - <_> - 12 13 3 1 -1. - <_> - 13 13 1 1 3. - 0 - -9.0950471349060535e-04 - 0.3957498073577881 - 1 - <_> - - - - <_> - 11 12 3 3 -1. - <_> - 12 13 1 1 9. - 0 - -5.7984529994428158e-03 - 0.1749224066734314 - -0.2683740854263306 - <_> - - <_> - - - - <_> - 0 0 16 20 -1. - <_> - 8 0 8 20 2. - 0 - -0.5775880217552185 - 0.5961139202117920 - 1 - <_> - - - - <_> - 3 0 8 5 -1. - <_> - 5 0 4 5 2. - 0 - -0.0151613103225827 - -0.6613163948059082 - 3.3608361263759434e-04 - <_> - - <_> - - - - <_> - 0 0 2 1 -1. - <_> - 1 0 1 1 2. - 0 - 7.6604672358371317e-05 - 1 - 0.2040158957242966 - <_> - - - - <_> - 1 2 19 4 -1. - <_> - 1 4 19 2 2. - 0 - 0.0277699790894985 - -0.3209733068943024 - 0.2231740057468414 - <_> - - <_> - - - - <_> - 12 7 3 4 -1. - <_> - 13 7 1 4 3. - 0 - -2.6336179580539465e-03 - -0.3965649902820587 - 1 - <_> - - - - <_> - 15 6 3 3 -1. - <_> - 16 7 1 3 3. - 1 - 8.3722146227955818e-03 - 0.1388397067785263 - -0.5800622105598450 - <_> - - <_> - - - - <_> - 3 13 2 2 -1. - <_> - 3 13 1 1 2. - <_> - 4 14 1 1 2. - 0 - -7.0203031646087766e-04 - 0.2777728140354156 - 1 - <_> - - - - <_> - 2 12 2 2 -1. - <_> - 2 12 1 1 2. - <_> - 3 13 1 1 2. - 0 - -4.8448870074935257e-04 - 0.2162851989269257 - -0.2969225049018860 - <_> - - <_> - - - - <_> - 0 3 19 4 -1. - <_> - 0 4 19 2 2. - 0 - -0.0336381718516350 - 0.3579196929931641 - 1 - <_> - - - - <_> - 17 7 3 4 -1. - <_> - 18 8 1 4 3. - 1 - 4.4241230934858322e-03 - -8.6632027523592114e-04 - -0.5587272047996521 - <_> - - <_> - - - - <_> - 4 8 3 4 -1. - <_> - 5 9 1 4 3. - 1 - 0.0115452604368329 - 1 - 0.3383761942386627 - <_> - - - - <_> - 14 11 4 6 -1. - <_> - 15 11 2 6 2. - 0 - -1.5816639643162489e-03 - 0.0286606997251511 - -0.3504197001457214 - <_> - - <_> - - - - <_> - 18 3 2 6 -1. - <_> - 18 5 2 2 3. - 0 - 0.0138381402939558 - 1 - -0.7788680791854858 - <_> - - - - <_> - 14 3 2 4 -1. - <_> - 14 3 2 2 2. - 1 - 0.0283274091780186 - -0.0186049100011587 - 0.6214786767959595 - <_> - - <_> - - - - <_> - 7 9 5 4 -1. - <_> - 7 10 5 2 2. - 0 - -8.8482163846492767e-03 - 0.2636981904506683 - 1 - <_> - - - - <_> - 12 11 8 2 -1. - <_> - 12 12 8 1 2. - 0 - -1.1661020107567310e-03 - 0.1030258014798164 - -0.3268001079559326 - <_> - - <_> - - - - <_> - 16 13 3 4 -1. - <_> - 16 13 3 2 2. - 1 - -0.0322522111237049 - -0.5004624128341675 - 1 - <_> - - - - <_> - 14 7 5 9 -1. - <_> - 14 10 5 3 3. - 0 - -0.0949211195111275 - -0.7276101112365723 - 0.1033010035753250 - <_> - - <_> - - - - <_> - 0 12 1 3 -1. - <_> - 0 13 1 1 3. - 0 - 2.5177269708365202e-03 - 1 - -0.6393802762031555 - <_> - - - - <_> - 6 6 3 6 -1. - <_> - 4 8 3 2 3. - 1 - -0.0408921688795090 - -0.5734522938728333 - 0.0815025269985199 - <_> - - <_> - - - - <_> - 0 9 9 1 -1. - <_> - 3 9 3 1 3. - 0 - -1.9293189980089664e-03 - 0.2417722940444946 - 1 - <_> - - - - <_> - 0 9 6 2 -1. - <_> - 0 9 3 1 2. - <_> - 3 10 3 1 2. - 0 - -1.4116390375420451e-03 - 0.0803638175129890 - -0.3614653944969177 - <_> - - <_> - - - - <_> - 3 2 4 4 -1. - <_> - 4 2 2 4 2. - 0 - -3.8812779821455479e-03 - -0.5763878226280212 - 1 - <_> - - - - <_> - 18 3 2 3 -1. - <_> - 18 4 2 1 3. - 0 - 4.4630360789597034e-03 - 0.0918357893824577 - -0.6803910136222839 - <_> - - <_> - - - - <_> - 6 16 3 3 -1. - <_> - 6 17 3 1 3. - 0 - 2.9870839789509773e-03 - -0.1023664027452469 - 1 - <_> - - - - <_> - 1 16 6 3 -1. - <_> - 1 17 6 1 3. - 0 - 9.4975335523486137e-03 - 0.4915060997009277 - -0.3801138997077942 - -1.7649420499801636 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_smile.xml b/data/haarcascades/haarcascade_smile.xml deleted file mode 100644 index b7a6a3a..0000000 --- a/data/haarcascades/haarcascade_smile.xml +++ /dev/null @@ -1,8353 +0,0 @@ - - - - - - - 36 18 - - <_> - - - <_> - - <_> - - - - <_> - 0 0 2 4 -1. - <_> - 0 2 2 2 2. - 0 - -4.8783610691316426e-004 - 0.5921934843063355 - -0.4416360855102539 - <_> - - <_> - - - - <_> - 34 10 2 8 -1. - <_> - 34 14 2 4 2. - 0 - -4.2209611274302006e-004 - 0.3031865060329437 - -0.3291291892528534 - <_> - - <_> - - - - <_> - 0 10 2 8 -1. - <_> - 0 14 2 4 2. - 0 - -4.9940118333324790e-004 - 0.4856331050395966 - -0.4292306005954742 - <_> - - <_> - - - - <_> - 15 0 18 10 -1. - <_> - 24 0 9 5 2. - <_> - 15 5 9 5 2. - 0 - 0.0372891984879971 - -0.2866730093955994 - 0.5997999906539917 - <_> - - <_> - - - - <_> - 7 0 4 4 -1. - <_> - 7 0 2 4 2. - 1 - 1.4334049774333835e-003 - -0.3489313125610352 - 0.4048275053501129 - <_> - - <_> - - - - <_> - 15 5 6 4 -1. - <_> - 15 6 6 2 2. - 0 - -7.7213020995259285e-003 - 0.7571418881416321 - -0.1222594976425171 - <_> - - <_> - - - - <_> - 13 6 8 3 -1. - <_> - 13 7 8 1 3. - 0 - 8.1067271530628204e-003 - -0.1665772050619125 - 0.7509614825248718 - <_> - - <_> - - - - <_> - 14 6 8 4 -1. - <_> - 14 7 8 2 2. - 0 - -7.7238711528480053e-003 - 0.6266279220581055 - -0.1912745982408524 - <_> - - <_> - - - - <_> - 0 10 2 8 -1. - <_> - 0 14 2 4 2. - 0 - 4.4225031160749495e-004 - -0.2394447028636932 - 0.4484061896800995 - <_> - - <_> - - - - <_> - 34 0 2 16 -1. - <_> - 35 0 1 8 2. - <_> - 34 8 1 8 2. - 0 - -1.6867710510268807e-003 - -0.1843906939029694 - 0.0917824134230614 - <_> - - <_> - - - - <_> - 1 0 4 7 -1. - <_> - 3 0 2 7 2. - 0 - 0.0146256200969219 - 0.1616805940866470 - -0.8150117993354797 - -1.2678639888763428 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 7 28 3 -1. - <_> - 11 7 14 3 2. - 0 - 0.0381411388516426 - -0.3327588140964508 - 0.7783334255218506 - <_> - - <_> - - - - <_> - 34 0 2 2 -1. - <_> - 34 1 2 1 2. - 0 - -1.3136120105627924e-004 - 0.3635309040546417 - -0.3204346895217896 - <_> - - <_> - - - - <_> - 0 12 4 6 -1. - <_> - 0 15 4 3 2. - 0 - -3.8757019210606813e-003 - 0.7135239243507385 - -0.3518598973751068 - <_> - - <_> - - - - <_> - 34 0 2 2 -1. - <_> - 34 1 2 1 2. - 0 - 1.4266290236264467e-003 - 0.0681008473038673 - -0.6172732710838318 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -2.4605958606116474e-004 - 0.5727149844169617 - -0.3786099851131439 - <_> - - <_> - - - - <_> - 17 5 9 12 -1. - <_> - 20 5 3 12 3. - 0 - -0.0318226404488087 - -0.6348456144332886 - 0.1164183989167213 - <_> - - <_> - - - - <_> - 10 5 9 12 -1. - <_> - 13 5 3 12 3. - 0 - -0.0171309504657984 - -0.6279314756393433 - 0.3247947096824646 - <_> - - <_> - - - - <_> - 4 0 32 1 -1. - <_> - 4 0 16 1 2. - 0 - -9.3903783708810806e-003 - -0.2757895886898041 - 0.2233072966337204 - <_> - - <_> - - - - <_> - 0 0 3 3 -1. - <_> - 1 0 1 3 3. - 0 - 2.2802520543336868e-003 - 0.1897764056921005 - -0.6881762146949768 - <_> - - <_> - - - - <_> - 32 7 4 7 -1. - <_> - 33 8 2 7 2. - 1 - 2.6840099599212408e-003 - -0.2235050052404404 - 0.1372579932212830 - <_> - - <_> - - - - <_> - 7 0 8 6 -1. - <_> - 7 0 4 3 2. - <_> - 11 3 4 3 2. - 0 - 0.0106046395376325 - -0.2142623066902161 - 0.5620787143707275 - -1.5844069719314575 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -3.1677199876867235e-004 - 0.4659548103809357 - -0.3742581903934479 - <_> - - <_> - - - - <_> - 27 1 8 9 -1. - <_> - 29 3 4 9 2. - 1 - -0.0551206283271313 - 0.5417978763580322 - -0.2265765070915222 - <_> - - <_> - - - - <_> - 1 10 1 8 -1. - <_> - 1 14 1 4 2. - 0 - -6.4742640824988484e-004 - 0.3770307004451752 - -0.3348644077777863 - <_> - - <_> - - - - <_> - 3 6 30 9 -1. - <_> - 13 9 10 3 9. - 0 - 0.3950783908367157 - -0.1814441978931427 - 0.8132591843605042 - <_> - - <_> - - - - <_> - 12 5 8 6 -1. - <_> - 12 7 8 2 3. - 0 - 0.0405094102025032 - -0.0953694134950638 - 0.8059561848640442 - <_> - - <_> - - - - <_> - 16 4 6 3 -1. - <_> - 16 5 6 1 3. - 0 - 4.8735421150922775e-003 - -0.1402366012334824 - 0.6164302825927734 - <_> - - <_> - - - - <_> - 0 0 2 18 -1. - <_> - 0 0 1 9 2. - <_> - 1 9 1 9 2. - 0 - 0.0105780400335789 - 0.1293267011642456 - -0.7482334971427918 - <_> - - <_> - - - - <_> - 34 2 2 14 -1. - <_> - 35 2 1 7 2. - <_> - 34 9 1 7 2. - 0 - 9.2986393719911575e-003 - 0.0589406006038189 - -0.4410730004310608 - <_> - - <_> - - - - <_> - 0 2 2 14 -1. - <_> - 0 2 1 7 2. - <_> - 1 9 1 7 2. - 0 - -5.0301607698202133e-003 - -0.6630973219871521 - 0.1810476928949356 - <_> - - <_> - - - - <_> - 35 0 1 4 -1. - <_> - 35 2 1 2 2. - 0 - -1.0947990085696802e-004 - 0.2211259007453919 - -0.2730903923511505 - <_> - - <_> - - - - <_> - 5 0 24 18 -1. - <_> - 5 0 12 9 2. - <_> - 17 9 12 9 2. - 0 - -0.1168550997972488 - -0.7720596790313721 - 0.1248165965080261 - <_> - - <_> - - - - <_> - 35 16 1 2 -1. - <_> - 35 17 1 1 2. - 0 - -4.3603649828583002e-005 - 0.1367060989141464 - -0.1612793952226639 - <_> - - <_> - - - - <_> - 0 16 1 2 -1. - <_> - 0 17 1 1 2. - 0 - -1.5056360280141234e-004 - 0.4486046135425568 - -0.2171128988265991 - <_> - - <_> - - - - <_> - 17 6 8 12 -1. - <_> - 19 6 4 12 2. - 0 - -0.0163946095854044 - -0.6582735180854797 - 0.1674550026655197 - <_> - - <_> - - - - <_> - 11 5 8 13 -1. - <_> - 13 5 4 13 2. - 0 - -0.0144828604534268 - -0.6834514737129211 - 0.1345615983009338 - <_> - - <_> - - - - <_> - 35 16 1 2 -1. - <_> - 35 17 1 1 2. - 0 - 3.9269471017178148e-005 - -0.1499813944101334 - 0.1601772010326386 - <_> - - <_> - - - - <_> - 10 9 12 3 -1. - <_> - 10 10 12 1 3. - 0 - 7.4323131702840328e-003 - -0.1684845983982086 - 0.5396398901939392 - -1.3820559978485107 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 10 1 8 -1. - <_> - 0 14 1 4 2. - 0 - -4.3472499237395823e-004 - 0.4394924044609070 - -0.4224875867366791 - <_> - - <_> - - - - <_> - 20 0 10 10 -1. - <_> - 25 0 5 5 2. - <_> - 20 5 5 5 2. - 0 - 0.0329953208565712 - -0.1979825049638748 - 0.5953487157821655 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -4.1011828579939902e-004 - 0.4440306127071381 - -0.3074846863746643 - <_> - - <_> - - - - <_> - 19 0 13 18 -1. - <_> - 19 9 13 9 2. - 0 - -0.0819697380065918 - -0.5333436727523804 - 0.1671810001134872 - <_> - - <_> - - - - <_> - 4 0 14 6 -1. - <_> - 4 0 7 3 2. - <_> - 11 3 7 3 2. - 0 - 0.0177787002176046 - -0.2045017927885056 - 0.5144413113594055 - <_> - - <_> - - - - <_> - 16 5 6 6 -1. - <_> - 16 7 6 2 3. - 0 - 0.0228346996009350 - -0.1484607011079788 - 0.5624278783798218 - <_> - - <_> - - - - <_> - 13 7 7 8 -1. - <_> - 13 9 7 4 2. - 0 - 0.0386043414473534 - -0.1273147016763687 - 0.8149448037147522 - <_> - - <_> - - - - <_> - 33 0 3 1 -1. - <_> - 34 0 1 1 3. - 0 - -7.3286908445879817e-004 - -0.3719344139099121 - 0.0676164999604225 - <_> - - <_> - - - - <_> - 7 1 10 4 -1. - <_> - 6 2 10 2 2. - 1 - -0.0232290402054787 - 0.7123206257820129 - -0.1158939003944397 - <_> - - <_> - - - - <_> - 15 2 6 16 -1. - <_> - 18 2 3 8 2. - <_> - 15 10 3 8 2. - 0 - -0.0195753592997789 - -0.6899073123931885 - 0.1399950981140137 - <_> - - <_> - - - - <_> - 0 10 1 8 -1. - <_> - 0 14 1 4 2. - 0 - 4.1991271427832544e-004 - -0.1835464984178543 - 0.4943555891513825 - <_> - - <_> - - - - <_> - 27 4 6 6 -1. - <_> - 29 6 2 6 3. - 1 - -0.0570897497236729 - 0.6260784864425659 - -0.0785768479108810 - <_> - - <_> - - - - <_> - 14 5 8 8 -1. - <_> - 16 5 4 8 2. - 0 - 0.0256996992975473 - 0.1155714020133019 - -0.8193519115447998 - <_> - - <_> - - - - <_> - 27 5 6 6 -1. - <_> - 29 7 2 6 3. - 1 - 0.0325796194374561 - -0.1176773980259895 - 0.4277622103691101 - <_> - - <_> - - - - <_> - 9 5 6 6 -1. - <_> - 7 7 6 2 3. - 1 - -0.0205922499299049 - 0.4868524074554443 - -0.2131853997707367 - <_> - - <_> - - - - <_> - 12 5 12 9 -1. - <_> - 15 5 6 9 2. - 0 - -0.0174852795898914 - -0.5228734016418457 - 0.1339704990386963 - <_> - - <_> - - - - <_> - 0 0 3 1 -1. - <_> - 1 0 1 1 3. - 0 - 8.9153228327631950e-004 - 0.0963044911623001 - -0.6886307001113892 - <_> - - <_> - - - - <_> - 15 4 18 6 -1. - <_> - 15 6 18 2 3. - 0 - 0.0575339011847973 - -0.0870805233716965 - 0.4048064947128296 - -1.3879380226135254 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_> - 0 10 1 6 -1. - <_> - 0 13 1 3 2. - 0 - -4.6606198884546757e-004 - 0.4277374148368835 - -0.3542076945304871 - <_> - - <_> - - - - <_> - 3 6 30 6 -1. - <_> - 13 8 10 2 9. - 0 - 0.3055455982685089 - -0.1639281064271927 - 0.8606523275375366 - <_> - - <_> - - - - <_> - 11 7 12 4 -1. - <_> - 11 8 12 2 2. - 0 - -0.0114494003355503 - 0.5972732901573181 - -0.2323434054851532 - <_> - - <_> - - - - <_> - 14 8 9 3 -1. - <_> - 14 9 9 1 3. - 0 - 6.3891541212797165e-003 - -0.1291541010141373 - 0.6105204224586487 - <_> - - <_> - - - - <_> - 14 8 7 4 -1. - <_> - 14 9 7 2 2. - 0 - -8.4334248676896095e-003 - 0.4792853891849518 - -0.1900272965431213 - <_> - - <_> - - - - <_> - 12 7 18 6 -1. - <_> - 12 9 18 2 3. - 0 - 0.0538089312613010 - -0.1149377003312111 - 0.5339453816413879 - <_> - - <_> - - - - <_> - 7 8 3 10 -1. - <_> - 7 13 3 5 2. - 0 - -4.7580219688825309e-004 - -0.3459854125976563 - 0.2548804879188538 - <_> - - <_> - - - - <_> - 35 10 1 6 -1. - <_> - 35 13 1 3 2. - 0 - -1.3450840197037905e-004 - 0.2241459041833878 - -0.1955007016658783 - <_> - - <_> - - - - <_> - 0 10 1 6 -1. - <_> - 0 13 1 3 2. - 0 - 5.0016911700367928e-004 - -0.1972054988145828 - 0.4967764019966126 - <_> - - <_> - - - - <_> - 18 13 9 5 -1. - <_> - 21 13 3 5 3. - 0 - 0.0150632699951530 - 0.1063077002763748 - -0.4113821089267731 - <_> - - <_> - - - - <_> - 15 9 6 4 -1. - <_> - 15 10 6 2 2. - 0 - 7.7588870190083981e-003 - -0.1537311971187592 - 0.4893161952495575 - <_> - - <_> - - - - <_> - 16 4 18 8 -1. - <_> - 16 6 18 4 2. - 0 - 0.0454101189970970 - -0.0735593065619469 - 0.2773792147636414 - <_> - - <_> - - - - <_> - 9 14 9 3 -1. - <_> - 12 14 3 3 3. - 0 - -0.0145996697247028 - -0.7096682786941528 - 0.0975155606865883 - <_> - - <_> - - - - <_> - 32 0 4 6 -1. - <_> - 32 0 2 6 2. - 0 - 0.0172360707074404 - 0.0168695393949747 - -0.5738832950592041 - <_> - - <_> - - - - <_> - 0 0 4 6 -1. - <_> - 2 0 2 6 2. - 0 - 0.0142307104542851 - 0.0947145000100136 - -0.7839525938034058 - <_> - - <_> - - - - <_> - 27 0 6 7 -1. - <_> - 29 2 2 7 3. - 1 - -0.0437068603932858 - 0.6097965240478516 - -0.1560188978910446 - <_> - - <_> - - - - <_> - 0 0 1 4 -1. - <_> - 0 2 1 2 2. - 0 - -6.2343222089111805e-004 - 0.3485119044780731 - -0.2170491069555283 - <_> - - <_> - - - - <_> - 27 8 6 4 -1. - <_> - 29 10 2 4 3. - 1 - 0.0192450508475304 - -0.1171097978949547 - 0.3070116043090820 - <_> - - <_> - - - - <_> - 4 9 27 6 -1. - <_> - 13 11 9 2 9. - 0 - 0.2703577876091003 - -0.0900964364409447 - 0.7665696144104004 - <_> - - <_> - - - - <_> - 31 14 2 3 -1. - <_> - 31 14 1 3 2. - 0 - -3.5394480801187456e-004 - -0.2002478986978531 - 0.1249336004257202 - <_> - - <_> - - - - <_> - 10 0 5 6 -1. - <_> - 8 2 5 2 3. - 1 - -0.0360139608383179 - 0.6702855825424194 - -0.1057187989354134 - <_> - - <_> - - - - <_> - 14 7 11 3 -1. - <_> - 14 8 11 1 3. - 0 - 9.2952791601419449e-003 - -0.1057471036911011 - 0.4509387910366058 - <_> - - <_> - - - - <_> - 0 12 2 6 -1. - <_> - 0 15 2 3 2. - 0 - -3.3304709359072149e-004 - 0.2793382108211517 - -0.2457676976919174 - <_> - - <_> - - - - <_> - 34 13 2 4 -1. - <_> - 34 15 2 2 2. - 0 - -2.9147620807634667e-005 - 0.0858138129115105 - -0.0954695865511894 - <_> - - <_> - - - - <_> - 0 13 2 4 -1. - <_> - 0 15 2 2 2. - 0 - 4.4382669148035347e-004 - -0.2022008001804352 - 0.5454357862472534 - -1.3538850545883179 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 6 4 12 -1. - <_> - 3 10 4 4 3. - 0 - 7.9610757529735565e-003 - -0.3672207891941071 - 0.4315434992313385 - <_> - - <_> - - - - <_> - 14 0 22 12 -1. - <_> - 25 0 11 6 2. - <_> - 14 6 11 6 2. - 0 - 0.0633948296308517 - -0.2073971033096314 - 0.5742601752281189 - <_> - - <_> - - - - <_> - 8 1 7 6 -1. - <_> - 6 3 7 2 3. - 1 - -0.0531933493912220 - 0.7255092263221741 - -0.1434202045202255 - <_> - - <_> - - - - <_> - 12 5 14 3 -1. - <_> - 12 6 14 1 3. - 0 - 0.0154607696458697 - -0.0960538163781166 - 0.7578523755073547 - <_> - - <_> - - - - <_> - 7 6 7 4 -1. - <_> - 6 7 7 2 2. - 1 - -0.0176431406289339 - 0.6681562066078186 - -0.1417672932147980 - <_> - - <_> - - - - <_> - 18 3 6 4 -1. - <_> - 18 4 6 2 2. - 0 - 9.5065636560320854e-003 - -0.0962597429752350 - 0.4699633121490479 - <_> - - <_> - - - - <_> - 4 5 5 6 -1. - <_> - 4 7 5 2 3. - 0 - 4.0446049533784389e-003 - -0.1973251998424530 - 0.4283801019191742 - <_> - - <_> - - - - <_> - 33 0 3 4 -1. - <_> - 34 0 1 4 3. - 0 - 3.2312041148543358e-003 - 0.1186169013381004 - -0.6103963255882263 - <_> - - <_> - - - - <_> - 9 0 6 18 -1. - <_> - 9 9 6 9 2. - 0 - -0.0401590503752232 - -0.4166434109210968 - 0.2167232930660248 - <_> - - <_> - - - - <_> - 6 6 24 6 -1. - <_> - 14 8 8 2 9. - 0 - 0.2852425873279572 - -0.1043575033545494 - 0.8573396801948547 - <_> - - <_> - - - - <_> - 16 8 4 4 -1. - <_> - 16 9 4 2 2. - 0 - -4.9264221452176571e-003 - 0.4706046879291534 - -0.1399745941162109 - <_> - - <_> - - - - <_> - 13 8 13 4 -1. - <_> - 13 9 13 2 2. - 0 - 0.0137817002832890 - -0.1271356940269470 - 0.4461891949176788 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 17 2 1 2. - 0 - -4.9873598618432879e-004 - 0.4702663123607636 - -0.1548373997211456 - <_> - - <_> - - - - <_> - 35 14 1 4 -1. - <_> - 35 15 1 2 2. - 0 - -1.5621389320585877e-004 - 0.1885481029748917 - -0.0778397768735886 - <_> - - <_> - - - - <_> - 0 14 1 4 -1. - <_> - 0 15 1 2 2. - 0 - -3.7597760092467070e-004 - 0.5769770145416260 - -0.1335622072219849 - <_> - - <_> - - - - <_> - 15 6 9 7 -1. - <_> - 18 6 3 7 3. - 0 - -0.0106659103184938 - -0.4106529951095581 - 0.1556212007999420 - <_> - - <_> - - - - <_> - 0 0 3 4 -1. - <_> - 1 0 1 4 3. - 0 - -3.4135230816900730e-003 - -0.7636343240737915 - 0.1020964980125427 - <_> - - <_> - - - - <_> - 34 16 2 2 -1. - <_> - 35 16 1 1 2. - <_> - 34 17 1 1 2. - 0 - 5.6471868447260931e-005 - -0.1644393056631088 - 0.2290841937065125 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 16 1 1 2. - <_> - 1 17 1 1 2. - 0 - 2.1611599368043244e-004 - -0.1629032939672470 - 0.4575636088848114 - <_> - - <_> - - - - <_> - 22 0 10 4 -1. - <_> - 22 0 5 4 2. - 1 - -0.0108227198943496 - -0.2446253001689911 - 0.1388894021511078 - <_> - - <_> - - - - <_> - 15 4 6 14 -1. - <_> - 15 4 3 7 2. - <_> - 18 11 3 7 2. - 0 - -0.0150849102064967 - -0.5781347751617432 - 0.1156411990523338 - <_> - - <_> - - - - <_> - 15 3 8 10 -1. - <_> - 17 3 4 10 2. - 0 - 0.0257159601897001 - 0.0396311990916729 - -0.6527001261711121 - <_> - - <_> - - - - <_> - 0 0 2 5 -1. - <_> - 1 0 1 5 2. - 0 - 2.6093570049852133e-003 - 0.1142188981175423 - -0.5680108070373535 - -1.3707510232925415 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_> - 7 1 8 6 -1. - <_> - 5 3 8 2 3. - 1 - -0.0518619008362293 - 0.7043117284774780 - -0.2214370071887970 - <_> - - <_> - - - - <_> - 19 0 11 18 -1. - <_> - 19 9 11 9 2. - 0 - -0.0503416284918785 - -0.4639782905578613 - 0.2804746031761169 - <_> - - <_> - - - - <_> - 6 8 24 6 -1. - <_> - 14 10 8 2 9. - 0 - 0.2570973038673401 - -0.1312427967786789 - 0.8239594101905823 - <_> - - <_> - - - - <_> - 14 6 10 3 -1. - <_> - 14 7 10 1 3. - 0 - 0.0110318996012211 - -0.1425814032554627 - 0.6382390260696411 - <_> - - <_> - - - - <_> - 12 7 11 4 -1. - <_> - 12 8 11 2 2. - 0 - 0.0185650903731585 - -0.1512387990951538 - 0.5988119244575501 - <_> - - <_> - - - - <_> - 18 0 16 6 -1. - <_> - 26 0 8 3 2. - <_> - 18 3 8 3 2. - 0 - 0.0175023507326841 - -0.1261979937553406 - 0.3817803859710693 - <_> - - <_> - - - - <_> - 5 3 7 3 -1. - <_> - 4 4 7 1 3. - 1 - 7.2723729535937309e-003 - -0.1510328948497772 - 0.5812842249870300 - <_> - - <_> - - - - <_> - 18 4 4 4 -1. - <_> - 18 5 4 2 2. - 0 - 8.1504750996828079e-003 - -0.0654647573828697 - 0.5639755129814148 - <_> - - <_> - - - - <_> - 5 3 10 4 -1. - <_> - 4 4 10 2 2. - 1 - -0.0185527391731739 - 0.5315709710121155 - -0.1252657026052475 - <_> - - <_> - - - - <_> - 14 8 8 10 -1. - <_> - 18 8 4 5 2. - <_> - 14 13 4 5 2. - 0 - -0.0231014806777239 - -0.6794939041137695 - 0.1104625985026360 - <_> - - <_> - - - - <_> - 3 0 4 1 -1. - <_> - 5 0 2 1 2. - 0 - -1.8539339362177998e-004 - 0.3010003864765167 - -0.2120669931173325 - <_> - - <_> - - - - <_> - 20 0 10 8 -1. - <_> - 25 0 5 4 2. - <_> - 20 4 5 4 2. - 0 - 0.0173191204667091 - -0.0937381312251091 - 0.2100856006145477 - <_> - - <_> - - - - <_> - 13 0 10 8 -1. - <_> - 13 0 5 4 2. - <_> - 18 4 5 4 2. - 0 - 0.0143056204542518 - 0.1800594925880432 - -0.3977671861648560 - <_> - - <_> - - - - <_> - 21 5 6 13 -1. - <_> - 23 5 2 13 3. - 0 - 0.0257633402943611 - 8.7056998163461685e-003 - -0.6289495229721069 - <_> - - <_> - - - - <_> - 9 5 6 13 -1. - <_> - 11 5 2 13 3. - 0 - -0.0153833404183388 - -0.5341547131538391 - 0.1038073003292084 - <_> - - <_> - - - - <_> - 27 5 5 3 -1. - <_> - 27 6 5 1 3. - 0 - 1.0605469578877091e-003 - -0.0901285186409950 - 0.1679212003946304 - <_> - - <_> - - - - <_> - 10 0 3 6 -1. - <_> - 10 2 3 2 3. - 0 - 3.5230729263275862e-003 - -0.1711069047451019 - 0.3259654045104981 - <_> - - <_> - - - - <_> - 26 6 3 6 -1. - <_> - 26 8 3 2 3. - 0 - -0.0107892798259854 - 0.3610992133617401 - -0.0663391500711441 - <_> - - <_> - - - - <_> - 0 11 36 7 -1. - <_> - 18 11 18 7 2. - 0 - 0.2795093953609467 - -0.0746058970689774 - 0.7336987853050232 - <_> - - <_> - - - - <_> - 27 5 5 3 -1. - <_> - 27 6 5 1 3. - 0 - 3.8369540125131607e-003 - 0.0448735393583775 - -0.1860270053148270 - <_> - - <_> - - - - <_> - 4 5 5 3 -1. - <_> - 4 6 5 1 3. - 0 - 1.6195949865505099e-003 - -0.1392249017953873 - 0.4343700110912323 - <_> - - <_> - - - - <_> - 28 6 4 4 -1. - <_> - 29 7 2 4 2. - 1 - 0.0116479499265552 - -0.0743575915694237 - 0.5420144200325012 - <_> - - <_> - - - - <_> - 14 15 8 2 -1. - <_> - 16 15 4 2 2. - 0 - -5.9066400863230228e-003 - -0.7055758833885193 - 0.0864336192607880 - <_> - - <_> - - - - <_> - 3 5 30 6 -1. - <_> - 13 7 10 2 9. - 0 - 0.3968684077262878 - -0.0748983696103096 - 0.9406285881996155 - <_> - - <_> - - - - <_> - 6 7 16 6 -1. - <_> - 6 9 16 2 3. - 0 - 0.0576637797057629 - -0.0965584069490433 - 0.5418242812156677 - <_> - - <_> - - - - <_> - 14 10 12 6 -1. - <_> - 14 12 12 2 3. - 0 - 0.0603195689618587 - -0.0665010735392571 - 0.6402354836463928 - -1.3303329944610596 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 0 12 10 -1. - <_> - 6 0 6 5 2. - <_> - 12 5 6 5 2. - 0 - 0.0190502498298883 - -0.4443340897560120 - 0.4394856989383698 - <_> - - <_> - - - - <_> - 25 2 7 16 -1. - <_> - 25 10 7 8 2. - 0 - -0.0201983004808426 - -0.3170621991157532 - 0.1043293029069901 - <_> - - <_> - - - - <_> - 9 6 18 7 -1. - <_> - 15 6 6 7 3. - 0 - 0.0214780308306217 - -0.3502483963966370 - 0.2635537087917328 - <_> - - <_> - - - - <_> - 5 0 26 18 -1. - <_> - 18 0 13 9 2. - <_> - 5 9 13 9 2. - 0 - -0.1018775999546051 - -0.5988957881927490 - 0.1768579930067062 - <_> - - <_> - - - - <_> - 10 6 10 3 -1. - <_> - 10 7 10 1 3. - 0 - 0.0109741603955626 - -0.1489523947238922 - 0.6011521816253662 - <_> - - <_> - - - - <_> - 17 6 6 4 -1. - <_> - 17 7 6 2 2. - 0 - -0.0114767104387283 - 0.4066570997238159 - -0.1240468993782997 - <_> - - <_> - - - - <_> - 15 6 6 7 -1. - <_> - 18 6 3 7 2. - 0 - -0.0234311502426863 - -0.7148783206939697 - 0.1427811980247498 - <_> - - <_> - - - - <_> - 26 6 5 4 -1. - <_> - 26 7 5 2 2. - 0 - 1.4963559806346893e-003 - -0.1704585999250412 - 0.1719308048486710 - <_> - - <_> - - - - <_> - 0 12 1 6 -1. - <_> - 0 15 1 3 2. - 0 - -5.4855772759765387e-004 - 0.3155323863029480 - -0.2144445031881332 - <_> - - <_> - - - - <_> - 9 4 18 14 -1. - <_> - 18 4 9 7 2. - <_> - 9 11 9 7 2. - 0 - 0.0749126300215721 - 0.0912405624985695 - -0.6395121216773987 - <_> - - <_> - - - - <_> - 7 5 6 3 -1. - <_> - 6 6 6 1 3. - 1 - 6.8816398270428181e-003 - -0.1490440964698792 - 0.4795236885547638 - <_> - - <_> - - - - <_> - 27 5 6 3 -1. - <_> - 29 7 2 3 3. - 1 - -0.0382125787436962 - 0.5288773775100708 - -0.0618947297334671 - <_> - - <_> - - - - <_> - 7 8 3 3 -1. - <_> - 6 9 3 1 3. - 1 - 4.4051730073988438e-003 - -0.1193412989377976 - 0.5061342120170593 - <_> - - <_> - - - - <_> - 28 5 6 5 -1. - <_> - 30 7 2 5 3. - 1 - 0.0239668991416693 - -0.0897205099463463 - 0.3315277993679047 - <_> - - <_> - - - - <_> - 8 5 5 6 -1. - <_> - 6 7 5 2 3. - 1 - -0.0341629907488823 - 0.5313478112220764 - -0.1466650068759918 - <_> - - <_> - - - - <_> - 31 0 4 1 -1. - <_> - 31 0 2 1 2. - 0 - 1.9642219413071871e-003 - 0.0907835885882378 - -0.4303255975246429 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 3 0 2 1 2. - 0 - 9.6757910796441138e-005 - 0.2255253940820694 - -0.2822071015834808 - <_> - - <_> - - - - <_> - 17 11 4 3 -1. - <_> - 17 12 4 1 3. - 0 - -3.2862399239093065e-003 - 0.4051502048969269 - -0.1177619993686676 - <_> - - <_> - - - - <_> - 12 3 7 4 -1. - <_> - 12 4 7 2 2. - 0 - 0.0116883097216487 - -0.0918571278452873 - 0.6283488869667053 - <_> - - <_> - - - - <_> - 14 9 9 3 -1. - <_> - 14 10 9 1 3. - 0 - -6.0287420637905598e-003 - 0.3926180899143219 - -0.1228715032339096 - <_> - - <_> - - - - <_> - 1 17 21 1 -1. - <_> - 8 17 7 1 3. - 0 - -0.0137213403359056 - -0.5529879927635193 - 0.0910412818193436 - <_> - - <_> - - - - <_> - 12 9 20 4 -1. - <_> - 12 9 10 4 2. - 0 - 0.0756266415119171 - -0.0449295900762081 - 0.1744275987148285 - <_> - - <_> - - - - <_> - 3 9 22 4 -1. - <_> - 14 9 11 4 2. - 0 - 0.0934344828128815 - -0.0845939517021179 - 0.6013116240501404 - <_> - - <_> - - - - <_> - 25 0 3 3 -1. - <_> - 26 1 1 3 3. - 1 - 5.8748829178512096e-003 - -0.0441314987838268 - 0.3956570923328400 - <_> - - <_> - - - - <_> - 14 9 4 3 -1. - <_> - 14 10 4 1 3. - 0 - 4.0064537897706032e-003 - -0.1141439974308014 - 0.3792538046836853 - <_> - - <_> - - - - <_> - 19 4 9 3 -1. - <_> - 22 4 3 3 3. - 0 - 0.0229454599320889 - 0.0246731899678707 - -0.4152199923992157 - <_> - - <_> - - - - <_> - 8 4 9 3 -1. - <_> - 11 4 3 3 3. - 0 - -0.0128104602918029 - -0.5155742764472961 - 0.0913196131587029 - <_> - - <_> - - - - <_> - 0 15 36 3 -1. - <_> - 12 16 12 1 9. - 0 - 0.2042552977800369 - -0.0659275427460670 - 0.7594249248504639 - <_> - - <_> - - - - <_> - 2 0 4 2 -1. - <_> - 2 0 4 1 2. - 1 - 4.9796327948570251e-003 - 0.1080627962946892 - -0.5001627206802368 - <_> - - <_> - - - - <_> - 19 9 2 9 -1. - <_> - 19 12 2 3 3. - 0 - 0.0283976309001446 - -0.0371529608964920 - 0.5401064753532410 - <_> - - <_> - - - - <_> - 13 7 8 3 -1. - <_> - 13 8 8 1 3. - 0 - 6.0867150314152241e-003 - -0.1197860985994339 - 0.3569226861000061 - <_> - - <_> - - - - <_> - 30 4 2 2 -1. - <_> - 31 4 1 1 2. - <_> - 30 5 1 1 2. - 0 - -2.1456899412441999e-004 - 0.1874015033245087 - -0.0884172022342682 - <_> - - <_> - - - - <_> - 4 4 2 2 -1. - <_> - 4 4 1 1 2. - <_> - 5 5 1 1 2. - 0 - 2.8941858909092844e-004 - -0.1259797960519791 - 0.3998227119445801 - <_> - - <_> - - - - <_> - 18 7 4 3 -1. - <_> - 18 8 4 1 3. - 0 - -1.3047619722783566e-003 - 0.1549997031688690 - -0.0753860473632813 - <_> - - <_> - - - - <_> - 9 0 1 8 -1. - <_> - 9 0 1 4 2. - 1 - -0.0129750100895762 - -0.5534411072731018 - 0.0823542475700378 - <_> - - <_> - - - - <_> - 25 6 10 3 -1. - <_> - 25 7 10 1 3. - 0 - 7.7442410401999950e-003 - 0.0276998002082109 - -0.3483599126338959 - <_> - - <_> - - - - <_> - 1 6 10 3 -1. - <_> - 1 7 10 1 3. - 0 - 2.4850629270076752e-003 - -0.1297612935304642 - 0.3790883123874664 - -1.5300060510635376 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 14 12 -1. - <_> - 6 6 7 6 2. - <_> - 13 12 7 6 2. - 0 - -0.0403868816792965 - 0.5960354804992676 - -0.3574176132678986 - <_> - - <_> - - - - <_> - 31 14 3 4 -1. - <_> - 31 16 3 2 2. - 0 - -6.6068649175576866e-005 - 0.4462898075580597 - -0.3595947027206421 - <_> - - <_> - - - - <_> - 1 12 2 4 -1. - <_> - 1 14 2 2 2. - 0 - 3.7622239906340837e-003 - 0.1794701963663101 - -0.7563151121139526 - <_> - - <_> - - - - <_> - 15 0 12 5 -1. - <_> - 19 0 4 5 3. - 0 - -0.0309677198529243 - -0.2884705066680908 - 0.0768705308437347 - <_> - - <_> - - - - <_> - 10 0 8 14 -1. - <_> - 12 0 4 14 2. - 0 - 0.0305665601044893 - 0.1400360018014908 - -0.7175536751747131 - <_> - - <_> - - - - <_> - 28 1 8 7 -1. - <_> - 30 3 4 7 2. - 1 - 9.9054910242557526e-004 - 0.0829155892133713 - -0.2919717133045197 - <_> - - <_> - - - - <_> - 8 14 20 4 -1. - <_> - 8 14 10 2 2. - <_> - 18 16 10 2 2. - 0 - 0.0125777004286647 - 0.1538071930408478 - -0.4688293039798737 - <_> - - <_> - - - - <_> - 6 11 24 3 -1. - <_> - 14 12 8 1 9. - 0 - 0.1239292025566101 - -0.0908238589763641 - 0.7383757233619690 - <_> - - <_> - - - - <_> - 4 5 27 6 -1. - <_> - 13 7 9 2 9. - 0 - 0.3773748874664307 - -0.0542329512536526 - 0.9229121804237366 - <_> - - <_> - - - - <_> - 7 0 22 18 -1. - <_> - 18 0 11 9 2. - <_> - 7 9 11 9 2. - 0 - 0.1099637001752853 - 0.0915962681174278 - -0.6597716808319092 - <_> - - <_> - - - - <_> - 16 0 3 2 -1. - <_> - 16 1 3 1 2. - 0 - -1.2721329694613814e-003 - 0.3347575068473816 - -0.1829068958759308 - <_> - - <_> - - - - <_> - 0 17 36 1 -1. - <_> - 9 17 18 1 2. - 0 - 0.0469062514603138 - -0.0839710533618927 - 0.6984758973121643 - <_> - - <_> - - - - <_> - 5 5 12 1 -1. - <_> - 5 5 6 1 2. - 1 - 3.2869930146262050e-004 - 0.1879463046789169 - -0.2929005920886993 - <_> - - <_> - - - - <_> - 34 15 2 1 -1. - <_> - 34 15 1 1 2. - 1 - 1.7333080177195370e-004 - -0.2696416079998016 - 0.3494757115840912 - <_> - - <_> - - - - <_> - 7 8 16 4 -1. - <_> - 7 9 16 2 2. - 0 - 0.0198009591549635 - -0.1467922925949097 - 0.4399561882019043 - <_> - - <_> - - - - <_> - 35 10 1 6 -1. - <_> - 35 12 1 2 3. - 0 - 2.0056760695297271e-004 - -0.1372741013765335 - 0.2221331000328064 - <_> - - <_> - - - - <_> - 13 8 3 4 -1. - <_> - 13 9 3 2 2. - 0 - -1.4923149719834328e-003 - 0.3473525941371918 - -0.1594821065664291 - <_> - - <_> - - - - <_> - 35 10 1 6 -1. - <_> - 35 12 1 2 3. - 0 - -4.2736999603221193e-005 - 0.3152787089347839 - -0.2306694984436035 - <_> - - <_> - - - - <_> - 12 0 1 4 -1. - <_> - 11 1 1 2 2. - 1 - 6.6625140607357025e-004 - -0.2013110071420670 - 0.2869189083576202 - <_> - - <_> - - - - <_> - 35 10 1 6 -1. - <_> - 35 12 1 2 3. - 0 - 1.3850460163666867e-005 - -0.2021923959255219 - 0.2307330965995789 - <_> - - <_> - - - - <_> - 18 0 1 14 -1. - <_> - 18 0 1 7 2. - 1 - 0.0409726314246655 - 0.0795431807637215 - -0.8079563975334168 - -1.4114329814910889 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_> - 5 6 16 12 -1. - <_> - 5 6 8 6 2. - <_> - 13 12 8 6 2. - 0 - -0.0469829291105270 - 0.7082253098487854 - -0.3703424036502838 - <_> - - <_> - - - - <_> - 18 1 7 8 -1. - <_> - 16 3 7 4 2. - 1 - -7.5753079727292061e-004 - -0.1255030930042267 - 0.1394442021846771 - <_> - - <_> - - - - <_> - 14 4 8 10 -1. - <_> - 14 4 4 5 2. - <_> - 18 9 4 5 2. - 0 - 0.0153272999450564 - 0.2161353975534439 - -0.5629395246505737 - <_> - - <_> - - - - <_> - 22 0 9 3 -1. - <_> - 25 0 3 3 3. - 0 - 0.0181470401585102 - -0.0320796482264996 - 0.3234755992889404 - <_> - - <_> - - - - <_> - 0 10 26 8 -1. - <_> - 0 10 13 4 2. - <_> - 13 14 13 4 2. - 0 - 0.0473471917212009 - -0.1738158017396927 - 0.5758044719696045 - <_> - - <_> - - - - <_> - 15 10 16 8 -1. - <_> - 23 10 8 4 2. - <_> - 15 14 8 4 2. - 0 - -0.0598379410803318 - 0.4779787063598633 - -0.1026028022170067 - <_> - - <_> - - - - <_> - 6 0 24 18 -1. - <_> - 6 0 12 9 2. - <_> - 18 9 12 9 2. - 0 - -0.0527967996895313 - -0.4798848927021027 - 0.1878775954246521 - <_> - - <_> - - - - <_> - 18 0 9 6 -1. - <_> - 21 0 3 6 3. - 0 - -0.0243854299187660 - -0.3084166944026947 - 8.7605630978941917e-003 - <_> - - <_> - - - - <_> - 9 0 9 6 -1. - <_> - 12 0 3 6 3. - 0 - 0.0252883005887270 - 0.1391403973102570 - -0.7109494209289551 - <_> - - <_> - - - - <_> - 30 1 5 14 -1. - <_> - 30 8 5 7 2. - 0 - -0.0216124504804611 - -0.2328253984451294 - 0.0809946805238724 - <_> - - <_> - - - - <_> - 1 1 5 14 -1. - <_> - 1 8 5 7 2. - 0 - 3.4023479092866182e-003 - -0.2298990041017532 - 0.3788951039314270 - <_> - - <_> - - - - <_> - 10 8 26 6 -1. - <_> - 23 8 13 3 2. - <_> - 10 11 13 3 2. - 0 - 0.1127460002899170 - -0.0154747096821666 - 0.5703054070472717 - <_> - - <_> - - - - <_> - 0 8 28 6 -1. - <_> - 0 8 14 3 2. - <_> - 14 11 14 3 2. - 0 - 0.0345168709754944 - -0.1230008006095886 - 0.5677536725997925 - <_> - - <_> - - - - <_> - 12 0 24 12 -1. - <_> - 24 0 12 6 2. - <_> - 12 6 12 6 2. - 0 - 0.0789848119020462 - -0.1424216926097870 - 0.4694185853004456 - <_> - - <_> - - - - <_> - 3 1 14 2 -1. - <_> - 3 1 14 1 2. - 1 - -0.0153778595849872 - 0.6394686102867127 - -0.1123619005084038 - <_> - - <_> - - - - <_> - 33 16 3 2 -1. - <_> - 33 17 3 1 2. - 0 - -2.2373620595317334e-004 - 0.5558329820632935 - -0.2724758088588715 - <_> - - <_> - - - - <_> - 12 0 9 14 -1. - <_> - 15 0 3 14 3. - 0 - -0.0247623901814222 - -0.5040485858917236 - 0.1407779008150101 - <_> - - <_> - - - - <_> - 28 16 8 2 -1. - <_> - 32 16 4 1 2. - <_> - 28 17 4 1 2. - 0 - -9.4061157142277807e-005 - 0.3719528019428253 - -0.2250299006700516 - <_> - - <_> - - - - <_> - 15 8 6 6 -1. - <_> - 15 10 6 2 3. - 0 - -0.0202563591301441 - 0.5105100870132446 - -0.1429875940084457 - <_> - - <_> - - - - <_> - 13 6 22 6 -1. - <_> - 24 6 11 3 2. - <_> - 13 9 11 3 2. - 0 - 0.0481228791177273 - -0.0669795125722885 - 0.3662230968475342 - <_> - - <_> - - - - <_> - 0 10 26 4 -1. - <_> - 0 10 13 2 2. - <_> - 13 12 13 2 2. - 0 - -0.0237878002226353 - 0.5081325173377991 - -0.1290815025568008 - <_> - - <_> - - - - <_> - 24 16 4 2 -1. - <_> - 24 17 4 1 2. - 0 - -1.0520319920033216e-003 - -0.1560467034578323 - 0.0662133172154427 - <_> - - <_> - - - - <_> - 9 16 3 2 -1. - <_> - 9 17 3 1 2. - 0 - -2.6640200521796942e-003 - -0.7254558205604553 - 0.0823654532432556 - -1.3777890205383301 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_> - 3 7 18 8 -1. - <_> - 3 7 9 4 2. - <_> - 12 11 9 4 2. - 0 - -0.0502246208488941 - 0.7084565758705139 - -0.2558549940586090 - <_> - - <_> - - - - <_> - 23 0 8 4 -1. - <_> - 23 0 4 4 2. - 0 - 0.0140728699043393 - 0.0630331784486771 - -0.0598385296761990 - <_> - - <_> - - - - <_> - 5 0 8 4 -1. - <_> - 9 0 4 4 2. - 0 - 0.0178040098398924 - 0.1941471993923187 - -0.5844426751136780 - <_> - - <_> - - - - <_> - 6 10 24 3 -1. - <_> - 14 11 8 1 9. - 0 - 0.1304673999547958 - -0.1151698008179665 - 0.8504030108451843 - <_> - - <_> - - - - <_> - 7 5 5 6 -1. - <_> - 5 7 5 2 3. - 1 - 0.0175068005919456 - -0.2071896940469742 - 0.4643828868865967 - <_> - - <_> - - - - <_> - 5 16 26 2 -1. - <_> - 18 16 13 1 2. - <_> - 5 17 13 1 2. - 0 - -7.4240020476281643e-003 - -0.6656516790390015 - 0.1403498947620392 - <_> - - <_> - - - - <_> - 0 7 24 4 -1. - <_> - 0 7 12 2 2. - <_> - 12 9 12 2 2. - 0 - -0.0345711186528206 - 0.6511297821998596 - -0.1490191966295242 - <_> - - <_> - - - - <_> - 23 14 13 4 -1. - <_> - 23 15 13 2 2. - 0 - 4.2270249687135220e-003 - -1.6027219826355577e-003 - 0.3895606100559235 - <_> - - <_> - - - - <_> - 2 10 18 8 -1. - <_> - 2 10 9 4 2. - <_> - 11 14 9 4 2. - 0 - -0.0506620407104492 - 0.5803576707839966 - -0.1514143943786621 - <_> - - <_> - - - - <_> - 15 10 6 4 -1. - <_> - 15 11 6 2 2. - 0 - -7.0715770125389099e-003 - 0.5300896763801575 - -0.1449830979108810 - <_> - - <_> - - - - <_> - 0 6 24 2 -1. - <_> - 0 6 12 1 2. - <_> - 12 7 12 1 2. - 0 - -0.0118635101243854 - 0.6729742288589478 - -0.1106354966759682 - <_> - - <_> - - - - <_> - 17 0 18 18 -1. - <_> - 17 9 18 9 2. - 0 - -0.0605200305581093 - -0.3316448926925659 - 0.2119556069374085 - <_> - - <_> - - - - <_> - 1 0 11 2 -1. - <_> - 1 1 11 1 2. - 0 - -7.7340779826045036e-003 - -0.6941440105438232 - 0.0727053135633469 - <_> - - <_> - - - - <_> - 15 6 8 12 -1. - <_> - 19 6 4 6 2. - <_> - 15 12 4 6 2. - 0 - -0.0324861407279968 - -0.5185081958770752 - 0.0592126213014126 - <_> - - <_> - - - - <_> - 2 1 32 12 -1. - <_> - 2 1 16 6 2. - <_> - 18 7 16 6 2. - 0 - 0.0832797065377235 - 0.1206794008612633 - -0.5309563279151917 - <_> - - <_> - - - - <_> - 29 10 7 8 -1. - <_> - 29 12 7 4 2. - 0 - 7.8782817581668496e-004 - -0.2737655937671661 - 0.2716251909732819 - <_> - - <_> - - - - <_> - 12 2 8 10 -1. - <_> - 12 2 4 5 2. - <_> - 16 7 4 5 2. - 0 - -0.0175391808152199 - -0.5690230131149292 - 0.1228737011551857 - <_> - - <_> - - - - <_> - 15 12 6 4 -1. - <_> - 15 13 6 2 2. - 0 - -5.8226347900927067e-003 - 0.4386585950851440 - -0.1493742018938065 - <_> - - <_> - - - - <_> - 0 12 8 6 -1. - <_> - 0 14 8 2 3. - 0 - -0.0100575601682067 - -0.6616886258125305 - 0.1144542992115021 - <_> - - <_> - - - - <_> - 10 9 26 8 -1. - <_> - 23 9 13 4 2. - <_> - 10 13 13 4 2. - 0 - 0.0903454273939133 - -0.0666652470827103 - 0.2870647907257080 - <_> - - <_> - - - - <_> - 7 8 22 10 -1. - <_> - 7 8 11 5 2. - <_> - 18 13 11 5 2. - 0 - -0.0675872936844826 - -0.5363761186599731 - 0.1123751997947693 - <_> - - <_> - - - - <_> - 14 9 8 3 -1. - <_> - 14 10 8 1 3. - 0 - -8.1747528165578842e-003 - 0.4434241950511932 - -0.1297765970230103 - <_> - - <_> - - - - <_> - 11 3 4 9 -1. - <_> - 11 6 4 3 3. - 0 - -0.0115505503490567 - 0.3273158073425293 - -0.1700761020183563 - <_> - - <_> - - - - <_> - 29 14 2 2 -1. - <_> - 29 14 2 1 2. - 1 - -1.7406829283572733e-004 - 0.1327867954969406 - -0.1081293970346451 - <_> - - <_> - - - - <_> - 14 13 8 3 -1. - <_> - 14 14 8 1 3. - 0 - 4.6040047891438007e-003 - -0.1226582005620003 - 0.4412580132484436 - -1.3266400098800659 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_> - 11 3 7 8 -1. - <_> - 9 5 7 4 2. - 1 - -0.0469432808458805 - 0.6094344258308411 - -0.2637800872325897 - <_> - - <_> - - - - <_> - 28 13 1 4 -1. - <_> - 28 13 1 2 2. - 1 - -1.6899159527383745e-004 - 0.1665875017642975 - -0.1254196017980576 - <_> - - <_> - - - - <_> - 8 13 4 1 -1. - <_> - 8 13 2 1 2. - 1 - 2.7983370237052441e-003 - 0.1905744969844818 - -0.6568077206611633 - <_> - - <_> - - - - <_> - 16 9 4 3 -1. - <_> - 16 10 4 1 3. - 0 - 4.0413960814476013e-003 - -0.1731746941804886 - 0.6362075209617615 - <_> - - <_> - - - - <_> - 13 8 10 4 -1. - <_> - 13 9 10 2 2. - 0 - -8.6033362895250320e-003 - 0.6025841832160950 - -0.2316936999559403 - <_> - - <_> - - - - <_> - 14 8 8 3 -1. - <_> - 14 9 8 1 3. - 0 - 8.8247945532202721e-003 - -0.1756583005189896 - 0.7104166746139526 - <_> - - <_> - - - - <_> - 2 10 6 2 -1. - <_> - 4 12 2 2 3. - 1 - -9.2786159366369247e-003 - -0.6890857219696045 - 0.1789650022983551 - <_> - - <_> - - - - <_> - 16 10 6 3 -1. - <_> - 16 11 6 1 3. - 0 - 6.0826768167316914e-003 - -0.1706372052431107 - 0.5375748276710510 - <_> - - <_> - - - - <_> - 8 5 8 13 -1. - <_> - 12 5 4 13 2. - 0 - -0.0390073694288731 - -0.6834635734558106 - 0.1441708058118820 - <_> - - <_> - - - - <_> - 0 0 36 8 -1. - <_> - 18 0 18 4 2. - <_> - 0 4 18 4 2. - 0 - -0.0703379511833191 - -0.6508566737174988 - 0.1008547991514206 - <_> - - <_> - - - - <_> - 1 5 8 12 -1. - <_> - 1 5 4 6 2. - <_> - 5 11 4 6 2. - 0 - 0.0331666991114616 - -0.1932571977376938 - 0.4779865145683289 - <_> - - <_> - - - - <_> - 18 8 18 10 -1. - <_> - 27 8 9 5 2. - <_> - 18 13 9 5 2. - 0 - 0.0752889066934586 - -0.0695677325129509 - 0.4125064909458160 - <_> - - <_> - - - - <_> - 0 8 18 10 -1. - <_> - 0 8 9 5 2. - <_> - 9 13 9 5 2. - 0 - -0.0705017298460007 - 0.7157300710678101 - -0.1022270023822784 - <_> - - <_> - - - - <_> - 11 5 14 3 -1. - <_> - 11 6 14 1 3. - 0 - 0.0122494902461767 - -0.1061242967844009 - 0.6295958161354065 - <_> - - <_> - - - - <_> - 10 6 16 6 -1. - <_> - 10 8 16 2 3. - 0 - 0.0706446766853333 - -0.0973746329545975 - 0.6762204170227051 - <_> - - <_> - - - - <_> - 7 2 24 16 -1. - <_> - 19 2 12 8 2. - <_> - 7 10 12 8 2. - 0 - 0.1624888032674789 - 0.0527133606374264 - -0.8494657278060913 - <_> - - <_> - - - - <_> - 0 1 18 15 -1. - <_> - 6 6 6 5 9. - 0 - 0.1380825042724609 - 0.1406479030847549 - -0.4764721095561981 - -1.4497200250625610 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 5 16 6 -1. - <_> - 12 5 8 6 2. - 0 - -0.0418823398649693 - -0.8077452778816223 - 0.2640967071056366 - <_> - - <_> - - - - <_> - 29 0 6 11 -1. - <_> - 31 2 2 11 3. - 1 - -0.0536229908466339 - 0.5580704212188721 - -0.2498968988656998 - <_> - - <_> - - - - <_> - 2 8 9 1 -1. - <_> - 5 11 3 1 3. - 1 - 9.3709938228130341e-003 - 0.2650170028209686 - -0.5990694761276245 - <_> - - <_> - - - - <_> - 10 6 17 3 -1. - <_> - 10 7 17 1 3. - 0 - 0.0139097301289439 - -0.1470918059349060 - 0.7354667186737061 - <_> - - <_> - - - - <_> - 18 6 6 2 -1. - <_> - 20 8 2 2 3. - 1 - 0.0190035700798035 - -0.1887511014938355 - 0.7487422227859497 - <_> - - <_> - - - - <_> - 13 11 12 3 -1. - <_> - 13 12 12 1 3. - 0 - 5.9199850074946880e-003 - -0.1599563956260681 - 0.5673577785491943 - <_> - - <_> - - - - <_> - 2 3 8 8 -1. - <_> - 2 3 4 4 2. - <_> - 6 7 4 4 2. - 0 - -0.0247051399201155 - 0.7556992173194885 - -0.1235088035464287 - <_> - - <_> - - - - <_> - 18 12 18 4 -1. - <_> - 27 12 9 2 2. - <_> - 18 14 9 2 2. - 0 - 0.0160583592951298 - -0.1282460987567902 - 0.5129454731941223 - <_> - - <_> - - - - <_> - 11 5 11 3 -1. - <_> - 11 6 11 1 3. - 0 - 8.8288700208067894e-003 - -0.1686663925647736 - 0.6152185201644898 - <_> - - <_> - - - - <_> - 14 7 14 4 -1. - <_> - 14 8 14 2 2. - 0 - 0.0175563395023346 - -0.1090169996023178 - 0.5803176164627075 - <_> - - <_> - - - - <_> - 9 8 16 10 -1. - <_> - 9 8 8 5 2. - <_> - 17 13 8 5 2. - 0 - 0.0421881191432476 - 0.1486624032258987 - -0.6922233104705811 - <_> - - <_> - - - - <_> - 18 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - 5.0687207840383053e-004 - 0.0315808691084385 - -0.3700995147228241 - <_> - - <_> - - - - <_> - 13 10 5 3 -1. - <_> - 13 11 5 1 3. - 0 - 2.7651190757751465e-003 - -0.2133754044771195 - 0.4704301059246063 - <_> - - <_> - - - - <_> - 18 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - -1.2231520377099514e-003 - -0.7818967103958130 - 0.0209542606025934 - <_> - - <_> - - - - <_> - 7 5 8 3 -1. - <_> - 6 6 8 1 3. - 1 - 8.5432287305593491e-003 - -0.1455352008342743 - 0.6789504289627075 - <_> - - <_> - - - - <_> - 18 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - -2.0657219283748418e-004 - 0.2437624037265778 - -0.0675588026642799 - <_> - - <_> - - - - <_> - 10 5 5 3 -1. - <_> - 10 6 5 1 3. - 0 - -4.6798270195722580e-003 - 0.6684169769287109 - -0.1388788074254990 - <_> - - <_> - - - - <_> - 2 5 34 10 -1. - <_> - 19 5 17 5 2. - <_> - 2 10 17 5 2. - 0 - 0.1220175996422768 - 0.1102816015481949 - -0.7530742287635803 - <_> - - <_> - - - - <_> - 3 2 12 3 -1. - <_> - 6 5 6 3 2. - 1 - 0.0204043406993151 - 0.1645383983850479 - -0.5223162174224854 - <_> - - <_> - - - - <_> - 35 6 1 6 -1. - <_> - 35 8 1 2 3. - 0 - 8.0343370791524649e-004 - -0.1301285028457642 - 0.2635852992534638 - -1.4622910022735596 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 6 13 6 -1. - <_> - 10 8 13 2 3. - 0 - 0.0727917104959488 - -0.1372790038585663 - 0.8291574716567993 - <_> - - <_> - - - - <_> - 15 5 6 4 -1. - <_> - 15 6 6 2 2. - 0 - 7.5939209200441837e-003 - -0.1678012013435364 - 0.5683972239494324 - <_> - - <_> - - - - <_> - 5 2 11 4 -1. - <_> - 4 3 11 2 2. - 1 - -0.0235623903572559 - 0.6500560045242310 - -0.1424535065889359 - <_> - - <_> - - - - <_> - 26 6 10 6 -1. - <_> - 31 6 5 3 2. - <_> - 26 9 5 3 2. - 0 - 0.0173929501324892 - -0.1529144942760468 - 0.3425354063510895 - <_> - - <_> - - - - <_> - 10 7 11 8 -1. - <_> - 10 9 11 4 2. - 0 - 0.0718258023262024 - -0.0991311371326447 - 0.8279678821563721 - <_> - - <_> - - - - <_> - 28 2 4 9 -1. - <_> - 29 3 2 9 2. - 1 - 0.0136738000437617 - -0.0417872704565525 - 0.5078148245811462 - <_> - - <_> - - - - <_> - 8 2 10 4 -1. - <_> - 7 3 10 2 2. - 1 - -0.0285859592258930 - 0.7011532187461853 - -0.1314471065998077 - <_> - - <_> - - - - <_> - 31 0 5 2 -1. - <_> - 31 1 5 1 2. - 0 - -4.1845720261335373e-004 - 0.2845467031002045 - -0.3123202919960022 - <_> - - <_> - - - - <_> - 10 6 16 12 -1. - <_> - 10 10 16 4 3. - 0 - -0.0520956814289093 - 0.4181294143199921 - -0.1699313074350357 - <_> - - <_> - - - - <_> - 18 4 4 3 -1. - <_> - 18 5 4 1 3. - 0 - 3.2256329432129860e-003 - -0.0904662087559700 - 0.3008623123168945 - <_> - - <_> - - - - <_> - 11 10 6 6 -1. - <_> - 11 12 6 2 3. - 0 - 0.0347716398537159 - -0.0842167884111404 - 0.7801663875579834 - <_> - - <_> - - - - <_> - 35 8 1 10 -1. - <_> - 35 13 1 5 2. - 0 - -1.3356630224734545e-003 - 0.3316453099250794 - -0.1696092039346695 - <_> - - <_> - - - - <_> - 0 10 36 8 -1. - <_> - 18 10 18 8 2. - 0 - 0.2510198056697846 - -0.1392046958208084 - 0.6633893251419067 - <_> - - <_> - - - - <_> - 16 7 6 8 -1. - <_> - 19 7 3 4 2. - <_> - 16 11 3 4 2. - 0 - -9.9689997732639313e-003 - -0.3713817000389099 - 0.1290012001991272 - <_> - - <_> - - - - <_> - 7 6 8 4 -1. - <_> - 7 6 4 4 2. - 1 - 0.0143037298694253 - 0.1572919934988022 - -0.5093821287155151 - <_> - - <_> - - - - <_> - 21 11 4 3 -1. - <_> - 21 12 4 1 3. - 0 - -7.0856059901416302e-003 - 0.4656791090965271 - -0.0662708207964897 - <_> - - <_> - - - - <_> - 0 9 1 8 -1. - <_> - 0 13 1 4 2. - 0 - -4.6260809176601470e-004 - 0.2933731079101563 - -0.2333986014127731 - <_> - - <_> - - - - <_> - 27 7 6 4 -1. - <_> - 29 9 2 4 3. - 1 - -0.0344354808330536 - 0.7002474069595337 - -0.1013351008296013 - <_> - - <_> - - - - <_> - 10 14 8 4 -1. - <_> - 12 14 4 4 2. - 0 - -7.2570890188217163e-003 - -0.5628641247749329 - 0.1314862072467804 - <_> - - <_> - - - - <_> - 18 17 2 1 -1. - <_> - 18 17 1 1 2. - 0 - 4.8352940939366817e-004 - 0.0262274891138077 - -0.2605080008506775 - <_> - - <_> - - - - <_> - 10 4 11 4 -1. - <_> - 10 5 11 2 2. - 0 - -0.0129999397322536 - 0.5311700105667114 - -0.1202305033802986 - <_> - - <_> - - - - <_> - 17 12 2 4 -1. - <_> - 17 13 2 2 2. - 0 - -1.0009329998865724e-003 - 0.3964129984378815 - -0.1599515974521637 - <_> - - <_> - - - - <_> - 13 4 5 3 -1. - <_> - 13 5 5 1 3. - 0 - 4.1314200498163700e-003 - -0.1492992043495178 - 0.4295912086963654 - <_> - - <_> - - - - <_> - 13 12 11 2 -1. - <_> - 13 13 11 1 2. - 0 - 8.7364455685019493e-003 - -0.1127102002501488 - 0.4945647120475769 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - 2.6352869463153183e-004 - -0.1212491989135742 - 0.4943937957286835 - <_> - - <_> - - - - <_> - 27 7 6 4 -1. - <_> - 29 9 2 4 3. - 1 - -0.0538859590888023 - 0.7035598754882813 - -0.0132305501028895 - <_> - - <_> - - - - <_> - 4 7 6 6 -1. - <_> - 4 9 6 2 3. - 0 - 4.2885672301054001e-003 - -0.1754055023193359 - 0.3567946851253510 - <_> - - <_> - - - - <_> - 30 6 4 5 -1. - <_> - 31 7 2 5 2. - 1 - 7.9539399594068527e-003 - -0.0998840034008026 - 0.3137167096138001 - -1.3885619640350342 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 5 20 7 -1. - <_> - 13 5 10 7 2. - 0 - 0.0567523688077927 - -0.3257648050785065 - 0.3737593889236450 - <_> - - <_> - - - - <_> - 30 2 3 12 -1. - <_> - 30 8 3 6 2. - 0 - 7.0906039327383041e-003 - -0.1391862928867340 - 0.1503984034061432 - <_> - - <_> - - - - <_> - 4 2 12 4 -1. - <_> - 4 2 12 2 2. - 1 - -0.0412988215684891 - 0.4702607989311218 - -0.1617936044931412 - <_> - - <_> - - - - <_> - 0 8 36 6 -1. - <_> - 12 10 12 2 9. - 0 - 0.4775018990039825 - -0.1006157994270325 - 0.7635074257850647 - <_> - - <_> - - - - <_> - 3 5 30 6 -1. - <_> - 13 7 10 2 9. - 0 - 0.4226649105548859 - -0.0351909101009369 - 0.8303126096725464 - <_> - - <_> - - - - <_> - 14 4 12 9 -1. - <_> - 18 4 4 9 3. - 0 - -0.0330318994820118 - -0.3750554919242859 - 0.0489026196300983 - <_> - - <_> - - - - <_> - 0 17 6 1 -1. - <_> - 3 17 3 1 2. - 0 - 1.1923770216526464e-004 - -0.2661466896533966 - 0.2234652042388916 - <_> - - <_> - - - - <_> - 34 0 1 2 -1. - <_> - 34 0 1 1 2. - 1 - 4.2101400904357433e-003 - 8.7575968354940414e-003 - -0.5938351750373840 - <_> - - <_> - - - - <_> - 2 0 2 1 -1. - <_> - 2 0 1 1 2. - 1 - 3.3337279455736279e-004 - -0.2122765928506851 - 0.2473503947257996 - <_> - - <_> - - - - <_> - 31 3 3 8 -1. - <_> - 32 4 1 8 3. - 1 - 0.0117938900366426 - -0.0689979493618011 - 0.5898082852363586 - <_> - - <_> - - - - <_> - 5 6 26 12 -1. - <_> - 5 6 13 6 2. - <_> - 18 12 13 6 2. - 0 - -0.1143207997083664 - -0.7733368277549744 - 0.0628622919321060 - <_> - - <_> - - - - <_> - 14 4 12 9 -1. - <_> - 18 4 4 9 3. - 0 - 0.0824010074138641 - 0.0168252792209387 - -0.6170011758804321 - <_> - - <_> - - - - <_> - 13 7 10 10 -1. - <_> - 13 7 5 5 2. - <_> - 18 12 5 5 2. - 0 - 0.0181261505931616 - 0.0995334684848785 - -0.3830915987491608 - <_> - - <_> - - - - <_> - 30 5 4 6 -1. - <_> - 31 6 2 6 2. - 1 - 8.9282449334859848e-003 - -0.1010973975062370 - 0.2948305010795593 - <_> - - <_> - - - - <_> - 6 5 6 4 -1. - <_> - 5 6 6 2 2. - 1 - -0.0174371004104614 - 0.4614987075328827 - -0.1050636023283005 - <_> - - <_> - - - - <_> - 29 5 4 5 -1. - <_> - 30 6 2 5 2. - 1 - -0.0112803103402257 - 0.4561164975166321 - -0.1013116016983986 - <_> - - <_> - - - - <_> - 7 5 5 4 -1. - <_> - 6 6 5 2 2. - 1 - 7.0190089754760265e-003 - -0.1368626952171326 - 0.4173265993595123 - <_> - - <_> - - - - <_> - 0 0 36 1 -1. - <_> - 12 0 12 1 3. - 0 - -3.2439709175378084e-003 - 0.2321648001670837 - -0.1791536957025528 - <_> - - <_> - - - - <_> - 6 3 24 6 -1. - <_> - 14 5 8 2 9. - 0 - 0.3561589121818543 - -0.0486268103122711 - 0.9537345767021179 - <_> - - <_> - - - - <_> - 15 12 6 3 -1. - <_> - 15 13 6 1 3. - 0 - 3.8440749049186707e-003 - -0.1028828024864197 - 0.3671778142452240 - <_> - - <_> - - - - <_> - 11 1 9 17 -1. - <_> - 14 1 3 17 3. - 0 - 0.0609500296413898 - 0.0561417415738106 - -0.6458569765090942 - <_> - - <_> - - - - <_> - 18 1 18 10 -1. - <_> - 18 1 9 10 2. - 0 - 0.1814922988414764 - 0.0308063905686140 - -0.4604896008968353 - <_> - - <_> - - - - <_> - 0 1 18 10 -1. - <_> - 9 1 9 10 2. - 0 - -0.0923592597246170 - -0.4524821043014526 - 0.0881522372364998 - <_> - - <_> - - - - <_> - 30 7 4 5 -1. - <_> - 31 8 2 5 2. - 1 - 7.6072998344898224e-003 - -0.0971223264932632 - 0.2155224978923798 - <_> - - <_> - - - - <_> - 0 10 1 3 -1. - <_> - 0 11 1 1 3. - 0 - -4.6946710790507495e-004 - -0.4089371860027313 - 0.0800421908497810 - <_> - - <_> - - - - <_> - 33 16 2 2 -1. - <_> - 34 16 1 1 2. - <_> - 33 17 1 1 2. - 0 - 1.0301820293534547e-004 - -0.1153035983443260 - 0.2795535027980804 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - 2.7936851256527007e-004 - -0.1139610037207604 - 0.2931660115718842 - <_> - - <_> - - - - <_> - 0 8 36 3 -1. - <_> - 12 9 12 1 9. - 0 - 0.2467595934867859 - -0.0385956317186356 - 0.8264998197555542 - <_> - - <_> - - - - <_> - 14 7 8 4 -1. - <_> - 14 8 8 2 2. - 0 - -8.4232958033680916e-003 - 0.3299596905708313 - -0.1164536997675896 - <_> - - <_> - - - - <_> - 17 9 5 3 -1. - <_> - 17 10 5 1 3. - 0 - -4.2311567813158035e-003 - 0.2714211940765381 - -0.1081148013472557 - <_> - - <_> - - - - <_> - 4 0 1 2 -1. - <_> - 4 0 1 1 2. - 1 - 1.5653009759262204e-003 - 0.0782537832856178 - -0.5209766030311585 - <_> - - <_> - - - - <_> - 31 0 3 2 -1. - <_> - 31 0 3 1 2. - 1 - -5.0341398455202579e-003 - 0.2948805987834930 - -0.0469605103135109 - <_> - - <_> - - - - <_> - 5 0 2 3 -1. - <_> - 5 0 1 3 2. - 1 - 1.4283140189945698e-003 - -0.1379459947347641 - 0.2432370930910111 - <_> - - <_> - - - - <_> - 0 13 36 5 -1. - <_> - 0 13 18 5 2. - 0 - 0.1903136968612671 - -0.0520935095846653 - 0.6870803236961365 - <_> - - <_> - - - - <_> - 6 3 4 3 -1. - <_> - 5 4 4 1 3. - 1 - 8.1368777900934219e-003 - -0.0533115193247795 - 0.5827271938323975 - <_> - - <_> - - - - <_> - 28 7 6 3 -1. - <_> - 30 9 2 3 3. - 1 - -0.0467283688485622 - 0.3552536070346832 - -0.0178062599152327 - <_> - - <_> - - - - <_> - 8 7 3 6 -1. - <_> - 6 9 3 2 3. - 1 - 0.0143171697854996 - -0.1262664049863815 - 0.2696101069450378 - <_> - - <_> - - - - <_> - 14 5 18 10 -1. - <_> - 23 5 9 5 2. - <_> - 14 10 9 5 2. - 0 - -0.0961097329854965 - 0.3411748111248016 - -0.0392176099121571 - <_> - - <_> - - - - <_> - 4 5 18 10 -1. - <_> - 4 5 9 5 2. - <_> - 13 10 9 5 2. - 0 - 0.0748788118362427 - -0.0648199021816254 - 0.5671138167381287 - <_> - - <_> - - - - <_> - 32 17 3 1 -1. - <_> - 33 17 1 1 3. - 0 - -5.1972299843328074e-005 - 0.2874209880828857 - -0.1642889976501465 - <_> - - <_> - - - - <_> - 1 17 3 1 -1. - <_> - 2 17 1 1 3. - 0 - -2.0099039829801768e-004 - 0.2659021019935608 - -0.1299035996198654 - <_> - - <_> - - - - <_> - 5 0 26 2 -1. - <_> - 18 0 13 1 2. - <_> - 5 1 13 1 2. - 0 - 0.0155834900215268 - 0.0363226197659969 - -0.8874331712722778 - <_> - - <_> - - - - <_> - 0 3 27 9 -1. - <_> - 9 6 9 3 9. - 0 - 6.7313341423869133e-003 - 0.1628185957670212 - -0.1971620023250580 - <_> - - <_> - - - - <_> - 13 0 18 12 -1. - <_> - 13 6 18 6 2. - 0 - -0.0452514104545116 - -0.2031500935554504 - 0.1573408991098404 - <_> - - <_> - - - - <_> - 0 17 4 1 -1. - <_> - 1 17 2 1 2. - 0 - 2.8729529003612697e-004 - -0.1244959011673927 - 0.2565822899341583 - <_> - - <_> - - - - <_> - 29 13 1 3 -1. - <_> - 28 14 1 1 3. - 1 - -2.1028579212725163e-003 - -0.5088729262351990 - 0.0340831801295280 - <_> - - <_> - - - - <_> - 0 12 8 6 -1. - <_> - 0 14 8 2 3. - 0 - -3.9328099228441715e-003 - -0.3393375873565674 - 0.0930555686354637 - <_> - - <_> - - - - <_> - 23 7 3 3 -1. - <_> - 24 7 1 3 3. - 0 - 3.1205590348690748e-003 - -0.0227940604090691 - 0.2379353046417236 - <_> - - <_> - - - - <_> - 11 1 12 6 -1. - <_> - 11 3 12 2 3. - 0 - 0.0780286788940430 - -0.0445036217570305 - 0.6776394248008728 - <_> - - <_> - - - - <_> - 5 10 26 8 -1. - <_> - 18 10 13 4 2. - <_> - 5 14 13 4 2. - 0 - 0.0424769781529903 - 0.0925821065902710 - -0.3536301851272583 - <_> - - <_> - - - - <_> - 11 12 9 6 -1. - <_> - 14 12 3 6 3. - 0 - -0.0257683005183935 - -0.9091991186141968 - 0.0266928393393755 - <_> - - <_> - - - - <_> - 14 12 12 3 -1. - <_> - 18 13 4 1 9. - 0 - 0.0614446699619293 - -0.0249543990939856 - 0.7212049961090088 - <_> - - <_> - - - - <_> - 10 12 12 3 -1. - <_> - 14 13 4 1 9. - 0 - 3.5776318982243538e-003 - 0.1772899031639099 - -0.1972344964742661 - -1.2766569852828979 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_> - 4 6 27 6 -1. - <_> - 13 8 9 2 9. - 0 - 0.2858596146106720 - -0.1539604961872101 - 0.6624677181243897 - <_> - - <_> - - - - <_> - 17 9 5 4 -1. - <_> - 17 10 5 2 2. - 0 - 9.2271259054541588e-003 - -0.1074633970856667 - 0.4311806857585907 - <_> - - <_> - - - - <_> - 0 0 16 2 -1. - <_> - 0 0 8 1 2. - <_> - 8 1 8 1 2. - 0 - 2.2924109362065792e-003 - -0.1983013004064560 - 0.3842228949069977 - <_> - - <_> - - - - <_> - 22 0 8 8 -1. - <_> - 26 0 4 4 2. - <_> - 22 4 4 4 2. - 0 - 0.0140045098960400 - -0.1924948990345001 - 0.3442491888999939 - <_> - - <_> - - - - <_> - 1 0 32 12 -1. - <_> - 1 0 16 6 2. - <_> - 17 6 16 6 2. - 0 - 0.0960232019424438 - 0.1299059987068176 - -0.6065304875373840 - <_> - - <_> - - - - <_> - 28 7 6 10 -1. - <_> - 31 7 3 5 2. - <_> - 28 12 3 5 2. - 0 - 6.1803720891475677e-003 - -0.1904646009206772 - 0.1891862004995346 - <_> - - <_> - - - - <_> - 2 7 6 10 -1. - <_> - 2 7 3 5 2. - <_> - 5 12 3 5 2. - 0 - 8.2172285765409470e-003 - -0.2518267929553986 - 0.2664459049701691 - <_> - - <_> - - - - <_> - 20 10 3 3 -1. - <_> - 20 11 3 1 3. - 0 - -1.4542760327458382e-003 - 0.2710269093513489 - -0.1204148977994919 - <_> - - <_> - - - - <_> - 13 10 3 3 -1. - <_> - 13 11 3 1 3. - 0 - 3.0185449868440628e-003 - -0.1353860944509506 - 0.4733603000640869 - <_> - - <_> - - - - <_> - 17 16 6 2 -1. - <_> - 19 16 2 2 3. - 0 - -3.4214779734611511e-003 - -0.5049971938133240 - 0.1042480990290642 - <_> - - <_> - - - - <_> - 13 11 7 3 -1. - <_> - 13 12 7 1 3. - 0 - 9.5980763435363770e-003 - -0.1034729033708572 - 0.5837283730506897 - <_> - - <_> - - - - <_> - 25 13 3 2 -1. - <_> - 25 13 3 1 2. - 1 - 4.1849957779049873e-003 - 0.0588967092335224 - -0.4623228907585144 - <_> - - <_> - - - - <_> - 13 10 4 4 -1. - <_> - 13 11 4 2 2. - 0 - -4.6107750385999680e-003 - 0.3783561885356903 - -0.1259022951126099 - <_> - - <_> - - - - <_> - 17 16 18 2 -1. - <_> - 26 16 9 1 2. - <_> - 17 17 9 1 2. - 0 - 2.8978679329156876e-003 - -0.1369954943656921 - 0.2595148086547852 - <_> - - <_> - - - - <_> - 9 13 4 1 -1. - <_> - 9 13 2 1 2. - 1 - 4.2606070637702942e-003 - 0.0882339626550674 - -0.6390284895896912 - <_> - - <_> - - - - <_> - 34 1 2 1 -1. - <_> - 34 1 1 1 2. - 1 - -4.2996238917112350e-003 - -0.7953972816467285 - 0.0170935597270727 - <_> - - <_> - - - - <_> - 5 4 24 6 -1. - <_> - 13 6 8 2 9. - 0 - 0.3542361855506897 - -0.0593450404703617 - 0.8557919859886169 - <_> - - <_> - - - - <_> - 33 16 3 2 -1. - <_> - 33 17 3 1 2. - 0 - -3.0245838570408523e-004 - 0.3147065043449402 - -0.1448609977960587 - <_> - - <_> - - - - <_> - 0 17 36 1 -1. - <_> - 18 17 18 1 2. - 0 - 0.0271694902330637 - -0.1249295026063919 - 0.4280903935432434 - <_> - - <_> - - - - <_> - 34 1 2 1 -1. - <_> - 34 1 1 1 2. - 1 - 3.4571529831737280e-003 - 0.0397093296051025 - -0.7089157104492188 - <_> - - <_> - - - - <_> - 2 1 1 2 -1. - <_> - 2 1 1 1 2. - 1 - 2.1742798853665590e-003 - 0.0658724531531334 - -0.6949694156646729 - <_> - - <_> - - - - <_> - 22 0 8 10 -1. - <_> - 24 2 4 10 2. - 1 - 0.0252638105303049 - -0.1169395968317986 - 0.1904976963996887 - <_> - - <_> - - - - <_> - 12 4 8 12 -1. - <_> - 12 4 4 6 2. - <_> - 16 10 4 6 2. - 0 - -0.0247209891676903 - -0.4965795874595642 - 0.1017538011074066 - <_> - - <_> - - - - <_> - 26 6 6 6 -1. - <_> - 29 6 3 3 2. - <_> - 26 9 3 3 2. - 0 - 0.0103848800063133 - -0.1148673966526985 - 0.3374153077602387 - <_> - - <_> - - - - <_> - 5 6 4 6 -1. - <_> - 5 6 2 3 2. - <_> - 7 9 2 3 2. - 0 - 5.0045028328895569e-003 - -0.1096355020999908 - 0.3925519883632660 - <_> - - <_> - - - - <_> - 29 5 2 4 -1. - <_> - 29 5 1 4 2. - 1 - 7.1279620751738548e-003 - -0.0649081915616989 - 0.4042040109634399 - <_> - - <_> - - - - <_> - 7 4 18 3 -1. - <_> - 7 5 18 1 3. - 0 - 0.0197004191577435 - -0.0793758779764175 - 0.5308234095573425 - <_> - - <_> - - - - <_> - 29 13 2 3 -1. - <_> - 28 14 2 1 3. - 1 - 4.2097331024706364e-003 - 0.0407970212399960 - -0.6044098734855652 - <_> - - <_> - - - - <_> - 9 5 3 3 -1. - <_> - 8 6 3 1 3. - 1 - 4.4459570199251175e-003 - -0.1038623005151749 - 0.4093598127365112 - <_> - - <_> - - - - <_> - 7 16 22 2 -1. - <_> - 18 16 11 1 2. - <_> - 7 17 11 1 2. - 0 - -5.9610428288578987e-003 - -0.5291494727134705 - 0.0805394500494003 - <_> - - <_> - - - - <_> - 0 2 1 3 -1. - <_> - 0 3 1 1 3. - 0 - 5.7519221445545554e-004 - 0.0638044029474258 - -0.5863661766052246 - <_> - - <_> - - - - <_> - 16 3 20 6 -1. - <_> - 26 3 10 3 2. - <_> - 16 6 10 3 2. - 0 - 0.0605248510837555 - -0.0337128005921841 - 0.2631115913391113 - <_> - - <_> - - - - <_> - 10 5 8 6 -1. - <_> - 12 5 4 6 2. - 0 - -0.0103538101539016 - -0.4792002141475678 - 0.0800439566373825 - <_> - - <_> - - - - <_> - 1 8 34 8 -1. - <_> - 18 8 17 4 2. - <_> - 1 12 17 4 2. - 0 - -0.0227775108069181 - -0.3116275072097778 - 0.1189998015761375 - <_> - - <_> - - - - <_> - 14 9 8 8 -1. - <_> - 14 9 4 4 2. - <_> - 18 13 4 4 2. - 0 - -0.0224688798189163 - -0.6608346104621887 - 0.0522344894707203 - <_> - - <_> - - - - <_> - 35 0 1 3 -1. - <_> - 35 1 1 1 3. - 0 - 5.8432162040844560e-004 - 0.0546303391456604 - -0.4639565944671631 - <_> - - <_> - - - - <_> - 15 8 3 5 -1. - <_> - 16 8 1 5 3. - 0 - -3.6177870351821184e-003 - 0.6744704246520996 - -0.0587895289063454 - <_> - - <_> - - - - <_> - 19 0 10 1 -1. - <_> - 19 0 5 1 2. - 1 - 0.0300888605415821 - 0.0331335216760635 - -0.4646137058734894 - -1.4061349630355835 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_> - 9 3 9 6 -1. - <_> - 7 5 9 2 3. - 1 - -0.0726009905338287 - 0.6390709280967712 - -0.1512455046176910 - <_> - - <_> - - - - <_> - 6 6 24 6 -1. - <_> - 14 8 8 2 9. - 0 - 0.3471255898475647 - -0.0790246576070786 - 0.7955042123794556 - <_> - - <_> - - - - <_> - 4 8 27 6 -1. - <_> - 13 10 9 2 9. - 0 - 0.3429723083972931 - -0.1230095997452736 - 0.6572809815406799 - <_> - - <_> - - - - <_> - 5 4 27 6 -1. - <_> - 14 6 9 2 9. - 0 - 0.3561694025993347 - -0.0537334382534027 - 0.8285108208656311 - <_> - - <_> - - - - <_> - 5 6 5 6 -1. - <_> - 5 8 5 2 3. - 0 - 6.0840700753033161e-003 - -0.1284721046686173 - 0.3382267951965332 - <_> - - <_> - - - - <_> - 35 0 1 2 -1. - <_> - 35 1 1 1 2. - 0 - -1.6281309945043176e-004 - 0.3035660982131958 - -0.2518202960491180 - <_> - - <_> - - - - <_> - 4 3 10 3 -1. - <_> - 3 4 10 1 3. - 1 - 0.0112819001078606 - -0.0839143469929695 - 0.4347592890262604 - <_> - - <_> - - - - <_> - 29 5 2 4 -1. - <_> - 29 5 1 4 2. - 1 - 7.4357059784233570e-003 - -0.0670880377292633 - 0.3722797930240631 - <_> - - <_> - - - - <_> - 3 0 28 16 -1. - <_> - 3 0 14 8 2. - <_> - 17 8 14 8 2. - 0 - -0.0905762165784836 - -0.5831961035728455 - 0.0801467597484589 - <_> - - <_> - - - - <_> - 31 0 4 2 -1. - <_> - 31 0 2 2 2. - 1 - 8.8247694075107574e-003 - 0.1290193051099777 - -0.4760313034057617 - <_> - - <_> - - - - <_> - 4 9 3 9 -1. - <_> - 4 12 3 3 3. - 0 - -2.6147770695388317e-003 - -0.4000220894813538 - 0.1124631017446518 - <_> - - <_> - - - - <_> - 32 16 4 2 -1. - <_> - 32 17 4 1 2. - 0 - -2.5541300419718027e-004 - 0.3238615989685059 - -0.2333187013864517 - <_> - - <_> - - - - <_> - 17 0 1 10 -1. - <_> - 17 0 1 5 2. - 1 - 0.0265476293861866 - 0.0723338723182678 - -0.5837839841842651 - <_> - - <_> - - - - <_> - 17 4 14 8 -1. - <_> - 17 4 7 8 2. - 0 - -0.0513831414282322 - -0.2244618982076645 - 0.0409497395157814 - <_> - - <_> - - - - <_> - 6 0 11 4 -1. - <_> - 6 2 11 2 2. - 0 - 3.3701129723340273e-003 - -0.1671708971261978 - 0.2552697062492371 - <_> - - <_> - - - - <_> - 35 0 1 2 -1. - <_> - 35 1 1 1 2. - 0 - -2.2581920493394136e-003 - -0.9207922816276550 - 3.4371060319244862e-003 - <_> - - <_> - - - - <_> - 0 0 1 2 -1. - <_> - 0 1 1 1 2. - 0 - -1.3282749569043517e-004 - 0.1857322007417679 - -0.2249896973371506 - <_> - - <_> - - - - <_> - 33 0 2 1 -1. - <_> - 33 0 1 1 2. - 1 - -2.8032590635120869e-003 - -0.8589754104614258 - 0.0463845208287239 - <_> - - <_> - - - - <_> - 3 0 1 2 -1. - <_> - 3 0 1 1 2. - 1 - 1.3141379458829761e-003 - 0.0796270668506622 - -0.4610596895217896 - <_> - - <_> - - - - <_> - 0 17 36 1 -1. - <_> - 9 17 18 1 2. - 0 - 0.0638845413923264 - -0.0534401498734951 - 0.8104500174522400 - <_> - - <_> - - - - <_> - 7 13 3 1 -1. - <_> - 8 14 1 1 3. - 1 - -1.9811019301414490e-003 - -0.6382514834403992 - 0.0766435563564301 - <_> - - <_> - - - - <_> - 17 4 14 8 -1. - <_> - 17 4 7 8 2. - 0 - 0.0133598595857620 - -0.0950375497341156 - 0.0625333487987518 - <_> - - <_> - - - - <_> - 0 16 4 2 -1. - <_> - 0 17 4 1 2. - 0 - -1.0935300088021904e-004 - 0.1747954040765762 - -0.2287603020668030 - <_> - - <_> - - - - <_> - 13 12 10 3 -1. - <_> - 13 13 10 1 3. - 0 - 0.0119106303900480 - -0.0770419836044312 - 0.5045837759971619 - <_> - - <_> - - - - <_> - 0 12 36 6 -1. - <_> - 18 12 18 6 2. - 0 - 0.2395170032978058 - -0.0651228874921799 - 0.5042074918746948 - <_> - - <_> - - - - <_> - 5 3 27 6 -1. - <_> - 14 5 9 2 9. - 0 - 0.3983140885829926 - -0.0299998205155134 - 0.7968547940254211 - <_> - - <_> - - - - <_> - 9 5 5 3 -1. - <_> - 8 6 5 1 3. - 1 - 6.1875800602138042e-003 - -0.0853391736745834 - 0.3945176899433136 - <_> - - <_> - - - - <_> - 12 7 12 4 -1. - <_> - 15 7 6 4 2. - 0 - -9.4047123566269875e-003 - -0.4344133138656616 - 0.0826191008090973 - <_> - - <_> - - - - <_> - 13 5 8 4 -1. - <_> - 15 5 4 4 2. - 0 - 0.0117366304621100 - 0.0694831609725952 - -0.4870649874210358 - <_> - - <_> - - - - <_> - 16 14 6 4 -1. - <_> - 16 14 3 4 2. - 0 - -0.0151767702773213 - -0.5854120850563049 - 0.0328795611858368 - <_> - - <_> - - - - <_> - 14 10 5 3 -1. - <_> - 14 11 5 1 3. - 0 - 3.0744259711354971e-003 - -0.1314608007669449 - 0.2546674013137817 - <_> - - <_> - - - - <_> - 25 3 6 4 -1. - <_> - 25 4 6 2 2. - 0 - 2.9391339048743248e-003 - -0.1086023002862930 - 0.2783496081829071 - <_> - - <_> - - - - <_> - 3 6 6 8 -1. - <_> - 3 8 6 4 2. - 0 - 2.1510310471057892e-003 - -0.1575057953596115 - 0.2087786048650742 - <_> - - <_> - - - - <_> - 27 4 5 6 -1. - <_> - 27 6 5 2 3. - 0 - 5.3775361739099026e-003 - -0.1320703029632568 - 0.3767293989658356 - <_> - - <_> - - - - <_> - 4 1 6 9 -1. - <_> - 4 4 6 3 3. - 0 - 0.0221741795539856 - -0.0901802927255630 - 0.4157527089118958 - <_> - - <_> - - - - <_> - 21 9 2 4 -1. - <_> - 21 10 2 2 2. - 0 - -1.9948610570281744e-003 - 0.2560858130455017 - -0.0990849286317825 - <_> - - <_> - - - - <_> - 1 10 34 4 -1. - <_> - 1 10 17 2 2. - <_> - 18 12 17 2 2. - 0 - 0.0315575599670410 - 0.0741889998316765 - -0.5494022965431213 - <_> - - <_> - - - - <_> - 34 15 2 3 -1. - <_> - 34 16 2 1 3. - 0 - -4.3111158447572961e-005 - 0.3032462894916534 - -0.1778181046247482 - <_> - - <_> - - - - <_> - 3 0 2 2 -1. - <_> - 3 0 2 1 2. - 1 - -3.2675920519977808e-003 - -0.6721243262290955 - 0.0591883286833763 - <_> - - <_> - - - - <_> - 33 0 1 2 -1. - <_> - 33 0 1 1 2. - 1 - 4.2293380829505622e-004 - -0.1103409975767136 - 0.1257317960262299 - -1.3384460210800171 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_> - 8 0 10 8 -1. - <_> - 6 2 10 4 2. - 1 - -0.0425620190799236 - 0.3334665894508362 - -0.2986198067665100 - <_> - - <_> - - - - <_> - 3 6 30 6 -1. - <_> - 13 8 10 2 9. - 0 - 0.4182719886302948 - -0.0951386988162994 - 0.7570992112159729 - <_> - - <_> - - - - <_> - 13 7 10 4 -1. - <_> - 13 8 10 2 2. - 0 - -0.0202563796192408 - 0.4778389036655426 - -0.1459210067987442 - <_> - - <_> - - - - <_> - 16 5 6 12 -1. - <_> - 19 5 3 6 2. - <_> - 16 11 3 6 2. - 0 - -0.0189483091235161 - -0.3872750103473663 - 0.0524798892438412 - <_> - - <_> - - - - <_> - 10 1 4 6 -1. - <_> - 8 3 4 2 3. - 1 - -0.0405505895614624 - 0.5464624762535095 - -0.0813998579978943 - <_> - - <_> - - - - <_> - 2 7 33 6 -1. - <_> - 13 9 11 2 9. - 0 - 0.5187274813652039 - -0.0279305391013622 - 0.8458098173141480 - <_> - - <_> - - - - <_> - 3 6 30 3 -1. - <_> - 13 7 10 1 9. - 0 - 0.2071361988782883 - -0.0588508695363998 - 0.7960156202316284 - <_> - - <_> - - - - <_> - 15 11 6 3 -1. - <_> - 15 12 6 1 3. - 0 - 8.1972572952508926e-003 - -0.0999663695693016 - 0.4983156025409699 - <_> - - <_> - - - - <_> - 14 5 6 12 -1. - <_> - 14 5 3 6 2. - <_> - 17 11 3 6 2. - 0 - 0.0174453891813755 - 0.0680409595370293 - -0.5669981837272644 - <_> - - <_> - - - - <_> - 5 12 26 6 -1. - <_> - 18 12 13 3 2. - <_> - 5 15 13 3 2. - 0 - -0.0563102811574936 - -0.6862804293632507 - 0.0742225572466850 - <_> - - <_> - - - - <_> - 4 12 27 3 -1. - <_> - 13 13 9 1 9. - 0 - 0.1809556037187576 - -0.0528081282973289 - 0.8448318243026733 - <_> - - <_> - - - - <_> - 16 11 4 3 -1. - <_> - 16 12 4 1 3. - 0 - -2.3450690787285566e-003 - 0.2839694023132324 - -0.1112336963415146 - <_> - - <_> - - - - <_> - 5 12 4 2 -1. - <_> - 6 13 2 2 2. - 1 - 3.8937770295888186e-003 - 0.0654993131756783 - -0.5792096257209778 - <_> - - <_> - - - - <_> - 34 17 2 1 -1. - <_> - 34 17 1 1 2. - 0 - 3.9383721741614863e-005 - -0.3093047142028809 - 0.4223710894584656 - <_> - - <_> - - - - <_> - 16 0 1 12 -1. - <_> - 16 0 1 6 2. - 1 - 0.0338991582393646 - 0.0307075399905443 - -0.7229980826377869 - <_> - - <_> - - - - <_> - 2 17 34 1 -1. - <_> - 2 17 17 1 2. - 0 - -0.0336443893611431 - 0.4266444146633148 - -0.0720057785511017 - <_> - - <_> - - - - <_> - 5 3 18 4 -1. - <_> - 5 4 18 2 2. - 0 - 0.0388077609241009 - -0.0417135208845139 - 0.6599556803703308 - <_> - - <_> - - - - <_> - 34 17 2 1 -1. - <_> - 34 17 1 1 2. - 0 - -3.9149548683781177e-005 - 0.4933550059795380 - -0.2426010966300964 - <_> - - <_> - - - - <_> - 0 0 2 2 -1. - <_> - 0 1 2 1 2. - 0 - -2.7580570895224810e-004 - 0.1791010946035385 - -0.2192519009113312 - <_> - - <_> - - - - <_> - 15 5 16 3 -1. - <_> - 15 6 16 1 3. - 0 - 0.0126366596668959 - -0.0712336227297783 - 0.2534261941909790 - <_> - - <_> - - - - <_> - 13 9 3 3 -1. - <_> - 13 10 3 1 3. - 0 - -3.3681739587336779e-003 - 0.3310086131095886 - -0.1020777970552445 - <_> - - <_> - - - - <_> - 20 4 8 14 -1. - <_> - 22 4 4 14 2. - 0 - -0.0411845296621323 - -0.4787198901176453 - 0.0274448096752167 - <_> - - <_> - - - - <_> - 7 5 20 6 -1. - <_> - 12 5 10 6 2. - 0 - 0.0172852799296379 - -0.2373382002115250 - 0.1541430056095123 - <_> - - <_> - - - - <_> - 26 3 6 6 -1. - <_> - 28 5 2 6 3. - 1 - -0.0583733208477497 - 0.3635525107383728 - -0.0629119277000427 - <_> - - <_> - - - - <_> - 10 3 6 6 -1. - <_> - 8 5 6 2 3. - 1 - 0.0252293199300766 - -0.0943458229303360 - 0.4322442114353180 - <_> - - <_> - - - - <_> - 34 0 2 3 -1. - <_> - 34 0 1 3 2. - 1 - 4.7925519756972790e-003 - 0.0486642718315125 - -0.4704689085483551 - <_> - - <_> - - - - <_> - 0 16 2 2 -1. - <_> - 0 17 2 1 2. - 0 - -1.3549529830925167e-004 - 0.1936188042163849 - -0.1933847069740295 - <_> - - <_> - - - - <_> - 30 6 4 8 -1. - <_> - 31 7 2 8 2. - 1 - -0.0179694108664989 - 0.2900086045265198 - -0.0545452795922756 - <_> - - <_> - - - - <_> - 6 6 7 4 -1. - <_> - 5 7 7 2 2. - 1 - 0.0111410403624177 - -0.1080225035548210 - 0.3332796096801758 - <_> - - <_> - - - - <_> - 20 4 8 14 -1. - <_> - 22 4 4 14 2. - 0 - 0.0397595092654228 - 0.0192408692091703 - -0.4889996051788330 - <_> - - <_> - - - - <_> - 8 4 8 14 -1. - <_> - 10 4 4 14 2. - 0 - -0.0226527098566294 - -0.5036928057670593 - 0.0807737335562706 - <_> - - <_> - - - - <_> - 17 17 6 1 -1. - <_> - 19 17 2 1 3. - 0 - 1.0915650054812431e-003 - 0.0655540525913239 - -0.2444387972354889 - <_> - - <_> - - - - <_> - 0 0 20 6 -1. - <_> - 10 0 10 6 2. - 0 - 0.0687547475099564 - 0.0891968086361885 - -0.3565390110015869 - <_> - - <_> - - - - <_> - 8 0 22 18 -1. - <_> - 8 0 11 18 2. - 0 - -0.3307105898857117 - 0.4649569988250732 - -0.0581836998462677 - <_> - - <_> - - - - <_> - 13 2 8 12 -1. - <_> - 13 2 4 6 2. - <_> - 17 8 4 6 2. - 0 - -0.0193072296679020 - -0.4415718019008637 - 0.0830501168966293 - <_> - - <_> - - - - <_> - 11 10 14 8 -1. - <_> - 18 10 7 4 2. - <_> - 11 14 7 4 2. - 0 - 0.0348087586462498 - 0.0534805804491043 - -0.5037739872932434 - <_> - - <_> - - - - <_> - 1 16 2 2 -1. - <_> - 1 16 1 1 2. - <_> - 2 17 1 1 2. - 0 - -3.8908151327632368e-004 - 0.3427126109600067 - -0.0899231806397438 - <_> - - <_> - - - - <_> - 34 0 2 1 -1. - <_> - 34 0 1 1 2. - 1 - -2.1421869751065969e-003 - -0.6064280271530151 - 0.0555892400443554 - <_> - - <_> - - - - <_> - 6 3 24 4 -1. - <_> - 12 3 12 4 2. - 0 - 0.1101581007242203 - -0.0547747202217579 - 0.6878091096878052 - <_> - - <_> - - - - <_> - 19 1 2 3 -1. - <_> - 19 2 2 1 3. - 0 - 3.0875208904035389e-004 - -0.0558342188596725 - 0.0931682363152504 - <_> - - <_> - - - - <_> - 2 0 1 2 -1. - <_> - 2 0 1 1 2. - 1 - 2.1960400044918060e-003 - 0.0539557486772537 - -0.6050305962562561 - <_> - - <_> - - - - <_> - 15 3 6 8 -1. - <_> - 18 3 3 4 2. - <_> - 15 7 3 4 2. - 0 - -0.0126062501221895 - -0.4686402976512909 - 0.0599438697099686 - <_> - - <_> - - - - <_> - 14 5 4 2 -1. - <_> - 14 6 4 1 2. - 0 - -2.7497899718582630e-003 - 0.2894253134727478 - -0.1129785031080246 - <_> - - <_> - - - - <_> - 3 7 30 9 -1. - <_> - 13 10 10 3 9. - 0 - 0.6096264123916626 - -0.0478859916329384 - 0.5946549177169800 - <_> - - <_> - - - - <_> - 9 8 12 9 -1. - <_> - 12 8 6 9 2. - 0 - 0.0450232513248920 - 0.0638310685753822 - -0.5295680165290833 - -1.2722699642181396 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_> - 10 8 16 5 -1. - <_> - 14 8 8 5 2. - 0 - 0.0159072801470757 - -0.3819232881069183 - 0.2941176891326904 - <_> - - <_> - - - - <_> - 30 1 4 10 -1. - <_> - 31 2 2 10 2. - 1 - -0.0304830092936754 - 0.6401454806327820 - -0.1133823990821838 - <_> - - <_> - - - - <_> - 13 0 10 8 -1. - <_> - 11 2 10 4 2. - 1 - 0.0258412398397923 - -0.1765469014644623 - 0.2556340098381043 - <_> - - <_> - - - - <_> - 32 2 2 14 -1. - <_> - 32 2 1 14 2. - 1 - 0.0121606197208166 - -0.0494619905948639 - 0.3473398983478546 - <_> - - <_> - - - - <_> - 4 2 14 2 -1. - <_> - 4 2 14 1 2. - 1 - -0.0159101597964764 - 0.4796676933765411 - -0.1300950944423676 - <_> - - <_> - - - - <_> - 30 14 6 4 -1. - <_> - 30 14 3 4 2. - 0 - 3.5282061435282230e-004 - -0.3418492972850800 - 0.2309112995862961 - <_> - - <_> - - - - <_> - 11 13 1 4 -1. - <_> - 11 15 1 2 2. - 0 - 6.7633582511916757e-004 - -0.1543250977993012 - 0.2668730020523071 - <_> - - <_> - - - - <_> - 11 0 14 18 -1. - <_> - 18 0 7 9 2. - <_> - 11 9 7 9 2. - 0 - -0.0599361397325993 - -0.4880258142948151 - 0.0933274477720261 - <_> - - <_> - - - - <_> - 0 1 20 9 -1. - <_> - 10 1 10 9 2. - 0 - -0.1134240999817848 - -0.6577144265174866 - 0.0591668188571930 - <_> - - <_> - - - - <_> - 21 3 8 3 -1. - <_> - 23 3 4 3 2. - 0 - -4.3361280113458633e-003 - -0.1593652069568634 - 0.0502370409667492 - <_> - - <_> - - - - <_> - 13 9 2 4 -1. - <_> - 13 10 2 2 2. - 0 - -1.8627740209922194e-003 - 0.3073025941848755 - -0.1254066973924637 - <_> - - <_> - - - - <_> - 14 9 11 2 -1. - <_> - 14 10 11 1 2. - 0 - 0.0126530099660158 - -0.1004493013024330 - 0.3749617934226990 - <_> - - <_> - - - - <_> - 0 2 36 9 -1. - <_> - 12 5 12 3 9. - 0 - 0.6911857724189758 - -0.0471464097499847 - 0.8321244120597839 - <_> - - <_> - - - - <_> - 34 12 2 6 -1. - <_> - 34 15 2 3 2. - 0 - -2.6093868655152619e-004 - 0.3198773860931397 - -0.2718330919742584 - <_> - - <_> - - - - <_> - 11 4 14 6 -1. - <_> - 11 6 14 2 3. - 0 - -0.0763450562953949 - 0.4309130012989044 - -0.0908882692456245 - <_> - - <_> - - - - <_> - 31 0 4 1 -1. - <_> - 31 0 2 1 2. - 0 - 2.8098300099372864e-003 - 0.0587311200797558 - -0.6199675202369690 - <_> - - <_> - - - - <_> - 1 0 4 1 -1. - <_> - 3 0 2 1 2. - 0 - -1.3322039740160108e-004 - 0.2000005990266800 - -0.2012010961771011 - <_> - - <_> - - - - <_> - 19 14 6 4 -1. - <_> - 21 14 2 4 3. - 0 - -0.0137176299467683 - -0.7309545278549194 - 0.0271785296499729 - <_> - - <_> - - - - <_> - 11 14 6 4 -1. - <_> - 13 14 2 4 3. - 0 - -6.2303808517754078e-003 - -0.5478098988533020 - 0.0687499493360519 - <_> - - <_> - - - - <_> - 0 14 36 1 -1. - <_> - 9 14 18 1 2. - 0 - 0.0499227195978165 - -0.0473043099045753 - 0.8242310285568237 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 0 2 1 2. - 1 - -1.9126719562336802e-003 - -0.5394017100334168 - 0.0774475932121277 - <_> - - <_> - - - - <_> - 26 3 5 3 -1. - <_> - 26 4 5 1 3. - 0 - 1.1384560493752360e-003 - -0.0965376868844032 - 0.1548569053411484 - <_> - - <_> - - - - <_> - 16 8 1 3 -1. - <_> - 15 9 1 1 3. - 1 - -2.4732090532779694e-003 - 0.3559078872203827 - -0.0931698307394981 - <_> - - <_> - - - - <_> - 21 11 2 3 -1. - <_> - 21 12 2 1 3. - 0 - -7.1464257780462503e-004 - 0.1452019065618515 - -0.0741942077875137 - <_> - - <_> - - - - <_> - 9 5 6 4 -1. - <_> - 8 6 6 2 2. - 1 - -0.0204371493309736 - 0.4416376948356628 - -0.0809424370527267 - <_> - - <_> - - - - <_> - 31 0 2 2 -1. - <_> - 31 0 1 2 2. - 1 - -4.0483791381120682e-003 - -0.5999277830123901 - 0.0330253802239895 - <_> - - <_> - - - - <_> - 6 4 3 9 -1. - <_> - 6 7 3 3 3. - 0 - 0.0111480504274368 - -0.1135832965373993 - 0.3264499902725220 - <_> - - <_> - - - - <_> - 19 0 11 2 -1. - <_> - 19 0 11 1 2. - 1 - 9.8842009902000427e-003 - 0.0554044805467129 - -0.3273097872734070 - <_> - - <_> - - - - <_> - 5 0 2 2 -1. - <_> - 5 0 2 1 2. - 1 - 3.1296359375119209e-003 - 0.0774086564779282 - -0.4595307111740112 - <_> - - <_> - - - - <_> - 22 0 14 4 -1. - <_> - 29 0 7 2 2. - <_> - 22 2 7 2 2. - 0 - 2.9721839819103479e-003 - -0.1291726976633072 - 0.1552311033010483 - <_> - - <_> - - - - <_> - 15 1 4 13 -1. - <_> - 15 1 2 13 2. - 1 - 0.0205544792115688 - 0.0876004695892334 - -0.4577418863773346 - <_> - - <_> - - - - <_> - 21 3 8 4 -1. - <_> - 23 3 4 4 2. - 0 - -0.0230272803455591 - 0.3548808991909027 - -0.0205669198185205 - <_> - - <_> - - - - <_> - 7 3 8 4 -1. - <_> - 9 3 4 4 2. - 0 - -8.3903772756457329e-003 - -0.4324072897434235 - 0.0920679792761803 - <_> - - <_> - - - - <_> - 32 14 2 2 -1. - <_> - 33 14 1 1 2. - <_> - 32 15 1 1 2. - 0 - -1.1431539896875620e-003 - 0.3959133923053742 - -0.0231928899884224 - <_> - - <_> - - - - <_> - 2 14 2 2 -1. - <_> - 2 14 1 1 2. - <_> - 3 15 1 1 2. - 0 - -4.9133709399029613e-004 - 0.4274964034557343 - -0.0855242162942886 - <_> - - <_> - - - - <_> - 35 5 1 12 -1. - <_> - 35 9 1 4 3. - 0 - 5.1292928401380777e-004 - -0.1619673967361450 - 0.1961497068405151 - <_> - - <_> - - - - <_> - 0 7 1 9 -1. - <_> - 0 10 1 3 3. - 0 - -5.8478871360421181e-003 - -0.5911636948585510 - 0.0624482408165932 - <_> - - <_> - - - - <_> - 12 2 15 6 -1. - <_> - 12 4 15 2 3. - 0 - -0.0941330492496490 - 0.4770160913467407 - -0.0567101612687111 - <_> - - <_> - - - - <_> - 0 17 2 1 -1. - <_> - 1 17 1 1 2. - 0 - 1.0079269850393757e-004 - -0.1625709980726242 - 0.2140229046344757 - <_> - - <_> - - - - <_> - 34 17 2 1 -1. - <_> - 34 17 1 1 2. - 0 - 3.2930231100181118e-005 - -0.1859605014324188 - 0.1964769065380096 - <_> - - <_> - - - - <_> - 0 17 2 1 -1. - <_> - 1 17 1 1 2. - 0 - -1.1743210052372888e-004 - 0.3182134926319122 - -0.1328738033771515 - <_> - - <_> - - - - <_> - 11 0 16 10 -1. - <_> - 15 0 8 10 2. - 0 - 0.1275181025266647 - 0.0301400795578957 - -0.7411035895347595 - <_> - - <_> - - - - <_> - 5 10 24 8 -1. - <_> - 5 10 12 4 2. - <_> - 17 14 12 4 2. - 0 - 0.0803262963891029 - 0.0415550395846367 - -0.8263683915138245 - <_> - - <_> - - - - <_> - 27 4 3 3 -1. - <_> - 27 5 3 1 3. - 0 - 1.6904190415516496e-003 - -0.1029061973094940 - 0.2972418069839478 - -1.3022350072860718 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_> - 6 6 14 12 -1. - <_> - 6 6 7 6 2. - <_> - 13 12 7 6 2. - 0 - -0.0461227893829346 - 0.4425258934497833 - -0.2991319894790649 - <_> - - <_> - - - - <_> - 6 5 24 6 -1. - <_> - 14 7 8 2 9. - 0 - 0.3672331869602203 - -0.0630117505788803 - 0.7712538242340088 - <_> - - <_> - - - - <_> - 12 6 3 4 -1. - <_> - 12 7 3 2 2. - 0 - -3.0962929595261812e-003 - 0.3514241874217987 - -0.1730643957853317 - <_> - - <_> - - - - <_> - 30 7 6 10 -1. - <_> - 33 7 3 5 2. - <_> - 30 12 3 5 2. - 0 - 9.2647131532430649e-003 - -0.1607280969619751 - 0.1853290945291519 - <_> - - <_> - - - - <_> - 3 12 6 6 -1. - <_> - 3 12 3 3 2. - <_> - 6 15 3 3 2. - 0 - 3.1748649198561907e-003 - -0.1968899965286255 - 0.2409728020429611 - <_> - - <_> - - - - <_> - 20 0 13 2 -1. - <_> - 20 0 13 1 2. - 1 - 8.0439839512109756e-003 - 0.0898629724979401 - -0.3655225932598114 - <_> - - <_> - - - - <_> - 6 10 24 6 -1. - <_> - 14 12 8 2 9. - 0 - 0.3275249004364014 - -0.0568796806037426 - 0.7749336957931519 - <_> - - <_> - - - - <_> - 15 4 8 8 -1. - <_> - 19 4 4 4 2. - <_> - 15 8 4 4 2. - 0 - -0.0190744306892157 - -0.2895380854606628 - 0.0622916705906391 - <_> - - <_> - - - - <_> - 13 4 8 8 -1. - <_> - 13 4 4 4 2. - <_> - 17 8 4 4 2. - 0 - -0.0205017495900393 - -0.6262530088424683 - 0.0682769715785980 - <_> - - <_> - - - - <_> - 34 16 2 2 -1. - <_> - 34 16 1 2 2. - 0 - 5.3187010053079575e-005 - -0.2514955997467041 - 0.2613196074962616 - <_> - - <_> - - - - <_> - 12 6 3 3 -1. - <_> - 12 7 3 1 3. - 0 - 3.3275580499321222e-003 - -0.1199077963829041 - 0.3651930093765259 - <_> - - <_> - - - - <_> - 21 7 4 4 -1. - <_> - 21 8 4 2 2. - 0 - 5.8408430777490139e-003 - -0.0827485173940659 - 0.2365082055330277 - <_> - - <_> - - - - <_> - 2 8 30 4 -1. - <_> - 2 8 15 2 2. - <_> - 17 10 15 2 2. - 0 - -0.0464623309671879 - -0.6928564906120300 - 0.0781976729631424 - <_> - - <_> - - - - <_> - 27 4 3 4 -1. - <_> - 27 5 3 2 2. - 0 - -3.7785700988024473e-003 - 0.3437257111072540 - -0.1027545034885407 - <_> - - <_> - - - - <_> - 5 4 3 4 -1. - <_> - 5 5 3 2 2. - 0 - 1.6655459767207503e-003 - -0.1160527989268303 - 0.3716202974319458 - <_> - - <_> - - - - <_> - 34 16 2 2 -1. - <_> - 34 16 1 2 2. - 0 - -5.7107670727418736e-005 - 0.4589366912841797 - -0.2123643010854721 - <_> - - <_> - - - - <_> - 0 16 34 2 -1. - <_> - 0 16 17 1 2. - <_> - 17 17 17 1 2. - 0 - -9.0066380798816681e-003 - -0.5953341126441956 - 0.0808764025568962 - <_> - - <_> - - - - <_> - 12 5 15 12 -1. - <_> - 12 9 15 4 3. - 0 - -0.1378971040248871 - 0.3957067131996155 - -0.0898853763937950 - <_> - - <_> - - - - <_> - 0 8 36 6 -1. - <_> - 12 10 12 2 9. - 0 - 0.5759987235069275 - -0.0538108199834824 - 0.8170394897460938 - <_> - - <_> - - - - <_> - 25 4 6 2 -1. - <_> - 25 5 6 1 2. - 0 - -2.3918158840388060e-003 - 0.1393374055624008 - -0.0421559289097786 - <_> - - <_> - - - - <_> - 0 17 2 1 -1. - <_> - 1 17 1 1 2. - 0 - 2.4896071408875287e-004 - -0.1485866010189056 - 0.2626332938671112 - <_> - - <_> - - - - <_> - 16 0 9 9 -1. - <_> - 19 0 3 9 3. - 0 - 0.0330624915659428 - 0.0306599102914333 - -0.3231860101222992 - <_> - - <_> - - - - <_> - 11 0 9 9 -1. - <_> - 14 0 3 9 3. - 0 - 0.0443218797445297 - 0.0478538200259209 - -0.7813590168952942 - <_> - - <_> - - - - <_> - 20 5 16 5 -1. - <_> - 24 5 8 5 2. - 0 - -0.0187181904911995 - 0.1201262027025223 - -0.1121146976947784 - <_> - - <_> - - - - <_> - 0 3 16 9 -1. - <_> - 4 3 8 9 2. - 0 - 0.0923093706369400 - 0.0424630790948868 - -0.8009700179100037 - <_> - - <_> - - - - <_> - 7 6 26 12 -1. - <_> - 20 6 13 6 2. - <_> - 7 12 13 6 2. - 0 - 0.0906654372811317 - -0.0223045293241739 - 0.1284797936677933 - <_> - - <_> - - - - <_> - 5 6 24 12 -1. - <_> - 5 6 12 6 2. - <_> - 17 12 12 6 2. - 0 - -0.0582949295639992 - -0.3936854004859924 - 0.0954821407794952 - <_> - - <_> - - - - <_> - 17 4 3 12 -1. - <_> - 18 4 1 12 3. - 0 - 4.6649780124425888e-003 - -0.0656419470906258 - 0.3640717864036560 - <_> - - <_> - - - - <_> - 1 11 6 1 -1. - <_> - 3 13 2 1 3. - 1 - 5.2480432204902172e-003 - 0.0687657818198204 - -0.5050830245018005 - <_> - - <_> - - - - <_> - 21 12 14 2 -1. - <_> - 28 12 7 1 2. - <_> - 21 13 7 1 2. - 0 - 2.5315659586340189e-003 - -0.0933471694588661 - 0.1649612933397293 - <_> - - <_> - - - - <_> - 1 13 2 3 -1. - <_> - 2 13 1 3 2. - 0 - 2.4391160695813596e-004 - -0.1888543963432312 - 0.1695670038461685 - <_> - - <_> - - - - <_> - 26 8 3 2 -1. - <_> - 27 9 1 2 3. - 1 - -6.3037211075425148e-003 - 0.3826352953910828 - -0.0590420998632908 - <_> - - <_> - - - - <_> - 10 8 2 3 -1. - <_> - 9 9 2 1 3. - 1 - 2.2754059173166752e-003 - -0.1224882006645203 - 0.2828365862369537 - <_> - - <_> - - - - <_> - 12 0 18 18 -1. - <_> - 12 0 9 18 2. - 0 - -0.2769486904144287 - 0.4851497113704681 - -0.0404825396835804 - <_> - - <_> - - - - <_> - 8 9 3 3 -1. - <_> - 7 10 3 1 3. - 1 - 5.8051547966897488e-003 - -0.0835584178566933 - 0.4215149879455566 - <_> - - <_> - - - - <_> - 28 5 5 6 -1. - <_> - 28 7 5 2 3. - 0 - 2.4654529988765717e-003 - -0.1281685978174210 - 0.2077662944793701 - <_> - - <_> - - - - <_> - 9 1 9 8 -1. - <_> - 9 1 9 4 2. - 1 - 7.8863510861992836e-003 - -0.1719754040241242 - 0.2079081982374191 - <_> - - <_> - - - - <_> - 0 0 36 2 -1. - <_> - 18 0 18 1 2. - <_> - 0 1 18 1 2. - 0 - -0.0118171302601695 - -0.5788066983222961 - 0.0589591413736343 - <_> - - <_> - - - - <_> - 5 0 26 6 -1. - <_> - 5 0 13 3 2. - <_> - 18 3 13 3 2. - 0 - -0.0641399174928665 - -0.6368926167488098 - 0.0417975001037121 - <_> - - <_> - - - - <_> - 28 3 3 3 -1. - <_> - 28 4 3 1 3. - 0 - -1.2179970508441329e-003 - 0.2356870025396347 - -0.0805152580142021 - <_> - - <_> - - - - <_> - 5 3 5 3 -1. - <_> - 5 4 5 1 3. - 0 - 2.8652620967477560e-003 - -0.0931371971964836 - 0.3902595043182373 - <_> - - <_> - - - - <_> - 14 12 8 2 -1. - <_> - 16 12 4 2 2. - 0 - -5.7746102102100849e-003 - -0.5753986835479736 - 0.0596776902675629 - <_> - - <_> - - - - <_> - 13 0 9 14 -1. - <_> - 16 0 3 14 3. - 0 - 0.0653770864009857 - 0.0341660715639591 - -0.7425342202186585 - <_> - - <_> - - - - <_> - 23 0 10 1 -1. - <_> - 23 0 5 1 2. - 1 - 0.0162657108157873 - 0.0536542609333992 - -0.2365860939025879 - <_> - - <_> - - - - <_> - 8 14 2 2 -1. - <_> - 8 14 1 2 2. - 1 - 2.2717609535902739e-003 - 0.0533591099083424 - -0.5494074225425720 - <_> - - <_> - - - - <_> - 0 12 36 3 -1. - <_> - 12 13 12 1 9. - 0 - 0.2262602001428604 - -0.0420460589230061 - 0.7791252136230469 - <_> - - <_> - - - - <_> - 0 13 34 4 -1. - <_> - 0 13 17 2 2. - <_> - 17 15 17 2 2. - 0 - -0.0293774604797363 - -0.5947058796882629 - 0.0548178702592850 - -1.1933319568634033 - 18 - -1 - diff --git a/data/haarcascades/haarcascade_upperbody.xml b/data/haarcascades/haarcascade_upperbody.xml deleted file mode 100644 index 45eeac9..0000000 --- a/data/haarcascades/haarcascade_upperbody.xml +++ /dev/null @@ -1,29767 +0,0 @@ - - - - - 22 18 - - <_> - - - <_> - - <_> - - - - <_>5 5 12 6 -1. - <_>9 5 4 6 3. - 0 - -0.0136960297822952 - 0.4507646858692169 - -0.4217903017997742 - <_> - - <_> - - - - <_>7 13 10 4 -1. - <_>7 15 10 2 2. - 0 - 0.0124414497986436 - 0.1649325042963028 - -0.7479348778724670 - <_> - - <_> - - - - <_>3 14 9 4 -1. - <_>6 14 3 4 3. - 0 - -2.7094660326838493e-003 - 0.3100470006465912 - -0.3761714100837708 - <_> - - <_> - - - - <_>15 6 5 6 -1. - <_>15 6 5 3 2. - 1 - -0.1000801026821137 - 0.7618219852447510 - -0.0745569765567780 - <_> - - <_> - - - - <_>0 1 22 14 -1. - <_>11 1 11 14 2. - 0 - -0.2511411905288696 - -0.6415402889251709 - 0.1513922065496445 - <_> - - <_> - - - - <_>1 11 20 4 -1. - <_>6 11 10 4 2. - 0 - -0.1051065027713776 - 0.7145937085151672 - -0.1449857950210571 - <_> - - <_> - - - - <_>7 6 6 5 -1. - <_>7 6 3 5 2. - 1 - -0.0884480178356171 - 0.7577317953109741 - -0.0685868933796883 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>11 13 6 2 2. - <_>5 15 6 2 2. - 0 - 0.0108749102801085 - 0.1461060941219330 - -0.5426371097564697 - <_> - - <_> - - - - <_>7 12 8 6 -1. - <_>7 12 4 3 2. - <_>11 15 4 3 2. - 0 - 0.0126905702054501 - 0.1167458966374397 - -0.4964945912361145 - <_> - - <_> - - - - <_>20 0 2 18 -1. - <_>20 9 2 9 2. - 0 - -0.0321983993053436 - -0.3852939009666443 - 0.0984379723668098 - <_> - - <_> - - - - <_>8 6 6 12 -1. - <_>10 6 2 12 3. - 0 - -3.4077179152518511e-003 - 0.2520087063312531 - -0.2238254994153976 - <_> - - <_> - - - - <_>8 5 6 6 -1. - <_>10 5 2 6 3. - 0 - 0.0303243901580572 - -0.1053444966673851 - 0.6573541760444641 - <_> - - <_> - - - - <_>5 15 12 2 -1. - <_>5 16 12 1 2. - 0 - 4.1930507868528366e-003 - 0.1287239938974381 - -0.5316066145896912 - <_> - - <_> - - - - <_>20 0 2 18 -1. - <_>20 9 2 9 2. - 0 - 0.0805014073848724 - 0.0416966602206230 - -0.7212303280830383 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>0 9 2 9 2. - 0 - -0.0348220802843571 - -0.4975110888481140 - 0.1395993977785111 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>13 7 6 2 2. - 1 - 7.5519368983805180e-003 - -0.0921476781368256 - 0.1129434034228325 - <_> - - <_> - - - - <_>2 14 7 4 -1. - <_>2 16 7 2 2. - 0 - -0.0175721403211355 - -0.5678442716598511 - 0.0935728102922440 - <_> - - <_> - - - - <_>13 7 7 4 -1. - <_>13 7 7 2 2. - 1 - 5.2012042142450809e-003 - -0.0792380794882774 - 0.0618789605796337 - <_> - - <_> - - - - <_>4 6 4 12 -1. - <_>4 10 4 4 3. - 0 - -0.0307989194989204 - -0.5665851235389710 - 0.0952714905142784 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - -1.3465429656207561e-003 - 0.2401147037744522 - -0.2602663934230804 - -1.1264339685440063 - -1 - -1 - <_> - - - <_> - - <_> - - - - <_>6 8 6 10 -1. - <_>6 8 3 5 2. - <_>9 13 3 5 2. - 0 - 1.9108939450234175e-003 - -0.4624095857143402 - 0.3061217069625855 - <_> - - <_> - - - - <_>11 12 6 6 -1. - <_>11 15 6 3 2. - 0 - 9.5464065670967102e-003 - 0.0919561386108398 - -0.5350117087364197 - <_> - - <_> - - - - <_>1 15 8 3 -1. - <_>5 15 4 3 2. - 0 - -0.0434028096497059 - 0.5681784152984619 - -0.1128493025898933 - <_> - - <_> - - - - <_>6 9 10 4 -1. - <_>6 11 10 2 2. - 0 - 0.0503860302269459 - -0.0803169310092926 - 0.7352185845375061 - <_> - - <_> - - - - <_>11 5 8 3 -1. - <_>10 6 8 1 3. - 1 - -6.8480317713692784e-004 - 0.2579864859580994 - -0.2804940938949585 - <_> - - <_> - - - - <_>0 13 22 5 -1. - <_>0 13 11 5 2. - 0 - 0.1154804974794388 - 0.0920655727386475 - -0.7555689215660095 - <_> - - <_> - - - - <_>2 13 14 3 -1. - <_>9 13 7 3 2. - 0 - -1.9348369678482413e-003 - 0.2944079041481018 - -0.2410271018743515 - <_> - - <_> - - - - <_>11 5 2 10 -1. - <_>11 5 1 10 2. - 1 - -0.0435288101434708 - 0.4920296967029572 - -0.0396501012146473 - <_> - - <_> - - - - <_>11 5 10 2 -1. - <_>11 5 10 1 2. - 1 - -0.0302181504666805 - 0.7722792029380798 - -0.0867865234613419 - <_> - - <_> - - - - <_>14 0 8 8 -1. - <_>18 0 4 4 2. - <_>14 4 4 4 2. - 0 - 0.0245365891605616 - 0.0959448218345642 - -0.4864296913146973 - <_> - - <_> - - - - <_>5 0 3 10 -1. - <_>5 5 3 5 2. - 0 - 0.0239589903503656 - 0.1043784022331238 - -0.5121983885765076 - <_> - - <_> - - - - <_>16 0 3 12 -1. - <_>16 6 3 6 2. - 0 - -0.0253708306699991 - -0.3198154866695404 - 0.0914865732192993 - <_> - - <_> - - - - <_>3 3 12 4 -1. - <_>3 3 6 2 2. - <_>9 5 6 2 2. - 0 - -1.8606419907882810e-003 - 0.2278396934270859 - -0.2430797070264816 - <_> - - <_> - - - - <_>2 2 20 3 -1. - <_>7 2 10 3 2. - 0 - 0.0225508008152246 - 0.0692075565457344 - -0.3005428016185761 - <_> - - <_> - - - - <_>11 7 3 8 -1. - <_>11 7 3 4 2. - 1 - -0.0497520901262760 - -0.6107804775238037 - 0.0944727733731270 - <_> - - <_> - - - - <_>4 9 18 3 -1. - <_>4 10 18 1 3. - 0 - -0.0266023892909288 - 0.5958176851272583 - -0.0920460522174835 - <_> - - <_> - - - - <_>3 3 16 14 -1. - <_>3 3 8 7 2. - <_>11 10 8 7 2. - 0 - 0.1076000034809113 - 0.1027851998806000 - -0.5430337190628052 - <_> - - <_> - - - - <_>7 14 8 4 -1. - <_>7 14 4 4 2. - 0 - 0.0176906995475292 - 0.0660571381449699 - -0.6321390867233276 - <_> - - <_> - - - - <_>10 7 4 7 -1. - <_>10 7 2 7 2. - 1 - -0.0624099187552929 - 0.6872419714927673 - -0.0670705586671829 - <_> - - <_> - - - - <_>11 9 6 5 -1. - <_>11 9 3 5 2. - 0 - -1.9801619928330183e-003 - 0.0944115519523621 - -0.0878194868564606 - <_> - - <_> - - - - <_>0 6 22 4 -1. - <_>11 6 11 4 2. - 0 - 0.0636684298515320 - 0.1153173968195915 - -0.4812976121902466 - <_> - - <_> - - - - <_>14 6 6 12 -1. - <_>17 6 3 6 2. - <_>14 12 3 6 2. - 0 - -0.0307978298515081 - 0.3585476875305176 - -0.1259379982948303 - <_> - - <_> - - - - <_>4 14 6 4 -1. - <_>4 16 6 2 2. - 0 - -1.8353419727645814e-004 - 0.1478839963674545 - -0.2854681015014648 - <_> - - <_> - - - - <_>12 14 6 4 -1. - <_>12 16 6 2 2. - 0 - 1.7074620118364692e-003 - 0.0799296572804451 - -0.2523337006568909 - <_> - - <_> - - - - <_>4 14 6 4 -1. - <_>4 16 6 2 2. - 0 - -0.0153251998126507 - -0.5771185755729675 - 0.0989083275198936 - <_> - - <_> - - - - <_>10 6 6 6 -1. - <_>12 6 2 6 3. - 0 - 0.0413891896605492 - -0.0655507966876030 - 0.5736380219459534 - <_> - - <_> - - - - <_>9 0 11 3 -1. - <_>8 1 11 1 3. - 1 - -4.5577771379612386e-004 - 0.2259308993816376 - -0.1910558044910431 - <_> - - <_> - - - - <_>7 0 12 4 -1. - <_>13 0 6 2 2. - <_>7 2 6 2 2. - 0 - -0.0134556898847222 - -0.4023393094539642 - 0.0864776223897934 - <_> - - <_> - - - - <_>6 6 6 6 -1. - <_>8 6 2 6 3. - 0 - -0.0379783995449543 - 0.5525758862495422 - -0.0815410166978836 - <_> - - <_> - - - - <_>15 5 3 8 -1. - <_>15 9 3 4 2. - 0 - -0.0171975009143353 - -0.1836300939321518 - 0.0519998706877232 - <_> - - <_> - - - - <_>5 2 12 7 -1. - <_>9 2 4 7 3. - 0 - -1.2581580085679889e-003 - 0.1883004009723663 - -0.2572666108608246 - <_> - - <_> - - - - <_>5 5 12 4 -1. - <_>9 5 4 4 3. - 0 - 0.0677251070737839 - -0.0809564515948296 - 0.7180324196815491 - <_> - - <_> - - - - <_>7 3 4 7 -1. - <_>7 3 2 7 2. - 1 - 0.0354894287884235 - 0.1006807014346123 - -0.5377414226531982 - -1.1226719617843628 - 0 - -1 - <_> - - - <_> - - <_> - - - - <_>2 14 6 4 -1. - <_>5 14 3 4 2. - 0 - -5.3695798851549625e-003 - 0.2747949957847595 - -0.3417896032333374 - <_> - - <_> - - - - <_>11 4 6 6 -1. - <_>13 4 2 6 3. - 0 - 6.2695867381989956e-004 - -0.0986466333270073 - 0.1072842031717300 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 14 6 2 2. - <_>11 16 6 2 2. - 0 - -0.0164842698723078 - -0.6497290730476379 - 0.0960377529263496 - <_> - - <_> - - - - <_>3 12 16 6 -1. - <_>11 12 8 3 2. - <_>3 15 8 3 2. - 0 - -0.0221040993928909 - -0.4598448872566223 - 0.1630463004112244 - <_> - - <_> - - - - <_>1 11 20 4 -1. - <_>6 11 10 4 2. - 0 - 0.1190413981676102 - -0.0996003970503807 - 0.7372975945472717 - <_> - - <_> - - - - <_>9 0 10 10 -1. - <_>14 0 5 5 2. - <_>9 5 5 5 2. - 0 - -2.0222070161253214e-003 - 0.2102926969528198 - -0.2457713037729263 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 1 - 0.0675003528594971 - -0.1246778964996338 - 0.5765423178672791 - <_> - - <_> - - - - <_>1 7 20 11 -1. - <_>1 7 10 11 2. - 0 - -0.1965593993663788 - -0.6089174747467041 - 0.0996720567345619 - <_> - - <_> - - - - <_>9 0 12 3 -1. - <_>9 0 6 3 2. - 1 - 0.0494311712682247 - 0.1375274956226349 - -0.4558086991310120 - <_> - - <_> - - - - <_>13 0 6 6 -1. - <_>13 0 3 6 2. - 0 - 0.0233800895512104 - 0.0471418909728527 - -0.3502770960330963 - <_> - - <_> - - - - <_>5 0 12 8 -1. - <_>5 2 12 4 2. - 0 - 1.3998650247231126e-003 - -0.2064304947853088 - 0.2432229965925217 - <_> - - <_> - - - - <_>14 0 8 6 -1. - <_>18 0 4 3 2. - <_>14 3 4 3 2. - 0 - 0.0114326896145940 - 0.0551873706281185 - -0.3261989951133728 - <_> - - <_> - - - - <_>7 6 8 6 -1. - <_>9 6 4 6 2. - 0 - 0.0487750694155693 - -0.0689925104379654 - 0.7117180824279785 - <_> - - <_> - - - - <_>11 3 6 6 -1. - <_>13 3 2 6 3. - 0 - 0.0652840211987495 - 3.7155740428715944e-003 - 0.5931897163391113 - <_> - - <_> - - - - <_>5 3 6 6 -1. - <_>7 3 2 6 3. - 0 - 6.1603228095918894e-004 - -0.2327252030372620 - 0.2044153064489365 - <_> - - <_> - - - - <_>13 0 8 6 -1. - <_>17 0 4 3 2. - <_>13 3 4 3 2. - 0 - -0.0105274999514222 - -0.3177379071712494 - 0.1017130985856056 - <_> - - <_> - - - - <_>0 0 8 6 -1. - <_>0 0 4 3 2. - <_>4 3 4 3 2. - 0 - 0.0162313394248486 - 0.0917341932654381 - -0.4714300930500031 - <_> - - <_> - - - - <_>7 0 10 6 -1. - <_>12 0 5 3 2. - <_>7 3 5 3 2. - 0 - 3.8958500954322517e-004 - -0.1299754977226257 - 0.1347548961639404 - <_> - - <_> - - - - <_>0 15 22 2 -1. - <_>11 15 11 2 2. - 0 - -0.0441656894981861 - -0.6033102869987488 - 0.0647668763995171 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 15 12 2 2. - 0 - -0.0136632099747658 - -0.5276284217834473 - 0.0634857416152954 - <_> - - <_> - - - - <_>5 13 6 4 -1. - <_>5 15 6 2 2. - 0 - -8.8231859263032675e-004 - 0.1451025009155273 - -0.2784520089626312 - <_> - - <_> - - - - <_>3 9 17 3 -1. - <_>3 10 17 1 3. - 0 - -0.0278191901743412 - 0.4364086985588074 - -0.0851918607950211 - <_> - - <_> - - - - <_>3 8 16 10 -1. - <_>3 8 8 5 2. - <_>11 13 8 5 2. - 0 - 0.0625609904527664 - 0.1002788990736008 - -0.4223591983318329 - <_> - - <_> - - - - <_>9 0 10 6 -1. - <_>14 0 5 3 2. - <_>9 3 5 3 2. - 0 - -4.4808178790844977e-004 - 0.1485148966312408 - -0.1773128956556320 - <_> - - <_> - - - - <_>3 0 12 4 -1. - <_>3 0 6 2 2. - <_>9 2 6 2 2. - 0 - -0.0213631801307201 - -0.6133446097373962 - 0.0605393983423710 - <_> - - <_> - - - - <_>4 10 14 3 -1. - <_>4 10 7 3 2. - 0 - -0.0691223293542862 - -0.8684576153755188 - 0.0393477492034435 - <_> - - <_> - - - - <_>1 14 11 4 -1. - <_>1 16 11 2 2. - 0 - -0.0305428393185139 - -0.6402171850204468 - 0.0495938211679459 - <_> - - <_> - - - - <_>7 0 12 6 -1. - <_>13 0 6 3 2. - <_>7 3 6 3 2. - 0 - -0.0101011600345373 - -0.1619915068149567 - 0.0572568997740746 - <_> - - <_> - - - - <_>3 0 10 6 -1. - <_>3 0 5 3 2. - <_>8 3 5 3 2. - 0 - -2.2010109387338161e-004 - 0.2135093063116074 - -0.2019899934530258 - -1.0127470493316650 - 1 - -1 - <_> - - - <_> - - <_> - - - - <_>6 0 10 3 -1. - <_>6 0 5 3 2. - 1 - 5.7967850007116795e-003 - -0.3384417891502380 - 0.2506627142429352 - <_> - - <_> - - - - <_>14 8 6 4 -1. - <_>14 8 6 2 2. - 1 - 0.0637951791286469 - -0.0421116203069687 - 0.3574657142162323 - <_> - - <_> - - - - <_>0 2 5 16 -1. - <_>0 10 5 8 2. - 0 - -0.0643320381641388 - -0.5066078901290894 - 0.1171773970127106 - <_> - - <_> - - - - <_>0 3 22 5 -1. - <_>0 3 11 5 2. - 0 - -0.1157428994774818 - -0.5667849779129028 - 0.0958809033036232 - <_> - - <_> - - - - <_>6 15 8 3 -1. - <_>10 15 4 3 2. - 0 - -3.9005130529403687e-003 - -0.4149822890758514 - 0.1485832035541534 - <_> - - <_> - - - - <_>15 0 2 14 -1. - <_>15 0 1 14 2. - 1 - 0.0125129297375679 - 0.0536966696381569 - -0.1416396051645279 - <_> - - <_> - - - - <_>7 0 14 2 -1. - <_>7 0 14 1 2. - 1 - 1.5871099894866347e-003 - -0.2596234083175659 - 0.1941833049058914 - <_> - - <_> - - - - <_>1 11 20 5 -1. - <_>6 11 10 5 2. - 0 - 0.1629112064838409 - -0.0612437687814236 - 0.7856721282005310 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - -0.3325822055339813 - 0.7802013158798218 - -0.0440364591777325 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>14 1 4 3 3. - 0 - -0.0102888997644186 - -0.1528968065977097 - 0.0620962306857109 - <_> - - <_> - - - - <_>0 1 12 3 -1. - <_>4 1 4 3 3. - 0 - 0.0289560295641422 - 0.0847077965736389 - -0.4782071113586426 - <_> - - <_> - - - - <_>14 12 4 6 -1. - <_>14 12 2 6 2. - 0 - -3.2221511355601251e-004 - 0.1395125985145569 - -0.1881939023733139 - <_> - - <_> - - - - <_>0 10 22 7 -1. - <_>11 10 11 7 2. - 0 - 0.1583528965711594 - 0.0666678100824356 - -0.5457236170768738 - <_> - - <_> - - - - <_>11 2 4 11 -1. - <_>11 2 2 11 2. - 1 - -0.0425843112170696 - 0.2704033851623535 - -0.0566545091569424 - <_> - - <_> - - - - <_>3 14 16 4 -1. - <_>3 14 8 2 2. - <_>11 16 8 2 2. - 0 - 0.0275051407516003 - 0.0492711588740349 - -0.7315763831138611 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>14 12 2 6 3. - 0 - 0.0868797004222870 - -0.0175324007868767 - 0.8678265213966370 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - -2.0130439661443233e-003 - 0.1659394055604935 - -0.2526623010635376 - <_> - - <_> - - - - <_>11 14 6 4 -1. - <_>11 16 6 2 2. - 0 - 4.2330170981585979e-004 - 0.0942235514521599 - -0.2462970018386841 - <_> - - <_> - - - - <_>0 0 12 4 -1. - <_>0 0 6 2 2. - <_>6 2 6 2 2. - 0 - 0.0151944998651743 - 0.0736956372857094 - -0.5006862282752991 - <_> - - <_> - - - - <_>15 11 4 6 -1. - <_>15 11 2 6 2. - 0 - -6.1203669756650925e-003 - 0.2138189971446991 - -0.1673810034990311 - <_> - - <_> - - - - <_>3 11 4 6 -1. - <_>5 11 2 6 2. - 0 - 0.0206602402031422 - -0.0806361585855484 - 0.5782834887504578 - <_> - - <_> - - - - <_>18 5 4 7 -1. - <_>18 5 2 7 2. - 1 - -0.0603982508182526 - -0.6341177225112915 - 0.0508990101516247 - <_> - - <_> - - - - <_>4 5 7 4 -1. - <_>4 5 7 2 2. - 1 - 0.0353864803910255 - 0.0731911510229111 - -0.5642666220664978 - <_> - - <_> - - - - <_>9 6 12 3 -1. - <_>13 6 4 3 3. - 0 - -0.0659978389739990 - 0.3283380866050720 - -0.0263102594763041 - <_> - - <_> - - - - <_>1 6 12 3 -1. - <_>5 6 4 3 3. - 0 - 1.1004590196534991e-003 - -0.2311460971832275 - 0.2020651996135712 - <_> - - <_> - - - - <_>0 0 22 10 -1. - <_>11 0 11 5 2. - <_>0 5 11 5 2. - 0 - 0.0844881534576416 - 0.0745898410677910 - -0.4371033906936646 - <_> - - <_> - - - - <_>2 4 14 3 -1. - <_>2 5 14 1 3. - 0 - -0.0292359907180071 - 0.6506476998329163 - -0.0545318387448788 - <_> - - <_> - - - - <_>13 3 8 6 -1. - <_>17 3 4 3 2. - <_>13 6 4 3 2. - 0 - -0.0339169502258301 - -0.2880434989929199 - 0.0321728810667992 - <_> - - <_> - - - - <_>4 14 14 4 -1. - <_>4 14 7 2 2. - <_>11 16 7 2 2. - 0 - -7.9108700156211853e-003 - -0.3366037905216217 - 0.1010069027543068 - <_> - - <_> - - - - <_>11 2 4 11 -1. - <_>11 2 2 11 2. - 1 - 0.0519304312765598 - 0.0329209603369236 - -0.1317653059959412 - <_> - - <_> - - - - <_>11 2 11 4 -1. - <_>11 2 11 2 2. - 1 - -0.0685861036181450 - 0.5215355753898621 - -0.0667185783386230 - <_> - - <_> - - - - <_>10 7 12 3 -1. - <_>10 7 6 3 2. - 0 - -1.9451669650152326e-003 - 0.1539679020643234 - -0.1989576071500778 - <_> - - <_> - - - - <_>9 7 4 6 -1. - <_>9 7 2 6 2. - 1 - 0.0713662281632423 - -0.0829271599650383 - 0.4529233872890472 - <_> - - <_> - - - - <_>3 11 16 6 -1. - <_>11 11 8 3 2. - <_>3 14 8 3 2. - 0 - -0.0266242399811745 - -0.4400973916053772 - 0.1026711985468864 - <_> - - <_> - - - - <_>1 3 8 6 -1. - <_>1 3 4 3 2. - <_>5 6 4 3 2. - 0 - 0.0252660606056452 - 0.0557992011308670 - -0.5556933879852295 - <_> - - <_> - - - - <_>5 4 12 3 -1. - <_>5 5 12 1 3. - 0 - 5.5255689658224583e-003 - -0.1364029943943024 - 0.2825520038604736 - <_> - - <_> - - - - <_>7 14 8 4 -1. - <_>11 14 4 4 2. - 0 - -2.9929999727755785e-003 - -0.3242157101631165 - 0.1212206035852432 - <_> - - <_> - - - - <_>7 3 15 3 -1. - <_>7 4 15 1 3. - 0 - 0.0221921093761921 - -0.0607410185039043 - 0.4347316026687622 - <_> - - <_> - - - - <_>6 8 6 4 -1. - <_>6 8 6 2 2. - 1 - -9.4268741086125374e-003 - -0.3345840871334076 - 0.1002969965338707 - <_> - - <_> - - - - <_>10 7 12 3 -1. - <_>10 7 6 3 2. - 0 - 3.4395330585539341e-003 - -0.0838299095630646 - 0.1792594045400620 - <_> - - <_> - - - - <_>0 7 12 3 -1. - <_>6 7 6 3 2. - 0 - -3.2996390946209431e-003 - 0.1999042928218842 - -0.2106847018003464 - <_> - - <_> - - - - <_>7 7 9 4 -1. - <_>10 7 3 4 3. - 0 - 0.0261521507054567 - -0.0806674063205719 - 0.3558126986026764 - -1.0684469938278198 - 2 - -1 - <_> - - - <_> - - <_> - - - - <_>6 2 4 16 -1. - <_>6 10 4 8 2. - 0 - -0.0227926503866911 - 0.4072526097297669 - -0.3360992074012756 - <_> - - <_> - - - - <_>8 4 6 6 -1. - <_>10 4 2 6 3. - 0 - -5.7334620505571365e-003 - 0.2688218951225281 - -0.2277535051107407 - <_> - - <_> - - - - <_>1 11 20 3 -1. - <_>6 11 10 3 2. - 0 - 0.0969412028789520 - -0.0809050127863884 - 0.7432873845100403 - <_> - - <_> - - - - <_>14 9 6 8 -1. - <_>17 9 3 4 2. - <_>14 13 3 4 2. - 0 - -0.0282889995723963 - 0.4561010897159576 - -0.0610963404178619 - <_> - - <_> - - - - <_>11 0 9 4 -1. - <_>11 0 9 2 2. - 1 - 3.8522849790751934e-003 - -0.2524180114269257 - 0.2090710997581482 - <_> - - <_> - - - - <_>11 10 6 8 -1. - <_>14 10 3 4 2. - <_>11 14 3 4 2. - 0 - 2.3100129328668118e-003 - -0.1471340060234070 - 0.1546038985252380 - <_> - - <_> - - - - <_>5 16 12 2 -1. - <_>5 17 12 1 2. - 0 - 1.1361920041963458e-003 - 0.1768047958612442 - -0.3053728938102722 - <_> - - <_> - - - - <_>5 9 14 4 -1. - <_>5 11 14 2 2. - 0 - 0.0249628908932209 - -0.1265290975570679 - 0.3744265139102936 - <_> - - <_> - - - - <_>2 9 6 8 -1. - <_>2 9 3 4 2. - <_>5 13 3 4 2. - 0 - -5.8984099887311459e-003 - 0.2673898935317993 - -0.1776257008314133 - <_> - - <_> - - - - <_>15 8 6 4 -1. - <_>15 8 3 4 2. - 0 - 0.0118049001321197 - 0.0660779774188995 - -0.3348213136196137 - <_> - - <_> - - - - <_>1 8 6 4 -1. - <_>4 8 3 4 2. - 0 - 6.4400159753859043e-003 - 0.1099480018019676 - -0.3630348145961762 - <_> - - <_> - - - - <_>13 5 8 5 -1. - <_>13 5 4 5 2. - 1 - -0.0894073694944382 - -0.4358046054840088 - 0.0149443103000522 - <_> - - <_> - - - - <_>11 5 9 2 -1. - <_>11 5 9 1 2. - 1 - -0.0314042307436466 - 0.6952344775199890 - -0.0548542886972427 - <_> - - <_> - - - - <_>12 6 9 12 -1. - <_>15 10 3 4 9. - 0 - -0.1460794955492020 - -0.2565006017684937 - 0.0569565407931805 - <_> - - <_> - - - - <_>5 10 6 8 -1. - <_>5 10 3 4 2. - <_>8 14 3 4 2. - 0 - 2.1142649929970503e-003 - -0.2498755007982254 - 0.1679255962371826 - <_> - - <_> - - - - <_>9 5 5 12 -1. - <_>9 8 5 6 2. - 0 - -0.0151193598285317 - -0.3017987012863159 - 0.1039358973503113 - <_> - - <_> - - - - <_>11 5 9 2 -1. - <_>11 5 9 1 2. - 1 - 0.0256209596991539 - -0.0748213008046150 - 0.5360078215599060 - <_> - - <_> - - - - <_>5 0 15 12 -1. - <_>10 4 5 4 9. - 0 - -0.1441780030727387 - -0.2049089968204498 - 0.0744577869772911 - <_> - - <_> - - - - <_>1 13 8 5 -1. - <_>5 13 4 5 2. - 0 - 0.0259547792375088 - -0.0905748680233955 - 0.4844220876693726 - <_> - - <_> - - - - <_>14 8 6 4 -1. - <_>14 8 3 4 2. - 1 - -0.0211307201534510 - -0.2268981039524078 - 0.0648760572075844 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 4 3 2. - 1 - 0.0164744593203068 - 0.1076800003647804 - -0.3657059967517853 - <_> - - <_> - - - - <_>7 0 12 9 -1. - <_>11 3 4 3 9. - 0 - 0.1092215031385422 - 0.0568273514509201 - -0.3472855985164642 - <_> - - <_> - - - - <_>7 13 6 4 -1. - <_>7 15 6 2 2. - 0 - -7.4581061198841780e-005 - 0.1390427052974701 - -0.2594260871410370 - <_> - - <_> - - - - <_>10 7 6 10 -1. - <_>13 7 3 5 2. - <_>10 12 3 5 2. - 0 - -0.0277536008507013 - 0.3811129927635193 - -0.0428961291909218 - <_> - - <_> - - - - <_>6 7 6 10 -1. - <_>6 7 3 5 2. - <_>9 12 3 5 2. - 0 - 0.0327214300632477 - -0.0908721536397934 - 0.3928917944431305 - <_> - - <_> - - - - <_>7 0 12 2 -1. - <_>7 0 6 2 2. - 0 - 5.5606258101761341e-003 - 0.0840022489428520 - -0.1939603984355927 - <_> - - <_> - - - - <_>2 0 18 9 -1. - <_>2 3 18 3 3. - 0 - -0.1071029007434845 - -0.5898147225379944 - 0.0568627603352070 - <_> - - <_> - - - - <_>12 2 6 15 -1. - <_>12 2 3 15 2. - 0 - -8.0517623573541641e-003 - 0.1179059967398644 - -0.1159565970301628 - <_> - - <_> - - - - <_>4 2 6 15 -1. - <_>7 2 3 15 2. - 0 - -0.1385001987218857 - -0.9080532193183899 - 0.0414113588631153 - <_> - - <_> - - - - <_>7 12 12 4 -1. - <_>7 13 12 2 2. - 0 - 0.0286209192126989 - 0.0199285894632339 - -0.7369766235351563 - <_> - - <_> - - - - <_>4 4 4 14 -1. - <_>4 4 2 7 2. - <_>6 11 2 7 2. - 0 - 0.0262089706957340 - -0.0615775510668755 - 0.6089993119239807 - <_> - - <_> - - - - <_>12 6 9 12 -1. - <_>15 10 3 4 9. - 0 - 0.0265270397067070 - 0.0571938604116440 - -0.0629923269152641 - <_> - - <_> - - - - <_>1 6 9 12 -1. - <_>4 10 3 4 9. - 0 - -0.0446224883198738 - -0.3331815004348755 - 0.0932145714759827 - <_> - - <_> - - - - <_>13 6 8 12 -1. - <_>17 6 4 6 2. - <_>13 12 4 6 2. - 0 - -0.0142831197008491 - 0.1912523061037064 - -0.1153056994080544 - <_> - - <_> - - - - <_>7 14 8 3 -1. - <_>11 14 4 3 2. - 0 - -1.9681209232658148e-003 - -0.3129512071609497 - 0.0996828079223633 - <_> - - <_> - - - - <_>5 5 12 3 -1. - <_>9 5 4 3 3. - 0 - 0.0528510808944702 - -0.0589195489883423 - 0.5788791179656982 - <_> - - <_> - - - - <_>10 0 2 18 -1. - <_>10 6 2 6 3. - 0 - -6.3711861148476601e-003 - 0.1918219029903412 - -0.1909454017877579 - <_> - - <_> - - - - <_>4 14 14 2 -1. - <_>4 14 7 2 2. - 0 - -6.4727910794317722e-003 - -0.2472103983163834 - 0.1225292980670929 - <_> - - <_> - - - - <_>3 0 6 4 -1. - <_>6 0 3 4 2. - 0 - -0.0166909899562597 - -0.4917466044425964 - 0.0503151006996632 - <_> - - <_> - - - - <_>13 12 6 4 -1. - <_>13 12 3 4 2. - 0 - -0.0148824099451303 - 0.1964661031961441 - -0.0582503899931908 - <_> - - <_> - - - - <_>1 0 8 4 -1. - <_>5 0 4 4 2. - 0 - 0.0175297092646360 - 0.0763574987649918 - -0.3655926883220673 - <_> - - <_> - - - - <_>7 9 14 4 -1. - <_>14 9 7 2 2. - <_>7 11 7 2 2. - 0 - 0.0422213897109032 - -0.0315604917705059 - 0.3601126968860626 - <_> - - <_> - - - - <_>1 0 8 18 -1. - <_>1 0 4 9 2. - <_>5 9 4 9 2. - 0 - -0.0655817463994026 - 0.3433471024036408 - -0.0885569602251053 - <_> - - <_> - - - - <_>13 8 6 4 -1. - <_>13 8 3 4 2. - 1 - 0.0167032107710838 - 0.0482100397348404 - -0.1527362018823624 - <_> - - <_> - - - - <_>9 8 4 6 -1. - <_>9 8 4 3 2. - 1 - -6.9328742101788521e-003 - -0.3057363927364349 - 0.1182114034891129 - -1.1520069837570190 - 3 - -1 - <_> - - - <_> - - <_> - - - - <_>3 13 6 4 -1. - <_>6 13 3 4 2. - 0 - -6.3434438779950142e-003 - 0.3384028077125549 - -0.3347485065460205 - <_> - - <_> - - - - <_>11 4 6 7 -1. - <_>13 4 2 7 3. - 0 - 5.2472548559308052e-003 - -0.0935965329408646 - 0.1679117977619171 - <_> - - <_> - - - - <_>6 8 6 4 -1. - <_>6 8 3 4 2. - 1 - -0.0365850888192654 - 0.5367609858512878 - -0.0854335278272629 - <_> - - <_> - - - - <_>10 7 12 5 -1. - <_>13 7 6 5 2. - 0 - 5.3153699263930321e-003 - -0.1280411928892136 - 0.1444391012191773 - <_> - - <_> - - - - <_>3 5 12 3 -1. - <_>9 5 6 3 2. - 0 - -3.9569609798491001e-003 - 0.1860544979572296 - -0.2231141030788422 - <_> - - <_> - - - - <_>13 5 4 6 -1. - <_>13 8 4 3 2. - 0 - 0.0339654199779034 - 0.0278357099741697 - -0.5120338797569275 - <_> - - <_> - - - - <_>5 5 4 6 -1. - <_>5 8 4 3 2. - 0 - -0.0148528795689344 - -0.4681495130062103 - 0.1135156005620956 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>15 12 2 6 3. - 0 - -2.9641329310834408e-003 - 0.2659179866313934 - -0.2818377017974854 - <_> - - <_> - - - - <_>10 2 4 10 -1. - <_>10 2 4 5 2. - 1 - -0.1079559028148651 - -0.5752769708633423 - 0.1099163964390755 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>15 12 2 6 3. - 0 - 0.0212376005947590 - -0.1045159026980400 - 0.4661377072334290 - <_> - - <_> - - - - <_>3 12 6 6 -1. - <_>5 12 2 6 3. - 0 - -0.0261896401643753 - 0.4254482090473175 - -0.0922789126634598 - <_> - - <_> - - - - <_>11 12 6 6 -1. - <_>11 14 6 2 3. - 0 - -0.0350105613470078 - -0.7180119752883911 - 0.0728772506117821 - <_> - - <_> - - - - <_>5 12 8 6 -1. - <_>5 12 4 3 2. - <_>9 15 4 3 2. - 0 - 1.5026619621494319e-005 - -0.2719976007938385 - 0.1068215966224670 - <_> - - <_> - - - - <_>5 11 12 6 -1. - <_>11 11 6 3 2. - <_>5 14 6 3 2. - 0 - -0.0277602504938841 - -0.5018569231033325 - 0.1011821031570435 - <_> - - <_> - - - - <_>0 9 22 8 -1. - <_>0 9 11 4 2. - <_>11 13 11 4 2. - 0 - -0.0374391786754131 - -0.3714151978492737 - 0.0837090387940407 - <_> - - <_> - - - - <_>6 9 13 3 -1. - <_>6 10 13 1 3. - 0 - -0.0141522595658898 - 0.3098280131816864 - -0.0737676620483398 - <_> - - <_> - - - - <_>0 2 8 6 -1. - <_>0 2 4 3 2. - <_>4 5 4 3 2. - 0 - -0.0123310796916485 - -0.3950768113136292 - 0.0832151770591736 - <_> - - <_> - - - - <_>4 9 16 3 -1. - <_>4 10 16 1 3. - 0 - 2.6666349731385708e-003 - -0.1377612948417664 - 0.2424568980932236 - <_> - - <_> - - - - <_>4 9 12 3 -1. - <_>4 10 12 1 3. - 0 - -2.9443199746310711e-003 - 0.2446078062057495 - -0.1393789052963257 - <_> - - <_> - - - - <_>16 2 5 16 -1. - <_>16 10 5 8 2. - 0 - -0.1578892022371292 - -0.5683224201202393 - 0.0361407212913036 - <_> - - <_> - - - - <_>6 13 7 4 -1. - <_>6 15 7 2 2. - 0 - 2.1553030237555504e-003 - 0.0836605578660965 - -0.4138025939464569 - <_> - - <_> - - - - <_>1 7 20 8 -1. - <_>11 7 10 4 2. - <_>1 11 10 4 2. - 0 - -0.0853670910000801 - -0.5705329179763794 - 0.0529956594109535 - <_> - - <_> - - - - <_>5 2 12 3 -1. - <_>5 3 12 1 3. - 0 - 3.4761740826070309e-003 - -0.1218981966376305 - 0.2655329108238220 - <_> - - <_> - - - - <_>13 13 6 4 -1. - <_>13 15 6 2 2. - 0 - -0.0241042207926512 - -0.5231543779373169 - 0.0255056601017714 - <_> - - <_> - - - - <_>1 0 5 8 -1. - <_>1 4 5 4 2. - 0 - -0.0307291503995657 - -0.4673540890216827 - 0.0708444267511368 - <_> - - <_> - - - - <_>5 0 13 8 -1. - <_>5 4 13 4 2. - 0 - -1.1937420349568129e-003 - 0.1459686011075974 - -0.2308627068996429 - <_> - - <_> - - - - <_>9 1 4 8 -1. - <_>9 5 4 4 2. - 0 - 0.0323041006922722 - -0.0653509274125099 - 0.5509138107299805 - <_> - - <_> - - - - <_>11 2 8 8 -1. - <_>9 4 8 4 2. - 1 - 0.1495549976825714 - 0.0150020895525813 - -0.8940045237541199 - <_> - - <_> - - - - <_>11 2 8 8 -1. - <_>13 4 4 8 2. - 1 - -4.7254669480025768e-003 - 0.1485746055841446 - -0.2101994007825851 - <_> - - <_> - - - - <_>8 0 14 4 -1. - <_>15 0 7 2 2. - <_>8 2 7 2 2. - 0 - 0.0363607183098793 - 0.0285479500889778 - -0.6366893053054810 - <_> - - <_> - - - - <_>0 10 12 4 -1. - <_>0 10 6 2 2. - <_>6 12 6 2 2. - 0 - -0.0271099992096424 - 0.4966191053390503 - -0.0736615732312202 - <_> - - <_> - - - - <_>8 0 14 4 -1. - <_>15 0 7 2 2. - <_>8 2 7 2 2. - 0 - -9.5398407429456711e-003 - -0.1938468068838120 - 0.0585070811212063 - <_> - - <_> - - - - <_>3 4 16 14 -1. - <_>7 4 8 14 2. - 0 - 0.1054198965430260 - -0.0747857317328453 - 0.4378111064434052 - <_> - - <_> - - - - <_>13 13 6 4 -1. - <_>13 15 6 2 2. - 0 - 6.3801761716604233e-003 - 0.0539715290069580 - -0.3382979035377502 - <_> - - <_> - - - - <_>3 13 6 4 -1. - <_>3 15 6 2 2. - 0 - -0.0227598492056131 - -0.5937489867210388 - 0.0480465292930603 - <_> - - <_> - - - - <_>11 5 2 10 -1. - <_>11 5 1 10 2. - 1 - -0.0173237491399050 - -0.1603469997644424 - 0.0151871601119637 - <_> - - <_> - - - - <_>11 5 10 2 -1. - <_>11 5 10 1 2. - 1 - 0.0298544093966484 - -0.0656982436776161 - 0.4505734145641327 - <_> - - <_> - - - - <_>4 0 18 4 -1. - <_>13 0 9 2 2. - <_>4 2 9 2 2. - 0 - 0.0232698395848274 - 0.0388054996728897 - -0.3535487949848175 - <_> - - <_> - - - - <_>6 5 4 6 -1. - <_>6 5 2 6 2. - 1 - 0.0408338718116283 - 0.0494048409163952 - -0.5622245073318481 - <_> - - <_> - - - - <_>16 6 6 6 -1. - <_>14 8 6 2 3. - 1 - -0.1249888986349106 - 0.6776366829872131 - -0.0154849402606487 - <_> - - <_> - - - - <_>6 6 6 6 -1. - <_>8 8 2 6 3. - 1 - -0.0655793771147728 - 0.6736323237419128 - -0.0452696904540062 - <_> - - <_> - - - - <_>4 0 18 12 -1. - <_>4 0 9 12 2. - 0 - -0.3790175914764404 - -0.4985372126102448 - 0.0239552296698093 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>2 12 4 6 2. - 0 - 2.9792459681630135e-003 - -0.1843641996383667 - 0.1626583039760590 - <_> - - <_> - - - - <_>7 12 8 6 -1. - <_>7 12 4 6 2. - 0 - 0.0138036599382758 - 0.0636982172727585 - -0.4338980019092560 - <_> - - <_> - - - - <_>7 6 3 12 -1. - <_>8 6 1 12 3. - 0 - 3.5606899764388800e-003 - -0.1145507022738457 - 0.2361861020326614 - <_> - - <_> - - - - <_>15 5 6 6 -1. - <_>15 5 3 6 2. - 1 - 8.8772783055901527e-003 - 0.0864168405532837 - -0.1759098023176193 - -1.0648390054702759 - 4 - -1 - <_> - - - <_> - - <_> - - - - <_>2 12 8 3 -1. - <_>6 12 4 3 2. - 0 - -6.7344820126891136e-003 - 0.3075858950614929 - -0.2976179122924805 - <_> - - <_> - - - - <_>2 6 18 3 -1. - <_>8 6 6 3 3. - 0 - -0.0139028802514076 - 0.2040069997310638 - -0.2296725064516068 - <_> - - <_> - - - - <_>0 11 22 2 -1. - <_>11 11 11 2 2. - 0 - -0.0419635511934757 - -0.5657541155815125 - 0.0867454931139946 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 16 6 2 2. - 0 - -5.9794791013700888e-005 - 0.1583261042833328 - -0.2310905009508133 - <_> - - <_> - - - - <_>3 12 6 4 -1. - <_>6 12 3 4 2. - 0 - 8.4739532321691513e-003 - -0.1150123029947281 - 0.3975858986377716 - <_> - - <_> - - - - <_>14 0 4 12 -1. - <_>14 0 4 6 2. - 1 - -0.0653170570731163 - -0.2388727962970734 - 0.1139170974493027 - <_> - - <_> - - - - <_>5 10 6 4 -1. - <_>8 10 3 4 2. - 0 - -4.2358501814305782e-003 - 0.2233722060918808 - -0.2421883940696716 - <_> - - <_> - - - - <_>1 12 20 6 -1. - <_>11 12 10 3 2. - <_>1 15 10 3 2. - 0 - 0.0462292991578579 - 0.0968374013900757 - -0.5342770218849182 - <_> - - <_> - - - - <_>5 15 12 3 -1. - <_>9 15 4 3 3. - 0 - 5.2246701670810580e-005 - -0.2418936043977737 - 0.1593236029148102 - <_> - - <_> - - - - <_>13 1 3 10 -1. - <_>13 6 3 5 2. - 0 - -0.0414200909435749 - -0.3404498100280762 - 0.0437124818563461 - <_> - - <_> - - - - <_>9 0 10 4 -1. - <_>9 0 5 4 2. - 1 - -0.0102242799475789 - -0.2475239038467407 - 0.1551253050565720 - <_> - - <_> - - - - <_>13 1 3 10 -1. - <_>13 6 3 5 2. - 0 - 0.0685812085866928 - 9.7173796966671944e-003 - -0.6182122230529785 - <_> - - <_> - - - - <_>6 1 3 10 -1. - <_>6 6 3 5 2. - 0 - -0.0407003015279770 - -0.6028478741645813 - 0.0709630697965622 - <_> - - <_> - - - - <_>11 4 10 4 -1. - <_>11 4 10 2 2. - 1 - -0.0899986997246742 - 0.4666472077369690 - -0.0485498905181885 - <_> - - <_> - - - - <_>0 10 20 8 -1. - <_>0 10 10 4 2. - <_>10 14 10 4 2. - 0 - 0.0153073603287339 - 0.1478367000818253 - -0.2711460888385773 - <_> - - <_> - - - - <_>15 11 6 7 -1. - <_>17 11 2 7 3. - 0 - 3.7016849964857101e-003 - -0.1515340954065323 - 0.2093140929937363 - <_> - - <_> - - - - <_>4 14 9 4 -1. - <_>4 16 9 2 2. - 0 - -0.0319370999932289 - -0.7233225703239441 - 0.0374201610684395 - <_> - - <_> - - - - <_>15 0 6 8 -1. - <_>15 4 6 4 2. - 0 - 0.0474939085543156 - 0.0490000918507576 - -0.4830318987369537 - <_> - - <_> - - - - <_>1 11 6 7 -1. - <_>3 11 2 7 3. - 0 - 4.4620381668210030e-003 - -0.1769831925630570 - 0.1982091069221497 - <_> - - <_> - - - - <_>12 6 8 4 -1. - <_>12 6 8 2 2. - 1 - -8.1284176558256149e-003 - 0.1122218966484070 - -0.0508055202662945 - <_> - - <_> - - - - <_>11 2 6 2 -1. - <_>11 2 6 1 2. - 1 - -0.0125960195437074 - 0.4388906061649323 - -0.0828989520668983 - <_> - - <_> - - - - <_>11 0 11 8 -1. - <_>11 4 11 4 2. - 0 - -1.0689930059015751e-003 - 0.0687660872936249 - -0.0826670080423355 - <_> - - <_> - - - - <_>0 1 22 6 -1. - <_>0 1 11 3 2. - <_>11 4 11 3 2. - 0 - -0.0482130907475948 - -0.4667134881019592 - 0.0743107125163078 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - -2.3418650380335748e-004 - 0.0887251421809196 - -0.1091964021325111 - <_> - - <_> - - - - <_>0 1 14 7 -1. - <_>7 1 7 7 2. - 0 - 0.1009500026702881 - 0.0554442703723907 - -0.5520536899566650 - <_> - - <_> - - - - <_>16 8 4 6 -1. - <_>16 8 2 6 2. - 1 - 0.0323404110968113 - 0.0497627407312393 - -0.3663640022277832 - <_> - - <_> - - - - <_>1 11 20 7 -1. - <_>6 11 10 7 2. - 0 - 0.1769921034574509 - -0.0737656429409981 - 0.5430079102516174 - <_> - - <_> - - - - <_>13 12 4 6 -1. - <_>13 15 4 3 2. - 0 - -1.8634319712873548e-004 - 0.0957186669111252 - -0.1821410953998566 - <_> - - <_> - - - - <_>0 3 13 3 -1. - <_>0 4 13 1 3. - 0 - 6.6473139449954033e-003 - -0.1217313036322594 - 0.3033103942871094 - <_> - - <_> - - - - <_>6 3 12 3 -1. - <_>6 4 12 1 3. - 0 - -9.9276658147573471e-003 - 0.3263852000236511 - -0.0885337069630623 - <_> - - <_> - - - - <_>0 4 22 10 -1. - <_>0 4 11 5 2. - <_>11 9 11 5 2. - 0 - 0.0525870993733406 - 0.1130395010113716 - -0.3343687057495117 - <_> - - <_> - - - - <_>14 3 8 4 -1. - <_>14 3 8 2 2. - 1 - 4.9553681164979935e-003 - -0.1318328976631165 - 0.0976148098707199 - <_> - - <_> - - - - <_>5 5 12 6 -1. - <_>5 5 6 3 2. - <_>11 8 6 3 2. - 0 - -0.0238176602870226 - -0.4102765023708344 - 0.0848498120903969 - <_> - - <_> - - - - <_>11 6 6 6 -1. - <_>13 6 2 6 3. - 0 - -0.0113637801259756 - 0.1887442022562027 - -0.0835364162921906 - <_> - - <_> - - - - <_>9 4 4 13 -1. - <_>10 4 2 13 2. - 0 - -1.9515539752319455e-003 - 0.1898508965969086 - -0.1777677983045578 - <_> - - <_> - - - - <_>11 3 3 13 -1. - <_>12 3 1 13 3. - 0 - -0.0135766696184874 - 0.2097575962543488 - -0.0371154509484768 - <_> - - <_> - - - - <_>9 5 4 6 -1. - <_>11 5 2 6 2. - 0 - 0.0164668206125498 - -0.0823494121432304 - 0.3804722130298615 - <_> - - <_> - - - - <_>7 2 12 15 -1. - <_>11 7 4 5 9. - 0 - -0.1013626009225845 - -0.1163323000073433 - 0.0678049102425575 - <_> - - <_> - - - - <_>3 2 12 15 -1. - <_>7 7 4 5 9. - 0 - -0.1024843007326126 - -0.2885020971298218 - 0.1213968023657799 - <_> - - <_> - - - - <_>5 2 12 12 -1. - <_>9 6 4 4 9. - 0 - -0.2871756851673126 - 0.4693514108657837 - -0.0829543098807335 - <_> - - <_> - - - - <_>8 5 4 12 -1. - <_>8 8 4 6 2. - 0 - 0.0508129782974720 - 0.0553938783705235 - -0.6238328218460083 - <_> - - <_> - - - - <_>8 9 8 7 -1. - <_>10 9 4 7 2. - 0 - 0.0910634174942970 - -0.0233795605599880 - 0.4715529978275299 - <_> - - <_> - - - - <_>6 9 8 7 -1. - <_>8 9 4 7 2. - 0 - -0.0518453381955624 - -0.6903154253959656 - 0.0454541184008121 - <_> - - <_> - - - - <_>0 4 22 14 -1. - <_>11 4 11 7 2. - <_>0 11 11 7 2. - 0 - 0.1503123939037323 - 0.0459067113697529 - -0.5206773877143860 - <_> - - <_> - - - - <_>2 12 18 6 -1. - <_>2 14 18 2 3. - 0 - 0.0415963195264339 - 0.0537062995135784 - -0.4878216981887817 - -0.9506993293762207 - 5 - -1 - <_> - - - <_> - - <_> - - - - <_>6 5 6 5 -1. - <_>9 5 3 5 2. - 0 - -5.9847710654139519e-003 - 0.2785896062850952 - -0.3092339038848877 - <_> - - <_> - - - - <_>11 14 9 4 -1. - <_>14 14 3 4 3. - 0 - -3.9032639469951391e-003 - 0.2225704938173294 - -0.2892822921276093 - <_> - - <_> - - - - <_>6 14 6 4 -1. - <_>6 16 6 2 2. - 0 - -2.2362179151969030e-005 - 0.1408437043428421 - -0.3014316856861115 - <_> - - <_> - - - - <_>15 6 6 5 -1. - <_>15 6 3 5 2. - 1 - -0.0911670029163361 - -0.6760801076889038 - 0.0560408197343349 - <_> - - <_> - - - - <_>7 6 5 6 -1. - <_>7 6 5 3 2. - 1 - 0.0527556389570236 - 0.0746887475252151 - -0.6325625777244568 - <_> - - <_> - - - - <_>13 12 8 6 -1. - <_>13 12 4 6 2. - 0 - 0.0694585368037224 - -0.1175492033362389 - 0.6386364102363586 - <_> - - <_> - - - - <_>6 10 10 8 -1. - <_>6 12 10 4 2. - 0 - -4.8209438100457191e-003 - 0.2922593057155609 - -0.1387241035699844 - <_> - - <_> - - - - <_>2 13 18 2 -1. - <_>2 13 9 2 2. - 0 - 0.0321567505598068 - 0.0755752399563789 - -0.5792791247367859 - <_> - - <_> - - - - <_>1 15 8 3 -1. - <_>5 15 4 3 2. - 0 - -0.0442984700202942 - 0.4022681117057800 - -0.1026460975408554 - <_> - - <_> - - - - <_>14 7 6 4 -1. - <_>14 7 6 2 2. - 1 - -7.0452108047902584e-003 - 0.1512849926948547 - -0.0567258708178997 - <_> - - <_> - - - - <_>10 0 7 2 -1. - <_>10 0 7 1 2. - 1 - 5.1606830675154924e-004 - -0.2302210032939911 - 0.1634387969970703 - <_> - - <_> - - - - <_>17 8 4 6 -1. - <_>17 8 4 3 2. - 1 - -0.0615283586084843 - 0.2555904090404511 - -0.0467515103518963 - <_> - - <_> - - - - <_>2 0 15 9 -1. - <_>7 3 5 3 9. - 0 - -0.0513678118586540 - -0.2475582957267761 - 0.1430545002222061 - <_> - - <_> - - - - <_>9 3 4 6 -1. - <_>9 6 4 3 2. - 0 - 9.0107098221778870e-003 - -0.1064876988530159 - 0.3127186000347138 - <_> - - <_> - - - - <_>3 0 16 12 -1. - <_>3 6 16 6 2. - 0 - 0.0223522596061230 - 0.1549421995878220 - -0.3173629045486450 - <_> - - <_> - - - - <_>11 0 3 10 -1. - <_>11 0 3 5 2. - 1 - 0.0314938910305500 - 0.0720375329256058 - -0.2894667088985443 - <_> - - <_> - - - - <_>0 3 22 14 -1. - <_>11 3 11 14 2. - 0 - -0.0520644597709179 - -0.2708202004432678 - 0.1226018965244293 - <_> - - <_> - - - - <_>10 3 6 7 -1. - <_>12 3 2 7 3. - 0 - -6.1549381352961063e-003 - 0.1644295006990433 - -0.1065777987241745 - <_> - - <_> - - - - <_>11 1 11 4 -1. - <_>10 2 11 2 2. - 1 - 3.0305041000247002e-003 - -0.1523413956165314 - 0.2044637948274612 - <_> - - <_> - - - - <_>14 7 6 4 -1. - <_>14 7 6 2 2. - 1 - -6.8027540110051632e-003 - 0.0714481472969055 - -0.0414583012461662 - <_> - - <_> - - - - <_>5 5 4 12 -1. - <_>5 11 4 6 2. - 0 - 0.0686475336551666 - -0.0528335385024548 - 0.5763890147209168 - <_> - - <_> - - - - <_>2 6 20 9 -1. - <_>2 6 10 9 2. - 0 - -0.0928830802440643 - -0.2623670995235443 - 0.0824258103966713 - <_> - - <_> - - - - <_>1 9 18 3 -1. - <_>7 9 6 3 3. - 0 - -5.2907038480043411e-003 - 0.1409045010805130 - -0.2205065041780472 - <_> - - <_> - - - - <_>11 6 6 6 -1. - <_>13 6 2 6 3. - 0 - 1.5640209894627333e-003 - -0.1014354974031448 - 0.1302697062492371 - <_> - - <_> - - - - <_>8 13 6 4 -1. - <_>11 13 3 4 2. - 0 - 0.0107526201754808 - 0.0915153622627258 - -0.3213397860527039 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 14 3 4 2. - 0 - -0.0211063604801893 - -0.2741023004055023 - 9.1773197054862976e-003 - <_> - - <_> - - - - <_>5 6 6 6 -1. - <_>7 6 2 6 3. - 0 - 4.8663117922842503e-003 - -0.1525872051715851 - 0.1971106976270676 - <_> - - <_> - - - - <_>15 0 3 8 -1. - <_>16 1 1 8 3. - 1 - 0.0653964728116989 - 6.5921088680624962e-003 - -0.6434308886528015 - <_> - - <_> - - - - <_>5 8 12 3 -1. - <_>9 8 4 3 3. - 0 - 4.4902609661221504e-003 - -0.1037724986672401 - 0.2800520956516266 - <_> - - <_> - - - - <_>2 7 18 4 -1. - <_>2 9 18 2 2. - 0 - 0.0466148406267166 - 0.0547158494591713 - -0.5217915177345276 - <_> - - <_> - - - - <_>11 1 10 4 -1. - <_>11 1 5 4 2. - 1 - 0.1159745007753372 - 0.0396139994263649 - -0.6478490233421326 - <_> - - <_> - - - - <_>15 0 3 8 -1. - <_>16 1 1 8 3. - 1 - 5.7222661562263966e-003 - -0.0548381693661213 - 0.1282801926136017 - <_> - - <_> - - - - <_>7 0 8 3 -1. - <_>6 1 8 1 3. - 1 - -0.0416332595050335 - -0.8066583871841431 - 0.0359422899782658 - <_> - - <_> - - - - <_>10 0 12 4 -1. - <_>16 0 6 2 2. - <_>10 2 6 2 2. - 0 - -0.0472523905336857 - -0.7919319272041321 - 0.0127373700961471 - <_> - - <_> - - - - <_>5 2 12 3 -1. - <_>5 3 12 1 3. - 0 - -1.6451090341433883e-003 - 0.2037672996520996 - -0.1323063969612122 - <_> - - <_> - - - - <_>8 2 14 3 -1. - <_>8 3 14 1 3. - 0 - 2.5758889969438314e-003 - -0.0635034069418907 - 0.1353008002042770 - <_> - - <_> - - - - <_>0 0 12 4 -1. - <_>0 0 6 2 2. - <_>6 2 6 2 2. - 0 - 0.0207585897296667 - 0.0472869798541069 - -0.5821200013160706 - <_> - - <_> - - - - <_>8 0 14 4 -1. - <_>15 0 7 2 2. - <_>8 2 7 2 2. - 0 - -0.0286014806479216 - -0.4122197031974793 - 0.0242109801620245 - <_> - - <_> - - - - <_>0 5 8 6 -1. - <_>0 5 4 3 2. - <_>4 8 4 3 2. - 0 - -0.0286915805190802 - -0.5540468096733093 - 0.0450686290860176 - <_> - - <_> - - - - <_>14 14 6 4 -1. - <_>14 14 3 4 2. - 0 - -2.6637869887053967e-003 - 0.1257023066282272 - -0.1631949990987778 - <_> - - <_> - - - - <_>6 12 10 4 -1. - <_>11 12 5 4 2. - 0 - -4.4750720262527466e-003 - -0.2713806927204132 - 0.1029310002923012 - <_> - - <_> - - - - <_>14 6 6 6 -1. - <_>12 8 6 2 3. - 1 - 0.0409370996057987 - -0.0320654697716236 - 0.1309264004230499 - <_> - - <_> - - - - <_>8 6 6 6 -1. - <_>10 8 2 6 3. - 1 - 0.0758271813392639 - -0.0512215197086334 - 0.5659629702568054 - -0.8504595160484314 - 6 - -1 - <_> - - - <_> - - <_> - - - - <_>2 8 6 10 -1. - <_>2 8 3 5 2. - <_>5 13 3 5 2. - 0 - -4.2669968679547310e-003 - 0.1770441979169846 - -0.2826541960239410 - <_> - - <_> - - - - <_>11 3 4 9 -1. - <_>12 4 2 9 2. - 1 - -0.0225779395550489 - 0.2365795969963074 - -0.0423263683915138 - <_> - - <_> - - - - <_>2 0 12 4 -1. - <_>2 0 6 2 2. - <_>8 2 6 2 2. - 0 - -9.8107997328042984e-003 - -0.3856830894947052 - 0.0909823030233383 - <_> - - <_> - - - - <_>11 5 3 9 -1. - <_>12 6 1 9 3. - 1 - 3.8510379381477833e-003 - -0.1027040034532547 - 0.1926759034395218 - <_> - - <_> - - - - <_>11 3 9 4 -1. - <_>10 4 9 2 2. - 1 - -2.0688450895249844e-003 - 0.1665657013654709 - -0.2139438986778259 - <_> - - <_> - - - - <_>13 13 8 5 -1. - <_>13 13 4 5 2. - 0 - -0.0583685003221035 - 0.3483357131481171 - -0.0806054621934891 - <_> - - <_> - - - - <_>1 13 8 5 -1. - <_>5 13 4 5 2. - 0 - 0.0562909208238125 - -0.0616179890930653 - 0.6942182779312134 - <_> - - <_> - - - - <_>7 13 8 3 -1. - <_>7 13 4 3 2. - 0 - 5.5776340886950493e-003 - 0.0783748626708984 - -0.4076493084430695 - <_> - - <_> - - - - <_>8 13 6 4 -1. - <_>11 13 3 4 2. - 0 - 5.0974669866263866e-003 - 0.1500179022550583 - -0.2762084901332855 - <_> - - <_> - - - - <_>11 7 3 8 -1. - <_>12 8 1 8 3. - 1 - 0.0241340193897486 - -0.0376859717071056 - 0.4011130928993225 - <_> - - <_> - - - - <_>5 1 6 8 -1. - <_>7 1 2 8 3. - 0 - 2.6251180097460747e-003 - -0.1898688971996307 - 0.1666657030582428 - <_> - - <_> - - - - <_>14 14 6 4 -1. - <_>14 16 6 2 2. - 0 - -0.0231797192245722 - -0.6080746054649353 - 0.0330169312655926 - <_> - - <_> - - - - <_>11 7 8 3 -1. - <_>10 8 8 1 3. - 1 - -1.7960369586944580e-003 - 0.1832838952541351 - -0.1630056053400040 - <_> - - <_> - - - - <_>12 3 3 12 -1. - <_>8 7 3 4 3. - 1 - 0.1132725030183792 - 0.0163923595100641 - -0.3852145075798035 - <_> - - <_> - - - - <_>8 5 5 6 -1. - <_>8 8 5 3 2. - 0 - -0.0111209303140640 - -0.2678939104080200 - 0.1203088015317917 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 3 8 2 2. - 1 - 8.9298561215400696e-003 - -0.0647662431001663 - 0.0524467006325722 - <_> - - <_> - - - - <_>7 5 8 6 -1. - <_>9 5 4 6 2. - 0 - 0.0302645191550255 - -0.0533437095582485 - 0.4917060136795044 - <_> - - <_> - - - - <_>11 4 6 6 -1. - <_>9 6 6 2 3. - 1 - 0.1303624063730240 - 9.9123492836952209e-003 - -0.8077524900436401 - <_> - - <_> - - - - <_>11 4 6 6 -1. - <_>13 6 2 6 3. - 1 - -4.8941900022327900e-003 - 0.1415328979492188 - -0.2422267943620682 - <_> - - <_> - - - - <_>12 8 6 4 -1. - <_>12 8 3 4 2. - 1 - -0.0180093497037888 - -0.1835270971059799 - 0.0537842698395252 - <_> - - <_> - - - - <_>5 15 8 3 -1. - <_>9 15 4 3 2. - 0 - 6.3028637669049203e-005 - -0.2083622068166733 - 0.1386117935180664 - <_> - - <_> - - - - <_>0 5 22 13 -1. - <_>0 5 11 13 2. - 0 - -0.3812729120254517 - -0.7652782201766968 - 0.0345780998468399 - <_> - - <_> - - - - <_>2 12 9 6 -1. - <_>5 12 3 6 3. - 0 - 0.0161685701459646 - -0.0785770490765572 - 0.3608635067939758 - <_> - - <_> - - - - <_>19 1 3 10 -1. - <_>19 6 3 5 2. - 0 - -0.0207253806293011 - -0.3290519118309021 - 0.0816933363676071 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 16 12 2 2. - 0 - -1.4763489889446646e-004 - 0.1044917032122612 - -0.2762413918972015 - <_> - - <_> - - - - <_>10 14 10 4 -1. - <_>10 16 10 2 2. - 0 - -0.0169591698795557 - -0.2415079027414322 - 0.0545696802437305 - <_> - - <_> - - - - <_>1 3 14 3 -1. - <_>1 4 14 1 3. - 0 - -0.0152211003005505 - 0.4103314876556397 - -0.0683332532644272 - <_> - - <_> - - - - <_>3 14 16 4 -1. - <_>11 14 8 2 2. - <_>3 16 8 2 2. - 0 - -9.6041243523359299e-003 - -0.3356964886188507 - 0.0862504914402962 - <_> - - <_> - - - - <_>0 14 6 4 -1. - <_>3 14 3 4 2. - 0 - -1.6476860037073493e-003 - 0.1623633056879044 - -0.1904449015855789 - <_> - - <_> - - - - <_>10 1 11 4 -1. - <_>10 3 11 2 2. - 0 - -0.1070583984255791 - -0.8676710724830627 - 7.3941340669989586e-003 - <_> - - <_> - - - - <_>1 1 11 4 -1. - <_>1 3 11 2 2. - 0 - -0.0188181605190039 - -0.3687911033630371 - 0.0688466429710388 - <_> - - <_> - - - - <_>9 3 6 6 -1. - <_>9 5 6 2 3. - 0 - -5.6142187677323818e-003 - 0.1732203960418701 - -0.1251447051763535 - <_> - - <_> - - - - <_>4 5 12 3 -1. - <_>4 6 12 1 3. - 0 - 7.3969298973679543e-003 - -0.0854673683643341 - 0.3202716112136841 - <_> - - <_> - - - - <_>12 0 7 6 -1. - <_>12 3 7 3 2. - 0 - 9.4870915636420250e-003 - 0.0631684064865112 - -0.2091891020536423 - <_> - - <_> - - - - <_>1 3 16 4 -1. - <_>1 4 16 2 2. - 0 - 1.8458140548318624e-003 - -0.1543627977371216 - 0.1851702034473419 - <_> - - <_> - - - - <_>4 9 15 3 -1. - <_>4 10 15 1 3. - 0 - -0.0197473596781492 - 0.3307111859321594 - -0.0767758488655090 - <_> - - <_> - - - - <_>2 4 18 6 -1. - <_>2 4 9 3 2. - <_>11 7 9 3 2. - 0 - 0.0324211604893208 - 0.0820211321115494 - -0.4014750123023987 - <_> - - <_> - - - - <_>13 5 4 13 -1. - <_>14 5 2 13 2. - 0 - 2.9075390193611383e-003 - -0.0771740376949310 - 0.1062069982290268 - <_> - - <_> - - - - <_>4 6 6 4 -1. - <_>4 8 6 2 2. - 0 - 0.0151893598958850 - 0.0603638999164104 - -0.4136523902416229 - <_> - - <_> - - - - <_>8 7 6 5 -1. - <_>8 7 3 5 2. - 0 - -0.0306837391108274 - 0.4347062110900879 - -0.0593813210725784 - <_> - - <_> - - - - <_>10 8 4 6 -1. - <_>10 8 4 3 2. - 1 - -0.0109734497964382 - -0.2953523099422455 - 0.0855164676904678 - <_> - - <_> - - - - <_>6 12 12 4 -1. - <_>6 12 6 4 2. - 0 - -0.0395403616130352 - -0.2876588106155396 - 0.0344729684293270 - <_> - - <_> - - - - <_>3 11 10 3 -1. - <_>8 11 5 3 2. - 0 - -0.0379358716309071 - 0.3819986879825592 - -0.0853647664189339 - <_> - - <_> - - - - <_>12 2 3 12 -1. - <_>12 2 3 6 2. - 1 - 0.0306698102504015 - 0.0447380989789963 - -0.1770364046096802 - <_> - - <_> - - - - <_>0 2 14 16 -1. - <_>7 2 7 16 2. - 0 - 0.1719450950622559 - -0.0592141784727573 - 0.4929103851318359 - <_> - - <_> - - - - <_>1 5 20 4 -1. - <_>6 5 10 4 2. - 0 - -6.7055500112473965e-003 - 0.1641025990247726 - -0.2182646989822388 - <_> - - <_> - - - - <_>0 1 18 15 -1. - <_>9 1 9 15 2. - 0 - -0.3857786953449249 - -0.6717677116394043 - 0.0423495918512344 - <_> - - <_> - - - - <_>15 2 6 8 -1. - <_>15 4 6 4 2. - 0 - 0.0272130407392979 - 0.0122661497443914 - -0.2295421063899994 - <_> - - <_> - - - - <_>4 14 13 4 -1. - <_>4 15 13 2 2. - 0 - -0.0192949809134007 - -0.5837343931198120 - 0.0383809991180897 - <_> - - <_> - - - - <_>11 2 3 12 -1. - <_>12 2 1 12 3. - 0 - 7.6792249456048012e-003 - -0.0474903509020805 - 0.1596446037292481 - <_> - - <_> - - - - <_>0 16 15 2 -1. - <_>0 17 15 1 2. - 0 - 6.0242269682930782e-005 - -0.1173423975706101 - 0.1823665052652359 - <_> - - <_> - - - - <_>12 14 6 4 -1. - <_>12 16 6 2 2. - 0 - -6.6498141677584499e-005 - 0.0747451409697533 - -0.1698943972587585 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>5 14 12 2 2. - 0 - 4.3275849893689156e-003 - 0.0737897977232933 - -0.2844434976577759 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>12 14 6 2 3. - 0 - -0.0331404693424702 - -0.4060660898685455 - 0.0100287301465869 - <_> - - <_> - - - - <_>0 9 15 3 -1. - <_>0 10 15 1 3. - 0 - 9.9181402474641800e-003 - -0.0793397873640060 - 0.2819001078605652 - <_> - - <_> - - - - <_>6 9 14 3 -1. - <_>6 10 14 1 3. - 0 - -2.3577339015901089e-003 - 0.1530122011899948 - -0.1047597974538803 - <_> - - <_> - - - - <_>4 12 7 6 -1. - <_>4 14 7 2 3. - 0 - -0.0262008197605610 - -0.5418503284454346 - 0.0443692505359650 - <_> - - <_> - - - - <_>6 6 10 6 -1. - <_>11 6 5 3 2. - <_>6 9 5 3 2. - 0 - 0.0473286584019661 - 0.0188977494835854 - -0.8266593217849731 - -0.9125220179557800 - 7 - -1 - <_> - - - <_> - - <_> - - - - <_>3 0 16 2 -1. - <_>3 0 8 2 2. - 1 - 0.0299217198044062 - -0.3231500089168549 - 0.5109282135963440 - <_> - - <_> - - - - <_>5 9 12 9 -1. - <_>5 12 12 3 3. - 0 - 0.0561476089060307 - -0.1257440000772476 - 0.6674917936325073 - <_> - - <_> - - - - <_>6 9 10 6 -1. - <_>6 12 10 3 2. - 0 - -0.0137598495930433 - 0.4069119095802307 - -0.2107529938220978 - <_> - - <_> - - - - <_>7 4 8 6 -1. - <_>7 6 8 2 3. - 0 - -4.3788701295852661e-003 - 0.2794013917446137 - -0.2095545977354050 - <_> - - <_> - - - - <_>6 5 3 12 -1. - <_>6 11 3 6 2. - 0 - 0.0192088894546032 - -0.0898006930947304 - 0.5093656182289124 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>14 12 2 6 3. - 0 - -8.9393591042608023e-004 - 0.1070362031459808 - -0.1229420006275177 - <_> - - <_> - - - - <_>6 15 8 3 -1. - <_>10 15 4 3 2. - 0 - -6.2918022740632296e-004 - -0.3784793019294739 - 0.1300881952047348 - <_> - - <_> - - - - <_>4 13 14 4 -1. - <_>4 15 14 2 2. - 0 - -1.6248769825324416e-003 - 0.1775002032518387 - -0.2781121134757996 - <_> - - <_> - - - - <_>10 4 11 3 -1. - <_>9 5 11 1 3. - 1 - -4.6151960268616676e-003 - 0.2407151013612747 - -0.1426901072263718 - <_> - - <_> - - - - <_>11 4 4 9 -1. - <_>12 5 2 9 2. - 1 - 0.0571628287434578 - -0.0184748694300652 - 0.4508605897426605 - <_> - - <_> - - - - <_>0 8 13 3 -1. - <_>0 9 13 1 3. - 0 - -3.8265369366854429e-003 - 0.2595176100730896 - -0.1145515963435173 - <_> - - <_> - - - - <_>13 2 6 10 -1. - <_>16 2 3 5 2. - <_>13 7 3 5 2. - 0 - -0.0452351905405521 - -0.3384900987148285 - 0.0345389507710934 - <_> - - <_> - - - - <_>3 2 6 10 -1. - <_>3 2 3 5 2. - <_>6 7 3 5 2. - 0 - 3.8135750219225883e-003 - 0.1133399978280067 - -0.2762039005756378 - <_> - - <_> - - - - <_>11 2 4 11 -1. - <_>11 2 2 11 2. - 1 - 0.0451082587242126 - 0.0286020506173372 - -0.1583766937255859 - <_> - - <_> - - - - <_>4 2 12 3 -1. - <_>4 3 12 1 3. - 0 - -2.7794970665127039e-003 - 0.2889742851257324 - -0.1082272008061409 - <_> - - <_> - - - - <_>12 1 4 12 -1. - <_>12 1 2 12 2. - 1 - 5.6366869248449802e-003 - -0.1018479019403458 - 0.0787871032953262 - <_> - - <_> - - - - <_>11 2 11 4 -1. - <_>11 2 11 2 2. - 1 - -0.0529868192970753 - 0.5296499729156494 - -0.0655433535575867 - <_> - - <_> - - - - <_>11 0 4 9 -1. - <_>11 0 2 9 2. - 1 - 0.0747378915548325 - 0.0263206604868174 - -0.3048720955848694 - <_> - - <_> - - - - <_>11 0 9 4 -1. - <_>11 0 9 2 2. - 1 - 4.1559520177543163e-003 - -0.2297717034816742 - 0.1566217988729477 - <_> - - <_> - - - - <_>16 2 6 10 -1. - <_>19 2 3 5 2. - <_>16 7 3 5 2. - 0 - -2.9388200491666794e-003 - -0.1691641062498093 - 0.0969966724514961 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>10 1 6 1 3. - 1 - -0.0130655104294419 - 0.4025856852531433 - -0.0716143697500229 - <_> - - <_> - - - - <_>11 0 3 8 -1. - <_>12 1 1 8 3. - 1 - -0.0349282510578632 - -0.4944998919963837 - 0.0225478205829859 - <_> - - <_> - - - - <_>11 0 8 3 -1. - <_>10 1 8 1 3. - 1 - 2.1728971041738987e-003 - -0.1555256992578507 - 0.2013621926307678 - <_> - - <_> - - - - <_>17 1 4 12 -1. - <_>19 1 2 6 2. - <_>17 7 2 6 2. - 0 - 0.0143873495981097 - 0.0363481007516384 - -0.2946861982345581 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 6 6 2 2. - 0 - 6.7830132320523262e-003 - -0.0822483524680138 - 0.3385750055313110 - <_> - - <_> - - - - <_>8 5 8 5 -1. - <_>8 5 4 5 2. - 0 - -0.0728838369250298 - -0.3457767069339752 - 0.0196013208478689 - <_> - - <_> - - - - <_>8 4 6 13 -1. - <_>10 4 2 13 3. - 0 - -4.5158518478274345e-003 - 0.1705949008464813 - -0.1974281966686249 - <_> - - <_> - - - - <_>16 3 6 8 -1. - <_>19 3 3 4 2. - <_>16 7 3 4 2. - 0 - -0.0137420799583197 - -0.2121434956789017 - 0.0339536890387535 - <_> - - <_> - - - - <_>0 3 6 8 -1. - <_>0 3 3 4 2. - <_>3 7 3 4 2. - 0 - 7.8056701458990574e-003 - 0.0714266970753670 - -0.3422398865222931 - <_> - - <_> - - - - <_>10 9 12 4 -1. - <_>16 9 6 2 2. - <_>10 11 6 2 2. - 0 - 0.0216499902307987 - -0.0619250498712063 - 0.3726766109466553 - <_> - - <_> - - - - <_>1 2 9 12 -1. - <_>4 6 3 4 9. - 0 - -0.0677066370844841 - -0.3030416071414948 - 0.0943575873970985 - <_> - - <_> - - - - <_>15 12 4 6 -1. - <_>15 12 2 6 2. - 0 - -2.1855749655514956e-003 - 0.1083177030086517 - -0.1553054004907608 - <_> - - <_> - - - - <_>5 15 12 3 -1. - <_>11 15 6 3 2. - 0 - -2.5483060162514448e-003 - -0.2410344034433365 - 0.0929162874817848 - <_> - - <_> - - - - <_>2 16 20 2 -1. - <_>2 16 10 2 2. - 0 - -0.0672078132629395 - -0.6625934839248657 - 0.0160746499896050 - <_> - - <_> - - - - <_>1 8 10 6 -1. - <_>1 8 5 3 2. - <_>6 11 5 3 2. - 0 - 0.0477993711829185 - -0.0444126389920712 - 0.6056978702545166 - <_> - - <_> - - - - <_>6 3 16 14 -1. - <_>14 3 8 7 2. - <_>6 10 8 7 2. - 0 - -0.0911784172058105 - 0.2476149052381516 - -0.0347624011337757 - <_> - - <_> - - - - <_>1 4 6 8 -1. - <_>1 4 3 4 2. - <_>4 8 3 4 2. - 0 - -3.8592480123043060e-003 - -0.2536674141883850 - 0.1019499972462654 - <_> - - <_> - - - - <_>7 2 12 4 -1. - <_>7 3 12 2 2. - 0 - 2.4100970476865768e-003 - -0.1213397011160851 - 0.1976791024208069 - <_> - - <_> - - - - <_>1 9 6 9 -1. - <_>4 9 3 9 2. - 0 - -5.3831469267606735e-003 - 0.1710394024848938 - -0.1618983000516892 - <_> - - <_> - - - - <_>12 14 10 4 -1. - <_>12 14 5 4 2. - 0 - 9.1004222631454468e-003 - -0.0609215497970581 - 0.1769524961709976 - <_> - - <_> - - - - <_>2 12 12 5 -1. - <_>5 12 6 5 2. - 0 - 2.2724110167473555e-003 - -0.0904769673943520 - 0.2744063138961792 - <_> - - <_> - - - - <_>15 12 6 6 -1. - <_>17 12 2 6 3. - 0 - -0.0806215628981590 - -0.8804556727409363 - 0.0171932391822338 - <_> - - <_> - - - - <_>1 12 6 6 -1. - <_>3 12 2 6 3. - 0 - 3.8965709973126650e-003 - -0.1703792065382004 - 0.1797958016395569 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>10 12 2 6 3. - 0 - -4.3093641288578510e-003 - -0.2938205003738403 - 0.0863174721598625 - -1.1653599739074707 - 8 - -1 - <_> - - - <_> - - <_> - - - - <_>5 2 12 16 -1. - <_>5 10 12 8 2. - 0 - -0.0631161928176880 - 0.5551251769065857 - -0.3599770963191986 - <_> - - <_> - - - - <_>4 2 18 14 -1. - <_>4 9 18 7 2. - 0 - 0.0843502879142761 - -0.1253127008676529 - 0.5356768965721130 - <_> - - <_> - - - - <_>5 4 12 14 -1. - <_>5 11 12 7 2. - 0 - -0.2139073014259338 - 0.7515686154365540 - -0.0882708728313446 - <_> - - <_> - - - - <_>2 5 20 8 -1. - <_>7 5 10 8 2. - 0 - -0.0297449808567762 - 0.2010620981454849 - -0.1210668981075287 - <_> - - <_> - - - - <_>8 0 10 7 -1. - <_>8 0 5 7 2. - 1 - -0.1198768019676209 - 0.6469219923019409 - -0.0777476131916046 - <_> - - <_> - - - - <_>12 0 5 8 -1. - <_>12 0 5 4 2. - 1 - 3.0843529384583235e-003 - -0.0630676373839378 - 0.0778890773653984 - <_> - - <_> - - - - <_>7 4 6 13 -1. - <_>10 4 3 13 2. - 0 - -4.5560211874544621e-003 - 0.1897227019071579 - -0.1992907971143723 - <_> - - <_> - - - - <_>7 14 8 4 -1. - <_>7 16 8 2 2. - 0 - 4.4629329931922257e-004 - 0.1405158936977387 - -0.3029241859912872 - <_> - - <_> - - - - <_>8 0 3 12 -1. - <_>9 0 1 12 3. - 0 - -6.4954371191561222e-003 - 0.3194229006767273 - -0.1107200011610985 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - -2.1751760505139828e-003 - 0.1647725999355316 - -0.0804247781634331 - <_> - - <_> - - - - <_>4 0 3 12 -1. - <_>4 4 3 4 3. - 0 - 6.5875840373337269e-003 - 0.1471655070781708 - -0.3019815087318420 - <_> - - <_> - - - - <_>11 3 3 15 -1. - <_>12 3 1 15 3. - 0 - 0.0207012090831995 - -0.0429966896772385 - 0.4012382030487061 - <_> - - <_> - - - - <_>5 12 7 6 -1. - <_>5 14 7 2 3. - 0 - 2.5877119041979313e-003 - 0.1263054013252258 - -0.2751812040805817 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - -0.0105450795963407 - 0.1963762938976288 - -0.0397727787494659 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>9 6 1 12 3. - 0 - 6.2396968714892864e-003 - -0.0835634097456932 - 0.3665548861026764 - <_> - - <_> - - - - <_>5 16 12 2 -1. - <_>5 16 6 2 2. - 0 - 0.0144586702808738 - 0.0633016973733902 - -0.5849890708923340 - <_> - - <_> - - - - <_>1 12 20 6 -1. - <_>6 12 10 6 2. - 0 - 0.0312634408473969 - -0.1067527011036873 - 0.3485285937786102 - <_> - - <_> - - - - <_>8 11 9 4 -1. - <_>11 11 3 4 3. - 0 - 1.4865349512547255e-003 - 0.1370967030525208 - -0.1373165994882584 - <_> - - <_> - - - - <_>5 11 9 4 -1. - <_>8 11 3 4 3. - 0 - -1.7898039368446916e-004 - 0.1783964931964874 - -0.2575171887874603 - <_> - - <_> - - - - <_>11 6 9 12 -1. - <_>14 10 3 4 9. - 0 - 0.0777144730091095 - 0.0570818483829498 - -0.2427340000867844 - <_> - - <_> - - - - <_>2 6 9 12 -1. - <_>5 10 3 4 9. - 0 - 0.0222282707691193 - 0.1459379047155380 - -0.2099460959434509 - <_> - - <_> - - - - <_>5 9 12 2 -1. - <_>5 10 12 1 2. - 0 - 1.6969949938356876e-003 - -0.1441888958215714 - 0.2737540900707245 - <_> - - <_> - - - - <_>0 3 16 3 -1. - <_>4 3 8 3 2. - 0 - -0.0200234707444906 - -0.3755624890327454 - 0.0816276967525482 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - 3.8644319865852594e-003 - -0.0644904300570488 - 0.1592168956995010 - <_> - - <_> - - - - <_>0 2 14 3 -1. - <_>0 3 14 1 3. - 0 - -3.0527650378644466e-003 - 0.2675152122974396 - -0.1053185015916824 - <_> - - <_> - - - - <_>10 2 12 3 -1. - <_>10 3 12 1 3. - 0 - 5.6112320162355900e-003 - -0.0685677304863930 - 0.2123499065637589 - <_> - - <_> - - - - <_>5 14 12 3 -1. - <_>11 14 6 3 2. - 0 - 4.6622268855571747e-003 - 0.1425414979457855 - -0.2089271992444992 - <_> - - <_> - - - - <_>8 13 8 3 -1. - <_>8 13 4 3 2. - 0 - 2.4710448924452066e-003 - 0.0726143866777420 - -0.1883390992879868 - <_> - - <_> - - - - <_>9 2 4 8 -1. - <_>9 6 4 4 2. - 0 - 0.0126550002023578 - -0.0836052596569061 - 0.4326224029064179 - <_> - - <_> - - - - <_>15 1 3 11 -1. - <_>16 2 1 11 3. - 1 - -0.0177245195955038 - 0.1743223071098328 - -0.0284798201173544 - <_> - - <_> - - - - <_>8 1 10 4 -1. - <_>7 2 10 2 2. - 1 - -7.2321272455155849e-004 - 0.1534397006034851 - -0.2401217967271805 - <_> - - <_> - - - - <_>5 5 15 3 -1. - <_>5 6 15 1 3. - 0 - -6.2155709601938725e-003 - 0.2516668140888214 - -0.0855198875069618 - <_> - - <_> - - - - <_>5 1 9 5 -1. - <_>8 1 3 5 3. - 0 - 0.0416327714920044 - 0.0505938008427620 - -0.6096544265747070 - <_> - - <_> - - - - <_>14 0 4 18 -1. - <_>15 0 2 18 2. - 0 - 0.0239183008670807 - -0.0368096604943275 - 0.3905547857284546 - <_> - - <_> - - - - <_>6 0 5 16 -1. - <_>6 8 5 8 2. - 0 - -7.4353138916194439e-003 - 0.1501857936382294 - -0.1862781941890717 - <_> - - <_> - - - - <_>12 4 4 8 -1. - <_>12 8 4 4 2. - 0 - -0.0205714497715235 - -0.2857455909252167 - 0.0483023785054684 - <_> - - <_> - - - - <_>11 4 10 2 -1. - <_>11 4 10 1 2. - 1 - -7.3831980116665363e-003 - 0.3668056130409241 - -0.0960677564144135 - <_> - - <_> - - - - <_>10 0 12 3 -1. - <_>14 0 4 3 3. - 0 - 9.7222924232482910e-003 - 0.0638980194926262 - -0.1726257950067520 - <_> - - <_> - - - - <_>0 2 20 13 -1. - <_>5 2 10 13 2. - 0 - -0.0218076296150684 - 0.1802726984024048 - -0.1910911947488785 - <_> - - <_> - - - - <_>12 4 4 8 -1. - <_>12 8 4 4 2. - 0 - 0.0581476688385010 - 8.5709961131215096e-003 - -0.4625082910060883 - <_> - - <_> - - - - <_>6 4 4 8 -1. - <_>6 8 4 4 2. - 0 - -9.4539504498243332e-003 - -0.2890872955322266 - 0.1142157018184662 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - -0.0210807099938393 - 0.3757005035877228 - -0.0255910307168961 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>9 6 1 12 3. - 0 - -4.0629571303725243e-003 - 0.2714667022228241 - -0.1084538027644157 - <_> - - <_> - - - - <_>7 1 14 2 -1. - <_>7 1 7 2 2. - 0 - -0.1282662004232407 - 1. - -1.0962430387735367e-003 - -0.9428492784500122 - 9 - -1 - <_> - - - <_> - - <_> - - - - <_>4 8 14 10 -1. - <_>4 13 14 5 2. - 0 - -0.1266229003667831 - 0.6226822137832642 - -0.1481045931577683 - <_> - - <_> - - - - <_>11 14 9 4 -1. - <_>14 14 3 4 3. - 0 - -7.0846290327608585e-003 - 0.2013377994298935 - -0.1772895008325577 - <_> - - <_> - - - - <_>1 7 17 8 -1. - <_>1 11 17 4 2. - 0 - 0.1145920008420944 - -0.0889758467674255 - 0.5739554166793823 - <_> - - <_> - - - - <_>10 12 7 6 -1. - <_>10 15 7 3 2. - 0 - 3.3472150098532438e-003 - 0.0757082030177116 - -0.2822217941284180 - <_> - - <_> - - - - <_>10 1 8 9 -1. - <_>10 1 4 9 2. - 1 - 0.0519242286682129 - -0.1394848972558975 - 0.2568109035491943 - <_> - - <_> - - - - <_>11 2 4 11 -1. - <_>11 2 2 11 2. - 1 - -0.0413439087569714 - 0.2241418063640595 - -0.0436536706984043 - <_> - - <_> - - - - <_>6 9 4 9 -1. - <_>8 9 2 9 2. - 0 - -0.0320564694702625 - -0.5940976142883301 - 0.0518911592662334 - <_> - - <_> - - - - <_>8 3 12 4 -1. - <_>14 3 6 2 2. - <_>8 5 6 2 2. - 0 - -4.0590870194137096e-003 - 0.1640208065509796 - -0.1552838981151581 - <_> - - <_> - - - - <_>5 14 7 4 -1. - <_>5 16 7 2 2. - 0 - -9.1876718215644360e-005 - 0.1058787032961845 - -0.2826159894466400 - <_> - - <_> - - - - <_>13 0 4 13 -1. - <_>13 0 2 13 2. - 1 - 0.0283582191914320 - 0.0573840290307999 - -0.0670941472053528 - <_> - - <_> - - - - <_>9 0 13 4 -1. - <_>9 0 13 2 2. - 1 - -0.0746625214815140 - 0.5691670775413513 - -0.0487856417894363 - <_> - - <_> - - - - <_>12 9 4 9 -1. - <_>12 12 4 3 3. - 0 - -3.6556490231305361e-003 - 0.2236949056386948 - -0.1220214962959290 - <_> - - <_> - - - - <_>7 4 12 2 -1. - <_>7 4 12 1 2. - 1 - 3.1778779812157154e-003 - 0.1224031969904900 - -0.2768172919750214 - <_> - - <_> - - - - <_>12 5 10 6 -1. - <_>17 5 5 3 2. - <_>12 8 5 3 2. - 0 - 0.0380443409085274 - 0.0232164002954960 - -0.5373290181159973 - <_> - - <_> - - - - <_>1 0 17 3 -1. - <_>1 1 17 1 3. - 0 - 8.7831392884254456e-003 - -0.0743375569581985 - 0.3285123109817505 - <_> - - <_> - - - - <_>15 4 6 8 -1. - <_>18 4 3 4 2. - <_>15 8 3 4 2. - 0 - -5.9818099252879620e-003 - -0.1950477957725525 - 0.0669768527150154 - <_> - - <_> - - - - <_>3 2 4 14 -1. - <_>3 2 2 7 2. - <_>5 9 2 7 2. - 0 - -1.6369449440389872e-003 - 0.1467480063438416 - -0.1802414953708649 - <_> - - <_> - - - - <_>14 8 6 4 -1. - <_>14 8 6 2 2. - 1 - -0.0991931334137917 - 0.6836351752281189 - -0.0296527203172445 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 1 - -0.0103520099073648 - 0.3422530889511108 - -0.0811415389180183 - <_> - - <_> - - - - <_>12 1 4 16 -1. - <_>14 1 2 8 2. - <_>12 9 2 8 2. - 0 - 0.0256379097700119 - 0.0514169000089169 - -0.1669799983501434 - <_> - - <_> - - - - <_>7 0 6 8 -1. - <_>7 0 3 4 2. - <_>10 4 3 4 2. - 0 - -1.2416959507390857e-003 - 0.1248890012502670 - -0.2134622037410736 - <_> - - <_> - - - - <_>8 12 6 5 -1. - <_>8 12 3 5 2. - 0 - 1.5018839621916413e-003 - 0.0979343876242638 - -0.2638502120971680 - <_> - - <_> - - - - <_>7 5 6 12 -1. - <_>7 5 3 6 2. - <_>10 11 3 6 2. - 0 - -0.0327036790549755 - 0.5750488042831421 - -0.0458754003047943 - <_> - - <_> - - - - <_>15 5 6 6 -1. - <_>15 5 3 6 2. - 1 - 0.0212971698492765 - 0.0610693804919720 - -0.2248021960258484 - <_> - - <_> - - - - <_>6 10 3 8 -1. - <_>6 14 3 4 2. - 0 - -8.8358018547296524e-004 - 0.0956257879734039 - -0.2756459116935730 - <_> - - <_> - - - - <_>4 0 14 3 -1. - <_>4 1 14 1 3. - 0 - -3.6556860432028770e-003 - 0.2410708963871002 - -0.1035951972007752 - <_> - - <_> - - - - <_>0 9 8 3 -1. - <_>4 9 4 3 2. - 0 - 0.0343004614114761 - 0.0390627011656761 - -0.6244534850120544 - <_> - - <_> - - - - <_>9 3 4 6 -1. - <_>9 6 4 3 2. - 0 - 0.0114923501387239 - -0.0692460536956787 - 0.3825817108154297 - <_> - - <_> - - - - <_>3 0 10 10 -1. - <_>3 0 5 5 2. - <_>8 5 5 5 2. - 0 - -3.1294790096580982e-003 - 0.1127336993813515 - -0.2312251031398773 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>5 13 6 4 2. - 0 - -4.0945871733129025e-003 - -0.1719598025083542 - 0.1311265975236893 - <_> - - <_> - - - - <_>6 12 10 3 -1. - <_>11 12 5 3 2. - 0 - -3.0921408906579018e-003 - -0.2546038925647736 - 0.0966591611504555 - <_> - - <_> - - - - <_>12 15 10 3 -1. - <_>12 15 5 3 2. - 0 - -0.0416721291840076 - 0.2732776999473572 - -0.0630946233868599 - <_> - - <_> - - - - <_>0 15 10 3 -1. - <_>5 15 5 3 2. - 0 - 0.0113844601437449 - -0.0718725174665451 - 0.4116039872169495 - <_> - - <_> - - - - <_>3 0 17 14 -1. - <_>3 7 17 7 2. - 0 - -0.0239341501146555 - 0.1319234073162079 - -0.1795483976602554 - <_> - - <_> - - - - <_>9 0 4 16 -1. - <_>9 0 2 8 2. - <_>11 8 2 8 2. - 0 - -0.0315541699528694 - -0.5879213213920593 - 0.0417828895151615 - <_> - - <_> - - - - <_>11 4 6 8 -1. - <_>11 8 6 4 2. - 0 - -0.0240338593721390 - -0.1553476005792618 - 0.0277002602815628 - <_> - - <_> - - - - <_>0 9 12 3 -1. - <_>0 10 12 1 3. - 0 - 0.0315894708037376 - -0.0391502790153027 - 0.6095172166824341 - <_> - - <_> - - - - <_>1 5 20 8 -1. - <_>11 5 10 4 2. - <_>1 9 10 4 2. - 0 - -0.0242148600518703 - -0.2458761930465698 - 0.0911332964897156 - <_> - - <_> - - - - <_>1 8 13 3 -1. - <_>1 9 13 1 3. - 0 - 1.9322870066389441e-003 - -0.1164783984422684 - 0.1881929039955139 - <_> - - <_> - - - - <_>8 8 14 3 -1. - <_>8 9 14 1 3. - 0 - -3.6017759703099728e-003 - 0.0976005122065544 - -0.0489180907607079 - <_> - - <_> - - - - <_>4 16 14 2 -1. - <_>4 17 14 1 2. - 0 - 3.1516118906438351e-003 - 0.0658088698983192 - -0.3157765865325928 - <_> - - <_> - - - - <_>11 1 3 6 -1. - <_>12 2 1 6 3. - 1 - -0.0636770725250244 - -0.8641548156738281 - -9.9097320344299078e-004 - <_> - - <_> - - - - <_>11 1 6 3 -1. - <_>10 2 6 1 3. - 1 - -3.9085028693079948e-003 - 0.2082621008157730 - -0.1056023016571999 - <_> - - <_> - - - - <_>13 1 6 10 -1. - <_>16 1 3 5 2. - <_>13 6 3 5 2. - 0 - -0.0268377196043730 - -0.1837512999773026 - 0.0295453295111656 - <_> - - <_> - - - - <_>11 0 10 3 -1. - <_>10 1 10 1 3. - 1 - 3.1312298960983753e-003 - -0.1262668967247009 - 0.1688859015703201 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>13 2 1 12 3. - 1 - -0.0734918713569641 - -1. - 5.6774187833070755e-003 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>9 2 12 1 3. - 1 - 0.0180348195135593 - -0.0686174109578133 - 0.3343813121318817 - <_> - - <_> - - - - <_>13 1 6 10 -1. - <_>16 1 3 5 2. - <_>13 6 3 5 2. - 0 - 0.0686559975147247 - 4.6462309546768665e-003 - -0.8066462874412537 - <_> - - <_> - - - - <_>3 1 6 10 -1. - <_>3 1 3 5 2. - <_>6 6 3 5 2. - 0 - -4.6970890834927559e-003 - -0.2012176960706711 - 0.1158004030585289 - <_> - - <_> - - - - <_>14 7 6 10 -1. - <_>17 7 3 5 2. - <_>14 12 3 5 2. - 0 - 0.0467838905751705 - -0.0358026996254921 - 0.4162563979625702 - <_> - - <_> - - - - <_>3 2 6 8 -1. - <_>3 2 3 4 2. - <_>6 6 3 4 2. - 0 - 4.5946058817207813e-003 - 0.0884575769305229 - -0.2689448893070221 - <_> - - <_> - - - - <_>11 14 9 4 -1. - <_>14 14 3 4 3. - 0 - -1.3852829579263926e-003 - 0.0813912227749825 - -0.1488042026758194 - <_> - - <_> - - - - <_>1 8 15 8 -1. - <_>1 12 15 4 2. - 0 - 0.0217887591570616 - -0.0916404575109482 - 0.2126124948263168 - <_> - - <_> - - - - <_>9 12 8 4 -1. - <_>9 14 8 2 2. - 0 - -1.3380090240389109e-004 - 0.0964247435331345 - -0.1471737027168274 - <_> - - <_> - - - - <_>6 5 7 6 -1. - <_>6 7 7 2 3. - 0 - -0.0479904115200043 - -0.6198713183403015 - 0.0387607105076313 - <_> - - <_> - - - - <_>9 5 6 5 -1. - <_>9 5 3 5 2. - 0 - 0.0200260095298290 - -0.0359724201261997 - 0.1939342021942139 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>2 12 4 6 2. - 0 - 1.0723130544647574e-003 - -0.1944749951362610 - 0.1206495016813278 - <_> - - <_> - - - - <_>14 8 6 4 -1. - <_>14 8 3 4 2. - 1 - 0.0226650908589363 - 0.0487194396555424 - -0.2364079952239990 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 4 3 2. - 1 - -0.0110421096906066 - -0.2610734105110169 - 0.1007549017667770 - <_> - - <_> - - - - <_>9 4 6 8 -1. - <_>11 4 2 8 3. - 0 - -0.0128110498189926 - 0.1519962996244431 - -0.0885529592633247 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>9 4 2 8 3. - 0 - -0.0366286486387253 - 0.3885886073112488 - -0.0773045495152473 - -0.9562031030654907 - 10 - -1 - <_> - - - <_> - - <_> - - - - <_>0 15 10 3 -1. - <_>5 15 5 3 2. - 0 - -0.0546066388487816 - 0.5580134987831116 - -0.1416888982057571 - <_> - - <_> - - - - <_>11 5 3 9 -1. - <_>12 6 1 9 3. - 1 - 0.0335337407886982 - -0.0273862797766924 - 0.4438177049160004 - <_> - - <_> - - - - <_>11 5 9 3 -1. - <_>10 6 9 1 3. - 1 - -9.9635301157832146e-003 - 0.2519390881061554 - -0.1464754045009613 - <_> - - <_> - - - - <_>12 6 8 4 -1. - <_>12 6 8 2 2. - 1 - 1.8188880058005452e-003 - -0.1126412004232407 - 0.1152326017618179 - <_> - - <_> - - - - <_>10 6 4 8 -1. - <_>10 6 2 8 2. - 1 - -0.0487938299775124 - 0.5131710767745972 - -0.0786650180816650 - <_> - - <_> - - - - <_>13 0 5 12 -1. - <_>13 0 5 6 2. - 1 - -0.0133577696979046 - -0.1419797986745834 - 0.1186259984970093 - <_> - - <_> - - - - <_>1 3 12 4 -1. - <_>4 3 6 4 2. - 0 - 1.1562240542843938e-003 - -0.2094922065734863 - 0.1569304019212723 - <_> - - <_> - - - - <_>15 7 6 5 -1. - <_>15 7 3 5 2. - 0 - -6.2384512275457382e-003 - -0.1433645039796829 - 0.1130355000495911 - <_> - - <_> - - - - <_>1 7 12 3 -1. - <_>1 8 12 1 3. - 0 - 4.4234818778932095e-003 - -0.1035858020186424 - 0.2458948940038681 - <_> - - <_> - - - - <_>15 7 6 5 -1. - <_>15 7 3 5 2. - 0 - 0.0529644489288330 - 0.0125615503638983 - -0.6255180835723877 - <_> - - <_> - - - - <_>1 7 6 5 -1. - <_>4 7 3 5 2. - 0 - 5.5844681337475777e-003 - 0.0839678868651390 - -0.2465379983186722 - <_> - - <_> - - - - <_>12 13 6 4 -1. - <_>12 15 6 2 2. - 0 - -4.1809541289694607e-004 - 0.0695880725979805 - -0.1355881989002228 - <_> - - <_> - - - - <_>5 12 12 6 -1. - <_>5 12 6 3 2. - <_>11 15 6 3 2. - 0 - -8.9637134224176407e-003 - -0.3044273853302002 - 0.0698947235941887 - <_> - - <_> - - - - <_>11 5 2 9 -1. - <_>11 5 1 9 2. - 1 - 0.0244790501892567 - -0.0316518284380436 - 0.2030878961086273 - <_> - - <_> - - - - <_>11 5 9 2 -1. - <_>11 5 9 1 2. - 1 - -0.0258423294872046 - 0.5040106177330017 - -0.0639220625162125 - <_> - - <_> - - - - <_>10 12 9 4 -1. - <_>13 12 3 4 3. - 0 - -2.0785620436072350e-003 - 0.1098022013902664 - -0.1183955967426300 - <_> - - <_> - - - - <_>8 6 6 6 -1. - <_>8 6 6 3 2. - 1 - 0.0680303424596787 - 0.0422907397150993 - -0.5185551047325134 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 14 3 4 2. - 0 - -7.0639760233461857e-003 - -0.2003110051155090 - 0.0249556098133326 - <_> - - <_> - - - - <_>0 2 14 3 -1. - <_>0 3 14 1 3. - 0 - -3.4848200157284737e-003 - 0.2313532978296280 - -0.0969895571470261 - <_> - - <_> - - - - <_>8 2 12 3 -1. - <_>8 3 12 1 3. - 0 - 0.0131471604108810 - -0.0374509505927563 - 0.2584278881549835 - <_> - - <_> - - - - <_>8 7 5 6 -1. - <_>8 7 5 3 2. - 1 - -0.0142716597765684 - -0.3011017143726349 - 0.0796723365783691 - <_> - - <_> - - - - <_>12 6 8 3 -1. - <_>12 6 4 3 2. - 1 - 0.0126534802839160 - 0.0490391403436661 - -0.1498810946941376 - <_> - - <_> - - - - <_>4 10 4 6 -1. - <_>6 10 2 6 2. - 0 - -4.4893440790474415e-003 - 0.1720885932445526 - -0.1535564959049225 - <_> - - <_> - - - - <_>1 11 20 4 -1. - <_>6 11 10 4 2. - 0 - 0.0323654003441334 - -0.0904931128025055 - 0.3577916026115418 - <_> - - <_> - - - - <_>6 10 8 7 -1. - <_>8 10 4 7 2. - 0 - 4.6125808730721474e-003 - 0.1144519001245499 - -0.2651948928833008 - <_> - - <_> - - - - <_>11 3 3 9 -1. - <_>12 4 1 9 3. - 1 - 0.0286459308117628 - -0.0359885394573212 - 0.3002552092075348 - <_> - - <_> - - - - <_>0 8 22 4 -1. - <_>11 8 11 4 2. - 0 - -0.0235719792544842 - -0.2487282007932663 - 0.0919671207666397 - <_> - - <_> - - - - <_>3 10 16 3 -1. - <_>3 10 8 3 2. - 0 - -0.0107397995889187 - -0.2136776000261307 - 0.0964774116873741 - <_> - - <_> - - - - <_>11 3 9 3 -1. - <_>10 4 9 1 3. - 1 - 0.0237286593765020 - -0.0709161981940269 - 0.4382875859737396 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - -0.3280070126056671 - 0.5884003043174744 - -0.0317567884922028 - <_> - - <_> - - - - <_>7 12 4 6 -1. - <_>9 12 2 6 2. - 0 - 7.5008560997957829e-006 - -0.1828856021165848 - 0.1202294006943703 - <_> - - <_> - - - - <_>9 12 6 6 -1. - <_>9 12 3 6 2. - 0 - 0.0300714094191790 - 0.0278020203113556 - -0.4322428107261658 - <_> - - <_> - - - - <_>2 13 16 5 -1. - <_>10 13 8 5 2. - 0 - -2.1936609409749508e-003 - 0.1359242051839829 - -0.1403862982988358 - <_> - - <_> - - - - <_>12 12 8 3 -1. - <_>12 12 4 3 2. - 0 - 0.0201743394136429 - -0.0616289190948009 - 0.3157976865768433 - <_> - - <_> - - - - <_>10 4 12 2 -1. - <_>10 4 6 2 2. - 1 - 9.7460206598043442e-003 - 0.0889580324292183 - -0.2259400933980942 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 3 4 4 2. - 1 - -0.0129583403468132 - -0.1220085024833679 - 0.0865180864930153 - <_> - - <_> - - - - <_>4 6 10 3 -1. - <_>9 6 5 3 2. - 0 - 0.0114454999566078 - -0.0641823336482048 - 0.3027974963188171 - <_> - - <_> - - - - <_>10 1 6 8 -1. - <_>13 1 3 4 2. - <_>10 5 3 4 2. - 0 - -3.3802569378167391e-003 - 0.1117767021059990 - -0.1292237937450409 - <_> - - <_> - - - - <_>11 1 6 6 -1. - <_>11 1 6 3 2. - 1 - 0.0203662104904652 - 0.1010453999042511 - -0.2599115967750549 - <_> - - <_> - - - - <_>11 6 6 4 -1. - <_>11 8 6 2 2. - 0 - 0.0380586497485638 - 0.0131683498620987 - -0.7558063268661499 - <_> - - <_> - - - - <_>2 2 12 3 -1. - <_>2 3 12 1 3. - 0 - 2.3050000891089439e-003 - -0.1076664999127388 - 0.1875766962766647 - <_> - - <_> - - - - <_>11 3 8 4 -1. - <_>11 3 4 4 2. - 1 - 0.0518471188843250 - -0.0223205294460058 - 0.1879583001136780 - <_> - - <_> - - - - <_>1 0 8 6 -1. - <_>1 0 4 3 2. - <_>5 3 4 3 2. - 0 - 0.0113830296322703 - 0.0602261610329151 - -0.3596178889274597 - <_> - - <_> - - - - <_>8 3 14 3 -1. - <_>8 4 14 1 3. - 0 - 8.2553178071975708e-003 - -0.0851313918828964 - 0.2349344044923782 - <_> - - <_> - - - - <_>11 3 4 8 -1. - <_>11 3 4 4 2. - 1 - -0.0269843395799398 - -0.2147939950227737 - 0.0936567336320877 - <_> - - <_> - - - - <_>6 0 12 10 -1. - <_>9 0 6 10 2. - 0 - -0.0102899800986052 - 0.0582548901438713 - -0.0839509293437004 - <_> - - <_> - - - - <_>4 16 14 2 -1. - <_>4 17 14 1 2. - 0 - -1.4419780200114474e-005 - 0.1039287000894547 - -0.1731729954481125 - <_> - - <_> - - - - <_>10 11 12 3 -1. - <_>10 12 12 1 3. - 0 - 0.0100651402026415 - -0.0413111187517643 - 0.1761602014303207 - <_> - - <_> - - - - <_>3 0 4 6 -1. - <_>5 0 2 6 2. - 0 - -1.4870229642838240e-004 - 0.1565753966569901 - -0.1203005984425545 - <_> - - <_> - - - - <_>16 12 6 4 -1. - <_>16 12 3 4 2. - 0 - -3.1059589236974716e-003 - 0.1167488023638725 - -0.0913724601268768 - <_> - - <_> - - - - <_>0 13 10 4 -1. - <_>5 13 5 4 2. - 0 - 0.0107080303132534 - -0.0776082277297974 - 0.2791610062122345 - <_> - - <_> - - - - <_>3 1 16 4 -1. - <_>11 1 8 2 2. - <_>3 3 8 2 2. - 0 - -9.7792129963636398e-003 - -0.2906092107295990 - 0.0715626403689384 - <_> - - <_> - - - - <_>0 1 11 4 -1. - <_>0 3 11 2 2. - 0 - 0.0201219804584980 - 0.0439949594438076 - -0.4253950119018555 - <_> - - <_> - - - - <_>6 8 11 6 -1. - <_>6 11 11 3 2. - 0 - -0.0632951632142067 - 0.3703423142433167 - -0.0525498092174530 - <_> - - <_> - - - - <_>8 5 5 10 -1. - <_>8 10 5 5 2. - 0 - -0.0872895568609238 - -0.6429927945137024 - 0.0319528691470623 - <_> - - <_> - - - - <_>9 2 4 6 -1. - <_>9 5 4 3 2. - 0 - 0.0203985404223204 - -0.0459555983543396 - 0.4626615941524506 - <_> - - <_> - - - - <_>2 3 12 6 -1. - <_>2 3 6 3 2. - <_>8 6 6 3 2. - 0 - -4.0313000790774822e-003 - 0.1384084969758987 - -0.1798083931207657 - <_> - - <_> - - - - <_>13 3 7 9 -1. - <_>13 6 7 3 3. - 0 - -0.0157345198094845 - -0.1847718060016632 - 0.0699830800294876 - <_> - - <_> - - - - <_>2 3 7 9 -1. - <_>2 6 7 3 3. - 0 - 3.3332880120724440e-003 - 0.1127765029668808 - -0.1951379030942917 - <_> - - <_> - - - - <_>11 0 3 6 -1. - <_>12 1 1 6 3. - 1 - 0.0436891615390778 - 5.9510939754545689e-003 - -0.5542343854904175 - <_> - - <_> - - - - <_>3 3 13 3 -1. - <_>3 4 13 1 3. - 0 - -2.0920610986649990e-003 - 0.1916346997022629 - -0.0971361100673676 - <_> - - <_> - - - - <_>8 3 14 3 -1. - <_>8 4 14 1 3. - 0 - 2.0574270747601986e-003 - -0.1019743010401726 - 0.1408381015062332 - <_> - - <_> - - - - <_>3 6 7 12 -1. - <_>3 9 7 6 2. - 0 - 8.8018123060464859e-003 - 0.1198780983686447 - -0.1563854962587357 - <_> - - <_> - - - - <_>12 13 6 4 -1. - <_>12 15 6 2 2. - 0 - -0.0168825294822454 - -0.1843809932470322 - 0.0194928701967001 - <_> - - <_> - - - - <_>4 13 6 4 -1. - <_>4 15 6 2 2. - 0 - -6.1647890834137797e-004 - 0.1066510975360870 - -0.2216400951147080 - <_> - - <_> - - - - <_>6 1 15 2 -1. - <_>6 2 15 1 2. - 0 - 1.0317339911125600e-004 - -0.1122889965772629 - 0.1385865062475205 - <_> - - <_> - - - - <_>4 3 3 12 -1. - <_>5 3 1 12 3. - 0 - 0.0153163298964500 - -0.0506394095718861 - 0.4111982882022858 - <_> - - <_> - - - - <_>14 4 2 12 -1. - <_>14 4 2 6 2. - 1 - 0.0106606902554631 - 0.0588208101689816 - -0.1645466983318329 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>10 1 6 1 3. - 1 - -0.0192968696355820 - 0.3926095962524414 - -0.0527611896395683 - <_> - - <_> - - - - <_>4 9 14 5 -1. - <_>4 9 7 5 2. - 0 - 0.0100181102752686 - 0.1006847023963928 - -0.1975626945495606 - <_> - - <_> - - - - <_>11 2 10 3 -1. - <_>10 3 10 1 3. - 1 - -0.0272637903690338 - 0.3533208966255188 - -0.0553055517375469 - <_> - - <_> - - - - <_>9 12 7 6 -1. - <_>9 14 7 2 3. - 0 - 5.4494310170412064e-003 - 0.0672537684440613 - -0.1838447004556656 - -0.8770840764045715 - 11 - -1 - <_> - - - <_> - - <_> - - - - <_>1 8 8 10 -1. - <_>1 8 4 5 2. - <_>5 13 4 5 2. - 0 - -0.0574348606169224 - 0.5058255195617676 - -0.1227457001805306 - <_> - - <_> - - - - <_>5 5 12 5 -1. - <_>9 5 4 5 3. - 0 - -0.1275065988302231 - 0.5760596990585327 - -0.0437109284102917 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 1 - -0.0636756420135498 - 0.5712252259254456 - -0.0499683208763599 - <_> - - <_> - - - - <_>7 6 8 10 -1. - <_>7 11 8 5 2. - 0 - -0.0119284801185131 - 0.2164193987846375 - -0.1848026961088181 - <_> - - <_> - - - - <_>6 14 6 4 -1. - <_>9 14 3 4 2. - 0 - 1.3247699826024473e-004 - -0.2268567979335785 - 0.1064827963709831 - <_> - - <_> - - - - <_>5 15 12 2 -1. - <_>5 16 12 1 2. - 0 - 6.4140267204493284e-004 - 0.0947516784071922 - -0.2689200937747955 - <_> - - <_> - - - - <_>6 4 10 6 -1. - <_>6 6 10 2 3. - 0 - -2.9463530518114567e-003 - 0.1391091048717499 - -0.1709107011556625 - <_> - - <_> - - - - <_>9 12 8 6 -1. - <_>9 14 8 2 3. - 0 - 5.3384741768240929e-003 - 0.0839692428708076 - -0.0954419896006584 - <_> - - <_> - - - - <_>1 11 20 5 -1. - <_>6 11 10 5 2. - 0 - 0.0587031506001949 - -0.0696475207805634 - 0.3362944126129150 - <_> - - <_> - - - - <_>10 8 8 4 -1. - <_>10 8 4 4 2. - 0 - -2.5406300555914640e-003 - 0.0961760133504868 - -0.1575814038515091 - <_> - - <_> - - - - <_>2 4 18 6 -1. - <_>2 6 18 2 3. - 0 - -0.0318995192646980 - -0.2795648872852325 - 0.0703595131635666 - <_> - - <_> - - - - <_>8 4 12 11 -1. - <_>8 4 6 11 2. - 0 - -0.3202270865440369 - -0.9080504775047302 - 7.5922380201518536e-003 - <_> - - <_> - - - - <_>11 5 11 2 -1. - <_>11 5 11 1 2. - 1 - 0.0357962511479855 - -0.0500707700848579 - 0.4210157990455627 - <_> - - <_> - - - - <_>3 6 18 9 -1. - <_>9 9 6 3 9. - 0 - -0.1907916069030762 - -0.2206103056669235 - 0.0651847869157791 - <_> - - <_> - - - - <_>3 2 10 9 -1. - <_>8 2 5 9 2. - 0 - -0.0121818296611309 - 0.1347943991422653 - -0.1666775047779083 - <_> - - <_> - - - - <_>14 5 6 6 -1. - <_>16 5 2 6 3. - 0 - -0.0321657992899418 - -0.2510541081428528 - 0.0193445608019829 - <_> - - <_> - - - - <_>5 5 12 6 -1. - <_>8 5 6 6 2. - 0 - 0.0362996309995651 - -0.0594907812774181 - 0.4000773131847382 - <_> - - <_> - - - - <_>11 3 10 4 -1. - <_>11 3 5 4 2. - 1 - 0.0202245805412531 - 0.0564897991716862 - -0.1341823935508728 - <_> - - <_> - - - - <_>6 3 8 6 -1. - <_>6 3 4 3 2. - <_>10 6 4 3 2. - 0 - -0.0253931302577257 - 0.3650783896446228 - -0.0660021826624870 - <_> - - <_> - - - - <_>16 0 3 15 -1. - <_>16 5 3 5 3. - 0 - -0.0120223695412278 - -0.1765505969524384 - 0.0739976391196251 - <_> - - <_> - - - - <_>3 0 3 15 -1. - <_>3 5 3 5 3. - 0 - 0.0479651391506195 - 0.0446685589849949 - -0.4458498060703278 - <_> - - <_> - - - - <_>5 2 12 16 -1. - <_>8 2 6 16 2. - 0 - -0.2056401968002319 - -0.7325450181961060 - 0.0199552308768034 - <_> - - <_> - - - - <_>6 8 4 6 -1. - <_>8 8 2 6 2. - 0 - -1.6601709648966789e-003 - 0.1163327023386955 - -0.1548850983381271 - <_> - - <_> - - - - <_>5 9 13 9 -1. - <_>5 12 13 3 3. - 0 - 0.0868996232748032 - -0.0541075505316257 - 0.2695240080356598 - <_> - - <_> - - - - <_>11 7 8 3 -1. - <_>11 7 4 3 2. - 1 - -1.1374129680916667e-003 - -0.1431442946195602 - 0.1244433000683785 - <_> - - <_> - - - - <_>7 0 9 4 -1. - <_>10 0 3 4 3. - 0 - 0.0309763401746750 - 0.0298648606985807 - -0.3260793089866638 - <_> - - <_> - - - - <_>7 6 6 5 -1. - <_>10 6 3 5 2. - 0 - 0.0269780103117228 - -0.0450982488691807 - 0.3612884879112244 - <_> - - <_> - - - - <_>2 7 18 6 -1. - <_>8 9 6 2 9. - 0 - 0.1942182034254074 - 0.0322551913559437 - -0.6898170113563538 - <_> - - <_> - - - - <_>11 4 10 3 -1. - <_>10 5 10 1 3. - 1 - -0.0204433593899012 - 0.2930010855197907 - -0.0644832178950310 - <_> - - <_> - - - - <_>13 14 8 4 -1. - <_>13 16 8 2 2. - 0 - -0.0404204502701759 - -0.7682335972785950 - 0.0122819803655148 - <_> - - <_> - - - - <_>1 14 8 4 -1. - <_>1 16 8 2 2. - 0 - -0.0126414299011230 - -0.2757379114627838 - 0.0619011186063290 - <_> - - <_> - - - - <_>11 4 3 10 -1. - <_>12 5 1 10 3. - 1 - -0.0396702997386456 - 0.3282839059829712 - -0.0203649997711182 - <_> - - <_> - - - - <_>11 4 10 3 -1. - <_>10 5 10 1 3. - 1 - 0.0202467292547226 - -0.0583936013281345 - 0.3306053876876831 - <_> - - <_> - - - - <_>2 12 18 6 -1. - <_>11 12 9 3 2. - <_>2 15 9 3 2. - 0 - 8.9611168950796127e-003 - 0.0900963172316551 - -0.2234300971031189 - <_> - - <_> - - - - <_>5 2 8 6 -1. - <_>5 2 4 3 2. - <_>9 5 4 3 2. - 0 - -8.3055719733238220e-003 - 0.1417534947395325 - -0.1260726004838944 - <_> - - <_> - - - - <_>8 14 6 4 -1. - <_>8 16 6 2 2. - 0 - -2.8248139642528258e-005 - 0.0945169627666473 - -0.2181037068367004 - <_> - - <_> - - - - <_>1 10 6 8 -1. - <_>1 10 3 4 2. - <_>4 14 3 4 2. - 0 - -5.1939398981630802e-003 - 0.1330431997776032 - -0.1334158033132553 - <_> - - <_> - - - - <_>7 2 15 9 -1. - <_>12 5 5 3 9. - 0 - 0.1177311018109322 - 0.0295861996710300 - -0.2402082979679108 - <_> - - <_> - - - - <_>0 2 15 9 -1. - <_>5 5 5 3 9. - 0 - 0.0678967013955116 - 0.0809137076139450 - -0.2345446050167084 - <_> - - <_> - - - - <_>10 5 6 7 -1. - <_>12 5 2 7 3. - 0 - -0.0266836993396282 - 0.3059098124504089 - -0.0641520470380783 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 14 6 2 2. - <_>11 16 6 2 2. - 0 - 3.5058211069554090e-003 - 0.0893419682979584 - -0.2277368009090424 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>10 2 12 1 3. - 0 - -6.5844372147694230e-004 - 0.1245813965797424 - -0.0913524404168129 - <_> - - <_> - - - - <_>8 1 3 12 -1. - <_>9 1 1 12 3. - 0 - 7.2530400939285755e-003 - -0.0692851766943932 - 0.2548288106918335 - <_> - - <_> - - - - <_>14 2 6 7 -1. - <_>14 2 3 7 2. - 0 - -0.0280561298131943 - -0.2086703926324844 - 0.0335395783185959 - <_> - - <_> - - - - <_>1 0 12 9 -1. - <_>5 3 4 3 9. - 0 - -0.0512051805853844 - -0.2410742938518524 - 0.0644394084811211 - <_> - - <_> - - - - <_>8 3 7 6 -1. - <_>8 6 7 3 2. - 0 - 0.0292346496134996 - -0.0508038401603699 - 0.3648504912853241 - <_> - - <_> - - - - <_>1 12 20 3 -1. - <_>6 12 10 3 2. - 0 - -0.1021952033042908 - 0.4012348055839539 - -0.0429021194577217 - <_> - - <_> - - - - <_>5 2 12 16 -1. - <_>5 6 12 8 2. - 0 - 0.0151049699634314 - 0.1048149019479752 - -0.1847243010997772 - <_> - - <_> - - - - <_>4 3 7 6 -1. - <_>4 6 7 3 2. - 0 - -0.0125706503167748 - -0.2054093927145004 - 0.0930131971836090 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>11 5 2 6 3. - 0 - 0.0122530702501535 - -0.0592851005494595 - 0.2392731010913849 - <_> - - <_> - - - - <_>7 0 8 2 -1. - <_>7 0 8 1 2. - 1 - -0.0261669903993607 - -0.6996678709983826 - 0.0249067097902298 - <_> - - <_> - - - - <_>5 14 12 2 -1. - <_>5 15 12 1 2. - 0 - 7.0817661471664906e-003 - 0.0241731200367212 - -0.5514479279518127 - <_> - - <_> - - - - <_>3 11 16 6 -1. - <_>3 13 16 2 3. - 0 - 0.0214268509298563 - 0.0641688406467438 - -0.2599790096282959 - <_> - - <_> - - - - <_>11 5 3 8 -1. - <_>11 5 3 4 2. - 1 - 0.0181897096335888 - 0.0358382500708103 - -0.1802058070898056 - <_> - - <_> - - - - <_>2 15 12 3 -1. - <_>8 15 6 3 2. - 0 - 0.0174157992005348 - -0.0838620364665985 - 0.3333852887153626 - <_> - - <_> - - - - <_>4 13 15 3 -1. - <_>9 13 5 3 3. - 0 - -1.4878029469400644e-003 - 0.1207885965704918 - -0.1276932060718536 - <_> - - <_> - - - - <_>2 3 12 4 -1. - <_>2 3 6 2 2. - <_>8 5 6 2 2. - 0 - 7.5296638533473015e-003 - -0.0700147077441216 - 0.3218109011650085 - <_> - - <_> - - - - <_>17 5 4 7 -1. - <_>17 5 2 7 2. - 1 - -0.0614990182220936 - 0.4646979868412018 - -0.0100737102329731 - <_> - - <_> - - - - <_>5 4 7 4 -1. - <_>5 4 7 2 2. - 1 - -1.9133290334139019e-004 - -0.1409429013729096 - 0.1383011043071747 - <_> - - <_> - - - - <_>2 2 18 3 -1. - <_>8 2 6 3 3. - 0 - -0.0244222898036242 - -0.2529231011867523 - 0.0676841735839844 - <_> - - <_> - - - - <_>2 2 18 9 -1. - <_>8 5 6 3 9. - 0 - -0.2613632082939148 - 0.3400354087352753 - -0.0584625490009785 - <_> - - <_> - - - - <_>15 6 6 4 -1. - <_>15 6 3 4 2. - 0 - -0.0760467797517776 - -0.7851415872573853 - 5.2708541043102741e-003 - <_> - - <_> - - - - <_>0 1 12 3 -1. - <_>0 2 12 1 3. - 0 - -3.0279329512268305e-003 - 0.1852705925703049 - -0.0906919613480568 - <_> - - <_> - - - - <_>16 2 6 4 -1. - <_>16 2 6 2 2. - 1 - -8.0219199880957603e-003 - -0.1254058033227921 - 0.0305948890745640 - <_> - - <_> - - - - <_>0 9 14 6 -1. - <_>7 9 7 6 2. - 0 - -0.2070596069097519 - -0.7541192173957825 - 0.0212011300027370 - <_> - - <_> - - - - <_>13 5 8 4 -1. - <_>13 5 4 4 2. - 1 - -0.0953228175640106 - -0.2962307035923004 - 0.0131387095898390 - <_> - - <_> - - - - <_>9 5 4 8 -1. - <_>9 5 4 4 2. - 1 - 9.5921624451875687e-003 - 0.0843243226408958 - -0.2174658030271530 - <_> - - <_> - - - - <_>12 4 3 14 -1. - <_>12 11 3 7 2. - 0 - -0.0130894696339965 - 0.0936075001955032 - -0.0657541304826736 - <_> - - <_> - - - - <_>1 13 20 5 -1. - <_>6 13 10 5 2. - 0 - 0.0117328800261021 - -0.0800390467047691 - 0.2329193949699402 - <_> - - <_> - - - - <_>12 4 3 14 -1. - <_>12 11 3 7 2. - 0 - 0.1523904949426651 - 9.9299130961298943e-003 - -0.6519606709480286 - <_> - - <_> - - - - <_>7 4 3 14 -1. - <_>7 11 3 7 2. - 0 - -0.0645915120840073 - 0.2837221920490265 - -0.0600588284432888 - <_> - - <_> - - - - <_>16 2 6 4 -1. - <_>16 2 6 2 2. - 1 - -0.0554930306971073 - 0.2665910124778748 - -0.0103364195674658 - <_> - - <_> - - - - <_>6 2 4 6 -1. - <_>6 2 2 6 2. - 1 - -0.0502874106168747 - -0.6950147151947022 - 0.0278498791158199 - <_> - - <_> - - - - <_>7 4 15 14 -1. - <_>7 11 15 7 2. - 0 - -0.4779424965381622 - -0.9287195205688477 - 5.9050112031400204e-003 - <_> - - <_> - - - - <_>1 16 16 2 -1. - <_>1 17 16 1 2. - 0 - -0.0143985198810697 - -0.4554106891155243 - 0.0364099815487862 - -0.8526716828346252 - 12 - -1 - <_> - - - <_> - - <_> - - - - <_>0 6 12 4 -1. - <_>3 6 6 4 2. - 0 - 1.9511899445205927e-003 - -0.2493699043989182 - 0.1411163955926895 - <_> - - <_> - - - - <_>6 9 10 9 -1. - <_>6 12 10 3 3. - 0 - -0.0466346703469753 - 0.3784058988094330 - -0.0784017369151115 - <_> - - <_> - - - - <_>0 6 6 5 -1. - <_>3 6 3 5 2. - 0 - 0.0161937493830919 - 0.0752133131027222 - -0.4199146926403046 - <_> - - <_> - - - - <_>11 14 7 4 -1. - <_>11 16 7 2 2. - 0 - -1.2459639401640743e-004 - 0.0685761868953705 - -0.1793542057275772 - <_> - - <_> - - - - <_>7 8 8 2 -1. - <_>7 8 8 1 2. - 1 - 7.3257791809737682e-003 - 0.1032209992408752 - -0.2609927952289581 - <_> - - <_> - - - - <_>10 13 7 4 -1. - <_>10 15 7 2 2. - 0 - -1.5020779756014235e-005 - 0.0731225982308388 - -0.1671888977289200 - <_> - - <_> - - - - <_>1 16 20 2 -1. - <_>11 16 10 2 2. - 0 - -0.0345220081508160 - -0.3932698965072632 - 0.0767271667718887 - <_> - - <_> - - - - <_>5 12 14 4 -1. - <_>5 12 7 4 2. - 0 - -0.0826795101165771 - -0.7467781901359558 - 0.0155306002125144 - <_> - - <_> - - - - <_>8 8 4 6 -1. - <_>8 8 2 6 2. - 1 - 0.0821624025702477 - -0.0692495033144951 - 0.3791460096836090 - <_> - - <_> - - - - <_>17 2 2 14 -1. - <_>17 2 2 7 2. - 1 - 0.0341878309845924 - 0.0426086597144604 - -0.1542989015579224 - <_> - - <_> - - - - <_>7 1 8 4 -1. - <_>11 1 4 4 2. - 0 - -0.0178913697600365 - -0.3063957095146179 - 0.0781183987855911 - <_> - - <_> - - - - <_>5 7 12 3 -1. - <_>9 7 4 3 3. - 0 - 0.0331309996545315 - -0.0561838001012802 - 0.3740524053573608 - <_> - - <_> - - - - <_>2 14 6 4 -1. - <_>5 14 3 4 2. - 0 - -5.7486710138618946e-003 - 0.1249035000801086 - -0.2052786052227020 - <_> - - <_> - - - - <_>10 9 12 4 -1. - <_>16 9 6 2 2. - <_>10 11 6 2 2. - 0 - 0.0335368290543556 - -0.0483442209661007 - 0.2672440111637116 - <_> - - <_> - - - - <_>6 14 9 4 -1. - <_>9 14 3 4 3. - 0 - 0.0247238297015429 - 0.0836789682507515 - -0.3373064994812012 - <_> - - <_> - - - - <_>11 9 2 6 -1. - <_>11 9 1 6 2. - 1 - 2.2355809342116117e-003 - 0.1037459000945091 - -0.1307191997766495 - <_> - - <_> - - - - <_>3 9 14 9 -1. - <_>3 12 14 3 3. - 0 - -2.4322168901562691e-003 - 0.1564508974552155 - -0.1328445971012116 - <_> - - <_> - - - - <_>5 10 16 6 -1. - <_>5 12 16 2 3. - 0 - 0.0259991195052862 - -0.0803431272506714 - 0.2161011993885040 - <_> - - <_> - - - - <_>5 12 10 6 -1. - <_>5 12 5 3 2. - <_>10 15 5 3 2. - 0 - 3.6965688195778057e-005 - -0.1787101030349731 - 0.1056312024593353 - <_> - - <_> - - - - <_>4 13 18 5 -1. - <_>4 13 9 5 2. - 0 - -0.1629150062799454 - -0.6914169788360596 - 0.0223747305572033 - <_> - - <_> - - - - <_>0 13 18 5 -1. - <_>9 13 9 5 2. - 0 - 0.1300814002752304 - -0.0427690409123898 - 0.4637356996536255 - <_> - - <_> - - - - <_>4 9 16 3 -1. - <_>4 10 16 1 3. - 0 - 0.0276585407555103 - -0.0371086001396179 - 0.3838658034801483 - <_> - - <_> - - - - <_>5 1 15 2 -1. - <_>5 1 15 1 2. - 1 - -0.0100204199552536 - -0.2632805109024048 - 0.0748586803674698 - <_> - - <_> - - - - <_>13 5 2 9 -1. - <_>13 5 1 9 2. - 1 - -0.0304599404335022 - 0.3230090141296387 - -0.0258583705872297 - <_> - - <_> - - - - <_>9 5 9 2 -1. - <_>9 5 9 1 2. - 1 - 1.3251040363684297e-003 - 0.1444766968488693 - -0.2108217030763626 - <_> - - <_> - - - - <_>1 11 20 5 -1. - <_>6 11 10 5 2. - 0 - -0.0279310103505850 - 0.1437451988458633 - -0.1616230010986328 - <_> - - <_> - - - - <_>3 9 13 3 -1. - <_>3 10 13 1 3. - 0 - -8.8642723858356476e-003 - 0.2300062030553818 - -0.0950950980186462 - <_> - - <_> - - - - <_>18 5 4 12 -1. - <_>20 5 2 6 2. - <_>18 11 2 6 2. - 0 - -0.0122139696031809 - -0.2464639991521835 - 0.0655220225453377 - <_> - - <_> - - - - <_>4 12 5 6 -1. - <_>4 15 5 3 2. - 0 - -0.0487375296652317 - -0.7912771105766296 - 0.0254164095968008 - <_> - - <_> - - - - <_>15 1 2 8 -1. - <_>15 1 1 8 2. - 1 - 0.0611852891743183 - -1.2226430408190936e-004 - -0.9054586887359619 - <_> - - <_> - - - - <_>7 1 8 2 -1. - <_>7 1 8 1 2. - 1 - 0.0264536794275045 - 0.0265628006309271 - -0.6395434141159058 - <_> - - <_> - - - - <_>18 5 4 12 -1. - <_>20 5 2 6 2. - <_>18 11 2 6 2. - 0 - 8.8589917868375778e-003 - 0.0541458502411842 - -0.2160128057003021 - <_> - - <_> - - - - <_>10 4 10 2 -1. - <_>10 4 10 1 2. - 1 - 0.0348479412496090 - -0.0457493588328362 - 0.4393540024757385 - <_> - - <_> - - - - <_>2 4 20 4 -1. - <_>7 4 10 4 2. - 0 - -0.1459821015596390 - -0.5556176900863648 - 9.5249973237514496e-003 - <_> - - <_> - - - - <_>1 9 8 3 -1. - <_>5 9 4 3 2. - 0 - -0.0504565685987473 - -0.7528784871101379 - 0.0202147103846073 - <_> - - <_> - - - - <_>18 5 4 12 -1. - <_>20 5 2 6 2. - <_>18 11 2 6 2. - 0 - -0.0854437798261642 - -1. - -1.3681349810212851e-003 - <_> - - <_> - - - - <_>0 5 4 12 -1. - <_>0 5 2 6 2. - <_>2 11 2 6 2. - 0 - 0.0132489800453186 - 0.0634007006883621 - -0.2541181147098541 - <_> - - <_> - - - - <_>6 0 14 18 -1. - <_>6 9 14 9 2. - 0 - -0.6593561172485352 - -1. - 7.7378489077091217e-003 - <_> - - <_> - - - - <_>4 4 12 3 -1. - <_>4 5 12 1 3. - 0 - 5.0879311747848988e-003 - -0.0832077413797379 - 0.1887629032135010 - <_> - - <_> - - - - <_>8 4 14 3 -1. - <_>8 5 14 1 3. - 0 - -3.4071630798280239e-003 - 0.1457829028367996 - -0.0919603332877159 - <_> - - <_> - - - - <_>4 13 14 3 -1. - <_>4 14 14 1 3. - 0 - -0.0216562692075968 - -0.6536489129066467 - 0.0271297506988049 - <_> - - <_> - - - - <_>8 2 6 14 -1. - <_>11 2 3 7 2. - <_>8 9 3 7 2. - 0 - 9.4357347115874290e-003 - 0.0643601119518280 - -0.2388547956943512 - <_> - - <_> - - - - <_>0 13 15 4 -1. - <_>0 14 15 2 2. - 0 - -7.5177568942308426e-003 - 0.2451906055212021 - -0.0682218372821808 - <_> - - <_> - - - - <_>11 14 7 4 -1. - <_>11 16 7 2 2. - 0 - 0.0160676296800375 - 7.6069780625402927e-003 - -0.3166871964931488 - <_> - - <_> - - - - <_>11 7 7 3 -1. - <_>10 8 7 1 3. - 1 - -1.8057749839499593e-003 - 0.1271037012338638 - -0.1214571967720985 - <_> - - <_> - - - - <_>10 6 6 6 -1. - <_>10 9 6 3 2. - 0 - -0.0441549010574818 - -0.4857960939407349 - 0.0234448593109846 - <_> - - <_> - - - - <_>2 0 4 14 -1. - <_>2 0 2 7 2. - <_>4 7 2 7 2. - 0 - 7.5462698005139828e-003 - 0.0684307664632797 - -0.2331652045249939 - <_> - - <_> - - - - <_>2 6 18 5 -1. - <_>8 6 6 5 3. - 0 - 0.1086826026439667 - -0.0416639111936092 - 0.3945221900939941 - <_> - - <_> - - - - <_>2 0 18 18 -1. - <_>8 0 6 18 3. - 0 - 0.6124870181083679 - 0.0207021702080965 - -0.9849479198455811 - <_> - - <_> - - - - <_>13 1 4 8 -1. - <_>14 2 2 8 2. - 1 - 0.0498282909393311 - 2.7304550167173147e-003 - -0.4018169939517975 - <_> - - <_> - - - - <_>4 0 12 18 -1. - <_>4 0 6 9 2. - <_>10 9 6 9 2. - 0 - -0.0727687180042267 - 0.3267647922039032 - -0.0491443388164043 - <_> - - <_> - - - - <_>12 14 6 4 -1. - <_>12 16 6 2 2. - 0 - 0.0243143104016781 - -7.8135710209608078e-003 - 0.5822330117225647 - <_> - - <_> - - - - <_>4 14 6 4 -1. - <_>4 16 6 2 2. - 0 - -1.7177179688587785e-004 - 0.0816699117422104 - -0.2037622034549713 - <_> - - <_> - - - - <_>11 8 2 6 -1. - <_>11 8 1 6 2. - 1 - -0.0400952696800232 - 0.5468152165412903 - -0.0171795394271612 - <_> - - <_> - - - - <_>1 10 20 6 -1. - <_>1 10 10 3 2. - <_>11 13 10 3 2. - 0 - -0.0896345674991608 - -0.8161401152610779 - 0.0212838891893625 - <_> - - <_> - - - - <_>13 1 7 9 -1. - <_>10 4 7 3 3. - 1 - 0.1869214028120041 - 8.3980746567249298e-003 - -0.6018530130386353 - <_> - - <_> - - - - <_>5 3 4 6 -1. - <_>5 6 4 3 2. - 0 - -0.0430383794009686 - -0.8789898753166199 - 0.0149307297542691 - <_> - - <_> - - - - <_>13 0 2 12 -1. - <_>13 6 2 6 2. - 0 - -1.8602630007080734e-004 - 0.0401562415063381 - -0.0826044380664825 - <_> - - <_> - - - - <_>7 11 8 3 -1. - <_>11 11 4 3 2. - 0 - -1.4392189914360642e-003 - -0.1710239946842194 - 0.0912035405635834 - <_> - - <_> - - - - <_>9 6 12 11 -1. - <_>12 6 6 11 2. - 0 - 0.0421606190502644 - -0.0358610190451145 - 0.1517430990934372 - <_> - - <_> - - - - <_>6 8 10 9 -1. - <_>11 8 5 9 2. - 0 - 7.5991409830749035e-003 - 0.1087452992796898 - -0.1614716053009033 - <_> - - <_> - - - - <_>11 14 6 4 -1. - <_>11 14 3 4 2. - 0 - -5.7539329864084721e-003 - -0.2567706108093262 - 0.0584571510553360 - <_> - - <_> - - - - <_>3 6 12 4 -1. - <_>7 6 4 4 3. - 0 - -0.0277367495000362 - 0.2232517004013062 - -0.0740715116262436 - <_> - - <_> - - - - <_>10 5 6 7 -1. - <_>12 5 2 7 3. - 0 - -0.0256761107593775 - 0.1883108019828796 - -0.0538603812456131 - <_> - - <_> - - - - <_>8 0 6 4 -1. - <_>11 0 3 4 2. - 0 - 0.0158907305449247 - 0.0517095401883125 - -0.3847657144069672 - <_> - - <_> - - - - <_>10 6 6 12 -1. - <_>12 6 2 12 3. - 0 - -0.0863742679357529 - -0.5568069815635681 - 9.4922119751572609e-003 - <_> - - <_> - - - - <_>6 6 6 12 -1. - <_>8 6 2 12 3. - 0 - 1.9480630289763212e-003 - -0.1080721989274025 - 0.1477168053388596 - -0.7418665885925293 - 13 - -1 - <_> - - - <_> - - <_> - - - - <_>6 9 9 6 -1. - <_>6 12 9 3 2. - 0 - -6.8531660363078117e-003 - 0.2893550992012024 - -0.2768914103507996 - <_> - - <_> - - - - <_>14 6 6 6 -1. - <_>14 6 6 3 2. - 1 - -0.0692176371812820 - 0.3490979075431824 - -0.0497410893440247 - <_> - - <_> - - - - <_>1 13 20 5 -1. - <_>6 13 10 5 2. - 0 - -0.1309297978878021 - 0.4279156029224396 - -0.0961560085415840 - <_> - - <_> - - - - <_>8 14 6 4 -1. - <_>8 16 6 2 2. - 0 - -2.9759139579255134e-005 - 0.1167578026652336 - -0.2467838972806931 - <_> - - <_> - - - - <_>4 7 8 3 -1. - <_>4 7 4 3 2. - 1 - -0.0471007898449898 - 0.3725911080837250 - -0.0590729191899300 - <_> - - <_> - - - - <_>16 0 2 15 -1. - <_>16 0 1 15 2. - 1 - 0.0441245101392269 - 0.0789040997624397 - -0.2552854120731354 - <_> - - <_> - - - - <_>9 3 12 2 -1. - <_>9 3 12 1 2. - 1 - 4.2540309950709343e-003 - -0.2361238002777100 - 0.1285677999258041 - <_> - - <_> - - - - <_>7 1 8 6 -1. - <_>9 1 4 6 2. - 0 - -1.0833570268005133e-003 - 0.1434731036424637 - -0.1420363038778305 - <_> - - <_> - - - - <_>6 15 8 3 -1. - <_>10 15 4 3 2. - 0 - 5.9925230743829161e-005 - -0.1992727071046829 - 0.0885029137134552 - <_> - - <_> - - - - <_>8 3 6 6 -1. - <_>10 3 2 6 3. - 0 - -0.0730214864015579 - -0.8066626191139221 - 0.0320418588817120 - <_> - - <_> - - - - <_>1 1 16 3 -1. - <_>1 2 16 1 3. - 0 - 7.9495050013065338e-003 - -0.0658784434199333 - 0.2707126140594482 - <_> - - <_> - - - - <_>9 1 12 3 -1. - <_>9 2 12 1 3. - 0 - -3.3911041100509465e-004 - 0.1349073946475983 - -0.1335476040840149 - <_> - - <_> - - - - <_>0 0 22 6 -1. - <_>0 0 11 3 2. - <_>11 3 11 3 2. - 0 - -0.0260101798921824 - -0.2807458043098450 - 0.0779026597738266 - <_> - - <_> - - - - <_>10 5 4 6 -1. - <_>10 5 2 6 2. - 0 - -0.0311530902981758 - 0.2702265977859497 - -0.0269943401217461 - <_> - - <_> - - - - <_>10 0 8 5 -1. - <_>10 0 4 5 2. - 1 - 0.0109462495893240 - -0.1599372029304504 - 0.1035069972276688 - <_> - - <_> - - - - <_>12 4 4 10 -1. - <_>13 5 2 10 2. - 1 - 0.0731012076139450 - -4.1365791112184525e-003 - 0.5233982801437378 - <_> - - <_> - - - - <_>10 4 10 4 -1. - <_>9 5 10 2 2. - 1 - 0.0302071496844292 - -0.0492294207215309 - 0.4284898936748505 - <_> - - <_> - - - - <_>15 1 2 8 -1. - <_>15 1 1 8 2. - 1 - 0.0649852603673935 - 3.9118612185120583e-003 - -1.0003379583358765 - <_> - - <_> - - - - <_>7 1 8 2 -1. - <_>7 1 8 1 2. - 1 - -0.0291192494332790 - -0.7702599167823792 - 0.0239308103919029 - <_> - - <_> - - - - <_>17 0 3 11 -1. - <_>18 1 1 11 3. - 1 - 0.0504583083093166 - 6.9283558987081051e-003 - -0.5185477733612061 - <_> - - <_> - - - - <_>9 8 4 6 -1. - <_>9 8 4 3 2. - 1 - -0.0388901792466640 - -0.4817684888839722 - 0.0302702896296978 - <_> - - <_> - - - - <_>14 6 6 12 -1. - <_>17 6 3 6 2. - <_>14 12 3 6 2. - 0 - 0.0583193711936474 - -0.0221013892441988 - 0.2839350104331970 - <_> - - <_> - - - - <_>2 12 18 6 -1. - <_>8 14 6 2 9. - 0 - -0.0108036901801825 - 0.1284206062555313 - -0.1384977996349335 - <_> - - <_> - - - - <_>14 7 3 10 -1. - <_>14 12 3 5 2. - 0 - 9.4525264576077461e-003 - -0.0571944192051888 - 0.1775905042886734 - <_> - - <_> - - - - <_>3 8 16 10 -1. - <_>3 8 8 5 2. - <_>11 13 8 5 2. - 0 - 0.0152291702106595 - 0.1050117015838623 - -0.2051838934421539 - <_> - - <_> - - - - <_>15 12 4 6 -1. - <_>15 15 4 3 2. - 0 - -8.9435698464512825e-004 - 0.0686682537198067 - -0.1466601043939591 - <_> - - <_> - - - - <_>2 8 18 10 -1. - <_>2 8 9 5 2. - <_>11 13 9 5 2. - 0 - -0.0183224994689226 - -0.2361371964216232 - 0.0835383310914040 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>10 2 12 1 3. - 0 - 2.5474189314991236e-003 - -0.0847315266728401 - 0.1721152067184448 - <_> - - <_> - - - - <_>1 1 12 3 -1. - <_>1 2 12 1 3. - 0 - -1.4951790217310190e-003 - 0.1864299029111862 - -0.1275333017110825 - <_> - - <_> - - - - <_>8 0 14 4 -1. - <_>15 0 7 2 2. - <_>8 2 7 2 2. - 0 - 0.0247961506247520 - 0.0329235605895519 - -0.4095472991466522 - <_> - - <_> - - - - <_>2 4 14 4 -1. - <_>2 5 14 2 2. - 0 - -2.8976860921829939e-003 - 0.1448003947734833 - -0.1040467992424965 - <_> - - <_> - - - - <_>8 4 12 3 -1. - <_>8 5 12 1 3. - 0 - 7.0361169055104256e-003 - -0.0679165571928024 - 0.2154435068368912 - <_> - - <_> - - - - <_>1 0 8 8 -1. - <_>1 0 4 4 2. - <_>5 4 4 4 2. - 0 - -0.0118703898042440 - -0.2553744912147522 - 0.0744434073567390 - <_> - - <_> - - - - <_>13 0 8 6 -1. - <_>17 0 4 3 2. - <_>13 3 4 3 2. - 0 - 2.4765899870544672e-003 - 0.0683133676648140 - -0.1611132025718689 - <_> - - <_> - - - - <_>1 0 8 6 -1. - <_>1 0 4 3 2. - <_>5 3 4 3 2. - 0 - 0.0212845504283905 - 0.0370908714830875 - -0.4691652059555054 - <_> - - <_> - - - - <_>9 6 6 5 -1. - <_>9 6 3 5 2. - 0 - -0.0103694796562195 - 0.1080783978104591 - -0.0604898706078529 - <_> - - <_> - - - - <_>5 6 8 3 -1. - <_>9 6 4 3 2. - 0 - 0.0107324803248048 - -0.0585823804140091 - 0.3195860981941223 - <_> - - <_> - - - - <_>13 3 6 9 -1. - <_>10 6 6 3 3. - 1 - -0.2323516011238098 - -1. - 8.2511743530631065e-003 - <_> - - <_> - - - - <_>9 3 9 6 -1. - <_>12 6 3 6 3. - 1 - -6.0572529037017375e-005 - 0.0802017673850060 - -0.2358305007219315 - <_> - - <_> - - - - <_>4 11 18 3 -1. - <_>4 12 18 1 3. - 0 - -2.7367009315639734e-003 - 0.1536909043788910 - -0.0788008794188499 - <_> - - <_> - - - - <_>0 13 15 4 -1. - <_>5 13 5 4 3. - 0 - 0.0311680100858212 - -0.0418529510498047 - 0.3737446963787079 - <_> - - <_> - - - - <_>15 12 4 6 -1. - <_>15 15 4 3 2. - 0 - 0.0454151295125484 - 6.6594500094652176e-003 - -0.9997528791427612 - <_> - - <_> - - - - <_>3 12 4 6 -1. - <_>3 15 4 3 2. - 0 - -1.3742819428443909e-003 - 0.1058785021305084 - -0.1923477947711945 - <_> - - <_> - - - - <_>9 12 6 6 -1. - <_>11 12 2 6 3. - 0 - 3.0089360661804676e-003 - 0.0940386429429054 - -0.1544273048639298 - <_> - - <_> - - - - <_>6 9 9 7 -1. - <_>9 9 3 7 3. - 0 - -0.0710713863372803 - -0.5495526790618897 - 0.0255231298506260 - <_> - - <_> - - - - <_>13 10 6 8 -1. - <_>16 10 3 4 2. - <_>13 14 3 4 2. - 0 - 1.0958979837596416e-003 - -0.0613276585936546 - 0.0576776191592216 - <_> - - <_> - - - - <_>3 10 6 8 -1. - <_>3 10 3 4 2. - <_>6 14 3 4 2. - 0 - -0.0237067993730307 - 0.2948609888553619 - -0.0665534734725952 - <_> - - <_> - - - - <_>7 10 8 4 -1. - <_>7 10 4 4 2. - 0 - 6.8882037885487080e-003 - 0.0738617032766342 - -0.2572773098945618 - <_> - - <_> - - - - <_>7 5 6 11 -1. - <_>10 5 3 11 2. - 0 - -0.0491580404341221 - 0.3240630924701691 - -0.0527858398854733 - <_> - - <_> - - - - <_>10 6 6 6 -1. - <_>10 9 6 3 2. - 0 - 0.0713694170117378 - 0.0132099203765392 - -0.7482113242149353 - <_> - - <_> - - - - <_>6 6 6 6 -1. - <_>6 9 6 3 2. - 0 - -8.4517486393451691e-003 - -0.2065279930830002 - 0.0931395962834358 - <_> - - <_> - - - - <_>8 6 12 8 -1. - <_>12 6 4 8 3. - 0 - -0.1555441021919251 - -0.5073614120483398 - 0.0115754203870893 - <_> - - <_> - - - - <_>2 11 12 3 -1. - <_>6 11 4 3 3. - 0 - -0.0459768213331699 - 0.3343332111835480 - -0.0565582811832428 - <_> - - <_> - - - - <_>14 3 6 8 -1. - <_>17 3 3 4 2. - <_>14 7 3 4 2. - 0 - 0.0179002191871405 - 0.0340919904410839 - -0.2856503129005432 - <_> - - <_> - - - - <_>0 5 13 3 -1. - <_>0 6 13 1 3. - 0 - 6.7351139150559902e-003 - -0.0665388181805611 - 0.2332212030887604 - <_> - - <_> - - - - <_>14 0 6 6 -1. - <_>14 2 6 2 3. - 0 - 6.4544100314378738e-003 - 0.0472244992852211 - -0.1442237049341202 - <_> - - <_> - - - - <_>3 0 6 6 -1. - <_>3 2 6 2 3. - 0 - -0.0110290497541428 - -0.2644239962100983 - 0.0625426918268204 - <_> - - <_> - - - - <_>8 8 14 3 -1. - <_>8 9 14 1 3. - 0 - -3.3727919217199087e-003 - 0.1257591992616653 - -0.0683576464653015 - <_> - - <_> - - - - <_>7 2 2 15 -1. - <_>8 2 1 15 2. - 0 - -2.2960419300943613e-003 - -0.1557330936193466 - 0.0946819707751274 - <_> - - <_> - - - - <_>4 14 16 4 -1. - <_>4 14 8 4 2. - 0 - -0.0795031636953354 - -0.3824613988399506 - 0.0172012597322464 - <_> - - <_> - - - - <_>1 6 20 12 -1. - <_>6 6 10 12 2. - 0 - -0.2524088025093079 - 0.3013980984687805 - -0.0589428097009659 - <_> - - <_> - - - - <_>5 10 16 6 -1. - <_>13 10 8 3 2. - <_>5 13 8 3 2. - 0 - 0.0363130792975426 - 0.0211058706045151 - -0.2081169039011002 - <_> - - <_> - - - - <_>1 10 16 6 -1. - <_>1 10 8 3 2. - <_>9 13 8 3 2. - 0 - 0.0687375217676163 - -0.0324002988636494 - 0.5134530067443848 - <_> - - <_> - - - - <_>8 8 14 6 -1. - <_>8 8 7 6 2. - 0 - -0.2181455045938492 - -0.7009329199790955 - 0.0162609796971083 - <_> - - <_> - - - - <_>0 8 14 6 -1. - <_>7 8 7 6 2. - 0 - -0.1977089941501617 - -0.6781736016273499 - 0.0179375503212214 - <_> - - <_> - - - - <_>5 6 12 11 -1. - <_>8 6 6 11 2. - 0 - -0.1013111993670464 - 0.3647063076496124 - -0.0499694384634495 - <_> - - <_> - - - - <_>1 3 8 6 -1. - <_>1 3 4 3 2. - <_>5 6 4 3 2. - 0 - 5.4146698676049709e-003 - 0.0660865902900696 - -0.2332739979028702 - <_> - - <_> - - - - <_>13 1 7 6 -1. - <_>13 1 7 3 2. - 1 - -0.0405901782214642 - 0.2146472036838532 - -0.0430333092808723 - <_> - - <_> - - - - <_>1 4 5 10 -1. - <_>1 9 5 5 2. - 0 - -1.3324919855222106e-003 - 0.1297567933797836 - -0.1279428005218506 - <_> - - <_> - - - - <_>18 6 3 8 -1. - <_>18 10 3 4 2. - 0 - 5.7570589706301689e-003 - 0.0434699989855289 - -0.1197730004787445 - <_> - - <_> - - - - <_>1 6 3 8 -1. - <_>1 10 3 4 2. - 0 - -4.0872758254408836e-003 - -0.2018010020256043 - 0.0926248729228973 - <_> - - <_> - - - - <_>8 5 13 3 -1. - <_>8 6 13 1 3. - 0 - 0.0213452801108360 - -0.0263108704239130 - 0.2914252877235413 - <_> - - <_> - - - - <_>1 5 13 3 -1. - <_>1 6 13 1 3. - 0 - -2.4241849314421415e-003 - 0.1713156998157501 - -0.1172301024198532 - <_> - - <_> - - - - <_>18 0 3 12 -1. - <_>19 0 1 12 3. - 0 - 0.0606775507330894 - -4.8347217962145805e-003 - 0.5657712221145630 - <_> - - <_> - - - - <_>1 0 3 12 -1. - <_>2 0 1 12 3. - 0 - 3.1573011074215174e-004 - -0.1149955019354820 - 0.1309486031532288 - <_> - - <_> - - - - <_>4 2 18 2 -1. - <_>4 2 9 2 2. - 0 - -1.4639530563727021e-003 - 0.1070842966437340 - -0.0821887478232384 - <_> - - <_> - - - - <_>6 3 6 6 -1. - <_>9 3 3 6 2. - 0 - -0.0816292762756348 - -0.7009016275405884 - 0.0213186405599117 - <_> - - <_> - - - - <_>9 5 12 11 -1. - <_>12 5 6 11 2. - 0 - -2.2923630604054779e-004 - 0.0524490103125572 - -0.0572733990848064 - <_> - - <_> - - - - <_>1 5 12 11 -1. - <_>4 5 6 11 2. - 0 - 8.6732655763626099e-003 - -0.1094440966844559 - 0.1453080028295517 - <_> - - <_> - - - - <_>8 4 8 8 -1. - <_>8 4 4 8 2. - 0 - -9.5603411318734288e-004 - 0.0547286607325077 - -0.0766770094633102 - <_> - - <_> - - - - <_>0 8 22 4 -1. - <_>0 8 11 2 2. - <_>11 10 11 2 2. - 0 - -0.0568146891891956 - -0.7249373793601990 - 0.0177913308143616 - <_> - - <_> - - - - <_>8 6 8 4 -1. - <_>8 6 4 4 2. - 0 - 6.4268838614225388e-003 - -0.0377686992287636 - 0.0834547504782677 - <_> - - <_> - - - - <_>6 3 8 8 -1. - <_>10 3 4 8 2. - 0 - 5.2451258525252342e-003 - -0.0758067518472672 - 0.2154906988143921 - <_> - - <_> - - - - <_>3 6 16 4 -1. - <_>11 6 8 2 2. - <_>3 8 8 2 2. - 0 - 6.7577441222965717e-003 - 0.0771638676524162 - -0.2495719939470291 - <_> - - <_> - - - - <_>2 14 16 4 -1. - <_>10 14 8 4 2. - 0 - -5.7494179345667362e-003 - 0.1424555927515030 - -0.1274092048406601 - <_> - - <_> - - - - <_>11 13 6 5 -1. - <_>11 13 3 5 2. - 0 - -6.7760650999844074e-003 - -0.2331600934267044 - 0.0399752110242844 - <_> - - <_> - - - - <_>5 13 6 5 -1. - <_>8 13 3 5 2. - 0 - 3.5247279447503388e-004 - -0.1308315992355347 - 0.1157741025090218 - <_> - - <_> - - - - <_>12 2 2 7 -1. - <_>12 2 1 7 2. - 1 - 1.4523849822580814e-003 - -0.0927244573831558 - 0.0654869601130486 - -0.8364096879959106 - 14 - -1 - <_> - - - <_> - - <_> - - - - <_>0 9 21 9 -1. - <_>7 12 7 3 9. - 0 - -0.3116379976272583 - 0.3806200027465820 - -0.1111584007740021 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - -0.3033824861049652 - 0.5123680830001831 - -0.0504597313702106 - <_> - - <_> - - - - <_>3 9 16 8 -1. - <_>3 9 8 4 2. - <_>11 13 8 4 2. - 0 - -0.0109451701864600 - -0.2229202985763550 - 0.1054809987545013 - <_> - - <_> - - - - <_>7 0 14 18 -1. - <_>7 0 7 18 2. - 0 - -0.0280110798776150 - 0.0706877931952477 - -0.0864785090088844 - <_> - - <_> - - - - <_>5 8 6 4 -1. - <_>5 8 3 4 2. - 1 - -0.0522561594843864 - 0.5785626769065857 - -8.7944902479648590e-003 - <_> - - <_> - - - - <_>3 11 16 4 -1. - <_>11 11 8 2 2. - <_>3 13 8 2 2. - 0 - -5.9455442242324352e-003 - -0.2564198076725006 - 0.0945845320820808 - <_> - - <_> - - - - <_>6 9 6 8 -1. - <_>6 9 3 4 2. - <_>9 13 3 4 2. - 0 - 2.5594399776309729e-003 - -0.2571848034858704 - 0.1288242936134338 - <_> - - <_> - - - - <_>7 0 14 18 -1. - <_>7 0 7 18 2. - 0 - -0.1209926009178162 - -0.1229322031140328 - 0.0258294306695461 - <_> - - <_> - - - - <_>1 0 14 18 -1. - <_>8 0 7 18 2. - 0 - -0.4420821964740753 - -0.7454655170440674 - 0.0425867103040218 - <_> - - <_> - - - - <_>13 14 8 3 -1. - <_>13 14 4 3 2. - 0 - -6.6842641681432724e-003 - 0.1351564973592758 - -0.1640930026769638 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 6 6 2 2. - 0 - 9.8270708695054054e-003 - -0.0803053528070450 - 0.2985329926013947 - <_> - - <_> - - - - <_>6 6 14 4 -1. - <_>13 6 7 2 2. - <_>6 8 7 2 2. - 0 - 0.0586385987699032 - 0.0275564193725586 - -0.8224250078201294 - <_> - - <_> - - - - <_>7 3 11 4 -1. - <_>6 4 11 2 2. - 1 - -3.0546959023922682e-003 - -0.1929274946451187 - 0.1108272969722748 - <_> - - <_> - - - - <_>7 0 12 4 -1. - <_>13 0 6 2 2. - <_>7 2 6 2 2. - 0 - -7.3340102098882198e-003 - -0.2430793941020966 - 0.0667446032166481 - <_> - - <_> - - - - <_>4 0 14 4 -1. - <_>4 0 7 2 2. - <_>11 2 7 2 2. - 0 - -0.0105262296274304 - -0.3113602101802826 - 0.0628508478403091 - <_> - - <_> - - - - <_>15 8 6 9 -1. - <_>17 8 2 9 3. - 0 - 0.1048116013407707 - 0.0126217203214765 - -0.6737608909606934 - <_> - - <_> - - - - <_>1 8 6 9 -1. - <_>3 8 2 9 3. - 0 - 9.4269379042088985e-004 - -0.1707167029380798 - 0.1028065010905266 - <_> - - <_> - - - - <_>12 5 5 9 -1. - <_>12 8 5 3 3. - 0 - 8.4397383034229279e-003 - -0.0530145689845085 - 0.0885990783572197 - <_> - - <_> - - - - <_>5 5 5 9 -1. - <_>5 8 5 3 3. - 0 - -0.0305516701191664 - 0.3526489138603210 - -0.0691484734416008 - <_> - - <_> - - - - <_>17 9 4 6 -1. - <_>17 9 2 6 2. - 0 - -0.0491123795509338 - -0.5821937918663025 - 0.0140432203188539 - <_> - - <_> - - - - <_>1 9 4 6 -1. - <_>3 9 2 6 2. - 0 - 5.8098030276596546e-003 - 0.0708724334836006 - -0.2536281943321228 - <_> - - <_> - - - - <_>4 3 14 3 -1. - <_>4 4 14 1 3. - 0 - 0.0255410708487034 - -0.0451369397342205 - 0.4067445099353790 - <_> - - <_> - - - - <_>6 0 10 3 -1. - <_>5 1 10 1 3. - 1 - -0.0487112887203693 - -0.7024015784263611 - 0.0243178699165583 - <_> - - <_> - - - - <_>10 4 11 14 -1. - <_>10 11 11 7 2. - 0 - -0.3262439072132111 - -0.5061904788017273 - 5.5445302277803421e-003 - <_> - - <_> - - - - <_>2 5 6 6 -1. - <_>2 7 6 2 3. - 0 - -1.8120040476787835e-004 - 0.1313259005546570 - -0.1213954985141754 - <_> - - <_> - - - - <_>12 2 5 12 -1. - <_>12 6 5 4 3. - 0 - -0.1298076957464218 - -0.6820899248123169 - 0.0164145492017269 - <_> - - <_> - - - - <_>5 16 12 2 -1. - <_>5 17 12 1 2. - 0 - 8.3528067916631699e-003 - 0.0300403907895088 - -0.5090913772583008 - <_> - - <_> - - - - <_>3 4 18 3 -1. - <_>3 5 18 1 3. - 0 - 5.4547088220715523e-003 - -0.0824020728468895 - 0.1800798028707504 - <_> - - <_> - - - - <_>1 4 11 14 -1. - <_>1 11 11 7 2. - 0 - -0.3169954121112824 - -0.8661301136016846 - 0.0182291399687529 - <_> - - <_> - - - - <_>8 12 11 4 -1. - <_>8 14 11 2 2. - 0 - 5.8424862800166011e-004 - 0.0424097292125225 - -0.1311808973550797 - <_> - - <_> - - - - <_>7 11 8 7 -1. - <_>11 11 4 7 2. - 0 - -9.7046848386526108e-003 - -0.2743268907070160 - 0.0559204295277596 - <_> - - <_> - - - - <_>12 2 4 11 -1. - <_>12 2 2 11 2. - 1 - 0.0168343205004931 - -0.0833064168691635 - 0.0677927583456039 - <_> - - <_> - - - - <_>10 4 11 2 -1. - <_>10 4 11 1 2. - 1 - -0.0306853801012039 - 0.4212690889835358 - -0.0453393310308456 - <_> - - <_> - - - - <_>16 0 2 14 -1. - <_>16 0 1 14 2. - 1 - 0.0413949191570282 - 0.0199717506766319 - -0.1972219049930573 - <_> - - <_> - - - - <_>6 0 14 2 -1. - <_>6 0 14 1 2. - 1 - 0.0349101498723030 - -0.0538268797099590 - 0.3504027128219605 - <_> - - <_> - - - - <_>19 4 2 12 -1. - <_>19 4 1 12 2. - 1 - -5.2495039999485016e-003 - -0.1136389002203941 - 0.0550805702805519 - <_> - - <_> - - - - <_>8 2 6 10 -1. - <_>8 7 6 5 2. - 0 - 0.1204561963677406 - 0.0174515992403030 - -0.9395803213119507 - <_> - - <_> - - - - <_>19 4 2 12 -1. - <_>19 4 1 12 2. - 1 - 0.0421304218471050 - -0.0143432803452015 - 0.6005985140800476 - <_> - - <_> - - - - <_>11 3 6 8 -1. - <_>11 3 6 4 2. - 1 - 0.0191208496689796 - 0.0858645066618919 - -0.1858649998903275 - <_> - - <_> - - - - <_>11 2 10 6 -1. - <_>11 2 5 6 2. - 1 - 8.4470612928271294e-003 - -0.0694521814584732 - 0.0734614208340645 - <_> - - <_> - - - - <_>3 5 13 2 -1. - <_>3 6 13 1 2. - 0 - 1.7696130089461803e-003 - -0.0799966603517532 - 0.1947980970144272 - <_> - - <_> - - - - <_>5 4 12 6 -1. - <_>5 6 12 2 3. - 0 - 0.0579959489405155 - 0.0276330001652241 - -0.5409700870513916 - <_> - - <_> - - - - <_>6 9 9 9 -1. - <_>9 9 3 9 3. - 0 - -0.0798840224742889 - -0.5430768132209778 - 0.0232198294252157 - <_> - - <_> - - - - <_>19 1 3 12 -1. - <_>20 2 1 12 3. - 1 - 0.0665762424468994 - 6.8416809663176537e-003 - -0.8122456073760986 - <_> - - <_> - - - - <_>2 13 9 5 -1. - <_>5 13 3 5 3. - 0 - 0.0641699433326721 - -0.0248466897755861 - 0.6079813241958618 - <_> - - <_> - - - - <_>11 2 10 6 -1. - <_>11 2 5 6 2. - 1 - -0.2940478026866913 - -1. - 4.6440181322395802e-003 - <_> - - <_> - - - - <_>11 2 6 10 -1. - <_>11 2 6 5 2. - 1 - -9.5727723091840744e-003 - -0.1415735930204392 - 0.1012165024876595 - <_> - - <_> - - - - <_>1 6 21 3 -1. - <_>8 6 7 3 3. - 0 - -0.0235744491219521 - 0.1171545013785362 - -0.1318469047546387 - <_> - - <_> - - - - <_>5 5 3 8 -1. - <_>5 9 3 4 2. - 0 - -5.1256217993795872e-003 - -0.1762325018644333 - 0.1017735973000526 - <_> - - <_> - - - - <_>10 5 7 6 -1. - <_>10 7 7 2 3. - 0 - 0.0976630598306656 - 4.4896239414811134e-003 - -0.8041555285453796 - <_> - - <_> - - - - <_>10 0 7 6 -1. - <_>8 2 7 2 3. - 1 - 0.0320886895060539 - -0.0580484308302403 - 0.3019489049911499 - <_> - - <_> - - - - <_>13 5 6 6 -1. - <_>13 7 6 2 3. - 0 - -0.0865172073245049 - -0.7552989125251770 - 2.8089359402656555e-003 - <_> - - <_> - - - - <_>5 5 7 6 -1. - <_>5 7 7 2 3. - 0 - -0.0285409707576036 - -0.3508501946926117 - 0.0440815910696983 - <_> - - <_> - - - - <_>9 1 6 8 -1. - <_>12 1 3 4 2. - <_>9 5 3 4 2. - 0 - -5.3844689391553402e-003 - 0.0923489034175873 - -0.0700338482856750 - <_> - - <_> - - - - <_>7 1 6 8 -1. - <_>7 1 3 4 2. - <_>10 5 3 4 2. - 0 - -0.0222804397344589 - 0.2494941949844360 - -0.0706586763262749 - <_> - - <_> - - - - <_>7 0 9 4 -1. - <_>10 0 3 4 3. - 0 - 5.1025422289967537e-003 - 0.0608996897935867 - -0.1547394990921021 - <_> - - <_> - - - - <_>1 9 14 3 -1. - <_>1 10 14 1 3. - 0 - 3.7133800797164440e-003 - -0.0871243029832840 - 0.1719526052474976 - <_> - - <_> - - - - <_>5 9 15 3 -1. - <_>5 10 15 1 3. - 0 - -4.0405280888080597e-003 - 0.1505451947450638 - -0.0996850505471230 - <_> - - <_> - - - - <_>3 1 12 3 -1. - <_>2 2 12 1 3. - 1 - 0.0489449016749859 - 0.0206377804279327 - -0.7111399769783020 - <_> - - <_> - - - - <_>5 12 12 6 -1. - <_>11 12 6 3 2. - <_>5 15 6 3 2. - 0 - -4.0832208469510078e-003 - -0.1610490977764130 - 0.0886750072240829 - <_> - - <_> - - - - <_>5 12 12 4 -1. - <_>5 12 6 2 2. - <_>11 14 6 2 2. - 0 - -2.2145630791783333e-003 - -0.2190154045820236 - 0.1004524007439613 - <_> - - <_> - - - - <_>15 4 3 9 -1. - <_>16 5 1 9 3. - 1 - -0.0642574504017830 - -0.5769470930099487 - 0.0102538801729679 - <_> - - <_> - - - - <_>7 4 9 3 -1. - <_>6 5 9 1 3. - 1 - 0.0118954200297594 - -0.0705605968832970 - 0.2614729106426239 - <_> - - <_> - - - - <_>13 3 7 4 -1. - <_>13 5 7 2 2. - 0 - -0.0449882596731186 - -0.6844028234481812 - 9.9674779921770096e-003 - <_> - - <_> - - - - <_>4 0 9 5 -1. - <_>7 0 3 5 3. - 0 - 6.3484339043498039e-003 - 0.0847386568784714 - -0.1629998981952667 - <_> - - <_> - - - - <_>10 6 6 6 -1. - <_>12 6 2 6 3. - 0 - -0.0565874390304089 - 0.4896005094051361 - -0.0196411404758692 - <_> - - <_> - - - - <_>0 6 12 4 -1. - <_>0 6 6 2 2. - <_>6 8 6 2 2. - 0 - 0.0358534008264542 - 0.0196954403072596 - -0.6810833811759949 - <_> - - <_> - - - - <_>10 11 9 6 -1. - <_>13 11 3 6 3. - 0 - -4.5450981706380844e-003 - 0.0690726563334465 - -0.0912766382098198 - <_> - - <_> - - - - <_>2 6 16 8 -1. - <_>2 10 16 4 2. - 0 - 0.1060857027769089 - -0.0499939918518066 - 0.3213947117328644 - <_> - - <_> - - - - <_>17 0 2 10 -1. - <_>17 0 1 10 2. - 1 - -0.0459244102239609 - -0.8274418115615845 - 0.0121494196355343 - <_> - - <_> - - - - <_>5 0 10 2 -1. - <_>5 0 10 1 2. - 1 - -0.0122732399031520 - -0.3066928982734680 - 0.0516933985054493 - <_> - - <_> - - - - <_>9 11 13 3 -1. - <_>9 12 13 1 3. - 0 - 0.0806673914194107 - 2.1730009466409683e-003 - -1.0002529621124268 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - -0.0230448599904776 - 0.4508534967899323 - -0.0362739786505699 - <_> - - <_> - - - - <_>18 6 4 12 -1. - <_>18 9 4 6 2. - 0 - 0.0187029093503952 - 0.0469454601407051 - -0.2179626971483231 - <_> - - <_> - - - - <_>6 4 9 7 -1. - <_>9 4 3 7 3. - 0 - -0.0968200266361237 - 0.4039891064167023 - -0.0378190912306309 - <_> - - <_> - - - - <_>11 9 6 7 -1. - <_>13 9 2 7 3. - 0 - 0.0605257898569107 - 0.0157271604984999 - -0.4566167891025543 - <_> - - <_> - - - - <_>5 9 6 7 -1. - <_>7 9 2 7 3. - 0 - 0.0104185696691275 - 0.0627266466617584 - -0.2444117963314056 - <_> - - <_> - - - - <_>1 13 20 5 -1. - <_>6 13 10 5 2. - 0 - 0.0107262097299099 - -0.0719688534736633 - 0.2209997028112412 - <_> - - <_> - - - - <_>7 9 8 6 -1. - <_>9 9 4 6 2. - 0 - -2.7160700410604477e-003 - 0.1288274973630905 - -0.1462963074445725 - <_> - - <_> - - - - <_>5 5 12 4 -1. - <_>8 5 6 4 2. - 0 - 8.5867568850517273e-003 - -0.0686456635594368 - 0.2584058940410614 - -0.7232239842414856 - 15 - -1 - <_> - - - <_> - - <_> - - - - <_>1 11 20 6 -1. - <_>6 11 10 6 2. - 0 - -0.0258516706526279 - 0.1801179945468903 - -0.2474593073129654 - <_> - - <_> - - - - <_>1 8 20 7 -1. - <_>6 8 10 7 2. - 0 - 0.1405462026596069 - -0.0513192899525166 - 0.4076690971851349 - <_> - - <_> - - - - <_>2 9 18 6 -1. - <_>8 11 6 2 9. - 0 - -0.2725507915019989 - 0.4994125962257385 - -0.0450339317321777 - <_> - - <_> - - - - <_>8 13 9 4 -1. - <_>8 15 9 2 2. - 0 - 1.3978329952806234e-003 - 0.0536005087196827 - -0.2179338932037354 - <_> - - <_> - - - - <_>1 12 9 6 -1. - <_>1 15 9 3 2. - 0 - -0.0350598804652691 - -0.2994329035282135 - 0.0899913236498833 - <_> - - <_> - - - - <_>9 2 8 6 -1. - <_>13 2 4 3 2. - <_>9 5 4 3 2. - 0 - -3.2894399482756853e-003 - 0.1026419997215271 - -0.0947112515568733 - <_> - - <_> - - - - <_>0 5 22 5 -1. - <_>11 5 11 5 2. - 0 - 0.1824229061603546 - 0.0256266705691814 - -0.6876572966575623 - <_> - - <_> - - - - <_>2 0 18 18 -1. - <_>2 9 18 9 2. - 0 - -0.0787410810589790 - 0.1081041991710663 - -0.1449752002954483 - <_> - - <_> - - - - <_>6 7 3 8 -1. - <_>6 11 3 4 2. - 0 - 0.0139451297000051 - -0.0713719129562378 - 0.3131574988365173 - <_> - - <_> - - - - <_>11 12 8 6 -1. - <_>13 12 4 6 2. - 0 - 0.0446802787482738 - -0.0304461494088173 - 0.3926362991333008 - <_> - - <_> - - - - <_>3 8 6 8 -1. - <_>3 8 3 4 2. - <_>6 12 3 4 2. - 0 - -2.6441770605742931e-003 - 0.1159669980406761 - -0.1780045032501221 - <_> - - <_> - - - - <_>11 6 7 4 -1. - <_>11 8 7 2 2. - 0 - -5.1071979105472565e-003 - -0.1173994019627571 - 0.0678234472870827 - <_> - - <_> - - - - <_>9 2 4 6 -1. - <_>11 2 2 6 2. - 0 - -0.0325821787118912 - -0.5912901759147644 - 0.0333520211279392 - <_> - - <_> - - - - <_>3 14 16 4 -1. - <_>11 14 8 2 2. - <_>3 16 8 2 2. - 0 - -0.0277558397501707 - -0.7064936161041260 - 0.0167614892125130 - <_> - - <_> - - - - <_>5 14 6 4 -1. - <_>5 16 6 2 2. - 0 - -6.0038521041860804e-005 - 0.0738326683640480 - -0.2293335944414139 - <_> - - <_> - - - - <_>9 5 4 6 -1. - <_>9 5 2 6 2. - 0 - 0.0305061805993319 - -0.0380560606718063 - 0.4411535859107971 - <_> - - <_> - - - - <_>5 12 12 6 -1. - <_>8 12 6 6 2. - 0 - -6.2056961469352245e-003 - -0.1775723993778229 - 0.0937074720859528 - <_> - - <_> - - - - <_>7 14 8 4 -1. - <_>7 16 8 2 2. - 0 - -8.0766230821609497e-003 - -0.2025669962167740 - 0.0740596428513527 - <_> - - <_> - - - - <_>1 3 18 3 -1. - <_>1 4 18 1 3. - 0 - -0.0332099087536335 - 0.4637222886085510 - -0.0349030084908009 - <_> - - <_> - - - - <_>8 3 14 3 -1. - <_>8 4 14 1 3. - 0 - 0.0355306081473827 - -0.0316795185208321 - 0.4520249962806702 - <_> - - <_> - - - - <_>1 0 14 4 -1. - <_>1 0 7 2 2. - <_>8 2 7 2 2. - 0 - 0.0162976402789354 - 0.0441890396177769 - -0.3484537005424500 - <_> - - <_> - - - - <_>10 10 12 3 -1. - <_>10 11 12 1 3. - 0 - 9.9985357373952866e-003 - -0.0482553206384182 - 0.1607805043458939 - <_> - - <_> - - - - <_>1 10 12 3 -1. - <_>1 11 12 1 3. - 0 - -5.2390778437256813e-003 - 0.2323659956455231 - -0.0760327428579330 - <_> - - <_> - - - - <_>10 7 8 3 -1. - <_>10 7 4 3 2. - 0 - -3.2508899457752705e-003 - 0.0543693900108337 - -0.0910402536392212 - <_> - - <_> - - - - <_>11 0 6 6 -1. - <_>9 2 6 2 3. - 1 - 0.0556407906115055 - -0.0388111285865307 - 0.4203402101993561 - <_> - - <_> - - - - <_>17 0 2 10 -1. - <_>17 0 1 10 2. - 1 - 0.0339989811182022 - 0.0222513303160667 - -0.3561536073684692 - <_> - - <_> - - - - <_>4 7 8 3 -1. - <_>8 7 4 3 2. - 0 - -4.3103890493512154e-003 - 0.1128742992877960 - -0.1763073056936264 - <_> - - <_> - - - - <_>13 0 8 6 -1. - <_>13 2 8 2 3. - 0 - -7.9246461391448975e-003 - -0.1099233999848366 - 0.0350996293127537 - <_> - - <_> - - - - <_>1 0 8 6 -1. - <_>1 2 8 2 3. - 0 - 0.0442733801901340 - 0.0280945692211390 - -0.6092141866683960 - <_> - - <_> - - - - <_>17 0 2 10 -1. - <_>17 0 1 10 2. - 1 - 0.0599073283374310 - 9.7544339951127768e-004 - -0.9052320718765259 - <_> - - <_> - - - - <_>5 0 10 2 -1. - <_>5 0 10 1 2. - 1 - 0.0333788692951202 - 0.0177232790738344 - -0.8525460958480835 - <_> - - <_> - - - - <_>10 6 6 4 -1. - <_>10 6 3 4 2. - 0 - 0.0146941700950265 - -0.0490315109491348 - 0.2799833118915558 - <_> - - <_> - - - - <_>0 4 14 3 -1. - <_>0 5 14 1 3. - 0 - -5.3877499885857105e-003 - 0.1821904927492142 - -0.0823825225234032 - <_> - - <_> - - - - <_>3 3 16 10 -1. - <_>11 3 8 5 2. - <_>3 8 8 5 2. - 0 - -0.0179768893867731 - -0.1938468962907791 - 0.0849847570061684 - <_> - - <_> - - - - <_>1 5 12 3 -1. - <_>1 6 12 1 3. - 0 - -4.4651641510426998e-003 - 0.1763291060924530 - -0.0950757712125778 - <_> - - <_> - - - - <_>9 6 13 4 -1. - <_>9 8 13 2 2. - 0 - 0.0693722963333130 - 3.1770321074873209e-003 - -0.6755440235137940 - <_> - - <_> - - - - <_>7 5 8 6 -1. - <_>7 5 4 3 2. - <_>11 8 4 3 2. - 0 - -0.0170022696256638 - -0.3382794857025147 - 0.0447317287325859 - <_> - - <_> - - - - <_>13 3 4 11 -1. - <_>14 4 2 11 2. - 1 - 0.0172742400318384 - -0.0247697103768587 - 0.1185202971100807 - <_> - - <_> - - - - <_>9 2 11 2 -1. - <_>9 2 11 1 2. - 1 - 0.0403887294232845 - -0.0329676792025566 - 0.4732314050197601 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>5 14 12 2 2. - 0 - 0.0142154004424810 - 0.0298468600958586 - -0.4415706098079681 - <_> - - <_> - - - - <_>0 9 16 4 -1. - <_>0 9 8 2 2. - <_>8 11 8 2 2. - 0 - 0.0416277199983597 - -0.0459539182484150 - 0.3297838866710663 - <_> - - <_> - - - - <_>7 10 9 7 -1. - <_>10 10 3 7 3. - 0 - -1.7416840419173241e-003 - 0.0872863084077835 - -0.0888622030615807 - <_> - - <_> - - - - <_>10 7 5 6 -1. - <_>10 7 5 3 2. - 1 - -9.8077040165662766e-003 - -0.2102667987346649 - 0.0774018764495850 - <_> - - <_> - - - - <_>11 5 10 3 -1. - <_>11 5 5 3 2. - 1 - 0.0218366496264935 - 0.0432117693126202 - -0.1533042043447495 - <_> - - <_> - - - - <_>2 13 12 5 -1. - <_>5 13 6 5 2. - 0 - -0.0707430988550186 - 0.3301903903484345 - -0.0527479499578476 - <_> - - <_> - - - - <_>17 9 4 7 -1. - <_>17 9 2 7 2. - 0 - -0.0111810201779008 - -0.1149393990635872 - 0.0278584603220224 - <_> - - <_> - - - - <_>0 6 12 3 -1. - <_>0 7 12 1 3. - 0 - -0.0146235600113869 - 0.3232707083225250 - -0.0441660583019257 - <_> - - <_> - - - - <_>18 6 2 10 -1. - <_>18 6 1 10 2. - 1 - -9.6702557057142258e-003 - -0.1815731972455978 - 0.0361545309424400 - <_> - - <_> - - - - <_>1 14 8 3 -1. - <_>5 14 4 3 2. - 0 - 8.3439601585268974e-003 - -0.0524739101529121 - 0.2744483947753906 - <_> - - <_> - - - - <_>6 11 12 3 -1. - <_>10 11 4 3 3. - 0 - 0.0229705590754747 - 0.0349300503730774 - -0.1577367037534714 - <_> - - <_> - - - - <_>0 14 8 3 -1. - <_>4 14 4 3 2. - 0 - -8.2734245806932449e-003 - 0.1161279007792473 - -0.1196577027440071 - <_> - - <_> - - - - <_>5 11 16 3 -1. - <_>9 11 8 3 2. - 0 - 8.7074404582381248e-003 - -0.0408297888934612 - 0.1048133000731468 - <_> - - <_> - - - - <_>1 9 4 7 -1. - <_>3 9 2 7 2. - 0 - -0.0188258197158575 - -0.3879455029964447 - 0.0473507009446621 - <_> - - <_> - - - - <_>6 12 10 6 -1. - <_>6 14 10 2 3. - 0 - -7.2092940099537373e-003 - -0.1988696008920670 - 0.0759528502821922 - <_> - - <_> - - - - <_>0 16 12 2 -1. - <_>0 17 12 1 2. - 0 - 1.6543369565624744e-004 - -0.1067482978105545 - 0.1551059931516647 - <_> - - <_> - - - - <_>12 5 4 12 -1. - <_>14 5 2 6 2. - <_>12 11 2 6 2. - 0 - 8.9294537901878357e-003 - -0.0670596435666084 - 0.0902067869901657 - <_> - - <_> - - - - <_>6 11 6 6 -1. - <_>8 11 2 6 3. - 0 - 3.1991640571504831e-003 - 0.0744457468390465 - -0.1968283951282501 - <_> - - <_> - - - - <_>4 16 15 2 -1. - <_>4 17 15 1 2. - 0 - -1.1280879698460922e-004 - 0.0797033905982971 - -0.1366118937730789 - <_> - - <_> - - - - <_>5 0 12 9 -1. - <_>9 3 4 3 9. - 0 - -0.0696137994527817 - -0.2101052999496460 - 0.0657716169953346 - <_> - - <_> - - - - <_>8 0 6 9 -1. - <_>8 3 6 3 3. - 0 - -0.0260666795074940 - 0.2869651019573212 - -0.0574957914650440 - <_> - - <_> - - - - <_>1 0 3 13 -1. - <_>2 0 1 13 3. - 0 - 0.0120507404208183 - -0.0468205101788044 - 0.2799476981163025 - <_> - - <_> - - - - <_>10 1 6 4 -1. - <_>10 1 3 4 2. - 0 - -0.0396258495748043 - -0.3705450892448425 - 0.0114761395379901 - <_> - - <_> - - - - <_>8 1 6 9 -1. - <_>10 1 2 9 3. - 0 - -2.7379901148378849e-003 - 0.0943711325526237 - -0.1620323061943054 - <_> - - <_> - - - - <_>8 3 6 6 -1. - <_>10 3 2 6 3. - 0 - -0.0652625635266304 - -0.6780838966369629 - 0.0194304697215557 - <_> - - <_> - - - - <_>3 5 11 2 -1. - <_>3 5 11 1 2. - 1 - 0.0231916196644306 - 0.0261343102902174 - -0.4666424989700317 - <_> - - <_> - - - - <_>9 5 6 6 -1. - <_>11 5 2 6 3. - 0 - 0.0477419309318066 - -0.0252911895513535 - 0.2909249067306519 - <_> - - <_> - - - - <_>6 4 6 10 -1. - <_>6 9 6 5 2. - 0 - -0.1283002048730850 - -0.8718711733818054 - 0.0138835404068232 - <_> - - <_> - - - - <_>11 2 3 12 -1. - <_>12 2 1 12 3. - 0 - -0.0426892600953579 - -0.6764482259750366 - 6.8771280348300934e-003 - <_> - - <_> - - - - <_>8 2 3 12 -1. - <_>9 2 1 12 3. - 0 - 6.2811248935759068e-003 - -0.0648037493228912 - 0.2099442034959793 - <_> - - <_> - - - - <_>18 9 4 9 -1. - <_>18 9 2 9 2. - 0 - 0.0275320801883936 - 0.0153665402904153 - -0.2145736962556839 - <_> - - <_> - - - - <_>1 5 6 6 -1. - <_>1 8 6 3 2. - 0 - -3.4494648571126163e-004 - 0.1182949990034103 - -0.1064111962914467 - <_> - - <_> - - - - <_>10 6 6 6 -1. - <_>12 6 2 6 3. - 0 - -0.0321870110929012 - 0.2067631930112839 - -0.0278047490864992 - <_> - - <_> - - - - <_>10 2 2 12 -1. - <_>11 2 1 12 2. - 0 - -2.4451729841530323e-003 - -0.1897021979093552 - 0.0766128376126289 - <_> - - <_> - - - - <_>11 0 5 6 -1. - <_>11 3 5 3 2. - 0 - 0.0396311208605766 - 0.0114572802558541 - -0.4411228001117706 - <_> - - <_> - - - - <_>6 0 5 6 -1. - <_>6 3 5 3 2. - 0 - -9.0082110837101936e-003 - -0.2032909989356995 - 0.0719978883862495 - <_> - - <_> - - - - <_>13 9 5 8 -1. - <_>13 13 5 4 2. - 0 - -0.0605949088931084 - 0.2583183050155640 - -0.0322740003466606 - <_> - - <_> - - - - <_>0 9 20 2 -1. - <_>10 9 10 2 2. - 0 - 0.0336786396801472 - 0.0365656390786171 - -0.3323315083980560 - <_> - - <_> - - - - <_>14 7 3 10 -1. - <_>14 12 3 5 2. - 0 - 0.0145654100924730 - -0.0492692105472088 - 0.1828067004680634 - <_> - - <_> - - - - <_>11 5 11 2 -1. - <_>11 5 11 1 2. - 1 - 4.0103439241647720e-003 - -0.1243560016155243 - 0.1124764010310173 - <_> - - <_> - - - - <_>14 7 3 10 -1. - <_>14 12 3 5 2. - 0 - 1.7989509506151080e-003 - -0.0546759888529778 - 0.1070184037089348 - <_> - - <_> - - - - <_>5 13 12 2 -1. - <_>5 14 12 1 2. - 0 - -1.6359580331481993e-004 - 0.0817552283406258 - -0.1623550057411194 - <_> - - <_> - - - - <_>11 8 4 9 -1. - <_>11 11 4 3 3. - 0 - -0.0319938994944096 - 0.1863123029470444 - -0.0173506308346987 - <_> - - <_> - - - - <_>1 8 12 6 -1. - <_>1 10 12 2 3. - 0 - -0.0817376673221588 - -0.7596148252487183 - 0.0144199002534151 - <_> - - <_> - - - - <_>16 8 3 8 -1. - <_>16 12 3 4 2. - 0 - -0.0882625505328178 - -1. - 5.3146481513977051e-004 - <_> - - <_> - - - - <_>3 8 3 8 -1. - <_>3 12 3 4 2. - 0 - -0.0579979009926319 - -0.8939151167869568 - 0.0124950995668769 - <_> - - <_> - - - - <_>11 8 4 9 -1. - <_>11 11 4 3 3. - 0 - 0.0206914097070694 - -0.0371675081551075 - 0.0972085520625114 - <_> - - <_> - - - - <_>7 8 4 9 -1. - <_>7 11 4 3 3. - 0 - -6.0336058959364891e-003 - 0.1754779070615768 - -0.0869168564677238 - <_> - - <_> - - - - <_>7 3 15 12 -1. - <_>12 7 5 4 9. - 0 - 0.1578976064920425 - 0.0306049603968859 - -0.2219929993152618 - <_> - - <_> - - - - <_>4 10 14 4 -1. - <_>4 10 7 2 2. - <_>11 12 7 2 2. - 0 - 3.3271119464188814e-003 - 0.1120152026414871 - -0.1638471037149429 - <_> - - <_> - - - - <_>9 10 10 6 -1. - <_>14 10 5 3 2. - <_>9 13 5 3 2. - 0 - 0.1138323992490768 - 1.8078039865940809e-003 - -0.9998143911361694 - <_> - - <_> - - - - <_>3 10 10 6 -1. - <_>3 10 5 3 2. - <_>8 13 5 3 2. - 0 - 0.0391889698803425 - -0.0394944287836552 - 0.3413948118686676 - <_> - - <_> - - - - <_>16 7 6 6 -1. - <_>18 7 2 6 3. - 0 - -4.7382968477904797e-003 - -0.0816014036536217 - 0.0354984514415264 - <_> - - <_> - - - - <_>3 5 14 2 -1. - <_>10 5 7 2 2. - 0 - 0.0234581604599953 - -0.0407674796879292 - 0.3479276895523071 - <_> - - <_> - - - - <_>18 2 4 12 -1. - <_>20 2 2 6 2. - <_>18 8 2 6 2. - 0 - 0.0165052209049463 - 0.0201702807098627 - -0.1553200930356979 - <_> - - <_> - - - - <_>3 14 12 4 -1. - <_>3 15 12 2 2. - 0 - 0.0202629491686821 - 0.0212923791259527 - -0.6261150240898132 - <_> - - <_> - - - - <_>7 6 9 6 -1. - <_>7 9 9 3 2. - 0 - -9.1393236070871353e-003 - -0.1363748013973236 - 0.0638918429613113 - <_> - - <_> - - - - <_>1 14 6 4 -1. - <_>4 14 3 4 2. - 0 - -0.0562079809606075 - 0.4067111909389496 - -0.0332582183182240 - <_> - - <_> - - - - <_>12 5 5 12 -1. - <_>12 8 5 6 2. - 0 - 6.6868839785456657e-003 - 0.0641743093729019 - -0.0939662382006645 - <_> - - <_> - - - - <_>5 0 3 17 -1. - <_>6 0 1 17 3. - 0 - 5.8862278237938881e-003 - -0.0657899603247643 - 0.2018133997917175 - <_> - - <_> - - - - <_>16 7 6 6 -1. - <_>18 7 2 6 3. - 0 - -0.1151738017797470 - -1. - 2.5347759947180748e-003 - <_> - - <_> - - - - <_>0 7 6 6 -1. - <_>2 7 2 6 3. - 0 - 5.5793710052967072e-003 - 0.0706422030925751 - -0.1963742971420288 - <_> - - <_> - - - - <_>14 0 3 18 -1. - <_>15 0 1 18 3. - 0 - 0.0321800000965595 - -0.0147377196699381 - 0.2242016047239304 - <_> - - <_> - - - - <_>0 5 5 10 -1. - <_>0 10 5 5 2. - 0 - -9.1598782455548644e-004 - 0.1147874966263771 - -0.1176707968115807 - -0.7688630819320679 - 16 - -1 - <_> - - - <_> - - <_> - - - - <_>5 12 12 4 -1. - <_>5 13 12 2 2. - 0 - 9.1346232220530510e-003 - 0.0886986628174782 - -0.3859564960002899 - <_> - - <_> - - - - <_>7 9 8 6 -1. - <_>7 11 8 2 3. - 0 - -2.4696369655430317e-003 - 0.1677206009626389 - -0.1464917063713074 - <_> - - <_> - - - - <_>2 10 15 4 -1. - <_>2 12 15 2 2. - 0 - 0.0589350201189518 - -0.0133940000087023 - 0.6183267235755920 - <_> - - <_> - - - - <_>5 15 12 3 -1. - <_>5 15 6 3 2. - 0 - -8.9100059121847153e-003 - -0.2695023119449616 - 0.0729398131370544 - <_> - - <_> - - - - <_>7 4 3 14 -1. - <_>8 4 1 14 3. - 0 - 0.0177438799291849 - -0.0502171888947487 - 0.4316602051258087 - <_> - - <_> - - - - <_>7 15 8 3 -1. - <_>7 15 4 3 2. - 0 - 0.0110566504299641 - 0.0391558595001698 - -0.5286077260971069 - <_> - - <_> - - - - <_>1 2 8 6 -1. - <_>1 2 4 3 2. - <_>5 5 4 3 2. - 0 - 0.0161613207310438 - 0.0695810392498970 - -0.3761014044284821 - <_> - - <_> - - - - <_>14 9 6 8 -1. - <_>17 9 3 4 2. - <_>14 13 3 4 2. - 0 - -0.0278790891170502 - 0.2322065979242325 - -0.0559795796871185 - <_> - - <_> - - - - <_>0 0 6 8 -1. - <_>0 0 3 4 2. - <_>3 4 3 4 2. - 0 - -0.0115568395704031 - -0.3123108148574829 - 0.0743399634957314 - <_> - - <_> - - - - <_>14 9 6 8 -1. - <_>17 9 3 4 2. - <_>14 13 3 4 2. - 0 - -0.0696514770388603 - -0.4190568923950195 - 6.9694789126515388e-003 - <_> - - <_> - - - - <_>2 9 6 8 -1. - <_>2 9 3 4 2. - <_>5 13 3 4 2. - 0 - -5.0344727933406830e-003 - 0.1318362057209015 - -0.1970203071832657 - <_> - - <_> - - - - <_>14 10 6 8 -1. - <_>17 10 3 4 2. - <_>14 14 3 4 2. - 0 - -0.0860981196165085 - 0.6572775244712830 - -9.5664570108056068e-003 - <_> - - <_> - - - - <_>2 10 6 8 -1. - <_>2 10 3 4 2. - <_>5 14 3 4 2. - 0 - 0.0255463197827339 - -0.0401363410055637 - 0.5484703779220581 - <_> - - <_> - - - - <_>13 1 6 8 -1. - <_>16 1 3 4 2. - <_>13 5 3 4 2. - 0 - -0.0268708802759647 - -0.2530665099620819 - 0.0441817194223404 - <_> - - <_> - - - - <_>3 3 12 3 -1. - <_>3 4 12 1 3. - 0 - 9.5859682187438011e-003 - -0.0818824619054794 - 0.2689467072486877 - <_> - - <_> - - - - <_>13 1 6 8 -1. - <_>16 1 3 4 2. - <_>13 5 3 4 2. - 0 - 0.0266838092356920 - 0.0265933498740196 - -0.4412704110145569 - <_> - - <_> - - - - <_>3 1 6 8 -1. - <_>3 1 3 4 2. - <_>6 5 3 4 2. - 0 - -0.0144908400252461 - -0.3569746911525726 - 0.0700729414820671 - <_> - - <_> - - - - <_>3 3 16 3 -1. - <_>3 4 16 1 3. - 0 - -2.2448399104177952e-003 - 0.2008823007345200 - -0.1222817003726959 - <_> - - <_> - - - - <_>7 13 6 4 -1. - <_>7 15 6 2 2. - 0 - 4.8795710317790508e-003 - 0.0458209812641144 - -0.3949818909168243 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 16 6 2 2. - 0 - -6.1262990348041058e-003 - -0.1882608979940414 - 0.0788120776414871 - <_> - - <_> - - - - <_>2 10 15 3 -1. - <_>2 11 15 1 3. - 0 - 0.0169529691338539 - -0.0616842210292816 - 0.3360370099544525 - <_> - - <_> - - - - <_>8 12 8 6 -1. - <_>10 12 4 6 2. - 0 - -4.5547191984951496e-003 - -0.1947139054536820 - 0.0531471893191338 - <_> - - <_> - - - - <_>2 4 13 4 -1. - <_>2 5 13 2 2. - 0 - -1.2753040064126253e-003 - 0.1480087935924530 - -0.1424434930086136 - <_> - - <_> - - - - <_>9 9 12 3 -1. - <_>9 10 12 1 3. - 0 - 0.0220602806657553 - -0.0354067385196686 - 0.3377530872821808 - <_> - - <_> - - - - <_>3 13 16 4 -1. - <_>3 13 8 2 2. - <_>11 15 8 2 2. - 0 - 0.0210503898561001 - 0.0422891303896904 - -0.4588645100593567 - <_> - - <_> - - - - <_>8 12 8 6 -1. - <_>10 12 4 6 2. - 0 - 0.0956372097134590 - -0.0131716495379806 - 0.5553498268127441 - <_> - - <_> - - - - <_>6 12 8 6 -1. - <_>8 12 4 6 2. - 0 - -3.6728319246321917e-003 - -0.1884289979934692 - 0.0954581424593925 - <_> - - <_> - - - - <_>9 4 13 2 -1. - <_>9 5 13 1 2. - 0 - 1.6345079347956926e-004 - -0.0604448094964027 - 0.1053673028945923 - <_> - - <_> - - - - <_>7 3 8 12 -1. - <_>7 9 8 6 2. - 0 - 0.2533828914165497 - 0.0160262603312731 - -0.9999446868896484 - <_> - - <_> - - - - <_>3 6 17 3 -1. - <_>3 7 17 1 3. - 0 - -0.0461133308708668 - 0.5424798727035523 - -0.0278902091085911 - <_> - - <_> - - - - <_>3 0 14 4 -1. - <_>3 0 7 2 2. - <_>10 2 7 2 2. - 0 - 5.2588270045816898e-003 - 0.0798673033714294 - -0.2070070952177048 - <_> - - <_> - - - - <_>11 4 6 5 -1. - <_>11 4 3 5 2. - 1 - -0.1344957053661346 - -0.4127010107040405 - 8.1500215455889702e-003 - <_> - - <_> - - - - <_>11 4 5 6 -1. - <_>11 4 5 3 2. - 1 - 1.6953679732978344e-003 - 0.1103534996509552 - -0.1680212020874023 - <_> - - <_> - - - - <_>10 5 4 6 -1. - <_>10 5 2 6 2. - 0 - 0.0394921414554119 - -0.0134100103750825 - 0.3844763934612274 - <_> - - <_> - - - - <_>4 12 12 3 -1. - <_>8 12 4 3 3. - 0 - -9.3634781660512090e-004 - 0.1098681986331940 - -0.1731048971414566 - <_> - - <_> - - - - <_>8 6 8 7 -1. - <_>8 6 4 7 2. - 0 - -0.0444957092404366 - 0.1947119981050491 - -0.0407688990235329 - <_> - - <_> - - - - <_>5 0 8 12 -1. - <_>5 0 4 6 2. - <_>9 6 4 6 2. - 0 - 0.0606301091611385 - -0.0422523692250252 - 0.5141298770904541 - <_> - - <_> - - - - <_>7 0 12 4 -1. - <_>13 0 6 2 2. - <_>7 2 6 2 2. - 0 - 7.5067640282213688e-003 - 0.0420869700610638 - -0.1608040034770966 - <_> - - <_> - - - - <_>1 4 6 5 -1. - <_>4 4 3 5 2. - 0 - 9.9260415881872177e-003 - 0.0641195327043533 - -0.2621530890464783 - <_> - - <_> - - - - <_>15 0 7 4 -1. - <_>15 0 7 2 2. - 1 - 0.0605285204946995 - 0.0241899695247412 - -0.3660838901996613 - <_> - - <_> - - - - <_>5 2 8 6 -1. - <_>5 2 4 3 2. - <_>9 5 4 3 2. - 0 - -6.8054231815040112e-003 - 0.1250838935375214 - -0.1388971060514450 - <_> - - <_> - - - - <_>4 2 15 3 -1. - <_>4 3 15 1 3. - 0 - -2.0940289832651615e-003 - 0.1399659961462021 - -0.0827063992619514 - <_> - - <_> - - - - <_>4 1 14 3 -1. - <_>4 2 14 1 3. - 0 - -9.6904346719384193e-003 - 0.2668136060237885 - -0.0715769901871681 - <_> - - <_> - - - - <_>15 5 4 6 -1. - <_>15 8 4 3 2. - 0 - 0.0183203499764204 - 0.0313219800591469 - -0.2346061021089554 - <_> - - <_> - - - - <_>0 1 17 2 -1. - <_>0 2 17 1 2. - 0 - 5.0429959082975984e-004 - -0.1166971996426582 - 0.1651464998722076 - <_> - - <_> - - - - <_>15 5 4 6 -1. - <_>15 8 4 3 2. - 0 - -4.7016288153827190e-003 - -0.1200615018606186 - 0.0592004284262657 - <_> - - <_> - - - - <_>3 5 4 6 -1. - <_>3 8 4 3 2. - 0 - -0.0199268702417612 - -0.3948509991168976 - 0.0411430187523365 - <_> - - <_> - - - - <_>3 0 18 3 -1. - <_>3 1 18 1 3. - 0 - 7.4013080447912216e-003 - -0.0763312578201294 - 0.2106536030769348 - <_> - - <_> - - - - <_>7 1 6 4 -1. - <_>10 1 3 4 2. - 0 - 0.0148796299472451 - 0.0479790717363358 - -0.3401476144790649 - <_> - - <_> - - - - <_>0 11 22 7 -1. - <_>0 11 11 7 2. - 0 - 0.1552755981683731 - 0.0322258807718754 - -0.4693807959556580 - <_> - - <_> - - - - <_>3 5 4 12 -1. - <_>3 5 2 6 2. - <_>5 11 2 6 2. - 0 - -7.0786331780254841e-003 - 0.1219948008656502 - -0.1200494021177292 - <_> - - <_> - - - - <_>14 7 3 10 -1. - <_>14 12 3 5 2. - 0 - 0.0298721697181463 - -0.0436775088310242 - 0.2352982014417648 - <_> - - <_> - - - - <_>4 11 14 4 -1. - <_>4 11 7 2 2. - <_>11 13 7 2 2. - 0 - 0.0305551700294018 - 0.0317758806049824 - -0.5782545208930969 - <_> - - <_> - - - - <_>7 11 8 6 -1. - <_>11 11 4 3 2. - <_>7 14 4 3 2. - 0 - 0.0102845700457692 - 0.0472028106451035 - -0.2956649959087372 - <_> - - <_> - - - - <_>3 5 3 13 -1. - <_>4 5 1 13 3. - 0 - 0.0198087096214294 - -0.0457759387791157 - 0.3323101997375488 - <_> - - <_> - - - - <_>17 1 4 12 -1. - <_>19 1 2 6 2. - <_>17 7 2 6 2. - 0 - 0.0272188801318407 - 0.0255772192031145 - -0.3318088054656982 - <_> - - <_> - - - - <_>1 1 4 12 -1. - <_>1 1 2 6 2. - <_>3 7 2 6 2. - 0 - 0.0140976803377271 - 0.0521574206650257 - -0.2935838103294373 - <_> - - <_> - - - - <_>7 0 13 16 -1. - <_>7 4 13 8 2. - 0 - 0.2428656965494156 - 0.0146924601867795 - -0.6985487937927246 - <_> - - <_> - - - - <_>1 4 13 2 -1. - <_>1 5 13 1 2. - 0 - 0.0124195702373981 - -0.0471058785915375 - 0.3669505119323731 - <_> - - <_> - - - - <_>9 14 6 4 -1. - <_>9 16 6 2 2. - 0 - 1.3503880472853780e-003 - 0.0537913590669632 - -0.2095365971326828 - <_> - - <_> - - - - <_>2 4 17 3 -1. - <_>2 5 17 1 3. - 0 - -0.0156262908130884 - 0.2788845896720886 - -0.0600537508726120 - <_> - - <_> - - - - <_>14 0 3 10 -1. - <_>15 1 1 10 3. - 1 - 0.0158501397818327 - -0.0303249098360538 - 0.1028752028942108 - <_> - - <_> - - - - <_>7 0 8 3 -1. - <_>6 1 8 1 3. - 1 - -0.0408689193427563 - -0.8040220737457275 - 0.0176014993339777 - <_> - - <_> - - - - <_>14 0 3 10 -1. - <_>15 1 1 10 3. - 1 - 0.0641086399555206 - 2.5845379568636417e-003 - -0.5385494232177734 - <_> - - <_> - - - - <_>8 0 10 3 -1. - <_>7 1 10 1 3. - 1 - 0.0499271005392075 - 0.0218633003532887 - -0.6178072094917297 - <_> - - <_> - - - - <_>11 1 2 7 -1. - <_>11 1 1 7 2. - 1 - 0.0146554196253419 - 0.0196633692830801 - -0.2042617052793503 - <_> - - <_> - - - - <_>8 0 3 14 -1. - <_>9 0 1 14 3. - 0 - -0.0240948107093573 - 0.3760913014411926 - -0.0409541018307209 - <_> - - <_> - - - - <_>11 1 2 7 -1. - <_>11 1 1 7 2. - 1 - 0.0294177699834108 - -8.6903842166066170e-003 - 0.4044741988182068 - <_> - - <_> - - - - <_>11 1 7 2 -1. - <_>11 1 7 1 2. - 1 - -0.0141586400568485 - 0.3781171143054962 - -0.0403216406702995 - <_> - - <_> - - - - <_>7 9 9 8 -1. - <_>10 9 3 8 3. - 0 - -0.0467549897730350 - 0.2210430949926376 - -0.0289961099624634 - <_> - - <_> - - - - <_>1 7 4 8 -1. - <_>3 7 2 8 2. - 0 - -0.0114379497244954 - -0.2503308951854706 - 0.0582142882049084 - <_> - - <_> - - - - <_>17 11 4 6 -1. - <_>17 11 2 6 2. - 0 - -0.0425987802445889 - 0.3756220042705536 - -0.0163490902632475 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>10 12 2 6 3. - 0 - -0.0152011597529054 - -0.3563781976699829 - 0.0386903695762157 - <_> - - <_> - - - - <_>11 0 3 6 -1. - <_>12 1 1 6 3. - 1 - 0.0433788485825062 - 3.3045639283955097e-003 - -0.4672946929931641 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>10 1 6 1 3. - 1 - 5.5153011344373226e-003 - -0.0835836082696915 - 0.1879317015409470 - <_> - - <_> - - - - <_>9 14 9 4 -1. - <_>12 14 3 4 3. - 0 - -7.8126927837729454e-003 - -0.1658685952425003 - 0.0438011288642883 - <_> - - <_> - - - - <_>8 2 6 4 -1. - <_>8 2 6 2 2. - 1 - 0.0416526012122631 - -0.0318045206367970 - 0.4351752102375031 - <_> - - <_> - - - - <_>10 10 4 6 -1. - <_>10 10 2 6 2. - 0 - 3.4417589195072651e-003 - 0.0422822795808315 - -0.1308895945549011 - <_> - - <_> - - - - <_>1 8 18 2 -1. - <_>1 9 18 1 2. - 0 - 1.3004569336771965e-004 - -0.1126001030206680 - 0.1396459937095642 - <_> - - <_> - - - - <_>8 8 14 3 -1. - <_>8 9 14 1 3. - 0 - -0.0773477330803871 - 0.7075064778327942 - -5.4134069941937923e-003 - <_> - - <_> - - - - <_>3 15 14 3 -1. - <_>10 15 7 3 2. - 0 - -1.6143550164997578e-003 - 0.1192042008042336 - -0.1188426986336708 - <_> - - <_> - - - - <_>8 8 14 3 -1. - <_>8 9 14 1 3. - 0 - -9.8279246594756842e-004 - 0.0631562769412994 - -0.0527811013162136 - <_> - - <_> - - - - <_>4 14 9 4 -1. - <_>7 14 3 4 3. - 0 - -0.0456674695014954 - -0.3450087010860443 - 0.0446007288992405 - -0.7757309079170227 - 17 - -1 - <_> - - - <_> - - <_> - - - - <_>10 6 4 8 -1. - <_>10 6 2 8 2. - 1 - 0.0733159780502319 - -0.1141010969877243 - 0.4003581106662750 - <_> - - <_> - - - - <_>2 11 18 3 -1. - <_>8 11 6 3 3. - 0 - 0.0252756699919701 - -0.0720138773322105 - 0.3609578013420105 - <_> - - <_> - - - - <_>10 0 12 4 -1. - <_>10 0 12 2 2. - 1 - 0.0188738591969013 - -0.1723437011241913 - 0.1822322010993958 - <_> - - <_> - - - - <_>6 6 16 4 -1. - <_>14 6 8 2 2. - <_>6 8 8 2 2. - 0 - 7.4607720307540148e-005 - -0.0816272869706154 - 0.0888885036110878 - <_> - - <_> - - - - <_>6 3 4 14 -1. - <_>7 3 2 14 2. - 0 - 4.2250280966982245e-004 - -0.1284023970365524 - 0.1179141998291016 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>14 12 2 6 3. - 0 - 0.0144024603068829 - 0.0209603402763605 - 0.1902469992637634 - <_> - - <_> - - - - <_>4 12 6 6 -1. - <_>6 12 2 6 3. - 0 - -2.0460959058254957e-003 - 0.0957124978303909 - -0.2151706069707871 - <_> - - <_> - - - - <_>14 8 3 8 -1. - <_>14 12 3 4 2. - 0 - 7.1128448471426964e-003 - -0.0561004802584648 - 0.2098432034254074 - <_> - - <_> - - - - <_>0 6 16 4 -1. - <_>0 6 8 2 2. - <_>8 8 8 2 2. - 0 - -6.5832170657813549e-003 - -0.2113818973302841 - 0.0760941505432129 - <_> - - <_> - - - - <_>9 10 5 6 -1. - <_>9 13 5 3 2. - 0 - -4.1252959636040032e-004 - 0.1310734003782272 - -0.1567085981369019 - <_> - - <_> - - - - <_>7 5 6 12 -1. - <_>7 5 3 6 2. - <_>10 11 3 6 2. - 0 - -0.0443308316171169 - 0.5404803752899170 - -0.0190594792366028 - <_> - - <_> - - - - <_>1 5 21 9 -1. - <_>8 8 7 3 9. - 0 - 0.0117001300677657 - 0.0517124012112617 - -0.1721616983413696 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>9 6 1 12 3. - 0 - 3.5091140307486057e-003 - -0.0767679512500763 - 0.1777625977993012 - <_> - - <_> - - - - <_>11 3 3 11 -1. - <_>12 4 1 11 3. - 1 - 0.0155975697562099 - 0.0383078902959824 - -0.1473001986742020 - <_> - - <_> - - - - <_>11 5 9 3 -1. - <_>10 6 9 1 3. - 1 - -0.0362853705883026 - 0.3534766137599945 - -0.0450184904038906 - <_> - - <_> - - - - <_>12 11 6 6 -1. - <_>12 13 6 2 3. - 0 - -0.0451182983815670 - -0.5707414150238037 - 0.0106467101722956 - <_> - - <_> - - - - <_>0 1 9 9 -1. - <_>3 1 3 9 3. - 0 - 0.0137345800176263 - 0.0660183578729630 - -0.2048089057207108 - <_> - - <_> - - - - <_>6 0 12 12 -1. - <_>9 0 6 12 2. - 0 - -0.0271209795027971 - 0.0480942092835903 - -0.0513949617743492 - <_> - - <_> - - - - <_>7 14 6 4 -1. - <_>10 14 3 4 2. - 0 - -1.5354059869423509e-003 - -0.2354800999164581 - 0.0530746094882488 - <_> - - <_> - - - - <_>8 7 13 3 -1. - <_>8 8 13 1 3. - 0 - 3.6000818945467472e-003 - -0.0589443407952785 - 0.1182541027665138 - <_> - - <_> - - - - <_>2 13 12 4 -1. - <_>5 13 6 4 2. - 0 - 6.8916529417037964e-003 - -0.0500144883990288 - 0.2690939903259277 - <_> - - <_> - - - - <_>15 3 2 13 -1. - <_>15 3 1 13 2. - 1 - 3.5373449791222811e-003 - -0.1294703930616379 - 0.0886970385909081 - <_> - - <_> - - - - <_>9 5 11 2 -1. - <_>9 5 11 1 2. - 1 - -4.1431561112403870e-003 - -0.1788363009691238 - 0.0690981075167656 - <_> - - <_> - - - - <_>13 2 2 16 -1. - <_>13 10 2 8 2. - 0 - -0.1076257973909378 - -1. - 4.7263409942388535e-003 - <_> - - <_> - - - - <_>7 2 2 16 -1. - <_>7 10 2 8 2. - 0 - 9.7946207970380783e-003 - -0.0540387704968452 - 0.2411547005176544 - <_> - - <_> - - - - <_>14 0 7 6 -1. - <_>12 2 7 2 3. - 1 - 0.0100542800500989 - -0.0806248933076859 - 0.1162756010890007 - <_> - - <_> - - - - <_>7 3 6 12 -1. - <_>7 3 3 6 2. - <_>10 9 3 6 2. - 0 - -8.7350717512890697e-004 - -0.1819397956132889 - 0.0774685069918633 - <_> - - <_> - - - - <_>9 14 8 4 -1. - <_>9 16 8 2 2. - 0 - 9.4283261569216847e-004 - 0.0462650507688522 - -0.2273202985525131 - <_> - - <_> - - - - <_>11 3 11 3 -1. - <_>10 4 11 1 3. - 1 - 3.5424059024080634e-004 - -0.1182428970932961 - 0.1109569966793060 - <_> - - <_> - - - - <_>11 1 4 6 -1. - <_>12 2 2 6 2. - 1 - -0.0385877899825573 - -0.3028686940670013 - 3.1856179703027010e-003 - <_> - - <_> - - - - <_>11 1 6 4 -1. - <_>10 2 6 2 2. - 1 - -4.9504679627716541e-003 - 0.1375810056924820 - -0.0916903465986252 - <_> - - <_> - - - - <_>10 10 6 8 -1. - <_>12 10 2 8 3. - 0 - -0.0254536308348179 - -0.2301352024078369 - 0.0197479296475649 - <_> - - <_> - - - - <_>2 4 12 4 -1. - <_>2 4 6 2 2. - <_>8 6 6 2 2. - 0 - 0.0158367007970810 - -0.0452521592378616 - 0.2933708131313324 - <_> - - <_> - - - - <_>14 1 3 10 -1. - <_>15 2 1 10 3. - 1 - 0.0103798797354102 - 0.0597066916525364 - -0.1641553044319153 - <_> - - <_> - - - - <_>0 7 22 7 -1. - <_>11 7 11 7 2. - 0 - 0.0431784503161907 - 0.0634605363011360 - -0.2136048972606659 - <_> - - <_> - - - - <_>8 2 14 3 -1. - <_>8 3 14 1 3. - 0 - -2.2508678957819939e-003 - 0.1064511016011238 - -0.0595391802489758 - <_> - - <_> - - - - <_>0 2 14 3 -1. - <_>0 3 14 1 3. - 0 - 5.0743711180984974e-003 - -0.0943770334124565 - 0.2299972027540207 - <_> - - <_> - - - - <_>14 1 3 10 -1. - <_>15 2 1 10 3. - 1 - -0.0306706503033638 - 0.2597576081752777 - -0.0231882091611624 - <_> - - <_> - - - - <_>8 1 10 3 -1. - <_>7 2 10 1 3. - 1 - 2.4162670597434044e-003 - 0.0879190564155579 - -0.1928738057613373 - <_> - - <_> - - - - <_>12 3 3 10 -1. - <_>13 4 1 10 3. - 1 - -9.3405842781066895e-003 - -0.1093555986881256 - 0.0293585006147623 - <_> - - <_> - - - - <_>11 4 10 3 -1. - <_>10 5 10 1 3. - 1 - 0.0205137301236391 - -0.0525113493204117 - 0.3054544925689697 - <_> - - <_> - - - - <_>12 1 7 6 -1. - <_>12 3 7 2 3. - 0 - -0.0436303801834583 - -0.4531044960021973 - 0.0182615704834461 - <_> - - <_> - - - - <_>0 3 14 3 -1. - <_>0 4 14 1 3. - 0 - 3.4857920836657286e-003 - -0.0970931202173233 - 0.1487710028886795 - <_> - - <_> - - - - <_>8 0 12 4 -1. - <_>14 0 6 2 2. - <_>8 2 6 2 2. - 0 - 0.0104116098955274 - 0.0429157316684723 - -0.2484963983297348 - <_> - - <_> - - - - <_>2 0 12 4 -1. - <_>2 0 6 2 2. - <_>8 2 6 2 2. - 0 - -7.5155291706323624e-003 - -0.2662334144115448 - 0.0516023188829422 - <_> - - <_> - - - - <_>8 4 12 3 -1. - <_>8 5 12 1 3. - 0 - 7.2157550603151321e-003 - -0.0618781596422195 - 0.1831496953964233 - <_> - - <_> - - - - <_>0 1 14 2 -1. - <_>7 1 7 2 2. - 0 - 9.1090862406417727e-004 - -0.0974202826619148 - 0.1222369968891144 - <_> - - <_> - - - - <_>5 0 15 11 -1. - <_>10 0 5 11 3. - 0 - -0.4006991088390350 - -0.8183109164237976 - 4.7453590668737888e-003 - <_> - - <_> - - - - <_>2 0 15 11 -1. - <_>7 0 5 11 3. - 0 - -4.8033627681434155e-003 - 0.0941939875483513 - -0.1443651020526886 - <_> - - <_> - - - - <_>11 6 6 12 -1. - <_>14 6 3 6 2. - <_>11 12 3 6 2. - 0 - -0.0211474299430847 - 0.2953240871429443 - -0.0447512716054916 - <_> - - <_> - - - - <_>7 5 6 6 -1. - <_>9 5 2 6 3. - 0 - 0.0186022594571114 - -0.0429937802255154 - 0.2970671951770783 - <_> - - <_> - - - - <_>14 13 6 5 -1. - <_>14 13 3 5 2. - 0 - -8.1051718443632126e-003 - 0.1236922964453697 - -0.1324644982814789 - <_> - - <_> - - - - <_>6 10 6 8 -1. - <_>8 10 2 8 3. - 0 - -8.3215925842523575e-003 - -0.1902258992195129 - 0.0891510173678398 - <_> - - <_> - - - - <_>10 10 6 6 -1. - <_>12 10 2 6 3. - 0 - 3.1376329716295004e-003 - 0.0415848195552826 - -0.0795528963208199 - <_> - - <_> - - - - <_>6 10 6 6 -1. - <_>8 10 2 6 3. - 0 - 0.0165560692548752 - 0.0449088588356972 - -0.3694730103015900 - <_> - - <_> - - - - <_>6 11 14 3 -1. - <_>6 11 7 3 2. - 0 - 0.0299197304993868 - -0.0377202592790127 - 0.2428061962127686 - <_> - - <_> - - - - <_>3 1 7 6 -1. - <_>3 3 7 2 3. - 0 - -0.0519882887601852 - -0.6937226057052612 - 0.0189267806708813 - <_> - - <_> - - - - <_>11 8 6 10 -1. - <_>14 8 3 5 2. - <_>11 13 3 5 2. - 0 - 0.0755281075835228 - -0.0126113500446081 - 0.2573269009590149 - <_> - - <_> - - - - <_>8 5 3 13 -1. - <_>9 5 1 13 3. - 0 - -2.5031189434230328e-003 - 0.1380728036165237 - -0.0916624665260315 - <_> - - <_> - - - - <_>11 0 6 4 -1. - <_>11 0 3 4 2. - 1 - -5.9646938461810350e-004 - -0.0636546164751053 - 0.0259372703731060 - <_> - - <_> - - - - <_>11 0 4 6 -1. - <_>11 0 4 3 2. - 1 - 0.0103193400427699 - 0.0837918370962143 - -0.1740830987691879 - <_> - - <_> - - - - <_>14 3 2 12 -1. - <_>14 3 2 6 2. - 1 - 9.3816686421632767e-003 - 0.0278715305030346 - -0.1114158034324646 - <_> - - <_> - - - - <_>5 4 10 7 -1. - <_>10 4 5 7 2. - 0 - 0.0100234104320407 - -0.0699662491679192 - 0.2190064042806625 - <_> - - <_> - - - - <_>8 9 6 6 -1. - <_>10 9 2 6 3. - 0 - -8.3700200775638223e-004 - 0.1009768992662430 - -0.1426136046648026 - <_> - - <_> - - - - <_>0 8 12 9 -1. - <_>4 11 4 3 9. - 0 - 0.0224687103182077 - 0.0940282121300697 - -0.1380742043256760 - <_> - - <_> - - - - <_>13 12 4 6 -1. - <_>13 15 4 3 2. - 0 - 0.0391152091324329 - -5.3969398140907288e-003 - 0.6518750786781311 - <_> - - <_> - - - - <_>5 12 5 6 -1. - <_>5 15 5 3 2. - 0 - -1.5670569846406579e-003 - 0.0708860307931900 - -0.2001060992479324 - <_> - - <_> - - - - <_>12 4 2 11 -1. - <_>12 4 1 11 2. - 1 - 6.0749892145395279e-003 - 0.0353959389030933 - -0.0439185909926891 - <_> - - <_> - - - - <_>9 4 11 2 -1. - <_>9 4 11 1 2. - 1 - -0.0431668907403946 - 0.5988184809684753 - -0.0234801806509495 - <_> - - <_> - - - - <_>11 8 6 10 -1. - <_>14 8 3 5 2. - <_>11 13 3 5 2. - 0 - 2.3302088957279921e-003 - -0.0728186890482903 - 0.0439402088522911 - <_> - - <_> - - - - <_>5 8 6 10 -1. - <_>5 8 3 5 2. - <_>8 13 3 5 2. - 0 - 0.0552365891635418 - -0.0351179204881191 - 0.3635514974594116 - <_> - - <_> - - - - <_>11 7 6 10 -1. - <_>14 7 3 5 2. - <_>11 12 3 5 2. - 0 - 0.0277743991464376 - 0.0300742909312248 - -0.1002677008509636 - <_> - - <_> - - - - <_>2 1 18 3 -1. - <_>2 2 18 1 3. - 0 - 8.4784086793661118e-003 - -0.0562433004379272 - 0.2171134948730469 - <_> - - <_> - - - - <_>16 4 6 7 -1. - <_>16 4 3 7 2. - 0 - 0.0132693601772189 - 0.0431383699178696 - -0.1642978042364121 - <_> - - <_> - - - - <_>5 7 6 10 -1. - <_>5 7 3 5 2. - <_>8 12 3 5 2. - 0 - -0.0340722799301147 - 0.3941879868507385 - -0.0329146385192871 - <_> - - <_> - - - - <_>12 0 3 14 -1. - <_>12 7 3 7 2. - 0 - -5.9365970082581043e-003 - 0.0648541226983070 - -0.0869715884327888 - <_> - - <_> - - - - <_>7 10 8 7 -1. - <_>11 10 4 7 2. - 0 - -5.1997308619320393e-003 - -0.2171074002981186 - 0.0654410123825073 - <_> - - <_> - - - - <_>8 0 12 3 -1. - <_>8 1 12 1 3. - 0 - 3.0441130511462688e-003 - -0.0471716411411762 - 0.0946628674864769 - <_> - - <_> - - - - <_>3 0 13 4 -1. - <_>3 1 13 2 2. - 0 - -2.2375459957402200e-004 - 0.1173989996314049 - -0.1045159026980400 - <_> - - <_> - - - - <_>7 11 12 4 -1. - <_>7 12 12 2 2. - 0 - 0.0494941398501396 - 9.9552040919661522e-003 - -0.8820502161979675 - <_> - - <_> - - - - <_>0 0 8 18 -1. - <_>4 0 4 18 2. - 0 - 0.0771270319819450 - -0.0366387590765953 - 0.3715699911117554 - <_> - - <_> - - - - <_>14 13 6 5 -1. - <_>14 13 3 5 2. - 0 - -3.7054829299449921e-003 - 0.0462130792438984 - -0.0794984996318817 - <_> - - <_> - - - - <_>0 5 22 4 -1. - <_>11 5 11 4 2. - 0 - 0.1365543007850647 - 0.0208025798201561 - -0.6469228267669678 - <_> - - <_> - - - - <_>11 2 10 9 -1. - <_>11 5 10 3 3. - 0 - -0.1691939979791641 - -0.9014499187469482 - 4.3158119660802186e-004 - <_> - - <_> - - - - <_>1 2 10 9 -1. - <_>1 5 10 3 3. - 0 - 5.2525149658322334e-003 - 0.0866862162947655 - -0.1575164049863815 - <_> - - <_> - - - - <_>18 6 2 12 -1. - <_>18 6 1 12 2. - 0 - 0.0579522587358952 - 1.3485850067809224e-003 - -1.0001620054244995 - <_> - - <_> - - - - <_>2 6 2 12 -1. - <_>3 6 1 12 2. - 0 - -0.0306814592331648 - -0.6734688878059387 - 0.0177308097481728 - <_> - - <_> - - - - <_>15 6 4 12 -1. - <_>15 9 4 6 2. - 0 - -0.0285564009100199 - 0.2491353005170822 - -0.0218073595315218 - <_> - - <_> - - - - <_>3 6 4 12 -1. - <_>3 9 4 6 2. - 0 - 5.8311191387474537e-003 - 0.1010965034365654 - -0.1258653998374939 - <_> - - <_> - - - - <_>14 13 6 5 -1. - <_>14 13 3 5 2. - 0 - 2.8870739042758942e-003 - -0.0454622805118561 - 0.1479419022798538 - <_> - - <_> - - - - <_>2 13 6 5 -1. - <_>5 13 3 5 2. - 0 - -5.3575891070067883e-003 - 0.1084545999765396 - -0.2063605934381485 - <_> - - <_> - - - - <_>8 12 12 5 -1. - <_>11 12 6 5 2. - 0 - 0.0208518300205469 - -0.0256414301693439 - 0.1200079992413521 - <_> - - <_> - - - - <_>2 12 12 5 -1. - <_>5 12 6 5 2. - 0 - 2.9372319113463163e-003 - -0.0588329806923866 - 0.2396713942289352 - <_> - - <_> - - - - <_>12 12 6 6 -1. - <_>12 14 6 2 3. - 0 - 0.0101090697571635 - 0.0447247400879860 - -0.2502495944499970 - <_> - - <_> - - - - <_>0 10 16 8 -1. - <_>4 10 8 8 2. - 0 - 0.0620026402175426 - 0.0312366802245378 - -0.3877547979354858 - <_> - - <_> - - - - <_>13 1 8 8 -1. - <_>15 1 4 8 2. - 0 - 1.7331680282950401e-003 - -0.0766425207257271 - 0.0587383098900318 - <_> - - <_> - - - - <_>1 1 8 8 -1. - <_>3 1 4 8 2. - 0 - -0.0466489009559155 - 0.4780037105083466 - -0.0282232593744993 - <_> - - <_> - - - - <_>14 8 3 8 -1. - <_>14 12 3 4 2. - 0 - -0.0405850112438202 - 0.1959132999181747 - -0.0296085495501757 - <_> - - <_> - - - - <_>10 4 7 6 -1. - <_>10 4 7 3 2. - 1 - 0.0142973596230149 - 0.0804227814078331 - -0.2002439945936203 - <_> - - <_> - - - - <_>9 10 4 8 -1. - <_>9 14 4 4 2. - 0 - -1.4215649571269751e-003 - 0.0976939424872398 - -0.1309012025594711 - <_> - - <_> - - - - <_>5 8 3 8 -1. - <_>5 12 3 4 2. - 0 - 5.2683628164231777e-003 - -0.0583763718605042 - 0.2437804043292999 - -0.6976336836814880 - 18 - -1 - <_> - - - <_> - - <_> - - - - <_>6 9 4 9 -1. - <_>6 12 4 3 3. - 0 - -2.6198190171271563e-003 - 0.1867370009422302 - -0.1912652999162674 - <_> - - <_> - - - - <_>6 3 16 4 -1. - <_>14 3 8 2 2. - <_>6 5 8 2 2. - 0 - -0.0286290999501944 - 0.1288710981607437 - -0.0261868499219418 - <_> - - <_> - - - - <_>1 3 20 4 -1. - <_>1 3 10 2 2. - <_>11 5 10 2 2. - 0 - 7.1718869730830193e-003 - 0.0881585925817490 - -0.2032734006643295 - <_> - - <_> - - - - <_>9 5 6 12 -1. - <_>12 5 3 6 2. - <_>9 11 3 6 2. - 0 - 0.0116410404443741 - -0.0210582502186298 - 0.1759178936481476 - <_> - - <_> - - - - <_>1 6 2 12 -1. - <_>2 6 1 12 2. - 0 - 5.6764329783618450e-003 - 0.0499411597847939 - -0.2732929885387421 - <_> - - <_> - - - - <_>19 0 2 16 -1. - <_>19 0 1 16 2. - 0 - -0.0443926900625229 - 0.5676612854003906 - -0.0186747796833515 - <_> - - <_> - - - - <_>1 0 2 16 -1. - <_>2 0 1 16 2. - 0 - 1.3367610517889261e-004 - -0.1299030929803848 - 0.1354229003190994 - <_> - - <_> - - - - <_>13 5 5 9 -1. - <_>13 8 5 3 3. - 0 - -0.0441119484603405 - 0.2268483042716980 - -0.0133183998987079 - <_> - - <_> - - - - <_>5 16 12 2 -1. - <_>5 17 12 1 2. - 0 - 2.9443150851875544e-003 - 0.0431614592671394 - -0.2931117117404938 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 15 12 2 2. - 0 - 3.5300010349601507e-003 - 0.0771937221288681 - -0.2632498145103455 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - 0.1011921018362045 - -0.0549242608249187 - 0.3243021965026856 - <_> - - <_> - - - - <_>7 5 13 2 -1. - <_>7 6 13 1 2. - 0 - -0.0223485697060823 - 0.3080311119556427 - -0.0225184895098209 - <_> - - <_> - - - - <_>8 1 12 2 -1. - <_>8 1 12 1 2. - 1 - 6.4755380153656006e-003 - -0.1204577013850212 - 0.1318611055612564 - <_> - - <_> - - - - <_>0 4 22 8 -1. - <_>11 4 11 4 2. - <_>0 8 11 4 2. - 0 - 0.0109043195843697 - 0.1021798998117447 - -0.1830884963274002 - <_> - - <_> - - - - <_>2 3 6 4 -1. - <_>5 3 3 4 2. - 0 - -0.0112566296011209 - -0.2918663918972015 - 0.0554912202060223 - <_> - - <_> - - - - <_>7 11 15 3 -1. - <_>7 12 15 1 3. - 0 - 3.6791800521314144e-003 - -0.0506146885454655 - 0.0826633125543594 - <_> - - <_> - - - - <_>5 7 6 7 -1. - <_>8 7 3 7 2. - 0 - -0.0917212888598442 - -0.7712755203247070 - 0.0193129591643810 - <_> - - <_> - - - - <_>7 12 12 4 -1. - <_>13 12 6 2 2. - <_>7 14 6 2 2. - 0 - 0.0400998890399933 - 7.8663527965545654e-003 - -0.8130282759666443 - <_> - - <_> - - - - <_>0 11 16 2 -1. - <_>8 11 8 2 2. - 0 - -0.0549564287066460 - 0.2905952036380768 - -0.0598255805671215 - <_> - - <_> - - - - <_>18 3 4 10 -1. - <_>18 3 4 5 2. - 1 - 0.2480465024709702 - 0.0116651896387339 - -0.6912195086479187 - <_> - - <_> - - - - <_>2 2 17 3 -1. - <_>2 3 17 1 3. - 0 - -0.0342848002910614 - 0.4535839855670929 - -0.0320712514221668 - <_> - - <_> - - - - <_>10 14 12 4 -1. - <_>16 14 6 2 2. - <_>10 16 6 2 2. - 0 - 0.0254392307251692 - 0.0194671507924795 - -0.3792799115180969 - <_> - - <_> - - - - <_>1 9 11 6 -1. - <_>1 11 11 2 3. - 0 - -0.0127206603065133 - -0.2121143043041229 - 0.0615338310599327 - <_> - - <_> - - - - <_>4 9 18 3 -1. - <_>4 10 18 1 3. - 0 - 0.0108310002833605 - -0.0514436811208725 - 0.1694768965244293 - <_> - - <_> - - - - <_>0 9 18 3 -1. - <_>0 10 18 1 3. - 0 - -0.0219315700232983 - 0.2483938932418823 - -0.0566363595426083 - <_> - - <_> - - - - <_>11 5 11 12 -1. - <_>11 11 11 6 2. - 0 - 0.2939789891242981 - 0.0114115299656987 - -0.9369606971740723 - <_> - - <_> - - - - <_>5 12 6 6 -1. - <_>5 14 6 2 3. - 0 - -0.0163422599434853 - -0.3158954977989197 - 0.0443719811737537 - <_> - - <_> - - - - <_>14 10 6 8 -1. - <_>17 10 3 4 2. - <_>14 14 3 4 2. - 0 - -0.0442804992198944 - 0.2033734023571014 - -0.0214623194187880 - <_> - - <_> - - - - <_>0 5 11 12 -1. - <_>0 11 11 6 2. - 0 - 0.2650330960750580 - 0.0116331502795219 - -0.9122017025947571 - <_> - - <_> - - - - <_>15 3 2 12 -1. - <_>15 3 2 6 2. - 1 - -0.0763784795999527 - 0.1868827044963837 - -0.0196720808744431 - <_> - - <_> - - - - <_>3 0 12 4 -1. - <_>3 0 6 2 2. - <_>9 2 6 2 2. - 0 - -0.0100615704432130 - -0.2646203935146332 - 0.0466202609241009 - <_> - - <_> - - - - <_>14 10 6 8 -1. - <_>17 10 3 4 2. - <_>14 14 3 4 2. - 0 - 0.0249217301607132 - -0.0191313903778791 - 0.2015450000762940 - <_> - - <_> - - - - <_>5 12 8 6 -1. - <_>5 12 4 3 2. - <_>9 15 4 3 2. - 0 - 1.5098409676284064e-005 - -0.1624169051647186 - 0.0761839672923088 - <_> - - <_> - - - - <_>8 11 10 5 -1. - <_>8 11 5 5 2. - 0 - -0.1008191034197807 - -1. - 7.4751500505954027e-004 - <_> - - <_> - - - - <_>4 11 10 5 -1. - <_>9 11 5 5 2. - 0 - 0.0650585964322090 - -0.0404686406254768 - 0.3516007959842682 - <_> - - <_> - - - - <_>6 6 12 12 -1. - <_>12 6 6 6 2. - <_>6 12 6 6 2. - 0 - -0.1219023987650871 - -0.5362455844879150 - 0.0186370201408863 - <_> - - <_> - - - - <_>7 10 6 8 -1. - <_>7 12 6 4 2. - 0 - -9.8520738538354635e-004 - 0.1139819994568825 - -0.1129883006215096 - <_> - - <_> - - - - <_>7 8 15 10 -1. - <_>7 13 15 5 2. - 0 - -0.2530061900615692 - -0.4337590932846069 - 0.0123674003407359 - <_> - - <_> - - - - <_>0 0 22 4 -1. - <_>0 0 11 2 2. - <_>11 2 11 2 2. - 0 - 7.5246659107506275e-003 - 0.0673554763197899 - -0.1858396977186203 - <_> - - <_> - - - - <_>10 3 12 3 -1. - <_>10 4 12 1 3. - 0 - 4.8102210275828838e-003 - -0.0658700615167618 - 0.1284891068935394 - <_> - - <_> - - - - <_>0 3 13 3 -1. - <_>0 4 13 1 3. - 0 - -1.4562129508703947e-003 - 0.1811068952083588 - -0.1124845966696739 - <_> - - <_> - - - - <_>9 3 4 12 -1. - <_>9 6 4 6 2. - 0 - -5.6546321138739586e-003 - 0.1036984026432037 - -0.1411557048559189 - <_> - - <_> - - - - <_>4 5 9 6 -1. - <_>4 8 9 3 2. - 0 - -0.0319512896239758 - -0.3297160863876343 - 0.0482818111777306 - <_> - - <_> - - - - <_>11 6 2 9 -1. - <_>11 6 1 9 2. - 1 - 0.0421903803944588 - -0.0116448104381561 - 0.1370130032300949 - <_> - - <_> - - - - <_>9 2 4 8 -1. - <_>9 6 4 4 2. - 0 - 0.0126066599041224 - -0.0603958815336227 - 0.2421005964279175 - <_> - - <_> - - - - <_>7 0 8 10 -1. - <_>7 5 8 5 2. - 0 - -6.0083861462771893e-003 - 0.0956776067614555 - -0.2024825960397720 - <_> - - <_> - - - - <_>11 5 9 2 -1. - <_>11 5 9 1 2. - 1 - 0.0406763888895512 - -0.0385064296424389 - 0.3982402980327606 - <_> - - <_> - - - - <_>17 0 3 11 -1. - <_>18 1 1 11 3. - 1 - -0.0130102196708322 - -0.0778704434633255 - 0.0325333103537560 - <_> - - <_> - - - - <_>5 0 11 3 -1. - <_>4 1 11 1 3. - 1 - -0.0566469691693783 - -0.9529355168342590 - 0.0173756591975689 - <_> - - <_> - - - - <_>9 6 4 7 -1. - <_>9 6 2 7 2. - 0 - 0.0373079702258110 - -0.0332614406943321 - 0.4685631990432739 - <_> - - <_> - - - - <_>3 11 6 6 -1. - <_>3 13 6 2 3. - 0 - -0.0279863793402910 - -0.4635669887065888 - 0.0285240299999714 - <_> - - <_> - - - - <_>6 10 16 8 -1. - <_>6 12 16 4 2. - 0 - -0.0750148966908455 - 0.2451989948749542 - -0.0158301591873169 - <_> - - <_> - - - - <_>11 6 9 3 -1. - <_>10 7 9 1 3. - 1 - 0.0276730805635452 - -0.0364583581686020 - 0.3721557855606079 - <_> - - <_> - - - - <_>12 11 8 6 -1. - <_>12 13 8 2 3. - 0 - -0.0173129606992006 - -0.2211765944957733 - 0.0432326197624207 - <_> - - <_> - - - - <_>0 10 16 8 -1. - <_>0 12 16 4 2. - 0 - -0.0588939487934113 - 0.3972674906253815 - -0.0376325286924839 - <_> - - <_> - - - - <_>10 14 12 4 -1. - <_>16 14 6 2 2. - <_>10 16 6 2 2. - 0 - 0.0131936799734831 - 0.0248577296733856 - -0.1751435995101929 - <_> - - <_> - - - - <_>2 11 8 6 -1. - <_>2 13 8 2 3. - 0 - 0.0382306799292564 - 0.0296351108700037 - -0.4345274865627289 - <_> - - <_> - - - - <_>6 11 16 4 -1. - <_>14 11 8 2 2. - <_>6 13 8 2 2. - 0 - 0.0168453995138407 - 0.0393387489020824 - -0.2376572042703629 - <_> - - <_> - - - - <_>0 11 22 6 -1. - <_>11 11 11 6 2. - 0 - -0.1155946031212807 - -0.4000687897205353 - 0.0323905386030674 - <_> - - <_> - - - - <_>14 10 6 8 -1. - <_>17 10 3 4 2. - <_>14 14 3 4 2. - 0 - -1.7385910032317042e-003 - 0.0485458187758923 - -0.0614746809005737 - <_> - - <_> - - - - <_>2 10 6 8 -1. - <_>2 10 3 4 2. - <_>5 14 3 4 2. - 0 - -0.0336976684629917 - 0.2434500008821487 - -0.0655046030879021 - <_> - - <_> - - - - <_>6 4 15 12 -1. - <_>11 8 5 4 9. - 0 - -0.3472279906272888 - -0.3361206054687500 - 0.0155012002214789 - <_> - - <_> - - - - <_>0 4 18 12 -1. - <_>6 8 6 4 9. - 0 - 0.0586680397391319 - 0.0680680572986603 - -0.2210492938756943 - <_> - - <_> - - - - <_>15 7 2 8 -1. - <_>15 7 1 8 2. - 1 - 0.0237181894481182 - -0.0147795695811510 - 0.4732834100723267 - <_> - - <_> - - - - <_>3 3 10 3 -1. - <_>2 4 10 1 3. - 1 - 0.0288127008825541 - 0.0333098806440830 - -0.4679769873619080 - <_> - - <_> - - - - <_>4 2 14 3 -1. - <_>4 3 14 1 3. - 0 - 0.0410237498581409 - -0.0282930005341768 - 0.4942755103111267 - <_> - - <_> - - - - <_>10 8 8 2 -1. - <_>10 8 8 1 2. - 1 - -1.2017590051982552e-004 - 0.1036365032196045 - -0.1210749000310898 - <_> - - <_> - - - - <_>15 5 4 7 -1. - <_>15 5 2 7 2. - 1 - -0.1090807020664215 - -1. - 3.2971999607980251e-003 - <_> - - <_> - - - - <_>3 6 5 6 -1. - <_>3 9 5 3 2. - 0 - -0.0459673590958118 - 0.6481946110725403 - -0.0192335192114115 - <_> - - <_> - - - - <_>14 1 8 6 -1. - <_>18 1 4 3 2. - <_>14 4 4 3 2. - 0 - -0.0193457193672657 - -0.3314554989337921 - 0.0390085391700268 - <_> - - <_> - - - - <_>0 1 8 6 -1. - <_>0 1 4 3 2. - <_>4 4 4 3 2. - 0 - 0.0123127903789282 - 0.0410296283662319 - -0.2794392108917236 - <_> - - <_> - - - - <_>17 0 4 12 -1. - <_>18 0 2 12 2. - 0 - 2.1535221021622419e-003 - -0.0675450563430786 - 0.1164774000644684 - <_> - - <_> - - - - <_>1 0 4 12 -1. - <_>2 0 2 12 2. - 0 - -0.0321587882936001 - 0.5474163889884949 - -0.0237302295863628 - <_> - - <_> - - - - <_>9 16 12 2 -1. - <_>9 17 12 1 2. - 0 - -0.0275923591107130 - -0.7531942129135132 - 8.4066214039921761e-003 - <_> - - <_> - - - - <_>1 16 12 2 -1. - <_>1 17 12 1 2. - 0 - 0.0222645103931427 - 0.0121467402204871 - -0.9029129743576050 - <_> - - <_> - - - - <_>10 15 12 3 -1. - <_>10 16 12 1 3. - 0 - 0.0153613798320293 - -0.0316411890089512 - 0.3213280141353607 - <_> - - <_> - - - - <_>0 15 12 3 -1. - <_>0 16 12 1 3. - 0 - -0.0123606603592634 - 0.2924863100051880 - -0.0453037582337856 - <_> - - <_> - - - - <_>10 14 12 4 -1. - <_>16 14 6 2 2. - <_>10 16 6 2 2. - 0 - 0.0229787491261959 - -0.0120544796809554 - 0.1906094998121262 - <_> - - <_> - - - - <_>0 14 12 4 -1. - <_>0 14 6 2 2. - <_>6 16 6 2 2. - 0 - 0.0232963804155588 - 0.0314090512692928 - -0.5185608267784119 - <_> - - <_> - - - - <_>9 11 12 4 -1. - <_>15 11 6 2 2. - <_>9 13 6 2 2. - 0 - 5.7384249521419406e-004 - -0.1029348969459534 - 0.0815484523773193 - <_> - - <_> - - - - <_>0 11 16 4 -1. - <_>0 11 8 2 2. - <_>8 13 8 2 2. - 0 - -0.0330204702913761 - 0.4247055947780609 - -0.0447946786880493 - <_> - - <_> - - - - <_>8 12 9 6 -1. - <_>8 14 9 2 3. - 0 - -0.0217130295932293 - -0.1482526063919067 - 0.0129598798230290 - <_> - - <_> - - - - <_>5 12 9 6 -1. - <_>5 14 9 2 3. - 0 - -9.7430922323837876e-005 - 0.1189963966608048 - -0.1475397050380707 - <_> - - <_> - - - - <_>4 5 16 2 -1. - <_>4 5 8 2 2. - 0 - -9.2907734215259552e-003 - -0.1163543015718460 - 0.0541046410799026 - <_> - - <_> - - - - <_>1 10 10 8 -1. - <_>1 10 5 4 2. - <_>6 14 5 4 2. - 0 - 0.0372448489069939 - -0.0344212017953396 - 0.3794392943382263 - <_> - - <_> - - - - <_>16 2 5 9 -1. - <_>13 5 5 3 3. - 1 - 0.1527702957391739 - 7.2725401259958744e-003 - -0.3415508866310120 - <_> - - <_> - - - - <_>4 4 4 6 -1. - <_>6 4 2 6 2. - 0 - -0.0126634500920773 - -0.3059667050838471 - 0.0382312610745430 - <_> - - <_> - - - - <_>9 2 9 7 -1. - <_>12 2 3 7 3. - 0 - -0.0748884230852127 - -0.3465895056724548 - 0.0155016500502825 - <_> - - <_> - - - - <_>4 2 9 7 -1. - <_>7 2 3 7 3. - 0 - -0.0401145890355110 - 0.3262982070446014 - -0.0413136705756187 - <_> - - <_> - - - - <_>16 2 5 9 -1. - <_>13 5 5 3 3. - 1 - -0.0964921116828918 - 0.1017284989356995 - -0.0171560104936361 - <_> - - <_> - - - - <_>6 2 9 5 -1. - <_>9 5 3 5 3. - 1 - -0.1671283990144730 - -0.7765511870384216 - 0.0180295594036579 - <_> - - <_> - - - - <_>5 12 14 6 -1. - <_>5 14 14 2 3. - 0 - -8.2981940358877182e-003 - -0.1439713984727860 - 0.0589481405913830 - <_> - - <_> - - - - <_>6 4 4 12 -1. - <_>6 4 2 6 2. - <_>8 10 2 6 2. - 0 - -3.7844169419258833e-003 - 0.1709517985582352 - -0.0782564431428909 - <_> - - <_> - - - - <_>9 4 10 8 -1. - <_>9 4 5 8 2. - 0 - -0.1607642024755478 - 0.2313822954893112 - -0.0134280500933528 - <_> - - <_> - - - - <_>7 5 6 8 -1. - <_>7 5 3 4 2. - <_>10 9 3 4 2. - 0 - 6.4544437918812037e-004 - -0.1442440003156662 - 0.0832878202199936 - <_> - - <_> - - - - <_>8 7 6 8 -1. - <_>11 7 3 4 2. - <_>8 11 3 4 2. - 0 - 0.0227373093366623 - -0.0341558195650578 - 0.3551980853080750 - <_> - - <_> - - - - <_>2 4 11 2 -1. - <_>2 4 11 1 2. - 1 - -3.9030050393193960e-003 - -0.1873676925897598 - 0.0646280124783516 - <_> - - <_> - - - - <_>16 0 3 13 -1. - <_>17 0 1 13 3. - 0 - -0.0511454306542873 - 0.6689270734786987 - -0.0111800497397780 - <_> - - <_> - - - - <_>2 0 18 3 -1. - <_>2 1 18 1 3. - 0 - -6.0482369735836983e-003 - 0.1862275004386902 - -0.0630187019705772 - <_> - - <_> - - - - <_>15 8 6 4 -1. - <_>15 8 3 4 2. - 0 - 0.0117435697466135 - 0.0254492796957493 - -0.1333124935626984 - <_> - - <_> - - - - <_>2 0 13 3 -1. - <_>2 1 13 1 3. - 0 - 8.4120890824124217e-004 - -0.0933334678411484 - 0.1331588029861450 - <_> - - <_> - - - - <_>4 4 18 4 -1. - <_>4 6 18 2 2. - 0 - -0.0377561710774899 - -0.2313880026340485 - 0.0405697897076607 - <_> - - <_> - - - - <_>3 3 10 9 -1. - <_>8 3 5 9 2. - 0 - -0.0208675600588322 - 0.1005609035491943 - -0.1174419000744820 - <_> - - <_> - - - - <_>2 7 18 6 -1. - <_>8 9 6 2 9. - 0 - -0.0398021787405014 - -0.1158571988344193 - 0.1266818940639496 - -0.6897674202919006 - 19 - -1 - <_> - - - <_> - - <_> - - - - <_>10 4 11 2 -1. - <_>10 4 11 1 2. - 1 - 8.4546189755201340e-003 - -0.1628966033458710 - 0.1983439028263092 - <_> - - <_> - - - - <_>14 6 6 12 -1. - <_>17 6 3 6 2. - <_>14 12 3 6 2. - 0 - 0.0516104511916637 - -0.0308270901441574 - 0.3374255001544952 - <_> - - <_> - - - - <_>2 6 6 12 -1. - <_>2 6 3 6 2. - <_>5 12 3 6 2. - 0 - -0.0649094432592392 - 0.2860228121280670 - -0.0598486512899399 - <_> - - <_> - - - - <_>3 4 16 6 -1. - <_>3 6 16 2 3. - 0 - -4.3951408006250858e-003 - 0.1130265966057777 - -0.1263208985328674 - <_> - - <_> - - - - <_>1 11 16 3 -1. - <_>5 11 8 3 2. - 0 - -0.0827568024396896 - -0.6079095005989075 - 0.0219671800732613 - <_> - - <_> - - - - <_>12 10 8 3 -1. - <_>12 10 4 3 2. - 0 - -4.8698862083256245e-003 - 0.0858661904931068 - -0.0890095233917236 - <_> - - <_> - - - - <_>0 9 17 9 -1. - <_>0 12 17 3 3. - 0 - 0.0915124416351318 - -0.0533453486859798 - 0.2673287093639374 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>11 4 3 5 2. - <_>8 9 3 5 2. - 0 - 3.6815661005675793e-003 - 0.0709156990051270 - -0.1794120967388153 - <_> - - <_> - - - - <_>2 4 16 8 -1. - <_>2 4 8 4 2. - <_>10 8 8 4 2. - 0 - 6.3032708130776882e-003 - 0.1237815022468567 - -0.1239148005843163 - <_> - - <_> - - - - <_>9 6 12 4 -1. - <_>15 6 6 2 2. - <_>9 8 6 2 2. - 0 - 5.8764131972566247e-004 - -0.0638136565685272 - 0.0955457687377930 - <_> - - <_> - - - - <_>9 3 4 6 -1. - <_>9 6 4 3 2. - 0 - 0.0146803203970194 - -0.0491835288703442 - 0.2904059886932373 - <_> - - <_> - - - - <_>15 5 7 4 -1. - <_>15 5 7 2 2. - 1 - 3.5624930169433355e-003 - -0.0975631475448608 - 0.0489328317344189 - <_> - - <_> - - - - <_>0 6 18 6 -1. - <_>0 6 9 3 2. - <_>9 9 9 3 2. - 0 - -7.4473340064287186e-003 - -0.1595246046781540 - 0.0847726464271545 - <_> - - <_> - - - - <_>4 2 15 3 -1. - <_>4 3 15 1 3. - 0 - 0.0540109910070896 - -0.0205651503056288 - 0.5734071731567383 - <_> - - <_> - - - - <_>2 0 6 6 -1. - <_>5 0 3 6 2. - 0 - -2.3613919038325548e-003 - 0.1495765000581741 - -0.0751481130719185 - <_> - - <_> - - - - <_>13 4 8 6 -1. - <_>17 4 4 3 2. - <_>13 7 4 3 2. - 0 - 0.0406654588878155 - 0.0147623997181654 - -0.5968567132949829 - <_> - - <_> - - - - <_>4 2 13 6 -1. - <_>4 4 13 2 3. - 0 - 0.0932583808898926 - 0.0130362100899220 - -0.6864386200904846 - <_> - - <_> - - - - <_>9 8 12 3 -1. - <_>9 9 12 1 3. - 0 - 2.8593749739229679e-003 - -0.0549046397209167 - 0.0980746671557426 - <_> - - <_> - - - - <_>1 8 16 3 -1. - <_>1 9 16 1 3. - 0 - -4.9756402149796486e-003 - 0.1675197035074234 - -0.0825638324022293 - <_> - - <_> - - - - <_>11 4 5 8 -1. - <_>11 8 5 4 2. - 0 - -2.2061138879507780e-003 - 0.0714861825108528 - -0.0846847966313362 - <_> - - <_> - - - - <_>3 4 11 2 -1. - <_>3 4 11 1 2. - 1 - 4.3787518516182899e-003 - 0.0752964392304420 - -0.1698897033929825 - <_> - - <_> - - - - <_>10 7 12 3 -1. - <_>10 8 12 1 3. - 0 - -4.9143321812152863e-003 - 0.1627433001995087 - -0.0575791895389557 - <_> - - <_> - - - - <_>9 3 7 8 -1. - <_>9 3 7 4 2. - 1 - -3.0191219411790371e-003 - -0.1245009973645210 - 0.1152698025107384 - <_> - - <_> - - - - <_>13 2 2 12 -1. - <_>13 2 2 6 2. - 1 - 6.8227178417146206e-003 - 0.0371669717133045 - -0.1009344980120659 - <_> - - <_> - - - - <_>0 9 12 4 -1. - <_>0 9 6 2 2. - <_>6 11 6 2 2. - 0 - 0.0351169817149639 - -0.0429974310100079 - 0.3295919895172119 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>13 7 4 6 2. - 0 - -1.4400649815797806e-003 - -0.0989222601056099 - 0.0671088919043541 - <_> - - <_> - - - - <_>0 8 6 6 -1. - <_>2 8 2 6 3. - 0 - -4.6699359081685543e-003 - -0.1800343990325928 - 0.0680383965373039 - <_> - - <_> - - - - <_>11 7 8 6 -1. - <_>13 7 4 6 2. - 0 - 0.0376477204263210 - -0.0210317503660917 - 0.1662711948156357 - <_> - - <_> - - - - <_>3 7 8 6 -1. - <_>5 7 4 6 2. - 0 - 5.1745469681918621e-003 - -0.1184609010815620 - 0.1091919019818306 - <_> - - <_> - - - - <_>10 6 6 4 -1. - <_>10 6 3 4 2. - 0 - 7.7274879440665245e-003 - -0.0550973303616047 - 0.2275228053331375 - <_> - - <_> - - - - <_>4 8 12 10 -1. - <_>4 8 6 5 2. - <_>10 13 6 5 2. - 0 - 0.0291588492691517 - 0.0778855830430985 - -0.1777552068233490 - <_> - - <_> - - - - <_>15 7 6 10 -1. - <_>17 7 2 10 3. - 0 - 2.9885378899052739e-004 - -0.0788752809166908 - 0.0511631108820438 - <_> - - <_> - - - - <_>6 14 6 4 -1. - <_>9 14 3 4 2. - 0 - 1.4456070493906736e-004 - -0.1609764993190765 - 0.0815740302205086 - <_> - - <_> - - - - <_>8 13 10 4 -1. - <_>8 13 5 4 2. - 0 - 0.0478407405316830 - 0.0142105501145124 - -0.3131667971611023 - <_> - - <_> - - - - <_>2 0 4 18 -1. - <_>4 0 2 18 2. - 0 - 0.0439434684813023 - -0.0310024805366993 - 0.4245035052299500 - <_> - - <_> - - - - <_>11 0 8 10 -1. - <_>11 0 8 5 2. - 1 - -0.1760338991880417 - -0.2162521928548813 - 0.0137106403708458 - <_> - - <_> - - - - <_>0 7 12 3 -1. - <_>0 8 12 1 3. - 0 - -0.0270105507224798 - 0.4544829130172730 - -0.0285076200962067 - <_> - - <_> - - - - <_>17 0 2 10 -1. - <_>17 0 1 10 2. - 1 - 6.4534661360085011e-003 - -0.0496607087552547 - 0.0830717235803604 - <_> - - <_> - - - - <_>5 6 6 4 -1. - <_>5 8 6 2 2. - 0 - -7.1115070022642612e-003 - -0.2250981032848358 - 0.0650333613157272 - <_> - - <_> - - - - <_>15 10 7 6 -1. - <_>15 12 7 2 3. - 0 - -0.0251848492771387 - -0.1748033016920090 - 0.0187510997056961 - <_> - - <_> - - - - <_>0 10 7 6 -1. - <_>0 12 7 2 3. - 0 - -8.8047432655002922e-005 - 0.1267789006233215 - -0.1070457994937897 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>15 12 2 6 3. - 0 - -0.0360202193260193 - 0.2464960068464279 - -0.0497720800340176 - <_> - - <_> - - - - <_>1 11 20 7 -1. - <_>11 11 10 7 2. - 0 - 7.6084570027887821e-003 - 0.1004144027829170 - -0.1367384046316147 - <_> - - <_> - - - - <_>13 5 4 9 -1. - <_>13 8 4 3 3. - 0 - -8.2404967397451401e-003 - 0.1170326024293900 - -0.0527819618582726 - <_> - - <_> - - - - <_>2 12 8 6 -1. - <_>2 12 4 3 2. - <_>6 15 4 3 2. - 0 - -7.2474818443879485e-004 - -0.1165003031492233 - 0.1133349016308785 - <_> - - <_> - - - - <_>9 14 6 4 -1. - <_>9 16 6 2 2. - 0 - -7.8272278187796474e-005 - 0.0644256770610809 - -0.1589460968971252 - <_> - - <_> - - - - <_>7 12 8 6 -1. - <_>7 12 4 3 2. - <_>11 15 4 3 2. - 0 - -2.0254699047654867e-003 - -0.1702708005905151 - 0.0712168663740158 - <_> - - <_> - - - - <_>6 1 12 14 -1. - <_>12 1 6 7 2. - <_>6 8 6 7 2. - 0 - -0.1188203021883965 - 0.3287855088710785 - -0.0153252100571990 - <_> - - <_> - - - - <_>5 5 4 9 -1. - <_>5 8 4 3 3. - 0 - -0.0162584297358990 - 0.2184889018535614 - -0.0562531985342503 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>11 13 6 2 2. - <_>5 15 6 2 2. - 0 - -6.8429792299866676e-003 - -0.2331349998712540 - 0.0571078211069107 - <_> - - <_> - - - - <_>9 7 8 3 -1. - <_>8 8 8 1 3. - 1 - 0.0349397100508213 - -0.0273338295519352 - 0.4565196931362152 - <_> - - <_> - - - - <_>7 5 8 10 -1. - <_>7 10 8 5 2. - 0 - 0.2297977954149246 - 0.0145089896395803 - -0.8716508746147156 - <_> - - <_> - - - - <_>7 1 8 3 -1. - <_>6 2 8 1 3. - 1 - 0.0433605983853340 - 8.4467595443129539e-003 - -0.8750032782554627 - <_> - - <_> - - - - <_>10 14 12 3 -1. - <_>10 15 12 1 3. - 0 - -1.1806190013885498e-003 - 0.0781866982579231 - -0.0528342090547085 - <_> - - <_> - - - - <_>0 6 18 12 -1. - <_>0 12 18 6 2. - 0 - -0.4177268147468567 - -0.8072922229766846 - 0.0130481300875545 - <_> - - <_> - - - - <_>9 8 6 6 -1. - <_>9 11 6 3 2. - 0 - -0.0463152304291725 - 0.2937507927417755 - -0.0351923890411854 - <_> - - <_> - - - - <_>3 2 4 12 -1. - <_>3 2 2 6 2. - <_>5 8 2 6 2. - 0 - -0.0402713008224964 - -0.5817453265190125 - 0.0197685007005930 - <_> - - <_> - - - - <_>13 2 2 12 -1. - <_>13 2 2 6 2. - 1 - -0.0430124402046204 - 0.1088251024484634 - -0.0269776098430157 - <_> - - <_> - - - - <_>2 4 6 8 -1. - <_>2 4 3 4 2. - <_>5 8 3 4 2. - 0 - 2.8285770677030087e-003 - 0.0768370479345322 - -0.1572055071592331 - <_> - - <_> - - - - <_>14 10 4 6 -1. - <_>14 10 2 6 2. - 0 - -0.0332046113908291 - -0.2315258979797363 - 0.0159325394779444 - <_> - - <_> - - - - <_>0 0 2 12 -1. - <_>0 6 2 6 2. - 0 - -4.8097351100295782e-004 - 0.1104374006390572 - -0.1158946007490158 - <_> - - <_> - - - - <_>13 2 2 12 -1. - <_>13 2 2 6 2. - 1 - 2.9704240150749683e-003 - -0.0342437401413918 - 0.0691073983907700 - <_> - - <_> - - - - <_>9 2 12 2 -1. - <_>9 2 6 2 2. - 1 - 0.0118931904435158 - 0.0801228806376457 - -0.2050309032201767 - <_> - - <_> - - - - <_>10 9 12 4 -1. - <_>16 9 6 2 2. - <_>10 11 6 2 2. - 0 - -0.0639636069536209 - -0.8553075194358826 - 6.4783529378473759e-003 - <_> - - <_> - - - - <_>0 9 12 4 -1. - <_>0 9 6 2 2. - <_>6 11 6 2 2. - 0 - -5.6093540042638779e-003 - 0.1627894937992096 - -0.1007907018065453 - <_> - - <_> - - - - <_>17 9 4 9 -1. - <_>17 12 4 3 3. - 0 - 7.5979339890182018e-003 - 0.0541234090924263 - -0.1243126988410950 - <_> - - <_> - - - - <_>1 9 10 6 -1. - <_>1 9 5 3 2. - <_>6 12 5 3 2. - 0 - 0.0134808197617531 - -0.0637513026595116 - 0.2525062859058380 - <_> - - <_> - - - - <_>8 12 9 4 -1. - <_>8 14 9 2 2. - 0 - -9.4613758847117424e-004 - 0.0428358688950539 - -0.0768371000885963 - <_> - - <_> - - - - <_>2 8 6 10 -1. - <_>2 8 3 5 2. - <_>5 13 3 5 2. - 0 - -0.0380624905228615 - 0.1925217956304550 - -0.0639471337199211 - <_> - - <_> - - - - <_>7 10 12 6 -1. - <_>10 10 6 6 2. - 0 - 0.1241089999675751 - 7.9416595399379730e-003 - -0.4265302121639252 - <_> - - <_> - - - - <_>3 10 12 6 -1. - <_>6 10 6 6 2. - 0 - -0.0922284424304962 - -0.5521062016487122 - 0.0289649106562138 - <_> - - <_> - - - - <_>20 0 2 12 -1. - <_>20 6 2 6 2. - 0 - 0.0151067702099681 - 0.0276093408465385 - -0.1668844968080521 - <_> - - <_> - - - - <_>0 0 2 12 -1. - <_>0 6 2 6 2. - 0 - -0.0236542504280806 - -0.3437967896461487 - 0.0395133309066296 - <_> - - <_> - - - - <_>14 3 4 15 -1. - <_>14 3 2 15 2. - 0 - 0.0478813908994198 - 8.0661084502935410e-003 - -0.1818519979715347 - <_> - - <_> - - - - <_>0 1 16 14 -1. - <_>0 1 8 7 2. - <_>8 8 8 7 2. - 0 - 0.0854152888059616 - -0.0467524081468582 - 0.2716900110244751 - <_> - - <_> - - - - <_>11 0 8 10 -1. - <_>11 0 8 5 2. - 1 - 3.1524940859526396e-003 - -0.0864214003086090 - 0.0683360025286675 - <_> - - <_> - - - - <_>0 3 16 4 -1. - <_>0 3 8 2 2. - <_>8 5 8 2 2. - 0 - -3.0099870637059212e-003 - 0.0893362089991570 - -0.1362684965133667 - <_> - - <_> - - - - <_>13 0 7 12 -1. - <_>13 4 7 4 3. - 0 - -0.0581125207245350 - -0.1974812000989914 - 0.0265364404767752 - <_> - - <_> - - - - <_>5 3 11 15 -1. - <_>5 8 11 5 3. - 0 - 0.1277566999197006 - -0.0498380400240421 - 0.3489640057086945 - <_> - - <_> - - - - <_>13 0 7 12 -1. - <_>13 4 7 4 3. - 0 - 0.1201129034161568 - -6.3313432037830353e-003 - 0.3793754875659943 - <_> - - <_> - - - - <_>2 0 7 12 -1. - <_>2 4 7 4 3. - 0 - 4.7567482106387615e-003 - 0.1049041971564293 - -0.1354257017374039 - <_> - - <_> - - - - <_>4 5 18 12 -1. - <_>10 9 6 4 9. - 0 - -0.0159023497253656 - 0.0617863014340401 - -0.0983760803937912 - <_> - - <_> - - - - <_>4 7 14 6 -1. - <_>4 7 7 3 2. - <_>11 10 7 3 2. - 0 - -0.0564237087965012 - -0.6337103247642517 - 0.0202245991677046 - <_> - - <_> - - - - <_>7 9 13 3 -1. - <_>7 10 13 1 3. - 0 - -0.0796413272619247 - -1. - 8.7428308324888349e-004 - <_> - - <_> - - - - <_>2 9 13 3 -1. - <_>2 10 13 1 3. - 0 - -2.0731301046907902e-003 - 0.1384645998477936 - -0.0958653017878532 - <_> - - <_> - - - - <_>5 9 17 3 -1. - <_>5 10 17 1 3. - 0 - 5.8470368385314941e-003 - -0.0570338405668736 - 0.1169179975986481 - <_> - - <_> - - - - <_>1 1 10 9 -1. - <_>1 4 10 3 3. - 0 - -0.0261389501392841 - -0.2236243933439255 - 0.0555466301739216 - <_> - - <_> - - - - <_>4 1 16 8 -1. - <_>4 3 16 4 2. - 0 - -6.5781630109995604e-004 - 0.0929992273449898 - -0.0841521173715591 - <_> - - <_> - - - - <_>6 5 6 12 -1. - <_>8 5 2 12 3. - 0 - -0.0560413897037506 - 0.3507285118103027 - -0.0314722806215286 - <_> - - <_> - - - - <_>11 7 6 5 -1. - <_>11 7 3 5 2. - 1 - 0.0977998003363609 - 0.0101244300603867 - -0.3771406114101410 - <_> - - <_> - - - - <_>5 4 9 5 -1. - <_>8 4 3 5 3. - 0 - 4.5515140518546104e-003 - -0.0783113613724709 - 0.1416697055101395 - <_> - - <_> - - - - <_>2 12 18 4 -1. - <_>11 12 9 2 2. - <_>2 14 9 2 2. - 0 - 0.0101683801040053 - 0.0521139912307262 - -0.2442279011011124 - <_> - - <_> - - - - <_>11 4 9 3 -1. - <_>10 5 9 1 3. - 1 - 0.0628854036331177 - -0.0182555094361305 - 0.6284729242324829 - <_> - - <_> - - - - <_>15 0 2 10 -1. - <_>15 0 1 10 2. - 1 - -0.0480641312897205 - -0.8681743144989014 - 6.6064838320016861e-003 - <_> - - <_> - - - - <_>0 5 18 12 -1. - <_>6 9 6 4 9. - 0 - 0.0184799004346132 - 0.0699778124690056 - -0.1592939943075180 - <_> - - <_> - - - - <_>14 9 4 6 -1. - <_>14 9 2 6 2. - 0 - 0.0245498400181532 - -0.0175191201269627 - 0.1796191930770874 - <_> - - <_> - - - - <_>5 6 3 12 -1. - <_>5 10 3 4 3. - 0 - 0.0392274707555771 - -0.0474179908633232 - 0.2794578969478607 - <_> - - <_> - - - - <_>11 0 3 9 -1. - <_>12 1 1 9 3. - 1 - 0.0412481985986233 - 0.0114593701437116 - -0.4347747862339020 - <_> - - <_> - - - - <_>1 9 4 9 -1. - <_>1 12 4 3 3. - 0 - -8.4321142639964819e-004 - 0.1275885999202728 - -0.0970105603337288 - <_> - - <_> - - - - <_>18 9 4 9 -1. - <_>18 12 4 3 3. - 0 - -0.0136887403205037 - -0.1623619049787521 - 0.0432909503579140 - <_> - - <_> - - - - <_>6 9 6 4 -1. - <_>9 9 3 4 2. - 0 - -0.0559825114905834 - -0.7543113827705383 - 0.0157977100461721 - <_> - - <_> - - - - <_>11 0 3 9 -1. - <_>12 1 1 9 3. - 1 - 0.0735782682895660 - -1.4777439646422863e-003 - -1.0000350475311279 - <_> - - <_> - - - - <_>11 0 9 3 -1. - <_>10 1 9 1 3. - 1 - 3.7084969226270914e-003 - -0.0971846431493759 - 0.1243532970547676 - <_> - - <_> - - - - <_>5 15 12 2 -1. - <_>5 16 12 1 2. - 0 - -1.4889879821566865e-005 - 0.0714653432369232 - -0.1684084981679916 - <_> - - <_> - - - - <_>0 0 22 2 -1. - <_>11 0 11 2 2. - 0 - 0.1048756018280983 - 0.0150766503065825 - -0.7115948200225830 - <_> - - <_> - - - - <_>20 0 2 13 -1. - <_>20 0 1 13 2. - 0 - 0.0125874895602465 - -0.0207713004201651 - 0.1746868044137955 - <_> - - <_> - - - - <_>0 0 2 13 -1. - <_>1 0 1 13 2. - 0 - -2.2228389570955187e-004 - 0.1178164035081863 - -0.0926274582743645 - <_> - - <_> - - - - <_>10 1 6 6 -1. - <_>12 1 2 6 3. - 0 - -0.0777604132890701 - -0.7460541129112244 - 3.6328181158751249e-003 - <_> - - <_> - - - - <_>6 1 6 6 -1. - <_>8 1 2 6 3. - 0 - 0.0450434200465679 - 0.0222178697586060 - -0.5005291104316711 - <_> - - <_> - - - - <_>10 7 12 3 -1. - <_>10 8 12 1 3. - 0 - 3.5614410880953074e-003 - -0.0512132197618485 - 0.0899865031242371 - <_> - - <_> - - - - <_>0 7 12 3 -1. - <_>0 8 12 1 3. - 0 - -7.4102368671447039e-004 - 0.1393804997205734 - -0.1027221977710724 - -0.6816900968551636 - 20 - -1 - <_> - - - <_> - - <_> - - - - <_>1 9 8 6 -1. - <_>1 9 4 3 2. - <_>5 12 4 3 2. - 0 - -8.5600130259990692e-003 - 0.1657890975475311 - -0.1641291975975037 - <_> - - <_> - - - - <_>10 10 7 4 -1. - <_>10 12 7 2 2. - 0 - 0.0307988096028566 - -0.0334956496953964 - 0.2857865095138550 - <_> - - <_> - - - - <_>8 10 4 6 -1. - <_>10 10 2 6 2. - 0 - -3.7319411057978868e-004 - 0.1252344995737076 - -0.1211517006158829 - <_> - - <_> - - - - <_>13 6 8 4 -1. - <_>13 6 4 4 2. - 1 - -0.0192538499832153 - -0.0877408832311630 - 0.0390665717422962 - <_> - - <_> - - - - <_>10 1 8 7 -1. - <_>12 3 4 7 2. - 1 - -8.5401646792888641e-003 - 0.1315227001905441 - -0.1300774067640305 - <_> - - <_> - - - - <_>8 5 8 7 -1. - <_>8 5 4 7 2. - 0 - 0.1242434978485107 - 0.0190199799835682 - -0.7824705243110657 - <_> - - <_> - - - - <_>6 5 8 7 -1. - <_>10 5 4 7 2. - 0 - 0.0400934182107449 - -0.0407437682151794 - 0.3885174989700317 - <_> - - <_> - - - - <_>6 3 16 12 -1. - <_>14 3 8 6 2. - <_>6 9 8 6 2. - 0 - -4.4169559259898961e-005 - 0.0455269701778889 - -0.0880638062953949 - <_> - - <_> - - - - <_>4 11 6 6 -1. - <_>4 13 6 2 3. - 0 - -0.0176628492772579 - -0.3137181103229523 - 0.0517943389713764 - <_> - - <_> - - - - <_>4 2 18 14 -1. - <_>13 2 9 7 2. - <_>4 9 9 7 2. - 0 - 0.0523685105144978 - -0.0358459986746311 - 0.1500973999500275 - <_> - - <_> - - - - <_>5 0 11 12 -1. - <_>5 3 11 6 2. - 0 - -0.0287192799150944 - -0.1984937936067581 - 0.0780990719795227 - <_> - - <_> - - - - <_>4 7 16 9 -1. - <_>4 10 16 3 3. - 0 - 0.0694357901811600 - -0.0550737306475639 - 0.2178084999322891 - <_> - - <_> - - - - <_>0 1 18 3 -1. - <_>0 2 18 1 3. - 0 - 0.0547944381833076 - -0.0302236899733543 - 0.6299396753311157 - <_> - - <_> - - - - <_>12 13 6 4 -1. - <_>12 15 6 2 2. - 0 - -0.0153155000880361 - -0.1505279988050461 - 0.0201943702995777 - <_> - - <_> - - - - <_>1 10 6 8 -1. - <_>1 10 3 4 2. - <_>4 14 3 4 2. - 0 - 0.0290019698441029 - -0.0207389891147614 - 0.4564509987831116 - <_> - - <_> - - - - <_>14 12 8 6 -1. - <_>18 12 4 3 2. - <_>14 15 4 3 2. - 0 - -0.0232647694647312 - 0.1467252969741821 - -0.0380813516676426 - <_> - - <_> - - - - <_>9 3 12 3 -1. - <_>13 7 4 3 3. - 1 - 0.0190631095319986 - 0.0729212388396263 - -0.2272370010614395 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>8 12 3 6 2. - 0 - 1.2208239641040564e-003 - 0.0734713226556778 - -0.1912292987108231 - <_> - - <_> - - - - <_>4 8 14 10 -1. - <_>4 13 14 5 2. - 0 - -0.1756591051816940 - 0.2592468857765198 - -0.0560151189565659 - <_> - - <_> - - - - <_>11 2 8 8 -1. - <_>11 2 4 8 2. - 1 - -0.0380421318113804 - 0.1611361056566238 - -0.0437588207423687 - <_> - - <_> - - - - <_>9 6 4 8 -1. - <_>9 6 4 4 2. - 1 - 0.0301302596926689 - 0.0578308291733265 - -0.2977417111396790 - <_> - - <_> - - - - <_>18 3 4 10 -1. - <_>18 3 4 5 2. - 1 - 0.0200892202556133 - -0.0605096295475960 - 0.0334416814148426 - <_> - - <_> - - - - <_>5 15 12 3 -1. - <_>9 15 4 3 3. - 0 - 2.6193389203399420e-004 - -0.1517544984817505 - 0.1109410971403122 - <_> - - <_> - - - - <_>11 8 4 6 -1. - <_>11 8 4 3 2. - 1 - 0.0403106287121773 - 0.0174771193414927 - -0.1418537944555283 - <_> - - <_> - - - - <_>11 8 6 4 -1. - <_>11 8 3 4 2. - 1 - -2.9343019705265760e-003 - -0.1696013957262039 - 0.0935302525758743 - <_> - - <_> - - - - <_>3 13 16 5 -1. - <_>7 13 8 5 2. - 0 - 0.0145545201376081 - -0.0758445262908936 - 0.2777166068553925 - <_> - - <_> - - - - <_>6 2 4 12 -1. - <_>6 2 2 6 2. - <_>8 8 2 6 2. - 0 - 3.4086001105606556e-003 - 0.0739333108067513 - -0.1962659060955048 - <_> - - <_> - - - - <_>2 14 18 4 -1. - <_>11 14 9 2 2. - <_>2 16 9 2 2. - 0 - -6.7988429218530655e-003 - -0.2013248056173325 - 0.0582760386168957 - <_> - - <_> - - - - <_>3 1 12 3 -1. - <_>3 2 12 1 3. - 0 - -5.0457930192351341e-003 - 0.1944606006145477 - -0.0716915801167488 - <_> - - <_> - - - - <_>6 1 16 3 -1. - <_>6 2 16 1 3. - 0 - 0.0104650100693107 - -0.0473145917057991 - 0.1931611001491547 - <_> - - <_> - - - - <_>5 3 8 3 -1. - <_>9 3 4 3 2. - 0 - -1.6713530058041215e-003 - 0.0929151475429535 - -0.1189012974500656 - <_> - - <_> - - - - <_>16 3 4 6 -1. - <_>16 3 4 3 2. - 1 - -0.0427043586969376 - 0.1696103960275650 - -0.0206326507031918 - <_> - - <_> - - - - <_>4 3 10 4 -1. - <_>4 3 5 4 2. - 1 - 0.2036782950162888 - 0.0232468992471695 - -0.4942026138305664 - <_> - - <_> - - - - <_>14 5 6 8 -1. - <_>17 5 3 4 2. - <_>14 9 3 4 2. - 0 - -8.3379482384771109e-004 - 0.0500010699033737 - -0.0737798064947128 - <_> - - <_> - - - - <_>1 2 14 12 -1. - <_>1 5 14 6 2. - 0 - 0.1785476952791214 - 0.0155882900580764 - -0.7765008211135864 - <_> - - <_> - - - - <_>11 2 6 12 -1. - <_>11 5 6 6 2. - 0 - -0.1353528946638107 - -0.5229911208152771 - 3.1595760956406593e-003 - <_> - - <_> - - - - <_>5 2 6 12 -1. - <_>5 5 6 6 2. - 0 - 0.0465552695095539 - -0.0418910607695580 - 0.3032479882240295 - <_> - - <_> - - - - <_>11 5 8 5 -1. - <_>11 5 4 5 2. - 1 - 0.0226636491715908 - 0.0388511605560780 - -0.0851962268352509 - <_> - - <_> - - - - <_>4 0 9 18 -1. - <_>7 0 3 18 3. - 0 - -0.2302772998809815 - -0.9350309967994690 - 0.0139423497021198 - <_> - - <_> - - - - <_>11 14 6 4 -1. - <_>11 16 6 2 2. - 0 - 0.0257141403853893 - -9.1460775583982468e-003 - 0.7806320190429688 - <_> - - <_> - - - - <_>5 14 6 4 -1. - <_>5 16 6 2 2. - 0 - -7.3728510869841557e-006 - 0.0627309232950211 - -0.2004217058420181 - <_> - - <_> - - - - <_>12 13 6 4 -1. - <_>12 15 6 2 2. - 0 - -0.0197578892111778 - -0.2343472987413406 - 0.0146009000018239 - <_> - - <_> - - - - <_>1 6 13 3 -1. - <_>1 7 13 1 3. - 0 - -4.1893101297318935e-003 - 0.1497139930725098 - -0.0693688690662384 - <_> - - <_> - - - - <_>10 6 12 3 -1. - <_>10 7 12 1 3. - 0 - 1.1314969742670655e-003 - -0.0692035928368568 - 0.1044744029641151 - <_> - - <_> - - - - <_>1 8 6 4 -1. - <_>4 8 3 4 2. - 0 - 6.3914088532328606e-003 - 0.0561340302228928 - -0.1986276954412460 - <_> - - <_> - - - - <_>14 12 6 6 -1. - <_>16 12 2 6 3. - 0 - -3.7047569639980793e-003 - 0.0968172922730446 - -0.0952822864055634 - <_> - - <_> - - - - <_>2 12 6 6 -1. - <_>4 12 2 6 3. - 0 - 0.0306274592876434 - -0.0500796400010586 - 0.2602388858795166 - <_> - - <_> - - - - <_>7 15 12 3 -1. - <_>11 15 4 3 3. - 0 - 0.0324444398283958 - 0.0310999397188425 - -0.2078860998153687 - <_> - - <_> - - - - <_>1 12 8 5 -1. - <_>5 12 4 5 2. - 0 - 0.0116515597328544 - -0.0583119504153728 - 0.2537410855293274 - <_> - - <_> - - - - <_>14 5 6 8 -1. - <_>17 5 3 4 2. - <_>14 9 3 4 2. - 0 - -0.0365152209997177 - -0.2674919068813324 - 0.0205362495034933 - <_> - - <_> - - - - <_>2 5 6 8 -1. - <_>2 5 3 4 2. - <_>5 9 3 4 2. - 0 - 0.0174746308475733 - 0.0474169813096523 - -0.3371900916099548 - <_> - - <_> - - - - <_>14 11 8 6 -1. - <_>18 11 4 3 2. - <_>14 14 4 3 2. - 0 - -1.5204170485958457e-003 - 0.0589338093996048 - -0.0958449468016624 - <_> - - <_> - - - - <_>4 0 8 6 -1. - <_>4 0 4 3 2. - <_>8 3 4 3 2. - 0 - 0.0477611795067787 - 0.0108497003093362 - -0.8663501739501953 - <_> - - <_> - - - - <_>14 3 7 4 -1. - <_>14 3 7 2 2. - 1 - -0.0635691136121750 - 0.2585859894752502 - -0.0181565806269646 - <_> - - <_> - - - - <_>0 11 8 6 -1. - <_>0 11 4 3 2. - <_>4 14 4 3 2. - 0 - -1.7476839711889625e-003 - 0.0757502466440201 - -0.1429527997970581 - <_> - - <_> - - - - <_>4 13 14 4 -1. - <_>4 15 14 2 2. - 0 - -4.6762558631598949e-003 - -0.0912233963608742 - 0.1313527971506119 - <_> - - <_> - - - - <_>5 3 9 8 -1. - <_>8 3 3 8 3. - 0 - 0.0222021006047726 - -0.0533974505960941 - 0.2074397951364517 - <_> - - <_> - - - - <_>5 0 15 8 -1. - <_>10 0 5 8 3. - 0 - -0.2464735954999924 - -0.4561021924018860 - 3.5777890589088202e-003 - <_> - - <_> - - - - <_>2 0 15 8 -1. - <_>7 0 5 8 3. - 0 - 5.0148782320320606e-003 - 0.0888718292117119 - -0.1623649001121521 - <_> - - <_> - - - - <_>14 0 6 11 -1. - <_>16 0 2 11 3. - 0 - -0.0420239716768265 - 0.1280557960271835 - -0.0119267599657178 - <_> - - <_> - - - - <_>0 16 18 2 -1. - <_>6 16 6 2 3. - 0 - -0.1089551970362663 - -0.6646612286567688 - 0.0159055497497320 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - -0.3667292892932892 - 0.3637480139732361 - -0.0312062297016382 - <_> - - <_> - - - - <_>8 3 4 7 -1. - <_>8 3 2 7 2. - 1 - 9.5884501934051514e-003 - 0.0910735502839088 - -0.1249236017465591 - <_> - - <_> - - - - <_>10 3 6 8 -1. - <_>12 3 2 8 3. - 0 - 1.6124530229717493e-003 - 0.0337519794702530 - -0.0587492398917675 - <_> - - <_> - - - - <_>6 3 6 8 -1. - <_>8 3 2 8 3. - 0 - -0.0178824309259653 - 0.2099276930093765 - -0.0632152333855629 - <_> - - <_> - - - - <_>7 13 12 4 -1. - <_>7 15 12 2 2. - 0 - -6.6655018599703908e-005 - 0.0550200305879116 - -0.1790881007909775 - <_> - - <_> - - - - <_>3 9 16 8 -1. - <_>3 9 8 4 2. - <_>11 13 8 4 2. - 0 - -0.0109126102179289 - -0.1787886023521423 - 0.0640889033675194 - <_> - - <_> - - - - <_>9 0 13 3 -1. - <_>9 1 13 1 3. - 0 - -1.9031569827347994e-003 - 0.1101256012916565 - -0.0625764429569244 - <_> - - <_> - - - - <_>4 0 4 12 -1. - <_>4 0 2 6 2. - <_>6 6 2 6 2. - 0 - 4.7322059981524944e-003 - 0.0606118105351925 - -0.1752125024795532 - <_> - - <_> - - - - <_>1 11 20 4 -1. - <_>6 11 10 4 2. - 0 - 0.1795500069856644 - -0.0264137107878923 - 0.5146319866180420 - <_> - - <_> - - - - <_>3 14 6 4 -1. - <_>6 14 3 4 2. - 0 - -1.8869279883801937e-003 - 0.0707328692078590 - -0.1897756010293961 - <_> - - <_> - - - - <_>10 6 12 3 -1. - <_>10 7 12 1 3. - 0 - -3.5322420299053192e-003 - 0.0958002880215645 - -0.0492516607046127 - <_> - - <_> - - - - <_>0 6 12 3 -1. - <_>0 7 12 1 3. - 0 - 1.0818409500643611e-003 - -0.0970824882388115 - 0.1409244984388351 - <_> - - <_> - - - - <_>6 2 14 6 -1. - <_>6 4 14 2 3. - 0 - -0.0954552590847015 - -0.6837651729583740 - 8.8187018409371376e-003 - <_> - - <_> - - - - <_>4 1 6 4 -1. - <_>4 1 6 2 2. - 1 - 1.6179149970412254e-003 - -0.0951295793056488 - 0.1135148033499718 - <_> - - <_> - - - - <_>1 0 21 18 -1. - <_>8 0 7 18 3. - 0 - 0.6554787755012512 - 9.7635984420776367e-003 - -0.5658118724822998 - <_> - - <_> - - - - <_>5 0 14 2 -1. - <_>5 0 7 2 2. - 1 - -0.0779737234115601 - 0.3557372987270355 - -0.0331261307001114 - <_> - - <_> - - - - <_>14 8 4 9 -1. - <_>14 11 4 3 3. - 0 - 0.0202090293169022 - 0.0393016114830971 - -0.1358025074005127 - <_> - - <_> - - - - <_>2 0 6 10 -1. - <_>4 0 2 10 3. - 0 - 0.0903235897421837 - -0.0159329306334257 - 0.6940913200378418 - <_> - - <_> - - - - <_>5 11 12 4 -1. - <_>11 11 6 2 2. - <_>5 13 6 2 2. - 0 - -6.2048831023275852e-003 - -0.1703765988349915 - 0.0680906772613525 - <_> - - <_> - - - - <_>8 5 4 6 -1. - <_>10 5 2 6 2. - 0 - -0.0157372504472733 - 0.1625010967254639 - -0.0665289387106895 - <_> - - <_> - - - - <_>7 1 15 9 -1. - <_>12 4 5 3 9. - 0 - -0.0353970415890217 - -0.0897665470838547 - 0.0491357408463955 - <_> - - <_> - - - - <_>0 1 15 9 -1. - <_>5 4 5 3 9. - 0 - 0.0328508615493774 - 0.0851581394672394 - -0.1300231963396072 - <_> - - <_> - - - - <_>5 0 12 16 -1. - <_>11 0 6 8 2. - <_>5 8 6 8 2. - 0 - -0.0840240567922592 - 0.3065848946571350 - -0.0393136218190193 - <_> - - <_> - - - - <_>8 10 6 5 -1. - <_>11 10 3 5 2. - 0 - 2.1347659640014172e-003 - 0.0833869501948357 - -0.1223948001861572 - <_> - - <_> - - - - <_>10 4 8 9 -1. - <_>10 7 8 3 3. - 0 - 0.1792261004447937 - 2.6004109531641006e-003 - -0.9998909235000610 - <_> - - <_> - - - - <_>4 4 8 9 -1. - <_>4 7 8 3 3. - 0 - 0.1185439005494118 - 0.0110983699560165 - -0.8962950706481934 - <_> - - <_> - - - - <_>8 3 12 3 -1. - <_>8 4 12 1 3. - 0 - -2.7351840399205685e-003 - 0.1158913001418114 - -0.0635892078280449 - <_> - - <_> - - - - <_>0 3 13 3 -1. - <_>0 4 13 1 3. - 0 - 6.6092880442738533e-003 - -0.0794914290308952 - 0.1850122958421707 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>14 1 4 3 3. - 0 - -0.0210720095783472 - -0.1470849961042404 - 0.0260712802410126 - <_> - - <_> - - - - <_>0 1 12 3 -1. - <_>4 1 4 3 3. - 0 - 0.0134116197004914 - 0.0486455895006657 - -0.2204180061817169 - <_> - - <_> - - - - <_>8 3 12 3 -1. - <_>8 4 12 1 3. - 0 - -0.0206615403294563 - 0.2137404978275299 - -0.0222432296723127 - <_> - - <_> - - - - <_>8 4 6 4 -1. - <_>8 4 3 4 2. - 1 - -0.1093925014138222 - -0.7923508882522583 - 0.0119324997067451 - <_> - - <_> - - - - <_>13 2 2 11 -1. - <_>13 2 1 11 2. - 1 - 0.0545732714235783 - -8.7064085528254509e-003 - 0.3822610974311829 - <_> - - <_> - - - - <_>9 2 11 2 -1. - <_>9 2 11 1 2. - 1 - -0.0278459899127483 - 0.4209634065628052 - -0.0343008190393448 - <_> - - <_> - - - - <_>11 1 3 16 -1. - <_>11 9 3 8 2. - 0 - 0.1497317999601364 - 5.5857440456748009e-003 - -0.7102707028388977 - <_> - - <_> - - - - <_>7 1 4 9 -1. - <_>7 4 4 3 3. - 0 - 0.0545480214059353 - 0.0192897692322731 - -0.5506185293197632 - <_> - - <_> - - - - <_>12 4 4 8 -1. - <_>12 8 4 4 2. - 0 - 5.4990737698972225e-003 - 0.0436438918113709 - -0.1223369985818863 - <_> - - <_> - - - - <_>1 7 6 4 -1. - <_>1 9 6 2 2. - 0 - 3.5988059244118631e-004 - -0.0950050204992294 - 0.1250164061784744 - <_> - - <_> - - - - <_>12 4 4 8 -1. - <_>12 8 4 4 2. - 0 - -0.0510030686855316 - -0.3464818894863129 - 0.0141243999823928 - <_> - - <_> - - - - <_>6 4 4 8 -1. - <_>6 8 4 4 2. - 0 - -0.0593791306018829 - 0.6884043216705322 - -0.0207809992134571 - <_> - - <_> - - - - <_>19 3 3 12 -1. - <_>20 4 1 12 3. - 1 - 0.0689760372042656 - 8.5678137838840485e-003 - -0.6909855008125305 - <_> - - <_> - - - - <_>3 3 12 3 -1. - <_>2 4 12 1 3. - 1 - -4.3954830616712570e-003 - -0.1738288998603821 - 0.0691059902310371 - <_> - - <_> - - - - <_>13 6 3 7 -1. - <_>14 7 1 7 3. - 1 - 0.0138380303978920 - -0.0293981190770864 - 0.1968578994274139 - <_> - - <_> - - - - <_>8 12 6 4 -1. - <_>11 12 3 4 2. - 0 - -7.5316978618502617e-003 - -0.3579084873199463 - 0.0396854504942894 - <_> - - <_> - - - - <_>10 8 10 10 -1. - <_>15 8 5 5 2. - <_>10 13 5 5 2. - 0 - -0.0882997065782547 - -0.2377042025327683 - 3.0232321005314589e-003 - <_> - - <_> - - - - <_>2 8 10 10 -1. - <_>2 8 5 5 2. - <_>7 13 5 5 2. - 0 - -0.0441387593746185 - 0.2654140889644623 - -0.0518651790916920 - -0.6068928837776184 - 21 - -1 - <_> - - - <_> - - <_> - - - - <_>1 11 20 3 -1. - <_>6 11 10 3 2. - 0 - -0.0925825834274292 - 0.3618328869342804 - -0.0782759636640549 - <_> - - <_> - - - - <_>13 8 6 4 -1. - <_>13 8 3 4 2. - 1 - -4.8143980093300343e-003 - -0.1268171966075897 - 0.0677237883210182 - <_> - - <_> - - - - <_>4 11 8 4 -1. - <_>8 11 4 4 2. - 0 - 0.0323651283979416 - -0.0460871085524559 - 0.3269202113151550 - <_> - - <_> - - - - <_>9 5 10 6 -1. - <_>9 5 5 6 2. - 0 - -0.0170285701751709 - 0.0913064032793045 - -0.1166059002280235 - <_> - - <_> - - - - <_>4 8 6 9 -1. - <_>7 8 3 9 2. - 0 - -0.1130862012505531 - -0.7963135838508606 - 0.0584269911050797 - <_> - - <_> - - - - <_>4 5 16 4 -1. - <_>4 5 8 4 2. - 0 - -3.5633759107440710e-003 - -0.0826106220483780 - 0.1016670018434525 - <_> - - <_> - - - - <_>2 4 18 6 -1. - <_>8 6 6 2 9. - 0 - -0.2410956025123596 - 0.2792722880840302 - -0.0807449668645859 - <_> - - <_> - - - - <_>11 1 2 11 -1. - <_>11 1 1 11 2. - 1 - 0.0225992891937494 - 0.0517445988953114 - -0.2886540889739990 - <_> - - <_> - - - - <_>7 1 6 8 -1. - <_>7 1 3 4 2. - <_>10 5 3 4 2. - 0 - 0.0200022701174021 - -0.0579623617231846 - 0.2904478907585144 - <_> - - <_> - - - - <_>7 10 8 6 -1. - <_>9 10 4 6 2. - 0 - -1.9348099594935775e-003 - 0.0988086834549904 - -0.1236845999956131 - <_> - - <_> - - - - <_>6 12 9 4 -1. - <_>9 12 3 4 3. - 0 - -7.5757717713713646e-003 - -0.2007191032171249 - 0.0927412882447243 - <_> - - <_> - - - - <_>10 12 9 4 -1. - <_>13 12 3 4 3. - 0 - 0.0333818197250366 - -0.0345307588577271 - 0.3087649941444397 - <_> - - <_> - - - - <_>8 0 10 8 -1. - <_>8 0 5 8 2. - 1 - 0.0474189817905426 - -0.1356326937675476 - 0.1101675033569336 - <_> - - <_> - - - - <_>9 6 12 4 -1. - <_>15 6 6 2 2. - <_>9 8 6 2 2. - 0 - -5.4173129610717297e-003 - -0.1605008989572525 - 0.0726122930645943 - <_> - - <_> - - - - <_>4 9 14 5 -1. - <_>11 9 7 5 2. - 0 - -9.6942558884620667e-003 - -0.1637648940086365 - 0.0844264701008797 - <_> - - <_> - - - - <_>14 6 6 6 -1. - <_>12 8 6 2 3. - 1 - -0.0606321692466736 - 0.1647441983222961 - -0.0269814003258944 - <_> - - <_> - - - - <_>6 4 6 7 -1. - <_>8 4 2 7 3. - 0 - 5.0302860327064991e-003 - -0.1099682971835136 - 0.1348073035478592 - <_> - - <_> - - - - <_>14 9 6 6 -1. - <_>14 12 6 3 2. - 0 - -0.0877922028303146 - -0.6831796765327454 - 0.0108346100896597 - <_> - - <_> - - - - <_>2 9 6 6 -1. - <_>2 12 6 3 2. - 0 - 0.0303904097527266 - -0.0424505695700645 - 0.3077059984207153 - <_> - - <_> - - - - <_>13 8 4 8 -1. - <_>13 8 2 8 2. - 0 - -0.0515663400292397 - -0.6284000873565674 - 9.7069833427667618e-003 - <_> - - <_> - - - - <_>5 8 4 9 -1. - <_>7 8 2 9 2. - 0 - -4.2446999577805400e-004 - 0.0845956131815910 - -0.1807512938976288 - <_> - - <_> - - - - <_>2 4 18 12 -1. - <_>8 8 6 4 9. - 0 - -0.1213535964488983 - -0.1271748989820480 - 0.0965750589966774 - <_> - - <_> - - - - <_>3 5 10 6 -1. - <_>8 5 5 6 2. - 0 - -0.0151505600661039 - 0.0930375531315804 - -0.1312790066003799 - <_> - - <_> - - - - <_>6 0 12 8 -1. - <_>6 0 6 8 2. - 0 - 0.0394464097917080 - 0.0255436394363642 - -0.1146064028143883 - <_> - - <_> - - - - <_>0 11 8 7 -1. - <_>2 11 4 7 2. - 0 - -8.2465475425124168e-003 - 0.2400871068239212 - -0.0516802482306957 - <_> - - <_> - - - - <_>15 11 6 7 -1. - <_>17 11 2 7 3. - 0 - 0.0352623611688614 - -0.0335550494492054 - 0.2057549953460693 - <_> - - <_> - - - - <_>3 16 14 2 -1. - <_>3 17 14 1 2. - 0 - 0.0117030600085855 - 0.0235292501747608 - -0.4998390078544617 - <_> - - <_> - - - - <_>9 15 13 3 -1. - <_>9 16 13 1 3. - 0 - 0.0429699681699276 - -0.0126833301037550 - 0.5404338836669922 - <_> - - <_> - - - - <_>0 15 13 3 -1. - <_>0 16 13 1 3. - 0 - -0.0158117990940809 - 0.3956415057182312 - -0.0355683900415897 - <_> - - <_> - - - - <_>5 13 12 3 -1. - <_>5 14 12 1 3. - 0 - 4.6253358013927937e-003 - 0.0523705407977104 - -0.2298993021249771 - <_> - - <_> - - - - <_>0 14 14 3 -1. - <_>0 15 14 1 3. - 0 - -1.5898230485618114e-003 - 0.1379200965166092 - -0.0867831930518150 - <_> - - <_> - - - - <_>13 5 6 6 -1. - <_>15 5 2 6 3. - 0 - 6.2329089269042015e-004 - -0.0866438299417496 - 0.0577100291848183 - <_> - - <_> - - - - <_>3 5 6 6 -1. - <_>5 5 2 6 3. - 0 - 7.0994929410517216e-003 - 0.0757976174354553 - -0.1689887046813965 - <_> - - <_> - - - - <_>2 3 20 4 -1. - <_>7 3 10 4 2. - 0 - 0.0696087777614594 - -0.0124546997249126 - 0.2084520012140274 - <_> - - <_> - - - - <_>4 13 12 2 -1. - <_>4 14 12 1 2. - 0 - -0.0187595207244158 - -0.5500862002372742 - 0.0210402794182301 - <_> - - <_> - - - - <_>9 6 9 6 -1. - <_>12 6 3 6 3. - 0 - 0.0465137884020805 - -0.0259040091186762 - 0.1832201927900314 - <_> - - <_> - - - - <_>8 5 6 7 -1. - <_>10 5 2 7 3. - 0 - 0.0216385796666145 - -0.0388739109039307 - 0.2991969883441925 - <_> - - <_> - - - - <_>15 0 3 10 -1. - <_>16 1 1 10 3. - 1 - -0.0767725706100464 - -1. - 3.9020550902932882e-003 - <_> - - <_> - - - - <_>7 0 10 3 -1. - <_>6 1 10 1 3. - 1 - 0.0405355282127857 - 0.0188806802034378 - -0.6603388786315918 - <_> - - <_> - - - - <_>11 4 8 6 -1. - <_>15 4 4 3 2. - <_>11 7 4 3 2. - 0 - 0.0403387583792210 - 9.2877401039004326e-003 - -0.3442203104496002 - <_> - - <_> - - - - <_>7 0 12 3 -1. - <_>6 1 12 1 3. - 1 - 0.0434042401611805 - -0.0221117790788412 - 0.5122771263122559 - <_> - - <_> - - - - <_>19 4 3 11 -1. - <_>20 5 1 11 3. - 1 - 0.0168951302766800 - 0.0300584807991982 - -0.1864860057830811 - <_> - - <_> - - - - <_>1 11 6 7 -1. - <_>3 11 2 7 3. - 0 - 3.0269259586930275e-003 - -0.1397909969091415 - 0.0875445604324341 - <_> - - <_> - - - - <_>7 4 15 14 -1. - <_>7 11 15 7 2. - 0 - -0.3717184066772461 - -0.2967667877674103 - 0.0162415504455566 - <_> - - <_> - - - - <_>3 4 11 3 -1. - <_>2 5 11 1 3. - 1 - -0.0257987398654222 - -0.4371350109577179 - 0.0267681498080492 - <_> - - <_> - - - - <_>14 6 3 8 -1. - <_>15 7 1 8 3. - 1 - -9.0826600790023804e-003 - 0.0995484963059425 - -0.0385005399584770 - <_> - - <_> - - - - <_>3 0 3 18 -1. - <_>4 0 1 18 3. - 0 - -1.7977179959416389e-003 - 0.1381019949913025 - -0.0753872320055962 - <_> - - <_> - - - - <_>14 3 8 4 -1. - <_>14 3 8 2 2. - 1 - 0.1243569999933243 - 4.6064029447734356e-003 - -0.3690980076789856 - <_> - - <_> - - - - <_>8 3 4 8 -1. - <_>8 3 2 8 2. - 1 - -0.0129014896228909 - -0.2043330073356628 - 0.0531336106359959 - <_> - - <_> - - - - <_>18 2 4 12 -1. - <_>15 5 4 6 2. - 1 - -0.0133520998060703 - -0.1051217019557953 - 0.0597462393343449 - <_> - - <_> - - - - <_>2 9 17 3 -1. - <_>2 10 17 1 3. - 0 - -0.0306505206972361 - 0.3436650037765503 - -0.0396178103983402 - <_> - - <_> - - - - <_>7 9 14 3 -1. - <_>7 10 14 1 3. - 0 - 2.0778391044586897e-003 - -0.0507552884519100 - 0.0729307532310486 - <_> - - <_> - - - - <_>8 2 6 8 -1. - <_>8 2 3 4 2. - <_>11 6 3 4 2. - 0 - -0.0611611790955067 - 0.7837166786193848 - -0.0139401303604245 - <_> - - <_> - - - - <_>11 4 8 6 -1. - <_>15 4 4 3 2. - <_>11 7 4 3 2. - 0 - -0.0666819736361504 - -0.6701030731201172 - 4.2770858854055405e-003 - <_> - - <_> - - - - <_>3 4 8 6 -1. - <_>3 4 4 3 2. - <_>7 7 4 3 2. - 0 - 0.0273598507046700 - 0.0242531802505255 - -0.4267185926437378 - <_> - - <_> - - - - <_>3 1 18 3 -1. - <_>3 2 18 1 3. - 0 - -2.4731201119720936e-003 - 0.0964932367205620 - -0.0574338398873806 - <_> - - <_> - - - - <_>0 9 8 3 -1. - <_>4 9 4 3 2. - 0 - -0.0107214897871017 - -0.2157561033964157 - 0.0442569702863693 - <_> - - <_> - - - - <_>13 2 9 10 -1. - <_>13 7 9 5 2. - 0 - -0.1393698006868362 - -0.3637753129005432 - 0.0100051397457719 - <_> - - <_> - - - - <_>1 2 8 12 -1. - <_>1 2 4 6 2. - <_>5 8 4 6 2. - 0 - -0.0568677112460136 - 0.3032726943492889 - -0.0372307896614075 - <_> - - <_> - - - - <_>12 5 8 6 -1. - <_>16 5 4 3 2. - <_>12 8 4 3 2. - 0 - -0.0657765120267868 - -1. - 1.2443619780242443e-003 - <_> - - <_> - - - - <_>1 0 17 3 -1. - <_>1 1 17 1 3. - 0 - -1.5500129666179419e-003 - 0.1289858072996140 - -0.0855282470583916 - <_> - - <_> - - - - <_>4 0 15 2 -1. - <_>4 1 15 1 2. - 0 - 8.7909551803022623e-004 - -0.0799063816666603 - 0.1284713000059128 - <_> - - <_> - - - - <_>5 0 12 4 -1. - <_>5 2 12 2 2. - 0 - 2.9614660888910294e-003 - 0.0894338414072990 - -0.1704798042774200 - <_> - - <_> - - - - <_>7 4 15 14 -1. - <_>7 11 15 7 2. - 0 - -0.5073503851890564 - -0.8419762849807739 - 2.3592109791934490e-003 - <_> - - <_> - - - - <_>8 2 9 2 -1. - <_>8 2 9 1 2. - 1 - 0.0354092009365559 - 0.0171374902129173 - -0.5905207991600037 - <_> - - <_> - - - - <_>16 0 2 13 -1. - <_>16 0 1 13 2. - 1 - -0.0462202392518520 - 0.4738368988037109 - -0.0114230895414948 - <_> - - <_> - - - - <_>6 0 13 2 -1. - <_>6 0 13 1 2. - 1 - 0.0408750995993614 - -0.0267140790820122 - 0.4213987886905670 - <_> - - <_> - - - - <_>12 7 2 9 -1. - <_>12 7 1 9 2. - 1 - -0.0576518103480339 - 0.5602129101753235 - -9.5757292583584785e-003 - <_> - - <_> - - - - <_>10 7 9 2 -1. - <_>10 7 9 1 2. - 1 - 3.3733060117810965e-003 - 0.0723236203193665 - -0.1551048010587692 - <_> - - <_> - - - - <_>9 0 11 10 -1. - <_>9 5 11 5 2. - 0 - -0.3409616053104401 - -1. - -3.1605950789526105e-004 - <_> - - <_> - - - - <_>8 5 9 2 -1. - <_>8 5 9 1 2. - 1 - -5.5850511416792870e-003 - -0.1576807051897049 - 0.0736257433891296 - <_> - - <_> - - - - <_>13 2 9 10 -1. - <_>13 7 9 5 2. - 0 - -0.1106723994016647 - 0.2364044040441513 - -0.0126707796007395 - <_> - - <_> - - - - <_>0 2 9 10 -1. - <_>0 7 9 5 2. - 0 - 0.0432464107871056 - -0.0493464209139347 - 0.3011310100555420 - <_> - - <_> - - - - <_>17 2 3 8 -1. - <_>17 6 3 4 2. - 0 - -5.8916499838232994e-003 - -0.1472765058279038 - 0.0613457001745701 - <_> - - <_> - - - - <_>2 2 3 8 -1. - <_>2 6 3 4 2. - 0 - -2.8674090572167188e-005 - 0.1153924018144608 - -0.1469265073537827 - <_> - - <_> - - - - <_>4 4 18 4 -1. - <_>13 4 9 2 2. - <_>4 6 9 2 2. - 0 - 0.0261749103665352 - -0.0229605808854103 - 0.2100441008806229 - <_> - - <_> - - - - <_>0 4 18 4 -1. - <_>0 4 9 2 2. - <_>9 6 9 2 2. - 0 - -1.9902619533240795e-003 - 0.0972506329417229 - -0.1324492990970612 - <_> - - <_> - - - - <_>4 1 14 4 -1. - <_>11 1 7 2 2. - <_>4 3 7 2 2. - 0 - -0.0169608406722546 - -0.3194906115531921 - 0.0361882895231247 - <_> - - <_> - - - - <_>0 0 21 8 -1. - <_>7 0 7 8 3. - 0 - -0.1563473939895630 - 0.3193452954292297 - -0.0419170707464218 - <_> - - <_> - - - - <_>5 0 14 18 -1. - <_>12 0 7 9 2. - <_>5 9 7 9 2. - 0 - -0.2386395037174225 - 0.3818357884883881 - -8.6567532271146774e-003 - <_> - - <_> - - - - <_>1 11 16 4 -1. - <_>5 11 8 4 2. - 0 - -0.0776415020227432 - -0.3315665125846863 - 0.0334911495447159 - <_> - - <_> - - - - <_>6 9 10 6 -1. - <_>6 11 10 2 3. - 0 - -0.0452578999102116 - 0.4605852961540222 - -0.0313548594713211 - <_> - - <_> - - - - <_>5 10 12 4 -1. - <_>5 11 12 2 2. - 0 - -0.0333907902240753 - -0.7297474741935730 - 0.0162069909274578 - <_> - - <_> - - - - <_>15 4 6 6 -1. - <_>15 4 3 6 2. - 1 - 0.0730794668197632 - -0.0192014500498772 - 0.3401190936565399 - <_> - - <_> - - - - <_>7 4 6 6 -1. - <_>7 4 6 3 2. - 1 - -0.0545362308621407 - 0.3322716057300568 - -0.0331634283065796 - <_> - - <_> - - - - <_>12 5 8 6 -1. - <_>16 5 4 3 2. - <_>12 8 4 3 2. - 0 - 0.0395526885986328 - 0.0118175595998764 - -0.3213171958923340 - <_> - - <_> - - - - <_>5 5 8 4 -1. - <_>5 5 8 2 2. - 1 - 5.9160130331292748e-004 - -0.1176635026931763 - 0.0880023613572121 - <_> - - <_> - - - - <_>17 6 3 12 -1. - <_>17 10 3 4 3. - 0 - 0.0353797301650047 - 0.0182861909270287 - -0.1620689034461975 - <_> - - <_> - - - - <_>5 7 9 2 -1. - <_>5 7 9 1 2. - 1 - 0.0201524905860424 - 0.0228259395807981 - -0.4303478896617889 - <_> - - <_> - - - - <_>14 6 3 8 -1. - <_>15 7 1 8 3. - 1 - -0.0291852895170450 - 0.1825695931911469 - -0.0163763090968132 - <_> - - <_> - - - - <_>5 7 12 2 -1. - <_>5 8 12 1 2. - 0 - -0.0217057801783085 - -0.6697772145271301 - 0.0167823601514101 - <_> - - <_> - - - - <_>4 5 18 3 -1. - <_>4 6 18 1 3. - 0 - 0.0425842702388763 - -0.0168524999171495 - 0.3436039984226227 - <_> - - <_> - - - - <_>1 6 15 9 -1. - <_>6 6 5 9 3. - 0 - -0.1266373991966248 - 0.2674858868122101 - -0.0361077897250652 - <_> - - <_> - - - - <_>19 4 3 10 -1. - <_>19 4 3 5 2. - 1 - 0.1426007002592087 - 0.0144452704116702 - -0.1972950994968414 - <_> - - <_> - - - - <_>0 12 18 6 -1. - <_>0 15 18 3 2. - 0 - 0.0535609312355518 - 0.0173247996717691 - -0.5960922241210938 - <_> - - <_> - - - - <_>6 13 13 4 -1. - <_>6 15 13 2 2. - 0 - -5.9380959719419479e-003 - -0.0651562735438347 - 0.0596456006169319 - <_> - - <_> - - - - <_>3 5 8 9 -1. - <_>3 8 8 3 3. - 0 - -6.6497321240603924e-003 - 0.1427001953125000 - -0.0796698182821274 - <_> - - <_> - - - - <_>6 8 10 8 -1. - <_>6 10 10 4 2. - 0 - -3.0137640424072742e-003 - 0.1399628967046738 - -0.0948317572474480 - <_> - - <_> - - - - <_>4 6 13 6 -1. - <_>4 9 13 3 2. - 0 - -0.0172130502760410 - -0.1726574003696442 - 0.0694516524672508 - <_> - - <_> - - - - <_>14 3 2 12 -1. - <_>14 3 2 6 2. - 1 - 0.1077570989727974 - -4.6757548116147518e-003 - 0.9216187000274658 - <_> - - <_> - - - - <_>8 3 12 2 -1. - <_>8 3 6 2 2. - 1 - 0.0587385408580303 - -0.0424589812755585 - 0.2883234918117523 - <_> - - <_> - - - - <_>13 1 5 12 -1. - <_>13 1 5 6 2. - 1 - -0.3047547936439514 - -1. - 2.6918480216409080e-005 - <_> - - <_> - - - - <_>9 1 12 5 -1. - <_>9 1 6 5 2. - 1 - 0.2039577960968018 - 0.0253179892897606 - -0.5027515888214111 - <_> - - <_> - - - - <_>8 12 8 3 -1. - <_>8 12 4 3 2. - 0 - -9.7794281318783760e-003 - -0.1906087994575501 - 0.0305771399289370 - <_> - - <_> - - - - <_>5 12 12 4 -1. - <_>8 12 6 4 2. - 0 - -0.0227754991501570 - 0.2704837024211884 - -0.0510012097656727 - <_> - - <_> - - - - <_>13 8 6 4 -1. - <_>13 8 3 4 2. - 1 - 9.8080374300479889e-003 - 0.0241802502423525 - -0.0750008374452591 - <_> - - <_> - - - - <_>9 8 4 6 -1. - <_>9 8 4 3 2. - 1 - -0.0111309699714184 - -0.2382574975490570 - 0.0643887221813202 - -0.5688105821609497 - 22 - -1 - <_> - - - <_> - - <_> - - - - <_>1 7 20 11 -1. - <_>6 7 10 11 2. - 0 - -0.2138068974018097 - 0.2768664062023163 - -0.0927778184413910 - <_> - - <_> - - - - <_>10 13 12 3 -1. - <_>10 14 12 1 3. - 0 - -3.3374479971826077e-003 - 0.1411923021078110 - -0.0519071593880653 - <_> - - <_> - - - - <_>1 10 6 4 -1. - <_>4 10 3 4 2. - 0 - -0.0287385508418083 - -0.3624325096607208 - 0.0319380201399326 - <_> - - <_> - - - - <_>15 10 6 4 -1. - <_>15 10 3 4 2. - 0 - -3.5554158966988325e-003 - 0.1196912005543709 - -0.0523067489266396 - <_> - - <_> - - - - <_>0 13 12 3 -1. - <_>0 14 12 1 3. - 0 - -0.0107324598357081 - 0.2860266864299774 - -0.0605550594627857 - <_> - - <_> - - - - <_>4 10 14 8 -1. - <_>4 14 14 4 2. - 0 - 0.0873102396726608 - -0.0336133912205696 - 0.4778678119182587 - <_> - - <_> - - - - <_>5 14 12 4 -1. - <_>5 15 12 2 2. - 0 - 2.1971999667584896e-003 - 0.0602079704403877 - -0.2154375016689301 - <_> - - <_> - - - - <_>5 16 12 2 -1. - <_>5 17 12 1 2. - 0 - -7.4302748544141650e-005 - 0.1414128988981247 - -0.1271156072616577 - <_> - - <_> - - - - <_>1 0 20 12 -1. - <_>6 0 10 12 2. - 0 - -0.2931401133537293 - -0.5559828877449036 - 7.8105749562382698e-003 - <_> - - <_> - - - - <_>7 12 15 5 -1. - <_>12 12 5 5 3. - 0 - 0.0779965370893478 - -0.0202381405979395 - 0.2223376929759979 - <_> - - <_> - - - - <_>6 0 15 2 -1. - <_>6 0 15 1 2. - 1 - 4.9733570776879787e-003 - -0.1541032940149307 - 0.0988745167851448 - <_> - - <_> - - - - <_>6 5 12 8 -1. - <_>12 5 6 4 2. - <_>6 9 6 4 2. - 0 - -0.0622326508164406 - -0.2525390982627869 - 0.0258643291890621 - <_> - - <_> - - - - <_>4 5 12 8 -1. - <_>4 5 6 4 2. - <_>10 9 6 4 2. - 0 - -7.4750548228621483e-003 - -0.1907179057598114 - 0.0845282003283501 - <_> - - <_> - - - - <_>6 2 16 6 -1. - <_>14 2 8 3 2. - <_>6 5 8 3 2. - 0 - 0.0222460106015205 - -0.0310246292501688 - 0.1528923958539963 - <_> - - <_> - - - - <_>1 2 16 14 -1. - <_>1 2 8 7 2. - <_>9 9 8 7 2. - 0 - -0.0123052597045898 - 0.1169324964284897 - -0.1109255999326706 - <_> - - <_> - - - - <_>11 14 6 4 -1. - <_>11 14 3 4 2. - 0 - -1.3985290424898267e-003 - -0.2043567001819611 - 0.0875922590494156 - <_> - - <_> - - - - <_>3 8 12 9 -1. - <_>7 11 4 3 9. - 0 - 0.3636125028133392 - -0.0187503192573786 - 0.8505452871322632 - <_> - - <_> - - - - <_>8 3 14 4 -1. - <_>15 3 7 2 2. - <_>8 5 7 2 2. - 0 - -3.8815739098936319e-003 - 0.0806438773870468 - -0.1052099987864494 - <_> - - <_> - - - - <_>9 0 6 8 -1. - <_>11 2 2 8 3. - 1 - -0.0525006316602230 - 0.3800252079963684 - -0.0360490791499615 - <_> - - <_> - - - - <_>12 13 6 4 -1. - <_>12 15 6 2 2. - 0 - -7.9602311598137021e-004 - 0.0337949693202972 - -0.0756038799881935 - <_> - - <_> - - - - <_>4 13 6 4 -1. - <_>4 15 6 2 2. - 0 - -0.0200660899281502 - -0.4384298920631409 - 0.0333891995251179 - <_> - - <_> - - - - <_>6 16 16 2 -1. - <_>6 17 16 1 2. - 0 - -2.4233239237219095e-003 - -0.0930052474141121 - 0.0497728288173676 - <_> - - <_> - - - - <_>0 3 12 3 -1. - <_>0 4 12 1 3. - 0 - -6.8737422116100788e-003 - 0.2037483006715775 - -0.0581658482551575 - <_> - - <_> - - - - <_>8 3 14 3 -1. - <_>8 4 14 1 3. - 0 - 6.5535600297152996e-003 - -0.0702933967113495 - 0.1440014988183975 - <_> - - <_> - - - - <_>6 2 3 16 -1. - <_>6 6 3 8 2. - 0 - -0.0167806800454855 - -0.3222652077674866 - 0.0437172502279282 - <_> - - <_> - - - - <_>5 2 14 14 -1. - <_>12 2 7 7 2. - <_>5 9 7 7 2. - 0 - 0.0254480708390474 - 0.0434619188308716 - -0.1537698954343796 - <_> - - <_> - - - - <_>5 8 3 8 -1. - <_>5 12 3 4 2. - 0 - 3.4656568896025419e-003 - -0.0631199926137924 - 0.2139452993869782 - <_> - - <_> - - - - <_>14 7 7 4 -1. - <_>14 7 7 2 2. - 1 - 0.1013225018978119 - -0.0170958302915096 - 0.1885329931974411 - <_> - - <_> - - - - <_>4 6 12 9 -1. - <_>8 9 4 3 9. - 0 - 0.1071430966258049 - 0.0354068912565708 - -0.3486903905868530 - <_> - - <_> - - - - <_>7 11 15 6 -1. - <_>12 11 5 6 3. - 0 - -0.0145009998232126 - 0.0379035808146000 - -0.0491692088544369 - <_> - - <_> - - - - <_>0 11 15 6 -1. - <_>5 11 5 6 3. - 0 - -0.1535475999116898 - 0.3504832088947296 - -0.0327740088105202 - <_> - - <_> - - - - <_>15 7 6 8 -1. - <_>18 7 3 4 2. - <_>15 11 3 4 2. - 0 - -0.0651375874876976 - -0.4138002097606659 - 7.3137627914547920e-003 - <_> - - <_> - - - - <_>0 7 22 10 -1. - <_>0 7 11 5 2. - <_>11 12 11 5 2. - 0 - -2.9204839374870062e-003 - -0.1375668048858643 - 0.0907953903079033 - <_> - - <_> - - - - <_>1 8 20 8 -1. - <_>6 8 10 8 2. - 0 - -0.3410457074642181 - -0.6725202798843384 - 0.0152002302929759 - <_> - - <_> - - - - <_>2 5 7 6 -1. - <_>2 7 7 2 3. - 0 - -4.4478259951574728e-005 - 0.0965799465775490 - -0.1040342003107071 - <_> - - <_> - - - - <_>7 2 15 8 -1. - <_>7 4 15 4 2. - 0 - -0.1117222979664803 - -0.4223442077636719 - 4.9457307904958725e-003 - <_> - - <_> - - - - <_>3 1 14 8 -1. - <_>3 3 14 4 2. - 0 - 2.0429869182407856e-003 - 0.0994746983051300 - -0.1038454025983810 - <_> - - <_> - - - - <_>9 2 13 2 -1. - <_>9 3 13 1 2. - 0 - -7.2571309283375740e-003 - -0.1504963040351868 - 0.0297248400747776 - <_> - - <_> - - - - <_>8 3 6 8 -1. - <_>10 3 2 8 3. - 0 - -8.4451176226139069e-003 - 0.0956485792994499 - -0.1180536970496178 - <_> - - <_> - - - - <_>7 1 15 2 -1. - <_>7 2 15 1 2. - 0 - -0.0301949698477983 - 0.4657062888145447 - -0.0143868997693062 - <_> - - <_> - - - - <_>0 1 15 2 -1. - <_>0 2 15 1 2. - 0 - 5.7423918042331934e-004 - -0.1038231030106545 - 0.1505282968282700 - <_> - - <_> - - - - <_>6 0 12 3 -1. - <_>6 1 12 1 3. - 0 - 8.2014611689373851e-004 - -0.0751325264573097 - 0.1036375984549522 - <_> - - <_> - - - - <_>4 0 9 4 -1. - <_>7 0 3 4 3. - 0 - 7.0748180150985718e-003 - 0.0660621672868729 - -0.1763841956853867 - <_> - - <_> - - - - <_>12 3 8 3 -1. - <_>12 3 4 3 2. - 1 - 0.0483046695590019 - -0.0177676603198051 - 0.2682015895843506 - <_> - - <_> - - - - <_>8 12 6 4 -1. - <_>11 12 3 4 2. - 0 - 7.9041812568902969e-003 - 0.0515227392315865 - -0.2063236981630325 - <_> - - <_> - - - - <_>12 1 10 4 -1. - <_>12 1 5 4 2. - 0 - 0.0847054868936539 - 7.2250380180776119e-003 - -0.5951473712921143 - <_> - - <_> - - - - <_>0 1 10 4 -1. - <_>5 1 5 4 2. - 0 - 3.9120440487749875e-004 - -0.1066353023052216 - 0.1110381036996841 - <_> - - <_> - - - - <_>16 13 6 5 -1. - <_>16 13 3 5 2. - 0 - 0.0159593205899000 - -0.0485736913979054 - 0.2583200931549072 - <_> - - <_> - - - - <_>0 13 6 5 -1. - <_>3 13 3 5 2. - 0 - -1.8649259582161903e-003 - 0.1155126988887787 - -0.1504859030246735 - <_> - - <_> - - - - <_>18 11 4 7 -1. - <_>18 11 2 7 2. - 0 - 0.0127279795706272 - 0.0479302406311035 - -0.3031023144721985 - <_> - - <_> - - - - <_>0 11 4 7 -1. - <_>2 11 2 7 2. - 0 - -1.5954229747876525e-003 - -0.1553757041692734 - 0.0832148864865303 - <_> - - <_> - - - - <_>15 0 6 14 -1. - <_>17 0 2 14 3. - 0 - 0.2023489028215408 - 1.1625860352069139e-003 - -1.0000209808349609 - <_> - - <_> - - - - <_>1 0 6 14 -1. - <_>3 0 2 14 3. - 0 - -0.0391968712210655 - 0.3088454902172089 - -0.0445240214467049 - <_> - - <_> - - - - <_>13 0 4 14 -1. - <_>15 0 2 7 2. - <_>13 7 2 7 2. - 0 - 0.0158106405287981 - -0.0159273296594620 - 0.1014444977045059 - <_> - - <_> - - - - <_>5 0 4 14 -1. - <_>5 0 2 7 2. - <_>7 7 2 7 2. - 0 - -2.1568681113421917e-003 - 0.0952053815126419 - -0.1291096061468124 - <_> - - <_> - - - - <_>13 2 6 4 -1. - <_>13 2 3 4 2. - 0 - -0.0346043594181538 - 0.2784355878829956 - -0.0107750603929162 - <_> - - <_> - - - - <_>1 7 12 4 -1. - <_>1 7 6 2 2. - <_>7 9 6 2 2. - 0 - -2.6206790935248137e-003 - -0.1374453008174896 - 0.0929454565048218 - <_> - - <_> - - - - <_>4 13 18 3 -1. - <_>4 14 18 1 3. - 0 - 4.6692821197211742e-003 - -0.0583318211138248 - 0.1573383957147598 - <_> - - <_> - - - - <_>2 6 2 12 -1. - <_>2 12 2 6 2. - 0 - 0.0786235332489014 - 0.0111308302730322 - -0.9713814854621887 - <_> - - <_> - - - - <_>4 11 16 4 -1. - <_>12 11 8 2 2. - <_>4 13 8 2 2. - 0 - 0.0395567305386066 - 2.1708509884774685e-003 - -0.4342544972896576 - <_> - - <_> - - - - <_>2 11 16 4 -1. - <_>2 11 8 2 2. - <_>10 13 8 2 2. - 0 - 4.0571438148617744e-003 - 0.0861207172274590 - -0.1557939946651459 - <_> - - <_> - - - - <_>10 12 12 4 -1. - <_>16 12 6 2 2. - <_>10 14 6 2 2. - 0 - -0.0150146698579192 - 0.1352397948503494 - -0.0257240198552608 - <_> - - <_> - - - - <_>0 12 12 4 -1. - <_>0 12 6 2 2. - <_>6 14 6 2 2. - 0 - 4.6183250378817320e-004 - -0.1076688989996910 - 0.1363386958837509 - <_> - - <_> - - - - <_>12 12 10 6 -1. - <_>17 12 5 3 2. - <_>12 15 5 3 2. - 0 - 0.0528752095997334 - 5.4555749520659447e-003 - -0.3938291072845459 - <_> - - <_> - - - - <_>0 10 10 8 -1. - <_>0 10 5 4 2. - <_>5 14 5 4 2. - 0 - -0.0595108605921268 - 0.2869082093238831 - -0.0428760796785355 - <_> - - <_> - - - - <_>8 0 7 4 -1. - <_>8 2 7 2 2. - 0 - 0.0166503600776196 - 0.0286052990704775 - -0.3034949004650116 - <_> - - <_> - - - - <_>0 3 14 3 -1. - <_>0 4 14 1 3. - 0 - 0.0149596296250820 - -0.0526990294456482 - 0.2182525992393494 - <_> - - <_> - - - - <_>15 1 6 8 -1. - <_>18 1 3 4 2. - <_>15 5 3 4 2. - 0 - -9.6224267035722733e-003 - -0.2143145054578781 - 0.0483506284654140 - <_> - - <_> - - - - <_>2 3 7 4 -1. - <_>2 5 7 2 2. - 0 - -0.0453042611479759 - -0.8730847835540772 - 0.0124497702345252 - <_> - - <_> - - - - <_>13 2 6 4 -1. - <_>13 2 3 4 2. - 0 - -7.4465242214500904e-003 - -0.1358620971441269 - 0.0330873206257820 - <_> - - <_> - - - - <_>3 2 6 4 -1. - <_>6 2 3 4 2. - 0 - -1.1953880311921239e-003 - 0.1484857052564621 - -0.0852916464209557 - <_> - - <_> - - - - <_>5 1 16 4 -1. - <_>5 2 16 2 2. - 0 - 5.6622507981956005e-003 - -0.0532124489545822 - 0.1296795010566711 - <_> - - <_> - - - - <_>4 15 13 3 -1. - <_>4 16 13 1 3. - 0 - 0.0139713604003191 - 0.0253388304263353 - -0.4209741055965424 - <_> - - <_> - - - - <_>12 6 3 12 -1. - <_>13 6 1 12 3. - 0 - -4.5216218568384647e-003 - 0.1262152940034866 - -0.0631354302167892 - <_> - - <_> - - - - <_>0 16 16 2 -1. - <_>8 16 8 2 2. - 0 - 4.7776158899068832e-003 - -0.0628999173641205 - 0.1772444993257523 - <_> - - <_> - - - - <_>3 2 16 10 -1. - <_>3 7 16 5 2. - 0 - -5.8305878192186356e-003 - 0.0879060029983521 - -0.1555338054895401 - <_> - - <_> - - - - <_>7 1 12 4 -1. - <_>10 4 6 4 2. - 1 - -0.0158792808651924 - -0.1269443035125732 - 0.1028029993176460 - <_> - - <_> - - - - <_>14 1 2 9 -1. - <_>14 1 1 9 2. - 1 - 1.9526369869709015e-003 - -0.0768034532666206 - 0.0472977496683598 - <_> - - <_> - - - - <_>4 10 3 8 -1. - <_>4 14 3 4 2. - 0 - 0.0245216507464647 - -0.0277146808803082 - 0.4035046994686127 - <_> - - <_> - - - - <_>11 12 6 6 -1. - <_>11 14 6 2 3. - 0 - -0.0845293998718262 - 1. - -2.1367999725043774e-003 - <_> - - <_> - - - - <_>5 12 6 6 -1. - <_>5 14 6 2 3. - 0 - 1.6844070050865412e-003 - 0.0740434005856514 - -0.1633481979370117 - <_> - - <_> - - - - <_>12 6 3 12 -1. - <_>13 6 1 12 3. - 0 - 0.0133990598842502 - -0.0424531809985638 - 0.2416412979364395 - <_> - - <_> - - - - <_>10 6 8 3 -1. - <_>9 7 8 1 3. - 1 - 0.0441826395690441 - 0.0180395692586899 - -0.6439684033393860 - <_> - - <_> - - - - <_>12 6 3 12 -1. - <_>13 6 1 12 3. - 0 - 0.0383272394537926 - 7.5849238783121109e-003 - -0.3653421103954315 - <_> - - <_> - - - - <_>7 6 3 12 -1. - <_>8 6 1 12 3. - 0 - 2.5997089687734842e-003 - -0.0885534808039665 - 0.1376366019248962 - <_> - - <_> - - - - <_>14 1 2 9 -1. - <_>14 1 1 9 2. - 1 - 0.0107754804193974 - 0.0457531698048115 - -0.1195600032806397 - <_> - - <_> - - - - <_>11 4 10 3 -1. - <_>10 5 10 1 3. - 1 - -0.0204336494207382 - 0.2202017009258270 - -0.0519258417189121 - <_> - - <_> - - - - <_>8 11 9 4 -1. - <_>11 11 3 4 3. - 0 - -0.1240272969007492 - 0.8884658217430115 - -5.1234480924904346e-003 - <_> - - <_> - - - - <_>7 5 2 12 -1. - <_>8 5 1 12 2. - 0 - 4.7838478349149227e-003 - 0.0530470311641693 - -0.2108590006828308 - <_> - - <_> - - - - <_>13 1 3 16 -1. - <_>14 1 1 16 3. - 0 - -0.0458953492343426 - 0.4448269009590149 - -0.0151171199977398 - <_> - - <_> - - - - <_>7 4 6 6 -1. - <_>9 4 2 6 3. - 0 - 0.0144737903028727 - -0.0452014096081257 - 0.2355625033378601 - <_> - - <_> - - - - <_>10 4 2 12 -1. - <_>10 4 1 12 2. - 0 - 1.8887920305132866e-003 - 0.0764433816075325 - -0.1638537049293518 - <_> - - <_> - - - - <_>0 0 18 5 -1. - <_>9 0 9 5 2. - 0 - -0.1908206939697266 - 0.6466202139854431 - -0.0182426199316978 - <_> - - <_> - - - - <_>16 3 2 12 -1. - <_>16 3 1 12 2. - 1 - 0.0721584632992744 - 6.2836478464305401e-003 - -0.7482234835624695 - <_> - - <_> - - - - <_>6 3 12 2 -1. - <_>6 3 12 1 2. - 1 - 9.7802944947034121e-004 - 0.0790631026029587 - -0.1316365003585815 - <_> - - <_> - - - - <_>13 6 4 7 -1. - <_>14 7 2 7 2. - 1 - 4.8602250171825290e-004 - -0.0425949096679688 - 0.0694627612829208 - <_> - - <_> - - - - <_>7 3 13 2 -1. - <_>7 3 13 1 2. - 1 - -0.0108828004449606 - -0.2450307011604309 - 0.0523261614143848 - <_> - - <_> - - - - <_>5 14 17 4 -1. - <_>5 15 17 2 2. - 0 - 1.1573769734241068e-004 - -0.0667293071746826 - 0.0870889127254486 - <_> - - <_> - - - - <_>0 13 18 3 -1. - <_>0 14 18 1 3. - 0 - 2.0960739348083735e-003 - -0.0761545673012733 - 0.1359816938638687 - <_> - - <_> - - - - <_>6 13 14 3 -1. - <_>6 14 14 1 3. - 0 - 0.0436643511056900 - 8.4812156856060028e-003 - -0.8109716773033142 - <_> - - <_> - - - - <_>2 13 14 3 -1. - <_>2 14 14 1 3. - 0 - -1.1464370181784034e-003 - 0.1272123008966446 - -0.0847834199666977 - <_> - - <_> - - - - <_>5 13 12 2 -1. - <_>5 14 12 1 2. - 0 - -5.5613541044294834e-003 - -0.1972253024578095 - 0.0544110685586929 - <_> - - <_> - - - - <_>0 5 4 8 -1. - <_>0 9 4 4 2. - 0 - 0.0340838506817818 - -0.0323385484516621 - 0.3406228125095367 - <_> - - <_> - - - - <_>15 7 6 8 -1. - <_>18 7 3 4 2. - <_>15 11 3 4 2. - 0 - 0.0512270815670490 - -0.0132620399817824 - 0.2395363003015518 - <_> - - <_> - - - - <_>9 2 4 7 -1. - <_>11 2 2 7 2. - 0 - 0.0335317291319370 - 0.0202799197286367 - -0.4833905100822449 - <_> - - <_> - - - - <_>8 4 14 3 -1. - <_>8 5 14 1 3. - 0 - 0.0153962196782231 - -0.0293201897293329 - 0.1586609929800034 - <_> - - <_> - - - - <_>0 4 12 3 -1. - <_>0 5 12 1 3. - 0 - -0.0175507701933384 - 0.2748897075653076 - -0.0377983190119267 - <_> - - <_> - - - - <_>13 2 4 9 -1. - <_>13 5 4 3 3. - 0 - -0.0757056474685669 - -0.8221439719200134 - 3.8814740255475044e-003 - <_> - - <_> - - - - <_>5 2 4 9 -1. - <_>5 5 4 3 3. - 0 - -5.3475350141525269e-003 - -0.1671075969934464 - 0.0771806165575981 - <_> - - <_> - - - - <_>12 6 6 4 -1. - <_>12 8 6 2 2. - 0 - -3.3435279037803411e-003 - -0.1067349016666412 - 0.0475754700601101 - <_> - - <_> - - - - <_>5 5 12 3 -1. - <_>11 5 6 3 2. - 0 - 0.0193282701075077 - -0.0465632900595665 - 0.2471656054258347 - <_> - - <_> - - - - <_>7 1 8 12 -1. - <_>7 4 8 6 2. - 0 - 0.0853689834475517 - 0.0232969205826521 - -0.5000224709510803 - <_> - - <_> - - - - <_>9 3 6 7 -1. - <_>11 5 2 7 3. - 1 - 2.5927850510925055e-003 - -0.1118225008249283 - 0.1104608997702599 - <_> - - <_> - - - - <_>12 1 9 6 -1. - <_>10 3 9 2 3. - 1 - -9.1061238199472427e-003 - 0.0471070110797882 - -0.0558076612651348 - <_> - - <_> - - - - <_>11 7 8 3 -1. - <_>11 7 4 3 2. - 1 - 0.1017069965600967 - -0.0159666091203690 - 0.6985731720924377 - <_> - - <_> - - - - <_>14 1 2 9 -1. - <_>14 1 1 9 2. - 1 - 0.0228549800813198 - -0.0172262191772461 - 0.1222568973898888 - <_> - - <_> - - - - <_>1 7 6 8 -1. - <_>1 7 3 4 2. - <_>4 11 3 4 2. - 0 - -0.0165770798921585 - -0.2222582995891571 - 0.0565783008933067 - <_> - - <_> - - - - <_>11 0 4 6 -1. - <_>11 0 2 6 2. - 0 - -0.0236414205282927 - -0.2773405015468597 - 0.0160768907517195 - <_> - - <_> - - - - <_>7 0 4 6 -1. - <_>9 0 2 6 2. - 0 - 5.6385230273008347e-003 - 0.0454392805695534 - -0.2254963070154190 - <_> - - <_> - - - - <_>0 7 22 4 -1. - <_>11 7 11 2 2. - <_>0 9 11 2 2. - 0 - 5.7422029785811901e-003 - -0.0785687789320946 - 0.1523496061563492 - <_> - - <_> - - - - <_>3 5 4 8 -1. - <_>3 9 4 4 2. - 0 - -4.3363519944250584e-004 - 0.0959209501743317 - -0.1127424016594887 - <_> - - <_> - - - - <_>5 4 12 3 -1. - <_>9 4 4 3 3. - 0 - 0.0102679198607802 - -0.0493329912424088 - 0.2481082975864410 - <_> - - <_> - - - - <_>10 2 12 3 -1. - <_>10 2 6 3 2. - 1 - 0.0138657195493579 - 0.0705479383468628 - -0.1859433054924011 - -0.6582424044609070 - 23 - -1 - <_> - - - <_> - - <_> - - - - <_>5 2 6 16 -1. - <_>5 10 6 8 2. - 0 - -0.0469806306064129 - 0.1707855015993118 - -0.1568731069564819 - <_> - - <_> - - - - <_>12 6 8 4 -1. - <_>12 6 8 2 2. - 1 - -0.1196796000003815 - 0.5173841714859009 - -0.0117475902661681 - <_> - - <_> - - - - <_>3 12 6 6 -1. - <_>5 12 2 6 3. - 0 - -0.0284771807491779 - 0.2350520044565201 - -0.0574244111776352 - <_> - - <_> - - - - <_>12 1 3 12 -1. - <_>12 1 3 6 2. - 1 - 0.1969747990369797 - -9.3123828992247581e-004 - 1.0037239789962769 - <_> - - <_> - - - - <_>10 1 12 3 -1. - <_>10 1 6 3 2. - 1 - 7.9039083793759346e-003 - 0.0833574980497360 - -0.1652749925851822 - <_> - - <_> - - - - <_>4 8 16 4 -1. - <_>8 8 8 4 2. - 0 - 0.0393389798700809 - -6.5605872077867389e-004 - 0.3236146867275238 - <_> - - <_> - - - - <_>6 10 4 6 -1. - <_>8 10 2 6 2. - 0 - -1.5762429684400558e-003 - 0.0911294668912888 - -0.1416433006525040 - <_> - - <_> - - - - <_>7 14 9 4 -1. - <_>10 14 3 4 3. - 0 - 2.0851049339398742e-004 - -0.1380268037319183 - 0.0772129893302917 - <_> - - <_> - - - - <_>8 10 4 7 -1. - <_>10 10 2 7 2. - 0 - -2.6843539671972394e-004 - 0.1364672034978867 - -0.0942557528614998 - <_> - - <_> - - - - <_>12 12 4 6 -1. - <_>12 12 2 6 2. - 0 - 8.8506387546658516e-003 - 0.0246034208685160 - -0.1688468009233475 - <_> - - <_> - - - - <_>6 12 4 6 -1. - <_>8 12 2 6 2. - 0 - -8.4813922876492143e-004 - -0.1397240012884140 - 0.1156672984361649 - <_> - - <_> - - - - <_>9 12 4 6 -1. - <_>9 15 4 3 2. - 0 - -3.7090150726726279e-005 - 0.0752842724323273 - -0.1770814955234528 - <_> - - <_> - - - - <_>5 12 6 6 -1. - <_>7 12 2 6 3. - 0 - -0.0215339101850986 - 0.2023303061723709 - -0.0669784769415855 - <_> - - <_> - - - - <_>6 2 11 16 -1. - <_>6 6 11 8 2. - 0 - 0.0117136603221297 - 0.0868534892797470 - -0.1125181019306183 - <_> - - <_> - - - - <_>11 2 6 2 -1. - <_>11 2 6 1 2. - 1 - -9.8365638405084610e-003 - 0.3016479015350342 - -0.0501796603202820 - <_> - - <_> - - - - <_>10 1 6 8 -1. - <_>13 1 3 4 2. - <_>10 5 3 4 2. - 0 - -6.2104999087750912e-003 - 0.0682242289185524 - -0.0944418236613274 - <_> - - <_> - - - - <_>5 2 12 2 -1. - <_>11 2 6 2 2. - 0 - -0.0200343001633883 - -0.2865754961967468 - 0.0457285009324551 - <_> - - <_> - - - - <_>10 13 8 3 -1. - <_>10 13 4 3 2. - 0 - -2.2154829639475793e-004 - 0.0716037601232529 - -0.0871150493621826 - <_> - - <_> - - - - <_>5 0 12 6 -1. - <_>11 0 6 6 2. - 0 - -5.2436119876801968e-003 - 0.1343950033187866 - -0.0902889072895050 - <_> - - <_> - - - - <_>10 7 12 3 -1. - <_>10 8 12 1 3. - 0 - -0.0117112295702100 - 0.1487469971179962 - -0.0259517803788185 - <_> - - <_> - - - - <_>0 7 12 3 -1. - <_>0 8 12 1 3. - 0 - 5.8587929233908653e-003 - -0.0669820234179497 - 0.1809632927179337 - <_> - - <_> - - - - <_>20 0 2 18 -1. - <_>20 9 2 9 2. - 0 - 0.1043256968259811 - 0.0102093303576112 - -0.7954081296920776 - <_> - - <_> - - - - <_>0 0 2 18 -1. - <_>0 9 2 9 2. - 0 - -0.0170491300523281 - -0.2051631063222885 - 0.0644709914922714 - <_> - - <_> - - - - <_>14 6 6 12 -1. - <_>17 6 3 6 2. - <_>14 12 3 6 2. - 0 - 0.0258776992559433 - -0.0300797205418348 - 0.1604197025299072 - <_> - - <_> - - - - <_>1 5 6 10 -1. - <_>1 10 6 5 2. - 0 - -4.0637338533997536e-003 - 0.1087096035480499 - -0.1166540011763573 - <_> - - <_> - - - - <_>16 1 4 12 -1. - <_>16 5 4 4 3. - 0 - -0.0192867200821638 - -0.1250395029783249 - 0.0280551891773939 - <_> - - <_> - - - - <_>2 1 4 12 -1. - <_>2 5 4 4 3. - 0 - -7.2130301305151079e-006 - 0.1184526011347771 - -0.1236701980233192 - <_> - - <_> - - - - <_>3 12 16 4 -1. - <_>11 12 8 2 2. - <_>3 14 8 2 2. - 0 - -2.6098350062966347e-003 - -0.1449867039918900 - 0.0823187604546547 - <_> - - <_> - - - - <_>0 2 12 2 -1. - <_>0 3 12 1 2. - 0 - 3.2303779153153300e-004 - -0.0958554968237877 - 0.1199266016483307 - <_> - - <_> - - - - <_>6 2 13 3 -1. - <_>6 3 13 1 3. - 0 - -1.1308960383757949e-003 - 0.1288295984268189 - -0.0826974734663963 - <_> - - <_> - - - - <_>1 0 10 6 -1. - <_>1 0 5 3 2. - <_>6 3 5 3 2. - 0 - 0.0171764697879553 - 0.0360246598720551 - -0.3087381124496460 - <_> - - <_> - - - - <_>9 11 12 5 -1. - <_>13 11 4 5 3. - 0 - -0.0105153303593397 - 0.0963303372263908 - -0.1078578010201454 - <_> - - <_> - - - - <_>2 6 6 12 -1. - <_>2 6 3 6 2. - <_>5 12 3 6 2. - 0 - 0.0505835004150867 - -0.0347158014774323 - 0.4513450860977173 - <_> - - <_> - - - - <_>9 12 8 6 -1. - <_>13 12 4 3 2. - <_>9 15 4 3 2. - 0 - 8.7582931155338883e-004 - -0.0956771522760391 - 0.0736316889524460 - <_> - - <_> - - - - <_>1 7 6 8 -1. - <_>1 7 3 4 2. - <_>4 11 3 4 2. - 0 - -0.0319572202861309 - -0.3147349059581757 - 0.0363292805850506 - <_> - - <_> - - - - <_>14 6 3 8 -1. - <_>15 7 1 8 3. - 1 - 5.9863331262022257e-004 - -0.0426766909658909 - 0.0543428994715214 - <_> - - <_> - - - - <_>2 14 12 4 -1. - <_>6 14 4 4 3. - 0 - -6.6270949319005013e-003 - 0.0735109224915504 - -0.1730908006429672 - <_> - - <_> - - - - <_>14 4 2 11 -1. - <_>14 4 1 11 2. - 1 - -0.0731865167617798 - 0.6877769231796265 - -5.6781149469316006e-003 - <_> - - <_> - - - - <_>8 6 8 3 -1. - <_>7 7 8 1 3. - 1 - 0.0202908404171467 - -0.0407205410301685 - 0.3045086860656738 - <_> - - <_> - - - - <_>6 12 12 3 -1. - <_>6 13 12 1 3. - 0 - -3.0989840161055326e-003 - -0.1278737038373947 - 0.0543296895921230 - <_> - - <_> - - - - <_>2 3 18 3 -1. - <_>2 4 18 1 3. - 0 - -1.1258859885856509e-003 - 0.1198007985949516 - -0.0834772363305092 - <_> - - <_> - - - - <_>11 6 9 9 -1. - <_>14 6 3 9 3. - 0 - 3.9993048994801939e-004 - -0.0954270735383034 - 0.0769529119133949 - <_> - - <_> - - - - <_>3 13 11 4 -1. - <_>3 15 11 2 2. - 0 - 0.0112025402486324 - 0.0251253098249435 - -0.4031470119953156 - <_> - - <_> - - - - <_>17 5 4 6 -1. - <_>17 5 2 6 2. - 0 - -0.0217539705336094 - -0.2304240018129349 - 0.0153385195881128 - <_> - - <_> - - - - <_>1 5 4 6 -1. - <_>3 5 2 6 2. - 0 - 7.6912459917366505e-005 - -0.0955814868211746 - 0.1038817018270493 - <_> - - <_> - - - - <_>6 0 16 3 -1. - <_>10 0 8 3 2. - 0 - 0.0910115391016006 - -8.7168300524353981e-003 - 0.7559375166893005 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>9 6 1 12 3. - 0 - -4.3160789646208286e-003 - 0.1349443942308426 - -0.0701520964503288 - <_> - - <_> - - - - <_>14 2 2 8 -1. - <_>14 2 1 8 2. - 1 - -0.0505811907351017 - -0.6611269116401672 - 2.2676400840282440e-003 - <_> - - <_> - - - - <_>9 0 12 3 -1. - <_>9 0 6 3 2. - 1 - -8.3926003426313400e-003 - -0.1288360953330994 - 0.0779204815626144 - <_> - - <_> - - - - <_>6 0 16 3 -1. - <_>10 0 8 3 2. - 0 - 0.0550406612455845 - 7.7853789553046227e-003 - -0.2782005071640015 - <_> - - <_> - - - - <_>0 0 16 3 -1. - <_>4 0 8 3 2. - 0 - -0.0418625511229038 - 0.4333544969558716 - -0.0291946399956942 - <_> - - <_> - - - - <_>8 12 14 3 -1. - <_>8 13 14 1 3. - 0 - -7.4230520986020565e-003 - 0.1315450072288513 - -0.0320475101470947 - <_> - - <_> - - - - <_>8 4 11 2 -1. - <_>8 4 11 1 2. - 1 - 1.9948489498347044e-003 - 0.0832996889948845 - -0.1166255995631218 - <_> - - <_> - - - - <_>2 5 20 13 -1. - <_>2 5 10 13 2. - 0 - 0.0418514311313629 - 0.0414611697196960 - -0.1281515955924988 - <_> - - <_> - - - - <_>0 2 18 9 -1. - <_>6 5 6 3 9. - 0 - 0.2784438133239746 - -0.0226128101348877 - 0.5223631858825684 - <_> - - <_> - - - - <_>10 13 12 3 -1. - <_>10 14 12 1 3. - 0 - -7.1095931343734264e-003 - 0.1290251016616821 - -0.0279447995126247 - <_> - - <_> - - - - <_>8 11 6 7 -1. - <_>10 11 2 7 3. - 0 - 0.0111756101250649 - 0.0513666607439518 - -0.1955953985452652 - <_> - - <_> - - - - <_>5 6 12 11 -1. - <_>9 6 4 11 3. - 0 - -0.0103642102330923 - -0.0726313814520836 - 0.1519950926303864 - <_> - - <_> - - - - <_>3 6 6 6 -1. - <_>5 6 2 6 3. - 0 - -9.4094304367899895e-003 - -0.2099336981773377 - 0.0533468611538410 - <_> - - <_> - - - - <_>13 4 6 13 -1. - <_>15 4 2 13 3. - 0 - -0.1037501022219658 - -0.3369319140911102 - 3.9442018605768681e-003 - <_> - - <_> - - - - <_>3 4 6 13 -1. - <_>5 4 2 13 3. - 0 - -9.5977628370746970e-004 - 0.1030761003494263 - -0.1057410016655922 - <_> - - <_> - - - - <_>5 10 12 3 -1. - <_>9 10 4 3 3. - 0 - -0.0558168105781078 - 0.2607400119304657 - -0.0448851808905602 - <_> - - <_> - - - - <_>5 8 12 6 -1. - <_>8 8 6 6 2. - 0 - -0.1343093961477280 - -0.8166074752807617 - 0.0154108600690961 - <_> - - <_> - - - - <_>14 2 2 8 -1. - <_>14 2 1 8 2. - 1 - 0.0604569502174854 - -3.0265029054135084e-003 - -0.9999178051948547 - <_> - - <_> - - - - <_>8 2 8 2 -1. - <_>8 2 8 1 2. - 1 - 0.0243590790778399 - 0.0241913106292486 - -0.4663215875625610 - <_> - - <_> - - - - <_>8 6 9 5 -1. - <_>11 6 3 5 3. - 0 - 0.0527357794344425 - -0.0242667607963085 - 0.2146047949790955 - <_> - - <_> - - - - <_>0 3 14 4 -1. - <_>0 3 7 2 2. - <_>7 5 7 2 2. - 0 - -5.5626039393246174e-003 - 0.1087993979454041 - -0.1212090998888016 - <_> - - <_> - - - - <_>12 1 3 8 -1. - <_>13 2 1 8 3. - 1 - 0.0908552631735802 - 1.0956900223391131e-004 - -0.9997577071189880 - <_> - - <_> - - - - <_>10 1 8 3 -1. - <_>9 2 8 1 3. - 1 - -0.0346811898052692 - -0.4540998041629791 - 0.0236911494284868 - <_> - - <_> - - - - <_>14 3 6 6 -1. - <_>14 5 6 2 3. - 0 - -2.9579090551123954e-005 - 0.0480313189327717 - -0.0498729683458805 - <_> - - <_> - - - - <_>4 1 6 10 -1. - <_>4 1 3 5 2. - <_>7 6 3 5 2. - 0 - 0.0262771304696798 - -0.0294567607343197 - 0.3397437036037445 - <_> - - <_> - - - - <_>18 1 3 13 -1. - <_>19 1 1 13 3. - 0 - -0.0462760217487812 - 0.4549660980701447 - -0.0103595796972513 - <_> - - <_> - - - - <_>1 1 3 13 -1. - <_>2 1 1 13 3. - 0 - 1.2048200005665421e-004 - -0.1057519987225533 - 0.1009673029184341 - <_> - - <_> - - - - <_>11 1 2 8 -1. - <_>11 1 1 8 2. - 1 - 6.8154390901327133e-003 - 0.0284956097602844 - -0.0997650697827339 - <_> - - <_> - - - - <_>11 1 8 2 -1. - <_>11 1 8 1 2. - 1 - 1.6169620212167501e-003 - -0.1325616985559464 - 0.0878289788961411 - <_> - - <_> - - - - <_>8 4 6 6 -1. - <_>8 6 6 2 3. - 0 - 0.0145633798092604 - -0.0430799014866352 - 0.2511326074600220 - <_> - - <_> - - - - <_>5 4 7 6 -1. - <_>5 6 7 2 3. - 0 - 0.0203529093414545 - 0.0394636392593384 - -0.3251897096633911 - <_> - - <_> - - - - <_>9 11 13 3 -1. - <_>9 12 13 1 3. - 0 - -0.0207892693579197 - 0.1899335980415344 - -0.0212719999253750 - <_> - - <_> - - - - <_>0 11 13 3 -1. - <_>0 12 13 1 3. - 0 - 0.0317801013588905 - -0.0237682200968266 - 0.4395782947540283 - <_> - - <_> - - - - <_>12 10 9 8 -1. - <_>12 14 9 4 2. - 0 - 0.1245922967791557 - 6.5275398083031178e-003 - -0.9999179840087891 - <_> - - <_> - - - - <_>1 10 9 8 -1. - <_>1 14 9 4 2. - 0 - -0.0840070396661758 - -0.3562028110027313 - 0.0289165601134300 - <_> - - <_> - - - - <_>4 10 18 8 -1. - <_>13 10 9 4 2. - <_>4 14 9 4 2. - 0 - 9.6772145479917526e-003 - 0.0640739426016808 - -0.1548271030187607 - <_> - - <_> - - - - <_>0 10 18 8 -1. - <_>0 10 9 4 2. - <_>9 14 9 4 2. - 0 - 0.1040503978729248 - -0.0226520504802465 - 0.5762320756912231 - <_> - - <_> - - - - <_>12 2 4 12 -1. - <_>12 2 2 12 2. - 1 - 0.0408144108951092 - -0.0373685695230961 - 0.0772985070943832 - <_> - - <_> - - - - <_>0 5 20 13 -1. - <_>10 5 10 13 2. - 0 - -0.4691618978977203 - -0.7730463147163391 - 0.0136070800945163 - <_> - - <_> - - - - <_>10 6 9 6 -1. - <_>10 8 9 2 3. - 0 - -0.1372341960668564 - -1. - -1.7328710528090596e-003 - <_> - - <_> - - - - <_>3 6 9 6 -1. - <_>3 8 9 2 3. - 0 - 0.0375694483518600 - 0.0314127095043659 - -0.3551242947578430 - <_> - - <_> - - - - <_>7 4 15 8 -1. - <_>7 6 15 4 2. - 0 - -0.0126453796401620 - -0.0713228806853294 - 0.0418895483016968 - <_> - - <_> - - - - <_>9 2 12 2 -1. - <_>9 2 12 1 2. - 1 - 0.0399338603019714 - -0.0334470011293888 - 0.3593294024467468 - <_> - - <_> - - - - <_>12 6 6 4 -1. - <_>12 6 6 2 2. - 1 - 0.0172074399888515 - 0.0261265300214291 - -0.0776343792676926 - <_> - - <_> - - - - <_>7 0 13 3 -1. - <_>6 1 13 1 3. - 1 - 0.0597022287547588 - -0.0237179808318615 - 0.5732179880142212 - <_> - - <_> - - - - <_>3 0 18 2 -1. - <_>3 0 9 2 2. - 0 - 0.0799178034067154 - -9.7547564655542374e-003 - 0.4346744120121002 - <_> - - <_> - - - - <_>4 5 13 12 -1. - <_>4 9 13 4 3. - 0 - 0.1135172024369240 - -0.0389219708740711 - 0.2612080872058868 - <_> - - <_> - - - - <_>4 6 18 9 -1. - <_>10 9 6 3 9. - 0 - 0.4837945103645325 - 7.8452667221426964e-003 - -0.6502416133880615 - <_> - - <_> - - - - <_>8 5 6 11 -1. - <_>10 5 2 11 3. - 0 - -0.1004507020115852 - -0.8007202148437500 - 0.0122501999139786 - <_> - - <_> - - - - <_>6 2 16 16 -1. - <_>6 6 16 8 2. - 0 - 0.2717601954936981 - 4.4636582024395466e-003 - -0.6939312219619751 - <_> - - <_> - - - - <_>0 2 16 16 -1. - <_>0 6 16 8 2. - 0 - -0.1230124980211258 - 0.3248383998870850 - -0.0338415503501892 - <_> - - <_> - - - - <_>18 1 2 12 -1. - <_>18 7 2 6 2. - 0 - 0.0611887499690056 - 7.1536018513143063e-003 - -0.7781751751899719 - <_> - - <_> - - - - <_>2 1 2 12 -1. - <_>2 7 2 6 2. - 0 - -7.8828241676092148e-003 - -0.1975423991680145 - 0.0677954331040382 - <_> - - <_> - - - - <_>8 3 14 9 -1. - <_>8 6 14 3 3. - 0 - -0.2558487951755524 - -1. - 1.4300020411610603e-003 - <_> - - <_> - - - - <_>0 3 14 9 -1. - <_>0 6 14 3 3. - 0 - 0.1309846937656403 - -0.0166683103889227 - 0.7454720735549927 - <_> - - <_> - - - - <_>10 6 4 9 -1. - <_>10 9 4 3 3. - 0 - -0.0845530778169632 - -0.6342390179634094 - 8.3142798393964767e-003 - <_> - - <_> - - - - <_>0 6 3 12 -1. - <_>0 12 3 6 2. - 0 - -0.0882977172732353 - -0.8570597171783447 - 0.0105499401688576 - <_> - - <_> - - - - <_>16 2 6 9 -1. - <_>13 5 6 3 3. - 1 - -0.1037487983703613 - 0.1207318007946014 - -0.0224885791540146 - <_> - - <_> - - - - <_>10 0 12 4 -1. - <_>9 1 12 2 2. - 1 - 1.4872249448671937e-003 - -0.1109644025564194 - 0.1040541008114815 - <_> - - <_> - - - - <_>11 0 10 18 -1. - <_>16 0 5 9 2. - <_>11 9 5 9 2. - 0 - 0.2136403024196625 - 7.3841079138219357e-003 - -0.4976033866405487 - <_> - - <_> - - - - <_>1 0 10 18 -1. - <_>1 0 5 9 2. - <_>6 9 5 9 2. - 0 - 0.0262943096458912 - -0.0632127001881599 - 0.2628476023674011 - <_> - - <_> - - - - <_>7 12 14 3 -1. - <_>7 12 7 3 2. - 0 - -2.6777000166475773e-003 - 0.0564883500337601 - -0.1017431020736694 - <_> - - <_> - - - - <_>7 11 8 3 -1. - <_>11 11 4 3 2. - 0 - -2.1261540241539478e-003 - -0.1644288003444672 - 0.0661599636077881 - <_> - - <_> - - - - <_>2 13 18 4 -1. - <_>2 13 9 4 2. - 0 - -8.2200914621353149e-003 - -0.1613277941942215 - 0.0835154727101326 - <_> - - <_> - - - - <_>10 6 4 6 -1. - <_>10 6 2 6 2. - 1 - -0.0117018800228834 - 0.2151619940996170 - -0.0591160506010056 - <_> - - <_> - - - - <_>8 9 6 9 -1. - <_>10 9 2 9 3. - 0 - -7.0460740244016051e-004 - 0.0961422994732857 - -0.1300875991582871 - <_> - - <_> - - - - <_>3 11 13 3 -1. - <_>3 12 13 1 3. - 0 - -1.9671309273689985e-003 - 0.1260503977537155 - -0.0885426402091980 - <_> - - <_> - - - - <_>18 10 4 6 -1. - <_>18 10 2 6 2. - 0 - -9.5004076138138771e-003 - -0.2360457926988602 - 0.0459226295351982 - <_> - - <_> - - - - <_>5 5 9 5 -1. - <_>8 5 3 5 3. - 0 - 0.0268023703247309 - -0.0489667691290379 - 0.2388713061809540 - <_> - - <_> - - - - <_>13 0 2 14 -1. - <_>13 0 1 14 2. - 0 - 0.0221774205565453 - -0.0125605901703238 - 0.2708427011966705 - <_> - - <_> - - - - <_>2 0 18 7 -1. - <_>8 0 6 7 3. - 0 - 0.0933828800916672 - 0.0338358506560326 - -0.3970789015293121 - <_> - - <_> - - - - <_>13 4 6 8 -1. - <_>16 4 3 4 2. - <_>13 8 3 4 2. - 0 - -0.0131510803475976 - -0.1136426031589508 - 0.0259307399392128 - <_> - - <_> - - - - <_>3 4 6 8 -1. - <_>3 4 3 4 2. - <_>6 8 3 4 2. - 0 - 2.6929581072181463e-003 - 0.0682023465633392 - -0.1629091054201126 - <_> - - <_> - - - - <_>8 5 12 2 -1. - <_>8 6 12 1 2. - 0 - -5.7519129477441311e-003 - 0.1319772005081177 - -0.0577118992805481 - <_> - - <_> - - - - <_>7 0 3 12 -1. - <_>8 0 1 12 3. - 0 - -1.1071159970015287e-003 - 0.1455008983612061 - -0.0773000419139862 - <_> - - <_> - - - - <_>15 0 3 10 -1. - <_>16 1 1 10 3. - 1 - 0.0318051800131798 - 0.0141812795773149 - -0.2180342972278595 - <_> - - <_> - - - - <_>2 4 12 12 -1. - <_>6 8 4 4 9. - 0 - 0.4072949886322022 - -0.0137729402631521 - 0.7485334873199463 - <_> - - <_> - - - - <_>5 10 13 3 -1. - <_>5 11 13 1 3. - 0 - 0.0701730772852898 - 0.0115358103066683 - -0.8609462976455689 - <_> - - <_> - - - - <_>5 15 12 2 -1. - <_>5 16 12 1 2. - 0 - -1.9437450100667775e-004 - 0.0630099922418594 - -0.1511144042015076 - <_> - - <_> - - - - <_>17 8 5 6 -1. - <_>17 11 5 3 2. - 0 - 0.0394255593419075 - 0.0241153296083212 - -0.4725382030010223 - <_> - - <_> - - - - <_>5 12 6 6 -1. - <_>5 14 6 2 3. - 0 - 2.6128459721803665e-003 - 0.0539631508290768 - -0.1742976009845734 - -30.6205997467041020 - 24 - -1 - <_> - - - <_> - - <_> - - - - <_>10 6 4 7 -1. - <_>10 6 2 7 2. - 1 - 0.1046843007206917 - -0.0475701093673706 - 0.4245404899120331 - <_> - - <_> - - - - <_>12 3 4 10 -1. - <_>13 4 2 10 2. - 1 - -0.0429464206099510 - 0.1632889062166214 - -0.0126551697030663 - <_> - - <_> - - - - <_>10 3 10 4 -1. - <_>9 4 10 2 2. - 1 - -8.1577729433774948e-003 - 0.1023579984903336 - -0.1087663024663925 - <_> - - <_> - - - - <_>12 4 2 12 -1. - <_>12 4 1 12 2. - 1 - 2.1813691128045321e-003 - 0.0879852473735809 - -0.0558997616171837 - <_> - - <_> - - - - <_>1 11 15 3 -1. - <_>6 11 5 3 3. - 0 - -6.5157511271536350e-003 - 0.0828638523817062 - -0.1373631954193115 - <_> - - <_> - - - - <_>11 6 6 9 -1. - <_>13 6 2 9 3. - 0 - 0.0247165001928806 - 0.0167552102357149 - 0.1337125003337860 - <_> - - <_> - - - - <_>5 6 6 9 -1. - <_>7 6 2 9 3. - 0 - -5.9396267170086503e-004 - -0.1377137005329132 - 0.1050129011273384 - <_> - - <_> - - - - <_>8 5 6 6 -1. - <_>10 5 2 6 3. - 0 - 0.0293738208711147 - -0.0445813983678818 - 0.4273186028003693 - <_> - - <_> - - - - <_>1 2 6 8 -1. - <_>1 2 3 4 2. - <_>4 6 3 4 2. - 0 - -0.0165769197046757 - -0.2982746064662933 - 0.0297183692455292 - <_> - - <_> - - - - <_>14 0 4 9 -1. - <_>14 3 4 3 3. - 0 - 9.4569493085145950e-003 - 0.0536169484257698 - -0.0766755267977715 - <_> - - <_> - - - - <_>0 0 18 9 -1. - <_>0 3 18 3 3. - 0 - 0.0745819136500359 - -0.0465544089674950 - 0.3017961084842682 - <_> - - <_> - - - - <_>9 5 5 12 -1. - <_>9 8 5 6 2. - 0 - -0.0380556210875511 - -0.2825511991977692 - 0.0203556902706623 - <_> - - <_> - - - - <_>3 5 16 3 -1. - <_>3 6 16 1 3. - 0 - 0.0110655399039388 - -0.0539425984025002 - 0.2313262969255447 - <_> - - <_> - - - - <_>16 2 6 8 -1. - <_>19 2 3 4 2. - <_>16 6 3 4 2. - 0 - 0.0135382199659944 - 0.0281029809266329 - -0.2180289030075073 - <_> - - <_> - - - - <_>0 2 6 8 -1. - <_>0 2 3 4 2. - <_>3 6 3 4 2. - 0 - 4.6914750710129738e-003 - 0.0636170208454132 - -0.1746082007884979 - <_> - - <_> - - - - <_>5 2 12 16 -1. - <_>5 10 12 8 2. - 0 - 0.4305444061756134 - -0.0210623797029257 - 0.5719779729843140 - <_> - - <_> - - - - <_>5 11 8 6 -1. - <_>5 11 4 3 2. - <_>9 14 4 3 2. - 0 - 1.4298999449238181e-003 - -0.1678003966808319 - 0.0768510624766350 - <_> - - <_> - - - - <_>8 2 6 8 -1. - <_>11 2 3 4 2. - <_>8 6 3 4 2. - 0 - 0.0278552304953337 - -0.0356479696929455 - 0.2895691096782684 - <_> - - <_> - - - - <_>0 6 7 12 -1. - <_>0 10 7 4 3. - 0 - 0.0143916700035334 - 0.0833004266023636 - -0.1295132040977478 - <_> - - <_> - - - - <_>16 8 6 8 -1. - <_>16 10 6 4 2. - 0 - -0.0776373818516731 - -1. - 8.1426621181890368e-004 - <_> - - <_> - - - - <_>0 8 6 8 -1. - <_>0 10 6 4 2. - 0 - 0.0160511992871761 - -0.0540085881948471 - 0.2196779996156693 - <_> - - <_> - - - - <_>4 0 17 3 -1. - <_>4 1 17 1 3. - 0 - -0.0709887295961380 - 0.6160213947296143 - -0.0164764001965523 - <_> - - <_> - - - - <_>7 4 4 14 -1. - <_>8 4 2 14 2. - 0 - -0.0583109892904758 - -0.9595535993576050 - 0.0125171002000570 - <_> - - <_> - - - - <_>9 5 5 12 -1. - <_>9 8 5 6 2. - 0 - -7.9547446221113205e-003 - -0.0936840027570724 - 0.0338969603180885 - <_> - - <_> - - - - <_>10 4 10 4 -1. - <_>9 5 10 2 2. - 1 - -0.0496857985854149 - 0.3146679997444153 - -0.0297160502523184 - <_> - - <_> - - - - <_>13 1 3 13 -1. - <_>14 2 1 13 3. - 1 - 0.0977515280246735 - 7.5905729318037629e-004 - -0.6700987219810486 - <_> - - <_> - - - - <_>9 1 13 3 -1. - <_>8 2 13 1 3. - 1 - 0.0759088024497032 - 0.0160733293741941 - -0.6625136137008667 - <_> - - <_> - - - - <_>4 16 14 2 -1. - <_>4 17 14 1 2. - 0 - 1.3333460083231330e-003 - 0.0522413998842239 - -0.1880871057510376 - <_> - - <_> - - - - <_>0 16 15 2 -1. - <_>0 17 15 1 2. - 0 - 6.9728610105812550e-004 - -0.0890448018908501 - 0.1664233952760696 - <_> - - <_> - - - - <_>11 4 2 6 -1. - <_>11 4 1 6 2. - 1 - 0.0208895094692707 - 0.0213687196373940 - -0.1608344018459320 - <_> - - <_> - - - - <_>0 6 4 9 -1. - <_>0 9 4 3 3. - 0 - -1.7649700166657567e-003 - 0.1239852979779244 - -0.0859223976731300 - <_> - - <_> - - - - <_>14 0 7 6 -1. - <_>12 2 7 2 3. - 1 - 2.7779850643128157e-003 - -0.0443661510944366 - 0.0293225497007370 - <_> - - <_> - - - - <_>8 4 6 10 -1. - <_>8 4 3 5 2. - <_>11 9 3 5 2. - 0 - 7.9974532127380371e-004 - -0.1235152035951614 - 0.0888182967901230 - <_> - - <_> - - - - <_>7 7 8 10 -1. - <_>11 7 4 5 2. - <_>7 12 4 5 2. - 0 - 7.0215959567576647e-004 - -0.0801541805267334 - 0.1454429030418396 - <_> - - <_> - - - - <_>5 6 12 8 -1. - <_>5 6 6 4 2. - <_>11 10 6 4 2. - 0 - -0.0406044200062752 - -0.3604758083820343 - 0.0343148596584797 - <_> - - <_> - - - - <_>8 6 8 8 -1. - <_>12 6 4 4 2. - <_>8 10 4 4 2. - 0 - -0.0416868515312672 - -0.2092776000499725 - 8.5808392614126205e-003 - <_> - - <_> - - - - <_>6 6 8 8 -1. - <_>6 6 4 4 2. - <_>10 10 4 4 2. - 0 - -0.0463901981711388 - 0.5376852750778198 - -0.0226325001567602 - <_> - - <_> - - - - <_>12 4 6 6 -1. - <_>10 6 6 2 3. - 1 - -0.1582203060388565 - -1. - 1.4312319690361619e-003 - <_> - - <_> - - - - <_>5 7 10 8 -1. - <_>5 7 5 4 2. - <_>10 11 5 4 2. - 0 - -0.0756833702325821 - -0.8050302863121033 - 0.0128438398241997 - <_> - - <_> - - - - <_>4 5 18 3 -1. - <_>4 6 18 1 3. - 0 - -0.0578083284199238 - 0.3867568075656891 - -0.0126303201541305 - <_> - - <_> - - - - <_>3 16 15 2 -1. - <_>3 17 15 1 2. - 0 - -4.5112581574358046e-005 - 0.0749589875340462 - -0.1343374997377396 - <_> - - <_> - - - - <_>3 10 16 2 -1. - <_>3 11 16 1 2. - 0 - 0.0392054803669453 - 0.0219805799424648 - -0.4574862122535706 - <_> - - <_> - - - - <_>3 12 6 6 -1. - <_>5 12 2 6 3. - 0 - 0.0449452400207520 - -0.0237634591758251 - 0.4871528148651123 - <_> - - <_> - - - - <_>18 2 3 13 -1. - <_>19 2 1 13 3. - 0 - -0.0578491911292076 - 0.3556363880634308 - -6.2380530871450901e-003 - <_> - - <_> - - - - <_>4 10 12 4 -1. - <_>8 10 4 4 3. - 0 - -0.1039723977446556 - -0.6226279139518738 - 0.0150228803977370 - <_> - - <_> - - - - <_>7 7 14 7 -1. - <_>7 7 7 7 2. - 0 - -0.2523828148841858 - -0.5905948281288147 - -1.9238379900343716e-004 - <_> - - <_> - - - - <_>1 7 14 7 -1. - <_>8 7 7 7 2. - 0 - 0.1967588067054749 - 0.0126251596957445 - -0.7275320887565613 - <_> - - <_> - - - - <_>11 0 8 13 -1. - <_>11 0 4 13 2. - 0 - 0.0374124199151993 - -0.0234783403575420 - 0.1214763969182968 - <_> - - <_> - - - - <_>0 6 4 12 -1. - <_>0 6 2 6 2. - <_>2 12 2 6 2. - 0 - -8.0470675602555275e-003 - -0.1816778928041458 - 0.0497434996068478 - <_> - - <_> - - - - <_>14 2 2 12 -1. - <_>14 2 1 12 2. - 1 - 0.0412974916398525 - 0.0102590499445796 - -0.1467950046062470 - <_> - - <_> - - - - <_>2 2 8 12 -1. - <_>2 2 4 6 2. - <_>6 8 4 6 2. - 0 - -0.0507357306778431 - 0.2267964035272598 - -0.0498070493340492 - <_> - - <_> - - - - <_>17 0 4 16 -1. - <_>17 8 4 8 2. - 0 - -3.6145109334029257e-004 - 0.0417982786893845 - -0.0704108327627182 - <_> - - <_> - - - - <_>1 0 4 16 -1. - <_>1 8 4 8 2. - 0 - -0.1235945001244545 - 0.5828350186347961 - -0.0168224293738604 - <_> - - <_> - - - - <_>6 1 16 16 -1. - <_>6 9 16 8 2. - 0 - 0.0570716187357903 - -0.0405320711433887 - 0.1707827001810074 - <_> - - <_> - - - - <_>8 0 6 7 -1. - <_>10 2 2 7 3. - 1 - 5.8561540208756924e-003 - -0.1382790058851242 - 0.0825652331113815 - <_> - - <_> - - - - <_>15 1 6 6 -1. - <_>13 3 6 2 3. - 1 - -0.1147285029292107 - -0.4675404131412506 - 3.4348990302532911e-003 - <_> - - <_> - - - - <_>7 1 6 6 -1. - <_>9 3 2 6 3. - 1 - 0.0205186996608973 - 0.0815079435706139 - -0.1689410954713821 - <_> - - <_> - - - - <_>14 2 2 12 -1. - <_>14 2 1 12 2. - 1 - 0.0546297691762447 - -7.4763749726116657e-003 - 0.2364037930965424 - <_> - - <_> - - - - <_>5 11 12 6 -1. - <_>5 14 12 3 2. - 0 - -0.0693129673600197 - 0.3007157146930695 - -0.0347853004932404 - <_> - - <_> - - - - <_>5 13 12 4 -1. - <_>5 14 12 2 2. - 0 - -7.4176848866045475e-003 - -0.2876656055450440 - 0.0475318208336830 - <_> - - <_> - - - - <_>2 15 18 2 -1. - <_>2 16 18 1 2. - 0 - 0.0102232601493597 - -0.0308347996324301 - 0.3924953937530518 - <_> - - <_> - - - - <_>18 4 4 14 -1. - <_>20 4 2 7 2. - <_>18 11 2 7 2. - 0 - -0.0273466594517231 - -0.1569548994302750 - 0.0139675298705697 - <_> - - <_> - - - - <_>0 4 4 14 -1. - <_>0 4 2 7 2. - <_>2 11 2 7 2. - 0 - 0.0338751003146172 - 0.0260633099824190 - -0.3900640904903412 - <_> - - <_> - - - - <_>11 0 3 12 -1. - <_>12 0 1 12 3. - 0 - 0.0451747216284275 - 8.9199207723140717e-003 - -0.5676915049552918 - <_> - - <_> - - - - <_>9 3 4 6 -1. - <_>9 6 4 3 2. - 0 - 0.0114882299676538 - -0.0454914197325706 - 0.2510992884635925 - <_> - - <_> - - - - <_>7 4 15 10 -1. - <_>7 9 15 5 2. - 0 - -0.0104961497709155 - 0.0648954436182976 - -0.1062353998422623 - <_> - - <_> - - - - <_>4 2 9 12 -1. - <_>4 6 9 4 3. - 0 - 6.0881208628416061e-003 - 0.0809291824698448 - -0.1477614939212799 - <_> - - <_> - - - - <_>3 1 17 3 -1. - <_>3 2 17 1 3. - 0 - -2.6524660643190145e-003 - 0.1206251978874207 - -0.0726748630404472 - <_> - - <_> - - - - <_>0 1 16 3 -1. - <_>0 2 16 1 3. - 0 - 2.3559860419481993e-003 - -0.0818112716078758 - 0.1412654072046280 - <_> - - <_> - - - - <_>7 4 15 10 -1. - <_>7 9 15 5 2. - 0 - -0.2677721977233887 - -0.7808383107185364 - 4.4526048004627228e-003 - <_> - - <_> - - - - <_>0 4 15 10 -1. - <_>0 9 15 5 2. - 0 - 0.1596579998731613 - 0.0283816494047642 - -0.3896783888339996 - <_> - - <_> - - - - <_>15 0 6 18 -1. - <_>15 9 6 9 2. - 0 - 0.0518993698060513 - -0.0343053191900253 - 0.1592101007699966 - <_> - - <_> - - - - <_>3 14 12 4 -1. - <_>3 14 6 2 2. - <_>9 16 6 2 2. - 0 - -1.3652780326083302e-003 - -0.1375547945499420 - 0.0727199986577034 - <_> - - <_> - - - - <_>13 0 9 5 -1. - <_>16 3 3 5 3. - 1 - 0.2249729931354523 - -4.8017292283475399e-003 - 0.9999485015869141 - <_> - - <_> - - - - <_>9 7 9 2 -1. - <_>9 7 9 1 2. - 1 - 3.1434150878340006e-003 - 0.0551515705883503 - -0.1664316058158875 - <_> - - <_> - - - - <_>12 6 3 7 -1. - <_>13 7 1 7 3. - 1 - -6.2940339557826519e-003 - 0.0628960281610489 - -0.0604363791644573 - <_> - - <_> - - - - <_>3 4 8 8 -1. - <_>7 4 4 8 2. - 0 - 0.0513019114732742 - -0.0316718108952045 - 0.3853493928909302 - <_> - - <_> - - - - <_>7 8 12 3 -1. - <_>11 8 4 3 3. - 0 - -0.0669808089733124 - -0.1092590019106865 - 8.9958757162094116e-003 - <_> - - <_> - - - - <_>8 6 5 6 -1. - <_>8 6 5 3 2. - 1 - 0.0514647588133812 - 0.0262100193649530 - -0.4215933978557587 - <_> - - <_> - - - - <_>10 7 10 6 -1. - <_>10 10 10 3 2. - 0 - -0.0909821391105652 - 0.3276037871837616 - -7.8134387731552124e-003 - <_> - - <_> - - - - <_>0 9 16 3 -1. - <_>0 10 16 1 3. - 0 - 5.2848970517516136e-003 - -0.0793995708227158 - 0.1499817967414856 - <_> - - <_> - - - - <_>7 9 12 3 -1. - <_>7 10 12 1 3. - 0 - -1.5017699915915728e-003 - 0.0977031067013741 - -0.0735320374369621 - <_> - - <_> - - - - <_>2 10 8 6 -1. - <_>2 13 8 3 2. - 0 - -2.5415199343115091e-003 - 0.0678011327981949 - -0.1488324999809265 - <_> - - <_> - - - - <_>16 6 4 12 -1. - <_>16 9 4 6 2. - 0 - 0.0442528203129768 - 0.0164758302271366 - -0.2288018018007278 - <_> - - <_> - - - - <_>3 11 8 6 -1. - <_>3 11 4 3 2. - <_>7 14 4 3 2. - 0 - -0.0334571599960327 - 0.4196678996086121 - -0.0325535312294960 - <_> - - <_> - - - - <_>4 5 16 10 -1. - <_>12 5 8 5 2. - <_>4 10 8 5 2. - 0 - 0.1352989971637726 - 9.0894084423780441e-003 - -0.7383912205696106 - <_> - - <_> - - - - <_>7 10 3 8 -1. - <_>7 14 3 4 2. - 0 - -0.0374409705400467 - -0.4261302053928375 - 0.0239723902195692 - <_> - - <_> - - - - <_>9 14 6 4 -1. - <_>9 16 6 2 2. - 0 - -1.4479730452876538e-005 - 0.0567837804555893 - -0.1588882952928543 - <_> - - <_> - - - - <_>2 9 15 9 -1. - <_>2 12 15 3 3. - 0 - -0.1183928027749062 - 0.5050063133239746 - -0.0218596495687962 - <_> - - <_> - - - - <_>11 2 8 6 -1. - <_>15 2 4 3 2. - <_>11 5 4 3 2. - 0 - -8.5000684484839439e-003 - 0.0523399300873280 - -0.0459250211715698 - <_> - - <_> - - - - <_>4 11 8 6 -1. - <_>4 13 8 2 3. - 0 - -0.0141895096749067 - -0.2359706014394760 - 0.0403583496809006 - <_> - - <_> - - - - <_>16 0 2 14 -1. - <_>16 0 1 14 2. - 1 - 0.0735994204878807 - 3.2680039294064045e-003 - -0.5885360240936279 - <_> - - <_> - - - - <_>6 0 14 2 -1. - <_>6 0 14 1 2. - 1 - 0.0549712702631950 - -0.0201965197920799 - 0.5548272728919983 - <_> - - <_> - - - - <_>13 9 7 6 -1. - <_>13 11 7 2 3. - 0 - -0.0228161606937647 - -0.1758957952260971 - 0.0178517401218414 - <_> - - <_> - - - - <_>10 6 7 3 -1. - <_>9 7 7 1 3. - 1 - 2.3204670287668705e-003 - -0.0817499235272408 - 0.1283307969570160 - <_> - - <_> - - - - <_>18 2 3 13 -1. - <_>19 2 1 13 3. - 0 - -0.1079790964722633 - -1. - 1.7423679819330573e-003 - <_> - - <_> - - - - <_>1 2 3 13 -1. - <_>2 2 1 13 3. - 0 - -0.0411119312047958 - 0.5843269824981690 - -0.0188788697123528 - <_> - - <_> - - - - <_>5 1 12 4 -1. - <_>11 1 6 2 2. - <_>5 3 6 2 2. - 0 - -3.5695650149136782e-003 - -0.1755847036838532 - 0.0647314265370369 - <_> - - <_> - - - - <_>7 8 6 6 -1. - <_>7 10 6 2 3. - 0 - -0.0663586705923080 - -1. - 9.2067662626504898e-003 - <_> - - <_> - - - - <_>8 13 14 3 -1. - <_>8 14 14 1 3. - 0 - -0.0189445801079273 - 0.2578308880329132 - -0.0189449395984411 - <_> - - <_> - - - - <_>10 5 6 6 -1. - <_>12 7 2 6 3. - 1 - -0.1287126988172531 - -0.5847725868225098 - 0.0144664896652102 - <_> - - <_> - - - - <_>15 6 4 8 -1. - <_>16 7 2 8 2. - 1 - 2.4218629114329815e-003 - -0.0735908970236778 - 0.0703321024775505 - <_> - - <_> - - - - <_>0 13 14 4 -1. - <_>0 13 7 2 2. - <_>7 15 7 2 2. - 0 - 0.0297184605151415 - -0.0230119694024324 - 0.4054276943206787 - <_> - - <_> - - - - <_>1 7 21 6 -1. - <_>8 9 7 2 9. - 0 - 0.1755502969026566 - 0.0208087302744389 - -0.3728564977645874 - <_> - - <_> - - - - <_>7 4 6 8 -1. - <_>7 4 3 4 2. - <_>10 8 3 4 2. - 0 - 0.0371224507689476 - -0.0279596298933029 - 0.3590877950191498 - <_> - - <_> - - - - <_>7 4 8 8 -1. - <_>11 4 4 4 2. - <_>7 8 4 4 2. - 0 - -3.8044541142880917e-003 - -0.1333799064159393 - 0.0920613482594490 - <_> - - <_> - - - - <_>10 6 7 4 -1. - <_>9 7 7 2 2. - 1 - -0.0109307002276182 - 0.2319630980491638 - -0.0445358790457249 - <_> - - <_> - - - - <_>11 2 6 7 -1. - <_>11 2 3 7 2. - 1 - 0.1610362976789475 - -8.7691349908709526e-003 - 0.2204516977071762 - <_> - - <_> - - - - <_>11 2 7 6 -1. - <_>11 2 7 3 2. - 1 - 0.0259712301194668 - 0.0644210129976273 - -0.1891908049583435 - <_> - - <_> - - - - <_>11 4 8 6 -1. - <_>11 4 4 6 2. - 1 - 0.1263820976018906 - -0.0103621799498796 - 0.1705718934535980 - <_> - - <_> - - - - <_>11 4 6 8 -1. - <_>11 4 6 4 2. - 1 - -9.1393403708934784e-003 - -0.1382824927568436 - 0.0867900624871254 - <_> - - <_> - - - - <_>12 3 8 5 -1. - <_>12 3 4 5 2. - 1 - 0.0177220907062292 - 0.0397198908030987 - -0.1229425966739655 - <_> - - <_> - - - - <_>10 3 5 8 -1. - <_>10 3 5 4 2. - 1 - -0.0824257507920265 - 0.3002310097217560 - -0.0331659205257893 - <_> - - <_> - - - - <_>13 0 9 5 -1. - <_>16 3 3 5 3. - 1 - 0.0438925288617611 - -0.0130563396960497 - 0.0987286865711212 - <_> - - <_> - - - - <_>2 6 10 12 -1. - <_>2 9 10 6 2. - 0 - 3.5575369838625193e-003 - 0.1118628010153770 - -0.0927978232502937 - <_> - - <_> - - - - <_>15 6 5 12 -1. - <_>15 9 5 6 2. - 0 - -0.0152988201007247 - -0.1300787925720215 - 0.0231590103358030 - <_> - - <_> - - - - <_>3 7 13 3 -1. - <_>3 8 13 1 3. - 0 - -2.6504450943320990e-003 - 0.1352628022432327 - -0.0733554586768150 - <_> - - <_> - - - - <_>4 7 17 3 -1. - <_>4 8 17 1 3. - 0 - 0.0416368618607521 - -0.0190689805895090 - 0.3585799932479858 - <_> - - <_> - - - - <_>2 9 7 6 -1. - <_>2 11 7 2 3. - 0 - -7.5290258973836899e-003 - -0.1867236047983170 - 0.0582484491169453 - <_> - - <_> - - - - <_>13 9 9 4 -1. - <_>13 11 9 2 2. - 0 - -0.0400314889848232 - 0.2296977937221527 - -0.0146082304418087 - <_> - - <_> - - - - <_>9 0 5 9 -1. - <_>6 3 5 3 3. - 1 - -0.1362470984458923 - -0.8708646297454834 - 0.0112111996859312 - <_> - - <_> - - - - <_>9 3 8 3 -1. - <_>9 3 4 3 2. - 0 - 4.5124008320271969e-003 - -0.0356449596583843 - 0.1010309979319572 - <_> - - <_> - - - - <_>3 0 4 13 -1. - <_>4 0 2 13 2. - 0 - 0.0541180707514286 - -0.0146894101053476 - 0.6765226721763611 - <_> - - <_> - - - - <_>13 0 8 6 -1. - <_>15 0 4 6 2. - 0 - -0.0345539599657059 - 0.2185456007719040 - -9.7846649587154388e-003 - <_> - - <_> - - - - <_>3 0 6 5 -1. - <_>6 0 3 5 2. - 0 - -0.0255208406597376 - -0.4689800143241882 - 0.0240603704005480 - <_> - - <_> - - - - <_>9 0 12 5 -1. - <_>9 0 6 5 2. - 0 - -0.0354737006127834 - 0.1342754960060120 - -0.0214386992156506 - <_> - - <_> - - - - <_>1 2 6 8 -1. - <_>3 2 2 8 3. - 0 - 2.8683411073870957e-004 - -0.0973002836108208 - 0.1076093986630440 - <_> - - <_> - - - - <_>18 2 4 6 -1. - <_>18 2 2 6 2. - 0 - -0.0787175893783569 - -1. - 2.7187850791960955e-003 - <_> - - <_> - - - - <_>0 2 4 6 -1. - <_>2 2 2 6 2. - 0 - -1.5701749362051487e-004 - 0.1119965985417366 - -0.0994413793087006 - <_> - - <_> - - - - <_>16 9 6 6 -1. - <_>16 11 6 2 3. - 0 - 0.0160265695303679 - 0.0341982617974281 - -0.1910049021244049 - <_> - - <_> - - - - <_>10 0 12 6 -1. - <_>13 3 6 6 2. - 1 - -0.0191647298634052 - 0.0890248268842697 - -0.1191970035433769 - <_> - - <_> - - - - <_>14 2 3 12 -1. - <_>10 6 3 4 3. - 1 - -0.0394451506435871 - -0.1071799024939537 - 0.0376152098178864 - <_> - - <_> - - - - <_>8 3 6 7 -1. - <_>11 3 3 7 2. - 0 - 2.2417430300265551e-003 - -0.0905810073018074 - 0.1754747033119202 - <_> - - <_> - - - - <_>16 1 3 15 -1. - <_>17 1 1 15 3. - 0 - -3.8842540234327316e-003 - 0.0926973298192024 - -0.0424313694238663 - <_> - - <_> - - - - <_>0 1 6 8 -1. - <_>2 1 2 8 3. - 0 - -0.0219146292656660 - -0.2801750898361206 - 0.0375376716256142 - <_> - - <_> - - - - <_>13 0 3 14 -1. - <_>14 0 1 14 3. - 0 - -0.0375121198594570 - 0.3621852099895477 - -0.0175074506551027 - <_> - - <_> - - - - <_>6 0 3 14 -1. - <_>7 0 1 14 3. - 0 - -8.4374047582969069e-004 - 0.1234840005636215 - -0.0802458673715591 - <_> - - <_> - - - - <_>4 13 18 2 -1. - <_>4 13 9 2 2. - 0 - -2.6424999814480543e-003 - 0.0525657385587692 - -0.0833354368805885 - <_> - - <_> - - - - <_>2 9 15 3 -1. - <_>7 9 5 3 3. - 0 - -0.0928368121385574 - -0.4206038117408752 - 0.0233604293316603 - <_> - - <_> - - - - <_>9 5 10 6 -1. - <_>14 5 5 3 2. - <_>9 8 5 3 2. - 0 - 0.0824630707502365 - -2.9815400484949350e-003 - 0.7899919748306274 - <_> - - <_> - - - - <_>3 5 10 6 -1. - <_>3 5 5 3 2. - <_>8 8 5 3 2. - 0 - -0.0698649510741234 - 0.7380297183990479 - -0.0140212997794151 - <_> - - <_> - - - - <_>14 3 2 12 -1. - <_>14 3 1 12 2. - 1 - 0.0454393401741982 - -0.0113211600109935 - 0.1997369974851608 - <_> - - <_> - - - - <_>8 3 12 2 -1. - <_>8 3 12 1 2. - 1 - -0.0502977892756462 - 0.6076467037200928 - -0.0176328904926777 - <_> - - <_> - - - - <_>12 7 6 6 -1. - <_>14 7 2 6 3. - 0 - 0.0604561492800713 - -5.9354598633944988e-003 - 0.3162288963794708 - <_> - - <_> - - - - <_>4 7 6 6 -1. - <_>6 7 2 6 3. - 0 - -4.6769347973167896e-003 - -0.1809061020612717 - 0.0596601888537407 - <_> - - <_> - - - - <_>7 0 8 3 -1. - <_>7 0 4 3 2. - 0 - 3.6530068609863520e-004 - -0.0912200435996056 - 0.1109272986650467 - <_> - - <_> - - - - <_>9 0 4 6 -1. - <_>11 0 2 6 2. - 0 - -0.0194912608712912 - -0.3707557022571564 - 0.0284163095057011 - <_> - - <_> - - - - <_>10 0 12 12 -1. - <_>13 0 6 12 2. - 0 - 0.0200564507395029 - -0.0581596791744232 - 0.0781052336096764 - <_> - - <_> - - - - <_>0 0 12 12 -1. - <_>3 0 6 12 2. - 0 - -0.0393711812794209 - 0.2901248931884766 - -0.0418756604194641 - <_> - - <_> - - - - <_>16 5 6 4 -1. - <_>16 5 3 4 2. - 0 - 0.0215236507356167 - 0.0165730807930231 - -0.2361485064029694 - <_> - - <_> - - - - <_>0 5 6 4 -1. - <_>3 5 3 4 2. - 0 - -3.1294699292629957e-003 - -0.1646640002727509 - 0.0622338093817234 - <_> - - <_> - - - - <_>9 0 12 5 -1. - <_>9 0 6 5 2. - 0 - 2.8589619323611259e-003 - -0.0380984097719193 - 0.0557516291737556 - -30.6916007995605470 - 25 - -1 - <_> - - - <_> - - <_> - - - - <_>1 8 8 10 -1. - <_>1 8 4 5 2. - <_>5 13 4 5 2. - 0 - -0.0205761305987835 - 0.1735112965106964 - -0.1505803018808365 - <_> - - <_> - - - - <_>8 16 14 2 -1. - <_>8 16 7 2 2. - 0 - 0.0161259490996599 - -0.0416123718023300 - 0.2398445010185242 - <_> - - <_> - - - - <_>0 11 16 3 -1. - <_>8 11 8 3 2. - 0 - -0.0123525802046061 - 0.0977808535099030 - -0.1239183023571968 - <_> - - <_> - - - - <_>10 16 12 2 -1. - <_>10 16 6 2 2. - 0 - -5.7473899796605110e-003 - 0.0776152089238167 - -0.0962367281317711 - <_> - - <_> - - - - <_>0 16 12 2 -1. - <_>6 16 6 2 2. - 0 - 2.9579061083495617e-003 - -0.0676837190985680 - 0.2659420967102051 - <_> - - <_> - - - - <_>3 11 18 6 -1. - <_>12 11 9 3 2. - <_>3 14 9 3 2. - 0 - -8.3472225815057755e-003 - -0.1118817999958992 - 0.1373637020587921 - <_> - - <_> - - - - <_>7 13 6 4 -1. - <_>7 15 6 2 2. - 0 - -5.8408780023455620e-004 - 0.0459431111812592 - -0.1648653000593185 - <_> - - <_> - - - - <_>10 11 6 6 -1. - <_>10 13 6 2 3. - 0 - -3.5136839142069221e-004 - 0.0977910086512566 - -0.0643578618764877 - <_> - - <_> - - - - <_>6 14 9 4 -1. - <_>9 14 3 4 3. - 0 - 8.4126877482049167e-005 - -0.1384762972593308 - 0.0887277424335480 - <_> - - <_> - - - - <_>5 4 16 10 -1. - <_>5 9 16 5 2. - 0 - -0.2659249007701874 - -0.6752539873123169 - 0.0161886699497700 - <_> - - <_> - - - - <_>11 7 3 8 -1. - <_>11 7 3 4 2. - 1 - 4.3727741576731205e-003 - 0.0728847980499268 - -0.1256036013364792 - <_> - - <_> - - - - <_>13 10 6 6 -1. - <_>13 12 6 2 3. - 0 - -2.2660531103610992e-003 - 0.0872692465782166 - -0.0683554336428642 - <_> - - <_> - - - - <_>0 6 22 12 -1. - <_>0 6 11 6 2. - <_>11 12 11 6 2. - 0 - -6.5290732309222221e-003 - -0.1219756007194519 - 0.0809279307723045 - <_> - - <_> - - - - <_>9 5 6 12 -1. - <_>12 5 3 6 2. - <_>9 11 3 6 2. - 0 - 0.0964362472295761 - -8.2637304440140724e-003 - 0.4912739992141724 - <_> - - <_> - - - - <_>7 5 6 12 -1. - <_>7 5 3 6 2. - <_>10 11 3 6 2. - 0 - -0.0435948185622692 - 0.4557530879974365 - -0.0256003905087709 - <_> - - <_> - - - - <_>14 1 6 9 -1. - <_>14 4 6 3 3. - 0 - -0.0210983194410801 - -0.1189275011420250 - 0.0235395897179842 - <_> - - <_> - - - - <_>2 1 6 9 -1. - <_>2 4 6 3 3. - 0 - -2.5200019590556622e-003 - 0.1272446960210800 - -0.0907517224550247 - <_> - - <_> - - - - <_>13 4 4 6 -1. - <_>13 7 4 3 2. - 0 - -8.9241685345768929e-003 - -0.1151432022452354 - 0.0434970296919346 - <_> - - <_> - - - - <_>5 4 4 6 -1. - <_>5 7 4 3 2. - 0 - 3.4590170253068209e-003 - 0.0635371729731560 - -0.1826142966747284 - <_> - - <_> - - - - <_>10 13 12 3 -1. - <_>10 14 12 1 3. - 0 - -3.6076800897717476e-003 - 0.1200591027736664 - -0.0524491108953953 - <_> - - <_> - - - - <_>3 3 15 3 -1. - <_>3 4 15 1 3. - 0 - 0.0537788905203342 - -0.0186757892370224 - 0.5231301784515381 - <_> - - <_> - - - - <_>13 5 2 9 -1. - <_>13 5 1 9 2. - 1 - 0.0452451892197132 - -0.0175049193203449 - 0.2187184989452362 - <_> - - <_> - - - - <_>9 5 9 2 -1. - <_>9 5 9 1 2. - 1 - 1.3272929936647415e-003 - 0.0786599591374397 - -0.1355167031288147 - <_> - - <_> - - - - <_>6 2 14 10 -1. - <_>6 2 7 10 2. - 0 - 0.0123936403542757 - 0.0289523005485535 - -0.0721495375037193 - <_> - - <_> - - - - <_>8 2 12 2 -1. - <_>8 2 12 1 2. - 1 - -0.0377027802169323 - 0.4185005128383637 - -0.0303553491830826 - <_> - - <_> - - - - <_>17 0 2 13 -1. - <_>17 0 1 13 2. - 1 - -0.0489104092121124 - 0.3736500144004822 - -5.6771109811961651e-003 - <_> - - <_> - - - - <_>5 0 13 2 -1. - <_>5 0 13 1 2. - 1 - -5.9961699880659580e-003 - -0.2075642049312592 - 0.0704388469457626 - <_> - - <_> - - - - <_>12 4 3 10 -1. - <_>12 4 3 5 2. - 1 - 0.0566319301724434 - -0.0172929391264915 - 0.2549839913845062 - <_> - - <_> - - - - <_>0 6 12 3 -1. - <_>0 7 12 1 3. - 0 - 0.0316502302885056 - -0.0206582508981228 - 0.4839827120304108 - <_> - - <_> - - - - <_>6 6 15 3 -1. - <_>6 7 15 1 3. - 0 - -0.0211529899388552 - 0.2002878934144974 - -0.0248726103454828 - <_> - - <_> - - - - <_>8 8 5 9 -1. - <_>8 11 5 3 3. - 0 - 0.0876765325665474 - -0.0249997004866600 - 0.4112659990787506 - <_> - - <_> - - - - <_>10 11 7 6 -1. - <_>10 13 7 2 3. - 0 - 0.0532998815178871 - -8.6766229942440987e-003 - 0.3744659125804901 - <_> - - <_> - - - - <_>5 11 7 6 -1. - <_>5 13 7 2 3. - 0 - -2.6251509552821517e-004 - 0.0992318466305733 - -0.1198920011520386 - <_> - - <_> - - - - <_>5 12 13 4 -1. - <_>5 13 13 2 2. - 0 - -8.5897604003548622e-003 - -0.1859301030635834 - 0.0343707799911499 - <_> - - <_> - - - - <_>9 4 4 6 -1. - <_>9 7 4 3 2. - 0 - 0.0169404707849026 - -0.0347682610154152 - 0.2728826105594635 - <_> - - <_> - - - - <_>13 1 2 9 -1. - <_>13 1 1 9 2. - 1 - 0.0505961105227470 - 3.6170349922031164e-003 - -0.3946076035499573 - <_> - - <_> - - - - <_>5 2 8 6 -1. - <_>5 2 4 3 2. - <_>9 5 4 3 2. - 0 - -8.3048436790704727e-003 - 0.0985777974128723 - -0.1166628003120422 - <_> - - <_> - - - - <_>11 0 4 8 -1. - <_>12 1 2 8 2. - 1 - 0.0105862701311708 - 0.0391171500086784 - -0.0858436673879623 - <_> - - <_> - - - - <_>11 0 8 4 -1. - <_>10 1 8 2 2. - 1 - -0.0325586013495922 - -0.3735215067863464 - 0.0254101008176804 - <_> - - <_> - - - - <_>7 9 15 3 -1. - <_>7 10 15 1 3. - 0 - -0.0323521308600903 - 0.2612997889518738 - -0.0286310408264399 - <_> - - <_> - - - - <_>5 10 12 3 -1. - <_>5 11 12 1 3. - 0 - 0.0255470499396324 - 0.0338848903775215 - -0.3045232892036438 - <_> - - <_> - - - - <_>15 2 7 6 -1. - <_>15 4 7 2 3. - 0 - 0.0422524400055408 - 8.9510334655642509e-003 - -0.2409126013517380 - <_> - - <_> - - - - <_>0 2 7 6 -1. - <_>0 4 7 2 3. - 0 - 3.8109479937702417e-003 - -0.0726389363408089 - 0.1463439017534256 - <_> - - <_> - - - - <_>12 3 2 7 -1. - <_>12 3 1 7 2. - 1 - 0.0208217091858387 - -0.0362719409167767 - 0.1832471936941147 - <_> - - <_> - - - - <_>10 3 7 2 -1. - <_>10 3 7 1 2. - 1 - 0.0264977905899286 - 0.0281601101160049 - -0.3951719999313355 - <_> - - <_> - - - - <_>2 3 20 14 -1. - <_>12 3 10 7 2. - <_>2 10 10 7 2. - 0 - 0.2028353065252304 - -9.3782292678952217e-003 - 0.4486894905567169 - <_> - - <_> - - - - <_>5 2 12 8 -1. - <_>11 2 6 8 2. - 0 - -0.1799661070108414 - -0.7959595918655396 - 0.0120278401300311 - <_> - - <_> - - - - <_>18 4 4 8 -1. - <_>18 8 4 4 2. - 0 - -0.0709680914878845 - -0.7695127725601196 - 1.0918079642578959e-003 - <_> - - <_> - - - - <_>6 4 6 8 -1. - <_>6 4 3 4 2. - <_>9 8 3 4 2. - 0 - 2.7555041015148163e-003 - 0.0701502636075020 - -0.1291518062353134 - <_> - - <_> - - - - <_>12 2 4 6 -1. - <_>12 2 2 6 2. - 1 - -0.0770044028759003 - -0.4915507137775421 - 2.8067480307072401e-003 - <_> - - <_> - - - - <_>10 2 6 4 -1. - <_>10 2 6 2 2. - 1 - -0.0202579107135534 - 0.2356823980808258 - -0.0434327982366085 - <_> - - <_> - - - - <_>9 3 8 15 -1. - <_>11 3 4 15 2. - 0 - -0.0864218175411224 - -0.3454168140888214 - 0.0112488502636552 - <_> - - <_> - - - - <_>1 11 8 7 -1. - <_>3 11 4 7 2. - 0 - -0.0672459527850151 - -0.6875290274620056 - 0.0118686696514487 - <_> - - <_> - - - - <_>13 7 6 10 -1. - <_>15 7 2 10 3. - 0 - -0.1299038976430893 - -0.7906926870346069 - 2.5537670589983463e-003 - <_> - - <_> - - - - <_>2 3 10 14 -1. - <_>7 3 5 14 2. - 0 - -0.3039467036724091 - -0.8998935222625732 - 8.1501724198460579e-003 - <_> - - <_> - - - - <_>6 5 15 12 -1. - <_>11 5 5 12 3. - 0 - -0.4198854863643646 - -0.7730332016944885 - 1.3665149454027414e-003 - <_> - - <_> - - - - <_>1 5 15 12 -1. - <_>6 5 5 12 3. - 0 - -0.1685128957033157 - 0.2431939989328384 - -0.0412807390093803 - <_> - - <_> - - - - <_>9 14 8 4 -1. - <_>9 16 8 2 2. - 0 - 2.8788880445063114e-003 - 0.0205771699547768 - -0.1859090030193329 - <_> - - <_> - - - - <_>9 6 4 10 -1. - <_>11 6 2 10 2. - 0 - -0.0402238406240940 - 0.4309926927089691 - -0.0231047105044127 - <_> - - <_> - - - - <_>8 6 10 4 -1. - <_>8 8 10 2 2. - 0 - 3.9687040261924267e-003 - 0.0436015203595161 - -0.0922335684299469 - <_> - - <_> - - - - <_>2 14 7 4 -1. - <_>2 16 7 2 2. - 0 - -0.0276507195085287 - -0.6170787215232849 - 0.0146805699914694 - <_> - - <_> - - - - <_>7 9 15 3 -1. - <_>7 10 15 1 3. - 0 - -2.3034301120787859e-003 - 0.0903495922684669 - -0.0616645514965057 - <_> - - <_> - - - - <_>0 10 16 4 -1. - <_>0 10 8 2 2. - <_>8 12 8 2 2. - 0 - -0.0290407892316580 - 0.2773793935775757 - -0.0392188690602779 - <_> - - <_> - - - - <_>10 11 6 7 -1. - <_>12 11 2 7 3. - 0 - 0.0132882604375482 - 0.0311382599174976 - -0.1355874985456467 - <_> - - <_> - - - - <_>8 13 6 5 -1. - <_>11 13 3 5 2. - 0 - 3.3968928619287908e-005 - -0.1356292963027954 - 0.0764675810933113 - <_> - - <_> - - - - <_>10 11 6 7 -1. - <_>12 11 2 7 3. - 0 - -6.8583860993385315e-003 - -0.1036581024527550 - 0.0259391590952873 - <_> - - <_> - - - - <_>6 11 6 7 -1. - <_>8 11 2 7 3. - 0 - -0.0143609195947647 - -0.2113649994134903 - 0.0529731400310993 - <_> - - <_> - - - - <_>18 4 4 8 -1. - <_>18 8 4 4 2. - 0 - -0.0174686796963215 - -0.1051810979843140 - 0.0177150797098875 - <_> - - <_> - - - - <_>4 6 8 11 -1. - <_>8 6 4 11 2. - 0 - -0.0985445678234100 - 0.2564946115016937 - -0.0442296415567398 - <_> - - <_> - - - - <_>7 5 8 12 -1. - <_>9 5 4 12 2. - 0 - -2.8123459778726101e-003 - -0.0738003626465797 - 0.1540094017982483 - <_> - - <_> - - - - <_>5 3 6 6 -1. - <_>7 3 2 6 3. - 0 - 2.1941340528428555e-003 - -0.1421629935503006 - 0.0891392230987549 - <_> - - <_> - - - - <_>11 2 10 6 -1. - <_>11 2 10 3 2. - 1 - 0.0468207597732544 - 0.0293640904128551 - -0.0627548918128014 - <_> - - <_> - - - - <_>11 1 8 9 -1. - <_>11 1 4 9 2. - 1 - 0.3289175927639008 - 0.0130156902596354 - -0.7834712862968445 - <_> - - <_> - - - - <_>12 4 3 10 -1. - <_>12 4 3 5 2. - 1 - -0.0204705204814672 - -0.0768143534660339 - 0.0398004688322544 - <_> - - <_> - - - - <_>11 1 11 4 -1. - <_>11 1 11 2 2. - 1 - 0.0886770263314247 - -0.0403123684227467 - 0.2845386862754822 - <_> - - <_> - - - - <_>18 4 4 8 -1. - <_>18 8 4 4 2. - 0 - -1.1557979742065072e-003 - 0.0421993210911751 - -0.0414462089538574 - <_> - - <_> - - - - <_>0 4 4 8 -1. - <_>0 8 4 4 2. - 0 - 0.0605245381593704 - -0.0169187001883984 - 0.6723713874816895 - <_> - - <_> - - - - <_>12 2 2 12 -1. - <_>12 2 1 12 2. - 1 - 0.0408304594457150 - 0.0133648402988911 - -0.3111329972743988 - <_> - - <_> - - - - <_>4 12 12 3 -1. - <_>4 13 12 1 3. - 0 - -3.1132870353758335e-003 - -0.1726278066635132 - 0.0593822188675404 - <_> - - <_> - - - - <_>2 12 18 3 -1. - <_>2 13 18 1 3. - 0 - -4.3638627976179123e-003 - 0.1726533025503159 - -0.0624239705502987 - <_> - - <_> - - - - <_>0 0 16 3 -1. - <_>0 1 16 1 3. - 0 - -0.0328340902924538 - 0.4027537107467651 - -0.0257990397512913 - <_> - - <_> - - - - <_>12 2 2 12 -1. - <_>12 2 1 12 2. - 1 - 0.0643770024180412 - -4.7380630858242512e-003 - 0.7522106766700745 - <_> - - <_> - - - - <_>10 2 12 2 -1. - <_>10 2 12 1 2. - 1 - 0.0276427306234837 - 0.0376444794237614 - -0.2922027111053467 - <_> - - <_> - - - - <_>13 10 6 7 -1. - <_>15 10 2 7 3. - 0 - 0.0221711993217468 - -0.0246540699154139 - 0.2053381055593491 - <_> - - <_> - - - - <_>5 13 12 2 -1. - <_>11 13 6 2 2. - 0 - 1.5859310515224934e-003 - 0.0894637927412987 - -0.1261173039674759 - <_> - - <_> - - - - <_>16 8 6 8 -1. - <_>19 8 3 4 2. - <_>16 12 3 4 2. - 0 - -0.0188720505684614 - 0.1307265013456345 - -0.0369537100195885 - <_> - - <_> - - - - <_>4 1 8 6 -1. - <_>4 3 8 2 3. - 0 - -0.0133061697706580 - -0.2296320945024490 - 0.0426871888339520 - <_> - - <_> - - - - <_>18 0 4 9 -1. - <_>18 3 4 3 3. - 0 - -0.0704071223735809 - -0.7111750841140747 - 6.6957580856978893e-003 - <_> - - <_> - - - - <_>8 2 6 8 -1. - <_>8 6 6 4 2. - 0 - 0.0417489297688007 - -0.0329278707504272 - 0.3003528118133545 - <_> - - <_> - - - - <_>8 1 6 4 -1. - <_>8 3 6 2 2. - 0 - 5.3282231092453003e-003 - 0.0518117509782314 - -0.1906909048557282 - <_> - - <_> - - - - <_>1 2 12 3 -1. - <_>1 3 12 1 3. - 0 - 2.4094989057630301e-003 - -0.0806879699230194 - 0.1251012980937958 - <_> - - <_> - - - - <_>7 2 12 3 -1. - <_>7 3 12 1 3. - 0 - -6.2405979260802269e-003 - 0.1074063032865524 - -0.0399790108203888 - <_> - - <_> - - - - <_>1 0 16 18 -1. - <_>1 9 16 9 2. - 0 - -0.6731246709823608 - -1. - 0.0100708100944757 - <_> - - <_> - - - - <_>16 8 6 8 -1. - <_>19 8 3 4 2. - <_>16 12 3 4 2. - 0 - -0.0929835587739944 - -1. - -2.4261360522359610e-003 - <_> - - <_> - - - - <_>0 8 6 8 -1. - <_>0 8 3 4 2. - <_>3 12 3 4 2. - 0 - 0.0336297601461411 - 0.0241228695958853 - -0.4138790071010590 - <_> - - <_> - - - - <_>18 4 4 6 -1. - <_>18 7 4 3 2. - 0 - 0.0238806195557117 - 9.6614202484488487e-003 - -0.2197377979755402 - <_> - - <_> - - - - <_>0 12 14 3 -1. - <_>0 13 14 1 3. - 0 - 1.2738780351355672e-003 - -0.0835551172494888 - 0.1226968988776207 - <_> - - <_> - - - - <_>3 12 16 3 -1. - <_>3 13 16 1 3. - 0 - 0.0184141397476196 - 0.0307981409132481 - -0.3560917079448700 - <_> - - <_> - - - - <_>0 4 4 6 -1. - <_>0 7 4 3 2. - 0 - -0.0564695782959461 - 0.8863177895545960 - -0.0126983001828194 - <_> - - <_> - - - - <_>9 14 8 4 -1. - <_>9 16 8 2 2. - 0 - -4.6219761134125292e-004 - 0.0346819013357162 - -0.0828508287668228 - <_> - - <_> - - - - <_>0 13 14 3 -1. - <_>0 14 14 1 3. - 0 - -0.0190608594566584 - 0.3536941111087799 - -0.0276117604225874 - <_> - - <_> - - - - <_>4 14 14 2 -1. - <_>4 15 14 1 2. - 0 - 1.5762279508635402e-003 - 0.0409399084746838 - -0.2251740992069244 - <_> - - <_> - - - - <_>3 12 15 6 -1. - <_>3 15 15 3 2. - 0 - 0.0201018806546927 - -0.0239955503493547 - 0.4109125137329102 - <_> - - <_> - - - - <_>7 12 14 6 -1. - <_>7 15 14 3 2. - 0 - 2.7211669366806746e-003 - 0.0281224492937326 - -0.1420011967420578 - <_> - - <_> - - - - <_>0 0 14 4 -1. - <_>0 2 14 2 2. - 0 - -0.1094442978501320 - 0.9508574008941650 - -9.4355372712016106e-003 - <_> - - <_> - - - - <_>13 10 6 7 -1. - <_>15 10 2 7 3. - 0 - -1.2755279894918203e-003 - 0.0569029003381729 - -0.0834297835826874 - <_> - - <_> - - - - <_>3 10 6 7 -1. - <_>5 10 2 7 3. - 0 - -0.0805784016847610 - -0.9513928890228272 - 8.2268668338656425e-003 - <_> - - <_> - - - - <_>2 4 18 4 -1. - <_>8 4 6 4 3. - 0 - -0.1204798966646195 - -0.3027386963367462 - 0.0284893400967121 - <_> - - <_> - - - - <_>5 3 12 9 -1. - <_>9 6 4 3 9. - 0 - -0.1829497069120407 - 0.2386613041162491 - -0.0627739429473877 - <_> - - <_> - - - - <_>10 8 10 7 -1. - <_>10 8 5 7 2. - 0 - -0.1710640937089920 - -0.5939468145370483 - 3.1515269074589014e-003 - <_> - - <_> - - - - <_>5 2 4 16 -1. - <_>5 6 4 8 2. - 0 - -0.0734148770570755 - -0.8693308234214783 - 0.0100843897089362 - <_> - - <_> - - - - <_>16 8 6 8 -1. - <_>19 8 3 4 2. - <_>16 12 3 4 2. - 0 - 0.0242382995784283 - -0.0217561107128859 - 0.1621855944395065 - <_> - - <_> - - - - <_>0 12 17 4 -1. - <_>0 14 17 2 2. - 0 - -7.1713668294250965e-003 - -0.0973455905914307 - 0.0921484977006912 - <_> - - <_> - - - - <_>7 12 14 6 -1. - <_>7 15 14 3 2. - 0 - -0.0333443991839886 - 0.0746453925967216 - -0.0221606791019440 - <_> - - <_> - - - - <_>0 13 12 4 -1. - <_>0 13 6 2 2. - <_>6 15 6 2 2. - 0 - 7.2907900903373957e-004 - -0.0949718132615089 - 0.1182674020528793 - <_> - - <_> - - - - <_>10 13 12 3 -1. - <_>10 14 12 1 3. - 0 - -1.0217289673164487e-003 - 0.0564262308180332 - -0.0375738292932510 - <_> - - <_> - - - - <_>7 11 8 6 -1. - <_>7 11 4 3 2. - <_>11 14 4 3 2. - 0 - -8.4900937508791685e-004 - -0.1388314962387085 - 0.0700473263859749 - <_> - - <_> - - - - <_>9 6 12 9 -1. - <_>12 6 6 9 2. - 0 - 0.0998505130410194 - -0.0140115898102522 - 0.2611567974090576 - <_> - - <_> - - - - <_>1 6 12 8 -1. - <_>4 6 6 8 2. - 0 - -0.1309006959199905 - 0.7137935161590576 - -0.0116437999531627 - <_> - - <_> - - - - <_>8 12 6 6 -1. - <_>8 14 6 2 3. - 0 - 9.1210529208183289e-003 - 0.0454028099775314 - -0.2183001041412354 - <_> - - <_> - - - - <_>1 4 20 14 -1. - <_>1 4 10 7 2. - <_>11 11 10 7 2. - 0 - 0.2010647952556610 - -0.0207532700151205 - 0.5123022198677063 - <_> - - <_> - - - - <_>18 0 4 10 -1. - <_>19 1 2 10 2. - 1 - 0.0473893098533154 - 9.4779124483466148e-003 - -0.4794239103794098 - <_> - - <_> - - - - <_>2 2 6 12 -1. - <_>2 5 6 6 2. - 0 - -0.0571185387670994 - 0.3916605114936829 - -0.0267039109021425 - <_> - - <_> - - - - <_>16 5 4 9 -1. - <_>16 8 4 3 3. - 0 - -8.3700623363256454e-003 - -0.1339945942163467 - 0.0484609007835388 - <_> - - <_> - - - - <_>6 9 8 4 -1. - <_>10 9 4 4 2. - 0 - 4.0913890115916729e-003 - -0.0594897791743279 - 0.1743853986263275 - <_> - - <_> - - - - <_>7 8 14 3 -1. - <_>7 8 7 3 2. - 0 - 0.0718994885683060 - 0.0117231803014874 - -0.3627477884292603 - <_> - - <_> - - - - <_>0 8 18 3 -1. - <_>9 8 9 3 2. - 0 - -3.6888250615447760e-003 - 0.0757636278867722 - -0.1503359973430634 - <_> - - <_> - - - - <_>14 6 8 4 -1. - <_>14 6 8 2 2. - 1 - -7.4795219115912914e-003 - 0.1502785980701447 - -0.0458704903721809 - <_> - - <_> - - - - <_>0 3 18 2 -1. - <_>9 3 9 2 2. - 0 - -0.0125825898721814 - -0.1991554945707321 - 0.0639174506068230 - <_> - - <_> - - - - <_>6 6 10 8 -1. - <_>6 8 10 4 2. - 0 - 3.5687079653143883e-003 - -0.1211723983287811 - 0.1095608025789261 - <_> - - <_> - - - - <_>1 5 10 12 -1. - <_>1 8 10 6 2. - 0 - 1.7363800434395671e-003 - 0.1225852966308594 - -0.0935562625527382 - <_> - - <_> - - - - <_>11 6 3 12 -1. - <_>12 6 1 12 3. - 0 - -1.4523629797622561e-003 - 0.0967225283384323 - -0.0807396993041039 - <_> - - <_> - - - - <_>8 6 3 12 -1. - <_>9 6 1 12 3. - 0 - 3.1017749570310116e-003 - -0.0690764710307121 - 0.1539645940065384 - <_> - - <_> - - - - <_>11 1 3 13 -1. - <_>12 1 1 13 3. - 0 - -8.5509587079286575e-003 - -0.1518629044294357 - 0.0403469204902649 - <_> - - <_> - - - - <_>8 2 3 13 -1. - <_>9 2 1 13 3. - 0 - -1.8966189818456769e-003 - 0.1217254996299744 - -0.0985434427857399 - -30.6093006134033200 - 26 - -1 - <_> - - - <_> - - <_> - - - - <_>6 6 2 12 -1. - <_>6 12 2 6 2. - 0 - -0.0237547401338816 - 0.1709530055522919 - -0.1153428032994270 - <_> - - <_> - - - - <_>17 4 2 9 -1. - <_>17 4 1 9 2. - 1 - -7.3806629516184330e-003 - 0.0880671963095665 - -0.0403177700936794 - <_> - - <_> - - - - <_>0 0 12 4 -1. - <_>0 1 12 2 2. - 0 - 1.1198900174349546e-003 - -0.0798953026533127 - 0.1344889998435974 - <_> - - <_> - - - - <_>8 4 12 4 -1. - <_>14 4 6 2 2. - <_>8 6 6 2 2. - 0 - 0.0337187312543392 - -0.0152200302109122 - 0.2991417050361633 - <_> - - <_> - - - - <_>6 13 6 4 -1. - <_>6 15 6 2 2. - 0 - -2.8022660990245640e-004 - 0.0635997280478477 - -0.1561919003725052 - <_> - - <_> - - - - <_>7 13 12 4 -1. - <_>7 15 12 2 2. - 0 - -3.9523928426206112e-003 - -9.7961323335766792e-003 - 0.1057164967060089 - <_> - - <_> - - - - <_>1 8 6 4 -1. - <_>4 8 3 4 2. - 0 - 2.1397129166871309e-003 - 0.0899535864591599 - -0.1448377966880798 - <_> - - <_> - - - - <_>15 8 6 10 -1. - <_>15 8 3 10 2. - 0 - -0.0675212964415550 - 0.2093243002891541 - -0.0539238117635250 - <_> - - <_> - - - - <_>1 8 6 10 -1. - <_>4 8 3 10 2. - 0 - 0.0103789502754807 - -0.0641771629452705 - 0.2781462967395783 - <_> - - <_> - - - - <_>16 12 6 4 -1. - <_>16 12 3 4 2. - 0 - 6.2903137877583504e-003 - -0.0492537207901478 - 0.0821684226393700 - <_> - - <_> - - - - <_>1 6 6 8 -1. - <_>1 6 3 4 2. - <_>4 10 3 4 2. - 0 - 9.3974275514483452e-003 - 0.0845377370715141 - -0.2288530021905899 - <_> - - <_> - - - - <_>11 1 4 11 -1. - <_>12 2 2 11 2. - 1 - 0.0101209301501513 - 0.0333371199667454 - -0.0816642567515373 - <_> - - <_> - - - - <_>11 1 11 4 -1. - <_>10 2 11 2 2. - 1 - 3.1531939748674631e-003 - -0.1022099032998085 - 0.1183736026287079 - <_> - - <_> - - - - <_>12 0 4 7 -1. - <_>13 1 2 7 2. - 1 - 0.0751372873783112 - 2.7504051104187965e-003 - -1.0000959634780884 - <_> - - <_> - - - - <_>10 0 7 4 -1. - <_>9 1 7 2 2. - 1 - -2.3692219983786345e-003 - 0.0990924835205078 - -0.1142518967390060 - <_> - - <_> - - - - <_>13 5 2 12 -1. - <_>13 5 1 12 2. - 0 - -0.0245103798806667 - 0.2870832085609436 - -0.0161488000303507 - <_> - - <_> - - - - <_>7 5 2 12 -1. - <_>8 5 1 12 2. - 0 - -1.9670750480145216e-003 - -0.1153137013316155 - 0.0868165567517281 - <_> - - <_> - - - - <_>8 5 9 4 -1. - <_>11 5 3 4 3. - 0 - 0.0308453794568777 - -0.0240906104445457 - 0.1960754990577698 - <_> - - <_> - - - - <_>7 0 10 3 -1. - <_>6 1 10 1 3. - 1 - 0.0238163098692894 - 0.0328240394592285 - -0.3571043908596039 - <_> - - <_> - - - - <_>17 4 2 9 -1. - <_>17 4 1 9 2. - 1 - -0.0401991307735443 - -0.5285078883171082 - 6.0749719850718975e-003 - <_> - - <_> - - - - <_>5 4 9 2 -1. - <_>5 4 9 1 2. - 1 - -6.8876100704073906e-003 - 0.2205885052680969 - -0.0591514892876148 - <_> - - <_> - - - - <_>12 10 4 8 -1. - <_>12 10 2 8 2. - 0 - -2.5466730585321784e-004 - 0.0718978792428970 - -0.0849620327353477 - <_> - - <_> - - - - <_>2 0 12 4 -1. - <_>2 0 6 2 2. - <_>8 2 6 2 2. - 0 - 9.8468195647001266e-003 - 0.0413667596876621 - -0.2398452013731003 - <_> - - <_> - - - - <_>7 7 15 3 -1. - <_>7 8 15 1 3. - 0 - 0.0279344003647566 - -0.0236471593379974 - 0.2473800927400589 - <_> - - <_> - - - - <_>2 0 12 4 -1. - <_>2 0 6 2 2. - <_>8 2 6 2 2. - 0 - -0.0229603908956051 - -0.4518792927265167 - 0.0223057791590691 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 14 3 4 2. - 0 - 3.2323438790626824e-004 - -0.0875360071659088 - 0.0784909576177597 - <_> - - <_> - - - - <_>0 8 17 3 -1. - <_>0 9 17 1 3. - 0 - 0.0319548994302750 - -0.0262023899704218 - 0.3920490145683289 - <_> - - <_> - - - - <_>6 13 10 5 -1. - <_>6 13 5 5 2. - 0 - 1.9027979578822851e-003 - 0.0627627819776535 - -0.1610735058784485 - <_> - - <_> - - - - <_>5 11 8 5 -1. - <_>9 11 4 5 2. - 0 - -3.2691629603505135e-003 - 0.1016800031065941 - -0.1043248027563095 - <_> - - <_> - - - - <_>14 8 4 6 -1. - <_>14 8 2 6 2. - 0 - 0.0100402003154159 - -0.0280465800315142 - 0.1211789995431900 - <_> - - <_> - - - - <_>0 10 5 8 -1. - <_>0 14 5 4 2. - 0 - -0.0341586805880070 - -0.2897444963455200 - 0.0352826602756977 - <_> - - <_> - - - - <_>7 7 15 3 -1. - <_>7 8 15 1 3. - 0 - 1.7615250544622540e-003 - -0.0555830709636211 - 0.0741584524512291 - <_> - - <_> - - - - <_>2 11 7 4 -1. - <_>2 13 7 2 2. - 0 - -0.0211346503347158 - 0.2513059079647064 - -0.0403546392917633 - <_> - - <_> - - - - <_>8 3 11 12 -1. - <_>8 6 11 6 2. - 0 - 0.0297593697905540 - 0.0380295403301716 - -0.1422636955976486 - <_> - - <_> - - - - <_>2 4 12 4 -1. - <_>2 4 6 2 2. - <_>8 6 6 2 2. - 0 - 0.0148660801351070 - -0.0397216901183128 - 0.2752254009246826 - <_> - - <_> - - - - <_>19 2 3 12 -1. - <_>20 3 1 12 3. - 1 - -0.0358294285833836 - -0.3345197141170502 - 9.6839247271418571e-003 - <_> - - <_> - - - - <_>1 6 12 4 -1. - <_>1 6 6 2 2. - <_>7 8 6 2 2. - 0 - -3.2887340057641268e-003 - -0.1425821930170059 - 0.0685762092471123 - <_> - - <_> - - - - <_>9 9 13 3 -1. - <_>9 10 13 1 3. - 0 - 0.0427148789167404 - -0.0142404399812222 - 0.3876529932022095 - <_> - - <_> - - - - <_>0 5 12 6 -1. - <_>0 5 6 3 2. - <_>6 8 6 3 2. - 0 - 1.2328879674896598e-003 - 0.0786238536238670 - -0.1186942011117935 - <_> - - <_> - - - - <_>11 0 3 13 -1. - <_>12 0 1 13 3. - 0 - -0.0104476204141974 - -0.1488299071788788 - 0.0315711684525013 - <_> - - <_> - - - - <_>8 0 3 13 -1. - <_>9 0 1 13 3. - 0 - 0.0126563599333167 - -0.0465724617242813 - 0.2621260881423950 - <_> - - <_> - - - - <_>14 6 8 8 -1. - <_>14 10 8 4 2. - 0 - 0.0498497188091278 - 0.0170153398066759 - -0.1426873058080673 - <_> - - <_> - - - - <_>0 8 8 6 -1. - <_>0 10 8 2 3. - 0 - -0.0186072401702404 - 0.2333865016698837 - -0.0470949411392212 - <_> - - <_> - - - - <_>9 9 13 3 -1. - <_>9 10 13 1 3. - 0 - -0.0543973706662655 - -0.4051130115985870 - 8.1606470048427582e-003 - <_> - - <_> - - - - <_>0 9 13 3 -1. - <_>0 10 13 1 3. - 0 - 2.9153900686651468e-003 - -0.0893139466643333 - 0.1333537995815277 - <_> - - <_> - - - - <_>4 14 14 4 -1. - <_>11 14 7 2 2. - <_>4 16 7 2 2. - 0 - -5.9154080227017403e-003 - -0.2041452974081039 - 0.0484757013618946 - <_> - - <_> - - - - <_>0 3 6 6 -1. - <_>2 3 2 6 3. - 0 - -1.9841329194605350e-003 - 0.1342810988426209 - -0.0758927911520004 - <_> - - <_> - - - - <_>2 6 20 4 -1. - <_>7 6 10 4 2. - 0 - -4.4047520495951176e-003 - 0.0418521389365196 - -0.1011909022927284 - <_> - - <_> - - - - <_>2 7 6 6 -1. - <_>4 7 2 6 3. - 0 - 0.0179828796535730 - 0.0439786799252033 - -0.2505401968955994 - <_> - - <_> - - - - <_>15 8 6 10 -1. - <_>17 8 2 10 3. - 0 - -0.0780595019459724 - -0.3302507102489471 - 6.3089421018958092e-003 - <_> - - <_> - - - - <_>1 8 6 10 -1. - <_>3 8 2 10 3. - 0 - 7.2548650205135345e-003 - -0.1087217032909393 - 0.0994110181927681 - <_> - - <_> - - - - <_>9 9 13 3 -1. - <_>9 10 13 1 3. - 0 - -2.7871869970113039e-003 - 0.1365929991006851 - -0.0847996398806572 - <_> - - <_> - - - - <_>6 8 4 6 -1. - <_>6 8 4 3 2. - 1 - -9.3798413872718811e-003 - -0.1187245026230812 - 0.0791080594062805 - <_> - - <_> - - - - <_>16 5 6 13 -1. - <_>16 5 3 13 2. - 0 - -0.0549264103174210 - 0.1438207030296326 - -0.0300722699612379 - <_> - - <_> - - - - <_>0 5 6 13 -1. - <_>3 5 3 13 2. - 0 - -4.4219079427421093e-003 - 0.1066642999649048 - -0.1083810031414032 - <_> - - <_> - - - - <_>4 10 18 2 -1. - <_>4 10 9 2 2. - 0 - 1.0763059835880995e-003 - 0.0273809898644686 - -0.0554460510611534 - <_> - - <_> - - - - <_>0 7 21 7 -1. - <_>7 7 7 7 3. - 0 - -0.0725140124559402 - -0.1089344993233681 - 0.1009754016995430 - <_> - - <_> - - - - <_>5 6 12 12 -1. - <_>9 6 4 12 3. - 0 - -0.1647219061851502 - 0.3036536872386932 - -0.0436662100255489 - <_> - - <_> - - - - <_>10 4 10 3 -1. - <_>9 5 10 1 3. - 1 - 0.0798378065228462 - -0.0108286803588271 - 0.8997743725776672 - <_> - - <_> - - - - <_>9 9 9 7 -1. - <_>12 9 3 7 3. - 0 - -5.2413612138479948e-004 - 0.0852306336164474 - -0.1205397993326187 - <_> - - <_> - - - - <_>11 5 9 4 -1. - <_>14 8 3 4 3. - 1 - -0.0216322708874941 - -0.2109203934669495 - 0.0655825436115265 - <_> - - <_> - - - - <_>12 3 3 10 -1. - <_>12 3 3 5 2. - 1 - 0.1269153058528900 - -4.5935749076306820e-003 - 0.4508964121341705 - <_> - - <_> - - - - <_>8 3 12 2 -1. - <_>8 3 6 2 2. - 1 - 0.0954723507165909 - -0.0207988992333412 - 0.5247465968132019 - <_> - - <_> - - - - <_>14 6 4 8 -1. - <_>14 10 4 4 2. - 0 - -0.0829360783100128 - 0.8497673869132996 - -5.0510508008301258e-003 - <_> - - <_> - - - - <_>4 6 4 8 -1. - <_>4 10 4 4 2. - 0 - 7.7482969500124454e-003 - -0.0553182885050774 - 0.1714583039283752 - <_> - - <_> - - - - <_>6 0 11 12 -1. - <_>6 3 11 6 2. - 0 - -0.0217684395611286 - -0.1594793051481247 - 0.0608737990260124 - <_> - - <_> - - - - <_>8 0 6 6 -1. - <_>8 3 6 3 2. - 0 - -1.1072609777329490e-004 - 0.0788772925734520 - -0.1317763030529022 - <_> - - <_> - - - - <_>10 0 10 4 -1. - <_>10 0 5 4 2. - 0 - 3.1122909858822823e-003 - -0.0430468395352364 - 0.0623925812542439 - <_> - - <_> - - - - <_>2 0 10 4 -1. - <_>7 0 5 4 2. - 0 - -2.8692940250039101e-003 - 0.1374697983264923 - -0.0804942175745964 - <_> - - <_> - - - - <_>10 3 8 8 -1. - <_>14 3 4 4 2. - <_>10 7 4 4 2. - 0 - 0.1057576015591621 - 1.0569440200924873e-003 - -0.9999381899833679 - <_> - - <_> - - - - <_>4 3 8 8 -1. - <_>4 3 4 4 2. - <_>8 7 4 4 2. - 0 - 0.0461926795542240 - 0.0172280203551054 - -0.5260491967201233 - <_> - - <_> - - - - <_>2 9 18 5 -1. - <_>8 9 6 5 3. - 0 - -0.2547619044780731 - -0.6292729973793030 - 0.0136986197903752 - <_> - - <_> - - - - <_>0 15 16 3 -1. - <_>0 16 16 1 3. - 0 - -2.7374029159545898e-003 - 0.1274753957986832 - -0.0695915222167969 - <_> - - <_> - - - - <_>6 16 12 2 -1. - <_>6 17 12 1 2. - 0 - 2.1854760125279427e-003 - 0.0418547615408897 - -0.2648145854473114 - <_> - - <_> - - - - <_>3 0 4 8 -1. - <_>3 4 4 4 2. - 0 - -0.0240507107228041 - -0.2619110941886902 - 0.0344899408519268 - <_> - - <_> - - - - <_>15 6 6 6 -1. - <_>13 8 6 2 3. - 1 - 0.1021142974495888 - -0.0153028601780534 - 0.3999275863170624 - <_> - - <_> - - - - <_>7 6 6 6 -1. - <_>9 8 2 6 3. - 1 - 0.1028165966272354 - -0.0290206708014011 - 0.3688715994358063 - <_> - - <_> - - - - <_>13 12 6 6 -1. - <_>13 14 6 2 3. - 0 - 0.0392064899206162 - 8.9045017957687378e-003 - -0.4324299991130829 - <_> - - <_> - - - - <_>3 12 6 6 -1. - <_>3 14 6 2 3. - 0 - -0.0378308594226837 - -0.6273121237754822 - 0.0148828299716115 - <_> - - <_> - - - - <_>8 13 14 4 -1. - <_>8 14 14 2 2. - 0 - 0.0125078903511167 - -0.0178650598973036 - 0.1415614038705826 - <_> - - <_> - - - - <_>0 13 14 4 -1. - <_>0 14 14 2 2. - 0 - -0.0154775902628899 - 0.3167665004730225 - -0.0335108302533627 - <_> - - <_> - - - - <_>3 13 17 2 -1. - <_>3 14 17 1 2. - 0 - -4.5885699801146984e-003 - -0.1522215008735657 - 0.0732118636369705 - <_> - - <_> - - - - <_>4 6 12 4 -1. - <_>8 6 4 4 3. - 0 - -0.0205059703439474 - 0.1172538027167320 - -0.0974579229950905 - <_> - - <_> - - - - <_>8 7 9 4 -1. - <_>11 7 3 4 3. - 0 - -0.1309832036495209 - 0.5433806777000427 - -5.8803129941225052e-003 - <_> - - <_> - - - - <_>10 0 6 8 -1. - <_>8 2 6 4 2. - 1 - 0.0478882789611816 - -0.0271208100020885 - 0.3572363853454590 - <_> - - <_> - - - - <_>9 2 12 12 -1. - <_>9 6 12 4 3. - 0 - 0.2544153034687042 - 2.5680949911475182e-003 - -0.9998825788497925 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>10 1 6 1 3. - 1 - 2.0652529783546925e-003 - -0.0942550003528595 - 0.1006835997104645 - <_> - - <_> - - - - <_>13 1 3 7 -1. - <_>14 2 1 7 3. - 1 - 0.0301417801529169 - -0.0159845203161240 - 0.2420950978994370 - <_> - - <_> - - - - <_>2 3 12 9 -1. - <_>6 6 4 3 9. - 0 - 0.1230550035834312 - 0.0439024604856968 - -0.2904686033725739 - <_> - - <_> - - - - <_>19 2 3 12 -1. - <_>20 3 1 12 3. - 1 - 0.0114368898794055 - 0.0318267010152340 - -0.1056960970163345 - <_> - - <_> - - - - <_>3 5 12 5 -1. - <_>7 5 4 5 3. - 0 - 0.0142296599224210 - -0.0645187273621559 - 0.1617898941040039 - <_> - - <_> - - - - <_>13 1 3 7 -1. - <_>14 2 1 7 3. - 1 - -0.0198080390691757 - 0.2090989947319031 - -0.0272454600781202 - <_> - - <_> - - - - <_>9 1 7 3 -1. - <_>8 2 7 1 3. - 1 - -0.0326347090303898 - -0.4626514911651611 - 0.0238779895007610 - <_> - - <_> - - - - <_>9 7 8 6 -1. - <_>13 7 4 3 2. - <_>9 10 4 3 2. - 0 - 0.0815682113170624 - -0.0109838200733066 - 0.7451753020286560 - <_> - - <_> - - - - <_>4 14 14 4 -1. - <_>4 15 14 2 2. - 0 - 1.7331159906461835e-003 - 0.0628325790166855 - -0.1580016016960144 - <_> - - <_> - - - - <_>10 14 6 4 -1. - <_>10 14 3 4 2. - 0 - 4.1524558328092098e-003 - 0.0285209491848946 - -0.0839238166809082 - <_> - - <_> - - - - <_>6 14 6 4 -1. - <_>9 14 3 4 2. - 0 - 2.0917340589221567e-004 - -0.1653665006160736 - 0.0831703767180443 - <_> - - <_> - - - - <_>14 0 4 16 -1. - <_>16 0 2 8 2. - <_>14 8 2 8 2. - 0 - -6.9550168700516224e-004 - 0.0572988986968994 - -0.0986681282520294 - <_> - - <_> - - - - <_>0 15 20 3 -1. - <_>5 15 10 3 2. - 0 - 0.1011473014950752 - -0.0270318593829870 - 0.5093728899955750 - <_> - - <_> - - - - <_>16 5 3 13 -1. - <_>17 5 1 13 3. - 0 - 0.0203715302050114 - -0.0159913394600153 - 0.2111019045114517 - <_> - - <_> - - - - <_>2 6 13 8 -1. - <_>2 10 13 4 2. - 0 - 0.1949035972356796 - 0.0111691495403647 - -0.8062657713890076 - <_> - - <_> - - - - <_>16 5 3 13 -1. - <_>17 5 1 13 3. - 0 - -1.5187750104814768e-003 - 0.0886704325675964 - -0.0657796934247017 - <_> - - <_> - - - - <_>7 12 7 4 -1. - <_>7 14 7 2 2. - 0 - -2.2300280761555769e-005 - 0.0702371001243591 - -0.1365679949522018 - <_> - - <_> - - - - <_>15 1 4 9 -1. - <_>15 4 4 3 3. - 0 - 7.0241810753941536e-003 - 0.0452642701566219 - -0.1224663034081459 - <_> - - <_> - - - - <_>0 4 16 2 -1. - <_>0 5 16 1 2. - 0 - -5.8513730764389038e-003 - 0.1454869955778122 - -0.0775128677487373 - <_> - - <_> - - - - <_>8 4 12 2 -1. - <_>8 5 12 1 2. - 0 - -0.0122288698330522 - -0.1576232016086578 - 0.0330916009843349 - <_> - - <_> - - - - <_>6 3 9 15 -1. - <_>9 8 3 5 9. - 0 - -0.2747533917427063 - 0.4141589999198914 - -0.0233061797916889 - <_> - - <_> - - - - <_>12 3 3 8 -1. - <_>12 7 3 4 2. - 0 - -8.3073312416672707e-003 - -0.0661589726805687 - 0.0454233698546886 - <_> - - <_> - - - - <_>5 6 12 4 -1. - <_>5 6 6 2 2. - <_>11 8 6 2 2. - 0 - 0.0149670997634530 - 0.0395800210535526 - -0.2447497993707657 - <_> - - <_> - - - - <_>16 3 3 14 -1. - <_>17 3 1 14 3. - 0 - 3.5121920518577099e-003 - -0.0326085910201073 - 0.0720805525779724 - <_> - - <_> - - - - <_>3 3 3 14 -1. - <_>4 3 1 14 3. - 0 - 6.0676191933453083e-003 - -0.0662842467427254 - 0.1645577996969223 - <_> - - <_> - - - - <_>0 4 22 4 -1. - <_>11 4 11 2 2. - <_>0 6 11 2 2. - 0 - -6.0948841273784637e-003 - -0.1678411960601807 - 0.0680977478623390 - <_> - - <_> - - - - <_>1 4 4 9 -1. - <_>1 7 4 3 3. - 0 - -4.4710501097142696e-003 - 0.1434886008501053 - -0.0752860531210899 - <_> - - <_> - - - - <_>7 13 12 4 -1. - <_>7 15 12 2 2. - 0 - 0.0276299994438887 - -6.0715568251907825e-003 - 0.4623529911041260 - <_> - - <_> - - - - <_>3 13 12 4 -1. - <_>3 15 12 2 2. - 0 - -4.1778348386287689e-003 - -0.0944801867008209 - 0.1026868969202042 - <_> - - <_> - - - - <_>11 14 6 4 -1. - <_>11 16 6 2 2. - 0 - -1.4997010293882340e-004 - 0.0459039695560932 - -0.1268998980522156 - <_> - - <_> - - - - <_>1 0 13 3 -1. - <_>1 1 13 1 3. - 0 - 9.3421656638383865e-003 - -0.0478513501584530 - 0.2377692013978958 - <_> - - <_> - - - - <_>11 0 6 4 -1. - <_>11 2 6 2 2. - 0 - -9.0454798191785812e-003 - -0.1488175988197327 - 0.0257176607847214 - <_> - - <_> - - - - <_>4 14 14 4 -1. - <_>4 14 7 2 2. - <_>11 16 7 2 2. - 0 - -1.0563050163909793e-003 - -0.1246521994471550 - 0.0821189433336258 - <_> - - <_> - - - - <_>6 0 12 2 -1. - <_>6 1 12 1 2. - 0 - -0.0156021695584059 - 0.3047155141830444 - -0.0245032906532288 - <_> - - <_> - - - - <_>5 0 6 4 -1. - <_>5 2 6 2 2. - 0 - -8.9588612318038940e-003 - -0.2362405955791473 - 0.0462901405990124 - <_> - - <_> - - - - <_>11 0 3 6 -1. - <_>12 1 1 6 3. - 1 - -7.6452922075986862e-003 - 0.1139314025640488 - -0.0265730600804091 - <_> - - <_> - - - - <_>11 0 6 3 -1. - <_>10 1 6 1 3. - 1 - -0.0192949008196592 - 0.2882001996040344 - -0.0359068810939789 - <_> - - <_> - - - - <_>7 12 8 6 -1. - <_>9 12 4 6 2. - 0 - 8.6250286549329758e-003 - 0.0610060207545757 - -0.1683263033628464 - <_> - - <_> - - - - <_>1 1 5 10 -1. - <_>1 6 5 5 2. - 0 - 0.0258834902197123 - -0.0401428490877151 - 0.2326312065124512 - <_> - - <_> - - - - <_>13 0 2 12 -1. - <_>13 6 2 6 2. - 0 - -0.0749461129307747 - 0.7116879820823669 - -6.0237408615648746e-003 - <_> - - <_> - - - - <_>7 0 2 12 -1. - <_>7 6 2 6 2. - 0 - -2.6808120310306549e-004 - 0.0777179002761841 - -0.1535875052213669 - <_> - - <_> - - - - <_>12 1 8 14 -1. - <_>16 1 4 7 2. - <_>12 8 4 7 2. - 0 - 0.0610414408147335 - -0.0340701602399349 - 0.2583329081535339 - <_> - - <_> - - - - <_>1 0 8 10 -1. - <_>1 0 4 5 2. - <_>5 5 4 5 2. - 0 - -4.7920648939907551e-003 - -0.1507782936096191 - 0.0845772400498390 - <_> - - <_> - - - - <_>6 6 16 4 -1. - <_>10 6 8 4 2. - 0 - -0.1261063069105148 - -0.4840453863143921 - 8.6965439841151237e-003 - <_> - - <_> - - - - <_>1 14 13 2 -1. - <_>1 15 13 1 2. - 0 - -0.0228792708367109 - 0.6773418784141541 - -0.0148561000823975 - <_> - - <_> - - - - <_>2 7 20 3 -1. - <_>7 7 10 3 2. - 0 - -6.2760512810200453e-004 - 0.0509103499352932 - -0.1407644003629684 - <_> - - <_> - - - - <_>11 2 9 4 -1. - <_>14 5 3 4 3. - 1 - -0.0105431796982884 - -0.0907072499394417 - 0.1128190010786057 - <_> - - <_> - - - - <_>6 5 13 2 -1. - <_>6 6 13 1 2. - 0 - -2.4953829124569893e-003 - 0.0895237624645233 - -0.0755412876605988 - <_> - - <_> - - - - <_>3 0 6 15 -1. - <_>6 0 3 15 2. - 0 - 0.0609861500561237 - -0.0320069789886475 - 0.3300091028213501 - -30.6014995574951170 - 27 - -1 - <_> - - - <_> - - <_> - - - - <_>3 12 8 6 -1. - <_>5 12 4 6 2. - 0 - -0.0412418097257614 - 0.2484184056520462 - -0.0698791295289993 - <_> - - <_> - - - - <_>13 1 4 7 -1. - <_>14 2 2 7 2. - 1 - -0.0746634975075722 - -0.7543368935585022 - 4.0493709966540337e-003 - <_> - - <_> - - - - <_>9 1 7 4 -1. - <_>8 2 7 2 2. - 1 - -0.0238036792725325 - 0.2431309968233109 - -0.0452839285135269 - <_> - - <_> - - - - <_>11 11 6 4 -1. - <_>11 13 6 2 2. - 0 - 0.0320286191999912 - -0.0122305396944284 - 0.3981122076511383 - <_> - - <_> - - - - <_>0 12 8 6 -1. - <_>0 12 4 3 2. - <_>4 15 4 3 2. - 0 - 3.8454410969279706e-004 - 0.0692448392510414 - -0.1728879958391190 - <_> - - <_> - - - - <_>11 11 6 4 -1. - <_>11 13 6 2 2. - 0 - -2.0599530544131994e-003 - 0.0450832508504391 - -0.0638244822621346 - <_> - - <_> - - - - <_>2 6 6 12 -1. - <_>2 6 3 6 2. - <_>5 12 3 6 2. - 0 - 0.0591745004057884 - 0.0137560898438096 - 0.5806397795677185 - <_> - - <_> - - - - <_>11 11 6 4 -1. - <_>11 13 6 2 2. - 0 - -8.1204501911997795e-003 - -0.0790601968765259 - 0.0320978797972202 - <_> - - <_> - - - - <_>5 11 9 4 -1. - <_>8 11 3 4 3. - 0 - -5.4362448863685131e-003 - 0.0802850127220154 - -0.1388078927993774 - <_> - - <_> - - - - <_>8 13 9 5 -1. - <_>11 13 3 5 3. - 0 - 0.0407687798142433 - 0.0352651290595531 - -0.1682104021310806 - <_> - - <_> - - - - <_>3 15 8 3 -1. - <_>7 15 4 3 2. - 0 - -0.0107057699933648 - -0.1322779953479767 - 0.0971477031707764 - <_> - - <_> - - - - <_>4 12 14 6 -1. - <_>11 12 7 3 2. - <_>4 15 7 3 2. - 0 - -2.1374409552663565e-003 - -0.1113512963056564 - 0.1050119996070862 - <_> - - <_> - - - - <_>2 15 8 3 -1. - <_>6 15 4 3 2. - 0 - -6.0069030150771141e-003 - 0.0797014236450195 - -0.1450355052947998 - <_> - - <_> - - - - <_>11 11 6 4 -1. - <_>11 13 6 2 2. - 0 - 6.8584359250962734e-003 - -0.0286291707307100 - 0.1549434959888458 - <_> - - <_> - - - - <_>6 5 6 7 -1. - <_>8 5 2 7 3. - 0 - 8.4308702498674393e-003 - -0.0687258765101433 - 0.1357143968343735 - <_> - - <_> - - - - <_>8 4 9 12 -1. - <_>11 8 3 4 9. - 0 - -0.0319182090461254 - -0.0900216475129128 - 0.0701727569103241 - <_> - - <_> - - - - <_>5 4 9 12 -1. - <_>8 8 3 4 9. - 0 - 0.1434696018695831 - 0.0379361994564533 - -0.3384973108768463 - <_> - - <_> - - - - <_>14 12 6 4 -1. - <_>14 14 6 2 2. - 0 - -0.0535015314817429 - -1. - -1.3069049455225468e-003 - <_> - - <_> - - - - <_>2 12 6 4 -1. - <_>2 14 6 2 2. - 0 - -4.3198501225560904e-004 - 0.0631404593586922 - -0.1489108055830002 - <_> - - <_> - - - - <_>9 6 6 8 -1. - <_>11 6 2 8 3. - 0 - -0.0368255116045475 - 0.1641896069049835 - -0.0365471988916397 - <_> - - <_> - - - - <_>7 4 8 6 -1. - <_>7 6 8 2 3. - 0 - -0.0932306125760078 - -0.8185548186302185 - 0.0104887299239635 - <_> - - <_> - - - - <_>13 7 6 4 -1. - <_>13 7 6 2 2. - 1 - -7.5886500999331474e-003 - 0.0961899235844612 - -0.0323927290737629 - <_> - - <_> - - - - <_>10 2 12 3 -1. - <_>9 3 12 1 3. - 1 - 1.9316580146551132e-003 - -0.0971334576606750 - 0.0968365371227264 - <_> - - <_> - - - - <_>12 4 6 6 -1. - <_>14 6 2 6 3. - 1 - -0.1761084944009781 - -1. - 3.9064860902726650e-004 - <_> - - <_> - - - - <_>10 4 6 6 -1. - <_>8 6 6 2 3. - 1 - -4.5753358863294125e-003 - -0.1424594074487686 - 0.0726295337080956 - <_> - - <_> - - - - <_>11 5 3 9 -1. - <_>12 6 1 9 3. - 1 - -0.0715556964278221 - 0.7012476921081543 - -8.1192785874009132e-003 - <_> - - <_> - - - - <_>4 0 16 2 -1. - <_>4 0 16 1 2. - 1 - -5.1939189434051514e-003 - -0.1759340018033981 - 0.0669202581048012 - <_> - - <_> - - - - <_>12 12 8 3 -1. - <_>12 12 4 3 2. - 0 - 9.7410175949335098e-003 - -0.0406328588724136 - 0.1536626964807510 - <_> - - <_> - - - - <_>10 0 12 6 -1. - <_>13 3 6 6 2. - 1 - -0.0191977303475142 - 0.0884047225117683 - -0.1111958995461464 - <_> - - <_> - - - - <_>9 2 4 6 -1. - <_>9 5 4 3 2. - 0 - 7.7713979408144951e-003 - -0.0515310801565647 - 0.2334187030792236 - <_> - - <_> - - - - <_>0 2 18 9 -1. - <_>6 5 6 3 9. - 0 - 0.0467417798936367 - 0.0586589500308037 - -0.2182534039020538 - <_> - - <_> - - - - <_>16 2 3 9 -1. - <_>17 3 1 9 3. - 1 - -0.0670518204569817 - -0.7696895003318787 - 2.2733330260962248e-003 - <_> - - <_> - - - - <_>6 2 9 3 -1. - <_>5 3 9 1 3. - 1 - 0.0104036098346114 - -0.0572082698345184 - 0.1987476944923401 - <_> - - <_> - - - - <_>10 1 12 4 -1. - <_>14 1 4 4 3. - 0 - 0.0681366175413132 - 0.0109247500076890 - -0.2351476997137070 - <_> - - <_> - - - - <_>0 1 12 4 -1. - <_>4 1 4 4 3. - 0 - 5.5462731979787350e-003 - 0.0764302089810371 - -0.1504815071821213 - <_> - - <_> - - - - <_>6 14 12 4 -1. - <_>12 14 6 2 2. - <_>6 16 6 2 2. - 0 - 0.0358278900384903 - 5.2330200560390949e-003 - -0.9050955772399902 - <_> - - <_> - - - - <_>4 2 13 3 -1. - <_>4 3 13 1 3. - 0 - 0.0100990803912282 - -0.0494383499026299 - 0.1923664957284927 - <_> - - <_> - - - - <_>7 2 13 3 -1. - <_>7 3 13 1 3. - 0 - -7.3000352131202817e-004 - 0.0800386890769005 - -0.0598758608102798 - <_> - - <_> - - - - <_>1 12 20 2 -1. - <_>11 12 10 2 2. - 0 - -0.0626273080706596 - -0.6877195239067078 - 0.0144093399867415 - <_> - - <_> - - - - <_>5 2 12 3 -1. - <_>9 2 4 3 3. - 0 - 4.1463607922196388e-003 - 0.0620688796043396 - -0.1413860023021698 - <_> - - <_> - - - - <_>4 8 14 9 -1. - <_>11 8 7 9 2. - 0 - -0.1413605958223343 - 0.5943986773490906 - -0.0169105306267738 - <_> - - <_> - - - - <_>10 2 4 8 -1. - <_>10 2 2 8 2. - 0 - 0.0701470673084259 - 3.5781029146164656e-003 - -0.8454138040542603 - <_> - - <_> - - - - <_>8 2 4 8 -1. - <_>10 2 2 8 2. - 0 - 1.8181180348619819e-003 - -0.0590311288833618 - 0.1770997941493988 - <_> - - <_> - - - - <_>16 1 2 16 -1. - <_>16 9 2 8 2. - 0 - 0.0631495416164398 - -7.9691512510180473e-003 - 0.2457547038793564 - <_> - - <_> - - - - <_>2 8 9 4 -1. - <_>5 8 3 4 3. - 0 - 1.7065559513866901e-003 - -0.1377667933702469 - 0.0722865983843803 - <_> - - <_> - - - - <_>16 1 2 16 -1. - <_>16 9 2 8 2. - 0 - -0.0418441593647003 - -0.1020454987883568 - 0.0194128807634115 - <_> - - <_> - - - - <_>4 1 2 16 -1. - <_>4 9 2 8 2. - 0 - 0.0618760287761688 - 0.0175725705921650 - -0.5961120128631592 - <_> - - <_> - - - - <_>10 7 8 6 -1. - <_>14 7 4 3 2. - <_>10 10 4 3 2. - 0 - 0.0862066075205803 - -8.3246696740388870e-003 - 0.5927473902702332 - <_> - - <_> - - - - <_>4 7 8 6 -1. - <_>4 7 4 3 2. - <_>8 10 4 3 2. - 0 - 0.0155612500384450 - 0.0559087917208672 - -0.2017468065023422 - <_> - - <_> - - - - <_>12 8 2 7 -1. - <_>12 8 1 7 2. - 1 - 1.9683360587805510e-003 - 0.0841097831726074 - -0.0951142832636833 - <_> - - <_> - - - - <_>5 8 6 8 -1. - <_>5 8 3 4 2. - <_>8 12 3 4 2. - 0 - -3.2295130658894777e-003 - 0.1985978931188583 - -0.0603710412979126 - <_> - - <_> - - - - <_>12 8 2 7 -1. - <_>12 8 1 7 2. - 1 - 0.0438614599406719 - -7.5495638884603977e-003 - 0.2778531014919281 - <_> - - <_> - - - - <_>10 8 7 2 -1. - <_>10 8 7 1 2. - 1 - -7.1588042192161083e-004 - 0.1067167967557907 - -0.1160534024238586 - <_> - - <_> - - - - <_>5 9 13 8 -1. - <_>5 11 13 4 2. - 0 - -0.0115850800648332 - 0.1392320990562439 - -0.0726817175745964 - <_> - - <_> - - - - <_>7 9 4 9 -1. - <_>9 9 2 9 2. - 0 - -0.0241320300847292 - -0.3434329926967621 - 0.0285876393318176 - <_> - - <_> - - - - <_>9 6 6 10 -1. - <_>11 6 2 10 3. - 0 - -5.9670167975127697e-003 - 0.0628549680113792 - -0.0632379129528999 - <_> - - <_> - - - - <_>7 6 6 10 -1. - <_>9 6 2 10 3. - 0 - -0.0572982616722584 - 0.3351210057735443 - -0.0344256795942783 - <_> - - <_> - - - - <_>6 0 14 6 -1. - <_>13 0 7 3 2. - <_>6 3 7 3 2. - 0 - -0.1444053053855896 - -1. - -2.0486500579863787e-004 - <_> - - <_> - - - - <_>2 0 14 6 -1. - <_>2 0 7 3 2. - <_>9 3 7 3 2. - 0 - -0.0161520093679428 - -0.1801726073026657 - 0.0606980808079243 - <_> - - <_> - - - - <_>3 6 16 3 -1. - <_>3 7 16 1 3. - 0 - 3.1132341246120632e-004 - -0.0873939692974091 - 0.1081447973847389 - <_> - - <_> - - - - <_>1 6 15 3 -1. - <_>1 7 15 1 3. - 0 - -3.4905138891190290e-003 - 0.1308909952640533 - -0.0825025066733360 - <_> - - <_> - - - - <_>8 5 8 4 -1. - <_>8 7 8 2 2. - 0 - -0.0510782003402710 - -0.6674498915672302 - 9.7670806571841240e-003 - <_> - - <_> - - - - <_>2 4 12 10 -1. - <_>8 4 6 10 2. - 0 - 0.2302789986133575 - 8.9318687096238136e-003 - -0.8889254927635193 - <_> - - <_> - - - - <_>7 0 14 16 -1. - <_>7 0 7 16 2. - 0 - 0.0332602895796299 - -0.0388468205928802 - 0.1187155023217201 - <_> - - <_> - - - - <_>1 1 18 3 -1. - <_>10 1 9 3 2. - 0 - 3.6332090385258198e-003 - -0.0818652883172035 - 0.1200636997818947 - <_> - - <_> - - - - <_>8 8 12 2 -1. - <_>8 8 6 2 2. - 0 - -1.3659459364134818e-004 - 0.0290940403938293 - -0.0864127129316330 - <_> - - <_> - - - - <_>8 1 6 4 -1. - <_>11 1 3 4 2. - 0 - 4.2663831263780594e-003 - 0.0596425905823708 - -0.1677787005901337 - <_> - - <_> - - - - <_>11 0 4 10 -1. - <_>12 1 2 10 2. - 1 - -0.0377263687551022 - 0.2520141899585724 - -0.0114804599434137 - <_> - - <_> - - - - <_>11 0 10 4 -1. - <_>10 1 10 2 2. - 1 - -0.0377239510416985 - 0.3615080118179321 - -0.0251649804413319 - <_> - - <_> - - - - <_>13 7 9 4 -1. - <_>16 7 3 4 3. - 0 - -0.0352175310254097 - -0.2076825946569443 - 0.0156594999134541 - <_> - - <_> - - - - <_>11 1 6 2 -1. - <_>11 1 6 1 2. - 1 - -0.0262501500546932 - 0.6436303853988648 - -0.0139710800722241 - <_> - - <_> - - - - <_>8 8 12 2 -1. - <_>8 8 6 2 2. - 0 - 0.0711328312754631 - 5.0701410509645939e-003 - -0.8105366826057434 - <_> - - <_> - - - - <_>7 12 6 5 -1. - <_>10 12 3 5 2. - 0 - 2.8358760755509138e-003 - 0.0800347328186035 - -0.1176605001091957 - <_> - - <_> - - - - <_>10 7 9 11 -1. - <_>13 7 3 11 3. - 0 - 3.4837881103157997e-003 - 0.0697094574570656 - -0.1213672012090683 - <_> - - <_> - - - - <_>6 15 8 3 -1. - <_>10 15 4 3 2. - 0 - 2.9538539820350707e-005 - -0.1709052026271820 - 0.0700920671224594 - <_> - - <_> - - - - <_>19 3 2 12 -1. - <_>19 3 1 12 2. - 0 - 0.0263452306389809 - -0.0110464496538043 - 0.3546783924102783 - <_> - - <_> - - - - <_>1 3 2 12 -1. - <_>2 3 1 12 2. - 0 - 3.3180779428221285e-004 - -0.0897638499736786 - 0.1040273979306221 - <_> - - <_> - - - - <_>11 1 9 10 -1. - <_>14 1 3 10 3. - 0 - 9.9607985466718674e-003 - -0.1057467013597488 - 0.0874811634421349 - <_> - - <_> - - - - <_>1 3 16 6 -1. - <_>5 3 8 6 2. - 0 - 0.0690684765577316 - -0.0231357607990503 - 0.3776597976684570 - <_> - - <_> - - - - <_>7 1 12 12 -1. - <_>11 1 4 12 3. - 0 - -0.0338048711419106 - -0.0800529271364212 - 0.0661719888448715 - <_> - - <_> - - - - <_>2 8 12 2 -1. - <_>8 8 6 2 2. - 0 - -2.1103899925947189e-003 - 0.0729132369160652 - -0.1698666960000992 - <_> - - <_> - - - - <_>14 7 3 10 -1. - <_>14 12 3 5 2. - 0 - 0.0716755837202072 - -0.0226680207997561 - 0.4375745952129364 - <_> - - <_> - - - - <_>1 15 18 3 -1. - <_>10 15 9 3 2. - 0 - -0.0176371298730373 - 0.1471055001020432 - -0.0776481479406357 - <_> - - <_> - - - - <_>9 0 13 3 -1. - <_>9 1 13 1 3. - 0 - 2.1559430751949549e-003 - -0.0445614792406559 - 0.0806162506341934 - <_> - - <_> - - - - <_>5 0 12 3 -1. - <_>5 1 12 1 3. - 0 - -2.9923371039330959e-003 - 0.1601323038339615 - -0.0726281702518463 - <_> - - <_> - - - - <_>12 1 2 15 -1. - <_>12 1 1 15 2. - 0 - -0.0283516198396683 - -0.2483552992343903 - 7.8493626788258553e-003 - <_> - - <_> - - - - <_>8 1 2 15 -1. - <_>9 1 1 15 2. - 0 - -5.3842412307858467e-003 - -0.1329039037227631 - 0.0786153525114059 - <_> - - <_> - - - - <_>12 2 3 13 -1. - <_>13 2 1 13 3. - 0 - 0.0165137201547623 - -0.0308675803244114 - 0.2291049957275391 - <_> - - <_> - - - - <_>1 6 4 8 -1. - <_>3 6 2 8 2. - 0 - -0.0234800595790148 - -0.3465690016746521 - 0.0284779109060764 - <_> - - <_> - - - - <_>17 1 4 12 -1. - <_>19 1 2 6 2. - <_>17 7 2 6 2. - 0 - 0.0648044571280479 - 3.2681180164217949e-003 - -0.8184831738471985 - <_> - - <_> - - - - <_>1 1 4 12 -1. - <_>1 1 2 6 2. - <_>3 7 2 6 2. - 0 - 2.9363438952714205e-003 - 0.0683719962835312 - -0.1603825986385346 - <_> - - <_> - - - - <_>17 0 4 7 -1. - <_>17 0 2 7 2. - 0 - 0.0193526390939951 - 0.0123308096081018 - -0.1775151044130325 - <_> - - <_> - - - - <_>1 0 4 7 -1. - <_>3 0 2 7 2. - 0 - -1.4157049590721726e-003 - 0.1624874025583267 - -0.0848219692707062 - <_> - - <_> - - - - <_>12 2 3 13 -1. - <_>13 2 1 13 3. - 0 - -0.0321656800806522 - 0.2549557983875275 - -0.0153878200799227 - <_> - - <_> - - - - <_>7 4 5 9 -1. - <_>7 7 5 3 3. - 0 - 0.0998839288949966 - 0.0116309802979231 - -0.8693922162055969 - <_> - - <_> - - - - <_>12 2 3 13 -1. - <_>13 2 1 13 3. - 0 - -8.5509859491139650e-004 - 0.0375091396272182 - -0.0413151308894157 - <_> - - <_> - - - - <_>7 2 3 13 -1. - <_>8 2 1 13 3. - 0 - 0.0199486799538136 - -0.0332114398479462 - 0.2654669880867004 - <_> - - <_> - - - - <_>3 5 17 4 -1. - <_>3 6 17 2 2. - 0 - -0.0168213602155447 - -0.1950453072786331 - 0.0455782711505890 - <_> - - <_> - - - - <_>2 3 18 3 -1. - <_>2 4 18 1 3. - 0 - -0.0816850811243057 - 0.8082371950149536 - -0.0100283799692988 - <_> - - <_> - - - - <_>11 11 6 4 -1. - <_>11 13 6 2 2. - 0 - -3.9467110764235258e-004 - 0.0378688685595989 - -0.0743217021226883 - <_> - - <_> - - - - <_>5 11 6 4 -1. - <_>5 13 6 2 2. - 0 - -0.0419395789504051 - -0.7531027197837830 - 0.0124947801232338 - <_> - - <_> - - - - <_>15 5 6 4 -1. - <_>15 5 6 2 2. - 1 - 0.1231978014111519 - 1.5212129801511765e-003 - -0.8745682835578919 - <_> - - <_> - - - - <_>7 5 4 6 -1. - <_>7 5 2 6 2. - 1 - 4.3162349611520767e-003 - 0.0959173664450645 - -0.0982868820428848 - <_> - - <_> - - - - <_>13 1 8 8 -1. - <_>15 1 4 8 2. - 0 - 1.7064419807866216e-003 - -0.0672838464379311 - 0.0583726689219475 - <_> - - <_> - - - - <_>3 1 12 12 -1. - <_>7 1 4 12 3. - 0 - 0.0688534975051880 - 0.0398532710969448 - -0.2701404094696045 - <_> - - <_> - - - - <_>14 2 4 12 -1. - <_>14 2 2 12 2. - 0 - 1.5133110573515296e-003 - 0.0368038304150105 - -0.0786387771368027 - <_> - - <_> - - - - <_>4 2 4 12 -1. - <_>6 2 2 12 2. - 0 - 0.0166717004030943 - -0.0522084794938564 - 0.2547613978385925 - <_> - - <_> - - - - <_>15 0 2 14 -1. - <_>15 0 1 14 2. - 0 - -2.4927379563450813e-003 - -0.0683529227972031 - 0.0391825288534164 - <_> - - <_> - - - - <_>5 0 2 14 -1. - <_>6 0 1 14 2. - 0 - 1.7946650041267276e-003 - 0.0756416171789169 - -0.1844301968812943 - <_> - - <_> - - - - <_>15 1 7 15 -1. - <_>15 6 7 5 3. - 0 - 0.0657645165920258 - -0.0279573798179626 - 0.1377072930335999 - <_> - - <_> - - - - <_>6 1 7 6 -1. - <_>4 3 7 2 3. - 1 - -0.0324156284332275 - 0.2495771944522858 - -0.0384017415344715 - <_> - - <_> - - - - <_>1 4 20 14 -1. - <_>11 4 10 7 2. - <_>1 11 10 7 2. - 0 - 0.1598522067070007 - 0.0231395307928324 - -0.4587697982788086 - <_> - - <_> - - - - <_>1 2 6 8 -1. - <_>3 2 2 8 3. - 0 - 0.0330030508339405 - -0.0285496506839991 - 0.3648226857185364 - <_> - - <_> - - - - <_>15 0 2 13 -1. - <_>15 0 1 13 2. - 0 - 8.3292415365576744e-003 - 0.0234221108257771 - -0.1299273967742920 - <_> - - <_> - - - - <_>2 1 9 10 -1. - <_>5 1 3 10 3. - 0 - -0.1470738053321838 - -1. - 0.0103427702561021 - <_> - - <_> - - - - <_>9 9 6 6 -1. - <_>11 9 2 6 3. - 0 - 0.1062593013048172 - 2.8901589103043079e-003 - -0.6210510134696960 - <_> - - <_> - - - - <_>5 5 8 4 -1. - <_>5 5 8 2 2. - 1 - 0.0479050017893314 - -0.0254373103380203 - 0.3859503865242004 - <_> - - <_> - - - - <_>5 8 14 4 -1. - <_>5 9 14 2 2. - 0 - 0.0435629487037659 - 0.0129636703059077 - -0.3157450854778290 - <_> - - <_> - - - - <_>0 7 20 2 -1. - <_>10 7 10 2 2. - 0 - -0.0664015114307404 - 0.3718433976173401 - -0.0242482293397188 - <_> - - <_> - - - - <_>8 0 10 10 -1. - <_>8 0 5 10 2. - 0 - 1.0357169667258859e-003 - -0.0338571593165398 - 0.0728181377053261 - <_> - - <_> - - - - <_>4 0 10 10 -1. - <_>9 0 5 10 2. - 0 - -0.1001026034355164 - -0.2616243064403534 - 0.0405613481998444 - <_> - - <_> - - - - <_>5 1 15 10 -1. - <_>10 1 5 10 3. - 0 - -0.1402942985296249 - 0.1618638038635254 - -0.0374638698995113 - <_> - - <_> - - - - <_>0 9 18 4 -1. - <_>0 10 18 2 2. - 0 - -0.0366291813552380 - -0.3798868954181671 - 0.0224937591701746 - <_> - - <_> - - - - <_>8 8 10 6 -1. - <_>8 10 10 2 3. - 0 - 0.1852793991565704 - -3.4648380242288113e-003 - 0.9997292160987854 - <_> - - <_> - - - - <_>4 8 10 6 -1. - <_>4 10 10 2 3. - 0 - 0.0134529303759336 - 0.0661910176277161 - -0.1520805060863495 - <_> - - <_> - - - - <_>11 6 10 12 -1. - <_>11 10 10 4 3. - 0 - 0.0846280604600906 - -0.0321342609822750 - 0.2287780046463013 - <_> - - <_> - - - - <_>8 5 4 8 -1. - <_>8 5 4 4 2. - 1 - -0.0875683724880219 - 0.4322968125343323 - -0.0247350297868252 - <_> - - <_> - - - - <_>17 8 5 6 -1. - <_>17 11 5 3 2. - 0 - 0.0265023391693830 - 0.0235266294330359 - -0.2984949946403503 - <_> - - <_> - - - - <_>8 11 4 7 -1. - <_>10 11 2 7 2. - 0 - -0.0182730592787266 - 0.5087803006172180 - -0.0197359491139650 - <_> - - <_> - - - - <_>9 5 12 3 -1. - <_>9 6 12 1 3. - 0 - -1.1995369568467140e-003 - 0.0748677626252174 - -0.0738613903522491 - <_> - - <_> - - - - <_>2 9 13 3 -1. - <_>2 10 13 1 3. - 0 - 0.0313812308013439 - -0.0262804795056582 - 0.3658395111560822 - <_> - - <_> - - - - <_>3 13 16 3 -1. - <_>3 13 8 3 2. - 0 - 0.0231786705553532 - 0.0371552594006062 - -0.2546856999397278 - <_> - - <_> - - - - <_>5 12 8 4 -1. - <_>9 12 4 4 2. - 0 - -0.0136446999385953 - 0.2071769982576370 - -0.0427927710115910 - <_> - - <_> - - - - <_>14 8 6 9 -1. - <_>14 11 6 3 3. - 0 - 7.8315278515219688e-003 - 0.0360285192728043 - -0.0803370401263237 - <_> - - <_> - - - - <_>4 10 12 3 -1. - <_>4 11 12 1 3. - 0 - -0.0100357802584767 - -0.2225376963615418 - 0.0429500304162502 - <_> - - <_> - - - - <_>6 7 11 9 -1. - <_>6 10 11 3 3. - 0 - -0.0511321313679218 - 0.3058665096759796 - -0.0270545892417431 - <_> - - <_> - - - - <_>4 1 9 4 -1. - <_>7 4 3 4 3. - 1 - -0.0695447027683258 - 0.3468846082687378 - -0.0317362211644650 - <_> - - <_> - - - - <_>12 1 9 9 -1. - <_>15 1 3 9 3. - 0 - -0.0240793600678444 - 0.1329156011343002 - -0.0302777793258429 - <_> - - <_> - - - - <_>1 1 9 9 -1. - <_>4 1 3 9 3. - 0 - -6.6630518995225430e-003 - -0.1847348064184189 - 0.0787502527236938 - <_> - - <_> - - - - <_>14 1 6 6 -1. - <_>16 1 2 6 3. - 0 - 0.0431476905941963 - -9.1566536575555801e-003 - 0.2948581874370575 - <_> - - <_> - - - - <_>4 6 4 6 -1. - <_>6 6 2 6 2. - 0 - -0.0138083398342133 - -0.2847915887832642 - 0.0326221883296967 - <_> - - <_> - - - - <_>7 5 12 7 -1. - <_>10 5 6 7 2. - 0 - 0.1635189950466156 - -3.7377059925347567e-003 - 0.5604218244552612 - <_> - - <_> - - - - <_>3 5 12 7 -1. - <_>6 5 6 7 2. - 0 - -0.0240861494094133 - 0.1584143042564392 - -0.0662945136427879 - -30.5550003051757810 - 28 - -1 - diff --git a/data/hogcascades/hogcascade_pedestrians.xml b/data/hogcascades/hogcascade_pedestrians.xml deleted file mode 100644 index f646c9d..0000000 --- a/data/hogcascades/hogcascade_pedestrians.xml +++ /dev/null @@ -1,3986 +0,0 @@ - - - - BOOST - HOG - 96 - 48 - - GAB - 9.9500000476837158e-01 - 5.0000000000000000e-01 - 9.4999999999999996e-01 - 1 - 100 - - 0 - 36 - 15 - - - <_> - 5 - -7.4773830175399780e-01 - - <_> - - 0 -1 352 1.5149119310081005e-02 - - -7.2157478332519531e-01 7.3052006959915161e-01 - <_> - - 0 -1 339 3.7586629390716553e-02 - - -4.8785275220870972e-01 6.6180247068405151e-01 - <_> - - 0 -1 141 3.4038446843624115e-02 - - -6.0242265462875366e-01 5.5909192562103271e-01 - <_> - - 0 -1 235 3.2107092440128326e-02 - - -4.6153610944747925e-01 5.7118606567382812e-01 - <_> - - 0 -1 158 1.5392595902085304e-02 - - 3.7599274516105652e-01 -5.6218206882476807e-01 - - <_> - 8 - -1.1153992414474487e+00 - - <_> - - 0 -1 291 2.6056792587041855e-02 - - -3.5386690497398376e-01 7.4421298503875732e-01 - <_> - - 0 -1 281 2.7038652449846268e-02 - - -4.4826781749725342e-01 5.7312715053558350e-01 - <_> - - 0 -1 87 2.0648468285799026e-02 - - 5.1690024137496948e-01 -4.6962317824363708e-01 - <_> - - 0 -1 222 3.4239932894706726e-02 - - -4.0093562006950378e-01 5.1903754472732544e-01 - <_> - - 0 -1 191 1.5181843191385269e-02 - - 3.6930915713310242e-01 -6.3566577434539795e-01 - <_> - - 0 -1 215 2.5590915232896805e-02 - - -4.6027383208274841e-01 4.2719814181327820e-01 - <_> - - 0 -1 319 1.3583375141024590e-02 - - -7.2019070386886597e-01 2.6437741518020630e-01 - <_> - - 0 -1 154 3.6607541143894196e-02 - - -5.2001053094863892e-01 3.3129671216011047e-01 - - <_> - 9 - -1.1758594512939453e+00 - - <_> - - 0 -1 343 3.8235597312450409e-02 - - 6.6281318664550781e-01 -4.3764784932136536e-01 - <_> - - 0 -1 246 3.4951344132423401e-02 - - -2.7101355791091919e-01 6.3058525323867798e-01 - <_> - - 0 -1 142 4.9028784036636353e-02 - - -5.0216394662857056e-01 4.6368971467018127e-01 - <_> - - 0 -1 222 3.9998225867748260e-02 - - -3.4643593430519104e-01 5.4380100965499878e-01 - <_> - - 0 -1 215 3.7188939750194550e-02 - - -3.0966973304748535e-01 5.5211979150772095e-01 - <_> - - 0 -1 174 1.5790924429893494e-02 - - 3.0823510885238647e-01 -5.6646531820297241e-01 - <_> - - 0 -1 235 4.0689803659915924e-02 - - -3.4229642152786255e-01 5.3844648599624634e-01 - <_> - - 0 -1 389 1.7860446125268936e-02 - - -5.5334877967834473e-01 2.5605210661888123e-01 - <_> - - 0 -1 333 1.3136577792465687e-02 - - -7.3952680826187134e-01 1.7197811603546143e-01 - - <_> - 16 - -1.1947091817855835e+00 - - <_> - - 0 -1 267 2.9602605849504471e-02 - - -1.5583258867263794e-01 6.8996644020080566e-01 - <_> - - 0 -1 144 1.8591046333312988e-02 - - 3.5206872224807739e-01 -5.9619015455245972e-01 - <_> - - 0 -1 137 3.1888354569673538e-02 - - -4.6452161669731140e-01 3.6019989848136902e-01 - <_> - - 0 -1 276 1.9890336319804192e-02 - - -5.8890694379806519e-01 2.7484476566314697e-01 - <_> - - 0 -1 272 3.5785537213087082e-02 - - -3.6444014310836792e-01 4.2384833097457886e-01 - <_> - - 0 -1 171 3.3389784395694733e-02 - - -4.9679115414619446e-01 3.0011394619941711e-01 - <_> - - 0 -1 109 1.7280768603086472e-02 - - 3.6484482884407043e-01 -3.6291497945785522e-01 - <_> - - 0 -1 256 3.8766704499721527e-02 - - -2.5569698214530945e-01 4.5890298485755920e-01 - <_> - - 0 -1 91 2.7794418856501579e-02 - - -3.1639650464057922e-01 3.5169041156768799e-01 - <_> - - 0 -1 356 2.2687412798404694e-02 - - -4.7676536440849304e-01 2.1583864092826843e-01 - <_> - - 0 -1 84 4.3383773416280746e-02 - - -1.9801677763462067e-01 5.5397444963455200e-01 - <_> - - 0 -1 185 3.7482082843780518e-02 - - -3.9640232920646667e-01 2.9216948151588440e-01 - <_> - - 0 -1 10 6.9366261363029480e-02 - - -1.6931630671024323e-01 5.9330856800079346e-01 - <_> - - 0 -1 128 1.9471727311611176e-02 - - -4.1056692600250244e-01 2.4197265505790710e-01 - <_> - - 0 -1 285 1.7909351736307144e-02 - - 2.6627296209335327e-01 -3.2458198070526123e-01 - <_> - - 0 -1 201 4.6794384717941284e-02 - - -1.6228257119655609e-01 5.1329153776168823e-01 - - <_> - 17 - -9.0973609685897827e-01 - - <_> - - 0 -1 135 2.3856874555349350e-02 - - 7.0977918803691864e-02 6.9912153482437134e-01 - <_> - - 0 -1 156 1.7264183610677719e-02 - - 3.3970844745635986e-01 -5.3391200304031372e-01 - <_> - - 0 -1 234 1.9154762849211693e-02 - - 3.1814944744110107e-01 -4.2153197526931763e-01 - <_> - - 0 -1 338 4.5807309448719025e-02 - - -2.2852534055709839e-01 5.2349030971527100e-01 - <_> - - 0 -1 326 1.6635738313198090e-02 - - -6.2276625633239746e-01 1.9962249696254730e-01 - <_> - - 0 -1 97 4.7933962196111679e-02 - - -2.4796873331069946e-01 4.5297086238861084e-01 - <_> - - 0 -1 204 2.7708321809768677e-02 - - -5.3516471385955811e-01 2.0813040435314178e-01 - <_> - - 0 -1 345 3.3218063414096832e-02 - - 1.8686634302139282e-01 -5.7147103548049927e-01 - <_> - - 0 -1 94 2.5231953710317612e-02 - - -3.5735231637954712e-01 2.6227018237113953e-01 - <_> - - 0 -1 252 6.5917596220970154e-02 - - -1.7371983826160431e-01 5.5358475446701050e-01 - <_> - - 0 -1 397 1.9202515482902527e-02 - - -4.5851269364356995e-01 2.2202965617179871e-01 - <_> - - 0 -1 319 1.5277124941349030e-02 - - -5.7695335149765015e-01 1.6361239552497864e-01 - <_> - - 0 -1 258 1.5292022377252579e-02 - - 2.1122620999813080e-01 -4.5840665698051453e-01 - <_> - - 0 -1 408 3.2990656793117523e-02 - - -4.8911759257316589e-01 2.0797151327133179e-01 - <_> - - 0 -1 106 3.8935579359531403e-02 - - -2.1567581593990326e-01 4.5372936129570007e-01 - <_> - - 0 -1 375 2.3524215444922447e-02 - - 1.9085225462913513e-01 -4.2954295873641968e-01 - <_> - - 0 -1 150 3.5664834082126617e-02 - - -2.2717741131782532e-01 3.6430290341377258e-01 - - <_> - 23 - -1.1312623023986816e+00 - - <_> - - 0 -1 360 2.7237605303525925e-02 - - -1.3005600869655609e-01 6.2063622474670410e-01 - <_> - - 0 -1 35 1.5457786619663239e-02 - - 3.9330831170082092e-01 -3.0358260869979858e-01 - <_> - - 0 -1 222 4.9070447683334351e-02 - - -2.3332066833972931e-01 4.7401455044746399e-01 - <_> - - 0 -1 304 1.8720947206020355e-02 - - 2.2771716117858887e-01 -5.6522828340530396e-01 - <_> - - 0 -1 202 3.8210235536098480e-02 - - -2.7802225947380066e-01 4.3542638421058655e-01 - <_> - - 0 -1 92 2.6717394590377808e-02 - - -3.6837801337242126e-01 2.9116657376289368e-01 - <_> - - 0 -1 151 2.7231091633439064e-02 - - -4.2188262939453125e-01 2.2320161759853363e-01 - <_> - - 0 -1 215 4.3489985167980194e-02 - - -2.3963752388954163e-01 4.7450444102287292e-01 - <_> - - 0 -1 374 5.8235637843608856e-02 - - -1.8371292948722839e-01 4.0496450662612915e-01 - <_> - - 0 -1 76 2.9798872768878937e-02 - - -2.4578784406185150e-01 3.2878914475440979e-01 - <_> - - 0 -1 111 4.7885790467262268e-02 - - -1.2591503560543060e-01 6.2480401992797852e-01 - <_> - - 0 -1 188 3.4020651131868362e-02 - - -4.4559559226036072e-01 1.6698820888996124e-01 - <_> - - 0 -1 164 1.3041117228567600e-02 - - -5.3376603126525879e-01 1.4401918649673462e-01 - <_> - - 0 -1 272 2.4463854730129242e-02 - - -4.0139153599739075e-01 1.7714020609855652e-01 - <_> - - 0 -1 284 2.2825594991445541e-02 - - 1.7576573789119720e-01 -4.0140661597251892e-01 - <_> - - 0 -1 319 1.1311025358736515e-02 - - -7.0247244834899902e-01 9.1130860149860382e-02 - <_> - - 0 -1 84 3.7818603217601776e-02 - - -2.0045366883277893e-01 3.6091402173042297e-01 - <_> - - 0 -1 123 1.0495018213987350e-02 - - 3.0858317017555237e-01 -2.4268315732479095e-01 - <_> - - 0 -1 389 1.2330400757491589e-02 - - -7.1054571866989136e-01 8.9192166924476624e-02 - <_> - - 0 -1 115 4.7990530729293823e-02 - - -1.7858967185020447e-01 3.6234906315803528e-01 - <_> - - 0 -1 305 2.1023772656917572e-02 - - 1.5675763785839081e-01 -4.3989735841751099e-01 - <_> - - 0 -1 254 3.8850005716085434e-02 - - -1.8820044398307800e-01 3.4962168335914612e-01 - <_> - - 0 -1 347 2.8050413355231285e-02 - - -3.0509811639785767e-01 1.9749833643436432e-01 - - <_> - 27 - -1.0298318862915039e+00 - - <_> - - 0 -1 237 2.0085353404283524e-02 - - 6.8383973836898804e-01 1.0699717700481415e-01 - <_> - - 0 -1 45 4.8421140760183334e-02 - - -1.3240151107311249e-01 5.1609915494918823e-01 - <_> - - 0 -1 82 3.8163051009178162e-02 - - -3.4365755319595337e-01 2.8352063894271851e-01 - <_> - - 0 -1 158 1.2671290896832943e-02 - - 2.1707102656364441e-01 -4.6296969056129456e-01 - <_> - - 0 -1 219 4.9968473613262177e-02 - - -2.0395633578300476e-01 4.8772707581520081e-01 - <_> - - 0 -1 29 3.6861550062894821e-02 - - -2.4139428138732910e-01 3.5726866126060486e-01 - <_> - - 0 -1 256 4.2565550655126572e-02 - - -2.1208253502845764e-01 3.8207599520683289e-01 - <_> - - 0 -1 188 5.0948105752468109e-02 - - -3.5843509435653687e-01 2.3258960247039795e-01 - <_> - - 0 -1 281 2.1425981074571609e-02 - - -5.2376288175582886e-01 1.5590295195579529e-01 - <_> - - 0 -1 332 1.3647775165736675e-02 - - -6.1688733100891113e-01 1.0927138477563858e-01 - <_> - - 0 -1 260 1.8924936652183533e-02 - - 2.1575494110584259e-01 -3.6787825822830200e-01 - <_> - - 0 -1 380 5.5247403681278229e-02 - - -1.9455035030841827e-01 3.4366169571876526e-01 - <_> - - 0 -1 335 2.0190875977277756e-02 - - -3.6711192131042480e-01 1.8107001483440399e-01 - <_> - - 0 -1 346 3.7939853966236115e-02 - - 1.3768656551837921e-01 -4.6894323825836182e-01 - <_> - - 0 -1 69 9.1459471732378006e-03 - - 3.5288289189338684e-01 -2.1019902825355530e-01 - <_> - - 0 -1 399 9.7939893603324890e-03 - - -8.4028327465057373e-01 7.8037321567535400e-02 - <_> - - 0 -1 166 1.6496714204549789e-02 - - -5.3407979011535645e-01 1.1492820084095001e-01 - <_> - - 0 -1 24 3.6862336099147797e-02 - - -2.0891386270523071e-01 2.9305332899093628e-01 - <_> - - 0 -1 374 3.9162468165159225e-02 - - -2.3828795552253723e-01 2.3572438955307007e-01 - <_> - - 0 -1 106 5.3227715194225311e-02 - - -1.1534099280834198e-01 5.0998371839523315e-01 - <_> - - 0 -1 292 3.6753699183464050e-02 - - -2.2679540514945984e-01 2.5717708468437195e-01 - <_> - - 0 -1 377 8.3144977688789368e-03 - - -6.3354510068893433e-01 8.7934792041778564e-02 - <_> - - 0 -1 33 7.2001896798610687e-02 - - -1.1218450218439102e-01 4.8822814226150513e-01 - <_> - - 0 -1 230 1.4469072222709656e-02 - - 2.1301060914993286e-01 -2.1902599930763245e-01 - <_> - - 0 -1 403 9.8585635423660278e-03 - - -5.5979317426681519e-01 8.5896357893943787e-02 - <_> - - 0 -1 220 2.3483691737055779e-02 - - 1.1298619210720062e-01 -3.8618877530097961e-01 - <_> - - 0 -1 178 5.9933196753263474e-03 - - -5.3726577758789062e-01 9.0948425233364105e-02 - - <_> - 34 - -1.0942479372024536e+00 - - <_> - - 0 -1 235 3.6536104977130890e-02 - - 1.9647644460201263e-01 6.9540560245513916e-01 - <_> - - 0 -1 371 3.2121933996677399e-02 - - -1.6034141182899475e-01 4.1880574822425842e-01 - <_> - - 0 -1 142 4.3577149510383606e-02 - - -4.5058783888816833e-01 2.1058270335197449e-01 - <_> - - 0 -1 222 2.8153307735919952e-02 - - -4.0950176119804382e-01 2.0908586680889130e-01 - <_> - - 0 -1 316 4.3106514960527420e-02 - - -1.9041596353054047e-01 4.3768414855003357e-01 - <_> - - 0 -1 122 7.4041862972080708e-03 - - 4.1894209384918213e-01 -1.9011391699314117e-01 - <_> - - 0 -1 157 1.6510343179106712e-02 - - 1.4369004964828491e-01 -4.7289690375328064e-01 - <_> - - 0 -1 162 1.2839104980230331e-02 - - -4.6771577000617981e-01 1.4251045882701874e-01 - <_> - - 0 -1 92 1.6060426831245422e-02 - - -5.1332229375839233e-01 1.2367062270641327e-01 - <_> - - 0 -1 329 2.3882389068603516e-02 - - 1.4602147042751312e-01 -4.4274711608886719e-01 - <_> - - 0 -1 103 3.1255017966032028e-02 - - -3.5572269558906555e-01 1.7880403995513916e-01 - <_> - - 0 -1 6 1.6088826581835747e-02 - - 2.3779444396495819e-01 -2.4586609005928040e-01 - <_> - - 0 -1 343 4.1388049721717834e-02 - - 8.8665485382080078e-02 -6.4651757478713989e-01 - <_> - - 0 -1 394 2.7607444673776627e-02 - - 1.1070463806390762e-01 -4.6220114827156067e-01 - <_> - - 0 -1 361 1.9766032695770264e-02 - - -4.7855651378631592e-01 1.0003557056188583e-01 - <_> - - 0 -1 30 4.1242823004722595e-02 - - -1.4716184139251709e-01 3.5464936494827271e-01 - <_> - - 0 -1 154 4.5376919209957123e-02 - - -2.6911497116088867e-01 1.9488053023815155e-01 - <_> - - 0 -1 287 1.5769151970744133e-02 - - 2.2650752961635590e-01 -2.4712686240673065e-01 - <_> - - 0 -1 255 2.6672195643186569e-02 - - -1.9842943549156189e-01 2.5844731926918030e-01 - <_> - - 0 -1 112 3.2237760722637177e-02 - - -1.9061625003814697e-01 2.6821178197860718e-01 - <_> - - 0 -1 74 1.9332654774188995e-02 - - 1.6823272407054901e-01 -3.0788516998291016e-01 - <_> - - 0 -1 243 7.3547840118408203e-02 - - 9.1615833342075348e-02 -5.0179886817932129e-01 - <_> - - 0 -1 21 1.2525960803031921e-02 - - 2.3779673874378204e-01 -2.0396140217781067e-01 - <_> - - 0 -1 324 4.9661640077829361e-03 - - -7.6614838838577271e-01 6.1269875615835190e-02 - <_> - - 0 -1 175 2.2441711276769638e-02 - - 1.3196066021919250e-01 -3.5895580053329468e-01 - <_> - - 0 -1 372 1.0201791301369667e-02 - - -6.6678810119628906e-01 6.5755382180213928e-02 - <_> - - 0 -1 46 1.6904029995203018e-02 - - 1.8288742005825043e-01 -2.4392281472682953e-01 - <_> - - 0 -1 326 2.4186503142118454e-02 - - -2.7055114507675171e-01 1.6063591837882996e-01 - <_> - - 0 -1 266 3.5995054990053177e-02 - - -1.9926220178604126e-01 2.1623481810092926e-01 - <_> - - 0 -1 386 3.7790406495332718e-02 - - -1.5248920023441315e-01 2.7407574653625488e-01 - <_> - - 0 -1 185 1.8160825595259666e-02 - - -5.6231391429901123e-01 8.5356920957565308e-02 - <_> - - 0 -1 389 2.3590657860040665e-02 - - -2.7612343430519104e-01 1.6488939523696899e-01 - <_> - - 0 -1 41 3.9401575922966003e-02 - - -1.5084822475910187e-01 3.0135068297386169e-01 - <_> - - 0 -1 196 7.5395773164927959e-03 - - -7.2811645269393921e-01 5.9477921575307846e-02 - - <_> - 40 - -1.0667979717254639e+00 - - <_> - - 0 -1 135 3.3803708851337433e-02 - - 2.0294502377510071e-01 6.8919557332992554e-01 - <_> - - 0 -1 235 4.4259797781705856e-02 - - -1.8319618701934814e-01 4.0606230497360229e-01 - <_> - - 0 -1 305 1.7499379813671112e-02 - - 1.8021285533905029e-01 -5.0267386436462402e-01 - <_> - - 0 -1 225 1.7421444877982140e-02 - - 2.0643070340156555e-01 -3.6459740996360779e-01 - <_> - - 0 -1 272 4.1447594761848450e-02 - - -2.1964523196220398e-01 3.1299889087677002e-01 - <_> - - 0 -1 3 1.0844048112630844e-02 - - 2.5269708037376404e-01 -2.4235825240612030e-01 - <_> - - 0 -1 136 4.3476268649101257e-02 - - -1.7678391933441162e-01 3.5271537303924561e-01 - <_> - - 0 -1 165 3.1896732747554779e-02 - - -3.8901832699775696e-01 1.5926574170589447e-01 - <_> - - 0 -1 216 3.3719871193170547e-02 - - -1.6785654425621033e-01 3.4403425455093384e-01 - <_> - - 0 -1 94 1.6506414860486984e-02 - - -4.5513299107551575e-01 1.3159599900245667e-01 - <_> - - 0 -1 309 5.6165158748626709e-02 - - -1.8263947963714600e-01 3.1392019987106323e-01 - <_> - - 0 -1 150 2.9371824115514755e-02 - - -2.4799329042434692e-01 2.2645363211631775e-01 - <_> - - 0 -1 277 2.0845592021942139e-02 - - -5.6128650903701782e-01 1.0008560866117477e-01 - <_> - - 0 -1 125 1.3332892209291458e-02 - - 1.8940114974975586e-01 -2.5059500336647034e-01 - <_> - - 0 -1 111 5.9525385499000549e-02 - - -8.4326848387718201e-02 5.9320241212844849e-01 - <_> - - 0 -1 91 3.2087143510580063e-02 - - -2.1008726954460144e-01 2.2367969155311584e-01 - <_> - - 0 -1 171 2.8348915278911591e-02 - - -3.8646319508552551e-01 1.2766058743000031e-01 - <_> - - 0 -1 280 3.3310860395431519e-02 - - -1.7685657739639282e-01 2.8453165292739868e-01 - <_> - - 0 -1 27 3.9370644837617874e-02 - - -1.6512715816497803e-01 2.8704455494880676e-01 - <_> - - 0 -1 147 8.3449587225914001e-02 - - -1.1813610792160034e-01 4.2421570420265198e-01 - <_> - - 0 -1 352 1.7090287059545517e-02 - - -5.5372512340545654e-01 8.9624352753162384e-02 - <_> - - 0 -1 384 8.3843227475881577e-03 - - -5.9863013029098511e-01 6.8536214530467987e-02 - <_> - - 0 -1 271 1.4468373730778694e-02 - - -4.8452723026275635e-01 7.8063711524009705e-02 - <_> - - 0 -1 330 2.4037588387727737e-02 - - 1.3170041143894196e-01 -3.4924519062042236e-01 - <_> - - 0 -1 84 5.7554122060537338e-02 - - -9.5674909651279449e-02 4.4177547097206116e-01 - <_> - - 0 -1 257 4.9626484513282776e-02 - - -1.9171085953712463e-01 2.3156909644603729e-01 - <_> - - 0 -1 142 6.7105665802955627e-02 - - -1.9868017733097076e-01 2.1714982390403748e-01 - <_> - - 0 -1 373 2.4514596909284592e-02 - - -2.2806458175182343e-01 1.7530490458011627e-01 - <_> - - 0 -1 288 4.5362018048763275e-02 - - 6.0322988778352737e-02 -5.9761273860931396e-01 - <_> - - 0 -1 241 1.9888341426849365e-02 - - 1.3828387856483459e-01 -2.7181312441825867e-01 - <_> - - 0 -1 348 7.2217527776956558e-03 - - -6.4959281682968140e-01 5.4709441959857941e-02 - <_> - - 0 -1 205 3.6005795001983643e-02 - - -1.1102730780839920e-01 3.4471026062965393e-01 - <_> - - 0 -1 320 1.3334888033568859e-02 - - -4.8756721615791321e-01 7.6772011816501617e-02 - <_> - - 0 -1 259 2.2652450948953629e-02 - - 1.2517645955085754e-01 -3.1397601962089539e-01 - <_> - - 0 -1 78 3.0479673296213150e-02 - - -1.6392000019550323e-01 2.2823038697242737e-01 - <_> - - 0 -1 294 3.2174132764339447e-02 - - 7.2459667921066284e-02 -5.0438696146011353e-01 - <_> - - 0 -1 250 2.0307323429733515e-03 - - -6.0100507736206055e-01 6.2978878617286682e-02 - <_> - - 0 -1 193 2.4996384978294373e-02 - - 9.4787009060382843e-02 -3.3236780762672424e-01 - <_> - - 0 -1 184 9.4616198912262917e-03 - - -6.1198323965072632e-01 5.4307788610458374e-02 - <_> - - 0 -1 108 6.1800219118595123e-02 - - -8.1825248897075653e-02 4.7097754478454590e-01 - - <_> - 49 - -1.1365391016006470e+00 - - <_> - - 0 -1 105 2.9898788779973984e-02 - - 6.4444082975387573e-01 1.5926423668861389e-01 - <_> - - 0 -1 135 4.3845266103744507e-02 - - -1.3981340825557709e-01 4.3804591894149780e-01 - <_> - - 0 -1 236 4.9079112708568573e-02 - - -1.8019071221351624e-01 3.8800683617591858e-01 - <_> - - 0 -1 191 1.3924567960202694e-02 - - 1.5545988082885742e-01 -4.4299390912055969e-01 - <_> - - 0 -1 349 2.7049161493778229e-02 - - -5.1695418357849121e-01 1.1857955157756805e-01 - <_> - - 0 -1 213 1.3575891032814980e-02 - - 2.0789936184883118e-01 -2.8043094277381897e-01 - <_> - - 0 -1 345 2.7712848037481308e-02 - - 1.5637956559658051e-01 -3.6645907163619995e-01 - <_> - - 0 -1 66 1.3193745166063309e-02 - - 2.3904225230216980e-01 -2.2799262404441833e-01 - <_> - - 0 -1 29 5.1669768989086151e-02 - - -1.5179835259914398e-01 3.3588418364524841e-01 - <_> - - 0 -1 389 2.0016321912407875e-02 - - -3.7837767601013184e-01 1.4262075722217560e-01 - <_> - - 0 -1 276 1.7536439001560211e-02 - - -4.7328859567642212e-01 1.0360060632228851e-01 - <_> - - 0 -1 198 1.9453909248113632e-02 - - 1.6739392280578613e-01 -3.2834252715110779e-01 - <_> - - 0 -1 204 4.7895789146423340e-02 - - -2.8093844652175903e-01 1.8732315301895142e-01 - <_> - - 0 -1 386 3.6252494901418686e-02 - - -1.9594472646713257e-01 2.9072594642639160e-01 - <_> - - 0 -1 87 1.1202009394764900e-02 - - 2.5409469008445740e-01 -1.6037191450595856e-01 - <_> - - 0 -1 279 1.8624890595674515e-02 - - -3.8854196667671204e-01 1.1531944572925568e-01 - <_> - - 0 -1 381 2.0409123972058296e-02 - - 1.5490253269672394e-01 -2.9211193323135376e-01 - <_> - - 0 -1 396 1.4438996091485023e-02 - - -5.8407187461853027e-01 7.3514230549335480e-02 - <_> - - 0 -1 44 4.6211585402488708e-02 - - -1.2724950909614563e-01 3.5867068171501160e-01 - <_> - - 0 -1 282 2.1834429353475571e-02 - - -4.8774343729019165e-01 8.8088802993297577e-02 - <_> - - 0 -1 302 1.4306938275694847e-02 - - -3.9986306428909302e-01 9.5921404659748077e-02 - <_> - - 0 -1 7 1.5015116892755032e-02 - - 2.0611824095249176e-01 -2.1622006595134735e-01 - <_> - - 0 -1 26 3.4759372472763062e-02 - - -1.5017031133174896e-01 2.4653677642345428e-01 - <_> - - 0 -1 209 1.6483131796121597e-02 - - 1.1389654874801636e-01 -3.4744158387184143e-01 - <_> - - 0 -1 155 4.5423090457916260e-02 - - 1.1709145456552505e-01 -3.6127036809921265e-01 - <_> - - 0 -1 297 9.8602399230003357e-03 - - -5.9805208444595337e-01 6.4656950533390045e-02 - <_> - - 0 -1 328 4.4437684118747711e-02 - - -1.7433795332908630e-01 2.1107853949069977e-01 - <_> - - 0 -1 272 2.4257807061076164e-02 - - -3.0487525463104248e-01 1.1572900414466858e-01 - <_> - - 0 -1 341 1.5823580324649811e-02 - - -4.1735991835594177e-01 8.0870188772678375e-02 - <_> - - 0 -1 101 5.5421203374862671e-02 - - -9.2224739491939545e-02 4.2088964581489563e-01 - <_> - - 0 -1 238 9.7968988120555878e-03 - - 3.0837103724479675e-01 -1.1570020020008087e-01 - <_> - - 0 -1 242 3.4521829336881638e-02 - - -1.5905003249645233e-01 2.4456644058227539e-01 - <_> - - 0 -1 166 1.8127705901861191e-02 - - -4.1122585535049438e-01 9.3564964830875397e-02 - <_> - - 0 -1 325 9.5051340758800507e-03 - - -6.7785978317260742e-01 4.6322401612997055e-02 - <_> - - 0 -1 226 5.9901960194110870e-02 - - -6.5578587353229523e-02 5.8266454935073853e-01 - <_> - - 0 -1 100 5.4452434182167053e-02 - - -7.6557263731956482e-02 4.4653451442718506e-01 - <_> - - 0 -1 255 3.6866582930088043e-02 - - -1.0719012469053268e-01 2.9660055041313171e-01 - <_> - - 0 -1 374 4.2660210281610489e-02 - - -1.7993980646133423e-01 1.8417468667030334e-01 - <_> - - 0 -1 378 8.9137665927410126e-03 - - -6.3697338104248047e-01 5.4773576557636261e-02 - <_> - - 0 -1 114 1.1400089599192142e-02 - - 2.5295448303222656e-01 -1.3493345677852631e-01 - <_> - - 0 -1 148 3.3225949853658676e-02 - - -1.5319000184535980e-01 2.2326107323169708e-01 - <_> - - 0 -1 185 4.4984422624111176e-02 - - -2.1095339953899384e-01 1.5410959720611572e-01 - <_> - - 0 -1 214 5.1712311804294586e-02 - - -9.3758344650268555e-02 3.6428454518318176e-01 - <_> - - 0 -1 153 3.3612012863159180e-02 - - -9.6304103732109070e-02 3.7952485680580139e-01 - <_> - - 0 -1 286 4.1407853364944458e-02 - - 6.4589627087116241e-02 -4.9156913161277771e-01 - <_> - - 0 -1 313 8.7404683232307434e-02 - - 5.2760947495698929e-02 -5.3573220968246460e-01 - <_> - - 0 -1 70 1.8000207841396332e-02 - - 1.3890655338764191e-01 -2.2383554279804230e-01 - <_> - - 0 -1 160 2.9085248708724976e-02 - - 8.1772908568382263e-02 -3.8127329945564270e-01 - <_> - - 0 -1 169 1.9239231944084167e-02 - - -1.9019705057144165e-01 1.7916351556777954e-01 - - <_> - 47 - -1.0116653442382812e+00 - - <_> - - 0 -1 144 2.7801316231489182e-02 - - 5.3492093086242676e-01 -2.4647414684295654e-01 - <_> - - 0 -1 203 4.5032106339931488e-02 - - -2.5259229540824890e-01 3.1522995233535767e-01 - <_> - - 0 -1 47 5.3729001432657242e-02 - - -1.9453412294387817e-01 3.6114758253097534e-01 - <_> - - 0 -1 18 7.1603775024414062e-02 - - -1.2540340423583984e-01 4.5672309398651123e-01 - <_> - - 0 -1 124 9.9766831845045090e-03 - - 2.6568776369094849e-01 -2.0229923725128174e-01 - <_> - - 0 -1 215 3.3997669816017151e-02 - - -2.2654175758361816e-01 2.2218938171863556e-01 - <_> - - 0 -1 64 5.9508979320526123e-02 - - -1.4012111723423004e-01 3.3521434664726257e-01 - <_> - - 0 -1 335 2.0788393914699554e-02 - - -3.1516796350479126e-01 1.4921028912067413e-01 - <_> - - 0 -1 293 2.6780268177390099e-02 - - 1.1207921802997589e-01 -4.6000838279724121e-01 - <_> - - 0 -1 81 3.4766957163810730e-02 - - -1.7912036180496216e-01 2.5626036524772644e-01 - <_> - - 0 -1 156 1.1539075523614883e-02 - - 1.6142164170742035e-01 -2.9306703805923462e-01 - <_> - - 0 -1 227 2.6543047279119492e-02 - - -2.6969066262245178e-01 1.6138702630996704e-01 - <_> - - 0 -1 244 1.6161387786269188e-02 - - 2.0254437625408173e-01 -2.3378078639507294e-01 - <_> - - 0 -1 228 4.5159406960010529e-02 - - -1.4788989722728729e-01 3.2111972570419312e-01 - <_> - - 0 -1 408 3.6860406398773193e-02 - - -3.4088444709777832e-01 1.5263999998569489e-01 - <_> - - 0 -1 168 1.5109863132238388e-02 - - -5.4718774557113647e-01 8.2045741379261017e-02 - <_> - - 0 -1 370 2.8016595169901848e-02 - - -2.3323598504066467e-01 1.9090305268764496e-01 - <_> - - 0 -1 88 6.3618853688240051e-02 - - -7.8254461288452148e-02 5.5258846282958984e-01 - <_> - - 0 -1 199 6.8580904044210911e-03 - - -6.3956487178802490e-01 6.9815970957279205e-02 - <_> - - 0 -1 232 2.0595733076334000e-02 - - 1.2898202240467072e-01 -3.2508504390716553e-01 - <_> - - 0 -1 269 2.8314685449004173e-02 - - -2.2404149174690247e-01 1.6563916206359863e-01 - <_> - - 0 -1 4 7.9108789563179016e-02 - - -6.2124527990818024e-02 6.0598611831665039e-01 - <_> - - 0 -1 281 1.6589259728789330e-02 - - -5.2956002950668335e-01 8.4093615412712097e-02 - <_> - - 0 -1 51 5.5094532668590546e-02 - - -1.0222712159156799e-01 3.9321076869964600e-01 - <_> - - 0 -1 390 1.0503903031349182e-02 - - -5.9208440780639648e-01 6.7801252007484436e-02 - <_> - - 0 -1 210 2.3749233223497868e-03 - - -5.3886908292770386e-01 5.9363964945077896e-02 - <_> - - 0 -1 131 1.8814763054251671e-02 - - -3.1261232495307922e-01 1.1180796474218369e-01 - <_> - - 0 -1 159 2.0527314394712448e-02 - - 1.2992724776268005e-01 -2.8644782304763794e-01 - <_> - - 0 -1 73 6.1145043000578880e-03 - - 3.3627521991729736e-01 -1.0495150089263916e-01 - <_> - - 0 -1 89 3.0952483415603638e-02 - - -1.6427862644195557e-01 2.0351713895797729e-01 - <_> - - 0 -1 171 1.5921674668788910e-02 - - -5.5327165126800537e-01 5.7676360011100769e-02 - <_> - - 0 -1 368 4.0456190705299377e-02 - - 6.0299206525087357e-02 -5.2531564235687256e-01 - <_> - - 0 -1 59 1.3443487696349621e-02 - - 1.4375637471675873e-01 -2.1119056642055511e-01 - <_> - - 0 -1 385 8.6331767961382866e-03 - - -4.4204819202423096e-01 7.8406274318695068e-02 - <_> - - 0 -1 48 5.8937132358551025e-02 - - -8.8852100074291229e-02 3.5532650351524353e-01 - <_> - - 0 -1 292 2.8679285198450089e-02 - - -2.2101837396621704e-01 1.4601917564868927e-01 - <_> - - 0 -1 398 1.2925801798701286e-02 - - -5.9588652849197388e-01 5.0016134977340698e-02 - <_> - - 0 -1 52 5.3128455765545368e-03 - - 2.6390919089317322e-01 -1.3713072240352631e-01 - <_> - - 0 -1 142 5.8427557349205017e-02 - - -2.0995871722698212e-01 1.5187016129493713e-01 - <_> - - 0 -1 312 1.2560402974486351e-02 - - -5.2102887630462646e-01 6.0699488967657089e-02 - <_> - - 0 -1 1 2.1175123751163483e-02 - - 1.2936566770076752e-01 -2.5762283802032471e-01 - <_> - - 0 -1 355 1.7020858824253082e-02 - - -3.3331403136253357e-01 9.9338315427303314e-02 - <_> - - 0 -1 200 7.2212636470794678e-02 - - 6.2653824687004089e-02 -4.8250997066497803e-01 - <_> - - 0 -1 194 7.3252543807029724e-02 - - -1.1153536289930344e-01 3.1560242176055908e-01 - <_> - - 0 -1 130 2.4769719690084457e-02 - - -2.2570444643497467e-01 1.6274058818817139e-01 - <_> - - 0 -1 31 1.4226272702217102e-02 - - 1.4799727499485016e-01 -2.0190501213073730e-01 - <_> - - 0 -1 404 1.0724326595664024e-02 - - -6.2658333778381348e-01 4.9919847398996353e-02 - - <_> - 54 - -9.9449658393859863e-01 - - <_> - - 0 -1 95 1.8665460869669914e-02 - - 6.7694538831710815e-01 2.6328191161155701e-01 - <_> - - 0 -1 245 6.2435247004032135e-02 - - -6.6552631556987762e-02 5.5264985561370850e-01 - <_> - - 0 -1 71 1.1597499251365662e-02 - - 2.3295506834983826e-01 -2.4157637357711792e-01 - <_> - - 0 -1 80 5.1069814711809158e-02 - - -1.7527097463607788e-01 3.2310706377029419e-01 - <_> - - 0 -1 382 6.4036197960376740e-02 - - -1.5130068361759186e-01 3.3947771787643433e-01 - <_> - - 0 -1 256 4.8696346580982208e-02 - - -1.5965068340301514e-01 3.2663738727569580e-01 - <_> - - 0 -1 61 5.3191006183624268e-02 - - -1.5307182073593140e-01 3.4863162040710449e-01 - <_> - - 0 -1 174 1.6555204987525940e-02 - - 1.2112359702587128e-01 -4.6862232685089111e-01 - <_> - - 0 -1 86 2.0337283611297607e-02 - - -4.5971450209617615e-01 1.0953056812286377e-01 - <_> - - 0 -1 365 1.1595044285058975e-02 - - -4.7979262471199036e-01 7.6207697391510010e-02 - <_> - - 0 -1 283 2.2066965699195862e-02 - - -4.8033183813095093e-01 7.8574642539024353e-02 - <_> - - 0 -1 117 1.0200021788477898e-02 - - 2.2034211456775665e-01 -1.8268603086471558e-01 - <_> - - 0 -1 315 4.7522459179162979e-02 - - -1.0461943596601486e-01 3.5927659273147583e-01 - <_> - - 0 -1 308 2.8317932039499283e-02 - - 8.9004360139369965e-02 -4.3938761949539185e-01 - <_> - - 0 -1 334 2.4015534669160843e-02 - - -3.4306117892265320e-01 1.1998588591814041e-01 - <_> - - 0 -1 31 2.1171212196350098e-02 - - 1.1449780315160751e-01 -3.3492365479469299e-01 - <_> - - 0 -1 383 8.7842330336570740e-02 - - 6.6495500504970551e-02 -5.6651270389556885e-01 - <_> - - 0 -1 9 1.9201990216970444e-02 - - -2.5308519601821899e-01 1.5692935883998871e-01 - <_> - - 0 -1 370 3.3523544669151306e-02 - - -1.5270863473415375e-01 2.3095367848873138e-01 - <_> - - 0 -1 171 4.4334933161735535e-02 - - -2.3225110769271851e-01 1.5393845736980438e-01 - <_> - - 0 -1 326 1.7828078940510750e-02 - - -4.3410968780517578e-01 8.7237603962421417e-02 - <_> - - 0 -1 366 2.7970856055617332e-02 - - 9.8533637821674347e-02 -3.8462772965431213e-01 - <_> - - 0 -1 340 8.2091763615608215e-02 - - -1.1092124134302139e-01 3.3764466643333435e-01 - <_> - - 0 -1 289 4.6008333563804626e-02 - - -1.1516174674034119e-01 2.9743531346321106e-01 - <_> - - 0 -1 341 1.3903729617595673e-02 - - -5.0074380636215210e-01 7.9755537211894989e-02 - <_> - - 0 -1 182 2.5103049352765083e-02 - - -1.6730682551860809e-01 2.2408586740493774e-01 - <_> - - 0 -1 67 2.9331450350582600e-03 - - -4.8622006177902222e-01 7.0578098297119141e-02 - <_> - - 0 -1 190 1.3889933004975319e-02 - - 1.0139058530330658e-01 -3.1855314970016479e-01 - <_> - - 0 -1 83 6.3016422092914581e-02 - - -7.6343230903148651e-02 4.4974201917648315e-01 - <_> - - 0 -1 310 2.3791689425706863e-02 - - -2.1932505071163177e-01 1.4710763096809387e-01 - <_> - - 0 -1 307 2.1487560123205185e-02 - - 1.2838844954967499e-01 -2.5909209251403809e-01 - <_> - - 0 -1 189 3.4274224191904068e-02 - - -9.5347620546817780e-02 3.7022551894187927e-01 - <_> - - 0 -1 303 7.1915900334715843e-03 - - -7.3691523075103760e-01 4.6294290572404861e-02 - <_> - - 0 -1 172 2.5272460654377937e-02 - - 9.5943376421928406e-02 -3.3830648660659790e-01 - <_> - - 0 -1 409 2.0854394882917404e-02 - - 1.3279491662979126e-01 -2.6329138875007629e-01 - <_> - - 0 -1 344 1.4316380023956299e-02 - - -4.5482146739959717e-01 7.0914179086685181e-02 - <_> - - 0 -1 231 2.8929179534316063e-02 - - 6.6486880183219910e-02 -4.5508390665054321e-01 - <_> - - 0 -1 20 1.0630194097757339e-02 - - 1.8809454143047333e-01 -1.6614237427711487e-01 - <_> - - 0 -1 350 9.7995914518833160e-02 - - 5.7244099676609039e-02 -5.8636969327926636e-01 - <_> - - 0 -1 298 5.1458822563290596e-03 - - -7.1203124523162842e-01 3.7936817854642868e-02 - <_> - - 0 -1 392 2.3478031158447266e-02 - - -3.0215761065483093e-01 8.8247083127498627e-02 - <_> - - 0 -1 17 3.6021061241626740e-02 - - -1.1509682238101959e-01 2.6338168978691101e-01 - <_> - - 0 -1 278 3.9570771157741547e-02 - - -1.2997727096080780e-01 2.3227843642234802e-01 - <_> - - 0 -1 185 4.6252459287643433e-02 - - -2.0763714611530304e-01 1.5233637392520905e-01 - <_> - - 0 -1 163 1.0493120178580284e-02 - - -3.7226682901382446e-01 7.4590153992176056e-02 - <_> - - 0 -1 262 3.8044206798076630e-02 - - -1.0903593897819519e-01 2.6904660463333130e-01 - <_> - - 0 -1 322 1.0875662788748741e-02 - - -6.7161810398101807e-01 4.4944703578948975e-02 - <_> - - 0 -1 60 2.4129729717969894e-02 - - 9.5554195344448090e-02 -2.9388493299484253e-01 - <_> - - 0 -1 327 2.7652573771774769e-03 - - -6.4378261566162109e-01 4.3076869100332260e-02 - <_> - - 0 -1 90 4.8550616949796677e-02 - - -8.8114514946937561e-02 3.4373363852500916e-01 - <_> - - 0 -1 194 6.7535176873207092e-02 - - -1.0665769875049591e-01 2.4410410225391388e-01 - <_> - - 0 -1 153 4.6423368155956268e-02 - - -5.9944093227386475e-02 4.7295922040939331e-01 - <_> - - 0 -1 237 1.0667273774743080e-02 - - 2.1510368585586548e-01 -1.1941892653703690e-01 - <_> - - 0 -1 396 1.6616852954030037e-02 - - -4.1614437103271484e-01 7.0346660912036896e-02 - - <_> - 64 - -1.0546809434890747e+00 - - <_> - - 0 -1 102 3.2909393310546875e-02 - - 1.3556618988513947e-01 5.9496569633483887e-01 - <_> - - 0 -1 18 5.7673007249832153e-02 - - -1.1456339061260223e-01 4.2552378773689270e-01 - <_> - - 0 -1 15 1.1992406100034714e-02 - - 2.4031037092208862e-01 -2.4737285077571869e-01 - <_> - - 0 -1 56 6.1344116926193237e-02 - - -1.4613483846187592e-01 3.6417004466056824e-01 - <_> - - 0 -1 23 3.5104401409626007e-02 - - -3.8308736681938171e-01 1.2162487953901291e-01 - <_> - - 0 -1 338 5.5985964834690094e-02 - - -1.3175597786903381e-01 3.9519834518432617e-01 - <_> - - 0 -1 265 4.5360349118709564e-02 - - -1.1925575137138367e-01 3.5105460882186890e-01 - <_> - - 0 -1 150 2.2281080484390259e-02 - - -3.0465376377105713e-01 1.4432303607463837e-01 - <_> - - 0 -1 224 3.2830841839313507e-02 - - -2.9900938272476196e-01 1.3699726760387421e-01 - <_> - - 0 -1 248 1.4167425222694874e-02 - - 1.2152181565761566e-01 -3.4019640088081360e-01 - <_> - - 0 -1 240 3.3475767821073532e-02 - - -1.1398931592702866e-01 3.3892172574996948e-01 - <_> - - 0 -1 253 5.6810773909091949e-02 - - -1.3839827477931976e-01 2.7739012241363525e-01 - <_> - - 0 -1 78 2.0613271743059158e-02 - - -2.8242266178131104e-01 1.4313375949859619e-01 - <_> - - 0 -1 308 1.6712650656700134e-02 - - 1.6265860199928284e-01 -2.4141319096088409e-01 - <_> - - 0 -1 201 2.9832722619175911e-02 - - -2.1411854028701782e-01 1.7730319499969482e-01 - <_> - - 0 -1 121 4.7100419178605080e-03 - - 3.5185843706130981e-01 -1.0267037153244019e-01 - <_> - - 0 -1 127 2.0623035728931427e-02 - - 1.2791988253593445e-01 -2.8007981181144714e-01 - <_> - - 0 -1 58 6.1587020754814148e-02 - - -7.1944102644920349e-02 4.9679103493690491e-01 - <_> - - 0 -1 275 1.8270082771778107e-02 - - -4.0494844317436218e-01 9.3867540359497070e-02 - <_> - - 0 -1 34 5.1193911582231522e-02 - - -9.8075203597545624e-02 3.5078194737434387e-01 - <_> - - 0 -1 134 1.2031028047204018e-02 - - 1.9643558561801910e-01 -1.6022813320159912e-01 - <_> - - 0 -1 195 5.9083811938762665e-03 - - -4.9917405843734741e-01 6.4527131617069244e-02 - <_> - - 0 -1 150 4.9596227705478668e-02 - - -1.1082161962985992e-01 2.9465663433074951e-01 - <_> - - 0 -1 343 4.8769481480121613e-02 - - 4.2230345308780670e-02 -7.6498138904571533e-01 - <_> - - 0 -1 186 2.4277199059724808e-02 - - 7.5935915112495422e-02 -4.0026673674583435e-01 - <_> - - 0 -1 206 2.5390535593032837e-02 - - -1.8416796624660492e-01 1.9858093559741974e-01 - <_> - - 0 -1 177 1.9438743591308594e-02 - - 1.2287277728319168e-01 -2.5645399093627930e-01 - <_> - - 0 -1 391 8.8542364537715912e-03 - - -6.3241440057754517e-01 4.8879984766244888e-02 - <_> - - 0 -1 357 3.0551470816135406e-02 - - -1.8552851676940918e-01 1.6086483001708984e-01 - <_> - - 0 -1 50 1.8117606639862061e-02 - - 2.3619586229324341e-01 -1.5224708616733551e-01 - <_> - - 0 -1 393 2.2853232920169830e-02 - - -3.2127961516380310e-01 9.5281556248664856e-02 - <_> - - 0 -1 88 7.7133789658546448e-02 - - -5.6924272328615189e-02 5.5168312788009644e-01 - <_> - - 0 -1 364 1.6538575291633606e-02 - - -6.1036610603332520e-01 5.3948421031236649e-02 - <_> - - 0 -1 166 3.3028811216354370e-02 - - -2.1796108782291412e-01 1.3436897099018097e-01 - <_> - - 0 -1 155 7.4932515621185303e-02 - - 6.3060440123081207e-02 -5.0771480798721313e-01 - <_> - - 0 -1 30 3.7362482398748398e-02 - - -1.2669509649276733e-01 2.3785883188247681e-01 - <_> - - 0 -1 299 7.3003470897674561e-03 - - -5.1063781976699829e-01 6.0329724103212357e-02 - <_> - - 0 -1 263 3.3306218683719635e-02 - - -1.6422729194164276e-01 1.8774913251399994e-01 - <_> - - 0 -1 112 4.0949136018753052e-02 - - -1.0705300420522690e-01 2.5951048731803894e-01 - <_> - - 0 -1 53 6.0007654130458832e-02 - - -5.7804863899946213e-02 4.8536598682403564e-01 - <_> - - 0 -1 270 8.3733513951301575e-02 - - -8.8066965341567993e-02 3.2750615477561951e-01 - <_> - - 0 -1 149 4.8994873650372028e-03 - - -6.3597649335861206e-01 4.7279179096221924e-02 - <_> - - 0 -1 239 1.2618229724466801e-02 - - 1.5810568630695343e-01 -1.8534006178379059e-01 - <_> - - 0 -1 16 4.9128290265798569e-03 - - -6.7431080341339111e-01 4.2064949870109558e-02 - <_> - - 0 -1 192 6.1659682542085648e-02 - - 7.7905796468257904e-02 -3.1210681796073914e-01 - <_> - - 0 -1 191 1.0398313403129578e-02 - - 1.3589595258235931e-01 -2.4312557280063629e-01 - <_> - - 0 -1 113 2.2464931011199951e-02 - - 9.4380743801593781e-02 -2.6920509338378906e-01 - <_> - - 0 -1 229 9.9546080455183983e-03 - - -6.1364966630935669e-01 3.8600925356149673e-02 - <_> - - 0 -1 98 5.9078827500343323e-02 - - -6.9042220711708069e-02 4.0226206183433533e-01 - <_> - - 0 -1 358 2.0355718210339546e-02 - - -3.2917183637619019e-01 8.5820250213146210e-02 - <_> - - 0 -1 72 4.8340834677219391e-02 - - -8.2636915147304535e-02 3.7525442242622375e-01 - <_> - - 0 -1 68 3.7296619266271591e-03 - - -4.4785124063491821e-01 6.0102187097072601e-02 - <_> - - 0 -1 234 1.5672549605369568e-02 - - 1.5237241983413696e-01 -1.6926215589046478e-01 - <_> - - 0 -1 221 8.1734046339988708e-02 - - 5.4154094308614731e-02 -5.2352732419967651e-01 - <_> - - 0 -1 120 1.1431444436311722e-02 - - 1.7892888188362122e-01 -1.4085929095745087e-01 - <_> - - 0 -1 351 5.8017624542117119e-03 - - -7.2548639774322510e-01 3.6602437496185303e-02 - <_> - - 0 -1 19 6.7446351051330566e-02 - - -6.3306964933872223e-02 4.2737153172492981e-01 - <_> - - 0 -1 318 7.9820938408374786e-03 - - -7.4366998672485352e-01 3.6713104695081711e-02 - <_> - - 0 -1 11 6.9536261260509491e-02 - - -8.0821603536605835e-02 3.3922439813613892e-01 - <_> - - 0 -1 145 3.7549443542957306e-02 - - 6.9156736135482788e-02 -3.5819274187088013e-01 - <_> - - 0 -1 152 1.0656273923814297e-02 - - -7.2513943910598755e-01 3.1234202906489372e-02 - <_> - - 0 -1 183 2.5280531495809555e-02 - - -1.9225510954856873e-01 1.3537347316741943e-01 - <_> - - 0 -1 363 4.4457316398620605e-02 - - 3.7981312721967697e-02 -6.7479836940765381e-01 - <_> - - 0 -1 249 1.2521247845143080e-04 - - -6.2205755710601807e-01 3.2420136034488678e-02 - - <_> - 73 - -1.0017215013504028e+00 - - <_> - - 0 -1 105 2.4735962972044945e-02 - - 6.4785188436508179e-01 2.2758445143699646e-01 - <_> - - 0 -1 44 6.3518315553665161e-02 - - -4.1365418583154678e-02 5.4869818687438965e-01 - <_> - - 0 -1 36 9.4195883721113205e-03 - - 2.6038098335266113e-01 -1.7342963814735413e-01 - <_> - - 0 -1 272 3.5093430429697037e-02 - - -2.2665421664714813e-01 1.9666101038455963e-01 - <_> - - 0 -1 63 1.1061885394155979e-02 - - 2.0353546738624573e-01 -2.0876882970333099e-01 - <_> - - 0 -1 47 5.9598404914140701e-02 - - -1.3412886857986450e-01 2.8034633398056030e-01 - <_> - - 0 -1 173 1.5450142323970795e-02 - - 1.0424488037824631e-01 -3.9602130651473999e-01 - <_> - - 0 -1 397 1.8680159002542496e-02 - - -3.8349124789237976e-01 1.0002009570598602e-01 - <_> - - 0 -1 402 3.3807259052991867e-02 - - -3.3930355310440063e-01 1.2061641365289688e-01 - <_> - - 0 -1 12 7.4018035084009171e-03 - - 2.6364955306053162e-01 -1.4020060002803802e-01 - <_> - - 0 -1 336 1.7433203756809235e-02 - - -3.8107573986053467e-01 9.7438894212245941e-02 - <_> - - 0 -1 89 4.0178414434194565e-02 - - -1.2612041831016541e-01 2.7031618356704712e-01 - <_> - - 0 -1 0 6.0638077557086945e-02 - - -1.1307135969400406e-01 2.9262986779212952e-01 - <_> - - 0 -1 389 2.4623382836580276e-02 - - -2.2446420788764954e-01 1.4744958281517029e-01 - <_> - - 0 -1 290 3.9106391370296478e-02 - - -1.7826075851917267e-01 2.0597907900810242e-01 - <_> - - 0 -1 38 2.7834912762045860e-02 - - -3.8111215829849243e-01 8.9661866426467896e-02 - <_> - - 0 -1 369 3.4408185631036758e-02 - - 1.0636640340089798e-01 -3.6162582039833069e-01 - <_> - - 0 -1 133 1.0959336161613464e-01 - - 4.1240800172090530e-02 -7.1632438898086548e-01 - <_> - - 0 -1 55 3.2452266663312912e-02 - - 6.5087780356407166e-02 -4.1960519552230835e-01 - <_> - - 0 -1 217 5.4920144379138947e-02 - - 9.6366412937641144e-02 -3.1108140945434570e-01 - <_> - - 0 -1 382 7.4698656797409058e-02 - - -1.0990877449512482e-01 2.9453867673873901e-01 - <_> - - 0 -1 332 1.2666454538702965e-02 - - -5.5246281623840332e-01 6.3385792076587677e-02 - <_> - - 0 -1 42 3.7707298994064331e-02 - - -1.5134002268314362e-01 1.9798284769058228e-01 - <_> - - 0 -1 197 3.6982268095016479e-02 - - -1.8963862955570221e-01 1.6592139005661011e-01 - <_> - - 0 -1 276 2.6210237294435501e-02 - - -2.3561659455299377e-01 1.4326202869415283e-01 - <_> - - 0 -1 273 1.8246090039610863e-02 - - 1.2638229131698608e-01 -2.4407584965229034e-01 - <_> - - 0 -1 167 2.6667824015021324e-02 - - 6.9522418081760406e-02 -4.7825774550437927e-01 - <_> - - 0 -1 101 4.1815117001533508e-02 - - -1.1861740797758102e-01 2.5843381881713867e-01 - <_> - - 0 -1 216 2.4072701111435890e-02 - - -1.7671245336532593e-01 1.6403034329414368e-01 - <_> - - 0 -1 321 1.2120285071432590e-02 - - -5.5707901716232300e-01 4.8198804259300232e-02 - <_> - - 0 -1 57 1.3616212643682957e-02 - - 1.4195388555526733e-01 -1.8388766050338745e-01 - <_> - - 0 -1 353 9.9695213139057159e-03 - - -5.6080347299575806e-01 5.1336046308279037e-02 - <_> - - 0 -1 176 9.9237188696861267e-02 - - -8.4744565188884735e-02 3.2638099789619446e-01 - <_> - - 0 -1 25 3.7445567548274994e-02 - - -1.1257749050855637e-01 2.4573321640491486e-01 - <_> - - 0 -1 179 3.8241371512413025e-02 - - -1.2643416225910187e-01 1.9334000349044800e-01 - <_> - - 0 -1 405 1.3448245823383331e-02 - - -5.4429870843887329e-01 4.9834873527288437e-02 - <_> - - 0 -1 165 4.4142831116914749e-02 - - -1.8847377598285675e-01 1.2911646068096161e-01 - <_> - - 0 -1 254 6.4688831567764282e-02 - - -6.9217003881931305e-02 4.0028157830238342e-01 - <_> - - 0 -1 53 5.8575954288244247e-02 - - -6.0475941747426987e-02 4.2772307991981506e-01 - <_> - - 0 -1 77 1.1222053319215775e-02 - - 2.0112392306327820e-01 -1.3156783580780029e-01 - <_> - - 0 -1 335 9.4986613839864731e-03 - - -6.8230766057968140e-01 3.7198062986135483e-02 - <_> - - 0 -1 161 8.9841037988662720e-03 - - -5.8327585458755493e-01 3.5930003970861435e-02 - <_> - - 0 -1 13 6.7835962399840355e-03 - - 2.2695730626583099e-01 -1.1493884772062302e-01 - <_> - - 0 -1 187 5.1899375393986702e-03 - - -7.1629756689071655e-01 3.4858833998441696e-02 - <_> - - 0 -1 5 6.3280604779720306e-02 - - -6.6279791295528412e-02 3.9587023854255676e-01 - <_> - - 0 -1 136 4.4401831924915314e-02 - - -1.0898534208536148e-01 2.1678060293197632e-01 - <_> - - 0 -1 347 2.7715172618627548e-02 - - -2.0937801897525787e-01 1.2542441487312317e-01 - <_> - - 0 -1 317 2.1837871521711349e-02 - - 8.9339092373847961e-02 -2.6766279339790344e-01 - <_> - - 0 -1 306 4.9154721200466156e-03 - - -4.9983385205268860e-01 5.2077054977416992e-02 - <_> - - 0 -1 311 2.6585884392261505e-02 - - -1.6169707477092743e-01 1.4095610380172729e-01 - <_> - - 0 -1 286 5.0314925611019135e-02 - - 3.5808511078357697e-02 -6.2886255979537964e-01 - <_> - - 0 -1 251 2.3879460990428925e-02 - - 8.6062356829643250e-02 -2.5804695487022400e-01 - <_> - - 0 -1 140 4.9669235944747925e-02 - - -4.4713549315929413e-02 5.1127582788467407e-01 - <_> - - 0 -1 129 7.4203774333000183e-02 - - -8.5694156587123871e-02 2.5295278429985046e-01 - <_> - - 0 -1 138 4.6431384980678558e-03 - - -6.1233133077621460e-01 3.7366155534982681e-02 - <_> - - 0 -1 40 5.2247926592826843e-02 - - -8.4081567823886871e-02 2.7305892109870911e-01 - <_> - - 0 -1 141 5.1341928541660309e-02 - - -1.6881528496742249e-01 1.3544729351997375e-01 - <_> - - 0 -1 164 2.2766537964344025e-02 - - -2.3369863629341125e-01 1.0711924731731415e-01 - <_> - - 0 -1 233 1.2284438125789165e-02 - - -4.6011406183242798e-01 5.2534077316522598e-02 - <_> - - 0 -1 43 2.4523537606000900e-02 - - 9.1649621725082397e-02 -2.6965776085853577e-01 - <_> - - 0 -1 116 6.6589027643203735e-02 - - -6.8442545831203461e-02 3.4471645951271057e-01 - <_> - - 0 -1 14 8.0686174333095551e-02 - - -3.9102286100387573e-02 5.3736394643783569e-01 - <_> - - 0 -1 337 1.3866674154996872e-02 - - -3.9964887499809265e-01 5.9886042028665543e-02 - <_> - - 0 -1 62 1.6880001872777939e-02 - - 1.2184502929449081e-01 -2.0639364421367645e-01 - <_> - - 0 -1 323 5.7127773761749268e-02 - - 8.2929193973541260e-02 -2.7692446112632751e-01 - <_> - - 0 -1 342 3.9122045040130615e-02 - - 3.7299778312444687e-02 -6.1657840013504028e-01 - <_> - - 0 -1 223 1.7894832417368889e-02 - - 1.4571423828601837e-01 -1.5307255089282990e-01 - <_> - - 0 -1 406 1.4890542253851891e-02 - - -2.9539492726325989e-01 7.5577899813652039e-02 - <_> - - 0 -1 119 1.5185782685875893e-02 - - 1.6211624443531036e-01 -1.7077782750129700e-01 - <_> - - 0 -1 401 7.5862407684326172e-03 - - -8.3635044097900391e-01 2.6230650022625923e-02 - <_> - - 0 -1 107 7.8573390841484070e-02 - - -4.8550911247730255e-02 5.1848882436752319e-01 - <_> - - 0 -1 184 7.1184257976710796e-03 - - -6.9117778539657593e-01 3.5236366093158722e-02 - <_> - - 0 -1 208 1.8060296773910522e-02 - - 7.1712046861648560e-02 -2.8598770499229431e-01 - - <_> - 66 - -9.3593156337738037e-01 - - <_> - - 0 -1 135 3.6235164850950241e-02 - - 2.5959107279777527e-01 6.5475034713745117e-01 - <_> - - 0 -1 104 1.6041299328207970e-02 - - 3.4271126985549927e-01 -1.3454577326774597e-01 - <_> - - 0 -1 126 1.1771091260015965e-02 - - 2.1354986727237701e-01 -2.1427741646766663e-01 - <_> - - 0 -1 272 4.8521537333726883e-02 - - -1.5072266757488251e-01 3.1238463521003723e-01 - <_> - - 0 -1 2 4.9052890390157700e-03 - - 3.8656437397003174e-01 -1.0882703214883804e-01 - <_> - - 0 -1 39 3.1850583851337433e-02 - - -1.9052696228027344e-01 2.3098929226398468e-01 - <_> - - 0 -1 172 3.6208137869834900e-02 - - 7.4774622917175293e-02 -4.9908718466758728e-01 - <_> - - 0 -1 354 1.7295781522989273e-02 - - -5.6907713413238525e-01 6.2078382819890976e-02 - <_> - - 0 -1 256 3.0972531065344810e-02 - - -2.2531478106975555e-01 1.6073043644428253e-01 - <_> - - 0 -1 93 4.7689776867628098e-02 - - -1.2031003832817078e-01 3.2669574022293091e-01 - <_> - - 0 -1 158 1.4887932687997818e-02 - - 1.0208155214786530e-01 -3.7894788384437561e-01 - <_> - - 0 -1 99 3.5810727626085281e-02 - - -2.6830124855041504e-01 1.4859032630920410e-01 - <_> - - 0 -1 146 2.7338899672031403e-02 - - 9.7476467490196228e-02 -3.9892432093620300e-01 - <_> - - 0 -1 110 5.7814918458461761e-02 - - -6.8911291658878326e-02 5.6632876396179199e-01 - <_> - - 0 -1 30 5.6642763316631317e-02 - - -8.6775369942188263e-02 3.8195505738258362e-01 - <_> - - 0 -1 212 3.4008264541625977e-02 - - -1.9706143438816071e-01 1.7401424050331116e-01 - <_> - - 0 -1 322 2.3729218170046806e-02 - - -2.8421404957771301e-01 1.1589094996452332e-01 - <_> - - 0 -1 132 1.2428058311343193e-02 - - -3.2965391874313354e-01 9.2809893190860748e-02 - <_> - - 0 -1 379 2.3588120937347412e-02 - - 9.6562243998050690e-02 -3.2788053154945374e-01 - <_> - - 0 -1 359 1.2904807925224304e-02 - - -5.0684076547622681e-01 5.9990908950567245e-02 - <_> - - 0 -1 37 1.9343098625540733e-02 - - -4.2304861545562744e-01 7.1619503200054169e-02 - <_> - - 0 -1 54 5.8683887124061584e-02 - - -1.1897763609886169e-01 2.8910380601882935e-01 - <_> - - 0 -1 314 7.7387332916259766e-02 - - 6.4371474087238312e-02 -4.8401272296905518e-01 - <_> - - 0 -1 32 1.5952927991747856e-02 - - 1.3915392756462097e-01 -1.9765122234821320e-01 - <_> - - 0 -1 218 1.4991804957389832e-02 - - -3.0661338567733765e-01 9.0627431869506836e-02 - <_> - - 0 -1 301 5.8532017283141613e-03 - - -5.8305358886718750e-01 4.6034123748540878e-02 - <_> - - 0 -1 65 9.3251187354326248e-03 - - 1.7550553381443024e-01 -1.6501483321189880e-01 - <_> - - 0 -1 75 2.2475536912679672e-02 - - -2.5033253431320190e-01 1.1100177466869354e-01 - <_> - - 0 -1 175 3.2452531158924103e-02 - - 6.9783955812454224e-02 -4.2088204622268677e-01 - <_> - - 0 -1 106 9.1266795992851257e-02 - - -4.3792236596345901e-02 6.9610071182250977e-01 - <_> - - 0 -1 387 8.0512259155511856e-03 - - -4.1337686777114868e-01 7.2663143277168274e-02 - <_> - - 0 -1 118 5.7529125362634659e-02 - - -7.9097419977188110e-02 3.6628520488739014e-01 - <_> - - 0 -1 396 1.0331628844141960e-02 - - -7.1585410833358765e-01 4.1666161268949509e-02 - <_> - - 0 -1 388 2.6609631255269051e-02 - - 5.9718802571296692e-02 -4.4557204842567444e-01 - <_> - - 0 -1 170 1.9581317901611328e-02 - - -2.3506633937358856e-01 1.2753143906593323e-01 - <_> - - 0 -1 140 4.5224994421005249e-02 - - -5.9275396168231964e-02 4.9855732917785645e-01 - <_> - - 0 -1 28 1.1585703119635582e-02 - - 2.8731283545494080e-01 -1.0442002862691879e-01 - <_> - - 0 -1 139 4.8658858984708786e-02 - - -1.9899384677410126e-01 1.4117087423801422e-01 - <_> - - 0 -1 247 2.6171270757913589e-02 - - 9.5432475209236145e-02 -3.2297986745834351e-01 - <_> - - 0 -1 22 1.0336546227335930e-02 - - 2.0490223169326782e-01 -1.4106391370296478e-01 - <_> - - 0 -1 400 2.2370018064975739e-02 - - -3.2311582565307617e-01 8.0236829817295074e-02 - <_> - - 0 -1 376 4.8868972808122635e-02 - - -7.5187265872955322e-02 3.6600896716117859e-01 - <_> - - 0 -1 79 2.8816960752010345e-02 - - -1.8595387041568756e-01 1.5604765713214874e-01 - <_> - - 0 -1 331 5.6826010346412659e-02 - - -1.1946620792150497e-01 2.0578666031360626e-01 - <_> - - 0 -1 362 1.1959284543991089e-02 - - -6.9594573974609375e-01 3.9588540792465210e-02 - <_> - - 0 -1 295 4.2123295366764069e-02 - - 5.2904155105352402e-02 -4.8233994841575623e-01 - <_> - - 0 -1 274 3.8260199129581451e-02 - - -1.2325955182313919e-01 2.3103201389312744e-01 - <_> - - 0 -1 407 1.2891152873635292e-02 - - -3.7091109156608582e-01 7.7288657426834106e-02 - <_> - - 0 -1 395 3.6757849156856537e-02 - - -1.0695543885231018e-01 2.7097389101982117e-01 - <_> - - 0 -1 319 1.9748253747820854e-02 - - -2.6692709326744080e-01 1.1164034157991409e-01 - <_> - - 0 -1 8 6.6089570522308350e-02 - - -1.6268984973430634e-01 1.7516276240348816e-01 - <_> - - 0 -1 181 1.1842563748359680e-02 - - 1.8089738488197327e-01 -1.4368705451488495e-01 - <_> - - 0 -1 211 9.6298125572502613e-04 - - -6.6003662347793579e-01 3.7299372255802155e-02 - <_> - - 0 -1 264 5.5496811866760254e-02 - - -7.9757250845432281e-02 3.5867783427238464e-01 - <_> - - 0 -1 85 4.5877113938331604e-02 - - -6.5585024654865265e-02 3.6003270745277405e-01 - <_> - - 0 -1 261 3.3135972917079926e-02 - - 6.1119224876165390e-02 -4.1669166088104248e-01 - <_> - - 0 -1 96 3.2037578523159027e-02 - - 1.2124529480934143e-01 -2.1470184624195099e-01 - <_> - - 0 -1 296 1.4727091416716576e-02 - - -5.7288587093353271e-01 4.6685628592967987e-02 - <_> - - 0 -1 207 4.7442387789487839e-02 - - -5.2196249365806580e-02 5.1182353496551514e-01 - <_> - - 0 -1 367 1.1715631932020187e-02 - - -5.6910729408264160e-01 4.6120714396238327e-02 - <_> - - 0 -1 268 4.1607704013586044e-02 - - -1.2063561379909515e-01 2.0680625736713409e-01 - <_> - - 0 -1 300 6.9544389843940735e-03 - - -2.9259884357452393e-01 8.6709313094615936e-02 - <_> - - 0 -1 372 2.0231716334819794e-02 - - -2.3428122699260712e-01 9.7812965512275696e-02 - <_> - - 0 -1 180 1.3869043439626694e-02 - - 1.5906314551830292e-01 -1.6273392736911774e-01 - <_> - - 0 -1 143 2.4136468768119812e-02 - - -1.7815589904785156e-01 1.4657269418239594e-01 - <_> - - 0 -1 49 5.2772037684917450e-02 - - -8.5652016103267670e-02 2.8691658377647400e-01 - - <_> - - 0 12 8 8 26 - <_> - - 0 20 8 8 15 - <_> - - 0 44 8 8 26 - <_> - - 0 48 8 8 19 - <_> - - 0 52 8 8 27 - <_> - - 0 56 8 8 27 - <_> - - 0 60 8 8 26 - <_> - - 0 68 8 8 8 - <_> - - 0 80 8 8 13 - <_> - - 0 80 8 8 14 - <_> - - 4 4 8 8 8 - <_> - - 4 20 8 8 10 - <_> - - 4 48 8 8 25 - <_> - - 4 56 8 8 1 - <_> - - 4 60 8 8 34 - <_> - - 4 68 8 8 7 - <_> - - 4 80 8 8 12 - <_> - - 8 4 8 8 12 - <_> - - 8 28 8 8 0 - <_> - - 8 48 8 8 18 - <_> - - 8 48 8 8 29 - <_> - - 8 56 8 8 31 - <_> - - 8 60 8 8 31 - <_> - - 8 80 8 8 13 - <_> - - 12 0 8 8 30 - <_> - - 12 4 8 8 12 - <_> - - 12 8 8 8 12 - <_> - - 12 8 8 8 13 - <_> - - 12 16 8 8 35 - <_> - - 12 20 8 8 1 - <_> - - 12 20 8 8 2 - <_> - - 12 20 8 8 30 - <_> - - 12 20 8 8 31 - <_> - - 12 28 8 8 0 - <_> - - 12 40 8 8 25 - <_> - - 12 64 8 8 13 - <_> - - 12 68 8 8 13 - <_> - - 12 80 8 8 12 - <_> - - 12 80 8 8 13 - <_> - - 16 20 8 8 14 - <_> - - 16 56 8 8 18 - <_> - - 20 4 8 8 4 - <_> - - 20 8 8 8 4 - <_> - - 20 12 8 8 11 - <_> - - 20 20 8 8 14 - <_> - - 20 20 8 8 15 - <_> - - 20 20 8 8 22 - <_> - - 20 24 8 8 16 - <_> - - 20 28 8 8 34 - <_> - - 20 32 8 8 34 - <_> - - 20 44 8 8 8 - <_> - - 20 44 8 8 27 - <_> - - 20 56 8 8 3 - <_> - - 20 60 8 8 33 - <_> - - 20 68 8 8 26 - <_> - - 20 80 8 8 32 - <_> - - 24 28 8 8 16 - <_> - - 24 52 8 8 5 - <_> - - 24 52 8 8 34 - <_> - - 24 68 8 8 2 - <_> - - 28 12 8 8 15 - <_> - - 28 12 8 8 24 - <_> - - 28 52 8 8 32 - <_> - - 28 68 8 8 9 - <_> - - 32 8 8 8 35 - <_> - - 32 48 8 8 33 - <_> - - 32 68 8 8 17 - <_> - - 0 0 8 16 0 - <_> - - 0 4 8 16 7 - <_> - - 0 40 8 16 25 - <_> - - 0 44 8 16 1 - <_> - - 0 44 8 16 24 - <_> - - 4 8 8 16 22 - <_> - - 4 36 8 16 19 - <_> - - 8 8 8 16 5 - <_> - - 8 8 8 16 10 - <_> - - 8 8 8 16 11 - <_> - - 8 28 8 16 12 - <_> - - 12 8 8 16 11 - <_> - - 12 8 8 16 12 - <_> - - 12 24 8 16 0 - <_> - - 12 24 8 16 18 - <_> - - 12 28 8 16 26 - <_> - - 12 36 8 16 18 - <_> - - 12 40 8 16 18 - <_> - - 12 44 8 16 19 - <_> - - 12 48 8 16 8 - <_> - - 12 56 8 16 13 - <_> - - 12 64 8 16 1 - <_> - - 16 8 8 16 2 - <_> - - 16 8 8 16 14 - <_> - - 16 12 8 16 1 - <_> - - 16 12 8 16 15 - <_> - - 16 40 8 16 18 - <_> - - 20 8 8 16 3 - <_> - - 20 8 8 16 26 - <_> - - 20 20 8 16 26 - <_> - - 20 24 8 16 16 - <_> - - 20 24 8 16 34 - <_> - - 20 28 8 16 35 - <_> - - 20 32 8 16 27 - <_> - - 20 32 8 16 34 - <_> - - 20 32 8 16 35 - <_> - - 20 36 8 16 35 - <_> - - 20 40 8 16 0 - <_> - - 20 40 8 16 8 - <_> - - 20 40 8 16 34 - <_> - - 20 44 8 16 34 - <_> - - 20 48 8 16 34 - <_> - - 20 56 8 16 4 - <_> - - 20 60 8 16 15 - <_> - - 20 64 8 16 15 - <_> - - 24 8 8 16 5 - <_> - - 24 8 8 16 11 - <_> - - 24 12 8 16 22 - <_> - - 24 24 8 16 16 - <_> - - 24 28 8 16 16 - <_> - - 28 56 8 16 10 - <_> - - 28 64 8 16 0 - <_> - - 32 24 8 16 29 - <_> - - 32 28 8 16 33 - <_> - - 32 36 8 16 34 - <_> - - 32 40 8 16 27 - <_> - - 32 40 8 16 28 - <_> - - 32 44 8 16 27 - <_> - - 32 44 8 16 33 - <_> - - 32 56 8 16 35 - <_> - - 0 0 16 8 10 - <_> - - 0 0 16 8 30 - <_> - - 0 4 16 8 8 - <_> - - 0 4 16 8 13 - <_> - - 0 4 16 8 27 - <_> - - 0 8 16 8 11 - <_> - - 0 36 16 8 35 - <_> - - 0 68 16 8 11 - <_> - - 0 76 16 8 9 - <_> - - 0 76 16 8 16 - <_> - - 0 76 16 8 17 - <_> - - 0 76 16 8 21 - <_> - - 0 76 16 8 31 - <_> - - 0 80 16 8 6 - <_> - - 0 80 16 8 12 - <_> - - 0 80 16 8 13 - <_> - - 0 80 16 8 14 - <_> - - 0 80 16 8 35 - <_> - - 4 0 16 8 0 - <_> - - 4 0 16 8 15 - <_> - - 4 0 16 8 17 - <_> - - 4 4 16 8 13 - <_> - - 4 8 16 8 15 - <_> - - 4 20 16 8 15 - <_> - - 4 76 16 8 30 - <_> - - 4 76 16 8 31 - <_> - - 4 80 16 8 6 - <_> - - 4 80 16 8 12 - <_> - - 4 80 16 8 21 - <_> - - 4 80 16 8 26 - <_> - - 4 80 16 8 34 - <_> - - 4 80 16 8 35 - <_> - - 8 0 16 8 1 - <_> - - 8 0 16 8 15 - <_> - - 8 52 16 8 35 - <_> - - 8 76 16 8 0 - <_> - - 8 76 16 8 16 - <_> - - 8 76 16 8 17 - <_> - - 8 76 16 8 22 - <_> - - 8 76 16 8 30 - <_> - - 8 76 16 8 35 - <_> - - 8 80 16 8 3 - <_> - - 8 80 16 8 10 - <_> - - 8 80 16 8 11 - <_> - - 8 80 16 8 12 - <_> - - 8 80 16 8 20 - <_> - - 8 80 16 8 26 - <_> - - 8 80 16 8 35 - <_> - - 12 0 16 8 1 - <_> - - 12 0 16 8 8 - <_> - - 12 0 16 8 15 - <_> - - 12 4 16 8 3 - <_> - - 12 20 16 8 1 - <_> - - 12 48 16 8 29 - <_> - - 12 56 16 8 2 - <_> - - 12 76 16 8 1 - <_> - - 12 76 16 8 7 - <_> - - 12 76 16 8 21 - <_> - - 12 76 16 8 22 - <_> - - 12 76 16 8 26 - <_> - - 12 76 16 8 30 - <_> - - 12 80 16 8 4 - <_> - - 12 80 16 8 10 - <_> - - 12 80 16 8 18 - <_> - - 12 80 16 8 26 - <_> - - 12 80 16 8 31 - <_> - - 16 0 16 8 6 - <_> - - 16 0 16 8 8 - <_> - - 16 4 16 8 3 - <_> - - 16 4 16 8 25 - <_> - - 16 4 16 8 26 - <_> - - 16 4 16 8 32 - <_> - - 16 8 16 8 3 - <_> - - 16 20 16 8 8 - <_> - - 16 76 16 8 0 - <_> - - 16 76 16 8 7 - <_> - - 16 76 16 8 8 - <_> - - 16 80 16 8 3 - <_> - - 16 80 16 8 6 - <_> - - 16 80 16 8 7 - <_> - - 16 80 16 8 10 - <_> - - 16 80 16 8 28 - <_> - - 16 80 16 8 35 - <_> - - 0 0 12 12 7 - <_> - - 0 8 12 12 7 - <_> - - 0 12 12 12 26 - <_> - - 0 60 12 12 6 - <_> - - 0 68 12 12 16 - <_> - - 0 72 12 12 9 - <_> - - 0 72 12 12 10 - <_> - - 0 72 12 12 21 - <_> - - 4 72 12 12 3 - <_> - - 4 72 12 12 9 - <_> - - 8 0 12 12 6 - <_> - - 8 20 12 12 17 - <_> - - 8 24 12 12 0 - <_> - - 8 28 12 12 13 - <_> - - 8 36 12 12 8 - <_> - - 8 60 12 12 12 - <_> - - 8 68 12 12 1 - <_> - - 12 20 12 12 1 - <_> - - 12 20 12 12 15 - <_> - - 12 40 12 12 26 - <_> - - 12 64 12 12 11 - <_> - - 16 0 12 12 10 - <_> - - 16 4 12 12 10 - <_> - - 16 12 12 12 1 - <_> - - 16 16 12 12 22 - <_> - - 16 24 12 12 16 - <_> - - 16 28 12 12 16 - <_> - - 16 60 12 12 4 - <_> - - 16 64 12 12 4 - <_> - - 16 64 12 12 5 - <_> - - 16 72 12 12 15 - <_> - - 20 8 12 12 28 - <_> - - 20 12 12 12 6 - <_> - - 20 32 12 12 26 - <_> - - 20 60 12 12 4 - <_> - - 20 72 12 12 0 - <_> - - 20 72 12 12 7 - <_> - - 20 72 12 12 32 - <_> - - 20 72 12 12 35 - <_> - - 24 0 12 12 12 - <_> - - 24 0 12 12 16 - <_> - - 24 0 12 12 33 - <_> - - 24 4 12 12 17 - <_> - - 24 16 12 12 17 - <_> - - 24 72 12 12 0 - <_> - - 24 72 12 12 6 - <_> - - 24 72 12 12 7 - <_> - - 24 72 12 12 8 - <_> - - 24 72 12 12 35 - <_> - - 0 0 12 24 1 - <_> - - 0 0 12 24 2 - <_> - - 0 8 12 24 2 - <_> - - 0 16 12 24 21 - <_> - - 0 16 12 24 22 - <_> - - 0 20 12 24 9 - <_> - - 0 36 12 24 27 - <_> - - 0 44 12 24 4 - <_> - - 0 48 12 24 17 - <_> - - 4 44 12 24 4 - <_> - - 4 48 12 24 4 - <_> - - 8 0 12 24 8 - <_> - - 8 8 12 24 14 - <_> - - 8 24 12 24 0 - <_> - - 8 32 12 24 29 - <_> - - 8 36 12 24 34 - <_> - - 12 8 12 24 1 - <_> - - 12 8 12 24 15 - <_> - - 12 48 12 24 8 - <_> - - 16 0 12 24 34 - <_> - - 16 8 12 24 1 - <_> - - 16 16 12 24 34 - <_> - - 16 24 12 24 16 - <_> - - 16 28 12 24 17 - <_> - - 16 36 12 24 17 - <_> - - 20 0 12 24 10 - <_> - - 20 4 12 24 11 - <_> - - 20 20 12 24 22 - <_> - - 20 32 12 24 20 - <_> - - 20 48 12 24 3 - <_> - - 24 24 12 24 7 - <_> - - 24 44 12 24 13 - <_> - - 24 48 12 24 8 - <_> - - 24 48 12 24 13 - <_> - - 0 0 24 12 6 - <_> - - 0 0 24 12 10 - <_> - - 0 0 24 12 16 - <_> - - 0 16 24 12 35 - <_> - - 0 60 24 12 26 - <_> - - 0 64 24 12 26 - <_> - - 0 64 24 12 35 - <_> - - 0 68 24 12 19 - <_> - - 0 68 24 12 32 - <_> - - 0 72 24 12 16 - <_> - - 0 72 24 12 21 - <_> - - 0 72 24 12 26 - <_> - - 0 72 24 12 35 - <_> - - 0 0 16 16 7 - <_> - - 0 4 16 16 1 - <_> - - 0 4 16 16 2 - <_> - - 0 4 16 16 8 - <_> - - 0 8 16 16 11 - <_> - - 0 8 16 16 14 - <_> - - 0 8 16 16 15 - <_> - - 0 20 16 16 35 - <_> - - 0 24 16 16 35 - <_> - - 0 52 16 16 27 - <_> - - 0 52 16 16 34 - <_> - - 4 0 16 16 6 - <_> - - 4 0 16 16 33 - <_> - - 4 8 16 16 14 - <_> - - 4 8 16 16 15 - <_> - - 4 8 16 16 18 - <_> - - 4 12 16 16 15 - <_> - - 4 20 16 16 17 - <_> - - 8 0 16 16 0 - <_> - - 12 8 16 16 2 - <_> - - 12 12 16 16 1 - <_> - - 16 0 16 16 9 - <_> - - 16 0 16 16 17 - <_> - - 16 4 16 16 14 - <_> - - 16 4 16 16 15 - <_> - - 16 4 16 16 17 - <_> - - 16 8 16 16 2 - <_> - - 16 8 16 16 3 - <_> - - 16 8 16 16 4 - <_> - - 16 8 16 16 5 - <_> - - 16 8 16 16 6 - <_> - - 16 52 16 16 31 - <_> - - 16 64 16 16 7 - <_> - - 16 64 16 16 8 - <_> - - 0 0 16 32 8 - <_> - - 0 4 16 32 22 - <_> - - 0 8 16 32 30 - <_> - - 0 12 16 32 31 - <_> - - 0 12 16 32 34 - <_> - - 0 20 16 32 30 - <_> - - 0 20 16 32 31 - <_> - - 0 32 16 32 4 - <_> - - 4 8 16 32 21 - <_> - - 4 28 16 32 8 - <_> - - 4 32 16 32 17 - <_> - - 8 4 16 32 28 - <_> - - 8 8 16 32 0 - <_> - - 8 8 16 32 22 - <_> - - 8 12 16 32 16 - <_> - - 8 20 16 32 18 - <_> - - 8 28 16 32 16 - <_> - - 8 32 16 32 0 - <_> - - 12 4 16 32 0 - <_> - - 12 8 16 32 18 - <_> - - 12 32 16 32 17 - <_> - - 16 0 16 32 17 - <_> - - 16 4 16 32 7 - <_> - - 16 8 16 32 14 - <_> - - 16 8 16 32 26 - <_> - - 16 8 16 32 30 - <_> - - 16 12 16 32 21 - <_> - - 16 16 16 32 18 - <_> - - 16 20 16 32 21 - <_> - - 16 20 16 32 22 - <_> - - 16 20 16 32 25 - <_> - - 16 24 16 32 18 - <_> - - 16 24 16 32 30 - <_> - - 16 32 16 32 12 - <_> - - 0 0 20 20 8 - <_> - - 0 4 20 20 6 - <_> - - 0 4 20 20 34 - <_> - - 0 52 20 20 34 - <_> - - 4 0 20 20 33 - <_> - - 8 0 20 20 10 - <_> - - 8 0 20 20 17 - <_> - - 8 4 20 20 11 - <_> - - 8 4 20 20 17 - <_> - - 8 16 20 20 26 - <_> - - 8 52 20 20 18 - <_> - - 8 52 20 20 19 - <_> - - 8 56 20 20 0 - <_> - - 8 56 20 20 18 - <_> - - 0 0 20 40 29 - <_> - - 0 4 20 40 34 - <_> - - 0 16 20 40 34 - <_> - - 4 0 20 40 30 - <_> - - 4 12 20 40 0 - <_> - - 4 12 20 40 16 - <_> - - 8 0 20 40 10 - <_> - - 8 0 20 40 18 - <_> - - 8 0 20 40 31 - <_> - - 8 4 20 40 18 - <_> - - 8 8 20 40 1 - <_> - - 8 8 20 40 18 - <_> - - 8 12 20 40 0 - <_> - - 8 12 20 40 18 - <_> - - 8 16 20 40 17 - <_> - - 0 12 24 24 30 - <_> - - 0 28 24 24 7 - <_> - - 0 28 24 24 16 - <_> - - 0 44 24 24 12 - <_> - - 0 48 24 24 3 - <_> - - 0 0 24 48 8 - <_> - - 0 0 24 48 23 - diff --git a/data/lbpcascades/lbpcascade_frontalface.xml b/data/lbpcascades/lbpcascade_frontalface.xml deleted file mode 100644 index 59850cb..0000000 --- a/data/lbpcascades/lbpcascade_frontalface.xml +++ /dev/null @@ -1,1505 +0,0 @@ - - - - - BOOST - LBP - 24 - 24 - - GAB - 0.9950000047683716 - 0.5000000000000000 - 0.9500000000000000 - 1 - 100 - - 256 - 20 - - - <_> - 3 - -0.7520892024040222 - - - <_> - - 0 -1 46 -67130709 -21569 -1426120013 -1275125205 -21585 - -16385 587145899 -24005 - - -0.6543210148811340 0.8888888955116272 - - <_> - - 0 -1 13 -163512766 -769593758 -10027009 -262145 -514457854 - -193593353 -524289 -1 - - -0.7739216089248657 0.7278633713722229 - - <_> - - 0 -1 2 -363936790 -893203669 -1337948010 -136907894 - 1088782736 -134217726 -741544961 -1590337 - - -0.7068563103675842 0.6761534214019775 - - <_> - 4 - -0.4872078299522400 - - - <_> - - 0 -1 84 2147483647 1946124287 -536870913 2147450879 - 738132490 1061101567 243204619 2147446655 - - -0.8083735704421997 0.7685696482658386 - - <_> - - 0 -1 21 2147483647 263176079 1879048191 254749487 1879048191 - -134252545 -268435457 801111999 - - -0.7698410153388977 0.6592915654182434 - - <_> - - 0 -1 106 -98110272 1610939566 -285484400 -850010381 - -189334372 -1671954433 -571026695 -262145 - - -0.7506558895111084 0.5444605946540833 - - <_> - - 0 -1 48 -798690576 -131075 1095771153 -237144073 -65569 -1 - -216727745 -69206049 - - -0.7775990366935730 0.5465461611747742 - - <_> - 4 - -1.1592328548431396 - - - <_> - - 0 -1 47 -21585 -20549 -100818262 -738254174 -20561 -36865 - -151016790 -134238549 - - -0.5601882934570313 0.7743113040924072 - - <_> - - 0 -1 12 -286003217 183435247 -268994614 -421330945 - -402686081 1090387966 -286785545 -402653185 - - -0.6124526262283325 0.6978127956390381 - - <_> - - 0 -1 26 -50347012 970882927 -50463492 -1253377 -134218251 - -50364513 -33619992 -172490753 - - -0.6114496588706970 0.6537628173828125 - - <_> - - 0 -1 8 -273 -135266321 1877977738 -2088243418 -134217987 - 2146926575 -18910642 1095231247 - - -0.6854077577590942 0.5403239130973816 - - <_> - 5 - -0.7562355995178223 - - - <_> - - 0 -1 96 -1273 1870659519 -20971602 -67633153 -134250731 - 2004875127 -250 -150995969 - - -0.4051094949245453 0.7584033608436585 - - <_> - - 0 -1 33 -868162224 -76810262 -4262145 -257 1465211989 - -268959873 -2656269 -524289 - - -0.7388162612915039 0.5340843200683594 - - <_> - - 0 -1 57 -12817 -49 -541103378 -152950 -38993 -20481 -1153876 - -72478976 - - -0.6582943797111511 0.5339496731758118 - - <_> - - 0 -1 125 -269484161 -452984961 -319816180 -1594032130 -2111 - -990117891 -488975296 -520947741 - - -0.5981323719024658 0.5323504805564880 - - <_> - - 0 -1 53 557787431 670265215 -1342193665 -1075892225 - 1998528318 1056964607 -33570977 -1 - - -0.6498787999153137 0.4913350641727448 - - <_> - 5 - -0.8085358142852783 - - - <_> - - 0 -1 60 -536873708 880195381 -16842788 -20971521 -176687276 - -168427659 -16777260 -33554626 - - -0.5278195738792419 0.6946372389793396 - - <_> - - 0 -1 7 -1 -62981529 -1090591130 805330978 -8388827 -41945787 - -39577 -531118985 - - -0.5206505060195923 0.6329920291900635 - - <_> - - 0 -1 98 -725287348 1347747543 -852489 -16809993 1489881036 - -167903241 -1 -1 - - -0.7516061067581177 0.4232024252414703 - - <_> - - 0 -1 44 -32777 1006582562 -65 935312171 -8388609 -1078198273 - -1 733886267 - - -0.7639313936233521 0.4123568832874298 - - <_> - - 0 -1 24 -85474705 2138828511 -1036436754 817625855 - 1123369029 -58796809 -1013468481 -194513409 - - -0.5123769044876099 0.5791834592819214 - - <_> - 5 - -0.5549971461296082 - - - <_> - - 0 -1 42 -17409 -20481 -268457797 -134239493 -17473 -1 -21829 - -21846 - - -0.3763174116611481 0.7298233509063721 - - <_> - - 0 -1 6 -805310737 -2098262358 -269504725 682502698 - 2147483519 1740574719 -1090519233 -268472385 - - -0.5352765917778015 0.5659480094909668 - - <_> - - 0 -1 61 -67109678 -6145 -8 -87884584 -20481 -1073762305 - -50856216 -16849696 - - -0.5678374171257019 0.4961479902267456 - - <_> - - 0 -1 123 -138428633 1002418167 -1359008245 -1908670465 - -1346685918 910098423 -1359010520 -1346371657 - - -0.5706262588500977 0.4572288393974304 - - <_> - - 0 -1 9 -89138513 -4196353 1256531674 -1330665426 1216308261 - -36190633 33498198 -151796633 - - -0.5344601869583130 0.4672054052352905 - - <_> - 5 - -0.8776460289955139 - - - <_> - - 0 -1 105 1073769576 206601725 -34013449 -33554433 -789514004 - -101384321 -690225153 -264193 - - -0.7700348496437073 0.5943940877914429 - - <_> - - 0 -1 30 -1432340997 -823623681 -49153 -34291724 -269484035 - -1342767105 -1078198273 -1277955 - - -0.5043668746948242 0.6151274442672730 - - <_> - - 0 -1 35 -1067385040 -195758209 -436748425 -134217731 - -50855988 -129 -1 -1 - - -0.6808040738105774 0.4667325913906097 - - <_> - - 0 -1 119 832534325 -34111555 -26050561 -423659521 -268468364 - 2105014143 -2114244 -17367185 - - -0.4927591383457184 0.5401885509490967 - - <_> - - 0 -1 82 -1089439888 -1080524865 2143059967 -1114121 - -1140949004 -3 -2361356 -739516 - - -0.6445107460021973 0.4227822124958038 - - <_> - 6 - -1.1139287948608398 - - - <_> - - 0 -1 52 -1074071553 -1074003969 -1 -1280135430 -5324817 -1 - -335548482 582134442 - - -0.5307556986808777 0.6258179545402527 - - <_> - - 0 -1 99 -706937396 -705364068 -540016724 -570495027 - -570630659 -587857963 -33628164 -35848193 - - -0.5227634310722351 0.5049746036529541 - - <_> - - 0 -1 18 -2035630093 42119158 -268503053 -1671444 261017599 - 1325432815 1954394111 -805306449 - - -0.4983572661876679 0.5106441378593445 - - <_> - - 0 -1 111 -282529488 -1558073088 1426018736 -170526448 - -546832487 -5113037 -34243375 -570427929 - - -0.4990860521793366 0.5060507059097290 - - <_> - - 0 -1 92 1016332500 -606301707 915094269 -1080086049 - -1837027144 -1361600280 2147318747 1067975613 - - -0.5695009231567383 0.4460467398166657 - - <_> - - 0 -1 51 -656420166 -15413034 -141599534 -603435836 - 1505950458 -787556946 -79823438 -1326199134 - - -0.6590405106544495 0.3616424500942230 - - <_> - 7 - -0.8243625760078430 - - - <_> - - 0 -1 28 -901591776 -201916417 -262 -67371009 -143312112 - -524289 -41943178 -1 - - -0.4972776770591736 0.6027074456214905 - - <_> - - 0 -1 112 -4507851 -411340929 -268437513 -67502145 -17350859 - -32901 -71344315 -29377 - - -0.4383158981800079 0.5966237187385559 - - <_> - - 0 -1 69 -75894785 -117379438 -239063587 -12538500 1485072126 - 2076233213 2123118847 801906927 - - -0.6386105418205261 0.3977999985218048 - - <_> - - 0 -1 19 -823480413 786628589 -16876049 -1364262914 242165211 - 1315930109 -696268833 -455082829 - - -0.5512794256210327 0.4282079637050629 - - <_> - - 0 -1 73 -521411968 6746762 -1396236286 -2038436114 - -185612509 57669627 -143132877 -1041235973 - - -0.6418755054473877 0.3549866080284119 - - <_> - - 0 -1 126 -478153869 1076028979 -1645895615 1365298272 - -557859073 -339771473 1442574528 -1058802061 - - -0.4841901361942291 0.4668019413948059 - - <_> - - 0 -1 45 -246350404 -1650402048 -1610612745 -788400696 - 1467604861 -2787397 1476263935 -4481349 - - -0.5855734348297119 0.3879135847091675 - - <_> - 7 - -1.2237116098403931 - - - <_> - - 0 -1 114 -24819 1572863935 -16809993 -67108865 2146778388 - 1433927541 -268608444 -34865205 - - -0.2518476545810700 0.7088654041290283 - - <_> - - 0 -1 97 -1841359 -134271049 -32769 -5767369 -1116675 -2185 - -8231 -33603327 - - -0.4303432404994965 0.5283288359642029 - - <_> - - 0 -1 25 -1359507589 -1360593090 -1073778729 -269553812 - -809512977 1744707583 -41959433 -134758978 - - -0.4259553551673889 0.5440809130668640 - - <_> - - 0 -1 34 729753407 -134270989 -1140907329 -235200777 - 658456383 2147467263 -1140900929 -16385 - - -0.5605589151382446 0.4220733344554901 - - <_> - - 0 -1 134 -310380553 -420675595 -193005472 -353568129 - 1205338070 -990380036 887604324 -420544526 - - -0.5192656517028809 0.4399855434894562 - - <_> - - 0 -1 16 -1427119361 1978920959 -287119734 -487068946 - 114759245 -540578051 -707510259 -671660453 - - -0.5013077259063721 0.4570254683494568 - - <_> - - 0 -1 74 -738463762 -889949281 -328301948 -121832450 - -1142658284 -1863576559 2146417353 -263185 - - -0.4631414115428925 0.4790246188640595 - - <_> - 7 - -0.5544230937957764 - - - <_> - - 0 -1 113 -76228780 -65538 -1 -67174401 -148007 -33 -221796 - -272842924 - - -0.3949716091156006 0.6082032322883606 - - <_> - - 0 -1 110 369147696 -1625232112 2138570036 -1189900 790708019 - -1212613127 799948719 -4456483 - - -0.4855885505676270 0.4785369932651520 - - <_> - - 0 -1 37 784215839 -290015241 536832799 -402984963 - -1342414991 -838864897 -176769 -268456129 - - -0.4620285332202911 0.4989669024944305 - - <_> - - 0 -1 41 -486418688 -171915327 -340294900 -21938 -519766032 - -772751172 -73096060 -585322623 - - -0.6420643329620361 0.3624351918697357 - - <_> - - 0 -1 117 -33554953 -475332625 -1423463824 -2077230421 - -4849669 -2080505925 -219032928 -1071915349 - - -0.4820112884044647 0.4632140696048737 - - <_> - - 0 -1 65 -834130468 -134217476 -1349314083 -1073803559 - -619913764 -1449131844 -1386890321 -1979118423 - - -0.4465552568435669 0.5061788558959961 - - <_> - - 0 -1 56 -285249779 1912569855 -16530 -1731022870 -1161904146 - -1342177297 -268439634 -1464078708 - - -0.5190586447715759 0.4441480338573456 - - <_> - 7 - -0.7161560654640198 - - - <_> - - 0 -1 20 1246232575 1078001186 -10027057 60102 -277348353 - -43646987 -1210581153 1195769615 - - -0.4323809444904327 0.5663768053054810 - - <_> - - 0 -1 15 -778583572 -612921106 -578775890 -4036478 - -1946580497 -1164766570 -1986687009 -12103599 - - -0.4588732719421387 0.4547033011913300 - - <_> - - 0 -1 129 -1073759445 2013231743 -1363169553 -1082459201 - -1414286549 868185983 -1356133589 -1077936257 - - -0.5218553543090820 0.4111092388629913 - - <_> - - 0 -1 102 -84148365 -2093417722 -1204850272 564290299 - -67121221 -1342177350 -1309195902 -776734797 - - -0.4920000731945038 0.4326725304126740 - - <_> - - 0 -1 88 -25694458 67104495 -290216278 -168563037 2083877442 - 1702788383 -144191964 -234882162 - - -0.4494568109512329 0.4448510706424713 - - <_> - - 0 -1 59 -857980836 904682741 -1612267521 232279415 - 1550862252 -574825221 -357380888 -4579409 - - -0.5180826783180237 0.3888972699642181 - - <_> - - 0 -1 27 -98549440 -137838400 494928389 -246013630 939541351 - -1196072350 -620603549 2137216273 - - -0.6081240773200989 0.3333222270011902 - - <_> - 8 - -0.6743940711021423 - - - <_> - - 0 -1 29 -150995201 2071191945 -1302151626 536934335 - -1059008937 914128709 1147328110 -268369925 - - -0.1790193915367127 0.6605972051620483 - - <_> - - 0 -1 128 -134509479 1610575703 -1342177289 1861484541 - -1107833788 1577058173 -333558568 -136319041 - - -0.3681024610996246 0.5139749646186829 - - <_> - - 0 -1 70 -1 1060154476 -1090984524 -630918524 -539492875 - 779616255 -839568424 -321 - - -0.3217232525348663 0.6171553134918213 - - <_> - - 0 -1 4 -269562385 -285029906 -791084350 -17923776 235286671 - 1275504943 1344390399 -966276889 - - -0.4373284578323364 0.4358185231685638 - - <_> - - 0 -1 76 17825984 -747628419 595427229 1474759671 575672208 - -1684005538 872217086 -1155858277 - - -0.4404836893081665 0.4601220190525055 - - <_> - - 0 -1 124 -336593039 1873735591 -822231622 -355795238 - -470820869 -1997537409 -1057132384 -1015285005 - - -0.4294152259826660 0.4452161788940430 - - <_> - - 0 -1 54 -834212130 -593694721 -322142257 -364892500 - -951029539 -302125121 -1615106053 -79249765 - - -0.3973052501678467 0.4854526817798615 - - <_> - - 0 -1 95 1342144479 2147431935 -33554561 -47873 -855685912 -1 - 1988052447 536827383 - - -0.7054683566093445 0.2697997391223908 - - <_> - 9 - -1.2042298316955566 - - - <_> - - 0 -1 39 1431368960 -183437936 -537002499 -137497097 - 1560590321 -84611081 -2097193 -513 - - -0.5905947685241699 0.5101932883262634 - - <_> - - 0 -1 120 -1645259691 2105491231 2130706431 1458995007 - -8567536 -42483883 -33780003 -21004417 - - -0.4449204802513123 0.4490709304809570 - - <_> - - 0 -1 89 -612381022 -505806938 -362027516 -452985106 - 275854917 1920431639 -12600561 -134221825 - - -0.4693818688392639 0.4061094820499420 - - <_> - - 0 -1 14 -805573153 -161 -554172679 -530519488 -16779441 - 2000682871 -33604275 -150997129 - - -0.3600351214408875 0.5056326985359192 - - <_> - - 0 -1 67 6192 435166195 1467449341 2046691505 -1608493775 - -4755729 -1083162625 -71365637 - - -0.4459891915321350 0.4132415652275085 - - <_> - - 0 -1 86 -41689215 -3281034 1853357967 -420712635 -415924289 - -270209208 -1088293113 -825311232 - - -0.4466069042682648 0.4135067760944367 - - <_> - - 0 -1 80 -117391116 -42203396 2080374461 -188709 -542008165 - -356831940 -1091125345 -1073796897 - - -0.3394956290721893 0.5658645033836365 - - <_> - - 0 -1 75 -276830049 1378714472 -1342181951 757272098 - 1073740607 -282199241 -415761549 170896931 - - -0.5346512198448181 0.3584479391574860 - - <_> - - 0 -1 55 -796075825 -123166849 2113667055 -217530421 - -1107432194 -16385 -806359809 -391188771 - - -0.4379335641860962 0.4123645126819611 - - <_> - 10 - -0.8402050137519836 - - - <_> - - 0 -1 71 -890246622 15525883 -487690486 47116238 -1212319899 - -1291847681 -68159890 -469829921 - - -0.2670986354351044 0.6014143228530884 - - <_> - - 0 -1 31 -1361180685 -1898008841 -1090588811 -285410071 - -1074016265 -840443905 2147221487 -262145 - - -0.4149844348430634 0.4670888185501099 - - <_> - - 0 -1 40 1426190596 1899364271 2142731795 -142607505 - -508232452 -21563393 -41960001 -65 - - -0.4985891580581665 0.3719584941864014 - - <_> - - 0 -1 109 -201337965 10543906 -236498096 -746195597 - 1974565825 -15204415 921907633 -190058309 - - -0.4568729996681213 0.3965812027454376 - - <_> - - 0 -1 130 -595026732 -656401928 -268649235 -571490699 - -440600392 -133131 -358810952 -2004088646 - - -0.4770836830139160 0.3862601518630981 - - <_> - - 0 -1 66 941674740 -1107882114 1332789109 -67691015 - -1360463693 -1556612430 -609108546 733546933 - - -0.4877715110778809 0.3778986334800720 - - <_> - - 0 -1 49 -17114945 -240061474 1552871558 -82775604 -932393844 - -1308544889 -532635478 -99042357 - - -0.3721654713153839 0.4994400143623352 - - <_> - - 0 -1 133 -655906006 1405502603 -939205164 1884929228 - -498859222 559417357 -1928559445 -286264385 - - -0.3934195041656494 0.4769641458988190 - - <_> - - 0 -1 0 -335837777 1860677295 -90 -1946186226 931096183 - 251612987 2013265917 -671232197 - - -0.4323300719261169 0.4342164099216461 - - <_> - - 0 -1 103 37769424 -137772680 374692301 2002666345 -536176194 - -1644484728 807009019 1069089930 - - -0.4993278682231903 0.3665378093719482 - - <_> - 9 - -1.1974394321441650 - - - <_> - - 0 -1 43 -5505 2147462911 2143265466 -4511070 -16450 -257 - -201348440 -71333206 - - -0.3310225307941437 0.5624626278877258 - - <_> - - 0 -1 90 -136842268 -499330741 2015250980 -87107126 - -641665744 -788524639 -1147864792 -134892563 - - -0.5266560912132263 0.3704403042793274 - - <_> - - 0 -1 104 -146800880 -1780368555 2111170033 -140904684 - -16777551 -1946681885 -1646463595 -839131947 - - -0.4171888828277588 0.4540435671806335 - - <_> - - 0 -1 85 -832054034 -981663763 -301990281 -578814081 - -932319000 -1997406723 -33555201 -69206017 - - -0.4556705355644226 0.3704262077808380 - - <_> - - 0 -1 24 -118492417 -1209026825 1119023838 -1334313353 - 1112948738 -297319313 1378887291 -139469193 - - -0.4182529747486115 0.4267231225967407 - - <_> - - 0 -1 78 -1714382628 -2353704 -112094959 -549613092 - -1567058760 -1718550464 -342315012 -1074972227 - - -0.3625369668006897 0.4684656262397766 - - <_> - - 0 -1 5 -85219702 316836394 -33279 1904970288 2117267315 - -260901769 -621461759 -88607770 - - -0.4742925167083740 0.3689507246017456 - - <_> - - 0 -1 11 -294654041 -353603585 -1641159686 -50331921 - -2080899877 1145569279 -143132713 -152044037 - - -0.3666271567344666 0.4580127298831940 - - <_> - - 0 -1 32 1887453658 -638545712 -1877976819 -34320972 - -1071067983 -661345416 -583338277 1060190561 - - -0.4567637443542481 0.3894708156585693 - - <_> - 9 - -0.5733128190040588 - - - <_> - - 0 -1 122 -994063296 1088745462 -318837116 -319881377 - 1102566613 1165490103 -121679694 -134744129 - - -0.4055117964744568 0.5487945079803467 - - <_> - - 0 -1 68 -285233233 -538992907 1811935199 -369234005 -529 - -20593 -20505 -1561401854 - - -0.3787897229194641 0.4532003402709961 - - <_> - - 0 -1 58 -1335245632 1968917183 1940861695 536816369 - -1226071367 -570908176 457026619 1000020667 - - -0.4258328974246979 0.4202791750431061 - - <_> - - 0 -1 94 -1360318719 -1979797897 -50435249 -18646473 - -608879292 -805306691 -269304244 -17840167 - - -0.4561023116111755 0.4002747833728790 - - <_> - - 0 -1 87 2062765935 -16449 -1275080721 -16406 45764335 - -1090552065 -772846337 -570464322 - - -0.4314672648906708 0.4086346626281738 - - <_> - - 0 -1 127 -536896021 1080817663 -738234288 -965478709 - -2082767969 1290855887 1993822934 -990381609 - - -0.4174543321132660 0.4249868988990784 - - <_> - - 0 -1 3 -818943025 168730891 -293610428 -79249354 669224671 - 621166734 1086506807 1473768907 - - -0.4321364760398865 0.4090838730335236 - - <_> - - 0 -1 79 -68895696 -67107736 -1414315879 -841676168 - -619843344 -1180610531 -1081990469 1043203389 - - -0.5018386244773865 0.3702533841133118 - - <_> - - 0 -1 116 -54002134 -543485719 -2124882422 -1437445858 - -115617074 -1195787391 -1096024366 -2140472445 - - -0.5037505626678467 0.3564981222152710 - - <_> - 9 - -0.4892596900463104 - - - <_> - - 0 -1 132 -67113211 2003808111 1862135111 846461923 -2752 - 2002237273 -273154752 1937223539 - - -0.2448196411132813 0.5689709186553955 - - <_> - - 0 -1 62 1179423888 -78064940 -611839555 -539167899 - -1289358360 -1650810108 -892540499 -1432827684 - - -0.4633283913135529 0.3587929606437683 - - <_> - - 0 -1 23 -285212705 -78450761 -656212031 -264050110 -27787425 - -1334349961 -547662981 -135796924 - - -0.3731099069118500 0.4290455579757690 - - <_> - - 0 -1 77 341863476 403702016 -550588417 1600194541 - -1080690735 951127993 -1388580949 -1153717473 - - -0.3658909499645233 0.4556473195552826 - - <_> - - 0 -1 22 -586880702 -204831512 -100644596 -39319550 - -1191150794 705692513 457203315 -75806957 - - -0.5214384198188782 0.3221037387847900 - - <_> - - 0 -1 72 -416546870 545911370 -673716192 -775559454 - -264113598 139424 -183369982 -204474641 - - -0.4289036989212036 0.4004956185817719 - - <_> - - 0 -1 50 -1026505020 -589692154 -1740499937 -1563770497 - 1348491006 -60710713 -1109853489 -633909413 - - -0.4621542394161224 0.3832748532295227 - - <_> - - 0 -1 108 -1448872304 -477895040 -1778390608 -772418127 - -1789923416 -1612057181 -805306693 -1415842113 - - -0.3711548447608948 0.4612701535224915 - - <_> - - 0 -1 92 407905424 -582449988 52654751 -1294472 -285103725 - -74633006 1871559083 1057955850 - - -0.5180652141571045 0.3205870389938355 - - <_> - 10 - -0.5911940932273865 - - - <_> - - 0 -1 81 4112 -1259563825 -846671428 -100902460 1838164148 - -74153752 -90653988 -1074263896 - - -0.2592592537403107 0.5873016119003296 - - <_> - - 0 -1 1 -285216785 -823206977 -1085589 -1081346 1207959293 - 1157103471 2097133565 -2097169 - - -0.3801195919513702 0.4718827307224274 - - <_> - - 0 -1 121 -12465 -536875169 2147478367 2130706303 -37765492 - -866124467 -318782328 -1392509185 - - -0.3509117066860199 0.5094807147979736 - - <_> - - 0 -1 38 2147449663 -20741 -16794757 1945873146 -16710 -1 - -8406341 -67663041 - - -0.4068757295608521 0.4130136370658875 - - <_> - - 0 -1 17 -155191713 866117231 1651407483 548272812 -479201468 - -447742449 1354229504 -261884429 - - -0.4557141065597534 0.3539792001247406 - - <_> - - 0 -1 100 -225319378 -251682065 -492783986 -792341777 - -1287261695 1393643841 -11274182 -213909521 - - -0.4117803275585175 0.4118592441082001 - - <_> - - 0 -1 63 -382220122 -2002072729 -51404800 -371201558 - -923011069 -2135301457 -2066104743 -1042557441 - - -0.4008397758007050 0.4034757018089294 - - <_> - - 0 -1 101 -627353764 -48295149 1581203952 -436258614 - -105268268 -1435893445 -638126888 -1061107126 - - -0.5694189667701721 0.2964762747287750 - - <_> - - 0 -1 118 -8399181 1058107691 -621022752 -251003468 -12582915 - -574619739 -994397789 -1648362021 - - -0.3195341229438782 0.5294018983840942 - - <_> - - 0 -1 92 -348343812 -1078389516 1717960437 364735981 - -1783841602 -4883137 -457572354 -1076950384 - - -0.3365339040756226 0.5067458748817444 - - <_> - 10 - -0.7612916231155396 - - - <_> - - 0 -1 10 -1976661318 -287957604 -1659497122 -782068 43591089 - -453637880 1435470000 -1077438561 - - -0.4204545319080353 0.5165745615959168 - - <_> - - 0 -1 131 -67110925 14874979 -142633168 -1338923040 - 2046713291 -2067933195 1473503712 -789579837 - - -0.3762553930282593 0.4075302779674530 - - <_> - - 0 -1 83 -272814301 -1577073 -1118685 -305156120 -1052289 - -1073813756 -538971154 -355523038 - - -0.4253497421741486 0.3728055357933044 - - <_> - - 0 -1 135 -2233 -214486242 -538514758 573747007 -159390971 - 1994225489 -973738098 -203424005 - - -0.3601998090744019 0.4563256204128265 - - <_> - - 0 -1 115 -261031688 -1330369299 -641860609 1029570301 - -1306461192 -1196149518 -1529767778 683139823 - - -0.4034293889999390 0.4160816967487335 - - <_> - - 0 -1 64 -572993608 -34042628 -417865 -111109 -1433365268 - -19869715 -1920939864 -1279457063 - - -0.3620899617671967 0.4594142735004425 - - <_> - - 0 -1 36 -626275097 -615256993 1651946018 805366393 - 2016559730 -430780849 -799868165 -16580645 - - -0.3903816640377045 0.4381459355354309 - - <_> - - 0 -1 93 1354797300 -1090957603 1976418270 -1342502178 - -1851873892 -1194637077 -1153521668 -1108399474 - - -0.3591445386409760 0.4624078869819641 - - <_> - - 0 -1 91 68157712 1211368313 -304759523 1063017136 798797750 - -275513546 648167355 -1145357350 - - -0.4297670423984528 0.4023293554782867 - - <_> - - 0 -1 107 -546318240 -1628569602 -163577944 -537002306 - -545456389 -1325465645 -380446736 -1058473386 - - -0.5727006793022156 0.2995934784412384 - - <_> - - 0 0 3 5 - <_> - - 0 0 4 2 - <_> - - 0 0 6 3 - <_> - - 0 1 2 3 - <_> - - 0 1 3 3 - <_> - - 0 1 3 7 - <_> - - 0 4 3 3 - <_> - - 0 11 3 4 - <_> - - 0 12 8 4 - <_> - - 0 14 4 3 - <_> - - 1 0 5 3 - <_> - - 1 1 2 2 - <_> - - 1 3 3 1 - <_> - - 1 7 4 4 - <_> - - 1 12 2 2 - <_> - - 1 13 4 1 - <_> - - 1 14 4 3 - <_> - - 1 17 3 2 - <_> - - 2 0 2 3 - <_> - - 2 1 2 2 - <_> - - 2 2 4 6 - <_> - - 2 3 4 4 - <_> - - 2 7 2 1 - <_> - - 2 11 2 3 - <_> - - 2 17 3 2 - <_> - - 3 0 2 2 - <_> - - 3 1 7 3 - <_> - - 3 7 2 1 - <_> - - 3 7 2 4 - <_> - - 3 18 2 2 - <_> - - 4 0 2 3 - <_> - - 4 3 2 1 - <_> - - 4 6 2 1 - <_> - - 4 6 2 5 - <_> - - 4 7 5 2 - <_> - - 4 8 4 3 - <_> - - 4 18 2 2 - <_> - - 5 0 2 2 - <_> - - 5 3 4 4 - <_> - - 5 6 2 5 - <_> - - 5 9 2 2 - <_> - - 5 10 2 2 - <_> - - 6 3 4 4 - <_> - - 6 4 4 3 - <_> - - 6 5 2 3 - <_> - - 6 5 2 5 - <_> - - 6 5 4 3 - <_> - - 6 6 4 2 - <_> - - 6 6 4 4 - <_> - - 6 18 1 2 - <_> - - 6 21 2 1 - <_> - - 7 0 3 7 - <_> - - 7 4 2 3 - <_> - - 7 9 5 1 - <_> - - 7 21 2 1 - <_> - - 8 0 1 4 - <_> - - 8 5 2 2 - <_> - - 8 5 3 2 - <_> - - 8 17 3 1 - <_> - - 8 18 1 2 - <_> - - 9 0 5 3 - <_> - - 9 2 2 6 - <_> - - 9 5 1 1 - <_> - - 9 11 1 1 - <_> - - 9 16 1 1 - <_> - - 9 16 2 1 - <_> - - 9 17 1 1 - <_> - - 9 18 1 1 - <_> - - 10 5 1 2 - <_> - - 10 5 3 3 - <_> - - 10 7 1 5 - <_> - - 10 8 1 1 - <_> - - 10 9 1 1 - <_> - - 10 10 1 1 - <_> - - 10 10 1 2 - <_> - - 10 14 3 3 - <_> - - 10 15 1 1 - <_> - - 10 15 2 1 - <_> - - 10 16 1 1 - <_> - - 10 16 2 1 - <_> - - 10 17 1 1 - <_> - - 10 21 1 1 - <_> - - 11 3 2 2 - <_> - - 11 5 1 2 - <_> - - 11 5 3 3 - <_> - - 11 5 4 6 - <_> - - 11 6 1 1 - <_> - - 11 7 2 2 - <_> - - 11 8 1 2 - <_> - - 11 10 1 1 - <_> - - 11 10 1 2 - <_> - - 11 15 1 1 - <_> - - 11 17 1 1 - <_> - - 11 18 1 1 - <_> - - 12 0 2 2 - <_> - - 12 1 2 5 - <_> - - 12 2 4 1 - <_> - - 12 3 1 3 - <_> - - 12 7 3 4 - <_> - - 12 10 3 2 - <_> - - 12 11 1 1 - <_> - - 12 12 3 2 - <_> - - 12 14 4 3 - <_> - - 12 17 1 1 - <_> - - 12 21 2 1 - <_> - - 13 6 2 5 - <_> - - 13 7 3 5 - <_> - - 13 11 3 2 - <_> - - 13 17 2 2 - <_> - - 13 17 3 2 - <_> - - 13 18 1 2 - <_> - - 13 18 2 2 - <_> - - 14 0 2 2 - <_> - - 14 1 1 3 - <_> - - 14 2 3 2 - <_> - - 14 7 2 1 - <_> - - 14 13 2 1 - <_> - - 14 13 3 3 - <_> - - 14 17 2 2 - <_> - - 15 0 2 2 - <_> - - 15 0 2 3 - <_> - - 15 4 3 2 - <_> - - 15 4 3 6 - <_> - - 15 6 3 2 - <_> - - 15 11 3 4 - <_> - - 15 13 3 2 - <_> - - 15 17 2 2 - <_> - - 15 17 3 2 - <_> - - 16 1 2 3 - <_> - - 16 3 2 4 - <_> - - 16 6 1 1 - <_> - - 16 16 2 2 - <_> - - 17 1 2 2 - <_> - - 17 1 2 5 - <_> - - 17 12 2 2 - <_> - - 18 0 2 2 - diff --git a/data/lbpcascades/lbpcascade_profileface.xml b/data/lbpcascades/lbpcascade_profileface.xml deleted file mode 100755 index a9e8437..0000000 --- a/data/lbpcascades/lbpcascade_profileface.xml +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - BOOST - LBP - 34 - 20 - - GAB - 9.9500000476837158e-001 - 3.0000001192092896e-001 - 9.4999999999999996e-001 - 1 - 100 - - 256 - 1 - 16 - - - <_> - 4 - -5.9480339288711548e-001 - - <_> - - 0 -1 114 -2360321 -82228595 -771518211 -713436773 - -1060447799 -810385271 -2004135683 -2566104 - - -8.0942183732986450e-001 5.9530025720596313e-001 - <_> - - 0 -1 54 -649134608 -1060077114 1375916272 -719981432 - 1073801352 33024 281198795 -5246465 - - -7.7979278564453125e-001 5.4052764177322388e-001 - <_> - - 0 -1 12 -960266913 -495857599 -1068498864 -867970987 - 457398579 -1174173695 1749041235 1849162079 - - -8.0028575658798218e-001 5.0435048341751099e-001 - <_> - - 0 -1 120 -1228145793 -807247727 18059735 -138644520 - 998980043 -41250583 673112549 -1930366540 - - -7.7902388572692871e-001 4.9006074666976929e-001 - - <_> - 6 - -5.4879629611968994e-001 - - <_> - - 0 -1 6 -254346881 -746143606 -1039596583 1963430479 - -263790449 -1073545213 698505999 -1349357 - - -6.6315788030624390e-001 6.0000002384185791e-001 - <_> - - 0 -1 112 -134225985 -684228389 -988213089 -684716007 - -1966960899 -896630615 152815840 -864497420 - - -7.0195454359054565e-001 5.8843690156936646e-001 - <_> - - 0 -1 53 -35923461 520818827 -1862167847 856916291 68141197 - 2072530978 304306417 526079163 - - -6.4593964815139771e-001 5.7274609804153442e-001 - <_> - - 0 -1 101 -2097665 -1781432163 588321018 -1677405808 - -1968469982 -1450147831 -1467632684 -593693808 - - -7.2959578037261963e-001 4.9470889568328857e-001 - <_> - - 0 -1 79 -205847273 -1088716541 285266431 1393693056 - 293931101 -1634205688 -452263692 -111136684 - - -7.0331865549087524e-001 5.2564400434494019e-001 - <_> - - 0 -1 126 579801457 -670613495 -1065269989 -117095565 - -1295163359 -779534335 -1744220101 -1355860 - - -7.5121974945068359e-001 4.5217981934547424e-001 - - <_> - 4 - -4.3886357545852661e-001 - - <_> - - 0 -1 20 -346563793 1217040543 -1324639677 206303367 - -260894653 1165249072 1359168335 1652518863 - - -8.3054625988006592e-001 5.5417186021804810e-001 - <_> - - 0 -1 69 -925898078 -917290147 -2147368790 -1995968378 - 1203961890 1765910571 789128481 -4201473 - - -7.5220447778701782e-001 6.1290657520294189e-001 - <_> - - 0 -1 7 -425790473 -368916470 -1065172848 -1877712894 - -1067360254 -847191997 1342400518 -680037517 - - -7.8469508886337280e-001 5.9731280803680420e-001 - <_> - - 0 -1 5 -260315918 -1567751150 -805289977 1721229843 - 1644296976 1954742530 824530213 -8392601 - - -7.3686408996582031e-001 5.6347119808197021e-001 - - <_> - 6 - -4.6629825234413147e-001 - - <_> - - 0 -1 111 -67634177 -72175593 -246181185 -144772036 - -1465917455 -1426934837 -345249307 -539041852 - - -7.1692305803298950e-001 5.5034482479095459e-001 - <_> - - 0 -1 47 -1048705 -96415158 -1996126927 67301684 -659873481 - 1800863745 -402143413 1647570815 - - -7.6134461164474487e-001 4.7370144724845886e-001 - <_> - - 0 -1 119 1905247351 -1111526689 1426654203 -116427277 - 1731664419 -81052249 1051905317 -1628448513 - - -5.9460461139678955e-001 6.1952447891235352e-001 - <_> - - 0 -1 2 578486263 -2115313530 -788268733 -1122507629 - -343408719 2127242147 -85406399 -37295 - - -6.0801470279693604e-001 5.8719038963317871e-001 - <_> - - 0 -1 127 -1147176065 52139167 21156225 -540503783 -771529299 - -33325024 -671045243 -1913073360 - - -7.4383884668350220e-001 5.1643568277359009e-001 - <_> - - 0 -1 93 -319091633 -58633529 1166906391 1854443149 - 1267403009 -1198817246 1208634960 -35661669 - - -6.8595260381698608e-001 5.5931246280670166e-001 - - <_> - 8 - -6.0948312282562256e-001 - - <_> - - 0 -1 102 -747899393 -543522675 545333467 -34230241 - -1572626245 -17790840 -1182162691 -1078427420 - - -6.0826772451400757e-001 4.6491229534149170e-001 - <_> - - 0 -1 38 -103812609 503024467 -2121908081 722834075 - 1375757518 2022089353 197321677 2077719203 - - -6.2948691844940186e-001 4.8044654726982117e-001 - <_> - - 0 -1 19 -774429826 -607461158 1158791644 -971587409 - -1732167611 2015560010 -1278549257 -159911361 - - -5.9694272279739380e-001 4.7999730706214905e-001 - <_> - - 0 -1 122 735837495 -875325281 152208339 -741020481 - -1471817477 -1165246433 -1450830159 -1696546384 - - -6.4947181940078735e-001 4.2661586403846741e-001 - <_> - - 0 -1 104 -629063145 -49708711 50692231 1973945160 157637120 - 2056259593 1771350547 -78911181 - - -6.2496536970138550e-001 4.4524449110031128e-001 - <_> - - 0 -1 67 -74189973 -803307502 688005268 1600057378 -131870050 - -1600503318 571446250 -386668002 - - -5.5046343803405762e-001 5.6090569496154785e-001 - <_> - - 0 -1 81 586347861 -2071051852 -250078020 -1455374076 - 546287843 1216708619 -1853707673 -35130912 - - -6.3877129554748535e-001 4.7911971807479858e-001 - <_> - - 0 -1 22 -1436568057 1555188001 164315 2084672259 1809869105 - 1132626050 1223430266 -596124761 - - -6.4428490400314331e-001 4.7921949625015259e-001 - - <_> - 8 - -5.4387503862380981e-001 - - <_> - - 0 -1 44 -783680003 -771883143 -302055943 -5898247 -253370375 - -1996628131 1625947386 -2004157446 - - -5.2870607376098633e-001 5.9474670886993408e-001 - <_> - - 0 -1 49 -586034977 -41205679 352424062 -163145456 151126042 - -1171652503 1208036058 -9019322 - - -5.6763833761215210e-001 4.8789894580841064e-001 - <_> - - 0 -1 39 1402589836 1363509256 103583 823365787 -1861443377 - 412131360 539718283 1002160350 - - -5.9899079799652100e-001 4.9562713503837585e-001 - <_> - - 0 -1 113 -783429121 -1559215981 286355953 -794820602 - 461510679 -611662910 -2136237584 -96429424 - - -6.3842493295669556e-001 4.3330931663513184e-001 - <_> - - 0 -1 99 -1365839532 -1291265163 1091604493 965968977 - 147472779 -1466925055 -2013090821 -1410703205 - - -5.8633142709732056e-001 5.0152444839477539e-001 - <_> - - 0 -1 26 1846469631 -788479850 268796195 -754872317 - 1630603451 -896532480 1208092751 -72652777 - - -5.9243172407150269e-001 4.7917708754539490e-001 - <_> - - 0 -1 85 -715395062 -113037167 1342198133 -552594287 - 411123713 11059209 -2012512153 -877809205 - - -6.9079184532165527e-001 4.2610234022140503e-001 - <_> - - 0 -1 100 -526391817 -921022135 -1593630697 671093393 - -2004270453 -1962835840 -1870413655 -1597095644 - - -6.5030521154403687e-001 4.4748127460479736e-001 - - <_> - 8 - -6.3195121288299561e-001 - - <_> - - 0 -1 109 -674761315 -581726065 352407899 -83717423 - -660870145 -1165915966 -326837763 -927182608 - - -7.3185729980468750e-001 3.3258172869682312e-001 - <_> - - 0 -1 97 860755579 -707063662 1361264863 1065505299 - -1022866435 -1776123776 -1865661700 -1615196136 - - -6.1147916316986084e-001 3.7205791473388672e-001 - <_> - - 0 -1 15 -678435969 -106962866 268652561 -826396597 - -802066313 1931092070 1208025439 1211582847 - - -6.8679082393646240e-001 3.6285603046417236e-001 - <_> - - 0 -1 86 -1573074550 -2080337595 299991 110482176 268552379 - -310373944 596185787 -1428952165 - - -6.4654982089996338e-001 4.1456297039985657e-001 - <_> - - 0 -1 30 -72637790 -1258143612 1342937104 -544352374 - -1046875163 -121076606 -786059128 -71702400 - - -5.2772462368011475e-001 4.9787566065788269e-001 - <_> - - 0 -1 89 -683288417 -218031996 33734999 -16115386 -2013259561 - -2008907509 -1978533232 -352342880 - - -5.2718847990036011e-001 5.2839303016662598e-001 - <_> - - 0 -1 10 -268764033 -1078984772 -65537 -281182212 -524291 -1 - -8489090 -4227265 - - -5.0513482093811035e-001 5.8522778749465942e-001 - <_> - - 0 -1 82 -570445845 784662143 -268435661 -1292701712 - -436263043 -1367507075 -671091243 -751108132 - - -5.2438414096832275e-001 5.4709094762802124e-001 - - <_> - 8 - -5.9874147176742554e-001 - - <_> - - 0 -1 27 -721421649 -1001940437 2300046 -720004829 -792686333 - 1908900882 -160055232 -134763633 - - -5.7692307233810425e-001 3.7921348214149475e-001 - <_> - - 0 -1 78 -1764279809 -1755824061 1937871313 -42069793 - -1241158993 -1196293937 -1576828673 -70371296 - - -4.7039109468460083e-001 4.8607903718948364e-001 - <_> - - 0 -1 29 -795875130 432079111 285457049 -620658641 -780072971 - 1158283432 -226254016 1839935243 - - -6.2938809394836426e-001 4.1353255510330200e-001 - <_> - - 0 -1 33 -37236389 1654493543 202129823 1788182787 - -1186162321 1912913933 -122942838 1968176815 - - -5.9031385183334351e-001 4.1488575935363770e-001 - <_> - - 0 -1 88 1903888863 -286828472 -2125248034 -623115882 - -268301806 -894826357 -2046633148 -696873056 - - -6.3875061273574829e-001 4.0209171175956726e-001 - <_> - - 0 -1 123 -87223501 -1873424249 -1878929092 -586710990 - -643825151 -1039040192 -285122488 -264093 - - -5.4196298122406006e-001 4.5856228470802307e-001 - <_> - - 0 -1 52 -780030833 1363755203 -385150929 25502018 1214818435 - -1020786271 -1870036478 1200354241 - - -5.2826374769210815e-001 5.3351372480392456e-001 - <_> - - 0 -1 84 -1724706499 -184429355 620844509 -179010317 - -1610327896 -341801844 -1190328066 1755915264 - - -5.7672232389450073e-001 4.4138705730438232e-001 - - <_> - 9 - -5.4533123970031738e-001 - - <_> - - 0 -1 48 -254347649 -565919658 1079050328 1090502875 - 1895985446 2013437961 -916419445 -53481573 - - -5.8105266094207764e-001 3.3599999547004700e-001 - <_> - - 0 -1 65 2030928895 1438877010 1124143121 258207763 - 1361199276 1527410834 2072519624 1004267991 - - -5.9629368782043457e-001 3.6112698912620544e-001 - <_> - - 0 -1 45 -247204964 -242712316 54544644 892459288 1888023456 - -2138044280 -802615208 13199500 - - -6.5467655658721924e-001 3.0486112833023071e-001 - <_> - - 0 -1 3 -430509345 -1865653973 554091143 -1069121312 - 1091180718 50577994 -1031731181 -211321225 - - -5.8759629726409912e-001 3.9526104927062988e-001 - <_> - - 0 -1 106 -741412064 -255623164 1090945848 -1687760764 - 42428760 -1064762741 -1861683196 -81029101 - - -6.5875691175460815e-001 3.4154877066612244e-001 - <_> - - 0 -1 128 -464010241 762112 285299147 -589082223 1373135017 - -2138955645 1057005712 -526876236 - - -6.5968728065490723e-001 3.3614772558212280e-001 - <_> - - 0 -1 80 -666744719 -635780797 33637339 -887860848 - -1073532217 -108904320 440608996 -1100753973 - - -5.0520354509353638e-001 4.4810971617698669e-001 - <_> - - 0 -1 28 -1580738774 -1506653838 302055688 -721223615 - 1427604224 -1566332144 1078565791 -558431977 - - -5.5560898780822754e-001 4.3426483869552612e-001 - <_> - - 0 -1 103 957796629 538644536 352997725 80838797 453085387 - -1165492198 285346042 1487077737 - - -5.5915868282318115e-001 4.0778505802154541e-001 - - <_> - 9 - -6.7299038171768188e-001 - - <_> - - 0 -1 0 -882973185 -620584737 279035921 -673986422 - -1568464349 -2105466877 1468391879 -38825 - - -5.7544225454330444e-001 3.4235453605651855e-001 - <_> - - 0 -1 90 -1820101795 -1336770299 285245717 -57216724 - -502134548 -1425341984 -1475618680 -1195896480 - - -6.6810834407806396e-001 2.7653357386589050e-001 - <_> - - 0 -1 9 -100197449 -457893579 200991 1964749325 -754875920 - 1897044675 1669843618 -70792821 - - -4.9064287543296814e-001 4.3120625615119934e-001 - <_> - - 0 -1 117 -792114173 -544111547 537001999 2034569362 - -1065213888 1630052634 -1450583484 -532405661 - - -6.4218991994857788e-001 3.6113587021827698e-001 - <_> - - 0 -1 107 -1564241697 -1429683702 -2062974587 -1900539448 - -1040078205 -394262006 -188628336 -390485984 - - -5.9181970357894897e-001 3.5756480693817139e-001 - <_> - - 0 -1 4 1893434787 -1945108258 82458 -318734161 -939347837 - 684196040 1078496869 2133023515 - - -6.1955446004867554e-001 3.4674292802810669e-001 - <_> - - 0 -1 31 -196247204 1964277780 -1810886012 21827851 - -364280891 -1062338560 -536741128 -362562814 - - -5.2849757671356201e-001 4.1380330920219421e-001 - <_> - - 0 -1 61 -1929140897 353472529 -721412674 -1228123782 - -392951233 -1442693096 672800826 -232914898 - - -5.7934975624084473e-001 3.9208874106407166e-001 - <_> - - 0 -1 72 -1004361296 -1069243858 268710018 1393598601 - 213956864 417530145 -912735606 1327495627 - - -7.5585323572158813e-001 2.6728668808937073e-001 - - <_> - 9 - -7.1303337812423706e-001 - - <_> - - 0 -1 23 -557797393 1524138462 277074064 -737259367 - -1878818960 -81600384 -1740109301 -59267505 - - -6.7397260665893555e-001 1.9793814420700073e-001 - <_> - - 0 -1 42 -1222377543 960610456 -2013138684 -989277927 - -1010064731 -802979830 -645806439 -885143219 - - -4.5935314893722534e-001 4.1904711723327637e-001 - <_> - - 0 -1 124 -783292542 -728791016 1342570700 1481418249 - 1258825942 -1580563964 -1178136688 -272306640 - - -6.3012123107910156e-001 2.9463621973991394e-001 - <_> - - 0 -1 46 1369396573 -188563225 22085642 -1005861886 - 2023260232 -1123842045 -2146991925 1245170171 - - -5.2092707157135010e-001 3.9743596315383911e-001 - <_> - - 0 -1 64 1540188400 1976259599 -805025279 864127692 544944 - 1484935304 -2147056504 1002584738 - - -6.5315401554107666e-001 3.1758561730384827e-001 - <_> - - 0 -1 77 -188606981 -1873391210 16842830 -117157654 - -1576842600 -1454767992 -518835576 -1625272280 - - -5.8580338954925537e-001 3.4936144948005676e-001 - <_> - - 0 -1 18 -473497030 -477572088 16842905 -12164860 184698994 - 1350566019 -2143169323 1405313030 - - -6.0962837934494019e-001 3.0044576525688171e-001 - <_> - - 0 -1 92 -528022006 -611028904 1075937757 -577660920 - 1073809492 -1341620207 -1475846395 -162412743 - - -6.6547930240631104e-001 3.1993752717971802e-001 - <_> - - 0 -1 116 -2062347245 35311783 406966429 -640155632 - -1904205761 -2012610494 399245455 -937752211 - - -4.8515367507934570e-001 4.3642494082450867e-001 - - <_> - 10 - -1.1831332445144653e+000 - - <_> - - 0 -1 115 -912525479 -2146793066 247327 -554139184 320582141 - -1442774971 1552517769 -1464330096 - - -7.2892564535140991e-001 1.2876711785793304e-001 - <_> - - 0 -1 41 -182757566 -683667118 268566545 -540408959 - 1547915506 2014497074 1817806103 -549486525 - - -5.6024330854415894e-001 2.8734233975410461e-001 - <_> - - 0 -1 13 -1396013057 -175218480 536903951 -35946104 -92067077 - 956498056 -200474487 1331907188 - - -5.5237007141113281e-001 3.2844060659408569e-001 - <_> - - 0 -1 17 2110443855 1547702666 -1874853670 1083212172 - -2004008413 -498614008 572624451 1179093527 - - -7.2481799125671387e-001 2.6627025008201599e-001 - <_> - - 0 -1 43 -1751428966 -1626324992 -1073540847 -783806124 - -2146909454 -913440767 -2138941303 -558233160 - - -4.4304186105728149e-001 4.1505634784698486e-001 - <_> - - 0 -1 37 -576405461 -1625709950 1627439763 1116373274 - 1622902452 1107834529 975868423 2074176171 - - -5.6509882211685181e-001 3.5433205962181091e-001 - <_> - - 0 -1 118 1171205664 1426522307 49281 563122240 -791985520 - -930869245 -364148081 -590624140 - - -5.6250953674316406e-001 3.3341854810714722e-001 - <_> - - 0 -1 76 1162033968 1180991656 16859165 230787289 -2104786299 - -1819967351 1118240928 -343561865 - - -4.7331553697586060e-001 4.1576251387596130e-001 - <_> - - 0 -1 110 -2147085315 -1228897088 -2146839339 -1751314339 - -531605907 -393183232 1804153563 -1399324416 - - -5.8979070186614990e-001 3.7525305151939392e-001 - <_> - - 0 -1 55 1581887865 999817729 151311688 331546624 -991625824 - -938834941 1837335184 852075394 - - -5.4071021080017090e-001 4.0077716112136841e-001 - - <_> - 10 - -6.4480733871459961e-001 - - <_> - - 0 -1 16 -510660401 -884555766 272896026 -12189566 - -1685363509 -662568805 1073840823 -545105785 - - -5.3361344337463379e-001 2.7807486057281494e-001 - <_> - - 0 -1 48 -557408354 2115155922 -2130669353 1616707591 - 693193240 -1569554175 -1743918878 1983596555 - - -5.3364741802215576e-001 3.1411096453666687e-001 - <_> - - 0 -1 108 -413278733 83935516 536961502 1452278484 - -2004277212 -391683967 -1426466672 -85395040 - - -7.4530494213104248e-001 2.3025059700012207e-001 - <_> - - 0 -1 32 -938623022 1469386887 822151432 421593370 - -1433793568 -1602191360 -527916919 680112651 - - -4.6078306436538696e-001 4.0021440386772156e-001 - <_> - - 0 -1 50 1619785226 -1004367410 1417725137 126732357 - 148062614 -625983352 -712398335 -412918226 - - -4.9818846583366394e-001 3.6678382754325867e-001 - <_> - - 0 -1 24 -1064322531 1351938204 196691 -561840073 -1978859471 - -649944954 -2003664885 -1172094197 - - -4.7309580445289612e-001 4.2868506908416748e-001 - <_> - - 0 -1 96 -1878961904 1360035888 -1073721317 -1051487863 - -431841087 1628112896 -2112640640 -1829440828 - - -6.9250243902206421e-001 2.8783574700355530e-001 - <_> - - 0 -1 62 67496095 391741589 -2146154237 96245592 -893992548 - 982687872 571488264 278906307 - - -6.4613574743270874e-001 3.0145862698554993e-001 - <_> - - 0 -1 73 -415771792 1208487966 339825796 1792117580 - 1128517807 144965669 -536376816 732856538 - - -6.9449120759963989e-001 3.0338683724403381e-001 - <_> - - 0 -1 40 -1991530440 324215457 -2080275930 -1857940798 - 1342685625 721420800 1250592988 1493903457 - - -7.0043331384658813e-001 2.5916099548339844e-001 - - <_> - 10 - -6.0248321294784546e-001 - - <_> - - 0 -1 21 -16537745 2114438797 1409323561 1691064397 - -207434939 822260754 -384857461 2031088579 - - -6.1256545782089233e-001 1.7948718369007111e-001 - <_> - - 0 -1 1 -95427858 67117166 -1308426467 -1962693439 601886855 - 924320187 1661215701 2078945158 - - -6.8756872415542603e-001 2.2317354381084442e-001 - <_> - - 0 -1 121 -1853361185 -619857007 16793601 -184516476 - -1422775873 -488996831 1476610285 -926297672 - - -5.2260422706604004e-001 3.2479336857795715e-001 - <_> - - 0 -1 105 -267171326 1436635177 1937772829 -2092859315 - -769638067 -2122268534 1502103583 -18894227 - - -5.2588832378387451e-001 3.4061828255653381e-001 - <_> - - 0 -1 83 1880187281 -1862250368 303299 960921986 -2002701917 - -1593343958 -334888263 1058018448 - - -6.9037044048309326e-001 2.7262538671493530e-001 - <_> - - 0 -1 34 -2125487365 1347551377 -1861970752 1368654274 - -1064675233 436275211 327448684 2068015115 - - -5.3338903188705444e-001 3.2425448298454285e-001 - <_> - - 0 -1 36 1192659162 235536712 1078002258 428089414 - -2138651204 -1937242101 507742421 1932739127 - - -6.4654779434204102e-001 3.0722403526306152e-001 - <_> - - 0 -1 14 -805047416 -1962622822 -2013265442 2030239751 - 1082134810 1744963592 -1836871485 -249326965 - - -5.7250964641571045e-001 3.1499111652374268e-001 - <_> - - 0 -1 75 -650653297 170234379 -2063527695 448823424 - -2139088862 319586315 -2067685344 -1347692410 - - -5.4618871212005615e-001 3.8171616196632385e-001 - <_> - - 0 -1 56 -168821125 -1107300354 -536871052 -1125515426 - -1795721360 -1672085508 1845358040 -2114327569 - - -4.2669427394866943e-001 5.0532561540603638e-001 - - <_> - 11 - -1.1912760734558105e+000 - - <_> - - 0 -1 11 -1043414305 -1735900650 268517385 -1137929054 - -1048411462 -2011152253 -1957405841 -497557425 - - -5.7042253017425537e-001 2.1933962404727936e-001 - <_> - - 0 -1 71 -233469310 1360073157 376971 626087057 -1180588024 - -1191067261 -1474310132 830601690 - - -5.3927713632583618e-001 2.9026004672050476e-001 - <_> - - 0 -1 35 -1599643389 42074270 -1811918838 -949960625 - 1564707361 289538187 1204527649 -112006873 - - -6.0980087518692017e-001 2.8851604461669922e-001 - <_> - - 0 -1 59 585529126 -1100070936 -1342177537 833961983 - 1306961797 1986559992 -810088568 -1082149201 - - -3.2345715165138245e-001 5.5635309219360352e-001 - <_> - - 0 -1 95 1107806555 2030223765 17039707 -1224163308 - -1073053535 -1291837432 822618633 -121972608 - - -6.5054124593734741e-001 3.1912675499916077e-001 - <_> - - 0 -1 51 -171583461 -1660890605 268504396 453157697 - -1065215606 -1740602879 1824636801 1940062923 - - -4.7275745868682861e-001 4.2362514138221741e-001 - <_> - - 0 -1 87 -799546379 -2097769968 293605405 -21571376 285294733 - 136347650 -930405536 -69420863 - - -5.5549502372741699e-001 3.3842340111732483e-001 - <_> - - 0 -1 60 -594509036 -267114166 35413 -1052598126 545325639 - -1207959408 -1073643381 682827807 - - -5.4805672168731689e-001 3.7224516272544861e-001 - <_> - - 0 -1 63 1513710022 194882313 1109000450 28010496 -601835264 - -645791614 -1041880446 1561822180 - - -5.3384119272232056e-001 3.7635508179664612e-001 - <_> - - 0 -1 125 -754581391 -246595569 -2113336948 -1855323709 - 1090531337 -931133310 950984 -3971805 - - -5.2334308624267578e-001 4.0167775750160217e-001 - <_> - - 0 -1 58 -361268680 662383988 2147483638 -209756289 - -1375932428 -1895890954 -1744855042 -1142215109 - - -3.4343415498733521e-001 6.1590969562530518e-001 - - <_> - 10 - -7.7425497770309448e-001 - - <_> - - 0 -1 66 -716447302 -602037376 1090519043 -150261760 - 342934202 -2034138749 1141152394 -351301493 - - -4.8867926001548767e-001 3.4062498807907104e-001 - <_> - - 0 -1 98 -2071985592 -700120831 1078417460 672719121 - 1082264136 -209075063 -1438988203 -1465205245 - - -7.1539443731307983e-001 2.4058867990970612e-001 - <_> - - 0 -1 74 872558624 331821072 1610649929 -1181384552 - -2130081587 -92209146 -612134248 -1199562344 - - -4.4142067432403564e-001 3.7935256958007813e-001 - <_> - - 0 -1 68 -791554721 -737771072 2425605 740044819 1208549387 - 973897998 1124108962 802102203 - - -4.6558478474617004e-001 4.2193859815597534e-001 - <_> - - 0 -1 8 1893114270 -1013792636 360523 -586362838 -1073151001 - -2146917824 -2104934391 -875596965 - - -5.0676107406616211e-001 3.5864940285682678e-001 - <_> - - 0 -1 91 574816266 -2011773950 1476495634 580227538 - -2146781128 -2147448830 1901535891 -692616573 - - -6.1020326614379883e-001 3.0061775445938110e-001 - <_> - - 0 -1 70 2125429880 2080309246 -285282561 2142961407 - -1259516274 1073741823 754945025 867497448 - - -4.3854746222496033e-001 4.7815895080566406e-001 - <_> - - 0 -1 94 -1727736509 -1979678624 285229334 1115689064 - 537927788 -1207402368 1098914016 -91503488 - - -6.8697202205657959e-001 3.5183742642402649e-001 - <_> - - 0 -1 57 -528465144 -707035113 -1048575869 1372127361 8651416 - -526909310 -1845360374 -1451016182 - - -4.5901125669479370e-001 4.5875525474548340e-001 - <_> - - 0 -1 25 -2076984798 -533130869 -1060954112 1639977472 - 828440586 1792508680 -1693988801 -13285232 - - -4.8493441939353943e-001 4.3403539061546326e-001 - - <_> - - 0 1 1 9 - <_> - - 0 1 4 7 - <_> - - 0 2 2 6 - <_> - - 0 2 2 10 - <_> - - 0 2 3 4 - <_> - - 0 3 3 8 - <_> - - 0 4 1 8 - <_> - - 0 5 2 9 - <_> - - 0 7 1 8 - <_> - - 0 7 5 7 - <_> - - 0 9 1 5 - <_> - - 0 9 2 6 - <_> - - 0 10 3 7 - <_> - - 0 11 1 3 - <_> - - 0 12 2 1 - <_> - - 0 13 3 7 - <_> - - 0 14 1 1 - <_> - - 0 14 3 4 - <_> - - 0 16 1 1 - <_> - - 0 19 3 5 - <_> - - 0 20 3 4 - <_> - - 0 21 3 4 - <_> - - 0 22 2 4 - <_> - - 0 25 3 3 - <_> - - 0 25 4 3 - <_> - - 1 0 5 10 - <_> - - 1 2 1 9 - <_> - - 1 4 4 8 - <_> - - 1 4 5 9 - <_> - - 1 6 3 5 - <_> - - 1 9 2 3 - <_> - - 1 11 2 4 - <_> - - 1 15 3 2 - <_> - - 1 20 3 3 - <_> - - 1 28 2 2 - <_> - - 2 0 2 3 - <_> - - 2 0 3 5 - <_> - - 2 0 4 8 - <_> - - 2 3 4 5 - <_> - - 2 4 5 5 - <_> - - 2 5 2 5 - <_> - - 2 7 5 9 - <_> - - 2 8 1 3 - <_> - - 2 12 1 2 - <_> - - 2 13 3 3 - <_> - - 2 14 2 2 - <_> - - 2 16 3 5 - <_> - - 2 18 3 5 - <_> - - 2 22 2 4 - <_> - - 2 31 3 1 - <_> - - 3 0 2 3 - <_> - - 3 1 3 5 - <_> - - 3 1 3 8 - <_> - - 3 2 3 6 - <_> - - 3 8 4 6 - <_> - - 3 10 2 4 - <_> - - 3 14 2 2 - <_> - - 3 16 1 1 - <_> - - 3 18 1 1 - <_> - - 3 19 1 1 - <_> - - 3 19 1 2 - <_> - - 3 31 2 1 - <_> - - 4 4 4 4 - <_> - - 4 5 2 7 - <_> - - 4 6 2 4 - <_> - - 4 6 3 4 - <_> - - 4 7 2 8 - <_> - - 4 12 3 5 - <_> - - 4 19 2 3 - <_> - - 5 0 5 7 - <_> - - 5 3 4 4 - <_> - - 5 3 5 4 - <_> - - 5 5 2 8 - <_> - - 5 12 4 4 - <_> - - 5 22 1 1 - <_> - - 6 21 3 3 - <_> - - 6 26 2 2 - <_> - - 6 30 1 1 - <_> - - 6 31 1 1 - <_> - - 6 31 2 1 - <_> - - 7 0 2 3 - <_> - - 7 9 3 7 - <_> - - 7 17 1 1 - <_> - - 7 31 1 1 - <_> - - 7 31 2 1 - <_> - - 8 0 4 1 - <_> - - 8 5 2 4 - <_> - - 8 10 3 6 - <_> - - 8 16 2 1 - <_> - - 8 25 3 2 - <_> - - 8 30 1 1 - <_> - - 9 0 1 1 - <_> - - 9 0 3 2 - <_> - - 9 0 3 4 - <_> - - 9 15 2 1 - <_> - - 9 24 3 3 - <_> - - 9 29 1 1 - <_> - - 9 31 1 1 - <_> - - 10 4 2 2 - <_> - - 10 8 1 3 - <_> - - 10 15 1 3 - <_> - - 10 26 2 1 - <_> - - 10 30 1 1 - <_> - - 10 31 3 1 - <_> - - 11 0 3 2 - <_> - - 11 1 3 4 - <_> - - 11 5 3 8 - <_> - - 11 14 1 1 - <_> - - 11 23 2 2 - <_> - - 11 27 2 2 - <_> - - 11 31 1 1 - <_> - - 12 22 2 3 - <_> - - 12 29 1 1 - <_> - - 13 23 2 1 - <_> - - 13 24 1 3 - <_> - - 13 29 1 1 - <_> - - 13 31 2 1 - <_> - - 14 1 2 2 - <_> - - 14 1 2 6 - <_> - - 14 2 2 1 - <_> - - 14 24 2 2 - <_> - - 14 26 2 2 - <_> - - 14 28 1 1 - <_> - - 15 4 1 1 - <_> - - 15 24 1 1 - <_> - - 17 0 1 3 - <_> - - 17 3 1 4 - <_> - - 17 23 1 2 - <_> - - 17 27 1 1 - diff --git a/data/lbpcascades/lbpcascade_silverware.xml b/data/lbpcascades/lbpcascade_silverware.xml deleted file mode 100755 index 33aa443..0000000 --- a/data/lbpcascades/lbpcascade_silverware.xml +++ /dev/null @@ -1,1279 +0,0 @@ - - - - - BOOST - LBP - 80 - 12 - - GAB - 9.9500000476837158e-001 - 3.0000001192092896e-001 - 9.4999999999999996e-001 - 1 - 100 - - 256 - 1 - 16 - - - <_> - 4 - -8.2867860794067383e-002 - - <_> - - 0 -1 99 -268435521 -486543361 -258 1659633406 -134217857 - 1702887279 -134217929 -184549377 - - -7.5000000000000000e-001 8.6380833387374878e-001 - <_> - - 0 -1 39 -540541017 -1060113913 -781245688 -477121697 - -1818664155 1105186857 -505961467 -152575569 - - -7.9976779222488403e-001 7.5056612491607666e-001 - <_> - - 0 -1 101 -479208497 -353380921 -855254781 -1566689761 - -454302869 1893310787 -271591561 -134222965 - - -7.1062028408050537e-001 7.7380746603012085e-001 - <_> - - 0 -1 41 -338958865 -925383977 -1438297681 -981777969 - -882901177 1913369038 -135286729 1995959223 - - -7.8616768121719360e-001 6.9309240579605103e-001 - - <_> - 5 - -7.7058833837509155e-001 - - <_> - - 0 -1 14 -34089161 -2245 1878980471 -8687769 -134316045 - 1744797563 -8388737 1795146607 - - -6.1089491844177246e-001 7.3594772815704346e-001 - <_> - - 0 -1 32 -707274321 1896302609 1132560802 -183140351 17019099 - 830472347 -1993621429 1440074510 - - -6.4869755506515503e-001 5.6941097974777222e-001 - <_> - - 0 -1 4 -1055898237 -104492975 -1795141251 1464975384 - -1602043461 -914358144 1111543953 -2067496448 - - -6.0432785749435425e-001 5.5685383081436157e-001 - <_> - - 0 -1 96 -520160401 2063466495 -65665 -134217729 -50462805 - 1761476478 1693969709 1910503031 - - -5.6237226724624634e-001 6.2263637781143188e-001 - <_> - - 0 -1 6 -1479564374 -954482597 16859161 -799804534 268468874 - 713187329 1108033665 -714619755 - - -6.9048601388931274e-001 5.3264212608337402e-001 - - <_> - 5 - -7.1249550580978394e-001 - - <_> - - 0 -1 21 -34638473 -553976197 -134217865 -159715533 - -142901385 -272629761 -8421377 -956303361 - - -6.4170038700103760e-001 7.0683228969573975e-001 - <_> - - 0 -1 100 -8389777 -185860353 -277 -2097152001 -161 - -209780865 -1 -529006609 - - -5.5270516872406006e-001 6.9983023405075073e-001 - <_> - - 0 -1 118 -545259537 -276857217 -1258291302 1652358910 - -134236308 1735819126 -16812809 -221249673 - - -5.6243920326232910e-001 6.2150186300277710e-001 - <_> - - 0 -1 19 -342885713 -1369882213 -2079215310 -765214587 - -2113207945 1074365452 1393631959 1409022707 - - -6.8943935632705688e-001 5.3469669818878174e-001 - <_> - - 0 -1 23 -506991005 1360417115 -1844809365 -821575604 - 21178499 986120459 1347943419 -969541850 - - -6.7428857088088989e-001 5.5008578300476074e-001 - - <_> - 6 - -3.0183684825897217e-001 - - <_> - - 0 -1 31 -144703505 -143130625 -17 -134381841 -143130625 - 2012741567 -134218802 -134217841 - - -5.3079712390899658e-001 7.5616836547851563e-001 - <_> - - 0 -1 35 -137887809 -1924805943 1363218446 -817782134 - 1099022547 1082327168 -1279204784 1128784467 - - -6.4090979099273682e-001 5.3444361686706543e-001 - <_> - - 0 -1 15 -786433589 -515129128 277173650 -132673121 - -884037451 1137229866 1938662135 -676336865 - - -5.2920126914978027e-001 5.9623366594314575e-001 - <_> - - 0 -1 92 -1897400451 -1627924747 -335548553 -1 1257762559 - -2113929417 -419433067 -235309193 - - -5.5294114351272583e-001 5.8814722299575806e-001 - <_> - - 0 -1 112 -187176146 1743897116 -1878957040 542033563 - 1372582934 823282242 -158609727 -779295046 - - -6.8665105104446411e-001 4.4378995895385742e-001 - <_> - - 0 -1 9 1676637640 1887961346 16875658 1977614736 1682145753 - 813744265 -842338550 1930548135 - - -7.5830078125000000e-001 3.9562159776687622e-001 - - <_> - 8 - -3.9228534698486328e-001 - - <_> - - 0 -1 25 -167774345 -6689161 -2097153 -4194541 -282329093 -1 - -1 -352323601 - - -4.7727271914482117e-001 7.4114018678665161e-001 - <_> - - 0 -1 2 -1051598753 -1005571964 1900827102 2065404120 - -1207262247 -120553331 -1725955392 -494812414 - - -5.2365595102310181e-001 5.3981113433837891e-001 - <_> - - 0 -1 116 -2142770433 -1601462143 16842760 -804892128 1032369 - 268763273 1091011104 -1142957585 - - -4.7790464758872986e-001 5.4881525039672852e-001 - <_> - - 0 -1 87 -532155537 1351188929 1073823759 -1253637875 - -721321497 -662691837 -955278809 1623500836 - - -6.8072116374969482e-001 3.7135115265846252e-001 - <_> - - 0 -1 113 -1996457508 -2146282492 -1728016135 -578347007 - -1609004859 193626505 1153570968 -1920333632 - - -5.7289212942123413e-001 4.6210876107215881e-001 - <_> - - 0 -1 56 -972008109 -691003372 -2147413749 2098355010 - 143009971 -1744174583 -1073051430 617488921 - - -5.9549087285995483e-001 4.8842963576316833e-001 - <_> - - 0 -1 48 26 1971388449 419479901 2080931848 -1140292918 - -1719074813 -2130476842 -268398592 - - -5.8355164527893066e-001 4.7890499234199524e-001 - <_> - - 0 -1 57 -1052266874 167813132 -2130690045 -703061621 - -131874777 -662142838 -1064730555 1119947703 - - -6.9379311800003052e-001 3.9936643838882446e-001 - - <_> - 9 - -6.6581231355667114e-001 - - <_> - - 0 -1 29 2080314175 -112910205 805323551 1024016674 - 1073891387 -2137847805 1653140111 -7676933 - - -5.5957448482513428e-001 5.4044550657272339e-001 - <_> - - 0 -1 94 -1358956801 -100880986 -1887436809 1073741823 - -1896350220 -838860811 268434686 -1912602633 - - -4.3124794960021973e-001 5.6135851144790649e-001 - <_> - - 0 -1 76 -26230993 1357905647 -1358958674 -135266305 -524434 - -176291841 -142622837 -1005125829 - - -4.6799373626708984e-001 5.1660954952239990e-001 - <_> - - 0 -1 30 -313836176 -742240245 16818511 -1391787262 - 1632363443 -156630911 -83631445 248984215 - - -6.2023061513900757e-001 3.9792594313621521e-001 - <_> - - 0 -1 91 -612895966 591778561 1073812490 369347088 - -1870223303 556335107 553910792 1907094058 - - -6.2148678302764893e-001 4.1758581995964050e-001 - <_> - - 0 -1 46 -1430257749 -672663689 -218104082 -135266322 - -1493174275 -873463809 -276826113 -690006715 - - -5.1617449522018433e-001 5.2012032270431519e-001 - <_> - - 0 -1 123 1088746207 1489289603 16781456 -443461355 - -762795606 -670564192 -1465814774 -101527550 - - -5.0202989578247070e-001 5.0987190008163452e-001 - <_> - - 0 -1 53 -1001679641 -955695103 25248080 -738078457 671123502 - 193003713 -1836523327 -216026117 - - -5.2692401409149170e-001 5.3243070840835571e-001 - <_> - - 0 -1 89 2147417937 -1048642 -1039 -1766457361 -134236382 - -1922646177 -16777473 -1534591162 - - -4.6150138974189758e-001 5.6634509563446045e-001 - - <_> - 8 - -1.2349532842636108e+000 - - <_> - - 0 -1 67 -142902409 -67142273 1878982639 -1182802113 -75841 - -274219146 -88604929 -31817921 - - -4.5625588297843933e-001 5.7534247636795044e-001 - <_> - - 0 -1 128 -808330661 1390004234 1107406871 -2098932967 - -767440829 1208655939 -1971196977 1351600587 - - -5.7236993312835693e-001 4.1942635178565979e-001 - <_> - - 0 -1 0 -805307409 -1052697 -65684 -4233 -134217745 -4194453 - -696778831 -708062879 - - -4.5485407114028931e-001 5.5909335613250732e-001 - <_> - - 0 -1 119 -169888509 1150652435 1074791064 541757442 - -645182635 989929472 1262741126 1963976639 - - -6.4869618415832520e-001 3.9796143770217896e-001 - <_> - - 0 -1 38 -912524801 811171970 33644801 -717151469 -2108956437 - 294158344 1109713681 1900266000 - - -5.0387507677078247e-001 5.1329559087753296e-001 - <_> - - 0 -1 20 -746687625 -200802301 1073872962 285491202 - 1208512717 -2138664446 -1837102693 1174835902 - - -5.9465301036834717e-001 4.4057011604309082e-001 - <_> - - 0 -1 16 -442903927 -988184502 -717209211 1443168395 - -1465793521 1252524168 1107337938 -1050414557 - - -5.9043467044830322e-001 4.3687704205513000e-001 - <_> - - 0 -1 104 -1692667790 -612286452 -1056931520 437452806 - -2136309078 -401536992 -1987928929 -1033981310 - - -5.0495445728302002e-001 4.9910807609558105e-001 - - <_> - 9 - -5.4583048820495605e-001 - - <_> - - 0 -1 97 -419954689 -570949699 2147417599 -1 -872415749 - -301989897 -872433670 -268443689 - - -4.0734556317329407e-001 7.1092438697814941e-001 - <_> - - 0 -1 3 -1062674253 1929486475 197402 1841550219 135268235 - -1165491808 956369290 1258896162 - - -5.4886269569396973e-001 4.1644170880317688e-001 - <_> - - 0 -1 37 -620271105 -901300206 1359008346 -603537150 - 1355455189 596312193 -247999129 -728767550 - - -5.1914668083190918e-001 3.9419922232627869e-001 - <_> - - 0 -1 17 -1072700149 546031429 12798103 1881656595 35238042 - 682232321 176931799 1148695251 - - -5.4100900888442993e-001 4.0588796138763428e-001 - <_> - - 0 -1 71 -522857685 1350893957 17339597 1999601732 -779974469 - -359071607 1879296642 -1236927697 - - -4.9249285459518433e-001 4.4877073168754578e-001 - <_> - - 0 -1 93 2037497904 492944831 -2013291075 -754983169 - 1837104414 -671812233 -1660989976 -973105033 - - -4.6483671665191650e-001 4.8267844319343567e-001 - <_> - - 0 -1 33 -553943182 -100663369 -1327169 -181207174 -805896236 - -16777225 -32770 -344459717 - - -3.9679497480392456e-001 5.6408804655075073e-001 - <_> - - 0 -1 44 -8439301 -9502850 2147412095 2134171367 1467968283 - -555876513 1719612907 -959121 - - -3.7275579571723938e-001 6.2219065427780151e-001 - <_> - - 0 -1 62 -2086686357 -2143072184 1073745988 -1878839231 - 1221503177 -2113732606 1133091218 1470880455 - - -5.5160778760910034e-001 4.4197219610214233e-001 - - <_> - 8 - -4.9482953548431396e-001 - - <_> - - 0 -1 124 803987455 -1207959557 -1073747969 -3 -1879048193 - -1720221705 -1073744641 -1212159499 - - -4.2883211374282837e-001 5.8106172084808350e-001 - <_> - - 0 -1 1 -1520569905 -125497088 1360134399 -49444069 - -1065189105 -612134877 -1497194288 -1006112575 - - -4.8296096920967102e-001 4.3431344628334045e-001 - <_> - - 0 -1 108 -67112229 -797503462 268623881 1083056391 - -1874187198 1879638016 -804355463 1985162053 - - -6.1597704887390137e-001 3.4508374333381653e-001 - <_> - - 0 -1 26 -686760009 1468434576 1140918535 -880733942 12599987 - -1304752000 -1593784081 115557220 - - -5.7973521947860718e-001 4.0324980020523071e-001 - <_> - - 0 -1 115 -753405796 4259842 -872415136 85172613 154534824 - 8454145 -2147292968 1094185899 - - -4.7171372175216675e-001 4.6018373966217041e-001 - <_> - - 0 -1 64 -737160572 2107229470 1478238399 386729999 46739708 - -1717532540 134302191 1502456202 - - -4.7625115513801575e-001 4.6307522058486938e-001 - <_> - - 0 -1 63 574973114 1079378118 151608 -1089433600 683881170 - 1234370560 25761968 1305471639 - - -5.4804503917694092e-001 4.2817059159278870e-001 - <_> - - 0 -1 126 -913048353 -1333444591 303141015 1107341569 - -1727960821 1644167297 -1190753878 1418524891 - - -6.3843786716461182e-001 3.2018747925758362e-001 - - <_> - 10 - -4.7552201151847839e-001 - - <_> - - 0 -1 54 -17825929 -8718489 -34111631 -135004289 -1358954497 - -16814213 -151556225 -285220369 - - -4.1965106129646301e-001 5.5681818723678589e-001 - <_> - - 0 -1 88 -1856526326 -645691871 337711324 1464176998 - -1602581814 -1710751608 168420078 -1341468062 - - -4.0517404675483704e-001 4.9981650710105896e-001 - <_> - - 0 -1 45 -741223945 -1627185101 822169913 407916675 - -897447857 589300224 540099855 -1156899883 - - -4.4794428348541260e-001 4.3524059653282166e-001 - <_> - - 0 -1 66 258608606 -1120993285 -419517441 -578240642 - -1879056401 -1101037569 -13383 -28301584 - - -3.9371734857559204e-001 5.2872020006179810e-001 - <_> - - 0 -1 117 -350280689 -829730738 -1073461695 38377489 - -645158785 839057410 -1249137694 1882566387 - - -5.7474929094314575e-001 3.8859930634498596e-001 - <_> - - 0 -1 34 1536523031 -952168281 -1855975139 -854621937 - -939095838 -1744699368 -796270511 1582955555 - - -5.4318642616271973e-001 4.1631007194519043e-001 - <_> - - 0 -1 51 1393782562 319525363 8471383 1368384004 889651722 - 1921550554 -1836930098 1660195204 - - -7.2387772798538208e-001 2.8236424922943115e-001 - <_> - - 0 -1 78 1675075922 637567168 -2130116204 -1890844654 - 34255055 167907336 1091555477 -2142773065 - - -5.3113341331481934e-001 3.7920853495597839e-001 - <_> - - 0 -1 7 1164149387 1433912608 16876979 1595080980 1275865262 - -1446313974 1241665562 173580528 - - -5.0643980503082275e-001 4.4159597158432007e-001 - <_> - - 0 -1 129 -111949961 -783789413 268583504 -923765997 - -1073657336 -1340440574 -394149886 1216081042 - - -5.0880813598632813e-001 4.1170257329940796e-001 - - <_> - 11 - -6.9445723295211792e-001 - - <_> - - 0 -1 106 -487588613 -118095873 -1 2109472735 -1258291202 - -101712129 -33832963 -67652237 - - -4.0311419963836670e-001 6.2951332330703735e-001 - <_> - - 0 -1 49 -268435473 -353372166 2138045906 -4121 -276824105 - 1317007308 -41945099 -134484017 - - -3.5493713617324829e-001 5.5815106630325317e-001 - <_> - - 0 -1 5 1460877355 -15613689 558207061 -1623109371 - -1926723379 244908044 -113047169 1414649856 - - -5.8201593160629272e-001 3.5618588328361511e-001 - <_> - - 0 -1 103 -669296387 189940185 -1860046723 -1760460773 - -1740078915 -931100536 276828352 -1917868015 - - -4.2647001147270203e-001 4.6035429835319519e-001 - <_> - - 0 -1 107 -2109233498 -602287230 -1054785005 1360101827 - 1099137177 -318504822 -1341497202 232232049 - - -4.9850422143936157e-001 4.4256457686424255e-001 - <_> - - 0 -1 40 -54286241 -1608934766 286327519 -1270398764 - 1267376258 1636335746 542720627 1966594122 - - -5.5573022365570068e-001 3.9825862646102905e-001 - <_> - - 0 -1 18 -904213325 1133543618 67508251 -714997735 1094779186 - 160088201 872654991 -903019733 - - -5.2738076448440552e-001 3.8662704825401306e-001 - <_> - - 0 -1 70 1275766299 1347454976 150995380 -217382907 - 1661501627 -788494333 1259046051 -1006600122 - - -4.6260216832160950e-001 4.6852749586105347e-001 - <_> - - 0 -1 121 -367803633 420562962 36765796 -502050533 1380984391 - 268601345 536897573 -995624251 - - -5.2821987867355347e-001 4.4226339459419250e-001 - <_> - - 0 -1 68 -470086117 1069514507 -268472471 1936420849 - -1904232854 1475346303 -160432647 -258802070 - - -4.5063796639442444e-001 5.2728754281997681e-001 - <_> - - 0 -1 85 -698610339 -1504477166 1267372697 822280328 - -909606742 -561903583 -1658732533 962675013 - - -5.5067950487136841e-001 3.9346820116043091e-001 - - <_> - 9 - -7.5511032342910767e-001 - - <_> - - 0 -1 27 -485801045 -1031585761 285212749 -1013038975 - 427848842 -1006632832 -1039468406 -162905189 - - -4.8945146799087524e-001 4.7218933701515198e-001 - <_> - - 0 -1 114 -962887670 1547862275 -1827077881 1140871689 - -536829941 -763363328 -264142181 1112595267 - - -6.1379230022430420e-001 3.4447920322418213e-001 - <_> - - 0 -1 111 -784109321 320069633 1073811463 1074292770 - -2138957664 -2130001880 -2147252214 315289683 - - -5.6861025094985962e-001 3.7049382925033569e-001 - <_> - - 0 -1 80 -679857295 -17928596 -328961 991442748 1064728144 - -357040523 -1082493190 -1368229638 - - -3.9095887541770935e-001 6.0248941183090210e-001 - <_> - - 0 -1 82 175736687 -17072405 2130705262 -218107907 - -1358978530 1692925804 787824558 -672137257 - - -4.0445902943611145e-001 6.0857713222503662e-001 - <_> - - 0 -1 47 -985116365 -553647839 420626839 1968635918 - -1576924981 -360119808 142606465 -795508656 - - -4.8094493150711060e-001 5.1770961284637451e-001 - <_> - - 0 -1 50 -1459109750 33792144 21514342 1343230978 1124110539 - 50364672 441024643 -202393597 - - -5.2261912822723389e-001 4.6680617332458496e-001 - <_> - - 0 -1 98 -259008926 1378975745 -1476362162 1888485505 - 1082744897 571146241 1367392642 -1073229683 - - -6.1712646484375000e-001 3.8970091938972473e-001 - <_> - - 0 -1 125 34318799 1090695442 25199491 1342177299 -2060943181 - 143360000 -2097010032 -907873592 - - -5.3400212526321411e-001 4.4268184900283813e-001 - - <_> - 10 - -4.8388049006462097e-001 - - <_> - - 0 -1 120 -1477443585 -1140940929 -1342185476 1308588029 - -1376256001 218070525 1073741181 -41951875 - - -5.0602412223815918e-001 5.5081558227539063e-001 - <_> - - 0 -1 36 -73936261 -2137816955 -1073659749 -553533419 - -1073706765 -30799693 -972443088 1998113303 - - -4.8420175909996033e-001 4.5527526736259460e-001 - <_> - - 0 -1 77 454566983 420696071 16777221 -2130608117 -1719576352 - -644874174 -2111166071 577795078 - - -6.1467814445495605e-001 3.4610831737518311e-001 - <_> - - 0 -1 60 -1592753970 -251404269 570458176 486621571 - -2130476982 -1207431030 25803086 -2029039551 - - -5.2004736661911011e-001 4.5498979091644287e-001 - <_> - - 0 -1 72 694105913 1907355278 -37129 821280759 931135417 - -923336907 1073716718 -68419540 - - -4.1492795944213867e-001 5.7309722900390625e-001 - <_> - - 0 -1 79 1393265851 -1032732526 264196 -920530793 754211 - 169623560 1149456611 1135983235 - - -5.1638025045394897e-001 4.7242832183837891e-001 - <_> - - 0 -1 73 706130001 -1708251305 1056944760 1006373626 - -1303178409 -813991949 -1183128387 -604048669 - - -4.1649991273880005e-001 5.9589266777038574e-001 - <_> - - 0 -1 95 -904859491 -134017015 1090589192 -587038719 - -167673709 -897449815 152141841 886696449 - - -6.4827072620391846e-001 3.5843926668167114e-001 - <_> - - 0 -1 90 -717057392 690163912 822149263 65803 -1706982525 - -1736400884 534537 -1630082545 - - -5.0309199094772339e-001 5.1634097099304199e-001 - <_> - - 0 -1 12 -1366843350 -2126376671 1041 -566034432 142770176 - 12583104 51712 1116198165 - - -7.9860860109329224e-001 3.1541401147842407e-001 - - <_> - 10 - -5.6616169214248657e-001 - - <_> - - 0 -1 28 -143395977 2004844407 -32897 1840447419 -852257 - -4097 -272630497 -1165502065 - - -4.4186046719551086e-001 5.1379764080047607e-001 - <_> - - 0 -1 8 -519577109 -427718635 -1862262703 -65943231 9163380 - 1112064264 553714225 1157599521 - - -6.9529622793197632e-001 2.9373377561569214e-001 - <_> - - 0 -1 109 990036221 -1392408495 85 -1455423472 537079956 - -1451032448 -2121658180 -1917118335 - - -4.6548900008201599e-001 4.4904062151908875e-001 - <_> - - 0 -1 83 -307263958 1726969598 602799716 -587284627 - -2110304757 -1500547078 1400237979 -194002951 - - -4.4492045044898987e-001 5.2867370843887329e-001 - <_> - - 0 -1 84 -696132137 331497536 -1868546039 -1859480056 - 1753940107 -1029504896 -1341584891 937520647 - - -4.9129620194435120e-001 4.4696673750877380e-001 - <_> - - 0 -1 61 -1056718371 -912911872 67113021 1498447874 134777514 - -1412955989 -2138406733 1082270464 - - -5.8106380701065063e-001 4.1291686892509460e-001 - <_> - - 0 -1 43 -648808770 -703963135 -2147401712 -1858043831 - 1073823883 1074266248 159924795 1879588907 - - -5.2166140079498291e-001 4.6159252524375916e-001 - <_> - - 0 -1 65 538123210 285607041 -2122121208 -1651965941 - -1047953261 1661077920 591915 1689841382 - - -7.4180144071578979e-001 3.0022916197776794e-001 - <_> - - 0 -1 55 805390529 407044123 285213203 211421255 -1702852378 - -1919942528 -2134294375 2066729839 - - -4.8658525943756104e-001 5.4231238365173340e-001 - <_> - - 0 -1 69 -490280822 -1274937328 268439820 1359003776 - -931126870 1220674050 268681287 1997226373 - - -5.6268626451492310e-001 4.5061412453651428e-001 - - <_> - 10 - -9.9649858474731445e-001 - - <_> - - 0 -1 122 -1745100805 -1209164803 -1073770531 -436207891 - -1090560009 234354687 -1610664449 -1082138881 - - -4.0143370628356934e-001 5.6573116779327393e-001 - <_> - - 0 -1 11 -644493203 -1021149047 16847288 -804977263 - 1074438223 1375879170 1099505907 -233072125 - - -4.9022576212882996e-001 4.1356840729713440e-001 - <_> - - 0 -1 110 -1092637138 -1127253650 -604013462 309325799 - 511047567 -562074754 -700452946 -763371997 - - -4.2038223147392273e-001 5.0647193193435669e-001 - <_> - - 0 -1 24 1223739637 -1419051417 1043595135 -215335105 - 376670206 -167870465 -4194306 -222771398 - - -4.0432786941528320e-001 5.9335744380950928e-001 - <_> - - 0 -1 75 -1761937577 -1076383745 -286361737 -9060559 - 2013197781 2013265783 -98370 -1002109842 - - -4.4517979025840759e-001 5.2503407001495361e-001 - <_> - - 0 -1 102 1359075611 -233766656 65681 -1878048735 -1610570746 - 1379991688 -1073689784 -221669373 - - -4.9918147921562195e-001 4.6203434467315674e-001 - <_> - - 0 -1 52 1186053495 -36241670 -268451888 519745529 175382495 - 788381687 2147319804 1327036346 - - -4.6265572309494019e-001 5.1841813325881958e-001 - <_> - - 0 -1 59 -1040035797 1946189894 50247 -1862266624 1090519113 - 268961800 679544907 757613389 - - -5.5006593465805054e-001 4.4656375050544739e-001 - <_> - - 0 -1 10 1610993732 -939524096 1073877397 -267910919 - 151167146 537427968 -769096510 -181428117 - - -5.6329357624053955e-001 4.2267900705337524e-001 - <_> - - 0 -1 86 -1596021624 2047393801 -2130673584 -1856700352 - 327207619 272728192 -2004808112 491069440 - - -6.3942277431488037e-001 3.8081073760986328e-001 - - <_> - 8 - -5.5261385440826416e-001 - - <_> - - 0 -1 13 -648185009 -1315897313 -2139077632 1367998985 - 1744840211 -1005502457 -935198613 -74777841 - - -5.3191488981246948e-001 4.0654698014259338e-001 - <_> - - 0 -1 105 1699432742 -1890377581 1343232064 -1039957887 - -2142687167 637566976 -2122282989 -460871217 - - -5.4315727949142456e-001 3.6683899164199829e-001 - <_> - - 0 -1 81 -67160267 2105388843 -1619001345 1937768302 - -1359003974 -1098989786 -805322771 -1874678652 - - -3.9974156022071838e-001 5.5645257234573364e-001 - <_> - - 0 -1 58 -1072656189 1095241792 16777487 -352059374 4718723 - 1109393544 1074438486 -1848987381 - - -5.0869542360305786e-001 4.9633875489234924e-001 - <_> - - 0 -1 22 226493774 -1911816127 1091108968 26214662 26222970 - -1123287032 -1987040599 -882898875 - - -6.0312920808792114e-001 3.5752627253532410e-001 - <_> - - 0 -1 127 -259153461 -805273578 50364730 -1060208632 - -1708161014 947912705 -2147450710 80388754 - - -6.9576680660247803e-001 3.3376914262771606e-001 - <_> - - 0 -1 42 -800800303 1368954882 75795 2031108096 -2013069281 - 212336778 538680 2064105488 - - -5.6596046686172485e-001 4.3809539079666138e-001 - <_> - - 0 -1 74 -2108215089 1260109955 -1207926768 268812673 - -2146893693 167788680 55189712 -140564306 - - -5.1393473148345947e-001 4.8148322105407715e-001 - - <_> - - 0 0 1 2 - <_> - - 0 0 1 3 - <_> - - 0 0 2 1 - <_> - - 0 0 2 11 - <_> - - 0 0 3 1 - <_> - - 0 0 4 4 - <_> - - 0 1 1 3 - <_> - - 0 1 3 5 - <_> - - 0 2 1 2 - <_> - - 0 2 4 17 - <_> - - 0 3 1 1 - <_> - - 0 4 1 1 - <_> - - 0 4 1 4 - <_> - - 0 4 1 18 - <_> - - 0 4 2 21 - <_> - - 0 5 1 1 - <_> - - 0 5 1 2 - <_> - - 0 5 1 4 - <_> - - 0 5 2 11 - <_> - - 0 6 1 2 - <_> - - 0 7 1 15 - <_> - - 0 7 2 18 - <_> - - 0 13 3 3 - <_> - - 0 13 3 19 - <_> - - 0 14 2 5 - <_> - - 0 14 2 14 - <_> - - 0 16 3 17 - <_> - - 0 17 1 6 - <_> - - 0 17 2 9 - <_> - - 0 18 1 6 - <_> - - 0 19 2 17 - <_> - - 0 21 4 13 - <_> - - 0 21 4 16 - <_> - - 0 22 2 8 - <_> - - 0 36 1 5 - <_> - - 0 40 2 12 - <_> - - 0 43 1 7 - <_> - - 0 46 2 10 - <_> - - 0 48 1 9 - <_> - - 0 48 2 4 - <_> - - 0 50 1 2 - <_> - - 0 56 2 3 - <_> - - 0 71 1 3 - <_> - - 0 74 1 2 - <_> - - 0 77 1 1 - <_> - - 0 77 2 1 - <_> - - 1 0 1 3 - <_> - - 1 0 2 1 - <_> - - 1 0 3 1 - <_> - - 1 2 1 1 - <_> - - 1 4 1 2 - <_> - - 1 4 3 23 - <_> - - 1 5 2 7 - <_> - - 1 9 1 1 - <_> - - 1 10 2 15 - <_> - - 1 12 2 7 - <_> - - 1 14 2 9 - <_> - - 1 25 2 18 - <_> - - 1 39 2 10 - <_> - - 1 71 1 3 - <_> - - 2 0 1 3 - <_> - - 2 0 2 1 - <_> - - 2 3 1 2 - <_> - - 2 4 1 5 - <_> - - 2 16 3 8 - <_> - - 2 18 3 14 - <_> - - 2 21 2 2 - <_> - - 2 22 1 4 - <_> - - 2 24 1 2 - <_> - - 2 64 1 5 - <_> - - 3 0 2 1 - <_> - - 3 1 3 25 - <_> - - 3 2 3 6 - <_> - - 3 3 2 11 - <_> - - 3 6 1 3 - <_> - - 3 17 1 11 - <_> - - 3 22 3 17 - <_> - - 3 23 1 4 - <_> - - 3 42 1 10 - <_> - - 3 52 1 6 - <_> - - 3 77 1 1 - <_> - - 4 0 2 2 - <_> - - 4 1 1 2 - <_> - - 4 2 1 1 - <_> - - 5 7 2 20 - <_> - - 5 12 2 19 - <_> - - 5 14 1 3 - <_> - - 5 19 2 15 - <_> - - 6 0 1 1 - <_> - - 6 0 2 1 - <_> - - 6 1 2 13 - <_> - - 6 5 2 5 - <_> - - 6 7 2 17 - <_> - - 6 10 2 7 - <_> - - 6 13 2 10 - <_> - - 6 14 2 13 - <_> - - 6 16 2 14 - <_> - - 6 19 2 7 - <_> - - 6 36 1 8 - <_> - - 6 39 2 7 - <_> - - 6 41 2 9 - <_> - - 6 44 2 2 - <_> - - 6 51 2 6 - <_> - - 6 77 2 1 - <_> - - 7 0 1 1 - <_> - - 7 9 1 2 - <_> - - 7 20 1 9 - <_> - - 7 23 1 4 - <_> - - 7 45 1 7 - <_> - - 7 77 1 1 - <_> - - 8 0 1 1 - <_> - - 8 47 1 11 - <_> - - 8 53 1 4 - <_> - - 8 77 1 1 - <_> - - 9 0 1 2 - <_> - - 9 0 1 15 - <_> - - 9 0 1 20 - <_> - - 9 2 1 3 - <_> - - 9 3 1 2 - <_> - - 9 6 1 3 - <_> - - 9 9 1 13 - <_> - - 9 13 1 2 - <_> - - 9 13 1 8 - <_> - - 9 19 1 16 - <_> - - 9 20 1 4 - <_> - - 9 25 1 4 - <_> - - 9 43 1 5 - <_> - - 9 48 1 4 - <_> - - 9 59 1 3 - <_> - - 9 61 1 5 - diff --git a/data/readme.txt b/data/readme.txt deleted file mode 100644 index 46ff0aa..0000000 --- a/data/readme.txt +++ /dev/null @@ -1,7 +0,0 @@ -This folder contains various data that is used by cv libraries and/or demo applications. ----------------------------------------------------------------------------------------- - -haarcascades - the folder contains trained classifiers for detecting objects - of a particular type, e.g. faces (frontal, profile), pedestrians etc. - Some of the classifiers have a special license - please, - look into the files for details. diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt deleted file mode 100644 index b4e48e6..0000000 --- a/include/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -file(GLOB old_hdrs "opencv/*.h*") -install(FILES ${old_hdrs} - DESTINATION ${OPENCV_INCLUDE_INSTALL_PATH}/opencv - COMPONENT dev) -install(FILES "opencv2/opencv.hpp" - DESTINATION ${OPENCV_INCLUDE_INSTALL_PATH}/opencv2 - COMPONENT dev) diff --git a/include/opencv/cv.h b/include/opencv/cv.h deleted file mode 100644 index 2d1a597..0000000 --- a/include/opencv/cv.h +++ /dev/null @@ -1,82 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_CV_H__ -#define __OPENCV_OLD_CV_H__ - -#if defined(_MSC_VER) - #define CV_DO_PRAGMA(x) __pragma(x) - #define __CVSTR2__(x) #x - #define __CVSTR1__(x) __CVSTR2__(x) - #define __CVMSVCLOC__ __FILE__ "("__CVSTR1__(__LINE__)") : " - #define CV_MSG_PRAGMA(_msg) CV_DO_PRAGMA(message (__CVMSVCLOC__ _msg)) -#elif defined(__GNUC__) - #define CV_DO_PRAGMA(x) _Pragma (#x) - #define CV_MSG_PRAGMA(_msg) CV_DO_PRAGMA(message (_msg)) -#else - #define CV_DO_PRAGMA(x) - #define CV_MSG_PRAGMA(_msg) -#endif -#define CV_WARNING(x) CV_MSG_PRAGMA("Warning: " #x) - -//CV_WARNING("This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module") - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/video/tracking.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/flann/flann.hpp" -#include "opencv2/calib3d/calib3d.hpp" -#include "opencv2/objdetect/objdetect.hpp" -//#include "opencv2/legacy/compat.hpp" - -#if !defined(CV_IMPL) -#define CV_IMPL extern "C" -#endif //CV_IMPL - -#if defined(__cplusplus) -#include "opencv2/core/internal.hpp" -#endif //__cplusplus - -#endif // __OPENCV_OLD_CV_H_ diff --git a/include/opencv/cv.hpp b/include/opencv/cv.hpp deleted file mode 100644 index 37b523b..0000000 --- a/include/opencv/cv.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_CV_HPP__ -#define __OPENCV_OLD_CV_HPP__ - -//#if defined(__GNUC__) -//#warning "This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module" -//#endif - -#include - -#endif diff --git a/include/opencv/cvaux.h b/include/opencv/cvaux.h deleted file mode 100644 index b15d068..0000000 --- a/include/opencv/cvaux.h +++ /dev/null @@ -1,65 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_AUX_H__ -#define __OPENCV_OLD_AUX_H__ - -//#if defined(__GNUC__) -//#warning "This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module" -//#endif - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/video/tracking.hpp" -#include "opencv2/video/background_segm.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/calib3d/calib3d.hpp" -#include "opencv2/objdetect/objdetect.hpp" -#include "opencv2/legacy/legacy.hpp" -#include "opencv2/legacy/compat.hpp" -#include "opencv2/legacy/blobtrack.hpp" -#include "opencv2/contrib/contrib.hpp" - -#endif - -/* End of file. */ diff --git a/include/opencv/cvaux.hpp b/include/opencv/cvaux.hpp deleted file mode 100644 index 952210b..0000000 --- a/include/opencv/cvaux.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_AUX_HPP__ -#define __OPENCV_OLD_AUX_HPP__ - -//#if defined(__GNUC__) -//#warning "This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module" -//#endif - -#include - -#endif diff --git a/include/opencv/cvwimage.h b/include/opencv/cvwimage.h deleted file mode 100644 index de89c92..0000000 --- a/include/opencv/cvwimage.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to -// this license. If you do not agree to this license, do not download, -// install, copy or use the software. -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, Google, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation or contributors may not 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 Intel Corporation or contributors be -// liable for any direct, indirect, incidental, special, exemplary, or -// consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (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 __OPENCV_OLD_WIMAGE_HPP__ -#define __OPENCV_OLD_WIMAGE_HPP__ - -#include "opencv2/core/wimage.hpp" - -#endif diff --git a/include/opencv/cxcore.h b/include/opencv/cxcore.h deleted file mode 100644 index d52ad4f..0000000 --- a/include/opencv/cxcore.h +++ /dev/null @@ -1,53 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_CXCORE_H__ -#define __OPENCV_OLD_CXCORE_H__ - -//#if defined(__GNUC__) -//#warning "This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module" -//#endif - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" - -#endif diff --git a/include/opencv/cxcore.hpp b/include/opencv/cxcore.hpp deleted file mode 100644 index 033b365..0000000 --- a/include/opencv/cxcore.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_CXCORE_HPP__ -#define __OPENCV_OLD_CXCORE_HPP__ - -//#if defined(__GNUC__) -//#warning "This is a deprecated opencv header provided for compatibility. Please include a header from a corresponding opencv module" -//#endif - -#include - -#endif diff --git a/include/opencv/cxeigen.hpp b/include/opencv/cxeigen.hpp deleted file mode 100644 index 1f04d1a..0000000 --- a/include/opencv/cxeigen.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_EIGEN_HPP__ -#define __OPENCV_OLD_EIGEN_HPP__ - -#include "opencv2/core/eigen.hpp" - -#endif diff --git a/include/opencv/cxmisc.h b/include/opencv/cxmisc.h deleted file mode 100644 index 6446944..0000000 --- a/include/opencv/cxmisc.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __OPENCV_OLD_CXMISC_H__ -#define __OPENCV_OLD_CXMISC_H__ - -#include "opencv2/core/internal.hpp" - -#endif diff --git a/include/opencv/highgui.h b/include/opencv/highgui.h deleted file mode 100644 index 9725c9f..0000000 --- a/include/opencv/highgui.h +++ /dev/null @@ -1,50 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_HIGHGUI_H__ -#define __OPENCV_OLD_HIGHGUI_H__ - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/highgui/highgui_c.h" -#include "opencv2/highgui/highgui.hpp" - -#endif diff --git a/include/opencv/ml.h b/include/opencv/ml.h deleted file mode 100644 index 0383a2f..0000000 --- a/include/opencv/ml.h +++ /dev/null @@ -1,48 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OLD_ML_H__ -#define __OPENCV_OLD_ML_H__ - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/ml/ml.hpp" - -#endif diff --git a/include/opencv2/opencv.hpp b/include/opencv2/opencv.hpp deleted file mode 100644 index f89547c..0000000 --- a/include/opencv2/opencv.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_ALL_HPP__ -#define __OPENCV_ALL_HPP__ - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/flann/miniflann.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/photo/photo.hpp" -#include "opencv2/video/video.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/objdetect/objdetect.hpp" -#include "opencv2/calib3d/calib3d.hpp" -#include "opencv2/ml/ml.hpp" -#include "opencv2/highgui/highgui_c.h" -#include "opencv2/highgui/highgui.hpp" -#include "opencv2/contrib/contrib.hpp" - -#endif diff --git a/index.rst b/index.rst deleted file mode 100644 index 5f50b66..0000000 --- a/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. opencvstd documentation master file, created by - sphinx-quickstart on Mon Feb 14 00:30:43 2011. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to opencv documentation! -================================ - -.. toctree:: - :maxdepth: 2 - - modules/refman.rst - platforms/android/refman.rst - doc/user_guide/user_guide.rst - doc/tutorials/tutorials.rst - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt deleted file mode 100644 index 3e1ad70..0000000 --- a/modules/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -if(NOT OPENCV_MODULES_PATH) - set(OPENCV_MODULES_PATH "${CMAKE_CURRENT_SOURCE_DIR}") -endif() - -ocv_glob_modules(${OPENCV_MODULES_PATH} ${OPENCV_EXTRA_MODULES_PATH}) diff --git a/modules/calib3d/CMakeLists.txt b/modules/calib3d/CMakeLists.txt deleted file mode 100644 index 4fb7a1b..0000000 --- a/modules/calib3d/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "Camera Calibration and 3D Reconstruction") -ocv_define_module(calib3d opencv_imgproc opencv_features2d) diff --git a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d/calib3d.hpp deleted file mode 100644 index f213a11..0000000 --- a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp +++ /dev/null @@ -1,751 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CALIB3D_HPP__ -#define __OPENCV_CALIB3D_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/features2d/features2d.hpp" - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************************\ -* Camera Calibration, Pose Estimation and Stereo * -\****************************************************************************************/ - -typedef struct CvPOSITObject CvPOSITObject; - -/* Allocates and initializes CvPOSITObject structure before doing cvPOSIT */ -CVAPI(CvPOSITObject*) cvCreatePOSITObject( CvPoint3D32f* points, int point_count ); - - -/* Runs POSIT (POSe from ITeration) algorithm for determining 3d position of - an object given its model and projection in a weak-perspective case */ -CVAPI(void) cvPOSIT( CvPOSITObject* posit_object, CvPoint2D32f* image_points, - double focal_length, CvTermCriteria criteria, - float* rotation_matrix, float* translation_vector); - -/* Releases CvPOSITObject structure */ -CVAPI(void) cvReleasePOSITObject( CvPOSITObject** posit_object ); - -/* updates the number of RANSAC iterations */ -CVAPI(int) cvRANSACUpdateNumIters( double p, double err_prob, - int model_points, int max_iters ); - -CVAPI(void) cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst ); - -/* Calculates fundamental matrix given a set of corresponding points */ -#define CV_FM_7POINT 1 -#define CV_FM_8POINT 2 - -#define CV_LMEDS 4 -#define CV_RANSAC 8 - -#define CV_FM_LMEDS_ONLY CV_LMEDS -#define CV_FM_RANSAC_ONLY CV_RANSAC -#define CV_FM_LMEDS CV_LMEDS -#define CV_FM_RANSAC CV_RANSAC - -enum -{ - CV_ITERATIVE = 0, - CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua "EPnP: Efficient Perspective-n-Point Camera Pose Estimation" - CV_P3P = 2 // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem" -}; - -CVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, - CvMat* fundamental_matrix, - int method CV_DEFAULT(CV_FM_RANSAC), - double param1 CV_DEFAULT(3.), double param2 CV_DEFAULT(0.99), - CvMat* status CV_DEFAULT(NULL) ); - -/* For each input point on one of images - computes parameters of the corresponding - epipolar line on the other image */ -CVAPI(void) cvComputeCorrespondEpilines( const CvMat* points, - int which_image, - const CvMat* fundamental_matrix, - CvMat* correspondent_lines ); - -/* Triangulation functions */ - -CVAPI(void) cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, - CvMat* projPoints1, CvMat* projPoints2, - CvMat* points4D); - -CVAPI(void) cvCorrectMatches(CvMat* F, CvMat* points1, CvMat* points2, - CvMat* new_points1, CvMat* new_points2); - - -/* Computes the optimal new camera matrix according to the free scaling parameter alpha: - alpha=0 - only valid pixels will be retained in the undistorted image - alpha=1 - all the source image pixels will be retained in the undistorted image -*/ -CVAPI(void) cvGetOptimalNewCameraMatrix( const CvMat* camera_matrix, - const CvMat* dist_coeffs, - CvSize image_size, double alpha, - CvMat* new_camera_matrix, - CvSize new_imag_size CV_DEFAULT(cvSize(0,0)), - CvRect* valid_pixel_ROI CV_DEFAULT(0), - int center_principal_point CV_DEFAULT(0)); - -/* Converts rotation vector to rotation matrix or vice versa */ -CVAPI(int) cvRodrigues2( const CvMat* src, CvMat* dst, - CvMat* jacobian CV_DEFAULT(0) ); - -/* Finds perspective transformation between the object plane and image (view) plane */ -CVAPI(int) cvFindHomography( const CvMat* src_points, - const CvMat* dst_points, - CvMat* homography, - int method CV_DEFAULT(0), - double ransacReprojThreshold CV_DEFAULT(3), - CvMat* mask CV_DEFAULT(0)); - -/* Computes RQ decomposition for 3x3 matrices */ -CVAPI(void) cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ, - CvMat *matrixQx CV_DEFAULT(NULL), - CvMat *matrixQy CV_DEFAULT(NULL), - CvMat *matrixQz CV_DEFAULT(NULL), - CvPoint3D64f *eulerAngles CV_DEFAULT(NULL)); - -/* Computes projection matrix decomposition */ -CVAPI(void) cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr, - CvMat *rotMatr, CvMat *posVect, - CvMat *rotMatrX CV_DEFAULT(NULL), - CvMat *rotMatrY CV_DEFAULT(NULL), - CvMat *rotMatrZ CV_DEFAULT(NULL), - CvPoint3D64f *eulerAngles CV_DEFAULT(NULL)); - -/* Computes d(AB)/dA and d(AB)/dB */ -CVAPI(void) cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB ); - -/* Computes r3 = rodrigues(rodrigues(r2)*rodrigues(r1)), - t3 = rodrigues(r2)*t1 + t2 and the respective derivatives */ -CVAPI(void) cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1, - const CvMat* _rvec2, const CvMat* _tvec2, - CvMat* _rvec3, CvMat* _tvec3, - CvMat* dr3dr1 CV_DEFAULT(0), CvMat* dr3dt1 CV_DEFAULT(0), - CvMat* dr3dr2 CV_DEFAULT(0), CvMat* dr3dt2 CV_DEFAULT(0), - CvMat* dt3dr1 CV_DEFAULT(0), CvMat* dt3dt1 CV_DEFAULT(0), - CvMat* dt3dr2 CV_DEFAULT(0), CvMat* dt3dt2 CV_DEFAULT(0) ); - -/* Projects object points to the view plane using - the specified extrinsic and intrinsic camera parameters */ -CVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector, - const CvMat* translation_vector, const CvMat* camera_matrix, - const CvMat* distortion_coeffs, CvMat* image_points, - CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL), - CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL), - CvMat* dpddist CV_DEFAULT(NULL), - double aspect_ratio CV_DEFAULT(0)); - -/* Finds extrinsic camera parameters from - a few known corresponding point pairs and intrinsic parameters */ -CVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points, - const CvMat* image_points, - const CvMat* camera_matrix, - const CvMat* distortion_coeffs, - CvMat* rotation_vector, - CvMat* translation_vector, - int use_extrinsic_guess CV_DEFAULT(0) ); - -/* Computes initial estimate of the intrinsic camera parameters - in case of planar calibration target (e.g. chessboard) */ -CVAPI(void) cvInitIntrinsicParams2D( const CvMat* object_points, - const CvMat* image_points, - const CvMat* npoints, CvSize image_size, - CvMat* camera_matrix, - double aspect_ratio CV_DEFAULT(1.) ); - -#define CV_CALIB_CB_ADAPTIVE_THRESH 1 -#define CV_CALIB_CB_NORMALIZE_IMAGE 2 -#define CV_CALIB_CB_FILTER_QUADS 4 -#define CV_CALIB_CB_FAST_CHECK 8 - -// Performs a fast check if a chessboard is in the input image. This is a workaround to -// a problem of cvFindChessboardCorners being slow on images with no chessboard -// - src: input image -// - size: chessboard size -// Returns 1 if a chessboard can be in this image and findChessboardCorners should be called, -// 0 if there is no chessboard, -1 in case of error -CVAPI(int) cvCheckChessboard(IplImage* src, CvSize size); - - /* Detects corners on a chessboard calibration pattern */ -CVAPI(int) cvFindChessboardCorners( const void* image, CvSize pattern_size, - CvPoint2D32f* corners, - int* corner_count CV_DEFAULT(NULL), - int flags CV_DEFAULT(CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE) ); - -/* Draws individual chessboard corners or the whole chessboard detected */ -CVAPI(void) cvDrawChessboardCorners( CvArr* image, CvSize pattern_size, - CvPoint2D32f* corners, - int count, int pattern_was_found ); - -#define CV_CALIB_USE_INTRINSIC_GUESS 1 -#define CV_CALIB_FIX_ASPECT_RATIO 2 -#define CV_CALIB_FIX_PRINCIPAL_POINT 4 -#define CV_CALIB_ZERO_TANGENT_DIST 8 -#define CV_CALIB_FIX_FOCAL_LENGTH 16 -#define CV_CALIB_FIX_K1 32 -#define CV_CALIB_FIX_K2 64 -#define CV_CALIB_FIX_K3 128 -#define CV_CALIB_FIX_K4 2048 -#define CV_CALIB_FIX_K5 4096 -#define CV_CALIB_FIX_K6 8192 -#define CV_CALIB_RATIONAL_MODEL 16384 - -/* Finds intrinsic and extrinsic camera parameters - from a few views of known calibration pattern */ -CVAPI(double) cvCalibrateCamera2( const CvMat* object_points, - const CvMat* image_points, - const CvMat* point_counts, - CvSize image_size, - CvMat* camera_matrix, - CvMat* distortion_coeffs, - CvMat* rotation_vectors CV_DEFAULT(NULL), - CvMat* translation_vectors CV_DEFAULT(NULL), - int flags CV_DEFAULT(0), - CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria( - CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON)) ); - -/* Computes various useful characteristics of the camera from the data computed by - cvCalibrateCamera2 */ -CVAPI(void) cvCalibrationMatrixValues( const CvMat *camera_matrix, - CvSize image_size, - double aperture_width CV_DEFAULT(0), - double aperture_height CV_DEFAULT(0), - double *fovx CV_DEFAULT(NULL), - double *fovy CV_DEFAULT(NULL), - double *focal_length CV_DEFAULT(NULL), - CvPoint2D64f *principal_point CV_DEFAULT(NULL), - double *pixel_aspect_ratio CV_DEFAULT(NULL)); - -#define CV_CALIB_FIX_INTRINSIC 256 -#define CV_CALIB_SAME_FOCAL_LENGTH 512 - -/* Computes the transformation from one camera coordinate system to another one - from a few correspondent views of the same calibration target. Optionally, calibrates - both cameras */ -CVAPI(double) cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1, - const CvMat* image_points2, const CvMat* npoints, - CvMat* camera_matrix1, CvMat* dist_coeffs1, - CvMat* camera_matrix2, CvMat* dist_coeffs2, - CvSize image_size, CvMat* R, CvMat* T, - CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0), - CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria( - CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)), - int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC)); - -#define CV_CALIB_ZERO_DISPARITY 1024 - -/* Computes 3D rotations (+ optional shift) for each camera coordinate system to make both - views parallel (=> to make all the epipolar lines horizontal or vertical) */ -CVAPI(void) cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2, - const CvMat* dist_coeffs1, const CvMat* dist_coeffs2, - CvSize image_size, const CvMat* R, const CvMat* T, - CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2, - CvMat* Q CV_DEFAULT(0), - int flags CV_DEFAULT(CV_CALIB_ZERO_DISPARITY), - double alpha CV_DEFAULT(-1), - CvSize new_image_size CV_DEFAULT(cvSize(0,0)), - CvRect* valid_pix_ROI1 CV_DEFAULT(0), - CvRect* valid_pix_ROI2 CV_DEFAULT(0)); - -/* Computes rectification transformations for uncalibrated pair of images using a set - of point correspondences */ -CVAPI(int) cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2, - const CvMat* F, CvSize img_size, - CvMat* H1, CvMat* H2, - double threshold CV_DEFAULT(5)); - - - -/* stereo correspondence parameters and functions */ - -#define CV_STEREO_BM_NORMALIZED_RESPONSE 0 -#define CV_STEREO_BM_XSOBEL 1 - -/* Block matching algorithm structure */ -typedef struct CvStereoBMState -{ - // pre-filtering (normalization of input images) - int preFilterType; // =CV_STEREO_BM_NORMALIZED_RESPONSE now - int preFilterSize; // averaging window size: ~5x5..21x21 - int preFilterCap; // the output of pre-filtering is clipped by [-preFilterCap,preFilterCap] - - // correspondence using Sum of Absolute Difference (SAD) - int SADWindowSize; // ~5x5..21x21 - int minDisparity; // minimum disparity (can be negative) - int numberOfDisparities; // maximum disparity - minimum disparity (> 0) - - // post-filtering - int textureThreshold; // the disparity is only computed for pixels - // with textured enough neighborhood - int uniquenessRatio; // accept the computed disparity d* only if - // SAD(d) >= SAD(d*)*(1 + uniquenessRatio/100.) - // for any d != d*+/-1 within the search range. - int speckleWindowSize; // disparity variation window - int speckleRange; // acceptable range of variation in window - - int trySmallerWindows; // if 1, the results may be more accurate, - // at the expense of slower processing - CvRect roi1, roi2; - int disp12MaxDiff; - - // temporary buffers - CvMat* preFilteredImg0; - CvMat* preFilteredImg1; - CvMat* slidingSumBuf; - CvMat* cost; - CvMat* disp; -} CvStereoBMState; - -#define CV_STEREO_BM_BASIC 0 -#define CV_STEREO_BM_FISH_EYE 1 -#define CV_STEREO_BM_NARROW 2 - -CVAPI(CvStereoBMState*) cvCreateStereoBMState(int preset CV_DEFAULT(CV_STEREO_BM_BASIC), - int numberOfDisparities CV_DEFAULT(0)); - -CVAPI(void) cvReleaseStereoBMState( CvStereoBMState** state ); - -CVAPI(void) cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right, - CvArr* disparity, CvStereoBMState* state ); - -CVAPI(CvRect) cvGetValidDisparityROI( CvRect roi1, CvRect roi2, int minDisparity, - int numberOfDisparities, int SADWindowSize ); - -CVAPI(void) cvValidateDisparity( CvArr* disparity, const CvArr* cost, - int minDisparity, int numberOfDisparities, - int disp12MaxDiff CV_DEFAULT(1) ); - -/* Reprojects the computed disparity image to the 3D space using the specified 4x4 matrix */ -CVAPI(void) cvReprojectImageTo3D( const CvArr* disparityImage, - CvArr* _3dImage, const CvMat* Q, - int handleMissingValues CV_DEFAULT(0) ); - - -#ifdef __cplusplus -} - -////////////////////////////////////////////////////////////////////////////////////////// -class CV_EXPORTS CvLevMarq -{ -public: - CvLevMarq(); - CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria= - cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON), - bool completeSymmFlag=false ); - ~CvLevMarq(); - void init( int nparams, int nerrs, CvTermCriteria criteria= - cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON), - bool completeSymmFlag=false ); - bool update( const CvMat*& param, CvMat*& J, CvMat*& err ); - bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm ); - - void clear(); - void step(); - enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 }; - - cv::Ptr mask; - cv::Ptr prevParam; - cv::Ptr param; - cv::Ptr J; - cv::Ptr err; - cv::Ptr JtJ; - cv::Ptr JtJN; - cv::Ptr JtErr; - cv::Ptr JtJV; - cv::Ptr JtJW; - double prevErrNorm, errNorm; - int lambdaLg10; - CvTermCriteria criteria; - int state; - int iters; - bool completeSymmFlag; -}; - -namespace cv -{ -//! converts rotation vector to rotation matrix or vice versa using Rodrigues transformation -CV_EXPORTS_W void Rodrigues(InputArray src, OutputArray dst, OutputArray jacobian=noArray()); - -//! type of the robust estimation algorithm -enum -{ - LMEDS=CV_LMEDS, //!< least-median algorithm - RANSAC=CV_RANSAC //!< RANSAC algorithm -}; - -//! computes the best-fit perspective transformation mapping srcPoints to dstPoints. -CV_EXPORTS_W Mat findHomography( InputArray srcPoints, InputArray dstPoints, - int method=0, double ransacReprojThreshold=3, - OutputArray mask=noArray()); - -//! variant of findHomography for backward compatibility -CV_EXPORTS Mat findHomography( InputArray srcPoints, InputArray dstPoints, - OutputArray mask, int method=0, double ransacReprojThreshold=3); - -//! Computes RQ decomposition of 3x3 matrix -CV_EXPORTS_W Vec3d RQDecomp3x3( InputArray src, OutputArray mtxR, OutputArray mtxQ, - OutputArray Qx=noArray(), - OutputArray Qy=noArray(), - OutputArray Qz=noArray()); - -//! Decomposes the projection matrix into camera matrix and the rotation martix and the translation vector -CV_EXPORTS_W void decomposeProjectionMatrix( InputArray projMatrix, OutputArray cameraMatrix, - OutputArray rotMatrix, OutputArray transVect, - OutputArray rotMatrixX=noArray(), - OutputArray rotMatrixY=noArray(), - OutputArray rotMatrixZ=noArray(), - OutputArray eulerAngles=noArray() ); - -//! computes derivatives of the matrix product w.r.t each of the multiplied matrix coefficients -CV_EXPORTS_W void matMulDeriv( InputArray A, InputArray B, - OutputArray dABdA, - OutputArray dABdB ); - -//! composes 2 [R|t] transformations together. Also computes the derivatives of the result w.r.t the arguments -CV_EXPORTS_W void composeRT( InputArray rvec1, InputArray tvec1, - InputArray rvec2, InputArray tvec2, - OutputArray rvec3, OutputArray tvec3, - OutputArray dr3dr1=noArray(), OutputArray dr3dt1=noArray(), - OutputArray dr3dr2=noArray(), OutputArray dr3dt2=noArray(), - OutputArray dt3dr1=noArray(), OutputArray dt3dt1=noArray(), - OutputArray dt3dr2=noArray(), OutputArray dt3dt2=noArray() ); - -//! projects points from the model coordinate space to the image coordinates. Also computes derivatives of the image coordinates w.r.t the intrinsic and extrinsic camera parameters -CV_EXPORTS_W void projectPoints( InputArray objectPoints, - InputArray rvec, InputArray tvec, - InputArray cameraMatrix, InputArray distCoeffs, - OutputArray imagePoints, - OutputArray jacobian=noArray(), - double aspectRatio=0 ); - -//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are not handled. -enum -{ - ITERATIVE=CV_ITERATIVE, - EPNP=CV_EPNP, - P3P=CV_P3P -}; -CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints, - InputArray cameraMatrix, InputArray distCoeffs, - OutputArray rvec, OutputArray tvec, - bool useExtrinsicGuess=false, int flags=ITERATIVE); - -//! computes the camera pose from a few 3D points and the corresponding projections. The outliers are possible. -CV_EXPORTS_W void solvePnPRansac( InputArray objectPoints, - InputArray imagePoints, - InputArray cameraMatrix, - InputArray distCoeffs, - OutputArray rvec, - OutputArray tvec, - bool useExtrinsicGuess = false, - int iterationsCount = 100, - float reprojectionError = 8.0, - int minInliersCount = 100, - OutputArray inliers = noArray(), - int flags = ITERATIVE); - -//! initializes camera matrix from a few 3D points and the corresponding projections. -CV_EXPORTS_W Mat initCameraMatrix2D( InputArrayOfArrays objectPoints, - InputArrayOfArrays imagePoints, - Size imageSize, double aspectRatio=1. ); - -enum { CALIB_CB_ADAPTIVE_THRESH = 1, CALIB_CB_NORMALIZE_IMAGE = 2, - CALIB_CB_FILTER_QUADS = 4, CALIB_CB_FAST_CHECK = 8 }; - -//! finds checkerboard pattern of the specified size in the image -CV_EXPORTS_W bool findChessboardCorners( InputArray image, Size patternSize, - OutputArray corners, - int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE ); - -//! finds subpixel-accurate positions of the chessboard corners -CV_EXPORTS bool find4QuadCornerSubpix(InputArray img, InputOutputArray corners, Size region_size); - -//! draws the checkerboard pattern (found or partly found) in the image -CV_EXPORTS_W void drawChessboardCorners( InputOutputArray image, Size patternSize, - InputArray corners, bool patternWasFound ); - -enum { CALIB_CB_SYMMETRIC_GRID = 1, CALIB_CB_ASYMMETRIC_GRID = 2, - CALIB_CB_CLUSTERING = 4 }; - -//! finds circles' grid pattern of the specified size in the image -CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize, - OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID, - const Ptr &blobDetector = new SimpleBlobDetector()); - -//! the deprecated function. Use findCirclesGrid() instead of it. -CV_EXPORTS_W bool findCirclesGridDefault( InputArray image, Size patternSize, - OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID ); -enum -{ - CALIB_USE_INTRINSIC_GUESS = CV_CALIB_USE_INTRINSIC_GUESS, - CALIB_FIX_ASPECT_RATIO = CV_CALIB_FIX_ASPECT_RATIO, - CALIB_FIX_PRINCIPAL_POINT = CV_CALIB_FIX_PRINCIPAL_POINT, - CALIB_ZERO_TANGENT_DIST = CV_CALIB_ZERO_TANGENT_DIST, - CALIB_FIX_FOCAL_LENGTH = CV_CALIB_FIX_FOCAL_LENGTH, - CALIB_FIX_K1 = CV_CALIB_FIX_K1, - CALIB_FIX_K2 = CV_CALIB_FIX_K2, - CALIB_FIX_K3 = CV_CALIB_FIX_K3, - CALIB_FIX_K4 = CV_CALIB_FIX_K4, - CALIB_FIX_K5 = CV_CALIB_FIX_K5, - CALIB_FIX_K6 = CV_CALIB_FIX_K6, - CALIB_RATIONAL_MODEL = CV_CALIB_RATIONAL_MODEL, - // only for stereo - CALIB_FIX_INTRINSIC = CV_CALIB_FIX_INTRINSIC, - CALIB_SAME_FOCAL_LENGTH = CV_CALIB_SAME_FOCAL_LENGTH, - // for stereo rectification - CALIB_ZERO_DISPARITY = CV_CALIB_ZERO_DISPARITY -}; - -//! finds intrinsic and extrinsic camera parameters from several fews of a known calibration pattern. -CV_EXPORTS_W double calibrateCamera( InputArrayOfArrays objectPoints, - InputArrayOfArrays imagePoints, - Size imageSize, - CV_OUT InputOutputArray cameraMatrix, - CV_OUT InputOutputArray distCoeffs, - OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, - int flags=0, TermCriteria criteria = TermCriteria( - TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) ); - -//! computes several useful camera characteristics from the camera matrix, camera frame resolution and the physical sensor size. -CV_EXPORTS_W void calibrationMatrixValues( InputArray cameraMatrix, - Size imageSize, - double apertureWidth, - double apertureHeight, - CV_OUT double& fovx, - CV_OUT double& fovy, - CV_OUT double& focalLength, - CV_OUT Point2d& principalPoint, - CV_OUT double& aspectRatio ); - -//! finds intrinsic and extrinsic parameters of a stereo camera -CV_EXPORTS_W double stereoCalibrate( InputArrayOfArrays objectPoints, - InputArrayOfArrays imagePoints1, - InputArrayOfArrays imagePoints2, - CV_OUT InputOutputArray cameraMatrix1, - CV_OUT InputOutputArray distCoeffs1, - CV_OUT InputOutputArray cameraMatrix2, - CV_OUT InputOutputArray distCoeffs2, - Size imageSize, OutputArray R, - OutputArray T, OutputArray E, OutputArray F, - TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6), - int flags=CALIB_FIX_INTRINSIC ); - - -//! computes the rectification transformation for a stereo camera from its intrinsic and extrinsic parameters -CV_EXPORTS_W void stereoRectify( InputArray cameraMatrix1, InputArray distCoeffs1, - InputArray cameraMatrix2, InputArray distCoeffs2, - Size imageSize, InputArray R, InputArray T, - OutputArray R1, OutputArray R2, - OutputArray P1, OutputArray P2, - OutputArray Q, int flags=CALIB_ZERO_DISPARITY, - double alpha=-1, Size newImageSize=Size(), - CV_OUT Rect* validPixROI1=0, CV_OUT Rect* validPixROI2=0 ); - -//! computes the rectification transformation for an uncalibrated stereo camera (zero distortion is assumed) -CV_EXPORTS_W bool stereoRectifyUncalibrated( InputArray points1, InputArray points2, - InputArray F, Size imgSize, - OutputArray H1, OutputArray H2, - double threshold=5 ); - -//! computes the rectification transformations for 3-head camera, where all the heads are on the same line. -CV_EXPORTS_W float rectify3Collinear( InputArray cameraMatrix1, InputArray distCoeffs1, - InputArray cameraMatrix2, InputArray distCoeffs2, - InputArray cameraMatrix3, InputArray distCoeffs3, - InputArrayOfArrays imgpt1, InputArrayOfArrays imgpt3, - Size imageSize, InputArray R12, InputArray T12, - InputArray R13, InputArray T13, - OutputArray R1, OutputArray R2, OutputArray R3, - OutputArray P1, OutputArray P2, OutputArray P3, - OutputArray Q, double alpha, Size newImgSize, - CV_OUT Rect* roi1, CV_OUT Rect* roi2, int flags ); - -//! returns the optimal new camera matrix -CV_EXPORTS_W Mat getOptimalNewCameraMatrix( InputArray cameraMatrix, InputArray distCoeffs, - Size imageSize, double alpha, Size newImgSize=Size(), - CV_OUT Rect* validPixROI=0, bool centerPrincipalPoint=false); - -//! converts point coordinates from normal pixel coordinates to homogeneous coordinates ((x,y)->(x,y,1)) -CV_EXPORTS_W void convertPointsToHomogeneous( InputArray src, OutputArray dst ); - -//! converts point coordinates from homogeneous to normal pixel coordinates ((x,y,z)->(x/z, y/z)) -CV_EXPORTS_W void convertPointsFromHomogeneous( InputArray src, OutputArray dst ); - -//! for backward compatibility -CV_EXPORTS void convertPointsHomogeneous( InputArray src, OutputArray dst ); - -//! the algorithm for finding fundamental matrix -enum -{ - FM_7POINT = CV_FM_7POINT, //!< 7-point algorithm - FM_8POINT = CV_FM_8POINT, //!< 8-point algorithm - FM_LMEDS = CV_FM_LMEDS, //!< least-median algorithm - FM_RANSAC = CV_FM_RANSAC //!< RANSAC algorithm -}; - -//! finds fundamental matrix from a set of corresponding 2D points -CV_EXPORTS_W Mat findFundamentalMat( InputArray points1, InputArray points2, - int method=FM_RANSAC, - double param1=3., double param2=0.99, - OutputArray mask=noArray()); - -//! variant of findFundamentalMat for backward compatibility -CV_EXPORTS Mat findFundamentalMat( InputArray points1, InputArray points2, - OutputArray mask, int method=FM_RANSAC, - double param1=3., double param2=0.99); - -//! finds coordinates of epipolar lines corresponding the specified points -CV_EXPORTS_W void computeCorrespondEpilines( InputArray points, - int whichImage, InputArray F, - OutputArray lines ); - -CV_EXPORTS_W void triangulatePoints( InputArray projMatr1, InputArray projMatr2, - InputArray projPoints1, InputArray projPoints2, - OutputArray points4D ); - -CV_EXPORTS_W void correctMatches( InputArray F, InputArray points1, InputArray points2, - OutputArray newPoints1, OutputArray newPoints2 ); - -template<> CV_EXPORTS void Ptr::delete_obj(); - -/*! - Block Matching Stereo Correspondence Algorithm - - The class implements BM stereo correspondence algorithm by K. Konolige. -*/ -class CV_EXPORTS_W StereoBM -{ -public: - enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1, - BASIC_PRESET=0, FISH_EYE_PRESET=1, NARROW_PRESET=2 }; - - //! the default constructor - CV_WRAP StereoBM(); - //! the full constructor taking the camera-specific preset, number of disparities and the SAD window size - CV_WRAP StereoBM(int preset, int ndisparities=0, int SADWindowSize=21); - //! the method that reinitializes the state. The previous content is destroyed - void init(int preset, int ndisparities=0, int SADWindowSize=21); - //! the stereo correspondence operator. Finds the disparity for the specified rectified stereo pair - CV_WRAP_AS(compute) void operator()( InputArray left, InputArray right, - OutputArray disparity, int disptype=CV_16S ); - - //! pointer to the underlying CvStereoBMState - Ptr state; -}; - - -/*! - Semi-Global Block Matching Stereo Correspondence Algorithm - - The class implements the original SGBM stereo correspondence algorithm by H. Hirschmuller and some its modification. - */ -class CV_EXPORTS_W StereoSGBM -{ -public: - enum { DISP_SHIFT=4, DISP_SCALE = (1<(X,Y,Z) using the matrix Q returned by cv::stereoRectify -CV_EXPORTS_W void reprojectImageTo3D( InputArray disparity, - OutputArray _3dImage, InputArray Q, - bool handleMissingValues=false, - int ddepth=-1 ); - -CV_EXPORTS_W int estimateAffine3D(InputArray src, InputArray dst, - OutputArray out, OutputArray inliers, - double ransacThreshold=3, double confidence=0.99); - -} - -#endif - -#endif diff --git a/modules/calib3d/src/_modelest.h b/modules/calib3d/src/_modelest.h deleted file mode 100644 index 4aef46e..0000000 --- a/modules/calib3d/src/_modelest.h +++ /dev/null @@ -1,80 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - - -#ifndef _CV_MODEL_EST_H_ -#define _CV_MODEL_EST_H_ - -#include "opencv2/calib3d/calib3d.hpp" - -class CV_EXPORTS CvModelEstimator2 -{ -public: - CvModelEstimator2(int _modelPoints, CvSize _modelSize, int _maxBasicSolutions); - virtual ~CvModelEstimator2(); - - virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model )=0; - virtual bool runLMeDS( const CvMat* m1, const CvMat* m2, CvMat* model, - CvMat* mask, double confidence=0.99, int maxIters=2000 ); - virtual bool runRANSAC( const CvMat* m1, const CvMat* m2, CvMat* model, - CvMat* mask, double threshold, - double confidence=0.99, int maxIters=2000 ); - virtual bool refine( const CvMat*, const CvMat*, CvMat*, int ) { return true; } - virtual void setSeed( int64 seed ); - -protected: - virtual void computeReprojError( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* error ) = 0; - virtual int findInliers( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* error, - CvMat* mask, double threshold ); - virtual bool getSubset( const CvMat* m1, const CvMat* m2, - CvMat* ms1, CvMat* ms2, int maxAttempts=1000 ); - virtual bool checkSubset( const CvMat* ms1, int count ); - - CvRNG rng; - int modelPoints; - CvSize modelSize; - int maxBasicSolutions; - bool checkPartialSubsets; -}; - -#endif // _CV_MODEL_EST_H_ diff --git a/modules/calib3d/src/calibinit.cpp b/modules/calib3d/src/calibinit.cpp deleted file mode 100644 index 5e6ea1d..0000000 --- a/modules/calib3d/src/calibinit.cpp +++ /dev/null @@ -1,2042 +0,0 @@ -//M*////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/************************************************************************************\ - This is improved variant of chessboard corner detection algorithm that - uses a graph of connected quads. It is based on the code contributed - by Vladimir Vezhnevets and Philip Gruebele. - Here is the copyright notice from the original Vladimir's code: - =============================================================== - - The algorithms developed and implemented by Vezhnevets Vldimir - aka Dead Moroz (vvp@graphics.cs.msu.ru) - See http://graphics.cs.msu.su/en/research/calibration/opencv.html - for detailed information. - - Reliability additions and modifications made by Philip Gruebele. -
          pgruebele@cox.net - - Some further improvements for detection of partially ocluded boards at non-ideal - lighting conditions have been made by Alex Bovyrin and Kurt Kolonige - -\************************************************************************************/ - -#include "precomp.hpp" -#include "circlesgrid.hpp" -#include - -//#define ENABLE_TRIM_COL_ROW - -//#define DEBUG_CHESSBOARD -#ifdef DEBUG_CHESSBOARD -# include "opencv2/opencv_modules.hpp" -# ifdef HAVE_OPENCV_HIGHGUI -# include "opencv2/highgui/highgui.hpp" -# else -# undef DEBUG_CHESSBOARD -# endif -#endif -#ifdef DEBUG_CHESSBOARD -static int PRINTF( const char* fmt, ... ) -{ - va_list args; - va_start(args, fmt); - return vprintf(fmt, args); -} -#else -static int PRINTF( const char*, ... ) -{ - return 0; -} -#endif - - -//===================================================================================== -// Implementation for the enhanced calibration object detection -//===================================================================================== - -#define MAX_CONTOUR_APPROX 7 - -struct CvContourEx -{ - CV_CONTOUR_FIELDS() - int counter; -}; - -//===================================================================================== - -/// Corner info structure -/** This structure stores information about the chessboard corner.*/ -struct CvCBCorner -{ - CvPoint2D32f pt; // Coordinates of the corner - int row; // Board row index - int count; // Number of neighbor corners - struct CvCBCorner* neighbors[4]; // Neighbor corners - - float meanDist(int *_n) const - { - float sum = 0; - int n = 0; - for( int i = 0; i < 4; i++ ) - { - if( neighbors[i] ) - { - float dx = neighbors[i]->pt.x - pt.x; - float dy = neighbors[i]->pt.y - pt.y; - sum += sqrt(dx*dx + dy*dy); - n++; - } - } - if(_n) - *_n = n; - return sum/MAX(n,1); - } -}; - -//===================================================================================== -/// Quadrangle contour info structure -/** This structure stores information about the chessboard quadrange.*/ -struct CvCBQuad -{ - int count; // Number of quad neighbors - int group_idx; // quad group ID - int row, col; // row and column of this quad - bool ordered; // true if corners/neighbors are ordered counter-clockwise - float edge_len; // quad edge len, in pix^2 - // neighbors and corners are synced, i.e., neighbor 0 shares corner 0 - CvCBCorner *corners[4]; // Coordinates of quad corners - struct CvCBQuad *neighbors[4]; // Pointers of quad neighbors -}; - -//===================================================================================== - -//static CvMat* debug_img = 0; - -static int icvGenerateQuads( CvCBQuad **quads, CvCBCorner **corners, - CvMemStorage *storage, CvMat *image, int flags ); - -/*static int -icvGenerateQuadsEx( CvCBQuad **out_quads, CvCBCorner **out_corners, - CvMemStorage *storage, CvMat *image, CvMat *thresh_img, int dilation, int flags );*/ - -static void icvFindQuadNeighbors( CvCBQuad *quads, int quad_count ); - -static int icvFindConnectedQuads( CvCBQuad *quads, int quad_count, - CvCBQuad **quad_group, int group_idx, - CvMemStorage* storage ); - -static int icvCheckQuadGroup( CvCBQuad **quad_group, int count, - CvCBCorner **out_corners, CvSize pattern_size ); - -static int icvCleanFoundConnectedQuads( int quad_count, - CvCBQuad **quads, CvSize pattern_size ); - -static int icvOrderFoundConnectedQuads( int quad_count, CvCBQuad **quads, - int *all_count, CvCBQuad **all_quads, CvCBCorner **corners, - CvSize pattern_size, CvMemStorage* storage ); - -static void icvOrderQuad(CvCBQuad *quad, CvCBCorner *corner, int common); - -#ifdef ENABLE_TRIM_COL_ROW -static int icvTrimCol(CvCBQuad **quads, int count, int col, int dir); - -static int icvTrimRow(CvCBQuad **quads, int count, int row, int dir); -#endif - -static int icvAddOuterQuad(CvCBQuad *quad, CvCBQuad **quads, int quad_count, - CvCBQuad **all_quads, int all_count, CvCBCorner **corners); - -static void icvRemoveQuadFromGroup(CvCBQuad **quads, int count, CvCBQuad *q0); - -static int icvCheckBoardMonotony( CvPoint2D32f* corners, CvSize pattern_size ); - -#if 0 -static void -icvCalcAffineTranf2D32f(CvPoint2D32f* pts1, CvPoint2D32f* pts2, int count, CvMat* affine_trans) -{ - int i, j; - int real_count = 0; - for( j = 0; j < count; j++ ) - { - if( pts1[j].x >= 0 ) real_count++; - } - if(real_count < 3) return; - cv::Ptr xy = cvCreateMat( 2*real_count, 6, CV_32FC1 ); - cv::Ptr uv = cvCreateMat( 2*real_count, 1, CV_32FC1 ); - //estimate affine transfromation - for( i = 0, j = 0; j < count; j++ ) - { - if( pts1[j].x >= 0 ) - { - CV_MAT_ELEM( *xy, float, i*2+1, 2 ) = CV_MAT_ELEM( *xy, float, i*2, 0 ) = pts2[j].x; - CV_MAT_ELEM( *xy, float, i*2+1, 3 ) = CV_MAT_ELEM( *xy, float, i*2, 1 ) = pts2[j].y; - CV_MAT_ELEM( *xy, float, i*2, 2 ) = CV_MAT_ELEM( *xy, float, i*2, 3 ) = CV_MAT_ELEM( *xy, float, i*2, 5 ) = \ - CV_MAT_ELEM( *xy, float, i*2+1, 0 ) = CV_MAT_ELEM( *xy, float, i*2+1, 1 ) = CV_MAT_ELEM( *xy, float, i*2+1, 4 ) = 0; - CV_MAT_ELEM( *xy, float, i*2, 4 ) = CV_MAT_ELEM( *xy, float, i*2+1, 5 ) = 1; - CV_MAT_ELEM( *uv, float, i*2, 0 ) = pts1[j].x; - CV_MAT_ELEM( *uv, float, i*2+1, 0 ) = pts1[j].y; - i++; - } - } - - cvSolve( xy, uv, affine_trans, CV_SVD ); -} -#endif - -CV_IMPL -int cvFindChessboardCorners( const void* arr, CvSize pattern_size, - CvPoint2D32f* out_corners, int* out_corner_count, - int flags ) -{ - int found = 0; - CvCBQuad *quads = 0, **quad_group = 0; - CvCBCorner *corners = 0, **corner_group = 0; - - try - { - int k = 0; - const int min_dilations = 0; - const int max_dilations = 7; - cv::Ptr norm_img, thresh_img; -#ifdef DEBUG_CHESSBOARD - cv::Ptr dbg_img; - cv::Ptr dbg1_img; - cv::Ptr dbg2_img; -#endif - cv::Ptr storage; - - CvMat stub, *img = (CvMat*)arr; - - int expected_corners_num = (pattern_size.width/2+1)*(pattern_size.height/2+1); - - int prev_sqr_size = 0; - - if( out_corner_count ) - *out_corner_count = 0; - - IplImage _img; - int check_chessboard_result; - int quad_count = 0, group_idx = 0, dilations = 0; - - img = cvGetMat( img, &stub ); - //debug_img = img; - - if( CV_MAT_DEPTH( img->type ) != CV_8U || CV_MAT_CN( img->type ) == 2 ) - CV_Error( CV_StsUnsupportedFormat, "Only 8-bit grayscale or color images are supported" ); - - if( pattern_size.width <= 2 || pattern_size.height <= 2 ) - CV_Error( CV_StsOutOfRange, "Both width and height of the pattern should have bigger than 2" ); - - if( !out_corners ) - CV_Error( CV_StsNullPtr, "Null pointer to corners" ); - - storage = cvCreateMemStorage(0); - thresh_img = cvCreateMat( img->rows, img->cols, CV_8UC1 ); - -#ifdef DEBUG_CHESSBOARD - dbg_img = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3 ); - dbg1_img = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3 ); - dbg2_img = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3 ); -#endif - - if( CV_MAT_CN(img->type) != 1 || (flags & CV_CALIB_CB_NORMALIZE_IMAGE) ) - { - // equalize the input image histogram - - // that should make the contrast between "black" and "white" areas big enough - norm_img = cvCreateMat( img->rows, img->cols, CV_8UC1 ); - - if( CV_MAT_CN(img->type) != 1 ) - { - cvCvtColor( img, norm_img, CV_BGR2GRAY ); - img = norm_img; - } - - if( flags & CV_CALIB_CB_NORMALIZE_IMAGE ) - { - cvEqualizeHist( img, norm_img ); - img = norm_img; - } - } - - if( flags & CV_CALIB_CB_FAST_CHECK) - { - cvGetImage(img, &_img); - check_chessboard_result = cvCheckChessboard(&_img, pattern_size); - if(check_chessboard_result <= 0) - { - return 0; - } - } - - // Try our standard "1" dilation, but if the pattern is not found, iterate the whole procedure with higher dilations. - // This is necessary because some squares simply do not separate properly with a single dilation. However, - // we want to use the minimum number of dilations possible since dilations cause the squares to become smaller, - // making it difficult to detect smaller squares. - for( k = 0; k < 6; k++ ) - { - for( dilations = min_dilations; dilations <= max_dilations; dilations++ ) - { - if (found) - break; // already found it - - cvFree(&quads); - cvFree(&corners); - - /*if( k == 1 ) - { - //Pattern was not found using binarization - // Run multi-level quads extraction - // In case one-level binarization did not give enough number of quads - CV_CALL( quad_count = icvGenerateQuadsEx( &quads, &corners, storage, img, thresh_img, dilations, flags )); - PRINTF("EX quad count: %d/%d\n", quad_count, expected_corners_num); - } - else*/ - { - // convert the input grayscale image to binary (black-n-white) - if( flags & CV_CALIB_CB_ADAPTIVE_THRESH ) - { - int block_size = cvRound(prev_sqr_size == 0 ? - MIN(img->cols,img->rows)*(k%2 == 0 ? 0.2 : 0.1): prev_sqr_size*2)|1; - - // convert to binary - cvAdaptiveThreshold( img, thresh_img, 255, - CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, block_size, (k/2)*5 ); - if (dilations > 0) - cvDilate( thresh_img, thresh_img, 0, dilations-1 ); - } - else - { - // Make dilation before the thresholding. - // It splits chessboard corners - //cvDilate( img, thresh_img, 0, 1 ); - - // empiric threshold level - double mean = cvAvg( img ).val[0]; - int thresh_level = cvRound( mean - 10 ); - thresh_level = MAX( thresh_level, 10 ); - - cvThreshold( img, thresh_img, thresh_level, 255, CV_THRESH_BINARY ); - cvDilate( thresh_img, thresh_img, 0, dilations ); - } - -#ifdef DEBUG_CHESSBOARD - cvCvtColor(thresh_img,dbg_img,CV_GRAY2BGR); -#endif - - // So we can find rectangles that go to the edge, we draw a white line around the image edge. - // Otherwise FindContours will miss those clipped rectangle contours. - // The border color will be the image mean, because otherwise we risk screwing up filters like cvSmooth()... - cvRectangle( thresh_img, cvPoint(0,0), cvPoint(thresh_img->cols-1, - thresh_img->rows-1), CV_RGB(255,255,255), 3, 8); - - quad_count = icvGenerateQuads( &quads, &corners, storage, thresh_img, flags ); - - PRINTF("Quad count: %d/%d\n", quad_count, expected_corners_num); - } - - -#ifdef DEBUG_CHESSBOARD - cvCopy(dbg_img, dbg1_img); - cvNamedWindow("all_quads", 1); - // copy corners to temp array - for(int i = 0; i < quad_count; i++ ) - { - for (int k=0; k<4; k++) - { - CvPoint2D32f pt1, pt2; - CvScalar color = CV_RGB(30,255,30); - pt1 = quads[i].corners[k]->pt; - pt2 = quads[i].corners[(k+1)%4]->pt; - pt2.x = (pt1.x + pt2.x)/2; - pt2.y = (pt1.y + pt2.y)/2; - if (k>0) - color = CV_RGB(200,200,0); - cvLine( dbg1_img, cvPointFrom32f(pt1), cvPointFrom32f(pt2), color, 3, 8); - } - } - - - cvShowImage("all_quads", (IplImage*)dbg1_img); - cvWaitKey(); -#endif - - if( quad_count <= 0 ) - continue; - - // Find quad's neighbors - icvFindQuadNeighbors( quads, quad_count ); - - // allocate extra for adding in icvOrderFoundQuads - cvFree(&quad_group); - cvFree(&corner_group); - quad_group = (CvCBQuad**)cvAlloc( sizeof(quad_group[0]) * (quad_count+quad_count / 2)); - corner_group = (CvCBCorner**)cvAlloc( sizeof(corner_group[0]) * (quad_count+quad_count / 2)*4 ); - - for( group_idx = 0; ; group_idx++ ) - { - int count = 0; - count = icvFindConnectedQuads( quads, quad_count, quad_group, group_idx, storage ); - - int icount = count; - if( count == 0 ) - break; - - // order the quad corners globally - // maybe delete or add some - PRINTF("Starting ordering of inner quads\n"); - count = icvOrderFoundConnectedQuads(count, quad_group, &quad_count, &quads, &corners, - pattern_size, storage ); - PRINTF("Orig count: %d After ordering: %d\n", icount, count); - - -#ifdef DEBUG_CHESSBOARD - cvCopy(dbg_img,dbg2_img); - cvNamedWindow("connected_group", 1); - // copy corners to temp array - for(int i = 0; i < quad_count; i++ ) - { - if (quads[i].group_idx == group_idx) - for (int k=0; k<4; k++) - { - CvPoint2D32f pt1, pt2; - CvScalar color = CV_RGB(30,255,30); - if (quads[i].ordered) - color = CV_RGB(255,30,30); - pt1 = quads[i].corners[k]->pt; - pt2 = quads[i].corners[(k+1)%4]->pt; - pt2.x = (pt1.x + pt2.x)/2; - pt2.y = (pt1.y + pt2.y)/2; - if (k>0) - color = CV_RGB(200,200,0); - cvLine( dbg2_img, cvPointFrom32f(pt1), cvPointFrom32f(pt2), color, 3, 8); - } - } - cvShowImage("connected_group", (IplImage*)dbg2_img); - cvWaitKey(); -#endif - - if (count == 0) - continue; // haven't found inner quads - - - // If count is more than it should be, this will remove those quads - // which cause maximum deviation from a nice square pattern. - count = icvCleanFoundConnectedQuads( count, quad_group, pattern_size ); - PRINTF("Connected group: %d orig count: %d cleaned: %d\n", group_idx, icount, count); - - count = icvCheckQuadGroup( quad_group, count, corner_group, pattern_size ); - PRINTF("Connected group: %d count: %d cleaned: %d\n", group_idx, icount, count); - - { - int n = count > 0 ? pattern_size.width * pattern_size.height : -count; - n = MIN( n, pattern_size.width * pattern_size.height ); - float sum_dist = 0; - int total = 0; - - for(int i = 0; i < n; i++ ) - { - int ni = 0; - float avgi = corner_group[i]->meanDist(&ni); - sum_dist += avgi*ni; - total += ni; - } - prev_sqr_size = cvRound(sum_dist/MAX(total, 1)); - - if( count > 0 || (out_corner_count && -count > *out_corner_count) ) - { - // copy corners to output array - for(int i = 0; i < n; i++ ) - out_corners[i] = corner_group[i]->pt; - - if( out_corner_count ) - *out_corner_count = n; - - if( count == pattern_size.width*pattern_size.height && - icvCheckBoardMonotony( out_corners, pattern_size )) - { - found = 1; - break; - } - } - } - } - }//dilations - }// - - if( found ) - found = icvCheckBoardMonotony( out_corners, pattern_size ); - - // check that none of the found corners is too close to the image boundary - if( found ) - { - const int BORDER = 8; - for( k = 0; k < pattern_size.width*pattern_size.height; k++ ) - { - if( out_corners[k].x <= BORDER || out_corners[k].x > img->cols - BORDER || - out_corners[k].y <= BORDER || out_corners[k].y > img->rows - BORDER ) - break; - } - - found = k == pattern_size.width*pattern_size.height; - } - - if( found && pattern_size.height % 2 == 0 && pattern_size.width % 2 == 0 ) - { - int last_row = (pattern_size.height-1)*pattern_size.width; - double dy0 = out_corners[last_row].y - out_corners[0].y; - if( dy0 < 0 ) - { - int n = pattern_size.width*pattern_size.height; - for(int i = 0; i < n/2; i++ ) - { - CvPoint2D32f temp; - CV_SWAP(out_corners[i], out_corners[n-i-1], temp); - } - } - } - - if( found ) - { - cv::Ptr gray; - if( CV_MAT_CN(img->type) != 1 ) - { - gray = cvCreateMat(img->rows, img->cols, CV_8UC1); - cvCvtColor(img, gray, CV_BGR2GRAY); - } - else - { - gray = cvCloneMat(img); - } - int wsize = 2; - cvFindCornerSubPix( gray, out_corners, pattern_size.width*pattern_size.height, - cvSize(wsize, wsize), cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 15, 0.1)); - } - } - catch(...) - { - cvFree(&quads); - cvFree(&corners); - cvFree(&quad_group); - cvFree(&corner_group); - throw; - } - - cvFree(&quads); - cvFree(&corners); - cvFree(&quad_group); - cvFree(&corner_group); - return found; -} - -// -// Checks that each board row and column is pretty much monotonous curve: -// It analyzes each row and each column of the chessboard as following: -// for each corner c lying between end points in the same row/column it checks that -// the point projection to the line segment (a,b) is lying between projections -// of the neighbor corners in the same row/column. -// -// This function has been created as temporary workaround for the bug in current implementation -// of cvFindChessboardCornes that produces absolutely unordered sets of corners. -// - -static int -icvCheckBoardMonotony( CvPoint2D32f* corners, CvSize pattern_size ) -{ - int i, j, k; - - for( k = 0; k < 2; k++ ) - { - for( i = 0; i < (k == 0 ? pattern_size.height : pattern_size.width); i++ ) - { - CvPoint2D32f a = k == 0 ? corners[i*pattern_size.width] : corners[i]; - CvPoint2D32f b = k == 0 ? corners[(i+1)*pattern_size.width-1] : - corners[(pattern_size.height-1)*pattern_size.width + i]; - float prevt = 0, dx0 = b.x - a.x, dy0 = b.y - a.y; - if( fabs(dx0) + fabs(dy0) < FLT_EPSILON ) - return 0; - for( j = 1; j < (k == 0 ? pattern_size.width : pattern_size.height) - 1; j++ ) - { - CvPoint2D32f c = k == 0 ? corners[i*pattern_size.width + j] : - corners[j*pattern_size.width + i]; - float t = ((c.x - a.x)*dx0 + (c.y - a.y)*dy0)/(dx0*dx0 + dy0*dy0); - if( t < prevt || t > 1 ) - return 0; - prevt = t; - } - } - } - - return 1; -} - -// -// order a group of connected quads -// order of corners: -// 0 is top left -// clockwise from there -// note: "top left" is nominal, depends on initial ordering of starting quad -// but all other quads are ordered consistently -// -// can change the number of quads in the group -// can add quads, so we need to have quad/corner arrays passed in -// - -static int -icvOrderFoundConnectedQuads( int quad_count, CvCBQuad **quads, - int *all_count, CvCBQuad **all_quads, CvCBCorner **corners, - CvSize pattern_size, CvMemStorage* storage ) -{ - cv::Ptr temp_storage = cvCreateChildMemStorage( storage ); - CvSeq* stack = cvCreateSeq( 0, sizeof(*stack), sizeof(void*), temp_storage ); - - // first find an interior quad - CvCBQuad *start = NULL; - for (int i=0; icount == 4) - { - start = quads[i]; - break; - } - } - - if (start == NULL) - return 0; // no 4-connected quad - - // start with first one, assign rows/cols - int row_min = 0, col_min = 0, row_max=0, col_max = 0; - - std::map col_hist; - std::map row_hist; - - cvSeqPush(stack, &start); - start->row = 0; - start->col = 0; - start->ordered = true; - - // Recursively order the quads so that all position numbers (e.g., - // 0,1,2,3) are in the at the same relative corner (e.g., lower right). - - while( stack->total ) - { - CvCBQuad* q; - cvSeqPop( stack, &q ); - int col = q->col; - int row = q->row; - col_hist[col]++; - row_hist[row]++; - - // check min/max - if (row > row_max) row_max = row; - if (row < row_min) row_min = row; - if (col > col_max) col_max = col; - if (col < col_min) col_min = col; - - for(int i = 0; i < 4; i++ ) - { - CvCBQuad *neighbor = q->neighbors[i]; - switch(i) // adjust col, row for this quad - { // start at top left, go clockwise - case 0: - row--; col--; break; - case 1: - col += 2; break; - case 2: - row += 2; break; - case 3: - col -= 2; break; - } - - // just do inside quads - if (neighbor && neighbor->ordered == false && neighbor->count == 4) - { - PRINTF("col: %d row: %d\n", col, row); - icvOrderQuad(neighbor, q->corners[i], (i+2)%4); // set in order - neighbor->ordered = true; - neighbor->row = row; - neighbor->col = col; - cvSeqPush( stack, &neighbor ); - } - } - } - - for (int i=col_min; i<=col_max; i++) - PRINTF("HIST[%d] = %d\n", i, col_hist[i]); - - // analyze inner quad structure - int w = pattern_size.width - 1; - int h = pattern_size.height - 1; - int drow = row_max - row_min + 1; - int dcol = col_max - col_min + 1; - - // normalize pattern and found quad indices - if ((w > h && dcol < drow) || - (w < h && drow < dcol)) - { - h = pattern_size.width - 1; - w = pattern_size.height - 1; - } - - PRINTF("Size: %dx%d Pattern: %dx%d\n", dcol, drow, w, h); - - // check if there are enough inner quads - if (dcol < w || drow < h) // found enough inner quads? - { - PRINTF("Too few inner quad rows/cols\n"); - return 0; // no, return - } -#ifdef ENABLE_TRIM_COL_ROW - // too many columns, not very common - if (dcol == w+1) // too many, trim - { - PRINTF("Trimming cols\n"); - if (col_hist[col_max] > col_hist[col_min]) - { - PRINTF("Trimming left col\n"); - quad_count = icvTrimCol(quads,quad_count,col_min,-1); - } - else - { - PRINTF("Trimming right col\n"); - quad_count = icvTrimCol(quads,quad_count,col_max,+1); - } - } - - // too many rows, not very common - if (drow == h+1) // too many, trim - { - PRINTF("Trimming rows\n"); - if (row_hist[row_max] > row_hist[row_min]) - { - PRINTF("Trimming top row\n"); - quad_count = icvTrimRow(quads,quad_count,row_min,-1); - } - else - { - PRINTF("Trimming bottom row\n"); - quad_count = icvTrimRow(quads,quad_count,row_max,+1); - } - } -#endif - - // check edges of inner quads - // if there is an outer quad missing, fill it in - // first order all inner quads - int found = 0; - for (int i=0; icount == 4) - { // ok, look at neighbors - int col = quads[i]->col; - int row = quads[i]->row; - for (int j=0; j<4; j++) - { - switch(j) // adjust col, row for this quad - { // start at top left, go clockwise - case 0: - row--; col--; break; - case 1: - col += 2; break; - case 2: - row += 2; break; - case 3: - col -= 2; break; - } - CvCBQuad *neighbor = quads[i]->neighbors[j]; - if (neighbor && !neighbor->ordered && // is it an inner quad? - col <= col_max && col >= col_min && - row <= row_max && row >= row_min) - { - // if so, set in order - PRINTF("Adding inner: col: %d row: %d\n", col, row); - found++; - icvOrderQuad(neighbor, quads[i]->corners[j], (j+2)%4); - neighbor->ordered = true; - neighbor->row = row; - neighbor->col = col; - } - } - } - } - - // if we have found inner quads, add corresponding outer quads, - // which are missing - if (found > 0) - { - PRINTF("Found %d inner quads not connected to outer quads, repairing\n", found); - for (int i=0; icount < 4 && quads[i]->ordered) - { - int added = icvAddOuterQuad(quads[i],quads,quad_count,all_quads,*all_count,corners); - *all_count += added; - quad_count += added; - } - } - } - - - // final trimming of outer quads - if (dcol == w && drow == h) // found correct inner quads - { - PRINTF("Inner bounds ok, check outer quads\n"); - int rcount = quad_count; - for (int i=quad_count-1; i>=0; i--) // eliminate any quad not connected to - // an ordered quad - { - if (quads[i]->ordered == false) - { - bool outer = false; - for (int j=0; j<4; j++) // any neighbors that are ordered? - { - if (quads[i]->neighbors[j] && quads[i]->neighbors[j]->ordered) - outer = true; - } - if (!outer) // not an outer quad, eliminate - { - PRINTF("Removing quad %d\n", i); - icvRemoveQuadFromGroup(quads,rcount,quads[i]); - rcount--; - } - } - - } - return rcount; - } - - return 0; -} - - -// add an outer quad -// looks for the neighbor of that isn't present, -// tries to add it in. -// is ordered - -static int -icvAddOuterQuad( CvCBQuad *quad, CvCBQuad **quads, int quad_count, - CvCBQuad **all_quads, int all_count, CvCBCorner **corners ) - -{ - int added = 0; - for (int i=0; i<4; i++) // find no-neighbor corners - { - if (!quad->neighbors[i]) // ok, create and add neighbor - { - int j = (i+2)%4; - PRINTF("Adding quad as neighbor 2\n"); - CvCBQuad *q = &(*all_quads)[all_count]; - memset( q, 0, sizeof(*q) ); - added++; - quads[quad_count] = q; - quad_count++; - - // set neighbor and group id - quad->neighbors[i] = q; - quad->count += 1; - q->neighbors[j] = quad; - q->group_idx = quad->group_idx; - q->count = 1; // number of neighbors - q->ordered = false; - q->edge_len = quad->edge_len; - - // make corners of new quad - // same as neighbor quad, but offset - CvPoint2D32f pt = quad->corners[i]->pt; - CvCBCorner* corner; - float dx = pt.x - quad->corners[j]->pt.x; - float dy = pt.y - quad->corners[j]->pt.y; - for (int k=0; k<4; k++) - { - corner = &(*corners)[all_count*4+k]; - pt = quad->corners[k]->pt; - memset( corner, 0, sizeof(*corner) ); - corner->pt = pt; - q->corners[k] = corner; - corner->pt.x += dx; - corner->pt.y += dy; - } - // have to set exact corner - q->corners[j] = quad->corners[i]; - - // now find other neighbor and add it, if possible - if (quad->neighbors[(i+3)%4] && - quad->neighbors[(i+3)%4]->ordered && - quad->neighbors[(i+3)%4]->neighbors[i] && - quad->neighbors[(i+3)%4]->neighbors[i]->ordered ) - { - CvCBQuad *qn = quad->neighbors[(i+3)%4]->neighbors[i]; - q->count = 2; - q->neighbors[(j+1)%4] = qn; - qn->neighbors[(i+1)%4] = q; - qn->count += 1; - // have to set exact corner - q->corners[(j+1)%4] = qn->corners[(i+1)%4]; - } - - all_count++; - } - } - return added; -} - - -// trimming routines -#ifdef ENABLE_TRIM_COL_ROW -static int -icvTrimCol(CvCBQuad **quads, int count, int col, int dir) -{ - int rcount = count; - // find the right quad(s) - for (int i=0; iordered) - PRINTF("index: %d cur: %d\n", col, quads[i]->col); -#endif - if (quads[i]->ordered && quads[i]->col == col) - { - if (dir == 1) - { - if (quads[i]->neighbors[1]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[1]); - rcount--; - } - if (quads[i]->neighbors[2]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[2]); - rcount--; - } - } - else - { - if (quads[i]->neighbors[0]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[0]); - rcount--; - } - if (quads[i]->neighbors[3]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[3]); - rcount--; - } - } - - } - } - return rcount; -} - -static int -icvTrimRow(CvCBQuad **quads, int count, int row, int dir) -{ - int i, rcount = count; - // find the right quad(s) - for (i=0; iordered) - PRINTF("index: %d cur: %d\n", row, quads[i]->row); -#endif - if (quads[i]->ordered && quads[i]->row == row) - { - if (dir == 1) // remove from bottom - { - if (quads[i]->neighbors[2]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[2]); - rcount--; - } - if (quads[i]->neighbors[3]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[3]); - rcount--; - } - } - else // remove from top - { - if (quads[i]->neighbors[0]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[0]); - rcount--; - } - if (quads[i]->neighbors[1]) - { - icvRemoveQuadFromGroup(quads,rcount,quads[i]->neighbors[1]); - rcount--; - } - } - - } - } - return rcount; -} -#endif - -// -// remove quad from quad group -// - -static void -icvRemoveQuadFromGroup(CvCBQuad **quads, int count, CvCBQuad *q0) -{ - int i, j; - // remove any references to this quad as a neighbor - for(i = 0; i < count; i++ ) - { - CvCBQuad *q = quads[i]; - for(j = 0; j < 4; j++ ) - { - if( q->neighbors[j] == q0 ) - { - q->neighbors[j] = 0; - q->count--; - for(int k = 0; k < 4; k++ ) - if( q0->neighbors[k] == q ) - { - q0->neighbors[k] = 0; - q0->count--; - break; - } - break; - } - } - } - - // remove the quad - for(i = 0; i < count; i++ ) - { - CvCBQuad *q = quads[i]; - if (q == q0) - { - quads[i] = quads[count-1]; - break; - } - } -} - -// -// put quad into correct order, where has value -// - -static void -icvOrderQuad(CvCBQuad *quad, CvCBCorner *corner, int common) -{ - // find the corner - int tc; - for (tc=0; tc<4; tc++) - if (quad->corners[tc]->pt.x == corner->pt.x && - quad->corners[tc]->pt.y == corner->pt.y) - break; - - // set corner order - // shift - while (tc != common) - { - // shift by one - CvCBCorner *tempc; - CvCBQuad *tempq; - tempc = quad->corners[3]; - tempq = quad->neighbors[3]; - for (int i=3; i>0; i--) - { - quad->corners[i] = quad->corners[i-1]; - quad->neighbors[i] = quad->neighbors[i-1]; - } - quad->corners[0] = tempc; - quad->neighbors[0] = tempq; - tc++; - tc = tc%4; - } -} - - -// if we found too many connect quads, remove those which probably do not belong. -static int -icvCleanFoundConnectedQuads( int quad_count, CvCBQuad **quad_group, CvSize pattern_size ) -{ - CvPoint2D32f center = {0,0}; - int i, j, k; - // number of quads this pattern should contain - int count = ((pattern_size.width + 1)*(pattern_size.height + 1) + 1)/2; - - // if we have more quadrangles than we should, - // try to eliminate duplicates or ones which don't belong to the pattern rectangle... - if( quad_count <= count ) - return quad_count; - - // create an array of quadrangle centers - cv::AutoBuffer centers( quad_count ); - cv::Ptr temp_storage = cvCreateMemStorage(0); - - for( i = 0; i < quad_count; i++ ) - { - CvPoint2D32f ci = {0,0}; - CvCBQuad* q = quad_group[i]; - - for( j = 0; j < 4; j++ ) - { - CvPoint2D32f pt = q->corners[j]->pt; - ci.x += pt.x; - ci.y += pt.y; - } - - ci.x *= 0.25f; - ci.y *= 0.25f; - - centers[i] = ci; - center.x += ci.x; - center.y += ci.y; - } - center.x /= quad_count; - center.y /= quad_count; - - // If we still have more quadrangles than we should, - // we try to eliminate bad ones based on minimizing the bounding box. - // We iteratively remove the point which reduces the size of - // the bounding box of the blobs the most - // (since we want the rectangle to be as small as possible) - // remove the quadrange that causes the biggest reduction - // in pattern size until we have the correct number - for( ; quad_count > count; quad_count-- ) - { - double min_box_area = DBL_MAX; - int skip, min_box_area_index = -1; - CvCBQuad *q0, *q; - - // For each point, calculate box area without that point - for( skip = 0; skip < quad_count; skip++ ) - { - // get bounding rectangle - CvPoint2D32f temp = centers[skip]; // temporarily make index 'skip' the same as - centers[skip] = center; // pattern center (so it is not counted for convex hull) - CvMat pointMat = cvMat(1, quad_count, CV_32FC2, centers); - CvSeq *hull = cvConvexHull2( &pointMat, temp_storage, CV_CLOCKWISE, 1 ); - centers[skip] = temp; - double hull_area = fabs(cvContourArea(hull, CV_WHOLE_SEQ)); - - // remember smallest box area - if( hull_area < min_box_area ) - { - min_box_area = hull_area; - min_box_area_index = skip; - } - cvClearMemStorage( temp_storage ); - } - - q0 = quad_group[min_box_area_index]; - - // remove any references to this quad as a neighbor - for( i = 0; i < quad_count; i++ ) - { - q = quad_group[i]; - for( j = 0; j < 4; j++ ) - { - if( q->neighbors[j] == q0 ) - { - q->neighbors[j] = 0; - q->count--; - for( k = 0; k < 4; k++ ) - if( q0->neighbors[k] == q ) - { - q0->neighbors[k] = 0; - q0->count--; - break; - } - break; - } - } - } - - // remove the quad - quad_count--; - quad_group[min_box_area_index] = quad_group[quad_count]; - centers[min_box_area_index] = centers[quad_count]; - } - - return quad_count; -} - -//===================================================================================== - -static int -icvFindConnectedQuads( CvCBQuad *quad, int quad_count, CvCBQuad **out_group, - int group_idx, CvMemStorage* storage ) -{ - cv::Ptr temp_storage = cvCreateChildMemStorage( storage ); - CvSeq* stack = cvCreateSeq( 0, sizeof(*stack), sizeof(void*), temp_storage ); - int i, count = 0; - - // Scan the array for a first unlabeled quad - for( i = 0; i < quad_count; i++ ) - { - if( quad[i].count > 0 && quad[i].group_idx < 0) - break; - } - - // Recursively find a group of connected quads starting from the seed quad[i] - if( i < quad_count ) - { - CvCBQuad* q = &quad[i]; - cvSeqPush( stack, &q ); - out_group[count++] = q; - q->group_idx = group_idx; - q->ordered = false; - - while( stack->total ) - { - cvSeqPop( stack, &q ); - for( i = 0; i < 4; i++ ) - { - CvCBQuad *neighbor = q->neighbors[i]; - if( neighbor && neighbor->count > 0 && neighbor->group_idx < 0 ) - { - cvSeqPush( stack, &neighbor ); - out_group[count++] = neighbor; - neighbor->group_idx = group_idx; - neighbor->ordered = false; - } - } - } - } - - return count; -} - - -//===================================================================================== - -static int -icvCheckQuadGroup( CvCBQuad **quad_group, int quad_count, - CvCBCorner **out_corners, CvSize pattern_size ) -{ - const int ROW1 = 1000000; - const int ROW2 = 2000000; - const int ROW_ = 3000000; - int result = 0; - int i, out_corner_count = 0, corner_count = 0; - std::vector corners(quad_count*4); - - int j, k, kk; - int width = 0, height = 0; - int hist[5] = {0,0,0,0,0}; - CvCBCorner* first = 0, *first2 = 0, *right, *cur, *below, *c; - - // build dual graph, which vertices are internal quad corners - // and two vertices are connected iff they lie on the same quad edge - for( i = 0; i < quad_count; i++ ) - { - CvCBQuad* q = quad_group[i]; - /*CvScalar color = q->count == 0 ? cvScalar(0,255,255) : - q->count == 1 ? cvScalar(0,0,255) : - q->count == 2 ? cvScalar(0,255,0) : - q->count == 3 ? cvScalar(255,255,0) : - cvScalar(255,0,0);*/ - - for( j = 0; j < 4; j++ ) - { - //cvLine( debug_img, cvPointFrom32f(q->corners[j]->pt), cvPointFrom32f(q->corners[(j+1)&3]->pt), color, 1, CV_AA, 0 ); - if( q->neighbors[j] ) - { - CvCBCorner *a = q->corners[j], *b = q->corners[(j+1)&3]; - // mark internal corners that belong to: - // - a quad with a single neighbor - with ROW1, - // - a quad with two neighbors - with ROW2 - // make the rest of internal corners with ROW_ - int row_flag = q->count == 1 ? ROW1 : q->count == 2 ? ROW2 : ROW_; - - if( a->row == 0 ) - { - corners[corner_count++] = a; - a->row = row_flag; - } - else if( a->row > row_flag ) - a->row = row_flag; - - if( q->neighbors[(j+1)&3] ) - { - if( a->count >= 4 || b->count >= 4 ) - goto finalize; - for( k = 0; k < 4; k++ ) - { - if( a->neighbors[k] == b ) - goto finalize; - if( b->neighbors[k] == a ) - goto finalize; - } - a->neighbors[a->count++] = b; - b->neighbors[b->count++] = a; - } - } - } - } - - if( corner_count != pattern_size.width*pattern_size.height ) - goto finalize; - - for( i = 0; i < corner_count; i++ ) - { - int n = corners[i]->count; - assert( 0 <= n && n <= 4 ); - hist[n]++; - if( !first && n == 2 ) - { - if( corners[i]->row == ROW1 ) - first = corners[i]; - else if( !first2 && corners[i]->row == ROW2 ) - first2 = corners[i]; - } - } - - // start with a corner that belongs to a quad with a signle neighbor. - // if we do not have such, start with a corner of a quad with two neighbors. - if( !first ) - first = first2; - - if( !first || hist[0] != 0 || hist[1] != 0 || hist[2] != 4 || - hist[3] != (pattern_size.width + pattern_size.height)*2 - 8 ) - goto finalize; - - cur = first; - right = below = 0; - out_corners[out_corner_count++] = cur; - - for( k = 0; k < 4; k++ ) - { - c = cur->neighbors[k]; - if( c ) - { - if( !right ) - right = c; - else if( !below ) - below = c; - } - } - - if( !right || (right->count != 2 && right->count != 3) || - !below || (below->count != 2 && below->count != 3) ) - goto finalize; - - cur->row = 0; - //cvCircle( debug_img, cvPointFrom32f(cur->pt), 3, cvScalar(0,255,0), -1, 8, 0 ); - - first = below; // remember the first corner in the next row - // find and store the first row (or column) - for(j=1;;j++) - { - right->row = 0; - out_corners[out_corner_count++] = right; - //cvCircle( debug_img, cvPointFrom32f(right->pt), 3, cvScalar(0,255-j*10,0), -1, 8, 0 ); - if( right->count == 2 ) - break; - if( right->count != 3 || out_corner_count >= MAX(pattern_size.width,pattern_size.height) ) - goto finalize; - cur = right; - for( k = 0; k < 4; k++ ) - { - c = cur->neighbors[k]; - if( c && c->row > 0 ) - { - for( kk = 0; kk < 4; kk++ ) - { - if( c->neighbors[kk] == below ) - break; - } - if( kk < 4 ) - below = c; - else - right = c; - } - } - } - - width = out_corner_count; - if( width == pattern_size.width ) - height = pattern_size.height; - else if( width == pattern_size.height ) - height = pattern_size.width; - else - goto finalize; - - // find and store all the other rows - for( i = 1; ; i++ ) - { - if( !first ) - break; - cur = first; - first = 0; - for( j = 0;; j++ ) - { - cur->row = i; - out_corners[out_corner_count++] = cur; - //cvCircle( debug_img, cvPointFrom32f(cur->pt), 3, cvScalar(0,0,255-j*10), -1, 8, 0 ); - if( cur->count == 2 + (i < height-1) && j > 0 ) - break; - - right = 0; - - // find a neighbor that has not been processed yet - // and that has a neighbor from the previous row - for( k = 0; k < 4; k++ ) - { - c = cur->neighbors[k]; - if( c && c->row > i ) - { - for( kk = 0; kk < 4; kk++ ) - { - if( c->neighbors[kk] && c->neighbors[kk]->row == i-1 ) - break; - } - if( kk < 4 ) - { - right = c; - if( j > 0 ) - break; - } - else if( j == 0 ) - first = c; - } - } - if( !right ) - goto finalize; - cur = right; - } - - if( j != width - 1 ) - goto finalize; - } - - if( out_corner_count != corner_count ) - goto finalize; - - // check if we need to transpose the board - if( width != pattern_size.width ) - { - CV_SWAP( width, height, k ); - - memcpy( &corners[0], out_corners, corner_count*sizeof(corners[0]) ); - for( i = 0; i < height; i++ ) - for( j = 0; j < width; j++ ) - out_corners[i*width + j] = corners[j*height + i]; - } - - // check if we need to revert the order in each row - { - CvPoint2D32f p0 = out_corners[0]->pt, p1 = out_corners[pattern_size.width-1]->pt, - p2 = out_corners[pattern_size.width]->pt; - if( (p1.x - p0.x)*(p2.y - p1.y) - (p1.y - p0.y)*(p2.x - p1.x) < 0 ) - { - if( width % 2 == 0 ) - { - for( i = 0; i < height; i++ ) - for( j = 0; j < width/2; j++ ) - CV_SWAP( out_corners[i*width+j], out_corners[i*width+width-j-1], c ); - } - else - { - for( j = 0; j < width; j++ ) - for( i = 0; i < height/2; i++ ) - CV_SWAP( out_corners[i*width+j], out_corners[(height - i - 1)*width+j], c ); - } - } - } - - result = corner_count; - -finalize: - - if( result <= 0 ) - { - corner_count = MIN( corner_count, pattern_size.width*pattern_size.height ); - for( i = 0; i < corner_count; i++ ) - out_corners[i] = corners[i]; - result = -corner_count; - - if (result == -pattern_size.width*pattern_size.height) - result = -result; - } - - return result; -} - - - - -//===================================================================================== - -static void icvFindQuadNeighbors( CvCBQuad *quads, int quad_count ) -{ - const float thresh_scale = 1.f; - int idx, i, k, j; - float dx, dy, dist; - - // find quad neighbors - for( idx = 0; idx < quad_count; idx++ ) - { - CvCBQuad* cur_quad = &quads[idx]; - - // choose the points of the current quadrangle that are close to - // some points of the other quadrangles - // (it can happen for split corners (due to dilation) of the - // checker board). Search only in other quadrangles! - - // for each corner of this quadrangle - for( i = 0; i < 4; i++ ) - { - CvPoint2D32f pt; - float min_dist = FLT_MAX; - int closest_corner_idx = -1; - CvCBQuad *closest_quad = 0; - CvCBCorner *closest_corner = 0; - - if( cur_quad->neighbors[i] ) - continue; - - pt = cur_quad->corners[i]->pt; - - // find the closest corner in all other quadrangles - for( k = 0; k < quad_count; k++ ) - { - if( k == idx ) - continue; - - for( j = 0; j < 4; j++ ) - { - if( quads[k].neighbors[j] ) - continue; - - dx = pt.x - quads[k].corners[j]->pt.x; - dy = pt.y - quads[k].corners[j]->pt.y; - dist = dx * dx + dy * dy; - - if( dist < min_dist && - dist <= cur_quad->edge_len*thresh_scale && - dist <= quads[k].edge_len*thresh_scale ) - { - // check edge lengths, make sure they're compatible - // edges that are different by more than 1:4 are rejected - float ediff = cur_quad->edge_len - quads[k].edge_len; - if (ediff > 32*cur_quad->edge_len || - ediff > 32*quads[k].edge_len) - { - PRINTF("Incompatible edge lengths\n"); - continue; - } - closest_corner_idx = j; - closest_quad = &quads[k]; - min_dist = dist; - } - } - } - - // we found a matching corner point? - if( closest_corner_idx >= 0 && min_dist < FLT_MAX ) - { - // If another point from our current quad is closer to the found corner - // than the current one, then we don't count this one after all. - // This is necessary to support small squares where otherwise the wrong - // corner will get matched to closest_quad; - closest_corner = closest_quad->corners[closest_corner_idx]; - - for( j = 0; j < 4; j++ ) - { - if( cur_quad->neighbors[j] == closest_quad ) - break; - - dx = closest_corner->pt.x - cur_quad->corners[j]->pt.x; - dy = closest_corner->pt.y - cur_quad->corners[j]->pt.y; - - if( dx * dx + dy * dy < min_dist ) - break; - } - - if( j < 4 || cur_quad->count >= 4 || closest_quad->count >= 4 ) - continue; - - // Check that each corner is a neighbor of different quads - for( j = 0; j < closest_quad->count; j++ ) - { - if( closest_quad->neighbors[j] == cur_quad ) - break; - } - if( j < closest_quad->count ) - continue; - - // check whether the closest corner to closest_corner - // is different from cur_quad->corners[i]->pt - for( k = 0; k < quad_count; k++ ) - { - CvCBQuad* q = &quads[k]; - if( k == idx || q == closest_quad ) - continue; - - for( j = 0; j < 4; j++ ) - if( !q->neighbors[j] ) - { - dx = closest_corner->pt.x - q->corners[j]->pt.x; - dy = closest_corner->pt.y - q->corners[j]->pt.y; - dist = dx*dx + dy*dy; - if( dist < min_dist ) - break; - } - if( j < 4 ) - break; - } - - if( k < quad_count ) - continue; - - closest_corner->pt.x = (pt.x + closest_corner->pt.x) * 0.5f; - closest_corner->pt.y = (pt.y + closest_corner->pt.y) * 0.5f; - - // We've found one more corner - remember it - cur_quad->count++; - cur_quad->neighbors[i] = closest_quad; - cur_quad->corners[i] = closest_corner; - - closest_quad->count++; - closest_quad->neighbors[closest_corner_idx] = cur_quad; - } - } - } -} - -//===================================================================================== - -// returns corners in clockwise order -// corners don't necessarily start at same position on quad (e.g., -// top left corner) - -static int -icvGenerateQuads( CvCBQuad **out_quads, CvCBCorner **out_corners, - CvMemStorage *storage, CvMat *image, int flags ) -{ - int quad_count = 0; - cv::Ptr temp_storage; - - if( out_quads ) - *out_quads = 0; - - if( out_corners ) - *out_corners = 0; - - CvSeq *src_contour = 0; - CvSeq *root; - CvContourEx* board = 0; - CvContourScanner scanner; - int i, idx, min_size; - - CV_Assert( out_corners && out_quads ); - - // empiric bound for minimal allowed perimeter for squares - min_size = 25; //cvRound( image->cols * image->rows * .03 * 0.01 * 0.92 ); - - // create temporary storage for contours and the sequence of pointers to found quadrangles - temp_storage = cvCreateChildMemStorage( storage ); - root = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvSeq*), temp_storage ); - - // initialize contour retrieving routine - scanner = cvStartFindContours( image, temp_storage, sizeof(CvContourEx), - CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); - - // get all the contours one by one - while( (src_contour = cvFindNextContour( scanner )) != 0 ) - { - CvSeq *dst_contour = 0; - CvRect rect = ((CvContour*)src_contour)->rect; - - // reject contours with too small perimeter - if( CV_IS_SEQ_HOLE(src_contour) && rect.width*rect.height >= min_size ) - { - const int min_approx_level = 1, max_approx_level = MAX_CONTOUR_APPROX; - int approx_level; - for( approx_level = min_approx_level; approx_level <= max_approx_level; approx_level++ ) - { - dst_contour = cvApproxPoly( src_contour, sizeof(CvContour), temp_storage, - CV_POLY_APPROX_DP, (float)approx_level ); - if( dst_contour->total == 4 ) - break; - - // we call this again on its own output, because sometimes - // cvApproxPoly() does not simplify as much as it should. - dst_contour = cvApproxPoly( dst_contour, sizeof(CvContour), temp_storage, - CV_POLY_APPROX_DP, (float)approx_level ); - - if( dst_contour->total == 4 ) - break; - } - - // reject non-quadrangles - if( dst_contour->total == 4 && cvCheckContourConvexity(dst_contour) ) - { - CvPoint pt[4]; - double d1, d2, p = cvContourPerimeter(dst_contour); - double area = fabs(cvContourArea(dst_contour, CV_WHOLE_SEQ)); - double dx, dy; - - for( i = 0; i < 4; i++ ) - pt[i] = *(CvPoint*)cvGetSeqElem(dst_contour, i); - - dx = pt[0].x - pt[2].x; - dy = pt[0].y - pt[2].y; - d1 = sqrt(dx*dx + dy*dy); - - dx = pt[1].x - pt[3].x; - dy = pt[1].y - pt[3].y; - d2 = sqrt(dx*dx + dy*dy); - - // philipg. Only accept those quadrangles which are more square - // than rectangular and which are big enough - double d3, d4; - dx = pt[0].x - pt[1].x; - dy = pt[0].y - pt[1].y; - d3 = sqrt(dx*dx + dy*dy); - dx = pt[1].x - pt[2].x; - dy = pt[1].y - pt[2].y; - d4 = sqrt(dx*dx + dy*dy); - if( !(flags & CV_CALIB_CB_FILTER_QUADS) || - (d3*4 > d4 && d4*4 > d3 && d3*d4 < area*1.5 && area > min_size && - d1 >= 0.15 * p && d2 >= 0.15 * p) ) - { - CvContourEx* parent = (CvContourEx*)(src_contour->v_prev); - parent->counter++; - if( !board || board->counter < parent->counter ) - board = parent; - dst_contour->v_prev = (CvSeq*)parent; - //for( i = 0; i < 4; i++ ) cvLine( debug_img, pt[i], pt[(i+1)&3], cvScalar(200,255,255), 1, CV_AA, 0 ); - cvSeqPush( root, &dst_contour ); - } - } - } - } - - // finish contour retrieving - cvEndFindContours( &scanner ); - - // allocate quad & corner buffers - *out_quads = (CvCBQuad*)cvAlloc((root->total+root->total / 2) * sizeof((*out_quads)[0])); - *out_corners = (CvCBCorner*)cvAlloc((root->total+root->total / 2) * 4 * sizeof((*out_corners)[0])); - - // Create array of quads structures - for( idx = 0; idx < root->total; idx++ ) - { - CvCBQuad* q = &(*out_quads)[quad_count]; - src_contour = *(CvSeq**)cvGetSeqElem( root, idx ); - if( (flags & CV_CALIB_CB_FILTER_QUADS) && src_contour->v_prev != (CvSeq*)board ) - continue; - - // reset group ID - memset( q, 0, sizeof(*q) ); - q->group_idx = -1; - assert( src_contour->total == 4 ); - for( i = 0; i < 4; i++ ) - { - CvPoint2D32f pt = cvPointTo32f(*(CvPoint*)cvGetSeqElem(src_contour, i)); - CvCBCorner* corner = &(*out_corners)[quad_count*4 + i]; - - memset( corner, 0, sizeof(*corner) ); - corner->pt = pt; - q->corners[i] = corner; - } - q->edge_len = FLT_MAX; - for( i = 0; i < 4; i++ ) - { - float dx = q->corners[i]->pt.x - q->corners[(i+1)&3]->pt.x; - float dy = q->corners[i]->pt.y - q->corners[(i+1)&3]->pt.y; - float d = dx*dx + dy*dy; - if( q->edge_len > d ) - q->edge_len = d; - } - quad_count++; - } - - return quad_count; -} - - -CV_IMPL void -cvDrawChessboardCorners( CvArr* _image, CvSize pattern_size, - CvPoint2D32f* corners, int count, int found ) -{ - const int shift = 0; - const int radius = 4; - const int r = radius*(1 << shift); - int i; - CvMat stub, *image; - double scale = 1; - int type, cn, line_type; - - image = cvGetMat( _image, &stub ); - - type = CV_MAT_TYPE(image->type); - cn = CV_MAT_CN(type); - if( cn != 1 && cn != 3 && cn != 4 ) - CV_Error( CV_StsUnsupportedFormat, "Number of channels must be 1, 3 or 4" ); - - switch( CV_MAT_DEPTH(image->type) ) - { - case CV_8U: - scale = 1; - break; - case CV_16U: - scale = 256; - break; - case CV_32F: - scale = 1./255; - break; - default: - CV_Error( CV_StsUnsupportedFormat, - "Only 8-bit, 16-bit or floating-point 32-bit images are supported" ); - } - - line_type = type == CV_8UC1 || type == CV_8UC3 ? CV_AA : 8; - - if( !found ) - { - CvScalar color = {{0,0,255}}; - if( cn == 1 ) - color = cvScalarAll(200); - color.val[0] *= scale; - color.val[1] *= scale; - color.val[2] *= scale; - color.val[3] *= scale; - - for( i = 0; i < count; i++ ) - { - CvPoint pt; - pt.x = cvRound(corners[i].x*(1 << shift)); - pt.y = cvRound(corners[i].y*(1 << shift)); - cvLine( image, cvPoint( pt.x - r, pt.y - r ), - cvPoint( pt.x + r, pt.y + r ), color, 1, line_type, shift ); - cvLine( image, cvPoint( pt.x - r, pt.y + r), - cvPoint( pt.x + r, pt.y - r), color, 1, line_type, shift ); - cvCircle( image, pt, r+(1< tmpcorners(count+1); - Mat image = _image.getMat(); CvMat c_image = image; - bool ok = cvFindChessboardCorners(&c_image, patternSize, - (CvPoint2D32f*)&tmpcorners[0], &count, flags ) > 0; - if( count > 0 ) - { - tmpcorners.resize(count); - Mat(tmpcorners).copyTo(corners); - } - else - corners.release(); - return ok; -} - -namespace -{ -int quiet_error(int /*status*/, const char* /*func_name*/, - const char* /*err_msg*/, const char* /*file_name*/, - int /*line*/, void* /*userdata*/ ) -{ - return 0; -} -} - -void cv::drawChessboardCorners( InputOutputArray _image, Size patternSize, - InputArray _corners, - bool patternWasFound ) -{ - Mat corners = _corners.getMat(); - if( corners.empty() ) - return; - Mat image = _image.getMat(); CvMat c_image = _image.getMat(); - int nelems = corners.checkVector(2, CV_32F, true); - CV_Assert(nelems >= 0); - cvDrawChessboardCorners( &c_image, patternSize, (CvPoint2D32f*)corners.data, - nelems, patternWasFound ); -} - -bool cv::findCirclesGrid( InputArray _image, Size patternSize, - OutputArray _centers, int flags, const Ptr &blobDetector ) -{ - bool isAsymmetricGrid = (flags & CALIB_CB_ASYMMETRIC_GRID) ? true : false; - bool isSymmetricGrid = (flags & CALIB_CB_SYMMETRIC_GRID ) ? true : false; - CV_Assert(isAsymmetricGrid ^ isSymmetricGrid); - - Mat image = _image.getMat(); - vector centers; - - vector keypoints; - blobDetector->detect(image, keypoints); - vector points; - for (size_t i = 0; i < keypoints.size(); i++) - { - points.push_back (keypoints[i].pt); - } - - if(flags & CALIB_CB_CLUSTERING) - { - CirclesGridClusterFinder circlesGridClusterFinder(isAsymmetricGrid); - circlesGridClusterFinder.findGrid(points, patternSize, centers); - Mat(centers).copyTo(_centers); - return !centers.empty(); - } - - CirclesGridFinderParameters parameters; - parameters.vertexPenalty = -0.6f; - parameters.vertexGain = 1; - parameters.existingVertexGain = 10000; - parameters.edgeGain = 1; - parameters.edgePenalty = -0.6f; - - if(flags & CALIB_CB_ASYMMETRIC_GRID) - parameters.gridType = CirclesGridFinderParameters::ASYMMETRIC_GRID; - if(flags & CALIB_CB_SYMMETRIC_GRID) - parameters.gridType = CirclesGridFinderParameters::SYMMETRIC_GRID; - - const int attempts = 2; - const size_t minHomographyPoints = 4; - Mat H; - for (int i = 0; i < attempts; i++) - { - centers.clear(); - CirclesGridFinder boxFinder(patternSize, points, parameters); - bool isFound = false; -#define BE_QUIET 1 -#if BE_QUIET - void* oldCbkData; - ErrorCallback oldCbk = redirectError(quiet_error, 0, &oldCbkData); -#endif - try - { - isFound = boxFinder.findHoles(); - } - catch (cv::Exception) - { - - } -#if BE_QUIET - redirectError(oldCbk, oldCbkData); -#endif - if (isFound) - { - switch(parameters.gridType) - { - case CirclesGridFinderParameters::SYMMETRIC_GRID: - boxFinder.getHoles(centers); - break; - case CirclesGridFinderParameters::ASYMMETRIC_GRID: - boxFinder.getAsymmetricHoles(centers); - break; - default: - CV_Error(CV_StsBadArg, "Unkown pattern type"); - } - - if (i != 0) - { - Mat orgPointsMat; - transform(centers, orgPointsMat, H.inv()); - convertPointsFromHomogeneous(orgPointsMat, centers); - } - Mat(centers).copyTo(_centers); - return true; - } - - boxFinder.getHoles(centers); - if (i != attempts - 1) - { - if (centers.size() < minHomographyPoints) - break; - H = CirclesGridFinder::rectifyGrid(boxFinder.getDetectedGridSize(), centers, points, points); - } - } - Mat(centers).copyTo(_centers); - return false; -} - -/* End of file. */ diff --git a/modules/calib3d/src/calibration.cpp b/modules/calib3d/src/calibration.cpp deleted file mode 100644 index d9e821d..0000000 --- a/modules/calib3d/src/calibration.cpp +++ /dev/null @@ -1,3804 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include -#include - -/* - This is stright-forward port v3 of Matlab calibration engine by Jean-Yves Bouguet - that is (in a large extent) based on the paper: - Z. Zhang. "A flexible new technique for camera calibration". - IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000. - - The 1st initial port was done by Valery Mosyagin. -*/ - -using namespace cv; - -CvLevMarq::CvLevMarq() -{ - mask = prevParam = param = J = err = JtJ = JtJN = JtErr = JtJV = JtJW = Ptr(); - lambdaLg10 = 0; state = DONE; - criteria = cvTermCriteria(0,0,0); - iters = 0; - completeSymmFlag = false; -} - -CvLevMarq::CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria0, bool _completeSymmFlag ) -{ - mask = prevParam = param = J = err = JtJ = JtJN = JtErr = JtJV = JtJW = Ptr(); - init(nparams, nerrs, criteria0, _completeSymmFlag); -} - -void CvLevMarq::clear() -{ - mask.release(); - prevParam.release(); - param.release(); - J.release(); - err.release(); - JtJ.release(); - JtJN.release(); - JtErr.release(); - JtJV.release(); - JtJW.release(); -} - -CvLevMarq::~CvLevMarq() -{ - clear(); -} - -void CvLevMarq::init( int nparams, int nerrs, CvTermCriteria criteria0, bool _completeSymmFlag ) -{ - if( !param || param->rows != nparams || nerrs != (err ? err->rows : 0) ) - clear(); - mask = cvCreateMat( nparams, 1, CV_8U ); - cvSet(mask, cvScalarAll(1)); - prevParam = cvCreateMat( nparams, 1, CV_64F ); - param = cvCreateMat( nparams, 1, CV_64F ); - JtJ = cvCreateMat( nparams, nparams, CV_64F ); - JtJN = cvCreateMat( nparams, nparams, CV_64F ); - JtJV = cvCreateMat( nparams, nparams, CV_64F ); - JtJW = cvCreateMat( nparams, 1, CV_64F ); - JtErr = cvCreateMat( nparams, 1, CV_64F ); - if( nerrs > 0 ) - { - J = cvCreateMat( nerrs, nparams, CV_64F ); - err = cvCreateMat( nerrs, 1, CV_64F ); - } - prevErrNorm = DBL_MAX; - lambdaLg10 = -3; - criteria = criteria0; - if( criteria.type & CV_TERMCRIT_ITER ) - criteria.max_iter = MIN(MAX(criteria.max_iter,1),1000); - else - criteria.max_iter = 30; - if( criteria.type & CV_TERMCRIT_EPS ) - criteria.epsilon = MAX(criteria.epsilon, 0); - else - criteria.epsilon = DBL_EPSILON; - state = STARTED; - iters = 0; - completeSymmFlag = _completeSymmFlag; -} - -bool CvLevMarq::update( const CvMat*& _param, CvMat*& matJ, CvMat*& _err ) -{ - double change; - - matJ = _err = 0; - - assert( !err.empty() ); - if( state == DONE ) - { - _param = param; - return false; - } - - if( state == STARTED ) - { - _param = param; - cvZero( J ); - cvZero( err ); - matJ = J; - _err = err; - state = CALC_J; - return true; - } - - if( state == CALC_J ) - { - cvMulTransposed( J, JtJ, 1 ); - cvGEMM( J, err, 1, 0, 0, JtErr, CV_GEMM_A_T ); - cvCopy( param, prevParam ); - step(); - if( iters == 0 ) - prevErrNorm = cvNorm(err, 0, CV_L2); - _param = param; - cvZero( err ); - _err = err; - state = CHECK_ERR; - return true; - } - - assert( state == CHECK_ERR ); - errNorm = cvNorm( err, 0, CV_L2 ); - if( errNorm > prevErrNorm ) - { - if( ++lambdaLg10 <= 16 ) - { - step(); - _param = param; - cvZero( err ); - _err = err; - state = CHECK_ERR; - return true; - } - } - - lambdaLg10 = MAX(lambdaLg10-1, -16); - if( ++iters >= criteria.max_iter || - (change = cvNorm(param, prevParam, CV_RELATIVE_L2)) < criteria.epsilon ) - { - _param = param; - state = DONE; - return true; - } - - prevErrNorm = errNorm; - _param = param; - cvZero(J); - matJ = J; - _err = err; - state = CALC_J; - return true; -} - - -bool CvLevMarq::updateAlt( const CvMat*& _param, CvMat*& _JtJ, CvMat*& _JtErr, double*& _errNorm ) -{ - double change; - - CV_Assert( err.empty() ); - if( state == DONE ) - { - _param = param; - return false; - } - - if( state == STARTED ) - { - _param = param; - cvZero( JtJ ); - cvZero( JtErr ); - errNorm = 0; - _JtJ = JtJ; - _JtErr = JtErr; - _errNorm = &errNorm; - state = CALC_J; - return true; - } - - if( state == CALC_J ) - { - cvCopy( param, prevParam ); - step(); - _param = param; - prevErrNorm = errNorm; - errNorm = 0; - _errNorm = &errNorm; - state = CHECK_ERR; - return true; - } - - assert( state == CHECK_ERR ); - if( errNorm > prevErrNorm ) - { - if( ++lambdaLg10 <= 16 ) - { - step(); - _param = param; - errNorm = 0; - _errNorm = &errNorm; - state = CHECK_ERR; - return true; - } - } - - lambdaLg10 = MAX(lambdaLg10-1, -16); - if( ++iters >= criteria.max_iter || - (change = cvNorm(param, prevParam, CV_RELATIVE_L2)) < criteria.epsilon ) - { - _param = param; - state = DONE; - return false; - } - - prevErrNorm = errNorm; - cvZero( JtJ ); - cvZero( JtErr ); - _param = param; - _JtJ = JtJ; - _JtErr = JtErr; - state = CALC_J; - return true; -} - -void CvLevMarq::step() -{ - const double LOG10 = log(10.); - double lambda = exp(lambdaLg10*LOG10); - int i, j, nparams = param->rows; - - for( i = 0; i < nparams; i++ ) - if( mask->data.ptr[i] == 0 ) - { - double *row = JtJ->data.db + i*nparams, *col = JtJ->data.db + i; - for( j = 0; j < nparams; j++ ) - row[j] = col[j*nparams] = 0; - JtErr->data.db[i] = 0; - } - - if( !err ) - cvCompleteSymm( JtJ, completeSymmFlag ); -#if 1 - cvCopy( JtJ, JtJN ); - for( i = 0; i < nparams; i++ ) - JtJN->data.db[(nparams+1)*i] *= 1. + lambda; -#else - cvSetIdentity(JtJN, cvRealScalar(lambda)); - cvAdd( JtJ, JtJN, JtJN ); -#endif - cvSVD( JtJN, JtJW, 0, JtJV, CV_SVD_MODIFY_A + CV_SVD_U_T + CV_SVD_V_T ); - cvSVBkSb( JtJW, JtJV, JtJV, JtErr, param, CV_SVD_U_T + CV_SVD_V_T ); - for( i = 0; i < nparams; i++ ) - param->data.db[i] = prevParam->data.db[i] - (mask->data.ptr[i] ? param->data.db[i] : 0); -} - -// reimplementation of dAB.m -CV_IMPL void cvCalcMatMulDeriv( const CvMat* A, const CvMat* B, CvMat* dABdA, CvMat* dABdB ) -{ - int i, j, M, N, L; - int bstep; - - CV_Assert( CV_IS_MAT(A) && CV_IS_MAT(B) ); - CV_Assert( CV_ARE_TYPES_EQ(A, B) && - (CV_MAT_TYPE(A->type) == CV_32F || CV_MAT_TYPE(A->type) == CV_64F) ); - CV_Assert( A->cols == B->rows ); - - M = A->rows; - L = A->cols; - N = B->cols; - bstep = B->step/CV_ELEM_SIZE(B->type); - - if( dABdA ) - { - CV_Assert( CV_ARE_TYPES_EQ(A, dABdA) && - dABdA->rows == A->rows*B->cols && dABdA->cols == A->rows*A->cols ); - } - - if( dABdB ) - { - CV_Assert( CV_ARE_TYPES_EQ(A, dABdB) && - dABdB->rows == A->rows*B->cols && dABdB->cols == B->rows*B->cols ); - } - - if( CV_MAT_TYPE(A->type) == CV_32F ) - { - for( i = 0; i < M*N; i++ ) - { - int i1 = i / N, i2 = i % N; - - if( dABdA ) - { - float* dcda = (float*)(dABdA->data.ptr + dABdA->step*i); - const float* b = (const float*)B->data.ptr + i2; - - for( j = 0; j < M*L; j++ ) - dcda[j] = 0; - for( j = 0; j < L; j++ ) - dcda[i1*L + j] = b[j*bstep]; - } - - if( dABdB ) - { - float* dcdb = (float*)(dABdB->data.ptr + dABdB->step*i); - const float* a = (const float*)(A->data.ptr + A->step*i1); - - for( j = 0; j < L*N; j++ ) - dcdb[j] = 0; - for( j = 0; j < L; j++ ) - dcdb[j*N + i2] = a[j]; - } - } - } - else - { - for( i = 0; i < M*N; i++ ) - { - int i1 = i / N, i2 = i % N; - - if( dABdA ) - { - double* dcda = (double*)(dABdA->data.ptr + dABdA->step*i); - const double* b = (const double*)B->data.ptr + i2; - - for( j = 0; j < M*L; j++ ) - dcda[j] = 0; - for( j = 0; j < L; j++ ) - dcda[i1*L + j] = b[j*bstep]; - } - - if( dABdB ) - { - double* dcdb = (double*)(dABdB->data.ptr + dABdB->step*i); - const double* a = (const double*)(A->data.ptr + A->step*i1); - - for( j = 0; j < L*N; j++ ) - dcdb[j] = 0; - for( j = 0; j < L; j++ ) - dcdb[j*N + i2] = a[j]; - } - } - } -} - -// reimplementation of compose_motion.m -CV_IMPL void cvComposeRT( const CvMat* _rvec1, const CvMat* _tvec1, - const CvMat* _rvec2, const CvMat* _tvec2, - CvMat* _rvec3, CvMat* _tvec3, - CvMat* dr3dr1, CvMat* dr3dt1, - CvMat* dr3dr2, CvMat* dr3dt2, - CvMat* dt3dr1, CvMat* dt3dt1, - CvMat* dt3dr2, CvMat* dt3dt2 ) -{ - double _r1[3], _r2[3]; - double _R1[9], _d1[9*3], _R2[9], _d2[9*3]; - CvMat r1 = cvMat(3,1,CV_64F,_r1), r2 = cvMat(3,1,CV_64F,_r2); - CvMat R1 = cvMat(3,3,CV_64F,_R1), R2 = cvMat(3,3,CV_64F,_R2); - CvMat dR1dr1 = cvMat(9,3,CV_64F,_d1), dR2dr2 = cvMat(9,3,CV_64F,_d2); - - CV_Assert( CV_IS_MAT(_rvec1) && CV_IS_MAT(_rvec2) ); - - CV_Assert( CV_MAT_TYPE(_rvec1->type) == CV_32F || - CV_MAT_TYPE(_rvec1->type) == CV_64F ); - - CV_Assert( _rvec1->rows == 3 && _rvec1->cols == 1 && CV_ARE_SIZES_EQ(_rvec1, _rvec2) ); - - cvConvert( _rvec1, &r1 ); - cvConvert( _rvec2, &r2 ); - - cvRodrigues2( &r1, &R1, &dR1dr1 ); - cvRodrigues2( &r2, &R2, &dR2dr2 ); - - if( _rvec3 || dr3dr1 || dr3dr2 ) - { - double _r3[3], _R3[9], _dR3dR1[9*9], _dR3dR2[9*9], _dr3dR3[9*3]; - double _W1[9*3], _W2[3*3]; - CvMat r3 = cvMat(3,1,CV_64F,_r3), R3 = cvMat(3,3,CV_64F,_R3); - CvMat dR3dR1 = cvMat(9,9,CV_64F,_dR3dR1), dR3dR2 = cvMat(9,9,CV_64F,_dR3dR2); - CvMat dr3dR3 = cvMat(3,9,CV_64F,_dr3dR3); - CvMat W1 = cvMat(3,9,CV_64F,_W1), W2 = cvMat(3,3,CV_64F,_W2); - - cvMatMul( &R2, &R1, &R3 ); - cvCalcMatMulDeriv( &R2, &R1, &dR3dR2, &dR3dR1 ); - - cvRodrigues2( &R3, &r3, &dr3dR3 ); - - if( _rvec3 ) - cvConvert( &r3, _rvec3 ); - - if( dr3dr1 ) - { - cvMatMul( &dr3dR3, &dR3dR1, &W1 ); - cvMatMul( &W1, &dR1dr1, &W2 ); - cvConvert( &W2, dr3dr1 ); - } - - if( dr3dr2 ) - { - cvMatMul( &dr3dR3, &dR3dR2, &W1 ); - cvMatMul( &W1, &dR2dr2, &W2 ); - cvConvert( &W2, dr3dr2 ); - } - } - - if( dr3dt1 ) - cvZero( dr3dt1 ); - if( dr3dt2 ) - cvZero( dr3dt2 ); - - if( _tvec3 || dt3dr2 || dt3dt1 ) - { - double _t1[3], _t2[3], _t3[3], _dxdR2[3*9], _dxdt1[3*3], _W3[3*3]; - CvMat t1 = cvMat(3,1,CV_64F,_t1), t2 = cvMat(3,1,CV_64F,_t2); - CvMat t3 = cvMat(3,1,CV_64F,_t3); - CvMat dxdR2 = cvMat(3, 9, CV_64F, _dxdR2); - CvMat dxdt1 = cvMat(3, 3, CV_64F, _dxdt1); - CvMat W3 = cvMat(3, 3, CV_64F, _W3); - - CV_Assert( CV_IS_MAT(_tvec1) && CV_IS_MAT(_tvec2) ); - CV_Assert( CV_ARE_SIZES_EQ(_tvec1, _tvec2) && CV_ARE_SIZES_EQ(_tvec1, _rvec1) ); - - cvConvert( _tvec1, &t1 ); - cvConvert( _tvec2, &t2 ); - cvMatMulAdd( &R2, &t1, &t2, &t3 ); - - if( _tvec3 ) - cvConvert( &t3, _tvec3 ); - - if( dt3dr2 || dt3dt1 ) - { - cvCalcMatMulDeriv( &R2, &t1, &dxdR2, &dxdt1 ); - if( dt3dr2 ) - { - cvMatMul( &dxdR2, &dR2dr2, &W3 ); - cvConvert( &W3, dt3dr2 ); - } - if( dt3dt1 ) - cvConvert( &dxdt1, dt3dt1 ); - } - } - - if( dt3dt2 ) - cvSetIdentity( dt3dt2 ); - if( dt3dr1 ) - cvZero( dt3dr1 ); -} - -CV_IMPL int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian ) -{ - int depth, elem_size; - int i, k; - double J[27]; - CvMat matJ = cvMat( 3, 9, CV_64F, J ); - - if( !CV_IS_MAT(src) ) - CV_Error( !src ? CV_StsNullPtr : CV_StsBadArg, "Input argument is not a valid matrix" ); - - if( !CV_IS_MAT(dst) ) - CV_Error( !dst ? CV_StsNullPtr : CV_StsBadArg, - "The first output argument is not a valid matrix" ); - - depth = CV_MAT_DEPTH(src->type); - elem_size = CV_ELEM_SIZE(depth); - - if( depth != CV_32F && depth != CV_64F ) - CV_Error( CV_StsUnsupportedFormat, "The matrices must have 32f or 64f data type" ); - - if( !CV_ARE_DEPTHS_EQ(src, dst) ) - CV_Error( CV_StsUnmatchedFormats, "All the matrices must have the same data type" ); - - if( jacobian ) - { - if( !CV_IS_MAT(jacobian) ) - CV_Error( CV_StsBadArg, "Jacobian is not a valid matrix" ); - - if( !CV_ARE_DEPTHS_EQ(src, jacobian) || CV_MAT_CN(jacobian->type) != 1 ) - CV_Error( CV_StsUnmatchedFormats, "Jacobian must have 32fC1 or 64fC1 datatype" ); - - if( (jacobian->rows != 9 || jacobian->cols != 3) && - (jacobian->rows != 3 || jacobian->cols != 9)) - CV_Error( CV_StsBadSize, "Jacobian must be 3x9 or 9x3" ); - } - - if( src->cols == 1 || src->rows == 1 ) - { - double rx, ry, rz, theta; - int step = src->rows > 1 ? src->step / elem_size : 1; - - if( src->rows + src->cols*CV_MAT_CN(src->type) - 1 != 3 ) - CV_Error( CV_StsBadSize, "Input matrix must be 1x3, 3x1 or 3x3" ); - - if( dst->rows != 3 || dst->cols != 3 || CV_MAT_CN(dst->type) != 1 ) - CV_Error( CV_StsBadSize, "Output matrix must be 3x3, single-channel floating point matrix" ); - - if( depth == CV_32F ) - { - rx = src->data.fl[0]; - ry = src->data.fl[step]; - rz = src->data.fl[step*2]; - } - else - { - rx = src->data.db[0]; - ry = src->data.db[step]; - rz = src->data.db[step*2]; - } - theta = sqrt(rx*rx + ry*ry + rz*rz); - - if( theta < DBL_EPSILON ) - { - cvSetIdentity( dst ); - - if( jacobian ) - { - memset( J, 0, sizeof(J) ); - J[5] = J[15] = J[19] = -1; - J[7] = J[11] = J[21] = 1; - } - } - else - { - const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; - - double c = cos(theta); - double s = sin(theta); - double c1 = 1. - c; - double itheta = theta ? 1./theta : 0.; - - rx *= itheta; ry *= itheta; rz *= itheta; - - double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz }; - double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 }; - double R[9]; - CvMat matR = cvMat( 3, 3, CV_64F, R ); - - // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x] - // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0] - for( k = 0; k < 9; k++ ) - R[k] = c*I[k] + c1*rrt[k] + s*_r_x_[k]; - - cvConvert( &matR, dst ); - - if( jacobian ) - { - double drrt[] = { rx+rx, ry, rz, ry, 0, 0, rz, 0, 0, - 0, rx, 0, rx, ry+ry, rz, 0, rz, 0, - 0, 0, rx, 0, 0, ry, rx, ry, rz+rz }; - double d_r_x_[] = { 0, 0, 0, 0, 0, -1, 0, 1, 0, - 0, 0, 1, 0, 0, 0, -1, 0, 0, - 0, -1, 0, 1, 0, 0, 0, 0, 0 }; - for( i = 0; i < 3; i++ ) - { - double ri = i == 0 ? rx : i == 1 ? ry : rz; - double a0 = -s*ri, a1 = (s - 2*c1*itheta)*ri, a2 = c1*itheta; - double a3 = (c - s*itheta)*ri, a4 = s*itheta; - for( k = 0; k < 9; k++ ) - J[i*9+k] = a0*I[k] + a1*rrt[k] + a2*drrt[i*9+k] + - a3*_r_x_[k] + a4*d_r_x_[i*9+k]; - } - } - } - } - else if( src->cols == 3 && src->rows == 3 ) - { - double R[9], U[9], V[9], W[3], rx, ry, rz; - CvMat matR = cvMat( 3, 3, CV_64F, R ); - CvMat matU = cvMat( 3, 3, CV_64F, U ); - CvMat matV = cvMat( 3, 3, CV_64F, V ); - CvMat matW = cvMat( 3, 1, CV_64F, W ); - double theta, s, c; - int step = dst->rows > 1 ? dst->step / elem_size : 1; - - if( (dst->rows != 1 || dst->cols*CV_MAT_CN(dst->type) != 3) && - (dst->rows != 3 || dst->cols != 1 || CV_MAT_CN(dst->type) != 1)) - CV_Error( CV_StsBadSize, "Output matrix must be 1x3 or 3x1" ); - - cvConvert( src, &matR ); - if( !cvCheckArr( &matR, CV_CHECK_RANGE+CV_CHECK_QUIET, -100, 100 ) ) - { - cvZero(dst); - if( jacobian ) - cvZero(jacobian); - return 0; - } - - cvSVD( &matR, &matW, &matU, &matV, CV_SVD_MODIFY_A + CV_SVD_U_T + CV_SVD_V_T ); - cvGEMM( &matU, &matV, 1, 0, 0, &matR, CV_GEMM_A_T ); - - rx = R[7] - R[5]; - ry = R[2] - R[6]; - rz = R[3] - R[1]; - - s = sqrt((rx*rx + ry*ry + rz*rz)*0.25); - c = (R[0] + R[4] + R[8] - 1)*0.5; - c = c > 1. ? 1. : c < -1. ? -1. : c; - theta = acos(c); - - if( s < 1e-5 ) - { - double t; - - if( c > 0 ) - rx = ry = rz = 0; - else - { - t = (R[0] + 1)*0.5; - rx = sqrt(MAX(t,0.)); - t = (R[4] + 1)*0.5; - ry = sqrt(MAX(t,0.))*(R[1] < 0 ? -1. : 1.); - t = (R[8] + 1)*0.5; - rz = sqrt(MAX(t,0.))*(R[2] < 0 ? -1. : 1.); - if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R[5] > 0) != (ry*rz > 0) ) - rz = -rz; - theta /= sqrt(rx*rx + ry*ry + rz*rz); - rx *= theta; - ry *= theta; - rz *= theta; - } - - if( jacobian ) - { - memset( J, 0, sizeof(J) ); - if( c > 0 ) - { - J[5] = J[15] = J[19] = -0.5; - J[7] = J[11] = J[21] = 0.5; - } - } - } - else - { - double vth = 1/(2*s); - - if( jacobian ) - { - double t, dtheta_dtr = -1./s; - // var1 = [vth;theta] - // var = [om1;var1] = [om1;vth;theta] - double dvth_dtheta = -vth*c/s; - double d1 = 0.5*dvth_dtheta*dtheta_dtr; - double d2 = 0.5*dtheta_dtr; - // dvar1/dR = dvar1/dtheta*dtheta/dR = [dvth/dtheta; 1] * dtheta/dtr * dtr/dR - double dvardR[5*9] = - { - 0, 0, 0, 0, 0, 1, 0, -1, 0, - 0, 0, -1, 0, 0, 0, 1, 0, 0, - 0, 1, 0, -1, 0, 0, 0, 0, 0, - d1, 0, 0, 0, d1, 0, 0, 0, d1, - d2, 0, 0, 0, d2, 0, 0, 0, d2 - }; - // var2 = [om;theta] - double dvar2dvar[] = - { - vth, 0, 0, rx, 0, - 0, vth, 0, ry, 0, - 0, 0, vth, rz, 0, - 0, 0, 0, 0, 1 - }; - double domegadvar2[] = - { - theta, 0, 0, rx*vth, - 0, theta, 0, ry*vth, - 0, 0, theta, rz*vth - }; - - CvMat _dvardR = cvMat( 5, 9, CV_64FC1, dvardR ); - CvMat _dvar2dvar = cvMat( 4, 5, CV_64FC1, dvar2dvar ); - CvMat _domegadvar2 = cvMat( 3, 4, CV_64FC1, domegadvar2 ); - double t0[3*5]; - CvMat _t0 = cvMat( 3, 5, CV_64FC1, t0 ); - - cvMatMul( &_domegadvar2, &_dvar2dvar, &_t0 ); - cvMatMul( &_t0, &_dvardR, &matJ ); - - // transpose every row of matJ (treat the rows as 3x3 matrices) - CV_SWAP(J[1], J[3], t); CV_SWAP(J[2], J[6], t); CV_SWAP(J[5], J[7], t); - CV_SWAP(J[10], J[12], t); CV_SWAP(J[11], J[15], t); CV_SWAP(J[14], J[16], t); - CV_SWAP(J[19], J[21], t); CV_SWAP(J[20], J[24], t); CV_SWAP(J[23], J[25], t); - } - - vth *= theta; - rx *= vth; ry *= vth; rz *= vth; - } - - if( depth == CV_32F ) - { - dst->data.fl[0] = (float)rx; - dst->data.fl[step] = (float)ry; - dst->data.fl[step*2] = (float)rz; - } - else - { - dst->data.db[0] = rx; - dst->data.db[step] = ry; - dst->data.db[step*2] = rz; - } - } - - if( jacobian ) - { - if( depth == CV_32F ) - { - if( jacobian->rows == matJ.rows ) - cvConvert( &matJ, jacobian ); - else - { - float Jf[3*9]; - CvMat _Jf = cvMat( matJ.rows, matJ.cols, CV_32FC1, Jf ); - cvConvert( &matJ, &_Jf ); - cvTranspose( &_Jf, jacobian ); - } - } - else if( jacobian->rows == matJ.rows ) - cvCopy( &matJ, jacobian ); - else - cvTranspose( &matJ, jacobian ); - } - - return 1; -} - - -static const char* cvDistCoeffErr = "Distortion coefficients must be 1x4, 4x1, 1x5, 5x1, 1x8 or 8x1 floating-point vector"; - -CV_IMPL void cvProjectPoints2( const CvMat* objectPoints, - const CvMat* r_vec, - const CvMat* t_vec, - const CvMat* A, - const CvMat* distCoeffs, - CvMat* imagePoints, CvMat* dpdr, - CvMat* dpdt, CvMat* dpdf, - CvMat* dpdc, CvMat* dpdk, - double aspectRatio ) -{ - Ptr matM, _m; - Ptr _dpdr, _dpdt, _dpdc, _dpdf, _dpdk; - - int i, j, count; - int calc_derivatives; - const CvPoint3D64f* M; - CvPoint2D64f* m; - double r[3], R[9], dRdr[27], t[3], a[9], k[8] = {0,0,0,0,0,0,0,0}, fx, fy, cx, cy; - CvMat _r, _t, _a = cvMat( 3, 3, CV_64F, a ), _k; - CvMat matR = cvMat( 3, 3, CV_64F, R ), _dRdr = cvMat( 3, 9, CV_64F, dRdr ); - double *dpdr_p = 0, *dpdt_p = 0, *dpdk_p = 0, *dpdf_p = 0, *dpdc_p = 0; - int dpdr_step = 0, dpdt_step = 0, dpdk_step = 0, dpdf_step = 0, dpdc_step = 0; - bool fixedAspectRatio = aspectRatio > FLT_EPSILON; - - if( !CV_IS_MAT(objectPoints) || !CV_IS_MAT(r_vec) || - !CV_IS_MAT(t_vec) || !CV_IS_MAT(A) || - /*!CV_IS_MAT(distCoeffs) ||*/ !CV_IS_MAT(imagePoints) ) - CV_Error( CV_StsBadArg, "One of required arguments is not a valid matrix" ); - - int total = objectPoints->rows * objectPoints->cols * CV_MAT_CN(objectPoints->type); - if(total % 3 != 0) - { - //we have stopped support of homogeneous coordinates because it cause ambiguity in interpretation of the input data - CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" ); - } - count = total / 3; - - if( CV_IS_CONT_MAT(objectPoints->type) && - (CV_MAT_DEPTH(objectPoints->type) == CV_32F || CV_MAT_DEPTH(objectPoints->type) == CV_64F)&& - ((objectPoints->rows == 1 && CV_MAT_CN(objectPoints->type) == 3) || - (objectPoints->rows == count && CV_MAT_CN(objectPoints->type)*objectPoints->cols == 3) || - (objectPoints->rows == 3 && CV_MAT_CN(objectPoints->type) == 1 && objectPoints->cols == count))) - { - matM = cvCreateMat( objectPoints->rows, objectPoints->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(objectPoints->type)) ); - cvConvert(objectPoints, matM); - } - else - { -// matM = cvCreateMat( 1, count, CV_64FC3 ); -// cvConvertPointsHomogeneous( objectPoints, matM ); - CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" ); - } - - if( CV_IS_CONT_MAT(imagePoints->type) && - (CV_MAT_DEPTH(imagePoints->type) == CV_32F || CV_MAT_DEPTH(imagePoints->type) == CV_64F) && - ((imagePoints->rows == 1 && CV_MAT_CN(imagePoints->type) == 2) || - (imagePoints->rows == count && CV_MAT_CN(imagePoints->type)*imagePoints->cols == 2) || - (imagePoints->rows == 2 && CV_MAT_CN(imagePoints->type) == 1 && imagePoints->cols == count))) - { - _m = cvCreateMat( imagePoints->rows, imagePoints->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(imagePoints->type)) ); - cvConvert(imagePoints, _m); - } - else - { -// _m = cvCreateMat( 1, count, CV_64FC2 ); - CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" ); - } - - M = (CvPoint3D64f*)matM->data.db; - m = (CvPoint2D64f*)_m->data.db; - - if( (CV_MAT_DEPTH(r_vec->type) != CV_64F && CV_MAT_DEPTH(r_vec->type) != CV_32F) || - (((r_vec->rows != 1 && r_vec->cols != 1) || - r_vec->rows*r_vec->cols*CV_MAT_CN(r_vec->type) != 3) && - ((r_vec->rows != 3 && r_vec->cols != 3) || CV_MAT_CN(r_vec->type) != 1))) - CV_Error( CV_StsBadArg, "Rotation must be represented by 1x3 or 3x1 " - "floating-point rotation vector, or 3x3 rotation matrix" ); - - if( r_vec->rows == 3 && r_vec->cols == 3 ) - { - _r = cvMat( 3, 1, CV_64FC1, r ); - cvRodrigues2( r_vec, &_r ); - cvRodrigues2( &_r, &matR, &_dRdr ); - cvCopy( r_vec, &matR ); - } - else - { - _r = cvMat( r_vec->rows, r_vec->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(r_vec->type)), r ); - cvConvert( r_vec, &_r ); - cvRodrigues2( &_r, &matR, &_dRdr ); - } - - if( (CV_MAT_DEPTH(t_vec->type) != CV_64F && CV_MAT_DEPTH(t_vec->type) != CV_32F) || - (t_vec->rows != 1 && t_vec->cols != 1) || - t_vec->rows*t_vec->cols*CV_MAT_CN(t_vec->type) != 3 ) - CV_Error( CV_StsBadArg, - "Translation vector must be 1x3 or 3x1 floating-point vector" ); - - _t = cvMat( t_vec->rows, t_vec->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(t_vec->type)), t ); - cvConvert( t_vec, &_t ); - - if( (CV_MAT_TYPE(A->type) != CV_64FC1 && CV_MAT_TYPE(A->type) != CV_32FC1) || - A->rows != 3 || A->cols != 3 ) - CV_Error( CV_StsBadArg, "Instrinsic parameters must be 3x3 floating-point matrix" ); - - cvConvert( A, &_a ); - fx = a[0]; fy = a[4]; - cx = a[2]; cy = a[5]; - - if( fixedAspectRatio ) - fx = fy*aspectRatio; - - if( distCoeffs ) - { - if( !CV_IS_MAT(distCoeffs) || - (CV_MAT_DEPTH(distCoeffs->type) != CV_64F && - CV_MAT_DEPTH(distCoeffs->type) != CV_32F) || - (distCoeffs->rows != 1 && distCoeffs->cols != 1) || - (distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 4 && - distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 5 && - distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 8) ) - CV_Error( CV_StsBadArg, cvDistCoeffErr ); - - _k = cvMat( distCoeffs->rows, distCoeffs->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), k ); - cvConvert( distCoeffs, &_k ); - } - - if( dpdr ) - { - if( !CV_IS_MAT(dpdr) || - (CV_MAT_TYPE(dpdr->type) != CV_32FC1 && - CV_MAT_TYPE(dpdr->type) != CV_64FC1) || - dpdr->rows != count*2 || dpdr->cols != 3 ) - CV_Error( CV_StsBadArg, "dp/drot must be 2Nx3 floating-point matrix" ); - - if( CV_MAT_TYPE(dpdr->type) == CV_64FC1 ) - { - _dpdr = cvCloneMat(dpdr); - } - else - _dpdr = cvCreateMat( 2*count, 3, CV_64FC1 ); - dpdr_p = _dpdr->data.db; - dpdr_step = _dpdr->step/sizeof(dpdr_p[0]); - } - - if( dpdt ) - { - if( !CV_IS_MAT(dpdt) || - (CV_MAT_TYPE(dpdt->type) != CV_32FC1 && - CV_MAT_TYPE(dpdt->type) != CV_64FC1) || - dpdt->rows != count*2 || dpdt->cols != 3 ) - CV_Error( CV_StsBadArg, "dp/dT must be 2Nx3 floating-point matrix" ); - - if( CV_MAT_TYPE(dpdt->type) == CV_64FC1 ) - { - _dpdt = cvCloneMat(dpdt); - } - else - _dpdt = cvCreateMat( 2*count, 3, CV_64FC1 ); - dpdt_p = _dpdt->data.db; - dpdt_step = _dpdt->step/sizeof(dpdt_p[0]); - } - - if( dpdf ) - { - if( !CV_IS_MAT(dpdf) || - (CV_MAT_TYPE(dpdf->type) != CV_32FC1 && CV_MAT_TYPE(dpdf->type) != CV_64FC1) || - dpdf->rows != count*2 || dpdf->cols != 2 ) - CV_Error( CV_StsBadArg, "dp/df must be 2Nx2 floating-point matrix" ); - - if( CV_MAT_TYPE(dpdf->type) == CV_64FC1 ) - { - _dpdf = cvCloneMat(dpdf); - } - else - _dpdf = cvCreateMat( 2*count, 2, CV_64FC1 ); - dpdf_p = _dpdf->data.db; - dpdf_step = _dpdf->step/sizeof(dpdf_p[0]); - } - - if( dpdc ) - { - if( !CV_IS_MAT(dpdc) || - (CV_MAT_TYPE(dpdc->type) != CV_32FC1 && CV_MAT_TYPE(dpdc->type) != CV_64FC1) || - dpdc->rows != count*2 || dpdc->cols != 2 ) - CV_Error( CV_StsBadArg, "dp/dc must be 2Nx2 floating-point matrix" ); - - if( CV_MAT_TYPE(dpdc->type) == CV_64FC1 ) - { - _dpdc = cvCloneMat(dpdc); - } - else - _dpdc = cvCreateMat( 2*count, 2, CV_64FC1 ); - dpdc_p = _dpdc->data.db; - dpdc_step = _dpdc->step/sizeof(dpdc_p[0]); - } - - if( dpdk ) - { - if( !CV_IS_MAT(dpdk) || - (CV_MAT_TYPE(dpdk->type) != CV_32FC1 && CV_MAT_TYPE(dpdk->type) != CV_64FC1) || - dpdk->rows != count*2 || (dpdk->cols != 8 && dpdk->cols != 5 && dpdk->cols != 4 && dpdk->cols != 2) ) - CV_Error( CV_StsBadArg, "dp/df must be 2Nx8, 2Nx5, 2Nx4 or 2Nx2 floating-point matrix" ); - - if( !distCoeffs ) - CV_Error( CV_StsNullPtr, "distCoeffs is NULL while dpdk is not" ); - - if( CV_MAT_TYPE(dpdk->type) == CV_64FC1 ) - { - _dpdk = cvCloneMat(dpdk); - } - else - _dpdk = cvCreateMat( dpdk->rows, dpdk->cols, CV_64FC1 ); - dpdk_p = _dpdk->data.db; - dpdk_step = _dpdk->step/sizeof(dpdk_p[0]); - } - - calc_derivatives = dpdr || dpdt || dpdf || dpdc || dpdk; - - for( i = 0; i < count; i++ ) - { - double X = M[i].x, Y = M[i].y, Z = M[i].z; - double x = R[0]*X + R[1]*Y + R[2]*Z + t[0]; - double y = R[3]*X + R[4]*Y + R[5]*Z + t[1]; - double z = R[6]*X + R[7]*Y + R[8]*Z + t[2]; - double r2, r4, r6, a1, a2, a3, cdist, icdist2; - double xd, yd; - - z = z ? 1./z : 1; - x *= z; y *= z; - - r2 = x*x + y*y; - r4 = r2*r2; - r6 = r4*r2; - a1 = 2*x*y; - a2 = r2 + 2*x*x; - a3 = r2 + 2*y*y; - cdist = 1 + k[0]*r2 + k[1]*r4 + k[4]*r6; - icdist2 = 1./(1 + k[5]*r2 + k[6]*r4 + k[7]*r6); - xd = x*cdist*icdist2 + k[2]*a1 + k[3]*a2; - yd = y*cdist*icdist2 + k[2]*a3 + k[3]*a1; - - m[i].x = xd*fx + cx; - m[i].y = yd*fy + cy; - - if( calc_derivatives ) - { - if( dpdc_p ) - { - dpdc_p[0] = 1; dpdc_p[1] = 0; - dpdc_p[dpdc_step] = 0; - dpdc_p[dpdc_step+1] = 1; - dpdc_p += dpdc_step*2; - } - - if( dpdf_p ) - { - if( fixedAspectRatio ) - { - dpdf_p[0] = 0; dpdf_p[1] = xd*aspectRatio; - dpdf_p[dpdf_step] = 0; - dpdf_p[dpdf_step+1] = yd; - } - else - { - dpdf_p[0] = xd; dpdf_p[1] = 0; - dpdf_p[dpdf_step] = 0; - dpdf_p[dpdf_step+1] = yd; - } - dpdf_p += dpdf_step*2; - } - - if( dpdk_p ) - { - dpdk_p[0] = fx*x*icdist2*r2; - dpdk_p[1] = fx*x*icdist2*r4; - dpdk_p[dpdk_step] = fy*y*icdist2*r2; - dpdk_p[dpdk_step+1] = fy*y*icdist2*r4; - if( _dpdk->cols > 2 ) - { - dpdk_p[2] = fx*a1; - dpdk_p[3] = fx*a2; - dpdk_p[dpdk_step+2] = fy*a3; - dpdk_p[dpdk_step+3] = fy*a1; - if( _dpdk->cols > 4 ) - { - dpdk_p[4] = fx*x*icdist2*r6; - dpdk_p[dpdk_step+4] = fy*y*icdist2*r6; - - if( _dpdk->cols > 5 ) - { - dpdk_p[5] = fx*x*cdist*(-icdist2)*icdist2*r2; - dpdk_p[dpdk_step+5] = fy*y*cdist*(-icdist2)*icdist2*r2; - dpdk_p[6] = fx*x*icdist2*cdist*(-icdist2)*icdist2*r4; - dpdk_p[dpdk_step+6] = fy*y*cdist*(-icdist2)*icdist2*r4; - dpdk_p[7] = fx*x*icdist2*cdist*(-icdist2)*icdist2*r6; - dpdk_p[dpdk_step+7] = fy*y*cdist*(-icdist2)*icdist2*r6; - } - } - } - dpdk_p += dpdk_step*2; - } - - if( dpdt_p ) - { - double dxdt[] = { z, 0, -x*z }, dydt[] = { 0, z, -y*z }; - for( j = 0; j < 3; j++ ) - { - double dr2dt = 2*x*dxdt[j] + 2*y*dydt[j]; - double dcdist_dt = k[0]*dr2dt + 2*k[1]*r2*dr2dt + 3*k[4]*r4*dr2dt; - double dicdist2_dt = -icdist2*icdist2*(k[5]*dr2dt + 2*k[6]*r2*dr2dt + 3*k[7]*r4*dr2dt); - double da1dt = 2*(x*dydt[j] + y*dxdt[j]); - double dmxdt = fx*(dxdt[j]*cdist*icdist2 + x*dcdist_dt*icdist2 + x*cdist*dicdist2_dt + - k[2]*da1dt + k[3]*(dr2dt + 2*x*dxdt[j])); - double dmydt = fy*(dydt[j]*cdist*icdist2 + y*dcdist_dt*icdist2 + y*cdist*dicdist2_dt + - k[2]*(dr2dt + 2*y*dydt[j]) + k[3]*da1dt); - dpdt_p[j] = dmxdt; - dpdt_p[dpdt_step+j] = dmydt; - } - dpdt_p += dpdt_step*2; - } - - if( dpdr_p ) - { - double dx0dr[] = - { - X*dRdr[0] + Y*dRdr[1] + Z*dRdr[2], - X*dRdr[9] + Y*dRdr[10] + Z*dRdr[11], - X*dRdr[18] + Y*dRdr[19] + Z*dRdr[20] - }; - double dy0dr[] = - { - X*dRdr[3] + Y*dRdr[4] + Z*dRdr[5], - X*dRdr[12] + Y*dRdr[13] + Z*dRdr[14], - X*dRdr[21] + Y*dRdr[22] + Z*dRdr[23] - }; - double dz0dr[] = - { - X*dRdr[6] + Y*dRdr[7] + Z*dRdr[8], - X*dRdr[15] + Y*dRdr[16] + Z*dRdr[17], - X*dRdr[24] + Y*dRdr[25] + Z*dRdr[26] - }; - for( j = 0; j < 3; j++ ) - { - double dxdr = z*(dx0dr[j] - x*dz0dr[j]); - double dydr = z*(dy0dr[j] - y*dz0dr[j]); - double dr2dr = 2*x*dxdr + 2*y*dydr; - double dcdist_dr = k[0]*dr2dr + 2*k[1]*r2*dr2dr + 3*k[4]*r4*dr2dr; - double dicdist2_dr = -icdist2*icdist2*(k[5]*dr2dr + 2*k[6]*r2*dr2dr + 3*k[7]*r4*dr2dr); - double da1dr = 2*(x*dydr + y*dxdr); - double dmxdr = fx*(dxdr*cdist*icdist2 + x*dcdist_dr*icdist2 + x*cdist*dicdist2_dr + - k[2]*da1dr + k[3]*(dr2dr + 2*x*dxdr)); - double dmydr = fy*(dydr*cdist*icdist2 + y*dcdist_dr*icdist2 + y*cdist*dicdist2_dr + - k[2]*(dr2dr + 2*y*dydr) + k[3]*da1dr); - dpdr_p[j] = dmxdr; - dpdr_p[dpdr_step+j] = dmydr; - } - dpdr_p += dpdr_step*2; - } - } - } - - if( _m != imagePoints ) - cvConvert( _m, imagePoints ); - - if( _dpdr != dpdr ) - cvConvert( _dpdr, dpdr ); - - if( _dpdt != dpdt ) - cvConvert( _dpdt, dpdt ); - - if( _dpdf != dpdf ) - cvConvert( _dpdf, dpdf ); - - if( _dpdc != dpdc ) - cvConvert( _dpdc, dpdc ); - - if( _dpdk != dpdk ) - cvConvert( _dpdk, dpdk ); -} - - -CV_IMPL void cvFindExtrinsicCameraParams2( const CvMat* objectPoints, - const CvMat* imagePoints, const CvMat* A, - const CvMat* distCoeffs, CvMat* rvec, CvMat* tvec, - int useExtrinsicGuess ) -{ - const int max_iter = 20; - Ptr matM, _Mxy, _m, _mn, matL; - - int i, count; - double a[9], ar[9]={1,0,0,0,1,0,0,0,1}, R[9]; - double MM[9], U[9], V[9], W[3]; - CvScalar Mc; - double param[6]; - CvMat matA = cvMat( 3, 3, CV_64F, a ); - CvMat _Ar = cvMat( 3, 3, CV_64F, ar ); - CvMat matR = cvMat( 3, 3, CV_64F, R ); - CvMat _r = cvMat( 3, 1, CV_64F, param ); - CvMat _t = cvMat( 3, 1, CV_64F, param + 3 ); - CvMat _Mc = cvMat( 1, 3, CV_64F, Mc.val ); - CvMat _MM = cvMat( 3, 3, CV_64F, MM ); - CvMat matU = cvMat( 3, 3, CV_64F, U ); - CvMat matV = cvMat( 3, 3, CV_64F, V ); - CvMat matW = cvMat( 3, 1, CV_64F, W ); - CvMat _param = cvMat( 6, 1, CV_64F, param ); - CvMat _dpdr, _dpdt; - - CV_Assert( CV_IS_MAT(objectPoints) && CV_IS_MAT(imagePoints) && - CV_IS_MAT(A) && CV_IS_MAT(rvec) && CV_IS_MAT(tvec) ); - - count = MAX(objectPoints->cols, objectPoints->rows); - matM = cvCreateMat( 1, count, CV_64FC3 ); - _m = cvCreateMat( 1, count, CV_64FC2 ); - - cvConvertPointsHomogeneous( objectPoints, matM ); - cvConvertPointsHomogeneous( imagePoints, _m ); - cvConvert( A, &matA ); - - CV_Assert( (CV_MAT_DEPTH(rvec->type) == CV_64F || CV_MAT_DEPTH(rvec->type) == CV_32F) && - (rvec->rows == 1 || rvec->cols == 1) && rvec->rows*rvec->cols*CV_MAT_CN(rvec->type) == 3 ); - - CV_Assert( (CV_MAT_DEPTH(tvec->type) == CV_64F || CV_MAT_DEPTH(tvec->type) == CV_32F) && - (tvec->rows == 1 || tvec->cols == 1) && tvec->rows*tvec->cols*CV_MAT_CN(tvec->type) == 3 ); - - _mn = cvCreateMat( 1, count, CV_64FC2 ); - _Mxy = cvCreateMat( 1, count, CV_64FC2 ); - - // normalize image points - // (unapply the intrinsic matrix transformation and distortion) - cvUndistortPoints( _m, _mn, &matA, distCoeffs, 0, &_Ar ); - - if( useExtrinsicGuess ) - { - CvMat _r_temp = cvMat(rvec->rows, rvec->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(rvec->type)), param ); - CvMat _t_temp = cvMat(tvec->rows, tvec->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(tvec->type)), param + 3); - cvConvert( rvec, &_r_temp ); - cvConvert( tvec, &_t_temp ); - } - else - { - Mc = cvAvg(matM); - cvReshape( matM, matM, 1, count ); - cvMulTransposed( matM, &_MM, 1, &_Mc ); - cvSVD( &_MM, &matW, 0, &matV, CV_SVD_MODIFY_A + CV_SVD_V_T ); - - // initialize extrinsic parameters - if( W[2]/W[1] < 1e-3 || count < 4 ) - { - // a planar structure case (all M's lie in the same plane) - double tt[3], h[9], h1_norm, h2_norm; - CvMat* R_transform = &matV; - CvMat T_transform = cvMat( 3, 1, CV_64F, tt ); - CvMat matH = cvMat( 3, 3, CV_64F, h ); - CvMat _h1, _h2, _h3; - - if( V[2]*V[2] + V[5]*V[5] < 1e-10 ) - cvSetIdentity( R_transform ); - - if( cvDet(R_transform) < 0 ) - cvScale( R_transform, R_transform, -1 ); - - cvGEMM( R_transform, &_Mc, -1, 0, 0, &T_transform, CV_GEMM_B_T ); - - for( i = 0; i < count; i++ ) - { - const double* Rp = R_transform->data.db; - const double* Tp = T_transform.data.db; - const double* src = matM->data.db + i*3; - double* dst = _Mxy->data.db + i*2; - - dst[0] = Rp[0]*src[0] + Rp[1]*src[1] + Rp[2]*src[2] + Tp[0]; - dst[1] = Rp[3]*src[0] + Rp[4]*src[1] + Rp[5]*src[2] + Tp[1]; - } - - cvFindHomography( _Mxy, _mn, &matH ); - - if( cvCheckArr(&matH, CV_CHECK_QUIET) ) - { - cvGetCol( &matH, &_h1, 0 ); - _h2 = _h1; _h2.data.db++; - _h3 = _h2; _h3.data.db++; - h1_norm = sqrt(h[0]*h[0] + h[3]*h[3] + h[6]*h[6]); - h2_norm = sqrt(h[1]*h[1] + h[4]*h[4] + h[7]*h[7]); - - cvScale( &_h1, &_h1, 1./MAX(h1_norm, DBL_EPSILON) ); - cvScale( &_h2, &_h2, 1./MAX(h2_norm, DBL_EPSILON) ); - cvScale( &_h3, &_t, 2./MAX(h1_norm + h2_norm, DBL_EPSILON)); - cvCrossProduct( &_h1, &_h2, &_h3 ); - - cvRodrigues2( &matH, &_r ); - cvRodrigues2( &_r, &matH ); - cvMatMulAdd( &matH, &T_transform, &_t, &_t ); - cvMatMul( &matH, R_transform, &matR ); - } - else - { - cvSetIdentity( &matR ); - cvZero( &_t ); - } - - cvRodrigues2( &matR, &_r ); - } - else - { - // non-planar structure. Use DLT method - double* L; - double LL[12*12], LW[12], LV[12*12], sc; - CvMat _LL = cvMat( 12, 12, CV_64F, LL ); - CvMat _LW = cvMat( 12, 1, CV_64F, LW ); - CvMat _LV = cvMat( 12, 12, CV_64F, LV ); - CvMat _RRt, _RR, _tt; - CvPoint3D64f* M = (CvPoint3D64f*)matM->data.db; - CvPoint2D64f* mn = (CvPoint2D64f*)_mn->data.db; - - matL = cvCreateMat( 2*count, 12, CV_64F ); - L = matL->data.db; - - for( i = 0; i < count; i++, L += 24 ) - { - double x = -mn[i].x, y = -mn[i].y; - L[0] = L[16] = M[i].x; - L[1] = L[17] = M[i].y; - L[2] = L[18] = M[i].z; - L[3] = L[19] = 1.; - L[4] = L[5] = L[6] = L[7] = 0.; - L[12] = L[13] = L[14] = L[15] = 0.; - L[8] = x*M[i].x; - L[9] = x*M[i].y; - L[10] = x*M[i].z; - L[11] = x; - L[20] = y*M[i].x; - L[21] = y*M[i].y; - L[22] = y*M[i].z; - L[23] = y; - } - - cvMulTransposed( matL, &_LL, 1 ); - cvSVD( &_LL, &_LW, 0, &_LV, CV_SVD_MODIFY_A + CV_SVD_V_T ); - _RRt = cvMat( 3, 4, CV_64F, LV + 11*12 ); - cvGetCols( &_RRt, &_RR, 0, 3 ); - cvGetCol( &_RRt, &_tt, 3 ); - if( cvDet(&_RR) < 0 ) - cvScale( &_RRt, &_RRt, -1 ); - sc = cvNorm(&_RR); - cvSVD( &_RR, &matW, &matU, &matV, CV_SVD_MODIFY_A + CV_SVD_U_T + CV_SVD_V_T ); - cvGEMM( &matU, &matV, 1, 0, 0, &matR, CV_GEMM_A_T ); - cvScale( &_tt, &_t, cvNorm(&matR)/sc ); - cvRodrigues2( &matR, &_r ); - } - } - - cvReshape( matM, matM, 3, 1 ); - cvReshape( _mn, _mn, 2, 1 ); - - // refine extrinsic parameters using iterative algorithm - CvLevMarq solver( 6, count*2, cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,max_iter,FLT_EPSILON), true); - cvCopy( &_param, solver.param ); - - for(;;) - { - CvMat *matJ = 0, *_err = 0; - const CvMat *__param = 0; - bool proceed = solver.update( __param, matJ, _err ); - cvCopy( __param, &_param ); - if( !proceed || !_err ) - break; - cvReshape( _err, _err, 2, 1 ); - if( matJ ) - { - cvGetCols( matJ, &_dpdr, 0, 3 ); - cvGetCols( matJ, &_dpdt, 3, 6 ); - cvProjectPoints2( matM, &_r, &_t, &matA, distCoeffs, - _err, &_dpdr, &_dpdt, 0, 0, 0 ); - } - else - { - cvProjectPoints2( matM, &_r, &_t, &matA, distCoeffs, - _err, 0, 0, 0, 0, 0 ); - } - cvSub(_err, _m, _err); - cvReshape( _err, _err, 1, 2*count ); - } - cvCopy( solver.param, &_param ); - - _r = cvMat( rvec->rows, rvec->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(rvec->type)), param ); - _t = cvMat( tvec->rows, tvec->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(tvec->type)), param + 3 ); - - cvConvert( &_r, rvec ); - cvConvert( &_t, tvec ); -} - - -CV_IMPL void cvInitIntrinsicParams2D( const CvMat* objectPoints, - const CvMat* imagePoints, const CvMat* npoints, - CvSize imageSize, CvMat* cameraMatrix, - double aspectRatio ) -{ - Ptr matA, _b, _allH; - - int i, j, pos, nimages, ni = 0; - double a[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; - double H[9], f[2]; - CvMat _a = cvMat( 3, 3, CV_64F, a ); - CvMat matH = cvMat( 3, 3, CV_64F, H ); - CvMat _f = cvMat( 2, 1, CV_64F, f ); - - assert( CV_MAT_TYPE(npoints->type) == CV_32SC1 && - CV_IS_MAT_CONT(npoints->type) ); - nimages = npoints->rows + npoints->cols - 1; - - if( (CV_MAT_TYPE(objectPoints->type) != CV_32FC3 && - CV_MAT_TYPE(objectPoints->type) != CV_64FC3) || - (CV_MAT_TYPE(imagePoints->type) != CV_32FC2 && - CV_MAT_TYPE(imagePoints->type) != CV_64FC2) ) - CV_Error( CV_StsUnsupportedFormat, "Both object points and image points must be 2D" ); - - if( objectPoints->rows != 1 || imagePoints->rows != 1 ) - CV_Error( CV_StsBadSize, "object points and image points must be a single-row matrices" ); - - matA = cvCreateMat( 2*nimages, 2, CV_64F ); - _b = cvCreateMat( 2*nimages, 1, CV_64F ); - a[2] = (!imageSize.width) ? 0.5 : (imageSize.width - 1)*0.5; - a[5] = (!imageSize.height) ? 0.5 : (imageSize.height - 1)*0.5; - _allH = cvCreateMat( nimages, 9, CV_64F ); - - // extract vanishing points in order to obtain initial value for the focal length - for( i = 0, pos = 0; i < nimages; i++, pos += ni ) - { - double* Ap = matA->data.db + i*4; - double* bp = _b->data.db + i*2; - ni = npoints->data.i[i]; - double h[3], v[3], d1[3], d2[3]; - double n[4] = {0,0,0,0}; - CvMat _m, matM; - cvGetCols( objectPoints, &matM, pos, pos + ni ); - cvGetCols( imagePoints, &_m, pos, pos + ni ); - - cvFindHomography( &matM, &_m, &matH ); - memcpy( _allH->data.db + i*9, H, sizeof(H) ); - - H[0] -= H[6]*a[2]; H[1] -= H[7]*a[2]; H[2] -= H[8]*a[2]; - H[3] -= H[6]*a[5]; H[4] -= H[7]*a[5]; H[5] -= H[8]*a[5]; - - for( j = 0; j < 3; j++ ) - { - double t0 = H[j*3], t1 = H[j*3+1]; - h[j] = t0; v[j] = t1; - d1[j] = (t0 + t1)*0.5; - d2[j] = (t0 - t1)*0.5; - n[0] += t0*t0; n[1] += t1*t1; - n[2] += d1[j]*d1[j]; n[3] += d2[j]*d2[j]; - } - - for( j = 0; j < 4; j++ ) - n[j] = 1./sqrt(n[j]); - - for( j = 0; j < 3; j++ ) - { - h[j] *= n[0]; v[j] *= n[1]; - d1[j] *= n[2]; d2[j] *= n[3]; - } - - Ap[0] = h[0]*v[0]; Ap[1] = h[1]*v[1]; - Ap[2] = d1[0]*d2[0]; Ap[3] = d1[1]*d2[1]; - bp[0] = -h[2]*v[2]; bp[1] = -d1[2]*d2[2]; - } - - cvSolve( matA, _b, &_f, CV_NORMAL + CV_SVD ); - a[0] = sqrt(fabs(1./f[0])); - a[4] = sqrt(fabs(1./f[1])); - if( aspectRatio != 0 ) - { - double tf = (a[0] + a[4])/(aspectRatio + 1.); - a[0] = aspectRatio*tf; - a[4] = tf; - } - - cvConvert( &_a, cameraMatrix ); -} - - -/* finds intrinsic and extrinsic camera parameters - from a few views of known calibration pattern */ -CV_IMPL double cvCalibrateCamera2( const CvMat* objectPoints, - const CvMat* imagePoints, const CvMat* npoints, - CvSize imageSize, CvMat* cameraMatrix, CvMat* distCoeffs, - CvMat* rvecs, CvMat* tvecs, int flags, CvTermCriteria termCrit ) -{ - const int NINTRINSIC = 12; - Ptr matM, _m, _Ji, _Je, _err; - CvLevMarq solver; - double reprojErr = 0; - - double A[9], k[8] = {0,0,0,0,0,0,0,0}; - CvMat matA = cvMat(3, 3, CV_64F, A), _k; - int i, nimages, maxPoints = 0, ni = 0, pos, total = 0, nparams, npstep, cn; - double aspectRatio = 0.; - - // 0. check the parameters & allocate buffers - if( !CV_IS_MAT(objectPoints) || !CV_IS_MAT(imagePoints) || - !CV_IS_MAT(npoints) || !CV_IS_MAT(cameraMatrix) || !CV_IS_MAT(distCoeffs) ) - CV_Error( CV_StsBadArg, "One of required vector arguments is not a valid matrix" ); - - if( imageSize.width <= 0 || imageSize.height <= 0 ) - CV_Error( CV_StsOutOfRange, "image width and height must be positive" ); - - if( CV_MAT_TYPE(npoints->type) != CV_32SC1 || - (npoints->rows != 1 && npoints->cols != 1) ) - CV_Error( CV_StsUnsupportedFormat, - "the array of point counters must be 1-dimensional integer vector" ); - - nimages = npoints->rows*npoints->cols; - npstep = npoints->rows == 1 ? 1 : npoints->step/CV_ELEM_SIZE(npoints->type); - - if( rvecs ) - { - cn = CV_MAT_CN(rvecs->type); - if( !CV_IS_MAT(rvecs) || - (CV_MAT_DEPTH(rvecs->type) != CV_32F && CV_MAT_DEPTH(rvecs->type) != CV_64F) || - ((rvecs->rows != nimages || (rvecs->cols*cn != 3 && rvecs->cols*cn != 9)) && - (rvecs->rows != 1 || rvecs->cols != nimages || cn != 3)) ) - CV_Error( CV_StsBadArg, "the output array of rotation vectors must be 3-channel " - "1xn or nx1 array or 1-channel nx3 or nx9 array, where n is the number of views" ); - } - - if( tvecs ) - { - cn = CV_MAT_CN(tvecs->type); - if( !CV_IS_MAT(tvecs) || - (CV_MAT_DEPTH(tvecs->type) != CV_32F && CV_MAT_DEPTH(tvecs->type) != CV_64F) || - ((tvecs->rows != nimages || tvecs->cols*cn != 3) && - (tvecs->rows != 1 || tvecs->cols != nimages || cn != 3)) ) - CV_Error( CV_StsBadArg, "the output array of translation vectors must be 3-channel " - "1xn or nx1 array or 1-channel nx3 array, where n is the number of views" ); - } - - if( (CV_MAT_TYPE(cameraMatrix->type) != CV_32FC1 && - CV_MAT_TYPE(cameraMatrix->type) != CV_64FC1) || - cameraMatrix->rows != 3 || cameraMatrix->cols != 3 ) - CV_Error( CV_StsBadArg, - "Intrinsic parameters must be 3x3 floating-point matrix" ); - - if( (CV_MAT_TYPE(distCoeffs->type) != CV_32FC1 && - CV_MAT_TYPE(distCoeffs->type) != CV_64FC1) || - (distCoeffs->cols != 1 && distCoeffs->rows != 1) || - (distCoeffs->cols*distCoeffs->rows != 4 && - distCoeffs->cols*distCoeffs->rows != 5 && - distCoeffs->cols*distCoeffs->rows != 8) ) - CV_Error( CV_StsBadArg, cvDistCoeffErr ); - - for( i = 0; i < nimages; i++ ) - { - ni = npoints->data.i[i*npstep]; - if( ni < 4 ) - { - char buf[100]; - sprintf( buf, "The number of points in the view #%d is < 4", i ); - CV_Error( CV_StsOutOfRange, buf ); - } - maxPoints = MAX( maxPoints, ni ); - total += ni; - } - - matM = cvCreateMat( 1, total, CV_64FC3 ); - _m = cvCreateMat( 1, total, CV_64FC2 ); - - cvConvertPointsHomogeneous( objectPoints, matM ); - cvConvertPointsHomogeneous( imagePoints, _m ); - - nparams = NINTRINSIC + nimages*6; - _Ji = cvCreateMat( maxPoints*2, NINTRINSIC, CV_64FC1 ); - _Je = cvCreateMat( maxPoints*2, 6, CV_64FC1 ); - _err = cvCreateMat( maxPoints*2, 1, CV_64FC1 ); - cvZero( _Ji ); - - _k = cvMat( distCoeffs->rows, distCoeffs->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), k); - if( distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) < 8 ) - { - if( distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) < 5 ) - flags |= CV_CALIB_FIX_K3; - flags |= CV_CALIB_FIX_K4 | CV_CALIB_FIX_K5 | CV_CALIB_FIX_K6; - } - const double minValidAspectRatio = 0.01; - const double maxValidAspectRatio = 100.0; - - // 1. initialize intrinsic parameters & LM solver - if( flags & CV_CALIB_USE_INTRINSIC_GUESS ) - { - cvConvert( cameraMatrix, &matA ); - if( A[0] <= 0 || A[4] <= 0 ) - CV_Error( CV_StsOutOfRange, "Focal length (fx and fy) must be positive" ); - if( A[2] < 0 || A[2] >= imageSize.width || - A[5] < 0 || A[5] >= imageSize.height ) - CV_Error( CV_StsOutOfRange, "Principal point must be within the image" ); - if( fabs(A[1]) > 1e-5 ) - CV_Error( CV_StsOutOfRange, "Non-zero skew is not supported by the function" ); - if( fabs(A[3]) > 1e-5 || fabs(A[6]) > 1e-5 || - fabs(A[7]) > 1e-5 || fabs(A[8]-1) > 1e-5 ) - CV_Error( CV_StsOutOfRange, - "The intrinsic matrix must have [fx 0 cx; 0 fy cy; 0 0 1] shape" ); - A[1] = A[3] = A[6] = A[7] = 0.; - A[8] = 1.; - - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - { - aspectRatio = A[0]/A[4]; - - if( aspectRatio < minValidAspectRatio || aspectRatio > maxValidAspectRatio ) - CV_Error( CV_StsOutOfRange, - "The specified aspect ratio (= cameraMatrix[0][0] / cameraMatrix[1][1]) is incorrect" ); - } - cvConvert( distCoeffs, &_k ); - } - else - { - CvScalar mean, sdv; - cvAvgSdv( matM, &mean, &sdv ); - if( fabs(mean.val[2]) > 1e-5 || fabs(sdv.val[2]) > 1e-5 ) - CV_Error( CV_StsBadArg, - "For non-planar calibration rigs the initial intrinsic matrix must be specified" ); - for( i = 0; i < total; i++ ) - ((CvPoint3D64f*)matM->data.db)[i].z = 0.; - - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - { - aspectRatio = cvmGet(cameraMatrix,0,0); - aspectRatio /= cvmGet(cameraMatrix,1,1); - if( aspectRatio < minValidAspectRatio || aspectRatio > maxValidAspectRatio ) - CV_Error( CV_StsOutOfRange, - "The specified aspect ratio (= cameraMatrix[0][0] / cameraMatrix[1][1]) is incorrect" ); - } - cvInitIntrinsicParams2D( matM, _m, npoints, imageSize, &matA, aspectRatio ); - } - - solver.init( nparams, 0, termCrit ); - - { - double* param = solver.param->data.db; - uchar* mask = solver.mask->data.ptr; - - param[0] = A[0]; param[1] = A[4]; param[2] = A[2]; param[3] = A[5]; - param[4] = k[0]; param[5] = k[1]; param[6] = k[2]; param[7] = k[3]; - param[8] = k[4]; param[9] = k[5]; param[10] = k[6]; param[11] = k[7]; - - if( flags & CV_CALIB_FIX_FOCAL_LENGTH ) - mask[0] = mask[1] = 0; - if( flags & CV_CALIB_FIX_PRINCIPAL_POINT ) - mask[2] = mask[3] = 0; - if( flags & CV_CALIB_ZERO_TANGENT_DIST ) - { - param[6] = param[7] = 0; - mask[6] = mask[7] = 0; - } - if( !(flags & CV_CALIB_RATIONAL_MODEL) ) - flags |= CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 + CV_CALIB_FIX_K6; - if( flags & CV_CALIB_FIX_K1 ) - mask[4] = 0; - if( flags & CV_CALIB_FIX_K2 ) - mask[5] = 0; - if( flags & CV_CALIB_FIX_K3 ) - mask[8] = 0; - if( flags & CV_CALIB_FIX_K4 ) - mask[9] = 0; - if( flags & CV_CALIB_FIX_K5 ) - mask[10] = 0; - if( flags & CV_CALIB_FIX_K6 ) - mask[11] = 0; - } - - // 2. initialize extrinsic parameters - for( i = 0, pos = 0; i < nimages; i++, pos += ni ) - { - CvMat _Mi, _mi, _ri, _ti; - ni = npoints->data.i[i*npstep]; - - cvGetRows( solver.param, &_ri, NINTRINSIC + i*6, NINTRINSIC + i*6 + 3 ); - cvGetRows( solver.param, &_ti, NINTRINSIC + i*6 + 3, NINTRINSIC + i*6 + 6 ); - - cvGetCols( matM, &_Mi, pos, pos + ni ); - cvGetCols( _m, &_mi, pos, pos + ni ); - - cvFindExtrinsicCameraParams2( &_Mi, &_mi, &matA, &_k, &_ri, &_ti ); - } - - // 3. run the optimization - for(;;) - { - const CvMat* _param = 0; - CvMat *_JtJ = 0, *_JtErr = 0; - double* _errNorm = 0; - bool proceed = solver.updateAlt( _param, _JtJ, _JtErr, _errNorm ); - double *param = solver.param->data.db, *pparam = solver.prevParam->data.db; - - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - { - param[0] = param[1]*aspectRatio; - pparam[0] = pparam[1]*aspectRatio; - } - - A[0] = param[0]; A[4] = param[1]; A[2] = param[2]; A[5] = param[3]; - k[0] = param[4]; k[1] = param[5]; k[2] = param[6]; k[3] = param[7]; - k[4] = param[8]; k[5] = param[9]; k[6] = param[10]; k[7] = param[11]; - - if( !proceed ) - break; - - reprojErr = 0; - - for( i = 0, pos = 0; i < nimages; i++, pos += ni ) - { - CvMat _Mi, _mi, _ri, _ti, _dpdr, _dpdt, _dpdf, _dpdc, _dpdk, _mp, _part; - ni = npoints->data.i[i*npstep]; - - cvGetRows( solver.param, &_ri, NINTRINSIC + i*6, NINTRINSIC + i*6 + 3 ); - cvGetRows( solver.param, &_ti, NINTRINSIC + i*6 + 3, NINTRINSIC + i*6 + 6 ); - - cvGetCols( matM, &_Mi, pos, pos + ni ); - cvGetCols( _m, &_mi, pos, pos + ni ); - - _Je->rows = _Ji->rows = _err->rows = ni*2; - cvGetCols( _Je, &_dpdr, 0, 3 ); - cvGetCols( _Je, &_dpdt, 3, 6 ); - cvGetCols( _Ji, &_dpdf, 0, 2 ); - cvGetCols( _Ji, &_dpdc, 2, 4 ); - cvGetCols( _Ji, &_dpdk, 4, NINTRINSIC ); - cvReshape( _err, &_mp, 2, 1 ); - - if( _JtJ || _JtErr ) - { - cvProjectPoints2( &_Mi, &_ri, &_ti, &matA, &_k, &_mp, &_dpdr, &_dpdt, - (flags & CV_CALIB_FIX_FOCAL_LENGTH) ? 0 : &_dpdf, - (flags & CV_CALIB_FIX_PRINCIPAL_POINT) ? 0 : &_dpdc, &_dpdk, - (flags & CV_CALIB_FIX_ASPECT_RATIO) ? aspectRatio : 0); - } - else - cvProjectPoints2( &_Mi, &_ri, &_ti, &matA, &_k, &_mp ); - - cvSub( &_mp, &_mi, &_mp ); - - if( _JtJ || _JtErr ) - { - cvGetSubRect( _JtJ, &_part, cvRect(0,0,NINTRINSIC,NINTRINSIC) ); - cvGEMM( _Ji, _Ji, 1, &_part, 1, &_part, CV_GEMM_A_T ); - - cvGetSubRect( _JtJ, &_part, cvRect(NINTRINSIC+i*6,NINTRINSIC+i*6,6,6) ); - cvGEMM( _Je, _Je, 1, 0, 0, &_part, CV_GEMM_A_T ); - - cvGetSubRect( _JtJ, &_part, cvRect(NINTRINSIC+i*6,0,6,NINTRINSIC) ); - cvGEMM( _Ji, _Je, 1, 0, 0, &_part, CV_GEMM_A_T ); - - cvGetRows( _JtErr, &_part, 0, NINTRINSIC ); - cvGEMM( _Ji, _err, 1, &_part, 1, &_part, CV_GEMM_A_T ); - - cvGetRows( _JtErr, &_part, NINTRINSIC + i*6, NINTRINSIC + (i+1)*6 ); - cvGEMM( _Je, _err, 1, 0, 0, &_part, CV_GEMM_A_T ); - } - - double errNorm = cvNorm( &_mp, 0, CV_L2 ); - reprojErr += errNorm*errNorm; - } - if( _errNorm ) - *_errNorm = reprojErr; - } - - // 4. store the results - cvConvert( &matA, cameraMatrix ); - cvConvert( &_k, distCoeffs ); - - for( i = 0; i < nimages; i++ ) - { - CvMat src, dst; - if( rvecs ) - { - src = cvMat( 3, 1, CV_64F, solver.param->data.db + NINTRINSIC + i*6 ); - if( rvecs->rows == nimages && rvecs->cols*CV_MAT_CN(rvecs->type) == 9 ) - { - dst = cvMat( 3, 3, CV_MAT_DEPTH(rvecs->type), - rvecs->data.ptr + rvecs->step*i ); - cvRodrigues2( &src, &matA ); - cvConvert( &matA, &dst ); - } - else - { - dst = cvMat( 3, 1, CV_MAT_DEPTH(rvecs->type), rvecs->rows == 1 ? - rvecs->data.ptr + i*CV_ELEM_SIZE(rvecs->type) : - rvecs->data.ptr + rvecs->step*i ); - cvConvert( &src, &dst ); - } - } - if( tvecs ) - { - src = cvMat( 3, 1, CV_64F, solver.param->data.db + NINTRINSIC + i*6 + 3 ); - dst = cvMat( 3, 1, CV_MAT_DEPTH(tvecs->type), tvecs->rows == 1 ? - tvecs->data.ptr + i*CV_ELEM_SIZE(tvecs->type) : - tvecs->data.ptr + tvecs->step*i ); - cvConvert( &src, &dst ); - } - } - - return std::sqrt(reprojErr/total); -} - - -void cvCalibrationMatrixValues( const CvMat *calibMatr, CvSize imgSize, - double apertureWidth, double apertureHeight, double *fovx, double *fovy, - double *focalLength, CvPoint2D64f *principalPoint, double *pasp ) -{ - double alphax, alphay, mx, my; - int imgWidth = imgSize.width, imgHeight = imgSize.height; - - /* Validate parameters. */ - - if(calibMatr == 0) - CV_Error(CV_StsNullPtr, "Some of parameters is a NULL pointer!"); - - if(!CV_IS_MAT(calibMatr)) - CV_Error(CV_StsUnsupportedFormat, "Input parameters must be a matrices!"); - - if(calibMatr->cols != 3 || calibMatr->rows != 3) - CV_Error(CV_StsUnmatchedSizes, "Size of matrices must be 3x3!"); - - alphax = cvmGet(calibMatr, 0, 0); - alphay = cvmGet(calibMatr, 1, 1); - assert(imgWidth != 0 && imgHeight != 0 && alphax != 0.0 && alphay != 0.0); - - /* Calculate pixel aspect ratio. */ - if(pasp) - *pasp = alphay / alphax; - - /* Calculate number of pixel per realworld unit. */ - - if(apertureWidth != 0.0 && apertureHeight != 0.0) { - mx = imgWidth / apertureWidth; - my = imgHeight / apertureHeight; - } else { - mx = 1.0; - my = *pasp; - } - - /* Calculate fovx and fovy. */ - - if(fovx) - *fovx = 2 * atan(imgWidth / (2 * alphax)) * 180.0 / CV_PI; - - if(fovy) - *fovy = 2 * atan(imgHeight / (2 * alphay)) * 180.0 / CV_PI; - - /* Calculate focal length. */ - - if(focalLength) - *focalLength = alphax / mx; - - /* Calculate principle point. */ - - if(principalPoint) - *principalPoint = cvPoint2D64f(cvmGet(calibMatr, 0, 2) / mx, cvmGet(calibMatr, 1, 2) / my); -} - - -//////////////////////////////// Stereo Calibration /////////////////////////////////// - -static int dbCmp( const void* _a, const void* _b ) -{ - double a = *(const double*)_a; - double b = *(const double*)_b; - - return (a > b) - (a < b); -} - - -double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1, - const CvMat* _imagePoints2, const CvMat* _npoints, - CvMat* _cameraMatrix1, CvMat* _distCoeffs1, - CvMat* _cameraMatrix2, CvMat* _distCoeffs2, - CvSize imageSize, CvMat* matR, CvMat* matT, - CvMat* matE, CvMat* matF, - CvTermCriteria termCrit, - int flags ) -{ - const int NINTRINSIC = 12; - Ptr npoints, err, J_LR, Je, Ji, imagePoints[2], objectPoints, RT0; - CvLevMarq solver; - double reprojErr = 0; - - double A[2][9], dk[2][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, rlr[9]; - CvMat K[2], Dist[2], om_LR, T_LR; - CvMat R_LR = cvMat(3, 3, CV_64F, rlr); - int i, k, p, ni = 0, ofs, nimages, pointsTotal, maxPoints = 0; - int nparams; - bool recomputeIntrinsics = false; - double aspectRatio[2] = {0,0}; - - CV_Assert( CV_IS_MAT(_imagePoints1) && CV_IS_MAT(_imagePoints2) && - CV_IS_MAT(_objectPoints) && CV_IS_MAT(_npoints) && - CV_IS_MAT(matR) && CV_IS_MAT(matT) ); - - CV_Assert( CV_ARE_TYPES_EQ(_imagePoints1, _imagePoints2) && - CV_ARE_DEPTHS_EQ(_imagePoints1, _objectPoints) ); - - CV_Assert( (_npoints->cols == 1 || _npoints->rows == 1) && - CV_MAT_TYPE(_npoints->type) == CV_32SC1 ); - - nimages = _npoints->cols + _npoints->rows - 1; - npoints = cvCreateMat( _npoints->rows, _npoints->cols, _npoints->type ); - cvCopy( _npoints, npoints ); - - for( i = 0, pointsTotal = 0; i < nimages; i++ ) - { - maxPoints = MAX(maxPoints, npoints->data.i[i]); - pointsTotal += npoints->data.i[i]; - } - - objectPoints = cvCreateMat( _objectPoints->rows, _objectPoints->cols, - CV_64FC(CV_MAT_CN(_objectPoints->type))); - cvConvert( _objectPoints, objectPoints ); - cvReshape( objectPoints, objectPoints, 3, 1 ); - - for( k = 0; k < 2; k++ ) - { - const CvMat* points = k == 0 ? _imagePoints1 : _imagePoints2; - const CvMat* cameraMatrix = k == 0 ? _cameraMatrix1 : _cameraMatrix2; - const CvMat* distCoeffs = k == 0 ? _distCoeffs1 : _distCoeffs2; - - int cn = CV_MAT_CN(_imagePoints1->type); - CV_Assert( (CV_MAT_DEPTH(_imagePoints1->type) == CV_32F || - CV_MAT_DEPTH(_imagePoints1->type) == CV_64F) && - ((_imagePoints1->rows == pointsTotal && _imagePoints1->cols*cn == 2) || - (_imagePoints1->rows == 1 && _imagePoints1->cols == pointsTotal && cn == 2)) ); - - K[k] = cvMat(3,3,CV_64F,A[k]); - Dist[k] = cvMat(1,8,CV_64F,dk[k]); - - imagePoints[k] = cvCreateMat( points->rows, points->cols, CV_64FC(CV_MAT_CN(points->type))); - cvConvert( points, imagePoints[k] ); - cvReshape( imagePoints[k], imagePoints[k], 2, 1 ); - - if( flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS| - CV_CALIB_FIX_ASPECT_RATIO|CV_CALIB_FIX_FOCAL_LENGTH) ) - cvConvert( cameraMatrix, &K[k] ); - - if( flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS| - CV_CALIB_FIX_K1|CV_CALIB_FIX_K2|CV_CALIB_FIX_K3|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5|CV_CALIB_FIX_K6) ) - { - CvMat tdist = cvMat( distCoeffs->rows, distCoeffs->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), Dist[k].data.db ); - cvConvert( distCoeffs, &tdist ); - } - - if( !(flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS))) - { - cvCalibrateCamera2( objectPoints, imagePoints[k], - npoints, imageSize, &K[k], &Dist[k], 0, 0, flags ); - } - } - - if( flags & CV_CALIB_SAME_FOCAL_LENGTH ) - { - static const int avg_idx[] = { 0, 4, 2, 5, -1 }; - for( k = 0; avg_idx[k] >= 0; k++ ) - A[0][avg_idx[k]] = A[1][avg_idx[k]] = (A[0][avg_idx[k]] + A[1][avg_idx[k]])*0.5; - } - - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - { - for( k = 0; k < 2; k++ ) - aspectRatio[k] = A[k][0]/A[k][4]; - } - - recomputeIntrinsics = (flags & CV_CALIB_FIX_INTRINSIC) == 0; - - err = cvCreateMat( maxPoints*2, 1, CV_64F ); - Je = cvCreateMat( maxPoints*2, 6, CV_64F ); - J_LR = cvCreateMat( maxPoints*2, 6, CV_64F ); - Ji = cvCreateMat( maxPoints*2, NINTRINSIC, CV_64F ); - cvZero( Ji ); - - // we optimize for the inter-camera R(3),t(3), then, optionally, - // for intrinisic parameters of each camera ((fx,fy,cx,cy,k1,k2,p1,p2) ~ 8 parameters). - nparams = 6*(nimages+1) + (recomputeIntrinsics ? NINTRINSIC*2 : 0); - - // storage for initial [om(R){i}|t{i}] (in order to compute the median for each component) - RT0 = cvCreateMat( 6, nimages, CV_64F ); - - solver.init( nparams, 0, termCrit ); - if( recomputeIntrinsics ) - { - uchar* imask = solver.mask->data.ptr + nparams - NINTRINSIC*2; - if( !(flags & CV_CALIB_RATIONAL_MODEL) ) - flags |= CV_CALIB_FIX_K4 | CV_CALIB_FIX_K5 | CV_CALIB_FIX_K6; - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - imask[0] = imask[NINTRINSIC] = 0; - if( flags & CV_CALIB_FIX_FOCAL_LENGTH ) - imask[0] = imask[1] = imask[NINTRINSIC] = imask[NINTRINSIC+1] = 0; - if( flags & CV_CALIB_FIX_PRINCIPAL_POINT ) - imask[2] = imask[3] = imask[NINTRINSIC+2] = imask[NINTRINSIC+3] = 0; - if( flags & CV_CALIB_ZERO_TANGENT_DIST ) - imask[6] = imask[7] = imask[NINTRINSIC+6] = imask[NINTRINSIC+7] = 0; - if( flags & CV_CALIB_FIX_K1 ) - imask[4] = imask[NINTRINSIC+4] = 0; - if( flags & CV_CALIB_FIX_K2 ) - imask[5] = imask[NINTRINSIC+5] = 0; - if( flags & CV_CALIB_FIX_K3 ) - imask[8] = imask[NINTRINSIC+8] = 0; - if( flags & CV_CALIB_FIX_K4 ) - imask[9] = imask[NINTRINSIC+9] = 0; - if( flags & CV_CALIB_FIX_K5 ) - imask[10] = imask[NINTRINSIC+10] = 0; - if( flags & CV_CALIB_FIX_K6 ) - imask[11] = imask[NINTRINSIC+11] = 0; - } - - /* - Compute initial estimate of pose - - For each image, compute: - R(om) is the rotation matrix of om - om(R) is the rotation vector of R - R_ref = R(om_right) * R(om_left)' - T_ref_list = [T_ref_list; T_right - R_ref * T_left] - om_ref_list = {om_ref_list; om(R_ref)] - - om = median(om_ref_list) - T = median(T_ref_list) - */ - for( i = ofs = 0; i < nimages; ofs += ni, i++ ) - { - ni = npoints->data.i[i]; - CvMat objpt_i; - double _om[2][3], r[2][9], t[2][3]; - CvMat om[2], R[2], T[2], imgpt_i[2]; - - objpt_i = cvMat(1, ni, CV_64FC3, objectPoints->data.db + ofs*3); - for( k = 0; k < 2; k++ ) - { - imgpt_i[k] = cvMat(1, ni, CV_64FC2, imagePoints[k]->data.db + ofs*2); - om[k] = cvMat(3, 1, CV_64F, _om[k]); - R[k] = cvMat(3, 3, CV_64F, r[k]); - T[k] = cvMat(3, 1, CV_64F, t[k]); - - // FIXME: here we ignore activePoints[k] because of - // the limited API of cvFindExtrnisicCameraParams2 - cvFindExtrinsicCameraParams2( &objpt_i, &imgpt_i[k], &K[k], &Dist[k], &om[k], &T[k] ); - cvRodrigues2( &om[k], &R[k] ); - if( k == 0 ) - { - // save initial om_left and T_left - solver.param->data.db[(i+1)*6] = _om[0][0]; - solver.param->data.db[(i+1)*6 + 1] = _om[0][1]; - solver.param->data.db[(i+1)*6 + 2] = _om[0][2]; - solver.param->data.db[(i+1)*6 + 3] = t[0][0]; - solver.param->data.db[(i+1)*6 + 4] = t[0][1]; - solver.param->data.db[(i+1)*6 + 5] = t[0][2]; - } - } - cvGEMM( &R[1], &R[0], 1, 0, 0, &R[0], CV_GEMM_B_T ); - cvGEMM( &R[0], &T[0], -1, &T[1], 1, &T[1] ); - cvRodrigues2( &R[0], &T[0] ); - RT0->data.db[i] = t[0][0]; - RT0->data.db[i + nimages] = t[0][1]; - RT0->data.db[i + nimages*2] = t[0][2]; - RT0->data.db[i + nimages*3] = t[1][0]; - RT0->data.db[i + nimages*4] = t[1][1]; - RT0->data.db[i + nimages*5] = t[1][2]; - } - - // find the medians and save the first 6 parameters - for( i = 0; i < 6; i++ ) - { - qsort( RT0->data.db + i*nimages, nimages, CV_ELEM_SIZE(RT0->type), dbCmp ); - solver.param->data.db[i] = nimages % 2 != 0 ? RT0->data.db[i*nimages + nimages/2] : - (RT0->data.db[i*nimages + nimages/2 - 1] + RT0->data.db[i*nimages + nimages/2])*0.5; - } - - if( recomputeIntrinsics ) - for( k = 0; k < 2; k++ ) - { - double* iparam = solver.param->data.db + (nimages+1)*6 + k*NINTRINSIC; - if( flags & CV_CALIB_ZERO_TANGENT_DIST ) - dk[k][2] = dk[k][3] = 0; - iparam[0] = A[k][0]; iparam[1] = A[k][4]; iparam[2] = A[k][2]; iparam[3] = A[k][5]; - iparam[4] = dk[k][0]; iparam[5] = dk[k][1]; iparam[6] = dk[k][2]; - iparam[7] = dk[k][3]; iparam[8] = dk[k][4]; iparam[9] = dk[k][5]; - iparam[10] = dk[k][6]; iparam[11] = dk[k][7]; - } - - om_LR = cvMat(3, 1, CV_64F, solver.param->data.db); - T_LR = cvMat(3, 1, CV_64F, solver.param->data.db + 3); - - for(;;) - { - const CvMat* param = 0; - CvMat tmpimagePoints; - CvMat *JtJ = 0, *JtErr = 0; - double *_errNorm = 0; - double _omR[3], _tR[3]; - double _dr3dr1[9], _dr3dr2[9], /*_dt3dr1[9],*/ _dt3dr2[9], _dt3dt1[9], _dt3dt2[9]; - CvMat dr3dr1 = cvMat(3, 3, CV_64F, _dr3dr1); - CvMat dr3dr2 = cvMat(3, 3, CV_64F, _dr3dr2); - //CvMat dt3dr1 = cvMat(3, 3, CV_64F, _dt3dr1); - CvMat dt3dr2 = cvMat(3, 3, CV_64F, _dt3dr2); - CvMat dt3dt1 = cvMat(3, 3, CV_64F, _dt3dt1); - CvMat dt3dt2 = cvMat(3, 3, CV_64F, _dt3dt2); - CvMat om[2], T[2], imgpt_i[2]; - CvMat dpdrot_hdr, dpdt_hdr, dpdf_hdr, dpdc_hdr, dpdk_hdr; - CvMat *dpdrot = &dpdrot_hdr, *dpdt = &dpdt_hdr, *dpdf = 0, *dpdc = 0, *dpdk = 0; - - if( !solver.updateAlt( param, JtJ, JtErr, _errNorm )) - break; - reprojErr = 0; - - cvRodrigues2( &om_LR, &R_LR ); - om[1] = cvMat(3,1,CV_64F,_omR); - T[1] = cvMat(3,1,CV_64F,_tR); - - if( recomputeIntrinsics ) - { - double* iparam = solver.param->data.db + (nimages+1)*6; - double* ipparam = solver.prevParam->data.db + (nimages+1)*6; - dpdf = &dpdf_hdr; - dpdc = &dpdc_hdr; - dpdk = &dpdk_hdr; - if( flags & CV_CALIB_SAME_FOCAL_LENGTH ) - { - iparam[NINTRINSIC] = iparam[0]; - iparam[NINTRINSIC+1] = iparam[1]; - ipparam[NINTRINSIC] = ipparam[0]; - ipparam[NINTRINSIC+1] = ipparam[1]; - } - if( flags & CV_CALIB_FIX_ASPECT_RATIO ) - { - iparam[0] = iparam[1]*aspectRatio[0]; - iparam[NINTRINSIC] = iparam[NINTRINSIC+1]*aspectRatio[1]; - ipparam[0] = ipparam[1]*aspectRatio[0]; - ipparam[NINTRINSIC] = ipparam[NINTRINSIC+1]*aspectRatio[1]; - } - for( k = 0; k < 2; k++ ) - { - A[k][0] = iparam[k*NINTRINSIC+0]; - A[k][4] = iparam[k*NINTRINSIC+1]; - A[k][2] = iparam[k*NINTRINSIC+2]; - A[k][5] = iparam[k*NINTRINSIC+3]; - dk[k][0] = iparam[k*NINTRINSIC+4]; - dk[k][1] = iparam[k*NINTRINSIC+5]; - dk[k][2] = iparam[k*NINTRINSIC+6]; - dk[k][3] = iparam[k*NINTRINSIC+7]; - dk[k][4] = iparam[k*NINTRINSIC+8]; - dk[k][5] = iparam[k*NINTRINSIC+9]; - dk[k][6] = iparam[k*NINTRINSIC+10]; - dk[k][7] = iparam[k*NINTRINSIC+11]; - } - } - - for( i = ofs = 0; i < nimages; ofs += ni, i++ ) - { - ni = npoints->data.i[i]; - CvMat objpt_i, _part; - - om[0] = cvMat(3,1,CV_64F,solver.param->data.db+(i+1)*6); - T[0] = cvMat(3,1,CV_64F,solver.param->data.db+(i+1)*6+3); - - if( JtJ || JtErr ) - cvComposeRT( &om[0], &T[0], &om_LR, &T_LR, &om[1], &T[1], &dr3dr1, 0, - &dr3dr2, 0, 0, &dt3dt1, &dt3dr2, &dt3dt2 ); - else - cvComposeRT( &om[0], &T[0], &om_LR, &T_LR, &om[1], &T[1] ); - - objpt_i = cvMat(1, ni, CV_64FC3, objectPoints->data.db + ofs*3); - err->rows = Je->rows = J_LR->rows = Ji->rows = ni*2; - cvReshape( err, &tmpimagePoints, 2, 1 ); - - cvGetCols( Ji, &dpdf_hdr, 0, 2 ); - cvGetCols( Ji, &dpdc_hdr, 2, 4 ); - cvGetCols( Ji, &dpdk_hdr, 4, NINTRINSIC ); - cvGetCols( Je, &dpdrot_hdr, 0, 3 ); - cvGetCols( Je, &dpdt_hdr, 3, 6 ); - - for( k = 0; k < 2; k++ ) - { - double l2err; - imgpt_i[k] = cvMat(1, ni, CV_64FC2, imagePoints[k]->data.db + ofs*2); - - if( JtJ || JtErr ) - cvProjectPoints2( &objpt_i, &om[k], &T[k], &K[k], &Dist[k], - &tmpimagePoints, dpdrot, dpdt, dpdf, dpdc, dpdk, - (flags & CV_CALIB_FIX_ASPECT_RATIO) ? aspectRatio[k] : 0); - else - cvProjectPoints2( &objpt_i, &om[k], &T[k], &K[k], &Dist[k], &tmpimagePoints ); - cvSub( &tmpimagePoints, &imgpt_i[k], &tmpimagePoints ); - - l2err = cvNorm( &tmpimagePoints, 0, CV_L2 ); - - if( JtJ || JtErr ) - { - int iofs = (nimages+1)*6 + k*NINTRINSIC, eofs = (i+1)*6; - assert( JtJ && JtErr ); - - if( k == 1 ) - { - // d(err_{x|y}R) ~ de3 - // convert de3/{dr3,dt3} => de3{dr1,dt1} & de3{dr2,dt2} - for( p = 0; p < ni*2; p++ ) - { - CvMat de3dr3 = cvMat( 1, 3, CV_64F, Je->data.ptr + Je->step*p ); - CvMat de3dt3 = cvMat( 1, 3, CV_64F, de3dr3.data.db + 3 ); - CvMat de3dr2 = cvMat( 1, 3, CV_64F, J_LR->data.ptr + J_LR->step*p ); - CvMat de3dt2 = cvMat( 1, 3, CV_64F, de3dr2.data.db + 3 ); - double _de3dr1[3], _de3dt1[3]; - CvMat de3dr1 = cvMat( 1, 3, CV_64F, _de3dr1 ); - CvMat de3dt1 = cvMat( 1, 3, CV_64F, _de3dt1 ); - - cvMatMul( &de3dr3, &dr3dr1, &de3dr1 ); - cvMatMul( &de3dt3, &dt3dt1, &de3dt1 ); - - cvMatMul( &de3dr3, &dr3dr2, &de3dr2 ); - cvMatMulAdd( &de3dt3, &dt3dr2, &de3dr2, &de3dr2 ); - - cvMatMul( &de3dt3, &dt3dt2, &de3dt2 ); - - cvCopy( &de3dr1, &de3dr3 ); - cvCopy( &de3dt1, &de3dt3 ); - } - - cvGetSubRect( JtJ, &_part, cvRect(0, 0, 6, 6) ); - cvGEMM( J_LR, J_LR, 1, &_part, 1, &_part, CV_GEMM_A_T ); - - cvGetSubRect( JtJ, &_part, cvRect(eofs, 0, 6, 6) ); - cvGEMM( J_LR, Je, 1, 0, 0, &_part, CV_GEMM_A_T ); - - cvGetRows( JtErr, &_part, 0, 6 ); - cvGEMM( J_LR, err, 1, &_part, 1, &_part, CV_GEMM_A_T ); - } - - cvGetSubRect( JtJ, &_part, cvRect(eofs, eofs, 6, 6) ); - cvGEMM( Je, Je, 1, &_part, 1, &_part, CV_GEMM_A_T ); - - cvGetRows( JtErr, &_part, eofs, eofs + 6 ); - cvGEMM( Je, err, 1, &_part, 1, &_part, CV_GEMM_A_T ); - - if( recomputeIntrinsics ) - { - cvGetSubRect( JtJ, &_part, cvRect(iofs, iofs, NINTRINSIC, NINTRINSIC) ); - cvGEMM( Ji, Ji, 1, &_part, 1, &_part, CV_GEMM_A_T ); - cvGetSubRect( JtJ, &_part, cvRect(iofs, eofs, NINTRINSIC, 6) ); - cvGEMM( Je, Ji, 1, &_part, 1, &_part, CV_GEMM_A_T ); - if( k == 1 ) - { - cvGetSubRect( JtJ, &_part, cvRect(iofs, 0, NINTRINSIC, 6) ); - cvGEMM( J_LR, Ji, 1, &_part, 1, &_part, CV_GEMM_A_T ); - } - cvGetRows( JtErr, &_part, iofs, iofs + NINTRINSIC ); - cvGEMM( Ji, err, 1, &_part, 1, &_part, CV_GEMM_A_T ); - } - } - - reprojErr += l2err*l2err; - } - } - if(_errNorm) - *_errNorm = reprojErr; - } - - cvRodrigues2( &om_LR, &R_LR ); - if( matR->rows == 1 || matR->cols == 1 ) - cvConvert( &om_LR, matR ); - else - cvConvert( &R_LR, matR ); - cvConvert( &T_LR, matT ); - - if( recomputeIntrinsics ) - { - cvConvert( &K[0], _cameraMatrix1 ); - cvConvert( &K[1], _cameraMatrix2 ); - - for( k = 0; k < 2; k++ ) - { - CvMat* distCoeffs = k == 0 ? _distCoeffs1 : _distCoeffs2; - CvMat tdist = cvMat( distCoeffs->rows, distCoeffs->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), Dist[k].data.db ); - cvConvert( &tdist, distCoeffs ); - } - } - - if( matE || matF ) - { - double* t = T_LR.data.db; - double tx[] = - { - 0, -t[2], t[1], - t[2], 0, -t[0], - -t[1], t[0], 0 - }; - CvMat Tx = cvMat(3, 3, CV_64F, tx); - double e[9], f[9]; - CvMat E = cvMat(3, 3, CV_64F, e); - CvMat F = cvMat(3, 3, CV_64F, f); - cvMatMul( &Tx, &R_LR, &E ); - if( matE ) - cvConvert( &E, matE ); - if( matF ) - { - double ik[9]; - CvMat iK = cvMat(3, 3, CV_64F, ik); - cvInvert(&K[1], &iK); - cvGEMM( &iK, &E, 1, 0, 0, &E, CV_GEMM_A_T ); - cvInvert(&K[0], &iK); - cvMatMul(&E, &iK, &F); - cvConvertScale( &F, matF, fabs(f[8]) > 0 ? 1./f[8] : 1 ); - } - } - - return std::sqrt(reprojErr/(pointsTotal*2)); -} - - -static void -icvGetRectangles( const CvMat* cameraMatrix, const CvMat* distCoeffs, - const CvMat* R, const CvMat* newCameraMatrix, CvSize imgSize, - cv::Rect_& inner, cv::Rect_& outer ) -{ - const int N = 9; - int x, y, k; - cv::Ptr _pts = cvCreateMat(1, N*N, CV_32FC2); - CvPoint2D32f* pts = (CvPoint2D32f*)(_pts->data.ptr); - - for( y = k = 0; y < N; y++ ) - for( x = 0; x < N; x++ ) - pts[k++] = cvPoint2D32f((float)x*imgSize.width/(N-1), - (float)y*imgSize.height/(N-1)); - - cvUndistortPoints(_pts, _pts, cameraMatrix, distCoeffs, R, newCameraMatrix); - - float iX0=-FLT_MAX, iX1=FLT_MAX, iY0=-FLT_MAX, iY1=FLT_MAX; - float oX0=FLT_MAX, oX1=-FLT_MAX, oY0=FLT_MAX, oY1=-FLT_MAX; - // find the inscribed rectangle. - // the code will likely not work with extreme rotation matrices (R) (>45%) - for( y = k = 0; y < N; y++ ) - for( x = 0; x < N; x++ ) - { - CvPoint2D32f p = pts[k++]; - oX0 = MIN(oX0, p.x); - oX1 = MAX(oX1, p.x); - oY0 = MIN(oY0, p.y); - oY1 = MAX(oY1, p.y); - - if( x == 0 ) - iX0 = MAX(iX0, p.x); - if( x == N-1 ) - iX1 = MIN(iX1, p.x); - if( y == 0 ) - iY0 = MAX(iY0, p.y); - if( y == N-1 ) - iY1 = MIN(iY1, p.y); - } - inner = cv::Rect_(iX0, iY0, iX1-iX0, iY1-iY0); - outer = cv::Rect_(oX0, oY0, oX1-oX0, oY1-oY0); -} - - -void cvStereoRectify( const CvMat* _cameraMatrix1, const CvMat* _cameraMatrix2, - const CvMat* _distCoeffs1, const CvMat* _distCoeffs2, - CvSize imageSize, const CvMat* matR, const CvMat* matT, - CvMat* _R1, CvMat* _R2, CvMat* _P1, CvMat* _P2, - CvMat* matQ, int flags, double alpha, CvSize newImgSize, - CvRect* roi1, CvRect* roi2 ) -{ - double _om[3], _t[3], _uu[3]={0,0,0}, _r_r[3][3], _pp[3][4]; - double _ww[3], _wr[3][3], _z[3] = {0,0,0}, _ri[3][3]; - cv::Rect_ inner1, inner2, outer1, outer2; - - CvMat om = cvMat(3, 1, CV_64F, _om); - CvMat t = cvMat(3, 1, CV_64F, _t); - CvMat uu = cvMat(3, 1, CV_64F, _uu); - CvMat r_r = cvMat(3, 3, CV_64F, _r_r); - CvMat pp = cvMat(3, 4, CV_64F, _pp); - CvMat ww = cvMat(3, 1, CV_64F, _ww); // temps - CvMat wR = cvMat(3, 3, CV_64F, _wr); - CvMat Z = cvMat(3, 1, CV_64F, _z); - CvMat Ri = cvMat(3, 3, CV_64F, _ri); - double nx = imageSize.width, ny = imageSize.height; - int i, k; - - if( matR->rows == 3 && matR->cols == 3 ) - cvRodrigues2(matR, &om); // get vector rotation - else - cvConvert(matR, &om); // it's already a rotation vector - cvConvertScale(&om, &om, -0.5); // get average rotation - cvRodrigues2(&om, &r_r); // rotate cameras to same orientation by averaging - cvMatMul(&r_r, matT, &t); - - int idx = fabs(_t[0]) > fabs(_t[1]) ? 0 : 1; - double c = _t[idx], nt = cvNorm(&t, 0, CV_L2); - _uu[idx] = c > 0 ? 1 : -1; - - // calculate global Z rotation - cvCrossProduct(&t,&uu,&ww); - double nw = cvNorm(&ww, 0, CV_L2); - if (nw > 0.0) - cvConvertScale(&ww, &ww, acos(fabs(c)/nt)/nw); - cvRodrigues2(&ww, &wR); - - // apply to both views - cvGEMM(&wR, &r_r, 1, 0, 0, &Ri, CV_GEMM_B_T); - cvConvert( &Ri, _R1 ); - cvGEMM(&wR, &r_r, 1, 0, 0, &Ri, 0); - cvConvert( &Ri, _R2 ); - cvMatMul(&Ri, matT, &t); - - // calculate projection/camera matrices - // these contain the relevant rectified image internal params (fx, fy=fx, cx, cy) - double fc_new = DBL_MAX; - CvPoint2D64f cc_new[2] = {{0,0}, {0,0}}; - - for( k = 0; k < 2; k++ ) { - const CvMat* A = k == 0 ? _cameraMatrix1 : _cameraMatrix2; - const CvMat* Dk = k == 0 ? _distCoeffs1 : _distCoeffs2; - double dk1 = Dk ? cvmGet(Dk, 0, 0) : 0; - double fc = cvmGet(A,idx^1,idx^1); - if( dk1 < 0 ) { - fc *= 1 + dk1*(nx*nx + ny*ny)/(4*fc*fc); - } - fc_new = MIN(fc_new, fc); - } - - for( k = 0; k < 2; k++ ) - { - const CvMat* A = k == 0 ? _cameraMatrix1 : _cameraMatrix2; - const CvMat* Dk = k == 0 ? _distCoeffs1 : _distCoeffs2; - CvPoint2D32f _pts[4]; - CvPoint3D32f _pts_3[4]; - CvMat pts = cvMat(1, 4, CV_32FC2, _pts); - CvMat pts_3 = cvMat(1, 4, CV_32FC3, _pts_3); - - for( i = 0; i < 4; i++ ) - { - int j = (i<2) ? 0 : 1; - _pts[i].x = (float)((i % 2)*(nx-1)); - _pts[i].y = (float)(j*(ny-1)); - } - cvUndistortPoints( &pts, &pts, A, Dk, 0, 0 ); - cvConvertPointsHomogeneous( &pts, &pts_3 ); - - //Change camera matrix to have cc=[0,0] and fc = fc_new - double _a_tmp[3][3]; - CvMat A_tmp = cvMat(3, 3, CV_64F, _a_tmp); - _a_tmp[0][0]=fc_new; - _a_tmp[1][1]=fc_new; - _a_tmp[0][2]=0.0; - _a_tmp[1][2]=0.0; - cvProjectPoints2( &pts_3, k == 0 ? _R1 : _R2, &Z, &A_tmp, 0, &pts ); - CvScalar avg = cvAvg(&pts); - cc_new[k].x = (nx-1)/2 - avg.val[0]; - cc_new[k].y = (ny-1)/2 - avg.val[1]; - } - - // vertical focal length must be the same for both images to keep the epipolar constraint - // (for horizontal epipolar lines -- TBD: check for vertical epipolar lines) - // use fy for fx also, for simplicity - - // For simplicity, set the principal points for both cameras to be the average - // of the two principal points (either one of or both x- and y- coordinates) - if( flags & CV_CALIB_ZERO_DISPARITY ) - { - cc_new[0].x = cc_new[1].x = (cc_new[0].x + cc_new[1].x)*0.5; - cc_new[0].y = cc_new[1].y = (cc_new[0].y + cc_new[1].y)*0.5; - } - else if( idx == 0 ) // horizontal stereo - cc_new[0].y = cc_new[1].y = (cc_new[0].y + cc_new[1].y)*0.5; - else // vertical stereo - cc_new[0].x = cc_new[1].x = (cc_new[0].x + cc_new[1].x)*0.5; - - cvZero( &pp ); - _pp[0][0] = _pp[1][1] = fc_new; - _pp[0][2] = cc_new[0].x; - _pp[1][2] = cc_new[0].y; - _pp[2][2] = 1; - cvConvert(&pp, _P1); - - _pp[0][2] = cc_new[1].x; - _pp[1][2] = cc_new[1].y; - _pp[idx][3] = _t[idx]*fc_new; // baseline * focal length - cvConvert(&pp, _P2); - - alpha = MIN(alpha, 1.); - - icvGetRectangles( _cameraMatrix1, _distCoeffs1, _R1, _P1, imageSize, inner1, outer1 ); - icvGetRectangles( _cameraMatrix2, _distCoeffs2, _R2, _P2, imageSize, inner2, outer2 ); - - { - newImgSize = newImgSize.width*newImgSize.height != 0 ? newImgSize : imageSize; - double cx1_0 = cc_new[0].x; - double cy1_0 = cc_new[0].y; - double cx2_0 = cc_new[1].x; - double cy2_0 = cc_new[1].y; - double cx1 = newImgSize.width*cx1_0/imageSize.width; - double cy1 = newImgSize.height*cy1_0/imageSize.height; - double cx2 = newImgSize.width*cx2_0/imageSize.width; - double cy2 = newImgSize.height*cy2_0/imageSize.height; - double s = 1.; - - if( alpha >= 0 ) - { - double s0 = std::max(std::max(std::max((double)cx1/(cx1_0 - inner1.x), (double)cy1/(cy1_0 - inner1.y)), - (double)(newImgSize.width - cx1)/(inner1.x + inner1.width - cx1_0)), - (double)(newImgSize.height - cy1)/(inner1.y + inner1.height - cy1_0)); - s0 = std::max(std::max(std::max(std::max((double)cx2/(cx2_0 - inner2.x), (double)cy2/(cy2_0 - inner2.y)), - (double)(newImgSize.width - cx2)/(inner2.x + inner2.width - cx2_0)), - (double)(newImgSize.height - cy2)/(inner2.y + inner2.height - cy2_0)), - s0); - - double s1 = std::min(std::min(std::min((double)cx1/(cx1_0 - outer1.x), (double)cy1/(cy1_0 - outer1.y)), - (double)(newImgSize.width - cx1)/(outer1.x + outer1.width - cx1_0)), - (double)(newImgSize.height - cy1)/(outer1.y + outer1.height - cy1_0)); - s1 = std::min(std::min(std::min(std::min((double)cx2/(cx2_0 - outer2.x), (double)cy2/(cy2_0 - outer2.y)), - (double)(newImgSize.width - cx2)/(outer2.x + outer2.width - cx2_0)), - (double)(newImgSize.height - cy2)/(outer2.y + outer2.height - cy2_0)), - s1); - - s = s0*(1 - alpha) + s1*alpha; - } - - fc_new *= s; - cc_new[0] = cvPoint2D64f(cx1, cy1); - cc_new[1] = cvPoint2D64f(cx2, cy2); - - cvmSet(_P1, 0, 0, fc_new); - cvmSet(_P1, 1, 1, fc_new); - cvmSet(_P1, 0, 2, cx1); - cvmSet(_P1, 1, 2, cy1); - - cvmSet(_P2, 0, 0, fc_new); - cvmSet(_P2, 1, 1, fc_new); - cvmSet(_P2, 0, 2, cx2); - cvmSet(_P2, 1, 2, cy2); - cvmSet(_P2, idx, 3, s*cvmGet(_P2, idx, 3)); - - if(roi1) - { - *roi1 = cv::Rect(cvCeil((inner1.x - cx1_0)*s + cx1), - cvCeil((inner1.y - cy1_0)*s + cy1), - cvFloor(inner1.width*s), cvFloor(inner1.height*s)) - & cv::Rect(0, 0, newImgSize.width, newImgSize.height); - } - - if(roi2) - { - *roi2 = cv::Rect(cvCeil((inner2.x - cx2_0)*s + cx2), - cvCeil((inner2.y - cy2_0)*s + cy2), - cvFloor(inner2.width*s), cvFloor(inner2.height*s)) - & cv::Rect(0, 0, newImgSize.width, newImgSize.height); - } - } - - if( matQ ) - { - double q[] = - { - 1, 0, 0, -cc_new[0].x, - 0, 1, 0, -cc_new[0].y, - 0, 0, 0, fc_new, - 0, 0, -1./_t[idx], - (idx == 0 ? cc_new[0].x - cc_new[1].x : cc_new[0].y - cc_new[1].y)/_t[idx] - }; - CvMat Q = cvMat(4, 4, CV_64F, q); - cvConvert( &Q, matQ ); - } -} - - -void cvGetOptimalNewCameraMatrix( const CvMat* cameraMatrix, const CvMat* distCoeffs, - CvSize imgSize, double alpha, - CvMat* newCameraMatrix, CvSize newImgSize, - CvRect* validPixROI, int centerPrincipalPoint ) -{ - cv::Rect_ inner, outer; - newImgSize = newImgSize.width*newImgSize.height != 0 ? newImgSize : imgSize; - - double M[3][3]; - CvMat matM = cvMat(3, 3, CV_64F, M); - cvConvert(cameraMatrix, &matM); - - if( centerPrincipalPoint ) - { - double cx0 = M[0][2]; - double cy0 = M[1][2]; - double cx = (newImgSize.width-1)*0.5; - double cy = (newImgSize.height-1)*0.5; - - icvGetRectangles( cameraMatrix, distCoeffs, 0, cameraMatrix, imgSize, inner, outer ); - double s0 = std::max(std::max(std::max((double)cx/(cx0 - inner.x), (double)cy/(cy0 - inner.y)), - (double)cx/(inner.x + inner.width - cx0)), - (double)cy/(inner.y + inner.height - cy0)); - double s1 = std::min(std::min(std::min((double)cx/(cx0 - outer.x), (double)cy/(cy0 - outer.y)), - (double)cx/(outer.x + outer.width - cx0)), - (double)cy/(outer.y + outer.height - cy0)); - double s = s0*(1 - alpha) + s1*alpha; - - M[0][0] *= s; - M[1][1] *= s; - M[0][2] = cx; - M[1][2] = cy; - - if( validPixROI ) - { - inner = cv::Rect_((float)((inner.x - cx0)*s + cx), - (float)((inner.y - cy0)*s + cy), - (float)(inner.width*s), - (float)(inner.height*s)); - cv::Rect r(cvCeil(inner.x), cvCeil(inner.y), cvFloor(inner.width), cvFloor(inner.height)); - r &= cv::Rect(0, 0, newImgSize.width, newImgSize.height); - *validPixROI = r; - } - } - else - { - // Get inscribed and circumscribed rectangles in normalized - // (independent of camera matrix) coordinates - icvGetRectangles( cameraMatrix, distCoeffs, 0, 0, imgSize, inner, outer ); - - // Projection mapping inner rectangle to viewport - double fx0 = (newImgSize.width - 1) / inner.width; - double fy0 = (newImgSize.height - 1) / inner.height; - double cx0 = -fx0 * inner.x; - double cy0 = -fy0 * inner.y; - - // Projection mapping outer rectangle to viewport - double fx1 = (newImgSize.width - 1) / outer.width; - double fy1 = (newImgSize.height - 1) / outer.height; - double cx1 = -fx1 * outer.x; - double cy1 = -fy1 * outer.y; - - // Interpolate between the two optimal projections - M[0][0] = fx0*(1 - alpha) + fx1*alpha; - M[1][1] = fy0*(1 - alpha) + fy1*alpha; - M[0][2] = cx0*(1 - alpha) + cx1*alpha; - M[1][2] = cy0*(1 - alpha) + cy1*alpha; - - if( validPixROI ) - { - icvGetRectangles( cameraMatrix, distCoeffs, 0, &matM, imgSize, inner, outer ); - cv::Rect r = inner; - r &= cv::Rect(0, 0, newImgSize.width, newImgSize.height); - *validPixROI = r; - } - } - - cvConvert(&matM, newCameraMatrix); -} - - -CV_IMPL int cvStereoRectifyUncalibrated( - const CvMat* _points1, const CvMat* _points2, - const CvMat* F0, CvSize imgSize, - CvMat* _H1, CvMat* _H2, double threshold ) -{ - Ptr _m1, _m2, _lines1, _lines2; - - int i, j, npoints; - double cx, cy; - double u[9], v[9], w[9], f[9], h1[9], h2[9], h0[9], e2[3]; - CvMat E2 = cvMat( 3, 1, CV_64F, e2 ); - CvMat U = cvMat( 3, 3, CV_64F, u ); - CvMat V = cvMat( 3, 3, CV_64F, v ); - CvMat W = cvMat( 3, 3, CV_64F, w ); - CvMat F = cvMat( 3, 3, CV_64F, f ); - CvMat H1 = cvMat( 3, 3, CV_64F, h1 ); - CvMat H2 = cvMat( 3, 3, CV_64F, h2 ); - CvMat H0 = cvMat( 3, 3, CV_64F, h0 ); - - CvPoint2D64f* m1; - CvPoint2D64f* m2; - CvPoint3D64f* lines1; - CvPoint3D64f* lines2; - - CV_Assert( CV_IS_MAT(_points1) && CV_IS_MAT(_points2) && - (_points1->rows == 1 || _points1->cols == 1) && - (_points2->rows == 1 || _points2->cols == 1) && - CV_ARE_SIZES_EQ(_points1, _points2) ); - - npoints = _points1->rows * _points1->cols * CV_MAT_CN(_points1->type) / 2; - - _m1 = cvCreateMat( _points1->rows, _points1->cols, CV_64FC(CV_MAT_CN(_points1->type)) ); - _m2 = cvCreateMat( _points2->rows, _points2->cols, CV_64FC(CV_MAT_CN(_points2->type)) ); - _lines1 = cvCreateMat( 1, npoints, CV_64FC3 ); - _lines2 = cvCreateMat( 1, npoints, CV_64FC3 ); - - cvConvert( F0, &F ); - - cvSVD( (CvMat*)&F, &W, &U, &V, CV_SVD_U_T + CV_SVD_V_T ); - W.data.db[8] = 0.; - cvGEMM( &U, &W, 1, 0, 0, &W, CV_GEMM_A_T ); - cvMatMul( &W, &V, &F ); - - cx = cvRound( (imgSize.width-1)*0.5 ); - cy = cvRound( (imgSize.height-1)*0.5 ); - - cvZero( _H1 ); - cvZero( _H2 ); - - cvConvert( _points1, _m1 ); - cvConvert( _points2, _m2 ); - cvReshape( _m1, _m1, 2, 1 ); - cvReshape( _m2, _m2, 2, 1 ); - - m1 = (CvPoint2D64f*)_m1->data.ptr; - m2 = (CvPoint2D64f*)_m2->data.ptr; - lines1 = (CvPoint3D64f*)_lines1->data.ptr; - lines2 = (CvPoint3D64f*)_lines2->data.ptr; - - if( threshold > 0 ) - { - cvComputeCorrespondEpilines( _m1, 1, &F, _lines1 ); - cvComputeCorrespondEpilines( _m2, 2, &F, _lines2 ); - - // measure distance from points to the corresponding epilines, mark outliers - for( i = j = 0; i < npoints; i++ ) - { - if( fabs(m1[i].x*lines2[i].x + - m1[i].y*lines2[i].y + - lines2[i].z) <= threshold && - fabs(m2[i].x*lines1[i].x + - m2[i].y*lines1[i].y + - lines1[i].z) <= threshold ) - { - if( j < i ) - { - m1[j] = m1[i]; - m2[j] = m2[i]; - } - j++; - } - } - - npoints = j; - if( npoints == 0 ) - return 0; - } - - _m1->cols = _m2->cols = npoints; - memcpy( E2.data.db, U.data.db + 6, sizeof(e2)); - cvScale( &E2, &E2, e2[2] > 0 ? 1 : -1 ); - - double t[] = - { - 1, 0, -cx, - 0, 1, -cy, - 0, 0, 1 - }; - CvMat T = cvMat(3, 3, CV_64F, t); - cvMatMul( &T, &E2, &E2 ); - - int mirror = e2[0] < 0; - double d = MAX(sqrt(e2[0]*e2[0] + e2[1]*e2[1]),DBL_EPSILON); - double alpha = e2[0]/d; - double beta = e2[1]/d; - double r[] = - { - alpha, beta, 0, - -beta, alpha, 0, - 0, 0, 1 - }; - CvMat R = cvMat(3, 3, CV_64F, r); - cvMatMul( &R, &T, &T ); - cvMatMul( &R, &E2, &E2 ); - double invf = fabs(e2[2]) < 1e-6*fabs(e2[0]) ? 0 : -e2[2]/e2[0]; - double k[] = - { - 1, 0, 0, - 0, 1, 0, - invf, 0, 1 - }; - CvMat K = cvMat(3, 3, CV_64F, k); - cvMatMul( &K, &T, &H2 ); - cvMatMul( &K, &E2, &E2 ); - - double it[] = - { - 1, 0, cx, - 0, 1, cy, - 0, 0, 1 - }; - CvMat iT = cvMat( 3, 3, CV_64F, it ); - cvMatMul( &iT, &H2, &H2 ); - - memcpy( E2.data.db, U.data.db + 6, sizeof(e2)); - cvScale( &E2, &E2, e2[2] > 0 ? 1 : -1 ); - - double e2_x[] = - { - 0, -e2[2], e2[1], - e2[2], 0, -e2[0], - -e2[1], e2[0], 0 - }; - double e2_111[] = - { - e2[0], e2[0], e2[0], - e2[1], e2[1], e2[1], - e2[2], e2[2], e2[2], - }; - CvMat E2_x = cvMat(3, 3, CV_64F, e2_x); - CvMat E2_111 = cvMat(3, 3, CV_64F, e2_111); - cvMatMulAdd(&E2_x, &F, &E2_111, &H0 ); - cvMatMul(&H2, &H0, &H0); - CvMat E1=cvMat(3, 1, CV_64F, V.data.db+6); - cvMatMul(&H0, &E1, &E1); - - cvPerspectiveTransform( _m1, _m1, &H0 ); - cvPerspectiveTransform( _m2, _m2, &H2 ); - CvMat A = cvMat( 1, npoints, CV_64FC3, lines1 ), BxBy, B; - double x[3]; - CvMat X = cvMat( 3, 1, CV_64F, x ); - cvConvertPointsHomogeneous( _m1, &A ); - cvReshape( &A, &A, 1, npoints ); - cvReshape( _m2, &BxBy, 1, npoints ); - cvGetCol( &BxBy, &B, 0 ); - cvSolve( &A, &B, &X, CV_SVD ); - - double ha[] = - { - x[0], x[1], x[2], - 0, 1, 0, - 0, 0, 1 - }; - CvMat Ha = cvMat(3, 3, CV_64F, ha); - cvMatMul( &Ha, &H0, &H1 ); - cvPerspectiveTransform( _m1, _m1, &Ha ); - - if( mirror ) - { - double mm[] = { -1, 0, cx*2, 0, -1, cy*2, 0, 0, 1 }; - CvMat MM = cvMat(3, 3, CV_64F, mm); - cvMatMul( &MM, &H1, &H1 ); - cvMatMul( &MM, &H2, &H2 ); - } - - cvConvert( &H1, _H1 ); - cvConvert( &H2, _H2 ); - - return 1; -} - - -void cv::reprojectImageTo3D( InputArray _disparity, - OutputArray __3dImage, InputArray _Qmat, - bool handleMissingValues, int dtype ) -{ - Mat disparity = _disparity.getMat(), Q = _Qmat.getMat(); - int stype = disparity.type(); - - CV_Assert( stype == CV_8UC1 || stype == CV_16SC1 || - stype == CV_32SC1 || stype == CV_32FC1 ); - CV_Assert( Q.size() == Size(4,4) ); - - if( dtype < 0 ) - dtype = CV_32FC3; - else - { - dtype = CV_MAKETYPE(CV_MAT_DEPTH(dtype), 3); - CV_Assert( dtype == CV_16SC3 || dtype == CV_32SC3 || dtype == CV_32FC3 ); - } - - __3dImage.create(disparity.size(), CV_MAKETYPE(dtype, 3)); - Mat _3dImage = __3dImage.getMat(); - - const double bigZ = 10000.; - double q[4][4]; - Mat _Q(4, 4, CV_64F, q); - Q.convertTo(_Q, CV_64F); - - int x, cols = disparity.cols; - CV_Assert( cols >= 0 ); - - vector _sbuf(cols+1), _dbuf(cols*3+1); - float* sbuf = &_sbuf[0], *dbuf = &_dbuf[0]; - double minDisparity = FLT_MAX; - - // NOTE: here we quietly assume that at least one pixel in the disparity map is not defined. - // and we set the corresponding Z's to some fixed big value. - if( handleMissingValues ) - cv::minMaxIdx( disparity, &minDisparity, 0, 0, 0 ); - - for( int y = 0; y < disparity.rows; y++ ) - { - float *sptr = sbuf, *dptr = dbuf; - double qx = q[0][1]*y + q[0][3], qy = q[1][1]*y + q[1][3]; - double qz = q[2][1]*y + q[2][3], qw = q[3][1]*y + q[3][3]; - - if( stype == CV_8UC1 ) - { - const uchar* sptr0 = disparity.ptr(y); - for( x = 0; x < cols; x++ ) - sptr[x] = (float)sptr0[x]; - } - else if( stype == CV_16SC1 ) - { - const short* sptr0 = disparity.ptr(y); - for( x = 0; x < cols; x++ ) - sptr[x] = (float)sptr0[x]; - } - else if( stype == CV_32SC1 ) - { - const int* sptr0 = disparity.ptr(y); - for( x = 0; x < cols; x++ ) - sptr[x] = (float)sptr0[x]; - } - else - sptr = (float*)disparity.ptr(y); - - if( dtype == CV_32FC3 ) - dptr = _3dImage.ptr(y); - - for( x = 0; x < cols; x++, qx += q[0][0], qy += q[1][0], qz += q[2][0], qw += q[3][0] ) - { - double d = sptr[x]; - double iW = 1./(qw + q[3][2]*d); - double X = (qx + q[0][2]*d)*iW; - double Y = (qy + q[1][2]*d)*iW; - double Z = (qz + q[2][2]*d)*iW; - if( fabs(d-minDisparity) <= FLT_EPSILON ) - Z = bigZ; - - dptr[x*3] = (float)X; - dptr[x*3+1] = (float)Y; - dptr[x*3+2] = (float)Z; - } - - if( dtype == CV_16SC3 ) - { - short* dptr0 = _3dImage.ptr(y); - for( x = 0; x < cols*3; x++ ) - { - int ival = cvRound(dptr[x]); - dptr0[x] = CV_CAST_16S(ival); - } - } - else if( dtype == CV_32SC3 ) - { - int* dptr0 = _3dImage.ptr(y); - for( x = 0; x < cols*3; x++ ) - { - int ival = cvRound(dptr[x]); - dptr0[x] = ival; - } - } - } -} - - -void cvReprojectImageTo3D( const CvArr* disparityImage, - CvArr* _3dImage, const CvMat* matQ, - int handleMissingValues ) -{ - cv::Mat disp = cv::cvarrToMat(disparityImage); - cv::Mat _3dimg = cv::cvarrToMat(_3dImage); - cv::Mat mq = cv::cvarrToMat(matQ); - CV_Assert( disp.size() == _3dimg.size() ); - int dtype = _3dimg.type(); - CV_Assert( dtype == CV_16SC3 || dtype == CV_32SC3 || dtype == CV_32FC3 ); - - cv::reprojectImageTo3D(disp, _3dimg, mq, handleMissingValues != 0, dtype ); -} - - -CV_IMPL void -cvRQDecomp3x3( const CvMat *matrixM, CvMat *matrixR, CvMat *matrixQ, - CvMat *matrixQx, CvMat *matrixQy, CvMat *matrixQz, - CvPoint3D64f *eulerAngles) -{ - double matM[3][3], matR[3][3], matQ[3][3]; - CvMat M = cvMat(3, 3, CV_64F, matM); - CvMat R = cvMat(3, 3, CV_64F, matR); - CvMat Q = cvMat(3, 3, CV_64F, matQ); - double z, c, s; - - /* Validate parameters. */ - CV_Assert( CV_IS_MAT(matrixM) && CV_IS_MAT(matrixR) && CV_IS_MAT(matrixQ) && - matrixM->cols == 3 && matrixM->rows == 3 && - CV_ARE_SIZES_EQ(matrixM, matrixR) && CV_ARE_SIZES_EQ(matrixM, matrixQ)); - - cvConvert(matrixM, &M); - - /* Find Givens rotation Q_x for x axis (left multiplication). */ - /* - ( 1 0 0 ) - Qx = ( 0 c s ), c = m33/sqrt(m32^2 + m33^2), s = m32/sqrt(m32^2 + m33^2) - ( 0 -s c ) - */ - s = matM[2][1]; - c = matM[2][2]; - z = 1./sqrt(c * c + s * s + DBL_EPSILON); - c *= z; - s *= z; - - double _Qx[3][3] = { {1, 0, 0}, {0, c, s}, {0, -s, c} }; - CvMat Qx = cvMat(3, 3, CV_64F, _Qx); - - cvMatMul(&M, &Qx, &R); - assert(fabs(matR[2][1]) < FLT_EPSILON); - matR[2][1] = 0; - - /* Find Givens rotation for y axis. */ - /* - ( c 0 -s ) - Qy = ( 0 1 0 ), c = m33/sqrt(m31^2 + m33^2), s = -m31/sqrt(m31^2 + m33^2) - ( s 0 c ) - */ - s = -matR[2][0]; - c = matR[2][2]; - z = 1./sqrt(c * c + s * s + DBL_EPSILON); - c *= z; - s *= z; - - double _Qy[3][3] = { {c, 0, -s}, {0, 1, 0}, {s, 0, c} }; - CvMat Qy = cvMat(3, 3, CV_64F, _Qy); - cvMatMul(&R, &Qy, &M); - - assert(fabs(matM[2][0]) < FLT_EPSILON); - matM[2][0] = 0; - - /* Find Givens rotation for z axis. */ - /* - ( c s 0 ) - Qz = (-s c 0 ), c = m22/sqrt(m21^2 + m22^2), s = m21/sqrt(m21^2 + m22^2) - ( 0 0 1 ) - */ - - s = matM[1][0]; - c = matM[1][1]; - z = 1./sqrt(c * c + s * s + DBL_EPSILON); - c *= z; - s *= z; - - double _Qz[3][3] = { {c, s, 0}, {-s, c, 0}, {0, 0, 1} }; - CvMat Qz = cvMat(3, 3, CV_64F, _Qz); - - cvMatMul(&M, &Qz, &R); - assert(fabs(matR[1][0]) < FLT_EPSILON); - matR[1][0] = 0; - - // Solve the decomposition ambiguity. - // Diagonal entries of R, except the last one, shall be positive. - // Further rotate R by 180 degree if necessary - if( matR[0][0] < 0 ) - { - if( matR[1][1] < 0 ) - { - // rotate around z for 180 degree, i.e. a rotation matrix of - // [-1, 0, 0], - // [ 0, -1, 0], - // [ 0, 0, 1] - matR[0][0] *= -1; - matR[0][1] *= -1; - matR[1][1] *= -1; - - _Qz[0][0] *= -1; - _Qz[0][1] *= -1; - _Qz[1][0] *= -1; - _Qz[1][1] *= -1; - } - else - { - // rotate around y for 180 degree, i.e. a rotation matrix of - // [-1, 0, 0], - // [ 0, 1, 0], - // [ 0, 0, -1] - matR[0][0] *= -1; - matR[0][2] *= -1; - matR[1][2] *= -1; - matR[2][2] *= -1; - - cvTranspose( &Qz, &Qz ); - - _Qy[0][0] *= -1; - _Qy[0][2] *= -1; - _Qy[2][0] *= -1; - _Qy[2][2] *= -1; - } - } - else if( matR[1][1] < 0 ) - { - // ??? for some reason, we never get here ??? - - // rotate around x for 180 degree, i.e. a rotation matrix of - // [ 1, 0, 0], - // [ 0, -1, 0], - // [ 0, 0, -1] - matR[0][1] *= -1; - matR[0][2] *= -1; - matR[1][1] *= -1; - matR[1][2] *= -1; - matR[2][2] *= -1; - - cvTranspose( &Qz, &Qz ); - cvTranspose( &Qy, &Qy ); - - _Qx[1][1] *= -1; - _Qx[1][2] *= -1; - _Qx[2][1] *= -1; - _Qx[2][2] *= -1; - } - - // calculate the euler angle - if( eulerAngles ) - { - eulerAngles->x = acos(_Qx[1][1]) * (_Qx[1][2] >= 0 ? 1 : -1) * (180.0 / CV_PI); - eulerAngles->y = acos(_Qy[0][0]) * (_Qy[2][0] >= 0 ? 1 : -1) * (180.0 / CV_PI); - eulerAngles->z = acos(_Qz[0][0]) * (_Qz[0][1] >= 0 ? 1 : -1) * (180.0 / CV_PI); - } - - /* Calulate orthogonal matrix. */ - /* - Q = QzT * QyT * QxT - */ - cvGEMM( &Qz, &Qy, 1, 0, 0, &M, CV_GEMM_A_T + CV_GEMM_B_T ); - cvGEMM( &M, &Qx, 1, 0, 0, &Q, CV_GEMM_B_T ); - - /* Save R and Q matrices. */ - cvConvert( &R, matrixR ); - cvConvert( &Q, matrixQ ); - - if( matrixQx ) - cvConvert(&Qx, matrixQx); - if( matrixQy ) - cvConvert(&Qy, matrixQy); - if( matrixQz ) - cvConvert(&Qz, matrixQz); -} - - -CV_IMPL void -cvDecomposeProjectionMatrix( const CvMat *projMatr, CvMat *calibMatr, - CvMat *rotMatr, CvMat *posVect, - CvMat *rotMatrX, CvMat *rotMatrY, - CvMat *rotMatrZ, CvPoint3D64f *eulerAngles) -{ - double tmpProjMatrData[16], tmpMatrixDData[16], tmpMatrixVData[16]; - CvMat tmpProjMatr = cvMat(4, 4, CV_64F, tmpProjMatrData); - CvMat tmpMatrixD = cvMat(4, 4, CV_64F, tmpMatrixDData); - CvMat tmpMatrixV = cvMat(4, 4, CV_64F, tmpMatrixVData); - CvMat tmpMatrixM; - - /* Validate parameters. */ - if(projMatr == 0 || calibMatr == 0 || rotMatr == 0 || posVect == 0) - CV_Error(CV_StsNullPtr, "Some of parameters is a NULL pointer!"); - - if(!CV_IS_MAT(projMatr) || !CV_IS_MAT(calibMatr) || !CV_IS_MAT(rotMatr) || !CV_IS_MAT(posVect)) - CV_Error(CV_StsUnsupportedFormat, "Input parameters must be a matrices!"); - - if(projMatr->cols != 4 || projMatr->rows != 3) - CV_Error(CV_StsUnmatchedSizes, "Size of projection matrix must be 3x4!"); - - if(calibMatr->cols != 3 || calibMatr->rows != 3 || rotMatr->cols != 3 || rotMatr->rows != 3) - CV_Error(CV_StsUnmatchedSizes, "Size of calibration and rotation matrices must be 3x3!"); - - if(posVect->cols != 1 || posVect->rows != 4) - CV_Error(CV_StsUnmatchedSizes, "Size of position vector must be 4x1!"); - - /* Compute position vector. */ - cvSetZero(&tmpProjMatr); // Add zero row to make matrix square. - int i, k; - for(i = 0; i < 3; i++) - for(k = 0; k < 4; k++) - cvmSet(&tmpProjMatr, i, k, cvmGet(projMatr, i, k)); - - cvSVD(&tmpProjMatr, &tmpMatrixD, NULL, &tmpMatrixV, CV_SVD_MODIFY_A + CV_SVD_V_T); - - /* Save position vector. */ - for(i = 0; i < 4; i++) - cvmSet(posVect, i, 0, cvmGet(&tmpMatrixV, 3, i)); // Solution is last row of V. - - /* Compute calibration and rotation matrices via RQ decomposition. */ - cvGetCols(projMatr, &tmpMatrixM, 0, 3); // M is first square matrix of P. - - CV_Assert(cvDet(&tmpMatrixM) != 0.0); // So far only finite cameras could be decomposed, so M has to be nonsingular [det(M) != 0]. - - cvRQDecomp3x3(&tmpMatrixM, calibMatr, rotMatr, rotMatrX, rotMatrY, rotMatrZ, eulerAngles); -} - - - -namespace cv -{ - -static void collectCalibrationData( InputArrayOfArrays objectPoints, - InputArrayOfArrays imagePoints1, - InputArrayOfArrays imagePoints2, - Mat& objPtMat, Mat& imgPtMat1, Mat* imgPtMat2, - Mat& npoints ) -{ - int nimages = (int)objectPoints.total(); - int i, j = 0, ni = 0, total = 0; - CV_Assert(nimages > 0 && nimages == (int)imagePoints1.total() && - (!imgPtMat2 || nimages == (int)imagePoints2.total())); - - for( i = 0; i < nimages; i++ ) - { - ni = objectPoints.getMat(i).checkVector(3, CV_32F); - CV_Assert( ni >= 0 ); - total += ni; - } - - npoints.create(1, (int)nimages, CV_32S); - objPtMat.create(1, (int)total, CV_32FC3); - imgPtMat1.create(1, (int)total, CV_32FC2); - Point2f* imgPtData2 = 0; - - if( imgPtMat2 ) - { - imgPtMat2->create(1, (int)total, CV_32FC2); - imgPtData2 = imgPtMat2->ptr(); - } - - Point3f* objPtData = objPtMat.ptr(); - Point2f* imgPtData1 = imgPtMat1.ptr(); - - for( i = 0; i < nimages; i++, j += ni ) - { - Mat objpt = objectPoints.getMat(i); - Mat imgpt1 = imagePoints1.getMat(i); - ni = objpt.checkVector(3, CV_32F); - int ni1 = imgpt1.checkVector(2, CV_32F); - CV_Assert( ni > 0 && ni == ni1 ); - npoints.at(i) = ni; - memcpy( objPtData + j, objpt.data, ni*sizeof(objPtData[0]) ); - memcpy( imgPtData1 + j, imgpt1.data, ni*sizeof(imgPtData1[0]) ); - - if( imgPtData2 ) - { - Mat imgpt2 = imagePoints2.getMat(i); - int ni2 = imgpt2.checkVector(2, CV_32F); - CV_Assert( ni == ni2 ); - memcpy( imgPtData2 + j, imgpt2.data, ni*sizeof(imgPtData2[0]) ); - } - } -} - - -static Mat prepareCameraMatrix(Mat& cameraMatrix0, int rtype) -{ - Mat cameraMatrix = Mat::eye(3, 3, rtype); - if( cameraMatrix0.size() == cameraMatrix.size() ) - cameraMatrix0.convertTo(cameraMatrix, rtype); - return cameraMatrix; -} - -static Mat prepareDistCoeffs(Mat& distCoeffs0, int rtype) -{ - Mat distCoeffs = Mat::zeros(distCoeffs0.cols == 1 ? Size(1, 8) : Size(8, 1), rtype); - if( distCoeffs0.size() == Size(1, 4) || - distCoeffs0.size() == Size(1, 5) || - distCoeffs0.size() == Size(1, 8) || - distCoeffs0.size() == Size(4, 1) || - distCoeffs0.size() == Size(5, 1) || - distCoeffs0.size() == Size(8, 1) ) - { - Mat dstCoeffs(distCoeffs, Rect(0, 0, distCoeffs0.cols, distCoeffs0.rows)); - distCoeffs0.convertTo(dstCoeffs, rtype); - } - return distCoeffs; -} - -} // namespace cv - - -void cv::Rodrigues(InputArray _src, OutputArray _dst, OutputArray _jacobian) -{ - Mat src = _src.getMat(); - bool v2m = src.cols == 1 || src.rows == 1; - _dst.create(3, v2m ? 3 : 1, src.depth()); - Mat dst = _dst.getMat(); - CvMat _csrc = src, _cdst = dst, _cjacobian; - if( _jacobian.needed() ) - { - _jacobian.create(v2m ? Size(9, 3) : Size(3, 9), src.depth()); - _cjacobian = _jacobian.getMat(); - } - bool ok = cvRodrigues2(&_csrc, &_cdst, _jacobian.needed() ? &_cjacobian : 0) > 0; - if( !ok ) - dst = Scalar(0); -} - -void cv::matMulDeriv( InputArray _Amat, InputArray _Bmat, - OutputArray _dABdA, OutputArray _dABdB ) -{ - Mat A = _Amat.getMat(), B = _Bmat.getMat(); - _dABdA.create(A.rows*B.cols, A.rows*A.cols, A.type()); - _dABdB.create(A.rows*B.cols, B.rows*B.cols, A.type()); - CvMat matA = A, matB = B, c_dABdA = _dABdA.getMat(), c_dABdB = _dABdB.getMat(); - cvCalcMatMulDeriv(&matA, &matB, &c_dABdA, &c_dABdB); -} - - -void cv::composeRT( InputArray _rvec1, InputArray _tvec1, - InputArray _rvec2, InputArray _tvec2, - OutputArray _rvec3, OutputArray _tvec3, - OutputArray _dr3dr1, OutputArray _dr3dt1, - OutputArray _dr3dr2, OutputArray _dr3dt2, - OutputArray _dt3dr1, OutputArray _dt3dt1, - OutputArray _dt3dr2, OutputArray _dt3dt2 ) -{ - Mat rvec1 = _rvec1.getMat(), tvec1 = _tvec1.getMat(); - Mat rvec2 = _rvec2.getMat(), tvec2 = _tvec2.getMat(); - int rtype = rvec1.type(); - _rvec3.create(rvec1.size(), rtype); - _tvec3.create(tvec1.size(), rtype); - Mat rvec3 = _rvec3.getMat(), tvec3 = _tvec3.getMat(); - - CvMat c_rvec1 = rvec1, c_tvec1 = tvec1, c_rvec2 = rvec2, - c_tvec2 = tvec2, c_rvec3 = rvec3, c_tvec3 = tvec3; - CvMat c_dr3dr1, c_dr3dt1, c_dr3dr2, c_dr3dt2, c_dt3dr1, c_dt3dt1, c_dt3dr2, c_dt3dt2; - CvMat *p_dr3dr1=0, *p_dr3dt1=0, *p_dr3dr2=0, *p_dr3dt2=0, *p_dt3dr1=0, *p_dt3dt1=0, *p_dt3dr2=0, *p_dt3dt2=0; - - if( _dr3dr1.needed() ) - { - _dr3dr1.create(3, 3, rtype); - p_dr3dr1 = &(c_dr3dr1 = _dr3dr1.getMat()); - } - - if( _dr3dt1.needed() ) - { - _dr3dt1.create(3, 3, rtype); - p_dr3dt1 = &(c_dr3dt1 = _dr3dt1.getMat()); - } - - if( _dr3dr2.needed() ) - { - _dr3dr2.create(3, 3, rtype); - p_dr3dr2 = &(c_dr3dr2 = _dr3dr2.getMat()); - } - - if( _dr3dt2.needed() ) - { - _dr3dt2.create(3, 3, rtype); - p_dr3dt2 = &(c_dr3dt2 = _dr3dt2.getMat()); - } - - if( _dt3dr1.needed() ) - { - _dt3dr1.create(3, 3, rtype); - p_dt3dr1 = &(c_dt3dr1 = _dt3dr1.getMat()); - } - - if( _dt3dt1.needed() ) - { - _dt3dt1.create(3, 3, rtype); - p_dt3dt1 = &(c_dt3dt1 = _dt3dt1.getMat()); - } - - if( _dt3dr2.needed() ) - { - _dt3dr2.create(3, 3, rtype); - p_dt3dr2 = &(c_dt3dr2 = _dt3dr2.getMat()); - } - - if( _dt3dt2.needed() ) - { - _dt3dt2.create(3, 3, rtype); - p_dt3dt2 = &(c_dt3dt2 = _dt3dt2.getMat()); - } - - cvComposeRT(&c_rvec1, &c_tvec1, &c_rvec2, &c_tvec2, &c_rvec3, &c_tvec3, - p_dr3dr1, p_dr3dt1, p_dr3dr2, p_dr3dt2, - p_dt3dr1, p_dt3dt1, p_dt3dr2, p_dt3dt2); -} - - -void cv::projectPoints( InputArray _opoints, - InputArray _rvec, - InputArray _tvec, - InputArray _cameraMatrix, - InputArray _distCoeffs, - OutputArray _ipoints, - OutputArray _jacobian, - double aspectRatio ) -{ - Mat opoints = _opoints.getMat(); - int npoints = opoints.checkVector(3), depth = opoints.depth(); - CV_Assert(npoints >= 0 && (depth == CV_32F || depth == CV_64F)); - - CvMat dpdrot, dpdt, dpdf, dpdc, dpddist; - CvMat *pdpdrot=0, *pdpdt=0, *pdpdf=0, *pdpdc=0, *pdpddist=0; - - _ipoints.create(npoints, 1, CV_MAKETYPE(depth, 2), -1, true); - CvMat c_imagePoints = _ipoints.getMat(); - CvMat c_objectPoints = opoints; - Mat cameraMatrix = _cameraMatrix.getMat(); - - Mat rvec = _rvec.getMat(), tvec = _tvec.getMat(); - CvMat c_cameraMatrix = cameraMatrix; - CvMat c_rvec = rvec, c_tvec = tvec; - - double dc0buf[5]={0}; - Mat dc0(5,1,CV_64F,dc0buf); - Mat distCoeffs = _distCoeffs.getMat(); - if( distCoeffs.empty() ) - distCoeffs = dc0; - CvMat c_distCoeffs = distCoeffs; - int ndistCoeffs = distCoeffs.rows + distCoeffs.cols - 1; - - if( _jacobian.needed() ) - { - _jacobian.create(npoints*2, 3+3+2+2+ndistCoeffs, CV_64F); - Mat jacobian = _jacobian.getMat(); - pdpdrot = &(dpdrot = jacobian.colRange(0, 3)); - pdpdt = &(dpdt = jacobian.colRange(3, 6)); - pdpdf = &(dpdf = jacobian.colRange(6, 8)); - pdpdc = &(dpdc = jacobian.colRange(8, 10)); - pdpddist = &(dpddist = jacobian.colRange(10, 10+ndistCoeffs)); - } - - cvProjectPoints2( &c_objectPoints, &c_rvec, &c_tvec, &c_cameraMatrix, &c_distCoeffs, - &c_imagePoints, pdpdrot, pdpdt, pdpdf, pdpdc, pdpddist, aspectRatio ); -} - -cv::Mat cv::initCameraMatrix2D( InputArrayOfArrays objectPoints, - InputArrayOfArrays imagePoints, - Size imageSize, double aspectRatio ) -{ - Mat objPt, imgPt, npoints, cameraMatrix(3, 3, CV_64F); - collectCalibrationData( objectPoints, imagePoints, noArray(), - objPt, imgPt, 0, npoints ); - CvMat _objPt = objPt, _imgPt = imgPt, _npoints = npoints, _cameraMatrix = cameraMatrix; - cvInitIntrinsicParams2D( &_objPt, &_imgPt, &_npoints, - imageSize, &_cameraMatrix, aspectRatio ); - return cameraMatrix; -} - - -double cv::calibrateCamera( InputArrayOfArrays _objectPoints, - InputArrayOfArrays _imagePoints, - Size imageSize, InputOutputArray _cameraMatrix, InputOutputArray _distCoeffs, - OutputArrayOfArrays _rvecs, OutputArrayOfArrays _tvecs, int flags, TermCriteria criteria ) -{ - int rtype = CV_64F; - Mat cameraMatrix = _cameraMatrix.getMat(); - cameraMatrix = prepareCameraMatrix(cameraMatrix, rtype); - Mat distCoeffs = _distCoeffs.getMat(); - distCoeffs = prepareDistCoeffs(distCoeffs, rtype); - if( !(flags & CALIB_RATIONAL_MODEL) ) - distCoeffs = distCoeffs.rows == 1 ? distCoeffs.colRange(0, 5) : distCoeffs.rowRange(0, 5); - - int i; - size_t nimages = _objectPoints.total(); - CV_Assert( nimages > 0 ); - Mat objPt, imgPt, npoints, rvecM((int)nimages, 3, CV_64FC1), tvecM((int)nimages, 3, CV_64FC1); - collectCalibrationData( _objectPoints, _imagePoints, noArray(), - objPt, imgPt, 0, npoints ); - CvMat c_objPt = objPt, c_imgPt = imgPt, c_npoints = npoints; - CvMat c_cameraMatrix = cameraMatrix, c_distCoeffs = distCoeffs; - CvMat c_rvecM = rvecM, c_tvecM = tvecM; - - double reprojErr = cvCalibrateCamera2(&c_objPt, &c_imgPt, &c_npoints, imageSize, - &c_cameraMatrix, &c_distCoeffs, &c_rvecM, - &c_tvecM, flags, criteria ); - - bool rvecs_needed = _rvecs.needed(), tvecs_needed = _tvecs.needed(); - - if( rvecs_needed ) - _rvecs.create((int)nimages, 1, CV_64FC3); - if( tvecs_needed ) - _tvecs.create((int)nimages, 1, CV_64FC3); - - for( i = 0; i < (int)nimages; i++ ) - { - if( rvecs_needed ) - { - _rvecs.create(3, 1, CV_64F, i, true); - Mat rv = _rvecs.getMat(i); - memcpy(rv.data, rvecM.ptr(i), 3*sizeof(double)); - } - if( tvecs_needed ) - { - _tvecs.create(3, 1, CV_64F, i, true); - Mat tv = _tvecs.getMat(i); - memcpy(tv.data, tvecM.ptr(i), 3*sizeof(double)); - } - } - cameraMatrix.copyTo(_cameraMatrix); - distCoeffs.copyTo(_distCoeffs); - - return reprojErr; -} - - -void cv::calibrationMatrixValues( InputArray _cameraMatrix, Size imageSize, - double apertureWidth, double apertureHeight, - double& fovx, double& fovy, double& focalLength, - Point2d& principalPoint, double& aspectRatio ) -{ - Mat cameraMatrix = _cameraMatrix.getMat(); - CvMat c_cameraMatrix = cameraMatrix; - cvCalibrationMatrixValues( &c_cameraMatrix, imageSize, apertureWidth, apertureHeight, - &fovx, &fovy, &focalLength, (CvPoint2D64f*)&principalPoint, &aspectRatio ); -} - -double cv::stereoCalibrate( InputArrayOfArrays _objectPoints, - InputArrayOfArrays _imagePoints1, - InputArrayOfArrays _imagePoints2, - InputOutputArray _cameraMatrix1, InputOutputArray _distCoeffs1, - InputOutputArray _cameraMatrix2, InputOutputArray _distCoeffs2, - Size imageSize, OutputArray _Rmat, OutputArray _Tmat, - OutputArray _Emat, OutputArray _Fmat, TermCriteria criteria, - int flags ) -{ - int rtype = CV_64F; - Mat cameraMatrix1 = _cameraMatrix1.getMat(); - Mat cameraMatrix2 = _cameraMatrix2.getMat(); - Mat distCoeffs1 = _distCoeffs1.getMat(); - Mat distCoeffs2 = _distCoeffs2.getMat(); - cameraMatrix1 = prepareCameraMatrix(cameraMatrix1, rtype); - cameraMatrix2 = prepareCameraMatrix(cameraMatrix2, rtype); - distCoeffs1 = prepareDistCoeffs(distCoeffs1, rtype); - distCoeffs2 = prepareDistCoeffs(distCoeffs2, rtype); - - if( !(flags & CALIB_RATIONAL_MODEL) ) - { - distCoeffs1 = distCoeffs1.rows == 1 ? distCoeffs1.colRange(0, 5) : distCoeffs1.rowRange(0, 5); - distCoeffs2 = distCoeffs2.rows == 1 ? distCoeffs2.colRange(0, 5) : distCoeffs2.rowRange(0, 5); - } - - _Rmat.create(3, 3, rtype); - _Tmat.create(3, 1, rtype); - - Mat objPt, imgPt, imgPt2, npoints; - - collectCalibrationData( _objectPoints, _imagePoints1, _imagePoints2, - objPt, imgPt, &imgPt2, npoints ); - CvMat c_objPt = objPt, c_imgPt = imgPt, c_imgPt2 = imgPt2, c_npoints = npoints; - CvMat c_cameraMatrix1 = cameraMatrix1, c_distCoeffs1 = distCoeffs1; - CvMat c_cameraMatrix2 = cameraMatrix2, c_distCoeffs2 = distCoeffs2; - CvMat c_matR = _Rmat.getMat(), c_matT = _Tmat.getMat(), c_matE, c_matF, *p_matE = 0, *p_matF = 0; - - if( _Emat.needed() ) - { - _Emat.create(3, 3, rtype); - p_matE = &(c_matE = _Emat.getMat()); - } - if( _Fmat.needed() ) - { - _Fmat.create(3, 3, rtype); - p_matF = &(c_matF = _Fmat.getMat()); - } - - double err = cvStereoCalibrate(&c_objPt, &c_imgPt, &c_imgPt2, &c_npoints, &c_cameraMatrix1, - &c_distCoeffs1, &c_cameraMatrix2, &c_distCoeffs2, imageSize, - &c_matR, &c_matT, p_matE, p_matF, criteria, flags ); - - cameraMatrix1.copyTo(_cameraMatrix1); - cameraMatrix2.copyTo(_cameraMatrix2); - distCoeffs1.copyTo(_distCoeffs1); - distCoeffs2.copyTo(_distCoeffs2); - - return err; -} - - -void cv::stereoRectify( InputArray _cameraMatrix1, InputArray _distCoeffs1, - InputArray _cameraMatrix2, InputArray _distCoeffs2, - Size imageSize, InputArray _Rmat, InputArray _Tmat, - OutputArray _Rmat1, OutputArray _Rmat2, - OutputArray _Pmat1, OutputArray _Pmat2, - OutputArray _Qmat, int flags, - double alpha, Size newImageSize, - Rect* validPixROI1, Rect* validPixROI2 ) -{ - Mat cameraMatrix1 = _cameraMatrix1.getMat(), cameraMatrix2 = _cameraMatrix2.getMat(); - Mat distCoeffs1 = _distCoeffs1.getMat(), distCoeffs2 = _distCoeffs2.getMat(); - Mat Rmat = _Rmat.getMat(), Tmat = _Tmat.getMat(); - CvMat c_cameraMatrix1 = cameraMatrix1; - CvMat c_cameraMatrix2 = cameraMatrix2; - CvMat c_distCoeffs1 = distCoeffs1; - CvMat c_distCoeffs2 = distCoeffs2; - CvMat c_R = Rmat, c_T = Tmat; - - int rtype = CV_64F; - _Rmat1.create(3, 3, rtype); - _Rmat2.create(3, 3, rtype); - _Pmat1.create(3, 4, rtype); - _Pmat2.create(3, 4, rtype); - CvMat c_R1 = _Rmat1.getMat(), c_R2 = _Rmat2.getMat(), c_P1 = _Pmat1.getMat(), c_P2 = _Pmat2.getMat(); - CvMat c_Q, *p_Q = 0; - - if( _Qmat.needed() ) - { - _Qmat.create(4, 4, rtype); - p_Q = &(c_Q = _Qmat.getMat()); - } - - cvStereoRectify( &c_cameraMatrix1, &c_cameraMatrix2, &c_distCoeffs1, &c_distCoeffs2, - imageSize, &c_R, &c_T, &c_R1, &c_R2, &c_P1, &c_P2, p_Q, flags, alpha, - newImageSize, (CvRect*)validPixROI1, (CvRect*)validPixROI2); -} - -bool cv::stereoRectifyUncalibrated( InputArray _points1, InputArray _points2, - InputArray _Fmat, Size imgSize, - OutputArray _Hmat1, OutputArray _Hmat2, double threshold ) -{ - int rtype = CV_64F; - _Hmat1.create(3, 3, rtype); - _Hmat2.create(3, 3, rtype); - Mat F = _Fmat.getMat(); - Mat points1 = _points1.getMat(), points2 = _points2.getMat(); - CvMat c_pt1 = points1, c_pt2 = points2; - CvMat c_F, *p_F=0, c_H1 = _Hmat1.getMat(), c_H2 = _Hmat2.getMat(); - if( F.size() == Size(3, 3) ) - p_F = &(c_F = F); - return cvStereoRectifyUncalibrated(&c_pt1, &c_pt2, p_F, imgSize, &c_H1, &c_H2, threshold) > 0; -} - -cv::Mat cv::getOptimalNewCameraMatrix( InputArray _cameraMatrix, - InputArray _distCoeffs, - Size imgSize, double alpha, Size newImgSize, - Rect* validPixROI, bool centerPrincipalPoint ) -{ - Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat(); - CvMat c_cameraMatrix = cameraMatrix, c_distCoeffs = distCoeffs; - - Mat newCameraMatrix(3, 3, CV_MAT_TYPE(c_cameraMatrix.type)); - CvMat c_newCameraMatrix = newCameraMatrix; - - cvGetOptimalNewCameraMatrix(&c_cameraMatrix, &c_distCoeffs, imgSize, - alpha, &c_newCameraMatrix, - newImgSize, (CvRect*)validPixROI, (int)centerPrincipalPoint); - return newCameraMatrix; -} - - -cv::Vec3d cv::RQDecomp3x3( InputArray _Mmat, - OutputArray _Rmat, - OutputArray _Qmat, - OutputArray _Qx, - OutputArray _Qy, - OutputArray _Qz ) -{ - Mat M = _Mmat.getMat(); - _Rmat.create(3, 3, M.type()); - _Qmat.create(3, 3, M.type()); - Vec3d eulerAngles; - - CvMat matM = M, matR = _Rmat.getMat(), matQ = _Qmat.getMat(), Qx, Qy, Qz, *pQx=0, *pQy=0, *pQz=0; - if( _Qx.needed() ) - { - _Qx.create(3, 3, M.type()); - pQx = &(Qx = _Qx.getMat()); - } - if( _Qy.needed() ) - { - _Qy.create(3, 3, M.type()); - pQy = &(Qy = _Qy.getMat()); - } - if( _Qz.needed() ) - { - _Qz.create(3, 3, M.type()); - pQz = &(Qz = _Qz.getMat()); - } - cvRQDecomp3x3(&matM, &matR, &matQ, pQx, pQy, pQz, (CvPoint3D64f*)&eulerAngles[0]); - return eulerAngles; -} - - -void cv::decomposeProjectionMatrix( InputArray _projMatrix, OutputArray _cameraMatrix, - OutputArray _rotMatrix, OutputArray _transVect, - OutputArray _rotMatrixX, OutputArray _rotMatrixY, - OutputArray _rotMatrixZ, OutputArray _eulerAngles ) -{ - Mat projMatrix = _projMatrix.getMat(); - int type = projMatrix.type(); - _cameraMatrix.create(3, 3, type); - _rotMatrix.create(3, 3, type); - _transVect.create(4, 1, type); - CvMat c_projMatrix = projMatrix, c_cameraMatrix = _cameraMatrix.getMat(); - CvMat c_rotMatrix = _rotMatrix.getMat(), c_transVect = _transVect.getMat(); - CvMat c_rotMatrixX, *p_rotMatrixX = 0; - CvMat c_rotMatrixY, *p_rotMatrixY = 0; - CvMat c_rotMatrixZ, *p_rotMatrixZ = 0; - CvPoint3D64f *p_eulerAngles = 0; - - if( _rotMatrixX.needed() ) - { - _rotMatrixX.create(3, 3, type); - p_rotMatrixX = &(c_rotMatrixX = _rotMatrixX.getMat()); - } - if( _rotMatrixY.needed() ) - { - _rotMatrixY.create(3, 3, type); - p_rotMatrixY = &(c_rotMatrixY = _rotMatrixY.getMat()); - } - if( _rotMatrixZ.needed() ) - { - _rotMatrixZ.create(3, 3, type); - p_rotMatrixZ = &(c_rotMatrixZ = _rotMatrixZ.getMat()); - } - if( _eulerAngles.needed() ) - { - _eulerAngles.create(3, 1, CV_64F, -1, true); - p_eulerAngles = (CvPoint3D64f*)_eulerAngles.getMat().data; - } - - cvDecomposeProjectionMatrix(&c_projMatrix, &c_cameraMatrix, &c_rotMatrix, - &c_transVect, p_rotMatrixX, p_rotMatrixY, - p_rotMatrixZ, p_eulerAngles); -} - - -namespace cv -{ - -static void adjust3rdMatrix(InputArrayOfArrays _imgpt1_0, - InputArrayOfArrays _imgpt3_0, - const Mat& cameraMatrix1, const Mat& distCoeffs1, - const Mat& cameraMatrix3, const Mat& distCoeffs3, - const Mat& R1, const Mat& R3, const Mat& P1, Mat& P3 ) -{ - size_t n1 = _imgpt1_0.total(), n3 = _imgpt3_0.total(); - vector imgpt1, imgpt3; - - for( int i = 0; i < (int)std::min(n1, n3); i++ ) - { - Mat pt1 = _imgpt1_0.getMat(i), pt3 = _imgpt3_0.getMat(i); - int ni1 = pt1.checkVector(2, CV_32F), ni3 = pt3.checkVector(2, CV_32F); - CV_Assert( ni1 > 0 && ni1 == ni3 ); - const Point2f* pt1data = pt1.ptr(); - const Point2f* pt3data = pt3.ptr(); - std::copy(pt1data, pt1data + ni1, std::back_inserter(imgpt1)); - std::copy(pt3data, pt3data + ni3, std::back_inserter(imgpt3)); - } - - undistortPoints(imgpt1, imgpt1, cameraMatrix1, distCoeffs1, R1, P1); - undistortPoints(imgpt3, imgpt3, cameraMatrix3, distCoeffs3, R3, P3); - - double y1_ = 0, y2_ = 0, y1y1_ = 0, y1y2_ = 0; - size_t n = imgpt1.size(); - - for( size_t i = 0; i < n; i++ ) - { - double y1 = imgpt3[i].y, y2 = imgpt1[i].y; - - y1_ += y1; y2_ += y2; - y1y1_ += y1*y1; y1y2_ += y1*y2; - } - - y1_ /= n; - y2_ /= n; - y1y1_ /= n; - y1y2_ /= n; - - double a = (y1y2_ - y1_*y2_)/(y1y1_ - y1_*y1_); - double b = y2_ - a*y1_; - - P3.at(0,0) *= a; - P3.at(1,1) *= a; - P3.at(0,2) = P3.at(0,2)*a; - P3.at(1,2) = P3.at(1,2)*a + b; - P3.at(0,3) *= a; - P3.at(1,3) *= a; -} - -} - -float cv::rectify3Collinear( InputArray _cameraMatrix1, InputArray _distCoeffs1, - InputArray _cameraMatrix2, InputArray _distCoeffs2, - InputArray _cameraMatrix3, InputArray _distCoeffs3, - InputArrayOfArrays _imgpt1, - InputArrayOfArrays _imgpt3, - Size imageSize, InputArray _Rmat12, InputArray _Tmat12, - InputArray _Rmat13, InputArray _Tmat13, - OutputArray _Rmat1, OutputArray _Rmat2, OutputArray _Rmat3, - OutputArray _Pmat1, OutputArray _Pmat2, OutputArray _Pmat3, - OutputArray _Qmat, - double alpha, Size newImgSize, - Rect* roi1, Rect* roi2, int flags ) -{ - // first, rectify the 1-2 stereo pair - stereoRectify( _cameraMatrix1, _distCoeffs1, _cameraMatrix2, _distCoeffs2, - imageSize, _Rmat12, _Tmat12, _Rmat1, _Rmat2, _Pmat1, _Pmat2, _Qmat, - flags, alpha, newImgSize, roi1, roi2 ); - - Mat R12 = _Rmat12.getMat(), R13 = _Rmat13.getMat(), T12 = _Tmat12.getMat(), T13 = _Tmat13.getMat(); - - _Rmat3.create(3, 3, CV_64F); - _Pmat3.create(3, 4, CV_64F); - - Mat P1 = _Pmat1.getMat(), P2 = _Pmat2.getMat(); - Mat R3 = _Rmat3.getMat(), P3 = _Pmat3.getMat(); - - // recompute rectification transforms for cameras 1 & 2. - Mat om, r_r, r_r13; - - if( R13.size() != Size(3,3) ) - Rodrigues(R13, r_r13); - else - R13.copyTo(r_r13); - - if( R12.size() == Size(3,3) ) - Rodrigues(R12, om); - else - R12.copyTo(om); - - om *= -0.5; - Rodrigues(om, r_r); // rotate cameras to same orientation by averaging - Mat_ t12 = r_r * T12; - - int idx = fabs(t12(0,0)) > fabs(t12(1,0)) ? 0 : 1; - double c = t12(idx,0), nt = norm(t12, CV_L2); - Mat_ uu = Mat_::zeros(3,1); - uu(idx, 0) = c > 0 ? 1 : -1; - - // calculate global Z rotation - Mat_ ww = t12.cross(uu), wR; - double nw = norm(ww, CV_L2); - ww *= acos(fabs(c)/nt)/nw; - Rodrigues(ww, wR); - - // now rotate camera 3 to make its optical axis parallel to cameras 1 and 2. - R3 = wR*r_r.t()*r_r13.t(); - Mat_ t13 = R3 * T13; - - P2.copyTo(P3); - Mat t = P3.col(3); - t13.copyTo(t); - P3.at(0,3) *= P3.at(0,0); - P3.at(1,3) *= P3.at(1,1); - - if( !_imgpt1.empty() && _imgpt3.empty() ) - adjust3rdMatrix(_imgpt1, _imgpt3, _cameraMatrix1.getMat(), _distCoeffs1.getMat(), - _cameraMatrix3.getMat(), _distCoeffs3.getMat(), _Rmat1.getMat(), R3, P1, P3); - - return (float)((P3.at(idx,3)/P3.at(idx,idx))/ - (P2.at(idx,3)/P2.at(idx,idx))); -} - - -/* End of file. */ diff --git a/modules/calib3d/src/checkchessboard.cpp b/modules/calib3d/src/checkchessboard.cpp deleted file mode 100644 index 60e275d..0000000 --- a/modules/calib3d/src/checkchessboard.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // Intel License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000, Intel Corporation, all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#include "precomp.hpp" - -#include -#include - -//#define DEBUG_WINDOWS - -#if defined(DEBUG_WINDOWS) -# include "opencv2/opencv_modules.hpp" -# ifdef HAVE_OPENCV_HIGHGUI -# include "opencv2/highgui/highgui.hpp" -# else -# undef DEBUG_WINDOWS -# endif -#endif - -static void icvGetQuadrangleHypotheses(CvSeq* contours, std::vector >& quads, int class_id) -{ - const float min_aspect_ratio = 0.3f; - const float max_aspect_ratio = 3.0f; - const float min_box_size = 10.0f; - - for(CvSeq* seq = contours; seq != NULL; seq = seq->h_next) - { - CvBox2D box = cvMinAreaRect2(seq); - float box_size = MAX(box.size.width, box.size.height); - if(box_size < min_box_size) - { - continue; - } - - float aspect_ratio = box.size.width/MAX(box.size.height, 1); - if(aspect_ratio < min_aspect_ratio || aspect_ratio > max_aspect_ratio) - { - continue; - } - - quads.push_back(std::pair(box_size, class_id)); - } -} - -static void countClasses(const std::vector >& pairs, size_t idx1, size_t idx2, std::vector& counts) -{ - counts.assign(2, 0); - for(size_t i = idx1; i != idx2; i++) - { - counts[pairs[i].second]++; - } -} - -inline bool less_pred(const std::pair& p1, const std::pair& p2) -{ - return p1.first < p2.first; -} - -// does a fast check if a chessboard is in the input image. This is a workaround to -// a problem of cvFindChessboardCorners being slow on images with no chessboard -// - src: input image -// - size: chessboard size -// Returns 1 if a chessboard can be in this image and findChessboardCorners should be called, -// 0 if there is no chessboard, -1 in case of error -int cvCheckChessboard(IplImage* src, CvSize size) -{ - if(src->nChannels > 1) - { - cvError(CV_BadNumChannels, "cvCheckChessboard", "supports single-channel images only", - __FILE__, __LINE__); - } - - if(src->depth != 8) - { - cvError(CV_BadDepth, "cvCheckChessboard", "supports depth=8 images only", - __FILE__, __LINE__); - } - - const int erosion_count = 1; - const float black_level = 20.f; - const float white_level = 130.f; - const float black_white_gap = 70.f; - -#if defined(DEBUG_WINDOWS) - cvNamedWindow("1", 1); - cvShowImage("1", src); - cvWaitKey(0); -#endif //DEBUG_WINDOWS - - CvMemStorage* storage = cvCreateMemStorage(); - - IplImage* white = cvCloneImage(src); - IplImage* black = cvCloneImage(src); - - cvErode(white, white, NULL, erosion_count); - cvDilate(black, black, NULL, erosion_count); - IplImage* thresh = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); - - int result = 0; - for(float thresh_level = black_level; thresh_level < white_level && !result; thresh_level += 20.0f) - { - cvThreshold(white, thresh, thresh_level + black_white_gap, 255, CV_THRESH_BINARY); - -#if defined(DEBUG_WINDOWS) - cvShowImage("1", thresh); - cvWaitKey(0); -#endif //DEBUG_WINDOWS - - CvSeq* first = 0; - std::vector > quads; - cvFindContours(thresh, storage, &first, sizeof(CvContour), CV_RETR_CCOMP); - icvGetQuadrangleHypotheses(first, quads, 1); - - cvThreshold(black, thresh, thresh_level, 255, CV_THRESH_BINARY_INV); - -#if defined(DEBUG_WINDOWS) - cvShowImage("1", thresh); - cvWaitKey(0); -#endif //DEBUG_WINDOWS - - cvFindContours(thresh, storage, &first, sizeof(CvContour), CV_RETR_CCOMP); - icvGetQuadrangleHypotheses(first, quads, 0); - - const size_t min_quads_count = size.width*size.height/2; - std::sort(quads.begin(), quads.end(), less_pred); - - // now check if there are many hypotheses with similar sizes - // do this by floodfill-style algorithm - const float size_rel_dev = 0.4f; - - for(size_t i = 0; i < quads.size(); i++) - { - size_t j = i + 1; - for(; j < quads.size(); j++) - { - if(quads[j].first/quads[i].first > 1.0f + size_rel_dev) - { - break; - } - } - - if(j + 1 > min_quads_count + i) - { - // check the number of black and white squares - std::vector counts; - countClasses(quads, i, j, counts); - const int black_count = cvRound(ceil(size.width/2.0)*ceil(size.height/2.0)); - const int white_count = cvRound(floor(size.width/2.0)*floor(size.height/2.0)); - if(counts[0] < black_count*0.75 || - counts[1] < white_count*0.75) - { - continue; - } - result = 1; - break; - } - } - } - - - cvReleaseImage(&thresh); - cvReleaseImage(&white); - cvReleaseImage(&black); - cvReleaseMemStorage(&storage); - - return result; -} diff --git a/modules/calib3d/src/circlesgrid.cpp b/modules/calib3d/src/circlesgrid.cpp deleted file mode 100644 index 853e3ad..0000000 --- a/modules/calib3d/src/circlesgrid.cpp +++ /dev/null @@ -1,1601 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - // Copyright (C) 2009, Willow Garage Inc., all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#include "circlesgrid.hpp" -//#define DEBUG_CIRCLES - -#ifdef DEBUG_CIRCLES -# include "opencv2/opencv_modules.hpp" -# ifdef HAVE_OPENCV_HIGHGUI -# include "opencv2/highgui/highgui.hpp" -# else -# undef DEBUG_CIRCLES -# endif -#endif - -using namespace cv; -using namespace std; - -#ifdef DEBUG_CIRCLES -void drawPoints(const vector &points, Mat &outImage, int radius = 2, Scalar color = Scalar::all(255), int thickness = -1) -{ - for(size_t i=0; i points, const Size &patternSz, vector &patternPoints) -{ -#ifdef HAVE_TEGRA_OPTIMIZATION - if(tegra::hierarchicalClustering(points, patternSz, patternPoints)) - return; -#endif - int j, n = (int)points.size(); - size_t pn = static_cast(patternSz.area()); - - patternPoints.clear(); - if (pn >= points.size()) - { - if (pn == points.size()) - patternPoints = points; - return; - } - - Mat dists(n, n, CV_32FC1, Scalar(0)); - Mat distsMask(dists.size(), CV_8UC1, Scalar(0)); - for(int i = 0; i < n; i++) - { - for(j = i+1; j < n; j++) - { - dists.at(i, j) = (float)norm(points[i] - points[j]); - distsMask.at(i, j) = 255; - //TODO: use symmetry - distsMask.at(j, i) = 255;//distsMask.at(i, j); - dists.at(j, i) = dists.at(i, j); - } - } - - vector > clusters(points.size()); - for(size_t i=0; i(patternSz.area())) - { - return; - } - - patternPoints.reserve(clusters[patternClusterIdx].size()); - for(std::list::iterator it = clusters[patternClusterIdx].begin(); it != clusters[patternClusterIdx].end(); it++) - { - patternPoints.push_back(points[*it]); - } -} - -void CirclesGridClusterFinder::findGrid(const std::vector points, cv::Size _patternSize, vector& centers) -{ - patternSize = _patternSize; - centers.clear(); - if(points.empty()) - { - return; - } - - vector patternPoints; - hierarchicalClustering(points, patternSize, patternPoints); - if(patternPoints.empty()) - { - return; - } - -#ifdef DEBUG_CIRCLES - Mat patternPointsImage(1024, 1248, CV_8UC1, Scalar(0)); - drawPoints(patternPoints, patternPointsImage); - imshow("pattern points", patternPointsImage); -#endif - - vector hull2f; - convexHull(Mat(patternPoints), hull2f, false); - const size_t cornersCount = isAsymmetricGrid ? 6 : 4; - if(hull2f.size() < cornersCount) - return; - - vector corners; - findCorners(hull2f, corners); - if(corners.size() != cornersCount) - return; - - vector outsideCorners, sortedCorners; - if(isAsymmetricGrid) - { - findOutsideCorners(corners, outsideCorners); - const size_t outsideCornersCount = 2; - if(outsideCorners.size() != outsideCornersCount) - return; - } - getSortedCorners(hull2f, corners, outsideCorners, sortedCorners); - if(sortedCorners.size() != cornersCount) - return; - - vector rectifiedPatternPoints; - rectifyPatternPoints(patternPoints, sortedCorners, rectifiedPatternPoints); - if(patternPoints.size() != rectifiedPatternPoints.size()) - return; - - parsePatternPoints(patternPoints, rectifiedPatternPoints, centers); -} - -void CirclesGridClusterFinder::findCorners(const std::vector &hull2f, std::vector &corners) -{ - //find angles (cosines) of vertices in convex hull - vector angles; - for(size_t i=0; i(hull2f.size())) % hull2f.size()] - hull2f[i % hull2f.size()]; - float angle = (float)(vec1.ddot(vec2) / (norm(vec1) * norm(vec2))); - angles.push_back(angle); - } - - //sort angles by cosine - //corners are the most sharp angles (6) - Mat anglesMat = Mat(angles); - Mat sortedIndices; - sortIdx(anglesMat, sortedIndices, CV_SORT_EVERY_COLUMN + CV_SORT_DESCENDING); - CV_Assert(sortedIndices.type() == CV_32SC1); - CV_Assert(sortedIndices.cols == 1); - const int cornersCount = isAsymmetricGrid ? 6 : 4; - Mat cornersIndices; - cv::sort(sortedIndices.rowRange(0, cornersCount), cornersIndices, CV_SORT_EVERY_COLUMN + CV_SORT_ASCENDING); - corners.clear(); - for(int i=0; i(i, 0)]); - } -} - -void CirclesGridClusterFinder::findOutsideCorners(const std::vector &corners, std::vector &outsideCorners) -{ - outsideCorners.clear(); - //find two pairs of the most nearest corners - int i, j, n = (int)corners.size(); - -#ifdef DEBUG_CIRCLES - Mat cornersImage(1024, 1248, CV_8UC1, Scalar(0)); - drawPoints(corners, cornersImage); - imshow("corners", cornersImage); -#endif - - vector tangentVectors(corners.size()); - for(size_t k=0; k(i, j) = val; - cosAngles.at(j, i) = val; - } - } - - //find two parallel sides to which outside corners belong - Point maxLoc; - minMaxLoc(cosAngles, 0, 0, 0, &maxLoc); - const int diffBetweenFalseLines = 3; - if(abs(maxLoc.x - maxLoc.y) == diffBetweenFalseLines) - { - cosAngles.row(maxLoc.x).setTo(0.0f); - cosAngles.col(maxLoc.x).setTo(0.0f); - cosAngles.row(maxLoc.y).setTo(0.0f); - cosAngles.col(maxLoc.y).setTo(0.0f); - minMaxLoc(cosAngles, 0, 0, 0, &maxLoc); - } - -#ifdef DEBUG_CIRCLES - Mat linesImage(1024, 1248, CV_8UC1, Scalar(0)); - line(linesImage, corners[maxLoc.y], corners[(maxLoc.y + 1) % n], Scalar(255)); - line(linesImage, corners[maxLoc.x], corners[(maxLoc.x + 1) % n], Scalar(255)); - imshow("lines", linesImage); -#endif - - int maxIdx = std::max(maxLoc.x, maxLoc.y); - int minIdx = std::min(maxLoc.x, maxLoc.y); - const int bigDiff = 4; - if(maxIdx - minIdx == bigDiff) - { - minIdx += n; - std::swap(maxIdx, minIdx); - } - if(maxIdx - minIdx != n - bigDiff) - { - return; - } - - int outsidersSegmentIdx = (minIdx + maxIdx) / 2; - - outsideCorners.push_back(corners[outsidersSegmentIdx % n]); - outsideCorners.push_back(corners[(outsidersSegmentIdx + 1) % n]); - -#ifdef DEBUG_CIRCLES - drawPoints(outsideCorners, cornersImage, 2, Scalar(128)); - imshow("corners", outsideCornersImage); -#endif -} - -void CirclesGridClusterFinder::getSortedCorners(const std::vector &hull2f, const std::vector &corners, const std::vector &outsideCorners, std::vector &sortedCorners) -{ - Point2f firstCorner; - if(isAsymmetricGrid) - { - Point2f center = std::accumulate(corners.begin(), corners.end(), Point2f(0.0f, 0.0f)); - center *= 1.0 / corners.size(); - - vector centerToCorners; - for(size_t i=0; i 0 - bool isClockwise = crossProduct > 0; - firstCorner = isClockwise ? outsideCorners[1] : outsideCorners[0]; - } - else - { - firstCorner = corners[0]; - } - - std::vector::const_iterator firstCornerIterator = std::find(hull2f.begin(), hull2f.end(), firstCorner); - sortedCorners.clear(); - for(vector::const_iterator it = firstCornerIterator; it != hull2f.end(); it++) - { - vector::const_iterator itCorners = std::find(corners.begin(), corners.end(), *it); - if(itCorners != corners.end()) - { - sortedCorners.push_back(*it); - } - } - for(vector::const_iterator it = hull2f.begin(); it != firstCornerIterator; it++) - { - vector::const_iterator itCorners = std::find(corners.begin(), corners.end(), *it); - if(itCorners != corners.end()) - { - sortedCorners.push_back(*it); - } - } - - if(!isAsymmetricGrid) - { - double dist1 = norm(sortedCorners[0] - sortedCorners[1]); - double dist2 = norm(sortedCorners[1] - sortedCorners[2]); - - if((dist1 > dist2 && patternSize.height > patternSize.width) || (dist1 < dist2 && patternSize.height < patternSize.width)) - { - for(size_t i=0; i &patternPoints, const std::vector &sortedCorners, std::vector &rectifiedPatternPoints) -{ - //indices of corner points in pattern - vector trueIndices; - trueIndices.push_back(Point(0, 0)); - trueIndices.push_back(Point(patternSize.width - 1, 0)); - if(isAsymmetricGrid) - { - trueIndices.push_back(Point(patternSize.width - 1, 1)); - trueIndices.push_back(Point(patternSize.width - 1, patternSize.height - 2)); - } - trueIndices.push_back(Point(patternSize.width - 1, patternSize.height - 1)); - trueIndices.push_back(Point(0, patternSize.height - 1)); - - vector idealPoints; - for(size_t idx=0; idx &patternPoints, const std::vector &rectifiedPatternPoints, std::vector ¢ers) -{ - flann::LinearIndexParams flannIndexParams; - flann::Index flannIndex(Mat(rectifiedPatternPoints).reshape(1), flannIndexParams); - - centers.clear(); - for( int i = 0; i < patternSize.height; i++ ) - { - for( int j = 0; j < patternSize.width; j++ ) - { - Point2f idealPt; - if(isAsymmetricGrid) - idealPt = Point2f((2*j + i % 2)*squareSize, i*squareSize); - else - idealPt = Point2f(j*squareSize, i*squareSize); - - vector query = Mat(idealPt); - int knn = 1; - vector indices(knn); - vector dists(knn); - flannIndex.knnSearch(query, indices, dists, knn, flann::SearchParams()); - centers.push_back(patternPoints.at(indices[0])); - - if(dists[0] > maxRectifiedDistance) - { -#ifdef DEBUG_CIRCLES - cout << "Pattern not detected: too large rectified distance" << endl; -#endif - centers.clear(); - return; - } - } - } -} - -Graph::Graph(size_t n) -{ - for (size_t i = 0; i < n; i++) - { - addVertex(i); - } -} - -bool Graph::doesVertexExist(size_t id) const -{ - return (vertices.find(id) != vertices.end()); -} - -void Graph::addVertex(size_t id) -{ - assert( !doesVertexExist( id ) ); - - vertices.insert(pair (id, Vertex())); -} - -void Graph::addEdge(size_t id1, size_t id2) -{ - assert( doesVertexExist( id1 ) ); - assert( doesVertexExist( id2 ) ); - - vertices[id1].neighbors.insert(id2); - vertices[id2].neighbors.insert(id1); -} - -void Graph::removeEdge(size_t id1, size_t id2) -{ - assert( doesVertexExist( id1 ) ); - assert( doesVertexExist( id2 ) ); - - vertices[id1].neighbors.erase(id2); - vertices[id2].neighbors.erase(id1); -} - -bool Graph::areVerticesAdjacent(size_t id1, size_t id2) const -{ - assert( doesVertexExist( id1 ) ); - assert( doesVertexExist( id2 ) ); - - Vertices::const_iterator it = vertices.find(id1); - return it->second.neighbors.find(id2) != it->second.neighbors.end(); -} - -size_t Graph::getVerticesCount() const -{ - return vertices.size(); -} - -size_t Graph::getDegree(size_t id) const -{ - assert( doesVertexExist(id) ); - - Vertices::const_iterator it = vertices.find(id); - return it->second.neighbors.size(); -} - -void Graph::floydWarshall(cv::Mat &distanceMatrix, int infinity) const -{ - const int edgeWeight = 1; - - const int n = (int)getVerticesCount(); - distanceMatrix.create(n, n, CV_32SC1); - distanceMatrix.setTo(infinity); - for (Vertices::const_iterator it1 = vertices.begin(); it1 != vertices.end(); it1++) - { - distanceMatrix.at ((int)it1->first, (int)it1->first) = 0; - for (Neighbors::const_iterator it2 = it1->second.neighbors.begin(); it2 != it1->second.neighbors.end(); it2++) - { - assert( it1->first != *it2 ); - distanceMatrix.at ((int)it1->first, (int)*it2) = edgeWeight; - } - } - - for (Vertices::const_iterator it1 = vertices.begin(); it1 != vertices.end(); it1++) - { - for (Vertices::const_iterator it2 = vertices.begin(); it2 != vertices.end(); it2++) - { - for (Vertices::const_iterator it3 = vertices.begin(); it3 != vertices.end(); it3++) - { - int i1 = (int)it1->first, i2 = (int)it2->first, i3 = (int)it3->first; - int val1 = distanceMatrix.at (i2, i3); - int val2; - if (distanceMatrix.at (i2, i1) == infinity || - distanceMatrix.at (i1, i3) == infinity) - val2 = val1; - else - { - val2 = distanceMatrix.at (i2, i1) + distanceMatrix.at (i1, i3); - } - distanceMatrix.at (i2, i3) = (val1 == infinity) ? val2 : std::min(val1, val2); - } - } - } -} - -const Graph::Neighbors& Graph::getNeighbors(size_t id) const -{ - assert( doesVertexExist(id) ); - - Vertices::const_iterator it = vertices.find(id); - return it->second.neighbors; -} - -CirclesGridFinder::Segment::Segment(cv::Point2f _s, cv::Point2f _e) : - s(_s), e(_e) -{ -} - -void computeShortestPath(Mat &predecessorMatrix, int v1, int v2, vector &path); -void computePredecessorMatrix(const Mat &dm, int verticesCount, Mat &predecessorMatrix); - -CirclesGridFinderParameters::CirclesGridFinderParameters() -{ - minDensity = 10; - densityNeighborhoodSize = Size2f(16, 16); - minDistanceToAddKeypoint = 20; - kmeansAttempts = 100; - convexHullFactor = 1.1f; - keypointScale = 1; - - minGraphConfidence = 9; - vertexGain = 2; - vertexPenalty = -5; - edgeGain = 1; - edgePenalty = -5; - existingVertexGain = 0; - - minRNGEdgeSwitchDist = 5.f; - gridType = SYMMETRIC_GRID; -} - -CirclesGridFinder::CirclesGridFinder(Size _patternSize, const vector &testKeypoints, - const CirclesGridFinderParameters &_parameters) : - patternSize(static_cast (_patternSize.width), static_cast (_patternSize.height)) -{ - CV_Assert(_patternSize.height >= 0 && _patternSize.width >= 0); - - keypoints = testKeypoints; - parameters = _parameters; - largeHoles = 0; - smallHoles = 0; -} - -bool CirclesGridFinder::findHoles() -{ - switch (parameters.gridType) - { - case CirclesGridFinderParameters::SYMMETRIC_GRID: - { - vector vectors, filteredVectors, basis; - Graph rng(0); - computeRNG(rng, vectors); - filterOutliersByDensity(vectors, filteredVectors); - vector basisGraphs; - findBasis(filteredVectors, basis, basisGraphs); - findMCS(basis, basisGraphs); - break; - } - - case CirclesGridFinderParameters::ASYMMETRIC_GRID: - { - vector vectors, tmpVectors, filteredVectors, basis; - Graph rng(0); - computeRNG(rng, tmpVectors); - rng2gridGraph(rng, vectors); - filterOutliersByDensity(vectors, filteredVectors); - vector basisGraphs; - findBasis(filteredVectors, basis, basisGraphs); - findMCS(basis, basisGraphs); - eraseUsedGraph(basisGraphs); - holes2 = holes; - holes.clear(); - findMCS(basis, basisGraphs); - break; - } - - default: - CV_Error(CV_StsBadArg, "Unkown pattern type"); - } - return (isDetectionCorrect()); - //CV_Error( 0, "Detection is not correct" ); -} - -void CirclesGridFinder::rng2gridGraph(Graph &rng, std::vector &vectors) const -{ - for (size_t i = 0; i < rng.getVerticesCount(); i++) - { - Graph::Neighbors neighbors1 = rng.getNeighbors(i); - for (Graph::Neighbors::iterator it1 = neighbors1.begin(); it1 != neighbors1.end(); it1++) - { - Graph::Neighbors neighbors2 = rng.getNeighbors(*it1); - for (Graph::Neighbors::iterator it2 = neighbors2.begin(); it2 != neighbors2.end(); it2++) - { - if (i < *it2) - { - Point2f vec1 = keypoints[i] - keypoints[*it1]; - Point2f vec2 = keypoints[*it1] - keypoints[*it2]; - if (norm(vec1 - vec2) < parameters.minRNGEdgeSwitchDist || norm(vec1 + vec2) - < parameters.minRNGEdgeSwitchDist) - continue; - - vectors.push_back(keypoints[i] - keypoints[*it2]); - vectors.push_back(keypoints[*it2] - keypoints[i]); - } - } - } - } -} - -void CirclesGridFinder::eraseUsedGraph(vector &basisGraphs) const -{ - for (size_t i = 0; i < holes.size(); i++) - { - for (size_t j = 0; j < holes[i].size(); j++) - { - for (size_t k = 0; k < basisGraphs.size(); k++) - { - if (i != holes.size() - 1 && basisGraphs[k].areVerticesAdjacent(holes[i][j], holes[i + 1][j])) - { - basisGraphs[k].removeEdge(holes[i][j], holes[i + 1][j]); - } - - if (j != holes[i].size() - 1 && basisGraphs[k].areVerticesAdjacent(holes[i][j], holes[i][j + 1])) - { - basisGraphs[k].removeEdge(holes[i][j], holes[i][j + 1]); - } - } - } - } -} - -bool CirclesGridFinder::isDetectionCorrect() -{ - switch (parameters.gridType) - { - case CirclesGridFinderParameters::SYMMETRIC_GRID: - { - if (holes.size() != patternSize.height) - return false; - - set vertices; - for (size_t i = 0; i < holes.size(); i++) - { - if (holes[i].size() != patternSize.width) - return false; - - for (size_t j = 0; j < holes[i].size(); j++) - { - vertices.insert(holes[i][j]); - } - } - - return vertices.size() == patternSize.area(); - } - - case CirclesGridFinderParameters::ASYMMETRIC_GRID: - { - if (holes.size() < holes2.size() || holes[0].size() < holes2[0].size()) - { - largeHoles = &holes2; - smallHoles = &holes; - } - else - { - largeHoles = &holes; - smallHoles = &holes2; - } - - size_t largeWidth = patternSize.width; - size_t largeHeight = (size_t)ceil(patternSize.height / 2.); - size_t smallWidth = patternSize.width; - size_t smallHeight = (size_t)floor(patternSize.height / 2.); - - size_t sw = smallWidth, sh = smallHeight, lw = largeWidth, lh = largeHeight; - if (largeHoles->size() != largeHeight) - { - std::swap(lh, lw); - } - if (smallHoles->size() != smallHeight) - { - std::swap(sh, sw); - } - - if (largeHoles->size() != lh || smallHoles->size() != sh) - { - return false; - } - - set vertices; - for (size_t i = 0; i < largeHoles->size(); i++) - { - if (largeHoles->at(i).size() != lw) - { - return false; - } - - for (size_t j = 0; j < largeHoles->at(i).size(); j++) - { - vertices.insert(largeHoles->at(i)[j]); - } - - if (i < smallHoles->size()) - { - if (smallHoles->at(i).size() != sw) - { - return false; - } - - for (size_t j = 0; j < smallHoles->at(i).size(); j++) - { - vertices.insert(smallHoles->at(i)[j]); - } - } - } - return (vertices.size() == largeHeight * largeWidth + smallHeight * smallWidth); - } - - default: - CV_Error(0, "Unknown pattern type"); - } - - return false; -} - -void CirclesGridFinder::findMCS(const vector &basis, vector &basisGraphs) -{ - holes.clear(); - Path longestPath; - size_t bestGraphIdx = findLongestPath(basisGraphs, longestPath); - vector holesRow = longestPath.vertices; - - while (holesRow.size() > std::max(patternSize.width, patternSize.height)) - { - holesRow.pop_back(); - holesRow.erase(holesRow.begin()); - } - - if (bestGraphIdx == 0) - { - holes.push_back(holesRow); - size_t w = holes[0].size(); - size_t h = holes.size(); - - //parameters.minGraphConfidence = holes[0].size() * parameters.vertexGain + (holes[0].size() - 1) * parameters.edgeGain; - //parameters.minGraphConfidence = holes[0].size() * parameters.vertexGain + (holes[0].size() / 2) * parameters.edgeGain; - //parameters.minGraphConfidence = holes[0].size() * parameters.existingVertexGain + (holes[0].size() / 2) * parameters.edgeGain; - parameters.minGraphConfidence = holes[0].size() * parameters.existingVertexGain; - for (size_t i = h; i < patternSize.height; i++) - { - addHolesByGraph(basisGraphs, true, basis[1]); - } - - //parameters.minGraphConfidence = holes.size() * parameters.existingVertexGain + (holes.size() / 2) * parameters.edgeGain; - parameters.minGraphConfidence = holes.size() * parameters.existingVertexGain; - - for (size_t i = w; i < patternSize.width; i++) - { - addHolesByGraph(basisGraphs, false, basis[0]); - } - } - else - { - holes.resize(holesRow.size()); - for (size_t i = 0; i < holesRow.size(); i++) - holes[i].push_back(holesRow[i]); - - size_t w = holes[0].size(); - size_t h = holes.size(); - - parameters.minGraphConfidence = holes.size() * parameters.existingVertexGain; - for (size_t i = w; i < patternSize.width; i++) - { - addHolesByGraph(basisGraphs, false, basis[0]); - } - - parameters.minGraphConfidence = holes[0].size() * parameters.existingVertexGain; - for (size_t i = h; i < patternSize.height; i++) - { - addHolesByGraph(basisGraphs, true, basis[1]); - } - } -} - -Mat CirclesGridFinder::rectifyGrid(Size detectedGridSize, const vector& centers, - const vector &keypoints, vector &warpedKeypoints) -{ - assert( !centers.empty() ); - const float edgeLength = 30; - const Point2f offset(150, 150); - - vector dstPoints; - bool isClockwiseBefore = - getDirection(centers[0], centers[detectedGridSize.width - 1], centers[centers.size() - 1]) < 0; - - int iStart = isClockwiseBefore ? 0 : detectedGridSize.height - 1; - int iEnd = isClockwiseBefore ? detectedGridSize.height : -1; - int iStep = isClockwiseBefore ? 1 : -1; - for (int i = iStart; i != iEnd; i += iStep) - { - for (int j = 0; j < detectedGridSize.width; j++) - { - dstPoints.push_back(offset + Point2f(edgeLength * j, edgeLength * i)); - } - } - - Mat H = findHomography(Mat(centers), Mat(dstPoints), CV_RANSAC); - //Mat H = findHomography( Mat( corners ), Mat( dstPoints ) ); - - vector srcKeypoints; - for (size_t i = 0; i < keypoints.size(); i++) - { - srcKeypoints.push_back(keypoints[i]); - } - - Mat dstKeypointsMat; - transform(Mat(srcKeypoints), dstKeypointsMat, H); - vector dstKeypoints; - convertPointsFromHomogeneous(dstKeypointsMat, dstKeypoints); - - warpedKeypoints.clear(); - for (size_t i = 0; i < dstKeypoints.size(); i++) - { - Point2f pt = dstKeypoints[i]; - warpedKeypoints.push_back(pt); - } - - return H; -} - -size_t CirclesGridFinder::findNearestKeypoint(Point2f pt) const -{ - size_t bestIdx = 0; - double minDist = std::numeric_limits::max(); - for (size_t i = 0; i < keypoints.size(); i++) - { - double dist = norm(pt - keypoints[i]); - if (dist < minDist) - { - minDist = dist; - bestIdx = i; - } - } - return bestIdx; -} - -void CirclesGridFinder::addPoint(Point2f pt, vector &points) -{ - size_t ptIdx = findNearestKeypoint(pt); - if (norm(keypoints[ptIdx] - pt) > parameters.minDistanceToAddKeypoint) - { - Point2f kpt = Point2f(pt); - keypoints.push_back(kpt); - points.push_back(keypoints.size() - 1); - } - else - { - points.push_back(ptIdx); - } -} - -void CirclesGridFinder::findCandidateLine(vector &line, size_t seedLineIdx, bool addRow, Point2f basisVec, - vector &seeds) -{ - line.clear(); - seeds.clear(); - - if (addRow) - { - for (size_t i = 0; i < holes[seedLineIdx].size(); i++) - { - Point2f pt = keypoints[holes[seedLineIdx][i]] + basisVec; - addPoint(pt, line); - seeds.push_back(holes[seedLineIdx][i]); - } - } - else - { - for (size_t i = 0; i < holes.size(); i++) - { - Point2f pt = keypoints[holes[i][seedLineIdx]] + basisVec; - addPoint(pt, line); - seeds.push_back(holes[i][seedLineIdx]); - } - } - - assert( line.size() == seeds.size() ); -} - -void CirclesGridFinder::findCandidateHoles(vector &above, vector &below, bool addRow, Point2f basisVec, - vector &aboveSeeds, vector &belowSeeds) -{ - above.clear(); - below.clear(); - aboveSeeds.clear(); - belowSeeds.clear(); - - findCandidateLine(above, 0, addRow, -basisVec, aboveSeeds); - size_t lastIdx = addRow ? holes.size() - 1 : holes[0].size() - 1; - findCandidateLine(below, lastIdx, addRow, basisVec, belowSeeds); - - assert( below.size() == above.size() ); - assert( belowSeeds.size() == aboveSeeds.size() ); - assert( below.size() == belowSeeds.size() ); -} - -bool CirclesGridFinder::areCentersNew(const vector &newCenters, const vector > &holes) -{ - for (size_t i = 0; i < newCenters.size(); i++) - { - for (size_t j = 0; j < holes.size(); j++) - { - if (holes[j].end() != std::find(holes[j].begin(), holes[j].end(), newCenters[i])) - { - return false; - } - } - } - - return true; -} - -void CirclesGridFinder::insertWinner(float aboveConfidence, float belowConfidence, float minConfidence, bool addRow, - const vector &above, const vector &below, - vector > &holes) -{ - if (aboveConfidence < minConfidence && belowConfidence < minConfidence) - return; - - if (addRow) - { - if (aboveConfidence >= belowConfidence) - { - if (!areCentersNew(above, holes)) - CV_Error( 0, "Centers are not new" ); - - holes.insert(holes.begin(), above); - } - else - { - if (!areCentersNew(below, holes)) - CV_Error( 0, "Centers are not new" ); - - holes.insert(holes.end(), below); - } - } - else - { - if (aboveConfidence >= belowConfidence) - { - if (!areCentersNew(above, holes)) - CV_Error( 0, "Centers are not new" ); - - for (size_t i = 0; i < holes.size(); i++) - { - holes[i].insert(holes[i].begin(), above[i]); - } - } - else - { - if (!areCentersNew(below, holes)) - CV_Error( 0, "Centers are not new" ); - - for (size_t i = 0; i < holes.size(); i++) - { - holes[i].insert(holes[i].end(), below[i]); - } - } - } -} - -float CirclesGridFinder::computeGraphConfidence(const vector &basisGraphs, bool addRow, - const vector &points, const vector &seeds) -{ - assert( points.size() == seeds.size() ); - float confidence = 0; - const size_t vCount = basisGraphs[0].getVerticesCount(); - assert( basisGraphs[0].getVerticesCount() == basisGraphs[1].getVerticesCount() ); - - for (size_t i = 0; i < seeds.size(); i++) - { - if (seeds[i] < vCount && points[i] < vCount) - { - if (!basisGraphs[addRow].areVerticesAdjacent(seeds[i], points[i])) - { - confidence += parameters.vertexPenalty; - } - else - { - confidence += parameters.vertexGain; - } - } - - if (points[i] < vCount) - { - confidence += parameters.existingVertexGain; - } - } - - for (size_t i = 1; i < points.size(); i++) - { - if (points[i - 1] < vCount && points[i] < vCount) - { - if (!basisGraphs[!addRow].areVerticesAdjacent(points[i - 1], points[i])) - { - confidence += parameters.edgePenalty; - } - else - { - confidence += parameters.edgeGain; - } - } - } - return confidence; - -} - -void CirclesGridFinder::addHolesByGraph(const vector &basisGraphs, bool addRow, Point2f basisVec) -{ - vector above, below, aboveSeeds, belowSeeds; - findCandidateHoles(above, below, addRow, basisVec, aboveSeeds, belowSeeds); - float aboveConfidence = computeGraphConfidence(basisGraphs, addRow, above, aboveSeeds); - float belowConfidence = computeGraphConfidence(basisGraphs, addRow, below, belowSeeds); - - insertWinner(aboveConfidence, belowConfidence, parameters.minGraphConfidence, addRow, above, below, holes); -} - -void CirclesGridFinder::filterOutliersByDensity(const vector &samples, vector &filteredSamples) -{ - if (samples.empty()) - CV_Error( 0, "samples is empty" ); - - filteredSamples.clear(); - - for (size_t i = 0; i < samples.size(); i++) - { - Rect_ rect(samples[i] - Point2f(parameters.densityNeighborhoodSize) * 0.5, - parameters.densityNeighborhoodSize); - int neighborsCount = 0; - for (size_t j = 0; j < samples.size(); j++) - { - if (rect.contains(samples[j])) - neighborsCount++; - } - if (neighborsCount >= parameters.minDensity) - filteredSamples.push_back(samples[i]); - } - - if (filteredSamples.empty()) - CV_Error( 0, "filteredSamples is empty" ); -} - -void CirclesGridFinder::findBasis(const vector &samples, vector &basis, vector &basisGraphs) -{ - basis.clear(); - Mat bestLabels; - TermCriteria termCriteria; - Mat centers; - const int clustersCount = 4; - kmeans(Mat(samples).reshape(1, 0), clustersCount, bestLabels, termCriteria, parameters.kmeansAttempts, - KMEANS_RANDOM_CENTERS, centers); - assert( centers.type() == CV_32FC1 ); - - vector basisIndices; - //TODO: only remove duplicate - for (int i = 0; i < clustersCount; i++) - { - int maxIdx = (fabs(centers.at (i, 0)) < fabs(centers.at (i, 1))); - if (centers.at (i, maxIdx) > 0) - { - Point2f vec(centers.at (i, 0), centers.at (i, 1)); - basis.push_back(vec); - basisIndices.push_back(i); - } - } - if (basis.size() != 2) - CV_Error(0, "Basis size is not 2"); - - if (basis[1].x > basis[0].x) - { - std::swap(basis[0], basis[1]); - std::swap(basisIndices[0], basisIndices[1]); - } - - const float minBasisDif = 2; - if (norm(basis[0] - basis[1]) < minBasisDif) - CV_Error(0, "degenerate basis" ); - - vector > clusters(2), hulls(2); - for (int k = 0; k < (int)samples.size(); k++) - { - int label = bestLabels.at (k, 0); - int idx = -1; - if (label == basisIndices[0]) - idx = 0; - if (label == basisIndices[1]) - idx = 1; - if (idx >= 0) - { - clusters[idx].push_back(basis[idx] + parameters.convexHullFactor * (samples[k] - basis[idx])); - } - } - for (size_t i = 0; i < basis.size(); i++) - { - convexHull(Mat(clusters[i]), hulls[i]); - } - - basisGraphs.resize(basis.size(), Graph(keypoints.size())); - for (size_t i = 0; i < keypoints.size(); i++) - { - for (size_t j = 0; j < keypoints.size(); j++) - { - if (i == j) - continue; - - Point2f vec = keypoints[i] - keypoints[j]; - - for (size_t k = 0; k < hulls.size(); k++) - { - if (pointPolygonTest(Mat(hulls[k]), vec, false) >= 0) - { - basisGraphs[k].addEdge(i, j); - } - } - } - } - if (basisGraphs.size() != 2) - CV_Error(0, "Number of basis graphs is not 2"); -} - -void CirclesGridFinder::computeRNG(Graph &rng, std::vector &vectors, Mat *drawImage) const -{ - rng = Graph(keypoints.size()); - vectors.clear(); - - //TODO: use more fast algorithm instead of naive N^3 - for (size_t i = 0; i < keypoints.size(); i++) - { - for (size_t j = 0; j < keypoints.size(); j++) - { - if (i == j) - continue; - - Point2f vec = keypoints[i] - keypoints[j]; - double dist = norm(vec); - - bool isNeighbors = true; - for (size_t k = 0; k < keypoints.size(); k++) - { - if (k == i || k == j) - continue; - - double dist1 = norm(keypoints[i] - keypoints[k]); - double dist2 = norm(keypoints[j] - keypoints[k]); - if (dist1 < dist && dist2 < dist) - { - isNeighbors = false; - break; - } - } - - if (isNeighbors) - { - rng.addEdge(i, j); - vectors.push_back(keypoints[i] - keypoints[j]); - if (drawImage != 0) - { - line(*drawImage, keypoints[i], keypoints[j], Scalar(255, 0, 0), 2); - circle(*drawImage, keypoints[i], 3, Scalar(0, 0, 255), -1); - circle(*drawImage, keypoints[j], 3, Scalar(0, 0, 255), -1); - } - } - } - } -} - -void computePredecessorMatrix(const Mat &dm, int verticesCount, Mat &predecessorMatrix) -{ - assert( dm.type() == CV_32SC1 ); - predecessorMatrix.create(verticesCount, verticesCount, CV_32SC1); - predecessorMatrix = -1; - for (int i = 0; i < predecessorMatrix.rows; i++) - { - for (int j = 0; j < predecessorMatrix.cols; j++) - { - int dist = dm.at (i, j); - for (int k = 0; k < verticesCount; k++) - { - if (dm.at (i, k) == dist - 1 && dm.at (k, j) == 1) - { - predecessorMatrix.at (i, j) = k; - break; - } - } - } - } -} - -static void computeShortestPath(Mat &predecessorMatrix, size_t v1, size_t v2, vector &path) -{ - if (predecessorMatrix.at ((int)v1, (int)v2) < 0) - { - path.push_back(v1); - return; - } - - computeShortestPath(predecessorMatrix, v1, predecessorMatrix.at ((int)v1, (int)v2), path); - path.push_back(v2); -} - -size_t CirclesGridFinder::findLongestPath(vector &basisGraphs, Path &bestPath) -{ - vector longestPaths(1); - vector confidences; - - size_t bestGraphIdx = 0; - const int infinity = -1; - for (size_t graphIdx = 0; graphIdx < basisGraphs.size(); graphIdx++) - { - const Graph &g = basisGraphs[graphIdx]; - Mat distanceMatrix; - g.floydWarshall(distanceMatrix, infinity); - Mat predecessorMatrix; - computePredecessorMatrix(distanceMatrix, (int)g.getVerticesCount(), predecessorMatrix); - - double maxVal; - Point maxLoc; - assert (infinity < 0); - minMaxLoc(distanceMatrix, 0, &maxVal, 0, &maxLoc); - - if (maxVal > longestPaths[0].length) - { - longestPaths.clear(); - confidences.clear(); - bestGraphIdx = graphIdx; - } - if (longestPaths.empty() || (maxVal == longestPaths[0].length && graphIdx == bestGraphIdx)) - { - Path path = Path(maxLoc.x, maxLoc.y, cvRound(maxVal)); - CV_Assert(maxLoc.x >= 0 && maxLoc.y >= 0) - ; - size_t id1 = static_cast (maxLoc.x); - size_t id2 = static_cast (maxLoc.y); - computeShortestPath(predecessorMatrix, id1, id2, path.vertices); - longestPaths.push_back(path); - - int conf = 0; - for (int v2 = 0; v2 < (int)path.vertices.size(); v2++) - { - conf += (int)basisGraphs[1 - (int)graphIdx].getDegree(v2); - } - confidences.push_back(conf); - } - } - //if( bestGraphIdx != 0 ) - //CV_Error( 0, "" ); - - int maxConf = -1; - int bestPathIdx = -1; - for (int i = 0; i < (int)confidences.size(); i++) - { - if (confidences[i] > maxConf) - { - maxConf = confidences[i]; - bestPathIdx = i; - } - } - - //int bestPathIdx = rand() % longestPaths.size(); - bestPath = longestPaths.at(bestPathIdx); - bool needReverse = (bestGraphIdx == 0 && keypoints[bestPath.lastVertex].x < keypoints[bestPath.firstVertex].x) - || (bestGraphIdx == 1 && keypoints[bestPath.lastVertex].y < keypoints[bestPath.firstVertex].y); - if (needReverse) - { - std::swap(bestPath.lastVertex, bestPath.firstVertex); - std::reverse(bestPath.vertices.begin(), bestPath.vertices.end()); - } - return bestGraphIdx; -} - -void CirclesGridFinder::drawBasis(const vector &basis, Point2f origin, Mat &drawImg) const -{ - for (size_t i = 0; i < basis.size(); i++) - { - Point2f pt(basis[i]); - line(drawImg, origin, origin + pt, Scalar(0, (double)(i * 255), 0), 2); - } -} - -void CirclesGridFinder::drawBasisGraphs(const vector &basisGraphs, Mat &drawImage, bool drawEdges, - bool drawVertices) const -{ - //const int vertexRadius = 1; - const int vertexRadius = 3; - const Scalar vertexColor = Scalar(0, 0, 255); - const int vertexThickness = -1; - - const Scalar edgeColor = Scalar(255, 0, 0); - //const int edgeThickness = 1; - const int edgeThickness = 2; - - if (drawEdges) - { - for (size_t i = 0; i < basisGraphs.size(); i++) - { - for (size_t v1 = 0; v1 < basisGraphs[i].getVerticesCount(); v1++) - { - for (size_t v2 = 0; v2 < basisGraphs[i].getVerticesCount(); v2++) - { - if (basisGraphs[i].areVerticesAdjacent(v1, v2)) - { - line(drawImage, keypoints[v1], keypoints[v2], edgeColor, edgeThickness); - } - } - } - } - } - if (drawVertices) - { - for (size_t v = 0; v < basisGraphs[0].getVerticesCount(); v++) - { - circle(drawImage, keypoints[v], vertexRadius, vertexColor, vertexThickness); - } - } -} - -void CirclesGridFinder::drawHoles(const Mat &srcImage, Mat &drawImage) const -{ - //const int holeRadius = 4; - //const int holeRadius = 2; - //const int holeThickness = 1; - const int holeRadius = 3; - const int holeThickness = -1; - - //const Scalar holeColor = Scalar(0, 0, 255); - const Scalar holeColor = Scalar(0, 255, 0); - - if (srcImage.channels() == 1) - cvtColor(srcImage, drawImage, CV_GRAY2RGB); - else - srcImage.copyTo(drawImage); - - for (size_t i = 0; i < holes.size(); i++) - { - for (size_t j = 0; j < holes[i].size(); j++) - { - if (j != holes[i].size() - 1) - line(drawImage, keypoints[holes[i][j]], keypoints[holes[i][j + 1]], Scalar(255, 0, 0), 2); - if (i != holes.size() - 1) - line(drawImage, keypoints[holes[i][j]], keypoints[holes[i + 1][j]], Scalar(255, 0, 0), 2); - - //circle(drawImage, keypoints[holes[i][j]], holeRadius, holeColor, holeThickness); - circle(drawImage, keypoints[holes[i][j]], holeRadius, holeColor, holeThickness); - } - } -} - -Size CirclesGridFinder::getDetectedGridSize() const -{ - if (holes.size() == 0) - return Size(0, 0); - - return Size((int)holes[0].size(), (int)holes.size()); -} - -void CirclesGridFinder::getHoles(vector &outHoles) const -{ - outHoles.clear(); - - for (size_t i = 0; i < holes.size(); i++) - { - for (size_t j = 0; j < holes[i].size(); j++) - { - outHoles.push_back(keypoints[holes[i][j]]); - } - } -} - -static bool areIndicesCorrect(Point pos, vector > *points) -{ - if (pos.y < 0 || pos.x < 0) - return false; - return (static_cast (pos.y) < points->size() && static_cast (pos.x) < points->at(pos.y).size()); -} - -void CirclesGridFinder::getAsymmetricHoles(std::vector &outHoles) const -{ - outHoles.clear(); - - vector largeCornerIndices, smallCornerIndices; - vector firstSteps, secondSteps; - size_t cornerIdx = getFirstCorner(largeCornerIndices, smallCornerIndices, firstSteps, secondSteps); - CV_Assert(largeHoles != 0 && smallHoles != 0) - ; - - Point srcLargePos = largeCornerIndices[cornerIdx]; - Point srcSmallPos = smallCornerIndices[cornerIdx]; - - while (areIndicesCorrect(srcLargePos, largeHoles) || areIndicesCorrect(srcSmallPos, smallHoles)) - { - Point largePos = srcLargePos; - while (areIndicesCorrect(largePos, largeHoles)) - { - outHoles.push_back(keypoints[largeHoles->at(largePos.y)[largePos.x]]); - largePos += firstSteps[cornerIdx]; - } - srcLargePos += secondSteps[cornerIdx]; - - Point smallPos = srcSmallPos; - while (areIndicesCorrect(smallPos, smallHoles)) - { - outHoles.push_back(keypoints[smallHoles->at(smallPos.y)[smallPos.x]]); - smallPos += firstSteps[cornerIdx]; - } - srcSmallPos += secondSteps[cornerIdx]; - } -} - -double CirclesGridFinder::getDirection(Point2f p1, Point2f p2, Point2f p3) -{ - Point2f a = p3 - p1; - Point2f b = p2 - p1; - return a.x * b.y - a.y * b.x; -} - -bool CirclesGridFinder::areSegmentsIntersecting(Segment seg1, Segment seg2) -{ - bool doesStraddle1 = (getDirection(seg2.s, seg2.e, seg1.s) * getDirection(seg2.s, seg2.e, seg1.e)) < 0; - bool doesStraddle2 = (getDirection(seg1.s, seg1.e, seg2.s) * getDirection(seg1.s, seg1.e, seg2.e)) < 0; - return doesStraddle1 && doesStraddle2; - - /* - Point2f t1 = e1-s1; - Point2f n1(t1.y, -t1.x); - double c1 = -n1.ddot(s1); - - Point2f t2 = e2-s2; - Point2f n2(t2.y, -t2.x); - double c2 = -n2.ddot(s2); - - bool seg1 = ((n1.ddot(s2) + c1) * (n1.ddot(e2) + c1)) <= 0; - bool seg1 = ((n2.ddot(s1) + c2) * (n2.ddot(e1) + c2)) <= 0; - - return seg1 && seg2; - */ -} - -void CirclesGridFinder::getCornerSegments(const vector > &points, vector > &segments, - vector &cornerIndices, vector &firstSteps, - vector &secondSteps) const -{ - segments.clear(); - cornerIndices.clear(); - firstSteps.clear(); - secondSteps.clear(); - int h = (int)points.size(); - int w = (int)points[0].size(); - CV_Assert(h >= 2 && w >= 2) - ; - - //all 8 segments with one end in a corner - vector corner; - corner.push_back(Segment(keypoints[points[1][0]], keypoints[points[0][0]])); - corner.push_back(Segment(keypoints[points[0][0]], keypoints[points[0][1]])); - segments.push_back(corner); - cornerIndices.push_back(Point(0, 0)); - firstSteps.push_back(Point(1, 0)); - secondSteps.push_back(Point(0, 1)); - corner.clear(); - - corner.push_back(Segment(keypoints[points[0][w - 2]], keypoints[points[0][w - 1]])); - corner.push_back(Segment(keypoints[points[0][w - 1]], keypoints[points[1][w - 1]])); - segments.push_back(corner); - cornerIndices.push_back(Point(w - 1, 0)); - firstSteps.push_back(Point(0, 1)); - secondSteps.push_back(Point(-1, 0)); - corner.clear(); - - corner.push_back(Segment(keypoints[points[h - 2][w - 1]], keypoints[points[h - 1][w - 1]])); - corner.push_back(Segment(keypoints[points[h - 1][w - 1]], keypoints[points[h - 1][w - 2]])); - segments.push_back(corner); - cornerIndices.push_back(Point(w - 1, h - 1)); - firstSteps.push_back(Point(-1, 0)); - secondSteps.push_back(Point(0, -1)); - corner.clear(); - - corner.push_back(Segment(keypoints[points[h - 1][1]], keypoints[points[h - 1][0]])); - corner.push_back(Segment(keypoints[points[h - 1][0]], keypoints[points[h - 2][0]])); - cornerIndices.push_back(Point(0, h - 1)); - firstSteps.push_back(Point(0, -1)); - secondSteps.push_back(Point(1, 0)); - segments.push_back(corner); - corner.clear(); - - //y axis is inverted in computer vision so we check < 0 - bool isClockwise = - getDirection(keypoints[points[0][0]], keypoints[points[0][w - 1]], keypoints[points[h - 1][w - 1]]) < 0; - if (!isClockwise) - { -#ifdef DEBUG_CIRCLES - cout << "Corners are counterclockwise" << endl; -#endif - std::reverse(segments.begin(), segments.end()); - std::reverse(cornerIndices.begin(), cornerIndices.end()); - std::reverse(firstSteps.begin(), firstSteps.end()); - std::reverse(secondSteps.begin(), secondSteps.end()); - std::swap(firstSteps, secondSteps); - } -} - -bool CirclesGridFinder::doesIntersectionExist(const vector &corner, const vector > &segments) -{ - for (size_t i = 0; i < corner.size(); i++) - { - for (size_t j = 0; j < segments.size(); j++) - { - for (size_t k = 0; k < segments[j].size(); k++) - { - if (areSegmentsIntersecting(corner[i], segments[j][k])) - return true; - } - } - } - - return false; -} - -size_t CirclesGridFinder::getFirstCorner(vector &largeCornerIndices, vector &smallCornerIndices, vector< - Point> &firstSteps, vector &secondSteps) const -{ - vector > largeSegments; - vector > smallSegments; - - getCornerSegments(*largeHoles, largeSegments, largeCornerIndices, firstSteps, secondSteps); - getCornerSegments(*smallHoles, smallSegments, smallCornerIndices, firstSteps, secondSteps); - - const size_t cornersCount = 4; - CV_Assert(largeSegments.size() == cornersCount) - ; - - bool isInsider[cornersCount]; - - for (size_t i = 0; i < cornersCount; i++) - { - isInsider[i] = doesIntersectionExist(largeSegments[i], smallSegments); - } - - int cornerIdx = 0; - bool waitOutsider = true; - - for(;;) - { - if (waitOutsider) - { - if (!isInsider[(cornerIdx + 1) % cornersCount]) - waitOutsider = false; - } - else - { - if (isInsider[(cornerIdx + 1) % cornersCount]) - break; - } - - cornerIdx = (cornerIdx + 1) % cornersCount; - } - - return cornerIdx; -} - -bool cv::findCirclesGridDefault( InputArray image, Size patternSize, - OutputArray centers, int flags ) -{ - return findCirclesGrid(image, patternSize, centers, flags); -} diff --git a/modules/calib3d/src/circlesgrid.hpp b/modules/calib3d/src/circlesgrid.hpp deleted file mode 100644 index 3028c58..0000000 --- a/modules/calib3d/src/circlesgrid.hpp +++ /dev/null @@ -1,219 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - // Copyright (C) 2009, Willow Garage Inc., all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#ifndef CIRCLESGRID_HPP_ -#define CIRCLESGRID_HPP_ - -#include -#include -#include -#include - -#include "precomp.hpp" - -class CirclesGridClusterFinder -{ - CirclesGridClusterFinder& operator=(const CirclesGridClusterFinder&); - CirclesGridClusterFinder(const CirclesGridClusterFinder&); -public: - CirclesGridClusterFinder(bool _isAsymmetricGrid) - { - isAsymmetricGrid = _isAsymmetricGrid; - squareSize = 1.0f; - maxRectifiedDistance = (float)(squareSize / 2.0); - } - void findGrid(const std::vector points, cv::Size patternSize, std::vector& centers); - - //cluster 2d points by geometric coordinates - void hierarchicalClustering(const std::vector points, const cv::Size &patternSize, std::vector &patternPoints); -private: - void findCorners(const std::vector &hull2f, std::vector &corners); - void findOutsideCorners(const std::vector &corners, std::vector &outsideCorners); - void getSortedCorners(const std::vector &hull2f, const std::vector &corners, const std::vector &outsideCorners, std::vector &sortedCorners); - void rectifyPatternPoints(const std::vector &patternPoints, const std::vector &sortedCorners, std::vector &rectifiedPatternPoints); - void parsePatternPoints(const std::vector &patternPoints, const std::vector &rectifiedPatternPoints, std::vector ¢ers); - - float squareSize, maxRectifiedDistance; - bool isAsymmetricGrid; - - cv::Size patternSize; -}; - -class Graph -{ -public: - typedef std::set Neighbors; - struct Vertex - { - Neighbors neighbors; - }; - typedef std::map Vertices; - - Graph(size_t n); - void addVertex(size_t id); - void addEdge(size_t id1, size_t id2); - void removeEdge(size_t id1, size_t id2); - bool doesVertexExist(size_t id) const; - bool areVerticesAdjacent(size_t id1, size_t id2) const; - size_t getVerticesCount() const; - size_t getDegree(size_t id) const; - const Neighbors& getNeighbors(size_t id) const; - void floydWarshall(cv::Mat &distanceMatrix, int infinity = -1) const; -private: - Vertices vertices; -}; - -struct Path -{ - int firstVertex; - int lastVertex; - int length; - - std::vector vertices; - - Path(int first = -1, int last = -1, int len = -1) - { - firstVertex = first; - lastVertex = last; - length = len; - } -}; - -struct CirclesGridFinderParameters -{ - CirclesGridFinderParameters(); - cv::Size2f densityNeighborhoodSize; - float minDensity; - int kmeansAttempts; - int minDistanceToAddKeypoint; - int keypointScale; - float minGraphConfidence; - float vertexGain; - float vertexPenalty; - float existingVertexGain; - float edgeGain; - float edgePenalty; - float convexHullFactor; - float minRNGEdgeSwitchDist; - - enum GridType - { - SYMMETRIC_GRID, ASYMMETRIC_GRID - }; - GridType gridType; -}; - -class CirclesGridFinder -{ -public: - CirclesGridFinder(cv::Size patternSize, const std::vector &testKeypoints, - const CirclesGridFinderParameters ¶meters = CirclesGridFinderParameters()); - bool findHoles(); - static cv::Mat rectifyGrid(cv::Size detectedGridSize, const std::vector& centers, const std::vector< - cv::Point2f> &keypoint, std::vector &warpedKeypoints); - - void getHoles(std::vector &holes) const; - void getAsymmetricHoles(std::vector &holes) const; - cv::Size getDetectedGridSize() const; - - void drawBasis(const std::vector &basis, cv::Point2f origin, cv::Mat &drawImg) const; - void drawBasisGraphs(const std::vector &basisGraphs, cv::Mat &drawImg, bool drawEdges = true, - bool drawVertices = true) const; - void drawHoles(const cv::Mat &srcImage, cv::Mat &drawImage) const; -private: - void computeRNG(Graph &rng, std::vector &vectors, cv::Mat *drawImage = 0) const; - void rng2gridGraph(Graph &rng, std::vector &vectors) const; - void eraseUsedGraph(std::vector &basisGraphs) const; - void filterOutliersByDensity(const std::vector &samples, std::vector &filteredSamples); - void findBasis(const std::vector &samples, std::vector &basis, - std::vector &basisGraphs); - void findMCS(const std::vector &basis, std::vector &basisGraphs); - size_t findLongestPath(std::vector &basisGraphs, Path &bestPath); - float computeGraphConfidence(const std::vector &basisGraphs, bool addRow, const std::vector &points, - const std::vector &seeds); - void addHolesByGraph(const std::vector &basisGraphs, bool addRow, cv::Point2f basisVec); - - size_t findNearestKeypoint(cv::Point2f pt) const; - void addPoint(cv::Point2f pt, std::vector &points); - void findCandidateLine(std::vector &line, size_t seedLineIdx, bool addRow, cv::Point2f basisVec, std::vector< - size_t> &seeds); - void findCandidateHoles(std::vector &above, std::vector &below, bool addRow, cv::Point2f basisVec, - std::vector &aboveSeeds, std::vector &belowSeeds); - static bool areCentersNew(const std::vector &newCenters, const std::vector > &holes); - bool isDetectionCorrect(); - - static void insertWinner(float aboveConfidence, float belowConfidence, float minConfidence, bool addRow, - const std::vector &above, const std::vector &below, std::vector > &holes); - - struct Segment - { - cv::Point2f s; - cv::Point2f e; - Segment(cv::Point2f _s, cv::Point2f _e); - }; - - //if endpoint is on a segment then function return false - static bool areSegmentsIntersecting(Segment seg1, Segment seg2); - static bool doesIntersectionExist(const std::vector &corner, const std::vector > &segments); - void getCornerSegments(const std::vector > &points, std::vector > &segments, - std::vector &cornerIndices, std::vector &firstSteps, - std::vector &secondSteps) const; - size_t getFirstCorner(std::vector &largeCornerIndices, std::vector &smallCornerIndices, - std::vector &firstSteps, std::vector &secondSteps) const; - static double getDirection(cv::Point2f p1, cv::Point2f p2, cv::Point2f p3); - - std::vector keypoints; - - std::vector > holes; - std::vector > holes2; - std::vector > *largeHoles; - std::vector > *smallHoles; - - const cv::Size_ patternSize; - CirclesGridFinderParameters parameters; - - CirclesGridFinder& operator=(const CirclesGridFinder&); - CirclesGridFinder(const CirclesGridFinder&); -}; - -#endif /* CIRCLESGRID_HPP_ */ diff --git a/modules/calib3d/src/epnp.cpp b/modules/calib3d/src/epnp.cpp deleted file mode 100644 index 30786f9..0000000 --- a/modules/calib3d/src/epnp.cpp +++ /dev/null @@ -1,624 +0,0 @@ -#include -using namespace std; -#include "precomp.hpp" -#include "epnp.h" - -epnp::epnp(const cv::Mat& cameraMatrix, const cv::Mat& opoints, const cv::Mat& ipoints) -{ - if (cameraMatrix.depth() == CV_32F) - init_camera_parameters(cameraMatrix); - else - init_camera_parameters(cameraMatrix); - - number_of_correspondences = std::max(opoints.checkVector(3, CV_32F), opoints.checkVector(3, CV_64F)); - - pws.resize(3 * number_of_correspondences); - us.resize(2 * number_of_correspondences); - - if (opoints.depth() == ipoints.depth()) - { - if (opoints.depth() == CV_32F) - init_points(opoints, ipoints); - else - init_points(opoints, ipoints); - } - else if (opoints.depth() == CV_32F) - init_points(opoints, ipoints); - else - init_points(opoints, ipoints); - - alphas.resize(4 * number_of_correspondences); - pcs.resize(3 * number_of_correspondences); - - max_nr = 0; - A1 = NULL; - A2 = NULL; -} - -epnp::~epnp() -{ - if (A1) - delete[] A1; - if (A2) - delete[] A2; -} - -void epnp::choose_control_points(void) -{ - // Take C0 as the reference points centroid: - cws[0][0] = cws[0][1] = cws[0][2] = 0; - for(int i = 0; i < number_of_correspondences; i++) - for(int j = 0; j < 3; j++) - cws[0][j] += pws[3 * i + j]; - - for(int j = 0; j < 3; j++) - cws[0][j] /= number_of_correspondences; - - - // Take C1, C2, and C3 from PCA on the reference points: - CvMat * PW0 = cvCreateMat(number_of_correspondences, 3, CV_64F); - - double pw0tpw0[3 * 3], dc[3], uct[3 * 3]; - CvMat PW0tPW0 = cvMat(3, 3, CV_64F, pw0tpw0); - CvMat DC = cvMat(3, 1, CV_64F, dc); - CvMat UCt = cvMat(3, 3, CV_64F, uct); - - for(int i = 0; i < number_of_correspondences; i++) - for(int j = 0; j < 3; j++) - PW0->data.db[3 * i + j] = pws[3 * i + j] - cws[0][j]; - - cvMulTransposed(PW0, &PW0tPW0, 1); - cvSVD(&PW0tPW0, &DC, &UCt, 0, CV_SVD_MODIFY_A | CV_SVD_U_T); - - cvReleaseMat(&PW0); - - for(int i = 1; i < 4; i++) { - double k = sqrt(dc[i - 1] / number_of_correspondences); - for(int j = 0; j < 3; j++) - cws[i][j] = cws[0][j] + k * uct[3 * (i - 1) + j]; - } -} - -void epnp::compute_barycentric_coordinates(void) -{ - double cc[3 * 3], cc_inv[3 * 3]; - CvMat CC = cvMat(3, 3, CV_64F, cc); - CvMat CC_inv = cvMat(3, 3, CV_64F, cc_inv); - - for(int i = 0; i < 3; i++) - for(int j = 1; j < 4; j++) - cc[3 * i + j - 1] = cws[j][i] - cws[0][i]; - - cvInvert(&CC, &CC_inv, CV_SVD); - double * ci = cc_inv; - for(int i = 0; i < number_of_correspondences; i++) { - double * pi = &pws[0] + 3 * i; - double * a = &alphas[0] + 4 * i; - - for(int j = 0; j < 3; j++) - a[1 + j] = - ci[3 * j ] * (pi[0] - cws[0][0]) + - ci[3 * j + 1] * (pi[1] - cws[0][1]) + - ci[3 * j + 2] * (pi[2] - cws[0][2]); - a[0] = 1.0f - a[1] - a[2] - a[3]; - } -} - -void epnp::fill_M(CvMat * M, - const int row, const double * as, const double u, const double v) -{ - double * M1 = M->data.db + row * 12; - double * M2 = M1 + 12; - - for(int i = 0; i < 4; i++) { - M1[3 * i ] = as[i] * fu; - M1[3 * i + 1] = 0.0; - M1[3 * i + 2] = as[i] * (uc - u); - - M2[3 * i ] = 0.0; - M2[3 * i + 1] = as[i] * fv; - M2[3 * i + 2] = as[i] * (vc - v); - } -} - -void epnp::compute_ccs(const double * betas, const double * ut) -{ - for(int i = 0; i < 4; i++) - ccs[i][0] = ccs[i][1] = ccs[i][2] = 0.0f; - - for(int i = 0; i < 4; i++) { - const double * v = ut + 12 * (11 - i); - for(int j = 0; j < 4; j++) - for(int k = 0; k < 3; k++) - ccs[j][k] += betas[i] * v[3 * j + k]; - } -} - -void epnp::compute_pcs(void) -{ - for(int i = 0; i < number_of_correspondences; i++) { - double * a = &alphas[0] + 4 * i; - double * pc = &pcs[0] + 3 * i; - - for(int j = 0; j < 3; j++) - pc[j] = a[0] * ccs[0][j] + a[1] * ccs[1][j] + a[2] * ccs[2][j] + a[3] * ccs[3][j]; - } -} - -void epnp::compute_pose(cv::Mat& R, cv::Mat& t) -{ - choose_control_points(); - compute_barycentric_coordinates(); - - CvMat * M = cvCreateMat(2 * number_of_correspondences, 12, CV_64F); - - for(int i = 0; i < number_of_correspondences; i++) - fill_M(M, 2 * i, &alphas[0] + 4 * i, us[2 * i], us[2 * i + 1]); - - double mtm[12 * 12], d[12], ut[12 * 12]; - CvMat MtM = cvMat(12, 12, CV_64F, mtm); - CvMat D = cvMat(12, 1, CV_64F, d); - CvMat Ut = cvMat(12, 12, CV_64F, ut); - - cvMulTransposed(M, &MtM, 1); - cvSVD(&MtM, &D, &Ut, 0, CV_SVD_MODIFY_A | CV_SVD_U_T); - cvReleaseMat(&M); - - double l_6x10[6 * 10], rho[6]; - CvMat L_6x10 = cvMat(6, 10, CV_64F, l_6x10); - CvMat Rho = cvMat(6, 1, CV_64F, rho); - - compute_L_6x10(ut, l_6x10); - compute_rho(rho); - - double Betas[4][4], rep_errors[4]; - double Rs[4][3][3], ts[4][3]; - - find_betas_approx_1(&L_6x10, &Rho, Betas[1]); - gauss_newton(&L_6x10, &Rho, Betas[1]); - rep_errors[1] = compute_R_and_t(ut, Betas[1], Rs[1], ts[1]); - - find_betas_approx_2(&L_6x10, &Rho, Betas[2]); - gauss_newton(&L_6x10, &Rho, Betas[2]); - rep_errors[2] = compute_R_and_t(ut, Betas[2], Rs[2], ts[2]); - - find_betas_approx_3(&L_6x10, &Rho, Betas[3]); - gauss_newton(&L_6x10, &Rho, Betas[3]); - rep_errors[3] = compute_R_and_t(ut, Betas[3], Rs[3], ts[3]); - - int N = 1; - if (rep_errors[2] < rep_errors[1]) N = 2; - if (rep_errors[3] < rep_errors[N]) N = 3; - - cv::Mat(3, 1, CV_64F, ts[N]).copyTo(t); - cv::Mat(3, 3, CV_64F, Rs[N]).copyTo(R); -} - -void epnp::copy_R_and_t(const double R_src[3][3], const double t_src[3], - double R_dst[3][3], double t_dst[3]) -{ - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 3; j++) - R_dst[i][j] = R_src[i][j]; - t_dst[i] = t_src[i]; - } -} - -double epnp::dist2(const double * p1, const double * p2) -{ - return - (p1[0] - p2[0]) * (p1[0] - p2[0]) + - (p1[1] - p2[1]) * (p1[1] - p2[1]) + - (p1[2] - p2[2]) * (p1[2] - p2[2]); -} - -double epnp::dot(const double * v1, const double * v2) -{ - return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; -} - -void epnp::estimate_R_and_t(double R[3][3], double t[3]) -{ - double pc0[3], pw0[3]; - - pc0[0] = pc0[1] = pc0[2] = 0.0; - pw0[0] = pw0[1] = pw0[2] = 0.0; - - for(int i = 0; i < number_of_correspondences; i++) { - const double * pc = &pcs[3 * i]; - const double * pw = &pws[3 * i]; - - for(int j = 0; j < 3; j++) { - pc0[j] += pc[j]; - pw0[j] += pw[j]; - } - } - for(int j = 0; j < 3; j++) { - pc0[j] /= number_of_correspondences; - pw0[j] /= number_of_correspondences; - } - - double abt[3 * 3], abt_d[3], abt_u[3 * 3], abt_v[3 * 3]; - CvMat ABt = cvMat(3, 3, CV_64F, abt); - CvMat ABt_D = cvMat(3, 1, CV_64F, abt_d); - CvMat ABt_U = cvMat(3, 3, CV_64F, abt_u); - CvMat ABt_V = cvMat(3, 3, CV_64F, abt_v); - - cvSetZero(&ABt); - for(int i = 0; i < number_of_correspondences; i++) { - double * pc = &pcs[3 * i]; - double * pw = &pws[3 * i]; - - for(int j = 0; j < 3; j++) { - abt[3 * j ] += (pc[j] - pc0[j]) * (pw[0] - pw0[0]); - abt[3 * j + 1] += (pc[j] - pc0[j]) * (pw[1] - pw0[1]); - abt[3 * j + 2] += (pc[j] - pc0[j]) * (pw[2] - pw0[2]); - } - } - - cvSVD(&ABt, &ABt_D, &ABt_U, &ABt_V, CV_SVD_MODIFY_A); - - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - R[i][j] = dot(abt_u + 3 * i, abt_v + 3 * j); - - const double det = - R[0][0] * R[1][1] * R[2][2] + R[0][1] * R[1][2] * R[2][0] + R[0][2] * R[1][0] * R[2][1] - - R[0][2] * R[1][1] * R[2][0] - R[0][1] * R[1][0] * R[2][2] - R[0][0] * R[1][2] * R[2][1]; - - if (det < 0) { - R[2][0] = -R[2][0]; - R[2][1] = -R[2][1]; - R[2][2] = -R[2][2]; - } - - t[0] = pc0[0] - dot(R[0], pw0); - t[1] = pc0[1] - dot(R[1], pw0); - t[2] = pc0[2] - dot(R[2], pw0); -} - -void epnp::solve_for_sign(void) -{ - if (pcs[2] < 0.0) { - for(int i = 0; i < 4; i++) - for(int j = 0; j < 3; j++) - ccs[i][j] = -ccs[i][j]; - - for(int i = 0; i < number_of_correspondences; i++) { - pcs[3 * i ] = -pcs[3 * i]; - pcs[3 * i + 1] = -pcs[3 * i + 1]; - pcs[3 * i + 2] = -pcs[3 * i + 2]; - } - } -} - -double epnp::compute_R_and_t(const double * ut, const double * betas, - double R[3][3], double t[3]) -{ - compute_ccs(betas, ut); - compute_pcs(); - - solve_for_sign(); - - estimate_R_and_t(R, t); - - return reprojection_error(R, t); -} - -double epnp::reprojection_error(const double R[3][3], const double t[3]) -{ - double sum2 = 0.0; - - for(int i = 0; i < number_of_correspondences; i++) { - double * pw = &pws[3 * i]; - double Xc = dot(R[0], pw) + t[0]; - double Yc = dot(R[1], pw) + t[1]; - double inv_Zc = 1.0 / (dot(R[2], pw) + t[2]); - double ue = uc + fu * Xc * inv_Zc; - double ve = vc + fv * Yc * inv_Zc; - double u = us[2 * i], v = us[2 * i + 1]; - - sum2 += sqrt( (u - ue) * (u - ue) + (v - ve) * (v - ve) ); - } - - return sum2 / number_of_correspondences; -} - -// betas10 = [B11 B12 B22 B13 B23 B33 B14 B24 B34 B44] -// betas_approx_1 = [B11 B12 B13 B14] - -void epnp::find_betas_approx_1(const CvMat * L_6x10, const CvMat * Rho, - double * betas) -{ - double l_6x4[6 * 4], b4[4]; - CvMat L_6x4 = cvMat(6, 4, CV_64F, l_6x4); - CvMat B4 = cvMat(4, 1, CV_64F, b4); - - for(int i = 0; i < 6; i++) { - cvmSet(&L_6x4, i, 0, cvmGet(L_6x10, i, 0)); - cvmSet(&L_6x4, i, 1, cvmGet(L_6x10, i, 1)); - cvmSet(&L_6x4, i, 2, cvmGet(L_6x10, i, 3)); - cvmSet(&L_6x4, i, 3, cvmGet(L_6x10, i, 6)); - } - - cvSolve(&L_6x4, Rho, &B4, CV_SVD); - - if (b4[0] < 0) { - betas[0] = sqrt(-b4[0]); - betas[1] = -b4[1] / betas[0]; - betas[2] = -b4[2] / betas[0]; - betas[3] = -b4[3] / betas[0]; - } else { - betas[0] = sqrt(b4[0]); - betas[1] = b4[1] / betas[0]; - betas[2] = b4[2] / betas[0]; - betas[3] = b4[3] / betas[0]; - } -} - -// betas10 = [B11 B12 B22 B13 B23 B33 B14 B24 B34 B44] -// betas_approx_2 = [B11 B12 B22 ] - -void epnp::find_betas_approx_2(const CvMat * L_6x10, const CvMat * Rho, - double * betas) -{ - double l_6x3[6 * 3], b3[3]; - CvMat L_6x3 = cvMat(6, 3, CV_64F, l_6x3); - CvMat B3 = cvMat(3, 1, CV_64F, b3); - - for(int i = 0; i < 6; i++) { - cvmSet(&L_6x3, i, 0, cvmGet(L_6x10, i, 0)); - cvmSet(&L_6x3, i, 1, cvmGet(L_6x10, i, 1)); - cvmSet(&L_6x3, i, 2, cvmGet(L_6x10, i, 2)); - } - - cvSolve(&L_6x3, Rho, &B3, CV_SVD); - - if (b3[0] < 0) { - betas[0] = sqrt(-b3[0]); - betas[1] = (b3[2] < 0) ? sqrt(-b3[2]) : 0.0; - } else { - betas[0] = sqrt(b3[0]); - betas[1] = (b3[2] > 0) ? sqrt(b3[2]) : 0.0; - } - - if (b3[1] < 0) betas[0] = -betas[0]; - - betas[2] = 0.0; - betas[3] = 0.0; -} - -// betas10 = [B11 B12 B22 B13 B23 B33 B14 B24 B34 B44] -// betas_approx_3 = [B11 B12 B22 B13 B23 ] - -void epnp::find_betas_approx_3(const CvMat * L_6x10, const CvMat * Rho, - double * betas) -{ - double l_6x5[6 * 5], b5[5]; - CvMat L_6x5 = cvMat(6, 5, CV_64F, l_6x5); - CvMat B5 = cvMat(5, 1, CV_64F, b5); - - for(int i = 0; i < 6; i++) { - cvmSet(&L_6x5, i, 0, cvmGet(L_6x10, i, 0)); - cvmSet(&L_6x5, i, 1, cvmGet(L_6x10, i, 1)); - cvmSet(&L_6x5, i, 2, cvmGet(L_6x10, i, 2)); - cvmSet(&L_6x5, i, 3, cvmGet(L_6x10, i, 3)); - cvmSet(&L_6x5, i, 4, cvmGet(L_6x10, i, 4)); - } - - cvSolve(&L_6x5, Rho, &B5, CV_SVD); - - if (b5[0] < 0) { - betas[0] = sqrt(-b5[0]); - betas[1] = (b5[2] < 0) ? sqrt(-b5[2]) : 0.0; - } else { - betas[0] = sqrt(b5[0]); - betas[1] = (b5[2] > 0) ? sqrt(b5[2]) : 0.0; - } - if (b5[1] < 0) betas[0] = -betas[0]; - betas[2] = b5[3] / betas[0]; - betas[3] = 0.0; -} - -void epnp::compute_L_6x10(const double * ut, double * l_6x10) -{ - const double * v[4]; - - v[0] = ut + 12 * 11; - v[1] = ut + 12 * 10; - v[2] = ut + 12 * 9; - v[3] = ut + 12 * 8; - - double dv[4][6][3]; - - for(int i = 0; i < 4; i++) { - int a = 0, b = 1; - for(int j = 0; j < 6; j++) { - dv[i][j][0] = v[i][3 * a ] - v[i][3 * b]; - dv[i][j][1] = v[i][3 * a + 1] - v[i][3 * b + 1]; - dv[i][j][2] = v[i][3 * a + 2] - v[i][3 * b + 2]; - - b++; - if (b > 3) { - a++; - b = a + 1; - } - } - } - - for(int i = 0; i < 6; i++) { - double * row = l_6x10 + 10 * i; - - row[0] = dot(dv[0][i], dv[0][i]); - row[1] = 2.0f * dot(dv[0][i], dv[1][i]); - row[2] = dot(dv[1][i], dv[1][i]); - row[3] = 2.0f * dot(dv[0][i], dv[2][i]); - row[4] = 2.0f * dot(dv[1][i], dv[2][i]); - row[5] = dot(dv[2][i], dv[2][i]); - row[6] = 2.0f * dot(dv[0][i], dv[3][i]); - row[7] = 2.0f * dot(dv[1][i], dv[3][i]); - row[8] = 2.0f * dot(dv[2][i], dv[3][i]); - row[9] = dot(dv[3][i], dv[3][i]); - } -} - -void epnp::compute_rho(double * rho) -{ - rho[0] = dist2(cws[0], cws[1]); - rho[1] = dist2(cws[0], cws[2]); - rho[2] = dist2(cws[0], cws[3]); - rho[3] = dist2(cws[1], cws[2]); - rho[4] = dist2(cws[1], cws[3]); - rho[5] = dist2(cws[2], cws[3]); -} - -void epnp::compute_A_and_b_gauss_newton(const double * l_6x10, const double * rho, - const double betas[4], CvMat * A, CvMat * b) -{ - for(int i = 0; i < 6; i++) { - const double * rowL = l_6x10 + i * 10; - double * rowA = A->data.db + i * 4; - - rowA[0] = 2 * rowL[0] * betas[0] + rowL[1] * betas[1] + rowL[3] * betas[2] + rowL[6] * betas[3]; - rowA[1] = rowL[1] * betas[0] + 2 * rowL[2] * betas[1] + rowL[4] * betas[2] + rowL[7] * betas[3]; - rowA[2] = rowL[3] * betas[0] + rowL[4] * betas[1] + 2 * rowL[5] * betas[2] + rowL[8] * betas[3]; - rowA[3] = rowL[6] * betas[0] + rowL[7] * betas[1] + rowL[8] * betas[2] + 2 * rowL[9] * betas[3]; - - cvmSet(b, i, 0, rho[i] - - ( - rowL[0] * betas[0] * betas[0] + - rowL[1] * betas[0] * betas[1] + - rowL[2] * betas[1] * betas[1] + - rowL[3] * betas[0] * betas[2] + - rowL[4] * betas[1] * betas[2] + - rowL[5] * betas[2] * betas[2] + - rowL[6] * betas[0] * betas[3] + - rowL[7] * betas[1] * betas[3] + - rowL[8] * betas[2] * betas[3] + - rowL[9] * betas[3] * betas[3] - )); - } -} - -void epnp::gauss_newton(const CvMat * L_6x10, const CvMat * Rho, double betas[4]) -{ - const int iterations_number = 5; - - double a[6*4], b[6], x[4]; - CvMat A = cvMat(6, 4, CV_64F, a); - CvMat B = cvMat(6, 1, CV_64F, b); - CvMat X = cvMat(4, 1, CV_64F, x); - - for(int k = 0; k < iterations_number; k++) - { - compute_A_and_b_gauss_newton(L_6x10->data.db, Rho->data.db, - betas, &A, &B); - qr_solve(&A, &B, &X); - for(int i = 0; i < 4; i++) - betas[i] += x[i]; - } -} - -void epnp::qr_solve(CvMat * A, CvMat * b, CvMat * X) -{ - const int nr = A->rows; - const int nc = A->cols; - - if (max_nr != 0 && max_nr < nr) - { - delete [] A1; - delete [] A2; - } - if (max_nr < nr) - { - max_nr = nr; - A1 = new double[nr]; - A2 = new double[nr]; - } - - double * pA = A->data.db, * ppAkk = pA; - for(int k = 0; k < nc; k++) - { - double * ppAik1 = ppAkk, eta = fabs(*ppAik1); - for(int i = k + 1; i < nr; i++) - { - double elt = fabs(*ppAik1); - if (eta < elt) eta = elt; - ppAik1 += nc; - } - if (eta == 0) - { - A1[k] = A2[k] = 0.0; - //cerr << "God damnit, A is singular, this shouldn't happen." << endl; - return; - } - else - { - double * ppAik2 = ppAkk, sum2 = 0.0, inv_eta = 1. / eta; - for(int i = k; i < nr; i++) - { - *ppAik2 *= inv_eta; - sum2 += *ppAik2 * *ppAik2; - ppAik2 += nc; - } - double sigma = sqrt(sum2); - if (*ppAkk < 0) - sigma = -sigma; - *ppAkk += sigma; - A1[k] = sigma * *ppAkk; - A2[k] = -eta * sigma; - for(int j = k + 1; j < nc; j++) - { - double * ppAik = ppAkk, sum = 0; - for(int i = k; i < nr; i++) - { - sum += *ppAik * ppAik[j - k]; - ppAik += nc; - } - double tau = sum / A1[k]; - ppAik = ppAkk; - for(int i = k; i < nr; i++) - { - ppAik[j - k] -= tau * *ppAik; - ppAik += nc; - } - } - } - ppAkk += nc + 1; - } - - // b <- Qt b - double * ppAjj = pA, * pb = b->data.db; - for(int j = 0; j < nc; j++) - { - double * ppAij = ppAjj, tau = 0; - for(int i = j; i < nr; i++) - { - tau += *ppAij * pb[i]; - ppAij += nc; - } - tau /= A1[j]; - ppAij = ppAjj; - for(int i = j; i < nr; i++) - { - pb[i] -= tau * *ppAij; - ppAij += nc; - } - ppAjj += nc + 1; - } - - // X = R-1 b - double * pX = X->data.db; - pX[nc - 1] = pb[nc - 1] / A2[nc - 1]; - for(int i = nc - 2; i >= 0; i--) - { - double * ppAij = pA + i * nc + (i + 1), sum = 0; - - for(int j = i + 1; j < nc; j++) - { - sum += *ppAij * pX[j]; - ppAij++; - } - pX[i] = (pb[i] - sum) / A2[i]; - } -} diff --git a/modules/calib3d/src/epnp.h b/modules/calib3d/src/epnp.h deleted file mode 100644 index 203830a..0000000 --- a/modules/calib3d/src/epnp.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef epnp_h -#define epnp_h - -#include "precomp.hpp" - -class epnp { - public: - epnp(const cv::Mat& cameraMatrix, const cv::Mat& opoints, const cv::Mat& ipoints); - ~epnp(); - - void add_correspondence(const double X, const double Y, const double Z, - const double u, const double v); - - void compute_pose(cv::Mat& R, cv::Mat& t); - private: - template - void init_camera_parameters(const cv::Mat& cameraMatrix) - { - uc = cameraMatrix.at (0, 2); - vc = cameraMatrix.at (1, 2); - fu = cameraMatrix.at (0, 0); - fv = cameraMatrix.at (1, 1); - } - template - void init_points(const cv::Mat& opoints, const cv::Mat& ipoints) - { - for(int i = 0; i < number_of_correspondences; i++) - { - pws[3 * i ] = opoints.at(0,i).x; - pws[3 * i + 1] = opoints.at(0,i).y; - pws[3 * i + 2] = opoints.at(0,i).z; - - us[2 * i ] = ipoints.at(0,i).x*fu + uc; - us[2 * i + 1] = ipoints.at(0,i).y*fv + vc; - } - } - double reprojection_error(const double R[3][3], const double t[3]); - void choose_control_points(void); - void compute_barycentric_coordinates(void); - void fill_M(CvMat * M, const int row, const double * alphas, const double u, const double v); - void compute_ccs(const double * betas, const double * ut); - void compute_pcs(void); - - void solve_for_sign(void); - - void find_betas_approx_1(const CvMat * L_6x10, const CvMat * Rho, double * betas); - void find_betas_approx_2(const CvMat * L_6x10, const CvMat * Rho, double * betas); - void find_betas_approx_3(const CvMat * L_6x10, const CvMat * Rho, double * betas); - void qr_solve(CvMat * A, CvMat * b, CvMat * X); - - double dot(const double * v1, const double * v2); - double dist2(const double * p1, const double * p2); - - void compute_rho(double * rho); - void compute_L_6x10(const double * ut, double * l_6x10); - - void gauss_newton(const CvMat * L_6x10, const CvMat * Rho, double current_betas[4]); - void compute_A_and_b_gauss_newton(const double * l_6x10, const double * rho, - const double cb[4], CvMat * A, CvMat * b); - - double compute_R_and_t(const double * ut, const double * betas, - double R[3][3], double t[3]); - - void estimate_R_and_t(double R[3][3], double t[3]); - - void copy_R_and_t(const double R_dst[3][3], const double t_dst[3], - double R_src[3][3], double t_src[3]); - - - double uc, vc, fu, fv; - - std::vector pws, us, alphas, pcs; - int number_of_correspondences; - - double cws[4][3], ccs[4][3]; - double cws_determinant; - int max_nr; - double * A1, * A2; -}; - -#endif diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp deleted file mode 100644 index a823c4c..0000000 --- a/modules/calib3d/src/fundam.cpp +++ /dev/null @@ -1,1187 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "_modelest.h" - -using namespace cv; - -template int icvCompressPoints( T* ptr, const uchar* mask, int mstep, int count ) -{ - int i, j; - for( i = j = 0; i < count; i++ ) - if( mask[i*mstep] ) - { - if( i > j ) - ptr[j] = ptr[i]; - j++; - } - return j; -} - -class CvHomographyEstimator : public CvModelEstimator2 -{ -public: - CvHomographyEstimator( int modelPoints ); - - virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model ); - virtual bool refine( const CvMat* m1, const CvMat* m2, - CvMat* model, int maxIters ); -protected: - virtual void computeReprojError( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* error ); -}; - - -CvHomographyEstimator::CvHomographyEstimator(int _modelPoints) - : CvModelEstimator2(_modelPoints, cvSize(3,3), 1) -{ - assert( _modelPoints == 4 || _modelPoints == 5 ); - checkPartialSubsets = false; -} - -int CvHomographyEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* H ) -{ - int i, count = m1->rows*m1->cols; - const CvPoint2D64f* M = (const CvPoint2D64f*)m1->data.ptr; - const CvPoint2D64f* m = (const CvPoint2D64f*)m2->data.ptr; - - double LtL[9][9], W[9][1], V[9][9]; - CvMat _LtL = cvMat( 9, 9, CV_64F, LtL ); - CvMat matW = cvMat( 9, 1, CV_64F, W ); - CvMat matV = cvMat( 9, 9, CV_64F, V ); - CvMat _H0 = cvMat( 3, 3, CV_64F, V[8] ); - CvMat _Htemp = cvMat( 3, 3, CV_64F, V[7] ); - CvPoint2D64f cM={0,0}, cm={0,0}, sM={0,0}, sm={0,0}; - - for( i = 0; i < count; i++ ) - { - cm.x += m[i].x; cm.y += m[i].y; - cM.x += M[i].x; cM.y += M[i].y; - } - - cm.x /= count; cm.y /= count; - cM.x /= count; cM.y /= count; - - for( i = 0; i < count; i++ ) - { - sm.x += fabs(m[i].x - cm.x); - sm.y += fabs(m[i].y - cm.y); - sM.x += fabs(M[i].x - cM.x); - sM.y += fabs(M[i].y - cM.y); - } - - if( fabs(sm.x) < DBL_EPSILON || fabs(sm.y) < DBL_EPSILON || - fabs(sM.x) < DBL_EPSILON || fabs(sM.y) < DBL_EPSILON ) - return 0; - sm.x = count/sm.x; sm.y = count/sm.y; - sM.x = count/sM.x; sM.y = count/sM.y; - - double invHnorm[9] = { 1./sm.x, 0, cm.x, 0, 1./sm.y, cm.y, 0, 0, 1 }; - double Hnorm2[9] = { sM.x, 0, -cM.x*sM.x, 0, sM.y, -cM.y*sM.y, 0, 0, 1 }; - CvMat _invHnorm = cvMat( 3, 3, CV_64FC1, invHnorm ); - CvMat _Hnorm2 = cvMat( 3, 3, CV_64FC1, Hnorm2 ); - - cvZero( &_LtL ); - for( i = 0; i < count; i++ ) - { - double x = (m[i].x - cm.x)*sm.x, y = (m[i].y - cm.y)*sm.y; - double X = (M[i].x - cM.x)*sM.x, Y = (M[i].y - cM.y)*sM.y; - double Lx[] = { X, Y, 1, 0, 0, 0, -x*X, -x*Y, -x }; - double Ly[] = { 0, 0, 0, X, Y, 1, -y*X, -y*Y, -y }; - int j, k; - for( j = 0; j < 9; j++ ) - for( k = j; k < 9; k++ ) - LtL[j][k] += Lx[j]*Lx[k] + Ly[j]*Ly[k]; - } - cvCompleteSymm( &_LtL ); - - //cvSVD( &_LtL, &matW, 0, &matV, CV_SVD_MODIFY_A + CV_SVD_V_T ); - cvEigenVV( &_LtL, &matV, &matW ); - cvMatMul( &_invHnorm, &_H0, &_Htemp ); - cvMatMul( &_Htemp, &_Hnorm2, &_H0 ); - cvConvertScale( &_H0, H, 1./_H0.data.db[8] ); - - return 1; -} - - -void CvHomographyEstimator::computeReprojError( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* _err ) -{ - int i, count = m1->rows*m1->cols; - const CvPoint2D64f* M = (const CvPoint2D64f*)m1->data.ptr; - const CvPoint2D64f* m = (const CvPoint2D64f*)m2->data.ptr; - const double* H = model->data.db; - float* err = _err->data.fl; - - for( i = 0; i < count; i++ ) - { - double ww = 1./(H[6]*M[i].x + H[7]*M[i].y + 1.); - double dx = (H[0]*M[i].x + H[1]*M[i].y + H[2])*ww - m[i].x; - double dy = (H[3]*M[i].x + H[4]*M[i].y + H[5])*ww - m[i].y; - err[i] = (float)(dx*dx + dy*dy); - } -} - -bool CvHomographyEstimator::refine( const CvMat* m1, const CvMat* m2, CvMat* model, int maxIters ) -{ - CvLevMarq solver(8, 0, cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, maxIters, DBL_EPSILON)); - int i, j, k, count = m1->rows*m1->cols; - const CvPoint2D64f* M = (const CvPoint2D64f*)m1->data.ptr; - const CvPoint2D64f* m = (const CvPoint2D64f*)m2->data.ptr; - CvMat modelPart = cvMat( solver.param->rows, solver.param->cols, model->type, model->data.ptr ); - cvCopy( &modelPart, solver.param ); - - for(;;) - { - const CvMat* _param = 0; - CvMat *_JtJ = 0, *_JtErr = 0; - double* _errNorm = 0; - - if( !solver.updateAlt( _param, _JtJ, _JtErr, _errNorm )) - break; - - for( i = 0; i < count; i++ ) - { - const double* h = _param->data.db; - double Mx = M[i].x, My = M[i].y; - double ww = h[6]*Mx + h[7]*My + 1.; - ww = fabs(ww) > DBL_EPSILON ? 1./ww : 0; - double _xi = (h[0]*Mx + h[1]*My + h[2])*ww; - double _yi = (h[3]*Mx + h[4]*My + h[5])*ww; - double err[] = { _xi - m[i].x, _yi - m[i].y }; - if( _JtJ || _JtErr ) - { - double J[][8] = - { - { Mx*ww, My*ww, ww, 0, 0, 0, -Mx*ww*_xi, -My*ww*_xi }, - { 0, 0, 0, Mx*ww, My*ww, ww, -Mx*ww*_yi, -My*ww*_yi } - }; - - for( j = 0; j < 8; j++ ) - { - for( k = j; k < 8; k++ ) - _JtJ->data.db[j*8+k] += J[0][j]*J[0][k] + J[1][j]*J[1][k]; - _JtErr->data.db[j] += J[0][j]*err[0] + J[1][j]*err[1]; - } - } - if( _errNorm ) - *_errNorm += err[0]*err[0] + err[1]*err[1]; - } - } - - cvCopy( solver.param, &modelPart ); - return true; -} - - -CV_IMPL int -cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints, - CvMat* __H, int method, double ransacReprojThreshold, - CvMat* mask ) -{ - const double confidence = 0.995; - const int maxIters = 2000; - const double defaultRANSACReprojThreshold = 3; - bool result = false; - Ptr m, M, tempMask; - - double H[9]; - CvMat matH = cvMat( 3, 3, CV_64FC1, H ); - int count; - - CV_Assert( CV_IS_MAT(imagePoints) && CV_IS_MAT(objectPoints) ); - - count = MAX(imagePoints->cols, imagePoints->rows); - CV_Assert( count >= 4 ); - if( ransacReprojThreshold <= 0 ) - ransacReprojThreshold = defaultRANSACReprojThreshold; - - m = cvCreateMat( 1, count, CV_64FC2 ); - cvConvertPointsHomogeneous( imagePoints, m ); - - M = cvCreateMat( 1, count, CV_64FC2 ); - cvConvertPointsHomogeneous( objectPoints, M ); - - if( mask ) - { - CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) && - (mask->rows == 1 || mask->cols == 1) && - mask->rows*mask->cols == count ); - } - if( mask || count > 4 ) - tempMask = cvCreateMat( 1, count, CV_8U ); - if( !tempMask.empty() ) - cvSet( tempMask, cvScalarAll(1.) ); - - CvHomographyEstimator estimator(4); - if( count == 4 ) - method = 0; - if( method == CV_LMEDS ) - result = estimator.runLMeDS( M, m, &matH, tempMask, confidence, maxIters ); - else if( method == CV_RANSAC ) - result = estimator.runRANSAC( M, m, &matH, tempMask, ransacReprojThreshold, confidence, maxIters); - else - result = estimator.runKernel( M, m, &matH ) > 0; - - if( result && count > 4 ) - { - icvCompressPoints( (CvPoint2D64f*)M->data.ptr, tempMask->data.ptr, 1, count ); - count = icvCompressPoints( (CvPoint2D64f*)m->data.ptr, tempMask->data.ptr, 1, count ); - M->cols = m->cols = count; - if( method == CV_RANSAC ) - estimator.runKernel( M, m, &matH ); - estimator.refine( M, m, &matH, 10 ); - } - - if( result ) - cvConvert( &matH, __H ); - - if( mask && tempMask ) - { - if( CV_ARE_SIZES_EQ(mask, tempMask) ) - cvCopy( tempMask, mask ); - else - cvTranspose( tempMask, mask ); - } - - return (int)result; -} - - -/* Evaluation of Fundamental Matrix from point correspondences. - The original code has been written by Valery Mosyagin */ - -/* The algorithms (except for RANSAC) and the notation have been taken from - Zhengyou Zhang's research report - "Determining the Epipolar Geometry and its Uncertainty: A Review" - that can be found at http://www-sop.inria.fr/robotvis/personnel/zzhang/zzhang-eng.html */ - -/************************************** 7-point algorithm *******************************/ -class CvFMEstimator : public CvModelEstimator2 -{ -public: - CvFMEstimator( int _modelPoints ); - - virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model ); - virtual int run7Point( const CvMat* m1, const CvMat* m2, CvMat* model ); - virtual int run8Point( const CvMat* m1, const CvMat* m2, CvMat* model ); -protected: - virtual void computeReprojError( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* error ); -}; - -CvFMEstimator::CvFMEstimator( int _modelPoints ) -: CvModelEstimator2( _modelPoints, cvSize(3,3), _modelPoints == 7 ? 3 : 1 ) -{ - assert( _modelPoints == 7 || _modelPoints == 8 ); -} - - -int CvFMEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* model ) -{ - return modelPoints == 7 ? run7Point( m1, m2, model ) : run8Point( m1, m2, model ); -} - -int CvFMEstimator::run7Point( const CvMat* _m1, const CvMat* _m2, CvMat* _fmatrix ) -{ - double a[7*9], w[7], v[9*9], c[4], r[3]; - double* f1, *f2; - double t0, t1, t2; - CvMat A = cvMat( 7, 9, CV_64F, a ); - CvMat V = cvMat( 9, 9, CV_64F, v ); - CvMat W = cvMat( 7, 1, CV_64F, w ); - CvMat coeffs = cvMat( 1, 4, CV_64F, c ); - CvMat roots = cvMat( 1, 3, CV_64F, r ); - const CvPoint2D64f* m1 = (const CvPoint2D64f*)_m1->data.ptr; - const CvPoint2D64f* m2 = (const CvPoint2D64f*)_m2->data.ptr; - double* fmatrix = _fmatrix->data.db; - int i, k, n; - - // form a linear system: i-th row of A(=a) represents - // the equation: (m2[i], 1)'*F*(m1[i], 1) = 0 - for( i = 0; i < 7; i++ ) - { - double x0 = m1[i].x, y0 = m1[i].y; - double x1 = m2[i].x, y1 = m2[i].y; - - a[i*9+0] = x1*x0; - a[i*9+1] = x1*y0; - a[i*9+2] = x1; - a[i*9+3] = y1*x0; - a[i*9+4] = y1*y0; - a[i*9+5] = y1; - a[i*9+6] = x0; - a[i*9+7] = y0; - a[i*9+8] = 1; - } - - // A*(f11 f12 ... f33)' = 0 is singular (7 equations for 9 variables), so - // the solution is linear subspace of dimensionality 2. - // => use the last two singular vectors as a basis of the space - // (according to SVD properties) - cvSVD( &A, &W, 0, &V, CV_SVD_MODIFY_A + CV_SVD_V_T ); - f1 = v + 7*9; - f2 = v + 8*9; - - // f1, f2 is a basis => lambda*f1 + mu*f2 is an arbitrary f. matrix. - // as it is determined up to a scale, normalize lambda & mu (lambda + mu = 1), - // so f ~ lambda*f1 + (1 - lambda)*f2. - // use the additional constraint det(f) = det(lambda*f1 + (1-lambda)*f2) to find lambda. - // it will be a cubic equation. - // find c - polynomial coefficients. - for( i = 0; i < 9; i++ ) - f1[i] -= f2[i]; - - t0 = f2[4]*f2[8] - f2[5]*f2[7]; - t1 = f2[3]*f2[8] - f2[5]*f2[6]; - t2 = f2[3]*f2[7] - f2[4]*f2[6]; - - c[3] = f2[0]*t0 - f2[1]*t1 + f2[2]*t2; - - c[2] = f1[0]*t0 - f1[1]*t1 + f1[2]*t2 - - f1[3]*(f2[1]*f2[8] - f2[2]*f2[7]) + - f1[4]*(f2[0]*f2[8] - f2[2]*f2[6]) - - f1[5]*(f2[0]*f2[7] - f2[1]*f2[6]) + - f1[6]*(f2[1]*f2[5] - f2[2]*f2[4]) - - f1[7]*(f2[0]*f2[5] - f2[2]*f2[3]) + - f1[8]*(f2[0]*f2[4] - f2[1]*f2[3]); - - t0 = f1[4]*f1[8] - f1[5]*f1[7]; - t1 = f1[3]*f1[8] - f1[5]*f1[6]; - t2 = f1[3]*f1[7] - f1[4]*f1[6]; - - c[1] = f2[0]*t0 - f2[1]*t1 + f2[2]*t2 - - f2[3]*(f1[1]*f1[8] - f1[2]*f1[7]) + - f2[4]*(f1[0]*f1[8] - f1[2]*f1[6]) - - f2[5]*(f1[0]*f1[7] - f1[1]*f1[6]) + - f2[6]*(f1[1]*f1[5] - f1[2]*f1[4]) - - f2[7]*(f1[0]*f1[5] - f1[2]*f1[3]) + - f2[8]*(f1[0]*f1[4] - f1[1]*f1[3]); - - c[0] = f1[0]*t0 - f1[1]*t1 + f1[2]*t2; - - // solve the cubic equation; there can be 1 to 3 roots ... - n = cvSolveCubic( &coeffs, &roots ); - - if( n < 1 || n > 3 ) - return n; - - for( k = 0; k < n; k++, fmatrix += 9 ) - { - // for each root form the fundamental matrix - double lambda = r[k], mu = 1.; - double s = f1[8]*r[k] + f2[8]; - - // normalize each matrix, so that F(3,3) (~fmatrix[8]) == 1 - if( fabs(s) > DBL_EPSILON ) - { - mu = 1./s; - lambda *= mu; - fmatrix[8] = 1.; - } - else - fmatrix[8] = 0.; - - for( i = 0; i < 8; i++ ) - fmatrix[i] = f1[i]*lambda + f2[i]*mu; - } - - return n; -} - - -int CvFMEstimator::run8Point( const CvMat* _m1, const CvMat* _m2, CvMat* _fmatrix ) -{ - double a[9*9], w[9], v[9*9]; - CvMat W = cvMat( 1, 9, CV_64F, w ); - CvMat V = cvMat( 9, 9, CV_64F, v ); - CvMat A = cvMat( 9, 9, CV_64F, a ); - CvMat U, F0, TF; - - CvPoint2D64f m0c = {0,0}, m1c = {0,0}; - double t, scale0 = 0, scale1 = 0; - - const CvPoint2D64f* m1 = (const CvPoint2D64f*)_m1->data.ptr; - const CvPoint2D64f* m2 = (const CvPoint2D64f*)_m2->data.ptr; - double* fmatrix = _fmatrix->data.db; - CV_Assert( (_m1->cols == 1 || _m1->rows == 1) && CV_ARE_SIZES_EQ(_m1, _m2)); - int i, j, k, count = _m1->cols*_m1->rows; - - // compute centers and average distances for each of the two point sets - for( i = 0; i < count; i++ ) - { - double x = m1[i].x, y = m1[i].y; - m0c.x += x; m0c.y += y; - - x = m2[i].x, y = m2[i].y; - m1c.x += x; m1c.y += y; - } - - // calculate the normalizing transformations for each of the point sets: - // after the transformation each set will have the mass center at the coordinate origin - // and the average distance from the origin will be ~sqrt(2). - t = 1./count; - m0c.x *= t; m0c.y *= t; - m1c.x *= t; m1c.y *= t; - - for( i = 0; i < count; i++ ) - { - double x = m1[i].x - m0c.x, y = m1[i].y - m0c.y; - scale0 += sqrt(x*x + y*y); - - x = m2[i].x - m1c.x, y = m2[i].y - m1c.y; - scale1 += sqrt(x*x + y*y); - } - - scale0 *= t; - scale1 *= t; - - if( scale0 < FLT_EPSILON || scale1 < FLT_EPSILON ) - return 0; - - scale0 = sqrt(2.)/scale0; - scale1 = sqrt(2.)/scale1; - - cvZero( &A ); - - // form a linear system Ax=0: for each selected pair of points m1 & m2, - // the row of A(=a) represents the coefficients of equation: (m2, 1)'*F*(m1, 1) = 0 - // to save computation time, we compute (At*A) instead of A and then solve (At*A)x=0. - for( i = 0; i < count; i++ ) - { - double x0 = (m1[i].x - m0c.x)*scale0; - double y0 = (m1[i].y - m0c.y)*scale0; - double x1 = (m2[i].x - m1c.x)*scale1; - double y1 = (m2[i].y - m1c.y)*scale1; - double r[9] = { x1*x0, x1*y0, x1, y1*x0, y1*y0, y1, x0, y0, 1 }; - for( j = 0; j < 9; j++ ) - for( k = 0; k < 9; k++ ) - a[j*9+k] += r[j]*r[k]; - } - - cvEigenVV(&A, &V, &W); - - for( i = 0; i < 9; i++ ) - { - if( fabs(w[i]) < DBL_EPSILON ) - break; - } - - if( i < 8 ) - return 0; - - F0 = cvMat( 3, 3, CV_64F, v + 9*8 ); // take the last column of v as a solution of Af = 0 - - // make F0 singular (of rank 2) by decomposing it with SVD, - // zeroing the last diagonal element of W and then composing the matrices back. - - // use v as a temporary storage for different 3x3 matrices - W = U = V = TF = F0; - W.data.db = v; - U.data.db = v + 9; - V.data.db = v + 18; - TF.data.db = v + 27; - - cvSVD( &F0, &W, &U, &V, CV_SVD_MODIFY_A + CV_SVD_U_T + CV_SVD_V_T ); - W.data.db[8] = 0.; - - // F0 <- U*diag([W(1), W(2), 0])*V' - cvGEMM( &U, &W, 1., 0, 0., &TF, CV_GEMM_A_T ); - cvGEMM( &TF, &V, 1., 0, 0., &F0, 0/*CV_GEMM_B_T*/ ); - - // apply the transformation that is inverse - // to what we used to normalize the point coordinates - { - double tt0[] = { scale0, 0, -scale0*m0c.x, 0, scale0, -scale0*m0c.y, 0, 0, 1 }; - double tt1[] = { scale1, 0, -scale1*m1c.x, 0, scale1, -scale1*m1c.y, 0, 0, 1 }; - CvMat T0, T1; - T0 = T1 = F0; - T0.data.db = tt0; - T1.data.db = tt1; - - // F0 <- T1'*F0*T0 - cvGEMM( &T1, &F0, 1., 0, 0., &TF, CV_GEMM_A_T ); - F0.data.db = fmatrix; - cvGEMM( &TF, &T0, 1., 0, 0., &F0, 0 ); - - // make F(3,3) = 1 - if( fabs(F0.data.db[8]) > FLT_EPSILON ) - cvScale( &F0, &F0, 1./F0.data.db[8] ); - } - - return 1; -} - - -void CvFMEstimator::computeReprojError( const CvMat* _m1, const CvMat* _m2, - const CvMat* model, CvMat* _err ) -{ - int i, count = _m1->rows*_m1->cols; - const CvPoint2D64f* m1 = (const CvPoint2D64f*)_m1->data.ptr; - const CvPoint2D64f* m2 = (const CvPoint2D64f*)_m2->data.ptr; - const double* F = model->data.db; - float* err = _err->data.fl; - - for( i = 0; i < count; i++ ) - { - double a, b, c, d1, d2, s1, s2; - - a = F[0]*m1[i].x + F[1]*m1[i].y + F[2]; - b = F[3]*m1[i].x + F[4]*m1[i].y + F[5]; - c = F[6]*m1[i].x + F[7]*m1[i].y + F[8]; - - s2 = 1./(a*a + b*b); - d2 = m2[i].x*a + m2[i].y*b + c; - - a = F[0]*m2[i].x + F[3]*m2[i].y + F[6]; - b = F[1]*m2[i].x + F[4]*m2[i].y + F[7]; - c = F[2]*m2[i].x + F[5]*m2[i].y + F[8]; - - s1 = 1./(a*a + b*b); - d1 = m1[i].x*a + m1[i].y*b + c; - - err[i] = (float)std::max(d1*d1*s1, d2*d2*s2); - } -} - - -CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, - CvMat* fmatrix, int method, - double param1, double param2, CvMat* mask ) -{ - int result = 0; - Ptr m1, m2, tempMask; - - double F[3*9]; - CvMat _F3x3 = cvMat( 3, 3, CV_64FC1, F ), _F9x3 = cvMat( 9, 3, CV_64FC1, F ); - int count; - - CV_Assert( CV_IS_MAT(points1) && CV_IS_MAT(points2) && CV_ARE_SIZES_EQ(points1, points2) ); - CV_Assert( CV_IS_MAT(fmatrix) && fmatrix->cols == 3 && - (fmatrix->rows == 3 || (fmatrix->rows == 9 && method == CV_FM_7POINT)) ); - - count = MAX(points1->cols, points1->rows); - if( count < 7 ) - return 0; - - m1 = cvCreateMat( 1, count, CV_64FC2 ); - cvConvertPointsHomogeneous( points1, m1 ); - - m2 = cvCreateMat( 1, count, CV_64FC2 ); - cvConvertPointsHomogeneous( points2, m2 ); - - if( mask ) - { - CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) && - (mask->rows == 1 || mask->cols == 1) && - mask->rows*mask->cols == count ); - } - if( mask || count >= 8 ) - tempMask = cvCreateMat( 1, count, CV_8U ); - if( !tempMask.empty() ) - cvSet( tempMask, cvScalarAll(1.) ); - - CvFMEstimator estimator(7); - if( count == 7 ) - result = estimator.run7Point(m1, m2, &_F9x3); - else if( method == CV_FM_8POINT ) - result = estimator.run8Point(m1, m2, &_F3x3); - else - { - if( param1 <= 0 ) - param1 = 3; - if( param2 < DBL_EPSILON || param2 > 1 - DBL_EPSILON ) - param2 = 0.99; - - if( (method & ~3) == CV_RANSAC && count >= 15 ) - result = estimator.runRANSAC(m1, m2, &_F3x3, tempMask, param1, param2 ); - else - result = estimator.runLMeDS(m1, m2, &_F3x3, tempMask, param2 ); - if( result <= 0 ) - return 0; - /*icvCompressPoints( (CvPoint2D64f*)m1->data.ptr, tempMask->data.ptr, 1, count ); - count = icvCompressPoints( (CvPoint2D64f*)m2->data.ptr, tempMask->data.ptr, 1, count ); - assert( count >= 8 ); - m1->cols = m2->cols = count; - estimator.run8Point(m1, m2, &_F3x3);*/ - } - - if( result ) - cvConvert( fmatrix->rows == 3 ? &_F3x3 : &_F9x3, fmatrix ); - - if( mask && tempMask ) - { - if( CV_ARE_SIZES_EQ(mask, tempMask) ) - cvCopy( tempMask, mask ); - else - cvTranspose( tempMask, mask ); - } - - return result; -} - - -CV_IMPL void cvComputeCorrespondEpilines( const CvMat* points, int pointImageID, - const CvMat* fmatrix, CvMat* lines ) -{ - int abc_stride, abc_plane_stride, abc_elem_size; - int plane_stride, stride, elem_size; - int i, dims, count, depth, cn, abc_dims, abc_count, abc_depth, abc_cn; - uchar *ap, *bp, *cp; - const uchar *xp, *yp, *zp; - double f[9]; - CvMat F = cvMat( 3, 3, CV_64F, f ); - - if( !CV_IS_MAT(points) ) - CV_Error( !points ? CV_StsNullPtr : CV_StsBadArg, "points parameter is not a valid matrix" ); - - depth = CV_MAT_DEPTH(points->type); - cn = CV_MAT_CN(points->type); - if( (depth != CV_32F && depth != CV_64F) || (cn != 1 && cn != 2 && cn != 3) ) - CV_Error( CV_StsUnsupportedFormat, "The format of point matrix is unsupported" ); - - if( cn > 1 ) - { - dims = cn; - CV_Assert( points->rows == 1 || points->cols == 1 ); - count = points->rows * points->cols; - } - else if( points->rows > points->cols ) - { - dims = cn*points->cols; - count = points->rows; - } - else - { - if( (points->rows > 1 && cn > 1) || (points->rows == 1 && cn == 1) ) - CV_Error( CV_StsBadSize, "The point matrix does not have a proper layout (2xn, 3xn, nx2 or nx3)" ); - dims = points->rows; - count = points->cols; - } - - if( dims != 2 && dims != 3 ) - CV_Error( CV_StsOutOfRange, "The dimensionality of points must be 2 or 3" ); - - if( !CV_IS_MAT(fmatrix) ) - CV_Error( !fmatrix ? CV_StsNullPtr : CV_StsBadArg, "fmatrix is not a valid matrix" ); - - if( CV_MAT_TYPE(fmatrix->type) != CV_32FC1 && CV_MAT_TYPE(fmatrix->type) != CV_64FC1 ) - CV_Error( CV_StsUnsupportedFormat, "fundamental matrix must have 32fC1 or 64fC1 type" ); - - if( fmatrix->cols != 3 || fmatrix->rows != 3 ) - CV_Error( CV_StsBadSize, "fundamental matrix must be 3x3" ); - - if( !CV_IS_MAT(lines) ) - CV_Error( !lines ? CV_StsNullPtr : CV_StsBadArg, "lines parameter is not a valid matrix" ); - - abc_depth = CV_MAT_DEPTH(lines->type); - abc_cn = CV_MAT_CN(lines->type); - if( (abc_depth != CV_32F && abc_depth != CV_64F) || (abc_cn != 1 && abc_cn != 3) ) - CV_Error( CV_StsUnsupportedFormat, "The format of the matrix of lines is unsupported" ); - - if( abc_cn > 1 ) - { - abc_dims = abc_cn; - CV_Assert( lines->rows == 1 || lines->cols == 1 ); - abc_count = lines->rows * lines->cols; - } - else if( lines->rows > lines->cols ) - { - abc_dims = abc_cn*lines->cols; - abc_count = lines->rows; - } - else - { - if( (lines->rows > 1 && abc_cn > 1) || (lines->rows == 1 && abc_cn == 1) ) - CV_Error( CV_StsBadSize, "The lines matrix does not have a proper layout (3xn or nx3)" ); - abc_dims = lines->rows; - abc_count = lines->cols; - } - - if( abc_dims != 3 ) - CV_Error( CV_StsOutOfRange, "The lines matrix does not have a proper layout (3xn or nx3)" ); - - if( abc_count != count ) - CV_Error( CV_StsUnmatchedSizes, "The numbers of points and lines are different" ); - - elem_size = CV_ELEM_SIZE(depth); - abc_elem_size = CV_ELEM_SIZE(abc_depth); - - if( cn == 1 && points->rows == dims ) - { - plane_stride = points->step; - stride = elem_size; - } - else - { - plane_stride = elem_size; - stride = points->rows == 1 ? dims*elem_size : points->step; - } - - if( abc_cn == 1 && lines->rows == 3 ) - { - abc_plane_stride = lines->step; - abc_stride = abc_elem_size; - } - else - { - abc_plane_stride = abc_elem_size; - abc_stride = lines->rows == 1 ? 3*abc_elem_size : lines->step; - } - - cvConvert( fmatrix, &F ); - if( pointImageID == 2 ) - cvTranspose( &F, &F ); - - xp = points->data.ptr; - yp = xp + plane_stride; - zp = dims == 3 ? yp + plane_stride : 0; - - ap = lines->data.ptr; - bp = ap + abc_plane_stride; - cp = bp + abc_plane_stride; - - for( i = 0; i < count; i++ ) - { - double x, y, z = 1.; - double a, b, c, nu; - - if( depth == CV_32F ) - { - x = *(float*)xp; y = *(float*)yp; - if( zp ) - z = *(float*)zp, zp += stride; - } - else - { - x = *(double*)xp; y = *(double*)yp; - if( zp ) - z = *(double*)zp, zp += stride; - } - - xp += stride; yp += stride; - - a = f[0]*x + f[1]*y + f[2]*z; - b = f[3]*x + f[4]*y + f[5]*z; - c = f[6]*x + f[7]*y + f[8]*z; - nu = a*a + b*b; - nu = nu ? 1./sqrt(nu) : 1.; - a *= nu; b *= nu; c *= nu; - - if( abc_depth == CV_32F ) - { - *(float*)ap = (float)a; - *(float*)bp = (float)b; - *(float*)cp = (float)c; - } - else - { - *(double*)ap = a; - *(double*)bp = b; - *(double*)cp = c; - } - - ap += abc_stride; - bp += abc_stride; - cp += abc_stride; - } -} - - -CV_IMPL void cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst ) -{ - Ptr temp, denom; - - int i, s_count, s_dims, d_count, d_dims; - CvMat _src, _dst, _ones; - CvMat* ones = 0; - - if( !CV_IS_MAT(src) ) - CV_Error( !src ? CV_StsNullPtr : CV_StsBadArg, - "The input parameter is not a valid matrix" ); - - if( !CV_IS_MAT(dst) ) - CV_Error( !dst ? CV_StsNullPtr : CV_StsBadArg, - "The output parameter is not a valid matrix" ); - - if( src == dst || src->data.ptr == dst->data.ptr ) - { - if( src != dst && (!CV_ARE_TYPES_EQ(src, dst) || !CV_ARE_SIZES_EQ(src,dst)) ) - CV_Error( CV_StsBadArg, "Invalid inplace operation" ); - return; - } - - if( src->rows > src->cols ) - { - if( !((src->cols > 1) ^ (CV_MAT_CN(src->type) > 1)) ) - CV_Error( CV_StsBadSize, "Either the number of channels or columns or rows must be =1" ); - - s_dims = CV_MAT_CN(src->type)*src->cols; - s_count = src->rows; - } - else - { - if( !((src->rows > 1) ^ (CV_MAT_CN(src->type) > 1)) ) - CV_Error( CV_StsBadSize, "Either the number of channels or columns or rows must be =1" ); - - s_dims = CV_MAT_CN(src->type)*src->rows; - s_count = src->cols; - } - - if( src->rows == 1 || src->cols == 1 ) - src = cvReshape( src, &_src, 1, s_count ); - - if( dst->rows > dst->cols ) - { - if( !((dst->cols > 1) ^ (CV_MAT_CN(dst->type) > 1)) ) - CV_Error( CV_StsBadSize, - "Either the number of channels or columns or rows in the input matrix must be =1" ); - - d_dims = CV_MAT_CN(dst->type)*dst->cols; - d_count = dst->rows; - } - else - { - if( !((dst->rows > 1) ^ (CV_MAT_CN(dst->type) > 1)) ) - CV_Error( CV_StsBadSize, - "Either the number of channels or columns or rows in the output matrix must be =1" ); - - d_dims = CV_MAT_CN(dst->type)*dst->rows; - d_count = dst->cols; - } - - if( dst->rows == 1 || dst->cols == 1 ) - dst = cvReshape( dst, &_dst, 1, d_count ); - - if( s_count != d_count ) - CV_Error( CV_StsUnmatchedSizes, "Both matrices must have the same number of points" ); - - if( CV_MAT_DEPTH(src->type) < CV_32F || CV_MAT_DEPTH(dst->type) < CV_32F ) - CV_Error( CV_StsUnsupportedFormat, - "Both matrices must be floating-point (single or double precision)" ); - - if( s_dims < 2 || s_dims > 4 || d_dims < 2 || d_dims > 4 ) - CV_Error( CV_StsOutOfRange, - "Both input and output point dimensionality must be 2, 3 or 4" ); - - if( s_dims < d_dims - 1 || s_dims > d_dims + 1 ) - CV_Error( CV_StsUnmatchedSizes, - "The dimensionalities of input and output point sets differ too much" ); - - if( s_dims == d_dims - 1 ) - { - if( d_count == dst->rows ) - { - ones = cvGetSubRect( dst, &_ones, cvRect( s_dims, 0, 1, d_count )); - dst = cvGetSubRect( dst, &_dst, cvRect( 0, 0, s_dims, d_count )); - } - else - { - ones = cvGetSubRect( dst, &_ones, cvRect( 0, s_dims, d_count, 1 )); - dst = cvGetSubRect( dst, &_dst, cvRect( 0, 0, d_count, s_dims )); - } - } - - if( s_dims <= d_dims ) - { - if( src->rows == dst->rows && src->cols == dst->cols ) - { - if( CV_ARE_TYPES_EQ( src, dst ) ) - cvCopy( src, dst ); - else - cvConvert( src, dst ); - } - else - { - if( !CV_ARE_TYPES_EQ( src, dst )) - { - temp = cvCreateMat( src->rows, src->cols, dst->type ); - cvConvert( src, temp ); - src = temp; - } - cvTranspose( src, dst ); - } - - if( ones ) - cvSet( ones, cvRealScalar(1.) ); - } - else - { - int s_plane_stride, s_stride, d_plane_stride, d_stride, elem_size; - - if( !CV_ARE_TYPES_EQ( src, dst )) - { - temp = cvCreateMat( src->rows, src->cols, dst->type ); - cvConvert( src, temp ); - src = temp; - } - - elem_size = CV_ELEM_SIZE(src->type); - - if( s_count == src->cols ) - s_plane_stride = src->step / elem_size, s_stride = 1; - else - s_stride = src->step / elem_size, s_plane_stride = 1; - - if( d_count == dst->cols ) - d_plane_stride = dst->step / elem_size, d_stride = 1; - else - d_stride = dst->step / elem_size, d_plane_stride = 1; - - denom = cvCreateMat( 1, d_count, dst->type ); - - if( CV_MAT_DEPTH(dst->type) == CV_32F ) - { - const float* xs = src->data.fl; - const float* ys = xs + s_plane_stride; - const float* zs = 0; - const float* ws = xs + (s_dims - 1)*s_plane_stride; - - float* iw = denom->data.fl; - - float* xd = dst->data.fl; - float* yd = xd + d_plane_stride; - float* zd = 0; - - if( d_dims == 3 ) - { - zs = ys + s_plane_stride; - zd = yd + d_plane_stride; - } - - for( i = 0; i < d_count; i++, ws += s_stride ) - { - float t = *ws; - iw[i] = fabs((double)t) > FLT_EPSILON ? t : 1.f; - } - - cvDiv( 0, denom, denom ); - - if( d_dims == 3 ) - for( i = 0; i < d_count; i++ ) - { - float w = iw[i]; - float x = *xs * w, y = *ys * w, z = *zs * w; - xs += s_stride; ys += s_stride; zs += s_stride; - *xd = x; *yd = y; *zd = z; - xd += d_stride; yd += d_stride; zd += d_stride; - } - else - for( i = 0; i < d_count; i++ ) - { - float w = iw[i]; - float x = *xs * w, y = *ys * w; - xs += s_stride; ys += s_stride; - *xd = x; *yd = y; - xd += d_stride; yd += d_stride; - } - } - else - { - const double* xs = src->data.db; - const double* ys = xs + s_plane_stride; - const double* zs = 0; - const double* ws = xs + (s_dims - 1)*s_plane_stride; - - double* iw = denom->data.db; - - double* xd = dst->data.db; - double* yd = xd + d_plane_stride; - double* zd = 0; - - if( d_dims == 3 ) - { - zs = ys + s_plane_stride; - zd = yd + d_plane_stride; - } - - for( i = 0; i < d_count; i++, ws += s_stride ) - { - double t = *ws; - iw[i] = fabs(t) > DBL_EPSILON ? t : 1.; - } - - cvDiv( 0, denom, denom ); - - if( d_dims == 3 ) - for( i = 0; i < d_count; i++ ) - { - double w = iw[i]; - double x = *xs * w, y = *ys * w, z = *zs * w; - xs += s_stride; ys += s_stride; zs += s_stride; - *xd = x; *yd = y; *zd = z; - xd += d_stride; yd += d_stride; zd += d_stride; - } - else - for( i = 0; i < d_count; i++ ) - { - double w = iw[i]; - double x = *xs * w, y = *ys * w; - xs += s_stride; ys += s_stride; - *xd = x; *yd = y; - xd += d_stride; yd += d_stride; - } - } - } -} - -cv::Mat cv::findHomography( InputArray _points1, InputArray _points2, - int method, double ransacReprojThreshold, OutputArray _mask ) -{ - Mat points1 = _points1.getMat(), points2 = _points2.getMat(); - int npoints = points1.checkVector(2); - CV_Assert( npoints >= 0 && points2.checkVector(2) == npoints && - points1.type() == points2.type()); - - Mat H(3, 3, CV_64F); - CvMat _pt1 = points1, _pt2 = points2; - CvMat matH = H, c_mask, *p_mask = 0; - if( _mask.needed() ) - { - _mask.create(npoints, 1, CV_8U, -1, true); - p_mask = &(c_mask = _mask.getMat()); - } - bool ok = cvFindHomography( &_pt1, &_pt2, &matH, method, ransacReprojThreshold, p_mask ) > 0; - if( !ok ) - H = Scalar(0); - return H; -} - -cv::Mat cv::findHomography( InputArray _points1, InputArray _points2, - OutputArray _mask, int method, double ransacReprojThreshold ) -{ - return cv::findHomography(_points1, _points2, method, ransacReprojThreshold, _mask); -} - -cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2, - int method, double param1, double param2, - OutputArray _mask ) -{ - Mat points1 = _points1.getMat(), points2 = _points2.getMat(); - int npoints = points1.checkVector(2); - CV_Assert( npoints >= 0 && points2.checkVector(2) == npoints && - points1.type() == points2.type()); - - Mat F(method == CV_FM_7POINT ? 9 : 3, 3, CV_64F); - CvMat _pt1 = points1, _pt2 = points2; - CvMat matF = F, c_mask, *p_mask = 0; - if( _mask.needed() ) - { - _mask.create(npoints, 1, CV_8U, -1, true); - p_mask = &(c_mask = _mask.getMat()); - } - int n = cvFindFundamentalMat( &_pt1, &_pt2, &matF, method, param1, param2, p_mask ); - if( n <= 0 ) - F = Scalar(0); - if( n == 1 ) - F = F.rowRange(0, 3); - return F; -} - -cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2, - OutputArray _mask, int method, double param1, double param2 ) -{ - return cv::findFundamentalMat(_points1, _points2, method, param1, param2, _mask); -} - - -void cv::computeCorrespondEpilines( InputArray _points, int whichImage, - InputArray _Fmat, OutputArray _lines ) -{ - Mat points = _points.getMat(), F = _Fmat.getMat(); - int npoints = points.checkVector(2); - if( npoints < 0 ) - npoints = points.checkVector(3); - CV_Assert( npoints >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S)); - - _lines.create(npoints, 1, CV_32FC3, -1, true); - CvMat c_points = points, c_lines = _lines.getMat(), c_F = F; - cvComputeCorrespondEpilines(&c_points, whichImage, &c_F, &c_lines); -} - -void cv::convertPointsFromHomogeneous( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - int npoints = src.checkVector(3), cn = 3; - if( npoints < 0 ) - { - npoints = src.checkVector(4); - if( npoints >= 0 ) - cn = 4; - } - CV_Assert( npoints >= 0 && (src.depth() == CV_32F || src.depth() == CV_32S)); - - _dst.create(npoints, 1, CV_MAKETYPE(CV_32F, cn-1)); - CvMat c_src = src, c_dst = _dst.getMat(); - cvConvertPointsHomogeneous(&c_src, &c_dst); -} - -void cv::convertPointsToHomogeneous( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - int npoints = src.checkVector(2), cn = 2; - if( npoints < 0 ) - { - npoints = src.checkVector(3); - if( npoints >= 0 ) - cn = 3; - } - CV_Assert( npoints >= 0 && (src.depth() == CV_32F || src.depth() == CV_32S)); - - _dst.create(npoints, 1, CV_MAKETYPE(CV_32F, cn+1)); - CvMat c_src = src, c_dst = _dst.getMat(); - cvConvertPointsHomogeneous(&c_src, &c_dst); -} - -void cv::convertPointsHomogeneous( InputArray _src, OutputArray _dst ) -{ - int stype = _src.type(), dtype = _dst.type(); - CV_Assert( _dst.fixedType() ); - - if( CV_MAT_CN(stype) > CV_MAT_CN(dtype) ) - convertPointsFromHomogeneous(_src, _dst); - else - convertPointsToHomogeneous(_src, _dst); -} - -/* End of file. */ diff --git a/modules/calib3d/src/modelest.cpp b/modules/calib3d/src/modelest.cpp deleted file mode 100644 index d928caf..0000000 --- a/modules/calib3d/src/modelest.cpp +++ /dev/null @@ -1,493 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "_modelest.h" -#include -#include -#include - -using namespace std; - - -CvModelEstimator2::CvModelEstimator2(int _modelPoints, CvSize _modelSize, int _maxBasicSolutions) -{ - modelPoints = _modelPoints; - modelSize = _modelSize; - maxBasicSolutions = _maxBasicSolutions; - checkPartialSubsets = true; - rng = cvRNG(-1); -} - -CvModelEstimator2::~CvModelEstimator2() -{ -} - -void CvModelEstimator2::setSeed( int64 seed ) -{ - rng = cvRNG(seed); -} - - -int CvModelEstimator2::findInliers( const CvMat* m1, const CvMat* m2, - const CvMat* model, CvMat* _err, - CvMat* _mask, double threshold ) -{ - int i, count = _err->rows*_err->cols, goodCount = 0; - const float* err = _err->data.fl; - uchar* mask = _mask->data.ptr; - - computeReprojError( m1, m2, model, _err ); - threshold *= threshold; - for( i = 0; i < count; i++ ) - goodCount += mask[i] = err[i] <= threshold; - return goodCount; -} - - -CV_IMPL int -cvRANSACUpdateNumIters( double p, double ep, - int model_points, int max_iters ) -{ - if( model_points <= 0 ) - CV_Error( CV_StsOutOfRange, "the number of model points should be positive" ); - - p = MAX(p, 0.); - p = MIN(p, 1.); - ep = MAX(ep, 0.); - ep = MIN(ep, 1.); - - // avoid inf's & nan's - double num = MAX(1. - p, DBL_MIN); - double denom = 1. - pow(1. - ep,model_points); - if( denom < DBL_MIN ) - return 0; - - num = log(num); - denom = log(denom); - - return denom >= 0 || -num >= max_iters*(-denom) ? - max_iters : cvRound(num/denom); -} - -bool CvModelEstimator2::runRANSAC( const CvMat* m1, const CvMat* m2, CvMat* model, - CvMat* mask0, double reprojThreshold, - double confidence, int maxIters ) -{ - bool result = false; - cv::Ptr mask = cvCloneMat(mask0); - cv::Ptr models, err, tmask; - cv::Ptr ms1, ms2; - - int iter, niters = maxIters; - int count = m1->rows*m1->cols, maxGoodCount = 0; - CV_Assert( CV_ARE_SIZES_EQ(m1, m2) && CV_ARE_SIZES_EQ(m1, mask) ); - - if( count < modelPoints ) - return false; - - models = cvCreateMat( modelSize.height*maxBasicSolutions, modelSize.width, CV_64FC1 ); - err = cvCreateMat( 1, count, CV_32FC1 ); - tmask = cvCreateMat( 1, count, CV_8UC1 ); - - if( count > modelPoints ) - { - ms1 = cvCreateMat( 1, modelPoints, m1->type ); - ms2 = cvCreateMat( 1, modelPoints, m2->type ); - } - else - { - niters = 1; - ms1 = cvCloneMat(m1); - ms2 = cvCloneMat(m2); - } - - for( iter = 0; iter < niters; iter++ ) - { - int i, goodCount, nmodels; - if( count > modelPoints ) - { - bool found = getSubset( m1, m2, ms1, ms2, 300 ); - if( !found ) - { - if( iter == 0 ) - return false; - break; - } - } - - nmodels = runKernel( ms1, ms2, models ); - if( nmodels <= 0 ) - continue; - for( i = 0; i < nmodels; i++ ) - { - CvMat model_i; - cvGetRows( models, &model_i, i*modelSize.height, (i+1)*modelSize.height ); - goodCount = findInliers( m1, m2, &model_i, err, tmask, reprojThreshold ); - - if( goodCount > MAX(maxGoodCount, modelPoints-1) ) - { - std::swap(tmask, mask); - cvCopy( &model_i, model ); - maxGoodCount = goodCount; - niters = cvRANSACUpdateNumIters( confidence, - (double)(count - goodCount)/count, modelPoints, niters ); - } - } - } - - if( maxGoodCount > 0 ) - { - if( mask != mask0 ) - cvCopy( mask, mask0 ); - result = true; - } - - return result; -} - - -static CV_IMPLEMENT_QSORT( icvSortDistances, int, CV_LT ) - -bool CvModelEstimator2::runLMeDS( const CvMat* m1, const CvMat* m2, CvMat* model, - CvMat* mask, double confidence, int maxIters ) -{ - const double outlierRatio = 0.45; - bool result = false; - cv::Ptr models; - cv::Ptr ms1, ms2; - cv::Ptr err; - - int iter, niters = maxIters; - int count = m1->rows*m1->cols; - double minMedian = DBL_MAX, sigma; - - CV_Assert( CV_ARE_SIZES_EQ(m1, m2) && CV_ARE_SIZES_EQ(m1, mask) ); - - if( count < modelPoints ) - return false; - - models = cvCreateMat( modelSize.height*maxBasicSolutions, modelSize.width, CV_64FC1 ); - err = cvCreateMat( 1, count, CV_32FC1 ); - - if( count > modelPoints ) - { - ms1 = cvCreateMat( 1, modelPoints, m1->type ); - ms2 = cvCreateMat( 1, modelPoints, m2->type ); - } - else - { - niters = 1; - ms1 = cvCloneMat(m1); - ms2 = cvCloneMat(m2); - } - - niters = cvRound(log(1-confidence)/log(1-pow(1-outlierRatio,(double)modelPoints))); - niters = MIN( MAX(niters, 3), maxIters ); - - for( iter = 0; iter < niters; iter++ ) - { - int i, nmodels; - if( count > modelPoints ) - { - bool found = getSubset( m1, m2, ms1, ms2, 300 ); - if( !found ) - { - if( iter == 0 ) - return false; - break; - } - } - - nmodels = runKernel( ms1, ms2, models ); - if( nmodels <= 0 ) - continue; - for( i = 0; i < nmodels; i++ ) - { - CvMat model_i; - cvGetRows( models, &model_i, i*modelSize.height, (i+1)*modelSize.height ); - computeReprojError( m1, m2, &model_i, err ); - icvSortDistances( err->data.i, count, 0 ); - - double median = count % 2 != 0 ? - err->data.fl[count/2] : (err->data.fl[count/2-1] + err->data.fl[count/2])*0.5; - - if( median < minMedian ) - { - minMedian = median; - cvCopy( &model_i, model ); - } - } - } - - if( minMedian < DBL_MAX ) - { - sigma = 2.5*1.4826*(1 + 5./(count - modelPoints))*sqrt(minMedian); - sigma = MAX( sigma, 0.001 ); - - count = findInliers( m1, m2, model, err, mask, sigma ); - result = count >= modelPoints; - } - - return result; -} - - -bool CvModelEstimator2::getSubset( const CvMat* m1, const CvMat* m2, - CvMat* ms1, CvMat* ms2, int maxAttempts ) -{ - cv::AutoBuffer _idx(modelPoints); - int* idx = _idx; - int i = 0, j, k, idx_i, iters = 0; - int type = CV_MAT_TYPE(m1->type), elemSize = CV_ELEM_SIZE(type); - const int *m1ptr = m1->data.i, *m2ptr = m2->data.i; - int *ms1ptr = ms1->data.i, *ms2ptr = ms2->data.i; - int count = m1->cols*m1->rows; - - assert( CV_IS_MAT_CONT(m1->type & m2->type) && (elemSize % sizeof(int) == 0) ); - elemSize /= sizeof(int); - - for(; iters < maxAttempts; iters++) - { - for( i = 0; i < modelPoints && iters < maxAttempts; ) - { - idx[i] = idx_i = cvRandInt(&rng) % count; - for( j = 0; j < i; j++ ) - if( idx_i == idx[j] ) - break; - if( j < i ) - continue; - for( k = 0; k < elemSize; k++ ) - { - ms1ptr[i*elemSize + k] = m1ptr[idx_i*elemSize + k]; - ms2ptr[i*elemSize + k] = m2ptr[idx_i*elemSize + k]; - } - if( checkPartialSubsets && (!checkSubset( ms1, i+1 ) || !checkSubset( ms2, i+1 ))) - { - iters++; - continue; - } - i++; - } - if( !checkPartialSubsets && i == modelPoints && - (!checkSubset( ms1, i ) || !checkSubset( ms2, i ))) - continue; - break; - } - - return i == modelPoints && iters < maxAttempts; -} - - -bool CvModelEstimator2::checkSubset( const CvMat* m, int count ) -{ - if( count <= 2 ) - return true; - - int j, k, i, i0, i1; - CvPoint2D64f* ptr = (CvPoint2D64f*)m->data.ptr; - - assert( CV_MAT_TYPE(m->type) == CV_64FC2 ); - - if( checkPartialSubsets ) - i0 = i1 = count - 1; - else - i0 = 0, i1 = count - 1; - - for( i = i0; i <= i1; i++ ) - { - // check that the i-th selected point does not belong - // to a line connecting some previously selected points - for( j = 0; j < i; j++ ) - { - double dx1 = ptr[j].x - ptr[i].x; - double dy1 = ptr[j].y - ptr[i].y; - for( k = 0; k < j; k++ ) - { - double dx2 = ptr[k].x - ptr[i].x; - double dy2 = ptr[k].y - ptr[i].y; - if( fabs(dx2*dy1 - dy2*dx1) <= FLT_EPSILON*(fabs(dx1) + fabs(dy1) + fabs(dx2) + fabs(dy2))) - break; - } - if( k < j ) - break; - } - if( j < i ) - break; - } - - return i > i1; -} - - -namespace cv -{ - -class Affine3DEstimator : public CvModelEstimator2 -{ -public: - Affine3DEstimator() : CvModelEstimator2(4, cvSize(4, 3), 1) {} - virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model ); -protected: - virtual void computeReprojError( const CvMat* m1, const CvMat* m2, const CvMat* model, CvMat* error ); - virtual bool checkSubset( const CvMat* ms1, int count ); -}; - -} - -int cv::Affine3DEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* model ) -{ - const Point3d* from = reinterpret_cast(m1->data.ptr); - const Point3d* to = reinterpret_cast(m2->data.ptr); - - Mat A(12, 12, CV_64F); - Mat B(12, 1, CV_64F); - A = Scalar(0.0); - - for(int i = 0; i < modelPoints; ++i) - { - *B.ptr(3*i) = to[i]; - - double *aptr = A.ptr(3*i); - for(int k = 0; k < 3; ++k) - { - aptr[3] = 1.0; - *reinterpret_cast(aptr) = from[i]; - aptr += 16; - } - } - - CvMat cvA = A; - CvMat cvB = B; - CvMat cvX; - cvReshape(model, &cvX, 1, 12); - cvSolve(&cvA, &cvB, &cvX, CV_SVD ); - - return 1; -} - -void cv::Affine3DEstimator::computeReprojError( const CvMat* m1, const CvMat* m2, const CvMat* model, CvMat* error ) -{ - int count = m1->rows * m1->cols; - const Point3d* from = reinterpret_cast(m1->data.ptr); - const Point3d* to = reinterpret_cast(m2->data.ptr); - const double* F = model->data.db; - float* err = error->data.fl; - - for(int i = 0; i < count; i++ ) - { - const Point3d& f = from[i]; - const Point3d& t = to[i]; - - double a = F[0]*f.x + F[1]*f.y + F[ 2]*f.z + F[ 3] - t.x; - double b = F[4]*f.x + F[5]*f.y + F[ 6]*f.z + F[ 7] - t.y; - double c = F[8]*f.x + F[9]*f.y + F[10]*f.z + F[11] - t.z; - - err[i] = (float)sqrt(a*a + b*b + c*c); - } -} - -bool cv::Affine3DEstimator::checkSubset( const CvMat* ms1, int count ) -{ - CV_Assert( CV_MAT_TYPE(ms1->type) == CV_64FC3 ); - - int j, k, i = count - 1; - const Point3d* ptr = reinterpret_cast(ms1->data.ptr); - - // check that the i-th selected point does not belong - // to a line connecting some previously selected points - - for(j = 0; j < i; ++j) - { - Point3d d1 = ptr[j] - ptr[i]; - double n1 = norm(d1); - - for(k = 0; k < j; ++k) - { - Point3d d2 = ptr[k] - ptr[i]; - double n = norm(d2) * n1; - - if (fabs(d1.dot(d2) / n) > 0.996) - break; - } - if( k < j ) - break; - } - - return j == i; -} - -int cv::estimateAffine3D(InputArray _from, InputArray _to, - OutputArray _out, OutputArray _inliers, - double param1, double param2) -{ - Mat from = _from.getMat(), to = _to.getMat(); - int count = from.checkVector(3); - - CV_Assert( count >= 0 && to.checkVector(3) == count ); - - _out.create(3, 4, CV_64F); - Mat out = _out.getMat(); - - Mat inliers(1, count, CV_8U); - inliers = Scalar::all(1); - - Mat dFrom, dTo; - from.convertTo(dFrom, CV_64F); - to.convertTo(dTo, CV_64F); - dFrom = dFrom.reshape(3, 1); - dTo = dTo.reshape(3, 1); - - CvMat F3x4 = out; - CvMat mask = inliers; - CvMat m1 = dFrom; - CvMat m2 = dTo; - - const double epsilon = numeric_limits::epsilon(); - param1 = param1 <= 0 ? 3 : param1; - param2 = (param2 < epsilon) ? 0.99 : (param2 > 1 - epsilon) ? 0.99 : param2; - - int ok = Affine3DEstimator().runRANSAC(&m1, &m2, &F3x4, &mask, param1, param2 ); - if( _inliers.needed() ) - transpose(inliers, _inliers); - - return ok; -} diff --git a/modules/calib3d/src/p3p.cpp b/modules/calib3d/src/p3p.cpp deleted file mode 100644 index 674df2c..0000000 --- a/modules/calib3d/src/p3p.cpp +++ /dev/null @@ -1,415 +0,0 @@ -#include -#include -#include - -#include "polynom_solver.h" -#include "p3p.h" - -using namespace std; - -void p3p::init_inverse_parameters() -{ - inv_fx = 1. / fx; - inv_fy = 1. / fy; - cx_fx = cx / fx; - cy_fy = cy / fy; -} - -p3p::p3p(cv::Mat cameraMatrix) -{ - if (cameraMatrix.depth() == CV_32F) - init_camera_parameters(cameraMatrix); - else - init_camera_parameters(cameraMatrix); - init_inverse_parameters(); -} - -p3p::p3p(double _fx, double _fy, double _cx, double _cy) -{ - fx = _fx; - fy = _fy; - cx = _cx; - cy = _cy; - init_inverse_parameters(); -} - -bool p3p::solve(cv::Mat& R, cv::Mat& tvec, const cv::Mat& opoints, const cv::Mat& ipoints) -{ - double rotation_matrix[3][3], translation[3]; - std::vector points; - if (opoints.depth() == ipoints.depth()) - { - if (opoints.depth() == CV_32F) - extract_points(opoints, ipoints, points); - else - extract_points(opoints, ipoints, points); - } - else if (opoints.depth() == CV_32F) - extract_points(opoints, ipoints, points); - else - extract_points(opoints, ipoints, points); - - bool result = solve(rotation_matrix, translation, points[0], points[1], points[2], points[3], points[4], points[5], - points[6], points[7], points[8], points[9], points[10], points[11], points[12], points[13], points[14], - points[15], points[16], points[17], points[18], points[19]); - cv::Mat(3, 1, CV_64F, translation).copyTo(tvec); - cv::Mat(3, 3, CV_64F, rotation_matrix).copyTo(R); - return result; -} - -bool p3p::solve(double R[3][3], double t[3], - double mu0, double mv0, double X0, double Y0, double Z0, - double mu1, double mv1, double X1, double Y1, double Z1, - double mu2, double mv2, double X2, double Y2, double Z2, - double mu3, double mv3, double X3, double Y3, double Z3) -{ - double Rs[4][3][3], ts[4][3]; - - int n = solve(Rs, ts, mu0, mv0, X0, Y0, Z0, mu1, mv1, X1, Y1, Z1, mu2, mv2, X2, Y2, Z2); - - if (n == 0) - return false; - - int ns = 0; - double min_reproj = 0; - for(int i = 0; i < n; i++) { - double X3p = Rs[i][0][0] * X3 + Rs[i][0][1] * Y3 + Rs[i][0][2] * Z3 + ts[i][0]; - double Y3p = Rs[i][1][0] * X3 + Rs[i][1][1] * Y3 + Rs[i][1][2] * Z3 + ts[i][1]; - double Z3p = Rs[i][2][0] * X3 + Rs[i][2][1] * Y3 + Rs[i][2][2] * Z3 + ts[i][2]; - double mu3p = cx + fx * X3p / Z3p; - double mv3p = cy + fy * Y3p / Z3p; - double reproj = (mu3p - mu3) * (mu3p - mu3) + (mv3p - mv3) * (mv3p - mv3); - if (i == 0 || min_reproj > reproj) { - ns = i; - min_reproj = reproj; - } - } - - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 3; j++) - R[i][j] = Rs[ns][i][j]; - t[i] = ts[ns][i]; - } - - return true; -} - -int p3p::solve(double R[4][3][3], double t[4][3], - double mu0, double mv0, double X0, double Y0, double Z0, - double mu1, double mv1, double X1, double Y1, double Z1, - double mu2, double mv2, double X2, double Y2, double Z2) -{ - double mk0, mk1, mk2; - double norm; - - mu0 = inv_fx * mu0 - cx_fx; - mv0 = inv_fy * mv0 - cy_fy; - norm = sqrt(mu0 * mu0 + mv0 * mv0 + 1); - mk0 = 1. / norm; mu0 *= mk0; mv0 *= mk0; - - mu1 = inv_fx * mu1 - cx_fx; - mv1 = inv_fy * mv1 - cy_fy; - norm = sqrt(mu1 * mu1 + mv1 * mv1 + 1); - mk1 = 1. / norm; mu1 *= mk1; mv1 *= mk1; - - mu2 = inv_fx * mu2 - cx_fx; - mv2 = inv_fy * mv2 - cy_fy; - norm = sqrt(mu2 * mu2 + mv2 * mv2 + 1); - mk2 = 1. / norm; mu2 *= mk2; mv2 *= mk2; - - double distances[3]; - distances[0] = sqrt( (X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 - Z2) * (Z1 - Z2) ); - distances[1] = sqrt( (X0 - X2) * (X0 - X2) + (Y0 - Y2) * (Y0 - Y2) + (Z0 - Z2) * (Z0 - Z2) ); - distances[2] = sqrt( (X0 - X1) * (X0 - X1) + (Y0 - Y1) * (Y0 - Y1) + (Z0 - Z1) * (Z0 - Z1) ); - - // Calculate angles - double cosines[3]; - cosines[0] = mu1 * mu2 + mv1 * mv2 + mk1 * mk2; - cosines[1] = mu0 * mu2 + mv0 * mv2 + mk0 * mk2; - cosines[2] = mu0 * mu1 + mv0 * mv1 + mk0 * mk1; - - double lengths[4][3]; - int n = solve_for_lengths(lengths, distances, cosines); - - int nb_solutions = 0; - for(int i = 0; i < n; i++) { - double M_orig[3][3]; - - M_orig[0][0] = lengths[i][0] * mu0; - M_orig[0][1] = lengths[i][0] * mv0; - M_orig[0][2] = lengths[i][0] * mk0; - - M_orig[1][0] = lengths[i][1] * mu1; - M_orig[1][1] = lengths[i][1] * mv1; - M_orig[1][2] = lengths[i][1] * mk1; - - M_orig[2][0] = lengths[i][2] * mu2; - M_orig[2][1] = lengths[i][2] * mv2; - M_orig[2][2] = lengths[i][2] * mk2; - - if (!align(M_orig, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, R[nb_solutions], t[nb_solutions])) - continue; - - nb_solutions++; - } - - return nb_solutions; -} - -/// Given 3D distances between three points and cosines of 3 angles at the apex, calculates -/// the lentghs of the line segments connecting projection center (P) and the three 3D points (A, B, C). -/// Returned distances are for |PA|, |PB|, |PC| respectively. -/// Only the solution to the main branch. -/// Reference : X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem" -/// IEEE Trans. on PAMI, vol. 25, No. 8, August 2003 -/// \param lengths3D Lengths of line segments up to four solutions. -/// \param dist3D Distance between 3D points in pairs |BC|, |AC|, |AB|. -/// \param cosines Cosine of the angles /_BPC, /_APC, /_APB. -/// \returns Number of solutions. -/// WARNING: NOT ALL THE DEGENERATE CASES ARE IMPLEMENTED - -int p3p::solve_for_lengths(double lengths[4][3], double distances[3], double cosines[3]) -{ - double p = cosines[0] * 2; - double q = cosines[1] * 2; - double r = cosines[2] * 2; - - double inv_d22 = 1. / (distances[2] * distances[2]); - double a = inv_d22 * (distances[0] * distances[0]); - double b = inv_d22 * (distances[1] * distances[1]); - - double a2 = a * a, b2 = b * b, p2 = p * p, q2 = q * q, r2 = r * r; - double pr = p * r, pqr = q * pr; - - // Check reality condition (the four points should not be coplanar) - if (p2 + q2 + r2 - pqr - 1 == 0) - return 0; - - double ab = a * b, a_2 = 2*a; - - double A = -2 * b + b2 + a2 + 1 + ab*(2 - r2) - a_2; - - // Check reality condition - if (A == 0) return 0; - - double a_4 = 4*a; - - double B = q*(-2*(ab + a2 + 1 - b) + r2*ab + a_4) + pr*(b - b2 + ab); - double C = q2 + b2*(r2 + p2 - 2) - b*(p2 + pqr) - ab*(r2 + pqr) + (a2 - a_2)*(2 + q2) + 2; - double D = pr*(ab-b2+b) + q*((p2-2)*b + 2 * (ab - a2) + a_4 - 2); - double E = 1 + 2*(b - a - ab) + b2 - b*p2 + a2; - - double temp = (p2*(a-1+b) + r2*(a-1-b) + pqr - a*pqr); - double b0 = b * temp * temp; - // Check reality condition - if (b0 == 0) - return 0; - - double real_roots[4]; - int n = solve_deg4(A, B, C, D, E, real_roots[0], real_roots[1], real_roots[2], real_roots[3]); - - if (n == 0) - return 0; - - int nb_solutions = 0; - double r3 = r2*r, pr2 = p*r2, r3q = r3 * q; - double inv_b0 = 1. / b0; - - // For each solution of x - for(int i = 0; i < n; i++) { - double x = real_roots[i]; - - // Check reality condition - if (x <= 0) - continue; - - double x2 = x*x; - - double b1 = - ((1-a-b)*x2 + (q*a-q)*x + 1 - a + b) * - (((r3*(a2 + ab*(2 - r2) - a_2 + b2 - 2*b + 1)) * x + - - (r3q*(2*(b-a2) + a_4 + ab*(r2 - 2) - 2) + pr2*(1 + a2 + 2*(ab-a-b) + r2*(b - b2) + b2))) * x2 + - - (r3*(q2*(1-2*a+a2) + r2*(b2-ab) - a_4 + 2*(a2 - b2) + 2) + r*p2*(b2 + 2*(ab - b - a) + 1 + a2) + pr2*q*(a_4 + 2*(b - ab - a2) - 2 - r2*b)) * x + - - 2*r3q*(a_2 - b - a2 + ab - 1) + pr2*(q2 - a_4 + 2*(a2 - b2) + r2*b + q2*(a2 - a_2) + 2) + - p2*(p*(2*(ab - a - b) + a2 + b2 + 1) + 2*q*r*(b + a_2 - a2 - ab - 1))); - - // Check reality condition - if (b1 <= 0) - continue; - - double y = inv_b0 * b1; - double v = x2 + y*y - x*y*r; - - if (v <= 0) - continue; - - double Z = distances[2] / sqrt(v); - double X = x * Z; - double Y = y * Z; - - lengths[nb_solutions][0] = X; - lengths[nb_solutions][1] = Y; - lengths[nb_solutions][2] = Z; - - nb_solutions++; - } - - return nb_solutions; -} - -bool p3p::align(double M_end[3][3], - double X0, double Y0, double Z0, - double X1, double Y1, double Z1, - double X2, double Y2, double Z2, - double R[3][3], double T[3]) -{ - // Centroids: - double C_start[3], C_end[3]; - for(int i = 0; i < 3; i++) C_end[i] = (M_end[0][i] + M_end[1][i] + M_end[2][i]) / 3; - C_start[0] = (X0 + X1 + X2) / 3; - C_start[1] = (Y0 + Y1 + Y2) / 3; - C_start[2] = (Z0 + Z1 + Z2) / 3; - - // Covariance matrix s: - double s[3 * 3]; - for(int j = 0; j < 3; j++) { - s[0 * 3 + j] = (X0 * M_end[0][j] + X1 * M_end[1][j] + X2 * M_end[2][j]) / 3 - C_end[j] * C_start[0]; - s[1 * 3 + j] = (Y0 * M_end[0][j] + Y1 * M_end[1][j] + Y2 * M_end[2][j]) / 3 - C_end[j] * C_start[1]; - s[2 * 3 + j] = (Z0 * M_end[0][j] + Z1 * M_end[1][j] + Z2 * M_end[2][j]) / 3 - C_end[j] * C_start[2]; - } - - double Qs[16], evs[4], U[16]; - - Qs[0 * 4 + 0] = s[0 * 3 + 0] + s[1 * 3 + 1] + s[2 * 3 + 2]; - Qs[1 * 4 + 1] = s[0 * 3 + 0] - s[1 * 3 + 1] - s[2 * 3 + 2]; - Qs[2 * 4 + 2] = s[1 * 3 + 1] - s[2 * 3 + 2] - s[0 * 3 + 0]; - Qs[3 * 4 + 3] = s[2 * 3 + 2] - s[0 * 3 + 0] - s[1 * 3 + 1]; - - Qs[1 * 4 + 0] = Qs[0 * 4 + 1] = s[1 * 3 + 2] - s[2 * 3 + 1]; - Qs[2 * 4 + 0] = Qs[0 * 4 + 2] = s[2 * 3 + 0] - s[0 * 3 + 2]; - Qs[3 * 4 + 0] = Qs[0 * 4 + 3] = s[0 * 3 + 1] - s[1 * 3 + 0]; - Qs[2 * 4 + 1] = Qs[1 * 4 + 2] = s[1 * 3 + 0] + s[0 * 3 + 1]; - Qs[3 * 4 + 1] = Qs[1 * 4 + 3] = s[2 * 3 + 0] + s[0 * 3 + 2]; - Qs[3 * 4 + 2] = Qs[2 * 4 + 3] = s[2 * 3 + 1] + s[1 * 3 + 2]; - - jacobi_4x4(Qs, evs, U); - - // Looking for the largest eigen value: - int i_ev = 0; - double ev_max = evs[i_ev]; - for(int i = 1; i < 4; i++) - if (evs[i] > ev_max) - ev_max = evs[i_ev = i]; - - // Quaternion: - double q[4]; - for(int i = 0; i < 4; i++) - q[i] = U[i * 4 + i_ev]; - - double q02 = q[0] * q[0], q12 = q[1] * q[1], q22 = q[2] * q[2], q32 = q[3] * q[3]; - double q0_1 = q[0] * q[1], q0_2 = q[0] * q[2], q0_3 = q[0] * q[3]; - double q1_2 = q[1] * q[2], q1_3 = q[1] * q[3]; - double q2_3 = q[2] * q[3]; - - R[0][0] = q02 + q12 - q22 - q32; - R[0][1] = 2. * (q1_2 - q0_3); - R[0][2] = 2. * (q1_3 + q0_2); - - R[1][0] = 2. * (q1_2 + q0_3); - R[1][1] = q02 + q22 - q12 - q32; - R[1][2] = 2. * (q2_3 - q0_1); - - R[2][0] = 2. * (q1_3 - q0_2); - R[2][1] = 2. * (q2_3 + q0_1); - R[2][2] = q02 + q32 - q12 - q22; - - for(int i = 0; i < 3; i++) - T[i] = C_end[i] - (R[i][0] * C_start[0] + R[i][1] * C_start[1] + R[i][2] * C_start[2]); - - return true; -} - -bool p3p::jacobi_4x4(double * A, double * D, double * U) -{ - double B[4], Z[4]; - double Id[16] = {1., 0., 0., 0., - 0., 1., 0., 0., - 0., 0., 1., 0., - 0., 0., 0., 1.}; - - memcpy(U, Id, 16 * sizeof(double)); - - B[0] = A[0]; B[1] = A[5]; B[2] = A[10]; B[3] = A[15]; - memcpy(D, B, 4 * sizeof(double)); - memset(Z, 0, 4 * sizeof(double)); - - for(int iter = 0; iter < 50; iter++) { - double sum = fabs(A[1]) + fabs(A[2]) + fabs(A[3]) + fabs(A[6]) + fabs(A[7]) + fabs(A[11]); - - if (sum == 0.0) - return true; - - double tresh = (iter < 3) ? 0.2 * sum / 16. : 0.0; - for(int i = 0; i < 3; i++) { - double * pAij = A + 5 * i + 1; - for(int j = i + 1 ; j < 4; j++) { - double Aij = *pAij; - double eps_machine = 100.0 * fabs(Aij); - - if ( iter > 3 && fabs(D[i]) + eps_machine == fabs(D[i]) && fabs(D[j]) + eps_machine == fabs(D[j]) ) - *pAij = 0.0; - else if (fabs(Aij) > tresh) { - double hh = D[j] - D[i], t; - if (fabs(hh) + eps_machine == fabs(hh)) - t = Aij / hh; - else { - double theta = 0.5 * hh / Aij; - t = 1.0 / (fabs(theta) + sqrt(1.0 + theta * theta)); - if (theta < 0.0) t = -t; - } - - hh = t * Aij; - Z[i] -= hh; - Z[j] += hh; - D[i] -= hh; - D[j] += hh; - *pAij = 0.0; - - double c = 1.0 / sqrt(1 + t * t); - double s = t * c; - double tau = s / (1.0 + c); - for(int k = 0; k <= i - 1; k++) { - double g = A[k * 4 + i], h = A[k * 4 + j]; - A[k * 4 + i] = g - s * (h + g * tau); - A[k * 4 + j] = h + s * (g - h * tau); - } - for(int k = i + 1; k <= j - 1; k++) { - double g = A[i * 4 + k], h = A[k * 4 + j]; - A[i * 4 + k] = g - s * (h + g * tau); - A[k * 4 + j] = h + s * (g - h * tau); - } - for(int k = j + 1; k < 4; k++) { - double g = A[i * 4 + k], h = A[j * 4 + k]; - A[i * 4 + k] = g - s * (h + g * tau); - A[j * 4 + k] = h + s * (g - h * tau); - } - for(int k = 0; k < 4; k++) { - double g = U[k * 4 + i], h = U[k * 4 + j]; - U[k * 4 + i] = g - s * (h + g * tau); - U[k * 4 + j] = h + s * (g - h * tau); - } - } - pAij++; - } - } - - for(int i = 0; i < 4; i++) B[i] += Z[i]; - memcpy(D, B, 4 * sizeof(double)); - memset(Z, 0, 4 * sizeof(double)); - } - - return false; -} diff --git a/modules/calib3d/src/p3p.h b/modules/calib3d/src/p3p.h deleted file mode 100644 index 57f8d7d..0000000 --- a/modules/calib3d/src/p3p.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef P3P_H -#define P3P_H - - -#include "precomp.hpp" - -class p3p -{ - public: - p3p(double fx, double fy, double cx, double cy); - p3p(cv::Mat cameraMatrix); - - bool solve(cv::Mat& R, cv::Mat& tvec, const cv::Mat& opoints, const cv::Mat& ipoints); - int solve(double R[4][3][3], double t[4][3], - double mu0, double mv0, double X0, double Y0, double Z0, - double mu1, double mv1, double X1, double Y1, double Z1, - double mu2, double mv2, double X2, double Y2, double Z2); - bool solve(double R[3][3], double t[3], - double mu0, double mv0, double X0, double Y0, double Z0, - double mu1, double mv1, double X1, double Y1, double Z1, - double mu2, double mv2, double X2, double Y2, double Z2, - double mu3, double mv3, double X3, double Y3, double Z3); - - private: - template - void init_camera_parameters(const cv::Mat& cameraMatrix) - { - cx = cameraMatrix.at (0, 2); - cy = cameraMatrix.at (1, 2); - fx = cameraMatrix.at (0, 0); - fy = cameraMatrix.at (1, 1); - } - template - void extract_points(const cv::Mat& opoints, const cv::Mat& ipoints, std::vector& points) - { - points.clear(); - points.resize(20); - for(int i = 0; i < 4; i++) - { - points[i*5] = ipoints.at(0,i).x*fx + cx; - points[i*5+1] = ipoints.at(0,i).y*fy + cy; - points[i*5+2] = opoints.at(0,i).x; - points[i*5+3] = opoints.at(0,i).y; - points[i*5+4] = opoints.at(0,i).z; - } - } - void init_inverse_parameters(); - int solve_for_lengths(double lengths[4][3], double distances[3], double cosines[3]); - bool align(double M_start[3][3], - double X0, double Y0, double Z0, - double X1, double Y1, double Z1, - double X2, double Y2, double Z2, - double R[3][3], double T[3]); - - bool jacobi_4x4(double * A, double * D, double * U); - - double fx, fy, cx, cy; - double inv_fx, inv_fy, cx_fx, cy_fy; -}; - -#endif // P3P_H diff --git a/modules/calib3d/src/polynom_solver.cpp b/modules/calib3d/src/polynom_solver.cpp deleted file mode 100644 index 1813340..0000000 --- a/modules/calib3d/src/polynom_solver.cpp +++ /dev/null @@ -1,171 +0,0 @@ -#include -#include -using namespace std; -#include "precomp.hpp" - -#include "polynom_solver.h" - -int solve_deg2(double a, double b, double c, double & x1, double & x2) -{ - double delta = b * b - 4 * a * c; - - if (delta < 0) return 0; - - double inv_2a = 0.5 / a; - - if (delta == 0) { - x1 = -b * inv_2a; - x2 = x1; - return 1; - } - - double sqrt_delta = sqrt(delta); - x1 = (-b + sqrt_delta) * inv_2a; - x2 = (-b - sqrt_delta) * inv_2a; - return 2; -} - - -/// Reference : Eric W. Weisstein. "Cubic Equation." From MathWorld--A Wolfram Web Resource. -/// http://mathworld.wolfram.com/CubicEquation.html -/// \return Number of real roots found. -int solve_deg3(double a, double b, double c, double d, - double & x0, double & x1, double & x2) -{ - if (a == 0) { - // Solve second order sytem - if (b == 0) { - // Solve first order system - if (c == 0) - return 0; - - x0 = -d / c; - return 1; - } - - x2 = 0; - return solve_deg2(b, c, d, x0, x1); - } - - // Calculate the normalized form x^3 + a2 * x^2 + a1 * x + a0 = 0 - double inv_a = 1. / a; - double b_a = inv_a * b, b_a2 = b_a * b_a; - double c_a = inv_a * c; - double d_a = inv_a * d; - - // Solve the cubic equation - double Q = (3 * c_a - b_a2) / 9; - double R = (9 * b_a * c_a - 27 * d_a - 2 * b_a * b_a2) / 54; - double Q3 = Q * Q * Q; - double D = Q3 + R * R; - double b_a_3 = (1. / 3.) * b_a; - - if (Q == 0) { - if(R == 0) { - x0 = x1 = x2 = - b_a_3; - return 3; - } - else { - x0 = pow(2 * R, 1 / 3.0) - b_a_3; - return 1; - } - } - - if (D <= 0) { - // Three real roots - double theta = acos(R / sqrt(-Q3)); - double sqrt_Q = sqrt(-Q); - x0 = 2 * sqrt_Q * cos(theta / 3.0) - b_a_3; - x1 = 2 * sqrt_Q * cos((theta + 2 * CV_PI)/ 3.0) - b_a_3; - x2 = 2 * sqrt_Q * cos((theta + 4 * CV_PI)/ 3.0) - b_a_3; - - return 3; - } - - // D > 0, only one real root - double AD = pow(fabs(R) + sqrt(D), 1.0 / 3.0) * (R > 0 ? 1 : (R < 0 ? -1 : 0)); - double BD = (AD == 0) ? 0 : -Q / AD; - - // Calculate the only real root - x0 = AD + BD - b_a_3; - - return 1; -} - -/// Reference : Eric W. Weisstein. "Quartic Equation." From MathWorld--A Wolfram Web Resource. -/// http://mathworld.wolfram.com/QuarticEquation.html -/// \return Number of real roots found. -int solve_deg4(double a, double b, double c, double d, double e, - double & x0, double & x1, double & x2, double & x3) -{ - if (a == 0) { - x3 = 0; - return solve_deg3(b, c, d, e, x0, x1, x2); - } - - // Normalize coefficients - double inv_a = 1. / a; - b *= inv_a; c *= inv_a; d *= inv_a; e *= inv_a; - double b2 = b * b, bc = b * c, b3 = b2 * b; - - // Solve resultant cubic - double r0, r1, r2; - int n = solve_deg3(1, -c, d * b - 4 * e, 4 * c * e - d * d - b2 * e, r0, r1, r2); - if (n == 0) return 0; - - // Calculate R^2 - double R2 = 0.25 * b2 - c + r0, R; - if (R2 < 0) - return 0; - - R = sqrt(R2); - double inv_R = 1. / R; - - int nb_real_roots = 0; - - // Calculate D^2 and E^2 - double D2, E2; - if (R < 10E-12) { - double temp = r0 * r0 - 4 * e; - if (temp < 0) - D2 = E2 = -1; - else { - double sqrt_temp = sqrt(temp); - D2 = 0.75 * b2 - 2 * c + 2 * sqrt_temp; - E2 = D2 - 4 * sqrt_temp; - } - } - else { - double u = 0.75 * b2 - 2 * c - R2, - v = 0.25 * inv_R * (4 * bc - 8 * d - b3); - D2 = u + v; - E2 = u - v; - } - - double b_4 = 0.25 * b, R_2 = 0.5 * R; - if (D2 >= 0) { - double D = sqrt(D2); - nb_real_roots = 2; - double D_2 = 0.5 * D; - x0 = R_2 + D_2 - b_4; - x1 = x0 - D; - } - - // Calculate E^2 - if (E2 >= 0) { - double E = sqrt(E2); - double E_2 = 0.5 * E; - if (nb_real_roots == 0) { - x0 = - R_2 + E_2 - b_4; - x1 = x0 - E; - nb_real_roots = 2; - } - else { - x2 = - R_2 + E_2 - b_4; - x3 = x2 - E; - nb_real_roots = 4; - } - } - - return nb_real_roots; -} diff --git a/modules/calib3d/src/polynom_solver.h b/modules/calib3d/src/polynom_solver.h deleted file mode 100644 index 713bcf3..0000000 --- a/modules/calib3d/src/polynom_solver.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POLYNOM_SOLVER_H -#define POLYNOM_SOLVER_H - -int solve_deg2(double a, double b, double c, double & x1, double & x2); - -int solve_deg3(double a, double b, double c, double d, - double & x0, double & x1, double & x2); - -int solve_deg4(double a, double b, double c, double d, double e, - double & x0, double & x1, double & x2, double & x3); - -#endif // POLYNOM_SOLVER_H diff --git a/modules/calib3d/src/posit.cpp b/modules/calib3d/src/posit.cpp deleted file mode 100644 index c8c1c2c..0000000 --- a/modules/calib3d/src/posit.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -/* POSIT structure */ -struct CvPOSITObject -{ - int N; - float* inv_matr; - float* obj_vecs; - float* img_vecs; -}; - -static void icvPseudoInverse3D( float *a, float *b, int n, int method ); - -static CvStatus icvCreatePOSITObject( CvPoint3D32f *points, - int numPoints, - CvPOSITObject **ppObject ) -{ - int i; - - /* Compute size of required memory */ - /* buffer for inverse matrix = N*3*float */ - /* buffer for storing weakImagePoints = numPoints * 2 * float */ - /* buffer for storing object vectors = N*3*float */ - /* buffer for storing image vectors = N*2*float */ - - int N = numPoints - 1; - int inv_matr_size = N * 3 * sizeof( float ); - int obj_vec_size = inv_matr_size; - int img_vec_size = N * 2 * sizeof( float ); - CvPOSITObject *pObject; - - /* check bad arguments */ - if( points == NULL ) - return CV_NULLPTR_ERR; - if( numPoints < 4 ) - return CV_BADSIZE_ERR; - if( ppObject == NULL ) - return CV_NULLPTR_ERR; - - /* memory allocation */ - pObject = (CvPOSITObject *) cvAlloc( sizeof( CvPOSITObject ) + - inv_matr_size + obj_vec_size + img_vec_size ); - - if( !pObject ) - return CV_OUTOFMEM_ERR; - - /* part the memory between all structures */ - pObject->N = N; - pObject->inv_matr = (float *) ((char *) pObject + sizeof( CvPOSITObject )); - pObject->obj_vecs = (float *) ((char *) (pObject->inv_matr) + inv_matr_size); - pObject->img_vecs = (float *) ((char *) (pObject->obj_vecs) + obj_vec_size); - -/****************************************************************************************\ -* Construct object vectors from object points * -\****************************************************************************************/ - for( i = 0; i < numPoints - 1; i++ ) - { - pObject->obj_vecs[i] = points[i + 1].x - points[0].x; - pObject->obj_vecs[N + i] = points[i + 1].y - points[0].y; - pObject->obj_vecs[2 * N + i] = points[i + 1].z - points[0].z; - } -/****************************************************************************************\ -* Compute pseudoinverse matrix * -\****************************************************************************************/ - icvPseudoInverse3D( pObject->obj_vecs, pObject->inv_matr, N, 0 ); - - *ppObject = pObject; - return CV_NO_ERR; -} - - -static CvStatus icvPOSIT( CvPOSITObject *pObject, CvPoint2D32f *imagePoints, - float focalLength, CvTermCriteria criteria, - float* rotation, float* translation ) -{ - int i, j, k; - int count = 0, converged = 0; - float inorm, jnorm, invInorm, invJnorm, invScale, scale = 0, inv_Z = 0; - float diff = (float)criteria.epsilon; - float inv_focalLength = 1 / focalLength; - - /* Check bad arguments */ - if( imagePoints == NULL ) - return CV_NULLPTR_ERR; - if( pObject == NULL ) - return CV_NULLPTR_ERR; - if( focalLength <= 0 ) - return CV_BADFACTOR_ERR; - if( !rotation ) - return CV_NULLPTR_ERR; - if( !translation ) - return CV_NULLPTR_ERR; - if( (criteria.type == 0) || (criteria.type > (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS))) - return CV_BADFLAG_ERR; - if( (criteria.type & CV_TERMCRIT_EPS) && criteria.epsilon < 0 ) - return CV_BADFACTOR_ERR; - if( (criteria.type & CV_TERMCRIT_ITER) && criteria.max_iter <= 0 ) - return CV_BADFACTOR_ERR; - - /* init variables */ - int N = pObject->N; - float *objectVectors = pObject->obj_vecs; - float *invMatrix = pObject->inv_matr; - float *imgVectors = pObject->img_vecs; - - while( !converged ) - { - if( count == 0 ) - { - /* subtract out origin to get image vectors */ - for( i = 0; i < N; i++ ) - { - imgVectors[i] = imagePoints[i + 1].x - imagePoints[0].x; - imgVectors[N + i] = imagePoints[i + 1].y - imagePoints[0].y; - } - } - else - { - diff = 0; - /* Compute new SOP (scaled orthograthic projection) image from pose */ - for( i = 0; i < N; i++ ) - { - /* objectVector * k */ - float old; - float tmp = objectVectors[i] * rotation[6] /*[2][0]*/ + - objectVectors[N + i] * rotation[7] /*[2][1]*/ + - objectVectors[2 * N + i] * rotation[8] /*[2][2]*/; - - tmp *= inv_Z; - tmp += 1; - - old = imgVectors[i]; - imgVectors[i] = imagePoints[i + 1].x * tmp - imagePoints[0].x; - - diff = MAX( diff, (float) fabs( imgVectors[i] - old )); - - old = imgVectors[N + i]; - imgVectors[N + i] = imagePoints[i + 1].y * tmp - imagePoints[0].y; - - diff = MAX( diff, (float) fabs( imgVectors[N + i] - old )); - } - } - - /* calculate I and J vectors */ - for( i = 0; i < 2; i++ ) - { - for( j = 0; j < 3; j++ ) - { - rotation[3*i+j] /*[i][j]*/ = 0; - for( k = 0; k < N; k++ ) - { - rotation[3*i+j] /*[i][j]*/ += invMatrix[j * N + k] * imgVectors[i * N + k]; - } - } - } - - inorm = rotation[0] /*[0][0]*/ * rotation[0] /*[0][0]*/ + - rotation[1] /*[0][1]*/ * rotation[1] /*[0][1]*/ + - rotation[2] /*[0][2]*/ * rotation[2] /*[0][2]*/; - - jnorm = rotation[3] /*[1][0]*/ * rotation[3] /*[1][0]*/ + - rotation[4] /*[1][1]*/ * rotation[4] /*[1][1]*/ + - rotation[5] /*[1][2]*/ * rotation[5] /*[1][2]*/; - - invInorm = cvInvSqrt( inorm ); - invJnorm = cvInvSqrt( jnorm ); - - inorm *= invInorm; - jnorm *= invJnorm; - - rotation[0] /*[0][0]*/ *= invInorm; - rotation[1] /*[0][1]*/ *= invInorm; - rotation[2] /*[0][2]*/ *= invInorm; - - rotation[3] /*[1][0]*/ *= invJnorm; - rotation[4] /*[1][1]*/ *= invJnorm; - rotation[5] /*[1][2]*/ *= invJnorm; - - /* row2 = row0 x row1 (cross product) */ - rotation[6] /*->m[2][0]*/ = rotation[1] /*->m[0][1]*/ * rotation[5] /*->m[1][2]*/ - - rotation[2] /*->m[0][2]*/ * rotation[4] /*->m[1][1]*/; - - rotation[7] /*->m[2][1]*/ = rotation[2] /*->m[0][2]*/ * rotation[3] /*->m[1][0]*/ - - rotation[0] /*->m[0][0]*/ * rotation[5] /*->m[1][2]*/; - - rotation[8] /*->m[2][2]*/ = rotation[0] /*->m[0][0]*/ * rotation[4] /*->m[1][1]*/ - - rotation[1] /*->m[0][1]*/ * rotation[3] /*->m[1][0]*/; - - scale = (inorm + jnorm) / 2.0f; - inv_Z = scale * inv_focalLength; - - count++; - converged = ((criteria.type & CV_TERMCRIT_EPS) && (diff < criteria.epsilon)); - converged |= ((criteria.type & CV_TERMCRIT_ITER) && (count == criteria.max_iter)); - } - invScale = 1 / scale; - translation[0] = imagePoints[0].x * invScale; - translation[1] = imagePoints[0].y * invScale; - translation[2] = 1 / inv_Z; - - return CV_NO_ERR; -} - - -static CvStatus icvReleasePOSITObject( CvPOSITObject ** ppObject ) -{ - cvFree( ppObject ); - return CV_NO_ERR; -} - -/*F/////////////////////////////////////////////////////////////////////////////////////// -// Name: icvPseudoInverse3D -// Purpose: Pseudoinverse N x 3 matrix N >= 3 -// Context: -// Parameters: -// a - input matrix -// b - pseudoinversed a -// n - number of rows in a -// method - if 0, then b = inv(transpose(a)*a) * transpose(a) -// if 1, then SVD used. -// Returns: -// Notes: Both matrix are stored by n-dimensional vectors. -// Now only method == 0 supported. -//F*/ -void -icvPseudoInverse3D( float *a, float *b, int n, int method ) -{ - int k; - - if( method == 0 ) - { - float ata00 = 0; - float ata11 = 0; - float ata22 = 0; - float ata01 = 0; - float ata02 = 0; - float ata12 = 0; - float det = 0; - - /* compute matrix ata = transpose(a) * a */ - for( k = 0; k < n; k++ ) - { - float a0 = a[k]; - float a1 = a[n + k]; - float a2 = a[2 * n + k]; - - ata00 += a0 * a0; - ata11 += a1 * a1; - ata22 += a2 * a2; - - ata01 += a0 * a1; - ata02 += a0 * a2; - ata12 += a1 * a2; - } - /* inverse matrix ata */ - { - float inv_det; - float p00 = ata11 * ata22 - ata12 * ata12; - float p01 = -(ata01 * ata22 - ata12 * ata02); - float p02 = ata12 * ata01 - ata11 * ata02; - - float p11 = ata00 * ata22 - ata02 * ata02; - float p12 = -(ata00 * ata12 - ata01 * ata02); - float p22 = ata00 * ata11 - ata01 * ata01; - - det += ata00 * p00; - det += ata01 * p01; - det += ata02 * p02; - - inv_det = 1 / det; - - /* compute resultant matrix */ - for( k = 0; k < n; k++ ) - { - float a0 = a[k]; - float a1 = a[n + k]; - float a2 = a[2 * n + k]; - - b[k] = (p00 * a0 + p01 * a1 + p02 * a2) * inv_det; - b[n + k] = (p01 * a0 + p11 * a1 + p12 * a2) * inv_det; - b[2 * n + k] = (p02 * a0 + p12 * a1 + p22 * a2) * inv_det; - } - } - } - - /*if ( method == 1 ) - { - } - */ - - return; -} - -CV_IMPL CvPOSITObject * -cvCreatePOSITObject( CvPoint3D32f * points, int numPoints ) -{ - CvPOSITObject *pObject = 0; - IPPI_CALL( icvCreatePOSITObject( points, numPoints, &pObject )); - return pObject; -} - - -CV_IMPL void -cvPOSIT( CvPOSITObject * pObject, CvPoint2D32f * imagePoints, - double focalLength, CvTermCriteria criteria, - float* rotation, float* translation ) -{ - IPPI_CALL( icvPOSIT( pObject, imagePoints,(float) focalLength, criteria, - rotation, translation )); -} - -CV_IMPL void -cvReleasePOSITObject( CvPOSITObject ** ppObject ) -{ - IPPI_CALL( icvReleasePOSITObject( ppObject )); -} - -/* End of file. */ diff --git a/modules/calib3d/src/precomp.hpp b/modules/calib3d/src/precomp.hpp deleted file mode 100644 index e96ba53..0000000 --- a/modules/calib3d/src/precomp.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/calib3d/calib3d.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/core/internal.hpp" -#include "opencv2/features2d/features2d.hpp" -#include - -#ifdef HAVE_TEGRA_OPTIMIZATION -#include "opencv2/calib3d/calib3d_tegra.hpp" -#else -#define GET_OPTIMIZED(func) (func) -#endif - -#endif diff --git a/modules/calib3d/src/quadsubpix.cpp b/modules/calib3d/src/quadsubpix.cpp deleted file mode 100644 index 2f2dae3..0000000 --- a/modules/calib3d/src/quadsubpix.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // Intel License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000, Intel Corporation, all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#include "precomp.hpp" - -#include -#include -#include - -#include - -//#define _SUBPIX_VERBOSE - -#undef max - -namespace cv { - - -// static void drawCircles(Mat& img, const vector& corners, const vector& radius) -// { -// for(size_t i = 0; i < corners.size(); i++) -// { -// circle(img, corners[i], cvRound(radius[i]), CV_RGB(255, 0, 0)); -// } -// } - -// static int histQuantile(const Mat& hist, float quantile) -// { -// if(hist.dims > 1) return -1; // works for 1D histograms only - -// float cur_sum = 0; -// float total_sum = (float)sum(hist).val[0]; -// float quantile_sum = total_sum*quantile; -// for(int j = 0; j < hist.size[0]; j++) -// { -// cur_sum += (float)hist.at(j); -// if(cur_sum > quantile_sum) -// { -// return j; -// } -// } - -// return hist.size[0] - 1; -// } - -inline bool is_smaller(const std::pair& p1, const std::pair& p2) -{ - return p1.second < p2.second; -} - -static void orderContours(const vector >& contours, Point2f point, vector >& order) -{ - order.clear(); - size_t i, j, n = contours.size(); - for(i = 0; i < n; i++) - { - size_t ni = contours[i].size(); - double min_dist = std::numeric_limits::max(); - for(j = 0; j < ni; j++) - { - double dist = norm(Point2f((float)contours[i][j].x, (float)contours[i][j].y) - point); - min_dist = MIN(min_dist, dist); - } - order.push_back(std::pair((int)i, (float)min_dist)); - } - - std::sort(order.begin(), order.end(), is_smaller); -} - -// fit second order curve to a set of 2D points -inline void fitCurve2Order(const vector& /*points*/, vector& /*curve*/) -{ - // TBD -} - -inline void findCurvesCross(const vector& /*curve1*/, const vector& /*curve2*/, Point2f& /*cross_point*/) -{ -} - -static void findLinesCrossPoint(Point2f origin1, Point2f dir1, Point2f origin2, Point2f dir2, Point2f& cross_point) -{ - float det = dir2.x*dir1.y - dir2.y*dir1.x; - Point2f offset = origin2 - origin1; - - float alpha = (dir2.x*offset.y - dir2.y*offset.x)/det; - cross_point = origin1 + dir1*alpha; -} - -// static void findCorner(const vector& contour, Point2f point, Point2f& corner) -// { -// // find the nearest point -// double min_dist = std::numeric_limits::max(); -// int min_idx = -1; - -// // find corner idx -// for(size_t i = 0; i < contour.size(); i++) -// { -// double dist = norm(Point2f((float)contour[i].x, (float)contour[i].y) - point); -// if(dist < min_dist) -// { -// min_dist = dist; -// min_idx = (int)i; -// } -// } -// assert(min_idx >= 0); - -// // temporary solution, have to make something more precise -// corner = contour[min_idx]; -// return; -// } - -static void findCorner(const vector& contour, Point2f point, Point2f& corner) -{ - // find the nearest point - double min_dist = std::numeric_limits::max(); - int min_idx = -1; - - // find corner idx - for(size_t i = 0; i < contour.size(); i++) - { - double dist = norm(contour[i] - point); - if(dist < min_dist) - { - min_dist = dist; - min_idx = (int)i; - } - } - assert(min_idx >= 0); - - // temporary solution, have to make something more precise - corner = contour[min_idx]; - return; -} - -static int segment_hist_max(const Mat& hist, int& low_thresh, int& high_thresh) -{ - Mat bw; - //const double max_bell_width = 20; // we expect two bells with width bounded above - //const double min_bell_width = 5; // and below - - double total_sum = sum(hist).val[0]; - //double thresh = total_sum/(2*max_bell_width)*0.25f; // quarter of a bar inside a bell - -// threshold(hist, bw, thresh, 255.0, CV_THRESH_BINARY); - - double quantile_sum = 0.0; - //double min_quantile = 0.2; - double low_sum = 0; - double max_segment_length = 0; - int max_start_x = -1; - int max_end_x = -1; - int start_x = 0; - const double out_of_bells_fraction = 0.1; - for(int x = 0; x < hist.size[0]; x++) - { - quantile_sum += hist.at(x); - if(quantile_sum < 0.2*total_sum) continue; - - if(quantile_sum - low_sum > out_of_bells_fraction*total_sum) - { - if(max_segment_length < x - start_x) - { - max_segment_length = x - start_x; - max_start_x = start_x; - max_end_x = x; - } - - low_sum = quantile_sum; - start_x = x; - } - } - - if(start_x == -1) - { - return 0; - } - else - { - low_thresh = cvRound(max_start_x + 0.25*(max_end_x - max_start_x)); - high_thresh = cvRound(max_start_x + 0.75*(max_end_x - max_start_x)); - return 1; - } -} - -} - -bool cv::find4QuadCornerSubpix(InputArray _img, InputOutputArray _corners, Size region_size) -{ - Mat img = _img.getMat(), cornersM = _corners.getMat(); - int ncorners = cornersM.checkVector(2, CV_32F); - CV_Assert( ncorners >= 0 ); - Point2f* corners = cornersM.ptr(); - const int nbins = 256; - float ranges[] = {0, 256}; - const float* _ranges = ranges; - Mat hist; - -#if defined(_SUBPIX_VERBOSE) - vector radius; - radius.assign(corners.size(), 0.0f); -#endif //_SUBPIX_VERBOSE - - - Mat black_comp, white_comp; - for(int i = 0; i < ncorners; i++) - { - int channels = 0; - Rect roi(cvRound(corners[i].x - region_size.width), cvRound(corners[i].y - region_size.height), - region_size.width*2 + 1, region_size.height*2 + 1); - Mat img_roi = img(roi); - calcHist(&img_roi, 1, &channels, Mat(), hist, 1, &nbins, &_ranges); - -#if 0 - int black_thresh = histQuantile(hist, 0.45f); - int white_thresh = histQuantile(hist, 0.55f); -#else - int black_thresh = 0, white_thresh = 0; - segment_hist_max(hist, black_thresh, white_thresh); -#endif - - threshold(img, black_comp, black_thresh, 255.0, CV_THRESH_BINARY_INV); - threshold(img, white_comp, white_thresh, 255.0, CV_THRESH_BINARY); - - const int erode_count = 1; - erode(black_comp, black_comp, Mat(), Point(-1, -1), erode_count); - erode(white_comp, white_comp, Mat(), Point(-1, -1), erode_count); - -#if defined(_SUBPIX_VERBOSE) - namedWindow("roi", 1); - imshow("roi", img_roi); - imwrite("test.jpg", img); - namedWindow("black", 1); - imshow("black", black_comp); - namedWindow("white", 1); - imshow("white", white_comp); - cvWaitKey(0); - imwrite("black.jpg", black_comp); - imwrite("white.jpg", white_comp); -#endif - - - vector > white_contours, black_contours; - vector white_hierarchy, black_hierarchy; - findContours(black_comp, black_contours, black_hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); - findContours(white_comp, white_contours, white_hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); - - if(black_contours.size() < 5 || white_contours.size() < 5) continue; - - // find two white and black blobs that are close to the input point - vector > white_order, black_order; - orderContours(black_contours, corners[i], black_order); - orderContours(white_contours, corners[i], white_order); - - const float max_dist = 10.0f; - if(black_order[0].second > max_dist || black_order[1].second > max_dist || - white_order[0].second > max_dist || white_order[1].second > max_dist) - { - continue; // there will be no improvement in this corner position - } - - const vector* quads[4] = {&black_contours[black_order[0].first], &black_contours[black_order[1].first], - &white_contours[white_order[0].first], &white_contours[white_order[1].first]}; - vector quads_approx[4]; - Point2f quad_corners[4]; - for(int k = 0; k < 4; k++) - { -#if 1 - vector temp; - for(size_t j = 0; j < quads[k]->size(); j++) temp.push_back((*quads[k])[j]); - approxPolyDP(Mat(temp), quads_approx[k], 0.5, true); - - findCorner(quads_approx[k], corners[i], quad_corners[k]); -#else - findCorner(*quads[k], corners[i], quad_corners[k]); -#endif - quad_corners[k] += Point2f(0.5f, 0.5f); - } - - // cross two lines - Point2f origin1 = quad_corners[0]; - Point2f dir1 = quad_corners[1] - quad_corners[0]; - Point2f origin2 = quad_corners[2]; - Point2f dir2 = quad_corners[3] - quad_corners[2]; - double angle = acos(dir1.dot(dir2)/(norm(dir1)*norm(dir2))); - if(cvIsNaN(angle) || cvIsInf(angle) || angle < 0.5 || angle > CV_PI - 0.5) continue; - - findLinesCrossPoint(origin1, dir1, origin2, dir2, corners[i]); - -#if defined(_SUBPIX_VERBOSE) - radius[i] = norm(corners[i] - ground_truth_corners[ground_truth_idx])*6; - -#if 1 - Mat test(img.size(), CV_32FC3); - cvtColor(img, test, CV_GRAY2RGB); -// line(test, quad_corners[0] - corners[i] + Point2f(30, 30), quad_corners[1] - corners[i] + Point2f(30, 30), cvScalar(0, 255, 0)); -// line(test, quad_corners[2] - corners[i] + Point2f(30, 30), quad_corners[3] - corners[i] + Point2f(30, 30), cvScalar(0, 255, 0)); - vector > contrs; - contrs.resize(1); - for(int k = 0; k < 4; k++) - { - //contrs[0] = quads_approx[k]; - contrs[0].clear(); - for(size_t j = 0; j < quads_approx[k].size(); j++) contrs[0].push_back(quads_approx[k][j]); - drawContours(test, contrs, 0, CV_RGB(0, 0, 255), 1, 1, vector(), 2); - circle(test, quad_corners[k], 0.5, CV_RGB(255, 0, 0)); - } - Mat test1 = test(Rect(corners[i].x - 30, corners[i].y - 30, 60, 60)); - namedWindow("1", 1); - imshow("1", test1); - imwrite("test.jpg", test); - waitKey(0); -#endif -#endif //_SUBPIX_VERBOSE - - } - -#if defined(_SUBPIX_VERBOSE) - Mat test(img.size(), CV_32FC3); - cvtColor(img, test, CV_GRAY2RGB); - drawCircles(test, corners, radius); - - namedWindow("corners", 1); - imshow("corners", test); - waitKey(); -#endif //_SUBPIX_VERBOSE - - return true; -} diff --git a/modules/calib3d/src/solvepnp.cpp b/modules/calib3d/src/solvepnp.cpp deleted file mode 100644 index b0ef1d9..0000000 --- a/modules/calib3d/src/solvepnp.cpp +++ /dev/null @@ -1,348 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - // Copyright (C) 2009, Willow Garage Inc., all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#include "precomp.hpp" -#include "epnp.h" -#include "p3p.h" -#include -using namespace cv; - -bool cv::solvePnP( InputArray _opoints, InputArray _ipoints, - InputArray _cameraMatrix, InputArray _distCoeffs, - OutputArray _rvec, OutputArray _tvec, bool useExtrinsicGuess, int flags ) -{ - Mat opoints = _opoints.getMat(), ipoints = _ipoints.getMat(); - int npoints = std::max(opoints.checkVector(3, CV_32F), opoints.checkVector(3, CV_64F)); - CV_Assert( npoints >= 0 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) ); - _rvec.create(3, 1, CV_64F); - _tvec.create(3, 1, CV_64F); - Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat(); - - if (flags == CV_EPNP) - { - cv::Mat undistortedPoints; - cv::undistortPoints(ipoints, undistortedPoints, cameraMatrix, distCoeffs); - epnp PnP(cameraMatrix, opoints, undistortedPoints); - - cv::Mat R, rvec = _rvec.getMat(), tvec = _tvec.getMat(); - PnP.compute_pose(R, tvec); - cv::Rodrigues(R, rvec); - return true; - } - else if (flags == CV_P3P) - { - CV_Assert( npoints == 4); - cv::Mat undistortedPoints; - cv::undistortPoints(ipoints, undistortedPoints, cameraMatrix, distCoeffs); - p3p P3Psolver(cameraMatrix); - - cv::Mat R, rvec = _rvec.getMat(), tvec = _tvec.getMat(); - bool result = P3Psolver.solve(R, tvec, opoints, undistortedPoints); - if (result) - cv::Rodrigues(R, rvec); - return result; - } - else if (flags == CV_ITERATIVE) - { - CvMat c_objectPoints = opoints, c_imagePoints = ipoints; - CvMat c_cameraMatrix = cameraMatrix, c_distCoeffs = distCoeffs; - CvMat c_rvec = _rvec.getMat(), c_tvec = _tvec.getMat(); - cvFindExtrinsicCameraParams2(&c_objectPoints, &c_imagePoints, &c_cameraMatrix, - c_distCoeffs.rows*c_distCoeffs.cols ? &c_distCoeffs : 0, - &c_rvec, &c_tvec, useExtrinsicGuess ); - return true; - } - else - CV_Error(CV_StsBadArg, "The flags argument must be one of CV_ITERATIVE or CV_EPNP"); - return false; -} - -namespace cv -{ - namespace pnpransac - { - const int MIN_POINTS_COUNT = 4; - - static void project3dPoints(const Mat& points, const Mat& rvec, const Mat& tvec, Mat& modif_points) - { - modif_points.create(1, points.cols, CV_32FC3); - Mat R(3, 3, CV_64FC1); - Rodrigues(rvec, R); - Mat transformation(3, 4, CV_64F); - Mat r = transformation.colRange(0, 3); - R.copyTo(r); - Mat t = transformation.colRange(3, 4); - tvec.copyTo(t); - transform(points, modif_points, transformation); - } - - struct CameraParameters - { - void init(Mat _intrinsics, Mat _distCoeffs) - { - _intrinsics.copyTo(intrinsics); - _distCoeffs.copyTo(distortion); - } - - Mat intrinsics; - Mat distortion; - }; - - struct Parameters - { - int iterationsCount; - float reprojectionError; - int minInliersCount; - bool useExtrinsicGuess; - int flags; - CameraParameters camera; - }; - - static void pnpTask(const vector& pointsMask, const Mat& objectPoints, const Mat& imagePoints, - const Parameters& params, vector& inliers, Mat& rvec, Mat& tvec, - const Mat& rvecInit, const Mat& tvecInit, Mutex& resultsMutex) - { - Mat modelObjectPoints(1, MIN_POINTS_COUNT, CV_32FC3), modelImagePoints(1, MIN_POINTS_COUNT, CV_32FC2); - for (int i = 0, colIndex = 0; i < (int)pointsMask.size(); i++) - { - if (pointsMask[i]) - { - Mat colModelImagePoints = modelImagePoints(Rect(colIndex, 0, 1, 1)); - imagePoints.col(i).copyTo(colModelImagePoints); - Mat colModelObjectPoints = modelObjectPoints(Rect(colIndex, 0, 1, 1)); - objectPoints.col(i).copyTo(colModelObjectPoints); - colIndex = colIndex+1; - } - } - - //filter same 3d points, hang in solvePnP - double eps = 1e-10; - int num_same_points = 0; - for (int i = 0; i < MIN_POINTS_COUNT; i++) - for (int j = i + 1; j < MIN_POINTS_COUNT; j++) - { - if (norm(modelObjectPoints.at(0, i) - modelObjectPoints.at(0, j)) < eps) - num_same_points++; - } - if (num_same_points > 0) - return; - - Mat localRvec, localTvec; - rvecInit.copyTo(localRvec); - tvecInit.copyTo(localTvec); - - solvePnP(modelObjectPoints, modelImagePoints, params.camera.intrinsics, params.camera.distortion, localRvec, localTvec, - params.useExtrinsicGuess, params.flags); - - - vector projected_points; - projected_points.resize(objectPoints.cols); - projectPoints(objectPoints, localRvec, localTvec, params.camera.intrinsics, params.camera.distortion, projected_points); - - Mat rotatedPoints; - project3dPoints(objectPoints, localRvec, localTvec, rotatedPoints); - - vector localInliers; - for (int i = 0; i < objectPoints.cols; i++) - { - Point2f p(imagePoints.at(0, i)[0], imagePoints.at(0, i)[1]); - if ((norm(p - projected_points[i]) < params.reprojectionError) - && (rotatedPoints.at(0, i)[2] > 0)) //hack - { - localInliers.push_back(i); - } - } - - if (localInliers.size() > inliers.size()) - { - resultsMutex.lock(); - - inliers.clear(); - inliers.resize(localInliers.size()); - memcpy(&inliers[0], &localInliers[0], sizeof(int) * localInliers.size()); - localRvec.copyTo(rvec); - localTvec.copyTo(tvec); - - resultsMutex.unlock(); - } - } - - class PnPSolver - { - public: - void operator()( const BlockedRange& r ) const - { - vector pointsMask(objectPoints.cols, 0); - memset(&pointsMask[0], 1, MIN_POINTS_COUNT ); - for( int i=r.begin(); i!=r.end(); ++i ) - { - generateVar(pointsMask); - pnpTask(pointsMask, objectPoints, imagePoints, parameters, - inliers, rvec, tvec, initRvec, initTvec, syncMutex); - if ((int)inliers.size() >= parameters.minInliersCount) - { -#ifdef HAVE_TBB - tbb::task::self().cancel_group_execution(); -#else - break; -#endif - } - } - } - PnPSolver(const Mat& _objectPoints, const Mat& _imagePoints, const Parameters& _parameters, - Mat& _rvec, Mat& _tvec, vector& _inliers): - objectPoints(_objectPoints), imagePoints(_imagePoints), parameters(_parameters), - rvec(_rvec), tvec(_tvec), inliers(_inliers) - { - rvec.copyTo(initRvec); - tvec.copyTo(initTvec); - - generator.state = theRNG().state; //to control it somehow... - } - private: - PnPSolver& operator=(const PnPSolver&); - - const Mat& objectPoints; - const Mat& imagePoints; - const Parameters& parameters; - Mat &rvec, &tvec; - vector& inliers; - Mat initRvec, initTvec; - - static RNG generator; - static Mutex syncMutex; - - void generateVar(vector& mask) const - { - int size = (int)mask.size(); - for (int i = 0; i < size; i++) - { - int i1 = generator.uniform(0, size); - int i2 = generator.uniform(0, size); - char curr = mask[i1]; - mask[i1] = mask[i2]; - mask[i2] = curr; - } - } - }; - - Mutex PnPSolver::syncMutex; - RNG PnPSolver::generator; - - } -} - -void cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints, - InputArray _cameraMatrix, InputArray _distCoeffs, - OutputArray _rvec, OutputArray _tvec, bool useExtrinsicGuess, - int iterationsCount, float reprojectionError, int minInliersCount, - OutputArray _inliers, int flags) -{ - Mat opoints = _opoints.getMat(), ipoints = _ipoints.getMat(); - Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat(); - - CV_Assert(opoints.isContinuous()); - CV_Assert(opoints.depth() == CV_32F); - CV_Assert((opoints.rows == 1 && opoints.channels() == 3) || opoints.cols*opoints.channels() == 3); - CV_Assert(ipoints.isContinuous()); - CV_Assert(ipoints.depth() == CV_32F); - CV_Assert((ipoints.rows == 1 && ipoints.channels() == 2) || ipoints.cols*ipoints.channels() == 2); - - _rvec.create(3, 1, CV_64FC1); - _tvec.create(3, 1, CV_64FC1); - Mat rvec = _rvec.getMat(); - Mat tvec = _tvec.getMat(); - - Mat objectPoints = opoints.reshape(3, 1), imagePoints = ipoints.reshape(2, 1); - - if (minInliersCount <= 0) - minInliersCount = objectPoints.cols; - cv::pnpransac::Parameters params; - params.iterationsCount = iterationsCount; - params.minInliersCount = minInliersCount; - params.reprojectionError = reprojectionError; - params.useExtrinsicGuess = useExtrinsicGuess; - params.camera.init(cameraMatrix, distCoeffs); - params.flags = flags; - - vector localInliers; - Mat localRvec, localTvec; - rvec.copyTo(localRvec); - tvec.copyTo(localTvec); - - if (objectPoints.cols >= pnpransac::MIN_POINTS_COUNT) - { - parallel_for(BlockedRange(0,iterationsCount), cv::pnpransac::PnPSolver(objectPoints, imagePoints, params, - localRvec, localTvec, localInliers)); - } - - if (localInliers.size() >= (size_t)pnpransac::MIN_POINTS_COUNT) - { - if (flags != CV_P3P) - { - int i, pointsCount = (int)localInliers.size(); - Mat inlierObjectPoints(1, pointsCount, CV_32FC3), inlierImagePoints(1, pointsCount, CV_32FC2); - for (i = 0; i < pointsCount; i++) - { - int index = localInliers[i]; - Mat colInlierImagePoints = inlierImagePoints(Rect(i, 0, 1, 1)); - imagePoints.col(index).copyTo(colInlierImagePoints); - Mat colInlierObjectPoints = inlierObjectPoints(Rect(i, 0, 1, 1)); - objectPoints.col(index).copyTo(colInlierObjectPoints); - } - solvePnP(inlierObjectPoints, inlierImagePoints, params.camera.intrinsics, params.camera.distortion, localRvec, localTvec, true, flags); - } - localRvec.copyTo(rvec); - localTvec.copyTo(tvec); - if (_inliers.needed()) - Mat(localInliers).copyTo(_inliers); - } - else - { - tvec.setTo(Scalar(0)); - Mat R = Mat::eye(3, 3, CV_64F); - Rodrigues(R, rvec); - if( _inliers.needed() ) - _inliers.release(); - } - return; -} diff --git a/modules/calib3d/src/stereobm.cpp b/modules/calib3d/src/stereobm.cpp deleted file mode 100644 index 623883d..0000000 --- a/modules/calib3d/src/stereobm.cpp +++ /dev/null @@ -1,948 +0,0 @@ -//M*////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/****************************************************************************************\ -* Very fast SAD-based (Sum-of-Absolute-Diffrences) stereo correspondence algorithm. * -* Contributed by Kurt Konolige * -\****************************************************************************************/ - -#include "precomp.hpp" -#include - -//#undef CV_SSE2 -//#define CV_SSE2 0 -//#include "emmintrin.h" - - -#include - -CV_IMPL CvStereoBMState* cvCreateStereoBMState( int /*preset*/, int numberOfDisparities ) -{ - CvStereoBMState* state = (CvStereoBMState*)cvAlloc( sizeof(*state) ); - if( !state ) - return 0; - - state->preFilterType = CV_STEREO_BM_XSOBEL; //CV_STEREO_BM_NORMALIZED_RESPONSE; - state->preFilterSize = 9; - state->preFilterCap = 31; - state->SADWindowSize = 15; - state->minDisparity = 0; - state->numberOfDisparities = numberOfDisparities > 0 ? numberOfDisparities : 64; - state->textureThreshold = 10; - state->uniquenessRatio = 15; - state->speckleRange = state->speckleWindowSize = 0; - state->trySmallerWindows = 0; - state->roi1 = state->roi2 = cvRect(0,0,0,0); - state->disp12MaxDiff = -1; - - state->preFilteredImg0 = state->preFilteredImg1 = state->slidingSumBuf = - state->disp = state->cost = 0; - - return state; -} - -CV_IMPL void cvReleaseStereoBMState( CvStereoBMState** state ) -{ - if( !state ) - CV_Error( CV_StsNullPtr, "" ); - - if( !*state ) - return; - - cvReleaseMat( &(*state)->preFilteredImg0 ); - cvReleaseMat( &(*state)->preFilteredImg1 ); - cvReleaseMat( &(*state)->slidingSumBuf ); - cvReleaseMat( &(*state)->disp ); - cvReleaseMat( &(*state)->cost ); - cvFree( state ); -} - -namespace cv -{ - -static void prefilterNorm( const Mat& src, Mat& dst, int winsize, int ftzero, uchar* buf ) -{ - int x, y, wsz2 = winsize/2; - int* vsum = (int*)alignPtr(buf + (wsz2 + 1)*sizeof(vsum[0]), 32); - int scale_g = winsize*winsize/8, scale_s = (1024 + scale_g)/(scale_g*2); - const int OFS = 256*5, TABSZ = OFS*2 + 256; - uchar tab[TABSZ]; - const uchar* sptr = src.data; - int srcstep = (int)src.step; - Size size = src.size(); - - scale_g *= scale_s; - - for( x = 0; x < TABSZ; x++ ) - tab[x] = (uchar)(x - OFS < -ftzero ? 0 : x - OFS > ftzero ? ftzero*2 : x - OFS + ftzero); - - for( x = 0; x < size.width; x++ ) - vsum[x] = (ushort)(sptr[x]*(wsz2 + 2)); - - for( y = 1; y < wsz2; y++ ) - { - for( x = 0; x < size.width; x++ ) - vsum[x] = (ushort)(vsum[x] + sptr[srcstep*y + x]); - } - - for( y = 0; y < size.height; y++ ) - { - const uchar* top = sptr + srcstep*MAX(y-wsz2-1,0); - const uchar* bottom = sptr + srcstep*MIN(y+wsz2,size.height-1); - const uchar* prev = sptr + srcstep*MAX(y-1,0); - const uchar* curr = sptr + srcstep*y; - const uchar* next = sptr + srcstep*MIN(y+1,size.height-1); - uchar* dptr = dst.ptr(y); - x = 0; - - for( ; x < size.width; x++ ) - vsum[x] = (ushort)(vsum[x] + bottom[x] - top[x]); - - for( x = 0; x <= wsz2; x++ ) - { - vsum[-x-1] = vsum[0]; - vsum[size.width+x] = vsum[size.width-1]; - } - - int sum = vsum[0]*(wsz2 + 1); - for( x = 1; x <= wsz2; x++ ) - sum += vsum[x]; - - int val = ((curr[0]*5 + curr[1] + prev[0] + next[0])*scale_g - sum*scale_s) >> 10; - dptr[0] = tab[val + OFS]; - - for( x = 1; x < size.width-1; x++ ) - { - sum += vsum[x+wsz2] - vsum[x-wsz2-1]; - val = ((curr[x]*4 + curr[x-1] + curr[x+1] + prev[x] + next[x])*scale_g - sum*scale_s) >> 10; - dptr[x] = tab[val + OFS]; - } - - sum += vsum[x+wsz2] - vsum[x-wsz2-1]; - val = ((curr[x]*5 + curr[x-1] + prev[x] + next[x])*scale_g - sum*scale_s) >> 10; - dptr[x] = tab[val + OFS]; - } -} - - -static void -prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) -{ - int x, y; - const int OFS = 256*4, TABSZ = OFS*2 + 256; - uchar tab[TABSZ]; - Size size = src.size(); - - for( x = 0; x < TABSZ; x++ ) - tab[x] = (uchar)(x - OFS < -ftzero ? 0 : x - OFS > ftzero ? ftzero*2 : x - OFS + ftzero); - uchar val0 = tab[0 + OFS]; - -#if CV_SSE2 - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); -#endif - - for( y = 0; y < size.height-1; y += 2 ) - { - const uchar* srow1 = src.ptr(y); - const uchar* srow0 = y > 0 ? srow1 - src.step : size.height > 1 ? srow1 + src.step : srow1; - const uchar* srow2 = y < size.height-1 ? srow1 + src.step : size.height > 1 ? srow1 - src.step : srow1; - const uchar* srow3 = y < size.height-2 ? srow1 + src.step*2 : srow1; - uchar* dptr0 = dst.ptr(y); - uchar* dptr1 = dptr0 + dst.step; - - dptr0[0] = dptr0[size.width-1] = dptr1[0] = dptr1[size.width-1] = val0; - x = 1; - - #if CV_SSE2 - if( useSIMD ) - { - __m128i z = _mm_setzero_si128(), ftz = _mm_set1_epi16((short)ftzero), - ftz2 = _mm_set1_epi8(CV_CAST_8U(ftzero*2)); - for( ; x <= size.width-9; x += 8 ) - { - __m128i c0 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow0 + x - 1)), z); - __m128i c1 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow1 + x - 1)), z); - __m128i d0 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow0 + x + 1)), z); - __m128i d1 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow1 + x + 1)), z); - - d0 = _mm_sub_epi16(d0, c0); - d1 = _mm_sub_epi16(d1, c1); - - __m128i c2 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow2 + x - 1)), z); - __m128i c3 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow3 + x - 1)), z); - __m128i d2 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow2 + x + 1)), z); - __m128i d3 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow3 + x + 1)), z); - - d2 = _mm_sub_epi16(d2, c2); - d3 = _mm_sub_epi16(d3, c3); - - __m128i v0 = _mm_add_epi16(d0, _mm_add_epi16(d2, _mm_add_epi16(d1, d1))); - __m128i v1 = _mm_add_epi16(d1, _mm_add_epi16(d3, _mm_add_epi16(d2, d2))); - v0 = _mm_packus_epi16(_mm_add_epi16(v0, ftz), _mm_add_epi16(v1, ftz)); - v0 = _mm_min_epu8(v0, ftz2); - - _mm_storel_epi64((__m128i*)(dptr0 + x), v0); - _mm_storel_epi64((__m128i*)(dptr1 + x), _mm_unpackhi_epi64(v0, v0)); - } - } - #endif - - for( ; x < size.width-1; x++ ) - { - int d0 = srow0[x+1] - srow0[x-1], d1 = srow1[x+1] - srow1[x-1], - d2 = srow2[x+1] - srow2[x-1], d3 = srow3[x+1] - srow3[x-1]; - int v0 = tab[d0 + d1*2 + d2 + OFS]; - int v1 = tab[d1 + d2*2 + d3 + OFS]; - dptr0[x] = (uchar)v0; - dptr1[x] = (uchar)v1; - } - } - - for( ; y < size.height; y++ ) - { - uchar* dptr = dst.ptr(y); - for( x = 0; x < size.width; x++ ) - dptr[x] = val0; - } -} - - -static const int DISPARITY_SHIFT = 4; - -#if CV_SSE2 -static void findStereoCorrespondenceBM_SSE2( const Mat& left, const Mat& right, - Mat& disp, Mat& cost, CvStereoBMState& state, - uchar* buf, int _dy0, int _dy1 ) -{ - const int ALIGN = 16; - int x, y, d; - int wsz = state.SADWindowSize, wsz2 = wsz/2; - int dy0 = MIN(_dy0, wsz2+1), dy1 = MIN(_dy1, wsz2+1); - int ndisp = state.numberOfDisparities; - int mindisp = state.minDisparity; - int lofs = MAX(ndisp - 1 + mindisp, 0); - int rofs = -MIN(ndisp - 1 + mindisp, 0); - int width = left.cols, height = left.rows; - int width1 = width - rofs - ndisp + 1; - int ftzero = state.preFilterCap; - int textureThreshold = state.textureThreshold; - int uniquenessRatio = state.uniquenessRatio*256/100; - short FILTERED = (short)((mindisp - 1) << DISPARITY_SHIFT); - - ushort *sad, *hsad0, *hsad, *hsad_sub; - int *htext; - uchar *cbuf0, *cbuf; - const uchar* lptr0 = left.data + lofs; - const uchar* rptr0 = right.data + rofs; - const uchar *lptr, *lptr_sub, *rptr; - short* dptr = (short*)disp.data; - int sstep = (int)left.step; - int dstep = (int)(disp.step/sizeof(dptr[0])); - int cstep = (height + dy0 + dy1)*ndisp; - short costbuf = 0; - int coststep = cost.data ? (int)(cost.step/sizeof(costbuf)) : 0; - const int TABSZ = 256; - uchar tab[TABSZ]; - const __m128i d0_8 = _mm_setr_epi16(0,1,2,3,4,5,6,7), dd_8 = _mm_set1_epi16(8); - - sad = (ushort*)alignPtr(buf + sizeof(sad[0]), ALIGN); - hsad0 = (ushort*)alignPtr(sad + ndisp + 1 + dy0*ndisp, ALIGN); - htext = (int*)alignPtr((int*)(hsad0 + (height+dy1)*ndisp) + wsz2 + 2, ALIGN); - cbuf0 = (uchar*)alignPtr(htext + height + wsz2 + 2 + dy0*ndisp, ALIGN); - - for( x = 0; x < TABSZ; x++ ) - tab[x] = (uchar)std::abs(x - ftzero); - - // initialize buffers - memset( hsad0 - dy0*ndisp, 0, (height + dy0 + dy1)*ndisp*sizeof(hsad0[0]) ); - memset( htext - wsz2 - 1, 0, (height + wsz + 1)*sizeof(htext[0]) ); - - for( x = -wsz2-1; x < wsz2; x++ ) - { - hsad = hsad0 - dy0*ndisp; cbuf = cbuf0 + (x + wsz2 + 1)*cstep - dy0*ndisp; - lptr = lptr0 + MIN(MAX(x, -lofs), width-lofs-1) - dy0*sstep; - rptr = rptr0 + MIN(MAX(x, -rofs), width-rofs-1) - dy0*sstep; - - for( y = -dy0; y < height + dy1; y++, hsad += ndisp, cbuf += ndisp, lptr += sstep, rptr += sstep ) - { - int lval = lptr[0]; - __m128i lv = _mm_set1_epi8((char)lval), z = _mm_setzero_si128(); - for( d = 0; d < ndisp; d += 16 ) - { - __m128i rv = _mm_loadu_si128((const __m128i*)(rptr + d)); - __m128i hsad_l = _mm_load_si128((__m128i*)(hsad + d)); - __m128i hsad_h = _mm_load_si128((__m128i*)(hsad + d + 8)); - __m128i diff = _mm_adds_epu8(_mm_subs_epu8(lv, rv), _mm_subs_epu8(rv, lv)); - _mm_store_si128((__m128i*)(cbuf + d), diff); - hsad_l = _mm_add_epi16(hsad_l, _mm_unpacklo_epi8(diff,z)); - hsad_h = _mm_add_epi16(hsad_h, _mm_unpackhi_epi8(diff,z)); - _mm_store_si128((__m128i*)(hsad + d), hsad_l); - _mm_store_si128((__m128i*)(hsad + d + 8), hsad_h); - } - htext[y] += tab[lval]; - } - } - - // initialize the left and right borders of the disparity map - for( y = 0; y < height; y++ ) - { - for( x = 0; x < lofs; x++ ) - dptr[y*dstep + x] = FILTERED; - for( x = lofs + width1; x < width; x++ ) - dptr[y*dstep + x] = FILTERED; - } - dptr += lofs; - - for( x = 0; x < width1; x++, dptr++ ) - { - short* costptr = cost.data ? (short*)cost.data + lofs + x : &costbuf; - int x0 = x - wsz2 - 1, x1 = x + wsz2; - const uchar* cbuf_sub = cbuf0 + ((x0 + wsz2 + 1) % (wsz + 1))*cstep - dy0*ndisp; - cbuf = cbuf0 + ((x1 + wsz2 + 1) % (wsz + 1))*cstep - dy0*ndisp; - hsad = hsad0 - dy0*ndisp; - lptr_sub = lptr0 + MIN(MAX(x0, -lofs), width-1-lofs) - dy0*sstep; - lptr = lptr0 + MIN(MAX(x1, -lofs), width-1-lofs) - dy0*sstep; - rptr = rptr0 + MIN(MAX(x1, -rofs), width-1-rofs) - dy0*sstep; - - for( y = -dy0; y < height + dy1; y++, cbuf += ndisp, cbuf_sub += ndisp, - hsad += ndisp, lptr += sstep, lptr_sub += sstep, rptr += sstep ) - { - int lval = lptr[0]; - __m128i lv = _mm_set1_epi8((char)lval), z = _mm_setzero_si128(); - for( d = 0; d < ndisp; d += 16 ) - { - __m128i rv = _mm_loadu_si128((const __m128i*)(rptr + d)); - __m128i hsad_l = _mm_load_si128((__m128i*)(hsad + d)); - __m128i hsad_h = _mm_load_si128((__m128i*)(hsad + d + 8)); - __m128i cbs = _mm_load_si128((const __m128i*)(cbuf_sub + d)); - __m128i diff = _mm_adds_epu8(_mm_subs_epu8(lv, rv), _mm_subs_epu8(rv, lv)); - __m128i diff_h = _mm_sub_epi16(_mm_unpackhi_epi8(diff, z), _mm_unpackhi_epi8(cbs, z)); - _mm_store_si128((__m128i*)(cbuf + d), diff); - diff = _mm_sub_epi16(_mm_unpacklo_epi8(diff, z), _mm_unpacklo_epi8(cbs, z)); - hsad_h = _mm_add_epi16(hsad_h, diff_h); - hsad_l = _mm_add_epi16(hsad_l, diff); - _mm_store_si128((__m128i*)(hsad + d), hsad_l); - _mm_store_si128((__m128i*)(hsad + d + 8), hsad_h); - } - htext[y] += tab[lval] - tab[lptr_sub[0]]; - } - - // fill borders - for( y = dy1; y <= wsz2; y++ ) - htext[height+y] = htext[height+dy1-1]; - for( y = -wsz2-1; y < -dy0; y++ ) - htext[y] = htext[-dy0]; - - // initialize sums - for( d = 0; d < ndisp; d++ ) - sad[d] = (ushort)(hsad0[d-ndisp*dy0]*(wsz2 + 2 - dy0)); - - hsad = hsad0 + (1 - dy0)*ndisp; - for( y = 1 - dy0; y < wsz2; y++, hsad += ndisp ) - for( d = 0; d < ndisp; d += 16 ) - { - __m128i s0 = _mm_load_si128((__m128i*)(sad + d)); - __m128i s1 = _mm_load_si128((__m128i*)(sad + d + 8)); - __m128i t0 = _mm_load_si128((__m128i*)(hsad + d)); - __m128i t1 = _mm_load_si128((__m128i*)(hsad + d + 8)); - s0 = _mm_add_epi16(s0, t0); - s1 = _mm_add_epi16(s1, t1); - _mm_store_si128((__m128i*)(sad + d), s0); - _mm_store_si128((__m128i*)(sad + d + 8), s1); - } - int tsum = 0; - for( y = -wsz2-1; y < wsz2; y++ ) - tsum += htext[y]; - - // finally, start the real processing - for( y = 0; y < height; y++ ) - { - int minsad = INT_MAX, mind = -1; - hsad = hsad0 + MIN(y + wsz2, height+dy1-1)*ndisp; - hsad_sub = hsad0 + MAX(y - wsz2 - 1, -dy0)*ndisp; - __m128i minsad8 = _mm_set1_epi16(SHRT_MAX); - __m128i mind8 = _mm_set1_epi16(0), d8 = d0_8, mask; - - for( d = 0; d < ndisp; d += 16 ) - { - __m128i u0 = _mm_load_si128((__m128i*)(hsad_sub + d)); - __m128i u1 = _mm_load_si128((__m128i*)(hsad + d)); - - __m128i v0 = _mm_load_si128((__m128i*)(hsad_sub + d + 8)); - __m128i v1 = _mm_load_si128((__m128i*)(hsad + d + 8)); - - __m128i usad8 = _mm_load_si128((__m128i*)(sad + d)); - __m128i vsad8 = _mm_load_si128((__m128i*)(sad + d + 8)); - - u1 = _mm_sub_epi16(u1, u0); - v1 = _mm_sub_epi16(v1, v0); - usad8 = _mm_add_epi16(usad8, u1); - vsad8 = _mm_add_epi16(vsad8, v1); - - mask = _mm_cmpgt_epi16(minsad8, usad8); - minsad8 = _mm_min_epi16(minsad8, usad8); - mind8 = _mm_max_epi16(mind8, _mm_and_si128(mask, d8)); - - _mm_store_si128((__m128i*)(sad + d), usad8); - _mm_store_si128((__m128i*)(sad + d + 8), vsad8); - - mask = _mm_cmpgt_epi16(minsad8, vsad8); - minsad8 = _mm_min_epi16(minsad8, vsad8); - - d8 = _mm_add_epi16(d8, dd_8); - mind8 = _mm_max_epi16(mind8, _mm_and_si128(mask, d8)); - d8 = _mm_add_epi16(d8, dd_8); - } - - tsum += htext[y + wsz2] - htext[y - wsz2 - 1]; - if( tsum < textureThreshold ) - { - dptr[y*dstep] = FILTERED; - continue; - } - - __m128i minsad82 = _mm_unpackhi_epi64(minsad8, minsad8); - __m128i mind82 = _mm_unpackhi_epi64(mind8, mind8); - mask = _mm_cmpgt_epi16(minsad8, minsad82); - mind8 = _mm_xor_si128(mind8,_mm_and_si128(_mm_xor_si128(mind82,mind8),mask)); - minsad8 = _mm_min_epi16(minsad8, minsad82); - - minsad82 = _mm_shufflelo_epi16(minsad8, _MM_SHUFFLE(3,2,3,2)); - mind82 = _mm_shufflelo_epi16(mind8, _MM_SHUFFLE(3,2,3,2)); - mask = _mm_cmpgt_epi16(minsad8, minsad82); - mind8 = _mm_xor_si128(mind8,_mm_and_si128(_mm_xor_si128(mind82,mind8),mask)); - minsad8 = _mm_min_epi16(minsad8, minsad82); - - minsad82 = _mm_shufflelo_epi16(minsad8, 1); - mind82 = _mm_shufflelo_epi16(mind8, 1); - mask = _mm_cmpgt_epi16(minsad8, minsad82); - mind8 = _mm_xor_si128(mind8,_mm_and_si128(_mm_xor_si128(mind82,mind8),mask)); - mind = (short)_mm_cvtsi128_si32(mind8); - minsad = sad[mind]; - - if( uniquenessRatio > 0 ) - { - int thresh = minsad + ((minsad * uniquenessRatio) >> 8); - __m128i thresh8 = _mm_set1_epi16((short)(thresh + 1)); - __m128i d1 = _mm_set1_epi16((short)(mind-1)), d2 = _mm_set1_epi16((short)(mind+1)); - __m128i dd_16 = _mm_add_epi16(dd_8, dd_8); - d8 = _mm_sub_epi16(d0_8, dd_16); - - for( d = 0; d < ndisp; d += 16 ) - { - __m128i usad8 = _mm_load_si128((__m128i*)(sad + d)); - __m128i vsad8 = _mm_load_si128((__m128i*)(sad + d + 8)); - mask = _mm_cmpgt_epi16( thresh8, _mm_min_epi16(usad8,vsad8)); - d8 = _mm_add_epi16(d8, dd_16); - if( !_mm_movemask_epi8(mask) ) - continue; - mask = _mm_cmpgt_epi16( thresh8, usad8); - mask = _mm_and_si128(mask, _mm_or_si128(_mm_cmpgt_epi16(d1,d8), _mm_cmpgt_epi16(d8,d2))); - if( _mm_movemask_epi8(mask) ) - break; - __m128i t8 = _mm_add_epi16(d8, dd_8); - mask = _mm_cmpgt_epi16( thresh8, vsad8); - mask = _mm_and_si128(mask, _mm_or_si128(_mm_cmpgt_epi16(d1,t8), _mm_cmpgt_epi16(t8,d2))); - if( _mm_movemask_epi8(mask) ) - break; - } - if( d < ndisp ) - { - dptr[y*dstep] = FILTERED; - continue; - } - } - - if( 0 < mind && mind < ndisp - 1 ) - { - int p = sad[mind+1], n = sad[mind-1]; - d = p + n - 2*sad[mind] + std::abs(p - n); - dptr[y*dstep] = (short)(((ndisp - mind - 1 + mindisp)*256 + (d != 0 ? (p-n)*256/d : 0) + 15) >> 4); - } - else - dptr[y*dstep] = (short)((ndisp - mind - 1 + mindisp)*16); - costptr[y*coststep] = sad[mind]; - } - } -} -#endif - -static void -findStereoCorrespondenceBM( const Mat& left, const Mat& right, - Mat& disp, Mat& cost, const CvStereoBMState& state, - uchar* buf, int _dy0, int _dy1 ) -{ - const int ALIGN = 16; - int x, y, d; - int wsz = state.SADWindowSize, wsz2 = wsz/2; - int dy0 = MIN(_dy0, wsz2+1), dy1 = MIN(_dy1, wsz2+1); - int ndisp = state.numberOfDisparities; - int mindisp = state.minDisparity; - int lofs = MAX(ndisp - 1 + mindisp, 0); - int rofs = -MIN(ndisp - 1 + mindisp, 0); - int width = left.cols, height = left.rows; - int width1 = width - rofs - ndisp + 1; - int ftzero = state.preFilterCap; - int textureThreshold = state.textureThreshold; - int uniquenessRatio = state.uniquenessRatio; - short FILTERED = (short)((mindisp - 1) << DISPARITY_SHIFT); - - int *sad, *hsad0, *hsad, *hsad_sub, *htext; - uchar *cbuf0, *cbuf; - const uchar* lptr0 = left.data + lofs; - const uchar* rptr0 = right.data + rofs; - const uchar *lptr, *lptr_sub, *rptr; - short* dptr = (short*)disp.data; - int sstep = (int)left.step; - int dstep = (int)(disp.step/sizeof(dptr[0])); - int cstep = (height+dy0+dy1)*ndisp; - int costbuf = 0; - int coststep = cost.data ? (int)(cost.step/sizeof(costbuf)) : 0; - const int TABSZ = 256; - uchar tab[TABSZ]; - - sad = (int*)alignPtr(buf + sizeof(sad[0]), ALIGN); - hsad0 = (int*)alignPtr(sad + ndisp + 1 + dy0*ndisp, ALIGN); - htext = (int*)alignPtr((int*)(hsad0 + (height+dy1)*ndisp) + wsz2 + 2, ALIGN); - cbuf0 = (uchar*)alignPtr((uchar*)(htext + height + wsz2 + 2) + dy0*ndisp, ALIGN); - - for( x = 0; x < TABSZ; x++ ) - tab[x] = (uchar)std::abs(x - ftzero); - - // initialize buffers - memset( hsad0 - dy0*ndisp, 0, (height + dy0 + dy1)*ndisp*sizeof(hsad0[0]) ); - memset( htext - wsz2 - 1, 0, (height + wsz + 1)*sizeof(htext[0]) ); - - for( x = -wsz2-1; x < wsz2; x++ ) - { - hsad = hsad0 - dy0*ndisp; cbuf = cbuf0 + (x + wsz2 + 1)*cstep - dy0*ndisp; - lptr = lptr0 + std::min(std::max(x, -lofs), width-lofs-1) - dy0*sstep; - rptr = rptr0 + std::min(std::max(x, -rofs), width-rofs-1) - dy0*sstep; - - for( y = -dy0; y < height + dy1; y++, hsad += ndisp, cbuf += ndisp, lptr += sstep, rptr += sstep ) - { - int lval = lptr[0]; - for( d = 0; d < ndisp; d++ ) - { - int diff = std::abs(lval - rptr[d]); - cbuf[d] = (uchar)diff; - hsad[d] = (int)(hsad[d] + diff); - } - htext[y] += tab[lval]; - } - } - - // initialize the left and right borders of the disparity map - for( y = 0; y < height; y++ ) - { - for( x = 0; x < lofs; x++ ) - dptr[y*dstep + x] = FILTERED; - for( x = lofs + width1; x < width; x++ ) - dptr[y*dstep + x] = FILTERED; - } - dptr += lofs; - - for( x = 0; x < width1; x++, dptr++ ) - { - int* costptr = cost.data ? (int*)cost.data + lofs + x : &costbuf; - int x0 = x - wsz2 - 1, x1 = x + wsz2; - const uchar* cbuf_sub = cbuf0 + ((x0 + wsz2 + 1) % (wsz + 1))*cstep - dy0*ndisp; - cbuf = cbuf0 + ((x1 + wsz2 + 1) % (wsz + 1))*cstep - dy0*ndisp; - hsad = hsad0 - dy0*ndisp; - lptr_sub = lptr0 + MIN(MAX(x0, -lofs), width-1-lofs) - dy0*sstep; - lptr = lptr0 + MIN(MAX(x1, -lofs), width-1-lofs) - dy0*sstep; - rptr = rptr0 + MIN(MAX(x1, -rofs), width-1-rofs) - dy0*sstep; - - for( y = -dy0; y < height + dy1; y++, cbuf += ndisp, cbuf_sub += ndisp, - hsad += ndisp, lptr += sstep, lptr_sub += sstep, rptr += sstep ) - { - int lval = lptr[0]; - for( d = 0; d < ndisp; d++ ) - { - int diff = std::abs(lval - rptr[d]); - cbuf[d] = (uchar)diff; - hsad[d] = hsad[d] + diff - cbuf_sub[d]; - } - htext[y] += tab[lval] - tab[lptr_sub[0]]; - } - - // fill borders - for( y = dy1; y <= wsz2; y++ ) - htext[height+y] = htext[height+dy1-1]; - for( y = -wsz2-1; y < -dy0; y++ ) - htext[y] = htext[-dy0]; - - // initialize sums - for( d = 0; d < ndisp; d++ ) - sad[d] = (int)(hsad0[d-ndisp*dy0]*(wsz2 + 2 - dy0)); - - hsad = hsad0 + (1 - dy0)*ndisp; - for( y = 1 - dy0; y < wsz2; y++, hsad += ndisp ) - for( d = 0; d < ndisp; d++ ) - sad[d] = (int)(sad[d] + hsad[d]); - int tsum = 0; - for( y = -wsz2-1; y < wsz2; y++ ) - tsum += htext[y]; - - // finally, start the real processing - for( y = 0; y < height; y++ ) - { - int minsad = INT_MAX, mind = -1; - hsad = hsad0 + MIN(y + wsz2, height+dy1-1)*ndisp; - hsad_sub = hsad0 + MAX(y - wsz2 - 1, -dy0)*ndisp; - - for( d = 0; d < ndisp; d++ ) - { - int currsad = sad[d] + hsad[d] - hsad_sub[d]; - sad[d] = currsad; - if( currsad < minsad ) - { - minsad = currsad; - mind = d; - } - } - tsum += htext[y + wsz2] - htext[y - wsz2 - 1]; - if( tsum < textureThreshold ) - { - dptr[y*dstep] = FILTERED; - continue; - } - - if( uniquenessRatio > 0 ) - { - int thresh = minsad + (minsad * uniquenessRatio/100); - for( d = 0; d < ndisp; d++ ) - { - if( sad[d] <= thresh && (d < mind-1 || d > mind+1)) - break; - } - if( d < ndisp ) - { - dptr[y*dstep] = FILTERED; - continue; - } - } - - { - sad[-1] = sad[1]; - sad[ndisp] = sad[ndisp-2]; - int p = sad[mind+1], n = sad[mind-1]; - d = p + n - 2*sad[mind] + std::abs(p - n); - dptr[y*dstep] = (short)(((ndisp - mind - 1 + mindisp)*256 + (d != 0 ? (p-n)*256/d : 0) + 15) >> 4); - costptr[y*coststep] = sad[mind]; - } - } - } -} - -struct PrefilterInvoker -{ - PrefilterInvoker(const Mat& left0, const Mat& right0, Mat& left, Mat& right, - uchar* buf0, uchar* buf1, CvStereoBMState* _state ) - { - imgs0[0] = &left0; imgs0[1] = &right0; - imgs[0] = &left; imgs[1] = &right; - buf[0] = buf0; buf[1] = buf1; - state = _state; - } - - void operator()( int ind ) const - { - if( state->preFilterType == CV_STEREO_BM_NORMALIZED_RESPONSE ) - prefilterNorm( *imgs0[ind], *imgs[ind], state->preFilterSize, state->preFilterCap, buf[ind] ); - else - prefilterXSobel( *imgs0[ind], *imgs[ind], state->preFilterCap ); - } - - const Mat* imgs0[2]; - Mat* imgs[2]; - uchar* buf[2]; - CvStereoBMState *state; -}; - - -struct FindStereoCorrespInvoker : ParallelLoopBody -{ - FindStereoCorrespInvoker( const Mat& _left, const Mat& _right, - Mat& _disp, CvStereoBMState* _state, - int _nstripes, int _stripeBufSize, - bool _useShorts, Rect _validDisparityRect ) - { - left = &_left; right = &_right; - disp = &_disp; state = _state; - nstripes = _nstripes; stripeBufSize = _stripeBufSize; - useShorts = _useShorts; - validDisparityRect = _validDisparityRect; - } - - void operator()( const Range& range ) const - { - int cols = left->cols, rows = left->rows; - int _row0 = min(cvRound(range.start * rows / nstripes), rows); - int _row1 = min(cvRound(range.end * rows / nstripes), rows); - uchar *ptr = state->slidingSumBuf->data.ptr + range.start * stripeBufSize; - int FILTERED = (state->minDisparity - 1)*16; - - Rect roi = validDisparityRect & Rect(0, _row0, cols, _row1 - _row0); - if( roi.height == 0 ) - return; - int row0 = roi.y; - int row1 = roi.y + roi.height; - - Mat part; - if( row0 > _row0 ) - { - part = disp->rowRange(_row0, row0); - part = Scalar::all(FILTERED); - } - if( _row1 > row1 ) - { - part = disp->rowRange(row1, _row1); - part = Scalar::all(FILTERED); - } - - Mat left_i = left->rowRange(row0, row1); - Mat right_i = right->rowRange(row0, row1); - Mat disp_i = disp->rowRange(row0, row1); - Mat cost_i = state->disp12MaxDiff >= 0 ? Mat(state->cost).rowRange(row0, row1) : Mat(); - -#if CV_SSE2 - if( useShorts ) - findStereoCorrespondenceBM_SSE2( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1 ); - else -#endif - findStereoCorrespondenceBM( left_i, right_i, disp_i, cost_i, *state, ptr, row0, rows - row1 ); - - if( state->disp12MaxDiff >= 0 ) - validateDisparity( disp_i, cost_i, state->minDisparity, state->numberOfDisparities, state->disp12MaxDiff ); - - if( roi.x > 0 ) - { - part = disp_i.colRange(0, roi.x); - part = Scalar::all(FILTERED); - } - if( roi.x + roi.width < cols ) - { - part = disp_i.colRange(roi.x + roi.width, cols); - part = Scalar::all(FILTERED); - } - } - -protected: - const Mat *left, *right; - Mat* disp; - CvStereoBMState *state; - - int nstripes; - int stripeBufSize; - bool useShorts; - Rect validDisparityRect; -}; - -static void findStereoCorrespondenceBM( const Mat& left0, const Mat& right0, Mat& disp0, CvStereoBMState* state) -{ - if (left0.size() != right0.size() || disp0.size() != left0.size()) - CV_Error( CV_StsUnmatchedSizes, "All the images must have the same size" ); - - if (left0.type() != CV_8UC1 || right0.type() != CV_8UC1) - CV_Error( CV_StsUnsupportedFormat, "Both input images must have CV_8UC1" ); - - if (disp0.type() != CV_16SC1 && disp0.type() != CV_32FC1) - CV_Error( CV_StsUnsupportedFormat, "Disparity image must have CV_16SC1 or CV_32FC1 format" ); - - if( !state ) - CV_Error( CV_StsNullPtr, "Stereo BM state is NULL." ); - - if( state->preFilterType != CV_STEREO_BM_NORMALIZED_RESPONSE && state->preFilterType != CV_STEREO_BM_XSOBEL ) - CV_Error( CV_StsOutOfRange, "preFilterType must be = CV_STEREO_BM_NORMALIZED_RESPONSE" ); - - if( state->preFilterSize < 5 || state->preFilterSize > 255 || state->preFilterSize % 2 == 0 ) - CV_Error( CV_StsOutOfRange, "preFilterSize must be odd and be within 5..255" ); - - if( state->preFilterCap < 1 || state->preFilterCap > 63 ) - CV_Error( CV_StsOutOfRange, "preFilterCap must be within 1..63" ); - - if( state->SADWindowSize < 5 || state->SADWindowSize > 255 || state->SADWindowSize % 2 == 0 || - state->SADWindowSize >= min(left0.cols, left0.rows) ) - CV_Error( CV_StsOutOfRange, "SADWindowSize must be odd, be within 5..255 and be not larger than image width or height" ); - - if( state->numberOfDisparities <= 0 || state->numberOfDisparities % 16 != 0 ) - CV_Error( CV_StsOutOfRange, "numberOfDisparities must be positive and divisble by 16" ); - - if( state->textureThreshold < 0 ) - CV_Error( CV_StsOutOfRange, "texture threshold must be non-negative" ); - - if( state->uniquenessRatio < 0 ) - CV_Error( CV_StsOutOfRange, "uniqueness ratio must be non-negative" ); - - if( !state->preFilteredImg0 || state->preFilteredImg0->cols * state->preFilteredImg0->rows < left0.cols * left0.rows ) - { - cvReleaseMat( &state->preFilteredImg0 ); - cvReleaseMat( &state->preFilteredImg1 ); - cvReleaseMat( &state->cost ); - - state->preFilteredImg0 = cvCreateMat( left0.rows, left0.cols, CV_8U ); - state->preFilteredImg1 = cvCreateMat( left0.rows, left0.cols, CV_8U ); - state->cost = cvCreateMat( left0.rows, left0.cols, CV_16S ); - } - Mat left(left0.size(), CV_8U, state->preFilteredImg0->data.ptr); - Mat right(right0.size(), CV_8U, state->preFilteredImg1->data.ptr); - - int mindisp = state->minDisparity; - int ndisp = state->numberOfDisparities; - - int width = left0.cols; - int height = left0.rows; - int lofs = max(ndisp - 1 + mindisp, 0); - int rofs = -min(ndisp - 1 + mindisp, 0); - int width1 = width - rofs - ndisp + 1; - int FILTERED = (state->minDisparity - 1) << DISPARITY_SHIFT; - - if( lofs >= width || rofs >= width || width1 < 1 ) - { - disp0 = Scalar::all( FILTERED * ( disp0.type() < CV_32F ? 1 : 1./(1 << DISPARITY_SHIFT) ) ); - return; - } - - Mat disp = disp0; - - if( disp0.type() == CV_32F) - { - if( !state->disp || state->disp->rows != disp0.rows || state->disp->cols != disp0.cols ) - { - cvReleaseMat( &state->disp ); - state->disp = cvCreateMat(disp0.rows, disp0.cols, CV_16S); - } - disp = cv::cvarrToMat(state->disp); - } - - int wsz = state->SADWindowSize; - int bufSize0 = (int)((ndisp + 2)*sizeof(int)); - bufSize0 += (int)((height+wsz+2)*ndisp*sizeof(int)); - bufSize0 += (int)((height + wsz + 2)*sizeof(int)); - bufSize0 += (int)((height+wsz+2)*ndisp*(wsz+2)*sizeof(uchar) + 256); - - int bufSize1 = (int)((width + state->preFilterSize + 2) * sizeof(int) + 256); - int bufSize2 = 0; - if( state->speckleRange >= 0 && state->speckleWindowSize > 0 ) - bufSize2 = width*height*(sizeof(cv::Point_) + sizeof(int) + sizeof(uchar)); - -#if CV_SSE2 - bool useShorts = state->preFilterCap <= 31 && state->SADWindowSize <= 21 && checkHardwareSupport(CV_CPU_SSE2); -#else - const bool useShorts = false; -#endif - - const double SAD_overhead_coeff = 10.0; - double N0 = 8000000 / (useShorts ? 1 : 4); // approx tbb's min number instructions reasonable for one thread - double maxStripeSize = min(max(N0 / (width * ndisp), (wsz-1) * SAD_overhead_coeff), (double)height); - int nstripes = cvCeil(height / maxStripeSize); - - int bufSize = max(bufSize0 * nstripes, max(bufSize1 * 2, bufSize2)); - - if( !state->slidingSumBuf || state->slidingSumBuf->cols < bufSize ) - { - cvReleaseMat( &state->slidingSumBuf ); - state->slidingSumBuf = cvCreateMat( 1, bufSize, CV_8U ); - } - - uchar *_buf = state->slidingSumBuf->data.ptr; - int idx[] = {0,1}; - parallel_do(idx, idx+2, PrefilterInvoker(left0, right0, left, right, _buf, _buf + bufSize1, state)); - - Rect validDisparityRect(0, 0, width, height), R1 = state->roi1, R2 = state->roi2; - validDisparityRect = getValidDisparityROI(R1.area() > 0 ? Rect(0, 0, width, height) : validDisparityRect, - R2.area() > 0 ? Rect(0, 0, width, height) : validDisparityRect, - state->minDisparity, state->numberOfDisparities, - state->SADWindowSize); - - parallel_for_(Range(0, nstripes), - FindStereoCorrespInvoker(left, right, disp, state, nstripes, - bufSize0, useShorts, validDisparityRect)); - - if( state->speckleRange >= 0 && state->speckleWindowSize > 0 ) - { - Mat buf(state->slidingSumBuf); - filterSpeckles(disp, FILTERED, state->speckleWindowSize, state->speckleRange, buf); - } - - if (disp0.data != disp.data) - disp.convertTo(disp0, disp0.type(), 1./(1 << DISPARITY_SHIFT), 0); -} - -StereoBM::StereoBM() -{ state = cvCreateStereoBMState(); } - -StereoBM::StereoBM(int _preset, int _ndisparities, int _SADWindowSize) -{ init(_preset, _ndisparities, _SADWindowSize); } - -void StereoBM::init(int _preset, int _ndisparities, int _SADWindowSize) -{ - state = cvCreateStereoBMState(_preset, _ndisparities); - state->SADWindowSize = _SADWindowSize; -} - -void StereoBM::operator()( InputArray _left, InputArray _right, - OutputArray _disparity, int disptype ) -{ - Mat left = _left.getMat(), right = _right.getMat(); - CV_Assert( disptype == CV_16S || disptype == CV_32F ); - _disparity.create(left.size(), disptype); - Mat disparity = _disparity.getMat(); - - findStereoCorrespondenceBM(left, right, disparity, state); -} - -template<> void Ptr::delete_obj() -{ cvReleaseStereoBMState(&obj); } - -} - -CV_IMPL void cvFindStereoCorrespondenceBM( const CvArr* leftarr, const CvArr* rightarr, - CvArr* disparr, CvStereoBMState* state ) -{ - cv::Mat left = cv::cvarrToMat(leftarr), - right = cv::cvarrToMat(rightarr), - disp = cv::cvarrToMat(disparr); - cv::findStereoCorrespondenceBM(left, right, disp, state); -} - -/* End of file. */ diff --git a/modules/calib3d/src/stereosgbm.cpp b/modules/calib3d/src/stereosgbm.cpp deleted file mode 100644 index 0de9189..0000000 --- a/modules/calib3d/src/stereosgbm.cpp +++ /dev/null @@ -1,1069 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* - This is a variation of - "Stereo Processing by Semiglobal Matching and Mutual Information" - by Heiko Hirschmuller. - - We match blocks rather than individual pixels, thus the algorithm is called - SGBM (Semi-global block matching) - */ - -#include "precomp.hpp" -#include - -namespace cv -{ - -typedef uchar PixType; -typedef short CostType; -typedef short DispType; - -enum { NR = 16, NR2 = NR/2 }; - -StereoSGBM::StereoSGBM() -{ - minDisparity = numberOfDisparities = 0; - SADWindowSize = 0; - P1 = P2 = 0; - disp12MaxDiff = 0; - preFilterCap = 0; - uniquenessRatio = 0; - speckleWindowSize = 0; - speckleRange = 0; - fullDP = false; -} - - -StereoSGBM::StereoSGBM( int _minDisparity, int _numDisparities, int _SADWindowSize, - int _P1, int _P2, int _disp12MaxDiff, int _preFilterCap, - int _uniquenessRatio, int _speckleWindowSize, int _speckleRange, - bool _fullDP ) -{ - minDisparity = _minDisparity; - numberOfDisparities = _numDisparities; - SADWindowSize = _SADWindowSize; - P1 = _P1; - P2 = _P2; - disp12MaxDiff = _disp12MaxDiff; - preFilterCap = _preFilterCap; - uniquenessRatio = _uniquenessRatio; - speckleWindowSize = _speckleWindowSize; - speckleRange = _speckleRange; - fullDP = _fullDP; -} - - -StereoSGBM::~StereoSGBM() -{ -} - -/* - For each pixel row1[x], max(-maxD, 0) <= minX <= x < maxX <= width - max(0, -minD), - and for each disparity minD<=d(y), *row2 = img2.ptr(y); - PixType *prow1 = buffer + width2*2, *prow2 = prow1 + width*cn*2; - - tab += tabOfs; - - for( c = 0; c < cn*2; c++ ) - { - prow1[width*c] = prow1[width*c + width-1] = - prow2[width*c] = prow2[width*c + width-1] = tab[0]; - } - - int n1 = y > 0 ? -(int)img1.step : 0, s1 = y < img1.rows-1 ? (int)img1.step : 0; - int n2 = y > 0 ? -(int)img2.step : 0, s2 = y < img2.rows-1 ? (int)img2.step : 0; - - if( cn == 1 ) - { - for( x = 1; x < width-1; x++ ) - { - prow1[x] = tab[(row1[x+1] - row1[x-1])*2 + row1[x+n1+1] - row1[x+n1-1] + row1[x+s1+1] - row1[x+s1-1]]; - prow2[width-1-x] = tab[(row2[x+1] - row2[x-1])*2 + row2[x+n2+1] - row2[x+n2-1] + row2[x+s2+1] - row2[x+s2-1]]; - - prow1[x+width] = row1[x]; - prow2[width-1-x+width] = row2[x]; - } - } - else - { - for( x = 1; x < width-1; x++ ) - { - prow1[x] = tab[(row1[x*3+3] - row1[x*3-3])*2 + row1[x*3+n1+3] - row1[x*3+n1-3] + row1[x*3+s1+3] - row1[x*3+s1-3]]; - prow1[x+width] = tab[(row1[x*3+4] - row1[x*3-2])*2 + row1[x*3+n1+4] - row1[x*3+n1-2] + row1[x*3+s1+4] - row1[x*3+s1-2]]; - prow1[x+width*2] = tab[(row1[x*3+5] - row1[x*3-1])*2 + row1[x*3+n1+5] - row1[x*3+n1-1] + row1[x*3+s1+5] - row1[x*3+s1-1]]; - - prow2[width-1-x] = tab[(row2[x*3+3] - row2[x*3-3])*2 + row2[x*3+n2+3] - row2[x*3+n2-3] + row2[x*3+s2+3] - row2[x*3+s2-3]]; - prow2[width-1-x+width] = tab[(row2[x*3+4] - row2[x*3-2])*2 + row2[x*3+n2+4] - row2[x*3+n2-2] + row2[x*3+s2+4] - row2[x*3+s2-2]]; - prow2[width-1-x+width*2] = tab[(row2[x*3+5] - row2[x*3-1])*2 + row2[x*3+n2+5] - row2[x*3+n2-1] + row2[x*3+s2+5] - row2[x*3+s2-1]]; - - prow1[x+width*3] = row1[x*3]; - prow1[x+width*4] = row1[x*3+1]; - prow1[x+width*5] = row1[x*3+2]; - - prow2[width-1-x+width*3] = row2[x*3]; - prow2[width-1-x+width*4] = row2[x*3+1]; - prow2[width-1-x+width*5] = row2[x*3+2]; - } - } - - memset( cost, 0, width1*D*sizeof(cost[0]) ); - - buffer -= minX2; - cost -= minX1*D + minD; // simplify the cost indices inside the loop - -#if CV_SSE2 - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); -#endif - -#if 1 - for( c = 0; c < cn*2; c++, prow1 += width, prow2 += width ) - { - int diff_scale = c < cn ? 0 : 2; - - // precompute - // v0 = min(row2[x-1/2], row2[x], row2[x+1/2]) and - // v1 = max(row2[x-1/2], row2[x], row2[x+1/2]) and - for( x = minX2; x < maxX2; x++ ) - { - int v = prow2[x]; - int vl = x > 0 ? (v + prow2[x-1])/2 : v; - int vr = x < width-1 ? (v + prow2[x+1])/2 : v; - int v0 = min(vl, vr); v0 = min(v0, v); - int v1 = max(vl, vr); v1 = max(v1, v); - buffer[x] = (PixType)v0; - buffer[x + width2] = (PixType)v1; - } - - for( x = minX1; x < maxX1; x++ ) - { - int u = prow1[x]; - int ul = x > 0 ? (u + prow1[x-1])/2 : u; - int ur = x < width-1 ? (u + prow1[x+1])/2 : u; - int u0 = min(ul, ur); u0 = min(u0, u); - int u1 = max(ul, ur); u1 = max(u1, u); - - #if CV_SSE2 - if( useSIMD ) - { - __m128i _u = _mm_set1_epi8((char)u), _u0 = _mm_set1_epi8((char)u0); - __m128i _u1 = _mm_set1_epi8((char)u1), z = _mm_setzero_si128(); - __m128i ds = _mm_cvtsi32_si128(diff_scale); - - for( int d = minD; d < maxD; d += 16 ) - { - __m128i _v = _mm_loadu_si128((const __m128i*)(prow2 + width-x-1 + d)); - __m128i _v0 = _mm_loadu_si128((const __m128i*)(buffer + width-x-1 + d)); - __m128i _v1 = _mm_loadu_si128((const __m128i*)(buffer + width-x-1 + d + width2)); - __m128i c0 = _mm_max_epu8(_mm_subs_epu8(_u, _v1), _mm_subs_epu8(_v0, _u)); - __m128i c1 = _mm_max_epu8(_mm_subs_epu8(_v, _u1), _mm_subs_epu8(_u0, _v)); - __m128i diff = _mm_min_epu8(c0, c1); - - c0 = _mm_load_si128((__m128i*)(cost + x*D + d)); - c1 = _mm_load_si128((__m128i*)(cost + x*D + d + 8)); - - _mm_store_si128((__m128i*)(cost + x*D + d), _mm_adds_epi16(c0, _mm_srl_epi16(_mm_unpacklo_epi8(diff,z), ds))); - _mm_store_si128((__m128i*)(cost + x*D + d + 8), _mm_adds_epi16(c1, _mm_srl_epi16(_mm_unpackhi_epi8(diff,z), ds))); - } - } - else - #endif - { - for( int d = minD; d < maxD; d++ ) - { - int v = prow2[width-x-1 + d]; - int v0 = buffer[width-x-1 + d]; - int v1 = buffer[width-x-1 + d + width2]; - int c0 = max(0, u - v1); c0 = max(c0, v0 - u); - int c1 = max(0, v - u1); c1 = max(c1, u0 - v); - - cost[x*D + d] = (CostType)(cost[x*D+d] + (min(c0, c1) >> diff_scale)); - } - } - } - } -#else - for( c = 0; c < cn*2; c++, prow1 += width, prow2 += width ) - { - for( x = minX1; x < maxX1; x++ ) - { - int u = prow1[x]; - #if CV_SSE2 - if( useSIMD ) - { - __m128i _u = _mm_set1_epi8(u), z = _mm_setzero_si128(); - - for( int d = minD; d < maxD; d += 16 ) - { - __m128i _v = _mm_loadu_si128((const __m128i*)(prow2 + width-1-x + d)); - __m128i diff = _mm_adds_epu8(_mm_subs_epu8(_u,_v), _mm_subs_epu8(_v,_u)); - __m128i c0 = _mm_load_si128((__m128i*)(cost + x*D + d)); - __m128i c1 = _mm_load_si128((__m128i*)(cost + x*D + d + 8)); - - _mm_store_si128((__m128i*)(cost + x*D + d), _mm_adds_epi16(c0, _mm_unpacklo_epi8(diff,z))); - _mm_store_si128((__m128i*)(cost + x*D + d + 8), _mm_adds_epi16(c1, _mm_unpackhi_epi8(diff,z))); - } - } - else - #endif - { - for( int d = minD; d < maxD; d++ ) - { - int v = prow2[width-1-x + d]; - cost[x*D + d] = (CostType)(cost[x*D + d] + (CostType)std::abs(u - v)); - } - } - } - } -#endif -} - - -/* - computes disparity for "roi" in img1 w.r.t. img2 and write it to disp1buf. - that is, disp1buf(x, y)=d means that img1(x+roi.x, y+roi.y) ~ img2(x+roi.x-d, y+roi.y). - minD <= d < maxD. - disp2full is the reverse disparity map, that is: - disp2full(x+roi.x,y+roi.y)=d means that img2(x+roi.x, y+roi.y) ~ img1(x+roi.x+d, y+roi.y) - - note that disp1buf will have the same size as the roi and - disp2full will have the same size as img1 (or img2). - On exit disp2buf is not the final disparity, it is an intermediate result that becomes - final after all the tiles are processed. - - the disparity in disp1buf is written with sub-pixel accuracy - (4 fractional bits, see CvStereoSGBM::DISP_SCALE), - using quadratic interpolation, while the disparity in disp2buf - is written as is, without interpolation. - - disp2cost also has the same size as img1 (or img2). - It contains the minimum current cost, used to find the best disparity, corresponding to the minimal cost. - */ -static void computeDisparitySGBM( const Mat& img1, const Mat& img2, - Mat& disp1, const StereoSGBM& params, - Mat& buffer ) -{ -#if CV_SSE2 - static const uchar LSBTab[] = - { - 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, - 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 - }; - - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); -#endif - - const int ALIGN = 16; - const int DISP_SHIFT = StereoSGBM::DISP_SHIFT; - const int DISP_SCALE = StereoSGBM::DISP_SCALE; - const CostType MAX_COST = SHRT_MAX; - - int minD = params.minDisparity, maxD = minD + params.numberOfDisparities; - Size SADWindowSize; - SADWindowSize.width = SADWindowSize.height = params.SADWindowSize > 0 ? params.SADWindowSize : 5; - int ftzero = max(params.preFilterCap, 15) | 1; - int uniquenessRatio = params.uniquenessRatio >= 0 ? params.uniquenessRatio : 10; - int disp12MaxDiff = params.disp12MaxDiff > 0 ? params.disp12MaxDiff : 1; - int P1 = params.P1 > 0 ? params.P1 : 2, P2 = max(params.P2 > 0 ? params.P2 : 5, P1+1); - int k, width = disp1.cols, height = disp1.rows; - int minX1 = max(-maxD, 0), maxX1 = width + min(minD, 0); - int D = maxD - minD, width1 = maxX1 - minX1; - int INVALID_DISP = minD - 1, INVALID_DISP_SCALED = INVALID_DISP*DISP_SCALE; - int SW2 = SADWindowSize.width/2, SH2 = SADWindowSize.height/2; - int npasses = params.fullDP ? 2 : 1; - const int TAB_OFS = 256*4, TAB_SIZE = 256 + TAB_OFS*2; - PixType clipTab[TAB_SIZE]; - - for( k = 0; k < TAB_SIZE; k++ ) - clipTab[k] = (PixType)(min(max(k - TAB_OFS, -ftzero), ftzero) + ftzero); - - if( minX1 >= maxX1 ) - { - disp1 = Scalar::all(INVALID_DISP_SCALED); - return; - } - - CV_Assert( D % 16 == 0 ); - - // NR - the number of directions. the loop on x below that computes Lr assumes that NR == 8. - // if you change NR, please, modify the loop as well. - int D2 = D+16, NRD2 = NR2*D2; - - // the number of L_r(.,.) and min_k L_r(.,.) lines in the buffer: - // for 8-way dynamic programming we need the current row and - // the previous row, i.e. 2 rows in total - const int NLR = 2; - const int LrBorder = NLR - 1; - - // for each possible stereo match (img1(x,y) <=> img2(x-d,y)) - // we keep pixel difference cost (C) and the summary cost over NR directions (S). - // we also keep all the partial costs for the previous line L_r(x,d) and also min_k L_r(x, k) - size_t costBufSize = width1*D; - size_t CSBufSize = costBufSize*(params.fullDP ? height : 1); - size_t minLrSize = (width1 + LrBorder*2)*NR2, LrSize = minLrSize*D2; - int hsumBufNRows = SH2*2 + 2; - size_t totalBufSize = (LrSize + minLrSize)*NLR*sizeof(CostType) + // minLr[] and Lr[] - costBufSize*(hsumBufNRows + 1)*sizeof(CostType) + // hsumBuf, pixdiff - CSBufSize*2*sizeof(CostType) + // C, S - width*16*img1.channels()*sizeof(PixType) + // temp buffer for computing per-pixel cost - width*(sizeof(CostType) + sizeof(DispType)) + 1024; // disp2cost + disp2 - - if( !buffer.data || !buffer.isContinuous() || - buffer.cols*buffer.rows*buffer.elemSize() < totalBufSize ) - buffer.create(1, (int)totalBufSize, CV_8U); - - // summary cost over different (nDirs) directions - CostType* Cbuf = (CostType*)alignPtr(buffer.data, ALIGN); - CostType* Sbuf = Cbuf + CSBufSize; - CostType* hsumBuf = Sbuf + CSBufSize; - CostType* pixDiff = hsumBuf + costBufSize*hsumBufNRows; - - CostType* disp2cost = pixDiff + costBufSize + (LrSize + minLrSize)*NLR; - DispType* disp2ptr = (DispType*)(disp2cost + width); - PixType* tempBuf = (PixType*)(disp2ptr + width); - - // add P2 to every C(x,y). it saves a few operations in the inner loops - for( k = 0; k < width1*D; k++ ) - Cbuf[k] = (CostType)P2; - - for( int pass = 1; pass <= npasses; pass++ ) - { - int x1, y1, x2, y2, dx, dy; - - if( pass == 1 ) - { - y1 = 0; y2 = height; dy = 1; - x1 = 0; x2 = width1; dx = 1; - } - else - { - y1 = height-1; y2 = -1; dy = -1; - x1 = width1-1; x2 = -1; dx = -1; - } - - CostType *Lr[NLR]={0}, *minLr[NLR]={0}; - - for( k = 0; k < NLR; k++ ) - { - // shift Lr[k] and minLr[k] pointers, because we allocated them with the borders, - // and will occasionally use negative indices with the arrays - // we need to shift Lr[k] pointers by 1, to give the space for d=-1. - // however, then the alignment will be imperfect, i.e. bad for SSE, - // thus we shift the pointers by 8 (8*sizeof(short) == 16 - ideal alignment) - Lr[k] = pixDiff + costBufSize + LrSize*k + NRD2*LrBorder + 8; - memset( Lr[k] - LrBorder*NRD2 - 8, 0, LrSize*sizeof(CostType) ); - minLr[k] = pixDiff + costBufSize + LrSize*NLR + minLrSize*k + NR2*LrBorder; - memset( minLr[k] - LrBorder*NR2, 0, minLrSize*sizeof(CostType) ); - } - - for( int y = y1; y != y2; y += dy ) - { - int x, d; - DispType* disp1ptr = disp1.ptr(y); - CostType* C = Cbuf + (!params.fullDP ? 0 : y*costBufSize); - CostType* S = Sbuf + (!params.fullDP ? 0 : y*costBufSize); - - if( pass == 1 ) // compute C on the first pass, and reuse it on the second pass, if any. - { - int dy1 = y == 0 ? 0 : y + SH2, dy2 = y == 0 ? SH2 : dy1; - - for( k = dy1; k <= dy2; k++ ) - { - CostType* hsumAdd = hsumBuf + (min(k, height-1) % hsumBufNRows)*costBufSize; - - if( k < height ) - { - calcPixelCostBT( img1, img2, k, minD, maxD, pixDiff, tempBuf, clipTab, TAB_OFS, ftzero ); - - memset(hsumAdd, 0, D*sizeof(CostType)); - for( x = 0; x <= SW2*D; x += D ) - { - int scale = x == 0 ? SW2 + 1 : 1; - for( d = 0; d < D; d++ ) - hsumAdd[d] = (CostType)(hsumAdd[d] + pixDiff[x + d]*scale); - } - - if( y > 0 ) - { - const CostType* hsumSub = hsumBuf + (max(y - SH2 - 1, 0) % hsumBufNRows)*costBufSize; - const CostType* Cprev = !params.fullDP || y == 0 ? C : C - costBufSize; - - for( x = D; x < width1*D; x += D ) - { - const CostType* pixAdd = pixDiff + min(x + SW2*D, (width1-1)*D); - const CostType* pixSub = pixDiff + max(x - (SW2+1)*D, 0); - - #if CV_SSE2 - if( useSIMD ) - { - for( d = 0; d < D; d += 8 ) - { - __m128i hv = _mm_load_si128((const __m128i*)(hsumAdd + x - D + d)); - __m128i Cx = _mm_load_si128((__m128i*)(Cprev + x + d)); - hv = _mm_adds_epi16(_mm_subs_epi16(hv, - _mm_load_si128((const __m128i*)(pixSub + d))), - _mm_load_si128((const __m128i*)(pixAdd + d))); - Cx = _mm_adds_epi16(_mm_subs_epi16(Cx, - _mm_load_si128((const __m128i*)(hsumSub + x + d))), - hv); - _mm_store_si128((__m128i*)(hsumAdd + x + d), hv); - _mm_store_si128((__m128i*)(C + x + d), Cx); - } - } - else - #endif - { - for( d = 0; d < D; d++ ) - { - int hv = hsumAdd[x + d] = (CostType)(hsumAdd[x - D + d] + pixAdd[d] - pixSub[d]); - C[x + d] = (CostType)(Cprev[x + d] + hv - hsumSub[x + d]); - } - } - } - } - else - { - for( x = D; x < width1*D; x += D ) - { - const CostType* pixAdd = pixDiff + min(x + SW2*D, (width1-1)*D); - const CostType* pixSub = pixDiff + max(x - (SW2+1)*D, 0); - - for( d = 0; d < D; d++ ) - hsumAdd[x + d] = (CostType)(hsumAdd[x - D + d] + pixAdd[d] - pixSub[d]); - } - } - } - - if( y == 0 ) - { - int scale = k == 0 ? SH2 + 1 : 1; - for( x = 0; x < width1*D; x++ ) - C[x] = (CostType)(C[x] + hsumAdd[x]*scale); - } - } - - // also, clear the S buffer - for( k = 0; k < width1*D; k++ ) - S[k] = 0; - } - - // clear the left and the right borders - memset( Lr[0] - NRD2*LrBorder - 8, 0, NRD2*LrBorder*sizeof(CostType) ); - memset( Lr[0] + width1*NRD2 - 8, 0, NRD2*LrBorder*sizeof(CostType) ); - memset( minLr[0] - NR2*LrBorder, 0, NR2*LrBorder*sizeof(CostType) ); - memset( minLr[0] + width1*NR2, 0, NR2*LrBorder*sizeof(CostType) ); - - /* - [formula 13 in the paper] - compute L_r(p, d) = C(p, d) + - min(L_r(p-r, d), - L_r(p-r, d-1) + P1, - L_r(p-r, d+1) + P1, - min_k L_r(p-r, k) + P2) - min_k L_r(p-r, k) - where p = (x,y), r is one of the directions. - we process all the directions at once: - 0: r=(-dx, 0) - 1: r=(-1, -dy) - 2: r=(0, -dy) - 3: r=(1, -dy) - 4: r=(-2, -dy) - 5: r=(-1, -dy*2) - 6: r=(1, -dy*2) - 7: r=(2, -dy) - */ - for( x = x1; x != x2; x += dx ) - { - int xm = x*NR2, xd = xm*D2; - - int delta0 = minLr[0][xm - dx*NR2] + P2, delta1 = minLr[1][xm - NR2 + 1] + P2; - int delta2 = minLr[1][xm + 2] + P2, delta3 = minLr[1][xm + NR2 + 3] + P2; - - CostType* Lr_p0 = Lr[0] + xd - dx*NRD2; - CostType* Lr_p1 = Lr[1] + xd - NRD2 + D2; - CostType* Lr_p2 = Lr[1] + xd + D2*2; - CostType* Lr_p3 = Lr[1] + xd + NRD2 + D2*3; - - Lr_p0[-1] = Lr_p0[D] = Lr_p1[-1] = Lr_p1[D] = - Lr_p2[-1] = Lr_p2[D] = Lr_p3[-1] = Lr_p3[D] = MAX_COST; - - CostType* Lr_p = Lr[0] + xd; - const CostType* Cp = C + x*D; - CostType* Sp = S + x*D; - - #if CV_SSE2 - if( useSIMD ) - { - __m128i _P1 = _mm_set1_epi16((short)P1); - - __m128i _delta0 = _mm_set1_epi16((short)delta0); - __m128i _delta1 = _mm_set1_epi16((short)delta1); - __m128i _delta2 = _mm_set1_epi16((short)delta2); - __m128i _delta3 = _mm_set1_epi16((short)delta3); - __m128i _minL0 = _mm_set1_epi16((short)MAX_COST); - - for( d = 0; d < D; d += 8 ) - { - __m128i Cpd = _mm_load_si128((const __m128i*)(Cp + d)); - __m128i L0, L1, L2, L3; - - L0 = _mm_load_si128((const __m128i*)(Lr_p0 + d)); - L1 = _mm_load_si128((const __m128i*)(Lr_p1 + d)); - L2 = _mm_load_si128((const __m128i*)(Lr_p2 + d)); - L3 = _mm_load_si128((const __m128i*)(Lr_p3 + d)); - - L0 = _mm_min_epi16(L0, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p0 + d - 1)), _P1)); - L0 = _mm_min_epi16(L0, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p0 + d + 1)), _P1)); - - L1 = _mm_min_epi16(L1, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p1 + d - 1)), _P1)); - L1 = _mm_min_epi16(L1, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p1 + d + 1)), _P1)); - - L2 = _mm_min_epi16(L2, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p2 + d - 1)), _P1)); - L2 = _mm_min_epi16(L2, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p2 + d + 1)), _P1)); - - L3 = _mm_min_epi16(L3, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p3 + d - 1)), _P1)); - L3 = _mm_min_epi16(L3, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p3 + d + 1)), _P1)); - - L0 = _mm_min_epi16(L0, _delta0); - L0 = _mm_adds_epi16(_mm_subs_epi16(L0, _delta0), Cpd); - - L1 = _mm_min_epi16(L1, _delta1); - L1 = _mm_adds_epi16(_mm_subs_epi16(L1, _delta1), Cpd); - - L2 = _mm_min_epi16(L2, _delta2); - L2 = _mm_adds_epi16(_mm_subs_epi16(L2, _delta2), Cpd); - - L3 = _mm_min_epi16(L3, _delta3); - L3 = _mm_adds_epi16(_mm_subs_epi16(L3, _delta3), Cpd); - - _mm_store_si128( (__m128i*)(Lr_p + d), L0); - _mm_store_si128( (__m128i*)(Lr_p + d + D2), L1); - _mm_store_si128( (__m128i*)(Lr_p + d + D2*2), L2); - _mm_store_si128( (__m128i*)(Lr_p + d + D2*3), L3); - - __m128i t0 = _mm_min_epi16(_mm_unpacklo_epi16(L0, L2), _mm_unpackhi_epi16(L0, L2)); - __m128i t1 = _mm_min_epi16(_mm_unpacklo_epi16(L1, L3), _mm_unpackhi_epi16(L1, L3)); - t0 = _mm_min_epi16(_mm_unpacklo_epi16(t0, t1), _mm_unpackhi_epi16(t0, t1)); - _minL0 = _mm_min_epi16(_minL0, t0); - - __m128i Sval = _mm_load_si128((const __m128i*)(Sp + d)); - - L0 = _mm_adds_epi16(L0, L1); - L2 = _mm_adds_epi16(L2, L3); - Sval = _mm_adds_epi16(Sval, L0); - Sval = _mm_adds_epi16(Sval, L2); - - _mm_store_si128((__m128i*)(Sp + d), Sval); - } - - _minL0 = _mm_min_epi16(_minL0, _mm_srli_si128(_minL0, 8)); - _mm_storel_epi64((__m128i*)&minLr[0][xm], _minL0); - } - else - #endif - { - int minL0 = MAX_COST, minL1 = MAX_COST, minL2 = MAX_COST, minL3 = MAX_COST; - - for( d = 0; d < D; d++ ) - { - int Cpd = Cp[d], L0, L1, L2, L3; - - L0 = Cpd + min((int)Lr_p0[d], min(Lr_p0[d-1] + P1, min(Lr_p0[d+1] + P1, delta0))) - delta0; - L1 = Cpd + min((int)Lr_p1[d], min(Lr_p1[d-1] + P1, min(Lr_p1[d+1] + P1, delta1))) - delta1; - L2 = Cpd + min((int)Lr_p2[d], min(Lr_p2[d-1] + P1, min(Lr_p2[d+1] + P1, delta2))) - delta2; - L3 = Cpd + min((int)Lr_p3[d], min(Lr_p3[d-1] + P1, min(Lr_p3[d+1] + P1, delta3))) - delta3; - - Lr_p[d] = (CostType)L0; - minL0 = min(minL0, L0); - - Lr_p[d + D2] = (CostType)L1; - minL1 = min(minL1, L1); - - Lr_p[d + D2*2] = (CostType)L2; - minL2 = min(minL2, L2); - - Lr_p[d + D2*3] = (CostType)L3; - minL3 = min(minL3, L3); - - Sp[d] = saturate_cast(Sp[d] + L0 + L1 + L2 + L3); - } - minLr[0][xm] = (CostType)minL0; - minLr[0][xm+1] = (CostType)minL1; - minLr[0][xm+2] = (CostType)minL2; - minLr[0][xm+3] = (CostType)minL3; - } - } - - if( pass == npasses ) - { - for( x = 0; x < width; x++ ) - { - disp1ptr[x] = disp2ptr[x] = (DispType)INVALID_DISP_SCALED; - disp2cost[x] = MAX_COST; - } - - for( x = width1 - 1; x >= 0; x-- ) - { - CostType* Sp = S + x*D; - int minS = MAX_COST, bestDisp = -1; - - if( npasses == 1 ) - { - int xm = x*NR2, xd = xm*D2; - - int minL0 = MAX_COST; - int delta0 = minLr[0][xm + NR2] + P2; - CostType* Lr_p0 = Lr[0] + xd + NRD2; - Lr_p0[-1] = Lr_p0[D] = MAX_COST; - CostType* Lr_p = Lr[0] + xd; - - const CostType* Cp = C + x*D; - - #if CV_SSE2 - if( useSIMD ) - { - __m128i _P1 = _mm_set1_epi16((short)P1); - __m128i _delta0 = _mm_set1_epi16((short)delta0); - - __m128i _minL0 = _mm_set1_epi16((short)minL0); - __m128i _minS = _mm_set1_epi16(MAX_COST), _bestDisp = _mm_set1_epi16(-1); - __m128i _d8 = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7), _8 = _mm_set1_epi16(8); - - for( d = 0; d < D; d += 8 ) - { - __m128i Cpd = _mm_load_si128((const __m128i*)(Cp + d)), L0; - - L0 = _mm_load_si128((const __m128i*)(Lr_p0 + d)); - L0 = _mm_min_epi16(L0, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p0 + d - 1)), _P1)); - L0 = _mm_min_epi16(L0, _mm_adds_epi16(_mm_loadu_si128((const __m128i*)(Lr_p0 + d + 1)), _P1)); - L0 = _mm_min_epi16(L0, _delta0); - L0 = _mm_adds_epi16(_mm_subs_epi16(L0, _delta0), Cpd); - - _mm_store_si128((__m128i*)(Lr_p + d), L0); - _minL0 = _mm_min_epi16(_minL0, L0); - L0 = _mm_adds_epi16(L0, *(__m128i*)(Sp + d)); - _mm_store_si128((__m128i*)(Sp + d), L0); - - __m128i mask = _mm_cmpgt_epi16(_minS, L0); - _minS = _mm_min_epi16(_minS, L0); - _bestDisp = _mm_xor_si128(_bestDisp, _mm_and_si128(_mm_xor_si128(_bestDisp,_d8), mask)); - _d8 = _mm_adds_epi16(_d8, _8); - } - - short CV_DECL_ALIGNED(16) bestDispBuf[8]; - _mm_store_si128((__m128i*)bestDispBuf, _bestDisp); - - _minL0 = _mm_min_epi16(_minL0, _mm_srli_si128(_minL0, 8)); - _minL0 = _mm_min_epi16(_minL0, _mm_srli_si128(_minL0, 4)); - _minL0 = _mm_min_epi16(_minL0, _mm_srli_si128(_minL0, 2)); - - __m128i qS = _mm_min_epi16(_minS, _mm_srli_si128(_minS, 8)); - qS = _mm_min_epi16(qS, _mm_srli_si128(qS, 4)); - qS = _mm_min_epi16(qS, _mm_srli_si128(qS, 2)); - - minLr[0][xm] = (CostType)_mm_cvtsi128_si32(_minL0); - minS = (CostType)_mm_cvtsi128_si32(qS); - - qS = _mm_shuffle_epi32(_mm_unpacklo_epi16(qS, qS), 0); - qS = _mm_cmpeq_epi16(_minS, qS); - int idx = _mm_movemask_epi8(_mm_packs_epi16(qS, qS)) & 255; - - bestDisp = bestDispBuf[LSBTab[idx]]; - } - else - #endif - { - for( d = 0; d < D; d++ ) - { - int L0 = Cp[d] + min((int)Lr_p0[d], min(Lr_p0[d-1] + P1, min(Lr_p0[d+1] + P1, delta0))) - delta0; - - Lr_p[d] = (CostType)L0; - minL0 = min(minL0, L0); - - int Sval = Sp[d] = saturate_cast(Sp[d] + L0); - if( Sval < minS ) - { - minS = Sval; - bestDisp = d; - } - } - minLr[0][xm] = (CostType)minL0; - } - } - else - { - for( d = 0; d < D; d++ ) - { - int Sval = Sp[d]; - if( Sval < minS ) - { - minS = Sval; - bestDisp = d; - } - } - } - - for( d = 0; d < D; d++ ) - { - if( Sp[d]*(100 - uniquenessRatio) < minS*100 && std::abs(bestDisp - d) > 1 ) - break; - } - if( d < D ) - continue; - d = bestDisp; - int _x2 = x + minX1 - d - minD; - if( disp2cost[_x2] > minS ) - { - disp2cost[_x2] = (CostType)minS; - disp2ptr[_x2] = (DispType)(d + minD); - } - - if( 0 < d && d < D-1 ) - { - // do subpixel quadratic interpolation: - // fit parabola into (x1=d-1, y1=Sp[d-1]), (x2=d, y2=Sp[d]), (x3=d+1, y3=Sp[d+1]) - // then find minimum of the parabola. - int denom2 = max(Sp[d-1] + Sp[d+1] - 2*Sp[d], 1); - d = d*DISP_SCALE + ((Sp[d-1] - Sp[d+1])*DISP_SCALE + denom2)/(denom2*2); - } - else - d *= DISP_SCALE; - disp1ptr[x + minX1] = (DispType)(d + minD*DISP_SCALE); - } - - for( x = minX1; x < maxX1; x++ ) - { - // we round the computed disparity both towards -inf and +inf and check - // if either of the corresponding disparities in disp2 is consistent. - // This is to give the computed disparity a chance to look valid if it is. - int d1 = disp1ptr[x]; - if( d1 == INVALID_DISP_SCALED ) - continue; - int _d = d1 >> DISP_SHIFT; - int d_ = (d1 + DISP_SCALE-1) >> DISP_SHIFT; - int _x = x - _d, x_ = x - d_; - if( 0 <= _x && _x < width && disp2ptr[_x] >= minD && std::abs(disp2ptr[_x] - _d) > disp12MaxDiff && - 0 <= x_ && x_ < width && disp2ptr[x_] >= minD && std::abs(disp2ptr[x_] - d_) > disp12MaxDiff ) - disp1ptr[x] = (DispType)INVALID_DISP_SCALED; - } - } - - // now shift the cyclic buffers - std::swap( Lr[0], Lr[1] ); - std::swap( minLr[0], minLr[1] ); - } - } -} - -typedef cv::Point_ Point2s; - -void StereoSGBM::operator ()( InputArray _left, InputArray _right, - OutputArray _disp ) -{ - Mat left = _left.getMat(), right = _right.getMat(); - CV_Assert( left.size() == right.size() && left.type() == right.type() && - left.depth() == DataType::depth ); - - _disp.create( left.size(), CV_16S ); - Mat disp = _disp.getMat(); - - computeDisparitySGBM( left, right, disp, *this, buffer ); - medianBlur(disp, disp, 3); - - if( speckleWindowSize > 0 ) - filterSpeckles(disp, (minDisparity - 1)*DISP_SCALE, speckleWindowSize, DISP_SCALE*speckleRange, buffer); -} - - -Rect getValidDisparityROI( Rect roi1, Rect roi2, - int minDisparity, - int numberOfDisparities, - int SADWindowSize ) -{ - int SW2 = SADWindowSize/2; - int minD = minDisparity, maxD = minDisparity + numberOfDisparities - 1; - - int xmin = max(roi1.x, roi2.x + maxD) + SW2; - int xmax = min(roi1.x + roi1.width, roi2.x + roi2.width - minD) - SW2; - int ymin = max(roi1.y, roi2.y) + SW2; - int ymax = min(roi1.y + roi1.height, roi2.y + roi2.height) - SW2; - - Rect r(xmin, ymin, xmax - xmin, ymax - ymin); - - return r.width > 0 && r.height > 0 ? r : Rect(); -} - -} - -namespace -{ - template - void filterSpecklesImpl(cv::Mat& img, int newVal, int maxSpeckleSize, int maxDiff, cv::Mat& _buf) - { - using namespace cv; - - int width = img.cols, height = img.rows, npixels = width*height; - size_t bufSize = npixels*(int)(sizeof(Point2s) + sizeof(int) + sizeof(uchar)); - if( !_buf.isContinuous() || !_buf.data || _buf.cols*_buf.rows*_buf.elemSize() < bufSize ) - _buf.create(1, (int)bufSize, CV_8U); - - uchar* buf = _buf.data; - int i, j, dstep = (int)(img.step/sizeof(T)); - int* labels = (int*)buf; - buf += npixels*sizeof(labels[0]); - Point2s* wbuf = (Point2s*)buf; - buf += npixels*sizeof(wbuf[0]); - uchar* rtype = (uchar*)buf; - int curlabel = 0; - - // clear out label assignments - memset(labels, 0, npixels*sizeof(labels[0])); - - for( i = 0; i < height; i++ ) - { - T* ds = img.ptr(i); - int* ls = labels + width*i; - - for( j = 0; j < width; j++ ) - { - if( ds[j] != newVal ) // not a bad disparity - { - if( ls[j] ) // has a label, check for bad label - { - if( rtype[ls[j]] ) // small region, zero out disparity - ds[j] = (T)newVal; - } - // no label, assign and propagate - else - { - Point2s* ws = wbuf; // initialize wavefront - Point2s p((short)j, (short)i); // current pixel - curlabel++; // next label - int count = 0; // current region size - ls[j] = curlabel; - - // wavefront propagation - while( ws >= wbuf ) // wavefront not empty - { - count++; - // put neighbors onto wavefront - T* dpp = &img.at(p.y, p.x); - T dp = *dpp; - int* lpp = labels + width*p.y + p.x; - - if( p.x < width-1 && !lpp[+1] && dpp[+1] != newVal && std::abs(dp - dpp[+1]) <= maxDiff ) - { - lpp[+1] = curlabel; - *ws++ = Point2s(p.x+1, p.y); - } - - if( p.x > 0 && !lpp[-1] && dpp[-1] != newVal && std::abs(dp - dpp[-1]) <= maxDiff ) - { - lpp[-1] = curlabel; - *ws++ = Point2s(p.x-1, p.y); - } - - if( p.y < height-1 && !lpp[+width] && dpp[+dstep] != newVal && std::abs(dp - dpp[+dstep]) <= maxDiff ) - { - lpp[+width] = curlabel; - *ws++ = Point2s(p.x, p.y+1); - } - - if( p.y > 0 && !lpp[-width] && dpp[-dstep] != newVal && std::abs(dp - dpp[-dstep]) <= maxDiff ) - { - lpp[-width] = curlabel; - *ws++ = Point2s(p.x, p.y-1); - } - - // pop most recent and propagate - // NB: could try least recent, maybe better convergence - p = *--ws; - } - - // assign label type - if( count <= maxSpeckleSize ) // speckle region - { - rtype[ls[j]] = 1; // small region label - ds[j] = (T)newVal; - } - else - rtype[ls[j]] = 0; // large region label - } - } - } - } - } -} - -void cv::filterSpeckles( InputOutputArray _img, double _newval, int maxSpeckleSize, - double _maxDiff, InputOutputArray __buf ) -{ - Mat img = _img.getMat(); - Mat temp, &_buf = __buf.needed() ? __buf.getMatRef() : temp; - CV_Assert( img.type() == CV_8UC1 || img.type() == CV_16SC1 ); - - int newVal = cvRound(_newval); - int maxDiff = cvRound(_maxDiff); - - if (img.type() == CV_8UC1) - filterSpecklesImpl(img, newVal, maxSpeckleSize, maxDiff, _buf); - else - filterSpecklesImpl(img, newVal, maxSpeckleSize, maxDiff, _buf); -} - -void cv::validateDisparity( InputOutputArray _disp, InputArray _cost, int minDisparity, - int numberOfDisparities, int disp12MaxDiff ) -{ - Mat disp = _disp.getMat(), cost = _cost.getMat(); - int cols = disp.cols, rows = disp.rows; - int minD = minDisparity, maxD = minDisparity + numberOfDisparities; - int x, minX1 = max(maxD, 0), maxX1 = cols + min(minD, 0); - AutoBuffer _disp2buf(cols*2); - int* disp2buf = _disp2buf; - int* disp2cost = disp2buf + cols; - const int DISP_SHIFT = 4, DISP_SCALE = 1 << DISP_SHIFT; - int INVALID_DISP = minD - 1, INVALID_DISP_SCALED = INVALID_DISP*DISP_SCALE; - int costType = cost.type(); - - disp12MaxDiff *= DISP_SCALE; - - CV_Assert( numberOfDisparities > 0 && disp.type() == CV_16S && - (costType == CV_16S || costType == CV_32S) && - disp.size() == cost.size() ); - - for( int y = 0; y < rows; y++ ) - { - short* dptr = disp.ptr(y); - - for( x = 0; x < cols; x++ ) - { - disp2buf[x] = INVALID_DISP_SCALED; - disp2cost[x] = INT_MAX; - } - - if( costType == CV_16S ) - { - const short* cptr = cost.ptr(y); - - for( x = minX1; x < maxX1; x++ ) - { - int d = dptr[x], c = cptr[x]; - int x2 = x - ((d + DISP_SCALE/2) >> DISP_SHIFT); - - if( disp2cost[x2] > c ) - { - disp2cost[x2] = c; - disp2buf[x2] = d; - } - } - } - else - { - const int* cptr = cost.ptr(y); - - for( x = minX1; x < maxX1; x++ ) - { - int d = dptr[x], c = cptr[x]; - int x2 = x - ((d + DISP_SCALE/2) >> DISP_SHIFT); - - if( disp2cost[x2] < c ) - { - disp2cost[x2] = c; - disp2buf[x2] = d; - } - } - } - - for( x = minX1; x < maxX1; x++ ) - { - // we round the computed disparity both towards -inf and +inf and check - // if either of the corresponding disparities in disp2 is consistent. - // This is to give the computed disparity a chance to look valid if it is. - int d = dptr[x]; - if( d == INVALID_DISP_SCALED ) - continue; - int d0 = d >> DISP_SHIFT; - int d1 = (d + DISP_SCALE-1) >> DISP_SHIFT; - int x0 = x - d0, x1 = x - d1; - if( (0 <= x0 && x0 < cols && disp2buf[x0] > INVALID_DISP_SCALED && std::abs(disp2buf[x0] - d) > disp12MaxDiff) && - (0 <= x1 && x1 < cols && disp2buf[x1] > INVALID_DISP_SCALED && std::abs(disp2buf[x1] - d) > disp12MaxDiff) ) - dptr[x] = (short)INVALID_DISP_SCALED; - } - } -} - -CvRect cvGetValidDisparityROI( CvRect roi1, CvRect roi2, int minDisparity, - int numberOfDisparities, int SADWindowSize ) -{ - return (CvRect)cv::getValidDisparityROI( roi1, roi2, minDisparity, - numberOfDisparities, SADWindowSize ); -} - -void cvValidateDisparity( CvArr* _disp, const CvArr* _cost, int minDisparity, - int numberOfDisparities, int disp12MaxDiff ) -{ - cv::Mat disp = cv::cvarrToMat(_disp), cost = cv::cvarrToMat(_cost); - cv::validateDisparity( disp, cost, minDisparity, numberOfDisparities, disp12MaxDiff ); -} diff --git a/modules/calib3d/src/triangulate.cpp b/modules/calib3d/src/triangulate.cpp deleted file mode 100644 index 9f52b37..0000000 --- a/modules/calib3d/src/triangulate.cpp +++ /dev/null @@ -1,447 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2009, Intel Corporation and others, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -// cvCorrectMatches function is Copyright (C) 2009, Jostein Austvik Jacobsen. -// cvTriangulatePoints function is derived from icvReconstructPointsFor3View, originally by Valery Mosyagin. - -// HZ, R. Hartley and A. Zisserman, Multiple View Geometry in Computer Vision, Cambridge Univ. Press, 2003. - - - -// This method is the same as icvReconstructPointsFor3View, with only a few numbers adjusted for two-view geometry -CV_IMPL void -cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMat* projPoints2, CvMat* points4D) -{ - if( projMatr1 == 0 || projMatr2 == 0 || - projPoints1 == 0 || projPoints2 == 0 || - points4D == 0) - CV_Error( CV_StsNullPtr, "Some of parameters is a NULL pointer" ); - - if( !CV_IS_MAT(projMatr1) || !CV_IS_MAT(projMatr2) || - !CV_IS_MAT(projPoints1) || !CV_IS_MAT(projPoints2) || - !CV_IS_MAT(points4D) ) - CV_Error( CV_StsUnsupportedFormat, "Input parameters must be matrices" ); - - int numPoints; - numPoints = projPoints1->cols; - - if( numPoints < 1 ) - CV_Error( CV_StsOutOfRange, "Number of points must be more than zero" ); - - if( projPoints2->cols != numPoints || points4D->cols != numPoints ) - CV_Error( CV_StsUnmatchedSizes, "Number of points must be the same" ); - - if( projPoints1->rows != 2 || projPoints2->rows != 2) - CV_Error( CV_StsUnmatchedSizes, "Number of proj points coordinates must be == 2" ); - - if( points4D->rows != 4 ) - CV_Error( CV_StsUnmatchedSizes, "Number of world points coordinates must be == 4" ); - - if( projMatr1->cols != 4 || projMatr1->rows != 3 || - projMatr2->cols != 4 || projMatr2->rows != 3) - CV_Error( CV_StsUnmatchedSizes, "Size of projection matrices must be 3x4" ); - - CvMat matrA; - double matrA_dat[24]; - matrA = cvMat(6,4,CV_64F,matrA_dat); - - //CvMat matrU; - CvMat matrW; - CvMat matrV; - //double matrU_dat[9*9]; - double matrW_dat[6*4]; - double matrV_dat[4*4]; - - //matrU = cvMat(6,6,CV_64F,matrU_dat); - matrW = cvMat(6,4,CV_64F,matrW_dat); - matrV = cvMat(4,4,CV_64F,matrV_dat); - - CvMat* projPoints[2]; - CvMat* projMatrs[2]; - - projPoints[0] = projPoints1; - projPoints[1] = projPoints2; - - projMatrs[0] = projMatr1; - projMatrs[1] = projMatr2; - - /* Solve system for each point */ - int i,j; - for( i = 0; i < numPoints; i++ )/* For each point */ - { - /* Fill matrix for current point */ - for( j = 0; j < 2; j++ )/* For each view */ - { - double x,y; - x = cvmGet(projPoints[j],0,i); - y = cvmGet(projPoints[j],1,i); - for( int k = 0; k < 4; k++ ) - { - cvmSet(&matrA, j*3+0, k, x * cvmGet(projMatrs[j],2,k) - cvmGet(projMatrs[j],0,k) ); - cvmSet(&matrA, j*3+1, k, y * cvmGet(projMatrs[j],2,k) - cvmGet(projMatrs[j],1,k) ); - cvmSet(&matrA, j*3+2, k, x * cvmGet(projMatrs[j],1,k) - y * cvmGet(projMatrs[j],0,k) ); - } - } - /* Solve system for current point */ - { - cvSVD(&matrA,&matrW,0,&matrV,CV_SVD_V_T); - - /* Copy computed point */ - cvmSet(points4D,0,i,cvmGet(&matrV,3,0));/* X */ - cvmSet(points4D,1,i,cvmGet(&matrV,3,1));/* Y */ - cvmSet(points4D,2,i,cvmGet(&matrV,3,2));/* Z */ - cvmSet(points4D,3,i,cvmGet(&matrV,3,3));/* W */ - } - } - -#if 0 - double err = 0; - /* Points was reconstructed. Try to reproject points */ - /* We can compute reprojection error if need */ - { - int i; - CvMat point3D; - double point3D_dat[4]; - point3D = cvMat(4,1,CV_64F,point3D_dat); - - CvMat point2D; - double point2D_dat[3]; - point2D = cvMat(3,1,CV_64F,point2D_dat); - - for( i = 0; i < numPoints; i++ ) - { - double W = cvmGet(points4D,3,i); - - point3D_dat[0] = cvmGet(points4D,0,i)/W; - point3D_dat[1] = cvmGet(points4D,1,i)/W; - point3D_dat[2] = cvmGet(points4D,2,i)/W; - point3D_dat[3] = 1; - - /* !!! Project this point for each camera */ - for( int currCamera = 0; currCamera < 2; currCamera++ ) - { - cvMatMul(projMatrs[currCamera], &point3D, &point2D); - - float x,y; - float xr,yr,wr; - x = (float)cvmGet(projPoints[currCamera],0,i); - y = (float)cvmGet(projPoints[currCamera],1,i); - - wr = (float)point2D_dat[2]; - xr = (float)(point2D_dat[0]/wr); - yr = (float)(point2D_dat[1]/wr); - - float deltaX,deltaY; - deltaX = (float)fabs(x-xr); - deltaY = (float)fabs(y-yr); - err += deltaX*deltaX + deltaY*deltaY; - } - } - } -#endif -} - - -/* - * The Optimal Triangulation Method (see HZ for details) - * For each given point correspondence points1[i] <-> points2[i], and a fundamental matrix F, - * computes the corrected correspondences new_points1[i] <-> new_points2[i] that minimize the - * geometric error d(points1[i],new_points1[i])^2 + d(points2[i],new_points2[i])^2 (where d(a,b) - * is the geometric distance between points a and b) subject to the epipolar constraint - * new_points2' * F * new_points1 = 0. - * - * F_ : 3x3 fundamental matrix - * points1_ : 1xN matrix containing the first set of points - * points2_ : 1xN matrix containing the second set of points - * new_points1 : the optimized points1_. if this is NULL, the corrected points are placed back in points1_ - * new_points2 : the optimized points2_. if this is NULL, the corrected points are placed back in points2_ - */ -CV_IMPL void -cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1, CvMat *new_points2) -{ - cv::Ptr tmp33; - cv::Ptr tmp31, tmp31_2; - cv::Ptr T1i, T2i; - cv::Ptr R1, R2; - cv::Ptr TFT, TFTt, RTFTR; - cv::Ptr U, S, V; - cv::Ptr e1, e2; - cv::Ptr polynomial; - cv::Ptr result; - cv::Ptr points1, points2; - cv::Ptr F; - - if (!CV_IS_MAT(F_) || !CV_IS_MAT(points1_) || !CV_IS_MAT(points2_) ) - CV_Error( CV_StsUnsupportedFormat, "Input parameters must be matrices" ); - if (!( F_->cols == 3 && F_->rows == 3)) - CV_Error( CV_StsUnmatchedSizes, "The fundamental matrix must be a 3x3 matrix"); - if (!(((F_->type & CV_MAT_TYPE_MASK) >> 3) == 0 )) - CV_Error( CV_StsUnsupportedFormat, "The fundamental matrix must be a single-channel matrix" ); - if (!(points1_->rows == 1 && points2_->rows == 1 && points1_->cols == points2_->cols)) - CV_Error( CV_StsUnmatchedSizes, "The point-matrices must have one row, and an equal number of columns" ); - if (((points1_->type & CV_MAT_TYPE_MASK) >> 3) != 1 ) - CV_Error( CV_StsUnmatchedSizes, "The first set of points must contain two channels; one for x and one for y" ); - if (((points2_->type & CV_MAT_TYPE_MASK) >> 3) != 1 ) - CV_Error( CV_StsUnmatchedSizes, "The second set of points must contain two channels; one for x and one for y" ); - if (new_points1 != NULL) { - CV_Assert(CV_IS_MAT(new_points1)); - if (new_points1->cols != points1_->cols || new_points1->rows != 1) - CV_Error( CV_StsUnmatchedSizes, "The first output matrix must have the same dimensions as the input matrices" ); - if (CV_MAT_CN(new_points1->type) != 2) - CV_Error( CV_StsUnsupportedFormat, "The first output matrix must have two channels; one for x and one for y" ); - } - if (new_points2 != NULL) { - CV_Assert(CV_IS_MAT(new_points2)); - if (new_points2->cols != points2_->cols || new_points2->rows != 1) - CV_Error( CV_StsUnmatchedSizes, "The second output matrix must have the same dimensions as the input matrices" ); - if (CV_MAT_CN(new_points2->type) != 2) - CV_Error( CV_StsUnsupportedFormat, "The second output matrix must have two channels; one for x and one for y" ); - } - - // Make sure F uses double precision - F = cvCreateMat(3,3,CV_64FC1); - cvConvert(F_, F); - - // Make sure points1 uses double precision - points1 = cvCreateMat(points1_->rows,points1_->cols,CV_64FC2); - cvConvert(points1_, points1); - - // Make sure points2 uses double precision - points2 = cvCreateMat(points2_->rows,points2_->cols,CV_64FC2); - cvConvert(points2_, points2); - - tmp33 = cvCreateMat(3,3,CV_64FC1); - tmp31 = cvCreateMat(3,1,CV_64FC1), tmp31_2 = cvCreateMat(3,1,CV_64FC1); - T1i = cvCreateMat(3,3,CV_64FC1), T2i = cvCreateMat(3,3,CV_64FC1); - R1 = cvCreateMat(3,3,CV_64FC1), R2 = cvCreateMat(3,3,CV_64FC1); - TFT = cvCreateMat(3,3,CV_64FC1), TFTt = cvCreateMat(3,3,CV_64FC1), RTFTR = cvCreateMat(3,3,CV_64FC1); - U = cvCreateMat(3,3,CV_64FC1); - S = cvCreateMat(3,3,CV_64FC1); - V = cvCreateMat(3,3,CV_64FC1); - e1 = cvCreateMat(3,1,CV_64FC1), e2 = cvCreateMat(3,1,CV_64FC1); - - double x1, y1, x2, y2; - double scale; - double f1, f2, a, b, c, d; - polynomial = cvCreateMat(1,7,CV_64FC1); - result = cvCreateMat(1,6,CV_64FC2); - double t_min, s_val, t, s; - for (int p = 0; p < points1->cols; ++p) { - // Replace F by T2-t * F * T1-t - x1 = points1->data.db[p*2]; - y1 = points1->data.db[p*2+1]; - x2 = points2->data.db[p*2]; - y2 = points2->data.db[p*2+1]; - - cvSetZero(T1i); - cvSetReal2D(T1i,0,0,1); - cvSetReal2D(T1i,1,1,1); - cvSetReal2D(T1i,2,2,1); - cvSetReal2D(T1i,0,2,x1); - cvSetReal2D(T1i,1,2,y1); - cvSetZero(T2i); - cvSetReal2D(T2i,0,0,1); - cvSetReal2D(T2i,1,1,1); - cvSetReal2D(T2i,2,2,1); - cvSetReal2D(T2i,0,2,x2); - cvSetReal2D(T2i,1,2,y2); - cvGEMM(T2i,F,1,0,0,tmp33,CV_GEMM_A_T); - cvSetZero(TFT); - cvGEMM(tmp33,T1i,1,0,0,TFT); - - // Compute the right epipole e1 from F * e1 = 0 - cvSetZero(U); - cvSetZero(S); - cvSetZero(V); - cvSVD(TFT,S,U,V); - scale = sqrt(cvGetReal2D(V,0,2)*cvGetReal2D(V,0,2) + cvGetReal2D(V,1,2)*cvGetReal2D(V,1,2)); - cvSetReal2D(e1,0,0,cvGetReal2D(V,0,2)/scale); - cvSetReal2D(e1,1,0,cvGetReal2D(V,1,2)/scale); - cvSetReal2D(e1,2,0,cvGetReal2D(V,2,2)/scale); - if (cvGetReal2D(e1,2,0) < 0) { - cvSetReal2D(e1,0,0,-cvGetReal2D(e1,0,0)); - cvSetReal2D(e1,1,0,-cvGetReal2D(e1,1,0)); - cvSetReal2D(e1,2,0,-cvGetReal2D(e1,2,0)); - } - - // Compute the left epipole e2 from e2' * F = 0 => F' * e2 = 0 - cvSetZero(TFTt); - cvTranspose(TFT, TFTt); - cvSetZero(U); - cvSetZero(S); - cvSetZero(V); - cvSVD(TFTt,S,U,V); - cvSetZero(e2); - scale = sqrt(cvGetReal2D(V,0,2)*cvGetReal2D(V,0,2) + cvGetReal2D(V,1,2)*cvGetReal2D(V,1,2)); - cvSetReal2D(e2,0,0,cvGetReal2D(V,0,2)/scale); - cvSetReal2D(e2,1,0,cvGetReal2D(V,1,2)/scale); - cvSetReal2D(e2,2,0,cvGetReal2D(V,2,2)/scale); - if (cvGetReal2D(e2,2,0) < 0) { - cvSetReal2D(e2,0,0,-cvGetReal2D(e2,0,0)); - cvSetReal2D(e2,1,0,-cvGetReal2D(e2,1,0)); - cvSetReal2D(e2,2,0,-cvGetReal2D(e2,2,0)); - } - - // Replace F by R2 * F * R1' - cvSetZero(R1); - cvSetReal2D(R1,0,0,cvGetReal2D(e1,0,0)); - cvSetReal2D(R1,0,1,cvGetReal2D(e1,1,0)); - cvSetReal2D(R1,1,0,-cvGetReal2D(e1,1,0)); - cvSetReal2D(R1,1,1,cvGetReal2D(e1,0,0)); - cvSetReal2D(R1,2,2,1); - cvSetZero(R2); - cvSetReal2D(R2,0,0,cvGetReal2D(e2,0,0)); - cvSetReal2D(R2,0,1,cvGetReal2D(e2,1,0)); - cvSetReal2D(R2,1,0,-cvGetReal2D(e2,1,0)); - cvSetReal2D(R2,1,1,cvGetReal2D(e2,0,0)); - cvSetReal2D(R2,2,2,1); - cvGEMM(R2,TFT,1,0,0,tmp33); - cvGEMM(tmp33,R1,1,0,0,RTFTR,CV_GEMM_B_T); - - // Set f1 = e1(3), f2 = e2(3), a = F22, b = F23, c = F32, d = F33 - f1 = cvGetReal2D(e1,2,0); - f2 = cvGetReal2D(e2,2,0); - a = cvGetReal2D(RTFTR,1,1); - b = cvGetReal2D(RTFTR,1,2); - c = cvGetReal2D(RTFTR,2,1); - d = cvGetReal2D(RTFTR,2,2); - - // Form the polynomial g(t) = k6*t⁶ + k5*t⁵ + k4*t⁴ + k3*t³ + k2*t² + k1*t + k0 - // from f1, f2, a, b, c and d - cvSetReal2D(polynomial,0,6,( +b*c*c*f1*f1*f1*f1*a-a*a*d*f1*f1*f1*f1*c )); - cvSetReal2D(polynomial,0,5,( +f2*f2*f2*f2*c*c*c*c+2*a*a*f2*f2*c*c-a*a*d*d*f1*f1*f1*f1+b*b*c*c*f1*f1*f1*f1+a*a*a*a )); - cvSetReal2D(polynomial,0,4,( +4*a*a*a*b+2*b*c*c*f1*f1*a+4*f2*f2*f2*f2*c*c*c*d+4*a*b*f2*f2*c*c+4*a*a*f2*f2*c*d-2*a*a*d*f1*f1*c-a*d*d*f1*f1*f1*f1*b+b*b*c*f1*f1*f1*f1*d )); - cvSetReal2D(polynomial,0,3,( +6*a*a*b*b+6*f2*f2*f2*f2*c*c*d*d+2*b*b*f2*f2*c*c+2*a*a*f2*f2*d*d-2*a*a*d*d*f1*f1+2*b*b*c*c*f1*f1+8*a*b*f2*f2*c*d )); - cvSetReal2D(polynomial,0,2,( +4*a*b*b*b+4*b*b*f2*f2*c*d+4*f2*f2*f2*f2*c*d*d*d-a*a*d*c+b*c*c*a+4*a*b*f2*f2*d*d-2*a*d*d*f1*f1*b+2*b*b*c*f1*f1*d )); - cvSetReal2D(polynomial,0,1,( +f2*f2*f2*f2*d*d*d*d+b*b*b*b+2*b*b*f2*f2*d*d-a*a*d*d+b*b*c*c )); - cvSetReal2D(polynomial,0,0,( -a*d*d*b+b*b*c*d )); - - // Solve g(t) for t to get 6 roots - cvSetZero(result); - cvSolvePoly(polynomial, result, 100, 20); - - // Evaluate the cost function s(t) at the real part of the 6 roots - t_min = DBL_MAX; - s_val = 1./(f1*f1) + (c*c)/(a*a+f2*f2*c*c); - for (int ti = 0; ti < 6; ++ti) { - t = result->data.db[2*ti]; - s = (t*t)/(1 + f1*f1*t*t) + ((c*t + d)*(c*t + d))/((a*t + b)*(a*t + b) + f2*f2*(c*t + d)*(c*t + d)); - if (s < s_val) { - s_val = s; - t_min = t; - } - } - - // find the optimal x1 and y1 as the points on l1 and l2 closest to the origin - tmp31->data.db[0] = t_min*t_min*f1; - tmp31->data.db[1] = t_min; - tmp31->data.db[2] = t_min*t_min*f1*f1+1; - tmp31->data.db[0] /= tmp31->data.db[2]; - tmp31->data.db[1] /= tmp31->data.db[2]; - tmp31->data.db[2] /= tmp31->data.db[2]; - cvGEMM(T1i,R1,1,0,0,tmp33,CV_GEMM_B_T); - cvGEMM(tmp33,tmp31,1,0,0,tmp31_2); - x1 = tmp31_2->data.db[0]; - y1 = tmp31_2->data.db[1]; - - tmp31->data.db[0] = f2*pow(c*t_min+d,2); - tmp31->data.db[1] = -(a*t_min+b)*(c*t_min+d); - tmp31->data.db[2] = f2*f2*pow(c*t_min+d,2) + pow(a*t_min+b,2); - tmp31->data.db[0] /= tmp31->data.db[2]; - tmp31->data.db[1] /= tmp31->data.db[2]; - tmp31->data.db[2] /= tmp31->data.db[2]; - cvGEMM(T2i,R2,1,0,0,tmp33,CV_GEMM_B_T); - cvGEMM(tmp33,tmp31,1,0,0,tmp31_2); - x2 = tmp31_2->data.db[0]; - y2 = tmp31_2->data.db[1]; - - // Return the points in the matrix format that the user wants - points1->data.db[p*2] = x1; - points1->data.db[p*2+1] = y1; - points2->data.db[p*2] = x2; - points2->data.db[p*2+1] = y2; - } - - if( new_points1 ) - cvConvert( points1, new_points1 ); - if( new_points2 ) - cvConvert( points2, new_points2 ); -} - -void cv::triangulatePoints( InputArray _projMatr1, InputArray _projMatr2, - InputArray _projPoints1, InputArray _projPoints2, - OutputArray _points4D ) -{ - Mat matr1 = _projMatr1.getMat(), matr2 = _projMatr2.getMat(); - Mat points1 = _projPoints1.getMat(), points2 = _projPoints2.getMat(); - - if((points1.rows == 1 || points1.cols == 1) && points1.channels() == 2) - points1 = points1.reshape(1, static_cast(points1.total())).t(); - - if((points2.rows == 1 || points2.cols == 1) && points2.channels() == 2) - points2 = points2.reshape(1, static_cast(points2.total())).t(); - - CvMat cvMatr1 = matr1, cvMatr2 = matr2; - CvMat cvPoints1 = points1, cvPoints2 = points2; - - _points4D.create(4, points1.cols, points1.type()); - CvMat cvPoints4D = _points4D.getMat(); - - cvTriangulatePoints(&cvMatr1, &cvMatr2, &cvPoints1, &cvPoints2, &cvPoints4D); -} - -void cv::correctMatches( InputArray _F, InputArray _points1, InputArray _points2, - OutputArray _newPoints1, OutputArray _newPoints2 ) -{ - Mat F = _F.getMat(); - Mat points1 = _points1.getMat(), points2 = _points2.getMat(); - - CvMat cvPoints1 = points1, cvPoints2 = points2; - CvMat cvF = F; - - _newPoints1.create(points1.size(), points1.type()); - _newPoints2.create(points2.size(), points2.type()); - CvMat cvNewPoints1 = _newPoints1.getMat(), cvNewPoints2 = _newPoints2.getMat(); - - cvCorrectMatches(&cvF, &cvPoints1, &cvPoints2, &cvNewPoints1, &cvNewPoints2); -} diff --git a/modules/contrib/CMakeLists.txt b/modules/contrib/CMakeLists.txt deleted file mode 100644 index f402016..0000000 --- a/modules/contrib/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -ocv_define_module(contrib opencv_imgproc opencv_calib3d opencv_features2d opencv_ml opencv_video opencv_objdetect OPTIONAL opencv_highgui opencv_nonfree) diff --git a/modules/contrib/include/opencv2/contrib/contrib.hpp b/modules/contrib/include/opencv2/contrib/contrib.hpp deleted file mode 100644 index 7d881c3..0000000 --- a/modules/contrib/include/opencv2/contrib/contrib.hpp +++ /dev/null @@ -1,985 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CONTRIB_HPP__ -#define __OPENCV_CONTRIB_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/objdetect/objdetect.hpp" - -#ifdef __cplusplus - -/****************************************************************************************\ -* Adaptive Skin Detector * -\****************************************************************************************/ - -class CV_EXPORTS CvAdaptiveSkinDetector -{ -private: - enum { - GSD_HUE_LT = 3, - GSD_HUE_UT = 33, - GSD_INTENSITY_LT = 15, - GSD_INTENSITY_UT = 250 - }; - - class CV_EXPORTS Histogram - { - private: - enum { - HistogramSize = (GSD_HUE_UT - GSD_HUE_LT + 1) - }; - - protected: - int findCoverageIndex(double surfaceToCover, int defaultValue = 0); - - public: - CvHistogram *fHistogram; - Histogram(); - virtual ~Histogram(); - - void findCurveThresholds(int &x1, int &x2, double percent = 0.05); - void mergeWith(Histogram *source, double weight); - }; - - int nStartCounter, nFrameCount, nSkinHueLowerBound, nSkinHueUpperBound, nMorphingMethod, nSamplingDivider; - double fHistogramMergeFactor, fHuePercentCovered; - Histogram histogramHueMotion, skinHueHistogram; - IplImage *imgHueFrame, *imgSaturationFrame, *imgLastGrayFrame, *imgMotionFrame, *imgFilteredFrame; - IplImage *imgShrinked, *imgTemp, *imgGrayFrame, *imgHSVFrame; - -protected: - void initData(IplImage *src, int widthDivider, int heightDivider); - void adaptiveFilter(); - -public: - - enum { - MORPHING_METHOD_NONE = 0, - MORPHING_METHOD_ERODE = 1, - MORPHING_METHOD_ERODE_ERODE = 2, - MORPHING_METHOD_ERODE_DILATE = 3 - }; - - CvAdaptiveSkinDetector(int samplingDivider = 1, int morphingMethod = MORPHING_METHOD_NONE); - virtual ~CvAdaptiveSkinDetector(); - - virtual void process(IplImage *inputBGRImage, IplImage *outputHueMask); -}; - - -/****************************************************************************************\ - * Fuzzy MeanShift Tracker * - \****************************************************************************************/ - -class CV_EXPORTS CvFuzzyPoint { -public: - double x, y, value; - - CvFuzzyPoint(double _x, double _y); -}; - -class CV_EXPORTS CvFuzzyCurve { -private: - std::vector points; - double value, centre; - - bool between(double x, double x1, double x2); - -public: - CvFuzzyCurve(); - ~CvFuzzyCurve(); - - void setCentre(double _centre); - double getCentre(); - void clear(); - void addPoint(double x, double y); - double calcValue(double param); - double getValue(); - void setValue(double _value); -}; - -class CV_EXPORTS CvFuzzyFunction { -public: - std::vector curves; - - CvFuzzyFunction(); - ~CvFuzzyFunction(); - void addCurve(CvFuzzyCurve *curve, double value = 0); - void resetValues(); - double calcValue(); - CvFuzzyCurve *newCurve(); -}; - -class CV_EXPORTS CvFuzzyRule { -private: - CvFuzzyCurve *fuzzyInput1, *fuzzyInput2; - CvFuzzyCurve *fuzzyOutput; -public: - CvFuzzyRule(); - ~CvFuzzyRule(); - void setRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1); - double calcValue(double param1, double param2); - CvFuzzyCurve *getOutputCurve(); -}; - -class CV_EXPORTS CvFuzzyController { -private: - std::vector rules; -public: - CvFuzzyController(); - ~CvFuzzyController(); - void addRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1); - double calcOutput(double param1, double param2); -}; - -class CV_EXPORTS CvFuzzyMeanShiftTracker -{ -private: - class FuzzyResizer - { - private: - CvFuzzyFunction iInput, iOutput; - CvFuzzyController fuzzyController; - public: - FuzzyResizer(); - int calcOutput(double edgeDensity, double density); - }; - - class SearchWindow - { - public: - FuzzyResizer *fuzzyResizer; - int x, y; - int width, height, maxWidth, maxHeight, ellipseHeight, ellipseWidth; - int ldx, ldy, ldw, ldh, numShifts, numIters; - int xGc, yGc; - long m00, m01, m10, m11, m02, m20; - double ellipseAngle; - double density; - unsigned int depthLow, depthHigh; - int verticalEdgeLeft, verticalEdgeRight, horizontalEdgeTop, horizontalEdgeBottom; - - SearchWindow(); - ~SearchWindow(); - void setSize(int _x, int _y, int _width, int _height); - void initDepthValues(IplImage *maskImage, IplImage *depthMap); - bool shift(); - void extractInfo(IplImage *maskImage, IplImage *depthMap, bool initDepth); - void getResizeAttribsEdgeDensityLinear(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh); - void getResizeAttribsInnerDensity(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh); - void getResizeAttribsEdgeDensityFuzzy(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh); - bool meanShift(IplImage *maskImage, IplImage *depthMap, int maxIteration, bool initDepth); - }; - -public: - enum TrackingState - { - tsNone = 0, - tsSearching = 1, - tsTracking = 2, - tsSetWindow = 3, - tsDisabled = 10 - }; - - enum ResizeMethod { - rmEdgeDensityLinear = 0, - rmEdgeDensityFuzzy = 1, - rmInnerDensity = 2 - }; - - enum { - MinKernelMass = 1000 - }; - - SearchWindow kernel; - int searchMode; - -private: - enum - { - MaxMeanShiftIteration = 5, - MaxSetSizeIteration = 5 - }; - - void findOptimumSearchWindow(SearchWindow &searchWindow, IplImage *maskImage, IplImage *depthMap, int maxIteration, int resizeMethod, bool initDepth); - -public: - CvFuzzyMeanShiftTracker(); - ~CvFuzzyMeanShiftTracker(); - - void track(IplImage *maskImage, IplImage *depthMap, int resizeMethod, bool resetSearch, int minKernelMass = MinKernelMass); -}; - - -namespace cv -{ - - class CV_EXPORTS Octree - { - public: - struct Node - { - Node() {} - int begin, end; - float x_min, x_max, y_min, y_max, z_min, z_max; - int maxLevels; - bool isLeaf; - int children[8]; - }; - - Octree(); - Octree( const vector& points, int maxLevels = 10, int minPoints = 20 ); - virtual ~Octree(); - - virtual void buildTree( const vector& points, int maxLevels = 10, int minPoints = 20 ); - virtual void getPointsWithinSphere( const Point3f& center, float radius, - vector& points ) const; - const vector& getNodes() const { return nodes; } - private: - int minPoints; - vector points; - vector nodes; - - virtual void buildNext(size_t node_ind); - }; - - - class CV_EXPORTS Mesh3D - { - public: - struct EmptyMeshException {}; - - Mesh3D(); - Mesh3D(const vector& vtx); - ~Mesh3D(); - - void buildOctree(); - void clearOctree(); - float estimateResolution(float tryRatio = 0.1f); - void computeNormals(float normalRadius, int minNeighbors = 20); - void computeNormals(const vector& subset, float normalRadius, int minNeighbors = 20); - - void writeAsVrml(const String& file, const vector& colors = vector()) const; - - vector vtx; - vector normals; - float resolution; - Octree octree; - - const static Point3f allzero; - }; - - class CV_EXPORTS SpinImageModel - { - public: - - /* model parameters, leave unset for default or auto estimate */ - float normalRadius; - int minNeighbors; - - float binSize; - int imageWidth; - - float lambda; - float gamma; - - float T_GeometriccConsistency; - float T_GroupingCorespondances; - - /* public interface */ - SpinImageModel(); - explicit SpinImageModel(const Mesh3D& mesh); - ~SpinImageModel(); - - void setLogger(std::ostream* log); - void selectRandomSubset(float ratio); - void setSubset(const vector& subset); - void compute(); - - void match(const SpinImageModel& scene, vector< vector >& result); - - Mat packRandomScaledSpins(bool separateScale = false, size_t xCount = 10, size_t yCount = 10) const; - - size_t getSpinCount() const { return spinImages.rows; } - Mat getSpinImage(size_t index) const { return spinImages.row((int)index); } - const Point3f& getSpinVertex(size_t index) const { return mesh.vtx[subset[index]]; } - const Point3f& getSpinNormal(size_t index) const { return mesh.normals[subset[index]]; } - - const Mesh3D& getMesh() const { return mesh; } - Mesh3D& getMesh() { return mesh; } - - /* static utility functions */ - static bool spinCorrelation(const Mat& spin1, const Mat& spin2, float lambda, float& result); - - static Point2f calcSpinMapCoo(const Point3f& point, const Point3f& vertex, const Point3f& normal); - - static float geometricConsistency(const Point3f& pointScene1, const Point3f& normalScene1, - const Point3f& pointModel1, const Point3f& normalModel1, - const Point3f& pointScene2, const Point3f& normalScene2, - const Point3f& pointModel2, const Point3f& normalModel2); - - static float groupingCreteria(const Point3f& pointScene1, const Point3f& normalScene1, - const Point3f& pointModel1, const Point3f& normalModel1, - const Point3f& pointScene2, const Point3f& normalScene2, - const Point3f& pointModel2, const Point3f& normalModel2, - float gamma); - protected: - void defaultParams(); - - void matchSpinToModel(const Mat& spin, vector& indeces, - vector& corrCoeffs, bool useExtremeOutliers = true) const; - - void repackSpinImages(const vector& mask, Mat& spinImages, bool reAlloc = true) const; - - vector subset; - Mesh3D mesh; - Mat spinImages; - std::ostream* out; - }; - - class CV_EXPORTS TickMeter - { - public: - TickMeter(); - void start(); - void stop(); - - int64 getTimeTicks() const; - double getTimeMicro() const; - double getTimeMilli() const; - double getTimeSec() const; - int64 getCounter() const; - - void reset(); - private: - int64 counter; - int64 sumTime; - int64 startTime; - }; - - CV_EXPORTS std::ostream& operator<<(std::ostream& out, const TickMeter& tm); - - class CV_EXPORTS SelfSimDescriptor - { - public: - SelfSimDescriptor(); - SelfSimDescriptor(int _ssize, int _lsize, - int _startDistanceBucket=DEFAULT_START_DISTANCE_BUCKET, - int _numberOfDistanceBuckets=DEFAULT_NUM_DISTANCE_BUCKETS, - int _nangles=DEFAULT_NUM_ANGLES); - SelfSimDescriptor(const SelfSimDescriptor& ss); - virtual ~SelfSimDescriptor(); - SelfSimDescriptor& operator = (const SelfSimDescriptor& ss); - - size_t getDescriptorSize() const; - Size getGridSize( Size imgsize, Size winStride ) const; - - virtual void compute(const Mat& img, vector& descriptors, Size winStride=Size(), - const vector& locations=vector()) const; - virtual void computeLogPolarMapping(Mat& mappingMask) const; - virtual void SSD(const Mat& img, Point pt, Mat& ssd) const; - - int smallSize; - int largeSize; - int startDistanceBucket; - int numberOfDistanceBuckets; - int numberOfAngles; - - enum { DEFAULT_SMALL_SIZE = 5, DEFAULT_LARGE_SIZE = 41, - DEFAULT_NUM_ANGLES = 20, DEFAULT_START_DISTANCE_BUCKET = 3, - DEFAULT_NUM_DISTANCE_BUCKETS = 7 }; - }; - - - typedef bool (*BundleAdjustCallback)(int iteration, double norm_error, void* user_data); - - class CV_EXPORTS LevMarqSparse { - public: - LevMarqSparse(); - LevMarqSparse(int npoints, // number of points - int ncameras, // number of cameras - int nPointParams, // number of params per one point (3 in case of 3D points) - int nCameraParams, // number of parameters per one camera - int nErrParams, // number of parameters in measurement vector - // for 1 point at one camera (2 in case of 2D projections) - Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras - // 1 - point is visible for the camera, 0 - invisible - Mat& P0, // starting vector of parameters, first cameras then points - Mat& X, // measurements, in order of visibility. non visible cases are skipped - TermCriteria criteria, // termination criteria - - // callback for estimation of Jacobian matrices - void (CV_CDECL * fjac)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& A, Mat& B, void* data), - // callback for estimation of backprojection errors - void (CV_CDECL * func)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& estim, void* data), - void* data, // user-specific data passed to the callbacks - BundleAdjustCallback cb, void* user_data - ); - - virtual ~LevMarqSparse(); - - virtual void run( int npoints, // number of points - int ncameras, // number of cameras - int nPointParams, // number of params per one point (3 in case of 3D points) - int nCameraParams, // number of parameters per one camera - int nErrParams, // number of parameters in measurement vector - // for 1 point at one camera (2 in case of 2D projections) - Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras - // 1 - point is visible for the camera, 0 - invisible - Mat& P0, // starting vector of parameters, first cameras then points - Mat& X, // measurements, in order of visibility. non visible cases are skipped - TermCriteria criteria, // termination criteria - - // callback for estimation of Jacobian matrices - void (CV_CDECL * fjac)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& A, Mat& B, void* data), - // callback for estimation of backprojection errors - void (CV_CDECL * func)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& estim, void* data), - void* data // user-specific data passed to the callbacks - ); - - virtual void clear(); - - // useful function to do simple bundle adjustment tasks - static void bundleAdjust(vector& points, // positions of points in global coordinate system (input and output) - const vector >& imagePoints, // projections of 3d points for every camera - const vector >& visibility, // visibility of 3d points for every camera - vector& cameraMatrix, // intrinsic matrices of all cameras (input and output) - vector& R, // rotation matrices of all cameras (input and output) - vector& T, // translation vector of all cameras (input and output) - vector& distCoeffs, // distortion coefficients of all cameras (input and output) - const TermCriteria& criteria= - TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON), - BundleAdjustCallback cb = 0, void* user_data = 0); - - public: - virtual void optimize(CvMat &_vis); //main function that runs minimization - - //iteratively asks for measurement for visible camera-point pairs - void ask_for_proj(CvMat &_vis,bool once=false); - //iteratively asks for Jacobians for every camera_point pair - void ask_for_projac(CvMat &_vis); - - CvMat* err; //error X-hX - double prevErrNorm, errNorm; - double lambda; - CvTermCriteria criteria; - int iters; - - CvMat** U; //size of array is equal to number of cameras - CvMat** V; //size of array is equal to number of points - CvMat** inv_V_star; //inverse of V* - - CvMat** A; - CvMat** B; - CvMat** W; - - CvMat* X; //measurement - CvMat* hX; //current measurement extimation given new parameter vector - - CvMat* prevP; //current already accepted parameter. - CvMat* P; // parameters used to evaluate function with new params - // this parameters may be rejected - - CvMat* deltaP; //computed increase of parameters (result of normal system solution ) - - CvMat** ea; // sum_i AijT * e_ij , used as right part of normal equation - // length of array is j = number of cameras - CvMat** eb; // sum_j BijT * e_ij , used as right part of normal equation - // length of array is i = number of points - - CvMat** Yj; //length of array is i = num_points - - CvMat* S; //big matrix of block Sjk , each block has size num_cam_params x num_cam_params - - CvMat* JtJ_diag; //diagonal of JtJ, used to backup diagonal elements before augmentation - - CvMat* Vis_index; // matrix which element is index of measurement for point i and camera j - - int num_cams; - int num_points; - int num_err_param; - int num_cam_param; - int num_point_param; - - //target function and jacobian pointers, which needs to be initialized - void (*fjac)(int i, int j, Mat& point_params, Mat& cam_params, Mat& A, Mat& B, void* data); - void (*func)(int i, int j, Mat& point_params, Mat& cam_params, Mat& estim, void* data); - - void* data; - - BundleAdjustCallback cb; - void* user_data; - }; - - CV_EXPORTS_W int chamerMatching( Mat& img, Mat& templ, - CV_OUT vector >& results, CV_OUT vector& cost, - double templScale=1, int maxMatches = 20, - double minMatchDistance = 1.0, int padX = 3, - int padY = 3, int scales = 5, double minScale = 0.6, double maxScale = 1.6, - double orientationWeight = 0.5, double truncate = 20); - - - class CV_EXPORTS_W StereoVar - { - public: - // Flags - enum {USE_INITIAL_DISPARITY = 1, USE_EQUALIZE_HIST = 2, USE_SMART_ID = 4, USE_AUTO_PARAMS = 8, USE_MEDIAN_FILTERING = 16}; - enum {CYCLE_O, CYCLE_V}; - enum {PENALIZATION_TICHONOV, PENALIZATION_CHARBONNIER, PENALIZATION_PERONA_MALIK}; - - //! the default constructor - CV_WRAP StereoVar(); - - //! the full constructor taking all the necessary algorithm parameters - CV_WRAP StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags); - - //! the destructor - virtual ~StereoVar(); - - //! the stereo correspondence operator that computes disparity map for the specified rectified stereo pair - CV_WRAP_AS(compute) virtual void operator()(const Mat& left, const Mat& right, CV_OUT Mat& disp); - - CV_PROP_RW int levels; - CV_PROP_RW double pyrScale; - CV_PROP_RW int nIt; - CV_PROP_RW int minDisp; - CV_PROP_RW int maxDisp; - CV_PROP_RW int poly_n; - CV_PROP_RW double poly_sigma; - CV_PROP_RW float fi; - CV_PROP_RW float lambda; - CV_PROP_RW int penalization; - CV_PROP_RW int cycle; - CV_PROP_RW int flags; - - private: - void autoParams(); - void FMG(Mat &I1, Mat &I2, Mat &I2x, Mat &u, int level); - void VCycle_MyFAS(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level); - void VariationalSolver(Mat &I1_h, Mat &I2_h, Mat &I2x_h, Mat &u_h, int level); - }; - - CV_EXPORTS void polyfit(const Mat& srcx, const Mat& srcy, Mat& dst, int order); - - class CV_EXPORTS Directory - { - public: - static std::vector GetListFiles ( const std::string& path, const std::string & exten = "*", bool addPath = true ); - static std::vector GetListFilesR ( const std::string& path, const std::string & exten = "*", bool addPath = true ); - static std::vector GetListFolders( const std::string& path, const std::string & exten = "*", bool addPath = true ); - }; - - /* - * Generation of a set of different colors by the following way: - * 1) generate more then need colors (in "factor" times) in RGB, - * 2) convert them to Lab, - * 3) choose the needed count of colors from the set that are more different from - * each other, - * 4) convert the colors back to RGB - */ - CV_EXPORTS void generateColors( std::vector& colors, size_t count, size_t factor=100 ); - - - /* - * Estimate the rigid body motion from frame0 to frame1. The method is based on the paper - * "Real-Time Visual Odometry from Dense RGB-D Images", F. Steinbucker, J. Strum, D. Cremers, ICCV, 2011. - */ - enum { ROTATION = 1, - TRANSLATION = 2, - RIGID_BODY_MOTION = 4 - }; - CV_EXPORTS bool RGBDOdometry( Mat& Rt, const Mat& initRt, - const Mat& image0, const Mat& depth0, const Mat& mask0, - const Mat& image1, const Mat& depth1, const Mat& mask1, - const Mat& cameraMatrix, float minDepth=0.f, float maxDepth=4.f, float maxDepthDiff=0.07f, - const std::vector& iterCounts=std::vector(), - const std::vector& minGradientMagnitudes=std::vector(), - int transformType=RIGID_BODY_MOTION ); - - /** - *Bilinear interpolation technique. - * - *The value of a desired cortical pixel is obtained through a bilinear interpolation of the values - *of the four nearest neighbouring Cartesian pixels to the center of the RF. - *The same principle is applied to the inverse transformation. - * - *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5 - */ - class CV_EXPORTS LogPolar_Interp - { - public: - - LogPolar_Interp() {} - - /** - *Constructor - *\param w the width of the input image - *\param h the height of the input image - *\param center the transformation center: where the output precision is maximal - *\param R the number of rings of the cortical image (default value 70 pixel) - *\param ro0 the radius of the blind spot (default value 3 pixel) - *\param full \a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle. - * \a 0 means that the retinal image is computed within the inscribed circle. - *\param S the number of sectors of the cortical image (default value 70 pixel). - * Its value is usually internally computed to obtain a pixel aspect ratio equals to 1. - *\param sp \a 1 (default value) means that the parameter \a S is internally computed. - * \a 0 means that the parameter \a S is provided by the user. - */ - LogPolar_Interp(int w, int h, Point2i center, int R=70, double ro0=3.0, - int interp=INTER_LINEAR, int full=1, int S=117, int sp=1); - /** - *Transformation from Cartesian image to cortical (log-polar) image. - *\param source the Cartesian image - *\return the transformed image (cortical image) - */ - const Mat to_cortical(const Mat &source); - /** - *Transformation from cortical image to retinal (inverse log-polar) image. - *\param source the cortical image - *\return the transformed image (retinal image) - */ - const Mat to_cartesian(const Mat &source); - /** - *Destructor - */ - ~LogPolar_Interp(); - - protected: - - Mat Rsri; - Mat Csri; - - int S, R, M, N; - int top, bottom,left,right; - double ro0, romax, a, q; - int interp; - - Mat ETAyx; - Mat CSIyx; - - void create_map(int M, int N, int R, int S, double ro0); - }; - - /** - *Overlapping circular receptive fields technique - * - *The Cartesian plane is divided in two regions: the fovea and the periphery. - *The fovea (oversampling) is handled by using the bilinear interpolation technique described above, whereas in - *the periphery we use the overlapping Gaussian circular RFs. - * - *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5 - */ - class CV_EXPORTS LogPolar_Overlapping - { - public: - LogPolar_Overlapping() {} - - /** - *Constructor - *\param w the width of the input image - *\param h the height of the input image - *\param center the transformation center: where the output precision is maximal - *\param R the number of rings of the cortical image (default value 70 pixel) - *\param ro0 the radius of the blind spot (default value 3 pixel) - *\param full \a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle. - * \a 0 means that the retinal image is computed within the inscribed circle. - *\param S the number of sectors of the cortical image (default value 70 pixel). - * Its value is usually internally computed to obtain a pixel aspect ratio equals to 1. - *\param sp \a 1 (default value) means that the parameter \a S is internally computed. - * \a 0 means that the parameter \a S is provided by the user. - */ - LogPolar_Overlapping(int w, int h, Point2i center, int R=70, - double ro0=3.0, int full=1, int S=117, int sp=1); - /** - *Transformation from Cartesian image to cortical (log-polar) image. - *\param source the Cartesian image - *\return the transformed image (cortical image) - */ - const Mat to_cortical(const Mat &source); - /** - *Transformation from cortical image to retinal (inverse log-polar) image. - *\param source the cortical image - *\return the transformed image (retinal image) - */ - const Mat to_cartesian(const Mat &source); - /** - *Destructor - */ - ~LogPolar_Overlapping(); - - protected: - - Mat Rsri; - Mat Csri; - vector Rsr; - vector Csr; - vector Wsr; - - int S, R, M, N, ind1; - int top, bottom,left,right; - double ro0, romax, a, q; - - struct kernel - { - kernel() { w = 0; } - vector weights; - int w; - }; - - Mat ETAyx; - Mat CSIyx; - vector w_ker_2D; - - void create_map(int M, int N, int R, int S, double ro0); - }; - - /** - * Adjacent receptive fields technique - * - *All the Cartesian pixels, whose coordinates in the cortical domain share the same integer part, are assigned to the same RF. - *The precision of the boundaries of the RF can be improved by breaking each pixel into subpixels and assigning each of them to the correct RF. - *This technique is implemented from: Traver, V., Pla, F.: Log-polar mapping template design: From task-level requirements - *to geometry parameters. Image Vision Comput. 26(10) (2008) 1354-1370 - * - *More details can be found in http://dx.doi.org/10.1007/978-3-642-23968-7_5 - */ - class CV_EXPORTS LogPolar_Adjacent - { - public: - LogPolar_Adjacent() {} - - /** - *Constructor - *\param w the width of the input image - *\param h the height of the input image - *\param center the transformation center: where the output precision is maximal - *\param R the number of rings of the cortical image (default value 70 pixel) - *\param ro0 the radius of the blind spot (default value 3 pixel) - *\param smin the size of the subpixel (default value 0.25 pixel) - *\param full \a 1 (default value) means that the retinal image (the inverse transform) is computed within the circumscribing circle. - * \a 0 means that the retinal image is computed within the inscribed circle. - *\param S the number of sectors of the cortical image (default value 70 pixel). - * Its value is usually internally computed to obtain a pixel aspect ratio equals to 1. - *\param sp \a 1 (default value) means that the parameter \a S is internally computed. - * \a 0 means that the parameter \a S is provided by the user. - */ - LogPolar_Adjacent(int w, int h, Point2i center, int R=70, double ro0=3.0, double smin=0.25, int full=1, int S=117, int sp=1); - /** - *Transformation from Cartesian image to cortical (log-polar) image. - *\param source the Cartesian image - *\return the transformed image (cortical image) - */ - const Mat to_cortical(const Mat &source); - /** - *Transformation from cortical image to retinal (inverse log-polar) image. - *\param source the cortical image - *\return the transformed image (retinal image) - */ - const Mat to_cartesian(const Mat &source); - /** - *Destructor - */ - ~LogPolar_Adjacent(); - - protected: - struct pixel - { - pixel() { u = v = 0; a = 0.; } - int u; - int v; - double a; - }; - int S, R, M, N; - int top, bottom,left,right; - double ro0, romax, a, q; - vector > L; - vector A; - - void subdivide_recursively(double x, double y, int i, int j, double length, double smin); - bool get_uv(double x, double y, int&u, int&v); - void create_map(int M, int N, int R, int S, double ro0, double smin); - }; - - CV_EXPORTS Mat subspaceProject(InputArray W, InputArray mean, InputArray src); - CV_EXPORTS Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src); - - class CV_EXPORTS LDA - { - public: - // Initializes a LDA with num_components (default 0) and specifies how - // samples are aligned (default dataAsRow=true). - LDA(int num_components = 0) : - _num_components(num_components) {}; - - // Initializes and performs a Discriminant Analysis with Fisher's - // Optimization Criterion on given data in src and corresponding labels - // in labels. If 0 (or less) number of components are given, they are - // automatically determined for given data in computation. - LDA(const Mat& src, vector labels, - int num_components = 0) : - _num_components(num_components) - { - this->compute(src, labels); //! compute eigenvectors and eigenvalues - } - - // Initializes and performs a Discriminant Analysis with Fisher's - // Optimization Criterion on given data in src and corresponding labels - // in labels. If 0 (or less) number of components are given, they are - // automatically determined for given data in computation. - LDA(InputArrayOfArrays src, InputArray labels, - int num_components = 0) : - _num_components(num_components) - { - this->compute(src, labels); //! compute eigenvectors and eigenvalues - } - - // Serializes this object to a given filename. - void save(const string& filename) const; - - // Deserializes this object from a given filename. - void load(const string& filename); - - // Serializes this object to a given cv::FileStorage. - void save(FileStorage& fs) const; - - // Deserializes this object from a given cv::FileStorage. - void load(const FileStorage& node); - - // Destructor. - ~LDA() {} - - //! Compute the discriminants for data in src and labels. - void compute(InputArrayOfArrays src, InputArray labels); - - // Projects samples into the LDA subspace. - Mat project(InputArray src); - - // Reconstructs projections from the LDA subspace. - Mat reconstruct(InputArray src); - - // Returns the eigenvectors of this LDA. - Mat eigenvectors() const { return _eigenvectors; }; - - // Returns the eigenvalues of this LDA. - Mat eigenvalues() const { return _eigenvalues; } - - protected: - bool _dataAsRow; - int _num_components; - Mat _eigenvectors; - Mat _eigenvalues; - - void lda(InputArrayOfArrays src, InputArray labels); - }; - - class CV_EXPORTS_W FaceRecognizer : public Algorithm - { - public: - //! virtual destructor - virtual ~FaceRecognizer() {} - - // Trains a FaceRecognizer. - CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0; - - // Updates a FaceRecognizer. - CV_WRAP void update(InputArrayOfArrays src, InputArray labels); - - // Gets a prediction from a FaceRecognizer. - virtual int predict(InputArray src) const = 0; - - // Predicts the label and confidence for a given sample. - CV_WRAP virtual void predict(InputArray src, CV_OUT int &label, CV_OUT double &confidence) const = 0; - - // Serializes this object to a given filename. - CV_WRAP virtual void save(const string& filename) const; - - // Deserializes this object from a given filename. - CV_WRAP virtual void load(const string& filename); - - // Serializes this object to a given cv::FileStorage. - virtual void save(FileStorage& fs) const = 0; - - // Deserializes this object from a given cv::FileStorage. - virtual void load(const FileStorage& fs) = 0; - - }; - - CV_EXPORTS_W Ptr createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX); - CV_EXPORTS_W Ptr createFisherFaceRecognizer(int num_components = 0, double threshold = DBL_MAX); - CV_EXPORTS_W Ptr createLBPHFaceRecognizer(int radius=1, int neighbors=8, - int grid_x=8, int grid_y=8, double threshold = DBL_MAX); - - enum - { - COLORMAP_AUTUMN = 0, - COLORMAP_BONE = 1, - COLORMAP_JET = 2, - COLORMAP_WINTER = 3, - COLORMAP_RAINBOW = 4, - COLORMAP_OCEAN = 5, - COLORMAP_SUMMER = 6, - COLORMAP_SPRING = 7, - COLORMAP_COOL = 8, - COLORMAP_HSV = 9, - COLORMAP_PINK = 10, - COLORMAP_HOT = 11 - }; - - CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap); - - CV_EXPORTS bool initModule_contrib(); -} - -#include "opencv2/contrib/retina.hpp" - -#include "opencv2/contrib/openfabmap.hpp" - -#endif - -#endif diff --git a/modules/contrib/include/opencv2/contrib/detection_based_tracker.hpp b/modules/contrib/include/opencv2/contrib/detection_based_tracker.hpp deleted file mode 100644 index 56aa1cc..0000000 --- a/modules/contrib/include/opencv2/contrib/detection_based_tracker.hpp +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once - -#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) - -#include -#include - -#include - -class DetectionBasedTracker -{ - public: - struct Parameters - { - int minObjectSize; - int maxObjectSize; - double scaleFactor; - int maxTrackLifetime; - int minNeighbors; - int minDetectionPeriod; //the minimal time between run of the big object detector (on the whole frame) in ms (1000 mean 1 sec), default=0 - - Parameters(); - }; - - DetectionBasedTracker(const std::string& cascadeFilename, const Parameters& params); - virtual ~DetectionBasedTracker(); - - virtual bool run(); - virtual void stop(); - virtual void resetTracking(); - - virtual void process(const cv::Mat& imageGray); - - bool setParameters(const Parameters& params); - const Parameters& getParameters(); - - - typedef std::pair Object; - virtual void getObjects(std::vector& result) const; - virtual void getObjects(std::vector& result) const; - - protected: - class SeparateDetectionWork; - cv::Ptr separateDetectionWork; - friend void* workcycleObjectDetectorFunction(void* p); - - - struct InnerParameters - { - int numLastPositionsToTrack; - int numStepsToWaitBeforeFirstShow; - int numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown; - int numStepsToShowWithoutDetecting; - - float coeffTrackingWindowSize; - float coeffObjectSizeToTrack; - float coeffObjectSpeedUsingInPrediction; - - InnerParameters(); - }; - Parameters parameters; - InnerParameters innerParameters; - - struct TrackedObject - { - typedef std::vector PositionsVector; - - PositionsVector lastPositions; - - int numDetectedFrames; - int numFramesNotDetected; - int id; - - TrackedObject(const cv::Rect& rect):numDetectedFrames(1), numFramesNotDetected(0) - { - lastPositions.push_back(rect); - id=getNextId(); - }; - - static int getNextId() - { - static int _id=0; - return _id++; - } - }; - - int numTrackedSteps; - std::vector trackedObjects; - - std::vector weightsPositionsSmoothing; - std::vector weightsSizesSmoothing; - - cv::CascadeClassifier cascadeForTracking; - - - void updateTrackedObjects(const std::vector& detectedObjects); - cv::Rect calcTrackedObjectPositionToShow(int i) const; - void detectInRegion(const cv::Mat& img, const cv::Rect& r, std::vector& detectedObjectsInRegions); -}; - -namespace cv -{ - using ::DetectionBasedTracker; -} //end of cv namespace - -#endif diff --git a/modules/contrib/include/opencv2/contrib/hybridtracker.hpp b/modules/contrib/include/opencv2/contrib/hybridtracker.hpp deleted file mode 100644 index 3a1f722..0000000 --- a/modules/contrib/include/opencv2/contrib/hybridtracker.hpp +++ /dev/null @@ -1,220 +0,0 @@ -//*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_HYBRIDTRACKER_H_ -#define __OPENCV_HYBRIDTRACKER_H_ - -#include "opencv2/core/core.hpp" -#include "opencv2/core/operations.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/video/tracking.hpp" -#include "opencv2/ml/ml.hpp" - -#ifdef __cplusplus - -namespace cv -{ - -// Motion model for tracking algorithm. Currently supports objects that do not move much. -// To add Kalman filter -struct CV_EXPORTS CvMotionModel -{ - enum {LOW_PASS_FILTER = 0, KALMAN_FILTER = 1, EM = 2}; - - CvMotionModel() - { - } - - float low_pass_gain; // low pass gain -}; - -// Mean Shift Tracker parameters for specifying use of HSV channel and CamShift parameters. -struct CV_EXPORTS CvMeanShiftTrackerParams -{ - enum { H = 0, HS = 1, HSV = 2 }; - CvMeanShiftTrackerParams(int tracking_type = CvMeanShiftTrackerParams::HS, - CvTermCriteria term_crit = CvTermCriteria()); - - int tracking_type; - vector h_range; - vector s_range; - vector v_range; - CvTermCriteria term_crit; -}; - -// Feature tracking parameters -struct CV_EXPORTS CvFeatureTrackerParams -{ - enum { SIFT = 0, SURF = 1, OPTICAL_FLOW = 2 }; - CvFeatureTrackerParams(int featureType = 0, int windowSize = 0) - { - feature_type = featureType; - window_size = windowSize; - } - - int feature_type; // Feature type to use - int window_size; // Window size in pixels around which to search for new window -}; - -// Hybrid Tracking parameters for specifying weights of individual trackers and motion model. -struct CV_EXPORTS CvHybridTrackerParams -{ - CvHybridTrackerParams(float ft_tracker_weight = 0.5, float ms_tracker_weight = 0.5, - CvFeatureTrackerParams ft_params = CvFeatureTrackerParams(), - CvMeanShiftTrackerParams ms_params = CvMeanShiftTrackerParams(), - CvMotionModel model = CvMotionModel()); - - float ft_tracker_weight; - float ms_tracker_weight; - CvFeatureTrackerParams ft_params; - CvMeanShiftTrackerParams ms_params; - int motion_model; - float low_pass_gain; -}; - -// Performs Camshift using parameters from MeanShiftTrackerParams -class CV_EXPORTS CvMeanShiftTracker -{ -private: - Mat hsv, hue; - Mat backproj; - Mat mask, maskroi; - MatND hist; - Rect prev_trackwindow; - RotatedRect prev_trackbox; - Point2f prev_center; - -public: - CvMeanShiftTrackerParams params; - - CvMeanShiftTracker(); - explicit CvMeanShiftTracker(CvMeanShiftTrackerParams _params); - ~CvMeanShiftTracker(); - void newTrackingWindow(Mat image, Rect selection); - RotatedRect updateTrackingWindow(Mat image); - Mat getHistogramProjection(int type); - void setTrackingWindow(Rect _window); - Rect getTrackingWindow(); - RotatedRect getTrackingEllipse(); - Point2f getTrackingCenter(); -}; - -// Performs SIFT/SURF feature tracking using parameters from FeatureTrackerParams -class CV_EXPORTS CvFeatureTracker -{ -private: - Ptr dd; - Ptr matcher; - vector matches; - - Mat prev_image; - Mat prev_image_bw; - Rect prev_trackwindow; - Point2d prev_center; - - int ittr; - vector features[2]; - -public: - Mat disp_matches; - CvFeatureTrackerParams params; - - CvFeatureTracker(); - explicit CvFeatureTracker(CvFeatureTrackerParams params); - ~CvFeatureTracker(); - void newTrackingWindow(Mat image, Rect selection); - Rect updateTrackingWindow(Mat image); - Rect updateTrackingWindowWithSIFT(Mat image); - Rect updateTrackingWindowWithFlow(Mat image); - void setTrackingWindow(Rect _window); - Rect getTrackingWindow(); - Point2f getTrackingCenter(); -}; - -// Performs Hybrid Tracking and combines individual trackers using EM or filters -class CV_EXPORTS CvHybridTracker -{ -private: - CvMeanShiftTracker* mstracker; - CvFeatureTracker* fttracker; - - CvMat* samples; - CvMat* labels; - - Rect prev_window; - Point2f prev_center; - Mat prev_proj; - RotatedRect trackbox; - - int ittr; - Point2f curr_center; - - inline float getL2Norm(Point2f p1, Point2f p2); - Mat getDistanceProjection(Mat image, Point2f center); - Mat getGaussianProjection(Mat image, int ksize, double sigma, Point2f center); - void updateTrackerWithEM(Mat image); - void updateTrackerWithLowPassFilter(Mat image); - -public: - CvHybridTrackerParams params; - CvHybridTracker(); - explicit CvHybridTracker(CvHybridTrackerParams params); - ~CvHybridTracker(); - - void newTracker(Mat image, Rect selection); - void updateTracker(Mat image); - Rect getTrackingWindow(); -}; - -typedef CvMotionModel MotionModel; -typedef CvMeanShiftTrackerParams MeanShiftTrackerParams; -typedef CvFeatureTrackerParams FeatureTrackerParams; -typedef CvHybridTrackerParams HybridTrackerParams; -typedef CvMeanShiftTracker MeanShiftTracker; -typedef CvFeatureTracker FeatureTracker; -typedef CvHybridTracker HybridTracker; -} - -#endif - -#endif diff --git a/modules/contrib/include/opencv2/contrib/openfabmap.hpp b/modules/contrib/include/opencv2/contrib/openfabmap.hpp deleted file mode 100644 index 6b2834e..0000000 --- a/modules/contrib/include/opencv2/contrib/openfabmap.hpp +++ /dev/null @@ -1,405 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// This file originates from the openFABMAP project: -// [http://code.google.com/p/openfabmap/] -// -// For published work which uses all or part of OpenFABMAP, please cite: -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6224843] -// -// Original Algorithm by Mark Cummins and Paul Newman: -// [http://ijr.sagepub.com/content/27/6/647.short] -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942] -// [http://ijr.sagepub.com/content/30/9/1100.abstract] -// -// License Agreement -// -// Copyright (C) 2012 Arren Glover [aj.glover@qut.edu.au] and -// Will Maddern [w.maddern@qut.edu.au], all rights reserved. -// -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OPENFABMAP_H_ -#define __OPENCV_OPENFABMAP_H_ - -#include "opencv2/core/core.hpp" -#include "opencv2/features2d/features2d.hpp" - -#include -#include -#include -#include -#include - -namespace cv { - -namespace of2 { - -using std::list; -using std::map; -using std::multiset; - -/* - Return data format of a FABMAP compare call -*/ -struct CV_EXPORTS IMatch { - - IMatch() : - queryIdx(-1), imgIdx(-1), likelihood(-DBL_MAX), match(-DBL_MAX) { - } - IMatch(int _queryIdx, int _imgIdx, double _likelihood, double _match) : - queryIdx(_queryIdx), imgIdx(_imgIdx), likelihood(_likelihood), match( - _match) { - } - - int queryIdx; //query index - int imgIdx; //test index - - double likelihood; //raw loglikelihood - double match; //normalised probability - - bool operator<(const IMatch& m) const { - return match < m.match; - } - -}; - -/* - Base FabMap class. Each FabMap method inherits from this class. -*/ -class CV_EXPORTS FabMap { -public: - - //FabMap options - enum { - MEAN_FIELD = 1, - SAMPLED = 2, - NAIVE_BAYES = 4, - CHOW_LIU = 8, - MOTION_MODEL = 16 - }; - - FabMap(const Mat& clTree, double PzGe, double PzGNe, int flags, - int numSamples = 0); - virtual ~FabMap(); - - //methods to add training data for sampling method - virtual void addTraining(const Mat& queryImgDescriptor); - virtual void addTraining(const vector& queryImgDescriptors); - - //methods to add to the test data - virtual void add(const Mat& queryImgDescriptor); - virtual void add(const vector& queryImgDescriptors); - - //accessors - const vector& getTrainingImgDescriptors() const; - const vector& getTestImgDescriptors() const; - - //Main FabMap image comparison - void compare(const Mat& queryImgDescriptor, - vector& matches, bool addQuery = false, - const Mat& mask = Mat()); - void compare(const Mat& queryImgDescriptor, - const Mat& testImgDescriptors, vector& matches, - const Mat& mask = Mat()); - void compare(const Mat& queryImgDescriptor, - const vector& testImgDescriptors, - vector& matches, const Mat& mask = Mat()); - void compare(const vector& queryImgDescriptors, vector< - IMatch>& matches, bool addQuery = false, const Mat& mask = - Mat()); - void compare(const vector& queryImgDescriptors, - const vector& testImgDescriptors, - vector& matches, const Mat& mask = Mat()); - -protected: - - void compareImgDescriptor(const Mat& queryImgDescriptor, - int queryIndex, const vector& testImgDescriptors, - vector& matches); - - void addImgDescriptor(const Mat& queryImgDescriptor); - - //the getLikelihoods method is overwritten for each different FabMap - //method. - virtual void getLikelihoods(const Mat& queryImgDescriptor, - const vector& testImgDescriptors, - vector& matches); - virtual double getNewPlaceLikelihood(const Mat& queryImgDescriptor); - - //turn likelihoods into probabilities (also add in motion model if used) - void normaliseDistribution(vector& matches); - - //Chow-Liu Tree - int pq(int q); - double Pzq(int q, bool zq); - double PzqGzpq(int q, bool zq, bool zpq); - - //FAB-MAP Core - double PzqGeq(bool zq, bool eq); - double PeqGL(int q, bool Lzq, bool eq); - double PzqGL(int q, bool zq, bool zpq, bool Lzq); - double PzqGzpqL(int q, bool zq, bool zpq, bool Lzq); - double (FabMap::*PzGL)(int q, bool zq, bool zpq, bool Lzq); - - //data - Mat clTree; - vector trainingImgDescriptors; - vector testImgDescriptors; - vector priorMatches; - - //parameters - double PzGe; - double PzGNe; - double Pnew; - - double mBias; - double sFactor; - - int flags; - int numSamples; - -}; - -/* - The original FAB-MAP algorithm, developed based on: - http://ijr.sagepub.com/content/27/6/647.short -*/ -class CV_EXPORTS FabMap1: public FabMap { -public: - FabMap1(const Mat& clTree, double PzGe, double PzGNe, int flags, - int numSamples = 0); - virtual ~FabMap1(); -protected: - - //FabMap1 implementation of likelihood comparison - void getLikelihoods(const Mat& queryImgDescriptor, const vector< - Mat>& testImgDescriptors, vector& matches); -}; - -/* - A computationally faster version of the original FAB-MAP algorithm. A look- - up-table is used to precompute many of the reoccuring calculations -*/ -class CV_EXPORTS FabMapLUT: public FabMap { -public: - FabMapLUT(const Mat& clTree, double PzGe, double PzGNe, - int flags, int numSamples = 0, int precision = 6); - virtual ~FabMapLUT(); -protected: - - //FabMap look-up-table implementation of the likelihood comparison - void getLikelihoods(const Mat& queryImgDescriptor, const vector< - Mat>& testImgDescriptors, vector& matches); - - //precomputed data - int (*table)[8]; - - //data precision - int precision; -}; - -/* - The Accelerated FAB-MAP algorithm, developed based on: - http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942 -*/ -class CV_EXPORTS FabMapFBO: public FabMap { -public: - FabMapFBO(const Mat& clTree, double PzGe, double PzGNe, int flags, - int numSamples = 0, double rejectionThreshold = 1e-8, double PsGd = - 1e-8, int bisectionStart = 512, int bisectionIts = 9); - virtual ~FabMapFBO(); - -protected: - - //FabMap Fast Bail-out implementation of the likelihood comparison - void getLikelihoods(const Mat& queryImgDescriptor, const vector< - Mat>& testImgDescriptors, vector& matches); - - //stucture used to determine word comparison order - struct WordStats { - WordStats() : - q(0), info(0), V(0), M(0) { - } - - WordStats(int _q, double _info) : - q(_q), info(_info), V(0), M(0) { - } - - int q; - double info; - mutable double V; - mutable double M; - - bool operator<(const WordStats& w) const { - return info < w.info; - } - - }; - - //private fast bail-out necessary functions - void setWordStatistics(const Mat& queryImgDescriptor, multiset& wordData); - double limitbisection(double v, double m); - double bennettInequality(double v, double m, double delta); - static bool compInfo(const WordStats& first, const WordStats& second); - - //parameters - double PsGd; - double rejectionThreshold; - int bisectionStart; - int bisectionIts; -}; - -/* - The FAB-MAP2.0 algorithm, developed based on: - http://ijr.sagepub.com/content/30/9/1100.abstract -*/ -class CV_EXPORTS FabMap2: public FabMap { -public: - - FabMap2(const Mat& clTree, double PzGe, double PzGNe, int flags); - virtual ~FabMap2(); - - //FabMap2 builds the inverted index and requires an additional training/test - //add function - void addTraining(const Mat& queryImgDescriptors) { - FabMap::addTraining(queryImgDescriptors); - } - void addTraining(const vector& queryImgDescriptors); - - void add(const Mat& queryImgDescriptors) { - FabMap::add(queryImgDescriptors); - } - void add(const vector& queryImgDescriptors); - -protected: - - //FabMap2 implementation of the likelihood comparison - void getLikelihoods(const Mat& queryImgDescriptor, const vector< - Mat>& testImgDescriptors, vector& matches); - double getNewPlaceLikelihood(const Mat& queryImgDescriptor); - - //the likelihood function using the inverted index - void getIndexLikelihoods(const Mat& queryImgDescriptor, vector< - double>& defaults, map >& invertedMap, - vector& matches); - void addToIndex(const Mat& queryImgDescriptor, - vector& defaults, - map >& invertedMap); - - //data - vector d1, d2, d3, d4; - vector > children; - - // TODO: inverted map a vector? - - vector trainingDefaults; - map > trainingInvertedMap; - - vector testDefaults; - map > testInvertedMap; - -}; -/* - A Chow-Liu tree is required by FAB-MAP. The Chow-Liu tree provides an - estimate of the full distribution of visual words using a minimum spanning - tree. The tree is generated through training data. -*/ -class CV_EXPORTS ChowLiuTree { -public: - ChowLiuTree(); - virtual ~ChowLiuTree(); - - //add data to the chow-liu tree before calling make - void add(const Mat& imgDescriptor); - void add(const vector& imgDescriptors); - - const vector& getImgDescriptors() const; - - Mat make(double infoThreshold = 0.0); - -private: - vector imgDescriptors; - Mat mergedImgDescriptors; - - typedef struct info { - float score; - short word1; - short word2; - } info; - - //probabilities extracted from mergedImgDescriptors - double P(int a, bool za); - double JP(int a, bool za, int b, bool zb); //a & b - double CP(int a, bool za, int b, bool zb); // a | b - - //calculating mutual information of all edges - void createBaseEdges(list& edges, double infoThreshold); - double calcMutInfo(int word1, int word2); - static bool sortInfoScores(const info& first, const info& second); - - //selecting minimum spanning egdges with maximum information - bool reduceEdgesToMinSpan(list& edges); - - //building the tree sctructure - Mat buildTree(int root_word, list &edges); - void recAddToTree(Mat &cltree, int q, int pq, - list &remaining_edges); - vector extractChildren(list &remaining_edges, int q); - -}; - -/* - A custom vocabulary training method based on: - http://www.springerlink.com/content/d1h6j8x552532003/ -*/ -class CV_EXPORTS BOWMSCTrainer: public BOWTrainer { -public: - BOWMSCTrainer(double clusterSize = 0.4); - virtual ~BOWMSCTrainer(); - - // Returns trained vocabulary (i.e. cluster centers). - virtual Mat cluster() const; - virtual Mat cluster(const Mat& descriptors) const; - -protected: - - double clusterSize; - -}; - -} - -} - -#endif /* OPENFABMAP_H_ */ diff --git a/modules/contrib/include/opencv2/contrib/retina.hpp b/modules/contrib/include/opencv2/contrib/retina.hpp deleted file mode 100644 index 3d7c847..0000000 --- a/modules/contrib/include/opencv2/contrib/retina.hpp +++ /dev/null @@ -1,355 +0,0 @@ -/*#****************************************************************************** - ** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - ** - ** By downloading, copying, installing or using the software you agree to this license. - ** If you do not agree to this license, do not download, install, - ** copy or use the software. - ** - ** - ** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. - ** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. - ** - ** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) - ** - ** Creation - enhancement process 2007-2011 - ** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France - ** - ** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). - ** Refer to the following research paper for more information: - ** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 - ** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: - ** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. - ** - ** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : - ** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: - ** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 - ** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. - ** ====> more informations in the above cited Jeanny Heraults's book. - ** - ** License Agreement - ** For Open Source Computer Vision Library - ** - ** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - ** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. - ** - ** For Human Visual System tools (hvstools) - ** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. - ** - ** Third party copyrights are property of their respective owners. - ** - ** Redistribution and use in source and binary forms, with or without modification, - ** are permitted provided that the following conditions are met: - ** - ** * Redistributions of source code must retain the above copyright notice, - ** this list of conditions and the following disclaimer. - ** - ** * Redistributions in binary form must reproduce the above copyright notice, - ** this list of conditions and the following disclaimer in the documentation - ** and/or other materials provided with the distribution. - ** - ** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - ** indirect, incidental, special, exemplary, or consequential damages - ** (including, but not limited to, procurement of substitute goods or services; - ** loss of use, data, or profits; or business interruption) however caused - ** and on any theory of liability, whether in contract, strict liability, - ** or tort (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 __OPENCV_CONTRIB_RETINA_HPP__ -#define __OPENCV_CONTRIB_RETINA_HPP__ - -/* - * Retina.hpp - * - * Created on: Jul 19, 2011 - * Author: Alexandre Benoit - */ - -#include "opencv2/core/core.hpp" // for all OpenCV core functionalities access, including cv::Exception support -#include - -namespace cv -{ - -enum RETINA_COLORSAMPLINGMETHOD -{ - RETINA_COLOR_RANDOM, //!< each pixel position is either R, G or B in a random choice - RETINA_COLOR_DIAGONAL,//!< color sampling is RGBRGBRGB..., line 2 BRGBRGBRG..., line 3, GBRGBRGBR... - RETINA_COLOR_BAYER//!< standard bayer sampling -}; - -class RetinaFilter; - -/** - * @class Retina a wrapper class which allows the Gipsa/Listic Labs model to be used. - * This retina model allows spatio-temporal image processing (applied on still images, video sequences). - * As a summary, these are the retina model properties: - * => It applies a spectral whithening (mid-frequency details enhancement) - * => high frequency spatio-temporal noise reduction - * => low frequency luminance to be reduced (luminance range compression) - * => local logarithmic luminance compression allows details to be enhanced in low light conditions - * - * USE : this model can be used basically for spatio-temporal video effects but also for : - * _using the getParvo method output matrix : texture analysiswith enhanced signal to noise ratio and enhanced details robust against input images luminance ranges - * _using the getMagno method output matrix : motion analysis also with the previously cited properties - * - * for more information, reer to the following papers : - * Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 - * Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. - * - * The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : - * _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: - * ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 - * _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. - * ====> more informations in the above cited Jeanny Heraults's book. - */ -class CV_EXPORTS Retina { - -public: - - // parameters structure for better clarity, check explenations on the comments of methods : setupOPLandIPLParvoChannel and setupIPLMagnoChannel - struct RetinaParameters{ - struct OPLandIplParvoParameters{ // Outer Plexiform Layer (OPL) and Inner Plexiform Layer Parvocellular (IplParvo) parameters - OPLandIplParvoParameters():colorMode(true), - normaliseOutput(true), - photoreceptorsLocalAdaptationSensitivity(0.7f), - photoreceptorsTemporalConstant(0.5f), - photoreceptorsSpatialConstant(0.53f), - horizontalCellsGain(0.0f), - hcellsTemporalConstant(1.f), - hcellsSpatialConstant(7.f), - ganglionCellsSensitivity(0.7f){};// default setup - bool colorMode, normaliseOutput; - float photoreceptorsLocalAdaptationSensitivity, photoreceptorsTemporalConstant, photoreceptorsSpatialConstant, horizontalCellsGain, hcellsTemporalConstant, hcellsSpatialConstant, ganglionCellsSensitivity; - }; - struct IplMagnoParameters{ // Inner Plexiform Layer Magnocellular channel (IplMagno) - IplMagnoParameters(): - normaliseOutput(true), - parasolCells_beta(0.f), - parasolCells_tau(0.f), - parasolCells_k(7.f), - amacrinCellsTemporalCutFrequency(1.2f), - V0CompressionParameter(0.95f), - localAdaptintegration_tau(0.f), - localAdaptintegration_k(7.f){};// default setup - bool normaliseOutput; - float parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, V0CompressionParameter, localAdaptintegration_tau, localAdaptintegration_k; - }; - struct OPLandIplParvoParameters OPLandIplParvo; - struct IplMagnoParameters IplMagno; - }; - - /** - * Main constructor with most commun use setup : create an instance of color ready retina model - * @param inputSize : the input frame size - */ - Retina(Size inputSize); - - /** - * Complete Retina filter constructor which allows all basic structural parameters definition - * @param inputSize : the input frame size - * @param colorMode : the chosen processing mode : with or without color processing - * @param colorSamplingMethod: specifies which kind of color sampling will be used - * @param useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used - * @param reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak - * @param samplingStrenght: only usefull if param useRetinaLogSampling=true, specifies the strenght of the log scale that is applied - */ - Retina(Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0); - - virtual ~Retina(); - - /** - * retreive retina input buffer size - */ - Size inputSize(); - - /** - * retreive retina output buffer size - */ - Size outputSize(); - - /** - * try to open an XML retina parameters file to adjust current retina instance setup - * => if the xml file does not exist, then default setup is applied - * => warning, Exceptions are thrown if read XML file is not valid - * @param retinaParameterFile : the parameters filename - * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error - */ - void setup(std::string retinaParameterFile="", const bool applyDefaultSetupOnFailure=true); - - - /** - * try to open an XML retina parameters file to adjust current retina instance setup - * => if the xml file does not exist, then default setup is applied - * => warning, Exceptions are thrown if read XML file is not valid - * @param fs : the open Filestorage which contains retina parameters - * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error - */ - void setup(cv::FileStorage &fs, const bool applyDefaultSetupOnFailure=true); - - /** - * try to open an XML retina parameters file to adjust current retina instance setup - * => if the xml file does not exist, then default setup is applied - * => warning, Exceptions are thrown if read XML file is not valid - * @param newParameters : a parameters structures updated with the new target configuration - * @param applyDefaultSetupOnFailure : set to true if an error must be thrown on error - */ - void setup(RetinaParameters newParameters); - - /** - * @return the current parameters setup - */ - Retina::RetinaParameters getParameters(); - - /** - * parameters setup display method - * @return a string which contains formatted parameters information - */ - const std::string printSetup(); - - /** - * write xml/yml formated parameters information - * @rparam fs : the filename of the xml file that will be open and writen with formatted parameters information - */ - virtual void write( std::string fs ) const; - - - /** - * write xml/yml formated parameters information - * @param fs : a cv::Filestorage object ready to be filled - */ - virtual void write( FileStorage& fs ) const; - - /** - * setup the OPL and IPL parvo channels (see biologocal model) - * OPL is referred as Outer Plexiform Layer of the retina, it allows the spatio-temporal filtering which withens the spectrum and reduces spatio-temporal noise while attenuating global luminance (low frequency energy) - * IPL parvo is the OPL next processing stage, it refers to Inner Plexiform layer of the retina, it allows high contours sensitivity in foveal vision. - * for more informations, please have a look at the paper Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 - * @param colorMode : specifies if (true) color is processed of not (false) to then processing gray level image - * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false) - * @param photoreceptorsLocalAdaptationSensitivity: the photoreceptors sensitivity renage is 0-1 (more log compression effect when value increases) - * @param photoreceptorsTemporalConstant: the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame - * @param photoreceptorsSpatialConstant: the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel - * @param horizontalCellsGain: gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0 - * @param HcellsTemporalConstant: the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors - * @param HcellsSpatialConstant: the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel, this value is also used for local contrast computing when computing the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular channel model) - * @param ganglionCellsSensitivity: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 230 - */ - void setupOPLandIPLParvoChannel(const bool colorMode=true, const bool normaliseOutput = true, const float photoreceptorsLocalAdaptationSensitivity=0.7, const float photoreceptorsTemporalConstant=0.5, const float photoreceptorsSpatialConstant=0.53, const float horizontalCellsGain=0, const float HcellsTemporalConstant=1, const float HcellsSpatialConstant=7, const float ganglionCellsSensitivity=0.7); - - /** - * set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel - * this channel processes signals outpint from OPL processing stage in peripheral vision, it allows motion information enhancement. It is decorrelated from the details channel. See reference paper for more details. - * @param normaliseOutput : specifies if (true) output is rescaled between 0 and 255 of not (false) - * @param parasolCells_beta: the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0 - * @param parasolCells_tau: the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response) - * @param parasolCells_k: the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5 - * @param amacrinCellsTemporalCutFrequency: the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5 - * @param V0CompressionParameter: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 200 - * @param localAdaptintegration_tau: specifies the temporal constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - * @param localAdaptintegration_k: specifies the spatial constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - */ - void setupIPLMagnoChannel(const bool normaliseOutput = true, const float parasolCells_beta=0, const float parasolCells_tau=0, const float parasolCells_k=7, const float amacrinCellsTemporalCutFrequency=1.2, const float V0CompressionParameter=0.95, const float localAdaptintegration_tau=0, const float localAdaptintegration_k=7); - - /** - * method which allows retina to be applied on an input image, after run, encapsulated retina module is ready to deliver its outputs using dedicated acccessors, see getParvo and getMagno methods - * @param inputImage : the input cv::Mat image to be processed, can be gray level or BGR coded in any format (from 8bit to 16bits) - */ - void run(const Mat &inputImage); - - /** - * accessor of the details channel of the retina (models foveal vision) - * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV - */ - void getParvo(Mat &retinaOutput_parvo); - - /** - * accessor of the details channel of the retina (models foveal vision) - * @param retinaOutput_parvo : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling - */ - void getParvo(std::valarray &retinaOutput_parvo); - - /** - * accessor of the motion channel of the retina (models peripheral vision) - * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is rescaled for standard 8bits image processing use in OpenCV - */ - void getMagno(Mat &retinaOutput_magno); - - /** - * accessor of the motion channel of the retina (models peripheral vision) - * @param retinaOutput_magno : the output buffer (reallocated if necessary), this output is the original retina filter model output, without any quantification or rescaling - */ - void getMagno(std::valarray &retinaOutput_magno); - - // original API level data accessors : get buffers addresses... - const std::valarray & getMagno() const; - const std::valarray & getParvo() const; - - /** - * activate color saturation as the final step of the color demultiplexing process - * -> this saturation is a sigmoide function applied to each channel of the demultiplexed image. - * @param saturateColors: boolean that activates color saturation (if true) or desactivate (if false) - * @param colorSaturationValue: the saturation factor - */ - void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0); - - /** - * clear all retina buffers (equivalent to opening the eyes after a long period of eye close ;o) - */ - void clearBuffers(); - - /** - * Activate/desactivate the Magnocellular pathway processing (motion information extraction), by default, it is activated - * @param activate: true if Magnocellular output should be activated, false if not - */ - void activateMovingContoursProcessing(const bool activate); - - /** - * Activate/desactivate the Parvocellular pathway processing (contours information extraction), by default, it is activated - * @param activate: true if Parvocellular (contours information extraction) output should be activated, false if not - */ - void activateContoursProcessing(const bool activate); - -protected: - // Parameteres setup members - RetinaParameters _retinaParameters; // structure of parameters - - // Retina model related modules - std::valarray _inputBuffer; //!< buffer used to convert input cv::Mat to internal retina buffers format (valarrays) - - // pointer to retina model - RetinaFilter* _retinaFilter; //!< the pointer to the retina module, allocated with instance construction - - /** - * exports a valarray buffer outing from HVStools objects to a cv::Mat in CV_8UC1 (gray level picture) or CV_8UC3 (color) format - * @param grayMatrixToConvert the valarray to export to OpenCV - * @param nbRows : the number of rows of the valarray flatten matrix - * @param nbColumns : the number of rows of the valarray flatten matrix - * @param colorMode : a flag which mentions if matrix is color (true) or graylevel (false) - * @param outBuffer : the output matrix which is reallocated to satisfy Retina output buffer dimensions - */ - void _convertValarrayBuffer2cvMat(const std::valarray &grayMatrixToConvert, const unsigned int nbRows, const unsigned int nbColumns, const bool colorMode, Mat &outBuffer); - - /** - * - * @param inputMatToConvert : the OpenCV cv::Mat that has to be converted to gray or RGB valarray buffer that will be processed by the retina model - * @param outputValarrayMatrix : the output valarray - * @return the input image color mode (color=true, gray levels=false) - */ - bool _convertCvMat2ValarrayBuffer(const cv::Mat inputMatToConvert, std::valarray &outputValarrayMatrix); - - //! private method called by constructors, gathers their parameters and use them in a unified way - void _init(const Size inputSize, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0); - - -}; - -} -#endif /* __OPENCV_CONTRIB_RETINA_HPP__ */ diff --git a/modules/contrib/src/adaptiveskindetector.cpp b/modules/contrib/src/adaptiveskindetector.cpp deleted file mode 100644 index 22f729d..0000000 --- a/modules/contrib/src/adaptiveskindetector.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, copy or use the software. -// -// Copyright (C) 2009, Farhad Dadgostar -// Intel Corporation and third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#define ASD_INTENSITY_SET_PIXEL(pointer, qq) {(*pointer) = (unsigned char)qq;} - -#define ASD_IS_IN_MOTION(pointer, v, threshold) ((abs((*(pointer)) - (v)) > (threshold)) ? true : false) - -void CvAdaptiveSkinDetector::initData(IplImage *src, int widthDivider, int heightDivider) -{ - CvSize imageSize = cvSize(src->width/widthDivider, src->height/heightDivider); - - imgHueFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgShrinked = cvCreateImage(imageSize, IPL_DEPTH_8U, src->nChannels); - imgSaturationFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgMotionFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgTemp = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgFilteredFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgGrayFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgLastGrayFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 1); - imgHSVFrame = cvCreateImage(imageSize, IPL_DEPTH_8U, 3); -} - -CvAdaptiveSkinDetector::CvAdaptiveSkinDetector(int samplingDivider, int morphingMethod) -{ - nSkinHueLowerBound = GSD_HUE_LT; - nSkinHueUpperBound = GSD_HUE_UT; - - fHistogramMergeFactor = 0.05; // empirical result - fHuePercentCovered = 0.95; // empirical result - - nMorphingMethod = morphingMethod; - nSamplingDivider = samplingDivider; - - nFrameCount = 0; - nStartCounter = 0; - - imgHueFrame = NULL; - imgMotionFrame = NULL; - imgTemp = NULL; - imgFilteredFrame = NULL; - imgShrinked = NULL; - imgGrayFrame = NULL; - imgLastGrayFrame = NULL; - imgSaturationFrame = NULL; - imgHSVFrame = NULL; -} - -CvAdaptiveSkinDetector::~CvAdaptiveSkinDetector() -{ - cvReleaseImage(&imgHueFrame); - cvReleaseImage(&imgSaturationFrame); - cvReleaseImage(&imgMotionFrame); - cvReleaseImage(&imgTemp); - cvReleaseImage(&imgFilteredFrame); - cvReleaseImage(&imgShrinked); - cvReleaseImage(&imgGrayFrame); - cvReleaseImage(&imgLastGrayFrame); - cvReleaseImage(&imgHSVFrame); -} - -void CvAdaptiveSkinDetector::process(IplImage *inputBGRImage, IplImage *outputHueMask) -{ - IplImage *src = inputBGRImage; - - int h, v, i, l; - bool isInit = false; - - nFrameCount++; - - if (imgHueFrame == NULL) - { - isInit = true; - initData(src, nSamplingDivider, nSamplingDivider); - } - - unsigned char *pShrinked, *pHueFrame, *pMotionFrame, *pLastGrayFrame, *pFilteredFrame, *pGrayFrame; - pShrinked = (unsigned char *)imgShrinked->imageData; - pHueFrame = (unsigned char *)imgHueFrame->imageData; - pMotionFrame = (unsigned char *)imgMotionFrame->imageData; - pLastGrayFrame = (unsigned char *)imgLastGrayFrame->imageData; - pFilteredFrame = (unsigned char *)imgFilteredFrame->imageData; - pGrayFrame = (unsigned char *)imgGrayFrame->imageData; - - if ((src->width != imgHueFrame->width) || (src->height != imgHueFrame->height)) - { - cvResize(src, imgShrinked); - cvCvtColor(imgShrinked, imgHSVFrame, CV_BGR2HSV); - } - else - { - cvCvtColor(src, imgHSVFrame, CV_BGR2HSV); - } - - cvSplit(imgHSVFrame, imgHueFrame, imgSaturationFrame, imgGrayFrame, 0); - - cvSetZero(imgMotionFrame); - cvSetZero(imgFilteredFrame); - - l = imgHueFrame->height * imgHueFrame->width; - - for (i = 0; i < l; i++) - { - v = (*pGrayFrame); - if ((v >= GSD_INTENSITY_LT) && (v <= GSD_INTENSITY_UT)) - { - h = (*pHueFrame); - if ((h >= GSD_HUE_LT) && (h <= GSD_HUE_UT)) - { - if ((h >= nSkinHueLowerBound) && (h <= nSkinHueUpperBound)) - ASD_INTENSITY_SET_PIXEL(pFilteredFrame, h); - - if (ASD_IS_IN_MOTION(pLastGrayFrame, v, 7)) - ASD_INTENSITY_SET_PIXEL(pMotionFrame, h); - } - } - pShrinked += 3; - pGrayFrame++; - pLastGrayFrame++; - pMotionFrame++; - pHueFrame++; - pFilteredFrame++; - } - - if (isInit) - cvCalcHist(&imgHueFrame, skinHueHistogram.fHistogram); - - cvCopy(imgGrayFrame, imgLastGrayFrame); - - cvErode(imgMotionFrame, imgTemp); // eliminate disperse pixels, which occur because of the camera noise - cvDilate(imgTemp, imgMotionFrame); - - cvCalcHist(&imgMotionFrame, histogramHueMotion.fHistogram); - - skinHueHistogram.mergeWith(&histogramHueMotion, fHistogramMergeFactor); - - skinHueHistogram.findCurveThresholds(nSkinHueLowerBound, nSkinHueUpperBound, 1 - fHuePercentCovered); - - switch (nMorphingMethod) - { - case MORPHING_METHOD_ERODE : - cvErode(imgFilteredFrame, imgTemp); - cvCopy(imgTemp, imgFilteredFrame); - break; - case MORPHING_METHOD_ERODE_ERODE : - cvErode(imgFilteredFrame, imgTemp); - cvErode(imgTemp, imgFilteredFrame); - break; - case MORPHING_METHOD_ERODE_DILATE : - cvErode(imgFilteredFrame, imgTemp); - cvDilate(imgTemp, imgFilteredFrame); - break; - } - - if (outputHueMask != NULL) - cvCopy(imgFilteredFrame, outputHueMask); -} - - -//------------------------- Histogram for Adaptive Skin Detector -------------------------// - -CvAdaptiveSkinDetector::Histogram::Histogram() -{ - int histogramSize[] = { HistogramSize }; - float range[] = { GSD_HUE_LT, GSD_HUE_UT }; - float *ranges[] = { range }; - fHistogram = cvCreateHist(1, histogramSize, CV_HIST_ARRAY, ranges, 1); - cvClearHist(fHistogram); -} - -CvAdaptiveSkinDetector::Histogram::~Histogram() -{ - cvReleaseHist(&fHistogram); -} - -int CvAdaptiveSkinDetector::Histogram::findCoverageIndex(double surfaceToCover, int defaultValue) -{ - double s = 0; - for (int i = 0; i < HistogramSize; i++) - { - s += cvGetReal1D( fHistogram->bins, i ); - if (s >= surfaceToCover) - { - return i; - } - } - return defaultValue; -} - -void CvAdaptiveSkinDetector::Histogram::findCurveThresholds(int &x1, int &x2, double percent) -{ - double sum = 0; - - for (int i = 0; i < HistogramSize; i++) - { - sum += cvGetReal1D( fHistogram->bins, i ); - } - - x1 = findCoverageIndex(sum * percent, -1); - x2 = findCoverageIndex(sum * (1-percent), -1); - - if (x1 == -1) - x1 = GSD_HUE_LT; - else - x1 += GSD_HUE_LT; - - if (x2 == -1) - x2 = GSD_HUE_UT; - else - x2 += GSD_HUE_LT; -} - -void CvAdaptiveSkinDetector::Histogram::mergeWith(CvAdaptiveSkinDetector::Histogram *source, double weight) -{ - float myweight = (float)(1-weight); - float maxVal1 = 0, maxVal2 = 0, *f1, *f2, ff1, ff2; - - cvGetMinMaxHistValue(source->fHistogram, NULL, &maxVal2); - - if (maxVal2 > 0 ) - { - cvGetMinMaxHistValue(fHistogram, NULL, &maxVal1); - if (maxVal1 <= 0) - { - for (int i = 0; i < HistogramSize; i++) - { - f1 = (float*)cvPtr1D(fHistogram->bins, i); - f2 = (float*)cvPtr1D(source->fHistogram->bins, i); - (*f1) = (*f2); - } - } - else - { - for (int i = 0; i < HistogramSize; i++) - { - f1 = (float*)cvPtr1D(fHistogram->bins, i); - f2 = (float*)cvPtr1D(source->fHistogram->bins, i); - - ff1 = ((*f1)/maxVal1)*myweight; - if (ff1 < 0) - ff1 = -ff1; - - ff2 = (float)(((*f2)/maxVal2)*weight); - if (ff2 < 0) - ff2 = -ff2; - - (*f1) = (ff1 + ff2); - - } - } - } -} diff --git a/modules/contrib/src/ba.cpp b/modules/contrib/src/ba.cpp deleted file mode 100644 index ec90cb7..0000000 --- a/modules/contrib/src/ba.cpp +++ /dev/null @@ -1,1125 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2009, PhaseSpace Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The names of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/calib3d/calib3d.hpp" -#include - -using namespace cv; - -LevMarqSparse::LevMarqSparse() { - Vis_index = X = prevP = P = deltaP = err = JtJ_diag = S = hX = NULL; - U = ea = V = inv_V_star = eb = Yj = NULL; - num_cams = 0, num_points = 0, num_err_param = 0; - num_cam_param = 0, num_point_param = 0; - A = B = W = NULL; -} - -LevMarqSparse::~LevMarqSparse() { - clear(); -} - -LevMarqSparse::LevMarqSparse(int npoints, // number of points - int ncameras, // number of cameras - int nPointParams, // number of params per one point (3 in case of 3D points) - int nCameraParams, // number of parameters per one camera - int nErrParams, // number of parameters in measurement vector - // for 1 point at one camera (2 in case of 2D projections) - Mat& visibility, // visibility matrix. rows correspond to points, columns correspond to cameras - // 1 - point is visible for the camera, 0 - invisible - Mat& P0, // starting vector of parameters, first cameras then points - Mat& X_, // measurements, in order of visibility. non visible cases are skipped - TermCriteria _criteria, // termination criteria - - // callback for estimation of Jacobian matrices - void (CV_CDECL * _fjac)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& A, Mat& B, void* data), - // callback for estimation of backprojection errors - void (CV_CDECL * _func)(int i, int j, Mat& point_params, - Mat& cam_params, Mat& estim, void* data), - void* _data, // user-specific data passed to the callbacks - BundleAdjustCallback _cb, void* _user_data - ) { - Vis_index = X = prevP = P = deltaP = err = JtJ_diag = S = hX = NULL; - U = ea = V = inv_V_star = eb = Yj = NULL; - A = B = W = NULL; - - cb = _cb; - user_data = _user_data; - - run(npoints, ncameras, nPointParams, nCameraParams, nErrParams, visibility, - P0, X_, _criteria, _fjac, _func, _data); -} - -void LevMarqSparse::clear() { - for( int i = 0; i < num_points; i++ ) { - for(int j = 0; j < num_cams; j++ ) { - //CvMat* tmp = ((CvMat**)(A->data.ptr + i * A->step))[j]; - CvMat* tmp = A[j+i*num_cams]; - if (tmp) - cvReleaseMat( &tmp ); - - //tmp = ((CvMat**)(B->data.ptr + i * B->step))[j]; - tmp = B[j+i*num_cams]; - if (tmp) - cvReleaseMat( &tmp ); - - //tmp = ((CvMat**)(W->data.ptr + j * W->step))[i]; - tmp = W[j+i*num_cams]; - if (tmp) - cvReleaseMat( &tmp ); - } - } - delete A; //cvReleaseMat(&A); - delete B;//cvReleaseMat(&B); - delete W;//cvReleaseMat(&W); - cvReleaseMat( &Vis_index); - - for( int j = 0; j < num_cams; j++ ) { - cvReleaseMat( &U[j] ); - } - delete U; - - for( int j = 0; j < num_cams; j++ ) { - cvReleaseMat( &ea[j] ); - } - delete ea; - - //allocate V and inv_V_star - for( int i = 0; i < num_points; i++ ) { - cvReleaseMat(&V[i]); - cvReleaseMat(&inv_V_star[i]); - } - delete V; - delete inv_V_star; - - for( int i = 0; i < num_points; i++ ) { - cvReleaseMat(&eb[i]); - } - delete eb; - - for( int i = 0; i < num_points; i++ ) { - cvReleaseMat(&Yj[i]); - } - delete Yj; - - cvReleaseMat(&X); - cvReleaseMat(&prevP); - cvReleaseMat(&P); - cvReleaseMat(&deltaP); - - cvReleaseMat(&err); - - cvReleaseMat(&JtJ_diag); - cvReleaseMat(&S); - cvReleaseMat(&hX); -} - -//A params correspond to Cameras -//B params correspont to Points - -//num_cameras - total number of cameras -//num_points - total number of points - -//num_par_per_camera - number of parameters per camera -//num_par_per_point - number of parameters per point - -//num_errors - number of measurements. - -void LevMarqSparse::run( int num_points_, //number of points - int num_cams_, //number of cameras - int num_point_param_, //number of params per one point (3 in case of 3D points) - int num_cam_param_, //number of parameters per one camera - int num_err_param_, //number of parameters in measurement vector for 1 point at one camera (2 in case of 2D projections) - Mat& visibility, //visibility matrix . rows correspond to points, columns correspond to cameras - // 0 - point is visible for the camera, 0 - invisible - Mat& P0, //starting vector of parameters, first cameras then points - Mat& X_init, //measurements, in order of visibility. non visible cases are skipped - TermCriteria criteria_init, - void (*fjac_)(int i, int j, Mat& point_params, Mat& cam_params, Mat& A, Mat& B, void* data), - void (*func_)(int i, int j, Mat& point_params, Mat& cam_params, Mat& estim, void* data), - void* data_ - ) { //termination criteria - //clear(); - - func = func_; //assign evaluation function - fjac = fjac_; //assign jacobian - data = data_; - - num_cams = num_cams_; - num_points = num_points_; - num_err_param = num_err_param_; - num_cam_param = num_cam_param_; - num_point_param = num_point_param_; - - //compute all sizes - int Aij_width = num_cam_param; - int Aij_height = num_err_param; - - int Bij_width = num_point_param; - int Bij_height = num_err_param; - - int U_size = Aij_width; - int V_size = Bij_width; - - int Wij_height = Aij_width; - int Wij_width = Bij_width; - - //allocate memory for all Aij, Bij, U, V, W - - //allocate num_points*num_cams matrices A - - //Allocate matrix A whose elements are nointers to Aij - //if Aij is zero (point i is not visible in camera j) then A(i,j) contains NULL - //A = cvCreateMat( num_points, num_cams, CV_32S /*pointer is stored here*/ ); - //B = cvCreateMat( num_points, num_cams, CV_32S /*pointer is stored here*/ ); - //W = cvCreateMat( num_cams, num_points, CV_32S /*pointer is stored here*/ ); - - A = new CvMat* [num_points * num_cams]; - B = new CvMat* [num_points * num_cams]; - W = new CvMat* [num_cams * num_points]; - Vis_index = cvCreateMat( num_points, num_cams, CV_32S /*integer index is stored here*/ ); - //cvSetZero( A ); - //cvSetZero( B ); - //cvSetZero( W ); - cvSet( Vis_index, cvScalar(-1) ); - - //fill matrices A and B based on visibility - CvMat _vis = visibility; - int index = 0; - for (int i = 0; i < num_points; i++ ) { - for (int j = 0; j < num_cams; j++ ) { - if (((int*)(_vis.data.ptr+ i * _vis.step))[j] ) { - ((int*)(Vis_index->data.ptr + i * Vis_index->step))[j] = index; - index += num_err_param; - - //create matrices Aij, Bij - CvMat* tmp = cvCreateMat(Aij_height, Aij_width, CV_64F ); - //((CvMat**)(A->data.ptr + i * A->step))[j] = tmp; - cvSet(tmp,cvScalar(1.0,1.0,1.0,1.0)); - A[j+i*num_cams] = tmp; - - tmp = cvCreateMat( Bij_height, Bij_width, CV_64F ); - //((CvMat**)(B->data.ptr + i * B->step))[j] = tmp; - cvSet(tmp,cvScalar(1.0,1.0,1.0,1.0)); - B[j+i*num_cams] = tmp; - - tmp = cvCreateMat( Wij_height, Wij_width, CV_64F ); - //((CvMat**)(W->data.ptr + j * W->step))[i] = tmp; //note indices i and j swapped - cvSet(tmp,cvScalar(1.0,1.0,1.0,1.0)); - W[j+i*num_cams] = tmp; - } else{ - A[j+i*num_cams] = NULL; - B[j+i*num_cams] = NULL; - W[j+i*num_cams] = NULL; - } - } - } - - //allocate U - U = new CvMat* [num_cams]; - for (int j = 0; j < num_cams; j++ ) { - U[j] = cvCreateMat( U_size, U_size, CV_64F ); - cvSetZero(U[j]); - - } - //allocate ea - ea = new CvMat* [num_cams]; - for (int j = 0; j < num_cams; j++ ) { - ea[j] = cvCreateMat( U_size, 1, CV_64F ); - cvSetZero(ea[j]); - } - - //allocate V and inv_V_star - V = new CvMat* [num_points]; - inv_V_star = new CvMat* [num_points]; - for (int i = 0; i < num_points; i++ ) { - V[i] = cvCreateMat( V_size, V_size, CV_64F ); - inv_V_star[i] = cvCreateMat( V_size, V_size, CV_64F ); - cvSetZero(V[i]); - cvSetZero(inv_V_star[i]); - } - - //allocate eb - eb = new CvMat* [num_points]; - for (int i = 0; i < num_points; i++ ) { - eb[i] = cvCreateMat( V_size, 1, CV_64F ); - cvSetZero(eb[i]); - } - - //allocate Yj - Yj = new CvMat* [num_points]; - for (int i = 0; i < num_points; i++ ) { - Yj[i] = cvCreateMat( Wij_height, Wij_width, CV_64F ); //Yij has the same size as Wij - cvSetZero(Yj[i]); - } - - //allocate matrix S - S = cvCreateMat( num_cams * num_cam_param, num_cams * num_cam_param, CV_64F); - cvSetZero(S); - JtJ_diag = cvCreateMat( num_cams * num_cam_param + num_points * num_point_param, 1, CV_64F ); - cvSetZero(JtJ_diag); - - //set starting parameters - CvMat _tmp_ = CvMat(P0); - prevP = cvCloneMat( &_tmp_ ); - P = cvCloneMat( &_tmp_ ); - deltaP = cvCloneMat( &_tmp_ ); - - //set measurements - _tmp_ = CvMat(X_init); - X = cvCloneMat( &_tmp_ ); - //create vector for estimated measurements - hX = cvCreateMat( X->rows, X->cols, CV_64F ); - cvSetZero(hX); - //create error vector - err = cvCreateMat( X->rows, X->cols, CV_64F ); - cvSetZero(err); - ask_for_proj(_vis); - //compute initial error - cvSub(X, hX, err ); - - /* - assert(X->rows == hX->rows); - std::cerr<<"X size = "<rows<<" "<cols<cols<rows;j+=2) { - double Xj1 = *(double*)(X->data.ptr + j * X->step); - double hXj1 = *(double*)(hX->data.ptr + j * hX->step); - double err1 = *(double*)(err->data.ptr + j * err->step); - double Xj2 = *(double*)(X->data.ptr + (j+1) * X->step); - double hXj2 = *(double*)(hX->data.ptr + (j+1) * hX->step); - double err2 = *(double*)(err->data.ptr + (j+1) * err->step); - std::cerr<<"("< ("<data.ptr + B->step * i))[j]; - CvMat* Bij = B[j+i*num_cams]; - if (Bij ) { - //Vi+= BijT*Bij - cvGEMM( Bij, Bij, 1, V[i], 1, V[i], CV_GEMM_A_T ); - - //eb_i += BijT * e_ij - int index = ((int*)(Vis_index->data.ptr + i * Vis_index->step))[j]; - - CvMat eij; - cvGetSubRect( err, &eij, cvRect( 0, index, 1, Bij->height ) ); //width of transposed Bij - cvGEMM( Bij, &eij, 1, eb[i], 1, eb[i], CV_GEMM_A_T ); - } - } - } //V_i and eb_i computed for all i - - //compute W_ij - for( int i = 0; i < num_points; i++ ) { - for( int j = 0; j < num_cams; j++ ) { - //CvMat* Aij = ((CvMat**)(A->data.ptr + A->step * i))[j]; - CvMat* Aij = A[j+i*num_cams]; - if( Aij ) { //visible - //CvMat* Bij = ((CvMat**)(B->data.ptr + B->step * i))[j]; - CvMat* Bij = B[j+i*num_cams]; - //CvMat* Wij = ((CvMat**)(W->data.ptr + W->step * j))[i]; - CvMat* Wij = W[j+i*num_cams]; - - //multiply - cvGEMM( Aij, Bij, 1, NULL, 0, Wij, CV_GEMM_A_T ); - } - } - } //Wij computed - - //backup diagonal of JtJ before we start augmenting it - { - CvMat dia; - CvMat subr; - for( int j = 0; j < num_cams; j++ ) { - cvGetDiag(U[j], &dia); - cvGetSubRect(JtJ_diag, &subr, - cvRect(0, j*num_cam_param, 1, num_cam_param )); - cvCopy( &dia, &subr ); - } - for( int i = 0; i < num_points; i++ ) { - cvGetDiag(V[i], &dia); - cvGetSubRect(JtJ_diag, &subr, - cvRect(0, num_cams*num_cam_param + i * num_point_param, 1, num_point_param )); - cvCopy( &dia, &subr ); - } - } - - if( iters == 0 ) { - //initialize lambda. It is set to 1e-3 * average diagonal element in JtJ - double average_diag = 0; - for( int j = 0; j < num_cams; j++ ) { - average_diag += cvTrace( U[j] ).val[0]; - } - for( int i = 0; i < num_points; i++ ) { - average_diag += cvTrace( V[i] ).val[0]; - } - average_diag /= (num_cams*num_cam_param + num_points * num_point_param ); - - // lambda = 1e-3 * average_diag; - lambda = 1e-3 * average_diag; - lambda = 0.245560; - } - - //now we are going to find good step and make it - for(;;) { - //augmentation of diagonal - for(int j = 0; j < num_cams; j++ ) { - CvMat diag; - cvGetDiag( U[j], &diag ); -#if 1 - cvAddS( &diag, cvScalar( lambda ), &diag ); -#else - cvScale( &diag, &diag, 1 + lambda ); -#endif - } - for(int i = 0; i < num_points; i++ ) { - CvMat diag; - cvGetDiag( V[i], &diag ); -#if 1 - cvAddS( &diag, cvScalar( lambda ), &diag ); -#else - cvScale( &diag, &diag, 1 + lambda ); -#endif - } - bool error = false; - //compute inv(V*) - bool inverted_ok = true; - for(int i = 0; i < num_points; i++ ) { - double det = cvInvert( V[i], inv_V_star[i] ); - - if( fabs(det) <= FLT_EPSILON ) { - inverted_ok = false; - std::cerr<<"V["<data.ptr + W->step * j))[i]; - CvMat* Wij = W[j+i*num_cams]; - if( Wij ) { - cvMatMul( Wij, inv_V_star[i], Yj[i] ); - } - } - - //compute Sjk for k>=j (because Sjk = Skj) - for( int k = j; k < num_cams; k++ ) { - cvSetZero( YWt ); - for( int i = 0; i < num_points; i++ ) { - //check that both Wij and Wik exist - // CvMat* Wij = ((CvMat**)(W->data.ptr + W->step * j))[i]; - CvMat* Wij = W[j+i*num_cams]; - //CvMat* Wik = ((CvMat**)(W->data.ptr + W->step * k))[i]; - CvMat* Wik = W[k+i*num_cams]; - - if( Wij && Wik ) { - //multiply YWt += Yj[i]*Wik' - cvGEMM( Yj[i], Wik, 1, YWt, 1, YWt, CV_GEMM_B_T ); ///*transpose Wik - } - } - - //copy result to matrix S - - CvMat Sjk; - //extract submat - cvGetSubRect( S, &Sjk, cvRect( k * num_cam_param, j * num_cam_param, num_cam_param, num_cam_param )); - - - //if j==k, add diagonal - if( j != k ) { - //just copy with minus - cvScale( YWt, &Sjk, -1 ); //if we set initial S to zero then we can use cvSub( Sjk, YWt, Sjk); - } else { - //add diagonal value - - //subtract YWt from augmented Uj - cvSub( U[j], YWt, &Sjk ); - } - } - - //compute right part of equation involving matrix S - // e_j=ea_j - \sum_i Y_ij eb_i - { - CvMat e_j; - - //select submat - cvGetSubRect( E, &e_j, cvRect( 0, j * num_cam_param, 1, num_cam_param ) ); - - for( int i = 0; i < num_points; i++ ) { - //CvMat* Wij = ((CvMat**)(W->data.ptr + W->step * j))[i]; - CvMat* Wij = W[j+i*num_cams]; - if( Wij ) - cvMatMulAdd( Yj[i], eb[i], &e_j, &e_j ); - } - - cvSub( ea[j], &e_j, &e_j ); - } - - } - //fill below diagonal elements of matrix S - cvCompleteSymm( S, 0 ); ///*from upper to low //operation may be done by nonzero blocks or during upper diagonal computation - - //Solve linear system S * deltaP_a = E - CvMat dpa; - cvGetSubRect( deltaP, &dpa, cvRect(0, 0, 1, S->width ) ); - int res = cvSolve( S, E, &dpa, CV_CHOLESKY ); - - if( res ) { //system solved ok - //compute db_i - for( int i = 0; i < num_points; i++ ) { - CvMat dbi; - cvGetSubRect( deltaP, &dbi, cvRect( 0, dpa.height + i * num_point_param, 1, num_point_param ) ); - - // compute \sum_j W_ij^T da_j - for( int j = 0; j < num_cams; j++ ) { - //get Wij - //CvMat* Wij = ((CvMat**)(W->data.ptr + W->step * j))[i]; - CvMat* Wij = W[j+i*num_cams]; - if( Wij ) { - //get da_j - CvMat daj; - cvGetSubRect( &dpa, &daj, cvRect( 0, j * num_cam_param, 1, num_cam_param )); - cvGEMM( Wij, &daj, 1, &dbi, 1, &dbi, CV_GEMM_A_T ); ///* transpose Wij - } - } - //finalize dbi - cvSub( eb[i], &dbi, &dbi ); - cvMatMul(inv_V_star[i], &dbi, &dbi ); //here we get final dbi - } //now we computed whole deltaP - - //add deltaP to delta - cvAdd( prevP, deltaP, P ); - - //evaluate function with new parameters - ask_for_proj(_vis); // func( P, hX ); - - //compute error - errNorm = cvNorm( X, hX, CV_L2 ); - - } else { - error = true; - } - } else { - error = true; - } - //check solution - if( error || ///* singularities somewhere - errNorm > prevErrNorm ) { //step was not accepted - //increase lambda and reject change - lambda *= 10; - { - int nviz = X->rows / num_err_param; - double e2 = errNorm*errNorm, e2_prev = prevErrNorm*prevErrNorm; - double e2n = e2/nviz, e2n_prev = e2_prev/nviz; - std::cerr<<"move failed: lambda = "< "< criteria.max_iter ) || - (criteria.type&CV_TERMCRIT_EPS && param_change_norm < criteria.epsilon) ) { - // std::cerr<<"relative norm change "<data.db[6]; - intr_data[4] = cam_params->data.db[7]; - intr_data[2] = cam_params->data.db[8]; - intr_data[5] = cam_params->data.db[9]; - - CvMat _A = cvMat(3,3, CV_64F, intr_data ); - - CvMat _dpdr, _dpdt, _dpdf, _dpdc, _dpdk; - - bool have_dk = cam_params->height - 10 ? true : false; - - cvGetCols( A, &_dpdr, 0, 3 ); - cvGetCols( A, &_dpdt, 3, 6 ); - cvGetCols( A, &_dpdf, 6, 8 ); - cvGetCols( A, &_dpdc, 8, 10 ); - - if( have_dk ) { - cvGetRows( cam_params, &_k, 10, cam_params->height ); - cvGetCols( A, &_dpdk, 10, A->width ); - } - cvProjectPoints2(&_Mi, &_ri, &_ti, &_A, have_dk ? &_k : NULL, _mp, &_dpdr, &_dpdt, - &_dpdf, &_dpdc, have_dk ? &_dpdk : NULL, 0); - - cvReleaseMat( &_mp ); - - //compute jacobian for point params - //compute dMeasure/dPoint3D - - // x = (r11 * X + r12 * Y + r13 * Z + t1) - // y = (r21 * X + r22 * Y + r23 * Z + t2) - // z = (r31 * X + r32 * Y + r33 * Z + t3) - - // x' = x/z - // y' = y/z - - //d(x') = ( dx*z - x*dz)/(z*z) - //d(y') = ( dy*z - y*dz)/(z*z) - - //g = 1 + k1*r_2 + k2*r_4 + k3*r_6 - //r_2 = x'*x' + y'*y' - - //d(r_2) = 2*x'*dx' + 2*y'*dy' - - //dg = k1* d(r_2) + k2*2*r_2*d(r_2) + k3*3*r_2*r_2*d(r_2) - - //x" = x'*g + 2*p1*x'*y' + p2(r_2+2*x'_2) - //y" = y'*g + p1(r_2+2*y'_2) + 2*p2*x'*y' - - //d(x") = d(x') * g + x' * d(g) + 2*p1*( d(x')*y' + x'*dy) + p2*(d(r_2) + 2*2*x'* dx') - //d(y") = d(y') * g + y' * d(g) + 2*p2*( d(x')*y' + x'*dy) + p1*(d(r_2) + 2*2*y'* dy') - - // u = fx*( x") + cx - // v = fy*( y") + cy - - // du = fx * d(x") = fx * ( dx*z - x*dz)/ (z*z) - // dv = fy * d(y") = fy * ( dy*z - y*dz)/ (z*z) - - // dx/dX = r11, dx/dY = r12, dx/dZ = r13 - // dy/dX = r21, dy/dY = r22, dy/dZ = r23 - // dz/dX = r31, dz/dY = r32, dz/dZ = r33 - - // du/dX = fx*(r11*z-x*r31)/(z*z) - // du/dY = fx*(r12*z-x*r32)/(z*z) - // du/dZ = fx*(r13*z-x*r33)/(z*z) - - // dv/dX = fy*(r21*z-y*r31)/(z*z) - // dv/dY = fy*(r22*z-y*r32)/(z*z) - // dv/dZ = fy*(r23*z-y*r33)/(z*z) - - //get rotation matrix - double R[9], t[3], fx = intr_data[0], fy = intr_data[4]; - CvMat _R = cvMat( 3, 3, CV_64F, R ); - cvRodrigues2(&_ri, &_R); - - double X,Y,Z; - X = point_params->data.db[0]; - Y = point_params->data.db[1]; - Z = point_params->data.db[2]; - - t[0] = _ti.data.db[0]; - t[1] = _ti.data.db[1]; - t[2] = _ti.data.db[2]; - - //compute x,y,z - double x = R[0] * X + R[1] * Y + R[2] * Z + t[0]; - double y = R[3] * X + R[4] * Y + R[5] * Z + t[1]; - double z = R[6] * X + R[7] * Y + R[8] * Z + t[2]; - -#if 1 - //compute x',y' - double x_strike = x/z; - double y_strike = y/z; - //compute dx',dy' matrix - // - // dx'/dX dx'/dY dx'/dZ = - // dy'/dX dy'/dY dy'/dZ - - double coeff[6] = { z, 0, -x, - 0, z, -y }; - CvMat coeffmat = cvMat( 2, 3, CV_64F, coeff ); - - CvMat* dstrike_dbig = cvCreateMat(2,3,CV_64F); - cvMatMul(&coeffmat, &_R, dstrike_dbig); - cvScale(dstrike_dbig, dstrike_dbig, 1/(z*z) ); - - if( have_dk ) { - double strike_[2] = {x_strike, y_strike}; - CvMat strike = cvMat(1, 2, CV_64F, strike_); - - //compute r_2 - double r_2 = x_strike*x_strike + y_strike*y_strike; - double r_4 = r_2*r_2; - double r_6 = r_4*r_2; - - //compute d(r_2)/dbig - CvMat* dr2_dbig = cvCreateMat(1,3,CV_64F); - cvMatMul( &strike, dstrike_dbig, dr2_dbig); - cvScale( dr2_dbig, dr2_dbig, 2 ); - - double& k1 = _k.data.db[0]; - double& k2 = _k.data.db[1]; - double& p1 = _k.data.db[2]; - double& p2 = _k.data.db[3]; - double k3 = 0; - - if( _k.cols*_k.rows == 5 ) { - k3 = _k.data.db[4]; - } - //compute dg/dbig - double dg_dr2 = k1 + k2*2*r_2 + k3*3*r_4; - double g = 1+k1*r_2+k2*r_4+k3*r_6; - - CvMat* dg_dbig = cvCreateMat(1,3,CV_64F); - cvScale( dr2_dbig, dg_dbig, dg_dr2 ); - - CvMat* tmp = cvCreateMat( 2, 3, CV_64F ); - CvMat* dstrike2_dbig = cvCreateMat( 2, 3, CV_64F ); - - double c[4] = { g+2*p1*y_strike+4*p2*x_strike, 2*p1*x_strike, - 2*p2*y_strike, g+2*p2*x_strike + 4*p1*y_strike }; - - CvMat coeffmat2 = cvMat(2,2,CV_64F, c ); - - cvMatMul(&coeffmat2, dstrike_dbig, dstrike2_dbig ); - - cvGEMM( &strike, dg_dbig, 1, NULL, 0, tmp, CV_GEMM_A_T ); - cvAdd( dstrike2_dbig, tmp, dstrike2_dbig ); - - double p[2] = { p2, p1 }; - CvMat pmat = cvMat(2, 1, CV_64F, p ); - - cvMatMul( &pmat, dr2_dbig ,tmp); - cvAdd( dstrike2_dbig, tmp, dstrike2_dbig ); - - cvCopy( dstrike2_dbig, B ); - - cvReleaseMat(&dr2_dbig); - cvReleaseMat(&dg_dbig); - - cvReleaseMat(&tmp); - cvReleaseMat(&dstrike2_dbig); - cvReleaseMat(&tmp); - } else { - cvCopy(dstrike_dbig, B); - } - //multiply by fx, fy - CvMat row; - cvGetRows( B, &row, 0, 1 ); - cvScale( &row, &row, fx ); - - cvGetRows( B, &row, 1, 2 ); - cvScale( &row, &row, fy ); - -#else - - double k = fx/(z*z); - - cvmSet( B, 0, 0, k*(R[0]*z-x*R[6])); - cvmSet( B, 0, 1, k*(R[1]*z-x*R[7])); - cvmSet( B, 0, 2, k*(R[2]*z-x*R[8])); - - k = fy/(z*z); - - cvmSet( B, 1, 0, k*(R[3]*z-y*R[6])); - cvmSet( B, 1, 1, k*(R[4]*z-y*R[7])); - cvmSet( B, 1, 2, k*(R[5]*z-y*R[8])); - -#endif - -} -static void func(int /*i*/, int /*j*/, CvMat *point_params, CvMat* cam_params, CvMat* estim, void* /*data*/) { - //just do projections - CvMat _Mi; - cvReshape( point_params, &_Mi, 3, 1 ); - - CvMat* _mp = cvCreateMat(1, 1, CV_64FC2 ); //projection of the point - CvMat* _mp2 = cvCreateMat(1, 2, CV_64F ); //projection of the point - - //split camera params into different matrices - CvMat _ri, _ti, _k; - - cvGetRows( cam_params, &_ri, 0, 3 ); - cvGetRows( cam_params, &_ti, 3, 6 ); - - double intr_data[9] = {0, 0, 0, 0, 0, 0, 0, 0, 1}; - intr_data[0] = cam_params->data.db[6]; - intr_data[4] = cam_params->data.db[7]; - intr_data[2] = cam_params->data.db[8]; - intr_data[5] = cam_params->data.db[9]; - - CvMat _A = cvMat(3,3, CV_64F, intr_data ); - - //int cn = CV_MAT_CN(_Mi.type); - - bool have_dk = cam_params->height - 10 ? true : false; - - if( have_dk ) { - cvGetRows( cam_params, &_k, 10, cam_params->height ); - } - cvProjectPoints2( &_Mi, &_ri, &_ti, &_A, have_dk ? &_k : NULL, _mp, NULL, NULL, - NULL, NULL, NULL, 0); - // std::cerr<<"_mp = "<<_mp->data.db[0]<<","<<_mp->data.db[1]<data.db[0] = _mp->data.db[0]; - _mp2->data.db[1] = _mp->data.db[1]; - cvTranspose( _mp2, estim ); - cvReleaseMat( &_mp ); - cvReleaseMat( &_mp2 ); -} - -static void fjac_new(int i, int j, Mat& point_params, Mat& cam_params, Mat& A, Mat& B, void* data) { - CvMat _point_params = point_params, _cam_params = cam_params, _Al = A, _Bl = B; - fjac(i,j, &_point_params, &_cam_params, &_Al, &_Bl, data); -} - -static void func_new(int i, int j, Mat& point_params, Mat& cam_params, Mat& estim, void* data) { - CvMat _point_params = point_params, _cam_params = cam_params, _estim = estim; - func(i,j,&_point_params,&_cam_params,&_estim,data); -} - -void LevMarqSparse::bundleAdjust( vector& points, //positions of points in global coordinate system (input and output) - const vector >& imagePoints, //projections of 3d points for every camera - const vector >& visibility, //visibility of 3d points for every camera - vector& cameraMatrix, //intrinsic matrices of all cameras (input and output) - vector& R, //rotation matrices of all cameras (input and output) - vector& T, //translation vector of all cameras (input and output) - vector& distCoeffs, //distortion coefficients of all cameras (input and output) - const TermCriteria& criteria, - BundleAdjustCallback cb, void* user_data) { - //,enum{MOTION_AND_STRUCTURE,MOTION,STRUCTURE}) - int num_points = (int)points.size(); - int num_cameras = (int)cameraMatrix.size(); - - CV_Assert( imagePoints.size() == (size_t)num_cameras && - visibility.size() == (size_t)num_cameras && - R.size() == (size_t)num_cameras && - T.size() == (size_t)num_cameras && - (distCoeffs.size() == (size_t)num_cameras || distCoeffs.size() == 0) ); - - int numdist = distCoeffs.size() ? (distCoeffs[0].rows * distCoeffs[0].cols) : 0; - - int num_cam_param = 3 /* rotation vector */ + 3 /* translation vector */ - + 2 /* fx, fy */ + 2 /* cx, cy */ + numdist; - - int num_point_param = 3; - - //collect camera parameters into vector - Mat params( num_cameras * num_cam_param + num_points * num_point_param, 1, CV_64F ); - - //fill camera params - for( int i = 0; i < num_cameras; i++ ) { - //rotation - Mat rot_vec; Rodrigues( R[i], rot_vec ); - Mat dst = params.rowRange(i*num_cam_param, i*num_cam_param+3); - rot_vec.copyTo(dst); - - //translation - dst = params.rowRange(i*num_cam_param + 3, i*num_cam_param+6); - T[i].copyTo(dst); - - //intrinsic camera matrix - double* intr_data = (double*)cameraMatrix[i].data; - double* intr = (double*)(params.data + params.step * (i*num_cam_param+6)); - //focals - intr[0] = intr_data[0]; //fx - intr[1] = intr_data[4]; //fy - //center of projection - intr[2] = intr_data[2]; //cx - intr[3] = intr_data[5]; //cy - - //add distortion if exists - if( distCoeffs.size() ) { - dst = params.rowRange(i*num_cam_param + 10, i*num_cam_param+10+numdist); - distCoeffs[i].copyTo(dst); - } - } - - //fill point params - Mat ptparams(num_points, 1, CV_64FC3, params.data + num_cameras*num_cam_param*params.step); - Mat _points(points); - CV_Assert(_points.size() == ptparams.size() && _points.type() == ptparams.type()); - _points.copyTo(ptparams); - - //convert visibility vectors to visibility matrix - Mat vismat(num_points, num_cameras, CV_32S); - for( int i = 0; i < num_cameras; i++ ) { - //get row - Mat col = vismat.col(i); - Mat((int)visibility[i].size(), 1, vismat.type(), (void*)&visibility[i][0]).copyTo( col ); - } - - int num_proj = countNonZero(vismat); //total number of points projections - - //collect measurements - Mat X(num_proj*2,1,CV_64F); //measurement vector - - int counter = 0; - for(int i = 0; i < num_points; i++ ) { - for(int j = 0; j < num_cameras; j++ ) { - //check visibility - if( visibility[j][i] ) { - //extract point and put tu vector - Point2d p = imagePoints[j][i]; - ((double*)(X.data))[counter] = p.x; - ((double*)(X.data))[counter+1] = p.y; - assert(p.x != -1 || p.y != -1); - counter+=2; - } - } - } - - LevMarqSparse levmar( num_points, num_cameras, num_point_param, num_cam_param, 2, vismat, params, X, - TermCriteria(criteria), fjac_new, func_new, NULL, - cb, user_data); - //extract results - //fill point params - /*Mat final_points(num_points, 1, CV_64FC3, - levmar.P->data.db + num_cameras*num_cam_param *levmar.P->step); - CV_Assert(_points.size() == final_points.size() && _points.type() == final_points.type()); - final_points.copyTo(_points);*/ - - points.clear(); - for( int i = 0; i < num_points; i++ ) { - CvMat point_mat; - cvGetSubRect( levmar.P, &point_mat, cvRect( 0, levmar.num_cams * levmar.num_cam_param+ levmar.num_point_param * i, 1, levmar.num_point_param )); - CvScalar x = cvGet2D(&point_mat,0,0); CvScalar y = cvGet2D(&point_mat,1,0); CvScalar z = cvGet2D(&point_mat,2,0); - points.push_back(Point3d(x.val[0],y.val[0],z.val[0])); - //std::cerr<<"point"< B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" - -#include -#include -#include "basicretinafilter.hpp" -#include - - -namespace cv -{ - -// @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ - -////////////////////////////////////////////////////////// -// BASIC RETINA FILTER -////////////////////////////////////////////////////////// - -// Constructor and Desctructor of the basic retina filter -BasicRetinaFilter::BasicRetinaFilter(const unsigned int NBrows, const unsigned int NBcolumns, const unsigned int parametersListSize, const bool useProgressiveFilter) -:_filterOutput(NBrows, NBcolumns), - _localBuffer(NBrows*NBcolumns), - _filteringCoeficientsTable(3*parametersListSize), - _progressiveSpatialConstant(0),// pointer to a local table containing local spatial constant (allocated with the object) - _progressiveGain(0) -{ -#ifdef T_BASIC_RETINA_ELEMENT_DEBUG - std::cout<<"BasicRetinaFilter::BasicRetinaFilter: new filter, size="<0) - { - _progressiveSpatialConstant.resize(_filterOutput.size()); - _progressiveGain.resize(_filterOutput.size()); - } - // reset buffers - clearAllBuffers(); -} - -// Change coefficients table -void BasicRetinaFilter::setLPfilterParameters(const float beta, const float tau, const float desired_k, const unsigned int filterIndex) -{ - float _beta = beta+tau; - float k=desired_k; - // check if the spatial constant is correct (avoid 0 value to avoid division by 0) - if (desired_k<=0) - { - k=0.001f; - std::cerr<<"BasicRetinaFilter::spatial constant of the low pass filter must be superior to zero !!! correcting parameter setting to 0,001"< old:"<<(1-a)*(1-a)*(1-a)*(1-a)/(1+_beta)<1.0f) - localSpatialConstantValue=1.0f; - - _progressiveSpatialConstant[_halfNBcolumns-1+idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1+idRow)]=localSpatialConstantValue; - _progressiveSpatialConstant[_halfNBcolumns-1-idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1+idRow)]=localSpatialConstantValue; - _progressiveSpatialConstant[_halfNBcolumns-1+idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1-idRow)]=localSpatialConstantValue; - _progressiveSpatialConstant[_halfNBcolumns-1-idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1-idRow)]=localSpatialConstantValue; - - // computing local gain - float localGain=(1-localSpatialConstantValue)*(1-localSpatialConstantValue)*(1-localSpatialConstantValue)*(1-localSpatialConstantValue)/(1+_beta); - _progressiveGain[_halfNBcolumns-1+idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1+idRow)]=localGain; - _progressiveGain[_halfNBcolumns-1-idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1+idRow)]=localGain; - _progressiveGain[_halfNBcolumns-1+idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1-idRow)]=localGain; - _progressiveGain[_halfNBcolumns-1-idColumn+_filterOutput.getNBcolumns()*(_halfNBrows-1-idRow)]=localGain; - - //std::cout< &accuracyMap, const unsigned int filterIndex) -{ - - if (accuracyMap.size()!=_filterOutput.size()) - { - std::cerr<<"BasicRetinaFilter::setProgressiveFilterConstants_CustomAccuracy: error: input accuracy map does not match filter size, init skept"<1) - localSpatialConstantValue=1; - - _progressiveSpatialConstant[index]=localSpatialConstantValue; - - // computing local gain - float localGain=(1.0f-localSpatialConstantValue)*(1.0f-localSpatialConstantValue)*(1.0f-localSpatialConstantValue)*(1.0f-localSpatialConstantValue)/(1.0f+_beta); - _progressiveGain[index]=localGain; - - //std::cout< &BasicRetinaFilter::runFilter_LocalAdapdation(const std::valarray &inputFrame, const std::valarray &localLuminance) -{ - _localLuminanceAdaptation(get_data(inputFrame), get_data(localLuminance), &_filterOutput[0]); - return _filterOutput; -} -// run local adaptation filter at a specific output adress -void BasicRetinaFilter::runFilter_LocalAdapdation(const std::valarray &inputFrame, const std::valarray &localLuminance, std::valarray &outputFrame) -{ - _localLuminanceAdaptation(get_data(inputFrame), get_data(localLuminance), &outputFrame[0]); -} -// run local adaptation filter and save result in _filterOutput with autonomous low pass filtering before adaptation -const std::valarray &BasicRetinaFilter::runFilter_LocalAdapdation_autonomous(const std::valarray &inputFrame) -{ - _spatiotemporalLPfilter(get_data(inputFrame), &_filterOutput[0]); - _localLuminanceAdaptation(get_data(inputFrame), &_filterOutput[0], &_filterOutput[0]); - return _filterOutput; -} -// run local adaptation filter at a specific output adress with autonomous low pass filtering before adaptation -void BasicRetinaFilter::runFilter_LocalAdapdation_autonomous(const std::valarray &inputFrame, std::valarray &outputFrame) -{ - _spatiotemporalLPfilter(get_data(inputFrame), &_filterOutput[0]); - _localLuminanceAdaptation(get_data(inputFrame), &_filterOutput[0], &outputFrame[0]); -} - -// local luminance adaptation of the input in regard of localLuminance buffer, the input is rewrited and becomes the output -void BasicRetinaFilter::_localLuminanceAdaptation(float *inputOutputFrame, const float *localLuminance) -{ - _localLuminanceAdaptation(inputOutputFrame, localLuminance, inputOutputFrame, false); - - /* const float *localLuminancePTR=localLuminance; - float *inputOutputFramePTR=inputOutputFrame; - - for (register unsigned int IDpixel=0 ; IDpixel<_filterOutput.getNBpixels() ; ++IDpixel, ++inputOutputFramePTR) - { - float X0=*(localLuminancePTR++)*_localLuminanceFactor+_localLuminanceAddon; - *(inputOutputFramePTR) = (_maxInputValue+X0)**inputOutputFramePTR/(*inputOutputFramePTR +X0+0.00000000001); - } - */ -} - -// local luminance adaptation of the input in regard of localLuminance buffer -void BasicRetinaFilter::_localLuminanceAdaptation(const float *inputFrame, const float *localLuminance, float *outputFrame, const bool updateLuminanceMean) -{ - if (updateLuminanceMean) - { float meanLuminance=0; - const float *luminancePTR=inputFrame; - for (unsigned int i=0;i<_filterOutput.getNBpixels();++i) - meanLuminance+=*(luminancePTR++); - meanLuminance/=_filterOutput.getNBpixels(); - //float tempMeanValue=meanLuminance+_meanInputValue*_tau; - updateCompressionParameter(meanLuminance); - } -#ifdef MAKE_PARALLEL - cv::parallel_for_(cv::Range(0,_filterOutput.getNBpixels()), Parallel_localAdaptation(localLuminance, inputFrame, outputFrame, _localLuminanceFactor, _localLuminanceAddon, _maxInputValue)); -#else - //std::cout< &BasicRetinaFilter::runFilter_LPfilter(const std::valarray &inputFrame, const unsigned int filterIndex) -{ - _spatiotemporalLPfilter(get_data(inputFrame), &_filterOutput[0], filterIndex); - return _filterOutput; -} - -// run LP filter for a new frame input and save result at a specific output adress -void BasicRetinaFilter::runFilter_LPfilter(const std::valarray &inputFrame, std::valarray &outputFrame, const unsigned int filterIndex) -{ - _spatiotemporalLPfilter(get_data(inputFrame), &outputFrame[0], filterIndex); -} - -// run LP filter on the input data and rewrite it -void BasicRetinaFilter::runFilter_LPfilter_Autonomous(std::valarray &inputOutputFrame, const unsigned int filterIndex) -{ - unsigned int coefTableOffset=filterIndex*3; - - /**********/ - _a=_filteringCoeficientsTable[coefTableOffset]; - _gain=_filteringCoeficientsTable[1+coefTableOffset]; - _tau=_filteringCoeficientsTable[2+coefTableOffset]; - - // launch the serie of 1D directional filters in order to compute the 2D low pass filter - _horizontalCausalFilter(&inputOutputFrame[0], 0, _filterOutput.getNBrows()); - _horizontalAnticausalFilter(&inputOutputFrame[0], 0, _filterOutput.getNBrows()); - _verticalCausalFilter(&inputOutputFrame[0], 0, _filterOutput.getNBcolumns()); - _verticalAnticausalFilter_multGain(&inputOutputFrame[0], 0, _filterOutput.getNBcolumns()); - -} -// run LP filter for a new frame input and save result at a specific output adress -void BasicRetinaFilter::_spatiotemporalLPfilter(const float *inputFrame, float *outputFrame, const unsigned int filterIndex) -{ - unsigned int coefTableOffset=filterIndex*3; - /**********/ - _a=_filteringCoeficientsTable[coefTableOffset]; - _gain=_filteringCoeficientsTable[1+coefTableOffset]; - _tau=_filteringCoeficientsTable[2+coefTableOffset]; - - // launch the serie of 1D directional filters in order to compute the 2D low pass filter - _horizontalCausalFilter_addInput(inputFrame, outputFrame, 0,_filterOutput.getNBrows()); - _horizontalAnticausalFilter(outputFrame, 0, _filterOutput.getNBrows()); - _verticalCausalFilter(outputFrame, 0, _filterOutput.getNBcolumns()); - _verticalAnticausalFilter_multGain(outputFrame, 0, _filterOutput.getNBcolumns()); - -} - -// run SQUARING LP filter for a new frame input and save result at a specific output adress -float BasicRetinaFilter::_squaringSpatiotemporalLPfilter(const float *inputFrame, float *outputFrame, const unsigned int filterIndex) -{ - unsigned int coefTableOffset=filterIndex*3; - /**********/ - _a=_filteringCoeficientsTable[coefTableOffset]; - _gain=_filteringCoeficientsTable[1+coefTableOffset]; - _tau=_filteringCoeficientsTable[2+coefTableOffset]; - - // launch the serie of 1D directional filters in order to compute the 2D low pass filter - - _squaringHorizontalCausalFilter(inputFrame, outputFrame, 0, _filterOutput.getNBrows()); - _horizontalAnticausalFilter(outputFrame, 0, _filterOutput.getNBrows()); - _verticalCausalFilter(outputFrame, 0, _filterOutput.getNBcolumns()); - return _verticalAnticausalFilter_returnMeanValue(outputFrame, 0, _filterOutput.getNBcolumns()); -} - -///////////////////////////////////////////////// -// standard version of the 1D low pass filters - -// horizontal causal filter which adds the input inside -void BasicRetinaFilter::_horizontalCausalFilter(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd) -{ - - - //#pragma omp parallel for - for (unsigned int IDrow=IDrowStart; IDrow squaring horizontal causal filter -void BasicRetinaFilter::_squaringHorizontalCausalFilter(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd) -{ - register float* outputPTR=outputFrame+IDrowStart*_filterOutput.getNBcolumns(); - register const float* inputPTR=inputFrame+IDrowStart*_filterOutput.getNBcolumns(); - for (unsigned int IDrow=IDrowStart; IDrow USE IRREGULAR SPATIAL CONSTANT - -// irregular filter computed from a buffer and rewrites it -void BasicRetinaFilter::_spatiotemporalLPfilter_Irregular(float *inputOutputFrame, const unsigned int filterIndex) -{ - if (_progressiveGain.size()==0) - { - std::cerr<<"BasicRetinaFilter::runProgressiveFilter: cannot perform filtering, no progressive filter settled up"< B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 BASICRETINAELEMENT_HPP_ -#define BASICRETINAELEMENT_HPP_ - -#include - - -/** -* @class BasicRetinaFilter -* @brief Brief overview, this class provides tools for low level image processing: -* --> this class is able to perform: -* -> first order Low pass optimized filtering -* -> local luminance adaptation (able to correct back light problems and contrast enhancement) -* -> progressive low pass filter filtering (higher filtering on the borders than on the center) -* -> image data between 0 and 255 resampling with different options, linear rescaling, sigmoide) -* -* NOTE : initially the retina model was based on double format scalar values but -* a good memory/precision compromise is float... -* also the double format precision does not make so much sense from a biological point of view (neurons value coding is not so precise) -* -* TYPICAL USE: -* -* // create object at a specified picture size -* BasicRetinaFilter *_photoreceptorsPrefilter; -* _photoreceptorsPrefilter =new BasicRetinaFilter(sizeRows, sizeWindows); -* -* // init gain, spatial and temporal parameters: -* _photoreceptorsPrefilter->setCoefficientsTable(gain,temporalConstant, spatialConstant); -* -* // during program execution, call the filter for local luminance correction or low pass filtering for an input picture called "FrameBuffer": -* _photoreceptorsPrefilter->runFilter_LocalAdapdation(FrameBuffer); -* // or (Low pass first order filter) -* _photoreceptorsPrefilter->runFilter_LPfilter(FrameBuffer); -* // get output frame and its size: -* const unsigned int output_nbRows=_photoreceptorsPrefilter->getNBrows(); -* const unsigned int output_nbColumns=_photoreceptorsPrefilter->getNBcolumns(); -* const double *outputFrame=_photoreceptorsPrefilter->getOutput(); -* -* // at the end of the program, destroy object: -* delete _photoreceptorsPrefilter; - -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -* synthesis of the work described in Alexandre BENOIT thesis: "Le systeme visuel humain au secours de la vision par ordinateur" -*/ - -#include -#include "templatebuffer.hpp" - -//#define __BASIC_RETINA_ELEMENT_DEBUG - -//using namespace std; -namespace cv -{ - class BasicRetinaFilter - { - public: - - /** - * constructor of the base bio-inspired toolbox, parameters are only linked to imae input size and number of filtering capabilities of the object - * @param NBrows: number of rows of the input image - * @param NBcolumns: number of columns of the input image - * @param parametersListSize: specifies the number of parameters set (each parameters set represents a specific low pass spatio-temporal filter) - * @param useProgressiveFilter: specifies if the filter has irreguar (progressive) filtering capabilities (this can be activated later using setProgressiveFilterConstants_xxx methods) - */ - BasicRetinaFilter(const unsigned int NBrows, const unsigned int NBcolumns, const unsigned int parametersListSize=1, const bool useProgressiveFilter=false); - - /** - * standrad destructore - */ - ~BasicRetinaFilter(); - - /** - * function which clears the output buffer of the object - */ - inline void clearOutputBuffer(){_filterOutput=0;}; - - /** - * function which clears the secondary buffer of the object - */ - inline void clearSecondaryBuffer(){_localBuffer=0;}; - - /** - * function which clears the output and the secondary buffer of the object - */ - inline void clearAllBuffers(){clearOutputBuffer();clearSecondaryBuffer();}; - - /** - * resize basic retina filter object (resize all allocated buffers - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - /** - * forbiden method inherited from parent std::valarray - * prefer not to use this method since the filter matrix become vectors - */ - void resize(const unsigned int){std::cerr<<"error, not accessible method"< &runFilter_LPfilter(const std::valarray &inputFrame, const unsigned int filterIndex=0); // run the LP filter for a new frame input and save result in _filterOutput - - /** - * low pass filter call and run (models the homogeneous cells network at the retina level, for example horizontal cells or photoreceptors) - * @param inputFrame: the input image to be processed - * @param outputFrame: the output buffer in which the result is writed - * @param filterIndex: the offset which specifies the parameter set that should be used for the filtering - */ - void runFilter_LPfilter(const std::valarray &inputFrame, std::valarray &outputFrame, const unsigned int filterIndex=0); // run LP filter on a specific output adress - - /** - * low pass filter call and run (models the homogeneous cells network at the retina level, for example horizontal cells or photoreceptors) - * @param inputOutputFrame: the input image to be processed on which the result is rewrited - * @param filterIndex: the offset which specifies the parameter set that should be used for the filtering - */ - void runFilter_LPfilter_Autonomous(std::valarray &inputOutputFrame, const unsigned int filterIndex=0);// run LP filter on the input data and rewrite it - - /** - * local luminance adaptation call and run (contrast enhancement property of the photoreceptors) - * @param inputOutputFrame: the input image to be processed - * @param localLuminance: an image which represents the local luminance of the inputFrame parameter, in general, it is its low pass spatial filtering - * @return the processed image, the output is reachable later by using function getOutput() - */ - const std::valarray &runFilter_LocalAdapdation(const std::valarray &inputOutputFrame, const std::valarray &localLuminance);// run local adaptation filter and save result in _filterOutput - - /** - * local luminance adaptation call and run (contrast enhancement property of the photoreceptors) - * @param inputFrame: the input image to be processed - * @param localLuminance: an image which represents the local luminance of the inputFrame parameter, in general, it is its low pass spatial filtering - * @param outputFrame: the output buffer in which the result is writed - */ - void runFilter_LocalAdapdation(const std::valarray &inputFrame, const std::valarray &localLuminance, std::valarray &outputFrame); // run local adaptation filter on a specific output adress - - /** - * local luminance adaptation call and run (contrast enhancement property of the photoreceptors) - * @param inputFrame: the input image to be processed - * @return the processed image, the output is reachable later by using function getOutput() - */ - const std::valarray &runFilter_LocalAdapdation_autonomous(const std::valarray &inputFrame);// run local adaptation filter and save result in _filterOutput - - /** - * local luminance adaptation call and run (contrast enhancement property of the photoreceptors) - * @param inputFrame: the input image to be processed - * @param outputFrame: the output buffer in which the result is writen - */ - void runFilter_LocalAdapdation_autonomous(const std::valarray &inputFrame, std::valarray &outputFrame); // run local adaptation filter on a specific output adress - - /** - * run low pass filtering with progressive parameters (models the retina log sampling of the photoreceptors and its low pass filtering effect consequence: more powerfull low pass filtering effect on the corners) - * @param inputFrame: the input image to be processed - * @param filterIndex: the index which specifies the parameter set that should be used for the filtering - * @return the processed image, the output is reachable later by using function getOutput() if outputFrame is NULL - */ - inline void runProgressiveFilter(std::valarray &inputFrame, const unsigned int filterIndex=0){_spatiotemporalLPfilter_Irregular(&inputFrame[0], filterIndex);}; - - /** - * run low pass filtering with progressive parameters (models the retina log sampling of the photoreceptors and its low pass filtering effect consequence: more powerfull low pass filtering effect on the corners) - * @param inputFrame: the input image to be processed - * @param outputFrame: the output buffer in which the result is writen - * @param filterIndex: the index which specifies the parameter set that should be used for the filtering - */ - inline void runProgressiveFilter(const std::valarray &inputFrame, - std::valarray &outputFrame, - const unsigned int filterIndex=0) - {_spatiotemporalLPfilter_Irregular(get_data(inputFrame), &outputFrame[0], filterIndex);}; - - /** - * first order spatio-temporal low pass filter setup function - * @param beta: gain of the filter (generally set to zero) - * @param tau: time constant of the filter (unit is frame for video processing) - * @param k: spatial constant of the filter (unit is pixels) - * @param filterIndex: the index which specifies the parameter set that should be used for the filtering - */ - void setLPfilterParameters(const float beta, const float tau, const float k, const unsigned int filterIndex=0); // change the parameters of the filter - - /** - * first order spatio-temporal low pass filter setup function - * @param beta: gain of the filter (generally set to zero) - * @param tau: time constant of the filter (unit is frame for video processing) - * @param alpha0: spatial constant of the filter (unit is pixels) on the border of the image - * @param filterIndex: the index which specifies the parameter set that should be used for the filtering - */ - void setProgressiveFilterConstants_CentredAccuracy(const float beta, const float tau, const float alpha0, const unsigned int filterIndex=0); - - /** - * first order spatio-temporal low pass filter setup function - * @param beta: gain of the filter (generally set to zero) - * @param tau: time constant of the filter (unit is frame for video processing) - * @param alpha0: spatial constant of the filter (unit is pixels) on the border of the image - * @param accuracyMap an image (float format) which values range is between 0 and 1, where 0 means, apply no filtering and 1 means apply the filtering as specified in the parameters set, intermediate values allow to smooth variations of the filtering strenght - * @param filterIndex: the index which specifies the parameter set that should be used for the filtering - */ - void setProgressiveFilterConstants_CustomAccuracy(const float beta, const float tau, const float alpha0, const std::valarray &accuracyMap, const unsigned int filterIndex=0); - - /** - * local luminance adaptation setup, this function should be applied for normal local adaptation (not for tone mapping operation) - * @param v0: compression effect for the local luminance adaptation processing, set a value between 0.6 and 0.9 for best results, a high value yields to a high compression effect - * @param maxInputValue: the maximum amplitude value measured after local adaptation processing (c.f. function runFilter_LocalAdapdation & runFilter_LocalAdapdation_autonomous) - * @param meanLuminance: the a priori meann luminance of the input data (should be 128 for 8bits images but can vary greatly in case of High Dynamic Range Images (HDRI) - */ - void setV0CompressionParameter(const float v0, const float maxInputValue, const float){ _v0=v0*maxInputValue; _localLuminanceFactor=v0; _localLuminanceAddon=maxInputValue*(1.0f-v0); _maxInputValue=maxInputValue;}; - - /** - * update local luminance adaptation setup, initial maxInputValue is kept. This function should be applied for normal local adaptation (not for tone mapping operation) - * @param v0: compression effect for the local luminance adaptation processing, set a value between 0.6 and 0.9 for best results, a high value yields to a high compression effect - * @param meanLuminance: the a priori meann luminance of the input data (should be 128 for 8bits images but can vary greatly in case of High Dynamic Range Images (HDRI) - */ - void setV0CompressionParameter(const float v0, const float meanLuminance){ this->setV0CompressionParameter(v0, _maxInputValue, meanLuminance);}; - - /** - * local luminance adaptation setup, this function should be applied for normal local adaptation (not for tone mapping operation) - * @param v0: compression effect for the local luminance adaptation processing, set a value between 0.6 and 0.9 for best results, a high value yields to a high compression effect - */ - void setV0CompressionParameter(const float v0){ _v0=v0*_maxInputValue; _localLuminanceFactor=v0; _localLuminanceAddon=_maxInputValue*(1.0f-v0);}; - - /** - * local luminance adaptation setup, this function should be applied for local adaptation applied to tone mapping operation - * @param v0: compression effect for the local luminance adaptation processing, set a value between 0.6 and 0.9 for best results, a high value yields to a high compression effect - * @param maxInputValue: the maximum amplitude value measured after local adaptation processing (c.f. function runFilter_LocalAdapdation & runFilter_LocalAdapdation_autonomous) - * @param meanLuminance: the a priori meann luminance of the input data (should be 128 for 8bits images but can vary greatly in case of High Dynamic Range Images (HDRI) - */ - void setV0CompressionParameterToneMapping(const float v0, const float maxInputValue, const float meanLuminance=128.0f){ _v0=v0*maxInputValue; _localLuminanceFactor=1.0f; _localLuminanceAddon=meanLuminance*_v0; _maxInputValue=maxInputValue;}; - - /** - * update compression parameters while keeping v0 parameter value - * @param meanLuminance the input frame mean luminance - */ - inline void updateCompressionParameter(const float meanLuminance){_localLuminanceFactor=1; _localLuminanceAddon=meanLuminance*_v0;}; - - /** - * @return the v0 compression parameter used to compute the local adaptation - */ - float getV0CompressionParameter(){ return _v0/_maxInputValue;}; - - /** - * @return the output result of the object - */ - inline const std::valarray &getOutput() const {return _filterOutput;}; - - /** - * @return number of rows of the filter - */ - inline unsigned int getNBrows(){return _filterOutput.getNBrows();}; - - /** - * @return number of columns of the filter - */ - inline unsigned int getNBcolumns(){return _filterOutput.getNBcolumns();}; - - /** - * @return number of pixels of the filter - */ - inline unsigned int getNBpixels(){return _filterOutput.getNBpixels();}; - - /** - * force filter output to be normalized between 0 and maxValue - * @param maxValue: the maximum output value that is required - */ - inline void normalizeGrayOutput_0_maxOutputValue(const float maxValue){_filterOutput.normalizeGrayOutput_0_maxOutputValue(maxValue);}; - - /** - * force filter output to be normalized around 0 and rescaled with a sigmoide effect (extrem values saturation) - * @param maxValue: the maximum output value that is required - */ - inline void normalizeGrayOutputCentredSigmoide(){_filterOutput.normalizeGrayOutputCentredSigmoide();}; - - /** - * force filter output to be normalized : data centering and std normalisation - * @param maxValue: the maximum output value that is required - */ - inline void centerReductImageLuminance(){_filterOutput.centerReductImageLuminance();}; - - /** - * @return the maximum input buffer value - */ - inline float getMaxInputValue(){return this->_maxInputValue;}; - - /** - * @return the maximum input buffer value - */ - inline void setMaxInputValue(const float newMaxInputValue){this->_maxInputValue=newMaxInputValue;}; - - protected: - - ///////////////////////// - // data buffers - TemplateBuffer _filterOutput; // primary buffer (contains processing outputs) - std::valarray _localBuffer; // local secondary buffer - ///////////////////////// - // PARAMETERS - unsigned int _halfNBrows; - unsigned int _halfNBcolumns; - - // parameters buffers - std::valarray _filteringCoeficientsTable; - std::valarray _progressiveSpatialConstant;// pointer to a local table containing local spatial constant (allocated with the object) - std::valarray _progressiveGain;// pointer to a local table containing local spatial constant (allocated with the object) - - // local adaptation filtering parameters - float _v0; //value used for local luminance adaptation function - float _maxInputValue; - float _meanInputValue; - float _localLuminanceFactor; - float _localLuminanceAddon; - - // protected data related to standard low pass filters parameters - float _a; - float _tau; - float _gain; - - ///////////////////////// - // FILTERS METHODS - - // Basic low pass spation temporal low pass filter used by each retina filters - void _spatiotemporalLPfilter(const float *inputFrame, float *LPfilterOutput, const unsigned int coefTableOffset=0); - float _squaringSpatiotemporalLPfilter(const float *inputFrame, float *outputFrame, const unsigned int filterIndex=0); - - // LP filter with an irregular spatial filtering - - // -> rewrites the input buffer - void _spatiotemporalLPfilter_Irregular(float *inputOutputFrame, const unsigned int filterIndex=0); - // writes the output on another buffer - void _spatiotemporalLPfilter_Irregular(const float *inputFrame, float *outputFrame, const unsigned int filterIndex=0); - // LP filter that squares the input and computes the output ONLY on the areas where the integrationAreas map are TRUE - void _localSquaringSpatioTemporalLPfilter(const float *inputFrame, float *LPfilterOutput, const unsigned int *integrationAreas, const unsigned int filterIndex=0); - - // local luminance adaptation of the input in regard of localLuminance buffer - void _localLuminanceAdaptation(const float *inputFrame, const float *localLuminance, float *outputFrame, const bool updateLuminanceMean=true); - // local luminance adaptation of the input in regard of localLuminance buffer, the input is rewrited and becomes the output - void _localLuminanceAdaptation(float *inputOutputFrame, const float *localLuminance); - // local adaptation applied on a range of values which can be positive and negative - void _localLuminanceAdaptationPosNegValues(const float *inputFrame, const float *localLuminance, float *outputFrame); - - - ////////////////////////////////////////////////////////////// - // 1D directional filters used for the 2D low pass filtering - - // 1D filters with image input - void _horizontalCausalFilter_addInput(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); - // 1D filters with image input that is squared in the function // parallelized with TBB - void _squaringHorizontalCausalFilter(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); - // vertical anticausal filter that returns the mean value of its result - float _verticalAnticausalFilter_returnMeanValue(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); - - // most simple functions: only perform 1D filtering with output=input (no add on) - void _horizontalCausalFilter(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); - void _horizontalAnticausalFilter(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); // parallelized with TBB - void _verticalCausalFilter(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); // parallelized with TBB - void _verticalAnticausalFilter(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); - - // perform 1D filtering with output with varrying spatial coefficient - void _horizontalCausalFilter_Irregular(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); - void _horizontalCausalFilter_Irregular_addInput(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd); - void _horizontalAnticausalFilter_Irregular(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd, const float *spatialConstantBuffer); // parallelized with TBB - void _verticalCausalFilter_Irregular(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd, const float *spatialConstantBuffer); // parallelized with TBB - void _verticalAnticausalFilter_Irregular_multGain(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); - - - // 1D filters in which the output is multiplied by _gain - void _verticalAnticausalFilter_multGain(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); // this functions affects _gain at the output // parallelized with TBB - void _horizontalAnticausalFilter_multGain(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd); // this functions affects _gain at the output - - // LP filter on specific parts of the picture instead of all the image - // same functions (some of them) but take a binary flag to allow integration, false flag means, 0 at the output... - void _local_squaringHorizontalCausalFilter(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd, const unsigned int *integrationAreas); - void _local_horizontalAnticausalFilter(float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd, const unsigned int *integrationAreas); - void _local_verticalCausalFilter(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd, const unsigned int *integrationAreas); - void _local_verticalAnticausalFilter_multGain(float *outputFrame, unsigned int IDcolumnStart, unsigned int IDcolumnEnd, const unsigned int *integrationAreas); // this functions affects _gain at the output - -#ifdef MAKE_PARALLEL - /****************************************************** - ** IF some parallelizing thread methods are available, then, main loops are parallelized using these functors - ** ==> main idea parallelize main filters loops, then, only the most used methods are parallelized... TODO : increase the number of parallelized methods as necessary - ** ==> functors names = Parallel_$$$ where $$$= the name of the serial method that is parallelized - ** ==> functors constructors can differ from the parameters used with their related serial functions - */ - -#define _DEBUG_TBB // define DEBUG_TBB in order to display additionnal data on stdout - class Parallel_horizontalAnticausalFilter: public cv::ParallelLoopBody - { - private: - float *outputFrame; - unsigned int IDrowEnd, nbColumns; - float filterParam_a; - public: - // constructor which takes the input image pointer reference reference and limits - Parallel_horizontalAnticausalFilter(float *bufferToProcess, const unsigned int idEnd, const unsigned int nbCols, const float a ) - :outputFrame(bufferToProcess), IDrowEnd(idEnd), nbColumns(nbCols), filterParam_a(a) - { -#ifdef DEBUG_TBB - std::cout<<"Parallel_horizontalAnticausalFilter::Parallel_horizontalAnticausalFilter :" - <<"\n\t idEnd="< initialCentres; - initialCentres.push_back(_descriptors.row(0)); - for (int i = 1; i < _descriptors.rows; i++) { - double minDist = DBL_MAX; - for (size_t j = 0; j < initialCentres.size(); j++) { - minDist = std::min(minDist, - cv::Mahalanobis(_descriptors.row(i),initialCentres[j], - icovar)); - } - if (minDist > clusterSize) - initialCentres.push_back(_descriptors.row(i)); - } - - std::vector > clusters; - clusters.resize(initialCentres.size()); - for (int i = 0; i < _descriptors.rows; i++) { - int index = 0; double dist = 0, minDist = DBL_MAX; - for (size_t j = 0; j < initialCentres.size(); j++) { - dist = cv::Mahalanobis(_descriptors.row(i),initialCentres[j],icovar); - if (dist < minDist) { - minDist = dist; - index = (int)j; - } - } - clusters[index].push_back(_descriptors.row(i)); - } - - // TODO: throw away small clusters. - - Mat vocabulary; - Mat centre = Mat::zeros(1,_descriptors.cols,_descriptors.type()); - for (size_t i = 0; i < clusters.size(); i++) { - centre.setTo(0); - for (std::list::iterator Ci = clusters[i].begin(); Ci != clusters[i].end(); Ci++) { - centre += *Ci; - } - centre /= (double)clusters[i].size(); - vocabulary.push_back(centre); - } - - return vocabulary; -} - -} - -} diff --git a/modules/contrib/src/chamfermatching.cpp b/modules/contrib/src/chamfermatching.cpp deleted file mode 100644 index 64d77cf..0000000 --- a/modules/contrib/src/chamfermatching.cpp +++ /dev/null @@ -1,1414 +0,0 @@ -/********************************************************************* - * Software License Agreement (BSD License) - * - * Copyright (c) 2008-2010, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 Willow Garage 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - *********************************************************************/ - -// -// The original code was written by -// Marius Muja -// and later modified and prepared -// for integration into OpenCV by -// Antonella Cascitelli, -// Marco Di Stefano and -// Stefano Fabri -// from Univ. of Rome -// - -#include "precomp.hpp" -#include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_HIGHGUI -# include "opencv2/highgui/highgui.hpp" -#endif -#include -#include - -namespace cv -{ - -using std::queue; - -typedef std::pair coordinate_t; -typedef float orientation_t; -typedef std::vector template_coords_t; -typedef std::vector template_orientations_t; -typedef std::pair location_scale_t; - -class ChamferMatcher -{ - -private: - class Matching; - int max_matches_; - float min_match_distance_; - - ///////////////////////// Image iterators //////////////////////////// - - class ImageIterator - { - public: - virtual ~ImageIterator() {} - virtual bool hasNext() const = 0; - virtual location_scale_t next() = 0; - }; - - class ImageRange - { - public: - virtual ImageIterator* iterator() const = 0; - virtual ~ImageRange() {} - }; - - // Sliding window - - class SlidingWindowImageRange : public ImageRange - { - int width_; - int height_; - int x_step_; - int y_step_; - int scales_; - float min_scale_; - float max_scale_; - - public: - SlidingWindowImageRange(int width, int height, int x_step = 3, int y_step = 3, int _scales = 5, float min_scale = 0.6, float max_scale = 1.6) : - width_(width), height_(height), x_step_(x_step),y_step_(y_step), scales_(_scales), min_scale_(min_scale), max_scale_(max_scale) - { - } - - - ImageIterator* iterator() const; - }; - - class LocationImageRange : public ImageRange - { - const std::vector& locations_; - - int scales_; - float min_scale_; - float max_scale_; - - LocationImageRange(const LocationImageRange&); - LocationImageRange& operator=(const LocationImageRange&); - - public: - LocationImageRange(const std::vector& locations, int _scales = 5, float min_scale = 0.6, float max_scale = 1.6) : - locations_(locations), scales_(_scales), min_scale_(min_scale), max_scale_(max_scale) - { - } - - ImageIterator* iterator() const - { - return new LocationImageIterator(locations_, scales_, min_scale_, max_scale_); - } - }; - - - class LocationScaleImageRange : public ImageRange - { - const std::vector& locations_; - const std::vector& scales_; - - LocationScaleImageRange(const LocationScaleImageRange&); - LocationScaleImageRange& operator=(const LocationScaleImageRange&); - public: - LocationScaleImageRange(const std::vector& locations, const std::vector& _scales) : - locations_(locations), scales_(_scales) - { - assert(locations.size()==_scales.size()); - } - - ImageIterator* iterator() const - { - return new LocationScaleImageIterator(locations_, scales_); - } - }; - - - - -public: - /** - * Class that represents a template for chamfer matching. - */ - class Template - { - friend class ChamferMatcher::Matching; - friend class ChamferMatcher; - - - public: - std::vector scaled_templates; - std::vector addr; - int addr_width; - float scale; - template_coords_t coords; - - template_orientations_t orientations; - Size size; - Point center; - - public: - Template() : addr_width(-1) - { - } - - Template(Mat& edge_image, float scale_ = 1); - - ~Template() - { - for (size_t i=0;i& getTemplateAddresses(int width); - }; - - - - /** - * Used to represent a matching result. - */ - - class Match - { - public: - float cost; - Point offset; - const Template* tpl; - }; - - typedef std::vector Matches; - -private: - /** - * Implements the chamfer matching algorithm on images taking into account both distance from - * the template pixels to the nearest pixels and orientation alignment between template and image - * contours. - */ - class Matching - { - float truncate_; - bool use_orientation_; - - std::vector templates; - public: - Matching(bool use_orientation = true, float _truncate = 10) : truncate_(_truncate), use_orientation_(use_orientation) - { - } - - ~Matching() - { - for (size_t i = 0; i& locations_; - - size_t iter_; - - int scales_; - float min_scale_; - float max_scale_; - - float scale_; - float scale_step_; - int scale_cnt_; - - bool has_next_; - - LocationImageIterator(const LocationImageIterator&); - LocationImageIterator& operator=(const LocationImageIterator&); - - public: - LocationImageIterator(const std::vector& locations, int _scales, float min_scale, float max_scale); - - bool hasNext() const { - return has_next_; - } - - location_scale_t next(); - }; - - class LocationScaleImageIterator : public ImageIterator - { - const std::vector& locations_; - const std::vector& scales_; - - size_t iter_; - - bool has_next_; - - LocationScaleImageIterator(const LocationScaleImageIterator&); - LocationScaleImageIterator& operator=(const LocationScaleImageIterator&); - - public: - LocationScaleImageIterator(const std::vector& locations, const std::vector& _scales) : - locations_(locations), scales_(_scales) - { - assert(locations.size()==_scales.size()); - reset(); - } - - void reset() - { - iter_ = 0; - has_next_ = (locations_.size()==0 ? false : true); - } - - bool hasNext() const { - return has_next_; - } - - location_scale_t next(); - }; - - class SlidingWindowImageIterator : public ImageIterator - { - int x_; - int y_; - float scale_; - float scale_step_; - int scale_cnt_; - - bool has_next_; - - int width_; - int height_; - int x_step_; - int y_step_; - int scales_; - float min_scale_; - float max_scale_; - - - public: - - SlidingWindowImageIterator(int width, int height, int x_step, int y_step, int scales, float min_scale, float max_scale); - - bool hasNext() const { - return has_next_; - } - - location_scale_t next(); - }; - - - - - int count; - Matches matches; - int pad_x; - int pad_y; - int scales; - float minScale; - float maxScale; - float orientation_weight; - float truncate; - Matching * chamfer_; - -public: - ChamferMatcher(int _max_matches = 20, float _min_match_distance = 1.0, int _pad_x = 3, - int _pad_y = 3, int _scales = 5, float _minScale = 0.6, float _maxScale = 1.6, - float _orientation_weight = 0.5, float _truncate = 20) - { - max_matches_ = _max_matches; - min_match_distance_ = _min_match_distance; - pad_x = _pad_x; - pad_y = _pad_y; - scales = _scales; - minScale = _minScale; - maxScale = _maxScale; - orientation_weight = _orientation_weight; - truncate = _truncate; - count = 0; - - matches.resize(max_matches_); - chamfer_ = new Matching(true); - } - - ~ChamferMatcher() - { - delete chamfer_; - } - - void showMatch(Mat& img, int index = 0); - void showMatch(Mat& img, Match match_); - - const Matches& matching(Template&, Mat&); - -private: - ChamferMatcher(const ChamferMatcher&); - ChamferMatcher& operator=(const ChamferMatcher&); - void addMatch(float cost, Point offset, const Template* tpl); - - -}; - - -///////////////////// implementation /////////////////////////// - -ChamferMatcher::SlidingWindowImageIterator::SlidingWindowImageIterator( int width, - int height, - int x_step = 3, - int y_step = 3, - int _scales = 5, - float min_scale = 0.6, - float max_scale = 1.6) : - - width_(width), - height_(height), - x_step_(x_step), - y_step_(y_step), - scales_(_scales), - min_scale_(min_scale), - max_scale_(max_scale) -{ - x_ = 0; - y_ = 0; - scale_cnt_ = 0; - scale_ = min_scale_; - has_next_ = true; - scale_step_ = (max_scale_-min_scale_)/scales_; -} - -location_scale_t ChamferMatcher::SlidingWindowImageIterator::next() -{ - location_scale_t next_val = std::make_pair(Point(x_,y_),scale_); - - x_ += x_step_; - - if (x_ >= width_) { - x_ = 0; - y_ += y_step_; - - if (y_ >= height_) { - y_ = 0; - scale_ += scale_step_; - scale_cnt_++; - - if (scale_cnt_ == scales_) { - has_next_ = false; - scale_cnt_ = 0; - scale_ = min_scale_; - } - } - } - - return next_val; -} - - - -ChamferMatcher::ImageIterator* ChamferMatcher::SlidingWindowImageRange::iterator() const -{ - return new SlidingWindowImageIterator(width_, height_, x_step_, y_step_, scales_, min_scale_, max_scale_); -} - - - -ChamferMatcher::LocationImageIterator::LocationImageIterator(const std::vector& locations, - int _scales = 5, - float min_scale = 0.6, - float max_scale = 1.6) : - locations_(locations), - scales_(_scales), - min_scale_(min_scale), - max_scale_(max_scale) -{ - iter_ = 0; - scale_cnt_ = 0; - scale_ = min_scale_; - has_next_ = (locations_.size()==0 ? false : true); - scale_step_ = (max_scale_-min_scale_)/scales_; -} - -location_scale_t ChamferMatcher::LocationImageIterator:: next() -{ - location_scale_t next_val = std::make_pair(locations_[iter_],scale_); - - iter_ ++; - if (iter_==locations_.size()) { - iter_ = 0; - scale_ += scale_step_; - scale_cnt_++; - - if (scale_cnt_ == scales_) { - has_next_ = false; - scale_cnt_ = 0; - scale_ = min_scale_; - } - } - - return next_val; -} - - -location_scale_t ChamferMatcher::LocationScaleImageIterator::next() -{ - location_scale_t next_val = std::make_pair(locations_[iter_],scales_[iter_]); - - iter_ ++; - if (iter_==locations_.size()) { - iter_ = 0; - - has_next_ = false; - } - - return next_val; -} - - - -bool ChamferMatcher::Matching::findFirstContourPoint(Mat& templ_img, coordinate_t& p) -{ - for (int y=0;y(y,x)!=0) { - p.first = x; - p.second = y; - return true; - } - } - } - return false; -} - - - -void ChamferMatcher::Matching::followContour(Mat& templ_img, template_coords_t& coords, int direction = -1) -{ - const int dir[][2] = { {-1,-1}, {-1,0}, {-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1} }; - coordinate_t next; - unsigned char ptr; - - assert (direction==-1 || !coords.empty()); - - coordinate_t crt = coords.back(); - - // mark the current pixel as visited - templ_img.at(crt.second,crt.first) = 0; - if (direction==-1) { - for (int j = 0; j<7; ++j) { - next.first = crt.first + dir[j][1]; - next.second = crt.second + dir[j][0]; - if (next.first >= 0 && next.first < templ_img.cols && - next.second >= 0 && next.second < templ_img.rows){ - ptr = templ_img.at(next.second, next.first); - if (ptr!=0) { - coords.push_back(next); - followContour(templ_img, coords,j); - // try to continue contour in the other direction - reverse(coords.begin(), coords.end()); - followContour(templ_img, coords, (j+4)%8); - break; - } - } - } - } - else { - int k = direction; - int k_cost = 3; - next.first = crt.first + dir[k][1]; - next.second = crt.second + dir[k][0]; - if (next.first >= 0 && next.first < templ_img.cols && - next.second >= 0 && next.second < templ_img.rows){ - ptr = templ_img.at(next.second, next.first); - if (ptr!=0) { - k_cost = std::abs(dir[k][1]) + std::abs(dir[k][0]); - } - int p = k; - int n = k; - - for (int j = 0 ;j<3; ++j) { - p = (p + 7) % 8; - n = (n + 1) % 8; - next.first = crt.first + dir[p][1]; - next.second = crt.second + dir[p][0]; - if (next.first >= 0 && next.first < templ_img.cols && - next.second >= 0 && next.second < templ_img.rows){ - ptr = templ_img.at(next.second, next.first); - if (ptr!=0) { - int p_cost = std::abs(dir[p][1]) + std::abs(dir[p][0]); - if (p_cost= 0 && next.first < templ_img.cols && - next.second >= 0 && next.second < templ_img.rows){ - ptr = templ_img.at(next.second, next.first); - if (ptr!=0) { - int n_cost = std::abs(dir[n][1]) + std::abs(dir[n][0]); - if (n_cost= 0 && next.first < templ_img.cols && - next.second >= 0 && next.second < templ_img.rows) { - coords.push_back(next); - followContour(templ_img, coords, k); - } - } - } - } -} - - -bool ChamferMatcher::Matching::findContour(Mat& templ_img, template_coords_t& coords) -{ - coordinate_t start_point; - - bool found = findFirstContourPoint(templ_img,start_point); - if (found) { - coords.push_back(start_point); - followContour(templ_img, coords); - return true; - } - - return false; -} - - -float ChamferMatcher::Matching::getAngle(coordinate_t a, coordinate_t b, int& dx, int& dy) -{ - dx = b.first-a.first; - dy = -(b.second-a.second); // in image coordinated Y axis points downward - float angle = atan2((float)dy,(float)dx); - - if (angle<0) { - angle+=(float)CV_PI; - } - - return angle; -} - - - -void ChamferMatcher::Matching::findContourOrientations(const template_coords_t& coords, template_orientations_t& orientations) -{ - const int M = 5; - int coords_size = (int)coords.size(); - - std::vector angles(2*M); - orientations.insert(orientations.begin(), coords_size, float(-3*CV_PI)); // mark as invalid in the beginning - - if (coords_size<2*M+1) { // if contour not long enough to estimate orientations, abort - return; - } - - for (int i=M;i0;--j) { - other = coords[i-j]; - angles[k++] = getAngle(other,crt, dx, dy); - } - // compute next M angles - for (int j=1;j<=M;++j) { - other = coords[i+j]; - angles[k++] = getAngle(crt, other, dx, dy); - } - - // get the middle two angles - std::nth_element(angles.begin(), angles.begin()+M-1, angles.end()); - std::nth_element(angles.begin()+M-1, angles.begin()+M, angles.end()); - // sort(angles.begin(), angles.end()); - - // average them to compute tangent - orientations[i] = (angles[M-1]+angles[M])/2; - } -} - -//////////////////////// Template ///////////////////////////////////// - -ChamferMatcher::Template::Template(Mat& edge_image, float scale_) : addr_width(-1), scale(scale_) -{ - template_coords_t local_coords; - template_orientations_t local_orientations; - - while (ChamferMatcher::Matching::findContour(edge_image, local_coords)) { - ChamferMatcher::Matching::findContourOrientations(local_coords, local_orientations); - - coords.insert(coords.end(), local_coords.begin(), local_coords.end()); - orientations.insert(orientations.end(), local_orientations.begin(), local_orientations.end()); - local_coords.clear(); - local_orientations.clear(); - } - - - size = edge_image.size(); - Point min, max; - min.x = size.width; - min.y = size.height; - max.x = 0; - max.y = 0; - - center = Point(0,0); - for (size_t i=0;icoords[i].first) min.x = coords[i].first; - if (min.y>coords[i].second) min.y = coords[i].second; - if (max.x& ChamferMatcher::Template::getTemplateAddresses(int width) -{ - if (addr_width!=width) { - addr.resize(coords.size()); - addr_width = width; - - for (size_t i=0; iscale-new_scale)<1e-6) { - return scaled_templates[i]; - } - } - - float scale_factor = new_scale/scale; - - Template* tpl = new Template(); - tpl->scale = new_scale; - - tpl->center.x = int(center.x*scale_factor+0.5); - tpl->center.y = int(center.y*scale_factor+0.5); - - tpl->size.width = int(size.width*scale_factor+0.5); - tpl->size.height = int(size.height*scale_factor+0.5); - - tpl->coords.resize(coords.size()); - tpl->orientations.resize(orientations.size()); - for (size_t i=0;icoords[i].first = int(coords[i].first*scale_factor+0.5); - tpl->coords[i].second = int(coords[i].second*scale_factor+0.5); - tpl->orientations[i] = orientations[i]; - } - scaled_templates.push_back(tpl); - - return tpl; - -} - - - -void ChamferMatcher::Template::show() const -{ - int pad = 50; - //Attention size is not correct - Mat templ_color (Size(size.width+(pad*2), size.height+(pad*2)), CV_8UC3); - templ_color.setTo(0); - - for (size_t i=0;i(y,x)[1]=255; - //CV_PIXEL(unsigned char, templ_color,x,y)[1] = 255; - - if (i%3==0) { - if (orientations[i] < -CV_PI) { - continue; - } - Point p1; - p1.x = x; - p1.y = y; - Point p2; - p2.x = x + pad*(int)(sin(orientations[i])*100)/100; - p2.y = y + pad*(int)(cos(orientations[i])*100)/100; - - line(templ_color, p1,p2, CV_RGB(255,0,0)); - } - } - - circle(templ_color,Point(center.x + pad, center.y + pad),1,CV_RGB(0,255,0)); - -#ifdef HAVE_OPENCV_HIGHGUI - namedWindow("templ",1); - imshow("templ",templ_color); - - cvWaitKey(0); -#else - CV_Error(CV_StsNotImplemented, "OpenCV has been compiled without GUI support"); -#endif - - templ_color.release(); -} - - -//////////////////////// Matching ///////////////////////////////////// - - -void ChamferMatcher::Matching::addTemplateFromImage(Mat& templ, float scale) -{ - Template* cmt = new Template(templ, scale); - templates.clear(); - templates.push_back(cmt); - cmt->show(); -} - -void ChamferMatcher::Matching::addTemplate(Template& template_){ - templates.clear(); - templates.push_back(&template_); -} -/** - * Alternative version of computeDistanceTransform, will probably be used to compute distance - * transform annotated with edge orientation. - */ -void ChamferMatcher::Matching::computeDistanceTransform(Mat& edges_img, Mat& dist_img, Mat& annotate_img, float truncate_dt, float a = 1.0, float b = 1.5) -{ - int d[][2] = { {-1,-1}, { 0,-1}, { 1,-1}, - {-1,0}, { 1,0}, - {-1,1}, { 0,1}, { 1,1} }; - - - Size s = edges_img.size(); - int w = s.width; - int h = s.height; - // set distance to the edge pixels to 0 and put them in the queue - std::queue > q; - - for (int y=0;y(y,x)[0]=x; - annotate_img.at(y,x)[1]=y; - } - - uchar edge_val = edges_img.at(y,x); - if( (edge_val!=0) ) { - q.push(std::make_pair(x,y)); - dist_img.at(y,x)= 0; - } - else { - dist_img.at(y,x)=-1; - } - } - } - - // breadth first computation of distance transform - std::pair crt; - while (!q.empty()) { - crt = q.front(); - q.pop(); - - int x = crt.first; - int y = crt.second; - - float dist_orig = dist_img.at(y,x); - float dist; - - for (size_t i=0;i=w || ny>=h) continue; - - if (std::abs(d[i][0]+d[i][1])==1) { - dist = (dist_orig)+a; - } - else { - dist = (dist_orig)+b; - } - - float dt = dist_img.at(ny,nx); - - if (dt==-1 || dt>dist) { - dist_img.at(ny,nx) = dist; - q.push(std::make_pair(nx,ny)); - - if (&annotate_img!=NULL) { - annotate_img.at(ny,nx)[0]=annotate_img.at(y,x)[0]; - annotate_img.at(ny,nx)[1]=annotate_img.at(y,x)[1]; - } - } - } - } - // truncate dt - - if (truncate_dt>0) { - Mat dist_img_thr = dist_img.clone(); - threshold(dist_img, dist_img_thr, truncate_dt,0.0 ,THRESH_TRUNC); - dist_img_thr.copyTo(dist_img); - } -} - - -void ChamferMatcher::Matching::computeEdgeOrientations(Mat& edge_img, Mat& orientation_img) -{ - Mat contour_img(edge_img.size(), CV_8UC1); - - orientation_img.setTo(3*(-CV_PI)); - template_coords_t coords; - template_orientations_t orientations; - - while (ChamferMatcher::Matching::findContour(edge_img, coords)) { - - ChamferMatcher::Matching::findContourOrientations(coords, orientations); - - // set orientation pixel in orientation image - for (size_t i = 0; i-CV_PI) - // { - //CV_PIXEL(unsigned char, contour_img, x, y)[0] = 255; - contour_img.at(y,x)=255; - // } - //CV_PIXEL(float, orientation_img, x, y)[0] = orientations[i]; - orientation_img.at(y,x)=orientations[i]; - } - - - coords.clear(); - orientations.clear(); - } - - //imwrite("contours.pgm", contour_img); -} - - -void ChamferMatcher::Matching::fillNonContourOrientations(Mat& annotated_img, Mat& orientation_img) -{ - int cols = annotated_img.cols; - int rows = annotated_img.rows; - - assert(orientation_img.cols==cols && orientation_img.rows==rows); - - for (int y=0;y(y,x)[0]; - int yorig = annotated_img.at(y,x)[1]; - - if (x!=xorig || y!=yorig) { - //orientation_img.at(yorig,xorig)=orientation_img.at(y,x); - orientation_img.at(y,x)=orientation_img.at(yorig,xorig); - } - } - } -} - - -ChamferMatcher::Match* ChamferMatcher::Matching::localChamferDistance(Point offset, Mat& dist_img, Mat& orientation_img, - ChamferMatcher::Template* tpl, float alpha) -{ - int x = offset.x; - int y = offset.y; - - float beta = 1-alpha; - - std::vector& addr = tpl->getTemplateAddresses(dist_img.cols); - - float* ptr = dist_img.ptr(y)+x; - - - float sum_distance = 0; - for (size_t i=0; i(y)+x; - float sum_orientation = 0; - int cnt_orientation = 0; - - for (size_t i=0;iorientations[i]>=-CV_PI && (*(optr+addr[i]))>=-CV_PI) { - sum_orientation += orientation_diff(tpl->orientations[i], (*(optr+addr[i]))); - cnt_orientation++; - } - } - } - - if (cnt_orientation>0) { - cost = (float)(beta*cost+alpha*(sum_orientation/(2*CV_PI))/cnt_orientation); - } - - } - - if(cost > 0){ - ChamferMatcher::Match* istance = new ChamferMatcher::Match(); - istance->cost = cost; - istance->offset = offset; - istance->tpl = tpl; - - return istance; - } - - return NULL; -} - - -ChamferMatcher::Matches* ChamferMatcher::Matching::matchTemplates(Mat& dist_img, Mat& orientation_img, const ImageRange& range, float _orientation_weight) -{ - - ChamferMatcher::Matches* pmatches(new Matches()); - // try each template - for(size_t i = 0; i < templates.size(); i++) { - ImageIterator* it = range.iterator(); - while (it->hasNext()) { - location_scale_t crt = it->next(); - - Point loc = crt.first; - float scale = crt.second; - Template* tpl = templates[i]->rescale(scale); - - - if (loc.x-tpl->center.x<0 || loc.x+tpl->size.width/2>=dist_img.cols) continue; - if (loc.y-tpl->center.y<0 || loc.y+tpl->size.height/2>=dist_img.rows) continue; - - ChamferMatcher::Match* is = localChamferDistance(loc, dist_img, orientation_img, tpl, _orientation_weight); - if(is) - { - pmatches->push_back(*is); - delete is; - } - } - - delete it; - } - return pmatches; -} - - - -/** - * Run matching using an edge image. - * @param edge_img Edge image - * @return a match object - */ -ChamferMatcher::Matches* ChamferMatcher::Matching::matchEdgeImage(Mat& edge_img, const ImageRange& range, - float _orientation_weight, int /*max_matches*/, float /*min_match_distance*/) -{ - CV_Assert(edge_img.channels()==1); - - Mat dist_img; - Mat annotated_img; - Mat orientation_img; - - annotated_img.create(edge_img.size(), CV_32SC2); - dist_img.create(edge_img.size(),CV_32FC1); - dist_img.setTo(0); - // Computing distance transform - computeDistanceTransform(edge_img,dist_img, annotated_img, truncate_); - - - //orientation_img = NULL; - if (use_orientation_) { - orientation_img.create(edge_img.size(), CV_32FC1); - orientation_img.setTo(0); - Mat edge_clone = edge_img.clone(); - computeEdgeOrientations(edge_clone, orientation_img ); - edge_clone.release(); - fillNonContourOrientations(annotated_img, orientation_img); - } - - - // Template matching - ChamferMatcher::Matches* pmatches = matchTemplates( dist_img, - orientation_img, - range, - _orientation_weight); - - - if (use_orientation_) { - orientation_img.release(); - } - dist_img.release(); - annotated_img.release(); - - return pmatches; -} - - -void ChamferMatcher::addMatch(float cost, Point offset, const Template* tpl) -{ - bool new_match = true; - for (int i=0; i0) { - if (matches[k-1].cost>matches[k].cost) { - std::swap(matches[k-1],matches[k]); - } - k--; - } - - break; - } - } - - if (new_match) { - // if we don't have enough matches yet, add it to the array - if (count=j) { - matches[k+1] = matches[k]; - k--; - } - - matches[j].cost = cost; - matches[j].offset = offset; - matches[j].tpl = tpl; - } - } -} - -void ChamferMatcher::showMatch(Mat& img, int index) -{ - if (index>=count) { - std::cout << "Index too big.\n" << std::endl; - } - - assert(img.channels()==3); - - Match match = matches[index]; - - const template_coords_t& templ_coords = match.tpl->coords; - int x, y; - for (size_t i=0;i img.cols-1 || x < 0 || y > img.rows-1 || y < 0) continue; - img.at(y,x)[0]=0; - img.at(y,x)[2]=0; - img.at(y,x)[1]=255; - } -} - -void ChamferMatcher::showMatch(Mat& img, Match match) -{ - assert(img.channels()==3); - - const template_coords_t& templ_coords = match.tpl->coords; - for (size_t i=0;i img.cols-1 || x < 0 || y > img.rows-1 || y < 0) continue; - img.at(y,x)[0]=0; - img.at(y,x)[2]=0; - img.at(y,x)[1]=255; - } - match.tpl->show(); -} - -const ChamferMatcher::Matches& ChamferMatcher::matching(Template& tpl, Mat& image_){ - chamfer_->addTemplate(tpl); - - matches.clear(); - matches.resize(max_matches_); - count = 0; - - - Matches* matches_ = chamfer_->matchEdgeImage( image_, - ChamferMatcher:: - SlidingWindowImageRange(image_.cols, - image_.rows, - pad_x, - pad_y, - scales, - minScale, - maxScale), - orientation_weight, - max_matches_, - min_match_distance_); - - - - for(int i = 0; i < (int)matches_->size(); i++){ - addMatch(matches_->at(i).cost, matches_->at(i).offset, matches_->at(i).tpl); - } - - matches_->clear(); - delete matches_; - matches_ = NULL; - - matches.resize(count); - - - return matches; - -} - - -int chamerMatching( Mat& img, Mat& templ, - std::vector >& results, std::vector& costs, - double templScale, int maxMatches, double minMatchDistance, int padX, - int padY, int scales, double minScale, double maxScale, - double orientationWeight, double truncate ) -{ - CV_Assert(img.type() == CV_8UC1 && templ.type() == CV_8UC1); - - ChamferMatcher matcher_(maxMatches, (float)minMatchDistance, padX, padY, scales, - (float)minScale, (float)maxScale, - (float)orientationWeight, (float)truncate); - - ChamferMatcher::Template template_(templ, (float)templScale); - ChamferMatcher::Matches match_instances = matcher_.matching(template_, img); - - size_t i, nmatches = match_instances.size(); - - results.resize(nmatches); - costs.resize(nmatches); - - int bestIdx = -1; - double minCost = DBL_MAX; - - for( i = 0; i < nmatches; i++ ) - { - const ChamferMatcher::Match& match = match_instances[i]; - double cval = match.cost; - if( cval < minCost) - { - minCost = cval; - bestIdx = (int)i; - } - costs[i] = (float)cval; - - const template_coords_t& templ_coords = match.tpl->coords; - std::vector& templPoints = results[i]; - size_t j, npoints = templ_coords.size(); - templPoints.resize(npoints); - - for (j = 0; j < npoints; j++ ) - { - int x = match.offset.x + templ_coords[j].first; - int y = match.offset.y + templ_coords[j].second; - templPoints[j] = Point(x,y); - } - } - - return bestIdx; -} - -} diff --git a/modules/contrib/src/chowliutree.cpp b/modules/contrib/src/chowliutree.cpp deleted file mode 100644 index 64417d1..0000000 --- a/modules/contrib/src/chowliutree.cpp +++ /dev/null @@ -1,289 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// This file originates from the openFABMAP project: -// [http://code.google.com/p/openfabmap/] -// -// For published work which uses all or part of OpenFABMAP, please cite: -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6224843] -// -// Original Algorithm by Mark Cummins and Paul Newman: -// [http://ijr.sagepub.com/content/27/6/647.short] -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942] -// [http://ijr.sagepub.com/content/30/9/1100.abstract] -// -// License Agreement -// -// Copyright (C) 2012 Arren Glover [aj.glover@qut.edu.au] and -// Will Maddern [w.maddern@qut.edu.au], all rights reserved. -// -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/contrib/openfabmap.hpp" - -namespace cv { - -namespace of2 { - -ChowLiuTree::ChowLiuTree() { -} - -ChowLiuTree::~ChowLiuTree() { -} - -void ChowLiuTree::add(const Mat& imgDescriptor) { - CV_Assert(!imgDescriptor.empty()); - if (!imgDescriptors.empty()) { - CV_Assert(imgDescriptors[0].cols == imgDescriptor.cols); - CV_Assert(imgDescriptors[0].type() == imgDescriptor.type()); - } - - imgDescriptors.push_back(imgDescriptor); - -} - -void ChowLiuTree::add(const vector& _imgDescriptors) { - for (size_t i = 0; i < _imgDescriptors.size(); i++) { - add(_imgDescriptors[i]); - } -} - -const std::vector& ChowLiuTree::getImgDescriptors() const { - return imgDescriptors; -} - -Mat ChowLiuTree::make(double infoThreshold) { - CV_Assert(!imgDescriptors.empty()); - - unsigned int descCount = 0; - for (size_t i = 0; i < imgDescriptors.size(); i++) - descCount += imgDescriptors[i].rows; - - mergedImgDescriptors = cv::Mat(descCount, imgDescriptors[0].cols, - imgDescriptors[0].type()); - for (size_t i = 0, start = 0; i < imgDescriptors.size(); i++) - { - Mat submut = mergedImgDescriptors.rowRange((int)start, - (int)(start + imgDescriptors[i].rows)); - imgDescriptors[i].copyTo(submut); - start += imgDescriptors[i].rows; - } - - std::list edges; - createBaseEdges(edges, infoThreshold); - - // TODO: if it cv_asserts here they really won't know why. - - CV_Assert(reduceEdgesToMinSpan(edges)); - - return buildTree(edges.front().word1, edges); -} - -double ChowLiuTree::P(int a, bool za) { - - if(za) { - return (0.98 * cv::countNonZero(mergedImgDescriptors.col(a)) / - mergedImgDescriptors.rows) + 0.01; - } else { - return 1 - ((0.98 * cv::countNonZero(mergedImgDescriptors.col(a)) / - mergedImgDescriptors.rows) + 0.01); - } - -} -double ChowLiuTree::JP(int a, bool za, int b, bool zb) { - - double count = 0; - for(int i = 0; i < mergedImgDescriptors.rows; i++) { - if((mergedImgDescriptors.at(i,a) > 0) == za && - (mergedImgDescriptors.at(i,b) > 0) == zb) { - count++; - } - } - return count / mergedImgDescriptors.rows; - -} -double ChowLiuTree::CP(int a, bool za, int b, bool zb){ - - int count = 0, total = 0; - for(int i = 0; i < mergedImgDescriptors.rows; i++) { - if((mergedImgDescriptors.at(i,b) > 0) == zb) { - total++; - if((mergedImgDescriptors.at(i,a) > 0) == za) { - count++; - } - } - } - if(total) { - return (double)(0.98 * count)/total + 0.01; - } else { - return (za) ? 0.01 : 0.99; - } -} - -cv::Mat ChowLiuTree::buildTree(int root_word, std::list &edges) { - - int q = root_word; - cv::Mat cltree(4, (int)edges.size()+1, CV_64F); - - cltree.at(0, q) = q; - cltree.at(1, q) = P(q, true); - cltree.at(2, q) = P(q, true); - cltree.at(3, q) = P(q, true); - //setting P(zq|zpq) to P(zq) gives the root node of the chow-liu - //independence from a parent node. - - //find all children and do the same - vector nextqs = extractChildren(edges, q); - - int pq = q; - vector::iterator nextq; - for(nextq = nextqs.begin(); nextq != nextqs.end(); nextq++) { - recAddToTree(cltree, *nextq, pq, edges); - } - - return cltree; - - -} - -void ChowLiuTree::recAddToTree(cv::Mat &cltree, int q, int pq, - std::list& remaining_edges) { - - cltree.at(0, q) = pq; - cltree.at(1, q) = P(q, true); - cltree.at(2, q) = CP(q, true, pq, true); - cltree.at(3, q) = CP(q, true, pq, false); - - //find all children and do the same - vector nextqs = extractChildren(remaining_edges, q); - - pq = q; - vector::iterator nextq; - for(nextq = nextqs.begin(); nextq != nextqs.end(); nextq++) { - recAddToTree(cltree, *nextq, pq, remaining_edges); - } -} - -vector ChowLiuTree::extractChildren(std::list &remaining_edges, int q) { - - std::vector children; - std::list::iterator edge = remaining_edges.begin(); - - while(edge != remaining_edges.end()) { - if(edge->word1 == q) { - children.push_back(edge->word2); - edge = remaining_edges.erase(edge); - continue; - } - if(edge->word2 == q) { - children.push_back(edge->word1); - edge = remaining_edges.erase(edge); - continue; - } - edge++; - } - - return children; -} - -bool ChowLiuTree::sortInfoScores(const info& first, const info& second) { - return first.score > second.score; -} - -double ChowLiuTree::calcMutInfo(int word1, int word2) { - double accumulation = 0; - - double P00 = JP(word1, false, word2, false); - if(P00) accumulation += P00 * log(P00 / (P(word1, false)*P(word2, false))); - - double P01 = JP(word1, false, word2, true); - if(P01) accumulation += P01 * log(P01 / (P(word1, false)*P(word2, true))); - - double P10 = JP(word1, true, word2, false); - if(P10) accumulation += P10 * log(P10 / (P(word1, true)*P(word2, false))); - - double P11 = JP(word1, true, word2, true); - if(P11) accumulation += P11 * log(P11 / (P(word1, true)*P(word2, true))); - - return accumulation; -} - -void ChowLiuTree::createBaseEdges(std::list& edges, double infoThreshold) { - - int nWords = imgDescriptors[0].cols; - info mutInfo; - - for(int word1 = 0; word1 < nWords; word1++) { - for(int word2 = word1 + 1; word2 < nWords; word2++) { - mutInfo.word1 = (short)word1; - mutInfo.word2 = (short)word2; - mutInfo.score = (float)calcMutInfo(word1, word2); - if(mutInfo.score >= infoThreshold) - edges.push_back(mutInfo); - } - } - edges.sort(sortInfoScores); -} - -bool ChowLiuTree::reduceEdgesToMinSpan(std::list& edges) { - - std::map groups; - std::map::iterator groupIt; - for(int i = 0; i < imgDescriptors[0].cols; i++) groups[i] = i; - int group1, group2; - - std::list::iterator edge = edges.begin(); - while(edge != edges.end()) { - if(groups[edge->word1] != groups[edge->word2]) { - group1 = groups[edge->word1]; - group2 = groups[edge->word2]; - for(groupIt = groups.begin(); groupIt != groups.end(); groupIt++) - if(groupIt->second == group2) groupIt->second = group1; - edge++; - } else { - edge = edges.erase(edge); - } - } - - if(edges.size() != (unsigned int)imgDescriptors[0].cols - 1) { - return false; - } else { - return true; - } - -} - -} - -} diff --git a/modules/contrib/src/colormap.cpp b/modules/contrib/src/colormap.cpp deleted file mode 100644 index bb317f7..0000000 --- a/modules/contrib/src/colormap.cpp +++ /dev/null @@ -1,530 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ -#include "precomp.hpp" -#include - -#ifdef _MSC_VER -#pragma warning( disable: 4305 ) -#endif - -namespace cv -{ - -static Mat linspace(float x0, float x1, int n) -{ - Mat pts(n, 1, CV_32FC1); - float step = (x1-x0)/(n-1); - for(int i = 0; i < n; i++) - pts.at(i,0) = x0+i*step; - return pts; -} - -//------------------------------------------------------------------------------ -// cv::sortMatrixRowsByIndices -//------------------------------------------------------------------------------ -static void sortMatrixRowsByIndices(InputArray _src, InputArray _indices, OutputArray _dst) -{ - if(_indices.getMat().type() != CV_32SC1) - CV_Error(CV_StsUnsupportedFormat, "cv::sortRowsByIndices only works on integer indices!"); - Mat src = _src.getMat(); - vector indices = _indices.getMat(); - _dst.create(src.rows, src.cols, src.type()); - Mat dst = _dst.getMat(); - for(size_t idx = 0; idx < indices.size(); idx++) { - Mat originalRow = src.row(indices[idx]); - Mat sortedRow = dst.row((int)idx); - originalRow.copyTo(sortedRow); - } -} - -static Mat sortMatrixRowsByIndices(InputArray src, InputArray indices) -{ - Mat dst; - sortMatrixRowsByIndices(src, indices, dst); - return dst; -} - - -static Mat argsort(InputArray _src, bool ascending=true) -{ - Mat src = _src.getMat(); - if (src.rows != 1 && src.cols != 1) - CV_Error(CV_StsBadArg, "cv::argsort only sorts 1D matrices."); - int flags = CV_SORT_EVERY_ROW+(ascending ? CV_SORT_ASCENDING : CV_SORT_DESCENDING); - Mat sorted_indices; - sortIdx(src.reshape(1,1),sorted_indices,flags); - return sorted_indices; -} - -template static -Mat interp1_(const Mat& X_, const Mat& Y_, const Mat& XI) -{ - int n = XI.rows; - // sort input table - vector sort_indices = argsort(X_); - - Mat X = sortMatrixRowsByIndices(X_,sort_indices); - Mat Y = sortMatrixRowsByIndices(Y_,sort_indices); - // interpolated values - Mat yi = Mat::zeros(XI.size(), XI.type()); - for(int i = 0; i < n; i++) { - int c = 0; - int low = 0; - int high = X.rows - 1; - // set bounds - if(XI.at<_Tp>(i,0) < X.at<_Tp>(low, 0)) - high = 1; - if(XI.at<_Tp>(i,0) > X.at<_Tp>(high, 0)) - low = high - 1; - // binary search - while((high-low)>1) { - c = low + ((high - low) >> 1); - if(XI.at<_Tp>(i,0) > X.at<_Tp>(c,0)) { - low = c; - } else { - high = c; - } - } - // linear interpolation - yi.at<_Tp>(i,0) += Y.at<_Tp>(low,0) - + (XI.at<_Tp>(i,0) - X.at<_Tp>(low,0)) - * (Y.at<_Tp>(high,0) - Y.at<_Tp>(low,0)) - / (X.at<_Tp>(high,0) - X.at<_Tp>(low,0)); - } - return yi; -} - -static Mat interp1(InputArray _x, InputArray _Y, InputArray _xi) -{ - // get matrices - Mat x = _x.getMat(); - Mat Y = _Y.getMat(); - Mat xi = _xi.getMat(); - // check types & alignment - assert((x.type() == Y.type()) && (Y.type() == xi.type())); - assert((x.cols == 1) && (x.rows == Y.rows) && (x.cols == Y.cols)); - // call templated interp1 - switch(x.type()) { - case CV_8SC1: return interp1_(x,Y,xi); break; - case CV_8UC1: return interp1_(x,Y,xi); break; - case CV_16SC1: return interp1_(x,Y,xi); break; - case CV_16UC1: return interp1_(x,Y,xi); break; - case CV_32SC1: return interp1_(x,Y,xi); break; - case CV_32FC1: return interp1_(x,Y,xi); break; - case CV_64FC1: return interp1_(x,Y,xi); break; - default: CV_Error(CV_StsUnsupportedFormat, ""); break; - } - return Mat(); -} - -namespace colormap -{ - - class ColorMap { - - protected: - Mat _lut; - - public: - virtual ~ColorMap() {} - - // Applies the colormap on a given image. - // - // This function expects BGR-aligned data of type CV_8UC1 or - // CV_8UC3. If the wrong image type is given, the original image - // will be returned. - // - // Throws an error for wrong-aligned lookup table, which must be - // of size 256 in the latest OpenCV release (2.3.1). - void operator()(InputArray src, OutputArray dst) const; - - // Setup base map to interpolate from. - virtual void init(int n) = 0; - - // Interpolates from a base colormap. - static Mat linear_colormap(InputArray X, - InputArray r, InputArray g, InputArray b, - int n) { - return linear_colormap(X,r,g,b,linspace(0,1,n)); - } - - // Interpolates from a base colormap. - static Mat linear_colormap(InputArray X, - InputArray r, InputArray g, InputArray b, - float begin, float end, float n) { - return linear_colormap(X,r,g,b,linspace(begin,end, cvRound(n))); - } - - // Interpolates from a base colormap. - static Mat linear_colormap(InputArray X, - InputArray r, InputArray g, InputArray b, - InputArray xi); - }; - - // Equals the GNU Octave colormap "autumn". - class Autumn : public ColorMap { - public: - Autumn() : ColorMap() { - init(256); - } - - Autumn(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - float g[] = { 0, 0.01587301587301587, 0.03174603174603174, 0.04761904761904762, 0.06349206349206349, 0.07936507936507936, 0.09523809523809523, 0.1111111111111111, 0.126984126984127, 0.1428571428571428, 0.1587301587301587, 0.1746031746031746, 0.1904761904761905, 0.2063492063492063, 0.2222222222222222, 0.2380952380952381, 0.253968253968254, 0.2698412698412698, 0.2857142857142857, 0.3015873015873016, 0.3174603174603174, 0.3333333333333333, 0.3492063492063492, 0.3650793650793651, 0.3809523809523809, 0.3968253968253968, 0.4126984126984127, 0.4285714285714285, 0.4444444444444444, 0.4603174603174603, 0.4761904761904762, 0.492063492063492, 0.5079365079365079, 0.5238095238095238, 0.5396825396825397, 0.5555555555555556, 0.5714285714285714, 0.5873015873015873, 0.6031746031746031, 0.6190476190476191, 0.6349206349206349, 0.6507936507936508, 0.6666666666666666, 0.6825396825396826, 0.6984126984126984, 0.7142857142857143, 0.7301587301587301, 0.746031746031746, 0.7619047619047619, 0.7777777777777778, 0.7936507936507936, 0.8095238095238095, 0.8253968253968254, 0.8412698412698413, 0.8571428571428571, 0.873015873015873, 0.8888888888888888, 0.9047619047619048, 0.9206349206349206, 0.9365079365079365, 0.9523809523809523, 0.9682539682539683, 0.9841269841269841, 1}; - float b[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "bone". - class Bone : public ColorMap { - public: - Bone() : ColorMap() { - init(256); - } - - Bone(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0.01388888888888889, 0.02777777777777778, 0.04166666666666666, 0.05555555555555555, 0.06944444444444445, 0.08333333333333333, 0.09722222222222221, 0.1111111111111111, 0.125, 0.1388888888888889, 0.1527777777777778, 0.1666666666666667, 0.1805555555555556, 0.1944444444444444, 0.2083333333333333, 0.2222222222222222, 0.2361111111111111, 0.25, 0.2638888888888889, 0.2777777777777778, 0.2916666666666666, 0.3055555555555555, 0.3194444444444444, 0.3333333333333333, 0.3472222222222222, 0.3611111111111111, 0.375, 0.3888888888888888, 0.4027777777777777, 0.4166666666666666, 0.4305555555555555, 0.4444444444444444, 0.4583333333333333, 0.4722222222222222, 0.4861111111111112, 0.5, 0.5138888888888888, 0.5277777777777778, 0.5416666666666667, 0.5555555555555556, 0.5694444444444444, 0.5833333333333333, 0.5972222222222222, 0.611111111111111, 0.6249999999999999, 0.6388888888888888, 0.6527777777777778, 0.6726190476190474, 0.6944444444444442, 0.7162698412698412, 0.7380952380952381, 0.7599206349206349, 0.7817460317460316, 0.8035714285714286, 0.8253968253968254, 0.8472222222222221, 0.8690476190476188, 0.8908730158730158, 0.9126984126984128, 0.9345238095238095, 0.9563492063492063, 0.978174603174603, 1}; - float g[] = { 0, 0.01388888888888889, 0.02777777777777778, 0.04166666666666666, 0.05555555555555555, 0.06944444444444445, 0.08333333333333333, 0.09722222222222221, 0.1111111111111111, 0.125, 0.1388888888888889, 0.1527777777777778, 0.1666666666666667, 0.1805555555555556, 0.1944444444444444, 0.2083333333333333, 0.2222222222222222, 0.2361111111111111, 0.25, 0.2638888888888889, 0.2777777777777778, 0.2916666666666666, 0.3055555555555555, 0.3194444444444444, 0.3353174603174602, 0.3544973544973544, 0.3736772486772486, 0.3928571428571428, 0.412037037037037, 0.4312169312169312, 0.4503968253968254, 0.4695767195767195, 0.4887566137566137, 0.5079365079365078, 0.5271164021164021, 0.5462962962962963, 0.5654761904761904, 0.5846560846560845, 0.6038359788359787, 0.623015873015873, 0.6421957671957671, 0.6613756613756612, 0.6805555555555555, 0.6997354497354497, 0.7189153439153438, 0.7380952380952379, 0.7572751322751322, 0.7764550264550264, 0.7916666666666666, 0.8055555555555555, 0.8194444444444444, 0.8333333333333334, 0.8472222222222222, 0.861111111111111, 0.875, 0.8888888888888888, 0.9027777777777777, 0.9166666666666665, 0.9305555555555555, 0.9444444444444444, 0.9583333333333333, 0.9722222222222221, 0.986111111111111, 1}; - float b[] = { 0, 0.01917989417989418, 0.03835978835978836, 0.05753968253968253, 0.07671957671957672, 0.09589947089947089, 0.1150793650793651, 0.1342592592592592, 0.1534391534391534, 0.1726190476190476, 0.1917989417989418, 0.210978835978836, 0.2301587301587301, 0.2493386243386243, 0.2685185185185185, 0.2876984126984127, 0.3068783068783069, 0.326058201058201, 0.3452380952380952, 0.3644179894179894, 0.3835978835978835, 0.4027777777777777, 0.4219576719576719, 0.4411375661375661, 0.4583333333333333, 0.4722222222222222, 0.4861111111111111, 0.5, 0.5138888888888888, 0.5277777777777777, 0.5416666666666666, 0.5555555555555556, 0.5694444444444444, 0.5833333333333333, 0.5972222222222222, 0.6111111111111112, 0.625, 0.6388888888888888, 0.6527777777777778, 0.6666666666666667, 0.6805555555555556, 0.6944444444444444, 0.7083333333333333, 0.7222222222222222, 0.736111111111111, 0.7499999999999999, 0.7638888888888888, 0.7777777777777778, 0.7916666666666666, 0.8055555555555555, 0.8194444444444444, 0.8333333333333334, 0.8472222222222222, 0.861111111111111, 0.875, 0.8888888888888888, 0.9027777777777777, 0.9166666666666665, 0.9305555555555555, 0.9444444444444444, 0.9583333333333333, 0.9722222222222221, 0.986111111111111, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - - - - // Equals the GNU Octave colormap "jet". - class Jet : public ColorMap { - - public: - Jet() { - init(256); - } - Jet(int n) : ColorMap() { - init(n); - } - - void init(int n) { - // breakpoints - Mat X = linspace(0,1,256); - // define the basemap - float r[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00588235294117645,0.02156862745098032,0.03725490196078418,0.05294117647058827,0.06862745098039214,0.084313725490196,0.1000000000000001,0.115686274509804,0.1313725490196078,0.1470588235294117,0.1627450980392156,0.1784313725490196,0.1941176470588235,0.2098039215686274,0.2254901960784315,0.2411764705882353,0.2568627450980392,0.2725490196078431,0.2882352941176469,0.303921568627451,0.3196078431372549,0.3352941176470587,0.3509803921568628,0.3666666666666667,0.3823529411764706,0.3980392156862744,0.4137254901960783,0.4294117647058824,0.4450980392156862,0.4607843137254901,0.4764705882352942,0.4921568627450981,0.5078431372549019,0.5235294117647058,0.5392156862745097,0.5549019607843135,0.5705882352941174,0.5862745098039217,0.6019607843137256,0.6176470588235294,0.6333333333333333,0.6490196078431372,0.664705882352941,0.6803921568627449,0.6960784313725492,0.7117647058823531,0.7274509803921569,0.7431372549019608,0.7588235294117647,0.7745098039215685,0.7901960784313724,0.8058823529411763,0.8215686274509801,0.8372549019607844,0.8529411764705883,0.8686274509803922,0.884313725490196,0.8999999999999999,0.9156862745098038,0.9313725490196076,0.947058823529412,0.9627450980392158,0.9784313725490197,0.9941176470588236,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9862745098039216,0.9705882352941178,0.9549019607843139,0.93921568627451,0.9235294117647062,0.9078431372549018,0.892156862745098,0.8764705882352941,0.8607843137254902,0.8450980392156864,0.8294117647058825,0.8137254901960786,0.7980392156862743,0.7823529411764705,0.7666666666666666,0.7509803921568627,0.7352941176470589,0.719607843137255,0.7039215686274511,0.6882352941176473,0.6725490196078434,0.6568627450980391,0.6411764705882352,0.6254901960784314,0.6098039215686275,0.5941176470588236,0.5784313725490198,0.5627450980392159,0.5470588235294116,0.5313725490196077,0.5156862745098039,0.5}; - float g[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001960784313725483,0.01764705882352935,0.03333333333333333,0.0490196078431373,0.06470588235294117,0.08039215686274503,0.09607843137254901,0.111764705882353,0.1274509803921569,0.1431372549019607,0.1588235294117647,0.1745098039215687,0.1901960784313725,0.2058823529411764,0.2215686274509804,0.2372549019607844,0.2529411764705882,0.2686274509803921,0.2843137254901961,0.3,0.3156862745098039,0.3313725490196078,0.3470588235294118,0.3627450980392157,0.3784313725490196,0.3941176470588235,0.4098039215686274,0.4254901960784314,0.4411764705882353,0.4568627450980391,0.4725490196078431,0.4882352941176471,0.503921568627451,0.5196078431372548,0.5352941176470587,0.5509803921568628,0.5666666666666667,0.5823529411764705,0.5980392156862746,0.6137254901960785,0.6294117647058823,0.6450980392156862,0.6607843137254901,0.6764705882352942,0.692156862745098,0.7078431372549019,0.723529411764706,0.7392156862745098,0.7549019607843137,0.7705882352941176,0.7862745098039214,0.8019607843137255,0.8176470588235294,0.8333333333333333,0.8490196078431373,0.8647058823529412,0.8803921568627451,0.8960784313725489,0.9117647058823528,0.9274509803921569,0.9431372549019608,0.9588235294117646,0.9745098039215687,0.9901960784313726,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9901960784313726,0.9745098039215687,0.9588235294117649,0.943137254901961,0.9274509803921571,0.9117647058823528,0.8960784313725489,0.8803921568627451,0.8647058823529412,0.8490196078431373,0.8333333333333335,0.8176470588235296,0.8019607843137253,0.7862745098039214,0.7705882352941176,0.7549019607843137,0.7392156862745098,0.723529411764706,0.7078431372549021,0.6921568627450982,0.6764705882352944,0.6607843137254901,0.6450980392156862,0.6294117647058823,0.6137254901960785,0.5980392156862746,0.5823529411764707,0.5666666666666669,0.5509803921568626,0.5352941176470587,0.5196078431372548,0.503921568627451,0.4882352941176471,0.4725490196078432,0.4568627450980394,0.4411764705882355,0.4254901960784316,0.4098039215686273,0.3941176470588235,0.3784313725490196,0.3627450980392157,0.3470588235294119,0.331372549019608,0.3156862745098041,0.2999999999999998,0.284313725490196,0.2686274509803921,0.2529411764705882,0.2372549019607844,0.2215686274509805,0.2058823529411766,0.1901960784313728,0.1745098039215689,0.1588235294117646,0.1431372549019607,0.1274509803921569,0.111764705882353,0.09607843137254912,0.08039215686274526,0.06470588235294139,0.04901960784313708,0.03333333333333321,0.01764705882352935,0.001960784313725483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - float b[] = {0.5,0.5156862745098039,0.5313725490196078,0.5470588235294118,0.5627450980392157,0.5784313725490196,0.5941176470588235,0.6098039215686275,0.6254901960784314,0.6411764705882352,0.6568627450980392,0.6725490196078432,0.6882352941176471,0.7039215686274509,0.7196078431372549,0.7352941176470589,0.7509803921568627,0.7666666666666666,0.7823529411764706,0.7980392156862746,0.8137254901960784,0.8294117647058823,0.8450980392156863,0.8607843137254902,0.8764705882352941,0.892156862745098,0.907843137254902,0.9235294117647059,0.9392156862745098,0.9549019607843137,0.9705882352941176,0.9862745098039216,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9941176470588236,0.9784313725490197,0.9627450980392158,0.9470588235294117,0.9313725490196079,0.915686274509804,0.8999999999999999,0.884313725490196,0.8686274509803922,0.8529411764705883,0.8372549019607844,0.8215686274509804,0.8058823529411765,0.7901960784313726,0.7745098039215685,0.7588235294117647,0.7431372549019608,0.7274509803921569,0.7117647058823531,0.696078431372549,0.6803921568627451,0.6647058823529413,0.6490196078431372,0.6333333333333333,0.6176470588235294,0.6019607843137256,0.5862745098039217,0.5705882352941176,0.5549019607843138,0.5392156862745099,0.5235294117647058,0.5078431372549019,0.4921568627450981,0.4764705882352942,0.4607843137254903,0.4450980392156865,0.4294117647058826,0.4137254901960783,0.3980392156862744,0.3823529411764706,0.3666666666666667,0.3509803921568628,0.335294117647059,0.3196078431372551,0.3039215686274508,0.2882352941176469,0.2725490196078431,0.2568627450980392,0.2411764705882353,0.2254901960784315,0.2098039215686276,0.1941176470588237,0.1784313725490199,0.1627450980392156,0.1470588235294117,0.1313725490196078,0.115686274509804,0.1000000000000001,0.08431372549019622,0.06862745098039236,0.05294117647058805,0.03725490196078418,0.02156862745098032,0.00588235294117645,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - // now build lookup table - this->_lut = ColorMap::linear_colormap(X, - Mat(256,1, CV_32FC1, r).clone(), // red - Mat(256,1, CV_32FC1, g).clone(), // green - Mat(256,1, CV_32FC1, b).clone(), // blue - n); - } - }; - - // Equals the GNU Octave colormap "winter". - class Winter : public ColorMap { - public: - Winter() : ColorMap() { - init(256); - } - - Winter(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - float g[] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}; - float b[] = {1.0, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.65, 0.6, 0.55, 0.5}; - Mat X = linspace(0,1,11); - this->_lut = ColorMap::linear_colormap(X, - Mat(11,1, CV_32FC1, r).clone(), // red - Mat(11,1, CV_32FC1, g).clone(), // green - Mat(11,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "rainbow". - class Rainbow : public ColorMap { - public: - Rainbow() : ColorMap() { - init(256); - } - - Rainbow(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9365079365079367, 0.8571428571428572, 0.7777777777777777, 0.6984126984126986, 0.6190476190476191, 0.53968253968254, 0.4603174603174605, 0.3809523809523814, 0.3015873015873018, 0.2222222222222223, 0.1428571428571432, 0.06349206349206415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03174603174603208, 0.08465608465608465, 0.1375661375661377, 0.1904761904761907, 0.2433862433862437, 0.2962962962962963, 0.3492063492063493, 0.4021164021164023, 0.4550264550264553, 0.5079365079365079, 0.5608465608465609, 0.6137566137566139, 0.666666666666667}; - float g[] = { 0, 0.03968253968253968, 0.07936507936507936, 0.119047619047619, 0.1587301587301587, 0.1984126984126984, 0.2380952380952381, 0.2777777777777778, 0.3174603174603174, 0.3571428571428571, 0.3968253968253968, 0.4365079365079365, 0.4761904761904762, 0.5158730158730158, 0.5555555555555556, 0.5952380952380952, 0.6349206349206349, 0.6746031746031745, 0.7142857142857142, 0.753968253968254, 0.7936507936507936, 0.8333333333333333, 0.873015873015873, 0.9126984126984127, 0.9523809523809523, 0.992063492063492, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9841269841269842, 0.9047619047619047, 0.8253968253968256, 0.7460317460317465, 0.666666666666667, 0.587301587301587, 0.5079365079365079, 0.4285714285714288, 0.3492063492063493, 0.2698412698412698, 0.1904761904761907, 0.1111111111111116, 0.03174603174603208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - float b[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01587301587301582, 0.09523809523809534, 0.1746031746031744, 0.2539682539682535, 0.333333333333333, 0.412698412698413, 0.4920634920634921, 0.5714285714285712, 0.6507936507936507, 0.7301587301587302, 0.8095238095238093, 0.8888888888888884, 0.9682539682539679, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "ocean". - class Ocean : public ColorMap { - public: - Ocean() : ColorMap() { - init(256); - } - - Ocean(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.04761904761904762, 0.09523809523809523, 0.1428571428571428, 0.1904761904761905, 0.2380952380952381, 0.2857142857142857, 0.3333333333333333, 0.3809523809523809, 0.4285714285714285, 0.4761904761904762, 0.5238095238095238, 0.5714285714285714, 0.6190476190476191, 0.6666666666666666, 0.7142857142857143, 0.7619047619047619, 0.8095238095238095, 0.8571428571428571, 0.9047619047619048, 0.9523809523809523, 1}; - float g[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02380952380952381, 0.04761904761904762, 0.07142857142857142, 0.09523809523809523, 0.119047619047619, 0.1428571428571428, 0.1666666666666667, 0.1904761904761905, 0.2142857142857143, 0.2380952380952381, 0.2619047619047619, 0.2857142857142857, 0.3095238095238095, 0.3333333333333333, 0.3571428571428572, 0.3809523809523809, 0.4047619047619048, 0.4285714285714285, 0.4523809523809524, 0.4761904761904762, 0.5, 0.5238095238095238, 0.5476190476190477, 0.5714285714285714, 0.5952380952380952, 0.6190476190476191, 0.6428571428571429, 0.6666666666666666, 0.6904761904761905, 0.7142857142857143, 0.7380952380952381, 0.7619047619047619, 0.7857142857142857, 0.8095238095238095, 0.8333333333333334, 0.8571428571428571, 0.8809523809523809, 0.9047619047619048, 0.9285714285714286, 0.9523809523809523, 0.9761904761904762, 1}; - float b[] = { 0, 0.01587301587301587, 0.03174603174603174, 0.04761904761904762, 0.06349206349206349, 0.07936507936507936, 0.09523809523809523, 0.1111111111111111, 0.126984126984127, 0.1428571428571428, 0.1587301587301587, 0.1746031746031746, 0.1904761904761905, 0.2063492063492063, 0.2222222222222222, 0.2380952380952381, 0.253968253968254, 0.2698412698412698, 0.2857142857142857, 0.3015873015873016, 0.3174603174603174, 0.3333333333333333, 0.3492063492063492, 0.3650793650793651, 0.3809523809523809, 0.3968253968253968, 0.4126984126984127, 0.4285714285714285, 0.4444444444444444, 0.4603174603174603, 0.4761904761904762, 0.492063492063492, 0.5079365079365079, 0.5238095238095238, 0.5396825396825397, 0.5555555555555556, 0.5714285714285714, 0.5873015873015873, 0.6031746031746031, 0.6190476190476191, 0.6349206349206349, 0.6507936507936508, 0.6666666666666666, 0.6825396825396826, 0.6984126984126984, 0.7142857142857143, 0.7301587301587301, 0.746031746031746, 0.7619047619047619, 0.7777777777777778, 0.7936507936507936, 0.8095238095238095, 0.8253968253968254, 0.8412698412698413, 0.8571428571428571, 0.873015873015873, 0.8888888888888888, 0.9047619047619048, 0.9206349206349206, 0.9365079365079365, 0.9523809523809523, 0.9682539682539683, 0.9841269841269841, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "summer". - class Summer : public ColorMap { - public: - Summer() : ColorMap() { - init(256); - } - - Summer(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0.01587301587301587, 0.03174603174603174, 0.04761904761904762, 0.06349206349206349, 0.07936507936507936, 0.09523809523809523, 0.1111111111111111, 0.126984126984127, 0.1428571428571428, 0.1587301587301587, 0.1746031746031746, 0.1904761904761905, 0.2063492063492063, 0.2222222222222222, 0.2380952380952381, 0.253968253968254, 0.2698412698412698, 0.2857142857142857, 0.3015873015873016, 0.3174603174603174, 0.3333333333333333, 0.3492063492063492, 0.3650793650793651, 0.3809523809523809, 0.3968253968253968, 0.4126984126984127, 0.4285714285714285, 0.4444444444444444, 0.4603174603174603, 0.4761904761904762, 0.492063492063492, 0.5079365079365079, 0.5238095238095238, 0.5396825396825397, 0.5555555555555556, 0.5714285714285714, 0.5873015873015873, 0.6031746031746031, 0.6190476190476191, 0.6349206349206349, 0.6507936507936508, 0.6666666666666666, 0.6825396825396826, 0.6984126984126984, 0.7142857142857143, 0.7301587301587301, 0.746031746031746, 0.7619047619047619, 0.7777777777777778, 0.7936507936507936, 0.8095238095238095, 0.8253968253968254, 0.8412698412698413, 0.8571428571428571, 0.873015873015873, 0.8888888888888888, 0.9047619047619048, 0.9206349206349206, 0.9365079365079365, 0.9523809523809523, 0.9682539682539683, 0.9841269841269841, 1}; - float g[] = { 0.5, 0.5079365079365079, 0.5158730158730158, 0.5238095238095238, 0.5317460317460317, 0.5396825396825397, 0.5476190476190477, 0.5555555555555556, 0.5634920634920635, 0.5714285714285714, 0.5793650793650793, 0.5873015873015873, 0.5952380952380952, 0.6031746031746031, 0.6111111111111112, 0.6190476190476191, 0.626984126984127, 0.6349206349206349, 0.6428571428571428, 0.6507936507936508, 0.6587301587301587, 0.6666666666666666, 0.6746031746031746, 0.6825396825396826, 0.6904761904761905, 0.6984126984126984, 0.7063492063492063, 0.7142857142857143, 0.7222222222222222, 0.7301587301587301, 0.7380952380952381, 0.746031746031746, 0.753968253968254, 0.7619047619047619, 0.7698412698412698, 0.7777777777777778, 0.7857142857142857, 0.7936507936507937, 0.8015873015873016, 0.8095238095238095, 0.8174603174603174, 0.8253968253968254, 0.8333333333333333, 0.8412698412698413, 0.8492063492063492, 0.8571428571428572, 0.8650793650793651, 0.873015873015873, 0.8809523809523809, 0.8888888888888888, 0.8968253968253967, 0.9047619047619048, 0.9126984126984127, 0.9206349206349207, 0.9285714285714286, 0.9365079365079365, 0.9444444444444444, 0.9523809523809523, 0.9603174603174602, 0.9682539682539683, 0.9761904761904762, 0.9841269841269842, 0.9920634920634921, 1}; - float b[] = { 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "spring". - class Spring : public ColorMap { - public: - Spring() : ColorMap() { - init(256); - } - - Spring(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - float g[] = { 0, 0.01587301587301587, 0.03174603174603174, 0.04761904761904762, 0.06349206349206349, 0.07936507936507936, 0.09523809523809523, 0.1111111111111111, 0.126984126984127, 0.1428571428571428, 0.1587301587301587, 0.1746031746031746, 0.1904761904761905, 0.2063492063492063, 0.2222222222222222, 0.2380952380952381, 0.253968253968254, 0.2698412698412698, 0.2857142857142857, 0.3015873015873016, 0.3174603174603174, 0.3333333333333333, 0.3492063492063492, 0.3650793650793651, 0.3809523809523809, 0.3968253968253968, 0.4126984126984127, 0.4285714285714285, 0.4444444444444444, 0.4603174603174603, 0.4761904761904762, 0.492063492063492, 0.5079365079365079, 0.5238095238095238, 0.5396825396825397, 0.5555555555555556, 0.5714285714285714, 0.5873015873015873, 0.6031746031746031, 0.6190476190476191, 0.6349206349206349, 0.6507936507936508, 0.6666666666666666, 0.6825396825396826, 0.6984126984126984, 0.7142857142857143, 0.7301587301587301, 0.746031746031746, 0.7619047619047619, 0.7777777777777778, 0.7936507936507936, 0.8095238095238095, 0.8253968253968254, 0.8412698412698413, 0.8571428571428571, 0.873015873015873, 0.8888888888888888, 0.9047619047619048, 0.9206349206349206, 0.9365079365079365, 0.9523809523809523, 0.9682539682539683, 0.9841269841269841, 1}; - float b[] = { 1, 0.9841269841269842, 0.9682539682539683, 0.9523809523809523, 0.9365079365079365, 0.9206349206349207, 0.9047619047619048, 0.8888888888888888, 0.873015873015873, 0.8571428571428572, 0.8412698412698413, 0.8253968253968254, 0.8095238095238095, 0.7936507936507937, 0.7777777777777778, 0.7619047619047619, 0.746031746031746, 0.7301587301587302, 0.7142857142857143, 0.6984126984126984, 0.6825396825396826, 0.6666666666666667, 0.6507936507936508, 0.6349206349206349, 0.6190476190476191, 0.6031746031746033, 0.5873015873015873, 0.5714285714285714, 0.5555555555555556, 0.5396825396825398, 0.5238095238095238, 0.5079365079365079, 0.4920634920634921, 0.4761904761904762, 0.4603174603174603, 0.4444444444444444, 0.4285714285714286, 0.4126984126984127, 0.3968253968253969, 0.3809523809523809, 0.3650793650793651, 0.3492063492063492, 0.3333333333333334, 0.3174603174603174, 0.3015873015873016, 0.2857142857142857, 0.2698412698412699, 0.253968253968254, 0.2380952380952381, 0.2222222222222222, 0.2063492063492064, 0.1904761904761905, 0.1746031746031746, 0.1587301587301587, 0.1428571428571429, 0.126984126984127, 0.1111111111111112, 0.09523809523809523, 0.07936507936507942, 0.06349206349206349, 0.04761904761904767, 0.03174603174603174, 0.01587301587301593, 0}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "cool". - class Cool : public ColorMap { - public: - Cool() : ColorMap() { - init(256); - } - - Cool(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0.01587301587301587, 0.03174603174603174, 0.04761904761904762, 0.06349206349206349, 0.07936507936507936, 0.09523809523809523, 0.1111111111111111, 0.126984126984127, 0.1428571428571428, 0.1587301587301587, 0.1746031746031746, 0.1904761904761905, 0.2063492063492063, 0.2222222222222222, 0.2380952380952381, 0.253968253968254, 0.2698412698412698, 0.2857142857142857, 0.3015873015873016, 0.3174603174603174, 0.3333333333333333, 0.3492063492063492, 0.3650793650793651, 0.3809523809523809, 0.3968253968253968, 0.4126984126984127, 0.4285714285714285, 0.4444444444444444, 0.4603174603174603, 0.4761904761904762, 0.492063492063492, 0.5079365079365079, 0.5238095238095238, 0.5396825396825397, 0.5555555555555556, 0.5714285714285714, 0.5873015873015873, 0.6031746031746031, 0.6190476190476191, 0.6349206349206349, 0.6507936507936508, 0.6666666666666666, 0.6825396825396826, 0.6984126984126984, 0.7142857142857143, 0.7301587301587301, 0.746031746031746, 0.7619047619047619, 0.7777777777777778, 0.7936507936507936, 0.8095238095238095, 0.8253968253968254, 0.8412698412698413, 0.8571428571428571, 0.873015873015873, 0.8888888888888888, 0.9047619047619048, 0.9206349206349206, 0.9365079365079365, 0.9523809523809523, 0.9682539682539683, 0.9841269841269841, 1}; - float g[] = { 1, 0.9841269841269842, 0.9682539682539683, 0.9523809523809523, 0.9365079365079365, 0.9206349206349207, 0.9047619047619048, 0.8888888888888888, 0.873015873015873, 0.8571428571428572, 0.8412698412698413, 0.8253968253968254, 0.8095238095238095, 0.7936507936507937, 0.7777777777777778, 0.7619047619047619, 0.746031746031746, 0.7301587301587302, 0.7142857142857143, 0.6984126984126984, 0.6825396825396826, 0.6666666666666667, 0.6507936507936508, 0.6349206349206349, 0.6190476190476191, 0.6031746031746033, 0.5873015873015873, 0.5714285714285714, 0.5555555555555556, 0.5396825396825398, 0.5238095238095238, 0.5079365079365079, 0.4920634920634921, 0.4761904761904762, 0.4603174603174603, 0.4444444444444444, 0.4285714285714286, 0.4126984126984127, 0.3968253968253969, 0.3809523809523809, 0.3650793650793651, 0.3492063492063492, 0.3333333333333334, 0.3174603174603174, 0.3015873015873016, 0.2857142857142857, 0.2698412698412699, 0.253968253968254, 0.2380952380952381, 0.2222222222222222, 0.2063492063492064, 0.1904761904761905, 0.1746031746031746, 0.1587301587301587, 0.1428571428571429, 0.126984126984127, 0.1111111111111112, 0.09523809523809523, 0.07936507936507942, 0.06349206349206349, 0.04761904761904767, 0.03174603174603174, 0.01587301587301593, 0}; - float b[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "hsv". - class HSV : public ColorMap { - public: - HSV() : ColorMap() { - init(256); - } - - HSV(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9523809523809526, 0.8571428571428568, 0.7619047619047614, 0.6666666666666665, 0.5714285714285716, 0.4761904761904763, 0.3809523809523805, 0.2857142857142856, 0.1904761904761907, 0.0952380952380949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09523809523809557, 0.1904761904761905, 0.2857142857142854, 0.3809523809523809, 0.4761904761904765, 0.5714285714285714, 0.6666666666666663, 0.7619047619047619, 0.8571428571428574, 0.9523809523809523, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - float g[] = { 0, 0.09523809523809523, 0.1904761904761905, 0.2857142857142857, 0.3809523809523809, 0.4761904761904762, 0.5714285714285714, 0.6666666666666666, 0.7619047619047619, 0.8571428571428571, 0.9523809523809523, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9523809523809526, 0.8571428571428577, 0.7619047619047619, 0.6666666666666665, 0.5714285714285716, 0.4761904761904767, 0.3809523809523814, 0.2857142857142856, 0.1904761904761907, 0.09523809523809579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - float b[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09523809523809523, 0.1904761904761905, 0.2857142857142857, 0.3809523809523809, 0.4761904761904762, 0.5714285714285714, 0.6666666666666666, 0.7619047619047619, 0.8571428571428571, 0.9523809523809523, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9523809523809526, 0.8571428571428577, 0.7619047619047614, 0.6666666666666665, 0.5714285714285716, 0.4761904761904767, 0.3809523809523805, 0.2857142857142856, 0.1904761904761907, 0.09523809523809579, 0}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "pink". - class Pink : public ColorMap { - public: - Pink() : ColorMap() { - init(256); - } - - Pink(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0.1571348402636772, 0.2222222222222222, 0.2721655269759087, 0.3142696805273544, 0.3513641844631533, 0.3849001794597505, 0.415739709641549, 0.4444444444444444, 0.4714045207910317, 0.4969039949999532, 0.5211573066470477, 0.5443310539518174, 0.5665577237325317, 0.5879447357921312, 0.6085806194501846, 0.6285393610547089, 0.6478835438717, 0.6666666666666666, 0.6849348892187751, 0.7027283689263065, 0.7200822998230956, 0.7370277311900888, 0.753592220347252, 0.7663560447348133, 0.7732293307186413, 0.7800420555749596, 0.7867957924694432, 0.7934920476158722, 0.8001322641986387, 0.8067178260046388, 0.8132500607904444, 0.8197302434079591, 0.8261595987094034, 0.8325393042503717, 0.8388704928078611, 0.8451542547285166, 0.8513916401208816, 0.8575836609041332, 0.8637312927246217, 0.8698354767504924, 0.8758971213537393, 0.8819171036881968, 0.8878962711712378, 0.8938354428762595, 0.8997354108424372, 0.9055969413076769, 0.9114207758701963, 0.9172076325837248, 0.9229582069908971, 0.9286731730990523, 0.9343531843023135, 0.9399988742535192, 0.9456108576893002, 0.9511897312113418, 0.9567360740266436, 0.9622504486493763, 0.9677334015667416, 0.9731854638710686, 0.9786071518602129, 0.9839989676081821, 0.9893613995077727, 0.9946949227868761, 1}; - float g[] = { 0, 0.1028688999747279, 0.1454785934906616, 0.1781741612749496, 0.2057377999494559, 0.2300218531141181, 0.2519763153394848, 0.2721655269759087, 0.2909571869813232, 0.3086066999241838, 0.3253000243161777, 0.3411775438127727, 0.3563483225498992, 0.3708990935094579, 0.3849001794597505, 0.3984095364447979, 0.4114755998989117, 0.4241393401869012, 0.4364357804719847, 0.4483951394230328, 0.4600437062282361, 0.4714045207910317, 0.4824979096371639, 0.4933419132673033, 0.5091750772173156, 0.5328701692569688, 0.5555555555555556, 0.5773502691896257, 0.5983516452371671, 0.6186404847588913, 0.6382847385042254, 0.6573421981221795, 0.6758625033664688, 0.6938886664887108, 0.7114582486036499, 0.7286042804780002, 0.7453559924999299, 0.7617394000445604, 0.7777777777777778, 0.7934920476158723, 0.8089010988089465, 0.8240220541217402, 0.8388704928078611, 0.8534606386520677, 0.8678055195451838, 0.8819171036881968, 0.8958064164776166, 0.9094836413191612, 0.9172076325837248, 0.9229582069908971, 0.9286731730990523, 0.9343531843023135, 0.9399988742535192, 0.9456108576893002, 0.9511897312113418, 0.9567360740266436, 0.9622504486493763, 0.9677334015667416, 0.9731854638710686, 0.9786071518602129, 0.9839989676081821, 0.9893613995077727, 0.9946949227868761, 1}; - float b[] = { 0, 0.1028688999747279, 0.1454785934906616, 0.1781741612749496, 0.2057377999494559, 0.2300218531141181, 0.2519763153394848, 0.2721655269759087, 0.2909571869813232, 0.3086066999241838, 0.3253000243161777, 0.3411775438127727, 0.3563483225498992, 0.3708990935094579, 0.3849001794597505, 0.3984095364447979, 0.4114755998989117, 0.4241393401869012, 0.4364357804719847, 0.4483951394230328, 0.4600437062282361, 0.4714045207910317, 0.4824979096371639, 0.4933419132673033, 0.5039526306789697, 0.5143444998736397, 0.5245305283129621, 0.5345224838248488, 0.5443310539518174, 0.5539659798925444, 0.563436169819011, 0.5727497953228163, 0.5819143739626463, 0.5909368402852788, 0.5998236072282915, 0.6085806194501846, 0.6172133998483676, 0.6257270902992705, 0.6341264874742278, 0.642416074439621, 0.6506000486323554, 0.6586823467062358, 0.6666666666666666, 0.6745564876468501, 0.6823550876255453, 0.6900655593423541, 0.6976908246297114, 0.7052336473499384, 0.7237468644557459, 0.7453559924999298, 0.7663560447348133, 0.7867957924694432, 0.8067178260046388, 0.8261595987094034, 0.8451542547285166, 0.8637312927246217, 0.8819171036881968, 0.8997354108424372, 0.9172076325837248, 0.9343531843023135, 0.9511897312113418, 0.9677334015667416, 0.9839989676081821, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - // Equals the GNU Octave colormap "hot". - class Hot : public ColorMap { - public: - Hot() : ColorMap() { - init(256); - } - - Hot(int n) : ColorMap() { - init(n); - } - - void init(int n) { - float r[] = { 0, 0.03968253968253968, 0.07936507936507936, 0.119047619047619, 0.1587301587301587, 0.1984126984126984, 0.2380952380952381, 0.2777777777777778, 0.3174603174603174, 0.3571428571428571, 0.3968253968253968, 0.4365079365079365, 0.4761904761904762, 0.5158730158730158, 0.5555555555555556, 0.5952380952380952, 0.6349206349206349, 0.6746031746031745, 0.7142857142857142, 0.753968253968254, 0.7936507936507936, 0.8333333333333333, 0.873015873015873, 0.9126984126984127, 0.9523809523809523, 0.992063492063492, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - float g[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03174603174603163, 0.0714285714285714, 0.1111111111111112, 0.1507936507936507, 0.1904761904761905, 0.23015873015873, 0.2698412698412698, 0.3095238095238093, 0.3492063492063491, 0.3888888888888888, 0.4285714285714284, 0.4682539682539679, 0.5079365079365079, 0.5476190476190477, 0.5873015873015872, 0.6269841269841268, 0.6666666666666665, 0.7063492063492065, 0.746031746031746, 0.7857142857142856, 0.8253968253968254, 0.8650793650793651, 0.9047619047619047, 0.9444444444444442, 0.984126984126984, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - float b[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.04761904761904745, 0.1269841269841265, 0.2063492063492056, 0.2857142857142856, 0.3650793650793656, 0.4444444444444446, 0.5238095238095237, 0.6031746031746028, 0.6825396825396828, 0.7619047619047619, 0.8412698412698409, 0.92063492063492, 1}; - Mat X = linspace(0,1,64); - this->_lut = ColorMap::linear_colormap(X, - Mat(64,1, CV_32FC1, r).clone(), // red - Mat(64,1, CV_32FC1, g).clone(), // green - Mat(64,1, CV_32FC1, b).clone(), // blue - n); // number of sample points - } - }; - - void ColorMap::operator()(InputArray _src, OutputArray _dst) const - { - if(_lut.total() != 256) - CV_Error(CV_StsAssert, "cv::LUT only supports tables of size 256."); - Mat src = _src.getMat(); - // Return original matrix if wrong type is given (is fail loud better here?) - if(src.type() != CV_8UC1 && src.type() != CV_8UC3) - { - src.copyTo(_dst); - return; - } - // Turn into a BGR matrix into its grayscale representation. - if(src.type() == CV_8UC3) - cvtColor(src.clone(), src, CV_BGR2GRAY); - cvtColor(src.clone(), src, CV_GRAY2BGR); - // Apply the ColorMap. - LUT(src, _lut, _dst); - } - - Mat ColorMap::linear_colormap(InputArray X, - InputArray r, InputArray g, InputArray b, - InputArray xi) { - Mat lut, lut8; - Mat planes[] = { - interp1(X, b, xi), - interp1(X, g, xi), - interp1(X, r, xi)}; - merge(planes, 3, lut); - lut.convertTo(lut8, CV_8U, 255.); - return lut8; - } - - } - - void applyColorMap(InputArray src, OutputArray dst, int colormap) - { - colormap::ColorMap* cm = - colormap == COLORMAP_AUTUMN ? (colormap::ColorMap*)(new colormap::Autumn) : - colormap == COLORMAP_BONE ? (colormap::ColorMap*)(new colormap::Bone) : - colormap == COLORMAP_COOL ? (colormap::ColorMap*)(new colormap::Cool) : - colormap == COLORMAP_HOT ? (colormap::ColorMap*)(new colormap::Hot) : - colormap == COLORMAP_HSV ? (colormap::ColorMap*)(new colormap::HSV) : - colormap == COLORMAP_JET ? (colormap::ColorMap*)(new colormap::Jet) : - colormap == COLORMAP_OCEAN ? (colormap::ColorMap*)(new colormap::Ocean) : - colormap == COLORMAP_PINK ? (colormap::ColorMap*)(new colormap::Pink) : - colormap == COLORMAP_RAINBOW ? (colormap::ColorMap*)(new colormap::Rainbow) : - colormap == COLORMAP_SPRING ? (colormap::ColorMap*)(new colormap::Spring) : - colormap == COLORMAP_SUMMER ? (colormap::ColorMap*)(new colormap::Summer) : - colormap == COLORMAP_WINTER ? (colormap::ColorMap*)(new colormap::Winter) : 0; - - if( !cm ) - CV_Error( CV_StsBadArg, "Unknown colormap id; use one of COLORMAP_*"); - - (*cm)(src, dst); - - delete cm; - } -} diff --git a/modules/contrib/src/colortracker.cpp b/modules/contrib/src/colortracker.cpp deleted file mode 100644 index dfa3ed5..0000000 --- a/modules/contrib/src/colortracker.cpp +++ /dev/null @@ -1,135 +0,0 @@ -//*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include "opencv2/contrib/hybridtracker.hpp" - -using namespace cv; -using namespace std; - -CvMeanShiftTracker::CvMeanShiftTracker(CvMeanShiftTrackerParams _params) : params(_params) -{ -} - -CvMeanShiftTracker::~CvMeanShiftTracker() -{ -} - -void CvMeanShiftTracker::newTrackingWindow(Mat image, Rect selection) -{ - hist.release(); - int channels[] = { 0, 0 , 1, 1}; - float hrange[] = { 0, 180 }; - float srange[] = { 0, 1 }; - const float* ranges[] = {hrange, srange}; - - cvtColor(image, hsv, CV_BGR2HSV); - inRange(hsv, Scalar(0, 30, MIN(10, 256)), Scalar(180, 256, MAX(10, 256)), mask); - - hue.create(hsv.size(), CV_8UC2); - mixChannels(&hsv, 1, &hue, 1, channels, 2); - - Mat roi(hue, selection); - Mat mskroi(mask, selection); - int ch[] = {0, 1}; - int chsize[] = {32, 32}; - calcHist(&roi, 1, ch, mskroi, hist, 1, chsize, ranges); - normalize(hist, hist, 0, 255, CV_MINMAX); - - prev_trackwindow = selection; -} - -RotatedRect CvMeanShiftTracker::updateTrackingWindow(Mat image) -{ - int channels[] = { 0, 0 , 1, 1}; - float hrange[] = { 0, 180 }; - float srange[] = { 0, 1 }; - const float* ranges[] = {hrange, srange}; - - cvtColor(image, hsv, CV_BGR2HSV); - inRange(hsv, Scalar(0, 30, MIN(10, 256)), Scalar(180, 256, MAX(10, 256)), mask); - hue.create(hsv.size(), CV_8UC2); - mixChannels(&hsv, 1, &hue, 1, channels, 2); - int ch[] = {0, 1}; - calcBackProject(&hue, 1, ch, hist, backproj, ranges); - backproj &= mask; - - prev_trackbox = CamShift(backproj, prev_trackwindow, TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1)); - int cols = backproj.cols, rows = backproj.rows, r = (MIN(cols, rows) + 5) / 6; - prev_trackwindow = Rect(prev_trackwindow.x - r, prev_trackwindow.y - r, prev_trackwindow.x + r, - prev_trackwindow.y + r) & Rect(0, 0, cols, rows); - - prev_center.x = (float)(prev_trackwindow.x + prev_trackwindow.width / 2); - prev_center.y = (float)(prev_trackwindow.y + prev_trackwindow.height / 2); - -#ifdef DEBUG_HYTRACKER - ellipse(image, prev_trackbox, Scalar(0, 0, 255), 1, CV_AA); -#endif - - return prev_trackbox; -} - -Mat CvMeanShiftTracker::getHistogramProjection(int type) -{ - Mat ms_backproj_f(backproj.size(), type); - backproj.convertTo(ms_backproj_f, type); - return ms_backproj_f; -} - -void CvMeanShiftTracker::setTrackingWindow(Rect window) -{ - prev_trackwindow = window; -} - -Rect CvMeanShiftTracker::getTrackingWindow() -{ - return prev_trackwindow; -} - -RotatedRect CvMeanShiftTracker::getTrackingEllipse() -{ - return prev_trackbox; -} - -Point2f CvMeanShiftTracker::getTrackingCenter() -{ - return prev_center; -} diff --git a/modules/contrib/src/contrib_init.cpp b/modules/contrib/src/contrib_init.cpp deleted file mode 100644 index 317867a..0000000 --- a/modules/contrib/src/contrib_init.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" diff --git a/modules/contrib/src/detection_based_tracker.cpp b/modules/contrib/src/detection_based_tracker.cpp deleted file mode 100644 index 381bde0..0000000 --- a/modules/contrib/src/detection_based_tracker.cpp +++ /dev/null @@ -1,838 +0,0 @@ -#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) -#include "opencv2/contrib/detection_based_tracker.hpp" - -#include - -#define DEBUGLOGS 1 - -#ifdef ANDROID -#include -#define LOG_TAG "OBJECT_DETECTOR" -#define LOGD0(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -#define LOGI0(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) -#define LOGW0(...) ((void)__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) -#define LOGE0(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) -#else - -#include - -#define LOGD0(_str, ...) do{printf(_str , ## __VA_ARGS__); printf("\n");fflush(stdout);} while(0) -#define LOGI0(_str, ...) do{printf(_str , ## __VA_ARGS__); printf("\n");fflush(stdout);} while(0) -#define LOGW0(_str, ...) do{printf(_str , ## __VA_ARGS__); printf("\n");fflush(stdout);} while(0) -#define LOGE0(_str, ...) do{printf(_str , ## __VA_ARGS__); printf("\n");fflush(stdout);} while(0) -#endif - -#if DEBUGLOGS -#define LOGD(_str, ...) LOGD0(_str , ## __VA_ARGS__) -#define LOGI(_str, ...) LOGI0(_str , ## __VA_ARGS__) -#define LOGW(_str, ...) LOGW0(_str , ## __VA_ARGS__) -#define LOGE(_str, ...) LOGE0(_str , ## __VA_ARGS__) -#else -#define LOGD(...) do{} while(0) -#define LOGI(...) do{} while(0) -#define LOGW(...) do{} while(0) -#define LOGE(...) do{} while(0) -#endif - - -using namespace cv; -using namespace std; - -static inline cv::Point2f centerRect(const cv::Rect& r) -{ - return cv::Point2f(r.x+((float)r.width)/2, r.y+((float)r.height)/2); -} - -static inline cv::Rect scale_rect(const cv::Rect& r, float scale) -{ - cv::Point2f m=centerRect(r); - float width = r.width * scale; - float height = r.height * scale; - int x=cvRound(m.x - width/2); - int y=cvRound(m.y - height/2); - - return cv::Rect(x, y, cvRound(width), cvRound(height)); -} - -void* workcycleObjectDetectorFunction(void* p); - -class DetectionBasedTracker::SeparateDetectionWork -{ - public: - SeparateDetectionWork(DetectionBasedTracker& _detectionBasedTracker, const std::string& cascadeFilename); - virtual ~SeparateDetectionWork(); - bool communicateWithDetectingThread(const Mat& imageGray, vector& rectsWhereRegions); - bool run(); - void stop(); - void resetTracking(); - - inline bool isWorking() - { - return (stateThread==STATE_THREAD_WORKING_SLEEPING) || (stateThread==STATE_THREAD_WORKING_WITH_IMAGE); - } - inline void lock() - { - pthread_mutex_lock(&mutex); - } - inline void unlock() - { - pthread_mutex_unlock(&mutex); - } - - protected: - - DetectionBasedTracker& detectionBasedTracker; - cv::CascadeClassifier cascadeInThread; - - pthread_t second_workthread; - pthread_mutex_t mutex; - pthread_cond_t objectDetectorRun; - pthread_cond_t objectDetectorThreadStartStop; - - std::vector resultDetect; - volatile bool isObjectDetectingReady; - volatile bool shouldObjectDetectingResultsBeForgot; - - enum StateSeparatedThread { - STATE_THREAD_STOPPED=0, - STATE_THREAD_WORKING_SLEEPING, - STATE_THREAD_WORKING_WITH_IMAGE, - STATE_THREAD_WORKING, - STATE_THREAD_STOPPING - }; - volatile StateSeparatedThread stateThread; - - cv::Mat imageSeparateDetecting; - - void workcycleObjectDetector(); - friend void* workcycleObjectDetectorFunction(void* p); - - long long timeWhenDetectingThreadStartedWork; -}; - -DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork(DetectionBasedTracker& _detectionBasedTracker, const std::string& cascadeFilename) - :detectionBasedTracker(_detectionBasedTracker), - cascadeInThread(), - isObjectDetectingReady(false), - shouldObjectDetectingResultsBeForgot(false), - stateThread(STATE_THREAD_STOPPED), - timeWhenDetectingThreadStartedWork(-1) -{ - if(!cascadeInThread.load(cascadeFilename)) { - CV_Error(CV_StsBadArg, "DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork: Cannot load a cascade from the file '"+cascadeFilename+"'"); - } - int res=0; - res=pthread_mutex_init(&mutex, NULL);//TODO: should be attributes? - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_mutex_init(&mutex, NULL) is %d", res); - throw(std::exception()); - } - res=pthread_cond_init (&objectDetectorRun, NULL); - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_cond_init(&objectDetectorRun,, NULL) is %d", res); - pthread_mutex_destroy(&mutex); - throw(std::exception()); - } - res=pthread_cond_init (&objectDetectorThreadStartStop, NULL); - if (res) { - LOGE("ERROR in DetectionBasedTracker::SeparateDetectionWork::SeparateDetectionWork in pthread_cond_init(&objectDetectorThreadStartStop,, NULL) is %d", res); - pthread_cond_destroy(&objectDetectorRun); - pthread_mutex_destroy(&mutex); - throw(std::exception()); - } -} - -DetectionBasedTracker::SeparateDetectionWork::~SeparateDetectionWork() -{ - if(stateThread!=STATE_THREAD_STOPPED) { - LOGE("\n\n\nATTENTION!!! dangerous algorithm error: destructor DetectionBasedTracker::DetectionBasedTracker::~SeparateDetectionWork is called before stopping the workthread"); - } - - pthread_cond_destroy(&objectDetectorThreadStartStop); - pthread_cond_destroy(&objectDetectorRun); - pthread_mutex_destroy(&mutex); -} -bool DetectionBasedTracker::SeparateDetectionWork::run() -{ - LOGD("DetectionBasedTracker::SeparateDetectionWork::run() --- start"); - pthread_mutex_lock(&mutex); - if (stateThread != STATE_THREAD_STOPPED) { - LOGE("DetectionBasedTracker::SeparateDetectionWork::run is called while the previous run is not stopped"); - pthread_mutex_unlock(&mutex); - return false; - } - stateThread=STATE_THREAD_WORKING_SLEEPING; - pthread_create(&second_workthread, NULL, workcycleObjectDetectorFunction, (void*)this); //TODO: add attributes? - pthread_cond_wait(&objectDetectorThreadStartStop, &mutex); - pthread_mutex_unlock(&mutex); - LOGD("DetectionBasedTracker::SeparateDetectionWork::run --- end"); - return true; -} - -#define CATCH_ALL_AND_LOG(_block) \ -do { \ - try { \ - _block; \ - break; \ - } \ - catch(cv::Exception& e) { \ - LOGE0("\n %s: ERROR: OpenCV Exception caught: \n'%s'\n\n", CV_Func, e.what()); \ - } catch(std::exception& e) { \ - LOGE0("\n %s: ERROR: Exception caught: \n'%s'\n\n", CV_Func, e.what()); \ - } catch(...) { \ - LOGE0("\n %s: ERROR: UNKNOWN Exception caught\n\n", CV_Func); \ - } \ -} while(0) - -void* workcycleObjectDetectorFunction(void* p) -{ - CATCH_ALL_AND_LOG({ ((DetectionBasedTracker::SeparateDetectionWork*)p)->workcycleObjectDetector(); }); - try{ - ((DetectionBasedTracker::SeparateDetectionWork*)p)->stateThread=DetectionBasedTracker::SeparateDetectionWork::STATE_THREAD_STOPPED; - } catch(...) { - LOGE0("DetectionBasedTracker: workcycleObjectDetectorFunction: ERROR concerning pointer, received as the function parameter"); - } - return NULL; -} - -void DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() -{ - static double freq = getTickFrequency(); - LOGD0("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- start"); - vector objects; - - CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); - pthread_mutex_lock(&mutex); - { - pthread_cond_signal(&objectDetectorThreadStartStop); - - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- before waiting"); - CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); - pthread_cond_wait(&objectDetectorRun, &mutex); - if (isWorking()) { - stateThread=STATE_THREAD_WORKING_WITH_IMAGE; - } - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- after waiting"); - } - pthread_mutex_unlock(&mutex); - - bool isFirstStep=true; - - isObjectDetectingReady=false; - - while(isWorking()) - { - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- next step"); - - if (! isFirstStep) { - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- before waiting"); - CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); - - pthread_mutex_lock(&mutex); - if (!isWorking()) {//it is a rare case, but may cause a crash - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- go out from the workcycle from inner part of lock just before waiting"); - pthread_mutex_unlock(&mutex); - break; - } - CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); - pthread_cond_wait(&objectDetectorRun, &mutex); - if (isWorking()) { - stateThread=STATE_THREAD_WORKING_WITH_IMAGE; - } - pthread_mutex_unlock(&mutex); - - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- after waiting"); - } else { - isFirstStep=false; - } - - if (!isWorking()) { - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- go out from the workcycle just after waiting"); - break; - } - - - if (imageSeparateDetecting.empty()) { - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- imageSeparateDetecting is empty, continue"); - continue; - } - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- start handling imageSeparateDetecting, img.size=%dx%d, img.data=0x%p", - imageSeparateDetecting.size().width, imageSeparateDetecting.size().height, (void*)imageSeparateDetecting.data); - - - int64 t1_detect=getTickCount(); - - int minObjectSize=detectionBasedTracker.parameters.minObjectSize; - Size min_objectSize = Size(minObjectSize, minObjectSize); - - int maxObjectSize=detectionBasedTracker.parameters.maxObjectSize; - Size max_objectSize(maxObjectSize, maxObjectSize); - - - cascadeInThread.detectMultiScale( imageSeparateDetecting, objects, - detectionBasedTracker.parameters.scaleFactor, detectionBasedTracker.parameters.minNeighbors, 0 - |CV_HAAR_SCALE_IMAGE - , - min_objectSize, - max_objectSize - ); - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- end handling imageSeparateDetecting"); - - if (!isWorking()) { - LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- go out from the workcycle just after detecting"); - break; - } - - int64 t2_detect = getTickCount(); - int64 dt_detect = t2_detect-t1_detect; - double dt_detect_ms=((double)dt_detect)/freq * 1000.0; - - LOGI("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- objects num==%d, t_ms=%.4f", (int)objects.size(), dt_detect_ms); - - pthread_mutex_lock(&mutex); - if (!shouldObjectDetectingResultsBeForgot) { - resultDetect=objects; - isObjectDetectingReady=true; - } else { //shouldObjectDetectingResultsBeForgot==true - resultDetect.clear(); - isObjectDetectingReady=false; - shouldObjectDetectingResultsBeForgot=false; - } - if(isWorking()) { - stateThread=STATE_THREAD_WORKING_SLEEPING; - } - pthread_mutex_unlock(&mutex); - - objects.clear(); - }// while(isWorking()) - - - pthread_mutex_lock(&mutex); - - stateThread=STATE_THREAD_STOPPED; - - isObjectDetectingReady=false; - shouldObjectDetectingResultsBeForgot=false; - - pthread_cond_signal(&objectDetectorThreadStartStop); - - pthread_mutex_unlock(&mutex); - - LOGI("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector: Returning"); -} - -void DetectionBasedTracker::SeparateDetectionWork::stop() -{ - //FIXME: TODO: should add quickStop functionality - pthread_mutex_lock(&mutex); - if (!isWorking()) { - pthread_mutex_unlock(&mutex); - LOGE("SimpleHighguiDemoCore::stop is called but the SimpleHighguiDemoCore pthread is not active"); - return; - } - stateThread=STATE_THREAD_STOPPING; - LOGD("DetectionBasedTracker::SeparateDetectionWork::stop: before going to sleep to wait for the signal from the workthread"); - pthread_cond_signal(&objectDetectorRun); - pthread_cond_wait(&objectDetectorThreadStartStop, &mutex); - LOGD("DetectionBasedTracker::SeparateDetectionWork::stop: after receiving the signal from the workthread, stateThread=%d", (int)stateThread); - pthread_mutex_unlock(&mutex); -} - -void DetectionBasedTracker::SeparateDetectionWork::resetTracking() -{ - LOGD("DetectionBasedTracker::SeparateDetectionWork::resetTracking"); - pthread_mutex_lock(&mutex); - - if (stateThread == STATE_THREAD_WORKING_WITH_IMAGE) { - LOGD("DetectionBasedTracker::SeparateDetectionWork::resetTracking: since workthread is detecting objects at the moment, we should make cascadeInThread stop detecting and forget the detecting results"); - shouldObjectDetectingResultsBeForgot=true; - //cascadeInThread.setStopFlag();//FIXME: TODO: this feature also should be contributed to OpenCV - } else { - LOGD("DetectionBasedTracker::SeparateDetectionWork::resetTracking: since workthread is NOT detecting objects at the moment, we should NOT make any additional actions"); - } - - resultDetect.clear(); - isObjectDetectingReady=false; - - - pthread_mutex_unlock(&mutex); - -} - -bool DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread(const Mat& imageGray, vector& rectsWhereRegions) -{ - static double freq = getTickFrequency(); - - bool shouldCommunicateWithDetectingThread = (stateThread==STATE_THREAD_WORKING_SLEEPING); - LOGD("DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread: shouldCommunicateWithDetectingThread=%d", (shouldCommunicateWithDetectingThread?1:0)); - - if (!shouldCommunicateWithDetectingThread) { - return false; - } - - bool shouldHandleResult = false; - pthread_mutex_lock(&mutex); - - if (isObjectDetectingReady) { - shouldHandleResult=true; - rectsWhereRegions = resultDetect; - isObjectDetectingReady=false; - - double lastBigDetectionDuration = 1000.0 * (((double)(getTickCount() - timeWhenDetectingThreadStartedWork )) / freq); - LOGD("DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread: lastBigDetectionDuration=%f ms", (double)lastBigDetectionDuration); - } - - bool shouldSendNewDataToWorkThread = true; - if (timeWhenDetectingThreadStartedWork > 0) { - double time_from_previous_launch_in_ms=1000.0 * (((double)(getTickCount() - timeWhenDetectingThreadStartedWork )) / freq); //the same formula as for lastBigDetectionDuration - shouldSendNewDataToWorkThread = (time_from_previous_launch_in_ms >= detectionBasedTracker.parameters.minDetectionPeriod); - LOGD("DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread: shouldSendNewDataToWorkThread was 1, now it is %d, since time_from_previous_launch_in_ms=%.2f, minDetectionPeriod=%d", - (shouldSendNewDataToWorkThread?1:0), time_from_previous_launch_in_ms, detectionBasedTracker.parameters.minDetectionPeriod); - } - - if (shouldSendNewDataToWorkThread) { - - imageSeparateDetecting.create(imageGray.size(), CV_8UC1); - - imageGray.copyTo(imageSeparateDetecting);//may change imageSeparateDetecting ptr. But should not. - - - timeWhenDetectingThreadStartedWork = getTickCount() ; - - pthread_cond_signal(&objectDetectorRun); - } - - pthread_mutex_unlock(&mutex); - LOGD("DetectionBasedTracker::SeparateDetectionWork::communicateWithDetectingThread: result: shouldHandleResult=%d", (shouldHandleResult?1:0)); - - return shouldHandleResult; -} - -DetectionBasedTracker::Parameters::Parameters() -{ - minObjectSize=96; - maxObjectSize=INT_MAX; - scaleFactor=1.1; - maxTrackLifetime=5; - minNeighbors=2; - minDetectionPeriod=0; -} - -DetectionBasedTracker::InnerParameters::InnerParameters() -{ - numLastPositionsToTrack=4; - numStepsToWaitBeforeFirstShow=6; - numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown=3; - numStepsToShowWithoutDetecting=3; - - coeffTrackingWindowSize=2.0; - coeffObjectSizeToTrack=0.85; - coeffObjectSpeedUsingInPrediction=0.8; - -} - -DetectionBasedTracker::DetectionBasedTracker(const std::string& cascadeFilename, const Parameters& params) - :separateDetectionWork(), - innerParameters(), - numTrackedSteps(0) -{ - CV_Assert( (params.minObjectSize > 0) - && (params.maxObjectSize >= 0) - && (params.scaleFactor > 1.0) - && (params.maxTrackLifetime >= 0) ); - - if (!cascadeForTracking.load(cascadeFilename)) { - CV_Error(CV_StsBadArg, "DetectionBasedTracker::DetectionBasedTracker: Cannot load a cascade from the file '"+cascadeFilename+"'"); - } - - parameters=params; - - separateDetectionWork=new SeparateDetectionWork(*this, cascadeFilename); - - weightsPositionsSmoothing.push_back(1); - weightsSizesSmoothing.push_back(0.5); - weightsSizesSmoothing.push_back(0.3); - weightsSizesSmoothing.push_back(0.2); - -} - -DetectionBasedTracker::~DetectionBasedTracker() -{ -} - -void DetectionBasedTracker::process(const Mat& imageGray) -{ - CV_Assert(imageGray.type()==CV_8UC1); - - if (!separateDetectionWork->isWorking()) { - separateDetectionWork->run(); - } - - static double freq = getTickFrequency(); - static long long time_when_last_call_started=getTickCount(); - - { - double delta_time_from_prev_call=1000.0 * (((double)(getTickCount() - time_when_last_call_started)) / freq); - LOGD("DetectionBasedTracker::process: time from the previous call is %f ms", (double)delta_time_from_prev_call); - time_when_last_call_started=getTickCount(); - } - - Mat imageDetect=imageGray; - - int D = parameters.minObjectSize; - if (D < 1) - D=1; - - vector rectsWhereRegions; - bool shouldHandleResult=separateDetectionWork->communicateWithDetectingThread(imageGray, rectsWhereRegions); - - if (shouldHandleResult) { - LOGD("DetectionBasedTracker::process: get _rectsWhereRegions were got from resultDetect"); - } else { - LOGD("DetectionBasedTracker::process: get _rectsWhereRegions from previous positions"); - for(size_t i = 0; i < trackedObjects.size(); i++) { - int n = trackedObjects[i].lastPositions.size(); - CV_Assert(n > 0); - - Rect r = trackedObjects[i].lastPositions[n-1]; - if(r.area() == 0) { - LOGE("DetectionBasedTracker::process: ERROR: ATTENTION: strange algorithm's behavior: trackedObjects[i].rect() is empty"); - continue; - } - - - // correction by speed of rectangle - if (n > 1) { - Point2f center = centerRect(r); - Point2f center_prev = centerRect(trackedObjects[i].lastPositions[n-2]); - Point2f shift = (center - center_prev) * innerParameters.coeffObjectSpeedUsingInPrediction; - - r.x += cvRound(shift.x); - r.y += cvRound(shift.y); - } - - - rectsWhereRegions.push_back(r); - } - } - LOGI("DetectionBasedTracker::process: tracked objects num==%d", (int)trackedObjects.size()); - - vector detectedObjectsInRegions; - - LOGD("DetectionBasedTracker::process: rectsWhereRegions.size()=%d", (int)rectsWhereRegions.size()); - for(size_t i=0; i < rectsWhereRegions.size(); i++) { - Rect r = rectsWhereRegions[i]; - - detectInRegion(imageDetect, r, detectedObjectsInRegions); - } - LOGD("DetectionBasedTracker::process: detectedObjectsInRegions.size()=%d", (int)detectedObjectsInRegions.size()); - - updateTrackedObjects(detectedObjectsInRegions); -} - -void DetectionBasedTracker::getObjects(std::vector& result) const -{ - result.clear(); - - for(size_t i=0; i < trackedObjects.size(); i++) { - Rect r=calcTrackedObjectPositionToShow(i); - if (r.area()==0) { - continue; - } - result.push_back(r); - LOGD("DetectionBasedTracker::process: found a object with SIZE %d x %d, rect={%d, %d, %d x %d}", r.width, r.height, r.x, r.y, r.width, r.height); - } -} - -void DetectionBasedTracker::getObjects(std::vector& result) const -{ - result.clear(); - - for(size_t i=0; i < trackedObjects.size(); i++) { - Rect r=calcTrackedObjectPositionToShow(i); - if (r.area()==0) { - continue; - } - result.push_back(Object(r, trackedObjects[i].id)); - LOGD("DetectionBasedTracker::process: found a object with SIZE %d x %d, rect={%d, %d, %d x %d}", r.width, r.height, r.x, r.y, r.width, r.height); - } -} - -bool DetectionBasedTracker::run() -{ - return separateDetectionWork->run(); -} - -void DetectionBasedTracker::stop() -{ - separateDetectionWork->stop(); -} - -void DetectionBasedTracker::resetTracking() -{ - separateDetectionWork->resetTracking(); - trackedObjects.clear(); -} - -void DetectionBasedTracker::updateTrackedObjects(const vector& detectedObjects) -{ - enum { - NEW_RECTANGLE=-1, - INTERSECTED_RECTANGLE=-2 - }; - - int N1=trackedObjects.size(); - int N2=detectedObjects.size(); - LOGD("DetectionBasedTracker::updateTrackedObjects: N1=%d, N2=%d", N1, N2); - - for(int i=0; i < N1; i++) { - trackedObjects[i].numDetectedFrames++; - } - - vector correspondence(detectedObjects.size(), NEW_RECTANGLE); - correspondence.clear(); - correspondence.resize(detectedObjects.size(), NEW_RECTANGLE); - - for(int i=0; i < N1; i++) { - LOGD("DetectionBasedTracker::updateTrackedObjects: i=%d", i); - TrackedObject& curObject=trackedObjects[i]; - - int bestIndex=-1; - int bestArea=-1; - - int numpositions=curObject.lastPositions.size(); - CV_Assert(numpositions > 0); - Rect prevRect=curObject.lastPositions[numpositions-1]; - LOGD("DetectionBasedTracker::updateTrackedObjects: prevRect[%d]={%d, %d, %d x %d}", i, prevRect.x, prevRect.y, prevRect.width, prevRect.height); - - for(int j=0; j < N2; j++) { - LOGD("DetectionBasedTracker::updateTrackedObjects: j=%d", j); - if (correspondence[j] >= 0) { - LOGD("DetectionBasedTracker::updateTrackedObjects: j=%d is rejected, because it has correspondence=%d", j, correspondence[j]); - continue; - } - if (correspondence[j] !=NEW_RECTANGLE) { - LOGD("DetectionBasedTracker::updateTrackedObjects: j=%d is rejected, because it is intersected with another rectangle", j); - continue; - } - LOGD("DetectionBasedTracker::updateTrackedObjects: detectedObjects[%d]={%d, %d, %d x %d}", - j, detectedObjects[j].x, detectedObjects[j].y, detectedObjects[j].width, detectedObjects[j].height); - - Rect r=prevRect & detectedObjects[j]; - if ( (r.width > 0) && (r.height > 0) ) { - LOGD("DetectionBasedTracker::updateTrackedObjects: There is intersection between prevRect and detectedRect, r={%d, %d, %d x %d}", - r.x, r.y, r.width, r.height); - correspondence[j]=INTERSECTED_RECTANGLE; - - if ( r.area() > bestArea) { - LOGD("DetectionBasedTracker::updateTrackedObjects: The area of intersection is %d, it is better than bestArea=%d", r.area(), bestArea); - bestIndex=j; - bestArea=r.area(); - } - } - } - if (bestIndex >= 0) { - LOGD("DetectionBasedTracker::updateTrackedObjects: The best correspondence for i=%d is j=%d", i, bestIndex); - correspondence[bestIndex]=i; - - for(int j=0; j < N2; j++) { - if (correspondence[j] >= 0) - continue; - - Rect r=detectedObjects[j] & detectedObjects[bestIndex]; - if ( (r.width > 0) && (r.height > 0) ) { - LOGD("DetectionBasedTracker::updateTrackedObjects: Found intersection between " - "rectangles j=%d and bestIndex=%d, rectangle j=%d is marked as intersected", j, bestIndex, j); - correspondence[j]=INTERSECTED_RECTANGLE; - } - } - } else { - LOGD("DetectionBasedTracker::updateTrackedObjects: There is no correspondence for i=%d ", i); - curObject.numFramesNotDetected++; - } - } - - LOGD("DetectionBasedTracker::updateTrackedObjects: start second cycle"); - for(int j=0; j < N2; j++) { - LOGD("DetectionBasedTracker::updateTrackedObjects: j=%d", j); - int i=correspondence[j]; - if (i >= 0) {//add position - LOGD("DetectionBasedTracker::updateTrackedObjects: add position"); - trackedObjects[i].lastPositions.push_back(detectedObjects[j]); - while ((int)trackedObjects[i].lastPositions.size() > (int) innerParameters.numLastPositionsToTrack) { - trackedObjects[i].lastPositions.erase(trackedObjects[i].lastPositions.begin()); - } - trackedObjects[i].numFramesNotDetected=0; - } else if (i==NEW_RECTANGLE){ //new object - LOGD("DetectionBasedTracker::updateTrackedObjects: new object"); - trackedObjects.push_back(detectedObjects[j]); - } else { - LOGD("DetectionBasedTracker::updateTrackedObjects: was auxiliary intersection"); - } - } - - std::vector::iterator it=trackedObjects.begin(); - while( it != trackedObjects.end() ) { - if ( (it->numFramesNotDetected > parameters.maxTrackLifetime) - || - ( - (it->numDetectedFrames <= innerParameters.numStepsToWaitBeforeFirstShow) - && - (it->numFramesNotDetected > innerParameters.numStepsToTrackWithoutDetectingIfObjectHasNotBeenShown) - ) - ) - { - int numpos=it->lastPositions.size(); - CV_Assert(numpos > 0); - Rect r = it->lastPositions[numpos-1]; - LOGD("DetectionBasedTracker::updateTrackedObjects: deleted object {%d, %d, %d x %d}", - r.x, r.y, r.width, r.height); - it=trackedObjects.erase(it); - } else { - it++; - } - } -} - -Rect DetectionBasedTracker::calcTrackedObjectPositionToShow(int i) const -{ - if ( (i < 0) || (i >= (int)trackedObjects.size()) ) { - LOGE("DetectionBasedTracker::calcTrackedObjectPositionToShow: ERROR: wrong i=%d", i); - return Rect(); - } - if (trackedObjects[i].numDetectedFrames <= innerParameters.numStepsToWaitBeforeFirstShow){ - LOGI("DetectionBasedTracker::calcTrackedObjectPositionToShow: trackedObjects[%d].numDetectedFrames=%d <= numStepsToWaitBeforeFirstShow=%d --- return empty Rect()", - i, trackedObjects[i].numDetectedFrames, innerParameters.numStepsToWaitBeforeFirstShow); - return Rect(); - } - if (trackedObjects[i].numFramesNotDetected > innerParameters.numStepsToShowWithoutDetecting) { - return Rect(); - } - - const TrackedObject::PositionsVector& lastPositions=trackedObjects[i].lastPositions; - - int N=lastPositions.size(); - if (N<=0) { - LOGE("DetectionBasedTracker::calcTrackedObjectPositionToShow: ERROR: no positions for i=%d", i); - return Rect(); - } - - int Nsize=std::min(N, (int)weightsSizesSmoothing.size()); - int Ncenter= std::min(N, (int)weightsPositionsSmoothing.size()); - - Point2f center; - double w=0, h=0; - if (Nsize > 0) { - double sum=0; - for(int j=0; j < Nsize; j++) { - int k=N-j-1; - w+= lastPositions[k].width * weightsSizesSmoothing[j]; - h+= lastPositions[k].height * weightsSizesSmoothing[j]; - sum+=weightsSizesSmoothing[j]; - } - w /= sum; - h /= sum; - } else { - w=lastPositions[N-1].width; - h=lastPositions[N-1].height; - } - - if (Ncenter > 0) { - double sum=0; - for(int j=0; j < Ncenter; j++) { - int k=N-j-1; - Point tl(lastPositions[k].tl()); - Point br(lastPositions[k].br()); - Point2f c1; - c1=tl; - c1=c1* 0.5f; - Point2f c2; - c2=br; - c2=c2*0.5f; - c1=c1+c2; - - center=center+ (c1 * weightsPositionsSmoothing[j]); - sum+=weightsPositionsSmoothing[j]; - } - center *= (float)(1 / sum); - } else { - int k=N-1; - Point tl(lastPositions[k].tl()); - Point br(lastPositions[k].br()); - Point2f c1; - c1=tl; - c1=c1* 0.5f; - Point2f c2; - c2=br; - c2=c2*0.5f; - - center=c1+c2; - } - Point2f tl=center-(Point2f(w,h)*0.5); - Rect res(cvRound(tl.x), cvRound(tl.y), cvRound(w), cvRound(h)); - LOGD("DetectionBasedTracker::calcTrackedObjectPositionToShow: Result for i=%d: {%d, %d, %d x %d}", i, res.x, res.y, res.width, res.height); - - return res; -} - -void DetectionBasedTracker::detectInRegion(const Mat& img, const Rect& r, vector& detectedObjectsInRegions) -{ - Rect r0(Point(), img.size()); - Rect r1 = scale_rect(r, innerParameters.coeffTrackingWindowSize); - r1 = r1 & r0; - - if ( (r1.width <=0) || (r1.height <= 0) ) { - LOGD("DetectionBasedTracker::detectInRegion: Empty intersection"); - return; - } - - int d = std::min(r.width, r.height); - d = cvRound(d * innerParameters.coeffObjectSizeToTrack); - - vector tmpobjects; - - Mat img1(img, r1);//subimage for rectangle -- without data copying - LOGD("DetectionBasedTracker::detectInRegion: img1.size()=%d x %d, d=%d", - img1.size().width, img1.size().height, d); - - int maxObjectSize = parameters.maxObjectSize; - Size max_objectSize(maxObjectSize, maxObjectSize); - - cascadeForTracking.detectMultiScale( img1, tmpobjects, - parameters.scaleFactor, parameters.minNeighbors, 0 - |CV_HAAR_FIND_BIGGEST_OBJECT - |CV_HAAR_SCALE_IMAGE - , - Size(d,d), - max_objectSize - ); - - for(size_t i=0; i < tmpobjects.size(); i++) { - Rect curres(tmpobjects[i].tl() + r1.tl(), tmpobjects[i].size()); - detectedObjectsInRegions.push_back(curres); - } -} - -bool DetectionBasedTracker::setParameters(const Parameters& params) -{ - if ( (params.minObjectSize <= 0) - || (params.maxObjectSize < 0) - || (params.scaleFactor <= 1.0) - || (params.maxTrackLifetime < 0) ) - { - LOGE("DetectionBasedTracker::setParameters: ERROR: wrong parameters value"); - return false; - } - - separateDetectionWork->lock(); - parameters=params; - separateDetectionWork->unlock(); - return true; -} - -const DetectionBasedTracker::Parameters& DetectionBasedTracker::getParameters() -{ - return parameters; -} - -#endif diff --git a/modules/contrib/src/facerec.cpp b/modules/contrib/src/facerec.cpp deleted file mode 100644 index a3d695a..0000000 --- a/modules/contrib/src/facerec.cpp +++ /dev/null @@ -1,902 +0,0 @@ -/* - * Copyright (c) 2011,2012. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ -#include "precomp.hpp" -#include - -namespace cv -{ - -using std::set; - -// Reads a sequence from a FileNode::SEQ with type _Tp into a result vector. -template -inline void readFileNodeList(const FileNode& fn, vector<_Tp>& result) { - if (fn.type() == FileNode::SEQ) { - for (FileNodeIterator it = fn.begin(); it != fn.end();) { - _Tp item; - it >> item; - result.push_back(item); - } - } -} - -// Writes the a list of given items to a cv::FileStorage. -template -inline void writeFileNodeList(FileStorage& fs, const string& name, - const vector<_Tp>& items) { - // typedefs - typedef typename vector<_Tp>::const_iterator constVecIterator; - // write the elements in item to fs - fs << name << "["; - for (constVecIterator it = items.begin(); it != items.end(); ++it) { - fs << *it; - } - fs << "]"; -} - -static Mat asRowMatrix(InputArrayOfArrays src, int rtype, double alpha=1, double beta=0) { - // make sure the input data is a vector of matrices or vector of vector - if(src.kind() != _InputArray::STD_VECTOR_MAT && src.kind() != _InputArray::STD_VECTOR_VECTOR) { - string error_message = "The data is expected as InputArray::STD_VECTOR_MAT (a std::vector) or _InputArray::STD_VECTOR_VECTOR (a std::vector< vector<...> >)."; - CV_Error(CV_StsBadArg, error_message); - } - // number of samples - size_t n = src.total(); - // return empty matrix if no matrices given - if(n == 0) - return Mat(); - // dimensionality of (reshaped) samples - size_t d = src.getMat(0).total(); - // create data matrix - Mat data((int)n, (int)d, rtype); - // now copy data - for(unsigned int i = 0; i < n; i++) { - // make sure data can be reshaped, throw exception if not! - if(src.getMat(i).total() != d) { - string error_message = format("Wrong number of elements in matrix #%d! Expected %d was %d.", i, d, src.getMat(i).total()); - CV_Error(CV_StsBadArg, error_message); - } - // get a hold of the current row - Mat xi = data.row(i); - // make reshape happy by cloning for non-continuous matrices - if(src.getMat(i).isContinuous()) { - src.getMat(i).reshape(1, 1).convertTo(xi, rtype, alpha, beta); - } else { - src.getMat(i).clone().reshape(1, 1).convertTo(xi, rtype, alpha, beta); - } - } - return data; -} - - -// Removes duplicate elements in a given vector. -template -inline vector<_Tp> remove_dups(const vector<_Tp>& src) { - typedef typename set<_Tp>::const_iterator constSetIterator; - typedef typename vector<_Tp>::const_iterator constVecIterator; - set<_Tp> set_elems; - for (constVecIterator it = src.begin(); it != src.end(); ++it) - set_elems.insert(*it); - vector<_Tp> elems; - for (constSetIterator it = set_elems.begin(); it != set_elems.end(); ++it) - elems.push_back(*it); - return elems; -} - - -// Turk, M., and Pentland, A. "Eigenfaces for recognition.". Journal of -// Cognitive Neuroscience 3 (1991), 71–86. -class Eigenfaces : public FaceRecognizer -{ -private: - int _num_components; - double _threshold; - vector _projections; - Mat _labels; - Mat _eigenvectors; - Mat _eigenvalues; - Mat _mean; - -public: - using FaceRecognizer::save; - using FaceRecognizer::load; - - // Initializes an empty Eigenfaces model. - Eigenfaces(int num_components = 0, double threshold = DBL_MAX) : - _num_components(num_components), - _threshold(threshold) {} - - // Initializes and computes an Eigenfaces model with images in src and - // corresponding labels in labels. num_components will be kept for - // classification. - Eigenfaces(InputArrayOfArrays src, InputArray labels, - int num_components = 0, double threshold = DBL_MAX) : - _num_components(num_components), - _threshold(threshold) { - train(src, labels); - } - - // Computes an Eigenfaces model with images in src and corresponding labels - // in labels. - void train(InputArrayOfArrays src, InputArray labels); - - // Predicts the label of a query image in src. - int predict(InputArray src) const; - - // Predicts the label and confidence for a given sample. - void predict(InputArray _src, int &label, double &dist) const; - - // See FaceRecognizer::load. - void load(const FileStorage& fs); - - // See FaceRecognizer::save. - void save(FileStorage& fs) const; - - AlgorithmInfo* info() const; -}; - -// Belhumeur, P. N., Hespanha, J., and Kriegman, D. "Eigenfaces vs. Fisher- -// faces: Recognition using class specific linear projection.". IEEE -// Transactions on Pattern Analysis and Machine Intelligence 19, 7 (1997), -// 711–720. -class Fisherfaces: public FaceRecognizer -{ -private: - int _num_components; - double _threshold; - Mat _eigenvectors; - Mat _eigenvalues; - Mat _mean; - vector _projections; - Mat _labels; - -public: - using FaceRecognizer::save; - using FaceRecognizer::load; - - // Initializes an empty Fisherfaces model. - Fisherfaces(int num_components = 0, double threshold = DBL_MAX) : - _num_components(num_components), - _threshold(threshold) {} - - // Initializes and computes a Fisherfaces model with images in src and - // corresponding labels in labels. num_components will be kept for - // classification. - Fisherfaces(InputArrayOfArrays src, InputArray labels, - int num_components = 0, double threshold = DBL_MAX) : - _num_components(num_components), - _threshold(threshold) { - train(src, labels); - } - - ~Fisherfaces() {} - - // Computes a Fisherfaces model with images in src and corresponding labels - // in labels. - void train(InputArrayOfArrays src, InputArray labels); - - // Predicts the label of a query image in src. - int predict(InputArray src) const; - - // Predicts the label and confidence for a given sample. - void predict(InputArray _src, int &label, double &dist) const; - - // See FaceRecognizer::load. - void load(const FileStorage& fs); - - // See FaceRecognizer::save. - void save(FileStorage& fs) const; - - AlgorithmInfo* info() const; -}; - -// Face Recognition based on Local Binary Patterns. -// -// Ahonen T, Hadid A. and Pietikäinen M. "Face description with local binary -// patterns: Application to face recognition." IEEE Transactions on Pattern -// Analysis and Machine Intelligence, 28(12):2037-2041. -// -class LBPH : public FaceRecognizer -{ -private: - int _grid_x; - int _grid_y; - int _radius; - int _neighbors; - double _threshold; - - vector _histograms; - Mat _labels; - - // Computes a LBPH model with images in src and - // corresponding labels in labels, possibly preserving - // old model data. - void train(InputArrayOfArrays src, InputArray labels, bool preserveData); - - -public: - using FaceRecognizer::save; - using FaceRecognizer::load; - - // Initializes this LBPH Model. The current implementation is rather fixed - // as it uses the Extended Local Binary Patterns per default. - // - // radius, neighbors are used in the local binary patterns creation. - // grid_x, grid_y control the grid size of the spatial histograms. - LBPH(int radius_=1, int neighbors_=8, - int gridx=8, int gridy=8, - double threshold = DBL_MAX) : - _grid_x(gridx), - _grid_y(gridy), - _radius(radius_), - _neighbors(neighbors_), - _threshold(threshold) {} - - // Initializes and computes this LBPH Model. The current implementation is - // rather fixed as it uses the Extended Local Binary Patterns per default. - // - // (radius=1), (neighbors=8) are used in the local binary patterns creation. - // (grid_x=8), (grid_y=8) controls the grid size of the spatial histograms. - LBPH(InputArrayOfArrays src, - InputArray labels, - int radius_=1, int neighbors_=8, - int gridx=8, int gridy=8, - double threshold = DBL_MAX) : - _grid_x(gridx), - _grid_y(gridy), - _radius(radius_), - _neighbors(neighbors_), - _threshold(threshold) { - train(src, labels); - } - - ~LBPH() { } - - // Computes a LBPH model with images in src and - // corresponding labels in labels. - void train(InputArrayOfArrays src, InputArray labels); - - // Updates this LBPH model with images in src and - // corresponding labels in labels. - void update(InputArrayOfArrays src, InputArray labels); - - // Predicts the label of a query image in src. - int predict(InputArray src) const; - - // Predicts the label and confidence for a given sample. - void predict(InputArray _src, int &label, double &dist) const; - - // See FaceRecognizer::load. - void load(const FileStorage& fs); - - // See FaceRecognizer::save. - void save(FileStorage& fs) const; - - // Getter functions. - int neighbors() const { return _neighbors; } - int radius() const { return _radius; } - int grid_x() const { return _grid_x; } - int grid_y() const { return _grid_y; } - - AlgorithmInfo* info() const; -}; - - -//------------------------------------------------------------------------------ -// FaceRecognizer -//------------------------------------------------------------------------------ -void FaceRecognizer::update(InputArrayOfArrays src, InputArray labels ) { - if( dynamic_cast(this) != 0 ) - { - dynamic_cast(this)->update( src, labels ); - return; - } - - string error_msg = format("This FaceRecognizer (%s) does not support updating, you have to use FaceRecognizer::train to update it.", this->name().c_str()); - CV_Error(CV_StsNotImplemented, error_msg); -} - -void FaceRecognizer::save(const string& filename) const { - FileStorage fs(filename, FileStorage::WRITE); - if (!fs.isOpened()) - CV_Error(CV_StsError, "File can't be opened for writing!"); - this->save(fs); - fs.release(); -} - -void FaceRecognizer::load(const string& filename) { - FileStorage fs(filename, FileStorage::READ); - if (!fs.isOpened()) - CV_Error(CV_StsError, "File can't be opened for writing!"); - this->load(fs); - fs.release(); -} - -//------------------------------------------------------------------------------ -// Eigenfaces -//------------------------------------------------------------------------------ -void Eigenfaces::train(InputArrayOfArrays _src, InputArray _local_labels) { - if(_src.total() == 0) { - string error_message = format("Empty training data was given. You'll need more than one sample to learn a model."); - CV_Error(CV_StsBadArg, error_message); - } else if(_local_labels.getMat().type() != CV_32SC1) { - string error_message = format("Labels must be given as integer (CV_32SC1). Expected %d, but was %d.", CV_32SC1, _local_labels.type()); - CV_Error(CV_StsBadArg, error_message); - } - // make sure data has correct size - if(_src.total() > 1) { - for(int i = 1; i < static_cast(_src.total()); i++) { - if(_src.getMat(i-1).total() != _src.getMat(i).total()) { - string error_message = format("In the Eigenfaces method all input samples (training images) must be of equal size! Expected %d pixels, but was %d pixels.", _src.getMat(i-1).total(), _src.getMat(i).total()); - CV_Error(CV_StsUnsupportedFormat, error_message); - } - } - } - // get labels - Mat labels = _local_labels.getMat(); - // observations in row - Mat data = asRowMatrix(_src, CV_64FC1); - - // number of samples - int n = data.rows; - // assert there are as much samples as labels - if(static_cast(labels.total()) != n) { - string error_message = format("The number of samples (src) must equal the number of labels (labels)! len(src)=%d, len(labels)=%d.", n, labels.total()); - CV_Error(CV_StsBadArg, error_message); - } - // clear existing model data - _labels.release(); - _projections.clear(); - // clip number of components to be valid - if((_num_components <= 0) || (_num_components > n)) - _num_components = n; - - // perform the PCA - PCA pca(data, Mat(), CV_PCA_DATA_AS_ROW, _num_components); - // copy the PCA results - _mean = pca.mean.reshape(1,1); // store the mean vector - _eigenvalues = pca.eigenvalues.clone(); // eigenvalues by row - transpose(pca.eigenvectors, _eigenvectors); // eigenvectors by column - // store labels for prediction - _labels = labels.clone(); - // save projections - for(int sampleIdx = 0; sampleIdx < data.rows; sampleIdx++) { - Mat p = subspaceProject(_eigenvectors, _mean, data.row(sampleIdx)); - _projections.push_back(p); - } -} - -void Eigenfaces::predict(InputArray _src, int &minClass, double &minDist) const { - // get data - Mat src = _src.getMat(); - // make sure the user is passing correct data - if(_projections.empty()) { - // throw error if no data (or simply return -1?) - string error_message = "This Eigenfaces model is not computed yet. Did you call Eigenfaces::train?"; - CV_Error(CV_StsError, error_message); - } else if(_eigenvectors.rows != static_cast(src.total())) { - // check data alignment just for clearer exception messages - string error_message = format("Wrong input image size. Reason: Training and Test images must be of equal size! Expected an image with %d elements, but got %d.", _eigenvectors.rows, src.total()); - CV_Error(CV_StsBadArg, error_message); - } - // project into PCA subspace - Mat q = subspaceProject(_eigenvectors, _mean, src.reshape(1,1)); - minDist = DBL_MAX; - minClass = -1; - for(size_t sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) { - double dist = norm(_projections[sampleIdx], q, NORM_L2); - if((dist < minDist) && (dist < _threshold)) { - minDist = dist; - minClass = _labels.at((int)sampleIdx); - } - } -} - -int Eigenfaces::predict(InputArray _src) const { - int label; - double dummy; - predict(_src, label, dummy); - return label; -} - -void Eigenfaces::load(const FileStorage& fs) { - //read matrices - fs["num_components"] >> _num_components; - fs["mean"] >> _mean; - fs["eigenvalues"] >> _eigenvalues; - fs["eigenvectors"] >> _eigenvectors; - // read sequences - readFileNodeList(fs["projections"], _projections); - fs["labels"] >> _labels; -} - -void Eigenfaces::save(FileStorage& fs) const { - // write matrices - fs << "num_components" << _num_components; - fs << "mean" << _mean; - fs << "eigenvalues" << _eigenvalues; - fs << "eigenvectors" << _eigenvectors; - // write sequences - writeFileNodeList(fs, "projections", _projections); - fs << "labels" << _labels; -} - -//------------------------------------------------------------------------------ -// Fisherfaces -//------------------------------------------------------------------------------ -void Fisherfaces::train(InputArrayOfArrays src, InputArray _lbls) { - if(src.total() == 0) { - string error_message = format("Empty training data was given. You'll need more than one sample to learn a model."); - CV_Error(CV_StsBadArg, error_message); - } else if(_lbls.getMat().type() != CV_32SC1) { - string error_message = format("Labels must be given as integer (CV_32SC1). Expected %d, but was %d.", CV_32SC1, _lbls.type()); - CV_Error(CV_StsBadArg, error_message); - } - // make sure data has correct size - if(src.total() > 1) { - for(int i = 1; i < static_cast(src.total()); i++) { - if(src.getMat(i-1).total() != src.getMat(i).total()) { - string error_message = format("In the Fisherfaces method all input samples (training images) must be of equal size! Expected %d pixels, but was %d pixels.", src.getMat(i-1).total(), src.getMat(i).total()); - CV_Error(CV_StsUnsupportedFormat, error_message); - } - } - } - // get data - Mat labels = _lbls.getMat(); - Mat data = asRowMatrix(src, CV_64FC1); - // number of samples - int N = data.rows; - // make sure labels are passed in correct shape - if(labels.total() != (size_t) N) { - string error_message = format("The number of samples (src) must equal the number of labels (labels)! len(src)=%d, len(labels)=%d.", N, labels.total()); - CV_Error(CV_StsBadArg, error_message); - } else if(labels.rows != 1 && labels.cols != 1) { - string error_message = format("Expected the labels in a matrix with one row or column! Given dimensions are rows=%s, cols=%d.", labels.rows, labels.cols); - CV_Error(CV_StsBadArg, error_message); - } - // clear existing model data - _labels.release(); - _projections.clear(); - // safely copy from cv::Mat to std::vector - vector ll; - for(unsigned int i = 0; i < labels.total(); i++) { - ll.push_back(labels.at(i)); - } - // get the number of unique classes - int C = (int) remove_dups(ll).size(); - // clip number of components to be a valid number - if((_num_components <= 0) || (_num_components > (C-1))) - _num_components = (C-1); - // perform a PCA and keep (N-C) components - PCA pca(data, Mat(), CV_PCA_DATA_AS_ROW, (N-C)); - // project the data and perform a LDA on it - LDA lda(pca.project(data),labels, _num_components); - // store the total mean vector - _mean = pca.mean.reshape(1,1); - // store labels - _labels = labels.clone(); - // store the eigenvalues of the discriminants - lda.eigenvalues().convertTo(_eigenvalues, CV_64FC1); - // Now calculate the projection matrix as pca.eigenvectors * lda.eigenvectors. - // Note: OpenCV stores the eigenvectors by row, so we need to transpose it! - gemm(pca.eigenvectors, lda.eigenvectors(), 1.0, Mat(), 0.0, _eigenvectors, GEMM_1_T); - // store the projections of the original data - for(int sampleIdx = 0; sampleIdx < data.rows; sampleIdx++) { - Mat p = subspaceProject(_eigenvectors, _mean, data.row(sampleIdx)); - _projections.push_back(p); - } -} - -void Fisherfaces::predict(InputArray _src, int &minClass, double &minDist) const { - Mat src = _src.getMat(); - // check data alignment just for clearer exception messages - if(_projections.empty()) { - // throw error if no data (or simply return -1?) - string error_message = "This Fisherfaces model is not computed yet. Did you call Fisherfaces::train?"; - CV_Error(CV_StsBadArg, error_message); - } else if(src.total() != (size_t) _eigenvectors.rows) { - string error_message = format("Wrong input image size. Reason: Training and Test images must be of equal size! Expected an image with %d elements, but got %d.", _eigenvectors.rows, src.total()); - CV_Error(CV_StsBadArg, error_message); - } - // project into LDA subspace - Mat q = subspaceProject(_eigenvectors, _mean, src.reshape(1,1)); - // find 1-nearest neighbor - minDist = DBL_MAX; - minClass = -1; - for(size_t sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) { - double dist = norm(_projections[sampleIdx], q, NORM_L2); - if((dist < minDist) && (dist < _threshold)) { - minDist = dist; - minClass = _labels.at((int)sampleIdx); - } - } -} - -int Fisherfaces::predict(InputArray _src) const { - int label; - double dummy; - predict(_src, label, dummy); - return label; -} - -// See FaceRecognizer::load. -void Fisherfaces::load(const FileStorage& fs) { - //read matrices - fs["num_components"] >> _num_components; - fs["mean"] >> _mean; - fs["eigenvalues"] >> _eigenvalues; - fs["eigenvectors"] >> _eigenvectors; - // read sequences - readFileNodeList(fs["projections"], _projections); - fs["labels"] >> _labels; -} - -// See FaceRecognizer::save. -void Fisherfaces::save(FileStorage& fs) const { - // write matrices - fs << "num_components" << _num_components; - fs << "mean" << _mean; - fs << "eigenvalues" << _eigenvalues; - fs << "eigenvectors" << _eigenvectors; - // write sequences - writeFileNodeList(fs, "projections", _projections); - fs << "labels" << _labels; -} - -//------------------------------------------------------------------------------ -// LBPH -//------------------------------------------------------------------------------ - -template static -void olbp_(InputArray _src, OutputArray _dst) { - // get matrices - Mat src = _src.getMat(); - // allocate memory for result - _dst.create(src.rows-2, src.cols-2, CV_8UC1); - Mat dst = _dst.getMat(); - // zero the result matrix - dst.setTo(0); - // calculate patterns - for(int i=1;i(i,j); - unsigned char code = 0; - code |= (src.at<_Tp>(i-1,j-1) >= center) << 7; - code |= (src.at<_Tp>(i-1,j) >= center) << 6; - code |= (src.at<_Tp>(i-1,j+1) >= center) << 5; - code |= (src.at<_Tp>(i,j+1) >= center) << 4; - code |= (src.at<_Tp>(i+1,j+1) >= center) << 3; - code |= (src.at<_Tp>(i+1,j) >= center) << 2; - code |= (src.at<_Tp>(i+1,j-1) >= center) << 1; - code |= (src.at<_Tp>(i,j-1) >= center) << 0; - dst.at(i-1,j-1) = code; - } - } -} - -//------------------------------------------------------------------------------ -// cv::elbp -//------------------------------------------------------------------------------ -template static -inline void elbp_(InputArray _src, OutputArray _dst, int radius, int neighbors) { - //get matrices - Mat src = _src.getMat(); - // allocate memory for result - _dst.create(src.rows-2*radius, src.cols-2*radius, CV_32SC1); - Mat dst = _dst.getMat(); - // zero - dst.setTo(0); - for(int n=0; n(radius * cos(2.0*CV_PI*n/static_cast(neighbors))); - float y = static_cast(-radius * sin(2.0*CV_PI*n/static_cast(neighbors))); - // relative indices - int fx = static_cast(floor(x)); - int fy = static_cast(floor(y)); - int cx = static_cast(ceil(x)); - int cy = static_cast(ceil(y)); - // fractional part - float ty = y - fy; - float tx = x - fx; - // set interpolation weights - float w1 = (1 - tx) * (1 - ty); - float w2 = tx * (1 - ty); - float w3 = (1 - tx) * ty; - float w4 = tx * ty; - // iterate through your data - for(int i=radius; i < src.rows-radius;i++) { - for(int j=radius;j < src.cols-radius;j++) { - // calculate interpolated value - float t = static_cast(w1*src.at<_Tp>(i+fy,j+fx) + w2*src.at<_Tp>(i+fy,j+cx) + w3*src.at<_Tp>(i+cy,j+fx) + w4*src.at<_Tp>(i+cy,j+cx)); - // floating point precision, so check some machine-dependent epsilon - dst.at(i-radius,j-radius) += ((t > src.at<_Tp>(i,j)) || (std::abs(t-src.at<_Tp>(i,j)) < std::numeric_limits::epsilon())) << n; - } - } - } -} - -static void elbp(InputArray src, OutputArray dst, int radius, int neighbors) -{ - int type = src.type(); - switch (type) { - case CV_8SC1: elbp_(src,dst, radius, neighbors); break; - case CV_8UC1: elbp_(src, dst, radius, neighbors); break; - case CV_16SC1: elbp_(src,dst, radius, neighbors); break; - case CV_16UC1: elbp_(src,dst, radius, neighbors); break; - case CV_32SC1: elbp_(src,dst, radius, neighbors); break; - case CV_32FC1: elbp_(src,dst, radius, neighbors); break; - case CV_64FC1: elbp_(src,dst, radius, neighbors); break; - default: - string error_msg = format("Using Original Local Binary Patterns for feature extraction only works on single-channel images (given %d). Please pass the image data as a grayscale image!", type); - CV_Error(CV_StsNotImplemented, error_msg); - break; - } -} - -static Mat -histc_(const Mat& src, int minVal=0, int maxVal=255, bool normed=false) -{ - Mat result; - // Establish the number of bins. - int histSize = maxVal-minVal+1; - // Set the ranges. - float range[] = { static_cast(minVal), static_cast(maxVal+1) }; - const float* histRange = { range }; - // calc histogram - calcHist(&src, 1, 0, Mat(), result, 1, &histSize, &histRange, true, false); - // normalize - if(normed) { - result /= (int)src.total(); - } - return result.reshape(1,1); -} - -static Mat histc(InputArray _src, int minVal, int maxVal, bool normed) -{ - Mat src = _src.getMat(); - switch (src.type()) { - case CV_8SC1: - return histc_(Mat_(src), minVal, maxVal, normed); - break; - case CV_8UC1: - return histc_(src, minVal, maxVal, normed); - break; - case CV_16SC1: - return histc_(Mat_(src), minVal, maxVal, normed); - break; - case CV_16UC1: - return histc_(src, minVal, maxVal, normed); - break; - case CV_32SC1: - return histc_(Mat_(src), minVal, maxVal, normed); - break; - case CV_32FC1: - return histc_(src, minVal, maxVal, normed); - break; - default: - CV_Error(CV_StsUnmatchedFormats, "This type is not implemented yet."); break; - } - return Mat(); -} - - -static Mat spatial_histogram(InputArray _src, int numPatterns, - int grid_x, int grid_y, bool /*normed*/) -{ - Mat src = _src.getMat(); - // calculate LBP patch size - int width = src.cols/grid_x; - int height = src.rows/grid_y; - // allocate memory for the spatial histogram - Mat result = Mat::zeros(grid_x * grid_y, numPatterns, CV_32FC1); - // return matrix with zeros if no data was given - if(src.empty()) - return result.reshape(1,1); - // initial result_row - int resultRowIdx = 0; - // iterate through grid - for(int i = 0; i < grid_y; i++) { - for(int j = 0; j < grid_x; j++) { - Mat src_cell = Mat(src, Range(i*height,(i+1)*height), Range(j*width,(j+1)*width)); - Mat cell_hist = histc(src_cell, 0, (numPatterns-1), true); - // copy to the result matrix - Mat result_row = result.row(resultRowIdx); - cell_hist.reshape(1,1).convertTo(result_row, CV_32FC1); - // increase row count in result matrix - resultRowIdx++; - } - } - // return result as reshaped feature vector - return result.reshape(1,1); -} - -//------------------------------------------------------------------------------ -// wrapper to cv::elbp (extended local binary patterns) -//------------------------------------------------------------------------------ - -static Mat elbp(InputArray src, int radius, int neighbors) { - Mat dst; - elbp(src, dst, radius, neighbors); - return dst; -} - -void LBPH::load(const FileStorage& fs) { - fs["radius"] >> _radius; - fs["neighbors"] >> _neighbors; - fs["grid_x"] >> _grid_x; - fs["grid_y"] >> _grid_y; - //read matrices - readFileNodeList(fs["histograms"], _histograms); - fs["labels"] >> _labels; -} - -// See FaceRecognizer::save. -void LBPH::save(FileStorage& fs) const { - fs << "radius" << _radius; - fs << "neighbors" << _neighbors; - fs << "grid_x" << _grid_x; - fs << "grid_y" << _grid_y; - // write matrices - writeFileNodeList(fs, "histograms", _histograms); - fs << "labels" << _labels; -} - -void LBPH::train(InputArrayOfArrays _in_src, InputArray _in_labels) { - this->train(_in_src, _in_labels, false); -} - -void LBPH::update(InputArrayOfArrays _in_src, InputArray _in_labels) { - // got no data, just return - if(_in_src.total() == 0) - return; - - this->train(_in_src, _in_labels, true); -} - -void LBPH::train(InputArrayOfArrays _in_src, InputArray _in_labels, bool preserveData) { - if(_in_src.kind() != _InputArray::STD_VECTOR_MAT && _in_src.kind() != _InputArray::STD_VECTOR_VECTOR) { - string error_message = "The images are expected as InputArray::STD_VECTOR_MAT (a std::vector) or _InputArray::STD_VECTOR_VECTOR (a std::vector< vector<...> >)."; - CV_Error(CV_StsBadArg, error_message); - } - if(_in_src.total() == 0) { - string error_message = format("Empty training data was given. You'll need more than one sample to learn a model."); - CV_Error(CV_StsUnsupportedFormat, error_message); - } else if(_in_labels.getMat().type() != CV_32SC1) { - string error_message = format("Labels must be given as integer (CV_32SC1). Expected %d, but was %d.", CV_32SC1, _in_labels.type()); - CV_Error(CV_StsUnsupportedFormat, error_message); - } - // get the vector of matrices - vector src; - _in_src.getMatVector(src); - // get the label matrix - Mat labels = _in_labels.getMat(); - // check if data is well- aligned - if(labels.total() != src.size()) { - string error_message = format("The number of samples (src) must equal the number of labels (labels). Was len(samples)=%d, len(labels)=%d.", src.size(), _labels.total()); - CV_Error(CV_StsBadArg, error_message); - } - // if this model should be trained without preserving old data, delete old model data - if(!preserveData) { - _labels.release(); - _histograms.clear(); - } - // append labels to _labels matrix - for(size_t labelIdx = 0; labelIdx < labels.total(); labelIdx++) { - _labels.push_back(labels.at((int)labelIdx)); - } - // store the spatial histograms of the original data - for(size_t sampleIdx = 0; sampleIdx < src.size(); sampleIdx++) { - // calculate lbp image - Mat lbp_image = elbp(src[sampleIdx], _radius, _neighbors); - // get spatial histogram from this lbp image - Mat p = spatial_histogram( - lbp_image, /* lbp_image */ - static_cast(std::pow(2.0, static_cast(_neighbors))), /* number of possible patterns */ - _grid_x, /* grid size x */ - _grid_y, /* grid size y */ - true); - // add to templates - _histograms.push_back(p); - } -} - -void LBPH::predict(InputArray _src, int &minClass, double &minDist) const { - if(_histograms.empty()) { - // throw error if no data (or simply return -1?) - string error_message = "This LBPH model is not computed yet. Did you call the train method?"; - CV_Error(CV_StsBadArg, error_message); - } - Mat src = _src.getMat(); - // get the spatial histogram from input image - Mat lbp_image = elbp(src, _radius, _neighbors); - Mat query = spatial_histogram( - lbp_image, /* lbp_image */ - static_cast(std::pow(2.0, static_cast(_neighbors))), /* number of possible patterns */ - _grid_x, /* grid size x */ - _grid_y, /* grid size y */ - true /* normed histograms */); - // find 1-nearest neighbor - minDist = DBL_MAX; - minClass = -1; - for(size_t sampleIdx = 0; sampleIdx < _histograms.size(); sampleIdx++) { - double dist = compareHist(_histograms[sampleIdx], query, CV_COMP_CHISQR); - if((dist < minDist) && (dist < _threshold)) { - minDist = dist; - minClass = _labels.at((int) sampleIdx); - } - } -} - -int LBPH::predict(InputArray _src) const { - int label; - double dummy; - predict(_src, label, dummy); - return label; -} - - -Ptr createEigenFaceRecognizer(int num_components, double threshold) -{ - return new Eigenfaces(num_components, threshold); -} - -Ptr createFisherFaceRecognizer(int num_components, double threshold) -{ - return new Fisherfaces(num_components, threshold); -} - -Ptr createLBPHFaceRecognizer(int radius, int neighbors, - int grid_x, int grid_y, double threshold) -{ - return new LBPH(radius, neighbors, grid_x, grid_y, threshold); -} - -CV_INIT_ALGORITHM(Eigenfaces, "FaceRecognizer.Eigenfaces", - obj.info()->addParam(obj, "ncomponents", obj._num_components); - obj.info()->addParam(obj, "threshold", obj._threshold); - obj.info()->addParam(obj, "projections", obj._projections, true); - obj.info()->addParam(obj, "labels", obj._labels, true); - obj.info()->addParam(obj, "eigenvectors", obj._eigenvectors, true); - obj.info()->addParam(obj, "eigenvalues", obj._eigenvalues, true); - obj.info()->addParam(obj, "mean", obj._mean, true)) - -CV_INIT_ALGORITHM(Fisherfaces, "FaceRecognizer.Fisherfaces", - obj.info()->addParam(obj, "ncomponents", obj._num_components); - obj.info()->addParam(obj, "threshold", obj._threshold); - obj.info()->addParam(obj, "projections", obj._projections, true); - obj.info()->addParam(obj, "labels", obj._labels, true); - obj.info()->addParam(obj, "eigenvectors", obj._eigenvectors, true); - obj.info()->addParam(obj, "eigenvalues", obj._eigenvalues, true); - obj.info()->addParam(obj, "mean", obj._mean, true)) - -CV_INIT_ALGORITHM(LBPH, "FaceRecognizer.LBPH", - obj.info()->addParam(obj, "radius", obj._radius); - obj.info()->addParam(obj, "neighbors", obj._neighbors); - obj.info()->addParam(obj, "grid_x", obj._grid_x); - obj.info()->addParam(obj, "grid_y", obj._grid_y); - obj.info()->addParam(obj, "threshold", obj._threshold); - obj.info()->addParam(obj, "histograms", obj._histograms, true); - obj.info()->addParam(obj, "labels", obj._labels, true)) - -bool initModule_contrib() -{ - Ptr efaces = createEigenfaces(), ffaces = createFisherfaces(), lbph = createLBPH(); - return efaces->info() != 0 && ffaces->info() != 0 && lbph->info() != 0; -} - -} diff --git a/modules/contrib/src/featuretracker.cpp b/modules/contrib/src/featuretracker.cpp deleted file mode 100644 index 902b6ae..0000000 --- a/modules/contrib/src/featuretracker.cpp +++ /dev/null @@ -1,229 +0,0 @@ -//*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include -#include -#include "opencv2/calib3d/calib3d.hpp" -#include "opencv2/contrib/hybridtracker.hpp" - -#ifdef HAVE_OPENCV_NONFREE -#include "opencv2/nonfree/nonfree.hpp" - -static bool makeUseOfNonfree = initModule_nonfree(); -#endif - -using namespace cv; - -CvFeatureTracker::CvFeatureTracker(CvFeatureTrackerParams _params) : - params(_params) -{ - switch (params.feature_type) - { - case CvFeatureTrackerParams::SIFT: - dd = Algorithm::create("Feature2D.SIFT"); - if( dd.empty() ) - CV_Error(CV_StsNotImplemented, "OpenCV has been compiled without SIFT support"); - dd->set("nOctaveLayers", 5); - dd->set("contrastThreshold", 0.04); - dd->set("edgeThreshold", 10.7); - break; - case CvFeatureTrackerParams::SURF: - dd = Algorithm::create("Feature2D.SURF"); - if( dd.empty() ) - CV_Error(CV_StsNotImplemented, "OpenCV has been compiled without SURF support"); - dd->set("hessianThreshold", 400); - dd->set("nOctaves", 3); - dd->set("nOctaveLayers", 4); - break; - default: - CV_Error(CV_StsBadArg, "Unknown feature type"); - break; - } - - matcher = new BFMatcher(NORM_L2); -} - -CvFeatureTracker::~CvFeatureTracker() -{ -} - -void CvFeatureTracker::newTrackingWindow(Mat image, Rect selection) -{ - image.copyTo(prev_image); - cvtColor(prev_image, prev_image_bw, CV_BGR2GRAY); - prev_trackwindow = selection; - prev_center.x = selection.x; - prev_center.y = selection.y; - ittr = 0; -} - -Rect CvFeatureTracker::updateTrackingWindow(Mat image) -{ - if(params.feature_type == CvFeatureTrackerParams::OPTICAL_FLOW) - return updateTrackingWindowWithFlow(image); - else - return updateTrackingWindowWithSIFT(image); -} - -Rect CvFeatureTracker::updateTrackingWindowWithSIFT(Mat image) -{ - ittr++; - vector prev_keypoints, curr_keypoints; - vector prev_keys, curr_keys; - Mat prev_desc, curr_desc; - - Rect window = prev_trackwindow; - Mat mask = Mat::zeros(image.size(), CV_8UC1); - rectangle(mask, Point(window.x, window.y), Point(window.x + window.width, - window.y + window.height), Scalar(255), CV_FILLED); - - dd->operator()(prev_image, mask, prev_keypoints, prev_desc); - - window.x -= params.window_size; - window.y -= params.window_size; - window.width += params.window_size; - window.height += params.window_size; - rectangle(mask, Point(window.x, window.y), Point(window.x + window.width, - window.y + window.height), Scalar(255), CV_FILLED); - - dd->operator()(image, mask, curr_keypoints, curr_desc); - - if (prev_keypoints.size() > 4 && curr_keypoints.size() > 4) - { - //descriptor->compute(prev_image, prev_keypoints, prev_desc); - //descriptor->compute(image, curr_keypoints, curr_desc); - - matcher->match(prev_desc, curr_desc, matches); - - for (int i = 0; i < (int)matches.size(); i++) - { - prev_keys.push_back(prev_keypoints[matches[i].queryIdx].pt); - curr_keys.push_back(curr_keypoints[matches[i].trainIdx].pt); - } - - Mat T = findHomography(prev_keys, curr_keys, CV_LMEDS); - - prev_trackwindow.x += cvRound(T.at (0, 2)); - prev_trackwindow.y += cvRound(T.at (1, 2)); - } - - prev_center.x = prev_trackwindow.x; - prev_center.y = prev_trackwindow.y; - prev_image = image; - return prev_trackwindow; -} - -Rect CvFeatureTracker::updateTrackingWindowWithFlow(Mat image) -{ - ittr++; - Size subPixWinSize(10,10), winSize(31,31); - Mat image_bw; - TermCriteria termcrit(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03); - vector status; - vector err; - - cvtColor(image, image_bw, CV_BGR2GRAY); - cvtColor(prev_image, prev_image_bw, CV_BGR2GRAY); - - if (ittr == 1) - { - Mat mask = Mat::zeros(image.size(), CV_8UC1); - rectangle(mask, Point(prev_trackwindow.x, prev_trackwindow.y), Point( - prev_trackwindow.x + prev_trackwindow.width, prev_trackwindow.y - + prev_trackwindow.height), Scalar(255), CV_FILLED); - goodFeaturesToTrack(image_bw, features[1], 500, 0.01, 20, mask, 3, 0, 0.04); - cornerSubPix(image_bw, features[1], subPixWinSize, Size(-1, -1), termcrit); - } - else - { - calcOpticalFlowPyrLK(prev_image_bw, image_bw, features[0], features[1], - status, err, winSize, 3, termcrit); - - Point2f feature0_center(0, 0); - Point2f feature1_center(0, 0); - int goodtracks = 0; - for (int i = 0; i < (int)features[1].size(); i++) - { - if (status[i] == 1) - { - feature0_center.x += features[0][i].x; - feature0_center.y += features[0][i].y; - feature1_center.x += features[1][i].x; - feature1_center.y += features[1][i].y; - goodtracks++; - } - } - - feature0_center.x /= goodtracks; - feature0_center.y /= goodtracks; - feature1_center.x /= goodtracks; - feature1_center.y /= goodtracks; - - prev_center.x += (feature1_center.x - feature0_center.x); - prev_center.y += (feature1_center.y - feature0_center.y); - - prev_trackwindow.x = (int)prev_center.x; - prev_trackwindow.y = (int)prev_center.y; - } - - swap(features[0], features[1]); - image.copyTo(prev_image); - return prev_trackwindow; -} - -void CvFeatureTracker::setTrackingWindow(Rect _window) -{ - prev_trackwindow = _window; -} - -Rect CvFeatureTracker::getTrackingWindow() -{ - return prev_trackwindow; -} - -Point2f CvFeatureTracker::getTrackingCenter() -{ - Point2f center(0, 0); - center.x = (float)(prev_center.x + prev_trackwindow.width/2.0); - center.y = (float)(prev_center.y + prev_trackwindow.height/2.0); - return center; -} diff --git a/modules/contrib/src/fuzzymeanshifttracker.cpp b/modules/contrib/src/fuzzymeanshifttracker.cpp deleted file mode 100644 index 1932ad5..0000000 --- a/modules/contrib/src/fuzzymeanshifttracker.cpp +++ /dev/null @@ -1,720 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, copy or use the software. -// -// Copyright (C) 2009, Farhad Dadgostar -// Intel Corporation and third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -CvFuzzyPoint::CvFuzzyPoint(double _x, double _y) -{ - x = _x; - y = _y; -} - -bool CvFuzzyCurve::between(double x, double x1, double x2) -{ - if ((x >= x1) && (x <= x2)) - return true; - else if ((x >= x2) && (x <= x1)) - return true; - - return false; -} - -CvFuzzyCurve::CvFuzzyCurve() -{ - value = 0; -} - -CvFuzzyCurve::~CvFuzzyCurve() -{ - // nothing to do -} - -void CvFuzzyCurve::setCentre(double _centre) -{ - centre = _centre; -} - -double CvFuzzyCurve::getCentre() -{ - return centre; -} - -void CvFuzzyCurve::clear() -{ - points.clear(); -} - -void CvFuzzyCurve::addPoint(double x, double y) -{ - points.push_back(CvFuzzyPoint(x, y)); -} - -double CvFuzzyCurve::calcValue(double param) -{ - int size = (int)points.size(); - double x1, y1, x2, y2, m, y; - for (int i = 1; i < size; i++) - { - x1 = points[i-1].x; - x2 = points[i].x; - if (between(param, x1, x2)) { - y1 = points[i-1].y; - y2 = points[i].y; - if (x2 == x1) - return y2; - m = (y2-y1)/(x2-x1); - y = m*(param-x1)+y1; - return y; - } - } - return 0; -} - -double CvFuzzyCurve::getValue() -{ - return value; -} - -void CvFuzzyCurve::setValue(double _value) -{ - value = _value; -} - - -CvFuzzyFunction::CvFuzzyFunction() -{ - // nothing to do -} - -CvFuzzyFunction::~CvFuzzyFunction() -{ - curves.clear(); -} - -void CvFuzzyFunction::addCurve(CvFuzzyCurve *curve, double value) -{ - curves.push_back(*curve); - curve->setValue(value); -} - -void CvFuzzyFunction::resetValues() -{ - int numCurves = (int)curves.size(); - for (int i = 0; i < numCurves; i++) - curves[i].setValue(0); -} - -double CvFuzzyFunction::calcValue() -{ - double s1 = 0, s2 = 0, v; - int numCurves = (int)curves.size(); - for (int i = 0; i < numCurves; i++) - { - v = curves[i].getValue(); - s1 += curves[i].getCentre() * v; - s2 += v; - } - - if (s2 != 0) - return s1/s2; - else - return 0; -} - -CvFuzzyCurve *CvFuzzyFunction::newCurve() -{ - CvFuzzyCurve *c; - c = new CvFuzzyCurve(); - addCurve(c); - return c; -} - -CvFuzzyRule::CvFuzzyRule() -{ - fuzzyInput1 = NULL; - fuzzyInput2 = NULL; - fuzzyOutput = NULL; -} - -CvFuzzyRule::~CvFuzzyRule() -{ - if (fuzzyInput1 != NULL) - delete fuzzyInput1; - - if (fuzzyInput2 != NULL) - delete fuzzyInput2; - - if (fuzzyOutput != NULL) - delete fuzzyOutput; -} - -void CvFuzzyRule::setRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1) -{ - fuzzyInput1 = c1; - fuzzyInput2 = c2; - fuzzyOutput = o1; -} - -double CvFuzzyRule::calcValue(double param1, double param2) -{ - double v1, v2; - v1 = fuzzyInput1->calcValue(param1); - if (fuzzyInput2 != NULL) - { - v2 = fuzzyInput2->calcValue(param2); - if (v1 < v2) - return v1; - else - return v2; - } - else - return v1; -} - -CvFuzzyCurve *CvFuzzyRule::getOutputCurve() -{ - return fuzzyOutput; -} - -CvFuzzyController::CvFuzzyController() -{ - // nothing to do -} - -CvFuzzyController::~CvFuzzyController() -{ - int size = (int)rules.size(); - for(int i = 0; i < size; i++) - delete rules[i]; -} - -void CvFuzzyController::addRule(CvFuzzyCurve *c1, CvFuzzyCurve *c2, CvFuzzyCurve *o1) -{ - CvFuzzyRule *f = new CvFuzzyRule(); - rules.push_back(f); - f->setRule(c1, c2, o1); -} - -double CvFuzzyController::calcOutput(double param1, double param2) -{ - double v; - CvFuzzyFunction list; - int size = (int)rules.size(); - - for(int i = 0; i < size; i++) - { - v = rules[i]->calcValue(param1, param2); - if (v != 0) - list.addCurve(rules[i]->getOutputCurve(), v); - } - v = list.calcValue(); - return v; -} - -CvFuzzyMeanShiftTracker::FuzzyResizer::FuzzyResizer() -{ - CvFuzzyCurve *i1L, *i1M, *i1H; - CvFuzzyCurve *oS, *oZE, *oE; - CvFuzzyCurve *c; - - double MedStart = 0.1, MedWidth = 0.15; - - c = iInput.newCurve(); - c->addPoint(0, 1); - c->addPoint(0.1, 0); - c->setCentre(0); - i1L = c; - - c = iInput.newCurve(); - c->addPoint(0.05, 0); - c->addPoint(MedStart, 1); - c->addPoint(MedStart+MedWidth, 1); - c->addPoint(MedStart+MedWidth+0.05, 0); - c->setCentre(MedStart+(MedWidth/2)); - i1M = c; - - c = iInput.newCurve(); - c->addPoint(MedStart+MedWidth, 0); - c->addPoint(1, 1); - c->addPoint(1000, 1); - c->setCentre(1); - i1H = c; - - c = iOutput.newCurve(); - c->addPoint(-10000, 1); - c->addPoint(-5, 1); - c->addPoint(-0.5, 0); - c->setCentre(-5); - oS = c; - - c = iOutput.newCurve(); - c->addPoint(-1, 0); - c->addPoint(-0.05, 1); - c->addPoint(0.05, 1); - c->addPoint(1, 0); - c->setCentre(0); - oZE = c; - - c = iOutput.newCurve(); - c->addPoint(-0.5, 0); - c->addPoint(5, 1); - c->addPoint(1000, 1); - c->setCentre(5); - oE = c; - - fuzzyController.addRule(i1L, NULL, oS); - fuzzyController.addRule(i1M, NULL, oZE); - fuzzyController.addRule(i1H, NULL, oE); -} - -int CvFuzzyMeanShiftTracker::FuzzyResizer::calcOutput(double edgeDensity, double density) -{ - return (int)fuzzyController.calcOutput(edgeDensity, density); -} - -CvFuzzyMeanShiftTracker::SearchWindow::SearchWindow() -{ - x = 0; - y = 0; - width = 0; - height = 0; - maxWidth = 0; - maxHeight = 0; - xGc = 0; - yGc = 0; - m00 = 0; - m01 = 0; - m10 = 0; - m11 = 0; - m02 = 0; - m20 = 0; - ellipseHeight = 0; - ellipseWidth = 0; - ellipseAngle = 0; - density = 0; - depthLow = 0; - depthHigh = 0; - fuzzyResizer = NULL; -} - -CvFuzzyMeanShiftTracker::SearchWindow::~SearchWindow() -{ - if (fuzzyResizer != NULL) - delete fuzzyResizer; -} - -void CvFuzzyMeanShiftTracker::SearchWindow::setSize(int _x, int _y, int _width, int _height) -{ - x = _x; - y = _y; - width = _width; - height = _height; - - if (x < 0) - x = 0; - - if (y < 0) - y = 0; - - if (x + width > maxWidth) - width = maxWidth - x; - - if (y + height > maxHeight) - height = maxHeight - y; -} - -void CvFuzzyMeanShiftTracker::SearchWindow::initDepthValues(IplImage *maskImage, IplImage *depthMap) -{ - unsigned int d=0, mind = 0xFFFF, maxd = 0, m0 = 0, m1 = 0, mc, dd; - unsigned char *data = NULL; - unsigned short *depthData = NULL; - - for (int j = 0; j < height; j++) - { - data = (unsigned char *)(maskImage->imageData + (maskImage->widthStep * (j + y)) + x); - if (depthMap) - depthData = (unsigned short *)(depthMap->imageData + (depthMap->widthStep * (j + y)) + x); - - for (int i = 0; i < width; i++) - { - if (*data) - { - m0 += 1; - - if (depthData) - { - if (*depthData) - { - d = *depthData; - m1 += d; - if (d < mind) - mind = d; - if (d > maxd) - maxd = d; - } - depthData++; - } - } - data++; - } - } - - if (m0 > 0) - { - mc = m1/m0; - if ((mc - mind) > (maxd - mc)) - dd = maxd - mc; - else - dd = mc - mind; - dd = dd - dd/10; - depthHigh = mc + dd; - depthLow = mc - dd; - } - else - { - depthHigh = 32000; - depthLow = 0; - } -} - -bool CvFuzzyMeanShiftTracker::SearchWindow::shift() -{ - if ((xGc != (width/2)) || (yGc != (height/2))) - { - setSize(x + (xGc-(width/2)), y + (yGc-(height/2)), width, height); - return true; - } - else - { - return false; - } -} - -void CvFuzzyMeanShiftTracker::SearchWindow::extractInfo(IplImage *maskImage, IplImage *depthMap, bool initDepth) -{ - m00 = 0; - m10 = 0; - m01 = 0; - m11 = 0; - density = 0; - m02 = 0; - m20 = 0; - ellipseHeight = 0; - ellipseWidth = 0; - - maxWidth = maskImage->width; - maxHeight = maskImage->height; - - if (initDepth) - initDepthValues(maskImage, depthMap); - - unsigned char *maskData = NULL; - unsigned short *depthData = NULL, depth; - bool isOk; - unsigned long count; - - verticalEdgeLeft = 0; - verticalEdgeRight = 0; - horizontalEdgeTop = 0; - horizontalEdgeBottom = 0; - - for (int j = 0; j < height; j++) - { - maskData = (unsigned char *)(maskImage->imageData + (maskImage->widthStep * (j + y)) + x); - if (depthMap) - depthData = (unsigned short *)(depthMap->imageData + (depthMap->widthStep * (j + y)) + x); - - count = 0; - for (int i = 0; i < width; i++) - { - if (*maskData) - { - isOk = true; - if (depthData) - { - depth = (*depthData); - if ((depth > depthHigh) || (depth < depthLow)) - isOk = false; - - depthData++; - } - - if (isOk) - { - m00++; - m01 += j; - m10 += i; - m02 += (j * j); - m20 += (i * i); - m11 += (j * i); - - if (i == 0) - verticalEdgeLeft++; - else if (i == width-1) - verticalEdgeRight++; - else if (j == 0) - horizontalEdgeTop++; - else if (j == height-1) - horizontalEdgeBottom++; - - count++; - } - } - maskData++; - } - } - - if (m00 > 0) - { - xGc = (m10 / m00); - yGc = (m01 / m00); - - double a, b, c, e1, e2, e3; - a = ((double)m20/(double)m00)-(xGc * xGc); - b = 2*(((double)m11/(double)m00)-(xGc * yGc)); - c = ((double)m02/(double)m00)-(yGc * yGc); - e1 = a+c; - e3 = a-c; - e2 = sqrt((b*b)+(e3*e3)); - ellipseHeight = int(sqrt(0.5*(e1+e2))); - ellipseWidth = int(sqrt(0.5*(e1-e2))); - if (e3 == 0) - ellipseAngle = 0; - else - ellipseAngle = 0.5*atan(b/e3); - - density = (double)m00/(double)(width * height); - } - else - { - xGc = width / 2; - yGc = height / 2; - ellipseHeight = 0; - ellipseWidth = 0; - ellipseAngle = 0; - density = 0; - } -} - -void CvFuzzyMeanShiftTracker::SearchWindow::getResizeAttribsEdgeDensityLinear(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh) { - int x1 = horizontalEdgeTop; - int x2 = horizontalEdgeBottom; - int y1 = verticalEdgeLeft; - int y2 = verticalEdgeRight; - int gx = (width*2)/5; - int gy = (height*2)/5; - int lx = width/10; - int ly = height/10; - - resizeDy = 0; - resizeDh = 0; - resizeDx = 0; - resizeDw = 0; - - if (x1 > gx) { - resizeDy = -1; - } else if (x1 < lx) { - resizeDy = +1; - } - - if (x2 > gx) { - resizeDh = resizeDy + 1; - } else if (x2 < lx) { - resizeDh = - (resizeDy + 1); - } else { - resizeDh = - resizeDy; - } - - if (y1 > gy) { - resizeDx = -1; - } else if (y1 < ly) { - resizeDx = +1; - } - - if (y2 > gy) { - resizeDw = resizeDx + 1; - } else if (y2 < ly) { - resizeDw = - (resizeDx + 1); - } else { - resizeDw = - resizeDx; - } -} - -void CvFuzzyMeanShiftTracker::SearchWindow::getResizeAttribsInnerDensity(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh) -{ - int newWidth, newHeight, dx, dy; - double px, py; - newWidth = int(sqrt(double(m00)*1.3)); - newHeight = int(newWidth*1.2); - dx = (newWidth - width); - dy = (newHeight - height); - px = (double)xGc/(double)width; - py = (double)yGc/(double)height; - resizeDx = (int)(px*dx); - resizeDy = (int)(py*dy); - resizeDw = (int)((1-px)*dx); - resizeDh = (int)((1-py)*dy); -} - -void CvFuzzyMeanShiftTracker::SearchWindow::getResizeAttribsEdgeDensityFuzzy(int &resizeDx, int &resizeDy, int &resizeDw, int &resizeDh) -{ - double dx1=0, dx2, dy1, dy2; - - resizeDy = 0; - resizeDh = 0; - resizeDx = 0; - resizeDw = 0; - - if (fuzzyResizer == NULL) - fuzzyResizer = new FuzzyResizer(); - - dx2 = fuzzyResizer->calcOutput(double(verticalEdgeRight)/double(height), density); - if (dx1 == dx2) - { - resizeDx = int(-dx1); - resizeDw = int(dx1+dx2); - } - - dy1 = fuzzyResizer->calcOutput(double(horizontalEdgeTop)/double(width), density); - dy2 = fuzzyResizer->calcOutput(double(horizontalEdgeBottom)/double(width), density); - - dx1 = fuzzyResizer->calcOutput(double(verticalEdgeLeft)/double(height), density); - dx2 = fuzzyResizer->calcOutput(double(verticalEdgeRight)/double(height), density); - //if (dx1 == dx2) - { - resizeDx = int(-dx1); - resizeDw = int(dx1+dx2); - } - - dy1 = fuzzyResizer->calcOutput(double(horizontalEdgeTop)/double(width), density); - dy2 = fuzzyResizer->calcOutput(double(horizontalEdgeBottom)/double(width), density); - //if (dy1 == dy2) - { - resizeDy = int(-dy1); - resizeDh = int(dy1+dy2); - } -} - -bool CvFuzzyMeanShiftTracker::SearchWindow::meanShift(IplImage *maskImage, IplImage *depthMap, int maxIteration, bool initDepth) -{ - numShifts = 0; - do - { - extractInfo(maskImage, depthMap, initDepth); - if (! shift()) - return true; - } while (++numShifts < maxIteration); - - return false; -} - -void CvFuzzyMeanShiftTracker::findOptimumSearchWindow(SearchWindow &searchWindow, IplImage *maskImage, IplImage *depthMap, int maxIteration, int resizeMethod, bool initDepth) -{ - int resizeDx, resizeDy, resizeDw, resizeDh; - resizeDx = 0; - resizeDy = 0; - resizeDw = 0; - resizeDh = 0; - searchWindow.numIters = 0; - for (int i = 0; i < maxIteration; i++) - { - searchWindow.numIters++; - searchWindow.meanShift(maskImage, depthMap, MaxMeanShiftIteration, initDepth); - switch (resizeMethod) - { - case rmEdgeDensityLinear : - searchWindow.getResizeAttribsEdgeDensityLinear(resizeDx, resizeDy, resizeDw, resizeDh); - break; - case rmEdgeDensityFuzzy : - //searchWindow.getResizeAttribsEdgeDensityLinear(resizeDx, resizeDy, resizeDw, resizeDh); - searchWindow.getResizeAttribsEdgeDensityFuzzy(resizeDx, resizeDy, resizeDw, resizeDh); - break; - case rmInnerDensity : - searchWindow.getResizeAttribsInnerDensity(resizeDx, resizeDy, resizeDw, resizeDh); - break; - default: - searchWindow.getResizeAttribsEdgeDensityLinear(resizeDx, resizeDy, resizeDw, resizeDh); - } - - searchWindow.ldx = resizeDx; - searchWindow.ldy = resizeDy; - searchWindow.ldw = resizeDw; - searchWindow.ldh = resizeDh; - - if ((resizeDx == 0) && (resizeDy == 0) && (resizeDw == 0) && (resizeDh == 0)) - break; - - searchWindow.setSize(searchWindow.x + resizeDx, searchWindow.y + resizeDy, searchWindow.width + resizeDw, searchWindow.height + resizeDh); - } -} - -CvFuzzyMeanShiftTracker::CvFuzzyMeanShiftTracker() -{ - searchMode = tsSetWindow; -} - -CvFuzzyMeanShiftTracker::~CvFuzzyMeanShiftTracker() -{ - // nothing to do -} - -void CvFuzzyMeanShiftTracker::track(IplImage *maskImage, IplImage *depthMap, int resizeMethod, bool resetSearch, int minKernelMass) -{ - bool initDepth = false; - - if (resetSearch) - searchMode = tsSetWindow; - - switch (searchMode) - { - case tsDisabled: - return; - case tsSearching: - return; - case tsSetWindow: - kernel.maxWidth = maskImage->width; - kernel.maxHeight = maskImage->height; - kernel.setSize(0, 0, maskImage->width, maskImage->height); - initDepth = true; - case tsTracking: - searchMode = tsSearching; - findOptimumSearchWindow(kernel, maskImage, depthMap, MaxSetSizeIteration, resizeMethod, initDepth); - if ((kernel.density == 0) || (kernel.m00 < minKernelMass)) - searchMode = tsSetWindow; - else - searchMode = tsTracking; - } -} diff --git a/modules/contrib/src/gencolors.cpp b/modules/contrib/src/gencolors.cpp deleted file mode 100644 index 42fc411..0000000 --- a/modules/contrib/src/gencolors.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "opencv2/core/core.hpp" -#include "precomp.hpp" - -#include - -using namespace cv; - -static void downsamplePoints( const Mat& src, Mat& dst, size_t count ) -{ - CV_Assert( count >= 2 ); - CV_Assert( src.cols == 1 || src.rows == 1 ); - CV_Assert( src.total() >= count ); - CV_Assert( src.type() == CV_8UC3); - - dst.create( 1, (int)count, CV_8UC3 ); - //TODO: optimize by exploiting symmetry in the distance matrix - Mat dists( (int)src.total(), (int)src.total(), CV_32FC1, Scalar(0) ); - if( dists.empty() ) - std::cerr << "Such big matrix cann't be created." << std::endl; - - for( int i = 0; i < dists.rows; i++ ) - { - for( int j = i; j < dists.cols; j++ ) - { - float dist = (float)norm(src.at >(i) - src.at >(j)); - dists.at(j, i) = dists.at(i, j) = dist; - } - } - - double maxVal; - Point maxLoc; - minMaxLoc(dists, 0, &maxVal, 0, &maxLoc); - - dst.at >(0) = src.at >(maxLoc.x); - dst.at >(1) = src.at >(maxLoc.y); - - Mat activedDists( 0, dists.cols, dists.type() ); - Mat candidatePointsMask( 1, dists.cols, CV_8UC1, Scalar(255) ); - activedDists.push_back( dists.row(maxLoc.y) ); - candidatePointsMask.at(0, maxLoc.y) = 0; - - for( size_t i = 2; i < count; i++ ) - { - activedDists.push_back(dists.row(maxLoc.x)); - candidatePointsMask.at(0, maxLoc.x) = 0; - - Mat minDists; - reduce( activedDists, minDists, 0, CV_REDUCE_MIN ); - minMaxLoc( minDists, 0, &maxVal, 0, &maxLoc, candidatePointsMask ); - dst.at >((int)i) = src.at >(maxLoc.x); - } -} - -void cv::generateColors( std::vector& colors, size_t count, size_t factor ) -{ - if( count < 1 ) - return; - - colors.resize(count); - - if( count == 1 ) - { - colors[0] = Scalar(0,0,255); // red - return; - } - if( count == 2 ) - { - colors[0] = Scalar(0,0,255); // red - colors[1] = Scalar(0,255,0); // green - return; - } - - // Generate a set of colors in RGB space. A size of the set is severel times (=factor) larger then - // the needed count of colors. - Mat bgr( 1, (int)(count*factor), CV_8UC3 ); - randu( bgr, 0, 256 ); - - // Convert the colors set to Lab space. - // Distances between colors in this space correspond a human perception. - Mat lab; - cvtColor( bgr, lab, CV_BGR2Lab); - - // Subsample colors from the generated set so that - // to maximize the minimum distances between each other. - // Douglas-Peucker algorithm is used for this. - Mat lab_subset; - downsamplePoints( lab, lab_subset, count ); - - // Convert subsampled colors back to RGB - Mat bgr_subset; - cvtColor( lab_subset, bgr_subset, CV_Lab2BGR ); - - CV_Assert( bgr_subset.total() == count ); - for( size_t i = 0; i < count; i++ ) - { - Point3_ c = bgr_subset.at >((int)i); - colors[i] = Scalar(c.x, c.y, c.z); - } -} diff --git a/modules/contrib/src/hybridtracker.cpp b/modules/contrib/src/hybridtracker.cpp deleted file mode 100644 index 0fd31f8..0000000 --- a/modules/contrib/src/hybridtracker.cpp +++ /dev/null @@ -1,236 +0,0 @@ -//*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include "opencv2/contrib/hybridtracker.hpp" - -using namespace cv; -using namespace std; - -CvHybridTrackerParams::CvHybridTrackerParams(float _ft_tracker_weight, float _ms_tracker_weight, - CvFeatureTrackerParams _ft_params, - CvMeanShiftTrackerParams _ms_params, - CvMotionModel) -{ - ft_tracker_weight = _ft_tracker_weight; - ms_tracker_weight = _ms_tracker_weight; - ft_params = _ft_params; - ms_params = _ms_params; -} - -CvMeanShiftTrackerParams::CvMeanShiftTrackerParams(int _tracking_type, CvTermCriteria _term_crit) -{ - tracking_type = _tracking_type; - term_crit = _term_crit; -} - -CvHybridTracker::CvHybridTracker() { - -} - -CvHybridTracker::CvHybridTracker(HybridTrackerParams _params) : - params(_params) { - params.ft_params.feature_type = CvFeatureTrackerParams::SIFT; - mstracker = new CvMeanShiftTracker(params.ms_params); - fttracker = new CvFeatureTracker(params.ft_params); -} - -CvHybridTracker::~CvHybridTracker() { - if (mstracker != NULL) - delete mstracker; - if (fttracker != NULL) - delete fttracker; -} - -inline float CvHybridTracker::getL2Norm(Point2f p1, Point2f p2) { - float distance = (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - - p2.y); - return sqrt(distance); -} - -Mat CvHybridTracker::getDistanceProjection(Mat image, Point2f center) { - Mat hist(image.size(), CV_64F); - - double lu = getL2Norm(Point(0, 0), center); - double ru = getL2Norm(Point(0, image.size().width), center); - double rd = getL2Norm(Point(image.size().height, image.size().width), - center); - double ld = getL2Norm(Point(image.size().height, 0), center); - - double max = (lu < ru) ? lu : ru; - max = (max < rd) ? max : rd; - max = (max < ld) ? max : ld; - - for (int i = 0; i < hist.rows; i++) - for (int j = 0; j < hist.cols; j++) - hist.at (i, j) = 1.0 - (getL2Norm(Point(i, j), center) - / max); - - return hist; -} - -Mat CvHybridTracker::getGaussianProjection(Mat image, int ksize, double sigma, - Point2f center) { - Mat kernel = getGaussianKernel(ksize, sigma, CV_64F); - double max = kernel.at (ksize / 2); - - Mat hist(image.size(), CV_64F); - for (int i = 0; i < hist.rows; i++) - for (int j = 0; j < hist.cols; j++) { - int pos = cvRound(getL2Norm(Point(i, j), center)); - if (pos < ksize / 2.0) - hist.at (i, j) = 1.0 - (kernel.at (pos) / max); - } - - return hist; -} - -void CvHybridTracker::newTracker(Mat image, Rect selection) { - prev_proj = Mat::zeros(image.size(), CV_64FC1); - prev_center = Point2f(selection.x + selection.width / 2.0f, selection.y - + selection.height / 2.0f); - prev_window = selection; - - mstracker->newTrackingWindow(image, selection); - fttracker->newTrackingWindow(image, selection); - - samples = cvCreateMat(2, 1, CV_32FC1); - labels = cvCreateMat(2, 1, CV_32SC1); - - ittr = 0; -} - -void CvHybridTracker::updateTracker(Mat image) { - ittr++; - - //copy over clean images: TODO - mstracker->updateTrackingWindow(image); - fttracker->updateTrackingWindowWithFlow(image); - - if (params.motion_model == CvMotionModel::EM) - updateTrackerWithEM(image); - else - updateTrackerWithLowPassFilter(image); - - // Regression to find new weights - Point2f ms_center = mstracker->getTrackingEllipse().center; - Point2f ft_center = fttracker->getTrackingCenter(); - -#ifdef DEBUG_HYTRACKER - circle(image, ms_center, 3, Scalar(0, 0, 255), -1, 8); - circle(image, ft_center, 3, Scalar(255, 0, 0), -1, 8); - putText(image, "ms", Point(ms_center.x+2, ms_center.y), FONT_HERSHEY_PLAIN, 0.75, Scalar(255, 255, 255)); - putText(image, "ft", Point(ft_center.x+2, ft_center.y), FONT_HERSHEY_PLAIN, 0.75, Scalar(255, 255, 255)); -#endif - - double ms_len = getL2Norm(ms_center, curr_center); - double ft_len = getL2Norm(ft_center, curr_center); - double total_len = ms_len + ft_len; - - params.ms_tracker_weight *= (ittr - 1); - params.ms_tracker_weight += (float)((ms_len / total_len)); - params.ms_tracker_weight /= ittr; - params.ft_tracker_weight *= (ittr - 1); - params.ft_tracker_weight += (float)((ft_len / total_len)); - params.ft_tracker_weight /= ittr; - - circle(image, prev_center, 3, Scalar(0, 0, 0), -1, 8); - circle(image, curr_center, 3, Scalar(255, 255, 255), -1, 8); - - prev_center = curr_center; - prev_window.x = (int)(curr_center.x-prev_window.width/2.0); - prev_window.y = (int)(curr_center.y-prev_window.height/2.0); - - mstracker->setTrackingWindow(prev_window); - fttracker->setTrackingWindow(prev_window); -} - -void CvHybridTracker::updateTrackerWithEM(Mat image) { - Mat ms_backproj = mstracker->getHistogramProjection(CV_64F); - Mat ms_distproj = getDistanceProjection(image, mstracker->getTrackingCenter()); - Mat ms_proj = ms_backproj.mul(ms_distproj); - - float dist_err = getL2Norm(mstracker->getTrackingCenter(), fttracker->getTrackingCenter()); - Mat ft_gaussproj = getGaussianProjection(image, cvRound(dist_err), -1, fttracker->getTrackingCenter()); - Mat ft_distproj = getDistanceProjection(image, fttracker->getTrackingCenter()); - Mat ft_proj = ft_gaussproj.mul(ft_distproj); - - Mat proj = params.ms_tracker_weight * ms_proj + params.ft_tracker_weight * ft_proj + prev_proj; - - int sample_count = countNonZero(proj); - cvReleaseMat(&samples); - cvReleaseMat(&labels); - samples = cvCreateMat(sample_count, 2, CV_32FC1); - labels = cvCreateMat(sample_count, 1, CV_32SC1); - - int count = 0; - for (int i = 0; i < proj.rows; i++) - for (int j = 0; j < proj.cols; j++) - if (proj.at (i, j) > 0) { - samples->data.fl[count * 2] = (float)i; - samples->data.fl[count * 2 + 1] = (float)j; - count++; - } - - cv::Mat lbls; - - EM em_model(1, EM::COV_MAT_SPHERICAL, TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 10000, 0.001)); - em_model.train(cvarrToMat(samples), noArray(), lbls); - if(labels) - lbls.copyTo(cvarrToMat(labels)); - - Mat em_means = em_model.get("means"); - curr_center.x = (float)em_means.at(0, 0); - curr_center.y = (float)em_means.at(0, 1); -} - -void CvHybridTracker::updateTrackerWithLowPassFilter(Mat) { - RotatedRect ms_track = mstracker->getTrackingEllipse(); - Point2f ft_center = fttracker->getTrackingCenter(); - - float a = params.low_pass_gain; - curr_center.x = (1 - a) * prev_center.x + a * (params.ms_tracker_weight * ms_track.center.x + params.ft_tracker_weight * ft_center.x); - curr_center.y = (1 - a) * prev_center.y + a * (params.ms_tracker_weight * ms_track.center.y + params.ft_tracker_weight * ft_center.y); -} - -Rect CvHybridTracker::getTrackingWindow() { - return prev_window; -} diff --git a/modules/contrib/src/imagelogpolprojection.cpp b/modules/contrib/src/imagelogpolprojection.cpp deleted file mode 100644 index 2824949..0000000 --- a/modules/contrib/src/imagelogpolprojection.cpp +++ /dev/null @@ -1,449 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" -#include "imagelogpolprojection.hpp" - -#include -#include - -// @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ - -namespace cv -{ - -// constructor -ImageLogPolProjection::ImageLogPolProjection(const unsigned int nbRows, const unsigned int nbColumns, const PROJECTIONTYPE projection, const bool colorModeCapable) -:BasicRetinaFilter(nbRows, nbColumns), - _sampledFrame(0), - _tempBuffer(_localBuffer), - _transformTable(0), - _irregularLPfilteredFrame(_filterOutput) -{ - _inputDoubleNBpixels=nbRows*nbColumns*2; - _selectedProjection = projection; - _reductionFactor=0; - _initOK=false; - _usefullpixelIndex=0; - _colorModeCapable=colorModeCapable; -#ifdef IMAGELOGPOLPROJECTION_DEBUG - std::cout<<"ImageLogPolProjection::allocating"< private init functions dedicated to each projection -bool ImageLogPolProjection::_initLogRetinaSampling(const double reductionFactor, const double samplingStrenght) -{ - _initOK=false; - - if (_selectedProjection!=RETINALOGPROJECTION) - { - std::cerr<<"ImageLogPolProjection::initLogRetinaSampling: could not initialize logPolar projection for a log projection system\n -> you probably chose the wrong init function, use initLogPolarCortexSampling() instead"<getNBrows(), reductionFactor); - _outputNBcolumns=predictOutputSize(this->getNBcolumns(), reductionFactor); - _outputNBpixels=_outputNBrows*_outputNBcolumns; - _outputDoubleNBpixels=_outputNBrows*_outputNBcolumns*2; - -#ifdef IMAGELOGPOLPROJECTION_DEBUG - std::cout<<"ImageLogPolProjection::initLogRetinaSampling: Log resampled image resampling factor: "< ImageLogPolProjection::(u, v)="< ImageLogPolProjection::(u, v)="< "<<(halfInputRows-u)+_filterOutput.getNBrows()*(halfInputColumns+v)< you probably chose the wrong init function, use initLogRetinaSampling() instead"< radiusAxis(_outputNBcolumns); - double radiusStep=2.30/(double)_outputNBcolumns; - for (unsigned int i=0;i<_outputNBcolumns;++i) - { - radiusAxis[i]=i*radiusStep; - } - std::valarray orientationAxis(_outputNBrows); - double orientationStep=-2.0*CV_PI/(double)_outputNBrows; - for (unsigned int io=0;io<_outputNBrows;++io) - { - orientationAxis[io]=io*orientationStep; - } - // -> use a temporay transform table which is bigger than the final one, we only report pixels coordinates that are included in the sampled picture - std::valarray tempTransformTable(2*_outputNBpixels); // the structure would be: (pixelInputCoordinate n)(pixelOutputCoordinate n)(pixelInputCoordinate n+1)(pixelOutputCoordinate n+1) - _usefullpixelIndex=0; - - //std::cout<<"ImageLogPolProjection::Starting cortex projection"<0)&&(rowIndex<_filterOutput.getNBrows())&&(rowIndex>0)) - { - // set coordinate - tempTransformTable[_usefullpixelIndex++]=radiusIndex+orientationIndex*_outputNBcolumns; - tempTransformTable[_usefullpixelIndex++]= columnIndex+rowIndex*_filterOutput.getNBcolumns(); - } - } - - // (re)creating and filling the transform table - _transformTable.resize(_usefullpixelIndex); - memcpy(&_transformTable[0], &tempTransformTable[0], sizeof(unsigned int)*_usefullpixelIndex); - - // reset all buffers - clearAllBuffers(); - _initOK=true; - return true; -} - -// action function -std::valarray &ImageLogPolProjection::runProjection(const std::valarray &inputFrame, const bool colorMode) -{ - if (_colorModeCapable&&colorMode) - { - // progressive filtering and storage of the result in _tempBuffer - _spatiotemporalLPfilter_Irregular(get_data(inputFrame), &_irregularLPfilteredFrame[0]); - _spatiotemporalLPfilter_Irregular(&_irregularLPfilteredFrame[0], &_tempBuffer[0]); // warning, temporal issue may occur, if the temporal constant is not NULL !!! - - _spatiotemporalLPfilter_Irregular(get_data(inputFrame)+_filterOutput.getNBpixels(), &_irregularLPfilteredFrame[0]); - _spatiotemporalLPfilter_Irregular(&_irregularLPfilteredFrame[0], &_tempBuffer[0]+_filterOutput.getNBpixels()); - - _spatiotemporalLPfilter_Irregular(get_data(inputFrame)+_filterOutput.getNBpixels()*2, &_irregularLPfilteredFrame[0]); - _spatiotemporalLPfilter_Irregular(&_irregularLPfilteredFrame[0], &_tempBuffer[0]+_filterOutput.getNBpixels()*2); - - // applying image projection/resampling - register unsigned int *transformTablePTR=&_transformTable[0]; - for (unsigned int i=0 ; i<_usefullpixelIndex ; i+=2, transformTablePTR+=2) - { -#ifdef IMAGELOGPOLPROJECTION_DEBUG - std::cout<<"ImageLogPolProjection::i:"< B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 IMAGELOGPOLPROJECTION_H_ -#define IMAGELOGPOLPROJECTION_H_ - -/** -* @class ImageLogPolProjection -* @brief class able to perform a log sampling of an image input (models the log sampling of the photoreceptors of the retina) -* or a log polar projection which models the retina information projection on the primary visual cortex: a linear projection in the center for detail analysis and a log projection of the borders (low spatial frequency motion information in general) -* -* collaboration: Barthelemy DURETTE who experimented the retina log projection --> "Traitement visuels Bio mimtiques pour la supplance perceptive", internal technical report, May 2005, Gipsa-lab/DIS, Grenoble, FRANCE -* -* * TYPICAL USE: -* -* // create object, here for a log sampling (keyword:RETINALOGPROJECTION): (dynamic object allocation sample) -* ImageLogPolProjection *imageSamplingTool; -* imageSamplingTool = new ImageLogPolProjection(frameSizeRows, frameSizeColumns, RETINALOGPROJECTION); -* -* // init log projection: -* imageSamplingTool->initProjection(1.0, 15.0); -* -* // during program execution, call the log transform applied to a frame called "FrameBuffer" : -* imageSamplingTool->runProjection(FrameBuffer); -* // get output frame and its size: -* const unsigned int logSampledFrame_nbRows=imageSamplingTool->getOutputNBrows(); -* const unsigned int logSampledFrame_nbColumns=imageSamplingTool->getOutputNBcolumns(); -* const double *logSampledFrame=imageSamplingTool->getSampledFrame(); -* -* // at the end of the program, destroy object: -* delete imageSamplingTool; -* -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -*/ - -//#define __IMAGELOGPOLPROJECTION_DEBUG // used for std output debug information - -#include "basicretinafilter.hpp" - - -namespace cv -{ - -class ImageLogPolProjection:public BasicRetinaFilter -{ -public: - - enum PROJECTIONTYPE{RETINALOGPROJECTION, CORTEXLOGPOLARPROJECTION}; - - /** - * constructor, just specifies the image input size and the projection type, no projection initialisation is done - * -> use initLogRetinaSampling() or initLogPolarCortexSampling() for that - * @param nbRows: number of rows of the input image - * @param nbColumns: number of columns of the input image - * @param projection: the type of projection, RETINALOGPROJECTION or CORTEXLOGPOLARPROJECTION - * @param colorMode: specifies if the projection is applied on a grayscale image (false) or color images (3 layers) (true) - */ - ImageLogPolProjection(const unsigned int nbRows, const unsigned int nbColumns, const PROJECTIONTYPE projection, const bool colorMode=false); - - /** - * standard destructor - */ - virtual ~ImageLogPolProjection(); - - /** - * function that clears all buffers of the object - */ - void clearAllBuffers(); - - /** - * resize retina color filter object (resize all allocated buffers) - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - /** - * init function depending on the projection type - * @param reductionFactor: the size reduction factor of the ouptup image in regard of the size of the input image, must be superior to 1 - * @param samplingStrenght: specifies the strenght of the log compression effect (magnifying coefficient) - * @return true if the init was performed without any errors - */ - bool initProjection(const double reductionFactor, const double samplingStrenght); - - /** - * main funtion of the class: run projection function - * @param inputFrame: the input frame to be processed - * @param colorMode: the input buffer color mode: false=gray levels, true = 3 color channels mode - * @return the output frame - */ - std::valarray &runProjection(const std::valarray &inputFrame, const bool colorMode=false); - - /** - * @return the numbers of rows (height) of the images OUTPUTS of the object - */ - inline unsigned int getOutputNBrows(){return _outputNBrows;}; - - /** - * @return the numbers of columns (width) of the images OUTPUTS of the object - */ - inline unsigned int getOutputNBcolumns(){return _outputNBcolumns;}; - - /** - * main funtion of the class: run projection function - * @param size: one of the input frame initial dimensions to be processed - * @return the output frame dimension - */ - inline static unsigned int predictOutputSize(const unsigned int size, const double reductionFactor){return (unsigned int)((double)size/reductionFactor);}; - - /** - * @return the output of the filter which applies an irregular Low Pass spatial filter to the imag input (see function - */ - inline const std::valarray &getIrregularLPfilteredInputFrame() const {return _irregularLPfilteredFrame;}; - - /** - * function which allows to retrieve the output frame which was updated after the "runProjection(...) function BasicRetinaFilter::runProgressiveFilter(...) - * @return the projection result - */ - inline const std::valarray &getSampledFrame() const {return _sampledFrame;}; - - /** - * function which allows gives the tranformation table, its size is (getNBrows()*getNBcolumns()*2) - * @return the transformation matrix [outputPixIndex_i, inputPixIndex_i, outputPixIndex_i+1, inputPixIndex_i+1....] - */ - inline const std::valarray &getSamplingMap() const {return _transformTable;}; - - inline double getOriginalRadiusLength(const double projectedRadiusLength){return _azero/(_alim-projectedRadiusLength*2.0/_minDimension);}; - - // unsigned int getInputPixelIndex(const unsigned int ){ return _transformTable[index*2+1]}; - -private: - PROJECTIONTYPE _selectedProjection; - - // size of the image output - unsigned int _outputNBrows; - unsigned int _outputNBcolumns; - unsigned int _outputNBpixels; - unsigned int _outputDoubleNBpixels; - unsigned int _inputDoubleNBpixels; - - // is the object able to manage color flag - bool _colorModeCapable; - // sampling strenght factor - double _samplingStrenght; - // sampling reduction factor - double _reductionFactor; - - // log sampling parameters - double _azero; - double _alim; - double _minDimension; - - // template buffers - std::valarray_sampledFrame; - std::valarray&_tempBuffer; - std::valarray_transformTable; - - std::valarray &_irregularLPfilteredFrame; // just a reference for easier understanding - unsigned int _usefullpixelIndex; - - // init transformation tables - bool _computeLogProjection(); - bool _computeLogPolarProjection(); - - // specifies if init was done correctly - bool _initOK; - // private init projections functions called by "initProjection(...)" function - bool _initLogRetinaSampling(const double reductionFactor, const double samplingStrenght); - bool _initLogPolarCortexSampling(const double reductionFactor, const double samplingStrenght); - - ImageLogPolProjection(const ImageLogPolProjection&); - ImageLogPolProjection& operator=(const ImageLogPolProjection&); - -}; - -} -#endif /*IMAGELOGPOLPROJECTION_H_*/ diff --git a/modules/contrib/src/inputoutput.cpp b/modules/contrib/src/inputoutput.cpp deleted file mode 100644 index 37510c6..0000000 --- a/modules/contrib/src/inputoutput.cpp +++ /dev/null @@ -1,205 +0,0 @@ - -#include "opencv2/contrib/contrib.hpp" -#include - -#if defined(WIN32) || defined(_WIN32) - #include - #include -#else - #include -#endif - -namespace cv -{ - std::vector Directory::GetListFiles( const std::string& path, const std::string & exten, bool addPath ) - { - std::vector list; - list.clear(); - std::string path_f = path + "/" + exten; - #ifdef WIN32 - #ifdef HAVE_WINRT - WIN32_FIND_DATAW FindFileData; - #else - WIN32_FIND_DATAA FindFileData; - #endif - HANDLE hFind; - - #ifdef HAVE_WINRT - wchar_t wpath[MAX_PATH]; - size_t copied = mbstowcs(wpath, path_f.c_str(), MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0); - #else - hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData); - #endif - if (hFind == INVALID_HANDLE_VALUE) - { - return list; - } - else - { - do - { - if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_NORMAL || - FindFileData.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE || - FindFileData.dwFileAttributes == FILE_ATTRIBUTE_HIDDEN || - FindFileData.dwFileAttributes == FILE_ATTRIBUTE_SYSTEM || - FindFileData.dwFileAttributes == FILE_ATTRIBUTE_READONLY) - { - char* fname; - #ifdef HAVE_WINRT - char fname_tmp[MAX_PATH] = {0}; - size_t copied = wcstombs(fname_tmp, FindFileData.cFileName, MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - fname = fname_tmp; - #else - fname = FindFileData.cFileName; - #endif - if (addPath) - list.push_back(path + "/" + std::string(fname)); - else - list.push_back(std::string(fname)); - } - } - #ifdef HAVE_WINRT - while(FindNextFileW(hFind, &FindFileData)); - #else - while(FindNextFileA(hFind, &FindFileData)); - #endif - FindClose(hFind); - } - #else - (void)addPath; - DIR *dp; - struct dirent *dirp; - if((dp = opendir(path.c_str())) == NULL) - { - return list; - } - - while ((dirp = readdir(dp)) != NULL) - { - if (dirp->d_type == DT_REG) - { - if (exten.compare("*") == 0) - list.push_back(static_cast(dirp->d_name)); - else - if (std::string(dirp->d_name).find(exten) != std::string::npos) - list.push_back(static_cast(dirp->d_name)); - } - } - closedir(dp); - #endif - - return list; - } - - std::vector Directory::GetListFolders( const std::string& path, const std::string & exten, bool addPath ) - { - std::vector list; - std::string path_f = path + "/" + exten; - list.clear(); - #ifdef WIN32 - #ifdef HAVE_WINRT - WIN32_FIND_DATAW FindFileData; - #else - WIN32_FIND_DATAA FindFileData; - #endif - HANDLE hFind; - - #ifdef HAVE_WINRT - wchar_t wpath [MAX_PATH]; - size_t copied = mbstowcs(wpath, path_f.c_str(), path_f.size()); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - - hFind = FindFirstFileExW(wpath, FindExInfoStandard, &FindFileData, FindExSearchNameMatch, NULL, 0); - #else - hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData); - #endif - if (hFind == INVALID_HANDLE_VALUE) - { - return list; - } - else - { - do - { -#ifdef HAVE_WINRT - if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && - wcscmp(FindFileData.cFileName, L".") != 0 && - wcscmp(FindFileData.cFileName, L"..") != 0) -#else - if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && - strcmp(FindFileData.cFileName, ".") != 0 && - strcmp(FindFileData.cFileName, "..") != 0) -#endif - { - char* fname; - #ifdef HAVE_WINRT - char fname_tmp[MAX_PATH]; - size_t copied = wcstombs(fname_tmp, FindFileData.cFileName, MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - fname = fname_tmp; - #else - fname = FindFileData.cFileName; - #endif - - if (addPath) - list.push_back(path + "/" + std::string(fname)); - else - list.push_back(std::string(fname)); - } - } - #ifdef HAVE_WINRT - while(FindNextFileW(hFind, &FindFileData)); - #else - while(FindNextFileA(hFind, &FindFileData)); - #endif - FindClose(hFind); - } - - #else - (void)addPath; - DIR *dp; - struct dirent *dirp; - if((dp = opendir(path_f.c_str())) == NULL) - { - return list; - } - - while ((dirp = readdir(dp)) != NULL) - { - if (dirp->d_type == DT_DIR && - strcmp(dirp->d_name, ".") != 0 && - strcmp(dirp->d_name, "..") != 0 ) - { - if (exten.compare("*") == 0) - list.push_back(static_cast(dirp->d_name)); - else - if (std::string(dirp->d_name).find(exten) != std::string::npos) - list.push_back(static_cast(dirp->d_name)); - } - } - closedir(dp); - #endif - - return list; - } - - std::vector Directory::GetListFilesR ( const std::string& path, const std::string & exten, bool addPath ) - { - std::vector list = Directory::GetListFiles(path, exten, addPath); - - std::vector dirs = Directory::GetListFolders(path, exten, addPath); - - std::vector::const_iterator it; - for (it = dirs.begin(); it != dirs.end(); ++it) - { - std::vector cl = Directory::GetListFiles(*it, exten, addPath); - list.insert(list.end(), cl.begin(), cl.end()); - } - - return list; - } - -} diff --git a/modules/contrib/src/lda.cpp b/modules/contrib/src/lda.cpp deleted file mode 100644 index 8945183..0000000 --- a/modules/contrib/src/lda.cpp +++ /dev/null @@ -1,1113 +0,0 @@ -/* - * Copyright (c) 2011. Philipp Wagner . - * Released to public domain under terms of the BSD Simplified license. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 organization nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * See - */ - -#include "precomp.hpp" -#include -#include -#include - -namespace cv -{ - -using std::map; -using std::set; -using std::cout; -using std::endl; - -// Removes duplicate elements in a given vector. -template -inline vector<_Tp> remove_dups(const vector<_Tp>& src) { - typedef typename set<_Tp>::const_iterator constSetIterator; - typedef typename vector<_Tp>::const_iterator constVecIterator; - set<_Tp> set_elems; - for (constVecIterator it = src.begin(); it != src.end(); ++it) - set_elems.insert(*it); - vector<_Tp> elems; - for (constSetIterator it = set_elems.begin(); it != set_elems.end(); ++it) - elems.push_back(*it); - return elems; -} - -static Mat argsort(InputArray _src, bool ascending=true) -{ - Mat src = _src.getMat(); - if (src.rows != 1 && src.cols != 1) { - string error_message = "Wrong shape of input matrix! Expected a matrix with one row or column."; - CV_Error(CV_StsBadArg, error_message); - } - int flags = CV_SORT_EVERY_ROW+(ascending ? CV_SORT_ASCENDING : CV_SORT_DESCENDING); - Mat sorted_indices; - sortIdx(src.reshape(1,1),sorted_indices,flags); - return sorted_indices; -} - -static Mat asRowMatrix(InputArrayOfArrays src, int rtype, double alpha=1, double beta=0) { - // make sure the input data is a vector of matrices or vector of vector - if(src.kind() != _InputArray::STD_VECTOR_MAT && src.kind() != _InputArray::STD_VECTOR_VECTOR) { - string error_message = "The data is expected as InputArray::STD_VECTOR_MAT (a std::vector) or _InputArray::STD_VECTOR_VECTOR (a std::vector< vector<...> >)."; - CV_Error(CV_StsBadArg, error_message); - } - // number of samples - size_t n = src.total(); - // return empty matrix if no matrices given - if(n == 0) - return Mat(); - // dimensionality of (reshaped) samples - size_t d = src.getMat(0).total(); - // create data matrix - Mat data((int)n, (int)d, rtype); - // now copy data - for(int i = 0; i < (int)n; i++) { - // make sure data can be reshaped, throw exception if not! - if(src.getMat(i).total() != d) { - string error_message = format("Wrong number of elements in matrix #%d! Expected %d was %d.", i, (int)d, (int)src.getMat(i).total()); - CV_Error(CV_StsBadArg, error_message); - } - // get a hold of the current row - Mat xi = data.row(i); - // make reshape happy by cloning for non-continuous matrices - if(src.getMat(i).isContinuous()) { - src.getMat(i).reshape(1, 1).convertTo(xi, rtype, alpha, beta); - } else { - src.getMat(i).clone().reshape(1, 1).convertTo(xi, rtype, alpha, beta); - } - } - return data; -} - -static void sortMatrixColumnsByIndices(InputArray _src, InputArray _indices, OutputArray _dst) { - if(_indices.getMat().type() != CV_32SC1) { - CV_Error(CV_StsUnsupportedFormat, "cv::sortColumnsByIndices only works on integer indices!"); - } - Mat src = _src.getMat(); - vector indices = _indices.getMat(); - _dst.create(src.rows, src.cols, src.type()); - Mat dst = _dst.getMat(); - for(size_t idx = 0; idx < indices.size(); idx++) { - Mat originalCol = src.col(indices[idx]); - Mat sortedCol = dst.col((int)idx); - originalCol.copyTo(sortedCol); - } -} - -static Mat sortMatrixColumnsByIndices(InputArray src, InputArray indices) { - Mat dst; - sortMatrixColumnsByIndices(src, indices, dst); - return dst; -} - - -template static bool -isSymmetric_(InputArray src) { - Mat _src = src.getMat(); - if(_src.cols != _src.rows) - return false; - for (int i = 0; i < _src.rows; i++) { - for (int j = 0; j < _src.cols; j++) { - _Tp a = _src.at<_Tp> (i, j); - _Tp b = _src.at<_Tp> (j, i); - if (a != b) { - return false; - } - } - } - return true; -} - -template static bool -isSymmetric_(InputArray src, double eps) { - Mat _src = src.getMat(); - if(_src.cols != _src.rows) - return false; - for (int i = 0; i < _src.rows; i++) { - for (int j = 0; j < _src.cols; j++) { - _Tp a = _src.at<_Tp> (i, j); - _Tp b = _src.at<_Tp> (j, i); - if (std::abs(a - b) > eps) { - return false; - } - } - } - return true; -} - -static bool isSymmetric(InputArray src, double eps=1e-16) -{ - Mat m = src.getMat(); - switch (m.type()) { - case CV_8SC1: return isSymmetric_(m); break; - case CV_8UC1: - return isSymmetric_(m); break; - case CV_16SC1: - return isSymmetric_(m); break; - case CV_16UC1: - return isSymmetric_(m); break; - case CV_32SC1: - return isSymmetric_(m); break; - case CV_32FC1: - return isSymmetric_(m, eps); break; - case CV_64FC1: - return isSymmetric_(m, eps); break; - default: - break; - } - return false; -} - - -//------------------------------------------------------------------------------ -// cv::subspaceProject -//------------------------------------------------------------------------------ -Mat subspaceProject(InputArray _W, InputArray _mean, InputArray _src) { - // get data matrices - Mat W = _W.getMat(); - Mat mean = _mean.getMat(); - Mat src = _src.getMat(); - // get number of samples and dimension - int n = src.rows; - int d = src.cols; - // make sure the data has the correct shape - if(W.rows != d) { - string error_message = format("Wrong shapes for given matrices. Was size(src) = (%d,%d), size(W) = (%d,%d).", src.rows, src.cols, W.rows, W.cols); - CV_Error(CV_StsBadArg, error_message); - } - // make sure mean is correct if not empty - if(!mean.empty() && (mean.total() != (size_t) d)) { - string error_message = format("Wrong mean shape for the given data matrix. Expected %d, but was %d.", d, mean.total()); - CV_Error(CV_StsBadArg, error_message); - } - // create temporary matrices - Mat X, Y; - // make sure you operate on correct type - src.convertTo(X, W.type()); - // safe to do, because of above assertion - if(!mean.empty()) { - for(int i=0; i - _Tp *alloc_1d(int m) { - return new _Tp[m]; - } - - // Allocates memory. - template - _Tp *alloc_1d(int m, _Tp val) { - _Tp *arr = alloc_1d<_Tp> (m); - for (int i = 0; i < m; i++) - arr[i] = val; - return arr; - } - - // Allocates memory. - template - _Tp **alloc_2d(int m, int _n) { - _Tp **arr = new _Tp*[m]; - for (int i = 0; i < m; i++) - arr[i] = new _Tp[_n]; - return arr; - } - - // Allocates memory. - template - _Tp **alloc_2d(int m, int _n, _Tp val) { - _Tp **arr = alloc_2d<_Tp> (m, _n); - for (int i = 0; i < m; i++) { - for (int j = 0; j < _n; j++) { - arr[i][j] = val; - } - } - return arr; - } - - void cdiv(double xr, double xi, double yr, double yi) { - double r, dv; - if (std::abs(yr) > std::abs(yi)) { - r = yi / yr; - dv = yr + r * yi; - cdivr = (xr + r * xi) / dv; - cdivi = (xi - r * xr) / dv; - } else { - r = yr / yi; - dv = yi + r * yr; - cdivr = (r * xr + xi) / dv; - cdivi = (r * xi - xr) / dv; - } - } - - // Nonsymmetric reduction from Hessenberg to real Schur form. - - void hqr2() { - - // This is derived from the Algol procedure hqr2, - // by Martin and Wilkinson, Handbook for Auto. Comp., - // Vol.ii-Linear Algebra, and the corresponding - // Fortran subroutine in EISPACK. - - // Initialize - int nn = this->n; - int n1 = nn - 1; - int low = 0; - int high = nn - 1; - double eps = pow(2.0, -52.0); - double exshift = 0.0; - double p = 0, q = 0, r = 0, s = 0, z = 0, t, w, x, y; - - // Store roots isolated by balanc and compute matrix norm - - double norm = 0.0; - for (int i = 0; i < nn; i++) { - if (i < low || i > high) { - d[i] = H[i][i]; - e[i] = 0.0; - } - for (int j = max(i - 1, 0); j < nn; j++) { - norm = norm + std::abs(H[i][j]); - } - } - - // Outer loop over eigenvalue index - int iter = 0; - while (n1 >= low) { - - // Look for single small sub-diagonal element - int l = n1; - while (l > low) { - s = std::abs(H[l - 1][l - 1]) + std::abs(H[l][l]); - if (s == 0.0) { - s = norm; - } - if (std::abs(H[l][l - 1]) < eps * s) { - break; - } - l--; - } - - // Check for convergence - // One root found - - if (l == n1) { - H[n1][n1] = H[n1][n1] + exshift; - d[n1] = H[n1][n1]; - e[n1] = 0.0; - n1--; - iter = 0; - - // Two roots found - - } else if (l == n1 - 1) { - w = H[n1][n1 - 1] * H[n1 - 1][n1]; - p = (H[n1 - 1][n1 - 1] - H[n1][n1]) / 2.0; - q = p * p + w; - z = sqrt(std::abs(q)); - H[n1][n1] = H[n1][n1] + exshift; - H[n1 - 1][n1 - 1] = H[n1 - 1][n1 - 1] + exshift; - x = H[n1][n1]; - - // Real pair - - if (q >= 0) { - if (p >= 0) { - z = p + z; - } else { - z = p - z; - } - d[n1 - 1] = x + z; - d[n1] = d[n1 - 1]; - if (z != 0.0) { - d[n1] = x - w / z; - } - e[n1 - 1] = 0.0; - e[n1] = 0.0; - x = H[n1][n1 - 1]; - s = std::abs(x) + std::abs(z); - p = x / s; - q = z / s; - r = sqrt(p * p + q * q); - p = p / r; - q = q / r; - - // Row modification - - for (int j = n1 - 1; j < nn; j++) { - z = H[n1 - 1][j]; - H[n1 - 1][j] = q * z + p * H[n1][j]; - H[n1][j] = q * H[n1][j] - p * z; - } - - // Column modification - - for (int i = 0; i <= n1; i++) { - z = H[i][n1 - 1]; - H[i][n1 - 1] = q * z + p * H[i][n1]; - H[i][n1] = q * H[i][n1] - p * z; - } - - // Accumulate transformations - - for (int i = low; i <= high; i++) { - z = V[i][n1 - 1]; - V[i][n1 - 1] = q * z + p * V[i][n1]; - V[i][n1] = q * V[i][n1] - p * z; - } - - // Complex pair - - } else { - d[n1 - 1] = x + p; - d[n1] = x + p; - e[n1 - 1] = z; - e[n1] = -z; - } - n1 = n1 - 2; - iter = 0; - - // No convergence yet - - } else { - - // Form shift - - x = H[n1][n1]; - y = 0.0; - w = 0.0; - if (l < n1) { - y = H[n1 - 1][n1 - 1]; - w = H[n1][n1 - 1] * H[n1 - 1][n1]; - } - - // Wilkinson's original ad hoc shift - - if (iter == 10) { - exshift += x; - for (int i = low; i <= n1; i++) { - H[i][i] -= x; - } - s = std::abs(H[n1][n1 - 1]) + std::abs(H[n1 - 1][n1 - 2]); - x = y = 0.75 * s; - w = -0.4375 * s * s; - } - - // MATLAB's new ad hoc shift - - if (iter == 30) { - s = (y - x) / 2.0; - s = s * s + w; - if (s > 0) { - s = sqrt(s); - if (y < x) { - s = -s; - } - s = x - w / ((y - x) / 2.0 + s); - for (int i = low; i <= n1; i++) { - H[i][i] -= s; - } - exshift += s; - x = y = w = 0.964; - } - } - - iter = iter + 1; // (Could check iteration count here.) - - // Look for two consecutive small sub-diagonal elements - int m = n1 - 2; - while (m >= l) { - z = H[m][m]; - r = x - z; - s = y - z; - p = (r * s - w) / H[m + 1][m] + H[m][m + 1]; - q = H[m + 1][m + 1] - z - r - s; - r = H[m + 2][m + 1]; - s = std::abs(p) + std::abs(q) + std::abs(r); - p = p / s; - q = q / s; - r = r / s; - if (m == l) { - break; - } - if (std::abs(H[m][m - 1]) * (std::abs(q) + std::abs(r)) < eps * (std::abs(p) - * (std::abs(H[m - 1][m - 1]) + std::abs(z) + std::abs( - H[m + 1][m + 1])))) { - break; - } - m--; - } - - for (int i = m + 2; i <= n1; i++) { - H[i][i - 2] = 0.0; - if (i > m + 2) { - H[i][i - 3] = 0.0; - } - } - - // Double QR step involving rows l:n and columns m:n - - for (int k = m; k <= n1 - 1; k++) { - bool notlast = (k != n1 - 1); - if (k != m) { - p = H[k][k - 1]; - q = H[k + 1][k - 1]; - r = (notlast ? H[k + 2][k - 1] : 0.0); - x = std::abs(p) + std::abs(q) + std::abs(r); - if (x != 0.0) { - p = p / x; - q = q / x; - r = r / x; - } - } - if (x == 0.0) { - break; - } - s = sqrt(p * p + q * q + r * r); - if (p < 0) { - s = -s; - } - if (s != 0) { - if (k != m) { - H[k][k - 1] = -s * x; - } else if (l != m) { - H[k][k - 1] = -H[k][k - 1]; - } - p = p + s; - x = p / s; - y = q / s; - z = r / s; - q = q / p; - r = r / p; - - // Row modification - - for (int j = k; j < nn; j++) { - p = H[k][j] + q * H[k + 1][j]; - if (notlast) { - p = p + r * H[k + 2][j]; - H[k + 2][j] = H[k + 2][j] - p * z; - } - H[k][j] = H[k][j] - p * x; - H[k + 1][j] = H[k + 1][j] - p * y; - } - - // Column modification - - for (int i = 0; i <= min(n1, k + 3); i++) { - p = x * H[i][k] + y * H[i][k + 1]; - if (notlast) { - p = p + z * H[i][k + 2]; - H[i][k + 2] = H[i][k + 2] - p * r; - } - H[i][k] = H[i][k] - p; - H[i][k + 1] = H[i][k + 1] - p * q; - } - - // Accumulate transformations - - for (int i = low; i <= high; i++) { - p = x * V[i][k] + y * V[i][k + 1]; - if (notlast) { - p = p + z * V[i][k + 2]; - V[i][k + 2] = V[i][k + 2] - p * r; - } - V[i][k] = V[i][k] - p; - V[i][k + 1] = V[i][k + 1] - p * q; - } - } // (s != 0) - } // k loop - } // check convergence - } // while (n1 >= low) - - // Backsubstitute to find vectors of upper triangular form - - if (norm == 0.0) { - return; - } - - for (n1 = nn - 1; n1 >= 0; n1--) { - p = d[n1]; - q = e[n1]; - - // Real vector - - if (q == 0) { - int l = n1; - H[n1][n1] = 1.0; - for (int i = n1 - 1; i >= 0; i--) { - w = H[i][i] - p; - r = 0.0; - for (int j = l; j <= n1; j++) { - r = r + H[i][j] * H[j][n1]; - } - if (e[i] < 0.0) { - z = w; - s = r; - } else { - l = i; - if (e[i] == 0.0) { - if (w != 0.0) { - H[i][n1] = -r / w; - } else { - H[i][n1] = -r / (eps * norm); - } - - // Solve real equations - - } else { - x = H[i][i + 1]; - y = H[i + 1][i]; - q = (d[i] - p) * (d[i] - p) + e[i] * e[i]; - t = (x * s - z * r) / q; - H[i][n1] = t; - if (std::abs(x) > std::abs(z)) { - H[i + 1][n1] = (-r - w * t) / x; - } else { - H[i + 1][n1] = (-s - y * t) / z; - } - } - - // Overflow control - - t = std::abs(H[i][n1]); - if ((eps * t) * t > 1) { - for (int j = i; j <= n1; j++) { - H[j][n1] = H[j][n1] / t; - } - } - } - } - // Complex vector - } else if (q < 0) { - int l = n1 - 1; - - // Last vector component imaginary so matrix is triangular - - if (std::abs(H[n1][n1 - 1]) > std::abs(H[n1 - 1][n1])) { - H[n1 - 1][n1 - 1] = q / H[n1][n1 - 1]; - H[n1 - 1][n1] = -(H[n1][n1] - p) / H[n1][n1 - 1]; - } else { - cdiv(0.0, -H[n1 - 1][n1], H[n1 - 1][n1 - 1] - p, q); - H[n1 - 1][n1 - 1] = cdivr; - H[n1 - 1][n1] = cdivi; - } - H[n1][n1 - 1] = 0.0; - H[n1][n1] = 1.0; - for (int i = n1 - 2; i >= 0; i--) { - double ra, sa, vr, vi; - ra = 0.0; - sa = 0.0; - for (int j = l; j <= n1; j++) { - ra = ra + H[i][j] * H[j][n1 - 1]; - sa = sa + H[i][j] * H[j][n1]; - } - w = H[i][i] - p; - - if (e[i] < 0.0) { - z = w; - r = ra; - s = sa; - } else { - l = i; - if (e[i] == 0) { - cdiv(-ra, -sa, w, q); - H[i][n1 - 1] = cdivr; - H[i][n1] = cdivi; - } else { - - // Solve complex equations - - x = H[i][i + 1]; - y = H[i + 1][i]; - vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q; - vi = (d[i] - p) * 2.0 * q; - if (vr == 0.0 && vi == 0.0) { - vr = eps * norm * (std::abs(w) + std::abs(q) + std::abs(x) - + std::abs(y) + std::abs(z)); - } - cdiv(x * r - z * ra + q * sa, - x * s - z * sa - q * ra, vr, vi); - H[i][n1 - 1] = cdivr; - H[i][n1] = cdivi; - if (std::abs(x) > (std::abs(z) + std::abs(q))) { - H[i + 1][n1 - 1] = (-ra - w * H[i][n1 - 1] + q - * H[i][n1]) / x; - H[i + 1][n1] = (-sa - w * H[i][n1] - q * H[i][n1 - - 1]) / x; - } else { - cdiv(-r - y * H[i][n1 - 1], -s - y * H[i][n1], z, - q); - H[i + 1][n1 - 1] = cdivr; - H[i + 1][n1] = cdivi; - } - } - - // Overflow control - - t = max(std::abs(H[i][n1 - 1]), std::abs(H[i][n1])); - if ((eps * t) * t > 1) { - for (int j = i; j <= n1; j++) { - H[j][n1 - 1] = H[j][n1 - 1] / t; - H[j][n1] = H[j][n1] / t; - } - } - } - } - } - } - - // Vectors of isolated roots - - for (int i = 0; i < nn; i++) { - if (i < low || i > high) { - for (int j = i; j < nn; j++) { - V[i][j] = H[i][j]; - } - } - } - - // Back transformation to get eigenvectors of original matrix - - for (int j = nn - 1; j >= low; j--) { - for (int i = low; i <= high; i++) { - z = 0.0; - for (int k = low; k <= min(j, high); k++) { - z = z + V[i][k] * H[k][j]; - } - V[i][j] = z; - } - } - } - - // Nonsymmetric reduction to Hessenberg form. - void orthes() { - // This is derived from the Algol procedures orthes and ortran, - // by Martin and Wilkinson, Handbook for Auto. Comp., - // Vol.ii-Linear Algebra, and the corresponding - // Fortran subroutines in EISPACK. - int low = 0; - int high = n - 1; - - for (int m = low + 1; m <= high - 1; m++) { - - // Scale column. - - double scale = 0.0; - for (int i = m; i <= high; i++) { - scale = scale + std::abs(H[i][m - 1]); - } - if (scale != 0.0) { - - // Compute Householder transformation. - - double h = 0.0; - for (int i = high; i >= m; i--) { - ort[i] = H[i][m - 1] / scale; - h += ort[i] * ort[i]; - } - double g = sqrt(h); - if (ort[m] > 0) { - g = -g; - } - h = h - ort[m] * g; - ort[m] = ort[m] - g; - - // Apply Householder similarity transformation - // H = (I-u*u'/h)*H*(I-u*u')/h) - - for (int j = m; j < n; j++) { - double f = 0.0; - for (int i = high; i >= m; i--) { - f += ort[i] * H[i][j]; - } - f = f / h; - for (int i = m; i <= high; i++) { - H[i][j] -= f * ort[i]; - } - } - - for (int i = 0; i <= high; i++) { - double f = 0.0; - for (int j = high; j >= m; j--) { - f += ort[j] * H[i][j]; - } - f = f / h; - for (int j = m; j <= high; j++) { - H[i][j] -= f * ort[j]; - } - } - ort[m] = scale * ort[m]; - H[m][m - 1] = scale * g; - } - } - - // Accumulate transformations (Algol's ortran). - - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - V[i][j] = (i == j ? 1.0 : 0.0); - } - } - - for (int m = high - 1; m >= low + 1; m--) { - if (H[m][m - 1] != 0.0) { - for (int i = m + 1; i <= high; i++) { - ort[i] = H[i][m - 1]; - } - for (int j = m; j <= high; j++) { - double g = 0.0; - for (int i = m; i <= high; i++) { - g += ort[i] * V[i][j]; - } - // Double division avoids possible underflow - g = (g / ort[m]) / H[m][m - 1]; - for (int i = m; i <= high; i++) { - V[i][j] += g * ort[i]; - } - } - } - } - } - - // Releases all internal working memory. - void release() { - // releases the working data - delete[] d; - delete[] e; - delete[] ort; - for (int i = 0; i < n; i++) { - delete[] H[i]; - delete[] V[i]; - } - delete[] H; - delete[] V; - } - - // Computes the Eigenvalue Decomposition for a matrix given in H. - void compute() { - // Allocate memory for the working data. - V = alloc_2d (n, n, 0.0); - d = alloc_1d (n); - e = alloc_1d (n); - ort = alloc_1d (n); - // Reduce to Hessenberg form. - orthes(); - // Reduce Hessenberg to real Schur form. - hqr2(); - // Copy eigenvalues to OpenCV Matrix. - _eigenvalues.create(1, n, CV_64FC1); - for (int i = 0; i < n; i++) { - _eigenvalues.at (0, i) = d[i]; - } - // Copy eigenvectors to OpenCV Matrix. - _eigenvectors.create(n, n, CV_64FC1); - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - _eigenvectors.at (i, j) = V[i][j]; - // Deallocate the memory by releasing all internal working data. - release(); - } - -public: - EigenvalueDecomposition() - : n(0) { } - - // Initializes & computes the Eigenvalue Decomposition for a general matrix - // given in src. This function is a port of the EigenvalueSolver in JAMA, - // which has been released to public domain by The MathWorks and the - // National Institute of Standards and Technology (NIST). - EigenvalueDecomposition(InputArray src) { - compute(src); - } - - // This function computes the Eigenvalue Decomposition for a general matrix - // given in src. This function is a port of the EigenvalueSolver in JAMA, - // which has been released to public domain by The MathWorks and the - // National Institute of Standards and Technology (NIST). - void compute(InputArray src) - { - if(isSymmetric(src)) { - // Fall back to OpenCV for a symmetric matrix! - cv::eigen(src, _eigenvalues, _eigenvectors); - } else { - Mat tmp; - // Convert the given input matrix to double. Is there any way to - // prevent allocating the temporary memory? Only used for copying - // into working memory and deallocated after. - src.getMat().convertTo(tmp, CV_64FC1); - // Get dimension of the matrix. - this->n = tmp.cols; - // Allocate the matrix data to work on. - this->H = alloc_2d (n, n); - // Now safely copy the data. - for (int i = 0; i < tmp.rows; i++) { - for (int j = 0; j < tmp.cols; j++) { - this->H[i][j] = tmp.at(i, j); - } - } - // Deallocates the temporary matrix before computing. - tmp.release(); - // Performs the eigenvalue decomposition of H. - compute(); - } - } - - ~EigenvalueDecomposition() {} - - // Returns the eigenvalues of the Eigenvalue Decomposition. - Mat eigenvalues() { return _eigenvalues; } - // Returns the eigenvectors of the Eigenvalue Decomposition. - Mat eigenvectors() { return _eigenvectors; } -}; - - -//------------------------------------------------------------------------------ -// Linear Discriminant Analysis implementation -//------------------------------------------------------------------------------ -void LDA::save(const string& filename) const { - FileStorage fs(filename, FileStorage::WRITE); - if (!fs.isOpened()) { - CV_Error(CV_StsError, "File can't be opened for writing!"); - } - this->save(fs); - fs.release(); -} - -// Deserializes this object from a given filename. -void LDA::load(const string& filename) { - FileStorage fs(filename, FileStorage::READ); - if (!fs.isOpened()) - CV_Error(CV_StsError, "File can't be opened for writing!"); - this->load(fs); - fs.release(); -} - -// Serializes this object to a given FileStorage. -void LDA::save(FileStorage& fs) const { - // write matrices - fs << "num_components" << _num_components; - fs << "eigenvalues" << _eigenvalues; - fs << "eigenvectors" << _eigenvectors; -} - -// Deserializes this object from a given FileStorage. -void LDA::load(const FileStorage& fs) { - //read matrices - fs["num_components"] >> _num_components; - fs["eigenvalues"] >> _eigenvalues; - fs["eigenvectors"] >> _eigenvectors; -} - -void LDA::lda(InputArrayOfArrays _src, InputArray _lbls) { - // get data - Mat src = _src.getMat(); - vector labels; - // safely copy the labels - { - Mat tmp = _lbls.getMat(); - for(unsigned int i = 0; i < tmp.total(); i++) { - labels.push_back(tmp.at(i)); - } - } - // turn into row sampled matrix - Mat data; - // ensure working matrix is double precision - src.convertTo(data, CV_64FC1); - // maps the labels, so they're ascending: [0,1,...,C] - vector mapped_labels(labels.size()); - vector num2label = remove_dups(labels); - map label2num; - for (int i = 0; i < (int)num2label.size(); i++) - label2num[num2label[i]] = i; - for (size_t i = 0; i < labels.size(); i++) - mapped_labels[i] = label2num[labels[i]]; - // get sample size, dimension - int N = data.rows; - int D = data.cols; - // number of unique labels - int C = (int)num2label.size(); - // we can't do a LDA on one class, what do you - // want to separate from each other then? - if(C == 1) { - string error_message = "At least two classes are needed to perform a LDA. Reason: Only one class was given!"; - CV_Error(CV_StsBadArg, error_message); - } - // throw error if less labels, than samples - if (labels.size() != static_cast(N)) { - string error_message = format("The number of samples must equal the number of labels. Given %d labels, %d samples. ", labels.size(), N); - CV_Error(CV_StsBadArg, error_message); - } - // warn if within-classes scatter matrix becomes singular - if (N < D) { - cout << "Warning: Less observations than feature dimension given!" - << "Computation will probably fail." - << endl; - } - // clip number of components to be a valid number - if ((_num_components <= 0) || (_num_components > (C - 1))) { - _num_components = (C - 1); - } - // holds the mean over all classes - Mat meanTotal = Mat::zeros(1, D, data.type()); - // holds the mean for each class - vector meanClass(C); - vector numClass(C); - // initialize - for (int i = 0; i < C; i++) { - numClass[i] = 0; - meanClass[i] = Mat::zeros(1, D, data.type()); //! Dx1 image vector - } - // calculate sums - for (int i = 0; i < N; i++) { - Mat instance = data.row(i); - int classIdx = mapped_labels[i]; - add(meanTotal, instance, meanTotal); - add(meanClass[classIdx], instance, meanClass[classIdx]); - numClass[classIdx]++; - } - // calculate total mean - meanTotal.convertTo(meanTotal, meanTotal.type(), 1.0 / static_cast (N)); - // calculate class means - for (int i = 0; i < C; i++) { - meanClass[i].convertTo(meanClass[i], meanClass[i].type(), 1.0 / static_cast (numClass[i])); - } - // subtract class means - for (int i = 0; i < N; i++) { - int classIdx = mapped_labels[i]; - Mat instance = data.row(i); - subtract(instance, meanClass[classIdx], instance); - } - // calculate within-classes scatter - Mat Sw = Mat::zeros(D, D, data.type()); - mulTransposed(data, Sw, true); - // calculate between-classes scatter - Mat Sb = Mat::zeros(D, D, data.type()); - for (int i = 0; i < C; i++) { - Mat tmp; - subtract(meanClass[i], meanTotal, tmp); - mulTransposed(tmp, tmp, true); - add(Sb, tmp, Sb); - } - // invert Sw - Mat Swi = Sw.inv(); - // M = inv(Sw)*Sb - Mat M; - gemm(Swi, Sb, 1.0, Mat(), 0.0, M); - EigenvalueDecomposition es(M); - _eigenvalues = es.eigenvalues(); - _eigenvectors = es.eigenvectors(); - // reshape eigenvalues, so they are stored by column - _eigenvalues = _eigenvalues.reshape(1, 1); - // get sorted indices descending by their eigenvalue - vector sorted_indices = argsort(_eigenvalues, false); - // now sort eigenvalues and eigenvectors accordingly - _eigenvalues = sortMatrixColumnsByIndices(_eigenvalues, sorted_indices); - _eigenvectors = sortMatrixColumnsByIndices(_eigenvectors, sorted_indices); - // and now take only the num_components and we're out! - _eigenvalues = Mat(_eigenvalues, Range::all(), Range(0, _num_components)); - _eigenvectors = Mat(_eigenvectors, Range::all(), Range(0, _num_components)); -} - -void LDA::compute(InputArrayOfArrays _src, InputArray _lbls) { - switch(_src.kind()) { - case _InputArray::STD_VECTOR_MAT: - lda(asRowMatrix(_src, CV_64FC1), _lbls); - break; - case _InputArray::MAT: - lda(_src.getMat(), _lbls); - break; - default: - string error_message= format("InputArray Datatype %d is not supported.", _src.kind()); - CV_Error(CV_StsBadArg, error_message); - break; - } -} - -// Projects samples into the LDA subspace. -Mat LDA::project(InputArray src) { - return subspaceProject(_eigenvectors, Mat(), _dataAsRow ? src : src.getMat().t()); -} - -// Reconstructs projections from the LDA subspace. -Mat LDA::reconstruct(InputArray src) { - return subspaceReconstruct(_eigenvectors, Mat(), _dataAsRow ? src : src.getMat().t()); -} - -} diff --git a/modules/contrib/src/logpolar_bsm.cpp b/modules/contrib/src/logpolar_bsm.cpp deleted file mode 100644 index b96eea8..0000000 --- a/modules/contrib/src/logpolar_bsm.cpp +++ /dev/null @@ -1,651 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The names of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/******************************************************************************************* - -The LogPolar Blind Spot Model code has been contributed by Fabio Solari and Manuela Chessa. - -More details can be found in: - -M. Chessa, S. P. Sabatini, F. Solari and F. Tatti (2011) -A Quantitative Comparison of Speed and Reliability for Log-Polar Mapping Techniques, -Computer Vision Systems - 8th International Conference, -ICVS 2011, Sophia Antipolis, France, September 20-22, 2011 -(http://dx.doi.org/10.1007/978-3-642-23968-7_5) - -********************************************************************************************/ - -#include "precomp.hpp" - -#include -#include - -namespace cv -{ - -//------------------------------------interp------------------------------------------- -LogPolar_Interp::LogPolar_Interp(int w, int h, Point2i center, int _R, double _ro0, int _interp, int full, int _s, int sp) -{ - if ( (center.x!=w/2 || center.y!=h/2) && full==0) full=1; - - if (center.x<0) center.x=0; - if (center.y<0) center.y=0; - if (center.x>=w) center.x=w-1; - if (center.y>=h) center.y=h-1; - - if (full){ - int rtmp; - - if (center.x<=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)(w-center.x)*(w-center.x)); - else if (center.x>=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)center.x*center.x); - else if (center.x>=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)center.x*center.x); - else //if (center.x<=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)(w-center.x)*(w-center.x)); - - M=2*rtmp; N=2*rtmp; - - top = M/2 - center.y; - bottom = M/2 - (h-center.y); - left = M/2 - center.x; - right = M/2 - (w - center.x); - - }else{ - top=bottom=left=right=0; - M=w; N=h; - } - - if (sp){ - int jc=M/2-1, ic=N/2-1; - int _romax=min(ic, jc); - double _a=exp(log((double)(_romax/2-1)/(double)ro0)/(double)R); - S=(int) floor(2*CV_PI/(_a-1)+0.5); - } - - interp=_interp; - - create_map(M, N, _R, _s, _ro0); -} - -void LogPolar_Interp::create_map(int _M, int _n, int _R, int _s, double _ro0) -{ - M=_M; - N=_n; - R=_R; - S=_s; - ro0=_ro0; - - int jc=N/2-1, ic=M/2-1; - romax=min(ic, jc); - a=exp(log((double)romax/(double)ro0)/(double)R); - q=((double)S)/(2*CV_PI); - - Rsri = Mat::zeros(S,R,CV_32FC1); - Csri = Mat::zeros(S,R,CV_32FC1); - ETAyx = Mat::zeros(N,M,CV_32FC1); - CSIyx = Mat::zeros(N,M,CV_32FC1); - - for(int v=0; v(v,u)=(float)(ro0*pow(a,u)*sin(v/q)+jc); - Csri.at(v,u)=(float)(ro0*pow(a,u)*cos(v/q)+ic); - } - } - - for(int j=0; j=ic) - theta=atan((double)(j-jc)/(double)(i-ic)); - else - theta=atan((double)(j-jc)/(double)(i-ic))+CV_PI; - - if(theta<0) - theta+=2*CV_PI; - - ETAyx.at(j,i)=(float)(q*theta); - - double ro2=(j-jc)*(j-jc)+(i-ic)*(i-ic); - CSIyx.at(j,i)=(float)(0.5*log(ro2/(ro0*ro0))/log(a)); - } - } -} - -const Mat LogPolar_Interp::to_cortical(const Mat &source) -{ - Mat out(S,R,CV_8UC1,Scalar(0)); - - Mat source_border; - copyMakeBorder(source,source_border,top,bottom,left,right,BORDER_CONSTANT,Scalar(0)); - - remap(source_border,out,Csri,Rsri,interp); - - return out; -} - - -const Mat LogPolar_Interp::to_cartesian(const Mat &source) -{ - Mat out(N,M,CV_8UC1,Scalar(0)); - - Mat source_border; - - if (interp==INTER_NEAREST || interp==INTER_LINEAR){ - copyMakeBorder(source,source_border,0,1,0,0,BORDER_CONSTANT,Scalar(0)); - Mat rowS0 = source_border.row(S); - source_border.row(0).copyTo(rowS0); - } else if (interp==INTER_CUBIC){ - copyMakeBorder(source,source_border,0,2,0,0,BORDER_CONSTANT,Scalar(0)); - Mat rowS0 = source_border.row(S); - Mat rowS1 = source_border.row(S+1); - source_border.row(0).copyTo(rowS0); - source_border.row(1).copyTo(rowS1); - } else if (interp==INTER_LANCZOS4){ - copyMakeBorder(source,source_border,0,4,0,0,BORDER_CONSTANT,Scalar(0)); - Mat rowS0 = source_border.row(S); - Mat rowS1 = source_border.row(S+1); - Mat rowS2 = source_border.row(S+2); - Mat rowS3 = source_border.row(S+3); - source_border.row(0).copyTo(rowS0); - source_border.row(1).copyTo(rowS1); - source_border.row(2).copyTo(rowS2); - source_border.row(3).copyTo(rowS3); - } - remap(source_border,out,CSIyx,ETAyx,interp); - - Mat out_cropped=out(Range(top,N-1-bottom),Range(left,M-1-right)); - - return out_cropped; -} - -LogPolar_Interp::~LogPolar_Interp() -{ -} - -//------------------------------------overlapping---------------------------------- - -LogPolar_Overlapping::LogPolar_Overlapping(int w, int h, Point2i center, int _R, double _ro0, int full, int _s, int sp) -{ - if ( (center.x!=w/2 || center.y!=h/2) && full==0) full=1; - - if (center.x<0) center.x=0; - if (center.y<0) center.y=0; - if (center.x>=w) center.x=w-1; - if (center.y>=h) center.y=h-1; - - if (full){ - int rtmp; - - if (center.x<=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)(w-center.x)*(w-center.x)); - else if (center.x>=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)center.x*center.x); - else if (center.x>=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)center.x*center.x); - else //if (center.x<=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)(w-center.x)*(w-center.x)); - - M=2*rtmp; N=2*rtmp; - - top = M/2 - center.y; - bottom = M/2 - (h-center.y); - left = M/2 - center.x; - right = M/2 - (w - center.x); - - }else{ - top=bottom=left=right=0; - M=w; N=h; - } - - - if (sp){ - int jc=M/2-1, ic=N/2-1; - int _romax=min(ic, jc); - double _a=exp(log((double)(_romax/2-1)/(double)ro0)/(double)R); - S=(int) floor(2*CV_PI/(_a-1)+0.5); - } - - create_map(M, N, _R, _s, _ro0); -} - -void LogPolar_Overlapping::create_map(int _M, int _n, int _R, int _s, double _ro0) -{ - M=_M; - N=_n; - R=_R; - S=_s; - ro0=_ro0; - - int jc=N/2-1, ic=M/2-1; - romax=min(ic, jc); - a=exp(log((double)romax/(double)ro0)/(double)R); - q=((double)S)/(2*CV_PI); - ind1=0; - - Rsri=Mat::zeros(S,R,CV_32FC1); - Csri=Mat::zeros(S,R,CV_32FC1); - ETAyx=Mat::zeros(N,M,CV_32FC1); - CSIyx=Mat::zeros(N,M,CV_32FC1); - Rsr.resize(R*S); - Csr.resize(R*S); - Wsr.resize(R); - w_ker_2D.resize(R*S); - - for(int v=0; v(v,u)=(float)(ro0*pow(a,u)*sin(v/q)+jc); - Csri.at(v,u)=(float)(ro0*pow(a,u)*cos(v/q)+ic); - Rsr[v*R+u]=(int)floor(Rsri.at(v,u)); - Csr[v*R+u]=(int)floor(Csri.at(v,u)); - } - } - - bool done=false; - - for(int i=0; i1)&&(done==false)) - { - ind1=i; - done =true; - } - } - - for(int j=0; j=ic) - theta=atan((double)(j-jc)/(double)(i-ic)); - else - theta=atan((double)(j-jc)/(double)(i-ic))+CV_PI; - - if(theta<0) - theta+=2*CV_PI; - - ETAyx.at(j,i)=(float)(q*theta); - - double ro2=(j-jc)*(j-jc)+(i-ic)*(i-ic); - CSIyx.at(j,i)=(float)(0.5*log(ro2/(ro0*ro0))/log(a)); - } - } - - for(int v=0; v(v,u)-Csr[v*R+u]; - double dy=Rsri.at(v,u)-Rsr[v*R+u]; - double tot=0; - for(int j=0; j<2*w+1; j++) - for(int i=0; i<2*w+1; i++) - { - (w_ker_2D[v*R+u].weights)[j*(2*w+1)+i]=exp(-(pow(i-w-dx, 2)+pow(j-w-dy, 2))/(2*sigma*sigma)); - tot+=(w_ker_2D[v*R+u].weights)[j*(2*w+1)+i]; - } - for(int j=0; j<(2*w+1); j++) - for(int i=0; i<(2*w+1); i++) - (w_ker_2D[v*R+u].weights)[j*(2*w+1)+i]/=tot; - } -} - -const Mat LogPolar_Overlapping::to_cortical(const Mat &source) -{ - Mat out(S,R,CV_8UC1,Scalar(0)); - - Mat source_border; - copyMakeBorder(source,source_border,top,bottom,left,right,BORDER_CONSTANT,Scalar(0)); - - remap(source_border,out,Csri,Rsri,INTER_LINEAR); - - int wm=w_ker_2D[R-1].w; - vector IMG((M+2*wm+1)*(N+2*wm+1), 0); - - for(int j=0; j(j,i); - - for(int v=0; v(v,u)=(uchar) floor(tmp+0.5); - } - - return out; -} - -const Mat LogPolar_Overlapping::to_cartesian(const Mat &source) -{ - Mat out(N,M,CV_8UC1,Scalar(0)); - - Mat source_border; - copyMakeBorder(source,source_border,0,1,0,0,BORDER_CONSTANT,Scalar(0)); - Mat rowS = source_border.row(S); - source_border.row(0).copyTo(rowS); - remap(source_border,out,CSIyx,ETAyx,INTER_LINEAR); - - int wm=w_ker_2D[R-1].w; - - vector IMG((N+2*wm+1)*(M+2*wm+1), 0.); - vector NOR((N+2*wm+1)*(M+2*wm+1), 0.); - - for(int v=0; v(v, u); - NOR[ind]+=((w_ker_2D[v*R+u]).weights[j*(2*w+1)+i]); - } - } - } - - for(int i=0; i<((N+2*wm+1)*(M+2*wm+1)); i++) - IMG[i]/=NOR[i]; - - //int xc=M/2-1, yc=N/2-1; - - for(int j=wm; j0) - ret[M*(j-wm)+i-wm]=(int) floor(IMG[(M+2*wm+1)*j+i]+0.5);*/ - //int ro=(int)floor(sqrt((double)((j-wm-yc)*(j-wm-yc)+(i-wm-xc)*(i-wm-xc)))); - int csi=(int) floor(CSIyx.at(j-wm,i-wm)); - - if((csi>=(ind1-(w_ker_2D[ind1]).w))&&(csi(j-wm,i-wm)=(uchar) floor(IMG[(M+2*wm+1)*j+i]+0.5); - } - - Mat out_cropped=out(Range(top,N-1-bottom),Range(left,M-1-right)); - return out_cropped; -} - -LogPolar_Overlapping::~LogPolar_Overlapping() -{ -} - -//----------------------------------------adjacent--------------------------------------- - -LogPolar_Adjacent::LogPolar_Adjacent(int w, int h, Point2i center, int _R, double _ro0, double smin, int full, int _s, int sp) -{ - if ( (center.x!=w/2 || center.y!=h/2) && full==0) full=1; - - if (center.x<0) center.x=0; - if (center.y<0) center.y=0; - if (center.x>=w) center.x=w-1; - if (center.y>=h) center.y=h-1; - - if (full){ - int rtmp; - - if (center.x<=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)(w-center.x)*(w-center.x)); - else if (center.x>=w/2 && center.y>=h/2) - rtmp=(int)sqrt((float)center.y*center.y + (float)center.x*center.x); - else if (center.x>=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)center.x*center.x); - else //if (center.x<=w/2 && center.y<=h/2) - rtmp=(int)sqrt((float)(h-center.y)*(h-center.y) + (float)(w-center.x)*(w-center.x)); - - M=2*rtmp; N=2*rtmp; - - top = M/2 - center.y; - bottom = M/2 - (h-center.y); - left = M/2 - center.x; - right = M/2 - (w - center.x); - - }else{ - top=bottom=left=right=0; - M=w; N=h; - } - - if (sp){ - int jc=M/2-1, ic=N/2-1; - int _romax=min(ic, jc); - double _a=exp(log((double)(_romax/2-1)/(double)ro0)/(double)R); - S=(int) floor(2*CV_PI/(_a-1)+0.5); - } - - create_map(M, N, _R, _s, _ro0, smin); -} - - -void LogPolar_Adjacent::create_map(int _M, int _n, int _R, int _s, double _ro0, double smin) -{ - M=_M; - N=_n; - R=_R; - S=_s; - ro0=_ro0; - romax=min(M/2.0, N/2.0); - - a=exp(log(romax/ro0)/(double)R); - q=S/(2*CV_PI); - - A.resize(R*S); - L.resize(M*N); - - for(int i=0; ismin) - { - double xs[4], ys[4]; - int us[4], vs[4]; - - xs[0]=xs[3]=x+length/4.0; - xs[1]=xs[2]=x-length/4.0; - ys[1]=ys[0]=y+length/4.0; - ys[2]=ys[3]=y-length/4.0; - - for(int z=0; z<4; z++) - get_uv(xs[z], ys[z], us[z], vs[z]); - - bool c=true; - for(int w=1; w<4; w++) - { - if(us[w]!=us[w-1]) - c=false; - if(vs[w]!=vs[w-1]) - c=false; - } - - if(c) - { - if(us[0]!=-1) - { - pixel p; - p.u=us[0]; - p.v=vs[0]; - p.a=length*length; - L[M*j+i].push_back(p); - A[vs[0]*R+us[0]]+=length*length; - } - } - - else - { - for(int z=0; z<4; z++) - if(us[z]!=-1) - subdivide_recursively(xs[z], ys[z], i, j, length/2.0, smin); - } - } -} - - -const Mat LogPolar_Adjacent::to_cortical(const Mat &source) -{ - Mat source_border; - copyMakeBorder(source,source_border,top,bottom,left,right,BORDER_CONSTANT,Scalar(0)); - - vector map(R*S, 0.); - - for(int j=0; j(j,i)); - } - } - - for(int i=0; i(i,j)=(uchar) floor(map[i*R+j]+0.5); - - return out; -} - -const Mat LogPolar_Adjacent::to_cartesian(const Mat &source) -{ - vector map(M*N, 0.); - - for(int j=0; j((L[M*j+i])[z].v,(L[M*j+i])[z].u); - } - } - - Mat out(N,M,CV_8UC1,Scalar(0)); - - for(int i=0; i(i,j)=(uchar) floor(map[i*M+j]+0.5); - - Mat out_cropped=out(Range(top,N-1-bottom),Range(left,M-1-right)); - return out_cropped; -} - - -bool LogPolar_Adjacent::get_uv(double x, double y, int&u, int&v) -{ - double ro=sqrt(x*x+y*y), theta; - if(x>0) - theta=atan(y/x); - else - theta=atan(y/x)+CV_PI; - - if(roromax) - { - u=-1; - v=-1; - return false; - } - else - { - u= (int) floor(log(ro/ro0)/log(a)); - if(theta>=0) - v= (int) floor(q*theta); - else - v= (int) floor(q*(theta+2*CV_PI)); - return true; - } -} - -LogPolar_Adjacent::~LogPolar_Adjacent() -{ -} - -} diff --git a/modules/contrib/src/magnoretinafilter.cpp b/modules/contrib/src/magnoretinafilter.cpp deleted file mode 100644 index 57a4466..0000000 --- a/modules/contrib/src/magnoretinafilter.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" - -#include - -#include "magnoretinafilter.hpp" - -#include - -namespace cv -{ -// Constructor and Desctructor of the OPL retina filter -MagnoRetinaFilter::MagnoRetinaFilter(const unsigned int NBrows, const unsigned int NBcolumns) -:BasicRetinaFilter(NBrows, NBcolumns, 2), - _previousInput_ON(NBrows*NBcolumns), - _previousInput_OFF(NBrows*NBcolumns), - _amacrinCellsTempOutput_ON(NBrows*NBcolumns), - _amacrinCellsTempOutput_OFF(NBrows*NBcolumns), - _magnoXOutputON(NBrows*NBcolumns), - _magnoXOutputOFF(NBrows*NBcolumns), - _localProcessBufferON(NBrows*NBcolumns), - _localProcessBufferOFF(NBrows*NBcolumns) -{ - _magnoYOutput=&_filterOutput; - _magnoYsaturated=&_localBuffer; - - - clearAllBuffers(); - -#ifdef IPL_RETINA_ELEMENT_DEBUG - std::cout<<"MagnoRetinaFilter::Init IPL retina filter at specified frame size OK"<getNBpixels(); ++IDpixel) - { - - /* Compute ON and OFF amacrin cells high pass temporal filter */ - float magnoXonPixelResult = _temporalCoefficient*(*amacrinCellsTempOutput_ON_PTR+ *OPL_ON_PTR-*previousInput_ON_PTR); - *(amacrinCellsTempOutput_ON_PTR++)=((float)(magnoXonPixelResult>0))*magnoXonPixelResult; - - float magnoXoffPixelResult = _temporalCoefficient*(*amacrinCellsTempOutput_OFF_PTR+ *OPL_OFF_PTR-*previousInput_OFF_PTR); - *(amacrinCellsTempOutput_OFF_PTR++)=((float)(magnoXoffPixelResult>0))*magnoXoffPixelResult; - - /* prepare next loop */ - *(previousInput_ON_PTR++)=*(OPL_ON_PTR++); - *(previousInput_OFF_PTR++)=*(OPL_OFF_PTR++); - - } -#endif -} - -// launch filter that runs all the IPL filter -const std::valarray &MagnoRetinaFilter::runFilter(const std::valarray &OPL_ON, const std::valarray &OPL_OFF) -{ - // Compute the high pass temporal filter - _amacrineCellsComputing(get_data(OPL_ON), get_data(OPL_OFF)); - - // apply low pass filtering on ON and OFF ways after temporal high pass filtering - _spatiotemporalLPfilter(&_amacrinCellsTempOutput_ON[0], &_magnoXOutputON[0], 0); - _spatiotemporalLPfilter(&_amacrinCellsTempOutput_OFF[0], &_magnoXOutputOFF[0], 0); - - // local adaptation of the ganglion cells to the local contrast of the moving contours - _spatiotemporalLPfilter(&_magnoXOutputON[0], &_localProcessBufferON[0], 1); - _localLuminanceAdaptation(&_magnoXOutputON[0], &_localProcessBufferON[0]); - _spatiotemporalLPfilter(&_magnoXOutputOFF[0], &_localProcessBufferOFF[0], 1); - _localLuminanceAdaptation(&_magnoXOutputOFF[0], &_localProcessBufferOFF[0]); - - /* Compute MagnoY */ - register float *magnoYOutput= &(*_magnoYOutput)[0]; - register float *magnoXOutputON_PTR= &_magnoXOutputON[0]; - register float *magnoXOutputOFF_PTR= &_magnoXOutputOFF[0]; - for (register unsigned int IDpixel=0 ; IDpixel<_filterOutput.getNBpixels() ; ++IDpixel) - *(magnoYOutput++)=*(magnoXOutputON_PTR++)+*(magnoXOutputOFF_PTR++); - - return (*_magnoYOutput); -} -} diff --git a/modules/contrib/src/magnoretinafilter.hpp b/modules/contrib/src/magnoretinafilter.hpp deleted file mode 100644 index ac47b2e..0000000 --- a/modules/contrib/src/magnoretinafilter.hpp +++ /dev/null @@ -1,243 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 MagnoRetinaFilter_H_ -#define MagnoRetinaFilter_H_ - -/** -* @class MagnoRetinaFilter -* @brief class which describes the magnocellular channel of the retina: -* -> performs a moving contours extraction with powerfull local data enhancement -* -* TYPICAL USE: -* -* // create object at a specified picture size -* MagnoRetinaFilter *movingContoursExtractor; -* movingContoursExtractor =new MagnoRetinaFilter(frameSizeRows, frameSizeColumns); -* -* // init gain, spatial and temporal parameters: -* movingContoursExtractor->setCoefficientsTable(0, 0.7, 5, 3); -* -* // during program execution, call the filter for contours extraction for an input picture called "FrameBuffer": -* movingContoursExtractor->runfilter(FrameBuffer); -* -* // get the output frame, check in the class description below for more outputs: -* const float *movingContours=movingContoursExtractor->getMagnoYsaturated(); -* -* // at the end of the program, destroy object: -* delete movingContoursExtractor; - -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -* Based on Alexandre BENOIT thesis: "Le système visuel humain au secours de la vision par ordinateur" -*/ - -#include "basicretinafilter.hpp" - -//#define _IPL_RETINA_ELEMENT_DEBUG - -namespace cv -{ - - class MagnoRetinaFilter: public BasicRetinaFilter - { - public: - /** - * constructor parameters are only linked to image input size - * @param NBrows: number of rows of the input image - * @param NBcolumns: number of columns of the input image - */ - MagnoRetinaFilter(const unsigned int NBrows, const unsigned int NBcolumns); - - - /** - * destructor - */ - virtual ~MagnoRetinaFilter(); - - /** - * function that clears all buffers of the object - */ - void clearAllBuffers(); - - /** - * resize retina magno filter object (resize all allocated buffers) - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - /** - * set parameters values - * @param parasolCells_beta: the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0 - * @param parasolCells_tau: the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response) - * @param parasolCells_k: the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5 - * @param amacrinCellsTemporalCutFrequency: the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5 - * @param localAdaptIntegration_tau: specifies the temporal constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - * @param localAdaptIntegration_k: specifies the spatial constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - */ - void setCoefficientsTable(const float parasolCells_beta, const float parasolCells_tau, const float parasolCells_k, const float amacrinCellsTemporalCutFrequency, const float localAdaptIntegration_tau, const float localAdaptIntegration_k); - - /** - * launch filter that runs all the IPL magno filter (model of the magnocellular channel of the Inner Plexiform Layer of the retina) - * @param OPL_ON: the output of the bipolar ON cells of the retina (available from the ParvoRetinaFilter class (getBipolarCellsON() function) - * @param OPL_OFF: the output of the bipolar OFF cells of the retina (available from the ParvoRetinaFilter class (getBipolarCellsOFF() function) - * @return the processed result without post-processing - */ - const std::valarray &runFilter(const std::valarray &OPL_ON, const std::valarray &OPL_OFF); - - /** - * @return the Magnocellular ON channel filtering output - */ - inline const std::valarray &getMagnoON() const {return _magnoXOutputON;}; - - /** - * @return the Magnocellular OFF channel filtering output - */ - inline const std::valarray &getMagnoOFF() const {return _magnoXOutputOFF;}; - - /** - * @return the Magnocellular Y (sum of the ON and OFF magno channels) filtering output - */ - inline const std::valarray &getMagnoYsaturated() const {return *_magnoYsaturated;}; - - /** - * applies an image normalization which saturates the high output values by the use of an assymetric sigmoide - */ - inline void normalizeGrayOutputNearZeroCentreredSigmoide(){_filterOutput.normalizeGrayOutputNearZeroCentreredSigmoide(&(*_magnoYOutput)[0], &(*_magnoYsaturated)[0]);}; - - /** - * @return the horizontal cells' temporal constant - */ - inline float getTemporalConstant(){return this->_filteringCoeficientsTable[2];}; - - private: - - // related pointers to these buffers - std::valarray _previousInput_ON; - std::valarray _previousInput_OFF; - std::valarray _amacrinCellsTempOutput_ON; - std::valarray _amacrinCellsTempOutput_OFF; - std::valarray _magnoXOutputON; - std::valarray _magnoXOutputOFF; - std::valarray _localProcessBufferON; - std::valarray _localProcessBufferOFF; - // reference to parent buffers and allow better readability - TemplateBuffer *_magnoYOutput; - std::valarray *_magnoYsaturated; - - // varialbles - float _temporalCoefficient; - - // amacrine cells filter : high pass temporal filter - void _amacrineCellsComputing(const float *ONinput, const float *OFFinput); -#ifdef MAKE_PARALLEL - /****************************************************** - ** IF some parallelizing thread methods are available, then, main loops are parallelized using these functors - ** ==> main idea parallelize main filters loops, then, only the most used methods are parallelized... TODO : increase the number of parallelized methods as necessary - ** ==> functors names = Parallel_$$$ where $$$= the name of the serial method that is parallelized - ** ==> functors constructors can differ from the parameters used with their related serial functions - */ - class Parallel_amacrineCellsComputing: public cv::ParallelLoopBody - { - private: - const float *OPL_ON, *OPL_OFF; - float *previousInput_ON, *previousInput_OFF, *amacrinCellsTempOutput_ON, *amacrinCellsTempOutput_OFF; - float temporalCoefficient; - public: - Parallel_amacrineCellsComputing(const float *OPL_ON_PTR, const float *OPL_OFF_PTR, float *previousInput_ON_PTR, float *previousInput_OFF_PTR, float *amacrinCellsTempOutput_ON_PTR, float *amacrinCellsTempOutput_OFF_PTR, float temporalCoefficientVal) - :OPL_ON(OPL_ON_PTR), OPL_OFF(OPL_OFF_PTR), previousInput_ON(previousInput_ON_PTR), previousInput_OFF(previousInput_OFF_PTR), amacrinCellsTempOutput_ON(amacrinCellsTempOutput_ON_PTR), amacrinCellsTempOutput_OFF(amacrinCellsTempOutput_OFF_PTR), temporalCoefficient(temporalCoefficientVal) {} - - virtual void operator()( const Range& r ) const { - register const float *OPL_ON_PTR=OPL_ON+r.start; - register const float *OPL_OFF_PTR=OPL_OFF+r.start; - register float *previousInput_ON_PTR= previousInput_ON+r.start; - register float *previousInput_OFF_PTR= previousInput_OFF+r.start; - register float *amacrinCellsTempOutput_ON_PTR= amacrinCellsTempOutput_ON+r.start; - register float *amacrinCellsTempOutput_OFF_PTR= amacrinCellsTempOutput_OFF+r.start; - - for (int IDpixel=r.start ; IDpixel!=r.end; ++IDpixel) - { - - /* Compute ON and OFF amacrin cells high pass temporal filter */ - float magnoXonPixelResult = temporalCoefficient*(*amacrinCellsTempOutput_ON_PTR+ *OPL_ON_PTR-*previousInput_ON_PTR); - *(amacrinCellsTempOutput_ON_PTR++)=((float)(magnoXonPixelResult>0))*magnoXonPixelResult; - - float magnoXoffPixelResult = temporalCoefficient*(*amacrinCellsTempOutput_OFF_PTR+ *OPL_OFF_PTR-*previousInput_OFF_PTR); - *(amacrinCellsTempOutput_OFF_PTR++)=((float)(magnoXoffPixelResult>0))*magnoXoffPixelResult; - - /* prepare next loop */ - *(previousInput_ON_PTR++)=*(OPL_ON_PTR++); - *(previousInput_OFF_PTR++)=*(OPL_OFF_PTR++); - - } - } - - }; -#endif - }; - -} - -#endif /*MagnoRetinaFilter_H_*/ diff --git a/modules/contrib/src/octree.cpp b/modules/contrib/src/octree.cpp deleted file mode 100644 index 0808b12..0000000 --- a/modules/contrib/src/octree.cpp +++ /dev/null @@ -1,344 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -namespace -{ - using namespace cv; - const size_t MAX_STACK_SIZE = 255; - const size_t MAX_LEAFS = 8; - - bool checkIfNodeOutsideSphere(const Octree::Node& node, const Point3f& c, float r) - { - if (node.x_max < (c.x - r) || node.y_max < (c.y - r) || node.z_max < (c.z - r)) - return true; - - if ((c.x + r) < node.x_min || (c.y + r) < node.y_min || (c.z + r) < node.z_min) - return true; - - return false; - } - - bool checkIfNodeInsideSphere(const Octree::Node& node, const Point3f& c, float r) - { - r *= r; - - float d2_xmin = (node.x_min - c.x) * (node.x_min - c.x); - float d2_ymin = (node.y_min - c.y) * (node.y_min - c.y); - float d2_zmin = (node.z_min - c.z) * (node.z_min - c.z); - - if (d2_xmin + d2_ymin + d2_zmin > r) - return false; - - float d2_zmax = (node.z_max - c.z) * (node.z_max - c.z); - - if (d2_xmin + d2_ymin + d2_zmax > r) - return false; - - float d2_ymax = (node.y_max - c.y) * (node.y_max - c.y); - - if (d2_xmin + d2_ymax + d2_zmin > r) - return false; - - if (d2_xmin + d2_ymax + d2_zmax > r) - return false; - - float d2_xmax = (node.x_max - c.x) * (node.x_max - c.x); - - if (d2_xmax + d2_ymin + d2_zmin > r) - return false; - - if (d2_xmax + d2_ymin + d2_zmax > r) - return false; - - if (d2_xmax + d2_ymax + d2_zmin > r) - return false; - - if (d2_xmax + d2_ymax + d2_zmax > r) - return false; - - return true; - } - - void fillMinMax(const vector& points, Octree::Node& node) - { - node.x_max = node.y_max = node.z_max = std::numeric_limits::min(); - node.x_min = node.y_min = node.z_min = std::numeric_limits::max(); - - for (size_t i = 0; i < points.size(); ++i) - { - const Point3f& point = points[i]; - - if (node.x_max < point.x) - node.x_max = point.x; - - if (node.y_max < point.y) - node.y_max = point.y; - - if (node.z_max < point.z) - node.z_max = point.z; - - if (node.x_min > point.x) - node.x_min = point.x; - - if (node.y_min > point.y) - node.y_min = point.y; - - if (node.z_min > point.z) - node.z_min = point.z; - } - } - - size_t findSubboxForPoint(const Point3f& point, const Octree::Node& node) - { - size_t ind_x = point.x < (node.x_max + node.x_min) / 2 ? 0 : 1; - size_t ind_y = point.y < (node.y_max + node.y_min) / 2 ? 0 : 1; - size_t ind_z = point.z < (node.z_max + node.z_min) / 2 ? 0 : 1; - - return (ind_x << 2) + (ind_y << 1) + (ind_z << 0); - } - void initChildBox(const Octree::Node& parent, size_t boxIndex, Octree::Node& child) - { - child.x_min = child.x_max = (parent.x_max + parent.x_min) / 2; - child.y_min = child.y_max = (parent.y_max + parent.y_min) / 2; - child.z_min = child.z_max = (parent.z_max + parent.z_min) / 2; - - if ((boxIndex >> 0) & 1) - child.z_max = parent.z_max; - else - child.z_min = parent.z_min; - - if ((boxIndex >> 1) & 1) - child.y_max = parent.y_max; - else - child.y_min = parent.y_min; - - if ((boxIndex >> 2) & 1) - child.x_max = parent.x_max; - else - child.x_min = parent.x_min; - } - -}//namespace - -//////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////// Octree ////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// -namespace cv -{ - Octree::Octree() - { - } - - Octree::Octree(const vector& points3d, int maxLevels, int _minPoints) - { - buildTree(points3d, maxLevels, _minPoints); - } - - Octree::~Octree() - { - } - - void Octree::getPointsWithinSphere(const Point3f& center, float radius, vector& out) const - { - out.clear(); - - if (nodes.empty()) - return; - - int stack[MAX_STACK_SIZE]; - int pos = 0; - stack[pos] = 0; - - while (pos >= 0) - { - const Node& cur = nodes[stack[pos--]]; - - if (checkIfNodeOutsideSphere(cur, center, radius)) - continue; - - if (checkIfNodeInsideSphere(cur, center, radius)) - { - size_t sz = out.size(); - out.resize(sz + cur.end - cur.begin); - for (int i = cur.begin; i < cur.end; ++i) - out[sz++] = points[i]; - continue; - } - - if (cur.isLeaf) - { - double r2 = radius * radius; - size_t sz = out.size(); - out.resize(sz + (cur.end - cur.begin)); - - for (int i = cur.begin; i < cur.end; ++i) - { - const Point3f& point = points[i]; - - double dx = (point.x - center.x); - double dy = (point.y - center.y); - double dz = (point.z - center.z); - - double dist2 = dx * dx + dy * dy + dz * dz; - - if (dist2 < r2) - out[sz++] = point; - }; - out.resize(sz); - continue; - } - - if (cur.children[0]) - stack[++pos] = cur.children[0]; - - if (cur.children[1]) - stack[++pos] = cur.children[1]; - - if (cur.children[2]) - stack[++pos] = cur.children[2]; - - if (cur.children[3]) - stack[++pos] = cur.children[3]; - - if (cur.children[4]) - stack[++pos] = cur.children[4]; - - if (cur.children[5]) - stack[++pos] = cur.children[5]; - - if (cur.children[6]) - stack[++pos] = cur.children[6]; - - if (cur.children[7]) - stack[++pos] = cur.children[7]; - } - } - - void Octree::buildTree(const vector& points3d, int maxLevels, int _minPoints) - { - assert((size_t)maxLevels * 8 < MAX_STACK_SIZE); - points.resize(points3d.size()); - std::copy(points3d.begin(), points3d.end(), points.begin()); - minPoints = _minPoints; - - nodes.clear(); - nodes.push_back(Node()); - Node& root = nodes[0]; - fillMinMax(points, root); - - root.isLeaf = true; - root.maxLevels = maxLevels; - root.begin = 0; - root.end = (int)points.size(); - for (size_t i = 0; i < MAX_LEAFS; i++) - root.children[i] = 0; - - if (maxLevels != 1 && (root.end - root.begin) > _minPoints) - { - root.isLeaf = false; - buildNext(0); - } - } - - void Octree::buildNext(size_t nodeInd) - { - size_t size = nodes[nodeInd].end - nodes[nodeInd].begin; - - vector boxBorders(MAX_LEAFS+1, 0); - vector boxIndices(size); - vector tempPoints(size); - - for (int i = nodes[nodeInd].begin, j = 0; i < nodes[nodeInd].end; ++i, ++j) - { - const Point3f& p = points[i]; - - size_t subboxInd = findSubboxForPoint(p, nodes[nodeInd]); - - boxBorders[subboxInd+1]++; - boxIndices[j] = subboxInd; - tempPoints[j] = p; - } - - for (size_t i = 1; i < boxBorders.size(); ++i) - boxBorders[i] += boxBorders[i-1]; - - vector writeInds(boxBorders.begin(), boxBorders.end()); - - for (size_t i = 0; i < size; ++i) - { - size_t boxIndex = boxIndices[i]; - Point3f& curPoint = tempPoints[i]; - - size_t copyTo = nodes[nodeInd].begin + writeInds[boxIndex]++; - points[copyTo] = curPoint; - } - - for (size_t i = 0; i < MAX_LEAFS; ++i) - { - if (boxBorders[i] == boxBorders[i+1]) - continue; - - nodes.push_back(Node()); - Node& child = nodes.back(); - initChildBox(nodes[nodeInd], i, child); - - child.isLeaf = true; - child.maxLevels = nodes[nodeInd].maxLevels - 1; - child.begin = nodes[nodeInd].begin + (int)boxBorders[i+0]; - child.end = nodes[nodeInd].begin + (int)boxBorders[i+1]; - for (size_t k = 0; k < MAX_LEAFS; k++) - child.children[k] = 0; - - nodes[nodeInd].children[i] = (int)(nodes.size() - 1); - - if (child.maxLevels != 1 && (child.end - child.begin) > minPoints) - { - child.isLeaf = false; - buildNext(nodes.size() - 1); - } - } - } - -} diff --git a/modules/contrib/src/openfabmap.cpp b/modules/contrib/src/openfabmap.cpp deleted file mode 100644 index e30080b..0000000 --- a/modules/contrib/src/openfabmap.cpp +++ /dev/null @@ -1,778 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// This file originates from the openFABMAP project: -// [http://code.google.com/p/openfabmap/] -// -// For published work which uses all or part of OpenFABMAP, please cite: -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6224843] -// -// Original Algorithm by Mark Cummins and Paul Newman: -// [http://ijr.sagepub.com/content/27/6/647.short] -// [http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5613942] -// [http://ijr.sagepub.com/content/30/9/1100.abstract] -// -// License Agreement -// -// Copyright (C) 2012 Arren Glover [aj.glover@qut.edu.au] and -// Will Maddern [w.maddern@qut.edu.au], all rights reserved. -// -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/contrib/openfabmap.hpp" - - -/* - Calculate the sum of two log likelihoods -*/ -namespace cv { - -namespace of2 { - -static double logsumexp(double a, double b) { - return a > b ? log(1 + exp(b - a)) + a : log(1 + exp(a - b)) + b; -} - -FabMap::FabMap(const Mat& _clTree, double _PzGe, - double _PzGNe, int _flags, int _numSamples) : - clTree(_clTree), PzGe(_PzGe), PzGNe(_PzGNe), flags( - _flags), numSamples(_numSamples) { - - CV_Assert(flags & MEAN_FIELD || flags & SAMPLED); - CV_Assert(flags & NAIVE_BAYES || flags & CHOW_LIU); - if (flags & NAIVE_BAYES) { - PzGL = &FabMap::PzqGL; - } else { - PzGL = &FabMap::PzqGzpqL; - } - - //check for a valid Chow-Liu tree - CV_Assert(clTree.type() == CV_64FC1); - cv::checkRange(clTree.row(0), false, NULL, 0, clTree.cols); - cv::checkRange(clTree.row(1), false, NULL, DBL_MIN, 1); - cv::checkRange(clTree.row(2), false, NULL, DBL_MIN, 1); - cv::checkRange(clTree.row(3), false, NULL, DBL_MIN, 1); - - // TODO: Add default values for member variables - Pnew = 0.9; - sFactor = 0.99; - mBias = 0.5; -} - -FabMap::~FabMap() { -} - -const std::vector& FabMap::getTrainingImgDescriptors() const { - return trainingImgDescriptors; -} - -const std::vector& FabMap::getTestImgDescriptors() const { - return testImgDescriptors; -} - -void FabMap::addTraining(const Mat& queryImgDescriptor) { - CV_Assert(!queryImgDescriptor.empty()); - vector queryImgDescriptors; - for (int i = 0; i < queryImgDescriptor.rows; i++) { - queryImgDescriptors.push_back(queryImgDescriptor.row(i)); - } - addTraining(queryImgDescriptors); -} - -void FabMap::addTraining(const vector& queryImgDescriptors) { - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - trainingImgDescriptors.push_back(queryImgDescriptors[i]); - } -} - -void FabMap::add(const cv::Mat& queryImgDescriptor) { - CV_Assert(!queryImgDescriptor.empty()); - vector queryImgDescriptors; - for (int i = 0; i < queryImgDescriptor.rows; i++) { - queryImgDescriptors.push_back(queryImgDescriptor.row(i)); - } - add(queryImgDescriptors); -} - -void FabMap::add(const std::vector& queryImgDescriptors) { - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - testImgDescriptors.push_back(queryImgDescriptors[i]); - } -} - -void FabMap::compare(const Mat& queryImgDescriptor, - vector& matches, bool addQuery, - const Mat& mask) { - CV_Assert(!queryImgDescriptor.empty()); - vector queryImgDescriptors; - for (int i = 0; i < queryImgDescriptor.rows; i++) { - queryImgDescriptors.push_back(queryImgDescriptor.row(i)); - } - compare(queryImgDescriptors,matches,addQuery,mask); -} - -void FabMap::compare(const Mat& queryImgDescriptor, - const Mat& testImgDescriptor, vector& matches, - const Mat& mask) { - CV_Assert(!queryImgDescriptor.empty()); - vector queryImgDescriptors; - for (int i = 0; i < queryImgDescriptor.rows; i++) { - queryImgDescriptors.push_back(queryImgDescriptor.row(i)); - } - - CV_Assert(!testImgDescriptor.empty()); - vector _testImgDescriptors; - for (int i = 0; i < testImgDescriptor.rows; i++) { - _testImgDescriptors.push_back(testImgDescriptor.row(i)); - } - compare(queryImgDescriptors,_testImgDescriptors,matches,mask); - -} - -void FabMap::compare(const Mat& queryImgDescriptor, - const vector& _testImgDescriptors, - vector& matches, const Mat& mask) { - CV_Assert(!queryImgDescriptor.empty()); - vector queryImgDescriptors; - for (int i = 0; i < queryImgDescriptor.rows; i++) { - queryImgDescriptors.push_back(queryImgDescriptor.row(i)); - } - compare(queryImgDescriptors,_testImgDescriptors,matches,mask); -} - -void FabMap::compare(const vector& queryImgDescriptors, - vector& matches, bool addQuery, const Mat& /*mask*/) { - - // TODO: add first query if empty (is this necessary) - - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - - // TODO: add mask - - compareImgDescriptor(queryImgDescriptors[i], - (int)i, testImgDescriptors, matches); - if (addQuery) - add(queryImgDescriptors[i]); - } -} - -void FabMap::compare(const vector& queryImgDescriptors, - const vector& _testImgDescriptors, - vector& matches, const Mat& /*mask*/) { - - CV_Assert(!(flags & MOTION_MODEL)); - for (size_t i = 0; i < _testImgDescriptors.size(); i++) { - CV_Assert(!_testImgDescriptors[i].empty()); - CV_Assert(_testImgDescriptors[i].rows == 1); - CV_Assert(_testImgDescriptors[i].cols == clTree.cols); - CV_Assert(_testImgDescriptors[i].type() == CV_32F); - } - - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - - // TODO: add mask - - compareImgDescriptor(queryImgDescriptors[i], - (int)i, _testImgDescriptors, matches); - } -} - -void FabMap::compareImgDescriptor(const Mat& queryImgDescriptor, - int queryIndex, const vector& _testImgDescriptors, - vector& matches) { - - vector queryMatches; - queryMatches.push_back(IMatch(queryIndex,-1, - getNewPlaceLikelihood(queryImgDescriptor),0)); - getLikelihoods(queryImgDescriptor,_testImgDescriptors,queryMatches); - normaliseDistribution(queryMatches); - for (size_t j = 1; j < queryMatches.size(); j++) { - queryMatches[j].queryIdx = queryIndex; - } - matches.insert(matches.end(), queryMatches.begin(), queryMatches.end()); -} - -void FabMap::getLikelihoods(const Mat& /*queryImgDescriptor*/, - const vector& /*testImgDescriptors*/, vector& /*matches*/) { - -} - -double FabMap::getNewPlaceLikelihood(const Mat& queryImgDescriptor) { - if (flags & MEAN_FIELD) { - double logP = 0; - bool zq, zpq; - if(flags & NAIVE_BAYES) { - for (int q = 0; q < clTree.cols; q++) { - zq = queryImgDescriptor.at(0,q) > 0; - - logP += log(Pzq(q, false) * PzqGeq(zq, false) + - Pzq(q, true) * PzqGeq(zq, true)); - } - } else { - for (int q = 0; q < clTree.cols; q++) { - zq = queryImgDescriptor.at(0,q) > 0; - zpq = queryImgDescriptor.at(0,pq(q)) > 0; - - double alpha, beta, p; - alpha = Pzq(q, zq) * PzqGeq(!zq, false) * PzqGzpq(q, !zq, zpq); - beta = Pzq(q, !zq) * PzqGeq(zq, false) * PzqGzpq(q, zq, zpq); - p = Pzq(q, false) * beta / (alpha + beta); - - alpha = Pzq(q, zq) * PzqGeq(!zq, true) * PzqGzpq(q, !zq, zpq); - beta = Pzq(q, !zq) * PzqGeq(zq, true) * PzqGzpq(q, zq, zpq); - p += Pzq(q, true) * beta / (alpha + beta); - - logP += log(p); - } - } - return logP; - } - - if (flags & SAMPLED) { - CV_Assert(!trainingImgDescriptors.empty()); - CV_Assert(numSamples > 0); - - vector sampledImgDescriptors; - - // TODO: this method can result in the same sample being added - // multiple times. Is this desired? - - for (int i = 0; i < numSamples; i++) { - int index = rand() % trainingImgDescriptors.size(); - sampledImgDescriptors.push_back(trainingImgDescriptors[index]); - } - - vector matches; - getLikelihoods(queryImgDescriptor,sampledImgDescriptors,matches); - - double averageLogLikelihood = -DBL_MAX + matches.front().likelihood + 1; - for (int i = 0; i < numSamples; i++) { - averageLogLikelihood = - logsumexp(matches[i].likelihood, averageLogLikelihood); - } - - return averageLogLikelihood - log((double)numSamples); - } - return 0; -} - -void FabMap::normaliseDistribution(vector& matches) { - CV_Assert(!matches.empty()); - - if (flags & MOTION_MODEL) { - - matches[0].match = matches[0].likelihood + log(Pnew); - - if (priorMatches.size() > 2) { - matches[1].match = matches[1].likelihood; - matches[1].match += log( - (2 * (1-mBias) * priorMatches[1].match + - priorMatches[1].match + - 2 * mBias * priorMatches[2].match) / 3); - for (size_t i = 2; i < priorMatches.size()-1; i++) { - matches[i].match = matches[i].likelihood; - matches[i].match += log( - (2 * (1-mBias) * priorMatches[i-1].match + - priorMatches[i].match + - 2 * mBias * priorMatches[i+1].match)/3); - } - matches[priorMatches.size()-1].match = - matches[priorMatches.size()-1].likelihood; - matches[priorMatches.size()-1].match += log( - (2 * (1-mBias) * priorMatches[priorMatches.size()-2].match + - priorMatches[priorMatches.size()-1].match + - 2 * mBias * priorMatches[priorMatches.size()-1].match)/3); - - for(size_t i = priorMatches.size(); i < matches.size(); i++) { - matches[i].match = matches[i].likelihood; - } - } else { - for(size_t i = 1; i < matches.size(); i++) { - matches[i].match = matches[i].likelihood; - } - } - - double logsum = -DBL_MAX + matches.front().match + 1; - - //calculate the normalising constant - for (size_t i = 0; i < matches.size(); i++) { - logsum = logsumexp(logsum, matches[i].match); - } - - //normalise - for (size_t i = 0; i < matches.size(); i++) { - matches[i].match = exp(matches[i].match - logsum); - } - - //smooth final probabilities - for (size_t i = 0; i < matches.size(); i++) { - matches[i].match = sFactor*matches[i].match + - (1 - sFactor)/matches.size(); - } - - //update our location priors - priorMatches = matches; - - } else { - - double logsum = -DBL_MAX + matches.front().likelihood + 1; - - for (size_t i = 0; i < matches.size(); i++) { - logsum = logsumexp(logsum, matches[i].likelihood); - } - for (size_t i = 0; i < matches.size(); i++) { - matches[i].match = exp(matches[i].likelihood - logsum); - } - for (size_t i = 0; i < matches.size(); i++) { - matches[i].match = sFactor*matches[i].match + - (1 - sFactor)/matches.size(); - } - } -} - -int FabMap::pq(int q) { - return (int)clTree.at(0,q); -} - -double FabMap::Pzq(int q, bool zq) { - return (zq) ? clTree.at(1,q) : 1 - clTree.at(1,q); -} - -double FabMap::PzqGzpq(int q, bool zq, bool zpq) { - if (zpq) { - return (zq) ? clTree.at(2,q) : 1 - clTree.at(2,q); - } else { - return (zq) ? clTree.at(3,q) : 1 - clTree.at(3,q); - } -} - -double FabMap::PzqGeq(bool zq, bool eq) { - if (eq) { - return (zq) ? PzGe : 1 - PzGe; - } else { - return (zq) ? PzGNe : 1 - PzGNe; - } -} - -double FabMap::PeqGL(int q, bool Lzq, bool eq) { - double alpha, beta; - alpha = PzqGeq(Lzq, true) * Pzq(q, true); - beta = PzqGeq(Lzq, false) * Pzq(q, false); - - if (eq) { - return alpha / (alpha + beta); - } else { - return 1 - (alpha / (alpha + beta)); - } -} - -double FabMap::PzqGL(int q, bool zq, bool /*zpq*/, bool Lzq) { - return PeqGL(q, Lzq, false) * PzqGeq(zq, false) + - PeqGL(q, Lzq, true) * PzqGeq(zq, true); -} - - -double FabMap::PzqGzpqL(int q, bool zq, bool zpq, bool Lzq) { - double p; - double alpha, beta; - - alpha = Pzq(q, zq) * PzqGeq(!zq, false) * PzqGzpq(q, !zq, zpq); - beta = Pzq(q, !zq) * PzqGeq( zq, false) * PzqGzpq(q, zq, zpq); - p = PeqGL(q, Lzq, false) * beta / (alpha + beta); - - alpha = Pzq(q, zq) * PzqGeq(!zq, true) * PzqGzpq(q, !zq, zpq); - beta = Pzq(q, !zq) * PzqGeq( zq, true) * PzqGzpq(q, zq, zpq); - p += PeqGL(q, Lzq, true) * beta / (alpha + beta); - - return p; -} - - -FabMap1::FabMap1(const Mat& _clTree, double _PzGe, double _PzGNe, int _flags, - int _numSamples) : FabMap(_clTree, _PzGe, _PzGNe, _flags, - _numSamples) { -} - -FabMap1::~FabMap1() { -} - -void FabMap1::getLikelihoods(const Mat& queryImgDescriptor, - const vector& testImageDescriptors, vector& matches) { - - for (size_t i = 0; i < testImageDescriptors.size(); i++) { - bool zq, zpq, Lzq; - double logP = 0; - for (int q = 0; q < clTree.cols; q++) { - - zq = queryImgDescriptor.at(0,q) > 0; - zpq = queryImgDescriptor.at(0,pq(q)) > 0; - Lzq = testImageDescriptors[i].at(0,q) > 0; - - logP += log((this->*PzGL)(q, zq, zpq, Lzq)); - - } - matches.push_back(IMatch(0,(int)i,logP,0)); - } -} - -FabMapLUT::FabMapLUT(const Mat& _clTree, double _PzGe, double _PzGNe, - int _flags, int _numSamples, int _precision) : -FabMap(_clTree, _PzGe, _PzGNe, _flags, _numSamples), precision(_precision) { - - int nWords = clTree.cols; - double precFactor = (double)pow(10.0, precision); - - table = new int[nWords][8]; - - for (int q = 0; q < nWords; q++) { - for (unsigned char i = 0; i < 8; i++) { - - bool Lzq = (bool) ((i >> 2) & 0x01); - bool zq = (bool) ((i >> 1) & 0x01); - bool zpq = (bool) (i & 1); - - table[q][i] = -(int)(log((this->*PzGL)(q, zq, zpq, Lzq)) - * precFactor); - } - } -} - -FabMapLUT::~FabMapLUT() { - delete[] table; -} - -void FabMapLUT::getLikelihoods(const Mat& queryImgDescriptor, - const vector& testImageDescriptors, vector& matches) { - - double precFactor = (double)pow(10.0, -precision); - - for (size_t i = 0; i < testImageDescriptors.size(); i++) { - unsigned long long int logP = 0; - for (int q = 0; q < clTree.cols; q++) { - logP += table[q][(queryImgDescriptor.at(0,pq(q)) > 0) + - ((queryImgDescriptor.at(0, q) > 0) << 1) + - ((testImageDescriptors[i].at(0,q) > 0) << 2)]; - } - matches.push_back(IMatch(0,(int)i,-precFactor*(double)logP,0)); - } -} - -FabMapFBO::FabMapFBO(const Mat& _clTree, double _PzGe, double _PzGNe, - int _flags, int _numSamples, double _rejectionThreshold, - double _PsGd, int _bisectionStart, int _bisectionIts) : -FabMap(_clTree, _PzGe, _PzGNe, _flags, _numSamples), PsGd(_PsGd), - rejectionThreshold(_rejectionThreshold), bisectionStart(_bisectionStart), - bisectionIts(_bisectionIts) { -} - - -FabMapFBO::~FabMapFBO() { -} - -void FabMapFBO::getLikelihoods(const Mat& queryImgDescriptor, - const vector& testImageDescriptors, vector& matches) { - - std::multiset wordData; - setWordStatistics(queryImgDescriptor, wordData); - - vector matchIndices; - vector queryMatches; - - for (size_t i = 0; i < testImageDescriptors.size(); i++) { - queryMatches.push_back(IMatch(0,(int)i,0,0)); - matchIndices.push_back((int)i); - } - - double currBest = -DBL_MAX; - double bailedOut = DBL_MAX; - - for (std::multiset::iterator wordIter = wordData.begin(); - wordIter != wordData.end(); wordIter++) { - bool zq = queryImgDescriptor.at(0,wordIter->q) > 0; - bool zpq = queryImgDescriptor.at(0,pq(wordIter->q)) > 0; - - currBest = -DBL_MAX; - - for (size_t i = 0; i < matchIndices.size(); i++) { - bool Lzq = - testImageDescriptors[matchIndices[i]].at(0,wordIter->q) > 0; - queryMatches[matchIndices[i]].likelihood += - log((this->*PzGL)(wordIter->q,zq,zpq,Lzq)); - currBest = - std::max(queryMatches[matchIndices[i]].likelihood, currBest); - } - - if (matchIndices.size() == 1) - continue; - - double delta = std::max(limitbisection(wordIter->V, wordIter->M), - -log(rejectionThreshold)); - - vector::iterator matchIter = matchIndices.begin(); - while (matchIter != matchIndices.end()) { - if (currBest - queryMatches[*matchIter].likelihood > delta) { - queryMatches[*matchIter].likelihood = bailedOut; - matchIter = matchIndices.erase(matchIter); - } else { - matchIter++; - } - } - } - - for (size_t i = 0; i < queryMatches.size(); i++) { - if (queryMatches[i].likelihood == bailedOut) { - queryMatches[i].likelihood = currBest + log(rejectionThreshold); - } - } - matches.insert(matches.end(), queryMatches.begin(), queryMatches.end()); - -} - -void FabMapFBO::setWordStatistics(const Mat& queryImgDescriptor, - std::multiset& wordData) { - //words are sorted according to information = -ln(P(zq|zpq)) - //in non-log format this is lowest probability first - for (int q = 0; q < clTree.cols; q++) { - wordData.insert(WordStats(q,PzqGzpq(q, - queryImgDescriptor.at(0,q) > 0, - queryImgDescriptor.at(0,pq(q)) > 0))); - } - - double d = 0, V = 0, M = 0; - bool zq, zpq; - - for (std::multiset::reverse_iterator wordIter = - wordData.rbegin(); - wordIter != wordData.rend(); wordIter++) { - - zq = queryImgDescriptor.at(0,wordIter->q) > 0; - zpq = queryImgDescriptor.at(0,pq(wordIter->q)) > 0; - - d = log((this->*PzGL)(wordIter->q, zq, zpq, true)) - - log((this->*PzGL)(wordIter->q, zq, zpq, false)); - - V += pow(d, 2.0) * 2 * - (Pzq(wordIter->q, true) - pow(Pzq(wordIter->q, true), 2.0)); - M = std::max(M, fabs(d)); - - wordIter->V = V; - wordIter->M = M; - } -} - -double FabMapFBO::limitbisection(double v, double m) { - double midpoint, left_val, mid_val; - double left = 0, right = bisectionStart; - - left_val = bennettInequality(v, m, left) - PsGd; - - for(int i = 0; i < bisectionIts; i++) { - - midpoint = (left + right)*0.5; - mid_val = bennettInequality(v, m, midpoint)- PsGd; - - if(left_val * mid_val > 0) { - left = midpoint; - left_val = mid_val; - } else { - right = midpoint; - } - } - - return (right + left) * 0.5; -} - -double FabMapFBO::bennettInequality(double v, double m, double delta) { - double DMonV = delta * m / v; - double f_delta = log(DMonV + sqrt(pow(DMonV, 2.0) + 1)); - return exp((v / pow(m, 2.0))*(cosh(f_delta) - 1 - DMonV * f_delta)); -} - -bool FabMapFBO::compInfo(const WordStats& first, const WordStats& second) { - return first.info < second.info; -} - -FabMap2::FabMap2(const Mat& _clTree, double _PzGe, double _PzGNe, - int _flags) : -FabMap(_clTree, _PzGe, _PzGNe, _flags) { - CV_Assert(flags & SAMPLED); - - children.resize(clTree.cols); - - for (int q = 0; q < clTree.cols; q++) { - d1.push_back(log((this->*PzGL)(q, false, false, true) / - (this->*PzGL)(q, false, false, false))); - d2.push_back(log((this->*PzGL)(q, false, true, true) / - (this->*PzGL)(q, false, true, false)) - d1[q]); - d3.push_back(log((this->*PzGL)(q, true, false, true) / - (this->*PzGL)(q, true, false, false))- d1[q]); - d4.push_back(log((this->*PzGL)(q, true, true, true) / - (this->*PzGL)(q, true, true, false))- d1[q]); - children[pq(q)].push_back(q); - } - -} - -FabMap2::~FabMap2() { -} - - -void FabMap2::addTraining(const vector& queryImgDescriptors) { - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - trainingImgDescriptors.push_back(queryImgDescriptors[i]); - addToIndex(queryImgDescriptors[i], trainingDefaults, trainingInvertedMap); - } -} - - -void FabMap2::add(const vector& queryImgDescriptors) { - for (size_t i = 0; i < queryImgDescriptors.size(); i++) { - CV_Assert(!queryImgDescriptors[i].empty()); - CV_Assert(queryImgDescriptors[i].rows == 1); - CV_Assert(queryImgDescriptors[i].cols == clTree.cols); - CV_Assert(queryImgDescriptors[i].type() == CV_32F); - testImgDescriptors.push_back(queryImgDescriptors[i]); - addToIndex(queryImgDescriptors[i], testDefaults, testInvertedMap); - } -} - -void FabMap2::getLikelihoods(const Mat& queryImgDescriptor, - const vector& testImageDescriptors, vector& matches) { - - if (&testImageDescriptors == &testImgDescriptors) { - getIndexLikelihoods(queryImgDescriptor, testDefaults, testInvertedMap, - matches); - } else { - CV_Assert(!(flags & MOTION_MODEL)); - vector defaults; - std::map > invertedMap; - for (size_t i = 0; i < testImageDescriptors.size(); i++) { - addToIndex(testImageDescriptors[i],defaults,invertedMap); - } - getIndexLikelihoods(queryImgDescriptor, defaults, invertedMap, matches); - } -} - -double FabMap2::getNewPlaceLikelihood(const Mat& queryImgDescriptor) { - - CV_Assert(!trainingImgDescriptors.empty()); - - vector matches; - getIndexLikelihoods(queryImgDescriptor, trainingDefaults, - trainingInvertedMap, matches); - - double averageLogLikelihood = -DBL_MAX + matches.front().likelihood + 1; - for (size_t i = 0; i < matches.size(); i++) { - averageLogLikelihood = - logsumexp(matches[i].likelihood, averageLogLikelihood); - } - - return averageLogLikelihood - log((double)trainingDefaults.size()); - -} - -void FabMap2::addToIndex(const Mat& queryImgDescriptor, - vector& defaults, - std::map >& invertedMap) { - defaults.push_back(0); - for (int q = 0; q < clTree.cols; q++) { - if (queryImgDescriptor.at(0,q) > 0) { - defaults.back() += d1[q]; - invertedMap[q].push_back((int)defaults.size()-1); - } - } -} - -void FabMap2::getIndexLikelihoods(const Mat& queryImgDescriptor, - std::vector& defaults, - std::map >& invertedMap, - std::vector& matches) { - - vector::iterator LwithI, child; - - std::vector likelihoods = defaults; - - for (int q = 0; q < clTree.cols; q++) { - if (queryImgDescriptor.at(0,q) > 0) { - for (LwithI = invertedMap[q].begin(); - LwithI != invertedMap[q].end(); LwithI++) { - - if (queryImgDescriptor.at(0,pq(q)) > 0) { - likelihoods[*LwithI] += d4[q]; - } else { - likelihoods[*LwithI] += d3[q]; - } - } - for (child = children[q].begin(); child != children[q].end(); - child++) { - - if (queryImgDescriptor.at(0,*child) == 0) { - for (LwithI = invertedMap[*child].begin(); - LwithI != invertedMap[*child].end(); LwithI++) { - - likelihoods[*LwithI] += d2[*child]; - } - } - } - } - } - - for (size_t i = 0; i < likelihoods.size(); i++) { - matches.push_back(IMatch(0,(int)i,likelihoods[i],0)); - } -} - -} - -} diff --git a/modules/contrib/src/parvoretinafilter.cpp b/modules/contrib/src/parvoretinafilter.cpp deleted file mode 100644 index af20bb7..0000000 --- a/modules/contrib/src/parvoretinafilter.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" - -#include "parvoretinafilter.hpp" - -// @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ - -#include -#include - -namespace cv -{ -////////////////////////////////////////////////////////// -// OPL RETINA FILTER -////////////////////////////////////////////////////////// - -// Constructor and Desctructor of the OPL retina filter - -ParvoRetinaFilter::ParvoRetinaFilter(const unsigned int NBrows, const unsigned int NBcolumns) -:BasicRetinaFilter(NBrows, NBcolumns, 3), - _photoreceptorsOutput(NBrows*NBcolumns), - _horizontalCellsOutput(NBrows*NBcolumns), - _parvocellularOutputON(NBrows*NBcolumns), - _parvocellularOutputOFF(NBrows*NBcolumns), - _bipolarCellsOutputON(NBrows*NBcolumns), - _bipolarCellsOutputOFF(NBrows*NBcolumns), - _localAdaptationOFF(NBrows*NBcolumns) -{ - // link to the required local parent adaptation buffers - _localAdaptationON=&_localBuffer; - _parvocellularOutputONminusOFF=&_filterOutput; - // (*_localAdaptationON)=&_localBuffer; - // (*_parvocellularOutputONminusOFF)=&(BasicRetinaFilter::TemplateBuffer); - - // init: set all the values to 0 - clearAllBuffers(); - - -#ifdef OPL_RETINA_ELEMENT_DEBUG - std::cout<<"ParvoRetinaFilter::Init OPL retina filter at specified frame size OK\n"< &ParvoRetinaFilter::runFilter(const std::valarray &inputFrame, const bool useParvoOutput) -{ - _spatiotemporalLPfilter(get_data(inputFrame), &_photoreceptorsOutput[0]); - _spatiotemporalLPfilter(&_photoreceptorsOutput[0], &_horizontalCellsOutput[0], 1); - _OPL_OnOffWaysComputing(); - - if (useParvoOutput) - { - // local adaptation processes on ON and OFF ways - _spatiotemporalLPfilter(&_bipolarCellsOutputON[0], &(*_localAdaptationON)[0], 2); - _localLuminanceAdaptation(&_parvocellularOutputON[0], &(*_localAdaptationON)[0]); - - _spatiotemporalLPfilter(&_bipolarCellsOutputOFF[0], &_localAdaptationOFF[0], 2); - _localLuminanceAdaptation(&_parvocellularOutputOFF[0], &_localAdaptationOFF[0]); - - //// Final loop that computes the main output of this filter - // - //// loop that makes the difference between photoreceptor cells output and horizontal cells - //// positive part goes on the ON way, negative pat goes on the OFF way - register float *parvocellularOutputONminusOFF_PTR=&(*_parvocellularOutputONminusOFF)[0]; - register float *parvocellularOutputON_PTR=&_parvocellularOutputON[0]; - register float *parvocellularOutputOFF_PTR=&_parvocellularOutputOFF[0]; - - for (register unsigned int IDpixel=0 ; IDpixel<_filterOutput.getNBpixels() ; ++IDpixel) - *(parvocellularOutputONminusOFF_PTR++)= (*(parvocellularOutputON_PTR++)-*(parvocellularOutputOFF_PTR++)); - } - return (*_parvocellularOutputONminusOFF); -} - -void ParvoRetinaFilter::_OPL_OnOffWaysComputing() // WARNING : this method requires many buffer accesses, parallelizing can increase bandwith & core efficacy -{ - // loop that makes the difference between photoreceptor cells output and horizontal cells - // positive part goes on the ON way, negative pat goes on the OFF way - -#ifdef MAKE_PARALLEL - cv::parallel_for_(cv::Range(0,_filterOutput.getNBpixels()), Parallel_OPL_OnOffWaysComputing(&_photoreceptorsOutput[0], &_horizontalCellsOutput[0], &_bipolarCellsOutputON[0], &_bipolarCellsOutputOFF[0], &_parvocellularOutputON[0], &_parvocellularOutputOFF[0])); -#else - float *photoreceptorsOutput_PTR= &_photoreceptorsOutput[0]; - float *horizontalCellsOutput_PTR= &_horizontalCellsOutput[0]; - float *bipolarCellsON_PTR = &_bipolarCellsOutputON[0]; - float *bipolarCellsOFF_PTR = &_bipolarCellsOutputOFF[0]; - float *parvocellularOutputON_PTR= &_parvocellularOutputON[0]; - float *parvocellularOutputOFF_PTR= &_parvocellularOutputOFF[0]; - // compute bipolar cells response equal to photoreceptors minus horizontal cells response - // and copy the result on parvo cellular outputs... keeping time before their local contrast adaptation for final result - for (register unsigned int IDpixel=0 ; IDpixel<_filterOutput.getNBpixels() ; ++IDpixel) - { - float pixelDifference = *(photoreceptorsOutput_PTR++) -*(horizontalCellsOutput_PTR++); - // test condition to allow write pixelDifference in ON or OFF buffer and 0 in the over - float isPositive=(float) (pixelDifference>0.0f); - - // ON and OFF channels writing step - *(parvocellularOutputON_PTR++)=*(bipolarCellsON_PTR++) = isPositive*pixelDifference; - *(parvocellularOutputOFF_PTR++)=*(bipolarCellsOFF_PTR++)= (isPositive-1.0f)*pixelDifference; - } -#endif -} -} diff --git a/modules/contrib/src/parvoretinafilter.hpp b/modules/contrib/src/parvoretinafilter.hpp deleted file mode 100644 index 58e1303..0000000 --- a/modules/contrib/src/parvoretinafilter.hpp +++ /dev/null @@ -1,260 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 ParvoRetinaFilter_H_ -#define ParvoRetinaFilter_H_ - -/** -* @class ParvoRetinaFilter -* @brief class which describes the OPL retina model and the Inner Plexiform Layer parvocellular channel of the retina: -* -> performs a contours extraction with powerfull local data enhancement as at the retina level -* -> spectrum whitening occurs at the OPL (Outer Plexiform Layer) of the retina: corrects the 1/f spectrum tendancy of natural images -* ---> enhances details with mid spatial frequencies, attenuates low spatial frequencies (luminance), attenuates high temporal frequencies and high spatial frequencies, etc. -* -* TYPICAL USE: -* -* // create object at a specified picture size -* ParvoRetinaFilter *contoursExtractor; -* contoursExtractor =new ParvoRetinaFilter(frameSizeRows, frameSizeColumns); -* -* // init gain, spatial and temporal parameters: -* contoursExtractor->setCoefficientsTable(0, 0.7, 1, 0, 7, 1); -* -* // during program execution, call the filter for contours extraction for an input picture called "FrameBuffer": -* contoursExtractor->runfilter(FrameBuffer); -* -* // get the output frame, check in the class description below for more outputs: -* const float *contours=contoursExtractor->getParvoONminusOFF(); -* -* // at the end of the program, destroy object: -* delete contoursExtractor; - -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -* Based on Alexandre BENOIT thesis: "Le système visuel humain au secours de la vision par ordinateur" -* -*/ - -#include "basicretinafilter.hpp" - - -//#define _OPL_RETINA_ELEMENT_DEBUG - -namespace cv -{ -//retina classes that derivate from the Basic Retrina class -class ParvoRetinaFilter: public BasicRetinaFilter -{ - -public: - /** - * constructor parameters are only linked to image input size - * @param NBrows: number of rows of the input image - * @param NBcolumns: number of columns of the input image - */ - ParvoRetinaFilter(const unsigned int NBrows=480, const unsigned int NBcolumns=640); - - /** - * standard desctructor - */ - virtual ~ParvoRetinaFilter(); - - /** - * resize method, keeps initial parameters, all buffers are flushed - * @param NBrows: number of rows of the input image - * @param NBcolumns: number of columns of the input image - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - /** - * function that clears all buffers of the object - */ - void clearAllBuffers(); - - /** - * setup the OPL and IPL parvo channels - * @param beta1: gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, the amplitude is boosted but it should only be used for values rescaling... if needed - * @param tau1: the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame - * @param k1: the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel - * @param beta2: gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0 - * @param tau2: the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors - * @param k2: the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel, this value is also used for local contrast computing when computing the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular channel model) - */ - void setOPLandParvoFiltersParameters(const float beta1, const float tau1, const float k1, const float beta2, const float tau2, const float k2); - - /** - * setup more precisely the low pass filter used for the ganglion cells low pass filtering (used for local luminance adaptation) - * @param tau: time constant of the filter (unit is frame for video processing) - * @param k: spatial constant of the filter (unit is pixels) - */ - void setGanglionCellsLocalAdaptationLPfilterParameters(const float tau, const float k){BasicRetinaFilter::setLPfilterParameters(0, tau, k, 2);}; // change the parameters of the filter - - - /** - * launch filter that runs the OPL spatiotemporal filtering and optionally finalizes IPL Pagno filter (model of the Parvocellular channel of the Inner Plexiform Layer of the retina) - * @param inputFrame: the input image to be processed, this can be the direct gray level input frame, but a better efficacy is expected if the input is preliminary processed by the photoreceptors local adaptation possible to acheive with the help of a BasicRetinaFilter object - * @param useParvoOutput: set true if the final IPL filtering step has to be computed (local contrast enhancement) - * @return the processed Parvocellular channel output (updated only if useParvoOutput is true) - * @details: in any case, after this function call, photoreceptors and horizontal cells output are updated, use getPhotoreceptorsLPfilteringOutput() and getHorizontalCellsOutput() to get them - * also, bipolar cells output are accessible (difference between photoreceptors and horizontal cells, ON output has positive values, OFF ouput has negative values), use the following access methods: getBipolarCellsON() and getBipolarCellsOFF()if useParvoOutput is true, - * if useParvoOutput is true, the complete Parvocellular channel is computed, more outputs are updated and can be accessed threw: getParvoON(), getParvoOFF() and their difference with getOutput() - */ - const std::valarray &runFilter(const std::valarray &inputFrame, const bool useParvoOutput=true); // output return is _parvocellularOutputONminusOFF - - /** - * @return the output of the photoreceptors filtering step (high cut frequency spatio-temporal low pass filter) - */ - inline const std::valarray &getPhotoreceptorsLPfilteringOutput() const {return _photoreceptorsOutput;}; - - /** - * @return the output of the photoreceptors filtering step (low cut frequency spatio-temporal low pass filter) - */ - inline const std::valarray &getHorizontalCellsOutput() const { return _horizontalCellsOutput;}; - - /** - * @return the output Parvocellular ON channel of the retina model - */ - inline const std::valarray &getParvoON() const {return _parvocellularOutputON;}; - - /** - * @return the output Parvocellular OFF channel of the retina model - */ - inline const std::valarray &getParvoOFF() const {return _parvocellularOutputOFF;}; - - /** - * @return the output of the Bipolar cells of the ON channel of the retina model same as function getParvoON() but without luminance local adaptation - */ - inline const std::valarray &getBipolarCellsON() const {return _bipolarCellsOutputON;}; - - /** - * @return the output of the Bipolar cells of the OFF channel of the retina model same as function getParvoON() but without luminance local adaptation - */ - inline const std::valarray &getBipolarCellsOFF() const {return _bipolarCellsOutputOFF;}; - - /** - * @return the photoreceptors's temporal constant - */ - inline float getPhotoreceptorsTemporalConstant(){return this->_filteringCoeficientsTable[2];}; - - /** - * @return the horizontal cells' temporal constant - */ - inline float getHcellsTemporalConstant(){return this->_filteringCoeficientsTable[5];}; - -private: - // template buffers - std::valarray _photoreceptorsOutput; - std::valarray _horizontalCellsOutput; - std::valarray _parvocellularOutputON; - std::valarray _parvocellularOutputOFF; - std::valarray _bipolarCellsOutputON; - std::valarray _bipolarCellsOutputOFF; - std::valarray _localAdaptationOFF; - std::valarray *_localAdaptationON; - TemplateBuffer *_parvocellularOutputONminusOFF; - // private functions - void _OPL_OnOffWaysComputing(); - -#ifdef MAKE_PARALLEL -/****************************************************** -** IF some parallelizing thread methods are available, then, main loops are parallelized using these functors -** ==> main idea parallelize main filters loops, then, only the most used methods are parallelized... TODO : increase the number of parallelized methods as necessary -** ==> functors names = Parallel_$$$ where $$$= the name of the serial method that is parallelized -** ==> functors constructors can differ from the parameters used with their related serial functions -*/ - class Parallel_OPL_OnOffWaysComputing: public cv::ParallelLoopBody - { - private: - float *photoreceptorsOutput, *horizontalCellsOutput, *bipolarCellsON, *bipolarCellsOFF, *parvocellularOutputON, *parvocellularOutputOFF; - public: - Parallel_OPL_OnOffWaysComputing(float *photoreceptorsOutput_PTR, float *horizontalCellsOutput_PTR, float *bipolarCellsON_PTR, float *bipolarCellsOFF_PTR, float *parvocellularOutputON_PTR, float *parvocellularOutputOFF_PTR) - :photoreceptorsOutput(photoreceptorsOutput_PTR), horizontalCellsOutput(horizontalCellsOutput_PTR), bipolarCellsON(bipolarCellsON_PTR), bipolarCellsOFF(bipolarCellsOFF_PTR), parvocellularOutputON(parvocellularOutputON_PTR), parvocellularOutputOFF(parvocellularOutputOFF_PTR) {} - - virtual void operator()( const Range& r ) const { - // compute bipolar cells response equal to photoreceptors minus horizontal cells response - // and copy the result on parvo cellular outputs... keeping time before their local contrast adaptation for final result - float *photoreceptorsOutput_PTR= photoreceptorsOutput+r.start; - float *horizontalCellsOutput_PTR= horizontalCellsOutput+r.start; - float *bipolarCellsON_PTR = bipolarCellsON+r.start; - float *bipolarCellsOFF_PTR = bipolarCellsOFF+r.start; - float *parvocellularOutputON_PTR= parvocellularOutputON+r.start; - float *parvocellularOutputOFF_PTR= parvocellularOutputOFF+r.start; - - for (register int IDpixel=r.start ; IDpixel!=r.end ; ++IDpixel) - { - float pixelDifference = *(photoreceptorsOutput_PTR++) -*(horizontalCellsOutput_PTR++); - // test condition to allow write pixelDifference in ON or OFF buffer and 0 in the over - float isPositive=(float) (pixelDifference>0.0f); - - // ON and OFF channels writing step - *(parvocellularOutputON_PTR++)=*(bipolarCellsON_PTR++) = isPositive*pixelDifference; - *(parvocellularOutputOFF_PTR++)=*(bipolarCellsOFF_PTR++)= (isPositive-1.0f)*pixelDifference; - } - } - }; -#endif - -}; -} -#endif diff --git a/modules/contrib/src/polyfit.cpp b/modules/contrib/src/polyfit.cpp deleted file mode 100644 index 4f3412d..0000000 --- a/modules/contrib/src/polyfit.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// This original code was written by -// Onkar Raut -// Graduate Student, -// University of North Carolina at Charlotte - -#include "precomp.hpp" - -void cv::polyfit(const Mat& src_x, const Mat& src_y, Mat& dst, int order) -{ - CV_Assert((src_x.rows>0)&&(src_y.rows>0)&&(src_x.cols==1)&&(src_y.cols==1) - &&(dst.cols==1)&&(dst.rows==(order+1))&&(order>=1)); - Mat X; - X = Mat::zeros(src_x.rows, order+1,CV_32FC1); - Mat copy; - for(int i = 0; i <=order;i++) - { - copy = src_x.clone(); - pow(copy,i,copy); - Mat M1 = X.col(i); - copy.col(0).copyTo(M1); - } - Mat X_t, X_inv; - transpose(X,X_t); - Mat temp = X_t*X; - Mat temp2; - invert (temp,temp2); - Mat temp3 = temp2*X_t; - Mat W = temp3*src_y; - W.copyTo(dst); -} diff --git a/modules/contrib/src/precomp.hpp b/modules/contrib/src/precomp.hpp deleted file mode 100644 index 30232f7..0000000 --- a/modules/contrib/src/precomp.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/contrib/contrib.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/objdetect/objdetect.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/core/internal.hpp" - -namespace cv -{ - -// special function to get pointer to constant valarray elements, since -// simple &arr[0] does not compile on VS2005/VS2008. -template inline const T* get_data(const std::valarray& arr) -{ return &((std::valarray&)arr)[0]; } - -} - -#endif diff --git a/modules/contrib/src/retina.cpp b/modules/contrib/src/retina.cpp deleted file mode 100644 index 4a02bbc..0000000 --- a/modules/contrib/src/retina.cpp +++ /dev/null @@ -1,463 +0,0 @@ -/*#****************************************************************************** - ** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - ** - ** By downloading, copying, installing or using the software you agree to this license. - ** If you do not agree to this license, do not download, install, - ** copy or use the software. - ** - ** - ** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. - ** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. - ** - ** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) - ** - ** Creation - enhancement process 2007-2011 - ** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France - ** - ** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). - ** Refer to the following research paper for more information: - ** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 - ** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: - ** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. - ** - ** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : - ** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: - ** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 - ** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. - ** ====> more informations in the above cited Jeanny Heraults's book. - ** - ** License Agreement - ** For Open Source Computer Vision Library - ** - ** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - ** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. - ** - ** For Human Visual System tools (hvstools) - ** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. - ** - ** Third party copyrights are property of their respective owners. - ** - ** Redistribution and use in source and binary forms, with or without modification, - ** are permitted provided that the following conditions are met: - ** - ** * Redistributions of source code must retain the above copyright notice, - ** this list of conditions and the following disclaimer. - ** - ** * Redistributions in binary form must reproduce the above copyright notice, - ** this list of conditions and the following disclaimer in the documentation - ** and/or other materials provided with the distribution. - ** - ** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - ** indirect, incidental, special, exemplary, or consequential damages - ** (including, but not limited to, procurement of substitute goods or services; - ** loss of use, data, or profits; or business interruption) however caused - ** and on any theory of liability, whether in contract, strict liability, - ** or tort (including negligence or otherwise) arising in any way out of - ** the use of this software, even if advised of the possibility of such damage. - *******************************************************************************/ - -/* - * Retina.cpp - * - * Created on: Jul 19, 2011 - * Author: Alexandre Benoit - */ -#include "precomp.hpp" -#include "retinafilter.hpp" -#include - -namespace cv -{ - -Retina::Retina(const cv::Size inputSz) -{ - _retinaFilter = 0; - _init(inputSz, true, RETINA_COLOR_BAYER, false); -} - -Retina::Retina(const cv::Size inputSz, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod, const bool useRetinaLogSampling, const double reductionFactor, const double samplingStrenght) -{ - _retinaFilter = 0; - _init(inputSz, colorMode, colorSamplingMethod, useRetinaLogSampling, reductionFactor, samplingStrenght); -} - -Retina::~Retina() -{ - if (_retinaFilter) - delete _retinaFilter; -} - -/** -* retreive retina input buffer size -*/ -Size Retina::inputSize(){return cv::Size(_retinaFilter->getInputNBcolumns(), _retinaFilter->getInputNBrows());} - -/** -* retreive retina output buffer size -*/ -Size Retina::outputSize(){return cv::Size(_retinaFilter->getOutputNBcolumns(), _retinaFilter->getOutputNBrows());} - - -void Retina::setColorSaturation(const bool saturateColors, const float colorSaturationValue) -{ - _retinaFilter->setColorSaturation(saturateColors, colorSaturationValue); -} - -struct Retina::RetinaParameters Retina::getParameters(){return _retinaParameters;} - - -void Retina::setup(std::string retinaParameterFile, const bool applyDefaultSetupOnFailure) -{ - try - { - // opening retinaParameterFile in read mode - cv::FileStorage fs(retinaParameterFile, cv::FileStorage::READ); - setup(fs, applyDefaultSetupOnFailure); - }catch(Exception &e) - { - std::cout<<"Retina::setup: wrong/unappropriate xml parameter file : error report :`n=>"< keeping current parameters"<>_retinaParameters.OPLandIplParvo.colorMode; - currFn["normaliseOutput"]>>_retinaParameters.OPLandIplParvo.normaliseOutput; - currFn["photoreceptorsLocalAdaptationSensitivity"]>>_retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity; - currFn["photoreceptorsTemporalConstant"]>>_retinaParameters.OPLandIplParvo.photoreceptorsTemporalConstant; - currFn["photoreceptorsSpatialConstant"]>>_retinaParameters.OPLandIplParvo.photoreceptorsSpatialConstant; - currFn["horizontalCellsGain"]>>_retinaParameters.OPLandIplParvo.horizontalCellsGain; - currFn["hcellsTemporalConstant"]>>_retinaParameters.OPLandIplParvo.hcellsTemporalConstant; - currFn["hcellsSpatialConstant"]>>_retinaParameters.OPLandIplParvo.hcellsSpatialConstant; - currFn["ganglionCellsSensitivity"]>>_retinaParameters.OPLandIplParvo.ganglionCellsSensitivity; - setupOPLandIPLParvoChannel(_retinaParameters.OPLandIplParvo.colorMode, _retinaParameters.OPLandIplParvo.normaliseOutput, _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity, _retinaParameters.OPLandIplParvo.photoreceptorsTemporalConstant, _retinaParameters.OPLandIplParvo.photoreceptorsSpatialConstant, _retinaParameters.OPLandIplParvo.horizontalCellsGain, _retinaParameters.OPLandIplParvo.hcellsTemporalConstant, _retinaParameters.OPLandIplParvo.hcellsSpatialConstant, _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity); - - // init retina IPL magno setup... update at the same time the parameters structure and the retina core - currFn=rootFn["IPLmagno"]; - currFn["normaliseOutput"]>>_retinaParameters.IplMagno.normaliseOutput; - currFn["parasolCells_beta"]>>_retinaParameters.IplMagno.parasolCells_beta; - currFn["parasolCells_tau"]>>_retinaParameters.IplMagno.parasolCells_tau; - currFn["parasolCells_k"]>>_retinaParameters.IplMagno.parasolCells_k; - currFn["amacrinCellsTemporalCutFrequency"]>>_retinaParameters.IplMagno.amacrinCellsTemporalCutFrequency; - currFn["V0CompressionParameter"]>>_retinaParameters.IplMagno.V0CompressionParameter; - currFn["localAdaptintegration_tau"]>>_retinaParameters.IplMagno.localAdaptintegration_tau; - currFn["localAdaptintegration_k"]>>_retinaParameters.IplMagno.localAdaptintegration_k; - - setupIPLMagnoChannel(_retinaParameters.IplMagno.normaliseOutput, _retinaParameters.IplMagno.parasolCells_beta, _retinaParameters.IplMagno.parasolCells_tau, _retinaParameters.IplMagno.parasolCells_k, _retinaParameters.IplMagno.amacrinCellsTemporalCutFrequency,_retinaParameters.IplMagno.V0CompressionParameter, _retinaParameters.IplMagno.localAdaptintegration_tau, _retinaParameters.IplMagno.localAdaptintegration_k); - - }catch(Exception &e) - { - std::cout<<"Retina::setup: resetting retina with default parameters"<"< keeping current parameters"< colorMode : " << _retinaParameters.OPLandIplParvo.colorMode - << "\n==> normalizeParvoOutput :" << _retinaParameters.OPLandIplParvo.normaliseOutput - << "\n==> photoreceptorsLocalAdaptationSensitivity : " << _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity - << "\n==> photoreceptorsTemporalConstant : " << _retinaParameters.OPLandIplParvo.photoreceptorsTemporalConstant - << "\n==> photoreceptorsSpatialConstant : " << _retinaParameters.OPLandIplParvo.photoreceptorsSpatialConstant - << "\n==> horizontalCellsGain : " << _retinaParameters.OPLandIplParvo.horizontalCellsGain - << "\n==> hcellsTemporalConstant : " << _retinaParameters.OPLandIplParvo.hcellsTemporalConstant - << "\n==> hcellsSpatialConstant : " << _retinaParameters.OPLandIplParvo.hcellsSpatialConstant - << "\n==> parvoGanglionCellsSensitivity : " << _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity - <<"}\n"; - - // displaying IPL magno setup - outmessage<<"Current Retina instance setup :" - <<"\nIPLmagno"<<"{" - << "\n==> normaliseOutput : " << _retinaParameters.IplMagno.normaliseOutput - << "\n==> parasolCells_beta : " << _retinaParameters.IplMagno.parasolCells_beta - << "\n==> parasolCells_tau : " << _retinaParameters.IplMagno.parasolCells_tau - << "\n==> parasolCells_k : " << _retinaParameters.IplMagno.parasolCells_k - << "\n==> amacrinCellsTemporalCutFrequency : " << _retinaParameters.IplMagno.amacrinCellsTemporalCutFrequency - << "\n==> V0CompressionParameter : " << _retinaParameters.IplMagno.V0CompressionParameter - << "\n==> localAdaptintegration_tau : " << _retinaParameters.IplMagno.localAdaptintegration_tau - << "\n==> localAdaptintegration_k : " << _retinaParameters.IplMagno.localAdaptintegration_k - <<"}"; - return outmessage.str(); -} - -void Retina::write( std::string fs ) const -{ - FileStorage parametersSaveFile(fs, cv::FileStorage::WRITE ); - write(parametersSaveFile); -} - -void Retina::write( FileStorage& fs ) const -{ - if (!fs.isOpened()) - return; // basic error case - fs<<"OPLandIPLparvo"<<"{"; - fs << "colorMode" << _retinaParameters.OPLandIplParvo.colorMode; - fs << "normaliseOutput" << _retinaParameters.OPLandIplParvo.normaliseOutput; - fs << "photoreceptorsLocalAdaptationSensitivity" << _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity; - fs << "photoreceptorsTemporalConstant" << _retinaParameters.OPLandIplParvo.photoreceptorsTemporalConstant; - fs << "photoreceptorsSpatialConstant" << _retinaParameters.OPLandIplParvo.photoreceptorsSpatialConstant; - fs << "horizontalCellsGain" << _retinaParameters.OPLandIplParvo.horizontalCellsGain; - fs << "hcellsTemporalConstant" << _retinaParameters.OPLandIplParvo.hcellsTemporalConstant; - fs << "hcellsSpatialConstant" << _retinaParameters.OPLandIplParvo.hcellsSpatialConstant; - fs << "ganglionCellsSensitivity" << _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity; - fs << "}"; - fs<<"IPLmagno"<<"{"; - fs << "normaliseOutput" << _retinaParameters.IplMagno.normaliseOutput; - fs << "parasolCells_beta" << _retinaParameters.IplMagno.parasolCells_beta; - fs << "parasolCells_tau" << _retinaParameters.IplMagno.parasolCells_tau; - fs << "parasolCells_k" << _retinaParameters.IplMagno.parasolCells_k; - fs << "amacrinCellsTemporalCutFrequency" << _retinaParameters.IplMagno.amacrinCellsTemporalCutFrequency; - fs << "V0CompressionParameter" << _retinaParameters.IplMagno.V0CompressionParameter; - fs << "localAdaptintegration_tau" << _retinaParameters.IplMagno.localAdaptintegration_tau; - fs << "localAdaptintegration_k" << _retinaParameters.IplMagno.localAdaptintegration_k; - fs<<"}"; -} - -void Retina::setupOPLandIPLParvoChannel(const bool colorMode, const bool normaliseOutput, const float photoreceptorsLocalAdaptationSensitivity, const float photoreceptorsTemporalConstant, const float photoreceptorsSpatialConstant, const float horizontalCellsGain, const float HcellsTemporalConstant, const float HcellsSpatialConstant, const float ganglionCellsSensitivity) -{ - // retina core parameters setup - _retinaFilter->setColorMode(colorMode); - _retinaFilter->setPhotoreceptorsLocalAdaptationSensitivity(photoreceptorsLocalAdaptationSensitivity); - _retinaFilter->setOPLandParvoParameters(0, photoreceptorsTemporalConstant, photoreceptorsSpatialConstant, horizontalCellsGain, HcellsTemporalConstant, HcellsSpatialConstant, ganglionCellsSensitivity); - _retinaFilter->setParvoGanglionCellsLocalAdaptationSensitivity(ganglionCellsSensitivity); - _retinaFilter->activateNormalizeParvoOutput_0_maxOutputValue(normaliseOutput); - - // update parameters struture - - _retinaParameters.OPLandIplParvo.colorMode = colorMode; - _retinaParameters.OPLandIplParvo.normaliseOutput = normaliseOutput; - _retinaParameters.OPLandIplParvo.photoreceptorsLocalAdaptationSensitivity = photoreceptorsLocalAdaptationSensitivity; - _retinaParameters.OPLandIplParvo.photoreceptorsTemporalConstant = photoreceptorsTemporalConstant; - _retinaParameters.OPLandIplParvo.photoreceptorsSpatialConstant = photoreceptorsSpatialConstant; - _retinaParameters.OPLandIplParvo.horizontalCellsGain = horizontalCellsGain; - _retinaParameters.OPLandIplParvo.hcellsTemporalConstant = HcellsTemporalConstant; - _retinaParameters.OPLandIplParvo.hcellsSpatialConstant = HcellsSpatialConstant; - _retinaParameters.OPLandIplParvo.ganglionCellsSensitivity = ganglionCellsSensitivity; - -} - -void Retina::setupIPLMagnoChannel(const bool normaliseOutput, const float parasolCells_beta, const float parasolCells_tau, const float parasolCells_k, const float amacrinCellsTemporalCutFrequency, const float V0CompressionParameter, const float localAdaptintegration_tau, const float localAdaptintegration_k) -{ - - _retinaFilter->setMagnoCoefficientsTable(parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, V0CompressionParameter, localAdaptintegration_tau, localAdaptintegration_k); - _retinaFilter->activateNormalizeMagnoOutput_0_maxOutputValue(normaliseOutput); - - // update parameters struture - _retinaParameters.IplMagno.normaliseOutput = normaliseOutput; - _retinaParameters.IplMagno.parasolCells_beta = parasolCells_beta; - _retinaParameters.IplMagno.parasolCells_tau = parasolCells_tau; - _retinaParameters.IplMagno.parasolCells_k = parasolCells_k; - _retinaParameters.IplMagno.amacrinCellsTemporalCutFrequency = amacrinCellsTemporalCutFrequency; - _retinaParameters.IplMagno.V0CompressionParameter = V0CompressionParameter; - _retinaParameters.IplMagno.localAdaptintegration_tau = localAdaptintegration_tau; - _retinaParameters.IplMagno.localAdaptintegration_k = localAdaptintegration_k; -} - -void Retina::run(const cv::Mat &inputMatToConvert) -{ - // first convert input image to the compatible format : std::valarray - const bool colorMode = _convertCvMat2ValarrayBuffer(inputMatToConvert, _inputBuffer); - // process the retina - if (!_retinaFilter->runFilter(_inputBuffer, colorMode, false, _retinaParameters.OPLandIplParvo.colorMode && colorMode, false)) - throw cv::Exception(-1, "Retina cannot be applied, wrong input buffer size", "Retina::run", "Retina.h", 0); -} - -void Retina::getParvo(cv::Mat &retinaOutput_parvo) -{ - if (_retinaFilter->getColorMode()) - { - // reallocate output buffer (if necessary) - _convertValarrayBuffer2cvMat(_retinaFilter->getColorOutput(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), true, retinaOutput_parvo); - }else - { - // reallocate output buffer (if necessary) - _convertValarrayBuffer2cvMat(_retinaFilter->getContours(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), false, retinaOutput_parvo); - } - //retinaOutput_parvo/=255.0; -} -void Retina::getMagno(cv::Mat &retinaOutput_magno) -{ - // reallocate output buffer (if necessary) - _convertValarrayBuffer2cvMat(_retinaFilter->getMovingContours(), _retinaFilter->getOutputNBrows(), _retinaFilter->getOutputNBcolumns(), false, retinaOutput_magno); - //retinaOutput_magno/=255.0; -} - -// original API level data accessors : copy buffers if size matches -void Retina::getMagno(std::valarray &magnoOutputBufferCopy){if (magnoOutputBufferCopy.size()==_retinaFilter->getMovingContours().size()) magnoOutputBufferCopy = _retinaFilter->getMovingContours();} -void Retina::getParvo(std::valarray &parvoOutputBufferCopy){if (parvoOutputBufferCopy.size()==_retinaFilter->getContours().size()) parvoOutputBufferCopy = _retinaFilter->getContours();} -// original API level data accessors : get buffers addresses... -const std::valarray & Retina::getMagno() const {return _retinaFilter->getMovingContours();} -const std::valarray & Retina::getParvo() const {if (_retinaFilter->getColorMode())return _retinaFilter->getColorOutput(); /* implicite else */return _retinaFilter->getContours();} - -// private method called by constructirs -void Retina::_init(const cv::Size inputSz, const bool colorMode, RETINA_COLORSAMPLINGMETHOD colorSamplingMethod, const bool useRetinaLogSampling, const double reductionFactor, const double samplingStrenght) -{ - // basic error check - if (inputSz.height*inputSz.width <= 0) - throw cv::Exception(-1, "Bad retina size setup : size height and with must be superior to zero", "Retina::setup", "Retina.h", 0); - - unsigned int nbPixels=inputSz.height*inputSz.width; - // resize buffers if size does not match - _inputBuffer.resize(nbPixels*3); // buffer supports gray images but also 3 channels color buffers... (larger is better...) - - // allocate the retina model - if (_retinaFilter) - delete _retinaFilter; - _retinaFilter = new RetinaFilter(inputSz.height, inputSz.width, colorMode, colorSamplingMethod, useRetinaLogSampling, reductionFactor, samplingStrenght); - - _retinaParameters.OPLandIplParvo.colorMode = colorMode; - // prepare the default parameter XML file with default setup - setup(_retinaParameters); - - // init retina - _retinaFilter->clearAllBuffers(); - - // report current configuration - std::cout< &grayMatrixToConvert, const unsigned int nbRows, const unsigned int nbColumns, const bool colorMode, cv::Mat &outBuffer) -{ - // fill output buffer with the valarray buffer - const float *valarrayPTR=get_data(grayMatrixToConvert); - if (!colorMode) - { - outBuffer.create(cv::Size(nbColumns, nbRows), CV_8U); - for (unsigned int i=0;i(pixel)=(unsigned char)*(valarrayPTR++); - } - } - }else - { - const unsigned int doubleNBpixels=_retinaFilter->getOutputNBpixels()*2; - outBuffer.create(cv::Size(nbColumns, nbRows), CV_8UC3); - for (unsigned int i=0;igetOutputNBpixels()); - pixelValues[0]=(unsigned char)*(valarrayPTR+doubleNBpixels); - - outBuffer.at(pixel)=pixelValues; - } - } - } -} - -bool Retina::_convertCvMat2ValarrayBuffer(const cv::Mat inputMatToConvert, std::valarray &outputValarrayMatrix) -{ - // first check input consistency - if (inputMatToConvert.empty()) - throw cv::Exception(-1, "Retina cannot be applied, input buffer is empty", "Retina::run", "Retina.h", 0); - - // retreive color mode from image input - int imageNumberOfChannels = inputMatToConvert.channels(); - - // convert to float AND fill the valarray buffer - typedef float T; // define here the target pixel format, here, float - const int dsttype = DataType::depth; // output buffer is float format - - - if(imageNumberOfChannels==4) - { - // create a cv::Mat table (for RGBA planes) - cv::Mat planes[4] = - { - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[_retinaFilter->getInputNBpixels()*2]), - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[_retinaFilter->getInputNBpixels()]), - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[0]) - }; - planes[3] = cv::Mat(inputMatToConvert.size(), dsttype); // last channel (alpha) does not point on the valarray (not usefull in our case) - // split color cv::Mat in 4 planes... it fills valarray directely - cv::split(cv::Mat_ >(inputMatToConvert), planes); - } - else if (imageNumberOfChannels==3) - { - // create a cv::Mat table (for RGB planes) - cv::Mat planes[] = - { - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[_retinaFilter->getInputNBpixels()*2]), - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[_retinaFilter->getInputNBpixels()]), - cv::Mat(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[0]) - }; - // split color cv::Mat in 3 planes... it fills valarray directely - cv::split(cv::Mat_ >(inputMatToConvert), planes); - } - else if(imageNumberOfChannels==1) - { - // create a cv::Mat header for the valarray - cv::Mat dst(inputMatToConvert.size(), dsttype, &outputValarrayMatrix[0]); - inputMatToConvert.convertTo(dst, dsttype); - } - else - CV_Error(CV_StsUnsupportedFormat, "input image must be single channel (gray levels), bgr format (color) or bgra (color with transparency which won't be considered"); - - return imageNumberOfChannels>1; // return bool : false for gray level image processing, true for color mode -} - -void Retina::clearBuffers() {_retinaFilter->clearAllBuffers();} - -void Retina::activateMovingContoursProcessing(const bool activate){_retinaFilter->activateMovingContoursProcessing(activate);} - -void Retina::activateContoursProcessing(const bool activate){_retinaFilter->activateContoursProcessing(activate);} - -} // end of namespace cv diff --git a/modules/contrib/src/retinacolor.cpp b/modules/contrib/src/retinacolor.cpp deleted file mode 100644 index d138582..0000000 --- a/modules/contrib/src/retinacolor.cpp +++ /dev/null @@ -1,720 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" - -#include "retinacolor.hpp" - -// @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ - -#include -#include - -namespace cv -{ - -// init static values -static float _LMStoACr1Cr2[]={1.0, 1.0, 0.0, 1.0, -1.0, 0.0, -0.5, -0.5, 1.0}; -//static double _ACr1Cr2toLMS[]={0.5, 0.5, 0.0, 0.5, -0.5, 0.0, 0.5, 0.0, 1.0}; -static float _LMStoLab[]={0.5774f, 0.5774f, 0.5774f, 0.4082f, 0.4082f, -0.8165f, 0.7071f, -0.7071f, 0.f}; - -// constructor/desctructor -RetinaColor::RetinaColor(const unsigned int NBrows, const unsigned int NBcolumns, const RETINA_COLORSAMPLINGMETHOD samplingMethod) -:BasicRetinaFilter(NBrows, NBcolumns, 3), - _colorSampling(NBrows*NBcolumns), - _RGBmosaic(NBrows*NBcolumns*3), - _tempMultiplexedFrame(NBrows*NBcolumns), - _demultiplexedTempBuffer(NBrows*NBcolumns*3), - _demultiplexedColorFrame(NBrows*NBcolumns*3), - _chrominance(NBrows*NBcolumns*3), - _colorLocalDensity(NBrows*NBcolumns*3), - _imageGradient(NBrows*NBcolumns*2) -{ - // link to parent buffers (let's recycle !) - _luminance=&_filterOutput; - _multiplexedFrame=&_localBuffer; - - _objectInit=false; - _samplingMethod=samplingMethod; - _saturateColors=false; - _colorSaturationValue=4.0; - - // set default spatio-temporal filter parameters - setLPfilterParameters(0.0, 0.0, 1.5); - setLPfilterParameters(0.0, 0.0, 10.5, 1);// for the low pass filter dedicated to contours energy extraction (demultiplexing process) - setLPfilterParameters(0.f, 0.f, 0.9f, 2); - - // init default value on image Gradient - _imageGradient=0.57f; - - // init color sampling map - _initColorSampling(); - - // flush all buffers - clearAllBuffers(); -} - -RetinaColor::~RetinaColor() -{ - -} - -/** -* function that clears all buffers of the object -*/ -void RetinaColor::clearAllBuffers() -{ - BasicRetinaFilter::clearAllBuffers(); - _tempMultiplexedFrame=0.f; - _demultiplexedTempBuffer=0.f; - - _demultiplexedColorFrame=0.f; - _chrominance=0.f; - _imageGradient=0.57f; -} - -/** -* resize retina color filter object (resize all allocated buffers) -* @param NBrows: the new height size -* @param NBcolumns: the new width size -*/ -void RetinaColor::resize(const unsigned int NBrows, const unsigned int NBcolumns) -{ - BasicRetinaFilter::clearAllBuffers(); - _colorSampling.resize(NBrows*NBcolumns); - _RGBmosaic.resize(NBrows*NBcolumns*3); - _tempMultiplexedFrame.resize(NBrows*NBcolumns); - _demultiplexedTempBuffer.resize(NBrows*NBcolumns*3); - _demultiplexedColorFrame.resize(NBrows*NBcolumns*3); - _chrominance.resize(NBrows*NBcolumns*3); - _colorLocalDensity.resize(NBrows*NBcolumns*3); - _imageGradient.resize(NBrows*NBcolumns*2); - - // link to parent buffers (let's recycle !) - _luminance=&_filterOutput; - _multiplexedFrame=&_localBuffer; - - // init color sampling map - _initColorSampling(); - - // clean buffers - clearAllBuffers(); -} - - -void RetinaColor::_initColorSampling() -{ - - // filling the conversion table for multiplexed <=> demultiplexed frame - srand((unsigned)time(NULL)); - - // preInit cones probabilities - _pR=_pB=_pG=0; - switch (_samplingMethod) - { - case RETINA_COLOR_RANDOM: - for (unsigned int index=0 ; indexgetNBpixels(); ++index) - { - - // random RGB sampling - unsigned int colorIndex=rand()%24; - - if (colorIndex<8){ - colorIndex=0; - - ++_pR; - }else - { - if (colorIndex<21){ - colorIndex=1; - ++_pG; - }else{ - colorIndex=2; - ++_pB; - } - } - _colorSampling[index] = colorIndex*this->getNBpixels()+index; - } - _pR/=(float)this->getNBpixels(); - _pG/=(float)this->getNBpixels(); - _pB/=(float)this->getNBpixels(); - std::cout<<"Color channels proportions: pR, pG, pB= "<<_pR<<", "<<_pG<<", "<<_pB<<", "<getNBpixels(); ++index) - { - _colorSampling[index] = index+((index%3+(index%_filterOutput.getNBcolumns()))%3)*_filterOutput.getNBpixels(); - } - _pR=_pB=_pG=1.f/3; - break; - case RETINA_COLOR_BAYER: // default sets bayer sampling - for (unsigned int index=0 ; index<_filterOutput.getNBpixels(); ++index) - { - //First line: R G R G - _colorSampling[index] = index+((index/_filterOutput.getNBcolumns())%2)*_filterOutput.getNBpixels()+((index%_filterOutput.getNBcolumns())%2)*_filterOutput.getNBpixels(); - //First line: G R G R - //_colorSampling[index] = 3*index+((index/_filterOutput.getNBcolumns())%2)+((index%_filterOutput.getNBcolumns()+1)%2); - } - _pR=_pB=0.25; - _pG=0.5; - break; - default: -#ifdef RETINACOLORDEBUG - std::cerr<<"RetinaColor::No or wrong color sampling method, skeeping"< &multiplexedColorFrame, const bool adaptiveFiltering, const float maxInputValue) -{ - // demultiplex the grey frame to RGB frame - // -> first set demultiplexed frame to 0 - _demultiplexedTempBuffer=0; - // -> demultiplex process - register unsigned int *colorSamplingPRT=&_colorSampling[0]; - register const float *multiplexedColorFramePtr=get_data(multiplexedColorFrame); - for (unsigned int indexa=0; indexa<_filterOutput.getNBpixels() ; ++indexa) - _demultiplexedTempBuffer[*(colorSamplingPRT++)]=*(multiplexedColorFramePtr++); - - // interpolate the demultiplexed frame depending on the color sampling method - if (!adaptiveFiltering) - _interpolateImageDemultiplexedImage(&_demultiplexedTempBuffer[0]); - - // low pass filtering the demultiplexed frame - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0], &_chrominance[0]); - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getNBpixels(), &_chrominance[0]+_filterOutput.getNBpixels()); - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getDoubleNBpixels(), &_chrominance[0]+_filterOutput.getDoubleNBpixels()); - - /*if (_samplingMethod=BAYER) - { - _applyRIFfilter(_chrominance, _chrominance); - _applyRIFfilter(_chrominance+_filterOutput.getNBpixels(), _chrominance+_filterOutput.getNBpixels()); - _applyRIFfilter(_chrominance+_filterOutput.getDoubleNBpixels(), _chrominance+_filterOutput.getDoubleNBpixels()); - }*/ - - // normalize by the photoreceptors local density and retrieve the local luminance - register float *chrominancePTR= &_chrominance[0]; - register float *colorLocalDensityPTR= &_colorLocalDensity[0]; - register float *luminance= &(*_luminance)[0]; - if (!adaptiveFiltering)// compute the gradient on the luminance - { - if (_samplingMethod==RETINA_COLOR_RANDOM) - for (unsigned int indexc=0; indexc<_filterOutput.getNBpixels() ; ++indexc, ++chrominancePTR, ++colorLocalDensityPTR, ++luminance) - { - // normalize by photoreceptors density - float Cr=*(chrominancePTR)*_colorLocalDensity[indexc]; - float Cg=*(chrominancePTR+_filterOutput.getNBpixels())*_colorLocalDensity[indexc+_filterOutput.getNBpixels()]; - float Cb=*(chrominancePTR+_filterOutput.getDoubleNBpixels())*_colorLocalDensity[indexc+_filterOutput.getDoubleNBpixels()]; - *luminance=(Cr+Cg+Cb)*_pG; - *(chrominancePTR)=Cr-*luminance; - *(chrominancePTR+_filterOutput.getNBpixels())=Cg-*luminance; - *(chrominancePTR+_filterOutput.getDoubleNBpixels())=Cb-*luminance; - } - else - for (unsigned int indexc=0; indexc<_filterOutput.getNBpixels() ; ++indexc, ++chrominancePTR, ++colorLocalDensityPTR, ++luminance) - { - float Cr=*(chrominancePTR); - float Cg=*(chrominancePTR+_filterOutput.getNBpixels()); - float Cb=*(chrominancePTR+_filterOutput.getDoubleNBpixels()); - *luminance=_pR*Cr+_pG*Cg+_pB*Cb; - *(chrominancePTR)=Cr-*luminance; - *(chrominancePTR+_filterOutput.getNBpixels())=Cg-*luminance; - *(chrominancePTR+_filterOutput.getDoubleNBpixels())=Cb-*luminance; - } - - // in order to get the color image, each colored map needs to be added the luminance - // -> to do so, compute: multiplexedColorFrame - remultiplexed chrominances - runColorMultiplexing(_chrominance, _tempMultiplexedFrame); - //lum = 1/3((f*(ImR))/(f*mR) + (f*(ImG))/(f*mG) + (f*(ImB))/(f*mB)); - float *luminancePTR= &(*_luminance)[0]; - chrominancePTR= &_chrominance[0]; - float *demultiplexedColorFramePTR= &_demultiplexedColorFrame[0]; - for (unsigned int indexp=0; indexp<_filterOutput.getNBpixels() ; ++indexp, ++luminancePTR, ++chrominancePTR, ++demultiplexedColorFramePTR) - { - *luminancePTR=(multiplexedColorFrame[indexp]-_tempMultiplexedFrame[indexp]); - *(demultiplexedColorFramePTR)=*(chrominancePTR)+*luminancePTR; - *(demultiplexedColorFramePTR+_filterOutput.getNBpixels())=*(chrominancePTR+_filterOutput.getNBpixels())+*luminancePTR; - *(demultiplexedColorFramePTR+_filterOutput.getDoubleNBpixels())=*(chrominancePTR+_filterOutput.getDoubleNBpixels())+*luminancePTR; - } - - }else - { - register const float *multiplexedColorFramePTR= get_data(multiplexedColorFrame); - for (unsigned int indexc=0; indexc<_filterOutput.getNBpixels() ; ++indexc, ++chrominancePTR, ++colorLocalDensityPTR, ++luminance, ++multiplexedColorFramePTR) - { - // normalize by photoreceptors density - float Cr=*(chrominancePTR)*_colorLocalDensity[indexc]; - float Cg=*(chrominancePTR+_filterOutput.getNBpixels())*_colorLocalDensity[indexc+_filterOutput.getNBpixels()]; - float Cb=*(chrominancePTR+_filterOutput.getDoubleNBpixels())*_colorLocalDensity[indexc+_filterOutput.getDoubleNBpixels()]; - *luminance=(Cr+Cg+Cb)*_pG; - _demultiplexedTempBuffer[_colorSampling[indexc]] = *multiplexedColorFramePTR - *luminance; - - } - - // compute the gradient of the luminance - _computeGradient(&(*_luminance)[0]); - - // adaptively filter the submosaics to get the adaptive densities, here the buffer _chrominance is used as a temp buffer - _adaptiveSpatialLPfilter(&_RGBmosaic[0], &_chrominance[0]); - _adaptiveSpatialLPfilter(&_RGBmosaic[0]+_filterOutput.getNBpixels(), &_chrominance[0]+_filterOutput.getNBpixels()); - _adaptiveSpatialLPfilter(&_RGBmosaic[0]+_filterOutput.getDoubleNBpixels(), &_chrominance[0]+_filterOutput.getDoubleNBpixels()); - - _adaptiveSpatialLPfilter(&_demultiplexedTempBuffer[0], &_demultiplexedColorFrame[0]); - _adaptiveSpatialLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getNBpixels(), &_demultiplexedColorFrame[0]+_filterOutput.getNBpixels()); - _adaptiveSpatialLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getDoubleNBpixels(), &_demultiplexedColorFrame[0]+_filterOutput.getDoubleNBpixels()); - -/* for (unsigned int index=0; index<_filterOutput.getNBpixels()*3 ; ++index) // cette boucle pourrait �tre supprimee en passant la densit� � la fonction de filtrage - _demultiplexedColorFrame[index] /= _chrominance[index];*/ - _demultiplexedColorFrame/=_chrominance; // more optimal ;o) - - // compute and substract the residual luminance - for (unsigned int index=0; index<_filterOutput.getNBpixels() ; ++index) - { - float residu = _pR*_demultiplexedColorFrame[index] + _pG*_demultiplexedColorFrame[index+_filterOutput.getNBpixels()] + _pB*_demultiplexedColorFrame[index+_filterOutput.getDoubleNBpixels()]; - _demultiplexedColorFrame[index] = _demultiplexedColorFrame[index] - residu; - _demultiplexedColorFrame[index+_filterOutput.getNBpixels()] = _demultiplexedColorFrame[index+_filterOutput.getNBpixels()] - residu; - _demultiplexedColorFrame[index+_filterOutput.getDoubleNBpixels()] = _demultiplexedColorFrame[index+_filterOutput.getDoubleNBpixels()] - residu; - } - - // multiplex the obtained chrominance - runColorMultiplexing(_demultiplexedColorFrame, _tempMultiplexedFrame); - _demultiplexedTempBuffer=0; - - // get the luminance, et and add it to each chrominance - for (unsigned int index=0; index<_filterOutput.getNBpixels() ; ++index) - { - (*_luminance)[index]=multiplexedColorFrame[index]-_tempMultiplexedFrame[index]; - _demultiplexedTempBuffer[_colorSampling[index]] = _demultiplexedColorFrame[_colorSampling[index]];//multiplexedColorFrame[index] - (*_luminance)[index]; - } - - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0], &_demultiplexedTempBuffer[0]); - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getNBpixels(), &_demultiplexedTempBuffer[0]+_filterOutput.getNBpixels()); - _spatiotemporalLPfilter(&_demultiplexedTempBuffer[0]+_filterOutput.getDoubleNBpixels(), &_demultiplexedTempBuffer[0]+_filterOutput.getDoubleNBpixels()); - - // get the luminance and add it to each chrominance - for (unsigned int index=0; index<_filterOutput.getNBpixels() ; ++index) - { - _demultiplexedColorFrame[index] = _demultiplexedTempBuffer[index]*_colorLocalDensity[index]+ (*_luminance)[index]; - _demultiplexedColorFrame[index+_filterOutput.getNBpixels()] = _demultiplexedTempBuffer[index+_filterOutput.getNBpixels()]*_colorLocalDensity[index+_filterOutput.getNBpixels()]+ (*_luminance)[index]; - _demultiplexedColorFrame[index+_filterOutput.getDoubleNBpixels()] = _demultiplexedTempBuffer[index+_filterOutput.getDoubleNBpixels()]*_colorLocalDensity[index+_filterOutput.getDoubleNBpixels()]+ (*_luminance)[index]; - } - } - - // eliminate saturated colors by simple clipping values to the input range - clipRGBOutput_0_maxInputValue(NULL, maxInputValue); - - /* transfert image gradient in order to check validity - memcpy((*_luminance), _imageGradient, sizeof(float)*_filterOutput.getNBpixels()); - memcpy(_demultiplexedColorFrame, _imageGradient+_filterOutput.getNBpixels(), sizeof(float)*_filterOutput.getNBpixels()); - memcpy(_demultiplexedColorFrame+_filterOutput.getNBpixels(), _imageGradient+_filterOutput.getNBpixels(), sizeof(float)*_filterOutput.getNBpixels()); - memcpy(_demultiplexedColorFrame+2*_filterOutput.getNBpixels(), _imageGradient+_filterOutput.getNBpixels(), sizeof(float)*_filterOutput.getNBpixels()); - */ - - if (_saturateColors) - { - TemplateBuffer::normalizeGrayOutputCentredSigmoide(128, _colorSaturationValue, maxInputValue, &_demultiplexedColorFrame[0], &_demultiplexedColorFrame[0], _filterOutput.getNBpixels()); - TemplateBuffer::normalizeGrayOutputCentredSigmoide(128, _colorSaturationValue, maxInputValue, &_demultiplexedColorFrame[0]+_filterOutput.getNBpixels(), &_demultiplexedColorFrame[0]+_filterOutput.getNBpixels(), _filterOutput.getNBpixels()); - TemplateBuffer::normalizeGrayOutputCentredSigmoide(128, _colorSaturationValue, maxInputValue, &_demultiplexedColorFrame[0]+_filterOutput.getNBpixels()*2, &_demultiplexedColorFrame[0]+_filterOutput.getNBpixels()*2, _filterOutput.getNBpixels()); - } -} - -// color multiplexing: input frame size=_NBrows*_filterOutput.getNBcolumns()*3, multiplexedFrame output size=_NBrows*_filterOutput.getNBcolumns() -void RetinaColor::runColorMultiplexing(const std::valarray &demultiplexedInputFrame, std::valarray &multiplexedFrame) -{ - // multiply each color layer by its bayer mask - register unsigned int *colorSamplingPTR= &_colorSampling[0]; - register float *multiplexedFramePTR= &multiplexedFrame[0]; - for (unsigned int indexp=0; indexp<_filterOutput.getNBpixels(); ++indexp) - *(multiplexedFramePTR++)=demultiplexedInputFrame[*(colorSamplingPTR++)]; -} - -void RetinaColor::normalizeRGBOutput_0_maxOutputValue(const float maxOutputValue) -{ - //normalizeGrayOutputCentredSigmoide(0.0, 2, _chrominance); - TemplateBuffer::normalizeGrayOutput_0_maxOutputValue(&_demultiplexedColorFrame[0], 3*_filterOutput.getNBpixels(), maxOutputValue); - //normalizeGrayOutputCentredSigmoide(0.0, 2, _chrominance+_filterOutput.getNBpixels()); - //normalizeGrayOutput_0_maxOutputValue(_demultiplexedColorFrame+_filterOutput.getNBpixels(), _filterOutput.getNBpixels(), maxOutputValue); - //normalizeGrayOutputCentredSigmoide(0.0, 2, _chrominance+2*_filterOutput.getNBpixels()); - //normalizeGrayOutput_0_maxOutputValue(_demultiplexedColorFrame+_filterOutput.getDoubleNBpixels(), _filterOutput.getNBpixels(), maxOutputValue); - TemplateBuffer::normalizeGrayOutput_0_maxOutputValue(&(*_luminance)[0], _filterOutput.getNBpixels(), maxOutputValue); -} - -/// normalize output between 0 and maxOutputValue; -void RetinaColor::clipRGBOutput_0_maxInputValue(float *inputOutputBuffer, const float maxInputValue) -{ - //std::cout<<"RetinaColor::normalizing RGB frame..."<(inputOutputBuffer, 0, maxInputValue)); -#else - register float *inputOutputBufferPTR=inputOutputBuffer; - for (register unsigned int jf = 0; jf < _filterOutput.getNBpixels()*3; ++jf, ++inputOutputBufferPTR) - { - if (*inputOutputBufferPTR>maxInputValue) - *inputOutputBufferPTR=maxInputValue; - else if (*inputOutputBufferPTR<0) - *inputOutputBufferPTR=0; - } -#endif - //std::cout<<"RetinaColor::...normalizing RGB frame OK"<maxValue) - maxValue=outputFrame[index]; - } - } - normalisationFactor=1.f/maxValue; - // normalisation [0, 1] - for (unsigned int indexp=1 ; indexp<_filterOutput.getNBrows()-1; ++indexp) - outputFrame[indexp]=outputFrame[indexp]*normalisationFactor; -} - -////////////////////////////////////////////////////////// -// ADAPTIVE BASIC RETINA FILTER -////////////////////////////////////////////////////////// -// run LP filter for a new frame input and save result at a specific output adress -void RetinaColor::_adaptiveSpatialLPfilter(const float *inputFrame, float *outputFrame) -{ - - /**********/ - _gain = (1-0.57f)*(1-0.57f)*(1-0.06f)*(1-0.06f); - - // launch the serie of 1D directional filters in order to compute the 2D low pass filter - // -> horizontal filters work with the first layer of imageGradient - _adaptiveHorizontalCausalFilter_addInput(inputFrame, outputFrame, 0, _filterOutput.getNBrows()); - _horizontalAnticausalFilter_Irregular(outputFrame, 0, _filterOutput.getNBrows(), &_imageGradient[0]); - // -> horizontal filters work with the second layer of imageGradient - _verticalCausalFilter_Irregular(outputFrame, 0, _filterOutput.getNBcolumns(), &_imageGradient[0]+_filterOutput.getNBpixels()); - _adaptiveVerticalAnticausalFilter_multGain(outputFrame, 0, _filterOutput.getNBcolumns()); -} - -// horizontal causal filter which adds the input inside... replaces the parent _horizontalCausalFilter_Irregular_addInput by avoiding a product for each pixel -void RetinaColor::_adaptiveHorizontalCausalFilter_addInput(const float *inputFrame, float *outputFrame, unsigned int IDrowStart, unsigned int IDrowEnd) -{ -#ifdef MAKE_PARALLEL - cv::parallel_for_(cv::Range(IDrowStart,IDrowEnd), Parallel_adaptiveHorizontalCausalFilter_addInput(inputFrame, outputFrame, &_imageGradient[0], _filterOutput.getNBcolumns())); -#else - register float* outputPTR=outputFrame+IDrowStart*_filterOutput.getNBcolumns(); - register const float* inputPTR=inputFrame+IDrowStart*_filterOutput.getNBcolumns(); - register const float *imageGradientPTR= &_imageGradient[0]+IDrowStart*_filterOutput.getNBcolumns(); - for (unsigned int IDrow=IDrowStart; IDrow &result) -{ - bool processSuccess=true; - // basic preliminary error check - if (result.size()!=_demultiplexedColorFrame.size()) - { - std::cerr<<"RetinaColor::applyKrauskopfLMS2Acr1cr2Transform: input buffer does not match retina buffer size, conversion aborted"< &result) -{ - bool processSuccess=true; - // basic preliminary error check - if (result.size()!=_demultiplexedColorFrame.size()) - { - std::cerr<<"RetinaColor::applyKrauskopfLMS2Acr1cr2Transform: input buffer does not match retina buffer size, conversion aborted"< &inputFrameBuffer, std::valarray &outputFrameBuffer, const float *transformTable) -{ - // two step methods in order to allow inputFrame and outputFrame to be the same - unsigned int nbPixels=(unsigned int)(inputFrameBuffer.size()/3), dbpixels=(unsigned int)(2*inputFrameBuffer.size()/3); - - const float *inputFrame=get_data(inputFrameBuffer); - float *outputFrame= &outputFrameBuffer[0]; - - for (unsigned int dataIndex=0; dataIndex B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (including negligence or otherwise) arising in any way out of -** the use of this software, even if advised of the possibility of such damage. -*******************************************************************************/ - -/** -* @class RetinaColor a color multilexing/demultiplexing (demosaicing) based on a human vision inspiration. Different mosaicing strategies can be used, included random sampling ! -* => please take a look at the nice and efficient demosaicing strategy introduced by B.Chaix de Lavarene, take a look at the cited paper for more mathematical details -* @brief Retina color sampling model which allows classical bayer sampling, random and potentially several other method ! Low color errors on corners ! -* -> Based on the research of: -* .Brice Chaix Lavarene (chaix@lis.inpg.fr) -* .Jeanny Herault (herault@lis.inpg.fr) -* .David Alleyson (david.alleyson@upmf-grenoble.fr) -* .collaboration: alexandre benoit (benoit.alexandre.vision@gmail.com or benoit@lis.inpg.fr) -* Please cite: B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC / Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -*/ - -#ifndef RETINACOLOR_HPP_ -#define RETINACOLOR_HPP_ - -#include "basicretinafilter.hpp" - -//#define __RETINACOLORDEBUG //define RETINACOLORDEBUG in order to display debug data - -namespace cv -{ - - class RetinaColor: public BasicRetinaFilter - { - public: - /** - * @typedef which allows to select the type of photoreceptors color sampling - */ - - /** - * constructor of the retina color processing model - * @param NBrows: number of rows of the input image - * @param NBcolumns: number of columns of the input image - * @param samplingMethod: the chosen color sampling method - */ - RetinaColor(const unsigned int NBrows, const unsigned int NBcolumns, const RETINA_COLORSAMPLINGMETHOD samplingMethod=RETINA_COLOR_DIAGONAL); - - /** - * standard destructor - */ - virtual ~RetinaColor(); - - /** - * function that clears all buffers of the object - */ - void clearAllBuffers(); - - /** - * resize retina color filter object (resize all allocated buffers) - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - - /** - * color multiplexing function: a demultiplexed RGB frame of size M*N*3 is transformed into a multiplexed M*N*1 pixels frame where each pixel is either Red, or Green or Blue - * @param inputRGBFrame: the input RGB frame to be processed - * @return, nothing but the multiplexed frame is available by the use of the getMultiplexedFrame() function - */ - inline void runColorMultiplexing(const std::valarray &inputRGBFrame){runColorMultiplexing(inputRGBFrame, *_multiplexedFrame);}; - - /** - * color multiplexing function: a demultipleed RGB frame of size M*N*3 is transformed into a multiplexed M*N*1 pixels frame where each pixel is either Red, or Green or Blue if using RGB images - * @param demultiplexedInputFrame: the demultiplexed input frame to be processed of size M*N*3 - * @param multiplexedFrame: the resulting multiplexed frame - */ - void runColorMultiplexing(const std::valarray &demultiplexedInputFrame, std::valarray &multiplexedFrame); - - /** - * color demultiplexing function: a multiplexed frame of size M*N*1 pixels is transformed into a RGB demultiplexed M*N*3 pixels frame - * @param multiplexedColorFrame: the input multiplexed frame to be processed - * @param adaptiveFiltering: specifies if an adaptive filtering has to be perform rather than standard filtering (adaptive filtering allows a better rendering) - * @param maxInputValue: the maximum input data value (should be 255 for 8 bits images but it can change in the case of High Dynamic Range Images (HDRI) - * @return, nothing but the output demultiplexed frame is available by the use of the getDemultiplexedColorFrame() function, also use getLuminance() and getChrominance() in order to retreive either luminance or chrominance - */ - void runColorDemultiplexing(const std::valarray &multiplexedColorFrame, const bool adaptiveFiltering=false, const float maxInputValue=255.0); - - /** - * activate color saturation as the final step of the color demultiplexing process - * -> this saturation is a sigmoide function applied to each channel of the demultiplexed image. - * @param saturateColors: boolean that activates color saturation (if true) or desactivate (if false) - * @param colorSaturationValue: the saturation factor - * */ - void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0){_saturateColors=saturateColors; _colorSaturationValue=colorSaturationValue;}; - - /** - * set parameters of the low pass spatio-temporal filter used to retreive the low chrominance - * @param beta: gain of the filter (generally set to zero) - * @param tau: time constant of the filter (unit is frame for video processing), typically 0 when considering static processing, 1 or more if a temporal smoothing effect is required - * @param k: spatial constant of the filter (unit is pixels), typical value is 2.5 - */ - void setChrominanceLPfilterParameters(const float beta, const float tau, const float k){setLPfilterParameters(beta, tau, k);}; - - /** - * apply to the retina color output the Krauskopf transformation which leads to an opponent color system: output colorspace if Acr1cr2 if input of the retina was LMS color space - * @param result: the input buffer to fill with the transformed colorspace retina output - * @return true if process ended successfully - */ - bool applyKrauskopfLMS2Acr1cr2Transform(std::valarray &result); - - /** - * apply to the retina color output the CIE Lab color transformation - * @param result: the input buffer to fill with the transformed colorspace retina output - * @return true if process ended successfully - */ - bool applyLMS2LabTransform(std::valarray &result); - - /** - * @return the multiplexed frame result (use this after function runColorMultiplexing) - */ - inline const std::valarray &getMultiplexedFrame() const {return *_multiplexedFrame;}; - - /** - * @return the demultiplexed frame result (use this after function runColorDemultiplexing) - */ - inline const std::valarray &getDemultiplexedColorFrame() const {return _demultiplexedColorFrame;}; - - /** - * @return the luminance of the processed frame (use this after function runColorDemultiplexing) - */ - inline const std::valarray &getLuminance() const {return *_luminance;}; - - /** - * @return the chrominance of the processed frame (use this after function runColorDemultiplexing) - */ - inline const std::valarray &getChrominance() const {return _chrominance;}; - - /** - * standard 0 to 255 image clipping function appled to RGB images (of size M*N*3 pixels) - * @param inputOutputBuffer: the image to be normalized (rewrites the input), if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param maxOutputValue: the maximum value allowed at the output (values superior to it would be clipped - */ - void clipRGBOutput_0_maxInputValue(float *inputOutputBuffer, const float maxOutputValue=255.0); - - /** - * standard 0 to 255 image normalization function appled to RGB images (of size M*N*3 pixels) - * @param maxOutputValue: the maximum value allowed at the output (values superior to it would be clipped - */ - void normalizeRGBOutput_0_maxOutputValue(const float maxOutputValue=255.0); - - /** - * return the color sampling map: a Nrows*Mcolumns image in which each pixel value is the ofsset adress which gives the adress of the sampled pixel on an Nrows*Mcolumns*3 color image ordered by layers: layer1, layer2, layer3 - */ - inline const std::valarray &getSamplingMap() const {return _colorSampling;}; - - /** - * function used (to bypass processing) to manually set the color output - * @param demultiplexedImage: the color image (luminance+chrominance) which has to be written in the object buffer - */ - inline void setDemultiplexedColorFrame(const std::valarray &demultiplexedImage){_demultiplexedColorFrame=demultiplexedImage;}; - - protected: - - // private functions - RETINA_COLORSAMPLINGMETHOD _samplingMethod; - bool _saturateColors; - float _colorSaturationValue; - // links to parent buffers (more convienient names - TemplateBuffer *_luminance; - std::valarray *_multiplexedFrame; - // instance buffers - std::valarray _colorSampling; // table (size (_nbRows*_nbColumns) which specifies the color of each pixel - std::valarray _RGBmosaic; - std::valarray _tempMultiplexedFrame; - std::valarray _demultiplexedTempBuffer; - std::valarray _demultiplexedColorFrame; - std::valarray _chrominance; - std::valarray _colorLocalDensity;// buffer which contains the local density of the R, G and B photoreceptors for a normalization use - std::valarray _imageGradient; - - // variables - float _pR, _pG, _pB; // probabilities of color R, G and B - bool _objectInit; - - // protected functions - void _initColorSampling(); - void _interpolateImageDemultiplexedImage(float *inputOutputBuffer); - void _interpolateSingleChannelImage111(float *inputOutputBuffer); - void _interpolateBayerRGBchannels(float *inputOutputBuffer); - void _applyRIFfilter(const float *sourceBuffer, float *destinationBuffer); - void _getNormalizedContoursImage(const float *inputFrame, float *outputFrame); - // -> special adaptive filters dedicated to low pass filtering on the chrominance (skeeps filtering on the edges) - void _adaptiveSpatialLPfilter(const float *inputFrame, float *outputFrame); - void _adaptiveHorizontalCausalFilter_addInput(const float *inputFrame, float *outputFrame, const unsigned int IDrowStart, const unsigned int IDrowEnd); // TBB parallelized - void _adaptiveVerticalAnticausalFilter_multGain(float *outputFrame, const unsigned int IDcolumnStart, const unsigned int IDcolumnEnd); - void _computeGradient(const float *luminance); - void _normalizeOutputs_0_maxOutputValue(void); - - // color space transform - void _applyImageColorSpaceConversion(const std::valarray &inputFrame, std::valarray &outputFrame, const float *transformTable); - -#ifdef MAKE_PARALLEL - /****************************************************** - ** IF some parallelizing thread methods are available, then, main loops are parallelized using these functors - ** ==> main idea parallelize main filters loops, then, only the most used methods are parallelized... TODO : increase the number of parallelized methods as necessary - ** ==> functors names = Parallel_$$$ where $$$= the name of the serial method that is parallelized - ** ==> functors constructors can differ from the parameters used with their related serial functions - */ - - /* Template : - class Parallel_ : public cv::ParallelLoopBody - { - private: - - public: - Parallel_() - : {} - - virtual void operator()( const cv::Range& r ) const { - - } - }: - */ - class Parallel_adaptiveHorizontalCausalFilter_addInput: public cv::ParallelLoopBody - { - private: - float *outputFrame; - const float *inputFrame, *imageGradient; - unsigned int nbColumns; - public: - Parallel_adaptiveHorizontalCausalFilter_addInput(const float *inputImg, float *bufferToProcess, const float *imageGrad, const unsigned int nbCols) - :outputFrame(bufferToProcess), inputFrame(inputImg), imageGradient(imageGrad), nbColumns(nbCols) {}; - - virtual void operator()( const Range& r ) const { - register float* outputPTR=outputFrame+r.start*nbColumns; - register const float* inputPTR=inputFrame+r.start*nbColumns; - register const float *imageGradientPTR= imageGradient+r.start*nbColumns; - for (int IDrow=r.start; IDrow!=r.end; ++IDrow) - { - register float result=0; - for (unsigned int index=0; index B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 "precomp.hpp" - -#include "retinafilter.hpp" - -// @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC : www.listic.univ-savoie.fr, Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ - -#include -#include - -namespace cv -{ - // standard constructor without any log sampling of the input frame - RetinaFilter::RetinaFilter(const unsigned int sizeRows, const unsigned int sizeColumns, const bool colorMode, const RETINA_COLORSAMPLINGMETHOD samplingMethod, const bool useRetinaLogSampling, const double reductionFactor, const double samplingStrenght) - : - _retinaParvoMagnoMappedFrame(0), - _retinaParvoMagnoMapCoefTable(0), - _photoreceptorsPrefilter((1-(int)useRetinaLogSampling)*sizeRows+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeRows, reductionFactor), (1-(int)useRetinaLogSampling)*sizeColumns+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeColumns, reductionFactor), 4), - _ParvoRetinaFilter((1-(int)useRetinaLogSampling)*sizeRows+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeRows, reductionFactor), (1-(int)useRetinaLogSampling)*sizeColumns+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeColumns, reductionFactor)), - _MagnoRetinaFilter((1-(int)useRetinaLogSampling)*sizeRows+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeRows, reductionFactor), (1-(int)useRetinaLogSampling)*sizeColumns+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeColumns, reductionFactor)), - _colorEngine((1-(int)useRetinaLogSampling)*sizeRows+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeRows, reductionFactor), (1-(int)useRetinaLogSampling)*sizeColumns+useRetinaLogSampling*ImageLogPolProjection::predictOutputSize(sizeColumns, reductionFactor), samplingMethod), - // configure retina photoreceptors log sampling... if necessary - _photoreceptorsLogSampling(NULL) - { - -#ifdef RETINADEBUG - std::cout<<"RetinaFilter::size( "<<_photoreceptorsPrefilter.getNBrows()<<", "<<_photoreceptorsPrefilter.getNBcolumns()<<")"<<" =? "<<_photoreceptorsPrefilter.getNBpixels()<initProjection(reductionFactor, samplingStrenght)) - { - std::cerr<<"RetinaFilter::Problem initializing photoreceptors log sampling, could not setup retina filter"<getNBrows()<<", "<<_photoreceptorsLogSampling->getNBcolumns()<<")"<<" =? "<<_photoreceptorsLogSampling->getNBpixels()<getNBrows()<<", "<getNBcolumns()<<")"<<_filterOutput.size()<<" =? "<<_filterOutput.getNBpixels()<clearAllBuffers(); - // stability controls value init - _setInitPeriodCount(); - } - - /** - * resize retina filter object (resize all allocated buffers - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void RetinaFilter::resize(const unsigned int NBrows, const unsigned int NBcolumns) - { - unsigned int rows=NBrows, cols=NBcolumns; - - // resize optionnal member and adjust other modules size if required - if (_photoreceptorsLogSampling) - { - _photoreceptorsLogSampling->resize(NBrows, NBcolumns); - rows=_photoreceptorsLogSampling->getOutputNBrows(); - cols=_photoreceptorsLogSampling->getOutputNBcolumns(); - } - - _photoreceptorsPrefilter.resize(rows, cols); - _ParvoRetinaFilter.resize(rows, cols); - _MagnoRetinaFilter.resize(rows, cols); - _colorEngine.resize(rows, cols); - - // reset parvo magno mapping - _createHybridTable(); - - // clean buffers - clearAllBuffers(); - - } - - // stability controls value init - void RetinaFilter::_setInitPeriodCount() - { - - // find out the maximum temporal constant value and apply a security factor - // false value (obviously too long) but appropriate for simple use - _globalTemporalConstant=(unsigned int)(_ParvoRetinaFilter.getPhotoreceptorsTemporalConstant()+_ParvoRetinaFilter.getHcellsTemporalConstant()+_MagnoRetinaFilter.getTemporalConstant()); - // reset frame counter - _ellapsedFramesSinceLastReset=0; - } - - void RetinaFilter::_createHybridTable() - { - // create hybrid output and related coefficient table - _retinaParvoMagnoMappedFrame.resize(_photoreceptorsPrefilter.getNBpixels()); - - _retinaParvoMagnoMapCoefTable.resize(_photoreceptorsPrefilter.getNBpixels()*2); - - // fill _hybridParvoMagnoCoefTable - int i, j, halfRows=_photoreceptorsPrefilter.getNBrows()/2, halfColumns=_photoreceptorsPrefilter.getNBcolumns()/2; - float *hybridParvoMagnoCoefTablePTR= &_retinaParvoMagnoMapCoefTable[0]; - float minDistance=MIN(halfRows, halfColumns)*0.7f; - for (i=0;i<(int)_photoreceptorsPrefilter.getNBrows();++i) - { - for (j=0;j<(int)_photoreceptorsPrefilter.getNBcolumns();++j) - { - float distanceToCenter=sqrt(((float)(i-halfRows)*(i-halfRows)+(j-halfColumns)*(j-halfColumns))); - if (distanceToCentersetV0CompressionParameter(0.6, maxInputValue, meanValue); // keeps log compression sensitivity parameter (usefull for the tone mapping function) - _ParvoRetinaFilter.setOPLandParvoFiltersParameters(0,OPLtemporalresponse1, OPLspatialResponse1, OPLassymetryGain, OPLtemporalresponse2, OPLspatialResponse2); - _ParvoRetinaFilter.setV0CompressionParameter(0.9f, maxInputValue, meanValue); - _MagnoRetinaFilter.setCoefficientsTable(LPfilterGain, LPfilterTemporalresponse, LPfilterSpatialResponse, MovingContoursExtractorCoefficient, 0, 2.0f*LPfilterSpatialResponse); - _MagnoRetinaFilter.setV0CompressionParameter(0.7f, maxInputValue, meanValue); - - // stability controls value init - _setInitPeriodCount(); - } - - bool RetinaFilter::checkInput(const std::valarray &input, const bool) - { - - BasicRetinaFilter *inputTarget=&_photoreceptorsPrefilter; - if (_photoreceptorsLogSampling) - inputTarget=_photoreceptorsLogSampling; - - bool test=input.size()==inputTarget->getNBpixels() || input.size()==(inputTarget->getNBpixels()*3) ; - if (!test) - { - std::cerr<<"RetinaFilter::checkInput: input buffer does not match retina buffer size, conversion aborted"< &bufferInput=checkInput(LMSimageInput, true); - if (!bufferInput) - return NULL; - - if (!_useColorMode) - std::cerr<<"RetinaFilter::Can not call tone mapping oeration if the retina filter was created for gray scale images"< lmsTempBuffer(LMSimageInput); - std::cout<<"RetinaFilter::--->min LMS value="<L - _spatiotemporalLPfilter(LMSimageInput, _filterOutput, 1); - setV0CompressionParameterToneMapping(PhotoreceptorsCompression, _maxInputValue, this->sum()/_NBpixels); - _localLuminanceAdaptation(LMSimageInput, _filterOutput, lmsTempBuffer.Buffer()); - // ->M - _spatiotemporalLPfilter(LMSimageInput+_NBpixels, _filterOutput, 1); - setV0CompressionParameterToneMapping(PhotoreceptorsCompression, _maxInputValue, this->sum()/_NBpixels); - _localLuminanceAdaptation(LMSimageInput+_NBpixels, _filterOutput, lmsTempBuffer.Buffer()+_NBpixels); - // ->S - _spatiotemporalLPfilter(LMSimageInput+_NBpixels*2, _filterOutput, 1); - setV0CompressionParameterToneMapping(PhotoreceptorsCompression, _maxInputValue, this->sum()/_NBpixels); - _localLuminanceAdaptation(LMSimageInput+_NBpixels*2, _filterOutput, lmsTempBuffer.Buffer()+_NBpixels*2); - - // eliminate negative values - for (unsigned int i=0;imin LMS value="< acr1cr2TempBuffer(_NBrows, _NBcolumns, 3); - memcpy(acr1cr2TempBuffer.Buffer(), lmsTempBuffer.Buffer(), sizeof(float)*_NBpixels*3); - - // compute A Cr1 Cr2 to LMS color space conversion - _applyImageColorSpaceConversion(acr1cr2TempBuffer.Buffer(), lmsTempBuffer.Buffer(), _ACr1Cr2toLMS); - - // eliminate negative values - for (unsigned int i=0;isetDemultiplexedColorFrame(lmsTempBuffer.Buffer()); - */ - } - - // return image with center Parvo and peripheral Magno channels - void RetinaFilter::_processRetinaParvoMagnoMapping() - { - register float *hybridParvoMagnoPTR= &_retinaParvoMagnoMappedFrame[0]; - register const float *parvoOutputPTR= get_data(_ParvoRetinaFilter.getOutput()); - register const float *magnoXOutputPTR= get_data(_MagnoRetinaFilter.getOutput()); - register float *hybridParvoMagnoCoefTablePTR= &_retinaParvoMagnoMapCoefTable[0]; - - for (unsigned int i=0 ; i<_photoreceptorsPrefilter.getNBpixels() ; ++i, hybridParvoMagnoCoefTablePTR+=2) - { - float hybridValue=*(parvoOutputPTR++)**(hybridParvoMagnoCoefTablePTR)+*(magnoXOutputPTR++)**(hybridParvoMagnoCoefTablePTR+1); - *(hybridParvoMagnoPTR++)=hybridValue; - } - - TemplateBuffer::normalizeGrayOutput_0_maxOutputValue(&_retinaParvoMagnoMappedFrame[0], _photoreceptorsPrefilter.getNBpixels()); - - } - - bool RetinaFilter::getParvoFoveaResponse(std::valarray &parvoFovealResponse) - { - if (!_useParvoOutput) - return false; - if (parvoFovealResponse.size() != _ParvoRetinaFilter.getNBpixels()) - return false; - - register const float *parvoOutputPTR= get_data(_ParvoRetinaFilter.getOutput()); - register float *fovealParvoResponsePTR= &parvoFovealResponse[0]; - register float *hybridParvoMagnoCoefTablePTR= &_retinaParvoMagnoMapCoefTable[0]; - - for (unsigned int i=0 ; i<_photoreceptorsPrefilter.getNBpixels() ; ++i, hybridParvoMagnoCoefTablePTR+=2) - { - *(fovealParvoResponsePTR++)=*(parvoOutputPTR++)**(hybridParvoMagnoCoefTablePTR); - } - - return true; - } - - // method to retrieve the parafoveal magnocellular pathway response (no energy motion in fovea) - bool RetinaFilter::getMagnoParaFoveaResponse(std::valarray &magnoParafovealResponse) - { - if (!_useMagnoOutput) - return false; - if (magnoParafovealResponse.size() != _MagnoRetinaFilter.getNBpixels()) - return false; - - register const float *magnoXOutputPTR= get_data(_MagnoRetinaFilter.getOutput()); - register float *parafovealMagnoResponsePTR=&magnoParafovealResponse[0]; - register float *hybridParvoMagnoCoefTablePTR=&_retinaParvoMagnoMapCoefTable[0]+1; - - for (unsigned int i=0 ; i<_photoreceptorsPrefilter.getNBpixels() ; ++i, hybridParvoMagnoCoefTablePTR+=2) - { - *(parafovealMagnoResponsePTR++)=*(magnoXOutputPTR++)**(hybridParvoMagnoCoefTablePTR); - } - - return true; - } -} diff --git a/modules/contrib/src/retinafilter.hpp b/modules/contrib/src/retinafilter.hpp deleted file mode 100644 index 572ae4c..0000000 --- a/modules/contrib/src/retinafilter.hpp +++ /dev/null @@ -1,545 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (including negligence or otherwise) arising in any way out of -** the use of this software, even if advised of the possibility of such damage. -*******************************************************************************/ - -/** -* @class RetinaFilter -* @brief class which describes the retina model developped at the LIS/GIPSA-LAB www.gipsa-lab.inpg.fr: -* -> performs a contours and moving contours extraction with powerfull local data enhancement as at the retina level -* Based on Alexandre BENOIT thesis: "Le systeme visuel humain au secours de la vision par ordinateur" -* -* => various optimisations and enhancements added after 2007 such as tone mapping capabilities, see reference paper cited in the licence and : -* Benoit A.,Alleysson D., Herault J., Le Callet P. (2009), "Spatio-Temporal Tone Mapping Operator based on a Retina model", Computational Color Imaging Workshop (CCIW09),pp 12-22, Saint Etienne, France -* -* TYPICAL USE: -* -* // create object at a specified picture size -* Retina *retina; -* retina =new Retina(frameSizeRows, frameSizeColumns, RGBmode); -* -* // init gain, spatial and temporal parameters: -* retina->setParameters(0.7, 1, 0, 7, 1, 5, 0, 0, 3 , true); -* -* // during program execution, call the filter for local luminance correction, contours extraction, moving contours extraction from an input picture called "FrameBuffer": -* retina->runfilter(FrameBuffer); -* -* // get the different output frames, check in the class description below for more outputs: -* const std::valarray correctedLuminance=retina->getLocalAdaptation(); -* const std::valarray contours=retina->getContours(); -* const std::valarray movingContours=retina->getMovingContours(); -* -* // at the end of the program, destroy object: -* delete retina; -* -* @author Alexandre BENOIT, benoit.alexandre.vision@gmail.com, LISTIC / Gipsa-Lab, France: www.gipsa-lab.inpg.fr/ -* Creation date 2007 -*/ - -#ifndef RETINACLASSES_H_ -#define RETINACLASSES_H_ - -#include "basicretinafilter.hpp" -#include "parvoretinafilter.hpp" -#include "magnoretinafilter.hpp" - -// optional includes (depending on the related publications) -#include "imagelogpolprojection.hpp" - -#include "retinacolor.hpp" - -//#define __RETINADEBUG // define RETINADEBUG to display debug data -namespace cv -{ - -// retina class that process the 3 outputs of the retina filtering stages -class RetinaFilter//: public BasicRetinaFilter -{ -public: - - /** - * constructor of the retina filter model with log sampling of the input frame (models the photoreceptors log sampling (central high resolution fovea and lower precision borders)) - * @param sizeRows: number of rows of the input image - * @param sizeColumns: number of columns of the input image - * @param colorMode: specifies if the retina works with color (true) of stays in grayscale processing (false), can be adjusted online by the use of setColorMode method - * @param samplingMethod: specifies which kind of color sampling will be used - * @param useRetinaLogSampling: activate retina log sampling, if true, the 2 following parameters can be used - * @param reductionFactor: only usefull if param useRetinaLogSampling=true, specifies the reduction factor of the output frame (as the center (fovea) is high resolution and corners can be underscaled, then a reduction of the output is allowed without precision leak - * @param samplingStrenght: only usefull if param useRetinaLogSampling=true, specifies the strenght of the log scale that is applied - */ - RetinaFilter(const unsigned int sizeRows, const unsigned int sizeColumns, const bool colorMode=false, const RETINA_COLORSAMPLINGMETHOD samplingMethod=RETINA_COLOR_BAYER, const bool useRetinaLogSampling=false, const double reductionFactor=1.0, const double samplingStrenght=10.0); - - /** - * standard destructor - */ - ~RetinaFilter(); - - /** - * function that clears all buffers of the object - */ - void clearAllBuffers(); - - /** - * resize retina parvo filter object (resize all allocated buffers) - * @param NBrows: the new height size - * @param NBcolumns: the new width size - */ - void resize(const unsigned int NBrows, const unsigned int NBcolumns); - - /** - * Input buffer checker: allows to check if the passed image buffer corresponds to retina filter expectations - * @param input: the input image buffer - * @param colorMode: specifiy if the input should be considered by the retina as colored of not - * @return false if not compatible or it returns true if OK - */ - bool checkInput(const std::valarray &input, const bool colorMode); - - /** - * run the initilized retina filter, after this call all retina outputs are updated - * @param imageInput: image input buffer, can be grayscale or RGB image respecting the size specified at the constructor level - * @param useAdaptiveFiltering: set true if you want to use adaptive color demultilexing (solve some color artefact problems), see RetinaColor for citation references - * @param processRetinaParvoMagnoMapping: tels if the main outputs takes into account the mapping of the Parvo and Magno channels on the retina (centred parvo (fovea) and magno outside (parafovea)) - * @param useColorMode: color information is used if true, warning, if input is only gray level, a buffer overflow error will occur - -> note that if color mode is activated and processRetinaParvoMagnoMapping==true, then the demultiplexed color frame (accessible throw getColorOutput() will be a color contours frame in the fovea and gray level moving contours outside - @param inputIsColorMultiplexed: set trus if the input data is a multiplexed color image (using Bayer sampling for example), the color sampling method must correspond to the RETINA_COLORSAMPLINGMETHOD passed at constructor! - * @return true if process ran well, false in case of failure - */ - bool runFilter(const std::valarray &imageInput, const bool useAdaptiveFiltering=true, const bool processRetinaParvoMagnoMapping=false, const bool useColorMode=false, const bool inputIsColorMultiplexed=false); - - /** - * run the initilized retina filter in order to perform color tone mapping applied on an RGB image, after this call the color output of the retina is updated (use function getColorOutput() to grab it) - * the algorithm is based on David Alleyson, Sabine Susstruck and Laurence Meylan's work, please cite: - * -> Meylan L., Alleysson D., and S�sstrunk S., A Model of Retinal Local Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of America, A, Vol. 24, N� 9, September, 1st, 2007, pp. 2807-2816 - * get the resulting gray frame by calling function getParvoColor() - * @param grayImageInput: RGB image input buffer respecting the size specified at the constructor level - * @param PhotoreceptorsCompression: sets the log compression parameters applied at the photoreceptors level (enhance luminance in dark areas) - * @param ganglionCellsCompression: sets the log compression applied at the gnaglion cells output (enhance contrast) - */ - void runGrayToneMapping(const std::valarray &grayImageInput, std::valarray &grayImageOutput, const float PhotoreceptorsCompression=0.6, const float ganglionCellsCompression=0.6); - - /** - * run the initilized retina filter in order to perform color tone mapping applied on an RGB image, after this call the color output of the retina is updated (use function getColorOutput() to grab it) - * the algorithm is based on David Alleyson, Sabine Susstruck and Laurence Meylan's work, please cite: - * -> Meylan L., Alleysson D., and S�sstrunk S., A Model of Retinal Local Adaptation for the Tone Mapping of Color Filter Array Images, Journal of Optical Society of America, A, Vol. 24, N� 9, September, 1st, 2007, pp. 2807-2816 - * get the resulting RGB frame by calling function getParvoColor() - * @param RGBimageInput: RGB image input buffer respecting the size specified at the constructor level - * @param useAdaptiveFiltering: set true if you want to use adaptive color demultilexing (solve some color artefact problems), see RetinaColor for citation references - * @param PhotoreceptorsCompression: sets the log compression parameters applied at the photoreceptors level (enhance luminance in dark areas) - * @param ganglionCellsCompression: sets the log compression applied at the ganglion cells output (enhance contrast) - */ - void runRGBToneMapping(const std::valarray &RGBimageInput, std::valarray &imageOutput, const bool useAdaptiveFiltering, const float PhotoreceptorsCompression=0.6, const float ganglionCellsCompression=0.6); - - /** - * run the initilized retina filter in order to perform color tone mapping applied on an RGB image, after this call the color output of the retina is updated (use function getColorOutput() to grab it) - * get the resulting RGB frame by calling function getParvoColor() - * @param LMSimageInput: RGB image input buffer respecting the size specified at the constructor level - * @param useAdaptiveFiltering: set true if you want to use adaptive color demultilexing (solve some color artefact problems), see RetinaColor for citation references - * @param PhotoreceptorsCompression: sets the log compression parameters applied at the photoreceptors level (enhance luminance in dark areas) - * @param ganglionCellsCompression: sets the log compression applied at the gnaglion cells output (enhance contrast) - */ - void runLMSToneMapping(const std::valarray &LMSimageInput, std::valarray &imageOutput, const bool useAdaptiveFiltering, const float PhotoreceptorsCompression=0.6, const float ganglionCellsCompression=0.6); - - /** - * set up function of the retina filter: all the retina is initialized at this step, some specific parameters are set by default, use setOPLandParvoCoefficientsTable() and setMagnoCoefficientsTable in order to setup the retina with more options - * @param OPLspatialResponse1: (equal to k1 in setOPLandParvoCoefficientsTable() function) the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel - * @param OPLtemporalresponse1: (equal to tau1 in setOPLandParvoCoefficientsTable() function) the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame - * @param OPLassymetryGain: (equal to beta2 in setOPLandParvoCoefficientsTable() function) gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0 - * @param OPLspatialResponse2: (equal to k2 in setOPLandParvoCoefficientsTable() function) the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel - * @param OPLtemporalresponse2: (equal to tau2 in setOPLandParvoCoefficientsTable() function) the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors - * @param LPfilterSpatialResponse: (equal to parasolCells_k in setMagnoCoefficientsTable() function) the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5 - * @param LPfilterGain: (equal to parasolCells_beta in setMagnoCoefficientsTable() function) the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0 - * @param LPfilterTemporalresponse: (equal to parasolCells_tau in setMagnoCoefficientsTable() function) the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response) - * @param MovingContoursExtractorCoefficient: (equal to amacrinCellsTemporalCutFrequency in setMagnoCoefficientsTable() function)the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5 - * @param normalizeParvoOutput_0_maxOutputValue: specifies if the Parvo cellular output should be normalized between 0 and maxOutputValue (true) or not (false) in order to remain at a null mean value, true value is recommended for visualisation - * @param normalizeMagnoOutput_0_maxOutputValue: specifies if the Magno cellular output should be normalized between 0 and maxOutputValue (true) or not (false), setting true may be hazardous because it can enhace the noise response when nothing is moving - * @param maxOutputValue: the maximum amplitude value of the normalized outputs (generally 255 for 8bit per channel pictures) - * @param maxInputValue: the maximum pixel value of the input picture (generally 255 for 8bit per channel pictures), specify it in other case (for example High Dynamic Range Images) - * @param meanValue: the global mean value of the input data usefull for local adaptation setup - */ - void setGlobalParameters(const float OPLspatialResponse1=0.7, const float OPLtemporalresponse1=1, const float OPLassymetryGain=0, const float OPLspatialResponse2=5, const float OPLtemporalresponse2=1, const float LPfilterSpatialResponse=5, const float LPfilterGain=0, const float LPfilterTemporalresponse=0, const float MovingContoursExtractorCoefficient=5, const bool normalizeParvoOutput_0_maxOutputValue=false, const bool normalizeMagnoOutput_0_maxOutputValue=false, const float maxOutputValue=255.0, const float maxInputValue=255.0, const float meanValue=128.0); - - /** - * setup the local luminance adaptation capability - * @param V0CompressionParameter: the compression strengh of the photoreceptors local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 160 - */ - inline void setPhotoreceptorsLocalAdaptationSensitivity(const float V0CompressionParameter){_photoreceptorsPrefilter.setV0CompressionParameter(1-V0CompressionParameter);_setInitPeriodCount();}; - - /** - * setup the local luminance adaptation capability - * @param V0CompressionParameter: the compression strengh of the parvocellular pathway (details) local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 160 - */ - inline void setParvoGanglionCellsLocalAdaptationSensitivity(const float V0CompressionParameter){_ParvoRetinaFilter.setV0CompressionParameter(V0CompressionParameter);_setInitPeriodCount();}; - - /** - * setup the local luminance adaptation area of integration - * @param spatialResponse: the spatial constant of the low pass filter applied on the bipolar cells output in order to compute local contrast mean values - * @param temporalResponse: the spatial constant of the low pass filter applied on the bipolar cells output in order to compute local contrast mean values (generally set to zero: immediate response) - */ - inline void setGanglionCellsLocalAdaptationLPfilterParameters(const float spatialResponse, const float temporalResponse){_ParvoRetinaFilter.setGanglionCellsLocalAdaptationLPfilterParameters(temporalResponse, spatialResponse);_setInitPeriodCount();}; - - /** - * setup the local luminance adaptation capability - * @param V0CompressionParameter: the compression strengh of the magnocellular pathway (motion) local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 160 - */ - inline void setMagnoGanglionCellsLocalAdaptationSensitivity(const float V0CompressionParameter){_MagnoRetinaFilter.setV0CompressionParameter(V0CompressionParameter);_setInitPeriodCount();}; - - /** - * setup the OPL and IPL parvo channels - * @param beta1: gain of the horizontal cells network, if 0, then the mean value of the output is zero (default value), if the parameter is near 1, the amplitude is boosted but it should only be used for values rescaling... if needed - * @param tau1: the time constant of the first order low pass filter of the photoreceptors, use it to cut high temporal frequencies (noise or fast motion), unit is frames, typical value is 1 frame - * @param k1: the spatial constant of the first order low pass filter of the photoreceptors, use it to cut high spatial frequencies (noise or thick contours), unit is pixels, typical value is 1 pixel - * @param beta2: gain of the horizontal cells network, if 0, then the mean value of the output is zero, if the parameter is near 1, then, the luminance is not filtered and is still reachable at the output, typicall value is 0 - * @param tau2: the time constant of the first order low pass filter of the horizontal cells, use it to cut low temporal frequencies (local luminance variations), unit is frames, typical value is 1 frame, as the photoreceptors - * @param k2: the spatial constant of the first order low pass filter of the horizontal cells, use it to cut low spatial frequencies (local luminance), unit is pixels, typical value is 5 pixel, this value is also used for local contrast computing when computing the local contrast adaptation at the ganglion cells level (Inner Plexiform Layer parvocellular channel model) - * @param V0CompressionParameter: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 230 - */ - void setOPLandParvoParameters(const float beta1, const float tau1, const float k1, const float beta2, const float tau2, const float k2, const float V0CompressionParameter){_ParvoRetinaFilter.setOPLandParvoFiltersParameters(beta1, tau1, k1, beta2, tau2, k2);_ParvoRetinaFilter.setV0CompressionParameter(V0CompressionParameter);_setInitPeriodCount();}; - - /** - * set parameters values for the Inner Plexiform Layer (IPL) magnocellular channel - * @param parasolCells_beta: the low pass filter gain used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), typical value is 0 - * @param parasolCells_tau: the low pass filter time constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is frame, typical value is 0 (immediate response) - * @param parasolCells_k: the low pass filter spatial constant used for local contrast adaptation at the IPL level of the retina (for ganglion cells local adaptation), unit is pixels, typical value is 5 - * @param amacrinCellsTemporalCutFrequency: the time constant of the first order high pass fiter of the magnocellular way (motion information channel), unit is frames, tipicall value is 5 - * @param V0CompressionParameter: the compression strengh of the ganglion cells local adaptation output, set a value between 160 and 250 for best results, a high value increases more the low value sensitivity... and the output saturates faster, recommended value: 200 - * @param localAdaptintegration_tau: specifies the temporal constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - * @param localAdaptintegration_k: specifies the spatial constant of the low pas filter involved in the computation of the local "motion mean" for the local adaptation computation - */ - void setMagnoCoefficientsTable(const float parasolCells_beta, const float parasolCells_tau, const float parasolCells_k, const float amacrinCellsTemporalCutFrequency, const float V0CompressionParameter, const float localAdaptintegration_tau, const float localAdaptintegration_k){_MagnoRetinaFilter.setCoefficientsTable(parasolCells_beta, parasolCells_tau, parasolCells_k, amacrinCellsTemporalCutFrequency, localAdaptintegration_tau, localAdaptintegration_k);_MagnoRetinaFilter.setV0CompressionParameter(V0CompressionParameter);_setInitPeriodCount();}; - - /** - * set if the parvo output should be or not normalized between 0 and 255 (for display purpose generally) - * @param normalizeParvoOutput_0_maxOutputValue: true if normalization should be done - */ - inline void activateNormalizeParvoOutput_0_maxOutputValue(const bool normalizeParvoOutput_0_maxOutputValue){_normalizeParvoOutput_0_maxOutputValue=normalizeParvoOutput_0_maxOutputValue;}; - - /** - * set if the magno output should be or not normalized between 0 and 255 (for display purpose generally), take care, if nothing is moving, then, the noise will be enanced !!! - * @param normalizeMagnoOutput_0_maxOutputValue: true if normalization should be done - */ - inline void activateNormalizeMagnoOutput_0_maxOutputValue(const bool normalizeMagnoOutput_0_maxOutputValue){_normalizeMagnoOutput_0_maxOutputValue=normalizeMagnoOutput_0_maxOutputValue;}; - - /** - * setup the maximum amplitude value of the normalized outputs (generally 255 for 8bit per channel pictures) - * @param maxOutputValue: maximum amplitude value of the normalized outputs (generally 255 for 8bit per channel pictures) - */ - inline void setMaxOutputValue(const float maxOutputValue){_maxOutputValue=maxOutputValue;}; - - /** - * sets the color mode of the frame grabber - * @param desiredColorMode: true if the user needs color information, false for graylevels - */ - void setColorMode(const bool desiredColorMode){_useColorMode=desiredColorMode;}; - - /** - * activate color saturation as the final step of the color demultiplexing process - * -> this saturation is a sigmoide function applied to each channel of the demultiplexed image. - * @param saturateColors: boolean that activates color saturation (if true) or desactivate (if false) - * @param colorSaturationValue: the saturation factor - * */ - inline void setColorSaturation(const bool saturateColors=true, const float colorSaturationValue=4.0){_colorEngine.setColorSaturation(saturateColors, colorSaturationValue);}; - - ///////////////////////////////////////////////////////////////// - // function that retrieve the main retina outputs, one by one, or all in a structure - - /** - * @return the input image sampled by the photoreceptors spatial sampling - */ - inline const std::valarray &getPhotoreceptorsSampledFrame() const - { - CV_Assert(_photoreceptorsLogSampling); - return _photoreceptorsLogSampling->getSampledFrame(); - }; - - /** - * @return photoreceptors output, locally adapted luminance only, no high frequency spatio-temporal noise reduction at the next retina processing stages, use getPhotoreceptors method to get complete photoreceptors output - */ - inline const std::valarray &getLocalAdaptation() const {return _photoreceptorsPrefilter.getOutput();}; - - /** - * @return photoreceptors output: locally adapted luminance and high frequency spatio-temporal noise reduction, high luminance is a little saturated at this stage, but this is corrected naturally at the next retina processing stages - */ - inline const std::valarray &getPhotoreceptors() const {return _ParvoRetinaFilter.getPhotoreceptorsLPfilteringOutput();}; - - /** - * @return the local luminance of the processed frame (it is the horizontal cells output) - */ - inline const std::valarray &getHorizontalCells() const {return _ParvoRetinaFilter.getHorizontalCellsOutput();}; - - ///////// CONTOURS part, PARVOCELLULAR RETINA PATHWAY - /** - * @return true if Parvocellular output is activated, false if not - */ - inline bool areContoursProcessed(){return _useParvoOutput;}; - - /** - * method to retrieve the foveal parvocellular pathway response (no details energy in parafovea) - * @param parvoParafovealResponse: buffer that will be filled with the response of the magnocellular pathway in the parafoveal area - * @return true if process succeeded (if buffer exists, is its size matches retina size, if magno channel is activated and if mapping is initialized - */ - bool getParvoFoveaResponse(std::valarray &parvoFovealResponse); - - /** - * @param useParvoOutput: true if Parvocellular output should be activated, false if not - */ - inline void activateContoursProcessing(const bool useParvoOutput){_useParvoOutput=useParvoOutput;}; - - /** - * @return the parvocellular contours information (details), should be used at the fovea level - */ - const std::valarray &getContours(); // Parvocellular output - - /** - * @return the parvocellular contours ON information (details), should be used at the fovea level - */ - inline const std::valarray &getContoursON() const {return _ParvoRetinaFilter.getParvoON();};// Parvocellular ON output - - /** - * @return the parvocellular contours OFF information (details), should be used at the fovea level - */ - inline const std::valarray &getContoursOFF() const {return _ParvoRetinaFilter.getParvoOFF();};// Parvocellular OFF output - - ///////// MOVING CONTOURS part, MAGNOCELLULAR RETINA PATHWAY - /** - * @return true if Magnocellular output is activated, false if not - */ - inline bool areMovingContoursProcessed(){return _useMagnoOutput;}; - - /** - * method to retrieve the parafoveal magnocellular pathway response (no motion energy in fovea) - * @param magnoParafovealResponse: buffer that will be filled with the response of the magnocellular pathway in the parafoveal area - * @return true if process succeeded (if buffer exists, is its size matches retina size, if magno channel is activated and if mapping is initialized - */ - bool getMagnoParaFoveaResponse(std::valarray &magnoParafovealResponse); - - /** - * @param useMagnoOutput: true if Magnoocellular output should be activated, false if not - */ - inline void activateMovingContoursProcessing(const bool useMagnoOutput){_useMagnoOutput=useMagnoOutput;}; - - /** - * @return the magnocellular moving contours information (motion), should be used at the parafovea level without post-processing - */ - inline const std::valarray &getMovingContours() const {return _MagnoRetinaFilter.getOutput();};// Magnocellular output - - /** - * @return the magnocellular moving contours information (motion), should be used at the parafovea level with assymetric sigmoide post-processing which saturates motion information - */ - inline const std::valarray &getMovingContoursSaturated() const {return _MagnoRetinaFilter.getMagnoYsaturated();};// Saturated Magnocellular output - - /** - * @return the magnocellular moving contours ON information (motion), should be used at the parafovea level without post-processing - */ - inline const std::valarray &getMovingContoursON() const {return _MagnoRetinaFilter.getMagnoON();};// Magnocellular ON output - - /** - * @return the magnocellular moving contours OFF information (motion), should be used at the parafovea level without post-processing - */ - inline const std::valarray &getMovingContoursOFF() const {return _MagnoRetinaFilter.getMagnoOFF();};// Magnocellular OFF output - - /** - * @return a gray level image with center Parvo and peripheral Magno X channels, WARNING, the result will be ok if you called previously fucntion runFilter(imageInput, processRetinaParvoMagnoMapping=true); - * -> will be accessible even if color mode is activated (but the image is color sampled so quality is poor), but get the same thing but in color by the use of function getParvoColor() - */ - inline const std::valarray &getRetinaParvoMagnoMappedOutput() const {return _retinaParvoMagnoMappedFrame;};// return image with center Parvo and peripheral Magno channels - - /** - * color processing dedicated functions - * @return the parvo channel (contours, details) of the processed frame, grayscale output - */ - inline const std::valarray &getParvoContoursChannel() const {return _colorEngine.getLuminance();}; - - /** - * color processing dedicated functions - * @return the chrominance of the processed frame (same colorspace as the input output, usually RGB) - */ - inline const std::valarray &getParvoChrominance() const {return _colorEngine.getChrominance();}; // only retreive chrominance - - /** - * color processing dedicated functions - * @return the parvo + chrominance channels of the processed frame (same colorspace as the input output, usually RGB) - */ - inline const std::valarray &getColorOutput() const {return _colorEngine.getDemultiplexedColorFrame();};// retrieve luminance+chrominance - - /** - * apply to the retina color output the Krauskopf transformation which leads to an opponent color system: output colorspace if Acr1cr2 if input of the retina was LMS color space - * @param result: the input buffer to fill with the transformed colorspace retina output - * @return true if process ended successfully - */ - inline bool applyKrauskopfLMS2Acr1cr2Transform(std::valarray &result){return _colorEngine.applyKrauskopfLMS2Acr1cr2Transform(result);}; - - /** - * apply to the retina color output the Krauskopf transformation which leads to an opponent color system: output colorspace if Acr1cr2 if input of the retina was LMS color space - * @param result: the input buffer to fill with the transformed colorspace retina output - * @return true if process ended successfully - */ - inline bool applyLMS2LabTransform(std::valarray &result){return _colorEngine.applyLMS2LabTransform(result);}; - - /** - * color processing dedicated functions - * @return the retina initialized mode, true if color mode (RGB), false if grayscale - */ - inline bool isColorMode(){return _useColorMode;}; // return true if RGB mode, false if gray level mode - - /** - * @return the irregular low pass filter ouput at the photoreceptors level - */ - inline const std::valarray &getIrregularLPfilteredInputFrame() const {return _photoreceptorsLogSampling->getIrregularLPfilteredInputFrame();}; - - /** - * @return true if color mode is activated, false if gray levels processing - */ - bool getColorMode(){return _useColorMode;}; - - /** - * - * @return true if a sufficient number of processed frames has been done since the last parameters update in order to get the stable state (r�gime permanent) - */ - inline bool isInitTransitionDone(){if (_ellapsedFramesSinceLastReset<_globalTemporalConstant)return false; return true;}; - - /** - * find a distance in the image input space when the distance is known in the retina log sampled space...read again if it is not clear enough....sorry, i should sleep - * @param projectedRadiusLength: the distance to image center in the retina log sampled space - * @return the distance to image center in the input image space - */ - inline float getRetinaSamplingBackProjection(const float projectedRadiusLength) - { - if (_photoreceptorsLogSampling) - return (float)_photoreceptorsLogSampling->getOriginalRadiusLength(projectedRadiusLength); - return projectedRadiusLength; - }; - - /////////////////: - // retina dimensions getters - - /** - * @return number of rows of the filter - */ - inline unsigned int getInputNBrows(){if (_photoreceptorsLogSampling) return _photoreceptorsLogSampling->getNBrows();else return _photoreceptorsPrefilter.getNBrows();}; - - /** - * @return number of columns of the filter - */ - inline unsigned int getInputNBcolumns(){if (_photoreceptorsLogSampling) return _photoreceptorsLogSampling->getNBcolumns();else return _photoreceptorsPrefilter.getNBcolumns();}; - - /** - * @return number of pixels of the filter - */ - inline unsigned int getInputNBpixels(){if (_photoreceptorsLogSampling) return _photoreceptorsLogSampling->getNBpixels();else return _photoreceptorsPrefilter.getNBpixels();}; - - /** - * @return the height of the frame output - */ - inline unsigned int getOutputNBrows(){return _photoreceptorsPrefilter.getNBrows();}; - - /** - * @return the width of the frame output - */ - inline unsigned int getOutputNBcolumns(){return _photoreceptorsPrefilter.getNBcolumns();}; - - /** - * @return the numbers of output pixels (width*height) of the images used by the object - */ - inline unsigned int getOutputNBpixels(){return _photoreceptorsPrefilter.getNBpixels();}; - - -private: - - // processing activation flags - bool _useParvoOutput; - bool _useMagnoOutput; - - - // filter stability controls - unsigned int _ellapsedFramesSinceLastReset; - unsigned int _globalTemporalConstant; - - // private template buffers and related access pointers - std::valarray _retinaParvoMagnoMappedFrame; - std::valarray _retinaParvoMagnoMapCoefTable; - // private objects of the class - BasicRetinaFilter _photoreceptorsPrefilter; - ParvoRetinaFilter _ParvoRetinaFilter; - MagnoRetinaFilter _MagnoRetinaFilter; - RetinaColor _colorEngine; - ImageLogPolProjection *_photoreceptorsLogSampling; - - bool _useMinimalMemoryForToneMappingONLY; - - bool _normalizeParvoOutput_0_maxOutputValue; - bool _normalizeMagnoOutput_0_maxOutputValue; - float _maxOutputValue; - bool _useColorMode; - - - - // private functions - void _setInitPeriodCount(); - void _createHybridTable(); - void _processRetinaParvoMagnoMapping(); - void _runGrayToneMapping(const std::valarray &grayImageInput, std::valarray &grayImageOutput ,const float PhotoreceptorsCompression=0.6, const float ganglionCellsCompression=0.6); - - -}; - -} -#endif /*RETINACLASSES_H_*/ diff --git a/modules/contrib/src/rgbdodometry.cpp b/modules/contrib/src/rgbdodometry.cpp deleted file mode 100644 index 0b2b951..0000000 --- a/modules/contrib/src/rgbdodometry.cpp +++ /dev/null @@ -1,636 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#define SHOW_DEBUG_IMAGES 0 - -#include "opencv2/core/core.hpp" -#include "opencv2/calib3d/calib3d.hpp" - -#if SHOW_DEBUG_IMAGES -# include "opencv2/highgui/highgui.hpp" -#endif - -#include -#include - -#include "opencv2/core/internal.hpp" -#if defined(HAVE_EIGEN) && EIGEN_WORLD_VERSION == 3 -# ifdef ANDROID - template Scalar log2(Scalar v) { using std::log; return log(v)/log(Scalar(2)); } -# endif -# if defined __GNUC__ && defined __APPLE__ -# pragma GCC diagnostic ignored "-Wshadow" -# endif -# include -# include -#endif - -using namespace cv; - -inline static -void computeC_RigidBodyMotion( double* C, double dIdx, double dIdy, const Point3f& p3d, double fx, double fy ) -{ - double invz = 1. / p3d.z, - v0 = dIdx * fx * invz, - v1 = dIdy * fy * invz, - v2 = -(v0 * p3d.x + v1 * p3d.y) * invz; - - C[0] = -p3d.z * v1 + p3d.y * v2; - C[1] = p3d.z * v0 - p3d.x * v2; - C[2] = -p3d.y * v0 + p3d.x * v1; - C[3] = v0; - C[4] = v1; - C[5] = v2; -} - -inline static -void computeC_Rotation( double* C, double dIdx, double dIdy, const Point3f& p3d, double fx, double fy ) -{ - double invz = 1. / p3d.z, - v0 = dIdx * fx * invz, - v1 = dIdy * fy * invz, - v2 = -(v0 * p3d.x + v1 * p3d.y) * invz; - - C[0] = -p3d.z * v1 + p3d.y * v2; - C[1] = p3d.z * v0 - p3d.x * v2; - C[2] = -p3d.y * v0 + p3d.x * v1; -} - -inline static -void computeC_Translation( double* C, double dIdx, double dIdy, const Point3f& p3d, double fx, double fy ) -{ - double invz = 1. / p3d.z, - v0 = dIdx * fx * invz, - v1 = dIdy * fy * invz, - v2 = -(v0 * p3d.x + v1 * p3d.y) * invz; - - C[0] = v0; - C[1] = v1; - C[2] = v2; -} - -inline static -void computeProjectiveMatrix( const Mat& ksi, Mat& Rt ) -{ - CV_Assert( ksi.size() == Size(1,6) && ksi.type() == CV_64FC1 ); - -#if defined(HAVE_EIGEN) && EIGEN_WORLD_VERSION == 3 && (!defined _MSC_VER || !defined _M_X64 || _MSC_VER > 1500) - const double* ksi_ptr = reinterpret_cast(ksi.ptr(0)); - Eigen::Matrix twist, g; - twist << 0., -ksi_ptr[2], ksi_ptr[1], ksi_ptr[3], - ksi_ptr[2], 0., -ksi_ptr[0], ksi_ptr[4], - -ksi_ptr[1], ksi_ptr[0], 0, ksi_ptr[5], - 0., 0., 0., 0.; - g = twist.exp(); - - - eigen2cv(g, Rt); -#else - // for infinitesimal transformation - Rt = Mat::eye(4, 4, CV_64FC1); - - Mat R = Rt(Rect(0,0,3,3)); - Mat rvec = ksi.rowRange(0,3); - - Rodrigues( rvec, R ); - - Rt.at(0,3) = ksi.at(3); - Rt.at(1,3) = ksi.at(4); - Rt.at(2,3) = ksi.at(5); -#endif -} - -static -void cvtDepth2Cloud( const Mat& depth, Mat& cloud, const Mat& cameraMatrix ) -{ - CV_Assert( cameraMatrix.type() == CV_64FC1 ); - const double inv_fx = 1.f/cameraMatrix.at(0,0); - const double inv_fy = 1.f/cameraMatrix.at(1,1); - const double ox = cameraMatrix.at(0,2); - const double oy = cameraMatrix.at(1,2); - cloud.create( depth.size(), CV_32FC3 ); - for( int y = 0; y < cloud.rows; y++ ) - { - Point3f* cloud_ptr = reinterpret_cast(cloud.ptr(y)); - const float* depth_prt = reinterpret_cast(depth.ptr(y)); - for( int x = 0; x < cloud.cols; x++ ) - { - float z = depth_prt[x]; - cloud_ptr[x].x = (float)((x - ox) * z * inv_fx); - cloud_ptr[x].y = (float)((y - oy) * z * inv_fy); - cloud_ptr[x].z = z; - } - } -} - -#if SHOW_DEBUG_IMAGES -template -static void warpImage( const Mat& image, const Mat& depth, - const Mat& Rt, const Mat& cameraMatrix, const Mat& distCoeff, - Mat& warpedImage ) -{ - const Rect rect = Rect(0, 0, image.cols, image.rows); - - vector points2d; - Mat cloud, transformedCloud; - - cvtDepth2Cloud( depth, cloud, cameraMatrix ); - perspectiveTransform( cloud, transformedCloud, Rt ); - projectPoints( transformedCloud.reshape(3,1), Mat::eye(3,3,CV_64FC1), Mat::zeros(3,1,CV_64FC1), cameraMatrix, distCoeff, points2d ); - - Mat pointsPositions( points2d ); - pointsPositions = pointsPositions.reshape( 2, image.rows ); - - warpedImage.create( image.size(), image.type() ); - warpedImage = Scalar::all(0); - - Mat zBuffer( image.size(), CV_32FC1, FLT_MAX ); - for( int y = 0; y < image.rows; y++ ) - { - for( int x = 0; x < image.cols; x++ ) - { - const Point3f p3d = transformedCloud.at(y,x); - const Point p2d = pointsPositions.at(y,x); - if( !cvIsNaN(cloud.at(y,x).z) && cloud.at(y,x).z > 0 && - rect.contains(p2d) && zBuffer.at(p2d) > p3d.z ) - { - warpedImage.at(p2d) = image.at(y,x); - zBuffer.at(p2d) = p3d.z; - } - } - } -} -#endif - -static inline -void set2shorts( int& dst, int short_v1, int short_v2 ) -{ - unsigned short* ptr = reinterpret_cast(&dst); - ptr[0] = static_cast(short_v1); - ptr[1] = static_cast(short_v2); -} - -static inline -void get2shorts( int src, int& short_v1, int& short_v2 ) -{ - typedef union { int vint32; unsigned short vuint16[2]; } s32tou16; - const unsigned short* ptr = (reinterpret_cast(&src))->vuint16; - short_v1 = ptr[0]; - short_v2 = ptr[1]; -} - -static -int computeCorresp( const Mat& K, const Mat& K_inv, const Mat& Rt, - const Mat& depth0, const Mat& depth1, const Mat& texturedMask1, float maxDepthDiff, - Mat& corresps ) -{ - CV_Assert( K.type() == CV_64FC1 ); - CV_Assert( K_inv.type() == CV_64FC1 ); - CV_Assert( Rt.type() == CV_64FC1 ); - - corresps.create( depth1.size(), CV_32SC1 ); - - Mat R = Rt(Rect(0,0,3,3)).clone(); - - Mat KRK_inv = K * R * K_inv; - const double * KRK_inv_ptr = reinterpret_cast(KRK_inv.ptr()); - - Mat Kt = Rt(Rect(3,0,1,3)).clone(); - Kt = K * Kt; - const double * Kt_ptr = reinterpret_cast(Kt.ptr()); - - Rect r(0, 0, depth1.cols, depth1.rows); - - corresps = Scalar(-1); - int correspCount = 0; - for( int v1 = 0; v1 < depth1.rows; v1++ ) - { - for( int u1 = 0; u1 < depth1.cols; u1++ ) - { - float d1 = depth1.at(v1,u1); - if( !cvIsNaN(d1) && texturedMask1.at(v1,u1) ) - { - float transformed_d1 = (float)(d1 * (KRK_inv_ptr[6] * u1 + KRK_inv_ptr[7] * v1 + KRK_inv_ptr[8]) + Kt_ptr[2]); - int u0 = cvRound((d1 * (KRK_inv_ptr[0] * u1 + KRK_inv_ptr[1] * v1 + KRK_inv_ptr[2]) + Kt_ptr[0]) / transformed_d1); - int v0 = cvRound((d1 * (KRK_inv_ptr[3] * u1 + KRK_inv_ptr[4] * v1 + KRK_inv_ptr[5]) + Kt_ptr[1]) / transformed_d1); - - if( r.contains(Point(u0,v0)) ) - { - float d0 = depth0.at(v0,u0); - if( !cvIsNaN(d0) && std::abs(transformed_d1 - d0) <= maxDepthDiff ) - { - int c = corresps.at(v0,u0); - if( c != -1 ) - { - int exist_u1, exist_v1; - get2shorts( c, exist_u1, exist_v1); - - float exist_d1 = (float)(depth1.at(exist_v1,exist_u1) * (KRK_inv_ptr[6] * exist_u1 + KRK_inv_ptr[7] * exist_v1 + KRK_inv_ptr[8]) + Kt_ptr[2]); - - if( transformed_d1 > exist_d1 ) - continue; - } - else - correspCount++; - - set2shorts( corresps.at(v0,u0), u1, v1 ); - } - } - } - } - } - - return correspCount; -} - -static inline -void preprocessDepth( Mat depth0, Mat depth1, - const Mat& validMask0, const Mat& validMask1, - float minDepth, float maxDepth ) -{ - CV_DbgAssert( depth0.size() == depth1.size() ); - - for( int y = 0; y < depth0.rows; y++ ) - { - for( int x = 0; x < depth0.cols; x++ ) - { - float& d0 = depth0.at(y,x); - if( !cvIsNaN(d0) && (d0 > maxDepth || d0 < minDepth || d0 <= 0 || (!validMask0.empty() && !validMask0.at(y,x))) ) - d0 = std::numeric_limits::quiet_NaN(); - - float& d1 = depth1.at(y,x); - if( !cvIsNaN(d1) && (d1 > maxDepth || d1 < minDepth || d1 <= 0 || (!validMask1.empty() && !validMask1.at(y,x))) ) - d1 = std::numeric_limits::quiet_NaN(); - } - } -} - -static -void buildPyramids( const Mat& image0, const Mat& image1, - const Mat& depth0, const Mat& depth1, - const Mat& cameraMatrix, int sobelSize, double sobelScale, - const vector& minGradMagnitudes, - vector& pyramidImage0, vector& pyramidDepth0, - vector& pyramidImage1, vector& pyramidDepth1, - vector& pyramid_dI_dx1, vector& pyramid_dI_dy1, - vector& pyramidTexturedMask1, vector& pyramidCameraMatrix ) -{ - const int pyramidMaxLevel = (int)minGradMagnitudes.size() - 1; - - buildPyramid( image0, pyramidImage0, pyramidMaxLevel ); - buildPyramid( image1, pyramidImage1, pyramidMaxLevel ); - - pyramid_dI_dx1.resize( pyramidImage1.size() ); - pyramid_dI_dy1.resize( pyramidImage1.size() ); - pyramidTexturedMask1.resize( pyramidImage1.size() ); - - pyramidCameraMatrix.reserve( pyramidImage1.size() ); - - Mat cameraMatrix_dbl; - cameraMatrix.convertTo( cameraMatrix_dbl, CV_64FC1 ); - - for( size_t i = 0; i < pyramidImage1.size(); i++ ) - { - Sobel( pyramidImage1[i], pyramid_dI_dx1[i], CV_16S, 1, 0, sobelSize ); - Sobel( pyramidImage1[i], pyramid_dI_dy1[i], CV_16S, 0, 1, sobelSize ); - - const Mat& dx = pyramid_dI_dx1[i]; - const Mat& dy = pyramid_dI_dy1[i]; - - Mat texturedMask( dx.size(), CV_8UC1, Scalar(0) ); - const float minScalesGradMagnitude2 = (float)((minGradMagnitudes[i] * minGradMagnitudes[i]) / (sobelScale * sobelScale)); - for( int y = 0; y < dx.rows; y++ ) - { - for( int x = 0; x < dx.cols; x++ ) - { - float m2 = (float)(dx.at(y,x)*dx.at(y,x) + dy.at(y,x)*dy.at(y,x)); - if( m2 >= minScalesGradMagnitude2 ) - texturedMask.at(y,x) = 255; - } - } - pyramidTexturedMask1[i] = texturedMask; - Mat levelCameraMatrix = i == 0 ? cameraMatrix_dbl : 0.5f * pyramidCameraMatrix[i-1]; - levelCameraMatrix.at(2,2) = 1.; - pyramidCameraMatrix.push_back( levelCameraMatrix ); - } - - buildPyramid( depth0, pyramidDepth0, pyramidMaxLevel ); - buildPyramid( depth1, pyramidDepth1, pyramidMaxLevel ); -} - -static -bool solveSystem( const Mat& C, const Mat& dI_dt, double detThreshold, Mat& ksi ) -{ -#if defined(HAVE_EIGEN) && EIGEN_WORLD_VERSION == 3 - Eigen::Matrix eC, eCt, edI_dt; - cv2eigen(C, eC); - cv2eigen(dI_dt, edI_dt); - eCt = eC.transpose(); - - Eigen::Matrix A, B, eksi; - - A = eCt * eC; - double det = A.determinant(); - if( fabs (det) < detThreshold || cvIsNaN(det) || cvIsInf(det) ) - return false; - - B = -eCt * edI_dt; - - eksi = A.ldlt().solve(B); - eigen2cv( eksi, ksi ); - -#else - Mat A = C.t() * C; - - double det = cv::determinant(A); - - if( fabs (det) < detThreshold || cvIsNaN(det) || cvIsInf(det) ) - return false; - - Mat B = -C.t() * dI_dt; - cv::solve( A, B, ksi, DECOMP_CHOLESKY ); -#endif - - return true; -} - -typedef void (*ComputeCFuncPtr)( double* C, double dIdx, double dIdy, const Point3f& p3d, double fx, double fy ); - -static -bool computeKsi( int transformType, - const Mat& image0, const Mat& cloud0, - const Mat& image1, const Mat& dI_dx1, const Mat& dI_dy1, - const Mat& corresps, int correspsCount, - double fx, double fy, double sobelScale, double determinantThreshold, - Mat& ksi ) -{ - int Cwidth = -1; - ComputeCFuncPtr computeCFuncPtr = 0; - if( transformType == RIGID_BODY_MOTION ) - { - Cwidth = 6; - computeCFuncPtr = computeC_RigidBodyMotion; - } - else if( transformType == ROTATION ) - { - Cwidth = 3; - computeCFuncPtr = computeC_Rotation; - } - else if( transformType == TRANSLATION ) - { - Cwidth = 3; - computeCFuncPtr = computeC_Translation; - } - else - CV_Error( CV_StsBadFlag, "Unsupported value of transformation type flag."); - - Mat C( correspsCount, Cwidth, CV_64FC1 ); - Mat dI_dt( correspsCount, 1, CV_64FC1 ); - - double sigma = 0; - int pointCount = 0; - for( int v0 = 0; v0 < corresps.rows; v0++ ) - { - for( int u0 = 0; u0 < corresps.cols; u0++ ) - { - if( corresps.at(v0,u0) != -1 ) - { - int u1, v1; - get2shorts( corresps.at(v0,u0), u1, v1 ); - double diff = static_cast(image1.at(v1,u1)) - - static_cast(image0.at(v0,u0)); - sigma += diff * diff; - pointCount++; - } - } - } - sigma = std::sqrt(sigma/pointCount); - - pointCount = 0; - for( int v0 = 0; v0 < corresps.rows; v0++ ) - { - for( int u0 = 0; u0 < corresps.cols; u0++ ) - { - if( corresps.at(v0,u0) != -1 ) - { - int u1, v1; - get2shorts( corresps.at(v0,u0), u1, v1 ); - - double diff = static_cast(image1.at(v1,u1)) - - static_cast(image0.at(v0,u0)); - double w = sigma + std::abs(diff); - w = w > DBL_EPSILON ? 1./w : 1.; - - (*computeCFuncPtr)( (double*)C.ptr(pointCount), - w * sobelScale * dI_dx1.at(v1,u1), - w * sobelScale * dI_dy1.at(v1,u1), - cloud0.at(v0,u0), fx, fy); - - dI_dt.at(pointCount) = w * diff; - pointCount++; - } - } - } - - Mat sln; - bool solutionExist = solveSystem( C, dI_dt, determinantThreshold, sln ); - - if( solutionExist ) - { - ksi.create(6,1,CV_64FC1); - ksi = Scalar(0); - - Mat subksi; - if( transformType == RIGID_BODY_MOTION ) - { - subksi = ksi; - } - else if( transformType == ROTATION ) - { - subksi = ksi.rowRange(0,3); - } - else if( transformType == TRANSLATION ) - { - subksi = ksi.rowRange(3,6); - } - - sln.copyTo( subksi ); - } - - return solutionExist; -} - -bool cv::RGBDOdometry( cv::Mat& Rt, const Mat& initRt, - const cv::Mat& image0, const cv::Mat& _depth0, const cv::Mat& validMask0, - const cv::Mat& image1, const cv::Mat& _depth1, const cv::Mat& validMask1, - const cv::Mat& cameraMatrix, float minDepth, float maxDepth, float maxDepthDiff, - const std::vector& iterCounts, const std::vector& minGradientMagnitudes, - int transformType ) -{ - const int sobelSize = 3; - const double sobelScale = 1./8; - - Mat depth0 = _depth0.clone(), - depth1 = _depth1.clone(); - - // check RGB-D input data - CV_Assert( !image0.empty() ); - CV_Assert( image0.type() == CV_8UC1 ); - CV_Assert( depth0.type() == CV_32FC1 && depth0.size() == image0.size() ); - - CV_Assert( image1.size() == image0.size() ); - CV_Assert( image1.type() == CV_8UC1 ); - CV_Assert( depth1.type() == CV_32FC1 && depth1.size() == image0.size() ); - - // check masks - CV_Assert( validMask0.empty() || (validMask0.type() == CV_8UC1 && validMask0.size() == image0.size()) ); - CV_Assert( validMask1.empty() || (validMask1.type() == CV_8UC1 && validMask1.size() == image0.size()) ); - - // check camera params - CV_Assert( cameraMatrix.type() == CV_32FC1 && cameraMatrix.size() == Size(3,3) ); - - // other checks - CV_Assert( iterCounts.empty() || minGradientMagnitudes.empty() || - minGradientMagnitudes.size() == iterCounts.size() ); - CV_Assert( initRt.empty() || (initRt.type()==CV_64FC1 && initRt.size()==Size(4,4) ) ); - - vector defaultIterCounts; - vector defaultMinGradMagnitudes; - vector const* iterCountsPtr = &iterCounts; - vector const* minGradientMagnitudesPtr = &minGradientMagnitudes; - - if( iterCounts.empty() || minGradientMagnitudes.empty() ) - { - defaultIterCounts.resize(4); - defaultIterCounts[0] = 7; - defaultIterCounts[1] = 7; - defaultIterCounts[2] = 7; - defaultIterCounts[3] = 10; - - defaultMinGradMagnitudes.resize(4); - defaultMinGradMagnitudes[0] = 12; - defaultMinGradMagnitudes[1] = 5; - defaultMinGradMagnitudes[2] = 3; - defaultMinGradMagnitudes[3] = 1; - - iterCountsPtr = &defaultIterCounts; - minGradientMagnitudesPtr = &defaultMinGradMagnitudes; - } - - preprocessDepth( depth0, depth1, validMask0, validMask1, minDepth, maxDepth ); - - vector pyramidImage0, pyramidDepth0, - pyramidImage1, pyramidDepth1, pyramid_dI_dx1, pyramid_dI_dy1, pyramidTexturedMask1, - pyramidCameraMatrix; - buildPyramids( image0, image1, depth0, depth1, cameraMatrix, sobelSize, sobelScale, *minGradientMagnitudesPtr, - pyramidImage0, pyramidDepth0, pyramidImage1, pyramidDepth1, - pyramid_dI_dx1, pyramid_dI_dy1, pyramidTexturedMask1, pyramidCameraMatrix ); - - Mat resultRt = initRt.empty() ? Mat::eye(4,4,CV_64FC1) : initRt.clone(); - Mat currRt, ksi; - for( int level = (int)iterCountsPtr->size() - 1; level >= 0; level-- ) - { - const Mat& levelCameraMatrix = pyramidCameraMatrix[level]; - - const Mat& levelImage0 = pyramidImage0[level]; - const Mat& levelDepth0 = pyramidDepth0[level]; - Mat levelCloud0; - cvtDepth2Cloud( pyramidDepth0[level], levelCloud0, levelCameraMatrix ); - - const Mat& levelImage1 = pyramidImage1[level]; - const Mat& levelDepth1 = pyramidDepth1[level]; - const Mat& level_dI_dx1 = pyramid_dI_dx1[level]; - const Mat& level_dI_dy1 = pyramid_dI_dy1[level]; - - CV_Assert( level_dI_dx1.type() == CV_16S ); - CV_Assert( level_dI_dy1.type() == CV_16S ); - - const double fx = levelCameraMatrix.at(0,0); - const double fy = levelCameraMatrix.at(1,1); - const double determinantThreshold = 1e-6; - - Mat corresps( levelImage0.size(), levelImage0.type() ); - - // Run transformation search on current level iteratively. - for( int iter = 0; iter < (*iterCountsPtr)[level]; iter ++ ) - { - int correspsCount = computeCorresp( levelCameraMatrix, levelCameraMatrix.inv(), resultRt.inv(DECOMP_SVD), - levelDepth0, levelDepth1, pyramidTexturedMask1[level], maxDepthDiff, - corresps ); - - if( correspsCount == 0 ) - break; - - bool solutionExist = computeKsi( transformType, - levelImage0, levelCloud0, - levelImage1, level_dI_dx1, level_dI_dy1, - corresps, correspsCount, - fx, fy, sobelScale, determinantThreshold, - ksi ); - - if( !solutionExist ) - break; - - computeProjectiveMatrix( ksi, currRt ); - - resultRt = currRt * resultRt; - -#if SHOW_DEBUG_IMAGES - std::cout << "currRt " << currRt << std::endl; - Mat warpedImage0; - const Mat distCoeff(1,5,CV_32FC1,Scalar(0)); - warpImage( levelImage0, levelDepth0, resultRt, levelCameraMatrix, distCoeff, warpedImage0 ); - - imshow( "im0", levelImage0 ); - imshow( "wim0", warpedImage0 ); - imshow( "im1", levelImage1 ); - waitKey(); -#endif - } - } - - Rt = resultRt; - - return !Rt.empty(); -} diff --git a/modules/contrib/src/selfsimilarity.cpp b/modules/contrib/src/selfsimilarity.cpp deleted file mode 100644 index 3857e3b..0000000 --- a/modules/contrib/src/selfsimilarity.cpp +++ /dev/null @@ -1,259 +0,0 @@ -// This is based on Rainer Lienhart contribution. Below is the original copyright: -// -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// University of Augsburg License Agreement -// For Open Source MultiMedia Computing (MMC) Library -// -// Copyright (C) 2007, University of Augsburg, Germany, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of University of Augsburg, Germany may not 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 University of Augsburg, Germany or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -// Author: Rainer Lienhart -// email: Rainer.Lienhart@informatik.uni-augsburg.de -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -// Please cite the following two papers: -// 1. Shechtman, E., Irani, M.: -// Matching local self-similarities across images and videos. -// CVPR, (2007) -// 2. Eva Horster, Thomas Greif, Rainer Lienhart, Malcolm Slaney. -// Comparing Local Feature Descriptors in pLSA-Based Image Models. -// 30th Annual Symposium of the German Association for -// Pattern Recognition (DAGM) 2008, Munich, Germany, June 2008. - -#include "precomp.hpp" - -namespace cv -{ - -SelfSimDescriptor::SelfSimDescriptor() -{ - smallSize = DEFAULT_SMALL_SIZE; - largeSize = DEFAULT_LARGE_SIZE; - numberOfAngles = DEFAULT_NUM_ANGLES; - startDistanceBucket = DEFAULT_START_DISTANCE_BUCKET; - numberOfDistanceBuckets = DEFAULT_NUM_DISTANCE_BUCKETS; -} - -SelfSimDescriptor::SelfSimDescriptor(int _ssize, int _lsize, - int _startDistanceBucket, - int _numberOfDistanceBuckets, int _numberOfAngles) -{ - smallSize = _ssize; - largeSize = _lsize; - startDistanceBucket = _startDistanceBucket; - numberOfDistanceBuckets = _numberOfDistanceBuckets; - numberOfAngles = _numberOfAngles; -} - -SelfSimDescriptor::SelfSimDescriptor(const SelfSimDescriptor& ss) -{ - smallSize = ss.smallSize; - largeSize = ss.largeSize; - startDistanceBucket = ss.startDistanceBucket; - numberOfDistanceBuckets = ss.numberOfDistanceBuckets; - numberOfAngles = ss.numberOfAngles; -} - -SelfSimDescriptor::~SelfSimDescriptor() -{ -} - -SelfSimDescriptor& SelfSimDescriptor::operator = (const SelfSimDescriptor& ss) -{ - if( this != &ss ) - { - smallSize = ss.smallSize; - largeSize = ss.largeSize; - startDistanceBucket = ss.startDistanceBucket; - numberOfDistanceBuckets = ss.numberOfDistanceBuckets; - numberOfAngles = ss.numberOfAngles; - } - return *this; -} - -size_t SelfSimDescriptor::getDescriptorSize() const -{ - return numberOfAngles*(numberOfDistanceBuckets - startDistanceBucket); -} - -Size SelfSimDescriptor::getGridSize( Size imgSize, Size winStride ) const -{ - winStride.width = std::max(winStride.width, 1); - winStride.height = std::max(winStride.height, 1); - int border = largeSize/2 + smallSize/2; - return Size(std::max(imgSize.width - border*2 + winStride.width - 1, 0)/winStride.width, - std::max(imgSize.height - border*2 + winStride.height - 1, 0)/winStride.height); -} - -// TODO: optimized with SSE2 -void SelfSimDescriptor::SSD(const Mat& img, Point pt, Mat& ssd) const -{ - int x, y, dx, dy, r0 = largeSize/2, r1 = smallSize/2; - int step = (int)img.step; - for( y = -r0; y <= r0; y++ ) - { - float* sptr = ssd.ptr(y+r0) + r0; - for( x = -r0; x <= r0; x++ ) - { - int sum = 0; - const uchar* src0 = img.ptr(y + pt.y - r1) + x + pt.x; - const uchar* src1 = img.ptr(pt.y - r1) + pt.x; - for( dy = -r1; dy <= r1; dy++, src0 += step, src1 += step ) - for( dx = -r1; dx <= r1; dx++ ) - { - int t = src0[dx] - src1[dx]; - sum += t*t; - } - sptr[x] = (float)sum; - } - } -} - - -void SelfSimDescriptor::compute(const Mat& img, vector& descriptors, Size winStride, - const vector& locations) const -{ - CV_Assert( img.depth() == CV_8U ); - - winStride.width = std::max(winStride.width, 1); - winStride.height = std::max(winStride.height, 1); - Size gridSize = getGridSize(img.size(), winStride); - int i, nwindows = locations.empty() ? gridSize.width*gridSize.height : (int)locations.size(); - int border = largeSize/2 + smallSize/2; - int fsize = (int)getDescriptorSize(); - vector tempFeature(fsize+1); - descriptors.resize(fsize*nwindows + 1); - Mat ssd(largeSize, largeSize, CV_32F), mappingMask; - computeLogPolarMapping(mappingMask); - -#if 0 //def _OPENMP - int nthreads = cvGetNumThreads(); - #pragma omp parallel for num_threads(nthreads) -#endif - for( i = 0; i < nwindows; i++ ) - { - Point pt; - float* feature0 = &descriptors[fsize*i]; - float* feature = &tempFeature[0]; - int x, y, j; - - if( !locations.empty() ) - { - pt = locations[i]; - if( pt.x < border || pt.x >= img.cols - border || - pt.y < border || pt.y >= img.rows - border ) - { - for( j = 0; j < fsize; j++ ) - feature0[j] = 0.f; - continue; - } - } - else - pt = Point((i % gridSize.width)*winStride.width + border, - (i / gridSize.width)*winStride.height + border); - - SSD(img, pt, ssd); - - // Determine in the local neighborhood the largest difference and use for normalization - float var_noise = 1000.f; - for( y = -1; y <= 1 ; y++ ) - for( x = -1 ; x <= 1 ; x++ ) - var_noise = std::max(var_noise, ssd.at(largeSize/2+y, largeSize/2+x)); - - for( j = 0; j <= fsize; j++ ) - feature[j] = FLT_MAX; - - // Derive feature vector before exp(-x) computation - // Idea: for all x,a >= 0, a=const. we have: - // max [ exp( -x / a) ] = exp ( -min(x) / a ) - // Thus, determine min(ssd) and store in feature[...] - for( y = 0; y < ssd.rows; y++ ) - { - const schar *mappingMaskPtr = mappingMask.ptr(y); - const float *ssdPtr = ssd.ptr(y); - for( x = 0 ; x < ssd.cols; x++ ) - { - int index = mappingMaskPtr[x]; - feature[index] = std::min(feature[index], ssdPtr[x]); - } - } - - var_noise = -1.f/var_noise; - for( j = 0; j < fsize; j++ ) - feature0[j] = feature[j]*var_noise; - Mat _f(1, fsize, CV_32F, feature0); - cv::exp(_f, _f); - } -} - -void SelfSimDescriptor::computeLogPolarMapping(Mat& mappingMask) const -{ - mappingMask.create(largeSize, largeSize, CV_8S); - - // What we want is - // log_m (radius) = numberOfDistanceBuckets - // <==> log_10 (radius) / log_10 (m) = numberOfDistanceBuckets - // <==> log_10 (radius) / numberOfDistanceBuckets = log_10 (m) - // <==> m = 10 ^ log_10(m) = 10 ^ [log_10 (radius) / numberOfDistanceBuckets] - // - int radius = largeSize/2, angleBucketSize = 360 / numberOfAngles; - int fsize = (int)getDescriptorSize(); - double inv_log10m = (double)numberOfDistanceBuckets/log10((double)radius); - - for (int y=-radius ; y<=radius ; y++) - { - schar* mrow = mappingMask.ptr(y+radius); - for (int x=-radius ; x<=radius ; x++) - { - int index = fsize; - float dist = (float)std::sqrt((float)x*x + (float)y*y); - int distNo = dist > 0 ? cvRound(log10(dist)*inv_log10m) : 0; - if( startDistanceBucket <= distNo && distNo < numberOfDistanceBuckets ) - { - float angle = std::atan2( (float)y, (float)x ) / (float)CV_PI * 180.0f; - if (angle < 0) angle += 360.0f; - int angleInt = (cvRound(angle) + angleBucketSize/2) % 360; - int angleIndex = angleInt / angleBucketSize; - index = (distNo-startDistanceBucket)*numberOfAngles + angleIndex; - } - mrow[x + radius] = saturate_cast(index); - } - } -} - -} diff --git a/modules/contrib/src/spinimages.cpp b/modules/contrib/src/spinimages.cpp deleted file mode 100644 index 747bf3e..0000000 --- a/modules/contrib/src/spinimages.cpp +++ /dev/null @@ -1,1231 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include -#include -#include -#include -#include -#include - -using namespace cv; -using namespace std; - -/********************************* local utility *********************************/ - -namespace cv -{ - using std::log; - using std::max; - using std::min; - using std::sqrt; -} -namespace -{ - const static Scalar colors[] = - { - CV_RGB(255, 0, 0), - CV_RGB( 0, 255, 0), - CV_RGB( 0, 0, 255), - CV_RGB(255, 255, 0), - CV_RGB(255, 0, 255), - CV_RGB( 0, 255, 255), - CV_RGB(255, 127, 127), - CV_RGB(127, 127, 255), - CV_RGB(127, 255, 127), - CV_RGB(255, 255, 127), - CV_RGB(127, 255, 255), - CV_RGB(255, 127, 255), - CV_RGB(127, 0, 0), - CV_RGB( 0, 127, 0), - CV_RGB( 0, 0, 127), - CV_RGB(127, 127, 0), - CV_RGB(127, 0, 127), - CV_RGB( 0, 127, 127) - }; - size_t colors_mum = sizeof(colors)/sizeof(colors[0]); - -template inline void _iota(FwIt first, FwIt last, T value) -{ - while(first != last) *first++ = value++; -} - -void computeNormals( const Octree& Octree, const vector& centers, vector& normals, - vector& mask, float normalRadius, int minNeighbors = 20) -{ - size_t normals_size = centers.size(); - normals.resize(normals_size); - - if (mask.size() != normals_size) - { - size_t m = mask.size(); - mask.resize(normals_size); - if (normals_size > m) - for(; m < normals_size; ++m) - mask[m] = 1; - } - - vector buffer; - buffer.reserve(128); - SVD svd; - - const static Point3f zero(0.f, 0.f, 0.f); - - for(size_t n = 0; n < normals_size; ++n) - { - if (mask[n] == 0) - continue; - - const Point3f& center = centers[n]; - Octree.getPointsWithinSphere(center, normalRadius, buffer); - - int buf_size = (int)buffer.size(); - if (buf_size < minNeighbors) - { - normals[n] = Mesh3D::allzero; - mask[n] = 0; - continue; - } - - //find the mean point for normalization - Point3f mean(Mesh3D::allzero); - for(int i = 0; i < buf_size; ++i) - mean += buffer[i]; - - mean.x /= buf_size; - mean.y /= buf_size; - mean.z /= buf_size; - - double pxpx = 0; - double pypy = 0; - double pzpz = 0; - - double pxpy = 0; - double pxpz = 0; - double pypz = 0; - - for(int i = 0; i < buf_size; ++i) - { - const Point3f& p = buffer[i]; - - pxpx += (p.x - mean.x) * (p.x - mean.x); - pypy += (p.y - mean.y) * (p.y - mean.y); - pzpz += (p.z - mean.z) * (p.z - mean.z); - - pxpy += (p.x - mean.x) * (p.y - mean.y); - pxpz += (p.x - mean.x) * (p.z - mean.z); - pypz += (p.y - mean.y) * (p.z - mean.z); - } - - //create and populate matrix with normalized nbrs - double M_data[] = { pxpx, pxpy, pxpz, /**/ pxpy, pypy, pypz, /**/ pxpz, pypz, pzpz }; - Mat M(3, 3, CV_64F, M_data); - - svd(M, SVD::MODIFY_A); - - /*normals[n] = Point3f( (float)((double*)svd.vt.data)[6], - (float)((double*)svd.vt.data)[7], - (float)((double*)svd.vt.data)[8] );*/ - normals[n] = reinterpret_cast(svd.vt.data)[2]; - mask[n] = 1; - } -} - -void initRotationMat(const Point3f& n, float out[9]) -{ - double pitch = atan2(n.x, n.z); - double pmat[] = { cos(pitch), 0, -sin(pitch) , - 0 , 1, 0 , - sin(pitch), 0, cos(pitch) }; - - double roll = atan2((double)n.y, n.x * pmat[3*2+0] + n.z * pmat[3*2+2]); - - double rmat[] = { 1, 0, 0, - 0, cos(roll), -sin(roll) , - 0, sin(roll), cos(roll) }; - - for(int i = 0; i < 3; ++i) - for(int j = 0; j < 3; ++j) - out[3*i+j] = (float)(rmat[3*i+0]*pmat[3*0+j] + - rmat[3*i+1]*pmat[3*1+j] + rmat[3*i+2]*pmat[3*2+j]); -} - -void transform(const Point3f& in, float matrix[9], Point3f& out) -{ - out.x = in.x * matrix[3*0+0] + in.y * matrix[3*0+1] + in.z * matrix[3*0+2]; - out.y = in.x * matrix[3*1+0] + in.y * matrix[3*1+1] + in.z * matrix[3*1+2]; - out.z = in.x * matrix[3*2+0] + in.y * matrix[3*2+1] + in.z * matrix[3*2+2]; -} - -#if CV_SSE2 -void convertTransformMatrix(const float* matrix, float* sseMatrix) -{ - sseMatrix[0] = matrix[0]; sseMatrix[1] = matrix[3]; sseMatrix[2] = matrix[6]; sseMatrix[3] = 0; - sseMatrix[4] = matrix[1]; sseMatrix[5] = matrix[4]; sseMatrix[6] = matrix[7]; sseMatrix[7] = 0; - sseMatrix[8] = matrix[2]; sseMatrix[9] = matrix[5]; sseMatrix[10] = matrix[8]; sseMatrix[11] = 0; -} - -inline __m128 transformSSE(const __m128* matrix, const __m128& in) -{ - assert(((size_t)matrix & 15) == 0); - __m128 a0 = _mm_mul_ps(_mm_load_ps((float*)(matrix+0)), _mm_shuffle_ps(in,in,_MM_SHUFFLE(0,0,0,0))); - __m128 a1 = _mm_mul_ps(_mm_load_ps((float*)(matrix+1)), _mm_shuffle_ps(in,in,_MM_SHUFFLE(1,1,1,1))); - __m128 a2 = _mm_mul_ps(_mm_load_ps((float*)(matrix+2)), _mm_shuffle_ps(in,in,_MM_SHUFFLE(2,2,2,2))); - - return _mm_add_ps(_mm_add_ps(a0,a1),a2); -} - -inline __m128i _mm_mullo_epi32_emul(const __m128i& a, __m128i& b) -{ - __m128i pack = _mm_packs_epi32(a, a); - return _mm_unpacklo_epi16(_mm_mullo_epi16(pack, b), _mm_mulhi_epi16(pack, b)); -} - -#endif - -void computeSpinImages( const Octree& Octree, const vector& points, const vector& normals, - vector& mask, Mat& spinImages, int imageWidth, float binSize) -{ - float pixelsPerMeter = 1.f / binSize; - float support = imageWidth * binSize; - - assert(normals.size() == points.size()); - assert(mask.size() == points.size()); - - size_t points_size = points.size(); - mask.resize(points_size); - - int height = imageWidth; - int width = imageWidth; - - spinImages.create( (int)points_size, width*height, CV_32F ); - - int nthreads = getNumThreads(); - int i; - - vector< vector > pointsInSpherePool(nthreads); - for(i = 0; i < nthreads; i++) - pointsInSpherePool[i].reserve(2048); - - float halfSuppport = support / 2; - float searchRad = support * sqrt(5.f) / 2; // sqrt(sup*sup + (sup/2) * (sup/2) ) - -#ifdef _OPENMP - #pragma omp parallel for num_threads(nthreads) -#endif - for(i = 0; i < (int)points_size; ++i) - { - if (mask[i] == 0) - continue; - - int t = cvGetThreadNum(); - vector& pointsInSphere = pointsInSpherePool[t]; - - const Point3f& center = points[i]; - Octree.getPointsWithinSphere(center, searchRad, pointsInSphere); - - size_t inSphere_size = pointsInSphere.size(); - if (inSphere_size == 0) - { - mask[i] = 0; - continue; - } - - const Point3f& normal = normals[i]; - - float rotmat[9]; - initRotationMat(normal, rotmat); - Point3f new_center; - transform(center, rotmat, new_center); - - Mat spinImage = spinImages.row(i).reshape(1, height); - float* spinImageData = (float*)spinImage.data; - int step = width; - spinImage = Scalar(0.); - - float alpha, beta; - size_t j = 0; -#if CV_SSE2 - if (inSphere_size > 4 && checkHardwareSupport(CV_CPU_SSE2)) - { - __m128 rotmatSSE[3]; - convertTransformMatrix(rotmat, (float*)rotmatSSE); - - __m128 center_x4 = _mm_set1_ps(new_center.x); - __m128 center_y4 = _mm_set1_ps(new_center.y); - __m128 center_z4 = _mm_set1_ps(new_center.z + halfSuppport); - __m128 ppm4 = _mm_set1_ps(pixelsPerMeter); - __m128i height4m1 = _mm_set1_epi32(spinImage.rows-1); - __m128i width4m1 = _mm_set1_epi32(spinImage.cols-1); - assert( spinImage.step <= 0xffff ); - __m128i step4 = _mm_set1_epi16((short)step); - __m128i zero4 = _mm_setzero_si128(); - __m128i one4i = _mm_set1_epi32(1); - __m128 zero4f = _mm_setzero_ps(); - __m128 one4f = _mm_set1_ps(1.f); - //__m128 two4f = _mm_set1_ps(2.f); - int CV_DECL_ALIGNED(16) o[4]; - - for (; j <= inSphere_size - 5; j += 4) - { - __m128 pt0 = transformSSE(rotmatSSE, _mm_loadu_ps((float*)&pointsInSphere[j+0])); // x0 y0 z0 . - __m128 pt1 = transformSSE(rotmatSSE, _mm_loadu_ps((float*)&pointsInSphere[j+1])); // x1 y1 z1 . - __m128 pt2 = transformSSE(rotmatSSE, _mm_loadu_ps((float*)&pointsInSphere[j+2])); // x2 y2 z2 . - __m128 pt3 = transformSSE(rotmatSSE, _mm_loadu_ps((float*)&pointsInSphere[j+3])); // x3 y3 z3 . - - __m128 z0 = _mm_unpackhi_ps(pt0, pt1); // z0 z1 . . - __m128 z1 = _mm_unpackhi_ps(pt2, pt3); // z2 z3 . . - __m128 beta4 = _mm_sub_ps(center_z4, _mm_movelh_ps(z0, z1)); // b0 b1 b2 b3 - - __m128 xy0 = _mm_unpacklo_ps(pt0, pt1); // x0 x1 y0 y1 - __m128 xy1 = _mm_unpacklo_ps(pt2, pt3); // x2 x3 y2 y3 - __m128 x4 = _mm_movelh_ps(xy0, xy1); // x0 x1 x2 x3 - __m128 y4 = _mm_movehl_ps(xy1, xy0); // y0 y1 y2 y3 - - x4 = _mm_sub_ps(x4, center_x4); - y4 = _mm_sub_ps(y4, center_y4); - __m128 alpha4 = _mm_sqrt_ps(_mm_add_ps(_mm_mul_ps(x4,x4),_mm_mul_ps(y4,y4))); - - __m128 n1f4 = _mm_mul_ps( beta4, ppm4); /* beta4 float */ - __m128 n2f4 = _mm_mul_ps(alpha4, ppm4); /* alpha4 float */ - - /* floor */ - __m128i n1 = _mm_sub_epi32(_mm_cvttps_epi32( _mm_add_ps( n1f4, one4f ) ), one4i); - __m128i n2 = _mm_sub_epi32(_mm_cvttps_epi32( _mm_add_ps( n2f4, one4f ) ), one4i); - - __m128 f1 = _mm_sub_ps( n1f4, _mm_cvtepi32_ps(n1) ); /* { beta4 } */ - __m128 f2 = _mm_sub_ps( n2f4, _mm_cvtepi32_ps(n2) ); /* { alpha4 } */ - - __m128 f1f2 = _mm_mul_ps(f1, f2); // f1 * f2 - __m128 omf1omf2 = _mm_add_ps(_mm_sub_ps(_mm_sub_ps(one4f, f2), f1), f1f2); // (1-f1) * (1-f2) - - __m128i _mask = _mm_and_si128( - _mm_andnot_si128(_mm_cmpgt_epi32(zero4, n1), _mm_cmpgt_epi32(height4m1, n1)), - _mm_andnot_si128(_mm_cmpgt_epi32(zero4, n2), _mm_cmpgt_epi32(width4m1, n2))); - - __m128 maskf = _mm_cmpneq_ps(_mm_cvtepi32_ps(_mask), zero4f); - - __m128 v00 = _mm_and_ps( omf1omf2 , maskf); // a00 b00 c00 d00 - __m128 v01 = _mm_and_ps( _mm_sub_ps( f2, f1f2 ), maskf); // a01 b01 c01 d01 - __m128 v10 = _mm_and_ps( _mm_sub_ps( f1, f1f2 ), maskf); // a10 b10 c10 d10 - __m128 v11 = _mm_and_ps( f1f2 , maskf); // a11 b11 c11 d11 - - __m128i ofs4 = _mm_and_si128(_mm_add_epi32(_mm_mullo_epi32_emul(n1, step4), n2), _mask); - _mm_store_si128((__m128i*)o, ofs4); - - __m128 t0 = _mm_unpacklo_ps(v00, v01); // a00 a01 b00 b01 - __m128 t1 = _mm_unpacklo_ps(v10, v11); // a10 a11 b10 b11 - __m128 u0 = _mm_movelh_ps(t0, t1); // a00 a01 a10 a11 - __m128 u1 = _mm_movehl_ps(t1, t0); // b00 b01 b10 b11 - - __m128 x0 = _mm_loadl_pi(u0, (__m64*)(spinImageData+o[0])); // x00 x01 - x0 = _mm_loadh_pi(x0, (__m64*)(spinImageData+o[0]+step)); // x00 x01 x10 x11 - x0 = _mm_add_ps(x0, u0); - _mm_storel_pi((__m64*)(spinImageData+o[0]), x0); - _mm_storeh_pi((__m64*)(spinImageData+o[0]+step), x0); - - x0 = _mm_loadl_pi(x0, (__m64*)(spinImageData+o[1])); // y00 y01 - x0 = _mm_loadh_pi(x0, (__m64*)(spinImageData+o[1]+step)); // y00 y01 y10 y11 - x0 = _mm_add_ps(x0, u1); - _mm_storel_pi((__m64*)(spinImageData+o[1]), x0); - _mm_storeh_pi((__m64*)(spinImageData+o[1]+step), x0); - - t0 = _mm_unpackhi_ps(v00, v01); // c00 c01 d00 d01 - t1 = _mm_unpackhi_ps(v10, v11); // c10 c11 d10 d11 - u0 = _mm_movelh_ps(t0, t1); // c00 c01 c10 c11 - u1 = _mm_movehl_ps(t1, t0); // d00 d01 d10 d11 - - x0 = _mm_loadl_pi(x0, (__m64*)(spinImageData+o[2])); // z00 z01 - x0 = _mm_loadh_pi(x0, (__m64*)(spinImageData+o[2]+step)); // z00 z01 z10 z11 - x0 = _mm_add_ps(x0, u0); - _mm_storel_pi((__m64*)(spinImageData+o[2]), x0); - _mm_storeh_pi((__m64*)(spinImageData+o[2]+step), x0); - - x0 = _mm_loadl_pi(x0, (__m64*)(spinImageData+o[3])); // w00 w01 - x0 = _mm_loadh_pi(x0, (__m64*)(spinImageData+o[3]+step)); // w00 w01 w10 w11 - x0 = _mm_add_ps(x0, u1); - _mm_storel_pi((__m64*)(spinImageData+o[3]), x0); - _mm_storeh_pi((__m64*)(spinImageData+o[3]+step), x0); - } - } -#endif - for (; j < inSphere_size; ++j) - { - Point3f pt; - transform(pointsInSphere[j], rotmat, pt); - - beta = halfSuppport - (pt.z - new_center.z); - if (beta >= support || beta < 0) - continue; - - alpha = sqrt( (new_center.x - pt.x) * (new_center.x - pt.x) + - (new_center.y - pt.y) * (new_center.y - pt.y) ); - - float n1f = beta * pixelsPerMeter; - float n2f = alpha * pixelsPerMeter; - - int n1 = cvFloor(n1f); - int n2 = cvFloor(n2f); - - float f1 = n1f - n1; - float f2 = n2f - n2; - - if ((unsigned)n1 >= (unsigned)(spinImage.rows-1) || - (unsigned)n2 >= (unsigned)(spinImage.cols-1)) - continue; - - float *cellptr = spinImageData + step * n1 + n2; - float f1f2 = f1*f2; - cellptr[0] += 1 - f1 - f2 + f1f2; - cellptr[1] += f2 - f1f2; - cellptr[step] += f1 - f1f2; - cellptr[step+1] += f1f2; - } - mask[i] = 1; - } -} - -} - -/********************************* Mesh3D *********************************/ - -const Point3f cv::Mesh3D::allzero(0.f, 0.f, 0.f); - -cv::Mesh3D::Mesh3D() { resolution = -1; } -cv::Mesh3D::Mesh3D(const vector& _vtx) -{ - resolution = -1; - vtx.resize(_vtx.size()); - std::copy(_vtx.begin(), _vtx.end(), vtx.begin()); -} -cv::Mesh3D::~Mesh3D() {} - -void cv::Mesh3D::buildOctree() { if (octree.getNodes().empty()) octree.buildTree(vtx); } -void cv::Mesh3D::clearOctree(){ octree = Octree(); } - -float cv::Mesh3D::estimateResolution(float /*tryRatio*/) -{ -#if 0 - const int neighbors = 3; - const int minReasonable = 10; - - int tryNum = static_cast(tryRatio * vtx.size()); - tryNum = min(max(tryNum, minReasonable), (int)vtx.size()); - - CvMat desc = cvMat((int)vtx.size(), 3, CV_32F, &vtx[0]); - CvFeatureTree* tr = cvCreateKDTree(&desc); - - vector dist(tryNum * neighbors); - vector inds(tryNum * neighbors); - vector query; - - RNG& rng = theRNG(); - for(int i = 0; i < tryNum; ++i) - query.push_back(vtx[rng.next() % vtx.size()]); - - CvMat cvinds = cvMat( (int)tryNum, neighbors, CV_32S, &inds[0] ); - CvMat cvdist = cvMat( (int)tryNum, neighbors, CV_64F, &dist[0] ); - CvMat cvquery = cvMat( (int)tryNum, 3, CV_32F, &query[0] ); - cvFindFeatures(tr, &cvquery, &cvinds, &cvdist, neighbors, 50); - cvReleaseFeatureTree(tr); - - const int invalid_dist = -2; - for(int i = 0; i < tryNum; ++i) - if (inds[i] == -1) - dist[i] = invalid_dist; - - dist.resize(remove(dist.begin(), dist.end(), invalid_dist) - dist.begin()); - - sort(dist, less()); - - return resolution = (float)dist[ dist.size() / 2 ]; -#else - CV_Error(CV_StsNotImplemented, ""); - return 1.f; -#endif -} - - -void cv::Mesh3D::computeNormals(float normalRadius, int minNeighbors) -{ - buildOctree(); - vector mask; - ::computeNormals(octree, vtx, normals, mask, normalRadius, minNeighbors); -} - -void cv::Mesh3D::computeNormals(const vector& subset, float normalRadius, int minNeighbors) -{ - buildOctree(); - vector mask(vtx.size(), 0); - for(size_t i = 0; i < subset.size(); ++i) - mask[subset[i]] = 1; - ::computeNormals(octree, vtx, normals, mask, normalRadius, minNeighbors); -} - -void cv::Mesh3D::writeAsVrml(const String& file, const vector& _colors) const -{ - ofstream ofs(file.c_str()); - - ofs << "#VRML V2.0 utf8" << endl; - ofs << "Shape" << std::endl << "{" << endl; - ofs << "geometry PointSet" << endl << "{" << endl; - ofs << "coord Coordinate" << endl << "{" << endl; - ofs << "point[" << endl; - - for(size_t i = 0; i < vtx.size(); ++i) - ofs << vtx[i].x << " " << vtx[i].y << " " << vtx[i].z << endl; - - ofs << "]" << endl; //point[ - ofs << "}" << endl; //Coordinate{ - - if (vtx.size() == _colors.size()) - { - ofs << "color Color" << endl << "{" << endl; - ofs << "color[" << endl; - - for(size_t i = 0; i < _colors.size(); ++i) - ofs << (float)_colors[i][2] << " " << (float)_colors[i][1] << " " << (float)_colors[i][0] << endl; - - ofs << "]" << endl; //color[ - ofs << "}" << endl; //color Color{ - } - - ofs << "}" << endl; //PointSet{ - ofs << "}" << endl; //Shape{ -} - - -/********************************* SpinImageModel *********************************/ - - -bool cv::SpinImageModel::spinCorrelation(const Mat& spin1, const Mat& spin2, float lambda, float& result) -{ - struct Math { static double atanh(double x) { return 0.5 * std::log( (1 + x) / (1 - x) ); } }; - - const float* s1 = spin1.ptr(); - const float* s2 = spin2.ptr(); - - int spin_sz = spin1.cols * spin1.rows; - double sum1 = 0.0, sum2 = 0.0, sum12 = 0.0, sum11 = 0.0, sum22 = 0.0; - - int N = 0; - int i = 0; -#if CV_SSE2//____________TEMPORARY_DISABLED_____________ - float CV_DECL_ALIGNED(16) su1[4], su2[4], su11[4], su22[4], su12[4], n[4]; - - __m128 zerof4 = _mm_setzero_ps(); - __m128 onef4 = _mm_set1_ps(1.f); - __m128 Nf4 = zerof4; - __m128 sum1f4 = zerof4; - __m128 sum2f4 = zerof4; - __m128 sum11f4 = zerof4; - __m128 sum22f4 = zerof4; - __m128 sum12f4 = zerof4; - for(; i < spin_sz - 5; i += 4) - { - __m128 v1f4 = _mm_loadu_ps(s1 + i); - __m128 v2f4 = _mm_loadu_ps(s2 + i); - - __m128 mskf4 = _mm_and_ps(_mm_cmpneq_ps(v1f4, zerof4), _mm_cmpneq_ps(v2f4, zerof4)); - if( !_mm_movemask_ps(mskf4) ) - continue; - - Nf4 = _mm_add_ps(Nf4, _mm_and_ps(onef4, mskf4)); - - v1f4 = _mm_and_ps(v1f4, mskf4); - v2f4 = _mm_and_ps(v2f4, mskf4); - - sum1f4 = _mm_add_ps(sum1f4, v1f4); - sum2f4 = _mm_add_ps(sum2f4, v2f4); - sum11f4 = _mm_add_ps(sum11f4, _mm_mul_ps(v1f4, v1f4)); - sum22f4 = _mm_add_ps(sum22f4, _mm_mul_ps(v2f4, v2f4)); - sum12f4 = _mm_add_ps(sum12f4, _mm_mul_ps(v1f4, v2f4)); - } - _mm_store_ps( su1, sum1f4 ); - _mm_store_ps( su2, sum2f4 ); - _mm_store_ps(su11, sum11f4 ); - _mm_store_ps(su22, sum22f4 ); - _mm_store_ps(su12, sum12f4 ); - _mm_store_ps(n, Nf4 ); - - N = static_cast(n[0] + n[1] + n[2] + n[3]); - sum1 = su1[0] + su1[1] + su1[2] + su1[3]; - sum2 = su2[0] + su2[1] + su2[2] + su2[3]; - sum11 = su11[0] + su11[1] + su11[2] + su11[3]; - sum22 = su22[0] + su22[1] + su22[2] + su22[3]; - sum12 = su12[0] + su12[1] + su12[2] + su12[3]; -#endif - - for(; i < spin_sz; ++i) - { - float v1 = s1[i]; - float v2 = s2[i]; - - if( !v1 || !v2 ) - continue; - N++; - - sum1 += v1; - sum2 += v2; - sum11 += v1 * v1; - sum22 += v2 * v2; - sum12 += v1 * v2; - } - if( N < 4 ) - return false; - - double sum1sum1 = sum1 * sum1; - double sum2sum2 = sum2 * sum2; - - double Nsum12 = N * sum12; - double Nsum11 = N * sum11; - double Nsum22 = N * sum22; - - if (Nsum11 == sum1sum1 || Nsum22 == sum2sum2) - return false; - - double corr = (Nsum12 - sum1 * sum2) / sqrt( (Nsum11 - sum1sum1) * (Nsum22 - sum2sum2) ); - double atanh = Math::atanh(corr); - result = (float)( atanh * atanh - lambda * ( 1.0 / (N - 3) ) ); - return true; -} - -inline Point2f cv::SpinImageModel::calcSpinMapCoo(const Point3f& p, const Point3f& v, const Point3f& n) -{ - /*Point3f PmV(p.x - v.x, p.y - v.y, p.z - v.z); - float normalNorm = (float)norm(n); - float beta = PmV.dot(n) / normalNorm; - float pmcNorm = (float)norm(PmV); - float alpha = sqrt( pmcNorm * pmcNorm - beta * beta); - return Point2f(alpha, beta);*/ - - float pmv_x = p.x - v.x, pmv_y = p.y - v.y, pmv_z = p.z - v.z; - - float beta = (pmv_x * n.x + pmv_y + n.y + pmv_z * n.z) / sqrt(n.x * n.x + n.y * n.y + n.z * n.z); - float alpha = sqrt( pmv_x * pmv_x + pmv_y * pmv_y + pmv_z * pmv_z - beta * beta); - return Point2f(alpha, beta); -} - -inline float cv::SpinImageModel::geometricConsistency(const Point3f& pointScene1, const Point3f& normalScene1, - const Point3f& pointModel1, const Point3f& normalModel1, - const Point3f& pointScene2, const Point3f& normalScene2, - const Point3f& pointModel2, const Point3f& normalModel2) -{ - Point2f Sm2_to_m1, Ss2_to_s1; - Point2f Sm1_to_m2, Ss1_to_s2; - - double n_Sm2_to_m1 = norm(Sm2_to_m1 = calcSpinMapCoo(pointModel2, pointModel1, normalModel1)); - double n_Ss2_to_s1 = norm(Ss2_to_s1 = calcSpinMapCoo(pointScene2, pointScene1, normalScene1)); - - double gc21 = 2 * norm(Sm2_to_m1 - Ss2_to_s1) / (n_Sm2_to_m1 + n_Ss2_to_s1 ) ; - - double n_Sm1_to_m2 = norm(Sm1_to_m2 = calcSpinMapCoo(pointModel1, pointModel2, normalModel2)); - double n_Ss1_to_s2 = norm(Ss1_to_s2 = calcSpinMapCoo(pointScene1, pointScene2, normalScene2)); - - double gc12 = 2 * norm(Sm1_to_m2 - Ss1_to_s2) / (n_Sm1_to_m2 + n_Ss1_to_s2 ) ; - - return (float)max(gc12, gc21); -} - -inline float cv::SpinImageModel::groupingCreteria(const Point3f& pointScene1, const Point3f& normalScene1, - const Point3f& pointModel1, const Point3f& normalModel1, - const Point3f& pointScene2, const Point3f& normalScene2, - const Point3f& pointModel2, const Point3f& normalModel2, - float gamma) -{ - Point2f Sm2_to_m1, Ss2_to_s1; - Point2f Sm1_to_m2, Ss1_to_s2; - - float gamma05_inv = 0.5f/gamma; - - double n_Sm2_to_m1 = norm(Sm2_to_m1 = calcSpinMapCoo(pointModel2, pointModel1, normalModel1)); - double n_Ss2_to_s1 = norm(Ss2_to_s1 = calcSpinMapCoo(pointScene2, pointScene1, normalScene1)); - - double gc21 = 2 * norm(Sm2_to_m1 - Ss2_to_s1) / (n_Sm2_to_m1 + n_Ss2_to_s1 ); - double wgc21 = gc21 / (1 - exp( -(n_Sm2_to_m1 + n_Ss2_to_s1) * gamma05_inv ) ); - - double n_Sm1_to_m2 = norm(Sm1_to_m2 = calcSpinMapCoo(pointModel1, pointModel2, normalModel2)); - double n_Ss1_to_s2 = norm(Ss1_to_s2 = calcSpinMapCoo(pointScene1, pointScene2, normalScene2)); - - double gc12 = 2 * norm(Sm1_to_m2 - Ss1_to_s2) / (n_Sm1_to_m2 + n_Ss1_to_s2 ); - double wgc12 = gc12 / (1 - exp( -(n_Sm1_to_m2 + n_Ss1_to_s2) * gamma05_inv ) ); - - return (float)max(wgc12, wgc21); -} - - -cv::SpinImageModel::SpinImageModel(const Mesh3D& _mesh) : mesh(_mesh) , out(0) -{ - if (mesh.vtx.empty()) - throw Mesh3D::EmptyMeshException(); - defaultParams(); -} -cv::SpinImageModel::SpinImageModel() : out(0) { defaultParams(); } -cv::SpinImageModel::~SpinImageModel() {} - -void cv::SpinImageModel::setLogger(ostream* log) { out = log; } - -void cv::SpinImageModel::defaultParams() -{ - normalRadius = 0.f; - minNeighbors = 20; - - binSize = 0.f; /* autodetect according to mesh resolution */ - imageWidth = 32; - - lambda = 0.f; /* autodetect according to medan non zero images bin */ - gamma = 0.f; /* autodetect according to mesh resolution */ - - T_GeometriccConsistency = 0.25f; - T_GroupingCorespondances = 0.25f; -} - -Mat cv::SpinImageModel::packRandomScaledSpins(bool separateScale, size_t xCount, size_t yCount) const -{ - int spinNum = (int)getSpinCount(); - int num = min(spinNum, (int)(xCount * yCount)); - - if (num == 0) - return Mat(); - - RNG& rng = theRNG(); - - vector spins; - for(int i = 0; i < num; ++i) - spins.push_back(getSpinImage( rng.next() % spinNum ).reshape(1, imageWidth)); - - if (separateScale) - for(int i = 0; i < num; ++i) - { - double max; - Mat spin8u; - minMaxLoc(spins[i], 0, &max); - spins[i].convertTo(spin8u, CV_8U, -255.0/max, 255.0); - spins[i] = spin8u; - } - else - { - double totalMax = 0; - for(int i = 0; i < num; ++i) - { - double m; - minMaxLoc(spins[i], 0, &m); - totalMax = max(m, totalMax); - } - - for(int i = 0; i < num; ++i) - { - Mat spin8u; - spins[i].convertTo(spin8u, CV_8U, -255.0/totalMax, 255.0); - spins[i] = spin8u; - } - } - - int sz = spins.front().cols; - - Mat result((int)(yCount * sz + (yCount - 1)), (int)(xCount * sz + (xCount - 1)), CV_8UC3); - result = colors[(static_cast(cvGetTickCount()/cvGetTickFrequency())/1000) % colors_mum]; - - int pos = 0; - for(int y = 0; y < (int)yCount; ++y) - for(int x = 0; x < (int)xCount; ++x) - if (pos < num) - { - int starty = (y + 0) * sz + y; - int endy = (y + 1) * sz + y; - - int startx = (x + 0) * sz + x; - int endx = (x + 1) * sz + x; - - Mat color; - cvtColor(spins[pos++], color, CV_GRAY2BGR); - Mat roi = result(Range(starty, endy), Range(startx, endx)); - color.copyTo(roi); - } - return result; -} - -void cv::SpinImageModel::selectRandomSubset(float ratio) -{ - ratio = min(max(ratio, 0.f), 1.f); - - size_t vtxSize = mesh.vtx.size(); - size_t setSize = static_cast(vtxSize * ratio); - - if (setSize == 0) - { - subset.clear(); - } - else if (setSize == vtxSize) - { - subset.resize(vtxSize); - _iota(subset.begin(), subset.end(), 0); - } - else - { - RNG& rnd = theRNG(); - - vector left(vtxSize); - _iota(left.begin(), left.end(), (size_t)0); - - subset.resize(setSize); - for(size_t i = 0; i < setSize; ++i) - { - int pos = rnd.next() % (int)left.size(); - subset[i] = (int)left[pos]; - - left[pos] = left.back(); - left.resize(left.size() - 1); - } - sort(subset, less()); - } -} - -void cv::SpinImageModel::setSubset(const vector& ss) -{ - subset = ss; -} - -void cv::SpinImageModel::repackSpinImages(const vector& mask, Mat& _spinImages, bool reAlloc) const -{ - if (reAlloc) - { - size_t spinCount = mask.size() - count(mask.begin(), mask.end(), (uchar)0); - Mat newImgs((int)spinCount, _spinImages.cols, _spinImages.type()); - - int pos = 0; - for(size_t t = 0; t < mask.size(); ++t) - if (mask[t]) - { - Mat row = newImgs.row(pos++); - _spinImages.row((int)t).copyTo(row); - } - _spinImages = newImgs; - } - else - { - int last = (int)mask.size(); - - int dest = (int)(find(mask.begin(), mask.end(), (uchar)0) - mask.begin()); - if (dest == last) - return; - - int first = dest + 1; - for (; first != last; ++first) - if (mask[first] != 0) - { - Mat row = _spinImages.row(dest); - _spinImages.row(first).copyTo(row); - ++dest; - } - _spinImages = _spinImages.rowRange(0, dest); - } -} - -void cv::SpinImageModel::compute() -{ - /* estimate binSize */ - if (binSize == 0.f) - { - if (mesh.resolution == -1.f) - mesh.estimateResolution(); - binSize = mesh.resolution; - } - /* estimate normalRadius */ - normalRadius = normalRadius != 0.f ? normalRadius : binSize * imageWidth / 2; - - mesh.buildOctree(); - if (subset.empty()) - { - mesh.computeNormals(normalRadius, minNeighbors); - subset.resize(mesh.vtx.size()); - _iota(subset.begin(), subset.end(), 0); - } - else - mesh.computeNormals(subset, normalRadius, minNeighbors); - - vector mask(mesh.vtx.size(), 0); - for(size_t i = 0; i < subset.size(); ++i) - if (mesh.normals[subset[i]] == Mesh3D::allzero) - subset[i] = -1; - else - mask[subset[i]] = 1; - subset.resize( remove(subset.begin(), subset.end(), -1) - subset.begin() ); - - vector vtx; - vector normals; - for(size_t i = 0; i < mask.size(); ++i) - if(mask[i]) - { - vtx.push_back(mesh.vtx[i]); - normals.push_back(mesh.normals[i]); - } - - vector spinMask(vtx.size(), 1); - computeSpinImages( mesh.octree, vtx, normals, spinMask, spinImages, imageWidth, binSize); - repackSpinImages(spinMask, spinImages); - - size_t mask_pos = 0; - for(size_t i = 0; i < mask.size(); ++i) - if(mask[i]) - if (spinMask[mask_pos++] == 0) - subset.resize( remove(subset.begin(), subset.end(), (int)i) - subset.begin() ); -} - -void cv::SpinImageModel::matchSpinToModel(const Mat& spin, vector& indeces, vector& corrCoeffs, bool useExtremeOutliers) const -{ - const SpinImageModel& model = *this; - - indeces.clear(); - corrCoeffs.clear(); - - vector corrs(model.spinImages.rows); - vector masks(model.spinImages.rows); - vector cleanCorrs; - cleanCorrs.reserve(model.spinImages.rows); - - for(int i = 0; i < model.spinImages.rows; ++i) - { - masks[i] = spinCorrelation(spin, model.spinImages.row(i), model.lambda, corrs[i]); - if (masks[i]) - cleanCorrs.push_back(corrs[i]); - } - - /* Filtering by measure histogram */ - size_t total = cleanCorrs.size(); - if(total < 5) - return; - - sort(cleanCorrs, less()); - - float lower_fourth = cleanCorrs[(1 * total) / 4 - 1]; - float upper_fourth = cleanCorrs[(3 * total) / 4 - 0]; - float fourth_spread = upper_fourth - lower_fourth; - - //extreme or moderate? - float coef = useExtremeOutliers ? 3.0f : 1.5f; - - float histThresHi = upper_fourth + coef * fourth_spread; - //float histThresLo = lower_fourth - coef * fourth_spread; - - for(size_t i = 0; i < corrs.size(); ++i) - if (masks[i]) - if (/* corrs[i] < histThresLo || */ corrs[i] > histThresHi) - { - indeces.push_back((int)i); - corrCoeffs.push_back(corrs[i]); - } -} - -namespace -{ - -struct Match -{ - int sceneInd; - int modelInd; - float measure; - - Match(){} - Match(int sceneIndex, int modelIndex, float coeff) : sceneInd(sceneIndex), modelInd(modelIndex), measure(coeff) {} - operator float() const { return measure; } -}; - -typedef set group_t; -typedef group_t::iterator iter; -typedef group_t::const_iterator citer; - -struct WgcHelper -{ - const group_t& grp; - const Mat& mat; - WgcHelper(const group_t& group, const Mat& groupingMat) : grp(group), mat(groupingMat){} - float operator()(size_t leftInd) const { return Wgc(leftInd, grp); } - - /* Wgc( correspondence_C, group_{C1..Cn} ) = max_i=1..n_( Wgc(C, Ci) ) */ - float Wgc(const size_t corespInd, const group_t& group) const - { - const float* wgcLine = mat.ptr((int)corespInd); - float maximum = numeric_limits::min(); - - for(citer pos = group.begin(); pos != group.end(); ++pos) - maximum = max(wgcLine[*pos], maximum); - - return maximum; - } -private: - WgcHelper& operator=(const WgcHelper& helper); -}; - -} - - void cv::SpinImageModel::match(const SpinImageModel& scene, vector< vector >& result) -{ - if (mesh.vtx.empty()) - throw Mesh3D::EmptyMeshException(); - - result.clear(); - - SpinImageModel& model = *this; - const float infinity = numeric_limits::infinity(); - const float float_max = numeric_limits::max(); - - /* estimate gamma */ - if (model.gamma == 0.f) - { - if (model.mesh.resolution == -1.f) - model.mesh.estimateResolution(); - model.gamma = 4 * model.mesh.resolution; - } - - /* estimate lambda */ - if (model.lambda == 0.f) - { - vector nonzero(model.spinImages.rows); - for(int i = 0; i < model.spinImages.rows; ++i) - nonzero[i] = countNonZero(model.spinImages.row(i)); - sort(nonzero, less()); - model.lambda = static_cast( nonzero[ nonzero.size()/2 ] ) / 2; - } - - TickMeter corr_timer; - corr_timer.start(); - vector allMatches; - for(int i = 0; i < scene.spinImages.rows; ++i) - { - vector indeces; - vector coeffs; - matchSpinToModel(scene.spinImages.row(i), indeces, coeffs); - for(size_t t = 0; t < indeces.size(); ++t) - allMatches.push_back(Match(i, indeces[t], coeffs[t])); - - if (out) if (i % 100 == 0) *out << "Comparing scene spinimage " << i << " of " << scene.spinImages.rows << endl; - } - corr_timer.stop(); - if (out) *out << "Spin correlation time = " << corr_timer << endl; - if (out) *out << "Matches number = " << allMatches.size() << endl; - - if(allMatches.empty()) - return; - - /* filtering by similarity measure */ - const float fraction = 0.5f; - float maxMeasure = max_element(allMatches.begin(), allMatches.end(), less())->measure; - allMatches.erase( - remove_if(allMatches.begin(), allMatches.end(), bind2nd(less(), maxMeasure * fraction)), - allMatches.end()); - if (out) *out << "Matches number [filtered by similarity measure] = " << allMatches.size() << endl; - - int matchesSize = (int)allMatches.size(); - if(matchesSize == 0) - return; - - /* filtering by geometric consistency */ - for(int i = 0; i < matchesSize; ++i) - { - int consistNum = 1; - float gc = float_max; - - for(int j = 0; j < matchesSize; ++j) - if (i != j) - { - const Match& mi = allMatches[i]; - const Match& mj = allMatches[j]; - - if (mi.sceneInd == mj.sceneInd || mi.modelInd == mj.modelInd) - gc = float_max; - else - { - const Point3f& pointSceneI = scene.getSpinVertex(mi.sceneInd); - const Point3f& normalSceneI = scene.getSpinNormal(mi.sceneInd); - - const Point3f& pointModelI = model.getSpinVertex(mi.modelInd); - const Point3f& normalModelI = model.getSpinNormal(mi.modelInd); - - const Point3f& pointSceneJ = scene.getSpinVertex(mj.sceneInd); - const Point3f& normalSceneJ = scene.getSpinNormal(mj.sceneInd); - - const Point3f& pointModelJ = model.getSpinVertex(mj.modelInd); - const Point3f& normalModelJ = model.getSpinNormal(mj.modelInd); - - gc = geometricConsistency(pointSceneI, normalSceneI, pointModelI, normalModelI, - pointSceneJ, normalSceneJ, pointModelJ, normalModelJ); - } - - if (gc < model.T_GeometriccConsistency) - ++consistNum; - } - - - if (consistNum < matchesSize / 4) /* failed consistensy test */ - allMatches[i].measure = infinity; - } - allMatches.erase( - remove_if(allMatches.begin(), allMatches.end(), bind2nd(equal_to(), infinity)), - allMatches.end()); - if (out) *out << "Matches number [filtered by geometric consistency] = " << allMatches.size() << endl; - - - matchesSize = (int)allMatches.size(); - if(matchesSize == 0) - return; - - if (out) *out << "grouping ..." << endl; - - Mat groupingMat((int)matchesSize, (int)matchesSize, CV_32F); - groupingMat = Scalar(0); - - /* grouping */ - for(int j = 0; j < matchesSize; ++j) - for(int i = j + 1; i < matchesSize; ++i) - { - const Match& mi = allMatches[i]; - const Match& mj = allMatches[j]; - - if (mi.sceneInd == mj.sceneInd || mi.modelInd == mj.modelInd) - { - groupingMat.ptr(i)[j] = float_max; - groupingMat.ptr(j)[i] = float_max; - continue; - } - - const Point3f& pointSceneI = scene.getSpinVertex(mi.sceneInd); - const Point3f& normalSceneI = scene.getSpinNormal(mi.sceneInd); - - const Point3f& pointModelI = model.getSpinVertex(mi.modelInd); - const Point3f& normalModelI = model.getSpinNormal(mi.modelInd); - - const Point3f& pointSceneJ = scene.getSpinVertex(mj.sceneInd); - const Point3f& normalSceneJ = scene.getSpinNormal(mj.sceneInd); - - const Point3f& pointModelJ = model.getSpinVertex(mj.modelInd); - const Point3f& normalModelJ = model.getSpinNormal(mj.modelInd); - - float wgc = groupingCreteria(pointSceneI, normalSceneI, pointModelI, normalModelI, - pointSceneJ, normalSceneJ, pointModelJ, normalModelJ, - model.gamma); - - groupingMat.ptr(i)[j] = wgc; - groupingMat.ptr(j)[i] = wgc; - } - - group_t allMatchesInds; - for(int i = 0; i < matchesSize; ++i) - allMatchesInds.insert(i); - - vector buf(matchesSize); - float *buf_beg = &buf[0]; - vector groups; - - for(int g = 0; g < matchesSize; ++g) - { - if (out) if (g % 100 == 0) *out << "G = " << g << endl; - - group_t left = allMatchesInds; - group_t group; - - left.erase(g); - group.insert(g); - - for(;;) - { - size_t left_size = left.size(); - if (left_size == 0) - break; - - std::transform(left.begin(), left.end(), buf_beg, WgcHelper(group, groupingMat)); - size_t minInd = min_element(buf_beg, buf_beg + left_size) - buf_beg; - - if (buf[minInd] < model.T_GroupingCorespondances) /* can add corespondance to group */ - { - iter pos = left.begin(); - advance(pos, minInd); - - group.insert(*pos); - left.erase(pos); - } - else - break; - } - - if (group.size() >= 4) - groups.push_back(group); - } - - /* converting the data to final result */ - for(size_t i = 0; i < groups.size(); ++i) - { - const group_t& group = groups[i]; - - vector< Vec2i > outgrp; - for(citer pos = group.begin(); pos != group.end(); ++pos) - { - const Match& m = allMatches[*pos]; - outgrp.push_back(Vec2i(subset[m.modelInd], scene.subset[m.sceneInd])); - } - result.push_back(outgrp); - } -} - -cv::TickMeter::TickMeter() { reset(); } -int64 cv::TickMeter::getTimeTicks() const { return sumTime; } -double cv::TickMeter::getTimeMicro() const { return (double)getTimeTicks()/cvGetTickFrequency(); } -double cv::TickMeter::getTimeMilli() const { return getTimeMicro()*1e-3; } -double cv::TickMeter::getTimeSec() const { return getTimeMilli()*1e-3; } -int64 cv::TickMeter::getCounter() const { return counter; } -void cv::TickMeter::reset() {startTime = 0; sumTime = 0; counter = 0; } - -void cv::TickMeter::start(){ startTime = cvGetTickCount(); } -void cv::TickMeter::stop() -{ - int64 time = cvGetTickCount(); - if ( startTime == 0 ) - return; - - ++counter; - - sumTime += ( time - startTime ); - startTime = 0; -} - -std::ostream& cv::operator<<(std::ostream& out, const TickMeter& tm){ return out << tm.getTimeSec() << "sec"; } diff --git a/modules/contrib/src/stereovar.cpp b/modules/contrib/src/stereovar.cpp deleted file mode 100644 index e08d632..0000000 --- a/modules/contrib/src/stereovar.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* - This is a modification of the variational stereo correspondence algorithm, described in: - S. Kosov, T. Thormaehlen, H.-P. Seidel "Accurate Real-Time Disparity Estimation with Variational Methods" - Proceedings of the 5th International Symposium on Visual Computing, Vegas, USA - - This code is written by Sergey G. Kosov for "Visir PX" application as part of Project X (www.project-10.de) - */ - -#include "precomp.hpp" -#include - -namespace cv -{ -StereoVar::StereoVar() : levels(3), pyrScale(0.5), nIt(5), minDisp(0), maxDisp(16), poly_n(3), poly_sigma(0), fi(25.0f), lambda(0.03f), penalization(PENALIZATION_TICHONOV), cycle(CYCLE_V), flags(USE_SMART_ID | USE_AUTO_PARAMS) -{ -} - -StereoVar::StereoVar(int _levels, double _pyrScale, int _nIt, int _minDisp, int _maxDisp, int _poly_n, double _poly_sigma, float _fi, float _lambda, int _penalization, int _cycle, int _flags) : levels(_levels), pyrScale(_pyrScale), nIt(_nIt), minDisp(_minDisp), maxDisp(_maxDisp), poly_n(_poly_n), poly_sigma(_poly_sigma), fi(_fi), lambda(_lambda), penalization(_penalization), cycle(_cycle), flags(_flags) -{ // No Parameters check, since they are all public -} - -StereoVar::~StereoVar() -{ -} - -static Mat diffX(Mat &src) -{ - int cols = src.cols - 1; - Mat dst(src.size(), src.type()); - for(int y = 0; y < src.rows; y++){ - const float* pSrc = src.ptr(y); - float* pDst = dst.ptr(y); - int x = 0; -#if CV_SSE2 - for (x = 0; x <= cols - 8; x += 8) { - __m128 a0 = _mm_loadu_ps(pSrc + x); - __m128 b0 = _mm_loadu_ps(pSrc + x + 1); - __m128 a1 = _mm_loadu_ps(pSrc + x + 4); - __m128 b1 = _mm_loadu_ps(pSrc + x + 5); - b0 = _mm_sub_ps(b0, a0); - b1 = _mm_sub_ps(b1, a1); - _mm_storeu_ps(pDst + x, b0); - _mm_storeu_ps(pDst + x + 4, b1); - } -#endif - for( ; x < cols; x++) pDst[x] = pSrc[x+1] - pSrc[x]; - pDst[cols] = 0.f; - } - return dst; -} - -static Mat getGradient(Mat &src) -{ - register int x, y; - Mat dst(src.size(), src.type()); - dst.setTo(0); - for (y = 0; y < src.rows - 1; y++) { - float *pSrc = src.ptr(y); - float *pSrcF = src.ptr(y + 1); - float *pDst = dst.ptr(y); - for (x = 0; x < src.cols - 1; x++) - pDst[x] = fabs(pSrc[x + 1] - pSrc[x]) + fabs(pSrcF[x] - pSrc[x]); - } - return dst; -} - -static Mat getG_c(Mat &src, float l) -{ - Mat dst(src.size(), src.type()); - for (register int y = 0; y < src.rows; y++) { - float *pSrc = src.ptr(y); - float *pDst = dst.ptr(y); - for (register int x = 0; x < src.cols; x++) - pDst[x] = 0.5f*l / sqrtf(l*l + pSrc[x]*pSrc[x]); - } - return dst; -} - -static Mat getG_p(Mat &src, float l) -{ - Mat dst(src.size(), src.type()); - for (register int y = 0; y < src.rows; y++) { - float *pSrc = src.ptr(y); - float *pDst = dst.ptr(y); - for (register int x = 0; x < src.cols; x++) - pDst[x] = 0.5f*l*l / (l*l + pSrc[x]*pSrc[x]); - } - return dst; -} - -void StereoVar::VariationalSolver(Mat &I1, Mat &I2, Mat &I2x, Mat &u, int level) -{ - register int n, x, y; - float gl = 1, gr = 1, gu = 1, gd = 1, gc = 4; - Mat g_c, g_p; - Mat U; - u.copyTo(U); - - int N = nIt; - float l = lambda; - float Fi = fi; - - - if (flags & USE_SMART_ID) { - double scale = pow(pyrScale, (double) level) * (1 + pyrScale); - N = (int) (N / scale); - } - - double scale = pow(pyrScale, (double) level); - Fi /= (float) scale; - l *= (float) scale; - - int width = u.cols - 1; - int height = u.rows - 1; - for (n = 0; n < N; n++) { - if (penalization != PENALIZATION_TICHONOV) { - Mat gradient = getGradient(U); - switch (penalization) { - case PENALIZATION_CHARBONNIER: g_c = getG_c(gradient, l); break; - case PENALIZATION_PERONA_MALIK: g_p = getG_p(gradient, l); break; - } - gradient.release(); - } - for (y = 1 ; y < height; y++) { - float *pU = U.ptr(y); - float *pUu = U.ptr(y + 1); - float *pUd = U.ptr(y - 1); - float *pu = u.ptr(y); - float *pI1 = I1.ptr(y); - float *pI2 = I2.ptr(y); - float *pI2x = I2x.ptr(y); - float *pG_c = NULL, *pG_cu = NULL, *pG_cd = NULL; - float *pG_p = NULL, *pG_pu = NULL, *pG_pd = NULL; - switch (penalization) { - case PENALIZATION_CHARBONNIER: - pG_c = g_c.ptr(y); - pG_cu = g_c.ptr(y + 1); - pG_cd = g_c.ptr(y - 1); - break; - case PENALIZATION_PERONA_MALIK: - pG_p = g_p.ptr(y); - pG_pu = g_p.ptr(y + 1); - pG_pd = g_p.ptr(y - 1); - break; - } - for (x = 1; x < width; x++) { - switch (penalization) { - case PENALIZATION_CHARBONNIER: - gc = pG_c[x]; - gl = gc + pG_c[x - 1]; - gr = gc + pG_c[x + 1]; - gu = gc + pG_cu[x]; - gd = gc + pG_cd[x]; - gc = gl + gr + gu + gd; - break; - case PENALIZATION_PERONA_MALIK: - gc = pG_p[x]; - gl = gc + pG_p[x - 1]; - gr = gc + pG_p[x + 1]; - gu = gc + pG_pu[x]; - gd = gc + pG_pd[x]; - gc = gl + gr + gu + gd; - break; - } - - float _fi = Fi; - if (maxDisp > minDisp) { - if (pU[x] > maxDisp * scale) {_fi *= 1000; pU[x] = static_cast(maxDisp * scale);} - if (pU[x] < minDisp * scale) {_fi *= 1000; pU[x] = static_cast(minDisp * scale);} - } - - int A = static_cast(pU[x]); - int neg = 0; if (pU[x] <= 0) neg = -1; - - if (x + A > width) - pu[x] = pU[width - A]; - else if (x + A + neg < 0) - pu[x] = pU[- A + 2]; - else { - pu[x] = A + (pI2x[x + A + neg] * (pI1[x] - pI2[x + A]) - + _fi * (gr * pU[x + 1] + gl * pU[x - 1] + gu * pUu[x] + gd * pUd[x] - gc * A)) - / (pI2x[x + A + neg] * pI2x[x + A + neg] + gc * _fi) ; - } - }// x - pu[0] = pu[1]; - pu[width] = pu[width - 1]; - }// y - for (x = 0; x <= width; x++) { - u.at(0, x) = u.at(1, x); - u.at(height, x) = u.at(height - 1, x); - } - u.copyTo(U); - if (!g_c.empty()) g_c.release(); - if (!g_p.empty()) g_p.release(); - }//n -} - -void StereoVar::VCycle_MyFAS(Mat &I1, Mat &I2, Mat &I2x, Mat &_u, int level) -{ - CvSize imgSize = _u.size(); - CvSize frmSize = cvSize((int) (imgSize.width * pyrScale + 0.5), (int) (imgSize.height * pyrScale + 0.5)); - Mat I1_h, I2_h, I2x_h, u_h, U, U_h; - - //PRE relaxation - VariationalSolver(I1, I2, I2x, _u, level); - - if (level >= levels - 1) return; - level ++; - - //scaling DOWN - resize(I1, I1_h, frmSize, 0, 0, INTER_AREA); - resize(I2, I2_h, frmSize, 0, 0, INTER_AREA); - resize(_u, u_h, frmSize, 0, 0, INTER_AREA); - u_h.convertTo(u_h, u_h.type(), pyrScale); - I2x_h = diffX(I2_h); - - //Next level - U_h = u_h.clone(); - VCycle_MyFAS(I1_h, I2_h, I2x_h, U_h, level); - - subtract(U_h, u_h, U_h); - U_h.convertTo(U_h, U_h.type(), 1.0 / pyrScale); - - //scaling UP - resize(U_h, U, imgSize); - - //correcting the solution - add(_u, U, _u); - - //POST relaxation - VariationalSolver(I1, I2, I2x, _u, level - 1); - - if (flags & USE_MEDIAN_FILTERING) medianBlur(_u, _u, 3); - - I1_h.release(); - I2_h.release(); - I2x_h.release(); - u_h.release(); - U.release(); - U_h.release(); -} - -void StereoVar::FMG(Mat &I1, Mat &I2, Mat &I2x, Mat &u, int level) -{ - double scale = pow(pyrScale, (double) level); - CvSize frmSize = cvSize((int) (u.cols * scale + 0.5), (int) (u.rows * scale + 0.5)); - Mat I1_h, I2_h, I2x_h, u_h; - - //scaling DOWN - resize(I1, I1_h, frmSize, 0, 0, INTER_AREA); - resize(I2, I2_h, frmSize, 0, 0, INTER_AREA); - resize(u, u_h, frmSize, 0, 0, INTER_AREA); - u_h.convertTo(u_h, u_h.type(), scale); - I2x_h = diffX(I2_h); - - switch (cycle) { - case CYCLE_O: - VariationalSolver(I1_h, I2_h, I2x_h, u_h, level); - break; - case CYCLE_V: - VCycle_MyFAS(I1_h, I2_h, I2x_h, u_h, level); - break; - } - - u_h.convertTo(u_h, u_h.type(), 1.0 / scale); - - //scaling UP - resize(u_h, u, u.size(), 0, 0, INTER_CUBIC); - - I1_h.release(); - I2_h.release(); - I2x_h.release(); - u_h.release(); - - level--; - if ((flags & USE_AUTO_PARAMS) && (level < levels / 3)) { - penalization = PENALIZATION_PERONA_MALIK; - fi *= 100; - flags -= USE_AUTO_PARAMS; - autoParams(); - } - if (flags & USE_MEDIAN_FILTERING) medianBlur(u, u, 3); - if (level >= 0) FMG(I1, I2, I2x, u, level); -} - -void StereoVar::autoParams() -{ - int maxD = MAX(labs(maxDisp), labs(minDisp)); - - if (!maxD) pyrScale = 0.85; - else if (maxD < 8) pyrScale = 0.5; - else if (maxD < 64) pyrScale = 0.5 + static_cast(maxD - 8) * 0.00625; - else pyrScale = 0.85; - - if (maxD) { - levels = 0; - while ( pow(pyrScale, levels) * maxD > 1.5) levels ++; - levels++; - } - - switch(penalization) { - case PENALIZATION_TICHONOV: cycle = CYCLE_V; break; - case PENALIZATION_CHARBONNIER: cycle = CYCLE_O; break; - case PENALIZATION_PERONA_MALIK: cycle = CYCLE_O; break; - } -} - -void StereoVar::operator ()( const Mat& left, const Mat& right, Mat& disp ) -{ - CV_Assert(left.size() == right.size() && left.type() == right.type()); - CvSize imgSize = left.size(); - int MaxD = MAX(labs(minDisp), labs(maxDisp)); - int SignD = 1; if (MIN(minDisp, maxDisp) < 0) SignD = -1; - if (minDisp >= maxDisp) {MaxD = 256; SignD = 1;} - - Mat u; - if ((flags & USE_INITIAL_DISPARITY) && (!disp.empty())) { - CV_Assert(disp.size() == left.size() && disp.type() == CV_8UC1); - disp.convertTo(u, CV_32FC1, static_cast(SignD * MaxD) / 256); - } else { - u.create(imgSize, CV_32FC1); - u.setTo(0); - } - - // Preprocessing - Mat leftgray, rightgray; - if (left.type() != CV_8UC1) { - cvtColor(left, leftgray, CV_BGR2GRAY); - cvtColor(right, rightgray, CV_BGR2GRAY); - } else { - left.copyTo(leftgray); - right.copyTo(rightgray); - } - if (flags & USE_EQUALIZE_HIST) { - equalizeHist(leftgray, leftgray); - equalizeHist(rightgray, rightgray); - } - if (poly_sigma > 0.0001) { - GaussianBlur(leftgray, leftgray, cvSize(poly_n, poly_n), poly_sigma); - GaussianBlur(rightgray, rightgray, cvSize(poly_n, poly_n), poly_sigma); - } - - if (flags & USE_AUTO_PARAMS) { - penalization = PENALIZATION_TICHONOV; - autoParams(); - } - - Mat I1, I2; - leftgray.convertTo(I1, CV_32FC1); - rightgray.convertTo(I2, CV_32FC1); - leftgray.release(); - rightgray.release(); - - Mat I2x = diffX(I2); - - FMG(I1, I2, I2x, u, levels - 1); - - I1.release(); - I2.release(); - I2x.release(); - - - disp.create( left.size(), CV_8UC1 ); - u = abs(u); - u.convertTo(disp, disp.type(), 256 / MaxD, 0); - - u.release(); -} -} // namespace diff --git a/modules/contrib/src/templatebuffer.hpp b/modules/contrib/src/templatebuffer.hpp deleted file mode 100644 index 8a85b54..0000000 --- a/modules/contrib/src/templatebuffer.hpp +++ /dev/null @@ -1,552 +0,0 @@ -/*#****************************************************************************** -** IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -** -** By downloading, copying, installing or using the software you agree to this license. -** If you do not agree to this license, do not download, install, -** copy or use the software. -** -** -** HVStools : interfaces allowing OpenCV users to integrate Human Vision System models. Presented models originate from Jeanny Herault's original research and have been reused and adapted by the author&collaborators for computed vision applications since his thesis with Alice Caplier at Gipsa-Lab. -** Use: extract still images & image sequences features, from contours details to motion spatio-temporal features, etc. for high level visual scene analysis. Also contribute to image enhancement/compression such as tone mapping. -** -** Maintainers : Listic lab (code author current affiliation & applications) and Gipsa Lab (original research origins & applications) -** -** Creation - enhancement process 2007-2011 -** Author: Alexandre Benoit (benoit.alexandre.vision@gmail.com), LISTIC lab, Annecy le vieux, France -** -** Theses algorithm have been developped by Alexandre BENOIT since his thesis with Alice Caplier at Gipsa-Lab (www.gipsa-lab.inpg.fr) and the research he pursues at LISTIC Lab (www.listic.univ-savoie.fr). -** Refer to the following research paper for more information: -** Benoit A., Caplier A., Durette B., Herault, J., "USING HUMAN VISUAL SYSTEM MODELING FOR BIO-INSPIRED LOW LEVEL IMAGE PROCESSING", Elsevier, Computer Vision and Image Understanding 114 (2010), pp. 758-773, DOI: http://dx.doi.org/10.1016/j.cviu.2010.01.011 -** This work have been carried out thanks to Jeanny Herault who's research and great discussions are the basis of all this work, please take a look at his book: -** Vision: Images, Signals and Neural Networks: Models of Neural Processing in Visual Perception (Progress in Neural Processing),By: Jeanny Herault, ISBN: 9814273686. WAPI (Tower ID): 113266891. -** -** The retina filter includes the research contributions of phd/research collegues from which code has been redrawn by the author : -** _take a look at the retinacolor.hpp module to discover Brice Chaix de Lavarene color mosaicing/demosaicing and the reference paper: -** ====> B. Chaix de Lavarene, D. Alleysson, B. Durette, J. Herault (2007). "Efficient demosaicing through recursive filtering", IEEE International Conference on Image Processing ICIP 2007 -** _take a look at imagelogpolprojection.hpp to discover retina spatial log sampling which originates from Barthelemy Durette phd with Jeanny Herault. A Retina / V1 cortex projection is also proposed and originates from Jeanny's discussions. -** ====> more informations in the above cited Jeanny Heraults's book. -** -** License Agreement -** For Open Source Computer Vision Library -** -** Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -** Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved. -** -** For Human Visual System tools (hvstools) -** Copyright (C) 2007-2011, LISTIC Lab, Annecy le Vieux and GIPSA Lab, Grenoble, France, all rights reserved. -** -** Third party copyrights are property of their respective owners. -** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** -** * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -** indirect, incidental, special, exemplary, or consequential damages -** (including, but not limited to, procurement of substitute goods or services; -** loss of use, data, or profits; or business interruption) however caused -** and on any theory of liability, whether in contract, strict liability, -** or tort (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 __TEMPLATEBUFFER_HPP__ -#define __TEMPLATEBUFFER_HPP__ - -#include -#include -#include -#include - - -//// If a parallelization method is available then, you should define MAKE_PARALLEL, in the other case, the classical serial code will be used -#define MAKE_PARALLEL -// ==> then include required includes -#ifdef MAKE_PARALLEL - -// ==> declare usefull generic tools -template -class Parallel_clipBufferValues: public cv::ParallelLoopBody -{ -private: - type *bufferToClip; - type minValue, maxValue; - -public: - Parallel_clipBufferValues(type* bufferToProcess, const type min, const type max) - : bufferToClip(bufferToProcess), minValue(min), maxValue(max){} - - virtual void operator()( const cv::Range &r ) const { - register type *inputOutputBufferPTR=bufferToClip+r.start; - for (register int jf = r.start; jf != r.end; ++jf, ++inputOutputBufferPTR) - { - if (*inputOutputBufferPTR>maxValue) - *inputOutputBufferPTR=maxValue; - else if (*inputOutputBufferPTR class TemplateBuffer : public std::valarray - { - public: - - /** - * constructor for monodimensional array - * @param dim: the size of the vector - */ - TemplateBuffer(const size_t dim=0) - : std::valarray((type)0, dim) - { - _NBrows=1; - _NBcolumns=dim; - _NBdepths=1; - _NBpixels=dim; - _doubleNBpixels=2*dim; - } - - /** - * constructor by copy for monodimensional array - * @param pVal: the pointer to a buffer to copy - * @param dim: the size of the vector - */ - TemplateBuffer(const type* pVal, const size_t dim) - : std::valarray(pVal, dim) - { - _NBrows=1; - _NBcolumns=dim; - _NBdepths=1; - _NBpixels=dim; - _doubleNBpixels=2*dim; - } - - /** - * constructor for bidimensional array - * @param dimRows: the size of the vector - * @param dimColumns: the size of the vector - * @param depth: the number of layers of the buffer in its third dimension (3 of color images, 1 for gray images. - */ - TemplateBuffer(const size_t dimRows, const size_t dimColumns, const size_t depth=1) - : std::valarray((type)0, dimRows*dimColumns*depth) - { -#ifdef TEMPLATEBUFFERDEBUG - std::cout<<"TemplateBuffer::TemplateBuffer: new buffer, size="<(toCopy) - { - memcpy(Buffer(), toCopy.Buffer(), this->size()); - }*/ - /** - * destructor - */ - virtual ~TemplateBuffer() - { -#ifdef TEMPLATEBUFFERDEBUG - std::cout<<"~TemplateBuffer"<::operator=(0);};//memset(Buffer(), 0, sizeof(type)*_NBpixels);}; - - /** - * @return the numbers of rows (height) of the images used by the object - */ - inline unsigned int getNBrows(){return (unsigned int)_NBrows;}; - - /** - * @return the numbers of columns (width) of the images used by the object - */ - inline unsigned int getNBcolumns(){return (unsigned int)_NBcolumns;}; - - /** - * @return the numbers of pixels (width*height) of the images used by the object - */ - inline unsigned int getNBpixels(){return (unsigned int)_NBpixels;}; - - /** - * @return the numbers of pixels (width*height) of the images used by the object - */ - inline unsigned int getDoubleNBpixels(){return (unsigned int)_doubleNBpixels;}; - - /** - * @return the numbers of depths (3rd dimension: 1 for gray images, 3 for rgb images) of the images used by the object - */ - inline unsigned int getDepthSize(){return (unsigned int)_NBdepths;}; - - /** - * resize the buffer and recompute table index etc. - */ - void resizeBuffer(const size_t dimRows, const size_t dimColumns, const size_t depth=1) - { - this->resize(dimRows*dimColumns*depth); - _NBrows=dimRows; - _NBcolumns=dimColumns; - _NBdepths=depth; - _NBpixels=dimRows*dimColumns; - _doubleNBpixels=2*dimRows*dimColumns; - } - - inline TemplateBuffer & operator=(const std::valarray &b) - { - //std::cout<<"TemplateBuffer & operator= affect vector: "<::operator=(b); - return *this; - } - - inline TemplateBuffer & operator=(const type &b) - { - //std::cout<<"TemplateBuffer & operator= affect value: "<::operator=(b); - return *this; - } - - /* inline const type &operator[](const unsigned int &b) - { - return (*this)[b]; - } - */ - /** - * @return the buffer adress in non const mode - */ - inline type* Buffer() { return &(*this)[0]; } - - /////////////////////////////////////////////////////// - // Standard Image manipulation functions - - /** - * standard 0 to 255 image normalization function - * @param inputOutputBuffer: the image to be normalized (rewrites the input), if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param nbPixels: specifies the number of pixel on which the normalization should be performed, if 0, then all pixels specified in the constructor are processed - * @param maxOutputValue: the maximum output value - */ - static void normalizeGrayOutput_0_maxOutputValue(type *inputOutputBuffer, const size_t nbPixels, const type maxOutputValue=(type)255.0); - - /** - * standard 0 to 255 image normalization function - * @param inputOutputBuffer: the image to be normalized (rewrites the input), if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param nbPixels: specifies the number of pixel on which the normalization should be performed, if 0, then all pixels specified in the constructor are processed - * @param maxOutputValue: the maximum output value - */ - void normalizeGrayOutput_0_maxOutputValue(const type maxOutputValue=(type)255.0){normalizeGrayOutput_0_maxOutputValue(this->Buffer(), this->size(), maxOutputValue);}; - - /** - * sigmoide image normalization function (saturates min and max values) - * @param meanValue: specifies the mean value of th pixels to be processed - * @param sensitivity: strenght of the sigmoide - * @param inputPicture: the image to be normalized if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param outputBuffer: the ouput buffer on which the result is writed, if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param maxOutputValue: the maximum output value - */ - static void normalizeGrayOutputCentredSigmoide(const type meanValue, const type sensitivity, const type maxOutputValue, type *inputPicture, type *outputBuffer, const unsigned int nbPixels); - - /** - * sigmoide image normalization function on the current buffer (saturates min and max values) - * @param meanValue: specifies the mean value of th pixels to be processed - * @param sensitivity: strenght of the sigmoide - * @param maxOutputValue: the maximum output value - */ - inline void normalizeGrayOutputCentredSigmoide(const type meanValue=(type)0.0, const type sensitivity=(type)2.0, const type maxOutputValue=(type)255.0){ (void)maxOutputValue; normalizeGrayOutputCentredSigmoide(meanValue, sensitivity, 255.0, this->Buffer(), this->Buffer(), this->getNBpixels());}; - - /** - * sigmoide image normalization function (saturates min and max values), in this function, the sigmoide is centered on low values (high saturation of the medium and high values - * @param inputPicture: the image to be normalized if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param outputBuffer: the ouput buffer on which the result is writed, if no parameter, then, the built in buffer reachable by getOutput() function is normalized - * @param sensitivity: strenght of the sigmoide - * @param maxOutputValue: the maximum output value - */ - void normalizeGrayOutputNearZeroCentreredSigmoide(type *inputPicture=(type*)NULL, type *outputBuffer=(type*)NULL, const type sensitivity=(type)40, const type maxOutputValue=(type)255.0); - - /** - * center and reduct the image (image-mean)/std - * @param inputOutputBuffer: the image to be normalized if no parameter, the result is rewrited on it - */ - void centerReductImageLuminance(type *inputOutputBuffer=(type*)NULL); - - /** - * @return standard deviation of the buffer - */ - double getStandardDeviation() - { - double standardDeviation=0; - double meanValue=getMean(); - - type *bufferPTR=Buffer(); - for (unsigned int i=0;isize();++i) - { - double diff=(*(bufferPTR++)-meanValue); - standardDeviation+=diff*diff; - } - return sqrt(standardDeviation/this->size()); - }; - - /** - * Clip buffer histogram - * @param minRatio: the minimum ratio of the lower pixel values, range=[0,1] and lower than maxRatio - * @param maxRatio: the aximum ratio of the higher pixel values, range=[0,1] and higher than minRatio - */ - void clipHistogram(double minRatio, double maxRatio, double maxOutputValue) - { - - if (minRatio>=maxRatio) - { - std::cerr<<"TemplateBuffer::clipHistogram: minRatio must be inferior to maxRatio, buffer unchanged"<max()*maxRatio; - const double minThreshold=(this->max()-this->min())*minRatio+this->min(); - - type *bufferPTR=this->Buffer(); - - double deltaH=maxThreshold; - double deltaL=maxThreshold; - - double updatedHighValue=maxThreshold; - double updatedLowValue=maxThreshold; - - for (unsigned int i=0;isize();++i) - { - double currentValue=(double)*(bufferPTR++); - - // updating "closest to the high threshold" pixel value - double highValueTest=maxThreshold-currentValue; - if (highValueTest>0) - { - if (deltaH>highValueTest) - { - deltaH=highValueTest; - updatedHighValue=currentValue; - } - } - - // updating "closest to the low threshold" pixel value - double lowValueTest=currentValue-minThreshold; - if (lowValueTest>0) - { - if (deltaL>lowValueTest) - { - deltaL=lowValueTest; - updatedLowValue=currentValue; - } - } - } - - std::cout<<"Tdebug"<max()"<max()<<"maxThreshold="<min()"<min()<<"minThreshold="<Buffer(); -#ifdef MAKE_PARALLEL // call the TemplateBuffer multitreaded clipping method - parallel_for_(cv::Range(0,this->size()), Parallel_clipBufferValues(bufferPTR, updatedLowValue, updatedHighValue)); -#else - - for (unsigned int i=0;isize();++i, ++bufferPTR) - { - if (*bufferPTRupdatedHighValue) - *bufferPTR=updatedHighValue; - } -#endif - normalizeGrayOutput_0_maxOutputValue(this->Buffer(), this->size(), maxOutputValue); - - } - - /** - * @return the mean value of the vector - */ - inline double getMean(){return this->sum()/this->size();}; - - protected: - size_t _NBrows; - size_t _NBcolumns; - size_t _NBdepths; - size_t _NBpixels; - size_t _doubleNBpixels; - // utilities - static type _abs(const type x); - - }; - - /////////////////////////////////////////////////////////////////////// - /// normalize output between 0 and 255, can be applied on images of different size that the declared size if nbPixels parameters is setted up; - template - void TemplateBuffer::normalizeGrayOutput_0_maxOutputValue(type *inputOutputBuffer, const size_t processedPixels, const type maxOutputValue) - { - type maxValue=inputOutputBuffer[0], minValue=inputOutputBuffer[0]; - - // get the min and max value - register type *inputOutputBufferPTR=inputOutputBuffer; - for (register size_t j = 0; j pixValue) - minValue = pixValue; - } - // change the range of the data to 0->255 - - type factor = maxOutputValue/(maxValue-minValue); - type offset = (type)(-minValue*factor); - - inputOutputBufferPTR=inputOutputBuffer; - for (register size_t j = 0; j < processedPixels; ++j, ++inputOutputBufferPTR) - *inputOutputBufferPTR=*(inputOutputBufferPTR)*factor+offset; - - } - // normalize data with a sigmoide close to 0 (saturates values for those superior to 0) - template - void TemplateBuffer::normalizeGrayOutputNearZeroCentreredSigmoide(type *inputBuffer, type *outputBuffer, const type sensitivity, const type maxOutputValue) - { - if (inputBuffer==NULL) - inputBuffer=Buffer(); - if (outputBuffer==NULL) - outputBuffer=Buffer(); - - type X0cube=sensitivity*sensitivity*sensitivity; - - register type *inputBufferPTR=inputBuffer; - register type *outputBufferPTR=outputBuffer; - - for (register size_t j = 0; j < _NBpixels; ++j, ++inputBufferPTR) - { - - type currentCubeLuminance=*inputBufferPTR**inputBufferPTR**inputBufferPTR; - *(outputBufferPTR++)=maxOutputValue*currentCubeLuminance/(currentCubeLuminance+X0cube); - } - } - - // normalize and adjust luminance with a centered to 128 sigmode - template - void TemplateBuffer::normalizeGrayOutputCentredSigmoide(const type meanValue, const type sensitivity, const type maxOutputValue, type *inputBuffer, type *outputBuffer, const unsigned int nbPixels) - { - - if (sensitivity==1.0) - { - std::cerr<<"TemplateBuffer::TemplateBuffer::normalizeGrayOutputCentredSigmoide error: 2nd parameter (sensitivity) must not equal 0, copying original data..."< - void TemplateBuffer::centerReductImageLuminance(type *inputOutputBuffer) - { - // if outputBuffer unsassigned, the rewrite the buffer - if (inputOutputBuffer==NULL) - inputOutputBuffer=Buffer(); - type meanValue=0, stdValue=0; - - // compute mean value - for (register size_t j = 0; j < _NBpixels; ++j) - meanValue+=inputOutputBuffer[j]; - meanValue/=((type)_NBpixels); - - // compute std value - register type *inputOutputBufferPTR=inputOutputBuffer; - for (size_t index=0;index<_NBpixels;++index) - { - type inputMinusMean=*(inputOutputBufferPTR++)-meanValue; - stdValue+=inputMinusMean*inputMinusMean; - } - - stdValue=sqrt(stdValue/((type)_NBpixels)); - // adjust luminance in regard of mean and std value; - inputOutputBufferPTR=inputOutputBuffer; - for (size_t index=0;index<_NBpixels;++index, ++inputOutputBufferPTR) - *inputOutputBufferPTR=(*(inputOutputBufferPTR)-meanValue)/stdValue; - } - - - template - type TemplateBuffer::_abs(const type x) - { - - if (x>0) - return x; - else - return -x; - } - - template < > - inline int TemplateBuffer::_abs(const int x) - { - return std::abs(x); - } - template < > - inline double TemplateBuffer::_abs(const double x) - { - return std::fabs(x); - } - - template < > - inline float TemplateBuffer::_abs(const float x) - { - return std::fabs(x); - } - -} -#endif diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt deleted file mode 100644 index 44f2c52..0000000 --- a/modules/core/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -set(the_description "The Core Functionality") - -set(CMAKE_SKIP_RPATH ON) - -if (NOT HAVE_CUDA OR ENABLE_DYNAMIC_CUDA) - ocv_add_module(core PRIVATE_REQUIRED ${ZLIB_LIBRARIES}) -else() - ocv_add_module(core PRIVATE_REQUIRED ${ZLIB_LIBRARIES} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) -endif() - -ocv_module_include_directories("${OpenCV_SOURCE_DIR}/modules/dynamicuda/include/" ${ZLIB_INCLUDE_DIR}) - -if(HAVE_WINRT_CX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") -endif() -if(HAVE_WINRT) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS /Gm- /AI\"${WINDOWS_SDK_PATH}/References/CommonConfiguration/Neutral\" /AI\"${VISUAL_STUDIO_PATH}/vcpackages\"") -endif() - -if(ENABLE_DYNAMIC_CUDA) - add_definitions(-DDYNAMIC_CUDA_SUPPORT) -else() - if (HAVE_CUDA) - add_definitions(-DUSE_CUDA) - endif() -endif() - -if(HAVE_CUDA) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include") - ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wshadow) -endif() - -file(GLOB lib_cuda_hdrs "include/opencv2/${name}/cuda/*.hpp" "include/opencv2/${name}/cuda/*.h") -file(GLOB lib_cuda_hdrs_detail "include/opencv2/${name}/cuda/detail/*.hpp" "include/opencv2/${name}/cuda/detail/*.h") - -if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA) - file(GLOB lib_cuda "../dynamicuda/src/cuda/*.cu*") - ocv_include_directories(${CUDA_INCLUDE_DIRS}) - ocv_cuda_compile(cuda_objs ${lib_cuda}) -endif() - -source_group("Cuda Headers" FILES ${lib_cuda_hdrs}) -source_group("Cuda Headers\\Detail" FILES ${lib_cuda_hdrs_detail}) - -if (HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA) - source_group("Src\\Cuda" FILES ${lib_cuda} ${lib_cuda_hdrs}) -endif() - -if (NOT HAVE_CUDA OR ENABLE_DYNAMIC_CUDA) - ocv_glob_module_sources(SOURCES "${opencv_core_BINARY_DIR}/version_string.inc" - HEADERS ${lib_cuda_hdrs} ${lib_cuda_hdrs_detail}) -else() - ocv_glob_module_sources(SOURCES "${opencv_core_BINARY_DIR}/version_string.inc" ${lib_cuda} ${cuda_objs} - HEADERS ${lib_cuda_hdrs} ${lib_cuda_hdrs_detail}) -endif() - -ocv_create_module() -ocv_add_precompiled_headers(${the_module}) - -ocv_add_accuracy_tests() -ocv_add_perf_tests() diff --git a/modules/core/include/opencv2/core/affine.hpp b/modules/core/include/opencv2/core/affine.hpp deleted file mode 100644 index 827d044..0000000 --- a/modules/core/include/opencv2/core/affine.hpp +++ /dev/null @@ -1,509 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Copyright (C) 2013, OpenCV Foundation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_AFFINE3_HPP__ -#define __OPENCV_CORE_AFFINE3_HPP__ - -#ifdef __cplusplus - -#include - -namespace cv -{ - template - class Affine3 - { - public: - typedef T float_type; - typedef Matx Mat3; - typedef Matx Mat4; - typedef Vec Vec3; - - Affine3(); - - //Augmented affine matrix - Affine3(const Mat4& affine); - - //Rotation matrix - Affine3(const Mat3& R, const Vec3& t = Vec3::all(0)); - - //Rodrigues vector - Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0)); - - //Combines all contructors above. Supports 4x4, 4x3, 3x3, 1x3, 3x1 sizes of data matrix - explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0)); - - //From 16th element array - explicit Affine3(const float_type* vals); - - static Affine3 Identity(); - - //Rotation matrix - void rotation(const Mat3& R); - - //Rodrigues vector - void rotation(const Vec3& rvec); - - //Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix; - void rotation(const Mat& data); - - void linear(const Mat3& L); - void translation(const Vec3& t); - - Mat3 rotation() const; - Mat3 linear() const; - Vec3 translation() const; - - //Rodrigues vector - Vec3 rvec() const; - - Affine3 inv(int method = cv::DECOMP_SVD) const; - - // a.rotate(R) is equivalent to Affine(R, 0) * a; - Affine3 rotate(const Mat3& R) const; - - // a.rotate(R) is equivalent to Affine(rvec, 0) * a; - Affine3 rotate(const Vec3& rvec) const; - - // a.translate(t) is equivalent to Affine(E, t) * a; - Affine3 translate(const Vec3& t) const; - - // a.concatenate(affine) is equivalent to affine * a; - Affine3 concatenate(const Affine3& affine) const; - - template operator Affine3() const; - - template Affine3 cast() const; - - Mat4 matrix; - -#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H - Affine3(const Eigen::Transform& affine); - Affine3(const Eigen::Transform& affine); - operator Eigen::Transform() const; - operator Eigen::Transform() const; -#endif - }; - - template static - Affine3 operator*(const Affine3& affine1, const Affine3& affine2); - - template static - V operator*(const Affine3& affine, const V& vector); - - typedef Affine3 Affine3f; - typedef Affine3 Affine3d; - - static Vec3f operator*(const Affine3f& affine, const Vec3f& vector); - static Vec3d operator*(const Affine3d& affine, const Vec3d& vector); - - template class DataType< Affine3<_Tp> > - { - public: - typedef Affine3<_Tp> value_type; - typedef Affine3::work_type> work_type; - typedef _Tp channel_type; - - enum { generic_type = 0, - depth = DataType::depth, - channels = 16, - fmt = DataType::fmt + ((channels - 1) << 8), - type = CV_MAKETYPE(depth, channels) - }; - - typedef Vec vec_type; - }; -} - - -/////////////////////////////////////////////////////////////////////////////////// -/// Implementaiton - -template inline -cv::Affine3::Affine3() - : matrix(Mat4::eye()) -{} - -template inline -cv::Affine3::Affine3(const Mat4& affine) - : matrix(affine) -{} - -template inline -cv::Affine3::Affine3(const Mat3& R, const Vec3& t) -{ - rotation(R); - translation(t); - matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; - matrix.val[15] = 1; -} - -template inline -cv::Affine3::Affine3(const Vec3& _rvec, const Vec3& t) -{ - rotation(_rvec); - translation(t); - matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; - matrix.val[15] = 1; -} - -template inline -cv::Affine3::Affine3(const cv::Mat& data, const Vec3& t) -{ - CV_Assert(data.type() == cv::DataType::type); - - if (data.cols == 4 && data.rows == 4) - { - data.copyTo(matrix); - return; - } - else if (data.cols == 4 && data.rows == 3) - { - rotation(data(Rect(0, 0, 3, 3))); - translation(data(Rect(3, 0, 1, 3))); - return; - } - - rotation(data); - translation(t); - matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; - matrix.val[15] = 1; -} - -template inline -cv::Affine3::Affine3(const float_type* vals) : matrix(vals) -{} - -template inline -cv::Affine3 cv::Affine3::Identity() -{ - return Affine3(cv::Affine3::Mat4::eye()); -} - -template inline -void cv::Affine3::rotation(const Mat3& R) -{ - linear(R); -} - -template inline -void cv::Affine3::rotation(const Vec3& _rvec) -{ - double rx = _rvec[0], ry = _rvec[1], rz = _rvec[2]; - double theta = std::sqrt(rx*rx + ry*ry + rz*rz); - - if (theta < DBL_EPSILON) - rotation(Mat3::eye()); - else - { - const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; - - double c = std::cos(theta); - double s = std::sin(theta); - double c1 = 1. - c; - double itheta = theta ? 1./theta : 0.; - - rx *= itheta; ry *= itheta; rz *= itheta; - - double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz }; - double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 }; - Mat3 R; - - // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x] - // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0] - for(int k = 0; k < 9; ++k) - R.val[k] = static_cast(c*I[k] + c1*rrt[k] + s*_r_x_[k]); - - rotation(R); - } -} - -//Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix; -template inline -void cv::Affine3::rotation(const cv::Mat& data) -{ - CV_Assert(data.type() == cv::DataType::type); - - if (data.cols == 3 && data.rows == 3) - { - Mat3 R; - data.copyTo(R); - rotation(R); - } - else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3)) - { - Vec3 _rvec; - data.reshape(1, 3).copyTo(_rvec); - rotation(_rvec); - } - else - CV_Assert(!"Input marix can be 3x3, 1x3 or 3x1"); -} - -template inline -void cv::Affine3::linear(const Mat3& L) -{ - matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1]; matrix.val[ 2] = L.val[2]; - matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4]; matrix.val[ 6] = L.val[5]; - matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7]; matrix.val[10] = L.val[8]; -} - -template inline -void cv::Affine3::translation(const Vec3& t) -{ - matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2]; -} - -template inline -typename cv::Affine3::Mat3 cv::Affine3::rotation() const -{ - return linear(); -} - -template inline -typename cv::Affine3::Mat3 cv::Affine3::linear() const -{ - typename cv::Affine3::Mat3 R; - R.val[0] = matrix.val[0]; R.val[1] = matrix.val[1]; R.val[2] = matrix.val[ 2]; - R.val[3] = matrix.val[4]; R.val[4] = matrix.val[5]; R.val[5] = matrix.val[ 6]; - R.val[6] = matrix.val[8]; R.val[7] = matrix.val[9]; R.val[8] = matrix.val[10]; - return R; -} - -template inline -typename cv::Affine3::Vec3 cv::Affine3::translation() const -{ - return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]); -} - -template inline -typename cv::Affine3::Vec3 cv::Affine3::rvec() const -{ - cv::Vec3d w; - cv::Matx33d u, vt, R = rotation(); - cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A); - R = u * vt; - - double rx = R.val[7] - R.val[5]; - double ry = R.val[2] - R.val[6]; - double rz = R.val[3] - R.val[1]; - - double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25); - double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5; - c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c; - double theta = acos(c); - - if( s < 1e-5 ) - { - if( c > 0 ) - rx = ry = rz = 0; - else - { - double t; - t = (R.val[0] + 1) * 0.5; - rx = std::sqrt(std::max(t, 0.0)); - t = (R.val[4] + 1) * 0.5; - ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0); - t = (R.val[8] + 1) * 0.5; - rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0); - - if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) ) - rz = -rz; - theta /= std::sqrt(rx*rx + ry*ry + rz*rz); - rx *= theta; - ry *= theta; - rz *= theta; - } - } - else - { - double vth = 1/(2*s); - vth *= theta; - rx *= vth; ry *= vth; rz *= vth; - } - - return cv::Vec3d(rx, ry, rz); -} - -template inline -cv::Affine3 cv::Affine3::inv(int method) const -{ - return matrix.inv(method); -} - -template inline -cv::Affine3 cv::Affine3::rotate(const Mat3& R) const -{ - Mat3 Lc = linear(); - Vec3 tc = translation(); - Mat4 result; - result.val[12] = result.val[13] = result.val[14] = 0; - result.val[15] = 1; - - for(int j = 0; j < 3; ++j) - { - for(int i = 0; i < 3; ++i) - { - float_type value = 0; - for(int k = 0; k < 3; ++k) - value += R(j, k) * Lc(k, i); - result(j, i) = value; - } - - result(j, 3) = R.row(j).dot(tc.t()); - } - return result; -} - -template inline -cv::Affine3 cv::Affine3::rotate(const Vec3& _rvec) const -{ - return rotate(Affine3f(_rvec).rotation()); -} - -template inline -cv::Affine3 cv::Affine3::translate(const Vec3& t) const -{ - Mat4 m = matrix; - m.val[ 3] += t[0]; - m.val[ 7] += t[1]; - m.val[11] += t[2]; - return m; -} - -template inline -cv::Affine3 cv::Affine3::concatenate(const Affine3& affine) const -{ - return (*this).rotate(affine.rotation()).translate(affine.translation()); -} - -template template inline -cv::Affine3::operator Affine3() const -{ - return Affine3(matrix); -} - -template template inline -cv::Affine3 cv::Affine3::cast() const -{ - return Affine3(matrix); -} - -template inline -cv::Affine3 cv::operator*(const cv::Affine3& affine1, const cv::Affine3& affine2) -{ - return affine2.concatenate(affine1); -} - -template inline -V cv::operator*(const cv::Affine3& affine, const V& v) -{ - const typename Affine3::Mat4& m = affine.matrix; - - V r; - r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3]; - r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7]; - r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11]; - return r; -} - -static inline -cv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v) -{ - const cv::Matx44f& m = affine.matrix; - cv::Vec3f r; - r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3]; - r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7]; - r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; - return r; -} - -static inline -cv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v) -{ - const cv::Matx44d& m = affine.matrix; - cv::Vec3d r; - r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3]; - r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7]; - r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; - return r; -} - - - -#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H - -template inline -cv::Affine3::Affine3(const Eigen::Transform& affine) -{ - cv::Mat(4, 4, cv::DataType::type, affine.matrix().data()).copyTo(matrix); -} - -template inline -cv::Affine3::Affine3(const Eigen::Transform& affine) -{ - Eigen::Transform a = affine; - cv::Mat(4, 4, cv::DataType::type, a.matrix().data()).copyTo(matrix); -} - -template inline -cv::Affine3::operator Eigen::Transform() const -{ - Eigen::Transform r; - cv::Mat hdr(4, 4, cv::DataType::type, r.matrix().data()); - cv::Mat(matrix, false).copyTo(hdr); - return r; -} - -template inline -cv::Affine3::operator Eigen::Transform() const -{ - return this->operator Eigen::Transform(); -} - -#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */ - - -#endif /* __cplusplus */ - -#endif /* __OPENCV_CORE_AFFINE3_HPP__ */ diff --git a/modules/core/include/opencv2/core/core.hpp b/modules/core/include/opencv2/core/core.hpp deleted file mode 100644 index 2ecb70c..0000000 --- a/modules/core/include/opencv2/core/core.hpp +++ /dev/null @@ -1,4858 +0,0 @@ -/*! \file core.hpp - \brief The Core Functionality - */ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_HPP__ -#define __OPENCV_CORE_HPP__ - -#include "opencv2/core/types_c.h" -#include "opencv2/core/version.hpp" - -#ifdef __cplusplus - -#ifndef SKIP_INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif // SKIP_INCLUDES - -/*! \namespace cv - Namespace where all the C++ OpenCV functionality resides -*/ -namespace cv { - -#undef abs -#undef min -#undef max -#undef Complex - -using std::vector; -using std::string; -using std::ptrdiff_t; - -template class Size_; -template class Point_; -template class Rect_; -template class Vec; -template class Matx; - -typedef std::string String; - -class Mat; -class SparseMat; -typedef Mat MatND; - -namespace ogl { - class Buffer; - class Texture2D; - class Arrays; -} - -// < Deprecated -class GlBuffer; -class GlTexture; -class GlArrays; -class GlCamera; -// > - -namespace gpu { - class GpuMat; -} - -class CV_EXPORTS MatExpr; -class CV_EXPORTS MatOp_Base; -class CV_EXPORTS MatArg; -class CV_EXPORTS MatConstIterator; - -template class Mat_; -template class MatIterator_; -template class MatConstIterator_; -template class MatCommaInitializer_; - -#if !defined(ANDROID) || (defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_WCHAR_T) -typedef std::basic_string WString; - -CV_EXPORTS string fromUtf16(const WString& str); -CV_EXPORTS WString toUtf16(const string& str); -#endif - -CV_EXPORTS string format( const char* fmt, ... ); -CV_EXPORTS string tempfile( const char* suffix CV_DEFAULT(0)); - -// matrix decomposition types -enum { DECOMP_LU=0, DECOMP_SVD=1, DECOMP_EIG=2, DECOMP_CHOLESKY=3, DECOMP_QR=4, DECOMP_NORMAL=16 }; -enum { NORM_INF=1, NORM_L1=2, NORM_L2=4, NORM_L2SQR=5, NORM_HAMMING=6, NORM_HAMMING2=7, NORM_TYPE_MASK=7, NORM_RELATIVE=8, NORM_MINMAX=32 }; -enum { CMP_EQ=0, CMP_GT=1, CMP_GE=2, CMP_LT=3, CMP_LE=4, CMP_NE=5 }; -enum { GEMM_1_T=1, GEMM_2_T=2, GEMM_3_T=4 }; -enum { DFT_INVERSE=1, DFT_SCALE=2, DFT_ROWS=4, DFT_COMPLEX_OUTPUT=16, DFT_REAL_OUTPUT=32, - DCT_INVERSE = DFT_INVERSE, DCT_ROWS=DFT_ROWS }; - - -/*! - The standard OpenCV exception class. - Instances of the class are thrown by various functions and methods in the case of critical errors. - */ -class CV_EXPORTS Exception : public std::exception -{ -public: - /*! - Default constructor - */ - Exception(); - /*! - Full constructor. Normally the constuctor is not called explicitly. - Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used. - */ - Exception(int _code, const string& _err, const string& _func, const string& _file, int _line); - virtual ~Exception() throw(); - - /*! - \return the error description and the context as a text string. - */ - virtual const char *what() const throw(); - void formatMessage(); - - string msg; ///< the formatted error message - - int code; ///< error code @see CVStatus - string err; ///< error description - string func; ///< function name. Available only when the compiler supports getting it - string file; ///< source file name where the error has occured - int line; ///< line number in the source file where the error has occured -}; - - -//! Signals an error and raises the exception. - -/*! - By default the function prints information about the error to stderr, - then it either stops if setBreakOnError() had been called before or raises the exception. - It is possible to alternate error processing by using redirectError(). - - \param exc the exception raisen. - */ -CV_EXPORTS void error( const Exception& exc ); - -//! Sets/resets the break-on-error mode. - -/*! - When the break-on-error mode is set, the default error handler - issues a hardware exception, which can make debugging more convenient. - - \return the previous state - */ -CV_EXPORTS bool setBreakOnError(bool flag); - -typedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name, - const char* err_msg, const char* file_name, - int line, void* userdata ); - -//! Sets the new error handler and the optional user data. - -/*! - The function sets the new error handler, called from cv::error(). - - \param errCallback the new error handler. If NULL, the default error handler is used. - \param userdata the optional user data pointer, passed to the callback. - \param prevUserdata the optional output parameter where the previous user data pointer is stored - - \return the previous error handler -*/ -CV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback, - void* userdata=0, void** prevUserdata=0); - - -#if defined __GNUC__ -#define CV_Func __func__ -#elif defined _MSC_VER -#define CV_Func __FUNCTION__ -#else -#define CV_Func "" -#endif - -#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, CV_Func, __FILE__, __LINE__) ) -#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, CV_Func, __FILE__, __LINE__) ) -#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, CV_Func, __FILE__, __LINE__) ) - -#ifdef _DEBUG -#define CV_DbgAssert(expr) CV_Assert(expr) -#else -#define CV_DbgAssert(expr) -#endif - -CV_EXPORTS void glob(String pattern, std::vector& result, bool recursive = false); - -CV_EXPORTS void setNumThreads(int nthreads); -CV_EXPORTS int getNumThreads(); -CV_EXPORTS int getThreadNum(); - -CV_EXPORTS_W const string& getBuildInformation(); - -//! Returns the number of ticks. - -/*! - The function returns the number of ticks since the certain event (e.g. when the machine was turned on). - It can be used to initialize cv::RNG or to measure a function execution time by reading the tick count - before and after the function call. The granularity of ticks depends on the hardware and OS used. Use - cv::getTickFrequency() to convert ticks to seconds. -*/ -CV_EXPORTS_W int64 getTickCount(); - -/*! - Returns the number of ticks per seconds. - - The function returns the number of ticks (as returned by cv::getTickCount()) per second. - The following code computes the execution time in milliseconds: - - \code - double exec_time = (double)getTickCount(); - // do something ... - exec_time = ((double)getTickCount() - exec_time)*1000./getTickFrequency(); - \endcode -*/ -CV_EXPORTS_W double getTickFrequency(); - -/*! - Returns the number of CPU ticks. - - On platforms where the feature is available, the function returns the number of CPU ticks - since the certain event (normally, the system power-on moment). Using this function - one can accurately measure the execution time of very small code fragments, - for which cv::getTickCount() granularity is not enough. -*/ -CV_EXPORTS_W int64 getCPUTickCount(); - -/*! - Returns SSE etc. support status - - The function returns true if certain hardware features are available. - Currently, the following features are recognized: - - CV_CPU_MMX - MMX - - CV_CPU_SSE - SSE - - CV_CPU_SSE2 - SSE 2 - - CV_CPU_SSE3 - SSE 3 - - CV_CPU_SSSE3 - SSSE 3 - - CV_CPU_SSE4_1 - SSE 4.1 - - CV_CPU_SSE4_2 - SSE 4.2 - - CV_CPU_POPCNT - POPCOUNT - - CV_CPU_AVX - AVX - - \note {Note that the function output is not static. Once you called cv::useOptimized(false), - most of the hardware acceleration is disabled and thus the function will returns false, - until you call cv::useOptimized(true)} -*/ -CV_EXPORTS_W bool checkHardwareSupport(int feature); - -//! returns the number of CPUs (including hyper-threading) -CV_EXPORTS_W int getNumberOfCPUs(); - -/*! - Allocates memory buffer - - This is specialized OpenCV memory allocation function that returns properly aligned memory buffers. - The usage is identical to malloc(). The allocated buffers must be freed with cv::fastFree(). - If there is not enough memory, the function calls cv::error(), which raises an exception. - - \param bufSize buffer size in bytes - \return the allocated memory buffer. -*/ -CV_EXPORTS void* fastMalloc(size_t bufSize); - -/*! - Frees the memory allocated with cv::fastMalloc - - This is the corresponding deallocation function for cv::fastMalloc(). - When ptr==NULL, the function has no effect. -*/ -CV_EXPORTS void fastFree(void* ptr); - -template static inline _Tp* allocate(size_t n) -{ - return new _Tp[n]; -} - -template static inline void deallocate(_Tp* ptr, size_t) -{ - delete[] ptr; -} - -/*! - Aligns pointer by the certain number of bytes - - This small inline function aligns the pointer by the certian number of bytes by shifting - it forward by 0 or a positive offset. -*/ -template static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp)) -{ - return (_Tp*)(((size_t)ptr + n-1) & -n); -} - -/*! - Aligns buffer size by the certain number of bytes - - This small inline function aligns a buffer size by the certian number of bytes by enlarging it. -*/ -static inline size_t alignSize(size_t sz, int n) -{ - assert((n & (n - 1)) == 0); // n is a power of 2 - return (sz + n-1) & -n; -} - -/*! - Turns on/off available optimization - - The function turns on or off the optimized code in OpenCV. Some optimization can not be enabled - or disabled, but, for example, most of SSE code in OpenCV can be temporarily turned on or off this way. - - \note{Since optimization may imply using special data structures, it may be unsafe - to call this function anywhere in the code. Instead, call it somewhere at the top level.} -*/ -CV_EXPORTS_W void setUseOptimized(bool onoff); - -/*! - Returns the current optimization status - - The function returns the current optimization status, which is controlled by cv::setUseOptimized(). -*/ -CV_EXPORTS_W bool useOptimized(); - -/*! - The STL-compilant memory Allocator based on cv::fastMalloc() and cv::fastFree() -*/ -template class Allocator -{ -public: - typedef _Tp value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - template class rebind { typedef Allocator other; }; - - explicit Allocator() {} - ~Allocator() {} - explicit Allocator(Allocator const&) {} - template - explicit Allocator(Allocator const&) {} - - // address - pointer address(reference r) { return &r; } - const_pointer address(const_reference r) { return &r; } - - pointer allocate(size_type count, const void* =0) - { return reinterpret_cast(fastMalloc(count * sizeof (_Tp))); } - - void deallocate(pointer p, size_type) {fastFree(p); } - - size_type max_size() const - { return max(static_cast<_Tp>(-1)/sizeof(_Tp), 1); } - - void construct(pointer p, const _Tp& v) { new(static_cast(p)) _Tp(v); } - void destroy(pointer p) { p->~_Tp(); } -}; - -/////////////////////// Vec (used as element of multi-channel images ///////////////////// - -/*! - A helper class for cv::DataType - - The class is specialized for each fundamental numerical data type supported by OpenCV. - It provides DataDepth::value constant. -*/ -template class DataDepth {}; - -template<> class DataDepth { public: enum { value = CV_8U, fmt=(int)'u' }; }; -template<> class DataDepth { public: enum { value = CV_8U, fmt=(int)'u' }; }; -template<> class DataDepth { public: enum { value = CV_8S, fmt=(int)'c' }; }; -template<> class DataDepth { public: enum { value = CV_8S, fmt=(int)'c' }; }; -template<> class DataDepth { public: enum { value = CV_16U, fmt=(int)'w' }; }; -template<> class DataDepth { public: enum { value = CV_16S, fmt=(int)'s' }; }; -template<> class DataDepth { public: enum { value = CV_32S, fmt=(int)'i' }; }; -// this is temporary solution to support 32-bit unsigned integers -template<> class DataDepth { public: enum { value = CV_32S, fmt=(int)'i' }; }; -template<> class DataDepth { public: enum { value = CV_32F, fmt=(int)'f' }; }; -template<> class DataDepth { public: enum { value = CV_64F, fmt=(int)'d' }; }; -template class DataDepth<_Tp*> { public: enum { value = CV_USRTYPE1, fmt=(int)'r' }; }; - - -////////////////////////////// Small Matrix /////////////////////////// - -/*! - A short numerical vector. - - This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements) - on which you can perform basic arithmetical operations, access individual elements using [] operator etc. - The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc., - which elements are dynamically allocated in the heap. - - The template takes 2 parameters: - -# _Tp element type - -# cn the number of elements - - In addition to the universal notation like Vec, you can use shorter aliases - for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec. - */ - -struct CV_EXPORTS Matx_AddOp {}; -struct CV_EXPORTS Matx_SubOp {}; -struct CV_EXPORTS Matx_ScaleOp {}; -struct CV_EXPORTS Matx_MulOp {}; -struct CV_EXPORTS Matx_MatMulOp {}; -struct CV_EXPORTS Matx_TOp {}; - -template class Matx -{ -public: - typedef _Tp value_type; - typedef Matx<_Tp, (m < n ? m : n), 1> diag_type; - typedef Matx<_Tp, m, n> mat_type; - enum { depth = DataDepth<_Tp>::value, rows = m, cols = n, channels = rows*cols, - type = CV_MAKETYPE(depth, channels) }; - - //! default constructor - Matx(); - - Matx(_Tp v0); //!< 1x1 matrix - Matx(_Tp v0, _Tp v1); //!< 1x2 or 2x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2); //!< 1x3 or 3x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 1x4, 2x2 or 4x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 1x5 or 5x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 1x6, 2x3, 3x2 or 6x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 1x7 or 7x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 1x8, 2x4, 4x2 or 8x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 1x9, 3x3 or 9x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 1x10, 2x5 or 5x2 or 10x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9, _Tp v10, _Tp v11); //!< 1x12, 2x6, 3x4, 4x3, 6x2 or 12x1 matrix - Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9, _Tp v10, _Tp v11, - _Tp v12, _Tp v13, _Tp v14, _Tp v15); //!< 1x16, 4x4 or 16x1 matrix - explicit Matx(const _Tp* vals); //!< initialize from a plain array - - static Matx all(_Tp alpha); - static Matx zeros(); - static Matx ones(); - static Matx eye(); - static Matx diag(const diag_type& d); - static Matx randu(_Tp a, _Tp b); - static Matx randn(_Tp a, _Tp b); - - //! dot product computed with the default precision - _Tp dot(const Matx<_Tp, m, n>& v) const; - - //! dot product computed in double-precision arithmetics - double ddot(const Matx<_Tp, m, n>& v) const; - - //! convertion to another data type - template operator Matx() const; - - //! change the matrix shape - template Matx<_Tp, m1, n1> reshape() const; - - //! extract part of the matrix - template Matx<_Tp, m1, n1> get_minor(int i, int j) const; - - //! extract the matrix row - Matx<_Tp, 1, n> row(int i) const; - - //! extract the matrix column - Matx<_Tp, m, 1> col(int i) const; - - //! extract the matrix diagonal - diag_type diag() const; - - //! transpose the matrix - Matx<_Tp, n, m> t() const; - - //! invert matrix the matrix - Matx<_Tp, n, m> inv(int method=DECOMP_LU) const; - - //! solve linear system - template Matx<_Tp, n, l> solve(const Matx<_Tp, m, l>& rhs, int flags=DECOMP_LU) const; - Vec<_Tp, n> solve(const Vec<_Tp, m>& rhs, int method) const; - - //! multiply two matrices element-wise - Matx<_Tp, m, n> mul(const Matx<_Tp, m, n>& a) const; - - //! element access - const _Tp& operator ()(int i, int j) const; - _Tp& operator ()(int i, int j); - - //! 1D element access - const _Tp& operator ()(int i) const; - _Tp& operator ()(int i); - - Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp); - Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp); - template Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp); - Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp); - template Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp); - Matx(const Matx<_Tp, n, m>& a, Matx_TOp); - - _Tp val[m*n]; //< matrix elements -}; - - -typedef Matx Matx12f; -typedef Matx Matx12d; -typedef Matx Matx13f; -typedef Matx Matx13d; -typedef Matx Matx14f; -typedef Matx Matx14d; -typedef Matx Matx16f; -typedef Matx Matx16d; - -typedef Matx Matx21f; -typedef Matx Matx21d; -typedef Matx Matx31f; -typedef Matx Matx31d; -typedef Matx Matx41f; -typedef Matx Matx41d; -typedef Matx Matx61f; -typedef Matx Matx61d; - -typedef Matx Matx22f; -typedef Matx Matx22d; -typedef Matx Matx23f; -typedef Matx Matx23d; -typedef Matx Matx32f; -typedef Matx Matx32d; - -typedef Matx Matx33f; -typedef Matx Matx33d; - -typedef Matx Matx34f; -typedef Matx Matx34d; -typedef Matx Matx43f; -typedef Matx Matx43d; - -typedef Matx Matx44f; -typedef Matx Matx44d; -typedef Matx Matx66f; -typedef Matx Matx66d; - - -/*! - A short numerical vector. - - This template class represents short numerical vectors (of 1, 2, 3, 4 ... elements) - on which you can perform basic arithmetical operations, access individual elements using [] operator etc. - The vectors are allocated on stack, as opposite to std::valarray, std::vector, cv::Mat etc., - which elements are dynamically allocated in the heap. - - The template takes 2 parameters: - -# _Tp element type - -# cn the number of elements - - In addition to the universal notation like Vec, you can use shorter aliases - for the most popular specialized variants of Vec, e.g. Vec3f ~ Vec. -*/ -template class Vec : public Matx<_Tp, cn, 1> -{ -public: - typedef _Tp value_type; - enum { depth = DataDepth<_Tp>::value, channels = cn, type = CV_MAKETYPE(depth, channels) }; - - //! default constructor - Vec(); - - Vec(_Tp v0); //!< 1-element vector constructor - Vec(_Tp v0, _Tp v1); //!< 2-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2); //!< 3-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3); //!< 4-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4); //!< 5-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5); //!< 6-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6); //!< 7-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7); //!< 8-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8); //!< 9-element vector constructor - Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5, _Tp v6, _Tp v7, _Tp v8, _Tp v9); //!< 10-element vector constructor - explicit Vec(const _Tp* values); - - Vec(const Vec<_Tp, cn>& v); - - static Vec all(_Tp alpha); - - //! per-element multiplication - Vec mul(const Vec<_Tp, cn>& v) const; - - //! conjugation (makes sense for complex numbers and quaternions) - Vec conj() const; - - /*! - cross product of the two 3D vectors. - - For other dimensionalities the exception is raised - */ - Vec cross(const Vec& v) const; - //! convertion to another data type - template operator Vec() const; - //! conversion to 4-element CvScalar. - operator CvScalar() const; - - /*! element access */ - const _Tp& operator [](int i) const; - _Tp& operator[](int i); - const _Tp& operator ()(int i) const; - _Tp& operator ()(int i); - - Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp); - Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp); - template Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp); -}; - - -/* \typedef - - Shorter aliases for the most popular specializations of Vec -*/ -typedef Vec Vec2b; -typedef Vec Vec3b; -typedef Vec Vec4b; - -typedef Vec Vec2s; -typedef Vec Vec3s; -typedef Vec Vec4s; - -typedef Vec Vec2w; -typedef Vec Vec3w; -typedef Vec Vec4w; - -typedef Vec Vec2i; -typedef Vec Vec3i; -typedef Vec Vec4i; -typedef Vec Vec6i; -typedef Vec Vec8i; - -typedef Vec Vec2f; -typedef Vec Vec3f; -typedef Vec Vec4f; -typedef Vec Vec6f; - -typedef Vec Vec2d; -typedef Vec Vec3d; -typedef Vec Vec4d; -typedef Vec Vec6d; - - -//////////////////////////////// Complex ////////////////////////////// - -/*! - A complex number class. - - The template class is similar and compatible with std::complex, however it provides slightly - more convenient access to the real and imaginary parts using through the simple field access, as opposite - to std::complex::real() and std::complex::imag(). -*/ -template class Complex -{ -public: - - //! constructors - Complex(); - Complex( _Tp _re, _Tp _im=0 ); - Complex( const std::complex<_Tp>& c ); - - //! conversion to another data type - template operator Complex() const; - //! conjugation - Complex conj() const; - //! conversion to std::complex - operator std::complex<_Tp>() const; - - _Tp re, im; //< the real and the imaginary parts -}; - - -/*! - \typedef -*/ -typedef Complex Complexf; -typedef Complex Complexd; - - -//////////////////////////////// Point_ //////////////////////////////// - -/*! - template 2D point class. - - The class defines a point in 2D space. Data type of the point coordinates is specified - as a template parameter. There are a few shorter aliases available for user convenience. - See cv::Point, cv::Point2i, cv::Point2f and cv::Point2d. -*/ -template class Point_ -{ -public: - typedef _Tp value_type; - - // various constructors - Point_(); - Point_(_Tp _x, _Tp _y); - Point_(const Point_& pt); - Point_(const CvPoint& pt); - Point_(const CvPoint2D32f& pt); - Point_(const Size_<_Tp>& sz); - Point_(const Vec<_Tp, 2>& v); - - Point_& operator = (const Point_& pt); - //! conversion to another data type - template operator Point_<_Tp2>() const; - - //! conversion to the old-style C structures - operator CvPoint() const; - operator CvPoint2D32f() const; - operator Vec<_Tp, 2>() const; - - //! dot product - _Tp dot(const Point_& pt) const; - //! dot product computed in double-precision arithmetics - double ddot(const Point_& pt) const; - //! cross-product - double cross(const Point_& pt) const; - //! checks whether the point is inside the specified rectangle - bool inside(const Rect_<_Tp>& r) const; - - _Tp x, y; //< the point coordinates -}; - -/*! - template 3D point class. - - The class defines a point in 3D space. Data type of the point coordinates is specified - as a template parameter. - - \see cv::Point3i, cv::Point3f and cv::Point3d -*/ -template class Point3_ -{ -public: - typedef _Tp value_type; - - // various constructors - Point3_(); - Point3_(_Tp _x, _Tp _y, _Tp _z); - Point3_(const Point3_& pt); - explicit Point3_(const Point_<_Tp>& pt); - Point3_(const CvPoint3D32f& pt); - Point3_(const Vec<_Tp, 3>& v); - - Point3_& operator = (const Point3_& pt); - //! conversion to another data type - template operator Point3_<_Tp2>() const; - //! conversion to the old-style CvPoint... - operator CvPoint3D32f() const; - //! conversion to cv::Vec<> - operator Vec<_Tp, 3>() const; - - //! dot product - _Tp dot(const Point3_& pt) const; - //! dot product computed in double-precision arithmetics - double ddot(const Point3_& pt) const; - //! cross product of the 2 3D points - Point3_ cross(const Point3_& pt) const; - - _Tp x, y, z; //< the point coordinates -}; - -//////////////////////////////// Size_ //////////////////////////////// - -/*! - The 2D size class - - The class represents the size of a 2D rectangle, image size, matrix size etc. - Normally, cv::Size ~ cv::Size_ is used. -*/ -template class Size_ -{ -public: - typedef _Tp value_type; - - //! various constructors - Size_(); - Size_(_Tp _width, _Tp _height); - Size_(const Size_& sz); - Size_(const CvSize& sz); - Size_(const CvSize2D32f& sz); - Size_(const Point_<_Tp>& pt); - - Size_& operator = (const Size_& sz); - //! the area (width*height) - _Tp area() const; - - //! conversion of another data type. - template operator Size_<_Tp2>() const; - - //! conversion to the old-style OpenCV types - operator CvSize() const; - operator CvSize2D32f() const; - - _Tp width, height; // the width and the height -}; - -//////////////////////////////// Rect_ //////////////////////////////// - -/*! - The 2D up-right rectangle class - - The class represents a 2D rectangle with coordinates of the specified data type. - Normally, cv::Rect ~ cv::Rect_ is used. -*/ -template class Rect_ -{ -public: - typedef _Tp value_type; - - //! various constructors - Rect_(); - Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height); - Rect_(const Rect_& r); - Rect_(const CvRect& r); - Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz); - Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2); - - Rect_& operator = ( const Rect_& r ); - //! the top-left corner - Point_<_Tp> tl() const; - //! the bottom-right corner - Point_<_Tp> br() const; - - //! size (width, height) of the rectangle - Size_<_Tp> size() const; - //! area (width*height) of the rectangle - _Tp area() const; - - //! conversion to another data type - template operator Rect_<_Tp2>() const; - //! conversion to the old-style CvRect - operator CvRect() const; - - //! checks whether the rectangle contains the point - bool contains(const Point_<_Tp>& pt) const; - - _Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle -}; - - -/*! - \typedef - - shorter aliases for the most popular cv::Point_<>, cv::Size_<> and cv::Rect_<> specializations -*/ -typedef Point_ Point2i; -typedef Point2i Point; -typedef Size_ Size2i; -typedef Size_ Size2d; -typedef Size2i Size; -typedef Rect_ Rect; -typedef Point_ Point2f; -typedef Point_ Point2d; -typedef Size_ Size2f; -typedef Point3_ Point3i; -typedef Point3_ Point3f; -typedef Point3_ Point3d; - - -/*! - The rotated 2D rectangle. - - The class represents rotated (i.e. not up-right) rectangles on a plane. - Each rectangle is described by the center point (mass center), length of each side - (represented by cv::Size2f structure) and the rotation angle in degrees. -*/ -class CV_EXPORTS RotatedRect -{ -public: - //! various constructors - RotatedRect(); - RotatedRect(const Point2f& center, const Size2f& size, float angle); - RotatedRect(const CvBox2D& box); - - //! returns 4 vertices of the rectangle - void points(Point2f pts[]) const; - //! returns the minimal up-right rectangle containing the rotated rectangle - Rect boundingRect() const; - //! conversion to the old-style CvBox2D structure - operator CvBox2D() const; - - Point2f center; //< the rectangle mass center - Size2f size; //< width and height of the rectangle - float angle; //< the rotation angle. When the angle is 0, 90, 180, 270 etc., the rectangle becomes an up-right rectangle. -}; - -//////////////////////////////// Scalar_ /////////////////////////////// - -/*! - The template scalar class. - - This is partially specialized cv::Vec class with the number of elements = 4, i.e. a short vector of four elements. - Normally, cv::Scalar ~ cv::Scalar_ is used. -*/ -template class Scalar_ : public Vec<_Tp, 4> -{ -public: - //! various constructors - Scalar_(); - Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0); - Scalar_(const CvScalar& s); - Scalar_(_Tp v0); - - //! returns a scalar with all elements set to v0 - static Scalar_<_Tp> all(_Tp v0); - //! conversion to the old-style CvScalar - operator CvScalar() const; - - //! conversion to another data type - template operator Scalar_() const; - - //! per-element product - Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const; - - // returns (v0, -v1, -v2, -v3) - Scalar_<_Tp> conj() const; - - // returns true iff v1 == v2 == v3 == 0 - bool isReal() const; -}; - -typedef Scalar_ Scalar; - -CV_EXPORTS void scalarToRawData(const Scalar& s, void* buf, int type, int unroll_to=0); - -//////////////////////////////// Range ///////////////////////////////// - -/*! - The 2D range class - - This is the class used to specify a continuous subsequence, i.e. part of a contour, or a column span in a matrix. -*/ -class CV_EXPORTS Range -{ -public: - Range(); - Range(int _start, int _end); - Range(const CvSlice& slice); - int size() const; - bool empty() const; - static Range all(); - operator CvSlice() const; - - int start, end; -}; - -/////////////////////////////// DataType //////////////////////////////// - -/*! - Informative template class for OpenCV "scalars". - - The class is specialized for each primitive numerical type supported by OpenCV (such as unsigned char or float), - as well as for more complex types, like cv::Complex<>, std::complex<>, cv::Vec<> etc. - The common property of all such types (called "scalars", do not confuse it with cv::Scalar_) - is that each of them is basically a tuple of numbers of the same type. Each "scalar" can be represented - by the depth id (CV_8U ... CV_64F) and the number of channels. - OpenCV matrices, 2D or nD, dense or sparse, can store "scalars", - as long as the number of channels does not exceed CV_CN_MAX. -*/ -template class DataType -{ -public: - typedef _Tp value_type; - typedef value_type work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 1, depth = -1, channels = 1, fmt=0, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef bool value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef uchar value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef schar value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef schar value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef ushort value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef short value_type; - typedef int work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef int value_type; - typedef value_type work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef float value_type; - typedef value_type work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template<> class DataType -{ -public: - typedef double value_type; - typedef value_type work_type; - typedef value_type channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 1, - fmt=DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template class DataType > -{ -public: - typedef Matx<_Tp, m, n> value_type; - typedef Matx::work_type, m, n> work_type; - typedef _Tp channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = m*n, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template class DataType > -{ -public: - typedef Vec<_Tp, cn> value_type; - typedef Vec::work_type, cn> work_type; - typedef _Tp channel_type; - typedef value_type vec_type; - enum { generic_type = 0, depth = DataDepth::value, channels = cn, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; -}; - -template class DataType > -{ -public: - typedef std::complex<_Tp> value_type; - typedef value_type work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 2, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Complex<_Tp> value_type; - typedef value_type work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 2, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Point_<_Tp> value_type; - typedef Point_::work_type> work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 2, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Point3_<_Tp> value_type; - typedef Point3_::work_type> work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 3, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Size_<_Tp> value_type; - typedef Size_::work_type> work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 2, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Rect_<_Tp> value_type; - typedef Rect_::work_type> work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 4, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template class DataType > -{ -public: - typedef Scalar_<_Tp> value_type; - typedef Scalar_::work_type> work_type; - typedef _Tp channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 4, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -template<> class DataType -{ -public: - typedef Range value_type; - typedef value_type work_type; - typedef int channel_type; - enum { generic_type = 0, depth = DataDepth::value, channels = 2, - fmt = ((channels-1)<<8) + DataDepth::fmt, - type = CV_MAKETYPE(depth, channels) }; - typedef Vec vec_type; -}; - -//////////////////// generic_type ref-counting pointer class for C/C++ objects //////////////////////// - -/*! - Smart pointer to dynamically allocated objects. - - This is template pointer-wrapping class that stores the associated reference counter along with the - object pointer. The class is similar to std::smart_ptr<> from the recent addons to the C++ standard, - but is shorter to write :) and self-contained (i.e. does add any dependency on the compiler or an external library). - - Basically, you can use "Ptr ptr" (or faster "const Ptr& ptr" for read-only access) - everywhere instead of "MyObjectType* ptr", where MyObjectType is some C structure or a C++ class. - To make it all work, you need to specialize Ptr<>::delete_obj(), like: - - \code - template<> void Ptr::delete_obj() { call_destructor_func(obj); } - \endcode - - \note{if MyObjectType is a C++ class with a destructor, you do not need to specialize delete_obj(), - since the default implementation calls "delete obj;"} - - \note{Another good property of the class is that the operations on the reference counter are atomic, - i.e. it is safe to use the class in multi-threaded applications} -*/ -template class Ptr -{ -public: - //! empty constructor - Ptr(); - //! take ownership of the pointer. The associated reference counter is allocated and set to 1 - Ptr(_Tp* _obj); - //! calls release() - ~Ptr(); - //! copy constructor. Copies the members and calls addref() - Ptr(const Ptr& ptr); - template Ptr(const Ptr<_Tp2>& ptr); - //! copy operator. Calls ptr.addref() and release() before copying the members - Ptr& operator = (const Ptr& ptr); - //! increments the reference counter - void addref(); - //! decrements the reference counter. If it reaches 0, delete_obj() is called - void release(); - //! deletes the object. Override if needed - void delete_obj(); - //! returns true iff obj==NULL - bool empty() const; - - //! cast pointer to another type - template Ptr<_Tp2> ptr(); - template const Ptr<_Tp2> ptr() const; - - //! helper operators making "Ptr ptr" use very similar to "T* ptr". - _Tp* operator -> (); - const _Tp* operator -> () const; - - operator _Tp* (); - operator const _Tp*() const; - - _Tp* obj; //< the object pointer. - int* refcount; //< the associated reference counter -}; - - -//////////////////////// Input/Output Array Arguments ///////////////////////////////// - -/*! - Proxy datatype for passing Mat's and vector<>'s as input parameters - */ -class CV_EXPORTS _InputArray -{ -public: - enum { - KIND_SHIFT = 16, - FIXED_TYPE = 0x8000 << KIND_SHIFT, - FIXED_SIZE = 0x4000 << KIND_SHIFT, - KIND_MASK = ~(FIXED_TYPE|FIXED_SIZE) - (1 << KIND_SHIFT) + 1, - - NONE = 0 << KIND_SHIFT, - MAT = 1 << KIND_SHIFT, - MATX = 2 << KIND_SHIFT, - STD_VECTOR = 3 << KIND_SHIFT, - STD_VECTOR_VECTOR = 4 << KIND_SHIFT, - STD_VECTOR_MAT = 5 << KIND_SHIFT, - EXPR = 6 << KIND_SHIFT, - OPENGL_BUFFER = 7 << KIND_SHIFT, - OPENGL_TEXTURE = 8 << KIND_SHIFT, - GPU_MAT = 9 << KIND_SHIFT, - OCL_MAT =10 << KIND_SHIFT - }; - _InputArray(); - - _InputArray(const Mat& m); - _InputArray(const MatExpr& expr); - template _InputArray(const _Tp* vec, int n); - template _InputArray(const vector<_Tp>& vec); - template _InputArray(const vector >& vec); - _InputArray(const vector& vec); - template _InputArray(const vector >& vec); - template _InputArray(const Mat_<_Tp>& m); - template _InputArray(const Matx<_Tp, m, n>& matx); - _InputArray(const Scalar& s); - _InputArray(const double& val); - // < Deprecated - _InputArray(const GlBuffer& buf); - _InputArray(const GlTexture& tex); - // > - _InputArray(const gpu::GpuMat& d_mat); - _InputArray(const ogl::Buffer& buf); - _InputArray(const ogl::Texture2D& tex); - - virtual Mat getMat(int i=-1) const; - virtual void getMatVector(vector& mv) const; - // < Deprecated - virtual GlBuffer getGlBuffer() const; - virtual GlTexture getGlTexture() const; - // > - virtual gpu::GpuMat getGpuMat() const; - /*virtual*/ ogl::Buffer getOGlBuffer() const; - /*virtual*/ ogl::Texture2D getOGlTexture2D() const; - - virtual int kind() const; - virtual Size size(int i=-1) const; - virtual size_t total(int i=-1) const; - virtual int type(int i=-1) const; - virtual int depth(int i=-1) const; - virtual int channels(int i=-1) const; - virtual bool empty() const; - -#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY - virtual ~_InputArray(); -#endif - - int flags; - void* obj; - Size sz; -}; - - -enum -{ - DEPTH_MASK_8U = 1 << CV_8U, - DEPTH_MASK_8S = 1 << CV_8S, - DEPTH_MASK_16U = 1 << CV_16U, - DEPTH_MASK_16S = 1 << CV_16S, - DEPTH_MASK_32S = 1 << CV_32S, - DEPTH_MASK_32F = 1 << CV_32F, - DEPTH_MASK_64F = 1 << CV_64F, - DEPTH_MASK_ALL = (DEPTH_MASK_64F<<1)-1, - DEPTH_MASK_ALL_BUT_8S = DEPTH_MASK_ALL & ~DEPTH_MASK_8S, - DEPTH_MASK_FLT = DEPTH_MASK_32F + DEPTH_MASK_64F -}; - - -/*! - Proxy datatype for passing Mat's and vector<>'s as input parameters - */ -class CV_EXPORTS _OutputArray : public _InputArray -{ -public: - _OutputArray(); - - _OutputArray(Mat& m); - template _OutputArray(vector<_Tp>& vec); - template _OutputArray(vector >& vec); - _OutputArray(vector& vec); - template _OutputArray(vector >& vec); - template _OutputArray(Mat_<_Tp>& m); - template _OutputArray(Matx<_Tp, m, n>& matx); - template _OutputArray(_Tp* vec, int n); - _OutputArray(gpu::GpuMat& d_mat); - _OutputArray(ogl::Buffer& buf); - _OutputArray(ogl::Texture2D& tex); - - _OutputArray(const Mat& m); - template _OutputArray(const vector<_Tp>& vec); - template _OutputArray(const vector >& vec); - _OutputArray(const vector& vec); - template _OutputArray(const vector >& vec); - template _OutputArray(const Mat_<_Tp>& m); - template _OutputArray(const Matx<_Tp, m, n>& matx); - template _OutputArray(const _Tp* vec, int n); - _OutputArray(const gpu::GpuMat& d_mat); - _OutputArray(const ogl::Buffer& buf); - _OutputArray(const ogl::Texture2D& tex); - - virtual bool fixedSize() const; - virtual bool fixedType() const; - virtual bool needed() const; - virtual Mat& getMatRef(int i=-1) const; - /*virtual*/ gpu::GpuMat& getGpuMatRef() const; - /*virtual*/ ogl::Buffer& getOGlBufferRef() const; - /*virtual*/ ogl::Texture2D& getOGlTexture2DRef() const; - virtual void create(Size sz, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const; - virtual void create(int rows, int cols, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const; - virtual void create(int dims, const int* size, int type, int i=-1, bool allowTransposed=false, int fixedDepthMask=0) const; - virtual void release() const; - virtual void clear() const; - -#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY - virtual ~_OutputArray(); -#endif -}; - -typedef const _InputArray& InputArray; -typedef InputArray InputArrayOfArrays; -typedef const _OutputArray& OutputArray; -typedef OutputArray OutputArrayOfArrays; -typedef OutputArray InputOutputArray; -typedef OutputArray InputOutputArrayOfArrays; - -CV_EXPORTS OutputArray noArray(); - -/////////////////////////////////////// Mat /////////////////////////////////////////// - -enum { MAGIC_MASK=0xFFFF0000, TYPE_MASK=0x00000FFF, DEPTH_MASK=7 }; - -static inline size_t getElemSize(int type) { return CV_ELEM_SIZE(type); } - -/*! - Custom array allocator - -*/ -class CV_EXPORTS MatAllocator -{ -public: - MatAllocator() {} - virtual ~MatAllocator() {} - virtual void allocate(int dims, const int* sizes, int type, int*& refcount, - uchar*& datastart, uchar*& data, size_t* step) = 0; - virtual void deallocate(int* refcount, uchar* datastart, uchar* data) = 0; -}; - -/*! - The n-dimensional matrix class. - - The class represents an n-dimensional dense numerical array that can act as - a matrix, image, optical flow map, 3-focal tensor etc. - It is very similar to CvMat and CvMatND types from earlier versions of OpenCV, - and similarly to those types, the matrix can be multi-channel. It also fully supports ROI mechanism. - - There are many different ways to create cv::Mat object. Here are the some popular ones: -
            -
          • using cv::Mat::create(nrows, ncols, type) method or - the similar constructor cv::Mat::Mat(nrows, ncols, type[, fill_value]) constructor. - A new matrix of the specified size and specifed type will be allocated. - "type" has the same meaning as in cvCreateMat function, - e.g. CV_8UC1 means 8-bit single-channel matrix, CV_32FC2 means 2-channel (i.e. complex) - floating-point matrix etc: - - \code - // make 7x7 complex matrix filled with 1+3j. - cv::Mat M(7,7,CV_32FC2,Scalar(1,3)); - // and now turn M to 100x60 15-channel 8-bit matrix. - // The old content will be deallocated - M.create(100,60,CV_8UC(15)); - \endcode - - As noted in the introduction of this chapter, Mat::create() - will only allocate a new matrix when the current matrix dimensionality - or type are different from the specified. - -
          • by using a copy constructor or assignment operator, where on the right side it can - be a matrix or expression, see below. Again, as noted in the introduction, - matrix assignment is O(1) operation because it only copies the header - and increases the reference counter. cv::Mat::clone() method can be used to get a full - (a.k.a. deep) copy of the matrix when you need it. - -
          • by constructing a header for a part of another matrix. It can be a single row, single column, - several rows, several columns, rectangular region in the matrix (called a minor in algebra) or - a diagonal. Such operations are also O(1), because the new header will reference the same data. - You can actually modify a part of the matrix using this feature, e.g. - - \code - // add 5-th row, multiplied by 3 to the 3rd row - M.row(3) = M.row(3) + M.row(5)*3; - - // now copy 7-th column to the 1-st column - // M.col(1) = M.col(7); // this will not work - Mat M1 = M.col(1); - M.col(7).copyTo(M1); - - // create new 320x240 image - cv::Mat img(Size(320,240),CV_8UC3); - // select a roi - cv::Mat roi(img, Rect(10,10,100,100)); - // fill the ROI with (0,255,0) (which is green in RGB space); - // the original 320x240 image will be modified - roi = Scalar(0,255,0); - \endcode - - Thanks to the additional cv::Mat::datastart and cv::Mat::dataend members, it is possible to - compute the relative sub-matrix position in the main "container" matrix using cv::Mat::locateROI(): - - \code - Mat A = Mat::eye(10, 10, CV_32S); - // extracts A columns, 1 (inclusive) to 3 (exclusive). - Mat B = A(Range::all(), Range(1, 3)); - // extracts B rows, 5 (inclusive) to 9 (exclusive). - // that is, C ~ A(Range(5, 9), Range(1, 3)) - Mat C = B(Range(5, 9), Range::all()); - Size size; Point ofs; - C.locateROI(size, ofs); - // size will be (width=10,height=10) and the ofs will be (x=1, y=5) - \endcode - - As in the case of whole matrices, if you need a deep copy, use cv::Mat::clone() method - of the extracted sub-matrices. - -
          • by making a header for user-allocated-data. It can be useful for -
              -
            1. processing "foreign" data using OpenCV (e.g. when you implement - a DirectShow filter or a processing module for gstreamer etc.), e.g. - - \code - void process_video_frame(const unsigned char* pixels, - int width, int height, int step) - { - cv::Mat img(height, width, CV_8UC3, pixels, step); - cv::GaussianBlur(img, img, cv::Size(7,7), 1.5, 1.5); - } - \endcode - -
            2. for quick initialization of small matrices and/or super-fast element access - - \code - double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}}; - cv::Mat M = cv::Mat(3, 3, CV_64F, m).inv(); - \endcode -
            - - partial yet very common cases of this "user-allocated data" case are conversions - from CvMat and IplImage to cv::Mat. For this purpose there are special constructors - taking pointers to CvMat or IplImage and the optional - flag indicating whether to copy the data or not. - - Backward conversion from cv::Mat to CvMat or IplImage is provided via cast operators - cv::Mat::operator CvMat() an cv::Mat::operator IplImage(). - The operators do not copy the data. - - - \code - IplImage* img = cvLoadImage("greatwave.jpg", 1); - Mat mtx(img); // convert IplImage* -> cv::Mat - CvMat oldmat = mtx; // convert cv::Mat -> CvMat - CV_Assert(oldmat.cols == img->width && oldmat.rows == img->height && - oldmat.data.ptr == (uchar*)img->imageData && oldmat.step == img->widthStep); - \endcode - -
          • by using MATLAB-style matrix initializers, cv::Mat::zeros(), cv::Mat::ones(), cv::Mat::eye(), e.g.: - - \code - // create a double-precision identity martix and add it to M. - M += Mat::eye(M.rows, M.cols, CV_64F); - \endcode - -
          • by using comma-separated initializer: - - \code - // create 3x3 double-precision identity matrix - Mat M = (Mat_(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1); - \endcode - - here we first call constructor of cv::Mat_ class (that we describe further) with the proper matrix, - and then we just put "<<" operator followed by comma-separated values that can be constants, - variables, expressions etc. Also, note the extra parentheses that are needed to avoid compiler errors. - -
          - - Once matrix is created, it will be automatically managed by using reference-counting mechanism - (unless the matrix header is built on top of user-allocated data, - in which case you should handle the data by yourself). - The matrix data will be deallocated when no one points to it; - if you want to release the data pointed by a matrix header before the matrix destructor is called, - use cv::Mat::release(). - - The next important thing to learn about the matrix class is element access. Here is how the matrix is stored. - The elements are stored in row-major order (row by row). The cv::Mat::data member points to the first element of the first row, - cv::Mat::rows contains the number of matrix rows and cv::Mat::cols - the number of matrix columns. There is yet another member, - cv::Mat::step that is used to actually compute address of a matrix element. cv::Mat::step is needed because the matrix can be - a part of another matrix or because there can some padding space in the end of each row for a proper alignment. - - \image html roi.png - - Given these parameters, address of the matrix element M_{ij} is computed as following: - - addr(M_{ij})=M.data + M.step*i + j*M.elemSize() - - if you know the matrix element type, e.g. it is float, then you can use cv::Mat::at() method: - - addr(M_{ij})=&M.at(i,j) - - (where & is used to convert the reference returned by cv::Mat::at() to a pointer). - if you need to process a whole row of matrix, the most efficient way is to get - the pointer to the row first, and then just use plain C operator []: - - \code - // compute sum of positive matrix elements - // (assuming that M is double-precision matrix) - double sum=0; - for(int i = 0; i < M.rows; i++) - { - const double* Mi = M.ptr(i); - for(int j = 0; j < M.cols; j++) - sum += std::max(Mi[j], 0.); - } - \endcode - - Some operations, like the above one, do not actually depend on the matrix shape, - they just process elements of a matrix one by one (or elements from multiple matrices - that are sitting in the same place, e.g. matrix addition). Such operations are called - element-wise and it makes sense to check whether all the input/output matrices are continuous, - i.e. have no gaps in the end of each row, and if yes, process them as a single long row: - - \code - // compute sum of positive matrix elements, optimized variant - double sum=0; - int cols = M.cols, rows = M.rows; - if(M.isContinuous()) - { - cols *= rows; - rows = 1; - } - for(int i = 0; i < rows; i++) - { - const double* Mi = M.ptr(i); - for(int j = 0; j < cols; j++) - sum += std::max(Mi[j], 0.); - } - \endcode - in the case of continuous matrix the outer loop body will be executed just once, - so the overhead will be smaller, which will be especially noticeable in the case of small matrices. - - Finally, there are STL-style iterators that are smart enough to skip gaps between successive rows: - \code - // compute sum of positive matrix elements, iterator-based variant - double sum=0; - MatConstIterator_ it = M.begin(), it_end = M.end(); - for(; it != it_end; ++it) - sum += std::max(*it, 0.); - \endcode - - The matrix iterators are random-access iterators, so they can be passed - to any STL algorithm, including std::sort(). -*/ -class CV_EXPORTS Mat -{ -public: - //! default constructor - Mat(); - //! constructs 2D matrix of the specified size and type - // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.) - Mat(int rows, int cols, int type); - Mat(Size size, int type); - //! constucts 2D matrix and fills it with the specified value _s. - Mat(int rows, int cols, int type, const Scalar& s); - Mat(Size size, int type, const Scalar& s); - - //! constructs n-dimensional matrix - Mat(int ndims, const int* sizes, int type); - Mat(int ndims, const int* sizes, int type, const Scalar& s); - - //! copy constructor - Mat(const Mat& m); - //! constructor for matrix headers pointing to user-allocated data - Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP); - Mat(Size size, int type, void* data, size_t step=AUTO_STEP); - Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0); - - //! creates a matrix header for a part of the bigger matrix - Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all()); - Mat(const Mat& m, const Rect& roi); - Mat(const Mat& m, const Range* ranges); - //! converts old-style CvMat to the new matrix; the data is not copied by default - Mat(const CvMat* m, bool copyData=false); - //! converts old-style CvMatND to the new matrix; the data is not copied by default - Mat(const CvMatND* m, bool copyData=false); - //! converts old-style IplImage to the new matrix; the data is not copied by default - Mat(const IplImage* img, bool copyData=false); - //! builds matrix from std::vector with or without copying the data - template explicit Mat(const vector<_Tp>& vec, bool copyData=false); - //! builds matrix from cv::Vec; the data is copied by default - template explicit Mat(const Vec<_Tp, n>& vec, bool copyData=true); - //! builds matrix from cv::Matx; the data is copied by default - template explicit Mat(const Matx<_Tp, m, n>& mtx, bool copyData=true); - //! builds matrix from a 2D point - template explicit Mat(const Point_<_Tp>& pt, bool copyData=true); - //! builds matrix from a 3D point - template explicit Mat(const Point3_<_Tp>& pt, bool copyData=true); - //! builds matrix from comma initializer - template explicit Mat(const MatCommaInitializer_<_Tp>& commaInitializer); - - //! download data from GpuMat - explicit Mat(const gpu::GpuMat& m); - - //! destructor - calls release() - ~Mat(); - //! assignment operators - Mat& operator = (const Mat& m); - Mat& operator = (const MatExpr& expr); - - //! returns a new matrix header for the specified row - Mat row(int y) const; - //! returns a new matrix header for the specified column - Mat col(int x) const; - //! ... for the specified row span - Mat rowRange(int startrow, int endrow) const; - Mat rowRange(const Range& r) const; - //! ... for the specified column span - Mat colRange(int startcol, int endcol) const; - Mat colRange(const Range& r) const; - //! ... for the specified diagonal - // (d=0 - the main diagonal, - // >0 - a diagonal from the lower half, - // <0 - a diagonal from the upper half) - Mat diag(int d=0) const; - //! constructs a square diagonal matrix which main diagonal is vector "d" - static Mat diag(const Mat& d); - - //! returns deep copy of the matrix, i.e. the data is copied - Mat clone() const; - //! copies the matrix content to "m". - // It calls m.create(this->size(), this->type()). - void copyTo( OutputArray m ) const; - //! copies those matrix elements to "m" that are marked with non-zero mask elements. - void copyTo( OutputArray m, InputArray mask ) const; - //! converts matrix to another datatype with optional scalng. See cvConvertScale. - void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const; - - void assignTo( Mat& m, int type=-1 ) const; - - //! sets every matrix element to s - Mat& operator = (const Scalar& s); - //! sets some of the matrix elements to s, according to the mask - Mat& setTo(InputArray value, InputArray mask=noArray()); - //! creates alternative matrix header for the same data, with different - // number of channels and/or different number of rows. see cvReshape. - Mat reshape(int cn, int rows=0) const; - Mat reshape(int cn, int newndims, const int* newsz) const; - - //! matrix transposition by means of matrix expressions - MatExpr t() const; - //! matrix inversion by means of matrix expressions - MatExpr inv(int method=DECOMP_LU) const; - //! per-element matrix multiplication by means of matrix expressions - MatExpr mul(InputArray m, double scale=1) const; - - //! computes cross-product of 2 3D vectors - Mat cross(InputArray m) const; - //! computes dot-product - double dot(InputArray m) const; - - //! Matlab-style matrix initialization - static MatExpr zeros(int rows, int cols, int type); - static MatExpr zeros(Size size, int type); - static MatExpr zeros(int ndims, const int* sz, int type); - static MatExpr ones(int rows, int cols, int type); - static MatExpr ones(Size size, int type); - static MatExpr ones(int ndims, const int* sz, int type); - static MatExpr eye(int rows, int cols, int type); - static MatExpr eye(Size size, int type); - - //! allocates new matrix data unless the matrix already has specified size and type. - // previous data is unreferenced if needed. - void create(int rows, int cols, int type); - void create(Size size, int type); - void create(int ndims, const int* sizes, int type); - - //! increases the reference counter; use with care to avoid memleaks - void addref(); - //! decreases reference counter; - // deallocates the data when reference counter reaches 0. - void release(); - - //! deallocates the matrix data - void deallocate(); - //! internal use function; properly re-allocates _size, _step arrays - void copySize(const Mat& m); - - //! reserves enough space to fit sz hyper-planes - void reserve(size_t sz); - //! resizes matrix to the specified number of hyper-planes - void resize(size_t sz); - //! resizes matrix to the specified number of hyper-planes; initializes the newly added elements - void resize(size_t sz, const Scalar& s); - //! internal function - void push_back_(const void* elem); - //! adds element to the end of 1d matrix (or possibly multiple elements when _Tp=Mat) - template void push_back(const _Tp& elem); - template void push_back(const Mat_<_Tp>& elem); - void push_back(const Mat& m); - //! removes several hyper-planes from bottom of the matrix - void pop_back(size_t nelems=1); - - //! locates matrix header within a parent matrix. See below - void locateROI( Size& wholeSize, Point& ofs ) const; - //! moves/resizes the current matrix ROI inside the parent matrix. - Mat& adjustROI( int dtop, int dbottom, int dleft, int dright ); - //! extracts a rectangular sub-matrix - // (this is a generalized form of row, rowRange etc.) - Mat operator()( Range rowRange, Range colRange ) const; - Mat operator()( const Rect& roi ) const; - Mat operator()( const Range* ranges ) const; - - //! converts header to CvMat; no data is copied - operator CvMat() const; - //! converts header to CvMatND; no data is copied - operator CvMatND() const; - //! converts header to IplImage; no data is copied - operator IplImage() const; - - template operator vector<_Tp>() const; - template operator Vec<_Tp, n>() const; - template operator Matx<_Tp, m, n>() const; - - //! returns true iff the matrix data is continuous - // (i.e. when there are no gaps between successive rows). - // similar to CV_IS_MAT_CONT(cvmat->type) - bool isContinuous() const; - - //! returns true if the matrix is a submatrix of another matrix - bool isSubmatrix() const; - - //! returns element size in bytes, - // similar to CV_ELEM_SIZE(cvmat->type) - size_t elemSize() const; - //! returns the size of element channel in bytes. - size_t elemSize1() const; - //! returns element type, similar to CV_MAT_TYPE(cvmat->type) - int type() const; - //! returns element type, similar to CV_MAT_DEPTH(cvmat->type) - int depth() const; - //! returns element type, similar to CV_MAT_CN(cvmat->type) - int channels() const; - //! returns step/elemSize1() - size_t step1(int i=0) const; - //! returns true if matrix data is NULL - bool empty() const; - //! returns the total number of matrix elements - size_t total() const; - - //! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise - int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const; - - //! returns pointer to i0-th submatrix along the dimension #0 - uchar* ptr(int i0=0); - const uchar* ptr(int i0=0) const; - - //! returns pointer to (i0,i1) submatrix along the dimensions #0 and #1 - uchar* ptr(int i0, int i1); - const uchar* ptr(int i0, int i1) const; - - //! returns pointer to (i0,i1,i3) submatrix along the dimensions #0, #1, #2 - uchar* ptr(int i0, int i1, int i2); - const uchar* ptr(int i0, int i1, int i2) const; - - //! returns pointer to the matrix element - uchar* ptr(const int* idx); - //! returns read-only pointer to the matrix element - const uchar* ptr(const int* idx) const; - - template uchar* ptr(const Vec& idx); - template const uchar* ptr(const Vec& idx) const; - - //! template version of the above method - template _Tp* ptr(int i0=0); - template const _Tp* ptr(int i0=0) const; - - template _Tp* ptr(int i0, int i1); - template const _Tp* ptr(int i0, int i1) const; - - template _Tp* ptr(int i0, int i1, int i2); - template const _Tp* ptr(int i0, int i1, int i2) const; - - template _Tp* ptr(const int* idx); - template const _Tp* ptr(const int* idx) const; - - template _Tp* ptr(const Vec& idx); - template const _Tp* ptr(const Vec& idx) const; - - //! the same as above, with the pointer dereferencing - template _Tp& at(int i0=0); - template const _Tp& at(int i0=0) const; - - template _Tp& at(int i0, int i1); - template const _Tp& at(int i0, int i1) const; - - template _Tp& at(int i0, int i1, int i2); - template const _Tp& at(int i0, int i1, int i2) const; - - template _Tp& at(const int* idx); - template const _Tp& at(const int* idx) const; - - template _Tp& at(const Vec& idx); - template const _Tp& at(const Vec& idx) const; - - //! special versions for 2D arrays (especially convenient for referencing image pixels) - template _Tp& at(Point pt); - template const _Tp& at(Point pt) const; - - //! template methods for iteration over matrix elements. - // the iterators take care of skipping gaps in the end of rows (if any) - template MatIterator_<_Tp> begin(); - template MatIterator_<_Tp> end(); - template MatConstIterator_<_Tp> begin() const; - template MatConstIterator_<_Tp> end() const; - - enum { MAGIC_VAL=0x42FF0000, AUTO_STEP=0, CONTINUOUS_FLAG=CV_MAT_CONT_FLAG, SUBMATRIX_FLAG=CV_SUBMAT_FLAG }; - - /*! includes several bit-fields: - - the magic signature - - continuity flag - - depth - - number of channels - */ - int flags; - //! the matrix dimensionality, >= 2 - int dims; - //! the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions - int rows, cols; - //! pointer to the data - uchar* data; - - //! pointer to the reference counter; - // when matrix points to user-allocated data, the pointer is NULL - int* refcount; - - //! helper fields used in locateROI and adjustROI - uchar* datastart; - uchar* dataend; - uchar* datalimit; - - //! custom allocator - MatAllocator* allocator; - - struct CV_EXPORTS MSize - { - MSize(int* _p); - Size operator()() const; - const int& operator[](int i) const; - int& operator[](int i); - operator const int*() const; - bool operator == (const MSize& sz) const; - bool operator != (const MSize& sz) const; - - int* p; - }; - - struct CV_EXPORTS MStep - { - MStep(); - MStep(size_t s); - const size_t& operator[](int i) const; - size_t& operator[](int i); - operator size_t() const; - MStep& operator = (size_t s); - - size_t* p; - size_t buf[2]; - protected: - MStep& operator = (const MStep&); - }; - - MSize size; - MStep step; - -protected: - void initEmpty(); -}; - - -/*! - Random Number Generator - - The class implements RNG using Multiply-with-Carry algorithm -*/ -class CV_EXPORTS RNG -{ -public: - enum { UNIFORM=0, NORMAL=1 }; - - RNG(); - RNG(uint64 state); - //! updates the state and returns the next 32-bit unsigned integer random number - unsigned next(); - - operator uchar(); - operator schar(); - operator ushort(); - operator short(); - operator unsigned(); - //! returns a random integer sampled uniformly from [0, N). - unsigned operator ()(unsigned N); - unsigned operator ()(); - operator int(); - operator float(); - operator double(); - //! returns uniformly distributed integer random number from [a,b) range - int uniform(int a, int b); - //! returns uniformly distributed floating-point random number from [a,b) range - float uniform(float a, float b); - //! returns uniformly distributed double-precision floating-point random number from [a,b) range - double uniform(double a, double b); - void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false ); - //! returns Gaussian random variate with mean zero. - double gaussian(double sigma); - - uint64 state; -}; - -/*! - Random Number Generator - MT - - The class implements RNG using the Mersenne Twister algorithm -*/ -class CV_EXPORTS RNG_MT19937 -{ -public: - RNG_MT19937(); - RNG_MT19937(unsigned s); - void seed(unsigned s); - - unsigned next(); - - operator int(); - operator unsigned(); - operator float(); - operator double(); - - unsigned operator ()(unsigned N); - unsigned operator ()(); - - //! returns uniformly distributed integer random number from [a,b) range - int uniform(int a, int b); - //! returns uniformly distributed floating-point random number from [a,b) range - float uniform(float a, float b); - //! returns uniformly distributed double-precision floating-point random number from [a,b) range - double uniform(double a, double b); - -private: - enum PeriodParameters {N = 624, M = 397}; - unsigned state[N]; - int mti; -}; - -/*! - Termination criteria in iterative algorithms - */ -class CV_EXPORTS TermCriteria -{ -public: - enum - { - COUNT=1, //!< the maximum number of iterations or elements to compute - MAX_ITER=COUNT, //!< ditto - EPS=2 //!< the desired accuracy or change in parameters at which the iterative algorithm stops - }; - - //! default constructor - TermCriteria(); - //! full constructor - TermCriteria(int type, int maxCount, double epsilon); - //! conversion from CvTermCriteria - TermCriteria(const CvTermCriteria& criteria); - //! conversion to CvTermCriteria - operator CvTermCriteria() const; - - int type; //!< the type of termination criteria: COUNT, EPS or COUNT + EPS - int maxCount; // the maximum number of iterations/elements - double epsilon; // the desired accuracy -}; - - -typedef void (*BinaryFunc)(const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, - void*); - -CV_EXPORTS BinaryFunc getConvertFunc(int sdepth, int ddepth); -CV_EXPORTS BinaryFunc getConvertScaleFunc(int sdepth, int ddepth); -CV_EXPORTS BinaryFunc getCopyMaskFunc(size_t esz); - -//! swaps two matrices -CV_EXPORTS void swap(Mat& a, Mat& b); - -//! converts array (CvMat or IplImage) to cv::Mat -CV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false, - bool allowND=true, int coiMode=0); -//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of it. -CV_EXPORTS void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1); -//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage -CV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1); - -//! adds one matrix to another (dst = src1 + src2) -CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst, - InputArray mask=noArray(), int dtype=-1); -//! subtracts one matrix from another (dst = src1 - src2) -CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst, - InputArray mask=noArray(), int dtype=-1); - -//! computes element-wise weighted product of the two arrays (dst = scale*src1*src2) -CV_EXPORTS_W void multiply(InputArray src1, InputArray src2, - OutputArray dst, double scale=1, int dtype=-1); - -//! computes element-wise weighted quotient of the two arrays (dst = scale*src1/src2) -CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst, - double scale=1, int dtype=-1); - -//! computes element-wise weighted reciprocal of an array (dst = scale/src2) -CV_EXPORTS_W void divide(double scale, InputArray src2, - OutputArray dst, int dtype=-1); - -//! adds scaled array to another one (dst = alpha*src1 + src2) -CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst); - -//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma) -CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, - double beta, double gamma, OutputArray dst, int dtype=-1); - -//! scales array elements, computes absolute values and converts the results to 8-bit unsigned integers: dst(i)=saturate_castabs(src(i)*alpha+beta) -CV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst, - double alpha=1, double beta=0); -//! transforms array of numbers using a lookup table: dst(i)=lut(src(i)) -CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst, - int interpolation=0); - -//! computes sum of array elements -CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src); -//! computes the number of nonzero array elements -CV_EXPORTS_W int countNonZero( InputArray src ); -//! returns the list of locations of non-zero pixels -CV_EXPORTS_W void findNonZero( InputArray src, OutputArray idx ); - -//! computes mean value of selected array elements -CV_EXPORTS_W Scalar mean(InputArray src, InputArray mask=noArray()); -//! computes mean value and standard deviation of all or selected array elements -CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, - InputArray mask=noArray()); -//! computes norm of the selected array part -CV_EXPORTS_W double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray()); -//! computes norm of selected part of the difference between two arrays -CV_EXPORTS_W double norm(InputArray src1, InputArray src2, - int normType=NORM_L2, InputArray mask=noArray()); - -//! naive nearest neighbor finder -CV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2, - OutputArray dist, int dtype, OutputArray nidx, - int normType=NORM_L2, int K=0, - InputArray mask=noArray(), int update=0, - bool crosscheck=false); - -//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values -CV_EXPORTS_W void normalize( InputArray src, OutputArray dst, double alpha=1, double beta=0, - int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray()); - -//! finds global minimum and maximum array elements and returns their values and their locations -CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal, - CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0, - CV_OUT Point* maxLoc=0, InputArray mask=noArray()); -CV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal, - int* minIdx=0, int* maxIdx=0, InputArray mask=noArray()); - -//! transforms 2D matrix to 1D row or column vector by taking sum, minimum, maximum or mean value over all the rows -CV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1); - -//! makes multi-channel array out of several single-channel arrays -CV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst); -CV_EXPORTS void merge(const vector& mv, OutputArray dst ); - -//! makes multi-channel array out of several single-channel arrays -CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst); - -//! copies each plane of a multi-channel array to a dedicated array -CV_EXPORTS void split(const Mat& src, Mat* mvbegin); -CV_EXPORTS void split(const Mat& m, vector& mv ); - -//! copies each plane of a multi-channel array to a dedicated array -CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv); - -//! copies selected channels from the input arrays to the selected channels of the output arrays -CV_EXPORTS void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, - const int* fromTo, size_t npairs); -CV_EXPORTS void mixChannels(const vector& src, vector& dst, - const int* fromTo, size_t npairs); -CV_EXPORTS_W void mixChannels(InputArrayOfArrays src, InputArrayOfArrays dst, - const vector& fromTo); - -//! extracts a single channel from src (coi is 0-based index) -CV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi); - -//! inserts a single channel to dst (coi is 0-based index) -CV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi); - -//! reverses the order of the rows, columns or both in a matrix -CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode); - -//! replicates the input matrix the specified number of times in the horizontal and/or vertical direction -CV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst); -CV_EXPORTS Mat repeat(const Mat& src, int ny, int nx); - -CV_EXPORTS void hconcat(const Mat* src, size_t nsrc, OutputArray dst); -CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst); -CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst); - -CV_EXPORTS void vconcat(const Mat* src, size_t nsrc, OutputArray dst); -CV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst); -CV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst); - -//! computes bitwise conjunction of the two arrays (dst = src1 & src2) -CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2, - OutputArray dst, InputArray mask=noArray()); -//! computes bitwise disjunction of the two arrays (dst = src1 | src2) -CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2, - OutputArray dst, InputArray mask=noArray()); -//! computes bitwise exclusive-or of the two arrays (dst = src1 ^ src2) -CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2, - OutputArray dst, InputArray mask=noArray()); -//! inverts each bit of array (dst = ~src) -CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst, - InputArray mask=noArray()); -//! computes element-wise absolute difference of two arrays (dst = abs(src1 - src2)) -CV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst); -//! set mask elements for those array elements which are within the element-specific bounding box (dst = lowerb <= src && src < upperb) -CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb, - InputArray upperb, OutputArray dst); -//! compares elements of two arrays (dst = src1 src2) -CV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop); -//! computes per-element minimum of two arrays (dst = min(src1, src2)) -CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst); -//! computes per-element maximum of two arrays (dst = max(src1, src2)) -CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst); - -//! computes per-element minimum of two arrays (dst = min(src1, src2)) -CV_EXPORTS void min(const Mat& src1, const Mat& src2, Mat& dst); -//! computes per-element minimum of array and scalar (dst = min(src1, src2)) -CV_EXPORTS void min(const Mat& src1, double src2, Mat& dst); -//! computes per-element maximum of two arrays (dst = max(src1, src2)) -CV_EXPORTS void max(const Mat& src1, const Mat& src2, Mat& dst); -//! computes per-element maximum of array and scalar (dst = max(src1, src2)) -CV_EXPORTS void max(const Mat& src1, double src2, Mat& dst); - -//! computes square root of each matrix element (dst = src**0.5) -CV_EXPORTS_W void sqrt(InputArray src, OutputArray dst); -//! raises the input matrix elements to the specified power (b = a**power) -CV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst); -//! computes exponent of each matrix element (dst = e**src) -CV_EXPORTS_W void exp(InputArray src, OutputArray dst); -//! computes natural logarithm of absolute value of each matrix element: dst = log(abs(src)) -CV_EXPORTS_W void log(InputArray src, OutputArray dst); -//! computes cube root of the argument -CV_EXPORTS_W float cubeRoot(float val); -//! computes the angle in degrees (0..360) of the vector (x,y) -CV_EXPORTS_W float fastAtan2(float y, float x); - -CV_EXPORTS void exp(const float* src, float* dst, int n); -CV_EXPORTS void log(const float* src, float* dst, int n); -CV_EXPORTS void fastAtan2(const float* y, const float* x, float* dst, int n, bool angleInDegrees); -CV_EXPORTS void magnitude(const float* x, const float* y, float* dst, int n); - -//! converts polar coordinates to Cartesian -CV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle, - OutputArray x, OutputArray y, bool angleInDegrees=false); -//! converts Cartesian coordinates to polar -CV_EXPORTS_W void cartToPolar(InputArray x, InputArray y, - OutputArray magnitude, OutputArray angle, - bool angleInDegrees=false); -//! computes angle (angle(i)) of each (x(i), y(i)) vector -CV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle, - bool angleInDegrees=false); -//! computes magnitude (magnitude(i)) of each (x(i), y(i)) vector -CV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude); -//! checks that each matrix element is within the specified range. -CV_EXPORTS_W bool checkRange(InputArray a, bool quiet=true, CV_OUT Point* pos=0, - double minVal=-DBL_MAX, double maxVal=DBL_MAX); -//! converts NaN's to the given number -CV_EXPORTS_W void patchNaNs(InputOutputArray a, double val=0); - -//! implements generalized matrix product algorithm GEMM from BLAS -CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha, - InputArray src3, double gamma, OutputArray dst, int flags=0); -//! multiplies matrix by its transposition from the left or from the right -CV_EXPORTS_W void mulTransposed( InputArray src, OutputArray dst, bool aTa, - InputArray delta=noArray(), - double scale=1, int dtype=-1 ); -//! transposes the matrix -CV_EXPORTS_W void transpose(InputArray src, OutputArray dst); -//! performs affine transformation of each element of multi-channel input matrix -CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m ); -//! performs perspective transformation of each element of multi-channel input matrix -CV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, InputArray m ); - -//! extends the symmetrical matrix from the lower half or from the upper half -CV_EXPORTS_W void completeSymm(InputOutputArray mtx, bool lowerToUpper=false); -//! initializes scaled identity matrix -CV_EXPORTS_W void setIdentity(InputOutputArray mtx, const Scalar& s=Scalar(1)); -//! computes determinant of a square matrix -CV_EXPORTS_W double determinant(InputArray mtx); -//! computes trace of a matrix -CV_EXPORTS_W Scalar trace(InputArray mtx); -//! computes inverse or pseudo-inverse matrix -CV_EXPORTS_W double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU); -//! solves linear system or a least-square problem -CV_EXPORTS_W bool solve(InputArray src1, InputArray src2, - OutputArray dst, int flags=DECOMP_LU); - -enum -{ - SORT_EVERY_ROW=0, - SORT_EVERY_COLUMN=1, - SORT_ASCENDING=0, - SORT_DESCENDING=16 -}; - -//! sorts independently each matrix row or each matrix column -CV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags); -//! sorts independently each matrix row or each matrix column -CV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags); -//! finds real roots of a cubic polynomial -CV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots); -//! finds real and complex roots of a polynomial -CV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, int maxIters=300); -//! finds eigenvalues of a symmetric matrix -CV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues, int lowindex=-1, - int highindex=-1); -//! finds eigenvalues and eigenvectors of a symmetric matrix -CV_EXPORTS bool eigen(InputArray src, OutputArray eigenvalues, - OutputArray eigenvectors, - int lowindex=-1, int highindex=-1); -CV_EXPORTS_W bool eigen(InputArray src, bool computeEigenvectors, - OutputArray eigenvalues, OutputArray eigenvectors); - -enum -{ - COVAR_SCRAMBLED=0, - COVAR_NORMAL=1, - COVAR_USE_AVG=2, - COVAR_SCALE=4, - COVAR_ROWS=8, - COVAR_COLS=16 -}; - -//! computes covariation matrix of a set of samples -CV_EXPORTS void calcCovarMatrix( const Mat* samples, int nsamples, Mat& covar, Mat& mean, - int flags, int ctype=CV_64F); -//! computes covariation matrix of a set of samples -CV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar, - OutputArray mean, int flags, int ctype=CV_64F); - -/*! - Principal Component Analysis - - The class PCA is used to compute the special basis for a set of vectors. - The basis will consist of eigenvectors of the covariance matrix computed - from the input set of vectors. After PCA is performed, vectors can be transformed from - the original high-dimensional space to the subspace formed by a few most - prominent eigenvectors (called the principal components), - corresponding to the largest eigenvalues of the covariation matrix. - Thus the dimensionality of the vector and the correlation between the coordinates is reduced. - - The following sample is the function that takes two matrices. The first one stores the set - of vectors (a row per vector) that is used to compute PCA, the second one stores another - "test" set of vectors (a row per vector) that are first compressed with PCA, - then reconstructed back and then the reconstruction error norm is computed and printed for each vector. - - \code - using namespace cv; - - PCA compressPCA(const Mat& pcaset, int maxComponents, - const Mat& testset, Mat& compressed) - { - PCA pca(pcaset, // pass the data - Mat(), // we do not have a pre-computed mean vector, - // so let the PCA engine to compute it - CV_PCA_DATA_AS_ROW, // indicate that the vectors - // are stored as matrix rows - // (use CV_PCA_DATA_AS_COL if the vectors are - // the matrix columns) - maxComponents // specify, how many principal components to retain - ); - // if there is no test data, just return the computed basis, ready-to-use - if( !testset.data ) - return pca; - CV_Assert( testset.cols == pcaset.cols ); - - compressed.create(testset.rows, maxComponents, testset.type()); - - Mat reconstructed; - for( int i = 0; i < testset.rows; i++ ) - { - Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed; - // compress the vector, the result will be stored - // in the i-th row of the output matrix - pca.project(vec, coeffs); - // and then reconstruct it - pca.backProject(coeffs, reconstructed); - // and measure the error - printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2)); - } - return pca; - } - \endcode -*/ -class CV_EXPORTS PCA -{ -public: - //! default constructor - PCA(); - //! the constructor that performs PCA - PCA(InputArray data, InputArray mean, int flags, int maxComponents=0); - PCA(InputArray data, InputArray mean, int flags, double retainedVariance); - //! operator that performs PCA. The previously stored data, if any, is released - PCA& operator()(InputArray data, InputArray mean, int flags, int maxComponents=0); - PCA& computeVar(InputArray data, InputArray mean, int flags, double retainedVariance); - //! projects vector from the original space to the principal components subspace - Mat project(InputArray vec) const; - //! projects vector from the original space to the principal components subspace - void project(InputArray vec, OutputArray result) const; - //! reconstructs the original vector from the projection - Mat backProject(InputArray vec) const; - //! reconstructs the original vector from the projection - void backProject(InputArray vec, OutputArray result) const; - - Mat eigenvectors; //!< eigenvectors of the covariation matrix - Mat eigenvalues; //!< eigenvalues of the covariation matrix - Mat mean; //!< mean value subtracted before the projection and added after the back projection -}; - -CV_EXPORTS_W void PCACompute(InputArray data, CV_OUT InputOutputArray mean, - OutputArray eigenvectors, int maxComponents=0); - -CV_EXPORTS_W void PCAComputeVar(InputArray data, CV_OUT InputOutputArray mean, - OutputArray eigenvectors, double retainedVariance); - -CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean, - InputArray eigenvectors, OutputArray result); - -CV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean, - InputArray eigenvectors, OutputArray result); - - -/*! - Singular Value Decomposition class - - The class is used to compute Singular Value Decomposition of a floating-point matrix and then - use it to solve least-square problems, under-determined linear systems, invert matrices, - compute condition numbers etc. - - For a bit faster operation you can pass flags=SVD::MODIFY_A|... to modify the decomposed matrix - when it is not necessarily to preserve it. If you want to compute condition number of a matrix - or absolute value of its determinant - you do not need SVD::u or SVD::vt, - so you can pass flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that the full-size SVD::u and SVD::vt - must be computed, which is not necessary most of the time. -*/ -class CV_EXPORTS SVD -{ -public: - enum { MODIFY_A=1, NO_UV=2, FULL_UV=4 }; - //! the default constructor - SVD(); - //! the constructor that performs SVD - SVD( InputArray src, int flags=0 ); - //! the operator that performs SVD. The previously allocated SVD::u, SVD::w are SVD::vt are released. - SVD& operator ()( InputArray src, int flags=0 ); - - //! decomposes matrix and stores the results to user-provided matrices - static void compute( InputArray src, OutputArray w, - OutputArray u, OutputArray vt, int flags=0 ); - //! computes singular values of a matrix - static void compute( InputArray src, OutputArray w, int flags=0 ); - //! performs back substitution - static void backSubst( InputArray w, InputArray u, - InputArray vt, InputArray rhs, - OutputArray dst ); - - template static void compute( const Matx<_Tp, m, n>& a, - Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt ); - template static void compute( const Matx<_Tp, m, n>& a, - Matx<_Tp, nm, 1>& w ); - template static void backSubst( const Matx<_Tp, nm, 1>& w, - const Matx<_Tp, m, nm>& u, const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, Matx<_Tp, n, nb>& dst ); - - //! finds dst = arg min_{|dst|=1} |m*dst| - static void solveZ( InputArray src, OutputArray dst ); - //! performs back substitution, so that dst is the solution or pseudo-solution of m*dst = rhs, where m is the decomposed matrix - void backSubst( InputArray rhs, OutputArray dst ) const; - - Mat u, w, vt; -}; - -//! computes SVD of src -CV_EXPORTS_W void SVDecomp( InputArray src, CV_OUT OutputArray w, - CV_OUT OutputArray u, CV_OUT OutputArray vt, int flags=0 ); - -//! performs back substitution for the previously computed SVD -CV_EXPORTS_W void SVBackSubst( InputArray w, InputArray u, InputArray vt, - InputArray rhs, CV_OUT OutputArray dst ); - -//! computes Mahalanobis distance between two vectors: sqrt((v1-v2)'*icovar*(v1-v2)), where icovar is the inverse covariation matrix -CV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar); -//! a synonym for Mahalanobis -CV_EXPORTS double Mahalonobis(InputArray v1, InputArray v2, InputArray icovar); - -//! performs forward or inverse 1D or 2D Discrete Fourier Transformation -CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0); -//! performs inverse 1D or 2D Discrete Fourier Transformation -CV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0); -//! performs forward or inverse 1D or 2D Discrete Cosine Transformation -CV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags=0); -//! performs inverse 1D or 2D Discrete Cosine Transformation -CV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags=0); -//! computes element-wise product of the two Fourier spectrums. The second spectrum can optionally be conjugated before the multiplication -CV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c, - int flags, bool conjB=false); -//! computes the minimal vector size vecsize1 >= vecsize so that the dft() of the vector of length vecsize1 can be computed efficiently -CV_EXPORTS_W int getOptimalDFTSize(int vecsize); - -/*! - Various k-Means flags -*/ -enum -{ - KMEANS_RANDOM_CENTERS=0, // Chooses random centers for k-Means initialization - KMEANS_PP_CENTERS=2, // Uses k-Means++ algorithm for initialization - KMEANS_USE_INITIAL_LABELS=1 // Uses the user-provided labels for K-Means initialization -}; -//! clusters the input data using k-Means algorithm -CV_EXPORTS_W double kmeans( InputArray data, int K, CV_OUT InputOutputArray bestLabels, - TermCriteria criteria, int attempts, - int flags, OutputArray centers=noArray() ); - -//! returns the thread-local Random number generator -CV_EXPORTS RNG& theRNG(); - -//! returns the next unifomly-distributed random number of the specified type -template static inline _Tp randu() { return (_Tp)theRNG(); } - -//! fills array with uniformly-distributed random numbers from the range [low, high) -CV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high); - -//! fills array with normally-distributed random numbers with the specified mean and the standard deviation -CV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, InputArray stddev); - -//! shuffles the input array elements -CV_EXPORTS void randShuffle(InputOutputArray dst, double iterFactor=1., RNG* rng=0); -CV_EXPORTS_AS(randShuffle) void randShuffle_(InputOutputArray dst, double iterFactor=1.); - -//! draws the line segment (pt1, pt2) in the image -CV_EXPORTS_W void line(CV_IN_OUT Mat& img, Point pt1, Point pt2, const Scalar& color, - int thickness=1, int lineType=8, int shift=0); - -//! draws the rectangle outline or a solid rectangle with the opposite corners pt1 and pt2 in the image -CV_EXPORTS_W void rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2, - const Scalar& color, int thickness=1, - int lineType=8, int shift=0); - -//! draws the rectangle outline or a solid rectangle covering rec in the image -CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec, - const Scalar& color, int thickness=1, - int lineType=8, int shift=0); - -//! draws the circle outline or a solid circle in the image -CV_EXPORTS_W void circle(CV_IN_OUT Mat& img, Point center, int radius, - const Scalar& color, int thickness=1, - int lineType=8, int shift=0); - -//! draws an elliptic arc, ellipse sector or a rotated ellipse in the image -CV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, Point center, Size axes, - double angle, double startAngle, double endAngle, - const Scalar& color, int thickness=1, - int lineType=8, int shift=0); - -//! draws a rotated ellipse in the image -CV_EXPORTS_W void ellipse(CV_IN_OUT Mat& img, const RotatedRect& box, const Scalar& color, - int thickness=1, int lineType=8); - -//! draws a filled convex polygon in the image -CV_EXPORTS void fillConvexPoly(Mat& img, const Point* pts, int npts, - const Scalar& color, int lineType=8, - int shift=0); -CV_EXPORTS_W void fillConvexPoly(InputOutputArray img, InputArray points, - const Scalar& color, int lineType=8, - int shift=0); - -//! fills an area bounded by one or more polygons -CV_EXPORTS void fillPoly(Mat& img, const Point** pts, - const int* npts, int ncontours, - const Scalar& color, int lineType=8, int shift=0, - Point offset=Point() ); - -CV_EXPORTS_W void fillPoly(InputOutputArray img, InputArrayOfArrays pts, - const Scalar& color, int lineType=8, int shift=0, - Point offset=Point() ); - -//! draws one or more polygonal curves -CV_EXPORTS void polylines(Mat& img, const Point** pts, const int* npts, - int ncontours, bool isClosed, const Scalar& color, - int thickness=1, int lineType=8, int shift=0 ); - -CV_EXPORTS_W void polylines(InputOutputArray img, InputArrayOfArrays pts, - bool isClosed, const Scalar& color, - int thickness=1, int lineType=8, int shift=0 ); - -//! clips the line segment by the rectangle Rect(0, 0, imgSize.width, imgSize.height) -CV_EXPORTS bool clipLine(Size imgSize, CV_IN_OUT Point& pt1, CV_IN_OUT Point& pt2); - -//! clips the line segment by the rectangle imgRect -CV_EXPORTS_W bool clipLine(Rect imgRect, CV_OUT CV_IN_OUT Point& pt1, CV_OUT CV_IN_OUT Point& pt2); - -/*! - Line iterator class - - The class is used to iterate over all the pixels on the raster line - segment connecting two specified points. -*/ -class CV_EXPORTS LineIterator -{ -public: - //! intializes the iterator - LineIterator( const Mat& img, Point pt1, Point pt2, - int connectivity=8, bool leftToRight=false ); - //! returns pointer to the current pixel - uchar* operator *(); - //! prefix increment operator (++it). shifts iterator to the next pixel - LineIterator& operator ++(); - //! postfix increment operator (it++). shifts iterator to the next pixel - LineIterator operator ++(int); - //! returns coordinates of the current pixel - Point pos() const; - - uchar* ptr; - const uchar* ptr0; - int step, elemSize; - int err, count; - int minusDelta, plusDelta; - int minusStep, plusStep; -}; - -//! converts elliptic arc to a polygonal curve -CV_EXPORTS_W void ellipse2Poly( Point center, Size axes, int angle, - int arcStart, int arcEnd, int delta, - CV_OUT vector& pts ); - -enum -{ - FONT_HERSHEY_SIMPLEX = 0, - FONT_HERSHEY_PLAIN = 1, - FONT_HERSHEY_DUPLEX = 2, - FONT_HERSHEY_COMPLEX = 3, - FONT_HERSHEY_TRIPLEX = 4, - FONT_HERSHEY_COMPLEX_SMALL = 5, - FONT_HERSHEY_SCRIPT_SIMPLEX = 6, - FONT_HERSHEY_SCRIPT_COMPLEX = 7, - FONT_ITALIC = 16 -}; - -//! renders text string in the image -CV_EXPORTS_W void putText( Mat& img, const string& text, Point org, - int fontFace, double fontScale, Scalar color, - int thickness=1, int lineType=8, - bool bottomLeftOrigin=false ); - -//! returns bounding box of the text string -CV_EXPORTS_W Size getTextSize(const string& text, int fontFace, - double fontScale, int thickness, - CV_OUT int* baseLine); - -///////////////////////////////// Mat_<_Tp> //////////////////////////////////// - -/*! - Template matrix class derived from Mat - - The class Mat_ is a "thin" template wrapper on top of cv::Mat. It does not have any extra data fields, - nor it or cv::Mat have any virtual methods and thus references or pointers to these two classes - can be safely converted one to another. But do it with care, for example: - - \code - // create 100x100 8-bit matrix - Mat M(100,100,CV_8U); - // this will compile fine. no any data conversion will be done. - Mat_& M1 = (Mat_&)M; - // the program will likely crash at the statement below - M1(99,99) = 1.f; - \endcode - - While cv::Mat is sufficient in most cases, cv::Mat_ can be more convenient if you use a lot of element - access operations and if you know matrix type at compile time. - Note that cv::Mat::at<_Tp>(int y, int x) and cv::Mat_<_Tp>::operator ()(int y, int x) do absolutely the - same thing and run at the same speed, but the latter is certainly shorter: - - \code - Mat_ M(20,20); - for(int i = 0; i < M.rows; i++) - for(int j = 0; j < M.cols; j++) - M(i,j) = 1./(i+j+1); - Mat E, V; - eigen(M,E,V); - cout << E.at(0,0)/E.at(M.rows-1,0); - \endcode - - It is easy to use Mat_ for multi-channel images/matrices - just pass cv::Vec as cv::Mat_ template parameter: - - \code - // allocate 320x240 color image and fill it with green (in RGB space) - Mat_ img(240, 320, Vec3b(0,255,0)); - // now draw a diagonal white line - for(int i = 0; i < 100; i++) - img(i,i)=Vec3b(255,255,255); - // and now modify the 2nd (red) channel of each pixel - for(int i = 0; i < img.rows; i++) - for(int j = 0; j < img.cols; j++) - img(i,j)[2] ^= (uchar)(i ^ j); // img(y,x)[c] accesses c-th channel of the pixel (x,y) - \endcode -*/ -template class Mat_ : public Mat -{ -public: - typedef _Tp value_type; - typedef typename DataType<_Tp>::channel_type channel_type; - typedef MatIterator_<_Tp> iterator; - typedef MatConstIterator_<_Tp> const_iterator; - - //! default constructor - Mat_(); - //! equivalent to Mat(_rows, _cols, DataType<_Tp>::type) - Mat_(int _rows, int _cols); - //! constructor that sets each matrix element to specified value - Mat_(int _rows, int _cols, const _Tp& value); - //! equivalent to Mat(_size, DataType<_Tp>::type) - explicit Mat_(Size _size); - //! constructor that sets each matrix element to specified value - Mat_(Size _size, const _Tp& value); - //! n-dim array constructor - Mat_(int _ndims, const int* _sizes); - //! n-dim array constructor that sets each matrix element to specified value - Mat_(int _ndims, const int* _sizes, const _Tp& value); - //! copy/conversion contructor. If m is of different type, it's converted - Mat_(const Mat& m); - //! copy constructor - Mat_(const Mat_& m); - //! constructs a matrix on top of user-allocated data. step is in bytes(!!!), regardless of the type - Mat_(int _rows, int _cols, _Tp* _data, size_t _step=AUTO_STEP); - //! constructs n-dim matrix on top of user-allocated data. steps are in bytes(!!!), regardless of the type - Mat_(int _ndims, const int* _sizes, _Tp* _data, const size_t* _steps=0); - //! selects a submatrix - Mat_(const Mat_& m, const Range& rowRange, const Range& colRange=Range::all()); - //! selects a submatrix - Mat_(const Mat_& m, const Rect& roi); - //! selects a submatrix, n-dim version - Mat_(const Mat_& m, const Range* ranges); - //! from a matrix expression - explicit Mat_(const MatExpr& e); - //! makes a matrix out of Vec, std::vector, Point_ or Point3_. The matrix will have a single column - explicit Mat_(const vector<_Tp>& vec, bool copyData=false); - template explicit Mat_(const Vec::channel_type, n>& vec, bool copyData=true); - template explicit Mat_(const Matx::channel_type, m, n>& mtx, bool copyData=true); - explicit Mat_(const Point_::channel_type>& pt, bool copyData=true); - explicit Mat_(const Point3_::channel_type>& pt, bool copyData=true); - explicit Mat_(const MatCommaInitializer_<_Tp>& commaInitializer); - - Mat_& operator = (const Mat& m); - Mat_& operator = (const Mat_& m); - //! set all the elements to s. - Mat_& operator = (const _Tp& s); - //! assign a matrix expression - Mat_& operator = (const MatExpr& e); - - //! iterators; they are smart enough to skip gaps in the end of rows - iterator begin(); - iterator end(); - const_iterator begin() const; - const_iterator end() const; - - //! equivalent to Mat::create(_rows, _cols, DataType<_Tp>::type) - void create(int _rows, int _cols); - //! equivalent to Mat::create(_size, DataType<_Tp>::type) - void create(Size _size); - //! equivalent to Mat::create(_ndims, _sizes, DatType<_Tp>::type) - void create(int _ndims, const int* _sizes); - //! cross-product - Mat_ cross(const Mat_& m) const; - //! data type conversion - template operator Mat_() const; - //! overridden forms of Mat::row() etc. - Mat_ row(int y) const; - Mat_ col(int x) const; - Mat_ diag(int d=0) const; - Mat_ clone() const; - - //! overridden forms of Mat::elemSize() etc. - size_t elemSize() const; - size_t elemSize1() const; - int type() const; - int depth() const; - int channels() const; - size_t step1(int i=0) const; - //! returns step()/sizeof(_Tp) - size_t stepT(int i=0) const; - - //! overridden forms of Mat::zeros() etc. Data type is omitted, of course - static MatExpr zeros(int rows, int cols); - static MatExpr zeros(Size size); - static MatExpr zeros(int _ndims, const int* _sizes); - static MatExpr ones(int rows, int cols); - static MatExpr ones(Size size); - static MatExpr ones(int _ndims, const int* _sizes); - static MatExpr eye(int rows, int cols); - static MatExpr eye(Size size); - - //! some more overriden methods - Mat_& adjustROI( int dtop, int dbottom, int dleft, int dright ); - Mat_ operator()( const Range& rowRange, const Range& colRange ) const; - Mat_ operator()( const Rect& roi ) const; - Mat_ operator()( const Range* ranges ) const; - - //! more convenient forms of row and element access operators - _Tp* operator [](int y); - const _Tp* operator [](int y) const; - - //! returns reference to the specified element - _Tp& operator ()(const int* idx); - //! returns read-only reference to the specified element - const _Tp& operator ()(const int* idx) const; - - //! returns reference to the specified element - template _Tp& operator ()(const Vec& idx); - //! returns read-only reference to the specified element - template const _Tp& operator ()(const Vec& idx) const; - - //! returns reference to the specified element (1D case) - _Tp& operator ()(int idx0); - //! returns read-only reference to the specified element (1D case) - const _Tp& operator ()(int idx0) const; - //! returns reference to the specified element (2D case) - _Tp& operator ()(int idx0, int idx1); - //! returns read-only reference to the specified element (2D case) - const _Tp& operator ()(int idx0, int idx1) const; - //! returns reference to the specified element (3D case) - _Tp& operator ()(int idx0, int idx1, int idx2); - //! returns read-only reference to the specified element (3D case) - const _Tp& operator ()(int idx0, int idx1, int idx2) const; - - _Tp& operator ()(Point pt); - const _Tp& operator ()(Point pt) const; - - //! conversion to vector. - operator vector<_Tp>() const; - //! conversion to Vec - template operator Vec::channel_type, n>() const; - //! conversion to Matx - template operator Matx::channel_type, m, n>() const; -}; - -typedef Mat_ Mat1b; -typedef Mat_ Mat2b; -typedef Mat_ Mat3b; -typedef Mat_ Mat4b; - -typedef Mat_ Mat1s; -typedef Mat_ Mat2s; -typedef Mat_ Mat3s; -typedef Mat_ Mat4s; - -typedef Mat_ Mat1w; -typedef Mat_ Mat2w; -typedef Mat_ Mat3w; -typedef Mat_ Mat4w; - -typedef Mat_ Mat1i; -typedef Mat_ Mat2i; -typedef Mat_ Mat3i; -typedef Mat_ Mat4i; - -typedef Mat_ Mat1f; -typedef Mat_ Mat2f; -typedef Mat_ Mat3f; -typedef Mat_ Mat4f; - -typedef Mat_ Mat1d; -typedef Mat_ Mat2d; -typedef Mat_ Mat3d; -typedef Mat_ Mat4d; - -//////////// Iterators & Comma initializers ////////////////// - -class CV_EXPORTS MatConstIterator -{ -public: - typedef uchar* value_type; - typedef ptrdiff_t difference_type; - typedef const uchar** pointer; - typedef uchar* reference; - typedef std::random_access_iterator_tag iterator_category; - - //! default constructor - MatConstIterator(); - //! constructor that sets the iterator to the beginning of the matrix - MatConstIterator(const Mat* _m); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator(const Mat* _m, int _row, int _col=0); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator(const Mat* _m, Point _pt); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator(const Mat* _m, const int* _idx); - //! copy constructor - MatConstIterator(const MatConstIterator& it); - - //! copy operator - MatConstIterator& operator = (const MatConstIterator& it); - //! returns the current matrix element - uchar* operator *() const; - //! returns the i-th matrix element, relative to the current - uchar* operator [](ptrdiff_t i) const; - - //! shifts the iterator forward by the specified number of elements - MatConstIterator& operator += (ptrdiff_t ofs); - //! shifts the iterator backward by the specified number of elements - MatConstIterator& operator -= (ptrdiff_t ofs); - //! decrements the iterator - MatConstIterator& operator --(); - //! decrements the iterator - MatConstIterator operator --(int); - //! increments the iterator - MatConstIterator& operator ++(); - //! increments the iterator - MatConstIterator operator ++(int); - //! returns the current iterator position - Point pos() const; - //! returns the current iterator position - void pos(int* _idx) const; - ptrdiff_t lpos() const; - void seek(ptrdiff_t ofs, bool relative=false); - void seek(const int* _idx, bool relative=false); - - const Mat* m; - size_t elemSize; - uchar* ptr; - uchar* sliceStart; - uchar* sliceEnd; -}; - -/*! - Matrix read-only iterator - - */ -template -class MatConstIterator_ : public MatConstIterator -{ -public: - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - typedef std::random_access_iterator_tag iterator_category; - - //! default constructor - MatConstIterator_(); - //! constructor that sets the iterator to the beginning of the matrix - MatConstIterator_(const Mat_<_Tp>* _m); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col=0); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator_(const Mat_<_Tp>* _m, Point _pt); - //! constructor that sets the iterator to the specified element of the matrix - MatConstIterator_(const Mat_<_Tp>* _m, const int* _idx); - //! copy constructor - MatConstIterator_(const MatConstIterator_& it); - - //! copy operator - MatConstIterator_& operator = (const MatConstIterator_& it); - //! returns the current matrix element - _Tp operator *() const; - //! returns the i-th matrix element, relative to the current - _Tp operator [](ptrdiff_t i) const; - - //! shifts the iterator forward by the specified number of elements - MatConstIterator_& operator += (ptrdiff_t ofs); - //! shifts the iterator backward by the specified number of elements - MatConstIterator_& operator -= (ptrdiff_t ofs); - //! decrements the iterator - MatConstIterator_& operator --(); - //! decrements the iterator - MatConstIterator_ operator --(int); - //! increments the iterator - MatConstIterator_& operator ++(); - //! increments the iterator - MatConstIterator_ operator ++(int); - //! returns the current iterator position - Point pos() const; -}; - - -/*! - Matrix read-write iterator - -*/ -template -class MatIterator_ : public MatConstIterator_<_Tp> -{ -public: - typedef _Tp* pointer; - typedef _Tp& reference; - typedef std::random_access_iterator_tag iterator_category; - - //! the default constructor - MatIterator_(); - //! constructor that sets the iterator to the beginning of the matrix - MatIterator_(Mat_<_Tp>* _m); - //! constructor that sets the iterator to the specified element of the matrix - MatIterator_(Mat_<_Tp>* _m, int _row, int _col=0); - //! constructor that sets the iterator to the specified element of the matrix - MatIterator_(const Mat_<_Tp>* _m, Point _pt); - //! constructor that sets the iterator to the specified element of the matrix - MatIterator_(const Mat_<_Tp>* _m, const int* _idx); - //! copy constructor - MatIterator_(const MatIterator_& it); - //! copy operator - MatIterator_& operator = (const MatIterator_<_Tp>& it ); - - //! returns the current matrix element - _Tp& operator *() const; - //! returns the i-th matrix element, relative to the current - _Tp& operator [](ptrdiff_t i) const; - - //! shifts the iterator forward by the specified number of elements - MatIterator_& operator += (ptrdiff_t ofs); - //! shifts the iterator backward by the specified number of elements - MatIterator_& operator -= (ptrdiff_t ofs); - //! decrements the iterator - MatIterator_& operator --(); - //! decrements the iterator - MatIterator_ operator --(int); - //! increments the iterator - MatIterator_& operator ++(); - //! increments the iterator - MatIterator_ operator ++(int); -}; - -template class MatOp_Iter_; - -/*! - Comma-separated Matrix Initializer - - The class instances are usually not created explicitly. - Instead, they are created on "matrix << firstValue" operator. - - The sample below initializes 2x2 rotation matrix: - - \code - double angle = 30, a = cos(angle*CV_PI/180), b = sin(angle*CV_PI/180); - Mat R = (Mat_(2,2) << a, -b, b, a); - \endcode -*/ -template class MatCommaInitializer_ -{ -public: - //! the constructor, created by "matrix << firstValue" operator, where matrix is cv::Mat - MatCommaInitializer_(Mat_<_Tp>* _m); - //! the operator that takes the next value and put it to the matrix - template MatCommaInitializer_<_Tp>& operator , (T2 v); - //! another form of conversion operator - Mat_<_Tp> operator *() const; - operator Mat_<_Tp>() const; -protected: - MatIterator_<_Tp> it; -}; - - -template class MatxCommaInitializer -{ -public: - MatxCommaInitializer(Matx<_Tp, m, n>* _mtx); - template MatxCommaInitializer<_Tp, m, n>& operator , (T2 val); - Matx<_Tp, m, n> operator *() const; - - Matx<_Tp, m, n>* dst; - int idx; -}; - -template class VecCommaInitializer : public MatxCommaInitializer<_Tp, m, 1> -{ -public: - VecCommaInitializer(Vec<_Tp, m>* _vec); - template VecCommaInitializer<_Tp, m>& operator , (T2 val); - Vec<_Tp, m> operator *() const; -}; - -/*! - Automatically Allocated Buffer Class - - The class is used for temporary buffers in functions and methods. - If a temporary buffer is usually small (a few K's of memory), - but its size depends on the parameters, it makes sense to create a small - fixed-size array on stack and use it if it's large enough. If the required buffer size - is larger than the fixed size, another buffer of sufficient size is allocated dynamically - and released after the processing. Therefore, in typical cases, when the buffer size is small, - there is no overhead associated with malloc()/free(). - At the same time, there is no limit on the size of processed data. - - This is what AutoBuffer does. The template takes 2 parameters - type of the buffer elements and - the number of stack-allocated elements. Here is how the class is used: - - \code - void my_func(const cv::Mat& m) - { - cv::AutoBuffer buf; // create automatic buffer containing 1000 floats - - buf.allocate(m.rows); // if m.rows <= 1000, the pre-allocated buffer is used, - // otherwise the buffer of "m.rows" floats will be allocated - // dynamically and deallocated in cv::AutoBuffer destructor - ... - } - \endcode -*/ -template class AutoBuffer -{ -public: - typedef _Tp value_type; - enum { buffer_padding = (int)((16 + sizeof(_Tp) - 1)/sizeof(_Tp)) }; - - //! the default contructor - AutoBuffer(); - //! constructor taking the real buffer size - AutoBuffer(size_t _size); - //! destructor. calls deallocate() - ~AutoBuffer(); - - //! allocates the new buffer of size _size. if the _size is small enough, stack-allocated buffer is used - void allocate(size_t _size); - //! deallocates the buffer if it was dynamically allocated - void deallocate(); - //! returns pointer to the real buffer, stack-allocated or head-allocated - operator _Tp* (); - //! returns read-only pointer to the real buffer, stack-allocated or head-allocated - operator const _Tp* () const; - -protected: - //! pointer to the real buffer, can point to buf if the buffer is small enough - _Tp* ptr; - //! size of the real buffer - size_t size; - //! pre-allocated buffer - _Tp buf[fixed_size+buffer_padding]; -}; - -/////////////////////////// multi-dimensional dense matrix ////////////////////////// - -/*! - n-Dimensional Dense Matrix Iterator Class. - - The class cv::NAryMatIterator is used for iterating over one or more n-dimensional dense arrays (cv::Mat's). - - The iterator is completely different from cv::Mat_ and cv::SparseMat_ iterators. - It iterates through the slices (or planes), not the elements, where "slice" is a continuous part of the arrays. - - Here is the example on how the iterator can be used to normalize 3D histogram: - - \code - void normalizeColorHist(Mat& hist) - { - #if 1 - // intialize iterator (the style is different from STL). - // after initialization the iterator will contain - // the number of slices or planes - // the iterator will go through - Mat* arrays[] = { &hist, 0 }; - Mat planes[1]; - NAryMatIterator it(arrays, planes); - double s = 0; - // iterate through the matrix. on each iteration - // it.planes[i] (of type Mat) will be set to the current plane of - // i-th n-dim matrix passed to the iterator constructor. - for(int p = 0; p < it.nplanes; p++, ++it) - s += sum(it.planes[0])[0]; - it = NAryMatIterator(hist); - s = 1./s; - for(int p = 0; p < it.nplanes; p++, ++it) - it.planes[0] *= s; - #elif 1 - // this is a shorter implementation of the above - // using built-in operations on Mat - double s = sum(hist)[0]; - hist.convertTo(hist, hist.type(), 1./s, 0); - #else - // and this is even shorter one - // (assuming that the histogram elements are non-negative) - normalize(hist, hist, 1, 0, NORM_L1); - #endif - } - \endcode - - You can iterate through several matrices simultaneously as long as they have the same geometry - (dimensionality and all the dimension sizes are the same), which is useful for binary - and n-ary operations on such matrices. Just pass those matrices to cv::MatNDIterator. - Then, during the iteration it.planes[0], it.planes[1], ... will - be the slices of the corresponding matrices -*/ -class CV_EXPORTS NAryMatIterator -{ -public: - //! the default constructor - NAryMatIterator(); - //! the full constructor taking arbitrary number of n-dim matrices - NAryMatIterator(const Mat** arrays, uchar** ptrs, int narrays=-1); - //! the full constructor taking arbitrary number of n-dim matrices - NAryMatIterator(const Mat** arrays, Mat* planes, int narrays=-1); - //! the separate iterator initialization method - void init(const Mat** arrays, Mat* planes, uchar** ptrs, int narrays=-1); - - //! proceeds to the next plane of every iterated matrix - NAryMatIterator& operator ++(); - //! proceeds to the next plane of every iterated matrix (postfix increment operator) - NAryMatIterator operator ++(int); - - //! the iterated arrays - const Mat** arrays; - //! the current planes - Mat* planes; - //! data pointers - uchar** ptrs; - //! the number of arrays - int narrays; - //! the number of hyper-planes that the iterator steps through - size_t nplanes; - //! the size of each segment (in elements) - size_t size; -protected: - int iterdepth; - size_t idx; -}; - -//typedef NAryMatIterator NAryMatNDIterator; - -typedef void (*ConvertData)(const void* from, void* to, int cn); -typedef void (*ConvertScaleData)(const void* from, void* to, int cn, double alpha, double beta); - -//! returns the function for converting pixels from one data type to another -CV_EXPORTS ConvertData getConvertElem(int fromType, int toType); -//! returns the function for converting pixels from one data type to another with the optional scaling -CV_EXPORTS ConvertScaleData getConvertScaleElem(int fromType, int toType); - - -/////////////////////////// multi-dimensional sparse matrix ////////////////////////// - -class SparseMatIterator; -class SparseMatConstIterator; -template class SparseMatIterator_; -template class SparseMatConstIterator_; - -/*! - Sparse matrix class. - - The class represents multi-dimensional sparse numerical arrays. Such a sparse array can store elements - of any type that cv::Mat is able to store. "Sparse" means that only non-zero elements - are stored (though, as a result of some operations on a sparse matrix, some of its stored elements - can actually become 0. It's user responsibility to detect such elements and delete them using cv::SparseMat::erase(). - The non-zero elements are stored in a hash table that grows when it's filled enough, - so that the search time remains O(1) in average. Elements can be accessed using the following methods: - -
            -
          1. Query operations: cv::SparseMat::ptr() and the higher-level cv::SparseMat::ref(), - cv::SparseMat::value() and cv::SparseMat::find, for example: - \code - const int dims = 5; - int size[] = {10, 10, 10, 10, 10}; - SparseMat sparse_mat(dims, size, CV_32F); - for(int i = 0; i < 1000; i++) - { - int idx[dims]; - for(int k = 0; k < dims; k++) - idx[k] = rand()%sparse_mat.size(k); - sparse_mat.ref(idx) += 1.f; - } - \endcode - -
          2. Sparse matrix iterators. Like cv::Mat iterators and unlike cv::Mat iterators, the sparse matrix iterators are STL-style, - that is, the iteration is done as following: - \code - // prints elements of a sparse floating-point matrix and the sum of elements. - SparseMatConstIterator_ - it = sparse_mat.begin(), - it_end = sparse_mat.end(); - double s = 0; - int dims = sparse_mat.dims(); - for(; it != it_end; ++it) - { - // print element indices and the element value - const Node* n = it.node(); - printf("(") - for(int i = 0; i < dims; i++) - printf("%3d%c", n->idx[i], i < dims-1 ? ',' : ')'); - printf(": %f\n", *it); - s += *it; - } - printf("Element sum is %g\n", s); - \endcode - If you run this loop, you will notice that elements are enumerated - in no any logical order (lexicographical etc.), - they come in the same order as they stored in the hash table, i.e. semi-randomly. - - You may collect pointers to the nodes and sort them to get the proper ordering. - Note, however, that pointers to the nodes may become invalid when you add more - elements to the matrix; this is because of possible buffer reallocation. - -
          3. A combination of the above 2 methods when you need to process 2 or more sparse - matrices simultaneously, e.g. this is how you can compute unnormalized - cross-correlation of the 2 floating-point sparse matrices: - \code - double crossCorr(const SparseMat& a, const SparseMat& b) - { - const SparseMat *_a = &a, *_b = &b; - // if b contains less elements than a, - // it's faster to iterate through b - if(_a->nzcount() > _b->nzcount()) - std::swap(_a, _b); - SparseMatConstIterator_ it = _a->begin(), - it_end = _a->end(); - double ccorr = 0; - for(; it != it_end; ++it) - { - // take the next element from the first matrix - float avalue = *it; - const Node* anode = it.node(); - // and try to find element with the same index in the second matrix. - // since the hash value depends only on the element index, - // we reuse hashvalue stored in the node - float bvalue = _b->value(anode->idx,&anode->hashval); - ccorr += avalue*bvalue; - } - return ccorr; - } - \endcode -
          -*/ -class CV_EXPORTS SparseMat -{ -public: - typedef SparseMatIterator iterator; - typedef SparseMatConstIterator const_iterator; - - //! the sparse matrix header - struct CV_EXPORTS Hdr - { - Hdr(int _dims, const int* _sizes, int _type); - void clear(); - int refcount; - int dims; - int valueOffset; - size_t nodeSize; - size_t nodeCount; - size_t freeList; - vector pool; - vector hashtab; - int size[CV_MAX_DIM]; - }; - - //! sparse matrix node - element of a hash table - struct CV_EXPORTS Node - { - //! hash value - size_t hashval; - //! index of the next node in the same hash table entry - size_t next; - //! index of the matrix element - int idx[CV_MAX_DIM]; - }; - - //! default constructor - SparseMat(); - //! creates matrix of the specified size and type - SparseMat(int dims, const int* _sizes, int _type); - //! copy constructor - SparseMat(const SparseMat& m); - //! converts dense 2d matrix to the sparse form - /*! - \param m the input matrix - */ - explicit SparseMat(const Mat& m); - //! converts old-style sparse matrix to the new-style. All the data is copied - SparseMat(const CvSparseMat* m); - //! the destructor - ~SparseMat(); - - //! assignment operator. This is O(1) operation, i.e. no data is copied - SparseMat& operator = (const SparseMat& m); - //! equivalent to the corresponding constructor - SparseMat& operator = (const Mat& m); - - //! creates full copy of the matrix - SparseMat clone() const; - - //! copies all the data to the destination matrix. All the previous content of m is erased - void copyTo( SparseMat& m ) const; - //! converts sparse matrix to dense matrix. - void copyTo( Mat& m ) const; - //! multiplies all the matrix elements by the specified scale factor alpha and converts the results to the specified data type - void convertTo( SparseMat& m, int rtype, double alpha=1 ) const; - //! converts sparse matrix to dense n-dim matrix with optional type conversion and scaling. - /*! - \param rtype The output matrix data type. When it is =-1, the output array will have the same data type as (*this) - \param alpha The scale factor - \param beta The optional delta added to the scaled values before the conversion - */ - void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const; - - // not used now - void assignTo( SparseMat& m, int type=-1 ) const; - - //! reallocates sparse matrix. - /*! - If the matrix already had the proper size and type, - it is simply cleared with clear(), otherwise, - the old matrix is released (using release()) and the new one is allocated. - */ - void create(int dims, const int* _sizes, int _type); - //! sets all the sparse matrix elements to 0, which means clearing the hash table. - void clear(); - //! manually increments the reference counter to the header. - void addref(); - // decrements the header reference counter. When the counter reaches 0, the header and all the underlying data are deallocated. - void release(); - - //! converts sparse matrix to the old-style representation; all the elements are copied. - operator CvSparseMat*() const; - //! returns the size of each element in bytes (not including the overhead - the space occupied by SparseMat::Node elements) - size_t elemSize() const; - //! returns elemSize()/channels() - size_t elemSize1() const; - - //! returns type of sparse matrix elements - int type() const; - //! returns the depth of sparse matrix elements - int depth() const; - //! returns the number of channels - int channels() const; - - //! returns the array of sizes, or NULL if the matrix is not allocated - const int* size() const; - //! returns the size of i-th matrix dimension (or 0) - int size(int i) const; - //! returns the matrix dimensionality - int dims() const; - //! returns the number of non-zero elements (=the number of hash table nodes) - size_t nzcount() const; - - //! computes the element hash value (1D case) - size_t hash(int i0) const; - //! computes the element hash value (2D case) - size_t hash(int i0, int i1) const; - //! computes the element hash value (3D case) - size_t hash(int i0, int i1, int i2) const; - //! computes the element hash value (nD case) - size_t hash(const int* idx) const; - - //@{ - /*! - specialized variants for 1D, 2D, 3D cases and the generic_type one for n-D case. - - return pointer to the matrix element. -
            -
          • if the element is there (it's non-zero), the pointer to it is returned -
          • if it's not there and createMissing=false, NULL pointer is returned -
          • if it's not there and createMissing=true, then the new element - is created and initialized with 0. Pointer to it is returned -
          • if the optional hashval pointer is not NULL, the element hash value is - not computed, but *hashval is taken instead. -
          - */ - //! returns pointer to the specified element (1D case) - uchar* ptr(int i0, bool createMissing, size_t* hashval=0); - //! returns pointer to the specified element (2D case) - uchar* ptr(int i0, int i1, bool createMissing, size_t* hashval=0); - //! returns pointer to the specified element (3D case) - uchar* ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval=0); - //! returns pointer to the specified element (nD case) - uchar* ptr(const int* idx, bool createMissing, size_t* hashval=0); - //@} - - //@{ - /*! - return read-write reference to the specified sparse matrix element. - - ref<_Tp>(i0,...[,hashval]) is equivalent to *(_Tp*)ptr(i0,...,true[,hashval]). - The methods always return a valid reference. - If the element did not exist, it is created and initialiazed with 0. - */ - //! returns reference to the specified element (1D case) - template _Tp& ref(int i0, size_t* hashval=0); - //! returns reference to the specified element (2D case) - template _Tp& ref(int i0, int i1, size_t* hashval=0); - //! returns reference to the specified element (3D case) - template _Tp& ref(int i0, int i1, int i2, size_t* hashval=0); - //! returns reference to the specified element (nD case) - template _Tp& ref(const int* idx, size_t* hashval=0); - //@} - - //@{ - /*! - return value of the specified sparse matrix element. - - value<_Tp>(i0,...[,hashval]) is equivalent - - \code - { const _Tp* p = find<_Tp>(i0,...[,hashval]); return p ? *p : _Tp(); } - \endcode - - That is, if the element did not exist, the methods return 0. - */ - //! returns value of the specified element (1D case) - template _Tp value(int i0, size_t* hashval=0) const; - //! returns value of the specified element (2D case) - template _Tp value(int i0, int i1, size_t* hashval=0) const; - //! returns value of the specified element (3D case) - template _Tp value(int i0, int i1, int i2, size_t* hashval=0) const; - //! returns value of the specified element (nD case) - template _Tp value(const int* idx, size_t* hashval=0) const; - //@} - - //@{ - /*! - Return pointer to the specified sparse matrix element if it exists - - find<_Tp>(i0,...[,hashval]) is equivalent to (_const Tp*)ptr(i0,...false[,hashval]). - - If the specified element does not exist, the methods return NULL. - */ - //! returns pointer to the specified element (1D case) - template const _Tp* find(int i0, size_t* hashval=0) const; - //! returns pointer to the specified element (2D case) - template const _Tp* find(int i0, int i1, size_t* hashval=0) const; - //! returns pointer to the specified element (3D case) - template const _Tp* find(int i0, int i1, int i2, size_t* hashval=0) const; - //! returns pointer to the specified element (nD case) - template const _Tp* find(const int* idx, size_t* hashval=0) const; - - //! erases the specified element (2D case) - void erase(int i0, int i1, size_t* hashval=0); - //! erases the specified element (3D case) - void erase(int i0, int i1, int i2, size_t* hashval=0); - //! erases the specified element (nD case) - void erase(const int* idx, size_t* hashval=0); - - //@{ - /*! - return the sparse matrix iterator pointing to the first sparse matrix element - */ - //! returns the sparse matrix iterator at the matrix beginning - SparseMatIterator begin(); - //! returns the sparse matrix iterator at the matrix beginning - template SparseMatIterator_<_Tp> begin(); - //! returns the read-only sparse matrix iterator at the matrix beginning - SparseMatConstIterator begin() const; - //! returns the read-only sparse matrix iterator at the matrix beginning - template SparseMatConstIterator_<_Tp> begin() const; - //@} - /*! - return the sparse matrix iterator pointing to the element following the last sparse matrix element - */ - //! returns the sparse matrix iterator at the matrix end - SparseMatIterator end(); - //! returns the read-only sparse matrix iterator at the matrix end - SparseMatConstIterator end() const; - //! returns the typed sparse matrix iterator at the matrix end - template SparseMatIterator_<_Tp> end(); - //! returns the typed read-only sparse matrix iterator at the matrix end - template SparseMatConstIterator_<_Tp> end() const; - - //! returns the value stored in the sparse martix node - template _Tp& value(Node* n); - //! returns the value stored in the sparse martix node - template const _Tp& value(const Node* n) const; - - ////////////// some internal-use methods /////////////// - Node* node(size_t nidx); - const Node* node(size_t nidx) const; - - uchar* newNode(const int* idx, size_t hashval); - void removeNode(size_t hidx, size_t nidx, size_t previdx); - void resizeHashTab(size_t newsize); - - enum { MAGIC_VAL=0x42FD0000, MAX_DIM=CV_MAX_DIM, HASH_SCALE=0x5bd1e995, HASH_BIT=0x80000000 }; - - int flags; - Hdr* hdr; -}; - -//! finds global minimum and maximum sparse array elements and returns their values and their locations -CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal, - double* maxVal, int* minIdx=0, int* maxIdx=0); -//! computes norm of a sparse matrix -CV_EXPORTS double norm( const SparseMat& src, int normType ); -//! scales and shifts array elements so that either the specified norm (alpha) or the minimum (alpha) and maximum (beta) array values get the specified values -CV_EXPORTS void normalize( const SparseMat& src, SparseMat& dst, double alpha, int normType ); - -/*! - Read-Only Sparse Matrix Iterator. - Here is how to use the iterator to compute the sum of floating-point sparse matrix elements: - - \code - SparseMatConstIterator it = m.begin(), it_end = m.end(); - double s = 0; - CV_Assert( m.type() == CV_32F ); - for( ; it != it_end; ++it ) - s += it.value(); - \endcode -*/ -class CV_EXPORTS SparseMatConstIterator -{ -public: - //! the default constructor - SparseMatConstIterator(); - //! the full constructor setting the iterator to the first sparse matrix element - SparseMatConstIterator(const SparseMat* _m); - //! the copy constructor - SparseMatConstIterator(const SparseMatConstIterator& it); - - //! the assignment operator - SparseMatConstIterator& operator = (const SparseMatConstIterator& it); - - //! template method returning the current matrix element - template const _Tp& value() const; - //! returns the current node of the sparse matrix. it.node->idx is the current element index - const SparseMat::Node* node() const; - - //! moves iterator to the previous element - SparseMatConstIterator& operator --(); - //! moves iterator to the previous element - SparseMatConstIterator operator --(int); - //! moves iterator to the next element - SparseMatConstIterator& operator ++(); - //! moves iterator to the next element - SparseMatConstIterator operator ++(int); - - //! moves iterator to the element after the last element - void seekEnd(); - - const SparseMat* m; - size_t hashidx; - uchar* ptr; -}; - -/*! - Read-write Sparse Matrix Iterator - - The class is similar to cv::SparseMatConstIterator, - but can be used for in-place modification of the matrix elements. -*/ -class CV_EXPORTS SparseMatIterator : public SparseMatConstIterator -{ -public: - //! the default constructor - SparseMatIterator(); - //! the full constructor setting the iterator to the first sparse matrix element - SparseMatIterator(SparseMat* _m); - //! the full constructor setting the iterator to the specified sparse matrix element - SparseMatIterator(SparseMat* _m, const int* idx); - //! the copy constructor - SparseMatIterator(const SparseMatIterator& it); - - //! the assignment operator - SparseMatIterator& operator = (const SparseMatIterator& it); - //! returns read-write reference to the current sparse matrix element - template _Tp& value() const; - //! returns pointer to the current sparse matrix node. it.node->idx is the index of the current element (do not modify it!) - SparseMat::Node* node() const; - - //! moves iterator to the next element - SparseMatIterator& operator ++(); - //! moves iterator to the next element - SparseMatIterator operator ++(int); -}; - -/*! - The Template Sparse Matrix class derived from cv::SparseMat - - The class provides slightly more convenient operations for accessing elements. - - \code - SparseMat m; - ... - SparseMat_ m_ = (SparseMat_&)m; - m_.ref(1)++; // equivalent to m.ref(1)++; - m_.ref(2) += m_(3); // equivalent to m.ref(2) += m.value(3); - \endcode -*/ -template class SparseMat_ : public SparseMat -{ -public: - typedef SparseMatIterator_<_Tp> iterator; - typedef SparseMatConstIterator_<_Tp> const_iterator; - - //! the default constructor - SparseMat_(); - //! the full constructor equivelent to SparseMat(dims, _sizes, DataType<_Tp>::type) - SparseMat_(int dims, const int* _sizes); - //! the copy constructor. If DataType<_Tp>.type != m.type(), the m elements are converted - SparseMat_(const SparseMat& m); - //! the copy constructor. This is O(1) operation - no data is copied - SparseMat_(const SparseMat_& m); - //! converts dense matrix to the sparse form - SparseMat_(const Mat& m); - //! converts the old-style sparse matrix to the C++ class. All the elements are copied - SparseMat_(const CvSparseMat* m); - //! the assignment operator. If DataType<_Tp>.type != m.type(), the m elements are converted - SparseMat_& operator = (const SparseMat& m); - //! the assignment operator. This is O(1) operation - no data is copied - SparseMat_& operator = (const SparseMat_& m); - //! converts dense matrix to the sparse form - SparseMat_& operator = (const Mat& m); - - //! makes full copy of the matrix. All the elements are duplicated - SparseMat_ clone() const; - //! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type) - void create(int dims, const int* _sizes); - //! converts sparse matrix to the old-style CvSparseMat. All the elements are copied - operator CvSparseMat*() const; - - //! returns type of the matrix elements - int type() const; - //! returns depth of the matrix elements - int depth() const; - //! returns the number of channels in each matrix element - int channels() const; - - //! equivalent to SparseMat::ref<_Tp>(i0, hashval) - _Tp& ref(int i0, size_t* hashval=0); - //! equivalent to SparseMat::ref<_Tp>(i0, i1, hashval) - _Tp& ref(int i0, int i1, size_t* hashval=0); - //! equivalent to SparseMat::ref<_Tp>(i0, i1, i2, hashval) - _Tp& ref(int i0, int i1, int i2, size_t* hashval=0); - //! equivalent to SparseMat::ref<_Tp>(idx, hashval) - _Tp& ref(const int* idx, size_t* hashval=0); - - //! equivalent to SparseMat::value<_Tp>(i0, hashval) - _Tp operator()(int i0, size_t* hashval=0) const; - //! equivalent to SparseMat::value<_Tp>(i0, i1, hashval) - _Tp operator()(int i0, int i1, size_t* hashval=0) const; - //! equivalent to SparseMat::value<_Tp>(i0, i1, i2, hashval) - _Tp operator()(int i0, int i1, int i2, size_t* hashval=0) const; - //! equivalent to SparseMat::value<_Tp>(idx, hashval) - _Tp operator()(const int* idx, size_t* hashval=0) const; - - //! returns sparse matrix iterator pointing to the first sparse matrix element - SparseMatIterator_<_Tp> begin(); - //! returns read-only sparse matrix iterator pointing to the first sparse matrix element - SparseMatConstIterator_<_Tp> begin() const; - //! returns sparse matrix iterator pointing to the element following the last sparse matrix element - SparseMatIterator_<_Tp> end(); - //! returns read-only sparse matrix iterator pointing to the element following the last sparse matrix element - SparseMatConstIterator_<_Tp> end() const; -}; - - -/*! - Template Read-Only Sparse Matrix Iterator Class. - - This is the derived from SparseMatConstIterator class that - introduces more convenient operator *() for accessing the current element. -*/ -template class SparseMatConstIterator_ : public SparseMatConstIterator -{ -public: - typedef std::forward_iterator_tag iterator_category; - - //! the default constructor - SparseMatConstIterator_(); - //! the full constructor setting the iterator to the first sparse matrix element - SparseMatConstIterator_(const SparseMat_<_Tp>* _m); - SparseMatConstIterator_(const SparseMat* _m); - //! the copy constructor - SparseMatConstIterator_(const SparseMatConstIterator_& it); - - //! the assignment operator - SparseMatConstIterator_& operator = (const SparseMatConstIterator_& it); - //! the element access operator - const _Tp& operator *() const; - - //! moves iterator to the next element - SparseMatConstIterator_& operator ++(); - //! moves iterator to the next element - SparseMatConstIterator_ operator ++(int); -}; - -/*! - Template Read-Write Sparse Matrix Iterator Class. - - This is the derived from cv::SparseMatConstIterator_ class that - introduces more convenient operator *() for accessing the current element. -*/ -template class SparseMatIterator_ : public SparseMatConstIterator_<_Tp> -{ -public: - typedef std::forward_iterator_tag iterator_category; - - //! the default constructor - SparseMatIterator_(); - //! the full constructor setting the iterator to the first sparse matrix element - SparseMatIterator_(SparseMat_<_Tp>* _m); - SparseMatIterator_(SparseMat* _m); - //! the copy constructor - SparseMatIterator_(const SparseMatIterator_& it); - - //! the assignment operator - SparseMatIterator_& operator = (const SparseMatIterator_& it); - //! returns the reference to the current element - _Tp& operator *() const; - - //! moves the iterator to the next element - SparseMatIterator_& operator ++(); - //! moves the iterator to the next element - SparseMatIterator_ operator ++(int); -}; - -//////////////////// Fast Nearest-Neighbor Search Structure //////////////////// - -/*! - Fast Nearest Neighbor Search Class. - - The class implements D. Lowe BBF (Best-Bin-First) algorithm for the last - approximate (or accurate) nearest neighbor search in multi-dimensional spaces. - - First, a set of vectors is passed to KDTree::KDTree() constructor - or KDTree::build() method, where it is reordered. - - Then arbitrary vectors can be passed to KDTree::findNearest() methods, which - find the K nearest neighbors among the vectors from the initial set. - The user can balance between the speed and accuracy of the search by varying Emax - parameter, which is the number of leaves that the algorithm checks. - The larger parameter values yield more accurate results at the expense of lower processing speed. - - \code - KDTree T(points, false); - const int K = 3, Emax = INT_MAX; - int idx[K]; - float dist[K]; - T.findNearest(query_vec, K, Emax, idx, 0, dist); - CV_Assert(dist[0] <= dist[1] && dist[1] <= dist[2]); - \endcode -*/ -class CV_EXPORTS_W KDTree -{ -public: - /*! - The node of the search tree. - */ - struct Node - { - Node() : idx(-1), left(-1), right(-1), boundary(0.f) {} - Node(int _idx, int _left, int _right, float _boundary) - : idx(_idx), left(_left), right(_right), boundary(_boundary) {} - //! split dimension; >=0 for nodes (dim), < 0 for leaves (index of the point) - int idx; - //! node indices of the left and the right branches - int left, right; - //! go to the left if query_vec[node.idx]<=node.boundary, otherwise go to the right - float boundary; - }; - - //! the default constructor - CV_WRAP KDTree(); - //! the full constructor that builds the search tree - CV_WRAP KDTree(InputArray points, bool copyAndReorderPoints=false); - //! the full constructor that builds the search tree - CV_WRAP KDTree(InputArray points, InputArray _labels, - bool copyAndReorderPoints=false); - //! builds the search tree - CV_WRAP void build(InputArray points, bool copyAndReorderPoints=false); - //! builds the search tree - CV_WRAP void build(InputArray points, InputArray labels, - bool copyAndReorderPoints=false); - //! finds the K nearest neighbors of "vec" while looking at Emax (at most) leaves - CV_WRAP int findNearest(InputArray vec, int K, int Emax, - OutputArray neighborsIdx, - OutputArray neighbors=noArray(), - OutputArray dist=noArray(), - OutputArray labels=noArray()) const; - //! finds all the points from the initial set that belong to the specified box - CV_WRAP void findOrthoRange(InputArray minBounds, - InputArray maxBounds, - OutputArray neighborsIdx, - OutputArray neighbors=noArray(), - OutputArray labels=noArray()) const; - //! returns vectors with the specified indices - CV_WRAP void getPoints(InputArray idx, OutputArray pts, - OutputArray labels=noArray()) const; - //! return a vector with the specified index - const float* getPoint(int ptidx, int* label=0) const; - //! returns the search space dimensionality - CV_WRAP int dims() const; - - vector nodes; //!< all the tree nodes - CV_PROP Mat points; //!< all the points. It can be a reordered copy of the input vector set or the original vector set. - CV_PROP vector labels; //!< the parallel array of labels. - CV_PROP int maxDepth; //!< maximum depth of the search tree. Do not modify it - CV_PROP_RW int normType; //!< type of the distance (cv::NORM_L1 or cv::NORM_L2) used for search. Initially set to cv::NORM_L2, but you can modify it -}; - -//////////////////////////////////////// XML & YAML I/O //////////////////////////////////// - -class CV_EXPORTS FileNode; - -/*! - XML/YAML File Storage Class. - - The class describes an object associated with XML or YAML file. - It can be used to store data to such a file or read and decode the data. - - The storage is organized as a tree of nested sequences (or lists) and mappings. - Sequence is a heterogenious array, which elements are accessed by indices or sequentially using an iterator. - Mapping is analogue of std::map or C structure, which elements are accessed by names. - The most top level structure is a mapping. - Leaves of the file storage tree are integers, floating-point numbers and text strings. - - For example, the following code: - - \code - // open file storage for writing. Type of the file is determined from the extension - FileStorage fs("test.yml", FileStorage::WRITE); - fs << "test_int" << 5 << "test_real" << 3.1 << "test_string" << "ABCDEFGH"; - fs << "test_mat" << Mat::eye(3,3,CV_32F); - - fs << "test_list" << "[" << 0.0000000000001 << 2 << CV_PI << -3435345 << "2-502 2-029 3egegeg" << - "{:" << "month" << 12 << "day" << 31 << "year" << 1969 << "}" << "]"; - fs << "test_map" << "{" << "x" << 1 << "y" << 2 << "width" << 100 << "height" << 200 << "lbp" << "[:"; - - const uchar arr[] = {0, 1, 1, 0, 1, 1, 0, 1}; - fs.writeRaw("u", arr, (int)(sizeof(arr)/sizeof(arr[0]))); - - fs << "]" << "}"; - \endcode - - will produce the following file: - - \verbatim - %YAML:1.0 - test_int: 5 - test_real: 3.1000000000000001e+00 - test_string: ABCDEFGH - test_mat: !!opencv-matrix - rows: 3 - cols: 3 - dt: f - data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] - test_list: - - 1.0000000000000000e-13 - - 2 - - 3.1415926535897931e+00 - - -3435345 - - "2-502 2-029 3egegeg" - - { month:12, day:31, year:1969 } - test_map: - x: 1 - y: 2 - width: 100 - height: 200 - lbp: [ 0, 1, 1, 0, 1, 1, 0, 1 ] - \endverbatim - - and to read the file above, the following code can be used: - - \code - // open file storage for reading. - // Type of the file is determined from the content, not the extension - FileStorage fs("test.yml", FileStorage::READ); - int test_int = (int)fs["test_int"]; - double test_real = (double)fs["test_real"]; - string test_string = (string)fs["test_string"]; - - Mat M; - fs["test_mat"] >> M; - - FileNode tl = fs["test_list"]; - CV_Assert(tl.type() == FileNode::SEQ && tl.size() == 6); - double tl0 = (double)tl[0]; - int tl1 = (int)tl[1]; - double tl2 = (double)tl[2]; - int tl3 = (int)tl[3]; - string tl4 = (string)tl[4]; - CV_Assert(tl[5].type() == FileNode::MAP && tl[5].size() == 3); - - int month = (int)tl[5]["month"]; - int day = (int)tl[5]["day"]; - int year = (int)tl[5]["year"]; - - FileNode tm = fs["test_map"]; - - int x = (int)tm["x"]; - int y = (int)tm["y"]; - int width = (int)tm["width"]; - int height = (int)tm["height"]; - - int lbp_val = 0; - FileNodeIterator it = tm["lbp"].begin(); - - for(int k = 0; k < 8; k++, ++it) - lbp_val |= ((int)*it) << k; - \endcode -*/ -class CV_EXPORTS_W FileStorage -{ -public: - //! file storage mode - enum - { - READ=0, //! read mode - WRITE=1, //! write mode - APPEND=2, //! append mode - MEMORY=4, - FORMAT_MASK=(7<<3), - FORMAT_AUTO=0, - FORMAT_XML=(1<<3), - FORMAT_YAML=(2<<3) - }; - enum - { - UNDEFINED=0, - VALUE_EXPECTED=1, - NAME_EXPECTED=2, - INSIDE_MAP=4 - }; - //! the default constructor - CV_WRAP FileStorage(); - //! the full constructor that opens file storage for reading or writing - CV_WRAP FileStorage(const string& source, int flags, const string& encoding=string()); - //! the constructor that takes pointer to the C FileStorage structure - FileStorage(CvFileStorage* fs); - //! the destructor. calls release() - virtual ~FileStorage(); - - //! opens file storage for reading or writing. The previous storage is closed with release() - CV_WRAP virtual bool open(const string& filename, int flags, const string& encoding=string()); - //! returns true if the object is associated with currently opened file. - CV_WRAP virtual bool isOpened() const; - //! closes the file and releases all the memory buffers - CV_WRAP virtual void release(); - //! closes the file, releases all the memory buffers and returns the text string - CV_WRAP string releaseAndGetString(); - - //! returns the first element of the top-level mapping - CV_WRAP FileNode getFirstTopLevelNode() const; - //! returns the top-level mapping. YAML supports multiple streams - CV_WRAP FileNode root(int streamidx=0) const; - //! returns the specified element of the top-level mapping - FileNode operator[](const string& nodename) const; - //! returns the specified element of the top-level mapping - CV_WRAP FileNode operator[](const char* nodename) const; - - //! returns pointer to the underlying C FileStorage structure - CvFileStorage* operator *() { return fs; } - //! returns pointer to the underlying C FileStorage structure - const CvFileStorage* operator *() const { return fs; } - //! writes one or more numbers of the specified format to the currently written structure - void writeRaw( const string& fmt, const uchar* vec, size_t len ); - //! writes the registered C structure (CvMat, CvMatND, CvSeq). See cvWrite() - void writeObj( const string& name, const void* obj ); - - //! returns the normalized object name for the specified file name - static string getDefaultObjectName(const string& filename); - - Ptr fs; //!< the underlying C FileStorage structure - string elname; //!< the currently written element - vector structs; //!< the stack of written structures - int state; //!< the writer state -}; - -class CV_EXPORTS FileNodeIterator; - -/*! - File Storage Node class - - The node is used to store each and every element of the file storage opened for reading - - from the primitive objects, such as numbers and text strings, to the complex nodes: - sequences, mappings and the registered objects. - - Note that file nodes are only used for navigating file storages opened for reading. - When a file storage is opened for writing, no data is stored in memory after it is written. -*/ -class CV_EXPORTS_W_SIMPLE FileNode -{ -public: - //! type of the file storage node - enum - { - NONE=0, //!< empty node - INT=1, //!< an integer - REAL=2, //!< floating-point number - FLOAT=REAL, //!< synonym or REAL - STR=3, //!< text string in UTF-8 encoding - STRING=STR, //!< synonym for STR - REF=4, //!< integer of size size_t. Typically used for storing complex dynamic structures where some elements reference the others - SEQ=5, //!< sequence - MAP=6, //!< mapping - TYPE_MASK=7, - FLOW=8, //!< compact representation of a sequence or mapping. Used only by YAML writer - USER=16, //!< a registered object (e.g. a matrix) - EMPTY=32, //!< empty structure (sequence or mapping) - NAMED=64 //!< the node has a name (i.e. it is element of a mapping) - }; - //! the default constructor - CV_WRAP FileNode(); - //! the full constructor wrapping CvFileNode structure. - FileNode(const CvFileStorage* fs, const CvFileNode* node); - //! the copy constructor - FileNode(const FileNode& node); - //! returns element of a mapping node - FileNode operator[](const string& nodename) const; - //! returns element of a mapping node - CV_WRAP FileNode operator[](const char* nodename) const; - //! returns element of a sequence node - CV_WRAP FileNode operator[](int i) const; - //! returns type of the node - CV_WRAP int type() const; - - //! returns true if the node is empty - CV_WRAP bool empty() const; - //! returns true if the node is a "none" object - CV_WRAP bool isNone() const; - //! returns true if the node is a sequence - CV_WRAP bool isSeq() const; - //! returns true if the node is a mapping - CV_WRAP bool isMap() const; - //! returns true if the node is an integer - CV_WRAP bool isInt() const; - //! returns true if the node is a floating-point number - CV_WRAP bool isReal() const; - //! returns true if the node is a text string - CV_WRAP bool isString() const; - //! returns true if the node has a name - CV_WRAP bool isNamed() const; - //! returns the node name or an empty string if the node is nameless - CV_WRAP string name() const; - //! returns the number of elements in the node, if it is a sequence or mapping, or 1 otherwise. - CV_WRAP size_t size() const; - //! returns the node content as an integer. If the node stores floating-point number, it is rounded. - operator int() const; - //! returns the node content as float - operator float() const; - //! returns the node content as double - operator double() const; - //! returns the node content as text string - operator string() const; - - //! returns pointer to the underlying file node - CvFileNode* operator *(); - //! returns pointer to the underlying file node - const CvFileNode* operator* () const; - - //! returns iterator pointing to the first node element - FileNodeIterator begin() const; - //! returns iterator pointing to the element following the last node element - FileNodeIterator end() const; - - //! reads node elements to the buffer with the specified format - void readRaw( const string& fmt, uchar* vec, size_t len ) const; - //! reads the registered object and returns pointer to it - void* readObj() const; - - // do not use wrapper pointer classes for better efficiency - const CvFileStorage* fs; - const CvFileNode* node; -}; - - -/*! - File Node Iterator - - The class is used for iterating sequences (usually) and mappings. - */ -class CV_EXPORTS FileNodeIterator -{ -public: - //! the default constructor - FileNodeIterator(); - //! the full constructor set to the ofs-th element of the node - FileNodeIterator(const CvFileStorage* fs, const CvFileNode* node, size_t ofs=0); - //! the copy constructor - FileNodeIterator(const FileNodeIterator& it); - //! returns the currently observed element - FileNode operator *() const; - //! accesses the currently observed element methods - FileNode operator ->() const; - - //! moves iterator to the next node - FileNodeIterator& operator ++ (); - //! moves iterator to the next node - FileNodeIterator operator ++ (int); - //! moves iterator to the previous node - FileNodeIterator& operator -- (); - //! moves iterator to the previous node - FileNodeIterator operator -- (int); - //! moves iterator forward by the specified offset (possibly negative) - FileNodeIterator& operator += (int ofs); - //! moves iterator backward by the specified offset (possibly negative) - FileNodeIterator& operator -= (int ofs); - - //! reads the next maxCount elements (or less, if the sequence/mapping last element occurs earlier) to the buffer with the specified format - FileNodeIterator& readRaw( const string& fmt, uchar* vec, - size_t maxCount=(size_t)INT_MAX ); - - const CvFileStorage* fs; - const CvFileNode* container; - CvSeqReader reader; - size_t remaining; -}; - -////////////// convenient wrappers for operating old-style dynamic structures ////////////// - -template class SeqIterator; - -typedef Ptr MemStorage; - -/*! - Template Sequence Class derived from CvSeq - - The class provides more convenient access to sequence elements, - STL-style operations and iterators. - - \note The class is targeted for simple data types, - i.e. no constructors or destructors - are called for the sequence elements. -*/ -template class Seq -{ -public: - typedef SeqIterator<_Tp> iterator; - typedef SeqIterator<_Tp> const_iterator; - - //! the default constructor - Seq(); - //! the constructor for wrapping CvSeq structure. The real element type in CvSeq should match _Tp. - Seq(const CvSeq* seq); - //! creates the empty sequence that resides in the specified storage - Seq(MemStorage& storage, int headerSize = sizeof(CvSeq)); - //! returns read-write reference to the specified element - _Tp& operator [](int idx); - //! returns read-only reference to the specified element - const _Tp& operator[](int idx) const; - //! returns iterator pointing to the beginning of the sequence - SeqIterator<_Tp> begin() const; - //! returns iterator pointing to the element following the last sequence element - SeqIterator<_Tp> end() const; - //! returns the number of elements in the sequence - size_t size() const; - //! returns the type of sequence elements (CV_8UC1 ... CV_64FC(CV_CN_MAX) ...) - int type() const; - //! returns the depth of sequence elements (CV_8U ... CV_64F) - int depth() const; - //! returns the number of channels in each sequence element - int channels() const; - //! returns the size of each sequence element - size_t elemSize() const; - //! returns index of the specified sequence element - size_t index(const _Tp& elem) const; - //! appends the specified element to the end of the sequence - void push_back(const _Tp& elem); - //! appends the specified element to the front of the sequence - void push_front(const _Tp& elem); - //! appends zero or more elements to the end of the sequence - void push_back(const _Tp* elems, size_t count); - //! appends zero or more elements to the front of the sequence - void push_front(const _Tp* elems, size_t count); - //! inserts the specified element to the specified position - void insert(int idx, const _Tp& elem); - //! inserts zero or more elements to the specified position - void insert(int idx, const _Tp* elems, size_t count); - //! removes element at the specified position - void remove(int idx); - //! removes the specified subsequence - void remove(const Range& r); - - //! returns reference to the first sequence element - _Tp& front(); - //! returns read-only reference to the first sequence element - const _Tp& front() const; - //! returns reference to the last sequence element - _Tp& back(); - //! returns read-only reference to the last sequence element - const _Tp& back() const; - //! returns true iff the sequence contains no elements - bool empty() const; - - //! removes all the elements from the sequence - void clear(); - //! removes the first element from the sequence - void pop_front(); - //! removes the last element from the sequence - void pop_back(); - //! removes zero or more elements from the beginning of the sequence - void pop_front(_Tp* elems, size_t count); - //! removes zero or more elements from the end of the sequence - void pop_back(_Tp* elems, size_t count); - - //! copies the whole sequence or the sequence slice to the specified vector - void copyTo(vector<_Tp>& vec, const Range& range=Range::all()) const; - //! returns the vector containing all the sequence elements - operator vector<_Tp>() const; - - CvSeq* seq; -}; - - -/*! - STL-style Sequence Iterator inherited from the CvSeqReader structure -*/ -template class SeqIterator : public CvSeqReader -{ -public: - //! the default constructor - SeqIterator(); - //! the constructor setting the iterator to the beginning or to the end of the sequence - SeqIterator(const Seq<_Tp>& seq, bool seekEnd=false); - //! positions the iterator within the sequence - void seek(size_t pos); - //! reports the current iterator position - size_t tell() const; - //! returns reference to the current sequence element - _Tp& operator *(); - //! returns read-only reference to the current sequence element - const _Tp& operator *() const; - //! moves iterator to the next sequence element - SeqIterator& operator ++(); - //! moves iterator to the next sequence element - SeqIterator operator ++(int) const; - //! moves iterator to the previous sequence element - SeqIterator& operator --(); - //! moves iterator to the previous sequence element - SeqIterator operator --(int) const; - - //! moves iterator forward by the specified offset (possibly negative) - SeqIterator& operator +=(int); - //! moves iterator backward by the specified offset (possibly negative) - SeqIterator& operator -=(int); - - // this is index of the current element module seq->total*2 - // (to distinguish between 0 and seq->total) - int index; -}; - - -class CV_EXPORTS Algorithm; -class CV_EXPORTS AlgorithmInfo; -struct CV_EXPORTS AlgorithmInfoData; - -template struct ParamType {}; - -/*! - Base class for high-level OpenCV algorithms -*/ -class CV_EXPORTS_W Algorithm -{ -public: - Algorithm(); - virtual ~Algorithm(); - string name() const; - - template typename ParamType<_Tp>::member_type get(const string& name) const; - template typename ParamType<_Tp>::member_type get(const char* name) const; - - CV_WRAP int getInt(const string& name) const; - CV_WRAP double getDouble(const string& name) const; - CV_WRAP bool getBool(const string& name) const; - CV_WRAP string getString(const string& name) const; - CV_WRAP Mat getMat(const string& name) const; - CV_WRAP vector getMatVector(const string& name) const; - CV_WRAP Ptr getAlgorithm(const string& name) const; - - void set(const string& name, int value); - void set(const string& name, double value); - void set(const string& name, bool value); - void set(const string& name, const string& value); - void set(const string& name, const Mat& value); - void set(const string& name, const vector& value); - void set(const string& name, const Ptr& value); - template void set(const string& name, const Ptr<_Tp>& value); - - CV_WRAP void setInt(const string& name, int value); - CV_WRAP void setDouble(const string& name, double value); - CV_WRAP void setBool(const string& name, bool value); - CV_WRAP void setString(const string& name, const string& value); - CV_WRAP void setMat(const string& name, const Mat& value); - CV_WRAP void setMatVector(const string& name, const vector& value); - CV_WRAP void setAlgorithm(const string& name, const Ptr& value); - template void setAlgorithm(const string& name, const Ptr<_Tp>& value); - - void set(const char* name, int value); - void set(const char* name, double value); - void set(const char* name, bool value); - void set(const char* name, const string& value); - void set(const char* name, const Mat& value); - void set(const char* name, const vector& value); - void set(const char* name, const Ptr& value); - template void set(const char* name, const Ptr<_Tp>& value); - - void setInt(const char* name, int value); - void setDouble(const char* name, double value); - void setBool(const char* name, bool value); - void setString(const char* name, const string& value); - void setMat(const char* name, const Mat& value); - void setMatVector(const char* name, const vector& value); - void setAlgorithm(const char* name, const Ptr& value); - template void setAlgorithm(const char* name, const Ptr<_Tp>& value); - - CV_WRAP string paramHelp(const string& name) const; - int paramType(const char* name) const; - CV_WRAP int paramType(const string& name) const; - CV_WRAP void getParams(CV_OUT vector& names) const; - - - virtual void write(FileStorage& fs) const; - virtual void read(const FileNode& fn); - - typedef Algorithm* (*Constructor)(void); - typedef int (Algorithm::*Getter)() const; - typedef void (Algorithm::*Setter)(int); - - CV_WRAP static void getList(CV_OUT vector& algorithms); - CV_WRAP static Ptr _create(const string& name); - template static Ptr<_Tp> create(const string& name); - - virtual AlgorithmInfo* info() const /* TODO: make it = 0;*/ { return 0; } -}; - - -class CV_EXPORTS AlgorithmInfo -{ -public: - friend class Algorithm; - AlgorithmInfo(const string& name, Algorithm::Constructor create); - ~AlgorithmInfo(); - void get(const Algorithm* algo, const char* name, int argType, void* value) const; - void addParam_(Algorithm& algo, const char* name, int argType, - void* value, bool readOnly, - Algorithm::Getter getter, Algorithm::Setter setter, - const string& help=string()); - string paramHelp(const char* name) const; - int paramType(const char* name) const; - void getParams(vector& names) const; - - void write(const Algorithm* algo, FileStorage& fs) const; - void read(Algorithm* algo, const FileNode& fn) const; - string name() const; - - void addParam(Algorithm& algo, const char* name, - int& value, bool readOnly=false, - int (Algorithm::*getter)()=0, - void (Algorithm::*setter)(int)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - short& value, bool readOnly=false, - int (Algorithm::*getter)()=0, - void (Algorithm::*setter)(int)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - bool& value, bool readOnly=false, - int (Algorithm::*getter)()=0, - void (Algorithm::*setter)(int)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - double& value, bool readOnly=false, - double (Algorithm::*getter)()=0, - void (Algorithm::*setter)(double)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - string& value, bool readOnly=false, - string (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const string&)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - Mat& value, bool readOnly=false, - Mat (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const Mat&)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - vector& value, bool readOnly=false, - vector (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const vector&)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - Ptr& value, bool readOnly=false, - Ptr (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const Ptr&)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - float& value, bool readOnly=false, - float (Algorithm::*getter)()=0, - void (Algorithm::*setter)(float)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - unsigned int& value, bool readOnly=false, - unsigned int (Algorithm::*getter)()=0, - void (Algorithm::*setter)(unsigned int)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - uint64& value, bool readOnly=false, - uint64 (Algorithm::*getter)()=0, - void (Algorithm::*setter)(uint64)=0, - const string& help=string()); - void addParam(Algorithm& algo, const char* name, - uchar& value, bool readOnly=false, - uchar (Algorithm::*getter)()=0, - void (Algorithm::*setter)(uchar)=0, - const string& help=string()); - template void addParam(Algorithm& algo, const char* name, - Ptr<_Tp>& value, bool readOnly=false, - Ptr<_Tp> (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const Ptr<_Tp>&)=0, - const string& help=string()); - template void addParam(Algorithm& algo, const char* name, - Ptr<_Tp>& value, bool readOnly=false, - Ptr<_Tp> (Algorithm::*getter)()=0, - void (Algorithm::*setter)(const Ptr<_Tp>&)=0, - const string& help=string()); -protected: - AlgorithmInfoData* data; - void set(Algorithm* algo, const char* name, int argType, - const void* value, bool force=false) const; -}; - - -struct CV_EXPORTS Param -{ - enum { INT=0, BOOLEAN=1, REAL=2, STRING=3, MAT=4, MAT_VECTOR=5, ALGORITHM=6, FLOAT=7, UNSIGNED_INT=8, UINT64=9, SHORT=10, UCHAR=11 }; - - Param(); - Param(int _type, bool _readonly, int _offset, - Algorithm::Getter _getter=0, - Algorithm::Setter _setter=0, - const string& _help=string()); - int type; - int offset; - bool readonly; - Algorithm::Getter getter; - Algorithm::Setter setter; - string help; -}; - -template<> struct ParamType -{ - typedef bool const_param_type; - typedef bool member_type; - - enum { type = Param::BOOLEAN }; -}; - -template<> struct ParamType -{ - typedef int const_param_type; - typedef int member_type; - - enum { type = Param::INT }; -}; - -template<> struct ParamType -{ - typedef int const_param_type; - typedef int member_type; - - enum { type = Param::SHORT }; -}; - -template<> struct ParamType -{ - typedef double const_param_type; - typedef double member_type; - - enum { type = Param::REAL }; -}; - -template<> struct ParamType -{ - typedef const string& const_param_type; - typedef string member_type; - - enum { type = Param::STRING }; -}; - -template<> struct ParamType -{ - typedef const Mat& const_param_type; - typedef Mat member_type; - - enum { type = Param::MAT }; -}; - -template<> struct ParamType > -{ - typedef const vector& const_param_type; - typedef vector member_type; - - enum { type = Param::MAT_VECTOR }; -}; - -template<> struct ParamType -{ - typedef const Ptr& const_param_type; - typedef Ptr member_type; - - enum { type = Param::ALGORITHM }; -}; - -template<> struct ParamType -{ - typedef float const_param_type; - typedef float member_type; - - enum { type = Param::FLOAT }; -}; - -template<> struct ParamType -{ - typedef unsigned const_param_type; - typedef unsigned member_type; - - enum { type = Param::UNSIGNED_INT }; -}; - -template<> struct ParamType -{ - typedef uint64 const_param_type; - typedef uint64 member_type; - - enum { type = Param::UINT64 }; -}; - -template<> struct ParamType -{ - typedef uchar const_param_type; - typedef uchar member_type; - - enum { type = Param::UCHAR }; -}; - -/*! -"\nThe CommandLineParser class is designed for command line arguments parsing\n" - "Keys map: \n" - "Before you start to work with CommandLineParser you have to create a map for keys.\n" - " It will look like this\n" - " const char* keys =\n" - " {\n" - " { s| string| 123asd |string parameter}\n" - " { d| digit | 100 |digit parameter }\n" - " { c|noCamera|false |without camera }\n" - " { 1| |some text|help }\n" - " { 2| |333 |another help }\n" - " };\n" - "Usage syntax: \n" - " \"{\" - start of parameter string.\n" - " \"}\" - end of parameter string\n" - " \"|\" - separator between short name, full name, default value and help\n" - "Supported syntax: \n" - " --key1=arg1 \n" - " -key2=arg2 \n" - "Usage: \n" - " Imagine that the input parameters are next:\n" - " -s=string_value --digit=250 --noCamera lena.jpg 10000\n" - " CommandLineParser parser(argc, argv, keys) - create a parser object\n" - " parser.get(\"s\" or \"string\") will return you first parameter value\n" - " parser.get(\"s\", false or \"string\", false) will return you first parameter value\n" - " without spaces in end and begin\n" - " parser.get(\"d\" or \"digit\") will return you second parameter value.\n" - " It also works with 'unsigned int', 'double', and 'float' types>\n" - " parser.get(\"c\" or \"noCamera\") will return you true .\n" - " If you enter this key in commandline>\n" - " It return you false otherwise.\n" - " parser.get(\"1\") will return you the first argument without parameter (lena.jpg) \n" - " parser.get(\"2\") will return you the second argument without parameter (10000)\n" - " It also works with 'unsigned int', 'double', and 'float' types \n" -*/ -class CV_EXPORTS CommandLineParser -{ - public: - - //! the default constructor - CommandLineParser(int argc, const char* const argv[], const char* key_map); - - //! get parameter, you can choose: delete spaces in end and begin or not - template - _Tp get(const std::string& name, bool space_delete=true) - { - if (!has(name)) - { - return _Tp(); - } - std::string str = getString(name); - return analyzeValue<_Tp>(str, space_delete); - } - - //! print short name, full name, current value and help for all params - void printParams(); - - protected: - std::map > data; - std::string getString(const std::string& name); - - bool has(const std::string& keys); - - template - _Tp analyzeValue(const std::string& str, bool space_delete=false); - - template - static _Tp getData(const std::string& str) - { - _Tp res = _Tp(); - std::stringstream s1(str); - s1 >> res; - return res; - } - - template - _Tp fromStringNumber(const std::string& str);//the default conversion function for numbers - - }; - -template<> CV_EXPORTS -bool CommandLineParser::get(const std::string& name, bool space_delete); - -template<> CV_EXPORTS -std::string CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - -template<> CV_EXPORTS -int CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - -template<> CV_EXPORTS -unsigned int CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - -template<> CV_EXPORTS -uint64 CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - -template<> CV_EXPORTS -float CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - -template<> CV_EXPORTS -double CommandLineParser::analyzeValue(const std::string& str, bool space_delete); - - -/////////////////////////////// Parallel Primitives ////////////////////////////////// - -// a base body class -class CV_EXPORTS ParallelLoopBody -{ -public: - virtual ~ParallelLoopBody(); - virtual void operator() (const Range& range) const = 0; -}; - -CV_EXPORTS void parallel_for_(const Range& range, const ParallelLoopBody& body, double nstripes=-1.); - -/////////////////////////// Synchronization Primitives /////////////////////////////// - -class CV_EXPORTS Mutex -{ -public: - Mutex(); - ~Mutex(); - Mutex(const Mutex& m); - Mutex& operator = (const Mutex& m); - - void lock(); - bool trylock(); - void unlock(); - - struct Impl; -protected: - Impl* impl; -}; - -class CV_EXPORTS AutoLock -{ -public: - AutoLock(Mutex& m) : mutex(&m) { mutex->lock(); } - ~AutoLock() { mutex->unlock(); } -protected: - Mutex* mutex; -private: - AutoLock(const AutoLock&); - AutoLock& operator = (const AutoLock&); -}; - -class TLSDataContainer -{ -private: - int key_; -protected: - CV_EXPORTS TLSDataContainer(); - CV_EXPORTS ~TLSDataContainer(); // virtual is not required -public: - virtual void* createDataInstance() const = 0; - virtual void deleteDataInstance(void* data) const = 0; - - CV_EXPORTS void* getData() const; -}; - -template -class TLSData : protected TLSDataContainer -{ -public: - inline TLSData() {} - inline ~TLSData() {} - inline T* get() const { return (T*)getData(); } -private: - virtual void* createDataInstance() const { return new T; } - virtual void deleteDataInstance(void* data) const { delete (T*)data; } -}; - -} - -#endif // __cplusplus - -#include "opencv2/core/operations.hpp" -#include "opencv2/core/mat.hpp" - -#endif /*__OPENCV_CORE_HPP__*/ diff --git a/modules/core/include/opencv2/core/core_c.h b/modules/core/include/opencv2/core/core_c.h deleted file mode 100644 index 38abfc4..0000000 --- a/modules/core/include/opencv2/core/core_c.h +++ /dev/null @@ -1,1885 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - - -#ifndef __OPENCV_CORE_C_H__ -#define __OPENCV_CORE_C_H__ - -#include "opencv2/core/types_c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************************\ -* Array allocation, deallocation, initialization and access to elements * -\****************************************************************************************/ - -/* wrapper. - If there is no enough memory, the function - (as well as other OpenCV functions that call cvAlloc) - raises an error. */ -CVAPI(void*) cvAlloc( size_t size ); - -/* wrapper. - Here and further all the memory releasing functions - (that all call cvFree) take double pointer in order to - to clear pointer to the data after releasing it. - Passing pointer to NULL pointer is Ok: nothing happens in this case -*/ -CVAPI(void) cvFree_( void* ptr ); -#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr)=0) - -/* Allocates and initializes IplImage header */ -CVAPI(IplImage*) cvCreateImageHeader( CvSize size, int depth, int channels ); - -/* Inializes IplImage header */ -CVAPI(IplImage*) cvInitImageHeader( IplImage* image, CvSize size, int depth, - int channels, int origin CV_DEFAULT(0), - int align CV_DEFAULT(4)); - -/* Creates IPL image (header and data) */ -CVAPI(IplImage*) cvCreateImage( CvSize size, int depth, int channels ); - -/* Releases (i.e. deallocates) IPL image header */ -CVAPI(void) cvReleaseImageHeader( IplImage** image ); - -/* Releases IPL image header and data */ -CVAPI(void) cvReleaseImage( IplImage** image ); - -/* Creates a copy of IPL image (widthStep may differ) */ -CVAPI(IplImage*) cvCloneImage( const IplImage* image ); - -/* Sets a Channel Of Interest (only a few functions support COI) - - use cvCopy to extract the selected channel and/or put it back */ -CVAPI(void) cvSetImageCOI( IplImage* image, int coi ); - -/* Retrieves image Channel Of Interest */ -CVAPI(int) cvGetImageCOI( const IplImage* image ); - -/* Sets image ROI (region of interest) (COI is not changed) */ -CVAPI(void) cvSetImageROI( IplImage* image, CvRect rect ); - -/* Resets image ROI and COI */ -CVAPI(void) cvResetImageROI( IplImage* image ); - -/* Retrieves image ROI */ -CVAPI(CvRect) cvGetImageROI( const IplImage* image ); - -/* Allocates and initializes CvMat header */ -CVAPI(CvMat*) cvCreateMatHeader( int rows, int cols, int type ); - -#define CV_AUTOSTEP 0x7fffffff - -/* Initializes CvMat header */ -CVAPI(CvMat*) cvInitMatHeader( CvMat* mat, int rows, int cols, - int type, void* data CV_DEFAULT(NULL), - int step CV_DEFAULT(CV_AUTOSTEP) ); - -/* Allocates and initializes CvMat header and allocates data */ -CVAPI(CvMat*) cvCreateMat( int rows, int cols, int type ); - -/* Releases CvMat header and deallocates matrix data - (reference counting is used for data) */ -CVAPI(void) cvReleaseMat( CvMat** mat ); - -/* Decrements CvMat data reference counter and deallocates the data if - it reaches 0 */ -CV_INLINE void cvDecRefData( CvArr* arr ) -{ - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - mat->data.ptr = NULL; - if( mat->refcount != NULL && --*mat->refcount == 0 ) - cvFree( &mat->refcount ); - mat->refcount = NULL; - } - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - mat->data.ptr = NULL; - if( mat->refcount != NULL && --*mat->refcount == 0 ) - cvFree( &mat->refcount ); - mat->refcount = NULL; - } -} - -/* Increments CvMat data reference counter */ -CV_INLINE int cvIncRefData( CvArr* arr ) -{ - int refcount = 0; - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - if( mat->refcount != NULL ) - refcount = ++*mat->refcount; - } - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - if( mat->refcount != NULL ) - refcount = ++*mat->refcount; - } - return refcount; -} - - -/* Creates an exact copy of the input matrix (except, may be, step value) */ -CVAPI(CvMat*) cvCloneMat( const CvMat* mat ); - - -/* Makes a new matrix from subrectangle of input array. - No data is copied */ -CVAPI(CvMat*) cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect ); -#define cvGetSubArr cvGetSubRect - -/* Selects row span of the input array: arr(start_row:delta_row:end_row,:) - (end_row is not included into the span). */ -CVAPI(CvMat*) cvGetRows( const CvArr* arr, CvMat* submat, - int start_row, int end_row, - int delta_row CV_DEFAULT(1)); - -CV_INLINE CvMat* cvGetRow( const CvArr* arr, CvMat* submat, int row ) -{ - return cvGetRows( arr, submat, row, row + 1, 1 ); -} - - -/* Selects column span of the input array: arr(:,start_col:end_col) - (end_col is not included into the span) */ -CVAPI(CvMat*) cvGetCols( const CvArr* arr, CvMat* submat, - int start_col, int end_col ); - -CV_INLINE CvMat* cvGetCol( const CvArr* arr, CvMat* submat, int col ) -{ - return cvGetCols( arr, submat, col, col + 1 ); -} - -/* Select a diagonal of the input array. - (diag = 0 means the main diagonal, >0 means a diagonal above the main one, - <0 - below the main one). - The diagonal will be represented as a column (nx1 matrix). */ -CVAPI(CvMat*) cvGetDiag( const CvArr* arr, CvMat* submat, - int diag CV_DEFAULT(0)); - -/* low-level scalar <-> raw data conversion functions */ -CVAPI(void) cvScalarToRawData( const CvScalar* scalar, void* data, int type, - int extend_to_12 CV_DEFAULT(0) ); - -CVAPI(void) cvRawDataToScalar( const void* data, int type, CvScalar* scalar ); - -/* Allocates and initializes CvMatND header */ -CVAPI(CvMatND*) cvCreateMatNDHeader( int dims, const int* sizes, int type ); - -/* Allocates and initializes CvMatND header and allocates data */ -CVAPI(CvMatND*) cvCreateMatND( int dims, const int* sizes, int type ); - -/* Initializes preallocated CvMatND header */ -CVAPI(CvMatND*) cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes, - int type, void* data CV_DEFAULT(NULL) ); - -/* Releases CvMatND */ -CV_INLINE void cvReleaseMatND( CvMatND** mat ) -{ - cvReleaseMat( (CvMat**)mat ); -} - -/* Creates a copy of CvMatND (except, may be, steps) */ -CVAPI(CvMatND*) cvCloneMatND( const CvMatND* mat ); - -/* Allocates and initializes CvSparseMat header and allocates data */ -CVAPI(CvSparseMat*) cvCreateSparseMat( int dims, const int* sizes, int type ); - -/* Releases CvSparseMat */ -CVAPI(void) cvReleaseSparseMat( CvSparseMat** mat ); - -/* Creates a copy of CvSparseMat (except, may be, zero items) */ -CVAPI(CvSparseMat*) cvCloneSparseMat( const CvSparseMat* mat ); - -/* Initializes sparse array iterator - (returns the first node or NULL if the array is empty) */ -CVAPI(CvSparseNode*) cvInitSparseMatIterator( const CvSparseMat* mat, - CvSparseMatIterator* mat_iterator ); - -// returns next sparse array node (or NULL if there is no more nodes) -CV_INLINE CvSparseNode* cvGetNextSparseNode( CvSparseMatIterator* mat_iterator ) -{ - if( mat_iterator->node->next ) - return mat_iterator->node = mat_iterator->node->next; - else - { - int idx; - for( idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; idx++ ) - { - CvSparseNode* node = (CvSparseNode*)mat_iterator->mat->hashtable[idx]; - if( node ) - { - mat_iterator->curidx = idx; - return mat_iterator->node = node; - } - } - return NULL; - } -} - -/**************** matrix iterator: used for n-ary operations on dense arrays *********/ - -#define CV_MAX_ARR 10 - -typedef struct CvNArrayIterator -{ - int count; /* number of arrays */ - int dims; /* number of dimensions to iterate */ - CvSize size; /* maximal common linear size: { width = size, height = 1 } */ - uchar* ptr[CV_MAX_ARR]; /* pointers to the array slices */ - int stack[CV_MAX_DIM]; /* for internal use */ - CvMatND* hdr[CV_MAX_ARR]; /* pointers to the headers of the - matrices that are processed */ -} -CvNArrayIterator; - -#define CV_NO_DEPTH_CHECK 1 -#define CV_NO_CN_CHECK 2 -#define CV_NO_SIZE_CHECK 4 - -/* initializes iterator that traverses through several arrays simulteneously - (the function together with cvNextArraySlice is used for - N-ari element-wise operations) */ -CVAPI(int) cvInitNArrayIterator( int count, CvArr** arrs, - const CvArr* mask, CvMatND* stubs, - CvNArrayIterator* array_iterator, - int flags CV_DEFAULT(0) ); - -/* returns zero value if iteration is finished, non-zero (slice length) otherwise */ -CVAPI(int) cvNextNArraySlice( CvNArrayIterator* array_iterator ); - - -/* Returns type of array elements: - CV_8UC1 ... CV_64FC4 ... */ -CVAPI(int) cvGetElemType( const CvArr* arr ); - -/* Retrieves number of an array dimensions and - optionally sizes of the dimensions */ -CVAPI(int) cvGetDims( const CvArr* arr, int* sizes CV_DEFAULT(NULL) ); - - -/* Retrieves size of a particular array dimension. - For 2d arrays cvGetDimSize(arr,0) returns number of rows (image height) - and cvGetDimSize(arr,1) returns number of columns (image width) */ -CVAPI(int) cvGetDimSize( const CvArr* arr, int index ); - - -/* ptr = &arr(idx0,idx1,...). All indexes are zero-based, - the major dimensions go first (e.g. (y,x) for 2D, (z,y,x) for 3D */ -CVAPI(uchar*) cvPtr1D( const CvArr* arr, int idx0, int* type CV_DEFAULT(NULL)); -CVAPI(uchar*) cvPtr2D( const CvArr* arr, int idx0, int idx1, int* type CV_DEFAULT(NULL) ); -CVAPI(uchar*) cvPtr3D( const CvArr* arr, int idx0, int idx1, int idx2, - int* type CV_DEFAULT(NULL)); - -/* For CvMat or IplImage number of indices should be 2 - (row index (y) goes first, column index (x) goes next). - For CvMatND or CvSparseMat number of infices should match number of and - indices order should match the array dimension order. */ -CVAPI(uchar*) cvPtrND( const CvArr* arr, const int* idx, int* type CV_DEFAULT(NULL), - int create_node CV_DEFAULT(1), - unsigned* precalc_hashval CV_DEFAULT(NULL)); - -/* value = arr(idx0,idx1,...) */ -CVAPI(CvScalar) cvGet1D( const CvArr* arr, int idx0 ); -CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 ); -CVAPI(CvScalar) cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 ); -CVAPI(CvScalar) cvGetND( const CvArr* arr, const int* idx ); - -/* for 1-channel arrays */ -CVAPI(double) cvGetReal1D( const CvArr* arr, int idx0 ); -CVAPI(double) cvGetReal2D( const CvArr* arr, int idx0, int idx1 ); -CVAPI(double) cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 ); -CVAPI(double) cvGetRealND( const CvArr* arr, const int* idx ); - -/* arr(idx0,idx1,...) = value */ -CVAPI(void) cvSet1D( CvArr* arr, int idx0, CvScalar value ); -CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value ); -CVAPI(void) cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value ); -CVAPI(void) cvSetND( CvArr* arr, const int* idx, CvScalar value ); - -/* for 1-channel arrays */ -CVAPI(void) cvSetReal1D( CvArr* arr, int idx0, double value ); -CVAPI(void) cvSetReal2D( CvArr* arr, int idx0, int idx1, double value ); -CVAPI(void) cvSetReal3D( CvArr* arr, int idx0, - int idx1, int idx2, double value ); -CVAPI(void) cvSetRealND( CvArr* arr, const int* idx, double value ); - -/* clears element of ND dense array, - in case of sparse arrays it deletes the specified node */ -CVAPI(void) cvClearND( CvArr* arr, const int* idx ); - -/* Converts CvArr (IplImage or CvMat,...) to CvMat. - If the last parameter is non-zero, function can - convert multi(>2)-dimensional array to CvMat as long as - the last array's dimension is continous. The resultant - matrix will be have appropriate (a huge) number of rows */ -CVAPI(CvMat*) cvGetMat( const CvArr* arr, CvMat* header, - int* coi CV_DEFAULT(NULL), - int allowND CV_DEFAULT(0)); - -/* Converts CvArr (IplImage or CvMat) to IplImage */ -CVAPI(IplImage*) cvGetImage( const CvArr* arr, IplImage* image_header ); - - -/* Changes a shape of multi-dimensional array. - new_cn == 0 means that number of channels remains unchanged. - new_dims == 0 means that number and sizes of dimensions remain the same - (unless they need to be changed to set the new number of channels) - if new_dims == 1, there is no need to specify new dimension sizes - The resultant configuration should be achievable w/o data copying. - If the resultant array is sparse, CvSparseMat header should be passed - to the function else if the result is 1 or 2 dimensional, - CvMat header should be passed to the function - else CvMatND header should be passed */ -CVAPI(CvArr*) cvReshapeMatND( const CvArr* arr, - int sizeof_header, CvArr* header, - int new_cn, int new_dims, int* new_sizes ); - -#define cvReshapeND( arr, header, new_cn, new_dims, new_sizes ) \ - cvReshapeMatND( (arr), sizeof(*(header)), (header), \ - (new_cn), (new_dims), (new_sizes)) - -CVAPI(CvMat*) cvReshape( const CvArr* arr, CvMat* header, - int new_cn, int new_rows CV_DEFAULT(0) ); - -/* Repeats source 2d array several times in both horizontal and - vertical direction to fill destination array */ -CVAPI(void) cvRepeat( const CvArr* src, CvArr* dst ); - -/* Allocates array data */ -CVAPI(void) cvCreateData( CvArr* arr ); - -/* Releases array data */ -CVAPI(void) cvReleaseData( CvArr* arr ); - -/* Attaches user data to the array header. The step is reffered to - the pre-last dimension. That is, all the planes of the array - must be joint (w/o gaps) */ -CVAPI(void) cvSetData( CvArr* arr, void* data, int step ); - -/* Retrieves raw data of CvMat, IplImage or CvMatND. - In the latter case the function raises an error if - the array can not be represented as a matrix */ -CVAPI(void) cvGetRawData( const CvArr* arr, uchar** data, - int* step CV_DEFAULT(NULL), - CvSize* roi_size CV_DEFAULT(NULL)); - -/* Returns width and height of array in elements */ -CVAPI(CvSize) cvGetSize( const CvArr* arr ); - -/* Copies source array to destination array */ -CVAPI(void) cvCopy( const CvArr* src, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Sets all or "masked" elements of input array - to the same value*/ -CVAPI(void) cvSet( CvArr* arr, CvScalar value, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Clears all the array elements (sets them to 0) */ -CVAPI(void) cvSetZero( CvArr* arr ); -#define cvZero cvSetZero - - -/* Splits a multi-channel array into the set of single-channel arrays or - extracts particular [color] plane */ -CVAPI(void) cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, - CvArr* dst2, CvArr* dst3 ); - -/* Merges a set of single-channel arrays into the single multi-channel array - or inserts one particular [color] plane to the array */ -CVAPI(void) cvMerge( const CvArr* src0, const CvArr* src1, - const CvArr* src2, const CvArr* src3, - CvArr* dst ); - -/* Copies several channels from input arrays to - certain channels of output arrays */ -CVAPI(void) cvMixChannels( const CvArr** src, int src_count, - CvArr** dst, int dst_count, - const int* from_to, int pair_count ); - -/* Performs linear transformation on every source array element: - dst(x,y,c) = scale*src(x,y,c)+shift. - Arbitrary combination of input and output array depths are allowed - (number of channels must be the same), thus the function can be used - for type conversion */ -CVAPI(void) cvConvertScale( const CvArr* src, CvArr* dst, - double scale CV_DEFAULT(1), - double shift CV_DEFAULT(0) ); -#define cvCvtScale cvConvertScale -#define cvScale cvConvertScale -#define cvConvert( src, dst ) cvConvertScale( (src), (dst), 1, 0 ) - - -/* Performs linear transformation on every source array element, - stores absolute value of the result: - dst(x,y,c) = abs(scale*src(x,y,c)+shift). - destination array must have 8u type. - In other cases one may use cvConvertScale + cvAbsDiffS */ -CVAPI(void) cvConvertScaleAbs( const CvArr* src, CvArr* dst, - double scale CV_DEFAULT(1), - double shift CV_DEFAULT(0) ); -#define cvCvtScaleAbs cvConvertScaleAbs - - -/* checks termination criteria validity and - sets eps to default_eps (if it is not set), - max_iter to default_max_iters (if it is not set) -*/ -CVAPI(CvTermCriteria) cvCheckTermCriteria( CvTermCriteria criteria, - double default_eps, - int default_max_iters ); - -/****************************************************************************************\ -* Arithmetic, logic and comparison operations * -\****************************************************************************************/ - -/* dst(mask) = src1(mask) + src2(mask) */ -CVAPI(void) cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(mask) = src(mask) + value */ -CVAPI(void) cvAddS( const CvArr* src, CvScalar value, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(mask) = src1(mask) - src2(mask) */ -CVAPI(void) cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(mask) = src(mask) - value = src(mask) + (-value) */ -CV_INLINE void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL)) -{ - cvAddS( src, cvScalar( -value.val[0], -value.val[1], -value.val[2], -value.val[3]), - dst, mask ); -} - -/* dst(mask) = value - src(mask) */ -CVAPI(void) cvSubRS( const CvArr* src, CvScalar value, CvArr* dst, - const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src1(idx) * src2(idx) * scale - (scaled element-wise multiplication of 2 arrays) */ -CVAPI(void) cvMul( const CvArr* src1, const CvArr* src2, - CvArr* dst, double scale CV_DEFAULT(1) ); - -/* element-wise division/inversion with scaling: - dst(idx) = src1(idx) * scale / src2(idx) - or dst(idx) = scale / src2(idx) if src1 == 0 */ -CVAPI(void) cvDiv( const CvArr* src1, const CvArr* src2, - CvArr* dst, double scale CV_DEFAULT(1)); - -/* dst = src1 * scale + src2 */ -CVAPI(void) cvScaleAdd( const CvArr* src1, CvScalar scale, - const CvArr* src2, CvArr* dst ); -#define cvAXPY( A, real_scalar, B, C ) cvScaleAdd(A, cvRealScalar(real_scalar), B, C) - -/* dst = src1 * alpha + src2 * beta + gamma */ -CVAPI(void) cvAddWeighted( const CvArr* src1, double alpha, - const CvArr* src2, double beta, - double gamma, CvArr* dst ); - -/* result = sum_i(src1(i) * src2(i)) (results for all channels are accumulated together) */ -CVAPI(double) cvDotProduct( const CvArr* src1, const CvArr* src2 ); - -/* dst(idx) = src1(idx) & src2(idx) */ -CVAPI(void) cvAnd( const CvArr* src1, const CvArr* src2, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src(idx) & value */ -CVAPI(void) cvAndS( const CvArr* src, CvScalar value, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src1(idx) | src2(idx) */ -CVAPI(void) cvOr( const CvArr* src1, const CvArr* src2, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src(idx) | value */ -CVAPI(void) cvOrS( const CvArr* src, CvScalar value, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src1(idx) ^ src2(idx) */ -CVAPI(void) cvXor( const CvArr* src1, const CvArr* src2, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = src(idx) ^ value */ -CVAPI(void) cvXorS( const CvArr* src, CvScalar value, - CvArr* dst, const CvArr* mask CV_DEFAULT(NULL)); - -/* dst(idx) = ~src(idx) */ -CVAPI(void) cvNot( const CvArr* src, CvArr* dst ); - -/* dst(idx) = lower(idx) <= src(idx) < upper(idx) */ -CVAPI(void) cvInRange( const CvArr* src, const CvArr* lower, - const CvArr* upper, CvArr* dst ); - -/* dst(idx) = lower <= src(idx) < upper */ -CVAPI(void) cvInRangeS( const CvArr* src, CvScalar lower, - CvScalar upper, CvArr* dst ); - -#define CV_CMP_EQ 0 -#define CV_CMP_GT 1 -#define CV_CMP_GE 2 -#define CV_CMP_LT 3 -#define CV_CMP_LE 4 -#define CV_CMP_NE 5 - -/* The comparison operation support single-channel arrays only. - Destination image should be 8uC1 or 8sC1 */ - -/* dst(idx) = src1(idx) _cmp_op_ src2(idx) */ -CVAPI(void) cvCmp( const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op ); - -/* dst(idx) = src1(idx) _cmp_op_ value */ -CVAPI(void) cvCmpS( const CvArr* src, double value, CvArr* dst, int cmp_op ); - -/* dst(idx) = min(src1(idx),src2(idx)) */ -CVAPI(void) cvMin( const CvArr* src1, const CvArr* src2, CvArr* dst ); - -/* dst(idx) = max(src1(idx),src2(idx)) */ -CVAPI(void) cvMax( const CvArr* src1, const CvArr* src2, CvArr* dst ); - -/* dst(idx) = min(src(idx),value) */ -CVAPI(void) cvMinS( const CvArr* src, double value, CvArr* dst ); - -/* dst(idx) = max(src(idx),value) */ -CVAPI(void) cvMaxS( const CvArr* src, double value, CvArr* dst ); - -/* dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */ -CVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst ); - -/* dst(x,y,c) = abs(src(x,y,c) - value(c)) */ -CVAPI(void) cvAbsDiffS( const CvArr* src, CvArr* dst, CvScalar value ); -#define cvAbs( src, dst ) cvAbsDiffS( (src), (dst), cvScalarAll(0)) - -/****************************************************************************************\ -* Math operations * -\****************************************************************************************/ - -/* Does cartesian->polar coordinates conversion. - Either of output components (magnitude or angle) is optional */ -CVAPI(void) cvCartToPolar( const CvArr* x, const CvArr* y, - CvArr* magnitude, CvArr* angle CV_DEFAULT(NULL), - int angle_in_degrees CV_DEFAULT(0)); - -/* Does polar->cartesian coordinates conversion. - Either of output components (magnitude or angle) is optional. - If magnitude is missing it is assumed to be all 1's */ -CVAPI(void) cvPolarToCart( const CvArr* magnitude, const CvArr* angle, - CvArr* x, CvArr* y, - int angle_in_degrees CV_DEFAULT(0)); - -/* Does powering: dst(idx) = src(idx)^power */ -CVAPI(void) cvPow( const CvArr* src, CvArr* dst, double power ); - -/* Does exponention: dst(idx) = exp(src(idx)). - Overflow is not handled yet. Underflow is handled. - Maximal relative error is ~7e-6 for single-precision input */ -CVAPI(void) cvExp( const CvArr* src, CvArr* dst ); - -/* Calculates natural logarithms: dst(idx) = log(abs(src(idx))). - Logarithm of 0 gives large negative number(~-700) - Maximal relative error is ~3e-7 for single-precision output -*/ -CVAPI(void) cvLog( const CvArr* src, CvArr* dst ); - -/* Fast arctangent calculation */ -CVAPI(float) cvFastArctan( float y, float x ); - -/* Fast cubic root calculation */ -CVAPI(float) cvCbrt( float value ); - -/* Checks array values for NaNs, Infs or simply for too large numbers - (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set, - no runtime errors is raised (function returns zero value in case of "bad" values). - Otherwise cvError is called */ -#define CV_CHECK_RANGE 1 -#define CV_CHECK_QUIET 2 -CVAPI(int) cvCheckArr( const CvArr* arr, int flags CV_DEFAULT(0), - double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0)); -#define cvCheckArray cvCheckArr - -#define CV_RAND_UNI 0 -#define CV_RAND_NORMAL 1 -CVAPI(void) cvRandArr( CvRNG* rng, CvArr* arr, int dist_type, - CvScalar param1, CvScalar param2 ); - -CVAPI(void) cvRandShuffle( CvArr* mat, CvRNG* rng, - double iter_factor CV_DEFAULT(1.)); - -#define CV_SORT_EVERY_ROW 0 -#define CV_SORT_EVERY_COLUMN 1 -#define CV_SORT_ASCENDING 0 -#define CV_SORT_DESCENDING 16 - -CVAPI(void) cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL), - CvArr* idxmat CV_DEFAULT(NULL), - int flags CV_DEFAULT(0)); - -/* Finds real roots of a cubic equation */ -CVAPI(int) cvSolveCubic( const CvMat* coeffs, CvMat* roots ); - -/* Finds all real and complex roots of a polynomial equation */ -CVAPI(void) cvSolvePoly(const CvMat* coeffs, CvMat *roots2, - int maxiter CV_DEFAULT(20), int fig CV_DEFAULT(100)); - -/****************************************************************************************\ -* Matrix operations * -\****************************************************************************************/ - -/* Calculates cross product of two 3d vectors */ -CVAPI(void) cvCrossProduct( const CvArr* src1, const CvArr* src2, CvArr* dst ); - -/* Matrix transform: dst = A*B + C, C is optional */ -#define cvMatMulAdd( src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 ) -#define cvMatMul( src1, src2, dst ) cvMatMulAdd( (src1), (src2), NULL, (dst)) - -#define CV_GEMM_A_T 1 -#define CV_GEMM_B_T 2 -#define CV_GEMM_C_T 4 -/* Extended matrix transform: - dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */ -CVAPI(void) cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, - const CvArr* src3, double beta, CvArr* dst, - int tABC CV_DEFAULT(0)); -#define cvMatMulAddEx cvGEMM - -/* Transforms each element of source array and stores - resultant vectors in destination array */ -CVAPI(void) cvTransform( const CvArr* src, CvArr* dst, - const CvMat* transmat, - const CvMat* shiftvec CV_DEFAULT(NULL)); -#define cvMatMulAddS cvTransform - -/* Does perspective transform on every element of input array */ -CVAPI(void) cvPerspectiveTransform( const CvArr* src, CvArr* dst, - const CvMat* mat ); - -/* Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) (order=1) */ -CVAPI(void) cvMulTransposed( const CvArr* src, CvArr* dst, int order, - const CvArr* delta CV_DEFAULT(NULL), - double scale CV_DEFAULT(1.) ); - -/* Tranposes matrix. Square matrices can be transposed in-place */ -CVAPI(void) cvTranspose( const CvArr* src, CvArr* dst ); -#define cvT cvTranspose - -/* Completes the symmetric matrix from the lower (LtoR=0) or from the upper (LtoR!=0) part */ -CVAPI(void) cvCompleteSymm( CvMat* matrix, int LtoR CV_DEFAULT(0) ); - -/* Mirror array data around horizontal (flip=0), - vertical (flip=1) or both(flip=-1) axises: - cvFlip(src) flips images vertically and sequences horizontally (inplace) */ -CVAPI(void) cvFlip( const CvArr* src, CvArr* dst CV_DEFAULT(NULL), - int flip_mode CV_DEFAULT(0)); -#define cvMirror cvFlip - - -#define CV_SVD_MODIFY_A 1 -#define CV_SVD_U_T 2 -#define CV_SVD_V_T 4 - -/* Performs Singular Value Decomposition of a matrix */ -CVAPI(void) cvSVD( CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL), - CvArr* V CV_DEFAULT(NULL), int flags CV_DEFAULT(0)); - -/* Performs Singular Value Back Substitution (solves A*X = B): - flags must be the same as in cvSVD */ -CVAPI(void) cvSVBkSb( const CvArr* W, const CvArr* U, - const CvArr* V, const CvArr* B, - CvArr* X, int flags ); - -#define CV_LU 0 -#define CV_SVD 1 -#define CV_SVD_SYM 2 -#define CV_CHOLESKY 3 -#define CV_QR 4 -#define CV_NORMAL 16 - -/* Inverts matrix */ -CVAPI(double) cvInvert( const CvArr* src, CvArr* dst, - int method CV_DEFAULT(CV_LU)); -#define cvInv cvInvert - -/* Solves linear system (src1)*(dst) = (src2) - (returns 0 if src1 is a singular and CV_LU method is used) */ -CVAPI(int) cvSolve( const CvArr* src1, const CvArr* src2, CvArr* dst, - int method CV_DEFAULT(CV_LU)); - -/* Calculates determinant of input matrix */ -CVAPI(double) cvDet( const CvArr* mat ); - -/* Calculates trace of the matrix (sum of elements on the main diagonal) */ -CVAPI(CvScalar) cvTrace( const CvArr* mat ); - -/* Finds eigen values and vectors of a symmetric matrix */ -CVAPI(void) cvEigenVV( CvArr* mat, CvArr* evects, CvArr* evals, - double eps CV_DEFAULT(0), - int lowindex CV_DEFAULT(-1), - int highindex CV_DEFAULT(-1)); - -///* Finds selected eigen values and vectors of a symmetric matrix */ -//CVAPI(void) cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals, -// int lowindex, int highindex ); - -/* Makes an identity matrix (mat_ij = i == j) */ -CVAPI(void) cvSetIdentity( CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) ); - -/* Fills matrix with given range of numbers */ -CVAPI(CvArr*) cvRange( CvArr* mat, double start, double end ); - -/* Calculates covariation matrix for a set of vectors */ -/* transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] */ -#define CV_COVAR_SCRAMBLED 0 - -/* [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) */ -#define CV_COVAR_NORMAL 1 - -/* do not calc average (i.e. mean vector) - use the input vector instead - (useful for calculating covariance matrix by parts) */ -#define CV_COVAR_USE_AVG 2 - -/* scale the covariance matrix coefficients by number of the vectors */ -#define CV_COVAR_SCALE 4 - -/* all the input vectors are stored in a single matrix, as its rows */ -#define CV_COVAR_ROWS 8 - -/* all the input vectors are stored in a single matrix, as its columns */ -#define CV_COVAR_COLS 16 - -CVAPI(void) cvCalcCovarMatrix( const CvArr** vects, int count, - CvArr* cov_mat, CvArr* avg, int flags ); - -#define CV_PCA_DATA_AS_ROW 0 -#define CV_PCA_DATA_AS_COL 1 -#define CV_PCA_USE_AVG 2 -CVAPI(void) cvCalcPCA( const CvArr* data, CvArr* mean, - CvArr* eigenvals, CvArr* eigenvects, int flags ); - -CVAPI(void) cvProjectPCA( const CvArr* data, const CvArr* mean, - const CvArr* eigenvects, CvArr* result ); - -CVAPI(void) cvBackProjectPCA( const CvArr* proj, const CvArr* mean, - const CvArr* eigenvects, CvArr* result ); - -/* Calculates Mahalanobis(weighted) distance */ -CVAPI(double) cvMahalanobis( const CvArr* vec1, const CvArr* vec2, const CvArr* mat ); -#define cvMahalonobis cvMahalanobis - -/****************************************************************************************\ -* Array Statistics * -\****************************************************************************************/ - -/* Finds sum of array elements */ -CVAPI(CvScalar) cvSum( const CvArr* arr ); - -/* Calculates number of non-zero pixels */ -CVAPI(int) cvCountNonZero( const CvArr* arr ); - -/* Calculates mean value of array elements */ -CVAPI(CvScalar) cvAvg( const CvArr* arr, const CvArr* mask CV_DEFAULT(NULL) ); - -/* Calculates mean and standard deviation of pixel values */ -CVAPI(void) cvAvgSdv( const CvArr* arr, CvScalar* mean, CvScalar* std_dev, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Finds global minimum, maximum and their positions */ -CVAPI(void) cvMinMaxLoc( const CvArr* arr, double* min_val, double* max_val, - CvPoint* min_loc CV_DEFAULT(NULL), - CvPoint* max_loc CV_DEFAULT(NULL), - const CvArr* mask CV_DEFAULT(NULL) ); - -/* types of array norm */ -#define CV_C 1 -#define CV_L1 2 -#define CV_L2 4 -#define CV_NORM_MASK 7 -#define CV_RELATIVE 8 -#define CV_DIFF 16 -#define CV_MINMAX 32 - -#define CV_DIFF_C (CV_DIFF | CV_C) -#define CV_DIFF_L1 (CV_DIFF | CV_L1) -#define CV_DIFF_L2 (CV_DIFF | CV_L2) -#define CV_RELATIVE_C (CV_RELATIVE | CV_C) -#define CV_RELATIVE_L1 (CV_RELATIVE | CV_L1) -#define CV_RELATIVE_L2 (CV_RELATIVE | CV_L2) - -/* Finds norm, difference norm or relative difference norm for an array (or two arrays) */ -CVAPI(double) cvNorm( const CvArr* arr1, const CvArr* arr2 CV_DEFAULT(NULL), - int norm_type CV_DEFAULT(CV_L2), - const CvArr* mask CV_DEFAULT(NULL) ); - -CVAPI(void) cvNormalize( const CvArr* src, CvArr* dst, - double a CV_DEFAULT(1.), double b CV_DEFAULT(0.), - int norm_type CV_DEFAULT(CV_L2), - const CvArr* mask CV_DEFAULT(NULL) ); - - -#define CV_REDUCE_SUM 0 -#define CV_REDUCE_AVG 1 -#define CV_REDUCE_MAX 2 -#define CV_REDUCE_MIN 3 - -CVAPI(void) cvReduce( const CvArr* src, CvArr* dst, int dim CV_DEFAULT(-1), - int op CV_DEFAULT(CV_REDUCE_SUM) ); - -/****************************************************************************************\ -* Discrete Linear Transforms and Related Functions * -\****************************************************************************************/ - -#define CV_DXT_FORWARD 0 -#define CV_DXT_INVERSE 1 -#define CV_DXT_SCALE 2 /* divide result by size of array */ -#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE) -#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE -#define CV_DXT_ROWS 4 /* transform each row individually */ -#define CV_DXT_MUL_CONJ 8 /* conjugate the second argument of cvMulSpectrums */ - -/* Discrete Fourier Transform: - complex->complex, - real->ccs (forward), - ccs->real (inverse) */ -CVAPI(void) cvDFT( const CvArr* src, CvArr* dst, int flags, - int nonzero_rows CV_DEFAULT(0) ); -#define cvFFT cvDFT - -/* Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y)) */ -CVAPI(void) cvMulSpectrums( const CvArr* src1, const CvArr* src2, - CvArr* dst, int flags ); - -/* Finds optimal DFT vector size >= size0 */ -CVAPI(int) cvGetOptimalDFTSize( int size0 ); - -/* Discrete Cosine Transform */ -CVAPI(void) cvDCT( const CvArr* src, CvArr* dst, int flags ); - -/****************************************************************************************\ -* Dynamic data structures * -\****************************************************************************************/ - -/* Calculates length of sequence slice (with support of negative indices). */ -CVAPI(int) cvSliceLength( CvSlice slice, const CvSeq* seq ); - - -/* Creates new memory storage. - block_size == 0 means that default, - somewhat optimal size, is used (currently, it is 64K) */ -CVAPI(CvMemStorage*) cvCreateMemStorage( int block_size CV_DEFAULT(0)); - - -/* Creates a memory storage that will borrow memory blocks from parent storage */ -CVAPI(CvMemStorage*) cvCreateChildMemStorage( CvMemStorage* parent ); - - -/* Releases memory storage. All the children of a parent must be released before - the parent. A child storage returns all the blocks to parent when it is released */ -CVAPI(void) cvReleaseMemStorage( CvMemStorage** storage ); - - -/* Clears memory storage. This is the only way(!!!) (besides cvRestoreMemStoragePos) - to reuse memory allocated for the storage - cvClearSeq,cvClearSet ... - do not free any memory. - A child storage returns all the blocks to the parent when it is cleared */ -CVAPI(void) cvClearMemStorage( CvMemStorage* storage ); - -/* Remember a storage "free memory" position */ -CVAPI(void) cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* pos ); - -/* Restore a storage "free memory" position */ -CVAPI(void) cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos ); - -/* Allocates continuous buffer of the specified size in the storage */ -CVAPI(void*) cvMemStorageAlloc( CvMemStorage* storage, size_t size ); - -/* Allocates string in memory storage */ -CVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, - int len CV_DEFAULT(-1) ); - -/* Creates new empty sequence that will reside in the specified storage */ -CVAPI(CvSeq*) cvCreateSeq( int seq_flags, size_t header_size, - size_t elem_size, CvMemStorage* storage ); - -/* Changes default size (granularity) of sequence blocks. - The default size is ~1Kbyte */ -CVAPI(void) cvSetSeqBlockSize( CvSeq* seq, int delta_elems ); - - -/* Adds new element to the end of sequence. Returns pointer to the element */ -CVAPI(schar*) cvSeqPush( CvSeq* seq, const void* element CV_DEFAULT(NULL)); - - -/* Adds new element to the beginning of sequence. Returns pointer to it */ -CVAPI(schar*) cvSeqPushFront( CvSeq* seq, const void* element CV_DEFAULT(NULL)); - - -/* Removes the last element from sequence and optionally saves it */ -CVAPI(void) cvSeqPop( CvSeq* seq, void* element CV_DEFAULT(NULL)); - - -/* Removes the first element from sequence and optioanally saves it */ -CVAPI(void) cvSeqPopFront( CvSeq* seq, void* element CV_DEFAULT(NULL)); - - -#define CV_FRONT 1 -#define CV_BACK 0 -/* Adds several new elements to the end of sequence */ -CVAPI(void) cvSeqPushMulti( CvSeq* seq, const void* elements, - int count, int in_front CV_DEFAULT(0) ); - -/* Removes several elements from the end of sequence and optionally saves them */ -CVAPI(void) cvSeqPopMulti( CvSeq* seq, void* elements, - int count, int in_front CV_DEFAULT(0) ); - -/* Inserts a new element in the middle of sequence. - cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */ -CVAPI(schar*) cvSeqInsert( CvSeq* seq, int before_index, - const void* element CV_DEFAULT(NULL)); - -/* Removes specified sequence element */ -CVAPI(void) cvSeqRemove( CvSeq* seq, int index ); - - -/* Removes all the elements from the sequence. The freed memory - can be reused later only by the same sequence unless cvClearMemStorage - or cvRestoreMemStoragePos is called */ -CVAPI(void) cvClearSeq( CvSeq* seq ); - - -/* Retrieves pointer to specified sequence element. - Negative indices are supported and mean counting from the end - (e.g -1 means the last sequence element) */ -CVAPI(schar*) cvGetSeqElem( const CvSeq* seq, int index ); - -/* Calculates index of the specified sequence element. - Returns -1 if element does not belong to the sequence */ -CVAPI(int) cvSeqElemIdx( const CvSeq* seq, const void* element, - CvSeqBlock** block CV_DEFAULT(NULL) ); - -/* Initializes sequence writer. The new elements will be added to the end of sequence */ -CVAPI(void) cvStartAppendToSeq( CvSeq* seq, CvSeqWriter* writer ); - - -/* Combination of cvCreateSeq and cvStartAppendToSeq */ -CVAPI(void) cvStartWriteSeq( int seq_flags, int header_size, - int elem_size, CvMemStorage* storage, - CvSeqWriter* writer ); - -/* Closes sequence writer, updates sequence header and returns pointer - to the resultant sequence - (which may be useful if the sequence was created using cvStartWriteSeq)) -*/ -CVAPI(CvSeq*) cvEndWriteSeq( CvSeqWriter* writer ); - - -/* Updates sequence header. May be useful to get access to some of previously - written elements via cvGetSeqElem or sequence reader */ -CVAPI(void) cvFlushSeqWriter( CvSeqWriter* writer ); - - -/* Initializes sequence reader. - The sequence can be read in forward or backward direction */ -CVAPI(void) cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader, - int reverse CV_DEFAULT(0) ); - - -/* Returns current sequence reader position (currently observed sequence element) */ -CVAPI(int) cvGetSeqReaderPos( CvSeqReader* reader ); - - -/* Changes sequence reader position. It may seek to an absolute or - to relative to the current position */ -CVAPI(void) cvSetSeqReaderPos( CvSeqReader* reader, int index, - int is_relative CV_DEFAULT(0)); - -/* Copies sequence content to a continuous piece of memory */ -CVAPI(void*) cvCvtSeqToArray( const CvSeq* seq, void* elements, - CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) ); - -/* Creates sequence header for array. - After that all the operations on sequences that do not alter the content - can be applied to the resultant sequence */ -CVAPI(CvSeq*) cvMakeSeqHeaderForArray( int seq_type, int header_size, - int elem_size, void* elements, int total, - CvSeq* seq, CvSeqBlock* block ); - -/* Extracts sequence slice (with or without copying sequence elements) */ -CVAPI(CvSeq*) cvSeqSlice( const CvSeq* seq, CvSlice slice, - CvMemStorage* storage CV_DEFAULT(NULL), - int copy_data CV_DEFAULT(0)); - -CV_INLINE CvSeq* cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL)) -{ - return cvSeqSlice( seq, CV_WHOLE_SEQ, storage, 1 ); -} - -/* Removes sequence slice */ -CVAPI(void) cvSeqRemoveSlice( CvSeq* seq, CvSlice slice ); - -/* Inserts a sequence or array into another sequence */ -CVAPI(void) cvSeqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr ); - -/* a < b ? -1 : a > b ? 1 : 0 */ -typedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata ); - -/* Sorts sequence in-place given element comparison function */ -CVAPI(void) cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL) ); - -/* Finds element in a [sorted] sequence */ -CVAPI(schar*) cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func, - int is_sorted, int* elem_idx, - void* userdata CV_DEFAULT(NULL) ); - -/* Reverses order of sequence elements in-place */ -CVAPI(void) cvSeqInvert( CvSeq* seq ); - -/* Splits sequence into one or more equivalence classes using the specified criteria */ -CVAPI(int) cvSeqPartition( const CvSeq* seq, CvMemStorage* storage, - CvSeq** labels, CvCmpFunc is_equal, void* userdata ); - -/************ Internal sequence functions ************/ -CVAPI(void) cvChangeSeqBlock( void* reader, int direction ); -CVAPI(void) cvCreateSeqBlock( CvSeqWriter* writer ); - - -/* Creates a new set */ -CVAPI(CvSet*) cvCreateSet( int set_flags, int header_size, - int elem_size, CvMemStorage* storage ); - -/* Adds new element to the set and returns pointer to it */ -CVAPI(int) cvSetAdd( CvSet* set_header, CvSetElem* elem CV_DEFAULT(NULL), - CvSetElem** inserted_elem CV_DEFAULT(NULL) ); - -/* Fast variant of cvSetAdd */ -CV_INLINE CvSetElem* cvSetNew( CvSet* set_header ) -{ - CvSetElem* elem = set_header->free_elems; - if( elem ) - { - set_header->free_elems = elem->next_free; - elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK; - set_header->active_count++; - } - else - cvSetAdd( set_header, NULL, (CvSetElem**)&elem ); - return elem; -} - -/* Removes set element given its pointer */ -CV_INLINE void cvSetRemoveByPtr( CvSet* set_header, void* elem ) -{ - CvSetElem* _elem = (CvSetElem*)elem; - assert( _elem->flags >= 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/ ); - _elem->next_free = set_header->free_elems; - _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG; - set_header->free_elems = _elem; - set_header->active_count--; -} - -/* Removes element from the set by its index */ -CVAPI(void) cvSetRemove( CvSet* set_header, int index ); - -/* Returns a set element by index. If the element doesn't belong to the set, - NULL is returned */ -CV_INLINE CvSetElem* cvGetSetElem( const CvSet* set_header, int idx ) -{ - CvSetElem* elem = (CvSetElem*)(void *)cvGetSeqElem( (CvSeq*)set_header, idx ); - return elem && CV_IS_SET_ELEM( elem ) ? elem : 0; -} - -/* Removes all the elements from the set */ -CVAPI(void) cvClearSet( CvSet* set_header ); - -/* Creates new graph */ -CVAPI(CvGraph*) cvCreateGraph( int graph_flags, int header_size, - int vtx_size, int edge_size, - CvMemStorage* storage ); - -/* Adds new vertex to the graph */ -CVAPI(int) cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* vtx CV_DEFAULT(NULL), - CvGraphVtx** inserted_vtx CV_DEFAULT(NULL) ); - - -/* Removes vertex from the graph together with all incident edges */ -CVAPI(int) cvGraphRemoveVtx( CvGraph* graph, int index ); -CVAPI(int) cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx ); - - -/* Link two vertices specifed by indices or pointers if they - are not connected or return pointer to already existing edge - connecting the vertices. - Functions return 1 if a new edge was created, 0 otherwise */ -CVAPI(int) cvGraphAddEdge( CvGraph* graph, - int start_idx, int end_idx, - const CvGraphEdge* edge CV_DEFAULT(NULL), - CvGraphEdge** inserted_edge CV_DEFAULT(NULL) ); - -CVAPI(int) cvGraphAddEdgeByPtr( CvGraph* graph, - CvGraphVtx* start_vtx, CvGraphVtx* end_vtx, - const CvGraphEdge* edge CV_DEFAULT(NULL), - CvGraphEdge** inserted_edge CV_DEFAULT(NULL) ); - -/* Remove edge connecting two vertices */ -CVAPI(void) cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx ); -CVAPI(void) cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx, - CvGraphVtx* end_vtx ); - -/* Find edge connecting two vertices */ -CVAPI(CvGraphEdge*) cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx ); -CVAPI(CvGraphEdge*) cvFindGraphEdgeByPtr( const CvGraph* graph, - const CvGraphVtx* start_vtx, - const CvGraphVtx* end_vtx ); -#define cvGraphFindEdge cvFindGraphEdge -#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr - -/* Remove all vertices and edges from the graph */ -CVAPI(void) cvClearGraph( CvGraph* graph ); - - -/* Count number of edges incident to the vertex */ -CVAPI(int) cvGraphVtxDegree( const CvGraph* graph, int vtx_idx ); -CVAPI(int) cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vtx ); - - -/* Retrieves graph vertex by given index */ -#define cvGetGraphVtx( graph, idx ) (CvGraphVtx*)cvGetSetElem((CvSet*)(graph), (idx)) - -/* Retrieves index of a graph vertex given its pointer */ -#define cvGraphVtxIdx( graph, vtx ) ((vtx)->flags & CV_SET_ELEM_IDX_MASK) - -/* Retrieves index of a graph edge given its pointer */ -#define cvGraphEdgeIdx( graph, edge ) ((edge)->flags & CV_SET_ELEM_IDX_MASK) - -#define cvGraphGetVtxCount( graph ) ((graph)->active_count) -#define cvGraphGetEdgeCount( graph ) ((graph)->edges->active_count) - -#define CV_GRAPH_VERTEX 1 -#define CV_GRAPH_TREE_EDGE 2 -#define CV_GRAPH_BACK_EDGE 4 -#define CV_GRAPH_FORWARD_EDGE 8 -#define CV_GRAPH_CROSS_EDGE 16 -#define CV_GRAPH_ANY_EDGE 30 -#define CV_GRAPH_NEW_TREE 32 -#define CV_GRAPH_BACKTRACKING 64 -#define CV_GRAPH_OVER -1 - -#define CV_GRAPH_ALL_ITEMS -1 - -/* flags for graph vertices and edges */ -#define CV_GRAPH_ITEM_VISITED_FLAG (1 << 30) -#define CV_IS_GRAPH_VERTEX_VISITED(vtx) \ - (((CvGraphVtx*)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG) -#define CV_IS_GRAPH_EDGE_VISITED(edge) \ - (((CvGraphEdge*)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG) -#define CV_GRAPH_SEARCH_TREE_NODE_FLAG (1 << 29) -#define CV_GRAPH_FORWARD_EDGE_FLAG (1 << 28) - -typedef struct CvGraphScanner -{ - CvGraphVtx* vtx; /* current graph vertex (or current edge origin) */ - CvGraphVtx* dst; /* current graph edge destination vertex */ - CvGraphEdge* edge; /* current edge */ - - CvGraph* graph; /* the graph */ - CvSeq* stack; /* the graph vertex stack */ - int index; /* the lower bound of certainly visited vertices */ - int mask; /* event mask */ -} -CvGraphScanner; - -/* Creates new graph scanner. */ -CVAPI(CvGraphScanner*) cvCreateGraphScanner( CvGraph* graph, - CvGraphVtx* vtx CV_DEFAULT(NULL), - int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS)); - -/* Releases graph scanner. */ -CVAPI(void) cvReleaseGraphScanner( CvGraphScanner** scanner ); - -/* Get next graph element */ -CVAPI(int) cvNextGraphItem( CvGraphScanner* scanner ); - -/* Creates a copy of graph */ -CVAPI(CvGraph*) cvCloneGraph( const CvGraph* graph, CvMemStorage* storage ); - -/****************************************************************************************\ -* Drawing * -\****************************************************************************************/ - -/****************************************************************************************\ -* Drawing functions work with images/matrices of arbitrary type. * -* For color images the channel order is BGR[A] * -* Antialiasing is supported only for 8-bit image now. * -* All the functions include parameter color that means rgb value (that may be * -* constructed with CV_RGB macro) for color images and brightness * -* for grayscale images. * -* If a drawn figure is partially or completely outside of the image, it is clipped.* -\****************************************************************************************/ - -#define CV_RGB( r, g, b ) cvScalar( (b), (g), (r), 0 ) -#define CV_FILLED -1 - -#define CV_AA 16 - -/* Draws 4-connected, 8-connected or antialiased line segment connecting two points */ -CVAPI(void) cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, - CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); - -/* Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2), - if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn */ -CVAPI(void) cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, - CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), - int shift CV_DEFAULT(0)); - -/* Draws a rectangle specified by a CvRect structure */ -CVAPI(void) cvRectangleR( CvArr* img, CvRect r, - CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), - int shift CV_DEFAULT(0)); - - -/* Draws a circle with specified center and radius. - Thickness works in the same way as with cvRectangle */ -CVAPI(void) cvCircle( CvArr* img, CvPoint center, int radius, - CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); - -/* Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector, - depending on , and parameters. The resultant figure - is rotated by . All the angles are in degrees */ -CVAPI(void) cvEllipse( CvArr* img, CvPoint center, CvSize axes, - double angle, double start_angle, double end_angle, - CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); - -CV_INLINE void cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color, - int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ) -{ - CvSize axes; - axes.width = cvRound(box.size.width*0.5); - axes.height = cvRound(box.size.height*0.5); - - cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle, - 0, 360, color, thickness, line_type, shift ); -} - -/* Fills convex or monotonous polygon. */ -CVAPI(void) cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color, - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)); - -/* Fills an area bounded by one or more arbitrary polygons */ -CVAPI(void) cvFillPoly( CvArr* img, CvPoint** pts, const int* npts, - int contours, CvScalar color, - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); - -/* Draws one or more polygonal curves */ -CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours, - int is_closed, CvScalar color, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) ); - -#define cvDrawRect cvRectangle -#define cvDrawLine cvLine -#define cvDrawCircle cvCircle -#define cvDrawEllipse cvEllipse -#define cvDrawPolyLine cvPolyLine - -/* Clips the line segment connecting *pt1 and *pt2 - by the rectangular window - (0<=xptr will point - to pt1 (or pt2, see left_to_right description) location in the image. - Returns the number of pixels on the line between the ending points. */ -CVAPI(int) cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, - CvLineIterator* line_iterator, - int connectivity CV_DEFAULT(8), - int left_to_right CV_DEFAULT(0)); - -/* Moves iterator to the next line point */ -#define CV_NEXT_LINE_POINT( line_iterator ) \ -{ \ - int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \ - (line_iterator).err += (line_iterator).minus_delta + \ - ((line_iterator).plus_delta & _line_iterator_mask); \ - (line_iterator).ptr += (line_iterator).minus_step + \ - ((line_iterator).plus_step & _line_iterator_mask); \ -} - - -/* basic font types */ -#define CV_FONT_HERSHEY_SIMPLEX 0 -#define CV_FONT_HERSHEY_PLAIN 1 -#define CV_FONT_HERSHEY_DUPLEX 2 -#define CV_FONT_HERSHEY_COMPLEX 3 -#define CV_FONT_HERSHEY_TRIPLEX 4 -#define CV_FONT_HERSHEY_COMPLEX_SMALL 5 -#define CV_FONT_HERSHEY_SCRIPT_SIMPLEX 6 -#define CV_FONT_HERSHEY_SCRIPT_COMPLEX 7 - -/* font flags */ -#define CV_FONT_ITALIC 16 - -#define CV_FONT_VECTOR0 CV_FONT_HERSHEY_SIMPLEX - - -/* Font structure */ -typedef struct CvFont -{ - const char* nameFont; //Qt:nameFont - CvScalar color; //Qt:ColorFont -> cvScalar(blue_component, green_component, red\_component[, alpha_component]) - int font_face; //Qt: bool italic /* =CV_FONT_* */ - const int* ascii; /* font data and metrics */ - const int* greek; - const int* cyrillic; - float hscale, vscale; - float shear; /* slope coefficient: 0 - normal, >0 - italic */ - int thickness; //Qt: weight /* letters thickness */ - float dx; /* horizontal interval between letters */ - int line_type; //Qt: PointSize -} -CvFont; - -/* Initializes font structure used further in cvPutText */ -CVAPI(void) cvInitFont( CvFont* font, int font_face, - double hscale, double vscale, - double shear CV_DEFAULT(0), - int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8)); - -CV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) ) -{ - CvFont font; - cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA ); - return font; -} - -/* Renders text stroke with specified font and color at specified location. - CvFont should be initialized with cvInitFont */ -CVAPI(void) cvPutText( CvArr* img, const char* text, CvPoint org, - const CvFont* font, CvScalar color ); - -/* Calculates bounding box of text stroke (useful for alignment) */ -CVAPI(void) cvGetTextSize( const char* text_string, const CvFont* font, - CvSize* text_size, int* baseline ); - - - -/* Unpacks color value, if arrtype is CV_8UC?, is treated as - packed color value, otherwise the first channels (depending on arrtype) - of destination scalar are set to the same value = */ -CVAPI(CvScalar) cvColorToScalar( double packed_color, int arrtype ); - -/* Returns the polygon points which make up the given ellipse. The ellipse is define by - the box of size 'axes' rotated 'angle' around the 'center'. A partial sweep - of the ellipse arc can be done by spcifying arc_start and arc_end to be something - other than 0 and 360, respectively. The input array 'pts' must be large enough to - hold the result. The total number of points stored into 'pts' is returned by this - function. */ -CVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes, - int angle, int arc_start, int arc_end, CvPoint * pts, int delta ); - -/* Draws contour outlines or filled interiors on the image */ -CVAPI(void) cvDrawContours( CvArr *img, CvSeq* contour, - CvScalar external_color, CvScalar hole_color, - int max_level, int thickness CV_DEFAULT(1), - int line_type CV_DEFAULT(8), - CvPoint offset CV_DEFAULT(cvPoint(0,0))); - -/* Does look-up transformation. Elements of the source array - (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table */ -CVAPI(void) cvLUT( const CvArr* src, CvArr* dst, const CvArr* lut ); - - -/******************* Iteration through the sequence tree *****************/ -typedef struct CvTreeNodeIterator -{ - const void* node; - int level; - int max_level; -} -CvTreeNodeIterator; - -CVAPI(void) cvInitTreeNodeIterator( CvTreeNodeIterator* tree_iterator, - const void* first, int max_level ); -CVAPI(void*) cvNextTreeNode( CvTreeNodeIterator* tree_iterator ); -CVAPI(void*) cvPrevTreeNode( CvTreeNodeIterator* tree_iterator ); - -/* Inserts sequence into tree with specified "parent" sequence. - If parent is equal to frame (e.g. the most external contour), - then added contour will have null pointer to parent. */ -CVAPI(void) cvInsertNodeIntoTree( void* node, void* parent, void* frame ); - -/* Removes contour from tree (together with the contour children). */ -CVAPI(void) cvRemoveNodeFromTree( void* node, void* frame ); - -/* Gathers pointers to all the sequences, - accessible from the , to the single sequence */ -CVAPI(CvSeq*) cvTreeToNodeSeq( const void* first, int header_size, - CvMemStorage* storage ); - -/* The function implements the K-means algorithm for clustering an array of sample - vectors in a specified number of classes */ -#define CV_KMEANS_USE_INITIAL_LABELS 1 -CVAPI(int) cvKMeans2( const CvArr* samples, int cluster_count, CvArr* labels, - CvTermCriteria termcrit, int attempts CV_DEFAULT(1), - CvRNG* rng CV_DEFAULT(0), int flags CV_DEFAULT(0), - CvArr* _centers CV_DEFAULT(0), double* compactness CV_DEFAULT(0) ); - -/****************************************************************************************\ -* System functions * -\****************************************************************************************/ - -/* Add the function pointers table with associated information to the IPP primitives list */ -CVAPI(int) cvRegisterModule( const CvModuleInfo* module_info ); - -/* Loads optimized functions from IPP, MKL etc. or switches back to pure C code */ -CVAPI(int) cvUseOptimized( int on_off ); - -/* Retrieves information about the registered modules and loaded optimized plugins */ -CVAPI(void) cvGetModuleInfo( const char* module_name, - const char** version, - const char** loaded_addon_plugins ); - -typedef void* (CV_CDECL *CvAllocFunc)(size_t size, void* userdata); -typedef int (CV_CDECL *CvFreeFunc)(void* pptr, void* userdata); - -/* Set user-defined memory managment functions (substitutors for malloc and free) that - will be called by cvAlloc, cvFree and higher-level functions (e.g. cvCreateImage) */ -CVAPI(void) cvSetMemoryManager( CvAllocFunc alloc_func CV_DEFAULT(NULL), - CvFreeFunc free_func CV_DEFAULT(NULL), - void* userdata CV_DEFAULT(NULL)); - - -typedef IplImage* (CV_STDCALL* Cv_iplCreateImageHeader) - (int,int,int,char*,char*,int,int,int,int,int, - IplROI*,IplImage*,void*,IplTileInfo*); -typedef void (CV_STDCALL* Cv_iplAllocateImageData)(IplImage*,int,int); -typedef void (CV_STDCALL* Cv_iplDeallocate)(IplImage*,int); -typedef IplROI* (CV_STDCALL* Cv_iplCreateROI)(int,int,int,int,int); -typedef IplImage* (CV_STDCALL* Cv_iplCloneImage)(const IplImage*); - -/* Makes OpenCV use IPL functions for IplImage allocation/deallocation */ -CVAPI(void) cvSetIPLAllocators( Cv_iplCreateImageHeader create_header, - Cv_iplAllocateImageData allocate_data, - Cv_iplDeallocate deallocate, - Cv_iplCreateROI create_roi, - Cv_iplCloneImage clone_image ); - -#define CV_TURN_ON_IPL_COMPATIBILITY() \ - cvSetIPLAllocators( iplCreateImageHeader, iplAllocateImage, \ - iplDeallocate, iplCreateROI, iplCloneImage ) - -/****************************************************************************************\ -* Data Persistence * -\****************************************************************************************/ - -/********************************** High-level functions ********************************/ - -/* opens existing or creates new file storage */ -CVAPI(CvFileStorage*) cvOpenFileStorage( const char* filename, CvMemStorage* memstorage, - int flags, const char* encoding CV_DEFAULT(NULL) ); - -/* closes file storage and deallocates buffers */ -CVAPI(void) cvReleaseFileStorage( CvFileStorage** fs ); - -/* returns attribute value or 0 (NULL) if there is no such attribute */ -CVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name ); - -/* starts writing compound structure (map or sequence) */ -CVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name, - int struct_flags, const char* type_name CV_DEFAULT(NULL), - CvAttrList attributes CV_DEFAULT(cvAttrList())); - -/* finishes writing compound structure */ -CVAPI(void) cvEndWriteStruct( CvFileStorage* fs ); - -/* writes an integer */ -CVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value ); - -/* writes a floating-point number */ -CVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value ); - -/* writes a string */ -CVAPI(void) cvWriteString( CvFileStorage* fs, const char* name, - const char* str, int quote CV_DEFAULT(0) ); - -/* writes a comment */ -CVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment, - int eol_comment ); - -/* writes instance of a standard type (matrix, image, sequence, graph etc.) - or user-defined type */ -CVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr, - CvAttrList attributes CV_DEFAULT(cvAttrList())); - -/* starts the next stream */ -CVAPI(void) cvStartNextStream( CvFileStorage* fs ); - -/* helper function: writes multiple integer or floating-point numbers */ -CVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src, - int len, const char* dt ); - -/* returns the hash entry corresponding to the specified literal key string or 0 - if there is no such a key in the storage */ -CVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name, - int len CV_DEFAULT(-1), - int create_missing CV_DEFAULT(0)); - -/* returns file node with the specified key within the specified map - (collection of named nodes) */ -CVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs, - int stream_index CV_DEFAULT(0) ); - -/* returns file node with the specified key within the specified map - (collection of named nodes) */ -CVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map, - const CvStringHashNode* key, - int create_missing CV_DEFAULT(0) ); - -/* this is a slower version of cvGetFileNode that takes the key as a literal string */ -CVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs, - const CvFileNode* map, - const char* name ); - -CV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) ) -{ - return !node ? default_value : - CV_NODE_IS_INT(node->tag) ? node->data.i : - CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff; -} - - -CV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map, - const char* name, int default_value CV_DEFAULT(0) ) -{ - return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value ); -} - - -CV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) ) -{ - return !node ? default_value : - CV_NODE_IS_INT(node->tag) ? (double)node->data.i : - CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300; -} - - -CV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map, - const char* name, double default_value CV_DEFAULT(0.) ) -{ - return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value ); -} - - -CV_INLINE const char* cvReadString( const CvFileNode* node, - const char* default_value CV_DEFAULT(NULL) ) -{ - return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0; -} - - -CV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map, - const char* name, const char* default_value CV_DEFAULT(NULL) ) -{ - return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value ); -} - - -/* decodes standard or user-defined object and returns it */ -CVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node, - CvAttrList* attributes CV_DEFAULT(NULL)); - -/* decodes standard or user-defined object and returns it */ -CV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map, - const char* name, CvAttrList* attributes CV_DEFAULT(NULL) ) -{ - return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes ); -} - - -/* starts reading data from sequence or scalar numeric node */ -CVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src, - CvSeqReader* reader ); - -/* reads multiple numbers and stores them to array */ -CVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, - int count, void* dst, const char* dt ); - -/* combination of two previous functions for easier reading of whole sequences */ -CVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src, - void* dst, const char* dt ); - -/* writes a copy of file node to file storage */ -CVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name, - const CvFileNode* node, int embed ); - -/* returns name of file node */ -CVAPI(const char*) cvGetFileNodeName( const CvFileNode* node ); - -/*********************************** Adding own types ***********************************/ - -CVAPI(void) cvRegisterType( const CvTypeInfo* info ); -CVAPI(void) cvUnregisterType( const char* type_name ); -CVAPI(CvTypeInfo*) cvFirstType(void); -CVAPI(CvTypeInfo*) cvFindType( const char* type_name ); -CVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr ); - -/* universal functions */ -CVAPI(void) cvRelease( void** struct_ptr ); -CVAPI(void*) cvClone( const void* struct_ptr ); - -/* simple API for reading/writing data */ -CVAPI(void) cvSave( const char* filename, const void* struct_ptr, - const char* name CV_DEFAULT(NULL), - const char* comment CV_DEFAULT(NULL), - CvAttrList attributes CV_DEFAULT(cvAttrList())); -CVAPI(void*) cvLoad( const char* filename, - CvMemStorage* memstorage CV_DEFAULT(NULL), - const char* name CV_DEFAULT(NULL), - const char** real_name CV_DEFAULT(NULL) ); - -/*********************************** Measuring Execution Time ***************************/ - -/* helper functions for RNG initialization and accurate time measurement: - uses internal clock counter on x86 */ -CVAPI(int64) cvGetTickCount( void ); -CVAPI(double) cvGetTickFrequency( void ); - -/*********************************** CPU capabilities ***********************************/ - -#define CV_CPU_NONE 0 -#define CV_CPU_MMX 1 -#define CV_CPU_SSE 2 -#define CV_CPU_SSE2 3 -#define CV_CPU_SSE3 4 -#define CV_CPU_SSSE3 5 -#define CV_CPU_SSE4_1 6 -#define CV_CPU_SSE4_2 7 -#define CV_CPU_POPCNT 8 -#define CV_CPU_AVX 10 -#define CV_HARDWARE_MAX_FEATURE 255 - -CVAPI(int) cvCheckHardwareSupport(int feature); - -/*********************************** Multi-Threading ************************************/ - -/* retrieve/set the number of threads used in OpenMP implementations */ -CVAPI(int) cvGetNumThreads( void ); -CVAPI(void) cvSetNumThreads( int threads CV_DEFAULT(0) ); -/* get index of the thread being executed */ -CVAPI(int) cvGetThreadNum( void ); - - -/********************************** Error Handling **************************************/ - -/* Get current OpenCV error status */ -CVAPI(int) cvGetErrStatus( void ); - -/* Sets error status silently */ -CVAPI(void) cvSetErrStatus( int status ); - -#define CV_ErrModeLeaf 0 /* Print error and exit program */ -#define CV_ErrModeParent 1 /* Print error and continue */ -#define CV_ErrModeSilent 2 /* Don't print and continue */ - -/* Retrives current error processing mode */ -CVAPI(int) cvGetErrMode( void ); - -/* Sets error processing mode, returns previously used mode */ -CVAPI(int) cvSetErrMode( int mode ); - -/* Sets error status and performs some additonal actions (displaying message box, - writing message to stderr, terminating application etc.) - depending on the current error mode */ -CVAPI(void) cvError( int status, const char* func_name, - const char* err_msg, const char* file_name, int line ); - -/* Retrieves textual description of the error given its code */ -CVAPI(const char*) cvErrorStr( int status ); - -/* Retrieves detailed information about the last error occured */ -CVAPI(int) cvGetErrInfo( const char** errcode_desc, const char** description, - const char** filename, int* line ); - -/* Maps IPP error codes to the counterparts from OpenCV */ -CVAPI(int) cvErrorFromIppStatus( int ipp_status ); - -typedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name, - const char* err_msg, const char* file_name, int line, void* userdata ); - -/* Assigns a new error-handling function */ -CVAPI(CvErrorCallback) cvRedirectError( CvErrorCallback error_handler, - void* userdata CV_DEFAULT(NULL), - void** prev_userdata CV_DEFAULT(NULL) ); - -/* - Output to: - cvNulDevReport - nothing - cvStdErrReport - console(fprintf(stderr,...)) - cvGuiBoxReport - MessageBox(WIN32) - */ -CVAPI(int) cvNulDevReport( int status, const char* func_name, const char* err_msg, - const char* file_name, int line, void* userdata ); - -CVAPI(int) cvStdErrReport( int status, const char* func_name, const char* err_msg, - const char* file_name, int line, void* userdata ); - -CVAPI(int) cvGuiBoxReport( int status, const char* func_name, const char* err_msg, - const char* file_name, int line, void* userdata ); - -#define OPENCV_ERROR(status,func,context) \ -cvError((status),(func),(context),__FILE__,__LINE__) - -#define OPENCV_ERRCHK(func,context) \ -{if (cvGetErrStatus() >= 0) \ -{OPENCV_ERROR(CV_StsBackTrace,(func),(context));}} - -#define OPENCV_ASSERT(expr,func,context) \ -{if (! (expr)) \ -{OPENCV_ERROR(CV_StsInternal,(func),(context));}} - -#define OPENCV_RSTERR() (cvSetErrStatus(CV_StsOk)) - -#define OPENCV_CALL( Func ) \ -{ \ -Func; \ -} - - -/* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */ -#ifdef CV_NO_FUNC_NAMES -#define CV_FUNCNAME( Name ) -#define cvFuncName "" -#else -#define CV_FUNCNAME( Name ) \ -static char cvFuncName[] = Name -#endif - - -/* - CV_ERROR macro unconditionally raises error with passed code and message. - After raising error, control will be transferred to the exit label. - */ -#define CV_ERROR( Code, Msg ) \ -{ \ - cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ ); \ - __CV_EXIT__; \ -} - -/* Simplified form of CV_ERROR */ -#define CV_ERROR_FROM_CODE( code ) \ - CV_ERROR( code, "" ) - -/* - CV_CHECK macro checks error status after CV (or IPL) - function call. If error detected, control will be transferred to the exit - label. - */ -#define CV_CHECK() \ -{ \ - if( cvGetErrStatus() < 0 ) \ - CV_ERROR( CV_StsBackTrace, "Inner function failed." ); \ -} - - -/* - CV_CALL macro calls CV (or IPL) function, checks error status and - signals a error if the function failed. Useful in "parent node" - error procesing mode - */ -#define CV_CALL( Func ) \ -{ \ - Func; \ - CV_CHECK(); \ -} - - -/* Runtime assertion macro */ -#define CV_ASSERT( Condition ) \ -{ \ - if( !(Condition) ) \ - CV_ERROR( CV_StsInternal, "Assertion: " #Condition " failed" ); \ -} - -#define __CV_BEGIN__ { -#define __CV_END__ goto exit; exit: ; } -#define __CV_EXIT__ goto exit - -#ifdef __cplusplus -} - -// classes for automatic module/RTTI data registration/unregistration -struct CV_EXPORTS CvModule -{ - CvModule( CvModuleInfo* _info ); - ~CvModule(); - CvModuleInfo* info; - - static CvModuleInfo* first; - static CvModuleInfo* last; -}; - -struct CV_EXPORTS CvType -{ - CvType( const char* type_name, - CvIsInstanceFunc is_instance, CvReleaseFunc release=0, - CvReadFunc read=0, CvWriteFunc write=0, CvCloneFunc clone=0 ); - ~CvType(); - CvTypeInfo* info; - - static CvTypeInfo* first; - static CvTypeInfo* last; -}; - -#endif - -#endif diff --git a/modules/core/include/opencv2/core/cuda_devptrs.hpp b/modules/core/include/opencv2/core/cuda_devptrs.hpp deleted file mode 100644 index 1534045..0000000 --- a/modules/core/include/opencv2/core/cuda_devptrs.hpp +++ /dev/null @@ -1,199 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_DEVPTRS_HPP__ -#define __OPENCV_CORE_DEVPTRS_HPP__ - -#ifdef __cplusplus - -#ifdef __CUDACC__ - #define __CV_GPU_HOST_DEVICE__ __host__ __device__ __forceinline__ -#else - #define __CV_GPU_HOST_DEVICE__ -#endif - -namespace cv -{ - namespace gpu - { - // Simple lightweight structures that encapsulates information about an image on device. - // It is intended to pass to nvcc-compiled code. GpuMat depends on headers that nvcc can't compile - - template struct StaticAssert; - template <> struct StaticAssert {static __CV_GPU_HOST_DEVICE__ void check(){}}; - - template struct DevPtr - { - typedef T elem_type; - typedef int index_type; - - enum { elem_size = sizeof(elem_type) }; - - T* data; - - __CV_GPU_HOST_DEVICE__ DevPtr() : data(0) {} - __CV_GPU_HOST_DEVICE__ DevPtr(T* data_) : data(data_) {} - - __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; } - __CV_GPU_HOST_DEVICE__ operator T*() { return data; } - __CV_GPU_HOST_DEVICE__ operator const T*() const { return data; } - }; - - template struct PtrSz : public DevPtr - { - __CV_GPU_HOST_DEVICE__ PtrSz() : size(0) {} - __CV_GPU_HOST_DEVICE__ PtrSz(T* data_, size_t size_) : DevPtr(data_), size(size_) {} - - size_t size; - }; - - template struct PtrStep : public DevPtr - { - __CV_GPU_HOST_DEVICE__ PtrStep() : step(0) {} - __CV_GPU_HOST_DEVICE__ PtrStep(T* data_, size_t step_) : DevPtr(data_), step(step_) {} - - /** \brief stride between two consecutive rows in bytes. Step is stored always and everywhere in bytes!!! */ - size_t step; - - __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return ( T*)( ( char*)DevPtr::data + y * step); } - __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)DevPtr::data + y * step); } - - __CV_GPU_HOST_DEVICE__ T& operator ()(int y, int x) { return ptr(y)[x]; } - __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; } - }; - - template struct PtrStepSz : public PtrStep - { - __CV_GPU_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {} - __CV_GPU_HOST_DEVICE__ PtrStepSz(int rows_, int cols_, T* data_, size_t step_) - : PtrStep(data_, step_), cols(cols_), rows(rows_) {} - - template - explicit PtrStepSz(const PtrStepSz& d) : PtrStep((T*)d.data, d.step), cols(d.cols), rows(d.rows){} - - int cols; - int rows; - }; - - typedef PtrStepSz PtrStepSzb; - typedef PtrStepSz PtrStepSzf; - typedef PtrStepSz PtrStepSzi; - - typedef PtrStep PtrStepb; - typedef PtrStep PtrStepf; - typedef PtrStep PtrStepi; - - -#if defined __GNUC__ - #define __CV_GPU_DEPR_BEFORE__ - #define __CV_GPU_DEPR_AFTER__ __attribute__ ((deprecated)) -#elif defined(__MSVC__) //|| defined(__CUDACC__) - #pragma deprecated(DevMem2D_) - #define __CV_GPU_DEPR_BEFORE__ __declspec(deprecated) - #define __CV_GPU_DEPR_AFTER__ -#else - #define __CV_GPU_DEPR_BEFORE__ - #define __CV_GPU_DEPR_AFTER__ -#endif - - template struct __CV_GPU_DEPR_BEFORE__ DevMem2D_ : public PtrStepSz - { - DevMem2D_() {} - DevMem2D_(int rows_, int cols_, T* data_, size_t step_) : PtrStepSz(rows_, cols_, data_, step_) {} - - template - explicit __CV_GPU_DEPR_BEFORE__ DevMem2D_(const DevMem2D_& d) : PtrStepSz(d.rows, d.cols, (T*)d.data, d.step) {} - } __CV_GPU_DEPR_AFTER__ ; - - typedef DevMem2D_ DevMem2Db; - typedef DevMem2Db DevMem2D; - typedef DevMem2D_ DevMem2Df; - typedef DevMem2D_ DevMem2Di; - - template struct PtrElemStep_ : public PtrStep - { - PtrElemStep_(const DevMem2D_& mem) : PtrStep(mem.data, mem.step) - { - StaticAssert<256 % sizeof(T) == 0>::check(); - - PtrStep::step /= PtrStep::elem_size; - } - __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return PtrStep::data + y * PtrStep::step; } - __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return PtrStep::data + y * PtrStep::step; } - - __CV_GPU_HOST_DEVICE__ T& operator ()(int y, int x) { return ptr(y)[x]; } - __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; } - }; - - template struct PtrStep_ : public PtrStep - { - PtrStep_() {} - PtrStep_(const DevMem2D_& mem) : PtrStep(mem.data, mem.step) {} - }; - - typedef PtrElemStep_ PtrElemStep; - typedef PtrElemStep_ PtrElemStepf; - typedef PtrElemStep_ PtrElemStepi; - -//#undef __CV_GPU_DEPR_BEFORE__ -//#undef __CV_GPU_DEPR_AFTER__ - - namespace device - { - using cv::gpu::PtrSz; - using cv::gpu::PtrStep; - using cv::gpu::PtrStepSz; - - using cv::gpu::PtrStepSzb; - using cv::gpu::PtrStepSzf; - using cv::gpu::PtrStepSzi; - - using cv::gpu::PtrStepb; - using cv::gpu::PtrStepf; - using cv::gpu::PtrStepi; - } - } -} - -#endif // __cplusplus - -#endif /* __OPENCV_CORE_DEVPTRS_HPP__ */ diff --git a/modules/core/include/opencv2/core/devmem2d.hpp b/modules/core/include/opencv2/core/devmem2d.hpp deleted file mode 100644 index 18dfcd8..0000000 --- a/modules/core/include/opencv2/core/devmem2d.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "opencv2/core/cuda_devptrs.hpp" diff --git a/modules/core/include/opencv2/core/eigen.hpp b/modules/core/include/opencv2/core/eigen.hpp deleted file mode 100644 index a7b237f..0000000 --- a/modules/core/include/opencv2/core/eigen.hpp +++ /dev/null @@ -1,280 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_EIGEN_HPP__ -#define __OPENCV_CORE_EIGEN_HPP__ - -#ifdef __cplusplus - -#include "opencv2/core/core_c.h" -#include "opencv2/core/core.hpp" - -#if defined _MSC_VER && _MSC_VER >= 1200 -#pragma warning( disable: 4714 ) //__forceinline is not inlined -#pragma warning( disable: 4127 ) //conditional expression is constant -#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data -#endif - -namespace cv -{ - -template -void eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst ) -{ - if( !(src.Flags & Eigen::RowMajorBit) ) - { - Mat _src(src.cols(), src.rows(), DataType<_Tp>::type, - (void*)src.data(), src.stride()*sizeof(_Tp)); - transpose(_src, dst); - } - else - { - Mat _src(src.rows(), src.cols(), DataType<_Tp>::type, - (void*)src.data(), src.stride()*sizeof(_Tp)); - _src.copyTo(dst); - } -} - -template -void cv2eigen( const Mat& src, - Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst ) -{ - CV_DbgAssert(src.rows == _rows && src.cols == _cols); - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(src.cols, src.rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - if( src.type() == _dst.type() ) - transpose(src, _dst); - else if( src.cols == src.rows ) - { - src.convertTo(_dst, _dst.type()); - transpose(_dst, _dst); - } - else - Mat(src.t()).convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(src.rows, src.cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - src.convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -// Matx case -template -void cv2eigen( const Matx<_Tp, _rows, _cols>& src, - Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst ) -{ - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(_cols, _rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - transpose(src, _dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(_rows, _cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - Mat(src).copyTo(_dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -template -void cv2eigen( const Mat& src, - Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst ) -{ - dst.resize(src.rows, src.cols); - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(src.cols, src.rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - if( src.type() == _dst.type() ) - transpose(src, _dst); - else if( src.cols == src.rows ) - { - src.convertTo(_dst, _dst.type()); - transpose(_dst, _dst); - } - else - Mat(src.t()).convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(src.rows, src.cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - src.convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -// Matx case -template -void cv2eigen( const Matx<_Tp, _rows, _cols>& src, - Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst ) -{ - dst.resize(_rows, _cols); - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(_cols, _rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - transpose(src, _dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(_rows, _cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - Mat(src).copyTo(_dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -template -void cv2eigen( const Mat& src, - Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst ) -{ - CV_Assert(src.cols == 1); - dst.resize(src.rows); - - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(src.cols, src.rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - if( src.type() == _dst.type() ) - transpose(src, _dst); - else - Mat(src.t()).convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(src.rows, src.cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - src.convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -// Matx case -template -void cv2eigen( const Matx<_Tp, _rows, 1>& src, - Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst ) -{ - dst.resize(_rows); - - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(1, _rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - transpose(src, _dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(_rows, 1, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - src.copyTo(_dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - - -template -void cv2eigen( const Mat& src, - Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst ) -{ - CV_Assert(src.rows == 1); - dst.resize(src.cols); - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(src.cols, src.rows, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - if( src.type() == _dst.type() ) - transpose(src, _dst); - else - Mat(src.t()).convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(src.rows, src.cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - src.convertTo(_dst, _dst.type()); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - -//Matx -template -void cv2eigen( const Matx<_Tp, 1, _cols>& src, - Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst ) -{ - dst.resize(_cols); - if( !(dst.Flags & Eigen::RowMajorBit) ) - { - Mat _dst(_cols, 1, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - transpose(src, _dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } - else - { - Mat _dst(1, _cols, DataType<_Tp>::type, - dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); - Mat(src).copyTo(_dst); - CV_DbgAssert(_dst.data == (uchar*)dst.data()); - } -} - - -} - -#endif - -#endif diff --git a/modules/core/include/opencv2/core/gpumat.hpp b/modules/core/include/opencv2/core/gpumat.hpp deleted file mode 100644 index 193c9aa..0000000 --- a/modules/core/include/opencv2/core/gpumat.hpp +++ /dev/null @@ -1,562 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_GPUMAT_HPP__ -#define __OPENCV_GPUMAT_HPP__ - -#ifdef __cplusplus - -#include "opencv2/core/core.hpp" -#include "opencv2/core/cuda_devptrs.hpp" - -namespace cv { namespace gpu -{ - //////////////////////////////// Initialization & Info //////////////////////// - - //! This is the only function that do not throw exceptions if the library is compiled without Cuda. - CV_EXPORTS int getCudaEnabledDeviceCount(); - - //! Functions below throw cv::Expception if the library is compiled without Cuda. - - CV_EXPORTS void setDevice(int device); - CV_EXPORTS int getDevice(); - - //! Explicitly destroys and cleans up all resources associated with the current device in the current process. - //! Any subsequent API call to this device will reinitialize the device. - CV_EXPORTS void resetDevice(); - - enum FeatureSet - { - FEATURE_SET_COMPUTE_10 = 10, - FEATURE_SET_COMPUTE_11 = 11, - FEATURE_SET_COMPUTE_12 = 12, - FEATURE_SET_COMPUTE_13 = 13, - FEATURE_SET_COMPUTE_20 = 20, - FEATURE_SET_COMPUTE_21 = 21, - FEATURE_SET_COMPUTE_30 = 30, - FEATURE_SET_COMPUTE_35 = 35, - - GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11, - SHARED_ATOMICS = FEATURE_SET_COMPUTE_12, - NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13, - WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30, - DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35 - }; - - // Checks whether current device supports the given feature - CV_EXPORTS bool deviceSupports(FeatureSet feature_set); - - // Gives information about what GPU archs this OpenCV GPU module was - // compiled for - class CV_EXPORTS TargetArchs - { - public: - static bool builtWith(FeatureSet feature_set); - static bool has(int major, int minor); - static bool hasPtx(int major, int minor); - static bool hasBin(int major, int minor); - static bool hasEqualOrLessPtx(int major, int minor); - static bool hasEqualOrGreater(int major, int minor); - static bool hasEqualOrGreaterPtx(int major, int minor); - static bool hasEqualOrGreaterBin(int major, int minor); - private: - TargetArchs(); - }; - - // Gives information about the given GPU - class CV_EXPORTS DeviceInfo - { - public: - // Creates DeviceInfo object for the current GPU - DeviceInfo() : device_id_(getDevice()) { query(); } - - // Creates DeviceInfo object for the given GPU - DeviceInfo(int device_id) : device_id_(device_id) { query(); } - - std::string name() const { return name_; } - - // Return compute capability versions - int majorVersion() const { return majorVersion_; } - int minorVersion() const { return minorVersion_; } - - int multiProcessorCount() const { return multi_processor_count_; } - - size_t sharedMemPerBlock() const; - - void queryMemory(size_t& totalMemory, size_t& freeMemory) const; - size_t freeMemory() const; - size_t totalMemory() const; - - // Checks whether device supports the given feature - bool supports(FeatureSet feature_set) const; - - // Checks whether the GPU module can be run on the given device - bool isCompatible() const; - - int deviceID() const { return device_id_; } - - private: - void query(); - - int device_id_; - - std::string name_; - int multi_processor_count_; - int majorVersion_; - int minorVersion_; - }; - - CV_EXPORTS void printCudaDeviceInfo(int device); - CV_EXPORTS void printShortCudaDeviceInfo(int device); - - //////////////////////////////// GpuMat /////////////////////////////// - - //! Smart pointer for GPU memory with reference counting. Its interface is mostly similar with cv::Mat. - class CV_EXPORTS GpuMat - { - public: - //! default constructor - GpuMat(); - - //! constructs GpuMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.) - GpuMat(int rows, int cols, int type); - GpuMat(Size size, int type); - - //! constucts GpuMatrix and fills it with the specified value _s. - GpuMat(int rows, int cols, int type, Scalar s); - GpuMat(Size size, int type, Scalar s); - - //! copy constructor - GpuMat(const GpuMat& m); - - //! constructor for GpuMatrix headers pointing to user-allocated data - GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP); - GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP); - - //! creates a matrix header for a part of the bigger matrix - GpuMat(const GpuMat& m, Range rowRange, Range colRange); - GpuMat(const GpuMat& m, Rect roi); - - //! builds GpuMat from Mat. Perfom blocking upload to device. - explicit GpuMat(const Mat& m); - - //! destructor - calls release() - ~GpuMat(); - - //! assignment operators - GpuMat& operator = (const GpuMat& m); - - //! pefroms blocking upload data to GpuMat. - void upload(const Mat& m); - - //! downloads data from device to host memory. Blocking calls. - void download(Mat& m) const; - - //! returns a new GpuMatrix header for the specified row - GpuMat row(int y) const; - //! returns a new GpuMatrix header for the specified column - GpuMat col(int x) const; - //! ... for the specified row span - GpuMat rowRange(int startrow, int endrow) const; - GpuMat rowRange(Range r) const; - //! ... for the specified column span - GpuMat colRange(int startcol, int endcol) const; - GpuMat colRange(Range r) const; - - //! returns deep copy of the GpuMatrix, i.e. the data is copied - GpuMat clone() const; - //! copies the GpuMatrix content to "m". - // It calls m.create(this->size(), this->type()). - void copyTo(GpuMat& m) const; - //! copies those GpuMatrix elements to "m" that are marked with non-zero mask elements. - void copyTo(GpuMat& m, const GpuMat& mask) const; - //! converts GpuMatrix to another datatype with optional scalng. See cvConvertScale. - void convertTo(GpuMat& m, int rtype, double alpha = 1, double beta = 0) const; - - void assignTo(GpuMat& m, int type=-1) const; - - //! sets every GpuMatrix element to s - GpuMat& operator = (Scalar s); - //! sets some of the GpuMatrix elements to s, according to the mask - GpuMat& setTo(Scalar s, const GpuMat& mask = GpuMat()); - //! creates alternative GpuMatrix header for the same data, with different - // number of channels and/or different number of rows. see cvReshape. - GpuMat reshape(int cn, int rows = 0) const; - - //! allocates new GpuMatrix data unless the GpuMatrix already has specified size and type. - // previous data is unreferenced if needed. - void create(int rows, int cols, int type); - void create(Size size, int type); - //! decreases reference counter; - // deallocate the data when reference counter reaches 0. - void release(); - - //! swaps with other smart pointer - void swap(GpuMat& mat); - - //! locates GpuMatrix header within a parent GpuMatrix. See below - void locateROI(Size& wholeSize, Point& ofs) const; - //! moves/resizes the current GpuMatrix ROI inside the parent GpuMatrix. - GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright); - //! extracts a rectangular sub-GpuMatrix - // (this is a generalized form of row, rowRange etc.) - GpuMat operator()(Range rowRange, Range colRange) const; - GpuMat operator()(Rect roi) const; - - //! returns true iff the GpuMatrix data is continuous - // (i.e. when there are no gaps between successive rows). - // similar to CV_IS_GpuMat_CONT(cvGpuMat->type) - bool isContinuous() const; - //! returns element size in bytes, - // similar to CV_ELEM_SIZE(cvMat->type) - size_t elemSize() const; - //! returns the size of element channel in bytes. - size_t elemSize1() const; - //! returns element type, similar to CV_MAT_TYPE(cvMat->type) - int type() const; - //! returns element type, similar to CV_MAT_DEPTH(cvMat->type) - int depth() const; - //! returns element type, similar to CV_MAT_CN(cvMat->type) - int channels() const; - //! returns step/elemSize1() - size_t step1() const; - //! returns GpuMatrix size: - // width == number of columns, height == number of rows - Size size() const; - //! returns true if GpuMatrix data is NULL - bool empty() const; - - //! returns pointer to y-th row - uchar* ptr(int y = 0); - const uchar* ptr(int y = 0) const; - - //! template version of the above method - template _Tp* ptr(int y = 0); - template const _Tp* ptr(int y = 0) const; - - template operator PtrStepSz<_Tp>() const; - template operator PtrStep<_Tp>() const; - - // Deprecated function - __CV_GPU_DEPR_BEFORE__ template operator DevMem2D_<_Tp>() const __CV_GPU_DEPR_AFTER__; - __CV_GPU_DEPR_BEFORE__ template operator PtrStep_<_Tp>() const __CV_GPU_DEPR_AFTER__; - #undef __CV_GPU_DEPR_BEFORE__ - #undef __CV_GPU_DEPR_AFTER__ - - /*! includes several bit-fields: - - the magic signature - - continuity flag - - depth - - number of channels - */ - int flags; - - //! the number of rows and columns - int rows, cols; - - //! a distance between successive rows in bytes; includes the gap if any - size_t step; - - //! pointer to the data - uchar* data; - - //! pointer to the reference counter; - // when GpuMatrix points to user-allocated data, the pointer is NULL - int* refcount; - - //! helper fields used in locateROI and adjustROI - uchar* datastart; - uchar* dataend; - }; - - //! Creates continuous GPU matrix - CV_EXPORTS void createContinuous(int rows, int cols, int type, GpuMat& m); - CV_EXPORTS GpuMat createContinuous(int rows, int cols, int type); - CV_EXPORTS void createContinuous(Size size, int type, GpuMat& m); - CV_EXPORTS GpuMat createContinuous(Size size, int type); - - //! Ensures that size of the given matrix is not less than (rows, cols) size - //! and matrix type is match specified one too - CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m); - CV_EXPORTS void ensureSizeIsEnough(Size size, int type, GpuMat& m); - - CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat &mat); - - //////////////////////////////////////////////////////////////////////// - // Error handling - - CV_EXPORTS void error(const char* error_string, const char* file, const int line, const char* func = ""); - - //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// - - inline GpuMat::GpuMat() - : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) - { - } - - inline GpuMat::GpuMat(int rows_, int cols_, int type_) - : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) - { - if (rows_ > 0 && cols_ > 0) - create(rows_, cols_, type_); - } - - inline GpuMat::GpuMat(Size size_, int type_) - : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) - { - if (size_.height > 0 && size_.width > 0) - create(size_.height, size_.width, type_); - } - - inline GpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_) - : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) - { - if (rows_ > 0 && cols_ > 0) - { - create(rows_, cols_, type_); - setTo(s_); - } - } - - inline GpuMat::GpuMat(Size size_, int type_, Scalar s_) - : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) - { - if (size_.height > 0 && size_.width > 0) - { - create(size_.height, size_.width, type_); - setTo(s_); - } - } - - inline GpuMat::~GpuMat() - { - release(); - } - - inline GpuMat GpuMat::clone() const - { - GpuMat m; - copyTo(m); - return m; - } - - inline void GpuMat::assignTo(GpuMat& m, int _type) const - { - if (_type < 0) - m = *this; - else - convertTo(m, _type); - } - - inline size_t GpuMat::step1() const - { - return step / elemSize1(); - } - - inline bool GpuMat::empty() const - { - return data == 0; - } - - template inline _Tp* GpuMat::ptr(int y) - { - return (_Tp*)ptr(y); - } - - template inline const _Tp* GpuMat::ptr(int y) const - { - return (const _Tp*)ptr(y); - } - - inline void swap(GpuMat& a, GpuMat& b) - { - a.swap(b); - } - - inline GpuMat GpuMat::row(int y) const - { - return GpuMat(*this, Range(y, y+1), Range::all()); - } - - inline GpuMat GpuMat::col(int x) const - { - return GpuMat(*this, Range::all(), Range(x, x+1)); - } - - inline GpuMat GpuMat::rowRange(int startrow, int endrow) const - { - return GpuMat(*this, Range(startrow, endrow), Range::all()); - } - - inline GpuMat GpuMat::rowRange(Range r) const - { - return GpuMat(*this, r, Range::all()); - } - - inline GpuMat GpuMat::colRange(int startcol, int endcol) const - { - return GpuMat(*this, Range::all(), Range(startcol, endcol)); - } - - inline GpuMat GpuMat::colRange(Range r) const - { - return GpuMat(*this, Range::all(), r); - } - - inline void GpuMat::create(Size size_, int type_) - { - create(size_.height, size_.width, type_); - } - - inline GpuMat GpuMat::operator()(Range _rowRange, Range _colRange) const - { - return GpuMat(*this, _rowRange, _colRange); - } - - inline GpuMat GpuMat::operator()(Rect roi) const - { - return GpuMat(*this, roi); - } - - inline bool GpuMat::isContinuous() const - { - return (flags & Mat::CONTINUOUS_FLAG) != 0; - } - - inline size_t GpuMat::elemSize() const - { - return CV_ELEM_SIZE(flags); - } - - inline size_t GpuMat::elemSize1() const - { - return CV_ELEM_SIZE1(flags); - } - - inline int GpuMat::type() const - { - return CV_MAT_TYPE(flags); - } - - inline int GpuMat::depth() const - { - return CV_MAT_DEPTH(flags); - } - - inline int GpuMat::channels() const - { - return CV_MAT_CN(flags); - } - - inline Size GpuMat::size() const - { - return Size(cols, rows); - } - - inline uchar* GpuMat::ptr(int y) - { - CV_DbgAssert((unsigned)y < (unsigned)rows); - return data + step * y; - } - - inline const uchar* GpuMat::ptr(int y) const - { - CV_DbgAssert((unsigned)y < (unsigned)rows); - return data + step * y; - } - - inline GpuMat& GpuMat::operator = (Scalar s) - { - setTo(s); - return *this; - } - - template inline GpuMat::operator PtrStepSz() const - { - return PtrStepSz(rows, cols, (T*)data, step); - } - - template inline GpuMat::operator PtrStep() const - { - return PtrStep((T*)data, step); - } - - template inline GpuMat::operator DevMem2D_() const - { - return DevMem2D_(rows, cols, (T*)data, step); - } - - template inline GpuMat::operator PtrStep_() const - { - return PtrStep_(static_cast< DevMem2D_ >(*this)); - } - - inline GpuMat createContinuous(int rows, int cols, int type) - { - GpuMat m; - createContinuous(rows, cols, type, m); - return m; - } - - inline void createContinuous(Size size, int type, GpuMat& m) - { - createContinuous(size.height, size.width, type, m); - } - - inline GpuMat createContinuous(Size size, int type) - { - GpuMat m; - createContinuous(size, type, m); - return m; - } - - inline void ensureSizeIsEnough(Size size, int type, GpuMat& m) - { - ensureSizeIsEnough(size.height, size.width, type, m); - } -}} - -#endif // __cplusplus - -#endif // __OPENCV_GPUMAT_HPP__ diff --git a/modules/core/include/opencv2/core/internal.hpp b/modules/core/include/opencv2/core/internal.hpp deleted file mode 100644 index 3cd2f90..0000000 --- a/modules/core/include/opencv2/core/internal.hpp +++ /dev/null @@ -1,781 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* The header is for internal use and it is likely to change. - It contains some macro definitions that are used in cxcore, cv, cvaux - and, probably, other libraries. If you need some of this functionality, - the safe way is to copy it into your code and rename the macros. -*/ -#ifndef __OPENCV_CORE_INTERNAL_HPP__ -#define __OPENCV_CORE_INTERNAL_HPP__ - -#include - -#include "opencv2/core/core.hpp" -#include "opencv2/core/types_c.h" - -#if defined WIN32 || defined _WIN32 -# ifndef WIN32 -# define WIN32 -# endif -# ifndef _WIN32 -# define _WIN32 -# endif -#endif - -#if !defined WIN32 && !defined WINCE -# include -#endif - -#ifdef __BORLANDC__ -# ifndef WIN32 -# define WIN32 -# endif -# ifndef _WIN32 -# define _WIN32 -# endif -# define CV_DLL -# undef _CV_ALWAYS_PROFILE_ -# define _CV_ALWAYS_NO_PROFILE_ -#endif - -#ifndef FALSE -# define FALSE 0 -#endif -#ifndef TRUE -# define TRUE 1 -#endif - -#define __BEGIN__ __CV_BEGIN__ -#define __END__ __CV_END__ -#define EXIT __CV_EXIT__ - -#ifdef HAVE_IPP -# include "ipp.h" - -CV_INLINE IppiSize ippiSize(int width, int height) -{ - IppiSize size = { width, height }; - return size; -} -#endif - -#ifndef IPPI_CALL -# define IPPI_CALL(func) CV_Assert((func) >= 0) -#endif - -#if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2) -# include "emmintrin.h" -# define CV_SSE 1 -# define CV_SSE2 1 -# if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) -# include "pmmintrin.h" -# define CV_SSE3 1 -# endif -# if defined __SSSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) -# include "tmmintrin.h" -# define CV_SSSE3 1 -# endif -# if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500) -# include -# define CV_SSE4_1 1 -# endif -# if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500) -# include -# define CV_SSE4_2 1 -# endif -# if defined __AVX__ || (defined _MSC_FULL_VER && _MSC_FULL_VER >= 160040219) -// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX -// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32 -# include -# define CV_AVX 1 -# if defined(_XCR_XFEATURE_ENABLED_MASK) -# define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK) -# else -# define __xgetbv() 0 -# endif -# endif -#endif - - -#if (defined WIN32 || defined _WIN32) && defined(_M_ARM) -# include -# include "arm_neon.h" -# define CV_NEON 1 -# define CPU_HAS_NEON_FEATURE (true) -#elif defined(__ARM_NEON__) -# include -# define CV_NEON 1 -# define CPU_HAS_NEON_FEATURE (true) -#endif - -#ifndef CV_SSE -# define CV_SSE 0 -#endif -#ifndef CV_SSE2 -# define CV_SSE2 0 -#endif -#ifndef CV_SSE3 -# define CV_SSE3 0 -#endif -#ifndef CV_SSSE3 -# define CV_SSSE3 0 -#endif -#ifndef CV_SSE4_1 -# define CV_SSE4_1 0 -#endif -#ifndef CV_SSE4_2 -# define CV_SSE4_2 0 -#endif -#ifndef CV_AVX -# define CV_AVX 0 -#endif -#ifndef CV_NEON -# define CV_NEON 0 -#endif - -#ifdef HAVE_TBB -# include "tbb/tbb_stddef.h" -# if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202 -# include "tbb/tbb.h" -# include "tbb/task.h" -# undef min -# undef max -# else -# undef HAVE_TBB -# endif -#endif - -#ifdef HAVE_EIGEN -# if defined __GNUC__ && defined __APPLE__ -# pragma GCC diagnostic ignored "-Wshadow" -# endif -# include -# include "opencv2/core/eigen.hpp" -#endif - -#ifdef __cplusplus - -namespace cv -{ -#ifdef HAVE_TBB - - typedef tbb::blocked_range BlockedRange; - - template static inline - void parallel_for( const BlockedRange& range, const Body& body ) - { - tbb::parallel_for(range, body); - } - - template static inline - void parallel_do( Iterator first, Iterator last, const Body& body ) - { - tbb::parallel_do(first, last, body); - } - - typedef tbb::split Split; - - template static inline - void parallel_reduce( const BlockedRange& range, Body& body ) - { - tbb::parallel_reduce(range, body); - } - - typedef tbb::concurrent_vector ConcurrentRectVector; - typedef tbb::concurrent_vector ConcurrentDoubleVector; -#else - class BlockedRange - { - public: - BlockedRange() : _begin(0), _end(0), _grainsize(0) {} - BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {} - int begin() const { return _begin; } - int end() const { return _end; } - int grainsize() const { return _grainsize; } - - protected: - int _begin, _end, _grainsize; - }; - - template static inline - void parallel_for( const BlockedRange& range, const Body& body ) - { - body(range); - } - typedef std::vector ConcurrentRectVector; - typedef std::vector ConcurrentDoubleVector; - - template static inline - void parallel_do( Iterator first, Iterator last, const Body& body ) - { - for( ; first != last; ++first ) - body(*first); - } - - class Split {}; - - template static inline - void parallel_reduce( const BlockedRange& range, Body& body ) - { - body(range); - } -#endif - - // Returns a static string if there is a parallel framework, - // NULL otherwise. - CV_EXPORTS const char* currentParallelFramework(); -} //namespace cv - -#define CV_INIT_ALGORITHM(classname, algname, memberinit) \ - static ::cv::Algorithm* create##classname() \ - { \ - return new classname; \ - } \ - \ - static ::cv::AlgorithmInfo& classname##_info() \ - { \ - static ::cv::AlgorithmInfo classname##_info_var(algname, create##classname); \ - return classname##_info_var; \ - } \ - \ - static ::cv::AlgorithmInfo& classname##_info_auto = classname##_info(); \ - \ - ::cv::AlgorithmInfo* classname::info() const \ - { \ - static volatile bool initialized = false; \ - \ - if( !initialized ) \ - { \ - initialized = true; \ - classname obj; \ - memberinit; \ - } \ - return &classname##_info(); \ - } - -#endif //__cplusplus - -/* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */ -#define CV_MAX_INLINE_MAT_OP_SIZE 10 - -/* maximal linear size of matrix to allocate it on stack. */ -#define CV_MAX_LOCAL_MAT_SIZE 32 - -/* maximal size of local memory storage */ -#define CV_MAX_LOCAL_SIZE \ - (CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double)) - -/* default image row align (in bytes) */ -#define CV_DEFAULT_IMAGE_ROW_ALIGN 4 - -/* matrices are continuous by default */ -#define CV_DEFAULT_MAT_ROW_ALIGN 1 - -/* maximum size of dynamic memory buffer. - cvAlloc reports an error if a larger block is requested. */ -#define CV_MAX_ALLOC_SIZE (((size_t)1 << (sizeof(size_t)*8-2))) - -/* the alignment of all the allocated buffers */ -#define CV_MALLOC_ALIGN 16 - -/* default alignment for dynamic data strucutures, resided in storages. */ -#define CV_STRUCT_ALIGN ((int)sizeof(double)) - -/* default storage block size */ -#define CV_STORAGE_BLOCK_SIZE ((1<<16) - 128) - -/* default memory block for sparse array elements */ -#define CV_SPARSE_MAT_BLOCK (1<<12) - -/* initial hash table size */ -#define CV_SPARSE_HASH_SIZE0 (1<<10) - -/* maximal average node_count/hash_size ratio beyond which hash table is resized */ -#define CV_SPARSE_HASH_RATIO 3 - -/* max length of strings */ -#define CV_MAX_STRLEN 1024 - -#if 0 /*def CV_CHECK_FOR_NANS*/ -# define CV_CHECK_NANS( arr ) cvCheckArray((arr)) -#else -# define CV_CHECK_NANS( arr ) -#endif - -/****************************************************************************************\ -* Common declarations * -\****************************************************************************************/ - -#ifdef __GNUC__ -# define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x))) -#elif defined _MSC_VER -# define CV_DECL_ALIGNED(x) __declspec(align(x)) -#else -# define CV_DECL_ALIGNED(x) -#endif - -#ifndef CV_IMPL -# define CV_IMPL CV_EXTERN_C -#endif - -#define CV_DBG_BREAK() { volatile int* crashMe = 0; *crashMe = 0; } - -/* default step, set in case of continuous data - to work around checks for valid step in some ipp functions */ -#define CV_STUB_STEP (1 << 30) - -#define CV_SIZEOF_FLOAT ((int)sizeof(float)) -#define CV_SIZEOF_SHORT ((int)sizeof(short)) - -#define CV_ORIGIN_TL 0 -#define CV_ORIGIN_BL 1 - -/* IEEE754 constants and macros */ -#define CV_POS_INF 0x7f800000 -#define CV_NEG_INF 0x807fffff /* CV_TOGGLE_FLT(0xff800000) */ -#define CV_1F 0x3f800000 -#define CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0)) -#define CV_TOGGLE_DBL(x) \ - ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0)) - -#define CV_NOP(a) (a) -#define CV_ADD(a, b) ((a) + (b)) -#define CV_SUB(a, b) ((a) - (b)) -#define CV_MUL(a, b) ((a) * (b)) -#define CV_AND(a, b) ((a) & (b)) -#define CV_OR(a, b) ((a) | (b)) -#define CV_XOR(a, b) ((a) ^ (b)) -#define CV_ANDN(a, b) (~(a) & (b)) -#define CV_ORN(a, b) (~(a) | (b)) -#define CV_SQR(a) ((a) * (a)) - -#define CV_LT(a, b) ((a) < (b)) -#define CV_LE(a, b) ((a) <= (b)) -#define CV_EQ(a, b) ((a) == (b)) -#define CV_NE(a, b) ((a) != (b)) -#define CV_GT(a, b) ((a) > (b)) -#define CV_GE(a, b) ((a) >= (b)) - -#define CV_NONZERO(a) ((a) != 0) -#define CV_NONZERO_FLT(a) (((a)+(a)) != 0) - -/* general-purpose saturation macros */ -#define CV_CAST_8U(t) (uchar)(!((t) & ~255) ? (t) : (t) > 0 ? 255 : 0) -#define CV_CAST_8S(t) (schar)(!(((t)+128) & ~255) ? (t) : (t) > 0 ? 127 : -128) -#define CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) > 0 ? 65535 : 0) -#define CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) > 0 ? 32767 : -32768) -#define CV_CAST_32S(t) (int)(t) -#define CV_CAST_64S(t) (int64)(t) -#define CV_CAST_32F(t) (float)(t) -#define CV_CAST_64F(t) (double)(t) - -#define CV_PASTE2(a,b) a##b -#define CV_PASTE(a,b) CV_PASTE2(a,b) - -#define CV_EMPTY -#define CV_MAKE_STR(a) #a - -#define CV_ZERO_OBJ(x) memset((x), 0, sizeof(*(x))) - -#define CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0]))) - -#define cvUnsupportedFormat "Unsupported format" - -CV_INLINE void* cvAlignPtr( const void* ptr, int align CV_DEFAULT(32) ) -{ - assert( (align & (align-1)) == 0 ); - return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) ); -} - -CV_INLINE int cvAlign( int size, int align ) -{ - assert( (align & (align-1)) == 0 && size < INT_MAX ); - return (size + align - 1) & -align; -} - -CV_INLINE CvSize cvGetMatSize( const CvMat* mat ) -{ - CvSize size; - size.width = mat->cols; - size.height = mat->rows; - return size; -} - -#define CV_DESCALE(x,n) (((x) + (1 << ((n)-1))) >> (n)) -#define CV_FLT_TO_FIX(x,n) cvRound((x)*(1<<(n))) - -/****************************************************************************************\ - - Generic implementation of QuickSort algorithm. - ---------------------------------------------- - Using this macro user can declare customized sort function that can be much faster - than built-in qsort function because of lower overhead on elements - comparison and exchange. The macro takes less_than (or LT) argument - a macro or function - that takes 2 arguments returns non-zero if the first argument should be before the second - one in the sorted sequence and zero otherwise. - - Example: - - Suppose that the task is to sort points by ascending of y coordinates and if - y's are equal x's should ascend. - - The code is: - ------------------------------------------------------------------------------ - #define cmp_pts( pt1, pt2 ) \ - ((pt1).y < (pt2).y || ((pt1).y < (pt2).y && (pt1).x < (pt2).x)) - - [static] CV_IMPLEMENT_QSORT( icvSortPoints, CvPoint, cmp_pts ) - ------------------------------------------------------------------------------ - - After that the function "void icvSortPoints( CvPoint* array, size_t total, int aux );" - is available to user. - - aux is an additional parameter, which can be used when comparing elements. - The current implementation was derived from *BSD system qsort(): - - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (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 CV_IMPLEMENT_QSORT_EX( func_name, T, LT, user_data_type ) \ -void func_name( T *array, size_t total, user_data_type aux ) \ -{ \ - int isort_thresh = 7; \ - T t; \ - int sp = 0; \ - \ - struct \ - { \ - T *lb; \ - T *ub; \ - } \ - stack[48]; \ - \ - aux = aux; \ - \ - if( total <= 1 ) \ - return; \ - \ - stack[0].lb = array; \ - stack[0].ub = array + (total - 1); \ - \ - while( sp >= 0 ) \ - { \ - T* left = stack[sp].lb; \ - T* right = stack[sp--].ub; \ - \ - for(;;) \ - { \ - int i, n = (int)(right - left) + 1, m; \ - T* ptr; \ - T* ptr2; \ - \ - if( n <= isort_thresh ) \ - { \ - insert_sort: \ - for( ptr = left + 1; ptr <= right; ptr++ ) \ - { \ - for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--) \ - CV_SWAP( ptr2[0], ptr2[-1], t ); \ - } \ - break; \ - } \ - else \ - { \ - T* left0; \ - T* left1; \ - T* right0; \ - T* right1; \ - T* pivot; \ - T* a; \ - T* b; \ - T* c; \ - int swap_cnt = 0; \ - \ - left0 = left; \ - right0 = right; \ - pivot = left + (n/2); \ - \ - if( n > 40 ) \ - { \ - int d = n / 8; \ - a = left, b = left + d, c = left + 2*d; \ - left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ - \ - a = pivot - d, b = pivot, c = pivot + d; \ - pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ - \ - a = right - 2*d, b = right - d, c = right; \ - right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ - } \ - \ - a = left, b = pivot, c = right; \ - pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) \ - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); \ - if( pivot != left0 ) \ - { \ - CV_SWAP( *pivot, *left0, t ); \ - pivot = left0; \ - } \ - left = left1 = left0 + 1; \ - right = right1 = right0; \ - \ - for(;;) \ - { \ - while( left <= right && !LT(*pivot, *left) ) \ - { \ - if( !LT(*left, *pivot) ) \ - { \ - if( left > left1 ) \ - CV_SWAP( *left1, *left, t ); \ - swap_cnt = 1; \ - left1++; \ - } \ - left++; \ - } \ - \ - while( left <= right && !LT(*right, *pivot) ) \ - { \ - if( !LT(*pivot, *right) ) \ - { \ - if( right < right1 ) \ - CV_SWAP( *right1, *right, t ); \ - swap_cnt = 1; \ - right1--; \ - } \ - right--; \ - } \ - \ - if( left > right ) \ - break; \ - CV_SWAP( *left, *right, t ); \ - swap_cnt = 1; \ - left++; \ - right--; \ - } \ - \ - if( swap_cnt == 0 ) \ - { \ - left = left0, right = right0; \ - goto insert_sort; \ - } \ - \ - n = MIN( (int)(left1 - left0), (int)(left - left1) ); \ - for( i = 0; i < n; i++ ) \ - CV_SWAP( left0[i], left[i-n], t ); \ - \ - n = MIN( (int)(right0 - right1), (int)(right1 - right) ); \ - for( i = 0; i < n; i++ ) \ - CV_SWAP( left[i], right0[i-n+1], t ); \ - n = (int)(left - left1); \ - m = (int)(right1 - right); \ - if( n > 1 ) \ - { \ - if( m > 1 ) \ - { \ - if( n > m ) \ - { \ - stack[++sp].lb = left0; \ - stack[sp].ub = left0 + n - 1; \ - left = right0 - m + 1, right = right0; \ - } \ - else \ - { \ - stack[++sp].lb = right0 - m + 1; \ - stack[sp].ub = right0; \ - left = left0, right = left0 + n - 1; \ - } \ - } \ - else \ - left = left0, right = left0 + n - 1; \ - } \ - else if( m > 1 ) \ - left = right0 - m + 1, right = right0; \ - else \ - break; \ - } \ - } \ - } \ -} - -#define CV_IMPLEMENT_QSORT( func_name, T, cmp ) \ - CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int ) - -/****************************************************************************************\ -* Structures and macros for integration with IPP * -\****************************************************************************************/ - -/* IPP-compatible return codes */ -typedef enum CvStatus -{ - CV_BADMEMBLOCK_ERR = -113, - CV_INPLACE_NOT_SUPPORTED_ERR= -112, - CV_UNMATCHED_ROI_ERR = -111, - CV_NOTFOUND_ERR = -110, - CV_BADCONVERGENCE_ERR = -109, - - CV_BADDEPTH_ERR = -107, - CV_BADROI_ERR = -106, - CV_BADHEADER_ERR = -105, - CV_UNMATCHED_FORMATS_ERR = -104, - CV_UNSUPPORTED_COI_ERR = -103, - CV_UNSUPPORTED_CHANNELS_ERR = -102, - CV_UNSUPPORTED_DEPTH_ERR = -101, - CV_UNSUPPORTED_FORMAT_ERR = -100, - - CV_BADARG_ERR = -49, //ipp comp - CV_NOTDEFINED_ERR = -48, //ipp comp - - CV_BADCHANNELS_ERR = -47, //ipp comp - CV_BADRANGE_ERR = -44, //ipp comp - CV_BADSTEP_ERR = -29, //ipp comp - - CV_BADFLAG_ERR = -12, - CV_DIV_BY_ZERO_ERR = -11, //ipp comp - CV_BADCOEF_ERR = -10, - - CV_BADFACTOR_ERR = -7, - CV_BADPOINT_ERR = -6, - CV_BADSCALE_ERR = -4, - CV_OUTOFMEM_ERR = -3, - CV_NULLPTR_ERR = -2, - CV_BADSIZE_ERR = -1, - CV_NO_ERR = 0, - CV_OK = CV_NO_ERR -} -CvStatus; - -#define CV_NOTHROW throw() - -typedef struct CvFuncTable -{ - void* fn_2d[CV_DEPTH_MAX]; -} -CvFuncTable; - -typedef struct CvBigFuncTable -{ - void* fn_2d[CV_DEPTH_MAX*4]; -} CvBigFuncTable; - -#define CV_INIT_FUNC_TAB( tab, FUNCNAME, FLAG ) \ - (tab).fn_2d[CV_8U] = (void*)FUNCNAME##_8u##FLAG; \ - (tab).fn_2d[CV_8S] = 0; \ - (tab).fn_2d[CV_16U] = (void*)FUNCNAME##_16u##FLAG; \ - (tab).fn_2d[CV_16S] = (void*)FUNCNAME##_16s##FLAG; \ - (tab).fn_2d[CV_32S] = (void*)FUNCNAME##_32s##FLAG; \ - (tab).fn_2d[CV_32F] = (void*)FUNCNAME##_32f##FLAG; \ - (tab).fn_2d[CV_64F] = (void*)FUNCNAME##_64f##FLAG - -#ifdef __cplusplus - -// < Deprecated - -class CV_EXPORTS CvOpenGlFuncTab -{ -public: - virtual ~CvOpenGlFuncTab(); - - virtual void genBuffers(int n, unsigned int* buffers) const = 0; - virtual void deleteBuffers(int n, const unsigned int* buffers) const = 0; - - virtual void bufferData(unsigned int target, ptrdiff_t size, const void* data, unsigned int usage) const = 0; - virtual void bufferSubData(unsigned int target, ptrdiff_t offset, ptrdiff_t size, const void* data) const = 0; - - virtual void bindBuffer(unsigned int target, unsigned int buffer) const = 0; - - virtual void* mapBuffer(unsigned int target, unsigned int access) const = 0; - virtual void unmapBuffer(unsigned int target) const = 0; - - virtual void generateBitmapFont(const std::string& family, int height, int weight, bool italic, bool underline, int start, int count, int base) const = 0; - - virtual bool isGlContextInitialized() const = 0; -}; - -CV_EXPORTS void icvSetOpenGlFuncTab(const CvOpenGlFuncTab* tab); - -CV_EXPORTS bool icvCheckGlError(const char* file, const int line, const char* func = ""); - -// > - -namespace cv { namespace ogl { -CV_EXPORTS bool checkError(const char* file, const int line, const char* func = ""); -}} - -#define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, CV_Func)) ) - -#endif //__cplusplus - -#endif // __OPENCV_CORE_INTERNAL_HPP__ diff --git a/modules/core/include/opencv2/core/mat.hpp b/modules/core/include/opencv2/core/mat.hpp deleted file mode 100644 index 45c2590..0000000 --- a/modules/core/include/opencv2/core/mat.hpp +++ /dev/null @@ -1,2619 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_MATRIX_OPERATIONS_HPP__ -#define __OPENCV_CORE_MATRIX_OPERATIONS_HPP__ - -#ifndef SKIP_INCLUDES -#include -#include -#endif // SKIP_INCLUDES - -#ifdef __cplusplus - -namespace cv -{ - -//////////////////////////////// Mat //////////////////////////////// - -inline void Mat::initEmpty() -{ - flags = MAGIC_VAL; - dims = rows = cols = 0; - data = datastart = dataend = datalimit = 0; - refcount = 0; - allocator = 0; -} - -inline Mat::Mat() : size(&rows) -{ - initEmpty(); -} - -inline Mat::Mat(int _rows, int _cols, int _type) : size(&rows) -{ - initEmpty(); - create(_rows, _cols, _type); -} - -inline Mat::Mat(int _rows, int _cols, int _type, const Scalar& _s) : size(&rows) -{ - initEmpty(); - create(_rows, _cols, _type); - *this = _s; -} - -inline Mat::Mat(Size _sz, int _type) : size(&rows) -{ - initEmpty(); - create( _sz.height, _sz.width, _type ); -} - -inline Mat::Mat(Size _sz, int _type, const Scalar& _s) : size(&rows) -{ - initEmpty(); - create(_sz.height, _sz.width, _type); - *this = _s; -} - -inline Mat::Mat(int _dims, const int* _sz, int _type) : size(&rows) -{ - initEmpty(); - create(_dims, _sz, _type); -} - -inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s) : size(&rows) -{ - initEmpty(); - create(_dims, _sz, _type); - *this = _s; -} - -inline Mat::Mat(const Mat& m) - : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), data(m.data), - refcount(m.refcount), datastart(m.datastart), dataend(m.dataend), - datalimit(m.datalimit), allocator(m.allocator), size(&rows) -{ - if( refcount ) - CV_XADD(refcount, 1); - if( m.dims <= 2 ) - { - step[0] = m.step[0]; step[1] = m.step[1]; - } - else - { - dims = 0; - copySize(m); - } -} - -inline Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step) - : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_rows), cols(_cols), - data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0), - datalimit(0), allocator(0), size(&rows) -{ - size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz; - if( _step == AUTO_STEP ) - { - _step = minstep; - flags |= CONTINUOUS_FLAG; - } - else - { - if( rows == 1 ) _step = minstep; - CV_DbgAssert( _step >= minstep ); - flags |= _step == minstep ? CONTINUOUS_FLAG : 0; - } - step[0] = _step; step[1] = esz; - datalimit = datastart + _step*rows; - dataend = datalimit - _step + minstep; -} - -inline Mat::Mat(Size _sz, int _type, void* _data, size_t _step) - : flags(MAGIC_VAL + (_type & TYPE_MASK)), dims(2), rows(_sz.height), cols(_sz.width), - data((uchar*)_data), refcount(0), datastart((uchar*)_data), dataend(0), - datalimit(0), allocator(0), size(&rows) -{ - size_t esz = CV_ELEM_SIZE(_type), minstep = cols*esz; - if( _step == AUTO_STEP ) - { - _step = minstep; - flags |= CONTINUOUS_FLAG; - } - else - { - if( rows == 1 ) _step = minstep; - CV_DbgAssert( _step >= minstep ); - flags |= _step == minstep ? CONTINUOUS_FLAG : 0; - } - step[0] = _step; step[1] = esz; - datalimit = datastart + _step*rows; - dataend = datalimit - _step + minstep; -} - - -template inline Mat::Mat(const vector<_Tp>& vec, bool copyData) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - if(vec.empty()) - return; - if( !copyData ) - { - step[0] = step[1] = sizeof(_Tp); - data = datastart = (uchar*)&vec[0]; - datalimit = dataend = datastart + rows*step[0]; - } - else - Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this); -} - - -template inline Mat::Mat(const Vec<_Tp, n>& vec, bool copyData) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(2), rows(n), cols(1), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - if( !copyData ) - { - step[0] = step[1] = sizeof(_Tp); - data = datastart = (uchar*)vec.val; - datalimit = dataend = datastart + rows*step[0]; - } - else - Mat(n, 1, DataType<_Tp>::type, (void*)vec.val).copyTo(*this); -} - - -template inline Mat::Mat(const Matx<_Tp,m,n>& M, bool copyData) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(2), rows(m), cols(n), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - if( !copyData ) - { - step[0] = cols*sizeof(_Tp); - step[1] = sizeof(_Tp); - data = datastart = (uchar*)M.val; - datalimit = dataend = datastart + rows*step[0]; - } - else - Mat(m, n, DataType<_Tp>::type, (uchar*)M.val).copyTo(*this); -} - - -template inline Mat::Mat(const Point_<_Tp>& pt, bool copyData) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(2), rows(2), cols(1), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - if( !copyData ) - { - step[0] = step[1] = sizeof(_Tp); - data = datastart = (uchar*)&pt.x; - datalimit = dataend = datastart + rows*step[0]; - } - else - { - create(2, 1, DataType<_Tp>::type); - ((_Tp*)data)[0] = pt.x; - ((_Tp*)data)[1] = pt.y; - } -} - - -template inline Mat::Mat(const Point3_<_Tp>& pt, bool copyData) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(2), rows(3), cols(1), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - if( !copyData ) - { - step[0] = step[1] = sizeof(_Tp); - data = datastart = (uchar*)&pt.x; - datalimit = dataend = datastart + rows*step[0]; - } - else - { - create(3, 1, DataType<_Tp>::type); - ((_Tp*)data)[0] = pt.x; - ((_Tp*)data)[1] = pt.y; - ((_Tp*)data)[2] = pt.z; - } -} - - -template inline Mat::Mat(const MatCommaInitializer_<_Tp>& commaInitializer) - : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), - dims(0), rows(0), cols(0), data(0), refcount(0), - datastart(0), dataend(0), allocator(0), size(&rows) -{ - *this = *commaInitializer; -} - -inline Mat::~Mat() -{ - release(); - if( step.p != step.buf ) - fastFree(step.p); -} - -inline Mat& Mat::operator = (const Mat& m) -{ - if( this != &m ) - { - if( m.refcount ) - CV_XADD(m.refcount, 1); - release(); - flags = m.flags; - if( dims <= 2 && m.dims <= 2 ) - { - dims = m.dims; - rows = m.rows; - cols = m.cols; - step[0] = m.step[0]; - step[1] = m.step[1]; - } - else - copySize(m); - data = m.data; - datastart = m.datastart; - dataend = m.dataend; - datalimit = m.datalimit; - refcount = m.refcount; - allocator = m.allocator; - } - return *this; -} - -inline Mat Mat::row(int y) const { return Mat(*this, Range(y, y+1), Range::all()); } -inline Mat Mat::col(int x) const { return Mat(*this, Range::all(), Range(x, x+1)); } -inline Mat Mat::rowRange(int startrow, int endrow) const - { return Mat(*this, Range(startrow, endrow), Range::all()); } -inline Mat Mat::rowRange(const Range& r) const - { return Mat(*this, r, Range::all()); } -inline Mat Mat::colRange(int startcol, int endcol) const - { return Mat(*this, Range::all(), Range(startcol, endcol)); } -inline Mat Mat::colRange(const Range& r) const - { return Mat(*this, Range::all(), r); } - -inline Mat Mat::diag(const Mat& d) -{ - CV_Assert( d.cols == 1 || d.rows == 1 ); - int len = d.rows + d.cols - 1; - Mat m(len, len, d.type(), Scalar(0)), md = m.diag(); - if( d.cols == 1 ) - d.copyTo(md); - else - transpose(d, md); - return m; -} - -inline Mat Mat::clone() const -{ - Mat m; - copyTo(m); - return m; -} - -inline void Mat::assignTo( Mat& m, int _type ) const -{ - if( _type < 0 ) - m = *this; - else - convertTo(m, _type); -} - -inline void Mat::create(int _rows, int _cols, int _type) -{ - _type &= TYPE_MASK; - if( dims <= 2 && rows == _rows && cols == _cols && type() == _type && data ) - return; - int sz[] = {_rows, _cols}; - create(2, sz, _type); -} - -inline void Mat::create(Size _sz, int _type) -{ - create(_sz.height, _sz.width, _type); -} - -inline void Mat::addref() -{ if( refcount ) CV_XADD(refcount, 1); } - -inline void Mat::release() -{ - if( refcount && CV_XADD(refcount, -1) == 1 ) - deallocate(); - data = datastart = dataend = datalimit = 0; - size.p[0] = 0; - refcount = 0; -} - -inline Mat Mat::operator()( Range _rowRange, Range _colRange ) const -{ - return Mat(*this, _rowRange, _colRange); -} - -inline Mat Mat::operator()( const Rect& roi ) const -{ return Mat(*this, roi); } - -inline Mat Mat::operator()(const Range* ranges) const -{ - return Mat(*this, ranges); -} - -inline Mat::operator CvMat() const -{ - CV_DbgAssert(dims <= 2); - CvMat m = cvMat(rows, dims == 1 ? 1 : cols, type(), data); - m.step = (int)step[0]; - m.type = (m.type & ~CONTINUOUS_FLAG) | (flags & CONTINUOUS_FLAG); - return m; -} - -inline bool Mat::isContinuous() const { return (flags & CONTINUOUS_FLAG) != 0; } -inline bool Mat::isSubmatrix() const { return (flags & SUBMATRIX_FLAG) != 0; } -inline size_t Mat::elemSize() const { return dims > 0 ? step.p[dims-1] : 0; } -inline size_t Mat::elemSize1() const { return CV_ELEM_SIZE1(flags); } -inline int Mat::type() const { return CV_MAT_TYPE(flags); } -inline int Mat::depth() const { return CV_MAT_DEPTH(flags); } -inline int Mat::channels() const { return CV_MAT_CN(flags); } -inline size_t Mat::step1(int i) const { return step.p[i]/elemSize1(); } -inline bool Mat::empty() const { return data == 0 || total() == 0; } -inline size_t Mat::total() const -{ - if( dims <= 2 ) - return (size_t)rows*cols; - size_t p = 1; - for( int i = 0; i < dims; i++ ) - p *= size[i]; - return p; -} - -inline uchar* Mat::ptr(int y) -{ - CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) ); - return data + step.p[0]*y; -} - -inline const uchar* Mat::ptr(int y) const -{ - CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) ); - return data + step.p[0]*y; -} - -template inline _Tp* Mat::ptr(int y) -{ - CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) ); - return (_Tp*)(data + step.p[0]*y); -} - -template inline const _Tp* Mat::ptr(int y) const -{ - CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) ); - return (const _Tp*)(data + step.p[0]*y); -} - - -inline uchar* Mat::ptr(int i0, int i1) -{ - CV_DbgAssert( dims >= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] ); - return data + i0*step.p[0] + i1*step.p[1]; -} - -inline const uchar* Mat::ptr(int i0, int i1) const -{ - CV_DbgAssert( dims >= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] ); - return data + i0*step.p[0] + i1*step.p[1]; -} - -template inline _Tp* Mat::ptr(int i0, int i1) -{ - CV_DbgAssert( dims >= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] ); - return (_Tp*)(data + i0*step.p[0] + i1*step.p[1]); -} - -template inline const _Tp* Mat::ptr(int i0, int i1) const -{ - CV_DbgAssert( dims >= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] ); - return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1]); -} - -inline uchar* Mat::ptr(int i0, int i1, int i2) -{ - CV_DbgAssert( dims >= 3 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - (unsigned)i2 < (unsigned)size.p[2] ); - return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]; -} - -inline const uchar* Mat::ptr(int i0, int i1, int i2) const -{ - CV_DbgAssert( dims >= 3 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - (unsigned)i2 < (unsigned)size.p[2] ); - return data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]; -} - -template inline _Tp* Mat::ptr(int i0, int i1, int i2) -{ - CV_DbgAssert( dims >= 3 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - (unsigned)i2 < (unsigned)size.p[2] ); - return (_Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]); -} - -template inline const _Tp* Mat::ptr(int i0, int i1, int i2) const -{ - CV_DbgAssert( dims >= 3 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - (unsigned)i2 < (unsigned)size.p[2] ); - return (const _Tp*)(data + i0*step.p[0] + i1*step.p[1] + i2*step.p[2]); -} - -inline uchar* Mat::ptr(const int* idx) -{ - int i, d = dims; - uchar* p = data; - CV_DbgAssert( d >= 1 && p ); - for( i = 0; i < d; i++ ) - { - CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] ); - p += idx[i]*step.p[i]; - } - return p; -} - -inline const uchar* Mat::ptr(const int* idx) const -{ - int i, d = dims; - uchar* p = data; - CV_DbgAssert( d >= 1 && p ); - for( i = 0; i < d; i++ ) - { - CV_DbgAssert( (unsigned)idx[i] < (unsigned)size.p[i] ); - p += idx[i]*step.p[i]; - } - return p; -} - -template inline _Tp& Mat::at(int i0, int i1) -{ - CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && - CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1()); - return ((_Tp*)(data + step.p[0]*i0))[i1]; -} - -template inline const _Tp& Mat::at(int i0, int i1) const -{ - CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && - CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1()); - return ((const _Tp*)(data + step.p[0]*i0))[i1]; -} - -template inline _Tp& Mat::at(Point pt) -{ - CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] && - (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && - CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1()); - return ((_Tp*)(data + step.p[0]*pt.y))[pt.x]; -} - -template inline const _Tp& Mat::at(Point pt) const -{ - CV_DbgAssert( dims <= 2 && data && (unsigned)pt.y < (unsigned)size.p[0] && - (unsigned)(pt.x*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && - CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1()); - return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x]; -} - -template inline _Tp& Mat::at(int i0) -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) && - elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - if( isContinuous() || size.p[0] == 1 ) - return ((_Tp*)data)[i0]; - if( size.p[1] == 1 ) - return *(_Tp*)(data + step.p[0]*i0); - int i = i0/cols, j = i0 - i*cols; - return ((_Tp*)(data + step.p[0]*i))[j]; -} - -template inline const _Tp& Mat::at(int i0) const -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)i0 < (unsigned)(size.p[0]*size.p[1]) && - elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - if( isContinuous() || size.p[0] == 1 ) - return ((const _Tp*)data)[i0]; - if( size.p[1] == 1 ) - return *(const _Tp*)(data + step.p[0]*i0); - int i = i0/cols, j = i0 - i*cols; - return ((const _Tp*)(data + step.p[0]*i))[j]; -} - -template inline _Tp& Mat::at(int i0, int i1, int i2) -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(_Tp*)ptr(i0, i1, i2); -} -template inline const _Tp& Mat::at(int i0, int i1, int i2) const -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(const _Tp*)ptr(i0, i1, i2); -} -template inline _Tp& Mat::at(const int* idx) -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(_Tp*)ptr(idx); -} -template inline const _Tp& Mat::at(const int* idx) const -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(const _Tp*)ptr(idx); -} -template _Tp& Mat::at(const Vec& idx) -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(_Tp*)ptr(idx.val); -} -template inline const _Tp& Mat::at(const Vec& idx) const -{ - CV_DbgAssert( elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type) ); - return *(const _Tp*)ptr(idx.val); -} - - -template inline MatConstIterator_<_Tp> Mat::begin() const -{ - CV_DbgAssert( elemSize() == sizeof(_Tp) ); - return MatConstIterator_<_Tp>((const Mat_<_Tp>*)this); -} - -template inline MatConstIterator_<_Tp> Mat::end() const -{ - CV_DbgAssert( elemSize() == sizeof(_Tp) ); - MatConstIterator_<_Tp> it((const Mat_<_Tp>*)this); - it += total(); - return it; -} - -template inline MatIterator_<_Tp> Mat::begin() -{ - CV_DbgAssert( elemSize() == sizeof(_Tp) ); - return MatIterator_<_Tp>((Mat_<_Tp>*)this); -} - -template inline MatIterator_<_Tp> Mat::end() -{ - CV_DbgAssert( elemSize() == sizeof(_Tp) ); - MatIterator_<_Tp> it((Mat_<_Tp>*)this); - it += total(); - return it; -} - -template inline Mat::operator vector<_Tp>() const -{ - vector<_Tp> v; - copyTo(v); - return v; -} - -template inline Mat::operator Vec<_Tp, n>() const -{ - CV_Assert( data && dims <= 2 && (rows == 1 || cols == 1) && - rows + cols - 1 == n && channels() == 1 ); - - if( isContinuous() && type() == DataType<_Tp>::type ) - return Vec<_Tp, n>((_Tp*)data); - Vec<_Tp, n> v; Mat tmp(rows, cols, DataType<_Tp>::type, v.val); - convertTo(tmp, tmp.type()); - return v; -} - -template inline Mat::operator Matx<_Tp, m, n>() const -{ - CV_Assert( data && dims <= 2 && rows == m && cols == n && channels() == 1 ); - - if( isContinuous() && type() == DataType<_Tp>::type ) - return Matx<_Tp, m, n>((_Tp*)data); - Matx<_Tp, m, n> mtx; Mat tmp(rows, cols, DataType<_Tp>::type, mtx.val); - convertTo(tmp, tmp.type()); - return mtx; -} - - -template inline void Mat::push_back(const _Tp& elem) -{ - if( !data ) - { - *this = Mat(1, 1, DataType<_Tp>::type, (void*)&elem).clone(); - return; - } - CV_Assert(DataType<_Tp>::type == type() && cols == 1 - /* && dims == 2 (cols == 1 implies dims == 2) */); - uchar* tmp = dataend + step[0]; - if( !isSubmatrix() && isContinuous() && tmp <= datalimit ) - { - *(_Tp*)(data + (size.p[0]++)*step.p[0]) = elem; - dataend = tmp; - } - else - push_back_(&elem); -} - -template inline void Mat::push_back(const Mat_<_Tp>& m) -{ - push_back((const Mat&)m); -} - -inline Mat::MSize::MSize(int* _p) : p(_p) {} -inline Size Mat::MSize::operator()() const -{ - CV_DbgAssert(p[-1] <= 2); - return Size(p[1], p[0]); -} -inline const int& Mat::MSize::operator[](int i) const { return p[i]; } -inline int& Mat::MSize::operator[](int i) { return p[i]; } -inline Mat::MSize::operator const int*() const { return p; } - -inline bool Mat::MSize::operator == (const MSize& sz) const -{ - int d = p[-1], dsz = sz.p[-1]; - if( d != dsz ) - return false; - if( d == 2 ) - return p[0] == sz.p[0] && p[1] == sz.p[1]; - - for( int i = 0; i < d; i++ ) - if( p[i] != sz.p[i] ) - return false; - return true; -} - -inline bool Mat::MSize::operator != (const MSize& sz) const -{ - return !(*this == sz); -} - -inline Mat::MStep::MStep() { p = buf; p[0] = p[1] = 0; } -inline Mat::MStep::MStep(size_t s) { p = buf; p[0] = s; p[1] = 0; } -inline const size_t& Mat::MStep::operator[](int i) const { return p[i]; } -inline size_t& Mat::MStep::operator[](int i) { return p[i]; } -inline Mat::MStep::operator size_t() const -{ - CV_DbgAssert( p == buf ); - return buf[0]; -} -inline Mat::MStep& Mat::MStep::operator = (size_t s) -{ - CV_DbgAssert( p == buf ); - buf[0] = s; - return *this; -} - -static inline Mat cvarrToMatND(const CvArr* arr, bool copyData=false, int coiMode=0) -{ - return cvarrToMat(arr, copyData, true, coiMode); -} - -///////////////////////////////////////////// SVD ////////////////////////////////////////////////////// - -inline SVD::SVD() {} -inline SVD::SVD( InputArray m, int flags ) { operator ()(m, flags); } -inline void SVD::solveZ( InputArray m, OutputArray _dst ) -{ - Mat mtx = m.getMat(); - SVD svd(mtx, (mtx.rows >= mtx.cols ? 0 : SVD::FULL_UV)); - _dst.create(svd.vt.cols, 1, svd.vt.type()); - Mat dst = _dst.getMat(); - svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst); -} - -template inline void - SVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w, Matx<_Tp, m, nm>& u, Matx<_Tp, n, nm>& vt ) -{ - assert( nm == MIN(m, n)); - Mat _a(a, false), _u(u, false), _w(w, false), _vt(vt, false); - SVD::compute(_a, _w, _u, _vt); - CV_Assert(_w.data == (uchar*)&w.val[0] && _u.data == (uchar*)&u.val[0] && _vt.data == (uchar*)&vt.val[0]); -} - -template inline void -SVD::compute( const Matx<_Tp, m, n>& a, Matx<_Tp, nm, 1>& w ) -{ - assert( nm == MIN(m, n)); - Mat _a(a, false), _w(w, false); - SVD::compute(_a, _w); - CV_Assert(_w.data == (uchar*)&w.val[0]); -} - -template inline void -SVD::backSubst( const Matx<_Tp, nm, 1>& w, const Matx<_Tp, m, nm>& u, - const Matx<_Tp, n, nm>& vt, const Matx<_Tp, m, nb>& rhs, - Matx<_Tp, n, nb>& dst ) -{ - assert( nm == MIN(m, n)); - Mat _u(u, false), _w(w, false), _vt(vt, false), _rhs(rhs, false), _dst(dst, false); - SVD::backSubst(_w, _u, _vt, _rhs, _dst); - CV_Assert(_dst.data == (uchar*)&dst.val[0]); -} - -///////////////////////////////// Mat_<_Tp> //////////////////////////////////// - -template inline Mat_<_Tp>::Mat_() - : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; } - -template inline Mat_<_Tp>::Mat_(int _rows, int _cols) - : Mat(_rows, _cols, DataType<_Tp>::type) {} - -template inline Mat_<_Tp>::Mat_(int _rows, int _cols, const _Tp& value) - : Mat(_rows, _cols, DataType<_Tp>::type) { *this = value; } - -template inline Mat_<_Tp>::Mat_(Size _sz) - : Mat(_sz.height, _sz.width, DataType<_Tp>::type) {} - -template inline Mat_<_Tp>::Mat_(Size _sz, const _Tp& value) - : Mat(_sz.height, _sz.width, DataType<_Tp>::type) { *this = value; } - -template inline Mat_<_Tp>::Mat_(int _dims, const int* _sz) - : Mat(_dims, _sz, DataType<_Tp>::type) {} - -template inline Mat_<_Tp>::Mat_(int _dims, const int* _sz, const _Tp& _s) - : Mat(_dims, _sz, DataType<_Tp>::type, Scalar(_s)) {} - -template inline Mat_<_Tp>::Mat_(const Mat_<_Tp>& m, const Range* ranges) - : Mat(m, ranges) {} - -template inline Mat_<_Tp>::Mat_(const Mat& m) - : Mat() { flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type; *this = m; } - -template inline Mat_<_Tp>::Mat_(const Mat_& m) - : Mat(m) {} - -template inline Mat_<_Tp>::Mat_(int _rows, int _cols, _Tp* _data, size_t steps) - : Mat(_rows, _cols, DataType<_Tp>::type, _data, steps) {} - -template inline Mat_<_Tp>::Mat_(const Mat_& m, const Range& _rowRange, const Range& _colRange) - : Mat(m, _rowRange, _colRange) {} - -template inline Mat_<_Tp>::Mat_(const Mat_& m, const Rect& roi) - : Mat(m, roi) {} - -template template inline - Mat_<_Tp>::Mat_(const Vec::channel_type, n>& vec, bool copyData) - : Mat(n/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&vec) -{ - CV_Assert(n%DataType<_Tp>::channels == 0); - if( copyData ) - *this = clone(); -} - -template template inline - Mat_<_Tp>::Mat_(const Matx::channel_type,m,n>& M, bool copyData) - : Mat(m, n/DataType<_Tp>::channels, DataType<_Tp>::type, (void*)&M) -{ - CV_Assert(n % DataType<_Tp>::channels == 0); - if( copyData ) - *this = clone(); -} - -template inline Mat_<_Tp>::Mat_(const Point_::channel_type>& pt, bool copyData) - : Mat(2/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt) -{ - CV_Assert(2 % DataType<_Tp>::channels == 0); - if( copyData ) - *this = clone(); -} - -template inline Mat_<_Tp>::Mat_(const Point3_::channel_type>& pt, bool copyData) - : Mat(3/DataType<_Tp>::channels, 1, DataType<_Tp>::type, (void*)&pt) -{ - CV_Assert(3 % DataType<_Tp>::channels == 0); - if( copyData ) - *this = clone(); -} - -template inline Mat_<_Tp>::Mat_(const MatCommaInitializer_<_Tp>& commaInitializer) - : Mat(commaInitializer) {} - -template inline Mat_<_Tp>::Mat_(const vector<_Tp>& vec, bool copyData) - : Mat(vec, copyData) {} - -template inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m) -{ - if( DataType<_Tp>::type == m.type() ) - { - Mat::operator = (m); - return *this; - } - if( DataType<_Tp>::depth == m.depth() ) - { - return (*this = m.reshape(DataType<_Tp>::channels, m.dims, 0)); - } - CV_DbgAssert(DataType<_Tp>::channels == m.channels()); - m.convertTo(*this, type()); - return *this; -} - -template inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat_& m) -{ - Mat::operator=(m); - return *this; -} - -template inline Mat_<_Tp>& Mat_<_Tp>::operator = (const _Tp& s) -{ - typedef typename DataType<_Tp>::vec_type VT; - Mat::operator=(Scalar((const VT&)s)); - return *this; -} - -template inline void Mat_<_Tp>::create(int _rows, int _cols) -{ - Mat::create(_rows, _cols, DataType<_Tp>::type); -} - -template inline void Mat_<_Tp>::create(Size _sz) -{ - Mat::create(_sz, DataType<_Tp>::type); -} - -template inline void Mat_<_Tp>::create(int _dims, const int* _sz) -{ - Mat::create(_dims, _sz, DataType<_Tp>::type); -} - - -template inline Mat_<_Tp> Mat_<_Tp>::cross(const Mat_& m) const -{ return Mat_<_Tp>(Mat::cross(m)); } - -template template inline Mat_<_Tp>::operator Mat_() const -{ return Mat_(*this); } - -template inline Mat_<_Tp> Mat_<_Tp>::row(int y) const -{ return Mat_(*this, Range(y, y+1), Range::all()); } -template inline Mat_<_Tp> Mat_<_Tp>::col(int x) const -{ return Mat_(*this, Range::all(), Range(x, x+1)); } -template inline Mat_<_Tp> Mat_<_Tp>::diag(int d) const -{ return Mat_(Mat::diag(d)); } -template inline Mat_<_Tp> Mat_<_Tp>::clone() const -{ return Mat_(Mat::clone()); } - -template inline size_t Mat_<_Tp>::elemSize() const -{ - CV_DbgAssert( Mat::elemSize() == sizeof(_Tp) ); - return sizeof(_Tp); -} - -template inline size_t Mat_<_Tp>::elemSize1() const -{ - CV_DbgAssert( Mat::elemSize1() == sizeof(_Tp)/DataType<_Tp>::channels ); - return sizeof(_Tp)/DataType<_Tp>::channels; -} -template inline int Mat_<_Tp>::type() const -{ - CV_DbgAssert( Mat::type() == DataType<_Tp>::type ); - return DataType<_Tp>::type; -} -template inline int Mat_<_Tp>::depth() const -{ - CV_DbgAssert( Mat::depth() == DataType<_Tp>::depth ); - return DataType<_Tp>::depth; -} -template inline int Mat_<_Tp>::channels() const -{ - CV_DbgAssert( Mat::channels() == DataType<_Tp>::channels ); - return DataType<_Tp>::channels; -} -template inline size_t Mat_<_Tp>::stepT(int i) const { return step.p[i]/elemSize(); } -template inline size_t Mat_<_Tp>::step1(int i) const { return step.p[i]/elemSize1(); } - -template inline Mat_<_Tp>& Mat_<_Tp>::adjustROI( int dtop, int dbottom, int dleft, int dright ) -{ return (Mat_<_Tp>&)(Mat::adjustROI(dtop, dbottom, dleft, dright)); } - -template inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range& _rowRange, const Range& _colRange ) const -{ return Mat_<_Tp>(*this, _rowRange, _colRange); } - -template inline Mat_<_Tp> Mat_<_Tp>::operator()( const Rect& roi ) const -{ return Mat_<_Tp>(*this, roi); } - -template inline Mat_<_Tp> Mat_<_Tp>::operator()( const Range* ranges ) const -{ return Mat_<_Tp>(*this, ranges); } - -template inline _Tp* Mat_<_Tp>::operator [](int y) -{ return (_Tp*)ptr(y); } -template inline const _Tp* Mat_<_Tp>::operator [](int y) const -{ return (const _Tp*)ptr(y); } - -template inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1) -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - type() == DataType<_Tp>::type ); - return ((_Tp*)(data + step.p[0]*i0))[i1]; -} - -template inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1) const -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)i0 < (unsigned)size.p[0] && - (unsigned)i1 < (unsigned)size.p[1] && - type() == DataType<_Tp>::type ); - return ((const _Tp*)(data + step.p[0]*i0))[i1]; -} - -template inline _Tp& Mat_<_Tp>::operator ()(Point pt) -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)pt.y < (unsigned)size.p[0] && - (unsigned)pt.x < (unsigned)size.p[1] && - type() == DataType<_Tp>::type ); - return ((_Tp*)(data + step.p[0]*pt.y))[pt.x]; -} - -template inline const _Tp& Mat_<_Tp>::operator ()(Point pt) const -{ - CV_DbgAssert( dims <= 2 && data && - (unsigned)pt.y < (unsigned)size.p[0] && - (unsigned)pt.x < (unsigned)size.p[1] && - type() == DataType<_Tp>::type ); - return ((const _Tp*)(data + step.p[0]*pt.y))[pt.x]; -} - -template inline _Tp& Mat_<_Tp>::operator ()(const int* idx) -{ - return Mat::at<_Tp>(idx); -} - -template inline const _Tp& Mat_<_Tp>::operator ()(const int* idx) const -{ - return Mat::at<_Tp>(idx); -} - -template template inline _Tp& Mat_<_Tp>::operator ()(const Vec& idx) -{ - return Mat::at<_Tp>(idx); -} - -template template inline const _Tp& Mat_<_Tp>::operator ()(const Vec& idx) const -{ - return Mat::at<_Tp>(idx); -} - -template inline _Tp& Mat_<_Tp>::operator ()(int i0) -{ - return this->at<_Tp>(i0); -} - -template inline const _Tp& Mat_<_Tp>::operator ()(int i0) const -{ - return this->at<_Tp>(i0); -} - -template inline _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2) -{ - return this->at<_Tp>(i0, i1, i2); -} - -template inline const _Tp& Mat_<_Tp>::operator ()(int i0, int i1, int i2) const -{ - return this->at<_Tp>(i0, i1, i2); -} - - -template inline Mat_<_Tp>::operator vector<_Tp>() const -{ - vector<_Tp> v; - copyTo(v); - return v; -} - -template template inline Mat_<_Tp>::operator Vec::channel_type, n>() const -{ - CV_Assert(n % DataType<_Tp>::channels == 0); - return this->Mat::operator Vec::channel_type, n>(); -} - -template template inline Mat_<_Tp>::operator Matx::channel_type, m, n>() const -{ - CV_Assert(n % DataType<_Tp>::channels == 0); - - Matx::channel_type, m, n> res = this->Mat::operator Matx::channel_type, m, n>(); - return res; -} - -template inline void -process( const Mat_& m1, Mat_& m2, Op op ) -{ - int y, x, rows = m1.rows, cols = m1.cols; - - CV_DbgAssert( m1.size() == m2.size() ); - - for( y = 0; y < rows; y++ ) - { - const T1* src = m1[y]; - T2* dst = m2[y]; - - for( x = 0; x < cols; x++ ) - dst[x] = op(src[x]); - } -} - -template inline void -process( const Mat_& m1, const Mat_& m2, Mat_& m3, Op op ) -{ - int y, x, rows = m1.rows, cols = m1.cols; - - CV_DbgAssert( m1.size() == m2.size() ); - - for( y = 0; y < rows; y++ ) - { - const T1* src1 = m1[y]; - const T2* src2 = m2[y]; - T3* dst = m3[y]; - - for( x = 0; x < cols; x++ ) - dst[x] = op( src1[x], src2[x] ); - } -} - - -/////////////////////////////// Input/Output Arrays ///////////////////////////////// - -template inline _InputArray::_InputArray(const vector<_Tp>& vec) - : flags(FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {} - -template inline _InputArray::_InputArray(const vector >& vec) - : flags(FIXED_TYPE + STD_VECTOR_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {} - -template inline _InputArray::_InputArray(const vector >& vec) - : flags(FIXED_TYPE + STD_VECTOR_MAT + DataType<_Tp>::type), obj((void*)&vec) {} - -template inline _InputArray::_InputArray(const Matx<_Tp, m, n>& mtx) - : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)&mtx), sz(n, m) {} - -template inline _InputArray::_InputArray(const _Tp* vec, int n) - : flags(FIXED_TYPE + FIXED_SIZE + MATX + DataType<_Tp>::type), obj((void*)vec), sz(n, 1) {} - -inline _InputArray::_InputArray(const Scalar& s) - : flags(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F), obj((void*)&s), sz(1, 4) {} - -template inline _InputArray::_InputArray(const Mat_<_Tp>& m) - : flags(FIXED_TYPE + MAT + DataType<_Tp>::type), obj((void*)&m) {} - -template inline _OutputArray::_OutputArray(vector<_Tp>& vec) - : _InputArray(vec) {} -template inline _OutputArray::_OutputArray(vector >& vec) - : _InputArray(vec) {} -template inline _OutputArray::_OutputArray(vector >& vec) - : _InputArray(vec) {} -template inline _OutputArray::_OutputArray(Mat_<_Tp>& m) - : _InputArray(m) {} -template inline _OutputArray::_OutputArray(Matx<_Tp, m, n>& mtx) - : _InputArray(mtx) {} -template inline _OutputArray::_OutputArray(_Tp* vec, int n) - : _InputArray(vec, n) {} - -template inline _OutputArray::_OutputArray(const vector<_Tp>& vec) - : _InputArray(vec) {flags |= FIXED_SIZE;} -template inline _OutputArray::_OutputArray(const vector >& vec) - : _InputArray(vec) {flags |= FIXED_SIZE;} -template inline _OutputArray::_OutputArray(const vector >& vec) - : _InputArray(vec) {flags |= FIXED_SIZE;} - -template inline _OutputArray::_OutputArray(const Mat_<_Tp>& m) - : _InputArray(m) {flags |= FIXED_SIZE;} -template inline _OutputArray::_OutputArray(const Matx<_Tp, m, n>& mtx) - : _InputArray(mtx) {} -template inline _OutputArray::_OutputArray(const _Tp* vec, int n) - : _InputArray(vec, n) {} - -//////////////////////////////////// Matrix Expressions ///////////////////////////////////////// - -class CV_EXPORTS MatOp -{ -public: - MatOp() {}; - virtual ~MatOp() {}; - - virtual bool elementWise(const MatExpr& expr) const; - virtual void assign(const MatExpr& expr, Mat& m, int type=-1) const = 0; - virtual void roi(const MatExpr& expr, const Range& rowRange, - const Range& colRange, MatExpr& res) const; - virtual void diag(const MatExpr& expr, int d, MatExpr& res) const; - virtual void augAssignAdd(const MatExpr& expr, Mat& m) const; - virtual void augAssignSubtract(const MatExpr& expr, Mat& m) const; - virtual void augAssignMultiply(const MatExpr& expr, Mat& m) const; - virtual void augAssignDivide(const MatExpr& expr, Mat& m) const; - virtual void augAssignAnd(const MatExpr& expr, Mat& m) const; - virtual void augAssignOr(const MatExpr& expr, Mat& m) const; - virtual void augAssignXor(const MatExpr& expr, Mat& m) const; - - virtual void add(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const; - virtual void add(const MatExpr& expr1, const Scalar& s, MatExpr& res) const; - - virtual void subtract(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const; - virtual void subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const; - - virtual void multiply(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const; - virtual void multiply(const MatExpr& expr1, double s, MatExpr& res) const; - - virtual void divide(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res, double scale=1) const; - virtual void divide(double s, const MatExpr& expr, MatExpr& res) const; - - virtual void abs(const MatExpr& expr, MatExpr& res) const; - - virtual void transpose(const MatExpr& expr, MatExpr& res) const; - virtual void matmul(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const; - virtual void invert(const MatExpr& expr, int method, MatExpr& res) const; - - virtual Size size(const MatExpr& expr) const; - virtual int type(const MatExpr& expr) const; -}; - - -class CV_EXPORTS MatExpr -{ -public: - MatExpr() : op(0), flags(0), a(Mat()), b(Mat()), c(Mat()), alpha(0), beta(0), s(Scalar()) {} - MatExpr(const MatOp* _op, int _flags, const Mat& _a=Mat(), const Mat& _b=Mat(), - const Mat& _c=Mat(), double _alpha=1, double _beta=1, const Scalar& _s=Scalar()) - : op(_op), flags(_flags), a(_a), b(_b), c(_c), alpha(_alpha), beta(_beta), s(_s) {} - explicit MatExpr(const Mat& m); - operator Mat() const - { - Mat m; - op->assign(*this, m); - return m; - } - - template operator Mat_<_Tp>() const - { - Mat_<_Tp> m; - op->assign(*this, m, DataType<_Tp>::type); - return m; - } - - MatExpr row(int y) const; - MatExpr col(int x) const; - MatExpr diag(int d=0) const; - MatExpr operator()( const Range& rowRange, const Range& colRange ) const; - MatExpr operator()( const Rect& roi ) const; - - Mat cross(const Mat& m) const; - double dot(const Mat& m) const; - - MatExpr t() const; - MatExpr inv(int method = DECOMP_LU) const; - MatExpr mul(const MatExpr& e, double scale=1) const; - MatExpr mul(const Mat& m, double scale=1) const; - - Size size() const; - int type() const; - - const MatOp* op; - int flags; - - Mat a, b, c; - double alpha, beta; - Scalar s; -}; - - -CV_EXPORTS MatExpr operator + (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator + (const Mat& a, const Scalar& s); -CV_EXPORTS MatExpr operator + (const Scalar& s, const Mat& a); -CV_EXPORTS MatExpr operator + (const MatExpr& e, const Mat& m); -CV_EXPORTS MatExpr operator + (const Mat& m, const MatExpr& e); -CV_EXPORTS MatExpr operator + (const MatExpr& e, const Scalar& s); -CV_EXPORTS MatExpr operator + (const Scalar& s, const MatExpr& e); -CV_EXPORTS MatExpr operator + (const MatExpr& e1, const MatExpr& e2); - -CV_EXPORTS MatExpr operator - (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator - (const Mat& a, const Scalar& s); -CV_EXPORTS MatExpr operator - (const Scalar& s, const Mat& a); -CV_EXPORTS MatExpr operator - (const MatExpr& e, const Mat& m); -CV_EXPORTS MatExpr operator - (const Mat& m, const MatExpr& e); -CV_EXPORTS MatExpr operator - (const MatExpr& e, const Scalar& s); -CV_EXPORTS MatExpr operator - (const Scalar& s, const MatExpr& e); -CV_EXPORTS MatExpr operator - (const MatExpr& e1, const MatExpr& e2); - -CV_EXPORTS MatExpr operator - (const Mat& m); -CV_EXPORTS MatExpr operator - (const MatExpr& e); - -CV_EXPORTS MatExpr operator * (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator * (const Mat& a, double s); -CV_EXPORTS MatExpr operator * (double s, const Mat& a); -CV_EXPORTS MatExpr operator * (const MatExpr& e, const Mat& m); -CV_EXPORTS MatExpr operator * (const Mat& m, const MatExpr& e); -CV_EXPORTS MatExpr operator * (const MatExpr& e, double s); -CV_EXPORTS MatExpr operator * (double s, const MatExpr& e); -CV_EXPORTS MatExpr operator * (const MatExpr& e1, const MatExpr& e2); - -CV_EXPORTS MatExpr operator / (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator / (const Mat& a, double s); -CV_EXPORTS MatExpr operator / (double s, const Mat& a); -CV_EXPORTS MatExpr operator / (const MatExpr& e, const Mat& m); -CV_EXPORTS MatExpr operator / (const Mat& m, const MatExpr& e); -CV_EXPORTS MatExpr operator / (const MatExpr& e, double s); -CV_EXPORTS MatExpr operator / (double s, const MatExpr& e); -CV_EXPORTS MatExpr operator / (const MatExpr& e1, const MatExpr& e2); - -CV_EXPORTS MatExpr operator < (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator < (const Mat& a, double s); -CV_EXPORTS MatExpr operator < (double s, const Mat& a); - -CV_EXPORTS MatExpr operator <= (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator <= (const Mat& a, double s); -CV_EXPORTS MatExpr operator <= (double s, const Mat& a); - -CV_EXPORTS MatExpr operator == (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator == (const Mat& a, double s); -CV_EXPORTS MatExpr operator == (double s, const Mat& a); - -CV_EXPORTS MatExpr operator != (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator != (const Mat& a, double s); -CV_EXPORTS MatExpr operator != (double s, const Mat& a); - -CV_EXPORTS MatExpr operator >= (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator >= (const Mat& a, double s); -CV_EXPORTS MatExpr operator >= (double s, const Mat& a); - -CV_EXPORTS MatExpr operator > (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator > (const Mat& a, double s); -CV_EXPORTS MatExpr operator > (double s, const Mat& a); - -CV_EXPORTS MatExpr min(const Mat& a, const Mat& b); -CV_EXPORTS MatExpr min(const Mat& a, double s); -CV_EXPORTS MatExpr min(double s, const Mat& a); - -CV_EXPORTS MatExpr max(const Mat& a, const Mat& b); -CV_EXPORTS MatExpr max(const Mat& a, double s); -CV_EXPORTS MatExpr max(double s, const Mat& a); - -template static inline MatExpr min(const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - return cv::min((const Mat&)a, (const Mat&)b); -} - -template static inline MatExpr min(const Mat_<_Tp>& a, double s) -{ - return cv::min((const Mat&)a, s); -} - -template static inline MatExpr min(double s, const Mat_<_Tp>& a) -{ - return cv::min((const Mat&)a, s); -} - -template static inline MatExpr max(const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - return cv::max((const Mat&)a, (const Mat&)b); -} - -template static inline MatExpr max(const Mat_<_Tp>& a, double s) -{ - return cv::max((const Mat&)a, s); -} - -template static inline MatExpr max(double s, const Mat_<_Tp>& a) -{ - return cv::max((const Mat&)a, s); -} - -template static inline void min(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c) -{ - cv::min((const Mat&)a, (const Mat&)b, (Mat&)c); -} - -template static inline void min(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c) -{ - cv::min((const Mat&)a, s, (Mat&)c); -} - -template static inline void min(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c) -{ - cv::min((const Mat&)a, s, (Mat&)c); -} - -template static inline void max(const Mat_<_Tp>& a, const Mat_<_Tp>& b, Mat_<_Tp>& c) -{ - cv::max((const Mat&)a, (const Mat&)b, (Mat&)c); -} - -template static inline void max(const Mat_<_Tp>& a, double s, Mat_<_Tp>& c) -{ - cv::max((const Mat&)a, s, (Mat&)c); -} - -template static inline void max(double s, const Mat_<_Tp>& a, Mat_<_Tp>& c) -{ - cv::max((const Mat&)a, s, (Mat&)c); -} - - -CV_EXPORTS MatExpr operator & (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator & (const Mat& a, const Scalar& s); -CV_EXPORTS MatExpr operator & (const Scalar& s, const Mat& a); - -CV_EXPORTS MatExpr operator | (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator | (const Mat& a, const Scalar& s); -CV_EXPORTS MatExpr operator | (const Scalar& s, const Mat& a); - -CV_EXPORTS MatExpr operator ^ (const Mat& a, const Mat& b); -CV_EXPORTS MatExpr operator ^ (const Mat& a, const Scalar& s); -CV_EXPORTS MatExpr operator ^ (const Scalar& s, const Mat& a); - -CV_EXPORTS MatExpr operator ~(const Mat& m); - -CV_EXPORTS MatExpr abs(const Mat& m); -CV_EXPORTS MatExpr abs(const MatExpr& e); - -template static inline MatExpr abs(const Mat_<_Tp>& m) -{ - return cv::abs((const Mat&)m); -} - -////////////////////////////// Augmenting algebraic operations ////////////////////////////////// - -inline Mat& Mat::operator = (const MatExpr& e) -{ - e.op->assign(e, *this); - return *this; -} - -template inline Mat_<_Tp>::Mat_(const MatExpr& e) -{ - e.op->assign(e, *this, DataType<_Tp>::type); -} - -template Mat_<_Tp>& Mat_<_Tp>::operator = (const MatExpr& e) -{ - e.op->assign(e, *this, DataType<_Tp>::type); - return *this; -} - -static inline Mat& operator += (const Mat& a, const Mat& b) -{ - add(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator += (const Mat& a, const Scalar& s) -{ - add(a, s, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator += (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - add(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline -Mat_<_Tp>& operator += (const Mat_<_Tp>& a, const Scalar& s) -{ - add(a, s, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator += (const Mat& a, const MatExpr& b) -{ - b.op->augAssignAdd(b, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator += (const Mat_<_Tp>& a, const MatExpr& b) -{ - b.op->augAssignAdd(b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator -= (const Mat& a, const Mat& b) -{ - subtract(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator -= (const Mat& a, const Scalar& s) -{ - subtract(a, s, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - subtract(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline -Mat_<_Tp>& operator -= (const Mat_<_Tp>& a, const Scalar& s) -{ - subtract(a, s, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator -= (const Mat& a, const MatExpr& b) -{ - b.op->augAssignSubtract(b, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator -= (const Mat_<_Tp>& a, const MatExpr& b) -{ - b.op->augAssignSubtract(b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator *= (const Mat& a, const Mat& b) -{ - gemm(a, b, 1, Mat(), 0, (Mat&)a, 0); - return (Mat&)a; -} - -static inline Mat& operator *= (const Mat& a, double s) -{ - a.convertTo((Mat&)a, -1, s); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator *= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - gemm(a, b, 1, Mat(), 0, (Mat&)a, 0); - return (Mat_<_Tp>&)a; -} - -template static inline -Mat_<_Tp>& operator *= (const Mat_<_Tp>& a, double s) -{ - a.convertTo((Mat&)a, -1, s); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator *= (const Mat& a, const MatExpr& b) -{ - b.op->augAssignMultiply(b, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator *= (const Mat_<_Tp>& a, const MatExpr& b) -{ - b.op->augAssignMultiply(b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator /= (const Mat& a, const Mat& b) -{ - divide(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator /= (const Mat& a, double s) -{ - a.convertTo((Mat&)a, -1, 1./s); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator /= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - divide(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline -Mat_<_Tp>& operator /= (const Mat_<_Tp>& a, double s) -{ - a.convertTo((Mat&)a, -1, 1./s); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator /= (const Mat& a, const MatExpr& b) -{ - b.op->augAssignDivide(b, (Mat&)a); - return (Mat&)a; -} - -template static inline -Mat_<_Tp>& operator /= (const Mat_<_Tp>& a, const MatExpr& b) -{ - b.op->augAssignDivide(b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -////////////////////////////// Logical operations /////////////////////////////// - -static inline Mat& operator &= (const Mat& a, const Mat& b) -{ - bitwise_and(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator &= (const Mat& a, const Scalar& s) -{ - bitwise_and(a, s, (Mat&)a); - return (Mat&)a; -} - -template static inline Mat_<_Tp>& -operator &= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - bitwise_and(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline Mat_<_Tp>& -operator &= (const Mat_<_Tp>& a, const Scalar& s) -{ - bitwise_and(a, s, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator |= (const Mat& a, const Mat& b) -{ - bitwise_or(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator |= (const Mat& a, const Scalar& s) -{ - bitwise_or(a, s, (Mat&)a); - return (Mat&)a; -} - -template static inline Mat_<_Tp>& -operator |= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - bitwise_or(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline Mat_<_Tp>& -operator |= (const Mat_<_Tp>& a, const Scalar& s) -{ - bitwise_or(a, s, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -static inline Mat& operator ^= (const Mat& a, const Mat& b) -{ - bitwise_xor(a, b, (Mat&)a); - return (Mat&)a; -} - -static inline Mat& operator ^= (const Mat& a, const Scalar& s) -{ - bitwise_xor(a, s, (Mat&)a); - return (Mat&)a; -} - -template static inline Mat_<_Tp>& -operator ^= (const Mat_<_Tp>& a, const Mat_<_Tp>& b) -{ - bitwise_xor(a, b, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -template static inline Mat_<_Tp>& -operator ^= (const Mat_<_Tp>& a, const Scalar& s) -{ - bitwise_xor(a, s, (Mat&)a); - return (Mat_<_Tp>&)a; -} - -/////////////////////////////// Miscellaneous operations ////////////////////////////// - -template void split(const Mat& src, vector >& mv) -{ split(src, (vector&)mv ); } - -////////////////////////////////////////////////////////////// - -template inline MatExpr Mat_<_Tp>::zeros(int rows, int cols) -{ - return Mat::zeros(rows, cols, DataType<_Tp>::type); -} - -template inline MatExpr Mat_<_Tp>::zeros(Size sz) -{ - return Mat::zeros(sz, DataType<_Tp>::type); -} - -template inline MatExpr Mat_<_Tp>::ones(int rows, int cols) -{ - return Mat::ones(rows, cols, DataType<_Tp>::type); -} - -template inline MatExpr Mat_<_Tp>::ones(Size sz) -{ - return Mat::ones(sz, DataType<_Tp>::type); -} - -template inline MatExpr Mat_<_Tp>::eye(int rows, int cols) -{ - return Mat::eye(rows, cols, DataType<_Tp>::type); -} - -template inline MatExpr Mat_<_Tp>::eye(Size sz) -{ - return Mat::eye(sz, DataType<_Tp>::type); -} - -//////////////////////////////// Iterators & Comma initializers ////////////////////////////////// - -inline MatConstIterator::MatConstIterator() - : m(0), elemSize(0), ptr(0), sliceStart(0), sliceEnd(0) {} - -inline MatConstIterator::MatConstIterator(const Mat* _m) - : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0) -{ - if( m && m->isContinuous() ) - { - sliceStart = m->data; - sliceEnd = sliceStart + m->total()*elemSize; - } - seek((const int*)0); -} - -inline MatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col) - : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0) -{ - CV_Assert(m && m->dims <= 2); - if( m->isContinuous() ) - { - sliceStart = m->data; - sliceEnd = sliceStart + m->total()*elemSize; - } - int idx[]={_row, _col}; - seek(idx); -} - -inline MatConstIterator::MatConstIterator(const Mat* _m, Point _pt) - : m(_m), elemSize(_m->elemSize()), ptr(0), sliceStart(0), sliceEnd(0) -{ - CV_Assert(m && m->dims <= 2); - if( m->isContinuous() ) - { - sliceStart = m->data; - sliceEnd = sliceStart + m->total()*elemSize; - } - int idx[]={_pt.y, _pt.x}; - seek(idx); -} - -inline MatConstIterator::MatConstIterator(const MatConstIterator& it) - : m(it.m), elemSize(it.elemSize), ptr(it.ptr), sliceStart(it.sliceStart), sliceEnd(it.sliceEnd) -{} - -inline MatConstIterator& MatConstIterator::operator = (const MatConstIterator& it ) -{ - m = it.m; elemSize = it.elemSize; ptr = it.ptr; - sliceStart = it.sliceStart; sliceEnd = it.sliceEnd; - return *this; -} - -inline uchar* MatConstIterator::operator *() const { return ptr; } - -inline MatConstIterator& MatConstIterator::operator += (ptrdiff_t ofs) -{ - if( !m || ofs == 0 ) - return *this; - ptrdiff_t ofsb = ofs*elemSize; - ptr += ofsb; - if( ptr < sliceStart || sliceEnd <= ptr ) - { - ptr -= ofsb; - seek(ofs, true); - } - return *this; -} - -inline MatConstIterator& MatConstIterator::operator -= (ptrdiff_t ofs) -{ return (*this += -ofs); } - -inline MatConstIterator& MatConstIterator::operator --() -{ - if( m && (ptr -= elemSize) < sliceStart ) - { - ptr += elemSize; - seek(-1, true); - } - return *this; -} - -inline MatConstIterator MatConstIterator::operator --(int) -{ - MatConstIterator b = *this; - *this += -1; - return b; -} - -inline MatConstIterator& MatConstIterator::operator ++() -{ - if( m && (ptr += elemSize) >= sliceEnd ) - { - ptr -= elemSize; - seek(1, true); - } - return *this; -} - -inline MatConstIterator MatConstIterator::operator ++(int) -{ - MatConstIterator b = *this; - *this += 1; - return b; -} - -template inline MatConstIterator_<_Tp>::MatConstIterator_() {} - -template inline MatConstIterator_<_Tp>::MatConstIterator_(const Mat_<_Tp>* _m) - : MatConstIterator(_m) {} - -template inline MatConstIterator_<_Tp>:: - MatConstIterator_(const Mat_<_Tp>* _m, int _row, int _col) - : MatConstIterator(_m, _row, _col) {} - -template inline MatConstIterator_<_Tp>:: - MatConstIterator_(const Mat_<_Tp>* _m, Point _pt) - : MatConstIterator(_m, _pt) {} - -template inline MatConstIterator_<_Tp>:: - MatConstIterator_(const MatConstIterator_& it) - : MatConstIterator(it) {} - -template inline MatConstIterator_<_Tp>& - MatConstIterator_<_Tp>::operator = (const MatConstIterator_& it ) -{ - MatConstIterator::operator = (it); - return *this; -} - -template inline _Tp MatConstIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); } - -template inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator += (ptrdiff_t ofs) -{ - MatConstIterator::operator += (ofs); - return *this; -} - -template inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator -= (ptrdiff_t ofs) -{ return (*this += -ofs); } - -template inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator --() -{ - MatConstIterator::operator --(); - return *this; -} - -template inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator --(int) -{ - MatConstIterator_ b = *this; - MatConstIterator::operator --(); - return b; -} - -template inline MatConstIterator_<_Tp>& MatConstIterator_<_Tp>::operator ++() -{ - MatConstIterator::operator ++(); - return *this; -} - -template inline MatConstIterator_<_Tp> MatConstIterator_<_Tp>::operator ++(int) -{ - MatConstIterator_ b = *this; - MatConstIterator::operator ++(); - return b; -} - -template inline MatIterator_<_Tp>::MatIterator_() : MatConstIterator_<_Tp>() {} - -template inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m) - : MatConstIterator_<_Tp>(_m) {} - -template inline MatIterator_<_Tp>::MatIterator_(Mat_<_Tp>* _m, int _row, int _col) - : MatConstIterator_<_Tp>(_m, _row, _col) {} - -template inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, Point _pt) - : MatConstIterator_<_Tp>(_m, _pt) {} - -template inline MatIterator_<_Tp>::MatIterator_(const Mat_<_Tp>* _m, const int* _idx) - : MatConstIterator_<_Tp>(_m, _idx) {} - -template inline MatIterator_<_Tp>::MatIterator_(const MatIterator_& it) - : MatConstIterator_<_Tp>(it) {} - -template inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator = (const MatIterator_<_Tp>& it ) -{ - MatConstIterator::operator = (it); - return *this; -} - -template inline _Tp& MatIterator_<_Tp>::operator *() const { return *(_Tp*)(this->ptr); } - -template inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator += (ptrdiff_t ofs) -{ - MatConstIterator::operator += (ofs); - return *this; -} - -template inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator -= (ptrdiff_t ofs) -{ - MatConstIterator::operator += (-ofs); - return *this; -} - -template inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator --() -{ - MatConstIterator::operator --(); - return *this; -} - -template inline MatIterator_<_Tp> MatIterator_<_Tp>::operator --(int) -{ - MatIterator_ b = *this; - MatConstIterator::operator --(); - return b; -} - -template inline MatIterator_<_Tp>& MatIterator_<_Tp>::operator ++() -{ - MatConstIterator::operator ++(); - return *this; -} - -template inline MatIterator_<_Tp> MatIterator_<_Tp>::operator ++(int) -{ - MatIterator_ b = *this; - MatConstIterator::operator ++(); - return b; -} - -template inline Point MatConstIterator_<_Tp>::pos() const -{ - if( !m ) - return Point(); - CV_DbgAssert( m->dims <= 2 ); - if( m->isContinuous() ) - { - ptrdiff_t ofs = (const _Tp*)ptr - (const _Tp*)m->data; - int y = (int)(ofs / m->cols), x = (int)(ofs - (ptrdiff_t)y*m->cols); - return Point(x, y); - } - else - { - ptrdiff_t ofs = (uchar*)ptr - m->data; - int y = (int)(ofs / m->step), x = (int)((ofs - y*m->step)/sizeof(_Tp)); - return Point(x, y); - } -} - -static inline bool -operator == (const MatConstIterator& a, const MatConstIterator& b) -{ return a.m == b.m && a.ptr == b.ptr; } - -template static inline bool -operator != (const MatConstIterator& a, const MatConstIterator& b) -{ return !(a == b); } - -template static inline bool -operator == (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b) -{ return a.m == b.m && a.ptr == b.ptr; } - -template static inline bool -operator != (const MatConstIterator_<_Tp>& a, const MatConstIterator_<_Tp>& b) -{ return a.m != b.m || a.ptr != b.ptr; } - -template static inline bool -operator == (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b) -{ return a.m == b.m && a.ptr == b.ptr; } - -template static inline bool -operator != (const MatIterator_<_Tp>& a, const MatIterator_<_Tp>& b) -{ return a.m != b.m || a.ptr != b.ptr; } - -static inline bool -operator < (const MatConstIterator& a, const MatConstIterator& b) -{ return a.ptr < b.ptr; } - -static inline bool -operator > (const MatConstIterator& a, const MatConstIterator& b) -{ return a.ptr > b.ptr; } - -static inline bool -operator <= (const MatConstIterator& a, const MatConstIterator& b) -{ return a.ptr <= b.ptr; } - -static inline bool -operator >= (const MatConstIterator& a, const MatConstIterator& b) -{ return a.ptr >= b.ptr; } - -CV_EXPORTS ptrdiff_t operator - (const MatConstIterator& b, const MatConstIterator& a); - -static inline MatConstIterator operator + (const MatConstIterator& a, ptrdiff_t ofs) -{ MatConstIterator b = a; return b += ofs; } - -static inline MatConstIterator operator + (ptrdiff_t ofs, const MatConstIterator& a) -{ MatConstIterator b = a; return b += ofs; } - -static inline MatConstIterator operator - (const MatConstIterator& a, ptrdiff_t ofs) -{ MatConstIterator b = a; return b += -ofs; } - -template static inline MatConstIterator_<_Tp> -operator + (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs) -{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; } - -template static inline MatConstIterator_<_Tp> -operator + (ptrdiff_t ofs, const MatConstIterator_<_Tp>& a) -{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatConstIterator_<_Tp>&)t; } - -template static inline MatConstIterator_<_Tp> -operator - (const MatConstIterator_<_Tp>& a, ptrdiff_t ofs) -{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatConstIterator_<_Tp>&)t; } - -inline uchar* MatConstIterator::operator [](ptrdiff_t i) const -{ return *(*this + i); } - -template inline _Tp MatConstIterator_<_Tp>::operator [](ptrdiff_t i) const -{ return *(_Tp*)MatConstIterator::operator [](i); } - -template static inline MatIterator_<_Tp> -operator + (const MatIterator_<_Tp>& a, ptrdiff_t ofs) -{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; } - -template static inline MatIterator_<_Tp> -operator + (ptrdiff_t ofs, const MatIterator_<_Tp>& a) -{ MatConstIterator t = (const MatConstIterator&)a + ofs; return (MatIterator_<_Tp>&)t; } - -template static inline MatIterator_<_Tp> -operator - (const MatIterator_<_Tp>& a, ptrdiff_t ofs) -{ MatConstIterator t = (const MatConstIterator&)a - ofs; return (MatIterator_<_Tp>&)t; } - -template inline _Tp& MatIterator_<_Tp>::operator [](ptrdiff_t i) const -{ return *(*this + i); } - -template inline MatConstIterator_<_Tp> Mat_<_Tp>::begin() const -{ return Mat::begin<_Tp>(); } - -template inline MatConstIterator_<_Tp> Mat_<_Tp>::end() const -{ return Mat::end<_Tp>(); } - -template inline MatIterator_<_Tp> Mat_<_Tp>::begin() -{ return Mat::begin<_Tp>(); } - -template inline MatIterator_<_Tp> Mat_<_Tp>::end() -{ return Mat::end<_Tp>(); } - -template inline MatCommaInitializer_<_Tp>::MatCommaInitializer_(Mat_<_Tp>* _m) : it(_m) {} - -template template inline MatCommaInitializer_<_Tp>& -MatCommaInitializer_<_Tp>::operator , (T2 v) -{ - CV_DbgAssert( this->it < ((const Mat_<_Tp>*)this->it.m)->end() ); - *this->it = _Tp(v); ++this->it; - return *this; -} - -template inline Mat_<_Tp> MatCommaInitializer_<_Tp>::operator *() const -{ - CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() ); - return Mat_<_Tp>(*this->it.m); -} - -template inline MatCommaInitializer_<_Tp>::operator Mat_<_Tp>() const -{ - CV_DbgAssert( this->it == ((const Mat_<_Tp>*)this->it.m)->end() ); - return Mat_<_Tp>(*this->it.m); -} - -template static inline MatCommaInitializer_<_Tp> -operator << (const Mat_<_Tp>& m, T2 val) -{ - MatCommaInitializer_<_Tp> commaInitializer((Mat_<_Tp>*)&m); - return (commaInitializer, val); -} - -//////////////////////////////// SparseMat //////////////////////////////// - -inline SparseMat::SparseMat() -: flags(MAGIC_VAL), hdr(0) -{ -} - -inline SparseMat::SparseMat(int _dims, const int* _sizes, int _type) -: flags(MAGIC_VAL), hdr(0) -{ - create(_dims, _sizes, _type); -} - -inline SparseMat::SparseMat(const SparseMat& m) -: flags(m.flags), hdr(m.hdr) -{ - addref(); -} - -inline SparseMat::~SparseMat() -{ - release(); -} - -inline SparseMat& SparseMat::operator = (const SparseMat& m) -{ - if( this != &m ) - { - if( m.hdr ) - CV_XADD(&m.hdr->refcount, 1); - release(); - flags = m.flags; - hdr = m.hdr; - } - return *this; -} - -inline SparseMat& SparseMat::operator = (const Mat& m) -{ return (*this = SparseMat(m)); } - -inline SparseMat SparseMat::clone() const -{ - SparseMat temp; - this->copyTo(temp); - return temp; -} - - -inline void SparseMat::assignTo( SparseMat& m, int _type ) const -{ - if( _type < 0 ) - m = *this; - else - convertTo(m, _type); -} - -inline void SparseMat::addref() -{ if( hdr ) CV_XADD(&hdr->refcount, 1); } - -inline void SparseMat::release() -{ - if( hdr && CV_XADD(&hdr->refcount, -1) == 1 ) - delete hdr; - hdr = 0; -} - -inline size_t SparseMat::elemSize() const -{ return CV_ELEM_SIZE(flags); } - -inline size_t SparseMat::elemSize1() const -{ return CV_ELEM_SIZE1(flags); } - -inline int SparseMat::type() const -{ return CV_MAT_TYPE(flags); } - -inline int SparseMat::depth() const -{ return CV_MAT_DEPTH(flags); } - -inline int SparseMat::channels() const -{ return CV_MAT_CN(flags); } - -inline const int* SparseMat::size() const -{ - return hdr ? hdr->size : 0; -} - -inline int SparseMat::size(int i) const -{ - if( hdr ) - { - CV_DbgAssert((unsigned)i < (unsigned)hdr->dims); - return hdr->size[i]; - } - return 0; -} - -inline int SparseMat::dims() const -{ - return hdr ? hdr->dims : 0; -} - -inline size_t SparseMat::nzcount() const -{ - return hdr ? hdr->nodeCount : 0; -} - -inline size_t SparseMat::hash(int i0) const -{ - return (size_t)i0; -} - -inline size_t SparseMat::hash(int i0, int i1) const -{ - return (size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1; -} - -inline size_t SparseMat::hash(int i0, int i1, int i2) const -{ - return ((size_t)(unsigned)i0*HASH_SCALE + (unsigned)i1)*HASH_SCALE + (unsigned)i2; -} - -inline size_t SparseMat::hash(const int* idx) const -{ - size_t h = (unsigned)idx[0]; - if( !hdr ) - return 0; - int i, d = hdr->dims; - for( i = 1; i < d; i++ ) - h = h*HASH_SCALE + (unsigned)idx[i]; - return h; -} - -template inline _Tp& SparseMat::ref(int i0, size_t* hashval) -{ return *(_Tp*)((SparseMat*)this)->ptr(i0, true, hashval); } - -template inline _Tp& SparseMat::ref(int i0, int i1, size_t* hashval) -{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, true, hashval); } - -template inline _Tp& SparseMat::ref(int i0, int i1, int i2, size_t* hashval) -{ return *(_Tp*)((SparseMat*)this)->ptr(i0, i1, i2, true, hashval); } - -template inline _Tp& SparseMat::ref(const int* idx, size_t* hashval) -{ return *(_Tp*)((SparseMat*)this)->ptr(idx, true, hashval); } - -template inline _Tp SparseMat::value(int i0, size_t* hashval) const -{ - const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval); - return p ? *p : _Tp(); -} - -template inline _Tp SparseMat::value(int i0, int i1, size_t* hashval) const -{ - const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval); - return p ? *p : _Tp(); -} - -template inline _Tp SparseMat::value(int i0, int i1, int i2, size_t* hashval) const -{ - const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval); - return p ? *p : _Tp(); -} - -template inline _Tp SparseMat::value(const int* idx, size_t* hashval) const -{ - const _Tp* p = (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval); - return p ? *p : _Tp(); -} - -template inline const _Tp* SparseMat::find(int i0, size_t* hashval) const -{ return (const _Tp*)((SparseMat*)this)->ptr(i0, false, hashval); } - -template inline const _Tp* SparseMat::find(int i0, int i1, size_t* hashval) const -{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, false, hashval); } - -template inline const _Tp* SparseMat::find(int i0, int i1, int i2, size_t* hashval) const -{ return (const _Tp*)((SparseMat*)this)->ptr(i0, i1, i2, false, hashval); } - -template inline const _Tp* SparseMat::find(const int* idx, size_t* hashval) const -{ return (const _Tp*)((SparseMat*)this)->ptr(idx, false, hashval); } - -template inline _Tp& SparseMat::value(Node* n) -{ return *(_Tp*)((uchar*)n + hdr->valueOffset); } - -template inline const _Tp& SparseMat::value(const Node* n) const -{ return *(const _Tp*)((const uchar*)n + hdr->valueOffset); } - -inline SparseMat::Node* SparseMat::node(size_t nidx) -{ return (Node*)(void*)&hdr->pool[nidx]; } - -inline const SparseMat::Node* SparseMat::node(size_t nidx) const -{ return (const Node*)(void*)&hdr->pool[nidx]; } - -inline SparseMatIterator SparseMat::begin() -{ return SparseMatIterator(this); } - -inline SparseMatConstIterator SparseMat::begin() const -{ return SparseMatConstIterator(this); } - -inline SparseMatIterator SparseMat::end() -{ SparseMatIterator it(this); it.seekEnd(); return it; } - -inline SparseMatConstIterator SparseMat::end() const -{ SparseMatConstIterator it(this); it.seekEnd(); return it; } - -template inline SparseMatIterator_<_Tp> SparseMat::begin() -{ return SparseMatIterator_<_Tp>(this); } - -template inline SparseMatConstIterator_<_Tp> SparseMat::begin() const -{ return SparseMatConstIterator_<_Tp>(this); } - -template inline SparseMatIterator_<_Tp> SparseMat::end() -{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; } - -template inline SparseMatConstIterator_<_Tp> SparseMat::end() const -{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; } - - -inline SparseMatConstIterator::SparseMatConstIterator() -: m(0), hashidx(0), ptr(0) -{ -} - -inline SparseMatConstIterator::SparseMatConstIterator(const SparseMatConstIterator& it) -: m(it.m), hashidx(it.hashidx), ptr(it.ptr) -{ -} - -static inline bool operator == (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2) -{ return it1.m == it2.m && it1.ptr == it2.ptr; } - -static inline bool operator != (const SparseMatConstIterator& it1, const SparseMatConstIterator& it2) -{ return !(it1 == it2); } - - -inline SparseMatConstIterator& SparseMatConstIterator::operator = (const SparseMatConstIterator& it) -{ - if( this != &it ) - { - m = it.m; - hashidx = it.hashidx; - ptr = it.ptr; - } - return *this; -} - -template inline const _Tp& SparseMatConstIterator::value() const -{ return *(_Tp*)ptr; } - -inline const SparseMat::Node* SparseMatConstIterator::node() const -{ - return ptr && m && m->hdr ? - (const SparseMat::Node*)(void*)(ptr - m->hdr->valueOffset) : 0; -} - -inline SparseMatConstIterator SparseMatConstIterator::operator ++(int) -{ - SparseMatConstIterator it = *this; - ++*this; - return it; -} - - -inline void SparseMatConstIterator::seekEnd() -{ - if( m && m->hdr ) - { - hashidx = m->hdr->hashtab.size(); - ptr = 0; - } -} - -inline SparseMatIterator::SparseMatIterator() -{} - -inline SparseMatIterator::SparseMatIterator(SparseMat* _m) -: SparseMatConstIterator(_m) -{} - -inline SparseMatIterator::SparseMatIterator(const SparseMatIterator& it) -: SparseMatConstIterator(it) -{ -} - -inline SparseMatIterator& SparseMatIterator::operator = (const SparseMatIterator& it) -{ - (SparseMatConstIterator&)*this = it; - return *this; -} - -template inline _Tp& SparseMatIterator::value() const -{ return *(_Tp*)ptr; } - -inline SparseMat::Node* SparseMatIterator::node() const -{ - return (SparseMat::Node*)SparseMatConstIterator::node(); -} - -inline SparseMatIterator& SparseMatIterator::operator ++() -{ - SparseMatConstIterator::operator ++(); - return *this; -} - -inline SparseMatIterator SparseMatIterator::operator ++(int) -{ - SparseMatIterator it = *this; - ++*this; - return it; -} - - -template inline SparseMat_<_Tp>::SparseMat_() -{ flags = MAGIC_VAL | DataType<_Tp>::type; } - -template inline SparseMat_<_Tp>::SparseMat_(int _dims, const int* _sizes) -: SparseMat(_dims, _sizes, DataType<_Tp>::type) -{} - -template inline SparseMat_<_Tp>::SparseMat_(const SparseMat& m) -{ - if( m.type() == DataType<_Tp>::type ) - *this = (const SparseMat_<_Tp>&)m; - else - m.convertTo(*this, DataType<_Tp>::type); -} - -template inline SparseMat_<_Tp>::SparseMat_(const SparseMat_<_Tp>& m) -{ - this->flags = m.flags; - this->hdr = m.hdr; - if( this->hdr ) - CV_XADD(&this->hdr->refcount, 1); -} - -template inline SparseMat_<_Tp>::SparseMat_(const Mat& m) -{ - SparseMat sm(m); - *this = sm; -} - -template inline SparseMat_<_Tp>::SparseMat_(const CvSparseMat* m) -{ - SparseMat sm(m); - *this = sm; -} - -template inline SparseMat_<_Tp>& -SparseMat_<_Tp>::operator = (const SparseMat_<_Tp>& m) -{ - if( this != &m ) - { - if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); - release(); - flags = m.flags; - hdr = m.hdr; - } - return *this; -} - -template inline SparseMat_<_Tp>& -SparseMat_<_Tp>::operator = (const SparseMat& m) -{ - if( m.type() == DataType<_Tp>::type ) - return (*this = (const SparseMat_<_Tp>&)m); - m.convertTo(*this, DataType<_Tp>::type); - return *this; -} - -template inline SparseMat_<_Tp>& -SparseMat_<_Tp>::operator = (const Mat& m) -{ return (*this = SparseMat(m)); } - -template inline SparseMat_<_Tp> -SparseMat_<_Tp>::clone() const -{ - SparseMat_<_Tp> m; - this->copyTo(m); - return m; -} - -template inline void -SparseMat_<_Tp>::create(int _dims, const int* _sizes) -{ - SparseMat::create(_dims, _sizes, DataType<_Tp>::type); -} - -template inline -SparseMat_<_Tp>::operator CvSparseMat*() const -{ - return SparseMat::operator CvSparseMat*(); -} - -template inline int SparseMat_<_Tp>::type() const -{ return DataType<_Tp>::type; } - -template inline int SparseMat_<_Tp>::depth() const -{ return DataType<_Tp>::depth; } - -template inline int SparseMat_<_Tp>::channels() const -{ return DataType<_Tp>::channels; } - -template inline _Tp& -SparseMat_<_Tp>::ref(int i0, size_t* hashval) -{ return SparseMat::ref<_Tp>(i0, hashval); } - -template inline _Tp -SparseMat_<_Tp>::operator()(int i0, size_t* hashval) const -{ return SparseMat::value<_Tp>(i0, hashval); } - -template inline _Tp& -SparseMat_<_Tp>::ref(int i0, int i1, size_t* hashval) -{ return SparseMat::ref<_Tp>(i0, i1, hashval); } - -template inline _Tp -SparseMat_<_Tp>::operator()(int i0, int i1, size_t* hashval) const -{ return SparseMat::value<_Tp>(i0, i1, hashval); } - -template inline _Tp& -SparseMat_<_Tp>::ref(int i0, int i1, int i2, size_t* hashval) -{ return SparseMat::ref<_Tp>(i0, i1, i2, hashval); } - -template inline _Tp -SparseMat_<_Tp>::operator()(int i0, int i1, int i2, size_t* hashval) const -{ return SparseMat::value<_Tp>(i0, i1, i2, hashval); } - -template inline _Tp& -SparseMat_<_Tp>::ref(const int* idx, size_t* hashval) -{ return SparseMat::ref<_Tp>(idx, hashval); } - -template inline _Tp -SparseMat_<_Tp>::operator()(const int* idx, size_t* hashval) const -{ return SparseMat::value<_Tp>(idx, hashval); } - -template inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::begin() -{ return SparseMatIterator_<_Tp>(this); } - -template inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::begin() const -{ return SparseMatConstIterator_<_Tp>(this); } - -template inline SparseMatIterator_<_Tp> SparseMat_<_Tp>::end() -{ SparseMatIterator_<_Tp> it(this); it.seekEnd(); return it; } - -template inline SparseMatConstIterator_<_Tp> SparseMat_<_Tp>::end() const -{ SparseMatConstIterator_<_Tp> it(this); it.seekEnd(); return it; } - -template inline -SparseMatConstIterator_<_Tp>::SparseMatConstIterator_() -{} - -template inline -SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat_<_Tp>* _m) -: SparseMatConstIterator(_m) -{} - -template inline -SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMat* _m) -: SparseMatConstIterator(_m) -{ - CV_Assert( _m->type() == DataType<_Tp>::type ); -} - -template inline -SparseMatConstIterator_<_Tp>::SparseMatConstIterator_(const SparseMatConstIterator_<_Tp>& it) -: SparseMatConstIterator(it) -{} - -template inline SparseMatConstIterator_<_Tp>& -SparseMatConstIterator_<_Tp>::operator = (const SparseMatConstIterator_<_Tp>& it) -{ return reinterpret_cast&> - (*reinterpret_cast(this) = - reinterpret_cast(it)); } - -template inline const _Tp& -SparseMatConstIterator_<_Tp>::operator *() const -{ return *(const _Tp*)this->ptr; } - -template inline SparseMatConstIterator_<_Tp>& -SparseMatConstIterator_<_Tp>::operator ++() -{ - SparseMatConstIterator::operator ++(); - return *this; -} - -template inline SparseMatConstIterator_<_Tp> -SparseMatConstIterator_<_Tp>::operator ++(int) -{ - SparseMatConstIterator it = *this; - SparseMatConstIterator::operator ++(); - return it; -} - -template inline -SparseMatIterator_<_Tp>::SparseMatIterator_() -{} - -template inline -SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat_<_Tp>* _m) -: SparseMatConstIterator_<_Tp>(_m) -{} - -template inline -SparseMatIterator_<_Tp>::SparseMatIterator_(SparseMat* _m) -: SparseMatConstIterator_<_Tp>(_m) -{} - -template inline -SparseMatIterator_<_Tp>::SparseMatIterator_(const SparseMatIterator_<_Tp>& it) -: SparseMatConstIterator_<_Tp>(it) -{} - -template inline SparseMatIterator_<_Tp>& -SparseMatIterator_<_Tp>::operator = (const SparseMatIterator_<_Tp>& it) -{ return reinterpret_cast&> - (*reinterpret_cast(this) = - reinterpret_cast(it)); } - -template inline _Tp& -SparseMatIterator_<_Tp>::operator *() const -{ return *(_Tp*)this->ptr; } - -template inline SparseMatIterator_<_Tp>& -SparseMatIterator_<_Tp>::operator ++() -{ - SparseMatConstIterator::operator ++(); - return *this; -} - -template inline SparseMatIterator_<_Tp> -SparseMatIterator_<_Tp>::operator ++(int) -{ - SparseMatIterator it = *this; - SparseMatConstIterator::operator ++(); - return it; -} - -} - -#endif -#endif diff --git a/modules/core/include/opencv2/core/opengl_interop.hpp b/modules/core/include/opencv2/core/opengl_interop.hpp deleted file mode 100644 index 7ecaa8e..0000000 --- a/modules/core/include/opencv2/core/opengl_interop.hpp +++ /dev/null @@ -1,284 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OPENGL_INTEROP_HPP__ -#define __OPENCV_OPENGL_INTEROP_HPP__ - -#ifdef __cplusplus - -#include "opencv2/core/core.hpp" -#include "opencv2/core/opengl_interop_deprecated.hpp" - -namespace cv { namespace ogl { - -/////////////////// OpenGL Objects /////////////////// - -//! Smart pointer for OpenGL buffer memory with reference counting. -class CV_EXPORTS Buffer -{ -public: - enum Target - { - ARRAY_BUFFER = 0x8892, //!< The buffer will be used as a source for vertex data - ELEMENT_ARRAY_BUFFER = 0x8893, //!< The buffer will be used for indices (in glDrawElements, for example) - PIXEL_PACK_BUFFER = 0x88EB, //!< The buffer will be used for reading from OpenGL textures - PIXEL_UNPACK_BUFFER = 0x88EC //!< The buffer will be used for writing to OpenGL textures - }; - - enum Access - { - READ_ONLY = 0x88B8, - WRITE_ONLY = 0x88B9, - READ_WRITE = 0x88BA - }; - - //! create empty buffer - Buffer(); - - //! create buffer from existed buffer id - Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease = false); - Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease = false); - - //! create buffer - Buffer(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); - Buffer(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); - - //! copy from host/device memory - explicit Buffer(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false); - - //! create buffer - void create(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); - void create(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false) { create(asize.height, asize.width, atype, target, autoRelease); } - - //! release memory and delete buffer object - void release(); - - //! set auto release mode (if true, release will be called in object's destructor) - void setAutoRelease(bool flag); - - //! copy from host/device memory - void copyFrom(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false); - - //! copy to host/device memory - void copyTo(OutputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false) const; - - //! create copy of current buffer - Buffer clone(Target target = ARRAY_BUFFER, bool autoRelease = false) const; - - //! bind buffer for specified target - void bind(Target target) const; - - //! unbind any buffers from specified target - static void unbind(Target target); - - //! map to host memory - Mat mapHost(Access access); - void unmapHost(); - - //! map to device memory - gpu::GpuMat mapDevice(); - void unmapDevice(); - - int rows() const { return rows_; } - int cols() const { return cols_; } - Size size() const { return Size(cols_, rows_); } - bool empty() const { return rows_ == 0 || cols_ == 0; } - - int type() const { return type_; } - int depth() const { return CV_MAT_DEPTH(type_); } - int channels() const { return CV_MAT_CN(type_); } - int elemSize() const { return CV_ELEM_SIZE(type_); } - int elemSize1() const { return CV_ELEM_SIZE1(type_); } - - unsigned int bufId() const; - - class Impl; - -private: - Ptr impl_; - int rows_; - int cols_; - int type_; -}; - -//! Smart pointer for OpenGL 2D texture memory with reference counting. -class CV_EXPORTS Texture2D -{ -public: - enum Format - { - NONE = 0, - DEPTH_COMPONENT = 0x1902, //!< Depth - RGB = 0x1907, //!< Red, Green, Blue - RGBA = 0x1908 //!< Red, Green, Blue, Alpha - }; - - //! create empty texture - Texture2D(); - - //! create texture from existed texture id - Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease = false); - Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease = false); - - //! create texture - Texture2D(int arows, int acols, Format aformat, bool autoRelease = false); - Texture2D(Size asize, Format aformat, bool autoRelease = false); - - //! copy from host/device memory - explicit Texture2D(InputArray arr, bool autoRelease = false); - - //! create texture - void create(int arows, int acols, Format aformat, bool autoRelease = false); - void create(Size asize, Format aformat, bool autoRelease = false) { create(asize.height, asize.width, aformat, autoRelease); } - - //! release memory and delete texture object - void release(); - - //! set auto release mode (if true, release will be called in object's destructor) - void setAutoRelease(bool flag); - - //! copy from host/device memory - void copyFrom(InputArray arr, bool autoRelease = false); - - //! copy to host/device memory - void copyTo(OutputArray arr, int ddepth = CV_32F, bool autoRelease = false) const; - - //! bind texture to current active texture unit for GL_TEXTURE_2D target - void bind() const; - - int rows() const { return rows_; } - int cols() const { return cols_; } - Size size() const { return Size(cols_, rows_); } - bool empty() const { return rows_ == 0 || cols_ == 0; } - - Format format() const { return format_; } - - unsigned int texId() const; - - class Impl; - -private: - Ptr impl_; - int rows_; - int cols_; - Format format_; -}; - -//! OpenGL Arrays -class CV_EXPORTS Arrays -{ -public: - Arrays(); - - void setVertexArray(InputArray vertex); - void resetVertexArray(); - - void setColorArray(InputArray color); - void resetColorArray(); - - void setNormalArray(InputArray normal); - void resetNormalArray(); - - void setTexCoordArray(InputArray texCoord); - void resetTexCoordArray(); - - void release(); - - void setAutoRelease(bool flag); - - void bind() const; - - int size() const { return size_; } - bool empty() const { return size_ == 0; } - -private: - int size_; - Buffer vertex_; - Buffer color_; - Buffer normal_; - Buffer texCoord_; -}; - -/////////////////// Render Functions /////////////////// - -//! render texture rectangle in window -CV_EXPORTS void render(const Texture2D& tex, - Rect_ wndRect = Rect_(0.0, 0.0, 1.0, 1.0), - Rect_ texRect = Rect_(0.0, 0.0, 1.0, 1.0)); - -//! render mode -enum { - POINTS = 0x0000, - LINES = 0x0001, - LINE_LOOP = 0x0002, - LINE_STRIP = 0x0003, - TRIANGLES = 0x0004, - TRIANGLE_STRIP = 0x0005, - TRIANGLE_FAN = 0x0006, - QUADS = 0x0007, - QUAD_STRIP = 0x0008, - POLYGON = 0x0009 -}; - -//! render OpenGL arrays -CV_EXPORTS void render(const Arrays& arr, int mode = POINTS, Scalar color = Scalar::all(255)); -CV_EXPORTS void render(const Arrays& arr, InputArray indices, int mode = POINTS, Scalar color = Scalar::all(255)); - -}} // namespace cv::gl - -namespace cv { namespace gpu { - -//! set a CUDA device to use OpenGL interoperability -CV_EXPORTS void setGlDevice(int device = 0); - -}} - -namespace cv { - -template <> CV_EXPORTS void Ptr::delete_obj(); -template <> CV_EXPORTS void Ptr::delete_obj(); - -} - -#endif // __cplusplus - -#endif // __OPENCV_OPENGL_INTEROP_HPP__ diff --git a/modules/core/include/opencv2/core/opengl_interop_deprecated.hpp b/modules/core/include/opencv2/core/opengl_interop_deprecated.hpp deleted file mode 100644 index 5bcc5ad..0000000 --- a/modules/core/include/opencv2/core/opengl_interop_deprecated.hpp +++ /dev/null @@ -1,330 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__ -#define __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__ - -#ifdef __cplusplus - -#include "opencv2/core/core.hpp" - -namespace cv -{ -//! Smart pointer for OpenGL buffer memory with reference counting. -class CV_EXPORTS GlBuffer -{ -public: - enum Usage - { - ARRAY_BUFFER = 0x8892, // buffer will use for OpenGL arrays (vertices, colors, normals, etc) - TEXTURE_BUFFER = 0x88EC // buffer will ise for OpenGL textures - }; - - //! create empty buffer - explicit GlBuffer(Usage usage); - - //! create buffer - GlBuffer(int rows, int cols, int type, Usage usage); - GlBuffer(Size size, int type, Usage usage); - - //! copy from host/device memory - GlBuffer(InputArray mat, Usage usage); - - void create(int rows, int cols, int type, Usage usage); - void create(Size size, int type, Usage usage); - void create(int rows, int cols, int type); - void create(Size size, int type); - - void release(); - - //! copy from host/device memory - void copyFrom(InputArray mat); - - void bind() const; - void unbind() const; - - //! map to host memory - Mat mapHost(); - void unmapHost(); - - //! map to device memory - gpu::GpuMat mapDevice(); - void unmapDevice(); - - inline int rows() const { return rows_; } - inline int cols() const { return cols_; } - inline Size size() const { return Size(cols_, rows_); } - inline bool empty() const { return rows_ == 0 || cols_ == 0; } - - inline int type() const { return type_; } - inline int depth() const { return CV_MAT_DEPTH(type_); } - inline int channels() const { return CV_MAT_CN(type_); } - inline int elemSize() const { return CV_ELEM_SIZE(type_); } - inline int elemSize1() const { return CV_ELEM_SIZE1(type_); } - - inline Usage usage() const { return usage_; } - - class Impl; -private: - int rows_; - int cols_; - int type_; - Usage usage_; - - Ptr impl_; -}; - -template <> CV_EXPORTS void Ptr::delete_obj(); - -//! Smart pointer for OpenGL 2d texture memory with reference counting. -class CV_EXPORTS GlTexture -{ -public: - //! create empty texture - GlTexture(); - - //! create texture - GlTexture(int rows, int cols, int type); - GlTexture(Size size, int type); - - //! copy from host/device memory - explicit GlTexture(InputArray mat, bool bgra = true); - - void create(int rows, int cols, int type); - void create(Size size, int type); - void release(); - - //! copy from host/device memory - void copyFrom(InputArray mat, bool bgra = true); - - void bind() const; - void unbind() const; - - inline int rows() const { return rows_; } - inline int cols() const { return cols_; } - inline Size size() const { return Size(cols_, rows_); } - inline bool empty() const { return rows_ == 0 || cols_ == 0; } - - inline int type() const { return type_; } - inline int depth() const { return CV_MAT_DEPTH(type_); } - inline int channels() const { return CV_MAT_CN(type_); } - inline int elemSize() const { return CV_ELEM_SIZE(type_); } - inline int elemSize1() const { return CV_ELEM_SIZE1(type_); } - - class Impl; -private: - int rows_; - int cols_; - int type_; - - Ptr impl_; - GlBuffer buf_; -}; - -template <> CV_EXPORTS void Ptr::delete_obj(); - -//! OpenGL Arrays -class CV_EXPORTS GlArrays -{ -public: - inline GlArrays() - : vertex_(GlBuffer::ARRAY_BUFFER), color_(GlBuffer::ARRAY_BUFFER), bgra_(true), normal_(GlBuffer::ARRAY_BUFFER), texCoord_(GlBuffer::ARRAY_BUFFER) - { - } - - void setVertexArray(InputArray vertex); - inline void resetVertexArray() { vertex_.release(); } - - void setColorArray(InputArray color, bool bgra = true); - inline void resetColorArray() { color_.release(); } - - void setNormalArray(InputArray normal); - inline void resetNormalArray() { normal_.release(); } - - void setTexCoordArray(InputArray texCoord); - inline void resetTexCoordArray() { texCoord_.release(); } - - void bind() const; - void unbind() const; - - inline int rows() const { return vertex_.rows(); } - inline int cols() const { return vertex_.cols(); } - inline Size size() const { return vertex_.size(); } - inline bool empty() const { return vertex_.empty(); } - -private: - GlBuffer vertex_; - GlBuffer color_; - bool bgra_; - GlBuffer normal_; - GlBuffer texCoord_; -}; - -//! OpenGL Font -class CV_EXPORTS GlFont -{ -public: - enum Weight - { - WEIGHT_LIGHT = 300, - WEIGHT_NORMAL = 400, - WEIGHT_SEMIBOLD = 600, - WEIGHT_BOLD = 700, - WEIGHT_BLACK = 900 - }; - - enum Style - { - STYLE_NORMAL = 0, - STYLE_ITALIC = 1, - STYLE_UNDERLINE = 2 - }; - - static Ptr get(const std::string& family, int height = 12, Weight weight = WEIGHT_NORMAL, Style style = STYLE_NORMAL); - - void draw(const char* str, int len) const; - - inline const std::string& family() const { return family_; } - inline int height() const { return height_; } - inline Weight weight() const { return weight_; } - inline Style style() const { return style_; } - -private: - GlFont(const std::string& family, int height, Weight weight, Style style); - - std::string family_; - int height_; - Weight weight_; - Style style_; - - unsigned int base_; - - GlFont(const GlFont&); - GlFont& operator =(const GlFont&); -}; - -//! render functions - -//! render texture rectangle in window -CV_EXPORTS void render(const GlTexture& tex, - Rect_ wndRect = Rect_(0.0, 0.0, 1.0, 1.0), - Rect_ texRect = Rect_(0.0, 0.0, 1.0, 1.0)); - -//! render mode -namespace RenderMode { - enum { - POINTS = 0x0000, - LINES = 0x0001, - LINE_LOOP = 0x0002, - LINE_STRIP = 0x0003, - TRIANGLES = 0x0004, - TRIANGLE_STRIP = 0x0005, - TRIANGLE_FAN = 0x0006, - QUADS = 0x0007, - QUAD_STRIP = 0x0008, - POLYGON = 0x0009 - }; -} - -//! render OpenGL arrays -CV_EXPORTS void render(const GlArrays& arr, int mode = RenderMode::POINTS, Scalar color = Scalar::all(255)); - -CV_EXPORTS void render(const std::string& str, const Ptr& font, Scalar color, Point2d pos); - -//! OpenGL camera -class CV_EXPORTS GlCamera -{ -public: - GlCamera(); - - void lookAt(Point3d eye, Point3d center, Point3d up); - void setCameraPos(Point3d pos, double yaw, double pitch, double roll); - - void setScale(Point3d scale); - - void setProjectionMatrix(const Mat& projectionMatrix, bool transpose = true); - void setPerspectiveProjection(double fov, double aspect, double zNear, double zFar); - void setOrthoProjection(double left, double right, double bottom, double top, double zNear, double zFar); - - void setupProjectionMatrix() const; - void setupModelViewMatrix() const; - -private: - Point3d eye_; - Point3d center_; - Point3d up_; - - Point3d pos_; - double yaw_; - double pitch_; - double roll_; - - bool useLookAtParams_; - - Point3d scale_; - - Mat projectionMatrix_; - - double fov_; - double aspect_; - - double left_; - double right_; - double bottom_; - double top_; - - double zNear_; - double zFar_; - - bool perspectiveProjection_; -}; - -inline void GlBuffer::create(Size _size, int _type, Usage _usage) { create(_size.height, _size.width, _type, _usage); } -inline void GlBuffer::create(int _rows, int _cols, int _type) { create(_rows, _cols, _type, usage()); } -inline void GlBuffer::create(Size _size, int _type) { create(_size.height, _size.width, _type, usage()); } -inline void GlTexture::create(Size _size, int _type) { create(_size.height, _size.width, _type); } - -} // namespace cv - -#endif // __cplusplus - -#endif // __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__ diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp deleted file mode 100644 index 4ab7e35..0000000 --- a/modules/core/include/opencv2/core/operations.hpp +++ /dev/null @@ -1,4046 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_OPERATIONS_HPP__ -#define __OPENCV_CORE_OPERATIONS_HPP__ - -#ifndef SKIP_INCLUDES - #include - #include -#endif // SKIP_INCLUDES - - -#ifdef __cplusplus - -/////// exchange-add operation for atomic operations on reference counters /////// -#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32) // atomic increment on the linux version of the Intel(tm) compiler - #define CV_XADD(addr,delta) _InterlockedExchangeAdd(const_cast(reinterpret_cast(addr)), delta) -#elif defined __GNUC__ - - #if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && !defined __EMSCRIPTEN__ - #ifdef __ATOMIC_SEQ_CST - #define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), (delta), __ATOMIC_SEQ_CST) - #else - #define CV_XADD(addr, delta) __atomic_fetch_add((_Atomic(int)*)(addr), (delta), 5) - #endif - #elif __GNUC__*10 + __GNUC_MINOR__ >= 42 - - #if !(defined WIN32 || defined _WIN32) && (defined __i486__ || defined __i586__ || \ - defined __i686__ || defined __MMX__ || defined __SSE__ || defined __ppc__) || \ - (defined __GNUC__ && defined _STLPORT_MAJOR) || \ - defined __EMSCRIPTEN__ - - #define CV_XADD __sync_fetch_and_add - #else - #include - #define CV_XADD __gnu_cxx::__exchange_and_add - #endif - - #else - #include - #if __GNUC__*10 + __GNUC_MINOR__ >= 34 - #define CV_XADD __gnu_cxx::__exchange_and_add - #else - #define CV_XADD __exchange_and_add - #endif - #endif - -#elif defined WIN32 || defined _WIN32 || defined WINCE - namespace cv { CV_EXPORTS int _interlockedExchangeAdd(int* addr, int delta); } - #define CV_XADD cv::_interlockedExchangeAdd - -#else - static inline int CV_XADD(int* addr, int delta) - { int tmp = *addr; *addr += delta; return tmp; } -#endif - -#include - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable:4127) //conditional expression is constant -#endif - -namespace cv -{ - -using std::cos; -using std::sin; -using std::max; -using std::min; -using std::exp; -using std::log; -using std::pow; -using std::sqrt; - - -/////////////// saturate_cast (used in image & signal processing) /////////////////// - -template static inline _Tp saturate_cast(uchar v) { return _Tp(v); } -template static inline _Tp saturate_cast(schar v) { return _Tp(v); } -template static inline _Tp saturate_cast(ushort v) { return _Tp(v); } -template static inline _Tp saturate_cast(short v) { return _Tp(v); } -template static inline _Tp saturate_cast(unsigned v) { return _Tp(v); } -template static inline _Tp saturate_cast(int v) { return _Tp(v); } -template static inline _Tp saturate_cast(float v) { return _Tp(v); } -template static inline _Tp saturate_cast(double v) { return _Tp(v); } - -template<> inline uchar saturate_cast(schar v) -{ return (uchar)std::max((int)v, 0); } -template<> inline uchar saturate_cast(ushort v) -{ return (uchar)std::min((unsigned)v, (unsigned)UCHAR_MAX); } -template<> inline uchar saturate_cast(int v) -{ return (uchar)((unsigned)v <= UCHAR_MAX ? v : v > 0 ? UCHAR_MAX : 0); } -template<> inline uchar saturate_cast(short v) -{ return saturate_cast((int)v); } -template<> inline uchar saturate_cast(unsigned v) -{ return (uchar)std::min(v, (unsigned)UCHAR_MAX); } -template<> inline uchar saturate_cast(float v) -{ int iv = cvRound(v); return saturate_cast(iv); } -template<> inline uchar saturate_cast(double v) -{ int iv = cvRound(v); return saturate_cast(iv); } - -template<> inline schar saturate_cast(uchar v) -{ return (schar)std::min((int)v, SCHAR_MAX); } -template<> inline schar saturate_cast(ushort v) -{ return (schar)std::min((unsigned)v, (unsigned)SCHAR_MAX); } -template<> inline schar saturate_cast(int v) -{ - return (schar)((unsigned)(v-SCHAR_MIN) <= (unsigned)UCHAR_MAX ? - v : v > 0 ? SCHAR_MAX : SCHAR_MIN); -} -template<> inline schar saturate_cast(short v) -{ return saturate_cast((int)v); } -template<> inline schar saturate_cast(unsigned v) -{ return (schar)std::min(v, (unsigned)SCHAR_MAX); } - -template<> inline schar saturate_cast(float v) -{ int iv = cvRound(v); return saturate_cast(iv); } -template<> inline schar saturate_cast(double v) -{ int iv = cvRound(v); return saturate_cast(iv); } - -template<> inline ushort saturate_cast(schar v) -{ return (ushort)std::max((int)v, 0); } -template<> inline ushort saturate_cast(short v) -{ return (ushort)std::max((int)v, 0); } -template<> inline ushort saturate_cast(int v) -{ return (ushort)((unsigned)v <= (unsigned)USHRT_MAX ? v : v > 0 ? USHRT_MAX : 0); } -template<> inline ushort saturate_cast(unsigned v) -{ return (ushort)std::min(v, (unsigned)USHRT_MAX); } -template<> inline ushort saturate_cast(float v) -{ int iv = cvRound(v); return saturate_cast(iv); } -template<> inline ushort saturate_cast(double v) -{ int iv = cvRound(v); return saturate_cast(iv); } - -template<> inline short saturate_cast(ushort v) -{ return (short)std::min((int)v, SHRT_MAX); } -template<> inline short saturate_cast(int v) -{ - return (short)((unsigned)(v - SHRT_MIN) <= (unsigned)USHRT_MAX ? - v : v > 0 ? SHRT_MAX : SHRT_MIN); -} -template<> inline short saturate_cast(unsigned v) -{ return (short)std::min(v, (unsigned)SHRT_MAX); } -template<> inline short saturate_cast(float v) -{ int iv = cvRound(v); return saturate_cast(iv); } -template<> inline short saturate_cast(double v) -{ int iv = cvRound(v); return saturate_cast(iv); } - -template<> inline int saturate_cast(float v) { return cvRound(v); } -template<> inline int saturate_cast(double v) { return cvRound(v); } - -// we intentionally do not clip negative numbers, to make -1 become 0xffffffff etc. -template<> inline unsigned saturate_cast(float v){ return cvRound(v); } -template<> inline unsigned saturate_cast(double v) { return cvRound(v); } - -inline int fast_abs(uchar v) { return v; } -inline int fast_abs(schar v) { return std::abs((int)v); } -inline int fast_abs(ushort v) { return v; } -inline int fast_abs(short v) { return std::abs((int)v); } -inline int fast_abs(int v) { return std::abs(v); } -inline float fast_abs(float v) { return std::abs(v); } -inline double fast_abs(double v) { return std::abs(v); } - -//////////////////////////////// Matx ///////////////////////////////// - - -template inline Matx<_Tp, m, n>::Matx() -{ - for(int i = 0; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0) -{ - val[0] = v0; - for(int i = 1; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1) -{ - assert(channels >= 2); - val[0] = v0; val[1] = v1; - for(int i = 2; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2) -{ - assert(channels >= 3); - val[0] = v0; val[1] = v1; val[2] = v2; - for(int i = 3; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3) -{ - assert(channels >= 4); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - for(int i = 4; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4) -{ - assert(channels >= 5); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; val[4] = v4; - for(int i = 5; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5) -{ - assert(channels >= 6); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; - for(int i = 6; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6) -{ - assert(channels >= 7); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; - for(int i = 7; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7) -{ - assert(channels >= 8); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7; - for(int i = 8; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8) -{ - assert(channels >= 9); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7; - val[8] = v8; - for(int i = 9; i < channels; i++) val[i] = _Tp(0); -} - -template inline Matx<_Tp, m, n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9) -{ - assert(channels >= 10); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7; - val[8] = v8; val[9] = v9; - for(int i = 10; i < channels; i++) val[i] = _Tp(0); -} - - -template -inline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9, _Tp v10, _Tp v11) -{ - assert(channels == 12); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7; - val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11; -} - -template -inline Matx<_Tp,m,n>::Matx(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9, _Tp v10, _Tp v11, - _Tp v12, _Tp v13, _Tp v14, _Tp v15) -{ - assert(channels == 16); - val[0] = v0; val[1] = v1; val[2] = v2; val[3] = v3; - val[4] = v4; val[5] = v5; val[6] = v6; val[7] = v7; - val[8] = v8; val[9] = v9; val[10] = v10; val[11] = v11; - val[12] = v12; val[13] = v13; val[14] = v14; val[15] = v15; -} - -template inline Matx<_Tp, m, n>::Matx(const _Tp* values) -{ - for( int i = 0; i < channels; i++ ) val[i] = values[i]; -} - -template inline Matx<_Tp, m, n> Matx<_Tp, m, n>::all(_Tp alpha) -{ - Matx<_Tp, m, n> M; - for( int i = 0; i < m*n; i++ ) M.val[i] = alpha; - return M; -} - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::zeros() -{ - return all(0); -} - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::ones() -{ - return all(1); -} - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::eye() -{ - Matx<_Tp,m,n> M; - for(int i = 0; i < MIN(m,n); i++) - M(i,i) = 1; - return M; -} - -template inline _Tp Matx<_Tp, m, n>::dot(const Matx<_Tp, m, n>& M) const -{ - _Tp s = 0; - for( int i = 0; i < m*n; i++ ) s += val[i]*M.val[i]; - return s; -} - - -template inline double Matx<_Tp, m, n>::ddot(const Matx<_Tp, m, n>& M) const -{ - double s = 0; - for( int i = 0; i < m*n; i++ ) s += (double)val[i]*M.val[i]; - return s; -} - - - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::diag(const typename Matx<_Tp,m,n>::diag_type& d) -{ - Matx<_Tp,m,n> M; - for(int i = 0; i < MIN(m,n); i++) - M(i,i) = d(i, 0); - return M; -} - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::randu(_Tp a, _Tp b) -{ - Matx<_Tp,m,n> M; - Mat matM(M, false); - cv::randu(matM, Scalar(a), Scalar(b)); - return M; -} - -template inline -Matx<_Tp,m,n> Matx<_Tp,m,n>::randn(_Tp a, _Tp b) -{ - Matx<_Tp,m,n> M; - Mat matM(M, false); - cv::randn(matM, Scalar(a), Scalar(b)); - return M; -} - -template template -inline Matx<_Tp, m, n>::operator Matx() const -{ - Matx M; - for( int i = 0; i < m*n; i++ ) M.val[i] = saturate_cast(val[i]); - return M; -} - - -template template inline -Matx<_Tp, m1, n1> Matx<_Tp, m, n>::reshape() const -{ - CV_DbgAssert(m1*n1 == m*n); - return (const Matx<_Tp, m1, n1>&)*this; -} - - -template -template inline -Matx<_Tp, m1, n1> Matx<_Tp, m, n>::get_minor(int i, int j) const -{ - CV_DbgAssert(0 <= i && i+m1 <= m && 0 <= j && j+n1 <= n); - Matx<_Tp, m1, n1> s; - for( int di = 0; di < m1; di++ ) - for( int dj = 0; dj < n1; dj++ ) - s(di, dj) = (*this)(i+di, j+dj); - return s; -} - - -template inline -Matx<_Tp, 1, n> Matx<_Tp, m, n>::row(int i) const -{ - CV_DbgAssert((unsigned)i < (unsigned)m); - return Matx<_Tp, 1, n>(&val[i*n]); -} - - -template inline -Matx<_Tp, m, 1> Matx<_Tp, m, n>::col(int j) const -{ - CV_DbgAssert((unsigned)j < (unsigned)n); - Matx<_Tp, m, 1> v; - for( int i = 0; i < m; i++ ) - v.val[i] = val[i*n + j]; - return v; -} - - -template inline -typename Matx<_Tp, m, n>::diag_type Matx<_Tp, m, n>::diag() const -{ - diag_type d; - for( int i = 0; i < MIN(m, n); i++ ) - d.val[i] = val[i*n + i]; - return d; -} - - -template inline -const _Tp& Matx<_Tp, m, n>::operator ()(int i, int j) const -{ - CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n ); - return this->val[i*n + j]; -} - - -template inline -_Tp& Matx<_Tp, m, n>::operator ()(int i, int j) -{ - CV_DbgAssert( (unsigned)i < (unsigned)m && (unsigned)j < (unsigned)n ); - return val[i*n + j]; -} - - -template inline -const _Tp& Matx<_Tp, m, n>::operator ()(int i) const -{ - CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) ); - return val[i]; -} - - -template inline -_Tp& Matx<_Tp, m, n>::operator ()(int i) -{ - CV_DbgAssert( (m == 1 || n == 1) && (unsigned)i < (unsigned)(m+n-1) ); - return val[i]; -} - - -template static inline -Matx<_Tp1, m, n>& operator += (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b) -{ - for( int i = 0; i < m*n; i++ ) - a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]); - return a; -} - - -template static inline -Matx<_Tp1, m, n>& operator -= (Matx<_Tp1, m, n>& a, const Matx<_Tp2, m, n>& b) -{ - for( int i = 0; i < m*n; i++ ) - a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]); - return a; -} - - -template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_AddOp) -{ - for( int i = 0; i < m*n; i++ ) - val[i] = saturate_cast<_Tp>(a.val[i] + b.val[i]); -} - - -template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp) -{ - for( int i = 0; i < m*n; i++ ) - val[i] = saturate_cast<_Tp>(a.val[i] - b.val[i]); -} - - -template template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp) -{ - for( int i = 0; i < m*n; i++ ) - val[i] = saturate_cast<_Tp>(a.val[i] * alpha); -} - - -template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp) -{ - for( int i = 0; i < m*n; i++ ) - val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]); -} - - -template template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp) -{ - for( int i = 0; i < m; i++ ) - for( int j = 0; j < n; j++ ) - { - _Tp s = 0; - for( int k = 0; k < l; k++ ) - s += a(i, k) * b(k, j); - val[i*n + j] = s; - } -} - - -template inline -Matx<_Tp,m,n>::Matx(const Matx<_Tp, n, m>& a, Matx_TOp) -{ - for( int i = 0; i < m; i++ ) - for( int j = 0; j < n; j++ ) - val[i*n + j] = a(j, i); -} - - -template static inline -Matx<_Tp, m, n> operator + (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b) -{ - return Matx<_Tp, m, n>(a, b, Matx_AddOp()); -} - - -template static inline -Matx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b) -{ - return Matx<_Tp, m, n>(a, b, Matx_SubOp()); -} - - -template static inline -Matx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, int alpha) -{ - for( int i = 0; i < m*n; i++ ) - a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha); - return a; -} - -template static inline -Matx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, float alpha) -{ - for( int i = 0; i < m*n; i++ ) - a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha); - return a; -} - -template static inline -Matx<_Tp, m, n>& operator *= (Matx<_Tp, m, n>& a, double alpha) -{ - for( int i = 0; i < m*n; i++ ) - a.val[i] = saturate_cast<_Tp>(a.val[i] * alpha); - return a; -} - -template static inline -Matx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, int alpha) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, float alpha) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator * (const Matx<_Tp, m, n>& a, double alpha) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator * (int alpha, const Matx<_Tp, m, n>& a) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator * (float alpha, const Matx<_Tp, m, n>& a) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator * (double alpha, const Matx<_Tp, m, n>& a) -{ - return Matx<_Tp, m, n>(a, alpha, Matx_ScaleOp()); -} - -template static inline -Matx<_Tp, m, n> operator - (const Matx<_Tp, m, n>& a) -{ - return Matx<_Tp, m, n>(a, -1, Matx_ScaleOp()); -} - - -template static inline -Matx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b) -{ - return Matx<_Tp, m, n>(a, b, Matx_MatMulOp()); -} - - -template static inline -Vec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b) -{ - Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp()); - return reinterpret_cast&>(c); -} - - -template static inline -Point_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b) -{ - Matx<_Tp, 2, 1> tmp = a*Vec<_Tp,2>(b.x, b.y); - return Point_<_Tp>(tmp.val[0], tmp.val[1]); -} - - -template static inline -Point3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point3_<_Tp>& b) -{ - Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, b.z); - return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]); -} - - -template static inline -Point3_<_Tp> operator * (const Matx<_Tp, 3, 3>& a, const Point_<_Tp>& b) -{ - Matx<_Tp, 3, 1> tmp = a*Vec<_Tp,3>(b.x, b.y, 1); - return Point3_<_Tp>(tmp.val[0], tmp.val[1], tmp.val[2]); -} - - -template static inline -Matx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b) -{ - return a*Matx<_Tp, 4, 1>(b.x, b.y, b.z, 1); -} - - -template static inline -Scalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b) -{ - Matx c(Matx(a), b, Matx_MatMulOp()); - return static_cast(c); -} - - -static inline -Scalar operator * (const Matx& a, const Scalar& b) -{ - Matx c(a, b, Matx_MatMulOp()); - return static_cast(c); -} - - -template inline -Matx<_Tp, m, n> Matx<_Tp, m, n>::mul(const Matx<_Tp, m, n>& a) const -{ - return Matx<_Tp, m, n>(*this, a, Matx_MulOp()); -} - - -CV_EXPORTS int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n); -CV_EXPORTS int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n); -CV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n); -CV_EXPORTS bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n); - - -template struct Matx_DetOp -{ - double operator ()(const Matx<_Tp, m, m>& a) const - { - Matx<_Tp, m, m> temp = a; - double p = LU(temp.val, m*sizeof(_Tp), m, 0, 0, 0); - if( p == 0 ) - return p; - for( int i = 0; i < m; i++ ) - p *= temp(i, i); - return 1./p; - } -}; - - -template struct Matx_DetOp<_Tp, 1> -{ - double operator ()(const Matx<_Tp, 1, 1>& a) const - { - return a(0,0); - } -}; - - -template struct Matx_DetOp<_Tp, 2> -{ - double operator ()(const Matx<_Tp, 2, 2>& a) const - { - return a(0,0)*a(1,1) - a(0,1)*a(1,0); - } -}; - - -template struct Matx_DetOp<_Tp, 3> -{ - double operator ()(const Matx<_Tp, 3, 3>& a) const - { - return a(0,0)*(a(1,1)*a(2,2) - a(2,1)*a(1,2)) - - a(0,1)*(a(1,0)*a(2,2) - a(2,0)*a(1,2)) + - a(0,2)*(a(1,0)*a(2,1) - a(2,0)*a(1,1)); - } -}; - -template static inline -double determinant(const Matx<_Tp, m, m>& a) -{ - return Matx_DetOp<_Tp, m>()(a); -} - - -template static inline -double trace(const Matx<_Tp, m, n>& a) -{ - _Tp s = 0; - for( int i = 0; i < std::min(m, n); i++ ) - s += a(i,i); - return s; -} - - -template inline -Matx<_Tp, n, m> Matx<_Tp, m, n>::t() const -{ - return Matx<_Tp, n, m>(*this, Matx_TOp()); -} - - -template struct Matx_FastInvOp -{ - bool operator()(const Matx<_Tp, m, m>& a, Matx<_Tp, m, m>& b, int method) const - { - Matx<_Tp, m, m> temp = a; - - // assume that b is all 0's on input => make it a unity matrix - for( int i = 0; i < m; i++ ) - b(i, i) = (_Tp)1; - - if( method == DECOMP_CHOLESKY ) - return Cholesky(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m); - - return LU(temp.val, m*sizeof(_Tp), m, b.val, m*sizeof(_Tp), m) != 0; - } -}; - - -template struct Matx_FastInvOp<_Tp, 2> -{ - bool operator()(const Matx<_Tp, 2, 2>& a, Matx<_Tp, 2, 2>& b, int) const - { - _Tp d = determinant(a); - if( d == 0 ) - return false; - d = 1/d; - b(1,1) = a(0,0)*d; - b(0,0) = a(1,1)*d; - b(0,1) = -a(0,1)*d; - b(1,0) = -a(1,0)*d; - return true; - } -}; - - -template struct Matx_FastInvOp<_Tp, 3> -{ - bool operator()(const Matx<_Tp, 3, 3>& a, Matx<_Tp, 3, 3>& b, int) const - { - _Tp d = (_Tp)determinant(a); - if( d == 0 ) - return false; - d = 1/d; - b(0,0) = (a(1,1) * a(2,2) - a(1,2) * a(2,1)) * d; - b(0,1) = (a(0,2) * a(2,1) - a(0,1) * a(2,2)) * d; - b(0,2) = (a(0,1) * a(1,2) - a(0,2) * a(1,1)) * d; - - b(1,0) = (a(1,2) * a(2,0) - a(1,0) * a(2,2)) * d; - b(1,1) = (a(0,0) * a(2,2) - a(0,2) * a(2,0)) * d; - b(1,2) = (a(0,2) * a(1,0) - a(0,0) * a(1,2)) * d; - - b(2,0) = (a(1,0) * a(2,1) - a(1,1) * a(2,0)) * d; - b(2,1) = (a(0,1) * a(2,0) - a(0,0) * a(2,1)) * d; - b(2,2) = (a(0,0) * a(1,1) - a(0,1) * a(1,0)) * d; - return true; - } -}; - - -template inline -Matx<_Tp, n, m> Matx<_Tp, m, n>::inv(int method) const -{ - Matx<_Tp, n, m> b; - bool ok; - if( method == DECOMP_LU || method == DECOMP_CHOLESKY ) - ok = Matx_FastInvOp<_Tp, m>()(*this, b, method); - else - { - Mat A(*this, false), B(b, false); - ok = (invert(A, B, method) != 0); - } - return ok ? b : Matx<_Tp, n, m>::zeros(); -} - - -template struct Matx_FastSolveOp -{ - bool operator()(const Matx<_Tp, m, m>& a, const Matx<_Tp, m, n>& b, - Matx<_Tp, m, n>& x, int method) const - { - Matx<_Tp, m, m> temp = a; - x = b; - if( method == DECOMP_CHOLESKY ) - return Cholesky(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n); - - return LU(temp.val, m*sizeof(_Tp), m, x.val, n*sizeof(_Tp), n) != 0; - } -}; - - -template struct Matx_FastSolveOp<_Tp, 2, 1> -{ - bool operator()(const Matx<_Tp, 2, 2>& a, const Matx<_Tp, 2, 1>& b, - Matx<_Tp, 2, 1>& x, int) const - { - _Tp d = determinant(a); - if( d == 0 ) - return false; - d = 1/d; - x(0) = (b(0)*a(1,1) - b(1)*a(0,1))*d; - x(1) = (b(1)*a(0,0) - b(0)*a(1,0))*d; - return true; - } -}; - - -template struct Matx_FastSolveOp<_Tp, 3, 1> -{ - bool operator()(const Matx<_Tp, 3, 3>& a, const Matx<_Tp, 3, 1>& b, - Matx<_Tp, 3, 1>& x, int) const - { - _Tp d = (_Tp)determinant(a); - if( d == 0 ) - return false; - d = 1/d; - x(0) = d*(b(0)*(a(1,1)*a(2,2) - a(1,2)*a(2,1)) - - a(0,1)*(b(1)*a(2,2) - a(1,2)*b(2)) + - a(0,2)*(b(1)*a(2,1) - a(1,1)*b(2))); - - x(1) = d*(a(0,0)*(b(1)*a(2,2) - a(1,2)*b(2)) - - b(0)*(a(1,0)*a(2,2) - a(1,2)*a(2,0)) + - a(0,2)*(a(1,0)*b(2) - b(1)*a(2,0))); - - x(2) = d*(a(0,0)*(a(1,1)*b(2) - b(1)*a(2,1)) - - a(0,1)*(a(1,0)*b(2) - b(1)*a(2,0)) + - b(0)*(a(1,0)*a(2,1) - a(1,1)*a(2,0))); - return true; - } -}; - - -template template inline -Matx<_Tp, n, l> Matx<_Tp, m, n>::solve(const Matx<_Tp, m, l>& rhs, int method) const -{ - Matx<_Tp, n, l> x; - bool ok; - if( method == DECOMP_LU || method == DECOMP_CHOLESKY ) - ok = Matx_FastSolveOp<_Tp, m, l>()(*this, rhs, x, method); - else - { - Mat A(*this, false), B(rhs, false), X(x, false); - ok = cv::solve(A, B, X, method); - } - - return ok ? x : Matx<_Tp, n, l>::zeros(); -} - -template inline -Vec<_Tp, n> Matx<_Tp, m, n>::solve(const Vec<_Tp, m>& rhs, int method) const -{ - Matx<_Tp, n, 1> x = solve(reinterpret_cast&>(rhs), method); - return reinterpret_cast&>(x); -} - -template static inline -_AccTp normL2Sqr(const _Tp* a, int n) -{ - _AccTp s = 0; - int i=0; - #if CV_ENABLE_UNROLLED - for( ; i <= n - 4; i += 4 ) - { - _AccTp v0 = a[i], v1 = a[i+1], v2 = a[i+2], v3 = a[i+3]; - s += v0*v0 + v1*v1 + v2*v2 + v3*v3; - } -#endif - for( ; i < n; i++ ) - { - _AccTp v = a[i]; - s += v*v; - } - return s; -} - - -template static inline -_AccTp normL1(const _Tp* a, int n) -{ - _AccTp s = 0; - int i = 0; -#if CV_ENABLE_UNROLLED - for(; i <= n - 4; i += 4 ) - { - s += (_AccTp)fast_abs(a[i]) + (_AccTp)fast_abs(a[i+1]) + - (_AccTp)fast_abs(a[i+2]) + (_AccTp)fast_abs(a[i+3]); - } -#endif - for( ; i < n; i++ ) - s += fast_abs(a[i]); - return s; -} - - -template static inline -_AccTp normInf(const _Tp* a, int n) -{ - _AccTp s = 0; - for( int i = 0; i < n; i++ ) - s = std::max(s, (_AccTp)fast_abs(a[i])); - return s; -} - - -template static inline -_AccTp normL2Sqr(const _Tp* a, const _Tp* b, int n) -{ - _AccTp s = 0; - int i= 0; -#if CV_ENABLE_UNROLLED - for(; i <= n - 4; i += 4 ) - { - _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]); - s += v0*v0 + v1*v1 + v2*v2 + v3*v3; - } -#endif - for( ; i < n; i++ ) - { - _AccTp v = _AccTp(a[i] - b[i]); - s += v*v; - } - return s; -} - -CV_EXPORTS float normL2Sqr_(const float* a, const float* b, int n); -CV_EXPORTS float normL1_(const float* a, const float* b, int n); -CV_EXPORTS int normL1_(const uchar* a, const uchar* b, int n); -CV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n); -CV_EXPORTS int normHamming(const uchar* a, const uchar* b, int n, int cellSize); - -template<> inline float normL2Sqr(const float* a, const float* b, int n) -{ - if( n >= 8 ) - return normL2Sqr_(a, b, n); - float s = 0; - for( int i = 0; i < n; i++ ) - { - float v = a[i] - b[i]; - s += v*v; - } - return s; -} - - -template static inline -_AccTp normL1(const _Tp* a, const _Tp* b, int n) -{ - _AccTp s = 0; - int i= 0; -#if CV_ENABLE_UNROLLED - for(; i <= n - 4; i += 4 ) - { - _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i+1] - b[i+1]), v2 = _AccTp(a[i+2] - b[i+2]), v3 = _AccTp(a[i+3] - b[i+3]); - s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3); - } -#endif - for( ; i < n; i++ ) - { - _AccTp v = _AccTp(a[i] - b[i]); - s += std::abs(v); - } - return s; -} - -template<> inline float normL1(const float* a, const float* b, int n) -{ - if( n >= 8 ) - return normL1_(a, b, n); - float s = 0; - for( int i = 0; i < n; i++ ) - { - float v = a[i] - b[i]; - s += std::abs(v); - } - return s; -} - -template<> inline int normL1(const uchar* a, const uchar* b, int n) -{ - return normL1_(a, b, n); -} - -template static inline -_AccTp normInf(const _Tp* a, const _Tp* b, int n) -{ - _AccTp s = 0; - for( int i = 0; i < n; i++ ) - { - _AccTp v0 = a[i] - b[i]; - s = std::max(s, std::abs(v0)); - } - return s; -} - - -template static inline -double norm(const Matx<_Tp, m, n>& M) -{ - return std::sqrt(normL2Sqr<_Tp, double>(M.val, m*n)); -} - - -template static inline -double norm(const Matx<_Tp, m, n>& M, int normType) -{ - return normType == NORM_INF ? (double)normInf<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) : - normType == NORM_L1 ? (double)normL1<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n) : - std::sqrt((double)normL2Sqr<_Tp, typename DataType<_Tp>::work_type>(M.val, m*n)); -} - - -template static inline -bool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b) -{ - for( int i = 0; i < m*n; i++ ) - if( a.val[i] != b.val[i] ) return false; - return true; -} - -template static inline -bool operator != (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b) -{ - return !(a == b); -} - - -template static inline -MatxCommaInitializer<_Tp, m, n> operator << (const Matx<_Tp, m, n>& mtx, _T2 val) -{ - MatxCommaInitializer<_Tp, m, n> commaInitializer((Matx<_Tp, m, n>*)&mtx); - return (commaInitializer, val); -} - -template inline -MatxCommaInitializer<_Tp, m, n>::MatxCommaInitializer(Matx<_Tp, m, n>* _mtx) - : dst(_mtx), idx(0) -{} - -template template inline -MatxCommaInitializer<_Tp, m, n>& MatxCommaInitializer<_Tp, m, n>::operator , (_T2 value) -{ - CV_DbgAssert( idx < m*n ); - dst->val[idx++] = saturate_cast<_Tp>(value); - return *this; -} - -template inline -Matx<_Tp, m, n> MatxCommaInitializer<_Tp, m, n>::operator *() const -{ - CV_DbgAssert( idx == n*m ); - return *dst; -} - -/////////////////////////// short vector (Vec) ///////////////////////////// - -template inline Vec<_Tp, cn>::Vec() -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0) - : Matx<_Tp, cn, 1>(v0) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1) - : Matx<_Tp, cn, 1>(v0, v1) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2) - : Matx<_Tp, cn, 1>(v0, v1, v2) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, _Tp v4, _Tp v5) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8) -{} - -template inline Vec<_Tp, cn>::Vec(_Tp v0, _Tp v1, _Tp v2, _Tp v3, - _Tp v4, _Tp v5, _Tp v6, _Tp v7, - _Tp v8, _Tp v9) - : Matx<_Tp, cn, 1>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) -{} - -template inline Vec<_Tp, cn>::Vec(const _Tp* values) - : Matx<_Tp, cn, 1>(values) -{} - - -template inline Vec<_Tp, cn>::Vec(const Vec<_Tp, cn>& m) - : Matx<_Tp, cn, 1>(m.val) -{} - -template inline -Vec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_AddOp op) -: Matx<_Tp, cn, 1>(a, b, op) -{} - -template inline -Vec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, const Matx<_Tp, cn, 1>& b, Matx_SubOp op) -: Matx<_Tp, cn, 1>(a, b, op) -{} - -template template inline -Vec<_Tp, cn>::Vec(const Matx<_Tp, cn, 1>& a, _T2 alpha, Matx_ScaleOp op) -: Matx<_Tp, cn, 1>(a, alpha, op) -{} - -template inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha) -{ - Vec v; - for( int i = 0; i < cn; i++ ) v.val[i] = alpha; - return v; -} - -template inline Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const -{ - Vec<_Tp, cn> w; - for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(this->val[i]*v.val[i]); - return w; -} - -template Vec<_Tp, 2> conjugate(const Vec<_Tp, 2>& v) -{ - return Vec<_Tp, 2>(v[0], -v[1]); -} - -template Vec<_Tp, 4> conjugate(const Vec<_Tp, 4>& v) -{ - return Vec<_Tp, 4>(v[0], -v[1], -v[2], -v[3]); -} - -template<> inline Vec Vec::conj() const -{ - return conjugate(*this); -} - -template<> inline Vec Vec::conj() const -{ - return conjugate(*this); -} - -template<> inline Vec Vec::conj() const -{ - return conjugate(*this); -} - -template<> inline Vec Vec::conj() const -{ - return conjugate(*this); -} - -template inline Vec<_Tp, cn> Vec<_Tp, cn>::cross(const Vec<_Tp, cn>&) const -{ - CV_Error(CV_StsError, "for arbitrary-size vector there is no cross-product defined"); - return Vec<_Tp, cn>(); -} - -template template -inline Vec<_Tp, cn>::operator Vec() const -{ - Vec v; - for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast(this->val[i]); - return v; -} - -template inline Vec<_Tp, cn>::operator CvScalar() const -{ - CvScalar s = {{0,0,0,0}}; - int i; - for( i = 0; i < std::min(cn, 4); i++ ) s.val[i] = this->val[i]; - for( ; i < 4; i++ ) s.val[i] = 0; - return s; -} - -template inline const _Tp& Vec<_Tp, cn>::operator [](int i) const -{ - CV_DbgAssert( (unsigned)i < (unsigned)cn ); - return this->val[i]; -} - -template inline _Tp& Vec<_Tp, cn>::operator [](int i) -{ - CV_DbgAssert( (unsigned)i < (unsigned)cn ); - return this->val[i]; -} - -template inline const _Tp& Vec<_Tp, cn>::operator ()(int i) const -{ - CV_DbgAssert( (unsigned)i < (unsigned)cn ); - return this->val[i]; -} - -template inline _Tp& Vec<_Tp, cn>::operator ()(int i) -{ - CV_DbgAssert( (unsigned)i < (unsigned)cn ); - return this->val[i]; -} - -template static inline Vec<_Tp1, cn>& -operator += (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b) -{ - for( int i = 0; i < cn; i++ ) - a.val[i] = saturate_cast<_Tp1>(a.val[i] + b.val[i]); - return a; -} - -template static inline Vec<_Tp1, cn>& -operator -= (Vec<_Tp1, cn>& a, const Vec<_Tp2, cn>& b) -{ - for( int i = 0; i < cn; i++ ) - a.val[i] = saturate_cast<_Tp1>(a.val[i] - b.val[i]); - return a; -} - -template static inline Vec<_Tp, cn> -operator + (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b) -{ - return Vec<_Tp, cn>(a, b, Matx_AddOp()); -} - -template static inline Vec<_Tp, cn> -operator - (const Vec<_Tp, cn>& a, const Vec<_Tp, cn>& b) -{ - return Vec<_Tp, cn>(a, b, Matx_SubOp()); -} - -template static inline -Vec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, int alpha) -{ - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*alpha); - return a; -} - -template static inline -Vec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, float alpha) -{ - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*alpha); - return a; -} - -template static inline -Vec<_Tp, cn>& operator *= (Vec<_Tp, cn>& a, double alpha) -{ - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*alpha); - return a; -} - -template static inline -Vec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, int alpha) -{ - double ialpha = 1./alpha; - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*ialpha); - return a; -} - -template static inline -Vec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, float alpha) -{ - float ialpha = 1.f/alpha; - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*ialpha); - return a; -} - -template static inline -Vec<_Tp, cn>& operator /= (Vec<_Tp, cn>& a, double alpha) -{ - double ialpha = 1./alpha; - for( int i = 0; i < cn; i++ ) - a[i] = saturate_cast<_Tp>(a[i]*ialpha); - return a; -} - -template static inline Vec<_Tp, cn> -operator * (const Vec<_Tp, cn>& a, int alpha) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator * (int alpha, const Vec<_Tp, cn>& a) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator * (const Vec<_Tp, cn>& a, float alpha) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator * (float alpha, const Vec<_Tp, cn>& a) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator * (const Vec<_Tp, cn>& a, double alpha) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator * (double alpha, const Vec<_Tp, cn>& a) -{ - return Vec<_Tp, cn>(a, alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator / (const Vec<_Tp, cn>& a, int alpha) -{ - return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator / (const Vec<_Tp, cn>& a, float alpha) -{ - return Vec<_Tp, cn>(a, 1.f/alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator / (const Vec<_Tp, cn>& a, double alpha) -{ - return Vec<_Tp, cn>(a, 1./alpha, Matx_ScaleOp()); -} - -template static inline Vec<_Tp, cn> -operator - (const Vec<_Tp, cn>& a) -{ - Vec<_Tp,cn> t; - for( int i = 0; i < cn; i++ ) t.val[i] = saturate_cast<_Tp>(-a.val[i]); - return t; -} - -template inline Vec<_Tp, 4> operator * (const Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2) -{ - return Vec<_Tp, 4>(saturate_cast<_Tp>(v1[0]*v2[0] - v1[1]*v2[1] - v1[2]*v2[2] - v1[3]*v2[3]), - saturate_cast<_Tp>(v1[0]*v2[1] + v1[1]*v2[0] + v1[2]*v2[3] - v1[3]*v2[2]), - saturate_cast<_Tp>(v1[0]*v2[2] - v1[1]*v2[3] + v1[2]*v2[0] + v1[3]*v2[1]), - saturate_cast<_Tp>(v1[0]*v2[3] + v1[1]*v2[2] - v1[2]*v2[1] + v1[3]*v2[0])); -} - -template inline Vec<_Tp, 4>& operator *= (Vec<_Tp, 4>& v1, const Vec<_Tp, 4>& v2) -{ - v1 = v1 * v2; - return v1; -} - -template<> inline Vec Vec::cross(const Vec& v) const -{ - return Vec(val[1]*v.val[2] - val[2]*v.val[1], - val[2]*v.val[0] - val[0]*v.val[2], - val[0]*v.val[1] - val[1]*v.val[0]); -} - -template<> inline Vec Vec::cross(const Vec& v) const -{ - return Vec(val[1]*v.val[2] - val[2]*v.val[1], - val[2]*v.val[0] - val[0]*v.val[2], - val[0]*v.val[1] - val[1]*v.val[0]); -} - -template inline Vec<_Tp, cn> normalize(const Vec<_Tp, cn>& v) -{ - double nv = norm(v); - return v * (nv ? 1./nv : 0.); -} - -template static inline -VecCommaInitializer<_Tp, cn> operator << (const Vec<_Tp, cn>& vec, _T2 val) -{ - VecCommaInitializer<_Tp, cn> commaInitializer((Vec<_Tp, cn>*)&vec); - return (commaInitializer, val); -} - -template inline -VecCommaInitializer<_Tp, cn>::VecCommaInitializer(Vec<_Tp, cn>* _vec) - : MatxCommaInitializer<_Tp, cn, 1>(_vec) -{} - -template template inline -VecCommaInitializer<_Tp, cn>& VecCommaInitializer<_Tp, cn>::operator , (_T2 value) -{ - CV_DbgAssert( this->idx < cn ); - this->dst->val[this->idx++] = saturate_cast<_Tp>(value); - return *this; -} - -template inline -Vec<_Tp, cn> VecCommaInitializer<_Tp, cn>::operator *() const -{ - CV_DbgAssert( this->idx == cn ); - return *this->dst; -} - -//////////////////////////////// Complex ////////////////////////////// - -template inline Complex<_Tp>::Complex() : re(0), im(0) {} -template inline Complex<_Tp>::Complex( _Tp _re, _Tp _im ) : re(_re), im(_im) {} -template template inline Complex<_Tp>::operator Complex() const -{ return Complex(saturate_cast(re), saturate_cast(im)); } -template inline Complex<_Tp> Complex<_Tp>::conj() const -{ return Complex<_Tp>(re, -im); } - -template static inline -bool operator == (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ return a.re == b.re && a.im == b.im; } - -template static inline -bool operator != (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ return a.re != b.re || a.im != b.im; } - -template static inline -Complex<_Tp> operator + (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ return Complex<_Tp>( a.re + b.re, a.im + b.im ); } - -template static inline -Complex<_Tp>& operator += (Complex<_Tp>& a, const Complex<_Tp>& b) -{ a.re += b.re; a.im += b.im; return a; } - -template static inline -Complex<_Tp> operator - (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ return Complex<_Tp>( a.re - b.re, a.im - b.im ); } - -template static inline -Complex<_Tp>& operator -= (Complex<_Tp>& a, const Complex<_Tp>& b) -{ a.re -= b.re; a.im -= b.im; return a; } - -template static inline -Complex<_Tp> operator - (const Complex<_Tp>& a) -{ return Complex<_Tp>(-a.re, -a.im); } - -template static inline -Complex<_Tp> operator * (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ return Complex<_Tp>( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); } - -template static inline -Complex<_Tp> operator * (const Complex<_Tp>& a, _Tp b) -{ return Complex<_Tp>( a.re*b, a.im*b ); } - -template static inline -Complex<_Tp> operator * (_Tp b, const Complex<_Tp>& a) -{ return Complex<_Tp>( a.re*b, a.im*b ); } - -template static inline -Complex<_Tp> operator + (const Complex<_Tp>& a, _Tp b) -{ return Complex<_Tp>( a.re + b, a.im ); } - -template static inline -Complex<_Tp> operator - (const Complex<_Tp>& a, _Tp b) -{ return Complex<_Tp>( a.re - b, a.im ); } - -template static inline -Complex<_Tp> operator + (_Tp b, const Complex<_Tp>& a) -{ return Complex<_Tp>( a.re + b, a.im ); } - -template static inline -Complex<_Tp> operator - (_Tp b, const Complex<_Tp>& a) -{ return Complex<_Tp>( b - a.re, -a.im ); } - -template static inline -Complex<_Tp>& operator += (Complex<_Tp>& a, _Tp b) -{ a.re += b; return a; } - -template static inline -Complex<_Tp>& operator -= (Complex<_Tp>& a, _Tp b) -{ a.re -= b; return a; } - -template static inline -Complex<_Tp>& operator *= (Complex<_Tp>& a, _Tp b) -{ a.re *= b; a.im *= b; return a; } - -template static inline -double abs(const Complex<_Tp>& a) -{ return std::sqrt( (double)a.re*a.re + (double)a.im*a.im); } - -template static inline -Complex<_Tp> operator / (const Complex<_Tp>& a, const Complex<_Tp>& b) -{ - double t = 1./((double)b.re*b.re + (double)b.im*b.im); - return Complex<_Tp>( (_Tp)((a.re*b.re + a.im*b.im)*t), - (_Tp)((-a.re*b.im + a.im*b.re)*t) ); -} - -template static inline -Complex<_Tp>& operator /= (Complex<_Tp>& a, const Complex<_Tp>& b) -{ - return (a = a / b); -} - -template static inline -Complex<_Tp> operator / (const Complex<_Tp>& a, _Tp b) -{ - _Tp t = (_Tp)1/b; - return Complex<_Tp>( a.re*t, a.im*t ); -} - -template static inline -Complex<_Tp> operator / (_Tp b, const Complex<_Tp>& a) -{ - return Complex<_Tp>(b)/a; -} - -template static inline -Complex<_Tp> operator /= (const Complex<_Tp>& a, _Tp b) -{ - _Tp t = (_Tp)1/b; - a.re *= t; a.im *= t; return a; -} - -//////////////////////////////// 2D Point //////////////////////////////// - -template inline Point_<_Tp>::Point_() : x(0), y(0) {} -template inline Point_<_Tp>::Point_(_Tp _x, _Tp _y) : x(_x), y(_y) {} -template inline Point_<_Tp>::Point_(const Point_& pt) : x(pt.x), y(pt.y) {} -template inline Point_<_Tp>::Point_(const CvPoint& pt) : x((_Tp)pt.x), y((_Tp)pt.y) {} -template inline Point_<_Tp>::Point_(const CvPoint2D32f& pt) - : x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)) {} -template inline Point_<_Tp>::Point_(const Size_<_Tp>& sz) : x(sz.width), y(sz.height) {} -template inline Point_<_Tp>::Point_(const Vec<_Tp,2>& v) : x(v[0]), y(v[1]) {} -template inline Point_<_Tp>& Point_<_Tp>::operator = (const Point_& pt) -{ x = pt.x; y = pt.y; return *this; } - -template template inline Point_<_Tp>::operator Point_<_Tp2>() const -{ return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y)); } -template inline Point_<_Tp>::operator CvPoint() const -{ return cvPoint(saturate_cast(x), saturate_cast(y)); } -template inline Point_<_Tp>::operator CvPoint2D32f() const -{ return cvPoint2D32f((float)x, (float)y); } -template inline Point_<_Tp>::operator Vec<_Tp, 2>() const -{ return Vec<_Tp, 2>(x, y); } - -template inline _Tp Point_<_Tp>::dot(const Point_& pt) const -{ return saturate_cast<_Tp>(x*pt.x + y*pt.y); } -template inline double Point_<_Tp>::ddot(const Point_& pt) const -{ return (double)x*pt.x + (double)y*pt.y; } - -template inline double Point_<_Tp>::cross(const Point_& pt) const -{ return (double)x*pt.y - (double)y*pt.x; } - -template static inline Point_<_Tp>& -operator += (Point_<_Tp>& a, const Point_<_Tp>& b) -{ - a.x = saturate_cast<_Tp>(a.x + b.x); - a.y = saturate_cast<_Tp>(a.y + b.y); - return a; -} - -template static inline Point_<_Tp>& -operator -= (Point_<_Tp>& a, const Point_<_Tp>& b) -{ - a.x = saturate_cast<_Tp>(a.x - b.x); - a.y = saturate_cast<_Tp>(a.y - b.y); - return a; -} - -template static inline Point_<_Tp>& -operator *= (Point_<_Tp>& a, int b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - return a; -} - -template static inline Point_<_Tp>& -operator *= (Point_<_Tp>& a, float b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - return a; -} - -template static inline Point_<_Tp>& -operator *= (Point_<_Tp>& a, double b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - return a; -} - -template static inline double norm(const Point_<_Tp>& pt) -{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y); } - -template static inline bool operator == (const Point_<_Tp>& a, const Point_<_Tp>& b) -{ return a.x == b.x && a.y == b.y; } - -template static inline bool operator != (const Point_<_Tp>& a, const Point_<_Tp>& b) -{ return a.x != b.x || a.y != b.y; } - -template static inline Point_<_Tp> operator + (const Point_<_Tp>& a, const Point_<_Tp>& b) -{ return Point_<_Tp>( saturate_cast<_Tp>(a.x + b.x), saturate_cast<_Tp>(a.y + b.y) ); } - -template static inline Point_<_Tp> operator - (const Point_<_Tp>& a, const Point_<_Tp>& b) -{ return Point_<_Tp>( saturate_cast<_Tp>(a.x - b.x), saturate_cast<_Tp>(a.y - b.y) ); } - -template static inline Point_<_Tp> operator - (const Point_<_Tp>& a) -{ return Point_<_Tp>( saturate_cast<_Tp>(-a.x), saturate_cast<_Tp>(-a.y) ); } - -template static inline Point_<_Tp> operator * (const Point_<_Tp>& a, int b) -{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); } - -template static inline Point_<_Tp> operator * (int a, const Point_<_Tp>& b) -{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); } - -template static inline Point_<_Tp> operator * (const Point_<_Tp>& a, float b) -{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); } - -template static inline Point_<_Tp> operator * (float a, const Point_<_Tp>& b) -{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); } - -template static inline Point_<_Tp> operator * (const Point_<_Tp>& a, double b) -{ return Point_<_Tp>( saturate_cast<_Tp>(a.x*b), saturate_cast<_Tp>(a.y*b) ); } - -template static inline Point_<_Tp> operator * (double a, const Point_<_Tp>& b) -{ return Point_<_Tp>( saturate_cast<_Tp>(b.x*a), saturate_cast<_Tp>(b.y*a) ); } - -//////////////////////////////// 3D Point //////////////////////////////// - -template inline Point3_<_Tp>::Point3_() : x(0), y(0), z(0) {} -template inline Point3_<_Tp>::Point3_(_Tp _x, _Tp _y, _Tp _z) : x(_x), y(_y), z(_z) {} -template inline Point3_<_Tp>::Point3_(const Point3_& pt) : x(pt.x), y(pt.y), z(pt.z) {} -template inline Point3_<_Tp>::Point3_(const Point_<_Tp>& pt) : x(pt.x), y(pt.y), z(_Tp()) {} -template inline Point3_<_Tp>::Point3_(const CvPoint3D32f& pt) : - x(saturate_cast<_Tp>(pt.x)), y(saturate_cast<_Tp>(pt.y)), z(saturate_cast<_Tp>(pt.z)) {} -template inline Point3_<_Tp>::Point3_(const Vec<_Tp, 3>& v) : x(v[0]), y(v[1]), z(v[2]) {} - -template template inline Point3_<_Tp>::operator Point3_<_Tp2>() const -{ return Point3_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), saturate_cast<_Tp2>(z)); } - -template inline Point3_<_Tp>::operator CvPoint3D32f() const -{ return cvPoint3D32f((float)x, (float)y, (float)z); } - -template inline Point3_<_Tp>::operator Vec<_Tp, 3>() const -{ return Vec<_Tp, 3>(x, y, z); } - -template inline Point3_<_Tp>& Point3_<_Tp>::operator = (const Point3_& pt) -{ x = pt.x; y = pt.y; z = pt.z; return *this; } - -template inline _Tp Point3_<_Tp>::dot(const Point3_& pt) const -{ return saturate_cast<_Tp>(x*pt.x + y*pt.y + z*pt.z); } -template inline double Point3_<_Tp>::ddot(const Point3_& pt) const -{ return (double)x*pt.x + (double)y*pt.y + (double)z*pt.z; } - -template inline Point3_<_Tp> Point3_<_Tp>::cross(const Point3_<_Tp>& pt) const -{ - return Point3_<_Tp>(y*pt.z - z*pt.y, z*pt.x - x*pt.z, x*pt.y - y*pt.x); -} - -template static inline Point3_<_Tp>& -operator += (Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ - a.x = saturate_cast<_Tp>(a.x + b.x); - a.y = saturate_cast<_Tp>(a.y + b.y); - a.z = saturate_cast<_Tp>(a.z + b.z); - return a; -} - -template static inline Point3_<_Tp>& -operator -= (Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ - a.x = saturate_cast<_Tp>(a.x - b.x); - a.y = saturate_cast<_Tp>(a.y - b.y); - a.z = saturate_cast<_Tp>(a.z - b.z); - return a; -} - -template static inline Point3_<_Tp>& -operator *= (Point3_<_Tp>& a, int b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - a.z = saturate_cast<_Tp>(a.z*b); - return a; -} - -template static inline Point3_<_Tp>& -operator *= (Point3_<_Tp>& a, float b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - a.z = saturate_cast<_Tp>(a.z*b); - return a; -} - -template static inline Point3_<_Tp>& -operator *= (Point3_<_Tp>& a, double b) -{ - a.x = saturate_cast<_Tp>(a.x*b); - a.y = saturate_cast<_Tp>(a.y*b); - a.z = saturate_cast<_Tp>(a.z*b); - return a; -} - -template static inline double norm(const Point3_<_Tp>& pt) -{ return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y + (double)pt.z*pt.z); } - -template static inline bool operator == (const Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ return a.x == b.x && a.y == b.y && a.z == b.z; } - -template static inline bool operator != (const Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ return a.x != b.x || a.y != b.y || a.z != b.z; } - -template static inline Point3_<_Tp> operator + (const Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x + b.x), - saturate_cast<_Tp>(a.y + b.y), - saturate_cast<_Tp>(a.z + b.z)); } - -template static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a, const Point3_<_Tp>& b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x - b.x), - saturate_cast<_Tp>(a.y - b.y), - saturate_cast<_Tp>(a.z - b.z)); } - -template static inline Point3_<_Tp> operator - (const Point3_<_Tp>& a) -{ return Point3_<_Tp>( saturate_cast<_Tp>(-a.x), - saturate_cast<_Tp>(-a.y), - saturate_cast<_Tp>(-a.z) ); } - -template static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, int b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b), - saturate_cast<_Tp>(a.y*b), - saturate_cast<_Tp>(a.z*b) ); } - -template static inline Point3_<_Tp> operator * (int a, const Point3_<_Tp>& b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a), - saturate_cast<_Tp>(b.y*a), - saturate_cast<_Tp>(b.z*a) ); } - -template static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, float b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b), - saturate_cast<_Tp>(a.y*b), - saturate_cast<_Tp>(a.z*b) ); } - -template static inline Point3_<_Tp> operator * (float a, const Point3_<_Tp>& b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a), - saturate_cast<_Tp>(b.y*a), - saturate_cast<_Tp>(b.z*a) ); } - -template static inline Point3_<_Tp> operator * (const Point3_<_Tp>& a, double b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(a.x*b), - saturate_cast<_Tp>(a.y*b), - saturate_cast<_Tp>(a.z*b) ); } - -template static inline Point3_<_Tp> operator * (double a, const Point3_<_Tp>& b) -{ return Point3_<_Tp>( saturate_cast<_Tp>(b.x*a), - saturate_cast<_Tp>(b.y*a), - saturate_cast<_Tp>(b.z*a) ); } - -//////////////////////////////// Size //////////////////////////////// - -template inline Size_<_Tp>::Size_() - : width(0), height(0) {} -template inline Size_<_Tp>::Size_(_Tp _width, _Tp _height) - : width(_width), height(_height) {} -template inline Size_<_Tp>::Size_(const Size_& sz) - : width(sz.width), height(sz.height) {} -template inline Size_<_Tp>::Size_(const CvSize& sz) - : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {} -template inline Size_<_Tp>::Size_(const CvSize2D32f& sz) - : width(saturate_cast<_Tp>(sz.width)), height(saturate_cast<_Tp>(sz.height)) {} -template inline Size_<_Tp>::Size_(const Point_<_Tp>& pt) : width(pt.x), height(pt.y) {} - -template template inline Size_<_Tp>::operator Size_<_Tp2>() const -{ return Size_<_Tp2>(saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); } -template inline Size_<_Tp>::operator CvSize() const -{ return cvSize(saturate_cast(width), saturate_cast(height)); } -template inline Size_<_Tp>::operator CvSize2D32f() const -{ return cvSize2D32f((float)width, (float)height); } - -template inline Size_<_Tp>& Size_<_Tp>::operator = (const Size_<_Tp>& sz) -{ width = sz.width; height = sz.height; return *this; } -template static inline Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b) -{ return Size_<_Tp>(a.width * b, a.height * b); } -template static inline Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ return Size_<_Tp>(a.width + b.width, a.height + b.height); } -template static inline Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ return Size_<_Tp>(a.width - b.width, a.height - b.height); } -template inline _Tp Size_<_Tp>::area() const { return width*height; } - -template static inline Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) -{ a.width += b.width; a.height += b.height; return a; } -template static inline Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) -{ a.width -= b.width; a.height -= b.height; return a; } - -template static inline bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ return a.width == b.width && a.height == b.height; } -template static inline bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ return a.width != b.width || a.height != b.height; } - -//////////////////////////////// Rect //////////////////////////////// - - -template inline Rect_<_Tp>::Rect_() : x(0), y(0), width(0), height(0) {} -template inline Rect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height) : x(_x), y(_y), width(_width), height(_height) {} -template inline Rect_<_Tp>::Rect_(const Rect_<_Tp>& r) : x(r.x), y(r.y), width(r.width), height(r.height) {} -template inline Rect_<_Tp>::Rect_(const CvRect& r) : x((_Tp)r.x), y((_Tp)r.y), width((_Tp)r.width), height((_Tp)r.height) {} -template inline Rect_<_Tp>::Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz) : - x(org.x), y(org.y), width(sz.width), height(sz.height) {} -template inline Rect_<_Tp>::Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2) -{ - x = std::min(pt1.x, pt2.x); y = std::min(pt1.y, pt2.y); - width = std::max(pt1.x, pt2.x) - x; height = std::max(pt1.y, pt2.y) - y; -} -template inline Rect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r ) -{ x = r.x; y = r.y; width = r.width; height = r.height; return *this; } - -template inline Point_<_Tp> Rect_<_Tp>::tl() const { return Point_<_Tp>(x,y); } -template inline Point_<_Tp> Rect_<_Tp>::br() const { return Point_<_Tp>(x+width, y+height); } - -template static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Point_<_Tp>& b ) -{ a.x += b.x; a.y += b.y; return a; } -template static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Point_<_Tp>& b ) -{ a.x -= b.x; a.y -= b.y; return a; } - -template static inline Rect_<_Tp>& operator += ( Rect_<_Tp>& a, const Size_<_Tp>& b ) -{ a.width += b.width; a.height += b.height; return a; } - -template static inline Rect_<_Tp>& operator -= ( Rect_<_Tp>& a, const Size_<_Tp>& b ) -{ a.width -= b.width; a.height -= b.height; return a; } - -template static inline Rect_<_Tp>& operator &= ( Rect_<_Tp>& a, const Rect_<_Tp>& b ) -{ - _Tp x1 = std::max(a.x, b.x), y1 = std::max(a.y, b.y); - a.width = std::min(a.x + a.width, b.x + b.width) - x1; - a.height = std::min(a.y + a.height, b.y + b.height) - y1; - a.x = x1; a.y = y1; - if( a.width <= 0 || a.height <= 0 ) - a = Rect(); - return a; -} - -template static inline Rect_<_Tp>& operator |= ( Rect_<_Tp>& a, const Rect_<_Tp>& b ) -{ - _Tp x1 = std::min(a.x, b.x), y1 = std::min(a.y, b.y); - a.width = std::max(a.x + a.width, b.x + b.width) - x1; - a.height = std::max(a.y + a.height, b.y + b.height) - y1; - a.x = x1; a.y = y1; - return a; -} - -template inline Size_<_Tp> Rect_<_Tp>::size() const { return Size_<_Tp>(width, height); } -template inline _Tp Rect_<_Tp>::area() const { return width*height; } - -template template inline Rect_<_Tp>::operator Rect_<_Tp2>() const -{ return Rect_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y), - saturate_cast<_Tp2>(width), saturate_cast<_Tp2>(height)); } -template inline Rect_<_Tp>::operator CvRect() const -{ return cvRect(saturate_cast(x), saturate_cast(y), - saturate_cast(width), saturate_cast(height)); } - -template inline bool Rect_<_Tp>::contains(const Point_<_Tp>& pt) const -{ return x <= pt.x && pt.x < x + width && y <= pt.y && pt.y < y + height; } - -template static inline bool operator == (const Rect_<_Tp>& a, const Rect_<_Tp>& b) -{ - return a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height; -} - -template static inline bool operator != (const Rect_<_Tp>& a, const Rect_<_Tp>& b) -{ - return a.x != b.x || a.y != b.y || a.width != b.width || a.height != b.height; -} - -template static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Point_<_Tp>& b) -{ - return Rect_<_Tp>( a.x + b.x, a.y + b.y, a.width, a.height ); -} - -template static inline Rect_<_Tp> operator - (const Rect_<_Tp>& a, const Point_<_Tp>& b) -{ - return Rect_<_Tp>( a.x - b.x, a.y - b.y, a.width, a.height ); -} - -template static inline Rect_<_Tp> operator + (const Rect_<_Tp>& a, const Size_<_Tp>& b) -{ - return Rect_<_Tp>( a.x, a.y, a.width + b.width, a.height + b.height ); -} - -template static inline Rect_<_Tp> operator & (const Rect_<_Tp>& a, const Rect_<_Tp>& b) -{ - Rect_<_Tp> c = a; - return c &= b; -} - -template static inline Rect_<_Tp> operator | (const Rect_<_Tp>& a, const Rect_<_Tp>& b) -{ - Rect_<_Tp> c = a; - return c |= b; -} - -template inline bool Point_<_Tp>::inside( const Rect_<_Tp>& r ) const -{ - return r.contains(*this); -} - -inline RotatedRect::RotatedRect() { angle = 0; } -inline RotatedRect::RotatedRect(const Point2f& _center, const Size2f& _size, float _angle) - : center(_center), size(_size), angle(_angle) {} -inline RotatedRect::RotatedRect(const CvBox2D& box) - : center(box.center), size(box.size), angle(box.angle) {} -inline RotatedRect::operator CvBox2D() const -{ - CvBox2D box; box.center = center; box.size = size; box.angle = angle; - return box; -} - -//////////////////////////////// Scalar_ /////////////////////////////// - -template inline Scalar_<_Tp>::Scalar_() -{ this->val[0] = this->val[1] = this->val[2] = this->val[3] = 0; } - -template inline Scalar_<_Tp>::Scalar_(_Tp v0, _Tp v1, _Tp v2, _Tp v3) -{ this->val[0] = v0; this->val[1] = v1; this->val[2] = v2; this->val[3] = v3; } - -template inline Scalar_<_Tp>::Scalar_(const CvScalar& s) -{ - this->val[0] = saturate_cast<_Tp>(s.val[0]); - this->val[1] = saturate_cast<_Tp>(s.val[1]); - this->val[2] = saturate_cast<_Tp>(s.val[2]); - this->val[3] = saturate_cast<_Tp>(s.val[3]); -} - -template inline Scalar_<_Tp>::Scalar_(_Tp v0) -{ this->val[0] = v0; this->val[1] = this->val[2] = this->val[3] = 0; } - -template inline Scalar_<_Tp> Scalar_<_Tp>::all(_Tp v0) -{ return Scalar_<_Tp>(v0, v0, v0, v0); } -template inline Scalar_<_Tp>::operator CvScalar() const -{ return cvScalar(this->val[0], this->val[1], this->val[2], this->val[3]); } - -template template inline Scalar_<_Tp>::operator Scalar_() const -{ - return Scalar_(saturate_cast(this->val[0]), - saturate_cast(this->val[1]), - saturate_cast(this->val[2]), - saturate_cast(this->val[3])); -} - -template static inline Scalar_<_Tp>& operator += (Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - a.val[0] = saturate_cast<_Tp>(a.val[0] + b.val[0]); - a.val[1] = saturate_cast<_Tp>(a.val[1] + b.val[1]); - a.val[2] = saturate_cast<_Tp>(a.val[2] + b.val[2]); - a.val[3] = saturate_cast<_Tp>(a.val[3] + b.val[3]); - return a; -} - -template static inline Scalar_<_Tp>& operator -= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - a.val[0] = saturate_cast<_Tp>(a.val[0] - b.val[0]); - a.val[1] = saturate_cast<_Tp>(a.val[1] - b.val[1]); - a.val[2] = saturate_cast<_Tp>(a.val[2] - b.val[2]); - a.val[3] = saturate_cast<_Tp>(a.val[3] - b.val[3]); - return a; -} - -template static inline Scalar_<_Tp>& operator *= ( Scalar_<_Tp>& a, _Tp v ) -{ - a.val[0] = saturate_cast<_Tp>(a.val[0] * v); - a.val[1] = saturate_cast<_Tp>(a.val[1] * v); - a.val[2] = saturate_cast<_Tp>(a.val[2] * v); - a.val[3] = saturate_cast<_Tp>(a.val[3] * v); - return a; -} - -template inline Scalar_<_Tp> Scalar_<_Tp>::mul(const Scalar_<_Tp>& t, double scale ) const -{ - return Scalar_<_Tp>( saturate_cast<_Tp>(this->val[0]*t.val[0]*scale), - saturate_cast<_Tp>(this->val[1]*t.val[1]*scale), - saturate_cast<_Tp>(this->val[2]*t.val[2]*scale), - saturate_cast<_Tp>(this->val[3]*t.val[3]*scale)); -} - -template static inline bool operator == ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b ) -{ - return a.val[0] == b.val[0] && a.val[1] == b.val[1] && - a.val[2] == b.val[2] && a.val[3] == b.val[3]; -} - -template static inline bool operator != ( const Scalar_<_Tp>& a, const Scalar_<_Tp>& b ) -{ - return a.val[0] != b.val[0] || a.val[1] != b.val[1] || - a.val[2] != b.val[2] || a.val[3] != b.val[3]; -} - -template static inline Scalar_<_Tp> operator + (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] + b.val[0]), - saturate_cast<_Tp>(a.val[1] + b.val[1]), - saturate_cast<_Tp>(a.val[2] + b.val[2]), - saturate_cast<_Tp>(a.val[3] + b.val[3])); -} - -template static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] - b.val[0]), - saturate_cast<_Tp>(a.val[1] - b.val[1]), - saturate_cast<_Tp>(a.val[2] - b.val[2]), - saturate_cast<_Tp>(a.val[3] - b.val[3])); -} - -template static inline Scalar_<_Tp> operator * (const Scalar_<_Tp>& a, _Tp alpha) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] * alpha), - saturate_cast<_Tp>(a.val[1] * alpha), - saturate_cast<_Tp>(a.val[2] * alpha), - saturate_cast<_Tp>(a.val[3] * alpha)); -} - -template static inline Scalar_<_Tp> operator * (_Tp alpha, const Scalar_<_Tp>& a) -{ - return a*alpha; -} - -template static inline Scalar_<_Tp> operator - (const Scalar_<_Tp>& a) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(-a.val[0]), saturate_cast<_Tp>(-a.val[1]), - saturate_cast<_Tp>(-a.val[2]), saturate_cast<_Tp>(-a.val[3])); -} - - -template static inline Scalar_<_Tp> -operator * (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(a[0]*b[0] - a[1]*b[1] - a[2]*b[2] - a[3]*b[3]), - saturate_cast<_Tp>(a[0]*b[1] + a[1]*b[0] + a[2]*b[3] - a[3]*b[2]), - saturate_cast<_Tp>(a[0]*b[2] - a[1]*b[3] + a[2]*b[0] + a[3]*b[1]), - saturate_cast<_Tp>(a[0]*b[3] + a[1]*b[2] - a[2]*b[1] + a[3]*b[0])); -} - -template static inline Scalar_<_Tp>& -operator *= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - a = a*b; - return a; -} - -template inline Scalar_<_Tp> Scalar_<_Tp>::conj() const -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(this->val[0]), - saturate_cast<_Tp>(-this->val[1]), - saturate_cast<_Tp>(-this->val[2]), - saturate_cast<_Tp>(-this->val[3])); -} - -template inline bool Scalar_<_Tp>::isReal() const -{ - return this->val[1] == 0 && this->val[2] == 0 && this->val[3] == 0; -} - -template static inline -Scalar_<_Tp> operator / (const Scalar_<_Tp>& a, _Tp alpha) -{ - return Scalar_<_Tp>(saturate_cast<_Tp>(a.val[0] / alpha), - saturate_cast<_Tp>(a.val[1] / alpha), - saturate_cast<_Tp>(a.val[2] / alpha), - saturate_cast<_Tp>(a.val[3] / alpha)); -} - -template static inline -Scalar_ operator / (const Scalar_& a, float alpha) -{ - float s = 1/alpha; - return Scalar_(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s); -} - -template static inline -Scalar_ operator / (const Scalar_& a, double alpha) -{ - double s = 1/alpha; - return Scalar_(a.val[0]*s, a.val[1]*s, a.val[2]*s, a.val[3]*s); -} - -template static inline -Scalar_<_Tp>& operator /= (Scalar_<_Tp>& a, _Tp alpha) -{ - a = a/alpha; - return a; -} - -template static inline -Scalar_<_Tp> operator / (_Tp a, const Scalar_<_Tp>& b) -{ - _Tp s = a/(b[0]*b[0] + b[1]*b[1] + b[2]*b[2] + b[3]*b[3]); - return b.conj()*s; -} - -template static inline -Scalar_<_Tp> operator / (const Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - return a*((_Tp)1/b); -} - -template static inline -Scalar_<_Tp>& operator /= (Scalar_<_Tp>& a, const Scalar_<_Tp>& b) -{ - a = a/b; - return a; -} - -//////////////////////////////// Range ///////////////////////////////// - -inline Range::Range() : start(0), end(0) {} -inline Range::Range(int _start, int _end) : start(_start), end(_end) {} -inline Range::Range(const CvSlice& slice) : start(slice.start_index), end(slice.end_index) -{ - if( start == 0 && end == CV_WHOLE_SEQ_END_INDEX ) - *this = Range::all(); -} - -inline int Range::size() const { return end - start; } -inline bool Range::empty() const { return start == end; } -inline Range Range::all() { return Range(INT_MIN, INT_MAX); } - -static inline bool operator == (const Range& r1, const Range& r2) -{ return r1.start == r2.start && r1.end == r2.end; } - -static inline bool operator != (const Range& r1, const Range& r2) -{ return !(r1 == r2); } - -static inline bool operator !(const Range& r) -{ return r.start == r.end; } - -static inline Range operator & (const Range& r1, const Range& r2) -{ - Range r(std::max(r1.start, r2.start), std::min(r1.end, r2.end)); - r.end = std::max(r.end, r.start); - return r; -} - -static inline Range& operator &= (Range& r1, const Range& r2) -{ - r1 = r1 & r2; - return r1; -} - -static inline Range operator + (const Range& r1, int delta) -{ - return Range(r1.start + delta, r1.end + delta); -} - -static inline Range operator + (int delta, const Range& r1) -{ - return Range(r1.start + delta, r1.end + delta); -} - -static inline Range operator - (const Range& r1, int delta) -{ - return r1 + (-delta); -} - -inline Range::operator CvSlice() const -{ return *this != Range::all() ? cvSlice(start, end) : CV_WHOLE_SEQ; } - - - -//////////////////////////////// Vector //////////////////////////////// - -// template vector class. It is similar to STL's vector, -// with a few important differences: -// 1) it can be created on top of user-allocated data w/o copying it -// 2) vector b = a means copying the header, -// not the underlying data (use clone() to make a deep copy) -template class Vector -{ -public: - typedef _Tp value_type; - typedef _Tp* iterator; - typedef const _Tp* const_iterator; - typedef _Tp& reference; - typedef const _Tp& const_reference; - - struct Hdr - { - Hdr() : data(0), datastart(0), refcount(0), size(0), capacity(0) {}; - _Tp* data; - _Tp* datastart; - int* refcount; - size_t size; - size_t capacity; - }; - - Vector() {} - Vector(size_t _size) { resize(_size); } - Vector(size_t _size, const _Tp& val) - { - resize(_size); - for(size_t i = 0; i < _size; i++) - hdr.data[i] = val; - } - Vector(_Tp* _data, size_t _size, bool _copyData=false) - { set(_data, _size, _copyData); } - - template Vector(const Vec<_Tp, n>& vec) - { set((_Tp*)&vec.val[0], n, true); } - - Vector(const std::vector<_Tp>& vec, bool _copyData=false) - { set(!vec.empty() ? (_Tp*)&vec[0] : 0, vec.size(), _copyData); } - - Vector(const Vector& d) { *this = d; } - - Vector(const Vector& d, const Range& r_) - { - Range r = r_ == Range::all() ? Range(0, d.size()) : r_; - /*if( r == Range::all() ) - r = Range(0, d.size());*/ - if( r.size() > 0 && r.start >= 0 && r.end <= d.size() ) - { - if( d.hdr.refcount ) - CV_XADD(d.hdr.refcount, 1); - hdr.refcount = d.hdr.refcount; - hdr.datastart = d.hdr.datastart; - hdr.data = d.hdr.data + r.start; - hdr.capacity = hdr.size = r.size(); - } - } - - Vector<_Tp>& operator = (const Vector& d) - { - if( this != &d ) - { - if( d.hdr.refcount ) - CV_XADD(d.hdr.refcount, 1); - release(); - hdr = d.hdr; - } - return *this; - } - - ~Vector() { release(); } - - Vector<_Tp> clone() const - { return hdr.data ? Vector<_Tp>(hdr.data, hdr.size, true) : Vector<_Tp>(); } - - void copyTo(Vector<_Tp>& vec) const - { - size_t i, sz = size(); - vec.resize(sz); - const _Tp* src = hdr.data; - _Tp* dst = vec.hdr.data; - for( i = 0; i < sz; i++ ) - dst[i] = src[i]; - } - - void copyTo(std::vector<_Tp>& vec) const - { - size_t i, sz = size(); - vec.resize(sz); - const _Tp* src = hdr.data; - _Tp* dst = sz ? &vec[0] : 0; - for( i = 0; i < sz; i++ ) - dst[i] = src[i]; - } - - operator CvMat() const - { return cvMat((int)size(), 1, type(), (void*)hdr.data); } - - _Tp& operator [] (size_t i) { CV_DbgAssert( i < size() ); return hdr.data[i]; } - const _Tp& operator [] (size_t i) const { CV_DbgAssert( i < size() ); return hdr.data[i]; } - Vector operator() (const Range& r) const { return Vector(*this, r); } - _Tp& back() { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; } - const _Tp& back() const { CV_DbgAssert(!empty()); return hdr.data[hdr.size-1]; } - _Tp& front() { CV_DbgAssert(!empty()); return hdr.data[0]; } - const _Tp& front() const { CV_DbgAssert(!empty()); return hdr.data[0]; } - - _Tp* begin() { return hdr.data; } - _Tp* end() { return hdr.data + hdr.size; } - const _Tp* begin() const { return hdr.data; } - const _Tp* end() const { return hdr.data + hdr.size; } - - void addref() { if( hdr.refcount ) CV_XADD(hdr.refcount, 1); } - void release() - { - if( hdr.refcount && CV_XADD(hdr.refcount, -1) == 1 ) - { - delete[] hdr.datastart; - delete hdr.refcount; - } - hdr = Hdr(); - } - - void set(_Tp* _data, size_t _size, bool _copyData=false) - { - if( !_copyData ) - { - release(); - hdr.data = hdr.datastart = _data; - hdr.size = hdr.capacity = _size; - hdr.refcount = 0; - } - else - { - reserve(_size); - for( size_t i = 0; i < _size; i++ ) - hdr.data[i] = _data[i]; - hdr.size = _size; - } - } - - void reserve(size_t newCapacity) - { - _Tp* newData; - int* newRefcount; - size_t i, oldSize = hdr.size; - if( (!hdr.refcount || *hdr.refcount == 1) && hdr.capacity >= newCapacity ) - return; - newCapacity = std::max(newCapacity, oldSize); - newData = new _Tp[newCapacity]; - newRefcount = new int(1); - for( i = 0; i < oldSize; i++ ) - newData[i] = hdr.data[i]; - release(); - hdr.data = hdr.datastart = newData; - hdr.capacity = newCapacity; - hdr.size = oldSize; - hdr.refcount = newRefcount; - } - - void resize(size_t newSize) - { - size_t i; - newSize = std::max(newSize, (size_t)0); - if( (!hdr.refcount || *hdr.refcount == 1) && hdr.size == newSize ) - return; - if( newSize > hdr.capacity ) - reserve(std::max(newSize, std::max((size_t)4, hdr.capacity*2))); - for( i = hdr.size; i < newSize; i++ ) - hdr.data[i] = _Tp(); - hdr.size = newSize; - } - - Vector<_Tp>& push_back(const _Tp& elem) - { - if( hdr.size == hdr.capacity ) - reserve( std::max((size_t)4, hdr.capacity*2) ); - hdr.data[hdr.size++] = elem; - return *this; - } - - Vector<_Tp>& pop_back() - { - if( hdr.size > 0 ) - --hdr.size; - return *this; - } - - size_t size() const { return hdr.size; } - size_t capacity() const { return hdr.capacity; } - bool empty() const { return hdr.size == 0; } - void clear() { resize(0); } - int type() const { return DataType<_Tp>::type; } - -protected: - Hdr hdr; -}; - - -template inline typename DataType<_Tp>::work_type -dot(const Vector<_Tp>& v1, const Vector<_Tp>& v2) -{ - typedef typename DataType<_Tp>::work_type _Tw; - size_t i = 0, n = v1.size(); - assert(v1.size() == v2.size()); - - _Tw s = 0; - const _Tp *ptr1 = &v1[0], *ptr2 = &v2[0]; - for( ; i < n; i++ ) - s += (_Tw)ptr1[i]*ptr2[i]; - - return s; -} - -// Multiply-with-Carry RNG -inline RNG::RNG() { state = 0xffffffff; } -inline RNG::RNG(uint64 _state) { state = _state ? _state : 0xffffffff; } -inline unsigned RNG::next() -{ - state = (uint64)(unsigned)state*CV_RNG_COEFF + (unsigned)(state >> 32); - return (unsigned)state; -} - -inline RNG::operator uchar() { return (uchar)next(); } -inline RNG::operator schar() { return (schar)next(); } -inline RNG::operator ushort() { return (ushort)next(); } -inline RNG::operator short() { return (short)next(); } -inline RNG::operator unsigned() { return next(); } -inline unsigned RNG::operator ()(unsigned N) {return (unsigned)uniform(0,N);} -inline unsigned RNG::operator ()() {return next();} -inline RNG::operator int() { return (int)next(); } -// * (2^32-1)^-1 -inline RNG::operator float() { return next()*2.3283064365386962890625e-10f; } -inline RNG::operator double() -{ - unsigned t = next(); - return (((uint64)t << 32) | next())*5.4210108624275221700372640043497e-20; -} -inline int RNG::uniform(int a, int b) { return a == b ? a : (int)(next()%(b - a) + a); } -inline float RNG::uniform(float a, float b) { return ((float)*this)*(b - a) + a; } -inline double RNG::uniform(double a, double b) { return ((double)*this)*(b - a) + a; } - -inline TermCriteria::TermCriteria() : type(0), maxCount(0), epsilon(0) {} -inline TermCriteria::TermCriteria(int _type, int _maxCount, double _epsilon) - : type(_type), maxCount(_maxCount), epsilon(_epsilon) {} -inline TermCriteria::TermCriteria(const CvTermCriteria& criteria) - : type(criteria.type), maxCount(criteria.max_iter), epsilon(criteria.epsilon) {} -inline TermCriteria::operator CvTermCriteria() const -{ return cvTermCriteria(type, maxCount, epsilon); } - -inline uchar* LineIterator::operator *() { return ptr; } -inline LineIterator& LineIterator::operator ++() -{ - int mask = err < 0 ? -1 : 0; - err += minusDelta + (plusDelta & mask); - ptr += minusStep + (plusStep & mask); - return *this; -} -inline LineIterator LineIterator::operator ++(int) -{ - LineIterator it = *this; - ++(*this); - return it; -} -inline Point LineIterator::pos() const -{ - Point p; - p.y = (int)((ptr - ptr0)/step); - p.x = (int)(((ptr - ptr0) - p.y*step)/elemSize); - return p; -} - -/////////////////////////////// AutoBuffer //////////////////////////////////////// - -template inline AutoBuffer<_Tp, fixed_size>::AutoBuffer() -{ - ptr = buf; - size = fixed_size; -} - -template inline AutoBuffer<_Tp, fixed_size>::AutoBuffer(size_t _size) -{ - ptr = buf; - size = fixed_size; - allocate(_size); -} - -template inline AutoBuffer<_Tp, fixed_size>::~AutoBuffer() -{ deallocate(); } - -template inline void AutoBuffer<_Tp, fixed_size>::allocate(size_t _size) -{ - if(_size <= size) - return; - deallocate(); - if(_size > fixed_size) - { - ptr = cv::allocate<_Tp>(_size); - size = _size; - } -} - -template inline void AutoBuffer<_Tp, fixed_size>::deallocate() -{ - if( ptr != buf ) - { - cv::deallocate<_Tp>(ptr, size); - ptr = buf; - size = fixed_size; - } -} - -template inline AutoBuffer<_Tp, fixed_size>::operator _Tp* () -{ return ptr; } - -template inline AutoBuffer<_Tp, fixed_size>::operator const _Tp* () const -{ return ptr; } - - -/////////////////////////////////// Ptr //////////////////////////////////////// - -template inline Ptr<_Tp>::Ptr() : obj(0), refcount(0) {} -template inline Ptr<_Tp>::Ptr(_Tp* _obj) : obj(_obj) -{ - if(obj) - { - refcount = (int*)fastMalloc(sizeof(*refcount)); - *refcount = 1; - } - else - refcount = 0; -} - -template inline void Ptr<_Tp>::addref() -{ if( refcount ) CV_XADD(refcount, 1); } - -template inline void Ptr<_Tp>::release() -{ - if( refcount && CV_XADD(refcount, -1) == 1 ) - { - delete_obj(); - fastFree(refcount); - } - refcount = 0; - obj = 0; -} - -template inline void Ptr<_Tp>::delete_obj() -{ - if( obj ) delete obj; -} - -template inline Ptr<_Tp>::~Ptr() { release(); } - -template inline Ptr<_Tp>::Ptr(const Ptr<_Tp>& _ptr) -{ - obj = _ptr.obj; - refcount = _ptr.refcount; - addref(); -} - -template inline Ptr<_Tp>& Ptr<_Tp>::operator = (const Ptr<_Tp>& _ptr) -{ - int* _refcount = _ptr.refcount; - if( _refcount ) - CV_XADD(_refcount, 1); - release(); - obj = _ptr.obj; - refcount = _refcount; - return *this; -} - -template inline _Tp* Ptr<_Tp>::operator -> () { return obj; } -template inline const _Tp* Ptr<_Tp>::operator -> () const { return obj; } - -template inline Ptr<_Tp>::operator _Tp* () { return obj; } -template inline Ptr<_Tp>::operator const _Tp*() const { return obj; } - -template inline bool Ptr<_Tp>::empty() const { return obj == 0; } - -template template Ptr<_Tp>::Ptr(const Ptr<_Tp2>& p) - : obj(0), refcount(0) -{ - if (p.empty()) - return; - - _Tp* p_casted = dynamic_cast<_Tp*>(p.obj); - if (!p_casted) - return; - - obj = p_casted; - refcount = p.refcount; - addref(); -} - -template template inline Ptr<_Tp2> Ptr<_Tp>::ptr() -{ - Ptr<_Tp2> p; - if( !obj ) - return p; - - _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj); - if (!obj_casted) - return p; - - if( refcount ) - CV_XADD(refcount, 1); - - p.obj = obj_casted; - p.refcount = refcount; - return p; -} - -template template inline const Ptr<_Tp2> Ptr<_Tp>::ptr() const -{ - Ptr<_Tp2> p; - if( !obj ) - return p; - - _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj); - if (!obj_casted) - return p; - - if( refcount ) - CV_XADD(refcount, 1); - - p.obj = obj_casted; - p.refcount = refcount; - return p; -} - -//// specializied implementations of Ptr::delete_obj() for classic OpenCV types - -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); - -//////////////////////////////////////// XML & YAML I/O //////////////////////////////////// - -CV_EXPORTS_W void write( FileStorage& fs, const string& name, int value ); -CV_EXPORTS_W void write( FileStorage& fs, const string& name, float value ); -CV_EXPORTS_W void write( FileStorage& fs, const string& name, double value ); -CV_EXPORTS_W void write( FileStorage& fs, const string& name, const string& value ); - -template inline void write(FileStorage& fs, const _Tp& value) -{ write(fs, string(), value); } - -CV_EXPORTS void writeScalar( FileStorage& fs, int value ); -CV_EXPORTS void writeScalar( FileStorage& fs, float value ); -CV_EXPORTS void writeScalar( FileStorage& fs, double value ); -CV_EXPORTS void writeScalar( FileStorage& fs, const string& value ); - -template<> inline void write( FileStorage& fs, const int& value ) -{ - writeScalar(fs, value); -} - -template<> inline void write( FileStorage& fs, const float& value ) -{ - writeScalar(fs, value); -} - -template<> inline void write( FileStorage& fs, const double& value ) -{ - writeScalar(fs, value); -} - -template<> inline void write( FileStorage& fs, const string& value ) -{ - writeScalar(fs, value); -} - -template inline void write(FileStorage& fs, const Point_<_Tp>& pt ) -{ - write(fs, pt.x); - write(fs, pt.y); -} - -template inline void write(FileStorage& fs, const Point3_<_Tp>& pt ) -{ - write(fs, pt.x); - write(fs, pt.y); - write(fs, pt.z); -} - -template inline void write(FileStorage& fs, const Size_<_Tp>& sz ) -{ - write(fs, sz.width); - write(fs, sz.height); -} - -template inline void write(FileStorage& fs, const Complex<_Tp>& c ) -{ - write(fs, c.re); - write(fs, c.im); -} - -template inline void write(FileStorage& fs, const Rect_<_Tp>& r ) -{ - write(fs, r.x); - write(fs, r.y); - write(fs, r.width); - write(fs, r.height); -} - -template inline void write(FileStorage& fs, const Vec<_Tp, cn>& v ) -{ - for(int i = 0; i < cn; i++) - write(fs, v.val[i]); -} - -template inline void write(FileStorage& fs, const Scalar_<_Tp>& s ) -{ - write(fs, s.val[0]); - write(fs, s.val[1]); - write(fs, s.val[2]); - write(fs, s.val[3]); -} - -inline void write(FileStorage& fs, const Range& r ) -{ - write(fs, r.start); - write(fs, r.end); -} - -class CV_EXPORTS WriteStructContext -{ -public: - WriteStructContext(FileStorage& _fs, const string& name, - int flags, const string& typeName=string()); - ~WriteStructContext(); - FileStorage* fs; -}; - -template inline void write(FileStorage& fs, const string& name, const Point_<_Tp>& pt ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, pt.x); - write(fs, pt.y); -} - -template inline void write(FileStorage& fs, const string& name, const Point3_<_Tp>& pt ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, pt.x); - write(fs, pt.y); - write(fs, pt.z); -} - -template inline void write(FileStorage& fs, const string& name, const Size_<_Tp>& sz ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, sz.width); - write(fs, sz.height); -} - -template inline void write(FileStorage& fs, const string& name, const Complex<_Tp>& c ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, c.re); - write(fs, c.im); -} - -template inline void write(FileStorage& fs, const string& name, const Rect_<_Tp>& r ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, r.x); - write(fs, r.y); - write(fs, r.width); - write(fs, r.height); -} - -template inline void write(FileStorage& fs, const string& name, const Vec<_Tp, cn>& v ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - for(int i = 0; i < cn; i++) - write(fs, v.val[i]); -} - -template inline void write(FileStorage& fs, const string& name, const Scalar_<_Tp>& s ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, s.val[0]); - write(fs, s.val[1]); - write(fs, s.val[2]); - write(fs, s.val[3]); -} - -inline void write(FileStorage& fs, const string& name, const Range& r ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+CV_NODE_FLOW); - write(fs, r.start); - write(fs, r.end); -} - -template class VecWriterProxy -{ -public: - VecWriterProxy( FileStorage* _fs ) : fs(_fs) {} - void operator()(const vector<_Tp>& vec) const - { - size_t i, count = vec.size(); - for( i = 0; i < count; i++ ) - write( *fs, vec[i] ); - } - FileStorage* fs; -}; - -template class VecWriterProxy<_Tp,1> -{ -public: - VecWriterProxy( FileStorage* _fs ) : fs(_fs) {} - void operator()(const vector<_Tp>& vec) const - { - int _fmt = DataType<_Tp>::fmt; - char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\0' }; - fs->writeRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, vec.size()*sizeof(_Tp) ); - } - FileStorage* fs; -}; - -template static inline void write( FileStorage& fs, const vector<_Tp>& vec ) -{ - VecWriterProxy<_Tp, DataType<_Tp>::fmt != 0> w(&fs); - w(vec); -} - -template static inline void write( FileStorage& fs, const string& name, - const vector<_Tp>& vec ) -{ - WriteStructContext ws(fs, name, CV_NODE_SEQ+(DataType<_Tp>::fmt != 0 ? CV_NODE_FLOW : 0)); - write(fs, vec); -} - -CV_EXPORTS_W void write( FileStorage& fs, const string& name, const Mat& value ); -CV_EXPORTS void write( FileStorage& fs, const string& name, const SparseMat& value ); - -template static inline FileStorage& operator << (FileStorage& fs, const _Tp& value) -{ - if( !fs.isOpened() ) - return fs; - if( fs.state == FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP ) - CV_Error( CV_StsError, "No element name has been given" ); - write( fs, fs.elname, value ); - if( fs.state & FileStorage::INSIDE_MAP ) - fs.state = FileStorage::NAME_EXPECTED + FileStorage::INSIDE_MAP; - return fs; -} - -CV_EXPORTS FileStorage& operator << (FileStorage& fs, const string& str); - -static inline FileStorage& operator << (FileStorage& fs, const char* str) -{ return (fs << string(str)); } - -static inline FileStorage& operator << (FileStorage& fs, char* value) -{ return (fs << string(value)); } - -inline FileNode::FileNode() : fs(0), node(0) {} -inline FileNode::FileNode(const CvFileStorage* _fs, const CvFileNode* _node) - : fs(_fs), node(_node) {} - -inline FileNode::FileNode(const FileNode& _node) : fs(_node.fs), node(_node.node) {} - -inline int FileNode::type() const { return !node ? NONE : (node->tag & TYPE_MASK); } -inline bool FileNode::empty() const { return node == 0; } -inline bool FileNode::isNone() const { return type() == NONE; } -inline bool FileNode::isSeq() const { return type() == SEQ; } -inline bool FileNode::isMap() const { return type() == MAP; } -inline bool FileNode::isInt() const { return type() == INT; } -inline bool FileNode::isReal() const { return type() == REAL; } -inline bool FileNode::isString() const { return type() == STR; } -inline bool FileNode::isNamed() const { return !node ? false : (node->tag & NAMED) != 0; } -inline size_t FileNode::size() const -{ - int t = type(); - return t == MAP ? (size_t)((CvSet*)node->data.map)->active_count : - t == SEQ ? (size_t)node->data.seq->total : (size_t)!isNone(); -} - -inline CvFileNode* FileNode::operator *() { return (CvFileNode*)node; } -inline const CvFileNode* FileNode::operator* () const { return node; } - -static inline void read(const FileNode& node, int& value, int default_value) -{ - value = !node.node ? default_value : - CV_NODE_IS_INT(node.node->tag) ? node.node->data.i : - CV_NODE_IS_REAL(node.node->tag) ? cvRound(node.node->data.f) : 0x7fffffff; -} - -static inline void read(const FileNode& node, bool& value, bool default_value) -{ - int temp; read(node, temp, (int)default_value); - value = temp != 0; -} - -static inline void read(const FileNode& node, uchar& value, uchar default_value) -{ - int temp; read(node, temp, (int)default_value); - value = saturate_cast(temp); -} - -static inline void read(const FileNode& node, schar& value, schar default_value) -{ - int temp; read(node, temp, (int)default_value); - value = saturate_cast(temp); -} - -static inline void read(const FileNode& node, ushort& value, ushort default_value) -{ - int temp; read(node, temp, (int)default_value); - value = saturate_cast(temp); -} - -static inline void read(const FileNode& node, short& value, short default_value) -{ - int temp; read(node, temp, (int)default_value); - value = saturate_cast(temp); -} - -static inline void read(const FileNode& node, float& value, float default_value) -{ - value = !node.node ? default_value : - CV_NODE_IS_INT(node.node->tag) ? (float)node.node->data.i : - CV_NODE_IS_REAL(node.node->tag) ? (float)node.node->data.f : 1e30f; -} - -static inline void read(const FileNode& node, double& value, double default_value) -{ - value = !node.node ? default_value : - CV_NODE_IS_INT(node.node->tag) ? (double)node.node->data.i : - CV_NODE_IS_REAL(node.node->tag) ? node.node->data.f : 1e300; -} - -static inline void read(const FileNode& node, string& value, const string& default_value) -{ - value = !node.node ? default_value : CV_NODE_IS_STRING(node.node->tag) ? string(node.node->data.str.ptr) : string(""); -} - -template static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 2 ? default_value : Point_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1])); -} - -template static inline void read(const FileNode& node, Point3_<_Tp>& value, const Point3_<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 3 ? default_value : Point3_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]), - saturate_cast<_Tp>(temp[2])); -} - -template static inline void read(const FileNode& node, Size_<_Tp>& value, const Size_<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 2 ? default_value : Size_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1])); -} - -template static inline void read(const FileNode& node, Complex<_Tp>& value, const Complex<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 2 ? default_value : Complex<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1])); -} - -template static inline void read(const FileNode& node, Rect_<_Tp>& value, const Rect_<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 4 ? default_value : Rect_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]), - saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3])); -} - -template static inline void read(const FileNode& node, Vec<_Tp, cn>& value, const Vec<_Tp, cn>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != cn ? default_value : Vec<_Tp, cn>(&temp[0]); -} - -template static inline void read(const FileNode& node, Scalar_<_Tp>& value, const Scalar_<_Tp>& default_value) -{ - vector<_Tp> temp; FileNodeIterator it = node.begin(); it >> temp; - value = temp.size() != 4 ? default_value : Scalar_<_Tp>(saturate_cast<_Tp>(temp[0]), saturate_cast<_Tp>(temp[1]), - saturate_cast<_Tp>(temp[2]), saturate_cast<_Tp>(temp[3])); -} - -static inline void read(const FileNode& node, Range& value, const Range& default_value) -{ - Point2i temp(value.start, value.end); const Point2i default_temp = Point2i(default_value.start, default_value.end); - read(node, temp, default_temp); - value.start = temp.x; value.end = temp.y; -} - -CV_EXPORTS_W void read(const FileNode& node, Mat& mat, const Mat& default_mat=Mat() ); -CV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat=SparseMat() ); - -inline FileNode::operator int() const -{ - int value; - read(*this, value, 0); - return value; -} -inline FileNode::operator float() const -{ - float value; - read(*this, value, 0.f); - return value; -} -inline FileNode::operator double() const -{ - double value; - read(*this, value, 0.); - return value; -} -inline FileNode::operator string() const -{ - string value; - read(*this, value, value); - return value; -} - -inline void FileNode::readRaw( const string& fmt, uchar* vec, size_t len ) const -{ - begin().readRaw( fmt, vec, len ); -} - -template class VecReaderProxy -{ -public: - VecReaderProxy( FileNodeIterator* _it ) : it(_it) {} - void operator()(vector<_Tp>& vec, size_t count) const - { - count = std::min(count, it->remaining); - vec.resize(count); - for( size_t i = 0; i < count; i++, ++(*it) ) - read(**it, vec[i], _Tp()); - } - FileNodeIterator* it; -}; - -template class VecReaderProxy<_Tp,1> -{ -public: - VecReaderProxy( FileNodeIterator* _it ) : it(_it) {} - void operator()(vector<_Tp>& vec, size_t count) const - { - size_t remaining = it->remaining, cn = DataType<_Tp>::channels; - int _fmt = DataType<_Tp>::fmt; - char fmt[] = { (char)((_fmt>>8)+'1'), (char)_fmt, '\0' }; - size_t remaining1 = remaining/cn; - count = count < remaining1 ? count : remaining1; - vec.resize(count); - it->readRaw( string(fmt), !vec.empty() ? (uchar*)&vec[0] : 0, count*sizeof(_Tp) ); - } - FileNodeIterator* it; -}; - -template static inline void -read( FileNodeIterator& it, vector<_Tp>& vec, size_t maxCount=(size_t)INT_MAX ) -{ - VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it); - r(vec, maxCount); -} - -template static inline void -read( const FileNode& node, vector<_Tp>& vec, const vector<_Tp>& default_value=vector<_Tp>() ) -{ - if(!node.node) - vec = default_value; - else - { - FileNodeIterator it = node.begin(); - read( it, vec ); - } -} - -inline FileNodeIterator FileNode::begin() const -{ - return FileNodeIterator(fs, node); -} - -inline FileNodeIterator FileNode::end() const -{ - return FileNodeIterator(fs, node, size()); -} - -inline FileNode FileNodeIterator::operator *() const -{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); } - -inline FileNode FileNodeIterator::operator ->() const -{ return FileNode(fs, (const CvFileNode*)(void*)reader.ptr); } - -template static inline FileNodeIterator& operator >> (FileNodeIterator& it, _Tp& value) -{ read( *it, value, _Tp()); return ++it; } - -template static inline -FileNodeIterator& operator >> (FileNodeIterator& it, vector<_Tp>& vec) -{ - VecReaderProxy<_Tp, DataType<_Tp>::fmt != 0> r(&it); - r(vec, (size_t)INT_MAX); - return it; -} - -template static inline void operator >> (const FileNode& n, _Tp& value) -{ read( n, value, _Tp()); } - -template static inline void operator >> (const FileNode& n, vector<_Tp>& vec) -{ FileNodeIterator it = n.begin(); it >> vec; } - -static inline bool operator == (const FileNodeIterator& it1, const FileNodeIterator& it2) -{ - return it1.fs == it2.fs && it1.container == it2.container && - it1.reader.ptr == it2.reader.ptr && it1.remaining == it2.remaining; -} - -static inline bool operator != (const FileNodeIterator& it1, const FileNodeIterator& it2) -{ - return !(it1 == it2); -} - -static inline ptrdiff_t operator - (const FileNodeIterator& it1, const FileNodeIterator& it2) -{ - return it2.remaining - it1.remaining; -} - -static inline bool operator < (const FileNodeIterator& it1, const FileNodeIterator& it2) -{ - return it1.remaining > it2.remaining; -} - -inline FileNode FileStorage::getFirstTopLevelNode() const -{ - FileNode r = root(); - FileNodeIterator it = r.begin(); - return it != r.end() ? *it : FileNode(); -} - -//////////////////////////////////////// Various algorithms //////////////////////////////////// - -template static inline _Tp gcd(_Tp a, _Tp b) -{ - if( a < b ) - std::swap(a, b); - while( b > 0 ) - { - _Tp r = a % b; - a = b; - b = r; - } - return a; -} - -/****************************************************************************************\ - - Generic implementation of QuickSort algorithm - Use it as: vector<_Tp> a; ... sort(a,); - - The current implementation was derived from *BSD system qsort(): - - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - -\****************************************************************************************/ - -template void sort( vector<_Tp>& vec, _LT LT=_LT() ) -{ - int isort_thresh = 7; - int sp = 0; - - struct - { - _Tp *lb; - _Tp *ub; - } stack[48]; - - size_t total = vec.size(); - - if( total <= 1 ) - return; - - _Tp* arr = &vec[0]; - stack[0].lb = arr; - stack[0].ub = arr + (total - 1); - - while( sp >= 0 ) - { - _Tp* left = stack[sp].lb; - _Tp* right = stack[sp--].ub; - - for(;;) - { - int i, n = (int)(right - left) + 1, m; - _Tp* ptr; - _Tp* ptr2; - - if( n <= isort_thresh ) - { - insert_sort: - for( ptr = left + 1; ptr <= right; ptr++ ) - { - for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--) - std::swap( ptr2[0], ptr2[-1] ); - } - break; - } - else - { - _Tp* left0; - _Tp* left1; - _Tp* right0; - _Tp* right1; - _Tp* pivot; - _Tp* a; - _Tp* b; - _Tp* c; - int swap_cnt = 0; - - left0 = left; - right0 = right; - pivot = left + (n/2); - - if( n > 40 ) - { - int d = n / 8; - a = left, b = left + d, c = left + 2*d; - left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); - - a = pivot - d, b = pivot, c = pivot + d; - pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); - - a = right - 2*d, b = right - d, c = right; - right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); - } - - a = left, b = pivot, c = right; - pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a)) - : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c)); - if( pivot != left0 ) - { - std::swap( *pivot, *left0 ); - pivot = left0; - } - left = left1 = left0 + 1; - right = right1 = right0; - - for(;;) - { - while( left <= right && !LT(*pivot, *left) ) - { - if( !LT(*left, *pivot) ) - { - if( left > left1 ) - std::swap( *left1, *left ); - swap_cnt = 1; - left1++; - } - left++; - } - - while( left <= right && !LT(*right, *pivot) ) - { - if( !LT(*pivot, *right) ) - { - if( right < right1 ) - std::swap( *right1, *right ); - swap_cnt = 1; - right1--; - } - right--; - } - - if( left > right ) - break; - std::swap( *left, *right ); - swap_cnt = 1; - left++; - right--; - } - - if( swap_cnt == 0 ) - { - left = left0, right = right0; - goto insert_sort; - } - - n = std::min( (int)(left1 - left0), (int)(left - left1) ); - for( i = 0; i < n; i++ ) - std::swap( left0[i], left[i-n] ); - - n = std::min( (int)(right0 - right1), (int)(right1 - right) ); - for( i = 0; i < n; i++ ) - std::swap( left[i], right0[i-n+1] ); - n = (int)(left - left1); - m = (int)(right1 - right); - if( n > 1 ) - { - if( m > 1 ) - { - if( n > m ) - { - stack[++sp].lb = left0; - stack[sp].ub = left0 + n - 1; - left = right0 - m + 1, right = right0; - } - else - { - stack[++sp].lb = right0 - m + 1; - stack[sp].ub = right0; - left = left0, right = left0 + n - 1; - } - } - else - left = left0, right = left0 + n - 1; - } - else if( m > 1 ) - left = right0 - m + 1, right = right0; - else - break; - } - } - } -} - -template class LessThan -{ -public: - bool operator()(const _Tp& a, const _Tp& b) const { return a < b; } -}; - -template class GreaterEq -{ -public: - bool operator()(const _Tp& a, const _Tp& b) const { return a >= b; } -}; - -template class LessThanIdx -{ -public: - LessThanIdx( const _Tp* _arr ) : arr(_arr) {} - bool operator()(int a, int b) const { return arr[a] < arr[b]; } - const _Tp* arr; -}; - -template class GreaterEqIdx -{ -public: - GreaterEqIdx( const _Tp* _arr ) : arr(_arr) {} - bool operator()(int a, int b) const { return arr[a] >= arr[b]; } - const _Tp* arr; -}; - - -// This function splits the input sequence or set into one or more equivalence classes and -// returns the vector of labels - 0-based class indexes for each element. -// predicate(a,b) returns true if the two sequence elements certainly belong to the same class. -// -// The algorithm is described in "Introduction to Algorithms" -// by Cormen, Leiserson and Rivest, the chapter "Data structures for disjoint sets" -template int -partition( const vector<_Tp>& _vec, vector& labels, - _EqPredicate predicate=_EqPredicate()) -{ - int i, j, N = (int)_vec.size(); - const _Tp* vec = &_vec[0]; - - const int PARENT=0; - const int RANK=1; - - vector _nodes(N*2); - int (*nodes)[2] = (int(*)[2])&_nodes[0]; - - // The first O(N) pass: create N single-vertex trees - for(i = 0; i < N; i++) - { - nodes[i][PARENT]=-1; - nodes[i][RANK] = 0; - } - - // The main O(N^2) pass: merge connected components - for( i = 0; i < N; i++ ) - { - int root = i; - - // find root - while( nodes[root][PARENT] >= 0 ) - root = nodes[root][PARENT]; - - for( j = 0; j < N; j++ ) - { - if( i == j || !predicate(vec[i], vec[j])) - continue; - int root2 = j; - - while( nodes[root2][PARENT] >= 0 ) - root2 = nodes[root2][PARENT]; - - if( root2 != root ) - { - // unite both trees - int rank = nodes[root][RANK], rank2 = nodes[root2][RANK]; - if( rank > rank2 ) - nodes[root2][PARENT] = root; - else - { - nodes[root][PARENT] = root2; - nodes[root2][RANK] += rank == rank2; - root = root2; - } - assert( nodes[root][PARENT] < 0 ); - - int k = j, parent; - - // compress the path from node2 to root - while( (parent = nodes[k][PARENT]) >= 0 ) - { - nodes[k][PARENT] = root; - k = parent; - } - - // compress the path from node to root - k = i; - while( (parent = nodes[k][PARENT]) >= 0 ) - { - nodes[k][PARENT] = root; - k = parent; - } - } - } - } - - // Final O(N) pass: enumerate classes - labels.resize(N); - int nclasses = 0; - - for( i = 0; i < N; i++ ) - { - int root = i; - while( nodes[root][PARENT] >= 0 ) - root = nodes[root][PARENT]; - // re-use the rank as the class label - if( nodes[root][RANK] >= 0 ) - nodes[root][RANK] = ~nclasses++; - labels[i] = ~nodes[root][RANK]; - } - - return nclasses; -} - - -////////////////////////////////////////////////////////////////////////////// - -// bridge C++ => C Seq API -CV_EXPORTS schar* seqPush( CvSeq* seq, const void* element=0); -CV_EXPORTS schar* seqPushFront( CvSeq* seq, const void* element=0); -CV_EXPORTS void seqPop( CvSeq* seq, void* element=0); -CV_EXPORTS void seqPopFront( CvSeq* seq, void* element=0); -CV_EXPORTS void seqPopMulti( CvSeq* seq, void* elements, - int count, int in_front=0 ); -CV_EXPORTS void seqRemove( CvSeq* seq, int index ); -CV_EXPORTS void clearSeq( CvSeq* seq ); -CV_EXPORTS schar* getSeqElem( const CvSeq* seq, int index ); -CV_EXPORTS void seqRemoveSlice( CvSeq* seq, CvSlice slice ); -CV_EXPORTS void seqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr ); - -template inline Seq<_Tp>::Seq() : seq(0) {} -template inline Seq<_Tp>::Seq( const CvSeq* _seq ) : seq((CvSeq*)_seq) -{ - CV_Assert(!_seq || _seq->elem_size == sizeof(_Tp)); -} - -template inline Seq<_Tp>::Seq( MemStorage& storage, - int headerSize ) -{ - CV_Assert(headerSize >= (int)sizeof(CvSeq)); - seq = cvCreateSeq(DataType<_Tp>::type, headerSize, sizeof(_Tp), storage); -} - -template inline _Tp& Seq<_Tp>::operator [](int idx) -{ return *(_Tp*)getSeqElem(seq, idx); } - -template inline const _Tp& Seq<_Tp>::operator [](int idx) const -{ return *(_Tp*)getSeqElem(seq, idx); } - -template inline SeqIterator<_Tp> Seq<_Tp>::begin() const -{ return SeqIterator<_Tp>(*this); } - -template inline SeqIterator<_Tp> Seq<_Tp>::end() const -{ return SeqIterator<_Tp>(*this, true); } - -template inline size_t Seq<_Tp>::size() const -{ return seq ? seq->total : 0; } - -template inline int Seq<_Tp>::type() const -{ return seq ? CV_MAT_TYPE(seq->flags) : 0; } - -template inline int Seq<_Tp>::depth() const -{ return seq ? CV_MAT_DEPTH(seq->flags) : 0; } - -template inline int Seq<_Tp>::channels() const -{ return seq ? CV_MAT_CN(seq->flags) : 0; } - -template inline size_t Seq<_Tp>::elemSize() const -{ return seq ? seq->elem_size : 0; } - -template inline size_t Seq<_Tp>::index(const _Tp& elem) const -{ return cvSeqElemIdx(seq, &elem); } - -template inline void Seq<_Tp>::push_back(const _Tp& elem) -{ cvSeqPush(seq, &elem); } - -template inline void Seq<_Tp>::push_front(const _Tp& elem) -{ cvSeqPushFront(seq, &elem); } - -template inline void Seq<_Tp>::push_back(const _Tp* elem, size_t count) -{ cvSeqPushMulti(seq, elem, (int)count, 0); } - -template inline void Seq<_Tp>::push_front(const _Tp* elem, size_t count) -{ cvSeqPushMulti(seq, elem, (int)count, 1); } - -template inline _Tp& Seq<_Tp>::back() -{ return *(_Tp*)getSeqElem(seq, -1); } - -template inline const _Tp& Seq<_Tp>::back() const -{ return *(const _Tp*)getSeqElem(seq, -1); } - -template inline _Tp& Seq<_Tp>::front() -{ return *(_Tp*)getSeqElem(seq, 0); } - -template inline const _Tp& Seq<_Tp>::front() const -{ return *(const _Tp*)getSeqElem(seq, 0); } - -template inline bool Seq<_Tp>::empty() const -{ return !seq || seq->total == 0; } - -template inline void Seq<_Tp>::clear() -{ if(seq) clearSeq(seq); } - -template inline void Seq<_Tp>::pop_back() -{ seqPop(seq); } - -template inline void Seq<_Tp>::pop_front() -{ seqPopFront(seq); } - -template inline void Seq<_Tp>::pop_back(_Tp* elem, size_t count) -{ seqPopMulti(seq, elem, (int)count, 0); } - -template inline void Seq<_Tp>::pop_front(_Tp* elem, size_t count) -{ seqPopMulti(seq, elem, (int)count, 1); } - -template inline void Seq<_Tp>::insert(int idx, const _Tp& elem) -{ seqInsert(seq, idx, &elem); } - -template inline void Seq<_Tp>::insert(int idx, const _Tp* elems, size_t count) -{ - CvMat m = cvMat(1, count, DataType<_Tp>::type, elems); - seqInsertSlice(seq, idx, &m); -} - -template inline void Seq<_Tp>::remove(int idx) -{ seqRemove(seq, idx); } - -template inline void Seq<_Tp>::remove(const Range& r) -{ seqRemoveSlice(seq, r); } - -template inline void Seq<_Tp>::copyTo(vector<_Tp>& vec, const Range& range) const -{ - size_t len = !seq ? 0 : range == Range::all() ? seq->total : range.end - range.start; - vec.resize(len); - if( seq && len ) - cvCvtSeqToArray(seq, &vec[0], range); -} - -template inline Seq<_Tp>::operator vector<_Tp>() const -{ - vector<_Tp> vec; - copyTo(vec); - return vec; -} - -template inline SeqIterator<_Tp>::SeqIterator() -{ memset(this, 0, sizeof(*this)); } - -template inline SeqIterator<_Tp>::SeqIterator(const Seq<_Tp>& _seq, bool seekEnd) -{ - cvStartReadSeq(_seq.seq, this); - index = seekEnd ? _seq.seq->total : 0; -} - -template inline void SeqIterator<_Tp>::seek(size_t pos) -{ - cvSetSeqReaderPos(this, (int)pos, false); - index = pos; -} - -template inline size_t SeqIterator<_Tp>::tell() const -{ return index; } - -template inline _Tp& SeqIterator<_Tp>::operator *() -{ return *(_Tp*)ptr; } - -template inline const _Tp& SeqIterator<_Tp>::operator *() const -{ return *(const _Tp*)ptr; } - -template inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator ++() -{ - CV_NEXT_SEQ_ELEM(sizeof(_Tp), *this); - if( ++index >= seq->total*2 ) - index = 0; - return *this; -} - -template inline SeqIterator<_Tp> SeqIterator<_Tp>::operator ++(int) const -{ - SeqIterator<_Tp> it = *this; - ++*this; - return it; -} - -template inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator --() -{ - CV_PREV_SEQ_ELEM(sizeof(_Tp), *this); - if( --index < 0 ) - index = seq->total*2-1; - return *this; -} - -template inline SeqIterator<_Tp> SeqIterator<_Tp>::operator --(int) const -{ - SeqIterator<_Tp> it = *this; - --*this; - return it; -} - -template inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator +=(int delta) -{ - cvSetSeqReaderPos(this, delta, 1); - index += delta; - int n = seq->total*2; - if( index < 0 ) - index += n; - if( index >= n ) - index -= n; - return *this; -} - -template inline SeqIterator<_Tp>& SeqIterator<_Tp>::operator -=(int delta) -{ - return (*this += -delta); -} - -template inline ptrdiff_t operator - (const SeqIterator<_Tp>& a, - const SeqIterator<_Tp>& b) -{ - ptrdiff_t delta = a.index - b.index, n = a.seq->total; - if( std::abs(static_cast(delta)) > n ) - delta += delta < 0 ? n : -n; - return delta; -} - -template inline bool operator == (const SeqIterator<_Tp>& a, - const SeqIterator<_Tp>& b) -{ - return a.seq == b.seq && a.index == b.index; -} - -template inline bool operator != (const SeqIterator<_Tp>& a, - const SeqIterator<_Tp>& b) -{ - return !(a == b); -} - - -template struct RTTIImpl -{ -public: - static int isInstance(const void* ptr) - { - static _ClsName dummy; - static void* dummyp = &dummy; - union - { - const void* p; - const void** pp; - } a, b; - a.p = dummyp; - b.p = ptr; - return *a.pp == *b.pp; - } - static void release(void** dbptr) - { - if(dbptr && *dbptr) - { - delete (_ClsName*)*dbptr; - *dbptr = 0; - } - } - static void* read(CvFileStorage* fs, CvFileNode* n) - { - FileNode fn(fs, n); - _ClsName* obj = new _ClsName; - if(obj->read(fn)) - return obj; - delete obj; - return 0; - } - - static void write(CvFileStorage* _fs, const char* name, const void* ptr, CvAttrList) - { - if(ptr && _fs) - { - FileStorage fs(_fs); - fs.fs.addref(); - ((const _ClsName*)ptr)->write(fs, string(name)); - } - } - - static void* clone(const void* ptr) - { - if(!ptr) - return 0; - return new _ClsName(*(const _ClsName*)ptr); - } -}; - - -class CV_EXPORTS Formatter -{ -public: - virtual ~Formatter() {} - virtual void write(std::ostream& out, const Mat& m, const int* params=0, int nparams=0) const = 0; - virtual void write(std::ostream& out, const void* data, int nelems, int type, - const int* params=0, int nparams=0) const = 0; - static const Formatter* get(const char* fmt=""); - static const Formatter* setDefault(const Formatter* fmt); -}; - - -struct CV_EXPORTS Formatted -{ - Formatted(const Mat& m, const Formatter* fmt, - const vector& params); - Formatted(const Mat& m, const Formatter* fmt, - const int* params=0); - Mat mtx; - const Formatter* fmt; - vector params; -}; - -static inline Formatted format(const Mat& mtx, const char* fmt, - const vector& params=vector()) -{ - return Formatted(mtx, Formatter::get(fmt), params); -} - -template static inline Formatted format(const vector >& vec, - const char* fmt, const vector& params=vector()) -{ - return Formatted(Mat(vec), Formatter::get(fmt), params); -} - -template static inline Formatted format(const vector >& vec, - const char* fmt, const vector& params=vector()) -{ - return Formatted(Mat(vec), Formatter::get(fmt), params); -} - -/** \brief prints Mat to the output stream in Matlab notation - * use like - @verbatim - Mat my_mat = Mat::eye(3,3,CV_32F); - std::cout << my_mat; - @endverbatim - */ -static inline std::ostream& operator << (std::ostream& out, const Mat& mtx) -{ - Formatter::get()->write(out, mtx); - return out; -} - -/** \brief prints Mat to the output stream allows in the specified notation (see format) - * use like - @verbatim - Mat my_mat = Mat::eye(3,3,CV_32F); - std::cout << my_mat; - @endverbatim - */ -static inline std::ostream& operator << (std::ostream& out, const Formatted& fmtd) -{ - fmtd.fmt->write(out, fmtd.mtx); - return out; -} - - -template static inline std::ostream& operator << (std::ostream& out, - const vector >& vec) -{ - Formatter::get()->write(out, Mat(vec)); - return out; -} - - -template static inline std::ostream& operator << (std::ostream& out, - const vector >& vec) -{ - Formatter::get()->write(out, Mat(vec)); - return out; -} - - -/** Writes a Matx to an output stream. - */ -template inline std::ostream& operator<<(std::ostream& out, const Matx<_Tp, m, n>& matx) -{ - out << cv::Mat(matx); - return out; -} - -/** Writes a point to an output stream in Matlab notation - */ -template inline std::ostream& operator<<(std::ostream& out, const Point_<_Tp>& p) -{ - out << "[" << p.x << ", " << p.y << "]"; - return out; -} - -/** Writes a point to an output stream in Matlab notation - */ -template inline std::ostream& operator<<(std::ostream& out, const Point3_<_Tp>& p) -{ - out << "[" << p.x << ", " << p.y << ", " << p.z << "]"; - return out; -} - -/** Writes a Vec to an output stream. Format example : [10, 20, 30] - */ -template inline std::ostream& operator<<(std::ostream& out, const Vec<_Tp, n>& vec) -{ - out << "["; - - if(Vec<_Tp, n>::depth < CV_32F) - { - for (int i = 0; i < n - 1; ++i) { - out << (int)vec[i] << ", "; - } - out << (int)vec[n-1] << "]"; - } - else - { - for (int i = 0; i < n - 1; ++i) { - out << vec[i] << ", "; - } - out << vec[n-1] << "]"; - } - - return out; -} - -/** Writes a Size_ to an output stream. Format example : [640 x 480] - */ -template inline std::ostream& operator<<(std::ostream& out, const Size_<_Tp>& size) -{ - out << "[" << size.width << " x " << size.height << "]"; - return out; -} - -/** Writes a Rect_ to an output stream. Format example : [640 x 480 from (10, 20)] - */ -template inline std::ostream& operator<<(std::ostream& out, const Rect_<_Tp>& rect) -{ - out << "[" << rect.width << " x " << rect.height << " from (" << rect.x << ", " << rect.y << ")]"; - return out; -} - - -template inline Ptr<_Tp> Algorithm::create(const string& name) -{ - return _create(name).ptr<_Tp>(); -} - -template -inline void Algorithm::set(const char* _name, const Ptr<_Tp>& value) -{ - Ptr algo_ptr = value. template ptr(); - if (algo_ptr.empty()) { - CV_Error( CV_StsUnsupportedFormat, "unknown/unsupported Ptr type of the second parameter of the method Algorithm::set"); - } - info()->set(this, _name, ParamType::type, &algo_ptr); -} - -template -inline void Algorithm::set(const string& _name, const Ptr<_Tp>& value) -{ - this->set<_Tp>(_name.c_str(), value); -} - -template -inline void Algorithm::setAlgorithm(const char* _name, const Ptr<_Tp>& value) -{ - Ptr algo_ptr = value. template ptr(); - if (algo_ptr.empty()) { - CV_Error( CV_StsUnsupportedFormat, "unknown/unsupported Ptr type of the second parameter of the method Algorithm::set"); - } - info()->set(this, _name, ParamType::type, &algo_ptr); -} - -template -inline void Algorithm::setAlgorithm(const string& _name, const Ptr<_Tp>& value) -{ - this->set<_Tp>(_name.c_str(), value); -} - -template inline typename ParamType<_Tp>::member_type Algorithm::get(const string& _name) const -{ - typename ParamType<_Tp>::member_type value; - info()->get(this, _name.c_str(), ParamType<_Tp>::type, &value); - return value; -} - -template inline typename ParamType<_Tp>::member_type Algorithm::get(const char* _name) const -{ - typename ParamType<_Tp>::member_type value; - info()->get(this, _name, ParamType<_Tp>::type, &value); - return value; -} - -template inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&), - const string& help) -{ - //TODO: static assert: _Tp inherits from _Base - addParam_(algo, parameter, ParamType<_Base>::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -template inline void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - Ptr<_Tp>& value, bool readOnly, Ptr<_Tp> (Algorithm::*getter)(), void (Algorithm::*setter)(const Ptr<_Tp>&), - const string& help) -{ - //TODO: static assert: _Tp inherits from Algorithm - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -} - -#ifdef _MSC_VER -# pragma warning(pop) -#endif - -#endif // __cplusplus -#endif diff --git a/modules/core/include/opencv2/core/types_c.h b/modules/core/include/opencv2/core/types_c.h deleted file mode 100644 index 99ac0d2..0000000 --- a/modules/core/include/opencv2/core/types_c.h +++ /dev/null @@ -1,1896 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_CORE_TYPES_H__ -#define __OPENCV_CORE_TYPES_H__ - -#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER -# if _MSC_VER > 1300 -# define _CRT_SECURE_NO_DEPRECATE /* to avoid multiple Visual Studio 2005 warnings */ -# endif -#endif - - -#ifndef SKIP_INCLUDES - -#include -#include -#include -#include - -#if !defined _MSC_VER && !defined __BORLANDC__ -# include -#endif - -#if defined __ICL -# define CV_ICC __ICL -#elif defined __ICC -# define CV_ICC __ICC -#elif defined __ECL -# define CV_ICC __ECL -#elif defined __ECC -# define CV_ICC __ECC -#elif defined __INTEL_COMPILER -# define CV_ICC __INTEL_COMPILER -#endif - -#if defined CV_ICC && !defined CV_ENABLE_UNROLLED -# define CV_ENABLE_UNROLLED 0 -#else -# define CV_ENABLE_UNROLLED 1 -#endif - -#if (defined _M_X64 && defined _MSC_VER && _MSC_VER >= 1400) || (__GNUC__ >= 4 && defined __x86_64__) -# if defined WIN32 -# include -# endif -# if defined __SSE2__ || !defined __GNUC__ -# include -# endif -#endif - -#if defined __BORLANDC__ -# include -#else -# include -#endif - -#ifdef HAVE_IPL -# ifndef __IPL_H__ -# if defined WIN32 || defined _WIN32 -# include -# else -# include -# endif -# endif -#elif defined __IPL_H__ -# define HAVE_IPL -#endif - -#endif // SKIP_INCLUDES - -#if defined WIN32 || defined _WIN32 -# define CV_CDECL __cdecl -# define CV_STDCALL __stdcall -#else -# define CV_CDECL -# define CV_STDCALL -#endif - -#ifndef CV_EXTERN_C -# ifdef __cplusplus -# define CV_EXTERN_C extern "C" -# define CV_DEFAULT(val) = val -# else -# define CV_EXTERN_C -# define CV_DEFAULT(val) -# endif -#endif - -#ifndef CV_EXTERN_C_FUNCPTR -# ifdef __cplusplus -# define CV_EXTERN_C_FUNCPTR(x) extern "C" { typedef x; } -# else -# define CV_EXTERN_C_FUNCPTR(x) typedef x -# endif -#endif - -#ifndef CV_INLINE -# if defined __cplusplus -# define CV_INLINE inline -# elif defined _MSC_VER -# define CV_INLINE __inline -# else -# define CV_INLINE static -# endif -#endif /* CV_INLINE */ - -#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS -# define CV_EXPORTS __declspec(dllexport) -#else -# define CV_EXPORTS -#endif - -#ifndef CVAPI -# define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL -#endif - -#if defined _MSC_VER || defined __BORLANDC__ - typedef __int64 int64; - typedef unsigned __int64 uint64; -# define CV_BIG_INT(n) n##I64 -# define CV_BIG_UINT(n) n##UI64 -#else - typedef int64_t int64; - typedef uint64_t uint64; -# define CV_BIG_INT(n) n##LL -# define CV_BIG_UINT(n) n##ULL -#endif - -#ifndef HAVE_IPL - typedef unsigned char uchar; - typedef unsigned short ushort; -#endif - -typedef signed char schar; - -/* special informative macros for wrapper generators */ -#define CV_CARRAY(counter) -#define CV_CUSTOM_CARRAY(args) -#define CV_EXPORTS_W CV_EXPORTS -#define CV_EXPORTS_W_SIMPLE CV_EXPORTS -#define CV_EXPORTS_AS(synonym) CV_EXPORTS -#define CV_EXPORTS_W_MAP CV_EXPORTS -#define CV_IN_OUT -#define CV_OUT -#define CV_PROP -#define CV_PROP_RW -#define CV_WRAP -#define CV_WRAP_AS(synonym) -#define CV_WRAP_DEFAULT(value) - -/* CvArr* is used to pass arbitrary - * array-like data structures - * into functions where the particular - * array type is recognized at runtime: - */ -typedef void CvArr; - -typedef union Cv32suf -{ - int i; - unsigned u; - float f; -} -Cv32suf; - -typedef union Cv64suf -{ - int64 i; - uint64 u; - double f; -} -Cv64suf; - -typedef int CVStatus; - -enum { - CV_StsOk= 0, /* everithing is ok */ - CV_StsBackTrace= -1, /* pseudo error for back trace */ - CV_StsError= -2, /* unknown /unspecified error */ - CV_StsInternal= -3, /* internal error (bad state) */ - CV_StsNoMem= -4, /* insufficient memory */ - CV_StsBadArg= -5, /* function arg/param is bad */ - CV_StsBadFunc= -6, /* unsupported function */ - CV_StsNoConv= -7, /* iter. didn't converge */ - CV_StsAutoTrace= -8, /* tracing */ - CV_HeaderIsNull= -9, /* image header is NULL */ - CV_BadImageSize= -10, /* image size is invalid */ - CV_BadOffset= -11, /* offset is invalid */ - CV_BadDataPtr= -12, /**/ - CV_BadStep= -13, /**/ - CV_BadModelOrChSeq= -14, /**/ - CV_BadNumChannels= -15, /**/ - CV_BadNumChannel1U= -16, /**/ - CV_BadDepth= -17, /**/ - CV_BadAlphaChannel= -18, /**/ - CV_BadOrder= -19, /**/ - CV_BadOrigin= -20, /**/ - CV_BadAlign= -21, /**/ - CV_BadCallBack= -22, /**/ - CV_BadTileSize= -23, /**/ - CV_BadCOI= -24, /**/ - CV_BadROISize= -25, /**/ - CV_MaskIsTiled= -26, /**/ - CV_StsNullPtr= -27, /* null pointer */ - CV_StsVecLengthErr= -28, /* incorrect vector length */ - CV_StsFilterStructContentErr= -29, /* incorr. filter structure content */ - CV_StsKernelStructContentErr= -30, /* incorr. transform kernel content */ - CV_StsFilterOffsetErr= -31, /* incorrect filter offset value */ - CV_StsBadSize= -201, /* the input/output structure size is incorrect */ - CV_StsDivByZero= -202, /* division by zero */ - CV_StsInplaceNotSupported= -203, /* in-place operation is not supported */ - CV_StsObjectNotFound= -204, /* request can't be completed */ - CV_StsUnmatchedFormats= -205, /* formats of input/output arrays differ */ - CV_StsBadFlag= -206, /* flag is wrong or not supported */ - CV_StsBadPoint= -207, /* bad CvPoint */ - CV_StsBadMask= -208, /* bad format of mask (neither 8uC1 nor 8sC1)*/ - CV_StsUnmatchedSizes= -209, /* sizes of input/output structures do not match */ - CV_StsUnsupportedFormat= -210, /* the data format/type is not supported by the function*/ - CV_StsOutOfRange= -211, /* some of parameters are out of range */ - CV_StsParseError= -212, /* invalid syntax/structure of the parsed file */ - CV_StsNotImplemented= -213, /* the requested function/feature is not implemented */ - CV_StsBadMemBlock= -214, /* an allocated block has been corrupted */ - CV_StsAssert= -215, /* assertion failed */ - CV_GpuNotSupported= -216, - CV_GpuApiCallError= -217, - CV_OpenGlNotSupported= -218, - CV_OpenGlApiCallError= -219, - CV_OpenCLDoubleNotSupported= -220, - CV_OpenCLInitError= -221, - CV_OpenCLNoAMDBlasFft= -222 -}; - -/****************************************************************************************\ -* Common macros and inline functions * -\****************************************************************************************/ - -#ifdef HAVE_TEGRA_OPTIMIZATION -# include "tegra_round.hpp" -#endif - -#define CV_PI 3.1415926535897932384626433832795 -#define CV_LOG2 0.69314718055994530941723212145818 - -#define CV_SWAP(a,b,t) ((t) = (a), (a) = (b), (b) = (t)) - -#ifndef MIN -# define MIN(a,b) ((a) > (b) ? (b) : (a)) -#endif - -#ifndef MAX -# define MAX(a,b) ((a) < (b) ? (b) : (a)) -#endif - -/* min & max without jumps */ -#define CV_IMIN(a, b) ((a) ^ (((a)^(b)) & (((a) < (b)) - 1))) - -#define CV_IMAX(a, b) ((a) ^ (((a)^(b)) & (((a) > (b)) - 1))) - -/* absolute value without jumps */ -#ifndef __cplusplus -# define CV_IABS(a) (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0)) -#else -# define CV_IABS(a) abs(a) -#endif -#define CV_CMP(a,b) (((a) > (b)) - ((a) < (b))) -#define CV_SIGN(a) CV_CMP((a),0) - -CV_INLINE int cvRound( double value ) -{ -#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__ && defined __SSE2__ && !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - return _mm_cvtsd_si32(t); -#elif defined _MSC_VER && defined _M_IX86 - int t; - __asm - { - fld value; - fistp t; - } - return t; -#elif defined _MSC_VER && defined _M_ARM && defined HAVE_TEGRA_OPTIMIZATION - TEGRA_ROUND(value); -#elif defined CV_ICC || defined __GNUC__ -# ifdef HAVE_TEGRA_OPTIMIZATION - TEGRA_ROUND(value); -# else - return (int)lrint(value); -# endif -#else - double intpart, fractpart; - fractpart = modf(value, &intpart); - if ((fabs(fractpart) != 0.5) || ((((int)intpart) % 2) != 0)) - return (int)(value + (value >= 0 ? 0.5 : -0.5)); - else - return (int)intpart; -#endif -} - -#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP) -# include "emmintrin.h" -#endif - -CV_INLINE int cvFloor( double value ) -{ -#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__ && !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - int i = _mm_cvtsd_si32(t); - return i - _mm_movemask_pd(_mm_cmplt_sd(t, _mm_cvtsi32_sd(t,i))); -#elif defined __GNUC__ - int i = (int)value; - return i - (i > value); -#else - int i = cvRound(value); - float diff = (float)(value - i); - return i - (diff < 0); -#endif -} - - -CV_INLINE int cvCeil( double value ) -{ -#if defined _MSC_VER && defined _M_X64 || (defined __GNUC__ && defined __SSE2__&& !defined __APPLE__) - __m128d t = _mm_set_sd( value ); - int i = _mm_cvtsd_si32(t); - return i + _mm_movemask_pd(_mm_cmplt_sd(_mm_cvtsi32_sd(t,i), t)); -#elif defined __GNUC__ - int i = (int)value; - return i + (i < value); -#else - int i = cvRound(value); - float diff = (float)(i - value); - return i + (diff < 0); -#endif -} - -#define cvInvSqrt(value) ((float)(1./sqrt(value))) -#define cvSqrt(value) ((float)sqrt(value)) - -CV_INLINE int cvIsNaN( double value ) -{ - Cv64suf ieee754; - ieee754.f = value; - return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) + - ((unsigned)ieee754.u != 0) > 0x7ff00000; -} - - -CV_INLINE int cvIsInf( double value ) -{ - Cv64suf ieee754; - ieee754.f = value; - return ((unsigned)(ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 && - (unsigned)ieee754.u == 0; -} - - -/*************** Random number generation *******************/ - -typedef uint64 CvRNG; - -#define CV_RNG_COEFF 4164903690U - -CV_INLINE CvRNG cvRNG( int64 seed CV_DEFAULT(-1)) -{ - CvRNG rng = seed ? (uint64)seed : (uint64)(int64)-1; - return rng; -} - -/* Return random 32-bit unsigned integer: */ -CV_INLINE unsigned cvRandInt( CvRNG* rng ) -{ - uint64 temp = *rng; - temp = (uint64)(unsigned)temp*CV_RNG_COEFF + (temp >> 32); - *rng = temp; - return (unsigned)temp; -} - -/* Returns random floating-point number between 0 and 1: */ -CV_INLINE double cvRandReal( CvRNG* rng ) -{ - return cvRandInt(rng)*2.3283064365386962890625e-10 /* 2^-32 */; -} - -/****************************************************************************************\ -* Image type (IplImage) * -\****************************************************************************************/ - -#ifndef HAVE_IPL - -/* - * The following definitions (until #endif) - * is an extract from IPL headers. - * Copyright (c) 1995 Intel Corporation. - */ -#define IPL_DEPTH_SIGN 0x80000000 - -#define IPL_DEPTH_1U 1 -#define IPL_DEPTH_8U 8 -#define IPL_DEPTH_16U 16 -#define IPL_DEPTH_32F 32 - -#define IPL_DEPTH_8S (IPL_DEPTH_SIGN| 8) -#define IPL_DEPTH_16S (IPL_DEPTH_SIGN|16) -#define IPL_DEPTH_32S (IPL_DEPTH_SIGN|32) - -#define IPL_DATA_ORDER_PIXEL 0 -#define IPL_DATA_ORDER_PLANE 1 - -#define IPL_ORIGIN_TL 0 -#define IPL_ORIGIN_BL 1 - -#define IPL_ALIGN_4BYTES 4 -#define IPL_ALIGN_8BYTES 8 -#define IPL_ALIGN_16BYTES 16 -#define IPL_ALIGN_32BYTES 32 - -#define IPL_ALIGN_DWORD IPL_ALIGN_4BYTES -#define IPL_ALIGN_QWORD IPL_ALIGN_8BYTES - -#define IPL_BORDER_CONSTANT 0 -#define IPL_BORDER_REPLICATE 1 -#define IPL_BORDER_REFLECT 2 -#define IPL_BORDER_WRAP 3 - -typedef struct _IplImage -{ - int nSize; /* sizeof(IplImage) */ - int ID; /* version (=0)*/ - int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ - int alphaChannel; /* Ignored by OpenCV */ - int depth; /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, - IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported. */ - char colorModel[4]; /* Ignored by OpenCV */ - char channelSeq[4]; /* ditto */ - int dataOrder; /* 0 - interleaved color channels, 1 - separate color channels. - cvCreateImage can only create interleaved images */ - int origin; /* 0 - top-left origin, - 1 - bottom-left origin (Windows bitmaps style). */ - int align; /* Alignment of image rows (4 or 8). - OpenCV ignores it and uses widthStep instead. */ - int width; /* Image width in pixels. */ - int height; /* Image height in pixels. */ - struct _IplROI *roi; /* Image ROI. If NULL, the whole image is selected. */ - struct _IplImage *maskROI; /* Must be NULL. */ - void *imageId; /* " " */ - struct _IplTileInfo *tileInfo; /* " " */ - int imageSize; /* Image data size in bytes - (==image->height*image->widthStep - in case of interleaved data)*/ - char *imageData; /* Pointer to aligned image data. */ - int widthStep; /* Size of aligned image row in bytes. */ - int BorderMode[4]; /* Ignored by OpenCV. */ - int BorderConst[4]; /* Ditto. */ - char *imageDataOrigin; /* Pointer to very origin of image data - (not necessarily aligned) - - needed for correct deallocation */ -} -IplImage; - -typedef struct _IplTileInfo IplTileInfo; - -typedef struct _IplROI -{ - int coi; /* 0 - no COI (all channels are selected), 1 - 0th channel is selected ...*/ - int xOffset; - int yOffset; - int width; - int height; -} -IplROI; - -typedef struct _IplConvKernel -{ - int nCols; - int nRows; - int anchorX; - int anchorY; - int *values; - int nShiftR; -} -IplConvKernel; - -typedef struct _IplConvKernelFP -{ - int nCols; - int nRows; - int anchorX; - int anchorY; - float *values; -} -IplConvKernelFP; - -#define IPL_IMAGE_HEADER 1 -#define IPL_IMAGE_DATA 2 -#define IPL_IMAGE_ROI 4 - -#endif/*HAVE_IPL*/ - -/* extra border mode */ -#define IPL_BORDER_REFLECT_101 4 -#define IPL_BORDER_TRANSPARENT 5 - -#define IPL_IMAGE_MAGIC_VAL ((int)sizeof(IplImage)) -#define CV_TYPE_NAME_IMAGE "opencv-image" - -#define CV_IS_IMAGE_HDR(img) \ - ((img) != NULL && ((const IplImage*)(img))->nSize == sizeof(IplImage)) - -#define CV_IS_IMAGE(img) \ - (CV_IS_IMAGE_HDR(img) && ((IplImage*)img)->imageData != NULL) - -/* for storing double-precision - floating point data in IplImage's */ -#define IPL_DEPTH_64F 64 - -/* get reference to pixel at (col,row), - for multi-channel images (col) should be multiplied by number of channels */ -#define CV_IMAGE_ELEM( image, elemtype, row, col ) \ - (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)]) - -/****************************************************************************************\ -* Matrix type (CvMat) * -\****************************************************************************************/ - -#define CV_CN_MAX 512 -#define CV_CN_SHIFT 3 -#define CV_DEPTH_MAX (1 << CV_CN_SHIFT) - -#define CV_8U 0 -#define CV_8S 1 -#define CV_16U 2 -#define CV_16S 3 -#define CV_32S 4 -#define CV_32F 5 -#define CV_64F 6 -#define CV_USRTYPE1 7 - -#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1) -#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) - -#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) -#define CV_MAKE_TYPE CV_MAKETYPE - -#define CV_8UC1 CV_MAKETYPE(CV_8U,1) -#define CV_8UC2 CV_MAKETYPE(CV_8U,2) -#define CV_8UC3 CV_MAKETYPE(CV_8U,3) -#define CV_8UC4 CV_MAKETYPE(CV_8U,4) -#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n)) - -#define CV_8SC1 CV_MAKETYPE(CV_8S,1) -#define CV_8SC2 CV_MAKETYPE(CV_8S,2) -#define CV_8SC3 CV_MAKETYPE(CV_8S,3) -#define CV_8SC4 CV_MAKETYPE(CV_8S,4) -#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n)) - -#define CV_16UC1 CV_MAKETYPE(CV_16U,1) -#define CV_16UC2 CV_MAKETYPE(CV_16U,2) -#define CV_16UC3 CV_MAKETYPE(CV_16U,3) -#define CV_16UC4 CV_MAKETYPE(CV_16U,4) -#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n)) - -#define CV_16SC1 CV_MAKETYPE(CV_16S,1) -#define CV_16SC2 CV_MAKETYPE(CV_16S,2) -#define CV_16SC3 CV_MAKETYPE(CV_16S,3) -#define CV_16SC4 CV_MAKETYPE(CV_16S,4) -#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n)) - -#define CV_32SC1 CV_MAKETYPE(CV_32S,1) -#define CV_32SC2 CV_MAKETYPE(CV_32S,2) -#define CV_32SC3 CV_MAKETYPE(CV_32S,3) -#define CV_32SC4 CV_MAKETYPE(CV_32S,4) -#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n)) - -#define CV_32FC1 CV_MAKETYPE(CV_32F,1) -#define CV_32FC2 CV_MAKETYPE(CV_32F,2) -#define CV_32FC3 CV_MAKETYPE(CV_32F,3) -#define CV_32FC4 CV_MAKETYPE(CV_32F,4) -#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) - -#define CV_64FC1 CV_MAKETYPE(CV_64F,1) -#define CV_64FC2 CV_MAKETYPE(CV_64F,2) -#define CV_64FC3 CV_MAKETYPE(CV_64F,3) -#define CV_64FC4 CV_MAKETYPE(CV_64F,4) -#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) - -#define CV_AUTO_STEP 0x7fffffff -#define CV_WHOLE_ARR cvSlice( 0, 0x3fffffff ) - -#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) -#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) -#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1) -#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) -#define CV_MAT_CONT_FLAG_SHIFT 14 -#define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) -#define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) -#define CV_IS_CONT_MAT CV_IS_MAT_CONT -#define CV_SUBMAT_FLAG_SHIFT 15 -#define CV_SUBMAT_FLAG (1 << CV_SUBMAT_FLAG_SHIFT) -#define CV_IS_SUBMAT(flags) ((flags) & CV_MAT_SUBMAT_FLAG) - -#define CV_MAGIC_MASK 0xFFFF0000 -#define CV_MAT_MAGIC_VAL 0x42420000 -#define CV_TYPE_NAME_MAT "opencv-matrix" - -typedef struct CvMat -{ - int type; - int step; - - /* for internal use only */ - int* refcount; - int hdr_refcount; - - union - { - uchar* ptr; - short* s; - int* i; - float* fl; - double* db; - } data; - -#ifdef __cplusplus - union - { - int rows; - int height; - }; - - union - { - int cols; - int width; - }; -#else - int rows; - int cols; -#endif - -} -CvMat; - - -#define CV_IS_MAT_HDR(mat) \ - ((mat) != NULL && \ - (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \ - ((const CvMat*)(mat))->cols > 0 && ((const CvMat*)(mat))->rows > 0) - -#define CV_IS_MAT_HDR_Z(mat) \ - ((mat) != NULL && \ - (((const CvMat*)(mat))->type & CV_MAGIC_MASK) == CV_MAT_MAGIC_VAL && \ - ((const CvMat*)(mat))->cols >= 0 && ((const CvMat*)(mat))->rows >= 0) - -#define CV_IS_MAT(mat) \ - (CV_IS_MAT_HDR(mat) && ((const CvMat*)(mat))->data.ptr != NULL) - -#define CV_IS_MASK_ARR(mat) \ - (((mat)->type & (CV_MAT_TYPE_MASK & ~CV_8SC1)) == 0) - -#define CV_ARE_TYPES_EQ(mat1, mat2) \ - ((((mat1)->type ^ (mat2)->type) & CV_MAT_TYPE_MASK) == 0) - -#define CV_ARE_CNS_EQ(mat1, mat2) \ - ((((mat1)->type ^ (mat2)->type) & CV_MAT_CN_MASK) == 0) - -#define CV_ARE_DEPTHS_EQ(mat1, mat2) \ - ((((mat1)->type ^ (mat2)->type) & CV_MAT_DEPTH_MASK) == 0) - -#define CV_ARE_SIZES_EQ(mat1, mat2) \ - ((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols) - -#define CV_IS_MAT_CONST(mat) \ - (((mat)->rows|(mat)->cols) == 1) - -/* Size of each channel item, - 0x124489 = 1000 0100 0100 0010 0010 0001 0001 ~ array of sizeof(arr_type_elem) */ -#define CV_ELEM_SIZE1(type) \ - ((((sizeof(size_t)<<28)|0x8442211) >> CV_MAT_DEPTH(type)*4) & 15) - -/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ -#define CV_ELEM_SIZE(type) \ - (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3)) - -#define IPL2CV_DEPTH(depth) \ - ((((CV_8U)+(CV_16U<<4)+(CV_32F<<8)+(CV_64F<<16)+(CV_8S<<20)+ \ - (CV_16S<<24)+(CV_32S<<28)) >> ((((depth) & 0xF0) >> 2) + \ - (((depth) & IPL_DEPTH_SIGN) ? 20 : 0))) & 15) - -/* Inline constructor. No data is allocated internally!!! - * (Use together with cvCreateData, or use cvCreateMat instead to - * get a matrix with allocated data): - */ -CV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL)) -{ - CvMat m; - - assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F ); - type = CV_MAT_TYPE(type); - m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type; - m.cols = cols; - m.rows = rows; - m.step = m.cols*CV_ELEM_SIZE(type); - m.data.ptr = (uchar*)data; - m.refcount = NULL; - m.hdr_refcount = 0; - - return m; -} - - -#define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size ) \ - (assert( (unsigned)(row) < (unsigned)(mat).rows && \ - (unsigned)(col) < (unsigned)(mat).cols ), \ - (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col)) - -#define CV_MAT_ELEM_PTR( mat, row, col ) \ - CV_MAT_ELEM_PTR_FAST( mat, row, col, CV_ELEM_SIZE((mat).type) ) - -#define CV_MAT_ELEM( mat, elemtype, row, col ) \ - (*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype))) - - -CV_INLINE double cvmGet( const CvMat* mat, int row, int col ) -{ - int type; - - type = CV_MAT_TYPE(mat->type); - assert( (unsigned)row < (unsigned)mat->rows && - (unsigned)col < (unsigned)mat->cols ); - - if( type == CV_32FC1 ) - return ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col]; - else - { - assert( type == CV_64FC1 ); - return ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col]; - } -} - - -CV_INLINE void cvmSet( CvMat* mat, int row, int col, double value ) -{ - int type; - type = CV_MAT_TYPE(mat->type); - assert( (unsigned)row < (unsigned)mat->rows && - (unsigned)col < (unsigned)mat->cols ); - - if( type == CV_32FC1 ) - ((float*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value; - else - { - assert( type == CV_64FC1 ); - ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value; - } -} - - -CV_INLINE int cvIplDepth( int type ) -{ - int depth = CV_MAT_DEPTH(type); - return CV_ELEM_SIZE1(depth)*8 | (depth == CV_8S || depth == CV_16S || - depth == CV_32S ? IPL_DEPTH_SIGN : 0); -} - - -/****************************************************************************************\ -* Multi-dimensional dense array (CvMatND) * -\****************************************************************************************/ - -#define CV_MATND_MAGIC_VAL 0x42430000 -#define CV_TYPE_NAME_MATND "opencv-nd-matrix" - -#define CV_MAX_DIM 32 -#define CV_MAX_DIM_HEAP 1024 - -typedef struct CvMatND -{ - int type; - int dims; - - int* refcount; - int hdr_refcount; - - union - { - uchar* ptr; - float* fl; - double* db; - int* i; - short* s; - } data; - - struct - { - int size; - int step; - } - dim[CV_MAX_DIM]; -} -CvMatND; - -#define CV_IS_MATND_HDR(mat) \ - ((mat) != NULL && (((const CvMatND*)(mat))->type & CV_MAGIC_MASK) == CV_MATND_MAGIC_VAL) - -#define CV_IS_MATND(mat) \ - (CV_IS_MATND_HDR(mat) && ((const CvMatND*)(mat))->data.ptr != NULL) - - -/****************************************************************************************\ -* Multi-dimensional sparse array (CvSparseMat) * -\****************************************************************************************/ - -#define CV_SPARSE_MAT_MAGIC_VAL 0x42440000 -#define CV_TYPE_NAME_SPARSE_MAT "opencv-sparse-matrix" - -struct CvSet; - -typedef struct CvSparseMat -{ - int type; - int dims; - int* refcount; - int hdr_refcount; - - struct CvSet* heap; - void** hashtable; - int hashsize; - int valoffset; - int idxoffset; - int size[CV_MAX_DIM]; -} -CvSparseMat; - -#define CV_IS_SPARSE_MAT_HDR(mat) \ - ((mat) != NULL && \ - (((const CvSparseMat*)(mat))->type & CV_MAGIC_MASK) == CV_SPARSE_MAT_MAGIC_VAL) - -#define CV_IS_SPARSE_MAT(mat) \ - CV_IS_SPARSE_MAT_HDR(mat) - -/**************** iteration through a sparse array *****************/ - -typedef struct CvSparseNode -{ - unsigned hashval; - struct CvSparseNode* next; -} -CvSparseNode; - -typedef struct CvSparseMatIterator -{ - CvSparseMat* mat; - CvSparseNode* node; - int curidx; -} -CvSparseMatIterator; - -#define CV_NODE_VAL(mat,node) ((void*)((uchar*)(node) + (mat)->valoffset)) -#define CV_NODE_IDX(mat,node) ((int*)((uchar*)(node) + (mat)->idxoffset)) - -/****************************************************************************************\ -* Histogram * -\****************************************************************************************/ - -typedef int CvHistType; - -#define CV_HIST_MAGIC_VAL 0x42450000 -#define CV_HIST_UNIFORM_FLAG (1 << 10) - -/* indicates whether bin ranges are set already or not */ -#define CV_HIST_RANGES_FLAG (1 << 11) - -#define CV_HIST_ARRAY 0 -#define CV_HIST_SPARSE 1 -#define CV_HIST_TREE CV_HIST_SPARSE - -/* should be used as a parameter only, - it turns to CV_HIST_UNIFORM_FLAG of hist->type */ -#define CV_HIST_UNIFORM 1 - -typedef struct CvHistogram -{ - int type; - CvArr* bins; - float thresh[CV_MAX_DIM][2]; /* For uniform histograms. */ - float** thresh2; /* For non-uniform histograms. */ - CvMatND mat; /* Embedded matrix header for array histograms. */ -} -CvHistogram; - -#define CV_IS_HIST( hist ) \ - ((hist) != NULL && \ - (((CvHistogram*)(hist))->type & CV_MAGIC_MASK) == CV_HIST_MAGIC_VAL && \ - (hist)->bins != NULL) - -#define CV_IS_UNIFORM_HIST( hist ) \ - (((hist)->type & CV_HIST_UNIFORM_FLAG) != 0) - -#define CV_IS_SPARSE_HIST( hist ) \ - CV_IS_SPARSE_MAT((hist)->bins) - -#define CV_HIST_HAS_RANGES( hist ) \ - (((hist)->type & CV_HIST_RANGES_FLAG) != 0) - -/****************************************************************************************\ -* Other supplementary data type definitions * -\****************************************************************************************/ - -/*************************************** CvRect *****************************************/ - -typedef struct CvRect -{ - int x; - int y; - int width; - int height; -} -CvRect; - -CV_INLINE CvRect cvRect( int x, int y, int width, int height ) -{ - CvRect r; - - r.x = x; - r.y = y; - r.width = width; - r.height = height; - - return r; -} - - -CV_INLINE IplROI cvRectToROI( CvRect rect, int coi ) -{ - IplROI roi; - roi.xOffset = rect.x; - roi.yOffset = rect.y; - roi.width = rect.width; - roi.height = rect.height; - roi.coi = coi; - - return roi; -} - - -CV_INLINE CvRect cvROIToRect( IplROI roi ) -{ - return cvRect( roi.xOffset, roi.yOffset, roi.width, roi.height ); -} - -/*********************************** CvTermCriteria *************************************/ - -#define CV_TERMCRIT_ITER 1 -#define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER -#define CV_TERMCRIT_EPS 2 - -typedef struct CvTermCriteria -{ - int type; /* may be combination of - CV_TERMCRIT_ITER - CV_TERMCRIT_EPS */ - int max_iter; - double epsilon; -} -CvTermCriteria; - -CV_INLINE CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon ) -{ - CvTermCriteria t; - - t.type = type; - t.max_iter = max_iter; - t.epsilon = (float)epsilon; - - return t; -} - - -/******************************* CvPoint and variants ***********************************/ - -typedef struct CvPoint -{ - int x; - int y; -} -CvPoint; - - -CV_INLINE CvPoint cvPoint( int x, int y ) -{ - CvPoint p; - - p.x = x; - p.y = y; - - return p; -} - - -typedef struct CvPoint2D32f -{ - float x; - float y; -} -CvPoint2D32f; - - -CV_INLINE CvPoint2D32f cvPoint2D32f( double x, double y ) -{ - CvPoint2D32f p; - - p.x = (float)x; - p.y = (float)y; - - return p; -} - - -CV_INLINE CvPoint2D32f cvPointTo32f( CvPoint point ) -{ - return cvPoint2D32f( (float)point.x, (float)point.y ); -} - - -CV_INLINE CvPoint cvPointFrom32f( CvPoint2D32f point ) -{ - CvPoint ipt; - ipt.x = cvRound(point.x); - ipt.y = cvRound(point.y); - - return ipt; -} - - -typedef struct CvPoint3D32f -{ - float x; - float y; - float z; -} -CvPoint3D32f; - - -CV_INLINE CvPoint3D32f cvPoint3D32f( double x, double y, double z ) -{ - CvPoint3D32f p; - - p.x = (float)x; - p.y = (float)y; - p.z = (float)z; - - return p; -} - - -typedef struct CvPoint2D64f -{ - double x; - double y; -} -CvPoint2D64f; - - -CV_INLINE CvPoint2D64f cvPoint2D64f( double x, double y ) -{ - CvPoint2D64f p; - - p.x = x; - p.y = y; - - return p; -} - - -typedef struct CvPoint3D64f -{ - double x; - double y; - double z; -} -CvPoint3D64f; - - -CV_INLINE CvPoint3D64f cvPoint3D64f( double x, double y, double z ) -{ - CvPoint3D64f p; - - p.x = x; - p.y = y; - p.z = z; - - return p; -} - - -/******************************** CvSize's & CvBox **************************************/ - -typedef struct CvSize -{ - int width; - int height; -} -CvSize; - -CV_INLINE CvSize cvSize( int width, int height ) -{ - CvSize s; - - s.width = width; - s.height = height; - - return s; -} - -typedef struct CvSize2D32f -{ - float width; - float height; -} -CvSize2D32f; - - -CV_INLINE CvSize2D32f cvSize2D32f( double width, double height ) -{ - CvSize2D32f s; - - s.width = (float)width; - s.height = (float)height; - - return s; -} - -typedef struct CvBox2D -{ - CvPoint2D32f center; /* Center of the box. */ - CvSize2D32f size; /* Box width and length. */ - float angle; /* Angle between the horizontal axis */ - /* and the first side (i.e. length) in degrees */ -} -CvBox2D; - - -/* Line iterator state: */ -typedef struct CvLineIterator -{ - /* Pointer to the current point: */ - uchar* ptr; - - /* Bresenham algorithm state: */ - int err; - int plus_delta; - int minus_delta; - int plus_step; - int minus_step; -} -CvLineIterator; - - - -/************************************* CvSlice ******************************************/ - -typedef struct CvSlice -{ - int start_index, end_index; -} -CvSlice; - -CV_INLINE CvSlice cvSlice( int start, int end ) -{ - CvSlice slice; - slice.start_index = start; - slice.end_index = end; - - return slice; -} - -#define CV_WHOLE_SEQ_END_INDEX 0x3fffffff -#define CV_WHOLE_SEQ cvSlice(0, CV_WHOLE_SEQ_END_INDEX) - - -/************************************* CvScalar *****************************************/ - -typedef struct CvScalar -{ - double val[4]; -} -CvScalar; - -CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0), - double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0)) -{ - CvScalar scalar; - scalar.val[0] = val0; scalar.val[1] = val1; - scalar.val[2] = val2; scalar.val[3] = val3; - return scalar; -} - - -CV_INLINE CvScalar cvRealScalar( double val0 ) -{ - CvScalar scalar; - scalar.val[0] = val0; - scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; - return scalar; -} - -CV_INLINE CvScalar cvScalarAll( double val0123 ) -{ - CvScalar scalar; - scalar.val[0] = val0123; - scalar.val[1] = val0123; - scalar.val[2] = val0123; - scalar.val[3] = val0123; - return scalar; -} - -/****************************************************************************************\ -* Dynamic Data structures * -\****************************************************************************************/ - -/******************************** Memory storage ****************************************/ - -typedef struct CvMemBlock -{ - struct CvMemBlock* prev; - struct CvMemBlock* next; -} -CvMemBlock; - -#define CV_STORAGE_MAGIC_VAL 0x42890000 - -typedef struct CvMemStorage -{ - int signature; - CvMemBlock* bottom; /* First allocated block. */ - CvMemBlock* top; /* Current memory block - top of the stack. */ - struct CvMemStorage* parent; /* We get new blocks from parent as needed. */ - int block_size; /* Block size. */ - int free_space; /* Remaining free space in current block. */ -} -CvMemStorage; - -#define CV_IS_STORAGE(storage) \ - ((storage) != NULL && \ - (((CvMemStorage*)(storage))->signature & CV_MAGIC_MASK) == CV_STORAGE_MAGIC_VAL) - - -typedef struct CvMemStoragePos -{ - CvMemBlock* top; - int free_space; -} -CvMemStoragePos; - - -/*********************************** Sequence *******************************************/ - -typedef struct CvSeqBlock -{ - struct CvSeqBlock* prev; /* Previous sequence block. */ - struct CvSeqBlock* next; /* Next sequence block. */ - int start_index; /* Index of the first element in the block + */ - /* sequence->first->start_index. */ - int count; /* Number of elements in the block. */ - schar* data; /* Pointer to the first element of the block. */ -} -CvSeqBlock; - - -#define CV_TREE_NODE_FIELDS(node_type) \ - int flags; /* Miscellaneous flags. */ \ - int header_size; /* Size of sequence header. */ \ - struct node_type* h_prev; /* Previous sequence. */ \ - struct node_type* h_next; /* Next sequence. */ \ - struct node_type* v_prev; /* 2nd previous sequence. */ \ - struct node_type* v_next /* 2nd next sequence. */ - -/* - Read/Write sequence. - Elements can be dynamically inserted to or deleted from the sequence. -*/ -#define CV_SEQUENCE_FIELDS() \ - CV_TREE_NODE_FIELDS(CvSeq); \ - int total; /* Total number of elements. */ \ - int elem_size; /* Size of sequence element in bytes. */ \ - schar* block_max; /* Maximal bound of the last block. */ \ - schar* ptr; /* Current write pointer. */ \ - int delta_elems; /* Grow seq this many at a time. */ \ - CvMemStorage* storage; /* Where the seq is stored. */ \ - CvSeqBlock* free_blocks; /* Free blocks list. */ \ - CvSeqBlock* first; /* Pointer to the first sequence block. */ - -typedef struct CvSeq -{ - CV_SEQUENCE_FIELDS() -} -CvSeq; - -#define CV_TYPE_NAME_SEQ "opencv-sequence" -#define CV_TYPE_NAME_SEQ_TREE "opencv-sequence-tree" - -/*************************************** Set ********************************************/ -/* - Set. - Order is not preserved. There can be gaps between sequence elements. - After the element has been inserted it stays in the same place all the time. - The MSB(most-significant or sign bit) of the first field (flags) is 0 iff the element exists. -*/ -#define CV_SET_ELEM_FIELDS(elem_type) \ - int flags; \ - struct elem_type* next_free; - -typedef struct CvSetElem -{ - CV_SET_ELEM_FIELDS(CvSetElem) -} -CvSetElem; - -#define CV_SET_FIELDS() \ - CV_SEQUENCE_FIELDS() \ - CvSetElem* free_elems; \ - int active_count; - -typedef struct CvSet -{ - CV_SET_FIELDS() -} -CvSet; - - -#define CV_SET_ELEM_IDX_MASK ((1 << 26) - 1) -#define CV_SET_ELEM_FREE_FLAG (1 << (sizeof(int)*8-1)) - -/* Checks whether the element pointed by ptr belongs to a set or not */ -#define CV_IS_SET_ELEM( ptr ) (((CvSetElem*)(ptr))->flags >= 0) - -/************************************* Graph ********************************************/ - -/* - We represent a graph as a set of vertices. - Vertices contain their adjacency lists (more exactly, pointers to first incoming or - outcoming edge (or 0 if isolated vertex)). Edges are stored in another set. - There is a singly-linked list of incoming/outcoming edges for each vertex. - - Each edge consists of - - o Two pointers to the starting and ending vertices - (vtx[0] and vtx[1] respectively). - - A graph may be oriented or not. In the latter case, edges between - vertex i to vertex j are not distinguished during search operations. - - o Two pointers to next edges for the starting and ending vertices, where - next[0] points to the next edge in the vtx[0] adjacency list and - next[1] points to the next edge in the vtx[1] adjacency list. -*/ -#define CV_GRAPH_EDGE_FIELDS() \ - int flags; \ - float weight; \ - struct CvGraphEdge* next[2]; \ - struct CvGraphVtx* vtx[2]; - - -#define CV_GRAPH_VERTEX_FIELDS() \ - int flags; \ - struct CvGraphEdge* first; - - -typedef struct CvGraphEdge -{ - CV_GRAPH_EDGE_FIELDS() -} -CvGraphEdge; - -typedef struct CvGraphVtx -{ - CV_GRAPH_VERTEX_FIELDS() -} -CvGraphVtx; - -typedef struct CvGraphVtx2D -{ - CV_GRAPH_VERTEX_FIELDS() - CvPoint2D32f* ptr; -} -CvGraphVtx2D; - -/* - Graph is "derived" from the set (this is set a of vertices) - and includes another set (edges) -*/ -#define CV_GRAPH_FIELDS() \ - CV_SET_FIELDS() \ - CvSet* edges; - -typedef struct CvGraph -{ - CV_GRAPH_FIELDS() -} -CvGraph; - -#define CV_TYPE_NAME_GRAPH "opencv-graph" - -/*********************************** Chain/Countour *************************************/ - -typedef struct CvChain -{ - CV_SEQUENCE_FIELDS() - CvPoint origin; -} -CvChain; - -#define CV_CONTOUR_FIELDS() \ - CV_SEQUENCE_FIELDS() \ - CvRect rect; \ - int color; \ - int reserved[3]; - -typedef struct CvContour -{ - CV_CONTOUR_FIELDS() -} -CvContour; - -typedef CvContour CvPoint2DSeq; - -/****************************************************************************************\ -* Sequence types * -\****************************************************************************************/ - -#define CV_SEQ_MAGIC_VAL 0x42990000 - -#define CV_IS_SEQ(seq) \ - ((seq) != NULL && (((CvSeq*)(seq))->flags & CV_MAGIC_MASK) == CV_SEQ_MAGIC_VAL) - -#define CV_SET_MAGIC_VAL 0x42980000 -#define CV_IS_SET(set) \ - ((set) != NULL && (((CvSeq*)(set))->flags & CV_MAGIC_MASK) == CV_SET_MAGIC_VAL) - -#define CV_SEQ_ELTYPE_BITS 12 -#define CV_SEQ_ELTYPE_MASK ((1 << CV_SEQ_ELTYPE_BITS) - 1) - -#define CV_SEQ_ELTYPE_POINT CV_32SC2 /* (x,y) */ -#define CV_SEQ_ELTYPE_CODE CV_8UC1 /* freeman code: 0..7 */ -#define CV_SEQ_ELTYPE_GENERIC 0 -#define CV_SEQ_ELTYPE_PTR CV_USRTYPE1 -#define CV_SEQ_ELTYPE_PPOINT CV_SEQ_ELTYPE_PTR /* &(x,y) */ -#define CV_SEQ_ELTYPE_INDEX CV_32SC1 /* #(x,y) */ -#define CV_SEQ_ELTYPE_GRAPH_EDGE 0 /* &next_o, &next_d, &vtx_o, &vtx_d */ -#define CV_SEQ_ELTYPE_GRAPH_VERTEX 0 /* first_edge, &(x,y) */ -#define CV_SEQ_ELTYPE_TRIAN_ATR 0 /* vertex of the binary tree */ -#define CV_SEQ_ELTYPE_CONNECTED_COMP 0 /* connected component */ -#define CV_SEQ_ELTYPE_POINT3D CV_32FC3 /* (x,y,z) */ - -#define CV_SEQ_KIND_BITS 2 -#define CV_SEQ_KIND_MASK (((1 << CV_SEQ_KIND_BITS) - 1)<flags & CV_SEQ_ELTYPE_MASK) -#define CV_SEQ_KIND( seq ) ((seq)->flags & CV_SEQ_KIND_MASK ) - -/* flag checking */ -#define CV_IS_SEQ_INDEX( seq ) ((CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_INDEX) && \ - (CV_SEQ_KIND(seq) == CV_SEQ_KIND_GENERIC)) - -#define CV_IS_SEQ_CURVE( seq ) (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE) -#define CV_IS_SEQ_CLOSED( seq ) (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0) -#define CV_IS_SEQ_CONVEX( seq ) 0 -#define CV_IS_SEQ_HOLE( seq ) (((seq)->flags & CV_SEQ_FLAG_HOLE) != 0) -#define CV_IS_SEQ_SIMPLE( seq ) 1 - -/* type checking macros */ -#define CV_IS_SEQ_POINT_SET( seq ) \ - ((CV_SEQ_ELTYPE(seq) == CV_32SC2 || CV_SEQ_ELTYPE(seq) == CV_32FC2)) - -#define CV_IS_SEQ_POINT_SUBSET( seq ) \ - (CV_IS_SEQ_INDEX( seq ) || CV_SEQ_ELTYPE(seq) == CV_SEQ_ELTYPE_PPOINT) - -#define CV_IS_SEQ_POLYLINE( seq ) \ - (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq)) - -#define CV_IS_SEQ_POLYGON( seq ) \ - (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq)) - -#define CV_IS_SEQ_CHAIN( seq ) \ - (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && (seq)->elem_size == 1) - -#define CV_IS_SEQ_CONTOUR( seq ) \ - (CV_IS_SEQ_CLOSED(seq) && (CV_IS_SEQ_POLYLINE(seq) || CV_IS_SEQ_CHAIN(seq))) - -#define CV_IS_SEQ_CHAIN_CONTOUR( seq ) \ - (CV_IS_SEQ_CHAIN( seq ) && CV_IS_SEQ_CLOSED( seq )) - -#define CV_IS_SEQ_POLYGON_TREE( seq ) \ - (CV_SEQ_ELTYPE (seq) == CV_SEQ_ELTYPE_TRIAN_ATR && \ - CV_SEQ_KIND( seq ) == CV_SEQ_KIND_BIN_TREE ) - -#define CV_IS_GRAPH( seq ) \ - (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_GRAPH) - -#define CV_IS_GRAPH_ORIENTED( seq ) \ - (((seq)->flags & CV_GRAPH_FLAG_ORIENTED) != 0) - -#define CV_IS_SUBDIV2D( seq ) \ - (CV_IS_SET(seq) && CV_SEQ_KIND((CvSet*)(seq)) == CV_SEQ_KIND_SUBDIV2D) - -/****************************************************************************************/ -/* Sequence writer & reader */ -/****************************************************************************************/ - -#define CV_SEQ_WRITER_FIELDS() \ - int header_size; \ - CvSeq* seq; /* the sequence written */ \ - CvSeqBlock* block; /* current block */ \ - schar* ptr; /* pointer to free space */ \ - schar* block_min; /* pointer to the beginning of block*/\ - schar* block_max; /* pointer to the end of block */ - -typedef struct CvSeqWriter -{ - CV_SEQ_WRITER_FIELDS() -} -CvSeqWriter; - - -#define CV_SEQ_READER_FIELDS() \ - int header_size; \ - CvSeq* seq; /* sequence, beign read */ \ - CvSeqBlock* block; /* current block */ \ - schar* ptr; /* pointer to element be read next */ \ - schar* block_min; /* pointer to the beginning of block */\ - schar* block_max; /* pointer to the end of block */ \ - int delta_index;/* = seq->first->start_index */ \ - schar* prev_elem; /* pointer to previous element */ - - -typedef struct CvSeqReader -{ - CV_SEQ_READER_FIELDS() -} -CvSeqReader; - -/****************************************************************************************/ -/* Operations on sequences */ -/****************************************************************************************/ - -#define CV_SEQ_ELEM( seq, elem_type, index ) \ -/* assert gives some guarantee that parameter is valid */ \ -( assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) && \ - (seq)->elem_size == sizeof(elem_type)), \ - (elem_type*)((seq)->first && (unsigned)index < \ - (unsigned)((seq)->first->count) ? \ - (seq)->first->data + (index) * sizeof(elem_type) : \ - cvGetSeqElem( (CvSeq*)(seq), (index) ))) -#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) ) - -/* Add element to sequence: */ -#define CV_WRITE_SEQ_ELEM_VAR( elem_ptr, writer ) \ -{ \ - if( (writer).ptr >= (writer).block_max ) \ - { \ - cvCreateSeqBlock( &writer); \ - } \ - memcpy((writer).ptr, elem_ptr, (writer).seq->elem_size);\ - (writer).ptr += (writer).seq->elem_size; \ -} - -#define CV_WRITE_SEQ_ELEM( elem, writer ) \ -{ \ - assert( (writer).seq->elem_size == sizeof(elem)); \ - if( (writer).ptr >= (writer).block_max ) \ - { \ - cvCreateSeqBlock( &writer); \ - } \ - assert( (writer).ptr <= (writer).block_max - sizeof(elem));\ - memcpy((writer).ptr, &(elem), sizeof(elem)); \ - (writer).ptr += sizeof(elem); \ -} - - -/* Move reader position forward: */ -#define CV_NEXT_SEQ_ELEM( elem_size, reader ) \ -{ \ - if( ((reader).ptr += (elem_size)) >= (reader).block_max ) \ - { \ - cvChangeSeqBlock( &(reader), 1 ); \ - } \ -} - - -/* Move reader position backward: */ -#define CV_PREV_SEQ_ELEM( elem_size, reader ) \ -{ \ - if( ((reader).ptr -= (elem_size)) < (reader).block_min ) \ - { \ - cvChangeSeqBlock( &(reader), -1 ); \ - } \ -} - -/* Read element and move read position forward: */ -#define CV_READ_SEQ_ELEM( elem, reader ) \ -{ \ - assert( (reader).seq->elem_size == sizeof(elem)); \ - memcpy( &(elem), (reader).ptr, sizeof((elem))); \ - CV_NEXT_SEQ_ELEM( sizeof(elem), reader ) \ -} - -/* Read element and move read position backward: */ -#define CV_REV_READ_SEQ_ELEM( elem, reader ) \ -{ \ - assert( (reader).seq->elem_size == sizeof(elem)); \ - memcpy(&(elem), (reader).ptr, sizeof((elem))); \ - CV_PREV_SEQ_ELEM( sizeof(elem), reader ) \ -} - - -#define CV_READ_CHAIN_POINT( _pt, reader ) \ -{ \ - (_pt) = (reader).pt; \ - if( (reader).ptr ) \ - { \ - CV_READ_SEQ_ELEM( (reader).code, (reader)); \ - assert( ((reader).code & ~7) == 0 ); \ - (reader).pt.x += (reader).deltas[(int)(reader).code][0]; \ - (reader).pt.y += (reader).deltas[(int)(reader).code][1]; \ - } \ -} - -#define CV_CURRENT_POINT( reader ) (*((CvPoint*)((reader).ptr))) -#define CV_PREV_POINT( reader ) (*((CvPoint*)((reader).prev_elem))) - -#define CV_READ_EDGE( pt1, pt2, reader ) \ -{ \ - assert( sizeof(pt1) == sizeof(CvPoint) && \ - sizeof(pt2) == sizeof(CvPoint) && \ - reader.seq->elem_size == sizeof(CvPoint)); \ - (pt1) = CV_PREV_POINT( reader ); \ - (pt2) = CV_CURRENT_POINT( reader ); \ - (reader).prev_elem = (reader).ptr; \ - CV_NEXT_SEQ_ELEM( sizeof(CvPoint), (reader)); \ -} - -/************ Graph macros ************/ - -/* Return next graph edge for given vertex: */ -#define CV_NEXT_GRAPH_EDGE( edge, vertex ) \ - (assert((edge)->vtx[0] == (vertex) || (edge)->vtx[1] == (vertex)), \ - (edge)->next[(edge)->vtx[1] == (vertex)]) - - - -/****************************************************************************************\ -* Data structures for persistence (a.k.a serialization) functionality * -\****************************************************************************************/ - -/* "black box" file storage */ -typedef struct CvFileStorage CvFileStorage; - -/* Storage flags: */ -#define CV_STORAGE_READ 0 -#define CV_STORAGE_WRITE 1 -#define CV_STORAGE_WRITE_TEXT CV_STORAGE_WRITE -#define CV_STORAGE_WRITE_BINARY CV_STORAGE_WRITE -#define CV_STORAGE_APPEND 2 -#define CV_STORAGE_MEMORY 4 -#define CV_STORAGE_FORMAT_MASK (7<<3) -#define CV_STORAGE_FORMAT_AUTO 0 -#define CV_STORAGE_FORMAT_XML 8 -#define CV_STORAGE_FORMAT_YAML 16 - -/* List of attributes: */ -typedef struct CvAttrList -{ - const char** attr; /* NULL-terminated array of (attribute_name,attribute_value) pairs. */ - struct CvAttrList* next; /* Pointer to next chunk of the attributes list. */ -} -CvAttrList; - -CV_INLINE CvAttrList cvAttrList( const char** attr CV_DEFAULT(NULL), - CvAttrList* next CV_DEFAULT(NULL) ) -{ - CvAttrList l; - l.attr = attr; - l.next = next; - - return l; -} - -struct CvTypeInfo; - -#define CV_NODE_NONE 0 -#define CV_NODE_INT 1 -#define CV_NODE_INTEGER CV_NODE_INT -#define CV_NODE_REAL 2 -#define CV_NODE_FLOAT CV_NODE_REAL -#define CV_NODE_STR 3 -#define CV_NODE_STRING CV_NODE_STR -#define CV_NODE_REF 4 /* not used */ -#define CV_NODE_SEQ 5 -#define CV_NODE_MAP 6 -#define CV_NODE_TYPE_MASK 7 - -#define CV_NODE_TYPE(flags) ((flags) & CV_NODE_TYPE_MASK) - -/* file node flags */ -#define CV_NODE_FLOW 8 /* Used only for writing structures in YAML format. */ -#define CV_NODE_USER 16 -#define CV_NODE_EMPTY 32 -#define CV_NODE_NAMED 64 - -#define CV_NODE_IS_INT(flags) (CV_NODE_TYPE(flags) == CV_NODE_INT) -#define CV_NODE_IS_REAL(flags) (CV_NODE_TYPE(flags) == CV_NODE_REAL) -#define CV_NODE_IS_STRING(flags) (CV_NODE_TYPE(flags) == CV_NODE_STRING) -#define CV_NODE_IS_SEQ(flags) (CV_NODE_TYPE(flags) == CV_NODE_SEQ) -#define CV_NODE_IS_MAP(flags) (CV_NODE_TYPE(flags) == CV_NODE_MAP) -#define CV_NODE_IS_COLLECTION(flags) (CV_NODE_TYPE(flags) >= CV_NODE_SEQ) -#define CV_NODE_IS_FLOW(flags) (((flags) & CV_NODE_FLOW) != 0) -#define CV_NODE_IS_EMPTY(flags) (((flags) & CV_NODE_EMPTY) != 0) -#define CV_NODE_IS_USER(flags) (((flags) & CV_NODE_USER) != 0) -#define CV_NODE_HAS_NAME(flags) (((flags) & CV_NODE_NAMED) != 0) - -#define CV_NODE_SEQ_SIMPLE 256 -#define CV_NODE_SEQ_IS_SIMPLE(seq) (((seq)->flags & CV_NODE_SEQ_SIMPLE) != 0) - -typedef struct CvString -{ - int len; - char* ptr; -} -CvString; - -/* All the keys (names) of elements in the readed file storage - are stored in the hash to speed up the lookup operations: */ -typedef struct CvStringHashNode -{ - unsigned hashval; - CvString str; - struct CvStringHashNode* next; -} -CvStringHashNode; - -typedef struct CvGenericHash CvFileNodeHash; - -/* Basic element of the file storage - scalar or collection: */ -typedef struct CvFileNode -{ - int tag; - struct CvTypeInfo* info; /* type information - (only for user-defined object, for others it is 0) */ - union - { - double f; /* scalar floating-point number */ - int i; /* scalar integer number */ - CvString str; /* text string */ - CvSeq* seq; /* sequence (ordered collection of file nodes) */ - CvFileNodeHash* map; /* map (collection of named file nodes) */ - } data; -} -CvFileNode; - -#ifdef __cplusplus -extern "C" { -#endif -typedef int (CV_CDECL *CvIsInstanceFunc)( const void* struct_ptr ); -typedef void (CV_CDECL *CvReleaseFunc)( void** struct_dblptr ); -typedef void* (CV_CDECL *CvReadFunc)( CvFileStorage* storage, CvFileNode* node ); -typedef void (CV_CDECL *CvWriteFunc)( CvFileStorage* storage, const char* name, - const void* struct_ptr, CvAttrList attributes ); -typedef void* (CV_CDECL *CvCloneFunc)( const void* struct_ptr ); -#ifdef __cplusplus -} -#endif - -typedef struct CvTypeInfo -{ - int flags; - int header_size; - struct CvTypeInfo* prev; - struct CvTypeInfo* next; - const char* type_name; - CvIsInstanceFunc is_instance; - CvReleaseFunc release; - CvReadFunc read; - CvWriteFunc write; - CvCloneFunc clone; -} -CvTypeInfo; - - -/**** System data types ******/ - -typedef struct CvPluginFuncInfo -{ - void** func_addr; - void* default_func_addr; - const char* func_names; - int search_modules; - int loaded_from; -} -CvPluginFuncInfo; - -typedef struct CvModuleInfo -{ - struct CvModuleInfo* next; - const char* name; - const char* version; - CvPluginFuncInfo* func_tab; -} -CvModuleInfo; - -#endif /*__OPENCV_CORE_TYPES_H__*/ - -/* End of file. */ diff --git a/modules/core/include/opencv2/core/version.hpp b/modules/core/include/opencv2/core/version.hpp deleted file mode 100644 index 63c2935..0000000 --- a/modules/core/include/opencv2/core/version.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright( C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -//(including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort(including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* - definition of the current version of OpenCV - Usefull to test in user programs -*/ - -#ifndef __OPENCV_VERSION_HPP__ -#define __OPENCV_VERSION_HPP__ - -#define CV_VERSION_EPOCH 2 -#define CV_VERSION_MAJOR 4 -#define CV_VERSION_MINOR 9 -#define CV_VERSION_REVISION 0 - -#define CVAUX_STR_EXP(__A) #__A -#define CVAUX_STR(__A) CVAUX_STR_EXP(__A) - -#define CVAUX_STRW_EXP(__A) L#__A -#define CVAUX_STRW(__A) CVAUX_STRW_EXP(__A) - -#if CV_VERSION_REVISION -# define CV_VERSION CVAUX_STR(CV_VERSION_EPOCH) "." CVAUX_STR(CV_VERSION_MAJOR) "." CVAUX_STR(CV_VERSION_MINOR) "." CVAUX_STR(CV_VERSION_REVISION) -#else -# define CV_VERSION CVAUX_STR(CV_VERSION_EPOCH) "." CVAUX_STR(CV_VERSION_MAJOR) "." CVAUX_STR(CV_VERSION_MINOR) -#endif - -/* old style version constants*/ -#define CV_MAJOR_VERSION CV_VERSION_EPOCH -#define CV_MINOR_VERSION CV_VERSION_MAJOR -#define CV_SUBMINOR_VERSION CV_VERSION_MINOR - -#endif diff --git a/modules/core/include/opencv2/core/wimage.hpp b/modules/core/include/opencv2/core/wimage.hpp deleted file mode 100644 index c7afa8c..0000000 --- a/modules/core/include/opencv2/core/wimage.hpp +++ /dev/null @@ -1,621 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to -// this license. If you do not agree to this license, do not download, -// install, copy or use the software. -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, Google, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation or contributors may not 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 Intel Corporation or contributors be -// liable for any direct, indirect, incidental, special, exemplary, or -// consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. - - -///////////////////////////////////////////////////////////////////////////////// -// -// Image class which provides a thin layer around an IplImage. The goals -// of the class design are: -// 1. All the data has explicit ownership to avoid memory leaks -// 2. No hidden allocations or copies for performance. -// 3. Easy access to OpenCV methods (which will access IPP if available) -// 4. Can easily treat external data as an image -// 5. Easy to create images which are subsets of other images -// 6. Fast pixel access which can take advantage of number of channels -// if known at compile time. -// -// The WImage class is the image class which provides the data accessors. -// The 'W' comes from the fact that it is also a wrapper around the popular -// but inconvenient IplImage class. A WImage can be constructed either using a -// WImageBuffer class which allocates and frees the data, -// or using a WImageView class which constructs a subimage or a view into -// external data. The view class does no memory management. Each class -// actually has two versions, one when the number of channels is known at -// compile time and one when it isn't. Using the one with the number of -// channels specified can provide some compile time optimizations by using the -// fact that the number of channels is a constant. -// -// We use the convention (c,r) to refer to column c and row r with (0,0) being -// the upper left corner. This is similar to standard Euclidean coordinates -// with the first coordinate varying in the horizontal direction and the second -// coordinate varying in the vertical direction. -// Thus (c,r) is usually in the domain [0, width) X [0, height) -// -// Example usage: -// WImageBuffer3_b im(5,7); // Make a 5X7 3 channel image of type uchar -// WImageView3_b sub_im(im, 2,2, 3,3); // 3X3 submatrix -// vector vec(10, 3.0f); -// WImageView1_f user_im(&vec[0], 2, 5); // 2X5 image w/ supplied data -// -// im.SetZero(); // same as cvSetZero(im.Ipl()) -// *im(2, 3) = 15; // Modify the element at column 2, row 3 -// MySetRand(&sub_im); -// -// // Copy the second row into the first. This can be done with no memory -// // allocation and will use SSE if IPP is available. -// int w = im.Width(); -// im.View(0,0, w,1).CopyFrom(im.View(0,1, w,1)); -// -// // Doesn't care about source of data since using WImage -// void MySetRand(WImage_b* im) { // Works with any number of channels -// for (int r = 0; r < im->Height(); ++r) { -// float* row = im->Row(r); -// for (int c = 0; c < im->Width(); ++c) { -// for (int ch = 0; ch < im->Channels(); ++ch, ++row) { -// *row = uchar(rand() & 255); -// } -// } -// } -// } -// -// Functions that are not part of the basic image allocation, viewing, and -// access should come from OpenCV, except some useful functions that are not -// part of OpenCV can be found in wimage_util.h -#ifndef __OPENCV_CORE_WIMAGE_HPP__ -#define __OPENCV_CORE_WIMAGE_HPP__ - -#include "opencv2/core/core_c.h" - -#ifdef __cplusplus - -namespace cv { - -template class WImage; -template class WImageBuffer; -template class WImageView; - -template class WImageC; -template class WImageBufferC; -template class WImageViewC; - -// Commonly used typedefs. -typedef WImage WImage_b; -typedef WImageView WImageView_b; -typedef WImageBuffer WImageBuffer_b; - -typedef WImageC WImage1_b; -typedef WImageViewC WImageView1_b; -typedef WImageBufferC WImageBuffer1_b; - -typedef WImageC WImage3_b; -typedef WImageViewC WImageView3_b; -typedef WImageBufferC WImageBuffer3_b; - -typedef WImage WImage_f; -typedef WImageView WImageView_f; -typedef WImageBuffer WImageBuffer_f; - -typedef WImageC WImage1_f; -typedef WImageViewC WImageView1_f; -typedef WImageBufferC WImageBuffer1_f; - -typedef WImageC WImage3_f; -typedef WImageViewC WImageView3_f; -typedef WImageBufferC WImageBuffer3_f; - -// There isn't a standard for signed and unsigned short so be more -// explicit in the typename for these cases. -typedef WImage WImage_16s; -typedef WImageView WImageView_16s; -typedef WImageBuffer WImageBuffer_16s; - -typedef WImageC WImage1_16s; -typedef WImageViewC WImageView1_16s; -typedef WImageBufferC WImageBuffer1_16s; - -typedef WImageC WImage3_16s; -typedef WImageViewC WImageView3_16s; -typedef WImageBufferC WImageBuffer3_16s; - -typedef WImage WImage_16u; -typedef WImageView WImageView_16u; -typedef WImageBuffer WImageBuffer_16u; - -typedef WImageC WImage1_16u; -typedef WImageViewC WImageView1_16u; -typedef WImageBufferC WImageBuffer1_16u; - -typedef WImageC WImage3_16u; -typedef WImageViewC WImageView3_16u; -typedef WImageBufferC WImageBuffer3_16u; - -// -// WImage definitions -// -// This WImage class gives access to the data it refers to. It can be -// constructed either by allocating the data with a WImageBuffer class or -// using the WImageView class to refer to a subimage or outside data. -template -class WImage -{ -public: - typedef T BaseType; - - // WImage is an abstract class with no other virtual methods so make the - // destructor virtual. - virtual ~WImage() = 0; - - // Accessors - IplImage* Ipl() {return image_; } - const IplImage* Ipl() const {return image_; } - T* ImageData() { return reinterpret_cast(image_->imageData); } - const T* ImageData() const { - return reinterpret_cast(image_->imageData); - } - - int Width() const {return image_->width; } - int Height() const {return image_->height; } - - // WidthStep is the number of bytes to go to the pixel with the next y coord - int WidthStep() const {return image_->widthStep; } - - int Channels() const {return image_->nChannels; } - int ChannelSize() const {return sizeof(T); } // number of bytes per channel - - // Number of bytes per pixel - int PixelSize() const {return Channels() * ChannelSize(); } - - // Return depth type (e.g. IPL_DEPTH_8U, IPL_DEPTH_32F) which is the number - // of bits per channel and with the signed bit set. - // This is known at compile time using specializations. - int Depth() const; - - inline const T* Row(int r) const { - return reinterpret_cast(image_->imageData + r*image_->widthStep); - } - - inline T* Row(int r) { - return reinterpret_cast(image_->imageData + r*image_->widthStep); - } - - // Pixel accessors which returns a pointer to the start of the channel - inline T* operator() (int c, int r) { - return reinterpret_cast(image_->imageData + r*image_->widthStep) + - c*Channels(); - } - - inline const T* operator() (int c, int r) const { - return reinterpret_cast(image_->imageData + r*image_->widthStep) + - c*Channels(); - } - - // Copy the contents from another image which is just a convenience to cvCopy - void CopyFrom(const WImage& src) { cvCopy(src.Ipl(), image_); } - - // Set contents to zero which is just a convenient to cvSetZero - void SetZero() { cvSetZero(image_); } - - // Construct a view into a region of this image - WImageView View(int c, int r, int width, int height); - -protected: - // Disallow copy and assignment - WImage(const WImage&); - void operator=(const WImage&); - - explicit WImage(IplImage* img) : image_(img) { - assert(!img || img->depth == Depth()); - } - - void SetIpl(IplImage* image) { - assert(!image || image->depth == Depth()); - image_ = image; - } - - IplImage* image_; -}; - - - -// Image class when both the pixel type and number of channels -// are known at compile time. This wrapper will speed up some of the operations -// like accessing individual pixels using the () operator. -template -class WImageC : public WImage -{ -public: - typedef typename WImage::BaseType BaseType; - enum { kChannels = C }; - - explicit WImageC(IplImage* img) : WImage(img) { - assert(!img || img->nChannels == Channels()); - } - - // Construct a view into a region of this image - WImageViewC View(int c, int r, int width, int height); - - // Copy the contents from another image which is just a convenience to cvCopy - void CopyFrom(const WImageC& src) { - cvCopy(src.Ipl(), WImage::image_); - } - - // WImageC is an abstract class with no other virtual methods so make the - // destructor virtual. - virtual ~WImageC() = 0; - - int Channels() const {return C; } - -protected: - // Disallow copy and assignment - WImageC(const WImageC&); - void operator=(const WImageC&); - - void SetIpl(IplImage* image) { - assert(!image || image->depth == WImage::Depth()); - WImage::SetIpl(image); - } -}; - -// -// WImageBuffer definitions -// -// Image class which owns the data, so it can be allocated and is always -// freed. It cannot be copied but can be explicity cloned. -// -template -class WImageBuffer : public WImage -{ -public: - typedef typename WImage::BaseType BaseType; - - // Default constructor which creates an object that can be - WImageBuffer() : WImage(0) {} - - WImageBuffer(int width, int height, int nchannels) : WImage(0) { - Allocate(width, height, nchannels); - } - - // Constructor which takes ownership of a given IplImage so releases - // the image on destruction. - explicit WImageBuffer(IplImage* img) : WImage(img) {} - - // Allocate an image. Does nothing if current size is the same as - // the new size. - void Allocate(int width, int height, int nchannels); - - // Set the data to point to an image, releasing the old data - void SetIpl(IplImage* img) { - ReleaseImage(); - WImage::SetIpl(img); - } - - // Clone an image which reallocates the image if of a different dimension. - void CloneFrom(const WImage& src) { - Allocate(src.Width(), src.Height(), src.Channels()); - CopyFrom(src); - } - - ~WImageBuffer() { - ReleaseImage(); - } - - // Release the image if it isn't null. - void ReleaseImage() { - if (WImage::image_) { - IplImage* image = WImage::image_; - cvReleaseImage(&image); - WImage::SetIpl(0); - } - } - - bool IsNull() const {return WImage::image_ == NULL; } - -private: - // Disallow copy and assignment - WImageBuffer(const WImageBuffer&); - void operator=(const WImageBuffer&); -}; - -// Like a WImageBuffer class but when the number of channels is known -// at compile time. -template -class WImageBufferC : public WImageC -{ -public: - typedef typename WImage::BaseType BaseType; - enum { kChannels = C }; - - // Default constructor which creates an object that can be - WImageBufferC() : WImageC(0) {} - - WImageBufferC(int width, int height) : WImageC(0) { - Allocate(width, height); - } - - // Constructor which takes ownership of a given IplImage so releases - // the image on destruction. - explicit WImageBufferC(IplImage* img) : WImageC(img) {} - - // Allocate an image. Does nothing if current size is the same as - // the new size. - void Allocate(int width, int height); - - // Set the data to point to an image, releasing the old data - void SetIpl(IplImage* img) { - ReleaseImage(); - WImageC::SetIpl(img); - } - - // Clone an image which reallocates the image if of a different dimension. - void CloneFrom(const WImageC& src) { - Allocate(src.Width(), src.Height()); - CopyFrom(src); - } - - ~WImageBufferC() { - ReleaseImage(); - } - - // Release the image if it isn't null. - void ReleaseImage() { - if (WImage::image_) { - IplImage* image = WImage::image_; - cvReleaseImage(&image); - WImageC::SetIpl(0); - } - } - - bool IsNull() const {return WImage::image_ == NULL; } - -private: - // Disallow copy and assignment - WImageBufferC(const WImageBufferC&); - void operator=(const WImageBufferC&); -}; - -// -// WImageView definitions -// -// View into an image class which allows treating a subimage as an image -// or treating external data as an image -// -template -class WImageView : public WImage -{ -public: - typedef typename WImage::BaseType BaseType; - - // Construct a subimage. No checks are done that the subimage lies - // completely inside the original image. - WImageView(WImage* img, int c, int r, int width, int height); - - // Refer to external data. - // If not given width_step assumed to be same as width. - WImageView(T* data, int width, int height, int channels, int width_step = -1); - - // Refer to external data. This does NOT take ownership - // of the supplied IplImage. - WImageView(IplImage* img) : WImage(img) {} - - // Copy constructor - WImageView(const WImage& img) : WImage(0) { - header_ = *(img.Ipl()); - WImage::SetIpl(&header_); - } - - WImageView& operator=(const WImage& img) { - header_ = *(img.Ipl()); - WImage::SetIpl(&header_); - return *this; - } - -protected: - IplImage header_; -}; - - -template -class WImageViewC : public WImageC -{ -public: - typedef typename WImage::BaseType BaseType; - enum { kChannels = C }; - - // Default constructor needed for vectors of views. - WImageViewC(); - - virtual ~WImageViewC() {} - - // Construct a subimage. No checks are done that the subimage lies - // completely inside the original image. - WImageViewC(WImageC* img, - int c, int r, int width, int height); - - // Refer to external data - WImageViewC(T* data, int width, int height, int width_step = -1); - - // Refer to external data. This does NOT take ownership - // of the supplied IplImage. - WImageViewC(IplImage* img) : WImageC(img) {} - - // Copy constructor which does a shallow copy to allow multiple views - // of same data. gcc-4.1.1 gets confused if both versions of - // the constructor and assignment operator are not provided. - WImageViewC(const WImageC& img) : WImageC(0) { - header_ = *(img.Ipl()); - WImageC::SetIpl(&header_); - } - WImageViewC(const WImageViewC& img) : WImageC(0) { - header_ = *(img.Ipl()); - WImageC::SetIpl(&header_); - } - - WImageViewC& operator=(const WImageC& img) { - header_ = *(img.Ipl()); - WImageC::SetIpl(&header_); - return *this; - } - WImageViewC& operator=(const WImageViewC& img) { - header_ = *(img.Ipl()); - WImageC::SetIpl(&header_); - return *this; - } - -protected: - IplImage header_; -}; - - -// Specializations for depth -template<> -inline int WImage::Depth() const {return IPL_DEPTH_8U; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_8S; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_16S; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_16U; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_32S; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_32F; } -template<> -inline int WImage::Depth() const {return IPL_DEPTH_64F; } - -// -// Pure virtual destructors still need to be defined. -// -template inline WImage::~WImage() {} -template inline WImageC::~WImageC() {} - -// -// Allocate ImageData -// -template -inline void WImageBuffer::Allocate(int width, int height, int nchannels) -{ - if (IsNull() || WImage::Width() != width || - WImage::Height() != height || WImage::Channels() != nchannels) { - ReleaseImage(); - WImage::image_ = cvCreateImage(cvSize(width, height), - WImage::Depth(), nchannels); - } -} - -template -inline void WImageBufferC::Allocate(int width, int height) -{ - if (IsNull() || WImage::Width() != width || WImage::Height() != height) { - ReleaseImage(); - WImageC::SetIpl(cvCreateImage(cvSize(width, height),WImage::Depth(), C)); - } -} - -// -// ImageView methods -// -template -WImageView::WImageView(WImage* img, int c, int r, int width, int height) - : WImage(0) -{ - header_ = *(img->Ipl()); - header_.imageData = reinterpret_cast((*img)(c, r)); - header_.width = width; - header_.height = height; - WImage::SetIpl(&header_); -} - -template -WImageView::WImageView(T* data, int width, int height, int nchannels, int width_step) - : WImage(0) -{ - cvInitImageHeader(&header_, cvSize(width, height), WImage::Depth(), nchannels); - header_.imageData = reinterpret_cast(data); - if (width_step > 0) { - header_.widthStep = width_step; - } - WImage::SetIpl(&header_); -} - -template -WImageViewC::WImageViewC(WImageC* img, int c, int r, int width, int height) - : WImageC(0) -{ - header_ = *(img->Ipl()); - header_.imageData = reinterpret_cast((*img)(c, r)); - header_.width = width; - header_.height = height; - WImageC::SetIpl(&header_); -} - -template -WImageViewC::WImageViewC() : WImageC(0) { - cvInitImageHeader(&header_, cvSize(0, 0), WImage::Depth(), C); - header_.imageData = reinterpret_cast(0); - WImageC::SetIpl(&header_); -} - -template -WImageViewC::WImageViewC(T* data, int width, int height, int width_step) - : WImageC(0) -{ - cvInitImageHeader(&header_, cvSize(width, height), WImage::Depth(), C); - header_.imageData = reinterpret_cast(data); - if (width_step > 0) { - header_.widthStep = width_step; - } - WImageC::SetIpl(&header_); -} - -// Construct a view into a region of an image -template -WImageView WImage::View(int c, int r, int width, int height) { - return WImageView(this, c, r, width, height); -} - -template -WImageViewC WImageC::View(int c, int r, int width, int height) { - return WImageViewC(this, c, r, width, height); -} - -} // end of namespace - -#endif // __cplusplus - -#endif diff --git a/modules/core/src/algorithm.cpp b/modules/core/src/algorithm.cpp deleted file mode 100644 index 5f16f95..0000000 --- a/modules/core/src/algorithm.cpp +++ /dev/null @@ -1,1275 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -using std::pair; - -template struct sorted_vector -{ - sorted_vector() {} - void clear() { vec.clear(); } - size_t size() const { return vec.size(); } - _ValueTp& operator [](size_t idx) { return vec[idx]; } - const _ValueTp& operator [](size_t idx) const { return vec[idx]; } - - void add(const _KeyTp& k, const _ValueTp& val) - { - pair<_KeyTp, _ValueTp> p(k, val); - vec.push_back(p); - size_t i = vec.size()-1; - for( ; i > 0 && vec[i].first < vec[i-1].first; i-- ) - std::swap(vec[i-1], vec[i]); - CV_Assert( i == 0 || vec[i].first != vec[i-1].first ); - } - - bool find(const _KeyTp& key, _ValueTp& value) const - { - size_t a = 0, b = vec.size(); - while( b > a ) - { - size_t c = (a + b)/2; - if( vec[c].first < key ) - a = c+1; - else - b = c; - } - - if( a < vec.size() && vec[a].first == key ) - { - value = vec[a].second; - return true; - } - return false; - } - - void get_keys(vector<_KeyTp>& keys) const - { - size_t i = 0, n = vec.size(); - keys.resize(n); - - for( i = 0; i < n; i++ ) - keys[i] = vec[i].first; - } - - vector > vec; -}; - - -template inline const _ValueTp* findstr(const sorted_vector& vec, - const char* key) -{ - if( !key ) - return 0; - - size_t a = 0, b = vec.vec.size(); - while( b > a ) - { - size_t c = (a + b)/2; - if( strcmp(vec.vec[c].first.c_str(), key) < 0 ) - a = c+1; - else - b = c; - } - - if( ( a < vec.vec.size() ) && ( strcmp(vec.vec[a].first.c_str(), key) == 0 )) - return &vec.vec[a].second; - return 0; -} - - -Param::Param() -{ - type = 0; - offset = 0; - readonly = false; - getter = 0; - setter = 0; -} - - -Param::Param(int _type, bool _readonly, int _offset, - Algorithm::Getter _getter, Algorithm::Setter _setter, - const string& _help) -{ - type = _type; - readonly = _readonly; - offset = _offset; - getter = _getter; - setter = _setter; - help = _help; -} - -struct CV_EXPORTS AlgorithmInfoData -{ - sorted_vector params; - string _name; -}; - - -static sorted_vector& alglist() -{ - static sorted_vector alglist_var; - return alglist_var; -} - -void Algorithm::getList(vector& algorithms) -{ - alglist().get_keys(algorithms); -} - -Ptr Algorithm::_create(const string& name) -{ - Algorithm::Constructor c = 0; - if( !alglist().find(name, c) ) - return Ptr(); - return c(); -} - -Algorithm::Algorithm() -{ -} - -Algorithm::~Algorithm() -{ -} - -string Algorithm::name() const -{ - return info()->name(); -} - -void Algorithm::set(const string& parameter, int value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const string& parameter, double value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const string& parameter, bool value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const string& parameter, const string& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const string& parameter, const Mat& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const string& parameter, const vector& value) -{ - info()->set(this, parameter.c_str(), ParamType >::type, &value); -} - -void Algorithm::set(const string& parameter, const Ptr& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, int value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, double value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, bool value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, const string& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, const Mat& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::set(const char* parameter, const vector& value) -{ - info()->set(this, parameter, ParamType >::type, &value); -} - -void Algorithm::set(const char* parameter, const Ptr& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - - -void Algorithm::setInt(const string& parameter, int value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setDouble(const string& parameter, double value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setBool(const string& parameter, bool value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setString(const string& parameter, const string& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setMat(const string& parameter, const Mat& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setMatVector(const string& parameter, const vector& value) -{ - info()->set(this, parameter.c_str(), ParamType >::type, &value); -} - -void Algorithm::setAlgorithm(const string& parameter, const Ptr& value) -{ - info()->set(this, parameter.c_str(), ParamType::type, &value); -} - -void Algorithm::setInt(const char* parameter, int value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::setDouble(const char* parameter, double value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::setBool(const char* parameter, bool value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::setString(const char* parameter, const string& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::setMat(const char* parameter, const Mat& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - -void Algorithm::setMatVector(const char* parameter, const vector& value) -{ - info()->set(this, parameter, ParamType >::type, &value); -} - -void Algorithm::setAlgorithm(const char* parameter, const Ptr& value) -{ - info()->set(this, parameter, ParamType::type, &value); -} - - - - -int Algorithm::getInt(const string& parameter) const -{ - return get(parameter); -} - -double Algorithm::getDouble(const string& parameter) const -{ - return get(parameter); -} - -bool Algorithm::getBool(const string& parameter) const -{ - return get(parameter); -} - -string Algorithm::getString(const string& parameter) const -{ - return get(parameter); -} - -Mat Algorithm::getMat(const string& parameter) const -{ - return get(parameter); -} - -vector Algorithm::getMatVector(const string& parameter) const -{ - return get >(parameter); -} - -Ptr Algorithm::getAlgorithm(const string& parameter) const -{ - return get(parameter); -} - -string Algorithm::paramHelp(const string& parameter) const -{ - return info()->paramHelp(parameter.c_str()); -} - -int Algorithm::paramType(const string& parameter) const -{ - return info()->paramType(parameter.c_str()); -} - -int Algorithm::paramType(const char* parameter) const -{ - return info()->paramType(parameter); -} - -void Algorithm::getParams(vector& names) const -{ - info()->getParams(names); -} - -void Algorithm::write(FileStorage& fs) const -{ - info()->write(this, fs); -} - -void Algorithm::read(const FileNode& fn) -{ - info()->read(this, fn); -} - - -AlgorithmInfo::AlgorithmInfo(const string& _name, Algorithm::Constructor create) -{ - data = new AlgorithmInfoData; - data->_name = _name; - if (!alglist().find(_name, create)) - alglist().add(_name, create); -} - -AlgorithmInfo::~AlgorithmInfo() -{ - delete data; -} - -void AlgorithmInfo::write(const Algorithm* algo, FileStorage& fs) const -{ - size_t i = 0, nparams = data->params.vec.size(); - cv::write(fs, "name", algo->name()); - for( i = 0; i < nparams; i++ ) - { - const Param& p = data->params.vec[i].second; - const string& pname = data->params.vec[i].first; - if( p.type == Param::INT ) - cv::write(fs, pname, algo->get(pname)); - else if( p.type == Param::BOOLEAN ) - cv::write(fs, pname, (int)algo->get(pname)); - else if( p.type == Param::SHORT ) - cv::write(fs, pname, (int)algo->get(pname)); - else if( p.type == Param::REAL ) - cv::write(fs, pname, algo->get(pname)); - else if( p.type == Param::STRING ) - cv::write(fs, pname, algo->get(pname)); - else if( p.type == Param::MAT ) - cv::write(fs, pname, algo->get(pname)); - else if( p.type == Param::MAT_VECTOR ) - cv::write(fs, pname, algo->get >(pname)); - else if( p.type == Param::ALGORITHM ) - { - WriteStructContext ws(fs, pname, CV_NODE_MAP); - Ptr nestedAlgo = algo->get(pname); - nestedAlgo->write(fs); - } - else if( p.type == Param::FLOAT) - cv::write(fs, pname, algo->getDouble(pname)); - else if( p.type == Param::UNSIGNED_INT) - cv::write(fs, pname, algo->getInt(pname));//TODO: implement cv::write(, , unsigned int) - else if( p.type == Param::UINT64) - cv::write(fs, pname, algo->getInt(pname));//TODO: implement cv::write(, , uint64) - else if( p.type == Param::UCHAR) - cv::write(fs, pname, algo->getInt(pname)); - else - { - string msg = format("unknown/unsupported type of '%s' parameter == %d", pname.c_str(), p.type); - CV_Error( CV_StsUnsupportedFormat, msg.c_str()); - } - } -} - -void AlgorithmInfo::read(Algorithm* algo, const FileNode& fn) const -{ - size_t i = 0, nparams = data->params.vec.size(); - AlgorithmInfo* info = algo->info(); - - for( i = 0; i < nparams; i++ ) - { - const Param& p = data->params.vec[i].second; - const string& pname = data->params.vec[i].first; - const FileNode n = fn[pname]; - if( n.empty() ) - continue; - if( p.type == Param::INT || p.type == Param::SHORT ) - { - int val = (int)n; - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::BOOLEAN ) - { - bool val = (int)n != 0; - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::REAL ) - { - double val = (double)n; - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::STRING ) - { - string val = (string)n; - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::MAT ) - { - Mat m; - cv::read(n, m); - info->set(algo, pname.c_str(), p.type, &m, true); - } - else if( p.type == Param::MAT_VECTOR ) - { - vector mv; - cv::read(n, mv); - info->set(algo, pname.c_str(), p.type, &mv, true); - } - else if( p.type == Param::ALGORITHM ) - { - Ptr nestedAlgo = Algorithm::_create((string)n["name"]); - CV_Assert( !nestedAlgo.empty() ); - nestedAlgo->read(n); - info->set(algo, pname.c_str(), p.type, &nestedAlgo, true); - } - else if( p.type == Param::FLOAT ) - { - float val = (float)n; - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::UNSIGNED_INT ) - { - unsigned int val = (unsigned int)((int)n);//TODO: implement conversion (unsigned int)FileNode - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::UINT64) - { - uint64 val = (uint64)((int)n);//TODO: implement conversion (uint64)FileNode - info->set(algo, pname.c_str(), p.type, &val, true); - } - else if( p.type == Param::UCHAR) - { - uchar val = (uchar)((int)n); - info->set(algo, pname.c_str(), p.type, &val, true); - } - else - { - string msg = format("unknown/unsupported type of '%s' parameter == %d", pname.c_str(), p.type); - CV_Error( CV_StsUnsupportedFormat, msg.c_str()); - } - } -} - -string AlgorithmInfo::name() const -{ - return data->_name; -} - -union GetSetParam -{ - int (Algorithm::*get_int)() const; - bool (Algorithm::*get_bool)() const; - double (Algorithm::*get_double)() const; - string (Algorithm::*get_string)() const; - Mat (Algorithm::*get_mat)() const; - vector (Algorithm::*get_mat_vector)() const; - Ptr (Algorithm::*get_algo)() const; - float (Algorithm::*get_float)() const; - unsigned int (Algorithm::*get_uint)() const; - uint64 (Algorithm::*get_uint64)() const; - uchar (Algorithm::*get_uchar)() const; - - void (Algorithm::*set_int)(int); - void (Algorithm::*set_bool)(bool); - void (Algorithm::*set_double)(double); - void (Algorithm::*set_string)(const string&); - void (Algorithm::*set_mat)(const Mat&); - void (Algorithm::*set_mat_vector)(const vector&); - void (Algorithm::*set_algo)(const Ptr&); - void (Algorithm::*set_float)(float); - void (Algorithm::*set_uint)(unsigned int); - void (Algorithm::*set_uint64)(uint64); - void (Algorithm::*set_uchar)(uchar); -}; - -static string getNameOfType(int argType); - -static string getNameOfType(int argType) -{ - switch(argType) - { - case Param::INT: return "integer"; - case Param::SHORT: return "short"; - case Param::BOOLEAN: return "boolean"; - case Param::REAL: return "double"; - case Param::STRING: return "string"; - case Param::MAT: return "cv::Mat"; - case Param::MAT_VECTOR: return "std::vector"; - case Param::ALGORITHM: return "algorithm"; - case Param::FLOAT: return "float"; - case Param::UNSIGNED_INT: return "unsigned int"; - case Param::UINT64: return "unsigned int64"; - case Param::UCHAR: return "unsigned char"; - default: CV_Error(CV_StsBadArg, "Wrong argument type"); - } - return ""; -} -static string getErrorMessageForWrongArgumentInSetter(string algoName, string paramName, int paramType, int argType); -static string getErrorMessageForWrongArgumentInSetter(string algoName, string paramName, int paramType, int argType) -{ - string message = string("Argument error: the setter") - + " method was called for the parameter '" + paramName + "' of the algorithm '" + algoName - +"', the parameter has " + getNameOfType(paramType) + " type, "; - - if (paramType == Param::INT || paramType == Param::BOOLEAN || paramType == Param::REAL - || paramType == Param::FLOAT || paramType == Param::UNSIGNED_INT || paramType == Param::UINT64 || paramType == Param::UCHAR) - { - message += "so it should be set by integer, unsigned integer, uint64, unsigned char, boolean, float or double value, "; - } - else if (paramType == Param::SHORT) - { - message += "so it should be set by integer value, "; - } - message += "but the setter was called with " + getNameOfType(argType) + " value"; - - return message; -} - -static string getErrorMessageForWrongArgumentInGetter(string algoName, string paramName, int paramType, int argType); -static string getErrorMessageForWrongArgumentInGetter(string algoName, string paramName, int paramType, int argType) -{ - string message = string("Argument error: the getter") - + " method was called for the parameter '" + paramName + "' of the algorithm '" + algoName - +"', the parameter has " + getNameOfType(paramType) + " type, "; - - if (paramType == Param::BOOLEAN) - { - message += "so it should be get as integer, unsigned integer, uint64, boolean, unsigned char, float or double value, "; - } - else if (paramType == Param::INT || paramType == Param::UNSIGNED_INT || paramType == Param::UINT64 || paramType == Param::UCHAR) - { - message += "so it should be get as integer, unsigned integer, uint64, unsigned char, float or double value, "; - } - else if (paramType == Param::SHORT) - { - message += "so it should be get as integer value, "; - } - else if (paramType == Param::FLOAT || paramType == Param::REAL) - { - message += "so it should be get as float or double value, "; - } - message += "but the getter was called to get a " + getNameOfType(argType) + " value"; - - return message; -} - -void AlgorithmInfo::set(Algorithm* algo, const char* parameter, int argType, const void* value, bool force) const -{ - const Param* p = findstr(data->params, parameter); - - if( !p ) - CV_Error_( CV_StsBadArg, ("No parameter '%s' is found", parameter ? parameter : "") ); - - if( !force && p->readonly ) - CV_Error_( CV_StsError, ("Parameter '%s' is readonly", parameter)); - - GetSetParam f; - f.set_int = p->setter; - - if( argType == Param::INT || argType == Param::BOOLEAN || argType == Param::REAL || argType == Param::SHORT - || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR) - { - if ( !( p->type == Param::INT || p->type == Param::REAL || p->type == Param::BOOLEAN - || p->type == Param::UNSIGNED_INT || p->type == Param::UINT64 || p->type == Param::FLOAT || p->type == Param::UCHAR - || (p->type == Param::SHORT && argType == Param::INT)) ) - { - string message = getErrorMessageForWrongArgumentInSetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - if( p->type == Param::INT ) - { - bool is_ok = true; - int val = argType == Param::INT ? *(const int*)value : - argType == Param::BOOLEAN ? (int)*(const bool*)value : - argType == Param::REAL ? saturate_cast(*(const double*)value) : - argType == Param::FLOAT ? saturate_cast(*(const float*)value) : - argType == Param::UNSIGNED_INT ? (int)*(const unsigned int*)value : - argType == Param::UINT64 ? (int)*(const uint64*)value : - argType == Param::UCHAR ? (int)*(const uchar*)value : - (int)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - - if( p->setter ) - (algo->*f.set_int)(val); - else - *(int*)((uchar*)algo + p->offset) = val; - } - else if( p->type == Param::SHORT ) - { - CV_DbgAssert(argType == Param::INT); - int val = *(const int*)value; - if( p->setter ) - (algo->*f.set_int)(val); - else - *(short*)((uchar*)algo + p->offset) = (short)val; - } - else if( p->type == Param::BOOLEAN ) - { - bool is_ok = true; - bool val = argType == Param::INT ? *(const int*)value != 0 : - argType == Param::BOOLEAN ? *(const bool*)value : - argType == Param::REAL ? (*(const double*)value != 0) : - argType == Param::FLOAT ? (*(const float*)value != 0) : - argType == Param::UNSIGNED_INT ? (*(const unsigned int*)value != 0): - argType == Param::UINT64 ? (*(const uint64*)value != 0): - argType == Param::UCHAR ? (*(const uchar*)value != 0): - (int)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - - if( p->setter ) - (algo->*f.set_bool)(val); - else - *(bool*)((uchar*)algo + p->offset) = val; - } - else if( p->type == Param::REAL ) - { - bool is_ok = true; - double val = argType == Param::INT ? (double)*(const int*)value : - argType == Param::BOOLEAN ? (double)*(const bool*)value : - argType == Param::REAL ? (double)(*(const double*)value ) : - argType == Param::FLOAT ? (double)(*(const float*)value ) : - argType == Param::UNSIGNED_INT ? (double)(*(const unsigned int*)value ) : - argType == Param::UINT64 ? (double)(*(const uint64*)value ) : - argType == Param::UCHAR ? (double)(*(const uchar*)value ) : - (double)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - if( p->setter ) - (algo->*f.set_double)(val); - else - *(double*)((uchar*)algo + p->offset) = val; - } - else if( p->type == Param::FLOAT ) - { - bool is_ok = true; - double val = argType == Param::INT ? (double)*(const int*)value : - argType == Param::BOOLEAN ? (double)*(const bool*)value : - argType == Param::REAL ? (double)(*(const double*)value ) : - argType == Param::FLOAT ? (double)(*(const float*)value ) : - argType == Param::UNSIGNED_INT ? (double)(*(const unsigned int*)value ) : - argType == Param::UINT64 ? (double)(*(const uint64*)value ) : - argType == Param::UCHAR ? (double)(*(const uchar*)value ) : - (double)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - if( p->setter ) - (algo->*f.set_float)((float)val); - else - *(float*)((uchar*)algo + p->offset) = (float)val; - } - else if( p->type == Param::UNSIGNED_INT ) - { - bool is_ok = true; - unsigned int val = argType == Param::INT ? (unsigned int)*(const int*)value : - argType == Param::BOOLEAN ? (unsigned int)*(const bool*)value : - argType == Param::REAL ? saturate_cast(*(const double*)value ) : - argType == Param::FLOAT ? saturate_cast(*(const float*)value ) : - argType == Param::UNSIGNED_INT ? (unsigned int)(*(const unsigned int*)value ) : - argType == Param::UINT64 ? (unsigned int)(*(const uint64*)value ) : - argType == Param::UCHAR ? (unsigned int)(*(const uchar*)value ) : - (int)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - if( p->setter ) - (algo->*f.set_uint)(val); - else - *(unsigned int*)((uchar*)algo + p->offset) = val; - } - else if( p->type == Param::UINT64 ) - { - bool is_ok = true; - uint64 val = argType == Param::INT ? (uint64)*(const int*)value : - argType == Param::BOOLEAN ? (uint64)*(const bool*)value : - argType == Param::REAL ? saturate_cast(*(const double*)value ) : - argType == Param::FLOAT ? saturate_cast(*(const float*)value ) : - argType == Param::UNSIGNED_INT ? (uint64)(*(const unsigned int*)value ) : - argType == Param::UINT64 ? (uint64)(*(const uint64*)value ) : - argType == Param::UCHAR ? (uint64)(*(const uchar*)value ) : - (int)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - if( p->setter ) - (algo->*f.set_uint64)(val); - else - *(uint64*)((uchar*)algo + p->offset) = val; - } - else if( p->type == Param::UCHAR ) - { - bool is_ok = true; - uchar val = argType == Param::INT ? (uchar)*(const int*)value : - argType == Param::BOOLEAN ? (uchar)*(const bool*)value : - argType == Param::REAL ? saturate_cast(*(const double*)value ) : - argType == Param::FLOAT ? saturate_cast(*(const float*)value ) : - argType == Param::UNSIGNED_INT ? (uchar)(*(const unsigned int*)value ) : - argType == Param::UINT64 ? (uchar)(*(const uint64*)value ) : - argType == Param::UCHAR ? (uchar)(*(const uchar*)value ) : - (int)(is_ok = false); - - if (!is_ok) - { - CV_Error(CV_StsBadArg, "Wrong argument type in the setter"); - } - if( p->setter ) - (algo->*f.set_uchar)(val); - else - *(uchar*)((uchar*)algo + p->offset) = val; - } - else - CV_Error(CV_StsBadArg, "Wrong parameter type in the setter"); - } - else if( argType == Param::STRING ) - { - if( p->type != Param::STRING ) - { - string message = getErrorMessageForWrongArgumentInSetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - const string& val = *(const string*)value; - if( p->setter ) - (algo->*f.set_string)(val); - else - *(string*)((uchar*)algo + p->offset) = val; - } - else if( argType == Param::MAT ) - { - if( p->type != Param::MAT ) - { - string message = getErrorMessageForWrongArgumentInSetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - const Mat& val = *(const Mat*)value; - if( p->setter ) - (algo->*f.set_mat)(val); - else - *(Mat*)((uchar*)algo + p->offset) = val; - } - else if( argType == Param::MAT_VECTOR ) - { - if( p->type != Param::MAT_VECTOR ) - { - string message = getErrorMessageForWrongArgumentInSetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - const vector& val = *(const vector*)value; - if( p->setter ) - (algo->*f.set_mat_vector)(val); - else - *(vector*)((uchar*)algo + p->offset) = val; - } - else if( argType == Param::ALGORITHM ) - { - if( p->type != Param::ALGORITHM ) - { - string message = getErrorMessageForWrongArgumentInSetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - const Ptr& val = *(const Ptr*)value; - if( p->setter ) - (algo->*f.set_algo)(val); - else - *(Ptr*)((uchar*)algo + p->offset) = val; - } - else - CV_Error(CV_StsBadArg, "Unknown/unsupported parameter type"); -} - -void AlgorithmInfo::get(const Algorithm* algo, const char* parameter, int argType, void* value) const -{ - const Param* p = findstr(data->params, parameter); - if( !p ) - CV_Error_( CV_StsBadArg, ("No parameter '%s' is found", parameter ? parameter : "") ); - - GetSetParam f; - f.get_int = p->getter; - - if( argType == Param::INT || argType == Param::BOOLEAN || argType == Param::REAL || argType == Param::SHORT - || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR) - { - if( p->type == Param::INT ) - { - if (!( argType == Param::INT || argType == Param::REAL || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - int val = p->getter ? (algo->*f.get_int)() : *(int*)((uchar*)algo + p->offset); - - if( argType == Param::INT ) - *(int*)value = (int)val; - else if ( argType == Param::REAL ) - *(double*)value = (double)val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)val; - else if ( argType == Param::UNSIGNED_INT ) - *(unsigned int*)value = (unsigned int)val; - else if ( argType == Param::UINT64 ) - *(uint64*)value = (uint64)val; - else if ( argType == Param::UCHAR) - *(uchar*)value = (uchar)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - - } - else if( p->type == Param::SHORT ) - { - if( argType != Param::INT ) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - int val = p->getter ? (algo->*f.get_int)() : *(short*)((uchar*)algo + p->offset); - - *(int*)value = val; - } - else if( p->type == Param::BOOLEAN ) - { - if (!( argType == Param::INT || argType == Param::BOOLEAN || argType == Param::REAL || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - bool val = p->getter ? (algo->*f.get_bool)() : *(bool*)((uchar*)algo + p->offset); - - if( argType == Param::INT ) - *(int*)value = (int)val; - else if( argType == Param::BOOLEAN ) - *(bool*)value = val; - else if ( argType == Param::REAL ) - *(double*)value = (int)val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)((int)val); - else if ( argType == Param::UNSIGNED_INT ) - *(unsigned int*)value = (unsigned int)val; - else if ( argType == Param::UINT64 ) - *(uint64*)value = (int)val; - else if ( argType == Param::UCHAR) - *(uchar*)value = (uchar)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - } - else if( p->type == Param::REAL ) - { - if(!( argType == Param::REAL || argType == Param::FLOAT)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - double val = p->getter ? (algo->*f.get_double)() : *(double*)((uchar*)algo + p->offset); - - if ( argType == Param::REAL ) - *(double*)value = val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - } - else if( p->type == Param::FLOAT ) - { - if(!( argType == Param::REAL || argType == Param::FLOAT)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - float val = p->getter ? (algo->*f.get_float)() : *(float*)((uchar*)algo + p->offset); - - if ( argType == Param::REAL ) - *(double*)value = (double)val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - } - else if( p->type == Param::UNSIGNED_INT ) - { - if (!( argType == Param::INT || argType == Param::REAL || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - unsigned int val = p->getter ? (algo->*f.get_uint)() : *(unsigned int*)((uchar*)algo + p->offset); - - if( argType == Param::INT ) - *(int*)value = (int)val; - else if ( argType == Param::REAL ) - *(double*)value = (double)val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)val; - else if ( argType == Param::UNSIGNED_INT ) - *(unsigned int*)value = (unsigned int)val; - else if ( argType == Param::UINT64 ) - *(uint64*)value = (uint64)val; - else if ( argType == Param::UCHAR) - *(uchar*)value = (uchar)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - } - else if( p->type == Param::UINT64 ) - { - if (!( argType == Param::INT || argType == Param::REAL || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - uint64 val = p->getter ? (algo->*f.get_uint64)() : *(uint64*)((uchar*)algo + p->offset); - - if( argType == Param::INT ) - *(int*)value = (int)val; - else if ( argType == Param::REAL ) - *(double*)value = (double)val; - else if ( argType == Param::FLOAT) - *(float*)value = (float)val; - else if ( argType == Param::UNSIGNED_INT ) - *(unsigned int*)value = (unsigned int)val; - else if ( argType == Param::UINT64 ) - *(uint64*)value = (uint64)val; - else if ( argType == Param::UCHAR) - *(uchar*)value = (uchar)val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - } - else if( p->type == Param::UCHAR ) - { - if (!( argType == Param::INT || argType == Param::REAL || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 || argType == Param::UCHAR)) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - uchar val = p->getter ? (algo->*f.get_uchar)() : *(uchar*)((uchar*)algo + p->offset); - - if( argType == Param::INT ) - *(int*)value = val; - else if ( argType == Param::REAL ) - *(double*)value = val; - else if ( argType == Param::FLOAT) - *(float*)value = val; - else if ( argType == Param::UNSIGNED_INT ) - *(unsigned int*)value = val; - else if ( argType == Param::UINT64 ) - *(uint64*)value = val; - else if ( argType == Param::UCHAR) - *(uchar*)value = val; - else - CV_Error(CV_StsBadArg, "Wrong argument type"); - - } - else - CV_Error(CV_StsBadArg, "Unknown/unsupported parameter type"); - } - else if( argType == Param::STRING ) - { - if( p->type != Param::STRING ) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - *(string*)value = p->getter ? (algo->*f.get_string)() : - *(string*)((uchar*)algo + p->offset); - } - else if( argType == Param::MAT ) - { - if( p->type != Param::MAT ) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - *(Mat*)value = p->getter ? (algo->*f.get_mat)() : - *(Mat*)((uchar*)algo + p->offset); - } - else if( argType == Param::MAT_VECTOR ) - { - if( p->type != Param::MAT_VECTOR ) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - *(vector*)value = p->getter ? (algo->*f.get_mat_vector)() : - *(vector*)((uchar*)algo + p->offset); - } - else if( argType == Param::ALGORITHM ) - { - if( p->type != Param::ALGORITHM ) - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } - - *(Ptr*)value = p->getter ? (algo->*f.get_algo)() : - *(Ptr*)((uchar*)algo + p->offset); - } - else - { - string message = getErrorMessageForWrongArgumentInGetter(algo->name(), parameter, p->type, argType); - CV_Error(CV_StsBadArg, message); - } -} - - -int AlgorithmInfo::paramType(const char* parameter) const -{ - const Param* p = findstr(data->params, parameter); - if( !p ) - CV_Error_( CV_StsBadArg, ("No parameter '%s' is found", parameter ? parameter : "") ); - return p->type; -} - - -string AlgorithmInfo::paramHelp(const char* parameter) const -{ - const Param* p = findstr(data->params, parameter); - if( !p ) - CV_Error_( CV_StsBadArg, ("No parameter '%s' is found", parameter ? parameter : "") ); - return p->help; -} - - -void AlgorithmInfo::getParams(vector& names) const -{ - data->params.get_keys(names); -} - - -void AlgorithmInfo::addParam_(Algorithm& algo, const char* parameter, int argType, - void* value, bool readOnly, - Algorithm::Getter getter, Algorithm::Setter setter, - const string& help) -{ - CV_Assert( argType == Param::INT || argType == Param::BOOLEAN || - argType == Param::REAL || argType == Param::STRING || - argType == Param::MAT || argType == Param::MAT_VECTOR || - argType == Param::ALGORITHM || argType == Param::SHORT - || argType == Param::FLOAT || argType == Param::UNSIGNED_INT || argType == Param::UINT64 - || argType == Param::UCHAR); - data->params.add(string(parameter), Param(argType, readOnly, - (int)((size_t)value - (size_t)(void*)&algo), - getter, setter, help)); -} - - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - int& value, bool readOnly, - int (Algorithm::*getter)(), - void (Algorithm::*setter)(int), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - short& value, bool readOnly, - int (Algorithm::*getter)(), - void (Algorithm::*setter)(int), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - bool& value, bool readOnly, - int (Algorithm::*getter)(), - void (Algorithm::*setter)(int), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - double& value, bool readOnly, - double (Algorithm::*getter)(), - void (Algorithm::*setter)(double), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - string& value, bool readOnly, - string (Algorithm::*getter)(), - void (Algorithm::*setter)(const string&), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - Mat& value, bool readOnly, - Mat (Algorithm::*getter)(), - void (Algorithm::*setter)(const Mat&), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - vector& value, bool readOnly, - vector (Algorithm::*getter)(), - void (Algorithm::*setter)(const vector&), - const string& help) -{ - addParam_(algo, parameter, ParamType >::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - Ptr& value, bool readOnly, - Ptr (Algorithm::*getter)(), - void (Algorithm::*setter)(const Ptr&), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - float& value, bool readOnly, - float (Algorithm::*getter)(), - void (Algorithm::*setter)(float), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - unsigned int& value, bool readOnly, - unsigned int (Algorithm::*getter)(), - void (Algorithm::*setter)(unsigned int), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - uint64& value, bool readOnly, - uint64 (Algorithm::*getter)(), - void (Algorithm::*setter)(uint64), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -void AlgorithmInfo::addParam(Algorithm& algo, const char* parameter, - uchar& value, bool readOnly, - uchar (Algorithm::*getter)(), - void (Algorithm::*setter)(uchar), - const string& help) -{ - addParam_(algo, parameter, ParamType::type, &value, readOnly, - (Algorithm::Getter)getter, (Algorithm::Setter)setter, help); -} - -} - -/* End of file. */ diff --git a/modules/core/src/alloc.cpp b/modules/core/src/alloc.cpp deleted file mode 100644 index 37b1e0d..0000000 --- a/modules/core/src/alloc.cpp +++ /dev/null @@ -1,713 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#define CV_USE_SYSTEM_MALLOC 1 - -namespace cv -{ - -static void* OutOfMemoryError(size_t size) -{ - CV_Error_(CV_StsNoMem, ("Failed to allocate %lu bytes", (unsigned long)size)); - return 0; -} - -#if CV_USE_SYSTEM_MALLOC - -#if defined WIN32 || defined _WIN32 -void deleteThreadAllocData() {} -#endif - -void* fastMalloc( size_t size ) -{ - uchar* udata = (uchar*)malloc(size + sizeof(void*) + CV_MALLOC_ALIGN); - if(!udata) - return OutOfMemoryError(size); - uchar** adata = alignPtr((uchar**)udata + 1, CV_MALLOC_ALIGN); - adata[-1] = udata; - return adata; -} - -void fastFree(void* ptr) -{ - if(ptr) - { - uchar* udata = ((uchar**)ptr)[-1]; - CV_DbgAssert(udata < (uchar*)ptr && - ((uchar*)ptr - udata) <= (ptrdiff_t)(sizeof(void*)+CV_MALLOC_ALIGN)); - free(udata); - } -} - -#else //CV_USE_SYSTEM_MALLOC - -#if 0 -#define SANITY_CHECK(block) \ - CV_Assert(((size_t)(block) & (MEM_BLOCK_SIZE-1)) == 0 && \ - (unsigned)(block)->binIdx <= (unsigned)MAX_BIN && \ - (block)->signature == MEM_BLOCK_SIGNATURE) -#else -#define SANITY_CHECK(block) -#endif - -#define STAT(stmt) - -#ifdef WIN32 -#if (_WIN32_WINNT >= 0x0602) -#include -#endif - -struct CriticalSection -{ - CriticalSection() - { -#if (_WIN32_WINNT >= 0x0600) - InitializeCriticalSectionEx(&cs, 1000, 0); -#else - InitializeCriticalSection(&cs); -#endif - } - ~CriticalSection() { DeleteCriticalSection(&cs); } - void lock() { EnterCriticalSection(&cs); } - void unlock() { LeaveCriticalSection(&cs); } - bool trylock() { return TryEnterCriticalSection(&cs) != 0; } - - CRITICAL_SECTION cs; -}; - -void* SystemAlloc(size_t size) -{ - void* ptr = malloc(size); - return ptr ? ptr : OutOfMemoryError(size); -} - -void SystemFree(void* ptr, size_t) -{ - free(ptr); -} -#else //WIN32 - -#include - -struct CriticalSection -{ - CriticalSection() { pthread_mutex_init(&mutex, 0); } - ~CriticalSection() { pthread_mutex_destroy(&mutex); } - void lock() { pthread_mutex_lock(&mutex); } - void unlock() { pthread_mutex_unlock(&mutex); } - bool trylock() { return pthread_mutex_trylock(&mutex) == 0; } - - pthread_mutex_t mutex; -}; - -void* SystemAlloc(size_t size) -{ - #ifndef MAP_ANONYMOUS - #define MAP_ANONYMOUS MAP_ANON - #endif - void* ptr = 0; - ptr = mmap(ptr, size, (PROT_READ | PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); - return ptr != MAP_FAILED ? ptr : OutOfMemoryError(size); -} - -void SystemFree(void* ptr, size_t size) -{ - munmap(ptr, size); -} -#endif //WIN32 - -struct AutoLock -{ - AutoLock(CriticalSection& _cs) : cs(&_cs) { cs->lock(); } - ~AutoLock() { cs->unlock(); } - CriticalSection* cs; -}; - -const size_t MEM_BLOCK_SIGNATURE = 0x01234567; -const int MEM_BLOCK_SHIFT = 14; -const size_t MEM_BLOCK_SIZE = 1 << MEM_BLOCK_SHIFT; -const size_t HDR_SIZE = 128; -const size_t MAX_BLOCK_SIZE = MEM_BLOCK_SIZE - HDR_SIZE; -const int MAX_BIN = 28; - -static const int binSizeTab[MAX_BIN+1] = -{ 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 128, 160, 192, 256, 320, 384, 480, 544, 672, 768, -896, 1056, 1328, 1600, 2688, 4048, 5408, 8128, 16256 }; - -struct MallocTables -{ - void initBinTab() - { - int i, j = 0, n; - for( i = 0; i <= MAX_BIN; i++ ) - { - n = binSizeTab[i]>>3; - for( ; j <= n; j++ ) - binIdx[j] = (uchar)i; - } - } - int bin(size_t size) - { - assert( size <= MAX_BLOCK_SIZE ); - return binIdx[(size + 7)>>3]; - } - - MallocTables() - { - initBinTab(); - } - - uchar binIdx[MAX_BLOCK_SIZE/8+1]; -}; - -MallocTables mallocTables; - -struct Node -{ - Node* next; -}; - -struct ThreadData; - -struct Block -{ - Block(Block* _next) - { - signature = MEM_BLOCK_SIGNATURE; - prev = 0; - next = _next; - privateFreeList = publicFreeList = 0; - bumpPtr = endPtr = 0; - objSize = 0; - threadData = 0; - data = (uchar*)this + HDR_SIZE; - } - - ~Block() {} - - void init(Block* _prev, Block* _next, int _objSize, ThreadData* _threadData) - { - prev = _prev; - if(prev) - prev->next = this; - next = _next; - if(next) - next->prev = this; - objSize = _objSize; - binIdx = mallocTables.bin(objSize); - threadData = _threadData; - privateFreeList = publicFreeList = 0; - bumpPtr = data; - int nobjects = MAX_BLOCK_SIZE/objSize; - endPtr = bumpPtr + nobjects*objSize; - almostEmptyThreshold = (nobjects + 1)/2; - allocated = 0; - } - - bool isFilled() const { return allocated > almostEmptyThreshold; } - - size_t signature; - Block* prev; - Block* next; - Node* privateFreeList; - Node* publicFreeList; - uchar* bumpPtr; - uchar* endPtr; - uchar* data; - ThreadData* threadData; - int objSize; - int binIdx; - int allocated; - int almostEmptyThreshold; - CriticalSection cs; -}; - -struct BigBlock -{ - BigBlock(int bigBlockSize, BigBlock* _next) - { - first = alignPtr((Block*)(this+1), MEM_BLOCK_SIZE); - next = _next; - nblocks = (int)(((char*)this + bigBlockSize - (char*)first)/MEM_BLOCK_SIZE); - Block* p = 0; - for( int i = nblocks-1; i >= 0; i-- ) - p = ::new((uchar*)first + i*MEM_BLOCK_SIZE) Block(p); - } - - ~BigBlock() - { - for( int i = nblocks-1; i >= 0; i-- ) - ((Block*)((uchar*)first+i*MEM_BLOCK_SIZE))->~Block(); - } - - BigBlock* next; - Block* first; - int nblocks; -}; - -struct BlockPool -{ - BlockPool(int _bigBlockSize=1<<20) : pool(0), bigBlockSize(_bigBlockSize) - { - } - - ~BlockPool() - { - AutoLock lock(cs); - while( pool ) - { - BigBlock* nextBlock = pool->next; - pool->~BigBlock(); - SystemFree(pool, bigBlockSize); - pool = nextBlock; - } - } - - Block* alloc() - { - AutoLock lock(cs); - Block* block; - if( !freeBlocks ) - { - BigBlock* bblock = ::new(SystemAlloc(bigBlockSize)) BigBlock(bigBlockSize, pool); - assert( bblock != 0 ); - freeBlocks = bblock->first; - pool = bblock; - } - block = freeBlocks; - freeBlocks = freeBlocks->next; - if( freeBlocks ) - freeBlocks->prev = 0; - STAT(stat.bruttoBytes += MEM_BLOCK_SIZE); - return block; - } - - void free(Block* block) - { - AutoLock lock(cs); - block->prev = 0; - block->next = freeBlocks; - freeBlocks = block; - STAT(stat.bruttoBytes -= MEM_BLOCK_SIZE); - } - - CriticalSection cs; - Block* freeBlocks; - BigBlock* pool; - int bigBlockSize; - int blocksPerBigBlock; -}; - -BlockPool mallocPool; - -enum { START=0, FREE=1, GC=2 }; - -struct ThreadData -{ - ThreadData() { for(int i = 0; i <= MAX_BIN; i++) bins[i][START] = bins[i][FREE] = bins[i][GC] = 0; } - ~ThreadData() - { - // mark all the thread blocks as abandoned or even release them - for( int i = 0; i <= MAX_BIN; i++ ) - { - Block *bin = bins[i][START], *block = bin; - bins[i][START] = bins[i][FREE] = bins[i][GC] = 0; - if( block ) - { - do - { - Block* next = block->next; - int allocated = block->allocated; - { - AutoLock lock(block->cs); - block->next = block->prev = 0; - block->threadData = 0; - Node *node = block->publicFreeList; - for( ; node != 0; node = node->next ) - allocated--; - } - if( allocated == 0 ) - mallocPool.free(block); - block = next; - } - while( block != bin ); - } - } - } - - void moveBlockToFreeList( Block* block ) - { - int i = block->binIdx; - Block*& freePtr = bins[i][FREE]; - CV_DbgAssert( block->next->prev == block && block->prev->next == block ); - if( block != freePtr ) - { - Block*& gcPtr = bins[i][GC]; - if( gcPtr == block ) - gcPtr = block->next; - if( block->next != block ) - { - block->prev->next = block->next; - block->next->prev = block->prev; - } - block->next = freePtr->next; - block->prev = freePtr; - freePtr = block->next->prev = block->prev->next = block; - } - } - - Block* bins[MAX_BIN+1][3]; - -#ifdef WIN32 -#ifdef WINCE -# define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF) -#endif //WINCE - - static DWORD tlsKey; - static ThreadData* get() - { - ThreadData* data; - if( tlsKey == TLS_OUT_OF_INDEXES ) - tlsKey = TlsAlloc(); - data = (ThreadData*)TlsGetValue(tlsKey); - if( !data ) - { - data = new ThreadData; - TlsSetValue(tlsKey, data); - } - return data; - } -#else //WIN32 - static void deleteData(void* data) - { - delete (ThreadData*)data; - } - - static pthread_key_t tlsKey; - static ThreadData* get() - { - ThreadData* data; - if( !tlsKey ) - pthread_key_create(&tlsKey, deleteData); - data = (ThreadData*)pthread_getspecific(tlsKey); - if( !data ) - { - data = new ThreadData; - pthread_setspecific(tlsKey, data); - } - return data; - } -#endif //WIN32 -}; - -#ifdef WIN32 -DWORD ThreadData::tlsKey = TLS_OUT_OF_INDEXES; - -void deleteThreadAllocData() -{ - if( ThreadData::tlsKey != TLS_OUT_OF_INDEXES ) - delete (ThreadData*)TlsGetValue( ThreadData::tlsKey ); -} - -#else //WIN32 -pthread_key_t ThreadData::tlsKey = 0; -#endif //WIN32 - -#if 0 -static void checkList(ThreadData* tls, int idx) -{ - Block* block = tls->bins[idx][START]; - if( !block ) - { - CV_DbgAssert( tls->bins[idx][FREE] == 0 && tls->bins[idx][GC] == 0 ); - } - else - { - bool gcInside = false; - bool freeInside = false; - do - { - if( tls->bins[idx][FREE] == block ) - freeInside = true; - if( tls->bins[idx][GC] == block ) - gcInside = true; - block = block->next; - } - while( block != tls->bins[idx][START] ); - CV_DbgAssert( gcInside && freeInside ); - } -} -#else -#define checkList(tls, idx) -#endif - -void* fastMalloc( size_t size ) -{ - if( size > MAX_BLOCK_SIZE ) - { - size_t size1 = size + sizeof(uchar*)*2 + MEM_BLOCK_SIZE; - uchar* udata = (uchar*)SystemAlloc(size1); - uchar** adata = alignPtr((uchar**)udata + 2, MEM_BLOCK_SIZE); - adata[-1] = udata; - adata[-2] = (uchar*)size1; - return adata; - } - - { - ThreadData* tls = ThreadData::get(); - int idx = mallocTables.bin(size); - Block*& startPtr = tls->bins[idx][START]; - Block*& gcPtr = tls->bins[idx][GC]; - Block*& freePtr = tls->bins[idx][FREE], *block = freePtr; - checkList(tls, idx); - size = binSizeTab[idx]; - STAT( - stat.nettoBytes += size; - stat.mallocCalls++; - ); - uchar* data = 0; - - for(;;) - { - if( block ) - { - // try to find non-full block - for(;;) - { - CV_DbgAssert( block->next->prev == block && block->prev->next == block ); - if( block->bumpPtr ) - { - data = block->bumpPtr; - if( (block->bumpPtr += size) >= block->endPtr ) - block->bumpPtr = 0; - break; - } - - if( block->privateFreeList ) - { - data = (uchar*)block->privateFreeList; - block->privateFreeList = block->privateFreeList->next; - break; - } - - if( block == startPtr ) - break; - block = block->next; - } -#if 0 - avg_k += _k; - avg_nk++; - if( avg_nk == 1000 ) - { - printf("avg search iters per 1e3 allocs = %g\n", (double)avg_k/avg_nk ); - avg_k = avg_nk = 0; - } -#endif - - freePtr = block; - if( !data ) - { - block = gcPtr; - for( int k = 0; k < 2; k++ ) - { - SANITY_CHECK(block); - CV_DbgAssert( block->next->prev == block && block->prev->next == block ); - if( block->publicFreeList ) - { - { - AutoLock lock(block->cs); - block->privateFreeList = block->publicFreeList; - block->publicFreeList = 0; - } - Node* node = block->privateFreeList; - for(;node != 0; node = node->next) - --block->allocated; - data = (uchar*)block->privateFreeList; - block->privateFreeList = block->privateFreeList->next; - gcPtr = block->next; - if( block->allocated+1 <= block->almostEmptyThreshold ) - tls->moveBlockToFreeList(block); - break; - } - block = block->next; - } - if( !data ) - gcPtr = block; - } - } - - if( data ) - break; - block = mallocPool.alloc(); - block->init(startPtr ? startPtr->prev : block, startPtr ? startPtr : block, (int)size, tls); - if( !startPtr ) - startPtr = gcPtr = freePtr = block; - checkList(tls, block->binIdx); - SANITY_CHECK(block); - } - - ++block->allocated; - return data; - } -} - -void fastFree( void* ptr ) -{ - if( ((size_t)ptr & (MEM_BLOCK_SIZE-1)) == 0 ) - { - if( ptr != 0 ) - { - void* origPtr = ((void**)ptr)[-1]; - size_t sz = (size_t)((void**)ptr)[-2]; - SystemFree( origPtr, sz ); - } - return; - } - - { - ThreadData* tls = ThreadData::get(); - Node* node = (Node*)ptr; - Block* block = (Block*)((size_t)ptr & -(int)MEM_BLOCK_SIZE); - assert( block->signature == MEM_BLOCK_SIGNATURE ); - - if( block->threadData == tls ) - { - STAT( - stat.nettoBytes -= block->objSize; - stat.freeCalls++; - float ratio = (float)stat.nettoBytes/stat.bruttoBytes; - if( stat.minUsageRatio > ratio ) - stat.minUsageRatio = ratio; - ); - - SANITY_CHECK(block); - - bool prevFilled = block->isFilled(); - --block->allocated; - if( !block->isFilled() && (block->allocated == 0 || prevFilled) ) - { - if( block->allocated == 0 ) - { - int idx = block->binIdx; - Block*& startPtr = tls->bins[idx][START]; - Block*& freePtr = tls->bins[idx][FREE]; - Block*& gcPtr = tls->bins[idx][GC]; - - if( block == block->next ) - { - CV_DbgAssert( startPtr == block && freePtr == block && gcPtr == block ); - startPtr = freePtr = gcPtr = 0; - } - else - { - if( freePtr == block ) - freePtr = block->next; - if( gcPtr == block ) - gcPtr = block->next; - if( startPtr == block ) - startPtr = block->next; - block->prev->next = block->next; - block->next->prev = block->prev; - } - mallocPool.free(block); - checkList(tls, idx); - return; - } - - tls->moveBlockToFreeList(block); - } - node->next = block->privateFreeList; - block->privateFreeList = node; - } - else - { - AutoLock lock(block->cs); - SANITY_CHECK(block); - - node->next = block->publicFreeList; - block->publicFreeList = node; - if( block->threadData == 0 ) - { - // take ownership of the abandoned block. - // note that it can happen at the same time as - // ThreadData::deleteData() marks the blocks as abandoned, - // so this part of the algorithm needs to be checked for data races - int idx = block->binIdx; - block->threadData = tls; - Block*& startPtr = tls->bins[idx][START]; - - if( startPtr ) - { - block->next = startPtr; - block->prev = startPtr->prev; - block->next->prev = block->prev->next = block; - } - else - startPtr = tls->bins[idx][FREE] = tls->bins[idx][GC] = block; - } - } - } -} - -#endif //CV_USE_SYSTEM_MALLOC - -} - -CV_IMPL void cvSetMemoryManager( CvAllocFunc, CvFreeFunc, void * ) -{ - CV_Error( -1, "Custom memory allocator is not supported" ); -} - -CV_IMPL void* cvAlloc( size_t size ) -{ - return cv::fastMalloc( size ); -} - -CV_IMPL void cvFree_( void* ptr ) -{ - cv::fastFree( ptr ); -} - - -/* End of file. */ diff --git a/modules/core/src/arithm.cpp b/modules/core/src/arithm.cpp deleted file mode 100644 index 0517a5f..0000000 --- a/modules/core/src/arithm.cpp +++ /dev/null @@ -1,3037 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// Arithmetic and logical operations: +, -, *, /, &, |, ^, ~, abs ... -// -// */ - -#include "precomp.hpp" - -namespace cv -{ - -#if ARITHM_USE_IPP -struct IPPArithmInitializer -{ - IPPArithmInitializer(void) - { - ippStaticInit(); - } -}; - -IPPArithmInitializer ippArithmInitializer; -#endif - -struct NOP {}; - -template -void vBinOp8(const T* src1, size_t step1, const T* src2, size_t step2, T* dst, size_t step, Size sz) -{ -#if CV_SSE2 - Op8 op8; -#endif - Op op; - - for( ; sz.height--; src1 += step1/sizeof(src1[0]), - src2 += step2/sizeof(src2[0]), - dst += step/sizeof(dst[0]) ) - { - int x = 0; - - #if CV_SSE2 - if( USE_SSE2 ) - { - for( ; x <= sz.width - 32; x += 32 ) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r1 = _mm_loadu_si128((const __m128i*)(src1 + x + 16)); - r0 = op8(r0,_mm_loadu_si128((const __m128i*)(src2 + x))); - r1 = op8(r1,_mm_loadu_si128((const __m128i*)(src2 + x + 16))); - _mm_storeu_si128((__m128i*)(dst + x), r0); - _mm_storeu_si128((__m128i*)(dst + x + 16), r1); - } - for( ; x <= sz.width - 8; x += 8 ) - { - __m128i r0 = _mm_loadl_epi64((const __m128i*)(src1 + x)); - r0 = op8(r0,_mm_loadl_epi64((const __m128i*)(src2 + x))); - _mm_storel_epi64((__m128i*)(dst + x), r0); - } - } - #endif -#if CV_ENABLE_UNROLLED - for( ; x <= sz.width - 4; x += 4 ) - { - T v0 = op(src1[x], src2[x]); - T v1 = op(src1[x+1], src2[x+1]); - dst[x] = v0; dst[x+1] = v1; - v0 = op(src1[x+2], src2[x+2]); - v1 = op(src1[x+3], src2[x+3]); - dst[x+2] = v0; dst[x+3] = v1; - } -#endif - for( ; x < sz.width; x++ ) - dst[x] = op(src1[x], src2[x]); - } -} - -template -void vBinOp16(const T* src1, size_t step1, const T* src2, size_t step2, - T* dst, size_t step, Size sz) -{ -#if CV_SSE2 - Op16 op16; -#endif - Op op; - - for( ; sz.height--; src1 += step1/sizeof(src1[0]), - src2 += step2/sizeof(src2[0]), - dst += step/sizeof(dst[0]) ) - { - int x = 0; - - #if CV_SSE2 - if( USE_SSE2 ) - { - for( ; x <= sz.width - 16; x += 16 ) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r1 = _mm_loadu_si128((const __m128i*)(src1 + x + 8)); - r0 = op16(r0,_mm_loadu_si128((const __m128i*)(src2 + x))); - r1 = op16(r1,_mm_loadu_si128((const __m128i*)(src2 + x + 8))); - _mm_storeu_si128((__m128i*)(dst + x), r0); - _mm_storeu_si128((__m128i*)(dst + x + 8), r1); - } - for( ; x <= sz.width - 4; x += 4 ) - { - __m128i r0 = _mm_loadl_epi64((const __m128i*)(src1 + x)); - r0 = op16(r0,_mm_loadl_epi64((const __m128i*)(src2 + x))); - _mm_storel_epi64((__m128i*)(dst + x), r0); - } - } - else - #endif - - for( ; x <= sz.width - 4; x += 4 ) - { - T v0 = op(src1[x], src2[x]); - T v1 = op(src1[x+1], src2[x+1]); - dst[x] = v0; dst[x+1] = v1; - v0 = op(src1[x+2], src2[x+2]); - v1 = op(src1[x+3], src2[x+3]); - dst[x+2] = v0; dst[x+3] = v1; - } - - for( ; x < sz.width; x++ ) - dst[x] = op(src1[x], src2[x]); - } -} - - -template -void vBinOp32s(const int* src1, size_t step1, const int* src2, size_t step2, - int* dst, size_t step, Size sz) -{ -#if CV_SSE2 - Op32 op32; -#endif - Op op; - - for( ; sz.height--; src1 += step1/sizeof(src1[0]), - src2 += step2/sizeof(src2[0]), - dst += step/sizeof(dst[0]) ) - { - int x = 0; - -#if CV_SSE2 - if( USE_SSE2 ) - { - if( (((size_t)src1|(size_t)src2|(size_t)dst)&15) == 0 ) - for( ; x <= sz.width - 8; x += 8 ) - { - __m128i r0 = _mm_load_si128((const __m128i*)(src1 + x)); - __m128i r1 = _mm_load_si128((const __m128i*)(src1 + x + 4)); - r0 = op32(r0,_mm_load_si128((const __m128i*)(src2 + x))); - r1 = op32(r1,_mm_load_si128((const __m128i*)(src2 + x + 4))); - _mm_store_si128((__m128i*)(dst + x), r0); - _mm_store_si128((__m128i*)(dst + x + 4), r1); - } - else - for( ; x <= sz.width - 8; x += 8 ) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r1 = _mm_loadu_si128((const __m128i*)(src1 + x + 4)); - r0 = op32(r0,_mm_loadu_si128((const __m128i*)(src2 + x))); - r1 = op32(r1,_mm_loadu_si128((const __m128i*)(src2 + x + 4))); - _mm_storeu_si128((__m128i*)(dst + x), r0); - _mm_storeu_si128((__m128i*)(dst + x + 4), r1); - } - } -#endif -#if CV_ENABLE_UNROLLED - for( ; x <= sz.width - 4; x += 4 ) - { - int v0 = op(src1[x], src2[x]); - int v1 = op(src1[x+1], src2[x+1]); - dst[x] = v0; dst[x+1] = v1; - v0 = op(src1[x+2], src2[x+2]); - v1 = op(src1[x+3], src2[x+3]); - dst[x+2] = v0; dst[x+3] = v1; - } -#endif - for( ; x < sz.width; x++ ) - dst[x] = op(src1[x], src2[x]); - } -} - - -template -void vBinOp32f(const float* src1, size_t step1, const float* src2, size_t step2, - float* dst, size_t step, Size sz) -{ -#if CV_SSE2 - Op32 op32; -#endif - Op op; - - for( ; sz.height--; src1 += step1/sizeof(src1[0]), - src2 += step2/sizeof(src2[0]), - dst += step/sizeof(dst[0]) ) - { - int x = 0; - - #if CV_SSE2 - if( USE_SSE2 ) - { - if( (((size_t)src1|(size_t)src2|(size_t)dst)&15) == 0 ) - for( ; x <= sz.width - 8; x += 8 ) - { - __m128 r0 = _mm_load_ps(src1 + x); - __m128 r1 = _mm_load_ps(src1 + x + 4); - r0 = op32(r0,_mm_load_ps(src2 + x)); - r1 = op32(r1,_mm_load_ps(src2 + x + 4)); - _mm_store_ps(dst + x, r0); - _mm_store_ps(dst + x + 4, r1); - } - else - for( ; x <= sz.width - 8; x += 8 ) - { - __m128 r0 = _mm_loadu_ps(src1 + x); - __m128 r1 = _mm_loadu_ps(src1 + x + 4); - r0 = op32(r0,_mm_loadu_ps(src2 + x)); - r1 = op32(r1,_mm_loadu_ps(src2 + x + 4)); - _mm_storeu_ps(dst + x, r0); - _mm_storeu_ps(dst + x + 4, r1); - } - } - #endif -#if CV_ENABLE_UNROLLED - for( ; x <= sz.width - 4; x += 4 ) - { - float v0 = op(src1[x], src2[x]); - float v1 = op(src1[x+1], src2[x+1]); - dst[x] = v0; dst[x+1] = v1; - v0 = op(src1[x+2], src2[x+2]); - v1 = op(src1[x+3], src2[x+3]); - dst[x+2] = v0; dst[x+3] = v1; - } -#endif - for( ; x < sz.width; x++ ) - dst[x] = op(src1[x], src2[x]); - } -} - -template -void vBinOp64f(const double* src1, size_t step1, const double* src2, size_t step2, - double* dst, size_t step, Size sz) -{ -#if CV_SSE2 - Op64 op64; -#endif - Op op; - - for( ; sz.height--; src1 += step1/sizeof(src1[0]), - src2 += step2/sizeof(src2[0]), - dst += step/sizeof(dst[0]) ) - { - int x = 0; - - #if CV_SSE2 - if( USE_SSE2 && (((size_t)src1|(size_t)src2|(size_t)dst)&15) == 0 ) - for( ; x <= sz.width - 4; x += 4 ) - { - __m128d r0 = _mm_load_pd(src1 + x); - __m128d r1 = _mm_load_pd(src1 + x + 2); - r0 = op64(r0,_mm_load_pd(src2 + x)); - r1 = op64(r1,_mm_load_pd(src2 + x + 2)); - _mm_store_pd(dst + x, r0); - _mm_store_pd(dst + x + 2, r1); - } - else - #endif - for( ; x <= sz.width - 4; x += 4 ) - { - double v0 = op(src1[x], src2[x]); - double v1 = op(src1[x+1], src2[x+1]); - dst[x] = v0; dst[x+1] = v1; - v0 = op(src1[x+2], src2[x+2]); - v1 = op(src1[x+3], src2[x+3]); - dst[x+2] = v0; dst[x+3] = v1; - } - - for( ; x < sz.width; x++ ) - dst[x] = op(src1[x], src2[x]); - } -} - -#if CV_SSE2 - -struct _VAdd8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_adds_epu8(a,b); }}; -struct _VSub8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_subs_epu8(a,b); }}; -struct _VMin8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_min_epu8(a,b); }}; -struct _VMax8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_max_epu8(a,b); }}; -struct _VAbsDiff8u -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_add_epi8(_mm_subs_epu8(a,b),_mm_subs_epu8(b,a)); } -}; - -struct _VAdd8s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_adds_epi8(a,b); }}; -struct _VSub8s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_subs_epi8(a,b); }}; -struct _VMin8s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i m = _mm_cmpgt_epi8(a, b); - return _mm_xor_si128(a, _mm_and_si128(_mm_xor_si128(a, b), m)); - } -}; -struct _VMax8s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i m = _mm_cmpgt_epi8(b, a); - return _mm_xor_si128(a, _mm_and_si128(_mm_xor_si128(a, b), m)); - } -}; -struct _VAbsDiff8s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i d = _mm_subs_epi8(a, b); - __m128i m = _mm_cmpgt_epi8(b, a); - return _mm_subs_epi8(_mm_xor_si128(d, m), m); - } -}; - -struct _VAdd16u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_adds_epu16(a,b); }}; -struct _VSub16u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_subs_epu16(a,b); }}; -struct _VMin16u -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_subs_epu16(a,_mm_subs_epu16(a,b)); } -}; -struct _VMax16u -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_adds_epu16(_mm_subs_epu16(a,b),b); } -}; -struct _VAbsDiff16u -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_add_epi16(_mm_subs_epu16(a,b),_mm_subs_epu16(b,a)); } -}; - -struct _VAdd16s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_adds_epi16(a,b); }}; -struct _VSub16s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_subs_epi16(a,b); }}; -struct _VMin16s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_min_epi16(a,b); }}; -struct _VMax16s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_max_epi16(a,b); }}; -struct _VAbsDiff16s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i M = _mm_max_epi16(a,b), m = _mm_min_epi16(a,b); - return _mm_subs_epi16(M, m); - } -}; - -struct _VAdd32s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_add_epi32(a,b); }}; -struct _VSub32s { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_sub_epi32(a,b); }}; -struct _VMin32s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i m = _mm_cmpgt_epi32(a, b); - return _mm_xor_si128(a, _mm_and_si128(_mm_xor_si128(a, b), m)); - } -}; -struct _VMax32s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i m = _mm_cmpgt_epi32(b, a); - return _mm_xor_si128(a, _mm_and_si128(_mm_xor_si128(a, b), m)); - } -}; -struct _VAbsDiff32s -{ - __m128i operator()(const __m128i& a, const __m128i& b) const - { - __m128i d = _mm_sub_epi32(a, b); - __m128i m = _mm_cmpgt_epi32(b, a); - return _mm_sub_epi32(_mm_xor_si128(d, m), m); - } -}; - -struct _VAdd32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_add_ps(a,b); }}; -struct _VSub32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_sub_ps(a,b); }}; -struct _VMin32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_min_ps(a,b); }}; -struct _VMax32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_max_ps(a,b); }}; -static int CV_DECL_ALIGNED(16) v32f_absmask[] = { 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff }; -struct _VAbsDiff32f -{ - __m128 operator()(const __m128& a, const __m128& b) const - { - return _mm_and_ps(_mm_sub_ps(a,b), *(const __m128*)v32f_absmask); - } -}; - -struct _VAdd64f { __m128d operator()(const __m128d& a, const __m128d& b) const { return _mm_add_pd(a,b); }}; -struct _VSub64f { __m128d operator()(const __m128d& a, const __m128d& b) const { return _mm_sub_pd(a,b); }}; -struct _VMin64f { __m128d operator()(const __m128d& a, const __m128d& b) const { return _mm_min_pd(a,b); }}; -struct _VMax64f { __m128d operator()(const __m128d& a, const __m128d& b) const { return _mm_max_pd(a,b); }}; - -static int CV_DECL_ALIGNED(16) v64f_absmask[] = { 0xffffffff, 0x7fffffff, 0xffffffff, 0x7fffffff }; -struct _VAbsDiff64f -{ - __m128d operator()(const __m128d& a, const __m128d& b) const - { - return _mm_and_pd(_mm_sub_pd(a,b), *(const __m128d*)v64f_absmask); - } -}; - -struct _VAnd8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_and_si128(a,b); }}; -struct _VOr8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_or_si128(a,b); }}; -struct _VXor8u { __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_xor_si128(a,b); }}; -struct _VNot8u { __m128i operator()(const __m128i& a, const __m128i&) const { return _mm_xor_si128(_mm_set1_epi32(-1),a); }}; - -#endif - -#if CV_SSE2 -#define IF_SIMD(op) op -#else -#define IF_SIMD(op) NOP -#endif - -template<> inline uchar OpAdd::operator ()(uchar a, uchar b) const -{ return CV_FAST_CAST_8U(a + b); } -template<> inline uchar OpSub::operator ()(uchar a, uchar b) const -{ return CV_FAST_CAST_8U(a - b); } - -template struct OpAbsDiff -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator()(T a, T b) const { return (T)std::abs(a - b); } -}; - -template<> inline short OpAbsDiff::operator ()(short a, short b) const -{ return saturate_cast(std::abs(a - b)); } - -template<> inline schar OpAbsDiff::operator ()(schar a, schar b) const -{ return saturate_cast(std::abs(a - b)); } - -template struct OpAbsDiffS -{ - typedef T type1; - typedef WT type2; - typedef T rtype; - T operator()(T a, WT b) const { return saturate_cast(std::abs(a - b)); } -}; - -template struct OpAnd -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator()( T a, T b ) const { return a & b; } -}; - -template struct OpOr -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator()( T a, T b ) const { return a | b; } -}; - -template struct OpXor -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator()( T a, T b ) const { return a ^ b; } -}; - -template struct OpNot -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator()( T a, T ) const { return ~a; } -}; - -static inline void fixSteps(Size sz, size_t elemSize, size_t& step1, size_t& step2, size_t& step) -{ - if( sz.height == 1 ) - step1 = step2 = step = sz.width*elemSize; -} - -static void add8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAdd_8u_C1RSfs(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp8, IF_SIMD(_VAdd8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void add8s( const schar* src1, size_t step1, - const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* ) -{ - vBinOp8, IF_SIMD(_VAdd8s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void add16u( const ushort* src1, size_t step1, - const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAdd_16u_C1RSfs(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp16, IF_SIMD(_VAdd16u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void add16s( const short* src1, size_t step1, - const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAdd_16s_C1RSfs(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp16, IF_SIMD(_VAdd16s)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void add32s( const int* src1, size_t step1, - const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* ) -{ - vBinOp32s, IF_SIMD(_VAdd32s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void add32f( const float* src1, size_t step1, - const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAdd_32f_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp32f, IF_SIMD(_VAdd32f)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void add64f( const double* src1, size_t step1, - const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* ) -{ - vBinOp64f, IF_SIMD(_VAdd64f)>(src1, step1, src2, step2, dst, step, sz); -} - -static void sub8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiSub_8u_C1RSfs(src2, (int)step2, src1, (int)step1, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp8, IF_SIMD(_VSub8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void sub8s( const schar* src1, size_t step1, - const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* ) -{ - vBinOp8, IF_SIMD(_VSub8s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void sub16u( const ushort* src1, size_t step1, - const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiSub_16u_C1RSfs(src2, (int)step2, src1, (int)step1, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp16, IF_SIMD(_VSub16u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void sub16s( const short* src1, size_t step1, - const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiSub_16s_C1RSfs(src2, (int)step2, src1, (int)step1, dst, (int)step, (IppiSize&)sz, 0), - (vBinOp16, IF_SIMD(_VSub16s)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void sub32s( const int* src1, size_t step1, - const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* ) -{ - vBinOp32s, IF_SIMD(_VSub32s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void sub32f( const float* src1, size_t step1, - const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiSub_32f_C1R(src2, (int)step2, src1, (int)step1, dst, (int)step, (IppiSize&)sz), - (vBinOp32f, IF_SIMD(_VSub32f)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void sub64f( const double* src1, size_t step1, - const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* ) -{ - vBinOp64f, IF_SIMD(_VSub64f)>(src1, step1, src2, step2, dst, step, sz); -} - -template<> inline uchar OpMin::operator ()(uchar a, uchar b) const { return CV_MIN_8U(a, b); } -template<> inline uchar OpMax::operator ()(uchar a, uchar b) const { return CV_MAX_8U(a, b); } - -static void max8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - uchar* s1 = (uchar*)src1; - uchar* s2 = (uchar*)src2; - uchar* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMaxEvery_8u(s1, s2, d, sz.width); - s1 += step1; - s2 += step2; - d += step; - } - } -#else - vBinOp8, IF_SIMD(_VMax8u)>(src1, step1, src2, step2, dst, step, sz); -#endif - -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMaxEvery_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp8, IF_SIMD(_VMax8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void max8s( const schar* src1, size_t step1, - const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* ) -{ - vBinOp8, IF_SIMD(_VMax8s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void max16u( const ushort* src1, size_t step1, - const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - ushort* s1 = (ushort*)src1; - ushort* s2 = (ushort*)src2; - ushort* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMaxEvery_16u(s1, s2, d, sz.width); - s1 = (ushort*)((uchar*)s1 + step1); - s2 = (ushort*)((uchar*)s2 + step2); - d = (ushort*)((uchar*)d + step); - } - } -#else - vBinOp16, IF_SIMD(_VMax16u)>(src1, step1, src2, step2, dst, step, sz); -#endif - -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMaxEvery_16u_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp16, IF_SIMD(_VMax16u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void max16s( const short* src1, size_t step1, - const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* ) -{ - vBinOp16, IF_SIMD(_VMax16s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void max32s( const int* src1, size_t step1, - const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* ) -{ - vBinOp32s, IF_SIMD(_VMax32s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void max32f( const float* src1, size_t step1, - const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - float* s1 = (float*)src1; - float* s2 = (float*)src2; - float* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMaxEvery_32f(s1, s2, d, sz.width); - s1 = (float*)((uchar*)s1 + step1); - s2 = (float*)((uchar*)s2 + step2); - d = (float*)((uchar*)d + step); - } - } -#else - vBinOp32f, IF_SIMD(_VMax32f)>(src1, step1, src2, step2, dst, step, sz); -#endif -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMaxEvery_32f_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp32f, IF_SIMD(_VMax32f)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void max64f( const double* src1, size_t step1, - const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* ) -{ - vBinOp64f, IF_SIMD(_VMax64f)>(src1, step1, src2, step2, dst, step, sz); -} - -static void min8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - uchar* s1 = (uchar*)src1; - uchar* s2 = (uchar*)src2; - uchar* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMinEvery_8u(s1, s2, d, sz.width); - s1 += step1; - s2 += step2; - d += step; - } - } -#else - vBinOp8, IF_SIMD(_VMin8u)>(src1, step1, src2, step2, dst, step, sz); -#endif - -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMinEvery_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp8, IF_SIMD(_VMin8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void min8s( const schar* src1, size_t step1, - const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* ) -{ - vBinOp8, IF_SIMD(_VMin8s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void min16u( const ushort* src1, size_t step1, - const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - ushort* s1 = (ushort*)src1; - ushort* s2 = (ushort*)src2; - ushort* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMinEvery_16u(s1, s2, d, sz.width); - s1 = (ushort*)((uchar*)s1 + step1); - s2 = (ushort*)((uchar*)s2 + step2); - d = (ushort*)((uchar*)d + step); - } - } -#else - vBinOp16, IF_SIMD(_VMin16u)>(src1, step1, src2, step2, dst, step, sz); -#endif - -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMinEvery_16u_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp16, IF_SIMD(_VMin16u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void min16s( const short* src1, size_t step1, - const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* ) -{ - vBinOp16, IF_SIMD(_VMin16s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void min32s( const int* src1, size_t step1, - const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* ) -{ - vBinOp32s, IF_SIMD(_VMin32s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void min32f( const float* src1, size_t step1, - const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* ) -{ -#if (ARITHM_USE_IPP == 1) - { - float* s1 = (float*)src1; - float* s2 = (float*)src2; - float* d = dst; - fixSteps(sz, sizeof(dst[0]), step1, step2, step); - for(int i = 0; i < sz.height; i++) - { - ippsMinEvery_32f(s1, s2, d, sz.width); - s1 = (float*)((uchar*)s1 + step1); - s2 = (float*)((uchar*)s2 + step2); - d = (float*)((uchar*)d + step); - } - } -#else - vBinOp32f, IF_SIMD(_VMin32f)>(src1, step1, src2, step2, dst, step, sz); -#endif -// IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); -// ippiMinEvery_32f_C1R(src1, (int)step1, src2, (int)step2, dst, (IppiSize&)sz), -// (vBinOp32f, IF_SIMD(_VMin32f)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void min64f( const double* src1, size_t step1, - const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* ) -{ - vBinOp64f, IF_SIMD(_VMin64f)>(src1, step1, src2, step2, dst, step, sz); -} - -static void absdiff8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAbsDiff_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp8, IF_SIMD(_VAbsDiff8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void absdiff8s( const schar* src1, size_t step1, - const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* ) -{ - vBinOp8, IF_SIMD(_VAbsDiff8s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void absdiff16u( const ushort* src1, size_t step1, - const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAbsDiff_16u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp16, IF_SIMD(_VAbsDiff16u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void absdiff16s( const short* src1, size_t step1, - const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* ) -{ - vBinOp16, IF_SIMD(_VAbsDiff16s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void absdiff32s( const int* src1, size_t step1, - const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* ) -{ - vBinOp32s, IF_SIMD(_VAbsDiff32s)>(src1, step1, src2, step2, dst, step, sz); -} - -static void absdiff32f( const float* src1, size_t step1, - const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAbsDiff_32f_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp32f, IF_SIMD(_VAbsDiff32f)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void absdiff64f( const double* src1, size_t step1, - const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* ) -{ - vBinOp64f, IF_SIMD(_VAbsDiff64f)>(src1, step1, src2, step2, dst, step, sz); -} - - -static void and8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiAnd_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp8, IF_SIMD(_VAnd8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void or8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiOr_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp8, IF_SIMD(_VOr8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void xor8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); - ippiXor_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)sz), - (vBinOp8, IF_SIMD(_VXor8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -static void not8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* ) -{ - IF_IPP(fixSteps(sz, sizeof(dst[0]), step1, step2, step); (void *)src2; - ippiNot_8u_C1R(src1, (int)step1, dst, (int)step, (IppiSize&)sz), - (vBinOp8, IF_SIMD(_VNot8u)>(src1, step1, src2, step2, dst, step, sz))); -} - -/****************************************************************************************\ -* logical operations * -\****************************************************************************************/ - -void convertAndUnrollScalar( const Mat& sc, int buftype, uchar* scbuf, size_t blocksize ) -{ - int scn = (int)sc.total(), cn = CV_MAT_CN(buftype); - size_t esz = CV_ELEM_SIZE(buftype); - getConvertFunc(sc.depth(), buftype)(sc.data, 0, 0, 0, scbuf, 0, Size(std::min(cn, scn), 1), 0); - // unroll the scalar - if( scn < cn ) - { - CV_Assert( scn == 1 ); - size_t esz1 = CV_ELEM_SIZE1(buftype); - for( size_t i = esz1; i < esz; i++ ) - scbuf[i] = scbuf[i - esz1]; - } - for( size_t i = esz; i < blocksize*esz; i++ ) - scbuf[i] = scbuf[i - esz]; -} - -static void binary_op(InputArray _src1, InputArray _src2, OutputArray _dst, - InputArray _mask, const BinaryFunc* tab, bool bitwise) -{ - int kind1 = _src1.kind(), kind2 = _src2.kind(); - Mat src1 = _src1.getMat(), src2 = _src2.getMat(); - bool haveMask = !_mask.empty(), haveScalar = false; - BinaryFunc func; - int c; - - if( src1.dims <= 2 && src2.dims <= 2 && kind1 == kind2 && - src1.size() == src2.size() && src1.type() == src2.type() && !haveMask ) - { - _dst.create(src1.size(), src1.type()); - Mat dst = _dst.getMat(); - if( bitwise ) - { - func = *tab; - c = (int)src1.elemSize(); - } - else - { - func = tab[src1.depth()]; - c = src1.channels(); - } - - Size sz = getContinuousSize(src1, src2, dst); - size_t len = sz.width*(size_t)c; - if( len == (size_t)(int)len ) - { - sz.width = (int)len; - func(src1.data, src1.step, src2.data, src2.step, dst.data, dst.step, sz, 0); - return; - } - } - - if( (kind1 == _InputArray::MATX) + (kind2 == _InputArray::MATX) == 1 || - src1.size != src2.size || src1.type() != src2.type() ) - { - if( checkScalar(src1, src2.type(), kind1, kind2) ) - // src1 is a scalar; swap it with src2 - swap(src1, src2); - else if( !checkScalar(src2, src1.type(), kind2, kind1) ) - CV_Error( CV_StsUnmatchedSizes, - "The operation is neither 'array op array' (where arrays have the same size and type), " - "nor 'array op scalar', nor 'scalar op array'" ); - haveScalar = true; - } - - size_t esz = src1.elemSize(); - size_t blocksize0 = (BLOCK_SIZE + esz-1)/esz; - int cn = src1.channels(); - BinaryFunc copymask = 0; - Mat mask; - bool reallocate = false; - - if( haveMask ) - { - mask = _mask.getMat(); - CV_Assert( (mask.type() == CV_8UC1 || mask.type() == CV_8SC1) ); - CV_Assert( mask.size == src1.size ); - copymask = getCopyMaskFunc(esz); - Mat tdst = _dst.getMat(); - reallocate = tdst.size != src1.size || tdst.type() != src1.type(); - } - - AutoBuffer _buf; - uchar *scbuf = 0, *maskbuf = 0; - - _dst.create(src1.dims, src1.size, src1.type()); - Mat dst = _dst.getMat(); - - // if this is mask operation and dst has been reallocated, - // we have to - if( haveMask && reallocate ) - dst = Scalar::all(0); - - if( bitwise ) - { - func = *tab; - c = (int)esz; - } - else - { - func = tab[src1.depth()]; - c = cn; - } - - if( !haveScalar ) - { - const Mat* arrays[] = { &src1, &src2, &dst, &mask, 0 }; - uchar* ptrs[4]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size, blocksize = total; - - if( blocksize*c > INT_MAX ) - blocksize = INT_MAX/c; - - if( haveMask ) - { - blocksize = std::min(blocksize, blocksize0); - _buf.allocate(blocksize*esz); - maskbuf = _buf; - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - - func( ptrs[0], 0, ptrs[1], 0, haveMask ? maskbuf : ptrs[2], 0, Size(bsz*c, 1), 0 ); - if( haveMask ) - { - copymask( maskbuf, 0, ptrs[3], 0, ptrs[2], 0, Size(bsz, 1), &esz ); - ptrs[3] += bsz; - } - - bsz *= (int)esz; - ptrs[0] += bsz; ptrs[1] += bsz; ptrs[2] += bsz; - } - } - } - else - { - const Mat* arrays[] = { &src1, &dst, &mask, 0 }; - uchar* ptrs[3]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size, blocksize = std::min(total, blocksize0); - - _buf.allocate(blocksize*(haveMask ? 2 : 1)*esz + 32); - scbuf = _buf; - maskbuf = alignPtr(scbuf + blocksize*esz, 16); - - convertAndUnrollScalar( src2, src1.type(), scbuf, blocksize); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - - func( ptrs[0], 0, scbuf, 0, haveMask ? maskbuf : ptrs[1], 0, Size(bsz*c, 1), 0 ); - if( haveMask ) - { - copymask( maskbuf, 0, ptrs[2], 0, ptrs[1], 0, Size(bsz, 1), &esz ); - ptrs[2] += bsz; - } - - bsz *= (int)esz; - ptrs[0] += bsz; ptrs[1] += bsz; - } - } - } -} - -static BinaryFunc* getMaxTab() -{ - static BinaryFunc maxTab[] = - { - (BinaryFunc)GET_OPTIMIZED(max8u), (BinaryFunc)GET_OPTIMIZED(max8s), - (BinaryFunc)GET_OPTIMIZED(max16u), (BinaryFunc)GET_OPTIMIZED(max16s), - (BinaryFunc)GET_OPTIMIZED(max32s), - (BinaryFunc)GET_OPTIMIZED(max32f), (BinaryFunc)max64f, - 0 - }; - - return maxTab; -} - -static BinaryFunc* getMinTab() -{ - static BinaryFunc minTab[] = - { - (BinaryFunc)GET_OPTIMIZED(min8u), (BinaryFunc)GET_OPTIMIZED(min8s), - (BinaryFunc)GET_OPTIMIZED(min16u), (BinaryFunc)GET_OPTIMIZED(min16s), - (BinaryFunc)GET_OPTIMIZED(min32s), - (BinaryFunc)GET_OPTIMIZED(min32f), (BinaryFunc)min64f, - 0 - }; - - return minTab; -} - -} - -void cv::bitwise_and(InputArray a, InputArray b, OutputArray c, InputArray mask) -{ - BinaryFunc f = (BinaryFunc)GET_OPTIMIZED(and8u); - binary_op(a, b, c, mask, &f, true); -} - -void cv::bitwise_or(InputArray a, InputArray b, OutputArray c, InputArray mask) -{ - BinaryFunc f = (BinaryFunc)GET_OPTIMIZED(or8u); - binary_op(a, b, c, mask, &f, true); -} - -void cv::bitwise_xor(InputArray a, InputArray b, OutputArray c, InputArray mask) -{ - BinaryFunc f = (BinaryFunc)GET_OPTIMIZED(xor8u); - binary_op(a, b, c, mask, &f, true); -} - -void cv::bitwise_not(InputArray a, OutputArray c, InputArray mask) -{ - BinaryFunc f = (BinaryFunc)GET_OPTIMIZED(not8u); - binary_op(a, a, c, mask, &f, true); -} - -void cv::max( InputArray src1, InputArray src2, OutputArray dst ) -{ - binary_op(src1, src2, dst, noArray(), getMaxTab(), false ); -} - -void cv::min( InputArray src1, InputArray src2, OutputArray dst ) -{ - binary_op(src1, src2, dst, noArray(), getMinTab(), false ); -} - -void cv::max(const Mat& src1, const Mat& src2, Mat& dst) -{ - OutputArray _dst(dst); - binary_op(src1, src2, _dst, noArray(), getMaxTab(), false ); -} - -void cv::min(const Mat& src1, const Mat& src2, Mat& dst) -{ - OutputArray _dst(dst); - binary_op(src1, src2, _dst, noArray(), getMinTab(), false ); -} - -void cv::max(const Mat& src1, double src2, Mat& dst) -{ - OutputArray _dst(dst); - binary_op(src1, src2, _dst, noArray(), getMaxTab(), false ); -} - -void cv::min(const Mat& src1, double src2, Mat& dst) -{ - OutputArray _dst(dst); - binary_op(src1, src2, _dst, noArray(), getMinTab(), false ); -} - -/****************************************************************************************\ -* add/subtract * -\****************************************************************************************/ - -namespace cv -{ - -static int actualScalarDepth(const double* data, int len) -{ - int i = 0, minval = INT_MAX, maxval = INT_MIN; - for(; i < len; ++i) - { - int ival = cvRound(data[i]); - if( ival != data[i] ) - break; - minval = MIN(minval, ival); - maxval = MAX(maxval, ival); - } - return i < len ? CV_64F : - minval >= 0 && maxval <= (int)UCHAR_MAX ? CV_8U : - minval >= (int)SCHAR_MIN && maxval <= (int)SCHAR_MAX ? CV_8S : - minval >= 0 && maxval <= (int)USHRT_MAX ? CV_16U : - minval >= (int)SHRT_MIN && maxval <= (int)SHRT_MAX ? CV_16S : - CV_32S; -} - -static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst, - InputArray _mask, int dtype, BinaryFunc* tab, bool muldiv=false, void* usrdata=0) -{ - int kind1 = _src1.kind(), kind2 = _src2.kind(); - Mat src1 = _src1.getMat(), src2 = _src2.getMat(); - bool haveMask = !_mask.empty(); - bool reallocate = false; - - bool src1Scalar = checkScalar(src1, src2.type(), kind1, kind2); - bool src2Scalar = checkScalar(src2, src1.type(), kind2, kind1); - - if( (kind1 == kind2 || src1.channels() == 1) && src1.dims <= 2 && src2.dims <= 2 && - src1.size() == src2.size() && src1.type() == src2.type() && - !haveMask && ((!_dst.fixedType() && (dtype < 0 || CV_MAT_DEPTH(dtype) == src1.depth())) || - (_dst.fixedType() && _dst.type() == _src1.type())) && - ((src1Scalar && src2Scalar) || (!src1Scalar && !src2Scalar)) ) - { - _dst.create(src1.size(), src1.type()); - Mat dst = _dst.getMat(); - Size sz = getContinuousSize(src1, src2, dst, src1.channels()); - tab[src1.depth()](src1.data, src1.step, src2.data, src2.step, dst.data, dst.step, sz, usrdata); - return; - } - - bool haveScalar = false, swapped12 = false; - int depth2 = src2.depth(); - if( src1.size != src2.size || src1.channels() != src2.channels() || - (kind1 == _InputArray::MATX && (src1.size() == Size(1,4) || src1.size() == Size(1,1))) || - (kind2 == _InputArray::MATX && (src2.size() == Size(1,4) || src2.size() == Size(1,1))) ) - { - if( checkScalar(src1, src2.type(), kind1, kind2) ) - { - // src1 is a scalar; swap it with src2 - swap(src1, src2); - swapped12 = true; - } - else if( !checkScalar(src2, src1.type(), kind2, kind1) ) - CV_Error( CV_StsUnmatchedSizes, - "The operation is neither 'array op array' (where arrays have the same size and the same number of channels), " - "nor 'array op scalar', nor 'scalar op array'" ); - haveScalar = true; - CV_Assert(src2.type() == CV_64F && (src2.rows == 4 || src2.rows == 1)); - - if (!muldiv) - { - depth2 = actualScalarDepth(src2.ptr(), src1.channels()); - if( depth2 == CV_64F && (src1.depth() < CV_32S || src1.depth() == CV_32F) ) - depth2 = CV_32F; - } - else - depth2 = CV_64F; - } - - int cn = src1.channels(), depth1 = src1.depth(), wtype; - BinaryFunc cvtsrc1 = 0, cvtsrc2 = 0, cvtdst = 0; - - if( dtype < 0 ) - { - if( _dst.fixedType() ) - dtype = _dst.type(); - else - { - if( !haveScalar && src1.type() != src2.type() ) - CV_Error(CV_StsBadArg, - "When the input arrays in add/subtract/multiply/divide functions have different types, " - "the output array type must be explicitly specified"); - dtype = src1.type(); - } - } - dtype = CV_MAT_DEPTH(dtype); - - if( depth1 == depth2 && dtype == depth1 ) - wtype = dtype; - else if( !muldiv ) - { - wtype = depth1 <= CV_8S && depth2 <= CV_8S ? CV_16S : - depth1 <= CV_32S && depth2 <= CV_32S ? CV_32S : std::max(depth1, depth2); - wtype = std::max(wtype, dtype); - - // when the result of addition should be converted to an integer type, - // and just one of the input arrays is floating-point, it makes sense to convert that input to integer type before the operation, - // instead of converting the other input to floating-point and then converting the operation result back to integers. - if( dtype < CV_32F && (depth1 < CV_32F || depth2 < CV_32F) ) - wtype = CV_32S; - } - else - { - wtype = std::max(depth1, std::max(depth2, CV_32F)); - wtype = std::max(wtype, dtype); - } - - cvtsrc1 = depth1 == wtype ? 0 : getConvertFunc(depth1, wtype); - cvtsrc2 = depth2 == depth1 ? cvtsrc1 : depth2 == wtype ? 0 : getConvertFunc(depth2, wtype); - cvtdst = dtype == wtype ? 0 : getConvertFunc(wtype, dtype); - - dtype = CV_MAKETYPE(dtype, cn); - wtype = CV_MAKETYPE(wtype, cn); - - size_t esz1 = src1.elemSize(), esz2 = src2.elemSize(); - size_t dsz = CV_ELEM_SIZE(dtype), wsz = CV_ELEM_SIZE(wtype); - size_t blocksize0 = (size_t)(BLOCK_SIZE + wsz-1)/wsz; - BinaryFunc copymask = 0; - Mat mask; - - if( haveMask ) - { - mask = _mask.getMat(); - CV_Assert( (mask.type() == CV_8UC1 || mask.type() == CV_8SC1) ); - CV_Assert( mask.size == src1.size ); - copymask = getCopyMaskFunc(dsz); - Mat tdst = _dst.getMat(); - reallocate = tdst.size != src1.size || tdst.type() != dtype; - } - - AutoBuffer _buf; - uchar *buf, *maskbuf = 0, *buf1 = 0, *buf2 = 0, *wbuf = 0; - size_t bufesz = (cvtsrc1 ? wsz : 0) + (cvtsrc2 || haveScalar ? wsz : 0) + (cvtdst ? wsz : 0) + (haveMask ? dsz : 0); - - _dst.create(src1.dims, src1.size, dtype); - Mat dst = _dst.getMat(); - - if( haveMask && reallocate ) - dst = Scalar::all(0); - - BinaryFunc func = tab[CV_MAT_DEPTH(wtype)]; - - if( !haveScalar ) - { - const Mat* arrays[] = { &src1, &src2, &dst, &mask, 0 }; - uchar* ptrs[4]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size, blocksize = total; - - if( haveMask || cvtsrc1 || cvtsrc2 || cvtdst ) - blocksize = std::min(blocksize, blocksize0); - - _buf.allocate(bufesz*blocksize + 64); - buf = _buf; - if( cvtsrc1 ) - buf1 = buf, buf = alignPtr(buf + blocksize*wsz, 16); - if( cvtsrc2 ) - buf2 = buf, buf = alignPtr(buf + blocksize*wsz, 16); - wbuf = maskbuf = buf; - if( cvtdst ) - buf = alignPtr(buf + blocksize*wsz, 16); - if( haveMask ) - maskbuf = buf; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - Size bszn(bsz*cn, 1); - const uchar *sptr1 = ptrs[0], *sptr2 = ptrs[1]; - uchar* dptr = ptrs[2]; - if( cvtsrc1 ) - { - cvtsrc1( sptr1, 0, 0, 0, buf1, 0, bszn, 0 ); - sptr1 = buf1; - } - if( ptrs[0] == ptrs[1] ) - sptr2 = sptr1; - else if( cvtsrc2 ) - { - cvtsrc2( sptr2, 0, 0, 0, buf2, 0, bszn, 0 ); - sptr2 = buf2; - } - - if( !haveMask && !cvtdst ) - func( sptr1, 0, sptr2, 0, dptr, 0, bszn, usrdata ); - else - { - func( sptr1, 0, sptr2, 0, wbuf, 0, bszn, usrdata ); - if( !haveMask ) - cvtdst( wbuf, 0, 0, 0, dptr, 0, bszn, 0 ); - else if( !cvtdst ) - { - copymask( wbuf, 0, ptrs[3], 0, dptr, 0, Size(bsz, 1), &dsz ); - ptrs[3] += bsz; - } - else - { - cvtdst( wbuf, 0, 0, 0, maskbuf, 0, bszn, 0 ); - copymask( maskbuf, 0, ptrs[3], 0, dptr, 0, Size(bsz, 1), &dsz ); - ptrs[3] += bsz; - } - } - ptrs[0] += bsz*esz1; ptrs[1] += bsz*esz2; ptrs[2] += bsz*dsz; - } - } - } - else - { - const Mat* arrays[] = { &src1, &dst, &mask, 0 }; - uchar* ptrs[3]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size, blocksize = std::min(total, blocksize0); - - _buf.allocate(bufesz*blocksize + 64); - buf = _buf; - if( cvtsrc1 ) - buf1 = buf, buf = alignPtr(buf + blocksize*wsz, 16); - buf2 = buf; buf = alignPtr(buf + blocksize*wsz, 16); - wbuf = maskbuf = buf; - if( cvtdst ) - buf = alignPtr(buf + blocksize*wsz, 16); - if( haveMask ) - maskbuf = buf; - - convertAndUnrollScalar( src2, wtype, buf2, blocksize); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - Size bszn(bsz*cn, 1); - const uchar *sptr1 = ptrs[0]; - const uchar* sptr2 = buf2; - uchar* dptr = ptrs[1]; - - if( cvtsrc1 ) - { - cvtsrc1( sptr1, 0, 0, 0, buf1, 0, bszn, 0 ); - sptr1 = buf1; - } - - if( swapped12 ) - std::swap(sptr1, sptr2); - - if( !haveMask && !cvtdst ) - func( sptr1, 0, sptr2, 0, dptr, 0, bszn, usrdata ); - else - { - func( sptr1, 0, sptr2, 0, wbuf, 0, bszn, usrdata ); - if( !haveMask ) - cvtdst( wbuf, 0, 0, 0, dptr, 0, bszn, 0 ); - else if( !cvtdst ) - { - copymask( wbuf, 0, ptrs[2], 0, dptr, 0, Size(bsz, 1), &dsz ); - ptrs[2] += bsz; - } - else - { - cvtdst( wbuf, 0, 0, 0, maskbuf, 0, bszn, 0 ); - copymask( maskbuf, 0, ptrs[2], 0, dptr, 0, Size(bsz, 1), &dsz ); - ptrs[2] += bsz; - } - } - ptrs[0] += bsz*esz1; ptrs[1] += bsz*dsz; - } - } - } -} - -static BinaryFunc* getAddTab() -{ - static BinaryFunc addTab[] = - { - (BinaryFunc)GET_OPTIMIZED(add8u), (BinaryFunc)GET_OPTIMIZED(add8s), - (BinaryFunc)GET_OPTIMIZED(add16u), (BinaryFunc)GET_OPTIMIZED(add16s), - (BinaryFunc)GET_OPTIMIZED(add32s), - (BinaryFunc)GET_OPTIMIZED(add32f), (BinaryFunc)add64f, - 0 - }; - - return addTab; -} - -static BinaryFunc* getSubTab() -{ - static BinaryFunc subTab[] = - { - (BinaryFunc)GET_OPTIMIZED(sub8u), (BinaryFunc)GET_OPTIMIZED(sub8s), - (BinaryFunc)GET_OPTIMIZED(sub16u), (BinaryFunc)GET_OPTIMIZED(sub16s), - (BinaryFunc)GET_OPTIMIZED(sub32s), - (BinaryFunc)GET_OPTIMIZED(sub32f), (BinaryFunc)sub64f, - 0 - }; - - return subTab; -} - -static BinaryFunc* getAbsDiffTab() -{ - static BinaryFunc absDiffTab[] = - { - (BinaryFunc)GET_OPTIMIZED(absdiff8u), (BinaryFunc)GET_OPTIMIZED(absdiff8s), - (BinaryFunc)GET_OPTIMIZED(absdiff16u), (BinaryFunc)GET_OPTIMIZED(absdiff16s), - (BinaryFunc)GET_OPTIMIZED(absdiff32s), - (BinaryFunc)GET_OPTIMIZED(absdiff32f), (BinaryFunc)absdiff64f, - 0 - }; - - return absDiffTab; -} - -} - -void cv::add( InputArray src1, InputArray src2, OutputArray dst, - InputArray mask, int dtype ) -{ - arithm_op(src1, src2, dst, mask, dtype, getAddTab() ); -} - -void cv::subtract( InputArray src1, InputArray src2, OutputArray dst, - InputArray mask, int dtype ) -{ -#ifdef HAVE_TEGRA_OPTIMIZATION - if (mask.empty() && src1.depth() == CV_8U && src2.depth() == CV_8U) - { - if (dtype == -1 && dst.fixedType()) - dtype = dst.depth(); - - if (!dst.fixedType() || dtype == dst.depth()) - { - if (dtype == CV_16S) - { - Mat _dst = dst.getMat(); - if(tegra::subtract_8u8u16s(src1.getMat(), src2.getMat(), _dst)) - return; - } - else if (dtype == CV_32F) - { - Mat _dst = dst.getMat(); - if(tegra::subtract_8u8u32f(src1.getMat(), src2.getMat(), _dst)) - return; - } - else if (dtype == CV_8S) - { - Mat _dst = dst.getMat(); - if(tegra::subtract_8u8u8s(src1.getMat(), src2.getMat(), _dst)) - return; - } - } - } -#endif - arithm_op(src1, src2, dst, mask, dtype, getSubTab() ); -} - -void cv::absdiff( InputArray src1, InputArray src2, OutputArray dst ) -{ - arithm_op(src1, src2, dst, noArray(), -1, getAbsDiffTab()); -} - -/****************************************************************************************\ -* multiply/divide * -\****************************************************************************************/ - -namespace cv -{ - -template static void -mul_( const T* src1, size_t step1, const T* src2, size_t step2, - T* dst, size_t step, Size size, WT scale ) -{ - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - step /= sizeof(dst[0]); - - if( scale == (WT)1. ) - { - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int i=0; - #if CV_ENABLE_UNROLLED - for(; i <= size.width - 4; i += 4 ) - { - T t0; - T t1; - t0 = saturate_cast(src1[i ] * src2[i ]); - t1 = saturate_cast(src1[i+1] * src2[i+1]); - dst[i ] = t0; - dst[i+1] = t1; - - t0 = saturate_cast(src1[i+2] * src2[i+2]); - t1 = saturate_cast(src1[i+3] * src2[i+3]); - dst[i+2] = t0; - dst[i+3] = t1; - } - #endif - for( ; i < size.width; i++ ) - dst[i] = saturate_cast(src1[i] * src2[i]); - } - } - else - { - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int i = 0; - #if CV_ENABLE_UNROLLED - for(; i <= size.width - 4; i += 4 ) - { - T t0 = saturate_cast(scale*(WT)src1[i]*src2[i]); - T t1 = saturate_cast(scale*(WT)src1[i+1]*src2[i+1]); - dst[i] = t0; dst[i+1] = t1; - - t0 = saturate_cast(scale*(WT)src1[i+2]*src2[i+2]); - t1 = saturate_cast(scale*(WT)src1[i+3]*src2[i+3]); - dst[i+2] = t0; dst[i+3] = t1; - } - #endif - for( ; i < size.width; i++ ) - dst[i] = saturate_cast(scale*(WT)src1[i]*src2[i]); - } - } -} - -template static void -div_( const T* src1, size_t step1, const T* src2, size_t step2, - T* dst, size_t step, Size size, double scale ) -{ - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - step /= sizeof(dst[0]); - - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int i = 0; - #if CV_ENABLE_UNROLLED - for( ; i <= size.width - 4; i += 4 ) - { - if( src2[i] != 0 && src2[i+1] != 0 && src2[i+2] != 0 && src2[i+3] != 0 ) - { - double a = (double)src2[i] * src2[i+1]; - double b = (double)src2[i+2] * src2[i+3]; - double d = scale/(a * b); - b *= d; - a *= d; - - T z0 = saturate_cast(src2[i+1] * ((double)src1[i] * b)); - T z1 = saturate_cast(src2[i] * ((double)src1[i+1] * b)); - T z2 = saturate_cast(src2[i+3] * ((double)src1[i+2] * a)); - T z3 = saturate_cast(src2[i+2] * ((double)src1[i+3] * a)); - - dst[i] = z0; dst[i+1] = z1; - dst[i+2] = z2; dst[i+3] = z3; - } - else - { - T z0 = src2[i] != 0 ? saturate_cast(src1[i]*scale/src2[i]) : 0; - T z1 = src2[i+1] != 0 ? saturate_cast(src1[i+1]*scale/src2[i+1]) : 0; - T z2 = src2[i+2] != 0 ? saturate_cast(src1[i+2]*scale/src2[i+2]) : 0; - T z3 = src2[i+3] != 0 ? saturate_cast(src1[i+3]*scale/src2[i+3]) : 0; - - dst[i] = z0; dst[i+1] = z1; - dst[i+2] = z2; dst[i+3] = z3; - } - } - #endif - for( ; i < size.width; i++ ) - dst[i] = src2[i] != 0 ? saturate_cast(src1[i]*scale/src2[i]) : 0; - } -} - -template static void -recip_( const T*, size_t, const T* src2, size_t step2, - T* dst, size_t step, Size size, double scale ) -{ - step2 /= sizeof(src2[0]); - step /= sizeof(dst[0]); - - for( ; size.height--; src2 += step2, dst += step ) - { - int i = 0; - #if CV_ENABLE_UNROLLED - for( ; i <= size.width - 4; i += 4 ) - { - if( src2[i] != 0 && src2[i+1] != 0 && src2[i+2] != 0 && src2[i+3] != 0 ) - { - double a = (double)src2[i] * src2[i+1]; - double b = (double)src2[i+2] * src2[i+3]; - double d = scale/(a * b); - b *= d; - a *= d; - - T z0 = saturate_cast(src2[i+1] * b); - T z1 = saturate_cast(src2[i] * b); - T z2 = saturate_cast(src2[i+3] * a); - T z3 = saturate_cast(src2[i+2] * a); - - dst[i] = z0; dst[i+1] = z1; - dst[i+2] = z2; dst[i+3] = z3; - } - else - { - T z0 = src2[i] != 0 ? saturate_cast(scale/src2[i]) : 0; - T z1 = src2[i+1] != 0 ? saturate_cast(scale/src2[i+1]) : 0; - T z2 = src2[i+2] != 0 ? saturate_cast(scale/src2[i+2]) : 0; - T z3 = src2[i+3] != 0 ? saturate_cast(scale/src2[i+3]) : 0; - - dst[i] = z0; dst[i+1] = z1; - dst[i+2] = z2; dst[i+3] = z3; - } - } - #endif - for( ; i < size.width; i++ ) - dst[i] = src2[i] != 0 ? saturate_cast(scale/src2[i]) : 0; - } -} - - -static void mul8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, (float)*(const double*)scale); -} - -static void mul8s( const schar* src1, size_t step1, const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, (float)*(const double*)scale); -} - -static void mul16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, (float)*(const double*)scale); -} - -static void mul16s( const short* src1, size_t step1, const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, (float)*(const double*)scale); -} - -static void mul32s( const int* src1, size_t step1, const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void mul32f( const float* src1, size_t step1, const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, (float)*(const double*)scale); -} - -static void mul64f( const double* src1, size_t step1, const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* scale) -{ - mul_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* scale) -{ - if( src1 ) - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); - else - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div8s( const schar* src1, size_t step1, const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div16s( const short* src1, size_t step1, const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div32s( const int* src1, size_t step1, const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div32f( const float* src1, size_t step1, const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void div64f( const double* src1, size_t step1, const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* scale) -{ - div_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip8u( const uchar* src1, size_t step1, const uchar* src2, size_t step2, - uchar* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip8s( const schar* src1, size_t step1, const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip16s( const short* src1, size_t step1, const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip32s( const int* src1, size_t step1, const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip32f( const float* src1, size_t step1, const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - -static void recip64f( const double* src1, size_t step1, const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* scale) -{ - recip_(src1, step1, src2, step2, dst, step, sz, *(const double*)scale); -} - - -static BinaryFunc* getMulTab() -{ - static BinaryFunc mulTab[] = - { - (BinaryFunc)mul8u, (BinaryFunc)mul8s, (BinaryFunc)mul16u, - (BinaryFunc)mul16s, (BinaryFunc)mul32s, (BinaryFunc)mul32f, - (BinaryFunc)mul64f, 0 - }; - - return mulTab; -} - -static BinaryFunc* getDivTab() -{ - static BinaryFunc divTab[] = - { - (BinaryFunc)div8u, (BinaryFunc)div8s, (BinaryFunc)div16u, - (BinaryFunc)div16s, (BinaryFunc)div32s, (BinaryFunc)div32f, - (BinaryFunc)div64f, 0 - }; - - return divTab; -} - -static BinaryFunc* getRecipTab() -{ - static BinaryFunc recipTab[] = - { - (BinaryFunc)recip8u, (BinaryFunc)recip8s, (BinaryFunc)recip16u, - (BinaryFunc)recip16s, (BinaryFunc)recip32s, (BinaryFunc)recip32f, - (BinaryFunc)recip64f, 0 - }; - - return recipTab; -} - -} - -void cv::multiply(InputArray src1, InputArray src2, - OutputArray dst, double scale, int dtype) -{ - arithm_op(src1, src2, dst, noArray(), dtype, getMulTab(), true, &scale); -} - -void cv::divide(InputArray src1, InputArray src2, - OutputArray dst, double scale, int dtype) -{ - arithm_op(src1, src2, dst, noArray(), dtype, getDivTab(), true, &scale); -} - -void cv::divide(double scale, InputArray src2, - OutputArray dst, int dtype) -{ - arithm_op(src2, src2, dst, noArray(), dtype, getRecipTab(), true, &scale); -} - -/****************************************************************************************\ -* addWeighted * -\****************************************************************************************/ - -namespace cv -{ - -template static void -addWeighted_( const T* src1, size_t step1, const T* src2, size_t step2, - T* dst, size_t step, Size size, void* _scalars ) -{ - const double* scalars = (const double*)_scalars; - WT alpha = (WT)scalars[0], beta = (WT)scalars[1], gamma = (WT)scalars[2]; - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - step /= sizeof(dst[0]); - - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - T t0 = saturate_cast(src1[x]*alpha + src2[x]*beta + gamma); - T t1 = saturate_cast(src1[x+1]*alpha + src2[x+1]*beta + gamma); - dst[x] = t0; dst[x+1] = t1; - - t0 = saturate_cast(src1[x+2]*alpha + src2[x+2]*beta + gamma); - t1 = saturate_cast(src1[x+3]*alpha + src2[x+3]*beta + gamma); - dst[x+2] = t0; dst[x+3] = t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = saturate_cast(src1[x]*alpha + src2[x]*beta + gamma); - } -} - - -static void -addWeighted8u( const uchar* src1, size_t step1, - const uchar* src2, size_t step2, - uchar* dst, size_t step, Size size, - void* _scalars ) -{ - const double* scalars = (const double*)_scalars; - float alpha = (float)scalars[0], beta = (float)scalars[1], gamma = (float)scalars[2]; - - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - -#if CV_SSE2 - if( USE_SSE2 ) - { - __m128 a4 = _mm_set1_ps(alpha), b4 = _mm_set1_ps(beta), g4 = _mm_set1_ps(gamma); - __m128i z = _mm_setzero_si128(); - - for( ; x <= size.width - 8; x += 8 ) - { - __m128i u = _mm_unpacklo_epi8(_mm_loadl_epi64((const __m128i*)(src1 + x)), z); - __m128i v = _mm_unpacklo_epi8(_mm_loadl_epi64((const __m128i*)(src2 + x)), z); - - __m128 u0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(u, z)); - __m128 u1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(u, z)); - __m128 v0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(v, z)); - __m128 v1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(v, z)); - - u0 = _mm_add_ps(_mm_mul_ps(u0, a4), _mm_mul_ps(v0, b4)); - u1 = _mm_add_ps(_mm_mul_ps(u1, a4), _mm_mul_ps(v1, b4)); - u0 = _mm_add_ps(u0, g4); u1 = _mm_add_ps(u1, g4); - - u = _mm_packs_epi32(_mm_cvtps_epi32(u0), _mm_cvtps_epi32(u1)); - u = _mm_packus_epi16(u, u); - - _mm_storel_epi64((__m128i*)(dst + x), u); - } - } -#endif - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - float t0, t1; - t0 = CV_8TO32F(src1[x])*alpha + CV_8TO32F(src2[x])*beta + gamma; - t1 = CV_8TO32F(src1[x+1])*alpha + CV_8TO32F(src2[x+1])*beta + gamma; - - dst[x] = saturate_cast(t0); - dst[x+1] = saturate_cast(t1); - - t0 = CV_8TO32F(src1[x+2])*alpha + CV_8TO32F(src2[x+2])*beta + gamma; - t1 = CV_8TO32F(src1[x+3])*alpha + CV_8TO32F(src2[x+3])*beta + gamma; - - dst[x+2] = saturate_cast(t0); - dst[x+3] = saturate_cast(t1); - } - #endif - - for( ; x < size.width; x++ ) - { - float t0 = CV_8TO32F(src1[x])*alpha + CV_8TO32F(src2[x])*beta + gamma; - dst[x] = saturate_cast(t0); - } - } -} - -static void addWeighted8s( const schar* src1, size_t step1, const schar* src2, size_t step2, - schar* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static void addWeighted16u( const ushort* src1, size_t step1, const ushort* src2, size_t step2, - ushort* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static void addWeighted16s( const short* src1, size_t step1, const short* src2, size_t step2, - short* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static void addWeighted32s( const int* src1, size_t step1, const int* src2, size_t step2, - int* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static void addWeighted32f( const float* src1, size_t step1, const float* src2, size_t step2, - float* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static void addWeighted64f( const double* src1, size_t step1, const double* src2, size_t step2, - double* dst, size_t step, Size sz, void* scalars ) -{ - addWeighted_(src1, step1, src2, step2, dst, step, sz, scalars); -} - -static BinaryFunc* getAddWeightedTab() -{ - static BinaryFunc addWeightedTab[] = - { - (BinaryFunc)GET_OPTIMIZED(addWeighted8u), (BinaryFunc)GET_OPTIMIZED(addWeighted8s), (BinaryFunc)GET_OPTIMIZED(addWeighted16u), - (BinaryFunc)GET_OPTIMIZED(addWeighted16s), (BinaryFunc)GET_OPTIMIZED(addWeighted32s), (BinaryFunc)addWeighted32f, - (BinaryFunc)addWeighted64f, 0 - }; - - return addWeightedTab; -} - -} - -void cv::addWeighted( InputArray src1, double alpha, InputArray src2, - double beta, double gamma, OutputArray dst, int dtype ) -{ - double scalars[] = {alpha, beta, gamma}; - arithm_op(src1, src2, dst, noArray(), dtype, getAddWeightedTab(), true, scalars); -} - - -/****************************************************************************************\ -* compare * -\****************************************************************************************/ - -namespace cv -{ - -template static void -cmp_(const T* src1, size_t step1, const T* src2, size_t step2, - uchar* dst, size_t step, Size size, int code) -{ - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - if( code == CMP_GE || code == CMP_LT ) - { - std::swap(src1, src2); - std::swap(step1, step2); - code = code == CMP_GE ? CMP_LE : CMP_GT; - } - - if( code == CMP_GT || code == CMP_LE ) - { - int m = code == CMP_GT ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - int t0, t1; - t0 = -(src1[x] > src2[x]) ^ m; - t1 = -(src1[x+1] > src2[x+1]) ^ m; - dst[x] = (uchar)t0; dst[x+1] = (uchar)t1; - t0 = -(src1[x+2] > src2[x+2]) ^ m; - t1 = -(src1[x+3] > src2[x+3]) ^ m; - dst[x+2] = (uchar)t0; dst[x+3] = (uchar)t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = (uchar)(-(src1[x] > src2[x]) ^ m); - } - } - else if( code == CMP_EQ || code == CMP_NE ) - { - int m = code == CMP_EQ ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - int t0, t1; - t0 = -(src1[x] == src2[x]) ^ m; - t1 = -(src1[x+1] == src2[x+1]) ^ m; - dst[x] = (uchar)t0; dst[x+1] = (uchar)t1; - t0 = -(src1[x+2] == src2[x+2]) ^ m; - t1 = -(src1[x+3] == src2[x+3]) ^ m; - dst[x+2] = (uchar)t0; dst[x+3] = (uchar)t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = (uchar)(-(src1[x] == src2[x]) ^ m); - } - } -} - -#if ARITHM_USE_IPP -inline static IppCmpOp convert_cmp(int _cmpop) -{ - return _cmpop == CMP_EQ ? ippCmpEq : - _cmpop == CMP_GT ? ippCmpGreater : - _cmpop == CMP_GE ? ippCmpGreaterEq : - _cmpop == CMP_LT ? ippCmpLess : - _cmpop == CMP_LE ? ippCmpLessEq : - (IppCmpOp)-1; -} -#endif - -static void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ -#if ARITHM_USE_IPP - IppCmpOp op = convert_cmp(*(int *)_cmpop); - if( op >= 0 ) - { - fixSteps(size, sizeof(dst[0]), step1, step2, step); - if( ippiCompare_8u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)size, op) >= 0 ) - return; - } -#endif - //vz optimized cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); - int code = *(int*)_cmpop; - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - if( code == CMP_GE || code == CMP_LT ) - { - std::swap(src1, src2); - std::swap(step1, step2); - code = code == CMP_GE ? CMP_LE : CMP_GT; - } - - if( code == CMP_GT || code == CMP_LE ) - { - int m = code == CMP_GT ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x =0; - #if CV_SSE2 - if( USE_SSE2 ){ - __m128i m128 = code == CMP_GT ? _mm_setzero_si128() : _mm_set1_epi8 (-1); - __m128i c128 = _mm_set1_epi8 (-128); - for( ; x <= size.width - 16; x += 16 ) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - // no simd for 8u comparison, that's why we need the trick - r00 = _mm_sub_epi8(r00,c128); - r10 = _mm_sub_epi8(r10,c128); - - r00 =_mm_xor_si128(_mm_cmpgt_epi8(r00, r10), m128); - _mm_storeu_si128((__m128i*)(dst + x),r00); - - } - } - #endif - - for( ; x < size.width; x++ ){ - dst[x] = (uchar)(-(src1[x] > src2[x]) ^ m); - } - } - } - else if( code == CMP_EQ || code == CMP_NE ) - { - int m = code == CMP_EQ ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - #if CV_SSE2 - if( USE_SSE2 ){ - __m128i m128 = code == CMP_EQ ? _mm_setzero_si128() : _mm_set1_epi8 (-1); - for( ; x <= size.width - 16; x += 16 ) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - r00 = _mm_xor_si128 ( _mm_cmpeq_epi8 (r00, r10), m128); - _mm_storeu_si128((__m128i*)(dst + x), r00); - } - } - #endif - for( ; x < size.width; x++ ) - dst[x] = (uchar)(-(src1[x] == src2[x]) ^ m); - } - } -} - -static void cmp8s(const schar* src1, size_t step1, const schar* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ - cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); -} - -static void cmp16u(const ushort* src1, size_t step1, const ushort* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ -#if ARITHM_USE_IPP - IppCmpOp op = convert_cmp(*(int *)_cmpop); - if( op >= 0 ) - { - fixSteps(size, sizeof(dst[0]), step1, step2, step); - if( ippiCompare_16u_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)size, op) >= 0 ) - return; - } -#endif - cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); -} - -static void cmp16s(const short* src1, size_t step1, const short* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ -#if ARITHM_USE_IPP - IppCmpOp op = convert_cmp(*(int *)_cmpop); - if( op > 0 ) - { - fixSteps(size, sizeof(dst[0]), step1, step2, step); - if( ippiCompare_16s_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)size, op) >= 0 ) - return; - } -#endif - //vz optimized cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); - - int code = *(int*)_cmpop; - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - if( code == CMP_GE || code == CMP_LT ) - { - std::swap(src1, src2); - std::swap(step1, step2); - code = code == CMP_GE ? CMP_LE : CMP_GT; - } - - if( code == CMP_GT || code == CMP_LE ) - { - int m = code == CMP_GT ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x =0; - #if CV_SSE2 - if( USE_SSE2){// - __m128i m128 = code == CMP_GT ? _mm_setzero_si128() : _mm_set1_epi16 (-1); - for( ; x <= size.width - 16; x += 16 ) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - r00 = _mm_xor_si128 ( _mm_cmpgt_epi16 (r00, r10), m128); - __m128i r01 = _mm_loadu_si128((const __m128i*)(src1 + x + 8)); - __m128i r11 = _mm_loadu_si128((const __m128i*)(src2 + x + 8)); - r01 = _mm_xor_si128 ( _mm_cmpgt_epi16 (r01, r11), m128); - r11 = _mm_packs_epi16(r00, r01); - _mm_storeu_si128((__m128i*)(dst + x), r11); - } - if( x <= size.width-8) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - r00 = _mm_xor_si128 ( _mm_cmpgt_epi16 (r00, r10), m128); - r10 = _mm_packs_epi16(r00, r00); - _mm_storel_epi64((__m128i*)(dst + x), r10); - - x += 8; - } - } - #endif - - for( ; x < size.width; x++ ){ - dst[x] = (uchar)(-(src1[x] > src2[x]) ^ m); - } - } - } - else if( code == CMP_EQ || code == CMP_NE ) - { - int m = code == CMP_EQ ? 0 : 255; - for( ; size.height--; src1 += step1, src2 += step2, dst += step ) - { - int x = 0; - #if CV_SSE2 - if( USE_SSE2 ){ - __m128i m128 = code == CMP_EQ ? _mm_setzero_si128() : _mm_set1_epi16 (-1); - for( ; x <= size.width - 16; x += 16 ) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - r00 = _mm_xor_si128 ( _mm_cmpeq_epi16 (r00, r10), m128); - __m128i r01 = _mm_loadu_si128((const __m128i*)(src1 + x + 8)); - __m128i r11 = _mm_loadu_si128((const __m128i*)(src2 + x + 8)); - r01 = _mm_xor_si128 ( _mm_cmpeq_epi16 (r01, r11), m128); - r11 = _mm_packs_epi16(r00, r01); - _mm_storeu_si128((__m128i*)(dst + x), r11); - } - if( x <= size.width - 8) - { - __m128i r00 = _mm_loadu_si128((const __m128i*)(src1 + x)); - __m128i r10 = _mm_loadu_si128((const __m128i*)(src2 + x)); - r00 = _mm_xor_si128 ( _mm_cmpeq_epi16 (r00, r10), m128); - r10 = _mm_packs_epi16(r00, r00); - _mm_storel_epi64((__m128i*)(dst + x), r10); - - x += 8; - } - } - #endif - for( ; x < size.width; x++ ) - dst[x] = (uchar)(-(src1[x] == src2[x]) ^ m); - } - } -} - -static void cmp32s(const int* src1, size_t step1, const int* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ - cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); -} - -static void cmp32f(const float* src1, size_t step1, const float* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ -#if ARITHM_USE_IPP - IppCmpOp op = convert_cmp(*(int *)_cmpop); - if( op >= 0 ) - { - fixSteps(size, sizeof(dst[0]), step1, step2, step); - if( ippiCompare_32f_C1R(src1, (int)step1, src2, (int)step2, dst, (int)step, (IppiSize&)size, op) >= 0 ) - return; - } -#endif - cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); -} - -static void cmp64f(const double* src1, size_t step1, const double* src2, size_t step2, - uchar* dst, size_t step, Size size, void* _cmpop) -{ - cmp_(src1, step1, src2, step2, dst, step, size, *(int*)_cmpop); -} - -static BinaryFunc getCmpFunc(int depth) -{ - static BinaryFunc cmpTab[] = - { - (BinaryFunc)GET_OPTIMIZED(cmp8u), (BinaryFunc)GET_OPTIMIZED(cmp8s), - (BinaryFunc)GET_OPTIMIZED(cmp16u), (BinaryFunc)GET_OPTIMIZED(cmp16s), - (BinaryFunc)GET_OPTIMIZED(cmp32s), - (BinaryFunc)GET_OPTIMIZED(cmp32f), (BinaryFunc)cmp64f, - 0 - }; - - return cmpTab[depth]; -} - -static double getMinVal(int depth) -{ - static const double tab[] = {0, -128, 0, -32768, INT_MIN, -FLT_MAX, -DBL_MAX, 0}; - return tab[depth]; -} - -static double getMaxVal(int depth) -{ - static const double tab[] = {255, 127, 65535, 32767, INT_MAX, FLT_MAX, DBL_MAX, 0}; - return tab[depth]; -} - -} - -void cv::compare(InputArray _src1, InputArray _src2, OutputArray _dst, int op) -{ - CV_Assert( op == CMP_LT || op == CMP_LE || op == CMP_EQ || - op == CMP_NE || op == CMP_GE || op == CMP_GT ); - - int kind1 = _src1.kind(), kind2 = _src2.kind(); - Mat src1 = _src1.getMat(), src2 = _src2.getMat(); - - if( kind1 == kind2 && src1.dims <= 2 && src2.dims <= 2 && src1.size() == src2.size() && src1.type() == src2.type() ) - { - int cn = src1.channels(); - _dst.create(src1.size(), CV_8UC(cn)); - Mat dst = _dst.getMat(); - Size sz = getContinuousSize(src1, src2, dst, src1.channels()); - getCmpFunc(src1.depth())(src1.data, src1.step, src2.data, src2.step, dst.data, dst.step, sz, &op); - return; - } - - bool haveScalar = false; - - if( (kind1 == _InputArray::MATX) + (kind2 == _InputArray::MATX) == 1 || - src1.size != src2.size || src1.type() != src2.type() ) - { - if( checkScalar(src1, src2.type(), kind1, kind2) ) - { - // src1 is a scalar; swap it with src2 - swap(src1, src2); - op = op == CMP_LT ? CMP_GT : op == CMP_LE ? CMP_GE : - op == CMP_GE ? CMP_LE : op == CMP_GT ? CMP_LT : op; - } - else if( !checkScalar(src2, src1.type(), kind2, kind1) ) - CV_Error( CV_StsUnmatchedSizes, - "The operation is neither 'array op array' (where arrays have the same size and the same type), " - "nor 'array op scalar', nor 'scalar op array'" ); - haveScalar = true; - } - - - int cn = src1.channels(), depth1 = src1.depth(), depth2 = src2.depth(); - - _dst.create(src1.dims, src1.size, CV_8UC(cn)); - src1 = src1.reshape(1); src2 = src2.reshape(1); - Mat dst = _dst.getMat().reshape(1); - - size_t esz = src1.elemSize(); - size_t blocksize0 = (size_t)(BLOCK_SIZE + esz-1)/esz; - BinaryFunc func = getCmpFunc(depth1); - - if( !haveScalar ) - { - const Mat* arrays[] = { &src1, &src2, &dst, 0 }; - uchar* ptrs[3]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], 0, ptrs[1], 0, ptrs[2], 0, Size((int)total, 1), &op ); - } - else - { - const Mat* arrays[] = { &src1, &dst, 0 }; - uchar* ptrs[2]; - - NAryMatIterator it(arrays, ptrs); - size_t total = it.size, blocksize = std::min(total, blocksize0); - - AutoBuffer _buf(blocksize*esz); - uchar *buf = _buf; - - if( depth1 > CV_32S ) - convertAndUnrollScalar( src2, depth1, buf, blocksize ); - else - { - double fval=0; - getConvertFunc(depth2, CV_64F)(src2.data, 0, 0, 0, (uchar*)&fval, 0, Size(1,1), 0); - if( fval < getMinVal(depth1) ) - { - dst = Scalar::all(op == CMP_GT || op == CMP_GE || op == CMP_NE ? 255 : 0); - return; - } - - if( fval > getMaxVal(depth1) ) - { - dst = Scalar::all(op == CMP_LT || op == CMP_LE || op == CMP_NE ? 255 : 0); - return; - } - - int ival = cvRound(fval); - if( fval != ival ) - { - if( op == CMP_LT || op == CMP_GE ) - ival = cvCeil(fval); - else if( op == CMP_LE || op == CMP_GT ) - ival = cvFloor(fval); - else - { - dst = Scalar::all(op == CMP_NE ? 255 : 0); - return; - } - } - convertAndUnrollScalar(Mat(1, 1, CV_32S, &ival), depth1, buf, blocksize); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - func( ptrs[0], 0, buf, 0, ptrs[1], 0, Size(bsz, 1), &op); - ptrs[0] += bsz*esz; - ptrs[1] += bsz; - } - } - } -} - -/****************************************************************************************\ -* inRange * -\****************************************************************************************/ - -namespace cv -{ - -template static void -inRange_(const T* src1, size_t step1, const T* src2, size_t step2, - const T* src3, size_t step3, uchar* dst, size_t step, - Size size) -{ - step1 /= sizeof(src1[0]); - step2 /= sizeof(src2[0]); - step3 /= sizeof(src3[0]); - - for( ; size.height--; src1 += step1, src2 += step2, src3 += step3, dst += step ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - int t0, t1; - t0 = src2[x] <= src1[x] && src1[x] <= src3[x]; - t1 = src2[x+1] <= src1[x+1] && src1[x+1] <= src3[x+1]; - dst[x] = (uchar)-t0; dst[x+1] = (uchar)-t1; - t0 = src2[x+2] <= src1[x+2] && src1[x+2] <= src3[x+2]; - t1 = src2[x+3] <= src1[x+3] && src1[x+3] <= src3[x+3]; - dst[x+2] = (uchar)-t0; dst[x+3] = (uchar)-t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = (uchar)-(src2[x] <= src1[x] && src1[x] <= src3[x]); - } -} - - -static void inRange8u(const uchar* src1, size_t step1, const uchar* src2, size_t step2, - const uchar* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange8s(const schar* src1, size_t step1, const schar* src2, size_t step2, - const schar* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange16u(const ushort* src1, size_t step1, const ushort* src2, size_t step2, - const ushort* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange16s(const short* src1, size_t step1, const short* src2, size_t step2, - const short* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange32s(const int* src1, size_t step1, const int* src2, size_t step2, - const int* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange32f(const float* src1, size_t step1, const float* src2, size_t step2, - const float* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRange64f(const double* src1, size_t step1, const double* src2, size_t step2, - const double* src3, size_t step3, uchar* dst, size_t step, Size size) -{ - inRange_(src1, step1, src2, step2, src3, step3, dst, step, size); -} - -static void inRangeReduce(const uchar* src, uchar* dst, size_t len, int cn) -{ - int k = cn % 4 ? cn % 4 : 4; - size_t i, j; - if( k == 1 ) - for( i = j = 0; i < len; i++, j += cn ) - dst[i] = src[j]; - else if( k == 2 ) - for( i = j = 0; i < len; i++, j += cn ) - dst[i] = src[j] & src[j+1]; - else if( k == 3 ) - for( i = j = 0; i < len; i++, j += cn ) - dst[i] = src[j] & src[j+1] & src[j+2]; - else - for( i = j = 0; i < len; i++, j += cn ) - dst[i] = src[j] & src[j+1] & src[j+2] & src[j+3]; - - for( ; k < cn; k += 4 ) - { - for( i = 0, j = k; i < len; i++, j += cn ) - dst[i] &= src[j] & src[j+1] & src[j+2] & src[j+3]; - } -} - -typedef void (*InRangeFunc)( const uchar* src1, size_t step1, const uchar* src2, size_t step2, - const uchar* src3, size_t step3, uchar* dst, size_t step, Size sz ); - -static InRangeFunc getInRangeFunc(int depth) -{ - static InRangeFunc inRangeTab[] = - { - (InRangeFunc)GET_OPTIMIZED(inRange8u), (InRangeFunc)GET_OPTIMIZED(inRange8s), (InRangeFunc)GET_OPTIMIZED(inRange16u), - (InRangeFunc)GET_OPTIMIZED(inRange16s), (InRangeFunc)GET_OPTIMIZED(inRange32s), (InRangeFunc)GET_OPTIMIZED(inRange32f), - (InRangeFunc)inRange64f, 0 - }; - - return inRangeTab[depth]; -} - -} - -void cv::inRange(InputArray _src, InputArray _lowerb, - InputArray _upperb, OutputArray _dst) -{ - int skind = _src.kind(), lkind = _lowerb.kind(), ukind = _upperb.kind(); - Mat src = _src.getMat(), lb = _lowerb.getMat(), ub = _upperb.getMat(); - - bool lbScalar = false, ubScalar = false; - - if( (lkind == _InputArray::MATX && skind != _InputArray::MATX) || - src.size != lb.size || src.type() != lb.type() ) - { - if( !checkScalar(lb, src.type(), lkind, skind) ) - CV_Error( CV_StsUnmatchedSizes, - "The lower bounary is neither an array of the same size and same type as src, nor a scalar"); - lbScalar = true; - } - - if( (ukind == _InputArray::MATX && skind != _InputArray::MATX) || - src.size != ub.size || src.type() != ub.type() ) - { - if( !checkScalar(ub, src.type(), ukind, skind) ) - CV_Error( CV_StsUnmatchedSizes, - "The upper bounary is neither an array of the same size and same type as src, nor a scalar"); - ubScalar = true; - } - - CV_Assert( ((int)lbScalar ^ (int)ubScalar) == 0 ); - - int cn = src.channels(), depth = src.depth(); - - size_t esz = src.elemSize(); - size_t blocksize0 = (size_t)(BLOCK_SIZE + esz-1)/esz; - - _dst.create(src.dims, src.size, CV_8U); - Mat dst = _dst.getMat(); - InRangeFunc func = getInRangeFunc(depth); - - const Mat* arrays_sc[] = { &src, &dst, 0 }; - const Mat* arrays_nosc[] = { &src, &dst, &lb, &ub, 0 }; - uchar* ptrs[4]; - - NAryMatIterator it(lbScalar && ubScalar ? arrays_sc : arrays_nosc, ptrs); - size_t total = it.size, blocksize = std::min(total, blocksize0); - - AutoBuffer _buf(blocksize*(((int)lbScalar + (int)ubScalar)*esz + cn) + 2*cn*sizeof(int) + 128); - uchar *buf = _buf, *mbuf = buf, *lbuf = 0, *ubuf = 0; - buf = alignPtr(buf + blocksize*cn, 16); - - if( lbScalar && ubScalar ) - { - lbuf = buf; - ubuf = buf = alignPtr(buf + blocksize*esz, 16); - - CV_Assert( lb.type() == ub.type() ); - int scdepth = lb.depth(); - - if( scdepth != depth && depth < CV_32S ) - { - int* ilbuf = (int*)alignPtr(buf + blocksize*esz, 16); - int* iubuf = ilbuf + cn; - - BinaryFunc sccvtfunc = getConvertFunc(scdepth, CV_32S); - sccvtfunc(lb.data, 0, 0, 0, (uchar*)ilbuf, 0, Size(cn, 1), 0); - sccvtfunc(ub.data, 0, 0, 0, (uchar*)iubuf, 0, Size(cn, 1), 0); - int minval = cvRound(getMinVal(depth)), maxval = cvRound(getMaxVal(depth)); - - for( int k = 0; k < cn; k++ ) - { - if( ilbuf[k] > iubuf[k] || ilbuf[k] > maxval || iubuf[k] < minval ) - ilbuf[k] = minval+1, iubuf[k] = minval; - } - lb = Mat(cn, 1, CV_32S, ilbuf); - ub = Mat(cn, 1, CV_32S, iubuf); - } - - convertAndUnrollScalar( lb, src.type(), lbuf, blocksize ); - convertAndUnrollScalar( ub, src.type(), ubuf, blocksize ); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( size_t j = 0; j < total; j += blocksize ) - { - int bsz = (int)MIN(total - j, blocksize); - size_t delta = bsz*esz; - uchar *lptr = lbuf, *uptr = ubuf; - if( !lbScalar ) - { - lptr = ptrs[2]; - ptrs[2] += delta; - } - if( !ubScalar ) - { - int idx = !lbScalar ? 3 : 2; - uptr = ptrs[idx]; - ptrs[idx] += delta; - } - func( ptrs[0], 0, lptr, 0, uptr, 0, cn == 1 ? ptrs[1] : mbuf, 0, Size(bsz*cn, 1)); - if( cn > 1 ) - inRangeReduce(mbuf, ptrs[1], bsz, cn); - ptrs[0] += delta; - ptrs[1] += bsz; - } - } -} - -/****************************************************************************************\ -* Earlier API: cvAdd etc. * -\****************************************************************************************/ - -CV_IMPL void -cvNot( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - cv::bitwise_not( src, dst ); -} - - -CV_IMPL void -cvAnd( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_and( src1, src2, dst, mask ); -} - - -CV_IMPL void -cvOr( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_or( src1, src2, dst, mask ); -} - - -CV_IMPL void -cvXor( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_xor( src1, src2, dst, mask ); -} - - -CV_IMPL void -cvAndS( const CvArr* srcarr, CvScalar s, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_and( src, (const cv::Scalar&)s, dst, mask ); -} - - -CV_IMPL void -cvOrS( const CvArr* srcarr, CvScalar s, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_or( src, (const cv::Scalar&)s, dst, mask ); -} - - -CV_IMPL void -cvXorS( const CvArr* srcarr, CvScalar s, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::bitwise_xor( src, (const cv::Scalar&)s, dst, mask ); -} - - -CV_IMPL void cvAdd( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::add( src1, src2, dst, mask, dst.type() ); -} - - -CV_IMPL void cvSub( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::subtract( src1, src2, dst, mask, dst.type() ); -} - - -CV_IMPL void cvAddS( const CvArr* srcarr1, CvScalar value, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::add( src1, (const cv::Scalar&)value, dst, mask, dst.type() ); -} - - -CV_IMPL void cvSubRS( const CvArr* srcarr1, CvScalar value, CvArr* dstarr, const CvArr* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::subtract( (const cv::Scalar&)value, src1, dst, mask, dst.type() ); -} - - -CV_IMPL void cvMul( const CvArr* srcarr1, const CvArr* srcarr2, - CvArr* dstarr, double scale ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - cv::multiply( src1, src2, dst, scale, dst.type() ); -} - - -CV_IMPL void cvDiv( const CvArr* srcarr1, const CvArr* srcarr2, - CvArr* dstarr, double scale ) -{ - cv::Mat src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr), mask; - CV_Assert( src2.size == dst.size && src2.channels() == dst.channels() ); - - if( srcarr1 ) - cv::divide( cv::cvarrToMat(srcarr1), src2, dst, scale, dst.type() ); - else - cv::divide( scale, src2, dst, dst.type() ); -} - - -CV_IMPL void -cvAddWeighted( const CvArr* srcarr1, double alpha, - const CvArr* srcarr2, double beta, - double gamma, CvArr* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), src2 = cv::cvarrToMat(srcarr2), - dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() ); - cv::addWeighted( src1, alpha, src2, beta, gamma, dst, dst.type() ); -} - - -CV_IMPL void -cvAbsDiff( const CvArr* srcarr1, const CvArr* srcarr2, CvArr* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::absdiff( src1, cv::cvarrToMat(srcarr2), dst ); -} - - -CV_IMPL void -cvAbsDiffS( const CvArr* srcarr1, CvArr* dstarr, CvScalar scalar ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::absdiff( src1, (const cv::Scalar&)scalar, dst ); -} - - -CV_IMPL void -cvInRange( const void* srcarr1, const void* srcarr2, - const void* srcarr3, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && dst.type() == CV_8U ); - - cv::inRange( src1, cv::cvarrToMat(srcarr2), cv::cvarrToMat(srcarr3), dst ); -} - - -CV_IMPL void -cvInRangeS( const void* srcarr1, CvScalar lowerb, CvScalar upperb, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && dst.type() == CV_8U ); - - cv::inRange( src1, (const cv::Scalar&)lowerb, (const cv::Scalar&)upperb, dst ); -} - - -CV_IMPL void -cvCmp( const void* srcarr1, const void* srcarr2, void* dstarr, int cmp_op ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && dst.type() == CV_8U ); - - cv::compare( src1, cv::cvarrToMat(srcarr2), dst, cmp_op ); -} - - -CV_IMPL void -cvCmpS( const void* srcarr1, double value, void* dstarr, int cmp_op ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && dst.type() == CV_8U ); - - cv::compare( src1, value, dst, cmp_op ); -} - - -CV_IMPL void -cvMin( const void* srcarr1, const void* srcarr2, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::min( src1, cv::cvarrToMat(srcarr2), dst ); -} - - -CV_IMPL void -cvMax( const void* srcarr1, const void* srcarr2, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::max( src1, cv::cvarrToMat(srcarr2), dst ); -} - - -CV_IMPL void -cvMinS( const void* srcarr1, double value, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::min( src1, value, dst ); -} - - -CV_IMPL void -cvMaxS( const void* srcarr1, double value, void* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - - cv::max( src1, value, dst ); -} - -/* End of file. */ diff --git a/modules/core/src/array.cpp b/modules/core/src/array.cpp deleted file mode 100644 index a35ad0e..0000000 --- a/modules/core/src/array.cpp +++ /dev/null @@ -1,3206 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// CvMat, CvMatND, CvSparceMat and IplImage support functions -// (creation, deletion, copying, retrieving and setting elements etc.) -// -// */ - -#include "precomp.hpp" - - -static struct -{ - Cv_iplCreateImageHeader createHeader; - Cv_iplAllocateImageData allocateData; - Cv_iplDeallocate deallocate; - Cv_iplCreateROI createROI; - Cv_iplCloneImage cloneImage; -} -CvIPL; - -// Makes the library use native IPL image allocators -CV_IMPL void -cvSetIPLAllocators( Cv_iplCreateImageHeader createHeader, - Cv_iplAllocateImageData allocateData, - Cv_iplDeallocate deallocate, - Cv_iplCreateROI createROI, - Cv_iplCloneImage cloneImage ) -{ - int count = (createHeader != 0) + (allocateData != 0) + (deallocate != 0) + - (createROI != 0) + (cloneImage != 0); - - if( count != 0 && count != 5 ) - CV_Error( CV_StsBadArg, "Either all the pointers should be null or " - "they all should be non-null" ); - - CvIPL.createHeader = createHeader; - CvIPL.allocateData = allocateData; - CvIPL.deallocate = deallocate; - CvIPL.createROI = createROI; - CvIPL.cloneImage = cloneImage; -} - - -/****************************************************************************************\ -* CvMat creation and basic operations * -\****************************************************************************************/ - -// Creates CvMat and underlying data -CV_IMPL CvMat* -cvCreateMat( int height, int width, int type ) -{ - CvMat* arr = cvCreateMatHeader( height, width, type ); - cvCreateData( arr ); - - return arr; -} - - -static void icvCheckHuge( CvMat* arr ) -{ - if( (int64)arr->step*arr->rows > INT_MAX ) - arr->type &= ~CV_MAT_CONT_FLAG; -} - -// Creates CvMat header only -CV_IMPL CvMat* -cvCreateMatHeader( int rows, int cols, int type ) -{ - type = CV_MAT_TYPE(type); - - if( rows < 0 || cols <= 0 ) - CV_Error( CV_StsBadSize, "Non-positive width or height" ); - - int min_step = CV_ELEM_SIZE(type)*cols; - if( min_step <= 0 ) - CV_Error( CV_StsUnsupportedFormat, "Invalid matrix type" ); - - CvMat* arr = (CvMat*)cvAlloc( sizeof(*arr)); - - arr->step = min_step; - arr->type = CV_MAT_MAGIC_VAL | type | CV_MAT_CONT_FLAG; - arr->rows = rows; - arr->cols = cols; - arr->data.ptr = 0; - arr->refcount = 0; - arr->hdr_refcount = 1; - - icvCheckHuge( arr ); - return arr; -} - - -// Initializes CvMat header, allocated by the user -CV_IMPL CvMat* -cvInitMatHeader( CvMat* arr, int rows, int cols, - int type, void* data, int step ) -{ - if( !arr ) - CV_Error( CV_StsNullPtr, "" ); - - if( (unsigned)CV_MAT_DEPTH(type) > CV_DEPTH_MAX ) - CV_Error( CV_BadNumChannels, "" ); - - if( rows < 0 || cols <= 0 ) - CV_Error( CV_StsBadSize, "Non-positive cols or rows" ); - - type = CV_MAT_TYPE( type ); - arr->type = type | CV_MAT_MAGIC_VAL; - arr->rows = rows; - arr->cols = cols; - arr->data.ptr = (uchar*)data; - arr->refcount = 0; - arr->hdr_refcount = 0; - - int pix_size = CV_ELEM_SIZE(type); - int min_step = arr->cols*pix_size; - - if( step != CV_AUTOSTEP && step != 0 ) - { - if( step < min_step ) - CV_Error( CV_BadStep, "" ); - arr->step = step; - } - else - { - arr->step = min_step; - } - - arr->type = CV_MAT_MAGIC_VAL | type | - (arr->rows == 1 || arr->step == min_step ? CV_MAT_CONT_FLAG : 0); - - icvCheckHuge( arr ); - return arr; -} - - -// Deallocates the CvMat structure and underlying data -CV_IMPL void -cvReleaseMat( CvMat** array ) -{ - if( !array ) - CV_Error( CV_HeaderIsNull, "" ); - - if( *array ) - { - CvMat* arr = *array; - - if( !CV_IS_MAT_HDR_Z(arr) && !CV_IS_MATND_HDR(arr) ) - CV_Error( CV_StsBadFlag, "" ); - - *array = 0; - - cvDecRefData( arr ); - cvFree( &arr ); - } -} - - -// Creates a copy of matrix -CV_IMPL CvMat* -cvCloneMat( const CvMat* src ) -{ - if( !CV_IS_MAT_HDR( src )) - CV_Error( CV_StsBadArg, "Bad CvMat header" ); - - CvMat* dst = cvCreateMatHeader( src->rows, src->cols, src->type ); - - if( src->data.ptr ) - { - cvCreateData( dst ); - cvCopy( src, dst ); - } - - return dst; -} - - -/****************************************************************************************\ -* CvMatND creation and basic operations * -\****************************************************************************************/ - -CV_IMPL CvMatND* -cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes, - int type, void* data ) -{ - type = CV_MAT_TYPE(type); - int64 step = CV_ELEM_SIZE(type); - - if( !mat ) - CV_Error( CV_StsNullPtr, "NULL matrix header pointer" ); - - if( step == 0 ) - CV_Error( CV_StsUnsupportedFormat, "invalid array data type" ); - - if( !sizes ) - CV_Error( CV_StsNullPtr, "NULL pointer" ); - - if( dims <= 0 || dims > CV_MAX_DIM ) - CV_Error( CV_StsOutOfRange, - "non-positive or too large number of dimensions" ); - - for( int i = dims - 1; i >= 0; i-- ) - { - if( sizes[i] < 0 ) - CV_Error( CV_StsBadSize, "one of dimesion sizes is non-positive" ); - mat->dim[i].size = sizes[i]; - if( step > INT_MAX ) - CV_Error( CV_StsOutOfRange, "The array is too big" ); - mat->dim[i].step = (int)step; - step *= sizes[i]; - } - - mat->type = CV_MATND_MAGIC_VAL | (step <= INT_MAX ? CV_MAT_CONT_FLAG : 0) | type; - mat->dims = dims; - mat->data.ptr = (uchar*)data; - mat->refcount = 0; - mat->hdr_refcount = 0; - return mat; -} - - -// Creates CvMatND and underlying data -CV_IMPL CvMatND* -cvCreateMatND( int dims, const int* sizes, int type ) -{ - CvMatND* arr = cvCreateMatNDHeader( dims, sizes, type ); - cvCreateData( arr ); - - return arr; -} - - -// Creates CvMatND header only -CV_IMPL CvMatND* -cvCreateMatNDHeader( int dims, const int* sizes, int type ) -{ - if( dims <= 0 || dims > CV_MAX_DIM ) - CV_Error( CV_StsOutOfRange, - "non-positive or too large number of dimensions" ); - - CvMatND* arr = (CvMatND*)cvAlloc( sizeof(*arr) ); - - cvInitMatNDHeader( arr, dims, sizes, type, 0 ); - arr->hdr_refcount = 1; - return arr; -} - - -// Creates a copy of nD array -CV_IMPL CvMatND* -cvCloneMatND( const CvMatND* src ) -{ - if( !CV_IS_MATND_HDR( src )) - CV_Error( CV_StsBadArg, "Bad CvMatND header" ); - - CV_Assert( src->dims <= CV_MAX_DIM ); - int sizes[CV_MAX_DIM]; - - for( int i = 0; i < src->dims; i++ ) - sizes[i] = src->dim[i].size; - - CvMatND* dst = cvCreateMatNDHeader( src->dims, sizes, src->type ); - - if( src->data.ptr ) - { - cvCreateData( dst ); - cv::Mat _src(src), _dst(dst); - uchar* data0 = dst->data.ptr; - _src.copyTo(_dst); - CV_Assert(_dst.data == data0); - //cvCopy( src, dst ); - } - - return dst; -} - - -static CvMatND* -cvGetMatND( const CvArr* arr, CvMatND* matnd, int* coi ) -{ - CvMatND* result = 0; - - if( coi ) - *coi = 0; - - if( !matnd || !arr ) - CV_Error( CV_StsNullPtr, "NULL array pointer is passed" ); - - if( CV_IS_MATND_HDR(arr)) - { - if( !((CvMatND*)arr)->data.ptr ) - CV_Error( CV_StsNullPtr, "The matrix has NULL data pointer" ); - - result = (CvMatND*)arr; - } - else - { - CvMat stub, *mat = (CvMat*)arr; - - if( CV_IS_IMAGE_HDR( mat )) - mat = cvGetMat( mat, &stub, coi ); - - if( !CV_IS_MAT_HDR( mat )) - CV_Error( CV_StsBadArg, "Unrecognized or unsupported array type" ); - - if( !mat->data.ptr ) - CV_Error( CV_StsNullPtr, "Input array has NULL data pointer" ); - - matnd->data.ptr = mat->data.ptr; - matnd->refcount = 0; - matnd->hdr_refcount = 0; - matnd->type = mat->type; - matnd->dims = 2; - matnd->dim[0].size = mat->rows; - matnd->dim[0].step = mat->step; - matnd->dim[1].size = mat->cols; - matnd->dim[1].step = CV_ELEM_SIZE(mat->type); - result = matnd; - } - - return result; -} - - -// returns number of dimensions to iterate. -/* -Checks whether arrays have equal type, sizes (mask is optional array -that needs to have the same size, but 8uC1 or 8sC1 type). -Returns number of dimensions to iterate through: -0 means that all arrays are continuous, -1 means that all arrays are vectors of continuous arrays etc. -and the size of largest common continuous part of the arrays -*/ -CV_IMPL int -cvInitNArrayIterator( int count, CvArr** arrs, - const CvArr* mask, CvMatND* stubs, - CvNArrayIterator* iterator, int flags ) -{ - int dims = -1; - int i, j, size, dim0 = -1; - int64 step; - CvMatND* hdr0 = 0; - - if( count < 1 || count > CV_MAX_ARR ) - CV_Error( CV_StsOutOfRange, "Incorrect number of arrays" ); - - if( !arrs || !stubs ) - CV_Error( CV_StsNullPtr, "Some of required array pointers is NULL" ); - - if( !iterator ) - CV_Error( CV_StsNullPtr, "Iterator pointer is NULL" ); - - for( i = 0; i <= count; i++ ) - { - const CvArr* arr = i < count ? arrs[i] : mask; - CvMatND* hdr; - - if( !arr ) - { - if( i < count ) - CV_Error( CV_StsNullPtr, "Some of required array pointers is NULL" ); - break; - } - - if( CV_IS_MATND( arr )) - hdr = (CvMatND*)arr; - else - { - int coi = 0; - hdr = cvGetMatND( arr, stubs + i, &coi ); - if( coi != 0 ) - CV_Error( CV_BadCOI, "COI set is not allowed here" ); - } - - iterator->hdr[i] = hdr; - - if( i > 0 ) - { - if( hdr->dims != hdr0->dims ) - CV_Error( CV_StsUnmatchedSizes, - "Number of dimensions is the same for all arrays" ); - - if( i < count ) - { - switch( flags & (CV_NO_DEPTH_CHECK|CV_NO_CN_CHECK)) - { - case 0: - if( !CV_ARE_TYPES_EQ( hdr, hdr0 )) - CV_Error( CV_StsUnmatchedFormats, - "Data type is not the same for all arrays" ); - break; - case CV_NO_DEPTH_CHECK: - if( !CV_ARE_CNS_EQ( hdr, hdr0 )) - CV_Error( CV_StsUnmatchedFormats, - "Number of channels is not the same for all arrays" ); - break; - case CV_NO_CN_CHECK: - if( !CV_ARE_CNS_EQ( hdr, hdr0 )) - CV_Error( CV_StsUnmatchedFormats, - "Depth is not the same for all arrays" ); - break; - } - } - else - { - if( !CV_IS_MASK_ARR( hdr )) - CV_Error( CV_StsBadMask, "Mask should have 8uC1 or 8sC1 data type" ); - } - - if( !(flags & CV_NO_SIZE_CHECK) ) - { - for( j = 0; j < hdr->dims; j++ ) - if( hdr->dim[j].size != hdr0->dim[j].size ) - CV_Error( CV_StsUnmatchedSizes, - "Dimension sizes are the same for all arrays" ); - } - } - else - hdr0 = hdr; - - step = CV_ELEM_SIZE(hdr->type); - for( j = hdr->dims - 1; j > dim0; j-- ) - { - if( step != hdr->dim[j].step ) - break; - step *= hdr->dim[j].size; - } - - if( j == dim0 && step > INT_MAX ) - j++; - - if( j > dim0 ) - dim0 = j; - - iterator->hdr[i] = (CvMatND*)hdr; - iterator->ptr[i] = (uchar*)hdr->data.ptr; - } - - size = 1; - for( j = hdr0->dims - 1; j > dim0; j-- ) - size *= hdr0->dim[j].size; - - dims = dim0 + 1; - iterator->dims = dims; - iterator->count = count; - iterator->size = cvSize(size,1); - - for( i = 0; i < dims; i++ ) - iterator->stack[i] = hdr0->dim[i].size; - - return dims; -} - - -// returns zero value if iteration is finished, non-zero otherwise -CV_IMPL int cvNextNArraySlice( CvNArrayIterator* iterator ) -{ - assert( iterator != 0 ); - int i, dims, size = 0; - - for( dims = iterator->dims; dims > 0; dims-- ) - { - for( i = 0; i < iterator->count; i++ ) - iterator->ptr[i] += iterator->hdr[i]->dim[dims-1].step; - - if( --iterator->stack[dims-1] > 0 ) - break; - - size = iterator->hdr[0]->dim[dims-1].size; - - for( i = 0; i < iterator->count; i++ ) - iterator->ptr[i] -= (size_t)size*iterator->hdr[i]->dim[dims-1].step; - - iterator->stack[dims-1] = size; - } - - return dims > 0; -} - - -/****************************************************************************************\ -* CvSparseMat creation and basic operations * -\****************************************************************************************/ - - -// Creates CvMatND and underlying data -CV_IMPL CvSparseMat* -cvCreateSparseMat( int dims, const int* sizes, int type ) -{ - type = CV_MAT_TYPE( type ); - int pix_size1 = CV_ELEM_SIZE1(type); - int pix_size = pix_size1*CV_MAT_CN(type); - int i, size; - CvMemStorage* storage; - - if( pix_size == 0 ) - CV_Error( CV_StsUnsupportedFormat, "invalid array data type" ); - - if( dims <= 0 || dims > CV_MAX_DIM_HEAP ) - CV_Error( CV_StsOutOfRange, "bad number of dimensions" ); - - if( !sizes ) - CV_Error( CV_StsNullPtr, "NULL pointer" ); - - for( i = 0; i < dims; i++ ) - { - if( sizes[i] <= 0 ) - CV_Error( CV_StsBadSize, "one of dimesion sizes is non-positive" ); - } - - CvSparseMat* arr = (CvSparseMat*)cvAlloc(sizeof(*arr)+MAX(0,dims-CV_MAX_DIM)*sizeof(arr->size[0])); - - arr->type = CV_SPARSE_MAT_MAGIC_VAL | type; - arr->dims = dims; - arr->refcount = 0; - arr->hdr_refcount = 1; - memcpy( arr->size, sizes, dims*sizeof(sizes[0])); - - arr->valoffset = (int)cvAlign(sizeof(CvSparseNode), pix_size1); - arr->idxoffset = (int)cvAlign(arr->valoffset + pix_size, sizeof(int)); - size = (int)cvAlign(arr->idxoffset + dims*sizeof(int), sizeof(CvSetElem)); - - storage = cvCreateMemStorage( CV_SPARSE_MAT_BLOCK ); - arr->heap = cvCreateSet( 0, sizeof(CvSet), size, storage ); - - arr->hashsize = CV_SPARSE_HASH_SIZE0; - size = arr->hashsize*sizeof(arr->hashtable[0]); - - arr->hashtable = (void**)cvAlloc( size ); - memset( arr->hashtable, 0, size ); - - return arr; -} - - -// Creates CvMatND and underlying data -CV_IMPL void -cvReleaseSparseMat( CvSparseMat** array ) -{ - if( !array ) - CV_Error( CV_HeaderIsNull, "" ); - - if( *array ) - { - CvSparseMat* arr = *array; - - if( !CV_IS_SPARSE_MAT_HDR(arr) ) - CV_Error( CV_StsBadFlag, "" ); - - *array = 0; - - CvMemStorage* storage = arr->heap->storage; - cvReleaseMemStorage( &storage ); - cvFree( &arr->hashtable ); - cvFree( &arr ); - } -} - - -// Creates CvMatND and underlying data -CV_IMPL CvSparseMat* -cvCloneSparseMat( const CvSparseMat* src ) -{ - if( !CV_IS_SPARSE_MAT_HDR(src) ) - CV_Error( CV_StsBadArg, "Invalid sparse array header" ); - - CvSparseMat* dst = cvCreateSparseMat( src->dims, src->size, src->type ); - cvCopy( src, dst ); - return dst; -} - - -CvSparseNode* -cvInitSparseMatIterator( const CvSparseMat* mat, CvSparseMatIterator* iterator ) -{ - CvSparseNode* node = 0; - int idx; - - if( !CV_IS_SPARSE_MAT( mat )) - CV_Error( CV_StsBadArg, "Invalid sparse matrix header" ); - - if( !iterator ) - CV_Error( CV_StsNullPtr, "NULL iterator pointer" ); - - iterator->mat = (CvSparseMat*)mat; - iterator->node = 0; - - for( idx = 0; idx < mat->hashsize; idx++ ) - if( mat->hashtable[idx] ) - { - node = iterator->node = (CvSparseNode*)mat->hashtable[idx]; - break; - } - - iterator->curidx = idx; - return node; -} - -#define ICV_SPARSE_MAT_HASH_MULTIPLIER cv::SparseMat::HASH_SCALE - -static uchar* -icvGetNodePtr( CvSparseMat* mat, const int* idx, int* _type, - int create_node, unsigned* precalc_hashval ) -{ - uchar* ptr = 0; - int i, tabidx; - unsigned hashval = 0; - CvSparseNode *node; - assert( CV_IS_SPARSE_MAT( mat )); - - if( !precalc_hashval ) - { - for( i = 0; i < mat->dims; i++ ) - { - int t = idx[i]; - if( (unsigned)t >= (unsigned)mat->size[i] ) - CV_Error( CV_StsOutOfRange, "One of indices is out of range" ); - hashval = hashval*ICV_SPARSE_MAT_HASH_MULTIPLIER + t; - } - } - else - { - hashval = *precalc_hashval; - } - - tabidx = hashval & (mat->hashsize - 1); - hashval &= INT_MAX; - - if( create_node >= -1 ) - { - for( node = (CvSparseNode*)mat->hashtable[tabidx]; - node != 0; node = node->next ) - { - if( node->hashval == hashval ) - { - int* nodeidx = CV_NODE_IDX(mat,node); - for( i = 0; i < mat->dims; i++ ) - if( idx[i] != nodeidx[i] ) - break; - if( i == mat->dims ) - { - ptr = (uchar*)CV_NODE_VAL(mat,node); - break; - } - } - } - } - - if( !ptr && create_node ) - { - if( mat->heap->active_count >= mat->hashsize*CV_SPARSE_HASH_RATIO ) - { - void** newtable; - int newsize = MAX( mat->hashsize*2, CV_SPARSE_HASH_SIZE0); - int newrawsize = newsize*sizeof(newtable[0]); - - CvSparseMatIterator iterator; - assert( (newsize & (newsize - 1)) == 0 ); - - // resize hash table - newtable = (void**)cvAlloc( newrawsize ); - memset( newtable, 0, newrawsize ); - - node = cvInitSparseMatIterator( mat, &iterator ); - while( node ) - { - CvSparseNode* next = cvGetNextSparseNode( &iterator ); - int newidx = node->hashval & (newsize - 1); - node->next = (CvSparseNode*)newtable[newidx]; - newtable[newidx] = node; - node = next; - } - - cvFree( &mat->hashtable ); - mat->hashtable = newtable; - mat->hashsize = newsize; - tabidx = hashval & (newsize - 1); - } - - node = (CvSparseNode*)cvSetNew( mat->heap ); - node->hashval = hashval; - node->next = (CvSparseNode*)mat->hashtable[tabidx]; - mat->hashtable[tabidx] = node; - memcpy(CV_NODE_IDX(mat,node), idx, mat->dims*sizeof(idx[0])); - ptr = (uchar*)CV_NODE_VAL(mat,node); - if( create_node > 0 ) - memset( ptr, 0, CV_ELEM_SIZE(mat->type)); - } - - if( _type ) - *_type = CV_MAT_TYPE(mat->type); - - return ptr; -} - - -static void -icvDeleteNode( CvSparseMat* mat, const int* idx, unsigned* precalc_hashval ) -{ - int i, tabidx; - unsigned hashval = 0; - CvSparseNode *node, *prev = 0; - assert( CV_IS_SPARSE_MAT( mat )); - - if( !precalc_hashval ) - { - for( i = 0; i < mat->dims; i++ ) - { - int t = idx[i]; - if( (unsigned)t >= (unsigned)mat->size[i] ) - CV_Error( CV_StsOutOfRange, "One of indices is out of range" ); - hashval = hashval*ICV_SPARSE_MAT_HASH_MULTIPLIER + t; - } - } - else - { - hashval = *precalc_hashval; - } - - tabidx = hashval & (mat->hashsize - 1); - hashval &= INT_MAX; - - for( node = (CvSparseNode*)mat->hashtable[tabidx]; - node != 0; prev = node, node = node->next ) - { - if( node->hashval == hashval ) - { - int* nodeidx = CV_NODE_IDX(mat,node); - for( i = 0; i < mat->dims; i++ ) - if( idx[i] != nodeidx[i] ) - break; - if( i == mat->dims ) - break; - } - } - - if( node ) - { - if( prev ) - prev->next = node->next; - else - mat->hashtable[tabidx] = node->next; - cvSetRemoveByPtr( mat->heap, node ); - } -} - - -/****************************************************************************************\ -* Common for multiple array types operations * -\****************************************************************************************/ - -// Allocates underlying array data -CV_IMPL void -cvCreateData( CvArr* arr ) -{ - if( CV_IS_MAT_HDR_Z( arr )) - { - size_t step, total_size; - CvMat* mat = (CvMat*)arr; - step = mat->step; - - if( mat->rows == 0 || mat->cols == 0 ) - return; - - if( mat->data.ptr != 0 ) - CV_Error( CV_StsError, "Data is already allocated" ); - - if( step == 0 ) - step = CV_ELEM_SIZE(mat->type)*mat->cols; - - int64 _total_size = (int64)step*mat->rows + sizeof(int) + CV_MALLOC_ALIGN; - total_size = (size_t)_total_size; - if(_total_size != (int64)total_size) - CV_Error(CV_StsNoMem, "Too big buffer is allocated" ); - mat->refcount = (int*)cvAlloc( (size_t)total_size ); - mat->data.ptr = (uchar*)cvAlignPtr( mat->refcount + 1, CV_MALLOC_ALIGN ); - *mat->refcount = 1; - } - else if( CV_IS_IMAGE_HDR(arr)) - { - IplImage* img = (IplImage*)arr; - - if( img->imageData != 0 ) - CV_Error( CV_StsError, "Data is already allocated" ); - - if( !CvIPL.allocateData ) - { - img->imageData = img->imageDataOrigin = - (char*)cvAlloc( (size_t)img->imageSize ); - } - else - { - int depth = img->depth; - int width = img->width; - - if( img->depth == IPL_DEPTH_32F || img->depth == IPL_DEPTH_64F ) - { - img->width *= img->depth == IPL_DEPTH_32F ? sizeof(float) : sizeof(double); - img->depth = IPL_DEPTH_8U; - } - - CvIPL.allocateData( img, 0, 0 ); - - img->width = width; - img->depth = depth; - } - } - else if( CV_IS_MATND_HDR( arr )) - { - CvMatND* mat = (CvMatND*)arr; - int i; - size_t total_size = CV_ELEM_SIZE(mat->type); - - if( mat->dim[0].size == 0 ) - return; - - if( mat->data.ptr != 0 ) - CV_Error( CV_StsError, "Data is already allocated" ); - - if( CV_IS_MAT_CONT( mat->type )) - { - total_size = (size_t)mat->dim[0].size*(mat->dim[0].step != 0 ? - (size_t)mat->dim[0].step : total_size); - } - else - { - for( i = mat->dims - 1; i >= 0; i-- ) - { - size_t size = (size_t)mat->dim[i].step*mat->dim[i].size; - - if( total_size < size ) - total_size = size; - } - } - - mat->refcount = (int*)cvAlloc( total_size + - sizeof(int) + CV_MALLOC_ALIGN ); - mat->data.ptr = (uchar*)cvAlignPtr( mat->refcount + 1, CV_MALLOC_ALIGN ); - *mat->refcount = 1; - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); -} - - -// Assigns external data to array -CV_IMPL void -cvSetData( CvArr* arr, void* data, int step ) -{ - int pix_size, min_step; - - if( CV_IS_MAT_HDR(arr) || CV_IS_MATND_HDR(arr) ) - cvReleaseData( arr ); - - if( CV_IS_MAT_HDR( arr )) - { - CvMat* mat = (CvMat*)arr; - - int type = CV_MAT_TYPE(mat->type); - pix_size = CV_ELEM_SIZE(type); - min_step = mat->cols*pix_size; - - if( step != CV_AUTOSTEP && step != 0 ) - { - if( step < min_step && data != 0 ) - CV_Error( CV_BadStep, "" ); - mat->step = step; - } - else - mat->step = min_step; - - mat->data.ptr = (uchar*)data; - mat->type = CV_MAT_MAGIC_VAL | type | - (mat->rows == 1 || mat->step == min_step ? CV_MAT_CONT_FLAG : 0); - icvCheckHuge( mat ); - } - else if( CV_IS_IMAGE_HDR( arr )) - { - IplImage* img = (IplImage*)arr; - - pix_size = ((img->depth & 255) >> 3)*img->nChannels; - min_step = img->width*pix_size; - - if( step != CV_AUTOSTEP && img->height > 1 ) - { - if( step < min_step && data != 0 ) - CV_Error( CV_BadStep, "" ); - img->widthStep = step; - } - else - { - img->widthStep = min_step; - } - - img->imageSize = img->widthStep * img->height; - img->imageData = img->imageDataOrigin = (char*)data; - - if( (((int)(size_t)data | step) & 7) == 0 && - cvAlign(img->width * pix_size, 8) == step ) - img->align = 8; - else - img->align = 4; - } - else if( CV_IS_MATND_HDR( arr )) - { - CvMatND* mat = (CvMatND*)arr; - int i; - int64 cur_step; - - if( step != CV_AUTOSTEP ) - CV_Error( CV_BadStep, - "For multidimensional array only CV_AUTOSTEP is allowed here" ); - - mat->data.ptr = (uchar*)data; - cur_step = CV_ELEM_SIZE(mat->type); - - for( i = mat->dims - 1; i >= 0; i-- ) - { - if( cur_step > INT_MAX ) - CV_Error( CV_StsOutOfRange, "The array is too big" ); - mat->dim[i].step = (int)cur_step; - cur_step *= mat->dim[i].size; - } - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); -} - - -// Deallocates array's data -CV_IMPL void -cvReleaseData( CvArr* arr ) -{ - if( CV_IS_MAT_HDR( arr ) || CV_IS_MATND_HDR( arr )) - { - CvMat* mat = (CvMat*)arr; - cvDecRefData( mat ); - } - else if( CV_IS_IMAGE_HDR( arr )) - { - IplImage* img = (IplImage*)arr; - - if( !CvIPL.deallocate ) - { - char* ptr = img->imageDataOrigin; - img->imageData = img->imageDataOrigin = 0; - cvFree( &ptr ); - } - else - { - CvIPL.deallocate( img, IPL_IMAGE_DATA ); - } - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); -} - - -// Retrieves essential information about image ROI or CvMat data -CV_IMPL void -cvGetRawData( const CvArr* arr, uchar** data, int* step, CvSize* roi_size ) -{ - if( CV_IS_MAT( arr )) - { - CvMat *mat = (CvMat*)arr; - - if( step ) - *step = mat->step; - - if( data ) - *data = mat->data.ptr; - - if( roi_size ) - *roi_size = cvGetMatSize( mat ); - } - else if( CV_IS_IMAGE( arr )) - { - IplImage* img = (IplImage*)arr; - - if( step ) - *step = img->widthStep; - - if( data ) - *data = cvPtr2D( img, 0, 0 ); - - if( roi_size ) - { - if( img->roi ) - { - *roi_size = cvSize( img->roi->width, img->roi->height ); - } - else - { - *roi_size = cvSize( img->width, img->height ); - } - } - } - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - - if( !CV_IS_MAT_CONT( mat->type )) - CV_Error( CV_StsBadArg, "Only continuous nD arrays are supported here" ); - - if( data ) - *data = mat->data.ptr; - - if( roi_size || step ) - { - int i, size1 = mat->dim[0].size, size2 = 1; - - if( mat->dims > 2 ) - for( i = 1; i < mat->dims; i++ ) - size1 *= mat->dim[i].size; - else - size2 = mat->dim[1].size; - - if( roi_size ) - { - roi_size->width = size2; - roi_size->height = size1; - } - - if( step ) - *step = mat->dim[0].step; - } - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); -} - - -CV_IMPL int -cvGetElemType( const CvArr* arr ) -{ - int type = -1; - if( CV_IS_MAT_HDR(arr) || CV_IS_MATND_HDR(arr) || CV_IS_SPARSE_MAT_HDR(arr)) - type = CV_MAT_TYPE( ((CvMat*)arr)->type ); - else if( CV_IS_IMAGE(arr)) - { - IplImage* img = (IplImage*)arr; - type = CV_MAKETYPE( IPL2CV_DEPTH(img->depth), img->nChannels ); - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - - return type; -} - - -// Returns a number of array dimensions -CV_IMPL int -cvGetDims( const CvArr* arr, int* sizes ) -{ - int dims = -1; - if( CV_IS_MAT_HDR( arr )) - { - CvMat* mat = (CvMat*)arr; - - dims = 2; - if( sizes ) - { - sizes[0] = mat->rows; - sizes[1] = mat->cols; - } - } - else if( CV_IS_IMAGE( arr )) - { - IplImage* img = (IplImage*)arr; - dims = 2; - - if( sizes ) - { - sizes[0] = img->height; - sizes[1] = img->width; - } - } - else if( CV_IS_MATND_HDR( arr )) - { - CvMatND* mat = (CvMatND*)arr; - dims = mat->dims; - - if( sizes ) - { - int i; - for( i = 0; i < dims; i++ ) - sizes[i] = mat->dim[i].size; - } - } - else if( CV_IS_SPARSE_MAT_HDR( arr )) - { - CvSparseMat* mat = (CvSparseMat*)arr; - dims = mat->dims; - - if( sizes ) - memcpy( sizes, mat->size, dims*sizeof(sizes[0])); - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - - return dims; -} - - -// Returns the size of particular array dimension -CV_IMPL int -cvGetDimSize( const CvArr* arr, int index ) -{ - int size = -1; - - if( CV_IS_MAT( arr )) - { - CvMat *mat = (CvMat*)arr; - - switch( index ) - { - case 0: - size = mat->rows; - break; - case 1: - size = mat->cols; - break; - default: - CV_Error( CV_StsOutOfRange, "bad dimension index" ); - } - } - else if( CV_IS_IMAGE( arr )) - { - IplImage* img = (IplImage*)arr; - - switch( index ) - { - case 0: - size = !img->roi ? img->height : img->roi->height; - break; - case 1: - size = !img->roi ? img->width : img->roi->width; - break; - default: - CV_Error( CV_StsOutOfRange, "bad dimension index" ); - } - } - else if( CV_IS_MATND_HDR( arr )) - { - CvMatND* mat = (CvMatND*)arr; - - if( (unsigned)index >= (unsigned)mat->dims ) - CV_Error( CV_StsOutOfRange, "bad dimension index" ); - - size = mat->dim[index].size; - } - else if( CV_IS_SPARSE_MAT_HDR( arr )) - { - CvSparseMat* mat = (CvSparseMat*)arr; - - if( (unsigned)index >= (unsigned)mat->dims ) - CV_Error( CV_StsOutOfRange, "bad dimension index" ); - - size = mat->size[index]; - } - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - - return size; -} - - -// Returns the size of CvMat or IplImage -CV_IMPL CvSize -cvGetSize( const CvArr* arr ) -{ - CvSize size = { 0, 0 }; - - if( CV_IS_MAT_HDR_Z( arr )) - { - CvMat *mat = (CvMat*)arr; - - size.width = mat->cols; - size.height = mat->rows; - } - else if( CV_IS_IMAGE_HDR( arr )) - { - IplImage* img = (IplImage*)arr; - - if( img->roi ) - { - size.width = img->roi->width; - size.height = img->roi->height; - } - else - { - size.width = img->width; - size.height = img->height; - } - } - else - CV_Error( CV_StsBadArg, "Array should be CvMat or IplImage" ); - - return size; -} - - -// Selects sub-array (no data is copied) -CV_IMPL CvMat* -cvGetSubRect( const CvArr* arr, CvMat* submat, CvRect rect ) -{ - CvMat* res = 0; - CvMat stub, *mat = (CvMat*)arr; - - if( !CV_IS_MAT( mat )) - mat = cvGetMat( mat, &stub ); - - if( !submat ) - CV_Error( CV_StsNullPtr, "" ); - - if( (rect.x|rect.y|rect.width|rect.height) < 0 ) - CV_Error( CV_StsBadSize, "" ); - - if( rect.x + rect.width > mat->cols || - rect.y + rect.height > mat->rows ) - CV_Error( CV_StsBadSize, "" ); - - { - /* - int* refcount = mat->refcount; - - if( refcount ) - ++*refcount; - - cvDecRefData( submat ); - */ - submat->data.ptr = mat->data.ptr + (size_t)rect.y*mat->step + - rect.x*CV_ELEM_SIZE(mat->type); - submat->step = mat->step; - submat->type = (mat->type & (rect.width < mat->cols ? ~CV_MAT_CONT_FLAG : -1)) | - (rect.height <= 1 ? CV_MAT_CONT_FLAG : 0); - submat->rows = rect.height; - submat->cols = rect.width; - submat->refcount = 0; - res = submat; - } - - return res; -} - - -// Selects array's row span. -CV_IMPL CvMat* -cvGetRows( const CvArr* arr, CvMat* submat, - int start_row, int end_row, int delta_row ) -{ - CvMat* res = 0; - CvMat stub, *mat = (CvMat*)arr; - - if( !CV_IS_MAT( mat )) - mat = cvGetMat( mat, &stub ); - - if( !submat ) - CV_Error( CV_StsNullPtr, "" ); - - if( (unsigned)start_row >= (unsigned)mat->rows || - (unsigned)end_row > (unsigned)mat->rows || delta_row <= 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - { - /* - int* refcount = mat->refcount; - - if( refcount ) - ++*refcount; - - cvDecRefData( submat ); - */ - if( delta_row == 1 ) - { - submat->rows = end_row - start_row; - submat->step = mat->step; - } - else - { - submat->rows = (end_row - start_row + delta_row - 1)/delta_row; - submat->step = mat->step * delta_row; - } - - submat->cols = mat->cols; - submat->step &= submat->rows > 1 ? -1 : 0; - submat->data.ptr = mat->data.ptr + (size_t)start_row*mat->step; - submat->type = (mat->type | (submat->rows == 1 ? CV_MAT_CONT_FLAG : 0)) & - (delta_row != 1 && submat->rows > 1 ? ~CV_MAT_CONT_FLAG : -1); - submat->refcount = 0; - submat->hdr_refcount = 0; - res = submat; - } - - return res; -} - - -// Selects array's column span. -CV_IMPL CvMat* -cvGetCols( const CvArr* arr, CvMat* submat, int start_col, int end_col ) -{ - CvMat* res = 0; - CvMat stub, *mat = (CvMat*)arr; - int cols; - - if( !CV_IS_MAT( mat )) - mat = cvGetMat( mat, &stub ); - - if( !submat ) - CV_Error( CV_StsNullPtr, "" ); - - cols = mat->cols; - if( (unsigned)start_col >= (unsigned)cols || - (unsigned)end_col > (unsigned)cols ) - CV_Error( CV_StsOutOfRange, "" ); - - { - /* - int* refcount = mat->refcount; - - if( refcount ) - ++*refcount; - - cvDecRefData( submat ); - */ - submat->rows = mat->rows; - submat->cols = end_col - start_col; - submat->step = mat->step; - submat->data.ptr = mat->data.ptr + (size_t)start_col*CV_ELEM_SIZE(mat->type); - submat->type = mat->type & (submat->rows > 1 && submat->cols < cols ? ~CV_MAT_CONT_FLAG : -1); - submat->refcount = 0; - submat->hdr_refcount = 0; - res = submat; - } - - return res; -} - - -// Selects array diagonal -CV_IMPL CvMat* -cvGetDiag( const CvArr* arr, CvMat* submat, int diag ) -{ - CvMat* res = 0; - CvMat stub, *mat = (CvMat*)arr; - int len, pix_size; - - if( !CV_IS_MAT( mat )) - mat = cvGetMat( mat, &stub ); - - if( !submat ) - CV_Error( CV_StsNullPtr, "" ); - - pix_size = CV_ELEM_SIZE(mat->type); - - /*{ - int* refcount = mat->refcount; - - if( refcount ) - ++*refcount; - - cvDecRefData( submat ); - }*/ - - if( diag >= 0 ) - { - len = mat->cols - diag; - - if( len <= 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - len = CV_IMIN( len, mat->rows ); - submat->data.ptr = mat->data.ptr + diag*pix_size; - } - else - { - len = mat->rows + diag; - - if( len <= 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - len = CV_IMIN( len, mat->cols ); - submat->data.ptr = mat->data.ptr - diag*mat->step; - } - - submat->rows = len; - submat->cols = 1; - submat->step = mat->step + (submat->rows > 1 ? pix_size : 0); - submat->type = mat->type; - if( submat->rows > 1 ) - submat->type &= ~CV_MAT_CONT_FLAG; - else - submat->type |= CV_MAT_CONT_FLAG; - submat->refcount = 0; - submat->hdr_refcount = 0; - res = submat; - - return res; -} - - -/****************************************************************************************\ -* Operations on CvScalar and accessing array elements * -\****************************************************************************************/ - -// Converts CvScalar to specified type -CV_IMPL void -cvScalarToRawData( const CvScalar* scalar, void* data, int type, int extend_to_12 ) -{ - type = CV_MAT_TYPE(type); - int cn = CV_MAT_CN( type ); - int depth = type & CV_MAT_DEPTH_MASK; - - assert( scalar && data ); - if( (unsigned)(cn - 1) >= 4 ) - CV_Error( CV_StsOutOfRange, "The number of channels must be 1, 2, 3 or 4" ); - - switch( depth ) - { - case CV_8UC1: - while( cn-- ) - { - int t = cvRound( scalar->val[cn] ); - ((uchar*)data)[cn] = CV_CAST_8U(t); - } - break; - case CV_8SC1: - while( cn-- ) - { - int t = cvRound( scalar->val[cn] ); - ((char*)data)[cn] = CV_CAST_8S(t); - } - break; - case CV_16UC1: - while( cn-- ) - { - int t = cvRound( scalar->val[cn] ); - ((ushort*)data)[cn] = CV_CAST_16U(t); - } - break; - case CV_16SC1: - while( cn-- ) - { - int t = cvRound( scalar->val[cn] ); - ((short*)data)[cn] = CV_CAST_16S(t); - } - break; - case CV_32SC1: - while( cn-- ) - ((int*)data)[cn] = cvRound( scalar->val[cn] ); - break; - case CV_32FC1: - while( cn-- ) - ((float*)data)[cn] = (float)(scalar->val[cn]); - break; - case CV_64FC1: - while( cn-- ) - ((double*)data)[cn] = (double)(scalar->val[cn]); - break; - default: - assert(0); - CV_Error( CV_BadDepth, "" ); - } - - if( extend_to_12 ) - { - int pix_size = CV_ELEM_SIZE(type); - int offset = CV_ELEM_SIZE1(depth)*12; - - do - { - offset -= pix_size; - memcpy((char*)data + offset, data, pix_size); - } - while( offset > pix_size ); - } -} - - -// Converts data of specified type to CvScalar -CV_IMPL void -cvRawDataToScalar( const void* data, int flags, CvScalar* scalar ) -{ - int cn = CV_MAT_CN( flags ); - - assert( scalar && data ); - - if( (unsigned)(cn - 1) >= 4 ) - CV_Error( CV_StsOutOfRange, "The number of channels must be 1, 2, 3 or 4" ); - - memset( scalar->val, 0, sizeof(scalar->val)); - - switch( CV_MAT_DEPTH( flags )) - { - case CV_8U: - while( cn-- ) - scalar->val[cn] = CV_8TO32F(((uchar*)data)[cn]); - break; - case CV_8S: - while( cn-- ) - scalar->val[cn] = CV_8TO32F(((char*)data)[cn]); - break; - case CV_16U: - while( cn-- ) - scalar->val[cn] = ((ushort*)data)[cn]; - break; - case CV_16S: - while( cn-- ) - scalar->val[cn] = ((short*)data)[cn]; - break; - case CV_32S: - while( cn-- ) - scalar->val[cn] = ((int*)data)[cn]; - break; - case CV_32F: - while( cn-- ) - scalar->val[cn] = ((float*)data)[cn]; - break; - case CV_64F: - while( cn-- ) - scalar->val[cn] = ((double*)data)[cn]; - break; - default: - assert(0); - CV_Error( CV_BadDepth, "" ); - } -} - - -static double icvGetReal( const void* data, int type ) -{ - switch( type ) - { - case CV_8U: - return *(uchar*)data; - case CV_8S: - return *(char*)data; - case CV_16U: - return *(ushort*)data; - case CV_16S: - return *(short*)data; - case CV_32S: - return *(int*)data; - case CV_32F: - return *(float*)data; - case CV_64F: - return *(double*)data; - } - - return 0; -} - - -static void icvSetReal( double value, const void* data, int type ) -{ - if( type < CV_32F ) - { - int ivalue = cvRound(value); - switch( type ) - { - case CV_8U: - *(uchar*)data = CV_CAST_8U(ivalue); - break; - case CV_8S: - *(char*)data = CV_CAST_8S(ivalue); - break; - case CV_16U: - *(ushort*)data = CV_CAST_16U(ivalue); - break; - case CV_16S: - *(short*)data = CV_CAST_16S(ivalue); - break; - case CV_32S: - *(int*)data = CV_CAST_32S(ivalue); - break; - } - } - else - { - switch( type ) - { - case CV_32F: - *(float*)data = (float)value; - break; - case CV_64F: - *(double*)data = value; - break; - } - } -} - - -// Returns pointer to specified element of array (linear index is used) -CV_IMPL uchar* -cvPtr1D( const CvArr* arr, int idx, int* _type ) -{ - uchar* ptr = 0; - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - - int type = CV_MAT_TYPE(mat->type); - int pix_size = CV_ELEM_SIZE(type); - - if( _type ) - *_type = type; - - // the first part is mul-free sufficient check - // that the index is within the matrix - if( (unsigned)idx >= (unsigned)(mat->rows + mat->cols - 1) && - (unsigned)idx >= (unsigned)(mat->rows*mat->cols)) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - if( CV_IS_MAT_CONT(mat->type)) - { - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else - { - int row, col; - if( mat->cols == 1 ) - row = idx, col = 0; - else - row = idx/mat->cols, col = idx - row*mat->cols; - ptr = mat->data.ptr + (size_t)row*mat->step + col*pix_size; - } - } - else if( CV_IS_IMAGE_HDR( arr )) - { - IplImage* img = (IplImage*)arr; - int width = !img->roi ? img->width : img->roi->width; - int y = idx/width, x = idx - y*width; - - ptr = cvPtr2D( arr, y, x, _type ); - } - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - int j, type = CV_MAT_TYPE(mat->type); - size_t size = mat->dim[0].size; - - if( _type ) - *_type = type; - - for( j = 1; j < mat->dims; j++ ) - size *= mat->dim[j].size; - - if((unsigned)idx >= (unsigned)size ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - if( CV_IS_MAT_CONT(mat->type)) - { - int pix_size = CV_ELEM_SIZE(type); - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else - { - ptr = mat->data.ptr; - for( j = mat->dims - 1; j >= 0; j-- ) - { - int sz = mat->dim[j].size; - if( sz ) - { - int t = idx/sz; - ptr += (idx - t*sz)*mat->dim[j].step; - idx = t; - } - } - } - } - else if( CV_IS_SPARSE_MAT( arr )) - { - CvSparseMat* m = (CvSparseMat*)arr; - if( m->dims == 1 ) - ptr = icvGetNodePtr( (CvSparseMat*)arr, &idx, _type, 1, 0 ); - else - { - int i, n = m->dims; - CV_DbgAssert( n <= CV_MAX_DIM_HEAP ); - int _idx[CV_MAX_DIM_HEAP]; - - for( i = n - 1; i >= 0; i-- ) - { - int t = idx / m->size[i]; - _idx[i] = idx - t*m->size[i]; - idx = t; - } - ptr = icvGetNodePtr( (CvSparseMat*)arr, _idx, _type, 1, 0 ); - } - } - else - { - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - } - - return ptr; -} - - -// Returns pointer to specified element of 2d array -CV_IMPL uchar* -cvPtr2D( const CvArr* arr, int y, int x, int* _type ) -{ - uchar* ptr = 0; - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - int type; - - if( (unsigned)y >= (unsigned)(mat->rows) || - (unsigned)x >= (unsigned)(mat->cols) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - type = CV_MAT_TYPE(mat->type); - if( _type ) - *_type = type; - - ptr = mat->data.ptr + (size_t)y*mat->step + x*CV_ELEM_SIZE(type); - } - else if( CV_IS_IMAGE( arr )) - { - IplImage* img = (IplImage*)arr; - int pix_size = (img->depth & 255) >> 3; - int width, height; - ptr = (uchar*)img->imageData; - - if( img->dataOrder == 0 ) - pix_size *= img->nChannels; - - if( img->roi ) - { - width = img->roi->width; - height = img->roi->height; - - ptr += img->roi->yOffset*img->widthStep + - img->roi->xOffset*pix_size; - - if( img->dataOrder ) - { - int coi = img->roi->coi; - if( !coi ) - CV_Error( CV_BadCOI, - "COI must be non-null in case of planar images" ); - ptr += (coi - 1)*img->imageSize; - } - } - else - { - width = img->width; - height = img->height; - } - - if( (unsigned)y >= (unsigned)height || - (unsigned)x >= (unsigned)width ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr += y*img->widthStep + x*pix_size; - - if( _type ) - { - int type = IPL2CV_DEPTH(img->depth); - if( type < 0 || (unsigned)(img->nChannels - 1) > 3 ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - *_type = CV_MAKETYPE( type, img->nChannels ); - } - } - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - - if( mat->dims != 2 || - (unsigned)y >= (unsigned)(mat->dim[0].size) || - (unsigned)x >= (unsigned)(mat->dim[1].size) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)y*mat->dim[0].step + x*mat->dim[1].step; - if( _type ) - *_type = CV_MAT_TYPE(mat->type); - } - else if( CV_IS_SPARSE_MAT( arr )) - { - int idx[] = { y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, _type, 1, 0 ); - } - else - { - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - } - - return ptr; -} - - -// Returns pointer to specified element of 3d array -CV_IMPL uchar* -cvPtr3D( const CvArr* arr, int z, int y, int x, int* _type ) -{ - uchar* ptr = 0; - if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - - if( mat->dims != 3 || - (unsigned)z >= (unsigned)(mat->dim[0].size) || - (unsigned)y >= (unsigned)(mat->dim[1].size) || - (unsigned)x >= (unsigned)(mat->dim[2].size) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)z*mat->dim[0].step + - (size_t)y*mat->dim[1].step + x*mat->dim[2].step; - - if( _type ) - *_type = CV_MAT_TYPE(mat->type); - } - else if( CV_IS_SPARSE_MAT( arr )) - { - int idx[] = { z, y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, _type, 1, 0 ); - } - else - { - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - } - - return ptr; -} - - -// Returns pointer to specified element of n-d array -CV_IMPL uchar* -cvPtrND( const CvArr* arr, const int* idx, int* _type, - int create_node, unsigned* precalc_hashval ) -{ - uchar* ptr = 0; - if( !idx ) - CV_Error( CV_StsNullPtr, "NULL pointer to indices" ); - - if( CV_IS_SPARSE_MAT( arr )) - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, - _type, create_node, precalc_hashval ); - else if( CV_IS_MATND( arr )) - { - CvMatND* mat = (CvMatND*)arr; - int i; - ptr = mat->data.ptr; - - for( i = 0; i < mat->dims; i++ ) - { - if( (unsigned)idx[i] >= (unsigned)(mat->dim[i].size) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - ptr += (size_t)idx[i]*mat->dim[i].step; - } - - if( _type ) - *_type = CV_MAT_TYPE(mat->type); - } - else if( CV_IS_MAT_HDR(arr) || CV_IS_IMAGE_HDR(arr) ) - ptr = cvPtr2D( arr, idx[0], idx[1], _type ); - else - CV_Error( CV_StsBadArg, "unrecognized or unsupported array type" ); - - return ptr; -} - - -// Returns specifed element of n-D array given linear index -CV_IMPL CvScalar -cvGet1D( const CvArr* arr, int idx ) -{ - CvScalar scalar = {{0,0,0,0}}; - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr ) && CV_IS_MAT_CONT( ((CvMat*)arr)->type )) - { - CvMat* mat = (CvMat*)arr; - - type = CV_MAT_TYPE(mat->type); - int pix_size = CV_ELEM_SIZE(type); - - // the first part is mul-free sufficient check - // that the index is within the matrix - if( (unsigned)idx >= (unsigned)(mat->rows + mat->cols - 1) && - (unsigned)idx >= (unsigned)(mat->rows*mat->cols)) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else if( !CV_IS_SPARSE_MAT( arr ) || ((CvSparseMat*)arr)->dims > 1 ) - ptr = cvPtr1D( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, &idx, &type, 0, 0 ); - - if( ptr ) - cvRawDataToScalar( ptr, type, &scalar ); - - return scalar; -} - - -// Returns specifed element of 2D array -CV_IMPL CvScalar -cvGet2D( const CvArr* arr, int y, int x ) -{ - CvScalar scalar = {{0,0,0,0}}; - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - - if( (unsigned)y >= (unsigned)(mat->rows) || - (unsigned)x >= (unsigned)(mat->cols) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - type = CV_MAT_TYPE(mat->type); - ptr = mat->data.ptr + (size_t)y*mat->step + x*CV_ELEM_SIZE(type); - } - else if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr2D( arr, y, x, &type ); - else - { - int idx[] = { y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - } - - if( ptr ) - cvRawDataToScalar( ptr, type, &scalar ); - - return scalar; -} - - -// Returns specifed element of 3D array -CV_IMPL CvScalar -cvGet3D( const CvArr* arr, int z, int y, int x ) -{ - CvScalar scalar = {{0,0,0,0}}; - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr3D( arr, z, y, x, &type ); - else - { - int idx[] = { z, y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - } - - if( ptr ) - cvRawDataToScalar( ptr, type, &scalar ); - return scalar; -} - - -// Returns specifed element of nD array -CV_IMPL CvScalar -cvGetND( const CvArr* arr, const int* idx ) -{ - CvScalar scalar = {{0,0,0,0}}; - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtrND( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - - if( ptr ) - cvRawDataToScalar( ptr, type, &scalar ); - - return scalar; -} - - -// Returns specifed element of n-D array given linear index -CV_IMPL double -cvGetReal1D( const CvArr* arr, int idx ) -{ - double value = 0; - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr ) && CV_IS_MAT_CONT( ((CvMat*)arr)->type )) - { - CvMat* mat = (CvMat*)arr; - - type = CV_MAT_TYPE(mat->type); - int pix_size = CV_ELEM_SIZE(type); - - // the first part is mul-free sufficient check - // that the index is within the matrix - if( (unsigned)idx >= (unsigned)(mat->rows + mat->cols - 1) && - (unsigned)idx >= (unsigned)(mat->rows*mat->cols)) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else if( !CV_IS_SPARSE_MAT( arr ) || ((CvSparseMat*)arr)->dims > 1 ) - ptr = cvPtr1D( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, &idx, &type, 0, 0 ); - - if( ptr ) - { - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvGetReal* support only single-channel arrays" ); - - value = icvGetReal( ptr, type ); - } - return value; -} - - -// Returns specifed element of 2D array -CV_IMPL double -cvGetReal2D( const CvArr* arr, int y, int x ) -{ - double value = 0; - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - - if( (unsigned)y >= (unsigned)(mat->rows) || - (unsigned)x >= (unsigned)(mat->cols) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - type = CV_MAT_TYPE(mat->type); - ptr = mat->data.ptr + (size_t)y*mat->step + x*CV_ELEM_SIZE(type); - } - else if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr2D( arr, y, x, &type ); - else - { - int idx[] = { y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - } - - if( ptr ) - { - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvGetReal* support only single-channel arrays" ); - - value = icvGetReal( ptr, type ); - } - - return value; -} - - -// Returns specifed element of 3D array -CV_IMPL double -cvGetReal3D( const CvArr* arr, int z, int y, int x ) -{ - double value = 0; - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr3D( arr, z, y, x, &type ); - else - { - int idx[] = { z, y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - } - - if( ptr ) - { - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvGetReal* support only single-channel arrays" ); - - value = icvGetReal( ptr, type ); - } - - return value; -} - - -// Returns specifed element of nD array -CV_IMPL double -cvGetRealND( const CvArr* arr, const int* idx ) -{ - double value = 0; - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtrND( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, 0, 0 ); - - if( ptr ) - { - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvGetReal* support only single-channel arrays" ); - - value = icvGetReal( ptr, type ); - } - - return value; -} - - -// Assigns new value to specifed element of nD array given linear index -CV_IMPL void -cvSet1D( CvArr* arr, int idx, CvScalar scalar ) -{ - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr ) && CV_IS_MAT_CONT( ((CvMat*)arr)->type )) - { - CvMat* mat = (CvMat*)arr; - - type = CV_MAT_TYPE(mat->type); - int pix_size = CV_ELEM_SIZE(type); - - // the first part is mul-free sufficient check - // that the index is within the matrix - if( (unsigned)idx >= (unsigned)(mat->rows + mat->cols - 1) && - (unsigned)idx >= (unsigned)(mat->rows*mat->cols)) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else if( !CV_IS_SPARSE_MAT( arr ) || ((CvSparseMat*)arr)->dims > 1 ) - ptr = cvPtr1D( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, &idx, &type, -1, 0 ); - - cvScalarToRawData( &scalar, ptr, type ); -} - - -// Assigns new value to specifed element of 2D array -CV_IMPL void -cvSet2D( CvArr* arr, int y, int x, CvScalar scalar ) -{ - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - - if( (unsigned)y >= (unsigned)(mat->rows) || - (unsigned)x >= (unsigned)(mat->cols) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - type = CV_MAT_TYPE(mat->type); - ptr = mat->data.ptr + (size_t)y*mat->step + x*CV_ELEM_SIZE(type); - } - else if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr2D( arr, y, x, &type ); - else - { - int idx[] = { y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - } - cvScalarToRawData( &scalar, ptr, type ); -} - - -// Assigns new value to specifed element of 3D array -CV_IMPL void -cvSet3D( CvArr* arr, int z, int y, int x, CvScalar scalar ) -{ - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr3D( arr, z, y, x, &type ); - else - { - int idx[] = { z, y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - } - cvScalarToRawData( &scalar, ptr, type ); -} - - -// Assigns new value to specifed element of nD array -CV_IMPL void -cvSetND( CvArr* arr, const int* idx, CvScalar scalar ) -{ - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtrND( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - cvScalarToRawData( &scalar, ptr, type ); -} - - -CV_IMPL void -cvSetReal1D( CvArr* arr, int idx, double value ) -{ - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr ) && CV_IS_MAT_CONT( ((CvMat*)arr)->type )) - { - CvMat* mat = (CvMat*)arr; - - type = CV_MAT_TYPE(mat->type); - int pix_size = CV_ELEM_SIZE(type); - - // the first part is mul-free sufficient check - // that the index is within the matrix - if( (unsigned)idx >= (unsigned)(mat->rows + mat->cols - 1) && - (unsigned)idx >= (unsigned)(mat->rows*mat->cols)) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - ptr = mat->data.ptr + (size_t)idx*pix_size; - } - else if( !CV_IS_SPARSE_MAT( arr ) || ((CvSparseMat*)arr)->dims > 1 ) - ptr = cvPtr1D( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, &idx, &type, -1, 0 ); - - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvSetReal* support only single-channel arrays" ); - - if( ptr ) - icvSetReal( value, ptr, type ); -} - - -CV_IMPL void -cvSetReal2D( CvArr* arr, int y, int x, double value ) -{ - int type = 0; - uchar* ptr; - - if( CV_IS_MAT( arr )) - { - CvMat* mat = (CvMat*)arr; - - if( (unsigned)y >= (unsigned)(mat->rows) || - (unsigned)x >= (unsigned)(mat->cols) ) - CV_Error( CV_StsOutOfRange, "index is out of range" ); - - type = CV_MAT_TYPE(mat->type); - ptr = mat->data.ptr + (size_t)y*mat->step + x*CV_ELEM_SIZE(type); - } - else if( !CV_IS_SPARSE_MAT( arr )) - { - ptr = cvPtr2D( arr, y, x, &type ); - } - else - { - int idx[] = { y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - } - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvSetReal* support only single-channel arrays" ); - - if( ptr ) - icvSetReal( value, ptr, type ); -} - - -CV_IMPL void -cvSetReal3D( CvArr* arr, int z, int y, int x, double value ) -{ - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtr3D( arr, z, y, x, &type ); - else - { - int idx[] = { z, y, x }; - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - } - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvSetReal* support only single-channel arrays" ); - - if( ptr ) - icvSetReal( value, ptr, type ); -} - - -CV_IMPL void -cvSetRealND( CvArr* arr, const int* idx, double value ) -{ - int type = 0; - uchar* ptr; - - if( !CV_IS_SPARSE_MAT( arr )) - ptr = cvPtrND( arr, idx, &type ); - else - ptr = icvGetNodePtr( (CvSparseMat*)arr, idx, &type, -1, 0 ); - - if( CV_MAT_CN( type ) > 1 ) - CV_Error( CV_BadNumChannels, "cvSetReal* support only single-channel arrays" ); - - if( ptr ) - icvSetReal( value, ptr, type ); -} - - -CV_IMPL void -cvClearND( CvArr* arr, const int* idx ) -{ - if( !CV_IS_SPARSE_MAT( arr )) - { - int type; - uchar* ptr; - ptr = cvPtrND( arr, idx, &type ); - if( ptr ) - memset( ptr, 0, CV_ELEM_SIZE(type) ); - } - else - icvDeleteNode( (CvSparseMat*)arr, idx, 0 ); -} - - -/****************************************************************************************\ -* Conversion to CvMat or IplImage * -\****************************************************************************************/ - -// convert array (CvMat or IplImage) to CvMat -CV_IMPL CvMat* -cvGetMat( const CvArr* array, CvMat* mat, - int* pCOI, int allowND ) -{ - CvMat* result = 0; - CvMat* src = (CvMat*)array; - int coi = 0; - - if( !mat || !src ) - CV_Error( CV_StsNullPtr, "NULL array pointer is passed" ); - - if( CV_IS_MAT_HDR(src)) - { - if( !src->data.ptr ) - CV_Error( CV_StsNullPtr, "The matrix has NULL data pointer" ); - - result = (CvMat*)src; - } - else if( CV_IS_IMAGE_HDR(src) ) - { - const IplImage* img = (const IplImage*)src; - int depth, order; - - if( img->imageData == 0 ) - CV_Error( CV_StsNullPtr, "The image has NULL data pointer" ); - - depth = IPL2CV_DEPTH( img->depth ); - if( depth < 0 ) - CV_Error( CV_BadDepth, "" ); - - order = img->dataOrder & (img->nChannels > 1 ? -1 : 0); - - if( img->roi ) - { - if( order == IPL_DATA_ORDER_PLANE ) - { - int type = depth; - - if( img->roi->coi == 0 ) - CV_Error( CV_StsBadFlag, - "Images with planar data layout should be used with COI selected" ); - - cvInitMatHeader( mat, img->roi->height, - img->roi->width, type, - img->imageData + (img->roi->coi-1)*img->imageSize + - img->roi->yOffset*img->widthStep + - img->roi->xOffset*CV_ELEM_SIZE(type), - img->widthStep ); - } - else /* pixel order */ - { - int type = CV_MAKETYPE( depth, img->nChannels ); - coi = img->roi->coi; - - if( img->nChannels > CV_CN_MAX ) - CV_Error( CV_BadNumChannels, - "The image is interleaved and has over CV_CN_MAX channels" ); - - cvInitMatHeader( mat, img->roi->height, img->roi->width, - type, img->imageData + - img->roi->yOffset*img->widthStep + - img->roi->xOffset*CV_ELEM_SIZE(type), - img->widthStep ); - } - } - else - { - int type = CV_MAKETYPE( depth, img->nChannels ); - - if( order != IPL_DATA_ORDER_PIXEL ) - CV_Error( CV_StsBadFlag, "Pixel order should be used with coi == 0" ); - - cvInitMatHeader( mat, img->height, img->width, type, - img->imageData, img->widthStep ); - } - - result = mat; - } - else if( allowND && CV_IS_MATND_HDR(src) ) - { - CvMatND* matnd = (CvMatND*)src; - int i; - int size1 = matnd->dim[0].size, size2 = 1; - - if( !src->data.ptr ) - CV_Error( CV_StsNullPtr, "Input array has NULL data pointer" ); - - if( !CV_IS_MAT_CONT( matnd->type )) - CV_Error( CV_StsBadArg, "Only continuous nD arrays are supported here" ); - - if( matnd->dims > 2 ) - for( i = 1; i < matnd->dims; i++ ) - size2 *= matnd->dim[i].size; - else - size2 = matnd->dims == 1 ? 1 : matnd->dim[1].size; - - mat->refcount = 0; - mat->hdr_refcount = 0; - mat->data.ptr = matnd->data.ptr; - mat->rows = size1; - mat->cols = size2; - mat->type = CV_MAT_TYPE(matnd->type) | CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG; - mat->step = size2*CV_ELEM_SIZE(matnd->type); - mat->step &= size1 > 1 ? -1 : 0; - - icvCheckHuge( mat ); - result = mat; - } - else - CV_Error( CV_StsBadFlag, "Unrecognized or unsupported array type" ); - - if( pCOI ) - *pCOI = coi; - - return result; -} - - -CV_IMPL CvArr* -cvReshapeMatND( const CvArr* arr, - int sizeof_header, CvArr* _header, - int new_cn, int new_dims, int* new_sizes ) -{ - CvArr* result = 0; - int dims, coi = 0; - - if( !arr || !_header ) - CV_Error( CV_StsNullPtr, "NULL pointer to array or destination header" ); - - if( new_cn == 0 && new_dims == 0 ) - CV_Error( CV_StsBadArg, "None of array parameters is changed: dummy call?" ); - - dims = cvGetDims( arr ); - - if( new_dims == 0 ) - { - new_sizes = 0; - new_dims = dims; - } - else if( new_dims == 1 ) - { - new_sizes = 0; - } - else - { - if( new_dims <= 0 || new_dims > CV_MAX_DIM ) - CV_Error( CV_StsOutOfRange, "Non-positive or too large number of dimensions" ); - if( !new_sizes ) - CV_Error( CV_StsNullPtr, "New dimension sizes are not specified" ); - } - - if( new_dims <= 2 ) - { - CvMat* mat = (CvMat*)arr; - CvMat header; - int* refcount = 0; - int hdr_refcount = 0; - int total_width, new_rows, cn; - - if( sizeof_header != sizeof(CvMat) && sizeof_header != sizeof(CvMatND) ) - CV_Error( CV_StsBadArg, "The output header should be CvMat or CvMatND" ); - - if( mat == (CvMat*)_header ) - { - refcount = mat->refcount; - hdr_refcount = mat->hdr_refcount; - } - - if( !CV_IS_MAT( mat )) - mat = cvGetMat( mat, &header, &coi, 1 ); - - cn = CV_MAT_CN( mat->type ); - total_width = mat->cols * cn; - - if( new_cn == 0 ) - new_cn = cn; - - if( new_sizes ) - new_rows = new_sizes[0]; - else if( new_dims == 1 ) - new_rows = total_width*mat->rows/new_cn; - else - { - new_rows = mat->rows; - if( new_cn > total_width ) - new_rows = mat->rows * total_width / new_cn; - } - - if( new_rows != mat->rows ) - { - int total_size = total_width * mat->rows; - - if( !CV_IS_MAT_CONT( mat->type )) - CV_Error( CV_BadStep, - "The matrix is not continuous so the number of rows can not be changed" ); - - total_width = total_size / new_rows; - - if( total_width * new_rows != total_size ) - CV_Error( CV_StsBadArg, "The total number of matrix elements " - "is not divisible by the new number of rows" ); - } - - header.rows = new_rows; - header.cols = total_width / new_cn; - - if( header.cols * new_cn != total_width || - (new_sizes && header.cols != new_sizes[1]) ) - CV_Error( CV_StsBadArg, "The total matrix width is not " - "divisible by the new number of columns" ); - - header.type = (mat->type & ~CV_MAT_TYPE_MASK) | CV_MAKETYPE(mat->type, new_cn); - header.step = header.cols * CV_ELEM_SIZE(mat->type); - header.step &= new_rows > 1 ? -1 : 0; - header.refcount = refcount; - header.hdr_refcount = hdr_refcount; - - if( sizeof_header == sizeof(CvMat) ) - *(CvMat*)_header = header; - else - { - CvMatND* __header = (CvMatND*)_header; - cvGetMatND(&header, __header, 0); - if( new_dims > 0 ) - __header->dims = new_dims; - } - } - else - { - CvMatND* header = (CvMatND*)_header; - - if( sizeof_header != sizeof(CvMatND)) - CV_Error( CV_StsBadSize, "The output header should be CvMatND" ); - - if( !new_sizes ) - { - if( !CV_IS_MATND( arr )) - CV_Error( CV_StsBadArg, "The input array must be CvMatND" ); - - { - CvMatND* mat = (CvMatND*)arr; - assert( new_cn > 0 ); - int last_dim_size = mat->dim[mat->dims-1].size*CV_MAT_CN(mat->type); - int new_size = last_dim_size/new_cn; - - if( new_size*new_cn != last_dim_size ) - CV_Error( CV_StsBadArg, - "The last dimension full size is not divisible by new number of channels"); - - if( mat != header ) - { - memcpy( header, mat, sizeof(*header)); - header->refcount = 0; - header->hdr_refcount = 0; - } - - header->dim[header->dims-1].size = new_size; - header->type = (header->type & ~CV_MAT_TYPE_MASK) | CV_MAKETYPE(header->type, new_cn); - } - } - else - { - CvMatND stub; - CvMatND* mat = (CvMatND*)arr; - int i, size1, size2; - int step; - - if( new_cn != 0 ) - CV_Error( CV_StsBadArg, - "Simultaneous change of shape and number of channels is not supported. " - "Do it by 2 separate calls" ); - - if( !CV_IS_MATND( mat )) - { - cvGetMatND( mat, &stub, &coi ); - mat = &stub; - } - - if( CV_IS_MAT_CONT( mat->type )) - CV_Error( CV_StsBadArg, "Non-continuous nD arrays are not supported" ); - - size1 = mat->dim[0].size; - for( i = 1; i < dims; i++ ) - size1 *= mat->dim[i].size; - - size2 = 1; - for( i = 0; i < new_dims; i++ ) - { - if( new_sizes[i] <= 0 ) - CV_Error( CV_StsBadSize, - "One of new dimension sizes is non-positive" ); - size2 *= new_sizes[i]; - } - - if( size1 != size2 ) - CV_Error( CV_StsBadSize, - "Number of elements in the original and reshaped array is different" ); - - if( header != mat ) - { - header->refcount = 0; - header->hdr_refcount = 0; - } - - header->dims = new_dims; - header->type = mat->type; - header->data.ptr = mat->data.ptr; - step = CV_ELEM_SIZE(header->type); - - for( i = new_dims - 1; i >= 0; i-- ) - { - header->dim[i].size = new_sizes[i]; - header->dim[i].step = step; - step *= new_sizes[i]; - } - } - } - - if( coi ) - CV_Error( CV_BadCOI, "COI is not supported by this operation" ); - - result = _header; - return result; -} - - -CV_IMPL CvMat* -cvReshape( const CvArr* array, CvMat* header, - int new_cn, int new_rows ) -{ - CvMat* result = 0; - CvMat *mat = (CvMat*)array; - int total_width, new_width; - - if( !header ) - CV_Error( CV_StsNullPtr, "" ); - - if( !CV_IS_MAT( mat )) - { - int coi = 0; - mat = cvGetMat( mat, header, &coi, 1 ); - if( coi ) - CV_Error( CV_BadCOI, "COI is not supported" ); - } - - if( new_cn == 0 ) - new_cn = CV_MAT_CN(mat->type); - else if( (unsigned)(new_cn - 1) > 3 ) - CV_Error( CV_BadNumChannels, "" ); - - if( mat != header ) - { - int hdr_refcount = header->hdr_refcount; - *header = *mat; - header->refcount = 0; - header->hdr_refcount = hdr_refcount; - } - - total_width = mat->cols * CV_MAT_CN( mat->type ); - - if( (new_cn > total_width || total_width % new_cn != 0) && new_rows == 0 ) - new_rows = mat->rows * total_width / new_cn; - - if( new_rows == 0 || new_rows == mat->rows ) - { - header->rows = mat->rows; - header->step = mat->step; - } - else - { - int total_size = total_width * mat->rows; - if( !CV_IS_MAT_CONT( mat->type )) - CV_Error( CV_BadStep, - "The matrix is not continuous, thus its number of rows can not be changed" ); - - if( (unsigned)new_rows > (unsigned)total_size ) - CV_Error( CV_StsOutOfRange, "Bad new number of rows" ); - - total_width = total_size / new_rows; - - if( total_width * new_rows != total_size ) - CV_Error( CV_StsBadArg, "The total number of matrix elements " - "is not divisible by the new number of rows" ); - - header->rows = new_rows; - header->step = total_width * CV_ELEM_SIZE1(mat->type); - } - - new_width = total_width / new_cn; - - if( new_width * new_cn != total_width ) - CV_Error( CV_BadNumChannels, - "The total width is not divisible by the new number of channels" ); - - header->cols = new_width; - header->type = (mat->type & ~CV_MAT_TYPE_MASK) | CV_MAKETYPE(mat->type, new_cn); - - result = header; - return result; -} - - -// convert array (CvMat or IplImage) to IplImage -CV_IMPL IplImage* -cvGetImage( const CvArr* array, IplImage* img ) -{ - IplImage* result = 0; - const IplImage* src = (const IplImage*)array; - int depth; - - if( !img ) - CV_Error( CV_StsNullPtr, "" ); - - if( !CV_IS_IMAGE_HDR(src) ) - { - const CvMat* mat = (const CvMat*)src; - - if( !CV_IS_MAT_HDR(mat)) - CV_Error( CV_StsBadFlag, "" ); - - if( mat->data.ptr == 0 ) - CV_Error( CV_StsNullPtr, "" ); - - depth = cvIplDepth(mat->type); - - cvInitImageHeader( img, cvSize(mat->cols, mat->rows), - depth, CV_MAT_CN(mat->type) ); - cvSetData( img, mat->data.ptr, mat->step ); - - result = img; - } - else - { - result = (IplImage*)src; - } - - return result; -} - - -/****************************************************************************************\ -* IplImage-specific functions * -\****************************************************************************************/ - -static IplROI* icvCreateROI( int coi, int xOffset, int yOffset, int width, int height ) -{ - IplROI *roi = 0; - if( !CvIPL.createROI ) - { - roi = (IplROI*)cvAlloc( sizeof(*roi)); - - roi->coi = coi; - roi->xOffset = xOffset; - roi->yOffset = yOffset; - roi->width = width; - roi->height = height; - } - else - { - roi = CvIPL.createROI( coi, xOffset, yOffset, width, height ); - } - - return roi; -} - -static void -icvGetColorModel( int nchannels, const char** colorModel, const char** channelSeq ) -{ - static const char* tab[][2] = - { - {"GRAY", "GRAY"}, - {"",""}, - {"RGB","BGR"}, - {"RGB","BGRA"} - }; - - nchannels--; - *colorModel = *channelSeq = ""; - - if( (unsigned)nchannels <= 3 ) - { - *colorModel = tab[nchannels][0]; - *channelSeq = tab[nchannels][1]; - } -} - - -// create IplImage header -CV_IMPL IplImage * -cvCreateImageHeader( CvSize size, int depth, int channels ) -{ - IplImage *img = 0; - - if( !CvIPL.createHeader ) - { - img = (IplImage *)cvAlloc( sizeof( *img )); - cvInitImageHeader( img, size, depth, channels, IPL_ORIGIN_TL, - CV_DEFAULT_IMAGE_ROW_ALIGN ); - } - else - { - const char *colorModel, *channelSeq; - - icvGetColorModel( channels, &colorModel, &channelSeq ); - - img = CvIPL.createHeader( channels, 0, depth, (char*)colorModel, (char*)channelSeq, - IPL_DATA_ORDER_PIXEL, IPL_ORIGIN_TL, - CV_DEFAULT_IMAGE_ROW_ALIGN, - size.width, size.height, 0, 0, 0, 0 ); - } - - return img; -} - - -// create IplImage header and allocate underlying data -CV_IMPL IplImage * -cvCreateImage( CvSize size, int depth, int channels ) -{ - IplImage *img = cvCreateImageHeader( size, depth, channels ); - assert( img ); - cvCreateData( img ); - - return img; -} - - -// initialize IplImage header, allocated by the user -CV_IMPL IplImage* -cvInitImageHeader( IplImage * image, CvSize size, int depth, - int channels, int origin, int align ) -{ - const char *colorModel, *channelSeq; - - if( !image ) - CV_Error( CV_HeaderIsNull, "null pointer to header" ); - - memset( image, 0, sizeof( *image )); - image->nSize = sizeof( *image ); - - icvGetColorModel( channels, &colorModel, &channelSeq ); - strncpy( image->colorModel, colorModel, 4 ); - strncpy( image->channelSeq, channelSeq, 4 ); - - if( size.width < 0 || size.height < 0 ) - CV_Error( CV_BadROISize, "Bad input roi" ); - - if( (depth != (int)IPL_DEPTH_1U && depth != (int)IPL_DEPTH_8U && - depth != (int)IPL_DEPTH_8S && depth != (int)IPL_DEPTH_16U && - depth != (int)IPL_DEPTH_16S && depth != (int)IPL_DEPTH_32S && - depth != (int)IPL_DEPTH_32F && depth != (int)IPL_DEPTH_64F) || - channels < 0 ) - CV_Error( CV_BadDepth, "Unsupported format" ); - if( origin != CV_ORIGIN_BL && origin != CV_ORIGIN_TL ) - CV_Error( CV_BadOrigin, "Bad input origin" ); - - if( align != 4 && align != 8 ) - CV_Error( CV_BadAlign, "Bad input align" ); - - image->width = size.width; - image->height = size.height; - - if( image->roi ) - { - image->roi->coi = 0; - image->roi->xOffset = image->roi->yOffset = 0; - image->roi->width = size.width; - image->roi->height = size.height; - } - - image->nChannels = MAX( channels, 1 ); - image->depth = depth; - image->align = align; - image->widthStep = (((image->width * image->nChannels * - (image->depth & ~IPL_DEPTH_SIGN) + 7)/8)+ align - 1) & (~(align - 1)); - image->origin = origin; - image->imageSize = image->widthStep * image->height; - - return image; -} - - -CV_IMPL void -cvReleaseImageHeader( IplImage** image ) -{ - if( !image ) - CV_Error( CV_StsNullPtr, "" ); - - if( *image ) - { - IplImage* img = *image; - *image = 0; - - if( !CvIPL.deallocate ) - { - cvFree( &img->roi ); - cvFree( &img ); - } - else - { - CvIPL.deallocate( img, IPL_IMAGE_HEADER | IPL_IMAGE_ROI ); - } - } -} - - -CV_IMPL void -cvReleaseImage( IplImage ** image ) -{ - if( !image ) - CV_Error( CV_StsNullPtr, "" ); - - if( *image ) - { - IplImage* img = *image; - *image = 0; - - cvReleaseData( img ); - cvReleaseImageHeader( &img ); - } -} - - -CV_IMPL void -cvSetImageROI( IplImage* image, CvRect rect ) -{ - if( !image ) - CV_Error( CV_HeaderIsNull, "" ); - - // allow zero ROI width or height - CV_Assert( rect.width >= 0 && rect.height >= 0 && - rect.x < image->width && rect.y < image->height && - rect.x + rect.width >= (int)(rect.width > 0) && - rect.y + rect.height >= (int)(rect.height > 0) ); - - rect.width += rect.x; - rect.height += rect.y; - - rect.x = std::max(rect.x, 0); - rect.y = std::max(rect.y, 0); - rect.width = std::min(rect.width, image->width); - rect.height = std::min(rect.height, image->height); - - rect.width -= rect.x; - rect.height -= rect.y; - - if( image->roi ) - { - image->roi->xOffset = rect.x; - image->roi->yOffset = rect.y; - image->roi->width = rect.width; - image->roi->height = rect.height; - } - else - image->roi = icvCreateROI( 0, rect.x, rect.y, rect.width, rect.height ); -} - - -CV_IMPL void -cvResetImageROI( IplImage* image ) -{ - if( !image ) - CV_Error( CV_HeaderIsNull, "" ); - - if( image->roi ) - { - if( !CvIPL.deallocate ) - { - cvFree( &image->roi ); - } - else - { - CvIPL.deallocate( image, IPL_IMAGE_ROI ); - image->roi = 0; - } - } -} - - -CV_IMPL CvRect -cvGetImageROI( const IplImage* img ) -{ - CvRect rect = { 0, 0, 0, 0 }; - if( !img ) - CV_Error( CV_StsNullPtr, "Null pointer to image" ); - - if( img->roi ) - rect = cvRect( img->roi->xOffset, img->roi->yOffset, - img->roi->width, img->roi->height ); - else - rect = cvRect( 0, 0, img->width, img->height ); - - return rect; -} - - -CV_IMPL void -cvSetImageCOI( IplImage* image, int coi ) -{ - if( !image ) - CV_Error( CV_HeaderIsNull, "" ); - - if( (unsigned)coi > (unsigned)(image->nChannels) ) - CV_Error( CV_BadCOI, "" ); - - if( image->roi || coi != 0 ) - { - if( image->roi ) - { - image->roi->coi = coi; - } - else - { - image->roi = icvCreateROI( coi, 0, 0, image->width, image->height ); - } - } -} - - -CV_IMPL int -cvGetImageCOI( const IplImage* image ) -{ - if( !image ) - CV_Error( CV_HeaderIsNull, "" ); - - return image->roi ? image->roi->coi : 0; -} - - -CV_IMPL IplImage* -cvCloneImage( const IplImage* src ) -{ - IplImage* dst = 0; - - if( !CV_IS_IMAGE_HDR( src )) - CV_Error( CV_StsBadArg, "Bad image header" ); - - if( !CvIPL.cloneImage ) - { - dst = (IplImage*)cvAlloc( sizeof(*dst)); - - memcpy( dst, src, sizeof(*src)); - dst->imageData = dst->imageDataOrigin = 0; - dst->roi = 0; - - if( src->roi ) - { - dst->roi = icvCreateROI( src->roi->coi, src->roi->xOffset, - src->roi->yOffset, src->roi->width, src->roi->height ); - } - - if( src->imageData ) - { - int size = src->imageSize; - cvCreateData( dst ); - memcpy( dst->imageData, src->imageData, size ); - } - } - else - dst = CvIPL.cloneImage( src ); - - return dst; -} - - -/****************************************************************************************\ -* Additional operations on CvTermCriteria * -\****************************************************************************************/ - -CV_IMPL CvTermCriteria -cvCheckTermCriteria( CvTermCriteria criteria, double default_eps, - int default_max_iters ) -{ - CvTermCriteria crit; - - crit.type = CV_TERMCRIT_ITER|CV_TERMCRIT_EPS; - crit.max_iter = default_max_iters; - crit.epsilon = (float)default_eps; - - if( (criteria.type & ~(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER)) != 0 ) - CV_Error( CV_StsBadArg, - "Unknown type of term criteria" ); - - if( (criteria.type & CV_TERMCRIT_ITER) != 0 ) - { - if( criteria.max_iter <= 0 ) - CV_Error( CV_StsBadArg, - "Iterations flag is set and maximum number of iterations is <= 0" ); - crit.max_iter = criteria.max_iter; - } - - if( (criteria.type & CV_TERMCRIT_EPS) != 0 ) - { - if( criteria.epsilon < 0 ) - CV_Error( CV_StsBadArg, "Accuracy flag is set and epsilon is < 0" ); - - crit.epsilon = criteria.epsilon; - } - - if( (criteria.type & (CV_TERMCRIT_EPS | CV_TERMCRIT_ITER)) == 0 ) - CV_Error( CV_StsBadArg, - "Neither accuracy nor maximum iterations " - "number flags are set in criteria type" ); - - crit.epsilon = (float)MAX( 0, crit.epsilon ); - crit.max_iter = MAX( 1, crit.max_iter ); - - return crit; -} - -namespace cv -{ - -template<> void Ptr::delete_obj() -{ cvReleaseMat(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseImage(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseMatND(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseSparseMat(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseMemStorage(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseFileStorage(&obj); } - -} - -/* End of file. */ diff --git a/modules/core/src/cmdparser.cpp b/modules/core/src/cmdparser.cpp deleted file mode 100644 index ecc0d29..0000000 --- a/modules/core/src/cmdparser.cpp +++ /dev/null @@ -1,398 +0,0 @@ -#include "precomp.hpp" - -#include -#include - -using namespace std; -using namespace cv; - -namespace { -void helpParser() -{ - printf("\nThe CommandLineParser class is designed for command line arguments parsing\n" - "Keys map: \n" - "Before you start to work with CommandLineParser you have to create a map for keys.\n" - " It will look like this\n" - " const char* keys =\n" - " {\n" - " { s| string| 123asd |string parameter}\n" - " { d| digit | 100 |digit parameter }\n" - " { c|noCamera|false |without camera }\n" - " { 1| |some text|help }\n" - " { 2| |333 |another help }\n" - " };\n" - "Usage syntax: \n" - " \"{\" - start of parameter string.\n" - " \"}\" - end of parameter string\n" - " \"|\" - separator between short name, full name, default value and help\n" - "Supported syntax: \n" - " --key1=arg1 \n" - " -key2=arg2 \n" - "Usage: \n" - " Imagine that the input parameters are next:\n" - " -s=string_value --digit=250 --noCamera lena.jpg 10000\n" - " CommandLineParser parser(argc, argv, keys) - create a parser object\n" - " parser.get(\"s\" or \"string\") will return you first parameter value\n" - " parser.get(\"s\", false or \"string\", false) will return you first parameter value\n" - " without spaces in end and begin\n" - " parser.get(\"d\" or \"digit\") will return you second parameter value.\n" - " It also works with 'unsigned int', 'double', and 'float' types>\n" - " parser.get(\"c\" or \"noCamera\") will return you true .\n" - " If you enter this key in commandline>\n" - " It return you false otherwise.\n" - " parser.get(\"1\") will return you the first argument without parameter (lena.jpg) \n" - " parser.get(\"2\") will return you the second argument without parameter (10000)\n" - " It also works with 'unsigned int', 'double', and 'float' types \n" - ); -} - -vector split_string(const string& str, const string& delimiters) -{ - vector res; - - string split_str = str; - size_t pos_delim = split_str.find(delimiters); - - while ( pos_delim != string::npos) - { - if (pos_delim == 0) - { - res.push_back(""); - split_str.erase(0, 1); - } - else - { - res.push_back(split_str.substr(0, pos_delim)); - split_str.erase(0, pos_delim + 1); - } - - pos_delim = split_str.find(delimiters); - } - - res.push_back(split_str); - - return res; -} - -string del_space(string name) -{ - while ((name.find_first_of(' ') == 0) && (name.length() > 0)) - name.erase(0, 1); - - while ((name.find_last_of(' ') == (name.length() - 1)) && (name.length() > 0)) - name.erase(name.end() - 1, name.end()); - - return name; -} - -}//namespace - -static bool keyIsNumber(const std::string & option, size_t start) -{ - bool isNumber = true; - size_t end = option.find_first_of('=', start); - end = option.npos == end ? option.length() : end; - - for ( ; start < end; ++start) - if (!isdigit(option[start])) - { - isNumber = false; - break; - } - - return isNumber; -} - -CommandLineParser::CommandLineParser(int argc, const char* const argv[], const char* keys) -{ - std::string keys_buffer; - std::string values_buffer; - std::string buffer; - std::string curName; - std::vector keysVector; - std::vector paramVector; - std::map >::iterator it; - size_t flagPosition; - int currentIndex = 1; - //bool isFound = false; - bool withNoKey = false; - bool hasValueThroughEq = false; - - keys_buffer = keys; - while (!keys_buffer.empty()) - { - - flagPosition = keys_buffer.find_first_of('}'); - flagPosition++; - buffer = keys_buffer.substr(0, flagPosition); - keys_buffer.erase(0, flagPosition); - - flagPosition = buffer.find('{'); - if (flagPosition != buffer.npos) - buffer.erase(flagPosition, (flagPosition + 1)); - - flagPosition = buffer.find('}'); - if (flagPosition != buffer.npos) - buffer.erase(flagPosition); - - paramVector = split_string(buffer, "|"); - while (paramVector.size() < 4) paramVector.push_back(""); - - buffer = paramVector[0]; - buffer += '|' + paramVector[1]; - - //if (buffer == "") CV_ERROR(CV_StsBadArg, "In CommandLineParser need set short and full name"); - - paramVector.erase(paramVector.begin(), paramVector.begin() + 2); - data[buffer] = paramVector; - } - - buffer.clear(); - keys_buffer.clear(); - paramVector.clear(); - for (int i = 1; i < argc; i++) - { - if (!argv[i]) - break; - curName = argv[i]; - - size_t nondash = curName.find_first_not_of("-"); - if (nondash == 0 || nondash == curName.npos || keyIsNumber(curName, nondash)) - withNoKey = true; - else - curName.erase(0, nondash); - - if (curName.find('=') != curName.npos) - { - hasValueThroughEq = true; - buffer = curName; - curName.erase(curName.find('=')); - buffer.erase(0, (buffer.find('=') + 1)); - } - - values_buffer = del_space(values_buffer); - - for(it = data.begin(); it != data.end(); it++) - { - keys_buffer = it->first; - keysVector = split_string(keys_buffer, "|"); - - for (size_t j = 0; j < keysVector.size(); j++) keysVector[j] = del_space(keysVector[j]); - - values_buffer = it->second[0]; - if (((curName == keysVector[0]) || (curName == keysVector[1])) && hasValueThroughEq) - { - it->second[0] = buffer; - //isFound = true; - break; - } - - if (!hasValueThroughEq && ((curName == keysVector[0]) || (curName == keysVector[1])) - && ( - values_buffer.find("false") != values_buffer.npos || - values_buffer == "" - )) - { - it->second[0] = "true"; - //isFound = true; - break; - } - - if (!hasValueThroughEq && (values_buffer.find("false") == values_buffer.npos) && - ((curName == keysVector[0]) || (curName == keysVector[1]))) - { - it->second[0] = argv[++i]; - //isFound = true; - break; - } - - - if (withNoKey) - { - std::string noKeyStr = it->first; - if(atoi(noKeyStr.c_str()) == currentIndex) - { - it->second[0] = curName; - currentIndex++; - //isFound = true; - break; - } - } - } - - withNoKey = false; - hasValueThroughEq = false; - //isFound = false; - } -} - -bool CommandLineParser::has(const std::string& keys) -{ - std::map >::iterator it; - std::vector keysVector; - - for(it = data.begin(); it != data.end(); it++) - { - keysVector = split_string(it->first, "|"); - for (size_t i = 0; i < keysVector.size(); i++) keysVector[i] = del_space(keysVector[i]); - - if (keysVector.size() == 1) keysVector.push_back(""); - - if ((del_space(keys).compare(keysVector[0]) == 0) || - (del_space(keys).compare(keysVector[1]) == 0)) - return true; - } - - return false; -} - -std::string CommandLineParser::getString(const std::string& keys) -{ - std::map >::iterator it; - std::vector valueVector; - - for(it = data.begin(); it != data.end(); it++) - { - valueVector = split_string(it->first, "|"); - for (size_t i = 0; i < valueVector.size(); i++) valueVector[i] = del_space(valueVector[i]); - - if (valueVector.size() == 1) valueVector.push_back(""); - - if ((del_space(keys).compare(valueVector[0]) == 0) || - (del_space(keys).compare(valueVector[1]) == 0)) - return it->second[0]; - } - return string(); -} - -template - _Tp CommandLineParser::fromStringNumber(const std::string& str)//the default conversion function for numbers -{ - return getData<_Tp>(str); -} - - void CommandLineParser::printParams() - { - int col_p = 30; - int col_d = 50; - - std::map >::iterator it; - std::vector keysVector; - std::string buf; - for(it = data.begin(); it != data.end(); it++) - { - keysVector = split_string(it->first, "|"); - for (size_t i = 0; i < keysVector.size(); i++) keysVector[i] = del_space(keysVector[i]); - - cout << " "; - buf = ""; - if (keysVector[0] != "") - { - buf = "-" + keysVector[0]; - if (keysVector[1] != "") buf += ", --" + keysVector[1]; - } - else if (keysVector[1] != "") buf += "--" + keysVector[1]; - if (del_space(it->second[0]) != "") buf += "=[" + del_space(it->second[0]) + "]"; - - cout << setw(col_p-2) << left << buf; - - if ((int)buf.length() > col_p-2) - { - cout << endl << " "; - cout << setw(col_p-2) << left << " "; - } - - buf = ""; - if (del_space(it->second[1]) != "") buf += del_space(it->second[1]); - - for(;;) - { - bool tr = ((int)buf.length() > col_d-2) ? true: false; - std::string::size_type pos = 0; - - if (tr) - { - pos = buf.find_first_of(' '); - for(;;) - { - if (buf.find_first_of(' ', pos + 1 ) < (std::string::size_type)(col_d-2) && - buf.find_first_of(' ', pos + 1 ) != std::string::npos) - pos = buf.find_first_of(' ', pos + 1); - else - break; - } - pos++; - cout << setw(col_d-2) << left << buf.substr(0, pos) << endl; - } - else - { - cout << setw(col_d-2) << left << buf<< endl; - break; - } - - buf.erase(0, pos); - cout << " "; - cout << setw(col_p-2) << left << " "; - } - } - } - -template<> -bool CommandLineParser::get(const std::string& name, bool space_delete) -{ - std::string str_buf = getString(name); - - if (space_delete && str_buf != "") - { - str_buf = del_space(str_buf); - } - - if (str_buf == "true") - return true; - - return false; -} -template<> -std::string CommandLineParser::analyzeValue(const std::string& str, bool space_delete) -{ - if (space_delete) - { - return del_space(str); - } - return str; -} - -template<> -int CommandLineParser::analyzeValue(const std::string& str, bool /*space_delete*/) -{ - return fromStringNumber(str); -} - -template<> -unsigned int CommandLineParser::analyzeValue(const std::string& str, bool /*space_delete*/) -{ - return fromStringNumber(str); -} - -template<> -uint64 CommandLineParser::analyzeValue(const std::string& str, bool /*space_delete*/) -{ - return fromStringNumber(str); -} - -template<> -float CommandLineParser::analyzeValue(const std::string& str, bool /*space_delete*/) -{ - return fromStringNumber(str); -} - -template<> -double CommandLineParser::analyzeValue(const std::string& str, bool /*space_delete*/) -{ - return fromStringNumber(str); -} diff --git a/modules/core/src/convert.cpp b/modules/core/src/convert.cpp deleted file mode 100644 index c37208b..0000000 --- a/modules/core/src/convert.cpp +++ /dev/null @@ -1,1394 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -/****************************************************************************************\ -* split & merge * -\****************************************************************************************/ - -template static void -split_( const T* src, T** dst, int len, int cn ) -{ - int k = cn % 4 ? cn % 4 : 4; - int i, j; - if( k == 1 ) - { - T* dst0 = dst[0]; - for( i = j = 0; i < len; i++, j += cn ) - dst0[i] = src[j]; - } - else if( k == 2 ) - { - T *dst0 = dst[0], *dst1 = dst[1]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst0[i] = src[j]; - dst1[i] = src[j+1]; - } - } - else if( k == 3 ) - { - T *dst0 = dst[0], *dst1 = dst[1], *dst2 = dst[2]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst0[i] = src[j]; - dst1[i] = src[j+1]; - dst2[i] = src[j+2]; - } - } - else - { - T *dst0 = dst[0], *dst1 = dst[1], *dst2 = dst[2], *dst3 = dst[3]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst0[i] = src[j]; dst1[i] = src[j+1]; - dst2[i] = src[j+2]; dst3[i] = src[j+3]; - } - } - - for( ; k < cn; k += 4 ) - { - T *dst0 = dst[k], *dst1 = dst[k+1], *dst2 = dst[k+2], *dst3 = dst[k+3]; - for( i = 0, j = k; i < len; i++, j += cn ) - { - dst0[i] = src[j]; dst1[i] = src[j+1]; - dst2[i] = src[j+2]; dst3[i] = src[j+3]; - } - } -} - -template static void -merge_( const T** src, T* dst, int len, int cn ) -{ - int k = cn % 4 ? cn % 4 : 4; - int i, j; - if( k == 1 ) - { - const T* src0 = src[0]; - for( i = j = 0; i < len; i++, j += cn ) - dst[j] = src0[i]; - } - else if( k == 2 ) - { - const T *src0 = src[0], *src1 = src[1]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst[j] = src0[i]; - dst[j+1] = src1[i]; - } - } - else if( k == 3 ) - { - const T *src0 = src[0], *src1 = src[1], *src2 = src[2]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst[j] = src0[i]; - dst[j+1] = src1[i]; - dst[j+2] = src2[i]; - } - } - else - { - const T *src0 = src[0], *src1 = src[1], *src2 = src[2], *src3 = src[3]; - for( i = j = 0; i < len; i++, j += cn ) - { - dst[j] = src0[i]; dst[j+1] = src1[i]; - dst[j+2] = src2[i]; dst[j+3] = src3[i]; - } - } - - for( ; k < cn; k += 4 ) - { - const T *src0 = src[k], *src1 = src[k+1], *src2 = src[k+2], *src3 = src[k+3]; - for( i = 0, j = k; i < len; i++, j += cn ) - { - dst[j] = src0[i]; dst[j+1] = src1[i]; - dst[j+2] = src2[i]; dst[j+3] = src3[i]; - } - } -} - -static void split8u(const uchar* src, uchar** dst, int len, int cn ) -{ - split_(src, dst, len, cn); -} - -static void split16u(const ushort* src, ushort** dst, int len, int cn ) -{ - split_(src, dst, len, cn); -} - -static void split32s(const int* src, int** dst, int len, int cn ) -{ - split_(src, dst, len, cn); -} - -static void split64s(const int64* src, int64** dst, int len, int cn ) -{ - split_(src, dst, len, cn); -} - -static void merge8u(const uchar** src, uchar* dst, int len, int cn ) -{ - merge_(src, dst, len, cn); -} - -static void merge16u(const ushort** src, ushort* dst, int len, int cn ) -{ - merge_(src, dst, len, cn); -} - -static void merge32s(const int** src, int* dst, int len, int cn ) -{ - merge_(src, dst, len, cn); -} - -static void merge64s(const int64** src, int64* dst, int len, int cn ) -{ - merge_(src, dst, len, cn); -} - -typedef void (*SplitFunc)(const uchar* src, uchar** dst, int len, int cn); -typedef void (*MergeFunc)(const uchar** src, uchar* dst, int len, int cn); - -static SplitFunc getSplitFunc(int depth) -{ - static SplitFunc splitTab[] = - { - (SplitFunc)GET_OPTIMIZED(split8u), (SplitFunc)GET_OPTIMIZED(split8u), (SplitFunc)GET_OPTIMIZED(split16u), (SplitFunc)GET_OPTIMIZED(split16u), - (SplitFunc)GET_OPTIMIZED(split32s), (SplitFunc)GET_OPTIMIZED(split32s), (SplitFunc)GET_OPTIMIZED(split64s), 0 - }; - - return splitTab[depth]; -} - -static MergeFunc getMergeFunc(int depth) -{ - static MergeFunc mergeTab[] = - { - (MergeFunc)GET_OPTIMIZED(merge8u), (MergeFunc)GET_OPTIMIZED(merge8u), (MergeFunc)GET_OPTIMIZED(merge16u), (MergeFunc)GET_OPTIMIZED(merge16u), - (MergeFunc)GET_OPTIMIZED(merge32s), (MergeFunc)GET_OPTIMIZED(merge32s), (MergeFunc)GET_OPTIMIZED(merge64s), 0 - }; - - return mergeTab[depth]; -} - -} - -void cv::split(const Mat& src, Mat* mv) -{ - int k, depth = src.depth(), cn = src.channels(); - if( cn == 1 ) - { - src.copyTo(mv[0]); - return; - } - - SplitFunc func = getSplitFunc(depth); - CV_Assert( func != 0 ); - - int esz = (int)src.elemSize(), esz1 = (int)src.elemSize1(); - int blocksize0 = (BLOCK_SIZE + esz-1)/esz; - AutoBuffer _buf((cn+1)*(sizeof(Mat*) + sizeof(uchar*)) + 16); - const Mat** arrays = (const Mat**)(uchar*)_buf; - uchar** ptrs = (uchar**)alignPtr(arrays + cn + 1, 16); - - arrays[0] = &src; - for( k = 0; k < cn; k++ ) - { - mv[k].create(src.dims, src.size, depth); - arrays[k+1] = &mv[k]; - } - - NAryMatIterator it(arrays, ptrs, cn+1); - int total = (int)it.size, blocksize = cn <= 4 ? total : std::min(total, blocksize0); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( int j = 0; j < total; j += blocksize ) - { - int bsz = std::min(total - j, blocksize); - func( ptrs[0], &ptrs[1], bsz, cn ); - - if( j + blocksize < total ) - { - ptrs[0] += bsz*esz; - for( k = 0; k < cn; k++ ) - ptrs[k+1] += bsz*esz1; - } - } - } -} - -void cv::split(InputArray _m, OutputArrayOfArrays _mv) -{ - Mat m = _m.getMat(); - if( m.empty() ) - { - _mv.release(); - return; - } - CV_Assert( !_mv.fixedType() || CV_MAT_TYPE(_mv.flags) == m.depth() ); - _mv.create(m.channels(), 1, m.depth()); - Mat* dst = &_mv.getMatRef(0); - split(m, dst); -} - -void cv::split(const Mat& src, vector& mv) -{ - split(_InputArray(src), _OutputArray(mv)); -} - -void cv::merge(const Mat* mv, size_t n, OutputArray _dst) -{ - CV_Assert( mv && n > 0 ); - - int depth = mv[0].depth(); - bool allch1 = true; - int k, cn = 0; - size_t i; - - for( i = 0; i < n; i++ ) - { - CV_Assert(mv[i].size == mv[0].size && mv[i].depth() == depth); - allch1 = allch1 && mv[i].channels() == 1; - cn += mv[i].channels(); - } - - CV_Assert( 0 < cn && cn <= CV_CN_MAX ); - _dst.create(mv[0].dims, mv[0].size, CV_MAKETYPE(depth, cn)); - Mat dst = _dst.getMat(); - - if( n == 1 ) - { - mv[0].copyTo(dst); - return; - } - - if( !allch1 ) - { - AutoBuffer pairs(cn*2); - int j, ni=0; - - for( i = 0, j = 0; i < n; i++, j += ni ) - { - ni = mv[i].channels(); - for( k = 0; k < ni; k++ ) - { - pairs[(j+k)*2] = j + k; - pairs[(j+k)*2+1] = j + k; - } - } - mixChannels( mv, n, &dst, 1, &pairs[0], cn ); - return; - } - - size_t esz = dst.elemSize(), esz1 = dst.elemSize1(); - int blocksize0 = (int)((BLOCK_SIZE + esz-1)/esz); - AutoBuffer _buf((cn+1)*(sizeof(Mat*) + sizeof(uchar*)) + 16); - const Mat** arrays = (const Mat**)(uchar*)_buf; - uchar** ptrs = (uchar**)alignPtr(arrays + cn + 1, 16); - - arrays[0] = &dst; - for( k = 0; k < cn; k++ ) - arrays[k+1] = &mv[k]; - - NAryMatIterator it(arrays, ptrs, cn+1); - int total = (int)it.size, blocksize = cn <= 4 ? total : std::min(total, blocksize0); - MergeFunc func = getMergeFunc(depth); - - for( i = 0; i < it.nplanes; i++, ++it ) - { - for( int j = 0; j < total; j += blocksize ) - { - int bsz = std::min(total - j, blocksize); - func( (const uchar**)&ptrs[1], ptrs[0], bsz, cn ); - - if( j + blocksize < total ) - { - ptrs[0] += bsz*esz; - for( int t = 0; t < cn; t++ ) - ptrs[t+1] += bsz*esz1; - } - } - } -} - -void cv::merge(InputArrayOfArrays _mv, OutputArray _dst) -{ - vector mv; - _mv.getMatVector(mv); - merge(!mv.empty() ? &mv[0] : 0, mv.size(), _dst); -} - -void cv::merge(const vector& _mv, OutputArray _dst) -{ - merge(_InputArray(_mv), _dst); -} - -/****************************************************************************************\ -* Generalized split/merge: mixing channels * -\****************************************************************************************/ - -namespace cv -{ - -template static void -mixChannels_( const T** src, const int* sdelta, - T** dst, const int* ddelta, - int len, int npairs ) -{ - int i, k; - for( k = 0; k < npairs; k++ ) - { - const T* s = src[k]; - T* d = dst[k]; - int ds = sdelta[k], dd = ddelta[k]; - if( s ) - { - for( i = 0; i <= len - 2; i += 2, s += ds*2, d += dd*2 ) - { - T t0 = s[0], t1 = s[ds]; - d[0] = t0; d[dd] = t1; - } - if( i < len ) - d[0] = s[0]; - } - else - { - for( i = 0; i <= len - 2; i += 2, d += dd*2 ) - d[0] = d[dd] = 0; - if( i < len ) - d[0] = 0; - } - } -} - - -static void mixChannels8u( const uchar** src, const int* sdelta, - uchar** dst, const int* ddelta, - int len, int npairs ) -{ - mixChannels_(src, sdelta, dst, ddelta, len, npairs); -} - -static void mixChannels16u( const ushort** src, const int* sdelta, - ushort** dst, const int* ddelta, - int len, int npairs ) -{ - mixChannels_(src, sdelta, dst, ddelta, len, npairs); -} - -static void mixChannels32s( const int** src, const int* sdelta, - int** dst, const int* ddelta, - int len, int npairs ) -{ - mixChannels_(src, sdelta, dst, ddelta, len, npairs); -} - -static void mixChannels64s( const int64** src, const int* sdelta, - int64** dst, const int* ddelta, - int len, int npairs ) -{ - mixChannels_(src, sdelta, dst, ddelta, len, npairs); -} - -typedef void (*MixChannelsFunc)( const uchar** src, const int* sdelta, - uchar** dst, const int* ddelta, int len, int npairs ); - -static MixChannelsFunc getMixchFunc(int depth) -{ - static MixChannelsFunc mixchTab[] = - { - (MixChannelsFunc)mixChannels8u, (MixChannelsFunc)mixChannels8u, (MixChannelsFunc)mixChannels16u, - (MixChannelsFunc)mixChannels16u, (MixChannelsFunc)mixChannels32s, (MixChannelsFunc)mixChannels32s, - (MixChannelsFunc)mixChannels64s, 0 - }; - - return mixchTab[depth]; -} - -} - -void cv::mixChannels( const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs ) -{ - if( npairs == 0 ) - return; - CV_Assert( src && nsrcs > 0 && dst && ndsts > 0 && fromTo && npairs > 0 ); - - size_t i, j, k, esz1 = dst[0].elemSize1(); - int depth = dst[0].depth(); - - AutoBuffer buf((nsrcs + ndsts + 1)*(sizeof(Mat*) + sizeof(uchar*)) + npairs*(sizeof(uchar*)*2 + sizeof(int)*6)); - const Mat** arrays = (const Mat**)(uchar*)buf; - uchar** ptrs = (uchar**)(arrays + nsrcs + ndsts); - const uchar** srcs = (const uchar**)(ptrs + nsrcs + ndsts + 1); - uchar** dsts = (uchar**)(srcs + npairs); - int* tab = (int*)(dsts + npairs); - int *sdelta = (int*)(tab + npairs*4), *ddelta = sdelta + npairs; - - for( i = 0; i < nsrcs; i++ ) - arrays[i] = &src[i]; - for( i = 0; i < ndsts; i++ ) - arrays[i + nsrcs] = &dst[i]; - ptrs[nsrcs + ndsts] = 0; - - for( i = 0; i < npairs; i++ ) - { - int i0 = fromTo[i*2], i1 = fromTo[i*2+1]; - if( i0 >= 0 ) - { - for( j = 0; j < nsrcs; i0 -= src[j].channels(), j++ ) - if( i0 < src[j].channels() ) - break; - CV_Assert(j < nsrcs && src[j].depth() == depth); - tab[i*4] = (int)j; tab[i*4+1] = (int)(i0*esz1); - sdelta[i] = src[j].channels(); - } - else - { - tab[i*4] = (int)(nsrcs + ndsts); tab[i*4+1] = 0; - sdelta[i] = 0; - } - - for( j = 0; j < ndsts; i1 -= dst[j].channels(), j++ ) - if( i1 < dst[j].channels() ) - break; - CV_Assert(i1 >= 0 && j < ndsts && dst[j].depth() == depth); - tab[i*4+2] = (int)(j + nsrcs); tab[i*4+3] = (int)(i1*esz1); - ddelta[i] = dst[j].channels(); - } - - NAryMatIterator it(arrays, ptrs, (int)(nsrcs + ndsts)); - int total = (int)it.size, blocksize = std::min(total, (int)((BLOCK_SIZE + esz1-1)/esz1)); - MixChannelsFunc func = getMixchFunc(depth); - - for( i = 0; i < it.nplanes; i++, ++it ) - { - for( k = 0; k < npairs; k++ ) - { - srcs[k] = ptrs[tab[k*4]] + tab[k*4+1]; - dsts[k] = ptrs[tab[k*4+2]] + tab[k*4+3]; - } - - for( int t = 0; t < total; t += blocksize ) - { - int bsz = std::min(total - t, blocksize); - func( srcs, sdelta, dsts, ddelta, bsz, (int)npairs ); - - if( t + blocksize < total ) - for( k = 0; k < npairs; k++ ) - { - srcs[k] += blocksize*sdelta[k]*esz1; - dsts[k] += blocksize*ddelta[k]*esz1; - } - } - } -} - - -void cv::mixChannels(const vector& src, vector& dst, - const int* fromTo, size_t npairs) -{ - mixChannels(!src.empty() ? &src[0] : 0, src.size(), - !dst.empty() ? &dst[0] : 0, dst.size(), fromTo, npairs); -} - -void cv::mixChannels(InputArrayOfArrays src, InputArrayOfArrays dst, - const vector& fromTo) -{ - if(fromTo.empty()) - return; - bool src_is_mat = src.kind() != _InputArray::STD_VECTOR_MAT && - src.kind() != _InputArray::STD_VECTOR_VECTOR; - bool dst_is_mat = dst.kind() != _InputArray::STD_VECTOR_MAT && - dst.kind() != _InputArray::STD_VECTOR_VECTOR; - int i; - int nsrc = src_is_mat ? 1 : (int)src.total(); - int ndst = dst_is_mat ? 1 : (int)dst.total(); - - CV_Assert(fromTo.size()%2 == 0 && nsrc > 0 && ndst > 0); - cv::AutoBuffer _buf(nsrc + ndst); - Mat* buf = _buf; - for( i = 0; i < nsrc; i++ ) - buf[i] = src.getMat(src_is_mat ? -1 : i); - for( i = 0; i < ndst; i++ ) - buf[nsrc + i] = dst.getMat(dst_is_mat ? -1 : i); - mixChannels(&buf[0], nsrc, &buf[nsrc], ndst, &fromTo[0], fromTo.size()/2); -} - -void cv::extractChannel(InputArray _src, OutputArray _dst, int coi) -{ - Mat src = _src.getMat(); - CV_Assert( 0 <= coi && coi < src.channels() ); - _dst.create(src.dims, &src.size[0], src.depth()); - Mat dst = _dst.getMat(); - int ch[] = { coi, 0 }; - mixChannels(&src, 1, &dst, 1, ch, 1); -} - -void cv::insertChannel(InputArray _src, InputOutputArray _dst, int coi) -{ - Mat src = _src.getMat(), dst = _dst.getMat(); - CV_Assert( src.size == dst.size && src.depth() == dst.depth() ); - CV_Assert( 0 <= coi && coi < dst.channels() && src.channels() == 1 ); - int ch[] = { 0, coi }; - mixChannels(&src, 1, &dst, 1, ch, 1); -} - -/****************************************************************************************\ -* convertScale[Abs] * -\****************************************************************************************/ - -namespace cv -{ - -template static void -cvtScaleAbs_( const T* src, size_t sstep, - DT* dst, size_t dstep, Size size, - WT scale, WT shift ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - DT t0, t1; - t0 = saturate_cast
          (std::abs(src[x]*scale + shift)); - t1 = saturate_cast
          (std::abs(src[x+1]*scale + shift)); - dst[x] = t0; dst[x+1] = t1; - t0 = saturate_cast
          (std::abs(src[x+2]*scale + shift)); - t1 = saturate_cast
          (std::abs(src[x+3]*scale + shift)); - dst[x+2] = t0; dst[x+3] = t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = saturate_cast
          (std::abs(src[x]*scale + shift)); - } -} - - -template static void -cvtScale_( const T* src, size_t sstep, - DT* dst, size_t dstep, Size size, - WT scale, WT shift ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - DT t0, t1; - t0 = saturate_cast
          (src[x]*scale + shift); - t1 = saturate_cast
          (src[x+1]*scale + shift); - dst[x] = t0; dst[x+1] = t1; - t0 = saturate_cast
          (src[x+2]*scale + shift); - t1 = saturate_cast
          (src[x+3]*scale + shift); - dst[x+2] = t0; dst[x+3] = t1; - } - #endif - - for( ; x < size.width; x++ ) - dst[x] = saturate_cast
          (src[x]*scale + shift); - } -} - -//vz optimized template specialization -template<> void -cvtScale_( const short* src, size_t sstep, - short* dst, size_t dstep, Size size, - float scale, float shift ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - #if CV_SSE2 - if(USE_SSE2) - { - __m128 scale128 = _mm_set1_ps (scale); - __m128 shift128 = _mm_set1_ps (shift); - for(; x <= size.width - 8; x += 8 ) - { - __m128i r0 = _mm_loadl_epi64((const __m128i*)(src + x)); - __m128i r1 = _mm_loadl_epi64((const __m128i*)(src + x + 4)); - __m128 rf0 =_mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(r0, r0), 16)); - __m128 rf1 =_mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(r1, r1), 16)); - rf0 = _mm_add_ps(_mm_mul_ps(rf0, scale128), shift128); - rf1 = _mm_add_ps(_mm_mul_ps(rf1, scale128), shift128); - r0 = _mm_cvtps_epi32(rf0); - r1 = _mm_cvtps_epi32(rf1); - r0 = _mm_packs_epi32(r0, r1); - _mm_storeu_si128((__m128i*)(dst + x), r0); - } - } - #endif - - for(; x < size.width; x++ ) - dst[x] = saturate_cast(src[x]*scale + shift); - } -} - -template<> void -cvtScale_( const short* src, size_t sstep, - int* dst, size_t dstep, Size size, - float scale, float shift ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - - #if CV_SSE2 - if(USE_SSE2)//~5X - { - __m128 scale128 = _mm_set1_ps (scale); - __m128 shift128 = _mm_set1_ps (shift); - for(; x <= size.width - 8; x += 8 ) - { - __m128i r0 = _mm_loadl_epi64((const __m128i*)(src + x)); - __m128i r1 = _mm_loadl_epi64((const __m128i*)(src + x + 4)); - __m128 rf0 =_mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(r0, r0), 16)); - __m128 rf1 =_mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(r1, r1), 16)); - rf0 = _mm_add_ps(_mm_mul_ps(rf0, scale128), shift128); - rf1 = _mm_add_ps(_mm_mul_ps(rf1, scale128), shift128); - r0 = _mm_cvtps_epi32(rf0); - r1 = _mm_cvtps_epi32(rf1); - - _mm_storeu_si128((__m128i*)(dst + x), r0); - _mm_storeu_si128((__m128i*)(dst + x + 4), r1); - } - } - #endif - - //We will wait Haswell - /* - #if CV_AVX - if(USE_AVX)//2X - bad variant - { - ////TODO:AVX implementation (optimization?) required - __m256 scale256 = _mm256_set1_ps (scale); - __m256 shift256 = _mm256_set1_ps (shift); - for(; x <= size.width - 8; x += 8 ) - { - __m256i buf = _mm256_set_epi32((int)(*(src+x+7)),(int)(*(src+x+6)),(int)(*(src+x+5)),(int)(*(src+x+4)),(int)(*(src+x+3)),(int)(*(src+x+2)),(int)(*(src+x+1)),(int)(*(src+x))); - __m256 r0 = _mm256_add_ps( _mm256_mul_ps(_mm256_cvtepi32_ps (buf), scale256), shift256); - __m256i res = _mm256_cvtps_epi32(r0); - _mm256_storeu_si256 ((__m256i*)(dst+x), res); - } - } - #endif*/ - - for(; x < size.width; x++ ) - dst[x] = saturate_cast(src[x]*scale + shift); - } -} - -template static void -cvt_( const T* src, size_t sstep, - DT* dst, size_t dstep, Size size ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - DT t0, t1; - t0 = saturate_cast
          (src[x]); - t1 = saturate_cast
          (src[x+1]); - dst[x] = t0; dst[x+1] = t1; - t0 = saturate_cast
          (src[x+2]); - t1 = saturate_cast
          (src[x+3]); - dst[x+2] = t0; dst[x+3] = t1; - } - #endif - for( ; x < size.width; x++ ) - dst[x] = saturate_cast
          (src[x]); - } -} - -//vz optimized template specialization, test Core_ConvertScale/ElemWiseTest -template<> void -cvt_( const float* src, size_t sstep, - short* dst, size_t dstep, Size size ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - { - int x = 0; - #if CV_SSE2 - if(USE_SSE2){ - for( ; x <= size.width - 8; x += 8 ) - { - __m128 src128 = _mm_loadu_ps (src + x); - __m128i src_int128 = _mm_cvtps_epi32 (src128); - - src128 = _mm_loadu_ps (src + x + 4); - __m128i src1_int128 = _mm_cvtps_epi32 (src128); - - src1_int128 = _mm_packs_epi32(src_int128, src1_int128); - _mm_storeu_si128((__m128i*)(dst + x),src1_int128); - } - } - #endif - for( ; x < size.width; x++ ) - dst[x] = saturate_cast(src[x]); - } - -} - - -template static void -cpy_( const T* src, size_t sstep, T* dst, size_t dstep, Size size ) -{ - sstep /= sizeof(src[0]); - dstep /= sizeof(dst[0]); - - for( ; size.height--; src += sstep, dst += dstep ) - memcpy(dst, src, size.width*sizeof(src[0])); -} - -#define DEF_CVT_SCALE_ABS_FUNC(suffix, tfunc, stype, dtype, wtype) \ -static void cvtScaleAbs##suffix( const stype* src, size_t sstep, const uchar*, size_t, \ - dtype* dst, size_t dstep, Size size, double* scale) \ -{ \ - tfunc(src, sstep, dst, dstep, size, (wtype)scale[0], (wtype)scale[1]); \ -} - -#define DEF_CVT_SCALE_FUNC(suffix, stype, dtype, wtype) \ -static void cvtScale##suffix( const stype* src, size_t sstep, const uchar*, size_t, \ -dtype* dst, size_t dstep, Size size, double* scale) \ -{ \ - cvtScale_(src, sstep, dst, dstep, size, (wtype)scale[0], (wtype)scale[1]); \ -} - - -#define DEF_CVT_FUNC(suffix, stype, dtype) \ -static void cvt##suffix( const stype* src, size_t sstep, const uchar*, size_t, \ - dtype* dst, size_t dstep, Size size, double*) \ -{ \ - cvt_(src, sstep, dst, dstep, size); \ -} - -#define DEF_CPY_FUNC(suffix, stype) \ -static void cvt##suffix( const stype* src, size_t sstep, const uchar*, size_t, \ -stype* dst, size_t dstep, Size size, double*) \ -{ \ - cpy_(src, sstep, dst, dstep, size); \ -} - - -DEF_CVT_SCALE_ABS_FUNC(8u, cvtScaleAbs_, uchar, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(8s8u, cvtScaleAbs_, schar, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(16u8u, cvtScaleAbs_, ushort, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(16s8u, cvtScaleAbs_, short, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(32s8u, cvtScaleAbs_, int, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(32f8u, cvtScaleAbs_, float, uchar, float) -DEF_CVT_SCALE_ABS_FUNC(64f8u, cvtScaleAbs_, double, uchar, float) - -DEF_CVT_SCALE_FUNC(8u, uchar, uchar, float) -DEF_CVT_SCALE_FUNC(8s8u, schar, uchar, float) -DEF_CVT_SCALE_FUNC(16u8u, ushort, uchar, float) -DEF_CVT_SCALE_FUNC(16s8u, short, uchar, float) -DEF_CVT_SCALE_FUNC(32s8u, int, uchar, float) -DEF_CVT_SCALE_FUNC(32f8u, float, uchar, float) -DEF_CVT_SCALE_FUNC(64f8u, double, uchar, float) - -DEF_CVT_SCALE_FUNC(8u8s, uchar, schar, float) -DEF_CVT_SCALE_FUNC(8s, schar, schar, float) -DEF_CVT_SCALE_FUNC(16u8s, ushort, schar, float) -DEF_CVT_SCALE_FUNC(16s8s, short, schar, float) -DEF_CVT_SCALE_FUNC(32s8s, int, schar, float) -DEF_CVT_SCALE_FUNC(32f8s, float, schar, float) -DEF_CVT_SCALE_FUNC(64f8s, double, schar, float) - -DEF_CVT_SCALE_FUNC(8u16u, uchar, ushort, float) -DEF_CVT_SCALE_FUNC(8s16u, schar, ushort, float) -DEF_CVT_SCALE_FUNC(16u, ushort, ushort, float) -DEF_CVT_SCALE_FUNC(16s16u, short, ushort, float) -DEF_CVT_SCALE_FUNC(32s16u, int, ushort, float) -DEF_CVT_SCALE_FUNC(32f16u, float, ushort, float) -DEF_CVT_SCALE_FUNC(64f16u, double, ushort, float) - -DEF_CVT_SCALE_FUNC(8u16s, uchar, short, float) -DEF_CVT_SCALE_FUNC(8s16s, schar, short, float) -DEF_CVT_SCALE_FUNC(16u16s, ushort, short, float) -DEF_CVT_SCALE_FUNC(16s, short, short, float) -DEF_CVT_SCALE_FUNC(32s16s, int, short, float) -DEF_CVT_SCALE_FUNC(32f16s, float, short, float) -DEF_CVT_SCALE_FUNC(64f16s, double, short, float) - -DEF_CVT_SCALE_FUNC(8u32s, uchar, int, float) -DEF_CVT_SCALE_FUNC(8s32s, schar, int, float) -DEF_CVT_SCALE_FUNC(16u32s, ushort, int, float) -DEF_CVT_SCALE_FUNC(16s32s, short, int, float) -DEF_CVT_SCALE_FUNC(32s, int, int, double) -DEF_CVT_SCALE_FUNC(32f32s, float, int, float) -DEF_CVT_SCALE_FUNC(64f32s, double, int, double) - -DEF_CVT_SCALE_FUNC(8u32f, uchar, float, float) -DEF_CVT_SCALE_FUNC(8s32f, schar, float, float) -DEF_CVT_SCALE_FUNC(16u32f, ushort, float, float) -DEF_CVT_SCALE_FUNC(16s32f, short, float, float) -DEF_CVT_SCALE_FUNC(32s32f, int, float, double) -DEF_CVT_SCALE_FUNC(32f, float, float, float) -DEF_CVT_SCALE_FUNC(64f32f, double, float, double) - -DEF_CVT_SCALE_FUNC(8u64f, uchar, double, double) -DEF_CVT_SCALE_FUNC(8s64f, schar, double, double) -DEF_CVT_SCALE_FUNC(16u64f, ushort, double, double) -DEF_CVT_SCALE_FUNC(16s64f, short, double, double) -DEF_CVT_SCALE_FUNC(32s64f, int, double, double) -DEF_CVT_SCALE_FUNC(32f64f, float, double, double) -DEF_CVT_SCALE_FUNC(64f, double, double, double) - -DEF_CPY_FUNC(8u, uchar) -DEF_CVT_FUNC(8s8u, schar, uchar) -DEF_CVT_FUNC(16u8u, ushort, uchar) -DEF_CVT_FUNC(16s8u, short, uchar) -DEF_CVT_FUNC(32s8u, int, uchar) -DEF_CVT_FUNC(32f8u, float, uchar) -DEF_CVT_FUNC(64f8u, double, uchar) - -DEF_CVT_FUNC(8u8s, uchar, schar) -DEF_CVT_FUNC(16u8s, ushort, schar) -DEF_CVT_FUNC(16s8s, short, schar) -DEF_CVT_FUNC(32s8s, int, schar) -DEF_CVT_FUNC(32f8s, float, schar) -DEF_CVT_FUNC(64f8s, double, schar) - -DEF_CVT_FUNC(8u16u, uchar, ushort) -DEF_CVT_FUNC(8s16u, schar, ushort) -DEF_CPY_FUNC(16u, ushort) -DEF_CVT_FUNC(16s16u, short, ushort) -DEF_CVT_FUNC(32s16u, int, ushort) -DEF_CVT_FUNC(32f16u, float, ushort) -DEF_CVT_FUNC(64f16u, double, ushort) - -DEF_CVT_FUNC(8u16s, uchar, short) -DEF_CVT_FUNC(8s16s, schar, short) -DEF_CVT_FUNC(16u16s, ushort, short) -DEF_CVT_FUNC(32s16s, int, short) -DEF_CVT_FUNC(32f16s, float, short) -DEF_CVT_FUNC(64f16s, double, short) - -DEF_CVT_FUNC(8u32s, uchar, int) -DEF_CVT_FUNC(8s32s, schar, int) -DEF_CVT_FUNC(16u32s, ushort, int) -DEF_CVT_FUNC(16s32s, short, int) -DEF_CPY_FUNC(32s, int) -DEF_CVT_FUNC(32f32s, float, int) -DEF_CVT_FUNC(64f32s, double, int) - -DEF_CVT_FUNC(8u32f, uchar, float) -DEF_CVT_FUNC(8s32f, schar, float) -DEF_CVT_FUNC(16u32f, ushort, float) -DEF_CVT_FUNC(16s32f, short, float) -DEF_CVT_FUNC(32s32f, int, float) -DEF_CVT_FUNC(64f32f, double, float) - -DEF_CVT_FUNC(8u64f, uchar, double) -DEF_CVT_FUNC(8s64f, schar, double) -DEF_CVT_FUNC(16u64f, ushort, double) -DEF_CVT_FUNC(16s64f, short, double) -DEF_CVT_FUNC(32s64f, int, double) -DEF_CVT_FUNC(32f64f, float, double) -DEF_CPY_FUNC(64s, int64) - -static BinaryFunc getCvtScaleAbsFunc(int depth) -{ - static BinaryFunc cvtScaleAbsTab[] = - { - (BinaryFunc)cvtScaleAbs8u, (BinaryFunc)cvtScaleAbs8s8u, (BinaryFunc)cvtScaleAbs16u8u, - (BinaryFunc)cvtScaleAbs16s8u, (BinaryFunc)cvtScaleAbs32s8u, (BinaryFunc)cvtScaleAbs32f8u, - (BinaryFunc)cvtScaleAbs64f8u, 0 - }; - - return cvtScaleAbsTab[depth]; -} - -BinaryFunc getConvertFunc(int sdepth, int ddepth) -{ - static BinaryFunc cvtTab[][8] = - { - { - (BinaryFunc)(cvt8u), (BinaryFunc)GET_OPTIMIZED(cvt8s8u), (BinaryFunc)GET_OPTIMIZED(cvt16u8u), - (BinaryFunc)GET_OPTIMIZED(cvt16s8u), (BinaryFunc)GET_OPTIMIZED(cvt32s8u), (BinaryFunc)GET_OPTIMIZED(cvt32f8u), - (BinaryFunc)GET_OPTIMIZED(cvt64f8u), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u8s), (BinaryFunc)cvt8u, (BinaryFunc)GET_OPTIMIZED(cvt16u8s), - (BinaryFunc)GET_OPTIMIZED(cvt16s8s), (BinaryFunc)GET_OPTIMIZED(cvt32s8s), (BinaryFunc)GET_OPTIMIZED(cvt32f8s), - (BinaryFunc)GET_OPTIMIZED(cvt64f8s), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u16u), (BinaryFunc)GET_OPTIMIZED(cvt8s16u), (BinaryFunc)cvt16u, - (BinaryFunc)GET_OPTIMIZED(cvt16s16u), (BinaryFunc)GET_OPTIMIZED(cvt32s16u), (BinaryFunc)GET_OPTIMIZED(cvt32f16u), - (BinaryFunc)GET_OPTIMIZED(cvt64f16u), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u16s), (BinaryFunc)GET_OPTIMIZED(cvt8s16s), (BinaryFunc)GET_OPTIMIZED(cvt16u16s), - (BinaryFunc)cvt16u, (BinaryFunc)GET_OPTIMIZED(cvt32s16s), (BinaryFunc)GET_OPTIMIZED(cvt32f16s), - (BinaryFunc)GET_OPTIMIZED(cvt64f16s), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u32s), (BinaryFunc)GET_OPTIMIZED(cvt8s32s), (BinaryFunc)GET_OPTIMIZED(cvt16u32s), - (BinaryFunc)GET_OPTIMIZED(cvt16s32s), (BinaryFunc)cvt32s, (BinaryFunc)GET_OPTIMIZED(cvt32f32s), - (BinaryFunc)GET_OPTIMIZED(cvt64f32s), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u32f), (BinaryFunc)GET_OPTIMIZED(cvt8s32f), (BinaryFunc)GET_OPTIMIZED(cvt16u32f), - (BinaryFunc)GET_OPTIMIZED(cvt16s32f), (BinaryFunc)GET_OPTIMIZED(cvt32s32f), (BinaryFunc)cvt32s, - (BinaryFunc)GET_OPTIMIZED(cvt64f32f), 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvt8u64f), (BinaryFunc)GET_OPTIMIZED(cvt8s64f), (BinaryFunc)GET_OPTIMIZED(cvt16u64f), - (BinaryFunc)GET_OPTIMIZED(cvt16s64f), (BinaryFunc)GET_OPTIMIZED(cvt32s64f), (BinaryFunc)GET_OPTIMIZED(cvt32f64f), - (BinaryFunc)(cvt64s), 0 - }, - { - 0, 0, 0, 0, 0, 0, 0, 0 - } - }; - - return cvtTab[CV_MAT_DEPTH(ddepth)][CV_MAT_DEPTH(sdepth)]; -} - -BinaryFunc getConvertScaleFunc(int sdepth, int ddepth) -{ - static BinaryFunc cvtScaleTab[][8] = - { - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u), (BinaryFunc)GET_OPTIMIZED(cvtScale8s8u), (BinaryFunc)GET_OPTIMIZED(cvtScale16u8u), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s8u), (BinaryFunc)GET_OPTIMIZED(cvtScale32s8u), (BinaryFunc)GET_OPTIMIZED(cvtScale32f8u), - (BinaryFunc)cvtScale64f8u, 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u8s), (BinaryFunc)GET_OPTIMIZED(cvtScale8s), (BinaryFunc)GET_OPTIMIZED(cvtScale16u8s), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s8s), (BinaryFunc)GET_OPTIMIZED(cvtScale32s8s), (BinaryFunc)GET_OPTIMIZED(cvtScale32f8s), - (BinaryFunc)cvtScale64f8s, 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u16u), (BinaryFunc)GET_OPTIMIZED(cvtScale8s16u), (BinaryFunc)GET_OPTIMIZED(cvtScale16u), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s16u), (BinaryFunc)GET_OPTIMIZED(cvtScale32s16u), (BinaryFunc)GET_OPTIMIZED(cvtScale32f16u), - (BinaryFunc)cvtScale64f16u, 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u16s), (BinaryFunc)GET_OPTIMIZED(cvtScale8s16s), (BinaryFunc)GET_OPTIMIZED(cvtScale16u16s), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s), (BinaryFunc)GET_OPTIMIZED(cvtScale32s16s), (BinaryFunc)GET_OPTIMIZED(cvtScale32f16s), - (BinaryFunc)cvtScale64f16s, 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u32s), (BinaryFunc)GET_OPTIMIZED(cvtScale8s32s), (BinaryFunc)GET_OPTIMIZED(cvtScale16u32s), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s32s), (BinaryFunc)GET_OPTIMIZED(cvtScale32s), (BinaryFunc)GET_OPTIMIZED(cvtScale32f32s), - (BinaryFunc)cvtScale64f32s, 0 - }, - { - (BinaryFunc)GET_OPTIMIZED(cvtScale8u32f), (BinaryFunc)GET_OPTIMIZED(cvtScale8s32f), (BinaryFunc)GET_OPTIMIZED(cvtScale16u32f), - (BinaryFunc)GET_OPTIMIZED(cvtScale16s32f), (BinaryFunc)GET_OPTIMIZED(cvtScale32s32f), (BinaryFunc)GET_OPTIMIZED(cvtScale32f), - (BinaryFunc)cvtScale64f32f, 0 - }, - { - (BinaryFunc)cvtScale8u64f, (BinaryFunc)cvtScale8s64f, (BinaryFunc)cvtScale16u64f, - (BinaryFunc)cvtScale16s64f, (BinaryFunc)cvtScale32s64f, (BinaryFunc)cvtScale32f64f, - (BinaryFunc)cvtScale64f, 0 - }, - { - 0, 0, 0, 0, 0, 0, 0, 0 - } - }; - - return cvtScaleTab[CV_MAT_DEPTH(ddepth)][CV_MAT_DEPTH(sdepth)]; -} - -} - -void cv::convertScaleAbs( InputArray _src, OutputArray _dst, double alpha, double beta ) -{ - Mat src = _src.getMat(); - int cn = src.channels(); - double scale[] = {alpha, beta}; - _dst.create( src.dims, src.size, CV_8UC(cn) ); - Mat dst = _dst.getMat(); - BinaryFunc func = getCvtScaleAbsFunc(src.depth()); - CV_Assert( func != 0 ); - - if( src.dims <= 2 ) - { - Size sz = getContinuousSize(src, dst, cn); - func( src.data, src.step, 0, 0, dst.data, dst.step, sz, scale ); - } - else - { - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - Size sz((int)it.size*cn, 1); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], 0, 0, 0, ptrs[1], 0, sz, scale ); - } -} - -void cv::Mat::convertTo(OutputArray _dst, int _type, double alpha, double beta) const -{ - bool noScale = fabs(alpha-1) < DBL_EPSILON && fabs(beta) < DBL_EPSILON; - - if( _type < 0 ) - _type = _dst.fixedType() ? _dst.type() : type(); - else - _type = CV_MAKETYPE(CV_MAT_DEPTH(_type), channels()); - - int sdepth = depth(), ddepth = CV_MAT_DEPTH(_type); - if( sdepth == ddepth && noScale ) - { - copyTo(_dst); - return; - } - - Mat src = *this; - - BinaryFunc func = noScale ? getConvertFunc(sdepth, ddepth) : getConvertScaleFunc(sdepth, ddepth); - double scale[] = {alpha, beta}; - int cn = channels(); - CV_Assert( func != 0 ); - - if( dims <= 2 ) - { - _dst.create( size(), _type ); - Mat dst = _dst.getMat(); - Size sz = getContinuousSize(src, dst, cn); - func( src.data, src.step, 0, 0, dst.data, dst.step, sz, scale ); - } - else - { - _dst.create( dims, size, _type ); - Mat dst = _dst.getMat(); - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - Size sz((int)(it.size*cn), 1); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], 0, 0, 0, ptrs[1], 0, sz, scale); - } -} - -/****************************************************************************************\ -* LUT Transform * -\****************************************************************************************/ - -namespace cv -{ - -template static void -LUT8u_( const uchar* src, const T* lut, T* dst, int len, int cn, int lutcn ) -{ - if( lutcn == 1 ) - { - for( int i = 0; i < len*cn; i++ ) - dst[i] = lut[src[i]]; - } - else - { - for( int i = 0; i < len*cn; i += cn ) - for( int k = 0; k < cn; k++ ) - dst[i+k] = lut[src[i+k]*cn+k]; - } -} - -static void LUT8u_8u( const uchar* src, const uchar* lut, uchar* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_8s( const uchar* src, const schar* lut, schar* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_16u( const uchar* src, const ushort* lut, ushort* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_16s( const uchar* src, const short* lut, short* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_32s( const uchar* src, const int* lut, int* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_32f( const uchar* src, const float* lut, float* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -static void LUT8u_64f( const uchar* src, const double* lut, double* dst, int len, int cn, int lutcn ) -{ - LUT8u_( src, lut, dst, len, cn, lutcn ); -} - -typedef void (*LUTFunc)( const uchar* src, const uchar* lut, uchar* dst, int len, int cn, int lutcn ); - -static LUTFunc lutTab[] = -{ - (LUTFunc)LUT8u_8u, (LUTFunc)LUT8u_8s, (LUTFunc)LUT8u_16u, (LUTFunc)LUT8u_16s, - (LUTFunc)LUT8u_32s, (LUTFunc)LUT8u_32f, (LUTFunc)LUT8u_64f, 0 -}; - -} - -void cv::LUT( InputArray _src, InputArray _lut, OutputArray _dst, int interpolation ) -{ - Mat src = _src.getMat(), lut = _lut.getMat(); - CV_Assert( interpolation == 0 ); - int cn = src.channels(); - int lutcn = lut.channels(); - - CV_Assert( (lutcn == cn || lutcn == 1) && - lut.total() == 256 && lut.isContinuous() && - (src.depth() == CV_8U || src.depth() == CV_8S) ); - _dst.create( src.dims, src.size, CV_MAKETYPE(lut.depth(), cn)); - Mat dst = _dst.getMat(); - - LUTFunc func = lutTab[lut.depth()]; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], lut.data, ptrs[1], len, cn, lutcn); -} - - -void cv::normalize( InputArray _src, OutputArray _dst, double a, double b, - int norm_type, int rtype, InputArray _mask ) -{ - Mat src = _src.getMat(), mask = _mask.getMat(); - - double scale = 1, shift = 0; - if( norm_type == CV_MINMAX ) - { - double smin = 0, smax = 0; - double dmin = MIN( a, b ), dmax = MAX( a, b ); - minMaxLoc( _src, &smin, &smax, 0, 0, mask ); - scale = (dmax - dmin)*(smax - smin > DBL_EPSILON ? 1./(smax - smin) : 0); - shift = dmin - smin*scale; - } - else if( norm_type == CV_L2 || norm_type == CV_L1 || norm_type == CV_C ) - { - scale = norm( src, norm_type, mask ); - scale = scale > DBL_EPSILON ? a/scale : 0.; - shift = 0; - } - else - CV_Error( CV_StsBadArg, "Unknown/unsupported norm type" ); - - if( rtype < 0 ) - rtype = _dst.fixedType() ? _dst.depth() : src.depth(); - - _dst.create(src.dims, src.size, CV_MAKETYPE(rtype, src.channels())); - Mat dst = _dst.getMat(); - - if( !mask.data ) - src.convertTo( dst, rtype, scale, shift ); - else - { - Mat temp; - src.convertTo( temp, rtype, scale, shift ); - temp.copyTo( dst, mask ); - } -} - -CV_IMPL void -cvSplit( const void* srcarr, void* dstarr0, void* dstarr1, void* dstarr2, void* dstarr3 ) -{ - void* dptrs[] = { dstarr0, dstarr1, dstarr2, dstarr3 }; - cv::Mat src = cv::cvarrToMat(srcarr); - int i, j, nz = 0; - for( i = 0; i < 4; i++ ) - nz += dptrs[i] != 0; - CV_Assert( nz > 0 ); - cv::vector dvec(nz); - cv::vector pairs(nz*2); - - for( i = j = 0; i < 4; i++ ) - { - if( dptrs[i] != 0 ) - { - dvec[j] = cv::cvarrToMat(dptrs[i]); - CV_Assert( dvec[j].size() == src.size() ); - CV_Assert( dvec[j].depth() == src.depth() ); - CV_Assert( dvec[j].channels() == 1 ); - CV_Assert( i < src.channels() ); - pairs[j*2] = i; - pairs[j*2+1] = j; - j++; - } - } - if( nz == src.channels() ) - cv::split( src, dvec ); - else - { - cv::mixChannels( &src, 1, &dvec[0], nz, &pairs[0], nz ); - } -} - - -CV_IMPL void -cvMerge( const void* srcarr0, const void* srcarr1, const void* srcarr2, - const void* srcarr3, void* dstarr ) -{ - const void* sptrs[] = { srcarr0, srcarr1, srcarr2, srcarr3 }; - cv::Mat dst = cv::cvarrToMat(dstarr); - int i, j, nz = 0; - for( i = 0; i < 4; i++ ) - nz += sptrs[i] != 0; - CV_Assert( nz > 0 ); - cv::vector svec(nz); - cv::vector pairs(nz*2); - - for( i = j = 0; i < 4; i++ ) - { - if( sptrs[i] != 0 ) - { - svec[j] = cv::cvarrToMat(sptrs[i]); - CV_Assert( svec[j].size == dst.size && - svec[j].depth() == dst.depth() && - svec[j].channels() == 1 && i < dst.channels() ); - pairs[j*2] = j; - pairs[j*2+1] = i; - j++; - } - } - - if( nz == dst.channels() ) - cv::merge( svec, dst ); - else - { - cv::mixChannels( &svec[0], nz, &dst, 1, &pairs[0], nz ); - } -} - - -CV_IMPL void -cvMixChannels( const CvArr** src, int src_count, - CvArr** dst, int dst_count, - const int* from_to, int pair_count ) -{ - cv::AutoBuffer buf(src_count + dst_count); - - int i; - for( i = 0; i < src_count; i++ ) - buf[i] = cv::cvarrToMat(src[i]); - for( i = 0; i < dst_count; i++ ) - buf[i+src_count] = cv::cvarrToMat(dst[i]); - cv::mixChannels(&buf[0], src_count, &buf[src_count], dst_count, from_to, pair_count); -} - -CV_IMPL void -cvConvertScaleAbs( const void* srcarr, void* dstarr, - double scale, double shift ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.size == dst.size && dst.type() == CV_8UC(src.channels())); - cv::convertScaleAbs( src, dst, scale, shift ); -} - -CV_IMPL void -cvConvertScale( const void* srcarr, void* dstarr, - double scale, double shift ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size == dst.size && src.channels() == dst.channels() ); - src.convertTo(dst, dst.type(), scale, shift); -} - -CV_IMPL void cvLUT( const void* srcarr, void* dstarr, const void* lutarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), lut = cv::cvarrToMat(lutarr); - - CV_Assert( dst.size() == src.size() && dst.type() == CV_MAKETYPE(lut.depth(), src.channels()) ); - cv::LUT( src, lut, dst ); -} - -CV_IMPL void cvNormalize( const CvArr* srcarr, CvArr* dstarr, - double a, double b, int norm_type, const CvArr* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - CV_Assert( dst.size() == src.size() && src.channels() == dst.channels() ); - cv::normalize( src, dst, a, b, norm_type, dst.type(), mask ); -} - -/* End of file. */ diff --git a/modules/core/src/copy.cpp b/modules/core/src/copy.cpp deleted file mode 100644 index b8d87fc..0000000 --- a/modules/core/src/copy.cpp +++ /dev/null @@ -1,631 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// Mat basic operations: Copy, Set -// -// */ - -#include "precomp.hpp" - -namespace cv -{ - -template static void -copyMask_(const uchar* _src, size_t sstep, const uchar* mask, size_t mstep, uchar* _dst, size_t dstep, Size size) -{ - for( ; size.height--; mask += mstep, _src += sstep, _dst += dstep ) - { - const T* src = (const T*)_src; - T* dst = (T*)_dst; - int x = 0; - #if CV_ENABLE_UNROLLED - for( ; x <= size.width - 4; x += 4 ) - { - if( mask[x] ) - dst[x] = src[x]; - if( mask[x+1] ) - dst[x+1] = src[x+1]; - if( mask[x+2] ) - dst[x+2] = src[x+2]; - if( mask[x+3] ) - dst[x+3] = src[x+3]; - } - #endif - for( ; x < size.width; x++ ) - if( mask[x] ) - dst[x] = src[x]; - } -} - -template<> void -copyMask_(const uchar* _src, size_t sstep, const uchar* mask, size_t mstep, uchar* _dst, size_t dstep, Size size) -{ - for( ; size.height--; mask += mstep, _src += sstep, _dst += dstep ) - { - const uchar* src = (const uchar*)_src; - uchar* dst = (uchar*)_dst; - int x = 0; - #if CV_SSE4_2 - if(USE_SSE4_2)// - { - __m128i zero = _mm_setzero_si128 (); - - for( ; x <= size.width - 16; x += 16 ) - { - const __m128i rSrc = _mm_lddqu_si128((const __m128i*)(src+x)); - __m128i _mask = _mm_lddqu_si128((const __m128i*)(mask+x)); - __m128i rDst = _mm_lddqu_si128((__m128i*)(dst+x)); - __m128i _negMask = _mm_cmpeq_epi8(_mask, zero); - rDst = _mm_blendv_epi8(rSrc, rDst, _negMask); - _mm_storeu_si128((__m128i*)(dst + x), rDst); - } - } - #endif - for( ; x < size.width; x++ ) - if( mask[x] ) - dst[x] = src[x]; - } -} - -template<> void -copyMask_(const uchar* _src, size_t sstep, const uchar* mask, size_t mstep, uchar* _dst, size_t dstep, Size size) -{ - for( ; size.height--; mask += mstep, _src += sstep, _dst += dstep ) - { - const ushort* src = (const ushort*)_src; - ushort* dst = (ushort*)_dst; - int x = 0; - #if CV_SSE4_2 - if(USE_SSE4_2)// - { - __m128i zero = _mm_setzero_si128 (); - for( ; x <= size.width - 8; x += 8 ) - { - const __m128i rSrc =_mm_lddqu_si128((const __m128i*)(src+x)); - __m128i _mask = _mm_loadl_epi64((const __m128i*)(mask+x)); - _mask = _mm_unpacklo_epi8(_mask, _mask); - __m128i rDst = _mm_lddqu_si128((const __m128i*)(dst+x)); - __m128i _negMask = _mm_cmpeq_epi8(_mask, zero); - rDst = _mm_blendv_epi8(rSrc, rDst, _negMask); - _mm_storeu_si128((__m128i*)(dst + x), rDst); - } - } - #endif - for( ; x < size.width; x++ ) - if( mask[x] ) - dst[x] = src[x]; - } -} - -static void -copyMaskGeneric(const uchar* _src, size_t sstep, const uchar* mask, size_t mstep, uchar* _dst, size_t dstep, Size size, void* _esz) -{ - size_t k, esz = *(size_t*)_esz; - for( ; size.height--; mask += mstep, _src += sstep, _dst += dstep ) - { - const uchar* src = _src; - uchar* dst = _dst; - int x = 0; - for( ; x < size.width; x++, src += esz, dst += esz ) - { - if( !mask[x] ) - continue; - for( k = 0; k < esz; k++ ) - dst[k] = src[k]; - } - } -} - - -#define DEF_COPY_MASK(suffix, type) \ -static void copyMask##suffix(const uchar* src, size_t sstep, const uchar* mask, size_t mstep, \ - uchar* dst, size_t dstep, Size size, void*) \ -{ \ - copyMask_(src, sstep, mask, mstep, dst, dstep, size); \ -} - - -DEF_COPY_MASK(8u, uchar) -DEF_COPY_MASK(16u, ushort) -DEF_COPY_MASK(8uC3, Vec3b) -DEF_COPY_MASK(32s, int) -DEF_COPY_MASK(16uC3, Vec3s) -DEF_COPY_MASK(32sC2, Vec2i) -DEF_COPY_MASK(32sC3, Vec3i) -DEF_COPY_MASK(32sC4, Vec4i) -DEF_COPY_MASK(32sC6, Vec6i) -DEF_COPY_MASK(32sC8, Vec8i) - -BinaryFunc copyMaskTab[] = -{ - 0, - copyMask8u, - copyMask16u, - copyMask8uC3, - copyMask32s, - 0, - copyMask16uC3, - 0, - copyMask32sC2, - 0, 0, 0, - copyMask32sC3, - 0, 0, 0, - copyMask32sC4, - 0, 0, 0, 0, 0, 0, 0, - copyMask32sC6, - 0, 0, 0, 0, 0, 0, 0, - copyMask32sC8 -}; - -BinaryFunc getCopyMaskFunc(size_t esz) -{ - return esz <= 32 && copyMaskTab[esz] ? copyMaskTab[esz] : copyMaskGeneric; -} - -/* dst = src */ -void Mat::copyTo( OutputArray _dst ) const -{ - int dtype = _dst.type(); - if( _dst.fixedType() && dtype != type() ) - { - CV_Assert( channels() == CV_MAT_CN(dtype) ); - convertTo( _dst, dtype ); - return; - } - - if( empty() ) - { - _dst.release(); - return; - } - - if( dims <= 2 ) - { - _dst.create( rows, cols, type() ); - Mat dst = _dst.getMat(); - if( data == dst.data ) - return; - - if( rows > 0 && cols > 0 ) - { - const uchar* sptr = data; - uchar* dptr = dst.data; - - Size sz = getContinuousSize(*this, dst); - size_t len = sz.width*elemSize(); - - for( ; sz.height--; sptr += step, dptr += dst.step ) - memcpy( dptr, sptr, len ); - } - return; - } - - _dst.create( dims, size, type() ); - Mat dst = _dst.getMat(); - if( data == dst.data ) - return; - - if( total() != 0 ) - { - const Mat* arrays[] = { this, &dst }; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs, 2); - size_t sz = it.size*elemSize(); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - memcpy(ptrs[1], ptrs[0], sz); - } -} - -void Mat::copyTo( OutputArray _dst, InputArray _mask ) const -{ - Mat mask = _mask.getMat(); - if( !mask.data ) - { - copyTo(_dst); - return; - } - - int cn = channels(), mcn = mask.channels(); - CV_Assert( mask.depth() == CV_8U && (mcn == 1 || mcn == cn) ); - bool colorMask = mcn > 1; - - size_t esz = colorMask ? elemSize1() : elemSize(); - BinaryFunc copymask = getCopyMaskFunc(esz); - - uchar* data0 = _dst.getMat().data; - _dst.create( dims, size, type() ); - Mat dst = _dst.getMat(); - - if( dst.data != data0 ) // do not leave dst uninitialized - dst = Scalar(0); - - if( dims <= 2 ) - { - CV_Assert( size() == mask.size() ); - Size sz = getContinuousSize(*this, dst, mask, mcn); - copymask(data, step, mask.data, mask.step, dst.data, dst.step, sz, &esz); - return; - } - - const Mat* arrays[] = { this, &dst, &mask, 0 }; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - Size sz((int)(it.size*mcn), 1); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - copymask(ptrs[0], 0, ptrs[2], 0, ptrs[1], 0, sz, &esz); -} - -Mat& Mat::operator = (const Scalar& s) -{ - const Mat* arrays[] = { this }; - uchar* dptr; - NAryMatIterator it(arrays, &dptr, 1); - size_t elsize = it.size*elemSize(); - const int64* is = (const int64*)&s.val[0]; - - if( is[0] == 0 && is[1] == 0 && is[2] == 0 && is[3] == 0 ) - { - for( size_t i = 0; i < it.nplanes; i++, ++it ) - memset( dptr, 0, elsize ); - } - else - { - if( it.nplanes > 0 ) - { - double scalar[12]; - scalarToRawData(s, scalar, type(), 12); - size_t blockSize = 12*elemSize1(); - - for( size_t j = 0; j < elsize; j += blockSize ) - { - size_t sz = MIN(blockSize, elsize - j); - memcpy( dptr + j, scalar, sz ); - } - } - - for( size_t i = 1; i < it.nplanes; i++ ) - { - ++it; - memcpy( dptr, data, elsize ); - } - } - return *this; -} - - -Mat& Mat::setTo(InputArray _value, InputArray _mask) -{ - if( !data ) - return *this; - - Mat value = _value.getMat(), mask = _mask.getMat(); - - CV_Assert( checkScalar(value, type(), _value.kind(), _InputArray::MAT )); - CV_Assert( mask.empty() || mask.type() == CV_8U ); - - size_t esz = elemSize(); - BinaryFunc copymask = getCopyMaskFunc(esz); - - const Mat* arrays[] = { this, !mask.empty() ? &mask : 0, 0 }; - uchar* ptrs[2]={0,0}; - NAryMatIterator it(arrays, ptrs); - int totalsz = (int)it.size, blockSize0 = std::min(totalsz, (int)((BLOCK_SIZE + esz-1)/esz)); - AutoBuffer _scbuf(blockSize0*esz + 32); - uchar* scbuf = alignPtr((uchar*)_scbuf, (int)sizeof(double)); - convertAndUnrollScalar( value, type(), scbuf, blockSize0 ); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( int j = 0; j < totalsz; j += blockSize0 ) - { - Size sz(std::min(blockSize0, totalsz - j), 1); - size_t blockSize = sz.width*esz; - if( ptrs[1] ) - { - copymask(scbuf, 0, ptrs[1], 0, ptrs[0], 0, sz, &esz); - ptrs[1] += sz.width; - } - else - memcpy(ptrs[0], scbuf, blockSize); - ptrs[0] += blockSize; - } - } - return *this; -} - - -static void -flipHoriz( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size size, size_t esz ) -{ - int i, j, limit = (int)(((size.width + 1)/2)*esz); - AutoBuffer _tab(size.width*esz); - int* tab = _tab; - - for( i = 0; i < size.width; i++ ) - for( size_t k = 0; k < esz; k++ ) - tab[i*esz + k] = (int)((size.width - i - 1)*esz + k); - - for( ; size.height--; src += sstep, dst += dstep ) - { - for( i = 0; i < limit; i++ ) - { - j = tab[i]; - uchar t0 = src[i], t1 = src[j]; - dst[i] = t1; dst[j] = t0; - } - } -} - -static void -flipVert( const uchar* src0, size_t sstep, uchar* dst0, size_t dstep, Size size, size_t esz ) -{ - const uchar* src1 = src0 + (size.height - 1)*sstep; - uchar* dst1 = dst0 + (size.height - 1)*dstep; - size.width *= (int)esz; - - for( int y = 0; y < (size.height + 1)/2; y++, src0 += sstep, src1 -= sstep, - dst0 += dstep, dst1 -= dstep ) - { - int i = 0; - if( ((size_t)src0|(size_t)dst0|(size_t)src1|(size_t)dst1) % sizeof(int) == 0 ) - { - for( ; i <= size.width - 16; i += 16 ) - { - int t0 = ((int*)(src0 + i))[0]; - int t1 = ((int*)(src1 + i))[0]; - - ((int*)(dst0 + i))[0] = t1; - ((int*)(dst1 + i))[0] = t0; - - t0 = ((int*)(src0 + i))[1]; - t1 = ((int*)(src1 + i))[1]; - - ((int*)(dst0 + i))[1] = t1; - ((int*)(dst1 + i))[1] = t0; - - t0 = ((int*)(src0 + i))[2]; - t1 = ((int*)(src1 + i))[2]; - - ((int*)(dst0 + i))[2] = t1; - ((int*)(dst1 + i))[2] = t0; - - t0 = ((int*)(src0 + i))[3]; - t1 = ((int*)(src1 + i))[3]; - - ((int*)(dst0 + i))[3] = t1; - ((int*)(dst1 + i))[3] = t0; - } - - for( ; i <= size.width - 4; i += 4 ) - { - int t0 = ((int*)(src0 + i))[0]; - int t1 = ((int*)(src1 + i))[0]; - - ((int*)(dst0 + i))[0] = t1; - ((int*)(dst1 + i))[0] = t0; - } - } - - for( ; i < size.width; i++ ) - { - uchar t0 = src0[i]; - uchar t1 = src1[i]; - - dst0[i] = t1; - dst1[i] = t0; - } - } -} - -void flip( InputArray _src, OutputArray _dst, int flip_mode ) -{ - Mat src = _src.getMat(); - - CV_Assert( src.dims <= 2 ); - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - size_t esz = src.elemSize(); - - if( flip_mode <= 0 ) - flipVert( src.data, src.step, dst.data, dst.step, src.size(), esz ); - else - flipHoriz( src.data, src.step, dst.data, dst.step, src.size(), esz ); - - if( flip_mode < 0 ) - flipHoriz( dst.data, dst.step, dst.data, dst.step, dst.size(), esz ); -} - - -void repeat(InputArray _src, int ny, int nx, OutputArray _dst) -{ - Mat src = _src.getMat(); - CV_Assert( src.dims <= 2 ); - CV_Assert( ny > 0 && nx > 0 ); - - _dst.create(src.rows*ny, src.cols*nx, src.type()); - Mat dst = _dst.getMat(); - Size ssize = src.size(), dsize = dst.size(); - int esz = (int)src.elemSize(); - int x, y; - ssize.width *= esz; dsize.width *= esz; - - for( y = 0; y < ssize.height; y++ ) - { - for( x = 0; x < dsize.width; x += ssize.width ) - memcpy( dst.data + y*dst.step + x, src.data + y*src.step, ssize.width ); - } - - for( ; y < dsize.height; y++ ) - memcpy( dst.data + y*dst.step, dst.data + (y - ssize.height)*dst.step, dsize.width ); -} - -Mat repeat(const Mat& src, int ny, int nx) -{ - if( nx == 1 && ny == 1 ) - return src; - Mat dst; - repeat(src, ny, nx, dst); - return dst; -} - -} - -/* dst = src */ -CV_IMPL void -cvCopy( const void* srcarr, void* dstarr, const void* maskarr ) -{ - if( CV_IS_SPARSE_MAT(srcarr) && CV_IS_SPARSE_MAT(dstarr)) - { - CV_Assert( maskarr == 0 ); - CvSparseMat* src1 = (CvSparseMat*)srcarr; - CvSparseMat* dst1 = (CvSparseMat*)dstarr; - CvSparseMatIterator iterator; - CvSparseNode* node; - - dst1->dims = src1->dims; - memcpy( dst1->size, src1->size, src1->dims*sizeof(src1->size[0])); - dst1->valoffset = src1->valoffset; - dst1->idxoffset = src1->idxoffset; - cvClearSet( dst1->heap ); - - if( src1->heap->active_count >= dst1->hashsize*CV_SPARSE_HASH_RATIO ) - { - cvFree( &dst1->hashtable ); - dst1->hashsize = src1->hashsize; - dst1->hashtable = - (void**)cvAlloc( dst1->hashsize*sizeof(dst1->hashtable[0])); - } - - memset( dst1->hashtable, 0, dst1->hashsize*sizeof(dst1->hashtable[0])); - - for( node = cvInitSparseMatIterator( src1, &iterator ); - node != 0; node = cvGetNextSparseNode( &iterator )) - { - CvSparseNode* node_copy = (CvSparseNode*)cvSetNew( dst1->heap ); - int tabidx = node->hashval & (dst1->hashsize - 1); - memcpy( node_copy, node, dst1->heap->elem_size ); - node_copy->next = (CvSparseNode*)dst1->hashtable[tabidx]; - dst1->hashtable[tabidx] = node_copy; - } - return; - } - cv::Mat src = cv::cvarrToMat(srcarr, false, true, 1), dst = cv::cvarrToMat(dstarr, false, true, 1); - CV_Assert( src.depth() == dst.depth() && src.size == dst.size ); - - int coi1 = 0, coi2 = 0; - if( CV_IS_IMAGE(srcarr) ) - coi1 = cvGetImageCOI((const IplImage*)srcarr); - if( CV_IS_IMAGE(dstarr) ) - coi2 = cvGetImageCOI((const IplImage*)dstarr); - - if( coi1 || coi2 ) - { - CV_Assert( (coi1 != 0 || src.channels() == 1) && - (coi2 != 0 || dst.channels() == 1) ); - - int pair[] = { std::max(coi1-1, 0), std::max(coi2-1, 0) }; - cv::mixChannels( &src, 1, &dst, 1, pair, 1 ); - return; - } - else - CV_Assert( src.channels() == dst.channels() ); - - if( !maskarr ) - src.copyTo(dst); - else - src.copyTo(dst, cv::cvarrToMat(maskarr)); -} - -CV_IMPL void -cvSet( void* arr, CvScalar value, const void* maskarr ) -{ - cv::Mat m = cv::cvarrToMat(arr); - if( !maskarr ) - m = value; - else - m.setTo(cv::Scalar(value), cv::cvarrToMat(maskarr)); -} - -CV_IMPL void -cvSetZero( CvArr* arr ) -{ - if( CV_IS_SPARSE_MAT(arr) ) - { - CvSparseMat* mat1 = (CvSparseMat*)arr; - cvClearSet( mat1->heap ); - if( mat1->hashtable ) - memset( mat1->hashtable, 0, mat1->hashsize*sizeof(mat1->hashtable[0])); - return; - } - cv::Mat m = cv::cvarrToMat(arr); - m = cv::Scalar(0); -} - -CV_IMPL void -cvFlip( const CvArr* srcarr, CvArr* dstarr, int flip_mode ) -{ - cv::Mat src = cv::cvarrToMat(srcarr); - cv::Mat dst; - - if (!dstarr) - dst = src; - else - dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.type() == dst.type() && src.size() == dst.size() ); - cv::flip( src, dst, flip_mode ); -} - -CV_IMPL void -cvRepeat( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.type() == dst.type() && - dst.rows % src.rows == 0 && dst.cols % src.cols == 0 ); - cv::repeat(src, dst.rows/src.rows, dst.cols/src.cols, dst); -} - -/* End of file. */ diff --git a/modules/core/src/datastructs.cpp b/modules/core/src/datastructs.cpp deleted file mode 100644 index 9438fa2..0000000 --- a/modules/core/src/datastructs.cpp +++ /dev/null @@ -1,4060 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -#define ICV_FREE_PTR(storage) \ - ((schar*)(storage)->top + (storage)->block_size - (storage)->free_space) - -#define ICV_ALIGNED_SEQ_BLOCK_SIZE \ - (int)cvAlign(sizeof(CvSeqBlock), CV_STRUCT_ALIGN) - -CV_INLINE int -cvAlignLeft( int size, int align ) -{ - return size & -align; -} - -#define CV_GET_LAST_ELEM( seq, block ) \ - ((block)->data + ((block)->count - 1)*((seq)->elem_size)) - -#define CV_SWAP_ELEMS(a,b,elem_size) \ -{ \ - int k; \ - for( k = 0; k < elem_size; k++ ) \ - { \ - char t0 = (a)[k]; \ - char t1 = (b)[k]; \ - (a)[k] = t1; \ - (b)[k] = t0; \ - } \ -} - -#define ICV_SHIFT_TAB_MAX 32 -static const schar icvPower2ShiftTab[] = -{ - 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, 4, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 -}; - -/****************************************************************************************\ -* Functions for manipulating memory storage - list of memory blocks * -\****************************************************************************************/ - -/* Initialize allocated storage: */ -static void -icvInitMemStorage( CvMemStorage* storage, int block_size ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - if( block_size <= 0 ) - block_size = CV_STORAGE_BLOCK_SIZE; - - block_size = cvAlign( block_size, CV_STRUCT_ALIGN ); - assert( sizeof(CvMemBlock) % CV_STRUCT_ALIGN == 0 ); - - memset( storage, 0, sizeof( *storage )); - storage->signature = CV_STORAGE_MAGIC_VAL; - storage->block_size = block_size; -} - - -/* Create root memory storage: */ -CV_IMPL CvMemStorage* -cvCreateMemStorage( int block_size ) -{ - CvMemStorage* storage = (CvMemStorage *)cvAlloc( sizeof( CvMemStorage )); - icvInitMemStorage( storage, block_size ); - return storage; -} - - -/* Create child memory storage: */ -CV_IMPL CvMemStorage * -cvCreateChildMemStorage( CvMemStorage * parent ) -{ - if( !parent ) - CV_Error( CV_StsNullPtr, "" ); - - CvMemStorage* storage = cvCreateMemStorage(parent->block_size); - storage->parent = parent; - - return storage; -} - - -/* Release all blocks of the storage (or return them to parent, if any): */ -static void -icvDestroyMemStorage( CvMemStorage* storage ) -{ - int k = 0; - - CvMemBlock *block; - CvMemBlock *dst_top = 0; - - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - if( storage->parent ) - dst_top = storage->parent->top; - - for( block = storage->bottom; block != 0; k++ ) - { - CvMemBlock *temp = block; - - block = block->next; - if( storage->parent ) - { - if( dst_top ) - { - temp->prev = dst_top; - temp->next = dst_top->next; - if( temp->next ) - temp->next->prev = temp; - dst_top = dst_top->next = temp; - } - else - { - dst_top = storage->parent->bottom = storage->parent->top = temp; - temp->prev = temp->next = 0; - storage->free_space = storage->block_size - sizeof( *temp ); - } - } - else - { - cvFree( &temp ); - } - } - - storage->top = storage->bottom = 0; - storage->free_space = 0; -} - - -/* Release memory storage: */ -CV_IMPL void -cvReleaseMemStorage( CvMemStorage** storage ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - CvMemStorage* st = *storage; - *storage = 0; - if( st ) - { - icvDestroyMemStorage( st ); - cvFree( &st ); - } -} - - -/* Clears memory storage (return blocks to the parent, if any): */ -CV_IMPL void -cvClearMemStorage( CvMemStorage * storage ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - if( storage->parent ) - icvDestroyMemStorage( storage ); - else - { - storage->top = storage->bottom; - storage->free_space = storage->bottom ? storage->block_size - sizeof(CvMemBlock) : 0; - } -} - - -/* Moves stack pointer to next block. - If no blocks, allocate new one and link it to the storage: */ -static void -icvGoNextMemBlock( CvMemStorage * storage ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - if( !storage->top || !storage->top->next ) - { - CvMemBlock *block; - - if( !(storage->parent) ) - { - block = (CvMemBlock *)cvAlloc( storage->block_size ); - } - else - { - CvMemStorage *parent = storage->parent; - CvMemStoragePos parent_pos; - - cvSaveMemStoragePos( parent, &parent_pos ); - icvGoNextMemBlock( parent ); - - block = parent->top; - cvRestoreMemStoragePos( parent, &parent_pos ); - - if( block == parent->top ) /* the single allocated block */ - { - assert( parent->bottom == block ); - parent->top = parent->bottom = 0; - parent->free_space = 0; - } - else - { - /* cut the block from the parent's list of blocks */ - parent->top->next = block->next; - if( block->next ) - block->next->prev = parent->top; - } - } - - /* link block */ - block->next = 0; - block->prev = storage->top; - - if( storage->top ) - storage->top->next = block; - else - storage->top = storage->bottom = block; - } - - if( storage->top->next ) - storage->top = storage->top->next; - storage->free_space = storage->block_size - sizeof(CvMemBlock); - assert( storage->free_space % CV_STRUCT_ALIGN == 0 ); -} - - -/* Remember memory storage position: */ -CV_IMPL void -cvSaveMemStoragePos( const CvMemStorage * storage, CvMemStoragePos * pos ) -{ - if( !storage || !pos ) - CV_Error( CV_StsNullPtr, "" ); - - pos->top = storage->top; - pos->free_space = storage->free_space; -} - - -/* Restore memory storage position: */ -CV_IMPL void -cvRestoreMemStoragePos( CvMemStorage * storage, CvMemStoragePos * pos ) -{ - if( !storage || !pos ) - CV_Error( CV_StsNullPtr, "" ); - if( pos->free_space > storage->block_size ) - CV_Error( CV_StsBadSize, "" ); - - /* - // this breaks icvGoNextMemBlock, so comment it off for now - if( storage->parent && (!pos->top || pos->top->next) ) - { - CvMemBlock* save_bottom; - if( !pos->top ) - save_bottom = 0; - else - { - save_bottom = storage->bottom; - storage->bottom = pos->top->next; - pos->top->next = 0; - storage->bottom->prev = 0; - } - icvDestroyMemStorage( storage ); - storage->bottom = save_bottom; - }*/ - - storage->top = pos->top; - storage->free_space = pos->free_space; - - if( !storage->top ) - { - storage->top = storage->bottom; - storage->free_space = storage->top ? storage->block_size - sizeof(CvMemBlock) : 0; - } -} - - -/* Allocate continuous buffer of the specified size in the storage: */ -CV_IMPL void* -cvMemStorageAlloc( CvMemStorage* storage, size_t size ) -{ - schar *ptr = 0; - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - - if( size > INT_MAX ) - CV_Error( CV_StsOutOfRange, "Too large memory block is requested" ); - - assert( storage->free_space % CV_STRUCT_ALIGN == 0 ); - - if( (size_t)storage->free_space < size ) - { - size_t max_free_space = cvAlignLeft(storage->block_size - sizeof(CvMemBlock), CV_STRUCT_ALIGN); - if( max_free_space < size ) - CV_Error( CV_StsOutOfRange, "requested size is negative or too big" ); - - icvGoNextMemBlock( storage ); - } - - ptr = ICV_FREE_PTR(storage); - assert( (size_t)ptr % CV_STRUCT_ALIGN == 0 ); - storage->free_space = cvAlignLeft(storage->free_space - (int)size, CV_STRUCT_ALIGN ); - - return ptr; -} - - -CV_IMPL CvString -cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, int len ) -{ - CvString str; - - str.len = len >= 0 ? len : (int)strlen(ptr); - str.ptr = (char*)cvMemStorageAlloc( storage, str.len + 1 ); - memcpy( str.ptr, ptr, str.len ); - str.ptr[str.len] = '\0'; - - return str; -} - - -/****************************************************************************************\ -* Sequence implementation * -\****************************************************************************************/ - -/* Create empty sequence: */ -CV_IMPL CvSeq * -cvCreateSeq( int seq_flags, size_t header_size, size_t elem_size, CvMemStorage* storage ) -{ - CvSeq *seq = 0; - - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - if( header_size < sizeof( CvSeq ) || elem_size <= 0 ) - CV_Error( CV_StsBadSize, "" ); - - /* allocate sequence header */ - seq = (CvSeq*)cvMemStorageAlloc( storage, header_size ); - memset( seq, 0, header_size ); - - seq->header_size = (int)header_size; - seq->flags = (seq_flags & ~CV_MAGIC_MASK) | CV_SEQ_MAGIC_VAL; - { - int elemtype = CV_MAT_TYPE(seq_flags); - int typesize = CV_ELEM_SIZE(elemtype); - - if( elemtype != CV_SEQ_ELTYPE_GENERIC && elemtype != CV_USRTYPE1 && - typesize != 0 && typesize != (int)elem_size ) - CV_Error( CV_StsBadSize, - "Specified element size doesn't match to the size of the specified element type " - "(try to use 0 for element type)" ); - } - seq->elem_size = (int)elem_size; - seq->storage = storage; - - cvSetSeqBlockSize( seq, (int)((1 << 10)/elem_size) ); - - return seq; -} - - -/* adjusts field of sequence. It determines how much the sequence - grows if there are no free space inside the sequence buffers */ -CV_IMPL void -cvSetSeqBlockSize( CvSeq *seq, int delta_elements ) -{ - int elem_size; - int useful_block_size; - - if( !seq || !seq->storage ) - CV_Error( CV_StsNullPtr, "" ); - if( delta_elements < 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - useful_block_size = cvAlignLeft(seq->storage->block_size - sizeof(CvMemBlock) - - sizeof(CvSeqBlock), CV_STRUCT_ALIGN); - elem_size = seq->elem_size; - - if( delta_elements == 0 ) - { - delta_elements = (1 << 10) / elem_size; - delta_elements = MAX( delta_elements, 1 ); - } - if( delta_elements * elem_size > useful_block_size ) - { - delta_elements = useful_block_size / elem_size; - if( delta_elements == 0 ) - CV_Error( CV_StsOutOfRange, "Storage block size is too small " - "to fit the sequence elements" ); - } - - seq->delta_elems = delta_elements; -} - - -/* Find a sequence element by its index: */ -CV_IMPL schar* -cvGetSeqElem( const CvSeq *seq, int index ) -{ - CvSeqBlock *block; - int count, total = seq->total; - - if( (unsigned)index >= (unsigned)total ) - { - index += index < 0 ? total : 0; - index -= index >= total ? total : 0; - if( (unsigned)index >= (unsigned)total ) - return 0; - } - - block = seq->first; - if( index + index <= total ) - { - while( index >= (count = block->count) ) - { - block = block->next; - index -= count; - } - } - else - { - do - { - block = block->prev; - total -= block->count; - } - while( index < total ); - index -= total; - } - - return block->data + index * seq->elem_size; -} - - -/* Calculate index of a sequence element: */ -CV_IMPL int -cvSeqElemIdx( const CvSeq* seq, const void* _element, CvSeqBlock** _block ) -{ - const schar *element = (const schar *)_element; - int elem_size; - int id = -1; - CvSeqBlock *first_block; - CvSeqBlock *block; - - if( !seq || !element ) - CV_Error( CV_StsNullPtr, "" ); - - block = first_block = seq->first; - elem_size = seq->elem_size; - - for( ;; ) - { - if( (unsigned)(element - block->data) < (unsigned) (block->count * elem_size) ) - { - if( _block ) - *_block = block; - if( elem_size <= ICV_SHIFT_TAB_MAX && (id = icvPower2ShiftTab[elem_size - 1]) >= 0 ) - id = (int)((size_t)(element - block->data) >> id); - else - id = (int)((size_t)(element - block->data) / elem_size); - id += block->start_index - seq->first->start_index; - break; - } - block = block->next; - if( block == first_block ) - break; - } - - return id; -} - - -CV_IMPL int -cvSliceLength( CvSlice slice, const CvSeq* seq ) -{ - int total = seq->total; - int length = slice.end_index - slice.start_index; - - if( length != 0 ) - { - if( slice.start_index < 0 ) - slice.start_index += total; - if( slice.end_index <= 0 ) - slice.end_index += total; - - length = slice.end_index - slice.start_index; - } - - while( length < 0 ) - length += total; - if( length > total ) - length = total; - - return length; -} - - -/* Copy all sequence elements into single continuous array: */ -CV_IMPL void* -cvCvtSeqToArray( const CvSeq *seq, void *array, CvSlice slice ) -{ - int elem_size, total; - CvSeqReader reader; - char *dst = (char*)array; - - if( !seq || !array ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = seq->elem_size; - total = cvSliceLength( slice, seq )*elem_size; - - if( total == 0 ) - return 0; - - cvStartReadSeq( seq, &reader, 0 ); - cvSetSeqReaderPos( &reader, slice.start_index, 0 ); - - do - { - int count = (int)(reader.block_max - reader.ptr); - if( count > total ) - count = total; - - memcpy( dst, reader.ptr, count ); - dst += count; - reader.block = reader.block->next; - reader.ptr = reader.block->data; - reader.block_max = reader.ptr + reader.block->count*elem_size; - total -= count; - } - while( total > 0 ); - - return array; -} - - -/* Construct a sequence from an array without copying any data. - NB: The resultant sequence cannot grow beyond its initial size: */ -CV_IMPL CvSeq* -cvMakeSeqHeaderForArray( int seq_flags, int header_size, int elem_size, - void *array, int total, CvSeq *seq, CvSeqBlock * block ) -{ - CvSeq* result = 0; - - if( elem_size <= 0 || header_size < (int)sizeof( CvSeq ) || total < 0 ) - CV_Error( CV_StsBadSize, "" ); - - if( !seq || ((!array || !block) && total > 0) ) - CV_Error( CV_StsNullPtr, "" ); - - memset( seq, 0, header_size ); - - seq->header_size = header_size; - seq->flags = (seq_flags & ~CV_MAGIC_MASK) | CV_SEQ_MAGIC_VAL; - { - int elemtype = CV_MAT_TYPE(seq_flags); - int typesize = CV_ELEM_SIZE(elemtype); - - if( elemtype != CV_SEQ_ELTYPE_GENERIC && - typesize != 0 && typesize != elem_size ) - CV_Error( CV_StsBadSize, - "Element size doesn't match to the size of predefined element type " - "(try to use 0 for sequence element type)" ); - } - seq->elem_size = elem_size; - seq->total = total; - seq->block_max = seq->ptr = (schar *) array + total * elem_size; - - if( total > 0 ) - { - seq->first = block; - block->prev = block->next = block; - block->start_index = 0; - block->count = total; - block->data = (schar *) array; - } - - result = seq; - - return result; -} - - -/* The function allocates space for at least one more sequence element. - If there are free sequence blocks (seq->free_blocks != 0) - they are reused, otherwise the space is allocated in the storage: */ -static void -icvGrowSeq( CvSeq *seq, int in_front_of ) -{ - CvSeqBlock *block; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - block = seq->free_blocks; - - if( !block ) - { - int elem_size = seq->elem_size; - int delta_elems = seq->delta_elems; - CvMemStorage *storage = seq->storage; - - if( seq->total >= delta_elems*4 ) - cvSetSeqBlockSize( seq, delta_elems*2 ); - - if( !storage ) - CV_Error( CV_StsNullPtr, "The sequence has NULL storage pointer" ); - - /* If there is a free space just after last allocated block - and it is big enough then enlarge the last block. - This can happen only if the new block is added to the end of sequence: */ - if( (unsigned)(ICV_FREE_PTR(storage) - seq->block_max) < CV_STRUCT_ALIGN && - storage->free_space >= seq->elem_size && !in_front_of ) - { - int delta = storage->free_space / elem_size; - - delta = MIN( delta, delta_elems ) * elem_size; - seq->block_max += delta; - storage->free_space = cvAlignLeft((int)(((schar*)storage->top + storage->block_size) - - seq->block_max), CV_STRUCT_ALIGN ); - return; - } - else - { - int delta = elem_size * delta_elems + ICV_ALIGNED_SEQ_BLOCK_SIZE; - - /* Try to allocate elements: */ - if( storage->free_space < delta ) - { - int small_block_size = MAX(1, delta_elems/3)*elem_size + - ICV_ALIGNED_SEQ_BLOCK_SIZE; - /* try to allocate smaller part */ - if( storage->free_space >= small_block_size + CV_STRUCT_ALIGN ) - { - delta = (storage->free_space - ICV_ALIGNED_SEQ_BLOCK_SIZE)/seq->elem_size; - delta = delta*seq->elem_size + ICV_ALIGNED_SEQ_BLOCK_SIZE; - } - else - { - icvGoNextMemBlock( storage ); - assert( storage->free_space >= delta ); - } - } - - block = (CvSeqBlock*)cvMemStorageAlloc( storage, delta ); - block->data = (schar*)cvAlignPtr( block + 1, CV_STRUCT_ALIGN ); - block->count = delta - ICV_ALIGNED_SEQ_BLOCK_SIZE; - block->prev = block->next = 0; - } - } - else - { - seq->free_blocks = block->next; - } - - if( !(seq->first) ) - { - seq->first = block; - block->prev = block->next = block; - } - else - { - block->prev = seq->first->prev; - block->next = seq->first; - block->prev->next = block->next->prev = block; - } - - /* For free blocks the field means - * total number of bytes in the block. - * - * For used blocks it means current number - * of sequence elements in the block: - */ - assert( block->count % seq->elem_size == 0 && block->count > 0 ); - - if( !in_front_of ) - { - seq->ptr = block->data; - seq->block_max = block->data + block->count; - block->start_index = block == block->prev ? 0 : - block->prev->start_index + block->prev->count; - } - else - { - int delta = block->count / seq->elem_size; - block->data += block->count; - - if( block != block->prev ) - { - assert( seq->first->start_index == 0 ); - seq->first = block; - } - else - { - seq->block_max = seq->ptr = block->data; - } - - block->start_index = 0; - - for( ;; ) - { - block->start_index += delta; - block = block->next; - if( block == seq->first ) - break; - } - } - - block->count = 0; -} - -/* Recycle a sequence block: */ -static void -icvFreeSeqBlock( CvSeq *seq, int in_front_of ) -{ - CvSeqBlock *block = seq->first; - - assert( (in_front_of ? block : block->prev)->count == 0 ); - - if( block == block->prev ) /* single block case */ - { - block->count = (int)(seq->block_max - block->data) + block->start_index * seq->elem_size; - block->data = seq->block_max - block->count; - seq->first = 0; - seq->ptr = seq->block_max = 0; - seq->total = 0; - } - else - { - if( !in_front_of ) - { - block = block->prev; - assert( seq->ptr == block->data ); - - block->count = (int)(seq->block_max - seq->ptr); - seq->block_max = seq->ptr = block->prev->data + - block->prev->count * seq->elem_size; - } - else - { - int delta = block->start_index; - - block->count = delta * seq->elem_size; - block->data -= block->count; - - /* Update start indices of sequence blocks: */ - for( ;; ) - { - block->start_index -= delta; - block = block->next; - if( block == seq->first ) - break; - } - - seq->first = block->next; - } - - block->prev->next = block->next; - block->next->prev = block->prev; - } - - assert( block->count > 0 && block->count % seq->elem_size == 0 ); - block->next = seq->free_blocks; - seq->free_blocks = block; -} - - -/****************************************************************************************\ -* Sequence Writer implementation * -\****************************************************************************************/ - -/* Initialize sequence writer: */ -CV_IMPL void -cvStartAppendToSeq( CvSeq *seq, CvSeqWriter * writer ) -{ - if( !seq || !writer ) - CV_Error( CV_StsNullPtr, "" ); - - memset( writer, 0, sizeof( *writer )); - writer->header_size = sizeof( CvSeqWriter ); - - writer->seq = seq; - writer->block = seq->first ? seq->first->prev : 0; - writer->ptr = seq->ptr; - writer->block_max = seq->block_max; -} - - -/* Initialize sequence writer: */ -CV_IMPL void -cvStartWriteSeq( int seq_flags, int header_size, - int elem_size, CvMemStorage * storage, CvSeqWriter * writer ) -{ - if( !storage || !writer ) - CV_Error( CV_StsNullPtr, "" ); - - CvSeq* seq = cvCreateSeq( seq_flags, header_size, elem_size, storage ); - cvStartAppendToSeq( seq, writer ); -} - - -/* Update sequence header: */ -CV_IMPL void -cvFlushSeqWriter( CvSeqWriter * writer ) -{ - if( !writer ) - CV_Error( CV_StsNullPtr, "" ); - - CvSeq* seq = writer->seq; - seq->ptr = writer->ptr; - - if( writer->block ) - { - int total = 0; - CvSeqBlock *first_block = writer->seq->first; - CvSeqBlock *block = first_block; - - writer->block->count = (int)((writer->ptr - writer->block->data) / seq->elem_size); - assert( writer->block->count > 0 ); - - do - { - total += block->count; - block = block->next; - } - while( block != first_block ); - - writer->seq->total = total; - } -} - - -/* Calls icvFlushSeqWriter and finishes writing process: */ -CV_IMPL CvSeq * -cvEndWriteSeq( CvSeqWriter * writer ) -{ - if( !writer ) - CV_Error( CV_StsNullPtr, "" ); - - cvFlushSeqWriter( writer ); - CvSeq* seq = writer->seq; - - /* Truncate the last block: */ - if( writer->block && writer->seq->storage ) - { - CvMemStorage *storage = seq->storage; - schar *storage_block_max = (schar *) storage->top + storage->block_size; - - assert( writer->block->count > 0 ); - - if( (unsigned)((storage_block_max - storage->free_space) - - seq->block_max) < CV_STRUCT_ALIGN ) - { - storage->free_space = cvAlignLeft((int)(storage_block_max - seq->ptr), CV_STRUCT_ALIGN); - seq->block_max = seq->ptr; - } - } - - writer->ptr = 0; - return seq; -} - - -/* Create new sequence block: */ -CV_IMPL void -cvCreateSeqBlock( CvSeqWriter * writer ) -{ - if( !writer || !writer->seq ) - CV_Error( CV_StsNullPtr, "" ); - - CvSeq* seq = writer->seq; - - cvFlushSeqWriter( writer ); - - icvGrowSeq( seq, 0 ); - - writer->block = seq->first->prev; - writer->ptr = seq->ptr; - writer->block_max = seq->block_max; -} - - -/****************************************************************************************\ -* Sequence Reader implementation * -\****************************************************************************************/ - -/* Initialize sequence reader: */ -CV_IMPL void -cvStartReadSeq( const CvSeq *seq, CvSeqReader * reader, int reverse ) -{ - CvSeqBlock *first_block; - CvSeqBlock *last_block; - - if( reader ) - { - reader->seq = 0; - reader->block = 0; - reader->ptr = reader->block_max = reader->block_min = 0; - } - - if( !seq || !reader ) - CV_Error( CV_StsNullPtr, "" ); - - reader->header_size = sizeof( CvSeqReader ); - reader->seq = (CvSeq*)seq; - - first_block = seq->first; - - if( first_block ) - { - last_block = first_block->prev; - reader->ptr = first_block->data; - reader->prev_elem = CV_GET_LAST_ELEM( seq, last_block ); - reader->delta_index = seq->first->start_index; - - if( reverse ) - { - schar *temp = reader->ptr; - - reader->ptr = reader->prev_elem; - reader->prev_elem = temp; - - reader->block = last_block; - } - else - { - reader->block = first_block; - } - - reader->block_min = reader->block->data; - reader->block_max = reader->block_min + reader->block->count * seq->elem_size; - } - else - { - reader->delta_index = 0; - reader->block = 0; - - reader->ptr = reader->prev_elem = reader->block_min = reader->block_max = 0; - } -} - - -/* Change the current reading block - * to the previous or to the next: - */ -CV_IMPL void -cvChangeSeqBlock( void* _reader, int direction ) -{ - CvSeqReader* reader = (CvSeqReader*)_reader; - - if( !reader ) - CV_Error( CV_StsNullPtr, "" ); - - if( direction > 0 ) - { - reader->block = reader->block->next; - reader->ptr = reader->block->data; - } - else - { - reader->block = reader->block->prev; - reader->ptr = CV_GET_LAST_ELEM( reader->seq, reader->block ); - } - reader->block_min = reader->block->data; - reader->block_max = reader->block_min + reader->block->count * reader->seq->elem_size; -} - - -/* Return the current reader position: */ -CV_IMPL int -cvGetSeqReaderPos( CvSeqReader* reader ) -{ - int elem_size; - int index = -1; - - if( !reader || !reader->ptr ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = reader->seq->elem_size; - if( elem_size <= ICV_SHIFT_TAB_MAX && (index = icvPower2ShiftTab[elem_size - 1]) >= 0 ) - index = (int)((reader->ptr - reader->block_min) >> index); - else - index = (int)((reader->ptr - reader->block_min) / elem_size); - - index += reader->block->start_index - reader->delta_index; - - return index; -} - - -/* Set reader position to given position, - * either absolute or relative to the - * current one: - */ -CV_IMPL void -cvSetSeqReaderPos( CvSeqReader* reader, int index, int is_relative ) -{ - CvSeqBlock *block; - int elem_size, count, total; - - if( !reader || !reader->seq ) - CV_Error( CV_StsNullPtr, "" ); - - total = reader->seq->total; - elem_size = reader->seq->elem_size; - - if( !is_relative ) - { - if( index < 0 ) - { - if( index < -total ) - CV_Error( CV_StsOutOfRange, "" ); - index += total; - } - else if( index >= total ) - { - index -= total; - if( index >= total ) - CV_Error( CV_StsOutOfRange, "" ); - } - - block = reader->seq->first; - if( index >= (count = block->count) ) - { - if( index + index <= total ) - { - do - { - block = block->next; - index -= count; - } - while( index >= (count = block->count) ); - } - else - { - do - { - block = block->prev; - total -= block->count; - } - while( index < total ); - index -= total; - } - } - reader->ptr = block->data + index * elem_size; - if( reader->block != block ) - { - reader->block = block; - reader->block_min = block->data; - reader->block_max = block->data + block->count * elem_size; - } - } - else - { - schar* ptr = reader->ptr; - index *= elem_size; - block = reader->block; - - if( index > 0 ) - { - while( ptr + index >= reader->block_max ) - { - int delta = (int)(reader->block_max - ptr); - index -= delta; - reader->block = block = block->next; - reader->block_min = ptr = block->data; - reader->block_max = block->data + block->count*elem_size; - } - reader->ptr = ptr + index; - } - else - { - while( ptr + index < reader->block_min ) - { - int delta = (int)(ptr - reader->block_min); - index += delta; - reader->block = block = block->prev; - reader->block_min = block->data; - reader->block_max = ptr = block->data + block->count*elem_size; - } - reader->ptr = ptr + index; - } - } -} - - -/* Push element onto the sequence: */ -CV_IMPL schar* -cvSeqPush( CvSeq *seq, const void *element ) -{ - schar *ptr = 0; - size_t elem_size; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = seq->elem_size; - ptr = seq->ptr; - - if( ptr >= seq->block_max ) - { - icvGrowSeq( seq, 0 ); - - ptr = seq->ptr; - assert( ptr + elem_size <= seq->block_max /*&& ptr == seq->block_min */ ); - } - - if( element ) - memcpy( ptr, element, elem_size ); - seq->first->prev->count++; - seq->total++; - seq->ptr = ptr + elem_size; - - return ptr; -} - - -/* Pop last element off of the sequence: */ -CV_IMPL void -cvSeqPop( CvSeq *seq, void *element ) -{ - schar *ptr; - int elem_size; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - if( seq->total <= 0 ) - CV_Error( CV_StsBadSize, "" ); - - elem_size = seq->elem_size; - seq->ptr = ptr = seq->ptr - elem_size; - - if( element ) - memcpy( element, ptr, elem_size ); - seq->ptr = ptr; - seq->total--; - - if( --(seq->first->prev->count) == 0 ) - { - icvFreeSeqBlock( seq, 0 ); - assert( seq->ptr == seq->block_max ); - } -} - - -/* Push element onto the front of the sequence: */ -CV_IMPL schar* -cvSeqPushFront( CvSeq *seq, const void *element ) -{ - schar* ptr = 0; - int elem_size; - CvSeqBlock *block; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = seq->elem_size; - block = seq->first; - - if( !block || block->start_index == 0 ) - { - icvGrowSeq( seq, 1 ); - - block = seq->first; - assert( block->start_index > 0 ); - } - - ptr = block->data -= elem_size; - - if( element ) - memcpy( ptr, element, elem_size ); - block->count++; - block->start_index--; - seq->total++; - - return ptr; -} - - -/* Shift out first element of the sequence: */ -CV_IMPL void -cvSeqPopFront( CvSeq *seq, void *element ) -{ - int elem_size; - CvSeqBlock *block; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - if( seq->total <= 0 ) - CV_Error( CV_StsBadSize, "" ); - - elem_size = seq->elem_size; - block = seq->first; - - if( element ) - memcpy( element, block->data, elem_size ); - block->data += elem_size; - block->start_index++; - seq->total--; - - if( --(block->count) == 0 ) - icvFreeSeqBlock( seq, 1 ); -} - -/* Insert new element in middle of sequence: */ -CV_IMPL schar* -cvSeqInsert( CvSeq *seq, int before_index, const void *element ) -{ - int elem_size; - int block_size; - CvSeqBlock *block; - int delta_index; - int total; - schar* ret_ptr = 0; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - - total = seq->total; - before_index += before_index < 0 ? total : 0; - before_index -= before_index > total ? total : 0; - - if( (unsigned)before_index > (unsigned)total ) - CV_Error( CV_StsOutOfRange, "" ); - - if( before_index == total ) - { - ret_ptr = cvSeqPush( seq, element ); - } - else if( before_index == 0 ) - { - ret_ptr = cvSeqPushFront( seq, element ); - } - else - { - elem_size = seq->elem_size; - - if( before_index >= total >> 1 ) - { - schar *ptr = seq->ptr + elem_size; - - if( ptr > seq->block_max ) - { - icvGrowSeq( seq, 0 ); - - ptr = seq->ptr + elem_size; - assert( ptr <= seq->block_max ); - } - - delta_index = seq->first->start_index; - block = seq->first->prev; - block->count++; - block_size = (int)(ptr - block->data); - - while( before_index < block->start_index - delta_index ) - { - CvSeqBlock *prev_block = block->prev; - - memmove( block->data + elem_size, block->data, block_size - elem_size ); - block_size = prev_block->count * elem_size; - memcpy( block->data, prev_block->data + block_size - elem_size, elem_size ); - block = prev_block; - - /* Check that we don't fall into an infinite loop: */ - assert( block != seq->first->prev ); - } - - before_index = (before_index - block->start_index + delta_index) * elem_size; - memmove( block->data + before_index + elem_size, block->data + before_index, - block_size - before_index - elem_size ); - - ret_ptr = block->data + before_index; - - if( element ) - memcpy( ret_ptr, element, elem_size ); - seq->ptr = ptr; - } - else - { - block = seq->first; - - if( block->start_index == 0 ) - { - icvGrowSeq( seq, 1 ); - - block = seq->first; - } - - delta_index = block->start_index; - block->count++; - block->start_index--; - block->data -= elem_size; - - while( before_index > block->start_index - delta_index + block->count ) - { - CvSeqBlock *next_block = block->next; - - block_size = block->count * elem_size; - memmove( block->data, block->data + elem_size, block_size - elem_size ); - memcpy( block->data + block_size - elem_size, next_block->data, elem_size ); - block = next_block; - - /* Check that we don't fall into an infinite loop: */ - assert( block != seq->first ); - } - - before_index = (before_index - block->start_index + delta_index) * elem_size; - memmove( block->data, block->data + elem_size, before_index - elem_size ); - - ret_ptr = block->data + before_index - elem_size; - - if( element ) - memcpy( ret_ptr, element, elem_size ); - } - - seq->total = total + 1; - } - - return ret_ptr; -} - - -/* Removes element from sequence: */ -CV_IMPL void -cvSeqRemove( CvSeq *seq, int index ) -{ - schar *ptr; - int elem_size; - int block_size; - CvSeqBlock *block; - int delta_index; - int total, front = 0; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - - total = seq->total; - - index += index < 0 ? total : 0; - index -= index >= total ? total : 0; - - if( (unsigned) index >= (unsigned) total ) - CV_Error( CV_StsOutOfRange, "Invalid index" ); - - if( index == total - 1 ) - { - cvSeqPop( seq, 0 ); - } - else if( index == 0 ) - { - cvSeqPopFront( seq, 0 ); - } - else - { - block = seq->first; - elem_size = seq->elem_size; - delta_index = block->start_index; - while( block->start_index - delta_index + block->count <= index ) - block = block->next; - - ptr = block->data + (index - block->start_index + delta_index) * elem_size; - - front = index < total >> 1; - if( !front ) - { - block_size = block->count * elem_size - (int)(ptr - block->data); - - while( block != seq->first->prev ) /* while not the last block */ - { - CvSeqBlock *next_block = block->next; - - memmove( ptr, ptr + elem_size, block_size - elem_size ); - memcpy( ptr + block_size - elem_size, next_block->data, elem_size ); - block = next_block; - ptr = block->data; - block_size = block->count * elem_size; - } - - memmove( ptr, ptr + elem_size, block_size - elem_size ); - seq->ptr -= elem_size; - } - else - { - ptr += elem_size; - block_size = (int)(ptr - block->data); - - while( block != seq->first ) - { - CvSeqBlock *prev_block = block->prev; - - memmove( block->data + elem_size, block->data, block_size - elem_size ); - block_size = prev_block->count * elem_size; - memcpy( block->data, prev_block->data + block_size - elem_size, elem_size ); - block = prev_block; - } - - memmove( block->data + elem_size, block->data, block_size - elem_size ); - block->data += elem_size; - block->start_index++; - } - - seq->total = total - 1; - if( --block->count == 0 ) - icvFreeSeqBlock( seq, front ); - } -} - - -/* Add several elements to the beginning or end of a sequence: */ -CV_IMPL void -cvSeqPushMulti( CvSeq *seq, const void *_elements, int count, int front ) -{ - char *elements = (char *) _elements; - - if( !seq ) - CV_Error( CV_StsNullPtr, "NULL sequence pointer" ); - if( count < 0 ) - CV_Error( CV_StsBadSize, "number of removed elements is negative" ); - - int elem_size = seq->elem_size; - - if( !front ) - { - while( count > 0 ) - { - int delta = (int)((seq->block_max - seq->ptr) / elem_size); - - delta = MIN( delta, count ); - if( delta > 0 ) - { - seq->first->prev->count += delta; - seq->total += delta; - count -= delta; - delta *= elem_size; - if( elements ) - { - memcpy( seq->ptr, elements, delta ); - elements += delta; - } - seq->ptr += delta; - } - - if( count > 0 ) - icvGrowSeq( seq, 0 ); - } - } - else - { - CvSeqBlock* block = seq->first; - - while( count > 0 ) - { - int delta; - - if( !block || block->start_index == 0 ) - { - icvGrowSeq( seq, 1 ); - - block = seq->first; - assert( block->start_index > 0 ); - } - - delta = MIN( block->start_index, count ); - count -= delta; - block->start_index -= delta; - block->count += delta; - seq->total += delta; - delta *= elem_size; - block->data -= delta; - - if( elements ) - memcpy( block->data, elements + count*elem_size, delta ); - } - } -} - - -/* Remove several elements from the end of sequence: */ -CV_IMPL void -cvSeqPopMulti( CvSeq *seq, void *_elements, int count, int front ) -{ - char *elements = (char *) _elements; - - if( !seq ) - CV_Error( CV_StsNullPtr, "NULL sequence pointer" ); - if( count < 0 ) - CV_Error( CV_StsBadSize, "number of removed elements is negative" ); - - count = MIN( count, seq->total ); - - if( !front ) - { - if( elements ) - elements += count * seq->elem_size; - - while( count > 0 ) - { - int delta = seq->first->prev->count; - - delta = MIN( delta, count ); - assert( delta > 0 ); - - seq->first->prev->count -= delta; - seq->total -= delta; - count -= delta; - delta *= seq->elem_size; - seq->ptr -= delta; - - if( elements ) - { - elements -= delta; - memcpy( elements, seq->ptr, delta ); - } - - if( seq->first->prev->count == 0 ) - icvFreeSeqBlock( seq, 0 ); - } - } - else - { - while( count > 0 ) - { - int delta = seq->first->count; - - delta = MIN( delta, count ); - assert( delta > 0 ); - - seq->first->count -= delta; - seq->total -= delta; - count -= delta; - seq->first->start_index += delta; - delta *= seq->elem_size; - - if( elements ) - { - memcpy( elements, seq->first->data, delta ); - elements += delta; - } - - seq->first->data += delta; - if( seq->first->count == 0 ) - icvFreeSeqBlock( seq, 1 ); - } - } -} - - -/* Remove all elements from a sequence: */ -CV_IMPL void -cvClearSeq( CvSeq *seq ) -{ - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - cvSeqPopMulti( seq, 0, seq->total ); -} - - -CV_IMPL CvSeq* -cvSeqSlice( const CvSeq* seq, CvSlice slice, CvMemStorage* storage, int copy_data ) -{ - CvSeq* subseq = 0; - int elem_size, count, length; - CvSeqReader reader; - CvSeqBlock *block, *first_block = 0, *last_block = 0; - - if( !CV_IS_SEQ(seq) ) - CV_Error( CV_StsBadArg, "Invalid sequence header" ); - - if( !storage ) - { - storage = seq->storage; - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - } - - elem_size = seq->elem_size; - length = cvSliceLength( slice, seq ); - if( slice.start_index < 0 ) - slice.start_index += seq->total; - else if( slice.start_index >= seq->total ) - slice.start_index -= seq->total; - if( (unsigned)length > (unsigned)seq->total || - ((unsigned)slice.start_index >= (unsigned)seq->total && length != 0) ) - CV_Error( CV_StsOutOfRange, "Bad sequence slice" ); - - subseq = cvCreateSeq( seq->flags, seq->header_size, elem_size, storage ); - - if( length > 0 ) - { - cvStartReadSeq( seq, &reader, 0 ); - cvSetSeqReaderPos( &reader, slice.start_index, 0 ); - count = (int)((reader.block_max - reader.ptr)/elem_size); - - do - { - int bl = MIN( count, length ); - - if( !copy_data ) - { - block = (CvSeqBlock*)cvMemStorageAlloc( storage, sizeof(*block) ); - if( !first_block ) - { - first_block = subseq->first = block->prev = block->next = block; - block->start_index = 0; - } - else - { - block->prev = last_block; - block->next = first_block; - last_block->next = first_block->prev = block; - block->start_index = last_block->start_index + last_block->count; - } - last_block = block; - block->data = reader.ptr; - block->count = bl; - subseq->total += bl; - } - else - cvSeqPushMulti( subseq, reader.ptr, bl, 0 ); - length -= bl; - reader.block = reader.block->next; - reader.ptr = reader.block->data; - count = reader.block->count; - } - while( length > 0 ); - } - - return subseq; -} - - -// Remove slice from the middle of the sequence. -// !!! TODO !!! Implement more efficient algorithm -CV_IMPL void -cvSeqRemoveSlice( CvSeq* seq, CvSlice slice ) -{ - int total, length; - - if( !CV_IS_SEQ(seq) ) - CV_Error( CV_StsBadArg, "Invalid sequence header" ); - - length = cvSliceLength( slice, seq ); - total = seq->total; - - if( slice.start_index < 0 ) - slice.start_index += total; - else if( slice.start_index >= total ) - slice.start_index -= total; - - if( (unsigned)slice.start_index >= (unsigned)total ) - CV_Error( CV_StsOutOfRange, "start slice index is out of range" ); - - slice.end_index = slice.start_index + length; - - if( slice.end_index < total ) - { - CvSeqReader reader_to, reader_from; - int elem_size = seq->elem_size; - - cvStartReadSeq( seq, &reader_to ); - cvStartReadSeq( seq, &reader_from ); - - if( slice.start_index > total - slice.end_index ) - { - int i, count = seq->total - slice.end_index; - cvSetSeqReaderPos( &reader_to, slice.start_index ); - cvSetSeqReaderPos( &reader_from, slice.end_index ); - - for( i = 0; i < count; i++ ) - { - memcpy( reader_to.ptr, reader_from.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, reader_to ); - CV_NEXT_SEQ_ELEM( elem_size, reader_from ); - } - - cvSeqPopMulti( seq, 0, slice.end_index - slice.start_index ); - } - else - { - int i, count = slice.start_index; - cvSetSeqReaderPos( &reader_to, slice.end_index ); - cvSetSeqReaderPos( &reader_from, slice.start_index ); - - for( i = 0; i < count; i++ ) - { - CV_PREV_SEQ_ELEM( elem_size, reader_to ); - CV_PREV_SEQ_ELEM( elem_size, reader_from ); - - memcpy( reader_to.ptr, reader_from.ptr, elem_size ); - } - - cvSeqPopMulti( seq, 0, slice.end_index - slice.start_index, 1 ); - } - } - else - { - cvSeqPopMulti( seq, 0, total - slice.start_index ); - cvSeqPopMulti( seq, 0, slice.end_index - total, 1 ); - } -} - - -// Insert a sequence into the middle of another sequence: -// !!! TODO !!! Implement more efficient algorithm -CV_IMPL void -cvSeqInsertSlice( CvSeq* seq, int index, const CvArr* from_arr ) -{ - CvSeqReader reader_to, reader_from; - int i, elem_size, total, from_total; - CvSeq from_header, *from = (CvSeq*)from_arr; - CvSeqBlock block; - - if( !CV_IS_SEQ(seq) ) - CV_Error( CV_StsBadArg, "Invalid destination sequence header" ); - - if( !CV_IS_SEQ(from)) - { - CvMat* mat = (CvMat*)from; - if( !CV_IS_MAT(mat)) - CV_Error( CV_StsBadArg, "Source is not a sequence nor matrix" ); - - if( !CV_IS_MAT_CONT(mat->type) || (mat->rows != 1 && mat->cols != 1) ) - CV_Error( CV_StsBadArg, "The source array must be 1d coninuous vector" ); - - from = cvMakeSeqHeaderForArray( CV_SEQ_KIND_GENERIC, sizeof(from_header), - CV_ELEM_SIZE(mat->type), - mat->data.ptr, mat->cols + mat->rows - 1, - &from_header, &block ); - } - - if( seq->elem_size != from->elem_size ) - CV_Error( CV_StsUnmatchedSizes, - "Source and destination sequence element sizes are different." ); - - from_total = from->total; - - if( from_total == 0 ) - return; - - total = seq->total; - index += index < 0 ? total : 0; - index -= index > total ? total : 0; - - if( (unsigned)index > (unsigned)total ) - CV_Error( CV_StsOutOfRange, "" ); - - elem_size = seq->elem_size; - - if( index < (total >> 1) ) - { - cvSeqPushMulti( seq, 0, from_total, 1 ); - - cvStartReadSeq( seq, &reader_to ); - cvStartReadSeq( seq, &reader_from ); - cvSetSeqReaderPos( &reader_from, from_total ); - - for( i = 0; i < index; i++ ) - { - memcpy( reader_to.ptr, reader_from.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, reader_to ); - CV_NEXT_SEQ_ELEM( elem_size, reader_from ); - } - } - else - { - cvSeqPushMulti( seq, 0, from_total ); - - cvStartReadSeq( seq, &reader_to ); - cvStartReadSeq( seq, &reader_from ); - cvSetSeqReaderPos( &reader_from, total ); - cvSetSeqReaderPos( &reader_to, seq->total ); - - for( i = 0; i < total - index; i++ ) - { - CV_PREV_SEQ_ELEM( elem_size, reader_to ); - CV_PREV_SEQ_ELEM( elem_size, reader_from ); - memcpy( reader_to.ptr, reader_from.ptr, elem_size ); - } - } - - cvStartReadSeq( from, &reader_from ); - cvSetSeqReaderPos( &reader_to, index ); - - for( i = 0; i < from_total; i++ ) - { - memcpy( reader_to.ptr, reader_from.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, reader_to ); - CV_NEXT_SEQ_ELEM( elem_size, reader_from ); - } -} - -// Sort the sequence using user-specified comparison function. -// The semantics is similar to qsort() function. -// The code is based on BSD system qsort(): -// * Copyright (c) 1992, 1993 -// * The Regents of the University of California. All rights reserved. -// * -// * Redistribution and use in source and binary forms, with or without -// * modification, are permitted provided that the following conditions -// * are met: -// * 1. Redistributions of source code must retain the above copyright -// * notice, this list of conditions and the following disclaimer. -// * 2. Redistributions in binary form must reproduce the above copyright -// * notice, this list of conditions and the following disclaimer in the -// * documentation and/or other materials provided with the distribution. -// * 3. All advertising materials mentioning features or use of this software -// * must display the following acknowledgement: -// * This product includes software developed by the University of -// * California, Berkeley and its contributors. -// * 4. Neither the name of the University 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 REGENTS AND CONTRIBUTORS ``AS IS'' AND -// * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -// * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -// * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -// * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -// * SUCH DAMAGE. - -typedef struct CvSeqReaderPos -{ - CvSeqBlock* block; - schar* ptr; - schar* block_min; - schar* block_max; -} -CvSeqReaderPos; - -#define CV_SAVE_READER_POS( reader, pos ) \ -{ \ - (pos).block = (reader).block; \ - (pos).ptr = (reader).ptr; \ - (pos).block_min = (reader).block_min; \ - (pos).block_max = (reader).block_max; \ -} - -#define CV_RESTORE_READER_POS( reader, pos )\ -{ \ - (reader).block = (pos).block; \ - (reader).ptr = (pos).ptr; \ - (reader).block_min = (pos).block_min; \ - (reader).block_max = (pos).block_max; \ -} - -inline schar* -icvMed3( schar* a, schar* b, schar* c, CvCmpFunc cmp_func, void* aux ) -{ - return cmp_func(a, b, aux) < 0 ? - (cmp_func(b, c, aux) < 0 ? b : cmp_func(a, c, aux) < 0 ? c : a) - :(cmp_func(b, c, aux) > 0 ? b : cmp_func(a, c, aux) < 0 ? a : c); -} - -CV_IMPL void -cvSeqSort( CvSeq* seq, CvCmpFunc cmp_func, void* aux ) -{ - int elem_size; - int isort_thresh = 7; - CvSeqReader left, right; - int sp = 0; - - struct - { - CvSeqReaderPos lb; - CvSeqReaderPos ub; - } - stack[48]; - - if( !CV_IS_SEQ(seq) ) - CV_Error( !seq ? CV_StsNullPtr : CV_StsBadArg, "Bad input sequence" ); - - if( !cmp_func ) - CV_Error( CV_StsNullPtr, "Null compare function" ); - - if( seq->total <= 1 ) - return; - - elem_size = seq->elem_size; - isort_thresh *= elem_size; - - cvStartReadSeq( seq, &left, 0 ); - right = left; - CV_SAVE_READER_POS( left, stack[0].lb ); - CV_PREV_SEQ_ELEM( elem_size, right ); - CV_SAVE_READER_POS( right, stack[0].ub ); - - while( sp >= 0 ) - { - CV_RESTORE_READER_POS( left, stack[sp].lb ); - CV_RESTORE_READER_POS( right, stack[sp].ub ); - sp--; - - for(;;) - { - int i, n, m; - CvSeqReader ptr, ptr2; - - if( left.block == right.block ) - n = (int)(right.ptr - left.ptr) + elem_size; - else - { - n = cvGetSeqReaderPos( &right ); - n = (n - cvGetSeqReaderPos( &left ) + 1)*elem_size; - } - - if( n <= isort_thresh ) - { - insert_sort: - ptr = ptr2 = left; - CV_NEXT_SEQ_ELEM( elem_size, ptr ); - CV_NEXT_SEQ_ELEM( elem_size, right ); - while( ptr.ptr != right.ptr ) - { - ptr2.ptr = ptr.ptr; - if( ptr2.block != ptr.block ) - { - ptr2.block = ptr.block; - ptr2.block_min = ptr.block_min; - ptr2.block_max = ptr.block_max; - } - while( ptr2.ptr != left.ptr ) - { - schar* cur = ptr2.ptr; - CV_PREV_SEQ_ELEM( elem_size, ptr2 ); - if( cmp_func( ptr2.ptr, cur, aux ) <= 0 ) - break; - CV_SWAP_ELEMS( ptr2.ptr, cur, elem_size ); - } - CV_NEXT_SEQ_ELEM( elem_size, ptr ); - } - break; - } - else - { - CvSeqReader left0, left1, right0, right1; - CvSeqReader tmp0, tmp1; - schar *m1, *m2, *m3, *pivot; - int swap_cnt = 0; - int l, l0, l1, r, r0, r1; - - left0 = tmp0 = left; - right0 = right1 = right; - n /= elem_size; - - if( n > 40 ) - { - int d = n / 8; - schar *p1, *p2, *p3; - p1 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p2 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p3 = tmp0.ptr; - m1 = icvMed3( p1, p2, p3, cmp_func, aux ); - cvSetSeqReaderPos( &tmp0, (n/2) - d*3, 1 ); - p1 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p2 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p3 = tmp0.ptr; - m2 = icvMed3( p1, p2, p3, cmp_func, aux ); - cvSetSeqReaderPos( &tmp0, n - 1 - d*3 - n/2, 1 ); - p1 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p2 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, d, 1 ); - p3 = tmp0.ptr; - m3 = icvMed3( p1, p2, p3, cmp_func, aux ); - } - else - { - m1 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, n/2, 1 ); - m2 = tmp0.ptr; - cvSetSeqReaderPos( &tmp0, n - 1 - n/2, 1 ); - m3 = tmp0.ptr; - } - - pivot = icvMed3( m1, m2, m3, cmp_func, aux ); - left = left0; - if( pivot != left.ptr ) - { - CV_SWAP_ELEMS( pivot, left.ptr, elem_size ); - pivot = left.ptr; - } - CV_NEXT_SEQ_ELEM( elem_size, left ); - left1 = left; - - for(;;) - { - while( left.ptr != right.ptr && (r = cmp_func(left.ptr, pivot, aux)) <= 0 ) - { - if( r == 0 ) - { - if( left1.ptr != left.ptr ) - CV_SWAP_ELEMS( left1.ptr, left.ptr, elem_size ); - swap_cnt = 1; - CV_NEXT_SEQ_ELEM( elem_size, left1 ); - } - CV_NEXT_SEQ_ELEM( elem_size, left ); - } - - while( left.ptr != right.ptr && (r = cmp_func(right.ptr,pivot, aux)) >= 0 ) - { - if( r == 0 ) - { - if( right1.ptr != right.ptr ) - CV_SWAP_ELEMS( right1.ptr, right.ptr, elem_size ); - swap_cnt = 1; - CV_PREV_SEQ_ELEM( elem_size, right1 ); - } - CV_PREV_SEQ_ELEM( elem_size, right ); - } - - if( left.ptr == right.ptr ) - { - r = cmp_func(left.ptr, pivot, aux); - if( r == 0 ) - { - if( left1.ptr != left.ptr ) - CV_SWAP_ELEMS( left1.ptr, left.ptr, elem_size ); - swap_cnt = 1; - CV_NEXT_SEQ_ELEM( elem_size, left1 ); - } - if( r <= 0 ) - { - CV_NEXT_SEQ_ELEM( elem_size, left ); - } - else - { - CV_PREV_SEQ_ELEM( elem_size, right ); - } - break; - } - - CV_SWAP_ELEMS( left.ptr, right.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, left ); - r = left.ptr == right.ptr; - CV_PREV_SEQ_ELEM( elem_size, right ); - swap_cnt = 1; - if( r ) - break; - } - - if( swap_cnt == 0 ) - { - left = left0, right = right0; - goto insert_sort; - } - - l = cvGetSeqReaderPos( &left ); - if( l == 0 ) - l = seq->total; - l0 = cvGetSeqReaderPos( &left0 ); - l1 = cvGetSeqReaderPos( &left1 ); - if( l1 == 0 ) - l1 = seq->total; - - n = MIN( l - l1, l1 - l0 ); - if( n > 0 ) - { - tmp0 = left0; - tmp1 = left; - cvSetSeqReaderPos( &tmp1, 0-n, 1 ); - for( i = 0; i < n; i++ ) - { - CV_SWAP_ELEMS( tmp0.ptr, tmp1.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, tmp0 ); - CV_NEXT_SEQ_ELEM( elem_size, tmp1 ); - } - } - - r = cvGetSeqReaderPos( &right ); - r0 = cvGetSeqReaderPos( &right0 ); - r1 = cvGetSeqReaderPos( &right1 ); - m = MIN( r0 - r1, r1 - r ); - if( m > 0 ) - { - tmp0 = left; - tmp1 = right0; - cvSetSeqReaderPos( &tmp1, 1-m, 1 ); - for( i = 0; i < m; i++ ) - { - CV_SWAP_ELEMS( tmp0.ptr, tmp1.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, tmp0 ); - CV_NEXT_SEQ_ELEM( elem_size, tmp1 ); - } - } - - n = l - l1; - m = r1 - r; - if( n > 1 ) - { - if( m > 1 ) - { - if( n > m ) - { - sp++; - CV_SAVE_READER_POS( left0, stack[sp].lb ); - cvSetSeqReaderPos( &left0, n - 1, 1 ); - CV_SAVE_READER_POS( left0, stack[sp].ub ); - left = right = right0; - cvSetSeqReaderPos( &left, 1 - m, 1 ); - } - else - { - sp++; - CV_SAVE_READER_POS( right0, stack[sp].ub ); - cvSetSeqReaderPos( &right0, 1 - m, 1 ); - CV_SAVE_READER_POS( right0, stack[sp].lb ); - left = right = left0; - cvSetSeqReaderPos( &right, n - 1, 1 ); - } - } - else - { - left = right = left0; - cvSetSeqReaderPos( &right, n - 1, 1 ); - } - } - else if( m > 1 ) - { - left = right = right0; - cvSetSeqReaderPos( &left, 1 - m, 1 ); - } - else - break; - } - } - } -} - - -CV_IMPL schar* -cvSeqSearch( CvSeq* seq, const void* _elem, CvCmpFunc cmp_func, - int is_sorted, int* _idx, void* userdata ) -{ - schar* result = 0; - const schar* elem = (const schar*)_elem; - int idx = -1; - int i, j; - - if( _idx ) - *_idx = idx; - - if( !CV_IS_SEQ(seq) ) - CV_Error( !seq ? CV_StsNullPtr : CV_StsBadArg, "Bad input sequence" ); - - if( !elem ) - CV_Error( CV_StsNullPtr, "Null element pointer" ); - - int elem_size = seq->elem_size; - int total = seq->total; - - if( total == 0 ) - return 0; - - if( !is_sorted ) - { - CvSeqReader reader; - cvStartReadSeq( seq, &reader, 0 ); - - if( cmp_func ) - { - for( i = 0; i < total; i++ ) - { - if( cmp_func( elem, reader.ptr, userdata ) == 0 ) - break; - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } - } - else if( (elem_size & (sizeof(int)-1)) == 0 ) - { - for( i = 0; i < total; i++ ) - { - for( j = 0; j < elem_size; j += sizeof(int) ) - { - if( *(const int*)(reader.ptr + j) != *(const int*)(elem + j) ) - break; - } - if( j == elem_size ) - break; - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } - } - else - { - for( i = 0; i < total; i++ ) - { - for( j = 0; j < elem_size; j++ ) - { - if( reader.ptr[j] != elem[j] ) - break; - } - if( j == elem_size ) - break; - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } - } - - idx = i; - if( i < total ) - result = reader.ptr; - } - else - { - if( !cmp_func ) - CV_Error( CV_StsNullPtr, "Null compare function" ); - - i = 0, j = total; - - while( j > i ) - { - int k = (i+j)>>1, code; - schar* ptr = cvGetSeqElem( seq, k ); - code = cmp_func( elem, ptr, userdata ); - if( !code ) - { - result = ptr; - idx = k; - if( _idx ) - *_idx = idx; - return result; - } - if( code < 0 ) - j = k; - else - i = k+1; - } - idx = j; - } - - if( _idx ) - *_idx = idx; - - return result; -} - - -CV_IMPL void -cvSeqInvert( CvSeq* seq ) -{ - CvSeqReader left_reader, right_reader; - int elem_size; - int i, count; - - cvStartReadSeq( seq, &left_reader, 0 ); - cvStartReadSeq( seq, &right_reader, 1 ); - elem_size = seq->elem_size; - count = seq->total >> 1; - - for( i = 0; i < count; i++ ) - { - CV_SWAP_ELEMS( left_reader.ptr, right_reader.ptr, elem_size ); - CV_NEXT_SEQ_ELEM( elem_size, left_reader ); - CV_PREV_SEQ_ELEM( elem_size, right_reader ); - } -} - - -typedef struct CvPTreeNode -{ - struct CvPTreeNode* parent; - schar* element; - int rank; -} -CvPTreeNode; - - -// This function splits the input sequence or set into one or more equivalence classes. -// is_equal(a,b,...) returns non-zero if the two sequence elements -// belong to the same class. The function returns sequence of integers - -// 0-based class indexes for each element. -// -// The algorithm is described in "Introduction to Algorithms" -// by Cormen, Leiserson and Rivest, chapter "Data structures for disjoint sets" -CV_IMPL int -cvSeqPartition( const CvSeq* seq, CvMemStorage* storage, CvSeq** labels, - CvCmpFunc is_equal, void* userdata ) -{ - CvSeq* result = 0; - CvMemStorage* temp_storage = 0; - int class_idx = 0; - - CvSeqWriter writer; - CvSeqReader reader, reader0; - CvSeq* nodes; - int i, j; - int is_set; - - if( !labels ) - CV_Error( CV_StsNullPtr, "" ); - - if( !seq || !is_equal ) - CV_Error( CV_StsNullPtr, "" ); - - if( !storage ) - storage = seq->storage; - - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - is_set = CV_IS_SET(seq); - - temp_storage = cvCreateChildMemStorage( storage ); - - nodes = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPTreeNode), temp_storage ); - - cvStartReadSeq( seq, &reader ); - memset( &writer, 0, sizeof(writer)); - cvStartAppendToSeq( nodes, &writer ); - - // Initial O(N) pass. Make a forest of single-vertex trees. - for( i = 0; i < seq->total; i++ ) - { - CvPTreeNode node = { 0, 0, 0 }; - if( !is_set || CV_IS_SET_ELEM( reader.ptr )) - node.element = reader.ptr; - CV_WRITE_SEQ_ELEM( node, writer ); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - cvEndWriteSeq( &writer ); - - // Because in the next loop we will iterate - // through all the sequence nodes each time, - // we do not need to initialize reader every time: - cvStartReadSeq( nodes, &reader ); - cvStartReadSeq( nodes, &reader0 ); - - // The main O(N^2) pass. Merge connected components. - for( i = 0; i < nodes->total; i++ ) - { - CvPTreeNode* node = (CvPTreeNode*)(reader0.ptr); - CvPTreeNode* root = node; - CV_NEXT_SEQ_ELEM( nodes->elem_size, reader0 ); - - if( !node->element ) - continue; - - // find root - while( root->parent ) - root = root->parent; - - for( j = 0; j < nodes->total; j++ ) - { - CvPTreeNode* node2 = (CvPTreeNode*)reader.ptr; - - if( node2->element && node2 != node && - is_equal( node->element, node2->element, userdata )) - { - CvPTreeNode* root2 = node2; - - // unite both trees - while( root2->parent ) - root2 = root2->parent; - - if( root2 != root ) - { - if( root->rank > root2->rank ) - root2->parent = root; - else - { - root->parent = root2; - root2->rank += root->rank == root2->rank; - root = root2; - } - assert( root->parent == 0 ); - - // Compress path from node2 to the root: - while( node2->parent ) - { - CvPTreeNode* temp = node2; - node2 = node2->parent; - temp->parent = root; - } - - // Compress path from node to the root: - node2 = node; - while( node2->parent ) - { - CvPTreeNode* temp = node2; - node2 = node2->parent; - temp->parent = root; - } - } - } - - CV_NEXT_SEQ_ELEM( sizeof(*node), reader ); - } - } - - // Final O(N) pass (Enumerate classes) - // Reuse reader one more time - result = cvCreateSeq( 0, sizeof(CvSeq), sizeof(int), storage ); - cvStartAppendToSeq( result, &writer ); - - for( i = 0; i < nodes->total; i++ ) - { - CvPTreeNode* node = (CvPTreeNode*)reader.ptr; - int idx = -1; - - if( node->element ) - { - while( node->parent ) - node = node->parent; - if( node->rank >= 0 ) - node->rank = ~class_idx++; - idx = ~node->rank; - } - - CV_NEXT_SEQ_ELEM( sizeof(*node), reader ); - CV_WRITE_SEQ_ELEM( idx, writer ); - } - - cvEndWriteSeq( &writer ); - - if( labels ) - *labels = result; - - cvReleaseMemStorage( &temp_storage ); - return class_idx; -} - - -/****************************************************************************************\ -* Set implementation * -\****************************************************************************************/ - -/* Creates empty set: */ -CV_IMPL CvSet* -cvCreateSet( int set_flags, int header_size, int elem_size, CvMemStorage * storage ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - if( header_size < (int)sizeof( CvSet ) || - elem_size < (int)sizeof(void*)*2 || - (elem_size & (sizeof(void*)-1)) != 0 ) - CV_Error( CV_StsBadSize, "" ); - - CvSet* set = (CvSet*) cvCreateSeq( set_flags, header_size, elem_size, storage ); - set->flags = (set->flags & ~CV_MAGIC_MASK) | CV_SET_MAGIC_VAL; - - return set; -} - - -/* Add new element to the set: */ -CV_IMPL int -cvSetAdd( CvSet* set, CvSetElem* element, CvSetElem** inserted_element ) -{ - int id = -1; - CvSetElem *free_elem; - - if( !set ) - CV_Error( CV_StsNullPtr, "" ); - - if( !(set->free_elems) ) - { - int count = set->total; - int elem_size = set->elem_size; - schar *ptr; - icvGrowSeq( (CvSeq *) set, 0 ); - - set->free_elems = (CvSetElem*) (ptr = set->ptr); - for( ; ptr + elem_size <= set->block_max; ptr += elem_size, count++ ) - { - ((CvSetElem*)ptr)->flags = count | CV_SET_ELEM_FREE_FLAG; - ((CvSetElem*)ptr)->next_free = (CvSetElem*)(ptr + elem_size); - } - assert( count <= CV_SET_ELEM_IDX_MASK+1 ); - ((CvSetElem*)(ptr - elem_size))->next_free = 0; - set->first->prev->count += count - set->total; - set->total = count; - set->ptr = set->block_max; - } - - free_elem = set->free_elems; - set->free_elems = free_elem->next_free; - - id = free_elem->flags & CV_SET_ELEM_IDX_MASK; - if( element ) - memcpy( free_elem, element, set->elem_size ); - - free_elem->flags = id; - set->active_count++; - - if( inserted_element ) - *inserted_element = free_elem; - - return id; -} - - -/* Remove element from a set given element index: */ -CV_IMPL void -cvSetRemove( CvSet* set, int index ) -{ - CvSetElem* elem = cvGetSetElem( set, index ); - if( elem ) - cvSetRemoveByPtr( set, elem ); - else if( !set ) - CV_Error( CV_StsNullPtr, "" ); -} - - -/* Remove all elements from a set: */ -CV_IMPL void -cvClearSet( CvSet* set ) -{ - cvClearSeq( (CvSeq*)set ); - set->free_elems = 0; - set->active_count = 0; -} - - -/****************************************************************************************\ -* Graph implementation * -\****************************************************************************************/ - -/* Create a new graph: */ -CV_IMPL CvGraph * -cvCreateGraph( int graph_type, int header_size, - int vtx_size, int edge_size, CvMemStorage * storage ) -{ - CvGraph *graph = 0; - CvSet *edges = 0; - CvSet *vertices = 0; - - if( header_size < (int) sizeof( CvGraph ) - || edge_size < (int) sizeof( CvGraphEdge ) - || vtx_size < (int) sizeof( CvGraphVtx ) - ){ - CV_Error( CV_StsBadSize, "" ); - } - - vertices = cvCreateSet( graph_type, header_size, vtx_size, storage ); - edges = cvCreateSet( CV_SEQ_KIND_GENERIC | CV_SEQ_ELTYPE_GRAPH_EDGE, - sizeof( CvSet ), edge_size, storage ); - - graph = (CvGraph*)vertices; - graph->edges = edges; - - return graph; -} - - -/* Remove all vertices and edges from a graph: */ -CV_IMPL void -cvClearGraph( CvGraph * graph ) -{ - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - cvClearSet( graph->edges ); - cvClearSet( (CvSet*)graph ); -} - - -/* Add a vertex to a graph: */ -CV_IMPL int -cvGraphAddVtx( CvGraph* graph, const CvGraphVtx* _vertex, CvGraphVtx** _inserted_vertex ) -{ - CvGraphVtx *vertex = 0; - int index = -1; - - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - vertex = (CvGraphVtx*)cvSetNew((CvSet*)graph); - if( vertex ) - { - if( _vertex ) - memcpy( vertex + 1, _vertex + 1, graph->elem_size - sizeof(CvGraphVtx) ); - vertex->first = 0; - index = vertex->flags; - } - - if( _inserted_vertex ) - *_inserted_vertex = vertex; - - return index; -} - - -/* Remove a vertex from the graph together with its incident edges: */ -CV_IMPL int -cvGraphRemoveVtxByPtr( CvGraph* graph, CvGraphVtx* vtx ) -{ - int count = -1; - - if( !graph || !vtx ) - CV_Error( CV_StsNullPtr, "" ); - - if( !CV_IS_SET_ELEM(vtx)) - CV_Error( CV_StsBadArg, "The vertex does not belong to the graph" ); - - count = graph->edges->active_count; - for( ;; ) - { - CvGraphEdge *edge = vtx->first; - if( !edge ) - break; - cvGraphRemoveEdgeByPtr( graph, edge->vtx[0], edge->vtx[1] ); - } - count -= graph->edges->active_count; - cvSetRemoveByPtr( (CvSet*)graph, vtx ); - - return count; -} - - -/* Remove a vertex from the graph together with its incident edges: */ -CV_IMPL int -cvGraphRemoveVtx( CvGraph* graph, int index ) -{ - int count = -1; - CvGraphVtx *vtx = 0; - - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - vtx = cvGetGraphVtx( graph, index ); - if( !vtx ) - CV_Error( CV_StsBadArg, "The vertex is not found" ); - - count = graph->edges->active_count; - for( ;; ) - { - CvGraphEdge *edge = vtx->first; - count++; - - if( !edge ) - break; - cvGraphRemoveEdgeByPtr( graph, edge->vtx[0], edge->vtx[1] ); - } - count -= graph->edges->active_count; - cvSetRemoveByPtr( (CvSet*)graph, vtx ); - - return count; -} - - -/* Find a graph edge given pointers to the ending vertices: */ -CV_IMPL CvGraphEdge* -cvFindGraphEdgeByPtr( const CvGraph* graph, - const CvGraphVtx* start_vtx, - const CvGraphVtx* end_vtx ) -{ - int ofs = 0; - - if( !graph || !start_vtx || !end_vtx ) - CV_Error( CV_StsNullPtr, "" ); - - if( start_vtx == end_vtx ) - return 0; - - if( !CV_IS_GRAPH_ORIENTED( graph ) && - (start_vtx->flags & CV_SET_ELEM_IDX_MASK) > (end_vtx->flags & CV_SET_ELEM_IDX_MASK) ) - { - const CvGraphVtx* t; - CV_SWAP( start_vtx, end_vtx, t ); - } - - CvGraphEdge* edge = start_vtx->first; - for( ; edge; edge = edge->next[ofs] ) - { - ofs = start_vtx == edge->vtx[1]; - assert( ofs == 1 || start_vtx == edge->vtx[0] ); - if( edge->vtx[1] == end_vtx ) - break; - } - - return edge; -} - - -/* Find an edge in the graph given indices of the ending vertices: */ -CV_IMPL CvGraphEdge * -cvFindGraphEdge( const CvGraph* graph, int start_idx, int end_idx ) -{ - CvGraphVtx *start_vtx; - CvGraphVtx *end_vtx; - - if( !graph ) - CV_Error( CV_StsNullPtr, "graph pointer is NULL" ); - - start_vtx = cvGetGraphVtx( graph, start_idx ); - end_vtx = cvGetGraphVtx( graph, end_idx ); - - return cvFindGraphEdgeByPtr( graph, start_vtx, end_vtx ); -} - - -/* Given two vertices, return the edge - * connecting them, creating it if it - * did not already exist: - */ -CV_IMPL int -cvGraphAddEdgeByPtr( CvGraph* graph, - CvGraphVtx* start_vtx, CvGraphVtx* end_vtx, - const CvGraphEdge* _edge, - CvGraphEdge ** _inserted_edge ) -{ - CvGraphEdge *edge = 0; - int result = -1; - int delta; - - if( !graph ) - CV_Error( CV_StsNullPtr, "graph pointer is NULL" ); - - if( !CV_IS_GRAPH_ORIENTED( graph ) && - (start_vtx->flags & CV_SET_ELEM_IDX_MASK) > (end_vtx->flags & CV_SET_ELEM_IDX_MASK) ) - { - CvGraphVtx* t; - CV_SWAP( start_vtx, end_vtx, t ); - } - - edge = cvFindGraphEdgeByPtr( graph, start_vtx, end_vtx ); - if( edge ) - { - result = 0; - if( _inserted_edge ) - *_inserted_edge = edge; - return result; - } - - if( start_vtx == end_vtx ) - CV_Error( start_vtx ? CV_StsBadArg : CV_StsNullPtr, - "vertex pointers coinside (or set to NULL)" ); - - edge = (CvGraphEdge*)cvSetNew( (CvSet*)(graph->edges) ); - assert( edge->flags >= 0 ); - - edge->vtx[0] = start_vtx; - edge->vtx[1] = end_vtx; - edge->next[0] = start_vtx->first; - edge->next[1] = end_vtx->first; - start_vtx->first = end_vtx->first = edge; - - delta = graph->edges->elem_size - sizeof(*edge); - if( _edge ) - { - if( delta > 0 ) - memcpy( edge + 1, _edge + 1, delta ); - edge->weight = _edge->weight; - } - else - { - if( delta > 0 ) - memset( edge + 1, 0, delta ); - edge->weight = 1.f; - } - - result = 1; - - if( _inserted_edge ) - *_inserted_edge = edge; - - return result; -} - -/* Given two vertices, return the edge - * connecting them, creating it if it - * did not already exist: - */ -CV_IMPL int -cvGraphAddEdge( CvGraph* graph, - int start_idx, int end_idx, - const CvGraphEdge* _edge, - CvGraphEdge ** _inserted_edge ) -{ - CvGraphVtx *start_vtx; - CvGraphVtx *end_vtx; - - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - start_vtx = cvGetGraphVtx( graph, start_idx ); - end_vtx = cvGetGraphVtx( graph, end_idx ); - - return cvGraphAddEdgeByPtr( graph, start_vtx, end_vtx, _edge, _inserted_edge ); -} - - -/* Remove the graph edge connecting two given vertices: */ -CV_IMPL void -cvGraphRemoveEdgeByPtr( CvGraph* graph, CvGraphVtx* start_vtx, CvGraphVtx* end_vtx ) -{ - int ofs, prev_ofs; - CvGraphEdge *edge, *next_edge, *prev_edge; - - if( !graph || !start_vtx || !end_vtx ) - CV_Error( CV_StsNullPtr, "" ); - - if( start_vtx == end_vtx ) - return; - - if( !CV_IS_GRAPH_ORIENTED( graph ) && - (start_vtx->flags & CV_SET_ELEM_IDX_MASK) > (end_vtx->flags & CV_SET_ELEM_IDX_MASK) ) - { - CvGraphVtx* t; - CV_SWAP( start_vtx, end_vtx, t ); - } - - for( ofs = prev_ofs = 0, prev_edge = 0, edge = start_vtx->first; edge != 0; - prev_ofs = ofs, prev_edge = edge, edge = edge->next[ofs] ) - { - ofs = start_vtx == edge->vtx[1]; - assert( ofs == 1 || start_vtx == edge->vtx[0] ); - if( edge->vtx[1] == end_vtx ) - break; - } - - if( !edge ) - return; - - next_edge = edge->next[ofs]; - if( prev_edge ) - prev_edge->next[prev_ofs] = next_edge; - else - start_vtx->first = next_edge; - - for( ofs = prev_ofs = 0, prev_edge = 0, edge = end_vtx->first; edge != 0; - prev_ofs = ofs, prev_edge = edge, edge = edge->next[ofs] ) - { - ofs = end_vtx == edge->vtx[1]; - assert( ofs == 1 || end_vtx == edge->vtx[0] ); - if( edge->vtx[0] == start_vtx ) - break; - } - - assert( edge != 0 ); - - next_edge = edge->next[ofs]; - if( prev_edge ) - prev_edge->next[prev_ofs] = next_edge; - else - end_vtx->first = next_edge; - - cvSetRemoveByPtr( graph->edges, edge ); -} - - -/* Remove the graph edge connecting two given vertices: */ -CV_IMPL void -cvGraphRemoveEdge( CvGraph* graph, int start_idx, int end_idx ) -{ - CvGraphVtx *start_vtx; - CvGraphVtx *end_vtx; - - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - start_vtx = cvGetGraphVtx( graph, start_idx ); - end_vtx = cvGetGraphVtx( graph, end_idx ); - - cvGraphRemoveEdgeByPtr( graph, start_vtx, end_vtx ); -} - - -/* Count number of edges incident to a given vertex: */ -CV_IMPL int -cvGraphVtxDegreeByPtr( const CvGraph* graph, const CvGraphVtx* vertex ) -{ - CvGraphEdge *edge; - int count; - - if( !graph || !vertex ) - CV_Error( CV_StsNullPtr, "" ); - - for( edge = vertex->first, count = 0; edge; ) - { - count++; - edge = CV_NEXT_GRAPH_EDGE( edge, vertex ); - } - - return count; -} - - -/* Count number of edges incident to a given vertex: */ -CV_IMPL int -cvGraphVtxDegree( const CvGraph* graph, int vtx_idx ) -{ - CvGraphVtx *vertex; - CvGraphEdge *edge; - int count; - - if( !graph ) - CV_Error( CV_StsNullPtr, "" ); - - vertex = cvGetGraphVtx( graph, vtx_idx ); - if( !vertex ) - CV_Error( CV_StsObjectNotFound, "" ); - - for( edge = vertex->first, count = 0; edge; ) - { - count++; - edge = CV_NEXT_GRAPH_EDGE( edge, vertex ); - } - - return count; -} - - -typedef struct CvGraphItem -{ - CvGraphVtx* vtx; - CvGraphEdge* edge; -} -CvGraphItem; - - -static void -icvSeqElemsClearFlags( CvSeq* seq, int offset, int clear_mask ) -{ - CvSeqReader reader; - int i, total, elem_size; - - if( !seq ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = seq->elem_size; - total = seq->total; - - if( (unsigned)offset > (unsigned)elem_size ) - CV_Error( CV_StsBadArg, "" ); - - cvStartReadSeq( seq, &reader ); - - for( i = 0; i < total; i++ ) - { - int* flag_ptr = (int*)(reader.ptr + offset); - *flag_ptr &= ~clear_mask; - - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } -} - - -static schar* -icvSeqFindNextElem( CvSeq* seq, int offset, int mask, - int value, int* start_index ) -{ - schar* elem_ptr = 0; - - CvSeqReader reader; - int total, elem_size, index; - - if( !seq || !start_index ) - CV_Error( CV_StsNullPtr, "" ); - - elem_size = seq->elem_size; - total = seq->total; - index = *start_index; - - if( (unsigned)offset > (unsigned)elem_size ) - CV_Error( CV_StsBadArg, "" ); - - if( total == 0 ) - return 0; - - if( (unsigned)index >= (unsigned)total ) - { - index %= total; - index += index < 0 ? total : 0; - } - - cvStartReadSeq( seq, &reader ); - - if( index != 0 ) - cvSetSeqReaderPos( &reader, index ); - - for( index = 0; index < total; index++ ) - { - int* flag_ptr = (int*)(reader.ptr + offset); - if( (*flag_ptr & mask) == value ) - break; - - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } - - if( index < total ) - { - elem_ptr = reader.ptr; - *start_index = index; - } - - return elem_ptr; -} - -#define CV_FIELD_OFFSET( field, structtype ) ((int)(size_t)&((structtype*)0)->field) - -CV_IMPL CvGraphScanner* -cvCreateGraphScanner( CvGraph* graph, CvGraphVtx* vtx, int mask ) -{ - if( !graph ) - CV_Error( CV_StsNullPtr, "Null graph pointer" ); - - CV_Assert( graph->storage != 0 ); - - CvGraphScanner* scanner = (CvGraphScanner*)cvAlloc( sizeof(*scanner) ); - memset( scanner, 0, sizeof(*scanner)); - - scanner->graph = graph; - scanner->mask = mask; - scanner->vtx = vtx; - scanner->index = vtx == 0 ? 0 : -1; - - CvMemStorage* child_storage = cvCreateChildMemStorage( graph->storage ); - - scanner->stack = cvCreateSeq( 0, sizeof(CvSet), - sizeof(CvGraphItem), child_storage ); - - icvSeqElemsClearFlags( (CvSeq*)graph, - CV_FIELD_OFFSET( flags, CvGraphVtx), - CV_GRAPH_ITEM_VISITED_FLAG| - CV_GRAPH_SEARCH_TREE_NODE_FLAG ); - - icvSeqElemsClearFlags( (CvSeq*)(graph->edges), - CV_FIELD_OFFSET( flags, CvGraphEdge), - CV_GRAPH_ITEM_VISITED_FLAG ); - - return scanner; -} - - -CV_IMPL void -cvReleaseGraphScanner( CvGraphScanner** scanner ) -{ - if( !scanner ) - CV_Error( CV_StsNullPtr, "Null double pointer to graph scanner" ); - - if( *scanner ) - { - if( (*scanner)->stack ) - cvReleaseMemStorage( &((*scanner)->stack->storage)); - cvFree( scanner ); - } -} - - -CV_IMPL int -cvNextGraphItem( CvGraphScanner* scanner ) -{ - int code = -1; - CvGraphVtx* vtx; - CvGraphVtx* dst; - CvGraphEdge* edge; - CvGraphItem item; - - if( !scanner || !(scanner->stack)) - CV_Error( CV_StsNullPtr, "Null graph scanner" ); - - dst = scanner->dst; - vtx = scanner->vtx; - edge = scanner->edge; - - for(;;) - { - for(;;) - { - if( dst && !CV_IS_GRAPH_VERTEX_VISITED(dst) ) - { - scanner->vtx = vtx = dst; - edge = vtx->first; - dst->flags |= CV_GRAPH_ITEM_VISITED_FLAG; - - if((scanner->mask & CV_GRAPH_VERTEX)) - { - scanner->vtx = vtx; - scanner->edge = vtx->first; - scanner->dst = 0; - code = CV_GRAPH_VERTEX; - return code; - } - } - - while( edge ) - { - dst = edge->vtx[vtx == edge->vtx[0]]; - - if( !CV_IS_GRAPH_EDGE_VISITED(edge) ) - { - // Check that the edge is outgoing: - if( !CV_IS_GRAPH_ORIENTED( scanner->graph ) || dst != edge->vtx[0] ) - { - edge->flags |= CV_GRAPH_ITEM_VISITED_FLAG; - - if( !CV_IS_GRAPH_VERTEX_VISITED(dst) ) - { - item.vtx = vtx; - item.edge = edge; - - vtx->flags |= CV_GRAPH_SEARCH_TREE_NODE_FLAG; - - cvSeqPush( scanner->stack, &item ); - - if( scanner->mask & CV_GRAPH_TREE_EDGE ) - { - code = CV_GRAPH_TREE_EDGE; - scanner->vtx = vtx; - scanner->dst = dst; - scanner->edge = edge; - return code; - } - break; - } - else - { - if( scanner->mask & (CV_GRAPH_BACK_EDGE| - CV_GRAPH_CROSS_EDGE| - CV_GRAPH_FORWARD_EDGE) ) - { - code = (dst->flags & CV_GRAPH_SEARCH_TREE_NODE_FLAG) ? - CV_GRAPH_BACK_EDGE : - (edge->flags & CV_GRAPH_FORWARD_EDGE_FLAG) ? - CV_GRAPH_FORWARD_EDGE : CV_GRAPH_CROSS_EDGE; - edge->flags &= ~CV_GRAPH_FORWARD_EDGE_FLAG; - if( scanner->mask & code ) - { - scanner->vtx = vtx; - scanner->dst = dst; - scanner->edge = edge; - return code; - } - } - } - } - else if( (dst->flags & (CV_GRAPH_ITEM_VISITED_FLAG| - CV_GRAPH_SEARCH_TREE_NODE_FLAG)) == - (CV_GRAPH_ITEM_VISITED_FLAG| - CV_GRAPH_SEARCH_TREE_NODE_FLAG)) - { - edge->flags |= CV_GRAPH_FORWARD_EDGE_FLAG; - } - } - - edge = CV_NEXT_GRAPH_EDGE( edge, vtx ); - } - - if( !edge ) /* need to backtrack */ - { - if( scanner->stack->total == 0 ) - { - if( scanner->index >= 0 ) - vtx = 0; - else - scanner->index = 0; - break; - } - cvSeqPop( scanner->stack, &item ); - vtx = item.vtx; - vtx->flags &= ~CV_GRAPH_SEARCH_TREE_NODE_FLAG; - edge = item.edge; - dst = 0; - - if( scanner->mask & CV_GRAPH_BACKTRACKING ) - { - scanner->vtx = vtx; - scanner->edge = edge; - scanner->dst = edge->vtx[vtx == edge->vtx[0]]; - code = CV_GRAPH_BACKTRACKING; - return code; - } - } - } - - if( !vtx ) - { - vtx = (CvGraphVtx*)icvSeqFindNextElem( (CvSeq*)(scanner->graph), - CV_FIELD_OFFSET( flags, CvGraphVtx ), CV_GRAPH_ITEM_VISITED_FLAG|INT_MIN, - 0, &(scanner->index) ); - - if( !vtx ) - { - code = CV_GRAPH_OVER; - break; - } - } - - dst = vtx; - if( scanner->mask & CV_GRAPH_NEW_TREE ) - { - scanner->dst = dst; - scanner->edge = 0; - scanner->vtx = 0; - code = CV_GRAPH_NEW_TREE; - break; - } - } - - return code; -} - - -CV_IMPL CvGraph* -cvCloneGraph( const CvGraph* graph, CvMemStorage* storage ) -{ - int* flag_buffer = 0; - CvGraphVtx** ptr_buffer = 0; - CvGraph* result = 0; - - int i, k; - int vtx_size, edge_size; - CvSeqReader reader; - - if( !CV_IS_GRAPH(graph)) - CV_Error( CV_StsBadArg, "Invalid graph pointer" ); - - if( !storage ) - storage = graph->storage; - - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - - vtx_size = graph->elem_size; - edge_size = graph->edges->elem_size; - - flag_buffer = (int*)cvAlloc( graph->total*sizeof(flag_buffer[0])); - ptr_buffer = (CvGraphVtx**)cvAlloc( graph->total*sizeof(ptr_buffer[0])); - result = cvCreateGraph( graph->flags, graph->header_size, - vtx_size, edge_size, storage ); - memcpy( result + sizeof(CvGraph), graph + sizeof(CvGraph), - graph->header_size - sizeof(CvGraph)); - - // Pass 1. Save flags, copy vertices: - cvStartReadSeq( (CvSeq*)graph, &reader ); - for( i = 0, k = 0; i < graph->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - CvGraphVtx* vtx = (CvGraphVtx*)reader.ptr; - CvGraphVtx* dstvtx = 0; - cvGraphAddVtx( result, vtx, &dstvtx ); - flag_buffer[k] = dstvtx->flags = vtx->flags; - vtx->flags = k; - ptr_buffer[k++] = dstvtx; - } - CV_NEXT_SEQ_ELEM( vtx_size, reader ); - } - - // Pass 2. Copy edges: - cvStartReadSeq( (CvSeq*)graph->edges, &reader ); - for( i = 0; i < graph->edges->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - CvGraphEdge* edge = (CvGraphEdge*)reader.ptr; - CvGraphEdge* dstedge = 0; - CvGraphVtx* new_org = ptr_buffer[edge->vtx[0]->flags]; - CvGraphVtx* new_dst = ptr_buffer[edge->vtx[1]->flags]; - cvGraphAddEdgeByPtr( result, new_org, new_dst, edge, &dstedge ); - dstedge->flags = edge->flags; - } - CV_NEXT_SEQ_ELEM( edge_size, reader ); - } - - // Pass 3. Restore flags: - cvStartReadSeq( (CvSeq*)graph, &reader ); - for( i = 0, k = 0; i < graph->edges->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - CvGraphVtx* vtx = (CvGraphVtx*)reader.ptr; - vtx->flags = flag_buffer[k++]; - } - CV_NEXT_SEQ_ELEM( vtx_size, reader ); - } - - cvFree( &flag_buffer ); - cvFree( &ptr_buffer ); - - if( cvGetErrStatus() < 0 ) - result = 0; - - return result; -} - - -/****************************************************************************************\ -* Working with sequence tree * -\****************************************************************************************/ - -// Gather pointers to all the sequences, accessible from the , to the single sequence. -CV_IMPL CvSeq* -cvTreeToNodeSeq( const void* first, int header_size, CvMemStorage* storage ) -{ - CvSeq* allseq = 0; - CvTreeNodeIterator iterator; - - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - - allseq = cvCreateSeq( 0, header_size, sizeof(first), storage ); - - if( first ) - { - cvInitTreeNodeIterator( &iterator, first, INT_MAX ); - - for(;;) - { - void* node = cvNextTreeNode( &iterator ); - if( !node ) - break; - cvSeqPush( allseq, &node ); - } - } - - - - return allseq; -} - - -typedef struct CvTreeNode -{ - int flags; /* micsellaneous flags */ - int header_size; /* size of sequence header */ - struct CvTreeNode* h_prev; /* previous sequence */ - struct CvTreeNode* h_next; /* next sequence */ - struct CvTreeNode* v_prev; /* 2nd previous sequence */ - struct CvTreeNode* v_next; /* 2nd next sequence */ -} -CvTreeNode; - - - -// Insert contour into tree given certain parent sequence. -// If parent is equal to frame (the most external contour), -// then added contour will have null pointer to parent: -CV_IMPL void -cvInsertNodeIntoTree( void* _node, void* _parent, void* _frame ) -{ - CvTreeNode* node = (CvTreeNode*)_node; - CvTreeNode* parent = (CvTreeNode*)_parent; - - if( !node || !parent ) - CV_Error( CV_StsNullPtr, "" ); - - node->v_prev = _parent != _frame ? parent : 0; - node->h_next = parent->v_next; - - assert( parent->v_next != node ); - - if( parent->v_next ) - parent->v_next->h_prev = node; - parent->v_next = node; -} - - -// Remove contour from tree, together with the contour's children: -CV_IMPL void -cvRemoveNodeFromTree( void* _node, void* _frame ) -{ - CvTreeNode* node = (CvTreeNode*)_node; - CvTreeNode* frame = (CvTreeNode*)_frame; - - if( !node ) - CV_Error( CV_StsNullPtr, "" ); - - if( node == frame ) - CV_Error( CV_StsBadArg, "frame node could not be deleted" ); - - if( node->h_next ) - node->h_next->h_prev = node->h_prev; - - if( node->h_prev ) - node->h_prev->h_next = node->h_next; - else - { - CvTreeNode* parent = node->v_prev; - if( !parent ) - parent = frame; - - if( parent ) - { - assert( parent->v_next == node ); - parent->v_next = node->h_next; - } - } -} - - -CV_IMPL void -cvInitTreeNodeIterator( CvTreeNodeIterator* treeIterator, - const void* first, int max_level ) -{ - if( !treeIterator || !first ) - CV_Error( CV_StsNullPtr, "" ); - - if( max_level < 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - treeIterator->node = (void*)first; - treeIterator->level = 0; - treeIterator->max_level = max_level; -} - - -CV_IMPL void* -cvNextTreeNode( CvTreeNodeIterator* treeIterator ) -{ - CvTreeNode* prevNode = 0; - CvTreeNode* node; - int level; - - if( !treeIterator ) - CV_Error( CV_StsNullPtr, "NULL iterator pointer" ); - - prevNode = node = (CvTreeNode*)treeIterator->node; - level = treeIterator->level; - - if( node ) - { - if( node->v_next && level+1 < treeIterator->max_level ) - { - node = node->v_next; - level++; - } - else - { - while( node->h_next == 0 ) - { - node = node->v_prev; - if( --level < 0 ) - { - node = 0; - break; - } - } - node = node && treeIterator->max_level != 0 ? node->h_next : 0; - } - } - - treeIterator->node = node; - treeIterator->level = level; - return prevNode; -} - - -CV_IMPL void* -cvPrevTreeNode( CvTreeNodeIterator* treeIterator ) -{ - CvTreeNode* prevNode = 0; - CvTreeNode* node; - int level; - - if( !treeIterator ) - CV_Error( CV_StsNullPtr, "" ); - - prevNode = node = (CvTreeNode*)treeIterator->node; - level = treeIterator->level; - - if( node ) - { - if( !node->h_prev ) - { - node = node->v_prev; - if( --level < 0 ) - node = 0; - } - else - { - node = node->h_prev; - - while( node->v_next && level < treeIterator->max_level ) - { - node = node->v_next; - level++; - - while( node->h_next ) - node = node->h_next; - } - } - } - - treeIterator->node = node; - treeIterator->level = level; - return prevNode; -} - - -namespace cv -{ - -// This is reimplementation of kd-trees from cvkdtree*.* by Xavier Delacour, cleaned-up and -// adopted to work with the new OpenCV data structures. It's in cxcore to be shared by -// both cv (CvFeatureTree) and ml (kNN). - -// The algorithm is taken from: -// J.S. Beis and D.G. Lowe. Shape indexing using approximate nearest-neighbor search -// in highdimensional spaces. In Proc. IEEE Conf. Comp. Vision Patt. Recog., -// pages 1000--1006, 1997. http://citeseer.ist.psu.edu/beis97shape.html - -const int MAX_TREE_DEPTH = 32; - -KDTree::KDTree() -{ - maxDepth = -1; - normType = NORM_L2; -} - -KDTree::KDTree(InputArray _points, bool _copyData) -{ - maxDepth = -1; - normType = NORM_L2; - build(_points, _copyData); -} - -KDTree::KDTree(InputArray _points, InputArray _labels, bool _copyData) -{ - maxDepth = -1; - normType = NORM_L2; - build(_points, _labels, _copyData); -} - -struct SubTree -{ - SubTree() : first(0), last(0), nodeIdx(0), depth(0) {} - SubTree(int _first, int _last, int _nodeIdx, int _depth) - : first(_first), last(_last), nodeIdx(_nodeIdx), depth(_depth) {} - int first; - int last; - int nodeIdx; - int depth; -}; - - -static float -medianPartition( size_t* ofs, int a, int b, const float* vals ) -{ - int k, a0 = a, b0 = b; - int middle = (a + b)/2; - while( b > a ) - { - int i0 = a, i1 = (a+b)/2, i2 = b; - float v0 = vals[ofs[i0]], v1 = vals[ofs[i1]], v2 = vals[ofs[i2]]; - int ip = v0 < v1 ? (v1 < v2 ? i1 : v0 < v2 ? i2 : i0) : - v0 < v2 ? i0 : (v1 < v2 ? i2 : i1); - float pivot = vals[ofs[ip]]; - std::swap(ofs[ip], ofs[i2]); - - for( i1 = i0, i0--; i1 <= i2; i1++ ) - if( vals[ofs[i1]] <= pivot ) - { - i0++; - std::swap(ofs[i0], ofs[i1]); - } - if( i0 == middle ) - break; - if( i0 > middle ) - b = i0 - (b == i0); - else - a = i0; - } - - float pivot = vals[ofs[middle]]; - int less = 0, more = 0; - for( k = a0; k < middle; k++ ) - { - CV_Assert(vals[ofs[k]] <= pivot); - less += vals[ofs[k]] < pivot; - } - for( k = b0; k > middle; k-- ) - { - CV_Assert(vals[ofs[k]] >= pivot); - more += vals[ofs[k]] > pivot; - } - CV_Assert(std::abs(more - less) <= 1); - - return vals[ofs[middle]]; -} - -static void -computeSums( const Mat& points, const size_t* ofs, int a, int b, double* sums ) -{ - int i, j, dims = points.cols; - const float* data = points.ptr(0); - for( j = 0; j < dims; j++ ) - sums[j*2] = sums[j*2+1] = 0; - for( i = a; i <= b; i++ ) - { - const float* row = data + ofs[i]; - for( j = 0; j < dims; j++ ) - { - double t = row[j], s = sums[j*2] + t, s2 = sums[j*2+1] + t*t; - sums[j*2] = s; sums[j*2+1] = s2; - } - } -} - - -void KDTree::build(InputArray _points, bool _copyData) -{ - build(_points, noArray(), _copyData); -} - - -void KDTree::build(InputArray __points, InputArray __labels, bool _copyData) -{ - Mat _points = __points.getMat(), _labels = __labels.getMat(); - CV_Assert(_points.type() == CV_32F && !_points.empty()); - vector().swap(nodes); - - if( !_copyData ) - points = _points; - else - { - points.release(); - points.create(_points.size(), _points.type()); - } - - int i, j, n = _points.rows, ptdims = _points.cols, top = 0; - const float* data = _points.ptr(0); - float* dstdata = points.ptr(0); - size_t step = _points.step1(); - size_t dstep = points.step1(); - int ptpos = 0; - labels.resize(n); - const int* _labels_data = 0; - - if( !_labels.empty() ) - { - int nlabels = _labels.checkVector(1, CV_32S, true); - CV_Assert(nlabels == n); - _labels_data = (const int*)_labels.data; - } - - Mat sumstack(MAX_TREE_DEPTH*2, ptdims*2, CV_64F); - SubTree stack[MAX_TREE_DEPTH*2]; - - vector _ptofs(n); - size_t* ptofs = &_ptofs[0]; - - for( i = 0; i < n; i++ ) - ptofs[i] = i*step; - - nodes.push_back(Node()); - computeSums(points, ptofs, 0, n-1, sumstack.ptr(top)); - stack[top++] = SubTree(0, n-1, 0, 0); - int _maxDepth = 0; - - while( --top >= 0 ) - { - int first = stack[top].first, last = stack[top].last; - int depth = stack[top].depth, nidx = stack[top].nodeIdx; - int count = last - first + 1, dim = -1; - const double* sums = sumstack.ptr(top); - double invCount = 1./count, maxVar = -1.; - - if( count == 1 ) - { - int idx0 = (int)(ptofs[first]/step); - int idx = _copyData ? ptpos++ : idx0; - nodes[nidx].idx = ~idx; - if( _copyData ) - { - const float* src = data + ptofs[first]; - float* dst = dstdata + idx*dstep; - for( j = 0; j < ptdims; j++ ) - dst[j] = src[j]; - } - labels[idx] = _labels_data ? _labels_data[idx0] : idx0; - _maxDepth = std::max(_maxDepth, depth); - continue; - } - - // find the dimensionality with the biggest variance - for( j = 0; j < ptdims; j++ ) - { - double m = sums[j*2]*invCount; - double varj = sums[j*2+1]*invCount - m*m; - if( maxVar < varj ) - { - maxVar = varj; - dim = j; - } - } - - int left = (int)nodes.size(), right = left + 1; - nodes.push_back(Node()); - nodes.push_back(Node()); - nodes[nidx].idx = dim; - nodes[nidx].left = left; - nodes[nidx].right = right; - nodes[nidx].boundary = medianPartition(ptofs, first, last, data + dim); - - int middle = (first + last)/2; - double *lsums = (double*)sums, *rsums = lsums + ptdims*2; - computeSums(points, ptofs, middle+1, last, rsums); - for( j = 0; j < ptdims*2; j++ ) - lsums[j] = sums[j] - rsums[j]; - stack[top++] = SubTree(first, middle, left, depth+1); - stack[top++] = SubTree(middle+1, last, right, depth+1); - } - maxDepth = _maxDepth; -} - - -struct PQueueElem -{ - PQueueElem() : dist(0), idx(0) {} - PQueueElem(float _dist, int _idx) : dist(_dist), idx(_idx) {} - float dist; - int idx; -}; - - -int KDTree::findNearest(InputArray _vec, int K, int emax, - OutputArray _neighborsIdx, OutputArray _neighbors, - OutputArray _dist, OutputArray _labels) const - -{ - Mat vecmat = _vec.getMat(); - CV_Assert( vecmat.isContinuous() && vecmat.type() == CV_32F && vecmat.total() == (size_t)points.cols ); - const float* vec = vecmat.ptr(); - K = std::min(K, points.rows); - int ptdims = points.cols; - - CV_Assert(K > 0 && (normType == NORM_L2 || normType == NORM_L1)); - - AutoBuffer _buf((K+1)*(sizeof(float) + sizeof(int))); - int* idx = (int*)(uchar*)_buf; - float* dist = (float*)(idx + K + 1); - int i, j, ncount = 0, e = 0; - - int qsize = 0, maxqsize = 1 << 10; - AutoBuffer _pqueue(maxqsize*sizeof(PQueueElem)); - PQueueElem* pqueue = (PQueueElem*)(uchar*)_pqueue; - emax = std::max(emax, 1); - - for( e = 0; e < emax; ) - { - float d, alt_d = 0.f; - int nidx; - - if( e == 0 ) - nidx = 0; - else - { - // take the next node from the priority queue - if( qsize == 0 ) - break; - nidx = pqueue[0].idx; - alt_d = pqueue[0].dist; - if( --qsize > 0 ) - { - std::swap(pqueue[0], pqueue[qsize]); - d = pqueue[0].dist; - for( i = 0;;) - { - int left = i*2 + 1, right = i*2 + 2; - if( left >= qsize ) - break; - if( right < qsize && pqueue[right].dist < pqueue[left].dist ) - left = right; - if( pqueue[left].dist >= d ) - break; - std::swap(pqueue[i], pqueue[left]); - i = left; - } - } - - if( ncount == K && alt_d > dist[ncount-1] ) - continue; - } - - for(;;) - { - if( nidx < 0 ) - break; - const Node& n = nodes[nidx]; - - if( n.idx < 0 ) - { - i = ~n.idx; - const float* row = points.ptr(i); - if( normType == NORM_L2 ) - for( j = 0, d = 0.f; j < ptdims; j++ ) - { - float t = vec[j] - row[j]; - d += t*t; - } - else - for( j = 0, d = 0.f; j < ptdims; j++ ) - d += std::abs(vec[j] - row[j]); - - dist[ncount] = d; - idx[ncount] = i; - for( i = ncount-1; i >= 0; i-- ) - { - if( dist[i] <= d ) - break; - std::swap(dist[i], dist[i+1]); - std::swap(idx[i], idx[i+1]); - } - ncount += ncount < K; - e++; - break; - } - - int alt; - if( vec[n.idx] <= n.boundary ) - { - nidx = n.left; - alt = n.right; - } - else - { - nidx = n.right; - alt = n.left; - } - - d = vec[n.idx] - n.boundary; - if( normType == NORM_L2 ) - d = d*d + alt_d; - else - d = std::abs(d) + alt_d; - // subtree prunning - if( ncount == K && d > dist[ncount-1] ) - continue; - // add alternative subtree to the priority queue - pqueue[qsize] = PQueueElem(d, alt); - for( i = qsize; i > 0; ) - { - int parent = (i-1)/2; - if( parent < 0 || pqueue[parent].dist <= d ) - break; - std::swap(pqueue[i], pqueue[parent]); - i = parent; - } - qsize += qsize+1 < maxqsize; - } - } - - K = std::min(K, ncount); - if( _neighborsIdx.needed() ) - { - _neighborsIdx.create(K, 1, CV_32S, -1, true); - Mat nidx = _neighborsIdx.getMat(); - Mat(nidx.size(), CV_32S, &idx[0]).copyTo(nidx); - } - if( _dist.needed() ) - sqrt(Mat(K, 1, CV_32F, dist), _dist); - - if( _neighbors.needed() || _labels.needed() ) - getPoints(Mat(K, 1, CV_32S, idx), _neighbors, _labels); - return K; -} - - -void KDTree::findOrthoRange(InputArray _lowerBound, - InputArray _upperBound, - OutputArray _neighborsIdx, - OutputArray _neighbors, - OutputArray _labels ) const -{ - int ptdims = points.cols; - Mat lowerBound = _lowerBound.getMat(), upperBound = _upperBound.getMat(); - CV_Assert( lowerBound.size == upperBound.size && - lowerBound.isContinuous() && - upperBound.isContinuous() && - lowerBound.type() == upperBound.type() && - lowerBound.type() == CV_32F && - lowerBound.total() == (size_t)ptdims ); - const float* L = lowerBound.ptr(); - const float* R = upperBound.ptr(); - - vector idx; - AutoBuffer _stack(MAX_TREE_DEPTH*2 + 1); - int* stack = _stack; - int top = 0; - - stack[top++] = 0; - - while( --top >= 0 ) - { - int nidx = stack[top]; - if( nidx < 0 ) - break; - const Node& n = nodes[nidx]; - if( n.idx < 0 ) - { - int j, i = ~n.idx; - const float* row = points.ptr(i); - for( j = 0; j < ptdims; j++ ) - if( row[j] < L[j] || row[j] >= R[j] ) - break; - if( j == ptdims ) - idx.push_back(i); - continue; - } - if( L[n.idx] <= n.boundary ) - stack[top++] = n.left; - if( R[n.idx] > n.boundary ) - stack[top++] = n.right; - } - - if( _neighborsIdx.needed() ) - { - _neighborsIdx.create((int)idx.size(), 1, CV_32S, -1, true); - Mat nidx = _neighborsIdx.getMat(); - Mat(nidx.size(), CV_32S, &idx[0]).copyTo(nidx); - } - getPoints( idx, _neighbors, _labels ); -} - - -void KDTree::getPoints(InputArray _idx, OutputArray _pts, OutputArray _labels) const -{ - Mat idxmat = _idx.getMat(), pts, labelsmat; - CV_Assert( idxmat.isContinuous() && idxmat.type() == CV_32S && - (idxmat.cols == 1 || idxmat.rows == 1) ); - const int* idx = idxmat.ptr(); - int* dstlabels = 0; - - int ptdims = points.cols; - int i, nidx = (int)idxmat.total(); - if( nidx == 0 ) - { - _pts.release(); - _labels.release(); - return; - } - - if( _pts.needed() ) - { - _pts.create( nidx, ptdims, points.type()); - pts = _pts.getMat(); - } - - if(_labels.needed()) - { - _labels.create(nidx, 1, CV_32S, -1, true); - labelsmat = _labels.getMat(); - CV_Assert( labelsmat.isContinuous() ); - dstlabels = labelsmat.ptr(); - } - const int* srclabels = !labels.empty() ? &labels[0] : 0; - - for( i = 0; i < nidx; i++ ) - { - int k = idx[i]; - CV_Assert( (unsigned)k < (unsigned)points.rows ); - const float* src = points.ptr(k); - if( pts.data ) - std::copy(src, src + ptdims, pts.ptr(i)); - if( dstlabels ) - dstlabels[i] = srclabels ? srclabels[k] : k; - } -} - - -const float* KDTree::getPoint(int ptidx, int* label) const -{ - CV_Assert( (unsigned)ptidx < (unsigned)points.rows); - if(label) - *label = labels[ptidx]; - return points.ptr(ptidx); -} - - -int KDTree::dims() const -{ - return !points.empty() ? points.cols : 0; -} - -//////////////////////////////////////////////////////////////////////////////// - -schar* seqPush( CvSeq* seq, const void* element ) -{ - return cvSeqPush(seq, element); -} - -schar* seqPushFront( CvSeq* seq, const void* element ) -{ - return cvSeqPushFront(seq, element); -} - -void seqPop( CvSeq* seq, void* element ) -{ - cvSeqPop(seq, element); -} - -void seqPopFront( CvSeq* seq, void* element ) -{ - cvSeqPopFront(seq, element); -} - -void seqRemove( CvSeq* seq, int index ) -{ - cvSeqRemove(seq, index); -} - -void clearSeq( CvSeq* seq ) -{ - cvClearSeq(seq); -} - -schar* getSeqElem( const CvSeq* seq, int index ) -{ - return cvGetSeqElem(seq, index); -} - -void seqRemoveSlice( CvSeq* seq, CvSlice slice ) -{ - return cvSeqRemoveSlice(seq, slice); -} - -void seqInsertSlice( CvSeq* seq, int before_index, const CvArr* from_arr ) -{ - cvSeqInsertSlice(seq, before_index, from_arr); -} - -} - -/* End of file. */ diff --git a/modules/core/src/drawing.cpp b/modules/core/src/drawing.cpp deleted file mode 100644 index 144fa96..0000000 --- a/modules/core/src/drawing.cpp +++ /dev/null @@ -1,2411 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -namespace cv -{ - -enum { XY_SHIFT = 16, XY_ONE = 1 << XY_SHIFT, DRAWING_STORAGE_BLOCK = (1<<12) - 256 }; - -struct PolyEdge -{ - PolyEdge() : y0(0), y1(0), x(0), dx(0), next(0) {} - //PolyEdge(int _y0, int _y1, int _x, int _dx) : y0(_y0), y1(_y1), x(_x), dx(_dx) {} - - int y0, y1; - int x, dx; - PolyEdge *next; -}; - -static void -CollectPolyEdges( Mat& img, const Point* v, int npts, - vector& edges, const void* color, int line_type, - int shift, Point offset=Point() ); - -static void -FillEdgeCollection( Mat& img, vector& edges, const void* color ); - -static void -PolyLine( Mat& img, const Point* v, int npts, bool closed, - const void* color, int thickness, int line_type, int shift ); - -static void -FillConvexPoly( Mat& img, const Point* v, int npts, - const void* color, int line_type, int shift ); - -/****************************************************************************************\ -* Lines * -\****************************************************************************************/ - -bool clipLine( Size img_size, Point& pt1, Point& pt2 ) -{ - int64 x1, y1, x2, y2; - int c1, c2; - int64 right = img_size.width-1, bottom = img_size.height-1; - - if( img_size.width <= 0 || img_size.height <= 0 ) - return false; - - x1 = pt1.x; y1 = pt1.y; x2 = pt2.x; y2 = pt2.y; - c1 = (x1 < 0) + (x1 > right) * 2 + (y1 < 0) * 4 + (y1 > bottom) * 8; - c2 = (x2 < 0) + (x2 > right) * 2 + (y2 < 0) * 4 + (y2 > bottom) * 8; - - if( (c1 & c2) == 0 && (c1 | c2) != 0 ) - { - int64 a; - if( c1 & 12 ) - { - a = c1 < 8 ? 0 : bottom; - x1 += (a - y1) * (x2 - x1) / (y2 - y1); - y1 = a; - c1 = (x1 < 0) + (x1 > right) * 2; - } - if( c2 & 12 ) - { - a = c2 < 8 ? 0 : bottom; - x2 += (a - y2) * (x2 - x1) / (y2 - y1); - y2 = a; - c2 = (x2 < 0) + (x2 > right) * 2; - } - if( (c1 & c2) == 0 && (c1 | c2) != 0 ) - { - if( c1 ) - { - a = c1 == 1 ? 0 : right; - y1 += (a - x1) * (y2 - y1) / (x2 - x1); - x1 = a; - c1 = 0; - } - if( c2 ) - { - a = c2 == 1 ? 0 : right; - y2 += (a - x2) * (y2 - y1) / (x2 - x1); - x2 = a; - c2 = 0; - } - } - - assert( (c1 & c2) != 0 || (x1 | y1 | x2 | y2) >= 0 ); - - pt1.x = (int)x1; - pt1.y = (int)y1; - pt2.x = (int)x2; - pt2.y = (int)y2; - } - - return (c1 | c2) == 0; -} - -bool clipLine( Rect img_rect, Point& pt1, Point& pt2 ) -{ - Point tl = img_rect.tl(); - pt1 -= tl; pt2 -= tl; - bool inside = clipLine(img_rect.size(), pt1, pt2); - pt1 += tl; pt2 += tl; - - return inside; -} - -/* - Initializes line iterator. - Returns number of points on the line or negative number if error. -*/ -LineIterator::LineIterator(const Mat& img, Point pt1, Point pt2, - int connectivity, bool left_to_right) -{ - count = -1; - - CV_Assert( connectivity == 8 || connectivity == 4 ); - - if( (unsigned)pt1.x >= (unsigned)(img.cols) || - (unsigned)pt2.x >= (unsigned)(img.cols) || - (unsigned)pt1.y >= (unsigned)(img.rows) || - (unsigned)pt2.y >= (unsigned)(img.rows) ) - { - if( !clipLine( img.size(), pt1, pt2 ) ) - { - ptr = img.data; - err = plusDelta = minusDelta = plusStep = minusStep = count = 0; - return; - } - } - - int bt_pix0 = (int)img.elemSize(), bt_pix = bt_pix0; - size_t istep = img.step; - - int dx = pt2.x - pt1.x; - int dy = pt2.y - pt1.y; - int s = dx < 0 ? -1 : 0; - - if( left_to_right ) - { - dx = (dx ^ s) - s; - dy = (dy ^ s) - s; - pt1.x ^= (pt1.x ^ pt2.x) & s; - pt1.y ^= (pt1.y ^ pt2.y) & s; - } - else - { - dx = (dx ^ s) - s; - bt_pix = (bt_pix ^ s) - s; - } - - ptr = (uchar*)(img.data + pt1.y * istep + pt1.x * bt_pix0); - - s = dy < 0 ? -1 : 0; - dy = (dy ^ s) - s; - istep = (istep ^ s) - s; - - s = dy > dx ? -1 : 0; - - /* conditional swaps */ - dx ^= dy & s; - dy ^= dx & s; - dx ^= dy & s; - - bt_pix ^= istep & s; - istep ^= bt_pix & s; - bt_pix ^= istep & s; - - if( connectivity == 8 ) - { - assert( dx >= 0 && dy >= 0 ); - - err = dx - (dy + dy); - plusDelta = dx + dx; - minusDelta = -(dy + dy); - plusStep = (int)istep; - minusStep = bt_pix; - count = dx + 1; - } - else /* connectivity == 4 */ - { - assert( dx >= 0 && dy >= 0 ); - - err = 0; - plusDelta = (dx + dx) + (dy + dy); - minusDelta = -(dy + dy); - plusStep = (int)istep - bt_pix; - minusStep = bt_pix; - count = dx + dy + 1; - } - - this->ptr0 = img.data; - this->step = (int)img.step; - this->elemSize = bt_pix0; -} - -static void -Line( Mat& img, Point pt1, Point pt2, - const void* _color, int connectivity = 8 ) -{ - if( connectivity == 0 ) - connectivity = 8; - if( connectivity == 1 ) - connectivity = 4; - - LineIterator iterator(img, pt1, pt2, connectivity, true); - int i, count = iterator.count; - int pix_size = (int)img.elemSize(); - const uchar* color = (const uchar*)_color; - - for( i = 0; i < count; i++, ++iterator ) - { - uchar* ptr = *iterator; - if( pix_size == 1 ) - ptr[0] = color[0]; - else if( pix_size == 3 ) - { - ptr[0] = color[0]; - ptr[1] = color[1]; - ptr[2] = color[2]; - } - else - memcpy( *iterator, color, pix_size ); - } -} - - -/* Correction table depent on the slope */ -static const uchar SlopeCorrTable[] = { - 181, 181, 181, 182, 182, 183, 184, 185, 187, 188, 190, 192, 194, 196, 198, 201, - 203, 206, 209, 211, 214, 218, 221, 224, 227, 231, 235, 238, 242, 246, 250, 254 -}; - -/* Gaussian for antialiasing filter */ -static const int FilterTable[] = { - 168, 177, 185, 194, 202, 210, 218, 224, 231, 236, 241, 246, 249, 252, 254, 254, - 254, 254, 252, 249, 246, 241, 236, 231, 224, 218, 210, 202, 194, 185, 177, 168, - 158, 149, 140, 131, 122, 114, 105, 97, 89, 82, 75, 68, 62, 56, 50, 45, - 40, 36, 32, 28, 25, 22, 19, 16, 14, 12, 11, 9, 8, 7, 5, 5 -}; - -static void -LineAA( Mat& img, Point pt1, Point pt2, const void* color ) -{ - int dx, dy; - int ecount, scount = 0; - int slope; - int ax, ay; - int x_step, y_step; - int i, j; - int ep_table[9]; - int cb = ((uchar*)color)[0], cg = ((uchar*)color)[1], cr = ((uchar*)color)[2]; - int _cb, _cg, _cr; - int nch = img.channels(); - uchar* ptr = img.data; - size_t step = img.step; - Size size = img.size(); - - if( !((nch == 1 || nch == 3) && img.depth() == CV_8U) ) - { - Line(img, pt1, pt2, color); - return; - } - - pt1.x -= XY_ONE*2; - pt1.y -= XY_ONE*2; - pt2.x -= XY_ONE*2; - pt2.y -= XY_ONE*2; - ptr += img.step*2 + 2*nch; - - size.width = ((size.width - 5) << XY_SHIFT) + 1; - size.height = ((size.height - 5) << XY_SHIFT) + 1; - - if( !clipLine( size, pt1, pt2 )) - return; - - dx = pt2.x - pt1.x; - dy = pt2.y - pt1.y; - - j = dx < 0 ? -1 : 0; - ax = (dx ^ j) - j; - i = dy < 0 ? -1 : 0; - ay = (dy ^ i) - i; - - if( ax > ay ) - { - dx = ax; - dy = (dy ^ j) - j; - pt1.x ^= pt2.x & j; - pt2.x ^= pt1.x & j; - pt1.x ^= pt2.x & j; - pt1.y ^= pt2.y & j; - pt2.y ^= pt1.y & j; - pt1.y ^= pt2.y & j; - - x_step = XY_ONE; - y_step = (int) (((int64) dy << XY_SHIFT) / (ax | 1)); - pt2.x += XY_ONE; - ecount = (pt2.x >> XY_SHIFT) - (pt1.x >> XY_SHIFT); - j = -(pt1.x & (XY_ONE - 1)); - pt1.y += (int) ((((int64) y_step) * j) >> XY_SHIFT) + (XY_ONE >> 1); - slope = (y_step >> (XY_SHIFT - 5)) & 0x3f; - slope ^= (y_step < 0 ? 0x3f : 0); - - /* Get 4-bit fractions for end-point adjustments */ - i = (pt1.x >> (XY_SHIFT - 7)) & 0x78; - j = (pt2.x >> (XY_SHIFT - 7)) & 0x78; - } - else - { - dy = ay; - dx = (dx ^ i) - i; - pt1.x ^= pt2.x & i; - pt2.x ^= pt1.x & i; - pt1.x ^= pt2.x & i; - pt1.y ^= pt2.y & i; - pt2.y ^= pt1.y & i; - pt1.y ^= pt2.y & i; - - x_step = (int) (((int64) dx << XY_SHIFT) / (ay | 1)); - y_step = XY_ONE; - pt2.y += XY_ONE; - ecount = (pt2.y >> XY_SHIFT) - (pt1.y >> XY_SHIFT); - j = -(pt1.y & (XY_ONE - 1)); - pt1.x += (int) ((((int64) x_step) * j) >> XY_SHIFT) + (XY_ONE >> 1); - slope = (x_step >> (XY_SHIFT - 5)) & 0x3f; - slope ^= (x_step < 0 ? 0x3f : 0); - - /* Get 4-bit fractions for end-point adjustments */ - i = (pt1.y >> (XY_SHIFT - 7)) & 0x78; - j = (pt2.y >> (XY_SHIFT - 7)) & 0x78; - } - - slope = (slope & 0x20) ? 0x100 : SlopeCorrTable[slope]; - - /* Calc end point correction table */ - { - int t0 = slope << 7; - int t1 = ((0x78 - i) | 4) * slope; - int t2 = (j | 4) * slope; - - ep_table[0] = 0; - ep_table[8] = slope; - ep_table[1] = ep_table[3] = ((((j - i) & 0x78) | 4) * slope >> 8) & 0x1ff; - ep_table[2] = (t1 >> 8) & 0x1ff; - ep_table[4] = ((((j - i) + 0x80) | 4) * slope >> 8) & 0x1ff; - ep_table[5] = ((t1 + t0) >> 8) & 0x1ff; - ep_table[6] = (t2 >> 8) & 0x1ff; - ep_table[7] = ((t2 + t0) >> 8) & 0x1ff; - } - - if( nch == 3 ) - { - #define ICV_PUT_POINT() \ - { \ - _cb = tptr[0]; \ - _cb += ((cb - _cb)*a + 127)>> 8;\ - _cg = tptr[1]; \ - _cg += ((cg - _cg)*a + 127)>> 8;\ - _cr = tptr[2]; \ - _cr += ((cr - _cr)*a + 127)>> 8;\ - tptr[0] = (uchar)_cb; \ - tptr[1] = (uchar)_cg; \ - tptr[2] = (uchar)_cr; \ - } - if( ax > ay ) - { - ptr += (pt1.x >> XY_SHIFT) * 3; - - while( ecount >= 0 ) - { - uchar *tptr = ptr + ((pt1.y >> XY_SHIFT) - 1) * step; - - int ep_corr = ep_table[(((scount >= 2) + 1) & (scount | 2)) * 3 + - (((ecount >= 2) + 1) & (ecount | 2))]; - int a, dist = (pt1.y >> (XY_SHIFT - 5)) & 31; - - a = (ep_corr * FilterTable[dist + 32] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += step; - a = (ep_corr * FilterTable[dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += step; - a = (ep_corr * FilterTable[63 - dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - pt1.y += y_step; - ptr += 3; - scount++; - ecount--; - } - } - else - { - ptr += (pt1.y >> XY_SHIFT) * step; - - while( ecount >= 0 ) - { - uchar *tptr = ptr + ((pt1.x >> XY_SHIFT) - 1) * 3; - - int ep_corr = ep_table[(((scount >= 2) + 1) & (scount | 2)) * 3 + - (((ecount >= 2) + 1) & (ecount | 2))]; - int a, dist = (pt1.x >> (XY_SHIFT - 5)) & 31; - - a = (ep_corr * FilterTable[dist + 32] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += 3; - a = (ep_corr * FilterTable[dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += 3; - a = (ep_corr * FilterTable[63 - dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - pt1.x += x_step; - ptr += step; - scount++; - ecount--; - } - } - #undef ICV_PUT_POINT - } - else - { - #define ICV_PUT_POINT() \ - { \ - _cb = tptr[0]; \ - _cb += ((cb - _cb)*a + 127)>> 8;\ - tptr[0] = (uchar)_cb; \ - } - - if( ax > ay ) - { - ptr += (pt1.x >> XY_SHIFT); - - while( ecount >= 0 ) - { - uchar *tptr = ptr + ((pt1.y >> XY_SHIFT) - 1) * step; - - int ep_corr = ep_table[(((scount >= 2) + 1) & (scount | 2)) * 3 + - (((ecount >= 2) + 1) & (ecount | 2))]; - int a, dist = (pt1.y >> (XY_SHIFT - 5)) & 31; - - a = (ep_corr * FilterTable[dist + 32] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += step; - a = (ep_corr * FilterTable[dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr += step; - a = (ep_corr * FilterTable[63 - dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - pt1.y += y_step; - ptr++; - scount++; - ecount--; - } - } - else - { - ptr += (pt1.y >> XY_SHIFT) * step; - - while( ecount >= 0 ) - { - uchar *tptr = ptr + ((pt1.x >> XY_SHIFT) - 1); - - int ep_corr = ep_table[(((scount >= 2) + 1) & (scount | 2)) * 3 + - (((ecount >= 2) + 1) & (ecount | 2))]; - int a, dist = (pt1.x >> (XY_SHIFT - 5)) & 31; - - a = (ep_corr * FilterTable[dist + 32] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr++; - a = (ep_corr * FilterTable[dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - tptr++; - a = (ep_corr * FilterTable[63 - dist] >> 8) & 0xff; - ICV_PUT_POINT(); - ICV_PUT_POINT(); - - pt1.x += x_step; - ptr += step; - scount++; - ecount--; - } - } - #undef ICV_PUT_POINT - } -} - - -static void -Line2( Mat& img, Point pt1, Point pt2, const void* color ) -{ - int dx, dy; - int ecount; - int ax, ay; - int i, j, x, y; - int x_step, y_step; - int cb = ((uchar*)color)[0]; - int cg = ((uchar*)color)[1]; - int cr = ((uchar*)color)[2]; - int pix_size = (int)img.elemSize(); - uchar *ptr = img.data, *tptr; - size_t step = img.step; - Size size = img.size(), sizeScaled(size.width*XY_ONE, size.height*XY_ONE); - - //assert( img && (nch == 1 || nch == 3) && img.depth() == CV_8U ); - - if( !clipLine( sizeScaled, pt1, pt2 )) - return; - - dx = pt2.x - pt1.x; - dy = pt2.y - pt1.y; - - j = dx < 0 ? -1 : 0; - ax = (dx ^ j) - j; - i = dy < 0 ? -1 : 0; - ay = (dy ^ i) - i; - - if( ax > ay ) - { - dx = ax; - dy = (dy ^ j) - j; - pt1.x ^= pt2.x & j; - pt2.x ^= pt1.x & j; - pt1.x ^= pt2.x & j; - pt1.y ^= pt2.y & j; - pt2.y ^= pt1.y & j; - pt1.y ^= pt2.y & j; - - x_step = XY_ONE; - y_step = (int) (((int64) dy << XY_SHIFT) / (ax | 1)); - ecount = (pt2.x - pt1.x) >> XY_SHIFT; - } - else - { - dy = ay; - dx = (dx ^ i) - i; - pt1.x ^= pt2.x & i; - pt2.x ^= pt1.x & i; - pt1.x ^= pt2.x & i; - pt1.y ^= pt2.y & i; - pt2.y ^= pt1.y & i; - pt1.y ^= pt2.y & i; - - x_step = (int) (((int64) dx << XY_SHIFT) / (ay | 1)); - y_step = XY_ONE; - ecount = (pt2.y - pt1.y) >> XY_SHIFT; - } - - pt1.x += (XY_ONE >> 1); - pt1.y += (XY_ONE >> 1); - - if( pix_size == 3 ) - { - #define ICV_PUT_POINT(_x,_y) \ - x = (_x); y = (_y); \ - if( 0 <= x && x < size.width && \ - 0 <= y && y < size.height ) \ - { \ - tptr = ptr + y*step + x*3; \ - tptr[0] = (uchar)cb; \ - tptr[1] = (uchar)cg; \ - tptr[2] = (uchar)cr; \ - } - - ICV_PUT_POINT((pt2.x + (XY_ONE >> 1)) >> XY_SHIFT, - (pt2.y + (XY_ONE >> 1)) >> XY_SHIFT); - - if( ax > ay ) - { - pt1.x >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x, pt1.y >> XY_SHIFT); - pt1.x++; - pt1.y += y_step; - ecount--; - } - } - else - { - pt1.y >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x >> XY_SHIFT, pt1.y); - pt1.x += x_step; - pt1.y++; - ecount--; - } - } - - #undef ICV_PUT_POINT - } - else if( pix_size == 1 ) - { - #define ICV_PUT_POINT(_x,_y) \ - x = (_x); y = (_y); \ - if( 0 <= x && x < size.width && \ - 0 <= y && y < size.height ) \ - { \ - tptr = ptr + y*step + x;\ - tptr[0] = (uchar)cb; \ - } - - ICV_PUT_POINT((pt2.x + (XY_ONE >> 1)) >> XY_SHIFT, - (pt2.y + (XY_ONE >> 1)) >> XY_SHIFT); - - if( ax > ay ) - { - pt1.x >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x, pt1.y >> XY_SHIFT); - pt1.x++; - pt1.y += y_step; - ecount--; - } - } - else - { - pt1.y >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x >> XY_SHIFT, pt1.y); - pt1.x += x_step; - pt1.y++; - ecount--; - } - } - - #undef ICV_PUT_POINT - } - else - { - #define ICV_PUT_POINT(_x,_y) \ - x = (_x); y = (_y); \ - if( 0 <= x && x < size.width && \ - 0 <= y && y < size.height ) \ - { \ - tptr = ptr + y*step + x*pix_size;\ - for( j = 0; j < pix_size; j++ ) \ - tptr[j] = ((uchar*)color)[j]; \ - } - - ICV_PUT_POINT((pt2.x + (XY_ONE >> 1)) >> XY_SHIFT, - (pt2.y + (XY_ONE >> 1)) >> XY_SHIFT); - - if( ax > ay ) - { - pt1.x >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x, pt1.y >> XY_SHIFT); - pt1.x++; - pt1.y += y_step; - ecount--; - } - } - else - { - pt1.y >>= XY_SHIFT; - - while( ecount >= 0 ) - { - ICV_PUT_POINT(pt1.x >> XY_SHIFT, pt1.y); - pt1.x += x_step; - pt1.y++; - ecount--; - } - } - - #undef ICV_PUT_POINT - } -} - - -/****************************************************************************************\ -* Antialiazed Elliptic Arcs via Antialiazed Lines * -\****************************************************************************************/ - -static const float SinTable[] = - { 0.0000000f, 0.0174524f, 0.0348995f, 0.0523360f, 0.0697565f, 0.0871557f, - 0.1045285f, 0.1218693f, 0.1391731f, 0.1564345f, 0.1736482f, 0.1908090f, - 0.2079117f, 0.2249511f, 0.2419219f, 0.2588190f, 0.2756374f, 0.2923717f, - 0.3090170f, 0.3255682f, 0.3420201f, 0.3583679f, 0.3746066f, 0.3907311f, - 0.4067366f, 0.4226183f, 0.4383711f, 0.4539905f, 0.4694716f, 0.4848096f, - 0.5000000f, 0.5150381f, 0.5299193f, 0.5446390f, 0.5591929f, 0.5735764f, - 0.5877853f, 0.6018150f, 0.6156615f, 0.6293204f, 0.6427876f, 0.6560590f, - 0.6691306f, 0.6819984f, 0.6946584f, 0.7071068f, 0.7193398f, 0.7313537f, - 0.7431448f, 0.7547096f, 0.7660444f, 0.7771460f, 0.7880108f, 0.7986355f, - 0.8090170f, 0.8191520f, 0.8290376f, 0.8386706f, 0.8480481f, 0.8571673f, - 0.8660254f, 0.8746197f, 0.8829476f, 0.8910065f, 0.8987940f, 0.9063078f, - 0.9135455f, 0.9205049f, 0.9271839f, 0.9335804f, 0.9396926f, 0.9455186f, - 0.9510565f, 0.9563048f, 0.9612617f, 0.9659258f, 0.9702957f, 0.9743701f, - 0.9781476f, 0.9816272f, 0.9848078f, 0.9876883f, 0.9902681f, 0.9925462f, - 0.9945219f, 0.9961947f, 0.9975641f, 0.9986295f, 0.9993908f, 0.9998477f, - 1.0000000f, 0.9998477f, 0.9993908f, 0.9986295f, 0.9975641f, 0.9961947f, - 0.9945219f, 0.9925462f, 0.9902681f, 0.9876883f, 0.9848078f, 0.9816272f, - 0.9781476f, 0.9743701f, 0.9702957f, 0.9659258f, 0.9612617f, 0.9563048f, - 0.9510565f, 0.9455186f, 0.9396926f, 0.9335804f, 0.9271839f, 0.9205049f, - 0.9135455f, 0.9063078f, 0.8987940f, 0.8910065f, 0.8829476f, 0.8746197f, - 0.8660254f, 0.8571673f, 0.8480481f, 0.8386706f, 0.8290376f, 0.8191520f, - 0.8090170f, 0.7986355f, 0.7880108f, 0.7771460f, 0.7660444f, 0.7547096f, - 0.7431448f, 0.7313537f, 0.7193398f, 0.7071068f, 0.6946584f, 0.6819984f, - 0.6691306f, 0.6560590f, 0.6427876f, 0.6293204f, 0.6156615f, 0.6018150f, - 0.5877853f, 0.5735764f, 0.5591929f, 0.5446390f, 0.5299193f, 0.5150381f, - 0.5000000f, 0.4848096f, 0.4694716f, 0.4539905f, 0.4383711f, 0.4226183f, - 0.4067366f, 0.3907311f, 0.3746066f, 0.3583679f, 0.3420201f, 0.3255682f, - 0.3090170f, 0.2923717f, 0.2756374f, 0.2588190f, 0.2419219f, 0.2249511f, - 0.2079117f, 0.1908090f, 0.1736482f, 0.1564345f, 0.1391731f, 0.1218693f, - 0.1045285f, 0.0871557f, 0.0697565f, 0.0523360f, 0.0348995f, 0.0174524f, - 0.0000000f, -0.0174524f, -0.0348995f, -0.0523360f, -0.0697565f, -0.0871557f, - -0.1045285f, -0.1218693f, -0.1391731f, -0.1564345f, -0.1736482f, -0.1908090f, - -0.2079117f, -0.2249511f, -0.2419219f, -0.2588190f, -0.2756374f, -0.2923717f, - -0.3090170f, -0.3255682f, -0.3420201f, -0.3583679f, -0.3746066f, -0.3907311f, - -0.4067366f, -0.4226183f, -0.4383711f, -0.4539905f, -0.4694716f, -0.4848096f, - -0.5000000f, -0.5150381f, -0.5299193f, -0.5446390f, -0.5591929f, -0.5735764f, - -0.5877853f, -0.6018150f, -0.6156615f, -0.6293204f, -0.6427876f, -0.6560590f, - -0.6691306f, -0.6819984f, -0.6946584f, -0.7071068f, -0.7193398f, -0.7313537f, - -0.7431448f, -0.7547096f, -0.7660444f, -0.7771460f, -0.7880108f, -0.7986355f, - -0.8090170f, -0.8191520f, -0.8290376f, -0.8386706f, -0.8480481f, -0.8571673f, - -0.8660254f, -0.8746197f, -0.8829476f, -0.8910065f, -0.8987940f, -0.9063078f, - -0.9135455f, -0.9205049f, -0.9271839f, -0.9335804f, -0.9396926f, -0.9455186f, - -0.9510565f, -0.9563048f, -0.9612617f, -0.9659258f, -0.9702957f, -0.9743701f, - -0.9781476f, -0.9816272f, -0.9848078f, -0.9876883f, -0.9902681f, -0.9925462f, - -0.9945219f, -0.9961947f, -0.9975641f, -0.9986295f, -0.9993908f, -0.9998477f, - -1.0000000f, -0.9998477f, -0.9993908f, -0.9986295f, -0.9975641f, -0.9961947f, - -0.9945219f, -0.9925462f, -0.9902681f, -0.9876883f, -0.9848078f, -0.9816272f, - -0.9781476f, -0.9743701f, -0.9702957f, -0.9659258f, -0.9612617f, -0.9563048f, - -0.9510565f, -0.9455186f, -0.9396926f, -0.9335804f, -0.9271839f, -0.9205049f, - -0.9135455f, -0.9063078f, -0.8987940f, -0.8910065f, -0.8829476f, -0.8746197f, - -0.8660254f, -0.8571673f, -0.8480481f, -0.8386706f, -0.8290376f, -0.8191520f, - -0.8090170f, -0.7986355f, -0.7880108f, -0.7771460f, -0.7660444f, -0.7547096f, - -0.7431448f, -0.7313537f, -0.7193398f, -0.7071068f, -0.6946584f, -0.6819984f, - -0.6691306f, -0.6560590f, -0.6427876f, -0.6293204f, -0.6156615f, -0.6018150f, - -0.5877853f, -0.5735764f, -0.5591929f, -0.5446390f, -0.5299193f, -0.5150381f, - -0.5000000f, -0.4848096f, -0.4694716f, -0.4539905f, -0.4383711f, -0.4226183f, - -0.4067366f, -0.3907311f, -0.3746066f, -0.3583679f, -0.3420201f, -0.3255682f, - -0.3090170f, -0.2923717f, -0.2756374f, -0.2588190f, -0.2419219f, -0.2249511f, - -0.2079117f, -0.1908090f, -0.1736482f, -0.1564345f, -0.1391731f, -0.1218693f, - -0.1045285f, -0.0871557f, -0.0697565f, -0.0523360f, -0.0348995f, -0.0174524f, - -0.0000000f, 0.0174524f, 0.0348995f, 0.0523360f, 0.0697565f, 0.0871557f, - 0.1045285f, 0.1218693f, 0.1391731f, 0.1564345f, 0.1736482f, 0.1908090f, - 0.2079117f, 0.2249511f, 0.2419219f, 0.2588190f, 0.2756374f, 0.2923717f, - 0.3090170f, 0.3255682f, 0.3420201f, 0.3583679f, 0.3746066f, 0.3907311f, - 0.4067366f, 0.4226183f, 0.4383711f, 0.4539905f, 0.4694716f, 0.4848096f, - 0.5000000f, 0.5150381f, 0.5299193f, 0.5446390f, 0.5591929f, 0.5735764f, - 0.5877853f, 0.6018150f, 0.6156615f, 0.6293204f, 0.6427876f, 0.6560590f, - 0.6691306f, 0.6819984f, 0.6946584f, 0.7071068f, 0.7193398f, 0.7313537f, - 0.7431448f, 0.7547096f, 0.7660444f, 0.7771460f, 0.7880108f, 0.7986355f, - 0.8090170f, 0.8191520f, 0.8290376f, 0.8386706f, 0.8480481f, 0.8571673f, - 0.8660254f, 0.8746197f, 0.8829476f, 0.8910065f, 0.8987940f, 0.9063078f, - 0.9135455f, 0.9205049f, 0.9271839f, 0.9335804f, 0.9396926f, 0.9455186f, - 0.9510565f, 0.9563048f, 0.9612617f, 0.9659258f, 0.9702957f, 0.9743701f, - 0.9781476f, 0.9816272f, 0.9848078f, 0.9876883f, 0.9902681f, 0.9925462f, - 0.9945219f, 0.9961947f, 0.9975641f, 0.9986295f, 0.9993908f, 0.9998477f, - 1.0000000f -}; - - -static void -sincos( int angle, float& cosval, float& sinval ) -{ - angle += (angle < 0 ? 360 : 0); - sinval = SinTable[angle]; - cosval = SinTable[450 - angle]; -} - -/* - constructs polygon that represents elliptic arc. -*/ -void ellipse2Poly( Point center, Size axes, int angle, - int arc_start, int arc_end, - int delta, vector& pts ) -{ - float alpha, beta; - double size_a = axes.width, size_b = axes.height; - double cx = center.x, cy = center.y; - Point prevPt(INT_MIN,INT_MIN); - int i; - - while( angle < 0 ) - angle += 360; - while( angle > 360 ) - angle -= 360; - - if( arc_start > arc_end ) - { - i = arc_start; - arc_start = arc_end; - arc_end = i; - } - while( arc_start < 0 ) - { - arc_start += 360; - arc_end += 360; - } - while( arc_end > 360 ) - { - arc_end -= 360; - arc_start -= 360; - } - if( arc_end - arc_start > 360 ) - { - arc_start = 0; - arc_end = 360; - } - sincos( angle, alpha, beta ); - pts.resize(0); - - for( i = arc_start; i < arc_end + delta; i += delta ) - { - double x, y; - angle = i; - if( angle > arc_end ) - angle = arc_end; - if( angle < 0 ) - angle += 360; - - x = size_a * SinTable[450-angle]; - y = size_b * SinTable[angle]; - Point pt; - pt.x = cvRound( cx + x * alpha - y * beta ); - pt.y = cvRound( cy + x * beta + y * alpha ); - if( pt != prevPt ){ - pts.push_back(pt); - prevPt = pt; - } - } - - if( pts.size() == 1 ) - pts.push_back(pts[0]); -} - - -static void -EllipseEx( Mat& img, Point center, Size axes, - int angle, int arc_start, int arc_end, - const void* color, int thickness, int line_type ) -{ - axes.width = std::abs(axes.width), axes.height = std::abs(axes.height); - int delta = (std::max(axes.width,axes.height)+(XY_ONE>>1))>>XY_SHIFT; - delta = delta < 3 ? 90 : delta < 10 ? 30 : delta < 15 ? 18 : 5; - - vector v; - ellipse2Poly( center, axes, angle, arc_start, arc_end, delta, v ); - - if( thickness >= 0 ) - PolyLine( img, &v[0], (int)v.size(), false, color, thickness, line_type, XY_SHIFT ); - else if( arc_end - arc_start >= 360 ) - FillConvexPoly( img, &v[0], (int)v.size(), color, line_type, XY_SHIFT ); - else - { - v.push_back(center); - vector edges; - CollectPolyEdges( img, &v[0], (int)v.size(), edges, color, line_type, XY_SHIFT ); - FillEdgeCollection( img, edges, color ); - } -} - - -/****************************************************************************************\ -* Polygons filling * -\****************************************************************************************/ - -/* helper macros: filling horizontal row */ -#define ICV_HLINE( ptr, xl, xr, color, pix_size ) \ -{ \ - uchar* hline_ptr = (uchar*)(ptr) + (xl)*(pix_size); \ - uchar* hline_max_ptr = (uchar*)(ptr) + (xr)*(pix_size); \ - \ - for( ; hline_ptr <= hline_max_ptr; hline_ptr += (pix_size))\ - { \ - int hline_j; \ - for( hline_j = 0; hline_j < (pix_size); hline_j++ ) \ - { \ - hline_ptr[hline_j] = ((uchar*)color)[hline_j]; \ - } \ - } \ -} - - -/* filling convex polygon. v - array of vertices, ntps - number of points */ -static void -FillConvexPoly( Mat& img, const Point* v, int npts, const void* color, int line_type, int shift ) -{ - struct - { - int idx, di; - int x, dx, ye; - } - edge[2]; - - int delta = shift ? 1 << (shift - 1) : 0; - int i, y, imin = 0, left = 0, right = 1, x1, x2; - int edges = npts; - int xmin, xmax, ymin, ymax; - uchar* ptr = img.data; - Size size = img.size(); - int pix_size = (int)img.elemSize(); - Point p0; - int delta1, delta2; - - if( line_type < CV_AA ) - delta1 = delta2 = XY_ONE >> 1; - else - delta1 = XY_ONE - 1, delta2 = 0; - - p0 = v[npts - 1]; - p0.x <<= XY_SHIFT - shift; - p0.y <<= XY_SHIFT - shift; - - assert( 0 <= shift && shift <= XY_SHIFT ); - xmin = xmax = v[0].x; - ymin = ymax = v[0].y; - - for( i = 0; i < npts; i++ ) - { - Point p = v[i]; - if( p.y < ymin ) - { - ymin = p.y; - imin = i; - } - - ymax = std::max( ymax, p.y ); - xmax = std::max( xmax, p.x ); - xmin = MIN( xmin, p.x ); - - p.x <<= XY_SHIFT - shift; - p.y <<= XY_SHIFT - shift; - - if( line_type <= 8 ) - { - if( shift == 0 ) - { - Point pt0, pt1; - pt0.x = p0.x >> XY_SHIFT; - pt0.y = p0.y >> XY_SHIFT; - pt1.x = p.x >> XY_SHIFT; - pt1.y = p.y >> XY_SHIFT; - Line( img, pt0, pt1, color, line_type ); - } - else - Line2( img, p0, p, color ); - } - else - LineAA( img, p0, p, color ); - p0 = p; - } - - xmin = (xmin + delta) >> shift; - xmax = (xmax + delta) >> shift; - ymin = (ymin + delta) >> shift; - ymax = (ymax + delta) >> shift; - - if( npts < 3 || xmax < 0 || ymax < 0 || xmin >= size.width || ymin >= size.height ) - return; - - ymax = MIN( ymax, size.height - 1 ); - edge[0].idx = edge[1].idx = imin; - - edge[0].ye = edge[1].ye = y = ymin; - edge[0].di = 1; - edge[1].di = npts - 1; - - ptr += img.step*y; - - do - { - if( line_type < CV_AA || y < ymax || y == ymin ) - { - for( i = 0; i < 2; i++ ) - { - if( y >= edge[i].ye ) - { - int idx = edge[i].idx, di = edge[i].di; - int xs = 0, xe, ye, ty = 0; - - for(;;) - { - ty = (v[idx].y + delta) >> shift; - if( ty > y || edges == 0 ) - break; - xs = v[idx].x; - idx += di; - idx -= ((idx < npts) - 1) & npts; /* idx -= idx >= npts ? npts : 0 */ - edges--; - } - - ye = ty; - xs <<= XY_SHIFT - shift; - xe = v[idx].x << (XY_SHIFT - shift); - - /* no more edges */ - if( y >= ye ) - return; - - edge[i].ye = ye; - edge[i].dx = ((xe - xs)*2 + (ye - y)) / (2 * (ye - y)); - edge[i].x = xs; - edge[i].idx = idx; - } - } - } - - if( edge[left].x > edge[right].x ) - { - left ^= 1; - right ^= 1; - } - - x1 = edge[left].x; - x2 = edge[right].x; - - if( y >= 0 ) - { - int xx1 = (x1 + delta1) >> XY_SHIFT; - int xx2 = (x2 + delta2) >> XY_SHIFT; - - if( xx2 >= 0 && xx1 < size.width ) - { - if( xx1 < 0 ) - xx1 = 0; - if( xx2 >= size.width ) - xx2 = size.width - 1; - ICV_HLINE( ptr, xx1, xx2, color, pix_size ); - } - } - - x1 += edge[left].dx; - x2 += edge[right].dx; - - edge[left].x = x1; - edge[right].x = x2; - ptr += img.step; - } - while( ++y <= ymax ); -} - - -/******** Arbitrary polygon **********/ - -static void -CollectPolyEdges( Mat& img, const Point* v, int count, vector& edges, - const void* color, int line_type, int shift, Point offset ) -{ - int i, delta = offset.y + (shift ? 1 << (shift - 1) : 0); - Point pt0 = v[count-1], pt1; - pt0.x = (pt0.x + offset.x) << (XY_SHIFT - shift); - pt0.y = (pt0.y + delta) >> shift; - - edges.reserve( edges.size() + count ); - - for( i = 0; i < count; i++, pt0 = pt1 ) - { - Point t0, t1; - PolyEdge edge; - - pt1 = v[i]; - pt1.x = (pt1.x + offset.x) << (XY_SHIFT - shift); - pt1.y = (pt1.y + delta) >> shift; - - if( line_type < CV_AA ) - { - t0.y = pt0.y; t1.y = pt1.y; - t0.x = (pt0.x + (XY_ONE >> 1)) >> XY_SHIFT; - t1.x = (pt1.x + (XY_ONE >> 1)) >> XY_SHIFT; - Line( img, t0, t1, color, line_type ); - } - else - { - t0.x = pt0.x; t1.x = pt1.x; - t0.y = pt0.y << XY_SHIFT; - t1.y = pt1.y << XY_SHIFT; - LineAA( img, t0, t1, color ); - } - - if( pt0.y == pt1.y ) - continue; - - if( pt0.y < pt1.y ) - { - edge.y0 = pt0.y; - edge.y1 = pt1.y; - edge.x = pt0.x; - } - else - { - edge.y0 = pt1.y; - edge.y1 = pt0.y; - edge.x = pt1.x; - } - edge.dx = (pt1.x - pt0.x) / (pt1.y - pt0.y); - edges.push_back(edge); - } -} - -struct CmpEdges -{ - bool operator ()(const PolyEdge& e1, const PolyEdge& e2) - { - return e1.y0 - e2.y0 ? e1.y0 < e2.y0 : - e1.x - e2.x ? e1.x < e2.x : e1.dx < e2.dx; - } -}; - -/**************** helper macros and functions for sequence/contour processing ***********/ - -static void -FillEdgeCollection( Mat& img, vector& edges, const void* color ) -{ - PolyEdge tmp; - int i, y, total = (int)edges.size(); - Size size = img.size(); - PolyEdge* e; - int y_max = INT_MIN, x_max = INT_MIN, y_min = INT_MAX, x_min = INT_MAX; - int pix_size = (int)img.elemSize(); - - if( total < 2 ) - return; - - for( i = 0; i < total; i++ ) - { - PolyEdge& e1 = edges[i]; - assert( e1.y0 < e1.y1 ); - y_min = std::min( y_min, e1.y0 ); - y_max = std::max( y_max, e1.y1 ); - x_min = std::min( x_min, e1.x ); - x_max = std::max( x_max, e1.x ); - } - - if( y_max < 0 || y_min >= size.height || x_max < 0 || x_min >= (size.width<y0; y < y_max; y++ ) - { - PolyEdge *last, *prelast, *keep_prelast; - int sort_flag = 0; - int draw = 0; - int clipline = y < 0; - - prelast = &tmp; - last = tmp.next; - while( last || e->y0 == y ) - { - if( last && last->y1 == y ) - { - // exclude edge if y reachs its lower point - prelast->next = last->next; - last = last->next; - continue; - } - keep_prelast = prelast; - if( last && (e->y0 > y || last->x < e->x) ) - { - // go to the next edge in active list - prelast = last; - last = last->next; - } - else if( i < total ) - { - // insert new edge into active list if y reachs its upper point - prelast->next = e; - e->next = last; - prelast = e; - e = &edges[++i]; - } - else - break; - - if( draw ) - { - if( !clipline ) - { - // convert x's from fixed-point to image coordinates - uchar *timg = img.data + y * img.step; - int x1 = keep_prelast->x; - int x2 = prelast->x; - - if( x1 > x2 ) - { - int t = x1; - - x1 = x2; - x2 = t; - } - - x1 = (x1 + XY_ONE - 1) >> XY_SHIFT; - x2 = x2 >> XY_SHIFT; - - // clip and draw the line - if( x1 < size.width && x2 >= 0 ) - { - if( x1 < 0 ) - x1 = 0; - if( x2 >= size.width ) - x2 = size.width - 1; - ICV_HLINE( timg, x1, x2, color, pix_size ); - } - } - keep_prelast->x += keep_prelast->dx; - prelast->x += prelast->dx; - } - draw ^= 1; - } - - // sort edges (using bubble sort) - keep_prelast = 0; - - do - { - prelast = &tmp; - last = tmp.next; - - while( last != keep_prelast && last->next != 0 ) - { - PolyEdge *te = last->next; - - // swap edges - if( last->x > te->x ) - { - prelast->next = te; - last->next = te->next; - te->next = last; - prelast = te; - sort_flag = 1; - } - else - { - prelast = last; - last = te; - } - } - keep_prelast = prelast; - } - while( sort_flag && keep_prelast != tmp.next && keep_prelast != &tmp ); - } -} - - -/* draws simple or filled circle */ -static void -Circle( Mat& img, Point center, int radius, const void* color, int fill ) -{ - Size size = img.size(); - size_t step = img.step; - int pix_size = (int)img.elemSize(); - uchar* ptr = img.data; - int err = 0, dx = radius, dy = 0, plus = 1, minus = (radius << 1) - 1; - int inside = center.x >= radius && center.x < size.width - radius && - center.y >= radius && center.y < size.height - radius; - - #define ICV_PUT_POINT( ptr, x ) \ - memcpy( ptr + (x)*pix_size, color, pix_size ); - - while( dx >= dy ) - { - int mask; - int y11 = center.y - dy, y12 = center.y + dy, y21 = center.y - dx, y22 = center.y + dx; - int x11 = center.x - dx, x12 = center.x + dx, x21 = center.x - dy, x22 = center.x + dy; - - if( inside ) - { - uchar *tptr0 = ptr + y11 * step; - uchar *tptr1 = ptr + y12 * step; - - if( !fill ) - { - ICV_PUT_POINT( tptr0, x11 ); - ICV_PUT_POINT( tptr1, x11 ); - ICV_PUT_POINT( tptr0, x12 ); - ICV_PUT_POINT( tptr1, x12 ); - } - else - { - ICV_HLINE( tptr0, x11, x12, color, pix_size ); - ICV_HLINE( tptr1, x11, x12, color, pix_size ); - } - - tptr0 = ptr + y21 * step; - tptr1 = ptr + y22 * step; - - if( !fill ) - { - ICV_PUT_POINT( tptr0, x21 ); - ICV_PUT_POINT( tptr1, x21 ); - ICV_PUT_POINT( tptr0, x22 ); - ICV_PUT_POINT( tptr1, x22 ); - } - else - { - ICV_HLINE( tptr0, x21, x22, color, pix_size ); - ICV_HLINE( tptr1, x21, x22, color, pix_size ); - } - } - else if( x11 < size.width && x12 >= 0 && y21 < size.height && y22 >= 0 ) - { - if( fill ) - { - x11 = std::max( x11, 0 ); - x12 = MIN( x12, size.width - 1 ); - } - - if( (unsigned)y11 < (unsigned)size.height ) - { - uchar *tptr = ptr + y11 * step; - - if( !fill ) - { - if( x11 >= 0 ) - ICV_PUT_POINT( tptr, x11 ); - if( x12 < size.width ) - ICV_PUT_POINT( tptr, x12 ); - } - else - ICV_HLINE( tptr, x11, x12, color, pix_size ); - } - - if( (unsigned)y12 < (unsigned)size.height ) - { - uchar *tptr = ptr + y12 * step; - - if( !fill ) - { - if( x11 >= 0 ) - ICV_PUT_POINT( tptr, x11 ); - if( x12 < size.width ) - ICV_PUT_POINT( tptr, x12 ); - } - else - ICV_HLINE( tptr, x11, x12, color, pix_size ); - } - - if( x21 < size.width && x22 >= 0 ) - { - if( fill ) - { - x21 = std::max( x21, 0 ); - x22 = MIN( x22, size.width - 1 ); - } - - if( (unsigned)y21 < (unsigned)size.height ) - { - uchar *tptr = ptr + y21 * step; - - if( !fill ) - { - if( x21 >= 0 ) - ICV_PUT_POINT( tptr, x21 ); - if( x22 < size.width ) - ICV_PUT_POINT( tptr, x22 ); - } - else - ICV_HLINE( tptr, x21, x22, color, pix_size ); - } - - if( (unsigned)y22 < (unsigned)size.height ) - { - uchar *tptr = ptr + y22 * step; - - if( !fill ) - { - if( x21 >= 0 ) - ICV_PUT_POINT( tptr, x21 ); - if( x22 < size.width ) - ICV_PUT_POINT( tptr, x22 ); - } - else - ICV_HLINE( tptr, x21, x22, color, pix_size ); - } - } - } - dy++; - err += plus; - plus += 2; - - mask = (err <= 0) - 1; - - err -= minus & mask; - dx += mask; - minus -= mask & 2; - } - - #undef ICV_PUT_POINT -} - - -static void -ThickLine( Mat& img, Point p0, Point p1, const void* color, - int thickness, int line_type, int flags, int shift ) -{ - static const double INV_XY_ONE = 1./XY_ONE; - - p0.x <<= XY_SHIFT - shift; - p0.y <<= XY_SHIFT - shift; - p1.x <<= XY_SHIFT - shift; - p1.y <<= XY_SHIFT - shift; - - if( thickness <= 1 ) - { - if( line_type < CV_AA ) - { - if( line_type == 1 || line_type == 4 || shift == 0 ) - { - p0.x = (p0.x + (XY_ONE>>1)) >> XY_SHIFT; - p0.y = (p0.y + (XY_ONE>>1)) >> XY_SHIFT; - p1.x = (p1.x + (XY_ONE>>1)) >> XY_SHIFT; - p1.y = (p1.y + (XY_ONE>>1)) >> XY_SHIFT; - Line( img, p0, p1, color, line_type ); - } - else - Line2( img, p0, p1, color ); - } - else - LineAA( img, p0, p1, color ); - } - else - { - Point pt[4], dp = Point(0,0); - double dx = (p0.x - p1.x)*INV_XY_ONE, dy = (p1.y - p0.y)*INV_XY_ONE; - double r = dx * dx + dy * dy; - int i, oddThickness = thickness & 1; - thickness <<= XY_SHIFT - 1; - - if( fabs(r) > DBL_EPSILON ) - { - r = (thickness + oddThickness*XY_ONE*0.5)/std::sqrt(r); - dp.x = cvRound( dy * r ); - dp.y = cvRound( dx * r ); - - pt[0].x = p0.x + dp.x; - pt[0].y = p0.y + dp.y; - pt[1].x = p0.x - dp.x; - pt[1].y = p0.y - dp.y; - pt[2].x = p1.x - dp.x; - pt[2].y = p1.y - dp.y; - pt[3].x = p1.x + dp.x; - pt[3].y = p1.y + dp.y; - - FillConvexPoly( img, pt, 4, color, line_type, XY_SHIFT ); - } - - for( i = 0; i < 2; i++ ) - { - if( flags & (i+1) ) - { - if( line_type < CV_AA ) - { - Point center; - center.x = (p0.x + (XY_ONE>>1)) >> XY_SHIFT; - center.y = (p0.y + (XY_ONE>>1)) >> XY_SHIFT; - Circle( img, center, (thickness + (XY_ONE>>1)) >> XY_SHIFT, color, 1 ); - } - else - { - EllipseEx( img, p0, cvSize(thickness, thickness), - 0, 0, 360, color, -1, line_type ); - } - } - p0 = p1; - } - } -} - - -static void -PolyLine( Mat& img, const Point* v, int count, bool is_closed, - const void* color, int thickness, - int line_type, int shift ) -{ - if( !v || count <= 0 ) - return; - - int i = is_closed ? count - 1 : 0; - int flags = 2 + !is_closed; - Point p0; - CV_Assert( 0 <= shift && shift <= XY_SHIFT && thickness >= 0 ); - - p0 = v[i]; - for( i = !is_closed; i < count; i++ ) - { - Point p = v[i]; - ThickLine( img, p0, p, color, thickness, line_type, flags, shift ); - p0 = p; - flags = 2; - } -} - -/****************************************************************************************\ -* External functions * -\****************************************************************************************/ - -void line( Mat& img, Point pt1, Point pt2, const Scalar& color, - int thickness, int line_type, int shift ) -{ - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - CV_Assert( 0 <= thickness && thickness <= 255 ); - CV_Assert( 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData( color, buf, img.type(), 0 ); - ThickLine( img, pt1, pt2, buf, thickness, line_type, 3, shift ); -} - -void rectangle( Mat& img, Point pt1, Point pt2, - const Scalar& color, int thickness, - int lineType, int shift ) -{ - if( lineType == CV_AA && img.depth() != CV_8U ) - lineType = 8; - - CV_Assert( thickness <= 255 ); - CV_Assert( 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - Point pt[4]; - - pt[0] = pt1; - pt[1].x = pt2.x; - pt[1].y = pt1.y; - pt[2] = pt2; - pt[3].x = pt1.x; - pt[3].y = pt2.y; - - if( thickness >= 0 ) - PolyLine( img, pt, 4, true, buf, thickness, lineType, shift ); - else - FillConvexPoly( img, pt, 4, buf, lineType, shift ); -} - - -void rectangle( Mat& img, Rect rec, - const Scalar& color, int thickness, - int lineType, int shift ) -{ - CV_Assert( 0 <= shift && shift <= XY_SHIFT ); - if( rec.area() > 0 ) - rectangle( img, rec.tl(), rec.br() - Point(1<= 0 && thickness <= 255 && - 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - if( thickness > 1 || line_type >= CV_AA ) - { - center.x <<= XY_SHIFT - shift; - center.y <<= XY_SHIFT - shift; - radius <<= XY_SHIFT - shift; - EllipseEx( img, center, Size(radius, radius), - 0, 0, 360, buf, thickness, line_type ); - } - else - Circle( img, center, radius, buf, thickness < 0 ); -} - - -void ellipse( Mat& img, Point center, Size axes, - double angle, double start_angle, double end_angle, - const Scalar& color, int thickness, int line_type, int shift ) -{ - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - CV_Assert( axes.width >= 0 && axes.height >= 0 && - thickness <= 255 && 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - int _angle = cvRound(angle); - int _start_angle = cvRound(start_angle); - int _end_angle = cvRound(end_angle); - center.x <<= XY_SHIFT - shift; - center.y <<= XY_SHIFT - shift; - axes.width <<= XY_SHIFT - shift; - axes.height <<= XY_SHIFT - shift; - - EllipseEx( img, center, axes, _angle, _start_angle, - _end_angle, buf, thickness, line_type ); -} - -void ellipse(Mat& img, const RotatedRect& box, const Scalar& color, - int thickness, int lineType) -{ - if( lineType == CV_AA && img.depth() != CV_8U ) - lineType = 8; - - CV_Assert( box.size.width >= 0 && box.size.height >= 0 && - thickness <= 255 ); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - int _angle = cvRound(box.angle); - Point center(cvRound(box.center.x*(1 << XY_SHIFT)), - cvRound(box.center.y*(1 << XY_SHIFT))); - Size axes(cvRound(box.size.width*(1 << (XY_SHIFT - 1))), - cvRound(box.size.height*(1 << (XY_SHIFT - 1)))); - EllipseEx( img, center, axes, _angle, 0, 360, buf, thickness, lineType ); -} - -void fillConvexPoly( Mat& img, const Point* pts, int npts, - const Scalar& color, int line_type, int shift ) -{ - if( !pts || npts <= 0 ) - return; - - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - double buf[4]; - CV_Assert( 0 <= shift && shift <= XY_SHIFT ); - scalarToRawData(color, buf, img.type(), 0); - FillConvexPoly( img, pts, npts, buf, line_type, shift ); -} - - -void fillPoly( Mat& img, const Point** pts, const int* npts, int ncontours, - const Scalar& color, int line_type, - int shift, Point offset ) -{ - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - CV_Assert( pts && npts && ncontours >= 0 && 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - vector edges; - - int i, total = 0; - for( i = 0; i < ncontours; i++ ) - total += npts[i]; - - edges.reserve( total + 1 ); - for( i = 0; i < ncontours; i++ ) - CollectPolyEdges( img, pts[i], npts[i], edges, buf, line_type, shift, offset ); - - FillEdgeCollection(img, edges, buf); -} - - -void polylines( Mat& img, const Point** pts, const int* npts, int ncontours, bool isClosed, - const Scalar& color, int thickness, int line_type, int shift ) -{ - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - CV_Assert( pts && npts && ncontours >= 0 && - 0 <= thickness && thickness <= 255 && - 0 <= shift && shift <= XY_SHIFT ); - - double buf[4]; - scalarToRawData( color, buf, img.type(), 0 ); - - for( int i = 0; i < ncontours; i++ ) - PolyLine( img, pts[i], npts[i], isClosed, buf, thickness, line_type, shift ); -} - - -enum { FONT_SIZE_SHIFT=8, FONT_ITALIC_ALPHA=(1 << 8), - FONT_ITALIC_DIGIT=(2 << 8), FONT_ITALIC_PUNCT=(4 << 8), - FONT_ITALIC_BRACES=(8 << 8), FONT_HAVE_GREEK=(16 << 8), - FONT_HAVE_CYRILLIC=(32 << 8) }; - -static const int HersheyPlain[] = { -(5 + 4*16) + FONT_HAVE_GREEK, -199, 214, 217, 233, 219, 197, 234, 216, 221, 222, 228, 225, 211, 224, 210, 220, -200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 212, 213, 191, 226, 192, -215, 190, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 193, 84, -194, 85, 86, 87, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, -112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, -195, 223, 196, 88 }; - -static const int HersheyPlainItalic[] = { -(5 + 4*16) + FONT_ITALIC_ALPHA + FONT_HAVE_GREEK, -199, 214, 217, 233, 219, 197, 234, 216, 221, 222, 228, 225, 211, 224, 210, 220, -200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 212, 213, 191, 226, 192, -215, 190, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 193, 84, -194, 85, 86, 87, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, -162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, -195, 223, 196, 88 }; - -static const int HersheyComplexSmall[] = { -(6 + 7*16) + FONT_HAVE_GREEK, -1199, 1214, 1217, 1275, 1274, 1271, 1272, 1216, 1221, 1222, 1219, 1232, 1211, 1231, 1210, 1220, -1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1212, 2213, 1241, 1238, 1242, -1215, 1273, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, -1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1223, 1084, -1224, 1247, 586, 1249, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, -1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, -1225, 1229, 1226, 1246 }; - -static const int HersheyComplexSmallItalic[] = { -(6 + 7*16) + FONT_ITALIC_ALPHA + FONT_HAVE_GREEK, -1199, 1214, 1217, 1275, 1274, 1271, 1272, 1216, 1221, 1222, 1219, 1232, 1211, 1231, 1210, 1220, -1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1212, 1213, 1241, 1238, 1242, -1215, 1273, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, -1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1223, 1084, -1224, 1247, 586, 1249, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, -1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, -1225, 1229, 1226, 1246 }; - -static const int HersheySimplex[] = { -(9 + 12*16) + FONT_HAVE_GREEK, -2199, 714, 717, 733, 719, 697, 734, 716, 721, 722, 728, 725, 711, 724, 710, 720, -700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 712, 713, 691, 726, 692, -715, 690, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, -514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 693, 584, -694, 2247, 586, 2249, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, -612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, -695, 723, 696, 2246 }; - -static const int HersheyDuplex[] = { -(9 + 12*16) + FONT_HAVE_GREEK, -2199, 2714, 2728, 2732, 2719, 2733, 2718, 2727, 2721, 2722, 2723, 2725, 2711, 2724, 2710, 2720, -2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2712, 2713, 2730, 2726, 2731, -2715, 2734, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, -2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2223, 2084, -2224, 2247, 587, 2249, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, -2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, -2225, 2229, 2226, 2246 }; - -static const int HersheyComplex[] = { -(9 + 12*16) + FONT_HAVE_GREEK + FONT_HAVE_CYRILLIC, -2199, 2214, 2217, 2275, 2274, 2271, 2272, 2216, 2221, 2222, 2219, 2232, 2211, 2231, 2210, 2220, -2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2212, 2213, 2241, 2238, 2242, -2215, 2273, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, -2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2223, 2084, -2224, 2247, 587, 2249, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, -2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, -2225, 2229, 2226, 2246 }; - -static const int HersheyComplexItalic[] = { -(9 + 12*16) + FONT_ITALIC_ALPHA + FONT_ITALIC_DIGIT + FONT_ITALIC_PUNCT + -FONT_HAVE_GREEK + FONT_HAVE_CYRILLIC, -2199, 2764, 2778, 2782, 2769, 2783, 2768, 2777, 2771, 2772, 2219, 2232, 2211, 2231, 2210, 2220, -2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2212, 2213, 2241, 2238, 2242, -2765, 2273, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, -2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2223, 2084, -2224, 2247, 587, 2249, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, -2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, -2225, 2229, 2226, 2246 }; - -static const int HersheyTriplex[] = { -(9 + 12*16) + FONT_HAVE_GREEK, -2199, 3214, 3228, 3232, 3219, 3233, 3218, 3227, 3221, 3222, 3223, 3225, 3211, 3224, 3210, 3220, -3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3212, 3213, 3230, 3226, 3231, -3215, 3234, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, -2014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 2223, 2084, -2224, 2247, 587, 2249, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, -3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, -2225, 2229, 2226, 2246 }; - -static const int HersheyTriplexItalic[] = { -(9 + 12*16) + FONT_ITALIC_ALPHA + FONT_ITALIC_DIGIT + -FONT_ITALIC_PUNCT + FONT_HAVE_GREEK, -2199, 3264, 3278, 3282, 3269, 3233, 3268, 3277, 3271, 3272, 3223, 3225, 3261, 3224, 3260, 3270, -3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3262, 3263, 3230, 3226, 3231, -3265, 3234, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, -2064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 2223, 2084, -2224, 2247, 587, 2249, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, -3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, -2225, 2229, 2226, 2246 }; - -static const int HersheyScriptSimplex[] = { -(9 + 12*16) + FONT_ITALIC_ALPHA + FONT_HAVE_GREEK, -2199, 714, 717, 733, 719, 697, 734, 716, 721, 722, 728, 725, 711, 724, 710, 720, -700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 712, 713, 691, 726, 692, -715, 690, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, -564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 693, 584, -694, 2247, 586, 2249, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, -662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, -695, 723, 696, 2246 }; - -static const int HersheyScriptComplex[] = { -(9 + 12*16) + FONT_ITALIC_ALPHA + FONT_ITALIC_DIGIT + FONT_ITALIC_PUNCT + FONT_HAVE_GREEK, -2199, 2764, 2778, 2782, 2769, 2783, 2768, 2777, 2771, 2772, 2219, 2232, 2211, 2231, 2210, 2220, -2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2212, 2213, 2241, 2238, 2242, -2215, 2273, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, -2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2223, 2084, -2224, 2247, 586, 2249, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, -2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, -2225, 2229, 2226, 2246 }; - - -static const int* getFontData(int fontFace) -{ - bool isItalic = (fontFace & FONT_ITALIC) != 0; - const int* ascii = 0; - - switch( fontFace & 15 ) - { - case FONT_HERSHEY_SIMPLEX: - ascii = HersheySimplex; - break; - case FONT_HERSHEY_PLAIN: - ascii = !isItalic ? HersheyPlain : HersheyPlainItalic; - break; - case FONT_HERSHEY_DUPLEX: - ascii = HersheyDuplex; - break; - case FONT_HERSHEY_COMPLEX: - ascii = !isItalic ? HersheyComplex : HersheyComplexItalic; - break; - case FONT_HERSHEY_TRIPLEX: - ascii = !isItalic ? HersheyTriplex : HersheyTriplexItalic; - break; - case FONT_HERSHEY_COMPLEX_SMALL: - ascii = !isItalic ? HersheyComplexSmall : HersheyComplexSmallItalic; - break; - case FONT_HERSHEY_SCRIPT_SIMPLEX: - ascii = HersheyScriptSimplex; - break; - case FONT_HERSHEY_SCRIPT_COMPLEX: - ascii = HersheyScriptComplex; - break; - default: - CV_Error( CV_StsOutOfRange, "Unknown font type" ); - } - return ascii; -} - - -void putText( Mat& img, const string& text, Point org, - int fontFace, double fontScale, Scalar color, - int thickness, int line_type, bool bottomLeftOrigin ) - -{ - const int* ascii = getFontData(fontFace); - - double buf[4]; - scalarToRawData(color, buf, img.type(), 0); - - int base_line = -(ascii[0] & 15); - int hscale = cvRound(fontScale*XY_ONE), vscale = hscale; - - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - if( bottomLeftOrigin ) - vscale = -vscale; - - int view_x = org.x << XY_SHIFT; - int view_y = (org.y << XY_SHIFT) + base_line*vscale; - vector pts; - pts.reserve(1 << 10); - const char **faces = cv::g_HersheyGlyphs; - - for( int i = 0; text[i] != '\0'; i++ ) - { - int c = (uchar)text[i]; - Point p; - - if( c >= 127 || c < ' ' ) - c = '?'; - - const char* ptr = faces[ascii[(c-' ')+1]]; - p.x = (uchar)ptr[0] - 'R'; - p.y = (uchar)ptr[1] - 'R'; - int dx = p.y*hscale; - view_x -= p.x*hscale; - pts.resize(0); - - for( ptr += 2;; ) - { - if( *ptr == ' ' || !*ptr ) - { - if( pts.size() > 1 ) - PolyLine( img, &pts[0], (int)pts.size(), false, buf, thickness, line_type, XY_SHIFT ); - if( !*ptr++ ) - break; - pts.resize(0); - } - else - { - p.x = (uchar)ptr[0] - 'R'; - p.y = (uchar)ptr[1] - 'R'; - ptr += 2; - pts.push_back(Point(p.x*hscale + view_x, p.y*vscale + view_y)); - } - } - view_x += dx; - } -} - -Size getTextSize( const string& text, int fontFace, double fontScale, int thickness, int* _base_line) -{ - Size size; - double view_x = 0; - const char **faces = cv::g_HersheyGlyphs; - const int* ascii = getFontData(fontFace); - - int base_line = (ascii[0] & 15); - int cap_line = (ascii[0] >> 4) & 15; - size.height = cvRound((cap_line + base_line)*fontScale + (thickness+1)/2); - - for( int i = 0; text[i] != '\0'; i++ ) - { - int c = (uchar)text[i]; - Point p; - - if( c >= 127 || c < ' ' ) - c = '?'; - - const char* ptr = faces[ascii[(c-' ')+1]]; - p.x = (uchar)ptr[0] - 'R'; - p.y = (uchar)ptr[1] - 'R'; - view_x += (p.y - p.x)*fontScale; - } - - size.width = cvRound(view_x + thickness); - if( _base_line ) - *_base_line = cvRound(base_line*fontScale + thickness*0.5); - return size; -} - -} - - -void cv::fillConvexPoly(InputOutputArray _img, InputArray _points, - const Scalar& color, int lineType, int shift) -{ - Mat img = _img.getMat(), points = _points.getMat(); - CV_Assert(points.checkVector(2, CV_32S) >= 0); - fillConvexPoly(img, (const Point*)points.data, points.rows*points.cols*points.channels()/2, color, lineType, shift); -} - - -void cv::fillPoly(InputOutputArray _img, InputArrayOfArrays pts, - const Scalar& color, int lineType, int shift, Point offset) -{ - Mat img = _img.getMat(); - int i, ncontours = (int)pts.total(); - if( ncontours == 0 ) - return; - AutoBuffer _ptsptr(ncontours); - AutoBuffer _npts(ncontours); - Point** ptsptr = _ptsptr; - int* npts = _npts; - - for( i = 0; i < ncontours; i++ ) - { - Mat p = pts.getMat(i); - CV_Assert(p.checkVector(2, CV_32S) >= 0); - ptsptr[i] = (Point*)p.data; - npts[i] = p.rows*p.cols*p.channels()/2; - } - fillPoly(img, (const Point**)ptsptr, npts, (int)ncontours, color, lineType, shift, offset); -} - - -void cv::polylines(InputOutputArray _img, InputArrayOfArrays pts, - bool isClosed, const Scalar& color, - int thickness, int lineType, int shift ) -{ - Mat img = _img.getMat(); - bool manyContours = pts.kind() == _InputArray::STD_VECTOR_VECTOR || - pts.kind() == _InputArray::STD_VECTOR_MAT; - int i, ncontours = manyContours ? (int)pts.total() : 1; - if( ncontours == 0 ) - return; - AutoBuffer _ptsptr(ncontours); - AutoBuffer _npts(ncontours); - Point** ptsptr = _ptsptr; - int* npts = _npts; - - for( i = 0; i < ncontours; i++ ) - { - Mat p = pts.getMat(manyContours ? i : -1); - if( p.total() == 0 ) - continue; - CV_Assert(p.checkVector(2, CV_32S) >= 0); - ptsptr[i] = (Point*)p.data; - npts[i] = p.rows*p.cols*p.channels()/2; - } - polylines(img, (const Point**)ptsptr, npts, (int)ncontours, isClosed, color, thickness, lineType, shift); -} - - -static const int CodeDeltas[8][2] = -{ {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1} }; - -#define CV_ADJUST_EDGE_COUNT( count, seq ) \ - ((count) -= ((count) == (seq)->total && !CV_IS_SEQ_CLOSED(seq))) - -CV_IMPL void -cvDrawContours( void* _img, CvSeq* contour, - CvScalar _externalColor, CvScalar _holeColor, - int maxLevel, int thickness, - int line_type, CvPoint _offset ) -{ - CvSeq *contour0 = contour, *h_next = 0; - CvTreeNodeIterator iterator; - cv::vector edges; - cv::vector pts; - cv::Scalar externalColor = _externalColor, holeColor = _holeColor; - cv::Mat img = cv::cvarrToMat(_img); - cv::Point offset = _offset; - double ext_buf[4], hole_buf[4]; - - if( line_type == CV_AA && img.depth() != CV_8U ) - line_type = 8; - - if( !contour ) - return; - - CV_Assert( thickness <= 255 ); - - scalarToRawData( externalColor, ext_buf, img.type(), 0 ); - scalarToRawData( holeColor, hole_buf, img.type(), 0 ); - - maxLevel = MAX(maxLevel, INT_MIN+2); - maxLevel = MIN(maxLevel, INT_MAX-1); - - if( maxLevel < 0 ) - { - h_next = contour->h_next; - contour->h_next = 0; - maxLevel = -maxLevel+1; - } - - cvInitTreeNodeIterator( &iterator, contour, maxLevel ); - while( (contour = (CvSeq*)cvNextTreeNode( &iterator )) != 0 ) - { - CvSeqReader reader; - int i, count = contour->total; - int elem_type = CV_MAT_TYPE(contour->flags); - void* clr = (contour->flags & CV_SEQ_FLAG_HOLE) == 0 ? ext_buf : hole_buf; - - cvStartReadSeq( contour, &reader, 0 ); - if( thickness < 0 ) - pts.resize(0); - - if( CV_IS_SEQ_CHAIN_CONTOUR( contour )) - { - cv::Point pt = ((CvChain*)contour)->origin; - cv::Point prev_pt = pt; - char prev_code = reader.ptr ? reader.ptr[0] : '\0'; - - prev_pt += offset; - - for( i = 0; i < count; i++ ) - { - char code; - CV_READ_SEQ_ELEM( code, reader ); - - assert( (code & ~7) == 0 ); - - if( code != prev_code ) - { - prev_code = code; - if( thickness >= 0 ) - cv::ThickLine( img, prev_pt, pt, clr, thickness, line_type, 2, 0 ); - else - pts.push_back(pt); - prev_pt = pt; - } - - pt.x += CodeDeltas[(int)code][0]; - pt.y += CodeDeltas[(int)code][1]; - } - - if( thickness >= 0 ) - cv::ThickLine( img, prev_pt, - cv::Point(((CvChain*)contour)->origin) + offset, - clr, thickness, line_type, 2, 0 ); - else - cv::CollectPolyEdges(img, &pts[0], (int)pts.size(), - edges, ext_buf, line_type, 0, offset); - } - else if( CV_IS_SEQ_POLYLINE( contour )) - { - CV_Assert( elem_type == CV_32SC2 ); - cv::Point pt1, pt2; - int shift = 0; - - count -= !CV_IS_SEQ_CLOSED(contour); - CV_READ_SEQ_ELEM( pt1, reader ); - pt1 += offset; - if( thickness < 0 ) - pts.push_back(pt1); - - for( i = 0; i < count; i++ ) - { - CV_READ_SEQ_ELEM( pt2, reader ); - pt2 += offset; - if( thickness >= 0 ) - cv::ThickLine( img, pt1, pt2, clr, thickness, line_type, 2, shift ); - else - pts.push_back(pt2); - pt1 = pt2; - } - if( thickness < 0 ) - cv::CollectPolyEdges( img, &pts[0], (int)pts.size(), - edges, ext_buf, line_type, 0, cv::Point() ); - } - } - - if( thickness < 0 ) - cv::FillEdgeCollection( img, edges, ext_buf ); - - if( h_next && contour0 ) - contour0->h_next = h_next; -} - -CV_IMPL int -cvClipLine( CvSize size, CvPoint* pt1, CvPoint* pt2 ) -{ - CV_Assert( pt1 && pt2 ); - return cv::clipLine( size, *(cv::Point*)pt1, *(cv::Point*)pt2 ); -} - - -CV_IMPL int -cvEllipse2Poly( CvPoint center, CvSize axes, int angle, - int arc_start, int arc_end, CvPoint* _pts, int delta ) -{ - cv::vector pts; - cv::ellipse2Poly( center, axes, angle, arc_start, arc_end, delta, pts ); - memcpy( _pts, &pts[0], pts.size()*sizeof(_pts[0]) ); - return (int)pts.size(); -} - -CV_IMPL CvScalar -cvColorToScalar( double packed_color, int type ) -{ - CvScalar scalar; - - if( CV_MAT_DEPTH( type ) == CV_8U ) - { - int icolor = cvRound( packed_color ); - if( CV_MAT_CN( type ) > 1 ) - { - scalar.val[0] = icolor & 255; - scalar.val[1] = (icolor >> 8) & 255; - scalar.val[2] = (icolor >> 16) & 255; - scalar.val[3] = (icolor >> 24) & 255; - } - else - { - scalar.val[0] = CV_CAST_8U( icolor ); - scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; - } - } - else if( CV_MAT_DEPTH( type ) == CV_8S ) - { - int icolor = cvRound( packed_color ); - if( CV_MAT_CN( type ) > 1 ) - { - scalar.val[0] = (char)icolor; - scalar.val[1] = (char)(icolor >> 8); - scalar.val[2] = (char)(icolor >> 16); - scalar.val[3] = (char)(icolor >> 24); - } - else - { - scalar.val[0] = CV_CAST_8S( icolor ); - scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; - } - } - else - { - int cn = CV_MAT_CN( type ); - switch( cn ) - { - case 1: - scalar.val[0] = packed_color; - scalar.val[1] = scalar.val[2] = scalar.val[3] = 0; - break; - case 2: - scalar.val[0] = scalar.val[1] = packed_color; - scalar.val[2] = scalar.val[3] = 0; - break; - case 3: - scalar.val[0] = scalar.val[1] = scalar.val[2] = packed_color; - scalar.val[3] = 0; - break; - default: - scalar.val[0] = scalar.val[1] = - scalar.val[2] = scalar.val[3] = packed_color; - break; - } - } - - return scalar; -} - -CV_IMPL int -cvInitLineIterator( const CvArr* img, CvPoint pt1, CvPoint pt2, - CvLineIterator* iterator, int connectivity, - int left_to_right ) -{ - CV_Assert( iterator != 0 ); - cv::LineIterator li(cv::cvarrToMat(img), pt1, pt2, connectivity, left_to_right!=0); - - iterator->err = li.err; - iterator->minus_delta = li.minusDelta; - iterator->plus_delta = li.plusDelta; - iterator->minus_step = li.minusStep; - iterator->plus_step = li.plusStep; - iterator->ptr = li.ptr; - - return li.count; -} - -CV_IMPL void -cvLine( CvArr* _img, CvPoint pt1, CvPoint pt2, CvScalar color, - int thickness, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::line( img, pt1, pt2, color, thickness, line_type, shift ); -} - -CV_IMPL void -cvRectangle( CvArr* _img, CvPoint pt1, CvPoint pt2, - CvScalar color, int thickness, - int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::rectangle( img, pt1, pt2, color, thickness, line_type, shift ); -} - -CV_IMPL void -cvRectangleR( CvArr* _img, CvRect rec, - CvScalar color, int thickness, - int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::rectangle( img, rec, color, thickness, line_type, shift ); -} - -CV_IMPL void -cvCircle( CvArr* _img, CvPoint center, int radius, - CvScalar color, int thickness, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::circle( img, center, radius, color, thickness, line_type, shift ); -} - -CV_IMPL void -cvEllipse( CvArr* _img, CvPoint center, CvSize axes, - double angle, double start_angle, double end_angle, - CvScalar color, int thickness, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::ellipse( img, center, axes, angle, start_angle, end_angle, - color, thickness, line_type, shift ); -} - -CV_IMPL void -cvFillConvexPoly( CvArr* _img, const CvPoint *pts, int npts, - CvScalar color, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - cv::fillConvexPoly( img, (const cv::Point*)pts, npts, - color, line_type, shift ); -} - -CV_IMPL void -cvFillPoly( CvArr* _img, CvPoint **pts, const int *npts, int ncontours, - CvScalar color, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - - cv::fillPoly( img, (const cv::Point**)pts, npts, ncontours, color, line_type, shift ); -} - -CV_IMPL void -cvPolyLine( CvArr* _img, CvPoint **pts, const int *npts, - int ncontours, int closed, CvScalar color, - int thickness, int line_type, int shift ) -{ - cv::Mat img = cv::cvarrToMat(_img); - - cv::polylines( img, (const cv::Point**)pts, npts, ncontours, - closed != 0, color, thickness, line_type, shift ); -} - -CV_IMPL void -cvPutText( CvArr* _img, const char *text, CvPoint org, const CvFont *_font, CvScalar color ) -{ - cv::Mat img = cv::cvarrToMat(_img); - CV_Assert( text != 0 && _font != 0); - cv::putText( img, text, org, _font->font_face, (_font->hscale+_font->vscale)*0.5, - color, _font->thickness, _font->line_type, - CV_IS_IMAGE(_img) && ((IplImage*)_img)->origin != 0 ); -} - - -CV_IMPL void -cvInitFont( CvFont *font, int font_face, double hscale, double vscale, - double shear, int thickness, int line_type ) -{ - CV_Assert( font != 0 && hscale > 0 && vscale > 0 && thickness >= 0 ); - - font->ascii = cv::getFontData(font_face); - font->font_face = font_face; - font->hscale = (float)hscale; - font->vscale = (float)vscale; - font->thickness = thickness; - font->shear = (float)shear; - font->greek = font->cyrillic = 0; - font->line_type = line_type; -} - -CV_IMPL void -cvGetTextSize( const char *text, const CvFont *_font, CvSize *_size, int *_base_line ) -{ - CV_Assert(text != 0 && _font != 0); - cv::Size size = cv::getTextSize( text, _font->font_face, (_font->hscale + _font->vscale)*0.5, - _font->thickness, _base_line ); - if( _size ) - *_size = size; -} - -/* End of file. */ diff --git a/modules/core/src/dxt.cpp b/modules/core/src/dxt.cpp deleted file mode 100644 index 033bf45..0000000 --- a/modules/core/src/dxt.cpp +++ /dev/null @@ -1,2674 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -// On Win64 optimized versions of DFT and DCT fail the tests (fixed in VS2010) -#if defined _MSC_VER && !defined CV_ICC && defined _M_X64 && _MSC_VER < 1600 -# pragma optimize("", off) -# pragma warning(disable: 4748) -#endif - -#if defined HAVE_IPP && IPP_VERSION_MAJOR*100 + IPP_VERSION_MINOR >= 701 -#define USE_IPP_DFT 1 -#else -#undef USE_IPP_DFT -#endif - - -/****************************************************************************************\ - Discrete Fourier Transform -\****************************************************************************************/ - -#define CV_MAX_LOCAL_DFT_SIZE (1 << 15) - -static unsigned char bitrevTab[] = -{ - 0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0, - 0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98,0x58,0xd8,0x38,0xb8,0x78,0xf8, - 0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94,0x54,0xd4,0x34,0xb4,0x74,0xf4, - 0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc, - 0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0xd2,0x32,0xb2,0x72,0xf2, - 0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a,0x5a,0xda,0x3a,0xba,0x7a,0xfa, - 0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0xd6,0x36,0xb6,0x76,0xf6, - 0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e,0x5e,0xde,0x3e,0xbe,0x7e,0xfe, - 0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1, - 0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0xd9,0x39,0xb9,0x79,0xf9, - 0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0xb5,0x75,0xf5, - 0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0xdd,0x3d,0xbd,0x7d,0xfd, - 0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93,0x53,0xd3,0x33,0xb3,0x73,0xf3, - 0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b,0x5b,0xdb,0x3b,0xbb,0x7b,0xfb, - 0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97,0x57,0xd7,0x37,0xb7,0x77,0xf7, - 0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f,0x5f,0xdf,0x3f,0xbf,0x7f,0xff -}; - -static const double DFTTab[][2] = -{ -{ 1.00000000000000000, 0.00000000000000000 }, -{-1.00000000000000000, 0.00000000000000000 }, -{ 0.00000000000000000, 1.00000000000000000 }, -{ 0.70710678118654757, 0.70710678118654746 }, -{ 0.92387953251128674, 0.38268343236508978 }, -{ 0.98078528040323043, 0.19509032201612825 }, -{ 0.99518472667219693, 0.09801714032956060 }, -{ 0.99879545620517241, 0.04906767432741802 }, -{ 0.99969881869620425, 0.02454122852291229 }, -{ 0.99992470183914450, 0.01227153828571993 }, -{ 0.99998117528260111, 0.00613588464915448 }, -{ 0.99999529380957619, 0.00306795676296598 }, -{ 0.99999882345170188, 0.00153398018628477 }, -{ 0.99999970586288223, 0.00076699031874270 }, -{ 0.99999992646571789, 0.00038349518757140 }, -{ 0.99999998161642933, 0.00019174759731070 }, -{ 0.99999999540410733, 0.00009587379909598 }, -{ 0.99999999885102686, 0.00004793689960307 }, -{ 0.99999999971275666, 0.00002396844980842 }, -{ 0.99999999992818922, 0.00001198422490507 }, -{ 0.99999999998204725, 0.00000599211245264 }, -{ 0.99999999999551181, 0.00000299605622633 }, -{ 0.99999999999887801, 0.00000149802811317 }, -{ 0.99999999999971945, 0.00000074901405658 }, -{ 0.99999999999992983, 0.00000037450702829 }, -{ 0.99999999999998246, 0.00000018725351415 }, -{ 0.99999999999999567, 0.00000009362675707 }, -{ 0.99999999999999889, 0.00000004681337854 }, -{ 0.99999999999999978, 0.00000002340668927 }, -{ 0.99999999999999989, 0.00000001170334463 }, -{ 1.00000000000000000, 0.00000000585167232 }, -{ 1.00000000000000000, 0.00000000292583616 } -}; - -#define BitRev(i,shift) \ - ((int)((((unsigned)bitrevTab[(i)&255] << 24)+ \ - ((unsigned)bitrevTab[((i)>> 8)&255] << 16)+ \ - ((unsigned)bitrevTab[((i)>>16)&255] << 8)+ \ - ((unsigned)bitrevTab[((i)>>24)])) >> (shift))) - -static int -DFTFactorize( int n, int* factors ) -{ - int nf = 0, f, i, j; - - if( n <= 5 ) - { - factors[0] = n; - return 1; - } - - f = (((n - 1)^n)+1) >> 1; - if( f > 1 ) - { - factors[nf++] = f; - n = f == n ? 1 : n/f; - } - - for( f = 3; n > 1; ) - { - int d = n/f; - if( d*f == n ) - { - factors[nf++] = f; - n = d; - } - else - { - f += 2; - if( f*f > n ) - break; - } - } - - if( n > 1 ) - factors[nf++] = n; - - f = (factors[0] & 1) == 0; - for( i = f; i < (nf+f)/2; i++ ) - CV_SWAP( factors[i], factors[nf-i-1+f], j ); - - return nf; -} - -static void -DFTInit( int n0, int nf, int* factors, int* itab, int elem_size, void* _wave, int inv_itab ) -{ - int digits[34], radix[34]; - int n = factors[0], m = 0; - int* itab0 = itab; - int i, j, k; - Complex w, w1; - double t; - - if( n0 <= 5 ) - { - itab[0] = 0; - itab[n0-1] = n0-1; - - if( n0 != 4 ) - { - for( i = 1; i < n0-1; i++ ) - itab[i] = i; - } - else - { - itab[1] = 2; - itab[2] = 1; - } - if( n0 == 5 ) - { - if( elem_size == sizeof(Complex) ) - ((Complex*)_wave)[0] = Complex(1.,0.); - else - ((Complex*)_wave)[0] = Complex(1.f,0.f); - } - if( n0 != 4 ) - return; - m = 2; - } - else - { - // radix[] is initialized from index 'nf' down to zero - assert (nf < 34); - radix[nf] = 1; - digits[nf] = 0; - for( i = 0; i < nf; i++ ) - { - digits[i] = 0; - radix[nf-i-1] = radix[nf-i]*factors[nf-i-1]; - } - - if( inv_itab && factors[0] != factors[nf-1] ) - itab = (int*)_wave; - - if( (n & 1) == 0 ) - { - int a = radix[1], na2 = n*a>>1, na4 = na2 >> 1; - for( m = 0; (unsigned)(1 << m) < (unsigned)n; m++ ) - ; - if( n <= 2 ) - { - itab[0] = 0; - itab[1] = na2; - } - else if( n <= 256 ) - { - int shift = 10 - m; - for( i = 0; i <= n - 4; i += 4 ) - { - j = (bitrevTab[i>>2]>>shift)*a; - itab[i] = j; - itab[i+1] = j + na2; - itab[i+2] = j + na4; - itab[i+3] = j + na2 + na4; - } - } - else - { - int shift = 34 - m; - for( i = 0; i < n; i += 4 ) - { - int i4 = i >> 2; - j = BitRev(i4,shift)*a; - itab[i] = j; - itab[i+1] = j + na2; - itab[i+2] = j + na4; - itab[i+3] = j + na2 + na4; - } - } - - digits[1]++; - - if( nf >= 2 ) - { - for( i = n, j = radix[2]; i < n0; ) - { - for( k = 0; k < n; k++ ) - itab[i+k] = itab[k] + j; - if( (i += n) >= n0 ) - break; - j += radix[2]; - for( k = 1; ++digits[k] >= factors[k]; k++ ) - { - digits[k] = 0; - j += radix[k+2] - radix[k]; - } - } - } - } - else - { - for( i = 0, j = 0;; ) - { - itab[i] = j; - if( ++i >= n0 ) - break; - j += radix[1]; - for( k = 0; ++digits[k] >= factors[k]; k++ ) - { - digits[k] = 0; - j += radix[k+2] - radix[k]; - } - } - } - - if( itab != itab0 ) - { - itab0[0] = 0; - for( i = n0 & 1; i < n0; i += 2 ) - { - int k0 = itab[i]; - int k1 = itab[i+1]; - itab0[k0] = i; - itab0[k1] = i+1; - } - } - } - - if( (n0 & (n0-1)) == 0 ) - { - w.re = w1.re = DFTTab[m][0]; - w.im = w1.im = -DFTTab[m][1]; - } - else - { - t = -CV_PI*2/n0; - w.im = w1.im = sin(t); - w.re = w1.re = std::sqrt(1. - w1.im*w1.im); - } - n = (n0+1)/2; - - if( elem_size == sizeof(Complex) ) - { - Complex* wave = (Complex*)_wave; - - wave[0].re = 1.; - wave[0].im = 0.; - - if( (n0 & 1) == 0 ) - { - wave[n].re = -1.; - wave[n].im = 0; - } - - for( i = 1; i < n; i++ ) - { - wave[i] = w; - wave[n0-i].re = w.re; - wave[n0-i].im = -w.im; - - t = w.re*w1.re - w.im*w1.im; - w.im = w.re*w1.im + w.im*w1.re; - w.re = t; - } - } - else - { - Complex* wave = (Complex*)_wave; - assert( elem_size == sizeof(Complex) ); - - wave[0].re = 1.f; - wave[0].im = 0.f; - - if( (n0 & 1) == 0 ) - { - wave[n].re = -1.f; - wave[n].im = 0.f; - } - - for( i = 1; i < n; i++ ) - { - wave[i].re = (float)w.re; - wave[i].im = (float)w.im; - wave[n0-i].re = (float)w.re; - wave[n0-i].im = (float)-w.im; - - t = w.re*w1.re - w.im*w1.im; - w.im = w.re*w1.im + w.im*w1.re; - w.re = t; - } - } -} - -template struct DFT_VecR4 -{ - int operator()(Complex*, int, int, int&, const Complex*) const { return 1; } -}; - -#if CV_SSE3 - -// optimized radix-4 transform -template<> struct DFT_VecR4 -{ - int operator()(Complex* dst, int N, int n0, int& _dw0, const Complex* wave) const - { - int n = 1, i, j, nx, dw, dw0 = _dw0; - __m128 z = _mm_setzero_ps(), x02=z, x13=z, w01=z, w23=z, y01, y23, t0, t1; - Cv32suf t; t.i = 0x80000000; - __m128 neg0_mask = _mm_load_ss(&t.f); - __m128 neg3_mask = _mm_shuffle_ps(neg0_mask, neg0_mask, _MM_SHUFFLE(0,1,2,3)); - - for( ; n*4 <= N; ) - { - nx = n; - n *= 4; - dw0 /= 4; - - for( i = 0; i < n0; i += n ) - { - Complexf *v0, *v1; - - v0 = dst + i; - v1 = v0 + nx*2; - - x02 = _mm_loadl_pi(x02, (const __m64*)&v0[0]); - x13 = _mm_loadl_pi(x13, (const __m64*)&v0[nx]); - x02 = _mm_loadh_pi(x02, (const __m64*)&v1[0]); - x13 = _mm_loadh_pi(x13, (const __m64*)&v1[nx]); - - y01 = _mm_add_ps(x02, x13); - y23 = _mm_sub_ps(x02, x13); - t1 = _mm_xor_ps(_mm_shuffle_ps(y01, y23, _MM_SHUFFLE(2,3,3,2)), neg3_mask); - t0 = _mm_movelh_ps(y01, y23); - y01 = _mm_add_ps(t0, t1); - y23 = _mm_sub_ps(t0, t1); - - _mm_storel_pi((__m64*)&v0[0], y01); - _mm_storeh_pi((__m64*)&v0[nx], y01); - _mm_storel_pi((__m64*)&v1[0], y23); - _mm_storeh_pi((__m64*)&v1[nx], y23); - - for( j = 1, dw = dw0; j < nx; j++, dw += dw0 ) - { - v0 = dst + i + j; - v1 = v0 + nx*2; - - x13 = _mm_loadl_pi(x13, (const __m64*)&v0[nx]); - w23 = _mm_loadl_pi(w23, (const __m64*)&wave[dw*2]); - x13 = _mm_loadh_pi(x13, (const __m64*)&v1[nx]); // x1, x3 = r1 i1 r3 i3 - w23 = _mm_loadh_pi(w23, (const __m64*)&wave[dw*3]); // w2, w3 = wr2 wi2 wr3 wi3 - - t0 = _mm_mul_ps(_mm_moveldup_ps(x13), w23); - t1 = _mm_mul_ps(_mm_movehdup_ps(x13), _mm_shuffle_ps(w23, w23, _MM_SHUFFLE(2,3,0,1))); - x13 = _mm_addsub_ps(t0, t1); - // re(x1*w2), im(x1*w2), re(x3*w3), im(x3*w3) - x02 = _mm_loadl_pi(x02, (const __m64*)&v1[0]); // x2 = r2 i2 - w01 = _mm_loadl_pi(w01, (const __m64*)&wave[dw]); // w1 = wr1 wi1 - x02 = _mm_shuffle_ps(x02, x02, _MM_SHUFFLE(0,0,1,1)); - w01 = _mm_shuffle_ps(w01, w01, _MM_SHUFFLE(1,0,0,1)); - x02 = _mm_mul_ps(x02, w01); - x02 = _mm_addsub_ps(x02, _mm_movelh_ps(x02, x02)); - // re(x0) im(x0) re(x2*w1), im(x2*w1) - x02 = _mm_loadl_pi(x02, (const __m64*)&v0[0]); - - y01 = _mm_add_ps(x02, x13); - y23 = _mm_sub_ps(x02, x13); - t1 = _mm_xor_ps(_mm_shuffle_ps(y01, y23, _MM_SHUFFLE(2,3,3,2)), neg3_mask); - t0 = _mm_movelh_ps(y01, y23); - y01 = _mm_add_ps(t0, t1); - y23 = _mm_sub_ps(t0, t1); - - _mm_storel_pi((__m64*)&v0[0], y01); - _mm_storeh_pi((__m64*)&v0[nx], y01); - _mm_storel_pi((__m64*)&v1[0], y23); - _mm_storeh_pi((__m64*)&v1[nx], y23); - } - } - } - - _dw0 = dw0; - return n; - } -}; - -#endif - -#ifdef USE_IPP_DFT -static void ippsDFTFwd_CToC( const Complex* src, Complex* dst, - const void* spec, uchar* buf) -{ - ippsDFTFwd_CToC_32fc( (const Ipp32fc*)src, (Ipp32fc*)dst, - (const IppsDFTSpec_C_32fc*)spec, buf); -} - -static void ippsDFTFwd_CToC( const Complex* src, Complex* dst, - const void* spec, uchar* buf) -{ - ippsDFTFwd_CToC_64fc( (const Ipp64fc*)src, (Ipp64fc*)dst, - (const IppsDFTSpec_C_64fc*)spec, buf); -} - -static void ippsDFTInv_CToC( const Complex* src, Complex* dst, - const void* spec, uchar* buf) -{ - ippsDFTInv_CToC_32fc( (const Ipp32fc*)src, (Ipp32fc*)dst, - (const IppsDFTSpec_C_32fc*)spec, buf); -} - -static void ippsDFTInv_CToC( const Complex* src, Complex* dst, - const void* spec, uchar* buf) -{ - ippsDFTInv_CToC_64fc( (const Ipp64fc*)src, (Ipp64fc*)dst, - (const IppsDFTSpec_C_64fc*)spec, buf); -} - -static void ippsDFTFwd_RToPack( const float* src, float* dst, - const void* spec, uchar* buf) -{ - ippsDFTFwd_RToPack_32f( src, dst, (const IppsDFTSpec_R_32f*)spec, buf); -} - -static void ippsDFTFwd_RToPack( const double* src, double* dst, - const void* spec, uchar* buf) -{ - ippsDFTFwd_RToPack_64f( src, dst, (const IppsDFTSpec_R_64f*)spec, buf); -} - -static void ippsDFTInv_PackToR( const float* src, float* dst, - const void* spec, uchar* buf) -{ - ippsDFTInv_PackToR_32f( src, dst, (const IppsDFTSpec_R_32f*)spec, buf); -} - -static void ippsDFTInv_PackToR( const double* src, double* dst, - const void* spec, uchar* buf) -{ - ippsDFTInv_PackToR_64f( src, dst, (const IppsDFTSpec_R_64f*)spec, buf); -} -#endif - -enum { DFT_NO_PERMUTE=256, DFT_COMPLEX_INPUT_OR_OUTPUT=512 }; - -// mixed-radix complex discrete Fourier transform: double-precision version -template static void -DFT( const Complex* src, Complex* dst, int n, - int nf, const int* factors, const int* itab, - const Complex* wave, int tab_size, - const void* -#ifdef USE_IPP_DFT - spec -#endif - , Complex* buf, - int flags, double _scale ) -{ - static const T sin_120 = (T)0.86602540378443864676372317075294; - static const T fft5_2 = (T)0.559016994374947424102293417182819; - static const T fft5_3 = (T)-0.951056516295153572116439333379382; - static const T fft5_4 = (T)-1.538841768587626701285145288018455; - static const T fft5_5 = (T)0.363271264002680442947733378740309; - - int n0 = n, f_idx, nx; - int inv = flags & DFT_INVERSE; - int dw0 = tab_size, dw; - int i, j, k; - Complex t; - T scale = (T)_scale; - int tab_step; - -#ifdef USE_IPP_DFT - if( spec ) - { - if( !inv ) - ippsDFTFwd_CToC( src, dst, spec, (uchar*)buf ); - else - ippsDFTInv_CToC( src, dst, spec, (uchar*)buf ); - return; - } -#endif - - tab_step = tab_size == n ? 1 : tab_size == n*2 ? 2 : tab_size/n; - - // 0. shuffle data - if( dst != src ) - { - assert( (flags & DFT_NO_PERMUTE) == 0 ); - if( !inv ) - { - for( i = 0; i <= n - 2; i += 2, itab += 2*tab_step ) - { - int k0 = itab[0], k1 = itab[tab_step]; - assert( (unsigned)k0 < (unsigned)n && (unsigned)k1 < (unsigned)n ); - dst[i] = src[k0]; dst[i+1] = src[k1]; - } - - if( i < n ) - dst[n-1] = src[n-1]; - } - else - { - for( i = 0; i <= n - 2; i += 2, itab += 2*tab_step ) - { - int k0 = itab[0], k1 = itab[tab_step]; - assert( (unsigned)k0 < (unsigned)n && (unsigned)k1 < (unsigned)n ); - t.re = src[k0].re; t.im = -src[k0].im; - dst[i] = t; - t.re = src[k1].re; t.im = -src[k1].im; - dst[i+1] = t; - } - - if( i < n ) - { - t.re = src[n-1].re; t.im = -src[n-1].im; - dst[i] = t; - } - } - } - else - { - if( (flags & DFT_NO_PERMUTE) == 0 ) - { - CV_Assert( factors[0] == factors[nf-1] ); - if( nf == 1 ) - { - if( (n & 3) == 0 ) - { - int n2 = n/2; - Complex* dsth = dst + n2; - - for( i = 0; i < n2; i += 2, itab += tab_step*2 ) - { - j = itab[0]; - assert( (unsigned)j < (unsigned)n2 ); - - CV_SWAP(dst[i+1], dsth[j], t); - if( j > i ) - { - CV_SWAP(dst[i], dst[j], t); - CV_SWAP(dsth[i+1], dsth[j+1], t); - } - } - } - // else do nothing - } - else - { - for( i = 0; i < n; i++, itab += tab_step ) - { - j = itab[0]; - assert( (unsigned)j < (unsigned)n ); - if( j > i ) - CV_SWAP(dst[i], dst[j], t); - } - } - } - - if( inv ) - { - for( i = 0; i <= n - 2; i += 2 ) - { - T t0 = -dst[i].im; - T t1 = -dst[i+1].im; - dst[i].im = t0; dst[i+1].im = t1; - } - - if( i < n ) - dst[n-1].im = -dst[n-1].im; - } - } - - n = 1; - // 1. power-2 transforms - if( (factors[0] & 1) == 0 ) - { - if( factors[0] >= 4 && checkHardwareSupport(CV_CPU_SSE3)) - { - DFT_VecR4 vr4; - n = vr4(dst, factors[0], n0, dw0, wave); - } - - // radix-4 transform - for( ; n*4 <= factors[0]; ) - { - nx = n; - n *= 4; - dw0 /= 4; - - for( i = 0; i < n0; i += n ) - { - Complex *v0, *v1; - T r0, i0, r1, i1, r2, i2, r3, i3, r4, i4; - - v0 = dst + i; - v1 = v0 + nx*2; - - r0 = v1[0].re; i0 = v1[0].im; - r4 = v1[nx].re; i4 = v1[nx].im; - - r1 = r0 + r4; i1 = i0 + i4; - r3 = i0 - i4; i3 = r4 - r0; - - r2 = v0[0].re; i2 = v0[0].im; - r4 = v0[nx].re; i4 = v0[nx].im; - - r0 = r2 + r4; i0 = i2 + i4; - r2 -= r4; i2 -= i4; - - v0[0].re = r0 + r1; v0[0].im = i0 + i1; - v1[0].re = r0 - r1; v1[0].im = i0 - i1; - v0[nx].re = r2 + r3; v0[nx].im = i2 + i3; - v1[nx].re = r2 - r3; v1[nx].im = i2 - i3; - - for( j = 1, dw = dw0; j < nx; j++, dw += dw0 ) - { - v0 = dst + i + j; - v1 = v0 + nx*2; - - r2 = v0[nx].re*wave[dw*2].re - v0[nx].im*wave[dw*2].im; - i2 = v0[nx].re*wave[dw*2].im + v0[nx].im*wave[dw*2].re; - r0 = v1[0].re*wave[dw].im + v1[0].im*wave[dw].re; - i0 = v1[0].re*wave[dw].re - v1[0].im*wave[dw].im; - r3 = v1[nx].re*wave[dw*3].im + v1[nx].im*wave[dw*3].re; - i3 = v1[nx].re*wave[dw*3].re - v1[nx].im*wave[dw*3].im; - - r1 = i0 + i3; i1 = r0 + r3; - r3 = r0 - r3; i3 = i3 - i0; - r4 = v0[0].re; i4 = v0[0].im; - - r0 = r4 + r2; i0 = i4 + i2; - r2 = r4 - r2; i2 = i4 - i2; - - v0[0].re = r0 + r1; v0[0].im = i0 + i1; - v1[0].re = r0 - r1; v1[0].im = i0 - i1; - v0[nx].re = r2 + r3; v0[nx].im = i2 + i3; - v1[nx].re = r2 - r3; v1[nx].im = i2 - i3; - } - } - } - - for( ; n < factors[0]; ) - { - // do the remaining radix-2 transform - nx = n; - n *= 2; - dw0 /= 2; - - for( i = 0; i < n0; i += n ) - { - Complex* v = dst + i; - T r0 = v[0].re + v[nx].re; - T i0 = v[0].im + v[nx].im; - T r1 = v[0].re - v[nx].re; - T i1 = v[0].im - v[nx].im; - v[0].re = r0; v[0].im = i0; - v[nx].re = r1; v[nx].im = i1; - - for( j = 1, dw = dw0; j < nx; j++, dw += dw0 ) - { - v = dst + i + j; - r1 = v[nx].re*wave[dw].re - v[nx].im*wave[dw].im; - i1 = v[nx].im*wave[dw].re + v[nx].re*wave[dw].im; - r0 = v[0].re; i0 = v[0].im; - - v[0].re = r0 + r1; v[0].im = i0 + i1; - v[nx].re = r0 - r1; v[nx].im = i0 - i1; - } - } - } - } - - // 2. all the other transforms - for( f_idx = (factors[0]&1) ? 0 : 1; f_idx < nf; f_idx++ ) - { - int factor = factors[f_idx]; - nx = n; - n *= factor; - dw0 /= factor; - - if( factor == 3 ) - { - // radix-3 - for( i = 0; i < n0; i += n ) - { - Complex* v = dst + i; - - T r1 = v[nx].re + v[nx*2].re; - T i1 = v[nx].im + v[nx*2].im; - T r0 = v[0].re; - T i0 = v[0].im; - T r2 = sin_120*(v[nx].im - v[nx*2].im); - T i2 = sin_120*(v[nx*2].re - v[nx].re); - v[0].re = r0 + r1; v[0].im = i0 + i1; - r0 -= (T)0.5*r1; i0 -= (T)0.5*i1; - v[nx].re = r0 + r2; v[nx].im = i0 + i2; - v[nx*2].re = r0 - r2; v[nx*2].im = i0 - i2; - - for( j = 1, dw = dw0; j < nx; j++, dw += dw0 ) - { - v = dst + i + j; - r0 = v[nx].re*wave[dw].re - v[nx].im*wave[dw].im; - i0 = v[nx].re*wave[dw].im + v[nx].im*wave[dw].re; - i2 = v[nx*2].re*wave[dw*2].re - v[nx*2].im*wave[dw*2].im; - r2 = v[nx*2].re*wave[dw*2].im + v[nx*2].im*wave[dw*2].re; - r1 = r0 + i2; i1 = i0 + r2; - - r2 = sin_120*(i0 - r2); i2 = sin_120*(i2 - r0); - r0 = v[0].re; i0 = v[0].im; - v[0].re = r0 + r1; v[0].im = i0 + i1; - r0 -= (T)0.5*r1; i0 -= (T)0.5*i1; - v[nx].re = r0 + r2; v[nx].im = i0 + i2; - v[nx*2].re = r0 - r2; v[nx*2].im = i0 - i2; - } - } - } - else if( factor == 5 ) - { - // radix-5 - for( i = 0; i < n0; i += n ) - { - for( j = 0, dw = 0; j < nx; j++, dw += dw0 ) - { - Complex* v0 = dst + i + j; - Complex* v1 = v0 + nx*2; - Complex* v2 = v1 + nx*2; - - T r0, i0, r1, i1, r2, i2, r3, i3, r4, i4, r5, i5; - - r3 = v0[nx].re*wave[dw].re - v0[nx].im*wave[dw].im; - i3 = v0[nx].re*wave[dw].im + v0[nx].im*wave[dw].re; - r2 = v2[0].re*wave[dw*4].re - v2[0].im*wave[dw*4].im; - i2 = v2[0].re*wave[dw*4].im + v2[0].im*wave[dw*4].re; - - r1 = r3 + r2; i1 = i3 + i2; - r3 -= r2; i3 -= i2; - - r4 = v1[nx].re*wave[dw*3].re - v1[nx].im*wave[dw*3].im; - i4 = v1[nx].re*wave[dw*3].im + v1[nx].im*wave[dw*3].re; - r0 = v1[0].re*wave[dw*2].re - v1[0].im*wave[dw*2].im; - i0 = v1[0].re*wave[dw*2].im + v1[0].im*wave[dw*2].re; - - r2 = r4 + r0; i2 = i4 + i0; - r4 -= r0; i4 -= i0; - - r0 = v0[0].re; i0 = v0[0].im; - r5 = r1 + r2; i5 = i1 + i2; - - v0[0].re = r0 + r5; v0[0].im = i0 + i5; - - r0 -= (T)0.25*r5; i0 -= (T)0.25*i5; - r1 = fft5_2*(r1 - r2); i1 = fft5_2*(i1 - i2); - r2 = -fft5_3*(i3 + i4); i2 = fft5_3*(r3 + r4); - - i3 *= -fft5_5; r3 *= fft5_5; - i4 *= -fft5_4; r4 *= fft5_4; - - r5 = r2 + i3; i5 = i2 + r3; - r2 -= i4; i2 -= r4; - - r3 = r0 + r1; i3 = i0 + i1; - r0 -= r1; i0 -= i1; - - v0[nx].re = r3 + r2; v0[nx].im = i3 + i2; - v2[0].re = r3 - r2; v2[0].im = i3 - i2; - - v1[0].re = r0 + r5; v1[0].im = i0 + i5; - v1[nx].re = r0 - r5; v1[nx].im = i0 - i5; - } - } - } - else - { - // radix-"factor" - an odd number - int p, q, factor2 = (factor - 1)/2; - int d, dd, dw_f = tab_size/factor; - Complex* a = buf; - Complex* b = buf + factor2; - - for( i = 0; i < n0; i += n ) - { - for( j = 0, dw = 0; j < nx; j++, dw += dw0 ) - { - Complex* v = dst + i + j; - Complex v_0 = v[0]; - Complex vn_0 = v_0; - - if( j == 0 ) - { - for( p = 1, k = nx; p <= factor2; p++, k += nx ) - { - T r0 = v[k].re + v[n-k].re; - T i0 = v[k].im - v[n-k].im; - T r1 = v[k].re - v[n-k].re; - T i1 = v[k].im + v[n-k].im; - - vn_0.re += r0; vn_0.im += i1; - a[p-1].re = r0; a[p-1].im = i0; - b[p-1].re = r1; b[p-1].im = i1; - } - } - else - { - const Complex* wave_ = wave + dw*factor; - d = dw; - - for( p = 1, k = nx; p <= factor2; p++, k += nx, d += dw ) - { - T r2 = v[k].re*wave[d].re - v[k].im*wave[d].im; - T i2 = v[k].re*wave[d].im + v[k].im*wave[d].re; - - T r1 = v[n-k].re*wave_[-d].re - v[n-k].im*wave_[-d].im; - T i1 = v[n-k].re*wave_[-d].im + v[n-k].im*wave_[-d].re; - - T r0 = r2 + r1; - T i0 = i2 - i1; - r1 = r2 - r1; - i1 = i2 + i1; - - vn_0.re += r0; vn_0.im += i1; - a[p-1].re = r0; a[p-1].im = i0; - b[p-1].re = r1; b[p-1].im = i1; - } - } - - v[0] = vn_0; - - for( p = 1, k = nx; p <= factor2; p++, k += nx ) - { - Complex s0 = v_0, s1 = v_0; - d = dd = dw_f*p; - - for( q = 0; q < factor2; q++ ) - { - T r0 = wave[d].re * a[q].re; - T i0 = wave[d].im * a[q].im; - T r1 = wave[d].re * b[q].im; - T i1 = wave[d].im * b[q].re; - - s1.re += r0 + i0; s0.re += r0 - i0; - s1.im += r1 - i1; s0.im += r1 + i1; - - d += dd; - d -= -(d >= tab_size) & tab_size; - } - - v[k] = s0; - v[n-k] = s1; - } - } - } - } - } - - if( scale != 1 ) - { - T re_scale = scale, im_scale = scale; - if( inv ) - im_scale = -im_scale; - - for( i = 0; i < n0; i++ ) - { - T t0 = dst[i].re*re_scale; - T t1 = dst[i].im*im_scale; - dst[i].re = t0; - dst[i].im = t1; - } - } - else if( inv ) - { - for( i = 0; i <= n0 - 2; i += 2 ) - { - T t0 = -dst[i].im; - T t1 = -dst[i+1].im; - dst[i].im = t0; - dst[i+1].im = t1; - } - - if( i < n0 ) - dst[n0-1].im = -dst[n0-1].im; - } -} - - -/* FFT of real vector - output vector format: - re(0), re(1), im(1), ... , re(n/2-1), im((n+1)/2-1) [, re((n+1)/2)] OR ... - re(0), 0, re(1), im(1), ..., re(n/2-1), im((n+1)/2-1) [, re((n+1)/2), 0] */ -template static void -RealDFT( const T* src, T* dst, int n, int nf, int* factors, const int* itab, - const Complex* wave, int tab_size, const void* -#ifdef USE_IPP_DFT - spec -#endif - , - Complex* buf, int flags, double _scale ) -{ - int complex_output = (flags & DFT_COMPLEX_INPUT_OR_OUTPUT) != 0; - T scale = (T)_scale; - int j, n2 = n >> 1; - dst += complex_output; - -#ifdef USE_IPP_DFT - if( spec ) - { - ippsDFTFwd_RToPack( src, dst, spec, (uchar*)buf ); - if( complex_output ) - { - dst[-1] = dst[0]; - dst[0] = 0; - if( (n & 1) == 0 ) - dst[n] = 0; - } - return; - } -#endif - assert( tab_size == n ); - - if( n == 1 ) - { - dst[0] = src[0]*scale; - } - else if( n == 2 ) - { - T t = (src[0] + src[1])*scale; - dst[1] = (src[0] - src[1])*scale; - dst[0] = t; - } - else if( n & 1 ) - { - dst -= complex_output; - Complex* _dst = (Complex*)dst; - _dst[0].re = src[0]*scale; - _dst[0].im = 0; - for( j = 1; j < n; j += 2 ) - { - T t0 = src[itab[j]]*scale; - T t1 = src[itab[j+1]]*scale; - _dst[j].re = t0; - _dst[j].im = 0; - _dst[j+1].re = t1; - _dst[j+1].im = 0; - } - DFT( _dst, _dst, n, nf, factors, itab, wave, - tab_size, 0, buf, DFT_NO_PERMUTE, 1 ); - if( !complex_output ) - dst[1] = dst[0]; - } - else - { - T t0, t; - T h1_re, h1_im, h2_re, h2_im; - T scale2 = scale*(T)0.5; - factors[0] >>= 1; - - DFT( (Complex*)src, (Complex*)dst, n2, nf - (factors[0] == 1), - factors + (factors[0] == 1), - itab, wave, tab_size, 0, buf, 0, 1 ); - factors[0] <<= 1; - - t = dst[0] - dst[1]; - dst[0] = (dst[0] + dst[1])*scale; - dst[1] = t*scale; - - t0 = dst[n2]; - t = dst[n-1]; - dst[n-1] = dst[1]; - - for( j = 2, wave++; j < n2; j += 2, wave++ ) - { - /* calc odd */ - h2_re = scale2*(dst[j+1] + t); - h2_im = scale2*(dst[n-j] - dst[j]); - - /* calc even */ - h1_re = scale2*(dst[j] + dst[n-j]); - h1_im = scale2*(dst[j+1] - t); - - /* rotate */ - t = h2_re*wave->re - h2_im*wave->im; - h2_im = h2_re*wave->im + h2_im*wave->re; - h2_re = t; - t = dst[n-j-1]; - - dst[j-1] = h1_re + h2_re; - dst[n-j-1] = h1_re - h2_re; - dst[j] = h1_im + h2_im; - dst[n-j] = h2_im - h1_im; - } - - if( j <= n2 ) - { - dst[n2-1] = t0*scale; - dst[n2] = -t*scale; - } - } - - if( complex_output && (n & 1) == 0 ) - { - dst[-1] = dst[0]; - dst[0] = 0; - dst[n] = 0; - } -} - -/* Inverse FFT of complex conjugate-symmetric vector - input vector format: - re[0], re[1], im[1], ... , re[n/2-1], im[n/2-1], re[n/2] OR - re(0), 0, re(1), im(1), ..., re(n/2-1), im((n+1)/2-1) [, re((n+1)/2), 0] */ -template static void -CCSIDFT( const T* src, T* dst, int n, int nf, int* factors, const int* itab, - const Complex* wave, int tab_size, - const void* -#ifdef USE_IPP_DFT - spec -#endif - , Complex* buf, - int flags, double _scale ) -{ - int complex_input = (flags & DFT_COMPLEX_INPUT_OR_OUTPUT) != 0; - int j, k, n2 = (n+1) >> 1; - T scale = (T)_scale; - T save_s1 = 0.; - T t0, t1, t2, t3, t; - - assert( tab_size == n ); - - if( complex_input ) - { - assert( src != dst ); - save_s1 = src[1]; - ((T*)src)[1] = src[0]; - src++; - } -#ifdef USE_IPP_DFT - if( spec ) - { - ippsDFTInv_PackToR( src, dst, spec, (uchar*)buf ); - goto finalize; - } -#endif - if( n == 1 ) - { - dst[0] = (T)(src[0]*scale); - } - else if( n == 2 ) - { - t = (src[0] + src[1])*scale; - dst[1] = (src[0] - src[1])*scale; - dst[0] = t; - } - else if( n & 1 ) - { - Complex* _src = (Complex*)(src-1); - Complex* _dst = (Complex*)dst; - - _dst[0].re = src[0]; - _dst[0].im = 0; - for( j = 1; j < n2; j++ ) - { - int k0 = itab[j], k1 = itab[n-j]; - t0 = _src[j].re; t1 = _src[j].im; - _dst[k0].re = t0; _dst[k0].im = -t1; - _dst[k1].re = t0; _dst[k1].im = t1; - } - - DFT( _dst, _dst, n, nf, factors, itab, wave, - tab_size, 0, buf, DFT_NO_PERMUTE, 1. ); - dst[0] *= scale; - for( j = 1; j < n; j += 2 ) - { - t0 = dst[j*2]*scale; - t1 = dst[j*2+2]*scale; - dst[j] = t0; - dst[j+1] = t1; - } - } - else - { - int inplace = src == dst; - const Complex* w = wave; - - t = src[1]; - t0 = (src[0] + src[n-1]); - t1 = (src[n-1] - src[0]); - dst[0] = t0; - dst[1] = t1; - - for( j = 2, w++; j < n2; j += 2, w++ ) - { - T h1_re, h1_im, h2_re, h2_im; - - h1_re = (t + src[n-j-1]); - h1_im = (src[j] - src[n-j]); - - h2_re = (t - src[n-j-1]); - h2_im = (src[j] + src[n-j]); - - t = h2_re*w->re + h2_im*w->im; - h2_im = h2_im*w->re - h2_re*w->im; - h2_re = t; - - t = src[j+1]; - t0 = h1_re - h2_im; - t1 = -h1_im - h2_re; - t2 = h1_re + h2_im; - t3 = h1_im - h2_re; - - if( inplace ) - { - dst[j] = t0; - dst[j+1] = t1; - dst[n-j] = t2; - dst[n-j+1]= t3; - } - else - { - int j2 = j >> 1; - k = itab[j2]; - dst[k] = t0; - dst[k+1] = t1; - k = itab[n2-j2]; - dst[k] = t2; - dst[k+1]= t3; - } - } - - if( j <= n2 ) - { - t0 = t*2; - t1 = src[n2]*2; - - if( inplace ) - { - dst[n2] = t0; - dst[n2+1] = t1; - } - else - { - k = itab[n2]; - dst[k*2] = t0; - dst[k*2+1] = t1; - } - } - - factors[0] >>= 1; - DFT( (Complex*)dst, (Complex*)dst, n2, - nf - (factors[0] == 1), - factors + (factors[0] == 1), itab, - wave, tab_size, 0, buf, - inplace ? 0 : DFT_NO_PERMUTE, 1. ); - factors[0] <<= 1; - - for( j = 0; j < n; j += 2 ) - { - t0 = dst[j]*scale; - t1 = dst[j+1]*(-scale); - dst[j] = t0; - dst[j+1] = t1; - } - } - -#ifdef USE_IPP_DFT -finalize: -#endif - if( complex_input ) - ((T*)src)[0] = (T)save_s1; -} - -static void -CopyColumn( const uchar* _src, size_t src_step, - uchar* _dst, size_t dst_step, - int len, size_t elem_size ) -{ - int i, t0, t1; - const int* src = (const int*)_src; - int* dst = (int*)_dst; - src_step /= sizeof(src[0]); - dst_step /= sizeof(dst[0]); - - if( elem_size == sizeof(int) ) - { - for( i = 0; i < len; i++, src += src_step, dst += dst_step ) - dst[0] = src[0]; - } - else if( elem_size == sizeof(int)*2 ) - { - for( i = 0; i < len; i++, src += src_step, dst += dst_step ) - { - t0 = src[0]; t1 = src[1]; - dst[0] = t0; dst[1] = t1; - } - } - else if( elem_size == sizeof(int)*4 ) - { - for( i = 0; i < len; i++, src += src_step, dst += dst_step ) - { - t0 = src[0]; t1 = src[1]; - dst[0] = t0; dst[1] = t1; - t0 = src[2]; t1 = src[3]; - dst[2] = t0; dst[3] = t1; - } - } -} - - -static void -CopyFrom2Columns( const uchar* _src, size_t src_step, - uchar* _dst0, uchar* _dst1, - int len, size_t elem_size ) -{ - int i, t0, t1; - const int* src = (const int*)_src; - int* dst0 = (int*)_dst0; - int* dst1 = (int*)_dst1; - src_step /= sizeof(src[0]); - - if( elem_size == sizeof(int) ) - { - for( i = 0; i < len; i++, src += src_step ) - { - t0 = src[0]; t1 = src[1]; - dst0[i] = t0; dst1[i] = t1; - } - } - else if( elem_size == sizeof(int)*2 ) - { - for( i = 0; i < len*2; i += 2, src += src_step ) - { - t0 = src[0]; t1 = src[1]; - dst0[i] = t0; dst0[i+1] = t1; - t0 = src[2]; t1 = src[3]; - dst1[i] = t0; dst1[i+1] = t1; - } - } - else if( elem_size == sizeof(int)*4 ) - { - for( i = 0; i < len*4; i += 4, src += src_step ) - { - t0 = src[0]; t1 = src[1]; - dst0[i] = t0; dst0[i+1] = t1; - t0 = src[2]; t1 = src[3]; - dst0[i+2] = t0; dst0[i+3] = t1; - t0 = src[4]; t1 = src[5]; - dst1[i] = t0; dst1[i+1] = t1; - t0 = src[6]; t1 = src[7]; - dst1[i+2] = t0; dst1[i+3] = t1; - } - } -} - - -static void -CopyTo2Columns( const uchar* _src0, const uchar* _src1, - uchar* _dst, size_t dst_step, - int len, size_t elem_size ) -{ - int i, t0, t1; - const int* src0 = (const int*)_src0; - const int* src1 = (const int*)_src1; - int* dst = (int*)_dst; - dst_step /= sizeof(dst[0]); - - if( elem_size == sizeof(int) ) - { - for( i = 0; i < len; i++, dst += dst_step ) - { - t0 = src0[i]; t1 = src1[i]; - dst[0] = t0; dst[1] = t1; - } - } - else if( elem_size == sizeof(int)*2 ) - { - for( i = 0; i < len*2; i += 2, dst += dst_step ) - { - t0 = src0[i]; t1 = src0[i+1]; - dst[0] = t0; dst[1] = t1; - t0 = src1[i]; t1 = src1[i+1]; - dst[2] = t0; dst[3] = t1; - } - } - else if( elem_size == sizeof(int)*4 ) - { - for( i = 0; i < len*4; i += 4, dst += dst_step ) - { - t0 = src0[i]; t1 = src0[i+1]; - dst[0] = t0; dst[1] = t1; - t0 = src0[i+2]; t1 = src0[i+3]; - dst[2] = t0; dst[3] = t1; - t0 = src1[i]; t1 = src1[i+1]; - dst[4] = t0; dst[5] = t1; - t0 = src1[i+2]; t1 = src1[i+3]; - dst[6] = t0; dst[7] = t1; - } - } -} - - -static void -ExpandCCS( uchar* _ptr, int n, int elem_size ) -{ - int i; - if( elem_size == (int)sizeof(float) ) - { - float* p = (float*)_ptr; - for( i = 1; i < (n+1)/2; i++ ) - { - p[(n-i)*2] = p[i*2-1]; - p[(n-i)*2+1] = -p[i*2]; - } - if( (n & 1) == 0 ) - { - p[n] = p[n-1]; - p[n+1] = 0.f; - n--; - } - for( i = n-1; i > 0; i-- ) - p[i+1] = p[i]; - p[1] = 0.f; - } - else - { - double* p = (double*)_ptr; - for( i = 1; i < (n+1)/2; i++ ) - { - p[(n-i)*2] = p[i*2-1]; - p[(n-i)*2+1] = -p[i*2]; - } - if( (n & 1) == 0 ) - { - p[n] = p[n-1]; - p[n+1] = 0.f; - n--; - } - for( i = n-1; i > 0; i-- ) - p[i+1] = p[i]; - p[1] = 0.f; - } -} - - -typedef void (*DFTFunc)( - const void* src, void* dst, int n, int nf, int* factors, - const int* itab, const void* wave, int tab_size, - const void* spec, void* buf, int inv, double scale ); - -static void DFT_32f( const Complexf* src, Complexf* dst, int n, - int nf, const int* factors, const int* itab, - const Complexf* wave, int tab_size, - const void* spec, Complexf* buf, - int flags, double scale ) -{ - DFT(src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - -static void DFT_64f( const Complexd* src, Complexd* dst, int n, - int nf, const int* factors, const int* itab, - const Complexd* wave, int tab_size, - const void* spec, Complexd* buf, - int flags, double scale ) -{ - DFT(src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - - -static void RealDFT_32f( const float* src, float* dst, int n, int nf, int* factors, - const int* itab, const Complexf* wave, int tab_size, const void* spec, - Complexf* buf, int flags, double scale ) -{ - RealDFT( src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - -static void RealDFT_64f( const double* src, double* dst, int n, int nf, int* factors, - const int* itab, const Complexd* wave, int tab_size, const void* spec, - Complexd* buf, int flags, double scale ) -{ - RealDFT( src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - -static void CCSIDFT_32f( const float* src, float* dst, int n, int nf, int* factors, - const int* itab, const Complexf* wave, int tab_size, const void* spec, - Complexf* buf, int flags, double scale ) -{ - CCSIDFT( src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - -static void CCSIDFT_64f( const double* src, double* dst, int n, int nf, int* factors, - const int* itab, const Complexd* wave, int tab_size, const void* spec, - Complexd* buf, int flags, double scale ) -{ - CCSIDFT( src, dst, n, nf, factors, itab, wave, tab_size, spec, buf, flags, scale); -} - -} - -#ifdef USE_IPP_DFT -typedef IppStatus (CV_STDCALL* IppDFTGetSizeFunc)(int, int, IppHintAlgorithm, int*, int*, int*); -typedef IppStatus (CV_STDCALL* IppDFTInitFunc)(int, int, IppHintAlgorithm, void*, uchar*); -#endif - -void cv::dft( InputArray _src0, OutputArray _dst, int flags, int nonzero_rows ) -{ - static DFTFunc dft_tbl[6] = - { - (DFTFunc)DFT_32f, - (DFTFunc)RealDFT_32f, - (DFTFunc)CCSIDFT_32f, - (DFTFunc)DFT_64f, - (DFTFunc)RealDFT_64f, - (DFTFunc)CCSIDFT_64f - }; - - AutoBuffer buf; - void *spec = 0; - - Mat src0 = _src0.getMat(), src = src0; - int prev_len = 0, stage = 0; - bool inv = (flags & DFT_INVERSE) != 0; - int nf = 0, real_transform = src.channels() == 1 || (inv && (flags & DFT_REAL_OUTPUT)!=0); - int type = src.type(), depth = src.depth(); - int elem_size = (int)src.elemSize1(), complex_elem_size = elem_size*2; - int factors[34]; - bool inplace_transform = false; -#ifdef USE_IPP_DFT - AutoBuffer ippbuf; - int ipp_norm_flag = !(flags & DFT_SCALE) ? 8 : inv ? 2 : 1; -#endif - - CV_Assert( type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 ); - - if( !inv && src.channels() == 1 && (flags & DFT_COMPLEX_OUTPUT) ) - _dst.create( src.size(), CV_MAKETYPE(depth, 2) ); - else if( inv && src.channels() == 2 && (flags & DFT_REAL_OUTPUT) ) - _dst.create( src.size(), depth ); - else - _dst.create( src.size(), type ); - - Mat dst = _dst.getMat(); - - if( !real_transform ) - elem_size = complex_elem_size; - - if( src.cols == 1 && nonzero_rows > 0 ) - CV_Error( CV_StsNotImplemented, - "This mode (using nonzero_rows with a single-column matrix) breaks the function's logic, so it is prohibited.\n" - "For fast convolution/correlation use 2-column matrix or single-row matrix instead" ); - - // determine, which transform to do first - row-wise - // (stage 0) or column-wise (stage 1) transform - if( !(flags & DFT_ROWS) && src.rows > 1 && - ((src.cols == 1 && (!src.isContinuous() || !dst.isContinuous())) || - (src.cols > 1 && inv && real_transform)) ) - stage = 1; - - for(;;) - { - double scale = 1; - uchar* wave = 0; - int* itab = 0; - uchar* ptr; - int i, len, count, sz = 0; - int use_buf = 0, odd_real = 0; - DFTFunc dft_func; - - if( stage == 0 ) // row-wise transform - { - len = !inv ? src.cols : dst.cols; - count = src.rows; - if( len == 1 && !(flags & DFT_ROWS) ) - { - len = !inv ? src.rows : dst.rows; - count = 1; - } - odd_real = real_transform && (len & 1); - } - else - { - len = dst.rows; - count = !inv ? src0.cols : dst.cols; - sz = 2*len*complex_elem_size; - } - - spec = 0; -#ifdef USE_IPP_DFT - if( len*count >= 64 ) // use IPP DFT if available - { - int specsize=0, initsize=0, worksize=0; - IppDFTGetSizeFunc getSizeFunc = 0; - IppDFTInitFunc initFunc = 0; - - if( real_transform && stage == 0 ) - { - if( depth == CV_32F ) - { - getSizeFunc = ippsDFTGetSize_R_32f; - initFunc = (IppDFTInitFunc)ippsDFTInit_R_32f; - } - else - { - getSizeFunc = ippsDFTGetSize_R_64f; - initFunc = (IppDFTInitFunc)ippsDFTInit_R_64f; - } - } - else - { - if( depth == CV_32F ) - { - getSizeFunc = ippsDFTGetSize_C_32fc; - initFunc = (IppDFTInitFunc)ippsDFTInit_C_32fc; - } - else - { - getSizeFunc = ippsDFTGetSize_C_64fc; - initFunc = (IppDFTInitFunc)ippsDFTInit_C_64fc; - } - } - if( getSizeFunc(len, ipp_norm_flag, ippAlgHintNone, &specsize, &initsize, &worksize) >= 0 ) - { - ippbuf.allocate(specsize + initsize + 64); - spec = alignPtr(&ippbuf[0], 32); - uchar* initbuf = alignPtr((uchar*)spec + specsize, 32); - if( initFunc(len, ipp_norm_flag, ippAlgHintNone, spec, initbuf) < 0 ) - spec = 0; - sz += worksize; - } - } - else -#endif - { - if( len != prev_len ) - nf = DFTFactorize( len, factors ); - - inplace_transform = factors[0] == factors[nf-1]; - sz += len*(complex_elem_size + sizeof(int)); - i = nf > 1 && (factors[0] & 1) == 0; - if( (factors[i] & 1) != 0 && factors[i] > 5 ) - sz += (factors[i]+1)*complex_elem_size; - - if( (stage == 0 && ((src.data == dst.data && !inplace_transform) || odd_real)) || - (stage == 1 && !inplace_transform) ) - { - use_buf = 1; - sz += len*complex_elem_size; - } - } - - ptr = (uchar*)buf; - buf.allocate( sz + 32 ); - if( ptr != (uchar*)buf ) - prev_len = 0; // because we release the buffer, - // force recalculation of - // twiddle factors and permutation table - ptr = (uchar*)buf; - if( !spec ) - { - wave = ptr; - ptr += len*complex_elem_size; - itab = (int*)ptr; - ptr = (uchar*)cvAlignPtr( ptr + len*sizeof(int), 16 ); - - if( len != prev_len || (!inplace_transform && inv && real_transform)) - DFTInit( len, nf, factors, itab, complex_elem_size, - wave, stage == 0 && inv && real_transform ); - // otherwise reuse the tables calculated on the previous stage - } - - if( stage == 0 ) - { - uchar* tmp_buf = 0; - int dptr_offset = 0; - int dst_full_len = len*elem_size; - int _flags = (int)inv + (src.channels() != dst.channels() ? - DFT_COMPLEX_INPUT_OR_OUTPUT : 0); - if( use_buf ) - { - tmp_buf = ptr; - ptr += len*complex_elem_size; - if( odd_real && !inv && len > 1 && - !(_flags & DFT_COMPLEX_INPUT_OR_OUTPUT)) - dptr_offset = elem_size; - } - - if( !inv && (_flags & DFT_COMPLEX_INPUT_OR_OUTPUT) ) - dst_full_len += (len & 1) ? elem_size : complex_elem_size; - - dft_func = dft_tbl[(!real_transform ? 0 : !inv ? 1 : 2) + (depth == CV_64F)*3]; - - if( count > 1 && !(flags & DFT_ROWS) && (!inv || !real_transform) ) - stage = 1; - else if( flags & CV_DXT_SCALE ) - scale = 1./(len * (flags & DFT_ROWS ? 1 : count)); - - if( nonzero_rows <= 0 || nonzero_rows > count ) - nonzero_rows = count; - - for( i = 0; i < nonzero_rows; i++ ) - { - uchar* sptr = src.data + i*src.step; - uchar* dptr0 = dst.data + i*dst.step; - uchar* dptr = dptr0; - - if( tmp_buf ) - dptr = tmp_buf; - - dft_func( sptr, dptr, len, nf, factors, itab, wave, len, spec, ptr, _flags, scale ); - if( dptr != dptr0 ) - memcpy( dptr0, dptr + dptr_offset, dst_full_len ); - } - - for( ; i < count; i++ ) - { - uchar* dptr0 = dst.data + i*dst.step; - memset( dptr0, 0, dst_full_len ); - } - - if( stage != 1 ) - break; - src = dst; - } - else - { - int a = 0, b = count; - uchar *buf0, *buf1, *dbuf0, *dbuf1; - uchar* sptr0 = src.data; - uchar* dptr0 = dst.data; - buf0 = ptr; - ptr += len*complex_elem_size; - buf1 = ptr; - ptr += len*complex_elem_size; - dbuf0 = buf0, dbuf1 = buf1; - - if( use_buf ) - { - dbuf1 = ptr; - dbuf0 = buf1; - ptr += len*complex_elem_size; - } - - dft_func = dft_tbl[(depth == CV_64F)*3]; - - if( real_transform && inv && src.cols > 1 ) - stage = 0; - else if( flags & CV_DXT_SCALE ) - scale = 1./(len * count); - - if( real_transform ) - { - int even; - a = 1; - even = (count & 1) == 0; - b = (count+1)/2; - if( !inv ) - { - memset( buf0, 0, len*complex_elem_size ); - CopyColumn( sptr0, src.step, buf0, complex_elem_size, len, elem_size ); - sptr0 += dst.channels()*elem_size; - if( even ) - { - memset( buf1, 0, len*complex_elem_size ); - CopyColumn( sptr0 + (count-2)*elem_size, src.step, - buf1, complex_elem_size, len, elem_size ); - } - } - else if( src.channels() == 1 ) - { - CopyColumn( sptr0, src.step, buf0, elem_size, len, elem_size ); - ExpandCCS( buf0, len, elem_size ); - if( even ) - { - CopyColumn( sptr0 + (count-1)*elem_size, src.step, - buf1, elem_size, len, elem_size ); - ExpandCCS( buf1, len, elem_size ); - } - sptr0 += elem_size; - } - else - { - CopyColumn( sptr0, src.step, buf0, complex_elem_size, len, complex_elem_size ); - if( even ) - { - CopyColumn( sptr0 + b*complex_elem_size, src.step, - buf1, complex_elem_size, len, complex_elem_size ); - } - sptr0 += complex_elem_size; - } - - if( even ) - dft_func( buf1, dbuf1, len, nf, factors, itab, - wave, len, spec, ptr, inv, scale ); - dft_func( buf0, dbuf0, len, nf, factors, itab, - wave, len, spec, ptr, inv, scale ); - - if( dst.channels() == 1 ) - { - if( !inv ) - { - // copy the half of output vector to the first/last column. - // before doing that, defgragment the vector - memcpy( dbuf0 + elem_size, dbuf0, elem_size ); - CopyColumn( dbuf0 + elem_size, elem_size, dptr0, - dst.step, len, elem_size ); - if( even ) - { - memcpy( dbuf1 + elem_size, dbuf1, elem_size ); - CopyColumn( dbuf1 + elem_size, elem_size, - dptr0 + (count-1)*elem_size, - dst.step, len, elem_size ); - } - dptr0 += elem_size; - } - else - { - // copy the real part of the complex vector to the first/last column - CopyColumn( dbuf0, complex_elem_size, dptr0, dst.step, len, elem_size ); - if( even ) - CopyColumn( dbuf1, complex_elem_size, dptr0 + (count-1)*elem_size, - dst.step, len, elem_size ); - dptr0 += elem_size; - } - } - else - { - assert( !inv ); - CopyColumn( dbuf0, complex_elem_size, dptr0, - dst.step, len, complex_elem_size ); - if( even ) - CopyColumn( dbuf1, complex_elem_size, - dptr0 + b*complex_elem_size, - dst.step, len, complex_elem_size ); - dptr0 += complex_elem_size; - } - } - - for( i = a; i < b; i += 2 ) - { - if( i+1 < b ) - { - CopyFrom2Columns( sptr0, src.step, buf0, buf1, len, complex_elem_size ); - dft_func( buf1, dbuf1, len, nf, factors, itab, - wave, len, spec, ptr, inv, scale ); - } - else - CopyColumn( sptr0, src.step, buf0, complex_elem_size, len, complex_elem_size ); - - dft_func( buf0, dbuf0, len, nf, factors, itab, - wave, len, spec, ptr, inv, scale ); - - if( i+1 < b ) - CopyTo2Columns( dbuf0, dbuf1, dptr0, dst.step, len, complex_elem_size ); - else - CopyColumn( dbuf0, complex_elem_size, dptr0, dst.step, len, complex_elem_size ); - sptr0 += 2*complex_elem_size; - dptr0 += 2*complex_elem_size; - } - - if( stage != 0 ) - { - if( !inv && real_transform && dst.channels() == 2 && len > 1 ) - { - int n = dst.cols; - if( elem_size == (int)sizeof(float) ) - { - float* p0 = (float*)dst.data; - size_t dstep = dst.step/sizeof(p0[0]); - for( i = 0; i < len; i++ ) - { - float* p = p0 + dstep*i; - float* q = i == 0 || i*2 == len ? p : p0 + dstep*(len-i); - - for( int j = 1; j < (n+1)/2; j++ ) - { - p[(n-j)*2] = q[j*2]; - p[(n-j)*2+1] = -q[j*2+1]; - } - } - } - else - { - double* p0 = (double*)dst.data; - size_t dstep = dst.step/sizeof(p0[0]); - for( i = 0; i < len; i++ ) - { - double* p = p0 + dstep*i; - double* q = i == 0 || i*2 == len ? p : p0 + dstep*(len-i); - - for( int j = 1; j < (n+1)/2; j++ ) - { - p[(n-j)*2] = q[j*2]; - p[(n-j)*2+1] = -q[j*2+1]; - } - } - } - } - break; - } - src = dst; - } - } -} - - -void cv::idft( InputArray src, OutputArray dst, int flags, int nonzero_rows ) -{ - dft( src, dst, flags | DFT_INVERSE, nonzero_rows ); -} - -void cv::mulSpectrums( InputArray _srcA, InputArray _srcB, - OutputArray _dst, int flags, bool conjB ) -{ - Mat srcA = _srcA.getMat(), srcB = _srcB.getMat(); - int depth = srcA.depth(), cn = srcA.channels(), type = srcA.type(); - int rows = srcA.rows, cols = srcA.cols; - int j, k; - - CV_Assert( type == srcB.type() && srcA.size() == srcB.size() ); - CV_Assert( type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 ); - - _dst.create( srcA.rows, srcA.cols, type ); - Mat dst = _dst.getMat(); - - bool is_1d = (flags & DFT_ROWS) || (rows == 1 || (cols == 1 && - srcA.isContinuous() && srcB.isContinuous() && dst.isContinuous())); - - if( is_1d && !(flags & DFT_ROWS) ) - cols = cols + rows - 1, rows = 1; - - int ncols = cols*cn; - int j0 = cn == 1; - int j1 = ncols - (cols % 2 == 0 && cn == 1); - - if( depth == CV_32F ) - { - const float* dataA = (const float*)srcA.data; - const float* dataB = (const float*)srcB.data; - float* dataC = (float*)dst.data; - - size_t stepA = srcA.step/sizeof(dataA[0]); - size_t stepB = srcB.step/sizeof(dataB[0]); - size_t stepC = dst.step/sizeof(dataC[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataA += cols - 1, dataB += cols - 1, dataC += cols - 1; - dataC[0] = dataA[0]*dataB[0]; - if( rows % 2 == 0 ) - dataC[(rows-1)*stepC] = dataA[(rows-1)*stepA]*dataB[(rows-1)*stepB]; - if( !conjB ) - for( j = 1; j <= rows - 2; j += 2 ) - { - double re = (double)dataA[j*stepA]*dataB[j*stepB] - - (double)dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - double im = (double)dataA[j*stepA]*dataB[(j+1)*stepB] + - (double)dataA[(j+1)*stepA]*dataB[j*stepB]; - dataC[j*stepC] = (float)re; dataC[(j+1)*stepC] = (float)im; - } - else - for( j = 1; j <= rows - 2; j += 2 ) - { - double re = (double)dataA[j*stepA]*dataB[j*stepB] + - (double)dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - double im = (double)dataA[(j+1)*stepA]*dataB[j*stepB] - - (double)dataA[j*stepA]*dataB[(j+1)*stepB]; - dataC[j*stepC] = (float)re; dataC[(j+1)*stepC] = (float)im; - } - if( k == 1 ) - dataA -= cols - 1, dataB -= cols - 1, dataC -= cols - 1; - } - } - - for( ; rows--; dataA += stepA, dataB += stepB, dataC += stepC ) - { - if( is_1d && cn == 1 ) - { - dataC[0] = dataA[0]*dataB[0]; - if( cols % 2 == 0 ) - dataC[j1] = dataA[j1]*dataB[j1]; - } - - if( !conjB ) - for( j = j0; j < j1; j += 2 ) - { - double re = (double)dataA[j]*dataB[j] - (double)dataA[j+1]*dataB[j+1]; - double im = (double)dataA[j+1]*dataB[j] + (double)dataA[j]*dataB[j+1]; - dataC[j] = (float)re; dataC[j+1] = (float)im; - } - else - for( j = j0; j < j1; j += 2 ) - { - double re = (double)dataA[j]*dataB[j] + (double)dataA[j+1]*dataB[j+1]; - double im = (double)dataA[j+1]*dataB[j] - (double)dataA[j]*dataB[j+1]; - dataC[j] = (float)re; dataC[j+1] = (float)im; - } - } - } - else - { - const double* dataA = (const double*)srcA.data; - const double* dataB = (const double*)srcB.data; - double* dataC = (double*)dst.data; - - size_t stepA = srcA.step/sizeof(dataA[0]); - size_t stepB = srcB.step/sizeof(dataB[0]); - size_t stepC = dst.step/sizeof(dataC[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataA += cols - 1, dataB += cols - 1, dataC += cols - 1; - dataC[0] = dataA[0]*dataB[0]; - if( rows % 2 == 0 ) - dataC[(rows-1)*stepC] = dataA[(rows-1)*stepA]*dataB[(rows-1)*stepB]; - if( !conjB ) - for( j = 1; j <= rows - 2; j += 2 ) - { - double re = dataA[j*stepA]*dataB[j*stepB] - - dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - double im = dataA[j*stepA]*dataB[(j+1)*stepB] + - dataA[(j+1)*stepA]*dataB[j*stepB]; - dataC[j*stepC] = re; dataC[(j+1)*stepC] = im; - } - else - for( j = 1; j <= rows - 2; j += 2 ) - { - double re = dataA[j*stepA]*dataB[j*stepB] + - dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - double im = dataA[(j+1)*stepA]*dataB[j*stepB] - - dataA[j*stepA]*dataB[(j+1)*stepB]; - dataC[j*stepC] = re; dataC[(j+1)*stepC] = im; - } - if( k == 1 ) - dataA -= cols - 1, dataB -= cols - 1, dataC -= cols - 1; - } - } - - for( ; rows--; dataA += stepA, dataB += stepB, dataC += stepC ) - { - if( is_1d && cn == 1 ) - { - dataC[0] = dataA[0]*dataB[0]; - if( cols % 2 == 0 ) - dataC[j1] = dataA[j1]*dataB[j1]; - } - - if( !conjB ) - for( j = j0; j < j1; j += 2 ) - { - double re = dataA[j]*dataB[j] - dataA[j+1]*dataB[j+1]; - double im = dataA[j+1]*dataB[j] + dataA[j]*dataB[j+1]; - dataC[j] = re; dataC[j+1] = im; - } - else - for( j = j0; j < j1; j += 2 ) - { - double re = dataA[j]*dataB[j] + dataA[j+1]*dataB[j+1]; - double im = dataA[j+1]*dataB[j] - dataA[j]*dataB[j+1]; - dataC[j] = re; dataC[j+1] = im; - } - } - } -} - - -/****************************************************************************************\ - Discrete Cosine Transform -\****************************************************************************************/ - -namespace cv -{ - -/* DCT is calculated using DFT, as described here: - http://www.ece.utexas.edu/~bevans/courses/ee381k/lectures/09_DCT/lecture9/: -*/ -template static void -DCT( const T* src, int src_step, T* dft_src, T* dft_dst, T* dst, int dst_step, - int n, int nf, int* factors, const int* itab, const Complex* dft_wave, - const Complex* dct_wave, const void* spec, Complex* buf ) -{ - static const T sin_45 = (T)0.70710678118654752440084436210485; - int j, n2 = n >> 1; - - src_step /= sizeof(src[0]); - dst_step /= sizeof(dst[0]); - T* dst1 = dst + (n-1)*dst_step; - - if( n == 1 ) - { - dst[0] = src[0]; - return; - } - - for( j = 0; j < n2; j++, src += src_step*2 ) - { - dft_src[j] = src[0]; - dft_src[n-j-1] = src[src_step]; - } - - RealDFT( dft_src, dft_dst, n, nf, factors, - itab, dft_wave, n, spec, buf, 0, 1.0 ); - src = dft_dst; - - dst[0] = (T)(src[0]*dct_wave->re*sin_45); - dst += dst_step; - for( j = 1, dct_wave++; j < n2; j++, dct_wave++, - dst += dst_step, dst1 -= dst_step ) - { - T t0 = dct_wave->re*src[j*2-1] - dct_wave->im*src[j*2]; - T t1 = -dct_wave->im*src[j*2-1] - dct_wave->re*src[j*2]; - dst[0] = t0; - dst1[0] = t1; - } - - dst[0] = src[n-1]*dct_wave->re; -} - - -template static void -IDCT( const T* src, int src_step, T* dft_src, T* dft_dst, T* dst, int dst_step, - int n, int nf, int* factors, const int* itab, const Complex* dft_wave, - const Complex* dct_wave, const void* spec, Complex* buf ) -{ - static const T sin_45 = (T)0.70710678118654752440084436210485; - int j, n2 = n >> 1; - - src_step /= sizeof(src[0]); - dst_step /= sizeof(dst[0]); - const T* src1 = src + (n-1)*src_step; - - if( n == 1 ) - { - dst[0] = src[0]; - return; - } - - dft_src[0] = (T)(src[0]*2*dct_wave->re*sin_45); - src += src_step; - for( j = 1, dct_wave++; j < n2; j++, dct_wave++, - src += src_step, src1 -= src_step ) - { - T t0 = dct_wave->re*src[0] - dct_wave->im*src1[0]; - T t1 = -dct_wave->im*src[0] - dct_wave->re*src1[0]; - dft_src[j*2-1] = t0; - dft_src[j*2] = t1; - } - - dft_src[n-1] = (T)(src[0]*2*dct_wave->re); - CCSIDFT( dft_src, dft_dst, n, nf, factors, itab, - dft_wave, n, spec, buf, 0, 1.0 ); - - for( j = 0; j < n2; j++, dst += dst_step*2 ) - { - dst[0] = dft_dst[j]; - dst[dst_step] = dft_dst[n-j-1]; - } -} - - -static void -DCTInit( int n, int elem_size, void* _wave, int inv ) -{ - static const double DctScale[] = - { - 0.707106781186547570, 0.500000000000000000, 0.353553390593273790, - 0.250000000000000000, 0.176776695296636890, 0.125000000000000000, - 0.088388347648318447, 0.062500000000000000, 0.044194173824159223, - 0.031250000000000000, 0.022097086912079612, 0.015625000000000000, - 0.011048543456039806, 0.007812500000000000, 0.005524271728019903, - 0.003906250000000000, 0.002762135864009952, 0.001953125000000000, - 0.001381067932004976, 0.000976562500000000, 0.000690533966002488, - 0.000488281250000000, 0.000345266983001244, 0.000244140625000000, - 0.000172633491500622, 0.000122070312500000, 0.000086316745750311, - 0.000061035156250000, 0.000043158372875155, 0.000030517578125000 - }; - - int i; - Complex w, w1; - double t, scale; - - if( n == 1 ) - return; - - assert( (n&1) == 0 ); - - if( (n & (n - 1)) == 0 ) - { - int m; - for( m = 0; (unsigned)(1 << m) < (unsigned)n; m++ ) - ; - scale = (!inv ? 2 : 1)*DctScale[m]; - w1.re = DFTTab[m+2][0]; - w1.im = -DFTTab[m+2][1]; - } - else - { - t = 1./(2*n); - scale = (!inv ? 2 : 1)*std::sqrt(t); - w1.im = sin(-CV_PI*t); - w1.re = std::sqrt(1. - w1.im*w1.im); - } - n >>= 1; - - if( elem_size == sizeof(Complex) ) - { - Complex* wave = (Complex*)_wave; - - w.re = scale; - w.im = 0.; - - for( i = 0; i <= n; i++ ) - { - wave[i] = w; - t = w.re*w1.re - w.im*w1.im; - w.im = w.re*w1.im + w.im*w1.re; - w.re = t; - } - } - else - { - Complex* wave = (Complex*)_wave; - assert( elem_size == sizeof(Complex) ); - - w.re = (float)scale; - w.im = 0.f; - - for( i = 0; i <= n; i++ ) - { - wave[i].re = (float)w.re; - wave[i].im = (float)w.im; - t = w.re*w1.re - w.im*w1.im; - w.im = w.re*w1.im + w.im*w1.re; - w.re = t; - } - } -} - - -typedef void (*DCTFunc)(const void* src, int src_step, void* dft_src, - void* dft_dst, void* dst, int dst_step, int n, - int nf, int* factors, const int* itab, const void* dft_wave, - const void* dct_wave, const void* spec, void* buf ); - -static void DCT_32f(const float* src, int src_step, float* dft_src, float* dft_dst, - float* dst, int dst_step, int n, int nf, int* factors, const int* itab, - const Complexf* dft_wave, const Complexf* dct_wave, const void* spec, Complexf* buf ) -{ - DCT(src, src_step, dft_src, dft_dst, dst, dst_step, - n, nf, factors, itab, dft_wave, dct_wave, spec, buf); -} - -static void IDCT_32f(const float* src, int src_step, float* dft_src, float* dft_dst, - float* dst, int dst_step, int n, int nf, int* factors, const int* itab, - const Complexf* dft_wave, const Complexf* dct_wave, const void* spec, Complexf* buf ) -{ - IDCT(src, src_step, dft_src, dft_dst, dst, dst_step, - n, nf, factors, itab, dft_wave, dct_wave, spec, buf); -} - -static void DCT_64f(const double* src, int src_step, double* dft_src, double* dft_dst, - double* dst, int dst_step, int n, int nf, int* factors, const int* itab, - const Complexd* dft_wave, const Complexd* dct_wave, const void* spec, Complexd* buf ) -{ - DCT(src, src_step, dft_src, dft_dst, dst, dst_step, - n, nf, factors, itab, dft_wave, dct_wave, spec, buf); -} - -static void IDCT_64f(const double* src, int src_step, double* dft_src, double* dft_dst, - double* dst, int dst_step, int n, int nf, int* factors, const int* itab, - const Complexd* dft_wave, const Complexd* dct_wave, const void* spec, Complexd* buf ) -{ - IDCT(src, src_step, dft_src, dft_dst, dst, dst_step, - n, nf, factors, itab, dft_wave, dct_wave, spec, buf); -} - -} - -void cv::dct( InputArray _src0, OutputArray _dst, int flags ) -{ - static DCTFunc dct_tbl[4] = - { - (DCTFunc)DCT_32f, - (DCTFunc)IDCT_32f, - (DCTFunc)DCT_64f, - (DCTFunc)IDCT_64f - }; - - bool inv = (flags & DCT_INVERSE) != 0; - Mat src0 = _src0.getMat(), src = src0; - int type = src.type(), depth = src.depth(); - void /* *spec_dft = 0, */ *spec = 0; - - double scale = 1.; - int prev_len = 0, nf = 0, stage, end_stage; - uchar *src_dft_buf = 0, *dst_dft_buf = 0; - uchar *dft_wave = 0, *dct_wave = 0; - int* itab = 0; - uchar* ptr = 0; - int elem_size = (int)src.elemSize(), complex_elem_size = elem_size*2; - int factors[34], inplace_transform; - int i, len, count; - AutoBuffer buf; - - CV_Assert( type == CV_32FC1 || type == CV_64FC1 ); - _dst.create( src.rows, src.cols, type ); - Mat dst = _dst.getMat(); - - DCTFunc dct_func = dct_tbl[(int)inv + (depth == CV_64F)*2]; - - if( (flags & DCT_ROWS) || src.rows == 1 || - (src.cols == 1 && (src.isContinuous() && dst.isContinuous()))) - { - stage = end_stage = 0; - } - else - { - stage = src.cols == 1; - end_stage = 1; - } - - for( ; stage <= end_stage; stage++ ) - { - uchar *sptr = src.data, *dptr = dst.data; - size_t sstep0, sstep1, dstep0, dstep1; - - if( stage == 0 ) - { - len = src.cols; - count = src.rows; - if( len == 1 && !(flags & DCT_ROWS) ) - { - len = src.rows; - count = 1; - } - sstep0 = src.step; - dstep0 = dst.step; - sstep1 = dstep1 = elem_size; - } - else - { - len = dst.rows; - count = dst.cols; - sstep1 = src.step; - dstep1 = dst.step; - sstep0 = dstep0 = elem_size; - } - - if( len != prev_len ) - { - int sz; - - if( len > 1 && (len & 1) ) - CV_Error( CV_StsNotImplemented, "Odd-size DCT\'s are not implemented" ); - - sz = len*elem_size; - sz += (len/2 + 1)*complex_elem_size; - - spec = 0; - inplace_transform = 1; - /*if( len*count >= 64 && DFTInitAlloc_R_32f_p ) - { - int ipp_sz = 0; - if( depth == CV_32F ) - { - if( spec_dft ) - IPPI_CALL( DFTFree_R_32f_p( spec_dft )); - IPPI_CALL( DFTInitAlloc_R_32f_p( &spec_dft, len, 8, cvAlgHintNone )); - IPPI_CALL( DFTGetBufSize_R_32f_p( spec_dft, &ipp_sz )); - } - else - { - if( spec_dft ) - IPPI_CALL( DFTFree_R_64f_p( spec_dft )); - IPPI_CALL( DFTInitAlloc_R_64f_p( &spec_dft, len, 8, cvAlgHintNone )); - IPPI_CALL( DFTGetBufSize_R_64f_p( spec_dft, &ipp_sz )); - } - spec = spec_dft; - sz += ipp_sz; - } - else*/ - { - sz += len*(complex_elem_size + sizeof(int)) + complex_elem_size; - - nf = DFTFactorize( len, factors ); - inplace_transform = factors[0] == factors[nf-1]; - - i = nf > 1 && (factors[0] & 1) == 0; - if( (factors[i] & 1) != 0 && factors[i] > 5 ) - sz += (factors[i]+1)*complex_elem_size; - - if( !inplace_transform ) - sz += len*elem_size; - } - - buf.allocate( sz + 32 ); - ptr = (uchar*)buf; - - if( !spec ) - { - dft_wave = ptr; - ptr += len*complex_elem_size; - itab = (int*)ptr; - ptr = (uchar*)cvAlignPtr( ptr + len*sizeof(int), 16 ); - DFTInit( len, nf, factors, itab, complex_elem_size, dft_wave, inv ); - } - - dct_wave = ptr; - ptr += (len/2 + 1)*complex_elem_size; - src_dft_buf = dst_dft_buf = ptr; - ptr += len*elem_size; - if( !inplace_transform ) - { - dst_dft_buf = ptr; - ptr += len*elem_size; - } - DCTInit( len, complex_elem_size, dct_wave, inv ); - if( !inv ) - scale += scale; - prev_len = len; - } - // otherwise reuse the tables calculated on the previous stage - for( i = 0; i < count; i++ ) - { - dct_func( sptr + i*sstep0, (int)sstep1, src_dft_buf, dst_dft_buf, - dptr + i*dstep0, (int)dstep1, len, nf, factors, - itab, dft_wave, dct_wave, spec, ptr ); - } - src = dst; - } -} - - -void cv::idct( InputArray src, OutputArray dst, int flags ) -{ - dct( src, dst, flags | DCT_INVERSE ); -} - -namespace cv -{ - -static const int optimalDFTSizeTab[] = { -1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36, 40, 45, 48, -50, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100, 108, 120, 125, 128, 135, 144, 150, 160, -162, 180, 192, 200, 216, 225, 240, 243, 250, 256, 270, 288, 300, 320, 324, 360, 375, -384, 400, 405, 432, 450, 480, 486, 500, 512, 540, 576, 600, 625, 640, 648, 675, 720, -729, 750, 768, 800, 810, 864, 900, 960, 972, 1000, 1024, 1080, 1125, 1152, 1200, -1215, 1250, 1280, 1296, 1350, 1440, 1458, 1500, 1536, 1600, 1620, 1728, 1800, 1875, -1920, 1944, 2000, 2025, 2048, 2160, 2187, 2250, 2304, 2400, 2430, 2500, 2560, 2592, -2700, 2880, 2916, 3000, 3072, 3125, 3200, 3240, 3375, 3456, 3600, 3645, 3750, 3840, -3888, 4000, 4050, 4096, 4320, 4374, 4500, 4608, 4800, 4860, 5000, 5120, 5184, 5400, -5625, 5760, 5832, 6000, 6075, 6144, 6250, 6400, 6480, 6561, 6750, 6912, 7200, 7290, -7500, 7680, 7776, 8000, 8100, 8192, 8640, 8748, 9000, 9216, 9375, 9600, 9720, 10000, -10125, 10240, 10368, 10800, 10935, 11250, 11520, 11664, 12000, 12150, 12288, 12500, -12800, 12960, 13122, 13500, 13824, 14400, 14580, 15000, 15360, 15552, 15625, 16000, -16200, 16384, 16875, 17280, 17496, 18000, 18225, 18432, 18750, 19200, 19440, 19683, -20000, 20250, 20480, 20736, 21600, 21870, 22500, 23040, 23328, 24000, 24300, 24576, -25000, 25600, 25920, 26244, 27000, 27648, 28125, 28800, 29160, 30000, 30375, 30720, -31104, 31250, 32000, 32400, 32768, 32805, 33750, 34560, 34992, 36000, 36450, 36864, -37500, 38400, 38880, 39366, 40000, 40500, 40960, 41472, 43200, 43740, 45000, 46080, -46656, 46875, 48000, 48600, 49152, 50000, 50625, 51200, 51840, 52488, 54000, 54675, -55296, 56250, 57600, 58320, 59049, 60000, 60750, 61440, 62208, 62500, 64000, 64800, -65536, 65610, 67500, 69120, 69984, 72000, 72900, 73728, 75000, 76800, 77760, 78125, -78732, 80000, 81000, 81920, 82944, 84375, 86400, 87480, 90000, 91125, 92160, 93312, -93750, 96000, 97200, 98304, 98415, 100000, 101250, 102400, 103680, 104976, 108000, -109350, 110592, 112500, 115200, 116640, 118098, 120000, 121500, 122880, 124416, 125000, -128000, 129600, 131072, 131220, 135000, 138240, 139968, 140625, 144000, 145800, 147456, -150000, 151875, 153600, 155520, 156250, 157464, 160000, 162000, 163840, 164025, 165888, -168750, 172800, 174960, 177147, 180000, 182250, 184320, 186624, 187500, 192000, 194400, -196608, 196830, 200000, 202500, 204800, 207360, 209952, 216000, 218700, 221184, 225000, -230400, 233280, 234375, 236196, 240000, 243000, 245760, 248832, 250000, 253125, 256000, -259200, 262144, 262440, 270000, 273375, 276480, 279936, 281250, 288000, 291600, 294912, -295245, 300000, 303750, 307200, 311040, 312500, 314928, 320000, 324000, 327680, 328050, -331776, 337500, 345600, 349920, 354294, 360000, 364500, 368640, 373248, 375000, 384000, -388800, 390625, 393216, 393660, 400000, 405000, 409600, 414720, 419904, 421875, 432000, -437400, 442368, 450000, 455625, 460800, 466560, 468750, 472392, 480000, 486000, 491520, -492075, 497664, 500000, 506250, 512000, 518400, 524288, 524880, 531441, 540000, 546750, -552960, 559872, 562500, 576000, 583200, 589824, 590490, 600000, 607500, 614400, 622080, -625000, 629856, 640000, 648000, 655360, 656100, 663552, 675000, 691200, 699840, 703125, -708588, 720000, 729000, 737280, 746496, 750000, 759375, 768000, 777600, 781250, 786432, -787320, 800000, 810000, 819200, 820125, 829440, 839808, 843750, 864000, 874800, 884736, -885735, 900000, 911250, 921600, 933120, 937500, 944784, 960000, 972000, 983040, 984150, -995328, 1000000, 1012500, 1024000, 1036800, 1048576, 1049760, 1062882, 1080000, 1093500, -1105920, 1119744, 1125000, 1152000, 1166400, 1171875, 1179648, 1180980, 1200000, -1215000, 1228800, 1244160, 1250000, 1259712, 1265625, 1280000, 1296000, 1310720, -1312200, 1327104, 1350000, 1366875, 1382400, 1399680, 1406250, 1417176, 1440000, -1458000, 1474560, 1476225, 1492992, 1500000, 1518750, 1536000, 1555200, 1562500, -1572864, 1574640, 1594323, 1600000, 1620000, 1638400, 1640250, 1658880, 1679616, -1687500, 1728000, 1749600, 1769472, 1771470, 1800000, 1822500, 1843200, 1866240, -1875000, 1889568, 1920000, 1944000, 1953125, 1966080, 1968300, 1990656, 2000000, -2025000, 2048000, 2073600, 2097152, 2099520, 2109375, 2125764, 2160000, 2187000, -2211840, 2239488, 2250000, 2278125, 2304000, 2332800, 2343750, 2359296, 2361960, -2400000, 2430000, 2457600, 2460375, 2488320, 2500000, 2519424, 2531250, 2560000, -2592000, 2621440, 2624400, 2654208, 2657205, 2700000, 2733750, 2764800, 2799360, -2812500, 2834352, 2880000, 2916000, 2949120, 2952450, 2985984, 3000000, 3037500, -3072000, 3110400, 3125000, 3145728, 3149280, 3188646, 3200000, 3240000, 3276800, -3280500, 3317760, 3359232, 3375000, 3456000, 3499200, 3515625, 3538944, 3542940, -3600000, 3645000, 3686400, 3732480, 3750000, 3779136, 3796875, 3840000, 3888000, -3906250, 3932160, 3936600, 3981312, 4000000, 4050000, 4096000, 4100625, 4147200, -4194304, 4199040, 4218750, 4251528, 4320000, 4374000, 4423680, 4428675, 4478976, -4500000, 4556250, 4608000, 4665600, 4687500, 4718592, 4723920, 4782969, 4800000, -4860000, 4915200, 4920750, 4976640, 5000000, 5038848, 5062500, 5120000, 5184000, -5242880, 5248800, 5308416, 5314410, 5400000, 5467500, 5529600, 5598720, 5625000, -5668704, 5760000, 5832000, 5859375, 5898240, 5904900, 5971968, 6000000, 6075000, -6144000, 6220800, 6250000, 6291456, 6298560, 6328125, 6377292, 6400000, 6480000, -6553600, 6561000, 6635520, 6718464, 6750000, 6834375, 6912000, 6998400, 7031250, -7077888, 7085880, 7200000, 7290000, 7372800, 7381125, 7464960, 7500000, 7558272, -7593750, 7680000, 7776000, 7812500, 7864320, 7873200, 7962624, 7971615, 8000000, -8100000, 8192000, 8201250, 8294400, 8388608, 8398080, 8437500, 8503056, 8640000, -8748000, 8847360, 8857350, 8957952, 9000000, 9112500, 9216000, 9331200, 9375000, -9437184, 9447840, 9565938, 9600000, 9720000, 9765625, 9830400, 9841500, 9953280, -10000000, 10077696, 10125000, 10240000, 10368000, 10485760, 10497600, 10546875, 10616832, -10628820, 10800000, 10935000, 11059200, 11197440, 11250000, 11337408, 11390625, 11520000, -11664000, 11718750, 11796480, 11809800, 11943936, 12000000, 12150000, 12288000, 12301875, -12441600, 12500000, 12582912, 12597120, 12656250, 12754584, 12800000, 12960000, 13107200, -13122000, 13271040, 13286025, 13436928, 13500000, 13668750, 13824000, 13996800, 14062500, -14155776, 14171760, 14400000, 14580000, 14745600, 14762250, 14929920, 15000000, 15116544, -15187500, 15360000, 15552000, 15625000, 15728640, 15746400, 15925248, 15943230, 16000000, -16200000, 16384000, 16402500, 16588800, 16777216, 16796160, 16875000, 17006112, 17280000, -17496000, 17578125, 17694720, 17714700, 17915904, 18000000, 18225000, 18432000, 18662400, -18750000, 18874368, 18895680, 18984375, 19131876, 19200000, 19440000, 19531250, 19660800, -19683000, 19906560, 20000000, 20155392, 20250000, 20480000, 20503125, 20736000, 20971520, -20995200, 21093750, 21233664, 21257640, 21600000, 21870000, 22118400, 22143375, 22394880, -22500000, 22674816, 22781250, 23040000, 23328000, 23437500, 23592960, 23619600, 23887872, -23914845, 24000000, 24300000, 24576000, 24603750, 24883200, 25000000, 25165824, 25194240, -25312500, 25509168, 25600000, 25920000, 26214400, 26244000, 26542080, 26572050, 26873856, -27000000, 27337500, 27648000, 27993600, 28125000, 28311552, 28343520, 28800000, 29160000, -29296875, 29491200, 29524500, 29859840, 30000000, 30233088, 30375000, 30720000, 31104000, -31250000, 31457280, 31492800, 31640625, 31850496, 31886460, 32000000, 32400000, 32768000, -32805000, 33177600, 33554432, 33592320, 33750000, 34012224, 34171875, 34560000, 34992000, -35156250, 35389440, 35429400, 35831808, 36000000, 36450000, 36864000, 36905625, 37324800, -37500000, 37748736, 37791360, 37968750, 38263752, 38400000, 38880000, 39062500, 39321600, -39366000, 39813120, 39858075, 40000000, 40310784, 40500000, 40960000, 41006250, 41472000, -41943040, 41990400, 42187500, 42467328, 42515280, 43200000, 43740000, 44236800, 44286750, -44789760, 45000000, 45349632, 45562500, 46080000, 46656000, 46875000, 47185920, 47239200, -47775744, 47829690, 48000000, 48600000, 48828125, 49152000, 49207500, 49766400, 50000000, -50331648, 50388480, 50625000, 51018336, 51200000, 51840000, 52428800, 52488000, 52734375, -53084160, 53144100, 53747712, 54000000, 54675000, 55296000, 55987200, 56250000, 56623104, -56687040, 56953125, 57600000, 58320000, 58593750, 58982400, 59049000, 59719680, 60000000, -60466176, 60750000, 61440000, 61509375, 62208000, 62500000, 62914560, 62985600, 63281250, -63700992, 63772920, 64000000, 64800000, 65536000, 65610000, 66355200, 66430125, 67108864, -67184640, 67500000, 68024448, 68343750, 69120000, 69984000, 70312500, 70778880, 70858800, -71663616, 72000000, 72900000, 73728000, 73811250, 74649600, 75000000, 75497472, 75582720, -75937500, 76527504, 76800000, 77760000, 78125000, 78643200, 78732000, 79626240, 79716150, -80000000, 80621568, 81000000, 81920000, 82012500, 82944000, 83886080, 83980800, 84375000, -84934656, 85030560, 86400000, 87480000, 87890625, 88473600, 88573500, 89579520, 90000000, -90699264, 91125000, 92160000, 93312000, 93750000, 94371840, 94478400, 94921875, 95551488, -95659380, 96000000, 97200000, 97656250, 98304000, 98415000, 99532800, 100000000, -100663296, 100776960, 101250000, 102036672, 102400000, 102515625, 103680000, 104857600, -104976000, 105468750, 106168320, 106288200, 107495424, 108000000, 109350000, 110592000, -110716875, 111974400, 112500000, 113246208, 113374080, 113906250, 115200000, 116640000, -117187500, 117964800, 118098000, 119439360, 119574225, 120000000, 120932352, 121500000, -122880000, 123018750, 124416000, 125000000, 125829120, 125971200, 126562500, 127401984, -127545840, 128000000, 129600000, 131072000, 131220000, 132710400, 132860250, 134217728, -134369280, 135000000, 136048896, 136687500, 138240000, 139968000, 140625000, 141557760, -141717600, 143327232, 144000000, 145800000, 146484375, 147456000, 147622500, 149299200, -150000000, 150994944, 151165440, 151875000, 153055008, 153600000, 155520000, 156250000, -157286400, 157464000, 158203125, 159252480, 159432300, 160000000, 161243136, 162000000, -163840000, 164025000, 165888000, 167772160, 167961600, 168750000, 169869312, 170061120, -170859375, 172800000, 174960000, 175781250, 176947200, 177147000, 179159040, 180000000, -181398528, 182250000, 184320000, 184528125, 186624000, 187500000, 188743680, 188956800, -189843750, 191102976, 191318760, 192000000, 194400000, 195312500, 196608000, 196830000, -199065600, 199290375, 200000000, 201326592, 201553920, 202500000, 204073344, 204800000, -205031250, 207360000, 209715200, 209952000, 210937500, 212336640, 212576400, 214990848, -216000000, 218700000, 221184000, 221433750, 223948800, 225000000, 226492416, 226748160, -227812500, 230400000, 233280000, 234375000, 235929600, 236196000, 238878720, 239148450, -240000000, 241864704, 243000000, 244140625, 245760000, 246037500, 248832000, 250000000, -251658240, 251942400, 253125000, 254803968, 255091680, 256000000, 259200000, 262144000, -262440000, 263671875, 265420800, 265720500, 268435456, 268738560, 270000000, 272097792, -273375000, 276480000, 279936000, 281250000, 283115520, 283435200, 284765625, 286654464, -288000000, 291600000, 292968750, 294912000, 295245000, 298598400, 300000000, 301989888, -302330880, 303750000, 306110016, 307200000, 307546875, 311040000, 312500000, 314572800, -314928000, 316406250, 318504960, 318864600, 320000000, 322486272, 324000000, 327680000, -328050000, 331776000, 332150625, 335544320, 335923200, 337500000, 339738624, 340122240, -341718750, 345600000, 349920000, 351562500, 353894400, 354294000, 358318080, 360000000, -362797056, 364500000, 368640000, 369056250, 373248000, 375000000, 377487360, 377913600, -379687500, 382205952, 382637520, 384000000, 388800000, 390625000, 393216000, 393660000, -398131200, 398580750, 400000000, 402653184, 403107840, 405000000, 408146688, 409600000, -410062500, 414720000, 419430400, 419904000, 421875000, 424673280, 425152800, 429981696, -432000000, 437400000, 439453125, 442368000, 442867500, 447897600, 450000000, 452984832, -453496320, 455625000, 460800000, 466560000, 468750000, 471859200, 472392000, 474609375, -477757440, 478296900, 480000000, 483729408, 486000000, 488281250, 491520000, 492075000, -497664000, 500000000, 503316480, 503884800, 506250000, 509607936, 510183360, 512000000, -512578125, 518400000, 524288000, 524880000, 527343750, 530841600, 531441000, 536870912, -537477120, 540000000, 544195584, 546750000, 552960000, 553584375, 559872000, 562500000, -566231040, 566870400, 569531250, 573308928, 576000000, 583200000, 585937500, 589824000, -590490000, 597196800, 597871125, 600000000, 603979776, 604661760, 607500000, 612220032, -614400000, 615093750, 622080000, 625000000, 629145600, 629856000, 632812500, 637009920, -637729200, 640000000, 644972544, 648000000, 655360000, 656100000, 663552000, 664301250, -671088640, 671846400, 675000000, 679477248, 680244480, 683437500, 691200000, 699840000, -703125000, 707788800, 708588000, 716636160, 720000000, 725594112, 729000000, 732421875, -737280000, 738112500, 746496000, 750000000, 754974720, 755827200, 759375000, 764411904, -765275040, 768000000, 777600000, 781250000, 786432000, 787320000, 791015625, 796262400, -797161500, 800000000, 805306368, 806215680, 810000000, 816293376, 819200000, 820125000, -829440000, 838860800, 839808000, 843750000, 849346560, 850305600, 854296875, 859963392, -864000000, 874800000, 878906250, 884736000, 885735000, 895795200, 900000000, 905969664, -906992640, 911250000, 921600000, 922640625, 933120000, 937500000, 943718400, 944784000, -949218750, 955514880, 956593800, 960000000, 967458816, 972000000, 976562500, 983040000, -984150000, 995328000, 996451875, 1000000000, 1006632960, 1007769600, 1012500000, -1019215872, 1020366720, 1024000000, 1025156250, 1036800000, 1048576000, 1049760000, -1054687500, 1061683200, 1062882000, 1073741824, 1074954240, 1080000000, 1088391168, -1093500000, 1105920000, 1107168750, 1119744000, 1125000000, 1132462080, 1133740800, -1139062500, 1146617856, 1152000000, 1166400000, 1171875000, 1179648000, 1180980000, -1194393600, 1195742250, 1200000000, 1207959552, 1209323520, 1215000000, 1220703125, -1224440064, 1228800000, 1230187500, 1244160000, 1250000000, 1258291200, 1259712000, -1265625000, 1274019840, 1275458400, 1280000000, 1289945088, 1296000000, 1310720000, -1312200000, 1318359375, 1327104000, 1328602500, 1342177280, 1343692800, 1350000000, -1358954496, 1360488960, 1366875000, 1382400000, 1399680000, 1406250000, 1415577600, -1417176000, 1423828125, 1433272320, 1440000000, 1451188224, 1458000000, 1464843750, -1474560000, 1476225000, 1492992000, 1500000000, 1509949440, 1511654400, 1518750000, -1528823808, 1530550080, 1536000000, 1537734375, 1555200000, 1562500000, 1572864000, -1574640000, 1582031250, 1592524800, 1594323000, 1600000000, 1610612736, 1612431360, -1620000000, 1632586752, 1638400000, 1640250000, 1658880000, 1660753125, 1677721600, -1679616000, 1687500000, 1698693120, 1700611200, 1708593750, 1719926784, 1728000000, -1749600000, 1757812500, 1769472000, 1771470000, 1791590400, 1800000000, 1811939328, -1813985280, 1822500000, 1843200000, 1845281250, 1866240000, 1875000000, 1887436800, -1889568000, 1898437500, 1911029760, 1913187600, 1920000000, 1934917632, 1944000000, -1953125000, 1966080000, 1968300000, 1990656000, 1992903750, 2000000000, 2013265920, -2015539200, 2025000000, 2038431744, 2040733440, 2048000000, 2050312500, 2073600000, -2097152000, 2099520000, 2109375000, 2123366400, 2125764000 -}; - -} - -int cv::getOptimalDFTSize( int size0 ) -{ - int a = 0, b = sizeof(optimalDFTSizeTab)/sizeof(optimalDFTSizeTab[0]) - 1; - if( (unsigned)size0 >= (unsigned)optimalDFTSizeTab[b] ) - return -1; - - while( a < b ) - { - int c = (a + b) >> 1; - if( size0 <= optimalDFTSizeTab[c] ) - b = c; - else - a = c+1; - } - - return optimalDFTSizeTab[b]; -} - -CV_IMPL void -cvDFT( const CvArr* srcarr, CvArr* dstarr, int flags, int nonzero_rows ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0; - int _flags = ((flags & CV_DXT_INVERSE) ? cv::DFT_INVERSE : 0) | - ((flags & CV_DXT_SCALE) ? cv::DFT_SCALE : 0) | - ((flags & CV_DXT_ROWS) ? cv::DFT_ROWS : 0); - - CV_Assert( src.size == dst.size ); - - if( src.type() != dst.type() ) - { - if( dst.channels() == 2 ) - _flags |= cv::DFT_COMPLEX_OUTPUT; - else - _flags |= cv::DFT_REAL_OUTPUT; - } - - cv::dft( src, dst, _flags, nonzero_rows ); - CV_Assert( dst.data == dst0.data ); // otherwise it means that the destination size or type was incorrect -} - - -CV_IMPL void -cvMulSpectrums( const CvArr* srcAarr, const CvArr* srcBarr, - CvArr* dstarr, int flags ) -{ - cv::Mat srcA = cv::cvarrToMat(srcAarr), - srcB = cv::cvarrToMat(srcBarr), - dst = cv::cvarrToMat(dstarr); - CV_Assert( srcA.size == dst.size && srcA.type() == dst.type() ); - - cv::mulSpectrums(srcA, srcB, dst, - (flags & CV_DXT_ROWS) ? cv::DFT_ROWS : 0, - (flags & CV_DXT_MUL_CONJ) != 0 ); -} - - -CV_IMPL void -cvDCT( const CvArr* srcarr, CvArr* dstarr, int flags ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - int _flags = ((flags & CV_DXT_INVERSE) ? cv::DCT_INVERSE : 0) | - ((flags & CV_DXT_ROWS) ? cv::DCT_ROWS : 0); - cv::dct( src, dst, _flags ); -} - - -CV_IMPL int -cvGetOptimalDFTSize( int size0 ) -{ - return cv::getOptimalDFTSize(size0); -} - -/* End of file. */ diff --git a/modules/core/src/gl_core_3_1.cpp b/modules/core/src/gl_core_3_1.cpp deleted file mode 100644 index 4a83ba0..0000000 --- a/modules/core/src/gl_core_3_1.cpp +++ /dev/null @@ -1,2765 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include -#include -#include "cvconfig.h" -#include "opencv2/core/core.hpp" -#include "gl_core_3_1.hpp" - -#ifdef HAVE_OPENGL - - #ifdef __APPLE__ - #include - - static void* AppleGLGetProcAddress (const char* name) - { - static bool initialized = false; - static void * handle = NULL; - if (!handle) - { - if (!initialized) - { - initialized = true; - const char * const path = "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"; - - handle = dlopen(path, RTLD_LAZY | RTLD_GLOBAL); - } - if (!handle) - return NULL; - } - return dlsym(handle, name); - } - #endif // __APPLE__ - - #if defined(__sgi) || defined (__sun) - #include - #include - - static void* SunGetProcAddress (const char* name) - { - typedef void* (func_t*)(const GLubyte*); - - static void* h = 0; - static func_t gpa = 0; - - if (!h) - { - h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL); - if (!h) - return 0; - gpa = (func_t) dlsym(h, "glXGetProcAddress"); - } - - return gpa ? gpa((const GLubyte*) name) : dlsym(h, name); - } - #endif // __sgi || __sun - - #if defined(_WIN32) - #ifdef _MSC_VER - #pragma warning(disable: 4055) - #pragma warning(disable: 4054) - #endif - - static int TestPointer(const PROC pTest) - { - if(!pTest) - return 0; - - ptrdiff_t iTest = (ptrdiff_t) pTest; - - if (iTest == 1 || iTest == 2 || iTest == 3 || iTest == -1) - return 0; - - return 1; - } - - static PROC WinGetProcAddress(const char* name) - { - PROC pFunc = wglGetProcAddress((LPCSTR) name); - if (TestPointer(pFunc)) - return pFunc; - - HMODULE glMod = GetModuleHandleA("OpenGL32.dll"); - return (PROC) GetProcAddress(glMod, (LPCSTR) name); - } - #endif // _WIN32 - - #if defined(_WIN32) - #define CV_GL_GET_PROC_ADDRESS(name) WinGetProcAddress(name) - #elif defined(__APPLE__) - #define CV_GL_GET_PROC_ADDRESS(name) AppleGLGetProcAddress(name) - #elif defined(__sgi) || defined(__sun) - #define CV_GL_GET_PROC_ADDRESS(name) SunGetProcAddress(name) - #else // GLX - #include - - #define CV_GL_GET_PROC_ADDRESS(name) glXGetProcAddressARB((const GLubyte*) name) - #endif - - static void* IntGetProcAddress(const char* name) - { - void* func = (void*) CV_GL_GET_PROC_ADDRESS(name); - if (!func) - { - std::ostringstream msg; - msg << "Can't load OpenGL extension [" << name << "]"; - CV_Error(CV_OpenGlApiCallError, msg.str()); - } - return func; - } -#else - static void* IntGetProcAddress(const char*) - { - CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); - return 0; - } -#endif - -namespace gl -{ - ////////////////////////////////////////////// - // Function pointer types - - // Extension: 1.1 - typedef void (CODEGEN_FUNCPTR *PFNCULLFACEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNFRONTFACEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNHINTPROC)(GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNLINEWIDTHPROC)(GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNPOINTSIZEPROC)(GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNPOLYGONMODEPROC)(GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNSCISSORPROC)(GLint , GLint , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERFPROC)(GLenum , GLenum , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERFVPROC)(GLenum , GLenum , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERIPROC)(GLenum , GLenum , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERIVPROC)(GLenum , GLenum , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNTEXIMAGE1DPROC)(GLenum , GLint , GLint , GLsizei , GLint , GLenum , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNTEXIMAGE2DPROC)(GLenum , GLint , GLint , GLsizei , GLsizei , GLint , GLenum , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNDRAWBUFFERPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNCLEARPROC)(GLbitfield ); - typedef void (CODEGEN_FUNCPTR *PFNCLEARCOLORPROC)(GLfloat , GLfloat , GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNCLEARSTENCILPROC)(GLint ); - typedef void (CODEGEN_FUNCPTR *PFNCLEARDEPTHPROC)(GLdouble ); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILMASKPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNCOLORMASKPROC)(GLboolean , GLboolean , GLboolean , GLboolean ); - typedef void (CODEGEN_FUNCPTR *PFNDEPTHMASKPROC)(GLboolean ); - typedef void (CODEGEN_FUNCPTR *PFNDISABLEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNENABLEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNFINISHPROC)(); - typedef void (CODEGEN_FUNCPTR *PFNFLUSHPROC)(); - typedef void (CODEGEN_FUNCPTR *PFNBLENDFUNCPROC)(GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNLOGICOPPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILFUNCPROC)(GLenum , GLint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILOPPROC)(GLenum , GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDEPTHFUNCPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNPIXELSTOREFPROC)(GLenum , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNPIXELSTOREIPROC)(GLenum , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNREADBUFFERPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNREADPIXELSPROC)(GLint , GLint , GLsizei , GLsizei , GLenum , GLenum , GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETBOOLEANVPROC)(GLenum , GLboolean *); - typedef void (CODEGEN_FUNCPTR *PFNGETDOUBLEVPROC)(GLenum , GLdouble *); - typedef GLenum (CODEGEN_FUNCPTR *PFNGETERRORPROC)(); - typedef void (CODEGEN_FUNCPTR *PFNGETFLOATVPROC)(GLenum , GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNGETINTEGERVPROC)(GLenum , GLint *); - typedef const GLubyte * (CODEGEN_FUNCPTR *PFNGETSTRINGPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXIMAGEPROC)(GLenum , GLint , GLenum , GLenum , GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXPARAMETERFVPROC)(GLenum , GLenum , GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXPARAMETERIVPROC)(GLenum , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXLEVELPARAMETERFVPROC)(GLenum , GLint , GLenum , GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXLEVELPARAMETERIVPROC)(GLenum , GLint , GLenum , GLint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISENABLEDPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDEPTHRANGEPROC)(GLdouble , GLdouble ); - typedef void (CODEGEN_FUNCPTR *PFNVIEWPORTPROC)(GLint , GLint , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNDRAWARRAYSPROC)(GLenum , GLint , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNDRAWELEMENTSPROC)(GLenum , GLsizei , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETPOINTERVPROC)(GLenum , GLvoid* *); - typedef void (CODEGEN_FUNCPTR *PFNPOLYGONOFFSETPROC)(GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNCOPYTEXIMAGE1DPROC)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNCOPYTEXIMAGE2DPROC)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLsizei , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNCOPYTEXSUBIMAGE1DPROC)(GLenum , GLint , GLint , GLint , GLint , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNCOPYTEXSUBIMAGE2DPROC)(GLenum , GLint , GLint , GLint , GLint , GLint , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNTEXSUBIMAGE1DPROC)(GLenum , GLint , GLint , GLsizei , GLenum , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNTEXSUBIMAGE2DPROC)(GLenum , GLint , GLint , GLint , GLsizei , GLsizei , GLenum , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNBINDTEXTUREPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETETEXTURESPROC)(GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGENTEXTURESPROC)(GLsizei , GLuint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISTEXTUREPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNINDEXUBPROC)(GLubyte ); - typedef void (CODEGEN_FUNCPTR *PFNINDEXUBVPROC)(const GLubyte *); - - // Extension: 1.2 - typedef void (CODEGEN_FUNCPTR *PFNBLENDCOLORPROC)(GLfloat , GLfloat , GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNBLENDEQUATIONPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDRAWRANGEELEMENTSPROC)(GLenum , GLuint , GLuint , GLsizei , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNTEXSUBIMAGE3DPROC)(GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLenum , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOPYTEXSUBIMAGE3DPROC)(GLenum , GLint , GLint , GLint , GLint , GLint , GLint , GLsizei , GLsizei ); - - // Extension: 1.3 - typedef void (CODEGEN_FUNCPTR *PFNACTIVETEXTUREPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNSAMPLECOVERAGEPROC)(GLfloat , GLboolean ); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXIMAGE3DPROC)(GLenum , GLint , GLenum , GLsizei , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXIMAGE2DPROC)(GLenum , GLint , GLenum , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXIMAGE1DPROC)(GLenum , GLint , GLenum , GLsizei , GLint , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum , GLint , GLint , GLint , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum , GLint , GLint , GLsizei , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETCOMPRESSEDTEXIMAGEPROC)(GLenum , GLint , GLvoid *); - - // Extension: 1.4 - typedef void (CODEGEN_FUNCPTR *PFNBLENDFUNCSEPARATEPROC)(GLenum , GLenum , GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNMULTIDRAWARRAYSPROC)(GLenum , const GLint *, const GLsizei *, GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNMULTIDRAWELEMENTSPROC)(GLenum , const GLsizei *, GLenum , const GLvoid* const *, GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNPOINTPARAMETERFPROC)(GLenum , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNPOINTPARAMETERFVPROC)(GLenum , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNPOINTPARAMETERIPROC)(GLenum , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNPOINTPARAMETERIVPROC)(GLenum , const GLint *); - - // Extension: 1.5 - typedef void (CODEGEN_FUNCPTR *PFNGENQUERIESPROC)(GLsizei , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNDELETEQUERIESPROC)(GLsizei , const GLuint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISQUERYPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBEGINQUERYPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNENDQUERYPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNGETQUERYIVPROC)(GLenum , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETQUERYOBJECTIVPROC)(GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETQUERYOBJECTUIVPROC)(GLuint , GLenum , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNBINDBUFFERPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETEBUFFERSPROC)(GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGENBUFFERSPROC)(GLsizei , GLuint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISBUFFERPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBUFFERDATAPROC)(GLenum , GLsizeiptr , const GLvoid *, GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNBUFFERSUBDATAPROC)(GLenum , GLintptr , GLsizeiptr , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETBUFFERSUBDATAPROC)(GLenum , GLintptr , GLsizeiptr , GLvoid *); - typedef GLvoid* (CODEGEN_FUNCPTR *PFNMAPBUFFERPROC)(GLenum , GLenum ); - typedef GLboolean (CODEGEN_FUNCPTR *PFNUNMAPBUFFERPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNGETBUFFERPARAMETERIVPROC)(GLenum , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETBUFFERPOINTERVPROC)(GLenum , GLenum , GLvoid* *); - - // Extension: 2.0 - typedef void (CODEGEN_FUNCPTR *PFNBLENDEQUATIONSEPARATEPROC)(GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDRAWBUFFERSPROC)(GLsizei , const GLenum *); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILOPSEPARATEPROC)(GLenum , GLenum , GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILFUNCSEPARATEPROC)(GLenum , GLenum , GLint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNSTENCILMASKSEPARATEPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNATTACHSHADERPROC)(GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBINDATTRIBLOCATIONPROC)(GLuint , GLuint , const GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNCOMPILESHADERPROC)(GLuint ); - typedef GLuint (CODEGEN_FUNCPTR *PFNCREATEPROGRAMPROC)(); - typedef GLuint (CODEGEN_FUNCPTR *PFNCREATESHADERPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDELETEPROGRAMPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETESHADERPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDETACHSHADERPROC)(GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDISABLEVERTEXATTRIBARRAYPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNENABLEVERTEXATTRIBARRAYPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEATTRIBPROC)(GLuint , GLuint , GLsizei , GLsizei *, GLint *, GLenum *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEUNIFORMPROC)(GLuint , GLuint , GLsizei , GLsizei *, GLint *, GLenum *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETATTACHEDSHADERSPROC)(GLuint , GLsizei , GLsizei *, GLuint *); - typedef GLint (CODEGEN_FUNCPTR *PFNGETATTRIBLOCATIONPROC)(GLuint , const GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETPROGRAMIVPROC)(GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETPROGRAMINFOLOGPROC)(GLuint , GLsizei , GLsizei *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETSHADERIVPROC)(GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETSHADERINFOLOGPROC)(GLuint , GLsizei , GLsizei *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETSHADERSOURCEPROC)(GLuint , GLsizei , GLsizei *, GLchar *); - typedef GLint (CODEGEN_FUNCPTR *PFNGETUNIFORMLOCATIONPROC)(GLuint , const GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETUNIFORMFVPROC)(GLuint , GLint , GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNGETUNIFORMIVPROC)(GLuint , GLint , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBDVPROC)(GLuint , GLenum , GLdouble *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBFVPROC)(GLuint , GLenum , GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBIVPROC)(GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBPOINTERVPROC)(GLuint , GLenum , GLvoid* *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISPROGRAMPROC)(GLuint ); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISSHADERPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNLINKPROGRAMPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNSHADERSOURCEPROC)(GLuint , GLsizei , const GLchar* const *, const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNUSEPROGRAMPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1FPROC)(GLint , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2FPROC)(GLint , GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3FPROC)(GLint , GLfloat , GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4FPROC)(GLint , GLfloat , GLfloat , GLfloat , GLfloat ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1IPROC)(GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2IPROC)(GLint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3IPROC)(GLint , GLint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4IPROC)(GLint , GLint , GLint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1FVPROC)(GLint , GLsizei , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2FVPROC)(GLint , GLsizei , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3FVPROC)(GLint , GLsizei , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4FVPROC)(GLint , GLsizei , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1IVPROC)(GLint , GLsizei , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2IVPROC)(GLint , GLsizei , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3IVPROC)(GLint , GLsizei , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4IVPROC)(GLint , GLsizei , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX2FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX3FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX4FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNVALIDATEPROGRAMPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBPOINTERPROC)(GLuint , GLint , GLenum , GLboolean , GLsizei , const GLvoid *); - - // Extension: 2.1 - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX2X3FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX3X2FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX2X4FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX4X2FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX3X4FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMMATRIX4X3FVPROC)(GLint , GLsizei , GLboolean , const GLfloat *); - - // Extension: ARB_vertex_array_object - typedef void (CODEGEN_FUNCPTR *PFNBINDVERTEXARRAYPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETEVERTEXARRAYSPROC)(GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGENVERTEXARRAYSPROC)(GLsizei , GLuint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISVERTEXARRAYPROC)(GLuint ); - - // Extension: ARB_map_buffer_range - typedef GLvoid* (CODEGEN_FUNCPTR *PFNMAPBUFFERRANGEPROC)(GLenum , GLintptr , GLsizeiptr , GLbitfield ); - typedef void (CODEGEN_FUNCPTR *PFNFLUSHMAPPEDBUFFERRANGEPROC)(GLenum , GLintptr , GLsizeiptr ); - - // Extension: ARB_framebuffer_object - typedef GLboolean (CODEGEN_FUNCPTR *PFNISRENDERBUFFERPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBINDRENDERBUFFERPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETERENDERBUFFERSPROC)(GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGENRENDERBUFFERSPROC)(GLsizei , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNRENDERBUFFERSTORAGEPROC)(GLenum , GLenum , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNGETRENDERBUFFERPARAMETERIVPROC)(GLenum , GLenum , GLint *); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISFRAMEBUFFERPROC)(GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBINDFRAMEBUFFERPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDELETEFRAMEBUFFERSPROC)(GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGENFRAMEBUFFERSPROC)(GLsizei , GLuint *); - typedef GLenum (CODEGEN_FUNCPTR *PFNCHECKFRAMEBUFFERSTATUSPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNFRAMEBUFFERTEXTURE1DPROC)(GLenum , GLenum , GLenum , GLuint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNFRAMEBUFFERTEXTURE2DPROC)(GLenum , GLenum , GLenum , GLuint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNFRAMEBUFFERTEXTURE3DPROC)(GLenum , GLenum , GLenum , GLuint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNFRAMEBUFFERRENDERBUFFERPROC)(GLenum , GLenum , GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum , GLenum , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGENERATEMIPMAPPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNBLITFRAMEBUFFERPROC)(GLint , GLint , GLint , GLint , GLint , GLint , GLint , GLint , GLbitfield , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum , GLsizei , GLenum , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNFRAMEBUFFERTEXTURELAYERPROC)(GLenum , GLenum , GLuint , GLint , GLint ); - - // Extension: 3.0 - typedef void (CODEGEN_FUNCPTR *PFNCOLORMASKIPROC)(GLuint , GLboolean , GLboolean , GLboolean , GLboolean ); - typedef void (CODEGEN_FUNCPTR *PFNGETBOOLEANI_VPROC)(GLenum , GLuint , GLboolean *); - typedef void (CODEGEN_FUNCPTR *PFNGETINTEGERI_VPROC)(GLenum , GLuint , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNENABLEIPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNDISABLEIPROC)(GLenum , GLuint ); - typedef GLboolean (CODEGEN_FUNCPTR *PFNISENABLEDIPROC)(GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNBEGINTRANSFORMFEEDBACKPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNENDTRANSFORMFEEDBACKPROC)(); - typedef void (CODEGEN_FUNCPTR *PFNBINDBUFFERRANGEPROC)(GLenum , GLuint , GLuint , GLintptr , GLsizeiptr ); - typedef void (CODEGEN_FUNCPTR *PFNBINDBUFFERBASEPROC)(GLenum , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNTRANSFORMFEEDBACKVARYINGSPROC)(GLuint , GLsizei , const GLchar* const *, GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint , GLuint , GLsizei , GLsizei *, GLsizei *, GLenum *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNCLAMPCOLORPROC)(GLenum , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNBEGINCONDITIONALRENDERPROC)(GLuint , GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNENDCONDITIONALRENDERPROC)(); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBIPOINTERPROC)(GLuint , GLint , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBIIVPROC)(GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETVERTEXATTRIBIUIVPROC)(GLuint , GLenum , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI1IPROC)(GLuint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI2IPROC)(GLuint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI3IPROC)(GLuint , GLint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4IPROC)(GLuint , GLint , GLint , GLint , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI1UIPROC)(GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI2UIPROC)(GLuint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI3UIPROC)(GLuint , GLuint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4UIPROC)(GLuint , GLuint , GLuint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI1IVPROC)(GLuint , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI2IVPROC)(GLuint , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI3IVPROC)(GLuint , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4IVPROC)(GLuint , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI1UIVPROC)(GLuint , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI2UIVPROC)(GLuint , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI3UIVPROC)(GLuint , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4UIVPROC)(GLuint , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4BVPROC)(GLuint , const GLbyte *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4SVPROC)(GLuint , const GLshort *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4UBVPROC)(GLuint , const GLubyte *); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXATTRIBI4USVPROC)(GLuint , const GLushort *); - typedef void (CODEGEN_FUNCPTR *PFNGETUNIFORMUIVPROC)(GLuint , GLint , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNBINDFRAGDATALOCATIONPROC)(GLuint , GLuint , const GLchar *); - typedef GLint (CODEGEN_FUNCPTR *PFNGETFRAGDATALOCATIONPROC)(GLuint , const GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1UIPROC)(GLint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2UIPROC)(GLint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3UIPROC)(GLint , GLuint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4UIPROC)(GLint , GLuint , GLuint , GLuint , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM1UIVPROC)(GLint , GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM2UIVPROC)(GLint , GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM3UIVPROC)(GLint , GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORM4UIVPROC)(GLint , GLsizei , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERIIVPROC)(GLenum , GLenum , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNTEXPARAMETERIUIVPROC)(GLenum , GLenum , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXPARAMETERIIVPROC)(GLenum , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETTEXPARAMETERIUIVPROC)(GLenum , GLenum , GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNCLEARBUFFERIVPROC)(GLenum , GLint , const GLint *); - typedef void (CODEGEN_FUNCPTR *PFNCLEARBUFFERUIVPROC)(GLenum , GLint , const GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNCLEARBUFFERFVPROC)(GLenum , GLint , const GLfloat *); - typedef void (CODEGEN_FUNCPTR *PFNCLEARBUFFERFIPROC)(GLenum , GLint , GLfloat , GLint ); - typedef const GLubyte * (CODEGEN_FUNCPTR *PFNGETSTRINGIPROC)(GLenum , GLuint ); - - // Extension: ARB_uniform_buffer_object - typedef void (CODEGEN_FUNCPTR *PFNGETUNIFORMINDICESPROC)(GLuint , GLsizei , const GLchar* const *, GLuint *); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEUNIFORMSIVPROC)(GLuint , GLsizei , const GLuint *, GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEUNIFORMNAMEPROC)(GLuint , GLuint , GLsizei , GLsizei *, GLchar *); - typedef GLuint (CODEGEN_FUNCPTR *PFNGETUNIFORMBLOCKINDEXPROC)(GLuint , const GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEUNIFORMBLOCKIVPROC)(GLuint , GLuint , GLenum , GLint *); - typedef void (CODEGEN_FUNCPTR *PFNGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint , GLuint , GLsizei , GLsizei *, GLchar *); - typedef void (CODEGEN_FUNCPTR *PFNUNIFORMBLOCKBINDINGPROC)(GLuint , GLuint , GLuint ); - - // Extension: ARB_copy_buffer - typedef void (CODEGEN_FUNCPTR *PFNCOPYBUFFERSUBDATAPROC)(GLenum , GLenum , GLintptr , GLintptr , GLsizeiptr ); - - // Extension: 3.1 - typedef void (CODEGEN_FUNCPTR *PFNDRAWARRAYSINSTANCEDPROC)(GLenum , GLint , GLsizei , GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNDRAWELEMENTSINSTANCEDPROC)(GLenum , GLsizei , GLenum , const GLvoid *, GLsizei ); - typedef void (CODEGEN_FUNCPTR *PFNTEXBUFFERPROC)(GLenum , GLenum , GLuint ); - typedef void (CODEGEN_FUNCPTR *PFNPRIMITIVERESTARTINDEXPROC)(GLuint ); - - // Legacy - typedef void (CODEGEN_FUNCPTR *PFNENABLECLIENTSTATEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNDISABLECLIENTSTATEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNVERTEXPOINTERPROC)(GLint , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNNORMALPOINTERPROC)(GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNCOLORPOINTERPROC)(GLint , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNTEXCOORDPOINTERPROC)(GLint , GLenum , GLsizei , const GLvoid *); - typedef void (CODEGEN_FUNCPTR *PFNTEXENVIPROC)(GLenum , GLenum , GLint ); - typedef void (CODEGEN_FUNCPTR *PFNMATRIXMODEPROC)(GLenum ); - typedef void (CODEGEN_FUNCPTR *PFNLOADIDENTITYPROC)(void); - typedef void (CODEGEN_FUNCPTR *PFNORTHOPROC)(GLdouble , GLdouble , GLdouble , GLdouble , GLdouble , GLdouble ); - typedef void (CODEGEN_FUNCPTR *PFNCOLOR3DPROC)(GLdouble , GLdouble , GLdouble ); - - ////////////////////////////////////////////// - // Function pointers - - // Extension: 1.1 - PFNCULLFACEPROC CullFace; - PFNFRONTFACEPROC FrontFace; - PFNHINTPROC Hint; - PFNLINEWIDTHPROC LineWidth; - PFNPOINTSIZEPROC PointSize; - PFNPOLYGONMODEPROC PolygonMode; - PFNSCISSORPROC Scissor; - PFNTEXPARAMETERFPROC TexParameterf; - PFNTEXPARAMETERFVPROC TexParameterfv; - PFNTEXPARAMETERIPROC TexParameteri; - PFNTEXPARAMETERIVPROC TexParameteriv; - PFNTEXIMAGE1DPROC TexImage1D; - PFNTEXIMAGE2DPROC TexImage2D; - PFNDRAWBUFFERPROC DrawBuffer; - PFNCLEARPROC Clear; - PFNCLEARCOLORPROC ClearColor; - PFNCLEARSTENCILPROC ClearStencil; - PFNCLEARDEPTHPROC ClearDepth; - PFNSTENCILMASKPROC StencilMask; - PFNCOLORMASKPROC ColorMask; - PFNDEPTHMASKPROC DepthMask; - PFNDISABLEPROC Disable; - PFNENABLEPROC Enable; - PFNFINISHPROC Finish; - PFNFLUSHPROC Flush; - PFNBLENDFUNCPROC BlendFunc; - PFNLOGICOPPROC LogicOp; - PFNSTENCILFUNCPROC StencilFunc; - PFNSTENCILOPPROC StencilOp; - PFNDEPTHFUNCPROC DepthFunc; - PFNPIXELSTOREFPROC PixelStoref; - PFNPIXELSTOREIPROC PixelStorei; - PFNREADBUFFERPROC ReadBuffer; - PFNREADPIXELSPROC ReadPixels; - PFNGETBOOLEANVPROC GetBooleanv; - PFNGETDOUBLEVPROC GetDoublev; - PFNGETERRORPROC GetError; - PFNGETFLOATVPROC GetFloatv; - PFNGETINTEGERVPROC GetIntegerv; - PFNGETSTRINGPROC GetString; - PFNGETTEXIMAGEPROC GetTexImage; - PFNGETTEXPARAMETERFVPROC GetTexParameterfv; - PFNGETTEXPARAMETERIVPROC GetTexParameteriv; - PFNGETTEXLEVELPARAMETERFVPROC GetTexLevelParameterfv; - PFNGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; - PFNISENABLEDPROC IsEnabled; - PFNDEPTHRANGEPROC DepthRange; - PFNVIEWPORTPROC Viewport; - PFNDRAWARRAYSPROC DrawArrays; - PFNDRAWELEMENTSPROC DrawElements; - PFNGETPOINTERVPROC GetPointerv; - PFNPOLYGONOFFSETPROC PolygonOffset; - PFNCOPYTEXIMAGE1DPROC CopyTexImage1D; - PFNCOPYTEXIMAGE2DPROC CopyTexImage2D; - PFNCOPYTEXSUBIMAGE1DPROC CopyTexSubImage1D; - PFNCOPYTEXSUBIMAGE2DPROC CopyTexSubImage2D; - PFNTEXSUBIMAGE1DPROC TexSubImage1D; - PFNTEXSUBIMAGE2DPROC TexSubImage2D; - PFNBINDTEXTUREPROC BindTexture; - PFNDELETETEXTURESPROC DeleteTextures; - PFNGENTEXTURESPROC GenTextures; - PFNISTEXTUREPROC IsTexture; - PFNINDEXUBPROC Indexub; - PFNINDEXUBVPROC Indexubv; - - // Extension: 1.2 - PFNBLENDCOLORPROC BlendColor; - PFNBLENDEQUATIONPROC BlendEquation; - PFNDRAWRANGEELEMENTSPROC DrawRangeElements; - PFNTEXSUBIMAGE3DPROC TexSubImage3D; - PFNCOPYTEXSUBIMAGE3DPROC CopyTexSubImage3D; - - // Extension: 1.3 - PFNACTIVETEXTUREPROC ActiveTexture; - PFNSAMPLECOVERAGEPROC SampleCoverage; - PFNCOMPRESSEDTEXIMAGE3DPROC CompressedTexImage3D; - PFNCOMPRESSEDTEXIMAGE2DPROC CompressedTexImage2D; - PFNCOMPRESSEDTEXIMAGE1DPROC CompressedTexImage1D; - PFNCOMPRESSEDTEXSUBIMAGE3DPROC CompressedTexSubImage3D; - PFNCOMPRESSEDTEXSUBIMAGE2DPROC CompressedTexSubImage2D; - PFNCOMPRESSEDTEXSUBIMAGE1DPROC CompressedTexSubImage1D; - PFNGETCOMPRESSEDTEXIMAGEPROC GetCompressedTexImage; - - // Extension: 1.4 - PFNBLENDFUNCSEPARATEPROC BlendFuncSeparate; - PFNMULTIDRAWARRAYSPROC MultiDrawArrays; - PFNMULTIDRAWELEMENTSPROC MultiDrawElements; - PFNPOINTPARAMETERFPROC PointParameterf; - PFNPOINTPARAMETERFVPROC PointParameterfv; - PFNPOINTPARAMETERIPROC PointParameteri; - PFNPOINTPARAMETERIVPROC PointParameteriv; - - // Extension: 1.5 - PFNGENQUERIESPROC GenQueries; - PFNDELETEQUERIESPROC DeleteQueries; - PFNISQUERYPROC IsQuery; - PFNBEGINQUERYPROC BeginQuery; - PFNENDQUERYPROC EndQuery; - PFNGETQUERYIVPROC GetQueryiv; - PFNGETQUERYOBJECTIVPROC GetQueryObjectiv; - PFNGETQUERYOBJECTUIVPROC GetQueryObjectuiv; - PFNBINDBUFFERPROC BindBuffer; - PFNDELETEBUFFERSPROC DeleteBuffers; - PFNGENBUFFERSPROC GenBuffers; - PFNISBUFFERPROC IsBuffer; - PFNBUFFERDATAPROC BufferData; - PFNBUFFERSUBDATAPROC BufferSubData; - PFNGETBUFFERSUBDATAPROC GetBufferSubData; - PFNMAPBUFFERPROC MapBuffer; - PFNUNMAPBUFFERPROC UnmapBuffer; - PFNGETBUFFERPARAMETERIVPROC GetBufferParameteriv; - PFNGETBUFFERPOINTERVPROC GetBufferPointerv; - - // Extension: 2.0 - PFNBLENDEQUATIONSEPARATEPROC BlendEquationSeparate; - PFNDRAWBUFFERSPROC DrawBuffers; - PFNSTENCILOPSEPARATEPROC StencilOpSeparate; - PFNSTENCILFUNCSEPARATEPROC StencilFuncSeparate; - PFNSTENCILMASKSEPARATEPROC StencilMaskSeparate; - PFNATTACHSHADERPROC AttachShader; - PFNBINDATTRIBLOCATIONPROC BindAttribLocation; - PFNCOMPILESHADERPROC CompileShader; - PFNCREATEPROGRAMPROC CreateProgram; - PFNCREATESHADERPROC CreateShader; - PFNDELETEPROGRAMPROC DeleteProgram; - PFNDELETESHADERPROC DeleteShader; - PFNDETACHSHADERPROC DetachShader; - PFNDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray; - PFNENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray; - PFNGETACTIVEATTRIBPROC GetActiveAttrib; - PFNGETACTIVEUNIFORMPROC GetActiveUniform; - PFNGETATTACHEDSHADERSPROC GetAttachedShaders; - PFNGETATTRIBLOCATIONPROC GetAttribLocation; - PFNGETPROGRAMIVPROC GetProgramiv; - PFNGETPROGRAMINFOLOGPROC GetProgramInfoLog; - PFNGETSHADERIVPROC GetShaderiv; - PFNGETSHADERINFOLOGPROC GetShaderInfoLog; - PFNGETSHADERSOURCEPROC GetShaderSource; - PFNGETUNIFORMLOCATIONPROC GetUniformLocation; - PFNGETUNIFORMFVPROC GetUniformfv; - PFNGETUNIFORMIVPROC GetUniformiv; - PFNGETVERTEXATTRIBDVPROC GetVertexAttribdv; - PFNGETVERTEXATTRIBFVPROC GetVertexAttribfv; - PFNGETVERTEXATTRIBIVPROC GetVertexAttribiv; - PFNGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv; - PFNISPROGRAMPROC IsProgram; - PFNISSHADERPROC IsShader; - PFNLINKPROGRAMPROC LinkProgram; - PFNSHADERSOURCEPROC ShaderSource; - PFNUSEPROGRAMPROC UseProgram; - PFNUNIFORM1FPROC Uniform1f; - PFNUNIFORM2FPROC Uniform2f; - PFNUNIFORM3FPROC Uniform3f; - PFNUNIFORM4FPROC Uniform4f; - PFNUNIFORM1IPROC Uniform1i; - PFNUNIFORM2IPROC Uniform2i; - PFNUNIFORM3IPROC Uniform3i; - PFNUNIFORM4IPROC Uniform4i; - PFNUNIFORM1FVPROC Uniform1fv; - PFNUNIFORM2FVPROC Uniform2fv; - PFNUNIFORM3FVPROC Uniform3fv; - PFNUNIFORM4FVPROC Uniform4fv; - PFNUNIFORM1IVPROC Uniform1iv; - PFNUNIFORM2IVPROC Uniform2iv; - PFNUNIFORM3IVPROC Uniform3iv; - PFNUNIFORM4IVPROC Uniform4iv; - PFNUNIFORMMATRIX2FVPROC UniformMatrix2fv; - PFNUNIFORMMATRIX3FVPROC UniformMatrix3fv; - PFNUNIFORMMATRIX4FVPROC UniformMatrix4fv; - PFNVALIDATEPROGRAMPROC ValidateProgram; - PFNVERTEXATTRIBPOINTERPROC VertexAttribPointer; - - // Extension: 2.1 - PFNUNIFORMMATRIX2X3FVPROC UniformMatrix2x3fv; - PFNUNIFORMMATRIX3X2FVPROC UniformMatrix3x2fv; - PFNUNIFORMMATRIX2X4FVPROC UniformMatrix2x4fv; - PFNUNIFORMMATRIX4X2FVPROC UniformMatrix4x2fv; - PFNUNIFORMMATRIX3X4FVPROC UniformMatrix3x4fv; - PFNUNIFORMMATRIX4X3FVPROC UniformMatrix4x3fv; - - // Extension: ARB_vertex_array_object - PFNBINDVERTEXARRAYPROC BindVertexArray; - PFNDELETEVERTEXARRAYSPROC DeleteVertexArrays; - PFNGENVERTEXARRAYSPROC GenVertexArrays; - PFNISVERTEXARRAYPROC IsVertexArray; - - // Extension: ARB_map_buffer_range - PFNMAPBUFFERRANGEPROC MapBufferRange; - PFNFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; - - // Extension: ARB_framebuffer_object - PFNISRENDERBUFFERPROC IsRenderbuffer; - PFNBINDRENDERBUFFERPROC BindRenderbuffer; - PFNDELETERENDERBUFFERSPROC DeleteRenderbuffers; - PFNGENRENDERBUFFERSPROC GenRenderbuffers; - PFNRENDERBUFFERSTORAGEPROC RenderbufferStorage; - PFNGETRENDERBUFFERPARAMETERIVPROC GetRenderbufferParameteriv; - PFNISFRAMEBUFFERPROC IsFramebuffer; - PFNBINDFRAMEBUFFERPROC BindFramebuffer; - PFNDELETEFRAMEBUFFERSPROC DeleteFramebuffers; - PFNGENFRAMEBUFFERSPROC GenFramebuffers; - PFNCHECKFRAMEBUFFERSTATUSPROC CheckFramebufferStatus; - PFNFRAMEBUFFERTEXTURE1DPROC FramebufferTexture1D; - PFNFRAMEBUFFERTEXTURE2DPROC FramebufferTexture2D; - PFNFRAMEBUFFERTEXTURE3DPROC FramebufferTexture3D; - PFNFRAMEBUFFERRENDERBUFFERPROC FramebufferRenderbuffer; - PFNGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv; - PFNGENERATEMIPMAPPROC GenerateMipmap; - PFNBLITFRAMEBUFFERPROC BlitFramebuffer; - PFNRENDERBUFFERSTORAGEMULTISAMPLEPROC RenderbufferStorageMultisample; - PFNFRAMEBUFFERTEXTURELAYERPROC FramebufferTextureLayer; - - // Extension: 3.0 - PFNCOLORMASKIPROC ColorMaski; - PFNGETBOOLEANI_VPROC GetBooleani_v; - PFNGETINTEGERI_VPROC GetIntegeri_v; - PFNENABLEIPROC Enablei; - PFNDISABLEIPROC Disablei; - PFNISENABLEDIPROC IsEnabledi; - PFNBEGINTRANSFORMFEEDBACKPROC BeginTransformFeedback; - PFNENDTRANSFORMFEEDBACKPROC EndTransformFeedback; - PFNBINDBUFFERRANGEPROC BindBufferRange; - PFNBINDBUFFERBASEPROC BindBufferBase; - PFNTRANSFORMFEEDBACKVARYINGSPROC TransformFeedbackVaryings; - PFNGETTRANSFORMFEEDBACKVARYINGPROC GetTransformFeedbackVarying; - PFNCLAMPCOLORPROC ClampColor; - PFNBEGINCONDITIONALRENDERPROC BeginConditionalRender; - PFNENDCONDITIONALRENDERPROC EndConditionalRender; - PFNVERTEXATTRIBIPOINTERPROC VertexAttribIPointer; - PFNGETVERTEXATTRIBIIVPROC GetVertexAttribIiv; - PFNGETVERTEXATTRIBIUIVPROC GetVertexAttribIuiv; - PFNVERTEXATTRIBI1IPROC VertexAttribI1i; - PFNVERTEXATTRIBI2IPROC VertexAttribI2i; - PFNVERTEXATTRIBI3IPROC VertexAttribI3i; - PFNVERTEXATTRIBI4IPROC VertexAttribI4i; - PFNVERTEXATTRIBI1UIPROC VertexAttribI1ui; - PFNVERTEXATTRIBI2UIPROC VertexAttribI2ui; - PFNVERTEXATTRIBI3UIPROC VertexAttribI3ui; - PFNVERTEXATTRIBI4UIPROC VertexAttribI4ui; - PFNVERTEXATTRIBI1IVPROC VertexAttribI1iv; - PFNVERTEXATTRIBI2IVPROC VertexAttribI2iv; - PFNVERTEXATTRIBI3IVPROC VertexAttribI3iv; - PFNVERTEXATTRIBI4IVPROC VertexAttribI4iv; - PFNVERTEXATTRIBI1UIVPROC VertexAttribI1uiv; - PFNVERTEXATTRIBI2UIVPROC VertexAttribI2uiv; - PFNVERTEXATTRIBI3UIVPROC VertexAttribI3uiv; - PFNVERTEXATTRIBI4UIVPROC VertexAttribI4uiv; - PFNVERTEXATTRIBI4BVPROC VertexAttribI4bv; - PFNVERTEXATTRIBI4SVPROC VertexAttribI4sv; - PFNVERTEXATTRIBI4UBVPROC VertexAttribI4ubv; - PFNVERTEXATTRIBI4USVPROC VertexAttribI4usv; - PFNGETUNIFORMUIVPROC GetUniformuiv; - PFNBINDFRAGDATALOCATIONPROC BindFragDataLocation; - PFNGETFRAGDATALOCATIONPROC GetFragDataLocation; - PFNUNIFORM1UIPROC Uniform1ui; - PFNUNIFORM2UIPROC Uniform2ui; - PFNUNIFORM3UIPROC Uniform3ui; - PFNUNIFORM4UIPROC Uniform4ui; - PFNUNIFORM1UIVPROC Uniform1uiv; - PFNUNIFORM2UIVPROC Uniform2uiv; - PFNUNIFORM3UIVPROC Uniform3uiv; - PFNUNIFORM4UIVPROC Uniform4uiv; - PFNTEXPARAMETERIIVPROC TexParameterIiv; - PFNTEXPARAMETERIUIVPROC TexParameterIuiv; - PFNGETTEXPARAMETERIIVPROC GetTexParameterIiv; - PFNGETTEXPARAMETERIUIVPROC GetTexParameterIuiv; - PFNCLEARBUFFERIVPROC ClearBufferiv; - PFNCLEARBUFFERUIVPROC ClearBufferuiv; - PFNCLEARBUFFERFVPROC ClearBufferfv; - PFNCLEARBUFFERFIPROC ClearBufferfi; - PFNGETSTRINGIPROC GetStringi; - - // Extension: ARB_uniform_buffer_object - PFNGETUNIFORMINDICESPROC GetUniformIndices; - PFNGETACTIVEUNIFORMSIVPROC GetActiveUniformsiv; - PFNGETACTIVEUNIFORMNAMEPROC GetActiveUniformName; - PFNGETUNIFORMBLOCKINDEXPROC GetUniformBlockIndex; - PFNGETACTIVEUNIFORMBLOCKIVPROC GetActiveUniformBlockiv; - PFNGETACTIVEUNIFORMBLOCKNAMEPROC GetActiveUniformBlockName; - PFNUNIFORMBLOCKBINDINGPROC UniformBlockBinding; - - // Extension: ARB_copy_buffer - PFNCOPYBUFFERSUBDATAPROC CopyBufferSubData; - - // Extension: 3.1 - PFNDRAWARRAYSINSTANCEDPROC DrawArraysInstanced; - PFNDRAWELEMENTSINSTANCEDPROC DrawElementsInstanced; - PFNTEXBUFFERPROC TexBuffer; - PFNPRIMITIVERESTARTINDEXPROC PrimitiveRestartIndex; - - // Legacy - PFNENABLECLIENTSTATEPROC EnableClientState; - PFNDISABLECLIENTSTATEPROC DisableClientState; - PFNVERTEXPOINTERPROC VertexPointer; - PFNNORMALPOINTERPROC NormalPointer; - PFNCOLORPOINTERPROC ColorPointer; - PFNTEXCOORDPOINTERPROC TexCoordPointer; - - PFNTEXENVIPROC TexEnvi; - - PFNMATRIXMODEPROC MatrixMode; - PFNLOADIDENTITYPROC LoadIdentity; - PFNORTHOPROC Ortho; - - PFNCOLOR3DPROC Color3d; - - ////////////////////////////////////////////// - // Switch functions - - // Extension: 1.1 - - static void CODEGEN_FUNCPTR Switch_CullFace(GLenum mode) - { - CullFace = (PFNCULLFACEPROC)IntGetProcAddress("glCullFace"); - CullFace(mode); - } - - static void CODEGEN_FUNCPTR Switch_FrontFace(GLenum mode) - { - FrontFace = (PFNFRONTFACEPROC)IntGetProcAddress("glFrontFace"); - FrontFace(mode); - } - - static void CODEGEN_FUNCPTR Switch_Hint(GLenum target, GLenum mode) - { - Hint = (PFNHINTPROC)IntGetProcAddress("glHint"); - Hint(target, mode); - } - - static void CODEGEN_FUNCPTR Switch_LineWidth(GLfloat width) - { - LineWidth = (PFNLINEWIDTHPROC)IntGetProcAddress("glLineWidth"); - LineWidth(width); - } - - static void CODEGEN_FUNCPTR Switch_PointSize(GLfloat size) - { - PointSize = (PFNPOINTSIZEPROC)IntGetProcAddress("glPointSize"); - PointSize(size); - } - - static void CODEGEN_FUNCPTR Switch_PolygonMode(GLenum face, GLenum mode) - { - PolygonMode = (PFNPOLYGONMODEPROC)IntGetProcAddress("glPolygonMode"); - PolygonMode(face, mode); - } - - static void CODEGEN_FUNCPTR Switch_Scissor(GLint x, GLint y, GLsizei width, GLsizei height) - { - Scissor = (PFNSCISSORPROC)IntGetProcAddress("glScissor"); - Scissor(x, y, width, height); - } - - static void CODEGEN_FUNCPTR Switch_TexParameterf(GLenum target, GLenum pname, GLfloat param) - { - TexParameterf = (PFNTEXPARAMETERFPROC)IntGetProcAddress("glTexParameterf"); - TexParameterf(target, pname, param); - } - - static void CODEGEN_FUNCPTR Switch_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params) - { - TexParameterfv = (PFNTEXPARAMETERFVPROC)IntGetProcAddress("glTexParameterfv"); - TexParameterfv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_TexParameteri(GLenum target, GLenum pname, GLint param) - { - TexParameteri = (PFNTEXPARAMETERIPROC)IntGetProcAddress("glTexParameteri"); - TexParameteri(target, pname, param); - } - - static void CODEGEN_FUNCPTR Switch_TexParameteriv(GLenum target, GLenum pname, const GLint *params) - { - TexParameteriv = (PFNTEXPARAMETERIVPROC)IntGetProcAddress("glTexParameteriv"); - TexParameteriv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_TexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - { - TexImage1D = (PFNTEXIMAGE1DPROC)IntGetProcAddress("glTexImage1D"); - TexImage1D(target, level, internalformat, width, border, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - { - TexImage2D = (PFNTEXIMAGE2DPROC)IntGetProcAddress("glTexImage2D"); - TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_DrawBuffer(GLenum mode) - { - DrawBuffer = (PFNDRAWBUFFERPROC)IntGetProcAddress("glDrawBuffer"); - DrawBuffer(mode); - } - - static void CODEGEN_FUNCPTR Switch_Clear(GLbitfield mask) - { - Clear = (PFNCLEARPROC)IntGetProcAddress("glClear"); - Clear(mask); - } - - static void CODEGEN_FUNCPTR Switch_ClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) - { - ClearColor = (PFNCLEARCOLORPROC)IntGetProcAddress("glClearColor"); - ClearColor(red, green, blue, alpha); - } - - static void CODEGEN_FUNCPTR Switch_ClearStencil(GLint s) - { - ClearStencil = (PFNCLEARSTENCILPROC)IntGetProcAddress("glClearStencil"); - ClearStencil(s); - } - - static void CODEGEN_FUNCPTR Switch_ClearDepth(GLdouble depth) - { - ClearDepth = (PFNCLEARDEPTHPROC)IntGetProcAddress("glClearDepth"); - ClearDepth(depth); - } - - static void CODEGEN_FUNCPTR Switch_StencilMask(GLuint mask) - { - StencilMask = (PFNSTENCILMASKPROC)IntGetProcAddress("glStencilMask"); - StencilMask(mask); - } - - static void CODEGEN_FUNCPTR Switch_ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) - { - ColorMask = (PFNCOLORMASKPROC)IntGetProcAddress("glColorMask"); - ColorMask(red, green, blue, alpha); - } - - static void CODEGEN_FUNCPTR Switch_DepthMask(GLboolean flag) - { - DepthMask = (PFNDEPTHMASKPROC)IntGetProcAddress("glDepthMask"); - DepthMask(flag); - } - - static void CODEGEN_FUNCPTR Switch_Disable(GLenum cap) - { - Disable = (PFNDISABLEPROC)IntGetProcAddress("glDisable"); - Disable(cap); - } - - static void CODEGEN_FUNCPTR Switch_Enable(GLenum cap) - { - Enable = (PFNENABLEPROC)IntGetProcAddress("glEnable"); - Enable(cap); - } - - static void CODEGEN_FUNCPTR Switch_Finish() - { - Finish = (PFNFINISHPROC)IntGetProcAddress("glFinish"); - Finish(); - } - - static void CODEGEN_FUNCPTR Switch_Flush() - { - Flush = (PFNFLUSHPROC)IntGetProcAddress("glFlush"); - Flush(); - } - - static void CODEGEN_FUNCPTR Switch_BlendFunc(GLenum sfactor, GLenum dfactor) - { - BlendFunc = (PFNBLENDFUNCPROC)IntGetProcAddress("glBlendFunc"); - BlendFunc(sfactor, dfactor); - } - - static void CODEGEN_FUNCPTR Switch_LogicOp(GLenum opcode) - { - LogicOp = (PFNLOGICOPPROC)IntGetProcAddress("glLogicOp"); - LogicOp(opcode); - } - - static void CODEGEN_FUNCPTR Switch_StencilFunc(GLenum func, GLint ref, GLuint mask) - { - StencilFunc = (PFNSTENCILFUNCPROC)IntGetProcAddress("glStencilFunc"); - StencilFunc(func, ref, mask); - } - - static void CODEGEN_FUNCPTR Switch_StencilOp(GLenum fail, GLenum zfail, GLenum zpass) - { - StencilOp = (PFNSTENCILOPPROC)IntGetProcAddress("glStencilOp"); - StencilOp(fail, zfail, zpass); - } - - static void CODEGEN_FUNCPTR Switch_DepthFunc(GLenum func) - { - DepthFunc = (PFNDEPTHFUNCPROC)IntGetProcAddress("glDepthFunc"); - DepthFunc(func); - } - - static void CODEGEN_FUNCPTR Switch_PixelStoref(GLenum pname, GLfloat param) - { - PixelStoref = (PFNPIXELSTOREFPROC)IntGetProcAddress("glPixelStoref"); - PixelStoref(pname, param); - } - - static void CODEGEN_FUNCPTR Switch_PixelStorei(GLenum pname, GLint param) - { - PixelStorei = (PFNPIXELSTOREIPROC)IntGetProcAddress("glPixelStorei"); - PixelStorei(pname, param); - } - - static void CODEGEN_FUNCPTR Switch_ReadBuffer(GLenum mode) - { - ReadBuffer = (PFNREADBUFFERPROC)IntGetProcAddress("glReadBuffer"); - ReadBuffer(mode); - } - - static void CODEGEN_FUNCPTR Switch_ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels) - { - ReadPixels = (PFNREADPIXELSPROC)IntGetProcAddress("glReadPixels"); - ReadPixels(x, y, width, height, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_GetBooleanv(GLenum pname, GLboolean *params) - { - GetBooleanv = (PFNGETBOOLEANVPROC)IntGetProcAddress("glGetBooleanv"); - GetBooleanv(pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetDoublev(GLenum pname, GLdouble *params) - { - GetDoublev = (PFNGETDOUBLEVPROC)IntGetProcAddress("glGetDoublev"); - GetDoublev(pname, params); - } - - static GLenum CODEGEN_FUNCPTR Switch_GetError() - { - GetError = (PFNGETERRORPROC)IntGetProcAddress("glGetError"); - return GetError(); - } - - static void CODEGEN_FUNCPTR Switch_GetFloatv(GLenum pname, GLfloat *params) - { - GetFloatv = (PFNGETFLOATVPROC)IntGetProcAddress("glGetFloatv"); - GetFloatv(pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetIntegerv(GLenum pname, GLint *params) - { - GetIntegerv = (PFNGETINTEGERVPROC)IntGetProcAddress("glGetIntegerv"); - GetIntegerv(pname, params); - } - - static const GLubyte * CODEGEN_FUNCPTR Switch_GetString(GLenum name) - { - GetString = (PFNGETSTRINGPROC)IntGetProcAddress("glGetString"); - return GetString(name); - } - - static void CODEGEN_FUNCPTR Switch_GetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) - { - GetTexImage = (PFNGETTEXIMAGEPROC)IntGetProcAddress("glGetTexImage"); - GetTexImage(target, level, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params) - { - GetTexParameterfv = (PFNGETTEXPARAMETERFVPROC)IntGetProcAddress("glGetTexParameterfv"); - GetTexParameterfv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetTexParameteriv(GLenum target, GLenum pname, GLint *params) - { - GetTexParameteriv = (PFNGETTEXPARAMETERIVPROC)IntGetProcAddress("glGetTexParameteriv"); - GetTexParameteriv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params) - { - GetTexLevelParameterfv = (PFNGETTEXLEVELPARAMETERFVPROC)IntGetProcAddress("glGetTexLevelParameterfv"); - GetTexLevelParameterfv(target, level, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params) - { - GetTexLevelParameteriv = (PFNGETTEXLEVELPARAMETERIVPROC)IntGetProcAddress("glGetTexLevelParameteriv"); - GetTexLevelParameteriv(target, level, pname, params); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsEnabled(GLenum cap) - { - IsEnabled = (PFNISENABLEDPROC)IntGetProcAddress("glIsEnabled"); - return IsEnabled(cap); - } - - static void CODEGEN_FUNCPTR Switch_DepthRange(GLdouble ren_near, GLdouble ren_far) - { - DepthRange = (PFNDEPTHRANGEPROC)IntGetProcAddress("glDepthRange"); - DepthRange(ren_near, ren_far); - } - - static void CODEGEN_FUNCPTR Switch_Viewport(GLint x, GLint y, GLsizei width, GLsizei height) - { - Viewport = (PFNVIEWPORTPROC)IntGetProcAddress("glViewport"); - Viewport(x, y, width, height); - } - - static void CODEGEN_FUNCPTR Switch_DrawArrays(GLenum mode, GLint first, GLsizei count) - { - DrawArrays = (PFNDRAWARRAYSPROC)IntGetProcAddress("glDrawArrays"); - DrawArrays(mode, first, count); - } - - static void CODEGEN_FUNCPTR Switch_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) - { - DrawElements = (PFNDRAWELEMENTSPROC)IntGetProcAddress("glDrawElements"); - DrawElements(mode, count, type, indices); - } - - static void CODEGEN_FUNCPTR Switch_GetPointerv(GLenum pname, GLvoid* *params) - { - GetPointerv = (PFNGETPOINTERVPROC)IntGetProcAddress("glGetPointerv"); - GetPointerv(pname, params); - } - - static void CODEGEN_FUNCPTR Switch_PolygonOffset(GLfloat factor, GLfloat units) - { - PolygonOffset = (PFNPOLYGONOFFSETPROC)IntGetProcAddress("glPolygonOffset"); - PolygonOffset(factor, units); - } - - static void CODEGEN_FUNCPTR Switch_CopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - { - CopyTexImage1D = (PFNCOPYTEXIMAGE1DPROC)IntGetProcAddress("glCopyTexImage1D"); - CopyTexImage1D(target, level, internalformat, x, y, width, border); - } - - static void CODEGEN_FUNCPTR Switch_CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - { - CopyTexImage2D = (PFNCOPYTEXIMAGE2DPROC)IntGetProcAddress("glCopyTexImage2D"); - CopyTexImage2D(target, level, internalformat, x, y, width, height, border); - } - - static void CODEGEN_FUNCPTR Switch_CopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - { - CopyTexSubImage1D = (PFNCOPYTEXSUBIMAGE1DPROC)IntGetProcAddress("glCopyTexSubImage1D"); - CopyTexSubImage1D(target, level, xoffset, x, y, width); - } - - static void CODEGEN_FUNCPTR Switch_CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - { - CopyTexSubImage2D = (PFNCOPYTEXSUBIMAGE2DPROC)IntGetProcAddress("glCopyTexSubImage2D"); - CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); - } - - static void CODEGEN_FUNCPTR Switch_TexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - { - TexSubImage1D = (PFNTEXSUBIMAGE1DPROC)IntGetProcAddress("glTexSubImage1D"); - TexSubImage1D(target, level, xoffset, width, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - { - TexSubImage2D = (PFNTEXSUBIMAGE2DPROC)IntGetProcAddress("glTexSubImage2D"); - TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_BindTexture(GLenum target, GLuint texture) - { - BindTexture = (PFNBINDTEXTUREPROC)IntGetProcAddress("glBindTexture"); - BindTexture(target, texture); - } - - static void CODEGEN_FUNCPTR Switch_DeleteTextures(GLsizei n, const GLuint *textures) - { - DeleteTextures = (PFNDELETETEXTURESPROC)IntGetProcAddress("glDeleteTextures"); - DeleteTextures(n, textures); - } - - static void CODEGEN_FUNCPTR Switch_GenTextures(GLsizei n, GLuint *textures) - { - GenTextures = (PFNGENTEXTURESPROC)IntGetProcAddress("glGenTextures"); - GenTextures(n, textures); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsTexture(GLuint texture) - { - IsTexture = (PFNISTEXTUREPROC)IntGetProcAddress("glIsTexture"); - return IsTexture(texture); - } - - static void CODEGEN_FUNCPTR Switch_Indexub(GLubyte c) - { - Indexub = (PFNINDEXUBPROC)IntGetProcAddress("glIndexub"); - Indexub(c); - } - - static void CODEGEN_FUNCPTR Switch_Indexubv(const GLubyte *c) - { - Indexubv = (PFNINDEXUBVPROC)IntGetProcAddress("glIndexubv"); - Indexubv(c); - } - - // Extension: 1.2 - - static void CODEGEN_FUNCPTR Switch_BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) - { - BlendColor = (PFNBLENDCOLORPROC)IntGetProcAddress("glBlendColor"); - BlendColor(red, green, blue, alpha); - } - - static void CODEGEN_FUNCPTR Switch_BlendEquation(GLenum mode) - { - BlendEquation = (PFNBLENDEQUATIONPROC)IntGetProcAddress("glBlendEquation"); - BlendEquation(mode); - } - - static void CODEGEN_FUNCPTR Switch_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) - { - DrawRangeElements = (PFNDRAWRANGEELEMENTSPROC)IntGetProcAddress("glDrawRangeElements"); - DrawRangeElements(mode, start, end, count, type, indices); - } - - static void CODEGEN_FUNCPTR Switch_TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - { - TexSubImage3D = (PFNTEXSUBIMAGE3DPROC)IntGetProcAddress("glTexSubImage3D"); - TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); - } - - static void CODEGEN_FUNCPTR Switch_CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) - { - CopyTexSubImage3D = (PFNCOPYTEXSUBIMAGE3DPROC)IntGetProcAddress("glCopyTexSubImage3D"); - CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); - } - - // Extension: 1.3 - - static void CODEGEN_FUNCPTR Switch_ActiveTexture(GLenum texture) - { - ActiveTexture = (PFNACTIVETEXTUREPROC)IntGetProcAddress("glActiveTexture"); - ActiveTexture(texture); - } - - static void CODEGEN_FUNCPTR Switch_SampleCoverage(GLfloat value, GLboolean invert) - { - SampleCoverage = (PFNSAMPLECOVERAGEPROC)IntGetProcAddress("glSampleCoverage"); - SampleCoverage(value, invert); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - { - CompressedTexImage3D = (PFNCOMPRESSEDTEXIMAGE3DPROC)IntGetProcAddress("glCompressedTexImage3D"); - CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - { - CompressedTexImage2D = (PFNCOMPRESSEDTEXIMAGE2DPROC)IntGetProcAddress("glCompressedTexImage2D"); - CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - { - CompressedTexImage1D = (PFNCOMPRESSEDTEXIMAGE1DPROC)IntGetProcAddress("glCompressedTexImage1D"); - CompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - { - CompressedTexSubImage3D = (PFNCOMPRESSEDTEXSUBIMAGE3DPROC)IntGetProcAddress("glCompressedTexSubImage3D"); - CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - { - CompressedTexSubImage2D = (PFNCOMPRESSEDTEXSUBIMAGE2DPROC)IntGetProcAddress("glCompressedTexSubImage2D"); - CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_CompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - { - CompressedTexSubImage1D = (PFNCOMPRESSEDTEXSUBIMAGE1DPROC)IntGetProcAddress("glCompressedTexSubImage1D"); - CompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); - } - - static void CODEGEN_FUNCPTR Switch_GetCompressedTexImage(GLenum target, GLint level, GLvoid *img) - { - GetCompressedTexImage = (PFNGETCOMPRESSEDTEXIMAGEPROC)IntGetProcAddress("glGetCompressedTexImage"); - GetCompressedTexImage(target, level, img); - } - - // Extension: 1.4 - - static void CODEGEN_FUNCPTR Switch_BlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) - { - BlendFuncSeparate = (PFNBLENDFUNCSEPARATEPROC)IntGetProcAddress("glBlendFuncSeparate"); - BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); - } - - static void CODEGEN_FUNCPTR Switch_MultiDrawArrays(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) - { - MultiDrawArrays = (PFNMULTIDRAWARRAYSPROC)IntGetProcAddress("glMultiDrawArrays"); - MultiDrawArrays(mode, first, count, drawcount); - } - - static void CODEGEN_FUNCPTR Switch_MultiDrawElements(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount) - { - MultiDrawElements = (PFNMULTIDRAWELEMENTSPROC)IntGetProcAddress("glMultiDrawElements"); - MultiDrawElements(mode, count, type, indices, drawcount); - } - - static void CODEGEN_FUNCPTR Switch_PointParameterf(GLenum pname, GLfloat param) - { - PointParameterf = (PFNPOINTPARAMETERFPROC)IntGetProcAddress("glPointParameterf"); - PointParameterf(pname, param); - } - - static void CODEGEN_FUNCPTR Switch_PointParameterfv(GLenum pname, const GLfloat *params) - { - PointParameterfv = (PFNPOINTPARAMETERFVPROC)IntGetProcAddress("glPointParameterfv"); - PointParameterfv(pname, params); - } - - static void CODEGEN_FUNCPTR Switch_PointParameteri(GLenum pname, GLint param) - { - PointParameteri = (PFNPOINTPARAMETERIPROC)IntGetProcAddress("glPointParameteri"); - PointParameteri(pname, param); - } - - static void CODEGEN_FUNCPTR Switch_PointParameteriv(GLenum pname, const GLint *params) - { - PointParameteriv = (PFNPOINTPARAMETERIVPROC)IntGetProcAddress("glPointParameteriv"); - PointParameteriv(pname, params); - } - - // Extension: 1.5 - - static void CODEGEN_FUNCPTR Switch_GenQueries(GLsizei n, GLuint *ids) - { - GenQueries = (PFNGENQUERIESPROC)IntGetProcAddress("glGenQueries"); - GenQueries(n, ids); - } - - static void CODEGEN_FUNCPTR Switch_DeleteQueries(GLsizei n, const GLuint *ids) - { - DeleteQueries = (PFNDELETEQUERIESPROC)IntGetProcAddress("glDeleteQueries"); - DeleteQueries(n, ids); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsQuery(GLuint id) - { - IsQuery = (PFNISQUERYPROC)IntGetProcAddress("glIsQuery"); - return IsQuery(id); - } - - static void CODEGEN_FUNCPTR Switch_BeginQuery(GLenum target, GLuint id) - { - BeginQuery = (PFNBEGINQUERYPROC)IntGetProcAddress("glBeginQuery"); - BeginQuery(target, id); - } - - static void CODEGEN_FUNCPTR Switch_EndQuery(GLenum target) - { - EndQuery = (PFNENDQUERYPROC)IntGetProcAddress("glEndQuery"); - EndQuery(target); - } - - static void CODEGEN_FUNCPTR Switch_GetQueryiv(GLenum target, GLenum pname, GLint *params) - { - GetQueryiv = (PFNGETQUERYIVPROC)IntGetProcAddress("glGetQueryiv"); - GetQueryiv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetQueryObjectiv(GLuint id, GLenum pname, GLint *params) - { - GetQueryObjectiv = (PFNGETQUERYOBJECTIVPROC)IntGetProcAddress("glGetQueryObjectiv"); - GetQueryObjectiv(id, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params) - { - GetQueryObjectuiv = (PFNGETQUERYOBJECTUIVPROC)IntGetProcAddress("glGetQueryObjectuiv"); - GetQueryObjectuiv(id, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_BindBuffer(GLenum target, GLuint buffer) - { - BindBuffer = (PFNBINDBUFFERPROC)IntGetProcAddress("glBindBuffer"); - BindBuffer(target, buffer); - } - - static void CODEGEN_FUNCPTR Switch_DeleteBuffers(GLsizei n, const GLuint *buffers) - { - DeleteBuffers = (PFNDELETEBUFFERSPROC)IntGetProcAddress("glDeleteBuffers"); - DeleteBuffers(n, buffers); - } - - static void CODEGEN_FUNCPTR Switch_GenBuffers(GLsizei n, GLuint *buffers) - { - GenBuffers = (PFNGENBUFFERSPROC)IntGetProcAddress("glGenBuffers"); - GenBuffers(n, buffers); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsBuffer(GLuint buffer) - { - IsBuffer = (PFNISBUFFERPROC)IntGetProcAddress("glIsBuffer"); - return IsBuffer(buffer); - } - - static void CODEGEN_FUNCPTR Switch_BufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage) - { - BufferData = (PFNBUFFERDATAPROC)IntGetProcAddress("glBufferData"); - BufferData(target, size, data, usage); - } - - static void CODEGEN_FUNCPTR Switch_BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) - { - BufferSubData = (PFNBUFFERSUBDATAPROC)IntGetProcAddress("glBufferSubData"); - BufferSubData(target, offset, size, data); - } - - static void CODEGEN_FUNCPTR Switch_GetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data) - { - GetBufferSubData = (PFNGETBUFFERSUBDATAPROC)IntGetProcAddress("glGetBufferSubData"); - GetBufferSubData(target, offset, size, data); - } - - static GLvoid* CODEGEN_FUNCPTR Switch_MapBuffer(GLenum target, GLenum access) - { - MapBuffer = (PFNMAPBUFFERPROC)IntGetProcAddress("glMapBuffer"); - return MapBuffer(target, access); - } - - static GLboolean CODEGEN_FUNCPTR Switch_UnmapBuffer(GLenum target) - { - UnmapBuffer = (PFNUNMAPBUFFERPROC)IntGetProcAddress("glUnmapBuffer"); - return UnmapBuffer(target); - } - - static void CODEGEN_FUNCPTR Switch_GetBufferParameteriv(GLenum target, GLenum pname, GLint *params) - { - GetBufferParameteriv = (PFNGETBUFFERPARAMETERIVPROC)IntGetProcAddress("glGetBufferParameteriv"); - GetBufferParameteriv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetBufferPointerv(GLenum target, GLenum pname, GLvoid* *params) - { - GetBufferPointerv = (PFNGETBUFFERPOINTERVPROC)IntGetProcAddress("glGetBufferPointerv"); - GetBufferPointerv(target, pname, params); - } - - // Extension: 2.0 - - static void CODEGEN_FUNCPTR Switch_BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) - { - BlendEquationSeparate = (PFNBLENDEQUATIONSEPARATEPROC)IntGetProcAddress("glBlendEquationSeparate"); - BlendEquationSeparate(modeRGB, modeAlpha); - } - - static void CODEGEN_FUNCPTR Switch_DrawBuffers(GLsizei n, const GLenum *bufs) - { - DrawBuffers = (PFNDRAWBUFFERSPROC)IntGetProcAddress("glDrawBuffers"); - DrawBuffers(n, bufs); - } - - static void CODEGEN_FUNCPTR Switch_StencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - { - StencilOpSeparate = (PFNSTENCILOPSEPARATEPROC)IntGetProcAddress("glStencilOpSeparate"); - StencilOpSeparate(face, sfail, dpfail, dppass); - } - - static void CODEGEN_FUNCPTR Switch_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) - { - StencilFuncSeparate = (PFNSTENCILFUNCSEPARATEPROC)IntGetProcAddress("glStencilFuncSeparate"); - StencilFuncSeparate(face, func, ref, mask); - } - - static void CODEGEN_FUNCPTR Switch_StencilMaskSeparate(GLenum face, GLuint mask) - { - StencilMaskSeparate = (PFNSTENCILMASKSEPARATEPROC)IntGetProcAddress("glStencilMaskSeparate"); - StencilMaskSeparate(face, mask); - } - - static void CODEGEN_FUNCPTR Switch_AttachShader(GLuint program, GLuint shader) - { - AttachShader = (PFNATTACHSHADERPROC)IntGetProcAddress("glAttachShader"); - AttachShader(program, shader); - } - - static void CODEGEN_FUNCPTR Switch_BindAttribLocation(GLuint program, GLuint index, const GLchar *name) - { - BindAttribLocation = (PFNBINDATTRIBLOCATIONPROC)IntGetProcAddress("glBindAttribLocation"); - BindAttribLocation(program, index, name); - } - - static void CODEGEN_FUNCPTR Switch_CompileShader(GLuint shader) - { - CompileShader = (PFNCOMPILESHADERPROC)IntGetProcAddress("glCompileShader"); - CompileShader(shader); - } - - static GLuint CODEGEN_FUNCPTR Switch_CreateProgram() - { - CreateProgram = (PFNCREATEPROGRAMPROC)IntGetProcAddress("glCreateProgram"); - return CreateProgram(); - } - - static GLuint CODEGEN_FUNCPTR Switch_CreateShader(GLenum type) - { - CreateShader = (PFNCREATESHADERPROC)IntGetProcAddress("glCreateShader"); - return CreateShader(type); - } - - static void CODEGEN_FUNCPTR Switch_DeleteProgram(GLuint program) - { - DeleteProgram = (PFNDELETEPROGRAMPROC)IntGetProcAddress("glDeleteProgram"); - DeleteProgram(program); - } - - static void CODEGEN_FUNCPTR Switch_DeleteShader(GLuint shader) - { - DeleteShader = (PFNDELETESHADERPROC)IntGetProcAddress("glDeleteShader"); - DeleteShader(shader); - } - - static void CODEGEN_FUNCPTR Switch_DetachShader(GLuint program, GLuint shader) - { - DetachShader = (PFNDETACHSHADERPROC)IntGetProcAddress("glDetachShader"); - DetachShader(program, shader); - } - - static void CODEGEN_FUNCPTR Switch_DisableVertexAttribArray(GLuint index) - { - DisableVertexAttribArray = (PFNDISABLEVERTEXATTRIBARRAYPROC)IntGetProcAddress("glDisableVertexAttribArray"); - DisableVertexAttribArray(index); - } - - static void CODEGEN_FUNCPTR Switch_EnableVertexAttribArray(GLuint index) - { - EnableVertexAttribArray = (PFNENABLEVERTEXATTRIBARRAYPROC)IntGetProcAddress("glEnableVertexAttribArray"); - EnableVertexAttribArray(index); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) - { - GetActiveAttrib = (PFNGETACTIVEATTRIBPROC)IntGetProcAddress("glGetActiveAttrib"); - GetActiveAttrib(program, index, bufSize, length, size, type, name); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) - { - GetActiveUniform = (PFNGETACTIVEUNIFORMPROC)IntGetProcAddress("glGetActiveUniform"); - GetActiveUniform(program, index, bufSize, length, size, type, name); - } - - static void CODEGEN_FUNCPTR Switch_GetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj) - { - GetAttachedShaders = (PFNGETATTACHEDSHADERSPROC)IntGetProcAddress("glGetAttachedShaders"); - GetAttachedShaders(program, maxCount, count, obj); - } - - static GLint CODEGEN_FUNCPTR Switch_GetAttribLocation(GLuint program, const GLchar *name) - { - GetAttribLocation = (PFNGETATTRIBLOCATIONPROC)IntGetProcAddress("glGetAttribLocation"); - return GetAttribLocation(program, name); - } - - static void CODEGEN_FUNCPTR Switch_GetProgramiv(GLuint program, GLenum pname, GLint *params) - { - GetProgramiv = (PFNGETPROGRAMIVPROC)IntGetProcAddress("glGetProgramiv"); - GetProgramiv(program, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) - { - GetProgramInfoLog = (PFNGETPROGRAMINFOLOGPROC)IntGetProcAddress("glGetProgramInfoLog"); - GetProgramInfoLog(program, bufSize, length, infoLog); - } - - static void CODEGEN_FUNCPTR Switch_GetShaderiv(GLuint shader, GLenum pname, GLint *params) - { - GetShaderiv = (PFNGETSHADERIVPROC)IntGetProcAddress("glGetShaderiv"); - GetShaderiv(shader, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) - { - GetShaderInfoLog = (PFNGETSHADERINFOLOGPROC)IntGetProcAddress("glGetShaderInfoLog"); - GetShaderInfoLog(shader, bufSize, length, infoLog); - } - - static void CODEGEN_FUNCPTR Switch_GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) - { - GetShaderSource = (PFNGETSHADERSOURCEPROC)IntGetProcAddress("glGetShaderSource"); - GetShaderSource(shader, bufSize, length, source); - } - - static GLint CODEGEN_FUNCPTR Switch_GetUniformLocation(GLuint program, const GLchar *name) - { - GetUniformLocation = (PFNGETUNIFORMLOCATIONPROC)IntGetProcAddress("glGetUniformLocation"); - return GetUniformLocation(program, name); - } - - static void CODEGEN_FUNCPTR Switch_GetUniformfv(GLuint program, GLint location, GLfloat *params) - { - GetUniformfv = (PFNGETUNIFORMFVPROC)IntGetProcAddress("glGetUniformfv"); - GetUniformfv(program, location, params); - } - - static void CODEGEN_FUNCPTR Switch_GetUniformiv(GLuint program, GLint location, GLint *params) - { - GetUniformiv = (PFNGETUNIFORMIVPROC)IntGetProcAddress("glGetUniformiv"); - GetUniformiv(program, location, params); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params) - { - GetVertexAttribdv = (PFNGETVERTEXATTRIBDVPROC)IntGetProcAddress("glGetVertexAttribdv"); - GetVertexAttribdv(index, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params) - { - GetVertexAttribfv = (PFNGETVERTEXATTRIBFVPROC)IntGetProcAddress("glGetVertexAttribfv"); - GetVertexAttribfv(index, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribiv(GLuint index, GLenum pname, GLint *params) - { - GetVertexAttribiv = (PFNGETVERTEXATTRIBIVPROC)IntGetProcAddress("glGetVertexAttribiv"); - GetVertexAttribiv(index, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* *pointer) - { - GetVertexAttribPointerv = (PFNGETVERTEXATTRIBPOINTERVPROC)IntGetProcAddress("glGetVertexAttribPointerv"); - GetVertexAttribPointerv(index, pname, pointer); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsProgram(GLuint program) - { - IsProgram = (PFNISPROGRAMPROC)IntGetProcAddress("glIsProgram"); - return IsProgram(program); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsShader(GLuint shader) - { - IsShader = (PFNISSHADERPROC)IntGetProcAddress("glIsShader"); - return IsShader(shader); - } - - static void CODEGEN_FUNCPTR Switch_LinkProgram(GLuint program) - { - LinkProgram = (PFNLINKPROGRAMPROC)IntGetProcAddress("glLinkProgram"); - LinkProgram(program); - } - - static void CODEGEN_FUNCPTR Switch_ShaderSource(GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length) - { - ShaderSource = (PFNSHADERSOURCEPROC)IntGetProcAddress("glShaderSource"); - ShaderSource(shader, count, string, length); - } - - static void CODEGEN_FUNCPTR Switch_UseProgram(GLuint program) - { - UseProgram = (PFNUSEPROGRAMPROC)IntGetProcAddress("glUseProgram"); - UseProgram(program); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1f(GLint location, GLfloat v0) - { - Uniform1f = (PFNUNIFORM1FPROC)IntGetProcAddress("glUniform1f"); - Uniform1f(location, v0); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2f(GLint location, GLfloat v0, GLfloat v1) - { - Uniform2f = (PFNUNIFORM2FPROC)IntGetProcAddress("glUniform2f"); - Uniform2f(location, v0, v1); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - { - Uniform3f = (PFNUNIFORM3FPROC)IntGetProcAddress("glUniform3f"); - Uniform3f(location, v0, v1, v2); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - { - Uniform4f = (PFNUNIFORM4FPROC)IntGetProcAddress("glUniform4f"); - Uniform4f(location, v0, v1, v2, v3); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1i(GLint location, GLint v0) - { - Uniform1i = (PFNUNIFORM1IPROC)IntGetProcAddress("glUniform1i"); - Uniform1i(location, v0); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2i(GLint location, GLint v0, GLint v1) - { - Uniform2i = (PFNUNIFORM2IPROC)IntGetProcAddress("glUniform2i"); - Uniform2i(location, v0, v1); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3i(GLint location, GLint v0, GLint v1, GLint v2) - { - Uniform3i = (PFNUNIFORM3IPROC)IntGetProcAddress("glUniform3i"); - Uniform3i(location, v0, v1, v2); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - { - Uniform4i = (PFNUNIFORM4IPROC)IntGetProcAddress("glUniform4i"); - Uniform4i(location, v0, v1, v2, v3); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1fv(GLint location, GLsizei count, const GLfloat *value) - { - Uniform1fv = (PFNUNIFORM1FVPROC)IntGetProcAddress("glUniform1fv"); - Uniform1fv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2fv(GLint location, GLsizei count, const GLfloat *value) - { - Uniform2fv = (PFNUNIFORM2FVPROC)IntGetProcAddress("glUniform2fv"); - Uniform2fv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3fv(GLint location, GLsizei count, const GLfloat *value) - { - Uniform3fv = (PFNUNIFORM3FVPROC)IntGetProcAddress("glUniform3fv"); - Uniform3fv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4fv(GLint location, GLsizei count, const GLfloat *value) - { - Uniform4fv = (PFNUNIFORM4FVPROC)IntGetProcAddress("glUniform4fv"); - Uniform4fv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1iv(GLint location, GLsizei count, const GLint *value) - { - Uniform1iv = (PFNUNIFORM1IVPROC)IntGetProcAddress("glUniform1iv"); - Uniform1iv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2iv(GLint location, GLsizei count, const GLint *value) - { - Uniform2iv = (PFNUNIFORM2IVPROC)IntGetProcAddress("glUniform2iv"); - Uniform2iv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3iv(GLint location, GLsizei count, const GLint *value) - { - Uniform3iv = (PFNUNIFORM3IVPROC)IntGetProcAddress("glUniform3iv"); - Uniform3iv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4iv(GLint location, GLsizei count, const GLint *value) - { - Uniform4iv = (PFNUNIFORM4IVPROC)IntGetProcAddress("glUniform4iv"); - Uniform4iv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix2fv = (PFNUNIFORMMATRIX2FVPROC)IntGetProcAddress("glUniformMatrix2fv"); - UniformMatrix2fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix3fv = (PFNUNIFORMMATRIX3FVPROC)IntGetProcAddress("glUniformMatrix3fv"); - UniformMatrix3fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix4fv = (PFNUNIFORMMATRIX4FVPROC)IntGetProcAddress("glUniformMatrix4fv"); - UniformMatrix4fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_ValidateProgram(GLuint program) - { - ValidateProgram = (PFNVALIDATEPROGRAMPROC)IntGetProcAddress("glValidateProgram"); - ValidateProgram(program); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) - { - VertexAttribPointer = (PFNVERTEXATTRIBPOINTERPROC)IntGetProcAddress("glVertexAttribPointer"); - VertexAttribPointer(index, size, type, normalized, stride, pointer); - } - - // Extension: 2.1 - - static void CODEGEN_FUNCPTR Switch_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix2x3fv = (PFNUNIFORMMATRIX2X3FVPROC)IntGetProcAddress("glUniformMatrix2x3fv"); - UniformMatrix2x3fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix3x2fv = (PFNUNIFORMMATRIX3X2FVPROC)IntGetProcAddress("glUniformMatrix3x2fv"); - UniformMatrix3x2fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix2x4fv = (PFNUNIFORMMATRIX2X4FVPROC)IntGetProcAddress("glUniformMatrix2x4fv"); - UniformMatrix2x4fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix4x2fv = (PFNUNIFORMMATRIX4X2FVPROC)IntGetProcAddress("glUniformMatrix4x2fv"); - UniformMatrix4x2fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix3x4fv = (PFNUNIFORMMATRIX3X4FVPROC)IntGetProcAddress("glUniformMatrix3x4fv"); - UniformMatrix3x4fv(location, count, transpose, value); - } - - static void CODEGEN_FUNCPTR Switch_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - { - UniformMatrix4x3fv = (PFNUNIFORMMATRIX4X3FVPROC)IntGetProcAddress("glUniformMatrix4x3fv"); - UniformMatrix4x3fv(location, count, transpose, value); - } - - // Extension: ARB_vertex_array_object - - static void CODEGEN_FUNCPTR Switch_BindVertexArray(GLuint ren_array) - { - BindVertexArray = (PFNBINDVERTEXARRAYPROC)IntGetProcAddress("glBindVertexArray"); - BindVertexArray(ren_array); - } - - static void CODEGEN_FUNCPTR Switch_DeleteVertexArrays(GLsizei n, const GLuint *arrays) - { - DeleteVertexArrays = (PFNDELETEVERTEXARRAYSPROC)IntGetProcAddress("glDeleteVertexArrays"); - DeleteVertexArrays(n, arrays); - } - - static void CODEGEN_FUNCPTR Switch_GenVertexArrays(GLsizei n, GLuint *arrays) - { - GenVertexArrays = (PFNGENVERTEXARRAYSPROC)IntGetProcAddress("glGenVertexArrays"); - GenVertexArrays(n, arrays); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsVertexArray(GLuint ren_array) - { - IsVertexArray = (PFNISVERTEXARRAYPROC)IntGetProcAddress("glIsVertexArray"); - return IsVertexArray(ren_array); - } - - // Extension: ARB_map_buffer_range - - static GLvoid* CODEGEN_FUNCPTR Switch_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) - { - MapBufferRange = (PFNMAPBUFFERRANGEPROC)IntGetProcAddress("glMapBufferRange"); - return MapBufferRange(target, offset, length, access); - } - - static void CODEGEN_FUNCPTR Switch_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) - { - FlushMappedBufferRange = (PFNFLUSHMAPPEDBUFFERRANGEPROC)IntGetProcAddress("glFlushMappedBufferRange"); - FlushMappedBufferRange(target, offset, length); - } - - // Extension: ARB_framebuffer_object - - static GLboolean CODEGEN_FUNCPTR Switch_IsRenderbuffer(GLuint renderbuffer) - { - IsRenderbuffer = (PFNISRENDERBUFFERPROC)IntGetProcAddress("glIsRenderbuffer"); - return IsRenderbuffer(renderbuffer); - } - - static void CODEGEN_FUNCPTR Switch_BindRenderbuffer(GLenum target, GLuint renderbuffer) - { - BindRenderbuffer = (PFNBINDRENDERBUFFERPROC)IntGetProcAddress("glBindRenderbuffer"); - BindRenderbuffer(target, renderbuffer); - } - - static void CODEGEN_FUNCPTR Switch_DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) - { - DeleteRenderbuffers = (PFNDELETERENDERBUFFERSPROC)IntGetProcAddress("glDeleteRenderbuffers"); - DeleteRenderbuffers(n, renderbuffers); - } - - static void CODEGEN_FUNCPTR Switch_GenRenderbuffers(GLsizei n, GLuint *renderbuffers) - { - GenRenderbuffers = (PFNGENRENDERBUFFERSPROC)IntGetProcAddress("glGenRenderbuffers"); - GenRenderbuffers(n, renderbuffers); - } - - static void CODEGEN_FUNCPTR Switch_RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) - { - RenderbufferStorage = (PFNRENDERBUFFERSTORAGEPROC)IntGetProcAddress("glRenderbufferStorage"); - RenderbufferStorage(target, internalformat, width, height); - } - - static void CODEGEN_FUNCPTR Switch_GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params) - { - GetRenderbufferParameteriv = (PFNGETRENDERBUFFERPARAMETERIVPROC)IntGetProcAddress("glGetRenderbufferParameteriv"); - GetRenderbufferParameteriv(target, pname, params); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsFramebuffer(GLuint framebuffer) - { - IsFramebuffer = (PFNISFRAMEBUFFERPROC)IntGetProcAddress("glIsFramebuffer"); - return IsFramebuffer(framebuffer); - } - - static void CODEGEN_FUNCPTR Switch_BindFramebuffer(GLenum target, GLuint framebuffer) - { - BindFramebuffer = (PFNBINDFRAMEBUFFERPROC)IntGetProcAddress("glBindFramebuffer"); - BindFramebuffer(target, framebuffer); - } - - static void CODEGEN_FUNCPTR Switch_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers) - { - DeleteFramebuffers = (PFNDELETEFRAMEBUFFERSPROC)IntGetProcAddress("glDeleteFramebuffers"); - DeleteFramebuffers(n, framebuffers); - } - - static void CODEGEN_FUNCPTR Switch_GenFramebuffers(GLsizei n, GLuint *framebuffers) - { - GenFramebuffers = (PFNGENFRAMEBUFFERSPROC)IntGetProcAddress("glGenFramebuffers"); - GenFramebuffers(n, framebuffers); - } - - static GLenum CODEGEN_FUNCPTR Switch_CheckFramebufferStatus(GLenum target) - { - CheckFramebufferStatus = (PFNCHECKFRAMEBUFFERSTATUSPROC)IntGetProcAddress("glCheckFramebufferStatus"); - return CheckFramebufferStatus(target); - } - - static void CODEGEN_FUNCPTR Switch_FramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - { - FramebufferTexture1D = (PFNFRAMEBUFFERTEXTURE1DPROC)IntGetProcAddress("glFramebufferTexture1D"); - FramebufferTexture1D(target, attachment, textarget, texture, level); - } - - static void CODEGEN_FUNCPTR Switch_FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - { - FramebufferTexture2D = (PFNFRAMEBUFFERTEXTURE2DPROC)IntGetProcAddress("glFramebufferTexture2D"); - FramebufferTexture2D(target, attachment, textarget, texture, level); - } - - static void CODEGEN_FUNCPTR Switch_FramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) - { - FramebufferTexture3D = (PFNFRAMEBUFFERTEXTURE3DPROC)IntGetProcAddress("glFramebufferTexture3D"); - FramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); - } - - static void CODEGEN_FUNCPTR Switch_FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - { - FramebufferRenderbuffer = (PFNFRAMEBUFFERRENDERBUFFERPROC)IntGetProcAddress("glFramebufferRenderbuffer"); - FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); - } - - static void CODEGEN_FUNCPTR Switch_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params) - { - GetFramebufferAttachmentParameteriv = (PFNGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)IntGetProcAddress("glGetFramebufferAttachmentParameteriv"); - GetFramebufferAttachmentParameteriv(target, attachment, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GenerateMipmap(GLenum target) - { - GenerateMipmap = (PFNGENERATEMIPMAPPROC)IntGetProcAddress("glGenerateMipmap"); - GenerateMipmap(target); - } - - static void CODEGEN_FUNCPTR Switch_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - { - BlitFramebuffer = (PFNBLITFRAMEBUFFERPROC)IntGetProcAddress("glBlitFramebuffer"); - BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); - } - - static void CODEGEN_FUNCPTR Switch_RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) - { - RenderbufferStorageMultisample = (PFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)IntGetProcAddress("glRenderbufferStorageMultisample"); - RenderbufferStorageMultisample(target, samples, internalformat, width, height); - } - - static void CODEGEN_FUNCPTR Switch_FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) - { - FramebufferTextureLayer = (PFNFRAMEBUFFERTEXTURELAYERPROC)IntGetProcAddress("glFramebufferTextureLayer"); - FramebufferTextureLayer(target, attachment, texture, level, layer); - } - - // Extension: 3.0 - - static void CODEGEN_FUNCPTR Switch_ColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) - { - ColorMaski = (PFNCOLORMASKIPROC)IntGetProcAddress("glColorMaski"); - ColorMaski(index, r, g, b, a); - } - - static void CODEGEN_FUNCPTR Switch_GetBooleani_v(GLenum target, GLuint index, GLboolean *data) - { - GetBooleani_v = (PFNGETBOOLEANI_VPROC)IntGetProcAddress("glGetBooleani_v"); - GetBooleani_v(target, index, data); - } - - static void CODEGEN_FUNCPTR Switch_GetIntegeri_v(GLenum target, GLuint index, GLint *data) - { - GetIntegeri_v = (PFNGETINTEGERI_VPROC)IntGetProcAddress("glGetIntegeri_v"); - GetIntegeri_v(target, index, data); - } - - static void CODEGEN_FUNCPTR Switch_Enablei(GLenum target, GLuint index) - { - Enablei = (PFNENABLEIPROC)IntGetProcAddress("glEnablei"); - Enablei(target, index); - } - - static void CODEGEN_FUNCPTR Switch_Disablei(GLenum target, GLuint index) - { - Disablei = (PFNDISABLEIPROC)IntGetProcAddress("glDisablei"); - Disablei(target, index); - } - - static GLboolean CODEGEN_FUNCPTR Switch_IsEnabledi(GLenum target, GLuint index) - { - IsEnabledi = (PFNISENABLEDIPROC)IntGetProcAddress("glIsEnabledi"); - return IsEnabledi(target, index); - } - - static void CODEGEN_FUNCPTR Switch_BeginTransformFeedback(GLenum primitiveMode) - { - BeginTransformFeedback = (PFNBEGINTRANSFORMFEEDBACKPROC)IntGetProcAddress("glBeginTransformFeedback"); - BeginTransformFeedback(primitiveMode); - } - - static void CODEGEN_FUNCPTR Switch_EndTransformFeedback() - { - EndTransformFeedback = (PFNENDTRANSFORMFEEDBACKPROC)IntGetProcAddress("glEndTransformFeedback"); - EndTransformFeedback(); - } - - static void CODEGEN_FUNCPTR Switch_BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - { - BindBufferRange = (PFNBINDBUFFERRANGEPROC)IntGetProcAddress("glBindBufferRange"); - BindBufferRange(target, index, buffer, offset, size); - } - - static void CODEGEN_FUNCPTR Switch_BindBufferBase(GLenum target, GLuint index, GLuint buffer) - { - BindBufferBase = (PFNBINDBUFFERBASEPROC)IntGetProcAddress("glBindBufferBase"); - BindBufferBase(target, index, buffer); - } - - static void CODEGEN_FUNCPTR Switch_TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode) - { - TransformFeedbackVaryings = (PFNTRANSFORMFEEDBACKVARYINGSPROC)IntGetProcAddress("glTransformFeedbackVaryings"); - TransformFeedbackVaryings(program, count, varyings, bufferMode); - } - - static void CODEGEN_FUNCPTR Switch_GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) - { - GetTransformFeedbackVarying = (PFNGETTRANSFORMFEEDBACKVARYINGPROC)IntGetProcAddress("glGetTransformFeedbackVarying"); - GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name); - } - - static void CODEGEN_FUNCPTR Switch_ClampColor(GLenum target, GLenum clamp) - { - ClampColor = (PFNCLAMPCOLORPROC)IntGetProcAddress("glClampColor"); - ClampColor(target, clamp); - } - - static void CODEGEN_FUNCPTR Switch_BeginConditionalRender(GLuint id, GLenum mode) - { - BeginConditionalRender = (PFNBEGINCONDITIONALRENDERPROC)IntGetProcAddress("glBeginConditionalRender"); - BeginConditionalRender(id, mode); - } - - static void CODEGEN_FUNCPTR Switch_EndConditionalRender() - { - EndConditionalRender = (PFNENDCONDITIONALRENDERPROC)IntGetProcAddress("glEndConditionalRender"); - EndConditionalRender(); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - { - VertexAttribIPointer = (PFNVERTEXATTRIBIPOINTERPROC)IntGetProcAddress("glVertexAttribIPointer"); - VertexAttribIPointer(index, size, type, stride, pointer); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params) - { - GetVertexAttribIiv = (PFNGETVERTEXATTRIBIIVPROC)IntGetProcAddress("glGetVertexAttribIiv"); - GetVertexAttribIiv(index, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params) - { - GetVertexAttribIuiv = (PFNGETVERTEXATTRIBIUIVPROC)IntGetProcAddress("glGetVertexAttribIuiv"); - GetVertexAttribIuiv(index, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI1i(GLuint index, GLint x) - { - VertexAttribI1i = (PFNVERTEXATTRIBI1IPROC)IntGetProcAddress("glVertexAttribI1i"); - VertexAttribI1i(index, x); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI2i(GLuint index, GLint x, GLint y) - { - VertexAttribI2i = (PFNVERTEXATTRIBI2IPROC)IntGetProcAddress("glVertexAttribI2i"); - VertexAttribI2i(index, x, y); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) - { - VertexAttribI3i = (PFNVERTEXATTRIBI3IPROC)IntGetProcAddress("glVertexAttribI3i"); - VertexAttribI3i(index, x, y, z); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) - { - VertexAttribI4i = (PFNVERTEXATTRIBI4IPROC)IntGetProcAddress("glVertexAttribI4i"); - VertexAttribI4i(index, x, y, z, w); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI1ui(GLuint index, GLuint x) - { - VertexAttribI1ui = (PFNVERTEXATTRIBI1UIPROC)IntGetProcAddress("glVertexAttribI1ui"); - VertexAttribI1ui(index, x); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI2ui(GLuint index, GLuint x, GLuint y) - { - VertexAttribI2ui = (PFNVERTEXATTRIBI2UIPROC)IntGetProcAddress("glVertexAttribI2ui"); - VertexAttribI2ui(index, x, y); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) - { - VertexAttribI3ui = (PFNVERTEXATTRIBI3UIPROC)IntGetProcAddress("glVertexAttribI3ui"); - VertexAttribI3ui(index, x, y, z); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - { - VertexAttribI4ui = (PFNVERTEXATTRIBI4UIPROC)IntGetProcAddress("glVertexAttribI4ui"); - VertexAttribI4ui(index, x, y, z, w); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI1iv(GLuint index, const GLint *v) - { - VertexAttribI1iv = (PFNVERTEXATTRIBI1IVPROC)IntGetProcAddress("glVertexAttribI1iv"); - VertexAttribI1iv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI2iv(GLuint index, const GLint *v) - { - VertexAttribI2iv = (PFNVERTEXATTRIBI2IVPROC)IntGetProcAddress("glVertexAttribI2iv"); - VertexAttribI2iv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI3iv(GLuint index, const GLint *v) - { - VertexAttribI3iv = (PFNVERTEXATTRIBI3IVPROC)IntGetProcAddress("glVertexAttribI3iv"); - VertexAttribI3iv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4iv(GLuint index, const GLint *v) - { - VertexAttribI4iv = (PFNVERTEXATTRIBI4IVPROC)IntGetProcAddress("glVertexAttribI4iv"); - VertexAttribI4iv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI1uiv(GLuint index, const GLuint *v) - { - VertexAttribI1uiv = (PFNVERTEXATTRIBI1UIVPROC)IntGetProcAddress("glVertexAttribI1uiv"); - VertexAttribI1uiv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI2uiv(GLuint index, const GLuint *v) - { - VertexAttribI2uiv = (PFNVERTEXATTRIBI2UIVPROC)IntGetProcAddress("glVertexAttribI2uiv"); - VertexAttribI2uiv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI3uiv(GLuint index, const GLuint *v) - { - VertexAttribI3uiv = (PFNVERTEXATTRIBI3UIVPROC)IntGetProcAddress("glVertexAttribI3uiv"); - VertexAttribI3uiv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4uiv(GLuint index, const GLuint *v) - { - VertexAttribI4uiv = (PFNVERTEXATTRIBI4UIVPROC)IntGetProcAddress("glVertexAttribI4uiv"); - VertexAttribI4uiv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4bv(GLuint index, const GLbyte *v) - { - VertexAttribI4bv = (PFNVERTEXATTRIBI4BVPROC)IntGetProcAddress("glVertexAttribI4bv"); - VertexAttribI4bv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4sv(GLuint index, const GLshort *v) - { - VertexAttribI4sv = (PFNVERTEXATTRIBI4SVPROC)IntGetProcAddress("glVertexAttribI4sv"); - VertexAttribI4sv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4ubv(GLuint index, const GLubyte *v) - { - VertexAttribI4ubv = (PFNVERTEXATTRIBI4UBVPROC)IntGetProcAddress("glVertexAttribI4ubv"); - VertexAttribI4ubv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_VertexAttribI4usv(GLuint index, const GLushort *v) - { - VertexAttribI4usv = (PFNVERTEXATTRIBI4USVPROC)IntGetProcAddress("glVertexAttribI4usv"); - VertexAttribI4usv(index, v); - } - - static void CODEGEN_FUNCPTR Switch_GetUniformuiv(GLuint program, GLint location, GLuint *params) - { - GetUniformuiv = (PFNGETUNIFORMUIVPROC)IntGetProcAddress("glGetUniformuiv"); - GetUniformuiv(program, location, params); - } - - static void CODEGEN_FUNCPTR Switch_BindFragDataLocation(GLuint program, GLuint color, const GLchar *name) - { - BindFragDataLocation = (PFNBINDFRAGDATALOCATIONPROC)IntGetProcAddress("glBindFragDataLocation"); - BindFragDataLocation(program, color, name); - } - - static GLint CODEGEN_FUNCPTR Switch_GetFragDataLocation(GLuint program, const GLchar *name) - { - GetFragDataLocation = (PFNGETFRAGDATALOCATIONPROC)IntGetProcAddress("glGetFragDataLocation"); - return GetFragDataLocation(program, name); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1ui(GLint location, GLuint v0) - { - Uniform1ui = (PFNUNIFORM1UIPROC)IntGetProcAddress("glUniform1ui"); - Uniform1ui(location, v0); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2ui(GLint location, GLuint v0, GLuint v1) - { - Uniform2ui = (PFNUNIFORM2UIPROC)IntGetProcAddress("glUniform2ui"); - Uniform2ui(location, v0, v1); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) - { - Uniform3ui = (PFNUNIFORM3UIPROC)IntGetProcAddress("glUniform3ui"); - Uniform3ui(location, v0, v1, v2); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - { - Uniform4ui = (PFNUNIFORM4UIPROC)IntGetProcAddress("glUniform4ui"); - Uniform4ui(location, v0, v1, v2, v3); - } - - static void CODEGEN_FUNCPTR Switch_Uniform1uiv(GLint location, GLsizei count, const GLuint *value) - { - Uniform1uiv = (PFNUNIFORM1UIVPROC)IntGetProcAddress("glUniform1uiv"); - Uniform1uiv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform2uiv(GLint location, GLsizei count, const GLuint *value) - { - Uniform2uiv = (PFNUNIFORM2UIVPROC)IntGetProcAddress("glUniform2uiv"); - Uniform2uiv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform3uiv(GLint location, GLsizei count, const GLuint *value) - { - Uniform3uiv = (PFNUNIFORM3UIVPROC)IntGetProcAddress("glUniform3uiv"); - Uniform3uiv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_Uniform4uiv(GLint location, GLsizei count, const GLuint *value) - { - Uniform4uiv = (PFNUNIFORM4UIVPROC)IntGetProcAddress("glUniform4uiv"); - Uniform4uiv(location, count, value); - } - - static void CODEGEN_FUNCPTR Switch_TexParameterIiv(GLenum target, GLenum pname, const GLint *params) - { - TexParameterIiv = (PFNTEXPARAMETERIIVPROC)IntGetProcAddress("glTexParameterIiv"); - TexParameterIiv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_TexParameterIuiv(GLenum target, GLenum pname, const GLuint *params) - { - TexParameterIuiv = (PFNTEXPARAMETERIUIVPROC)IntGetProcAddress("glTexParameterIuiv"); - TexParameterIuiv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetTexParameterIiv(GLenum target, GLenum pname, GLint *params) - { - GetTexParameterIiv = (PFNGETTEXPARAMETERIIVPROC)IntGetProcAddress("glGetTexParameterIiv"); - GetTexParameterIiv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params) - { - GetTexParameterIuiv = (PFNGETTEXPARAMETERIUIVPROC)IntGetProcAddress("glGetTexParameterIuiv"); - GetTexParameterIuiv(target, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value) - { - ClearBufferiv = (PFNCLEARBUFFERIVPROC)IntGetProcAddress("glClearBufferiv"); - ClearBufferiv(buffer, drawbuffer, value); - } - - static void CODEGEN_FUNCPTR Switch_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value) - { - ClearBufferuiv = (PFNCLEARBUFFERUIVPROC)IntGetProcAddress("glClearBufferuiv"); - ClearBufferuiv(buffer, drawbuffer, value); - } - - static void CODEGEN_FUNCPTR Switch_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value) - { - ClearBufferfv = (PFNCLEARBUFFERFVPROC)IntGetProcAddress("glClearBufferfv"); - ClearBufferfv(buffer, drawbuffer, value); - } - - static void CODEGEN_FUNCPTR Switch_ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) - { - ClearBufferfi = (PFNCLEARBUFFERFIPROC)IntGetProcAddress("glClearBufferfi"); - ClearBufferfi(buffer, drawbuffer, depth, stencil); - } - - static const GLubyte * CODEGEN_FUNCPTR Switch_GetStringi(GLenum name, GLuint index) - { - GetStringi = (PFNGETSTRINGIPROC)IntGetProcAddress("glGetStringi"); - return GetStringi(name, index); - } - - // Extension: ARB_uniform_buffer_object - - static void CODEGEN_FUNCPTR Switch_GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices) - { - GetUniformIndices = (PFNGETUNIFORMINDICESPROC)IntGetProcAddress("glGetUniformIndices"); - GetUniformIndices(program, uniformCount, uniformNames, uniformIndices); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params) - { - GetActiveUniformsiv = (PFNGETACTIVEUNIFORMSIVPROC)IntGetProcAddress("glGetActiveUniformsiv"); - GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName) - { - GetActiveUniformName = (PFNGETACTIVEUNIFORMNAMEPROC)IntGetProcAddress("glGetActiveUniformName"); - GetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); - } - - static GLuint CODEGEN_FUNCPTR Switch_GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName) - { - GetUniformBlockIndex = (PFNGETUNIFORMBLOCKINDEXPROC)IntGetProcAddress("glGetUniformBlockIndex"); - return GetUniformBlockIndex(program, uniformBlockName); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params) - { - GetActiveUniformBlockiv = (PFNGETACTIVEUNIFORMBLOCKIVPROC)IntGetProcAddress("glGetActiveUniformBlockiv"); - GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); - } - - static void CODEGEN_FUNCPTR Switch_GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) - { - GetActiveUniformBlockName = (PFNGETACTIVEUNIFORMBLOCKNAMEPROC)IntGetProcAddress("glGetActiveUniformBlockName"); - GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); - } - - static void CODEGEN_FUNCPTR Switch_UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) - { - UniformBlockBinding = (PFNUNIFORMBLOCKBINDINGPROC)IntGetProcAddress("glUniformBlockBinding"); - UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); - } - - // Extension: ARB_copy_buffer - - static void CODEGEN_FUNCPTR Switch_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) - { - CopyBufferSubData = (PFNCOPYBUFFERSUBDATAPROC)IntGetProcAddress("glCopyBufferSubData"); - CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); - } - - // Extension: 3.1 - - static void CODEGEN_FUNCPTR Switch_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) - { - DrawArraysInstanced = (PFNDRAWARRAYSINSTANCEDPROC)IntGetProcAddress("glDrawArraysInstanced"); - DrawArraysInstanced(mode, first, count, instancecount); - } - - static void CODEGEN_FUNCPTR Switch_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount) - { - DrawElementsInstanced = (PFNDRAWELEMENTSINSTANCEDPROC)IntGetProcAddress("glDrawElementsInstanced"); - DrawElementsInstanced(mode, count, type, indices, instancecount); - } - - static void CODEGEN_FUNCPTR Switch_TexBuffer(GLenum target, GLenum internalformat, GLuint buffer) - { - TexBuffer = (PFNTEXBUFFERPROC)IntGetProcAddress("glTexBuffer"); - TexBuffer(target, internalformat, buffer); - } - - static void CODEGEN_FUNCPTR Switch_PrimitiveRestartIndex(GLuint index) - { - PrimitiveRestartIndex = (PFNPRIMITIVERESTARTINDEXPROC)IntGetProcAddress("glPrimitiveRestartIndex"); - PrimitiveRestartIndex(index); - } - - // Legacy - - static void CODEGEN_FUNCPTR Switch_EnableClientState(GLenum cap) - { - EnableClientState = (PFNENABLECLIENTSTATEPROC)IntGetProcAddress("glEnableClientState"); - EnableClientState(cap); - } - - static void CODEGEN_FUNCPTR Switch_DisableClientState(GLenum cap) - { - DisableClientState = (PFNDISABLECLIENTSTATEPROC)IntGetProcAddress("glDisableClientState"); - DisableClientState(cap); - } - - static void CODEGEN_FUNCPTR Switch_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) - { - VertexPointer = (PFNVERTEXPOINTERPROC)IntGetProcAddress("glVertexPointer"); - VertexPointer(size, type, stride, ptr); - } - - static void CODEGEN_FUNCPTR Switch_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr) - { - NormalPointer = (PFNNORMALPOINTERPROC)IntGetProcAddress("glNormalPointer"); - NormalPointer(type, stride, ptr); - } - - static void CODEGEN_FUNCPTR Switch_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) - { - ColorPointer = (PFNCOLORPOINTERPROC)IntGetProcAddress("glColorPointer"); - ColorPointer(size, type, stride, ptr); - } - - static void CODEGEN_FUNCPTR Switch_TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr) - { - TexCoordPointer = (PFNTEXCOORDPOINTERPROC)IntGetProcAddress("glTexCoordPointer"); - TexCoordPointer(size, type, stride, ptr); - } - - static void CODEGEN_FUNCPTR Switch_TexEnvi(GLenum target, GLenum pname, GLint param) - { - TexEnvi = (PFNTEXENVIPROC)IntGetProcAddress("glTexEnvi"); - TexEnvi(target, pname, param); - } - - static void CODEGEN_FUNCPTR Switch_MatrixMode(GLenum mode) - { - MatrixMode = (PFNMATRIXMODEPROC)IntGetProcAddress("glMatrixMode"); - MatrixMode(mode); - } - - static void CODEGEN_FUNCPTR Switch_LoadIdentity(void) - { - LoadIdentity = (PFNLOADIDENTITYPROC)IntGetProcAddress("glLoadIdentity"); - LoadIdentity(); - } - - static void CODEGEN_FUNCPTR Switch_Ortho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val) - { - Ortho = (PFNORTHOPROC)IntGetProcAddress("glOrtho"); - Ortho(left, right, bottom, top, near_val, far_val); - } - - static void CODEGEN_FUNCPTR Switch_Color3d(GLdouble red, GLdouble green, GLdouble blue) - { - Color3d = (PFNCOLOR3DPROC)IntGetProcAddress("glColor3d"); - Color3d(red, green, blue); - } - - struct InitializeVariables - { - InitializeVariables() - { - // Extension: 1.1 - CullFace = Switch_CullFace; - FrontFace = Switch_FrontFace; - Hint = Switch_Hint; - LineWidth = Switch_LineWidth; - PointSize = Switch_PointSize; - PolygonMode = Switch_PolygonMode; - Scissor = Switch_Scissor; - TexParameterf = Switch_TexParameterf; - TexParameterfv = Switch_TexParameterfv; - TexParameteri = Switch_TexParameteri; - TexParameteriv = Switch_TexParameteriv; - TexImage1D = Switch_TexImage1D; - TexImage2D = Switch_TexImage2D; - DrawBuffer = Switch_DrawBuffer; - Clear = Switch_Clear; - ClearColor = Switch_ClearColor; - ClearStencil = Switch_ClearStencil; - ClearDepth = Switch_ClearDepth; - StencilMask = Switch_StencilMask; - ColorMask = Switch_ColorMask; - DepthMask = Switch_DepthMask; - Disable = Switch_Disable; - Enable = Switch_Enable; - Finish = Switch_Finish; - Flush = Switch_Flush; - BlendFunc = Switch_BlendFunc; - LogicOp = Switch_LogicOp; - StencilFunc = Switch_StencilFunc; - StencilOp = Switch_StencilOp; - DepthFunc = Switch_DepthFunc; - PixelStoref = Switch_PixelStoref; - PixelStorei = Switch_PixelStorei; - ReadBuffer = Switch_ReadBuffer; - ReadPixels = Switch_ReadPixels; - GetBooleanv = Switch_GetBooleanv; - GetDoublev = Switch_GetDoublev; - GetError = Switch_GetError; - GetFloatv = Switch_GetFloatv; - GetIntegerv = Switch_GetIntegerv; - GetString = Switch_GetString; - GetTexImage = Switch_GetTexImage; - GetTexParameterfv = Switch_GetTexParameterfv; - GetTexParameteriv = Switch_GetTexParameteriv; - GetTexLevelParameterfv = Switch_GetTexLevelParameterfv; - GetTexLevelParameteriv = Switch_GetTexLevelParameteriv; - IsEnabled = Switch_IsEnabled; - DepthRange = Switch_DepthRange; - Viewport = Switch_Viewport; - DrawArrays = Switch_DrawArrays; - DrawElements = Switch_DrawElements; - GetPointerv = Switch_GetPointerv; - PolygonOffset = Switch_PolygonOffset; - CopyTexImage1D = Switch_CopyTexImage1D; - CopyTexImage2D = Switch_CopyTexImage2D; - CopyTexSubImage1D = Switch_CopyTexSubImage1D; - CopyTexSubImage2D = Switch_CopyTexSubImage2D; - TexSubImage1D = Switch_TexSubImage1D; - TexSubImage2D = Switch_TexSubImage2D; - BindTexture = Switch_BindTexture; - DeleteTextures = Switch_DeleteTextures; - GenTextures = Switch_GenTextures; - IsTexture = Switch_IsTexture; - Indexub = Switch_Indexub; - Indexubv = Switch_Indexubv; - - // Extension: 1.2 - BlendColor = Switch_BlendColor; - BlendEquation = Switch_BlendEquation; - DrawRangeElements = Switch_DrawRangeElements; - TexSubImage3D = Switch_TexSubImage3D; - CopyTexSubImage3D = Switch_CopyTexSubImage3D; - - // Extension: 1.3 - ActiveTexture = Switch_ActiveTexture; - SampleCoverage = Switch_SampleCoverage; - CompressedTexImage3D = Switch_CompressedTexImage3D; - CompressedTexImage2D = Switch_CompressedTexImage2D; - CompressedTexImage1D = Switch_CompressedTexImage1D; - CompressedTexSubImage3D = Switch_CompressedTexSubImage3D; - CompressedTexSubImage2D = Switch_CompressedTexSubImage2D; - CompressedTexSubImage1D = Switch_CompressedTexSubImage1D; - GetCompressedTexImage = Switch_GetCompressedTexImage; - - // Extension: 1.4 - BlendFuncSeparate = Switch_BlendFuncSeparate; - MultiDrawArrays = Switch_MultiDrawArrays; - MultiDrawElements = Switch_MultiDrawElements; - PointParameterf = Switch_PointParameterf; - PointParameterfv = Switch_PointParameterfv; - PointParameteri = Switch_PointParameteri; - PointParameteriv = Switch_PointParameteriv; - - // Extension: 1.5 - GenQueries = Switch_GenQueries; - DeleteQueries = Switch_DeleteQueries; - IsQuery = Switch_IsQuery; - BeginQuery = Switch_BeginQuery; - EndQuery = Switch_EndQuery; - GetQueryiv = Switch_GetQueryiv; - GetQueryObjectiv = Switch_GetQueryObjectiv; - GetQueryObjectuiv = Switch_GetQueryObjectuiv; - BindBuffer = Switch_BindBuffer; - DeleteBuffers = Switch_DeleteBuffers; - GenBuffers = Switch_GenBuffers; - IsBuffer = Switch_IsBuffer; - BufferData = Switch_BufferData; - BufferSubData = Switch_BufferSubData; - GetBufferSubData = Switch_GetBufferSubData; - MapBuffer = Switch_MapBuffer; - UnmapBuffer = Switch_UnmapBuffer; - GetBufferParameteriv = Switch_GetBufferParameteriv; - GetBufferPointerv = Switch_GetBufferPointerv; - - // Extension: 2.0 - BlendEquationSeparate = Switch_BlendEquationSeparate; - DrawBuffers = Switch_DrawBuffers; - StencilOpSeparate = Switch_StencilOpSeparate; - StencilFuncSeparate = Switch_StencilFuncSeparate; - StencilMaskSeparate = Switch_StencilMaskSeparate; - AttachShader = Switch_AttachShader; - BindAttribLocation = Switch_BindAttribLocation; - CompileShader = Switch_CompileShader; - CreateProgram = Switch_CreateProgram; - CreateShader = Switch_CreateShader; - DeleteProgram = Switch_DeleteProgram; - DeleteShader = Switch_DeleteShader; - DetachShader = Switch_DetachShader; - DisableVertexAttribArray = Switch_DisableVertexAttribArray; - EnableVertexAttribArray = Switch_EnableVertexAttribArray; - GetActiveAttrib = Switch_GetActiveAttrib; - GetActiveUniform = Switch_GetActiveUniform; - GetAttachedShaders = Switch_GetAttachedShaders; - GetAttribLocation = Switch_GetAttribLocation; - GetProgramiv = Switch_GetProgramiv; - GetProgramInfoLog = Switch_GetProgramInfoLog; - GetShaderiv = Switch_GetShaderiv; - GetShaderInfoLog = Switch_GetShaderInfoLog; - GetShaderSource = Switch_GetShaderSource; - GetUniformLocation = Switch_GetUniformLocation; - GetUniformfv = Switch_GetUniformfv; - GetUniformiv = Switch_GetUniformiv; - GetVertexAttribdv = Switch_GetVertexAttribdv; - GetVertexAttribfv = Switch_GetVertexAttribfv; - GetVertexAttribiv = Switch_GetVertexAttribiv; - GetVertexAttribPointerv = Switch_GetVertexAttribPointerv; - IsProgram = Switch_IsProgram; - IsShader = Switch_IsShader; - LinkProgram = Switch_LinkProgram; - ShaderSource = Switch_ShaderSource; - UseProgram = Switch_UseProgram; - Uniform1f = Switch_Uniform1f; - Uniform2f = Switch_Uniform2f; - Uniform3f = Switch_Uniform3f; - Uniform4f = Switch_Uniform4f; - Uniform1i = Switch_Uniform1i; - Uniform2i = Switch_Uniform2i; - Uniform3i = Switch_Uniform3i; - Uniform4i = Switch_Uniform4i; - Uniform1fv = Switch_Uniform1fv; - Uniform2fv = Switch_Uniform2fv; - Uniform3fv = Switch_Uniform3fv; - Uniform4fv = Switch_Uniform4fv; - Uniform1iv = Switch_Uniform1iv; - Uniform2iv = Switch_Uniform2iv; - Uniform3iv = Switch_Uniform3iv; - Uniform4iv = Switch_Uniform4iv; - UniformMatrix2fv = Switch_UniformMatrix2fv; - UniformMatrix3fv = Switch_UniformMatrix3fv; - UniformMatrix4fv = Switch_UniformMatrix4fv; - ValidateProgram = Switch_ValidateProgram; - VertexAttribPointer = Switch_VertexAttribPointer; - - // Extension: 2.1 - UniformMatrix2x3fv = Switch_UniformMatrix2x3fv; - UniformMatrix3x2fv = Switch_UniformMatrix3x2fv; - UniformMatrix2x4fv = Switch_UniformMatrix2x4fv; - UniformMatrix4x2fv = Switch_UniformMatrix4x2fv; - UniformMatrix3x4fv = Switch_UniformMatrix3x4fv; - UniformMatrix4x3fv = Switch_UniformMatrix4x3fv; - - // Extension: ARB_vertex_array_object - BindVertexArray = Switch_BindVertexArray; - DeleteVertexArrays = Switch_DeleteVertexArrays; - GenVertexArrays = Switch_GenVertexArrays; - IsVertexArray = Switch_IsVertexArray; - - // Extension: ARB_map_buffer_range - MapBufferRange = Switch_MapBufferRange; - FlushMappedBufferRange = Switch_FlushMappedBufferRange; - - // Extension: ARB_framebuffer_object - IsRenderbuffer = Switch_IsRenderbuffer; - BindRenderbuffer = Switch_BindRenderbuffer; - DeleteRenderbuffers = Switch_DeleteRenderbuffers; - GenRenderbuffers = Switch_GenRenderbuffers; - RenderbufferStorage = Switch_RenderbufferStorage; - GetRenderbufferParameteriv = Switch_GetRenderbufferParameteriv; - IsFramebuffer = Switch_IsFramebuffer; - BindFramebuffer = Switch_BindFramebuffer; - DeleteFramebuffers = Switch_DeleteFramebuffers; - GenFramebuffers = Switch_GenFramebuffers; - CheckFramebufferStatus = Switch_CheckFramebufferStatus; - FramebufferTexture1D = Switch_FramebufferTexture1D; - FramebufferTexture2D = Switch_FramebufferTexture2D; - FramebufferTexture3D = Switch_FramebufferTexture3D; - FramebufferRenderbuffer = Switch_FramebufferRenderbuffer; - GetFramebufferAttachmentParameteriv = Switch_GetFramebufferAttachmentParameteriv; - GenerateMipmap = Switch_GenerateMipmap; - BlitFramebuffer = Switch_BlitFramebuffer; - RenderbufferStorageMultisample = Switch_RenderbufferStorageMultisample; - FramebufferTextureLayer = Switch_FramebufferTextureLayer; - - // Extension: 3.0 - ColorMaski = Switch_ColorMaski; - GetBooleani_v = Switch_GetBooleani_v; - GetIntegeri_v = Switch_GetIntegeri_v; - Enablei = Switch_Enablei; - Disablei = Switch_Disablei; - IsEnabledi = Switch_IsEnabledi; - BeginTransformFeedback = Switch_BeginTransformFeedback; - EndTransformFeedback = Switch_EndTransformFeedback; - BindBufferRange = Switch_BindBufferRange; - BindBufferBase = Switch_BindBufferBase; - TransformFeedbackVaryings = Switch_TransformFeedbackVaryings; - GetTransformFeedbackVarying = Switch_GetTransformFeedbackVarying; - ClampColor = Switch_ClampColor; - BeginConditionalRender = Switch_BeginConditionalRender; - EndConditionalRender = Switch_EndConditionalRender; - VertexAttribIPointer = Switch_VertexAttribIPointer; - GetVertexAttribIiv = Switch_GetVertexAttribIiv; - GetVertexAttribIuiv = Switch_GetVertexAttribIuiv; - VertexAttribI1i = Switch_VertexAttribI1i; - VertexAttribI2i = Switch_VertexAttribI2i; - VertexAttribI3i = Switch_VertexAttribI3i; - VertexAttribI4i = Switch_VertexAttribI4i; - VertexAttribI1ui = Switch_VertexAttribI1ui; - VertexAttribI2ui = Switch_VertexAttribI2ui; - VertexAttribI3ui = Switch_VertexAttribI3ui; - VertexAttribI4ui = Switch_VertexAttribI4ui; - VertexAttribI1iv = Switch_VertexAttribI1iv; - VertexAttribI2iv = Switch_VertexAttribI2iv; - VertexAttribI3iv = Switch_VertexAttribI3iv; - VertexAttribI4iv = Switch_VertexAttribI4iv; - VertexAttribI1uiv = Switch_VertexAttribI1uiv; - VertexAttribI2uiv = Switch_VertexAttribI2uiv; - VertexAttribI3uiv = Switch_VertexAttribI3uiv; - VertexAttribI4uiv = Switch_VertexAttribI4uiv; - VertexAttribI4bv = Switch_VertexAttribI4bv; - VertexAttribI4sv = Switch_VertexAttribI4sv; - VertexAttribI4ubv = Switch_VertexAttribI4ubv; - VertexAttribI4usv = Switch_VertexAttribI4usv; - GetUniformuiv = Switch_GetUniformuiv; - BindFragDataLocation = Switch_BindFragDataLocation; - GetFragDataLocation = Switch_GetFragDataLocation; - Uniform1ui = Switch_Uniform1ui; - Uniform2ui = Switch_Uniform2ui; - Uniform3ui = Switch_Uniform3ui; - Uniform4ui = Switch_Uniform4ui; - Uniform1uiv = Switch_Uniform1uiv; - Uniform2uiv = Switch_Uniform2uiv; - Uniform3uiv = Switch_Uniform3uiv; - Uniform4uiv = Switch_Uniform4uiv; - TexParameterIiv = Switch_TexParameterIiv; - TexParameterIuiv = Switch_TexParameterIuiv; - GetTexParameterIiv = Switch_GetTexParameterIiv; - GetTexParameterIuiv = Switch_GetTexParameterIuiv; - ClearBufferiv = Switch_ClearBufferiv; - ClearBufferuiv = Switch_ClearBufferuiv; - ClearBufferfv = Switch_ClearBufferfv; - ClearBufferfi = Switch_ClearBufferfi; - GetStringi = Switch_GetStringi; - - // Extension: ARB_uniform_buffer_object - GetUniformIndices = Switch_GetUniformIndices; - GetActiveUniformsiv = Switch_GetActiveUniformsiv; - GetActiveUniformName = Switch_GetActiveUniformName; - GetUniformBlockIndex = Switch_GetUniformBlockIndex; - GetActiveUniformBlockiv = Switch_GetActiveUniformBlockiv; - GetActiveUniformBlockName = Switch_GetActiveUniformBlockName; - UniformBlockBinding = Switch_UniformBlockBinding; - - // Extension: ARB_copy_buffer - CopyBufferSubData = Switch_CopyBufferSubData; - - // Extension: 3.1 - DrawArraysInstanced = Switch_DrawArraysInstanced; - DrawElementsInstanced = Switch_DrawElementsInstanced; - TexBuffer = Switch_TexBuffer; - PrimitiveRestartIndex = Switch_PrimitiveRestartIndex; - - // Legacy - EnableClientState = Switch_EnableClientState; - DisableClientState = Switch_DisableClientState; - VertexPointer = Switch_VertexPointer; - NormalPointer = Switch_NormalPointer; - ColorPointer = Switch_ColorPointer; - TexCoordPointer = Switch_TexCoordPointer; - TexEnvi = Switch_TexEnvi; - MatrixMode = Switch_MatrixMode; - LoadIdentity = Switch_LoadIdentity; - Ortho = Switch_Ortho; - Color3d = Switch_Color3d; - } - }; - - InitializeVariables g_initVariables; -} diff --git a/modules/core/src/gl_core_3_1.hpp b/modules/core/src/gl_core_3_1.hpp deleted file mode 100644 index f863901..0000000 --- a/modules/core/src/gl_core_3_1.hpp +++ /dev/null @@ -1,1373 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef OPENGL_NOLOAD_STYLE_HPP -#define OPENGL_NOLOAD_STYLE_HPP - -#if defined(__gl_h_) || defined(__GL_H__) -#error Attempt to include auto-generated header after including gl.h -#endif -#if defined(__glext_h_) || defined(__GLEXT_H_) -#error Attempt to include auto-generated header after including glext.h -#endif -#if defined(__gl_ATI_h_) -#error Attempt to include auto-generated header after including glATI.h -#endif - -#define __gl_h_ -#define __GL_H__ -#define __glext_h_ -#define __GLEXT_H_ -#define __gl_ATI_h_ - -#ifndef APIENTRY - #if defined(__MINGW32__) - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN 1 - #endif - #ifndef NOMINMAX - #define NOMINMAX - #endif - #include - #elif (defined(_MSC_VER) && _MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN 1 - #endif - #ifndef NOMINMAX - #define NOMINMAX - #endif - #include - #else - #define APIENTRY - #endif -#endif // APIENTRY - -#ifndef CODEGEN_FUNCPTR - #define CODEGEN_REMOVE_FUNCPTR - #if defined(_WIN32) - #define CODEGEN_FUNCPTR APIENTRY - #else - #define CODEGEN_FUNCPTR - #endif -#endif // CODEGEN_FUNCPTR - -#ifndef GL_LOAD_GEN_BASIC_OPENGL_TYPEDEFS -#define GL_LOAD_GEN_BASIC_OPENGL_TYPEDEFS - typedef unsigned int GLenum; - typedef unsigned char GLboolean; - typedef unsigned int GLbitfield; - typedef signed char GLbyte; - typedef short GLshort; - typedef int GLint; - typedef int GLsizei; - typedef unsigned char GLubyte; - typedef unsigned short GLushort; - typedef unsigned int GLuint; - typedef float GLfloat; - typedef float GLclampf; - typedef double GLdouble; - typedef double GLclampd; - #define GLvoid void -#endif // GL_LOAD_GEN_BASIC_OPENGL_TYPEDEFS - -#include - -#ifndef GL_VERSION_2_0 - // GL type for program/shader text - typedef char GLchar; -#endif - -#ifndef GL_VERSION_1_5 - // GL types for handling large vertex buffer objects - typedef ptrdiff_t GLintptr; - typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object - // GL types for handling large vertex buffer objects - typedef ptrdiff_t GLintptrARB; - typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects - // GL types for program/shader text and shader object handles - typedef char GLcharARB; - typedef unsigned int GLhandleARB; -#endif - -// GL type for "half" precision (s10e5) float data in host memory -#ifndef GL_ARB_half_float_pixel - typedef unsigned short GLhalfARB; -#endif -#ifndef GL_NV_half_float - typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED - // This code block is duplicated in glxext.h, so must be protected - #define GLEXT_64_TYPES_DEFINED - - // Define int32_t, int64_t, and uint64_t types for UST/MSC - // (as used in the GL_EXT_timer_query extension) - #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #include - #elif defined(__sun__) || defined(__digital__) - #include - #if defined(__STDC__) - #if defined(__arch64__) || defined(_LP64) - typedef long int int64_t; - typedef unsigned long int uint64_t; - #else - typedef long long int int64_t; - typedef unsigned long long int uint64_t; - #endif // __arch64__ - #endif // __STDC__ - #elif defined( __VMS ) || defined(__sgi) - #include - #elif defined(__SCO__) || defined(__USLC__) - #include - #elif defined(__UNIXOS2__) || defined(__SOL64__) - typedef long int int32_t; - typedef long long int int64_t; - typedef unsigned long long int uint64_t; - #elif defined(_WIN32) && defined(__GNUC__) - #include - #elif defined(_WIN32) - typedef __int32 int32_t; - typedef __int64 int64_t; - typedef unsigned __int64 uint64_t; - #else - // Fallback if nothing above works - #include - #endif -#endif - -#ifndef GL_EXT_timer_query - typedef int64_t GLint64EXT; - typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_ARB_sync - typedef int64_t GLint64; - typedef uint64_t GLuint64; - typedef struct __GLsync *GLsync; -#endif - -#ifndef GL_ARB_cl_event - // These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event - struct _cl_context; - struct _cl_event; -#endif - -#ifndef GL_ARB_debug_output - typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_AMD_debug_output - typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_KHR_debug - typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_NV_vdpau_interop - typedef GLintptr GLvdpauSurfaceNV; -#endif - -namespace gl -{ - enum - { - // Version: 1.1 - DEPTH_BUFFER_BIT = 0x00000100, - STENCIL_BUFFER_BIT = 0x00000400, - COLOR_BUFFER_BIT = 0x00004000, - FALSE_ = 0, - TRUE_ = 1, - POINTS = 0x0000, - LINES = 0x0001, - LINE_LOOP = 0x0002, - LINE_STRIP = 0x0003, - TRIANGLES = 0x0004, - TRIANGLE_STRIP = 0x0005, - TRIANGLE_FAN = 0x0006, - QUADS = 0x0007, - NEVER = 0x0200, - LESS = 0x0201, - EQUAL = 0x0202, - LEQUAL = 0x0203, - GREATER = 0x0204, - NOTEQUAL = 0x0205, - GEQUAL = 0x0206, - ALWAYS = 0x0207, - ZERO = 0, - ONE = 1, - SRC_COLOR = 0x0300, - ONE_MINUS_SRC_COLOR = 0x0301, - SRC_ALPHA = 0x0302, - ONE_MINUS_SRC_ALPHA = 0x0303, - DST_ALPHA = 0x0304, - ONE_MINUS_DST_ALPHA = 0x0305, - DST_COLOR = 0x0306, - ONE_MINUS_DST_COLOR = 0x0307, - SRC_ALPHA_SATURATE = 0x0308, - NONE = 0, - FRONT_LEFT = 0x0400, - FRONT_RIGHT = 0x0401, - BACK_LEFT = 0x0402, - BACK_RIGHT = 0x0403, - FRONT = 0x0404, - BACK = 0x0405, - LEFT = 0x0406, - RIGHT = 0x0407, - FRONT_AND_BACK = 0x0408, - NO_ERROR_ = 0, - INVALID_ENUM = 0x0500, - INVALID_VALUE = 0x0501, - INVALID_OPERATION = 0x0502, - OUT_OF_MEMORY = 0x0505, - CW = 0x0900, - CCW = 0x0901, - POINT_SIZE = 0x0B11, - POINT_SIZE_RANGE = 0x0B12, - POINT_SIZE_GRANULARITY = 0x0B13, - LINE_SMOOTH = 0x0B20, - LINE_WIDTH = 0x0B21, - LINE_WIDTH_RANGE = 0x0B22, - LINE_WIDTH_GRANULARITY = 0x0B23, - POLYGON_MODE = 0x0B40, - POLYGON_SMOOTH = 0x0B41, - CULL_FACE = 0x0B44, - CULL_FACE_MODE = 0x0B45, - FRONT_FACE = 0x0B46, - DEPTH_RANGE = 0x0B70, - DEPTH_TEST = 0x0B71, - DEPTH_WRITEMASK = 0x0B72, - DEPTH_CLEAR_VALUE = 0x0B73, - DEPTH_FUNC = 0x0B74, - STENCIL_TEST = 0x0B90, - STENCIL_CLEAR_VALUE = 0x0B91, - STENCIL_FUNC = 0x0B92, - STENCIL_VALUE_MASK = 0x0B93, - STENCIL_FAIL = 0x0B94, - STENCIL_PASS_DEPTH_FAIL = 0x0B95, - STENCIL_PASS_DEPTH_PASS = 0x0B96, - STENCIL_REF = 0x0B97, - STENCIL_WRITEMASK = 0x0B98, - VIEWPORT = 0x0BA2, - DITHER = 0x0BD0, - BLEND_DST = 0x0BE0, - BLEND_SRC = 0x0BE1, - BLEND = 0x0BE2, - LOGIC_OP_MODE = 0x0BF0, - COLOR_LOGIC_OP = 0x0BF2, - DRAW_BUFFER = 0x0C01, - READ_BUFFER = 0x0C02, - SCISSOR_BOX = 0x0C10, - SCISSOR_TEST = 0x0C11, - COLOR_CLEAR_VALUE = 0x0C22, - COLOR_WRITEMASK = 0x0C23, - DOUBLEBUFFER = 0x0C32, - STEREO = 0x0C33, - LINE_SMOOTH_HINT = 0x0C52, - POLYGON_SMOOTH_HINT = 0x0C53, - UNPACK_SWAP_BYTES = 0x0CF0, - UNPACK_LSB_FIRST = 0x0CF1, - UNPACK_ROW_LENGTH = 0x0CF2, - UNPACK_SKIP_ROWS = 0x0CF3, - UNPACK_SKIP_PIXELS = 0x0CF4, - UNPACK_ALIGNMENT = 0x0CF5, - PACK_SWAP_BYTES = 0x0D00, - PACK_LSB_FIRST = 0x0D01, - PACK_ROW_LENGTH = 0x0D02, - PACK_SKIP_ROWS = 0x0D03, - PACK_SKIP_PIXELS = 0x0D04, - PACK_ALIGNMENT = 0x0D05, - MAX_TEXTURE_SIZE = 0x0D33, - MAX_VIEWPORT_DIMS = 0x0D3A, - SUBPIXEL_BITS = 0x0D50, - TEXTURE_1D = 0x0DE0, - TEXTURE_2D = 0x0DE1, - POLYGON_OFFSET_UNITS = 0x2A00, - POLYGON_OFFSET_POINT = 0x2A01, - POLYGON_OFFSET_LINE = 0x2A02, - POLYGON_OFFSET_FILL = 0x8037, - POLYGON_OFFSET_FACTOR = 0x8038, - TEXTURE_BINDING_1D = 0x8068, - TEXTURE_BINDING_2D = 0x8069, - TEXTURE_WIDTH = 0x1000, - TEXTURE_HEIGHT = 0x1001, - TEXTURE_INTERNAL_FORMAT = 0x1003, - TEXTURE_BORDER_COLOR = 0x1004, - TEXTURE_RED_SIZE = 0x805C, - TEXTURE_GREEN_SIZE = 0x805D, - TEXTURE_BLUE_SIZE = 0x805E, - TEXTURE_ALPHA_SIZE = 0x805F, - DONT_CARE = 0x1100, - FASTEST = 0x1101, - NICEST = 0x1102, - BYTE = 0x1400, - UNSIGNED_BYTE = 0x1401, - SHORT = 0x1402, - UNSIGNED_SHORT = 0x1403, - INT = 0x1404, - UNSIGNED_INT = 0x1405, - FLOAT = 0x1406, - DOUBLE = 0x140A, - CLEAR = 0x1500, - AND = 0x1501, - AND_REVERSE = 0x1502, - COPY = 0x1503, - AND_INVERTED = 0x1504, - NOOP = 0x1505, - XOR = 0x1506, - OR = 0x1507, - NOR = 0x1508, - EQUIV = 0x1509, - INVERT = 0x150A, - OR_REVERSE = 0x150B, - COPY_INVERTED = 0x150C, - OR_INVERTED = 0x150D, - NAND = 0x150E, - SET = 0x150F, - TEXTURE = 0x1702, - COLOR = 0x1800, - DEPTH = 0x1801, - STENCIL = 0x1802, - STENCIL_INDEX = 0x1901, - DEPTH_COMPONENT = 0x1902, - RED = 0x1903, - GREEN = 0x1904, - BLUE = 0x1905, - ALPHA = 0x1906, - RGB = 0x1907, - RGBA = 0x1908, - POINT = 0x1B00, - LINE = 0x1B01, - FILL = 0x1B02, - KEEP = 0x1E00, - REPLACE = 0x1E01, - INCR = 0x1E02, - DECR = 0x1E03, - VENDOR = 0x1F00, - RENDERER = 0x1F01, - VERSION_ = 0x1F02, - EXTENSIONS = 0x1F03, - NEAREST = 0x2600, - LINEAR = 0x2601, - NEAREST_MIPMAP_NEAREST = 0x2700, - LINEAR_MIPMAP_NEAREST = 0x2701, - NEAREST_MIPMAP_LINEAR = 0x2702, - LINEAR_MIPMAP_LINEAR = 0x2703, - TEXTURE_MAG_FILTER = 0x2800, - TEXTURE_MIN_FILTER = 0x2801, - TEXTURE_WRAP_S = 0x2802, - TEXTURE_WRAP_T = 0x2803, - PROXY_TEXTURE_1D = 0x8063, - PROXY_TEXTURE_2D = 0x8064, - REPEAT = 0x2901, - R3_G3_B2 = 0x2A10, - RGB4 = 0x804F, - RGB5 = 0x8050, - RGB8 = 0x8051, - RGB10 = 0x8052, - RGB12 = 0x8053, - RGB16 = 0x8054, - RGBA2 = 0x8055, - RGBA4 = 0x8056, - RGB5_A1 = 0x8057, - RGBA8 = 0x8058, - RGB10_A2 = 0x8059, - RGBA12 = 0x805A, - RGBA16 = 0x805B, - - // Core Extension: ARB_imaging - CONSTANT_COLOR = 0x8001, - ONE_MINUS_CONSTANT_COLOR = 0x8002, - CONSTANT_ALPHA = 0x8003, - ONE_MINUS_CONSTANT_ALPHA = 0x8004, - BLEND_COLOR = 0x8005, - FUNC_ADD = 0x8006, - MIN = 0x8007, - MAX = 0x8008, - BLEND_EQUATION = 0x8009, - FUNC_SUBTRACT = 0x800A, - FUNC_REVERSE_SUBTRACT = 0x800B, - CONVOLUTION_1D = 0x8010, - CONVOLUTION_2D = 0x8011, - SEPARABLE_2D = 0x8012, - CONVOLUTION_BORDER_MODE = 0x8013, - CONVOLUTION_FILTER_SCALE = 0x8014, - CONVOLUTION_FILTER_BIAS = 0x8015, - REDUCE = 0x8016, - CONVOLUTION_FORMAT = 0x8017, - CONVOLUTION_WIDTH = 0x8018, - CONVOLUTION_HEIGHT = 0x8019, - MAX_CONVOLUTION_WIDTH = 0x801A, - MAX_CONVOLUTION_HEIGHT = 0x801B, - POST_CONVOLUTION_RED_SCALE = 0x801C, - POST_CONVOLUTION_GREEN_SCALE = 0x801D, - POST_CONVOLUTION_BLUE_SCALE = 0x801E, - POST_CONVOLUTION_ALPHA_SCALE = 0x801F, - POST_CONVOLUTION_RED_BIAS = 0x8020, - POST_CONVOLUTION_GREEN_BIAS = 0x8021, - POST_CONVOLUTION_BLUE_BIAS = 0x8022, - POST_CONVOLUTION_ALPHA_BIAS = 0x8023, - HISTOGRAM = 0x8024, - PROXY_HISTOGRAM = 0x8025, - HISTOGRAM_WIDTH = 0x8026, - HISTOGRAM_FORMAT = 0x8027, - HISTOGRAM_RED_SIZE = 0x8028, - HISTOGRAM_GREEN_SIZE = 0x8029, - HISTOGRAM_BLUE_SIZE = 0x802A, - HISTOGRAM_ALPHA_SIZE = 0x802B, - HISTOGRAM_LUMINANCE_SIZE = 0x802C, - HISTOGRAM_SINK = 0x802D, - MINMAX = 0x802E, - MINMAX_FORMAT = 0x802F, - MINMAX_SINK = 0x8030, - TABLE_TOO_LARGE = 0x8031, - COLOR_MATRIX = 0x80B1, - COLOR_MATRIX_STACK_DEPTH = 0x80B2, - MAX_COLOR_MATRIX_STACK_DEPTH = 0x80B3, - POST_COLOR_MATRIX_RED_SCALE = 0x80B4, - POST_COLOR_MATRIX_GREEN_SCALE = 0x80B5, - POST_COLOR_MATRIX_BLUE_SCALE = 0x80B6, - POST_COLOR_MATRIX_ALPHA_SCALE = 0x80B7, - POST_COLOR_MATRIX_RED_BIAS = 0x80B8, - POST_COLOR_MATRIX_GREEN_BIAS = 0x80B9, - POST_COLOR_MATRIX_BLUE_BIAS = 0x80BA, - POST_COLOR_MATRIX_ALPHA_BIAS = 0x80BB, - COLOR_TABLE = 0x80D0, - POST_CONVOLUTION_COLOR_TABLE = 0x80D1, - POST_COLOR_MATRIX_COLOR_TABLE = 0x80D2, - PROXY_COLOR_TABLE = 0x80D3, - PROXY_POST_CONVOLUTION_COLOR_TABLE = 0x80D4, - PROXY_POST_COLOR_MATRIX_COLOR_TABLE = 0x80D5, - COLOR_TABLE_SCALE = 0x80D6, - COLOR_TABLE_BIAS = 0x80D7, - COLOR_TABLE_FORMAT = 0x80D8, - COLOR_TABLE_WIDTH = 0x80D9, - COLOR_TABLE_RED_SIZE = 0x80DA, - COLOR_TABLE_GREEN_SIZE = 0x80DB, - COLOR_TABLE_BLUE_SIZE = 0x80DC, - COLOR_TABLE_ALPHA_SIZE = 0x80DD, - COLOR_TABLE_LUMINANCE_SIZE = 0x80DE, - COLOR_TABLE_INTENSITY_SIZE = 0x80DF, - CONSTANT_BORDER = 0x8151, - REPLICATE_BORDER = 0x8153, - CONVOLUTION_BORDER_COLOR = 0x8154, - - // Version: 1.2 - UNSIGNED_BYTE_3_3_2 = 0x8032, - UNSIGNED_SHORT_4_4_4_4 = 0x8033, - UNSIGNED_SHORT_5_5_5_1 = 0x8034, - UNSIGNED_INT_8_8_8_8 = 0x8035, - UNSIGNED_INT_10_10_10_2 = 0x8036, - TEXTURE_BINDING_3D = 0x806A, - PACK_SKIP_IMAGES = 0x806B, - PACK_IMAGE_HEIGHT = 0x806C, - UNPACK_SKIP_IMAGES = 0x806D, - UNPACK_IMAGE_HEIGHT = 0x806E, - TEXTURE_3D = 0x806F, - PROXY_TEXTURE_3D = 0x8070, - TEXTURE_DEPTH = 0x8071, - TEXTURE_WRAP_R = 0x8072, - MAX_3D_TEXTURE_SIZE = 0x8073, - UNSIGNED_BYTE_2_3_3_REV = 0x8362, - UNSIGNED_SHORT_5_6_5 = 0x8363, - UNSIGNED_SHORT_5_6_5_REV = 0x8364, - UNSIGNED_SHORT_4_4_4_4_REV = 0x8365, - UNSIGNED_SHORT_1_5_5_5_REV = 0x8366, - UNSIGNED_INT_8_8_8_8_REV = 0x8367, - UNSIGNED_INT_2_10_10_10_REV = 0x8368, - BGR = 0x80E0, - BGRA = 0x80E1, - MAX_ELEMENTS_VERTICES = 0x80E8, - MAX_ELEMENTS_INDICES = 0x80E9, - CLAMP_TO_EDGE = 0x812F, - TEXTURE_MIN_LOD = 0x813A, - TEXTURE_MAX_LOD = 0x813B, - TEXTURE_BASE_LEVEL = 0x813C, - TEXTURE_MAX_LEVEL = 0x813D, - SMOOTH_POINT_SIZE_RANGE = 0x0B12, - SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13, - SMOOTH_LINE_WIDTH_RANGE = 0x0B22, - SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23, - ALIASED_LINE_WIDTH_RANGE = 0x846E, - - // Version: 1.3 - TEXTURE0 = 0x84C0, - TEXTURE1 = 0x84C1, - TEXTURE2 = 0x84C2, - TEXTURE3 = 0x84C3, - TEXTURE4 = 0x84C4, - TEXTURE5 = 0x84C5, - TEXTURE6 = 0x84C6, - TEXTURE7 = 0x84C7, - TEXTURE8 = 0x84C8, - TEXTURE9 = 0x84C9, - TEXTURE10 = 0x84CA, - TEXTURE11 = 0x84CB, - TEXTURE12 = 0x84CC, - TEXTURE13 = 0x84CD, - TEXTURE14 = 0x84CE, - TEXTURE15 = 0x84CF, - TEXTURE16 = 0x84D0, - TEXTURE17 = 0x84D1, - TEXTURE18 = 0x84D2, - TEXTURE19 = 0x84D3, - TEXTURE20 = 0x84D4, - TEXTURE21 = 0x84D5, - TEXTURE22 = 0x84D6, - TEXTURE23 = 0x84D7, - TEXTURE24 = 0x84D8, - TEXTURE25 = 0x84D9, - TEXTURE26 = 0x84DA, - TEXTURE27 = 0x84DB, - TEXTURE28 = 0x84DC, - TEXTURE29 = 0x84DD, - TEXTURE30 = 0x84DE, - TEXTURE31 = 0x84DF, - ACTIVE_TEXTURE = 0x84E0, - MULTISAMPLE = 0x809D, - SAMPLE_ALPHA_TO_COVERAGE = 0x809E, - SAMPLE_ALPHA_TO_ONE = 0x809F, - SAMPLE_COVERAGE = 0x80A0, - SAMPLE_BUFFERS = 0x80A8, - SAMPLES = 0x80A9, - SAMPLE_COVERAGE_VALUE = 0x80AA, - SAMPLE_COVERAGE_INVERT = 0x80AB, - TEXTURE_CUBE_MAP = 0x8513, - TEXTURE_BINDING_CUBE_MAP = 0x8514, - TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515, - TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516, - TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517, - TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518, - TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519, - TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A, - PROXY_TEXTURE_CUBE_MAP = 0x851B, - MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C, - COMPRESSED_RGB = 0x84ED, - COMPRESSED_RGBA = 0x84EE, - TEXTURE_COMPRESSION_HINT = 0x84EF, - TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0, - TEXTURE_COMPRESSED = 0x86A1, - NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2, - COMPRESSED_TEXTURE_FORMATS = 0x86A3, - CLAMP_TO_BORDER = 0x812D, - - // Version: 1.4 - BLEND_DST_RGB = 0x80C8, - BLEND_SRC_RGB = 0x80C9, - BLEND_DST_ALPHA = 0x80CA, - BLEND_SRC_ALPHA = 0x80CB, - POINT_FADE_THRESHOLD_SIZE = 0x8128, - DEPTH_COMPONENT16 = 0x81A5, - DEPTH_COMPONENT24 = 0x81A6, - DEPTH_COMPONENT32 = 0x81A7, - MIRRORED_REPEAT = 0x8370, - MAX_TEXTURE_LOD_BIAS = 0x84FD, - TEXTURE_LOD_BIAS = 0x8501, - INCR_WRAP = 0x8507, - DECR_WRAP = 0x8508, - TEXTURE_DEPTH_SIZE = 0x884A, - TEXTURE_COMPARE_MODE = 0x884C, - TEXTURE_COMPARE_FUNC = 0x884D, - - // Version: 1.5 - BUFFER_SIZE = 0x8764, - BUFFER_USAGE = 0x8765, - QUERY_COUNTER_BITS = 0x8864, - CURRENT_QUERY = 0x8865, - QUERY_RESULT = 0x8866, - QUERY_RESULT_AVAILABLE = 0x8867, - ARRAY_BUFFER = 0x8892, - ELEMENT_ARRAY_BUFFER = 0x8893, - ARRAY_BUFFER_BINDING = 0x8894, - ELEMENT_ARRAY_BUFFER_BINDING = 0x8895, - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F, - READ_ONLY = 0x88B8, - WRITE_ONLY = 0x88B9, - READ_WRITE = 0x88BA, - BUFFER_ACCESS = 0x88BB, - BUFFER_MAPPED = 0x88BC, - BUFFER_MAP_POINTER = 0x88BD, - STREAM_DRAW = 0x88E0, - STREAM_READ = 0x88E1, - STREAM_COPY = 0x88E2, - STATIC_DRAW = 0x88E4, - STATIC_READ = 0x88E5, - STATIC_COPY = 0x88E6, - DYNAMIC_DRAW = 0x88E8, - DYNAMIC_READ = 0x88E9, - DYNAMIC_COPY = 0x88EA, - SAMPLES_PASSED = 0x8914, - SRC1_ALPHA = 0x8589, - - // Version: 2.0 - BLEND_EQUATION_RGB = 0x8009, - VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622, - VERTEX_ATTRIB_ARRAY_SIZE = 0x8623, - VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624, - VERTEX_ATTRIB_ARRAY_TYPE = 0x8625, - CURRENT_VERTEX_ATTRIB = 0x8626, - VERTEX_PROGRAM_POINT_SIZE = 0x8642, - VERTEX_ATTRIB_ARRAY_POINTER = 0x8645, - STENCIL_BACK_FUNC = 0x8800, - STENCIL_BACK_FAIL = 0x8801, - STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802, - STENCIL_BACK_PASS_DEPTH_PASS = 0x8803, - MAX_DRAW_BUFFERS = 0x8824, - DRAW_BUFFER0 = 0x8825, - DRAW_BUFFER1 = 0x8826, - DRAW_BUFFER2 = 0x8827, - DRAW_BUFFER3 = 0x8828, - DRAW_BUFFER4 = 0x8829, - DRAW_BUFFER5 = 0x882A, - DRAW_BUFFER6 = 0x882B, - DRAW_BUFFER7 = 0x882C, - DRAW_BUFFER8 = 0x882D, - DRAW_BUFFER9 = 0x882E, - DRAW_BUFFER10 = 0x882F, - DRAW_BUFFER11 = 0x8830, - DRAW_BUFFER12 = 0x8831, - DRAW_BUFFER13 = 0x8832, - DRAW_BUFFER14 = 0x8833, - DRAW_BUFFER15 = 0x8834, - BLEND_EQUATION_ALPHA = 0x883D, - MAX_VERTEX_ATTRIBS = 0x8869, - VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A, - MAX_TEXTURE_IMAGE_UNITS = 0x8872, - FRAGMENT_SHADER = 0x8B30, - VERTEX_SHADER = 0x8B31, - MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49, - MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A, - MAX_VARYING_FLOATS = 0x8B4B, - MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C, - MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D, - SHADER_TYPE = 0x8B4F, - FLOAT_VEC2 = 0x8B50, - FLOAT_VEC3 = 0x8B51, - FLOAT_VEC4 = 0x8B52, - INT_VEC2 = 0x8B53, - INT_VEC3 = 0x8B54, - INT_VEC4 = 0x8B55, - BOOL = 0x8B56, - BOOL_VEC2 = 0x8B57, - BOOL_VEC3 = 0x8B58, - BOOL_VEC4 = 0x8B59, - FLOAT_MAT2 = 0x8B5A, - FLOAT_MAT3 = 0x8B5B, - FLOAT_MAT4 = 0x8B5C, - SAMPLER_1D = 0x8B5D, - SAMPLER_2D = 0x8B5E, - SAMPLER_3D = 0x8B5F, - SAMPLER_CUBE = 0x8B60, - SAMPLER_1D_SHADOW = 0x8B61, - SAMPLER_2D_SHADOW = 0x8B62, - DELETE_STATUS = 0x8B80, - COMPILE_STATUS = 0x8B81, - LINK_STATUS = 0x8B82, - VALIDATE_STATUS = 0x8B83, - INFO_LOG_LENGTH = 0x8B84, - ATTACHED_SHADERS = 0x8B85, - ACTIVE_UNIFORMS = 0x8B86, - ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87, - SHADER_SOURCE_LENGTH = 0x8B88, - ACTIVE_ATTRIBUTES = 0x8B89, - ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A, - FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B, - SHADING_LANGUAGE_VERSION = 0x8B8C, - CURRENT_PROGRAM = 0x8B8D, - POINT_SPRITE_COORD_ORIGIN = 0x8CA0, - LOWER_LEFT = 0x8CA1, - UPPER_LEFT = 0x8CA2, - STENCIL_BACK_REF = 0x8CA3, - STENCIL_BACK_VALUE_MASK = 0x8CA4, - STENCIL_BACK_WRITEMASK = 0x8CA5, - - // Version: 2.1 - PIXEL_PACK_BUFFER = 0x88EB, - PIXEL_UNPACK_BUFFER = 0x88EC, - PIXEL_PACK_BUFFER_BINDING = 0x88ED, - PIXEL_UNPACK_BUFFER_BINDING = 0x88EF, - FLOAT_MAT2x3 = 0x8B65, - FLOAT_MAT2x4 = 0x8B66, - FLOAT_MAT3x2 = 0x8B67, - FLOAT_MAT3x4 = 0x8B68, - FLOAT_MAT4x2 = 0x8B69, - FLOAT_MAT4x3 = 0x8B6A, - SRGB = 0x8C40, - SRGB8 = 0x8C41, - SRGB_ALPHA = 0x8C42, - SRGB8_ALPHA8 = 0x8C43, - COMPRESSED_SRGB = 0x8C48, - COMPRESSED_SRGB_ALPHA = 0x8C49, - - // Core Extension: ARB_vertex_array_object - VERTEX_ARRAY_BINDING = 0x85B5, - - // Core Extension: ARB_texture_rg - RG = 0x8227, - RG_INTEGER = 0x8228, - R8 = 0x8229, - R16 = 0x822A, - RG8 = 0x822B, - RG16 = 0x822C, - R16F = 0x822D, - R32F = 0x822E, - RG16F = 0x822F, - RG32F = 0x8230, - R8I = 0x8231, - R8UI = 0x8232, - R16I = 0x8233, - R16UI = 0x8234, - R32I = 0x8235, - R32UI = 0x8236, - RG8I = 0x8237, - RG8UI = 0x8238, - RG16I = 0x8239, - RG16UI = 0x823A, - RG32I = 0x823B, - RG32UI = 0x823C, - - // Core Extension: ARB_texture_compression_rgtc - COMPRESSED_RED_RGTC1 = 0x8DBB, - COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC, - COMPRESSED_RG_RGTC2 = 0x8DBD, - COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE, - - // Core Extension: ARB_map_buffer_range - MAP_READ_BIT = 0x0001, - MAP_WRITE_BIT = 0x0002, - MAP_INVALIDATE_RANGE_BIT = 0x0004, - MAP_INVALIDATE_BUFFER_BIT = 0x0008, - MAP_FLUSH_EXPLICIT_BIT = 0x0010, - MAP_UNSYNCHRONIZED_BIT = 0x0020, - - // Core Extension: ARB_half_float_vertex - HALF_FLOAT = 0x140B, - - // Core Extension: ARB_framebuffer_sRGB - FRAMEBUFFER_SRGB = 0x8DB9, - - // Core Extension: ARB_framebuffer_object - INVALID_FRAMEBUFFER_OPERATION = 0x0506, - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210, - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211, - FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212, - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213, - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214, - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215, - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216, - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217, - FRAMEBUFFER_DEFAULT = 0x8218, - FRAMEBUFFER_UNDEFINED = 0x8219, - DEPTH_STENCIL_ATTACHMENT = 0x821A, - INDEX = 0x8222, - MAX_RENDERBUFFER_SIZE = 0x84E8, - DEPTH_STENCIL = 0x84F9, - UNSIGNED_INT_24_8 = 0x84FA, - DEPTH24_STENCIL8 = 0x88F0, - TEXTURE_STENCIL_SIZE = 0x88F1, - TEXTURE_RED_TYPE = 0x8C10, - TEXTURE_GREEN_TYPE = 0x8C11, - TEXTURE_BLUE_TYPE = 0x8C12, - TEXTURE_ALPHA_TYPE = 0x8C13, - TEXTURE_DEPTH_TYPE = 0x8C16, - UNSIGNED_NORMALIZED = 0x8C17, - FRAMEBUFFER_BINDING = 0x8CA6, - DRAW_FRAMEBUFFER_BINDING = 0x8CA6, - RENDERBUFFER_BINDING = 0x8CA7, - READ_FRAMEBUFFER = 0x8CA8, - DRAW_FRAMEBUFFER = 0x8CA9, - READ_FRAMEBUFFER_BINDING = 0x8CAA, - RENDERBUFFER_SAMPLES = 0x8CAB, - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0, - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1, - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2, - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3, - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4, - FRAMEBUFFER_COMPLETE = 0x8CD5, - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6, - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7, - FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB, - FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC, - FRAMEBUFFER_UNSUPPORTED = 0x8CDD, - MAX_COLOR_ATTACHMENTS = 0x8CDF, - COLOR_ATTACHMENT0 = 0x8CE0, - COLOR_ATTACHMENT1 = 0x8CE1, - COLOR_ATTACHMENT2 = 0x8CE2, - COLOR_ATTACHMENT3 = 0x8CE3, - COLOR_ATTACHMENT4 = 0x8CE4, - COLOR_ATTACHMENT5 = 0x8CE5, - COLOR_ATTACHMENT6 = 0x8CE6, - COLOR_ATTACHMENT7 = 0x8CE7, - COLOR_ATTACHMENT8 = 0x8CE8, - COLOR_ATTACHMENT9 = 0x8CE9, - COLOR_ATTACHMENT10 = 0x8CEA, - COLOR_ATTACHMENT11 = 0x8CEB, - COLOR_ATTACHMENT12 = 0x8CEC, - COLOR_ATTACHMENT13 = 0x8CED, - COLOR_ATTACHMENT14 = 0x8CEE, - COLOR_ATTACHMENT15 = 0x8CEF, - DEPTH_ATTACHMENT = 0x8D00, - STENCIL_ATTACHMENT = 0x8D20, - FRAMEBUFFER = 0x8D40, - RENDERBUFFER = 0x8D41, - RENDERBUFFER_WIDTH = 0x8D42, - RENDERBUFFER_HEIGHT = 0x8D43, - RENDERBUFFER_INTERNAL_FORMAT = 0x8D44, - STENCIL_INDEX1 = 0x8D46, - STENCIL_INDEX4 = 0x8D47, - STENCIL_INDEX8 = 0x8D48, - STENCIL_INDEX16 = 0x8D49, - RENDERBUFFER_RED_SIZE = 0x8D50, - RENDERBUFFER_GREEN_SIZE = 0x8D51, - RENDERBUFFER_BLUE_SIZE = 0x8D52, - RENDERBUFFER_ALPHA_SIZE = 0x8D53, - RENDERBUFFER_DEPTH_SIZE = 0x8D54, - RENDERBUFFER_STENCIL_SIZE = 0x8D55, - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56, - MAX_SAMPLES = 0x8D57, - TEXTURE_LUMINANCE_TYPE = 0x8C14, - TEXTURE_INTENSITY_TYPE = 0x8C15, - - // Core Extension: ARB_depth_buffer_float - DEPTH_COMPONENT32F = 0x8CAC, - DEPTH32F_STENCIL8 = 0x8CAD, - FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD, - - // Version: 3.0 - COMPARE_REF_TO_TEXTURE = 0x884E, - CLIP_DISTANCE0 = 0x3000, - CLIP_DISTANCE1 = 0x3001, - CLIP_DISTANCE2 = 0x3002, - CLIP_DISTANCE3 = 0x3003, - CLIP_DISTANCE4 = 0x3004, - CLIP_DISTANCE5 = 0x3005, - CLIP_DISTANCE6 = 0x3006, - CLIP_DISTANCE7 = 0x3007, - MAX_CLIP_DISTANCES = 0x0D32, - MAJOR_VERSION = 0x821B, - MINOR_VERSION = 0x821C, - NUM_EXTENSIONS = 0x821D, - CONTEXT_FLAGS = 0x821E, - COMPRESSED_RED = 0x8225, - COMPRESSED_RG = 0x8226, - CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x0001, - RGBA32F = 0x8814, - RGB32F = 0x8815, - RGBA16F = 0x881A, - RGB16F = 0x881B, - VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD, - MAX_ARRAY_TEXTURE_LAYERS = 0x88FF, - MIN_PROGRAM_TEXEL_OFFSET = 0x8904, - MAX_PROGRAM_TEXEL_OFFSET = 0x8905, - CLAMP_READ_COLOR = 0x891C, - FIXED_ONLY = 0x891D, - TEXTURE_1D_ARRAY = 0x8C18, - PROXY_TEXTURE_1D_ARRAY = 0x8C19, - TEXTURE_2D_ARRAY = 0x8C1A, - PROXY_TEXTURE_2D_ARRAY = 0x8C1B, - TEXTURE_BINDING_1D_ARRAY = 0x8C1C, - TEXTURE_BINDING_2D_ARRAY = 0x8C1D, - R11F_G11F_B10F = 0x8C3A, - UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B, - RGB9_E5 = 0x8C3D, - UNSIGNED_INT_5_9_9_9_REV = 0x8C3E, - TEXTURE_SHARED_SIZE = 0x8C3F, - TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76, - TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F, - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80, - TRANSFORM_FEEDBACK_VARYINGS = 0x8C83, - TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84, - TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85, - PRIMITIVES_GENERATED = 0x8C87, - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88, - RASTERIZER_DISCARD = 0x8C89, - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A, - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B, - INTERLEAVED_ATTRIBS = 0x8C8C, - SEPARATE_ATTRIBS = 0x8C8D, - TRANSFORM_FEEDBACK_BUFFER = 0x8C8E, - TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F, - RGBA32UI = 0x8D70, - RGB32UI = 0x8D71, - RGBA16UI = 0x8D76, - RGB16UI = 0x8D77, - RGBA8UI = 0x8D7C, - RGB8UI = 0x8D7D, - RGBA32I = 0x8D82, - RGB32I = 0x8D83, - RGBA16I = 0x8D88, - RGB16I = 0x8D89, - RGBA8I = 0x8D8E, - RGB8I = 0x8D8F, - RED_INTEGER = 0x8D94, - GREEN_INTEGER = 0x8D95, - BLUE_INTEGER = 0x8D96, - RGB_INTEGER = 0x8D98, - RGBA_INTEGER = 0x8D99, - BGR_INTEGER = 0x8D9A, - BGRA_INTEGER = 0x8D9B, - SAMPLER_1D_ARRAY = 0x8DC0, - SAMPLER_2D_ARRAY = 0x8DC1, - SAMPLER_1D_ARRAY_SHADOW = 0x8DC3, - SAMPLER_2D_ARRAY_SHADOW = 0x8DC4, - SAMPLER_CUBE_SHADOW = 0x8DC5, - UNSIGNED_INT_VEC2 = 0x8DC6, - UNSIGNED_INT_VEC3 = 0x8DC7, - UNSIGNED_INT_VEC4 = 0x8DC8, - INT_SAMPLER_1D = 0x8DC9, - INT_SAMPLER_2D = 0x8DCA, - INT_SAMPLER_3D = 0x8DCB, - INT_SAMPLER_CUBE = 0x8DCC, - INT_SAMPLER_1D_ARRAY = 0x8DCE, - INT_SAMPLER_2D_ARRAY = 0x8DCF, - UNSIGNED_INT_SAMPLER_1D = 0x8DD1, - UNSIGNED_INT_SAMPLER_2D = 0x8DD2, - UNSIGNED_INT_SAMPLER_3D = 0x8DD3, - UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4, - UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6, - UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7, - QUERY_WAIT = 0x8E13, - QUERY_NO_WAIT = 0x8E14, - QUERY_BY_REGION_WAIT = 0x8E15, - QUERY_BY_REGION_NO_WAIT = 0x8E16, - BUFFER_ACCESS_FLAGS = 0x911F, - BUFFER_MAP_LENGTH = 0x9120, - BUFFER_MAP_OFFSET = 0x9121, - - // Core Extension: ARB_uniform_buffer_object - UNIFORM_BUFFER = 0x8A11, - UNIFORM_BUFFER_BINDING = 0x8A28, - UNIFORM_BUFFER_START = 0x8A29, - UNIFORM_BUFFER_SIZE = 0x8A2A, - MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B, - MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D, - MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E, - MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F, - MAX_UNIFORM_BLOCK_SIZE = 0x8A30, - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31, - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33, - UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34, - ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35, - ACTIVE_UNIFORM_BLOCKS = 0x8A36, - UNIFORM_TYPE = 0x8A37, - UNIFORM_SIZE = 0x8A38, - UNIFORM_NAME_LENGTH = 0x8A39, - UNIFORM_BLOCK_INDEX = 0x8A3A, - UNIFORM_OFFSET = 0x8A3B, - UNIFORM_ARRAY_STRIDE = 0x8A3C, - UNIFORM_MATRIX_STRIDE = 0x8A3D, - UNIFORM_IS_ROW_MAJOR = 0x8A3E, - UNIFORM_BLOCK_BINDING = 0x8A3F, - UNIFORM_BLOCK_DATA_SIZE = 0x8A40, - UNIFORM_BLOCK_NAME_LENGTH = 0x8A41, - UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42, - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43, - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44, - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46, - INVALID_INDEX = 0xFFFFFFFF, - MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C, - MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32, - UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45, - - // Core Extension: ARB_copy_buffer - COPY_READ_BUFFER = 0x8F36, - COPY_WRITE_BUFFER = 0x8F37, - COPY_READ_BUFFER_BINDING = 0x8F36, - COPY_WRITE_BUFFER_BINDING = 0x8F37, - - // Version: 3.1 - SAMPLER_2D_RECT = 0x8B63, - SAMPLER_2D_RECT_SHADOW = 0x8B64, - SAMPLER_BUFFER = 0x8DC2, - INT_SAMPLER_2D_RECT = 0x8DCD, - INT_SAMPLER_BUFFER = 0x8DD0, - UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5, - UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8, - TEXTURE_BUFFER = 0x8C2A, - MAX_TEXTURE_BUFFER_SIZE = 0x8C2B, - TEXTURE_BINDING_BUFFER = 0x8C2C, - TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D, - TEXTURE_RECTANGLE = 0x84F5, - TEXTURE_BINDING_RECTANGLE = 0x84F6, - PROXY_TEXTURE_RECTANGLE = 0x84F7, - MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8, - RED_SNORM = 0x8F90, - RG_SNORM = 0x8F91, - RGB_SNORM = 0x8F92, - RGBA_SNORM = 0x8F93, - R8_SNORM = 0x8F94, - RG8_SNORM = 0x8F95, - RGB8_SNORM = 0x8F96, - RGBA8_SNORM = 0x8F97, - R16_SNORM = 0x8F98, - RG16_SNORM = 0x8F99, - RGB16_SNORM = 0x8F9A, - RGBA16_SNORM = 0x8F9B, - SIGNED_NORMALIZED = 0x8F9C, - PRIMITIVE_RESTART = 0x8F9D, - PRIMITIVE_RESTART_INDEX = 0x8F9E, - - // Legacy - VERTEX_ARRAY = 0x8074, - NORMAL_ARRAY = 0x8075, - COLOR_ARRAY = 0x8076, - TEXTURE_COORD_ARRAY = 0x8078, - TEXTURE_ENV = 0x2300, - TEXTURE_ENV_MODE = 0x2200, - MODELVIEW = 0x1700, - PROJECTION = 0x1701, - LIGHTING = 0x0B50 - }; - - // Extension: 1.1 - extern void (CODEGEN_FUNCPTR *CullFace)(GLenum mode); - extern void (CODEGEN_FUNCPTR *FrontFace)(GLenum mode); - extern void (CODEGEN_FUNCPTR *Hint)(GLenum target, GLenum mode); - extern void (CODEGEN_FUNCPTR *LineWidth)(GLfloat width); - extern void (CODEGEN_FUNCPTR *PointSize)(GLfloat size); - extern void (CODEGEN_FUNCPTR *PolygonMode)(GLenum face, GLenum mode); - extern void (CODEGEN_FUNCPTR *Scissor)(GLint x, GLint y, GLsizei width, GLsizei height); - extern void (CODEGEN_FUNCPTR *TexParameterf)(GLenum target, GLenum pname, GLfloat param); - extern void (CODEGEN_FUNCPTR *TexParameterfv)(GLenum target, GLenum pname, const GLfloat *params); - extern void (CODEGEN_FUNCPTR *TexParameteri)(GLenum target, GLenum pname, GLint param); - extern void (CODEGEN_FUNCPTR *TexParameteriv)(GLenum target, GLenum pname, const GLint *params); - extern void (CODEGEN_FUNCPTR *TexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *TexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *DrawBuffer)(GLenum mode); - extern void (CODEGEN_FUNCPTR *Clear)(GLbitfield mask); - extern void (CODEGEN_FUNCPTR *ClearColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - extern void (CODEGEN_FUNCPTR *ClearStencil)(GLint s); - extern void (CODEGEN_FUNCPTR *ClearDepth)(GLdouble depth); - extern void (CODEGEN_FUNCPTR *StencilMask)(GLuint mask); - extern void (CODEGEN_FUNCPTR *ColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - extern void (CODEGEN_FUNCPTR *DepthMask)(GLboolean flag); - extern void (CODEGEN_FUNCPTR *Disable)(GLenum cap); - extern void (CODEGEN_FUNCPTR *Enable)(GLenum cap); - extern void (CODEGEN_FUNCPTR *Finish)(); - extern void (CODEGEN_FUNCPTR *Flush)(); - extern void (CODEGEN_FUNCPTR *BlendFunc)(GLenum sfactor, GLenum dfactor); - extern void (CODEGEN_FUNCPTR *LogicOp)(GLenum opcode); - extern void (CODEGEN_FUNCPTR *StencilFunc)(GLenum func, GLint ref, GLuint mask); - extern void (CODEGEN_FUNCPTR *StencilOp)(GLenum fail, GLenum zfail, GLenum zpass); - extern void (CODEGEN_FUNCPTR *DepthFunc)(GLenum func); - extern void (CODEGEN_FUNCPTR *PixelStoref)(GLenum pname, GLfloat param); - extern void (CODEGEN_FUNCPTR *PixelStorei)(GLenum pname, GLint param); - extern void (CODEGEN_FUNCPTR *ReadBuffer)(GLenum mode); - extern void (CODEGEN_FUNCPTR *ReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *GetBooleanv)(GLenum pname, GLboolean *params); - extern void (CODEGEN_FUNCPTR *GetDoublev)(GLenum pname, GLdouble *params); - extern GLenum (CODEGEN_FUNCPTR *GetError)(); - extern void (CODEGEN_FUNCPTR *GetFloatv)(GLenum pname, GLfloat *params); - extern void (CODEGEN_FUNCPTR *GetIntegerv)(GLenum pname, GLint *params); - extern const GLubyte * (CODEGEN_FUNCPTR *GetString)(GLenum name); - extern void (CODEGEN_FUNCPTR *GetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *GetTexParameterfv)(GLenum target, GLenum pname, GLfloat *params); - extern void (CODEGEN_FUNCPTR *GetTexParameteriv)(GLenum target, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat *params); - extern void (CODEGEN_FUNCPTR *GetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint *params); - extern GLboolean (CODEGEN_FUNCPTR *IsEnabled)(GLenum cap); - extern void (CODEGEN_FUNCPTR *DepthRange)(GLdouble ren_near, GLdouble ren_far); - extern void (CODEGEN_FUNCPTR *Viewport)(GLint x, GLint y, GLsizei width, GLsizei height); - extern void (CODEGEN_FUNCPTR *DrawArrays)(GLenum mode, GLint first, GLsizei count); - extern void (CODEGEN_FUNCPTR *DrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); - extern void (CODEGEN_FUNCPTR *GetPointerv)(GLenum pname, GLvoid* *params); - extern void (CODEGEN_FUNCPTR *PolygonOffset)(GLfloat factor, GLfloat units); - extern void (CODEGEN_FUNCPTR *CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); - extern void (CODEGEN_FUNCPTR *CopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - extern void (CODEGEN_FUNCPTR *CopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); - extern void (CODEGEN_FUNCPTR *CopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - extern void (CODEGEN_FUNCPTR *TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *BindTexture)(GLenum target, GLuint texture); - extern void (CODEGEN_FUNCPTR *DeleteTextures)(GLsizei n, const GLuint *textures); - extern void (CODEGEN_FUNCPTR *GenTextures)(GLsizei n, GLuint *textures); - extern GLboolean (CODEGEN_FUNCPTR *IsTexture)(GLuint texture); - extern void (CODEGEN_FUNCPTR *Indexub)(GLubyte c); - extern void (CODEGEN_FUNCPTR *Indexubv)(const GLubyte *c); - - // Extension: 1.2 - extern void (CODEGEN_FUNCPTR *BlendColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); - extern void (CODEGEN_FUNCPTR *BlendEquation)(GLenum mode); - extern void (CODEGEN_FUNCPTR *DrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - extern void (CODEGEN_FUNCPTR *TexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - extern void (CODEGEN_FUNCPTR *CopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - - // Extension: 1.3 - extern void (CODEGEN_FUNCPTR *ActiveTexture)(GLenum texture); - extern void (CODEGEN_FUNCPTR *SampleCoverage)(GLfloat value, GLboolean invert); - extern void (CODEGEN_FUNCPTR *CompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *CompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *CompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *GetCompressedTexImage)(GLenum target, GLint level, GLvoid *img); - - // Extension: 1.4 - extern void (CODEGEN_FUNCPTR *BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - extern void (CODEGEN_FUNCPTR *MultiDrawArrays)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); - extern void (CODEGEN_FUNCPTR *MultiDrawElements)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount); - extern void (CODEGEN_FUNCPTR *PointParameterf)(GLenum pname, GLfloat param); - extern void (CODEGEN_FUNCPTR *PointParameterfv)(GLenum pname, const GLfloat *params); - extern void (CODEGEN_FUNCPTR *PointParameteri)(GLenum pname, GLint param); - extern void (CODEGEN_FUNCPTR *PointParameteriv)(GLenum pname, const GLint *params); - - // Extension: 1.5 - extern void (CODEGEN_FUNCPTR *GenQueries)(GLsizei n, GLuint *ids); - extern void (CODEGEN_FUNCPTR *DeleteQueries)(GLsizei n, const GLuint *ids); - extern GLboolean (CODEGEN_FUNCPTR *IsQuery)(GLuint id); - extern void (CODEGEN_FUNCPTR *BeginQuery)(GLenum target, GLuint id); - extern void (CODEGEN_FUNCPTR *EndQuery)(GLenum target); - extern void (CODEGEN_FUNCPTR *GetQueryiv)(GLenum target, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetQueryObjectiv)(GLuint id, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetQueryObjectuiv)(GLuint id, GLenum pname, GLuint *params); - extern void (CODEGEN_FUNCPTR *BindBuffer)(GLenum target, GLuint buffer); - extern void (CODEGEN_FUNCPTR *DeleteBuffers)(GLsizei n, const GLuint *buffers); - extern void (CODEGEN_FUNCPTR *GenBuffers)(GLsizei n, GLuint *buffers); - extern GLboolean (CODEGEN_FUNCPTR *IsBuffer)(GLuint buffer); - extern void (CODEGEN_FUNCPTR *BufferData)(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); - extern void (CODEGEN_FUNCPTR *BufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); - extern void (CODEGEN_FUNCPTR *GetBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); - extern GLvoid* (CODEGEN_FUNCPTR *MapBuffer)(GLenum target, GLenum access); - extern GLboolean (CODEGEN_FUNCPTR *UnmapBuffer)(GLenum target); - extern void (CODEGEN_FUNCPTR *GetBufferParameteriv)(GLenum target, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetBufferPointerv)(GLenum target, GLenum pname, GLvoid* *params); - - // Extension: 2.0 - extern void (CODEGEN_FUNCPTR *BlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha); - extern void (CODEGEN_FUNCPTR *DrawBuffers)(GLsizei n, const GLenum *bufs); - extern void (CODEGEN_FUNCPTR *StencilOpSeparate)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - extern void (CODEGEN_FUNCPTR *StencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask); - extern void (CODEGEN_FUNCPTR *StencilMaskSeparate)(GLenum face, GLuint mask); - extern void (CODEGEN_FUNCPTR *AttachShader)(GLuint program, GLuint shader); - extern void (CODEGEN_FUNCPTR *BindAttribLocation)(GLuint program, GLuint index, const GLchar *name); - extern void (CODEGEN_FUNCPTR *CompileShader)(GLuint shader); - extern GLuint (CODEGEN_FUNCPTR *CreateProgram)(); - extern GLuint (CODEGEN_FUNCPTR *CreateShader)(GLenum type); - extern void (CODEGEN_FUNCPTR *DeleteProgram)(GLuint program); - extern void (CODEGEN_FUNCPTR *DeleteShader)(GLuint shader); - extern void (CODEGEN_FUNCPTR *DetachShader)(GLuint program, GLuint shader); - extern void (CODEGEN_FUNCPTR *DisableVertexAttribArray)(GLuint index); - extern void (CODEGEN_FUNCPTR *EnableVertexAttribArray)(GLuint index); - extern void (CODEGEN_FUNCPTR *GetActiveAttrib)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); - extern void (CODEGEN_FUNCPTR *GetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); - extern void (CODEGEN_FUNCPTR *GetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); - extern GLint (CODEGEN_FUNCPTR *GetAttribLocation)(GLuint program, const GLchar *name); - extern void (CODEGEN_FUNCPTR *GetProgramiv)(GLuint program, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); - extern void (CODEGEN_FUNCPTR *GetShaderiv)(GLuint shader, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); - extern void (CODEGEN_FUNCPTR *GetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); - extern GLint (CODEGEN_FUNCPTR *GetUniformLocation)(GLuint program, const GLchar *name); - extern void (CODEGEN_FUNCPTR *GetUniformfv)(GLuint program, GLint location, GLfloat *params); - extern void (CODEGEN_FUNCPTR *GetUniformiv)(GLuint program, GLint location, GLint *params); - extern void (CODEGEN_FUNCPTR *GetVertexAttribdv)(GLuint index, GLenum pname, GLdouble *params); - extern void (CODEGEN_FUNCPTR *GetVertexAttribfv)(GLuint index, GLenum pname, GLfloat *params); - extern void (CODEGEN_FUNCPTR *GetVertexAttribiv)(GLuint index, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid* *pointer); - extern GLboolean (CODEGEN_FUNCPTR *IsProgram)(GLuint program); - extern GLboolean (CODEGEN_FUNCPTR *IsShader)(GLuint shader); - extern void (CODEGEN_FUNCPTR *LinkProgram)(GLuint program); - extern void (CODEGEN_FUNCPTR *ShaderSource)(GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length); - extern void (CODEGEN_FUNCPTR *UseProgram)(GLuint program); - extern void (CODEGEN_FUNCPTR *Uniform1f)(GLint location, GLfloat v0); - extern void (CODEGEN_FUNCPTR *Uniform2f)(GLint location, GLfloat v0, GLfloat v1); - extern void (CODEGEN_FUNCPTR *Uniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - extern void (CODEGEN_FUNCPTR *Uniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - extern void (CODEGEN_FUNCPTR *Uniform1i)(GLint location, GLint v0); - extern void (CODEGEN_FUNCPTR *Uniform2i)(GLint location, GLint v0, GLint v1); - extern void (CODEGEN_FUNCPTR *Uniform3i)(GLint location, GLint v0, GLint v1, GLint v2); - extern void (CODEGEN_FUNCPTR *Uniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - extern void (CODEGEN_FUNCPTR *Uniform1fv)(GLint location, GLsizei count, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *Uniform2fv)(GLint location, GLsizei count, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *Uniform3fv)(GLint location, GLsizei count, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *Uniform4fv)(GLint location, GLsizei count, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *Uniform1iv)(GLint location, GLsizei count, const GLint *value); - extern void (CODEGEN_FUNCPTR *Uniform2iv)(GLint location, GLsizei count, const GLint *value); - extern void (CODEGEN_FUNCPTR *Uniform3iv)(GLint location, GLsizei count, const GLint *value); - extern void (CODEGEN_FUNCPTR *Uniform4iv)(GLint location, GLsizei count, const GLint *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *ValidateProgram)(GLuint program); - extern void (CODEGEN_FUNCPTR *VertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); - - // Extension: 2.1 - extern void (CODEGEN_FUNCPTR *UniformMatrix2x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix3x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix2x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *UniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - - // Extension: ARB_vertex_array_object - extern void (CODEGEN_FUNCPTR *BindVertexArray)(GLuint ren_array); - extern void (CODEGEN_FUNCPTR *DeleteVertexArrays)(GLsizei n, const GLuint *arrays); - extern void (CODEGEN_FUNCPTR *GenVertexArrays)(GLsizei n, GLuint *arrays); - extern GLboolean (CODEGEN_FUNCPTR *IsVertexArray)(GLuint ren_array); - - // Extension: ARB_map_buffer_range - extern GLvoid* (CODEGEN_FUNCPTR *MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); - extern void (CODEGEN_FUNCPTR *FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); - - // Extension: ARB_framebuffer_object - extern GLboolean (CODEGEN_FUNCPTR *IsRenderbuffer)(GLuint renderbuffer); - extern void (CODEGEN_FUNCPTR *BindRenderbuffer)(GLenum target, GLuint renderbuffer); - extern void (CODEGEN_FUNCPTR *DeleteRenderbuffers)(GLsizei n, const GLuint *renderbuffers); - extern void (CODEGEN_FUNCPTR *GenRenderbuffers)(GLsizei n, GLuint *renderbuffers); - extern void (CODEGEN_FUNCPTR *RenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - extern void (CODEGEN_FUNCPTR *GetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint *params); - extern GLboolean (CODEGEN_FUNCPTR *IsFramebuffer)(GLuint framebuffer); - extern void (CODEGEN_FUNCPTR *BindFramebuffer)(GLenum target, GLuint framebuffer); - extern void (CODEGEN_FUNCPTR *DeleteFramebuffers)(GLsizei n, const GLuint *framebuffers); - extern void (CODEGEN_FUNCPTR *GenFramebuffers)(GLsizei n, GLuint *framebuffers); - extern GLenum (CODEGEN_FUNCPTR *CheckFramebufferStatus)(GLenum target); - extern void (CODEGEN_FUNCPTR *FramebufferTexture1D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - extern void (CODEGEN_FUNCPTR *FramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - extern void (CODEGEN_FUNCPTR *FramebufferTexture3D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); - extern void (CODEGEN_FUNCPTR *FramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - extern void (CODEGEN_FUNCPTR *GetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GenerateMipmap)(GLenum target); - extern void (CODEGEN_FUNCPTR *BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - extern void (CODEGEN_FUNCPTR *RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - extern void (CODEGEN_FUNCPTR *FramebufferTextureLayer)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); - - // Extension: 3.0 - extern void (CODEGEN_FUNCPTR *ColorMaski)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); - extern void (CODEGEN_FUNCPTR *GetBooleani_v)(GLenum target, GLuint index, GLboolean *data); - extern void (CODEGEN_FUNCPTR *GetIntegeri_v)(GLenum target, GLuint index, GLint *data); - extern void (CODEGEN_FUNCPTR *Enablei)(GLenum target, GLuint index); - extern void (CODEGEN_FUNCPTR *Disablei)(GLenum target, GLuint index); - extern GLboolean (CODEGEN_FUNCPTR *IsEnabledi)(GLenum target, GLuint index); - extern void (CODEGEN_FUNCPTR *BeginTransformFeedback)(GLenum primitiveMode); - extern void (CODEGEN_FUNCPTR *EndTransformFeedback)(); - extern void (CODEGEN_FUNCPTR *BindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); - extern void (CODEGEN_FUNCPTR *BindBufferBase)(GLenum target, GLuint index, GLuint buffer); - extern void (CODEGEN_FUNCPTR *TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode); - extern void (CODEGEN_FUNCPTR *GetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); - extern void (CODEGEN_FUNCPTR *ClampColor)(GLenum target, GLenum clamp); - extern void (CODEGEN_FUNCPTR *BeginConditionalRender)(GLuint id, GLenum mode); - extern void (CODEGEN_FUNCPTR *EndConditionalRender)(); - extern void (CODEGEN_FUNCPTR *VertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - extern void (CODEGEN_FUNCPTR *GetVertexAttribIiv)(GLuint index, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint *params); - extern void (CODEGEN_FUNCPTR *VertexAttribI1i)(GLuint index, GLint x); - extern void (CODEGEN_FUNCPTR *VertexAttribI2i)(GLuint index, GLint x, GLint y); - extern void (CODEGEN_FUNCPTR *VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z); - extern void (CODEGEN_FUNCPTR *VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w); - extern void (CODEGEN_FUNCPTR *VertexAttribI1ui)(GLuint index, GLuint x); - extern void (CODEGEN_FUNCPTR *VertexAttribI2ui)(GLuint index, GLuint x, GLuint y); - extern void (CODEGEN_FUNCPTR *VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z); - extern void (CODEGEN_FUNCPTR *VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); - extern void (CODEGEN_FUNCPTR *VertexAttribI1iv)(GLuint index, const GLint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI2iv)(GLuint index, const GLint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI3iv)(GLuint index, const GLint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4iv)(GLuint index, const GLint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI1uiv)(GLuint index, const GLuint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI2uiv)(GLuint index, const GLuint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI3uiv)(GLuint index, const GLuint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4uiv)(GLuint index, const GLuint *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4bv)(GLuint index, const GLbyte *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4sv)(GLuint index, const GLshort *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4ubv)(GLuint index, const GLubyte *v); - extern void (CODEGEN_FUNCPTR *VertexAttribI4usv)(GLuint index, const GLushort *v); - extern void (CODEGEN_FUNCPTR *GetUniformuiv)(GLuint program, GLint location, GLuint *params); - extern void (CODEGEN_FUNCPTR *BindFragDataLocation)(GLuint program, GLuint color, const GLchar *name); - extern GLint (CODEGEN_FUNCPTR *GetFragDataLocation)(GLuint program, const GLchar *name); - extern void (CODEGEN_FUNCPTR *Uniform1ui)(GLint location, GLuint v0); - extern void (CODEGEN_FUNCPTR *Uniform2ui)(GLint location, GLuint v0, GLuint v1); - extern void (CODEGEN_FUNCPTR *Uniform3ui)(GLint location, GLuint v0, GLuint v1, GLuint v2); - extern void (CODEGEN_FUNCPTR *Uniform4ui)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); - extern void (CODEGEN_FUNCPTR *Uniform1uiv)(GLint location, GLsizei count, const GLuint *value); - extern void (CODEGEN_FUNCPTR *Uniform2uiv)(GLint location, GLsizei count, const GLuint *value); - extern void (CODEGEN_FUNCPTR *Uniform3uiv)(GLint location, GLsizei count, const GLuint *value); - extern void (CODEGEN_FUNCPTR *Uniform4uiv)(GLint location, GLsizei count, const GLuint *value); - extern void (CODEGEN_FUNCPTR *TexParameterIiv)(GLenum target, GLenum pname, const GLint *params); - extern void (CODEGEN_FUNCPTR *TexParameterIuiv)(GLenum target, GLenum pname, const GLuint *params); - extern void (CODEGEN_FUNCPTR *GetTexParameterIiv)(GLenum target, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetTexParameterIuiv)(GLenum target, GLenum pname, GLuint *params); - extern void (CODEGEN_FUNCPTR *ClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint *value); - extern void (CODEGEN_FUNCPTR *ClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint *value); - extern void (CODEGEN_FUNCPTR *ClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat *value); - extern void (CODEGEN_FUNCPTR *ClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); - extern const GLubyte * (CODEGEN_FUNCPTR *GetStringi)(GLenum name, GLuint index); - - // Extension: ARB_uniform_buffer_object - extern void (CODEGEN_FUNCPTR *GetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices); - extern void (CODEGEN_FUNCPTR *GetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); - extern GLuint (CODEGEN_FUNCPTR *GetUniformBlockIndex)(GLuint program, const GLchar *uniformBlockName); - extern void (CODEGEN_FUNCPTR *GetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); - extern void (CODEGEN_FUNCPTR *GetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); - extern void (CODEGEN_FUNCPTR *UniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); - - // Extension: ARB_copy_buffer - extern void (CODEGEN_FUNCPTR *CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); - - // Extension: 3.1 - extern void (CODEGEN_FUNCPTR *DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); - extern void (CODEGEN_FUNCPTR *DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount); - extern void (CODEGEN_FUNCPTR *TexBuffer)(GLenum target, GLenum internalformat, GLuint buffer); - extern void (CODEGEN_FUNCPTR *PrimitiveRestartIndex)(GLuint index); - - // Legacy - extern void (CODEGEN_FUNCPTR *EnableClientState)(GLenum cap); - extern void (CODEGEN_FUNCPTR *DisableClientState)(GLenum cap); - extern void (CODEGEN_FUNCPTR *VertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr); - extern void (CODEGEN_FUNCPTR *NormalPointer)(GLenum type, GLsizei stride, const GLvoid *ptr); - extern void (CODEGEN_FUNCPTR *ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr); - extern void (CODEGEN_FUNCPTR *TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr); - extern void (CODEGEN_FUNCPTR *TexEnvi)(GLenum target, GLenum pname, GLint param); - extern void (CODEGEN_FUNCPTR *MatrixMode)(GLenum mode); - extern void (CODEGEN_FUNCPTR *LoadIdentity)(void); - extern void (CODEGEN_FUNCPTR *Ortho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val); - extern void (CODEGEN_FUNCPTR *Color3d)(GLdouble red, GLdouble green, GLdouble blue); -} - -#endif // OPENGL_NOLOAD_STYLE_HPP diff --git a/modules/core/src/glob.cpp b/modules/core/src/glob.cpp deleted file mode 100644 index c75bd2e..0000000 --- a/modules/core/src/glob.cpp +++ /dev/null @@ -1,293 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2008-2013, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and / or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined WIN32 || defined _WIN32 || defined WINCE -# include -const char dir_separators[] = "/\\"; -const char native_separator = '\\'; - -namespace -{ - struct dirent - { - const char* d_name; - }; - - struct DIR - { -#ifdef HAVE_WINRT - WIN32_FIND_DATAW data; -#else - WIN32_FIND_DATA data; -#endif - HANDLE handle; - dirent ent; -#ifdef HAVE_WINRT - DIR() {}; - ~DIR() - { - if (ent.d_name) - delete[] ent.d_name; - } -#endif - }; - - DIR* opendir(const char* path) - { - DIR* dir = new DIR; - dir->ent.d_name = 0; -#ifdef HAVE_WINRT - cv::String full_path = cv::String(path) + "\\*"; - wchar_t wfull_path[MAX_PATH]; - size_t copied = mbstowcs(wfull_path, full_path.c_str(), MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - dir->handle = ::FindFirstFileExW(wfull_path, FindExInfoStandard, - &dir->data, FindExSearchNameMatch, NULL, 0); -#else - dir->handle = ::FindFirstFileExA((cv::String(path) + "\\*").c_str(), - FindExInfoStandard, &dir->data, FindExSearchNameMatch, NULL, 0); -#endif - if(dir->handle == INVALID_HANDLE_VALUE) - { - /*closedir will do all cleanup*/ - delete dir; - return 0; - } - return dir; - } - - dirent* readdir(DIR* dir) - { -#ifdef HAVE_WINRT - if (dir->ent.d_name != 0) - { - if (::FindNextFileW(dir->handle, &dir->data) != TRUE) - return 0; - } - size_t asize = wcstombs(NULL, dir->data.cFileName, 0); - CV_Assert((asize != 0) && (asize != (size_t)-1)); - char* aname = new char[asize+1]; - aname[asize] = 0; - wcstombs(aname, dir->data.cFileName, asize); - dir->ent.d_name = aname; -#else - if (dir->ent.d_name != 0) - { - if (::FindNextFileA(dir->handle, &dir->data) != TRUE) - return 0; - } - dir->ent.d_name = dir->data.cFileName; -#endif - return &dir->ent; - } - - void closedir(DIR* dir) - { - ::FindClose(dir->handle); - delete dir; - } - - -} -#else -# include -# include -const char dir_separators[] = "/"; -const char native_separator = '/'; -#endif - -static bool isDir(const cv::String& path, DIR* dir) -{ -#if defined WIN32 || defined _WIN32 || defined WINCE - DWORD attributes; - BOOL status = TRUE; - if (dir) - attributes = dir->data.dwFileAttributes; - else - { - WIN32_FILE_ATTRIBUTE_DATA all_attrs; -#ifdef HAVE_WINRT - wchar_t wpath[MAX_PATH]; - size_t copied = mbstowcs(wpath, path.c_str(), MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - status = ::GetFileAttributesExW(wpath, GetFileExInfoStandard, &all_attrs); -#else - status = ::GetFileAttributesExA(path.c_str(), GetFileExInfoStandard, &all_attrs); -#endif - attributes = all_attrs.dwFileAttributes; - } - - return status && ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0); -#else - (void)dir; - struct stat stat_buf; - if (0 != stat( path.c_str(), &stat_buf)) - return false; - int is_dir = S_ISDIR( stat_buf.st_mode); - return is_dir != 0; -#endif -} - -static bool wildcmp(const char *string, const char *wild) -{ - // Based on wildcmp written by Jack Handy - jakkhandy@hotmail.com - const char *cp = 0, *mp = 0; - - while ((*string) && (*wild != '*')) - { - if ((*wild != *string) && (*wild != '?')) - { - return false; - } - - wild++; - string++; - } - - while (*string) - { - if (*wild == '*') - { - if (!*++wild) - { - return true; - } - - mp = wild; - cp = string + 1; - } - else if ((*wild == *string) || (*wild == '?')) - { - wild++; - string++; - } - else - { - wild = mp; - string = cp++; - } - } - - while (*wild == '*') - { - wild++; - } - - return *wild == 0; -} - -static void glob_rec(const cv::String& directory, const cv::String& wildchart, std::vector& result, bool recursive) -{ - DIR *dir; - struct dirent *ent; - - if ((dir = opendir (directory.c_str())) != 0) - { - /* find all the files and directories within directory */ - try - { - while ((ent = readdir (dir)) != 0) - { - const char* name = ent->d_name; - if((name[0] == 0) || (name[0] == '.' && name[1] == 0) || (name[0] == '.' && name[1] == '.' && name[2] == 0)) - continue; - - cv::String path = directory + native_separator + name; - - if (isDir(path, dir)) - { - if (recursive) - glob_rec(path, wildchart, result, recursive); - } - else - { - if (wildchart.empty() || wildcmp(name, wildchart.c_str())) - result.push_back(path); - } - } - } - catch (...) - { - closedir(dir); - throw; - } - closedir(dir); - } - else CV_Error(CV_StsObjectNotFound, cv::format("could not open directory: %s", directory.c_str())); -} - -void cv::glob(String pattern, std::vector& result, bool recursive) -{ - result.clear(); - String path, wildchart; - - if (isDir(pattern, 0)) - { - if(strchr(dir_separators, pattern[pattern.size() - 1]) != 0) - { - path = pattern.substr(0, pattern.size() - 1); - } - else - { - path = pattern; - } - } - else - { - size_t pos = pattern.find_last_of(dir_separators); - if (pos == String::npos) - { - wildchart = pattern; - path = "."; - } - else - { - path = pattern.substr(0, pos); - wildchart = pattern.substr(pos + 1); - } - } - - glob_rec(path, wildchart, result, recursive); - std::sort(result.begin(), result.end()); -} diff --git a/modules/core/src/gpumat.cpp b/modules/core/src/gpumat.cpp deleted file mode 100644 index 9669191..0000000 --- a/modules/core/src/gpumat.cpp +++ /dev/null @@ -1,788 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/core/gpumat.hpp" -#include - -#if defined(HAVE_CUDA) -# include -# include - -# define CUDART_MINIMUM_REQUIRED_VERSION 4020 -# define NPP_MINIMUM_REQUIRED_VERSION 4200 - -# if (CUDART_VERSION < CUDART_MINIMUM_REQUIRED_VERSION) -# error "Insufficient Cuda Runtime library version, please update it." -# endif - -# if (NPP_VERSION_MAJOR * 1000 + NPP_VERSION_MINOR * 100 + NPP_VERSION_BUILD < NPP_MINIMUM_REQUIRED_VERSION) -# error "Insufficient NPP version, please update it." -# endif -#endif - -#ifdef DYNAMIC_CUDA_SUPPORT -# include -# include -# include -# include -#endif - -#ifdef ANDROID -# ifdef LOG_TAG -# undef LOG_TAG -# endif -# ifdef LOGE -# undef LOGE -# endif -# ifdef LOGD -# undef LOGD -# endif -# ifdef LOGI -# undef LOGI -# endif - -# include - -# define LOG_TAG "OpenCV::CUDA" -# define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) -# define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -# define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) -#endif - -using namespace std; -using namespace cv; -using namespace cv::gpu; - -#define throw_nogpu CV_Error(CV_GpuNotSupported, "The library is compiled without CUDA support") - -#include "opencv2/dynamicuda/dynamicuda.hpp" - -#ifdef DYNAMIC_CUDA_SUPPORT - -typedef GpuFuncTable* (*GpuFactoryType)(); -typedef DeviceInfoFuncTable* (*DeviceInfoFactoryType)(); - -static GpuFactoryType gpuFactory = NULL; -static DeviceInfoFactoryType deviceInfoFactory = NULL; - -# if defined(__linux__) || defined(__APPLE__) || defined (ANDROID) - -const std::string DYNAMIC_CUDA_LIB_NAME = "libopencv_dynamicuda.so"; - -# ifdef ANDROID -static const std::string getCudaSupportLibName() -{ - Dl_info dl_info; - if(0 != dladdr((void *)getCudaSupportLibName, &dl_info)) - { - LOGD("Library name: %s", dl_info.dli_fname); - LOGD("Library base address: %p", dl_info.dli_fbase); - - const char* libName=dl_info.dli_fname; - while( ((*libName)=='/') || ((*libName)=='.') ) - libName++; - - char lineBuf[2048]; - FILE* file = fopen("/proc/self/smaps", "rt"); - - if(file) - { - while (fgets(lineBuf, sizeof lineBuf, file) != NULL) - { - //verify that line ends with library name - int lineLength = strlen(lineBuf); - int libNameLength = strlen(libName); - - //trim end - for(int i = lineLength - 1; i >= 0 && isspace(lineBuf[i]); --i) - { - lineBuf[i] = 0; - --lineLength; - } - - if (0 != strncmp(lineBuf + lineLength - libNameLength, libName, libNameLength)) - { - //the line does not contain the library name - continue; - } - - //extract path from smaps line - char* pathBegin = strchr(lineBuf, '/'); - if (0 == pathBegin) - { - LOGE("Strange error: could not find path beginning in lin \"%s\"", lineBuf); - continue; - } - - char* pathEnd = strrchr(pathBegin, '/'); - pathEnd[1] = 0; - - LOGD("Libraries folder found: %s", pathBegin); - - fclose(file); - return std::string(pathBegin) + DYNAMIC_CUDA_LIB_NAME; - } - fclose(file); - LOGE("Could not find library path"); - } - else - { - LOGE("Could not read /proc/self/smaps"); - } - } - else - { - LOGE("Could not get library name and base address"); - } - - return string(); -} - -# else -static const std::string getCudaSupportLibName() -{ - return DYNAMIC_CUDA_LIB_NAME; -} -# endif - -static bool loadCudaSupportLib() -{ - void* handle; - const std::string name = getCudaSupportLibName(); - dlerror(); - handle = dlopen(name.c_str(), RTLD_LAZY); - if (!handle) - { - LOGE("Cannot dlopen %s: %s", name.c_str(), dlerror()); - return false; - } - - deviceInfoFactory = (DeviceInfoFactoryType)dlsym(handle, "deviceInfoFactory"); - if (!deviceInfoFactory) - { - LOGE("Cannot dlsym deviceInfoFactory: %s", dlerror()); - dlclose(handle); - return false; - } - - gpuFactory = (GpuFactoryType)dlsym(handle, "gpuFactory"); - if (!gpuFactory) - { - LOGE("Cannot dlsym gpuFactory: %s", dlerror()); - dlclose(handle); - return false; - } - - return true; -} - -# else -# error "Dynamic CUDA support is not implemented for this platform!" -# endif - -#endif - -static GpuFuncTable* gpuFuncTable() -{ -#ifdef DYNAMIC_CUDA_SUPPORT - static EmptyFuncTable stub; - static GpuFuncTable* libFuncTable = loadCudaSupportLib() ? gpuFactory(): (GpuFuncTable*)&stub; - static GpuFuncTable *funcTable = libFuncTable ? libFuncTable : (GpuFuncTable*)&stub; -#else -# ifdef USE_CUDA - static CudaFuncTable impl; - static GpuFuncTable* funcTable = &impl; -#else - static EmptyFuncTable stub; - static GpuFuncTable* funcTable = &stub; -#endif -#endif - return funcTable; -} - -static DeviceInfoFuncTable* deviceInfoFuncTable() -{ -#ifdef DYNAMIC_CUDA_SUPPORT - static EmptyDeviceInfoFuncTable stub; - static DeviceInfoFuncTable* libFuncTable = loadCudaSupportLib() ? deviceInfoFactory(): (DeviceInfoFuncTable*)&stub; - static DeviceInfoFuncTable* funcTable = libFuncTable ? libFuncTable : (DeviceInfoFuncTable*)&stub; -#else -# ifdef USE_CUDA - static CudaDeviceInfoFuncTable impl; - static DeviceInfoFuncTable* funcTable = &impl; -#else - static EmptyDeviceInfoFuncTable stub; - static DeviceInfoFuncTable* funcTable = &stub; -#endif -#endif - return funcTable; -} - - -//////////////////////////////// Initialization & Info //////////////////////// - -int cv::gpu::getCudaEnabledDeviceCount() { return deviceInfoFuncTable()->getCudaEnabledDeviceCount(); } - -void cv::gpu::setDevice(int device) { deviceInfoFuncTable()->setDevice(device); } -int cv::gpu::getDevice() { return deviceInfoFuncTable()->getDevice(); } - -void cv::gpu::resetDevice() { deviceInfoFuncTable()->resetDevice(); } - -bool cv::gpu::deviceSupports(FeatureSet feature_set) { return deviceInfoFuncTable()->deviceSupports(feature_set); } - -bool cv::gpu::TargetArchs::builtWith(FeatureSet feature_set) { return deviceInfoFuncTable()->builtWith(feature_set); } -bool cv::gpu::TargetArchs::has(int major, int minor) { return deviceInfoFuncTable()->has(major, minor); } -bool cv::gpu::TargetArchs::hasPtx(int major, int minor) { return deviceInfoFuncTable()->hasPtx(major, minor); } -bool cv::gpu::TargetArchs::hasBin(int major, int minor) { return deviceInfoFuncTable()->hasBin(major, minor); } -bool cv::gpu::TargetArchs::hasEqualOrLessPtx(int major, int minor) { return deviceInfoFuncTable()->hasEqualOrLessPtx(major, minor); } -bool cv::gpu::TargetArchs::hasEqualOrGreater(int major, int minor) { return deviceInfoFuncTable()->hasEqualOrGreater(major, minor); } -bool cv::gpu::TargetArchs::hasEqualOrGreaterPtx(int major, int minor) { return deviceInfoFuncTable()->hasEqualOrGreaterPtx(major, minor); } -bool cv::gpu::TargetArchs::hasEqualOrGreaterBin(int major, int minor) { return deviceInfoFuncTable()->hasEqualOrGreaterBin(major, minor); } - -size_t cv::gpu::DeviceInfo::sharedMemPerBlock() const { return deviceInfoFuncTable()->sharedMemPerBlock(device_id_); } -void cv::gpu::DeviceInfo::queryMemory(size_t& total_memory, size_t& free_memory) const { deviceInfoFuncTable()->queryMemory(device_id_, total_memory, free_memory); } -size_t cv::gpu::DeviceInfo::freeMemory() const { return deviceInfoFuncTable()->freeMemory(device_id_); } -size_t cv::gpu::DeviceInfo::totalMemory() const { return deviceInfoFuncTable()->totalMemory(device_id_); } -bool cv::gpu::DeviceInfo::supports(FeatureSet feature_set) const { return deviceInfoFuncTable()->supports(device_id_, feature_set); } -bool cv::gpu::DeviceInfo::isCompatible() const { return deviceInfoFuncTable()->isCompatible(device_id_); } - -void cv::gpu::DeviceInfo::query() -{ - name_ = deviceInfoFuncTable()->name(device_id_); - multi_processor_count_ = deviceInfoFuncTable()->multiProcessorCount(device_id_); - majorVersion_ = deviceInfoFuncTable()->majorVersion(device_id_); - minorVersion_ = deviceInfoFuncTable()->minorVersion(device_id_); -} - -void cv::gpu::printCudaDeviceInfo(int device) { deviceInfoFuncTable()->printCudaDeviceInfo(device); } -void cv::gpu::printShortCudaDeviceInfo(int device) { deviceInfoFuncTable()->printShortCudaDeviceInfo(device); } - -namespace cv { namespace gpu -{ - CV_EXPORTS void copyWithMask(const cv::gpu::GpuMat&, cv::gpu::GpuMat&, const cv::gpu::GpuMat&, cudaStream_t); - CV_EXPORTS void convertTo(const cv::gpu::GpuMat&, cv::gpu::GpuMat&); - CV_EXPORTS void convertTo(const cv::gpu::GpuMat&, cv::gpu::GpuMat&, double, double, cudaStream_t = 0); - CV_EXPORTS void setTo(cv::gpu::GpuMat&, cv::Scalar, cudaStream_t); - CV_EXPORTS void setTo(cv::gpu::GpuMat&, cv::Scalar, const cv::gpu::GpuMat&, cudaStream_t); - CV_EXPORTS void setTo(cv::gpu::GpuMat&, cv::Scalar); - CV_EXPORTS void setTo(cv::gpu::GpuMat&, cv::Scalar, const cv::gpu::GpuMat&); -}} - -//////////////////////////////// GpuMat /////////////////////////////// - -cv::gpu::GpuMat::GpuMat(const GpuMat& m) - : flags(m.flags), rows(m.rows), cols(m.cols), step(m.step), data(m.data), refcount(m.refcount), datastart(m.datastart), dataend(m.dataend) -{ - if (refcount) - CV_XADD(refcount, 1); -} - -cv::gpu::GpuMat::GpuMat(int rows_, int cols_, int type_, void* data_, size_t step_) : - flags(Mat::MAGIC_VAL + (type_ & TYPE_MASK)), rows(rows_), cols(cols_), - step(step_), data((uchar*)data_), refcount(0), - datastart((uchar*)data_), dataend((uchar*)data_) -{ - size_t minstep = cols * elemSize(); - - if (step == Mat::AUTO_STEP) - { - step = minstep; - flags |= Mat::CONTINUOUS_FLAG; - } - else - { - if (rows == 1) - step = minstep; - - CV_DbgAssert(step >= minstep); - - flags |= step == minstep ? Mat::CONTINUOUS_FLAG : 0; - } - dataend += step * (rows - 1) + minstep; -} - -cv::gpu::GpuMat::GpuMat(Size size_, int type_, void* data_, size_t step_) : - flags(Mat::MAGIC_VAL + (type_ & TYPE_MASK)), rows(size_.height), cols(size_.width), - step(step_), data((uchar*)data_), refcount(0), - datastart((uchar*)data_), dataend((uchar*)data_) -{ - size_t minstep = cols * elemSize(); - - if (step == Mat::AUTO_STEP) - { - step = minstep; - flags |= Mat::CONTINUOUS_FLAG; - } - else - { - if (rows == 1) - step = minstep; - - CV_DbgAssert(step >= minstep); - - flags |= step == minstep ? Mat::CONTINUOUS_FLAG : 0; - } - dataend += step * (rows - 1) + minstep; -} - -cv::gpu::GpuMat::GpuMat(const GpuMat& m, Range _rowRange, Range _colRange) -{ - flags = m.flags; - step = m.step; refcount = m.refcount; - data = m.data; datastart = m.datastart; dataend = m.dataend; - - if (_rowRange == Range::all()) - rows = m.rows; - else - { - CV_Assert(0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows); - - rows = _rowRange.size(); - data += step*_rowRange.start; - } - - if (_colRange == Range::all()) - cols = m.cols; - else - { - CV_Assert(0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols); - - cols = _colRange.size(); - data += _colRange.start*elemSize(); - flags &= cols < m.cols ? ~Mat::CONTINUOUS_FLAG : -1; - } - - if (rows == 1) - flags |= Mat::CONTINUOUS_FLAG; - - if (refcount) - CV_XADD(refcount, 1); - - if (rows <= 0 || cols <= 0) - rows = cols = 0; -} - -cv::gpu::GpuMat::GpuMat(const GpuMat& m, Rect roi) : - flags(m.flags), rows(roi.height), cols(roi.width), - step(m.step), data(m.data + roi.y*step), refcount(m.refcount), - datastart(m.datastart), dataend(m.dataend) -{ - flags &= roi.width < m.cols ? ~Mat::CONTINUOUS_FLAG : -1; - data += roi.x * elemSize(); - - CV_Assert(0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows); - - if (refcount) - CV_XADD(refcount, 1); - - if (rows <= 0 || cols <= 0) - rows = cols = 0; -} - -cv::gpu::GpuMat::GpuMat(const Mat& m) : - flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) -{ - upload(m); -} - -GpuMat& cv::gpu::GpuMat::operator = (const GpuMat& m) -{ - if (this != &m) - { - GpuMat temp(m); - swap(temp); - } - - return *this; -} - -void cv::gpu::GpuMat::swap(GpuMat& b) -{ - std::swap(flags, b.flags); - std::swap(rows, b.rows); - std::swap(cols, b.cols); - std::swap(step, b.step); - std::swap(data, b.data); - std::swap(datastart, b.datastart); - std::swap(dataend, b.dataend); - std::swap(refcount, b.refcount); -} - -void cv::gpu::GpuMat::locateROI(Size& wholeSize, Point& ofs) const -{ - size_t esz = elemSize(); - ptrdiff_t delta1 = data - datastart; - ptrdiff_t delta2 = dataend - datastart; - - CV_DbgAssert(step > 0); - - if (delta1 == 0) - ofs.x = ofs.y = 0; - else - { - ofs.y = static_cast(delta1 / step); - ofs.x = static_cast((delta1 - step * ofs.y) / esz); - - CV_DbgAssert(data == datastart + ofs.y * step + ofs.x * esz); - } - - size_t minstep = (ofs.x + cols) * esz; - - wholeSize.height = std::max(static_cast((delta2 - minstep) / step + 1), ofs.y + rows); - wholeSize.width = std::max(static_cast((delta2 - step * (wholeSize.height - 1)) / esz), ofs.x + cols); -} - -GpuMat& cv::gpu::GpuMat::adjustROI(int dtop, int dbottom, int dleft, int dright) -{ - Size wholeSize; - Point ofs; - locateROI(wholeSize, ofs); - - size_t esz = elemSize(); - - int row1 = std::max(ofs.y - dtop, 0); - int row2 = std::min(ofs.y + rows + dbottom, wholeSize.height); - - int col1 = std::max(ofs.x - dleft, 0); - int col2 = std::min(ofs.x + cols + dright, wholeSize.width); - - data += (row1 - ofs.y) * step + (col1 - ofs.x) * esz; - rows = row2 - row1; - cols = col2 - col1; - - if (esz * cols == step || rows == 1) - flags |= Mat::CONTINUOUS_FLAG; - else - flags &= ~Mat::CONTINUOUS_FLAG; - - return *this; -} - -GpuMat cv::gpu::GpuMat::reshape(int new_cn, int new_rows) const -{ - GpuMat hdr = *this; - - int cn = channels(); - if (new_cn == 0) - new_cn = cn; - - int total_width = cols * cn; - - if ((new_cn > total_width || total_width % new_cn != 0) && new_rows == 0) - new_rows = rows * total_width / new_cn; - - if (new_rows != 0 && new_rows != rows) - { - int total_size = total_width * rows; - - if (!isContinuous()) - CV_Error(CV_BadStep, "The matrix is not continuous, thus its number of rows can not be changed"); - - if ((unsigned)new_rows > (unsigned)total_size) - CV_Error(CV_StsOutOfRange, "Bad new number of rows"); - - total_width = total_size / new_rows; - - if (total_width * new_rows != total_size) - CV_Error(CV_StsBadArg, "The total number of matrix elements is not divisible by the new number of rows"); - - hdr.rows = new_rows; - hdr.step = total_width * elemSize1(); - } - - int new_width = total_width / new_cn; - - if (new_width * new_cn != total_width) - CV_Error(CV_BadNumChannels, "The total width is not divisible by the new number of channels"); - - hdr.cols = new_width; - hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn - 1) << CV_CN_SHIFT); - - return hdr; -} - -cv::Mat::Mat(const GpuMat& m) : flags(0), dims(0), rows(0), cols(0), data(0), refcount(0), datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows) -{ - m.download(*this); -} - -void cv::gpu::createContinuous(int rows, int cols, int type, GpuMat& m) -{ - int area = rows * cols; - if (m.empty() || m.type() != type || !m.isContinuous() || m.size().area() < area) - m.create(1, area, type); - - m.cols = cols; - m.rows = rows; - m.step = m.elemSize() * cols; - m.flags |= Mat::CONTINUOUS_FLAG; -} - -void cv::gpu::ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m) -{ - if (m.empty() || m.type() != type || m.data != m.datastart) - m.create(rows, cols, type); - else - { - const size_t esz = m.elemSize(); - const ptrdiff_t delta2 = m.dataend - m.datastart; - - const size_t minstep = m.cols * esz; - - Size wholeSize; - wholeSize.height = std::max(static_cast((delta2 - minstep) / m.step + 1), m.rows); - wholeSize.width = std::max(static_cast((delta2 - m.step * (wholeSize.height - 1)) / esz), m.cols); - - if (wholeSize.height < rows || wholeSize.width < cols) - m.create(rows, cols, type); - else - { - m.cols = cols; - m.rows = rows; - } - } -} - -GpuMat cv::gpu::allocMatFromBuf(int rows, int cols, int type, GpuMat &mat) -{ - if (!mat.empty() && mat.type() == type && mat.rows >= rows && mat.cols >= cols) - return mat(Rect(0, 0, cols, rows)); - return mat = GpuMat(rows, cols, type); -} - -void cv::gpu::GpuMat::upload(const Mat& m) -{ - CV_DbgAssert(!m.empty()); - - create(m.size(), m.type()); - - gpuFuncTable()->copy(m, *this); -} - -void cv::gpu::GpuMat::download(Mat& m) const -{ - CV_DbgAssert(!empty()); - - m.create(size(), type()); - - gpuFuncTable()->copy(*this, m); -} - -void cv::gpu::GpuMat::copyTo(GpuMat& m) const -{ - CV_DbgAssert(!empty()); - - m.create(size(), type()); - - gpuFuncTable()->copy(*this, m); -} - -void cv::gpu::GpuMat::copyTo(GpuMat& mat, const GpuMat& mask) const -{ - if (mask.empty()) - { - copyTo(mat); - } - else - { - uchar* data0 = mat.data; - - mat.create(size(), type()); - - // do not leave dst uninitialized - if (mat.data != data0) - mat.setTo(Scalar::all(0)); - - gpuFuncTable()->copyWithMask(*this, mat, mask); - } -} - -void cv::gpu::GpuMat::convertTo(GpuMat& dst, int rtype, double alpha, double beta) const -{ - bool noScale = fabs(alpha - 1) < numeric_limits::epsilon() && fabs(beta) < numeric_limits::epsilon(); - - if (rtype < 0) - rtype = type(); - else - rtype = CV_MAKETYPE(CV_MAT_DEPTH(rtype), channels()); - - int sdepth = depth(); - int ddepth = CV_MAT_DEPTH(rtype); - if (sdepth == ddepth && noScale) - { - copyTo(dst); - return; - } - - GpuMat temp; - const GpuMat* psrc = this; - if (sdepth != ddepth && psrc == &dst) - { - temp = *this; - psrc = &temp; - } - - dst.create(size(), rtype); - - if (noScale) - cv::gpu::convertTo(*psrc, dst); - else - cv::gpu::convertTo(*psrc, dst, alpha, beta); -} - -GpuMat& cv::gpu::GpuMat::setTo(Scalar s, const GpuMat& mask) -{ - CV_Assert(mask.empty() || mask.type() == CV_8UC1); - CV_DbgAssert(!empty()); - - gpu::setTo(*this, s, mask); - - return *this; -} - -void cv::gpu::GpuMat::create(int _rows, int _cols, int _type) -{ - _type &= TYPE_MASK; - - if (rows == _rows && cols == _cols && type() == _type && data) - return; - - if (data) - release(); - - CV_DbgAssert(_rows >= 0 && _cols >= 0); - - if (_rows > 0 && _cols > 0) - { - flags = Mat::MAGIC_VAL + _type; - rows = _rows; - cols = _cols; - - size_t esz = elemSize(); - - void* devPtr; - gpuFuncTable()->mallocPitch(&devPtr, &step, esz * cols, rows); - - // Single row must be continuous - if (rows == 1) - step = esz * cols; - - if (esz * cols == step) - flags |= Mat::CONTINUOUS_FLAG; - - int64 _nettosize = static_cast(step) * rows; - size_t nettosize = static_cast(_nettosize); - - datastart = data = static_cast(devPtr); - dataend = data + nettosize; - - refcount = static_cast(fastMalloc(sizeof(*refcount))); - *refcount = 1; - } -} - -void cv::gpu::GpuMat::release() -{ - if (refcount && CV_XADD(refcount, -1) == 1) - { - fastFree(refcount); - - gpuFuncTable()->free(datastart); - } - - data = datastart = dataend = 0; - step = rows = cols = 0; - refcount = 0; -} - -namespace cv { namespace gpu -{ - void convertTo(const GpuMat& src, GpuMat& dst) - { - gpuFuncTable()->convert(src, dst); - } - - void convertTo(const GpuMat& src, GpuMat& dst, double alpha, double beta, cudaStream_t stream) - { - gpuFuncTable()->convert(src, dst, alpha, beta, stream); - } - - void setTo(GpuMat& src, Scalar s, cudaStream_t stream) - { - gpuFuncTable()->setTo(src, s, cv::gpu::GpuMat(), stream); - } - - void setTo(GpuMat& src, Scalar s, const GpuMat& mask, cudaStream_t stream) - { - gpuFuncTable()->setTo(src, s, mask, stream); - } - - void setTo(GpuMat& src, Scalar s) - { - setTo(src, s, 0); - } - - void setTo(GpuMat& src, Scalar s, const GpuMat& mask) - { - setTo(src, s, mask, 0); - } -}} - -//////////////////////////////////////////////////////////////////////// -// Error handling - -void cv::gpu::error(const char *error_string, const char *file, const int line, const char *func) -{ - int code = CV_GpuApiCallError; - - if (uncaught_exception()) - { - const char* errorStr = cvErrorStr(code); - const char* function = func ? func : "unknown function"; - - cerr << "OpenCV Error: " << errorStr << "(" << error_string << ") in " << function << ", file " << file << ", line " << line; - cerr.flush(); - } - else - cv::error( cv::Exception(code, error_string, func, file, line) ); -} diff --git a/modules/core/src/lapack.cpp b/modules/core/src/lapack.cpp deleted file mode 100644 index 7ee84a6..0000000 --- a/modules/core/src/lapack.cpp +++ /dev/null @@ -1,1835 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined _M_IX86 && defined _MSC_VER && _MSC_VER < 1700 -#pragma float_control(precise, on) -#endif - -namespace cv -{ - -/****************************************************************************************\ -* LU & Cholesky implementation for small matrices * -\****************************************************************************************/ - -template static inline int -LUImpl(_Tp* A, size_t astep, int m, _Tp* b, size_t bstep, int n) -{ - int i, j, k, p = 1; - astep /= sizeof(A[0]); - bstep /= sizeof(b[0]); - - for( i = 0; i < m; i++ ) - { - k = i; - - for( j = i+1; j < m; j++ ) - if( std::abs(A[j*astep + i]) > std::abs(A[k*astep + i]) ) - k = j; - - if( std::abs(A[k*astep + i]) < std::numeric_limits<_Tp>::epsilon() ) - return 0; - - if( k != i ) - { - for( j = i; j < m; j++ ) - std::swap(A[i*astep + j], A[k*astep + j]); - if( b ) - for( j = 0; j < n; j++ ) - std::swap(b[i*bstep + j], b[k*bstep + j]); - p = -p; - } - - _Tp d = -1/A[i*astep + i]; - - for( j = i+1; j < m; j++ ) - { - _Tp alpha = A[j*astep + i]*d; - - for( k = i+1; k < m; k++ ) - A[j*astep + k] += alpha*A[i*astep + k]; - - if( b ) - for( k = 0; k < n; k++ ) - b[j*bstep + k] += alpha*b[i*bstep + k]; - } - - A[i*astep + i] = -d; - } - - if( b ) - { - for( i = m-1; i >= 0; i-- ) - for( j = 0; j < n; j++ ) - { - _Tp s = b[i*bstep + j]; - for( k = i+1; k < m; k++ ) - s -= A[i*astep + k]*b[k*bstep + j]; - b[i*bstep + j] = s*A[i*astep + i]; - } - } - - return p; -} - - -int LU(float* A, size_t astep, int m, float* b, size_t bstep, int n) -{ - return LUImpl(A, astep, m, b, bstep, n); -} - - -int LU(double* A, size_t astep, int m, double* b, size_t bstep, int n) -{ - return LUImpl(A, astep, m, b, bstep, n); -} - - -template static inline bool -CholImpl(_Tp* A, size_t astep, int m, _Tp* b, size_t bstep, int n) -{ - _Tp* L = A; - int i, j, k; - double s; - astep /= sizeof(A[0]); - bstep /= sizeof(b[0]); - - for( i = 0; i < m; i++ ) - { - for( j = 0; j < i; j++ ) - { - s = A[i*astep + j]; - for( k = 0; k < j; k++ ) - s -= L[i*astep + k]*L[j*astep + k]; - L[i*astep + j] = (_Tp)(s*L[j*astep + j]); - } - s = A[i*astep + i]; - for( k = 0; k < j; k++ ) - { - double t = L[i*astep + k]; - s -= t*t; - } - if( s < std::numeric_limits<_Tp>::epsilon() ) - return false; - L[i*astep + i] = (_Tp)(1./std::sqrt(s)); - } - - if( !b ) - return true; - - // LLt x = b - // 1: L y = b - // 2. Lt x = y - - /* - [ L00 ] y0 b0 - [ L10 L11 ] y1 = b1 - [ L20 L21 L22 ] y2 b2 - [ L30 L31 L32 L33 ] y3 b3 - - [ L00 L10 L20 L30 ] x0 y0 - [ L11 L21 L31 ] x1 = y1 - [ L22 L32 ] x2 y2 - [ L33 ] x3 y3 - */ - - for( i = 0; i < m; i++ ) - { - for( j = 0; j < n; j++ ) - { - s = b[i*bstep + j]; - for( k = 0; k < i; k++ ) - s -= L[i*astep + k]*b[k*bstep + j]; - b[i*bstep + j] = (_Tp)(s*L[i*astep + i]); - } - } - - for( i = m-1; i >= 0; i-- ) - { - for( j = 0; j < n; j++ ) - { - s = b[i*bstep + j]; - for( k = m-1; k > i; k-- ) - s -= L[k*astep + i]*b[k*bstep + j]; - b[i*bstep + j] = (_Tp)(s*L[i*astep + i]); - } - } - - return true; -} - - -bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep, int n) -{ - return CholImpl(A, astep, m, b, bstep, n); -} - -bool Cholesky(double* A, size_t astep, int m, double* b, size_t bstep, int n) -{ - return CholImpl(A, astep, m, b, bstep, n); -} - - -template static inline _Tp hypot(_Tp a, _Tp b) -{ - a = std::abs(a); - b = std::abs(b); - if( a > b ) - { - b /= a; - return a*std::sqrt(1 + b*b); - } - if( b > 0 ) - { - a /= b; - return b*std::sqrt(1 + a*a); - } - return 0; -} - - -template bool -JacobiImpl_( _Tp* A, size_t astep, _Tp* W, _Tp* V, size_t vstep, int n, uchar* buf ) -{ - const _Tp eps = std::numeric_limits<_Tp>::epsilon(); - int i, j, k, m; - - astep /= sizeof(A[0]); - if( V ) - { - vstep /= sizeof(V[0]); - for( i = 0; i < n; i++ ) - { - for( j = 0; j < n; j++ ) - V[i*vstep + j] = (_Tp)0; - V[i*vstep + i] = (_Tp)1; - } - } - - int iters, maxIters = n*n*30; - - int* indR = (int*)alignPtr(buf, sizeof(int)); - int* indC = indR + n; - _Tp mv = (_Tp)0; - - for( k = 0; k < n; k++ ) - { - W[k] = A[(astep + 1)*k]; - if( k < n - 1 ) - { - for( m = k+1, mv = std::abs(A[astep*k + m]), i = k+2; i < n; i++ ) - { - _Tp val = std::abs(A[astep*k+i]); - if( mv < val ) - mv = val, m = i; - } - indR[k] = m; - } - if( k > 0 ) - { - for( m = 0, mv = std::abs(A[k]), i = 1; i < k; i++ ) - { - _Tp val = std::abs(A[astep*i+k]); - if( mv < val ) - mv = val, m = i; - } - indC[k] = m; - } - } - - if( n > 1 ) for( iters = 0; iters < maxIters; iters++ ) - { - // find index (k,l) of pivot p - for( k = 0, mv = std::abs(A[indR[0]]), i = 1; i < n-1; i++ ) - { - _Tp val = std::abs(A[astep*i + indR[i]]); - if( mv < val ) - mv = val, k = i; - } - int l = indR[k]; - for( i = 1; i < n; i++ ) - { - _Tp val = std::abs(A[astep*indC[i] + i]); - if( mv < val ) - mv = val, k = indC[i], l = i; - } - - _Tp p = A[astep*k + l]; - if( std::abs(p) <= eps ) - break; - _Tp y = (_Tp)((W[l] - W[k])*0.5); - _Tp t = std::abs(y) + hypot(p, y); - _Tp s = hypot(p, t); - _Tp c = t/s; - s = p/s; t = (p/t)*p; - if( y < 0 ) - s = -s, t = -t; - A[astep*k + l] = 0; - - W[k] -= t; - W[l] += t; - - _Tp a0, b0; - -#undef rotate -#define rotate(v0, v1) a0 = v0, b0 = v1, v0 = a0*c - b0*s, v1 = a0*s + b0*c - - // rotate rows and columns k and l - for( i = 0; i < k; i++ ) - rotate(A[astep*i+k], A[astep*i+l]); - for( i = k+1; i < l; i++ ) - rotate(A[astep*k+i], A[astep*i+l]); - for( i = l+1; i < n; i++ ) - rotate(A[astep*k+i], A[astep*l+i]); - - // rotate eigenvectors - if( V ) - for( i = 0; i < n; i++ ) - rotate(V[vstep*k+i], V[vstep*l+i]); - -#undef rotate - - for( j = 0; j < 2; j++ ) - { - int idx = j == 0 ? k : l; - if( idx < n - 1 ) - { - for( m = idx+1, mv = std::abs(A[astep*idx + m]), i = idx+2; i < n; i++ ) - { - _Tp val = std::abs(A[astep*idx+i]); - if( mv < val ) - mv = val, m = i; - } - indR[idx] = m; - } - if( idx > 0 ) - { - for( m = 0, mv = std::abs(A[idx]), i = 1; i < idx; i++ ) - { - _Tp val = std::abs(A[astep*i+idx]); - if( mv < val ) - mv = val, m = i; - } - indC[idx] = m; - } - } - } - - // sort eigenvalues & eigenvectors - for( k = 0; k < n-1; k++ ) - { - m = k; - for( i = k+1; i < n; i++ ) - { - if( W[m] < W[i] ) - m = i; - } - if( k != m ) - { - std::swap(W[m], W[k]); - if( V ) - for( i = 0; i < n; i++ ) - std::swap(V[vstep*m + i], V[vstep*k + i]); - } - } - - return true; -} - -static bool Jacobi( float* S, size_t sstep, float* e, float* E, size_t estep, int n, uchar* buf ) -{ - return JacobiImpl_(S, sstep, e, E, estep, n, buf); -} - -static bool Jacobi( double* S, size_t sstep, double* e, double* E, size_t estep, int n, uchar* buf ) -{ - return JacobiImpl_(S, sstep, e, E, estep, n, buf); -} - - -template struct VBLAS -{ - int dot(const T*, const T*, int, T*) const { return 0; } - int givens(T*, T*, int, T, T) const { return 0; } - int givensx(T*, T*, int, T, T, T*, T*) const { return 0; } -}; - -#if CV_SSE2 -template<> inline int VBLAS::dot(const float* a, const float* b, int n, float* result) const -{ - if( n < 8 ) - return 0; - int k = 0; - __m128 s0 = _mm_setzero_ps(), s1 = _mm_setzero_ps(); - for( ; k <= n - 8; k += 8 ) - { - __m128 a0 = _mm_load_ps(a + k), a1 = _mm_load_ps(a + k + 4); - __m128 b0 = _mm_load_ps(b + k), b1 = _mm_load_ps(b + k + 4); - - s0 = _mm_add_ps(s0, _mm_mul_ps(a0, b0)); - s1 = _mm_add_ps(s1, _mm_mul_ps(a1, b1)); - } - s0 = _mm_add_ps(s0, s1); - float sbuf[4]; - _mm_storeu_ps(sbuf, s0); - *result = sbuf[0] + sbuf[1] + sbuf[2] + sbuf[3]; - return k; -} - - -template<> inline int VBLAS::givens(float* a, float* b, int n, float c, float s) const -{ - if( n < 4 ) - return 0; - int k = 0; - __m128 c4 = _mm_set1_ps(c), s4 = _mm_set1_ps(s); - for( ; k <= n - 4; k += 4 ) - { - __m128 a0 = _mm_load_ps(a + k); - __m128 b0 = _mm_load_ps(b + k); - __m128 t0 = _mm_add_ps(_mm_mul_ps(a0, c4), _mm_mul_ps(b0, s4)); - __m128 t1 = _mm_sub_ps(_mm_mul_ps(b0, c4), _mm_mul_ps(a0, s4)); - _mm_store_ps(a + k, t0); - _mm_store_ps(b + k, t1); - } - return k; -} - - -template<> inline int VBLAS::givensx(float* a, float* b, int n, float c, float s, - float* anorm, float* bnorm) const -{ - if( n < 4 ) - return 0; - int k = 0; - __m128 c4 = _mm_set1_ps(c), s4 = _mm_set1_ps(s); - __m128 sa = _mm_setzero_ps(), sb = _mm_setzero_ps(); - for( ; k <= n - 4; k += 4 ) - { - __m128 a0 = _mm_load_ps(a + k); - __m128 b0 = _mm_load_ps(b + k); - __m128 t0 = _mm_add_ps(_mm_mul_ps(a0, c4), _mm_mul_ps(b0, s4)); - __m128 t1 = _mm_sub_ps(_mm_mul_ps(b0, c4), _mm_mul_ps(a0, s4)); - _mm_store_ps(a + k, t0); - _mm_store_ps(b + k, t1); - sa = _mm_add_ps(sa, _mm_mul_ps(t0, t0)); - sb = _mm_add_ps(sb, _mm_mul_ps(t1, t1)); - } - float abuf[4], bbuf[4]; - _mm_storeu_ps(abuf, sa); - _mm_storeu_ps(bbuf, sb); - *anorm = abuf[0] + abuf[1] + abuf[2] + abuf[3]; - *bnorm = bbuf[0] + bbuf[1] + bbuf[2] + bbuf[3]; - return k; -} - - -template<> inline int VBLAS::dot(const double* a, const double* b, int n, double* result) const -{ - if( n < 4 ) - return 0; - int k = 0; - __m128d s0 = _mm_setzero_pd(), s1 = _mm_setzero_pd(); - for( ; k <= n - 4; k += 4 ) - { - __m128d a0 = _mm_load_pd(a + k), a1 = _mm_load_pd(a + k + 2); - __m128d b0 = _mm_load_pd(b + k), b1 = _mm_load_pd(b + k + 2); - - s0 = _mm_add_pd(s0, _mm_mul_pd(a0, b0)); - s1 = _mm_add_pd(s1, _mm_mul_pd(a1, b1)); - } - s0 = _mm_add_pd(s0, s1); - double sbuf[2]; - _mm_storeu_pd(sbuf, s0); - *result = sbuf[0] + sbuf[1]; - return k; -} - - -template<> inline int VBLAS::givens(double* a, double* b, int n, double c, double s) const -{ - int k = 0; - __m128d c2 = _mm_set1_pd(c), s2 = _mm_set1_pd(s); - for( ; k <= n - 2; k += 2 ) - { - __m128d a0 = _mm_load_pd(a + k); - __m128d b0 = _mm_load_pd(b + k); - __m128d t0 = _mm_add_pd(_mm_mul_pd(a0, c2), _mm_mul_pd(b0, s2)); - __m128d t1 = _mm_sub_pd(_mm_mul_pd(b0, c2), _mm_mul_pd(a0, s2)); - _mm_store_pd(a + k, t0); - _mm_store_pd(b + k, t1); - } - return k; -} - - -template<> inline int VBLAS::givensx(double* a, double* b, int n, double c, double s, - double* anorm, double* bnorm) const -{ - int k = 0; - __m128d c2 = _mm_set1_pd(c), s2 = _mm_set1_pd(s); - __m128d sa = _mm_setzero_pd(), sb = _mm_setzero_pd(); - for( ; k <= n - 2; k += 2 ) - { - __m128d a0 = _mm_load_pd(a + k); - __m128d b0 = _mm_load_pd(b + k); - __m128d t0 = _mm_add_pd(_mm_mul_pd(a0, c2), _mm_mul_pd(b0, s2)); - __m128d t1 = _mm_sub_pd(_mm_mul_pd(b0, c2), _mm_mul_pd(a0, s2)); - _mm_store_pd(a + k, t0); - _mm_store_pd(b + k, t1); - sa = _mm_add_pd(sa, _mm_mul_pd(t0, t0)); - sb = _mm_add_pd(sb, _mm_mul_pd(t1, t1)); - } - double abuf[2], bbuf[2]; - _mm_storeu_pd(abuf, sa); - _mm_storeu_pd(bbuf, sb); - *anorm = abuf[0] + abuf[1]; - *bnorm = bbuf[0] + bbuf[1]; - return k; -} -#endif - -template void -JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* _W, _Tp* Vt, size_t vstep, - int m, int n, int n1, double minval, _Tp eps) -{ - VBLAS<_Tp> vblas; - AutoBuffer Wbuf(n); - double* W = Wbuf; - int i, j, k, iter, max_iter = std::max(m, 30); - _Tp c, s; - double sd; - astep /= sizeof(At[0]); - vstep /= sizeof(Vt[0]); - - for( i = 0; i < n; i++ ) - { - for( k = 0, sd = 0; k < m; k++ ) - { - _Tp t = At[i*astep + k]; - sd += (double)t*t; - } - W[i] = sd; - - if( Vt ) - { - for( k = 0; k < n; k++ ) - Vt[i*vstep + k] = 0; - Vt[i*vstep + i] = 1; - } - } - - for( iter = 0; iter < max_iter; iter++ ) - { - bool changed = false; - - for( i = 0; i < n-1; i++ ) - for( j = i+1; j < n; j++ ) - { - _Tp *Ai = At + i*astep, *Aj = At + j*astep; - double a = W[i], p = 0, b = W[j]; - - for( k = 0; k < m; k++ ) - p += (double)Ai[k]*Aj[k]; - - if( std::abs(p) <= eps*std::sqrt((double)a*b) ) - continue; - - p *= 2; - double beta = a - b, gamma = hypot((double)p, beta); - if( beta < 0 ) - { - double delta = (gamma - beta)*0.5; - s = (_Tp)std::sqrt(delta/gamma); - c = (_Tp)(p/(gamma*s*2)); - } - else - { - c = (_Tp)std::sqrt((gamma + beta)/(gamma*2)); - s = (_Tp)(p/(gamma*c*2)); - } - - a = b = 0; - for( k = 0; k < m; k++ ) - { - _Tp t0 = c*Ai[k] + s*Aj[k]; - _Tp t1 = -s*Ai[k] + c*Aj[k]; - Ai[k] = t0; Aj[k] = t1; - - a += (double)t0*t0; b += (double)t1*t1; - } - W[i] = a; W[j] = b; - - changed = true; - - if( Vt ) - { - _Tp *Vi = Vt + i*vstep, *Vj = Vt + j*vstep; - k = vblas.givens(Vi, Vj, n, c, s); - - for( ; k < n; k++ ) - { - _Tp t0 = c*Vi[k] + s*Vj[k]; - _Tp t1 = -s*Vi[k] + c*Vj[k]; - Vi[k] = t0; Vj[k] = t1; - } - } - } - if( !changed ) - break; - } - - for( i = 0; i < n; i++ ) - { - for( k = 0, sd = 0; k < m; k++ ) - { - _Tp t = At[i*astep + k]; - sd += (double)t*t; - } - W[i] = std::sqrt(sd); - } - - for( i = 0; i < n-1; i++ ) - { - j = i; - for( k = i+1; k < n; k++ ) - { - if( W[j] < W[k] ) - j = k; - } - if( i != j ) - { - std::swap(W[i], W[j]); - if( Vt ) - { - for( k = 0; k < m; k++ ) - std::swap(At[i*astep + k], At[j*astep + k]); - - for( k = 0; k < n; k++ ) - std::swap(Vt[i*vstep + k], Vt[j*vstep + k]); - } - } - } - - for( i = 0; i < n; i++ ) - _W[i] = (_Tp)W[i]; - - if( !Vt ) - return; - - RNG rng(0x12345678); - for( i = 0; i < n1; i++ ) - { - sd = i < n ? W[i] : 0; - - while( sd <= minval ) - { - // if we got a zero singular value, then in order to get the corresponding left singular vector - // we generate a random vector, project it to the previously computed left singular vectors, - // subtract the projection and normalize the difference. - const _Tp val0 = (_Tp)(1./m); - for( k = 0; k < m; k++ ) - { - _Tp val = (rng.next() & 256) != 0 ? val0 : -val0; - At[i*astep + k] = val; - } - for( iter = 0; iter < 2; iter++ ) - { - for( j = 0; j < i; j++ ) - { - sd = 0; - for( k = 0; k < m; k++ ) - sd += At[i*astep + k]*At[j*astep + k]; - _Tp asum = 0; - for( k = 0; k < m; k++ ) - { - _Tp t = (_Tp)(At[i*astep + k] - sd*At[j*astep + k]); - At[i*astep + k] = t; - asum += std::abs(t); - } - asum = asum ? 1/asum : 0; - for( k = 0; k < m; k++ ) - At[i*astep + k] *= asum; - } - } - sd = 0; - for( k = 0; k < m; k++ ) - { - _Tp t = At[i*astep + k]; - sd += (double)t*t; - } - sd = std::sqrt(sd); - } - - s = (_Tp)(1/sd); - for( k = 0; k < m; k++ ) - At[i*astep + k] *= s; - } -} - - -static void JacobiSVD(float* At, size_t astep, float* W, float* Vt, size_t vstep, int m, int n, int n1=-1) -{ - JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, FLT_MIN, FLT_EPSILON*2); -} - -static void JacobiSVD(double* At, size_t astep, double* W, double* Vt, size_t vstep, int m, int n, int n1=-1) -{ - JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, DBL_MIN, DBL_EPSILON*10); -} - -/* y[0:m,0:n] += diag(a[0:1,0:m]) * x[0:m,0:n] */ -template static void -MatrAXPY( int m, int n, const T1* x, int dx, - const T2* a, int inca, T3* y, int dy ) -{ - int i, j; - for( i = 0; i < m; i++, x += dx, y += dy ) - { - T2 s = a[i*inca]; - j=0; - #if CV_ENABLE_UNROLLED - for(; j <= n - 4; j += 4 ) - { - T3 t0 = (T3)(y[j] + s*x[j]); - T3 t1 = (T3)(y[j+1] + s*x[j+1]); - y[j] = t0; - y[j+1] = t1; - t0 = (T3)(y[j+2] + s*x[j+2]); - t1 = (T3)(y[j+3] + s*x[j+3]); - y[j+2] = t0; - y[j+3] = t1; - } - #endif - for( ; j < n; j++ ) - y[j] = (T3)(y[j] + s*x[j]); - } -} - -template static void -SVBkSbImpl_( int m, int n, const T* w, int incw, - const T* u, int ldu, bool uT, - const T* v, int ldv, bool vT, - const T* b, int ldb, int nb, - T* x, int ldx, double* buffer, T eps ) -{ - double threshold = 0; - int udelta0 = uT ? ldu : 1, udelta1 = uT ? 1 : ldu; - int vdelta0 = vT ? ldv : 1, vdelta1 = vT ? 1 : ldv; - int i, j, nm = std::min(m, n); - - if( !b ) - nb = m; - - for( i = 0; i < n; i++ ) - for( j = 0; j < nb; j++ ) - x[i*ldx + j] = 0; - - for( i = 0; i < nm; i++ ) - threshold += w[i*incw]; - threshold *= eps; - - // v * inv(w) * uT * b - for( i = 0; i < nm; i++, u += udelta0, v += vdelta0 ) - { - double wi = w[i*incw]; - if( (double)std::abs(wi) <= threshold ) - continue; - wi = 1/wi; - - if( nb == 1 ) - { - double s = 0; - if( b ) - for( j = 0; j < m; j++ ) - s += u[j*udelta1]*b[j*ldb]; - else - s = u[0]; - s *= wi; - - for( j = 0; j < n; j++ ) - x[j*ldx] = (T)(x[j*ldx] + s*v[j*vdelta1]); - } - else - { - if( b ) - { - for( j = 0; j < nb; j++ ) - buffer[j] = 0; - MatrAXPY( m, nb, b, ldb, u, udelta1, buffer, 0 ); - for( j = 0; j < nb; j++ ) - buffer[j] *= wi; - } - else - { - for( j = 0; j < nb; j++ ) - buffer[j] = u[j*udelta1]*wi; - } - MatrAXPY( n, nb, buffer, 0, v, vdelta1, x, ldx ); - } - } -} - -static void -SVBkSb( int m, int n, const float* w, size_t wstep, - const float* u, size_t ustep, bool uT, - const float* v, size_t vstep, bool vT, - const float* b, size_t bstep, int nb, - float* x, size_t xstep, uchar* buffer ) -{ - SVBkSbImpl_(m, n, w, wstep ? (int)(wstep/sizeof(w[0])) : 1, - u, (int)(ustep/sizeof(u[0])), uT, - v, (int)(vstep/sizeof(v[0])), vT, - b, (int)(bstep/sizeof(b[0])), nb, - x, (int)(xstep/sizeof(x[0])), - (double*)alignPtr(buffer, sizeof(double)), (float)(DBL_EPSILON*2) ); -} - -static void -SVBkSb( int m, int n, const double* w, size_t wstep, - const double* u, size_t ustep, bool uT, - const double* v, size_t vstep, bool vT, - const double* b, size_t bstep, int nb, - double* x, size_t xstep, uchar* buffer ) -{ - SVBkSbImpl_(m, n, w, wstep ? (int)(wstep/sizeof(w[0])) : 1, - u, (int)(ustep/sizeof(u[0])), uT, - v, (int)(vstep/sizeof(v[0])), vT, - b, (int)(bstep/sizeof(b[0])), nb, - x, (int)(xstep/sizeof(x[0])), - (double*)alignPtr(buffer, sizeof(double)), DBL_EPSILON*2 ); -} - -} - -/****************************************************************************************\ -* Determinant of the matrix * -\****************************************************************************************/ - -#define det2(m) ((double)m(0,0)*m(1,1) - (double)m(0,1)*m(1,0)) -#define det3(m) (m(0,0)*((double)m(1,1)*m(2,2) - (double)m(1,2)*m(2,1)) - \ - m(0,1)*((double)m(1,0)*m(2,2) - (double)m(1,2)*m(2,0)) + \ - m(0,2)*((double)m(1,0)*m(2,1) - (double)m(1,1)*m(2,0))) - -double cv::determinant( InputArray _mat ) -{ - Mat mat = _mat.getMat(); - double result = 0; - int type = mat.type(), rows = mat.rows; - size_t step = mat.step; - const uchar* m = mat.data; - - CV_Assert( mat.rows == mat.cols && (type == CV_32F || type == CV_64F)); - - #define Mf(y, x) ((float*)(m + y*step))[x] - #define Md(y, x) ((double*)(m + y*step))[x] - - if( type == CV_32F ) - { - if( rows == 2 ) - result = det2(Mf); - else if( rows == 3 ) - result = det3(Mf); - else if( rows == 1 ) - result = Mf(0,0); - else - { - size_t bufSize = rows*rows*sizeof(float); - AutoBuffer buffer(bufSize); - Mat a(rows, rows, CV_32F, (uchar*)buffer); - mat.copyTo(a); - - result = LU((float*)a.data, a.step, rows, 0, 0, 0); - if( result ) - { - for( int i = 0; i < rows; i++ ) - result *= ((const float*)(a.data + a.step*i))[i]; - result = 1./result; - } - } - } - else - { - if( rows == 2 ) - result = det2(Md); - else if( rows == 3 ) - result = det3(Md); - else if( rows == 1 ) - result = Md(0,0); - else - { - size_t bufSize = rows*rows*sizeof(double); - AutoBuffer buffer(bufSize); - Mat a(rows, rows, CV_64F, (uchar*)buffer); - mat.copyTo(a); - - result = LU((double*)a.data, a.step, rows, 0, 0, 0); - if( result ) - { - for( int i = 0; i < rows; i++ ) - result *= ((const double*)(a.data + a.step*i))[i]; - result = 1./result; - } - } - } - - #undef Mf - #undef Md - - return result; -} - -/****************************************************************************************\ -* Inverse (or pseudo-inverse) of a matrix * -\****************************************************************************************/ - -#define Sf( y, x ) ((float*)(srcdata + y*srcstep))[x] -#define Sd( y, x ) ((double*)(srcdata + y*srcstep))[x] -#define Df( y, x ) ((float*)(dstdata + y*dststep))[x] -#define Dd( y, x ) ((double*)(dstdata + y*dststep))[x] - -double cv::invert( InputArray _src, OutputArray _dst, int method ) -{ - bool result = false; - Mat src = _src.getMat(); - int type = src.type(); - - CV_Assert(type == CV_32F || type == CV_64F); - - size_t esz = CV_ELEM_SIZE(type); - int m = src.rows, n = src.cols; - - if( method == DECOMP_SVD ) - { - int nm = std::min(m, n); - - AutoBuffer _buf((m*nm + nm + nm*n)*esz + sizeof(double)); - uchar* buf = alignPtr((uchar*)_buf, (int)esz); - Mat u(m, nm, type, buf); - Mat w(nm, 1, type, u.data + m*nm*esz); - Mat vt(nm, n, type, w.data + nm*esz); - - SVD::compute(src, w, u, vt); - SVD::backSubst(w, u, vt, Mat(), _dst); - return type == CV_32F ? - (((float*)w.data)[0] >= FLT_EPSILON ? - ((float*)w.data)[n-1]/((float*)w.data)[0] : 0) : - (((double*)w.data)[0] >= DBL_EPSILON ? - ((double*)w.data)[n-1]/((double*)w.data)[0] : 0); - } - - CV_Assert( m == n ); - - if( method == DECOMP_EIG ) - { - AutoBuffer _buf((n*n*2 + n)*esz + sizeof(double)); - uchar* buf = alignPtr((uchar*)_buf, (int)esz); - Mat u(n, n, type, buf); - Mat w(n, 1, type, u.data + n*n*esz); - Mat vt(n, n, type, w.data + n*esz); - - eigen(src, w, vt); - transpose(vt, u); - SVD::backSubst(w, u, vt, Mat(), _dst); - return type == CV_32F ? - (((float*)w.data)[0] >= FLT_EPSILON ? - ((float*)w.data)[n-1]/((float*)w.data)[0] : 0) : - (((double*)w.data)[0] >= DBL_EPSILON ? - ((double*)w.data)[n-1]/((double*)w.data)[0] : 0); - } - - CV_Assert( method == DECOMP_LU || method == DECOMP_CHOLESKY ); - - _dst.create( n, n, type ); - Mat dst = _dst.getMat(); - - if( n <= 3 ) - { - uchar* srcdata = src.data; - uchar* dstdata = dst.data; - size_t srcstep = src.step; - size_t dststep = dst.step; - - if( n == 2 ) - { - if( type == CV_32FC1 ) - { - double d = det2(Sf); - if( d != 0. ) - { - result = true; - d = 1./d; - - #if CV_SSE2 - if(USE_SSE2) - { - __m128 zero = _mm_setzero_ps(); - __m128 t0 = _mm_loadl_pi(zero, (const __m64*)srcdata); //t0 = sf(0,0) sf(0,1) - __m128 t1 = _mm_loadh_pi(zero, (const __m64*)(srcdata+srcstep)); //t1 = sf(1,0) sf(1,1) - __m128 s0 = _mm_or_ps(t0, t1); - __m128 det =_mm_set1_ps((float)d); - s0 = _mm_mul_ps(s0, det); - static const uchar CV_DECL_ALIGNED(16) inv[16] = {0,0,0,0,0,0,0,0x80,0,0,0,0x80,0,0,0,0}; - __m128 pattern = _mm_load_ps((const float*)inv); - s0 = _mm_xor_ps(s0, pattern);//==-1*s0 - s0 = _mm_shuffle_ps(s0, s0, _MM_SHUFFLE(0,2,1,3)); - _mm_storel_pi((__m64*)dstdata, s0); - _mm_storeh_pi((__m64*)((float*)(dstdata+dststep)), s0); - } - else - #endif - { - double t0, t1; - t0 = Sf(0,0)*d; - t1 = Sf(1,1)*d; - Df(1,1) = (float)t0; - Df(0,0) = (float)t1; - t0 = -Sf(0,1)*d; - t1 = -Sf(1,0)*d; - Df(0,1) = (float)t0; - Df(1,0) = (float)t1; - } - - } - } - else - { - double d = det2(Sd); - if( d != 0. ) - { - result = true; - d = 1./d; - #if CV_SSE2 - if(USE_SSE2) - { - __m128d s0 = _mm_loadu_pd((const double*)srcdata); //s0 = sf(0,0) sf(0,1) - __m128d s1 = _mm_loadu_pd ((const double*)(srcdata+srcstep));//s1 = sf(1,0) sf(1,1) - __m128d sm = _mm_unpacklo_pd(s0, _mm_load_sd((const double*)(srcdata+srcstep)+1)); //sm = sf(0,0) sf(1,1) - main diagonal - __m128d ss = _mm_shuffle_pd(s0, s1, _MM_SHUFFLE2(0,1)); //ss = sf(0,1) sf(1,0) - secondary diagonal - __m128d det = _mm_load1_pd((const double*)&d); - sm = _mm_mul_pd(sm, det); - - static const uchar CV_DECL_ALIGNED(16) inv[8] = {0,0,0,0,0,0,0,0x80}; - __m128d pattern = _mm_load1_pd((double*)inv); - ss = _mm_mul_pd(ss, det); - ss = _mm_xor_pd(ss, pattern);//==-1*ss - - s0 = _mm_shuffle_pd(sm, ss, _MM_SHUFFLE2(0,1)); - s1 = _mm_shuffle_pd(ss, sm, _MM_SHUFFLE2(0,1)); - _mm_storeu_pd((double*)dstdata, s0); - _mm_storeu_pd((double*)(dstdata+dststep), s1); - } - else - #endif - { - double t0, t1; - t0 = Sd(0,0)*d; - t1 = Sd(1,1)*d; - Dd(1,1) = t0; - Dd(0,0) = t1; - t0 = -Sd(0,1)*d; - t1 = -Sd(1,0)*d; - Dd(0,1) = t0; - Dd(1,0) = t1; - } - } - } - } - else if( n == 3 ) - { - if( type == CV_32FC1 ) - { - double d = det3(Sf); - - if( d != 0. ) - { - double t[12]; - - result = true; - d = 1./d; - t[0] = (((double)Sf(1,1) * Sf(2,2) - (double)Sf(1,2) * Sf(2,1)) * d); - t[1] = (((double)Sf(0,2) * Sf(2,1) - (double)Sf(0,1) * Sf(2,2)) * d); - t[2] = (((double)Sf(0,1) * Sf(1,2) - (double)Sf(0,2) * Sf(1,1)) * d); - - t[3] = (((double)Sf(1,2) * Sf(2,0) - (double)Sf(1,0) * Sf(2,2)) * d); - t[4] = (((double)Sf(0,0) * Sf(2,2) - (double)Sf(0,2) * Sf(2,0)) * d); - t[5] = (((double)Sf(0,2) * Sf(1,0) - (double)Sf(0,0) * Sf(1,2)) * d); - - t[6] = (((double)Sf(1,0) * Sf(2,1) - (double)Sf(1,1) * Sf(2,0)) * d); - t[7] = (((double)Sf(0,1) * Sf(2,0) - (double)Sf(0,0) * Sf(2,1)) * d); - t[8] = (((double)Sf(0,0) * Sf(1,1) - (double)Sf(0,1) * Sf(1,0)) * d); - - Df(0,0) = (float)t[0]; Df(0,1) = (float)t[1]; Df(0,2) = (float)t[2]; - Df(1,0) = (float)t[3]; Df(1,1) = (float)t[4]; Df(1,2) = (float)t[5]; - Df(2,0) = (float)t[6]; Df(2,1) = (float)t[7]; Df(2,2) = (float)t[8]; - } - } - else - { - double d = det3(Sd); - if( d != 0. ) - { - result = true; - d = 1./d; - double t[9]; - - t[0] = (Sd(1,1) * Sd(2,2) - Sd(1,2) * Sd(2,1)) * d; - t[1] = (Sd(0,2) * Sd(2,1) - Sd(0,1) * Sd(2,2)) * d; - t[2] = (Sd(0,1) * Sd(1,2) - Sd(0,2) * Sd(1,1)) * d; - - t[3] = (Sd(1,2) * Sd(2,0) - Sd(1,0) * Sd(2,2)) * d; - t[4] = (Sd(0,0) * Sd(2,2) - Sd(0,2) * Sd(2,0)) * d; - t[5] = (Sd(0,2) * Sd(1,0) - Sd(0,0) * Sd(1,2)) * d; - - t[6] = (Sd(1,0) * Sd(2,1) - Sd(1,1) * Sd(2,0)) * d; - t[7] = (Sd(0,1) * Sd(2,0) - Sd(0,0) * Sd(2,1)) * d; - t[8] = (Sd(0,0) * Sd(1,1) - Sd(0,1) * Sd(1,0)) * d; - - Dd(0,0) = t[0]; Dd(0,1) = t[1]; Dd(0,2) = t[2]; - Dd(1,0) = t[3]; Dd(1,1) = t[4]; Dd(1,2) = t[5]; - Dd(2,0) = t[6]; Dd(2,1) = t[7]; Dd(2,2) = t[8]; - } - } - } - else - { - assert( n == 1 ); - - if( type == CV_32FC1 ) - { - double d = Sf(0,0); - if( d != 0. ) - { - result = true; - Df(0,0) = (float)(1./d); - } - } - else - { - double d = Sd(0,0); - if( d != 0. ) - { - result = true; - Dd(0,0) = 1./d; - } - } - } - if( !result ) - dst = Scalar(0); - return result; - } - - int elem_size = CV_ELEM_SIZE(type); - AutoBuffer buf(n*n*elem_size); - Mat src1(n, n, type, (uchar*)buf); - src.copyTo(src1); - setIdentity(dst); - - if( method == DECOMP_LU && type == CV_32F ) - result = LU((float*)src1.data, src1.step, n, (float*)dst.data, dst.step, n) != 0; - else if( method == DECOMP_LU && type == CV_64F ) - result = LU((double*)src1.data, src1.step, n, (double*)dst.data, dst.step, n) != 0; - else if( method == DECOMP_CHOLESKY && type == CV_32F ) - result = Cholesky((float*)src1.data, src1.step, n, (float*)dst.data, dst.step, n); - else - result = Cholesky((double*)src1.data, src1.step, n, (double*)dst.data, dst.step, n); - - if( !result ) - dst = Scalar(0); - - return result; -} - - - -/****************************************************************************************\ -* Solving a linear system * -\****************************************************************************************/ - -bool cv::solve( InputArray _src, InputArray _src2arg, OutputArray _dst, int method ) -{ - bool result = true; - Mat src = _src.getMat(), _src2 = _src2arg.getMat(); - int type = src.type(); - bool is_normal = (method & DECOMP_NORMAL) != 0; - - CV_Assert( type == _src2.type() && (type == CV_32F || type == CV_64F) ); - - method &= ~DECOMP_NORMAL; - CV_Assert( (method != DECOMP_LU && method != DECOMP_CHOLESKY) || - is_normal || src.rows == src.cols ); - - // check case of a single equation and small matrix - if( (method == DECOMP_LU || method == DECOMP_CHOLESKY) && !is_normal && - src.rows <= 3 && src.rows == src.cols && _src2.cols == 1 ) - { - _dst.create( src.cols, _src2.cols, src.type() ); - Mat dst = _dst.getMat(); - - #define bf(y) ((float*)(bdata + y*src2step))[0] - #define bd(y) ((double*)(bdata + y*src2step))[0] - - uchar* srcdata = src.data; - uchar* bdata = _src2.data; - uchar* dstdata = dst.data; - size_t srcstep = src.step; - size_t src2step = _src2.step; - size_t dststep = dst.step; - - if( src.rows == 2 ) - { - if( type == CV_32FC1 ) - { - double d = det2(Sf); - if( d != 0. ) - { - double t; - d = 1./d; - t = (float)(((double)bf(0)*Sf(1,1) - (double)bf(1)*Sf(0,1))*d); - Df(1,0) = (float)(((double)bf(1)*Sf(0,0) - (double)bf(0)*Sf(1,0))*d); - Df(0,0) = (float)t; - } - else - result = false; - } - else - { - double d = det2(Sd); - if( d != 0. ) - { - double t; - d = 1./d; - t = (bd(0)*Sd(1,1) - bd(1)*Sd(0,1))*d; - Dd(1,0) = (bd(1)*Sd(0,0) - bd(0)*Sd(1,0))*d; - Dd(0,0) = t; - } - else - result = false; - } - } - else if( src.rows == 3 ) - { - if( type == CV_32FC1 ) - { - double d = det3(Sf); - if( d != 0. ) - { - float t[3]; - d = 1./d; - - t[0] = (float)(d* - (bf(0)*((double)Sf(1,1)*Sf(2,2) - (double)Sf(1,2)*Sf(2,1)) - - Sf(0,1)*((double)bf(1)*Sf(2,2) - (double)Sf(1,2)*bf(2)) + - Sf(0,2)*((double)bf(1)*Sf(2,1) - (double)Sf(1,1)*bf(2)))); - - t[1] = (float)(d* - (Sf(0,0)*(double)(bf(1)*Sf(2,2) - (double)Sf(1,2)*bf(2)) - - bf(0)*((double)Sf(1,0)*Sf(2,2) - (double)Sf(1,2)*Sf(2,0)) + - Sf(0,2)*((double)Sf(1,0)*bf(2) - (double)bf(1)*Sf(2,0)))); - - t[2] = (float)(d* - (Sf(0,0)*((double)Sf(1,1)*bf(2) - (double)bf(1)*Sf(2,1)) - - Sf(0,1)*((double)Sf(1,0)*bf(2) - (double)bf(1)*Sf(2,0)) + - bf(0)*((double)Sf(1,0)*Sf(2,1) - (double)Sf(1,1)*Sf(2,0)))); - - Df(0,0) = t[0]; - Df(1,0) = t[1]; - Df(2,0) = t[2]; - } - else - result = false; - } - else - { - double d = det3(Sd); - if( d != 0. ) - { - double t[9]; - - d = 1./d; - - t[0] = ((Sd(1,1) * Sd(2,2) - Sd(1,2) * Sd(2,1))*bd(0) + - (Sd(0,2) * Sd(2,1) - Sd(0,1) * Sd(2,2))*bd(1) + - (Sd(0,1) * Sd(1,2) - Sd(0,2) * Sd(1,1))*bd(2))*d; - - t[1] = ((Sd(1,2) * Sd(2,0) - Sd(1,0) * Sd(2,2))*bd(0) + - (Sd(0,0) * Sd(2,2) - Sd(0,2) * Sd(2,0))*bd(1) + - (Sd(0,2) * Sd(1,0) - Sd(0,0) * Sd(1,2))*bd(2))*d; - - t[2] = ((Sd(1,0) * Sd(2,1) - Sd(1,1) * Sd(2,0))*bd(0) + - (Sd(0,1) * Sd(2,0) - Sd(0,0) * Sd(2,1))*bd(1) + - (Sd(0,0) * Sd(1,1) - Sd(0,1) * Sd(1,0))*bd(2))*d; - - Dd(0,0) = t[0]; - Dd(1,0) = t[1]; - Dd(2,0) = t[2]; - } - else - result = false; - } - } - else - { - assert( src.rows == 1 ); - - if( type == CV_32FC1 ) - { - double d = Sf(0,0); - if( d != 0. ) - Df(0,0) = (float)(bf(0)/d); - else - result = false; - } - else - { - double d = Sd(0,0); - if( d != 0. ) - Dd(0,0) = (bd(0)/d); - else - result = false; - } - } - return result; - } - - if( method == DECOMP_QR ) - method = DECOMP_SVD; - - int m = src.rows, m_ = m, n = src.cols, nb = _src2.cols; - size_t esz = CV_ELEM_SIZE(type), bufsize = 0; - size_t vstep = alignSize(n*esz, 16); - size_t astep = method == DECOMP_SVD && !is_normal ? alignSize(m*esz, 16) : vstep; - AutoBuffer buffer; - - Mat src2 = _src2; - _dst.create( src.cols, src2.cols, src.type() ); - Mat dst = _dst.getMat(); - - if( m < n ) - CV_Error(CV_StsBadArg, "The function can not solve under-determined linear systems" ); - - if( m == n ) - is_normal = false; - else if( is_normal ) - { - m_ = n; - if( method == DECOMP_SVD ) - method = DECOMP_EIG; - } - - size_t asize = astep*(method == DECOMP_SVD || is_normal ? n : m); - bufsize += asize + 32; - - if( is_normal ) - bufsize += n*nb*esz; - - if( method == DECOMP_SVD || method == DECOMP_EIG ) - bufsize += n*5*esz + n*vstep + nb*sizeof(double) + 32; - - buffer.allocate(bufsize); - uchar* ptr = alignPtr((uchar*)buffer, 16); - - Mat a(m_, n, type, ptr, astep); - - if( is_normal ) - mulTransposed(src, a, true); - else if( method != DECOMP_SVD ) - src.copyTo(a); - else - { - a = Mat(n, m_, type, ptr, astep); - transpose(src, a); - } - ptr += asize; - - if( !is_normal ) - { - if( method == DECOMP_LU || method == DECOMP_CHOLESKY ) - src2.copyTo(dst); - } - else - { - // a'*b - if( method == DECOMP_LU || method == DECOMP_CHOLESKY ) - gemm( src, src2, 1, Mat(), 0, dst, GEMM_1_T ); - else - { - Mat tmp(n, nb, type, ptr); - ptr += n*nb*esz; - gemm( src, src2, 1, Mat(), 0, tmp, GEMM_1_T ); - src2 = tmp; - } - } - - if( method == DECOMP_LU ) - { - if( type == CV_32F ) - result = LU(a.ptr(), a.step, n, dst.ptr(), dst.step, nb) != 0; - else - result = LU(a.ptr(), a.step, n, dst.ptr(), dst.step, nb) != 0; - } - else if( method == DECOMP_CHOLESKY ) - { - if( type == CV_32F ) - result = Cholesky(a.ptr(), a.step, n, dst.ptr(), dst.step, nb); - else - result = Cholesky(a.ptr(), a.step, n, dst.ptr(), dst.step, nb); - } - else - { - ptr = alignPtr(ptr, 16); - Mat v(n, n, type, ptr, vstep), w(n, 1, type, ptr + vstep*n), u; - ptr += n*(vstep + esz); - - if( method == DECOMP_EIG ) - { - if( type == CV_32F ) - Jacobi(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, n, ptr); - else - Jacobi(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, n, ptr); - u = v; - } - else - { - if( type == CV_32F ) - JacobiSVD(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, m_, n); - else - JacobiSVD(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, m_, n); - u = a; - } - - if( type == CV_32F ) - { - SVBkSb(m_, n, w.ptr(), 0, u.ptr(), u.step, true, - v.ptr(), v.step, true, src2.ptr(), - src2.step, nb, dst.ptr(), dst.step, ptr); - } - else - { - SVBkSb(m_, n, w.ptr(), 0, u.ptr(), u.step, true, - v.ptr(), v.step, true, src2.ptr(), - src2.step, nb, dst.ptr(), dst.step, ptr); - } - result = true; - } - - if( !result ) - dst = Scalar(0); - - return result; -} - - -/////////////////// finding eigenvalues and eigenvectors of a symmetric matrix /////////////// - -bool cv::eigen( InputArray _src, bool computeEvects, OutputArray _evals, OutputArray _evects ) -{ - Mat src = _src.getMat(); - int type = src.type(); - int n = src.rows; - - CV_Assert( src.rows == src.cols ); - CV_Assert (type == CV_32F || type == CV_64F); - - Mat v; - if( computeEvects ) - { - _evects.create(n, n, type); - v = _evects.getMat(); - } - - size_t elemSize = src.elemSize(), astep = alignSize(n*elemSize, 16); - AutoBuffer buf(n*astep + n*5*elemSize + 32); - uchar* ptr = alignPtr((uchar*)buf, 16); - Mat a(n, n, type, ptr, astep), w(n, 1, type, ptr + astep*n); - ptr += astep*n + elemSize*n; - src.copyTo(a); - bool ok = type == CV_32F ? - Jacobi(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, n, ptr) : - Jacobi(a.ptr(), a.step, w.ptr(), v.ptr(), v.step, n, ptr); - - w.copyTo(_evals); - return ok; -} - -bool cv::eigen( InputArray src, OutputArray evals, int, int ) -{ - return eigen(src, false, evals, noArray()); -} - -bool cv::eigen( InputArray src, OutputArray evals, OutputArray evects, int, int) -{ - return eigen(src, true, evals, evects); -} - -namespace cv -{ - -static void _SVDcompute( InputArray _aarr, OutputArray _w, - OutputArray _u, OutputArray _vt, int flags ) -{ - Mat src = _aarr.getMat(); - int m = src.rows, n = src.cols; - int type = src.type(); - bool compute_uv = _u.needed() || _vt.needed(); - bool full_uv = (flags & SVD::FULL_UV) != 0; - - CV_Assert( type == CV_32F || type == CV_64F ); - - if( flags & SVD::NO_UV ) - { - _u.release(); - _vt.release(); - compute_uv = full_uv = false; - } - - bool at = false; - if( m < n ) - { - std::swap(m, n); - at = true; - } - - int urows = full_uv ? m : n; - size_t esz = src.elemSize(), astep = alignSize(m*esz, 16), vstep = alignSize(n*esz, 16); - AutoBuffer _buf(urows*astep + n*vstep + n*esz + 32); - uchar* buf = alignPtr((uchar*)_buf, 16); - Mat temp_a(n, m, type, buf, astep); - Mat temp_w(n, 1, type, buf + urows*astep); - Mat temp_u(urows, m, type, buf, astep), temp_v; - - if( compute_uv ) - temp_v = Mat(n, n, type, alignPtr(buf + urows*astep + n*esz, 16), vstep); - - if( urows > n ) - temp_u = Scalar::all(0); - - if( !at ) - transpose(src, temp_a); - else - src.copyTo(temp_a); - - if( type == CV_32F ) - { - JacobiSVD(temp_a.ptr(), temp_u.step, temp_w.ptr(), - temp_v.ptr(), temp_v.step, m, n, compute_uv ? urows : 0); - } - else - { - JacobiSVD(temp_a.ptr(), temp_u.step, temp_w.ptr(), - temp_v.ptr(), temp_v.step, m, n, compute_uv ? urows : 0); - } - temp_w.copyTo(_w); - if( compute_uv ) - { - if( !at ) - { - transpose(temp_u, _u); - temp_v.copyTo(_vt); - } - else - { - transpose(temp_v, _u); - temp_u.copyTo(_vt); - } - } -} - - -void SVD::compute( InputArray a, OutputArray w, OutputArray u, OutputArray vt, int flags ) -{ - _SVDcompute(a, w, u, vt, flags); -} - -void SVD::compute( InputArray a, OutputArray w, int flags ) -{ - _SVDcompute(a, w, noArray(), noArray(), flags); -} - -void SVD::backSubst( InputArray _w, InputArray _u, InputArray _vt, - InputArray _rhs, OutputArray _dst ) -{ - Mat w = _w.getMat(), u = _u.getMat(), vt = _vt.getMat(), rhs = _rhs.getMat(); - int type = w.type(), esz = (int)w.elemSize(); - int m = u.rows, n = vt.cols, nb = rhs.data ? rhs.cols : m, nm = std::min(m, n); - size_t wstep = w.rows == 1 ? (size_t)esz : w.cols == 1 ? (size_t)w.step : (size_t)w.step + esz; - AutoBuffer buffer(nb*sizeof(double) + 16); - CV_Assert( w.type() == u.type() && u.type() == vt.type() && u.data && vt.data && w.data ); - CV_Assert( u.cols >= nm && vt.rows >= nm && - (w.size() == Size(nm, 1) || w.size() == Size(1, nm) || w.size() == Size(vt.rows, u.cols)) ); - CV_Assert( rhs.data == 0 || (rhs.type() == type && rhs.rows == m) ); - - _dst.create( n, nb, type ); - Mat dst = _dst.getMat(); - if( type == CV_32F ) - SVBkSb(m, n, w.ptr(), wstep, u.ptr(), u.step, false, - vt.ptr(), vt.step, true, rhs.ptr(), rhs.step, nb, - dst.ptr(), dst.step, buffer); - else if( type == CV_64F ) - SVBkSb(m, n, w.ptr(), wstep, u.ptr(), u.step, false, - vt.ptr(), vt.step, true, rhs.ptr(), rhs.step, nb, - dst.ptr(), dst.step, buffer); - else - CV_Error( CV_StsUnsupportedFormat, "" ); -} - - -SVD& SVD::operator ()(InputArray a, int flags) -{ - _SVDcompute(a, w, u, vt, flags); - return *this; -} - - -void SVD::backSubst( InputArray rhs, OutputArray dst ) const -{ - backSubst( w, u, vt, rhs, dst ); -} - -} - - -void cv::SVDecomp(InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags) -{ - SVD::compute(src, w, u, vt, flags); -} - -void cv::SVBackSubst(InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst) -{ - SVD::backSubst(w, u, vt, rhs, dst); -} - - -CV_IMPL double -cvDet( const CvArr* arr ) -{ - if( CV_IS_MAT(arr) && ((CvMat*)arr)->rows <= 3 ) - { - CvMat* mat = (CvMat*)arr; - int type = CV_MAT_TYPE(mat->type); - int rows = mat->rows; - uchar* m = mat->data.ptr; - int step = mat->step; - CV_Assert( rows == mat->cols ); - - #define Mf(y, x) ((float*)(m + y*step))[x] - #define Md(y, x) ((double*)(m + y*step))[x] - - if( type == CV_32F ) - { - if( rows == 2 ) - return det2(Mf); - if( rows == 3 ) - return det3(Mf); - } - else if( type == CV_64F ) - { - if( rows == 2 ) - return det2(Md); - if( rows == 3 ) - return det3(Md); - } - return cv::determinant(cv::Mat(mat)); - } - return cv::determinant(cv::cvarrToMat(arr)); -} - - -CV_IMPL double -cvInvert( const CvArr* srcarr, CvArr* dstarr, int method ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.type() == dst.type() && src.rows == dst.cols && src.cols == dst.rows ); - return cv::invert( src, dst, method == CV_CHOLESKY ? cv::DECOMP_CHOLESKY : - method == CV_SVD ? cv::DECOMP_SVD : - method == CV_SVD_SYM ? cv::DECOMP_EIG : cv::DECOMP_LU ); -} - - -CV_IMPL int -cvSolve( const CvArr* Aarr, const CvArr* barr, CvArr* xarr, int method ) -{ - cv::Mat A = cv::cvarrToMat(Aarr), b = cv::cvarrToMat(barr), x = cv::cvarrToMat(xarr); - - CV_Assert( A.type() == x.type() && A.cols == x.rows && x.cols == b.cols ); - bool is_normal = (method & CV_NORMAL) != 0; - method &= ~CV_NORMAL; - return cv::solve( A, b, x, (method == CV_CHOLESKY ? cv::DECOMP_CHOLESKY : - method == CV_SVD ? cv::DECOMP_SVD : - method == CV_SVD_SYM ? cv::DECOMP_EIG : - A.rows > A.cols ? cv::DECOMP_QR : cv::DECOMP_LU) + (is_normal ? cv::DECOMP_NORMAL : 0) ); -} - - -CV_IMPL void -cvEigenVV( CvArr* srcarr, CvArr* evectsarr, CvArr* evalsarr, double, - int lowindex, int highindex) -{ - cv::Mat src = cv::cvarrToMat(srcarr), evals0 = cv::cvarrToMat(evalsarr), evals = evals0; - if( evectsarr ) - { - cv::Mat evects0 = cv::cvarrToMat(evectsarr), evects = evects0; - eigen(src, evals, evects, lowindex, highindex); - if( evects0.data != evects.data ) - { - uchar* p = evects0.data; - evects.convertTo(evects0, evects0.type()); - CV_Assert( p == evects0.data ); - } - } - else - eigen(src, evals, lowindex, highindex); - if( evals0.data != evals.data ) - { - uchar* p = evals0.data; - if( evals0.size() == evals.size() ) - evals.convertTo(evals0, evals0.type()); - else if( evals0.type() == evals.type() ) - cv::transpose(evals, evals0); - else - cv::Mat(evals.t()).convertTo(evals0, evals0.type()); - CV_Assert( p == evals0.data ); - } -} - - -CV_IMPL void -cvSVD( CvArr* aarr, CvArr* warr, CvArr* uarr, CvArr* varr, int flags ) -{ - cv::Mat a = cv::cvarrToMat(aarr), w = cv::cvarrToMat(warr), u, v; - int m = a.rows, n = a.cols, type = a.type(), mn = std::max(m, n), nm = std::min(m, n); - - CV_Assert( w.type() == type && - (w.size() == cv::Size(nm,1) || w.size() == cv::Size(1, nm) || - w.size() == cv::Size(nm, nm) || w.size() == cv::Size(n, m)) ); - - cv::SVD svd; - - if( w.size() == cv::Size(nm, 1) ) - svd.w = cv::Mat(nm, 1, type, w.data ); - else if( w.isContinuous() ) - svd.w = w; - - if( uarr ) - { - u = cv::cvarrToMat(uarr); - CV_Assert( u.type() == type ); - svd.u = u; - } - - if( varr ) - { - v = cv::cvarrToMat(varr); - CV_Assert( v.type() == type ); - svd.vt = v; - } - - svd(a, ((flags & CV_SVD_MODIFY_A) ? cv::SVD::MODIFY_A : 0) | - ((!svd.u.data && !svd.vt.data) ? cv::SVD::NO_UV : 0) | - ((m != n && (svd.u.size() == cv::Size(mn, mn) || - svd.vt.size() == cv::Size(mn, mn))) ? cv::SVD::FULL_UV : 0)); - - if( u.data ) - { - if( flags & CV_SVD_U_T ) - cv::transpose( svd.u, u ); - else if( u.data != svd.u.data ) - { - CV_Assert( u.size() == svd.u.size() ); - svd.u.copyTo(u); - } - } - - if( v.data ) - { - if( !(flags & CV_SVD_V_T) ) - cv::transpose( svd.vt, v ); - else if( v.data != svd.vt.data ) - { - CV_Assert( v.size() == svd.vt.size() ); - svd.vt.copyTo(v); - } - } - - if( w.data != svd.w.data ) - { - if( w.size() == svd.w.size() ) - svd.w.copyTo(w); - else - { - w = cv::Scalar(0); - cv::Mat wd = w.diag(); - svd.w.copyTo(wd); - } - } -} - - -CV_IMPL void -cvSVBkSb( const CvArr* warr, const CvArr* uarr, - const CvArr* varr, const CvArr* rhsarr, - CvArr* dstarr, int flags ) -{ - cv::Mat w = cv::cvarrToMat(warr), u = cv::cvarrToMat(uarr), - v = cv::cvarrToMat(varr), rhs, - dst = cv::cvarrToMat(dstarr), dst0 = dst; - if( flags & CV_SVD_U_T ) - { - cv::Mat tmp; - transpose(u, tmp); - u = tmp; - } - if( !(flags & CV_SVD_V_T) ) - { - cv::Mat tmp; - transpose(v, tmp); - v = tmp; - } - if( rhsarr ) - rhs = cv::cvarrToMat(rhsarr); - - cv::SVD::backSubst(w, u, v, rhs, dst); - CV_Assert( dst.data == dst0.data ); -} diff --git a/modules/core/src/mathfuncs.cpp b/modules/core/src/mathfuncs.cpp deleted file mode 100644 index 42b76a5..0000000 --- a/modules/core/src/mathfuncs.cpp +++ /dev/null @@ -1,2559 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - - -namespace cv -{ - -static const int MAX_BLOCK_SIZE = 1024; -typedef void (*MathFunc)(const void* src, void* dst, int len); - -static const float atan2_p1 = 0.9997878412794807f*(float)(180/CV_PI); -static const float atan2_p3 = -0.3258083974640975f*(float)(180/CV_PI); -static const float atan2_p5 = 0.1555786518463281f*(float)(180/CV_PI); -static const float atan2_p7 = -0.04432655554792128f*(float)(180/CV_PI); - -float fastAtan2( float y, float x ) -{ - float ax = std::abs(x), ay = std::abs(y); - float a, c, c2; - if( ax >= ay ) - { - c = ay/(ax + (float)DBL_EPSILON); - c2 = c*c; - a = (((atan2_p7*c2 + atan2_p5)*c2 + atan2_p3)*c2 + atan2_p1)*c; - } - else - { - c = ax/(ay + (float)DBL_EPSILON); - c2 = c*c; - a = 90.f - (((atan2_p7*c2 + atan2_p5)*c2 + atan2_p3)*c2 + atan2_p1)*c; - } - if( x < 0 ) - a = 180.f - a; - if( y < 0 ) - a = 360.f - a; - return a; -} - -static void FastAtan2_32f(const float *Y, const float *X, float *angle, int len, bool angleInDegrees=true ) -{ - int i = 0; - float scale = angleInDegrees ? 1 : (float)(CV_PI/180); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::FastAtan2_32f(Y, X, angle, len, scale)) - return; -#endif - -#if CV_SSE2 - if( USE_SSE2 ) - { - Cv32suf iabsmask; iabsmask.i = 0x7fffffff; - __m128 eps = _mm_set1_ps((float)DBL_EPSILON), absmask = _mm_set1_ps(iabsmask.f); - __m128 _90 = _mm_set1_ps(90.f), _180 = _mm_set1_ps(180.f), _360 = _mm_set1_ps(360.f); - __m128 z = _mm_setzero_ps(), scale4 = _mm_set1_ps(scale); - __m128 p1 = _mm_set1_ps(atan2_p1), p3 = _mm_set1_ps(atan2_p3); - __m128 p5 = _mm_set1_ps(atan2_p5), p7 = _mm_set1_ps(atan2_p7); - - for( ; i <= len - 4; i += 4 ) - { - __m128 x = _mm_loadu_ps(X + i), y = _mm_loadu_ps(Y + i); - __m128 ax = _mm_and_ps(x, absmask), ay = _mm_and_ps(y, absmask); - __m128 mask = _mm_cmplt_ps(ax, ay); - __m128 tmin = _mm_min_ps(ax, ay), tmax = _mm_max_ps(ax, ay); - __m128 c = _mm_div_ps(tmin, _mm_add_ps(tmax, eps)); - __m128 c2 = _mm_mul_ps(c, c); - __m128 a = _mm_mul_ps(c2, p7); - a = _mm_mul_ps(_mm_add_ps(a, p5), c2); - a = _mm_mul_ps(_mm_add_ps(a, p3), c2); - a = _mm_mul_ps(_mm_add_ps(a, p1), c); - - __m128 b = _mm_sub_ps(_90, a); - a = _mm_xor_ps(a, _mm_and_ps(_mm_xor_ps(a, b), mask)); - - b = _mm_sub_ps(_180, a); - mask = _mm_cmplt_ps(x, z); - a = _mm_xor_ps(a, _mm_and_ps(_mm_xor_ps(a, b), mask)); - - b = _mm_sub_ps(_360, a); - mask = _mm_cmplt_ps(y, z); - a = _mm_xor_ps(a, _mm_and_ps(_mm_xor_ps(a, b), mask)); - - a = _mm_mul_ps(a, scale4); - _mm_storeu_ps(angle + i, a); - } - } -#endif - - for( ; i < len; i++ ) - { - float x = X[i], y = Y[i]; - float ax = std::abs(x), ay = std::abs(y); - float a, c, c2; - if( ax >= ay ) - { - c = ay/(ax + (float)DBL_EPSILON); - c2 = c*c; - a = (((atan2_p7*c2 + atan2_p5)*c2 + atan2_p3)*c2 + atan2_p1)*c; - } - else - { - c = ax/(ay + (float)DBL_EPSILON); - c2 = c*c; - a = 90.f - (((atan2_p7*c2 + atan2_p5)*c2 + atan2_p3)*c2 + atan2_p1)*c; - } - if( x < 0 ) - a = 180.f - a; - if( y < 0 ) - a = 360.f - a; - angle[i] = (float)(a*scale); - } -} - - -/* ************************************************************************** *\ - Fast cube root by Ken Turkowski - (http://www.worldserver.com/turk/computergraphics/papers.html) -\* ************************************************************************** */ -float cubeRoot( float value ) -{ - float fr; - Cv32suf v, m; - int ix, s; - int ex, shx; - - v.f = value; - ix = v.i & 0x7fffffff; - s = v.i & 0x80000000; - ex = (ix >> 23) - 127; - shx = ex % 3; - shx -= shx >= 0 ? 3 : 0; - ex = (ex - shx) / 3; /* exponent of cube root */ - v.i = (ix & ((1<<23)-1)) | ((shx + 127)<<23); - fr = v.f; - - /* 0.125 <= fr < 1.0 */ - /* Use quartic rational polynomial with error < 2^(-24) */ - fr = (float)(((((45.2548339756803022511987494 * fr + - 192.2798368355061050458134625) * fr + - 119.1654824285581628956914143) * fr + - 13.43250139086239872172837314) * fr + - 0.1636161226585754240958355063)/ - ((((14.80884093219134573786480845 * fr + - 151.9714051044435648658557668) * fr + - 168.5254414101568283957668343) * fr + - 33.9905941350215598754191872) * fr + - 1.0)); - - /* fr *= 2^ex * sign */ - m.f = value; - v.f = fr; - v.i = (v.i + (ex << 23) + s) & (m.i*2 != 0 ? -1 : 0); - return v.f; -} - -static void Magnitude_32f(const float* x, const float* y, float* mag, int len) -{ - int i = 0; - -#if CV_SSE - if( USE_SSE2 ) - { - for( ; i <= len - 8; i += 8 ) - { - __m128 x0 = _mm_loadu_ps(x + i), x1 = _mm_loadu_ps(x + i + 4); - __m128 y0 = _mm_loadu_ps(y + i), y1 = _mm_loadu_ps(y + i + 4); - x0 = _mm_add_ps(_mm_mul_ps(x0, x0), _mm_mul_ps(y0, y0)); - x1 = _mm_add_ps(_mm_mul_ps(x1, x1), _mm_mul_ps(y1, y1)); - x0 = _mm_sqrt_ps(x0); x1 = _mm_sqrt_ps(x1); - _mm_storeu_ps(mag + i, x0); _mm_storeu_ps(mag + i + 4, x1); - } - } -#endif - - for( ; i < len; i++ ) - { - float x0 = x[i], y0 = y[i]; - mag[i] = std::sqrt(x0*x0 + y0*y0); - } -} - -static void Magnitude_64f(const double* x, const double* y, double* mag, int len) -{ - int i = 0; - -#if CV_SSE2 - if( USE_SSE2 ) - { - for( ; i <= len - 4; i += 4 ) - { - __m128d x0 = _mm_loadu_pd(x + i), x1 = _mm_loadu_pd(x + i + 2); - __m128d y0 = _mm_loadu_pd(y + i), y1 = _mm_loadu_pd(y + i + 2); - x0 = _mm_add_pd(_mm_mul_pd(x0, x0), _mm_mul_pd(y0, y0)); - x1 = _mm_add_pd(_mm_mul_pd(x1, x1), _mm_mul_pd(y1, y1)); - x0 = _mm_sqrt_pd(x0); x1 = _mm_sqrt_pd(x1); - _mm_storeu_pd(mag + i, x0); _mm_storeu_pd(mag + i + 2, x1); - } - } -#endif - - for( ; i < len; i++ ) - { - double x0 = x[i], y0 = y[i]; - mag[i] = std::sqrt(x0*x0 + y0*y0); - } -} - - -static void InvSqrt_32f(const float* src, float* dst, int len) -{ - int i = 0; - -#if CV_SSE - if( USE_SSE2 ) - { - __m128 _0_5 = _mm_set1_ps(0.5f), _1_5 = _mm_set1_ps(1.5f); - if( (((size_t)src|(size_t)dst) & 15) == 0 ) - for( ; i <= len - 8; i += 8 ) - { - __m128 t0 = _mm_load_ps(src + i), t1 = _mm_load_ps(src + i + 4); - __m128 h0 = _mm_mul_ps(t0, _0_5), h1 = _mm_mul_ps(t1, _0_5); - t0 = _mm_rsqrt_ps(t0); t1 = _mm_rsqrt_ps(t1); - t0 = _mm_mul_ps(t0, _mm_sub_ps(_1_5, _mm_mul_ps(_mm_mul_ps(t0,t0),h0))); - t1 = _mm_mul_ps(t1, _mm_sub_ps(_1_5, _mm_mul_ps(_mm_mul_ps(t1,t1),h1))); - _mm_store_ps(dst + i, t0); _mm_store_ps(dst + i + 4, t1); - } - else - for( ; i <= len - 8; i += 8 ) - { - __m128 t0 = _mm_loadu_ps(src + i), t1 = _mm_loadu_ps(src + i + 4); - __m128 h0 = _mm_mul_ps(t0, _0_5), h1 = _mm_mul_ps(t1, _0_5); - t0 = _mm_rsqrt_ps(t0); t1 = _mm_rsqrt_ps(t1); - t0 = _mm_mul_ps(t0, _mm_sub_ps(_1_5, _mm_mul_ps(_mm_mul_ps(t0,t0),h0))); - t1 = _mm_mul_ps(t1, _mm_sub_ps(_1_5, _mm_mul_ps(_mm_mul_ps(t1,t1),h1))); - _mm_storeu_ps(dst + i, t0); _mm_storeu_ps(dst + i + 4, t1); - } - } -#endif - - for( ; i < len; i++ ) - dst[i] = 1/std::sqrt(src[i]); -} - - -static void InvSqrt_64f(const double* src, double* dst, int len) -{ - for( int i = 0; i < len; i++ ) - dst[i] = 1/std::sqrt(src[i]); -} - - -static void Sqrt_32f(const float* src, float* dst, int len) -{ - int i = 0; - -#if CV_SSE - if( USE_SSE2 ) - { - if( (((size_t)src|(size_t)dst) & 15) == 0 ) - for( ; i <= len - 8; i += 8 ) - { - __m128 t0 = _mm_load_ps(src + i), t1 = _mm_load_ps(src + i + 4); - t0 = _mm_sqrt_ps(t0); t1 = _mm_sqrt_ps(t1); - _mm_store_ps(dst + i, t0); _mm_store_ps(dst + i + 4, t1); - } - else - for( ; i <= len - 8; i += 8 ) - { - __m128 t0 = _mm_loadu_ps(src + i), t1 = _mm_loadu_ps(src + i + 4); - t0 = _mm_sqrt_ps(t0); t1 = _mm_sqrt_ps(t1); - _mm_storeu_ps(dst + i, t0); _mm_storeu_ps(dst + i + 4, t1); - } - } -#endif - - for( ; i < len; i++ ) - dst[i] = std::sqrt(src[i]); -} - - -static void Sqrt_64f(const double* src, double* dst, int len) -{ - int i = 0; - -#if CV_SSE2 - if( USE_SSE2 ) - { - if( (((size_t)src|(size_t)dst) & 15) == 0 ) - for( ; i <= len - 4; i += 4 ) - { - __m128d t0 = _mm_load_pd(src + i), t1 = _mm_load_pd(src + i + 2); - t0 = _mm_sqrt_pd(t0); t1 = _mm_sqrt_pd(t1); - _mm_store_pd(dst + i, t0); _mm_store_pd(dst + i + 2, t1); - } - else - for( ; i <= len - 4; i += 4 ) - { - __m128d t0 = _mm_loadu_pd(src + i), t1 = _mm_loadu_pd(src + i + 2); - t0 = _mm_sqrt_pd(t0); t1 = _mm_sqrt_pd(t1); - _mm_storeu_pd(dst + i, t0); _mm_storeu_pd(dst + i + 2, t1); - } - } -#endif - - for( ; i < len; i++ ) - dst[i] = std::sqrt(src[i]); -} - - -/****************************************************************************************\ -* Cartezian -> Polar * -\****************************************************************************************/ - -void magnitude( InputArray src1, InputArray src2, OutputArray dst ) -{ - Mat X = src1.getMat(), Y = src2.getMat(); - int type = X.type(), depth = X.depth(), cn = X.channels(); - CV_Assert( X.size == Y.size && type == Y.type() && (depth == CV_32F || depth == CV_64F)); - dst.create(X.dims, X.size, X.type()); - Mat Mag = dst.getMat(); - - const Mat* arrays[] = {&X, &Y, &Mag, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size*cn; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - if( depth == CV_32F ) - { - const float *x = (const float*)ptrs[0], *y = (const float*)ptrs[1]; - float *mag = (float*)ptrs[2]; - Magnitude_32f( x, y, mag, len ); - } - else - { - const double *x = (const double*)ptrs[0], *y = (const double*)ptrs[1]; - double *mag = (double*)ptrs[2]; - Magnitude_64f( x, y, mag, len ); - } - } -} - - -void phase( InputArray src1, InputArray src2, OutputArray dst, bool angleInDegrees ) -{ - Mat X = src1.getMat(), Y = src2.getMat(); - int type = X.type(), depth = X.depth(), cn = X.channels(); - CV_Assert( X.size == Y.size && type == Y.type() && (depth == CV_32F || depth == CV_64F)); - dst.create( X.dims, X.size, type ); - Mat Angle = dst.getMat(); - - const Mat* arrays[] = {&X, &Y, &Angle, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - cv::AutoBuffer _buf; - float* buf[2] = {0, 0}; - int j, k, total = (int)(it.size*cn), blockSize = total; - size_t esz1 = X.elemSize1(); - - if( depth == CV_64F ) - { - blockSize = std::min(blockSize, ((BLOCK_SIZE+cn-1)/cn)*cn); - _buf.allocate(blockSize*2); - buf[0] = _buf; - buf[1] = buf[0] + blockSize; - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int len = std::min(total - j, blockSize); - if( depth == CV_32F ) - { - const float *x = (const float*)ptrs[0], *y = (const float*)ptrs[1]; - float *angle = (float*)ptrs[2]; - FastAtan2_32f( y, x, angle, len, angleInDegrees ); - } - else - { - const double *x = (const double*)ptrs[0], *y = (const double*)ptrs[1]; - double *angle = (double*)ptrs[2]; - for( k = 0; k < len; k++ ) - { - buf[0][k] = (float)x[k]; - buf[1][k] = (float)y[k]; - } - - FastAtan2_32f( buf[1], buf[0], buf[0], len, angleInDegrees ); - for( k = 0; k < len; k++ ) - angle[k] = buf[0][k]; - } - ptrs[0] += len*esz1; - ptrs[1] += len*esz1; - ptrs[2] += len*esz1; - } - } -} - - -void cartToPolar( InputArray src1, InputArray src2, - OutputArray dst1, OutputArray dst2, bool angleInDegrees ) -{ - Mat X = src1.getMat(), Y = src2.getMat(); - int type = X.type(), depth = X.depth(), cn = X.channels(); - CV_Assert( X.size == Y.size && type == Y.type() && (depth == CV_32F || depth == CV_64F)); - dst1.create( X.dims, X.size, type ); - dst2.create( X.dims, X.size, type ); - Mat Mag = dst1.getMat(), Angle = dst2.getMat(); - - const Mat* arrays[] = {&X, &Y, &Mag, &Angle, 0}; - uchar* ptrs[4]; - NAryMatIterator it(arrays, ptrs); - cv::AutoBuffer _buf; - float* buf[2] = {0, 0}; - int j, k, total = (int)(it.size*cn), blockSize = std::min(total, ((BLOCK_SIZE+cn-1)/cn)*cn); - size_t esz1 = X.elemSize1(); - - if( depth == CV_64F ) - { - _buf.allocate(blockSize*2); - buf[0] = _buf; - buf[1] = buf[0] + blockSize; - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int len = std::min(total - j, blockSize); - if( depth == CV_32F ) - { - const float *x = (const float*)ptrs[0], *y = (const float*)ptrs[1]; - float *mag = (float*)ptrs[2], *angle = (float*)ptrs[3]; - Magnitude_32f( x, y, mag, len ); - FastAtan2_32f( y, x, angle, len, angleInDegrees ); - } - else - { - const double *x = (const double*)ptrs[0], *y = (const double*)ptrs[1]; - double *angle = (double*)ptrs[3]; - - Magnitude_64f(x, y, (double*)ptrs[2], len); - for( k = 0; k < len; k++ ) - { - buf[0][k] = (float)x[k]; - buf[1][k] = (float)y[k]; - } - - FastAtan2_32f( buf[1], buf[0], buf[0], len, angleInDegrees ); - for( k = 0; k < len; k++ ) - angle[k] = buf[0][k]; - } - ptrs[0] += len*esz1; - ptrs[1] += len*esz1; - ptrs[2] += len*esz1; - ptrs[3] += len*esz1; - } - } -} - - -/****************************************************************************************\ -* Polar -> Cartezian * -\****************************************************************************************/ - -static void SinCos_32f( const float *angle, float *sinval, float* cosval, - int len, int angle_in_degrees ) -{ - const int N = 64; - - static const double sin_table[] = - { - 0.00000000000000000000, 0.09801714032956060400, - 0.19509032201612825000, 0.29028467725446233000, - 0.38268343236508978000, 0.47139673682599764000, - 0.55557023301960218000, 0.63439328416364549000, - 0.70710678118654746000, 0.77301045336273699000, - 0.83146961230254524000, 0.88192126434835494000, - 0.92387953251128674000, 0.95694033573220894000, - 0.98078528040323043000, 0.99518472667219682000, - 1.00000000000000000000, 0.99518472667219693000, - 0.98078528040323043000, 0.95694033573220894000, - 0.92387953251128674000, 0.88192126434835505000, - 0.83146961230254546000, 0.77301045336273710000, - 0.70710678118654757000, 0.63439328416364549000, - 0.55557023301960218000, 0.47139673682599786000, - 0.38268343236508989000, 0.29028467725446239000, - 0.19509032201612861000, 0.09801714032956082600, - 0.00000000000000012246, -0.09801714032956059000, - -0.19509032201612836000, -0.29028467725446211000, - -0.38268343236508967000, -0.47139673682599764000, - -0.55557023301960196000, -0.63439328416364527000, - -0.70710678118654746000, -0.77301045336273666000, - -0.83146961230254524000, -0.88192126434835494000, - -0.92387953251128652000, -0.95694033573220882000, - -0.98078528040323032000, -0.99518472667219693000, - -1.00000000000000000000, -0.99518472667219693000, - -0.98078528040323043000, -0.95694033573220894000, - -0.92387953251128663000, -0.88192126434835505000, - -0.83146961230254546000, -0.77301045336273688000, - -0.70710678118654768000, -0.63439328416364593000, - -0.55557023301960218000, -0.47139673682599792000, - -0.38268343236509039000, -0.29028467725446250000, - -0.19509032201612872000, -0.09801714032956050600, - }; - - static const double k2 = (2*CV_PI)/N; - - static const double sin_a0 = -0.166630293345647*k2*k2*k2; - static const double sin_a2 = k2; - - static const double cos_a0 = -0.499818138450326*k2*k2; - /*static const double cos_a2 = 1;*/ - - double k1; - int i; - - if( !angle_in_degrees ) - k1 = N/(2*CV_PI); - else - k1 = N/360.; - - for( i = 0; i < len; i++ ) - { - double t = angle[i]*k1; - int it = cvRound(t); - t -= it; - int sin_idx = it & (N - 1); - int cos_idx = (N/4 - sin_idx) & (N - 1); - - double sin_b = (sin_a0*t*t + sin_a2)*t; - double cos_b = cos_a0*t*t + 1; - - double sin_a = sin_table[sin_idx]; - double cos_a = sin_table[cos_idx]; - - double sin_val = sin_a*cos_b + cos_a*sin_b; - double cos_val = cos_a*cos_b - sin_a*sin_b; - - sinval[i] = (float)sin_val; - cosval[i] = (float)cos_val; - } -} - - -void polarToCart( InputArray src1, InputArray src2, - OutputArray dst1, OutputArray dst2, bool angleInDegrees ) -{ - Mat Mag = src1.getMat(), Angle = src2.getMat(); - int type = Angle.type(), depth = Angle.depth(), cn = Angle.channels(); - CV_Assert( Mag.empty() || (Angle.size == Mag.size && type == Mag.type() && (depth == CV_32F || depth == CV_64F))); - dst1.create( Angle.dims, Angle.size, type ); - dst2.create( Angle.dims, Angle.size, type ); - Mat X = dst1.getMat(), Y = dst2.getMat(); - - const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0}; - uchar* ptrs[4]; - NAryMatIterator it(arrays, ptrs); - cv::AutoBuffer _buf; - float* buf[2] = {0, 0}; - int j, k, total = (int)(it.size*cn), blockSize = std::min(total, ((BLOCK_SIZE+cn-1)/cn)*cn); - size_t esz1 = Angle.elemSize1(); - - if( depth == CV_64F ) - { - _buf.allocate(blockSize*2); - buf[0] = _buf; - buf[1] = buf[0] + blockSize; - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int len = std::min(total - j, blockSize); - if( depth == CV_32F ) - { - const float *mag = (const float*)ptrs[0], *angle = (const float*)ptrs[1]; - float *x = (float*)ptrs[2], *y = (float*)ptrs[3]; - - SinCos_32f( angle, y, x, len, angleInDegrees ); - if( mag ) - for( k = 0; k < len; k++ ) - { - float m = mag[k]; - x[k] *= m; y[k] *= m; - } - } - else - { - const double *mag = (const double*)ptrs[0], *angle = (const double*)ptrs[1]; - double *x = (double*)ptrs[2], *y = (double*)ptrs[3]; - - for( k = 0; k < len; k++ ) - buf[0][k] = (float)angle[k]; - - SinCos_32f( buf[0], buf[1], buf[0], len, angleInDegrees ); - if( mag ) - for( k = 0; k < len; k++ ) - { - double m = mag[k]; - x[k] = buf[0][k]*m; y[k] = buf[1][k]*m; - } - else - for( k = 0; k < len; k++ ) - { - x[k] = buf[0][k]; y[k] = buf[1][k]; - } - } - - if( ptrs[0] ) - ptrs[0] += len*esz1; - ptrs[1] += len*esz1; - ptrs[2] += len*esz1; - ptrs[3] += len*esz1; - } - } -} - -/****************************************************************************************\ -* E X P * -\****************************************************************************************/ - -typedef union -{ - struct { -#if ( defined( WORDS_BIGENDIAN ) && !defined( OPENCV_UNIVERSAL_BUILD ) ) || defined( __BIG_ENDIAN__ ) - int hi; - int lo; -#else - int lo; - int hi; -#endif - } i; - double d; -} -DBLINT; - -#ifndef HAVE_IPP - -#define EXPTAB_SCALE 6 -#define EXPTAB_MASK ((1 << EXPTAB_SCALE) - 1) - -#define EXPPOLY_32F_A0 .9670371139572337719125840413672004409288e-2 - -static const double expTab[] = { - 1.0 * EXPPOLY_32F_A0, - 1.0108892860517004600204097905619 * EXPPOLY_32F_A0, - 1.0218971486541166782344801347833 * EXPPOLY_32F_A0, - 1.0330248790212284225001082839705 * EXPPOLY_32F_A0, - 1.0442737824274138403219664787399 * EXPPOLY_32F_A0, - 1.0556451783605571588083413251529 * EXPPOLY_32F_A0, - 1.0671404006768236181695211209928 * EXPPOLY_32F_A0, - 1.0787607977571197937406800374385 * EXPPOLY_32F_A0, - 1.0905077326652576592070106557607 * EXPPOLY_32F_A0, - 1.1023825833078409435564142094256 * EXPPOLY_32F_A0, - 1.1143867425958925363088129569196 * EXPPOLY_32F_A0, - 1.126521618608241899794798643787 * EXPPOLY_32F_A0, - 1.1387886347566916537038302838415 * EXPPOLY_32F_A0, - 1.151189229952982705817759635202 * EXPPOLY_32F_A0, - 1.1637248587775775138135735990922 * EXPPOLY_32F_A0, - 1.1763969916502812762846457284838 * EXPPOLY_32F_A0, - 1.1892071150027210667174999705605 * EXPPOLY_32F_A0, - 1.2021567314527031420963969574978 * EXPPOLY_32F_A0, - 1.2152473599804688781165202513388 * EXPPOLY_32F_A0, - 1.2284805361068700056940089577928 * EXPPOLY_32F_A0, - 1.2418578120734840485936774687266 * EXPPOLY_32F_A0, - 1.2553807570246910895793906574423 * EXPPOLY_32F_A0, - 1.2690509571917332225544190810323 * EXPPOLY_32F_A0, - 1.2828700160787782807266697810215 * EXPPOLY_32F_A0, - 1.2968395546510096659337541177925 * EXPPOLY_32F_A0, - 1.3109612115247643419229917863308 * EXPPOLY_32F_A0, - 1.3252366431597412946295370954987 * EXPPOLY_32F_A0, - 1.3396675240533030053600306697244 * EXPPOLY_32F_A0, - 1.3542555469368927282980147401407 * EXPPOLY_32F_A0, - 1.3690024229745906119296011329822 * EXPPOLY_32F_A0, - 1.3839098819638319548726595272652 * EXPPOLY_32F_A0, - 1.3989796725383111402095281367152 * EXPPOLY_32F_A0, - 1.4142135623730950488016887242097 * EXPPOLY_32F_A0, - 1.4296133383919700112350657782751 * EXPPOLY_32F_A0, - 1.4451808069770466200370062414717 * EXPPOLY_32F_A0, - 1.4609177941806469886513028903106 * EXPPOLY_32F_A0, - 1.476826145939499311386907480374 * EXPPOLY_32F_A0, - 1.4929077282912648492006435314867 * EXPPOLY_32F_A0, - 1.5091644275934227397660195510332 * EXPPOLY_32F_A0, - 1.5255981507445383068512536895169 * EXPPOLY_32F_A0, - 1.5422108254079408236122918620907 * EXPPOLY_32F_A0, - 1.5590044002378369670337280894749 * EXPPOLY_32F_A0, - 1.5759808451078864864552701601819 * EXPPOLY_32F_A0, - 1.5931421513422668979372486431191 * EXPPOLY_32F_A0, - 1.6104903319492543081795206673574 * EXPPOLY_32F_A0, - 1.628027421857347766848218522014 * EXPPOLY_32F_A0, - 1.6457554781539648445187567247258 * EXPPOLY_32F_A0, - 1.6636765803267364350463364569764 * EXPPOLY_32F_A0, - 1.6817928305074290860622509524664 * EXPPOLY_32F_A0, - 1.7001063537185234695013625734975 * EXPPOLY_32F_A0, - 1.7186192981224779156293443764563 * EXPPOLY_32F_A0, - 1.7373338352737062489942020818722 * EXPPOLY_32F_A0, - 1.7562521603732994831121606193753 * EXPPOLY_32F_A0, - 1.7753764925265212525505592001993 * EXPPOLY_32F_A0, - 1.7947090750031071864277032421278 * EXPPOLY_32F_A0, - 1.8142521755003987562498346003623 * EXPPOLY_32F_A0, - 1.8340080864093424634870831895883 * EXPPOLY_32F_A0, - 1.8539791250833855683924530703377 * EXPPOLY_32F_A0, - 1.8741676341102999013299989499544 * EXPPOLY_32F_A0, - 1.8945759815869656413402186534269 * EXPPOLY_32F_A0, - 1.9152065613971472938726112702958 * EXPPOLY_32F_A0, - 1.9360617934922944505980559045667 * EXPPOLY_32F_A0, - 1.9571441241754002690183222516269 * EXPPOLY_32F_A0, - 1.9784560263879509682582499181312 * EXPPOLY_32F_A0, -}; - - -// the code below uses _mm_cast* intrinsics, which are not avialable on VS2005 -#if (defined _MSC_VER && _MSC_VER < 1500) || \ - (!defined __APPLE__ && defined __GNUC__ && __GNUC__*100 + __GNUC_MINOR__ < 402) -#undef CV_SSE2 -#define CV_SSE2 0 -#endif - -static const double exp_prescale = 1.4426950408889634073599246810019 * (1 << EXPTAB_SCALE); -static const double exp_postscale = 1./(1 << EXPTAB_SCALE); -static const double exp_max_val = 3000.*(1 << EXPTAB_SCALE); // log10(DBL_MAX) < 3000 - -static void Exp_32f( const float *_x, float *y, int n ) -{ - static const float - A4 = (float)(1.000000000000002438532970795181890933776 / EXPPOLY_32F_A0), - A3 = (float)(.6931471805521448196800669615864773144641 / EXPPOLY_32F_A0), - A2 = (float)(.2402265109513301490103372422686535526573 / EXPPOLY_32F_A0), - A1 = (float)(.5550339366753125211915322047004666939128e-1 / EXPPOLY_32F_A0); - -#undef EXPPOLY -#define EXPPOLY(x) \ - (((((x) + A1)*(x) + A2)*(x) + A3)*(x) + A4) - - int i = 0; - const Cv32suf* x = (const Cv32suf*)_x; - Cv32suf buf[4]; - -#if CV_SSE2 - if( n >= 8 && USE_SSE2 ) - { - static const __m128d prescale2 = _mm_set1_pd(exp_prescale); - static const __m128 postscale4 = _mm_set1_ps((float)exp_postscale); - static const __m128 maxval4 = _mm_set1_ps((float)(exp_max_val/exp_prescale)); - static const __m128 minval4 = _mm_set1_ps((float)(-exp_max_val/exp_prescale)); - - static const __m128 mA1 = _mm_set1_ps(A1); - static const __m128 mA2 = _mm_set1_ps(A2); - static const __m128 mA3 = _mm_set1_ps(A3); - static const __m128 mA4 = _mm_set1_ps(A4); - bool y_aligned = (size_t)(void*)y % 16 == 0; - - ushort CV_DECL_ALIGNED(16) tab_idx[8]; - - for( ; i <= n - 8; i += 8 ) - { - __m128 xf0, xf1; - xf0 = _mm_loadu_ps(&x[i].f); - xf1 = _mm_loadu_ps(&x[i+4].f); - __m128i xi0, xi1, xi2, xi3; - - xf0 = _mm_min_ps(_mm_max_ps(xf0, minval4), maxval4); - xf1 = _mm_min_ps(_mm_max_ps(xf1, minval4), maxval4); - - __m128d xd0 = _mm_cvtps_pd(xf0); - __m128d xd2 = _mm_cvtps_pd(_mm_movehl_ps(xf0, xf0)); - __m128d xd1 = _mm_cvtps_pd(xf1); - __m128d xd3 = _mm_cvtps_pd(_mm_movehl_ps(xf1, xf1)); - - xd0 = _mm_mul_pd(xd0, prescale2); - xd2 = _mm_mul_pd(xd2, prescale2); - xd1 = _mm_mul_pd(xd1, prescale2); - xd3 = _mm_mul_pd(xd3, prescale2); - - xi0 = _mm_cvtpd_epi32(xd0); - xi2 = _mm_cvtpd_epi32(xd2); - - xi1 = _mm_cvtpd_epi32(xd1); - xi3 = _mm_cvtpd_epi32(xd3); - - xd0 = _mm_sub_pd(xd0, _mm_cvtepi32_pd(xi0)); - xd2 = _mm_sub_pd(xd2, _mm_cvtepi32_pd(xi2)); - xd1 = _mm_sub_pd(xd1, _mm_cvtepi32_pd(xi1)); - xd3 = _mm_sub_pd(xd3, _mm_cvtepi32_pd(xi3)); - - xf0 = _mm_movelh_ps(_mm_cvtpd_ps(xd0), _mm_cvtpd_ps(xd2)); - xf1 = _mm_movelh_ps(_mm_cvtpd_ps(xd1), _mm_cvtpd_ps(xd3)); - - xf0 = _mm_mul_ps(xf0, postscale4); - xf1 = _mm_mul_ps(xf1, postscale4); - - xi0 = _mm_unpacklo_epi64(xi0, xi2); - xi1 = _mm_unpacklo_epi64(xi1, xi3); - xi0 = _mm_packs_epi32(xi0, xi1); - - _mm_store_si128((__m128i*)tab_idx, _mm_and_si128(xi0, _mm_set1_epi16(EXPTAB_MASK))); - - xi0 = _mm_add_epi16(_mm_srai_epi16(xi0, EXPTAB_SCALE), _mm_set1_epi16(127)); - xi0 = _mm_max_epi16(xi0, _mm_setzero_si128()); - xi0 = _mm_min_epi16(xi0, _mm_set1_epi16(255)); - xi1 = _mm_unpackhi_epi16(xi0, _mm_setzero_si128()); - xi0 = _mm_unpacklo_epi16(xi0, _mm_setzero_si128()); - - __m128d yd0 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[0]), _mm_load_sd(expTab + tab_idx[1])); - __m128d yd1 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[2]), _mm_load_sd(expTab + tab_idx[3])); - __m128d yd2 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[4]), _mm_load_sd(expTab + tab_idx[5])); - __m128d yd3 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[6]), _mm_load_sd(expTab + tab_idx[7])); - - __m128 yf0 = _mm_movelh_ps(_mm_cvtpd_ps(yd0), _mm_cvtpd_ps(yd1)); - __m128 yf1 = _mm_movelh_ps(_mm_cvtpd_ps(yd2), _mm_cvtpd_ps(yd3)); - - yf0 = _mm_mul_ps(yf0, _mm_castsi128_ps(_mm_slli_epi32(xi0, 23))); - yf1 = _mm_mul_ps(yf1, _mm_castsi128_ps(_mm_slli_epi32(xi1, 23))); - - __m128 zf0 = _mm_add_ps(xf0, mA1); - __m128 zf1 = _mm_add_ps(xf1, mA1); - - zf0 = _mm_add_ps(_mm_mul_ps(zf0, xf0), mA2); - zf1 = _mm_add_ps(_mm_mul_ps(zf1, xf1), mA2); - - zf0 = _mm_add_ps(_mm_mul_ps(zf0, xf0), mA3); - zf1 = _mm_add_ps(_mm_mul_ps(zf1, xf1), mA3); - - zf0 = _mm_add_ps(_mm_mul_ps(zf0, xf0), mA4); - zf1 = _mm_add_ps(_mm_mul_ps(zf1, xf1), mA4); - - zf0 = _mm_mul_ps(zf0, yf0); - zf1 = _mm_mul_ps(zf1, yf1); - - if( y_aligned ) - { - _mm_store_ps(y + i, zf0); - _mm_store_ps(y + i + 4, zf1); - } - else - { - _mm_storeu_ps(y + i, zf0); - _mm_storeu_ps(y + i + 4, zf1); - } - } - } - else -#endif - for( ; i <= n - 4; i += 4 ) - { - double x0 = x[i].f * exp_prescale; - double x1 = x[i + 1].f * exp_prescale; - double x2 = x[i + 2].f * exp_prescale; - double x3 = x[i + 3].f * exp_prescale; - int val0, val1, val2, val3, t; - - if( ((x[i].i >> 23) & 255) > 127 + 10 ) - x0 = x[i].i < 0 ? -exp_max_val : exp_max_val; - - if( ((x[i+1].i >> 23) & 255) > 127 + 10 ) - x1 = x[i+1].i < 0 ? -exp_max_val : exp_max_val; - - if( ((x[i+2].i >> 23) & 255) > 127 + 10 ) - x2 = x[i+2].i < 0 ? -exp_max_val : exp_max_val; - - if( ((x[i+3].i >> 23) & 255) > 127 + 10 ) - x3 = x[i+3].i < 0 ? -exp_max_val : exp_max_val; - - val0 = cvRound(x0); - val1 = cvRound(x1); - val2 = cvRound(x2); - val3 = cvRound(x3); - - x0 = (x0 - val0)*exp_postscale; - x1 = (x1 - val1)*exp_postscale; - x2 = (x2 - val2)*exp_postscale; - x3 = (x3 - val3)*exp_postscale; - - t = (val0 >> EXPTAB_SCALE) + 127; - t = !(t & ~255) ? t : t < 0 ? 0 : 255; - buf[0].i = t << 23; - - t = (val1 >> EXPTAB_SCALE) + 127; - t = !(t & ~255) ? t : t < 0 ? 0 : 255; - buf[1].i = t << 23; - - t = (val2 >> EXPTAB_SCALE) + 127; - t = !(t & ~255) ? t : t < 0 ? 0 : 255; - buf[2].i = t << 23; - - t = (val3 >> EXPTAB_SCALE) + 127; - t = !(t & ~255) ? t : t < 0 ? 0 : 255; - buf[3].i = t << 23; - - x0 = buf[0].f * expTab[val0 & EXPTAB_MASK] * EXPPOLY( x0 ); - x1 = buf[1].f * expTab[val1 & EXPTAB_MASK] * EXPPOLY( x1 ); - - y[i] = (float)x0; - y[i + 1] = (float)x1; - - x2 = buf[2].f * expTab[val2 & EXPTAB_MASK] * EXPPOLY( x2 ); - x3 = buf[3].f * expTab[val3 & EXPTAB_MASK] * EXPPOLY( x3 ); - - y[i + 2] = (float)x2; - y[i + 3] = (float)x3; - } - - for( ; i < n; i++ ) - { - double x0 = x[i].f * exp_prescale; - int val0, t; - - if( ((x[i].i >> 23) & 255) > 127 + 10 ) - x0 = x[i].i < 0 ? -exp_max_val : exp_max_val; - - val0 = cvRound(x0); - t = (val0 >> EXPTAB_SCALE) + 127; - t = !(t & ~255) ? t : t < 0 ? 0 : 255; - - buf[0].i = t << 23; - x0 = (x0 - val0)*exp_postscale; - - y[i] = (float)(buf[0].f * expTab[val0 & EXPTAB_MASK] * EXPPOLY(x0)); - } -} - - -static void Exp_64f( const double *_x, double *y, int n ) -{ - static const double - A5 = .99999999999999999998285227504999 / EXPPOLY_32F_A0, - A4 = .69314718055994546743029643825322 / EXPPOLY_32F_A0, - A3 = .24022650695886477918181338054308 / EXPPOLY_32F_A0, - A2 = .55504108793649567998466049042729e-1 / EXPPOLY_32F_A0, - A1 = .96180973140732918010002372686186e-2 / EXPPOLY_32F_A0, - A0 = .13369713757180123244806654839424e-2 / EXPPOLY_32F_A0; - -#undef EXPPOLY -#define EXPPOLY(x) (((((A0*(x) + A1)*(x) + A2)*(x) + A3)*(x) + A4)*(x) + A5) - - int i = 0; - Cv64suf buf[4]; - const Cv64suf* x = (const Cv64suf*)_x; - -#if CV_SSE2 - if( USE_SSE2 ) - { - static const __m128d prescale2 = _mm_set1_pd(exp_prescale); - static const __m128d postscale2 = _mm_set1_pd(exp_postscale); - static const __m128d maxval2 = _mm_set1_pd(exp_max_val); - static const __m128d minval2 = _mm_set1_pd(-exp_max_val); - - static const __m128d mA0 = _mm_set1_pd(A0); - static const __m128d mA1 = _mm_set1_pd(A1); - static const __m128d mA2 = _mm_set1_pd(A2); - static const __m128d mA3 = _mm_set1_pd(A3); - static const __m128d mA4 = _mm_set1_pd(A4); - static const __m128d mA5 = _mm_set1_pd(A5); - - int CV_DECL_ALIGNED(16) tab_idx[4]; - - for( ; i <= n - 4; i += 4 ) - { - __m128d xf0 = _mm_loadu_pd(&x[i].f), xf1 = _mm_loadu_pd(&x[i+2].f); - __m128i xi0, xi1; - xf0 = _mm_min_pd(_mm_max_pd(xf0, minval2), maxval2); - xf1 = _mm_min_pd(_mm_max_pd(xf1, minval2), maxval2); - xf0 = _mm_mul_pd(xf0, prescale2); - xf1 = _mm_mul_pd(xf1, prescale2); - - xi0 = _mm_cvtpd_epi32(xf0); - xi1 = _mm_cvtpd_epi32(xf1); - xf0 = _mm_mul_pd(_mm_sub_pd(xf0, _mm_cvtepi32_pd(xi0)), postscale2); - xf1 = _mm_mul_pd(_mm_sub_pd(xf1, _mm_cvtepi32_pd(xi1)), postscale2); - - xi0 = _mm_unpacklo_epi64(xi0, xi1); - _mm_store_si128((__m128i*)tab_idx, _mm_and_si128(xi0, _mm_set1_epi32(EXPTAB_MASK))); - - xi0 = _mm_add_epi32(_mm_srai_epi32(xi0, EXPTAB_SCALE), _mm_set1_epi32(1023)); - xi0 = _mm_packs_epi32(xi0, xi0); - xi0 = _mm_max_epi16(xi0, _mm_setzero_si128()); - xi0 = _mm_min_epi16(xi0, _mm_set1_epi16(2047)); - xi0 = _mm_unpacklo_epi16(xi0, _mm_setzero_si128()); - xi1 = _mm_unpackhi_epi32(xi0, _mm_setzero_si128()); - xi0 = _mm_unpacklo_epi32(xi0, _mm_setzero_si128()); - - __m128d yf0 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[0]), _mm_load_sd(expTab + tab_idx[1])); - __m128d yf1 = _mm_unpacklo_pd(_mm_load_sd(expTab + tab_idx[2]), _mm_load_sd(expTab + tab_idx[3])); - yf0 = _mm_mul_pd(yf0, _mm_castsi128_pd(_mm_slli_epi64(xi0, 52))); - yf1 = _mm_mul_pd(yf1, _mm_castsi128_pd(_mm_slli_epi64(xi1, 52))); - - __m128d zf0 = _mm_add_pd(_mm_mul_pd(mA0, xf0), mA1); - __m128d zf1 = _mm_add_pd(_mm_mul_pd(mA0, xf1), mA1); - - zf0 = _mm_add_pd(_mm_mul_pd(zf0, xf0), mA2); - zf1 = _mm_add_pd(_mm_mul_pd(zf1, xf1), mA2); - - zf0 = _mm_add_pd(_mm_mul_pd(zf0, xf0), mA3); - zf1 = _mm_add_pd(_mm_mul_pd(zf1, xf1), mA3); - - zf0 = _mm_add_pd(_mm_mul_pd(zf0, xf0), mA4); - zf1 = _mm_add_pd(_mm_mul_pd(zf1, xf1), mA4); - - zf0 = _mm_add_pd(_mm_mul_pd(zf0, xf0), mA5); - zf1 = _mm_add_pd(_mm_mul_pd(zf1, xf1), mA5); - - zf0 = _mm_mul_pd(zf0, yf0); - zf1 = _mm_mul_pd(zf1, yf1); - - _mm_storeu_pd(y + i, zf0); - _mm_storeu_pd(y + i + 2, zf1); - } - } - else -#endif - for( ; i <= n - 4; i += 4 ) - { - double x0 = x[i].f * exp_prescale; - double x1 = x[i + 1].f * exp_prescale; - double x2 = x[i + 2].f * exp_prescale; - double x3 = x[i + 3].f * exp_prescale; - - double y0, y1, y2, y3; - int val0, val1, val2, val3, t; - - t = (int)(x[i].i >> 52); - if( (t & 2047) > 1023 + 10 ) - x0 = t < 0 ? -exp_max_val : exp_max_val; - - t = (int)(x[i+1].i >> 52); - if( (t & 2047) > 1023 + 10 ) - x1 = t < 0 ? -exp_max_val : exp_max_val; - - t = (int)(x[i+2].i >> 52); - if( (t & 2047) > 1023 + 10 ) - x2 = t < 0 ? -exp_max_val : exp_max_val; - - t = (int)(x[i+3].i >> 52); - if( (t & 2047) > 1023 + 10 ) - x3 = t < 0 ? -exp_max_val : exp_max_val; - - val0 = cvRound(x0); - val1 = cvRound(x1); - val2 = cvRound(x2); - val3 = cvRound(x3); - - x0 = (x0 - val0)*exp_postscale; - x1 = (x1 - val1)*exp_postscale; - x2 = (x2 - val2)*exp_postscale; - x3 = (x3 - val3)*exp_postscale; - - t = (val0 >> EXPTAB_SCALE) + 1023; - t = !(t & ~2047) ? t : t < 0 ? 0 : 2047; - buf[0].i = (int64)t << 52; - - t = (val1 >> EXPTAB_SCALE) + 1023; - t = !(t & ~2047) ? t : t < 0 ? 0 : 2047; - buf[1].i = (int64)t << 52; - - t = (val2 >> EXPTAB_SCALE) + 1023; - t = !(t & ~2047) ? t : t < 0 ? 0 : 2047; - buf[2].i = (int64)t << 52; - - t = (val3 >> EXPTAB_SCALE) + 1023; - t = !(t & ~2047) ? t : t < 0 ? 0 : 2047; - buf[3].i = (int64)t << 52; - - y0 = buf[0].f * expTab[val0 & EXPTAB_MASK] * EXPPOLY( x0 ); - y1 = buf[1].f * expTab[val1 & EXPTAB_MASK] * EXPPOLY( x1 ); - - y[i] = y0; - y[i + 1] = y1; - - y2 = buf[2].f * expTab[val2 & EXPTAB_MASK] * EXPPOLY( x2 ); - y3 = buf[3].f * expTab[val3 & EXPTAB_MASK] * EXPPOLY( x3 ); - - y[i + 2] = y2; - y[i + 3] = y3; - } - - for( ; i < n; i++ ) - { - double x0 = x[i].f * exp_prescale; - int val0, t; - - t = (int)(x[i].i >> 52); - if( (t & 2047) > 1023 + 10 ) - x0 = t < 0 ? -exp_max_val : exp_max_val; - - val0 = cvRound(x0); - t = (val0 >> EXPTAB_SCALE) + 1023; - t = !(t & ~2047) ? t : t < 0 ? 0 : 2047; - - buf[0].i = (int64)t << 52; - x0 = (x0 - val0)*exp_postscale; - - y[i] = buf[0].f * expTab[val0 & EXPTAB_MASK] * EXPPOLY( x0 ); - } -} - -#undef EXPTAB_SCALE -#undef EXPTAB_MASK -#undef EXPPOLY_32F_A0 - -#else - -#define Exp_32f ippsExp_32f_A21 -#define Exp_64f ippsExp_64f_A50 - -#endif - -void exp( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - int type = src.type(), depth = src.depth(), cn = src.channels(); - - _dst.create( src.dims, src.size, type ); - Mat dst = _dst.getMat(); - - CV_Assert( depth == CV_32F || depth == CV_64F ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int len = (int)(it.size*cn); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - if( depth == CV_32F ) - Exp_32f( (const float*)ptrs[0], (float*)ptrs[1], len ); - else - Exp_64f( (const double*)ptrs[0], (double*)ptrs[1], len ); - } -} - - -/****************************************************************************************\ -* L O G * -\****************************************************************************************/ - -#ifndef HAVE_IPP - -#define LOGTAB_SCALE 8 -#define LOGTAB_MASK ((1 << LOGTAB_SCALE) - 1) -#define LOGTAB_MASK2 ((1 << (20 - LOGTAB_SCALE)) - 1) -#define LOGTAB_MASK2_32F ((1 << (23 - LOGTAB_SCALE)) - 1) - -static const double CV_DECL_ALIGNED(16) icvLogTab[] = { -0.0000000000000000000000000000000000000000, 1.000000000000000000000000000000000000000, -.00389864041565732288852075271279318258166, .9961089494163424124513618677042801556420, -.00778214044205494809292034119607706088573, .9922480620155038759689922480620155038760, -.01165061721997527263705585198749759001657, .9884169884169884169884169884169884169884, -.01550418653596525274396267235488267033361, .9846153846153846153846153846153846153846, -.01934296284313093139406447562578250654042, .9808429118773946360153256704980842911877, -.02316705928153437593630670221500622574241, .9770992366412213740458015267175572519084, -.02697658769820207233514075539915211265906, .9733840304182509505703422053231939163498, -.03077165866675368732785500469617545604706, .9696969696969696969696969696969696969697, -.03455238150665972812758397481047722976656, .9660377358490566037735849056603773584906, -.03831886430213659461285757856785494368522, .9624060150375939849624060150375939849624, -.04207121392068705056921373852674150839447, .9588014981273408239700374531835205992509, -.04580953603129420126371940114040626212953, .9552238805970149253731343283582089552239, -.04953393512227662748292900118940451648088, .9516728624535315985130111524163568773234, -.05324451451881227759255210685296333394944, .9481481481481481481481481481481481481481, -.05694137640013842427411105973078520037234, .9446494464944649446494464944649446494465, -.06062462181643483993820353816772694699466, .9411764705882352941176470588235294117647, -.06429435070539725460836422143984236754475, .9377289377289377289377289377289377289377, -.06795066190850773679699159401934593915938, .9343065693430656934306569343065693430657, -.07159365318700880442825962290953611955044, .9309090909090909090909090909090909090909, -.07522342123758751775142172846244648098944, .9275362318840579710144927536231884057971, -.07884006170777602129362549021607264876369, .9241877256317689530685920577617328519856, -.08244366921107458556772229485432035289706, .9208633093525179856115107913669064748201, -.08603433734180314373940490213499288074675, .9175627240143369175627240143369175627240, -.08961215868968712416897659522874164395031, .9142857142857142857142857142857142857143, -.09317722485418328259854092721070628613231, .9110320284697508896797153024911032028470, -.09672962645855109897752299730200320482256, .9078014184397163120567375886524822695035, -.10026945316367513738597949668474029749630, .9045936395759717314487632508833922261484, -.10379679368164355934833764649738441221420, .9014084507042253521126760563380281690141, -.10731173578908805021914218968959175981580, .8982456140350877192982456140350877192982, -.11081436634029011301105782649756292812530, .8951048951048951048951048951048951048951, -.11430477128005862852422325204315711744130, .8919860627177700348432055749128919860627, -.11778303565638344185817487641543266363440, .8888888888888888888888888888888888888889, -.12124924363286967987640707633545389398930, .8858131487889273356401384083044982698962, -.12470347850095722663787967121606925502420, .8827586206896551724137931034482758620690, -.12814582269193003360996385708858724683530, .8797250859106529209621993127147766323024, -.13157635778871926146571524895989568904040, .8767123287671232876712328767123287671233, -.13499516453750481925766280255629681050780, .8737201365187713310580204778156996587031, -.13840232285911913123754857224412262439730, .8707482993197278911564625850340136054422, -.14179791186025733629172407290752744302150, .8677966101694915254237288135593220338983, -.14518200984449788903951628071808954700830, .8648648648648648648648648648648648648649, -.14855469432313711530824207329715136438610, .8619528619528619528619528619528619528620, -.15191604202584196858794030049466527998450, .8590604026845637583892617449664429530201, -.15526612891112392955683674244937719777230, .8561872909698996655518394648829431438127, -.15860503017663857283636730244325008243330, .8533333333333333333333333333333333333333, -.16193282026931324346641360989451641216880, .8504983388704318936877076411960132890365, -.16524957289530714521497145597095368430010, .8476821192052980132450331125827814569536, -.16855536102980664403538924034364754334090, .8448844884488448844884488448844884488449, -.17185025692665920060697715143760433420540, .8421052631578947368421052631578947368421, -.17513433212784912385018287750426679849630, .8393442622950819672131147540983606557377, -.17840765747281828179637841458315961062910, .8366013071895424836601307189542483660131, -.18167030310763465639212199675966985523700, .8338762214983713355048859934853420195440, -.18492233849401198964024217730184318497780, .8311688311688311688311688311688311688312, -.18816383241818296356839823602058459073300, .8284789644012944983818770226537216828479, -.19139485299962943898322009772527962923050, .8258064516129032258064516129032258064516, -.19461546769967164038916962454095482826240, .8231511254019292604501607717041800643087, -.19782574332991986754137769821682013571260, .8205128205128205128205128205128205128205, -.20102574606059073203390141770796617493040, .8178913738019169329073482428115015974441, -.20421554142869088876999228432396193966280, .8152866242038216560509554140127388535032, -.20739519434607056602715147164417430758480, .8126984126984126984126984126984126984127, -.21056476910734961416338251183333341032260, .8101265822784810126582278481012658227848, -.21372432939771812687723695489694364368910, .8075709779179810725552050473186119873817, -.21687393830061435506806333251006435602900, .8050314465408805031446540880503144654088, -.22001365830528207823135744547471404075630, .8025078369905956112852664576802507836991, -.22314355131420973710199007200571941211830, .8000000000000000000000000000000000000000, -.22626367865045338145790765338460914790630, .7975077881619937694704049844236760124611, -.22937410106484582006380890106811420992010, .7950310559006211180124223602484472049689, -.23247487874309405442296849741978803649550, .7925696594427244582043343653250773993808, -.23556607131276688371634975283086532726890, .7901234567901234567901234567901234567901, -.23864773785017498464178231643018079921600, .7876923076923076923076923076923076923077, -.24171993688714515924331749374687206000090, .7852760736196319018404907975460122699387, -.24478272641769091566565919038112042471760, .7828746177370030581039755351681957186544, -.24783616390458124145723672882013488560910, .7804878048780487804878048780487804878049, -.25088030628580937353433455427875742316250, .7781155015197568389057750759878419452888, -.25391520998096339667426946107298135757450, .7757575757575757575757575757575757575758, -.25694093089750041913887912414793390780680, .7734138972809667673716012084592145015106, -.25995752443692604627401010475296061486000, .7710843373493975903614457831325301204819, -.26296504550088134477547896494797896593800, .7687687687687687687687687687687687687688, -.26596354849713793599974565040611196309330, .7664670658682634730538922155688622754491, -.26895308734550393836570947314612567424780, .7641791044776119402985074626865671641791, -.27193371548364175804834985683555714786050, .7619047619047619047619047619047619047619, -.27490548587279922676529508862586226314300, .7596439169139465875370919881305637982196, -.27786845100345625159121709657483734190480, .7573964497041420118343195266272189349112, -.28082266290088775395616949026589281857030, .7551622418879056047197640117994100294985, -.28376817313064456316240580235898960381750, .7529411764705882352941176470588235294118, -.28670503280395426282112225635501090437180, .7507331378299120234604105571847507331378, -.28963329258304265634293983566749375313530, .7485380116959064327485380116959064327485, -.29255300268637740579436012922087684273730, .7463556851311953352769679300291545189504, -.29546421289383584252163927885703742504130, .7441860465116279069767441860465116279070, -.29836697255179722709783618483925238251680, .7420289855072463768115942028985507246377, -.30126133057816173455023545102449133992200, .7398843930635838150289017341040462427746, -.30414733546729666446850615102448500692850, .7377521613832853025936599423631123919308, -.30702503529491181888388950937951449304830, .7356321839080459770114942528735632183908, -.30989447772286465854207904158101882785550, .7335243553008595988538681948424068767908, -.31275571000389684739317885942000430077330, .7314285714285714285714285714285714285714, -.31560877898630329552176476681779604405180, .7293447293447293447293447293447293447293, -.31845373111853458869546784626436419785030, .7272727272727272727272727272727272727273, -.32129061245373424782201254856772720813750, .7252124645892351274787535410764872521246, -.32411946865421192853773391107097268104550, .7231638418079096045197740112994350282486, -.32694034499585328257253991068864706903700, .7211267605633802816901408450704225352113, -.32975328637246797969240219572384376078850, .7191011235955056179775280898876404494382, -.33255833730007655635318997155991382896900, .7170868347338935574229691876750700280112, -.33535554192113781191153520921943709254280, .7150837988826815642458100558659217877095, -.33814494400871636381467055798566434532400, .7130919220055710306406685236768802228412, -.34092658697059319283795275623560883104800, .7111111111111111111111111111111111111111, -.34370051385331840121395430287520866841080, .7091412742382271468144044321329639889197, -.34646676734620857063262633346312213689100, .7071823204419889502762430939226519337017, -.34922538978528827602332285096053965389730, .7052341597796143250688705234159779614325, -.35197642315717814209818925519357435405250, .7032967032967032967032967032967032967033, -.35471990910292899856770532096561510115850, .7013698630136986301369863013698630136986, -.35745588892180374385176833129662554711100, .6994535519125683060109289617486338797814, -.36018440357500774995358483465679455548530, .6975476839237057220708446866485013623978, -.36290549368936841911903457003063522279280, .6956521739130434782608695652173913043478, -.36561919956096466943762379742111079394830, .6937669376693766937669376693766937669377, -.36832556115870762614150635272380895912650, .6918918918918918918918918918918918918919, -.37102461812787262962487488948681857436900, .6900269541778975741239892183288409703504, -.37371640979358405898480555151763837784530, .6881720430107526881720430107526881720430, -.37640097516425302659470730759494472295050, .6863270777479892761394101876675603217158, -.37907835293496944251145919224654790014030, .6844919786096256684491978609625668449198, -.38174858149084833769393299007788300514230, .6826666666666666666666666666666666666667, -.38441169891033200034513583887019194662580, .6808510638297872340425531914893617021277, -.38706774296844825844488013899535872042180, .6790450928381962864721485411140583554377, -.38971675114002518602873692543653305619950, .6772486772486772486772486772486772486772, -.39235876060286384303665840889152605086580, .6754617414248021108179419525065963060686, -.39499380824086893770896722344332374632350, .6736842105263157894736842105263157894737, -.39762193064713846624158577469643205404280, .6719160104986876640419947506561679790026, -.40024316412701266276741307592601515352730, .6701570680628272251308900523560209424084, -.40285754470108348090917615991202183067800, .6684073107049608355091383812010443864230, -.40546510810816432934799991016916465014230, .6666666666666666666666666666666666666667, -.40806588980822172674223224930756259709600, .6649350649350649350649350649350649350649, -.41065992498526837639616360320360399782650, .6632124352331606217616580310880829015544, -.41324724855021932601317757871584035456180, .6614987080103359173126614987080103359173, -.41582789514371093497757669865677598863850, .6597938144329896907216494845360824742268, -.41840189913888381489925905043492093682300, .6580976863753213367609254498714652956298, -.42096929464412963239894338585145305842150, .6564102564102564102564102564102564102564, -.42353011550580327293502591601281892508280, .6547314578005115089514066496163682864450, -.42608439531090003260516141381231136620050, .6530612244897959183673469387755102040816, -.42863216738969872610098832410585600882780, .6513994910941475826972010178117048346056, -.43117346481837132143866142541810404509300, .6497461928934010152284263959390862944162, -.43370832042155937902094819946796633303180, .6481012658227848101265822784810126582278, -.43623676677491801667585491486534010618930, .6464646464646464646464646464646464646465, -.43875883620762790027214350629947148263450, .6448362720403022670025188916876574307305, -.44127456080487520440058801796112675219780, .6432160804020100502512562814070351758794, -.44378397241030093089975139264424797147500, .6416040100250626566416040100250626566416, -.44628710262841947420398014401143882423650, .6400000000000000000000000000000000000000, -.44878398282700665555822183705458883196130, .6384039900249376558603491271820448877805, -.45127464413945855836729492693848442286250, .6368159203980099502487562189054726368159, -.45375911746712049854579618113348260521900, .6352357320099255583126550868486352357320, -.45623743348158757315857769754074979573500, .6336633663366336633663366336633663366337, -.45870962262697662081833982483658473938700, .6320987654320987654320987654320987654321, -.46117571512217014895185229761409573256980, .6305418719211822660098522167487684729064, -.46363574096303250549055974261136725544930, .6289926289926289926289926289926289926290, -.46608972992459918316399125615134835243230, .6274509803921568627450980392156862745098, -.46853771156323925639597405279346276074650, .6259168704156479217603911980440097799511, -.47097971521879100631480241645476780831830, .6243902439024390243902439024390243902439, -.47341577001667212165614273544633761048330, .6228710462287104622871046228710462287105, -.47584590486996386493601107758877333253630, .6213592233009708737864077669902912621359, -.47827014848147025860569669930555392056700, .6198547215496368038740920096852300242131, -.48068852934575190261057286988943815231330, .6183574879227053140096618357487922705314, -.48310107575113581113157579238759353756900, .6168674698795180722891566265060240963855, -.48550781578170076890899053978500887751580, .6153846153846153846153846153846153846154, -.48790877731923892879351001283794175833480, .6139088729016786570743405275779376498801, -.49030398804519381705802061333088204264650, .6124401913875598086124401913875598086124, -.49269347544257524607047571407747454941280, .6109785202863961813842482100238663484487, -.49507726679785146739476431321236304938800, .6095238095238095238095238095238095238095, -.49745538920281889838648226032091770321130, .6080760095011876484560570071258907363420, -.49982786955644931126130359189119189977650, .6066350710900473933649289099526066350711, -.50219473456671548383667413872899487614650, .6052009456264775413711583924349881796690, -.50455601075239520092452494282042607665050, .6037735849056603773584905660377358490566, -.50691172444485432801997148999362252652650, .6023529411764705882352941176470588235294, -.50926190178980790257412536448100581765150, .6009389671361502347417840375586854460094, -.51160656874906207391973111953120678663250, .5995316159250585480093676814988290398126, -.51394575110223428282552049495279788970950, .5981308411214953271028037383177570093458, -.51627947444845445623684554448118433356300, .5967365967365967365967365967365967365967, -.51860776420804555186805373523384332656850, .5953488372093023255813953488372093023256, -.52093064562418522900344441950437612831600, .5939675174013921113689095127610208816705, -.52324814376454775732838697877014055848100, .5925925925925925925925925925925925925926, -.52556028352292727401362526507000438869000, .5912240184757505773672055427251732101617, -.52786708962084227803046587723656557500350, .5898617511520737327188940092165898617512, -.53016858660912158374145519701414741575700, .5885057471264367816091954022988505747126, -.53246479886947173376654518506256863474850, .5871559633027522935779816513761467889908, -.53475575061602764748158733709715306758900, .5858123569794050343249427917620137299771, -.53704146589688361856929077475797384977350, .5844748858447488584474885844748858447489, -.53932196859560876944783558428753167390800, .5831435079726651480637813211845102505695, -.54159728243274429804188230264117009937750, .5818181818181818181818181818181818181818, -.54386743096728351609669971367111429572100, .5804988662131519274376417233560090702948, -.54613243759813556721383065450936555862450, .5791855203619909502262443438914027149321, -.54839232556557315767520321969641372561450, .5778781038374717832957110609480812641084, -.55064711795266219063194057525834068655950, .5765765765765765765765765765765765765766, -.55289683768667763352766542084282264113450, .5752808988764044943820224719101123595506, -.55514150754050151093110798683483153581600, .5739910313901345291479820627802690582960, -.55738115013400635344709144192165695130850, .5727069351230425055928411633109619686801, -.55961578793542265941596269840374588966350, .5714285714285714285714285714285714285714, -.56184544326269181269140062795486301183700, .5701559020044543429844097995545657015590, -.56407013828480290218436721261241473257550, .5688888888888888888888888888888888888889, -.56628989502311577464155334382667206227800, .5676274944567627494456762749445676274945, -.56850473535266865532378233183408156037350, .5663716814159292035398230088495575221239, -.57071468100347144680739575051120482385150, .5651214128035320088300220750551876379691, -.57291975356178548306473885531886480748650, .5638766519823788546255506607929515418502, -.57511997447138785144460371157038025558000, .5626373626373626373626373626373626373626, -.57731536503482350219940144597785547375700, .5614035087719298245614035087719298245614, -.57950594641464214795689713355386629700650, .5601750547045951859956236323851203501094, -.58169173963462239562716149521293118596100, .5589519650655021834061135371179039301310, -.58387276558098266665552955601015128195300, .5577342047930283224400871459694989106754, -.58604904500357812846544902640744112432000, .5565217391304347826086956521739130434783, -.58822059851708596855957011939608491957200, .5553145336225596529284164859002169197397, -.59038744660217634674381770309992134571100, .5541125541125541125541125541125541125541, -.59254960960667157898740242671919986605650, .5529157667386609071274298056155507559395, -.59470710774669277576265358220553025603300, .5517241379310344827586206896551724137931, -.59685996110779382384237123915227130055450, .5505376344086021505376344086021505376344, -.59900818964608337768851242799428291618800, .5493562231759656652360515021459227467811, -.60115181318933474940990890900138765573500, .5481798715203426124197002141327623126338, -.60329085143808425240052883964381180703650, .5470085470085470085470085470085470085470, -.60542532396671688843525771517306566238400, .5458422174840085287846481876332622601279, -.60755525022454170969155029524699784815300, .5446808510638297872340425531914893617021, -.60968064953685519036241657886421307921400, .5435244161358811040339702760084925690021, -.61180154110599282990534675263916142284850, .5423728813559322033898305084745762711864, -.61391794401237043121710712512140162289150, .5412262156448202959830866807610993657505, -.61602987721551394351138242200249806046500, .5400843881856540084388185654008438818565, -.61813735955507864705538167982012964785100, .5389473684210526315789473684210526315789, -.62024040975185745772080281312810257077200, .5378151260504201680672268907563025210084, -.62233904640877868441606324267922900617100, .5366876310272536687631027253668763102725, -.62443328801189346144440150965237990021700, .5355648535564853556485355648535564853556, -.62652315293135274476554741340805776417250, .5344467640918580375782881002087682672234, -.62860865942237409420556559780379757285100, .5333333333333333333333333333333333333333, -.63068982562619868570408243613201193511500, .5322245322245322245322245322245322245322, -.63276666957103777644277897707070223987100, .5311203319502074688796680497925311203320, -.63483920917301017716738442686619237065300, .5300207039337474120082815734989648033126, -.63690746223706917739093569252872839570050, .5289256198347107438016528925619834710744, -.63897144645792069983514238629140891134750, .5278350515463917525773195876288659793814, -.64103117942093124081992527862894348800200, .5267489711934156378600823045267489711934, -.64308667860302726193566513757104985415950, .5256673511293634496919917864476386036961, -.64513796137358470073053240412264131009600, .5245901639344262295081967213114754098361, -.64718504499530948859131740391603671014300, .5235173824130879345603271983640081799591, -.64922794662510974195157587018911726772800, .5224489795918367346938775510204081632653, -.65126668331495807251485530287027359008800, .5213849287169042769857433808553971486762, -.65330127201274557080523663898929953575150, .5203252032520325203252032520325203252033, -.65533172956312757406749369692988693714150, .5192697768762677484787018255578093306288, -.65735807270835999727154330685152672231200, .5182186234817813765182186234817813765182, -.65938031808912778153342060249997302889800, .5171717171717171717171717171717171717172, -.66139848224536490484126716182800009846700, .5161290322580645161290322580645161290323, -.66341258161706617713093692145776003599150, .5150905432595573440643863179074446680080, -.66542263254509037562201001492212526500250, .5140562248995983935742971887550200803213, -.66742865127195616370414654738851822912700, .5130260521042084168336673346693386773547, -.66943065394262923906154583164607174694550, .5120000000000000000000000000000000000000, -.67142865660530226534774556057527661323550, .5109780439121756487025948103792415169661, -.67342267521216669923234121597488410770900, .5099601593625498007968127490039840637450, -.67541272562017662384192817626171745359900, .5089463220675944333996023856858846918489, -.67739882359180603188519853574689477682100, .5079365079365079365079365079365079365079, -.67938098479579733801614338517538271844400, .5069306930693069306930693069306930693069, -.68135922480790300781450241629499942064300, .5059288537549407114624505928853754940711, -.68333355911162063645036823800182901322850, .5049309664694280078895463510848126232742, -.68530400309891936760919861626462079584600, .5039370078740157480314960629921259842520, -.68727057207096020619019327568821609020250, .5029469548133595284872298624754420432220, -.68923328123880889251040571252815425395950, .5019607843137254901960784313725490196078, -.69314718055994530941723212145818, 5.0e-01, -}; - - - -#define LOGTAB_TRANSLATE(x,h) (((x) - 1.)*icvLogTab[(h)+1]) -static const double ln_2 = 0.69314718055994530941723212145818; - -static void Log_32f( const float *_x, float *y, int n ) -{ - static const float shift[] = { 0, -1.f/512 }; - static const float - A0 = 0.3333333333333333333333333f, - A1 = -0.5f, - A2 = 1.f; - - #undef LOGPOLY - #define LOGPOLY(x) (((A0*(x) + A1)*(x) + A2)*(x)) - - int i = 0; - Cv32suf buf[4]; - const int* x = (const int*)_x; - -#if CV_SSE2 - if( USE_SSE2 ) - { - static const __m128d ln2_2 = _mm_set1_pd(ln_2); - static const __m128 _1_4 = _mm_set1_ps(1.f); - static const __m128 shift4 = _mm_set1_ps(-1.f/512); - - static const __m128 mA0 = _mm_set1_ps(A0); - static const __m128 mA1 = _mm_set1_ps(A1); - static const __m128 mA2 = _mm_set1_ps(A2); - - int CV_DECL_ALIGNED(16) idx[4]; - - for( ; i <= n - 4; i += 4 ) - { - __m128i h0 = _mm_loadu_si128((const __m128i*)(x + i)); - __m128i yi0 = _mm_sub_epi32(_mm_and_si128(_mm_srli_epi32(h0, 23), _mm_set1_epi32(255)), _mm_set1_epi32(127)); - __m128d yd0 = _mm_mul_pd(_mm_cvtepi32_pd(yi0), ln2_2); - __m128d yd1 = _mm_mul_pd(_mm_cvtepi32_pd(_mm_unpackhi_epi64(yi0,yi0)), ln2_2); - - __m128i xi0 = _mm_or_si128(_mm_and_si128(h0, _mm_set1_epi32(LOGTAB_MASK2_32F)), _mm_set1_epi32(127 << 23)); - - h0 = _mm_and_si128(_mm_srli_epi32(h0, 23 - LOGTAB_SCALE - 1), _mm_set1_epi32(LOGTAB_MASK*2)); - _mm_store_si128((__m128i*)idx, h0); - h0 = _mm_cmpeq_epi32(h0, _mm_set1_epi32(510)); - - __m128d t0, t1, t2, t3, t4; - t0 = _mm_load_pd(icvLogTab + idx[0]); - t2 = _mm_load_pd(icvLogTab + idx[1]); - t1 = _mm_unpackhi_pd(t0, t2); - t0 = _mm_unpacklo_pd(t0, t2); - t2 = _mm_load_pd(icvLogTab + idx[2]); - t4 = _mm_load_pd(icvLogTab + idx[3]); - t3 = _mm_unpackhi_pd(t2, t4); - t2 = _mm_unpacklo_pd(t2, t4); - - yd0 = _mm_add_pd(yd0, t0); - yd1 = _mm_add_pd(yd1, t2); - - __m128 yf0 = _mm_movelh_ps(_mm_cvtpd_ps(yd0), _mm_cvtpd_ps(yd1)); - - __m128 xf0 = _mm_sub_ps(_mm_castsi128_ps(xi0), _1_4); - xf0 = _mm_mul_ps(xf0, _mm_movelh_ps(_mm_cvtpd_ps(t1), _mm_cvtpd_ps(t3))); - xf0 = _mm_add_ps(xf0, _mm_and_ps(_mm_castsi128_ps(h0), shift4)); - - __m128 zf0 = _mm_mul_ps(xf0, mA0); - zf0 = _mm_mul_ps(_mm_add_ps(zf0, mA1), xf0); - zf0 = _mm_mul_ps(_mm_add_ps(zf0, mA2), xf0); - yf0 = _mm_add_ps(yf0, zf0); - - _mm_storeu_ps(y + i, yf0); - } - } - else -#endif - for( ; i <= n - 4; i += 4 ) - { - double x0, x1, x2, x3; - double y0, y1, y2, y3; - int h0, h1, h2, h3; - - h0 = x[i]; - h1 = x[i+1]; - buf[0].i = (h0 & LOGTAB_MASK2_32F) | (127 << 23); - buf[1].i = (h1 & LOGTAB_MASK2_32F) | (127 << 23); - - y0 = (((h0 >> 23) & 0xff) - 127) * ln_2; - y1 = (((h1 >> 23) & 0xff) - 127) * ln_2; - - h0 = (h0 >> (23 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - h1 = (h1 >> (23 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y0 += icvLogTab[h0]; - y1 += icvLogTab[h1]; - - h2 = x[i+2]; - h3 = x[i+3]; - - x0 = LOGTAB_TRANSLATE( buf[0].f, h0 ); - x1 = LOGTAB_TRANSLATE( buf[1].f, h1 ); - - buf[2].i = (h2 & LOGTAB_MASK2_32F) | (127 << 23); - buf[3].i = (h3 & LOGTAB_MASK2_32F) | (127 << 23); - - y2 = (((h2 >> 23) & 0xff) - 127) * ln_2; - y3 = (((h3 >> 23) & 0xff) - 127) * ln_2; - - h2 = (h2 >> (23 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - h3 = (h3 >> (23 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y2 += icvLogTab[h2]; - y3 += icvLogTab[h3]; - - x2 = LOGTAB_TRANSLATE( buf[2].f, h2 ); - x3 = LOGTAB_TRANSLATE( buf[3].f, h3 ); - - x0 += shift[h0 == 510]; - x1 += shift[h1 == 510]; - y0 += LOGPOLY( x0 ); - y1 += LOGPOLY( x1 ); - - y[i] = (float) y0; - y[i + 1] = (float) y1; - - x2 += shift[h2 == 510]; - x3 += shift[h3 == 510]; - y2 += LOGPOLY( x2 ); - y3 += LOGPOLY( x3 ); - - y[i + 2] = (float) y2; - y[i + 3] = (float) y3; - } - - for( ; i < n; i++ ) - { - int h0 = x[i]; - double y0; - float x0; - - y0 = (((h0 >> 23) & 0xff) - 127) * ln_2; - - buf[0].i = (h0 & LOGTAB_MASK2_32F) | (127 << 23); - h0 = (h0 >> (23 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y0 += icvLogTab[h0]; - x0 = (float)LOGTAB_TRANSLATE( buf[0].f, h0 ); - x0 += shift[h0 == 510]; - y0 += LOGPOLY( x0 ); - - y[i] = (float)y0; - } -} - - -static void Log_64f( const double *x, double *y, int n ) -{ - static const double shift[] = { 0, -1./512 }; - static const double - A7 = 1.0, - A6 = -0.5, - A5 = 0.333333333333333314829616256247390992939472198486328125, - A4 = -0.25, - A3 = 0.2, - A2 = -0.1666666666666666574148081281236954964697360992431640625, - A1 = 0.1428571428571428769682682968777953647077083587646484375, - A0 = -0.125; - - #undef LOGPOLY - #define LOGPOLY(x,k) ((x)+=shift[k], xq = (x)*(x),\ - (((A0*xq + A2)*xq + A4)*xq + A6)*xq + \ - (((A1*xq + A3)*xq + A5)*xq + A7)*(x)) - - int i = 0; - DBLINT buf[4]; - DBLINT *X = (DBLINT *) x; - -#if CV_SSE2 - if( USE_SSE2 ) - { - static const __m128d ln2_2 = _mm_set1_pd(ln_2); - static const __m128d _1_2 = _mm_set1_pd(1.); - static const __m128d shift2 = _mm_set1_pd(-1./512); - - static const __m128i log_and_mask2 = _mm_set_epi32(LOGTAB_MASK2, 0xffffffff, LOGTAB_MASK2, 0xffffffff); - static const __m128i log_or_mask2 = _mm_set_epi32(1023 << 20, 0, 1023 << 20, 0); - - static const __m128d mA0 = _mm_set1_pd(A0); - static const __m128d mA1 = _mm_set1_pd(A1); - static const __m128d mA2 = _mm_set1_pd(A2); - static const __m128d mA3 = _mm_set1_pd(A3); - static const __m128d mA4 = _mm_set1_pd(A4); - static const __m128d mA5 = _mm_set1_pd(A5); - static const __m128d mA6 = _mm_set1_pd(A6); - static const __m128d mA7 = _mm_set1_pd(A7); - - int CV_DECL_ALIGNED(16) idx[4]; - - for( ; i <= n - 4; i += 4 ) - { - __m128i h0 = _mm_loadu_si128((const __m128i*)(x + i)); - __m128i h1 = _mm_loadu_si128((const __m128i*)(x + i + 2)); - - __m128d xd0 = _mm_castsi128_pd(_mm_or_si128(_mm_and_si128(h0, log_and_mask2), log_or_mask2)); - __m128d xd1 = _mm_castsi128_pd(_mm_or_si128(_mm_and_si128(h1, log_and_mask2), log_or_mask2)); - - h0 = _mm_unpackhi_epi32(_mm_unpacklo_epi32(h0, h1), _mm_unpackhi_epi32(h0, h1)); - - __m128i yi0 = _mm_sub_epi32(_mm_and_si128(_mm_srli_epi32(h0, 20), - _mm_set1_epi32(2047)), _mm_set1_epi32(1023)); - __m128d yd0 = _mm_mul_pd(_mm_cvtepi32_pd(yi0), ln2_2); - __m128d yd1 = _mm_mul_pd(_mm_cvtepi32_pd(_mm_unpackhi_epi64(yi0, yi0)), ln2_2); - - h0 = _mm_and_si128(_mm_srli_epi32(h0, 20 - LOGTAB_SCALE - 1), _mm_set1_epi32(LOGTAB_MASK * 2)); - _mm_store_si128((__m128i*)idx, h0); - h0 = _mm_cmpeq_epi32(h0, _mm_set1_epi32(510)); - - __m128d t0, t1, t2, t3, t4; - t0 = _mm_load_pd(icvLogTab + idx[0]); - t2 = _mm_load_pd(icvLogTab + idx[1]); - t1 = _mm_unpackhi_pd(t0, t2); - t0 = _mm_unpacklo_pd(t0, t2); - t2 = _mm_load_pd(icvLogTab + idx[2]); - t4 = _mm_load_pd(icvLogTab + idx[3]); - t3 = _mm_unpackhi_pd(t2, t4); - t2 = _mm_unpacklo_pd(t2, t4); - - yd0 = _mm_add_pd(yd0, t0); - yd1 = _mm_add_pd(yd1, t2); - - xd0 = _mm_mul_pd(_mm_sub_pd(xd0, _1_2), t1); - xd1 = _mm_mul_pd(_mm_sub_pd(xd1, _1_2), t3); - - xd0 = _mm_add_pd(xd0, _mm_and_pd(_mm_castsi128_pd(_mm_unpacklo_epi32(h0, h0)), shift2)); - xd1 = _mm_add_pd(xd1, _mm_and_pd(_mm_castsi128_pd(_mm_unpackhi_epi32(h0, h0)), shift2)); - - __m128d zd0 = _mm_mul_pd(xd0, mA0); - __m128d zd1 = _mm_mul_pd(xd1, mA0); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA1), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA1), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA2), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA2), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA3), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA3), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA4), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA4), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA5), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA5), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA6), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA6), xd1); - zd0 = _mm_mul_pd(_mm_add_pd(zd0, mA7), xd0); - zd1 = _mm_mul_pd(_mm_add_pd(zd1, mA7), xd1); - - yd0 = _mm_add_pd(yd0, zd0); - yd1 = _mm_add_pd(yd1, zd1); - - _mm_storeu_pd(y + i, yd0); - _mm_storeu_pd(y + i + 2, yd1); - } - } - else -#endif - for( ; i <= n - 4; i += 4 ) - { - double xq; - double x0, x1, x2, x3; - double y0, y1, y2, y3; - int h0, h1, h2, h3; - - h0 = X[i].i.lo; - h1 = X[i + 1].i.lo; - buf[0].i.lo = h0; - buf[1].i.lo = h1; - - h0 = X[i].i.hi; - h1 = X[i + 1].i.hi; - buf[0].i.hi = (h0 & LOGTAB_MASK2) | (1023 << 20); - buf[1].i.hi = (h1 & LOGTAB_MASK2) | (1023 << 20); - - y0 = (((h0 >> 20) & 0x7ff) - 1023) * ln_2; - y1 = (((h1 >> 20) & 0x7ff) - 1023) * ln_2; - - h2 = X[i + 2].i.lo; - h3 = X[i + 3].i.lo; - buf[2].i.lo = h2; - buf[3].i.lo = h3; - - h0 = (h0 >> (20 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - h1 = (h1 >> (20 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y0 += icvLogTab[h0]; - y1 += icvLogTab[h1]; - - h2 = X[i + 2].i.hi; - h3 = X[i + 3].i.hi; - - x0 = LOGTAB_TRANSLATE( buf[0].d, h0 ); - x1 = LOGTAB_TRANSLATE( buf[1].d, h1 ); - - buf[2].i.hi = (h2 & LOGTAB_MASK2) | (1023 << 20); - buf[3].i.hi = (h3 & LOGTAB_MASK2) | (1023 << 20); - - y2 = (((h2 >> 20) & 0x7ff) - 1023) * ln_2; - y3 = (((h3 >> 20) & 0x7ff) - 1023) * ln_2; - - h2 = (h2 >> (20 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - h3 = (h3 >> (20 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y2 += icvLogTab[h2]; - y3 += icvLogTab[h3]; - - x2 = LOGTAB_TRANSLATE( buf[2].d, h2 ); - x3 = LOGTAB_TRANSLATE( buf[3].d, h3 ); - - y0 += LOGPOLY( x0, h0 == 510 ); - y1 += LOGPOLY( x1, h1 == 510 ); - - y[i] = y0; - y[i + 1] = y1; - - y2 += LOGPOLY( x2, h2 == 510 ); - y3 += LOGPOLY( x3, h3 == 510 ); - - y[i + 2] = y2; - y[i + 3] = y3; - } - - for( ; i < n; i++ ) - { - int h0 = X[i].i.hi; - double xq; - double x0, y0 = (((h0 >> 20) & 0x7ff) - 1023) * ln_2; - - buf[0].i.hi = (h0 & LOGTAB_MASK2) | (1023 << 20); - buf[0].i.lo = X[i].i.lo; - h0 = (h0 >> (20 - LOGTAB_SCALE - 1)) & LOGTAB_MASK * 2; - - y0 += icvLogTab[h0]; - x0 = LOGTAB_TRANSLATE( buf[0].d, h0 ); - y0 += LOGPOLY( x0, h0 == 510 ); - y[i] = y0; - } -} - -#else - -#define Log_32f ippsLn_32f_A21 -#define Log_64f ippsLn_64f_A50 - -#endif - -void log( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - int type = src.type(), depth = src.depth(), cn = src.channels(); - - _dst.create( src.dims, src.size, type ); - Mat dst = _dst.getMat(); - - CV_Assert( depth == CV_32F || depth == CV_64F ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int len = (int)(it.size*cn); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - if( depth == CV_32F ) - Log_32f( (const float*)ptrs[0], (float*)ptrs[1], len ); - else - Log_64f( (const double*)ptrs[0], (double*)ptrs[1], len ); - } -} - -/****************************************************************************************\ -* P O W E R * -\****************************************************************************************/ - -template -static void -iPow_( const T* src, T* dst, int len, int power ) -{ - int i; - for( i = 0; i < len; i++ ) - { - WT a = 1, b = src[i]; - int p = power; - while( p > 1 ) - { - if( p & 1 ) - a *= b; - b *= b; - p >>= 1; - } - - a *= b; - dst[i] = saturate_cast(a); - } -} - - -static void iPow8u(const uchar* src, uchar* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow8s(const schar* src, schar* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow16u(const ushort* src, ushort* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow16s(const short* src, short* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow32s(const int* src, int* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow32f(const float* src, float* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - -static void iPow64f(const double* src, double* dst, int len, int power) -{ - iPow_(src, dst, len, power); -} - - -typedef void (*IPowFunc)( const uchar* src, uchar* dst, int len, int power ); - -static IPowFunc ipowTab[] = -{ - (IPowFunc)iPow8u, (IPowFunc)iPow8s, (IPowFunc)iPow16u, (IPowFunc)iPow16s, - (IPowFunc)iPow32s, (IPowFunc)iPow32f, (IPowFunc)iPow64f, 0 -}; - - -void pow( InputArray _src, double power, OutputArray _dst ) -{ - Mat src = _src.getMat(); - int type = src.type(), depth = src.depth(), cn = src.channels(); - - _dst.create( src.dims, src.size, type ); - Mat dst = _dst.getMat(); - - int ipower = cvRound(power); - bool is_ipower = false; - - if( fabs(ipower - power) < DBL_EPSILON ) - { - if( ipower < 0 ) - { - divide( 1., src, dst ); - if( ipower == -1 ) - return; - ipower = -ipower; - src = dst; - } - - switch( ipower ) - { - case 0: - dst = Scalar::all(1); - return; - case 1: - src.copyTo(dst); - return; - case 2: - multiply(src, src, dst); - return; - default: - is_ipower = true; - } - } - else - CV_Assert( depth == CV_32F || depth == CV_64F ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int len = (int)(it.size*cn); - - if( is_ipower ) - { - IPowFunc func = ipowTab[depth]; - CV_Assert( func != 0 ); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], ptrs[1], len, ipower ); - } - else if( fabs(fabs(power) - 0.5) < DBL_EPSILON ) - { - MathFunc func = power < 0 ? - (depth == CV_32F ? (MathFunc)InvSqrt_32f : (MathFunc)InvSqrt_64f) : - (depth == CV_32F ? (MathFunc)Sqrt_32f : (MathFunc)Sqrt_64f); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], ptrs[1], len ); - } - else - { - int j, k, blockSize = std::min(len, ((BLOCK_SIZE + cn-1)/cn)*cn); - size_t esz1 = src.elemSize1(); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < len; j += blockSize ) - { - int bsz = std::min(len - j, blockSize); - if( depth == CV_32F ) - { - const float* x = (const float*)ptrs[0]; - float* y = (float*)ptrs[1]; - - Log_32f(x, y, bsz); - for( k = 0; k < bsz; k++ ) - y[k] = (float)(y[k]*power); - Exp_32f(y, y, bsz); - } - else - { - const double* x = (const double*)ptrs[0]; - double* y = (double*)ptrs[1]; - - Log_64f(x, y, bsz); - for( k = 0; k < bsz; k++ ) - y[k] *= power; - Exp_64f(y, y, bsz); - } - ptrs[0] += bsz*esz1; - ptrs[1] += bsz*esz1; - } - } - } -} - -void sqrt(InputArray a, OutputArray b) -{ - pow(a, 0.5, b); -} - -/************************** CheckArray for NaN's, Inf's *********************************/ - -template struct mat_type_assotiations{}; - -template<> struct mat_type_assotiations -{ - typedef unsigned char type; - static const type min_allowable = 0x0; - static const type max_allowable = 0xFF; -}; - -template<> struct mat_type_assotiations -{ - typedef signed char type; - static const type min_allowable = SCHAR_MIN; - static const type max_allowable = SCHAR_MAX; -}; - -template<> struct mat_type_assotiations -{ - typedef unsigned short type; - static const type min_allowable = 0x0; - static const type max_allowable = USHRT_MAX; -}; -template<> struct mat_type_assotiations -{ - typedef signed short type; - static const type min_allowable = SHRT_MIN; - static const type max_allowable = SHRT_MAX; -}; - -template<> struct mat_type_assotiations -{ - typedef int type; - static const type min_allowable = (-INT_MAX - 1); - static const type max_allowable = INT_MAX; -}; - -// inclusive maxVal !!! -template -bool checkIntegerRange(cv::Mat src, Point& bad_pt, int minVal, int maxVal, double& bad_value) -{ - typedef mat_type_assotiations type_ass; - - if (minVal < type_ass::min_allowable && maxVal > type_ass::max_allowable) - { - return true; - } - else if (minVal > type_ass::max_allowable || maxVal < type_ass::min_allowable || maxVal < minVal) - { - bad_pt = cv::Point(0,0); - return false; - } - cv::Mat as_one_channel = src.reshape(1,0); - - for (int j = 0; j < as_one_channel.rows; ++j) - for (int i = 0; i < as_one_channel.cols; ++i) - { - if (as_one_channel.at(j ,i) < minVal || as_one_channel.at(j ,i) > maxVal) - { - bad_pt.y = j ; - bad_pt.x = i % src.channels(); - bad_value = as_one_channel.at(j ,i); - return false; - } - } - bad_value = 0.0; - - return true; -} - -typedef bool (*check_range_function)(cv::Mat src, Point& bad_pt, int minVal, int maxVal, double& bad_value); - -check_range_function check_range_functions[] = -{ - &checkIntegerRange, - &checkIntegerRange, - &checkIntegerRange, - &checkIntegerRange, - &checkIntegerRange -}; - -bool checkRange(InputArray _src, bool quiet, Point* pt, double minVal, double maxVal) -{ - Mat src = _src.getMat(); - - if ( src.dims > 2 ) - { - const Mat* arrays[] = {&src, 0}; - Mat planes[1]; - NAryMatIterator it(arrays, planes); - - for ( size_t i = 0; i < it.nplanes; i++, ++it ) - { - if (!checkRange( it.planes[0], quiet, pt, minVal, maxVal )) - { - // todo: set index properly - return false; - } - } - return true; - } - - int depth = src.depth(); - Point badPt(-1, -1); - double badValue = 0; - - if (depth < CV_32F) - { - // see "Bug #1784" - int minVali = minVal<(-INT_MAX - 1) ? (-INT_MAX - 1) : cvFloor(minVal); - int maxVali = maxVal>INT_MAX ? INT_MAX : cvCeil(maxVal) - 1; // checkIntegerRang() use inclusive maxVal - - (check_range_functions[depth])(src, badPt, minVali, maxVali, badValue); - } - else - { - int i, loc = 0; - Size size = getContinuousSize( src, src.channels() ); - - if( depth == CV_32F ) - { - Cv32suf a, b; - int ia, ib; - const int* isrc = (const int*)src.data; - size_t step = src.step/sizeof(isrc[0]); - - a.f = (float)std::max(minVal, (double)-FLT_MAX); - b.f = (float)std::min(maxVal, (double)FLT_MAX); - - ia = CV_TOGGLE_FLT(a.i); - ib = CV_TOGGLE_FLT(b.i); - - for( ; badPt.x < 0 && size.height--; loc += size.width, isrc += step ) - { - for( i = 0; i < size.width; i++ ) - { - int val = isrc[i]; - val = CV_TOGGLE_FLT(val); - - if( val < ia || val >= ib ) - { - badPt = Point((loc + i) % src.cols, (loc + i) / src.cols); - badValue = ((const float*)isrc)[i]; - break; - } - } - } - } - else - { - Cv64suf a, b; - int64 ia, ib; - const int64* isrc = (const int64*)src.data; - size_t step = src.step/sizeof(isrc[0]); - - a.f = minVal; - b.f = maxVal; - - ia = CV_TOGGLE_DBL(a.i); - ib = CV_TOGGLE_DBL(b.i); - - for( ; badPt.x < 0 && size.height--; loc += size.width, isrc += step ) - { - for( i = 0; i < size.width; i++ ) - { - int64 val = isrc[i]; - val = CV_TOGGLE_DBL(val); - - if( val < ia || val >= ib ) - { - badPt = Point((loc + i) % src.cols, (loc + i) / src.cols); - badValue = ((const double*)isrc)[i]; - break; - } - } - } - } - } - - if( badPt.x >= 0 ) - { - if( pt ) - *pt = badPt; - if( !quiet ) - CV_Error_( CV_StsOutOfRange, - ("the value at (%d, %d)=%g is out of range", badPt.x, badPt.y, badValue)); - } - return badPt.x < 0; -} - - -void patchNaNs( InputOutputArray _a, double _val ) -{ - Mat a = _a.getMat(); - CV_Assert( a.depth() == CV_32F ); - - const Mat* arrays[] = {&a, 0}; - int* ptrs[1]; - NAryMatIterator it(arrays, (uchar**)ptrs); - size_t len = it.size*a.channels(); - Cv32suf val; - val.f = (float)_val; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - int* tptr = ptrs[0]; - for( size_t j = 0; j < len; j++ ) - if( (tptr[j] & 0x7fffffff) > 0x7f800000 ) - tptr[j] = val.i; - } -} - - -void exp(const float* src, float* dst, int n) -{ - Exp_32f(src, dst, n); -} - -void log(const float* src, float* dst, int n) -{ - Log_32f(src, dst, n); -} - -void fastAtan2(const float* y, const float* x, float* dst, int n, bool angleInDegrees) -{ - FastAtan2_32f(y, x, dst, n, angleInDegrees); -} - -void magnitude(const float* x, const float* y, float* dst, int n) -{ - Magnitude_32f(x, y, dst, n); -} - -} - -CV_IMPL float cvCbrt(float value) { return cv::cubeRoot(value); } -CV_IMPL float cvFastArctan(float y, float x) { return cv::fastAtan2(y, x); } - -CV_IMPL void -cvCartToPolar( const CvArr* xarr, const CvArr* yarr, - CvArr* magarr, CvArr* anglearr, - int angle_in_degrees ) -{ - cv::Mat X = cv::cvarrToMat(xarr), Y = cv::cvarrToMat(yarr), Mag, Angle; - if( magarr ) - { - Mag = cv::cvarrToMat(magarr); - CV_Assert( Mag.size() == X.size() && Mag.type() == X.type() ); - } - if( anglearr ) - { - Angle = cv::cvarrToMat(anglearr); - CV_Assert( Angle.size() == X.size() && Angle.type() == X.type() ); - } - if( magarr ) - { - if( anglearr ) - cv::cartToPolar( X, Y, Mag, Angle, angle_in_degrees != 0 ); - else - cv::magnitude( X, Y, Mag ); - } - else - cv::phase( X, Y, Angle, angle_in_degrees != 0 ); -} - -CV_IMPL void -cvPolarToCart( const CvArr* magarr, const CvArr* anglearr, - CvArr* xarr, CvArr* yarr, int angle_in_degrees ) -{ - cv::Mat X, Y, Angle = cv::cvarrToMat(anglearr), Mag; - if( magarr ) - { - Mag = cv::cvarrToMat(magarr); - CV_Assert( Mag.size() == Angle.size() && Mag.type() == Angle.type() ); - } - if( xarr ) - { - X = cv::cvarrToMat(xarr); - CV_Assert( X.size() == Angle.size() && X.type() == Angle.type() ); - } - if( yarr ) - { - Y = cv::cvarrToMat(yarr); - CV_Assert( Y.size() == Angle.size() && Y.type() == Angle.type() ); - } - - cv::polarToCart( Mag, Angle, X, Y, angle_in_degrees != 0 ); -} - -CV_IMPL void cvExp( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.type() == dst.type() && src.size == dst.size ); - cv::exp( src, dst ); -} - -CV_IMPL void cvLog( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.type() == dst.type() && src.size == dst.size ); - cv::log( src, dst ); -} - -CV_IMPL void cvPow( const CvArr* srcarr, CvArr* dstarr, double power ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.type() == dst.type() && src.size == dst.size ); - cv::pow( src, power, dst ); -} - -CV_IMPL int cvCheckArr( const CvArr* arr, int flags, - double minVal, double maxVal ) -{ - if( (flags & CV_CHECK_RANGE) == 0 ) - minVal = -DBL_MAX, maxVal = DBL_MAX; - return cv::checkRange(cv::cvarrToMat(arr), (flags & CV_CHECK_QUIET) != 0, 0, minVal, maxVal ); -} - - -/* - Finds real roots of cubic, quadratic or linear equation. - The original code has been taken from Ken Turkowski web page - (http://www.worldserver.com/turk/opensource/) and adopted for OpenCV. - Here is the copyright notice. - - ----------------------------------------------------------------------- - Copyright (C) 1978-1999 Ken Turkowski. - - All rights reserved. - - Warranty Information - Even though I have reviewed this software, I make no warranty - or representation, either express or implied, with respect to this - software, its quality, accuracy, merchantability, or fitness for a - particular purpose. As a result, this software is provided "as is," - and you, its user, are assuming the entire risk as to its quality - and accuracy. - - This code may be used and freely distributed as long as it includes - this copyright notice and the above warranty information. - ----------------------------------------------------------------------- -*/ - -int cv::solveCubic( InputArray _coeffs, OutputArray _roots ) -{ - const int n0 = 3; - Mat coeffs = _coeffs.getMat(); - int ctype = coeffs.type(); - - CV_Assert( ctype == CV_32F || ctype == CV_64F ); - CV_Assert( (coeffs.size() == Size(n0, 1) || - coeffs.size() == Size(n0+1, 1) || - coeffs.size() == Size(1, n0) || - coeffs.size() == Size(1, n0+1)) ); - - _roots.create(n0, 1, ctype, -1, true, DEPTH_MASK_FLT); - Mat roots = _roots.getMat(); - - int i = -1, n = 0; - double a0 = 1., a1, a2, a3; - double x0 = 0., x1 = 0., x2 = 0.; - int ncoeffs = coeffs.rows + coeffs.cols - 1; - - if( ctype == CV_32FC1 ) - { - if( ncoeffs == 4 ) - a0 = coeffs.at(++i); - - a1 = coeffs.at(i+1); - a2 = coeffs.at(i+2); - a3 = coeffs.at(i+3); - } - else - { - if( ncoeffs == 4 ) - a0 = coeffs.at(++i); - - a1 = coeffs.at(i+1); - a2 = coeffs.at(i+2); - a3 = coeffs.at(i+3); - } - - if( a0 == 0 ) - { - if( a1 == 0 ) - { - if( a2 == 0 ) - n = a3 == 0 ? -1 : 0; - else - { - // linear equation - x0 = -a3/a2; - n = 1; - } - } - else - { - // quadratic equation - double d = a2*a2 - 4*a1*a3; - if( d >= 0 ) - { - d = sqrt(d); - double q1 = (-a2 + d) * 0.5; - double q2 = (a2 + d) * -0.5; - if( fabs(q1) > fabs(q2) ) - { - x0 = q1 / a1; - x1 = a3 / q1; - } - else - { - x0 = q2 / a1; - x1 = a3 / q2; - } - n = d > 0 ? 2 : 1; - } - } - } - else - { - a0 = 1./a0; - a1 *= a0; - a2 *= a0; - a3 *= a0; - - double Q = (a1 * a1 - 3 * a2) * (1./9); - double R = (2 * a1 * a1 * a1 - 9 * a1 * a2 + 27 * a3) * (1./54); - double Qcubed = Q * Q * Q; - double d = Qcubed - R * R; - - if( d >= 0 ) - { - double theta = acos(R / sqrt(Qcubed)); - double sqrtQ = sqrt(Q); - double t0 = -2 * sqrtQ; - double t1 = theta * (1./3); - double t2 = a1 * (1./3); - x0 = t0 * cos(t1) - t2; - x1 = t0 * cos(t1 + (2.*CV_PI/3)) - t2; - x2 = t0 * cos(t1 + (4.*CV_PI/3)) - t2; - n = 3; - } - else - { - double e; - d = sqrt(-d); - e = pow(d + fabs(R), 0.333333333333); - if( R > 0 ) - e = -e; - x0 = (e + Q / e) - a1 * (1./3); - n = 1; - } - } - - if( roots.type() == CV_32FC1 ) - { - roots.at(0) = (float)x0; - roots.at(1) = (float)x1; - roots.at(2) = (float)x2; - } - else - { - roots.at(0) = x0; - roots.at(1) = x1; - roots.at(2) = x2; - } - - return n; -} - -/* finds complex roots of a polynomial using Durand-Kerner method: - http://en.wikipedia.org/wiki/Durand%E2%80%93Kerner_method */ -double cv::solvePoly( InputArray _coeffs0, OutputArray _roots0, int maxIters ) -{ - typedef Complex C; - - double maxDiff = 0; - int iter, i, j; - Mat coeffs0 = _coeffs0.getMat(); - int ctype = _coeffs0.type(); - int cdepth = CV_MAT_DEPTH(ctype); - - CV_Assert( CV_MAT_DEPTH(ctype) >= CV_32F && CV_MAT_CN(ctype) <= 2 ); - CV_Assert( coeffs0.rows == 1 || coeffs0.cols == 1 ); - - int n = coeffs0.cols + coeffs0.rows - 2; - - _roots0.create(n, 1, CV_MAKETYPE(cdepth, 2), -1, true, DEPTH_MASK_FLT); - Mat roots0 = _roots0.getMat(); - - AutoBuffer buf(n*2+2); - C *coeffs = buf, *roots = coeffs + n + 1; - Mat coeffs1(coeffs0.size(), CV_MAKETYPE(CV_64F, coeffs0.channels()), coeffs0.channels() == 2 ? coeffs : roots); - coeffs0.convertTo(coeffs1, coeffs1.type()); - if( coeffs0.channels() == 1 ) - { - const double* rcoeffs = (const double*)roots; - for( i = 0; i <= n; i++ ) - coeffs[i] = C(rcoeffs[i], 0); - } - - C p(1, 0), r(1, 1); - - for( i = 0; i < n; i++ ) - { - roots[i] = p; - p = p * r; - } - - maxIters = maxIters <= 0 ? 1000 : maxIters; - for( iter = 0; iter < maxIters; iter++ ) - { - maxDiff = 0; - for( i = 0; i < n; i++ ) - { - p = roots[i]; - C num = coeffs[n], denom = coeffs[n]; - for( j = 0; j < n; j++ ) - { - num = num*p + coeffs[n-j-1]; - if( j != i ) denom = denom * (p - roots[j]); - } - num /= denom; - roots[i] = p - num; - maxDiff = max(maxDiff, abs(num)); - } - if( maxDiff <= 0 ) - break; - } - - if( coeffs0.channels() == 1 ) - { - const double verySmallEps = 1e-100; - for( i = 0; i < n; i++ ) - if( fabs(roots[i].im) < verySmallEps ) - roots[i].im = 0; - } - - Mat(roots0.size(), CV_64FC2, roots).convertTo(roots0, roots0.type()); - return maxDiff; -} - - -CV_IMPL int -cvSolveCubic( const CvMat* coeffs, CvMat* roots ) -{ - cv::Mat _coeffs = cv::cvarrToMat(coeffs), _roots = cv::cvarrToMat(roots), _roots0 = _roots; - int nroots = cv::solveCubic(_coeffs, _roots); - CV_Assert( _roots.data == _roots0.data ); // check that the array of roots was not reallocated - return nroots; -} - - -void cvSolvePoly(const CvMat* a, CvMat *r, int maxiter, int) -{ - cv::Mat _a = cv::cvarrToMat(a), _r = cv::cvarrToMat(r), _r0 = r; - cv::solvePoly(_a, _r, maxiter); - CV_Assert( _r.data == _r0.data ); // check that the array of roots was not reallocated -} - - -/* End of file. */ diff --git a/modules/core/src/matmul.cpp b/modules/core/src/matmul.cpp deleted file mode 100644 index 19443cb..0000000 --- a/modules/core/src/matmul.cpp +++ /dev/null @@ -1,3359 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_IPP -#include "ippversion.h" -#endif - -namespace cv -{ - -/****************************************************************************************\ -* GEMM * -\****************************************************************************************/ - -static void -GEMM_CopyBlock( const uchar* src, size_t src_step, - uchar* dst, size_t dst_step, - Size size, size_t pix_size ) -{ - int j; - size.width *= (int)(pix_size / sizeof(int)); - - for( ; size.height--; src += src_step, dst += dst_step ) - { - j=0; - #if CV_ENABLE_UNROLLED - for( ; j <= size.width - 4; j += 4 ) - { - int t0 = ((const int*)src)[j]; - int t1 = ((const int*)src)[j+1]; - ((int*)dst)[j] = t0; - ((int*)dst)[j+1] = t1; - t0 = ((const int*)src)[j+2]; - t1 = ((const int*)src)[j+3]; - ((int*)dst)[j+2] = t0; - ((int*)dst)[j+3] = t1; - } - #endif - for( ; j < size.width; j++ ) - ((int*)dst)[j] = ((const int*)src)[j]; - } -} - - -static void -GEMM_TransposeBlock( const uchar* src, size_t src_step, - uchar* dst, size_t dst_step, - Size size, size_t pix_size ) -{ - int i, j; - for( i = 0; i < size.width; i++, dst += dst_step, src += pix_size ) - { - const uchar* _src = src; - switch( pix_size ) - { - case sizeof(int): - for( j = 0; j < size.height; j++, _src += src_step ) - ((int*)dst)[j] = ((int*)_src)[0]; - break; - case sizeof(int)*2: - for( j = 0; j < size.height*2; j += 2, _src += src_step ) - { - int t0 = ((int*)_src)[0]; - int t1 = ((int*)_src)[1]; - ((int*)dst)[j] = t0; - ((int*)dst)[j+1] = t1; - } - break; - case sizeof(int)*4: - for( j = 0; j < size.height*4; j += 4, _src += src_step ) - { - int t0 = ((int*)_src)[0]; - int t1 = ((int*)_src)[1]; - ((int*)dst)[j] = t0; - ((int*)dst)[j+1] = t1; - t0 = ((int*)_src)[2]; - t1 = ((int*)_src)[3]; - ((int*)dst)[j+2] = t0; - ((int*)dst)[j+3] = t1; - } - break; - default: - assert(0); - return; - } - } -} - - -template static void -GEMMSingleMul( const T* a_data, size_t a_step, - const T* b_data, size_t b_step, - const T* c_data, size_t c_step, - T* d_data, size_t d_step, - Size a_size, Size d_size, - double alpha, double beta, int flags ) -{ - int i, j, k, n = a_size.width, m = d_size.width, drows = d_size.height; - const T *_a_data = a_data, *_b_data = b_data, *_c_data = c_data; - cv::AutoBuffer _a_buf; - T* a_buf = 0; - size_t a_step0, a_step1, c_step0, c_step1, t_step; - - a_step /= sizeof(a_data[0]); - b_step /= sizeof(b_data[0]); - c_step /= sizeof(c_data[0]); - d_step /= sizeof(d_data[0]); - a_step0 = a_step; - a_step1 = 1; - - if( !c_data ) - c_step0 = c_step1 = 0; - else if( !(flags & GEMM_3_T) ) - c_step0 = c_step, c_step1 = 1; - else - c_step0 = 1, c_step1 = c_step; - - if( flags & GEMM_1_T ) - { - CV_SWAP( a_step0, a_step1, t_step ); - n = a_size.height; - if( a_step > 1 && n > 1 ) - { - _a_buf.allocate(n); - a_buf = _a_buf; - } - } - - if( n == 1 ) /* external product */ - { - cv::AutoBuffer _b_buf; - T* b_buf = 0; - - if( a_step > 1 && a_size.height > 1 ) - { - _a_buf.allocate(drows); - a_buf = _a_buf; - for( k = 0; k < drows; k++ ) - a_buf[k] = a_data[a_step*k]; - a_data = a_buf; - } - - if( b_step > 1 ) - { - _b_buf.allocate(d_size.width); - b_buf = _b_buf; - for( j = 0; j < d_size.width; j++ ) - b_buf[j] = b_data[j*b_step]; - b_data = b_buf; - } - - for( i = 0; i < drows; i++, _c_data += c_step0, d_data += d_step ) - { - WT al = WT(a_data[i])*alpha; - c_data = _c_data; - for( j = 0; j <= d_size.width - 2; j += 2, c_data += 2*c_step1 ) - { - WT s0 = al*WT(b_data[j]); - WT s1 = al*WT(b_data[j+1]); - if( !c_data ) - { - d_data[j] = T(s0); - d_data[j+1] = T(s1); - } - else - { - d_data[j] = T(s0 + WT(c_data[0])*beta); - d_data[j+1] = T(s1 + WT(c_data[c_step1])*beta); - } - } - - for( ; j < d_size.width; j++, c_data += c_step1 ) - { - WT s0 = al*WT(b_data[j]); - if( !c_data ) - d_data[j] = T(s0); - else - d_data[j] = T(s0 + WT(c_data[0])*beta); - } - } - } - else if( flags & GEMM_2_T ) /* A * Bt */ - { - for( i = 0; i < drows; i++, _a_data += a_step0, _c_data += c_step0, d_data += d_step ) - { - a_data = _a_data; - b_data = _b_data; - c_data = _c_data; - - if( a_buf ) - { - for( k = 0; k < n; k++ ) - a_buf[k] = a_data[a_step1*k]; - a_data = a_buf; - } - - for( j = 0; j < d_size.width; j++, b_data += b_step, - c_data += c_step1 ) - { - WT s0(0), s1(0), s2(0), s3(0); - k = 0; - #if CV_ENABLE_UNROLLED - for( ; k <= n - 4; k += 4 ) - { - s0 += WT(a_data[k])*WT(b_data[k]); - s1 += WT(a_data[k+1])*WT(b_data[k+1]); - s2 += WT(a_data[k+2])*WT(b_data[k+2]); - s3 += WT(a_data[k+3])*WT(b_data[k+3]); - } - #endif - for( ; k < n; k++ ) - s0 += WT(a_data[k])*WT(b_data[k]); - s0 = (s0+s1+s2+s3)*alpha; - - if( !c_data ) - d_data[j] = T(s0); - else - d_data[j] = T(s0 + WT(c_data[0])*beta); - } - } - } - else if( d_size.width*sizeof(d_data[0]) <= 1600 ) - { - for( i = 0; i < drows; i++, _a_data += a_step0, - _c_data += c_step0, - d_data += d_step ) - { - a_data = _a_data, c_data = _c_data; - - if( a_buf ) - { - for( k = 0; k < n; k++ ) - a_buf[k] = a_data[a_step1*k]; - a_data = a_buf; - } - - for( j = 0; j <= m - 4; j += 4, c_data += 4*c_step1 ) - { - const T* b = _b_data + j; - WT s0(0), s1(0), s2(0), s3(0); - - for( k = 0; k < n; k++, b += b_step ) - { - WT a(a_data[k]); - s0 += a * WT(b[0]); s1 += a * WT(b[1]); - s2 += a * WT(b[2]); s3 += a * WT(b[3]); - } - - if( !c_data ) - { - d_data[j] = T(s0*alpha); - d_data[j+1] = T(s1*alpha); - d_data[j+2] = T(s2*alpha); - d_data[j+3] = T(s3*alpha); - } - else - { - s0 = s0*alpha; s1 = s1*alpha; - s2 = s2*alpha; s3 = s3*alpha; - d_data[j] = T(s0 + WT(c_data[0])*beta); - d_data[j+1] = T(s1 + WT(c_data[c_step1])*beta); - d_data[j+2] = T(s2 + WT(c_data[c_step1*2])*beta); - d_data[j+3] = T(s3 + WT(c_data[c_step1*3])*beta); - } - } - - for( ; j < m; j++, c_data += c_step1 ) - { - const T* b = _b_data + j; - WT s0(0); - - for( k = 0; k < n; k++, b += b_step ) - s0 += WT(a_data[k]) * WT(b[0]); - - s0 = s0*alpha; - if( !c_data ) - d_data[j] = T(s0); - else - d_data[j] = T(s0 + WT(c_data[0])*beta); - } - } - } - else - { - cv::AutoBuffer _d_buf(m); - WT* d_buf = _d_buf; - - for( i = 0; i < drows; i++, _a_data += a_step0, _c_data += c_step0, d_data += d_step ) - { - a_data = _a_data; - b_data = _b_data; - c_data = _c_data; - - if( a_buf ) - { - for( k = 0; k < n; k++ ) - a_buf[k] = _a_data[a_step1*k]; - a_data = a_buf; - } - - for( j = 0; j < m; j++ ) - d_buf[j] = WT(0); - - for( k = 0; k < n; k++, b_data += b_step ) - { - WT al(a_data[k]); - j=0; - #if CV_ENABLE_UNROLLED - for(; j <= m - 4; j += 4 ) - { - WT t0 = d_buf[j] + WT(b_data[j])*al; - WT t1 = d_buf[j+1] + WT(b_data[j+1])*al; - d_buf[j] = t0; - d_buf[j+1] = t1; - t0 = d_buf[j+2] + WT(b_data[j+2])*al; - t1 = d_buf[j+3] + WT(b_data[j+3])*al; - d_buf[j+2] = t0; - d_buf[j+3] = t1; - } - #endif - for( ; j < m; j++ ) - d_buf[j] += WT(b_data[j])*al; - } - - if( !c_data ) - for( j = 0; j < m; j++ ) - d_data[j] = T(d_buf[j]*alpha); - else - for( j = 0; j < m; j++, c_data += c_step1 ) - { - WT t = d_buf[j]*alpha; - d_data[j] = T(t + WT(c_data[0])*beta); - } - } - } -} - - -template static void -GEMMBlockMul( const T* a_data, size_t a_step, - const T* b_data, size_t b_step, - WT* d_data, size_t d_step, - Size a_size, Size d_size, int flags ) -{ - int i, j, k, n = a_size.width, m = d_size.width; - const T *_a_data = a_data, *_b_data = b_data; - cv::AutoBuffer _a_buf; - T* a_buf = 0; - size_t a_step0, a_step1, t_step; - int do_acc = flags & 16; - - a_step /= sizeof(a_data[0]); - b_step /= sizeof(b_data[0]); - d_step /= sizeof(d_data[0]); - - a_step0 = a_step; - a_step1 = 1; - - if( flags & GEMM_1_T ) - { - CV_SWAP( a_step0, a_step1, t_step ); - n = a_size.height; - _a_buf.allocate(n); - a_buf = _a_buf; - } - - if( flags & GEMM_2_T ) - { - /* second operand is transposed */ - for( i = 0; i < d_size.height; i++, _a_data += a_step0, d_data += d_step ) - { - a_data = _a_data; b_data = _b_data; - - if( a_buf ) - { - for( k = 0; k < n; k++ ) - a_buf[k] = a_data[a_step1*k]; - a_data = a_buf; - } - - for( j = 0; j < d_size.width; j++, b_data += b_step ) - { - WT s0 = do_acc ? d_data[j]:WT(0), s1(0); - for( k = 0; k <= n - 2; k += 2 ) - { - s0 += WT(a_data[k])*WT(b_data[k]); - s1 += WT(a_data[k+1])*WT(b_data[k+1]); - } - - for( ; k < n; k++ ) - s0 += WT(a_data[k])*WT(b_data[k]); - - d_data[j] = s0 + s1; - } - } - } - else - { - for( i = 0; i < d_size.height; i++, _a_data += a_step0, d_data += d_step ) - { - a_data = _a_data, b_data = _b_data; - - if( a_buf ) - { - for( k = 0; k < n; k++ ) - a_buf[k] = a_data[a_step1*k]; - a_data = a_buf; - } - - for( j = 0; j <= m - 4; j += 4 ) - { - WT s0, s1, s2, s3; - const T* b = b_data + j; - - if( do_acc ) - { - s0 = d_data[j]; s1 = d_data[j+1]; - s2 = d_data[j+2]; s3 = d_data[j+3]; - } - else - s0 = s1 = s2 = s3 = WT(0); - - for( k = 0; k < n; k++, b += b_step ) - { - WT a(a_data[k]); - s0 += a * WT(b[0]); s1 += a * WT(b[1]); - s2 += a * WT(b[2]); s3 += a * WT(b[3]); - } - - d_data[j] = s0; d_data[j+1] = s1; - d_data[j+2] = s2; d_data[j+3] = s3; - } - - for( ; j < m; j++ ) - { - const T* b = b_data + j; - WT s0 = do_acc ? d_data[j] : WT(0); - - for( k = 0; k < n; k++, b += b_step ) - s0 += WT(a_data[k]) * WT(b[0]); - - d_data[j] = s0; - } - } - } -} - - -template static void -GEMMStore( const T* c_data, size_t c_step, - const WT* d_buf, size_t d_buf_step, - T* d_data, size_t d_step, Size d_size, - double alpha, double beta, int flags ) -{ - const T* _c_data = c_data; - int j; - size_t c_step0, c_step1; - - c_step /= sizeof(c_data[0]); - d_buf_step /= sizeof(d_buf[0]); - d_step /= sizeof(d_data[0]); - - if( !c_data ) - c_step0 = c_step1 = 0; - else if( !(flags & GEMM_3_T) ) - c_step0 = c_step, c_step1 = 1; - else - c_step0 = 1, c_step1 = c_step; - - for( ; d_size.height--; _c_data += c_step0, d_buf += d_buf_step, d_data += d_step ) - { - if( _c_data ) - { - c_data = _c_data; - j=0; - #if CV_ENABLE_UNROLLED - for(; j <= d_size.width - 4; j += 4, c_data += 4*c_step1 ) - { - WT t0 = alpha*d_buf[j]; - WT t1 = alpha*d_buf[j+1]; - t0 += beta*WT(c_data[0]); - t1 += beta*WT(c_data[c_step1]); - d_data[j] = T(t0); - d_data[j+1] = T(t1); - t0 = alpha*d_buf[j+2]; - t1 = alpha*d_buf[j+3]; - t0 += beta*WT(c_data[c_step1*2]); - t1 += beta*WT(c_data[c_step1*3]); - d_data[j+2] = T(t0); - d_data[j+3] = T(t1); - } - #endif - for( ; j < d_size.width; j++, c_data += c_step1 ) - { - WT t0 = alpha*d_buf[j]; - d_data[j] = T(t0 + WT(c_data[0])*beta); - } - } - else - { - j = 0; - #if CV_ENABLE_UNROLLED - for( ; j <= d_size.width - 4; j += 4 ) - { - WT t0 = alpha*d_buf[j]; - WT t1 = alpha*d_buf[j+1]; - d_data[j] = T(t0); - d_data[j+1] = T(t1); - t0 = alpha*d_buf[j+2]; - t1 = alpha*d_buf[j+3]; - d_data[j+2] = T(t0); - d_data[j+3] = T(t1); - } - #endif - for( ; j < d_size.width; j++ ) - d_data[j] = T(alpha*d_buf[j]); - } - } -} - - -typedef void (*GEMMSingleMulFunc)( const void* src1, size_t step1, - const void* src2, size_t step2, const void* src3, size_t step3, - void* dst, size_t dststep, Size srcsize, Size dstsize, - double alpha, double beta, int flags ); - -typedef void (*GEMMBlockMulFunc)( const void* src1, size_t step1, - const void* src2, size_t step2, void* dst, size_t dststep, - Size srcsize, Size dstsize, int flags ); - -typedef void (*GEMMStoreFunc)( const void* src1, size_t step1, - const void* src2, size_t step2, void* dst, size_t dststep, - Size dstsize, double alpha, double beta, int flags ); - -static void GEMMSingleMul_32f( const float* a_data, size_t a_step, - const float* b_data, size_t b_step, - const float* c_data, size_t c_step, - float* d_data, size_t d_step, - Size a_size, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMSingleMul(a_data, a_step, b_data, b_step, c_data, - c_step, d_data, d_step, a_size, d_size, - alpha, beta, flags); -} - -static void GEMMSingleMul_64f( const double* a_data, size_t a_step, - const double* b_data, size_t b_step, - const double* c_data, size_t c_step, - double* d_data, size_t d_step, - Size a_size, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMSingleMul(a_data, a_step, b_data, b_step, c_data, - c_step, d_data, d_step, a_size, d_size, - alpha, beta, flags); -} - - -static void GEMMSingleMul_32fc( const Complexf* a_data, size_t a_step, - const Complexf* b_data, size_t b_step, - const Complexf* c_data, size_t c_step, - Complexf* d_data, size_t d_step, - Size a_size, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMSingleMul(a_data, a_step, b_data, b_step, c_data, - c_step, d_data, d_step, a_size, d_size, - alpha, beta, flags); -} - -static void GEMMSingleMul_64fc( const Complexd* a_data, size_t a_step, - const Complexd* b_data, size_t b_step, - const Complexd* c_data, size_t c_step, - Complexd* d_data, size_t d_step, - Size a_size, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMSingleMul(a_data, a_step, b_data, b_step, c_data, - c_step, d_data, d_step, a_size, d_size, - alpha, beta, flags); -} - -static void GEMMBlockMul_32f( const float* a_data, size_t a_step, - const float* b_data, size_t b_step, - double* d_data, size_t d_step, - Size a_size, Size d_size, int flags ) -{ - GEMMBlockMul(a_data, a_step, b_data, b_step, d_data, d_step, a_size, d_size, flags); -} - - -static void GEMMBlockMul_64f( const double* a_data, size_t a_step, - const double* b_data, size_t b_step, - double* d_data, size_t d_step, - Size a_size, Size d_size, int flags ) -{ - GEMMBlockMul(a_data, a_step, b_data, b_step, d_data, d_step, a_size, d_size, flags); -} - - -static void GEMMBlockMul_32fc( const Complexf* a_data, size_t a_step, - const Complexf* b_data, size_t b_step, - Complexd* d_data, size_t d_step, - Size a_size, Size d_size, int flags ) -{ - GEMMBlockMul(a_data, a_step, b_data, b_step, d_data, d_step, a_size, d_size, flags); -} - - -static void GEMMBlockMul_64fc( const Complexd* a_data, size_t a_step, - const Complexd* b_data, size_t b_step, - Complexd* d_data, size_t d_step, - Size a_size, Size d_size, int flags ) -{ - GEMMBlockMul(a_data, a_step, b_data, b_step, d_data, d_step, a_size, d_size, flags); -} - - -static void GEMMStore_32f( const float* c_data, size_t c_step, - const double* d_buf, size_t d_buf_step, - float* d_data, size_t d_step, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMStore(c_data, c_step, d_buf, d_buf_step, d_data, d_step, d_size, alpha, beta, flags); -} - - -static void GEMMStore_64f( const double* c_data, size_t c_step, - const double* d_buf, size_t d_buf_step, - double* d_data, size_t d_step, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMStore(c_data, c_step, d_buf, d_buf_step, d_data, d_step, d_size, alpha, beta, flags); -} - - -static void GEMMStore_32fc( const Complexf* c_data, size_t c_step, - const Complexd* d_buf, size_t d_buf_step, - Complexf* d_data, size_t d_step, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMStore(c_data, c_step, d_buf, d_buf_step, d_data, d_step, d_size, alpha, beta, flags); -} - - -static void GEMMStore_64fc( const Complexd* c_data, size_t c_step, - const Complexd* d_buf, size_t d_buf_step, - Complexd* d_data, size_t d_step, Size d_size, - double alpha, double beta, int flags ) -{ - GEMMStore(c_data, c_step, d_buf, d_buf_step, d_data, d_step, d_size, alpha, beta, flags); -} - -} - -void cv::gemm( InputArray matA, InputArray matB, double alpha, - InputArray matC, double beta, OutputArray _matD, int flags ) -{ - const int block_lin_size = 128; - const int block_size = block_lin_size * block_lin_size; - - static double zero[] = {0,0,0,0}; - static float zerof[] = {0,0,0,0}; - - Mat A = matA.getMat(), B = matB.getMat(), C = beta != 0 ? matC.getMat() : Mat(); - Size a_size = A.size(), d_size; - int i, len = 0, type = A.type(); - - CV_Assert( type == B.type() && (type == CV_32FC1 || type == CV_64FC1 || type == CV_32FC2 || type == CV_64FC2) ); - - switch( flags & (GEMM_1_T|GEMM_2_T) ) - { - case 0: - d_size = Size( B.cols, a_size.height ); - len = B.rows; - CV_Assert( a_size.width == len ); - break; - case 1: - d_size = Size( B.cols, a_size.width ); - len = B.rows; - CV_Assert( a_size.height == len ); - break; - case 2: - d_size = Size( B.rows, a_size.height ); - len = B.cols; - CV_Assert( a_size.width == len ); - break; - case 3: - d_size = Size( B.rows, a_size.width ); - len = B.cols; - CV_Assert( a_size.height == len ); - break; - } - - if( C.data ) - { - CV_Assert( C.type() == type && - (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || - ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height))); - } - - _matD.create( d_size.height, d_size.width, type ); - Mat D = _matD.getMat(); - if( (flags & GEMM_3_T) != 0 && C.data == D.data ) - { - transpose( C, C ); - flags &= ~GEMM_3_T; - } - - if( flags == 0 && 2 <= len && len <= 4 && (len == d_size.width || len == d_size.height) ) - { - if( type == CV_32F ) - { - float* d = (float*)D.data; - const float *a = (const float*)A.data, - *b = (const float*)B.data, - *c = (const float*)C.data; - size_t d_step = D.step/sizeof(d[0]), - a_step = A.step/sizeof(a[0]), - b_step = B.step/sizeof(b[0]), - c_step = C.data ? C.step/sizeof(c[0]) : 0; - - if( !c ) - c = zerof; - - switch( len ) - { - case 2: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step]; - float t1 = a[0]*b[1] + a[1]*b[b_step+1]; - d[0] = (float)(t0*alpha + c[0]*beta); - d[1] = (float)(t1*alpha + c[1]*beta); - } - } - else if( a != d ) - { - int c_step0 = 1; - if( c == zerof ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step]; - float t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step]; - d[0] = (float)(t0*alpha + c[0]*beta); - d[d_step] = (float)(t1*alpha + c[c_step]*beta); - } - } - else - break; - return; - case 3: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2]; - float t1 = a[0]*b[1] + a[1]*b[b_step+1] + a[2]*b[b_step*2+1]; - float t2 = a[0]*b[2] + a[1]*b[b_step+2] + a[2]*b[b_step*2+2]; - d[0] = (float)(t0*alpha + c[0]*beta); - d[1] = (float)(t1*alpha + c[1]*beta); - d[2] = (float)(t2*alpha + c[2]*beta); - } - } - else if( a != d ) - { - int c_step0 = 1; - if( c == zerof ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2]; - float t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step] + a[a_step+2]*b[b_step*2]; - float t2 = a[a_step*2]*b[0] + a[a_step*2+1]*b[b_step] + a[a_step*2+2]*b[b_step*2]; - - d[0] = (float)(t0*alpha + c[0]*beta); - d[d_step] = (float)(t1*alpha + c[c_step]*beta); - d[d_step*2] = (float)(t2*alpha + c[c_step*2]*beta); - } - } - else - break; - return; - case 4: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2] + a[3]*b[b_step*3]; - float t1 = a[0]*b[1] + a[1]*b[b_step+1] + a[2]*b[b_step*2+1] + a[3]*b[b_step*3+1]; - float t2 = a[0]*b[2] + a[1]*b[b_step+2] + a[2]*b[b_step*2+2] + a[3]*b[b_step*3+2]; - float t3 = a[0]*b[3] + a[1]*b[b_step+3] + a[2]*b[b_step*2+3] + a[3]*b[b_step*3+3]; - d[0] = (float)(t0*alpha + c[0]*beta); - d[1] = (float)(t1*alpha + c[1]*beta); - d[2] = (float)(t2*alpha + c[2]*beta); - d[3] = (float)(t3*alpha + c[3]*beta); - } - } - else if( len <= 16 && a != d ) - { - int c_step0 = 1; - if( c == zerof ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - float t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2] + a[3]*b[b_step*3]; - float t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step] + - a[a_step+2]*b[b_step*2] + a[a_step+3]*b[b_step*3]; - float t2 = a[a_step*2]*b[0] + a[a_step*2+1]*b[b_step] + - a[a_step*2+2]*b[b_step*2] + a[a_step*2+3]*b[b_step*3]; - float t3 = a[a_step*3]*b[0] + a[a_step*3+1]*b[b_step] + - a[a_step*3+2]*b[b_step*2] + a[a_step*3+3]*b[b_step*3]; - d[0] = (float)(t0*alpha + c[0]*beta); - d[d_step] = (float)(t1*alpha + c[c_step]*beta); - d[d_step*2] = (float)(t2*alpha + c[c_step*2]*beta); - d[d_step*3] = (float)(t3*alpha + c[c_step*3]*beta); - } - } - else - break; - return; - } - } - - if( type == CV_64F ) - { - double* d = (double*)D.data; - const double *a = (const double*)A.data, - *b = (const double*)B.data, - *c = (const double*)C.data; - size_t d_step = D.step/sizeof(d[0]), - a_step = A.step/sizeof(a[0]), - b_step = B.step/sizeof(b[0]), - c_step = C.data ? C.step/sizeof(c[0]) : 0; - if( !c ) - c = zero; - - switch( len ) - { - case 2: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step]; - double t1 = a[0]*b[1] + a[1]*b[b_step+1]; - d[0] = t0*alpha + c[0]*beta; - d[1] = t1*alpha + c[1]*beta; - } - } - else if( a != d ) - { - int c_step0 = 1; - if( c == zero ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step]; - double t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step]; - d[0] = t0*alpha + c[0]*beta; - d[d_step] = t1*alpha + c[c_step]*beta; - } - } - else - break; - return; - case 3: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2]; - double t1 = a[0]*b[1] + a[1]*b[b_step+1] + a[2]*b[b_step*2+1]; - double t2 = a[0]*b[2] + a[1]*b[b_step+2] + a[2]*b[b_step*2+2]; - d[0] = t0*alpha + c[0]*beta; - d[1] = t1*alpha + c[1]*beta; - d[2] = t2*alpha + c[2]*beta; - } - } - else if( a != d ) - { - int c_step0 = 1; - if( c == zero ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2]; - double t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step] + a[a_step+2]*b[b_step*2]; - double t2 = a[a_step*2]*b[0] + a[a_step*2+1]*b[b_step] + a[a_step*2+2]*b[b_step*2]; - - d[0] = t0*alpha + c[0]*beta; - d[d_step] = t1*alpha + c[c_step]*beta; - d[d_step*2] = t2*alpha + c[c_step*2]*beta; - } - } - else - break; - return; - case 4: - if( len == d_size.width && b != d ) - { - for( i = 0; i < d_size.height; i++, d += d_step, a += a_step, c += c_step ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2] + a[3]*b[b_step*3]; - double t1 = a[0]*b[1] + a[1]*b[b_step+1] + a[2]*b[b_step*2+1] + a[3]*b[b_step*3+1]; - double t2 = a[0]*b[2] + a[1]*b[b_step+2] + a[2]*b[b_step*2+2] + a[3]*b[b_step*3+2]; - double t3 = a[0]*b[3] + a[1]*b[b_step+3] + a[2]*b[b_step*2+3] + a[3]*b[b_step*3+3]; - d[0] = t0*alpha + c[0]*beta; - d[1] = t1*alpha + c[1]*beta; - d[2] = t2*alpha + c[2]*beta; - d[3] = t3*alpha + c[3]*beta; - } - } - else if( d_size.width <= 16 && a != d ) - { - int c_step0 = 1; - if( c == zero ) - { - c_step0 = 0; - c_step = 1; - } - - for( i = 0; i < d_size.width; i++, d++, b++, c += c_step0 ) - { - double t0 = a[0]*b[0] + a[1]*b[b_step] + a[2]*b[b_step*2] + a[3]*b[b_step*3]; - double t1 = a[a_step]*b[0] + a[a_step+1]*b[b_step] + - a[a_step+2]*b[b_step*2] + a[a_step+3]*b[b_step*3]; - double t2 = a[a_step*2]*b[0] + a[a_step*2+1]*b[b_step] + - a[a_step*2+2]*b[b_step*2] + a[a_step*2+3]*b[b_step*3]; - double t3 = a[a_step*3]*b[0] + a[a_step*3+1]*b[b_step] + - a[a_step*3+2]*b[b_step*2] + a[a_step*3+3]*b[b_step*3]; - d[0] = t0*alpha + c[0]*beta; - d[d_step] = t1*alpha + c[c_step]*beta; - d[d_step*2] = t2*alpha + c[c_step*2]*beta; - d[d_step*3] = t3*alpha + c[c_step*3]*beta; - } - } - else - break; - return; - } - } - } - - { - size_t b_step = B.step; - GEMMSingleMulFunc singleMulFunc; - GEMMBlockMulFunc blockMulFunc; - GEMMStoreFunc storeFunc; - Mat *matD = &D, tmat; - const uchar* Cdata = C.data; - size_t Cstep = C.data ? (size_t)C.step : 0; - AutoBuffer buf; - - if( type == CV_32FC1 ) - { - singleMulFunc = (GEMMSingleMulFunc)GEMMSingleMul_32f; - blockMulFunc = (GEMMBlockMulFunc)GEMMBlockMul_32f; - storeFunc = (GEMMStoreFunc)GEMMStore_32f; - } - else if( type == CV_64FC1 ) - { - singleMulFunc = (GEMMSingleMulFunc)GEMMSingleMul_64f; - blockMulFunc = (GEMMBlockMulFunc)GEMMBlockMul_64f; - storeFunc = (GEMMStoreFunc)GEMMStore_64f; - } - else if( type == CV_32FC2 ) - { - singleMulFunc = (GEMMSingleMulFunc)GEMMSingleMul_32fc; - blockMulFunc = (GEMMBlockMulFunc)GEMMBlockMul_32fc; - storeFunc = (GEMMStoreFunc)GEMMStore_32fc; - } - else - { - CV_Assert( type == CV_64FC2 ); - singleMulFunc = (GEMMSingleMulFunc)GEMMSingleMul_64fc; - blockMulFunc = (GEMMBlockMulFunc)GEMMBlockMul_64fc; - storeFunc = (GEMMStoreFunc)GEMMStore_64fc; - } - - if( D.data == A.data || D.data == B.data ) - { - buf.allocate(d_size.width*d_size.height*CV_ELEM_SIZE(type)); - tmat = Mat(d_size.height, d_size.width, type, (uchar*)buf ); - matD = &tmat; - } - - if( (d_size.width == 1 || len == 1) && !(flags & GEMM_2_T) && B.isContinuous() ) - { - b_step = d_size.width == 1 ? 0 : CV_ELEM_SIZE(type); - flags |= GEMM_2_T; - } - - /*if( (d_size.width | d_size.height | len) >= 16 && icvBLAS_GEMM_32f_p != 0 ) - { - blas_func = type == CV_32FC1 ? (icvBLAS_GEMM_32f_t)icvBLAS_GEMM_32f_p : - type == CV_64FC1 ? (icvBLAS_GEMM_32f_t)icvBLAS_GEMM_64f_p : - type == CV_32FC2 ? (icvBLAS_GEMM_32f_t)icvBLAS_GEMM_32fc_p : - type == CV_64FC2 ? (icvBLAS_GEMM_32f_t)icvBLAS_GEMM_64fc_p : 0; - } - - if( blas_func ) - { - const char* transa = flags & GEMM_1_T ? "t" : "n"; - const char* transb = flags & GEMM_2_T ? "t" : "n"; - int lda, ldb, ldd; - - if( C->data.ptr ) - { - if( C->data.ptr != D->data.ptr ) - { - if( !(flags & GEMM_3_T) ) - cvCopy( C, D ); - else - cvTranspose( C, D ); - } - } - - if( CV_MAT_DEPTH(type) == CV_32F ) - { - Complex32f _alpha, _beta; - - lda = A->step/sizeof(float); - ldb = b_step/sizeof(float); - ldd = D->step/sizeof(float); - _alpha.re = (float)alpha; - _alpha.im = 0; - _beta.re = C->data.ptr ? (float)beta : 0; - _beta.im = 0; - if( CV_MAT_CN(type) == 2 ) - lda /= 2, ldb /= 2, ldd /= 2; - - blas_func( transb, transa, &d_size.width, &d_size.height, &len, - &_alpha, B->data.ptr, &ldb, A->data.ptr, &lda, - &_beta, D->data.ptr, &ldd ); - } - else - { - CvComplex64f _alpha, _beta; - - lda = A->step/sizeof(double); - ldb = b_step/sizeof(double); - ldd = D->step/sizeof(double); - _alpha.re = alpha; - _alpha.im = 0; - _beta.re = C->data.ptr ? beta : 0; - _beta.im = 0; - if( CV_MAT_CN(type) == 2 ) - lda /= 2, ldb /= 2, ldd /= 2; - - blas_func( transb, transa, &d_size.width, &d_size.height, &len, - &_alpha, B->data.ptr, &ldb, A->data.ptr, &lda, - &_beta, D->data.ptr, &ldd ); - } - } - else*/ if( ((d_size.height <= block_lin_size/2 || d_size.width <= block_lin_size/2) && - len <= 10000) || len <= 10 || - (d_size.width <= block_lin_size && - d_size.height <= block_lin_size && len <= block_lin_size) ) - { - singleMulFunc( A.data, A.step, B.data, b_step, Cdata, Cstep, - matD->data, matD->step, a_size, d_size, alpha, beta, flags ); - } - else - { - int is_a_t = flags & GEMM_1_T; - int is_b_t = flags & GEMM_2_T; - int elem_size = CV_ELEM_SIZE(type); - int dk0_1, dk0_2; - int a_buf_size = 0, b_buf_size, d_buf_size; - uchar* a_buf = 0; - uchar* b_buf = 0; - uchar* d_buf = 0; - int j, k, di = 0, dj = 0, dk = 0; - int dm0, dn0, dk0; - size_t a_step0, a_step1, b_step0, b_step1, c_step0, c_step1; - int work_elem_size = elem_size << (CV_MAT_DEPTH(type) == CV_32F ? 1 : 0); - - if( !is_a_t ) - a_step0 = A.step, a_step1 = elem_size; - else - a_step0 = elem_size, a_step1 = A.step; - - if( !is_b_t ) - b_step0 = b_step, b_step1 = elem_size; - else - b_step0 = elem_size, b_step1 = b_step; - - if( !C.data ) - { - c_step0 = c_step1 = 0; - flags &= ~GEMM_3_T; - } - else if( !(flags & GEMM_3_T) ) - c_step0 = C.step, c_step1 = elem_size; - else - c_step0 = elem_size, c_step1 = C.step; - - dm0 = std::min( block_lin_size, d_size.height ); - dn0 = std::min( block_lin_size, d_size.width ); - dk0_1 = block_size / dm0; - dk0_2 = block_size / dn0; - dk0 = std::min( dk0_1, dk0_2 ); - dk0 = std::min( dk0, len ); - if( dk0*dm0 > block_size ) - dm0 = block_size / dk0; - if( dk0*dn0 > block_size ) - dn0 = block_size / dk0; - - dk0_1 = (dn0+dn0/8+2) & -2; - b_buf_size = (dk0+dk0/8+1)*dk0_1*elem_size; - d_buf_size = (dk0+dk0/8+1)*dk0_1*work_elem_size; - - if( is_a_t ) - { - a_buf_size = (dm0+dm0/8+1)*((dk0+dk0/8+2)&-2)*elem_size; - flags &= ~GEMM_1_T; - } - - buf.allocate(a_buf_size + b_buf_size + d_buf_size); - d_buf = (uchar*)buf; - b_buf = d_buf + d_buf_size; - - if( is_a_t ) - a_buf = b_buf + b_buf_size; - - for( i = 0; i < d_size.height; i += di ) - { - di = dm0; - if( i + di >= d_size.height || 8*(i + di) + di > 8*d_size.height ) - di = d_size.height - i; - - for( j = 0; j < d_size.width; j += dj ) - { - uchar* _d = matD->data + i*matD->step + j*elem_size; - const uchar* _c = Cdata + i*c_step0 + j*c_step1; - size_t _d_step = matD->step; - dj = dn0; - - if( j + dj >= d_size.width || 8*(j + dj) + dj > 8*d_size.width ) - dj = d_size.width - j; - - flags &= 15; - if( dk0 < len ) - { - _d = d_buf; - _d_step = dj*work_elem_size; - } - - for( k = 0; k < len; k += dk ) - { - const uchar* _a = A.data + i*a_step0 + k*a_step1; - size_t _a_step = A.step; - const uchar* _b = B.data + k*b_step0 + j*b_step1; - size_t _b_step = b_step; - Size a_bl_size; - - dk = dk0; - if( k + dk >= len || 8*(k + dk) + dk > 8*len ) - dk = len - k; - - if( !is_a_t ) - a_bl_size.width = dk, a_bl_size.height = di; - else - a_bl_size.width = di, a_bl_size.height = dk; - - if( a_buf && is_a_t ) - { - _a_step = dk*elem_size; - GEMM_TransposeBlock( _a, A.step, a_buf, _a_step, a_bl_size, elem_size ); - std::swap( a_bl_size.width, a_bl_size.height ); - _a = a_buf; - } - - if( dj < d_size.width ) - { - Size b_size; - if( !is_b_t ) - b_size.width = dj, b_size.height = dk; - else - b_size.width = dk, b_size.height = dj; - - _b_step = b_size.width*elem_size; - GEMM_CopyBlock( _b, b_step, b_buf, _b_step, b_size, elem_size ); - _b = b_buf; - } - - if( dk0 < len ) - blockMulFunc( _a, _a_step, _b, _b_step, _d, _d_step, - a_bl_size, Size(dj,di), flags ); - else - singleMulFunc( _a, _a_step, _b, _b_step, _c, Cstep, - _d, _d_step, a_bl_size, Size(dj,di), alpha, beta, flags ); - flags |= 16; - } - - if( dk0 < len ) - storeFunc( _c, Cstep, _d, _d_step, - matD->data + i*matD->step + j*elem_size, - matD->step, Size(dj,di), alpha, beta, flags ); - } - } - } - - if( matD != &D ) - matD->copyTo(D); - } -} - -/****************************************************************************************\ -* Transform * -\****************************************************************************************/ - -namespace cv -{ - -template static void -transform_( const T* src, T* dst, const WT* m, int len, int scn, int dcn ) -{ - int x; - - if( scn == 2 && dcn == 2 ) - { - for( x = 0; x < len*2; x += 2 ) - { - WT v0 = src[x], v1 = src[x+1]; - T t0 = saturate_cast(m[0]*v0 + m[1]*v1 + m[2]); - T t1 = saturate_cast(m[3]*v0 + m[4]*v1 + m[5]); - dst[x] = t0; dst[x+1] = t1; - } - } - else if( scn == 3 && dcn == 3 ) - { - for( x = 0; x < len*3; x += 3 ) - { - WT v0 = src[x], v1 = src[x+1], v2 = src[x+2]; - T t0 = saturate_cast(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]); - T t1 = saturate_cast(m[4]*v0 + m[5]*v1 + m[6]*v2 + m[7]); - T t2 = saturate_cast(m[8]*v0 + m[9]*v1 + m[10]*v2 + m[11]); - dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; - } - } - else if( scn == 3 && dcn == 1 ) - { - for( x = 0; x < len; x++, src += 3 ) - dst[x] = saturate_cast(m[0]*src[0] + m[1]*src[1] + m[2]*src[2] + m[3]); - } - else if( scn == 4 && dcn == 4 ) - { - for( x = 0; x < len*4; x += 4 ) - { - WT v0 = src[x], v1 = src[x+1], v2 = src[x+2], v3 = src[x+3]; - T t0 = saturate_cast(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]*v3 + m[4]); - T t1 = saturate_cast(m[5]*v0 + m[6]*v1 + m[7]*v2 + m[8]*v3 + m[9]); - dst[x] = t0; dst[x+1] = t1; - t0 = saturate_cast(m[10]*v0 + m[11]*v1 + m[12]*v2 + m[13]*v3 + m[14]); - t1 = saturate_cast(m[15]*v0 + m[16]*v1 + m[17]*v2 + m[18]*v3 + m[19]); - dst[x+2] = t0; dst[x+3] = t1; - } - } - else - { - for( x = 0; x < len; x++, src += scn, dst += dcn ) - { - const WT* _m = m; - int j, k; - for( j = 0; j < dcn; j++, _m += scn + 1 ) - { - WT s = _m[scn]; - for( k = 0; k < scn; k++ ) - s += _m[k]*src[k]; - dst[j] = saturate_cast(s); - } - } - } -} - -#if CV_SSE2 - -static inline void -load3x3Matrix( const float* m, __m128& m0, __m128& m1, __m128& m2, __m128& m3 ) -{ - m0 = _mm_setr_ps(m[0], m[4], m[8], 0); - m1 = _mm_setr_ps(m[1], m[5], m[9], 0); - m2 = _mm_setr_ps(m[2], m[6], m[10], 0); - m3 = _mm_setr_ps(m[3], m[7], m[11], 0); -} - -static inline void -load4x4Matrix( const float* m, __m128& m0, __m128& m1, __m128& m2, __m128& m3, __m128& m4 ) -{ - m0 = _mm_setr_ps(m[0], m[5], m[10], m[15]); - m1 = _mm_setr_ps(m[1], m[6], m[11], m[16]); - m2 = _mm_setr_ps(m[2], m[7], m[12], m[17]); - m3 = _mm_setr_ps(m[3], m[8], m[13], m[18]); - m4 = _mm_setr_ps(m[4], m[9], m[14], m[19]); -} - -#endif - -static void -transform_8u( const uchar* src, uchar* dst, const float* m, int len, int scn, int dcn ) -{ -#if CV_SSE2 - const int BITS = 10, SCALE = 1 << BITS; - const float MAX_M = (float)(1 << (15 - BITS)); - - if( USE_SSE2 && scn == 3 && dcn == 3 && - std::abs(m[0]) < MAX_M && std::abs(m[1]) < MAX_M && std::abs(m[2]) < MAX_M && std::abs(m[3]) < MAX_M*256 && - std::abs(m[4]) < MAX_M && std::abs(m[5]) < MAX_M && std::abs(m[6]) < MAX_M && std::abs(m[7]) < MAX_M*256 && - std::abs(m[8]) < MAX_M && std::abs(m[9]) < MAX_M && std::abs(m[10]) < MAX_M && std::abs(m[11]) < MAX_M*256 ) - { - // faster fixed-point transformation - short m00 = saturate_cast(m[0]*SCALE), m01 = saturate_cast(m[1]*SCALE), - m02 = saturate_cast(m[2]*SCALE), m10 = saturate_cast(m[4]*SCALE), - m11 = saturate_cast(m[5]*SCALE), m12 = saturate_cast(m[6]*SCALE), - m20 = saturate_cast(m[8]*SCALE), m21 = saturate_cast(m[9]*SCALE), - m22 = saturate_cast(m[10]*SCALE); - int m03 = saturate_cast((m[3]+0.5f)*SCALE), m13 = saturate_cast((m[7]+0.5f)*SCALE ), - m23 = saturate_cast((m[11]+0.5f)*SCALE); - - __m128i m0 = _mm_setr_epi16(0, m00, m01, m02, m00, m01, m02, 0); - __m128i m1 = _mm_setr_epi16(0, m10, m11, m12, m10, m11, m12, 0); - __m128i m2 = _mm_setr_epi16(0, m20, m21, m22, m20, m21, m22, 0); - __m128i m3 = _mm_setr_epi32(m03, m13, m23, 0); - int x = 0; - - for( ; x <= (len - 8)*3; x += 8*3 ) - { - __m128i z = _mm_setzero_si128(), t0, t1, t2, r0, r1; - __m128i v0 = _mm_loadl_epi64((const __m128i*)(src + x)); - __m128i v1 = _mm_loadl_epi64((const __m128i*)(src + x + 8)); - __m128i v2 = _mm_loadl_epi64((const __m128i*)(src + x + 16)), v3; - v0 = _mm_unpacklo_epi8(v0, z); // b0 g0 r0 b1 g1 r1 b2 g2 - v1 = _mm_unpacklo_epi8(v1, z); // r2 b3 g3 r3 b4 g4 r4 b5 - v2 = _mm_unpacklo_epi8(v2, z); // g5 r5 b6 g6 r6 b7 g7 r7 - - v3 = _mm_srli_si128(v2, 2); // ? b6 g6 r6 b7 g7 r7 0 - v2 = _mm_or_si128(_mm_slli_si128(v2, 10), _mm_srli_si128(v1, 6)); // ? b4 g4 r4 b5 g5 r5 ? - v1 = _mm_or_si128(_mm_slli_si128(v1, 6), _mm_srli_si128(v0, 10)); // ? b2 g2 r2 b3 g3 r3 ? - v0 = _mm_slli_si128(v0, 2); // 0 b0 g0 r0 b1 g1 r1 ? - - // process pixels 0 & 1 - t0 = _mm_madd_epi16(v0, m0); // a0 b0 a1 b1 - t1 = _mm_madd_epi16(v0, m1); // c0 d0 c1 d1 - t2 = _mm_madd_epi16(v0, m2); // e0 f0 e1 f1 - v0 = _mm_unpacklo_epi32(t0, t1); // a0 c0 b0 d0 - t0 = _mm_unpackhi_epi32(t0, t1); // a1 b1 c1 d1 - t1 = _mm_unpacklo_epi32(t2, z); // e0 0 f0 0 - t2 = _mm_unpackhi_epi32(t2, z); // e1 0 f1 0 - r0 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(v0, t1), _mm_unpackhi_epi64(v0,t1)), m3); // B0 G0 R0 0 - r1 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(t0, t2), _mm_unpackhi_epi64(t0,t2)), m3); // B1 G1 R1 0 - r0 = _mm_srai_epi32(r0, BITS); - r1 = _mm_srai_epi32(r1, BITS); - v0 = _mm_packus_epi16(_mm_packs_epi32(_mm_slli_si128(r0, 4), r1), z); // 0 B0 G0 R0 B1 G1 R1 0 - - // process pixels 2 & 3 - t0 = _mm_madd_epi16(v1, m0); // a0 b0 a1 b1 - t1 = _mm_madd_epi16(v1, m1); // c0 d0 c1 d1 - t2 = _mm_madd_epi16(v1, m2); // e0 f0 e1 f1 - v1 = _mm_unpacklo_epi32(t0, t1); // a0 c0 b0 d0 - t0 = _mm_unpackhi_epi32(t0, t1); // a1 b1 c1 d1 - t1 = _mm_unpacklo_epi32(t2, z); // e0 0 f0 0 - t2 = _mm_unpackhi_epi32(t2, z); // e1 0 f1 0 - r0 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(v1, t1), _mm_unpackhi_epi64(v1,t1)), m3); // B2 G2 R2 0 - r1 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(t0, t2), _mm_unpackhi_epi64(t0,t2)), m3); // B3 G3 R3 0 - r0 = _mm_srai_epi32(r0, BITS); - r1 = _mm_srai_epi32(r1, BITS); - v1 = _mm_packus_epi16(_mm_packs_epi32(_mm_slli_si128(r0, 4), r1), z); // 0 B2 G2 R2 B3 G3 R3 0 - - // process pixels 4 & 5 - t0 = _mm_madd_epi16(v2, m0); // a0 b0 a1 b1 - t1 = _mm_madd_epi16(v2, m1); // c0 d0 c1 d1 - t2 = _mm_madd_epi16(v2, m2); // e0 f0 e1 f1 - v2 = _mm_unpacklo_epi32(t0, t1); // a0 c0 b0 d0 - t0 = _mm_unpackhi_epi32(t0, t1); // a1 b1 c1 d1 - t1 = _mm_unpacklo_epi32(t2, z); // e0 0 f0 0 - t2 = _mm_unpackhi_epi32(t2, z); // e1 0 f1 0 - r0 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(v2, t1), _mm_unpackhi_epi64(v2,t1)), m3); // B4 G4 R4 0 - r1 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(t0, t2), _mm_unpackhi_epi64(t0,t2)), m3); // B5 G5 R5 0 - r0 = _mm_srai_epi32(r0, BITS); - r1 = _mm_srai_epi32(r1, BITS); - v2 = _mm_packus_epi16(_mm_packs_epi32(_mm_slli_si128(r0, 4), r1), z); // 0 B4 G4 R4 B5 G5 R5 0 - - // process pixels 6 & 7 - t0 = _mm_madd_epi16(v3, m0); // a0 b0 a1 b1 - t1 = _mm_madd_epi16(v3, m1); // c0 d0 c1 d1 - t2 = _mm_madd_epi16(v3, m2); // e0 f0 e1 f1 - v3 = _mm_unpacklo_epi32(t0, t1); // a0 c0 b0 d0 - t0 = _mm_unpackhi_epi32(t0, t1); // a1 b1 c1 d1 - t1 = _mm_unpacklo_epi32(t2, z); // e0 0 f0 0 - t2 = _mm_unpackhi_epi32(t2, z); // e1 0 f1 0 - r0 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(v3, t1), _mm_unpackhi_epi64(v3,t1)), m3); // B6 G6 R6 0 - r1 = _mm_add_epi32(_mm_add_epi32(_mm_unpacklo_epi64(t0, t2), _mm_unpackhi_epi64(t0,t2)), m3); // B7 G7 R7 0 - r0 = _mm_srai_epi32(r0, BITS); - r1 = _mm_srai_epi32(r1, BITS); - v3 = _mm_packus_epi16(_mm_packs_epi32(_mm_slli_si128(r0, 4), r1), z); // 0 B6 G6 R6 B7 G7 R7 0 - - v0 = _mm_or_si128(_mm_srli_si128(v0, 1), _mm_slli_si128(v1, 5)); - v1 = _mm_or_si128(_mm_srli_si128(v1, 3), _mm_slli_si128(v2, 3)); - v2 = _mm_or_si128(_mm_srli_si128(v2, 5), _mm_slli_si128(v3, 1)); - _mm_storel_epi64((__m128i*)(dst + x), v0); - _mm_storel_epi64((__m128i*)(dst + x + 8), v1); - _mm_storel_epi64((__m128i*)(dst + x + 16), v2); - } - - for( ; x < len*3; x += 3 ) - { - int v0 = src[x], v1 = src[x+1], v2 = src[x+2]; - uchar t0 = saturate_cast((m00*v0 + m01*v1 + m02*v2 + m03)>>BITS); - uchar t1 = saturate_cast((m10*v0 + m11*v1 + m12*v2 + m13)>>BITS); - uchar t2 = saturate_cast((m20*v0 + m21*v1 + m22*v2 + m23)>>BITS); - dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; - } - return; - } -#endif - - transform_(src, dst, m, len, scn, dcn); -} - -static void -transform_16u( const ushort* src, ushort* dst, const float* m, int len, int scn, int dcn ) -{ -#if CV_SSE2 - if( USE_SSE2 && scn == 3 && dcn == 3 ) - { - __m128 m0, m1, m2, m3; - __m128i delta = _mm_setr_epi16(0,-32768,-32768,-32768,-32768,-32768,-32768,0); - load3x3Matrix(m, m0, m1, m2, m3); - m3 = _mm_sub_ps(m3, _mm_setr_ps(32768.f, 32768.f, 32768.f, 0.f)); - - int x = 0; - for( ; x <= (len - 4)*3; x += 4*3 ) - { - __m128i z = _mm_setzero_si128(); - __m128i v0 = _mm_loadu_si128((const __m128i*)(src + x)), v1; - __m128i v2 = _mm_loadl_epi64((const __m128i*)(src + x + 8)), v3; - v1 = _mm_unpacklo_epi16(_mm_srli_si128(v0, 6), z); // b1 g1 r1 - v3 = _mm_unpacklo_epi16(_mm_srli_si128(v2, 2), z); // b3 g3 r3 - v2 = _mm_or_si128(_mm_srli_si128(v0, 12), _mm_slli_si128(v2, 4)); - v0 = _mm_unpacklo_epi16(v0, z); // b0 g0 r0 - v2 = _mm_unpacklo_epi16(v2, z); // b2 g2 r2 - __m128 x0 = _mm_cvtepi32_ps(v0), x1 = _mm_cvtepi32_ps(v1); - __m128 x2 = _mm_cvtepi32_ps(v2), x3 = _mm_cvtepi32_ps(v3); - __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), m3); - __m128 y1 = _mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x1,x1,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x1,x1,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x1,x1,_MM_SHUFFLE(2,2,2,2)))), m3); - __m128 y2 = _mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x2,x2,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x2,x2,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x2,x2,_MM_SHUFFLE(2,2,2,2)))), m3); - __m128 y3 = _mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x3,x3,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x3,x3,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x3,x3,_MM_SHUFFLE(2,2,2,2)))), m3); - v0 = _mm_cvtps_epi32(y0); v1 = _mm_cvtps_epi32(y1); - v2 = _mm_cvtps_epi32(y2); v3 = _mm_cvtps_epi32(y3); - - v0 = _mm_add_epi16(_mm_packs_epi32(_mm_slli_si128(v0,4), v1), delta); // 0 b0 g0 r0 b1 g1 r1 0 - v2 = _mm_add_epi16(_mm_packs_epi32(_mm_slli_si128(v2,4), v3), delta); // 0 b2 g2 r2 b3 g3 r3 0 - v1 = _mm_or_si128(_mm_srli_si128(v0,2), _mm_slli_si128(v2,10)); // b0 g0 r0 b1 g1 r1 b2 g2 - v2 = _mm_srli_si128(v2, 6); // r2 b3 g3 r3 0 0 0 0 - _mm_storeu_si128((__m128i*)(dst + x), v1); - _mm_storel_epi64((__m128i*)(dst + x + 8), v2); - } - - for( ; x < len*3; x += 3 ) - { - float v0 = src[x], v1 = src[x+1], v2 = src[x+2]; - ushort t0 = saturate_cast(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]); - ushort t1 = saturate_cast(m[4]*v0 + m[5]*v1 + m[6]*v2 + m[7]); - ushort t2 = saturate_cast(m[8]*v0 + m[9]*v1 + m[10]*v2 + m[11]); - dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; - } - return; - } -#endif - - transform_(src, dst, m, len, scn, dcn); -} - - -static void -transform_32f( const float* src, float* dst, const float* m, int len, int scn, int dcn ) -{ -#if CV_SSE2 - if( USE_SSE2 ) - { - int x = 0; - if( scn == 3 && dcn == 3 ) - { - __m128 m0, m1, m2, m3; - load3x3Matrix(m, m0, m1, m2, m3); - - for( ; x < (len - 1)*3; x += 3 ) - { - __m128 x0 = _mm_loadu_ps(src + x); - __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), m3); - _mm_storel_pi((__m64*)(dst + x), y0); - _mm_store_ss(dst + x + 2, _mm_movehl_ps(y0,y0)); - } - - for( ; x < len*3; x += 3 ) - { - float v0 = src[x], v1 = src[x+1], v2 = src[x+2]; - float t0 = saturate_cast(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]); - float t1 = saturate_cast(m[4]*v0 + m[5]*v1 + m[6]*v2 + m[7]); - float t2 = saturate_cast(m[8]*v0 + m[9]*v1 + m[10]*v2 + m[11]); - dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; - } - return; - } - - if( scn == 4 && dcn == 4 ) - { - __m128 m0, m1, m2, m3, m4; - load4x4Matrix(m, m0, m1, m2, m3, m4); - - for( ; x < len*4; x += 4 ) - { - __m128 x0 = _mm_loadu_ps(src + x); - __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps(_mm_add_ps( - _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))), - _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))), - _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), - _mm_mul_ps(m3, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(3,3,3,3)))), m4); - _mm_storeu_ps(dst + x, y0); - } - return; - } - } -#endif - - transform_(src, dst, m, len, scn, dcn); -} - - -static void -transform_8s(const schar* src, schar* dst, const float* m, int len, int scn, int dcn) -{ - transform_(src, dst, m, len, scn, dcn); -} - -static void -transform_16s(const short* src, short* dst, const float* m, int len, int scn, int dcn) -{ - transform_(src, dst, m, len, scn, dcn); -} - -static void -transform_32s(const int* src, int* dst, const double* m, int len, int scn, int dcn) -{ - transform_(src, dst, m, len, scn, dcn); -} - -static void -transform_64f(const double* src, double* dst, const double* m, int len, int scn, int dcn) -{ - transform_(src, dst, m, len, scn, dcn); -} - -template static void -diagtransform_( const T* src, T* dst, const WT* m, int len, int cn, int ) -{ - int x; - - if( cn == 2 ) - { - for( x = 0; x < len*2; x += 2 ) - { - T t0 = saturate_cast(m[0]*src[x] + m[2]); - T t1 = saturate_cast(m[4]*src[x+1] + m[5]); - dst[x] = t0; dst[x+1] = t1; - } - } - else if( cn == 3 ) - { - for( x = 0; x < len*3; x += 3 ) - { - T t0 = saturate_cast(m[0]*src[x] + m[3]); - T t1 = saturate_cast(m[5]*src[x+1] + m[7]); - T t2 = saturate_cast(m[10]*src[x+2] + m[11]); - dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2; - } - } - else if( cn == 4 ) - { - for( x = 0; x < len*4; x += 4 ) - { - T t0 = saturate_cast(m[0]*src[x] + m[4]); - T t1 = saturate_cast(m[6]*src[x+1] + m[9]); - dst[x] = t0; dst[x+1] = t1; - t0 = saturate_cast(m[12]*src[x+2] + m[14]); - t1 = saturate_cast(m[18]*src[x+3] + m[19]); - dst[x+2] = t0; dst[x+3] = t1; - } - } - else - { - for( x = 0; x < len; x++, src += cn, dst += cn ) - { - const WT* _m = m; - for( int j = 0; j < cn; j++, _m += cn + 1 ) - dst[j] = saturate_cast(src[j]*_m[j] + _m[cn]); - } - } -} - -static void -diagtransform_8u(const uchar* src, uchar* dst, const float* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_8s(const schar* src, schar* dst, const float* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_16u(const ushort* src, ushort* dst, const float* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_16s(const short* src, short* dst, const float* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_32s(const int* src, int* dst, const double* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_32f(const float* src, float* dst, const float* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - -static void -diagtransform_64f(const double* src, double* dst, const double* m, int len, int scn, int dcn) -{ - diagtransform_(src, dst, m, len, scn, dcn); -} - - -typedef void (*TransformFunc)( const uchar* src, uchar* dst, const uchar* m, int, int, int ); - -static TransformFunc getTransformFunc(int depth) -{ - static TransformFunc transformTab[] = - { - (TransformFunc)transform_8u, (TransformFunc)transform_8s, (TransformFunc)transform_16u, - (TransformFunc)transform_16s, (TransformFunc)transform_32s, (TransformFunc)transform_32f, - (TransformFunc)transform_64f, 0 - }; - - return transformTab[depth]; -} - -static TransformFunc getDiagTransformFunc(int depth) -{ - static TransformFunc diagTransformTab[] = - { - (TransformFunc)diagtransform_8u, (TransformFunc)diagtransform_8s, (TransformFunc)diagtransform_16u, - (TransformFunc)diagtransform_16s, (TransformFunc)diagtransform_32s, (TransformFunc)diagtransform_32f, - (TransformFunc)diagtransform_64f, 0 - }; - - return diagTransformTab[depth]; -} - -} - -void cv::transform( InputArray _src, OutputArray _dst, InputArray _mtx ) -{ - Mat src = _src.getMat(), m = _mtx.getMat(); - int depth = src.depth(), scn = src.channels(), dcn = m.rows; - CV_Assert( scn == m.cols || scn + 1 == m.cols ); - bool isDiag = false; - - _dst.create( src.size(), CV_MAKETYPE(depth, dcn) ); - Mat dst = _dst.getMat(); - - int mtype = depth == CV_32S || depth == CV_64F ? CV_64F : CV_32F; - AutoBuffer _mbuf; - double* mbuf; - - if( !m.isContinuous() || m.type() != mtype || m.cols != scn + 1 ) - { - _mbuf.allocate(dcn*(scn+1)); - mbuf = (double*)_mbuf; - Mat tmp(dcn, scn+1, mtype, mbuf); - memset(tmp.data, 0, tmp.total()*tmp.elemSize()); - if( m.cols == scn+1 ) - m.convertTo(tmp, mtype); - else - { - Mat tmppart = tmp.colRange(0, m.cols); - m.convertTo(tmppart, mtype); - } - m = tmp; - } - else - mbuf = (double*)m.data; - - if( scn == dcn ) - { - int i, j; - double eps = mtype == CV_32F ? FLT_EPSILON : DBL_EPSILON; - - if( scn == 1 ) - { - double alpha, beta; - if( mtype == CV_32F ) - alpha = m.at(0), beta = m.at(1); - else - alpha = m.at(0), beta = m.at(1); - src.convertTo(dst, dst.type(), alpha, beta); - return; - } - - for( i = 0, isDiag = true; isDiag && i < scn; i++ ) - { - for( j = 0; isDiag && j < scn; j++ ) - { - double v = mtype == CV_32F ? m.at(i, j) : m.at(i, j); - if( i != j && fabs(v) > eps ) - isDiag = false; - } - } - } - - TransformFunc func = isDiag ? getDiagTransformFunc(depth): getTransformFunc(depth); - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - size_t i, total = it.size; - - for( i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], ptrs[1], (uchar*)mbuf, (int)total, scn, dcn ); -} - -/****************************************************************************************\ -* Perspective Transform * -\****************************************************************************************/ - -namespace cv -{ - -template static void -perspectiveTransform_( const T* src, T* dst, const double* m, int len, int scn, int dcn ) -{ - const double eps = FLT_EPSILON; - int i; - - if( scn == 2 && dcn == 2 ) - { - for( i = 0; i < len*2; i += 2 ) - { - T x = src[i], y = src[i + 1]; - double w = x*m[6] + y*m[7] + m[8]; - - if( fabs(w) > eps ) - { - w = 1./w; - dst[i] = (T)((x*m[0] + y*m[1] + m[2])*w); - dst[i+1] = (T)((x*m[3] + y*m[4] + m[5])*w); - } - else - dst[i] = dst[i+1] = (T)0; - } - } - else if( scn == 3 && dcn == 3 ) - { - for( i = 0; i < len*3; i += 3 ) - { - T x = src[i], y = src[i + 1], z = src[i + 2]; - double w = x*m[12] + y*m[13] + z*m[14] + m[15]; - - if( fabs(w) > eps ) - { - w = 1./w; - dst[i] = (T)((x*m[0] + y*m[1] + z*m[2] + m[3]) * w); - dst[i+1] = (T)((x*m[4] + y*m[5] + z*m[6] + m[7]) * w); - dst[i+2] = (T)((x*m[8] + y*m[9] + z*m[10] + m[11]) * w); - } - else - dst[i] = dst[i+1] = dst[i+2] = (T)0; - } - } - else if( scn == 3 && dcn == 2 ) - { - for( i = 0; i < len; i++, src += 3, dst += 2 ) - { - T x = src[0], y = src[1], z = src[2]; - double w = x*m[8] + y*m[9] + z*m[10] + m[11]; - - if( fabs(w) > eps ) - { - w = 1./w; - dst[0] = (T)((x*m[0] + y*m[1] + z*m[2] + m[3])*w); - dst[1] = (T)((x*m[4] + y*m[5] + z*m[6] + m[7])*w); - } - else - dst[0] = dst[1] = (T)0; - } - } - else - { - for( i = 0; i < len; i++, src += scn, dst += dcn ) - { - const double* _m = m + dcn*(scn + 1); - double w = _m[scn]; - int j, k; - for( k = 0; k < scn; k++ ) - w += _m[k]*src[k]; - if( fabs(w) > eps ) - { - _m = m; - for( j = 0; j < dcn; j++, _m += scn + 1 ) - { - double s = _m[scn]; - for( k = 0; k < scn; k++ ) - s += _m[k]*src[k]; - dst[j] = (T)(s*w); - } - } - else - for( j = 0; j < dcn; j++ ) - dst[j] = 0; - } - } -} - - -static void -perspectiveTransform_32f(const float* src, float* dst, const double* m, int len, int scn, int dcn) -{ - perspectiveTransform_(src, dst, m, len, scn, dcn); -} - -static void -perspectiveTransform_64f(const double* src, double* dst, const double* m, int len, int scn, int dcn) -{ - perspectiveTransform_(src, dst, m, len, scn, dcn); -} - -} - -void cv::perspectiveTransform( InputArray _src, OutputArray _dst, InputArray _mtx ) -{ - Mat src = _src.getMat(), m = _mtx.getMat(); - int depth = src.depth(), scn = src.channels(), dcn = m.rows-1; - CV_Assert( scn + 1 == m.cols && (depth == CV_32F || depth == CV_64F)); - - _dst.create( src.size(), CV_MAKETYPE(depth, dcn) ); - Mat dst = _dst.getMat(); - - const int mtype = CV_64F; - AutoBuffer _mbuf; - double* mbuf = _mbuf; - - if( !m.isContinuous() || m.type() != mtype ) - { - _mbuf.allocate((dcn+1)*(scn+1)); - Mat tmp(dcn+1, scn+1, mtype, (double*)_mbuf); - m.convertTo(tmp, mtype); - m = tmp; - } - else - mbuf = (double*)m.data; - - TransformFunc func = depth == CV_32F ? - (TransformFunc)perspectiveTransform_32f : - (TransformFunc)perspectiveTransform_64f; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - size_t i, total = it.size; - - for( i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], ptrs[1], (uchar*)mbuf, (int)total, scn, dcn ); -} - -/****************************************************************************************\ -* ScaleAdd * -\****************************************************************************************/ - -namespace cv -{ - -static void scaleAdd_32f(const float* src1, const float* src2, float* dst, - int len, float* _alpha) -{ - float alpha = *_alpha; - int i = 0; -#if CV_SSE2 - if( USE_SSE2 ) - { - __m128 a4 = _mm_set1_ps(alpha); - if( (((size_t)src1|(size_t)src2|(size_t)dst) & 15) == 0 ) - for( ; i <= len - 8; i += 8 ) - { - __m128 x0, x1, y0, y1, t0, t1; - x0 = _mm_load_ps(src1 + i); x1 = _mm_load_ps(src1 + i + 4); - y0 = _mm_load_ps(src2 + i); y1 = _mm_load_ps(src2 + i + 4); - t0 = _mm_add_ps(_mm_mul_ps(x0, a4), y0); - t1 = _mm_add_ps(_mm_mul_ps(x1, a4), y1); - _mm_store_ps(dst + i, t0); - _mm_store_ps(dst + i + 4, t1); - } - else - for( ; i <= len - 8; i += 8 ) - { - __m128 x0, x1, y0, y1, t0, t1; - x0 = _mm_loadu_ps(src1 + i); x1 = _mm_loadu_ps(src1 + i + 4); - y0 = _mm_loadu_ps(src2 + i); y1 = _mm_loadu_ps(src2 + i + 4); - t0 = _mm_add_ps(_mm_mul_ps(x0, a4), y0); - t1 = _mm_add_ps(_mm_mul_ps(x1, a4), y1); - _mm_storeu_ps(dst + i, t0); - _mm_storeu_ps(dst + i + 4, t1); - } - } - else -#endif - //vz why do we need unroll here? - for( ; i <= len - 4; i += 4 ) - { - float t0, t1; - t0 = src1[i]*alpha + src2[i]; - t1 = src1[i+1]*alpha + src2[i+1]; - dst[i] = t0; dst[i+1] = t1; - t0 = src1[i+2]*alpha + src2[i+2]; - t1 = src1[i+3]*alpha + src2[i+3]; - dst[i+2] = t0; dst[i+3] = t1; - } - for(; i < len; i++ ) - dst[i] = src1[i]*alpha + src2[i]; -} - - -static void scaleAdd_64f(const double* src1, const double* src2, double* dst, - int len, double* _alpha) -{ - double alpha = *_alpha; - int i = 0; -#if CV_SSE2 - if( USE_SSE2 && (((size_t)src1|(size_t)src2|(size_t)dst) & 15) == 0 ) - { - __m128d a2 = _mm_set1_pd(alpha); - for( ; i <= len - 4; i += 4 ) - { - __m128d x0, x1, y0, y1, t0, t1; - x0 = _mm_load_pd(src1 + i); x1 = _mm_load_pd(src1 + i + 2); - y0 = _mm_load_pd(src2 + i); y1 = _mm_load_pd(src2 + i + 2); - t0 = _mm_add_pd(_mm_mul_pd(x0, a2), y0); - t1 = _mm_add_pd(_mm_mul_pd(x1, a2), y1); - _mm_store_pd(dst + i, t0); - _mm_store_pd(dst + i + 2, t1); - } - } - else -#endif - //vz why do we need unroll here? - for( ; i <= len - 4; i += 4 ) - { - double t0, t1; - t0 = src1[i]*alpha + src2[i]; - t1 = src1[i+1]*alpha + src2[i+1]; - dst[i] = t0; dst[i+1] = t1; - t0 = src1[i+2]*alpha + src2[i+2]; - t1 = src1[i+3]*alpha + src2[i+3]; - dst[i+2] = t0; dst[i+3] = t1; - } - for(; i < len; i++ ) - dst[i] = src1[i]*alpha + src2[i]; -} - -typedef void (*ScaleAddFunc)(const uchar* src1, const uchar* src2, uchar* dst, int len, const void* alpha); - -} - -void cv::scaleAdd( InputArray _src1, double alpha, InputArray _src2, OutputArray _dst ) -{ - Mat src1 = _src1.getMat(), src2 = _src2.getMat(); - int depth = src1.depth(), cn = src1.channels(); - - CV_Assert( src1.type() == src2.type() ); - if( depth < CV_32F ) - { - addWeighted(_src1, alpha, _src2, 1, 0, _dst, depth); - return; - } - - _dst.create(src1.dims, src1.size, src1.type()); - Mat dst = _dst.getMat(); - - float falpha = (float)alpha; - void* palpha = depth == CV_32F ? (void*)&falpha : (void*)α - - ScaleAddFunc func = depth == CV_32F ? (ScaleAddFunc)scaleAdd_32f : (ScaleAddFunc)scaleAdd_64f; - - if( src1.isContinuous() && src2.isContinuous() && dst.isContinuous() ) - { - size_t len = src1.total()*cn; - func(src1.data, src2.data, dst.data, (int)len, palpha); - return; - } - - const Mat* arrays[] = {&src1, &src2, &dst, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - size_t i, len = it.size*cn; - - for( i = 0; i < it.nplanes; i++, ++it ) - func( ptrs[0], ptrs[1], ptrs[2], (int)len, palpha ); -} - -/****************************************************************************************\ -* Covariation Matrix * -\****************************************************************************************/ - -void cv::calcCovarMatrix( const Mat* data, int nsamples, Mat& covar, Mat& _mean, int flags, int ctype ) -{ - CV_Assert( data && nsamples > 0 ); - Size size = data[0].size(); - int sz = size.width * size.height, esz = (int)data[0].elemSize(); - int type = data[0].type(); - Mat mean; - ctype = std::max(std::max(CV_MAT_DEPTH(ctype >= 0 ? ctype : type), _mean.depth()), CV_32F); - - if( (flags & CV_COVAR_USE_AVG) != 0 ) - { - CV_Assert( _mean.size() == size ); - if( _mean.isContinuous() && _mean.type() == ctype ) - mean = _mean.reshape(1, 1); - else - { - _mean.convertTo(mean, ctype); - mean = mean.reshape(1, 1); - } - } - - Mat _data(nsamples, sz, type); - - for( int i = 0; i < nsamples; i++ ) - { - CV_Assert( data[i].size() == size && data[i].type() == type ); - if( data[i].isContinuous() ) - memcpy( _data.ptr(i), data[i].data, sz*esz ); - else - { - Mat dataRow(size.height, size.width, type, _data.ptr(i)); - data[i].copyTo(dataRow); - } - } - - calcCovarMatrix( _data, covar, mean, (flags & ~(CV_COVAR_ROWS|CV_COVAR_COLS)) | CV_COVAR_ROWS, ctype ); - if( (flags & CV_COVAR_USE_AVG) == 0 ) - _mean = mean.reshape(1, size.height); -} - -void cv::calcCovarMatrix( InputArray _src, OutputArray _covar, InputOutputArray _mean, int flags, int ctype ) -{ - if(_src.kind() == _InputArray::STD_VECTOR_MAT) - { - std::vector src; - _src.getMatVector(src); - - CV_Assert( src.size() > 0 ); - - Size size = src[0].size(); - int type = src[0].type(); - - ctype = std::max(std::max(CV_MAT_DEPTH(ctype >= 0 ? ctype : type), _mean.depth()), CV_32F); - - Mat _data(static_cast(src.size()), size.area(), type); - - int i = 0; - for(vector::iterator each = src.begin(); each != src.end(); each++, i++ ) - { - CV_Assert( (*each).size() == size && (*each).type() == type ); - Mat dataRow(size.height, size.width, type, _data.ptr(i)); - (*each).copyTo(dataRow); - } - - Mat mean; - if( (flags & CV_COVAR_USE_AVG) != 0 ) - { - CV_Assert( _mean.size() == size ); - - if( mean.type() != ctype ) - { - mean = _mean.getMat(); - _mean.create(mean.size(), ctype); - Mat tmp = _mean.getMat(); - mean.convertTo(tmp, ctype); - mean = tmp; - } - - mean = _mean.getMat().reshape(1, 1); - } - - calcCovarMatrix( _data, _covar, mean, (flags & ~(CV_COVAR_ROWS|CV_COVAR_COLS)) | CV_COVAR_ROWS, ctype ); - - if( (flags & CV_COVAR_USE_AVG) == 0 ) - { - mean = mean.reshape(1, size.height); - mean.copyTo(_mean); - } - return; - } - - Mat data = _src.getMat(), mean; - CV_Assert( ((flags & CV_COVAR_ROWS) != 0) ^ ((flags & CV_COVAR_COLS) != 0) ); - bool takeRows = (flags & CV_COVAR_ROWS) != 0; - int type = data.type(); - int nsamples = takeRows ? data.rows : data.cols; - CV_Assert( nsamples > 0 ); - Size size = takeRows ? Size(data.cols, 1) : Size(1, data.rows); - - if( (flags & CV_COVAR_USE_AVG) != 0 ) - { - mean = _mean.getMat(); - ctype = std::max(std::max(CV_MAT_DEPTH(ctype >= 0 ? ctype : type), mean.depth()), CV_32F); - CV_Assert( mean.size() == size ); - if( mean.type() != ctype ) - { - _mean.create(mean.size(), ctype); - Mat tmp = _mean.getMat(); - mean.convertTo(tmp, ctype); - mean = tmp; - } - } - else - { - ctype = std::max(CV_MAT_DEPTH(ctype >= 0 ? ctype : type), CV_32F); - reduce( _src, _mean, takeRows ? 0 : 1, CV_REDUCE_AVG, ctype ); - mean = _mean.getMat(); - } - - mulTransposed( data, _covar, ((flags & CV_COVAR_NORMAL) == 0) ^ takeRows, - mean, (flags & CV_COVAR_SCALE) != 0 ? 1./nsamples : 1, ctype ); -} - -/****************************************************************************************\ -* Mahalanobis * -\****************************************************************************************/ - -double cv::Mahalanobis( InputArray _v1, InputArray _v2, InputArray _icovar ) -{ - Mat v1 = _v1.getMat(), v2 = _v2.getMat(), icovar = _icovar.getMat(); - int type = v1.type(), depth = v1.depth(); - Size sz = v1.size(); - int i, j, len = sz.width*sz.height*v1.channels(); - AutoBuffer buf(len); - double result = 0; - - CV_Assert( type == v2.type() && type == icovar.type() && - sz == v2.size() && len == icovar.rows && len == icovar.cols ); - - sz.width *= v1.channels(); - if( v1.isContinuous() && v2.isContinuous() ) - { - sz.width *= sz.height; - sz.height = 1; - } - - if( depth == CV_32F ) - { - const float* src1 = (const float*)v1.data; - const float* src2 = (const float*)v2.data; - size_t step1 = v1.step/sizeof(src1[0]); - size_t step2 = v2.step/sizeof(src2[0]); - double* diff = buf; - const float* mat = (const float*)icovar.data; - size_t matstep = icovar.step/sizeof(mat[0]); - - for( ; sz.height--; src1 += step1, src2 += step2, diff += sz.width ) - { - for( i = 0; i < sz.width; i++ ) - diff[i] = src1[i] - src2[i]; - } - - diff = buf; - for( i = 0; i < len; i++, mat += matstep ) - { - double row_sum = 0; - j = 0; - #if CV_ENABLE_UNROLLED - for(; j <= len - 4; j += 4 ) - row_sum += diff[j]*mat[j] + diff[j+1]*mat[j+1] + - diff[j+2]*mat[j+2] + diff[j+3]*mat[j+3]; - #endif - for( ; j < len; j++ ) - row_sum += diff[j]*mat[j]; - result += row_sum * diff[i]; - } - } - else if( depth == CV_64F ) - { - const double* src1 = (const double*)v1.data; - const double* src2 = (const double*)v2.data; - size_t step1 = v1.step/sizeof(src1[0]); - size_t step2 = v2.step/sizeof(src2[0]); - double* diff = buf; - const double* mat = (const double*)icovar.data; - size_t matstep = icovar.step/sizeof(mat[0]); - - for( ; sz.height--; src1 += step1, src2 += step2, diff += sz.width ) - { - for( i = 0; i < sz.width; i++ ) - diff[i] = src1[i] - src2[i]; - } - - diff = buf; - for( i = 0; i < len; i++, mat += matstep ) - { - double row_sum = 0; - j = 0; - #if CV_ENABLE_UNROLLED - for(; j <= len - 4; j += 4 ) - row_sum += diff[j]*mat[j] + diff[j+1]*mat[j+1] + - diff[j+2]*mat[j+2] + diff[j+3]*mat[j+3]; - #endif - for( ; j < len; j++ ) - row_sum += diff[j]*mat[j]; - result += row_sum * diff[i]; - } - } - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - return std::sqrt(result); -} - -double cv::Mahalonobis( InputArray _v1, InputArray _v2, InputArray _icovar ) -{ - return Mahalanobis(_v1, _v2, _icovar); -} - -/****************************************************************************************\ -* MulTransposed * -\****************************************************************************************/ - -namespace cv -{ - -template static void -MulTransposedR( const Mat& srcmat, Mat& dstmat, const Mat& deltamat, double scale ) -{ - int i, j, k; - const sT* src = (const sT*)srcmat.data; - dT* dst = (dT*)dstmat.data; - const dT* delta = (const dT*)deltamat.data; - size_t srcstep = srcmat.step/sizeof(src[0]); - size_t dststep = dstmat.step/sizeof(dst[0]); - size_t deltastep = deltamat.rows > 1 ? deltamat.step/sizeof(delta[0]) : 0; - int delta_cols = deltamat.cols; - Size size = srcmat.size(); - dT* tdst = dst; - dT* col_buf = 0; - dT* delta_buf = 0; - int buf_size = size.height*sizeof(dT); - AutoBuffer buf; - - if( delta && delta_cols < size.width ) - { - assert( delta_cols == 1 ); - buf_size *= 5; - } - buf.allocate(buf_size); - col_buf = (dT*)(uchar*)buf; - - if( delta && delta_cols < size.width ) - { - delta_buf = col_buf + size.height; - for( i = 0; i < size.height; i++ ) - delta_buf[i*4] = delta_buf[i*4+1] = - delta_buf[i*4+2] = delta_buf[i*4+3] = delta[i*deltastep]; - delta = delta_buf; - deltastep = deltastep ? 4 : 0; - } - - if( !delta ) - for( i = 0; i < size.width; i++, tdst += dststep ) - { - for( k = 0; k < size.height; k++ ) - col_buf[k] = src[k*srcstep+i]; - - for( j = i; j <= size.width - 4; j += 4 ) - { - double s0 = 0, s1 = 0, s2 = 0, s3 = 0; - const sT *tsrc = src + j; - - for( k = 0; k < size.height; k++, tsrc += srcstep ) - { - double a = col_buf[k]; - s0 += a * tsrc[0]; - s1 += a * tsrc[1]; - s2 += a * tsrc[2]; - s3 += a * tsrc[3]; - } - - tdst[j] = (dT)(s0*scale); - tdst[j+1] = (dT)(s1*scale); - tdst[j+2] = (dT)(s2*scale); - tdst[j+3] = (dT)(s3*scale); - } - - for( ; j < size.width; j++ ) - { - double s0 = 0; - const sT *tsrc = src + j; - - for( k = 0; k < size.height; k++, tsrc += srcstep ) - s0 += (double)col_buf[k] * tsrc[0]; - - tdst[j] = (dT)(s0*scale); - } - } - else - for( i = 0; i < size.width; i++, tdst += dststep ) - { - if( !delta_buf ) - for( k = 0; k < size.height; k++ ) - col_buf[k] = src[k*srcstep+i] - delta[k*deltastep+i]; - else - for( k = 0; k < size.height; k++ ) - col_buf[k] = src[k*srcstep+i] - delta_buf[k*deltastep]; - - for( j = i; j <= size.width - 4; j += 4 ) - { - double s0 = 0, s1 = 0, s2 = 0, s3 = 0; - const sT *tsrc = src + j; - const dT *d = delta_buf ? delta_buf : delta + j; - - for( k = 0; k < size.height; k++, tsrc+=srcstep, d+=deltastep ) - { - double a = col_buf[k]; - s0 += a * (tsrc[0] - d[0]); - s1 += a * (tsrc[1] - d[1]); - s2 += a * (tsrc[2] - d[2]); - s3 += a * (tsrc[3] - d[3]); - } - - tdst[j] = (dT)(s0*scale); - tdst[j+1] = (dT)(s1*scale); - tdst[j+2] = (dT)(s2*scale); - tdst[j+3] = (dT)(s3*scale); - } - - for( ; j < size.width; j++ ) - { - double s0 = 0; - const sT *tsrc = src + j; - const dT *d = delta_buf ? delta_buf : delta + j; - - for( k = 0; k < size.height; k++, tsrc+=srcstep, d+=deltastep ) - s0 += (double)col_buf[k] * (tsrc[0] - d[0]); - - tdst[j] = (dT)(s0*scale); - } - } -} - - -template static void -MulTransposedL( const Mat& srcmat, Mat& dstmat, const Mat& deltamat, double scale ) -{ - int i, j, k; - const sT* src = (const sT*)srcmat.data; - dT* dst = (dT*)dstmat.data; - const dT* delta = (const dT*)deltamat.data; - size_t srcstep = srcmat.step/sizeof(src[0]); - size_t dststep = dstmat.step/sizeof(dst[0]); - size_t deltastep = deltamat.rows > 1 ? deltamat.step/sizeof(delta[0]) : 0; - int delta_cols = deltamat.cols; - Size size = srcmat.size(); - dT* tdst = dst; - - if( !delta ) - for( i = 0; i < size.height; i++, tdst += dststep ) - for( j = i; j < size.height; j++ ) - { - double s = 0; - const sT *tsrc1 = src + i*srcstep; - const sT *tsrc2 = src + j*srcstep; - - for( k = 0; k <= size.width - 4; k += 4 ) - s += (double)tsrc1[k]*tsrc2[k] + (double)tsrc1[k+1]*tsrc2[k+1] + - (double)tsrc1[k+2]*tsrc2[k+2] + (double)tsrc1[k+3]*tsrc2[k+3]; - for( ; k < size.width; k++ ) - s += (double)tsrc1[k] * tsrc2[k]; - tdst[j] = (dT)(s*scale); - } - else - { - dT delta_buf[4]; - int delta_shift = delta_cols == size.width ? 4 : 0; - AutoBuffer buf(size.width*sizeof(dT)); - dT* row_buf = (dT*)(uchar*)buf; - - for( i = 0; i < size.height; i++, tdst += dststep ) - { - const sT *tsrc1 = src + i*srcstep; - const dT *tdelta1 = delta + i*deltastep; - - if( delta_cols < size.width ) - for( k = 0; k < size.width; k++ ) - row_buf[k] = tsrc1[k] - tdelta1[0]; - else - for( k = 0; k < size.width; k++ ) - row_buf[k] = tsrc1[k] - tdelta1[k]; - - for( j = i; j < size.height; j++ ) - { - double s = 0; - const sT *tsrc2 = src + j*srcstep; - const dT *tdelta2 = delta + j*deltastep; - if( delta_cols < size.width ) - { - delta_buf[0] = delta_buf[1] = - delta_buf[2] = delta_buf[3] = tdelta2[0]; - tdelta2 = delta_buf; - } - for( k = 0; k <= size.width-4; k += 4, tdelta2 += delta_shift ) - s += (double)row_buf[k]*(tsrc2[k] - tdelta2[0]) + - (double)row_buf[k+1]*(tsrc2[k+1] - tdelta2[1]) + - (double)row_buf[k+2]*(tsrc2[k+2] - tdelta2[2]) + - (double)row_buf[k+3]*(tsrc2[k+3] - tdelta2[3]); - for( ; k < size.width; k++, tdelta2++ ) - s += (double)row_buf[k]*(tsrc2[k] - tdelta2[0]); - tdst[j] = (dT)(s*scale); - } - } - } -} - -typedef void (*MulTransposedFunc)(const Mat& src, Mat& dst, const Mat& delta, double scale); - -} - -void cv::mulTransposed( InputArray _src, OutputArray _dst, bool ata, - InputArray _delta, double scale, int dtype ) -{ - Mat src = _src.getMat(), delta = _delta.getMat(); - const int gemm_level = 100; // boundary above which GEMM is faster. - int stype = src.type(); - dtype = std::max(std::max(CV_MAT_DEPTH(dtype >= 0 ? dtype : stype), delta.depth()), CV_32F); - CV_Assert( src.channels() == 1 ); - - if( delta.data ) - { - CV_Assert( delta.channels() == 1 && - (delta.rows == src.rows || delta.rows == 1) && - (delta.cols == src.cols || delta.cols == 1)); - if( delta.type() != dtype ) - delta.convertTo(delta, dtype); - } - - int dsize = ata ? src.cols : src.rows; - _dst.create( dsize, dsize, dtype ); - Mat dst = _dst.getMat(); - - if( src.data == dst.data || (stype == dtype && - (dst.cols >= gemm_level && dst.rows >= gemm_level && - src.cols >= gemm_level && src.rows >= gemm_level))) - { - Mat src2; - const Mat* tsrc = &src; - if( delta.data ) - { - if( delta.size() == src.size() ) - subtract( src, delta, src2 ); - else - { - repeat(delta, src.rows/delta.rows, src.cols/delta.cols, src2); - subtract( src, src2, src2 ); - } - tsrc = &src2; - } - gemm( *tsrc, *tsrc, scale, Mat(), 0, dst, ata ? GEMM_1_T : GEMM_2_T ); - } - else - { - MulTransposedFunc func = 0; - if(stype == CV_8U && dtype == CV_32F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_8U && dtype == CV_64F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_16U && dtype == CV_32F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_16U && dtype == CV_64F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_16S && dtype == CV_32F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_16S && dtype == CV_64F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_32F && dtype == CV_32F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_32F && dtype == CV_64F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - else if(stype == CV_64F && dtype == CV_64F) - { - if(ata) - func = MulTransposedR; - else - func = MulTransposedL; - } - if( !func ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - func( src, dst, delta, scale ); - completeSymm( dst, false ); - } -} - -/****************************************************************************************\ -* Dot Product * -\****************************************************************************************/ - -namespace cv -{ - -template double -dotProd_(const T* src1, const T* src2, int len) -{ - int i = 0; - double result = 0; - #if CV_ENABLE_UNROLLED - for( ; i <= len - 4; i += 4 ) - result += (double)src1[i]*src2[i] + (double)src1[i+1]*src2[i+1] + - (double)src1[i+2]*src2[i+2] + (double)src1[i+3]*src2[i+3]; - #endif - for( ; i < len; i++ ) - result += (double)src1[i]*src2[i]; - - return result; -} - - -static double dotProd_8u(const uchar* src1, const uchar* src2, int len) -{ - double r = 0; -#if ARITHM_USE_IPP - ippiDotProd_8u64f_C1R(src1, (int)(len*sizeof(src1[0])), - src2, (int)(len*sizeof(src2[0])), - ippiSize(len, 1), &r); - return r; -#else - int i = 0; - -#if CV_SSE2 - if( USE_SSE2 ) - { - int j, len0 = len & -4, blockSize0 = (1 << 13), blockSize; - __m128i z = _mm_setzero_si128(); - while( i < len0 ) - { - blockSize = std::min(len0 - i, blockSize0); - __m128i s = _mm_setzero_si128(); - j = 0; - for( ; j <= blockSize - 16; j += 16 ) - { - __m128i b0 = _mm_loadu_si128((const __m128i*)(src1 + j)); - __m128i b1 = _mm_loadu_si128((const __m128i*)(src2 + j)); - __m128i s0, s1, s2, s3; - s0 = _mm_unpacklo_epi8(b0, z); - s2 = _mm_unpackhi_epi8(b0, z); - s1 = _mm_unpacklo_epi8(b1, z); - s3 = _mm_unpackhi_epi8(b1, z); - s0 = _mm_madd_epi16(s0, s1); - s2 = _mm_madd_epi16(s2, s3); - s = _mm_add_epi32(s, s0); - s = _mm_add_epi32(s, s2); - } - - for( ; j < blockSize; j += 4 ) - { - __m128i s0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(const int*)(src1 + j)), z); - __m128i s1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(const int*)(src2 + j)), z); - s0 = _mm_madd_epi16(s0, s1); - s = _mm_add_epi32(s, s0); - } - CV_DECL_ALIGNED(16) int buf[4]; - _mm_store_si128((__m128i*)buf, s); - r += buf[0] + buf[1] + buf[2] + buf[3]; - - src1 += blockSize; - src2 += blockSize; - i += blockSize; - } - } -#endif - return r + dotProd_(src1, src2, len - i); -#endif -} - - -static double dotProd_8s(const schar* src1, const schar* src2, int len) -{ - return dotProd_(src1, src2, len); -} - -static double dotProd_16u(const ushort* src1, const ushort* src2, int len) -{ - double r = 0; - IF_IPP(ippiDotProd_16u64f_C1R(src1, (int)(len*sizeof(src1[0])), - src2, (int)(len*sizeof(src2[0])), - ippiSize(len, 1), &r), - r = dotProd_(src1, src2, len)); - return r; -} - -static double dotProd_16s(const short* src1, const short* src2, int len) -{ - double r = 0; - IF_IPP(ippiDotProd_16s64f_C1R(src1, (int)(len*sizeof(src1[0])), - src2, (int)(len*sizeof(src2[0])), - ippiSize(len, 1), &r), - r = dotProd_(src1, src2, len)); - return r; -} - -static double dotProd_32s(const int* src1, const int* src2, int len) -{ - double r = 0; - IF_IPP(ippiDotProd_32s64f_C1R(src1, (int)(len*sizeof(src1[0])), - src2, (int)(len*sizeof(src2[0])), - ippiSize(len, 1), &r), - r = dotProd_(src1, src2, len)); - return r; -} - -static double dotProd_32f(const float* src1, const float* src2, int len) -{ - double r = 0; - IF_IPP(ippsDotProd_32f64f(src1, src2, len, &r), - r = dotProd_(src1, src2, len)); - return r; -} - -static double dotProd_64f(const double* src1, const double* src2, int len) -{ - double r = 0; - IF_IPP(ippsDotProd_64f(src1, src2, len, &r), - r = dotProd_(src1, src2, len)); - return r; -} - - -typedef double (*DotProdFunc)(const uchar* src1, const uchar* src2, int len); - -static DotProdFunc getDotProdFunc(int depth) -{ - static DotProdFunc dotProdTab[] = - { - (DotProdFunc)GET_OPTIMIZED(dotProd_8u), (DotProdFunc)GET_OPTIMIZED(dotProd_8s), - (DotProdFunc)dotProd_16u, (DotProdFunc)dotProd_16s, - (DotProdFunc)dotProd_32s, (DotProdFunc)GET_OPTIMIZED(dotProd_32f), - (DotProdFunc)dotProd_64f, 0 - }; - - return dotProdTab[depth]; -} - -double Mat::dot(InputArray _mat) const -{ - Mat mat = _mat.getMat(); - int cn = channels(); - DotProdFunc func = getDotProdFunc(depth()); - CV_Assert( mat.type() == type() && mat.size == size && func != 0 ); - - if( isContinuous() && mat.isContinuous() ) - { - size_t len = total()*cn; - if( len == (size_t)(int)len ) - return func(data, mat.data, (int)len); - } - - const Mat* arrays[] = {this, &mat, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int len = (int)(it.size*cn); - double r = 0; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - r += func( ptrs[0], ptrs[1], len ); - - return r; -} - -/****************************************************************************************\ -* PCA * -\****************************************************************************************/ - -PCA::PCA() {} - -PCA::PCA(InputArray data, InputArray _mean, int flags, int maxComponents) -{ - operator()(data, _mean, flags, maxComponents); -} - -PCA::PCA(InputArray data, InputArray _mean, int flags, double retainedVariance) -{ - computeVar(data, _mean, flags, retainedVariance); -} - -PCA& PCA::operator()(InputArray _data, InputArray __mean, int flags, int maxComponents) -{ - Mat data = _data.getMat(), _mean = __mean.getMat(); - int covar_flags = CV_COVAR_SCALE; - int i, len, in_count; - Size mean_sz; - - CV_Assert( data.channels() == 1 ); - if( flags & CV_PCA_DATA_AS_COL ) - { - len = data.rows; - in_count = data.cols; - covar_flags |= CV_COVAR_COLS; - mean_sz = Size(1, len); - } - else - { - len = data.cols; - in_count = data.rows; - covar_flags |= CV_COVAR_ROWS; - mean_sz = Size(len, 1); - } - - int count = std::min(len, in_count), out_count = count; - if( maxComponents > 0 ) - out_count = std::min(count, maxComponents); - - // "scrambled" way to compute PCA (when cols(A)>rows(A)): - // B = A'A; B*x=b*x; C = AA'; C*y=c*y -> AA'*y=c*y -> A'A*(A'*y)=c*(A'*y) -> c = b, x=A'*y - if( len <= in_count ) - covar_flags |= CV_COVAR_NORMAL; - - int ctype = std::max(CV_32F, data.depth()); - mean.create( mean_sz, ctype ); - - Mat covar( count, count, ctype ); - - if( _mean.data ) - { - CV_Assert( _mean.size() == mean_sz ); - _mean.convertTo(mean, ctype); - covar_flags |= CV_COVAR_USE_AVG; - } - - calcCovarMatrix( data, covar, mean, covar_flags, ctype ); - eigen( covar, eigenvalues, eigenvectors ); - - if( !(covar_flags & CV_COVAR_NORMAL) ) - { - // CV_PCA_DATA_AS_ROW: cols(A)>rows(A). x=A'*y -> x'=y'*A - // CV_PCA_DATA_AS_COL: rows(A)>cols(A). x=A''*y -> x'=y'*A' - Mat tmp_data, tmp_mean = repeat(mean, data.rows/mean.rows, data.cols/mean.cols); - if( data.type() != ctype || tmp_mean.data == mean.data ) - { - data.convertTo( tmp_data, ctype ); - subtract( tmp_data, tmp_mean, tmp_data ); - } - else - { - subtract( data, tmp_mean, tmp_mean ); - tmp_data = tmp_mean; - } - - Mat evects1(count, len, ctype); - gemm( eigenvectors, tmp_data, 1, Mat(), 0, evects1, - (flags & CV_PCA_DATA_AS_COL) ? CV_GEMM_B_T : 0); - eigenvectors = evects1; - - // normalize eigenvectors - for( i = 0; i < out_count; i++ ) - { - Mat vec = eigenvectors.row(i); - normalize(vec, vec); - } - } - - if( count > out_count ) - { - // use clone() to physically copy the data and thus deallocate the original matrices - eigenvalues = eigenvalues.rowRange(0,out_count).clone(); - eigenvectors = eigenvectors.rowRange(0,out_count).clone(); - } - return *this; -} - -template -int computeCumulativeEnergy(const Mat& eigenvalues, double retainedVariance) -{ - CV_DbgAssert( eigenvalues.type() == DataType::type ); - - Mat g(eigenvalues.size(), DataType::type); - - for(int ig = 0; ig < g.rows; ig++) - { - g.at(ig, 0) = 0; - for(int im = 0; im <= ig; im++) - { - g.at(ig,0) += eigenvalues.at(im,0); - } - } - - int L; - - for(L = 0; L < eigenvalues.rows; L++) - { - double energy = g.at(L, 0) / g.at(g.rows - 1, 0); - if(energy > retainedVariance) - break; - } - - L = std::max(2, L); - - return L; -} - -PCA& PCA::computeVar(InputArray _data, InputArray __mean, int flags, double retainedVariance) -{ - Mat data = _data.getMat(), _mean = __mean.getMat(); - int covar_flags = CV_COVAR_SCALE; - int i, len, in_count; - Size mean_sz; - - CV_Assert( data.channels() == 1 ); - if( flags & CV_PCA_DATA_AS_COL ) - { - len = data.rows; - in_count = data.cols; - covar_flags |= CV_COVAR_COLS; - mean_sz = Size(1, len); - } - else - { - len = data.cols; - in_count = data.rows; - covar_flags |= CV_COVAR_ROWS; - mean_sz = Size(len, 1); - } - - CV_Assert( retainedVariance > 0 && retainedVariance <= 1 ); - - int count = std::min(len, in_count); - - // "scrambled" way to compute PCA (when cols(A)>rows(A)): - // B = A'A; B*x=b*x; C = AA'; C*y=c*y -> AA'*y=c*y -> A'A*(A'*y)=c*(A'*y) -> c = b, x=A'*y - if( len <= in_count ) - covar_flags |= CV_COVAR_NORMAL; - - int ctype = std::max(CV_32F, data.depth()); - mean.create( mean_sz, ctype ); - - Mat covar( count, count, ctype ); - - if( _mean.data ) - { - CV_Assert( _mean.size() == mean_sz ); - _mean.convertTo(mean, ctype); - } - - calcCovarMatrix( data, covar, mean, covar_flags, ctype ); - eigen( covar, eigenvalues, eigenvectors ); - - if( !(covar_flags & CV_COVAR_NORMAL) ) - { - // CV_PCA_DATA_AS_ROW: cols(A)>rows(A). x=A'*y -> x'=y'*A - // CV_PCA_DATA_AS_COL: rows(A)>cols(A). x=A''*y -> x'=y'*A' - Mat tmp_data, tmp_mean = repeat(mean, data.rows/mean.rows, data.cols/mean.cols); - if( data.type() != ctype || tmp_mean.data == mean.data ) - { - data.convertTo( tmp_data, ctype ); - subtract( tmp_data, tmp_mean, tmp_data ); - } - else - { - subtract( data, tmp_mean, tmp_mean ); - tmp_data = tmp_mean; - } - - Mat evects1(count, len, ctype); - gemm( eigenvectors, tmp_data, 1, Mat(), 0, evects1, - (flags & CV_PCA_DATA_AS_COL) ? CV_GEMM_B_T : 0); - eigenvectors = evects1; - - // normalize all eigenvectors - for( i = 0; i < eigenvectors.rows; i++ ) - { - Mat vec = eigenvectors.row(i); - normalize(vec, vec); - } - } - - // compute the cumulative energy content for each eigenvector - int L; - if (ctype == CV_32F) - L = computeCumulativeEnergy(eigenvalues, retainedVariance); - else - L = computeCumulativeEnergy(eigenvalues, retainedVariance); - - // use clone() to physically copy the data and thus deallocate the original matrices - eigenvalues = eigenvalues.rowRange(0,L).clone(); - eigenvectors = eigenvectors.rowRange(0,L).clone(); - - return *this; -} - -void PCA::project(InputArray _data, OutputArray result) const -{ - Mat data = _data.getMat(); - CV_Assert( mean.data && eigenvectors.data && - ((mean.rows == 1 && mean.cols == data.cols) || (mean.cols == 1 && mean.rows == data.rows))); - Mat tmp_data, tmp_mean = repeat(mean, data.rows/mean.rows, data.cols/mean.cols); - int ctype = mean.type(); - if( data.type() != ctype || tmp_mean.data == mean.data ) - { - data.convertTo( tmp_data, ctype ); - subtract( tmp_data, tmp_mean, tmp_data ); - } - else - { - subtract( data, tmp_mean, tmp_mean ); - tmp_data = tmp_mean; - } - if( mean.rows == 1 ) - gemm( tmp_data, eigenvectors, 1, Mat(), 0, result, GEMM_2_T ); - else - gemm( eigenvectors, tmp_data, 1, Mat(), 0, result, 0 ); -} - -Mat PCA::project(InputArray data) const -{ - Mat result; - project(data, result); - return result; -} - -void PCA::backProject(InputArray _data, OutputArray result) const -{ - Mat data = _data.getMat(); - CV_Assert( mean.data && eigenvectors.data && - ((mean.rows == 1 && eigenvectors.rows == data.cols) || - (mean.cols == 1 && eigenvectors.rows == data.rows))); - - Mat tmp_data, tmp_mean; - data.convertTo(tmp_data, mean.type()); - if( mean.rows == 1 ) - { - tmp_mean = repeat(mean, data.rows, 1); - gemm( tmp_data, eigenvectors, 1, tmp_mean, 1, result, 0 ); - } - else - { - tmp_mean = repeat(mean, 1, data.cols); - gemm( eigenvectors, tmp_data, 1, tmp_mean, 1, result, GEMM_1_T ); - } -} - -Mat PCA::backProject(InputArray data) const -{ - Mat result; - backProject(data, result); - return result; -} - -} - -void cv::PCACompute(InputArray data, InputOutputArray mean, - OutputArray eigenvectors, int maxComponents) -{ - PCA pca; - pca(data, mean, 0, maxComponents); - pca.mean.copyTo(mean); - pca.eigenvectors.copyTo(eigenvectors); -} - -void cv::PCAComputeVar(InputArray data, InputOutputArray mean, - OutputArray eigenvectors, double retainedVariance) -{ - PCA pca; - pca.computeVar(data, mean, 0, retainedVariance); - pca.mean.copyTo(mean); - pca.eigenvectors.copyTo(eigenvectors); -} - -void cv::PCAProject(InputArray data, InputArray mean, - InputArray eigenvectors, OutputArray result) -{ - PCA pca; - pca.mean = mean.getMat(); - pca.eigenvectors = eigenvectors.getMat(); - pca.project(data, result); -} - -void cv::PCABackProject(InputArray data, InputArray mean, - InputArray eigenvectors, OutputArray result) -{ - PCA pca; - pca.mean = mean.getMat(); - pca.eigenvectors = eigenvectors.getMat(); - pca.backProject(data, result); -} - - -/****************************************************************************************\ -* Earlier API * -\****************************************************************************************/ - -CV_IMPL void cvGEMM( const CvArr* Aarr, const CvArr* Barr, double alpha, - const CvArr* Carr, double beta, CvArr* Darr, int flags ) -{ - cv::Mat A = cv::cvarrToMat(Aarr), B = cv::cvarrToMat(Barr); - cv::Mat C, D = cv::cvarrToMat(Darr); - - if( Carr ) - C = cv::cvarrToMat(Carr); - - CV_Assert( (D.rows == ((flags & CV_GEMM_A_T) == 0 ? A.rows : A.cols)) && - (D.cols == ((flags & CV_GEMM_B_T) == 0 ? B.cols : B.rows)) && - D.type() == A.type() ); - - gemm( A, B, alpha, C, beta, D, flags ); -} - - -CV_IMPL void -cvTransform( const CvArr* srcarr, CvArr* dstarr, - const CvMat* transmat, const CvMat* shiftvec ) -{ - cv::Mat m = cv::cvarrToMat(transmat), src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - if( shiftvec ) - { - cv::Mat v = cv::cvarrToMat(shiftvec).reshape(1,m.rows), - _m(m.rows, m.cols + 1, m.type()), m1 = _m.colRange(0,m.cols), v1 = _m.col(m.cols); - m.convertTo(m1, m1.type()); - v.convertTo(v1, v1.type()); - m = _m; - } - - CV_Assert( dst.depth() == src.depth() && dst.channels() == m.rows ); - cv::transform( src, dst, m ); -} - - -CV_IMPL void -cvPerspectiveTransform( const CvArr* srcarr, CvArr* dstarr, const CvMat* mat ) -{ - cv::Mat m = cv::cvarrToMat(mat), src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( dst.type() == src.type() && dst.channels() == m.rows-1 ); - cv::perspectiveTransform( src, dst, m ); -} - - -CV_IMPL void cvScaleAdd( const CvArr* srcarr1, CvScalar scale, - const CvArr* srcarr2, CvArr* dstarr ) -{ - cv::Mat src1 = cv::cvarrToMat(srcarr1), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src1.size == dst.size && src1.type() == dst.type() ); - cv::scaleAdd( src1, scale.val[0], cv::cvarrToMat(srcarr2), dst ); -} - - -CV_IMPL void -cvCalcCovarMatrix( const CvArr** vecarr, int count, - CvArr* covarr, CvArr* avgarr, int flags ) -{ - cv::Mat cov0 = cv::cvarrToMat(covarr), cov = cov0, mean0, mean; - CV_Assert( vecarr != 0 && count >= 1 ); - - if( avgarr ) - mean = mean0 = cv::cvarrToMat(avgarr); - - if( (flags & CV_COVAR_COLS) != 0 || (flags & CV_COVAR_ROWS) != 0 ) - { - - cv::Mat data = cv::cvarrToMat(vecarr[0]); - cv::calcCovarMatrix( data, cov, mean, flags, cov.type() ); - } - else - { - std::vector data(count); - for( int i = 0; i < count; i++ ) - data[i] = cv::cvarrToMat(vecarr[i]); - cv::calcCovarMatrix( &data[0], count, cov, mean, flags, cov.type() ); - } - - if( mean.data != mean0.data && mean0.data ) - mean.convertTo(mean0, mean0.type()); - - if( cov.data != cov0.data ) - cov.convertTo(cov0, cov0.type()); -} - - -CV_IMPL double -cvMahalanobis( const CvArr* srcAarr, const CvArr* srcBarr, const CvArr* matarr ) -{ - return cv::Mahalanobis(cv::cvarrToMat(srcAarr), - cv::cvarrToMat(srcBarr), cv::cvarrToMat(matarr)); -} - -CV_IMPL void -cvMulTransposed( const CvArr* srcarr, CvArr* dstarr, - int order, const CvArr* deltaarr, double scale ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0, delta; - if( deltaarr ) - delta = cv::cvarrToMat(deltaarr); - cv::mulTransposed( src, dst, order != 0, delta, scale, dst.type()); - if( dst.data != dst0.data ) - dst.convertTo(dst0, dst0.type()); -} - -CV_IMPL double cvDotProduct( const CvArr* srcAarr, const CvArr* srcBarr ) -{ - return cv::cvarrToMat(srcAarr).dot(cv::cvarrToMat(srcBarr)); -} - - -CV_IMPL void -cvCalcPCA( const CvArr* data_arr, CvArr* avg_arr, CvArr* eigenvals, CvArr* eigenvects, int flags ) -{ - cv::Mat data = cv::cvarrToMat(data_arr), mean0 = cv::cvarrToMat(avg_arr); - cv::Mat evals0 = cv::cvarrToMat(eigenvals), evects0 = cv::cvarrToMat(eigenvects); - cv::Mat mean = mean0, evals = evals0, evects = evects0; - - cv::PCA pca; - pca.mean = mean; - pca.eigenvalues = evals; - pca.eigenvectors = evects; - - pca(data, (flags & CV_PCA_USE_AVG) ? mean : cv::Mat(), - flags, evals.data ? evals.rows + evals.cols - 1 : 0); - - if( pca.mean.size() == mean.size() ) - pca.mean.convertTo( mean, mean.type() ); - else - { - cv::Mat temp; pca.mean.convertTo( temp, mean.type() ); - transpose( temp, mean ); - } - - evals = pca.eigenvalues; - evects = pca.eigenvectors; - int ecount0 = evals0.cols + evals0.rows - 1; - int ecount = evals.cols + evals.rows - 1; - - CV_Assert( (evals0.cols == 1 || evals0.rows == 1) && - ecount0 <= ecount && - evects0.cols == evects.cols && - evects0.rows == ecount0 ); - - cv::Mat temp = evals0; - if( evals.rows == 1 ) - evals.colRange(0, ecount0).convertTo(temp, evals0.type()); - else - evals.rowRange(0, ecount0).convertTo(temp, evals0.type()); - if( temp.data != evals0.data ) - transpose(temp, evals0); - evects.rowRange(0, ecount0).convertTo( evects0, evects0.type() ); - - // otherwise some datatype's or size's were incorrect, so the output arrays have been reallocated - CV_Assert( mean0.data == mean.data ); -} - - -CV_IMPL void -cvProjectPCA( const CvArr* data_arr, const CvArr* avg_arr, - const CvArr* eigenvects, CvArr* result_arr ) -{ - cv::Mat data = cv::cvarrToMat(data_arr), mean = cv::cvarrToMat(avg_arr); - cv::Mat evects = cv::cvarrToMat(eigenvects), dst0 = cv::cvarrToMat(result_arr), dst = dst0; - - cv::PCA pca; - pca.mean = mean; - int n; - if( mean.rows == 1 ) - { - CV_Assert(dst.cols <= evects.rows && dst.rows == data.rows); - n = dst.cols; - } - else - { - CV_Assert(dst.rows <= evects.rows && dst.cols == data.cols); - n = dst.rows; - } - pca.eigenvectors = evects.rowRange(0, n); - - cv::Mat result = pca.project(data); - if( result.cols != dst.cols ) - result = result.reshape(1, 1); - result.convertTo(dst, dst.type()); - - CV_Assert(dst0.data == dst.data); -} - - -CV_IMPL void -cvBackProjectPCA( const CvArr* proj_arr, const CvArr* avg_arr, - const CvArr* eigenvects, CvArr* result_arr ) -{ - cv::Mat data = cv::cvarrToMat(proj_arr), mean = cv::cvarrToMat(avg_arr); - cv::Mat evects = cv::cvarrToMat(eigenvects), dst0 = cv::cvarrToMat(result_arr), dst = dst0; - - cv::PCA pca; - pca.mean = mean; - int n; - if( mean.rows == 1 ) - { - CV_Assert(data.cols <= evects.rows && dst.rows == data.rows); - n = data.cols; - } - else - { - CV_Assert(data.rows <= evects.rows && dst.cols == data.cols); - n = data.rows; - } - pca.eigenvectors = evects.rowRange(0, n); - - cv::Mat result = pca.backProject(data); - result.convertTo(dst, dst.type()); - - CV_Assert(dst0.data == dst.data); -} - -/* End of file. */ diff --git a/modules/core/src/matop.cpp b/modules/core/src/matop.cpp deleted file mode 100644 index 5c51814..0000000 --- a/modules/core/src/matop.cpp +++ /dev/null @@ -1,1651 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// Mat basic operations: Copy, Set -// -// */ - -#include "precomp.hpp" - -namespace cv -{ - -class MatOp_Identity : public MatOp -{ -public: - MatOp_Identity() {} - virtual ~MatOp_Identity() {} - - bool elementWise(const MatExpr& /*expr*/) const { return true; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - static void makeExpr(MatExpr& res, const Mat& m); -}; - -static MatOp_Identity g_MatOp_Identity; - -class MatOp_AddEx : public MatOp -{ -public: - MatOp_AddEx() {} - virtual ~MatOp_AddEx() {} - - bool elementWise(const MatExpr& /*expr*/) const { return true; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void add(const MatExpr& e1, const Scalar& s, MatExpr& res) const; - void subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const; - void multiply(const MatExpr& e1, double s, MatExpr& res) const; - void divide(double s, const MatExpr& e, MatExpr& res) const; - - void transpose(const MatExpr& e1, MatExpr& res) const; - void abs(const MatExpr& expr, MatExpr& res) const; - - static void makeExpr(MatExpr& res, const Mat& a, const Mat& b, double alpha, double beta, const Scalar& s=Scalar()); -}; - -static MatOp_AddEx g_MatOp_AddEx; - -class MatOp_Bin : public MatOp -{ -public: - MatOp_Bin() {} - virtual ~MatOp_Bin() {} - - bool elementWise(const MatExpr& /*expr*/) const { return true; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void multiply(const MatExpr& e1, double s, MatExpr& res) const; - void divide(double s, const MatExpr& e, MatExpr& res) const; - - static void makeExpr(MatExpr& res, char op, const Mat& a, const Mat& b, double scale=1); - static void makeExpr(MatExpr& res, char op, const Mat& a, const Scalar& s); -}; - -static MatOp_Bin g_MatOp_Bin; - -class MatOp_Cmp : public MatOp -{ -public: - MatOp_Cmp() {} - virtual ~MatOp_Cmp() {} - - bool elementWise(const MatExpr& /*expr*/) const { return true; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - static void makeExpr(MatExpr& res, int cmpop, const Mat& a, const Mat& b); - static void makeExpr(MatExpr& res, int cmpop, const Mat& a, double alpha); -}; - -static MatOp_Cmp g_MatOp_Cmp; - -class MatOp_GEMM : public MatOp -{ -public: - MatOp_GEMM() {} - virtual ~MatOp_GEMM() {} - - bool elementWise(const MatExpr& /*expr*/) const { return false; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void add(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const; - void subtract(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const; - void multiply(const MatExpr& e, double s, MatExpr& res) const; - - void transpose(const MatExpr& expr, MatExpr& res) const; - - static void makeExpr(MatExpr& res, int flags, const Mat& a, const Mat& b, - double alpha=1, const Mat& c=Mat(), double beta=1); -}; - -static MatOp_GEMM g_MatOp_GEMM; - -class MatOp_Invert : public MatOp -{ -public: - MatOp_Invert() {} - virtual ~MatOp_Invert() {} - - bool elementWise(const MatExpr& /*expr*/) const { return false; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void matmul(const MatExpr& expr1, const MatExpr& expr2, MatExpr& res) const; - - static void makeExpr(MatExpr& res, int method, const Mat& m); -}; - -static MatOp_Invert g_MatOp_Invert; - -class MatOp_T : public MatOp -{ -public: - MatOp_T() {} - virtual ~MatOp_T() {} - - bool elementWise(const MatExpr& /*expr*/) const { return false; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void multiply(const MatExpr& e1, double s, MatExpr& res) const; - void transpose(const MatExpr& expr, MatExpr& res) const; - - static void makeExpr(MatExpr& res, const Mat& a, double alpha=1); -}; - -static MatOp_T g_MatOp_T; - -class MatOp_Solve : public MatOp -{ -public: - MatOp_Solve() {} - virtual ~MatOp_Solve() {} - - bool elementWise(const MatExpr& /*expr*/) const { return false; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - static void makeExpr(MatExpr& res, int method, const Mat& a, const Mat& b); -}; - -static MatOp_Solve g_MatOp_Solve; - -class MatOp_Initializer : public MatOp -{ -public: - MatOp_Initializer() {} - virtual ~MatOp_Initializer() {} - - bool elementWise(const MatExpr& /*expr*/) const { return false; } - void assign(const MatExpr& expr, Mat& m, int type=-1) const; - - void multiply(const MatExpr& e, double s, MatExpr& res) const; - - static void makeExpr(MatExpr& res, int method, Size sz, int type, double alpha=1); -}; - -static MatOp_Initializer g_MatOp_Initializer; - -static inline bool isIdentity(const MatExpr& e) { return e.op == &g_MatOp_Identity; } -static inline bool isAddEx(const MatExpr& e) { return e.op == &g_MatOp_AddEx; } -static inline bool isScaled(const MatExpr& e) { return isAddEx(e) && (!e.b.data || e.beta == 0) && e.s == Scalar(); } -static inline bool isBin(const MatExpr& e, char c) { return e.op == &g_MatOp_Bin && e.flags == c; } -static inline bool isCmp(const MatExpr& e) { return e.op == &g_MatOp_Cmp; } -static inline bool isReciprocal(const MatExpr& e) { return isBin(e,'/') && (!e.b.data || e.beta == 0); } -static inline bool isT(const MatExpr& e) { return e.op == &g_MatOp_T; } -static inline bool isInv(const MatExpr& e) { return e.op == &g_MatOp_Invert; } -static inline bool isSolve(const MatExpr& e) { return e.op == &g_MatOp_Solve; } -static inline bool isGEMM(const MatExpr& e) { return e.op == &g_MatOp_GEMM; } -static inline bool isMatProd(const MatExpr& e) { return e.op == &g_MatOp_GEMM && (!e.c.data || e.beta == 0); } -static inline bool isInitializer(const MatExpr& e) { return e.op == &g_MatOp_Initializer; } - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -bool MatOp::elementWise(const MatExpr& /*expr*/) const -{ - return false; -} - -void MatOp::roi(const MatExpr& expr, const Range& rowRange, const Range& colRange, MatExpr& e) const -{ - if( elementWise(expr) ) - { - e = MatExpr(expr.op, expr.flags, Mat(), Mat(), Mat(), - expr.alpha, expr.beta, expr.s); - if(expr.a.data) - e.a = expr.a(rowRange, colRange); - if(expr.b.data) - e.b = expr.b(rowRange, colRange); - if(expr.c.data) - e.c = expr.c(rowRange, colRange); - } - else - { - Mat m; - expr.op->assign(expr, m); - e = MatExpr(&g_MatOp_Identity, 0, m(rowRange, colRange), Mat(), Mat()); - } -} - -void MatOp::diag(const MatExpr& expr, int d, MatExpr& e) const -{ - if( elementWise(expr) ) - { - e = MatExpr(expr.op, expr.flags, Mat(), Mat(), Mat(), - expr.alpha, expr.beta, expr.s); - if(expr.a.data) - e.a = expr.a.diag(d); - if(expr.b.data) - e.b = expr.b.diag(d); - if(expr.c.data) - e.c = expr.c.diag(d); - } - else - { - Mat m; - expr.op->assign(expr, m); - e = MatExpr(&g_MatOp_Identity, 0, m.diag(d), Mat(), Mat()); - } -} - - -void MatOp::augAssignAdd(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m += temp; -} - - -void MatOp::augAssignSubtract(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m -= temp; -} - - -void MatOp::augAssignMultiply(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m *= temp; -} - - -void MatOp::augAssignDivide(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m /= temp; -} - - -void MatOp::augAssignAnd(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m &= temp; -} - - -void MatOp::augAssignOr(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m |= temp; -} - - -void MatOp::augAssignXor(const MatExpr& expr, Mat& m) const -{ - Mat temp; - expr.op->assign(expr, temp); - m ^= temp; -} - - -void MatOp::add(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - if( this == e2.op ) - { - double alpha = 1, beta = 1; - Scalar s; - Mat m1, m2; - if( isAddEx(e1) && (!e1.b.data || e1.beta == 0) ) - { - m1 = e1.a; - alpha = e1.alpha; - s = e1.s; - } - else - e1.op->assign(e1, m1); - - if( isAddEx(e2) && (!e2.b.data || e2.beta == 0) ) - { - m2 = e2.a; - beta = e2.alpha; - s += e2.s; - } - else - e2.op->assign(e2, m2); - MatOp_AddEx::makeExpr(res, m1, m2, alpha, beta, s); - } - else - e2.op->add(e1, e2, res); -} - - -void MatOp::add(const MatExpr& expr1, const Scalar& s, MatExpr& res) const -{ - Mat m1; - expr1.op->assign(expr1, m1); - MatOp_AddEx::makeExpr(res, m1, Mat(), 1, 0, s); -} - - -void MatOp::subtract(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - if( this == e2.op ) - { - double alpha = 1, beta = -1; - Scalar s; - Mat m1, m2; - if( isAddEx(e1) && (!e1.b.data || e1.beta == 0) ) - { - m1 = e1.a; - alpha = e1.alpha; - s = e1.s; - } - else - e1.op->assign(e1, m1); - - if( isAddEx(e2) && (!e2.b.data || e2.beta == 0) ) - { - m2 = e2.a; - beta = -e2.alpha; - s -= e2.s; - } - else - e2.op->assign(e2, m2); - MatOp_AddEx::makeExpr(res, m1, m2, alpha, beta, s); - } - else - e2.op->subtract(e1, e2, res); -} - - -void MatOp::subtract(const Scalar& s, const MatExpr& expr, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_AddEx::makeExpr(res, m, Mat(), -1, 0, s); -} - - -void MatOp::multiply(const MatExpr& e1, const MatExpr& e2, MatExpr& res, double scale) const -{ - if( this == e2.op ) - { - Mat m1, m2; - - if( isReciprocal(e1) ) - { - if( isScaled(e2) ) - { - scale *= e2.alpha; - m2 = e2.a; - } - else - e2.op->assign(e2, m2); - - MatOp_Bin::makeExpr(res, '/', m2, e1.a, scale/e1.alpha); - } - else - { - char op = '*'; - if( isScaled(e1) ) - { - m1 = e1.a; - scale *= e1.alpha; - } - else - e1.op->assign(e1, m1); - - if( isScaled(e2) ) - { - m2 = e2.a; - scale *= e2.alpha; - } - else if( isReciprocal(e2) ) - { - op = '/'; - m2 = e2.a; - scale /= e2.alpha; - } - else - e2.op->assign(e2, m2); - - MatOp_Bin::makeExpr(res, op, m1, m2, scale); - } - } - else - e2.op->multiply(e1, e2, res, scale); -} - - -void MatOp::multiply(const MatExpr& expr, double s, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_AddEx::makeExpr(res, m, Mat(), s, 0); -} - - -void MatOp::divide(const MatExpr& e1, const MatExpr& e2, MatExpr& res, double scale) const -{ - if( this == e2.op ) - { - if( isReciprocal(e1) && isReciprocal(e2) ) - MatOp_Bin::makeExpr(res, '/', e2.a, e1.a, e1.alpha/e2.alpha); - else - { - Mat m1, m2; - char op = '/'; - - if( isScaled(e1) ) - { - m1 = e1.a; - scale *= e1.alpha; - } - else - e1.op->assign(e1, m1); - - if( isScaled(e2) ) - { - m2 = e2.a; - scale /= e2.alpha; - } - else if( isReciprocal(e2) ) - { - m2 = e2.a; - scale /= e2.alpha; - op = '*'; - } - else - e2.op->assign(e2, m2); - MatOp_Bin::makeExpr(res, op, m1, m2, scale); - } - } - else - e2.op->divide(e1, e2, res, scale); -} - - -void MatOp::divide(double s, const MatExpr& expr, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_Bin::makeExpr(res, '/', m, Mat(), s); -} - - -void MatOp::abs(const MatExpr& expr, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_Bin::makeExpr(res, 'a', m, Mat()); -} - - -void MatOp::transpose(const MatExpr& expr, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_T::makeExpr(res, m, 1); -} - - -void MatOp::matmul(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - if( this == e2.op ) - { - double scale = 1; - int flags = 0; - Mat m1, m2; - - if( isT(e1) ) - { - flags = CV_GEMM_A_T; - scale = e1.alpha; - m1 = e1.a; - } - else if( isScaled(e1) ) - { - scale = e1.alpha; - m1 = e1.a; - } - else - e1.op->assign(e1, m1); - - if( isT(e2) ) - { - flags |= CV_GEMM_B_T; - scale *= e2.alpha; - m2 = e2.a; - } - else if( isScaled(e2) ) - { - scale *= e2.alpha; - m2 = e2.a; - } - else - e2.op->assign(e2, m2); - - MatOp_GEMM::makeExpr(res, flags, m1, m2, scale); - } - else - e2.op->matmul(e1, e2, res); -} - - -void MatOp::invert(const MatExpr& expr, int method, MatExpr& res) const -{ - Mat m; - expr.op->assign(expr, m); - MatOp_Invert::makeExpr(res, method, m); -} - - -Size MatOp::size(const MatExpr& expr) const -{ - return !expr.a.empty() ? expr.a.size() : expr.b.empty() ? expr.b.size() : expr.c.size(); -} - -int MatOp::type(const MatExpr& expr) const -{ - return !expr.a.empty() ? expr.a.type() : expr.b.empty() ? expr.b.type() : expr.c.type(); -} - -////////////////////////////////////////////////////////////////////////////////////////////////// - -MatExpr::MatExpr(const Mat& m) : op(&g_MatOp_Identity), flags(0), a(m), b(Mat()), c(Mat()), alpha(1), beta(0), s(Scalar()) -{ -} - -MatExpr MatExpr::row(int y) const -{ - MatExpr e; - op->roi(*this, Range(y, y+1), Range::all(), e); - return e; -} - -MatExpr MatExpr::col(int x) const -{ - MatExpr e; - op->roi(*this, Range::all(), Range(x, x+1), e); - return e; -} - -MatExpr MatExpr::diag(int d) const -{ - MatExpr e; - op->diag(*this, d, e); - return e; -} - -MatExpr MatExpr::operator()( const Range& rowRange, const Range& colRange ) const -{ - MatExpr e; - op->roi(*this, rowRange, colRange, e); - return e; -} - -MatExpr MatExpr::operator()( const Rect& roi ) const -{ - MatExpr e; - op->roi(*this, Range(roi.y, roi.y + roi.height), Range(roi.x, roi.x + roi.width), e); - return e; -} - -Mat MatExpr::cross(const Mat& m) const -{ - return ((Mat)*this).cross(m); -} - -double MatExpr::dot(const Mat& m) const -{ - return ((Mat)*this).dot(m); -} - -MatExpr MatExpr::t() const -{ - MatExpr e; - op->transpose(*this, e); - return e; -} - -MatExpr MatExpr::inv(int method) const -{ - MatExpr e; - op->invert(*this, method, e); - return e; -} - -MatExpr MatExpr::mul(const MatExpr& e, double scale) const -{ - MatExpr en; - op->multiply(*this, e, en, scale); - return en; -} - -MatExpr MatExpr::mul(const Mat& m, double scale) const -{ - MatExpr e; - op->multiply(*this, MatExpr(m), e, scale); - return e; -} - -MatExpr operator + (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, b, 1, 1); - return e; -} - -MatExpr operator + (const Mat& a, const Scalar& s) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, s); - return e; -} - -MatExpr operator + (const Scalar& s, const Mat& a) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, s); - return e; -} - -MatExpr operator + (const MatExpr& e, const Mat& m) -{ - MatExpr en; - e.op->add(e, MatExpr(m), en); - return en; -} - -MatExpr operator + (const Mat& m, const MatExpr& e) -{ - MatExpr en; - e.op->add(e, MatExpr(m), en); - return en; -} - -MatExpr operator + (const MatExpr& e, const Scalar& s) -{ - MatExpr en; - e.op->add(e, s, en); - return en; -} - -MatExpr operator + (const Scalar& s, const MatExpr& e) -{ - MatExpr en; - e.op->add(e, s, en); - return en; -} - -MatExpr operator + (const MatExpr& e1, const MatExpr& e2) -{ - MatExpr en; - e1.op->add(e1, e2, en); - return en; -} - -MatExpr operator - (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, b, 1, -1); - return e; -} - -MatExpr operator - (const Mat& a, const Scalar& s) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, -s); - return e; -} - -MatExpr operator - (const Scalar& s, const Mat& a) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), -1, 0, s); - return e; -} - -MatExpr operator - (const MatExpr& e, const Mat& m) -{ - MatExpr en; - e.op->subtract(e, MatExpr(m), en); - return en; -} - -MatExpr operator - (const Mat& m, const MatExpr& e) -{ - MatExpr en; - e.op->subtract(MatExpr(m), e, en); - return en; -} - -MatExpr operator - (const MatExpr& e, const Scalar& s) -{ - MatExpr en; - e.op->add(e, -s, en); - return en; -} - -MatExpr operator - (const Scalar& s, const MatExpr& e) -{ - MatExpr en; - e.op->subtract(s, e, en); - return en; -} - -MatExpr operator - (const MatExpr& e1, const MatExpr& e2) -{ - MatExpr en; - e1.op->subtract(e1, e2, en); - return en; -} - -MatExpr operator - (const Mat& m) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, m, Mat(), -1, 0); - return e; -} - -MatExpr operator - (const MatExpr& e) -{ - MatExpr en; - e.op->subtract(Scalar(0), e, en); - return en; -} - -MatExpr operator * (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_GEMM::makeExpr(e, 0, a, b); - return e; -} - -MatExpr operator * (const Mat& a, double s) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), s, 0); - return e; -} - -MatExpr operator * (double s, const Mat& a) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), s, 0); - return e; -} - -MatExpr operator * (const MatExpr& e, const Mat& m) -{ - MatExpr en; - e.op->matmul(e, MatExpr(m), en); - return en; -} - -MatExpr operator * (const Mat& m, const MatExpr& e) -{ - MatExpr en; - e.op->matmul(MatExpr(m), e, en); - return en; -} - -MatExpr operator * (const MatExpr& e, double s) -{ - MatExpr en; - e.op->multiply(e, s, en); - return en; -} - -MatExpr operator * (double s, const MatExpr& e) -{ - MatExpr en; - e.op->multiply(e, s, en); - return en; -} - -MatExpr operator * (const MatExpr& e1, const MatExpr& e2) -{ - MatExpr en; - e1.op->matmul(e1, e2, en); - return en; -} - -MatExpr operator / (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '/', a, b); - return e; -} - -MatExpr operator / (const Mat& a, double s) -{ - MatExpr e; - MatOp_AddEx::makeExpr(e, a, Mat(), 1./s, 0); - return e; -} - -MatExpr operator / (double s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '/', a, Mat(), s); - return e; -} - -MatExpr operator / (const MatExpr& e, const Mat& m) -{ - MatExpr en; - e.op->divide(e, MatExpr(m), en); - return en; -} - -MatExpr operator / (const Mat& m, const MatExpr& e) -{ - MatExpr en; - e.op->divide(MatExpr(m), e, en); - return en; -} - -MatExpr operator / (const MatExpr& e, double s) -{ - MatExpr en; - e.op->multiply(e, 1./s, en); - return en; -} - -MatExpr operator / (double s, const MatExpr& e) -{ - MatExpr en; - e.op->divide(s, e, en); - return en; -} - -MatExpr operator / (const MatExpr& e1, const MatExpr& e2) -{ - MatExpr en; - e1.op->divide(e1, e2, en); - return en; -} - -MatExpr operator < (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, b); - return e; -} - -MatExpr operator < (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, s); - return e; -} - -MatExpr operator < (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, s); - return e; -} - -MatExpr operator <= (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, b); - return e; -} - -MatExpr operator <= (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, s); - return e; -} - -MatExpr operator <= (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, s); - return e; -} - -MatExpr operator == (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, b); - return e; -} - -MatExpr operator == (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, s); - return e; -} - -MatExpr operator == (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, s); - return e; -} - -MatExpr operator != (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, b); - return e; -} - -MatExpr operator != (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, s); - return e; -} - -MatExpr operator != (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, s); - return e; -} - -MatExpr operator >= (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, b); - return e; -} - -MatExpr operator >= (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, s); - return e; -} - -MatExpr operator >= (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, s); - return e; -} - -MatExpr operator > (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, b); - return e; -} - -MatExpr operator > (const Mat& a, double s) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, s); - return e; -} - -MatExpr operator > (double s, const Mat& a) -{ - MatExpr e; - MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, s); - return e; -} - -MatExpr min(const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'm', a, b); - return e; -} - -MatExpr min(const Mat& a, double s) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'm', a, s); - return e; -} - -MatExpr min(double s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'm', a, s); - return e; -} - -MatExpr max(const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'M', a, b); - return e; -} - -MatExpr max(const Mat& a, double s) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'M', a, s); - return e; -} - -MatExpr max(double s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'M', a, s); - return e; -} - -MatExpr operator & (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '&', a, b); - return e; -} - -MatExpr operator & (const Mat& a, const Scalar& s) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '&', a, s); - return e; -} - -MatExpr operator & (const Scalar& s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '&', a, s); - return e; -} - -MatExpr operator | (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '|', a, b); - return e; -} - -MatExpr operator | (const Mat& a, const Scalar& s) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '|', a, s); - return e; -} - -MatExpr operator | (const Scalar& s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '|', a, s); - return e; -} - -MatExpr operator ^ (const Mat& a, const Mat& b) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '^', a, b); - return e; -} - -MatExpr operator ^ (const Mat& a, const Scalar& s) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '^', a, s); - return e; -} - -MatExpr operator ^ (const Scalar& s, const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '^', a, s); - return e; -} - -MatExpr operator ~(const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, '~', a, Scalar()); - return e; -} - -MatExpr abs(const Mat& a) -{ - MatExpr e; - MatOp_Bin::makeExpr(e, 'a', a, Scalar()); - return e; -} - -MatExpr abs(const MatExpr& e) -{ - MatExpr en; - e.op->abs(e, en); - return en; -} - - -Size MatExpr::size() const -{ - if( isT(*this) || isInv(*this) ) - return Size(a.rows, a.cols); - if( isGEMM(*this) ) - return Size(b.cols, a.rows); - if( isSolve(*this) ) - return Size(b.cols, a.cols); - if( isInitializer(*this) ) - return a.size(); - return op ? op->size(*this) : Size(); -} - - -int MatExpr::type() const -{ - if( isInitializer(*this) ) - return a.type(); - if( isCmp(*this) ) - return CV_8U; - return op ? op->type(*this) : -1; -} - - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Identity::assign(const MatExpr& e, Mat& m, int _type) const -{ - if( _type == -1 || _type == e.a.type() ) - m = e.a; - else - { - CV_Assert( CV_MAT_CN(_type) == e.a.channels() ); - e.a.convertTo(m, _type); - } -} - -inline void MatOp_Identity::makeExpr(MatExpr& res, const Mat& m) -{ - res = MatExpr(&g_MatOp_Identity, 0, m, Mat(), Mat(), 1, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_AddEx::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || e.a.type() == _type ? m : temp; - if( e.b.data ) - { - if( e.s == Scalar() || !e.s.isReal() ) - { - if( e.alpha == 1 ) - { - if( e.beta == 1 ) - cv::add(e.a, e.b, dst); - else if( e.beta == -1 ) - cv::subtract(e.a, e.b, dst); - else - cv::scaleAdd(e.b, e.beta, e.a, dst); - } - else if( e.beta == 1 ) - { - if( e.alpha == -1 ) - cv::subtract(e.b, e.a, dst); - else - cv::scaleAdd(e.a, e.alpha, e.b, dst); - } - else - cv::addWeighted(e.a, e.alpha, e.b, e.beta, 0, dst); - - if( !e.s.isReal() ) - cv::add(dst, e.s, dst); - } - else - cv::addWeighted(e.a, e.alpha, e.b, e.beta, e.s[0], dst); - } - else if( e.s.isReal() && (dst.data != m.data || fabs(e.alpha) != 1)) - { - e.a.convertTo(m, _type, e.alpha, e.s[0]); - return; - } - else if( e.alpha == 1 ) - cv::add(e.a, e.s, dst); - else if( e.alpha == -1 ) - cv::subtract(e.s, e.a, dst); - else - { - e.a.convertTo(dst, e.a.type(), e.alpha); - cv::add(dst, e.s, dst); - } - - if( dst.data != m.data ) - dst.convertTo(m, m.type()); -} - - -void MatOp_AddEx::add(const MatExpr& e, const Scalar& s, MatExpr& res) const -{ - res = e; - res.s += s; -} - - -void MatOp_AddEx::subtract(const Scalar& s, const MatExpr& e, MatExpr& res) const -{ - res = e; - res.alpha = -res.alpha; - res.beta = -res.beta; - res.s = s - res.s; -} - -void MatOp_AddEx::multiply(const MatExpr& e, double s, MatExpr& res) const -{ - res = e; - res.alpha *= s; - res.beta *= s; - res.s *= s; -} - -void MatOp_AddEx::divide(double s, const MatExpr& e, MatExpr& res) const -{ - if( isScaled(e) ) - MatOp_Bin::makeExpr(res, '/', e.a, Mat(), s/e.alpha); - else - MatOp::divide(s, e, res); -} - - -void MatOp_AddEx::transpose(const MatExpr& e, MatExpr& res) const -{ - if( isScaled(e) ) - MatOp_T::makeExpr(res, e.a, e.alpha); - else - MatOp::transpose(e, res); -} - -void MatOp_AddEx::abs(const MatExpr& e, MatExpr& res) const -{ - if( (!e.b.data || e.beta == 0) && fabs(e.alpha) == 1 ) - MatOp_Bin::makeExpr(res, 'a', e.a, -e.s*e.alpha); - else if( e.b.data && e.alpha + e.beta == 0 && e.alpha*e.beta == -1 ) - MatOp_Bin::makeExpr(res, 'a', e.a, e.b); - else - MatOp::abs(e, res); -} - -inline void MatOp_AddEx::makeExpr(MatExpr& res, const Mat& a, const Mat& b, double alpha, double beta, const Scalar& s) -{ - res = MatExpr(&g_MatOp_AddEx, 0, a, b, Mat(), alpha, beta, s); -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Bin::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || e.a.type() == _type ? m : temp; - - if( e.flags == '*' ) - cv::multiply(e.a, e.b, dst, e.alpha); - else if( e.flags == '/' && e.b.data ) - cv::divide(e.a, e.b, dst, e.alpha); - else if( e.flags == '/' && !e.b.data ) - cv::divide(e.alpha, e.a, dst ); - else if( e.flags == '&' && e.b.data ) - bitwise_and(e.a, e.b, dst); - else if( e.flags == '&' && !e.b.data ) - bitwise_and(e.a, e.s, dst); - else if( e.flags == '|' && e.b.data ) - bitwise_or(e.a, e.b, dst); - else if( e.flags == '|' && !e.b.data ) - bitwise_or(e.a, e.s, dst); - else if( e.flags == '^' && e.b.data ) - bitwise_xor(e.a, e.b, dst); - else if( e.flags == '^' && !e.b.data ) - bitwise_xor(e.a, e.s, dst); - else if( e.flags == '~' && !e.b.data ) - bitwise_not(e.a, dst); - else if( e.flags == 'm' && e.b.data ) - cv::min(e.a, e.b, dst); - else if( e.flags == 'm' && !e.b.data ) - cv::min(e.a, e.s[0], dst); - else if( e.flags == 'M' && e.b.data ) - cv::max(e.a, e.b, dst); - else if( e.flags == 'M' && !e.b.data ) - cv::max(e.a, e.s[0], dst); - else if( e.flags == 'a' && e.b.data ) - cv::absdiff(e.a, e.b, dst); - else if( e.flags == 'a' && !e.b.data ) - cv::absdiff(e.a, e.s, dst); - else - CV_Error(CV_StsError, "Unknown operation"); - - if( dst.data != m.data ) - dst.convertTo(m, _type); -} - -void MatOp_Bin::multiply(const MatExpr& e, double s, MatExpr& res) const -{ - if( e.flags == '*' || e.flags == '/' ) - { - res = e; - res.alpha *= s; - } - else - MatOp::multiply(e, s, res); -} - -void MatOp_Bin::divide(double s, const MatExpr& e, MatExpr& res) const -{ - if( e.flags == '/' && (!e.b.data || e.beta == 0) ) - MatOp_AddEx::makeExpr(res, e.a, Mat(), s/e.alpha, 0); - else - MatOp::divide(s, e, res); -} - -inline void MatOp_Bin::makeExpr(MatExpr& res, char op, const Mat& a, const Mat& b, double scale) -{ - res = MatExpr(&g_MatOp_Bin, op, a, b, Mat(), scale, b.data ? 1 : 0); -} - -inline void MatOp_Bin::makeExpr(MatExpr& res, char op, const Mat& a, const Scalar& s) -{ - res = MatExpr(&g_MatOp_Bin, op, a, Mat(), Mat(), 1, 0, s); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Cmp::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || _type == CV_8U ? m : temp; - - if( e.b.data ) - cv::compare(e.a, e.b, dst, e.flags); - else - cv::compare(e.a, e.alpha, dst, e.flags); - - if( dst.data != m.data ) - dst.convertTo(m, _type); -} - -inline void MatOp_Cmp::makeExpr(MatExpr& res, int cmpop, const Mat& a, const Mat& b) -{ - res = MatExpr(&g_MatOp_Cmp, cmpop, a, b, Mat(), 1, 1); -} - -inline void MatOp_Cmp::makeExpr(MatExpr& res, int cmpop, const Mat& a, double alpha) -{ - res = MatExpr(&g_MatOp_Cmp, cmpop, a, Mat(), Mat(), alpha, 1); -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_T::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || _type == e.a.type() ? m : temp; - - cv::transpose(e.a, dst); - - if( dst.data != m.data || e.alpha != 1 ) - dst.convertTo(m, _type, e.alpha); -} - -void MatOp_T::multiply(const MatExpr& e, double s, MatExpr& res) const -{ - res = e; - res.alpha *= s; -} - -void MatOp_T::transpose(const MatExpr& e, MatExpr& res) const -{ - if( e.alpha == 1 ) - MatOp_Identity::makeExpr(res, e.a); - else - MatOp_AddEx::makeExpr(res, e.a, Mat(), e.alpha, 0); -} - -inline void MatOp_T::makeExpr(MatExpr& res, const Mat& a, double alpha) -{ - res = MatExpr(&g_MatOp_T, 0, a, Mat(), Mat(), alpha, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_GEMM::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || _type == e.a.type() ? m : temp; - - cv::gemm(e.a, e.b, e.alpha, e.c, e.beta, dst, e.flags); - if( dst.data != m.data ) - dst.convertTo(m, _type); -} - -void MatOp_GEMM::add(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - bool i1 = isIdentity(e1), i2 = isIdentity(e2); - double alpha1 = i1 ? 1 : e1.alpha, alpha2 = i2 ? 1 : e2.alpha; - - if( isMatProd(e1) && (i2 || isScaled(e2) || isT(e2)) ) - MatOp_GEMM::makeExpr(res, (e1.flags & ~CV_GEMM_C_T)|(isT(e2) ? CV_GEMM_C_T : 0), - e1.a, e1.b, alpha1, e2.a, alpha2); - else if( isMatProd(e2) && (i1 || isScaled(e1) || isT(e1)) ) - MatOp_GEMM::makeExpr(res, (e2.flags & ~CV_GEMM_C_T)|(isT(e1) ? CV_GEMM_C_T : 0), - e2.a, e2.b, alpha2, e1.a, alpha1); - else if( this == e2.op ) - MatOp::add(e1, e2, res); - else - e2.op->add(e1, e2, res); -} - -void MatOp_GEMM::subtract(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - bool i1 = isIdentity(e1), i2 = isIdentity(e2); - double alpha1 = i1 ? 1 : e1.alpha, alpha2 = i2 ? 1 : e2.alpha; - - if( isMatProd(e1) && (i2 || isScaled(e2) || isT(e2)) ) - MatOp_GEMM::makeExpr(res, (e1.flags & ~CV_GEMM_C_T)|(isT(e2) ? CV_GEMM_C_T : 0), - e1.a, e1.b, alpha1, e2.a, -alpha2); - else if( isMatProd(e2) && (i1 || isScaled(e1) || isT(e1)) ) - MatOp_GEMM::makeExpr(res, (e2.flags & ~CV_GEMM_C_T)|(isT(e1) ? CV_GEMM_C_T : 0), - e2.a, e2.b, -alpha2, e1.a, alpha1); - else if( this == e2.op ) - MatOp::subtract(e1, e2, res); - else - e2.op->subtract(e1, e2, res); -} - -void MatOp_GEMM::multiply(const MatExpr& e, double s, MatExpr& res) const -{ - res = e; - res.alpha *= s; - res.beta *= s; -} - -void MatOp_GEMM::transpose(const MatExpr& e, MatExpr& res) const -{ - res = e; - res.flags = (!(e.flags & CV_GEMM_A_T) ? CV_GEMM_B_T : 0) | - (!(e.flags & CV_GEMM_B_T) ? CV_GEMM_A_T : 0) | - (!(e.flags & CV_GEMM_C_T) ? CV_GEMM_C_T : 0); - swap(res.a, res.b); -} - -inline void MatOp_GEMM::makeExpr(MatExpr& res, int flags, const Mat& a, const Mat& b, - double alpha, const Mat& c, double beta) -{ - res = MatExpr(&g_MatOp_GEMM, flags, a, b, c, alpha, beta); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Invert::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || _type == e.a.type() ? m : temp; - - cv::invert(e.a, dst, e.flags); - if( dst.data != m.data ) - dst.convertTo(m, _type); -} - -void MatOp_Invert::matmul(const MatExpr& e1, const MatExpr& e2, MatExpr& res) const -{ - if( isInv(e1) && isIdentity(e2) ) - MatOp_Solve::makeExpr(res, e1.flags, e1.a, e2.a); - else if( this == e2.op ) - MatOp::matmul(e1, e2, res); - else - e2.op->matmul(e1, e2, res); -} - -inline void MatOp_Invert::makeExpr(MatExpr& res, int method, const Mat& m) -{ - res = MatExpr(&g_MatOp_Invert, method, m, Mat(), Mat(), 1, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Solve::assign(const MatExpr& e, Mat& m, int _type) const -{ - Mat temp, &dst = _type == -1 || _type == e.a.type() ? m : temp; - - cv::solve(e.a, e.b, dst, e.flags); - if( dst.data != m.data ) - dst.convertTo(m, _type); -} - -inline void MatOp_Solve::makeExpr(MatExpr& res, int method, const Mat& a, const Mat& b) -{ - res = MatExpr(&g_MatOp_Solve, method, a, b, Mat(), 1, 1); -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////// - -void MatOp_Initializer::assign(const MatExpr& e, Mat& m, int _type) const -{ - if( _type == -1 ) - _type = e.a.type(); - m.create(e.a.size(), _type); - if( e.flags == 'I' ) - setIdentity(m, Scalar(e.alpha)); - else if( e.flags == '0' ) - m = Scalar(); - else if( e.flags == '1' ) - m = Scalar(e.alpha); - else - CV_Error(CV_StsError, "Invalid matrix initializer type"); -} - -void MatOp_Initializer::multiply(const MatExpr& e, double s, MatExpr& res) const -{ - res = e; - res.alpha *= s; -} - -inline void MatOp_Initializer::makeExpr(MatExpr& res, int method, Size sz, int type, double alpha) -{ - res = MatExpr(&g_MatOp_Initializer, method, Mat(sz, type, (void*)0), Mat(), Mat(), alpha, 0); -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -MatExpr Mat::t() const -{ - MatExpr e; - MatOp_T::makeExpr(e, *this); - return e; -} - -MatExpr Mat::inv(int method) const -{ - MatExpr e; - MatOp_Invert::makeExpr(e, method, *this); - return e; -} - - -MatExpr Mat::mul(InputArray m, double scale) const -{ - MatExpr e; - if(m.kind() == _InputArray::EXPR) - { - const MatExpr& me = *(const MatExpr*)m.obj; - me.op->multiply(MatExpr(*this), me, e, scale); - } - else - MatOp_Bin::makeExpr(e, '*', *this, m.getMat(), scale); - return e; -} - -MatExpr Mat::zeros(int rows, int cols, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, '0', Size(cols, rows), type); - return e; -} - -MatExpr Mat::zeros(Size size, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, '0', size, type); - return e; -} - -MatExpr Mat::ones(int rows, int cols, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, '1', Size(cols, rows), type); - return e; -} - -MatExpr Mat::ones(Size size, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, '1', size, type); - return e; -} - -MatExpr Mat::eye(int rows, int cols, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, 'I', Size(cols, rows), type); - return e; -} - -MatExpr Mat::eye(Size size, int type) -{ - MatExpr e; - MatOp_Initializer::makeExpr(e, 'I', size, type); - return e; -} - -} - -/* End of file. */ diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp deleted file mode 100644 index 517ee9d..0000000 --- a/modules/core/src/matrix.cpp +++ /dev/null @@ -1,4280 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/core/gpumat.hpp" -#include "opencv2/core/opengl_interop.hpp" -#include "opencv2/core/opengl_interop_deprecated.hpp" - -/****************************************************************************************\ -* [scaled] Identity matrix initialization * -\****************************************************************************************/ - -namespace cv { - -void swap( Mat& a, Mat& b ) -{ - std::swap(a.flags, b.flags); - std::swap(a.dims, b.dims); - std::swap(a.rows, b.rows); - std::swap(a.cols, b.cols); - std::swap(a.data, b.data); - std::swap(a.refcount, b.refcount); - std::swap(a.datastart, b.datastart); - std::swap(a.dataend, b.dataend); - std::swap(a.datalimit, b.datalimit); - std::swap(a.allocator, b.allocator); - - std::swap(a.size.p, b.size.p); - std::swap(a.step.p, b.step.p); - std::swap(a.step.buf[0], b.step.buf[0]); - std::swap(a.step.buf[1], b.step.buf[1]); - - if( a.step.p == b.step.buf ) - { - a.step.p = a.step.buf; - a.size.p = &a.rows; - } - - if( b.step.p == a.step.buf ) - { - b.step.p = b.step.buf; - b.size.p = &b.rows; - } -} - - -static inline void setSize( Mat& m, int _dims, const int* _sz, - const size_t* _steps, bool autoSteps=false ) -{ - CV_Assert( 0 <= _dims && _dims <= CV_MAX_DIM ); - if( m.dims != _dims ) - { - if( m.step.p != m.step.buf ) - { - fastFree(m.step.p); - m.step.p = m.step.buf; - m.size.p = &m.rows; - } - if( _dims > 2 ) - { - m.step.p = (size_t*)fastMalloc(_dims*sizeof(m.step.p[0]) + (_dims+1)*sizeof(m.size.p[0])); - m.size.p = (int*)(m.step.p + _dims) + 1; - m.size.p[-1] = _dims; - m.rows = m.cols = -1; - } - } - - m.dims = _dims; - if( !_sz ) - return; - - size_t esz = CV_ELEM_SIZE(m.flags), total = esz; - int i; - for( i = _dims-1; i >= 0; i-- ) - { - int s = _sz[i]; - CV_Assert( s >= 0 ); - m.size.p[i] = s; - - if( _steps ) - m.step.p[i] = i < _dims-1 ? _steps[i] : esz; - else if( autoSteps ) - { - m.step.p[i] = total; - int64 total1 = (int64)total*s; - if( (uint64)total1 != (size_t)total1 ) - CV_Error( CV_StsOutOfRange, "The total matrix size does not fit to \"size_t\" type" ); - total = (size_t)total1; - } - } - - if( _dims == 1 ) - { - m.dims = 2; - m.cols = 1; - m.step[1] = esz; - } -} - -static void updateContinuityFlag(Mat& m) -{ - int i, j; - for( i = 0; i < m.dims; i++ ) - { - if( m.size[i] > 1 ) - break; - } - - for( j = m.dims-1; j > i; j-- ) - { - if( m.step[j]*m.size[j] < m.step[j-1] ) - break; - } - - uint64 t = (uint64)m.step[0]*m.size[0]; - if( j <= i && t == (size_t)t ) - m.flags |= Mat::CONTINUOUS_FLAG; - else - m.flags &= ~Mat::CONTINUOUS_FLAG; -} - -static void finalizeHdr(Mat& m) -{ - updateContinuityFlag(m); - int d = m.dims; - if( d > 2 ) - m.rows = m.cols = -1; - if( m.data ) - { - m.datalimit = m.datastart + m.size[0]*m.step[0]; - if( m.size[0] > 0 ) - { - m.dataend = m.data + m.size[d-1]*m.step[d-1]; - for( int i = 0; i < d-1; i++ ) - m.dataend += (m.size[i] - 1)*m.step[i]; - } - else - m.dataend = m.datalimit; - } - else - m.dataend = m.datalimit = 0; -} - - -void Mat::create(int d, const int* _sizes, int _type) -{ - int i; - CV_Assert(0 <= d && d <= CV_MAX_DIM && _sizes); - _type = CV_MAT_TYPE(_type); - - if( data && (d == dims || (d == 1 && dims <= 2)) && _type == type() ) - { - if( d == 2 && rows == _sizes[0] && cols == _sizes[1] ) - return; - for( i = 0; i < d; i++ ) - if( size[i] != _sizes[i] ) - break; - if( i == d && (d > 1 || size[1] == 1)) - return; - } - - release(); - if( d == 0 ) - return; - flags = (_type & CV_MAT_TYPE_MASK) | MAGIC_VAL; - setSize(*this, d, _sizes, 0, true); - - if( total() > 0 ) - { -#ifdef HAVE_TGPU - if( !allocator || allocator == tegra::getAllocator() ) allocator = tegra::getAllocator(d, _sizes, _type); -#endif - if( !allocator ) - { - size_t totalsize = alignSize(step.p[0]*size.p[0], (int)sizeof(*refcount)); - data = datastart = (uchar*)fastMalloc(totalsize + (int)sizeof(*refcount)); - refcount = (int*)(data + totalsize); - *refcount = 1; - } - else - { -#ifdef HAVE_TGPU - try - { - allocator->allocate(dims, size, _type, refcount, datastart, data, step.p); - CV_Assert( step[dims-1] == (size_t)CV_ELEM_SIZE(flags) ); - }catch(...) - { - allocator = 0; - size_t totalSize = alignSize(step.p[0]*size.p[0], (int)sizeof(*refcount)); - data = datastart = (uchar*)fastMalloc(totalSize + (int)sizeof(*refcount)); - refcount = (int*)(data + totalSize); - *refcount = 1; - } -#else - allocator->allocate(dims, size, _type, refcount, datastart, data, step.p); - CV_Assert( step[dims-1] == (size_t)CV_ELEM_SIZE(flags) ); -#endif - } - } - - finalizeHdr(*this); -} - -void Mat::copySize(const Mat& m) -{ - setSize(*this, m.dims, 0, 0); - for( int i = 0; i < dims; i++ ) - { - size[i] = m.size[i]; - step[i] = m.step[i]; - } -} - -void Mat::deallocate() -{ - if( allocator ) - allocator->deallocate(refcount, datastart, data); - else - { - CV_DbgAssert(refcount != 0); - fastFree(datastart); - } -} - - -Mat::Mat(const Mat& m, const Range& _rowRange, const Range& _colRange) : size(&rows) -{ - initEmpty(); - CV_Assert( m.dims >= 2 ); - if( m.dims > 2 ) - { - AutoBuffer rs(m.dims); - rs[0] = _rowRange; - rs[1] = _colRange; - for( int i = 2; i < m.dims; i++ ) - rs[i] = Range::all(); - *this = m(rs); - return; - } - - *this = m; - if( _rowRange != Range::all() && _rowRange != Range(0,rows) ) - { - CV_Assert( 0 <= _rowRange.start && _rowRange.start <= _rowRange.end && _rowRange.end <= m.rows ); - rows = _rowRange.size(); - data += step*_rowRange.start; - flags |= SUBMATRIX_FLAG; - } - - if( _colRange != Range::all() && _colRange != Range(0,cols) ) - { - CV_Assert( 0 <= _colRange.start && _colRange.start <= _colRange.end && _colRange.end <= m.cols ); - cols = _colRange.size(); - data += _colRange.start*elemSize(); - flags &= cols < m.cols ? ~CONTINUOUS_FLAG : -1; - flags |= SUBMATRIX_FLAG; - } - - if( rows == 1 ) - flags |= CONTINUOUS_FLAG; - - if( rows <= 0 || cols <= 0 ) - { - release(); - rows = cols = 0; - } -} - - -Mat::Mat(const Mat& m, const Rect& roi) - : flags(m.flags), dims(2), rows(roi.height), cols(roi.width), - data(m.data + roi.y*m.step[0]), refcount(m.refcount), - datastart(m.datastart), dataend(m.dataend), datalimit(m.datalimit), - allocator(m.allocator), size(&rows) -{ - CV_Assert( m.dims <= 2 ); - flags &= roi.width < m.cols ? ~CONTINUOUS_FLAG : -1; - flags |= roi.height == 1 ? CONTINUOUS_FLAG : 0; - - size_t esz = CV_ELEM_SIZE(flags); - data += roi.x*esz; - CV_Assert( 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && - 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows ); - if( refcount ) - CV_XADD(refcount, 1); - if( roi.width < m.cols || roi.height < m.rows ) - flags |= SUBMATRIX_FLAG; - - step[0] = m.step[0]; step[1] = esz; - - if( rows <= 0 || cols <= 0 ) - { - release(); - rows = cols = 0; - } -} - - -Mat::Mat(int _dims, const int* _sizes, int _type, void* _data, const size_t* _steps) : size(&rows) -{ - initEmpty(); - flags |= CV_MAT_TYPE(_type); - data = datastart = (uchar*)_data; - setSize(*this, _dims, _sizes, _steps, true); - finalizeHdr(*this); -} - - -Mat::Mat(const Mat& m, const Range* ranges) : size(&rows) -{ - initEmpty(); - int i, d = m.dims; - - CV_Assert(ranges); - for( i = 0; i < d; i++ ) - { - Range r = ranges[i]; - CV_Assert( r == Range::all() || (0 <= r.start && r.start < r.end && r.end <= m.size[i]) ); - } - *this = m; - for( i = 0; i < d; i++ ) - { - Range r = ranges[i]; - if( r != Range::all() && r != Range(0, size.p[i])) - { - size.p[i] = r.end - r.start; - data += r.start*step.p[i]; - flags |= SUBMATRIX_FLAG; - } - } - updateContinuityFlag(*this); -} - - -Mat::Mat(const CvMatND* m, bool copyData) : size(&rows) -{ - initEmpty(); - if( !m ) - return; - data = datastart = m->data.ptr; - flags |= CV_MAT_TYPE(m->type); - int _sizes[CV_MAX_DIM]; - size_t _steps[CV_MAX_DIM]; - - int i, d = m->dims; - for( i = 0; i < d; i++ ) - { - _sizes[i] = m->dim[i].size; - _steps[i] = m->dim[i].step; - } - - setSize(*this, d, _sizes, _steps); - finalizeHdr(*this); - - if( copyData ) - { - Mat temp(*this); - temp.copyTo(*this); - } -} - - -Mat Mat::diag(int d) const -{ - CV_Assert( dims <= 2 ); - Mat m = *this; - size_t esz = elemSize(); - int len; - - if( d >= 0 ) - { - len = std::min(cols - d, rows); - m.data += esz*d; - } - else - { - len = std::min(rows + d, cols); - m.data -= step[0]*d; - } - CV_DbgAssert( len > 0 ); - - m.size[0] = m.rows = len; - m.size[1] = m.cols = 1; - m.step[0] += (len > 1 ? esz : 0); - - if( m.rows > 1 ) - m.flags &= ~CONTINUOUS_FLAG; - else - m.flags |= CONTINUOUS_FLAG; - - if( size() != Size(1,1) ) - m.flags |= SUBMATRIX_FLAG; - - return m; -} - - -Mat::Mat(const CvMat* m, bool copyData) : size(&rows) -{ - initEmpty(); - - if( !m ) - return; - - if( !copyData ) - { - flags = MAGIC_VAL + (m->type & (CV_MAT_TYPE_MASK|CV_MAT_CONT_FLAG)); - dims = 2; - rows = m->rows; - cols = m->cols; - data = datastart = m->data.ptr; - size_t esz = CV_ELEM_SIZE(m->type), minstep = cols*esz, _step = m->step; - if( _step == 0 ) - _step = minstep; - datalimit = datastart + _step*rows; - dataend = datalimit - _step + minstep; - step[0] = _step; step[1] = esz; - } - else - { - data = datastart = dataend = 0; - Mat(m->rows, m->cols, m->type, m->data.ptr, m->step).copyTo(*this); - } -} - - -Mat::Mat(const IplImage* img, bool copyData) : size(&rows) -{ - initEmpty(); - - if( !img ) - return; - - dims = 2; - CV_DbgAssert(CV_IS_IMAGE(img) && img->imageData != 0); - - int imgdepth = IPL2CV_DEPTH(img->depth); - size_t esz; - step[0] = img->widthStep; - - if(!img->roi) - { - CV_Assert(img->dataOrder == IPL_DATA_ORDER_PIXEL); - flags = MAGIC_VAL + CV_MAKETYPE(imgdepth, img->nChannels); - rows = img->height; cols = img->width; - datastart = data = (uchar*)img->imageData; - esz = CV_ELEM_SIZE(flags); - } - else - { - CV_Assert(img->dataOrder == IPL_DATA_ORDER_PIXEL || img->roi->coi != 0); - bool selectedPlane = img->roi->coi && img->dataOrder == IPL_DATA_ORDER_PLANE; - flags = MAGIC_VAL + CV_MAKETYPE(imgdepth, selectedPlane ? 1 : img->nChannels); - rows = img->roi->height; cols = img->roi->width; - esz = CV_ELEM_SIZE(flags); - data = datastart = (uchar*)img->imageData + - (selectedPlane ? (img->roi->coi - 1)*step*img->height : 0) + - img->roi->yOffset*step[0] + img->roi->xOffset*esz; - } - datalimit = datastart + step.p[0]*rows; - dataend = datastart + step.p[0]*(rows-1) + esz*cols; - flags |= (cols*esz == step.p[0] || rows == 1 ? CONTINUOUS_FLAG : 0); - step[1] = esz; - - if( copyData ) - { - Mat m = *this; - release(); - if( !img->roi || !img->roi->coi || - img->dataOrder == IPL_DATA_ORDER_PLANE) - m.copyTo(*this); - else - { - int ch[] = {img->roi->coi - 1, 0}; - create(m.rows, m.cols, m.type()); - mixChannels(&m, 1, this, 1, ch, 1); - } - } -} - - -Mat::operator IplImage() const -{ - CV_Assert( dims <= 2 ); - IplImage img; - cvInitImageHeader(&img, size(), cvIplDepth(flags), channels()); - cvSetData(&img, data, (int)step[0]); - return img; -} - - -void Mat::pop_back(size_t nelems) -{ - CV_Assert( nelems <= (size_t)size.p[0] ); - - if( isSubmatrix() ) - *this = rowRange(0, size.p[0] - (int)nelems); - else - { - size.p[0] -= (int)nelems; - dataend -= nelems*step.p[0]; - /*if( size.p[0] <= 1 ) - { - if( dims <= 2 ) - flags |= CONTINUOUS_FLAG; - else - updateContinuityFlag(*this); - }*/ - } -} - - -void Mat::push_back_(const void* elem) -{ - int r = size.p[0]; - if( isSubmatrix() || dataend + step.p[0] > datalimit ) - reserve( std::max(r + 1, (r*3+1)/2) ); - - size_t esz = elemSize(); - memcpy(data + r*step.p[0], elem, esz); - size.p[0] = r + 1; - dataend += step.p[0]; - if( esz < step.p[0] ) - flags &= ~CONTINUOUS_FLAG; -} - -void Mat::reserve(size_t nelems) -{ - const size_t MIN_SIZE = 64; - - CV_Assert( (int)nelems >= 0 ); - if( !isSubmatrix() && data + step.p[0]*nelems <= datalimit ) - return; - - int r = size.p[0]; - - if( (size_t)r >= nelems ) - return; - - size.p[0] = std::max((int)nelems, 1); - size_t newsize = total()*elemSize(); - - if( newsize < MIN_SIZE ) - size.p[0] = (int)((MIN_SIZE + newsize - 1)*nelems/newsize); - - Mat m(dims, size.p, type()); - size.p[0] = r; - if( r > 0 ) - { - Mat mpart = m.rowRange(0, r); - copyTo(mpart); - } - - *this = m; - size.p[0] = r; - dataend = data + step.p[0]*r; -} - - -void Mat::resize(size_t nelems) -{ - int saveRows = size.p[0]; - if( saveRows == (int)nelems ) - return; - CV_Assert( (int)nelems >= 0 ); - - if( isSubmatrix() || data + step.p[0]*nelems > datalimit ) - reserve(nelems); - - size.p[0] = (int)nelems; - dataend += (size.p[0] - saveRows)*step.p[0]; - - //updateContinuityFlag(*this); -} - - -void Mat::resize(size_t nelems, const Scalar& s) -{ - int saveRows = size.p[0]; - resize(nelems); - - if( size.p[0] > saveRows ) - { - Mat part = rowRange(saveRows, size.p[0]); - part = s; - } -} - -void Mat::push_back(const Mat& elems) -{ - int r = size.p[0], delta = elems.size.p[0]; - if( delta == 0 ) - return; - if( this == &elems ) - { - Mat tmp = elems; - push_back(tmp); - return; - } - if( !data ) - { - *this = elems.clone(); - return; - } - - size.p[0] = elems.size.p[0]; - bool eq = size == elems.size; - size.p[0] = r; - if( !eq ) - CV_Error(CV_StsUnmatchedSizes, ""); - if( type() != elems.type() ) - CV_Error(CV_StsUnmatchedFormats, ""); - - if( isSubmatrix() || dataend + step.p[0]*delta > datalimit ) - reserve( std::max(r + delta, (r*3+1)/2) ); - - size.p[0] += delta; - dataend += step.p[0]*delta; - - //updateContinuityFlag(*this); - - if( isContinuous() && elems.isContinuous() ) - memcpy(data + r*step.p[0], elems.data, elems.total()*elems.elemSize()); - else - { - Mat part = rowRange(r, r + delta); - elems.copyTo(part); - } -} - - -Mat cvarrToMat(const CvArr* arr, bool copyData, - bool /*allowND*/, int coiMode) -{ - if( !arr ) - return Mat(); - if( CV_IS_MAT(arr) ) - return Mat((const CvMat*)arr, copyData ); - if( CV_IS_MATND(arr) ) - return Mat((const CvMatND*)arr, copyData ); - if( CV_IS_IMAGE(arr) ) - { - const IplImage* iplimg = (const IplImage*)arr; - if( coiMode == 0 && iplimg->roi && iplimg->roi->coi > 0 ) - CV_Error(CV_BadCOI, "COI is not supported by the function"); - return Mat(iplimg, copyData); - } - if( CV_IS_SEQ(arr) ) - { - CvSeq* seq = (CvSeq*)arr; - CV_Assert(seq->total > 0 && CV_ELEM_SIZE(seq->flags) == seq->elem_size); - if(!copyData && seq->first->next == seq->first) - return Mat(seq->total, 1, CV_MAT_TYPE(seq->flags), seq->first->data); - Mat buf(seq->total, 1, CV_MAT_TYPE(seq->flags)); - cvCvtSeqToArray(seq, buf.data, CV_WHOLE_SEQ); - return buf; - } - CV_Error(CV_StsBadArg, "Unknown array type"); - return Mat(); -} - -void Mat::locateROI( Size& wholeSize, Point& ofs ) const -{ - CV_Assert( dims <= 2 && step[0] > 0 ); - size_t esz = elemSize(), minstep; - ptrdiff_t delta1 = data - datastart, delta2 = dataend - datastart; - - if( delta1 == 0 ) - ofs.x = ofs.y = 0; - else - { - ofs.y = (int)(delta1/step[0]); - ofs.x = (int)((delta1 - step[0]*ofs.y)/esz); - CV_DbgAssert( data == datastart + ofs.y*step[0] + ofs.x*esz ); - } - minstep = (ofs.x + cols)*esz; - wholeSize.height = (int)((delta2 - minstep)/step[0] + 1); - wholeSize.height = std::max(wholeSize.height, ofs.y + rows); - wholeSize.width = (int)((delta2 - step*(wholeSize.height-1))/esz); - wholeSize.width = std::max(wholeSize.width, ofs.x + cols); -} - -Mat& Mat::adjustROI( int dtop, int dbottom, int dleft, int dright ) -{ - CV_Assert( dims <= 2 && step[0] > 0 ); - Size wholeSize; Point ofs; - size_t esz = elemSize(); - locateROI( wholeSize, ofs ); - int row1 = std::max(ofs.y - dtop, 0), row2 = std::min(ofs.y + rows + dbottom, wholeSize.height); - int col1 = std::max(ofs.x - dleft, 0), col2 = std::min(ofs.x + cols + dright, wholeSize.width); - data += (row1 - ofs.y)*step + (col1 - ofs.x)*esz; - rows = row2 - row1; cols = col2 - col1; - size.p[0] = rows; size.p[1] = cols; - if( esz*cols == step[0] || rows == 1 ) - flags |= CONTINUOUS_FLAG; - else - flags &= ~CONTINUOUS_FLAG; - return *this; -} - -} - -void cv::extractImageCOI(const CvArr* arr, OutputArray _ch, int coi) -{ - Mat mat = cvarrToMat(arr, false, true, 1); - _ch.create(mat.dims, mat.size, mat.depth()); - Mat ch = _ch.getMat(); - if(coi < 0) - { - CV_Assert( CV_IS_IMAGE(arr) ); - coi = cvGetImageCOI((const IplImage*)arr)-1; - } - CV_Assert(0 <= coi && coi < mat.channels()); - int _pairs[] = { coi, 0 }; - mixChannels( &mat, 1, &ch, 1, _pairs, 1 ); -} - -void cv::insertImageCOI(InputArray _ch, CvArr* arr, int coi) -{ - Mat ch = _ch.getMat(), mat = cvarrToMat(arr, false, true, 1); - if(coi < 0) - { - CV_Assert( CV_IS_IMAGE(arr) ); - coi = cvGetImageCOI((const IplImage*)arr)-1; - } - CV_Assert(ch.size == mat.size && ch.depth() == mat.depth() && 0 <= coi && coi < mat.channels()); - int _pairs[] = { 0, coi }; - mixChannels( &ch, 1, &mat, 1, _pairs, 1 ); -} - -namespace cv -{ - -Mat Mat::reshape(int new_cn, int new_rows) const -{ - int cn = channels(); - Mat hdr = *this; - - if( dims > 2 && new_rows == 0 && new_cn != 0 && size[dims-1]*cn % new_cn == 0 ) - { - hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT); - hdr.step[dims-1] = CV_ELEM_SIZE(hdr.flags); - hdr.size[dims-1] = hdr.size[dims-1]*cn / new_cn; - return hdr; - } - - CV_Assert( dims <= 2 ); - - if( new_cn == 0 ) - new_cn = cn; - - int total_width = cols * cn; - - if( (new_cn > total_width || total_width % new_cn != 0) && new_rows == 0 ) - new_rows = rows * total_width / new_cn; - - if( new_rows != 0 && new_rows != rows ) - { - int total_size = total_width * rows; - if( !isContinuous() ) - CV_Error( CV_BadStep, - "The matrix is not continuous, thus its number of rows can not be changed" ); - - if( (unsigned)new_rows > (unsigned)total_size ) - CV_Error( CV_StsOutOfRange, "Bad new number of rows" ); - - total_width = total_size / new_rows; - - if( total_width * new_rows != total_size ) - CV_Error( CV_StsBadArg, "The total number of matrix elements " - "is not divisible by the new number of rows" ); - - hdr.rows = new_rows; - hdr.step[0] = total_width * elemSize1(); - } - - int new_width = total_width / new_cn; - - if( new_width * new_cn != total_width ) - CV_Error( CV_BadNumChannels, - "The total width is not divisible by the new number of channels" ); - - hdr.cols = new_width; - hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT); - hdr.step[1] = CV_ELEM_SIZE(hdr.flags); - return hdr; -} - - -int Mat::checkVector(int _elemChannels, int _depth, bool _requireContinuous) const -{ - return (depth() == _depth || _depth <= 0) && - (isContinuous() || !_requireContinuous) && - ((dims == 2 && (((rows == 1 || cols == 1) && channels() == _elemChannels) || - (cols == _elemChannels && channels() == 1))) || - (dims == 3 && channels() == 1 && size.p[2] == _elemChannels && (size.p[0] == 1 || size.p[1] == 1) && - (isContinuous() || step.p[1] == step.p[2]*size.p[2]))) - ? (int)(total()*channels()/_elemChannels) : -1; -} - - -void scalarToRawData(const Scalar& s, void* _buf, int type, int unroll_to) -{ - int i, depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type); - CV_Assert(cn <= 4); - switch(depth) - { - case CV_8U: - { - uchar* buf = (uchar*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_8S: - { - schar* buf = (schar*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_16U: - { - ushort* buf = (ushort*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_16S: - { - short* buf = (short*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_32S: - { - int* buf = (int*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_32F: - { - float* buf = (float*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - } - break; - case CV_64F: - { - double* buf = (double*)_buf; - for(i = 0; i < cn; i++) - buf[i] = saturate_cast(s.val[i]); - for(; i < unroll_to; i++) - buf[i] = buf[i-cn]; - break; - } - default: - CV_Error(CV_StsUnsupportedFormat,""); - } -} - - -/*************************************************************************************************\ - Input/Output Array -\*************************************************************************************************/ - -_InputArray::_InputArray() : flags(0), obj(0) {} -#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY -_InputArray::~_InputArray() {} -#endif -_InputArray::_InputArray(const Mat& m) : flags(MAT), obj((void*)&m) {} -_InputArray::_InputArray(const vector& vec) : flags(STD_VECTOR_MAT), obj((void*)&vec) {} -_InputArray::_InputArray(const double& val) : flags(FIXED_TYPE + FIXED_SIZE + MATX + CV_64F), obj((void*)&val), sz(Size(1,1)) {} -_InputArray::_InputArray(const MatExpr& expr) : flags(FIXED_TYPE + FIXED_SIZE + EXPR), obj((void*)&expr) {} -// < Deprecated -_InputArray::_InputArray(const GlBuffer&) : flags(0), obj(0) {} -_InputArray::_InputArray(const GlTexture&) : flags(0), obj(0) {} -// > -_InputArray::_InputArray(const gpu::GpuMat& d_mat) : flags(GPU_MAT), obj((void*)&d_mat) {} -_InputArray::_InputArray(const ogl::Buffer& buf) : flags(OPENGL_BUFFER), obj((void*)&buf) {} -_InputArray::_InputArray(const ogl::Texture2D& tex) : flags(OPENGL_TEXTURE), obj((void*)&tex) {} - -Mat _InputArray::getMat(int i) const -{ - int k = kind(); - - if( k == MAT ) - { - const Mat* m = (const Mat*)obj; - if( i < 0 ) - return *m; - return m->row(i); - } - - if( k == EXPR ) - { - CV_Assert( i < 0 ); - return (Mat)*((const MatExpr*)obj); - } - - if( k == MATX ) - { - CV_Assert( i < 0 ); - return Mat(sz, flags, obj); - } - - if( k == STD_VECTOR ) - { - CV_Assert( i < 0 ); - int t = CV_MAT_TYPE(flags); - const vector& v = *(const vector*)obj; - - return !v.empty() ? Mat(size(), t, (void*)&v[0]) : Mat(); - } - - if( k == NONE ) - return Mat(); - - if( k == STD_VECTOR_VECTOR ) - { - int t = type(i); - const vector >& vv = *(const vector >*)obj; - CV_Assert( 0 <= i && i < (int)vv.size() ); - const vector& v = vv[i]; - - return !v.empty() ? Mat(size(i), t, (void*)&v[0]) : Mat(); - } - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - CV_Assert( k == STD_VECTOR_MAT ); - //if( k == STD_VECTOR_MAT ) - { - const vector& v = *(const vector*)obj; - CV_Assert( 0 <= i && i < (int)v.size() ); - - return v[i]; - } -} - - -void _InputArray::getMatVector(vector& mv) const -{ - int k = kind(); - - if( k == MAT ) - { - const Mat& m = *(const Mat*)obj; - int i, n = (int)m.size[0]; - mv.resize(n); - - for( i = 0; i < n; i++ ) - mv[i] = m.dims == 2 ? Mat(1, m.cols, m.type(), (void*)m.ptr(i)) : - Mat(m.dims-1, &m.size[1], m.type(), (void*)m.ptr(i), &m.step[1]); - return; - } - - if( k == EXPR ) - { - Mat m = *(const MatExpr*)obj; - int i, n = m.size[0]; - mv.resize(n); - - for( i = 0; i < n; i++ ) - mv[i] = m.row(i); - return; - } - - if( k == MATX ) - { - size_t i, n = sz.height, esz = CV_ELEM_SIZE(flags); - mv.resize(n); - - for( i = 0; i < n; i++ ) - mv[i] = Mat(1, sz.width, CV_MAT_TYPE(flags), (uchar*)obj + esz*sz.width*i); - return; - } - - if( k == STD_VECTOR ) - { - const vector& v = *(const vector*)obj; - - size_t i, n = v.size(), esz = CV_ELEM_SIZE(flags); - int t = CV_MAT_DEPTH(flags), cn = CV_MAT_CN(flags); - mv.resize(n); - - for( i = 0; i < n; i++ ) - mv[i] = Mat(1, cn, t, (void*)(&v[0] + esz*i)); - return; - } - - if( k == NONE ) - { - mv.clear(); - return; - } - - if( k == STD_VECTOR_VECTOR ) - { - const vector >& vv = *(const vector >*)obj; - int i, n = (int)vv.size(); - int t = CV_MAT_TYPE(flags); - mv.resize(n); - - for( i = 0; i < n; i++ ) - { - const vector& v = vv[i]; - mv[i] = Mat(size(i), t, (void*)&v[0]); - } - return; - } - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - CV_Assert( k == STD_VECTOR_MAT ); - //if( k == STD_VECTOR_MAT ) - { - const vector& v = *(const vector*)obj; - mv.resize(v.size()); - std::copy(v.begin(), v.end(), mv.begin()); - return; - } -} - -GlBuffer _InputArray::getGlBuffer() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return GlBuffer(GlBuffer::ARRAY_BUFFER); -} - -GlTexture _InputArray::getGlTexture() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return GlTexture(); -} - -gpu::GpuMat _InputArray::getGpuMat() const -{ - int k = kind(); - - CV_Assert(k == GPU_MAT); - - const gpu::GpuMat* d_mat = (const gpu::GpuMat*)obj; - return *d_mat; -} - -ogl::Buffer _InputArray::getOGlBuffer() const -{ - int k = kind(); - - CV_Assert(k == OPENGL_BUFFER); - - const ogl::Buffer* gl_buf = (const ogl::Buffer*)obj; - return *gl_buf; -} - -ogl::Texture2D _InputArray::getOGlTexture2D() const -{ - int k = kind(); - - CV_Assert(k == OPENGL_TEXTURE); - - const ogl::Texture2D* gl_tex = (const ogl::Texture2D*)obj; - return *gl_tex; -} - -int _InputArray::kind() const -{ - return flags & KIND_MASK; -} - -Size _InputArray::size(int i) const -{ - int k = kind(); - - if( k == MAT ) - { - CV_Assert( i < 0 ); - return ((const Mat*)obj)->size(); - } - - if( k == EXPR ) - { - CV_Assert( i < 0 ); - return ((const MatExpr*)obj)->size(); - } - - if( k == MATX ) - { - CV_Assert( i < 0 ); - return sz; - } - - if( k == STD_VECTOR ) - { - CV_Assert( i < 0 ); - const vector& v = *(const vector*)obj; - const vector& iv = *(const vector*)obj; - size_t szb = v.size(), szi = iv.size(); - return szb == szi ? Size((int)szb, 1) : Size((int)(szb/CV_ELEM_SIZE(flags)), 1); - } - - if( k == NONE ) - return Size(); - - if( k == STD_VECTOR_VECTOR ) - { - const vector >& vv = *(const vector >*)obj; - if( i < 0 ) - return vv.empty() ? Size() : Size((int)vv.size(), 1); - CV_Assert( i < (int)vv.size() ); - const vector >& ivv = *(const vector >*)obj; - - size_t szb = vv[i].size(), szi = ivv[i].size(); - return szb == szi ? Size((int)szb, 1) : Size((int)(szb/CV_ELEM_SIZE(flags)), 1); - } - - if( k == STD_VECTOR_MAT ) - { - const vector& vv = *(const vector*)obj; - if( i < 0 ) - return vv.empty() ? Size() : Size((int)vv.size(), 1); - CV_Assert( i < (int)vv.size() ); - - return vv[i].size(); - } - - if( k == OPENGL_BUFFER ) - { - CV_Assert( i < 0 ); - const ogl::Buffer* buf = (const ogl::Buffer*)obj; - return buf->size(); - } - - if( k == OPENGL_TEXTURE ) - { - CV_Assert( i < 0 ); - const ogl::Texture2D* tex = (const ogl::Texture2D*)obj; - return tex->size(); - } - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - CV_Assert( k == GPU_MAT ); - //if( k == GPU_MAT ) - { - CV_Assert( i < 0 ); - const gpu::GpuMat* d_mat = (const gpu::GpuMat*)obj; - return d_mat->size(); - } -} - -size_t _InputArray::total(int i) const -{ - int k = kind(); - - if( k == MAT ) - { - CV_Assert( i < 0 ); - return ((const Mat*)obj)->total(); - } - - if( k == STD_VECTOR_MAT ) - { - const vector& vv = *(const vector*)obj; - if( i < 0 ) - return vv.size(); - - CV_Assert( i < (int)vv.size() ); - return vv[i].total(); - } - - return size(i).area(); -} - -int _InputArray::type(int i) const -{ - int k = kind(); - - if( k == MAT ) - return ((const Mat*)obj)->type(); - - if( k == EXPR ) - return ((const MatExpr*)obj)->type(); - - if( k == MATX || k == STD_VECTOR || k == STD_VECTOR_VECTOR ) - return CV_MAT_TYPE(flags); - - if( k == NONE ) - return -1; - - if( k == STD_VECTOR_MAT ) - { - const vector& vv = *(const vector*)obj; - CV_Assert( i < (int)vv.size() ); - - return vv[i >= 0 ? i : 0].type(); - } - - if( k == OPENGL_BUFFER ) - return ((const ogl::Buffer*)obj)->type(); - - CV_Assert( k == GPU_MAT ); - //if( k == GPU_MAT ) - return ((const gpu::GpuMat*)obj)->type(); -} - -int _InputArray::depth(int i) const -{ - return CV_MAT_DEPTH(type(i)); -} - -int _InputArray::channels(int i) const -{ - return CV_MAT_CN(type(i)); -} - -bool _InputArray::empty() const -{ - int k = kind(); - - if( k == MAT ) - return ((const Mat*)obj)->empty(); - - if( k == EXPR ) - return false; - - if( k == MATX ) - return false; - - if( k == STD_VECTOR ) - { - const vector& v = *(const vector*)obj; - return v.empty(); - } - - if( k == NONE ) - return true; - - if( k == STD_VECTOR_VECTOR ) - { - const vector >& vv = *(const vector >*)obj; - return vv.empty(); - } - - if( k == STD_VECTOR_MAT ) - { - const vector& vv = *(const vector*)obj; - return vv.empty(); - } - - if( k == OPENGL_BUFFER ) - return ((const ogl::Buffer*)obj)->empty(); - - if( k == OPENGL_TEXTURE ) - return ((const ogl::Texture2D*)obj)->empty(); - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - CV_Assert( k == GPU_MAT ); - //if( k == GPU_MAT ) - return ((const gpu::GpuMat*)obj)->empty(); -} - - -_OutputArray::_OutputArray() {} -#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY -_OutputArray::~_OutputArray() {} -#endif -_OutputArray::_OutputArray(Mat& m) : _InputArray(m) {} -_OutputArray::_OutputArray(vector& vec) : _InputArray(vec) {} -_OutputArray::_OutputArray(gpu::GpuMat& d_mat) : _InputArray(d_mat) {} -_OutputArray::_OutputArray(ogl::Buffer& buf) : _InputArray(buf) {} -_OutputArray::_OutputArray(ogl::Texture2D& tex) : _InputArray(tex) {} - -_OutputArray::_OutputArray(const Mat& m) : _InputArray(m) {flags |= FIXED_SIZE|FIXED_TYPE;} -_OutputArray::_OutputArray(const vector& vec) : _InputArray(vec) {flags |= FIXED_SIZE;} -_OutputArray::_OutputArray(const gpu::GpuMat& d_mat) : _InputArray(d_mat) {flags |= FIXED_SIZE|FIXED_TYPE;} -_OutputArray::_OutputArray(const ogl::Buffer& buf) : _InputArray(buf) {flags |= FIXED_SIZE|FIXED_TYPE;} -_OutputArray::_OutputArray(const ogl::Texture2D& tex) : _InputArray(tex) {flags |= FIXED_SIZE|FIXED_TYPE;} - - -bool _OutputArray::fixedSize() const -{ - return (flags & FIXED_SIZE) == FIXED_SIZE; -} - -bool _OutputArray::fixedType() const -{ - return (flags & FIXED_TYPE) == FIXED_TYPE; -} - -void _OutputArray::create(Size _sz, int mtype, int i, bool allowTransposed, int fixedDepthMask) const -{ - int k = kind(); - if( k == MAT && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((Mat*)obj)->size.operator()() == _sz); - CV_Assert(!fixedType() || ((Mat*)obj)->type() == mtype); - ((Mat*)obj)->create(_sz, mtype); - return; - } - if( k == GPU_MAT && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((gpu::GpuMat*)obj)->size() == _sz); - CV_Assert(!fixedType() || ((gpu::GpuMat*)obj)->type() == mtype); - ((gpu::GpuMat*)obj)->create(_sz, mtype); - return; - } - if( k == OPENGL_BUFFER && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((ogl::Buffer*)obj)->size() == _sz); - CV_Assert(!fixedType() || ((ogl::Buffer*)obj)->type() == mtype); - ((ogl::Buffer*)obj)->create(_sz, mtype); - return; - } - int sizes[] = {_sz.height, _sz.width}; - create(2, sizes, mtype, i, allowTransposed, fixedDepthMask); -} - -void _OutputArray::create(int rows, int cols, int mtype, int i, bool allowTransposed, int fixedDepthMask) const -{ - int k = kind(); - if( k == MAT && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((Mat*)obj)->size.operator()() == Size(cols, rows)); - CV_Assert(!fixedType() || ((Mat*)obj)->type() == mtype); - ((Mat*)obj)->create(rows, cols, mtype); - return; - } - if( k == GPU_MAT && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((gpu::GpuMat*)obj)->size() == Size(cols, rows)); - CV_Assert(!fixedType() || ((gpu::GpuMat*)obj)->type() == mtype); - ((gpu::GpuMat*)obj)->create(rows, cols, mtype); - return; - } - if( k == OPENGL_BUFFER && i < 0 && !allowTransposed && fixedDepthMask == 0 ) - { - CV_Assert(!fixedSize() || ((ogl::Buffer*)obj)->size() == Size(cols, rows)); - CV_Assert(!fixedType() || ((ogl::Buffer*)obj)->type() == mtype); - ((ogl::Buffer*)obj)->create(rows, cols, mtype); - return; - } - int sizes[] = {rows, cols}; - create(2, sizes, mtype, i, allowTransposed, fixedDepthMask); -} - -void _OutputArray::create(int dims, const int* sizes, int mtype, int i, bool allowTransposed, int fixedDepthMask) const -{ - int k = kind(); - mtype = CV_MAT_TYPE(mtype); - - if( k == MAT ) - { - CV_Assert( i < 0 ); - Mat& m = *(Mat*)obj; - if( allowTransposed ) - { - if( !m.isContinuous() ) - { - CV_Assert(!fixedType() && !fixedSize()); - m.release(); - } - - if( dims == 2 && m.dims == 2 && m.data && - m.type() == mtype && m.rows == sizes[1] && m.cols == sizes[0] ) - return; - } - - if(fixedType()) - { - if(CV_MAT_CN(mtype) == m.channels() && ((1 << CV_MAT_TYPE(flags)) & fixedDepthMask) != 0 ) - mtype = m.type(); - else - CV_Assert(CV_MAT_TYPE(mtype) == m.type()); - } - if(fixedSize()) - { - CV_Assert(m.dims == dims); - for(int j = 0; j < dims; ++j) - CV_Assert(m.size[j] == sizes[j]); - } - m.create(dims, sizes, mtype); - return; - } - - if( k == MATX ) - { - CV_Assert( i < 0 ); - int type0 = CV_MAT_TYPE(flags); - CV_Assert( mtype == type0 || (CV_MAT_CN(mtype) == 1 && ((1 << type0) & fixedDepthMask) != 0) ); - CV_Assert( dims == 2 && ((sizes[0] == sz.height && sizes[1] == sz.width) || - (allowTransposed && sizes[0] == sz.width && sizes[1] == sz.height))); - return; - } - - if( k == STD_VECTOR || k == STD_VECTOR_VECTOR ) - { - CV_Assert( dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) ); - size_t len = sizes[0]*sizes[1] > 0 ? sizes[0] + sizes[1] - 1 : 0; - vector* v = (vector*)obj; - - if( k == STD_VECTOR_VECTOR ) - { - vector >& vv = *(vector >*)obj; - if( i < 0 ) - { - CV_Assert(!fixedSize() || len == vv.size()); - vv.resize(len); - return; - } - CV_Assert( i < (int)vv.size() ); - v = &vv[i]; - } - else - CV_Assert( i < 0 ); - - int type0 = CV_MAT_TYPE(flags); - CV_Assert( mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0) ); - - int esz = CV_ELEM_SIZE(type0); - CV_Assert(!fixedSize() || len == ((vector*)v)->size() / esz); - switch( esz ) - { - case 1: - ((vector*)v)->resize(len); - break; - case 2: - ((vector*)v)->resize(len); - break; - case 3: - ((vector*)v)->resize(len); - break; - case 4: - ((vector*)v)->resize(len); - break; - case 6: - ((vector*)v)->resize(len); - break; - case 8: - ((vector*)v)->resize(len); - break; - case 12: - ((vector*)v)->resize(len); - break; - case 16: - ((vector*)v)->resize(len); - break; - case 24: - ((vector*)v)->resize(len); - break; - case 32: - ((vector*)v)->resize(len); - break; - case 36: - ((vector >*)v)->resize(len); - break; - case 48: - ((vector >*)v)->resize(len); - break; - case 64: - ((vector >*)v)->resize(len); - break; - case 128: - ((vector >*)v)->resize(len); - break; - case 256: - ((vector >*)v)->resize(len); - break; - case 512: - ((vector >*)v)->resize(len); - break; - default: - CV_Error_(CV_StsBadArg, ("Vectors with element size %d are not supported. Please, modify OutputArray::create()\n", esz)); - } - return; - } - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - if( k == NONE ) - { - CV_Error(CV_StsNullPtr, "create() called for the missing output array" ); - return; - } - - CV_Assert( k == STD_VECTOR_MAT ); - //if( k == STD_VECTOR_MAT ) - { - vector& v = *(vector*)obj; - - if( i < 0 ) - { - CV_Assert( dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) ); - size_t len = sizes[0]*sizes[1] > 0 ? sizes[0] + sizes[1] - 1 : 0, len0 = v.size(); - - CV_Assert(!fixedSize() || len == len0); - v.resize(len); - if( fixedType() ) - { - int _type = CV_MAT_TYPE(flags); - for( size_t j = len0; j < len; j++ ) - { - if( v[j].type() == _type ) - continue; - CV_Assert( v[j].empty() ); - v[j].flags = (v[j].flags & ~CV_MAT_TYPE_MASK) | _type; - } - } - return; - } - - CV_Assert( i < (int)v.size() ); - Mat& m = v[i]; - - if( allowTransposed ) - { - if( !m.isContinuous() ) - { - CV_Assert(!fixedType() && !fixedSize()); - m.release(); - } - - if( dims == 2 && m.dims == 2 && m.data && - m.type() == mtype && m.rows == sizes[1] && m.cols == sizes[0] ) - return; - } - - if(fixedType()) - { - if(CV_MAT_CN(mtype) == m.channels() && ((1 << CV_MAT_TYPE(flags)) & fixedDepthMask) != 0 ) - mtype = m.type(); - else - CV_Assert(!fixedType() || (CV_MAT_CN(mtype) == m.channels() && ((1 << CV_MAT_TYPE(flags)) & fixedDepthMask) != 0)); - } - if(fixedSize()) - { - CV_Assert(m.dims == dims); - for(int j = 0; j < dims; ++j) - CV_Assert(m.size[j] == sizes[j]); - } - - m.create(dims, sizes, mtype); - } -} - -void _OutputArray::release() const -{ - CV_Assert(!fixedSize()); - - int k = kind(); - - if( k == MAT ) - { - ((Mat*)obj)->release(); - return; - } - - if( k == GPU_MAT ) - { - ((gpu::GpuMat*)obj)->release(); - return; - } - - if( k == OPENGL_BUFFER ) - { - ((ogl::Buffer*)obj)->release(); - return; - } - - if( k == OPENGL_TEXTURE ) - { - ((ogl::Texture2D*)obj)->release(); - return; - } - - if( k == NONE ) - return; - - if( k == STD_VECTOR ) - { - create(Size(), CV_MAT_TYPE(flags)); - return; - } - - if( k == STD_VECTOR_VECTOR ) - { - ((vector >*)obj)->clear(); - return; - } - - if( k == OCL_MAT ) - { - CV_Error(CV_StsNotImplemented, "This method is not implemented for oclMat yet"); - } - - CV_Assert( k == STD_VECTOR_MAT ); - //if( k == STD_VECTOR_MAT ) - { - ((vector*)obj)->clear(); - } -} - -void _OutputArray::clear() const -{ - int k = kind(); - - if( k == MAT ) - { - CV_Assert(!fixedSize()); - ((Mat*)obj)->resize(0); - return; - } - - release(); -} - -bool _OutputArray::needed() const -{ - return kind() != NONE; -} - -Mat& _OutputArray::getMatRef(int i) const -{ - int k = kind(); - if( i < 0 ) - { - CV_Assert( k == MAT ); - return *(Mat*)obj; - } - else - { - CV_Assert( k == STD_VECTOR_MAT ); - vector& v = *(vector*)obj; - CV_Assert( i < (int)v.size() ); - return v[i]; - } -} - -gpu::GpuMat& _OutputArray::getGpuMatRef() const -{ - int k = kind(); - CV_Assert( k == GPU_MAT ); - return *(gpu::GpuMat*)obj; -} - -ogl::Buffer& _OutputArray::getOGlBufferRef() const -{ - int k = kind(); - CV_Assert( k == OPENGL_BUFFER ); - return *(ogl::Buffer*)obj; -} - -ogl::Texture2D& _OutputArray::getOGlTexture2DRef() const -{ - int k = kind(); - CV_Assert( k == OPENGL_TEXTURE ); - return *(ogl::Texture2D*)obj; -} - -static _OutputArray _none; -OutputArray noArray() { return _none; } - -} - -/*************************************************************************************************\ - Matrix Operations -\*************************************************************************************************/ - -void cv::hconcat(const Mat* src, size_t nsrc, OutputArray _dst) -{ - if( nsrc == 0 || !src ) - { - _dst.release(); - return; - } - - int totalCols = 0, cols = 0; - size_t i; - for( i = 0; i < nsrc; i++ ) - { - CV_Assert( !src[i].empty() && src[i].dims <= 2 && - src[i].rows == src[0].rows && - src[i].type() == src[0].type()); - totalCols += src[i].cols; - } - _dst.create( src[0].rows, totalCols, src[0].type()); - Mat dst = _dst.getMat(); - for( i = 0; i < nsrc; i++ ) - { - Mat dpart = dst(Rect(cols, 0, src[i].cols, src[i].rows)); - src[i].copyTo(dpart); - cols += src[i].cols; - } -} - -void cv::hconcat(InputArray src1, InputArray src2, OutputArray dst) -{ - Mat src[] = {src1.getMat(), src2.getMat()}; - hconcat(src, 2, dst); -} - -void cv::hconcat(InputArray _src, OutputArray dst) -{ - vector src; - _src.getMatVector(src); - hconcat(!src.empty() ? &src[0] : 0, src.size(), dst); -} - -void cv::vconcat(const Mat* src, size_t nsrc, OutputArray _dst) -{ - if( nsrc == 0 || !src ) - { - _dst.release(); - return; - } - - int totalRows = 0, rows = 0; - size_t i; - for( i = 0; i < nsrc; i++ ) - { - CV_Assert( !src[i].empty() && src[i].dims <= 2 && - src[i].cols == src[0].cols && - src[i].type() == src[0].type()); - totalRows += src[i].rows; - } - _dst.create( totalRows, src[0].cols, src[0].type()); - Mat dst = _dst.getMat(); - for( i = 0; i < nsrc; i++ ) - { - Mat dpart(dst, Rect(0, rows, src[i].cols, src[i].rows)); - src[i].copyTo(dpart); - rows += src[i].rows; - } -} - -void cv::vconcat(InputArray src1, InputArray src2, OutputArray dst) -{ - Mat src[] = {src1.getMat(), src2.getMat()}; - vconcat(src, 2, dst); -} - -void cv::vconcat(InputArray _src, OutputArray dst) -{ - vector src; - _src.getMatVector(src); - vconcat(!src.empty() ? &src[0] : 0, src.size(), dst); -} - -//////////////////////////////////////// set identity //////////////////////////////////////////// -void cv::setIdentity( InputOutputArray _m, const Scalar& s ) -{ - Mat m = _m.getMat(); - CV_Assert( m.dims <= 2 ); - int i, j, rows = m.rows, cols = m.cols, type = m.type(); - - if( type == CV_32FC1 ) - { - float* data = (float*)m.data; - float val = (float)s[0]; - size_t step = m.step/sizeof(data[0]); - - for( i = 0; i < rows; i++, data += step ) - { - for( j = 0; j < cols; j++ ) - data[j] = 0; - if( i < cols ) - data[i] = val; - } - } - else if( type == CV_64FC1 ) - { - double* data = (double*)m.data; - double val = s[0]; - size_t step = m.step/sizeof(data[0]); - - for( i = 0; i < rows; i++, data += step ) - { - for( j = 0; j < cols; j++ ) - data[j] = j == i ? val : 0; - } - } - else - { - m = Scalar(0); - m.diag() = s; - } -} - -//////////////////////////////////////////// trace /////////////////////////////////////////// - -cv::Scalar cv::trace( InputArray _m ) -{ - Mat m = _m.getMat(); - CV_Assert( m.dims <= 2 ); - int i, type = m.type(); - int nm = std::min(m.rows, m.cols); - - if( type == CV_32FC1 ) - { - const float* ptr = (const float*)m.data; - size_t step = m.step/sizeof(ptr[0]) + 1; - double _s = 0; - for( i = 0; i < nm; i++ ) - _s += ptr[i*step]; - return _s; - } - - if( type == CV_64FC1 ) - { - const double* ptr = (const double*)m.data; - size_t step = m.step/sizeof(ptr[0]) + 1; - double _s = 0; - for( i = 0; i < nm; i++ ) - _s += ptr[i*step]; - return _s; - } - - return cv::sum(m.diag()); -} - -////////////////////////////////////// transpose ///////////////////////////////////////// - -namespace cv -{ - -template static void -transpose_( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size sz ) -{ - int i=0, j, m = sz.width, n = sz.height; - - #if CV_ENABLE_UNROLLED - for(; i <= m - 4; i += 4 ) - { - T* d0 = (T*)(dst + dstep*i); - T* d1 = (T*)(dst + dstep*(i+1)); - T* d2 = (T*)(dst + dstep*(i+2)); - T* d3 = (T*)(dst + dstep*(i+3)); - - for( j = 0; j <= n - 4; j += 4 ) - { - const T* s0 = (const T*)(src + i*sizeof(T) + sstep*j); - const T* s1 = (const T*)(src + i*sizeof(T) + sstep*(j+1)); - const T* s2 = (const T*)(src + i*sizeof(T) + sstep*(j+2)); - const T* s3 = (const T*)(src + i*sizeof(T) + sstep*(j+3)); - - d0[j] = s0[0]; d0[j+1] = s1[0]; d0[j+2] = s2[0]; d0[j+3] = s3[0]; - d1[j] = s0[1]; d1[j+1] = s1[1]; d1[j+2] = s2[1]; d1[j+3] = s3[1]; - d2[j] = s0[2]; d2[j+1] = s1[2]; d2[j+2] = s2[2]; d2[j+3] = s3[2]; - d3[j] = s0[3]; d3[j+1] = s1[3]; d3[j+2] = s2[3]; d3[j+3] = s3[3]; - } - - for( ; j < n; j++ ) - { - const T* s0 = (const T*)(src + i*sizeof(T) + j*sstep); - d0[j] = s0[0]; d1[j] = s0[1]; d2[j] = s0[2]; d3[j] = s0[3]; - } - } - #endif - for( ; i < m; i++ ) - { - T* d0 = (T*)(dst + dstep*i); - j = 0; - #if CV_ENABLE_UNROLLED - for(; j <= n - 4; j += 4 ) - { - const T* s0 = (const T*)(src + i*sizeof(T) + sstep*j); - const T* s1 = (const T*)(src + i*sizeof(T) + sstep*(j+1)); - const T* s2 = (const T*)(src + i*sizeof(T) + sstep*(j+2)); - const T* s3 = (const T*)(src + i*sizeof(T) + sstep*(j+3)); - - d0[j] = s0[0]; d0[j+1] = s1[0]; d0[j+2] = s2[0]; d0[j+3] = s3[0]; - } - #endif - for( ; j < n; j++ ) - { - const T* s0 = (const T*)(src + i*sizeof(T) + j*sstep); - d0[j] = s0[0]; - } - } -} - -template static void -transposeI_( uchar* data, size_t step, int n ) -{ - int i, j; - for( i = 0; i < n; i++ ) - { - T* row = (T*)(data + step*i); - uchar* data1 = data + i*sizeof(T); - for( j = i+1; j < n; j++ ) - std::swap( row[j], *(T*)(data1 + step*j) ); - } -} - -typedef void (*TransposeFunc)( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size sz ); -typedef void (*TransposeInplaceFunc)( uchar* data, size_t step, int n ); - -#define DEF_TRANSPOSE_FUNC(suffix, type) \ -static void transpose_##suffix( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size sz ) \ -{ transpose_(src, sstep, dst, dstep, sz); } \ -\ -static void transposeI_##suffix( uchar* data, size_t step, int n ) \ -{ transposeI_(data, step, n); } - -DEF_TRANSPOSE_FUNC(8u, uchar) -DEF_TRANSPOSE_FUNC(16u, ushort) -DEF_TRANSPOSE_FUNC(8uC3, Vec3b) -DEF_TRANSPOSE_FUNC(32s, int) -DEF_TRANSPOSE_FUNC(16uC3, Vec3s) -DEF_TRANSPOSE_FUNC(32sC2, Vec2i) -DEF_TRANSPOSE_FUNC(32sC3, Vec3i) -DEF_TRANSPOSE_FUNC(32sC4, Vec4i) -DEF_TRANSPOSE_FUNC(32sC6, Vec6i) -DEF_TRANSPOSE_FUNC(32sC8, Vec8i) - -static TransposeFunc transposeTab[] = -{ - 0, transpose_8u, transpose_16u, transpose_8uC3, transpose_32s, 0, transpose_16uC3, 0, - transpose_32sC2, 0, 0, 0, transpose_32sC3, 0, 0, 0, transpose_32sC4, - 0, 0, 0, 0, 0, 0, 0, transpose_32sC6, 0, 0, 0, 0, 0, 0, 0, transpose_32sC8 -}; - -static TransposeInplaceFunc transposeInplaceTab[] = -{ - 0, transposeI_8u, transposeI_16u, transposeI_8uC3, transposeI_32s, 0, transposeI_16uC3, 0, - transposeI_32sC2, 0, 0, 0, transposeI_32sC3, 0, 0, 0, transposeI_32sC4, - 0, 0, 0, 0, 0, 0, 0, transposeI_32sC6, 0, 0, 0, 0, 0, 0, 0, transposeI_32sC8 -}; - -} - -void cv::transpose( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - size_t esz = src.elemSize(); - CV_Assert( src.dims <= 2 && esz <= (size_t)32 ); - - _dst.create(src.cols, src.rows, src.type()); - Mat dst = _dst.getMat(); - - // handle the case of single-column/single-row matrices, stored in STL vectors. - if( src.rows != dst.cols || src.cols != dst.rows ) - { - CV_Assert( src.size() == dst.size() && (src.cols == 1 || src.rows == 1) ); - src.copyTo(dst); - return; - } - - if( dst.data == src.data ) - { - TransposeInplaceFunc func = transposeInplaceTab[esz]; - CV_Assert( func != 0 ); - func( dst.data, dst.step, dst.rows ); - } - else - { - TransposeFunc func = transposeTab[esz]; - CV_Assert( func != 0 ); - func( src.data, src.step, dst.data, dst.step, src.size() ); - } -} - - -////////////////////////////////////// completeSymm ///////////////////////////////////////// - -void cv::completeSymm( InputOutputArray _m, bool LtoR ) -{ - Mat m = _m.getMat(); - size_t step = m.step, esz = m.elemSize(); - CV_Assert( m.dims <= 2 && m.rows == m.cols ); - - int rows = m.rows; - int j0 = 0, j1 = rows; - - uchar* data = m.data; - for( int i = 0; i < rows; i++ ) - { - if( !LtoR ) j1 = i; else j0 = i+1; - for( int j = j0; j < j1; j++ ) - memcpy(data + (i*step + j*esz), data + (j*step + i*esz), esz); - } -} - - -cv::Mat cv::Mat::cross(InputArray _m) const -{ - Mat m = _m.getMat(); - int tp = type(), d = CV_MAT_DEPTH(tp); - CV_Assert( dims <= 2 && m.dims <= 2 && size() == m.size() && tp == m.type() && - ((rows == 3 && cols == 1) || (cols*channels() == 3 && rows == 1))); - Mat result(rows, cols, tp); - - if( d == CV_32F ) - { - const float *a = (const float*)data, *b = (const float*)m.data; - float* c = (float*)result.data; - size_t lda = rows > 1 ? step/sizeof(a[0]) : 1; - size_t ldb = rows > 1 ? m.step/sizeof(b[0]) : 1; - - c[0] = a[lda] * b[ldb*2] - a[lda*2] * b[ldb]; - c[1] = a[lda*2] * b[0] - a[0] * b[ldb*2]; - c[2] = a[0] * b[ldb] - a[lda] * b[0]; - } - else if( d == CV_64F ) - { - const double *a = (const double*)data, *b = (const double*)m.data; - double* c = (double*)result.data; - size_t lda = rows > 1 ? step/sizeof(a[0]) : 1; - size_t ldb = rows > 1 ? m.step/sizeof(b[0]) : 1; - - c[0] = a[lda] * b[ldb*2] - a[lda*2] * b[ldb]; - c[1] = a[lda*2] * b[0] - a[0] * b[ldb*2]; - c[2] = a[0] * b[ldb] - a[lda] * b[0]; - } - - return result; -} - - -////////////////////////////////////////// reduce //////////////////////////////////////////// - -namespace cv -{ - -template static void -reduceR_( const Mat& srcmat, Mat& dstmat ) -{ - typedef typename Op::rtype WT; - Size size = srcmat.size(); - size.width *= srcmat.channels(); - AutoBuffer buffer(size.width); - WT* buf = buffer; - ST* dst = (ST*)dstmat.data; - const T* src = (const T*)srcmat.data; - size_t srcstep = srcmat.step/sizeof(src[0]); - int i; - Op op; - - for( i = 0; i < size.width; i++ ) - buf[i] = src[i]; - - for( ; --size.height; ) - { - src += srcstep; - i = 0; - #if CV_ENABLE_UNROLLED - for(; i <= size.width - 4; i += 4 ) - { - WT s0, s1; - s0 = op(buf[i], (WT)src[i]); - s1 = op(buf[i+1], (WT)src[i+1]); - buf[i] = s0; buf[i+1] = s1; - - s0 = op(buf[i+2], (WT)src[i+2]); - s1 = op(buf[i+3], (WT)src[i+3]); - buf[i+2] = s0; buf[i+3] = s1; - } - #endif - for( ; i < size.width; i++ ) - buf[i] = op(buf[i], (WT)src[i]); - } - - for( i = 0; i < size.width; i++ ) - dst[i] = (ST)buf[i]; -} - - -template static void -reduceC_( const Mat& srcmat, Mat& dstmat ) -{ - typedef typename Op::rtype WT; - Size size = srcmat.size(); - int i, k, cn = srcmat.channels(); - size.width *= cn; - Op op; - - for( int y = 0; y < size.height; y++ ) - { - const T* src = (const T*)(srcmat.data + srcmat.step*y); - ST* dst = (ST*)(dstmat.data + dstmat.step*y); - if( size.width == cn ) - for( k = 0; k < cn; k++ ) - dst[k] = src[k]; - else - { - for( k = 0; k < cn; k++ ) - { - WT a0 = src[k], a1 = src[k+cn]; - for( i = 2*cn; i <= size.width - 4*cn; i += 4*cn ) - { - a0 = op(a0, (WT)src[i+k]); - a1 = op(a1, (WT)src[i+k+cn]); - a0 = op(a0, (WT)src[i+k+cn*2]); - a1 = op(a1, (WT)src[i+k+cn*3]); - } - - for( ; i < size.width; i += cn ) - { - a0 = op(a0, (WT)src[i+k]); - } - a0 = op(a0, a1); - dst[k] = (ST)a0; - } - } - } -} - -typedef void (*ReduceFunc)( const Mat& src, Mat& dst ); - -} - -#define reduceSumR8u32s reduceR_ > -#define reduceSumR8u32f reduceR_ > -#define reduceSumR8u64f reduceR_ > -#define reduceSumR16u32f reduceR_ > -#define reduceSumR16u64f reduceR_ > -#define reduceSumR16s32f reduceR_ > -#define reduceSumR16s64f reduceR_ > -#define reduceSumR32f32f reduceR_ > -#define reduceSumR32f64f reduceR_ > -#define reduceSumR64f64f reduceR_ > - -#define reduceMaxR8u reduceR_ > -#define reduceMaxR16u reduceR_ > -#define reduceMaxR16s reduceR_ > -#define reduceMaxR32f reduceR_ > -#define reduceMaxR64f reduceR_ > - -#define reduceMinR8u reduceR_ > -#define reduceMinR16u reduceR_ > -#define reduceMinR16s reduceR_ > -#define reduceMinR32f reduceR_ > -#define reduceMinR64f reduceR_ > - -#define reduceSumC8u32s reduceC_ > -#define reduceSumC8u32f reduceC_ > -#define reduceSumC8u64f reduceC_ > -#define reduceSumC16u32f reduceC_ > -#define reduceSumC16u64f reduceC_ > -#define reduceSumC16s32f reduceC_ > -#define reduceSumC16s64f reduceC_ > -#define reduceSumC32f32f reduceC_ > -#define reduceSumC32f64f reduceC_ > -#define reduceSumC64f64f reduceC_ > - -#define reduceMaxC8u reduceC_ > -#define reduceMaxC16u reduceC_ > -#define reduceMaxC16s reduceC_ > -#define reduceMaxC32f reduceC_ > -#define reduceMaxC64f reduceC_ > - -#define reduceMinC8u reduceC_ > -#define reduceMinC16u reduceC_ > -#define reduceMinC16s reduceC_ > -#define reduceMinC32f reduceC_ > -#define reduceMinC64f reduceC_ > - -void cv::reduce(InputArray _src, OutputArray _dst, int dim, int op, int dtype) -{ - Mat src = _src.getMat(); - CV_Assert( src.dims <= 2 ); - int op0 = op; - int stype = src.type(), sdepth = src.depth(), cn = src.channels(); - if( dtype < 0 ) - dtype = _dst.fixedType() ? _dst.type() : stype; - int ddepth = CV_MAT_DEPTH(dtype); - - _dst.create(dim == 0 ? 1 : src.rows, dim == 0 ? src.cols : 1, - CV_MAKETYPE(dtype >= 0 ? dtype : stype, cn)); - Mat dst = _dst.getMat(), temp = dst; - - CV_Assert( op == CV_REDUCE_SUM || op == CV_REDUCE_MAX || - op == CV_REDUCE_MIN || op == CV_REDUCE_AVG ); - CV_Assert( src.channels() == dst.channels() ); - - if( op == CV_REDUCE_AVG ) - { - op = CV_REDUCE_SUM; - if( sdepth < CV_32S && ddepth < CV_32S ) - { - temp.create(dst.rows, dst.cols, CV_32SC(cn)); - ddepth = CV_32S; - } - } - - ReduceFunc func = 0; - if( dim == 0 ) - { - if( op == CV_REDUCE_SUM ) - { - if(sdepth == CV_8U && ddepth == CV_32S) - func = GET_OPTIMIZED(reduceSumR8u32s); - else if(sdepth == CV_8U && ddepth == CV_32F) - func = reduceSumR8u32f; - else if(sdepth == CV_8U && ddepth == CV_64F) - func = reduceSumR8u64f; - else if(sdepth == CV_16U && ddepth == CV_32F) - func = reduceSumR16u32f; - else if(sdepth == CV_16U && ddepth == CV_64F) - func = reduceSumR16u64f; - else if(sdepth == CV_16S && ddepth == CV_32F) - func = reduceSumR16s32f; - else if(sdepth == CV_16S && ddepth == CV_64F) - func = reduceSumR16s64f; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceSumR32f32f); - else if(sdepth == CV_32F && ddepth == CV_64F) - func = reduceSumR32f64f; - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceSumR64f64f; - } - else if(op == CV_REDUCE_MAX) - { - if(sdepth == CV_8U && ddepth == CV_8U) - func = GET_OPTIMIZED(reduceMaxR8u); - else if(sdepth == CV_16U && ddepth == CV_16U) - func = reduceMaxR16u; - else if(sdepth == CV_16S && ddepth == CV_16S) - func = reduceMaxR16s; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceMaxR32f); - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceMaxR64f; - } - else if(op == CV_REDUCE_MIN) - { - if(sdepth == CV_8U && ddepth == CV_8U) - func = GET_OPTIMIZED(reduceMinR8u); - else if(sdepth == CV_16U && ddepth == CV_16U) - func = reduceMinR16u; - else if(sdepth == CV_16S && ddepth == CV_16S) - func = reduceMinR16s; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceMinR32f); - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceMinR64f; - } - } - else - { - if(op == CV_REDUCE_SUM) - { - if(sdepth == CV_8U && ddepth == CV_32S) - func = GET_OPTIMIZED(reduceSumC8u32s); - else if(sdepth == CV_8U && ddepth == CV_32F) - func = reduceSumC8u32f; - else if(sdepth == CV_8U && ddepth == CV_64F) - func = reduceSumC8u64f; - else if(sdepth == CV_16U && ddepth == CV_32F) - func = reduceSumC16u32f; - else if(sdepth == CV_16U && ddepth == CV_64F) - func = reduceSumC16u64f; - else if(sdepth == CV_16S && ddepth == CV_32F) - func = reduceSumC16s32f; - else if(sdepth == CV_16S && ddepth == CV_64F) - func = reduceSumC16s64f; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceSumC32f32f); - else if(sdepth == CV_32F && ddepth == CV_64F) - func = reduceSumC32f64f; - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceSumC64f64f; - } - else if(op == CV_REDUCE_MAX) - { - if(sdepth == CV_8U && ddepth == CV_8U) - func = GET_OPTIMIZED(reduceMaxC8u); - else if(sdepth == CV_16U && ddepth == CV_16U) - func = reduceMaxC16u; - else if(sdepth == CV_16S && ddepth == CV_16S) - func = reduceMaxC16s; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceMaxC32f); - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceMaxC64f; - } - else if(op == CV_REDUCE_MIN) - { - if(sdepth == CV_8U && ddepth == CV_8U) - func = GET_OPTIMIZED(reduceMinC8u); - else if(sdepth == CV_16U && ddepth == CV_16U) - func = reduceMinC16u; - else if(sdepth == CV_16S && ddepth == CV_16S) - func = reduceMinC16s; - else if(sdepth == CV_32F && ddepth == CV_32F) - func = GET_OPTIMIZED(reduceMinC32f); - else if(sdepth == CV_64F && ddepth == CV_64F) - func = reduceMinC64f; - } - } - - if( !func ) - CV_Error( CV_StsUnsupportedFormat, - "Unsupported combination of input and output array formats" ); - - func( src, temp ); - - if( op0 == CV_REDUCE_AVG ) - temp.convertTo(dst, dst.type(), 1./(dim == 0 ? src.rows : src.cols)); -} - - -//////////////////////////////////////// sort /////////////////////////////////////////// - -namespace cv -{ - -template static void sort_( const Mat& src, Mat& dst, int flags ) -{ - AutoBuffer buf; - T* bptr; - int i, j, n, len; - bool sortRows = (flags & 1) == CV_SORT_EVERY_ROW; - bool inplace = src.data == dst.data; - bool sortDescending = (flags & CV_SORT_DESCENDING) != 0; - - if( sortRows ) - n = src.rows, len = src.cols; - else - { - n = src.cols, len = src.rows; - buf.allocate(len); - } - bptr = (T*)buf; - - for( i = 0; i < n; i++ ) - { - T* ptr = bptr; - if( sortRows ) - { - T* dptr = (T*)(dst.data + dst.step*i); - if( !inplace ) - { - const T* sptr = (const T*)(src.data + src.step*i); - for( j = 0; j < len; j++ ) - dptr[j] = sptr[j]; - } - ptr = dptr; - } - else - { - for( j = 0; j < len; j++ ) - ptr[j] = ((const T*)(src.data + src.step*j))[i]; - } - std::sort( ptr, ptr + len, LessThan() ); - if( sortDescending ) - for( j = 0; j < len/2; j++ ) - std::swap(ptr[j], ptr[len-1-j]); - if( !sortRows ) - for( j = 0; j < len; j++ ) - ((T*)(dst.data + dst.step*j))[i] = ptr[j]; - } -} - - -template static void sortIdx_( const Mat& src, Mat& dst, int flags ) -{ - AutoBuffer buf; - AutoBuffer ibuf; - T* bptr; - int* _iptr; - int i, j, n, len; - bool sortRows = (flags & 1) == CV_SORT_EVERY_ROW; - bool sortDescending = (flags & CV_SORT_DESCENDING) != 0; - - CV_Assert( src.data != dst.data ); - - if( sortRows ) - n = src.rows, len = src.cols; - else - { - n = src.cols, len = src.rows; - buf.allocate(len); - ibuf.allocate(len); - } - bptr = (T*)buf; - _iptr = (int*)ibuf; - - for( i = 0; i < n; i++ ) - { - T* ptr = bptr; - int* iptr = _iptr; - - if( sortRows ) - { - ptr = (T*)(src.data + src.step*i); - iptr = (int*)(dst.data + dst.step*i); - } - else - { - for( j = 0; j < len; j++ ) - ptr[j] = ((const T*)(src.data + src.step*j))[i]; - } - for( j = 0; j < len; j++ ) - iptr[j] = j; - std::sort( iptr, iptr + len, LessThanIdx(ptr) ); - if( sortDescending ) - for( j = 0; j < len/2; j++ ) - std::swap(iptr[j], iptr[len-1-j]); - if( !sortRows ) - for( j = 0; j < len; j++ ) - ((int*)(dst.data + dst.step*j))[i] = iptr[j]; - } -} - -typedef void (*SortFunc)(const Mat& src, Mat& dst, int flags); - -} - -void cv::sort( InputArray _src, OutputArray _dst, int flags ) -{ - static SortFunc tab[] = - { - sort_, sort_, sort_, sort_, - sort_, sort_, sort_, 0 - }; - Mat src = _src.getMat(); - SortFunc func = tab[src.depth()]; - CV_Assert( src.dims <= 2 && src.channels() == 1 && func != 0 ); - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - func( src, dst, flags ); -} - -void cv::sortIdx( InputArray _src, OutputArray _dst, int flags ) -{ - static SortFunc tab[] = - { - sortIdx_, sortIdx_, sortIdx_, sortIdx_, - sortIdx_, sortIdx_, sortIdx_, 0 - }; - Mat src = _src.getMat(); - SortFunc func = tab[src.depth()]; - CV_Assert( src.dims <= 2 && src.channels() == 1 && func != 0 ); - - Mat dst = _dst.getMat(); - if( dst.data == src.data ) - _dst.release(); - _dst.create( src.size(), CV_32S ); - dst = _dst.getMat(); - func( src, dst, flags ); -} - - -////////////////////////////////////////// kmeans //////////////////////////////////////////// - -namespace cv -{ - -static void generateRandomCenter(const vector& box, float* center, RNG& rng) -{ - size_t j, dims = box.size(); - float margin = 1.f/dims; - for( j = 0; j < dims; j++ ) - center[j] = ((float)rng*(1.f+margin*2.f)-margin)*(box[j][1] - box[j][0]) + box[j][0]; -} - -class KMeansPPDistanceComputer : public ParallelLoopBody -{ -public: - KMeansPPDistanceComputer( float *_tdist2, - const float *_data, - const float *_dist, - int _dims, - size_t _step, - size_t _stepci ) - : tdist2(_tdist2), - data(_data), - dist(_dist), - dims(_dims), - step(_step), - stepci(_stepci) { } - - void operator()( const cv::Range& range ) const - { - const int begin = range.start; - const int end = range.end; - - for ( int i = begin; i(0); - size_t step = _data.step/sizeof(data[0]); - vector _centers(K); - int* centers = &_centers[0]; - vector _dist(N*3); - float* dist = &_dist[0], *tdist = dist + N, *tdist2 = tdist + N; - double sum0 = 0; - - centers[0] = (unsigned)rng % N; - - for( i = 0; i < N; i++ ) - { - dist[i] = normL2Sqr_(data + step*i, data + step*centers[0], dims); - sum0 += dist[i]; - } - - for( k = 1; k < K; k++ ) - { - double bestSum = DBL_MAX; - int bestCenter = -1; - - for( j = 0; j < trials; j++ ) - { - double p = (double)rng*sum0, s = 0; - for( i = 0; i < N-1; i++ ) - if( (p -= dist[i]) <= 0 ) - break; - int ci = i; - - parallel_for_(Range(0, N), - KMeansPPDistanceComputer(tdist2, data, dist, dims, step, step*ci)); - for( i = 0; i < N; i++ ) - { - s += tdist2[i]; - } - - if( s < bestSum ) - { - bestSum = s; - bestCenter = ci; - std::swap(tdist, tdist2); - } - } - centers[k] = bestCenter; - sum0 = bestSum; - std::swap(dist, tdist); - } - - for( k = 0; k < K; k++ ) - { - const float* src = data + step*centers[k]; - float* dst = _out_centers.ptr(k); - for( j = 0; j < dims; j++ ) - dst[j] = src[j]; - } -} - -class KMeansDistanceComputer : public ParallelLoopBody -{ -public: - KMeansDistanceComputer( double *_distances, - int *_labels, - const Mat& _data, - const Mat& _centers ) - : distances(_distances), - labels(_labels), - data(_data), - centers(_centers) - { - } - - void operator()( const Range& range ) const - { - const int begin = range.start; - const int end = range.end; - const int K = centers.rows; - const int dims = centers.cols; - - const float *sample; - for( int i = begin; i(i); - int k_best = 0; - double min_dist = DBL_MAX; - - for( int k = 0; k < K; k++ ) - { - const float* center = centers.ptr(k); - const double dist = normL2Sqr_(sample, center, dims); - - if( min_dist > dist ) - { - min_dist = dist; - k_best = k; - } - } - - distances[i] = min_dist; - labels[i] = k_best; - } - } - -private: - KMeansDistanceComputer& operator=(const KMeansDistanceComputer&); // to quiet MSVC - - double *distances; - int *labels; - const Mat& data; - const Mat& centers; -}; - -} - -double cv::kmeans( InputArray _data, int K, - InputOutputArray _bestLabels, - TermCriteria criteria, int attempts, - int flags, OutputArray _centers ) -{ - const int SPP_TRIALS = 3; - Mat data = _data.getMat(); - bool isrow = data.rows == 1 && data.channels() > 1; - int N = !isrow ? data.rows : data.cols; - int dims = (!isrow ? data.cols : 1)*data.channels(); - int type = data.depth(); - - attempts = std::max(attempts, 1); - CV_Assert( data.dims <= 2 && type == CV_32F && K > 0 ); - CV_Assert( N >= K ); - - _bestLabels.create(N, 1, CV_32S, -1, true); - - Mat _labels, best_labels = _bestLabels.getMat(); - if( flags & CV_KMEANS_USE_INITIAL_LABELS ) - { - CV_Assert( (best_labels.cols == 1 || best_labels.rows == 1) && - best_labels.cols*best_labels.rows == N && - best_labels.type() == CV_32S && - best_labels.isContinuous()); - best_labels.copyTo(_labels); - } - else - { - if( !((best_labels.cols == 1 || best_labels.rows == 1) && - best_labels.cols*best_labels.rows == N && - best_labels.type() == CV_32S && - best_labels.isContinuous())) - best_labels.create(N, 1, CV_32S); - _labels.create(best_labels.size(), best_labels.type()); - } - int* labels = _labels.ptr(); - - Mat centers(K, dims, type), old_centers(K, dims, type), temp(1, dims, type); - vector counters(K); - vector _box(dims); - Vec2f* box = &_box[0]; - double best_compactness = DBL_MAX, compactness = 0; - RNG& rng = theRNG(); - int a, iter, i, j, k; - - if( criteria.type & TermCriteria::EPS ) - criteria.epsilon = std::max(criteria.epsilon, 0.); - else - criteria.epsilon = FLT_EPSILON; - criteria.epsilon *= criteria.epsilon; - - if( criteria.type & TermCriteria::COUNT ) - criteria.maxCount = std::min(std::max(criteria.maxCount, 2), 100); - else - criteria.maxCount = 100; - - if( K == 1 ) - { - attempts = 1; - criteria.maxCount = 2; - } - - const float* sample = data.ptr(0); - for( j = 0; j < dims; j++ ) - box[j] = Vec2f(sample[j], sample[j]); - - for( i = 1; i < N; i++ ) - { - sample = data.ptr(i); - for( j = 0; j < dims; j++ ) - { - float v = sample[j]; - box[j][0] = std::min(box[j][0], v); - box[j][1] = std::max(box[j][1], v); - } - } - - for( a = 0; a < attempts; a++ ) - { - double max_center_shift = DBL_MAX; - for( iter = 0;; ) - { - swap(centers, old_centers); - - if( iter == 0 && (a > 0 || !(flags & KMEANS_USE_INITIAL_LABELS)) ) - { - if( flags & KMEANS_PP_CENTERS ) - generateCentersPP(data, centers, K, rng, SPP_TRIALS); - else - { - for( k = 0; k < K; k++ ) - generateRandomCenter(_box, centers.ptr(k), rng); - } - } - else - { - if( iter == 0 && a == 0 && (flags & KMEANS_USE_INITIAL_LABELS) ) - { - for( i = 0; i < N; i++ ) - CV_Assert( (unsigned)labels[i] < (unsigned)K ); - } - - // compute centers - centers = Scalar(0); - for( k = 0; k < K; k++ ) - counters[k] = 0; - - for( i = 0; i < N; i++ ) - { - sample = data.ptr(i); - k = labels[i]; - float* center = centers.ptr(k); - j=0; - #if CV_ENABLE_UNROLLED - for(; j <= dims - 4; j += 4 ) - { - float t0 = center[j] + sample[j]; - float t1 = center[j+1] + sample[j+1]; - - center[j] = t0; - center[j+1] = t1; - - t0 = center[j+2] + sample[j+2]; - t1 = center[j+3] + sample[j+3]; - - center[j+2] = t0; - center[j+3] = t1; - } - #endif - for( ; j < dims; j++ ) - center[j] += sample[j]; - counters[k]++; - } - - if( iter > 0 ) - max_center_shift = 0; - - for( k = 0; k < K; k++ ) - { - if( counters[k] != 0 ) - continue; - - // if some cluster appeared to be empty then: - // 1. find the biggest cluster - // 2. find the farthest from the center point in the biggest cluster - // 3. exclude the farthest point from the biggest cluster and form a new 1-point cluster. - int max_k = 0; - for( int k1 = 1; k1 < K; k1++ ) - { - if( counters[max_k] < counters[k1] ) - max_k = k1; - } - - double max_dist = 0; - int farthest_i = -1; - float* new_center = centers.ptr(k); - float* old_center = centers.ptr(max_k); - float* _old_center = temp.ptr(); // normalized - float scale = 1.f/counters[max_k]; - for( j = 0; j < dims; j++ ) - _old_center[j] = old_center[j]*scale; - - for( i = 0; i < N; i++ ) - { - if( labels[i] != max_k ) - continue; - sample = data.ptr(i); - double dist = normL2Sqr_(sample, _old_center, dims); - - if( max_dist <= dist ) - { - max_dist = dist; - farthest_i = i; - } - } - - counters[max_k]--; - counters[k]++; - labels[farthest_i] = k; - sample = data.ptr(farthest_i); - - for( j = 0; j < dims; j++ ) - { - old_center[j] -= sample[j]; - new_center[j] += sample[j]; - } - } - - for( k = 0; k < K; k++ ) - { - float* center = centers.ptr(k); - CV_Assert( counters[k] != 0 ); - - float scale = 1.f/counters[k]; - for( j = 0; j < dims; j++ ) - center[j] *= scale; - - if( iter > 0 ) - { - double dist = 0; - const float* old_center = old_centers.ptr(k); - for( j = 0; j < dims; j++ ) - { - double t = center[j] - old_center[j]; - dist += t*t; - } - max_center_shift = std::max(max_center_shift, dist); - } - } - } - - if( ++iter == MAX(criteria.maxCount, 2) || max_center_shift <= criteria.epsilon ) - break; - - // assign labels - Mat dists(1, N, CV_64F); - double* dist = dists.ptr(0); - parallel_for_(Range(0, N), - KMeansDistanceComputer(dist, labels, data, centers)); - compactness = 0; - for( i = 0; i < N; i++ ) - { - compactness += dist[i]; - } - } - - if( compactness < best_compactness ) - { - best_compactness = compactness; - if( _centers.needed() ) - centers.copyTo(_centers); - _labels.copyTo(best_labels); - } - } - - return best_compactness; -} - - -CV_IMPL void cvSetIdentity( CvArr* arr, CvScalar value ) -{ - cv::Mat m = cv::cvarrToMat(arr); - cv::setIdentity(m, value); -} - - -CV_IMPL CvScalar cvTrace( const CvArr* arr ) -{ - return cv::trace(cv::cvarrToMat(arr)); -} - - -CV_IMPL void cvTranspose( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.rows == dst.cols && src.cols == dst.rows && src.type() == dst.type() ); - transpose( src, dst ); -} - - -CV_IMPL void cvCompleteSymm( CvMat* matrix, int LtoR ) -{ - cv::Mat m(matrix); - cv::completeSymm( m, LtoR != 0 ); -} - - -CV_IMPL void cvCrossProduct( const CvArr* srcAarr, const CvArr* srcBarr, CvArr* dstarr ) -{ - cv::Mat srcA = cv::cvarrToMat(srcAarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( srcA.size() == dst.size() && srcA.type() == dst.type() ); - srcA.cross(cv::cvarrToMat(srcBarr)).copyTo(dst); -} - - -CV_IMPL void -cvReduce( const CvArr* srcarr, CvArr* dstarr, int dim, int op ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - if( dim < 0 ) - dim = src.rows > dst.rows ? 0 : src.cols > dst.cols ? 1 : dst.cols == 1; - - if( dim > 1 ) - CV_Error( CV_StsOutOfRange, "The reduced dimensionality index is out of range" ); - - if( (dim == 0 && (dst.cols != src.cols || dst.rows != 1)) || - (dim == 1 && (dst.rows != src.rows || dst.cols != 1)) ) - CV_Error( CV_StsBadSize, "The output array size is incorrect" ); - - if( src.channels() != dst.channels() ) - CV_Error( CV_StsUnmatchedFormats, "Input and output arrays must have the same number of channels" ); - - cv::reduce(src, dst, dim, op, dst.type()); -} - - -CV_IMPL CvArr* -cvRange( CvArr* arr, double start, double end ) -{ - int ok = 0; - - CvMat stub, *mat = (CvMat*)arr; - double delta; - int type, step; - double val = start; - int i, j; - int rows, cols; - - if( !CV_IS_MAT(mat) ) - mat = cvGetMat( mat, &stub); - - rows = mat->rows; - cols = mat->cols; - type = CV_MAT_TYPE(mat->type); - delta = (end-start)/(rows*cols); - - if( CV_IS_MAT_CONT(mat->type) ) - { - cols *= rows; - rows = 1; - step = 1; - } - else - step = mat->step / CV_ELEM_SIZE(type); - - if( type == CV_32SC1 ) - { - int* idata = mat->data.i; - int ival = cvRound(val), idelta = cvRound(delta); - - if( fabs(val - ival) < DBL_EPSILON && - fabs(delta - idelta) < DBL_EPSILON ) - { - for( i = 0; i < rows; i++, idata += step ) - for( j = 0; j < cols; j++, ival += idelta ) - idata[j] = ival; - } - else - { - for( i = 0; i < rows; i++, idata += step ) - for( j = 0; j < cols; j++, val += delta ) - idata[j] = cvRound(val); - } - } - else if( type == CV_32FC1 ) - { - float* fdata = mat->data.fl; - for( i = 0; i < rows; i++, fdata += step ) - for( j = 0; j < cols; j++, val += delta ) - fdata[j] = (float)val; - } - else - CV_Error( CV_StsUnsupportedFormat, "The function only supports 32sC1 and 32fC1 datatypes" ); - - ok = 1; - return ok ? arr : 0; -} - - -CV_IMPL void -cvSort( const CvArr* _src, CvArr* _dst, CvArr* _idx, int flags ) -{ - cv::Mat src = cv::cvarrToMat(_src); - - if( _idx ) - { - cv::Mat idx0 = cv::cvarrToMat(_idx), idx = idx0; - CV_Assert( src.size() == idx.size() && idx.type() == CV_32S && src.data != idx.data ); - cv::sortIdx( src, idx, flags ); - CV_Assert( idx0.data == idx.data ); - } - - if( _dst ) - { - cv::Mat dst0 = cv::cvarrToMat(_dst), dst = dst0; - CV_Assert( src.size() == dst.size() && src.type() == dst.type() ); - cv::sort( src, dst, flags ); - CV_Assert( dst0.data == dst.data ); - } -} - - -CV_IMPL int -cvKMeans2( const CvArr* _samples, int cluster_count, CvArr* _labels, - CvTermCriteria termcrit, int attempts, CvRNG*, - int flags, CvArr* _centers, double* _compactness ) -{ - cv::Mat data = cv::cvarrToMat(_samples), labels = cv::cvarrToMat(_labels), centers; - if( _centers ) - { - centers = cv::cvarrToMat(_centers); - - centers = centers.reshape(1); - data = data.reshape(1); - - CV_Assert( !centers.empty() ); - CV_Assert( centers.rows == cluster_count ); - CV_Assert( centers.cols == data.cols ); - CV_Assert( centers.depth() == data.depth() ); - } - CV_Assert( labels.isContinuous() && labels.type() == CV_32S && - (labels.cols == 1 || labels.rows == 1) && - labels.cols + labels.rows - 1 == data.rows ); - - double compactness = cv::kmeans(data, cluster_count, labels, termcrit, attempts, - flags, _centers ? cv::_OutputArray(centers) : cv::_OutputArray() ); - if( _compactness ) - *_compactness = compactness; - return 1; -} - -///////////////////////////// n-dimensional matrices //////////////////////////// - -namespace cv -{ - -Mat Mat::reshape(int _cn, int _newndims, const int* _newsz) const -{ - if(_newndims == dims) - { - if(_newsz == 0) - return reshape(_cn); - if(_newndims == 2) - return reshape(_cn, _newsz[0]); - } - - CV_Error(CV_StsNotImplemented, ""); - // TBD - return Mat(); -} - -Mat::operator CvMatND() const -{ - CvMatND mat; - cvInitMatNDHeader( &mat, dims, size, type(), data ); - int i, d = dims; - for( i = 0; i < d; i++ ) - mat.dim[i].step = (int)step[i]; - mat.type |= flags & CONTINUOUS_FLAG; - return mat; -} - -NAryMatIterator::NAryMatIterator() - : arrays(0), planes(0), ptrs(0), narrays(0), nplanes(0), size(0), iterdepth(0), idx(0) -{ -} - -NAryMatIterator::NAryMatIterator(const Mat** _arrays, Mat* _planes, int _narrays) -: arrays(0), planes(0), ptrs(0), narrays(0), nplanes(0), size(0), iterdepth(0), idx(0) -{ - init(_arrays, _planes, 0, _narrays); -} - -NAryMatIterator::NAryMatIterator(const Mat** _arrays, uchar** _ptrs, int _narrays) - : arrays(0), planes(0), ptrs(0), narrays(0), nplanes(0), size(0), iterdepth(0), idx(0) -{ - init(_arrays, 0, _ptrs, _narrays); -} - -void NAryMatIterator::init(const Mat** _arrays, Mat* _planes, uchar** _ptrs, int _narrays) -{ - CV_Assert( _arrays && (_ptrs || _planes) ); - int i, j, d1=0, i0 = -1, d = -1; - - arrays = _arrays; - ptrs = _ptrs; - planes = _planes; - narrays = _narrays; - nplanes = 0; - size = 0; - - if( narrays < 0 ) - { - for( i = 0; _arrays[i] != 0; i++ ) - ; - narrays = i; - CV_Assert(narrays <= 1000); - } - - iterdepth = 0; - - for( i = 0; i < narrays; i++ ) - { - CV_Assert(arrays[i] != 0); - const Mat& A = *arrays[i]; - if( ptrs ) - ptrs[i] = A.data; - - if( !A.data ) - continue; - - if( i0 < 0 ) - { - i0 = i; - d = A.dims; - - // find the first dimensionality which is different from 1; - // in any of the arrays the first "d1" step do not affect the continuity - for( d1 = 0; d1 < d; d1++ ) - if( A.size[d1] > 1 ) - break; - } - else - CV_Assert( A.size == arrays[i0]->size ); - - if( !A.isContinuous() ) - { - CV_Assert( A.step[d-1] == A.elemSize() ); - for( j = d-1; j > d1; j-- ) - if( A.step[j]*A.size[j] < A.step[j-1] ) - break; - iterdepth = std::max(iterdepth, j); - } - } - - if( i0 >= 0 ) - { - size = arrays[i0]->size[d-1]; - for( j = d-1; j > iterdepth; j-- ) - { - int64 total1 = (int64)size*arrays[i0]->size[j-1]; - if( total1 != (int)total1 ) - break; - size = (int)total1; - } - - iterdepth = j; - if( iterdepth == d1 ) - iterdepth = 0; - - nplanes = 1; - for( j = iterdepth-1; j >= 0; j-- ) - nplanes *= arrays[i0]->size[j]; - } - else - iterdepth = 0; - - idx = 0; - - if( !planes ) - return; - - for( i = 0; i < narrays; i++ ) - { - CV_Assert(arrays[i] != 0); - const Mat& A = *arrays[i]; - - if( !A.data ) - { - planes[i] = Mat(); - continue; - } - - planes[i] = Mat(1, (int)size, A.type(), A.data); - } -} - - -NAryMatIterator& NAryMatIterator::operator ++() -{ - if( idx >= nplanes-1 ) - return *this; - ++idx; - - if( iterdepth == 1 ) - { - if( ptrs ) - { - for( int i = 0; i < narrays; i++ ) - { - if( !ptrs[i] ) - continue; - ptrs[i] = arrays[i]->data + arrays[i]->step[0]*idx; - } - } - if( planes ) - { - for( int i = 0; i < narrays; i++ ) - { - if( !planes[i].data ) - continue; - planes[i].data = arrays[i]->data + arrays[i]->step[0]*idx; - } - } - } - else - { - for( int i = 0; i < narrays; i++ ) - { - const Mat& A = *arrays[i]; - if( !A.data ) - continue; - int _idx = (int)idx; - uchar* data = A.data; - for( int j = iterdepth-1; j >= 0 && _idx > 0; j-- ) - { - int szi = A.size[j], t = _idx/szi; - data += (_idx - t * szi)*A.step[j]; - _idx = t; - } - if( ptrs ) - ptrs[i] = data; - if( planes ) - planes[i].data = data; - } - } - - return *this; -} - -NAryMatIterator NAryMatIterator::operator ++(int) -{ - NAryMatIterator it = *this; - ++*this; - return it; -} - -/////////////////////////////////////////////////////////////////////////// -// MatConstIterator // -/////////////////////////////////////////////////////////////////////////// - -Point MatConstIterator::pos() const -{ - if( !m ) - return Point(); - CV_DbgAssert(m->dims <= 2); - - ptrdiff_t ofs = ptr - m->data; - int y = (int)(ofs/m->step[0]); - return Point((int)((ofs - y*m->step[0])/elemSize), y); -} - -void MatConstIterator::pos(int* _idx) const -{ - CV_Assert(m != 0 && _idx); - ptrdiff_t ofs = ptr - m->data; - for( int i = 0; i < m->dims; i++ ) - { - size_t s = m->step[i], v = ofs/s; - ofs -= v*s; - _idx[i] = (int)v; - } -} - -ptrdiff_t MatConstIterator::lpos() const -{ - if(!m) - return 0; - if( m->isContinuous() ) - return (ptr - sliceStart)/elemSize; - ptrdiff_t ofs = ptr - m->data; - int i, d = m->dims; - if( d == 2 ) - { - ptrdiff_t y = ofs/m->step[0]; - return y*m->cols + (ofs - y*m->step[0])/elemSize; - } - ptrdiff_t result = 0; - for( i = 0; i < d; i++ ) - { - size_t s = m->step[i], v = ofs/s; - ofs -= v*s; - result = result*m->size[i] + v; - } - return result; -} - -void MatConstIterator::seek(ptrdiff_t ofs, bool relative) -{ - if( m->isContinuous() ) - { - ptr = (relative ? ptr : sliceStart) + ofs*elemSize; - if( ptr < sliceStart ) - ptr = sliceStart; - else if( ptr > sliceEnd ) - ptr = sliceEnd; - return; - } - - int d = m->dims; - if( d == 2 ) - { - ptrdiff_t ofs0, y; - if( relative ) - { - ofs0 = ptr - m->data; - y = ofs0/m->step[0]; - ofs += y*m->cols + (ofs0 - y*m->step[0])/elemSize; - } - y = ofs/m->cols; - int y1 = std::min(std::max((int)y, 0), m->rows-1); - sliceStart = m->data + y1*m->step[0]; - sliceEnd = sliceStart + m->cols*elemSize; - ptr = y < 0 ? sliceStart : y >= m->rows ? sliceEnd : - sliceStart + (ofs - y*m->cols)*elemSize; - return; - } - - if( relative ) - ofs += lpos(); - - if( ofs < 0 ) - ofs = 0; - - int szi = m->size[d-1]; - ptrdiff_t t = ofs/szi; - int v = (int)(ofs - t*szi); - ofs = t; - ptr = m->data + v*elemSize; - sliceStart = m->data; - - for( int i = d-2; i >= 0; i-- ) - { - szi = m->size[i]; - t = ofs/szi; - v = (int)(ofs - t*szi); - ofs = t; - sliceStart += v*m->step[i]; - } - - sliceEnd = sliceStart + m->size[d-1]*elemSize; - if( ofs > 0 ) - ptr = sliceEnd; - else - ptr = sliceStart + (ptr - m->data); -} - -void MatConstIterator::seek(const int* _idx, bool relative) -{ - int i, d = m->dims; - ptrdiff_t ofs = 0; - if( !_idx ) - ; - else if( d == 2 ) - ofs = _idx[0]*m->size[1] + _idx[1]; - else - { - for( i = 0; i < d; i++ ) - ofs = ofs*m->size[i] + _idx[i]; - } - seek(ofs, relative); -} - -ptrdiff_t operator - (const MatConstIterator& b, const MatConstIterator& a) -{ - if( a.m != b.m ) - return INT_MAX; - if( a.sliceEnd == b.sliceEnd ) - return (b.ptr - a.ptr)/b.elemSize; - - return b.lpos() - a.lpos(); -} - -//////////////////////////////// SparseMat //////////////////////////////// - -template void -convertData_(const void* _from, void* _to, int cn) -{ - const T1* from = (const T1*)_from; - T2* to = (T2*)_to; - if( cn == 1 ) - *to = saturate_cast(*from); - else - for( int i = 0; i < cn; i++ ) - to[i] = saturate_cast(from[i]); -} - -template void -convertScaleData_(const void* _from, void* _to, int cn, double alpha, double beta) -{ - const T1* from = (const T1*)_from; - T2* to = (T2*)_to; - if( cn == 1 ) - *to = saturate_cast(*from*alpha + beta); - else - for( int i = 0; i < cn; i++ ) - to[i] = saturate_cast(from[i]*alpha + beta); -} - -ConvertData getConvertElem(int fromType, int toType) -{ - static ConvertData tab[][8] = - {{ convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { convertData_, convertData_, - convertData_, convertData_, - convertData_, convertData_, - convertData_, 0 }, - - { 0, 0, 0, 0, 0, 0, 0, 0 }}; - - ConvertData func = tab[CV_MAT_DEPTH(fromType)][CV_MAT_DEPTH(toType)]; - CV_Assert( func != 0 ); - return func; -} - -ConvertScaleData getConvertScaleElem(int fromType, int toType) -{ - static ConvertScaleData tab[][8] = - {{ convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, convertScaleData_, - convertScaleData_, 0 }, - - { 0, 0, 0, 0, 0, 0, 0, 0 }}; - - ConvertScaleData func = tab[CV_MAT_DEPTH(fromType)][CV_MAT_DEPTH(toType)]; - CV_Assert( func != 0 ); - return func; -} - -enum { HASH_SIZE0 = 8 }; - -static inline void copyElem(const uchar* from, uchar* to, size_t elemSize) -{ - size_t i; - for( i = 0; i + sizeof(int) <= elemSize; i += sizeof(int) ) - *(int*)(to + i) = *(const int*)(from + i); - for( ; i < elemSize; i++ ) - to[i] = from[i]; -} - -static inline bool isZeroElem(const uchar* data, size_t elemSize) -{ - size_t i; - for( i = 0; i + sizeof(int) <= elemSize; i += sizeof(int) ) - if( *(int*)(data + i) != 0 ) - return false; - for( ; i < elemSize; i++ ) - if( data[i] != 0 ) - return false; - return true; -} - -SparseMat::Hdr::Hdr( int _dims, const int* _sizes, int _type ) -{ - refcount = 1; - - dims = _dims; - valueOffset = (int)alignSize(sizeof(SparseMat::Node) + - sizeof(int)*std::max(dims - CV_MAX_DIM, 0), CV_ELEM_SIZE1(_type)); - nodeSize = alignSize(valueOffset + - CV_ELEM_SIZE(_type), (int)sizeof(size_t)); - - int i; - for( i = 0; i < dims; i++ ) - size[i] = _sizes[i]; - for( ; i < CV_MAX_DIM; i++ ) - size[i] = 0; - clear(); -} - -void SparseMat::Hdr::clear() -{ - hashtab.clear(); - hashtab.resize(HASH_SIZE0); - pool.clear(); - pool.resize(nodeSize); - nodeCount = freeList = 0; -} - - -SparseMat::SparseMat(const Mat& m) -: flags(MAGIC_VAL), hdr(0) -{ - create( m.dims, m.size, m.type() ); - - int i, idx[CV_MAX_DIM] = {0}, d = m.dims, lastSize = m.size[d - 1]; - size_t esz = m.elemSize(); - uchar* dptr = m.data; - - for(;;) - { - for( i = 0; i < lastSize; i++, dptr += esz ) - { - if( isZeroElem(dptr, esz) ) - continue; - idx[d-1] = i; - uchar* to = newNode(idx, hash(idx)); - copyElem( dptr, to, esz ); - } - - for( i = d - 2; i >= 0; i-- ) - { - dptr += m.step[i] - m.size[i+1]*m.step[i+1]; - if( ++idx[i] < m.size[i] ) - break; - idx[i] = 0; - } - if( i < 0 ) - break; - } -} - -SparseMat::SparseMat(const CvSparseMat* m) -: flags(MAGIC_VAL), hdr(0) -{ - CV_Assert(m); - create( m->dims, &m->size[0], m->type ); - - CvSparseMatIterator it; - CvSparseNode* n = cvInitSparseMatIterator(m, &it); - size_t esz = elemSize(); - - for( ; n != 0; n = cvGetNextSparseNode(&it) ) - { - const int* idx = CV_NODE_IDX(m, n); - uchar* to = newNode(idx, hash(idx)); - copyElem((const uchar*)CV_NODE_VAL(m, n), to, esz); - } -} - -void SparseMat::create(int d, const int* _sizes, int _type) -{ - int i; - CV_Assert( _sizes && 0 < d && d <= CV_MAX_DIM ); - for( i = 0; i < d; i++ ) - CV_Assert( _sizes[i] > 0 ); - _type = CV_MAT_TYPE(_type); - if( hdr && _type == type() && hdr->dims == d && hdr->refcount == 1 ) - { - for( i = 0; i < d; i++ ) - if( _sizes[i] != hdr->size[i] ) - break; - if( i == d ) - { - clear(); - return; - } - } - release(); - flags = MAGIC_VAL | _type; - hdr = new Hdr(d, _sizes, _type); -} - -void SparseMat::copyTo( SparseMat& m ) const -{ - if( hdr == m.hdr ) - return; - if( !hdr ) - { - m.release(); - return; - } - m.create( hdr->dims, hdr->size, type() ); - SparseMatConstIterator from = begin(); - size_t i, N = nzcount(), esz = elemSize(); - - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = m.newNode(n->idx, n->hashval); - copyElem( from.ptr, to, esz ); - } -} - -void SparseMat::copyTo( Mat& m ) const -{ - CV_Assert( hdr ); - m.create( dims(), hdr->size, type() ); - m = Scalar(0); - - SparseMatConstIterator from = begin(); - size_t i, N = nzcount(), esz = elemSize(); - - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - copyElem( from.ptr, m.ptr(n->idx), esz); - } -} - - -void SparseMat::convertTo( SparseMat& m, int rtype, double alpha ) const -{ - int cn = channels(); - if( rtype < 0 ) - rtype = type(); - rtype = CV_MAKETYPE(rtype, cn); - if( hdr == m.hdr && rtype != type() ) - { - SparseMat temp; - convertTo(temp, rtype, alpha); - m = temp; - return; - } - - CV_Assert(hdr != 0); - if( hdr != m.hdr ) - m.create( hdr->dims, hdr->size, rtype ); - - SparseMatConstIterator from = begin(); - size_t i, N = nzcount(); - - if( alpha == 1 ) - { - ConvertData cvtfunc = getConvertElem(type(), rtype); - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = hdr == m.hdr ? from.ptr : m.newNode(n->idx, n->hashval); - cvtfunc( from.ptr, to, cn ); - } - } - else - { - ConvertScaleData cvtfunc = getConvertScaleElem(type(), rtype); - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = hdr == m.hdr ? from.ptr : m.newNode(n->idx, n->hashval); - cvtfunc( from.ptr, to, cn, alpha, 0 ); - } - } -} - - -void SparseMat::convertTo( Mat& m, int rtype, double alpha, double beta ) const -{ - int cn = channels(); - if( rtype < 0 ) - rtype = type(); - rtype = CV_MAKETYPE(rtype, cn); - - CV_Assert( hdr ); - m.create( dims(), hdr->size, rtype ); - m = Scalar(beta); - - SparseMatConstIterator from = begin(); - size_t i, N = nzcount(); - - if( alpha == 1 && beta == 0 ) - { - ConvertData cvtfunc = getConvertElem(type(), rtype); - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = m.ptr(n->idx); - cvtfunc( from.ptr, to, cn ); - } - } - else - { - ConvertScaleData cvtfunc = getConvertScaleElem(type(), rtype); - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = m.ptr(n->idx); - cvtfunc( from.ptr, to, cn, alpha, beta ); - } - } -} - -void SparseMat::clear() -{ - if( hdr ) - hdr->clear(); -} - -SparseMat::operator CvSparseMat*() const -{ - if( !hdr ) - return 0; - CvSparseMat* m = cvCreateSparseMat(hdr->dims, hdr->size, type()); - - SparseMatConstIterator from = begin(); - size_t i, N = nzcount(), esz = elemSize(); - - for( i = 0; i < N; i++, ++from ) - { - const Node* n = from.node(); - uchar* to = cvPtrND(m, n->idx, 0, -2, 0); - copyElem(from.ptr, to, esz); - } - return m; -} - -uchar* SparseMat::ptr(int i0, bool createMissing, size_t* hashval) -{ - CV_Assert( hdr && hdr->dims == 1 ); - size_t h = hashval ? *hashval : hash(i0); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx]; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h && elem->idx[0] == i0 ) - return &value(elem); - nidx = elem->next; - } - - if( createMissing ) - { - int idx[] = { i0 }; - return newNode( idx, h ); - } - return 0; -} - -uchar* SparseMat::ptr(int i0, int i1, bool createMissing, size_t* hashval) -{ - CV_Assert( hdr && hdr->dims == 2 ); - size_t h = hashval ? *hashval : hash(i0, i1); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx]; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h && elem->idx[0] == i0 && elem->idx[1] == i1 ) - return &value(elem); - nidx = elem->next; - } - - if( createMissing ) - { - int idx[] = { i0, i1 }; - return newNode( idx, h ); - } - return 0; -} - -uchar* SparseMat::ptr(int i0, int i1, int i2, bool createMissing, size_t* hashval) -{ - CV_Assert( hdr && hdr->dims == 3 ); - size_t h = hashval ? *hashval : hash(i0, i1, i2); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx]; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h && elem->idx[0] == i0 && - elem->idx[1] == i1 && elem->idx[2] == i2 ) - return &value(elem); - nidx = elem->next; - } - - if( createMissing ) - { - int idx[] = { i0, i1, i2 }; - return newNode( idx, h ); - } - return 0; -} - -uchar* SparseMat::ptr(const int* idx, bool createMissing, size_t* hashval) -{ - CV_Assert( hdr ); - int i, d = hdr->dims; - size_t h = hashval ? *hashval : hash(idx); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx]; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h ) - { - for( i = 0; i < d; i++ ) - if( elem->idx[i] != idx[i] ) - break; - if( i == d ) - return &value(elem); - } - nidx = elem->next; - } - - return createMissing ? newNode(idx, h) : 0; -} - -void SparseMat::erase(int i0, int i1, size_t* hashval) -{ - CV_Assert( hdr && hdr->dims == 2 ); - size_t h = hashval ? *hashval : hash(i0, i1); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx], previdx=0; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h && elem->idx[0] == i0 && elem->idx[1] == i1 ) - break; - previdx = nidx; - nidx = elem->next; - } - - if( nidx ) - removeNode(hidx, nidx, previdx); -} - -void SparseMat::erase(int i0, int i1, int i2, size_t* hashval) -{ - CV_Assert( hdr && hdr->dims == 3 ); - size_t h = hashval ? *hashval : hash(i0, i1, i2); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx], previdx=0; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h && elem->idx[0] == i0 && - elem->idx[1] == i1 && elem->idx[2] == i2 ) - break; - previdx = nidx; - nidx = elem->next; - } - - if( nidx ) - removeNode(hidx, nidx, previdx); -} - -void SparseMat::erase(const int* idx, size_t* hashval) -{ - CV_Assert( hdr ); - int i, d = hdr->dims; - size_t h = hashval ? *hashval : hash(idx); - size_t hidx = h & (hdr->hashtab.size() - 1), nidx = hdr->hashtab[hidx], previdx=0; - uchar* pool = &hdr->pool[0]; - while( nidx != 0 ) - { - Node* elem = (Node*)(pool + nidx); - if( elem->hashval == h ) - { - for( i = 0; i < d; i++ ) - if( elem->idx[i] != idx[i] ) - break; - if( i == d ) - break; - } - previdx = nidx; - nidx = elem->next; - } - - if( nidx ) - removeNode(hidx, nidx, previdx); -} - -void SparseMat::resizeHashTab(size_t newsize) -{ - newsize = std::max(newsize, (size_t)8); - if((newsize & (newsize-1)) != 0) - newsize = (size_t)1 << cvCeil(std::log((double)newsize)/CV_LOG2); - - size_t i, hsize = hdr->hashtab.size(); - vector _newh(newsize); - size_t* newh = &_newh[0]; - for( i = 0; i < newsize; i++ ) - newh[i] = 0; - uchar* pool = &hdr->pool[0]; - for( i = 0; i < hsize; i++ ) - { - size_t nidx = hdr->hashtab[i]; - while( nidx ) - { - Node* elem = (Node*)(pool + nidx); - size_t next = elem->next; - size_t newhidx = elem->hashval & (newsize - 1); - elem->next = newh[newhidx]; - newh[newhidx] = nidx; - nidx = next; - } - } - hdr->hashtab = _newh; -} - -uchar* SparseMat::newNode(const int* idx, size_t hashval) -{ - const int HASH_MAX_FILL_FACTOR=3; - assert(hdr); - size_t hsize = hdr->hashtab.size(); - if( ++hdr->nodeCount > hsize*HASH_MAX_FILL_FACTOR ) - { - resizeHashTab(std::max(hsize*2, (size_t)8)); - hsize = hdr->hashtab.size(); - } - - if( !hdr->freeList ) - { - size_t i, nsz = hdr->nodeSize, psize = hdr->pool.size(), - newpsize = std::max(psize*2, 8*nsz); - hdr->pool.resize(newpsize); - uchar* pool = &hdr->pool[0]; - hdr->freeList = std::max(psize, nsz); - for( i = hdr->freeList; i < newpsize - nsz; i += nsz ) - ((Node*)(pool + i))->next = i + nsz; - ((Node*)(pool + i))->next = 0; - } - size_t nidx = hdr->freeList; - Node* elem = (Node*)&hdr->pool[nidx]; - hdr->freeList = elem->next; - elem->hashval = hashval; - size_t hidx = hashval & (hsize - 1); - elem->next = hdr->hashtab[hidx]; - hdr->hashtab[hidx] = nidx; - - int i, d = hdr->dims; - for( i = 0; i < d; i++ ) - elem->idx[i] = idx[i]; - size_t esz = elemSize(); - uchar* p = &value(elem); - if( esz == sizeof(float) ) - *((float*)p) = 0.f; - else if( esz == sizeof(double) ) - *((double*)p) = 0.; - else - memset(p, 0, esz); - - return p; -} - - -void SparseMat::removeNode(size_t hidx, size_t nidx, size_t previdx) -{ - Node* n = node(nidx); - if( previdx ) - { - Node* prev = node(previdx); - prev->next = n->next; - } - else - hdr->hashtab[hidx] = n->next; - n->next = hdr->freeList; - hdr->freeList = nidx; - --hdr->nodeCount; -} - - -SparseMatConstIterator::SparseMatConstIterator(const SparseMat* _m) -: m((SparseMat*)_m), hashidx(0), ptr(0) -{ - if(!_m || !_m->hdr) - return; - SparseMat::Hdr& hdr = *m->hdr; - const vector& htab = hdr.hashtab; - size_t i, hsize = htab.size(); - for( i = 0; i < hsize; i++ ) - { - size_t nidx = htab[i]; - if( nidx ) - { - hashidx = i; - ptr = &hdr.pool[nidx] + hdr.valueOffset; - return; - } - } -} - -SparseMatConstIterator& SparseMatConstIterator::operator ++() -{ - if( !ptr || !m || !m->hdr ) - return *this; - SparseMat::Hdr& hdr = *m->hdr; - size_t next = ((const SparseMat::Node*)(ptr - hdr.valueOffset))->next; - if( next ) - { - ptr = &hdr.pool[next] + hdr.valueOffset; - return *this; - } - size_t i = hashidx + 1, sz = hdr.hashtab.size(); - for( ; i < sz; i++ ) - { - size_t nidx = hdr.hashtab[i]; - if( nidx ) - { - hashidx = i; - ptr = &hdr.pool[nidx] + hdr.valueOffset; - return *this; - } - } - hashidx = sz; - ptr = 0; - return *this; -} - - -double norm( const SparseMat& src, int normType ) -{ - SparseMatConstIterator it = src.begin(); - - size_t i, N = src.nzcount(); - normType &= NORM_TYPE_MASK; - int type = src.type(); - double result = 0; - - CV_Assert( normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 ); - - if( type == CV_32F ) - { - if( normType == NORM_INF ) - for( i = 0; i < N; i++, ++it ) - result = std::max(result, std::abs((double)*(const float*)it.ptr)); - else if( normType == NORM_L1 ) - for( i = 0; i < N; i++, ++it ) - result += std::abs(*(const float*)it.ptr); - else - for( i = 0; i < N; i++, ++it ) - { - double v = *(const float*)it.ptr; - result += v*v; - } - } - else if( type == CV_64F ) - { - if( normType == NORM_INF ) - for( i = 0; i < N; i++, ++it ) - result = std::max(result, std::abs(*(const double*)it.ptr)); - else if( normType == NORM_L1 ) - for( i = 0; i < N; i++, ++it ) - result += std::abs(*(const double*)it.ptr); - else - for( i = 0; i < N; i++, ++it ) - { - double v = *(const double*)it.ptr; - result += v*v; - } - } - else - CV_Error( CV_StsUnsupportedFormat, "Only 32f and 64f are supported" ); - - if( normType == NORM_L2 ) - result = std::sqrt(result); - return result; -} - -void minMaxLoc( const SparseMat& src, double* _minval, double* _maxval, int* _minidx, int* _maxidx ) -{ - SparseMatConstIterator it = src.begin(); - size_t i, N = src.nzcount(), d = src.hdr ? src.hdr->dims : 0; - int type = src.type(); - const int *minidx = 0, *maxidx = 0; - - if( type == CV_32F ) - { - float minval = FLT_MAX, maxval = -FLT_MAX; - for( i = 0; i < N; i++, ++it ) - { - float v = *(const float*)it.ptr; - if( v < minval ) - { - minval = v; - minidx = it.node()->idx; - } - if( v > maxval ) - { - maxval = v; - maxidx = it.node()->idx; - } - } - if( _minval ) - *_minval = minval; - if( _maxval ) - *_maxval = maxval; - } - else if( type == CV_64F ) - { - double minval = DBL_MAX, maxval = -DBL_MAX; - for( i = 0; i < N; i++, ++it ) - { - double v = *(const double*)it.ptr; - if( v < minval ) - { - minval = v; - minidx = it.node()->idx; - } - if( v > maxval ) - { - maxval = v; - maxidx = it.node()->idx; - } - } - if( _minval ) - *_minval = minval; - if( _maxval ) - *_maxval = maxval; - } - else - CV_Error( CV_StsUnsupportedFormat, "Only 32f and 64f are supported" ); - - if( _minidx ) - for( i = 0; i < d; i++ ) - _minidx[i] = minidx[i]; - if( _maxidx ) - for( i = 0; i < d; i++ ) - _maxidx[i] = maxidx[i]; -} - - -void normalize( const SparseMat& src, SparseMat& dst, double a, int norm_type ) -{ - double scale = 1; - if( norm_type == CV_L2 || norm_type == CV_L1 || norm_type == CV_C ) - { - scale = norm( src, norm_type ); - scale = scale > DBL_EPSILON ? a/scale : 0.; - } - else - CV_Error( CV_StsBadArg, "Unknown/unsupported norm type" ); - - src.convertTo( dst, -1, scale ); -} - -////////////////////// RotatedRect ////////////////////// - -void RotatedRect::points(Point2f pt[]) const -{ - double _angle = angle*CV_PI/180.; - float b = (float)cos(_angle)*0.5f; - float a = (float)sin(_angle)*0.5f; - - pt[0].x = center.x - a*size.height - b*size.width; - pt[0].y = center.y + b*size.height - a*size.width; - pt[1].x = center.x + a*size.height - b*size.width; - pt[1].y = center.y - b*size.height - a*size.width; - pt[2].x = 2*center.x - pt[0].x; - pt[2].y = 2*center.y - pt[0].y; - pt[3].x = 2*center.x - pt[1].x; - pt[3].y = 2*center.y - pt[1].y; -} - -Rect RotatedRect::boundingRect() const -{ - Point2f pt[4]; - points(pt); - Rect r(cvFloor(min(min(min(pt[0].x, pt[1].x), pt[2].x), pt[3].x)), - cvFloor(min(min(min(pt[0].y, pt[1].y), pt[2].y), pt[3].y)), - cvCeil(max(max(max(pt[0].x, pt[1].x), pt[2].x), pt[3].x)), - cvCeil(max(max(max(pt[0].y, pt[1].y), pt[2].y), pt[3].y))); - r.width -= r.x - 1; - r.height -= r.y - 1; - return r; -} - -} - -/* End of file. */ diff --git a/modules/core/src/opengl_interop.cpp b/modules/core/src/opengl_interop.cpp deleted file mode 100644 index bf368ea..0000000 --- a/modules/core/src/opengl_interop.cpp +++ /dev/null @@ -1,1579 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "opencv2/core/opengl_interop.hpp" -#include "opencv2/core/gpumat.hpp" - -#ifdef HAVE_OPENGL - #include "gl_core_3_1.hpp" - - #ifdef HAVE_CUDA - #include - #include - #endif -#endif - -using namespace std; -using namespace cv; -using namespace cv::gpu; - -namespace -{ - #ifndef HAVE_OPENGL - void throw_nogl() { CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); } - #else - void throw_nogl() { CV_Error(CV_OpenGlApiCallError, "OpenGL context doesn't exist"); } - - #ifndef HAVE_CUDA - void throw_nocuda() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } - #else - void throw_nocuda() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } - - #define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, CV_Func) - - void ___cudaSafeCall(cudaError_t err, const char* file, const int line, const char* func = "") - { - if (cudaSuccess != err) - cv::gpu::error(cudaGetErrorString(err), file, line, func); - } - #endif - #endif -} - -bool cv::ogl::checkError(const char* file, const int line, const char* func) -{ -#ifndef HAVE_OPENGL - (void) file; - (void) line; - (void) func; - return true; -#else - GLenum err = gl::GetError(); - - if (err != gl::NO_ERROR_) - { - const char* msg; - - switch (err) - { - case gl::INVALID_ENUM: - msg = "An unacceptable value is specified for an enumerated argument"; - break; - - case gl::INVALID_VALUE: - msg = "A numeric argument is out of range"; - break; - - case gl::INVALID_OPERATION: - msg = "The specified operation is not allowed in the current state"; - break; - - case gl::OUT_OF_MEMORY: - msg = "There is not enough memory left to execute the command"; - break; - - default: - msg = "Unknown error"; - }; - - cvError(CV_OpenGlApiCallError, func, msg, file, line); - - return false; - } - - return true; -#endif -} - -#ifdef HAVE_OPENGL -namespace -{ - const GLenum gl_types[] = { gl::UNSIGNED_BYTE, gl::BYTE, gl::UNSIGNED_SHORT, gl::SHORT, gl::INT, gl::FLOAT, gl::DOUBLE }; -} -#endif - -//////////////////////////////////////////////////////////////////////// -// setGlDevice - -void cv::gpu::setGlDevice(int device) -{ -#ifndef HAVE_OPENGL - (void) device; - throw_nogl(); -#else - #if !defined(HAVE_CUDA) || defined(CUDA_DISABLER) - (void) device; - throw_nocuda(); - #else - cudaSafeCall( cudaGLSetGLDevice(device) ); - #endif -#endif -} - -//////////////////////////////////////////////////////////////////////// -// CudaResource - -#if defined(HAVE_OPENGL) && defined(HAVE_CUDA) && !defined(CUDA_DISABLER) - -namespace -{ - class CudaResource - { - public: - CudaResource(); - ~CudaResource(); - - void registerBuffer(GLuint buffer); - void release(); - - void copyFrom(const void* src, size_t spitch, size_t width, size_t height, cudaStream_t stream = 0); - void copyTo(void* dst, size_t dpitch, size_t width, size_t height, cudaStream_t stream = 0); - - void* map(cudaStream_t stream = 0); - void unmap(cudaStream_t stream = 0); - - private: - cudaGraphicsResource_t resource_; - GLuint buffer_; - - class GraphicsMapHolder; - }; - - CudaResource::CudaResource() : resource_(0), buffer_(0) - { - } - - CudaResource::~CudaResource() - { - release(); - } - - void CudaResource::registerBuffer(GLuint buffer) - { - CV_DbgAssert( buffer != 0 ); - - if (buffer_ == buffer) - return; - - cudaGraphicsResource_t resource; - cudaSafeCall( cudaGraphicsGLRegisterBuffer(&resource, buffer, cudaGraphicsMapFlagsNone) ); - - release(); - - resource_ = resource; - buffer_ = buffer; - } - - void CudaResource::release() - { - if (resource_) - cudaGraphicsUnregisterResource(resource_); - - resource_ = 0; - buffer_ = 0; - } - - class CudaResource::GraphicsMapHolder - { - public: - GraphicsMapHolder(cudaGraphicsResource_t* resource, cudaStream_t stream); - ~GraphicsMapHolder(); - - void reset(); - - private: - cudaGraphicsResource_t* resource_; - cudaStream_t stream_; - }; - - CudaResource::GraphicsMapHolder::GraphicsMapHolder(cudaGraphicsResource_t* resource, cudaStream_t stream) : resource_(resource), stream_(stream) - { - if (resource_) - cudaSafeCall( cudaGraphicsMapResources(1, resource_, stream_) ); - } - - CudaResource::GraphicsMapHolder::~GraphicsMapHolder() - { - if (resource_) - cudaGraphicsUnmapResources(1, resource_, stream_); - } - - void CudaResource::GraphicsMapHolder::reset() - { - resource_ = 0; - } - - void CudaResource::copyFrom(const void* src, size_t spitch, size_t width, size_t height, cudaStream_t stream) - { - CV_DbgAssert( resource_ != 0 ); - - GraphicsMapHolder h(&resource_, stream); - (void) h; - - void* dst; - size_t size; - cudaSafeCall( cudaGraphicsResourceGetMappedPointer(&dst, &size, resource_) ); - - CV_DbgAssert( width * height == size ); - - if (stream == 0) - cudaSafeCall( cudaMemcpy2D(dst, width, src, spitch, width, height, cudaMemcpyDeviceToDevice) ); - else - cudaSafeCall( cudaMemcpy2DAsync(dst, width, src, spitch, width, height, cudaMemcpyDeviceToDevice, stream) ); - } - - void CudaResource::copyTo(void* dst, size_t dpitch, size_t width, size_t height, cudaStream_t stream) - { - CV_DbgAssert( resource_ != 0 ); - - GraphicsMapHolder h(&resource_, stream); - (void) h; - - void* src; - size_t size; - cudaSafeCall( cudaGraphicsResourceGetMappedPointer(&src, &size, resource_) ); - - CV_DbgAssert( width * height == size ); - - if (stream == 0) - cudaSafeCall( cudaMemcpy2D(dst, dpitch, src, width, width, height, cudaMemcpyDeviceToDevice) ); - else - cudaSafeCall( cudaMemcpy2DAsync(dst, dpitch, src, width, width, height, cudaMemcpyDeviceToDevice, stream) ); - } - - void* CudaResource::map(cudaStream_t stream) - { - CV_DbgAssert( resource_ != 0 ); - - GraphicsMapHolder h(&resource_, stream); - - void* ptr; - size_t size; - cudaSafeCall( cudaGraphicsResourceGetMappedPointer(&ptr, &size, resource_) ); - - h.reset(); - - return ptr; - } - - void CudaResource::unmap(cudaStream_t stream) - { - CV_Assert( resource_ != 0 ); - - cudaGraphicsUnmapResources(1, &resource_, stream); - } -} - -#endif - -//////////////////////////////////////////////////////////////////////// -// ogl::Buffer - -#ifndef HAVE_OPENGL - -class cv::ogl::Buffer::Impl -{ -}; - -#else - -class cv::ogl::Buffer::Impl -{ -public: - static const Ptr& empty(); - - Impl(GLuint bufId, bool autoRelease); - Impl(GLsizeiptr size, const GLvoid* data, GLenum target, bool autoRelease); - ~Impl(); - - void bind(GLenum target) const; - - void copyFrom(GLuint srcBuf, GLsizeiptr size); - - void copyFrom(GLsizeiptr size, const GLvoid* data); - void copyTo(GLsizeiptr size, GLvoid* data) const; - - void* mapHost(GLenum access); - void unmapHost(); - -#ifdef HAVE_CUDA - void copyFrom(const void* src, size_t spitch, size_t width, size_t height, cudaStream_t stream = 0); - void copyTo(void* dst, size_t dpitch, size_t width, size_t height, cudaStream_t stream = 0) const; - - void* mapDevice(cudaStream_t stream = 0); - void unmapDevice(cudaStream_t stream = 0); -#endif - - void setAutoRelease(bool flag) { autoRelease_ = flag; } - - GLuint bufId() const { return bufId_; } - -private: - Impl(); - - GLuint bufId_; - bool autoRelease_; - -#ifdef HAVE_CUDA - mutable CudaResource cudaResource_; -#endif -}; - -const Ptr& cv::ogl::Buffer::Impl::empty() -{ - static Ptr p(new Impl); - return p; -} - -cv::ogl::Buffer::Impl::Impl() : bufId_(0), autoRelease_(true) -{ -} - -cv::ogl::Buffer::Impl::Impl(GLuint abufId, bool autoRelease) : bufId_(abufId), autoRelease_(autoRelease) -{ -} - -cv::ogl::Buffer::Impl::Impl(GLsizeiptr size, const GLvoid* data, GLenum target, bool autoRelease) : bufId_(0), autoRelease_(autoRelease) -{ - gl::GenBuffers(1, &bufId_); - CV_CheckGlError(); - - CV_Assert( bufId_ != 0 ); - - gl::BindBuffer(target, bufId_); - CV_CheckGlError(); - - gl::BufferData(target, size, data, gl::DYNAMIC_DRAW); - CV_CheckGlError(); - - gl::BindBuffer(target, 0); - CV_CheckGlError(); -} - -cv::ogl::Buffer::Impl::~Impl() -{ - if (autoRelease_ && bufId_) - gl::DeleteBuffers(1, &bufId_); -} - -void cv::ogl::Buffer::Impl::bind(GLenum target) const -{ - gl::BindBuffer(target, bufId_); - CV_CheckGlError(); -} - -void cv::ogl::Buffer::Impl::copyFrom(GLuint srcBuf, GLsizeiptr size) -{ - gl::BindBuffer(gl::COPY_WRITE_BUFFER, bufId_); - CV_CheckGlError(); - - gl::BindBuffer(gl::COPY_READ_BUFFER, srcBuf); - CV_CheckGlError(); - - gl::CopyBufferSubData(gl::COPY_READ_BUFFER, gl::COPY_WRITE_BUFFER, 0, 0, size); - CV_CheckGlError(); -} - -void cv::ogl::Buffer::Impl::copyFrom(GLsizeiptr size, const GLvoid* data) -{ - gl::BindBuffer(gl::COPY_WRITE_BUFFER, bufId_); - CV_CheckGlError(); - - gl::BufferSubData(gl::COPY_WRITE_BUFFER, 0, size, data); - CV_CheckGlError(); -} - -void cv::ogl::Buffer::Impl::copyTo(GLsizeiptr size, GLvoid* data) const -{ - gl::BindBuffer(gl::COPY_READ_BUFFER, bufId_); - CV_CheckGlError(); - - gl::GetBufferSubData(gl::COPY_READ_BUFFER, 0, size, data); - CV_CheckGlError(); -} - -void* cv::ogl::Buffer::Impl::mapHost(GLenum access) -{ - gl::BindBuffer(gl::COPY_READ_BUFFER, bufId_); - CV_CheckGlError(); - - GLvoid* data = gl::MapBuffer(gl::COPY_READ_BUFFER, access); - CV_CheckGlError(); - - return data; -} - -void cv::ogl::Buffer::Impl::unmapHost() -{ - gl::UnmapBuffer(gl::COPY_READ_BUFFER); -} - -#ifdef HAVE_CUDA - void cv::ogl::Buffer::Impl::copyFrom(const void* src, size_t spitch, size_t width, size_t height, cudaStream_t stream) - { - cudaResource_.registerBuffer(bufId_); - cudaResource_.copyFrom(src, spitch, width, height, stream); - } - - void cv::ogl::Buffer::Impl::copyTo(void* dst, size_t dpitch, size_t width, size_t height, cudaStream_t stream) const - { - cudaResource_.registerBuffer(bufId_); - cudaResource_.copyTo(dst, dpitch, width, height, stream); - } - - void* cv::ogl::Buffer::Impl::mapDevice(cudaStream_t stream) - { - cudaResource_.registerBuffer(bufId_); - return cudaResource_.map(stream); - } - - void cv::ogl::Buffer::Impl::unmapDevice(cudaStream_t stream) - { - cudaResource_.unmap(stream); - } -#endif - -#endif // HAVE_OPENGL - -cv::ogl::Buffer::Buffer() : rows_(0), cols_(0), type_(0) -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - impl_ = Impl::empty(); -#endif -} - -cv::ogl::Buffer::Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease) : rows_(0), cols_(0), type_(0) -{ -#ifndef HAVE_OPENGL - (void) arows; - (void) acols; - (void) atype; - (void) abufId; - (void) autoRelease; - throw_nogl(); -#else - impl_ = new Impl(abufId, autoRelease); - rows_ = arows; - cols_ = acols; - type_ = atype; -#endif -} - -cv::ogl::Buffer::Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease) : rows_(0), cols_(0), type_(0) -{ -#ifndef HAVE_OPENGL - (void) asize; - (void) atype; - (void) abufId; - (void) autoRelease; - throw_nogl(); -#else - impl_ = new Impl(abufId, autoRelease); - rows_ = asize.height; - cols_ = asize.width; - type_ = atype; -#endif -} - -cv::ogl::Buffer::Buffer(int arows, int acols, int atype, Target target, bool autoRelease) : rows_(0), cols_(0), type_(0) -{ - create(arows, acols, atype, target, autoRelease); -} - -cv::ogl::Buffer::Buffer(Size asize, int atype, Target target, bool autoRelease) : rows_(0), cols_(0), type_(0) -{ - create(asize, atype, target, autoRelease); -} - -cv::ogl::Buffer::Buffer(InputArray arr, Target target, bool autoRelease) : rows_(0), cols_(0), type_(0) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) target; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - switch (kind) - { - case _InputArray::OPENGL_BUFFER: - { - copyFrom(arr, target, autoRelease); - break; - } - - case _InputArray::OPENGL_TEXTURE: - { - copyFrom(arr, target, autoRelease); - break; - } - - case _InputArray::GPU_MAT: - { - copyFrom(arr, target, autoRelease); - break; - } - - default: - { - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - const GLsizeiptr asize = mat.rows * mat.cols * mat.elemSize(); - impl_ = new Impl(asize, mat.data, target, autoRelease); - rows_ = mat.rows; - cols_ = mat.cols; - type_ = mat.type(); - break; - } - } -#endif -} - -void cv::ogl::Buffer::create(int arows, int acols, int atype, Target target, bool autoRelease) -{ -#ifndef HAVE_OPENGL - (void) arows; - (void) acols; - (void) atype; - (void) target; - (void) autoRelease; - throw_nogl(); -#else - if (rows_ != arows || cols_ != acols || type_ != atype) - { - const GLsizeiptr asize = arows * acols * CV_ELEM_SIZE(atype); - impl_ = new Impl(asize, 0, target, autoRelease); - rows_ = arows; - cols_ = acols; - type_ = atype; - } -#endif -} - -void cv::ogl::Buffer::release() -{ -#ifdef HAVE_OPENGL - if (*impl_.refcount == 1) - impl_->setAutoRelease(true); - impl_ = Impl::empty(); - rows_ = 0; - cols_ = 0; - type_ = 0; -#endif -} - -void cv::ogl::Buffer::setAutoRelease(bool flag) -{ -#ifndef HAVE_OPENGL - (void) flag; - throw_nogl(); -#else - impl_->setAutoRelease(flag); -#endif -} - -void cv::ogl::Buffer::copyFrom(InputArray arr, Target target, bool autoRelease) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) target; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - if (kind == _InputArray::OPENGL_TEXTURE) - { - ogl::Texture2D tex = arr.getOGlTexture2D(); - tex.copyTo(*this); - setAutoRelease(autoRelease); - return; - } - - const Size asize = arr.size(); - const int atype = arr.type(); - create(asize, atype, target, autoRelease); - - switch (kind) - { - case _InputArray::OPENGL_BUFFER: - { - ogl::Buffer buf = arr.getOGlBuffer(); - impl_->copyFrom(buf.bufId(), asize.area() * CV_ELEM_SIZE(atype)); - break; - } - - case _InputArray::GPU_MAT: - { - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - GpuMat dmat = arr.getGpuMat(); - impl_->copyFrom(dmat.data, dmat.step, dmat.cols * dmat.elemSize(), dmat.rows); - #endif - - break; - } - - default: - { - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - impl_->copyFrom(asize.area() * CV_ELEM_SIZE(atype), mat.data); - } - } -#endif -} - -void cv::ogl::Buffer::copyTo(OutputArray arr, Target target, bool autoRelease) const -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) target; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - switch (kind) - { - case _InputArray::OPENGL_BUFFER: - { - arr.getOGlBufferRef().copyFrom(*this, target, autoRelease); - break; - } - - case _InputArray::OPENGL_TEXTURE: - { - arr.getOGlTexture2DRef().copyFrom(*this, autoRelease); - break; - } - - case _InputArray::GPU_MAT: - { - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - GpuMat& dmat = arr.getGpuMatRef(); - dmat.create(rows_, cols_, type_); - impl_->copyTo(dmat.data, dmat.step, dmat.cols * dmat.elemSize(), dmat.rows); - #endif - - break; - } - - default: - { - arr.create(rows_, cols_, type_); - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - impl_->copyTo(mat.rows * mat.cols * mat.elemSize(), mat.data); - } - } -#endif -} - -cv::ogl::Buffer cv::ogl::Buffer::clone(Target target, bool autoRelease) const -{ -#ifndef HAVE_OPENGL - (void) target; - (void) autoRelease; - throw_nogl(); - return cv::ogl::Buffer(); -#else - ogl::Buffer buf; - buf.copyFrom(*this, target, autoRelease); - return buf; -#endif -} - -void cv::ogl::Buffer::bind(Target target) const -{ -#ifndef HAVE_OPENGL - (void) target; - throw_nogl(); -#else - impl_->bind(target); -#endif -} - -void cv::ogl::Buffer::unbind(Target target) -{ -#ifndef HAVE_OPENGL - (void) target; - throw_nogl(); -#else - gl::BindBuffer(target, 0); - CV_CheckGlError(); -#endif -} - -Mat cv::ogl::Buffer::mapHost(Access access) -{ -#ifndef HAVE_OPENGL - (void) access; - throw_nogl(); - return Mat(); -#else - return Mat(rows_, cols_, type_, impl_->mapHost(access)); -#endif -} - -void cv::ogl::Buffer::unmapHost() -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - return impl_->unmapHost(); -#endif -} - -GpuMat cv::ogl::Buffer::mapDevice() -{ -#ifndef HAVE_OPENGL - throw_nogl(); - return GpuMat(); -#else - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - return GpuMat(); - #else - return GpuMat(rows_, cols_, type_, impl_->mapDevice()); - #endif -#endif -} - -void cv::ogl::Buffer::unmapDevice() -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - impl_->unmapDevice(); - #endif -#endif -} - -unsigned int cv::ogl::Buffer::bufId() const -{ -#ifndef HAVE_OPENGL - throw_nogl(); - return 0; -#else - return impl_->bufId(); -#endif -} - -template <> void cv::Ptr::delete_obj() -{ - if (obj) delete obj; -} - -////////////////////////////////////////////////////////////////////////////////////////// -// ogl::Texture - -#ifndef HAVE_OPENGL - -class cv::ogl::Texture2D::Impl -{ -}; - -#else - -class cv::ogl::Texture2D::Impl -{ -public: - static const Ptr empty(); - - Impl(GLuint texId, bool autoRelease); - Impl(GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels, bool autoRelease); - ~Impl(); - - void copyFrom(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); - void copyTo(GLenum format, GLenum type, GLvoid* pixels) const; - - void bind() const; - - void setAutoRelease(bool flag) { autoRelease_ = flag; } - - GLuint texId() const { return texId_; } - -private: - Impl(); - - GLuint texId_; - bool autoRelease_; -}; - -const Ptr cv::ogl::Texture2D::Impl::empty() -{ - static Ptr p(new Impl); - return p; -} - -cv::ogl::Texture2D::Impl::Impl() : texId_(0), autoRelease_(true) -{ -} - -cv::ogl::Texture2D::Impl::Impl(GLuint atexId, bool autoRelease) : texId_(atexId), autoRelease_(autoRelease) -{ -} - -cv::ogl::Texture2D::Impl::Impl(GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels, bool autoRelease) : texId_(0), autoRelease_(autoRelease) -{ - gl::GenTextures(1, &texId_); - CV_CheckGlError(); - - CV_Assert(texId_ != 0); - - gl::BindTexture(gl::TEXTURE_2D, texId_); - CV_CheckGlError(); - - gl::PixelStorei(gl::UNPACK_ALIGNMENT, 1); - CV_CheckGlError(); - - gl::TexImage2D(gl::TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, pixels); - CV_CheckGlError(); - - gl::GenerateMipmap(gl::TEXTURE_2D); - CV_CheckGlError(); -} - -cv::ogl::Texture2D::Impl::~Impl() -{ - if (autoRelease_ && texId_) - gl::DeleteTextures(1, &texId_); -} - -void cv::ogl::Texture2D::Impl::copyFrom(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) -{ - gl::BindTexture(gl::TEXTURE_2D, texId_); - CV_CheckGlError(); - - gl::PixelStorei(gl::UNPACK_ALIGNMENT, 1); - CV_CheckGlError(); - - gl::TexSubImage2D(gl::TEXTURE_2D, 0, 0, 0, width, height, format, type, pixels); - CV_CheckGlError(); - - gl::GenerateMipmap(gl::TEXTURE_2D); - CV_CheckGlError(); -} - -void cv::ogl::Texture2D::Impl::copyTo(GLenum format, GLenum type, GLvoid* pixels) const -{ - gl::BindTexture(gl::TEXTURE_2D, texId_); - CV_CheckGlError(); - - gl::PixelStorei(gl::PACK_ALIGNMENT, 1); - CV_CheckGlError(); - - gl::GetTexImage(gl::TEXTURE_2D, 0, format, type, pixels); - CV_CheckGlError(); -} - -void cv::ogl::Texture2D::Impl::bind() const -{ - gl::BindTexture(gl::TEXTURE_2D, texId_); - CV_CheckGlError(); -} - -#endif // HAVE_OPENGL - -cv::ogl::Texture2D::Texture2D() : rows_(0), cols_(0), format_(NONE) -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - impl_ = Impl::empty(); -#endif -} - -cv::ogl::Texture2D::Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease) : rows_(0), cols_(0), format_(NONE) -{ -#ifndef HAVE_OPENGL - (void) arows; - (void) acols; - (void) aformat; - (void) atexId; - (void) autoRelease; - throw_nogl(); -#else - impl_ = new Impl(atexId, autoRelease); - rows_ = arows; - cols_ = acols; - format_ = aformat; -#endif -} - -cv::ogl::Texture2D::Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease) : rows_(0), cols_(0), format_(NONE) -{ -#ifndef HAVE_OPENGL - (void) asize; - (void) aformat; - (void) atexId; - (void) autoRelease; - throw_nogl(); -#else - impl_ = new Impl(atexId, autoRelease); - rows_ = asize.height; - cols_ = asize.width; - format_ = aformat; -#endif -} - -cv::ogl::Texture2D::Texture2D(int arows, int acols, Format aformat, bool autoRelease) : rows_(0), cols_(0), format_(NONE) -{ - create(arows, acols, aformat, autoRelease); -} - -cv::ogl::Texture2D::Texture2D(Size asize, Format aformat, bool autoRelease) : rows_(0), cols_(0), format_(NONE) -{ - create(asize, aformat, autoRelease); -} - -cv::ogl::Texture2D::Texture2D(InputArray arr, bool autoRelease) : rows_(0), cols_(0), format_(NONE) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - const Size asize = arr.size(); - const int atype = arr.type(); - - const int depth = CV_MAT_DEPTH(atype); - const int cn = CV_MAT_CN(atype); - - CV_Assert( depth <= CV_32F ); - CV_Assert( cn == 1 || cn == 3 || cn == 4 ); - - const Format internalFormats[] = - { - NONE, DEPTH_COMPONENT, NONE, RGB, RGBA - }; - const GLenum srcFormats[] = - { - 0, gl::DEPTH_COMPONENT, 0, gl::BGR, gl::BGRA - }; - - switch (kind) - { - case _InputArray::OPENGL_BUFFER: - { - ogl::Buffer buf = arr.getOGlBuffer(); - buf.bind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_ = new Impl(internalFormats[cn], asize.width, asize.height, srcFormats[cn], gl_types[depth], 0, autoRelease); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - break; - } - - case _InputArray::GPU_MAT: - { - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - GpuMat dmat = arr.getGpuMat(); - ogl::Buffer buf(dmat, ogl::Buffer::PIXEL_UNPACK_BUFFER); - buf.setAutoRelease(true); - buf.bind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_ = new Impl(internalFormats[cn], asize.width, asize.height, srcFormats[cn], gl_types[depth], 0, autoRelease); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - #endif - - break; - } - - default: - { - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_ = new Impl(internalFormats[cn], asize.width, asize.height, srcFormats[cn], gl_types[depth], mat.data, autoRelease); - break; - } - } - - rows_ = asize.height; - cols_ = asize.width; - format_ = internalFormats[cn]; -#endif -} - -void cv::ogl::Texture2D::create(int arows, int acols, Format aformat, bool autoRelease) -{ -#ifndef HAVE_OPENGL - (void) arows; - (void) acols; - (void) aformat; - (void) autoRelease; - throw_nogl(); -#else - if (rows_ != arows || cols_ != acols || format_ != aformat) - { - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_ = new Impl(aformat, acols, arows, aformat, gl::FLOAT, 0, autoRelease); - rows_ = arows; - cols_ = acols; - format_ = aformat; - } -#endif -} - -void cv::ogl::Texture2D::release() -{ -#ifdef HAVE_OPENGL - if (*impl_.refcount == 1) - impl_->setAutoRelease(true); - impl_ = Impl::empty(); - rows_ = 0; - cols_ = 0; - format_ = NONE; -#endif -} - -void cv::ogl::Texture2D::setAutoRelease(bool flag) -{ -#ifndef HAVE_OPENGL - (void) flag; - throw_nogl(); -#else - impl_->setAutoRelease(flag); -#endif -} - -void cv::ogl::Texture2D::copyFrom(InputArray arr, bool autoRelease) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - const Size asize = arr.size(); - const int atype = arr.type(); - - const int depth = CV_MAT_DEPTH(atype); - const int cn = CV_MAT_CN(atype); - - CV_Assert( depth <= CV_32F ); - CV_Assert( cn == 1 || cn == 3 || cn == 4 ); - - const Format internalFormats[] = - { - NONE, DEPTH_COMPONENT, NONE, RGB, RGBA - }; - const GLenum srcFormats[] = - { - 0, gl::DEPTH_COMPONENT, 0, gl::BGR, gl::BGRA - }; - - create(asize, internalFormats[cn], autoRelease); - - switch(kind) - { - case _InputArray::OPENGL_BUFFER: - { - ogl::Buffer buf = arr.getOGlBuffer(); - buf.bind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_->copyFrom(asize.width, asize.height, srcFormats[cn], gl_types[depth], 0); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - break; - } - - case _InputArray::GPU_MAT: - { - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - GpuMat dmat = arr.getGpuMat(); - ogl::Buffer buf(dmat, ogl::Buffer::PIXEL_UNPACK_BUFFER); - buf.setAutoRelease(true); - buf.bind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_->copyFrom(asize.width, asize.height, srcFormats[cn], gl_types[depth], 0); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - #endif - - break; - } - - default: - { - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_UNPACK_BUFFER); - impl_->copyFrom(asize.width, asize.height, srcFormats[cn], gl_types[depth], mat.data); - } - } -#endif -} - -void cv::ogl::Texture2D::copyTo(OutputArray arr, int ddepth, bool autoRelease) const -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) ddepth; - (void) autoRelease; - throw_nogl(); -#else - const int kind = arr.kind(); - - const int cn = format_ == DEPTH_COMPONENT ? 1: format_ == RGB ? 3 : 4; - const GLenum dstFormat = format_ == DEPTH_COMPONENT ? gl::DEPTH_COMPONENT : format_ == RGB ? gl::BGR : gl::BGRA; - - switch(kind) - { - case _InputArray::OPENGL_BUFFER: - { - ogl::Buffer& buf = arr.getOGlBufferRef(); - buf.create(rows_, cols_, CV_MAKE_TYPE(ddepth, cn), ogl::Buffer::PIXEL_PACK_BUFFER, autoRelease); - buf.bind(ogl::Buffer::PIXEL_PACK_BUFFER); - impl_->copyTo(dstFormat, gl_types[ddepth], 0); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_PACK_BUFFER); - break; - } - - case _InputArray::GPU_MAT: - { - #if !defined HAVE_CUDA || defined(CUDA_DISABLER) - throw_nocuda(); - #else - ogl::Buffer buf(rows_, cols_, CV_MAKE_TYPE(ddepth, cn), ogl::Buffer::PIXEL_PACK_BUFFER); - buf.setAutoRelease(true); - buf.bind(ogl::Buffer::PIXEL_PACK_BUFFER); - impl_->copyTo(dstFormat, gl_types[ddepth], 0); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_PACK_BUFFER); - buf.copyTo(arr); - #endif - - break; - } - - default: - { - arr.create(rows_, cols_, CV_MAKE_TYPE(ddepth, cn)); - Mat mat = arr.getMat(); - CV_Assert( mat.isContinuous() ); - ogl::Buffer::unbind(ogl::Buffer::PIXEL_PACK_BUFFER); - impl_->copyTo(dstFormat, gl_types[ddepth], mat.data); - } - } -#endif -} - -void cv::ogl::Texture2D::bind() const -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - impl_->bind(); -#endif -} - -unsigned int cv::ogl::Texture2D::texId() const -{ -#ifndef HAVE_OPENGL - throw_nogl(); - return 0; -#else - return impl_->texId(); -#endif -} - -template <> void cv::Ptr::delete_obj() -{ - if (obj) delete obj; -} - -//////////////////////////////////////////////////////////////////////// -// ogl::Arrays - -cv::ogl::Arrays::Arrays() : size_(0) -{ -} - -void cv::ogl::Arrays::setVertexArray(InputArray vertex) -{ - const int cn = vertex.channels(); - const int depth = vertex.depth(); - - CV_Assert( cn == 2 || cn == 3 || cn == 4 ); - CV_Assert( depth == CV_16S || depth == CV_32S || depth == CV_32F || depth == CV_64F ); - - if (vertex.kind() == _InputArray::OPENGL_BUFFER) - vertex_ = vertex.getOGlBuffer(); - else - vertex_.copyFrom(vertex); - - size_ = vertex_.size().area(); -} - -void cv::ogl::Arrays::resetVertexArray() -{ - vertex_.release(); - size_ = 0; -} - -void cv::ogl::Arrays::setColorArray(InputArray color) -{ - const int cn = color.channels(); - - CV_Assert( cn == 3 || cn == 4 ); - - if (color.kind() == _InputArray::OPENGL_BUFFER) - color_ = color.getOGlBuffer(); - else - color_.copyFrom(color); -} - -void cv::ogl::Arrays::resetColorArray() -{ - color_.release(); -} - -void cv::ogl::Arrays::setNormalArray(InputArray normal) -{ - const int cn = normal.channels(); - const int depth = normal.depth(); - - CV_Assert( cn == 3 ); - CV_Assert( depth == CV_8S || depth == CV_16S || depth == CV_32S || depth == CV_32F || depth == CV_64F ); - - if (normal.kind() == _InputArray::OPENGL_BUFFER) - normal_ = normal.getOGlBuffer(); - else - normal_.copyFrom(normal); -} - -void cv::ogl::Arrays::resetNormalArray() -{ - normal_.release(); -} - -void cv::ogl::Arrays::setTexCoordArray(InputArray texCoord) -{ - const int cn = texCoord.channels(); - const int depth = texCoord.depth(); - - CV_Assert( cn >= 1 && cn <= 4 ); - CV_Assert( depth == CV_16S || depth == CV_32S || depth == CV_32F || depth == CV_64F ); - - if (texCoord.kind() == _InputArray::OPENGL_BUFFER) - texCoord_ = texCoord.getOGlBuffer(); - else - texCoord_.copyFrom(texCoord); -} - -void cv::ogl::Arrays::resetTexCoordArray() -{ - texCoord_.release(); -} - -void cv::ogl::Arrays::release() -{ - resetVertexArray(); - resetColorArray(); - resetNormalArray(); - resetTexCoordArray(); -} - -void cv::ogl::Arrays::setAutoRelease(bool flag) -{ - vertex_.setAutoRelease(flag); - color_.setAutoRelease(flag); - normal_.setAutoRelease(flag); - texCoord_.setAutoRelease(flag); -} - -void cv::ogl::Arrays::bind() const -{ -#ifndef HAVE_OPENGL - throw_nogl(); -#else - CV_Assert( texCoord_.empty() || texCoord_.size().area() == size_ ); - CV_Assert( normal_.empty() || normal_.size().area() == size_ ); - CV_Assert( color_.empty() || color_.size().area() == size_ ); - - if (texCoord_.empty()) - { - gl::DisableClientState(gl::TEXTURE_COORD_ARRAY); - CV_CheckGlError(); - } - else - { - gl::EnableClientState(gl::TEXTURE_COORD_ARRAY); - CV_CheckGlError(); - - texCoord_.bind(ogl::Buffer::ARRAY_BUFFER); - - gl::TexCoordPointer(texCoord_.channels(), gl_types[texCoord_.depth()], 0, 0); - CV_CheckGlError(); - } - - if (normal_.empty()) - { - gl::DisableClientState(gl::NORMAL_ARRAY); - CV_CheckGlError(); - } - else - { - gl::EnableClientState(gl::NORMAL_ARRAY); - CV_CheckGlError(); - - normal_.bind(ogl::Buffer::ARRAY_BUFFER); - - gl::NormalPointer(gl_types[normal_.depth()], 0, 0); - CV_CheckGlError(); - } - - if (color_.empty()) - { - gl::DisableClientState(gl::COLOR_ARRAY); - CV_CheckGlError(); - } - else - { - gl::EnableClientState(gl::COLOR_ARRAY); - CV_CheckGlError(); - - color_.bind(ogl::Buffer::ARRAY_BUFFER); - - const int cn = color_.channels(); - - gl::ColorPointer(cn, gl_types[color_.depth()], 0, 0); - CV_CheckGlError(); - } - - if (vertex_.empty()) - { - gl::DisableClientState(gl::VERTEX_ARRAY); - CV_CheckGlError(); - } - else - { - gl::EnableClientState(gl::VERTEX_ARRAY); - CV_CheckGlError(); - - vertex_.bind(ogl::Buffer::ARRAY_BUFFER); - - gl::VertexPointer(vertex_.channels(), gl_types[vertex_.depth()], 0, 0); - CV_CheckGlError(); - } - - ogl::Buffer::unbind(ogl::Buffer::ARRAY_BUFFER); -#endif -} - -//////////////////////////////////////////////////////////////////////// -// Rendering - -void cv::ogl::render(const ogl::Texture2D& tex, Rect_ wndRect, Rect_ texRect) -{ -#ifndef HAVE_OPENGL - (void) tex; - (void) wndRect; - (void) texRect; - throw_nogl(); -#else - if (!tex.empty()) - { - gl::MatrixMode(gl::PROJECTION); - gl::LoadIdentity(); - gl::Ortho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0); - CV_CheckGlError(); - - gl::MatrixMode(gl::MODELVIEW); - gl::LoadIdentity(); - CV_CheckGlError(); - - gl::Disable(gl::LIGHTING); - CV_CheckGlError(); - - tex.bind(); - - gl::Enable(gl::TEXTURE_2D); - CV_CheckGlError(); - - gl::TexEnvi(gl::TEXTURE_ENV, gl::TEXTURE_ENV_MODE, gl::REPLACE); - CV_CheckGlError(); - - gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR); - CV_CheckGlError(); - - const float vertex[] = - { - wndRect.x, wndRect.y, 0.0f, - wndRect.x, (wndRect.y + wndRect.height), 0.0f, - wndRect.x + wndRect.width, (wndRect.y + wndRect.height), 0.0f, - wndRect.x + wndRect.width, wndRect.y, 0.0f - }; - const float texCoords[] = - { - texRect.x, texRect.y, - texRect.x, texRect.y + texRect.height, - texRect.x + texRect.width, texRect.y + texRect.height, - texRect.x + texRect.width, texRect.y - }; - - ogl::Buffer::unbind(ogl::Buffer::ARRAY_BUFFER); - - gl::EnableClientState(gl::TEXTURE_COORD_ARRAY); - CV_CheckGlError(); - - gl::TexCoordPointer(2, gl::FLOAT, 0, texCoords); - CV_CheckGlError(); - - gl::DisableClientState(gl::NORMAL_ARRAY); - gl::DisableClientState(gl::COLOR_ARRAY); - CV_CheckGlError(); - - gl::EnableClientState(gl::VERTEX_ARRAY); - CV_CheckGlError(); - - gl::VertexPointer(3, gl::FLOAT, 0, vertex); - CV_CheckGlError(); - - gl::DrawArrays(gl::QUADS, 0, 4); - CV_CheckGlError(); - } -#endif -} - -void cv::ogl::render(const ogl::Arrays& arr, int mode, Scalar color) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) mode; - (void) color; - throw_nogl(); -#else - if (!arr.empty()) - { - gl::Color3d(color[0] / 255.0, color[1] / 255.0, color[2] / 255.0); - - arr.bind(); - - gl::DrawArrays(mode, 0, arr.size()); - } -#endif -} - -void cv::ogl::render(const ogl::Arrays& arr, InputArray indices, int mode, Scalar color) -{ -#ifndef HAVE_OPENGL - (void) arr; - (void) indices; - (void) mode; - (void) color; - throw_nogl(); -#else - if (!arr.empty() && !indices.empty()) - { - gl::Color3d(color[0] / 255.0, color[1] / 255.0, color[2] / 255.0); - - arr.bind(); - - const int kind = indices.kind(); - - switch (kind) - { - case _InputArray::OPENGL_BUFFER : - { - ogl::Buffer buf = indices.getOGlBuffer(); - - const int depth = buf.depth(); - - CV_Assert( buf.channels() == 1 ); - CV_Assert( depth <= CV_32S ); - - GLenum type; - if (depth < CV_16U) - type = gl::UNSIGNED_BYTE; - else if (depth < CV_32S) - type = gl::UNSIGNED_SHORT; - else - type = gl::UNSIGNED_INT; - - buf.bind(ogl::Buffer::ELEMENT_ARRAY_BUFFER); - - gl::DrawElements(mode, buf.size().area(), type, 0); - - ogl::Buffer::unbind(ogl::Buffer::ELEMENT_ARRAY_BUFFER); - - break; - } - - default: - { - Mat mat = indices.getMat(); - - const int depth = mat.depth(); - - CV_Assert( mat.channels() == 1 ); - CV_Assert( depth <= CV_32S ); - CV_Assert( mat.isContinuous() ); - - GLenum type; - if (depth < CV_16U) - type = gl::UNSIGNED_BYTE; - else if (depth < CV_32S) - type = gl::UNSIGNED_SHORT; - else - type = gl::UNSIGNED_INT; - - ogl::Buffer::unbind(ogl::Buffer::ELEMENT_ARRAY_BUFFER); - - gl::DrawElements(mode, mat.size().area(), type, mat.data); - } - } - } -#endif -} diff --git a/modules/core/src/opengl_interop_deprecated.cpp b/modules/core/src/opengl_interop_deprecated.cpp deleted file mode 100644 index 7a03924..0000000 --- a/modules/core/src/opengl_interop_deprecated.cpp +++ /dev/null @@ -1,330 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include "opencv2/core/opengl_interop_deprecated.hpp" -#include "opencv2/core/gpumat.hpp" - -using namespace std; -using namespace cv; -using namespace cv::gpu; - -CvOpenGlFuncTab::~CvOpenGlFuncTab() -{ -} - -void icvSetOpenGlFuncTab(const CvOpenGlFuncTab*) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -//////////////////////////////////////////////////////////////////////// -// GlBuffer - -class cv::GlBuffer::Impl -{ -}; - -cv::GlBuffer::GlBuffer(Usage _usage) : rows_(0), cols_(0), type_(0), usage_(_usage) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlBuffer::GlBuffer(int, int, int, Usage _usage) : rows_(0), cols_(0), type_(0), usage_(_usage) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlBuffer::GlBuffer(Size, int, Usage _usage) : rows_(0), cols_(0), type_(0), usage_(_usage) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlBuffer::GlBuffer(InputArray, Usage _usage) : rows_(0), cols_(0), type_(0), usage_(_usage) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlBuffer::create(int, int, int, Usage) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlBuffer::release() -{ -} - -void cv::GlBuffer::copyFrom(InputArray) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlBuffer::bind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlBuffer::unbind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -Mat cv::GlBuffer::mapHost() -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return Mat(); -} - -void cv::GlBuffer::unmapHost() -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -GpuMat cv::GlBuffer::mapDevice() -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return GpuMat(); -} - -void cv::GlBuffer::unmapDevice() -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -template <> void cv::Ptr::delete_obj() -{ - if (obj) delete obj; -} - -////////////////////////////////////////////////////////////////////////////////////////// -// GlTexture - -class cv::GlTexture::Impl -{ -}; - -cv::GlTexture::GlTexture() : rows_(0), cols_(0), type_(0), buf_(GlBuffer::TEXTURE_BUFFER) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlTexture::GlTexture(int, int, int) : rows_(0), cols_(0), type_(0), buf_(GlBuffer::TEXTURE_BUFFER) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlTexture::GlTexture(Size, int) : rows_(0), cols_(0), type_(0), buf_(GlBuffer::TEXTURE_BUFFER) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -cv::GlTexture::GlTexture(InputArray, bool) : rows_(0), cols_(0), type_(0), buf_(GlBuffer::TEXTURE_BUFFER) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlTexture::create(int, int, int) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlTexture::release() -{ -} - -void cv::GlTexture::copyFrom(InputArray, bool) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlTexture::bind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlTexture::unbind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -template <> void cv::Ptr::delete_obj() -{ - if (obj) delete obj; -} - -//////////////////////////////////////////////////////////////////////// -// GlArrays - -void cv::GlArrays::setVertexArray(InputArray) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlArrays::setColorArray(InputArray, bool) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlArrays::setNormalArray(InputArray) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlArrays::setTexCoordArray(InputArray) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlArrays::bind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlArrays::unbind() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -//////////////////////////////////////////////////////////////////////// -// GlFont - -cv::GlFont::GlFont(const string& _family, int _height, Weight _weight, Style _style) - : family_(_family), height_(_height), weight_(_weight), style_(_style), base_(0) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlFont::draw(const char*, int) const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -Ptr cv::GlFont::get(const std::string&, int, Weight, Style) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return Ptr(); -} - -//////////////////////////////////////////////////////////////////////// -// Rendering - -void cv::render(const GlTexture&, Rect_, Rect_) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::render(const GlArrays&, int, Scalar) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::render(const string&, const Ptr&, Scalar, Point2d) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -//////////////////////////////////////////////////////////////////////// -// GlCamera - -cv::GlCamera::GlCamera() : - eye_(0.0, 0.0, -5.0), center_(0.0, 0.0, 0.0), up_(0.0, 1.0, 0.0), - pos_(0.0, 0.0, -5.0), yaw_(0.0), pitch_(0.0), roll_(0.0), - useLookAtParams_(false), - - scale_(1.0, 1.0, 1.0), - - projectionMatrix_(), - fov_(45.0), aspect_(0.0), - left_(0.0), right_(1.0), bottom_(1.0), top_(0.0), - zNear_(-1.0), zFar_(1.0), - perspectiveProjection_(false) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::lookAt(Point3d, Point3d, Point3d) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setCameraPos(Point3d, double, double, double) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setScale(Point3d) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setProjectionMatrix(const Mat&, bool) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setPerspectiveProjection(double, double, double, double) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setOrthoProjection(double, double, double, double, double, double) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setupProjectionMatrix() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::GlCamera::setupModelViewMatrix() const -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -//////////////////////////////////////////////////////////////////////// -// Error handling - -bool icvCheckGlError(const char*, const int, const char*) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); - return false; -} diff --git a/modules/core/src/out.cpp b/modules/core/src/out.cpp deleted file mode 100644 index a2894b7..0000000 --- a/modules/core/src/out.cpp +++ /dev/null @@ -1,306 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -namespace cv -{ - -static inline char getCloseBrace(char c) -{ - return c == '[' ? ']' : c == '(' ? ')' : c == '{' ? '}' : '\0'; -} - - -template static void writeElems(std::ostream& out, const _Tp* data, - int nelems, int cn, char obrace, char cbrace) -{ - typedef typename DataType<_Tp>::work_type _WTp; - nelems *= cn; - for(int i = 0; i < nelems; i += cn) - { - if(cn == 1) - { - out << (_WTp)data[i] << (i+1 < nelems ? ", " : ""); - continue; - } - out << obrace; - for(int j = 0; j < cn; j++) - out << (_WTp)data[i + j] << (j+1 < cn ? ", " : ""); - out << cbrace << (i+cn < nelems ? ", " : ""); - } -} - - -static void writeElems(std::ostream& out, const void* data, int nelems, int type, char brace) -{ - int depth = CV_MAT_DEPTH(type), cn = CV_MAT_CN(type); - char cbrace = ' '; - if(!brace || isspace(brace)) - { - nelems *= cn; - cn = 1; - } - else - cbrace = getCloseBrace(brace); - if(depth == CV_8U) - writeElems(out, (const uchar*)data, nelems, cn, brace, cbrace); - else if(depth == CV_8S) - writeElems(out, (const schar*)data, nelems, cn, brace, cbrace); - else if(depth == CV_16U) - writeElems(out, (const ushort*)data, nelems, cn, brace, cbrace); - else if(depth == CV_16S) - writeElems(out, (const short*)data, nelems, cn, brace, cbrace); - else if(depth == CV_32S) - writeElems(out, (const int*)data, nelems, cn, brace, cbrace); - else if(depth == CV_32F) - { - std::streamsize pp = out.precision(); - out.precision(8); - writeElems(out, (const float*)data, nelems, cn, brace, cbrace); - out.precision(pp); - } - else if(depth == CV_64F) - { - std::streamsize pp = out.precision(); - out.precision(16); - writeElems(out, (const double*)data, nelems, cn, brace, cbrace); - out.precision(pp); - } - else - CV_Error(CV_StsUnsupportedFormat, ""); -} - - -static void writeMat(std::ostream& out, const Mat& m, char rowsep, char elembrace, bool singleLine) -{ - CV_Assert(m.dims <= 2); - int type = m.type(); - - char crowbrace = getCloseBrace(rowsep); - char orowbrace = crowbrace ? rowsep : '\0'; - - if( orowbrace || isspace(rowsep) ) - rowsep = '\0'; - - for( int i = 0; i < m.rows; i++ ) - { - if(orowbrace) - out << orowbrace; - if( m.data ) - writeElems(out, m.ptr(i), m.cols, type, elembrace); - if(orowbrace) - out << crowbrace << (i+1 < m.rows ? ", " : ""); - if(i+1 < m.rows) - { - if(rowsep) - out << rowsep << (singleLine ? " " : ""); - if(!singleLine) - out << "\n "; - } - } -} - -class MatlabFormatter : public Formatter -{ -public: - virtual ~MatlabFormatter() {} - void write(std::ostream& out, const Mat& m, const int*, int) const - { - out << "["; - writeMat(out, m, ';', ' ', m.rows == 1); - out << "]"; - } - - void write(std::ostream& out, const void* data, int nelems, int type, const int*, int) const - { - writeElems(out, data, nelems, type, ' '); - } -}; - -class PythonFormatter : public Formatter -{ -public: - virtual ~PythonFormatter() {} - void write(std::ostream& out, const Mat& m, const int*, int) const - { - out << "["; - writeMat(out, m, m.cols > 1 ? '[' : ' ', '[', m.rows*m.channels() == 1); - out << "]"; - } - - void write(std::ostream& out, const void* data, int nelems, int type, const int*, int) const - { - writeElems(out, data, nelems, type, '['); - } -}; - - -class NumpyFormatter : public Formatter -{ -public: - virtual ~NumpyFormatter() {} - void write(std::ostream& out, const Mat& m, const int*, int) const - { - static const char* numpyTypes[] = - { - "uint8", "int8", "uint16", "int16", "int32", "float32", "float64", "uint64" - }; - out << "array(["; - writeMat(out, m, m.cols > 1 ? '[' : ' ', '[', m.rows*m.channels() == 1); - out << "], type='" << numpyTypes[m.depth()] << "')"; - } - - void write(std::ostream& out, const void* data, int nelems, int type, const int*, int) const - { - writeElems(out, data, nelems, type, '['); - } -}; - - -class CSVFormatter : public Formatter -{ -public: - virtual ~CSVFormatter() {} - void write(std::ostream& out, const Mat& m, const int*, int) const - { - writeMat(out, m, ' ', ' ', m.rows*m.channels() == 1); - if(m.rows > 1) - out << "\n"; - } - - void write(std::ostream& out, const void* data, int nelems, int type, const int*, int) const - { - writeElems(out, data, nelems, type, ' '); - } -}; - - -class CFormatter : public Formatter -{ -public: - virtual ~CFormatter() {} - void write(std::ostream& out, const Mat& m, const int*, int) const - { - out << "{"; - writeMat(out, m, ',', ' ', m.rows==1); - out << "}"; - } - - void write(std::ostream& out, const void* data, int nelems, int type, const int*, int) const - { - writeElems(out, data, nelems, type, ' '); - } -}; - - -static MatlabFormatter matlabFormatter; -static PythonFormatter pythonFormatter; -static NumpyFormatter numpyFormatter; -static CSVFormatter csvFormatter; -static CFormatter cFormatter; - -static const Formatter* g_defaultFormatter0 = &matlabFormatter; -static const Formatter* g_defaultFormatter = &matlabFormatter; - -static bool my_streq(const char* a, const char* b) -{ - size_t i, alen = strlen(a), blen = strlen(b); - if( alen != blen ) - return false; - for( i = 0; i < alen; i++ ) - if( a[i] != b[i] && a[i] - 32 != b[i] ) - return false; - return true; -} - -const Formatter* Formatter::get(const char* fmt) -{ - if(!fmt || my_streq(fmt, "")) - return g_defaultFormatter; - if( my_streq(fmt, "MATLAB")) - return &matlabFormatter; - if( my_streq(fmt, "CSV")) - return &csvFormatter; - if( my_streq(fmt, "PYTHON")) - return &pythonFormatter; - if( my_streq(fmt, "NUMPY")) - return &numpyFormatter; - if( my_streq(fmt, "C")) - return &cFormatter; - CV_Error(CV_StsBadArg, "Unknown formatter"); - return g_defaultFormatter; -} - -const Formatter* Formatter::setDefault(const Formatter* fmt) -{ - const Formatter* prevFmt = g_defaultFormatter; - if(!fmt) - fmt = g_defaultFormatter0; - g_defaultFormatter = fmt; - return prevFmt; -} - -Formatted::Formatted(const Mat& _m, const Formatter* _fmt, - const vector& _params) -{ - mtx = _m; - fmt = _fmt ? _fmt : Formatter::get(); - std::copy(_params.begin(), _params.end(), back_inserter(params)); -} - -Formatted::Formatted(const Mat& _m, const Formatter* _fmt, const int* _params) -{ - mtx = _m; - fmt = _fmt ? _fmt : Formatter::get(); - - if( _params ) - { - int i, maxParams = 100; - for(i = 0; i < maxParams && _params[i] != 0; i+=2) - ; - std::copy(_params, _params + i, back_inserter(params)); - } -} - -} diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp deleted file mode 100644 index 27d7ecc..0000000 --- a/modules/core/src/parallel.cpp +++ /dev/null @@ -1,516 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined WIN32 || defined WINCE - #include - #undef small - #undef min - #undef max - #undef abs -#endif - -#if defined __linux__ || defined __APPLE__ - #include - #include - #include - #if defined ANDROID - #include - #else - #include - #endif -#endif - -#ifdef _OPENMP - #define HAVE_OPENMP -#endif - -#ifdef __APPLE__ - #define HAVE_GCD -#endif - -#if defined _MSC_VER && _MSC_VER >= 1600 - #define HAVE_CONCURRENCY -#endif - -/* IMPORTANT: always use the same order of defines - 1. HAVE_TBB - 3rdparty library, should be explicitly enabled - 2. HAVE_CSTRIPES - 3rdparty library, should be explicitly enabled - 3. HAVE_OPENMP - integrated to compiler, should be explicitly enabled - 4. HAVE_GCD - system wide, used automatically (APPLE only) - 5. HAVE_CONCURRENCY - part of runtime, used automatically (Windows only - MSVS 10, MSVS 11) -*/ - -#if defined HAVE_TBB - #include "tbb/tbb_stddef.h" - #if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202 - #include "tbb/tbb.h" - #include "tbb/task.h" - #if TBB_INTERFACE_VERSION >= 6100 - #include "tbb/task_arena.h" - #endif - #undef min - #undef max - #else - #undef HAVE_TBB - #endif // end TBB version -#endif - -#ifndef HAVE_TBB - #if defined HAVE_CSTRIPES - #include "C=.h" - #undef shared - #elif defined HAVE_OPENMP - #include - #elif defined HAVE_GCD - #include - #include - #elif defined HAVE_CONCURRENCY - #include - #endif -#endif - -#if defined HAVE_TBB && TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202 -# define CV_PARALLEL_FRAMEWORK "tbb" -#elif defined HAVE_CSTRIPES -# define CV_PARALLEL_FRAMEWORK "cstripes" -#elif defined HAVE_OPENMP -# define CV_PARALLEL_FRAMEWORK "openmp" -#elif defined HAVE_GCD -# define CV_PARALLEL_FRAMEWORK "gcd" -#elif defined HAVE_CONCURRENCY -# define CV_PARALLEL_FRAMEWORK "ms-concurrency" -#endif - -namespace cv -{ - ParallelLoopBody::~ParallelLoopBody() {} -} - -namespace -{ -#ifdef CV_PARALLEL_FRAMEWORK - class ParallelLoopBodyWrapper - { - public: - ParallelLoopBodyWrapper(const cv::ParallelLoopBody& _body, const cv::Range& _r, double _nstripes) - { - body = &_body; - wholeRange = _r; - double len = wholeRange.end - wholeRange.start; - nstripes = cvRound(_nstripes <= 0 ? len : MIN(MAX(_nstripes, 1.), len)); - } - void operator()(const cv::Range& sr) const - { - cv::Range r; - r.start = (int)(wholeRange.start + - ((uint64)sr.start*(wholeRange.end - wholeRange.start) + nstripes/2)/nstripes); - r.end = sr.end >= nstripes ? wholeRange.end : (int)(wholeRange.start + - ((uint64)sr.end*(wholeRange.end - wholeRange.start) + nstripes/2)/nstripes); - (*body)(r); - } - cv::Range stripeRange() const { return cv::Range(0, nstripes); } - - protected: - const cv::ParallelLoopBody* body; - cv::Range wholeRange; - int nstripes; - }; - -#if defined HAVE_TBB - class ProxyLoopBody : public ParallelLoopBodyWrapper - { - public: - ProxyLoopBody(const cv::ParallelLoopBody& _body, const cv::Range& _r, double _nstripes) - : ParallelLoopBodyWrapper(_body, _r, _nstripes) - {} - - void operator ()(const tbb::blocked_range& range) const - { - this->ParallelLoopBodyWrapper::operator()(cv::Range(range.begin(), range.end())); - } - }; -#elif defined HAVE_CSTRIPES || defined HAVE_OPENMP - typedef ParallelLoopBodyWrapper ProxyLoopBody; -#elif defined HAVE_GCD - typedef ParallelLoopBodyWrapper ProxyLoopBody; - static void block_function(void* context, size_t index) - { - ProxyLoopBody* ptr_body = static_cast(context); - (*ptr_body)(cv::Range(index, index + 1)); - } -#elif defined HAVE_CONCURRENCY - class ProxyLoopBody : public ParallelLoopBodyWrapper - { - public: - ProxyLoopBody(const cv::ParallelLoopBody& _body, const cv::Range& _r, double _nstripes) - : ParallelLoopBodyWrapper(_body, _r, _nstripes) - {} - - void operator ()(int i) const - { - this->ParallelLoopBodyWrapper::operator()(cv::Range(i, i + 1)); - } - }; -#else - typedef ParallelLoopBodyWrapper ProxyLoopBody; -#endif - -static int numThreads = -1; - -#if defined HAVE_TBB -static tbb::task_scheduler_init tbbScheduler(tbb::task_scheduler_init::deferred); -#elif defined HAVE_CSTRIPES -// nothing for C= -#elif defined HAVE_OPENMP -static int numThreadsMax = omp_get_max_threads(); -#elif defined HAVE_GCD -// nothing for GCD -#elif defined HAVE_CONCURRENCY -class SchedPtr -{ - Concurrency::Scheduler* sched_; -public: - Concurrency::Scheduler* operator->() { return sched_; } - operator Concurrency::Scheduler*() { return sched_; } - - void operator=(Concurrency::Scheduler* sched) - { - if (sched_) sched_->Release(); - sched_ = sched; - } - - SchedPtr() : sched_(0) {} - ~SchedPtr() { *this = 0; } -}; -static SchedPtr pplScheduler; -#endif - -#endif // CV_PARALLEL_FRAMEWORK - -} //namespace - -/* ================================ parallel_for_ ================================ */ - -void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes) -{ -#ifdef CV_PARALLEL_FRAMEWORK - - if(numThreads != 0) - { - ProxyLoopBody pbody(body, range, nstripes); - cv::Range stripeRange = pbody.stripeRange(); - -#if defined HAVE_TBB - - tbb::parallel_for(tbb::blocked_range(stripeRange.start, stripeRange.end), pbody); - -#elif defined HAVE_CSTRIPES - - parallel(MAX(0, numThreads)) - { - int offset = stripeRange.start; - int len = stripeRange.end - offset; - Range r(offset + CPX_RANGE_START(len), offset + CPX_RANGE_END(len)); - pbody(r); - barrier(); - } - -#elif defined HAVE_OPENMP - - #pragma omp parallel for schedule(dynamic) - for (int i = stripeRange.start; i < stripeRange.end; ++i) - pbody(Range(i, i + 1)); - -#elif defined HAVE_GCD - - dispatch_queue_t concurrent_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_apply_f(stripeRange.end - stripeRange.start, concurrent_queue, &pbody, block_function); - -#elif defined HAVE_CONCURRENCY - - if(!pplScheduler || pplScheduler->Id() == Concurrency::CurrentScheduler::Id()) - { - Concurrency::parallel_for(stripeRange.start, stripeRange.end, pbody); - } - else - { - pplScheduler->Attach(); - Concurrency::parallel_for(stripeRange.start, stripeRange.end, pbody); - Concurrency::CurrentScheduler::Detach(); - } - -#else - -#error You have hacked and compiling with unsupported parallel framework - -#endif - - } - else - -#endif // CV_PARALLEL_FRAMEWORK - { - (void)nstripes; - body(range); - } -} - -int cv::getNumThreads(void) -{ -#ifdef CV_PARALLEL_FRAMEWORK - - if(numThreads == 0) - return 1; - -#endif - -#if defined HAVE_TBB - - return tbbScheduler.is_active() - ? numThreads - : tbb::task_scheduler_init::default_num_threads(); - -#elif defined HAVE_CSTRIPES - - return numThreads > 0 - ? numThreads - : cv::getNumberOfCPUs(); - -#elif defined HAVE_OPENMP - - return omp_get_max_threads(); - -#elif defined HAVE_GCD - - return 512; // the GCD thread pool limit - -#elif defined HAVE_CONCURRENCY - - return 1 + (pplScheduler == 0 - ? Concurrency::CurrentScheduler::Get()->GetNumberOfVirtualProcessors() - : pplScheduler->GetNumberOfVirtualProcessors()); - -#else - - return 1; - -#endif -} - -void cv::setNumThreads( int threads ) -{ - (void)threads; -#ifdef CV_PARALLEL_FRAMEWORK - numThreads = threads; -#endif - -#ifdef HAVE_TBB - - if(tbbScheduler.is_active()) tbbScheduler.terminate(); - if(threads > 0) tbbScheduler.initialize(threads); - -#elif defined HAVE_CSTRIPES - - return; // nothing needed - -#elif defined HAVE_OPENMP - - if(omp_in_parallel()) - return; // can't change number of openmp threads inside a parallel region - - omp_set_num_threads(threads > 0 ? threads : numThreadsMax); - -#elif defined HAVE_GCD - - // unsupported - // there is only private dispatch_queue_set_width() and only for desktop - -#elif defined HAVE_CONCURRENCY - - if (threads <= 0) - { - pplScheduler = 0; - } - else if (threads == 1) - { - // Concurrency always uses >=2 threads, so we just disable it if 1 thread is requested - numThreads = 0; - } - else if (pplScheduler == 0 || 1 + pplScheduler->GetNumberOfVirtualProcessors() != (unsigned int)threads) - { - pplScheduler = Concurrency::Scheduler::Create(Concurrency::SchedulerPolicy(2, - Concurrency::MinConcurrency, threads-1, - Concurrency::MaxConcurrency, threads-1)); - } - -#endif -} - - -int cv::getThreadNum(void) -{ -#if defined HAVE_TBB - #if TBB_INTERFACE_VERSION >= 6100 && defined TBB_PREVIEW_TASK_ARENA && TBB_PREVIEW_TASK_ARENA - return tbb::task_arena::current_slot(); - #else - return 0; - #endif -#elif defined HAVE_CSTRIPES - return pix(); -#elif defined HAVE_OPENMP - return omp_get_thread_num(); -#elif defined HAVE_GCD - return (int)(size_t)(void*)pthread_self(); // no zero-based indexing -#elif defined HAVE_CONCURRENCY - return std::max(0, (int)Concurrency::Context::VirtualProcessorId()); // zero for master thread, unique number for others but not necessary 1,2,3,... -#else - return 0; -#endif -} - -#ifdef ANDROID -static inline int getNumberOfCPUsImpl() -{ - FILE* cpuPossible = fopen("/sys/devices/system/cpu/possible", "r"); - if(!cpuPossible) - return 1; - - char buf[2000]; //big enough for 1000 CPUs in worst possible configuration - char* pbuf = fgets(buf, sizeof(buf), cpuPossible); - fclose(cpuPossible); - if(!pbuf) - return 1; - - //parse string of form "0-1,3,5-7,10,13-15" - int cpusAvailable = 0; - - while(*pbuf) - { - const char* pos = pbuf; - bool range = false; - while(*pbuf && *pbuf != ',') - { - if(*pbuf == '-') range = true; - ++pbuf; - } - if(*pbuf) *pbuf++ = 0; - if(!range) - ++cpusAvailable; - else - { - int rstart = 0, rend = 0; - sscanf(pos, "%d-%d", &rstart, &rend); - cpusAvailable += rend - rstart + 1; - } - - } - return cpusAvailable ? cpusAvailable : 1; -} -#endif - -int cv::getNumberOfCPUs(void) -{ -#if defined WIN32 || defined _WIN32 - SYSTEM_INFO sysinfo; -#if defined(_M_ARM) || defined(_M_X64) || defined(HAVE_WINRT) - GetNativeSystemInfo( &sysinfo ); -#else - GetSystemInfo( &sysinfo ); -#endif - - return (int)sysinfo.dwNumberOfProcessors; -#elif defined ANDROID - static int ncpus = getNumberOfCPUsImpl(); - return ncpus; -#elif defined __linux__ - return (int)sysconf( _SC_NPROCESSORS_ONLN ); -#elif defined __APPLE__ - int numCPU=0; - int mib[4]; - size_t len = sizeof(numCPU); - - /* set the mib for hw.ncpu */ - mib[0] = CTL_HW; - mib[1] = HW_AVAILCPU; // alternatively, try HW_NCPU; - - /* get the number of CPUs from the system */ - sysctl(mib, 2, &numCPU, &len, NULL, 0); - - if( numCPU < 1 ) - { - mib[1] = HW_NCPU; - sysctl( mib, 2, &numCPU, &len, NULL, 0 ); - - if( numCPU < 1 ) - numCPU = 1; - } - - return (int)numCPU; -#else - return 1; -#endif -} - -const char* cv::currentParallelFramework() { -#ifdef CV_PARALLEL_FRAMEWORK - return CV_PARALLEL_FRAMEWORK; -#else - return NULL; -#endif -} - -CV_IMPL void cvSetNumThreads(int nt) -{ - cv::setNumThreads(nt); -} - -CV_IMPL int cvGetNumThreads() -{ - return cv::getNumThreads(); -} - -CV_IMPL int cvGetThreadNum() -{ - return cv::getThreadNum(); -} diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp deleted file mode 100644 index 6847eec..0000000 --- a/modules/core/src/persistence.cpp +++ /dev/null @@ -1,5553 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#include -#include -#include -#include - -#define USE_ZLIB 1 - -#ifdef __APPLE__ -# include "TargetConditionals.h" -# if (defined TARGET_OS_IPHONE && TARGET_OS_IPHONE) || (defined TARGET_IPHONE_SIMULATOR && TARGET_IPHONE_SIMULATOR) -# undef USE_ZLIB -# define USE_ZLIB 0 - typedef void* gzFile; -# endif -#endif - -#if USE_ZLIB -# ifndef _LFS64_LARGEFILE -# define _LFS64_LARGEFILE 0 -# endif -# ifndef _FILE_OFFSET_BITS -# define _FILE_OFFSET_BITS 0 -# endif -# include -#endif - -/****************************************************************************************\ -* Common macros and type definitions * -\****************************************************************************************/ - -#define cv_isprint(c) ((uchar)(c) >= (uchar)' ') -#define cv_isprint_or_tab(c) ((uchar)(c) >= (uchar)' ' || (c) == '\t') - -static inline bool cv_isalnum(char c) -{ - return ('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); -} - -static inline bool cv_isalpha(char c) -{ - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); -} - -static inline bool cv_isdigit(char c) -{ - return '0' <= c && c <= '9'; -} - -static inline bool cv_isspace(char c) -{ - return (9 <= c && c <= 13) || c == ' '; -} - -static char* icv_itoa( int _val, char* buffer, int /*radix*/ ) -{ - const int radix = 10; - char* ptr=buffer + 23 /* enough even for 64-bit integers */; - unsigned val = abs(_val); - - *ptr = '\0'; - do - { - unsigned r = val / radix; - *--ptr = (char)(val - (r*radix) + '0'); - val = r; - } - while( val != 0 ); - - if( _val < 0 ) - *--ptr = '-'; - - return ptr; -} - -cv::string cv::FileStorage::getDefaultObjectName(const string& _filename) -{ - static const char* stubname = "unnamed"; - const char* filename = _filename.c_str(); - const char* ptr2 = filename + _filename.size(); - const char* ptr = ptr2 - 1; - cv::AutoBuffer name_buf(_filename.size()+1); - - while( ptr >= filename && *ptr != '\\' && *ptr != '/' && *ptr != ':' ) - { - if( *ptr == '.' && (!*ptr2 || strncmp(ptr2, ".gz", 3) == 0) ) - ptr2 = ptr; - ptr--; - } - ptr++; - if( ptr == ptr2 ) - CV_Error( CV_StsBadArg, "Invalid filename" ); - - char* name = name_buf; - - // name must start with letter or '_' - if( !cv_isalpha(*ptr) && *ptr!= '_' ){ - *name++ = '_'; - } - - while( ptr < ptr2 ) - { - char c = *ptr++; - if( !cv_isalnum(c) && c != '-' && c != '_' ) - c = '_'; - *name++ = c; - } - *name = '\0'; - name = name_buf; - if( strcmp( name, "_" ) == 0 ) - strcpy( name, stubname ); - return cv::string(name); -} - -namespace cv -{ -#if !defined(ANDROID) || (defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_WCHAR_T) -string fromUtf16(const WString& str) -{ - cv::AutoBuffer _buf(str.size()*4 + 1); - char* buf = _buf; - - size_t sz = wcstombs(buf, str.c_str(), str.size()); - if( sz == (size_t)-1 ) - return string(); - buf[sz] = '\0'; - return string(buf); -} - -WString toUtf16(const string& str) -{ - cv::AutoBuffer _buf(str.size() + 1); - wchar_t* buf = _buf; - - size_t sz = mbstowcs(buf, str.c_str(), str.size()); - if( sz == (size_t)-1 ) - return WString(); - buf[sz] = '\0'; - return WString(buf); -} -#endif -} - -typedef struct CvGenericHash -{ - CV_SET_FIELDS() - int tab_size; - void** table; -} -CvGenericHash; - -typedef CvGenericHash CvStringHash; - -typedef struct CvFileMapNode -{ - CvFileNode value; - const CvStringHashNode* key; - struct CvFileMapNode* next; -} -CvFileMapNode; - -typedef struct CvXMLStackRecord -{ - CvMemStoragePos pos; - CvString struct_tag; - int struct_indent; - int struct_flags; -} -CvXMLStackRecord; - -#define CV_XML_OPENING_TAG 1 -#define CV_XML_CLOSING_TAG 2 -#define CV_XML_EMPTY_TAG 3 -#define CV_XML_HEADER_TAG 4 -#define CV_XML_DIRECTIVE_TAG 5 - -//typedef void (*CvParse)( struct CvFileStorage* fs ); -typedef void (*CvStartWriteStruct)( struct CvFileStorage* fs, const char* key, - int struct_flags, const char* type_name ); -typedef void (*CvEndWriteStruct)( struct CvFileStorage* fs ); -typedef void (*CvWriteInt)( struct CvFileStorage* fs, const char* key, int value ); -typedef void (*CvWriteReal)( struct CvFileStorage* fs, const char* key, double value ); -typedef void (*CvWriteString)( struct CvFileStorage* fs, const char* key, - const char* value, int quote ); -typedef void (*CvWriteComment)( struct CvFileStorage* fs, const char* comment, int eol_comment ); -typedef void (*CvStartNextStream)( struct CvFileStorage* fs ); - -typedef struct CvFileStorage -{ - int flags; - int fmt; - int write_mode; - int is_first; - CvMemStorage* memstorage; - CvMemStorage* dststorage; - CvMemStorage* strstorage; - CvStringHash* str_hash; - CvSeq* roots; - CvSeq* write_stack; - int struct_indent; - int struct_flags; - CvString struct_tag; - int space; - char* filename; - FILE* file; - gzFile gzfile; - char* buffer; - char* buffer_start; - char* buffer_end; - int wrap_margin; - int lineno; - int dummy_eof; - const char* errmsg; - char errmsgbuf[128]; - - CvStartWriteStruct start_write_struct; - CvEndWriteStruct end_write_struct; - CvWriteInt write_int; - CvWriteReal write_real; - CvWriteString write_string; - CvWriteComment write_comment; - CvStartNextStream start_next_stream; - - const char* strbuf; - size_t strbufsize, strbufpos; - std::deque* outbuf; - - bool is_opened; -} -CvFileStorage; - -static void icvPuts( CvFileStorage* fs, const char* str ) -{ - if( fs->outbuf ) - std::copy(str, str + strlen(str), std::back_inserter(*fs->outbuf)); - else if( fs->file ) - fputs( str, fs->file ); -#if USE_ZLIB - else if( fs->gzfile ) - gzputs( fs->gzfile, str ); -#endif - else - CV_Error( CV_StsError, "The storage is not opened" ); -} - -static char* icvGets( CvFileStorage* fs, char* str, int maxCount ) -{ - if( fs->strbuf ) - { - size_t i = fs->strbufpos, len = fs->strbufsize; - int j = 0; - const char* instr = fs->strbuf; - while( i < len && j < maxCount-1 ) - { - char c = instr[i++]; - if( c == '\0' ) - break; - str[j++] = c; - if( c == '\n' ) - break; - } - str[j++] = '\0'; - fs->strbufpos = i; - return j > 1 ? str : 0; - } - if( fs->file ) - return fgets( str, maxCount, fs->file ); -#if USE_ZLIB - if( fs->gzfile ) - return gzgets( fs->gzfile, str, maxCount ); -#endif - CV_Error( CV_StsError, "The storage is not opened" ); - return 0; -} - -static int icvEof( CvFileStorage* fs ) -{ - if( fs->strbuf ) - return fs->strbufpos >= fs->strbufsize; - if( fs->file ) - return feof(fs->file); -#if USE_ZLIB - if( fs->gzfile ) - return gzeof(fs->gzfile); -#endif - return false; -} - -static void icvCloseFile( CvFileStorage* fs ) -{ - if( fs->file ) - fclose( fs->file ); -#if USE_ZLIB - else if( fs->gzfile ) - gzclose( fs->gzfile ); -#endif - fs->file = 0; - fs->gzfile = 0; - fs->strbuf = 0; - fs->strbufpos = 0; - fs->is_opened = false; -} - -static void icvRewind( CvFileStorage* fs ) -{ - if( fs->file ) - rewind(fs->file); -#if USE_ZLIB - else if( fs->gzfile ) - gzrewind(fs->gzfile); -#endif - fs->strbufpos = 0; -} - -#define CV_YML_INDENT 3 -#define CV_XML_INDENT 2 -#define CV_YML_INDENT_FLOW 1 -#define CV_FS_MAX_LEN 4096 - -#define CV_FILE_STORAGE ('Y' + ('A' << 8) + ('M' << 16) + ('L' << 24)) -#define CV_IS_FILE_STORAGE(fs) ((fs) != 0 && (fs)->flags == CV_FILE_STORAGE) - -#define CV_CHECK_FILE_STORAGE(fs) \ -{ \ - if( !CV_IS_FILE_STORAGE(fs) ) \ - CV_Error( (fs) ? CV_StsBadArg : CV_StsNullPtr, \ - "Invalid pointer to file storage" ); \ -} - -#define CV_CHECK_OUTPUT_FILE_STORAGE(fs) \ -{ \ - CV_CHECK_FILE_STORAGE(fs); \ - if( !fs->write_mode ) \ - CV_Error( CV_StsError, "The file storage is opened for reading" ); \ -} - -CV_IMPL const char* -cvAttrValue( const CvAttrList* attr, const char* attr_name ) -{ - while( attr && attr->attr ) - { - int i; - for( i = 0; attr->attr[i*2] != 0; i++ ) - { - if( strcmp( attr_name, attr->attr[i*2] ) == 0 ) - return attr->attr[i*2+1]; - } - attr = attr->next; - } - - return 0; -} - - -static CvGenericHash* -cvCreateMap( int flags, int header_size, int elem_size, - CvMemStorage* storage, int start_tab_size ) -{ - if( header_size < (int)sizeof(CvGenericHash) ) - CV_Error( CV_StsBadSize, "Too small map header_size" ); - - if( start_tab_size <= 0 ) - start_tab_size = 16; - - CvGenericHash* map = (CvGenericHash*)cvCreateSet( flags, header_size, elem_size, storage ); - - map->tab_size = start_tab_size; - start_tab_size *= sizeof(map->table[0]); - map->table = (void**)cvMemStorageAlloc( storage, start_tab_size ); - memset( map->table, 0, start_tab_size ); - - return map; -} - -#define CV_PARSE_ERROR( errmsg ) \ - icvParseError( fs, CV_Func, (errmsg), __FILE__, __LINE__ ) - -static void -icvParseError( CvFileStorage* fs, const char* func_name, - const char* err_msg, const char* source_file, int source_line ) -{ - char buf[1<<10]; - sprintf( buf, "%s(%d): %s", fs->filename, fs->lineno, err_msg ); - cvError( CV_StsParseError, func_name, buf, source_file, source_line ); -} - - -static void -icvFSCreateCollection( CvFileStorage* fs, int tag, CvFileNode* collection ) -{ - if( CV_NODE_IS_MAP(tag) ) - { - if( collection->tag != CV_NODE_NONE ) - { - assert( fs->fmt == CV_STORAGE_FORMAT_XML ); - CV_PARSE_ERROR( "Sequence element should not have name (use <_>)" ); - } - - collection->data.map = cvCreateMap( 0, sizeof(CvFileNodeHash), - sizeof(CvFileMapNode), fs->memstorage, 16 ); - } - else - { - CvSeq* seq; - seq = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvFileNode), fs->memstorage ); - - // if contains some scalar element, add it to the newly created collection - if( CV_NODE_TYPE(collection->tag) != CV_NODE_NONE ) - cvSeqPush( seq, collection ); - - collection->data.seq = seq; - } - - collection->tag = tag; - cvSetSeqBlockSize( collection->data.seq, 8 ); -} - - -/*static void -icvFSReleaseCollection( CvSeq* seq ) -{ - if( seq ) - { - int is_map = CV_IS_SET(seq); - CvSeqReader reader; - int i, total = seq->total; - cvStartReadSeq( seq, &reader, 0 ); - - for( i = 0; i < total; i++ ) - { - CvFileNode* node = (CvFileNode*)reader.ptr; - - if( (!is_map || CV_IS_SET_ELEM( node )) && CV_NODE_IS_COLLECTION(node->tag) ) - { - if( CV_NODE_IS_USER(node->tag) && node->info && node->data.obj.decoded ) - cvRelease( (void**)&node->data.obj.decoded ); - if( !CV_NODE_SEQ_IS_SIMPLE( node->data.seq )) - icvFSReleaseCollection( node->data.seq ); - } - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - } -}*/ - - -static char* -icvFSDoResize( CvFileStorage* fs, char* ptr, int len ) -{ - char* new_ptr = 0; - int written_len = (int)(ptr - fs->buffer_start); - int new_size = (int)((fs->buffer_end - fs->buffer_start)*3/2); - new_size = MAX( written_len + len, new_size ); - new_ptr = (char*)cvAlloc( new_size + 256 ); - fs->buffer = new_ptr + (fs->buffer - fs->buffer_start); - if( written_len > 0 ) - memcpy( new_ptr, fs->buffer_start, written_len ); - fs->buffer_start = new_ptr; - fs->buffer_end = fs->buffer_start + new_size; - new_ptr += written_len; - return new_ptr; -} - - -inline char* icvFSResizeWriteBuffer( CvFileStorage* fs, char* ptr, int len ) -{ - return ptr + len < fs->buffer_end ? ptr : icvFSDoResize( fs, ptr, len ); -} - - -static char* -icvFSFlush( CvFileStorage* fs ) -{ - char* ptr = fs->buffer; - int indent; - - if( ptr > fs->buffer_start + fs->space ) - { - ptr[0] = '\n'; - ptr[1] = '\0'; - icvPuts( fs, fs->buffer_start ); - fs->buffer = fs->buffer_start; - } - - indent = fs->struct_indent; - - if( fs->space != indent ) - { - if( fs->space < indent ) - memset( fs->buffer_start + fs->space, ' ', indent - fs->space ); - fs->space = indent; - } - - ptr = fs->buffer = fs->buffer_start + fs->space; - - return ptr; -} - - -static void -icvClose( CvFileStorage* fs, std::string* out ) -{ - if( out ) - out->clear(); - - if( !fs ) - CV_Error( CV_StsNullPtr, "NULL double pointer to file storage" ); - - if( fs->is_opened ) - { - if( fs->write_mode && (fs->file || fs->gzfile || fs->outbuf) ) - { - if( fs->write_stack ) - { - while( fs->write_stack->total > 0 ) - cvEndWriteStruct(fs); - } - icvFSFlush(fs); - if( fs->fmt == CV_STORAGE_FORMAT_XML ) - icvPuts( fs, "\n" ); - } - - icvCloseFile(fs); - } - - if( fs->outbuf && out ) - { - out->resize(fs->outbuf->size()); - std::copy(fs->outbuf->begin(), fs->outbuf->end(), out->begin()); - } -} - - -/* closes file storage and deallocates buffers */ -CV_IMPL void -cvReleaseFileStorage( CvFileStorage** p_fs ) -{ - if( !p_fs ) - CV_Error( CV_StsNullPtr, "NULL double pointer to file storage" ); - - if( *p_fs ) - { - CvFileStorage* fs = *p_fs; - *p_fs = 0; - - icvClose(fs, 0); - - cvReleaseMemStorage( &fs->strstorage ); - cvFree( &fs->buffer_start ); - cvReleaseMemStorage( &fs->memstorage ); - - if( fs->outbuf ) - delete fs->outbuf; - - memset( fs, 0, sizeof(*fs) ); - cvFree( &fs ); - } -} - - -#define CV_HASHVAL_SCALE 33 - -CV_IMPL CvStringHashNode* -cvGetHashedKey( CvFileStorage* fs, const char* str, int len, int create_missing ) -{ - CvStringHashNode* node = 0; - unsigned hashval = 0; - int i, tab_size; - - if( !fs ) - return 0; - - CvStringHash* map = fs->str_hash; - - if( len < 0 ) - { - for( i = 0; str[i] != '\0'; i++ ) - hashval = hashval*CV_HASHVAL_SCALE + (unsigned char)str[i]; - len = i; - } - else for( i = 0; i < len; i++ ) - hashval = hashval*CV_HASHVAL_SCALE + (unsigned char)str[i]; - - hashval &= INT_MAX; - tab_size = map->tab_size; - if( (tab_size & (tab_size - 1)) == 0 ) - i = (int)(hashval & (tab_size - 1)); - else - i = (int)(hashval % tab_size); - - for( node = (CvStringHashNode*)(map->table[i]); node != 0; node = node->next ) - { - if( node->hashval == hashval && - node->str.len == len && - memcmp( node->str.ptr, str, len ) == 0 ) - break; - } - - if( !node && create_missing ) - { - node = (CvStringHashNode*)cvSetNew( (CvSet*)map ); - node->hashval = hashval; - node->str = cvMemStorageAllocString( map->storage, str, len ); - node->next = (CvStringHashNode*)(map->table[i]); - map->table[i] = node; - } - - return node; -} - - -CV_IMPL CvFileNode* -cvGetFileNode( CvFileStorage* fs, CvFileNode* _map_node, - const CvStringHashNode* key, - int create_missing ) -{ - CvFileNode* value = 0; - int k = 0, attempts = 1; - - if( !fs ) - return 0; - - CV_CHECK_FILE_STORAGE(fs); - - if( !key ) - CV_Error( CV_StsNullPtr, "Null key element" ); - - if( _map_node ) - { - if( !fs->roots ) - return 0; - attempts = fs->roots->total; - } - - for( k = 0; k < attempts; k++ ) - { - int i, tab_size; - CvFileNode* map_node = _map_node; - CvFileMapNode* another; - CvFileNodeHash* map; - - if( !map_node ) - map_node = (CvFileNode*)cvGetSeqElem( fs->roots, k ); - - if( !CV_NODE_IS_MAP(map_node->tag) ) - { - if( (!CV_NODE_IS_SEQ(map_node->tag) || map_node->data.seq->total != 0) && - CV_NODE_TYPE(map_node->tag) != CV_NODE_NONE ) - CV_Error( CV_StsError, "The node is neither a map nor an empty collection" ); - return 0; - } - - map = map_node->data.map; - tab_size = map->tab_size; - - if( (tab_size & (tab_size - 1)) == 0 ) - i = (int)(key->hashval & (tab_size - 1)); - else - i = (int)(key->hashval % tab_size); - - for( another = (CvFileMapNode*)(map->table[i]); another != 0; another = another->next ) - if( another->key == key ) - { - if( !create_missing ) - { - value = &another->value; - return value; - } - CV_PARSE_ERROR( "Duplicated key" ); - } - - if( k == attempts - 1 && create_missing ) - { - CvFileMapNode* node = (CvFileMapNode*)cvSetNew( (CvSet*)map ); - node->key = key; - - node->next = (CvFileMapNode*)(map->table[i]); - map->table[i] = node; - value = (CvFileNode*)node; - } - } - - return value; -} - - -CV_IMPL CvFileNode* -cvGetFileNodeByName( const CvFileStorage* fs, const CvFileNode* _map_node, const char* str ) -{ - CvFileNode* value = 0; - int i, len, tab_size; - unsigned hashval = 0; - int k = 0, attempts = 1; - - if( !fs ) - return 0; - - CV_CHECK_FILE_STORAGE(fs); - - if( !str ) - CV_Error( CV_StsNullPtr, "Null element name" ); - - for( i = 0; str[i] != '\0'; i++ ) - hashval = hashval*CV_HASHVAL_SCALE + (unsigned char)str[i]; - hashval &= INT_MAX; - len = i; - - if( !_map_node ) - { - if( !fs->roots ) - return 0; - attempts = fs->roots->total; - } - - for( k = 0; k < attempts; k++ ) - { - CvFileNodeHash* map; - const CvFileNode* map_node = _map_node; - CvFileMapNode* another; - - if( !map_node ) - map_node = (CvFileNode*)cvGetSeqElem( fs->roots, k ); - - if( !CV_NODE_IS_MAP(map_node->tag) ) - { - if( (!CV_NODE_IS_SEQ(map_node->tag) || map_node->data.seq->total != 0) && - CV_NODE_TYPE(map_node->tag) != CV_NODE_NONE ) - CV_Error( CV_StsError, "The node is neither a map nor an empty collection" ); - return 0; - } - - map = map_node->data.map; - tab_size = map->tab_size; - - if( (tab_size & (tab_size - 1)) == 0 ) - i = (int)(hashval & (tab_size - 1)); - else - i = (int)(hashval % tab_size); - - for( another = (CvFileMapNode*)(map->table[i]); another != 0; another = another->next ) - { - const CvStringHashNode* key = another->key; - - if( key->hashval == hashval && - key->str.len == len && - memcmp( key->str.ptr, str, len ) == 0 ) - { - value = &another->value; - return value; - } - } - } - - return value; -} - - -CV_IMPL CvFileNode* -cvGetRootFileNode( const CvFileStorage* fs, int stream_index ) -{ - CV_CHECK_FILE_STORAGE(fs); - - if( !fs->roots || (unsigned)stream_index >= (unsigned)fs->roots->total ) - return 0; - - return (CvFileNode*)cvGetSeqElem( fs->roots, stream_index ); -} - - -/* returns the sequence element by its index */ -/*CV_IMPL CvFileNode* -cvGetFileNodeFromSeq( CvFileStorage* fs, - CvFileNode* seq_node, int index ) -{ - CvFileNode* value = 0; - CvSeq* seq; - - if( !seq_node ) - seq = fs->roots; - else if( !CV_NODE_IS_SEQ(seq_node->tag) ) - { - if( CV_NODE_IS_MAP(seq_node->tag) ) - CV_Error( CV_StsError, "The node is map. Use cvGetFileNodeFromMap()." ); - if( CV_NODE_TYPE(seq_node->tag) == CV_NODE_NONE ) - CV_Error( CV_StsError, "The node is an empty object (None)." ); - if( index != 0 && index != -1 ) - CV_Error( CV_StsOutOfRange, "" ); - value = seq_node; - EXIT; - } - else - seq = seq_node->data.seq; - - if( !seq ) - CV_Error( CV_StsNullPtr, "The file storage is empty" ); - - value = (CvFileNode*)cvGetSeqElem( seq, index, 0 ); - - - - return value; -}*/ - - -static char* -icvDoubleToString( char* buf, double value ) -{ - Cv64suf val; - unsigned ieee754_hi; - - val.f = value; - ieee754_hi = (unsigned)(val.u >> 32); - - if( (ieee754_hi & 0x7ff00000) != 0x7ff00000 ) - { - int ivalue = cvRound(value); - if( ivalue == value ) - sprintf( buf, "%d.", ivalue ); - else - { - static const char* fmt = "%.16e"; - char* ptr = buf; - sprintf( buf, fmt, value ); - if( *ptr == '+' || *ptr == '-' ) - ptr++; - for( ; cv_isdigit(*ptr); ptr++ ) - ; - if( *ptr == ',' ) - *ptr = '.'; - } - } - else - { - unsigned ieee754_lo = (unsigned)val.u; - if( (ieee754_hi & 0x7fffffff) + (ieee754_lo != 0) > 0x7ff00000 ) - strcpy( buf, ".Nan" ); - else - strcpy( buf, (int)ieee754_hi < 0 ? "-.Inf" : ".Inf" ); - } - - return buf; -} - - -static char* -icvFloatToString( char* buf, float value ) -{ - Cv32suf val; - unsigned ieee754; - val.f = value; - ieee754 = val.u; - - if( (ieee754 & 0x7f800000) != 0x7f800000 ) - { - int ivalue = cvRound(value); - if( ivalue == value ) - sprintf( buf, "%d.", ivalue ); - else - { - static const char* fmt = "%.8e"; - char* ptr = buf; - sprintf( buf, fmt, value ); - if( *ptr == '+' || *ptr == '-' ) - ptr++; - for( ; cv_isdigit(*ptr); ptr++ ) - ; - if( *ptr == ',' ) - *ptr = '.'; - } - } - else - { - if( (ieee754 & 0x7fffffff) != 0x7f800000 ) - strcpy( buf, ".Nan" ); - else - strcpy( buf, (int)ieee754 < 0 ? "-.Inf" : ".Inf" ); - } - - return buf; -} - - -static void -icvProcessSpecialDouble( CvFileStorage* fs, char* buf, double* value, char** endptr ) -{ - char c = buf[0]; - int inf_hi = 0x7ff00000; - - if( c == '-' || c == '+' ) - { - inf_hi = c == '-' ? 0xfff00000 : 0x7ff00000; - c = *++buf; - } - - if( c != '.' ) - CV_PARSE_ERROR( "Bad format of floating-point constant" ); - - union{double d; uint64 i;} v; - v.d = 0.; - if( toupper(buf[1]) == 'I' && toupper(buf[2]) == 'N' && toupper(buf[3]) == 'F' ) - v.i = (uint64)inf_hi << 32; - else if( toupper(buf[1]) == 'N' && toupper(buf[2]) == 'A' && toupper(buf[3]) == 'N' ) - v.i = (uint64)-1; - else - CV_PARSE_ERROR( "Bad format of floating-point constant" ); - *value = v.d; - - *endptr = buf + 4; -} - - -static double icv_strtod( CvFileStorage* fs, char* ptr, char** endptr ) -{ - double fval = strtod( ptr, endptr ); - if( **endptr == '.' ) - { - char* dot_pos = *endptr; - *dot_pos = ','; - double fval2 = strtod( ptr, endptr ); - *dot_pos = '.'; - if( *endptr > dot_pos ) - fval = fval2; - else - *endptr = dot_pos; - } - - if( *endptr == ptr || cv_isalpha(**endptr) ) - icvProcessSpecialDouble( fs, ptr, &fval, endptr ); - - return fval; -} - - -/****************************************************************************************\ -* YAML Parser * -\****************************************************************************************/ - -static char* -icvYMLSkipSpaces( CvFileStorage* fs, char* ptr, int min_indent, int max_comment_indent ) -{ - for(;;) - { - while( *ptr == ' ' ) - ptr++; - if( *ptr == '#' ) - { - if( ptr - fs->buffer_start > max_comment_indent ) - return ptr; - *ptr = '\0'; - } - else if( cv_isprint(*ptr) ) - { - if( ptr - fs->buffer_start < min_indent ) - CV_PARSE_ERROR( "Incorrect indentation" ); - break; - } - else if( *ptr == '\0' || *ptr == '\n' || *ptr == '\r' ) - { - int max_size = (int)(fs->buffer_end - fs->buffer_start); - ptr = icvGets( fs, fs->buffer_start, max_size ); - if( !ptr ) - { - // emulate end of stream - ptr = fs->buffer_start; - ptr[0] = ptr[1] = ptr[2] = '.'; - ptr[3] = '\0'; - fs->dummy_eof = 1; - break; - } - else - { - int l = (int)strlen(ptr); - if( ptr[l-1] != '\n' && ptr[l-1] != '\r' && !icvEof(fs) ) - CV_PARSE_ERROR( "Too long string or a last string w/o newline" ); - } - - fs->lineno++; - } - else - CV_PARSE_ERROR( *ptr == '\t' ? "Tabs are prohibited in YAML!" : "Invalid character" ); - } - - return ptr; -} - - -static char* -icvYMLParseKey( CvFileStorage* fs, char* ptr, - CvFileNode* map_node, CvFileNode** value_placeholder ) -{ - char c; - char *endptr = ptr - 1, *saveptr; - CvStringHashNode* str_hash_node; - - if( *ptr == '-' ) - CV_PARSE_ERROR( "Key may not start with \'-\'" ); - - do c = *++endptr; - while( cv_isprint(c) && c != ':' ); - - if( c != ':' ) - CV_PARSE_ERROR( "Missing \':\'" ); - - saveptr = endptr + 1; - do c = *--endptr; - while( c == ' ' ); - - ++endptr; - if( endptr == ptr ) - CV_PARSE_ERROR( "An empty key" ); - - str_hash_node = cvGetHashedKey( fs, ptr, (int)(endptr - ptr), 1 ); - *value_placeholder = cvGetFileNode( fs, map_node, str_hash_node, 1 ); - ptr = saveptr; - - return ptr; -} - - -static char* -icvYMLParseValue( CvFileStorage* fs, char* ptr, CvFileNode* node, - int parent_flags, int min_indent ) -{ - char buf[CV_FS_MAX_LEN + 1024]; - char* endptr = 0; - char c = ptr[0], d = ptr[1]; - int is_parent_flow = CV_NODE_IS_FLOW(parent_flags); - int value_type = CV_NODE_NONE; - int len; - - memset( node, 0, sizeof(*node) ); - - if( c == '!' ) // handle explicit type specification - { - if( d == '!' || d == '^' ) - { - ptr++; - value_type |= CV_NODE_USER; - } - - endptr = ptr++; - do d = *++endptr; - while( cv_isprint(d) && d != ' ' ); - len = (int)(endptr - ptr); - if( len == 0 ) - CV_PARSE_ERROR( "Empty type name" ); - d = *endptr; - *endptr = '\0'; - - if( len == 3 && !CV_NODE_IS_USER(value_type) ) - { - if( memcmp( ptr, "str", 3 ) == 0 ) - value_type = CV_NODE_STRING; - else if( memcmp( ptr, "int", 3 ) == 0 ) - value_type = CV_NODE_INT; - else if( memcmp( ptr, "seq", 3 ) == 0 ) - value_type = CV_NODE_SEQ; - else if( memcmp( ptr, "map", 3 ) == 0 ) - value_type = CV_NODE_MAP; - } - else if( len == 5 && !CV_NODE_IS_USER(value_type) ) - { - if( memcmp( ptr, "float", 5 ) == 0 ) - value_type = CV_NODE_REAL; - } - else if( CV_NODE_IS_USER(value_type) ) - { - node->info = cvFindType( ptr ); - if( !node->info ) - node->tag &= ~CV_NODE_USER; - } - - *endptr = d; - ptr = icvYMLSkipSpaces( fs, endptr, min_indent, INT_MAX ); - - c = *ptr; - - if( !CV_NODE_IS_USER(value_type) ) - { - if( value_type == CV_NODE_STRING && c != '\'' && c != '\"' ) - goto force_string; - if( value_type == CV_NODE_INT ) - goto force_int; - if( value_type == CV_NODE_REAL ) - goto force_real; - } - } - - if( cv_isdigit(c) || - ((c == '-' || c == '+') && (cv_isdigit(d) || d == '.')) || - (c == '.' && cv_isalnum(d))) // a number - { - double fval; - int ival; - endptr = ptr + (c == '-' || c == '+'); - while( cv_isdigit(*endptr) ) - endptr++; - if( *endptr == '.' || *endptr == 'e' ) - { -force_real: - fval = icv_strtod( fs, ptr, &endptr ); - /*if( endptr == ptr || cv_isalpha(*endptr) ) - icvProcessSpecialDouble( fs, endptr, &fval, &endptr ));*/ - - node->tag = CV_NODE_REAL; - node->data.f = fval; - } - else - { -force_int: - ival = (int)strtol( ptr, &endptr, 0 ); - node->tag = CV_NODE_INT; - node->data.i = ival; - } - - if( !endptr || endptr == ptr ) - CV_PARSE_ERROR( "Invalid numeric value (inconsistent explicit type specification?)" ); - - ptr = endptr; - } - else if( c == '\'' || c == '\"' ) // an explicit string - { - node->tag = CV_NODE_STRING; - if( c == '\'' ) - for( len = 0; len < CV_FS_MAX_LEN; ) - { - c = *++ptr; - if( cv_isalnum(c) || (c != '\'' && cv_isprint(c))) - buf[len++] = c; - else if( c == '\'' ) - { - c = *++ptr; - if( c != '\'' ) - break; - buf[len++] = c; - } - else - CV_PARSE_ERROR( "Invalid character" ); - } - else - for( len = 0; len < CV_FS_MAX_LEN; ) - { - c = *++ptr; - if( cv_isalnum(c) || (c != '\\' && c != '\"' && cv_isprint(c))) - buf[len++] = c; - else if( c == '\"' ) - { - ++ptr; - break; - } - else if( c == '\\' ) - { - d = *++ptr; - if( d == '\'' ) - buf[len++] = d; - else if( d == '\"' || d == '\\' || d == '\'' ) - buf[len++] = d; - else if( d == 'n' ) - buf[len++] = '\n'; - else if( d == 'r' ) - buf[len++] = '\r'; - else if( d == 't' ) - buf[len++] = '\t'; - else if( d == 'x' || (cv_isdigit(d) && d < '8') ) - { - int val, is_hex = d == 'x'; - c = ptr[3]; - ptr[3] = '\0'; - val = strtol( ptr + is_hex, &endptr, is_hex ? 8 : 16 ); - ptr[3] = c; - if( endptr == ptr + is_hex ) - buf[len++] = 'x'; - else - { - buf[len++] = (char)val; - ptr = endptr; - } - } - } - else - CV_PARSE_ERROR( "Invalid character" ); - } - - if( len >= CV_FS_MAX_LEN ) - CV_PARSE_ERROR( "Too long string literal" ); - - node->data.str = cvMemStorageAllocString( fs->memstorage, buf, len ); - } - else if( c == '[' || c == '{' ) // collection as a flow - { - int new_min_indent = min_indent + !is_parent_flow; - int struct_flags = CV_NODE_FLOW + (c == '{' ? CV_NODE_MAP : CV_NODE_SEQ); - int is_simple = 1; - - icvFSCreateCollection( fs, CV_NODE_TYPE(struct_flags) + - (node->info ? CV_NODE_USER : 0), node ); - - d = c == '[' ? ']' : '}'; - - for( ++ptr ;;) - { - CvFileNode* elem = 0; - - ptr = icvYMLSkipSpaces( fs, ptr, new_min_indent, INT_MAX ); - if( *ptr == '}' || *ptr == ']' ) - { - if( *ptr != d ) - CV_PARSE_ERROR( "The wrong closing bracket" ); - ptr++; - break; - } - - if( node->data.seq->total != 0 ) - { - if( *ptr != ',' ) - CV_PARSE_ERROR( "Missing , between the elements" ); - ptr = icvYMLSkipSpaces( fs, ptr + 1, new_min_indent, INT_MAX ); - } - - if( CV_NODE_IS_MAP(struct_flags) ) - { - ptr = icvYMLParseKey( fs, ptr, node, &elem ); - ptr = icvYMLSkipSpaces( fs, ptr, new_min_indent, INT_MAX ); - } - else - { - if( *ptr == ']' ) - break; - elem = (CvFileNode*)cvSeqPush( node->data.seq, 0 ); - } - ptr = icvYMLParseValue( fs, ptr, elem, struct_flags, new_min_indent ); - if( CV_NODE_IS_MAP(struct_flags) ) - elem->tag |= CV_NODE_NAMED; - is_simple &= !CV_NODE_IS_COLLECTION(elem->tag); - } - node->data.seq->flags |= is_simple ? CV_NODE_SEQ_SIMPLE : 0; - } - else - { - int indent, struct_flags, is_simple; - - if( is_parent_flow || c != '-' ) - { - // implicit (one-line) string or nested block-style collection - if( !is_parent_flow ) - { - if( c == '?' ) - CV_PARSE_ERROR( "Complex keys are not supported" ); - if( c == '|' || c == '>' ) - CV_PARSE_ERROR( "Multi-line text literals are not supported" ); - } - -force_string: - endptr = ptr - 1; - - do c = *++endptr; - while( cv_isprint(c) && - (!is_parent_flow || (c != ',' && c != '}' && c != ']')) && - (is_parent_flow || c != ':' || value_type == CV_NODE_STRING)); - - if( endptr == ptr ) - CV_PARSE_ERROR( "Invalid character" ); - - if( is_parent_flow || c != ':' ) - { - char* str_end = endptr; - node->tag = CV_NODE_STRING; - // strip spaces in the end of string - do c = *--str_end; - while( str_end > ptr && c == ' ' ); - str_end++; - node->data.str = cvMemStorageAllocString( fs->memstorage, ptr, (int)(str_end - ptr) ); - ptr = endptr; - return ptr; - } - struct_flags = CV_NODE_MAP; - } - else - struct_flags = CV_NODE_SEQ; - - icvFSCreateCollection( fs, struct_flags + - (node->info ? CV_NODE_USER : 0), node ); - - indent = (int)(ptr - fs->buffer_start); - is_simple = 1; - - for(;;) - { - CvFileNode* elem = 0; - - if( CV_NODE_IS_MAP(struct_flags) ) - { - ptr = icvYMLParseKey( fs, ptr, node, &elem ); - } - else - { - c = *ptr++; - if( c != '-' ) - CV_PARSE_ERROR( "Block sequence elements must be preceded with \'-\'" ); - - elem = (CvFileNode*)cvSeqPush( node->data.seq, 0 ); - } - - ptr = icvYMLSkipSpaces( fs, ptr, indent + 1, INT_MAX ); - ptr = icvYMLParseValue( fs, ptr, elem, struct_flags, indent + 1 ); - if( CV_NODE_IS_MAP(struct_flags) ) - elem->tag |= CV_NODE_NAMED; - is_simple &= !CV_NODE_IS_COLLECTION(elem->tag); - - ptr = icvYMLSkipSpaces( fs, ptr, 0, INT_MAX ); - if( ptr - fs->buffer_start != indent ) - { - if( ptr - fs->buffer_start < indent ) - break; - else - CV_PARSE_ERROR( "Incorrect indentation" ); - } - if( memcmp( ptr, "...", 3 ) == 0 ) - break; - } - - node->data.seq->flags |= is_simple ? CV_NODE_SEQ_SIMPLE : 0; - } - - return ptr; -} - - -static void -icvYMLParse( CvFileStorage* fs ) -{ - char* ptr = fs->buffer_start; - int is_first = 1; - - for(;;) - { - // 0. skip leading comments and directives and ... - // 1. reach the first item - for(;;) - { - ptr = icvYMLSkipSpaces( fs, ptr, 0, INT_MAX ); - if( !ptr ) - return; - - if( *ptr == '%' ) - { - if( memcmp( ptr, "%YAML:", 6 ) == 0 && - memcmp( ptr, "%YAML:1.", 8 ) != 0 ) - CV_PARSE_ERROR( "Unsupported YAML version (it must be 1.x)" ); - *ptr = '\0'; - } - else if( *ptr == '-' ) - { - if( memcmp(ptr, "---", 3) == 0 ) - { - ptr += 3; - break; - } - else if( is_first ) - break; - } - else if( cv_isalnum(*ptr) || *ptr=='_') - { - if( !is_first ) - CV_PARSE_ERROR( "The YAML streams must start with '---', except the first one" ); - break; - } - else if( fs->dummy_eof ) - break; - else - CV_PARSE_ERROR( "Invalid or unsupported syntax" ); - } - - ptr = icvYMLSkipSpaces( fs, ptr, 0, INT_MAX ); - if( memcmp( ptr, "...", 3 ) != 0 ) - { - // 2. parse the collection - CvFileNode* root_node = (CvFileNode*)cvSeqPush( fs->roots, 0 ); - - ptr = icvYMLParseValue( fs, ptr, root_node, CV_NODE_NONE, 0 ); - if( !CV_NODE_IS_COLLECTION(root_node->tag) ) - CV_PARSE_ERROR( "Only collections as YAML streams are supported by this parser" ); - - // 3. parse until the end of file or next collection - ptr = icvYMLSkipSpaces( fs, ptr, 0, INT_MAX ); - if( !ptr ) - return; - } - - if( fs->dummy_eof ) - break; - ptr += 3; - is_first = 0; - } -} - - -/****************************************************************************************\ -* YAML Emitter * -\****************************************************************************************/ - -static void -icvYMLWrite( CvFileStorage* fs, const char* key, const char* data ) -{ - int i, keylen = 0; - int datalen = 0; - int struct_flags; - char* ptr; - - struct_flags = fs->struct_flags; - - if( key && key[0] == '\0' ) - key = 0; - - if( CV_NODE_IS_COLLECTION(struct_flags) ) - { - if( (CV_NODE_IS_MAP(struct_flags) ^ (key != 0)) ) - CV_Error( CV_StsBadArg, "An attempt to add element without a key to a map, " - "or add element with key to sequence" ); - } - else - { - fs->is_first = 0; - struct_flags = CV_NODE_EMPTY | (key ? CV_NODE_MAP : CV_NODE_SEQ); - } - - if( key ) - { - keylen = (int)strlen(key); - if( keylen == 0 ) - CV_Error( CV_StsBadArg, "The key is an empty" ); - - if( keylen > CV_FS_MAX_LEN ) - CV_Error( CV_StsBadArg, "The key is too long" ); - } - - if( data ) - datalen = (int)strlen(data); - - if( CV_NODE_IS_FLOW(struct_flags) ) - { - int new_offset; - ptr = fs->buffer; - if( !CV_NODE_IS_EMPTY(struct_flags) ) - *ptr++ = ','; - new_offset = (int)(ptr - fs->buffer_start) + keylen + datalen; - if( new_offset > fs->wrap_margin && new_offset - fs->struct_indent > 10 ) - { - fs->buffer = ptr; - ptr = icvFSFlush(fs); - } - else - *ptr++ = ' '; - } - else - { - ptr = icvFSFlush(fs); - if( !CV_NODE_IS_MAP(struct_flags) ) - { - *ptr++ = '-'; - if( data ) - *ptr++ = ' '; - } - } - - if( key ) - { - if( !cv_isalpha(key[0]) && key[0] != '_' ) - CV_Error( CV_StsBadArg, "Key must start with a letter or _" ); - - ptr = icvFSResizeWriteBuffer( fs, ptr, keylen ); - - for( i = 0; i < keylen; i++ ) - { - char c = key[i]; - - ptr[i] = c; - if( !cv_isalnum(c) && c != '-' && c != '_' && c != ' ' ) - CV_Error( CV_StsBadArg, "Key names may only contain alphanumeric characters [a-zA-Z0-9], '-', '_' and ' '" ); - } - - ptr += keylen; - *ptr++ = ':'; - if( !CV_NODE_IS_FLOW(struct_flags) && data ) - *ptr++ = ' '; - } - - if( data ) - { - ptr = icvFSResizeWriteBuffer( fs, ptr, datalen ); - memcpy( ptr, data, datalen ); - ptr += datalen; - } - - fs->buffer = ptr; - fs->struct_flags = struct_flags & ~CV_NODE_EMPTY; -} - - -static void -icvYMLStartWriteStruct( CvFileStorage* fs, const char* key, int struct_flags, - const char* type_name CV_DEFAULT(0)) -{ - int parent_flags; - char buf[CV_FS_MAX_LEN + 1024]; - const char* data = 0; - - struct_flags = (struct_flags & (CV_NODE_TYPE_MASK|CV_NODE_FLOW)) | CV_NODE_EMPTY; - if( !CV_NODE_IS_COLLECTION(struct_flags)) - CV_Error( CV_StsBadArg, - "Some collection type - CV_NODE_SEQ or CV_NODE_MAP, must be specified" ); - - if( CV_NODE_IS_FLOW(struct_flags) ) - { - char c = CV_NODE_IS_MAP(struct_flags) ? '{' : '['; - struct_flags |= CV_NODE_FLOW; - - if( type_name ) - sprintf( buf, "!!%s %c", type_name, c ); - else - { - buf[0] = c; - buf[1] = '\0'; - } - data = buf; - } - else if( type_name ) - { - sprintf( buf, "!!%s", type_name ); - data = buf; - } - - icvYMLWrite( fs, key, data ); - - parent_flags = fs->struct_flags; - cvSeqPush( fs->write_stack, &parent_flags ); - fs->struct_flags = struct_flags; - - if( !CV_NODE_IS_FLOW(parent_flags) ) - fs->struct_indent += CV_YML_INDENT + CV_NODE_IS_FLOW(struct_flags); -} - - -static void -icvYMLEndWriteStruct( CvFileStorage* fs ) -{ - int parent_flags = 0, struct_flags; - char* ptr; - - struct_flags = fs->struct_flags; - if( fs->write_stack->total == 0 ) - CV_Error( CV_StsError, "EndWriteStruct w/o matching StartWriteStruct" ); - - cvSeqPop( fs->write_stack, &parent_flags ); - - if( CV_NODE_IS_FLOW(struct_flags) ) - { - ptr = fs->buffer; - if( ptr > fs->buffer_start + fs->struct_indent && !CV_NODE_IS_EMPTY(struct_flags) ) - *ptr++ = ' '; - *ptr++ = CV_NODE_IS_MAP(struct_flags) ? '}' : ']'; - fs->buffer = ptr; - } - else if( CV_NODE_IS_EMPTY(struct_flags) ) - { - ptr = icvFSFlush(fs); - memcpy( ptr, CV_NODE_IS_MAP(struct_flags) ? "{}" : "[]", 2 ); - fs->buffer = ptr + 2; - } - - if( !CV_NODE_IS_FLOW(parent_flags) ) - fs->struct_indent -= CV_YML_INDENT + CV_NODE_IS_FLOW(struct_flags); - assert( fs->struct_indent >= 0 ); - - fs->struct_flags = parent_flags; -} - - -static void -icvYMLStartNextStream( CvFileStorage* fs ) -{ - if( !fs->is_first ) - { - while( fs->write_stack->total > 0 ) - icvYMLEndWriteStruct(fs); - - fs->struct_indent = 0; - icvFSFlush(fs); - icvPuts( fs, "...\n" ); - icvPuts( fs, "---\n" ); - fs->buffer = fs->buffer_start; - } -} - - -static void -icvYMLWriteInt( CvFileStorage* fs, const char* key, int value ) -{ - char buf[128]; - icvYMLWrite( fs, key, icv_itoa( value, buf, 10 )); -} - - -static void -icvYMLWriteReal( CvFileStorage* fs, const char* key, double value ) -{ - char buf[128]; - icvYMLWrite( fs, key, icvDoubleToString( buf, value )); -} - - -static void -icvYMLWriteString( CvFileStorage* fs, const char* key, - const char* str, int quote CV_DEFAULT(0)) -{ - char buf[CV_FS_MAX_LEN*4+16]; - char* data = (char*)str; - int i, len; - - if( !str ) - CV_Error( CV_StsNullPtr, "Null string pointer" ); - - len = (int)strlen(str); - if( len > CV_FS_MAX_LEN ) - CV_Error( CV_StsBadArg, "The written string is too long" ); - - if( quote || len == 0 || str[0] != str[len-1] || (str[0] != '\"' && str[0] != '\'') ) - { - int need_quote = quote || len == 0; - data = buf; - *data++ = '\"'; - for( i = 0; i < len; i++ ) - { - char c = str[i]; - - if( !need_quote && !cv_isalnum(c) && c != '_' && c != ' ' && c != '-' && - c != '(' && c != ')' && c != '/' && c != '+' && c != ';' ) - need_quote = 1; - - if( !cv_isalnum(c) && (!cv_isprint(c) || c == '\\' || c == '\'' || c == '\"') ) - { - *data++ = '\\'; - if( cv_isprint(c) ) - *data++ = c; - else if( c == '\n' ) - *data++ = 'n'; - else if( c == '\r' ) - *data++ = 'r'; - else if( c == '\t' ) - *data++ = 't'; - else - { - sprintf( data, "x%02x", c ); - data += 3; - } - } - else - *data++ = c; - } - if( !need_quote && (cv_isdigit(str[0]) || - str[0] == '+' || str[0] == '-' || str[0] == '.' )) - need_quote = 1; - - if( need_quote ) - *data++ = '\"'; - *data++ = '\0'; - data = buf + !need_quote; - } - - icvYMLWrite( fs, key, data ); -} - - -static void -icvYMLWriteComment( CvFileStorage* fs, const char* comment, int eol_comment ) -{ - int len; //, indent; - int multiline; - const char* eol; - char* ptr; - - if( !comment ) - CV_Error( CV_StsNullPtr, "Null comment" ); - - len = (int)strlen(comment); - eol = strchr(comment, '\n'); - multiline = eol != 0; - ptr = fs->buffer; - - if( !eol_comment || multiline || - fs->buffer_end - ptr < len || ptr == fs->buffer_start ) - ptr = icvFSFlush( fs ); - else - *ptr++ = ' '; - - while( comment ) - { - *ptr++ = '#'; - *ptr++ = ' '; - if( eol ) - { - ptr = icvFSResizeWriteBuffer( fs, ptr, (int)(eol - comment) + 1 ); - memcpy( ptr, comment, eol - comment + 1 ); - fs->buffer = ptr + (eol - comment); - comment = eol + 1; - eol = strchr( comment, '\n' ); - } - else - { - len = (int)strlen(comment); - ptr = icvFSResizeWriteBuffer( fs, ptr, len ); - memcpy( ptr, comment, len ); - fs->buffer = ptr + len; - comment = 0; - } - ptr = icvFSFlush( fs ); - } -} - - -/****************************************************************************************\ -* XML Parser * -\****************************************************************************************/ - -#define CV_XML_INSIDE_COMMENT 1 -#define CV_XML_INSIDE_TAG 2 -#define CV_XML_INSIDE_DIRECTIVE 3 - -static char* -icvXMLSkipSpaces( CvFileStorage* fs, char* ptr, int mode ) -{ - int level = 0; - - for(;;) - { - char c; - ptr--; - - if( mode == CV_XML_INSIDE_COMMENT ) - { - do c = *++ptr; - while( cv_isprint_or_tab(c) && (c != '-' || ptr[1] != '-' || ptr[2] != '>') ); - - if( c == '-' ) - { - assert( ptr[1] == '-' && ptr[2] == '>' ); - mode = 0; - ptr += 3; - } - } - else if( mode == CV_XML_INSIDE_DIRECTIVE ) - { - // !!!NOTE!!! This is not quite correct, but should work in most cases - do - { - c = *++ptr; - level += c == '<'; - level -= c == '>'; - if( level < 0 ) - return ptr; - } while( cv_isprint_or_tab(c) ); - } - else - { - do c = *++ptr; - while( c == ' ' || c == '\t' ); - - if( c == '<' && ptr[1] == '!' && ptr[2] == '-' && ptr[3] == '-' ) - { - if( mode != 0 ) - CV_PARSE_ERROR( "Comments are not allowed here" ); - mode = CV_XML_INSIDE_COMMENT; - ptr += 4; - } - else if( cv_isprint(c) ) - break; - } - - if( !cv_isprint(*ptr) ) - { - int max_size = (int)(fs->buffer_end - fs->buffer_start); - if( *ptr != '\0' && *ptr != '\n' && *ptr != '\r' ) - CV_PARSE_ERROR( "Invalid character in the stream" ); - ptr = icvGets( fs, fs->buffer_start, max_size ); - if( !ptr ) - { - ptr = fs->buffer_start; - *ptr = '\0'; - fs->dummy_eof = 1; - break; - } - else - { - int l = (int)strlen(ptr); - if( ptr[l-1] != '\n' && ptr[l-1] != '\r' && !icvEof(fs) ) - CV_PARSE_ERROR( "Too long string or a last string w/o newline" ); - } - fs->lineno++; - } - } - return ptr; -} - - -static char* -icvXMLParseTag( CvFileStorage* fs, char* ptr, CvStringHashNode** _tag, - CvAttrList** _list, int* _tag_type ); - -static char* -icvXMLParseValue( CvFileStorage* fs, char* ptr, CvFileNode* node, - int value_type CV_DEFAULT(CV_NODE_NONE)) -{ - CvFileNode *elem = node; - int have_space = 1, is_simple = 1; - int is_user_type = CV_NODE_IS_USER(value_type); - memset( node, 0, sizeof(*node) ); - - value_type = CV_NODE_TYPE(value_type); - - for(;;) - { - char c = *ptr, d; - char* endptr; - - if( cv_isspace(c) || c == '\0' || (c == '<' && ptr[1] == '!' && ptr[2] == '-') ) - { - ptr = icvXMLSkipSpaces( fs, ptr, 0 ); - have_space = 1; - c = *ptr; - } - - d = ptr[1]; - - if( c =='<' || c == '\0' ) - { - CvStringHashNode *key = 0, *key2 = 0; - CvAttrList* list = 0; - CvTypeInfo* info = 0; - int tag_type = 0; - int is_noname = 0; - const char* type_name = 0; - int elem_type = CV_NODE_NONE; - - if( d == '/' || c == '\0' ) - break; - - ptr = icvXMLParseTag( fs, ptr, &key, &list, &tag_type ); - - if( tag_type == CV_XML_DIRECTIVE_TAG ) - CV_PARSE_ERROR( "Directive tags are not allowed here" ); - if( tag_type == CV_XML_EMPTY_TAG ) - CV_PARSE_ERROR( "Empty tags are not supported" ); - - assert( tag_type == CV_XML_OPENING_TAG ); - - type_name = list ? cvAttrValue( list, "type_id" ) : 0; - if( type_name ) - { - if( strcmp( type_name, "str" ) == 0 ) - elem_type = CV_NODE_STRING; - else if( strcmp( type_name, "map" ) == 0 ) - elem_type = CV_NODE_MAP; - else if( strcmp( type_name, "seq" ) == 0 ) - elem_type = CV_NODE_SEQ; - else - { - info = cvFindType( type_name ); - if( info ) - elem_type = CV_NODE_USER; - } - } - - is_noname = key->str.len == 1 && key->str.ptr[0] == '_'; - if( !CV_NODE_IS_COLLECTION(node->tag) ) - { - icvFSCreateCollection( fs, is_noname ? CV_NODE_SEQ : CV_NODE_MAP, node ); - } - else if( is_noname ^ CV_NODE_IS_SEQ(node->tag) ) - CV_PARSE_ERROR( is_noname ? "Map element should have a name" : - "Sequence element should not have name (use <_>)" ); - - if( is_noname ) - elem = (CvFileNode*)cvSeqPush( node->data.seq, 0 ); - else - elem = cvGetFileNode( fs, node, key, 1 ); - - ptr = icvXMLParseValue( fs, ptr, elem, elem_type); - if( !is_noname ) - elem->tag |= CV_NODE_NAMED; - is_simple &= !CV_NODE_IS_COLLECTION(elem->tag); - elem->info = info; - ptr = icvXMLParseTag( fs, ptr, &key2, &list, &tag_type ); - if( tag_type != CV_XML_CLOSING_TAG || key2 != key ) - CV_PARSE_ERROR( "Mismatched closing tag" ); - have_space = 1; - } - else - { - if( !have_space ) - CV_PARSE_ERROR( "There should be space between literals" ); - - elem = node; - if( node->tag != CV_NODE_NONE ) - { - if( !CV_NODE_IS_COLLECTION(node->tag) ) - icvFSCreateCollection( fs, CV_NODE_SEQ, node ); - - elem = (CvFileNode*)cvSeqPush( node->data.seq, 0 ); - elem->info = 0; - } - - if( value_type != CV_NODE_STRING && - (cv_isdigit(c) || ((c == '-' || c == '+') && - (cv_isdigit(d) || d == '.')) || (c == '.' && cv_isalnum(d))) ) // a number - { - double fval; - int ival; - endptr = ptr + (c == '-' || c == '+'); - while( cv_isdigit(*endptr) ) - endptr++; - if( *endptr == '.' || *endptr == 'e' ) - { - fval = icv_strtod( fs, ptr, &endptr ); - /*if( endptr == ptr || cv_isalpha(*endptr) ) - icvProcessSpecialDouble( fs, ptr, &fval, &endptr ));*/ - elem->tag = CV_NODE_REAL; - elem->data.f = fval; - } - else - { - ival = (int)strtol( ptr, &endptr, 0 ); - elem->tag = CV_NODE_INT; - elem->data.i = ival; - } - - if( endptr == ptr ) - CV_PARSE_ERROR( "Invalid numeric value (inconsistent explicit type specification?)" ); - - ptr = endptr; - } - else - { - // string - char buf[CV_FS_MAX_LEN+16]; - int i = 0, len, is_quoted = 0; - elem->tag = CV_NODE_STRING; - if( c == '\"' ) - is_quoted = 1; - else - --ptr; - - for( ;; ) - { - c = *++ptr; - if( !cv_isalnum(c) ) - { - if( c == '\"' ) - { - if( !is_quoted ) - CV_PARSE_ERROR( "Literal \" is not allowed within a string. Use "" ); - ++ptr; - break; - } - else if( !cv_isprint(c) || c == '<' || (!is_quoted && cv_isspace(c))) - { - if( is_quoted ) - CV_PARSE_ERROR( "Closing \" is expected" ); - break; - } - else if( c == '\'' || c == '>' ) - { - CV_PARSE_ERROR( "Literal \' or > are not allowed. Use ' or >" ); - } - else if( c == '&' ) - { - if( *++ptr == '#' ) - { - int val, base = 10; - ptr++; - if( *ptr == 'x' ) - { - base = 16; - ptr++; - } - val = (int)strtol( ptr, &endptr, base ); - if( (unsigned)val > (unsigned)255 || - !endptr || *endptr != ';' ) - CV_PARSE_ERROR( "Invalid numeric value in the string" ); - c = (char)val; - } - else - { - endptr = ptr; - do c = *++endptr; - while( cv_isalnum(c) ); - if( c != ';' ) - CV_PARSE_ERROR( "Invalid character in the symbol entity name" ); - len = (int)(endptr - ptr); - if( len == 2 && memcmp( ptr, "lt", len ) == 0 ) - c = '<'; - else if( len == 2 && memcmp( ptr, "gt", len ) == 0 ) - c = '>'; - else if( len == 3 && memcmp( ptr, "amp", len ) == 0 ) - c = '&'; - else if( len == 4 && memcmp( ptr, "apos", len ) == 0 ) - c = '\''; - else if( len == 4 && memcmp( ptr, "quot", len ) == 0 ) - c = '\"'; - else - { - memcpy( buf + i, ptr-1, len + 2 ); - i += len + 2; - } - } - ptr = endptr; - } - } - buf[i++] = c; - if( i >= CV_FS_MAX_LEN ) - CV_PARSE_ERROR( "Too long string literal" ); - } - elem->data.str = cvMemStorageAllocString( fs->memstorage, buf, i ); - } - - if( !CV_NODE_IS_COLLECTION(value_type) && value_type != CV_NODE_NONE ) - break; - have_space = 0; - } - } - - if( (CV_NODE_TYPE(node->tag) == CV_NODE_NONE || - (CV_NODE_TYPE(node->tag) != value_type && - !CV_NODE_IS_COLLECTION(node->tag))) && - CV_NODE_IS_COLLECTION(value_type) ) - { - icvFSCreateCollection( fs, CV_NODE_IS_MAP(value_type) ? - CV_NODE_MAP : CV_NODE_SEQ, node ); - } - - if( value_type != CV_NODE_NONE && - value_type != CV_NODE_TYPE(node->tag) ) - CV_PARSE_ERROR( "The actual type is different from the specified type" ); - - if( CV_NODE_IS_COLLECTION(node->tag) && is_simple ) - node->data.seq->flags |= CV_NODE_SEQ_SIMPLE; - - node->tag |= is_user_type ? CV_NODE_USER : 0; - return ptr; -} - - -static char* -icvXMLParseTag( CvFileStorage* fs, char* ptr, CvStringHashNode** _tag, - CvAttrList** _list, int* _tag_type ) -{ - int tag_type = 0; - CvStringHashNode* tagname = 0; - CvAttrList *first = 0, *last = 0; - int count = 0, max_count = 4; - int attr_buf_size = (max_count*2 + 1)*sizeof(char*) + sizeof(CvAttrList); - char* endptr; - char c; - int have_space; - - if( *ptr == '\0' ) - CV_PARSE_ERROR( "Preliminary end of the stream" ); - - if( *ptr != '<' ) - CV_PARSE_ERROR( "Tag should start with \'<\'" ); - - ptr++; - if( cv_isalnum(*ptr) || *ptr == '_' ) - tag_type = CV_XML_OPENING_TAG; - else if( *ptr == '/' ) - { - tag_type = CV_XML_CLOSING_TAG; - ptr++; - } - else if( *ptr == '?' ) - { - tag_type = CV_XML_HEADER_TAG; - ptr++; - } - else if( *ptr == '!' ) - { - tag_type = CV_XML_DIRECTIVE_TAG; - assert( ptr[1] != '-' || ptr[2] != '-' ); - ptr++; - } - else - CV_PARSE_ERROR( "Unknown tag type" ); - - for(;;) - { - CvStringHashNode* attrname; - - if( !cv_isalpha(*ptr) && *ptr != '_' ) - CV_PARSE_ERROR( "Name should start with a letter or underscore" ); - - endptr = ptr - 1; - do c = *++endptr; - while( cv_isalnum(c) || c == '_' || c == '-' ); - - attrname = cvGetHashedKey( fs, ptr, (int)(endptr - ptr), 1 ); - ptr = endptr; - - if( !tagname ) - tagname = attrname; - else - { - if( tag_type == CV_XML_CLOSING_TAG ) - CV_PARSE_ERROR( "Closing tag should not contain any attributes" ); - - if( !last || count >= max_count ) - { - CvAttrList* chunk; - - chunk = (CvAttrList*)cvMemStorageAlloc( fs->memstorage, attr_buf_size ); - memset( chunk, 0, attr_buf_size ); - chunk->attr = (const char**)(chunk + 1); - count = 0; - if( !last ) - first = last = chunk; - else - last = last->next = chunk; - } - last->attr[count*2] = attrname->str.ptr; - } - - if( last ) - { - CvFileNode stub; - - if( *ptr != '=' ) - { - ptr = icvXMLSkipSpaces( fs, ptr, CV_XML_INSIDE_TAG ); - if( *ptr != '=' ) - CV_PARSE_ERROR( "Attribute name should be followed by \'=\'" ); - } - - c = *++ptr; - if( c != '\"' && c != '\'' ) - { - ptr = icvXMLSkipSpaces( fs, ptr, CV_XML_INSIDE_TAG ); - if( *ptr != '\"' && *ptr != '\'' ) - CV_PARSE_ERROR( "Attribute value should be put into single or double quotes" ); - } - - ptr = icvXMLParseValue( fs, ptr, &stub, CV_NODE_STRING ); - assert( stub.tag == CV_NODE_STRING ); - last->attr[count*2+1] = stub.data.str.ptr; - count++; - } - - c = *ptr; - have_space = cv_isspace(c) || c == '\0'; - - if( c != '>' ) - { - ptr = icvXMLSkipSpaces( fs, ptr, CV_XML_INSIDE_TAG ); - c = *ptr; - } - - if( c == '>' ) - { - if( tag_type == CV_XML_HEADER_TAG ) - CV_PARSE_ERROR( "Invalid closing tag for ' ) - CV_PARSE_ERROR( "Invalid closing tag for ' && tag_type == CV_XML_OPENING_TAG ) - { - tag_type = CV_XML_EMPTY_TAG; - ptr += 2; - break; - } - - if( !have_space ) - CV_PARSE_ERROR( "There should be space between attributes" ); - } - - *_tag = tagname; - *_tag_type = tag_type; - *_list = first; - - return ptr; -} - - -static void -icvXMLParse( CvFileStorage* fs ) -{ - char* ptr = fs->buffer_start; - CvStringHashNode *key = 0, *key2 = 0; - CvAttrList* list = 0; - int tag_type = 0; - - // CV_XML_INSIDE_TAG is used to prohibit leading comments - ptr = icvXMLSkipSpaces( fs, ptr, CV_XML_INSIDE_TAG ); - - if( memcmp( ptr, "\'" ); - - ptr = icvXMLParseTag( fs, ptr, &key, &list, &tag_type ); - - /*{ - const char* version = cvAttrValue( list, "version" ); - if( version && strncmp( version, "1.", 2 ) != 0 ) - CV_Error( CV_StsParseError, "Unsupported version of XML" ); - }*/ - // we support any 8-bit encoding, so we do not need to check the actual encoding. - // we do not support utf-16, but in the case of utf-16 we will not get here anyway. - /*{ - const char* encoding = cvAttrValue( list, "encoding" ); - if( encoding && strcmp( encoding, "ASCII" ) != 0 && - strcmp( encoding, "UTF-8" ) != 0 && - strcmp( encoding, "utf-8" ) != 0 ) - CV_PARSE_ERROR( "Unsupported encoding" ); - }*/ - - while( *ptr != '\0' ) - { - ptr = icvXMLSkipSpaces( fs, ptr, 0 ); - - if( *ptr != '\0' ) - { - CvFileNode* root_node; - ptr = icvXMLParseTag( fs, ptr, &key, &list, &tag_type ); - if( tag_type != CV_XML_OPENING_TAG || - strcmp(key->str.ptr,"opencv_storage") != 0 ) - CV_PARSE_ERROR( " tag is missing" ); - - root_node = (CvFileNode*)cvSeqPush( fs->roots, 0 ); - ptr = icvXMLParseValue( fs, ptr, root_node, CV_NODE_NONE ); - ptr = icvXMLParseTag( fs, ptr, &key2, &list, &tag_type ); - if( tag_type != CV_XML_CLOSING_TAG || key != key2 ) - CV_PARSE_ERROR( " tag is missing" ); - ptr = icvXMLSkipSpaces( fs, ptr, 0 ); - } - } - - assert( fs->dummy_eof != 0 ); -} - - -/****************************************************************************************\ -* XML Emitter * -\****************************************************************************************/ - -#define icvXMLFlush icvFSFlush - -static void -icvXMLWriteTag( CvFileStorage* fs, const char* key, int tag_type, CvAttrList list ) -{ - char* ptr = fs->buffer; - int i, len = 0; - int struct_flags = fs->struct_flags; - - if( key && key[0] == '\0' ) - key = 0; - - if( tag_type == CV_XML_OPENING_TAG || tag_type == CV_XML_EMPTY_TAG ) - { - if( CV_NODE_IS_COLLECTION(struct_flags) ) - { - if( CV_NODE_IS_MAP(struct_flags) ^ (key != 0) ) - CV_Error( CV_StsBadArg, "An attempt to add element without a key to a map, " - "or add element with key to sequence" ); - } - else - { - struct_flags = CV_NODE_EMPTY + (key ? CV_NODE_MAP : CV_NODE_SEQ); - fs->is_first = 0; - } - - if( !CV_NODE_IS_EMPTY(struct_flags) ) - ptr = icvXMLFlush(fs); - } - - if( !key ) - key = "_"; - else if( key[0] == '_' && key[1] == '\0' ) - CV_Error( CV_StsBadArg, "A single _ is a reserved tag name" ); - - len = (int)strlen( key ); - *ptr++ = '<'; - if( tag_type == CV_XML_CLOSING_TAG ) - { - if( list.attr ) - CV_Error( CV_StsBadArg, "Closing tag should not include any attributes" ); - *ptr++ = '/'; - } - - if( !cv_isalpha(key[0]) && key[0] != '_' ) - CV_Error( CV_StsBadArg, "Key should start with a letter or _" ); - - ptr = icvFSResizeWriteBuffer( fs, ptr, len ); - for( i = 0; i < len; i++ ) - { - char c = key[i]; - if( !cv_isalnum(c) && c != '_' && c != '-' ) - CV_Error( CV_StsBadArg, "Key name may only contain alphanumeric characters [a-zA-Z0-9], '-' and '_'" ); - ptr[i] = c; - } - ptr += len; - - for(;;) - { - const char** attr = list.attr; - - for( ; attr && attr[0] != 0; attr += 2 ) - { - int len0 = (int)strlen(attr[0]); - int len1 = (int)strlen(attr[1]); - - ptr = icvFSResizeWriteBuffer( fs, ptr, len0 + len1 + 4 ); - *ptr++ = ' '; - memcpy( ptr, attr[0], len0 ); - ptr += len0; - *ptr++ = '='; - *ptr++ = '\"'; - memcpy( ptr, attr[1], len1 ); - ptr += len1; - *ptr++ = '\"'; - } - if( !list.next ) - break; - list = *list.next; - } - - if( tag_type == CV_XML_EMPTY_TAG ) - *ptr++ = '/'; - *ptr++ = '>'; - fs->buffer = ptr; - fs->struct_flags = struct_flags & ~CV_NODE_EMPTY; -} - - -static void -icvXMLStartWriteStruct( CvFileStorage* fs, const char* key, int struct_flags, - const char* type_name CV_DEFAULT(0)) -{ - CvXMLStackRecord parent; - const char* attr[10]; - int idx = 0; - - struct_flags = (struct_flags & (CV_NODE_TYPE_MASK|CV_NODE_FLOW)) | CV_NODE_EMPTY; - if( !CV_NODE_IS_COLLECTION(struct_flags)) - CV_Error( CV_StsBadArg, - "Some collection type: CV_NODE_SEQ or CV_NODE_MAP must be specified" ); - - if( type_name ) - { - attr[idx++] = "type_id"; - attr[idx++] = type_name; - } - attr[idx++] = 0; - - icvXMLWriteTag( fs, key, CV_XML_OPENING_TAG, cvAttrList(attr,0) ); - - parent.struct_flags = fs->struct_flags & ~CV_NODE_EMPTY; - parent.struct_indent = fs->struct_indent; - parent.struct_tag = fs->struct_tag; - cvSaveMemStoragePos( fs->strstorage, &parent.pos ); - cvSeqPush( fs->write_stack, &parent ); - - fs->struct_indent += CV_XML_INDENT; - if( !CV_NODE_IS_FLOW(struct_flags) ) - icvXMLFlush( fs ); - - fs->struct_flags = struct_flags; - if( key ) - { - fs->struct_tag = cvMemStorageAllocString( fs->strstorage, (char*)key, -1 ); - } - else - { - fs->struct_tag.ptr = 0; - fs->struct_tag.len = 0; - } -} - - -static void -icvXMLEndWriteStruct( CvFileStorage* fs ) -{ - CvXMLStackRecord parent; - - if( fs->write_stack->total == 0 ) - CV_Error( CV_StsError, "An extra closing tag" ); - - icvXMLWriteTag( fs, fs->struct_tag.ptr, CV_XML_CLOSING_TAG, cvAttrList(0,0) ); - cvSeqPop( fs->write_stack, &parent ); - - fs->struct_indent = parent.struct_indent; - fs->struct_flags = parent.struct_flags; - fs->struct_tag = parent.struct_tag; - cvRestoreMemStoragePos( fs->strstorage, &parent.pos ); -} - - -static void -icvXMLStartNextStream( CvFileStorage* fs ) -{ - if( !fs->is_first ) - { - while( fs->write_stack->total > 0 ) - icvXMLEndWriteStruct(fs); - - fs->struct_indent = 0; - icvXMLFlush(fs); - /* XML does not allow multiple top-level elements, - so we just put a comment and continue - the current (and the only) "stream" */ - icvPuts( fs, "\n\n" ); - /*fputs( "\n", fs->file ); - fputs( "\n", fs->file );*/ - fs->buffer = fs->buffer_start; - } -} - - -static void -icvXMLWriteScalar( CvFileStorage* fs, const char* key, const char* data, int len ) -{ - if( CV_NODE_IS_MAP(fs->struct_flags) || - (!CV_NODE_IS_COLLECTION(fs->struct_flags) && key) ) - { - icvXMLWriteTag( fs, key, CV_XML_OPENING_TAG, cvAttrList(0,0) ); - char* ptr = icvFSResizeWriteBuffer( fs, fs->buffer, len ); - memcpy( ptr, data, len ); - fs->buffer = ptr + len; - icvXMLWriteTag( fs, key, CV_XML_CLOSING_TAG, cvAttrList(0,0) ); - } - else - { - char* ptr = fs->buffer; - int new_offset = (int)(ptr - fs->buffer_start) + len; - - if( key ) - CV_Error( CV_StsBadArg, "elements with keys can not be written to sequence" ); - - fs->struct_flags = CV_NODE_SEQ; - - if( (new_offset > fs->wrap_margin && new_offset - fs->struct_indent > 10) || - (ptr > fs->buffer_start && ptr[-1] == '>' && !CV_NODE_IS_EMPTY(fs->struct_flags)) ) - { - ptr = icvXMLFlush(fs); - } - else if( ptr > fs->buffer_start + fs->struct_indent && ptr[-1] != '>' ) - *ptr++ = ' '; - - memcpy( ptr, data, len ); - fs->buffer = ptr + len; - } -} - - -static void -icvXMLWriteInt( CvFileStorage* fs, const char* key, int value ) -{ - char buf[128], *ptr = icv_itoa( value, buf, 10 ); - int len = (int)strlen(ptr); - icvXMLWriteScalar( fs, key, ptr, len ); -} - - -static void -icvXMLWriteReal( CvFileStorage* fs, const char* key, double value ) -{ - char buf[128]; - int len = (int)strlen( icvDoubleToString( buf, value )); - icvXMLWriteScalar( fs, key, buf, len ); -} - - -static void -icvXMLWriteString( CvFileStorage* fs, const char* key, const char* str, int quote ) -{ - char buf[CV_FS_MAX_LEN*6+16]; - char* data = (char*)str; - int i, len; - - if( !str ) - CV_Error( CV_StsNullPtr, "Null string pointer" ); - - len = (int)strlen(str); - if( len > CV_FS_MAX_LEN ) - CV_Error( CV_StsBadArg, "The written string is too long" ); - - if( quote || len == 0 || str[0] != '\"' || str[0] != str[len-1] ) - { - int need_quote = quote || len == 0; - data = buf; - *data++ = '\"'; - for( i = 0; i < len; i++ ) - { - char c = str[i]; - - if( (uchar)c >= 128 || c == ' ' ) - { - *data++ = c; - need_quote = 1; - } - else if( !cv_isprint(c) || c == '<' || c == '>' || c == '&' || c == '\'' || c == '\"' ) - { - *data++ = '&'; - if( c == '<' ) - { - memcpy(data, "lt", 2); - data += 2; - } - else if( c == '>' ) - { - memcpy(data, "gt", 2); - data += 2; - } - else if( c == '&' ) - { - memcpy(data, "amp", 3); - data += 3; - } - else if( c == '\'' ) - { - memcpy(data, "apos", 4); - data += 4; - } - else if( c == '\"' ) - { - memcpy( data, "quot", 4); - data += 4; - } - else - { - sprintf( data, "#x%02x", (uchar)c ); - data += 4; - } - *data++ = ';'; - need_quote = 1; - } - else - *data++ = c; - } - if( !need_quote && (cv_isdigit(str[0]) || - str[0] == '+' || str[0] == '-' || str[0] == '.' )) - need_quote = 1; - - if( need_quote ) - *data++ = '\"'; - len = (int)(data - buf) - !need_quote; - *data++ = '\0'; - data = buf + !need_quote; - } - - icvXMLWriteScalar( fs, key, data, len ); -} - - -static void -icvXMLWriteComment( CvFileStorage* fs, const char* comment, int eol_comment ) -{ - int len; - int multiline; - const char* eol; - char* ptr; - - if( !comment ) - CV_Error( CV_StsNullPtr, "Null comment" ); - - if( strstr(comment, "--") != 0 ) - CV_Error( CV_StsBadArg, "Double hyphen \'--\' is not allowed in the comments" ); - - len = (int)strlen(comment); - eol = strchr(comment, '\n'); - multiline = eol != 0; - ptr = fs->buffer; - - if( multiline || !eol_comment || fs->buffer_end - ptr < len + 5 ) - ptr = icvXMLFlush( fs ); - else if( ptr > fs->buffer_start + fs->struct_indent ) - *ptr++ = ' '; - - if( !multiline ) - { - ptr = icvFSResizeWriteBuffer( fs, ptr, len + 9 ); - sprintf( ptr, "", comment ); - len = (int)strlen(ptr); - } - else - { - strcpy( ptr, "" ); - fs->buffer = ptr + 3; - icvXMLFlush( fs ); - } -} - - -/****************************************************************************************\ -* Common High-Level Functions * -\****************************************************************************************/ - -CV_IMPL CvFileStorage* -cvOpenFileStorage( const char* filename, CvMemStorage* dststorage, int flags, const char* encoding ) -{ - CvFileStorage* fs = 0; - char* xml_buf = 0; - int default_block_size = 1 << 18; - bool append = (flags & 3) == CV_STORAGE_APPEND; - bool mem = (flags & CV_STORAGE_MEMORY) != 0; - bool write_mode = (flags & 3) != 0; - bool isGZ = false; - size_t fnamelen = 0; - - if( !filename || filename[0] == '\0' ) - { - if( !write_mode ) - CV_Error( CV_StsNullPtr, mem ? "NULL or empty filename" : "NULL or empty buffer" ); - mem = true; - } - else - fnamelen = strlen(filename); - - if( mem && append ) - CV_Error( CV_StsBadFlag, "CV_STORAGE_APPEND and CV_STORAGE_MEMORY are not currently compatible" ); - - fs = (CvFileStorage*)cvAlloc( sizeof(*fs) ); - memset( fs, 0, sizeof(*fs)); - - fs->memstorage = cvCreateMemStorage( default_block_size ); - fs->dststorage = dststorage ? dststorage : fs->memstorage; - - fs->flags = CV_FILE_STORAGE; - fs->write_mode = write_mode; - - if( !mem ) - { - fs->filename = (char*)cvMemStorageAlloc( fs->memstorage, fnamelen+1 ); - strcpy( fs->filename, filename ); - - char* dot_pos = strrchr(fs->filename, '.'); - char compression = '\0'; - - if( dot_pos && dot_pos[1] == 'g' && dot_pos[2] == 'z' && - (dot_pos[3] == '\0' || (cv_isdigit(dot_pos[3]) && dot_pos[4] == '\0')) ) - { - if( append ) - CV_Error(CV_StsNotImplemented, "Appending data to compressed file is not implemented" ); - isGZ = true; - compression = dot_pos[3]; - if( compression ) - dot_pos[3] = '\0', fnamelen--; - } - - if( !isGZ ) - { - fs->file = fopen(fs->filename, !fs->write_mode ? "rt" : !append ? "wt" : "a+t" ); - if( !fs->file ) - goto _exit_; - } - else - { - #if USE_ZLIB - char mode[] = { fs->write_mode ? 'w' : 'r', 'b', compression ? compression : '3', '\0' }; - fs->gzfile = gzopen(fs->filename, mode); - if( !fs->gzfile ) - goto _exit_; - #else - CV_Error(CV_StsNotImplemented, "There is no compressed file storage support in this configuration"); - #endif - } - } - - fs->roots = 0; - fs->struct_indent = 0; - fs->struct_flags = 0; - fs->wrap_margin = 71; - - if( fs->write_mode ) - { - int fmt = flags & CV_STORAGE_FORMAT_MASK; - - if( mem ) - fs->outbuf = new std::deque; - - if( fmt == CV_STORAGE_FORMAT_AUTO && filename ) - { - const char* dot_pos = filename + fnamelen - (isGZ ? 7 : 4); - fs->fmt = (dot_pos >= filename && (memcmp( dot_pos, ".xml", 4) == 0 || - memcmp(dot_pos, ".XML", 4) == 0 || memcmp(dot_pos, ".Xml", 4) == 0)) ? - CV_STORAGE_FORMAT_XML : CV_STORAGE_FORMAT_YAML; - } - else - fs->fmt = fmt != CV_STORAGE_FORMAT_AUTO ? fmt : CV_STORAGE_FORMAT_XML; - - // we use factor=6 for XML (the longest characters (' and ") are encoded with 6 bytes (' and ") - // and factor=4 for YAML ( as we use 4 bytes for non ASCII characters (e.g. \xAB)) - int buf_size = CV_FS_MAX_LEN*(fs->fmt == CV_STORAGE_FORMAT_XML ? 6 : 4) + 1024; - - if( append ) - fseek( fs->file, 0, SEEK_END ); - - fs->write_stack = cvCreateSeq( 0, sizeof(CvSeq), fs->fmt == CV_STORAGE_FORMAT_XML ? - sizeof(CvXMLStackRecord) : sizeof(int), fs->memstorage ); - fs->is_first = 1; - fs->struct_indent = 0; - fs->struct_flags = CV_NODE_EMPTY; - fs->buffer_start = fs->buffer = (char*)cvAlloc( buf_size + 1024 ); - fs->buffer_end = fs->buffer_start + buf_size; - if( fs->fmt == CV_STORAGE_FORMAT_XML ) - { - size_t file_size = fs->file ? (size_t)ftell( fs->file ) : (size_t)0; - fs->strstorage = cvCreateChildMemStorage( fs->memstorage ); - if( !append || file_size == 0 ) - { - if( encoding ) - { - if( strcmp( encoding, "UTF-16" ) == 0 || - strcmp( encoding, "utf-16" ) == 0 || - strcmp( encoding, "Utf-16" ) == 0 ) - CV_Error( CV_StsBadArg, "UTF-16 XML encoding is not supported! Use 8-bit encoding\n"); - - CV_Assert( strlen(encoding) < 1000 ); - char buf[1100]; - sprintf(buf, "\n", encoding); - icvPuts( fs, buf ); - } - else - icvPuts( fs, "\n" ); - icvPuts( fs, "\n" ); - } - else - { - int xml_buf_size = 1 << 10; - char substr[] = ""; - int last_occurence = -1; - xml_buf_size = MIN(xml_buf_size, int(file_size)); - fseek( fs->file, -xml_buf_size, SEEK_END ); - xml_buf = (char*)cvAlloc( xml_buf_size+2 ); - // find the last occurence of - for(;;) - { - int line_offset = ftell( fs->file ); - char* ptr0 = icvGets( fs, xml_buf, xml_buf_size ), *ptr; - if( !ptr0 ) - break; - ptr = ptr0; - for(;;) - { - ptr = strstr( ptr, substr ); - if( !ptr ) - break; - last_occurence = line_offset + (int)(ptr - ptr0); - ptr += strlen(substr); - } - } - if( last_occurence < 0 ) - CV_Error( CV_StsError, "Could not find in the end of file.\n" ); - icvCloseFile( fs ); - fs->file = fopen( fs->filename, "r+t" ); - fseek( fs->file, last_occurence, SEEK_SET ); - // replace the last "" with " ", which has the same length - icvPuts( fs, " " ); - fseek( fs->file, 0, SEEK_END ); - icvPuts( fs, "\n" ); - } - fs->start_write_struct = icvXMLStartWriteStruct; - fs->end_write_struct = icvXMLEndWriteStruct; - fs->write_int = icvXMLWriteInt; - fs->write_real = icvXMLWriteReal; - fs->write_string = icvXMLWriteString; - fs->write_comment = icvXMLWriteComment; - fs->start_next_stream = icvXMLStartNextStream; - } - else - { - if( !append ) - icvPuts( fs, "%YAML:1.0\n" ); - else - icvPuts( fs, "...\n---\n" ); - fs->start_write_struct = icvYMLStartWriteStruct; - fs->end_write_struct = icvYMLEndWriteStruct; - fs->write_int = icvYMLWriteInt; - fs->write_real = icvYMLWriteReal; - fs->write_string = icvYMLWriteString; - fs->write_comment = icvYMLWriteComment; - fs->start_next_stream = icvYMLStartNextStream; - } - } - else - { - if( mem ) - { - fs->strbuf = filename; - fs->strbufsize = fnamelen; - } - - size_t buf_size = 1 << 20; - const char* yaml_signature = "%YAML:"; - char buf[16]; - icvGets( fs, buf, sizeof(buf)-2 ); - fs->fmt = strncmp( buf, yaml_signature, strlen(yaml_signature) ) == 0 ? - CV_STORAGE_FORMAT_YAML : CV_STORAGE_FORMAT_XML; - - if( !isGZ ) - { - if( !mem ) - { - fseek( fs->file, 0, SEEK_END ); - buf_size = ftell( fs->file ); - } - else - buf_size = fs->strbufsize; - buf_size = MIN( buf_size, (size_t)(1 << 20) ); - buf_size = MAX( buf_size, (size_t)(CV_FS_MAX_LEN*2 + 1024) ); - } - icvRewind(fs); - - fs->str_hash = cvCreateMap( 0, sizeof(CvStringHash), - sizeof(CvStringHashNode), fs->memstorage, 256 ); - - fs->roots = cvCreateSeq( 0, sizeof(CvSeq), - sizeof(CvFileNode), fs->memstorage ); - - fs->buffer = fs->buffer_start = (char*)cvAlloc( buf_size + 256 ); - fs->buffer_end = fs->buffer_start + buf_size; - fs->buffer[0] = '\n'; - fs->buffer[1] = '\0'; - - //mode = cvGetErrMode(); - //cvSetErrMode( CV_ErrModeSilent ); - if( fs->fmt == CV_STORAGE_FORMAT_XML ) - icvXMLParse( fs ); - else - icvYMLParse( fs ); - //cvSetErrMode( mode ); - - // release resources that we do not need anymore - cvFree( &fs->buffer_start ); - fs->buffer = fs->buffer_end = 0; - } - fs->is_opened = true; - -_exit_: - if( fs ) - { - if( cvGetErrStatus() < 0 || (!fs->file && !fs->gzfile && !fs->outbuf && !fs->strbuf) ) - { - cvReleaseFileStorage( &fs ); - } - else if( !fs->write_mode ) - { - icvCloseFile(fs); - // we close the file since it's not needed anymore. But icvCloseFile() resets is_opened, - // which may be misleading. Since we restore the value of is_opened. - fs->is_opened = true; - } - } - - cvFree( &xml_buf ); - return fs; -} - - -CV_IMPL void -cvStartWriteStruct( CvFileStorage* fs, const char* key, int struct_flags, - const char* type_name, CvAttrList /*attributes*/ ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->start_write_struct( fs, key, struct_flags, type_name ); -} - - -CV_IMPL void -cvEndWriteStruct( CvFileStorage* fs ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->end_write_struct( fs ); -} - - -CV_IMPL void -cvWriteInt( CvFileStorage* fs, const char* key, int value ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->write_int( fs, key, value ); -} - - -CV_IMPL void -cvWriteReal( CvFileStorage* fs, const char* key, double value ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->write_real( fs, key, value ); -} - - -CV_IMPL void -cvWriteString( CvFileStorage* fs, const char* key, const char* value, int quote ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->write_string( fs, key, value, quote ); -} - - -CV_IMPL void -cvWriteComment( CvFileStorage* fs, const char* comment, int eol_comment ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->write_comment( fs, comment, eol_comment ); -} - - -CV_IMPL void -cvStartNextStream( CvFileStorage* fs ) -{ - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - fs->start_next_stream( fs ); -} - - -static const char icvTypeSymbol[] = "ucwsifdr"; -#define CV_FS_MAX_FMT_PAIRS 128 - -static char* -icvEncodeFormat( int elem_type, char* dt ) -{ - sprintf( dt, "%d%c", CV_MAT_CN(elem_type), icvTypeSymbol[CV_MAT_DEPTH(elem_type)] ); - return dt + ( dt[2] == '\0' && dt[0] == '1' ); -} - -static int -icvDecodeFormat( const char* dt, int* fmt_pairs, int max_len ) -{ - int fmt_pair_count = 0; - int i = 0, k = 0, len = dt ? (int)strlen(dt) : 0; - - if( !dt || !len ) - return 0; - - assert( fmt_pairs != 0 && max_len > 0 ); - fmt_pairs[0] = 0; - max_len *= 2; - - for( ; k < len; k++ ) - { - char c = dt[k]; - - if( cv_isdigit(c) ) - { - int count = c - '0'; - if( cv_isdigit(dt[k+1]) ) - { - char* endptr = 0; - count = (int)strtol( dt+k, &endptr, 10 ); - k = (int)(endptr - dt) - 1; - } - - if( count <= 0 ) - CV_Error( CV_StsBadArg, "Invalid data type specification" ); - - fmt_pairs[i] = count; - } - else - { - const char* pos = strchr( icvTypeSymbol, c ); - if( !pos ) - CV_Error( CV_StsBadArg, "Invalid data type specification" ); - if( fmt_pairs[i] == 0 ) - fmt_pairs[i] = 1; - fmt_pairs[i+1] = (int)(pos - icvTypeSymbol); - if( i > 0 && fmt_pairs[i+1] == fmt_pairs[i-1] ) - fmt_pairs[i-2] += fmt_pairs[i]; - else - { - i += 2; - if( i >= max_len ) - CV_Error( CV_StsBadArg, "Too long data type specification" ); - } - fmt_pairs[i] = 0; - } - } - - fmt_pair_count = i/2; - return fmt_pair_count; -} - - -static int -icvCalcElemSize( const char* dt, int initial_size ) -{ - int size = 0; - int fmt_pairs[CV_FS_MAX_FMT_PAIRS], i, fmt_pair_count; - int comp_size; - - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - fmt_pair_count *= 2; - for( i = 0, size = initial_size; i < fmt_pair_count; i += 2 ) - { - comp_size = CV_ELEM_SIZE(fmt_pairs[i+1]); - size = cvAlign( size, comp_size ); - size += comp_size * fmt_pairs[i]; - } - if( initial_size == 0 ) - { - comp_size = CV_ELEM_SIZE(fmt_pairs[1]); - size = cvAlign( size, comp_size ); - } - return size; -} - - -static int -icvDecodeSimpleFormat( const char* dt ) -{ - int elem_type = -1; - int fmt_pairs[CV_FS_MAX_FMT_PAIRS], fmt_pair_count; - - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - if( fmt_pair_count != 1 || fmt_pairs[0] > 4 ) - CV_Error( CV_StsError, "Too complex format for the matrix" ); - - elem_type = CV_MAKETYPE( fmt_pairs[1], fmt_pairs[0] ); - - return elem_type; -} - - -CV_IMPL void -cvWriteRawData( CvFileStorage* fs, const void* _data, int len, const char* dt ) -{ - const char* data0 = (const char*)_data; - int offset = 0; - int fmt_pairs[CV_FS_MAX_FMT_PAIRS*2], k, fmt_pair_count; - char buf[256] = ""; - - CV_CHECK_OUTPUT_FILE_STORAGE( fs ); - - if( len < 0 ) - CV_Error( CV_StsOutOfRange, "Negative number of elements" ); - - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - - if( !len ) - return; - - if( !data0 ) - CV_Error( CV_StsNullPtr, "Null data pointer" ); - - if( fmt_pair_count == 1 ) - { - fmt_pairs[0] *= len; - len = 1; - } - - for(;len--;) - { - for( k = 0; k < fmt_pair_count; k++ ) - { - int i, count = fmt_pairs[k*2]; - int elem_type = fmt_pairs[k*2+1]; - int elem_size = CV_ELEM_SIZE(elem_type); - const char* data, *ptr; - - offset = cvAlign( offset, elem_size ); - data = data0 + offset; - - for( i = 0; i < count; i++ ) - { - switch( elem_type ) - { - case CV_8U: - ptr = icv_itoa( *(uchar*)data, buf, 10 ); - data++; - break; - case CV_8S: - ptr = icv_itoa( *(char*)data, buf, 10 ); - data++; - break; - case CV_16U: - ptr = icv_itoa( *(ushort*)data, buf, 10 ); - data += sizeof(ushort); - break; - case CV_16S: - ptr = icv_itoa( *(short*)data, buf, 10 ); - data += sizeof(short); - break; - case CV_32S: - ptr = icv_itoa( *(int*)data, buf, 10 ); - data += sizeof(int); - break; - case CV_32F: - ptr = icvFloatToString( buf, *(float*)data ); - data += sizeof(float); - break; - case CV_64F: - ptr = icvDoubleToString( buf, *(double*)data ); - data += sizeof(double); - break; - case CV_USRTYPE1: /* reference */ - ptr = icv_itoa( (int)*(size_t*)data, buf, 10 ); - data += sizeof(size_t); - break; - default: - assert(0); - return; - } - - if( fs->fmt == CV_STORAGE_FORMAT_XML ) - { - int buf_len = (int)strlen(ptr); - icvXMLWriteScalar( fs, 0, ptr, buf_len ); - } - else - icvYMLWrite( fs, 0, ptr ); - } - - offset = (int)(data - data0); - } - } -} - - -CV_IMPL void -cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src, CvSeqReader* reader ) -{ - int node_type; - CV_CHECK_FILE_STORAGE( fs ); - - if( !src || !reader ) - CV_Error( CV_StsNullPtr, "Null pointer to source file node or reader" ); - - node_type = CV_NODE_TYPE(src->tag); - if( node_type == CV_NODE_INT || node_type == CV_NODE_REAL ) - { - // emulate reading from 1-element sequence - reader->ptr = (schar*)src; - reader->block_max = reader->ptr + sizeof(*src)*2; - reader->block_min = reader->ptr; - reader->seq = 0; - } - else if( node_type == CV_NODE_SEQ ) - { - cvStartReadSeq( src->data.seq, reader, 0 ); - } - else if( node_type == CV_NODE_NONE ) - { - memset( reader, 0, sizeof(*reader) ); - } - else - CV_Error( CV_StsBadArg, "The file node should be a numerical scalar or a sequence" ); -} - - -CV_IMPL void -cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, - int len, void* _data, const char* dt ) -{ - char* data0 = (char*)_data; - int fmt_pairs[CV_FS_MAX_FMT_PAIRS*2], k = 0, fmt_pair_count; - int i = 0, offset = 0, count = 0; - - CV_CHECK_FILE_STORAGE( fs ); - - if( !reader || !data0 ) - CV_Error( CV_StsNullPtr, "Null pointer to reader or destination array" ); - - if( !reader->seq && len != 1 ) - CV_Error( CV_StsBadSize, "The readed sequence is a scalar, thus len must be 1" ); - - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - - for(;;) - { - for( k = 0; k < fmt_pair_count; k++ ) - { - int elem_type = fmt_pairs[k*2+1]; - int elem_size = CV_ELEM_SIZE(elem_type); - char* data; - - count = fmt_pairs[k*2]; - offset = cvAlign( offset, elem_size ); - data = data0 + offset; - - for( i = 0; i < count; i++ ) - { - CvFileNode* node = (CvFileNode*)reader->ptr; - if( CV_NODE_IS_INT(node->tag) ) - { - int ival = node->data.i; - - switch( elem_type ) - { - case CV_8U: - *(uchar*)data = CV_CAST_8U(ival); - data++; - break; - case CV_8S: - *(char*)data = CV_CAST_8S(ival); - data++; - break; - case CV_16U: - *(ushort*)data = CV_CAST_16U(ival); - data += sizeof(ushort); - break; - case CV_16S: - *(short*)data = CV_CAST_16S(ival); - data += sizeof(short); - break; - case CV_32S: - *(int*)data = ival; - data += sizeof(int); - break; - case CV_32F: - *(float*)data = (float)ival; - data += sizeof(float); - break; - case CV_64F: - *(double*)data = (double)ival; - data += sizeof(double); - break; - case CV_USRTYPE1: /* reference */ - *(size_t*)data = ival; - data += sizeof(size_t); - break; - default: - assert(0); - return; - } - } - else if( CV_NODE_IS_REAL(node->tag) ) - { - double fval = node->data.f; - int ival; - - switch( elem_type ) - { - case CV_8U: - ival = cvRound(fval); - *(uchar*)data = CV_CAST_8U(ival); - data++; - break; - case CV_8S: - ival = cvRound(fval); - *(char*)data = CV_CAST_8S(ival); - data++; - break; - case CV_16U: - ival = cvRound(fval); - *(ushort*)data = CV_CAST_16U(ival); - data += sizeof(ushort); - break; - case CV_16S: - ival = cvRound(fval); - *(short*)data = CV_CAST_16S(ival); - data += sizeof(short); - break; - case CV_32S: - ival = cvRound(fval); - *(int*)data = ival; - data += sizeof(int); - break; - case CV_32F: - *(float*)data = (float)fval; - data += sizeof(float); - break; - case CV_64F: - *(double*)data = fval; - data += sizeof(double); - break; - case CV_USRTYPE1: /* reference */ - ival = cvRound(fval); - *(size_t*)data = ival; - data += sizeof(size_t); - break; - default: - assert(0); - return; - } - } - else - CV_Error( CV_StsError, - "The sequence element is not a numerical scalar" ); - - CV_NEXT_SEQ_ELEM( sizeof(CvFileNode), *reader ); - if( !--len ) - goto end_loop; - } - - offset = (int)(data - data0); - } - } - -end_loop: - if( i != count - 1 || k != fmt_pair_count - 1 ) - CV_Error( CV_StsBadSize, - "The sequence slice does not fit an integer number of records" ); - - if( !reader->seq ) - reader->ptr -= sizeof(CvFileNode); -} - - -CV_IMPL void -cvReadRawData( const CvFileStorage* fs, const CvFileNode* src, - void* data, const char* dt ) -{ - CvSeqReader reader; - - if( !src || !data ) - CV_Error( CV_StsNullPtr, "Null pointers to source file node or destination array" ); - - cvStartReadRawData( fs, src, &reader ); - cvReadRawDataSlice( fs, &reader, CV_NODE_IS_SEQ(src->tag) ? - src->data.seq->total : 1, data, dt ); -} - - -static void -icvWriteFileNode( CvFileStorage* fs, const char* name, const CvFileNode* node ); - -static void -icvWriteCollection( CvFileStorage* fs, const CvFileNode* node ) -{ - int i, total = node->data.seq->total; - int elem_size = node->data.seq->elem_size; - int is_map = CV_NODE_IS_MAP(node->tag); - CvSeqReader reader; - - cvStartReadSeq( node->data.seq, &reader, 0 ); - - for( i = 0; i < total; i++ ) - { - CvFileMapNode* elem = (CvFileMapNode*)reader.ptr; - if( !is_map || CV_IS_SET_ELEM(elem) ) - { - const char* name = is_map ? elem->key->str.ptr : 0; - icvWriteFileNode( fs, name, &elem->value ); - } - CV_NEXT_SEQ_ELEM( elem_size, reader ); - } -} - -static void -icvWriteFileNode( CvFileStorage* fs, const char* name, const CvFileNode* node ) -{ - switch( CV_NODE_TYPE(node->tag) ) - { - case CV_NODE_INT: - fs->write_int( fs, name, node->data.i ); - break; - case CV_NODE_REAL: - fs->write_real( fs, name, node->data.f ); - break; - case CV_NODE_STR: - fs->write_string( fs, name, node->data.str.ptr, 0 ); - break; - case CV_NODE_SEQ: - case CV_NODE_MAP: - fs->start_write_struct( fs, name, CV_NODE_TYPE(node->tag) + - (CV_NODE_SEQ_IS_SIMPLE(node->data.seq) ? CV_NODE_FLOW : 0), - node->info ? node->info->type_name : 0 ); - icvWriteCollection( fs, node ); - fs->end_write_struct( fs ); - break; - case CV_NODE_NONE: - fs->start_write_struct( fs, name, CV_NODE_SEQ, 0 ); - fs->end_write_struct( fs ); - break; - default: - CV_Error( CV_StsBadFlag, "Unknown type of file node" ); - } -} - - -CV_IMPL void -cvWriteFileNode( CvFileStorage* fs, const char* new_node_name, - const CvFileNode* node, int embed ) -{ - CvFileStorage* dst = 0; - CV_CHECK_OUTPUT_FILE_STORAGE(fs); - - if( !node ) - return; - - if( CV_NODE_IS_COLLECTION(node->tag) && embed ) - { - icvWriteCollection( fs, node ); - } - else - { - icvWriteFileNode( fs, new_node_name, node ); - } - /* - int i, stream_count; - stream_count = fs->roots->total; - for( i = 0; i < stream_count; i++ ) - { - CvFileNode* node = (CvFileNode*)cvGetSeqElem( fs->roots, i, 0 ); - icvDumpCollection( dst, node ); - if( i < stream_count - 1 ) - dst->start_next_stream( dst ); - }*/ - cvReleaseFileStorage( &dst ); -} - - -CV_IMPL const char* -cvGetFileNodeName( const CvFileNode* file_node ) -{ - return file_node && CV_NODE_HAS_NAME(file_node->tag) ? - ((CvFileMapNode*)file_node)->key->str.ptr : 0; -} - -/****************************************************************************************\ -* Reading/Writing etc. for standard types * -\****************************************************************************************/ - -/*#define CV_TYPE_NAME_MAT "opencv-matrix" -#define CV_TYPE_NAME_MATND "opencv-nd-matrix" -#define CV_TYPE_NAME_SPARSE_MAT "opencv-sparse-matrix" -#define CV_TYPE_NAME_IMAGE "opencv-image" -#define CV_TYPE_NAME_SEQ "opencv-sequence" -#define CV_TYPE_NAME_SEQ_TREE "opencv-sequence-tree" -#define CV_TYPE_NAME_GRAPH "opencv-graph"*/ - -/******************************* CvMat ******************************/ - -static int -icvIsMat( const void* ptr ) -{ - return CV_IS_MAT_HDR_Z(ptr); -} - -static void -icvWriteMat( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList /*attr*/ ) -{ - const CvMat* mat = (const CvMat*)struct_ptr; - char dt[16]; - CvSize size; - int y; - - assert( CV_IS_MAT_HDR_Z(mat) ); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_MAT ); - cvWriteInt( fs, "rows", mat->rows ); - cvWriteInt( fs, "cols", mat->cols ); - cvWriteString( fs, "dt", icvEncodeFormat( CV_MAT_TYPE(mat->type), dt ), 0 ); - cvStartWriteStruct( fs, "data", CV_NODE_SEQ + CV_NODE_FLOW ); - - size = cvGetSize(mat); - if( size.height > 0 && size.width > 0 && mat->data.ptr ) - { - if( CV_IS_MAT_CONT(mat->type) ) - { - size.width *= size.height; - size.height = 1; - } - - for( y = 0; y < size.height; y++ ) - cvWriteRawData( fs, mat->data.ptr + (size_t)y*mat->step, size.width, dt ); - } - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); -} - - -static int -icvFileNodeSeqLen( CvFileNode* node ) -{ - return CV_NODE_IS_COLLECTION(node->tag) ? node->data.seq->total : - CV_NODE_TYPE(node->tag) != CV_NODE_NONE; -} - - -static void* -icvReadMat( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - CvMat* mat; - const char* dt; - CvFileNode* data; - int rows, cols, elem_type; - - rows = cvReadIntByName( fs, node, "rows", -1 ); - cols = cvReadIntByName( fs, node, "cols", -1 ); - dt = cvReadStringByName( fs, node, "dt", 0 ); - - if( rows < 0 || cols < 0 || !dt ) - CV_Error( CV_StsError, "Some of essential matrix attributes are absent" ); - - elem_type = icvDecodeSimpleFormat( dt ); - - data = cvGetFileNodeByName( fs, node, "data" ); - if( !data ) - CV_Error( CV_StsError, "The matrix data is not found in file storage" ); - - int nelems = icvFileNodeSeqLen( data ); - if( nelems > 0 && nelems != rows*cols*CV_MAT_CN(elem_type) ) - CV_Error( CV_StsUnmatchedSizes, - "The matrix size does not match to the number of stored elements" ); - - if( nelems > 0 ) - { - mat = cvCreateMat( rows, cols, elem_type ); - cvReadRawData( fs, data, mat->data.ptr, dt ); - } - else if( rows == 0 && cols == 0 ) - mat = cvCreateMatHeader( 0, 1, elem_type ); - else - mat = cvCreateMatHeader( rows, cols, elem_type ); - - ptr = mat; - return ptr; -} - - -/******************************* CvMatND ******************************/ - -static int -icvIsMatND( const void* ptr ) -{ - return CV_IS_MATND_HDR(ptr); -} - - -static void -icvWriteMatND( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList /*attr*/ ) -{ - CvMatND* mat = (CvMatND*)struct_ptr; - CvMatND stub; - CvNArrayIterator iterator; - int dims, sizes[CV_MAX_DIM]; - char dt[16]; - - assert( CV_IS_MATND_HDR(mat) ); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_MATND ); - dims = cvGetDims( mat, sizes ); - cvStartWriteStruct( fs, "sizes", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, sizes, dims, "i" ); - cvEndWriteStruct( fs ); - cvWriteString( fs, "dt", icvEncodeFormat( cvGetElemType(mat), dt ), 0 ); - cvStartWriteStruct( fs, "data", CV_NODE_SEQ + CV_NODE_FLOW ); - - if( mat->dim[0].size > 0 && mat->data.ptr ) - { - cvInitNArrayIterator( 1, (CvArr**)&mat, 0, &stub, &iterator ); - - do - cvWriteRawData( fs, iterator.ptr[0], iterator.size.width, dt ); - while( cvNextNArraySlice( &iterator )); - } - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); -} - - -static void* -icvReadMatND( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - CvMatND* mat; - const char* dt; - CvFileNode* data; - CvFileNode* sizes_node; - int sizes[CV_MAX_DIM], dims, elem_type; - int i, total_size; - - sizes_node = cvGetFileNodeByName( fs, node, "sizes" ); - dt = cvReadStringByName( fs, node, "dt", 0 ); - - if( !sizes_node || !dt ) - CV_Error( CV_StsError, "Some of essential matrix attributes are absent" ); - - dims = CV_NODE_IS_SEQ(sizes_node->tag) ? sizes_node->data.seq->total : - CV_NODE_IS_INT(sizes_node->tag) ? 1 : -1; - - if( dims <= 0 || dims > CV_MAX_DIM ) - CV_Error( CV_StsParseError, "Could not determine the matrix dimensionality" ); - - cvReadRawData( fs, sizes_node, sizes, "i" ); - elem_type = icvDecodeSimpleFormat( dt ); - - data = cvGetFileNodeByName( fs, node, "data" ); - if( !data ) - CV_Error( CV_StsError, "The matrix data is not found in file storage" ); - - - - for( total_size = CV_MAT_CN(elem_type), i = 0; i < dims; i++ ) - total_size *= sizes[i]; - - int nelems = icvFileNodeSeqLen( data ); - - if( nelems > 0 && nelems != total_size ) - CV_Error( CV_StsUnmatchedSizes, - "The matrix size does not match to the number of stored elements" ); - - if( nelems > 0 ) - { - mat = cvCreateMatND( dims, sizes, elem_type ); - cvReadRawData( fs, data, mat->data.ptr, dt ); - } - else - mat = cvCreateMatNDHeader( dims, sizes, elem_type ); - - ptr = mat; - return ptr; -} - - -/******************************* CvSparseMat ******************************/ - -static int -icvIsSparseMat( const void* ptr ) -{ - return CV_IS_SPARSE_MAT(ptr); -} - - -static int -icvSortIdxCmpFunc( const void* _a, const void* _b, void* userdata ) -{ - int i, dims = *(int*)userdata; - const int* a = *(const int**)_a; - const int* b = *(const int**)_b; - - for( i = 0; i < dims; i++ ) - { - int delta = a[i] - b[i]; - if( delta ) - return delta; - } - - return 0; -} - - -static void -icvWriteSparseMat( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList /*attr*/ ) -{ - CvMemStorage* memstorage = 0; - const CvSparseMat* mat = (const CvSparseMat*)struct_ptr; - CvSparseMatIterator iterator; - CvSparseNode* node; - CvSeq* elements; - CvSeqReader reader; - int i, dims; - int *prev_idx = 0; - char dt[16]; - - assert( CV_IS_SPARSE_MAT(mat) ); - - memstorage = cvCreateMemStorage(); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_SPARSE_MAT ); - dims = cvGetDims( mat, 0 ); - - cvStartWriteStruct( fs, "sizes", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, mat->size, dims, "i" ); - cvEndWriteStruct( fs ); - cvWriteString( fs, "dt", icvEncodeFormat( CV_MAT_TYPE(mat->type), dt ), 0 ); - cvStartWriteStruct( fs, "data", CV_NODE_SEQ + CV_NODE_FLOW ); - - elements = cvCreateSeq( CV_SEQ_ELTYPE_PTR, sizeof(CvSeq), sizeof(int*), memstorage ); - - node = cvInitSparseMatIterator( mat, &iterator ); - while( node ) - { - int* idx = CV_NODE_IDX( mat, node ); - cvSeqPush( elements, &idx ); - node = cvGetNextSparseNode( &iterator ); - } - - cvSeqSort( elements, icvSortIdxCmpFunc, &dims ); - cvStartReadSeq( elements, &reader, 0 ); - - for( i = 0; i < elements->total; i++ ) - { - int* idx; - void* val; - int k = 0; - - CV_READ_SEQ_ELEM( idx, reader ); - if( i > 0 ) - { - for( ; idx[k] == prev_idx[k]; k++ ) - assert( k < dims ); - if( k < dims - 1 ) - fs->write_int( fs, 0, k - dims + 1 ); - } - for( ; k < dims; k++ ) - fs->write_int( fs, 0, idx[k] ); - prev_idx = idx; - - node = (CvSparseNode*)((uchar*)idx - mat->idxoffset ); - val = CV_NODE_VAL( mat, node ); - - cvWriteRawData( fs, val, 1, dt ); - } - - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); - cvReleaseMemStorage( &memstorage ); -} - - -static void* -icvReadSparseMat( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - CvSparseMat* mat; - const char* dt; - CvFileNode* data; - CvFileNode* sizes_node; - CvSeqReader reader; - CvSeq* elements; - int sizes[CV_MAX_DIM_HEAP], dims, elem_type, cn; - int i; - - sizes_node = cvGetFileNodeByName( fs, node, "sizes" ); - dt = cvReadStringByName( fs, node, "dt", 0 ); - - if( !sizes_node || !dt ) - CV_Error( CV_StsError, "Some of essential matrix attributes are absent" ); - - dims = CV_NODE_IS_SEQ(sizes_node->tag) ? sizes_node->data.seq->total : - CV_NODE_IS_INT(sizes_node->tag) ? 1 : -1; - - if( dims <= 0 || dims > CV_MAX_DIM_HEAP ) - CV_Error( CV_StsParseError, "Could not determine sparse matrix dimensionality" ); - - cvReadRawData( fs, sizes_node, sizes, "i" ); - elem_type = icvDecodeSimpleFormat( dt ); - - data = cvGetFileNodeByName( fs, node, "data" ); - if( !data || !CV_NODE_IS_SEQ(data->tag) ) - CV_Error( CV_StsError, "The matrix data is not found in file storage" ); - - mat = cvCreateSparseMat( dims, sizes, elem_type ); - - cn = CV_MAT_CN(elem_type); - int idx[CV_MAX_DIM_HEAP]; - elements = data->data.seq; - cvStartReadRawData( fs, data, &reader ); - - for( i = 0; i < elements->total; ) - { - CvFileNode* elem = (CvFileNode*)reader.ptr; - uchar* val; - int k; - if( !CV_NODE_IS_INT(elem->tag )) - CV_Error( CV_StsParseError, "Sparse matrix data is corrupted" ); - k = elem->data.i; - if( i > 0 && k >= 0 ) - idx[dims-1] = k; - else - { - if( i > 0 ) - k = dims + k - 1; - else - idx[0] = k, k = 1; - for( ; k < dims; k++ ) - { - CV_NEXT_SEQ_ELEM( elements->elem_size, reader ); - i++; - elem = (CvFileNode*)reader.ptr; - if( !CV_NODE_IS_INT(elem->tag ) || elem->data.i < 0 ) - CV_Error( CV_StsParseError, "Sparse matrix data is corrupted" ); - idx[k] = elem->data.i; - } - } - CV_NEXT_SEQ_ELEM( elements->elem_size, reader ); - i++; - val = cvPtrND( mat, idx, 0, 1, 0 ); - cvReadRawDataSlice( fs, &reader, cn, val, dt ); - i += cn; - } - - ptr = mat; - return ptr; -} - - -/******************************* IplImage ******************************/ - -static int -icvIsImage( const void* ptr ) -{ - return CV_IS_IMAGE_HDR(ptr); -} - -static void -icvWriteImage( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList /*attr*/ ) -{ - const IplImage* image = (const IplImage*)struct_ptr; - char dt_buf[16], *dt; - CvSize size; - int y, depth; - - assert( CV_IS_IMAGE(image) ); - - if( image->dataOrder == IPL_DATA_ORDER_PLANE ) - CV_Error( CV_StsUnsupportedFormat, - "Images with planar data layout are not supported" ); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_IMAGE ); - cvWriteInt( fs, "width", image->width ); - cvWriteInt( fs, "height", image->height ); - cvWriteString( fs, "origin", image->origin == IPL_ORIGIN_TL - ? "top-left" : "bottom-left", 0 ); - cvWriteString( fs, "layout", image->dataOrder == IPL_DATA_ORDER_PLANE - ? "planar" : "interleaved", 0 ); - if( image->roi ) - { - cvStartWriteStruct( fs, "roi", CV_NODE_MAP + CV_NODE_FLOW ); - cvWriteInt( fs, "x", image->roi->xOffset ); - cvWriteInt( fs, "y", image->roi->yOffset ); - cvWriteInt( fs, "width", image->roi->width ); - cvWriteInt( fs, "height", image->roi->height ); - cvWriteInt( fs, "coi", image->roi->coi ); - cvEndWriteStruct( fs ); - } - - depth = IPL2CV_DEPTH(image->depth); - sprintf( dt_buf, "%d%c", image->nChannels, icvTypeSymbol[depth] ); - dt = dt_buf + (dt_buf[2] == '\0' && dt_buf[0] == '1'); - cvWriteString( fs, "dt", dt, 0 ); - - size = cvSize(image->width, image->height); - if( size.width*image->nChannels*CV_ELEM_SIZE(depth) == image->widthStep ) - { - size.width *= size.height; - size.height = 1; - } - - cvStartWriteStruct( fs, "data", CV_NODE_SEQ + CV_NODE_FLOW ); - for( y = 0; y < size.height; y++ ) - cvWriteRawData( fs, image->imageData + y*image->widthStep, size.width, dt ); - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); -} - - -static void* -icvReadImage( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - IplImage* image; - const char* dt; - CvFileNode* data; - CvFileNode* roi_node; - CvSeqReader reader; - CvRect roi; - int y, width, height, elem_type, coi, depth; - const char* origin, *data_order; - - width = cvReadIntByName( fs, node, "width", 0 ); - height = cvReadIntByName( fs, node, "height", 0 ); - dt = cvReadStringByName( fs, node, "dt", 0 ); - origin = cvReadStringByName( fs, node, "origin", 0 ); - - if( width == 0 || height == 0 || dt == 0 || origin == 0 ) - CV_Error( CV_StsError, "Some of essential image attributes are absent" ); - - elem_type = icvDecodeSimpleFormat( dt ); - data_order = cvReadStringByName( fs, node, "layout", "interleaved" ); - if( strcmp( data_order, "interleaved" ) != 0 ) - CV_Error( CV_StsError, "Only interleaved images can be read" ); - - data = cvGetFileNodeByName( fs, node, "data" ); - if( !data ) - CV_Error( CV_StsError, "The image data is not found in file storage" ); - - if( icvFileNodeSeqLen( data ) != width*height*CV_MAT_CN(elem_type) ) - CV_Error( CV_StsUnmatchedSizes, - "The matrix size does not match to the number of stored elements" ); - - depth = cvIplDepth(elem_type); - image = cvCreateImage( cvSize(width,height), depth, CV_MAT_CN(elem_type) ); - - roi_node = cvGetFileNodeByName( fs, node, "roi" ); - if( roi_node ) - { - roi.x = cvReadIntByName( fs, roi_node, "x", 0 ); - roi.y = cvReadIntByName( fs, roi_node, "y", 0 ); - roi.width = cvReadIntByName( fs, roi_node, "width", 0 ); - roi.height = cvReadIntByName( fs, roi_node, "height", 0 ); - coi = cvReadIntByName( fs, roi_node, "coi", 0 ); - - cvSetImageROI( image, roi ); - cvSetImageCOI( image, coi ); - } - - if( width*CV_ELEM_SIZE(elem_type) == image->widthStep ) - { - width *= height; - height = 1; - } - - width *= CV_MAT_CN(elem_type); - cvStartReadRawData( fs, data, &reader ); - for( y = 0; y < height; y++ ) - { - cvReadRawDataSlice( fs, &reader, width, - image->imageData + y*image->widthStep, dt ); - } - - ptr = image; - return ptr; -} - - -/******************************* CvSeq ******************************/ - -static int -icvIsSeq( const void* ptr ) -{ - return CV_IS_SEQ(ptr); -} - - -static void -icvReleaseSeq( void** ptr ) -{ - if( !ptr ) - CV_Error( CV_StsNullPtr, "NULL double pointer" ); - *ptr = 0; // it's impossible now to release seq, so just clear the pointer -} - - -static void* -icvCloneSeq( const void* ptr ) -{ - return cvSeqSlice( (CvSeq*)ptr, CV_WHOLE_SEQ, - 0 /* use the same storage as for the original sequence */, 1 ); -} - - -static void -icvWriteHeaderData( CvFileStorage* fs, const CvSeq* seq, - CvAttrList* attr, int initial_header_size ) -{ - char header_dt_buf[128]; - const char* header_dt = cvAttrValue( attr, "header_dt" ); - - if( header_dt ) - { - int dt_header_size; - dt_header_size = icvCalcElemSize( header_dt, initial_header_size ); - if( dt_header_size > seq->header_size ) - CV_Error( CV_StsUnmatchedSizes, - "The size of header calculated from \"header_dt\" is greater than header_size" ); - } - else if( seq->header_size > initial_header_size ) - { - if( CV_IS_SEQ(seq) && CV_IS_SEQ_POINT_SET(seq) && - seq->header_size == sizeof(CvPoint2DSeq) && - seq->elem_size == sizeof(int)*2 ) - { - CvPoint2DSeq* point_seq = (CvPoint2DSeq*)seq; - - cvStartWriteStruct( fs, "rect", CV_NODE_MAP + CV_NODE_FLOW ); - cvWriteInt( fs, "x", point_seq->rect.x ); - cvWriteInt( fs, "y", point_seq->rect.y ); - cvWriteInt( fs, "width", point_seq->rect.width ); - cvWriteInt( fs, "height", point_seq->rect.height ); - cvEndWriteStruct( fs ); - cvWriteInt( fs, "color", point_seq->color ); - } - else if( CV_IS_SEQ(seq) && CV_IS_SEQ_CHAIN(seq) && - CV_MAT_TYPE(seq->flags) == CV_8UC1 ) - { - CvChain* chain = (CvChain*)seq; - - cvStartWriteStruct( fs, "origin", CV_NODE_MAP + CV_NODE_FLOW ); - cvWriteInt( fs, "x", chain->origin.x ); - cvWriteInt( fs, "y", chain->origin.y ); - cvEndWriteStruct( fs ); - } - else - { - unsigned extra_size = seq->header_size - initial_header_size; - // a heuristic to provide nice defaults for sequences of int's & float's - if( extra_size % sizeof(int) == 0 ) - sprintf( header_dt_buf, "%ui", (unsigned)(extra_size/sizeof(int)) ); - else - sprintf( header_dt_buf, "%uu", extra_size ); - header_dt = header_dt_buf; - } - } - - if( header_dt ) - { - cvWriteString( fs, "header_dt", header_dt, 0 ); - cvStartWriteStruct( fs, "header_user_data", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, (uchar*)seq + sizeof(CvSeq), 1, header_dt ); - cvEndWriteStruct( fs ); - } -} - - -static char* -icvGetFormat( const CvSeq* seq, const char* dt_key, CvAttrList* attr, - int initial_elem_size, char* dt_buf ) -{ - char* dt = 0; - dt = (char*)cvAttrValue( attr, dt_key ); - - if( dt ) - { - int dt_elem_size; - dt_elem_size = icvCalcElemSize( dt, initial_elem_size ); - if( dt_elem_size != seq->elem_size ) - CV_Error( CV_StsUnmatchedSizes, - "The size of element calculated from \"dt\" and " - "the elem_size do not match" ); - } - else if( CV_MAT_TYPE(seq->flags) != 0 || seq->elem_size == 1 ) - { - if( CV_ELEM_SIZE(seq->flags) != seq->elem_size ) - CV_Error( CV_StsUnmatchedSizes, - "Size of sequence element (elem_size) is inconsistent with seq->flags" ); - dt = icvEncodeFormat( CV_MAT_TYPE(seq->flags), dt_buf ); - } - else if( seq->elem_size > initial_elem_size ) - { - unsigned extra_elem_size = seq->elem_size - initial_elem_size; - // a heuristic to provide nice defaults for sequences of int's & float's - if( extra_elem_size % sizeof(int) == 0 ) - sprintf( dt_buf, "%ui", (unsigned)(extra_elem_size/sizeof(int)) ); - else - sprintf( dt_buf, "%uu", extra_elem_size ); - dt = dt_buf; - } - - return dt; -} - - -static void -icvWriteSeq( CvFileStorage* fs, const char* name, - const void* struct_ptr, - CvAttrList attr, int level ) -{ - const CvSeq* seq = (CvSeq*)struct_ptr; - CvSeqBlock* block; - char buf[128]; - char dt_buf[128], *dt; - - assert( CV_IS_SEQ( seq )); - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_SEQ ); - - if( level >= 0 ) - cvWriteInt( fs, "level", level ); - - dt = icvGetFormat( seq, "dt", &attr, 0, dt_buf ); - - strcpy(buf, ""); - if( CV_IS_SEQ_CLOSED(seq) ) - strcat(buf, " closed"); - if( CV_IS_SEQ_HOLE(seq) ) - strcat(buf, " hole"); - if( CV_IS_SEQ_CURVE(seq) ) - strcat(buf, " curve"); - if( CV_SEQ_ELTYPE(seq) == 0 && seq->elem_size != 1 ) - strcat(buf, " untyped"); - - cvWriteString( fs, "flags", buf + (buf[0] ? 1 : 0), 1 ); - - cvWriteInt( fs, "count", seq->total ); - - cvWriteString( fs, "dt", dt, 0 ); - - icvWriteHeaderData( fs, seq, &attr, sizeof(CvSeq) ); - cvStartWriteStruct( fs, "data", CV_NODE_SEQ + CV_NODE_FLOW ); - - for( block = seq->first; block; block = block->next ) - { - cvWriteRawData( fs, block->data, block->count, dt ); - if( block == seq->first->prev ) - break; - } - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); -} - - -static void -icvWriteSeqTree( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList attr ) -{ - const CvSeq* seq = (CvSeq*)struct_ptr; - const char* recursive_value = cvAttrValue( &attr, "recursive" ); - int is_recursive = recursive_value && - strcmp(recursive_value,"0") != 0 && - strcmp(recursive_value,"false") != 0 && - strcmp(recursive_value,"False") != 0 && - strcmp(recursive_value,"FALSE") != 0; - - assert( CV_IS_SEQ( seq )); - - if( !is_recursive ) - { - icvWriteSeq( fs, name, seq, attr, -1 ); - } - else - { - CvTreeNodeIterator tree_iterator; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_SEQ_TREE ); - cvStartWriteStruct( fs, "sequences", CV_NODE_SEQ ); - cvInitTreeNodeIterator( &tree_iterator, seq, INT_MAX ); - - for(;;) - { - if( !tree_iterator.node ) - break; - icvWriteSeq( fs, 0, tree_iterator.node, attr, tree_iterator.level ); - cvNextTreeNode( &tree_iterator ); - } - - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); - } -} - - -static void* -icvReadSeq( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - CvSeq* seq; - CvSeqBlock* block; - CvFileNode *data, *header_node, *rect_node, *origin_node; - CvSeqReader reader; - int total, flags; - int elem_size, header_size = sizeof(CvSeq); - int fmt_pairs[CV_FS_MAX_FMT_PAIRS], i, fmt_pair_count; - int items_per_elem = 0; - const char* flags_str; - const char* header_dt; - const char* dt; - char* endptr = 0; - - flags_str = cvReadStringByName( fs, node, "flags", 0 ); - total = cvReadIntByName( fs, node, "count", -1 ); - dt = cvReadStringByName( fs, node, "dt", 0 ); - - if( !flags_str || total == -1 || !dt ) - CV_Error( CV_StsError, "Some of essential sequence attributes are absent" ); - - flags = CV_SEQ_MAGIC_VAL; - - if( cv_isdigit(flags_str[0]) ) - { - const int OLD_SEQ_ELTYPE_BITS = 9; - const int OLD_SEQ_ELTYPE_MASK = (1 << OLD_SEQ_ELTYPE_BITS) - 1; - const int OLD_SEQ_KIND_BITS = 3; - const int OLD_SEQ_KIND_MASK = ((1 << OLD_SEQ_KIND_BITS) - 1) << OLD_SEQ_ELTYPE_BITS; - const int OLD_SEQ_KIND_CURVE = 1 << OLD_SEQ_ELTYPE_BITS; - const int OLD_SEQ_FLAG_SHIFT = OLD_SEQ_KIND_BITS + OLD_SEQ_ELTYPE_BITS; - const int OLD_SEQ_FLAG_CLOSED = 1 << OLD_SEQ_FLAG_SHIFT; - const int OLD_SEQ_FLAG_HOLE = 8 << OLD_SEQ_FLAG_SHIFT; - - int flags0 = (int)strtol( flags_str, &endptr, 16 ); - if( endptr == flags_str || (flags0 & CV_MAGIC_MASK) != CV_SEQ_MAGIC_VAL ) - CV_Error( CV_StsError, "The sequence flags are invalid" ); - if( (flags0 & OLD_SEQ_KIND_MASK) == OLD_SEQ_KIND_CURVE ) - flags |= CV_SEQ_KIND_CURVE; - if( flags0 & OLD_SEQ_FLAG_CLOSED ) - flags |= CV_SEQ_FLAG_CLOSED; - if( flags0 & OLD_SEQ_FLAG_HOLE ) - flags |= CV_SEQ_FLAG_HOLE; - flags |= flags0 & OLD_SEQ_ELTYPE_MASK; - } - else - { - if( strstr(flags_str, "curve") ) - flags |= CV_SEQ_KIND_CURVE; - if( strstr(flags_str, "closed") ) - flags |= CV_SEQ_FLAG_CLOSED; - if( strstr(flags_str, "hole") ) - flags |= CV_SEQ_FLAG_HOLE; - if( !strstr(flags_str, "untyped") ) - { - try - { - flags |= icvDecodeSimpleFormat(dt); - } - catch(...) - { - } - } - } - - header_dt = cvReadStringByName( fs, node, "header_dt", 0 ); - header_node = cvGetFileNodeByName( fs, node, "header_user_data" ); - - if( (header_dt != 0) ^ (header_node != 0) ) - CV_Error( CV_StsError, - "One of \"header_dt\" and \"header_user_data\" is there, while the other is not" ); - - rect_node = cvGetFileNodeByName( fs, node, "rect" ); - origin_node = cvGetFileNodeByName( fs, node, "origin" ); - - if( (header_node != 0) + (rect_node != 0) + (origin_node != 0) > 1 ) - CV_Error( CV_StsError, "Only one of \"header_user_data\", \"rect\" and \"origin\" tags may occur" ); - - if( header_dt ) - { - header_size = icvCalcElemSize( header_dt, header_size ); - } - else if( rect_node ) - header_size = sizeof(CvPoint2DSeq); - else if( origin_node ) - header_size = sizeof(CvChain); - - elem_size = icvCalcElemSize( dt, 0 ); - seq = cvCreateSeq( flags, header_size, elem_size, fs->dststorage ); - - if( header_node ) - { - cvReadRawData( fs, header_node, (char*)seq + sizeof(CvSeq), header_dt ); - } - else if( rect_node ) - { - CvPoint2DSeq* point_seq = (CvPoint2DSeq*)seq; - point_seq->rect.x = cvReadIntByName( fs, rect_node, "x", 0 ); - point_seq->rect.y = cvReadIntByName( fs, rect_node, "y", 0 ); - point_seq->rect.width = cvReadIntByName( fs, rect_node, "width", 0 ); - point_seq->rect.height = cvReadIntByName( fs, rect_node, "height", 0 ); - point_seq->color = cvReadIntByName( fs, node, "color", 0 ); - } - else if( origin_node ) - { - CvChain* chain = (CvChain*)seq; - chain->origin.x = cvReadIntByName( fs, origin_node, "x", 0 ); - chain->origin.y = cvReadIntByName( fs, origin_node, "y", 0 ); - } - - cvSeqPushMulti( seq, 0, total, 0 ); - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - fmt_pair_count *= 2; - for( i = 0; i < fmt_pair_count; i += 2 ) - items_per_elem += fmt_pairs[i]; - - data = cvGetFileNodeByName( fs, node, "data" ); - if( !data ) - CV_Error( CV_StsError, "The image data is not found in file storage" ); - - if( icvFileNodeSeqLen( data ) != total*items_per_elem ) - CV_Error( CV_StsError, "The number of stored elements does not match to \"count\"" ); - - cvStartReadRawData( fs, data, &reader ); - for( block = seq->first; block; block = block->next ) - { - int delta = block->count*items_per_elem; - cvReadRawDataSlice( fs, &reader, delta, block->data, dt ); - if( block == seq->first->prev ) - break; - } - - ptr = seq; - return ptr; -} - - -static void* -icvReadSeqTree( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - CvFileNode *sequences_node = cvGetFileNodeByName( fs, node, "sequences" ); - CvSeq* sequences; - CvSeq* root = 0; - CvSeq* parent = 0; - CvSeq* prev_seq = 0; - CvSeqReader reader; - int i, total; - int prev_level = 0; - - if( !sequences_node || !CV_NODE_IS_SEQ(sequences_node->tag) ) - CV_Error( CV_StsParseError, - "opencv-sequence-tree instance should contain a field \"sequences\" that should be a sequence" ); - - sequences = sequences_node->data.seq; - total = sequences->total; - - cvStartReadSeq( sequences, &reader, 0 ); - for( i = 0; i < total; i++ ) - { - CvFileNode* elem = (CvFileNode*)reader.ptr; - CvSeq* seq; - int level; - seq = (CvSeq*)cvRead( fs, elem ); - level = cvReadIntByName( fs, elem, "level", -1 ); - if( level < 0 ) - CV_Error( CV_StsParseError, "All the sequence tree nodes should contain \"level\" field" ); - if( !root ) - root = seq; - if( level > prev_level ) - { - assert( level == prev_level + 1 ); - parent = prev_seq; - prev_seq = 0; - if( parent ) - parent->v_next = seq; - } - else if( level < prev_level ) - { - for( ; prev_level > level; prev_level-- ) - prev_seq = prev_seq->v_prev; - parent = prev_seq->v_prev; - } - seq->h_prev = prev_seq; - if( prev_seq ) - prev_seq->h_next = seq; - seq->v_prev = parent; - prev_seq = seq; - prev_level = level; - CV_NEXT_SEQ_ELEM( sequences->elem_size, reader ); - } - - ptr = root; - return ptr; -} - -/******************************* CvGraph ******************************/ - -static int -icvIsGraph( const void* ptr ) -{ - return CV_IS_GRAPH(ptr); -} - - -static void -icvReleaseGraph( void** ptr ) -{ - if( !ptr ) - CV_Error( CV_StsNullPtr, "NULL double pointer" ); - - *ptr = 0; // it's impossible now to release graph, so just clear the pointer -} - - -static void* -icvCloneGraph( const void* ptr ) -{ - return cvCloneGraph( (const CvGraph*)ptr, 0 ); -} - - -static void -icvWriteGraph( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList attr ) -{ - int* flag_buf = 0; - char* write_buf = 0; - const CvGraph* graph = (const CvGraph*)struct_ptr; - CvSeqReader reader; - char buf[128]; - int i, k, vtx_count, edge_count; - char vtx_dt_buf[128], *vtx_dt; - char edge_dt_buf[128], *edge_dt; - int write_buf_size; - - assert( CV_IS_GRAPH(graph) ); - vtx_count = cvGraphGetVtxCount( graph ); - edge_count = cvGraphGetEdgeCount( graph ); - flag_buf = (int*)cvAlloc( vtx_count*sizeof(flag_buf[0])); - - // count vertices - cvStartReadSeq( (CvSeq*)graph, &reader ); - for( i = 0, k = 0; i < graph->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - CvGraphVtx* vtx = (CvGraphVtx*)reader.ptr; - flag_buf[k] = vtx->flags; - vtx->flags = k++; - } - CV_NEXT_SEQ_ELEM( graph->elem_size, reader ); - } - - // write header - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_GRAPH ); - - cvWriteString(fs, "flags", CV_IS_GRAPH_ORIENTED(graph) ? "oriented" : "", 1); - - cvWriteInt( fs, "vertex_count", vtx_count ); - vtx_dt = icvGetFormat( (CvSeq*)graph, "vertex_dt", - &attr, sizeof(CvGraphVtx), vtx_dt_buf ); - if( vtx_dt ) - cvWriteString( fs, "vertex_dt", vtx_dt, 0 ); - - cvWriteInt( fs, "edge_count", edge_count ); - edge_dt = icvGetFormat( (CvSeq*)graph->edges, "edge_dt", - &attr, sizeof(CvGraphEdge), buf ); - sprintf( edge_dt_buf, "2if%s", edge_dt ? edge_dt : "" ); - edge_dt = edge_dt_buf; - cvWriteString( fs, "edge_dt", edge_dt, 0 ); - - icvWriteHeaderData( fs, (CvSeq*)graph, &attr, sizeof(CvGraph) ); - - write_buf_size = MAX( 3*graph->elem_size, 1 << 16 ); - write_buf_size = MAX( 3*graph->edges->elem_size, write_buf_size ); - write_buf = (char*)cvAlloc( write_buf_size ); - - // as vertices and edges are written in similar way, - // do it as a parametrized 2-iteration loop - for( k = 0; k < 2; k++ ) - { - const char* dt = k == 0 ? vtx_dt : edge_dt; - if( dt ) - { - CvSet* data = k == 0 ? (CvSet*)graph : graph->edges; - int elem_size = data->elem_size; - int write_elem_size = icvCalcElemSize( dt, 0 ); - char* src_ptr = write_buf; - int write_max = write_buf_size / write_elem_size, write_count = 0; - - // alignment of user part of the edge data following 2if - int edge_user_align = sizeof(float); - - if( k == 1 ) - { - int fmt_pairs[CV_FS_MAX_FMT_PAIRS], fmt_pair_count; - fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - if( fmt_pair_count > 2 && CV_ELEM_SIZE(fmt_pairs[2*2+1]) >= (int)sizeof(double)) - edge_user_align = sizeof(double); - } - - cvStartWriteStruct( fs, k == 0 ? "vertices" : "edges", - CV_NODE_SEQ + CV_NODE_FLOW ); - cvStartReadSeq( (CvSeq*)data, &reader ); - for( i = 0; i < data->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - if( k == 0 ) // vertices - memcpy( src_ptr, reader.ptr + sizeof(CvGraphVtx), write_elem_size ); - else - { - CvGraphEdge* edge = (CvGraphEdge*)reader.ptr; - src_ptr = (char*)cvAlignPtr( src_ptr, sizeof(int) ); - ((int*)src_ptr)[0] = edge->vtx[0]->flags; - ((int*)src_ptr)[1] = edge->vtx[1]->flags; - *(float*)(src_ptr + sizeof(int)*2) = edge->weight; - if( elem_size > (int)sizeof(CvGraphEdge) ) - { - char* src_ptr2 = (char*)cvAlignPtr( src_ptr + 2*sizeof(int) - + sizeof(float), edge_user_align ); - memcpy( src_ptr2, edge + 1, elem_size - sizeof(CvGraphEdge) ); - } - } - src_ptr += write_elem_size; - if( ++write_count >= write_max ) - { - cvWriteRawData( fs, write_buf, write_count, dt ); - write_count = 0; - src_ptr = write_buf; - } - } - CV_NEXT_SEQ_ELEM( data->elem_size, reader ); - } - - if( write_count > 0 ) - cvWriteRawData( fs, write_buf, write_count, dt ); - cvEndWriteStruct( fs ); - } - } - - cvEndWriteStruct( fs ); - - // final stage. restore the graph flags - cvStartReadSeq( (CvSeq*)graph, &reader ); - vtx_count = 0; - for( i = 0; i < graph->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - ((CvGraphVtx*)reader.ptr)->flags = flag_buf[vtx_count++]; - CV_NEXT_SEQ_ELEM( graph->elem_size, reader ); - } - - cvFree( &write_buf ); - cvFree( &flag_buf ); -} - - -static void* -icvReadGraph( CvFileStorage* fs, CvFileNode* node ) -{ - void* ptr = 0; - char* read_buf = 0; - CvGraphVtx** vtx_buf = 0; - CvGraph* graph; - CvFileNode *header_node, *vtx_node, *edge_node; - int flags, vtx_count, edge_count; - int vtx_size = sizeof(CvGraphVtx), edge_size, header_size = sizeof(CvGraph); - int src_vtx_size = 0, src_edge_size; - int fmt_pairs[CV_FS_MAX_FMT_PAIRS], fmt_pair_count; - int vtx_items_per_elem = 0, edge_items_per_elem = 0; - int edge_user_align = sizeof(float); - int read_buf_size; - int i, k; - const char* flags_str; - const char* header_dt; - const char* vtx_dt; - const char* edge_dt; - char* endptr = 0; - - flags_str = cvReadStringByName( fs, node, "flags", 0 ); - vtx_dt = cvReadStringByName( fs, node, "vertex_dt", 0 ); - edge_dt = cvReadStringByName( fs, node, "edge_dt", 0 ); - vtx_count = cvReadIntByName( fs, node, "vertex_count", -1 ); - edge_count = cvReadIntByName( fs, node, "edge_count", -1 ); - - if( !flags_str || vtx_count == -1 || edge_count == -1 || !edge_dt ) - CV_Error( CV_StsError, "Some of essential graph attributes are absent" ); - - flags = CV_SET_MAGIC_VAL + CV_GRAPH; - - if( isxdigit(flags_str[0]) ) - { - const int OLD_SEQ_ELTYPE_BITS = 9; - const int OLD_SEQ_KIND_BITS = 3; - const int OLD_SEQ_FLAG_SHIFT = OLD_SEQ_KIND_BITS + OLD_SEQ_ELTYPE_BITS; - const int OLD_GRAPH_FLAG_ORIENTED = 1 << OLD_SEQ_FLAG_SHIFT; - - int flags0 = (int)strtol( flags_str, &endptr, 16 ); - if( endptr == flags_str || (flags0 & CV_MAGIC_MASK) != CV_SET_MAGIC_VAL ) - CV_Error( CV_StsError, "The sequence flags are invalid" ); - if( flags0 & OLD_GRAPH_FLAG_ORIENTED ) - flags |= CV_GRAPH_FLAG_ORIENTED; - } - else - { - if( strstr(flags_str, "oriented") ) - flags |= CV_GRAPH_FLAG_ORIENTED; - } - - header_dt = cvReadStringByName( fs, node, "header_dt", 0 ); - header_node = cvGetFileNodeByName( fs, node, "header_user_data" ); - - if( (header_dt != 0) ^ (header_node != 0) ) - CV_Error( CV_StsError, - "One of \"header_dt\" and \"header_user_data\" is there, while the other is not" ); - - if( header_dt ) - header_size = icvCalcElemSize( header_dt, header_size ); - - if( vtx_dt ) - { - src_vtx_size = icvCalcElemSize( vtx_dt, 0 ); - vtx_size = icvCalcElemSize( vtx_dt, vtx_size ); - fmt_pair_count = icvDecodeFormat( edge_dt, - fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - fmt_pair_count *= 2; - for( i = 0; i < fmt_pair_count; i += 2 ) - vtx_items_per_elem += fmt_pairs[i]; - } - - { - char dst_edge_dt_buf[128]; - const char* dst_edge_dt = 0; - - fmt_pair_count = icvDecodeFormat( edge_dt, - fmt_pairs, CV_FS_MAX_FMT_PAIRS ); - if( fmt_pair_count < 2 || - fmt_pairs[0] != 2 || fmt_pairs[1] != CV_32S || - fmt_pairs[2] < 1 || fmt_pairs[3] != CV_32F ) - CV_Error( CV_StsBadArg, - "Graph edges should start with 2 integers and a float" ); - - // alignment of user part of the edge data following 2if - if( fmt_pair_count > 2 && CV_ELEM_SIZE(fmt_pairs[5]) >= (int)sizeof(double)) - edge_user_align = sizeof(double); - - fmt_pair_count *= 2; - for( i = 0; i < fmt_pair_count; i += 2 ) - edge_items_per_elem += fmt_pairs[i]; - - if( edge_dt[2] == 'f' || (edge_dt[2] == '1' && edge_dt[3] == 'f') ) - dst_edge_dt = edge_dt + 3 + cv_isdigit(edge_dt[2]); - else - { - int val = (int)strtol( edge_dt + 2, &endptr, 10 ); - sprintf( dst_edge_dt_buf, "%df%s", val-1, endptr ); - dst_edge_dt = dst_edge_dt_buf; - } - - edge_size = icvCalcElemSize( dst_edge_dt, sizeof(CvGraphEdge) ); - src_edge_size = icvCalcElemSize( edge_dt, 0 ); - } - - graph = cvCreateGraph( flags, header_size, vtx_size, edge_size, fs->dststorage ); - - if( header_node ) - cvReadRawData( fs, header_node, (char*)graph + sizeof(CvGraph), header_dt ); - - read_buf_size = MAX( src_vtx_size*3, 1 << 16 ); - read_buf_size = MAX( src_edge_size*3, read_buf_size ); - read_buf = (char*)cvAlloc( read_buf_size ); - vtx_buf = (CvGraphVtx**)cvAlloc( vtx_count * sizeof(vtx_buf[0]) ); - - vtx_node = cvGetFileNodeByName( fs, node, "vertices" ); - edge_node = cvGetFileNodeByName( fs, node, "edges" ); - if( !edge_node ) - CV_Error( CV_StsBadArg, "No edges data" ); - if( vtx_dt && !vtx_node ) - CV_Error( CV_StsBadArg, "No vertices data" ); - - // as vertices and edges are read in similar way, - // do it as a parametrized 2-iteration loop - for( k = 0; k < 2; k++ ) - { - const char* dt = k == 0 ? vtx_dt : edge_dt; - int elem_size = k == 0 ? vtx_size : edge_size; - int src_elem_size = k == 0 ? src_vtx_size : src_edge_size; - int items_per_elem = k == 0 ? vtx_items_per_elem : edge_items_per_elem; - int elem_count = k == 0 ? vtx_count : edge_count; - char* dst_ptr = read_buf; - int read_max = read_buf_size /MAX(src_elem_size, 1), read_count = 0; - CvSeqReader reader; - if(dt) - cvStartReadRawData( fs, k == 0 ? vtx_node : edge_node, &reader ); - - for( i = 0; i < elem_count; i++ ) - { - if( read_count == 0 && dt ) - { - int count = MIN( elem_count - i, read_max )*items_per_elem; - cvReadRawDataSlice( fs, &reader, count, read_buf, dt ); - read_count = count; - dst_ptr = read_buf; - } - - if( k == 0 ) - { - CvGraphVtx* vtx; - cvGraphAddVtx( graph, 0, &vtx ); - vtx_buf[i] = vtx; - if( dt ) - memcpy( vtx + 1, dst_ptr, src_elem_size ); - } - else - { - CvGraphEdge* edge = 0; - int vtx1 = ((int*)dst_ptr)[0]; - int vtx2 = ((int*)dst_ptr)[1]; - int result; - - if( (unsigned)vtx1 >= (unsigned)vtx_count || - (unsigned)vtx2 >= (unsigned)vtx_count ) - CV_Error( CV_StsOutOfRange, - "Some of stored vertex indices are out of range" ); - - result = cvGraphAddEdgeByPtr( graph, - vtx_buf[vtx1], vtx_buf[vtx2], 0, &edge ); - - if( result == 0 ) - CV_Error( CV_StsBadArg, "Duplicated edge has occured" ); - - edge->weight = *(float*)(dst_ptr + sizeof(int)*2); - if( elem_size > (int)sizeof(CvGraphEdge) ) - { - char* dst_ptr2 = (char*)cvAlignPtr( dst_ptr + sizeof(int)*2 + - sizeof(float), edge_user_align ); - memcpy( edge + 1, dst_ptr2, elem_size - sizeof(CvGraphEdge) ); - } - } - - dst_ptr += src_elem_size; - read_count--; - } - } - - ptr = graph; - cvFree( &read_buf ); - cvFree( &vtx_buf ); - - return ptr; -} - -/****************************************************************************************\ -* RTTI Functions * -\****************************************************************************************/ - -CvTypeInfo *CvType::first = 0, *CvType::last = 0; - -CvType::CvType( const char* type_name, - CvIsInstanceFunc is_instance, CvReleaseFunc release, - CvReadFunc read, CvWriteFunc write, CvCloneFunc clone ) -{ - CvTypeInfo _info; - _info.flags = 0; - _info.header_size = sizeof(_info); - _info.type_name = type_name; - _info.prev = _info.next = 0; - _info.is_instance = is_instance; - _info.release = release; - _info.clone = clone; - _info.read = read; - _info.write = write; - - cvRegisterType( &_info ); - info = first; -} - - -CvType::~CvType() -{ - cvUnregisterType( info->type_name ); -} - - -CvType seq_type( CV_TYPE_NAME_SEQ, icvIsSeq, icvReleaseSeq, icvReadSeq, - icvWriteSeqTree /* this is the entry point for - writing a single sequence too */, icvCloneSeq ); - -CvType seq_tree_type( CV_TYPE_NAME_SEQ_TREE, icvIsSeq, icvReleaseSeq, - icvReadSeqTree, icvWriteSeqTree, icvCloneSeq ); - -CvType seq_graph_type( CV_TYPE_NAME_GRAPH, icvIsGraph, icvReleaseGraph, - icvReadGraph, icvWriteGraph, icvCloneGraph ); - -CvType sparse_mat_type( CV_TYPE_NAME_SPARSE_MAT, icvIsSparseMat, - (CvReleaseFunc)cvReleaseSparseMat, icvReadSparseMat, - icvWriteSparseMat, (CvCloneFunc)cvCloneSparseMat ); - -CvType image_type( CV_TYPE_NAME_IMAGE, icvIsImage, (CvReleaseFunc)cvReleaseImage, - icvReadImage, icvWriteImage, (CvCloneFunc)cvCloneImage ); - -CvType mat_type( CV_TYPE_NAME_MAT, icvIsMat, (CvReleaseFunc)cvReleaseMat, - icvReadMat, icvWriteMat, (CvCloneFunc)cvCloneMat ); - -CvType matnd_type( CV_TYPE_NAME_MATND, icvIsMatND, (CvReleaseFunc)cvReleaseMatND, - icvReadMatND, icvWriteMatND, (CvCloneFunc)cvCloneMatND ); - -CV_IMPL void -cvRegisterType( const CvTypeInfo* _info ) -{ - CvTypeInfo* info = 0; - int i, len; - char c; - - //if( !CvType::first ) - // icvCreateStandardTypes(); - - if( !_info || _info->header_size != sizeof(CvTypeInfo) ) - CV_Error( CV_StsBadSize, "Invalid type info" ); - - if( !_info->is_instance || !_info->release || - !_info->read || !_info->write ) - CV_Error( CV_StsNullPtr, - "Some of required function pointers " - "(is_instance, release, read or write) are NULL"); - - c = _info->type_name[0]; - if( !cv_isalpha(c) && c != '_' ) - CV_Error( CV_StsBadArg, "Type name should start with a letter or _" ); - - len = (int)strlen(_info->type_name); - - for( i = 0; i < len; i++ ) - { - c = _info->type_name[i]; - if( !cv_isalnum(c) && c != '-' && c != '_' ) - CV_Error( CV_StsBadArg, - "Type name should contain only letters, digits, - and _" ); - } - - info = (CvTypeInfo*)cvAlloc( sizeof(*info) + len + 1 ); - - *info = *_info; - info->type_name = (char*)(info + 1); - memcpy( (char*)info->type_name, _info->type_name, len + 1 ); - - info->flags = 0; - info->next = CvType::first; - info->prev = 0; - if( CvType::first ) - CvType::first->prev = info; - else - CvType::last = info; - CvType::first = info; -} - - -CV_IMPL void -cvUnregisterType( const char* type_name ) -{ - CvTypeInfo* info; - - info = cvFindType( type_name ); - if( info ) - { - if( info->prev ) - info->prev->next = info->next; - else - CvType::first = info->next; - - if( info->next ) - info->next->prev = info->prev; - else - CvType::last = info->prev; - - if( !CvType::first || !CvType::last ) - CvType::first = CvType::last = 0; - - cvFree( &info ); - } -} - - -CV_IMPL CvTypeInfo* -cvFirstType( void ) -{ - return CvType::first; -} - - -CV_IMPL CvTypeInfo* -cvFindType( const char* type_name ) -{ - CvTypeInfo* info = 0; - - if (type_name) - for( info = CvType::first; info != 0; info = info->next ) - if( strcmp( info->type_name, type_name ) == 0 ) - break; - - return info; -} - - -CV_IMPL CvTypeInfo* -cvTypeOf( const void* struct_ptr ) -{ - CvTypeInfo* info = 0; - - if( struct_ptr ) - { - for( info = CvType::first; info != 0; info = info->next ) - if( info->is_instance( struct_ptr )) - break; - } - - return info; -} - - -/* universal functions */ -CV_IMPL void -cvRelease( void** struct_ptr ) -{ - CvTypeInfo* info; - - if( !struct_ptr ) - CV_Error( CV_StsNullPtr, "NULL double pointer" ); - - if( *struct_ptr ) - { - info = cvTypeOf( *struct_ptr ); - if( !info ) - CV_Error( CV_StsError, "Unknown object type" ); - if( !info->release ) - CV_Error( CV_StsError, "release function pointer is NULL" ); - - info->release( struct_ptr ); - *struct_ptr = 0; - } -} - - -void* cvClone( const void* struct_ptr ) -{ - void* struct_copy = 0; - CvTypeInfo* info; - - if( !struct_ptr ) - CV_Error( CV_StsNullPtr, "NULL structure pointer" ); - - info = cvTypeOf( struct_ptr ); - if( !info ) - CV_Error( CV_StsError, "Unknown object type" ); - if( !info->clone ) - CV_Error( CV_StsError, "clone function pointer is NULL" ); - - struct_copy = info->clone( struct_ptr ); - return struct_copy; -} - - -/* reads matrix, image, sequence, graph etc. */ -CV_IMPL void* -cvRead( CvFileStorage* fs, CvFileNode* node, CvAttrList* list ) -{ - void* obj = 0; - CV_CHECK_FILE_STORAGE( fs ); - - if( !node ) - return 0; - - if( !CV_NODE_IS_USER(node->tag) || !node->info ) - CV_Error( CV_StsError, "The node does not represent a user object (unknown type?)" ); - - obj = node->info->read( fs, node ); - if( list ) - *list = cvAttrList(0,0); - - return obj; -} - - -/* writes matrix, image, sequence, graph etc. */ -CV_IMPL void -cvWrite( CvFileStorage* fs, const char* name, - const void* ptr, CvAttrList attributes ) -{ - CvTypeInfo* info; - - CV_CHECK_OUTPUT_FILE_STORAGE( fs ); - - if( !ptr ) - CV_Error( CV_StsNullPtr, "Null pointer to the written object" ); - - info = cvTypeOf( ptr ); - if( !info ) - CV_Error( CV_StsBadArg, "Unknown object" ); - - if( !info->write ) - CV_Error( CV_StsBadArg, "The object does not have write function" ); - - info->write( fs, name, ptr, attributes ); -} - - -/* simple API for reading/writing data */ -CV_IMPL void -cvSave( const char* filename, const void* struct_ptr, - const char* _name, const char* comment, CvAttrList attributes ) -{ - CvFileStorage* fs = 0; - - if( !struct_ptr ) - CV_Error( CV_StsNullPtr, "NULL object pointer" ); - - fs = cvOpenFileStorage( filename, 0, CV_STORAGE_WRITE ); - if( !fs ) - CV_Error( CV_StsError, "Could not open the file storage. Check the path and permissions" ); - - cv::string name = _name ? cv::string(_name) : cv::FileStorage::getDefaultObjectName(filename); - - if( comment ) - cvWriteComment( fs, comment, 0 ); - cvWrite( fs, name.c_str(), struct_ptr, attributes ); - cvReleaseFileStorage( &fs ); -} - -CV_IMPL void* -cvLoad( const char* filename, CvMemStorage* memstorage, - const char* name, const char** _real_name ) -{ - void* ptr = 0; - const char* real_name = 0; - cv::FileStorage fs(cvOpenFileStorage(filename, memstorage, CV_STORAGE_READ)); - - CvFileNode* node = 0; - - if( !fs.isOpened() ) - return 0; - - if( name ) - { - node = cvGetFileNodeByName( *fs, 0, name ); - } - else - { - int i, k; - for( k = 0; k < (*fs)->roots->total; k++ ) - { - CvSeq* seq; - CvSeqReader reader; - - node = (CvFileNode*)cvGetSeqElem( (*fs)->roots, k ); - if( !CV_NODE_IS_MAP( node->tag )) - return 0; - seq = node->data.seq; - node = 0; - - cvStartReadSeq( seq, &reader, 0 ); - - // find the first element in the map - for( i = 0; i < seq->total; i++ ) - { - if( CV_IS_SET_ELEM( reader.ptr )) - { - node = (CvFileNode*)reader.ptr; - goto stop_search; - } - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - } - -stop_search: - ; - } - - if( !node ) - CV_Error( CV_StsObjectNotFound, "Could not find the/an object in file storage" ); - - real_name = cvGetFileNodeName( node ); - ptr = cvRead( *fs, node, 0 ); - - // sanity check - if( !memstorage && (CV_IS_SEQ( ptr ) || CV_IS_SET( ptr )) ) - CV_Error( CV_StsNullPtr, - "NULL memory storage is passed - the loaded dynamic structure can not be stored" ); - - if( cvGetErrStatus() < 0 ) - { - cvRelease( (void**)&ptr ); - real_name = 0; - } - - if( _real_name) - { - if (real_name) - { - *_real_name = (const char*)cvAlloc(strlen(real_name)); - memcpy((void*)*_real_name, real_name, strlen(real_name)); - } else { - *_real_name = 0; - } - } - - return ptr; -} - - -///////////////////////// new C++ interface for CvFileStorage /////////////////////////// - -namespace cv -{ - -static void getElemSize( const string& fmt, size_t& elemSize, size_t& cn ) -{ - const char* dt = fmt.c_str(); - cn = 1; - if( cv_isdigit(dt[0]) ) - { - cn = dt[0] - '0'; - dt++; - } - char c = dt[0]; - elemSize = cn*(c == 'u' || c == 'c' ? sizeof(uchar) : c == 'w' || c == 's' ? sizeof(ushort) : - c == 'i' ? sizeof(int) : c == 'f' ? sizeof(float) : c == 'd' ? sizeof(double) : - c == 'r' ? sizeof(void*) : (size_t)0); -} - -FileStorage::FileStorage() -{ - state = UNDEFINED; -} - -FileStorage::FileStorage(const string& filename, int flags, const string& encoding) -{ - state = UNDEFINED; - open( filename, flags, encoding ); -} - -FileStorage::FileStorage(CvFileStorage* _fs) -{ - fs = Ptr(_fs); - state = _fs ? NAME_EXPECTED + INSIDE_MAP : UNDEFINED; -} - -FileStorage::~FileStorage() -{ - while( structs.size() > 0 ) - { - cvEndWriteStruct(fs); - structs.pop_back(); - } -} - -bool FileStorage::open(const string& filename, int flags, const string& encoding) -{ - release(); - fs = Ptr(cvOpenFileStorage( filename.c_str(), 0, flags, - !encoding.empty() ? encoding.c_str() : 0)); - bool ok = isOpened(); - state = ok ? NAME_EXPECTED + INSIDE_MAP : UNDEFINED; - return ok; -} - -bool FileStorage::isOpened() const -{ - return !fs.empty() && fs.obj->is_opened; -} - -void FileStorage::release() -{ - fs.release(); - structs.clear(); - state = UNDEFINED; -} - -string FileStorage::releaseAndGetString() -{ - string buf; - buf.reserve(16); // HACK: Work around for compiler bug - if( fs.obj && fs.obj->outbuf ) - icvClose(fs.obj, &buf); - - release(); - return buf; -} - -FileNode FileStorage::root(int streamidx) const -{ - return isOpened() ? FileNode(fs, cvGetRootFileNode(fs, streamidx)) : FileNode(); -} - -FileStorage& operator << (FileStorage& fs, const string& str) -{ - enum { NAME_EXPECTED = FileStorage::NAME_EXPECTED, - VALUE_EXPECTED = FileStorage::VALUE_EXPECTED, - INSIDE_MAP = FileStorage::INSIDE_MAP }; - const char* _str = str.c_str(); - if( !fs.isOpened() || !_str ) - return fs; - if( *_str == '}' || *_str == ']' ) - { - if( fs.structs.empty() ) - CV_Error_( CV_StsError, ("Extra closing '%c'", *_str) ); - if( (*_str == ']' ? '[' : '{') != fs.structs.back() ) - CV_Error_( CV_StsError, - ("The closing '%c' does not match the opening '%c'", *_str, fs.structs.back())); - fs.structs.pop_back(); - fs.state = fs.structs.empty() || fs.structs.back() == '{' ? - INSIDE_MAP + NAME_EXPECTED : VALUE_EXPECTED; - cvEndWriteStruct( *fs ); - fs.elname = string(); - } - else if( fs.state == NAME_EXPECTED + INSIDE_MAP ) - { - if( !cv_isalpha(*_str) ) - CV_Error_( CV_StsError, ("Incorrect element name %s", _str) ); - fs.elname = str; - fs.state = VALUE_EXPECTED + INSIDE_MAP; - } - else if( (fs.state & 3) == VALUE_EXPECTED ) - { - if( *_str == '{' || *_str == '[' ) - { - fs.structs.push_back(*_str); - int flags = *_str++ == '{' ? CV_NODE_MAP : CV_NODE_SEQ; - fs.state = flags == CV_NODE_MAP ? INSIDE_MAP + - NAME_EXPECTED : VALUE_EXPECTED; - if( *_str == ':' ) - { - flags |= CV_NODE_FLOW; - _str++; - } - cvStartWriteStruct( *fs, fs.elname.size() > 0 ? fs.elname.c_str() : 0, - flags, *_str ? _str : 0 ); - fs.elname = string(); - } - else - { - write( fs, fs.elname, (_str[0] == '\\' && (_str[1] == '{' || _str[1] == '}' || - _str[1] == '[' || _str[1] == ']')) ? string(_str+1) : str ); - if( fs.state == INSIDE_MAP + VALUE_EXPECTED ) - fs.state = INSIDE_MAP + NAME_EXPECTED; - } - } - else - CV_Error( CV_StsError, "Invalid fs.state" ); - return fs; -} - - -void FileStorage::writeRaw( const string& fmt, const uchar* vec, size_t len ) -{ - if( !isOpened() ) - return; - size_t elemSize, cn; - getElemSize( fmt, elemSize, cn ); - CV_Assert( len % elemSize == 0 ); - cvWriteRawData( fs, vec, (int)(len/elemSize), fmt.c_str()); -} - - -void FileStorage::writeObj( const string& name, const void* obj ) -{ - if( !isOpened() ) - return; - cvWrite( fs, name.size() > 0 ? name.c_str() : 0, obj ); -} - - -FileNode FileStorage::operator[](const string& nodename) const -{ - return FileNode(fs, cvGetFileNodeByName(fs, 0, nodename.c_str())); -} - -FileNode FileStorage::operator[](const char* nodename) const -{ - return FileNode(fs, cvGetFileNodeByName(fs, 0, nodename)); -} - -FileNode FileNode::operator[](const string& nodename) const -{ - return FileNode(fs, cvGetFileNodeByName(fs, node, nodename.c_str())); -} - -FileNode FileNode::operator[](const char* nodename) const -{ - return FileNode(fs, cvGetFileNodeByName(fs, node, nodename)); -} - -FileNode FileNode::operator[](int i) const -{ - return isSeq() ? FileNode(fs, (CvFileNode*)cvGetSeqElem(node->data.seq, i)) : - i == 0 ? *this : FileNode(); -} - -string FileNode::name() const -{ - const char* str; - return !node || (str = cvGetFileNodeName(node)) == 0 ? string() : string(str); -} - -void* FileNode::readObj() const -{ - if( !fs || !node ) - return 0; - return cvRead( (CvFileStorage*)fs, (CvFileNode*)node ); -} - -FileNodeIterator::FileNodeIterator() -{ - fs = 0; - container = 0; - reader.ptr = 0; - remaining = 0; -} - -FileNodeIterator::FileNodeIterator(const CvFileStorage* _fs, - const CvFileNode* _node, size_t _ofs) -{ - if( _fs && _node && CV_NODE_TYPE(_node->tag) != CV_NODE_NONE ) - { - int node_type = _node->tag & FileNode::TYPE_MASK; - fs = _fs; - container = _node; - if( !(_node->tag & FileNode::USER) && (node_type == FileNode::SEQ || node_type == FileNode::MAP) ) - { - cvStartReadSeq( _node->data.seq, &reader ); - remaining = FileNode(_fs, _node).size(); - } - else - { - reader.ptr = (schar*)_node; - reader.seq = 0; - remaining = 1; - } - (*this) += (int)_ofs; - } - else - { - fs = 0; - container = 0; - reader.ptr = 0; - remaining = 0; - } -} - -FileNodeIterator::FileNodeIterator(const FileNodeIterator& it) -{ - fs = it.fs; - container = it.container; - reader = it.reader; - remaining = it.remaining; -} - -FileNodeIterator& FileNodeIterator::operator ++() -{ - if( remaining > 0 ) - { - if( reader.seq ) - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - remaining--; - } - return *this; -} - -FileNodeIterator FileNodeIterator::operator ++(int) -{ - FileNodeIterator it = *this; - ++(*this); - return it; -} - -FileNodeIterator& FileNodeIterator::operator --() -{ - if( remaining < FileNode(fs, container).size() ) - { - if( reader.seq ) - CV_PREV_SEQ_ELEM( reader.seq->elem_size, reader ); - remaining++; - } - return *this; -} - -FileNodeIterator FileNodeIterator::operator --(int) -{ - FileNodeIterator it = *this; - --(*this); - return it; -} - -FileNodeIterator& FileNodeIterator::operator += (int ofs) -{ - if( ofs == 0 ) - return *this; - if( ofs > 0 ) - ofs = std::min(ofs, (int)remaining); - else - { - size_t count = FileNode(fs, container).size(); - ofs = (int)(remaining - std::min(remaining - ofs, count)); - } - remaining -= ofs; - if( reader.seq ) - cvSetSeqReaderPos( &reader, ofs, 1 ); - return *this; -} - -FileNodeIterator& FileNodeIterator::operator -= (int ofs) -{ - return operator += (-ofs); -} - - -FileNodeIterator& FileNodeIterator::readRaw( const string& fmt, uchar* vec, size_t maxCount ) -{ - if( fs && container && remaining > 0 ) - { - size_t elem_size, cn; - getElemSize( fmt, elem_size, cn ); - CV_Assert( elem_size > 0 ); - size_t count = std::min(remaining, maxCount); - - if( reader.seq ) - { - cvReadRawDataSlice( fs, &reader, (int)count, vec, fmt.c_str() ); - remaining -= count*cn; - } - else - { - cvReadRawData( fs, container, vec, fmt.c_str() ); - remaining = 0; - } - } - return *this; -} - - -void write( FileStorage& fs, const string& name, int value ) -{ cvWriteInt( *fs, name.size() ? name.c_str() : 0, value ); } - -void write( FileStorage& fs, const string& name, float value ) -{ cvWriteReal( *fs, name.size() ? name.c_str() : 0, value ); } - -void write( FileStorage& fs, const string& name, double value ) -{ cvWriteReal( *fs, name.size() ? name.c_str() : 0, value ); } - -void write( FileStorage& fs, const string& name, const string& value ) -{ cvWriteString( *fs, name.size() ? name.c_str() : 0, value.c_str() ); } - -void writeScalar(FileStorage& fs, int value ) -{ cvWriteInt( *fs, 0, value ); } - -void writeScalar(FileStorage& fs, float value ) -{ cvWriteReal( *fs, 0, value ); } - -void writeScalar(FileStorage& fs, double value ) -{ cvWriteReal( *fs, 0, value ); } - -void writeScalar(FileStorage& fs, const string& value ) -{ cvWriteString( *fs, 0, value.c_str() ); } - - -void write( FileStorage& fs, const string& name, const Mat& value ) -{ - if( value.dims <= 2 ) - { - CvMat mat = value; - cvWrite( *fs, name.size() ? name.c_str() : 0, &mat ); - } - else - { - CvMatND mat = value; - cvWrite( *fs, name.size() ? name.c_str() : 0, &mat ); - } -} - -// TODO: the 4 functions below need to be implemented more efficiently -void write( FileStorage& fs, const string& name, const SparseMat& value ) -{ - Ptr mat = (CvSparseMat*)value; - cvWrite( *fs, name.size() ? name.c_str() : 0, mat ); -} - - -WriteStructContext::WriteStructContext(FileStorage& _fs, const string& name, - int flags, const string& typeName) : fs(&_fs) -{ - cvStartWriteStruct(**fs, !name.empty() ? name.c_str() : 0, flags, - !typeName.empty() ? typeName.c_str() : 0); -} - -WriteStructContext::~WriteStructContext() { cvEndWriteStruct(**fs); } - - -void read( const FileNode& node, Mat& mat, const Mat& default_mat ) -{ - if( node.empty() ) - { - default_mat.copyTo(mat); - return; - } - void* obj = cvRead((CvFileStorage*)node.fs, (CvFileNode*)*node); - if(CV_IS_MAT_HDR_Z(obj)) - { - Mat((const CvMat*)obj).copyTo(mat); - cvReleaseMat((CvMat**)&obj); - } - else if(CV_IS_MATND_HDR(obj)) - { - Mat((const CvMatND*)obj).copyTo(mat); - cvReleaseMatND((CvMatND**)&obj); - } - else - { - cvRelease(&obj); - CV_Error(CV_StsBadArg, "Unknown array type"); - } -} - -void read( const FileNode& node, SparseMat& mat, const SparseMat& default_mat ) -{ - if( node.empty() ) - { - default_mat.copyTo(mat); - return; - } - Ptr m = (CvSparseMat*)cvRead((CvFileStorage*)node.fs, (CvFileNode*)*node); - CV_Assert(CV_IS_SPARSE_MAT(m)); - SparseMat(m).copyTo(mat); -} - -} - -/* End of file. */ diff --git a/modules/core/src/precomp.hpp b/modules/core/src/precomp.hpp deleted file mode 100644 index c53224e..0000000 --- a/modules/core/src/precomp.hpp +++ /dev/null @@ -1,204 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/core/core.hpp" -#include "opencv2/core/core_c.h" -#include "opencv2/core/internal.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_TEGRA_OPTIMIZATION -#include "opencv2/core/core_tegra.hpp" -#else -#define GET_OPTIMIZED(func) (func) -#endif - -namespace cv -{ - -// -128.f ... 255.f -extern const float g_8x32fTab[]; -#define CV_8TO32F(x) cv::g_8x32fTab[(x)+128] - -extern const ushort g_8x16uSqrTab[]; -#define CV_SQR_8U(x) cv::g_8x16uSqrTab[(x)+255] - -extern const char* g_HersheyGlyphs[]; - -extern const uchar g_Saturate8u[]; -#define CV_FAST_CAST_8U(t) (assert(-256 <= (t) && (t) <= 512), cv::g_Saturate8u[(t)+256]) -#define CV_MIN_8U(a,b) ((a) - CV_FAST_CAST_8U((a) - (b))) -#define CV_MAX_8U(a,b) ((a) + CV_FAST_CAST_8U((b) - (a))) - - -#if defined WIN32 || defined _WIN32 -void deleteThreadAllocData(); -void deleteThreadRNGData(); -#endif - -template struct OpAdd -{ - typedef T1 type1; - typedef T2 type2; - typedef T3 rtype; - T3 operator ()(const T1 a, const T2 b) const { return saturate_cast(a + b); } -}; - -template struct OpSub -{ - typedef T1 type1; - typedef T2 type2; - typedef T3 rtype; - T3 operator ()(const T1 a, const T2 b) const { return saturate_cast(a - b); } -}; - -template struct OpRSub -{ - typedef T1 type1; - typedef T2 type2; - typedef T3 rtype; - T3 operator ()(const T1 a, const T2 b) const { return saturate_cast(b - a); } -}; - -template struct OpMin -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator ()(const T a, const T b) const { return std::min(a, b); } -}; - -template struct OpMax -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator ()(const T a, const T b) const { return std::max(a, b); } -}; - -inline Size getContinuousSize( const Mat& m1, int widthScale=1 ) -{ - return m1.isContinuous() ? Size(m1.cols*m1.rows*widthScale, 1) : - Size(m1.cols*widthScale, m1.rows); -} - -inline Size getContinuousSize( const Mat& m1, const Mat& m2, int widthScale=1 ) -{ - return (m1.flags & m2.flags & Mat::CONTINUOUS_FLAG) != 0 ? - Size(m1.cols*m1.rows*widthScale, 1) : Size(m1.cols*widthScale, m1.rows); -} - -inline Size getContinuousSize( const Mat& m1, const Mat& m2, - const Mat& m3, int widthScale=1 ) -{ - return (m1.flags & m2.flags & m3.flags & Mat::CONTINUOUS_FLAG) != 0 ? - Size(m1.cols*m1.rows*widthScale, 1) : Size(m1.cols*widthScale, m1.rows); -} - -inline Size getContinuousSize( const Mat& m1, const Mat& m2, - const Mat& m3, const Mat& m4, - int widthScale=1 ) -{ - return (m1.flags & m2.flags & m3.flags & m4.flags & Mat::CONTINUOUS_FLAG) != 0 ? - Size(m1.cols*m1.rows*widthScale, 1) : Size(m1.cols*widthScale, m1.rows); -} - -inline Size getContinuousSize( const Mat& m1, const Mat& m2, - const Mat& m3, const Mat& m4, - const Mat& m5, int widthScale=1 ) -{ - return (m1.flags & m2.flags & m3.flags & m4.flags & m5.flags & Mat::CONTINUOUS_FLAG) != 0 ? - Size(m1.cols*m1.rows*widthScale, 1) : Size(m1.cols*widthScale, m1.rows); -} - -struct NoVec -{ - size_t operator()(const void*, const void*, void*, size_t) const { return 0; } -}; - -extern volatile bool USE_SSE2; -extern volatile bool USE_SSE4_2; -extern volatile bool USE_AVX; - -enum { BLOCK_SIZE = 1024 }; - -#ifdef HAVE_IPP -static inline IppiSize ippiSize(int width, int height) { IppiSize sz = { width, height}; return sz; } -static inline IppiSize ippiSize(Size _sz) { IppiSize sz = { _sz.width, _sz.height}; return sz; } -#endif - -#if defined HAVE_IPP && (IPP_VERSION_MAJOR >= 7) -#define ARITHM_USE_IPP 1 -#define IF_IPP(then_call, else_call) then_call -#else -#define ARITHM_USE_IPP 0 -#define IF_IPP(then_call, else_call) else_call -#endif - -inline bool checkScalar(const Mat& sc, int atype, int sckind, int akind) -{ - if( sc.dims > 2 || (sc.cols != 1 && sc.rows != 1) || !sc.isContinuous() ) - return false; - int cn = CV_MAT_CN(atype); - if( akind == _InputArray::MATX && sckind != _InputArray::MATX ) - return false; - return sc.size() == Size(1, 1) || sc.size() == Size(1, cn) || sc.size() == Size(cn, 1) || - (sc.size() == Size(1, 4) && sc.type() == CV_64F && cn <= 4); -} - -void convertAndUnrollScalar( const Mat& sc, int buftype, uchar* scbuf, size_t blocksize ); - -} - -#endif /*_CXCORE_INTERNAL_H_*/ diff --git a/modules/core/src/rand.cpp b/modules/core/src/rand.cpp deleted file mode 100644 index 54bb753..0000000 --- a/modules/core/src/rand.cpp +++ /dev/null @@ -1,1032 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// Filling CvMat/IplImage instances with random numbers -// -// */ - -#include "precomp.hpp" - -#if defined WIN32 || defined WINCE - #include - #undef small - #undef min - #undef max - #undef abs -#endif - -#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP) - #include "emmintrin.h" -#endif - -namespace cv -{ - -///////////////////////////// Functions Declaration ////////////////////////////////////// - -/* - Multiply-with-carry generator is used here: - temp = ( A*X(n) + carry ) - X(n+1) = temp mod (2^32) - carry = temp / (2^32) -*/ - -#define RNG_NEXT(x) ((uint64)(unsigned)(x)*CV_RNG_COEFF + ((x) >> 32)) - -/***************************************************************************************\ -* Pseudo-Random Number Generators (PRNGs) * -\***************************************************************************************/ - -template static void -randBits_( T* arr, int len, uint64* state, const Vec2i* p, bool small_flag ) -{ - uint64 temp = *state; - int i; - - if( !small_flag ) - { - for( i = 0; i <= len - 4; i += 4 ) - { - int t0, t1; - - temp = RNG_NEXT(temp); - t0 = ((int)temp & p[i][0]) + p[i][1]; - temp = RNG_NEXT(temp); - t1 = ((int)temp & p[i+1][0]) + p[i+1][1]; - arr[i] = saturate_cast(t0); - arr[i+1] = saturate_cast(t1); - - temp = RNG_NEXT(temp); - t0 = ((int)temp & p[i+2][0]) + p[i+2][1]; - temp = RNG_NEXT(temp); - t1 = ((int)temp & p[i+3][0]) + p[i+3][1]; - arr[i+2] = saturate_cast(t0); - arr[i+3] = saturate_cast(t1); - } - } - else - { - for( i = 0; i <= len - 4; i += 4 ) - { - int t0, t1, t; - temp = RNG_NEXT(temp); - t = (int)temp; - t0 = (t & p[i][0]) + p[i][1]; - t1 = ((t >> 8) & p[i+1][0]) + p[i+1][1]; - arr[i] = saturate_cast(t0); - arr[i+1] = saturate_cast(t1); - - t0 = ((t >> 16) & p[i+2][0]) + p[i+2][1]; - t1 = ((t >> 24) & p[i+3][0]) + p[i+3][1]; - arr[i+2] = saturate_cast(t0); - arr[i+3] = saturate_cast(t1); - } - } - - for( ; i < len; i++ ) - { - int t0; - temp = RNG_NEXT(temp); - - t0 = ((int)temp & p[i][0]) + p[i][1]; - arr[i] = saturate_cast(t0); - } - - *state = temp; -} - -struct DivStruct -{ - unsigned d; - unsigned M; - int sh1, sh2; - int delta; -}; - -template static void -randi_( T* arr, int len, uint64* state, const DivStruct* p ) -{ - uint64 temp = *state; - int i = 0; - unsigned t0, t1, v0, v1; - - for( i = 0; i <= len - 4; i += 4 ) - { - temp = RNG_NEXT(temp); - t0 = (unsigned)temp; - temp = RNG_NEXT(temp); - t1 = (unsigned)temp; - v0 = (unsigned)(((uint64)t0 * p[i].M) >> 32); - v1 = (unsigned)(((uint64)t1 * p[i+1].M) >> 32); - v0 = (v0 + ((t0 - v0) >> p[i].sh1)) >> p[i].sh2; - v1 = (v1 + ((t1 - v1) >> p[i+1].sh1)) >> p[i+1].sh2; - v0 = t0 - v0*p[i].d + p[i].delta; - v1 = t1 - v1*p[i+1].d + p[i+1].delta; - arr[i] = saturate_cast((int)v0); - arr[i+1] = saturate_cast((int)v1); - - temp = RNG_NEXT(temp); - t0 = (unsigned)temp; - temp = RNG_NEXT(temp); - t1 = (unsigned)temp; - v0 = (unsigned)(((uint64)t0 * p[i+2].M) >> 32); - v1 = (unsigned)(((uint64)t1 * p[i+3].M) >> 32); - v0 = (v0 + ((t0 - v0) >> p[i+2].sh1)) >> p[i+2].sh2; - v1 = (v1 + ((t1 - v1) >> p[i+3].sh1)) >> p[i+3].sh2; - v0 = t0 - v0*p[i+2].d + p[i+2].delta; - v1 = t1 - v1*p[i+3].d + p[i+3].delta; - arr[i+2] = saturate_cast((int)v0); - arr[i+3] = saturate_cast((int)v1); - } - - for( ; i < len; i++ ) - { - temp = RNG_NEXT(temp); - t0 = (unsigned)temp; - v0 = (unsigned)(((uint64)t0 * p[i].M) >> 32); - v0 = (v0 + ((t0 - v0) >> p[i].sh1)) >> p[i].sh2; - v0 = t0 - v0*p[i].d + p[i].delta; - arr[i] = saturate_cast((int)v0); - } - - *state = temp; -} - - -#define DEF_RANDI_FUNC(suffix, type) \ -static void randBits_##suffix(type* arr, int len, uint64* state, \ - const Vec2i* p, bool small_flag) \ -{ randBits_(arr, len, state, p, small_flag); } \ -\ -static void randi_##suffix(type* arr, int len, uint64* state, \ - const DivStruct* p, bool ) \ -{ randi_(arr, len, state, p); } - -DEF_RANDI_FUNC(8u, uchar) -DEF_RANDI_FUNC(8s, schar) -DEF_RANDI_FUNC(16u, ushort) -DEF_RANDI_FUNC(16s, short) -DEF_RANDI_FUNC(32s, int) - -static void randf_32f( float* arr, int len, uint64* state, const Vec2f* p, bool ) -{ - uint64 temp = *state; - int i = 0; - - for( ; i <= len - 4; i += 4 ) - { - float f[4]; - f[0] = (float)(int)(temp = RNG_NEXT(temp)); - f[1] = (float)(int)(temp = RNG_NEXT(temp)); - f[2] = (float)(int)(temp = RNG_NEXT(temp)); - f[3] = (float)(int)(temp = RNG_NEXT(temp)); - - // handwritten SSE is required not for performance but for numerical stability! - // both 32-bit gcc and MSVC compilers trend to generate double precision SSE - // while 64-bit compilers generate single precision SIMD instructions - // so manual vectorisation forces all compilers to the single precision -#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP) - __m128 q0 = _mm_loadu_ps((const float*)(p + i)); - __m128 q1 = _mm_loadu_ps((const float*)(p + i + 2)); - - __m128 q01l = _mm_unpacklo_ps(q0, q1); - __m128 q01h = _mm_unpackhi_ps(q0, q1); - - __m128 p0 = _mm_unpacklo_ps(q01l, q01h); - __m128 p1 = _mm_unpackhi_ps(q01l, q01h); - - _mm_storeu_ps(arr + i, _mm_add_ps(_mm_mul_ps(_mm_loadu_ps(f), p0), p1)); -#else - arr[i+0] = f[0]*p[i+0][0] + p[i+0][1]; - arr[i+1] = f[1]*p[i+1][0] + p[i+1][1]; - arr[i+2] = f[2]*p[i+2][0] + p[i+2][1]; - arr[i+3] = f[3]*p[i+3][0] + p[i+3][1]; -#endif - } - - for( ; i < len; i++ ) - { - temp = RNG_NEXT(temp); -#if defined __SSE2__ || (defined _M_IX86_FP && 2 == _M_IX86_FP) - _mm_store_ss(arr + i, _mm_add_ss( - _mm_mul_ss(_mm_set_ss((float)(int)temp), _mm_set_ss(p[i][0])), - _mm_set_ss(p[i][1])) - ); -#else - arr[i] = (int)temp*p[i][0] + p[i][1]; -#endif - } - - *state = temp; -} - - -static void -randf_64f( double* arr, int len, uint64* state, const Vec2d* p, bool ) -{ - uint64 temp = *state; - int64 v = 0; - int i; - - for( i = 0; i <= len - 4; i += 4 ) - { - double f0, f1; - - temp = RNG_NEXT(temp); - v = (temp >> 32)|(temp << 32); - f0 = v*p[i][0] + p[i][1]; - temp = RNG_NEXT(temp); - v = (temp >> 32)|(temp << 32); - f1 = v*p[i+1][0] + p[i+1][1]; - arr[i] = f0; arr[i+1] = f1; - - temp = RNG_NEXT(temp); - v = (temp >> 32)|(temp << 32); - f0 = v*p[i+2][0] + p[i+2][1]; - temp = RNG_NEXT(temp); - v = (temp >> 32)|(temp << 32); - f1 = v*p[i+3][0] + p[i+3][1]; - arr[i+2] = f0; arr[i+3] = f1; - } - - for( ; i < len; i++ ) - { - temp = RNG_NEXT(temp); - v = (temp >> 32)|(temp << 32); - arr[i] = v*p[i][0] + p[i][1]; - } - - *state = temp; -} - -typedef void (*RandFunc)(uchar* arr, int len, uint64* state, const void* p, bool small_flag); - - -static RandFunc randTab[][8] = -{ - { - (RandFunc)randi_8u, (RandFunc)randi_8s, (RandFunc)randi_16u, (RandFunc)randi_16s, - (RandFunc)randi_32s, (RandFunc)randf_32f, (RandFunc)randf_64f, 0 - }, - { - (RandFunc)randBits_8u, (RandFunc)randBits_8s, (RandFunc)randBits_16u, (RandFunc)randBits_16s, - (RandFunc)randBits_32s, 0, 0, 0 - } -}; - -/* - The code below implements the algorithm described in - "The Ziggurat Method for Generating Random Variables" - by Marsaglia and Tsang, Journal of Statistical Software. -*/ -static void -randn_0_1_32f( float* arr, int len, uint64* state ) -{ - const float r = 3.442620f; // The start of the right tail - const float rng_flt = 2.3283064365386962890625e-10f; // 2^-32 - static unsigned kn[128]; - static float wn[128], fn[128]; - uint64 temp = *state; - static bool initialized=false; - int i; - - if( !initialized ) - { - const double m1 = 2147483648.0; - double dn = 3.442619855899, tn = dn, vn = 9.91256303526217e-3; - - // Set up the tables - double q = vn/std::exp(-.5*dn*dn); - kn[0] = (unsigned)((dn/q)*m1); - kn[1] = 0; - - wn[0] = (float)(q/m1); - wn[127] = (float)(dn/m1); - - fn[0] = 1.f; - fn[127] = (float)std::exp(-.5*dn*dn); - - for(i=126;i>=1;i--) - { - dn = std::sqrt(-2.*std::log(vn/dn+std::exp(-.5*dn*dn))); - kn[i+1] = (unsigned)((dn/tn)*m1); - tn = dn; - fn[i] = (float)std::exp(-.5*dn*dn); - wn[i] = (float)(dn/m1); - } - initialized = true; - } - - for( i = 0; i < len; i++ ) - { - float x, y; - for(;;) - { - int hz = (int)temp; - temp = RNG_NEXT(temp); - int iz = hz & 127; - x = hz*wn[iz]; - if( (unsigned)std::abs(hz) < kn[iz] ) - break; - if( iz == 0) // iz==0, handles the base strip - { - do - { - x = (unsigned)temp*rng_flt; - temp = RNG_NEXT(temp); - y = (unsigned)temp*rng_flt; - temp = RNG_NEXT(temp); - x = (float)(-std::log(x+FLT_MIN)*0.2904764); - y = (float)-std::log(y+FLT_MIN); - } // .2904764 is 1/r - while( y + y < x*x ); - x = hz > 0 ? r + x : -r - x; - break; - } - // iz > 0, handle the wedges of other strips - y = (unsigned)temp*rng_flt; - temp = RNG_NEXT(temp); - if( fn[iz] + y*(fn[iz - 1] - fn[iz]) < std::exp(-.5*x*x) ) - break; - } - arr[i] = x; - } - *state = temp; -} - - -double RNG::gaussian(double sigma) -{ - float temp; - randn_0_1_32f( &temp, 1, &state ); - return temp*sigma; -} - - -template static void -randnScale_( const float* src, T* dst, int len, int cn, const PT* mean, const PT* stddev, bool stdmtx ) -{ - int i, j, k; - if( !stdmtx ) - { - if( cn == 1 ) - { - PT b = mean[0], a = stddev[0]; - for( i = 0; i < len; i++ ) - dst[i] = saturate_cast(src[i]*a + b); - } - else - { - for( i = 0; i < len; i++, src += cn, dst += cn ) - for( k = 0; k < cn; k++ ) - dst[k] = saturate_cast(src[k]*stddev[k] + mean[k]); - } - } - else - { - for( i = 0; i < len; i++, src += cn, dst += cn ) - { - for( j = 0; j < cn; j++ ) - { - PT s = mean[j]; - for( k = 0; k < cn; k++ ) - s += src[k]*stddev[j*cn + k]; - dst[j] = saturate_cast(s); - } - } - } -} - -static void randnScale_8u( const float* src, uchar* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_8s( const float* src, schar* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_16u( const float* src, ushort* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_16s( const float* src, short* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_32s( const float* src, int* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_32f( const float* src, float* dst, int len, int cn, - const float* mean, const float* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -static void randnScale_64f( const float* src, double* dst, int len, int cn, - const double* mean, const double* stddev, bool stdmtx ) -{ randnScale_(src, dst, len, cn, mean, stddev, stdmtx); } - -typedef void (*RandnScaleFunc)(const float* src, uchar* dst, int len, int cn, - const uchar*, const uchar*, bool); - -static RandnScaleFunc randnScaleTab[] = -{ - (RandnScaleFunc)randnScale_8u, (RandnScaleFunc)randnScale_8s, (RandnScaleFunc)randnScale_16u, - (RandnScaleFunc)randnScale_16s, (RandnScaleFunc)randnScale_32s, (RandnScaleFunc)randnScale_32f, - (RandnScaleFunc)randnScale_64f, 0 -}; - -void RNG::fill( InputOutputArray _mat, int disttype, - InputArray _param1arg, InputArray _param2arg, bool saturateRange ) -{ - Mat mat = _mat.getMat(), _param1 = _param1arg.getMat(), _param2 = _param2arg.getMat(); - int depth = mat.depth(), cn = mat.channels(); - AutoBuffer _parambuf; - int j, k, fast_int_mode = 0, smallFlag = 1; - RandFunc func = 0; - RandnScaleFunc scaleFunc = 0; - - CV_Assert(_param1.channels() == 1 && (_param1.rows == 1 || _param1.cols == 1) && - (_param1.rows + _param1.cols - 1 == cn || _param1.rows + _param1.cols - 1 == 1 || - (_param1.size() == Size(1, 4) && _param1.type() == CV_64F && cn <= 4))); - CV_Assert( _param2.channels() == 1 && - (((_param2.rows == 1 || _param2.cols == 1) && - (_param2.rows + _param2.cols - 1 == cn || _param2.rows + _param2.cols - 1 == 1 || - (_param1.size() == Size(1, 4) && _param1.type() == CV_64F && cn <= 4))) || - (_param2.rows == cn && _param2.cols == cn && disttype == NORMAL))); - - Vec2i* ip = 0; - Vec2d* dp = 0; - Vec2f* fp = 0; - DivStruct* ds = 0; - uchar* mean = 0; - uchar* stddev = 0; - bool stdmtx = false; - int n1 = (int)_param1.total(); - int n2 = (int)_param2.total(); - - if( disttype == UNIFORM ) - { - _parambuf.allocate(cn*8 + n1 + n2); - double* parambuf = _parambuf; - double* p1 = (double*)_param1.data; - double* p2 = (double*)_param2.data; - - if( !_param1.isContinuous() || _param1.type() != CV_64F || n1 != cn ) - { - Mat tmp(_param1.size(), CV_64F, parambuf); - _param1.convertTo(tmp, CV_64F); - p1 = parambuf; - if( n1 < cn ) - for( j = n1; j < cn; j++ ) - p1[j] = p1[j-n1]; - } - - if( !_param2.isContinuous() || _param2.type() != CV_64F || n2 != cn ) - { - Mat tmp(_param2.size(), CV_64F, parambuf + cn); - _param2.convertTo(tmp, CV_64F); - p2 = parambuf + cn; - if( n2 < cn ) - for( j = n2; j < cn; j++ ) - p2[j] = p2[j-n2]; - } - - if( depth <= CV_32S ) - { - ip = (Vec2i*)(parambuf + cn*2); - for( j = 0, fast_int_mode = 1; j < cn; j++ ) - { - double a = min(p1[j], p2[j]); - double b = max(p1[j], p2[j]); - if( saturateRange ) - { - a = max(a, depth == CV_8U || depth == CV_16U ? 0. : - depth == CV_8S ? -128. : depth == CV_16S ? -32768. : (double)INT_MIN); - b = min(b, depth == CV_8U ? 256. : depth == CV_16U ? 65536. : - depth == CV_8S ? 128. : depth == CV_16S ? 32768. : (double)INT_MAX); - } - ip[j][1] = cvCeil(a); - int idiff = ip[j][0] = cvFloor(b) - ip[j][1] - 1; - double diff = b - a; - - fast_int_mode &= diff <= 4294967296. && (idiff & (idiff+1)) == 0; - if( fast_int_mode ) - smallFlag &= idiff <= 255; - else - { - if( diff > INT_MAX ) - ip[j][0] = INT_MAX; - if( a < INT_MIN/2 ) - ip[j][1] = INT_MIN/2; - } - } - - if( !fast_int_mode ) - { - ds = (DivStruct*)(ip + cn); - for( j = 0; j < cn; j++ ) - { - ds[j].delta = ip[j][1]; - unsigned d = ds[j].d = (unsigned)(ip[j][0]+1); - int l = 0; - while(((uint64)1 << l) < d) - l++; - ds[j].M = (unsigned)(((uint64)1 << 32)*(((uint64)1 << l) - d)/d) + 1; - ds[j].sh1 = min(l, 1); - ds[j].sh2 = max(l - 1, 0); - } - } - - func = randTab[fast_int_mode][depth]; - } - else - { - double scale = depth == CV_64F ? - 5.4210108624275221700372640043497e-20 : // 2**-64 - 2.3283064365386962890625e-10; // 2**-32 - double maxdiff = saturateRange ? (double)FLT_MAX : DBL_MAX; - - // for each channel i compute such dparam[0][i] & dparam[1][i], - // so that a signed 32/64-bit integer X is transformed to - // the range [param1.val[i], param2.val[i]) using - // dparam[1][i]*X + dparam[0][i] - if( depth == CV_32F ) - { - fp = (Vec2f*)(parambuf + cn*2); - for( j = 0; j < cn; j++ ) - { - fp[j][0] = (float)(std::min(maxdiff, p2[j] - p1[j])*scale); - fp[j][1] = (float)((p2[j] + p1[j])*0.5); - } - } - else - { - dp = (Vec2d*)(parambuf + cn*2); - for( j = 0; j < cn; j++ ) - { - dp[j][0] = std::min(DBL_MAX, p2[j] - p1[j])*scale; - dp[j][1] = ((p2[j] + p1[j])*0.5); - } - } - - func = randTab[0][depth]; - } - CV_Assert( func != 0 ); - } - else if( disttype == CV_RAND_NORMAL ) - { - _parambuf.allocate(MAX(n1, cn) + MAX(n2, cn)); - double* parambuf = _parambuf; - - int ptype = depth == CV_64F ? CV_64F : CV_32F; - int esz = (int)CV_ELEM_SIZE(ptype); - - if( _param1.isContinuous() && _param1.type() == ptype ) - mean = _param1.data; - else - { - Mat tmp(_param1.size(), ptype, parambuf); - _param1.convertTo(tmp, ptype); - mean = (uchar*)parambuf; - } - - if( n1 < cn ) - for( j = n1*esz; j < cn*esz; j++ ) - mean[j] = mean[j - n1*esz]; - - if( _param2.isContinuous() && _param2.type() == ptype ) - stddev = _param2.data; - else - { - Mat tmp(_param2.size(), ptype, parambuf + cn); - _param2.convertTo(tmp, ptype); - stddev = (uchar*)(parambuf + cn); - } - - if( n1 < cn ) - for( j = n1*esz; j < cn*esz; j++ ) - stddev[j] = stddev[j - n1*esz]; - - stdmtx = _param2.rows == cn && _param2.cols == cn; - scaleFunc = randnScaleTab[depth]; - CV_Assert( scaleFunc != 0 ); - } - else - CV_Error( CV_StsBadArg, "Unknown distribution type" ); - - const Mat* arrays[] = {&mat, 0}; - uchar* ptr; - NAryMatIterator it(arrays, &ptr); - int total = (int)it.size, blockSize = std::min((BLOCK_SIZE + cn - 1)/cn, total); - size_t esz = mat.elemSize(); - AutoBuffer buf; - uchar* param = 0; - float* nbuf = 0; - - if( disttype == UNIFORM ) - { - buf.allocate(blockSize*cn*4); - param = (uchar*)(double*)buf; - - if( ip ) - { - if( ds ) - { - DivStruct* p = (DivStruct*)param; - for( j = 0; j < blockSize*cn; j += cn ) - for( k = 0; k < cn; k++ ) - p[j + k] = ds[k]; - } - else - { - Vec2i* p = (Vec2i*)param; - for( j = 0; j < blockSize*cn; j += cn ) - for( k = 0; k < cn; k++ ) - p[j + k] = ip[k]; - } - } - else if( fp ) - { - Vec2f* p = (Vec2f*)param; - for( j = 0; j < blockSize*cn; j += cn ) - for( k = 0; k < cn; k++ ) - p[j + k] = fp[k]; - } - else - { - Vec2d* p = (Vec2d*)param; - for( j = 0; j < blockSize*cn; j += cn ) - for( k = 0; k < cn; k++ ) - p[j + k] = dp[k]; - } - } - else - { - buf.allocate((blockSize*cn+1)/2); - nbuf = (float*)(double*)buf; - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int len = std::min(total - j, blockSize); - - if( disttype == CV_RAND_UNI ) - func( ptr, len*cn, &state, param, smallFlag != 0 ); - else - { - randn_0_1_32f(nbuf, len*cn, &state); - scaleFunc(nbuf, ptr, len, cn, mean, stddev, stdmtx); - } - ptr += len*esz; - } - } -} - -#ifdef WIN32 - - -#ifdef HAVE_WINRT -// using C++11 thread attribute for local thread data -__declspec( thread ) RNG* rng = NULL; - - void deleteThreadRNGData() - { - if (rng) - delete rng; -} - -RNG& theRNG() -{ - if (!rng) - { - rng = new RNG; - } - return *rng; -} -#else -#ifdef WINCE -# define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF) -#endif -static DWORD tlsRNGKey = TLS_OUT_OF_INDEXES; - - void deleteThreadRNGData() - { - if( tlsRNGKey != TLS_OUT_OF_INDEXES ) - delete (RNG*)TlsGetValue( tlsRNGKey ); -} - -RNG& theRNG() -{ - if( tlsRNGKey == TLS_OUT_OF_INDEXES ) - { - tlsRNGKey = TlsAlloc(); - CV_Assert(tlsRNGKey != TLS_OUT_OF_INDEXES); - } - RNG* rng = (RNG*)TlsGetValue( tlsRNGKey ); - if( !rng ) - { - rng = new RNG; - TlsSetValue( tlsRNGKey, rng ); - } - return *rng; -} -#endif //HAVE_WINRT -#else - -static pthread_key_t tlsRNGKey = 0; -static pthread_once_t tlsRNGKeyOnce = PTHREAD_ONCE_INIT; - -static void deleteRNG(void* data) -{ - delete (RNG*)data; -} - -static void makeRNGKey() -{ - int errcode = pthread_key_create(&tlsRNGKey, deleteRNG); - CV_Assert(errcode == 0); -} - -RNG& theRNG() -{ - pthread_once(&tlsRNGKeyOnce, makeRNGKey); - RNG* rng = (RNG*)pthread_getspecific(tlsRNGKey); - if( !rng ) - { - rng = new RNG; - pthread_setspecific(tlsRNGKey, rng); - } - return *rng; -} - -#endif - -} - -void cv::randu(InputOutputArray dst, InputArray low, InputArray high) -{ - theRNG().fill(dst, RNG::UNIFORM, low, high); -} - -void cv::randn(InputOutputArray dst, InputArray mean, InputArray stddev) -{ - theRNG().fill(dst, RNG::NORMAL, mean, stddev); -} - -namespace cv -{ - -template static void -randShuffle_( Mat& _arr, RNG& rng, double iterFactor ) -{ - int sz = _arr.rows*_arr.cols, iters = cvRound(iterFactor*sz); - if( _arr.isContinuous() ) - { - T* arr = (T*)_arr.data; - for( int i = 0; i < iters; i++ ) - { - int j = (unsigned)rng % sz, k = (unsigned)rng % sz; - std::swap( arr[j], arr[k] ); - } - } - else - { - uchar* data = _arr.data; - size_t step = _arr.step; - int cols = _arr.cols; - for( int i = 0; i < iters; i++ ) - { - int j1 = (unsigned)rng % sz, k1 = (unsigned)rng % sz; - int j0 = j1/cols, k0 = k1/cols; - j1 -= j0*cols; k1 -= k0*cols; - std::swap( ((T*)(data + step*j0))[j1], ((T*)(data + step*k0))[k1] ); - } - } -} - -typedef void (*RandShuffleFunc)( Mat& dst, RNG& rng, double iterFactor ); - -} - -void cv::randShuffle( InputOutputArray _dst, double iterFactor, RNG* _rng ) -{ - RandShuffleFunc tab[] = - { - 0, - randShuffle_, // 1 - randShuffle_, // 2 - randShuffle_ >, // 3 - randShuffle_, // 4 - 0, - randShuffle_ >, // 6 - 0, - randShuffle_ >, // 8 - 0, 0, 0, - randShuffle_ >, // 12 - 0, 0, 0, - randShuffle_ >, // 16 - 0, 0, 0, 0, 0, 0, 0, - randShuffle_ >, // 24 - 0, 0, 0, 0, 0, 0, 0, - randShuffle_ > // 32 - }; - - Mat dst = _dst.getMat(); - RNG& rng = _rng ? *_rng : theRNG(); - CV_Assert( dst.elemSize() <= 32 ); - RandShuffleFunc func = tab[dst.elemSize()]; - CV_Assert( func != 0 ); - func( dst, rng, iterFactor ); -} - -void cv::randShuffle_( InputOutputArray _dst, double iterFactor ) -{ - randShuffle(_dst, iterFactor); -} - -CV_IMPL void -cvRandArr( CvRNG* _rng, CvArr* arr, int disttype, CvScalar param1, CvScalar param2 ) -{ - cv::Mat mat = cv::cvarrToMat(arr); - // !!! this will only work for current 64-bit MWC RNG !!! - cv::RNG& rng = _rng ? (cv::RNG&)*_rng : cv::theRNG(); - rng.fill(mat, disttype == CV_RAND_NORMAL ? - cv::RNG::NORMAL : cv::RNG::UNIFORM, cv::Scalar(param1), cv::Scalar(param2) ); -} - -CV_IMPL void cvRandShuffle( CvArr* arr, CvRNG* _rng, double iter_factor ) -{ - cv::Mat dst = cv::cvarrToMat(arr); - cv::RNG& rng = _rng ? (cv::RNG&)*_rng : cv::theRNG(); - cv::randShuffle( dst, iter_factor, &rng ); -} - -// Mersenne Twister random number generator. -// Inspired by http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c - -/* - A C-program for MT19937, with initialization improved 2002/1/26. - Coded by Takuji Nishimura and Makoto Matsumoto. - - Before using, initialize the state by using init_genrand(seed) - or init_by_array(init_key, key_length). - - Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not 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 OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Any feedback is very welcome. - http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) -*/ - -cv::RNG_MT19937::RNG_MT19937(unsigned s) { seed(s); } - -cv::RNG_MT19937::RNG_MT19937() { seed(5489U); } - -void cv::RNG_MT19937::seed(unsigned s) -{ - state[0]= s; - for (mti = 1; mti < N; mti++) - { - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - state[mti] = (1812433253U * (state[mti - 1] ^ (state[mti - 1] >> 30)) + mti); - } -} - -unsigned cv::RNG_MT19937::next() -{ - /* mag01[x] = x * MATRIX_A for x=0,1 */ - static unsigned mag01[2] = { 0x0U, /*MATRIX_A*/ 0x9908b0dfU}; - - const unsigned UPPER_MASK = 0x80000000U; - const unsigned LOWER_MASK = 0x7fffffffU; - - /* generate N words at one time */ - if (mti >= N) - { - int kk = 0; - - for (; kk < N - M; ++kk) - { - unsigned y = (state[kk] & UPPER_MASK) | (state[kk + 1] & LOWER_MASK); - state[kk] = state[kk + M] ^ (y >> 1) ^ mag01[y & 0x1U]; - } - - for (; kk < N - 1; ++kk) - { - unsigned y = (state[kk] & UPPER_MASK) | (state[kk + 1] & LOWER_MASK); - state[kk] = state[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1U]; - } - - unsigned y = (state[N - 1] & UPPER_MASK) | (state[0] & LOWER_MASK); - state[N - 1] = state[M - 1] ^ (y >> 1) ^ mag01[y & 0x1U]; - - mti = 0; - } - - unsigned y = state[mti++]; - - /* Tempering */ - y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680U; - y ^= (y << 15) & 0xefc60000U; - y ^= (y >> 18); - - return y; -} - -cv::RNG_MT19937::operator unsigned() { return next(); } - -cv::RNG_MT19937::operator int() { return (int)next();} - -cv::RNG_MT19937::operator float() { return next() * (1.f / 4294967296.f); } - -cv::RNG_MT19937::operator double() -{ - unsigned a = next() >> 5; - unsigned b = next() >> 6; - return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0); -} - -int cv::RNG_MT19937::uniform(int a, int b) { return (int)(next() % (b - a) + a); } - -float cv::RNG_MT19937::uniform(float a, float b) { return ((float)*this)*(b - a) + a; } - -double cv::RNG_MT19937::uniform(double a, double b) { return ((double)*this)*(b - a) + a; } - -unsigned cv::RNG_MT19937::operator ()(unsigned b) { return next() % b; } - -unsigned cv::RNG_MT19937::operator ()() { return next(); } - -/* End of file. */ diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp deleted file mode 100644 index eb3e229..0000000 --- a/modules/core/src/stat.cpp +++ /dev/null @@ -1,2710 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -namespace cv -{ - -template static inline Scalar rawToScalar(const T& v) -{ - Scalar s; - typedef typename DataType::channel_type T1; - int i, n = DataType::channels; - for( i = 0; i < n; i++ ) - s.val[i] = ((T1*)&v)[i]; - return s; -} - -/****************************************************************************************\ -* sum * -\****************************************************************************************/ - -template -static int sum_(const T* src0, const uchar* mask, ST* dst, int len, int cn ) -{ - const T* src = src0; - if( !mask ) - { - int i=0; - int k = cn % 4; - if( k == 1 ) - { - ST s0 = dst[0]; - - #if CV_ENABLE_UNROLLED - for(; i <= len - 4; i += 4, src += cn*4 ) - s0 += src[0] + src[cn] + src[cn*2] + src[cn*3]; - #endif - for( ; i < len; i++, src += cn ) - s0 += src[0]; - dst[0] = s0; - } - else if( k == 2 ) - { - ST s0 = dst[0], s1 = dst[1]; - for( i = 0; i < len; i++, src += cn ) - { - s0 += src[0]; - s1 += src[1]; - } - dst[0] = s0; - dst[1] = s1; - } - else if( k == 3 ) - { - ST s0 = dst[0], s1 = dst[1], s2 = dst[2]; - for( i = 0; i < len; i++, src += cn ) - { - s0 += src[0]; - s1 += src[1]; - s2 += src[2]; - } - dst[0] = s0; - dst[1] = s1; - dst[2] = s2; - } - - for( ; k < cn; k += 4 ) - { - src = src0 + k; - ST s0 = dst[k], s1 = dst[k+1], s2 = dst[k+2], s3 = dst[k+3]; - for( i = 0; i < len; i++, src += cn ) - { - s0 += src[0]; s1 += src[1]; - s2 += src[2]; s3 += src[3]; - } - dst[k] = s0; - dst[k+1] = s1; - dst[k+2] = s2; - dst[k+3] = s3; - } - return len; - } - - int i, nzm = 0; - if( cn == 1 ) - { - ST s = dst[0]; - for( i = 0; i < len; i++ ) - if( mask[i] ) - { - s += src[i]; - nzm++; - } - dst[0] = s; - } - else if( cn == 3 ) - { - ST s0 = dst[0], s1 = dst[1], s2 = dst[2]; - for( i = 0; i < len; i++, src += 3 ) - if( mask[i] ) - { - s0 += src[0]; - s1 += src[1]; - s2 += src[2]; - nzm++; - } - dst[0] = s0; - dst[1] = s1; - dst[2] = s2; - } - else - { - for( i = 0; i < len; i++, src += cn ) - if( mask[i] ) - { - int k = 0; - #if CV_ENABLE_UNROLLED - for( ; k <= cn - 4; k += 4 ) - { - ST s0, s1; - s0 = dst[k] + src[k]; - s1 = dst[k+1] + src[k+1]; - dst[k] = s0; dst[k+1] = s1; - s0 = dst[k+2] + src[k+2]; - s1 = dst[k+3] + src[k+3]; - dst[k+2] = s0; dst[k+3] = s1; - } - #endif - for( ; k < cn; k++ ) - dst[k] += src[k]; - nzm++; - } - } - return nzm; -} - - -static int sum8u( const uchar* src, const uchar* mask, int* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum8s( const schar* src, const uchar* mask, int* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum16u( const ushort* src, const uchar* mask, int* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum16s( const short* src, const uchar* mask, int* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum32s( const int* src, const uchar* mask, double* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum32f( const float* src, const uchar* mask, double* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -static int sum64f( const double* src, const uchar* mask, double* dst, int len, int cn ) -{ return sum_(src, mask, dst, len, cn); } - -typedef int (*SumFunc)(const uchar*, const uchar* mask, uchar*, int, int); - -static SumFunc getSumFunc(int depth) -{ - static SumFunc sumTab[] = - { - (SumFunc)GET_OPTIMIZED(sum8u), (SumFunc)sum8s, - (SumFunc)sum16u, (SumFunc)sum16s, - (SumFunc)sum32s, - (SumFunc)GET_OPTIMIZED(sum32f), (SumFunc)sum64f, - 0 - }; - - return sumTab[depth]; -} - -template -static int countNonZero_(const T* src, int len ) -{ - int i=0, nz = 0; - #if CV_ENABLE_UNROLLED - for(; i <= len - 4; i += 4 ) - nz += (src[i] != 0) + (src[i+1] != 0) + (src[i+2] != 0) + (src[i+3] != 0); - #endif - for( ; i < len; i++ ) - nz += src[i] != 0; - return nz; -} - -static int countNonZero8u( const uchar* src, int len ) -{ - int i=0, nz = 0; -#if CV_SSE2 - if(USE_SSE2)//5x-6x - { - __m128i pattern = _mm_setzero_si128 (); - static uchar tab[256]; - static volatile bool initialized = false; - if( !initialized ) - { - // we compute inverse popcount table, - // since we pass (img[x] == 0) mask as index in the table. - for( int j = 0; j < 256; j++ ) - { - int val = 0; - for( int mask = 1; mask < 256; mask += mask ) - val += (j & mask) == 0; - tab[j] = (uchar)val; - } - initialized = true; - } - - for (; i<=len-16; i+=16) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)(src+i)); - int val = _mm_movemask_epi8(_mm_cmpeq_epi8(r0, pattern)); - nz += tab[val & 255] + tab[val >> 8]; - } - } -#endif - for( ; i < len; i++ ) - nz += src[i] != 0; - return nz; -} - -static int countNonZero16u( const ushort* src, int len ) -{ return countNonZero_(src, len); } - -static int countNonZero32s( const int* src, int len ) -{ return countNonZero_(src, len); } - -static int countNonZero32f( const float* src, int len ) -{ return countNonZero_(src, len); } - -static int countNonZero64f( const double* src, int len ) -{ return countNonZero_(src, len); } - -typedef int (*CountNonZeroFunc)(const uchar*, int); - -static CountNonZeroFunc getCountNonZeroTab(int depth) -{ - static CountNonZeroFunc countNonZeroTab[] = - { - (CountNonZeroFunc)GET_OPTIMIZED(countNonZero8u), (CountNonZeroFunc)GET_OPTIMIZED(countNonZero8u), - (CountNonZeroFunc)GET_OPTIMIZED(countNonZero16u), (CountNonZeroFunc)GET_OPTIMIZED(countNonZero16u), - (CountNonZeroFunc)GET_OPTIMIZED(countNonZero32s), (CountNonZeroFunc)GET_OPTIMIZED(countNonZero32f), - (CountNonZeroFunc)GET_OPTIMIZED(countNonZero64f), 0 - }; - - return countNonZeroTab[depth]; -} - -template -static int sumsqr_(const T* src0, const uchar* mask, ST* sum, SQT* sqsum, int len, int cn ) -{ - const T* src = src0; - - if( !mask ) - { - int i; - int k = cn % 4; - - if( k == 1 ) - { - ST s0 = sum[0]; - SQT sq0 = sqsum[0]; - for( i = 0; i < len; i++, src += cn ) - { - T v = src[0]; - s0 += v; sq0 += (SQT)v*v; - } - sum[0] = s0; - sqsum[0] = sq0; - } - else if( k == 2 ) - { - ST s0 = sum[0], s1 = sum[1]; - SQT sq0 = sqsum[0], sq1 = sqsum[1]; - for( i = 0; i < len; i++, src += cn ) - { - T v0 = src[0], v1 = src[1]; - s0 += v0; sq0 += (SQT)v0*v0; - s1 += v1; sq1 += (SQT)v1*v1; - } - sum[0] = s0; sum[1] = s1; - sqsum[0] = sq0; sqsum[1] = sq1; - } - else if( k == 3 ) - { - ST s0 = sum[0], s1 = sum[1], s2 = sum[2]; - SQT sq0 = sqsum[0], sq1 = sqsum[1], sq2 = sqsum[2]; - for( i = 0; i < len; i++, src += cn ) - { - T v0 = src[0], v1 = src[1], v2 = src[2]; - s0 += v0; sq0 += (SQT)v0*v0; - s1 += v1; sq1 += (SQT)v1*v1; - s2 += v2; sq2 += (SQT)v2*v2; - } - sum[0] = s0; sum[1] = s1; sum[2] = s2; - sqsum[0] = sq0; sqsum[1] = sq1; sqsum[2] = sq2; - } - - for( ; k < cn; k += 4 ) - { - src = src0 + k; - ST s0 = sum[k], s1 = sum[k+1], s2 = sum[k+2], s3 = sum[k+3]; - SQT sq0 = sqsum[k], sq1 = sqsum[k+1], sq2 = sqsum[k+2], sq3 = sqsum[k+3]; - for( i = 0; i < len; i++, src += cn ) - { - T v0, v1; - v0 = src[0], v1 = src[1]; - s0 += v0; sq0 += (SQT)v0*v0; - s1 += v1; sq1 += (SQT)v1*v1; - v0 = src[2], v1 = src[3]; - s2 += v0; sq2 += (SQT)v0*v0; - s3 += v1; sq3 += (SQT)v1*v1; - } - sum[k] = s0; sum[k+1] = s1; - sum[k+2] = s2; sum[k+3] = s3; - sqsum[k] = sq0; sqsum[k+1] = sq1; - sqsum[k+2] = sq2; sqsum[k+3] = sq3; - } - return len; - } - - int i, nzm = 0; - - if( cn == 1 ) - { - ST s0 = sum[0]; - SQT sq0 = sqsum[0]; - for( i = 0; i < len; i++ ) - if( mask[i] ) - { - T v = src[i]; - s0 += v; sq0 += (SQT)v*v; - nzm++; - } - sum[0] = s0; - sqsum[0] = sq0; - } - else if( cn == 3 ) - { - ST s0 = sum[0], s1 = sum[1], s2 = sum[2]; - SQT sq0 = sqsum[0], sq1 = sqsum[1], sq2 = sqsum[2]; - for( i = 0; i < len; i++, src += 3 ) - if( mask[i] ) - { - T v0 = src[0], v1 = src[1], v2 = src[2]; - s0 += v0; sq0 += (SQT)v0*v0; - s1 += v1; sq1 += (SQT)v1*v1; - s2 += v2; sq2 += (SQT)v2*v2; - nzm++; - } - sum[0] = s0; sum[1] = s1; sum[2] = s2; - sqsum[0] = sq0; sqsum[1] = sq1; sqsum[2] = sq2; - } - else - { - for( i = 0; i < len; i++, src += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - { - T v = src[k]; - ST s = sum[k] + v; - SQT sq = sqsum[k] + (SQT)v*v; - sum[k] = s; sqsum[k] = sq; - } - nzm++; - } - } - return nzm; -} - - -static int sqsum8u( const uchar* src, const uchar* mask, int* sum, int* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum8s( const schar* src, const uchar* mask, int* sum, int* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum16u( const ushort* src, const uchar* mask, int* sum, double* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum16s( const short* src, const uchar* mask, int* sum, double* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum32s( const int* src, const uchar* mask, double* sum, double* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum32f( const float* src, const uchar* mask, double* sum, double* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -static int sqsum64f( const double* src, const uchar* mask, double* sum, double* sqsum, int len, int cn ) -{ return sumsqr_(src, mask, sum, sqsum, len, cn); } - -typedef int (*SumSqrFunc)(const uchar*, const uchar* mask, uchar*, uchar*, int, int); - -static SumSqrFunc getSumSqrTab(int depth) -{ - static SumSqrFunc sumSqrTab[] = - { - (SumSqrFunc)GET_OPTIMIZED(sqsum8u), (SumSqrFunc)sqsum8s, (SumSqrFunc)sqsum16u, (SumSqrFunc)sqsum16s, - (SumSqrFunc)sqsum32s, (SumSqrFunc)GET_OPTIMIZED(sqsum32f), (SumSqrFunc)sqsum64f, 0 - }; - - return sumSqrTab[depth]; -} - -} - -cv::Scalar cv::sum( InputArray _src ) -{ - Mat src = _src.getMat(); - int k, cn = src.channels(), depth = src.depth(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src.total(); - int rows = src.size[0], cols = (int)(total_size/rows); - if( src.dims == 2 || (src.isContinuous() && cols > 0 && (size_t)rows*cols == total_size) ) - { - IppiSize sz = { cols, rows }; - int type = src.type(); - typedef IppStatus (CV_STDCALL* ippiSumFunc)(const void*, int, IppiSize, double *, int); - ippiSumFunc ippFunc = - type == CV_8UC1 ? (ippiSumFunc)ippiSum_8u_C1R : - type == CV_8UC3 ? (ippiSumFunc)ippiSum_8u_C3R : - type == CV_8UC4 ? (ippiSumFunc)ippiSum_8u_C4R : - type == CV_16UC1 ? (ippiSumFunc)ippiSum_16u_C1R : - type == CV_16UC3 ? (ippiSumFunc)ippiSum_16u_C3R : - type == CV_16UC4 ? (ippiSumFunc)ippiSum_16u_C4R : - type == CV_16SC1 ? (ippiSumFunc)ippiSum_16s_C1R : - type == CV_16SC3 ? (ippiSumFunc)ippiSum_16s_C3R : - type == CV_16SC4 ? (ippiSumFunc)ippiSum_16s_C4R : - type == CV_32FC1 ? (ippiSumFunc)ippiSum_32f_C1R : - type == CV_32FC3 ? (ippiSumFunc)ippiSum_32f_C3R : - type == CV_32FC4 ? (ippiSumFunc)ippiSum_32f_C4R : - 0; - if( ippFunc ) - { - Ipp64f res[4]; - if( ippFunc(src.data, (int)src.step[0], sz, res, ippAlgHintAccurate) >= 0 ) - { - Scalar sc; - for( int i = 0; i < cn; i++ ) - { - sc[i] = res[i]; - } - return sc; - } - } - } -#endif - - SumFunc func = getSumFunc(depth); - - CV_Assert( cn <= 4 && func != 0 ); - - const Mat* arrays[] = {&src, 0}; - uchar* ptrs[1]; - NAryMatIterator it(arrays, ptrs); - Scalar s; - int total = (int)it.size, blockSize = total, intSumBlockSize = 0; - int j, count = 0; - AutoBuffer _buf; - int* buf = (int*)&s[0]; - size_t esz = 0; - bool blockSum = depth < CV_32S; - - if( blockSum ) - { - intSumBlockSize = depth <= CV_8S ? (1 << 23) : (1 << 15); - blockSize = std::min(blockSize, intSumBlockSize); - _buf.allocate(cn); - buf = _buf; - - for( k = 0; k < cn; k++ ) - buf[k] = 0; - esz = src.elemSize(); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int bsz = std::min(total - j, blockSize); - func( ptrs[0], 0, (uchar*)buf, bsz, cn ); - count += bsz; - if( blockSum && (count + blockSize >= intSumBlockSize || (i+1 >= it.nplanes && j+bsz >= total)) ) - { - for( k = 0; k < cn; k++ ) - { - s[k] += buf[k]; - buf[k] = 0; - } - count = 0; - } - ptrs[0] += bsz*esz; - } - } - return s; -} - -int cv::countNonZero( InputArray _src ) -{ - Mat src = _src.getMat(); - CountNonZeroFunc func = getCountNonZeroTab(src.depth()); - - CV_Assert( src.channels() == 1 && func != 0 ); - - const Mat* arrays[] = {&src, 0}; - uchar* ptrs[1]; - NAryMatIterator it(arrays, ptrs); - int total = (int)it.size, nz = 0; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - nz += func( ptrs[0], total ); - - return nz; -} - -cv::Scalar cv::mean( InputArray _src, InputArray _mask ) -{ - Mat src = _src.getMat(), mask = _mask.getMat(); - CV_Assert( mask.empty() || mask.type() == CV_8U ); - - int k, cn = src.channels(), depth = src.depth(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src.total(); - int rows = src.size[0], cols = (int)(total_size/rows); - if( src.dims == 2 || (src.isContinuous() && mask.isContinuous() && cols > 0 && (size_t)rows*cols == total_size) ) - { - IppiSize sz = { cols, rows }; - int type = src.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskMeanFuncC1)(const void *, int, void *, int, IppiSize, Ipp64f *); - ippiMaskMeanFuncC1 ippFuncC1 = - type == CV_8UC1 ? (ippiMaskMeanFuncC1)ippiMean_8u_C1MR : - type == CV_16UC1 ? (ippiMaskMeanFuncC1)ippiMean_16u_C1MR : - type == CV_32FC1 ? (ippiMaskMeanFuncC1)ippiMean_32f_C1MR : - 0; - if( ippFuncC1 ) - { - Ipp64f res; - if( ippFuncC1(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, &res) >= 0 ) - { - return Scalar(res); - } - } - typedef IppStatus (CV_STDCALL* ippiMaskMeanFuncC3)(const void *, int, void *, int, IppiSize, int, Ipp64f *); - ippiMaskMeanFuncC3 ippFuncC3 = - type == CV_8UC3 ? (ippiMaskMeanFuncC3)ippiMean_8u_C3CMR : - type == CV_16UC3 ? (ippiMaskMeanFuncC3)ippiMean_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskMeanFuncC3)ippiMean_32f_C3CMR : - 0; - if( ippFuncC3 ) - { - Ipp64f res1, res2, res3; - if( ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 1, &res1) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 2, &res2) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 3, &res3) >= 0 ) - { - return Scalar(res1, res2, res3); - } - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiMeanFunc)(const void*, int, IppiSize, double *, int); - ippiMeanFunc ippFunc = - type == CV_8UC1 ? (ippiMeanFunc)ippiMean_8u_C1R : - type == CV_8UC3 ? (ippiMeanFunc)ippiMean_8u_C3R : - type == CV_8UC4 ? (ippiMeanFunc)ippiMean_8u_C4R : - type == CV_16UC1 ? (ippiMeanFunc)ippiMean_16u_C1R : - type == CV_16UC3 ? (ippiMeanFunc)ippiMean_16u_C3R : - type == CV_16UC4 ? (ippiMeanFunc)ippiMean_16u_C4R : - type == CV_16SC1 ? (ippiMeanFunc)ippiMean_16s_C1R : - type == CV_16SC3 ? (ippiMeanFunc)ippiMean_16s_C3R : - type == CV_16SC4 ? (ippiMeanFunc)ippiMean_16s_C4R : - type == CV_32FC1 ? (ippiMeanFunc)ippiMean_32f_C1R : - type == CV_32FC3 ? (ippiMeanFunc)ippiMean_32f_C3R : - type == CV_32FC4 ? (ippiMeanFunc)ippiMean_32f_C4R : - 0; - if( ippFunc ) - { - Ipp64f res[4]; - if( ippFunc(src.data, (int)src.step[0], sz, res, ippAlgHintAccurate) >= 0 ) - { - Scalar sc; - for( int i = 0; i < cn; i++ ) - { - sc[i] = res[i]; - } - return sc; - } - } - } - } -#endif - - SumFunc func = getSumFunc(depth); - - CV_Assert( cn <= 4 && func != 0 ); - - const Mat* arrays[] = {&src, &mask, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - Scalar s; - int total = (int)it.size, blockSize = total, intSumBlockSize = 0; - int j, count = 0; - AutoBuffer _buf; - int* buf = (int*)&s[0]; - bool blockSum = depth <= CV_16S; - size_t esz = 0, nz0 = 0; - - if( blockSum ) - { - intSumBlockSize = depth <= CV_8S ? (1 << 23) : (1 << 15); - blockSize = std::min(blockSize, intSumBlockSize); - _buf.allocate(cn); - buf = _buf; - - for( k = 0; k < cn; k++ ) - buf[k] = 0; - esz = src.elemSize(); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int bsz = std::min(total - j, blockSize); - int nz = func( ptrs[0], ptrs[1], (uchar*)buf, bsz, cn ); - count += nz; - nz0 += nz; - if( blockSum && (count + blockSize >= intSumBlockSize || (i+1 >= it.nplanes && j+bsz >= total)) ) - { - for( k = 0; k < cn; k++ ) - { - s[k] += buf[k]; - buf[k] = 0; - } - count = 0; - } - ptrs[0] += bsz*esz; - if( ptrs[1] ) - ptrs[1] += bsz; - } - } - return s*(nz0 ? 1./nz0 : 0); -} - - -void cv::meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv, InputArray _mask ) -{ - Mat src = _src.getMat(), mask = _mask.getMat(); - CV_Assert( mask.empty() || mask.type() == CV_8U ); - - int k, cn = src.channels(), depth = src.depth(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src.total(); - int rows = src.size[0], cols = (int)(total_size/rows); - if( src.dims == 2 || (src.isContinuous() && mask.isContinuous() && cols > 0 && (size_t)rows*cols == total_size) ) - { - Ipp64f mean_temp[3]; - Ipp64f stddev_temp[3]; - Ipp64f *pmean = &mean_temp[0]; - Ipp64f *pstddev = &stddev_temp[0]; - Mat mean, stddev; - int dcn_mean = -1; - if( _mean.needed() ) - { - if( !_mean.fixedSize() ) - _mean.create(cn, 1, CV_64F, -1, true); - mean = _mean.getMat(); - dcn_mean = (int)mean.total(); - pmean = (Ipp64f *)mean.data; - } - int dcn_stddev = -1; - if( _sdv.needed() ) - { - if( !_sdv.fixedSize() ) - _sdv.create(cn, 1, CV_64F, -1, true); - stddev = _sdv.getMat(); - dcn_stddev = (int)stddev.total(); - pstddev = (Ipp64f *)stddev.data; - } - for( int k = cn; k < dcn_mean; k++ ) - pmean[k] = 0; - for( int k = cn; k < dcn_stddev; k++ ) - pstddev[k] = 0; - IppiSize sz = { cols, rows }; - int type = src.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskMeanStdDevFuncC1)(const void *, int, void *, int, IppiSize, Ipp64f *, Ipp64f *); - ippiMaskMeanStdDevFuncC1 ippFuncC1 = - type == CV_8UC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_8u_C1MR : - type == CV_16UC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_16u_C1MR : - type == CV_32FC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_32f_C1MR : - 0; - if( ippFuncC1 ) - { - if( ippFuncC1(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, pmean, pstddev) >= 0 ) - return; - } - typedef IppStatus (CV_STDCALL* ippiMaskMeanStdDevFuncC3)(const void *, int, void *, int, IppiSize, int, Ipp64f *, Ipp64f *); - ippiMaskMeanStdDevFuncC3 ippFuncC3 = - type == CV_8UC3 ? (ippiMaskMeanStdDevFuncC3)ippiMean_StdDev_8u_C3CMR : - type == CV_16UC3 ? (ippiMaskMeanStdDevFuncC3)ippiMean_StdDev_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskMeanStdDevFuncC3)ippiMean_StdDev_32f_C3CMR : - 0; - if( ippFuncC3 ) - { - if( ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 1, &pmean[0], &pstddev[0]) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 2, &pmean[1], &pstddev[1]) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 3, &pmean[2], &pstddev[2]) >= 0 ) - return; - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiMeanStdDevFuncC1)(const void *, int, IppiSize, Ipp64f *, Ipp64f *); - ippiMeanStdDevFuncC1 ippFuncC1 = - type == CV_8UC1 ? (ippiMeanStdDevFuncC1)ippiMean_StdDev_8u_C1R : - type == CV_16UC1 ? (ippiMeanStdDevFuncC1)ippiMean_StdDev_16u_C1R : - //type == CV_32FC1 ? (ippiMeanStdDevFuncC1)ippiMean_StdDev_32f_C1R ://Aug 2013: bug in IPP 7.1, 8.0 - 0; - if( ippFuncC1 ) - { - if( ippFuncC1(src.data, (int)src.step[0], sz, pmean, pstddev) >= 0 ) - return; - } - typedef IppStatus (CV_STDCALL* ippiMeanStdDevFuncC3)(const void *, int, IppiSize, int, Ipp64f *, Ipp64f *); - ippiMeanStdDevFuncC3 ippFuncC3 = - type == CV_8UC3 ? (ippiMeanStdDevFuncC3)ippiMean_StdDev_8u_C3CR : - type == CV_16UC3 ? (ippiMeanStdDevFuncC3)ippiMean_StdDev_16u_C3CR : - type == CV_32FC3 ? (ippiMeanStdDevFuncC3)ippiMean_StdDev_32f_C3CR : - 0; - if( ippFuncC3 ) - { - if( ippFuncC3(src.data, (int)src.step[0], sz, 1, &pmean[0], &pstddev[0]) >= 0 && - ippFuncC3(src.data, (int)src.step[0], sz, 2, &pmean[1], &pstddev[1]) >= 0 && - ippFuncC3(src.data, (int)src.step[0], sz, 3, &pmean[2], &pstddev[2]) >= 0 ) - return; - } - } - } -#endif - - - SumSqrFunc func = getSumSqrTab(depth); - - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &mask, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int total = (int)it.size, blockSize = total, intSumBlockSize = 0; - int j, count = 0, nz0 = 0; - AutoBuffer _buf(cn*4); - double *s = (double*)_buf, *sq = s + cn; - int *sbuf = (int*)s, *sqbuf = (int*)sq; - bool blockSum = depth <= CV_16S, blockSqSum = depth <= CV_8S; - size_t esz = 0; - - for( k = 0; k < cn; k++ ) - s[k] = sq[k] = 0; - - if( blockSum ) - { - intSumBlockSize = 1 << 15; - blockSize = std::min(blockSize, intSumBlockSize); - sbuf = (int*)(sq + cn); - if( blockSqSum ) - sqbuf = sbuf + cn; - for( k = 0; k < cn; k++ ) - sbuf[k] = sqbuf[k] = 0; - esz = src.elemSize(); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int bsz = std::min(total - j, blockSize); - int nz = func( ptrs[0], ptrs[1], (uchar*)sbuf, (uchar*)sqbuf, bsz, cn ); - count += nz; - nz0 += nz; - if( blockSum && (count + blockSize >= intSumBlockSize || (i+1 >= it.nplanes && j+bsz >= total)) ) - { - for( k = 0; k < cn; k++ ) - { - s[k] += sbuf[k]; - sbuf[k] = 0; - } - if( blockSqSum ) - { - for( k = 0; k < cn; k++ ) - { - sq[k] += sqbuf[k]; - sqbuf[k] = 0; - } - } - count = 0; - } - ptrs[0] += bsz*esz; - if( ptrs[1] ) - ptrs[1] += bsz; - } - } - - double scale = nz0 ? 1./nz0 : 0.; - for( k = 0; k < cn; k++ ) - { - s[k] *= scale; - sq[k] = std::sqrt(std::max(sq[k]*scale - s[k]*s[k], 0.)); - } - - for( j = 0; j < 2; j++ ) - { - const double* sptr = j == 0 ? s : sq; - _OutputArray _dst = j == 0 ? _mean : _sdv; - if( !_dst.needed() ) - continue; - - if( !_dst.fixedSize() ) - _dst.create(cn, 1, CV_64F, -1, true); - Mat dst = _dst.getMat(); - int dcn = (int)dst.total(); - CV_Assert( dst.type() == CV_64F && dst.isContinuous() && - (dst.cols == 1 || dst.rows == 1) && dcn >= cn ); - double* dptr = dst.ptr(); - for( k = 0; k < cn; k++ ) - dptr[k] = sptr[k]; - for( ; k < dcn; k++ ) - dptr[k] = 0; - } -} - -/****************************************************************************************\ -* minMaxLoc * -\****************************************************************************************/ - -namespace cv -{ - -template static void -minMaxIdx_( const T* src, const uchar* mask, WT* _minVal, WT* _maxVal, - size_t* _minIdx, size_t* _maxIdx, int len, size_t startIdx ) -{ - WT minVal = *_minVal, maxVal = *_maxVal; - size_t minIdx = *_minIdx, maxIdx = *_maxIdx; - - if( !mask ) - { - for( int i = 0; i < len; i++ ) - { - T val = src[i]; - if( val < minVal ) - { - minVal = val; - minIdx = startIdx + i; - } - if( val > maxVal ) - { - maxVal = val; - maxIdx = startIdx + i; - } - } - } - else - { - for( int i = 0; i < len; i++ ) - { - T val = src[i]; - if( mask[i] && val < minVal ) - { - minVal = val; - minIdx = startIdx + i; - } - if( mask[i] && val > maxVal ) - { - maxVal = val; - maxIdx = startIdx + i; - } - } - } - - *_minIdx = minIdx; - *_maxIdx = maxIdx; - *_minVal = minVal; - *_maxVal = maxVal; -} - -static void minMaxIdx_8u(const uchar* src, const uchar* mask, int* minval, int* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_8s(const schar* src, const uchar* mask, int* minval, int* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_16u(const ushort* src, const uchar* mask, int* minval, int* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_16s(const short* src, const uchar* mask, int* minval, int* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_32s(const int* src, const uchar* mask, int* minval, int* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_32f(const float* src, const uchar* mask, float* minval, float* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -static void minMaxIdx_64f(const double* src, const uchar* mask, double* minval, double* maxval, - size_t* minidx, size_t* maxidx, int len, size_t startidx ) -{ minMaxIdx_(src, mask, minval, maxval, minidx, maxidx, len, startidx ); } - -typedef void (*MinMaxIdxFunc)(const uchar*, const uchar*, int*, int*, size_t*, size_t*, int, size_t); - -static MinMaxIdxFunc getMinmaxTab(int depth) -{ - static MinMaxIdxFunc minmaxTab[] = - { - (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_8u), (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_8s), - (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_16u), (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_16s), - (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_32s), - (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_32f), (MinMaxIdxFunc)GET_OPTIMIZED(minMaxIdx_64f), - 0 - }; - - return minmaxTab[depth]; -} - -static void ofs2idx(const Mat& a, size_t ofs, int* idx) -{ - int i, d = a.dims; - if( ofs > 0 ) - { - ofs--; - for( i = d-1; i >= 0; i-- ) - { - int sz = a.size[i]; - idx[i] = (int)(ofs % sz); - ofs /= sz; - } - } - else - { - for( i = d-1; i >= 0; i-- ) - idx[i] = -1; - } -} - -} - -void cv::minMaxIdx(InputArray _src, double* minVal, - double* maxVal, int* minIdx, int* maxIdx, - InputArray _mask) -{ - Mat src = _src.getMat(), mask = _mask.getMat(); - int depth = src.depth(), cn = src.channels(); - - CV_Assert( (cn == 1 && (mask.empty() || mask.type() == CV_8U)) || - (cn >= 1 && mask.empty() && !minIdx && !maxIdx) ); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src.total(); - int rows = src.size[0], cols = (int)(total_size/rows); - if( cn == 1 && ( src.dims == 2 || (src.isContinuous() && mask.isContinuous() && cols > 0 && (size_t)rows*cols == total_size) ) ) - { - IppiSize sz = { cols, rows }; - int type = src.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskMinMaxIndxFuncC1)(const void *, int, const void *, int, IppiSize, Ipp32f *, Ipp32f *, IppiPoint *, IppiPoint *); - ippiMaskMinMaxIndxFuncC1 ippFuncC1 = - type == CV_8UC1 ? (ippiMaskMinMaxIndxFuncC1)ippiMinMaxIndx_8u_C1MR : - type == CV_16UC1 ? (ippiMaskMinMaxIndxFuncC1)ippiMinMaxIndx_16u_C1MR : - type == CV_32FC1 ? (ippiMaskMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1MR : - 0; - if( ippFuncC1 ) - { - Ipp32f min, max; - IppiPoint minp, maxp; - if( ippFuncC1(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, &min, &max, &minp, &maxp) >= 0 ) - { - if( minVal ) - *minVal = (double)min; - if( maxVal ) - *maxVal = (double)max; - if( !minp.x && !minp.y && !maxp.x && !maxp.y && !mask.data[0] ) - minp.x = maxp.x = -1; - if( minIdx ) - { - size_t minidx = minp.y * cols + minp.x + 1; - ofs2idx(src, minidx, minIdx); - } - if( maxIdx ) - { - size_t maxidx = maxp.y * cols + maxp.x + 1; - ofs2idx(src, maxidx, maxIdx); - } - return; - } - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiMinMaxIndxFuncC1)(const void *, int, IppiSize, Ipp32f *, Ipp32f *, IppiPoint *, IppiPoint *); - ippiMinMaxIndxFuncC1 ippFuncC1 = - type == CV_8UC1 ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_8u_C1R : - type == CV_16UC1 ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_16u_C1R : - type == CV_32FC1 ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R : - 0; - if( ippFuncC1 ) - { - Ipp32f min, max; - IppiPoint minp, maxp; - if( ippFuncC1(src.data, (int)src.step[0], sz, &min, &max, &minp, &maxp) >= 0 ) - { - if( minVal ) - *minVal = (double)min; - if( maxVal ) - *maxVal = (double)max; - if( minIdx ) - { - size_t minidx = minp.y * cols + minp.x + 1; - ofs2idx(src, minidx, minIdx); - } - if( maxIdx ) - { - size_t maxidx = maxp.y * cols + maxp.x + 1; - ofs2idx(src, maxidx, maxIdx); - } - return; - } - } - } - } -#endif - - MinMaxIdxFunc func = getMinmaxTab(depth); - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &mask, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - - size_t minidx = 0, maxidx = 0; - int iminval = INT_MAX, imaxval = INT_MIN; - float fminval = FLT_MAX, fmaxval = -FLT_MAX; - double dminval = DBL_MAX, dmaxval = -DBL_MAX; - size_t startidx = 1; - int *minval = &iminval, *maxval = &imaxval; - int planeSize = (int)it.size*cn; - - if( depth == CV_32F ) - minval = (int*)&fminval, maxval = (int*)&fmaxval; - else if( depth == CV_64F ) - minval = (int*)&dminval, maxval = (int*)&dmaxval; - - for( size_t i = 0; i < it.nplanes; i++, ++it, startidx += planeSize ) - func( ptrs[0], ptrs[1], minval, maxval, &minidx, &maxidx, planeSize, startidx ); - - if( minidx == 0 ) - dminval = dmaxval = 0; - else if( depth == CV_32F ) - dminval = fminval, dmaxval = fmaxval; - else if( depth <= CV_32S ) - dminval = iminval, dmaxval = imaxval; - - if( minVal ) - *minVal = dminval; - if( maxVal ) - *maxVal = dmaxval; - - if( minIdx ) - ofs2idx(src, minidx, minIdx); - if( maxIdx ) - ofs2idx(src, maxidx, maxIdx); -} - -void cv::minMaxLoc( InputArray _img, double* minVal, double* maxVal, - Point* minLoc, Point* maxLoc, InputArray mask ) -{ - Mat img = _img.getMat(); - CV_Assert(img.dims <= 2); - - minMaxIdx(_img, minVal, maxVal, (int*)minLoc, (int*)maxLoc, mask); - if( minLoc ) - std::swap(minLoc->x, minLoc->y); - if( maxLoc ) - std::swap(maxLoc->x, maxLoc->y); -} - -/****************************************************************************************\ -* norm * -\****************************************************************************************/ - -namespace cv -{ - -float normL2Sqr_(const float* a, const float* b, int n) -{ - int j = 0; float d = 0.f; -#if CV_SSE - if( USE_SSE2 ) - { - float CV_DECL_ALIGNED(16) buf[4]; - __m128 d0 = _mm_setzero_ps(), d1 = _mm_setzero_ps(); - - for( ; j <= n - 8; j += 8 ) - { - __m128 t0 = _mm_sub_ps(_mm_loadu_ps(a + j), _mm_loadu_ps(b + j)); - __m128 t1 = _mm_sub_ps(_mm_loadu_ps(a + j + 4), _mm_loadu_ps(b + j + 4)); - d0 = _mm_add_ps(d0, _mm_mul_ps(t0, t0)); - d1 = _mm_add_ps(d1, _mm_mul_ps(t1, t1)); - } - _mm_store_ps(buf, _mm_add_ps(d0, d1)); - d = buf[0] + buf[1] + buf[2] + buf[3]; - } - else -#endif - { - for( ; j <= n - 4; j += 4 ) - { - float t0 = a[j] - b[j], t1 = a[j+1] - b[j+1], t2 = a[j+2] - b[j+2], t3 = a[j+3] - b[j+3]; - d += t0*t0 + t1*t1 + t2*t2 + t3*t3; - } - } - - for( ; j < n; j++ ) - { - float t = a[j] - b[j]; - d += t*t; - } - return d; -} - - -float normL1_(const float* a, const float* b, int n) -{ - int j = 0; float d = 0.f; -#if CV_SSE - if( USE_SSE2 ) - { - float CV_DECL_ALIGNED(16) buf[4]; - static const int CV_DECL_ALIGNED(16) absbuf[4] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff}; - __m128 d0 = _mm_setzero_ps(), d1 = _mm_setzero_ps(); - __m128 absmask = _mm_load_ps((const float*)absbuf); - - for( ; j <= n - 8; j += 8 ) - { - __m128 t0 = _mm_sub_ps(_mm_loadu_ps(a + j), _mm_loadu_ps(b + j)); - __m128 t1 = _mm_sub_ps(_mm_loadu_ps(a + j + 4), _mm_loadu_ps(b + j + 4)); - d0 = _mm_add_ps(d0, _mm_and_ps(t0, absmask)); - d1 = _mm_add_ps(d1, _mm_and_ps(t1, absmask)); - } - _mm_store_ps(buf, _mm_add_ps(d0, d1)); - d = buf[0] + buf[1] + buf[2] + buf[3]; - } - else -#endif - { - for( ; j <= n - 4; j += 4 ) - { - d += std::abs(a[j] - b[j]) + std::abs(a[j+1] - b[j+1]) + - std::abs(a[j+2] - b[j+2]) + std::abs(a[j+3] - b[j+3]); - } - } - - for( ; j < n; j++ ) - d += std::abs(a[j] - b[j]); - return d; -} - -int normL1_(const uchar* a, const uchar* b, int n) -{ - int j = 0, d = 0; -#if CV_SSE - if( USE_SSE2 ) - { - __m128i d0 = _mm_setzero_si128(); - - for( ; j <= n - 16; j += 16 ) - { - __m128i t0 = _mm_loadu_si128((const __m128i*)(a + j)); - __m128i t1 = _mm_loadu_si128((const __m128i*)(b + j)); - - d0 = _mm_add_epi32(d0, _mm_sad_epu8(t0, t1)); - } - - for( ; j <= n - 4; j += 4 ) - { - __m128i t0 = _mm_cvtsi32_si128(*(const int*)(a + j)); - __m128i t1 = _mm_cvtsi32_si128(*(const int*)(b + j)); - - d0 = _mm_add_epi32(d0, _mm_sad_epu8(t0, t1)); - } - d = _mm_cvtsi128_si32(_mm_add_epi32(d0, _mm_unpackhi_epi64(d0, d0))); - } - else -#endif - { - for( ; j <= n - 4; j += 4 ) - { - d += std::abs(a[j] - b[j]) + std::abs(a[j+1] - b[j+1]) + - std::abs(a[j+2] - b[j+2]) + std::abs(a[j+3] - b[j+3]); - } - } - for( ; j < n; j++ ) - d += std::abs(a[j] - b[j]); - return d; -} - -static const uchar popCountTable[] = -{ - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 -}; - -static const uchar popCountTable2[] = -{ - 0, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, - 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, - 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, - 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, - 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, - 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, - 1, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, - 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 4 -}; - -static const uchar popCountTable4[] = -{ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static int normHamming(const uchar* a, int n) -{ - int i = 0, result = 0; -#if CV_NEON - uint32x4_t bits = vmovq_n_u32(0); - for (; i <= n - 16; i += 16) { - uint8x16_t A_vec = vld1q_u8 (a + i); - uint8x16_t bitsSet = vcntq_u8 (A_vec); - uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet); - uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8); - bits = vaddq_u32(bits, bitSet4); - } - uint64x2_t bitSet2 = vpaddlq_u32 (bits); - result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0); - result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); -#else - for( ; i <= n - 4; i += 4 ) - result += popCountTable[a[i]] + popCountTable[a[i+1]] + - popCountTable[a[i+2]] + popCountTable[a[i+3]]; -#endif - for( ; i < n; i++ ) - result += popCountTable[a[i]]; - return result; -} - -int normHamming(const uchar* a, const uchar* b, int n) -{ - int i = 0, result = 0; -#if CV_NEON - uint32x4_t bits = vmovq_n_u32(0); - for (; i <= n - 16; i += 16) { - uint8x16_t A_vec = vld1q_u8 (a + i); - uint8x16_t B_vec = vld1q_u8 (b + i); - uint8x16_t AxorB = veorq_u8 (A_vec, B_vec); - uint8x16_t bitsSet = vcntq_u8 (AxorB); - uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet); - uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8); - bits = vaddq_u32(bits, bitSet4); - } - uint64x2_t bitSet2 = vpaddlq_u32 (bits); - result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0); - result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); -#else - for( ; i <= n - 4; i += 4 ) - result += popCountTable[a[i] ^ b[i]] + popCountTable[a[i+1] ^ b[i+1]] + - popCountTable[a[i+2] ^ b[i+2]] + popCountTable[a[i+3] ^ b[i+3]]; -#endif - for( ; i < n; i++ ) - result += popCountTable[a[i] ^ b[i]]; - return result; -} - -static int normHamming(const uchar* a, int n, int cellSize) -{ - if( cellSize == 1 ) - return normHamming(a, n); - const uchar* tab = 0; - if( cellSize == 2 ) - tab = popCountTable2; - else if( cellSize == 4 ) - tab = popCountTable4; - else - CV_Error( CV_StsBadSize, "bad cell size (not 1, 2 or 4) in normHamming" ); - int i = 0, result = 0; -#if CV_ENABLE_UNROLLED - for( ; i <= n - 4; i += 4 ) - result += tab[a[i]] + tab[a[i+1]] + tab[a[i+2]] + tab[a[i+3]]; -#endif - for( ; i < n; i++ ) - result += tab[a[i]]; - return result; -} - -int normHamming(const uchar* a, const uchar* b, int n, int cellSize) -{ - if( cellSize == 1 ) - return normHamming(a, b, n); - const uchar* tab = 0; - if( cellSize == 2 ) - tab = popCountTable2; - else if( cellSize == 4 ) - tab = popCountTable4; - else - CV_Error( CV_StsBadSize, "bad cell size (not 1, 2 or 4) in normHamming" ); - int i = 0, result = 0; - #if CV_ENABLE_UNROLLED - for( ; i <= n - 4; i += 4 ) - result += tab[a[i] ^ b[i]] + tab[a[i+1] ^ b[i+1]] + - tab[a[i+2] ^ b[i+2]] + tab[a[i+3] ^ b[i+3]]; - #endif - for( ; i < n; i++ ) - result += tab[a[i] ^ b[i]]; - return result; -} - - -template int -normInf_(const T* src, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result = std::max(result, normInf(src, len*cn)); - } - else - { - for( int i = 0; i < len; i++, src += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - result = std::max(result, ST(fast_abs(src[k]))); - } - } - *_result = result; - return 0; -} - -template int -normL1_(const T* src, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result += normL1(src, len*cn); - } - else - { - for( int i = 0; i < len; i++, src += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - result += fast_abs(src[k]); - } - } - *_result = result; - return 0; -} - -template int -normL2_(const T* src, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result += normL2Sqr(src, len*cn); - } - else - { - for( int i = 0; i < len; i++, src += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - { - T v = src[k]; - result += (ST)v*v; - } - } - } - *_result = result; - return 0; -} - -template int -normDiffInf_(const T* src1, const T* src2, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result = std::max(result, normInf(src1, src2, len*cn)); - } - else - { - for( int i = 0; i < len; i++, src1 += cn, src2 += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - result = std::max(result, (ST)std::abs(src1[k] - src2[k])); - } - } - *_result = result; - return 0; -} - -template int -normDiffL1_(const T* src1, const T* src2, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result += normL1(src1, src2, len*cn); - } - else - { - for( int i = 0; i < len; i++, src1 += cn, src2 += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - result += std::abs(src1[k] - src2[k]); - } - } - *_result = result; - return 0; -} - -template int -normDiffL2_(const T* src1, const T* src2, const uchar* mask, ST* _result, int len, int cn) -{ - ST result = *_result; - if( !mask ) - { - result += normL2Sqr(src1, src2, len*cn); - } - else - { - for( int i = 0; i < len; i++, src1 += cn, src2 += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - { - ST v = src1[k] - src2[k]; - result += v*v; - } - } - } - *_result = result; - return 0; -} - - -#define CV_DEF_NORM_FUNC(L, suffix, type, ntype) \ - static int norm##L##_##suffix(const type* src, const uchar* mask, ntype* r, int len, int cn) \ -{ return norm##L##_(src, mask, r, len, cn); } \ - static int normDiff##L##_##suffix(const type* src1, const type* src2, \ - const uchar* mask, ntype* r, int len, int cn) \ -{ return normDiff##L##_(src1, src2, mask, r, (int)len, cn); } - -#define CV_DEF_NORM_ALL(suffix, type, inftype, l1type, l2type) \ - CV_DEF_NORM_FUNC(Inf, suffix, type, inftype) \ - CV_DEF_NORM_FUNC(L1, suffix, type, l1type) \ - CV_DEF_NORM_FUNC(L2, suffix, type, l2type) - -CV_DEF_NORM_ALL(8u, uchar, int, int, int) -CV_DEF_NORM_ALL(8s, schar, int, int, int) -CV_DEF_NORM_ALL(16u, ushort, int, int, double) -CV_DEF_NORM_ALL(16s, short, int, int, double) -CV_DEF_NORM_ALL(32s, int, int, double, double) -CV_DEF_NORM_ALL(32f, float, float, double, double) -CV_DEF_NORM_ALL(64f, double, double, double, double) - - -typedef int (*NormFunc)(const uchar*, const uchar*, uchar*, int, int); -typedef int (*NormDiffFunc)(const uchar*, const uchar*, const uchar*, uchar*, int, int); - -static NormFunc getNormFunc(int normType, int depth) -{ - static NormFunc normTab[3][8] = - { - { - (NormFunc)GET_OPTIMIZED(normInf_8u), (NormFunc)GET_OPTIMIZED(normInf_8s), (NormFunc)GET_OPTIMIZED(normInf_16u), (NormFunc)GET_OPTIMIZED(normInf_16s), - (NormFunc)GET_OPTIMIZED(normInf_32s), (NormFunc)GET_OPTIMIZED(normInf_32f), (NormFunc)normInf_64f, 0 - }, - { - (NormFunc)GET_OPTIMIZED(normL1_8u), (NormFunc)GET_OPTIMIZED(normL1_8s), (NormFunc)GET_OPTIMIZED(normL1_16u), (NormFunc)GET_OPTIMIZED(normL1_16s), - (NormFunc)GET_OPTIMIZED(normL1_32s), (NormFunc)GET_OPTIMIZED(normL1_32f), (NormFunc)normL1_64f, 0 - }, - { - (NormFunc)GET_OPTIMIZED(normL2_8u), (NormFunc)GET_OPTIMIZED(normL2_8s), (NormFunc)GET_OPTIMIZED(normL2_16u), (NormFunc)GET_OPTIMIZED(normL2_16s), - (NormFunc)GET_OPTIMIZED(normL2_32s), (NormFunc)GET_OPTIMIZED(normL2_32f), (NormFunc)normL2_64f, 0 - } - }; - - return normTab[normType][depth]; -} - -static NormDiffFunc getNormDiffFunc(int normType, int depth) -{ - static NormDiffFunc normDiffTab[3][8] = - { - { - (NormDiffFunc)GET_OPTIMIZED(normDiffInf_8u), (NormDiffFunc)normDiffInf_8s, - (NormDiffFunc)normDiffInf_16u, (NormDiffFunc)normDiffInf_16s, - (NormDiffFunc)normDiffInf_32s, (NormDiffFunc)GET_OPTIMIZED(normDiffInf_32f), - (NormDiffFunc)normDiffInf_64f, 0 - }, - { - (NormDiffFunc)GET_OPTIMIZED(normDiffL1_8u), (NormDiffFunc)normDiffL1_8s, - (NormDiffFunc)normDiffL1_16u, (NormDiffFunc)normDiffL1_16s, - (NormDiffFunc)normDiffL1_32s, (NormDiffFunc)GET_OPTIMIZED(normDiffL1_32f), - (NormDiffFunc)normDiffL1_64f, 0 - }, - { - (NormDiffFunc)GET_OPTIMIZED(normDiffL2_8u), (NormDiffFunc)normDiffL2_8s, - (NormDiffFunc)normDiffL2_16u, (NormDiffFunc)normDiffL2_16s, - (NormDiffFunc)normDiffL2_32s, (NormDiffFunc)GET_OPTIMIZED(normDiffL2_32f), - (NormDiffFunc)normDiffL2_64f, 0 - } - }; - - return normDiffTab[normType][depth]; -} - -} - -double cv::norm( InputArray _src, int normType, InputArray _mask ) -{ - Mat src = _src.getMat(), mask = _mask.getMat(); - int depth = src.depth(), cn = src.channels(); - - normType &= 7; - CV_Assert( normType == NORM_INF || normType == NORM_L1 || - normType == NORM_L2 || normType == NORM_L2SQR || - ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && src.type() == CV_8U) ); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src.total(); - int rows = src.size[0], cols = (int)(total_size/rows); - if( (src.dims == 2 || (src.isContinuous() && mask.isContinuous())) - && cols > 0 && (size_t)rows*cols == total_size - && (normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR) ) - { - IppiSize sz = { cols, rows }; - int type = src.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskNormFuncC1)(const void *, int, const void *, int, IppiSize, Ipp64f *); - ippiMaskNormFuncC1 ippFuncC1 = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiMaskNormFuncC1)ippiNorm_Inf_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormFuncC1)ippiNorm_Inf_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormFuncC1)ippiNorm_Inf_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormFuncC1)ippiNorm_Inf_32f_C1MR : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiMaskNormFuncC1)ippiNorm_L1_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormFuncC1)ippiNorm_L1_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormFuncC1)ippiNorm_L1_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormFuncC1)ippiNorm_L1_32f_C1MR : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiMaskNormFuncC1)ippiNorm_L2_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormFuncC1)ippiNorm_L2_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormFuncC1)ippiNorm_L2_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormFuncC1)ippiNorm_L2_32f_C1MR : - 0) : 0; - if( ippFuncC1 ) - { - Ipp64f norm; - if( ippFuncC1(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, &norm) >= 0 ) - { - return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm; - } - } - typedef IppStatus (CV_STDCALL* ippiMaskNormFuncC3)(const void *, int, const void *, int, IppiSize, int, Ipp64f *); - ippiMaskNormFuncC3 ippFuncC3 = - normType == NORM_INF ? - (type == CV_8UC3 ? (ippiMaskNormFuncC3)ippiNorm_Inf_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormFuncC3)ippiNorm_Inf_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormFuncC3)ippiNorm_Inf_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormFuncC3)ippiNorm_Inf_32f_C3CMR : - 0) : - normType == NORM_L1 ? - (type == CV_8UC3 ? (ippiMaskNormFuncC3)ippiNorm_L1_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormFuncC3)ippiNorm_L1_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormFuncC3)ippiNorm_L1_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormFuncC3)ippiNorm_L1_32f_C3CMR : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC3 ? (ippiMaskNormFuncC3)ippiNorm_L2_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormFuncC3)ippiNorm_L2_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormFuncC3)ippiNorm_L2_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormFuncC3)ippiNorm_L2_32f_C3CMR : - 0) : 0; - if( ippFuncC3 ) - { - Ipp64f norm1, norm2, norm3; - if( ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 1, &norm1) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 2, &norm2) >= 0 && - ippFuncC3(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, 3, &norm3) >= 0) - { - Ipp64f norm = - normType == NORM_INF ? std::max(std::max(norm1, norm2), norm3) : - normType == NORM_L1 ? norm1 + norm2 + norm3 : - normType == NORM_L2 || normType == NORM_L2SQR ? std::sqrt(norm1 * norm1 + norm2 * norm2 + norm3 * norm3) : - 0; - return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm; - } - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiNormFunc)(const void *, int, IppiSize, Ipp64f *, IppHintAlgorithm hint); - ippiNormFunc ippFunc = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiNormFunc)ippiNorm_Inf_8u_C1R : - type == CV_8UC3 ? (ippiNormFunc)ippiNorm_Inf_8u_C3R : - type == CV_8UC4 ? (ippiNormFunc)ippiNorm_Inf_8u_C4R : - type == CV_16UC1 ? (ippiNormFunc)ippiNorm_Inf_16u_C1R : - type == CV_16UC3 ? (ippiNormFunc)ippiNorm_Inf_16u_C3R : - type == CV_16UC4 ? (ippiNormFunc)ippiNorm_Inf_16u_C4R : - type == CV_16SC1 ? (ippiNormFunc)ippiNorm_Inf_16s_C1R : - //type == CV_16SC3 ? (ippiNormFunc)ippiNorm_Inf_16s_C3R : //Aug 2013: problem in IPP 7.1, 8.0 : -32768 - //type == CV_16SC4 ? (ippiNormFunc)ippiNorm_Inf_16s_C4R : //Aug 2013: problem in IPP 7.1, 8.0 : -32768 - type == CV_32FC1 ? (ippiNormFunc)ippiNorm_Inf_32f_C1R : - type == CV_32FC3 ? (ippiNormFunc)ippiNorm_Inf_32f_C3R : - type == CV_32FC4 ? (ippiNormFunc)ippiNorm_Inf_32f_C4R : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiNormFunc)ippiNorm_L1_8u_C1R : - type == CV_8UC3 ? (ippiNormFunc)ippiNorm_L1_8u_C3R : - type == CV_8UC4 ? (ippiNormFunc)ippiNorm_L1_8u_C4R : - type == CV_16UC1 ? (ippiNormFunc)ippiNorm_L1_16u_C1R : - type == CV_16UC3 ? (ippiNormFunc)ippiNorm_L1_16u_C3R : - type == CV_16UC4 ? (ippiNormFunc)ippiNorm_L1_16u_C4R : - type == CV_16SC1 ? (ippiNormFunc)ippiNorm_L1_16s_C1R : - type == CV_16SC3 ? (ippiNormFunc)ippiNorm_L1_16s_C3R : - type == CV_16SC4 ? (ippiNormFunc)ippiNorm_L1_16s_C4R : - type == CV_32FC1 ? (ippiNormFunc)ippiNorm_L1_32f_C1R : - type == CV_32FC3 ? (ippiNormFunc)ippiNorm_L1_32f_C3R : - type == CV_32FC4 ? (ippiNormFunc)ippiNorm_L1_32f_C4R : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiNormFunc)ippiNorm_L2_8u_C1R : - type == CV_8UC3 ? (ippiNormFunc)ippiNorm_L2_8u_C3R : - type == CV_8UC4 ? (ippiNormFunc)ippiNorm_L2_8u_C4R : - type == CV_16UC1 ? (ippiNormFunc)ippiNorm_L2_16u_C1R : - type == CV_16UC3 ? (ippiNormFunc)ippiNorm_L2_16u_C3R : - type == CV_16UC4 ? (ippiNormFunc)ippiNorm_L2_16u_C4R : - type == CV_16SC1 ? (ippiNormFunc)ippiNorm_L2_16s_C1R : - type == CV_16SC3 ? (ippiNormFunc)ippiNorm_L2_16s_C3R : - type == CV_16SC4 ? (ippiNormFunc)ippiNorm_L2_16s_C4R : - type == CV_32FC1 ? (ippiNormFunc)ippiNorm_L2_32f_C1R : - type == CV_32FC3 ? (ippiNormFunc)ippiNorm_L2_32f_C3R : - type == CV_32FC4 ? (ippiNormFunc)ippiNorm_L2_32f_C4R : - 0) : 0; - if( ippFunc ) - { - Ipp64f norm_array[4]; - if( ippFunc(src.data, (int)src.step[0], sz, norm_array, ippAlgHintAccurate) >= 0 ) - { - Ipp64f norm = (normType == NORM_L2 || normType == NORM_L2SQR) ? norm_array[0] * norm_array[0] : norm_array[0]; - for( int i = 1; i < cn; i++ ) - { - norm = - normType == NORM_INF ? std::max(norm, norm_array[i]) : - normType == NORM_L1 ? norm + norm_array[i] : - normType == NORM_L2 || normType == NORM_L2SQR ? norm + norm_array[i] * norm_array[i] : - 0; - } - return normType == NORM_L2 ? (double)std::sqrt(norm) : (double)norm; - } - } - } - } -#endif - - if( src.isContinuous() && mask.empty() ) - { - size_t len = src.total()*cn; - if( len == (size_t)(int)len ) - { - if( depth == CV_32F ) - { - const float* data = src.ptr(); - - if( normType == NORM_L2 ) - { - double result = 0; - GET_OPTIMIZED(normL2_32f)(data, 0, &result, (int)len, 1); - return std::sqrt(result); - } - if( normType == NORM_L2SQR ) - { - double result = 0; - GET_OPTIMIZED(normL2_32f)(data, 0, &result, (int)len, 1); - return result; - } - if( normType == NORM_L1 ) - { - double result = 0; - GET_OPTIMIZED(normL1_32f)(data, 0, &result, (int)len, 1); - return result; - } - if( normType == NORM_INF ) - { - float result = 0; - GET_OPTIMIZED(normInf_32f)(data, 0, &result, (int)len, 1); - return result; - } - } - if( depth == CV_8U ) - { - const uchar* data = src.ptr(); - - if( normType == NORM_HAMMING ) - return normHamming(data, (int)len); - - if( normType == NORM_HAMMING2 ) - return normHamming(data, (int)len, 2); - } - } - } - - CV_Assert( mask.empty() || mask.type() == CV_8U ); - - if( normType == NORM_HAMMING || normType == NORM_HAMMING2 ) - { - if( !mask.empty() ) - { - Mat temp; - bitwise_and(src, mask, temp); - return norm(temp, normType); - } - int cellSize = normType == NORM_HAMMING ? 1 : 2; - - const Mat* arrays[] = {&src, 0}; - uchar* ptrs[1]; - NAryMatIterator it(arrays, ptrs); - int total = (int)it.size; - int result = 0; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - result += normHamming(ptrs[0], total, cellSize); - - return result; - } - - NormFunc func = getNormFunc(normType >> 1, depth); - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &mask, 0}; - uchar* ptrs[2]; - union - { - double d; - int i; - float f; - } - result; - result.d = 0; - NAryMatIterator it(arrays, ptrs); - int j, total = (int)it.size, blockSize = total, intSumBlockSize = 0, count = 0; - bool blockSum = (normType == NORM_L1 && depth <= CV_16S) || - ((normType == NORM_L2 || normType == NORM_L2SQR) && depth <= CV_8S); - int isum = 0; - int *ibuf = &result.i; - size_t esz = 0; - - if( blockSum ) - { - intSumBlockSize = (normType == NORM_L1 && depth <= CV_8S ? (1 << 23) : (1 << 15))/cn; - blockSize = std::min(blockSize, intSumBlockSize); - ibuf = &isum; - esz = src.elemSize(); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int bsz = std::min(total - j, blockSize); - func( ptrs[0], ptrs[1], (uchar*)ibuf, bsz, cn ); - count += bsz; - if( blockSum && (count + blockSize >= intSumBlockSize || (i+1 >= it.nplanes && j+bsz >= total)) ) - { - result.d += isum; - isum = 0; - count = 0; - } - ptrs[0] += bsz*esz; - if( ptrs[1] ) - ptrs[1] += bsz; - } - } - - if( normType == NORM_INF ) - { - if( depth == CV_64F ) - ; - else if( depth == CV_32F ) - result.d = result.f; - else - result.d = result.i; - } - else if( normType == NORM_L2 ) - result.d = std::sqrt(result.d); - - return result.d; -} - - -double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _mask ) -{ - if( normType & CV_RELATIVE ) - { -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - Mat src1 = _src1.getMat(), src2 = _src2.getMat(), mask = _mask.getMat(); - - CV_Assert( src1.size == src2.size && src1.type() == src2.type() ); - - normType &= 7; - CV_Assert( normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR || - ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && src1.type() == CV_8U) ); - size_t total_size = src1.total(); - int rows = src1.size[0], cols = (int)(total_size/rows); - if( (src1.dims == 2 || (src1.isContinuous() && src2.isContinuous() && mask.isContinuous())) - && cols > 0 && (size_t)rows*cols == total_size - && (normType == NORM_INF || normType == NORM_L1 || - normType == NORM_L2 || normType == NORM_L2SQR) ) - { - IppiSize sz = { cols, rows }; - int type = src1.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskNormRelFuncC1)(const void *, int, const void *, int, const void *, int, IppiSize, Ipp64f *); - ippiMaskNormRelFuncC1 ippFuncC1 = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_Inf_32f_C1MR : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L1_32f_C1MR : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormRelFuncC1)ippiNormRel_L2_32f_C1MR : - 0) : 0; - if( ippFuncC1 ) - { - Ipp64f norm; - if( ippFuncC1(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, &norm) >= 0 ) - return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm; - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiNormRelFunc)(const void *, int, const void *, int, IppiSize, Ipp64f *, IppHintAlgorithm hint); - ippiNormRelFunc ippFunc = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiNormRelFunc)ippiNormRel_Inf_8u_C1R : - type == CV_16UC1 ? (ippiNormRelFunc)ippiNormRel_Inf_16u_C1R : - type == CV_16SC1 ? (ippiNormRelFunc)ippiNormRel_Inf_16s_C1R : - type == CV_32FC1 ? (ippiNormRelFunc)ippiNormRel_Inf_32f_C1R : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiNormRelFunc)ippiNormRel_L1_8u_C1R : - type == CV_16UC1 ? (ippiNormRelFunc)ippiNormRel_L1_16u_C1R : - type == CV_16SC1 ? (ippiNormRelFunc)ippiNormRel_L1_16s_C1R : - type == CV_32FC1 ? (ippiNormRelFunc)ippiNormRel_L1_32f_C1R : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiNormRelFunc)ippiNormRel_L2_8u_C1R : - type == CV_16UC1 ? (ippiNormRelFunc)ippiNormRel_L2_16u_C1R : - type == CV_16SC1 ? (ippiNormRelFunc)ippiNormRel_L2_16s_C1R : - type == CV_32FC1 ? (ippiNormRelFunc)ippiNormRel_L2_32f_C1R : - 0) : 0; - if( ippFunc ) - { - Ipp64f norm; - if( ippFunc(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], sz, &norm, ippAlgHintAccurate) >= 0 ) - return (double)norm; - } - } - } -#endif - return norm(_src1, _src2, normType & ~CV_RELATIVE, _mask)/(norm(_src2, normType, _mask) + DBL_EPSILON); - } - - Mat src1 = _src1.getMat(), src2 = _src2.getMat(), mask = _mask.getMat(); - int depth = src1.depth(), cn = src1.channels(); - - CV_Assert( src1.size == src2.size && src1.type() == src2.type() ); - - normType &= 7; - CV_Assert( normType == NORM_INF || normType == NORM_L1 || - normType == NORM_L2 || normType == NORM_L2SQR || - ((normType == NORM_HAMMING || normType == NORM_HAMMING2) && src1.type() == CV_8U) ); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - size_t total_size = src1.total(); - int rows = src1.size[0], cols = (int)(total_size/rows); - if( (src1.dims == 2 || (src1.isContinuous() && src2.isContinuous() && mask.isContinuous())) - && cols > 0 && (size_t)rows*cols == total_size - && (normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR) ) - { - IppiSize sz = { cols, rows }; - int type = src1.type(); - if( !mask.empty() ) - { - typedef IppStatus (CV_STDCALL* ippiMaskNormDiffFuncC1)(const void *, int, const void *, int, const void *, int, IppiSize, Ipp64f *); - ippiMaskNormDiffFuncC1 ippFuncC1 = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_Inf_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_Inf_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_Inf_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_Inf_32f_C1MR : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L1_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L1_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L1_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L1_32f_C1MR : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L2_8u_C1MR : - type == CV_8SC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L2_8s_C1MR : - type == CV_16UC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L2_16u_C1MR : - type == CV_32FC1 ? (ippiMaskNormDiffFuncC1)ippiNormDiff_L2_32f_C1MR : - 0) : 0; - if( ippFuncC1 ) - { - Ipp64f norm; - if( ippFuncC1(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, &norm) >= 0 ) - return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm; - } - typedef IppStatus (CV_STDCALL* ippiMaskNormDiffFuncC3)(const void *, int, const void *, int, const void *, int, IppiSize, int, Ipp64f *); - ippiMaskNormDiffFuncC3 ippFuncC3 = - normType == NORM_INF ? - (type == CV_8UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_Inf_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_Inf_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_Inf_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_Inf_32f_C3CMR : - 0) : - normType == NORM_L1 ? - (type == CV_8UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L1_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L1_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L1_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L1_32f_C3CMR : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L2_8u_C3CMR : - type == CV_8SC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L2_8s_C3CMR : - type == CV_16UC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L2_16u_C3CMR : - type == CV_32FC3 ? (ippiMaskNormDiffFuncC3)ippiNormDiff_L2_32f_C3CMR : - 0) : 0; - if( ippFuncC3 ) - { - Ipp64f norm1, norm2, norm3; - if( ippFuncC3(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, 1, &norm1) >= 0 && - ippFuncC3(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, 2, &norm2) >= 0 && - ippFuncC3(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], mask.data, (int)mask.step[0], sz, 3, &norm3) >= 0) - { - Ipp64f norm = - normType == NORM_INF ? std::max(std::max(norm1, norm2), norm3) : - normType == NORM_L1 ? norm1 + norm2 + norm3 : - normType == NORM_L2 || normType == NORM_L2SQR ? std::sqrt(norm1 * norm1 + norm2 * norm2 + norm3 * norm3) : - 0; - return normType == NORM_L2SQR ? (double)(norm * norm) : (double)norm; - } - } - } - else - { - typedef IppStatus (CV_STDCALL* ippiNormDiffFunc)(const void *, int, const void *, int, IppiSize, Ipp64f *, IppHintAlgorithm hint); - ippiNormDiffFunc ippFunc = - normType == NORM_INF ? - (type == CV_8UC1 ? (ippiNormDiffFunc)ippiNormDiff_Inf_8u_C1R : - type == CV_8UC3 ? (ippiNormDiffFunc)ippiNormDiff_Inf_8u_C3R : - type == CV_8UC4 ? (ippiNormDiffFunc)ippiNormDiff_Inf_8u_C4R : - type == CV_16UC1 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16u_C1R : - type == CV_16UC3 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16u_C3R : - type == CV_16UC4 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16u_C4R : - type == CV_16SC1 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16s_C1R : - //type == CV_16SC3 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16s_C3R : //Aug 2013: problem in IPP 7.1, 8.0 : -32768 - //type == CV_16SC4 ? (ippiNormDiffFunc)ippiNormDiff_Inf_16s_C4R : //Aug 2013: problem in IPP 7.1, 8.0 : -32768 - type == CV_32FC1 ? (ippiNormDiffFunc)ippiNormDiff_Inf_32f_C1R : - type == CV_32FC3 ? (ippiNormDiffFunc)ippiNormDiff_Inf_32f_C3R : - type == CV_32FC4 ? (ippiNormDiffFunc)ippiNormDiff_Inf_32f_C4R : - 0) : - normType == NORM_L1 ? - (type == CV_8UC1 ? (ippiNormDiffFunc)ippiNormDiff_L1_8u_C1R : - type == CV_8UC3 ? (ippiNormDiffFunc)ippiNormDiff_L1_8u_C3R : - type == CV_8UC4 ? (ippiNormDiffFunc)ippiNormDiff_L1_8u_C4R : - type == CV_16UC1 ? (ippiNormDiffFunc)ippiNormDiff_L1_16u_C1R : - type == CV_16UC3 ? (ippiNormDiffFunc)ippiNormDiff_L1_16u_C3R : - type == CV_16UC4 ? (ippiNormDiffFunc)ippiNormDiff_L1_16u_C4R : - type == CV_16SC1 ? (ippiNormDiffFunc)ippiNormDiff_L1_16s_C1R : - type == CV_16SC3 ? (ippiNormDiffFunc)ippiNormDiff_L1_16s_C3R : - type == CV_16SC4 ? (ippiNormDiffFunc)ippiNormDiff_L1_16s_C4R : - type == CV_32FC1 ? (ippiNormDiffFunc)ippiNormDiff_L1_32f_C1R : - type == CV_32FC3 ? (ippiNormDiffFunc)ippiNormDiff_L1_32f_C3R : - type == CV_32FC4 ? (ippiNormDiffFunc)ippiNormDiff_L1_32f_C4R : - 0) : - normType == NORM_L2 || normType == NORM_L2SQR ? - (type == CV_8UC1 ? (ippiNormDiffFunc)ippiNormDiff_L2_8u_C1R : - type == CV_8UC3 ? (ippiNormDiffFunc)ippiNormDiff_L2_8u_C3R : - type == CV_8UC4 ? (ippiNormDiffFunc)ippiNormDiff_L2_8u_C4R : - type == CV_16UC1 ? (ippiNormDiffFunc)ippiNormDiff_L2_16u_C1R : - type == CV_16UC3 ? (ippiNormDiffFunc)ippiNormDiff_L2_16u_C3R : - type == CV_16UC4 ? (ippiNormDiffFunc)ippiNormDiff_L2_16u_C4R : - type == CV_16SC1 ? (ippiNormDiffFunc)ippiNormDiff_L2_16s_C1R : - type == CV_16SC3 ? (ippiNormDiffFunc)ippiNormDiff_L2_16s_C3R : - type == CV_16SC4 ? (ippiNormDiffFunc)ippiNormDiff_L2_16s_C4R : - type == CV_32FC1 ? (ippiNormDiffFunc)ippiNormDiff_L2_32f_C1R : - type == CV_32FC3 ? (ippiNormDiffFunc)ippiNormDiff_L2_32f_C3R : - type == CV_32FC4 ? (ippiNormDiffFunc)ippiNormDiff_L2_32f_C4R : - 0) : 0; - if( ippFunc ) - { - Ipp64f norm_array[4]; - if( ippFunc(src1.data, (int)src1.step[0], src2.data, (int)src2.step[0], sz, norm_array, ippAlgHintAccurate) >= 0 ) - { - Ipp64f norm = (normType == NORM_L2 || normType == NORM_L2SQR) ? norm_array[0] * norm_array[0] : norm_array[0]; - for( int i = 1; i < src1.channels(); i++ ) - { - norm = - normType == NORM_INF ? std::max(norm, norm_array[i]) : - normType == NORM_L1 ? norm + norm_array[i] : - normType == NORM_L2 || normType == NORM_L2SQR ? norm + norm_array[i] * norm_array[i] : - 0; - } - return normType == NORM_L2 ? (double)std::sqrt(norm) : (double)norm; - } - } - } - } -#endif - - if( src1.isContinuous() && src2.isContinuous() && mask.empty() ) - { - size_t len = src1.total()*src1.channels(); - if( len == (size_t)(int)len ) - { - if( src1.depth() == CV_32F ) - { - const float* data1 = src1.ptr(); - const float* data2 = src2.ptr(); - - if( normType == NORM_L2 ) - { - double result = 0; - GET_OPTIMIZED(normDiffL2_32f)(data1, data2, 0, &result, (int)len, 1); - return std::sqrt(result); - } - if( normType == NORM_L2SQR ) - { - double result = 0; - GET_OPTIMIZED(normDiffL2_32f)(data1, data2, 0, &result, (int)len, 1); - return result; - } - if( normType == NORM_L1 ) - { - double result = 0; - GET_OPTIMIZED(normDiffL1_32f)(data1, data2, 0, &result, (int)len, 1); - return result; - } - if( normType == NORM_INF ) - { - float result = 0; - GET_OPTIMIZED(normDiffInf_32f)(data1, data2, 0, &result, (int)len, 1); - return result; - } - } - } - } - - CV_Assert( mask.empty() || mask.type() == CV_8U ); - - if( normType == NORM_HAMMING || normType == NORM_HAMMING2 ) - { - if( !mask.empty() ) - { - Mat temp; - bitwise_xor(src1, src2, temp); - bitwise_and(temp, mask, temp); - return norm(temp, normType); - } - int cellSize = normType == NORM_HAMMING ? 1 : 2; - - const Mat* arrays[] = {&src1, &src2, 0}; - uchar* ptrs[2]; - NAryMatIterator it(arrays, ptrs); - int total = (int)it.size; - int result = 0; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - result += normHamming(ptrs[0], ptrs[1], total, cellSize); - - return result; - } - - NormDiffFunc func = getNormDiffFunc(normType >> 1, depth); - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src1, &src2, &mask, 0}; - uchar* ptrs[3]; - union - { - double d; - float f; - int i; - unsigned u; - } - result; - result.d = 0; - NAryMatIterator it(arrays, ptrs); - int j, total = (int)it.size, blockSize = total, intSumBlockSize = 0, count = 0; - bool blockSum = (normType == NORM_L1 && depth <= CV_16S) || - ((normType == NORM_L2 || normType == NORM_L2SQR) && depth <= CV_8S); - unsigned isum = 0; - unsigned *ibuf = &result.u; - size_t esz = 0; - - if( blockSum ) - { - intSumBlockSize = normType == NORM_L1 && depth <= CV_8S ? (1 << 23) : (1 << 15); - blockSize = std::min(blockSize, intSumBlockSize); - ibuf = &isum; - esz = src1.elemSize(); - } - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - for( j = 0; j < total; j += blockSize ) - { - int bsz = std::min(total - j, blockSize); - func( ptrs[0], ptrs[1], ptrs[2], (uchar*)ibuf, bsz, cn ); - count += bsz; - if( blockSum && (count + blockSize >= intSumBlockSize || (i+1 >= it.nplanes && j+bsz >= total)) ) - { - result.d += isum; - isum = 0; - count = 0; - } - ptrs[0] += bsz*esz; - ptrs[1] += bsz*esz; - if( ptrs[2] ) - ptrs[2] += bsz; - } - } - - if( normType == NORM_INF ) - { - if( depth == CV_64F ) - ; - else if( depth == CV_32F ) - result.d = result.f; - else - result.d = result.u; - } - else if( normType == NORM_L2 ) - result.d = std::sqrt(result.d); - - return result.d; -} - - -///////////////////////////////////// batch distance /////////////////////////////////////// - -namespace cv -{ - -template -void batchDistL1_(const _Tp* src1, const _Tp* src2, size_t step2, - int nvecs, int len, _Rt* dist, const uchar* mask) -{ - step2 /= sizeof(src2[0]); - if( !mask ) - { - for( int i = 0; i < nvecs; i++ ) - dist[i] = normL1<_Tp, _Rt>(src1, src2 + step2*i, len); - } - else - { - _Rt val0 = std::numeric_limits<_Rt>::max(); - for( int i = 0; i < nvecs; i++ ) - dist[i] = mask[i] ? normL1<_Tp, _Rt>(src1, src2 + step2*i, len) : val0; - } -} - -template -void batchDistL2Sqr_(const _Tp* src1, const _Tp* src2, size_t step2, - int nvecs, int len, _Rt* dist, const uchar* mask) -{ - step2 /= sizeof(src2[0]); - if( !mask ) - { - for( int i = 0; i < nvecs; i++ ) - dist[i] = normL2Sqr<_Tp, _Rt>(src1, src2 + step2*i, len); - } - else - { - _Rt val0 = std::numeric_limits<_Rt>::max(); - for( int i = 0; i < nvecs; i++ ) - dist[i] = mask[i] ? normL2Sqr<_Tp, _Rt>(src1, src2 + step2*i, len) : val0; - } -} - -template -void batchDistL2_(const _Tp* src1, const _Tp* src2, size_t step2, - int nvecs, int len, _Rt* dist, const uchar* mask) -{ - step2 /= sizeof(src2[0]); - if( !mask ) - { - for( int i = 0; i < nvecs; i++ ) - dist[i] = std::sqrt(normL2Sqr<_Tp, _Rt>(src1, src2 + step2*i, len)); - } - else - { - _Rt val0 = std::numeric_limits<_Rt>::max(); - for( int i = 0; i < nvecs; i++ ) - dist[i] = mask[i] ? std::sqrt(normL2Sqr<_Tp, _Rt>(src1, src2 + step2*i, len)) : val0; - } -} - -static void batchDistHamming(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, int* dist, const uchar* mask) -{ - step2 /= sizeof(src2[0]); - if( !mask ) - { - for( int i = 0; i < nvecs; i++ ) - dist[i] = normHamming(src1, src2 + step2*i, len); - } - else - { - int val0 = INT_MAX; - for( int i = 0; i < nvecs; i++ ) - dist[i] = mask[i] ? normHamming(src1, src2 + step2*i, len) : val0; - } -} - -static void batchDistHamming2(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, int* dist, const uchar* mask) -{ - step2 /= sizeof(src2[0]); - if( !mask ) - { - for( int i = 0; i < nvecs; i++ ) - dist[i] = normHamming(src1, src2 + step2*i, len, 2); - } - else - { - int val0 = INT_MAX; - for( int i = 0; i < nvecs; i++ ) - dist[i] = mask[i] ? normHamming(src1, src2 + step2*i, len, 2) : val0; - } -} - -static void batchDistL1_8u32s(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, int* dist, const uchar* mask) -{ - batchDistL1_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL1_8u32f(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL1_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL2Sqr_8u32s(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, int* dist, const uchar* mask) -{ - batchDistL2Sqr_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL2Sqr_8u32f(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL2Sqr_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL2_8u32f(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL2_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL1_32f(const float* src1, const float* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL1_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL2Sqr_32f(const float* src1, const float* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL2Sqr_(src1, src2, step2, nvecs, len, dist, mask); -} - -static void batchDistL2_32f(const float* src1, const float* src2, size_t step2, - int nvecs, int len, float* dist, const uchar* mask) -{ - batchDistL2_(src1, src2, step2, nvecs, len, dist, mask); -} - -typedef void (*BatchDistFunc)(const uchar* src1, const uchar* src2, size_t step2, - int nvecs, int len, uchar* dist, const uchar* mask); - - -struct BatchDistInvoker : public ParallelLoopBody -{ - BatchDistInvoker( const Mat& _src1, const Mat& _src2, - Mat& _dist, Mat& _nidx, int _K, - const Mat& _mask, int _update, - BatchDistFunc _func) - { - src1 = &_src1; - src2 = &_src2; - dist = &_dist; - nidx = &_nidx; - K = _K; - mask = &_mask; - update = _update; - func = _func; - } - - void operator()(const Range& range) const - { - AutoBuffer buf(src2->rows); - int* bufptr = buf; - - for( int i = range.start; i < range.end; i++ ) - { - func(src1->ptr(i), src2->ptr(), src2->step, src2->rows, src2->cols, - K > 0 ? (uchar*)bufptr : dist->ptr(i), mask->data ? mask->ptr(i) : 0); - - if( K > 0 ) - { - int* nidxptr = nidx->ptr(i); - // since positive float's can be compared just like int's, - // we handle both CV_32S and CV_32F cases with a single branch - int* distptr = (int*)dist->ptr(i); - - int j, k; - - for( j = 0; j < src2->rows; j++ ) - { - int d = bufptr[j]; - if( d < distptr[K-1] ) - { - for( k = K-2; k >= 0 && distptr[k] > d; k-- ) - { - nidxptr[k+1] = nidxptr[k]; - distptr[k+1] = distptr[k]; - } - nidxptr[k+1] = j + update; - distptr[k+1] = d; - } - } - } - } - } - - const Mat *src1; - const Mat *src2; - Mat *dist; - Mat *nidx; - const Mat *mask; - int K; - int update; - BatchDistFunc func; -}; - -} - -void cv::batchDistance( InputArray _src1, InputArray _src2, - OutputArray _dist, int dtype, OutputArray _nidx, - int normType, int K, InputArray _mask, - int update, bool crosscheck ) -{ - Mat src1 = _src1.getMat(), src2 = _src2.getMat(), mask = _mask.getMat(); - int type = src1.type(); - CV_Assert( type == src2.type() && src1.cols == src2.cols && - (type == CV_32F || type == CV_8U)); - CV_Assert( _nidx.needed() == (K > 0) ); - - if( dtype == -1 ) - { - dtype = normType == NORM_HAMMING || normType == NORM_HAMMING2 ? CV_32S : CV_32F; - } - CV_Assert( (type == CV_8U && dtype == CV_32S) || dtype == CV_32F); - - K = std::min(K, src2.rows); - - _dist.create(src1.rows, (K > 0 ? K : src2.rows), dtype); - Mat dist = _dist.getMat(), nidx; - if( _nidx.needed() ) - { - _nidx.create(dist.size(), CV_32S); - nidx = _nidx.getMat(); - } - - if( update == 0 && K > 0 ) - { - dist = Scalar::all(dtype == CV_32S ? (double)INT_MAX : (double)FLT_MAX); - nidx = Scalar::all(-1); - } - - if( crosscheck ) - { - CV_Assert( K == 1 && update == 0 && mask.empty() ); - Mat tdist, tidx; - batchDistance(src2, src1, tdist, dtype, tidx, normType, K, mask, 0, false); - - // if an idx-th element from src1 appeared to be the nearest to i-th element of src2, - // we update the minimum mutual distance between idx-th element of src1 and the whole src2 set. - // As a result, if nidx[idx] = i*, it means that idx-th element of src1 is the nearest - // to i*-th element of src2 and i*-th element of src2 is the closest to idx-th element of src1. - // If nidx[idx] = -1, it means that there is no such ideal couple for it in src2. - // This O(N) procedure is called cross-check and it helps to eliminate some false matches. - if( dtype == CV_32S ) - { - for( int i = 0; i < tdist.rows; i++ ) - { - int idx = tidx.at(i); - int d = tdist.at(i), d0 = dist.at(idx); - if( d < d0 ) - { - dist.at(idx) = d; - nidx.at(idx) = i + update; - } - } - } - else - { - for( int i = 0; i < tdist.rows; i++ ) - { - int idx = tidx.at(i); - float d = tdist.at(i), d0 = dist.at(idx); - if( d < d0 ) - { - dist.at(idx) = d; - nidx.at(idx) = i + update; - } - } - } - return; - } - - BatchDistFunc func = 0; - if( type == CV_8U ) - { - if( normType == NORM_L1 && dtype == CV_32S ) - func = (BatchDistFunc)batchDistL1_8u32s; - else if( normType == NORM_L1 && dtype == CV_32F ) - func = (BatchDistFunc)batchDistL1_8u32f; - else if( normType == NORM_L2SQR && dtype == CV_32S ) - func = (BatchDistFunc)batchDistL2Sqr_8u32s; - else if( normType == NORM_L2SQR && dtype == CV_32F ) - func = (BatchDistFunc)batchDistL2Sqr_8u32f; - else if( normType == NORM_L2 && dtype == CV_32F ) - func = (BatchDistFunc)batchDistL2_8u32f; - else if( normType == NORM_HAMMING && dtype == CV_32S ) - func = (BatchDistFunc)batchDistHamming; - else if( normType == NORM_HAMMING2 && dtype == CV_32S ) - func = (BatchDistFunc)batchDistHamming2; - } - else if( type == CV_32F && dtype == CV_32F ) - { - if( normType == NORM_L1 ) - func = (BatchDistFunc)batchDistL1_32f; - else if( normType == NORM_L2SQR ) - func = (BatchDistFunc)batchDistL2Sqr_32f; - else if( normType == NORM_L2 ) - func = (BatchDistFunc)batchDistL2_32f; - } - - if( func == 0 ) - CV_Error_(CV_StsUnsupportedFormat, - ("The combination of type=%d, dtype=%d and normType=%d is not supported", - type, dtype, normType)); - - parallel_for_(Range(0, src1.rows), - BatchDistInvoker(src1, src2, dist, nidx, K, mask, update, func)); -} - - -void cv::findNonZero( InputArray _src, OutputArray _idx ) -{ - Mat src = _src.getMat(); - CV_Assert( src.type() == CV_8UC1 ); - int n = countNonZero(src); - if( _idx.kind() == _InputArray::MAT && !_idx.getMatRef().isContinuous() ) - _idx.release(); - _idx.create(n, 1, CV_32SC2); - Mat idx = _idx.getMat(); - CV_Assert(idx.isContinuous()); - Point* idx_ptr = (Point*)idx.data; - - for( int i = 0; i < src.rows; i++ ) - { - const uchar* bin_ptr = src.ptr(i); - for( int j = 0; j < src.cols; j++ ) - if( bin_ptr[j] ) - *idx_ptr++ = Point(j, i); - } -} - - -CV_IMPL CvScalar cvSum( const CvArr* srcarr ) -{ - cv::Scalar sum = cv::sum(cv::cvarrToMat(srcarr, false, true, 1)); - if( CV_IS_IMAGE(srcarr) ) - { - int coi = cvGetImageCOI((IplImage*)srcarr); - if( coi ) - { - CV_Assert( 0 < coi && coi <= 4 ); - sum = cv::Scalar(sum[coi-1]); - } - } - return sum; -} - -CV_IMPL int cvCountNonZero( const CvArr* imgarr ) -{ - cv::Mat img = cv::cvarrToMat(imgarr, false, true, 1); - if( img.channels() > 1 ) - cv::extractImageCOI(imgarr, img); - return countNonZero(img); -} - - -CV_IMPL CvScalar -cvAvg( const void* imgarr, const void* maskarr ) -{ - cv::Mat img = cv::cvarrToMat(imgarr, false, true, 1); - cv::Scalar mean = !maskarr ? cv::mean(img) : cv::mean(img, cv::cvarrToMat(maskarr)); - if( CV_IS_IMAGE(imgarr) ) - { - int coi = cvGetImageCOI((IplImage*)imgarr); - if( coi ) - { - CV_Assert( 0 < coi && coi <= 4 ); - mean = cv::Scalar(mean[coi-1]); - } - } - return mean; -} - - -CV_IMPL void -cvAvgSdv( const CvArr* imgarr, CvScalar* _mean, CvScalar* _sdv, const void* maskarr ) -{ - cv::Scalar mean, sdv; - - cv::Mat mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - - cv::meanStdDev(cv::cvarrToMat(imgarr, false, true, 1), mean, sdv, mask ); - - if( CV_IS_IMAGE(imgarr) ) - { - int coi = cvGetImageCOI((IplImage*)imgarr); - if( coi ) - { - CV_Assert( 0 < coi && coi <= 4 ); - mean = cv::Scalar(mean[coi-1]); - sdv = cv::Scalar(sdv[coi-1]); - } - } - - if( _mean ) - *(cv::Scalar*)_mean = mean; - if( _sdv ) - *(cv::Scalar*)_sdv = sdv; -} - - -CV_IMPL void -cvMinMaxLoc( const void* imgarr, double* _minVal, double* _maxVal, - CvPoint* _minLoc, CvPoint* _maxLoc, const void* maskarr ) -{ - cv::Mat mask, img = cv::cvarrToMat(imgarr, false, true, 1); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - if( img.channels() > 1 ) - cv::extractImageCOI(imgarr, img); - - cv::minMaxLoc( img, _minVal, _maxVal, - (cv::Point*)_minLoc, (cv::Point*)_maxLoc, mask ); -} - - -CV_IMPL double -cvNorm( const void* imgA, const void* imgB, int normType, const void* maskarr ) -{ - cv::Mat a, mask; - if( !imgA ) - { - imgA = imgB; - imgB = 0; - } - - a = cv::cvarrToMat(imgA, false, true, 1); - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - - if( a.channels() > 1 && CV_IS_IMAGE(imgA) && cvGetImageCOI((const IplImage*)imgA) > 0 ) - cv::extractImageCOI(imgA, a); - - if( !imgB ) - return !maskarr ? cv::norm(a, normType) : cv::norm(a, normType, mask); - - cv::Mat b = cv::cvarrToMat(imgB, false, true, 1); - if( b.channels() > 1 && CV_IS_IMAGE(imgB) && cvGetImageCOI((const IplImage*)imgB) > 0 ) - cv::extractImageCOI(imgB, b); - - return !maskarr ? cv::norm(a, b, normType) : cv::norm(a, b, normType, mask); -} diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp deleted file mode 100644 index ef45b9b..0000000 --- a/modules/core/src/system.cpp +++ /dev/null @@ -1,1185 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef _MSC_VER -# if _MSC_VER >= 1700 -# pragma warning(disable:4447) // Disable warning 'main' signature found without threading model -# endif -#endif - -#if defined WIN32 || defined _WIN32 || defined WINCE -#ifndef _WIN32_WINNT // This is needed for the declaration of TryEnterCriticalSection in winbase.h with Visual Studio 2005 (and older?) - #define _WIN32_WINNT 0x0400 // http://msdn.microsoft.com/en-us/library/ms686857(VS.85).aspx -#endif -#include -#if (_WIN32_WINNT >= 0x0602) - #include -#endif -#undef small -#undef min -#undef max -#undef abs -#include -#if defined _MSC_VER - #if _MSC_VER >= 1400 - #include - #elif defined _M_IX86 - static void __cpuid(int* cpuid_data, int) - { - __asm - { - push ebx - push edi - mov edi, cpuid_data - mov eax, 1 - cpuid - mov [edi], eax - mov [edi + 4], ebx - mov [edi + 8], ecx - mov [edi + 12], edx - pop edi - pop ebx - } - } - #endif -#endif - -#ifdef HAVE_WINRT -#include -#ifndef __cplusplus_winrt -#include -#pragma comment(lib, "runtimeobject.lib") -#endif - -std::wstring GetTempPathWinRT() -{ -#ifdef __cplusplus_winrt - return std::wstring(Windows::Storage::ApplicationData::Current->TemporaryFolder->Path->Data()); -#else - Microsoft::WRL::ComPtr appdataFactory; - Microsoft::WRL::ComPtr appdataRef; - Microsoft::WRL::ComPtr storagefolderRef; - Microsoft::WRL::ComPtr storageitemRef; - HSTRING str; - HSTRING_HEADER hstrHead; - std::wstring wstr; - if (FAILED(WindowsCreateStringReference(RuntimeClass_Windows_Storage_ApplicationData, - (UINT32)wcslen(RuntimeClass_Windows_Storage_ApplicationData), &hstrHead, &str))) - return wstr; - if (FAILED(RoGetActivationFactory(str, IID_PPV_ARGS(appdataFactory.ReleaseAndGetAddressOf())))) - return wstr; - if (FAILED(appdataFactory->get_Current(appdataRef.ReleaseAndGetAddressOf()))) - return wstr; - if (FAILED(appdataRef->get_TemporaryFolder(storagefolderRef.ReleaseAndGetAddressOf()))) - return wstr; - if (FAILED(storagefolderRef.As(&storageitemRef))) - return wstr; - str = NULL; - if (FAILED(storageitemRef->get_Path(&str))) - return wstr; - wstr = WindowsGetStringRawBuffer(str, NULL); - WindowsDeleteString(str); - return wstr; -#endif -} - -std::wstring GetTempFileNameWinRT(std::wstring prefix) -{ - wchar_t guidStr[40]; - GUID g; - CoCreateGuid(&g); - wchar_t* mask = L"%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x"; - swprintf(&guidStr[0], sizeof(guidStr)/sizeof(wchar_t), mask, - g.Data1, g.Data2, g.Data3, UINT(g.Data4[0]), UINT(g.Data4[1]), - UINT(g.Data4[2]), UINT(g.Data4[3]), UINT(g.Data4[4]), - UINT(g.Data4[5]), UINT(g.Data4[6]), UINT(g.Data4[7])); - - return prefix + std::wstring(guidStr); -} - -#endif -#else -#include -#include -#include - -#if defined __MACH__ && defined __APPLE__ -#include -#include -#endif - -#endif - -#ifdef _OPENMP -#include "omp.h" -#endif - -#include - -#if defined __linux__ || defined __APPLE__ || defined __EMSCRIPTEN__ -#include -#include -#include -#if defined ANDROID -#include -#else -#include -#endif -#endif - -#ifdef ANDROID -# include -#endif - -namespace cv -{ - -Exception::Exception() { code = 0; line = 0; } - -Exception::Exception(int _code, const string& _err, const string& _func, const string& _file, int _line) -: code(_code), err(_err), func(_func), file(_file), line(_line) -{ - formatMessage(); -} - -Exception::~Exception() throw() {} - -/*! - \return the error description and the context as a text string. - */ -const char* Exception::what() const throw() { return msg.c_str(); } - -void Exception::formatMessage() -{ - if( func.size() > 0 ) - msg = format("%s:%d: error: (%d) %s in function %s\n", file.c_str(), line, code, err.c_str(), func.c_str()); - else - msg = format("%s:%d: error: (%d) %s\n", file.c_str(), line, code, err.c_str()); -} - -struct HWFeatures -{ - enum { MAX_FEATURE = CV_HARDWARE_MAX_FEATURE }; - - HWFeatures(void) - { - memset( have, 0, sizeof(have) ); - x86_family = 0; - } - - static HWFeatures initialize(void) - { - HWFeatures f; - int cpuid_data[4] = { 0, 0, 0, 0 }; - - #if defined _MSC_VER && (defined _M_IX86 || defined _M_X64) - __cpuid(cpuid_data, 1); - #elif defined __GNUC__ && (defined __i386__ || defined __x86_64__) - #ifdef __x86_64__ - asm __volatile__ - ( - "movl $1, %%eax\n\t" - "cpuid\n\t" - :[eax]"=a"(cpuid_data[0]),[ebx]"=b"(cpuid_data[1]),[ecx]"=c"(cpuid_data[2]),[edx]"=d"(cpuid_data[3]) - : - : "cc" - ); - #else - asm volatile - ( - "pushl %%ebx\n\t" - "movl $1,%%eax\n\t" - "cpuid\n\t" - "popl %%ebx\n\t" - : "=a"(cpuid_data[0]), "=c"(cpuid_data[2]), "=d"(cpuid_data[3]) - : - : "cc" - ); - #endif - #endif - - f.x86_family = (cpuid_data[0] >> 8) & 15; - if( f.x86_family >= 6 ) - { - f.have[CV_CPU_MMX] = (cpuid_data[3] & (1 << 23)) != 0; - f.have[CV_CPU_SSE] = (cpuid_data[3] & (1<<25)) != 0; - f.have[CV_CPU_SSE2] = (cpuid_data[3] & (1<<26)) != 0; - f.have[CV_CPU_SSE3] = (cpuid_data[2] & (1<<0)) != 0; - f.have[CV_CPU_SSSE3] = (cpuid_data[2] & (1<<9)) != 0; - f.have[CV_CPU_SSE4_1] = (cpuid_data[2] & (1<<19)) != 0; - f.have[CV_CPU_SSE4_2] = (cpuid_data[2] & (1<<20)) != 0; - f.have[CV_CPU_POPCNT] = (cpuid_data[2] & (1<<23)) != 0; - f.have[CV_CPU_AVX] = (((cpuid_data[2] & (1<<28)) != 0)&&((cpuid_data[2] & (1<<27)) != 0));//OS uses XSAVE_XRSTORE and CPU support AVX - } - - return f; - } - - int x86_family; - bool have[MAX_FEATURE+1]; -}; - -static HWFeatures featuresEnabled = HWFeatures::initialize(), featuresDisabled = HWFeatures(); -static HWFeatures* currentFeatures = &featuresEnabled; - -bool checkHardwareSupport(int feature) -{ - CV_DbgAssert( 0 <= feature && feature <= CV_HARDWARE_MAX_FEATURE ); - return currentFeatures->have[feature]; -} - - -volatile bool useOptimizedFlag = true; -#ifdef HAVE_IPP -struct IPPInitializer -{ - IPPInitializer(void) { ippStaticInit(); } -}; - -IPPInitializer ippInitializer; -#endif - -volatile bool USE_SSE2 = featuresEnabled.have[CV_CPU_SSE2]; -volatile bool USE_SSE4_2 = featuresEnabled.have[CV_CPU_SSE4_2]; -volatile bool USE_AVX = featuresEnabled.have[CV_CPU_AVX]; - -void setUseOptimized( bool flag ) -{ - useOptimizedFlag = flag; - currentFeatures = flag ? &featuresEnabled : &featuresDisabled; - USE_SSE2 = currentFeatures->have[CV_CPU_SSE2]; -} - -bool useOptimized(void) -{ - return useOptimizedFlag; -} - -int64 getTickCount(void) -{ -#if defined WIN32 || defined _WIN32 || defined WINCE - LARGE_INTEGER counter; - QueryPerformanceCounter( &counter ); - return (int64)counter.QuadPart; -#elif defined __linux || defined __linux__ - struct timespec tp; - clock_gettime(CLOCK_MONOTONIC, &tp); - return (int64)tp.tv_sec*1000000000 + tp.tv_nsec; -#elif defined __MACH__ && defined __APPLE__ - return (int64)mach_absolute_time(); -#else - struct timeval tv; - struct timezone tz; - gettimeofday( &tv, &tz ); - return (int64)tv.tv_sec*1000000 + tv.tv_usec; -#endif -} - -double getTickFrequency(void) -{ -#if defined WIN32 || defined _WIN32 || defined WINCE - LARGE_INTEGER freq; - QueryPerformanceFrequency(&freq); - return (double)freq.QuadPart; -#elif defined __linux || defined __linux__ - return 1e9; -#elif defined __MACH__ && defined __APPLE__ - static double freq = 0; - if( freq == 0 ) - { - mach_timebase_info_data_t sTimebaseInfo; - mach_timebase_info(&sTimebaseInfo); - freq = sTimebaseInfo.denom*1e9/sTimebaseInfo.numer; - } - return freq; -#else - return 1e6; -#endif -} - -#if defined __GNUC__ && (defined __i386__ || defined __x86_64__ || defined __ppc__) -#if defined(__i386__) - -int64 getCPUTickCount(void) -{ - int64 x; - __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); - return x; -} -#elif defined(__x86_64__) - -int64 getCPUTickCount(void) -{ - unsigned hi, lo; - __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); - return (int64)lo | ((int64)hi << 32); -} - -#elif defined(__ppc__) - -int64 getCPUTickCount(void) -{ - int64 result = 0; - unsigned upper, lower, tmp; - __asm__ volatile( - "0: \n" - "\tmftbu %0 \n" - "\tmftb %1 \n" - "\tmftbu %2 \n" - "\tcmpw %2,%0 \n" - "\tbne 0b \n" - : "=r"(upper),"=r"(lower),"=r"(tmp) - ); - return lower | ((int64)upper << 32); -} - -#else - -#error "RDTSC not defined" - -#endif - -#elif defined _MSC_VER && defined WIN32 && defined _M_IX86 - -int64 getCPUTickCount(void) -{ - __asm _emit 0x0f; - __asm _emit 0x31; -} - -#else - -#ifdef HAVE_IPP -int64 getCPUTickCount(void) -{ - return ippGetCpuClocks(); -} -#else -int64 getCPUTickCount(void) -{ - return getTickCount(); -} -#endif - -#endif - -const std::string& getBuildInformation() -{ - static std::string build_info = -#include "version_string.inc" - ; - return build_info; -} - -string format( const char* fmt, ... ) -{ - char buf[1 << 16]; - va_list args; - va_start( args, fmt ); - vsprintf( buf, fmt, args ); - return string(buf); -} - -string tempfile( const char* suffix ) -{ -#ifdef HAVE_WINRT - std::wstring temp_dir = L""; - const wchar_t* opencv_temp_dir = _wgetenv(L"OPENCV_TEMP_PATH"); - if (opencv_temp_dir) - temp_dir = std::wstring(opencv_temp_dir); -#else - const char *temp_dir = getenv("OPENCV_TEMP_PATH"); -#endif - string fname; - -#if defined WIN32 || defined _WIN32 -#ifdef HAVE_WINRT - RoInitialize(RO_INIT_MULTITHREADED); - std::wstring temp_dir2; - if (temp_dir.empty()) - temp_dir = GetTempPathWinRT(); - - std::wstring temp_file; - temp_file = GetTempFileNameWinRT(L"ocv"); - if (temp_file.empty()) - return std::string(); - - temp_file = temp_dir + std::wstring(L"\\") + temp_file; - DeleteFileW(temp_file.c_str()); - - char aname[MAX_PATH]; - size_t copied = wcstombs(aname, temp_file.c_str(), MAX_PATH); - CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - fname = std::string(aname); - RoUninitialize(); -#else - char temp_dir2[MAX_PATH] = { 0 }; - char temp_file[MAX_PATH] = { 0 }; - - if (temp_dir == 0 || temp_dir[0] == 0) - { - ::GetTempPathA(sizeof(temp_dir2), temp_dir2); - temp_dir = temp_dir2; - } - if(0 == ::GetTempFileNameA(temp_dir, "ocv", 0, temp_file)) - return string(); - - DeleteFileA(temp_file); - - fname = temp_file; -#endif -# else -# ifdef ANDROID - //char defaultTemplate[] = "/mnt/sdcard/__opencv_temp.XXXXXX"; - char defaultTemplate[] = "/data/local/tmp/__opencv_temp.XXXXXX"; -# else - char defaultTemplate[] = "/tmp/__opencv_temp.XXXXXX"; -# endif - - if (temp_dir == 0 || temp_dir[0] == 0) - fname = defaultTemplate; - else - { - fname = temp_dir; - char ech = fname[fname.size() - 1]; - if(ech != '/' && ech != '\\') - fname += "/"; - fname += "__opencv_temp.XXXXXX"; - } - - const int fd = mkstemp((char*)fname.c_str()); - if (fd == -1) return string(); - - close(fd); - remove(fname.c_str()); -# endif - - if (suffix) - { - if (suffix[0] != '.') - return fname + "." + suffix; - else - return fname + suffix; - } - return fname; -} - -static CvErrorCallback customErrorCallback = 0; -static void* customErrorCallbackData = 0; -static bool breakOnError = false; - -bool setBreakOnError(bool value) -{ - bool prevVal = breakOnError; - breakOnError = value; - return prevVal; -} - -void error( const Exception& exc ) -{ - if (customErrorCallback != 0) - customErrorCallback(exc.code, exc.func.c_str(), exc.err.c_str(), - exc.file.c_str(), exc.line, customErrorCallbackData); - else - { - const char* errorStr = cvErrorStr(exc.code); - char buf[1 << 16]; - - sprintf( buf, "OpenCV Error: %s (%s) in %s, file %s, line %d", - errorStr, exc.err.c_str(), exc.func.size() > 0 ? - exc.func.c_str() : "unknown function", exc.file.c_str(), exc.line ); - fprintf( stderr, "%s\n", buf ); - fflush( stderr ); -# ifdef __ANDROID__ - __android_log_print(ANDROID_LOG_ERROR, "cv::error()", "%s", buf); -# endif - } - - if(breakOnError) - { - static volatile int* p = 0; - *p = 0; - } - - throw exc; -} - -CvErrorCallback -redirectError( CvErrorCallback errCallback, void* userdata, void** prevUserdata) -{ - if( prevUserdata ) - *prevUserdata = customErrorCallbackData; - - CvErrorCallback prevCallback = customErrorCallback; - - customErrorCallback = errCallback; - customErrorCallbackData = userdata; - - return prevCallback; -} - -} - -CV_IMPL int cvCheckHardwareSupport(int feature) -{ - CV_DbgAssert( 0 <= feature && feature <= CV_HARDWARE_MAX_FEATURE ); - return cv::currentFeatures->have[feature]; -} - -CV_IMPL int cvUseOptimized( int flag ) -{ - int prevMode = cv::useOptimizedFlag; - cv::setUseOptimized( flag != 0 ); - return prevMode; -} - -CV_IMPL int64 cvGetTickCount(void) -{ - return cv::getTickCount(); -} - -CV_IMPL double cvGetTickFrequency(void) -{ - return cv::getTickFrequency()*1e-6; -} - -CV_IMPL CvErrorCallback -cvRedirectError( CvErrorCallback errCallback, void* userdata, void** prevUserdata) -{ - return cv::redirectError(errCallback, userdata, prevUserdata); -} - -CV_IMPL int cvNulDevReport( int, const char*, const char*, - const char*, int, void* ) -{ - return 0; -} - -CV_IMPL int cvStdErrReport( int, const char*, const char*, - const char*, int, void* ) -{ - return 0; -} - -CV_IMPL int cvGuiBoxReport( int, const char*, const char*, - const char*, int, void* ) -{ - return 0; -} - -CV_IMPL int cvGetErrInfo( const char**, const char**, const char**, int* ) -{ - return 0; -} - - -CV_IMPL const char* cvErrorStr( int status ) -{ - static char buf[256]; - - switch (status) - { - case CV_StsOk : return "No Error"; - case CV_StsBackTrace : return "Backtrace"; - case CV_StsError : return "Unspecified error"; - case CV_StsInternal : return "Internal error"; - case CV_StsNoMem : return "Insufficient memory"; - case CV_StsBadArg : return "Bad argument"; - case CV_StsNoConv : return "Iterations do not converge"; - case CV_StsAutoTrace : return "Autotrace call"; - case CV_StsBadSize : return "Incorrect size of input array"; - case CV_StsNullPtr : return "Null pointer"; - case CV_StsDivByZero : return "Division by zero occured"; - case CV_BadStep : return "Image step is wrong"; - case CV_StsInplaceNotSupported : return "Inplace operation is not supported"; - case CV_StsObjectNotFound : return "Requested object was not found"; - case CV_BadDepth : return "Input image depth is not supported by function"; - case CV_StsUnmatchedFormats : return "Formats of input arguments do not match"; - case CV_StsUnmatchedSizes : return "Sizes of input arguments do not match"; - case CV_StsOutOfRange : return "One of arguments\' values is out of range"; - case CV_StsUnsupportedFormat : return "Unsupported format or combination of formats"; - case CV_BadCOI : return "Input COI is not supported"; - case CV_BadNumChannels : return "Bad number of channels"; - case CV_StsBadFlag : return "Bad flag (parameter or structure field)"; - case CV_StsBadPoint : return "Bad parameter of type CvPoint"; - case CV_StsBadMask : return "Bad type of mask argument"; - case CV_StsParseError : return "Parsing error"; - case CV_StsNotImplemented : return "The function/feature is not implemented"; - case CV_StsBadMemBlock : return "Memory block has been corrupted"; - case CV_StsAssert : return "Assertion failed"; - case CV_GpuNotSupported : return "No GPU support"; - case CV_GpuApiCallError : return "Gpu API call"; - case CV_OpenGlNotSupported : return "No OpenGL support"; - case CV_OpenGlApiCallError : return "OpenGL API call"; - }; - - sprintf(buf, "Unknown %s code %d", status >= 0 ? "status":"error", status); - return buf; -} - -CV_IMPL int cvGetErrMode(void) -{ - return 0; -} - -CV_IMPL int cvSetErrMode(int) -{ - return 0; -} - -CV_IMPL int cvGetErrStatus(void) -{ - return 0; -} - -CV_IMPL void cvSetErrStatus(int) -{ -} - - -CV_IMPL void cvError( int code, const char* func_name, - const char* err_msg, - const char* file_name, int line ) -{ - cv::error(cv::Exception(code, err_msg, func_name, file_name, line)); -} - -/* function, which converts int to int */ -CV_IMPL int -cvErrorFromIppStatus( int status ) -{ - switch (status) - { - case CV_BADSIZE_ERR: return CV_StsBadSize; - case CV_BADMEMBLOCK_ERR: return CV_StsBadMemBlock; - case CV_NULLPTR_ERR: return CV_StsNullPtr; - case CV_DIV_BY_ZERO_ERR: return CV_StsDivByZero; - case CV_BADSTEP_ERR: return CV_BadStep; - case CV_OUTOFMEM_ERR: return CV_StsNoMem; - case CV_BADARG_ERR: return CV_StsBadArg; - case CV_NOTDEFINED_ERR: return CV_StsError; - case CV_INPLACE_NOT_SUPPORTED_ERR: return CV_StsInplaceNotSupported; - case CV_NOTFOUND_ERR: return CV_StsObjectNotFound; - case CV_BADCONVERGENCE_ERR: return CV_StsNoConv; - case CV_BADDEPTH_ERR: return CV_BadDepth; - case CV_UNMATCHED_FORMATS_ERR: return CV_StsUnmatchedFormats; - case CV_UNSUPPORTED_COI_ERR: return CV_BadCOI; - case CV_UNSUPPORTED_CHANNELS_ERR: return CV_BadNumChannels; - case CV_BADFLAG_ERR: return CV_StsBadFlag; - case CV_BADRANGE_ERR: return CV_StsBadArg; - case CV_BADCOEF_ERR: return CV_StsBadArg; - case CV_BADFACTOR_ERR: return CV_StsBadArg; - case CV_BADPOINT_ERR: return CV_StsBadPoint; - - default: - return CV_StsError; - } -} - -static CvModuleInfo cxcore_info = { 0, "cxcore", CV_VERSION, 0 }; - -CvModuleInfo* CvModule::first = 0, *CvModule::last = 0; - -CvModule::CvModule( CvModuleInfo* _info ) -{ - cvRegisterModule( _info ); - info = last; -} - -CvModule::~CvModule(void) -{ - if( info ) - { - CvModuleInfo* p = first; - for( ; p != 0 && p->next != info; p = p->next ) - ; - - if( p ) - p->next = info->next; - - if( first == info ) - first = info->next; - - if( last == info ) - last = p; - - free( info ); - info = 0; - } -} - -CV_IMPL int -cvRegisterModule( const CvModuleInfo* module ) -{ - CV_Assert( module != 0 && module->name != 0 && module->version != 0 ); - - size_t name_len = strlen(module->name); - size_t version_len = strlen(module->version); - - CvModuleInfo* module_copy = (CvModuleInfo*)malloc( sizeof(*module_copy) + - name_len + 1 + version_len + 1 ); - - *module_copy = *module; - module_copy->name = (char*)(module_copy + 1); - module_copy->version = (char*)(module_copy + 1) + name_len + 1; - - memcpy( (void*)module_copy->name, module->name, name_len + 1 ); - memcpy( (void*)module_copy->version, module->version, version_len + 1 ); - module_copy->next = 0; - - if( CvModule::first == 0 ) - CvModule::first = module_copy; - else - CvModule::last->next = module_copy; - - CvModule::last = module_copy; - - return 0; -} - -CvModule cxcore_module( &cxcore_info ); - -CV_IMPL void -cvGetModuleInfo( const char* name, const char **version, const char **plugin_list ) -{ - static char joint_verinfo[1024] = ""; - static char plugin_list_buf[1024] = ""; - - if( version ) - *version = 0; - - if( plugin_list ) - *plugin_list = 0; - - CvModuleInfo* module; - - if( version ) - { - if( name ) - { - size_t i, name_len = strlen(name); - - for( module = CvModule::first; module != 0; module = module->next ) - { - if( strlen(module->name) == name_len ) - { - for( i = 0; i < name_len; i++ ) - { - int c0 = toupper(module->name[i]), c1 = toupper(name[i]); - if( c0 != c1 ) - break; - } - if( i == name_len ) - break; - } - } - if( !module ) - CV_Error( CV_StsObjectNotFound, "The module is not found" ); - - *version = module->version; - } - else - { - char* ptr = joint_verinfo; - - for( module = CvModule::first; module != 0; module = module->next ) - { - sprintf( ptr, "%s: %s%s", module->name, module->version, module->next ? ", " : "" ); - ptr += strlen(ptr); - } - - *version = joint_verinfo; - } - } - - if( plugin_list ) - *plugin_list = plugin_list_buf; -} - -namespace cv -{ - -#if defined WIN32 || defined _WIN32 || defined WINCE - -struct Mutex::Impl -{ - Impl() - { -#if (_WIN32_WINNT >= 0x0600) - ::InitializeCriticalSectionEx(&cs, 1000, 0); -#else - ::InitializeCriticalSection(&cs); -#endif - refcount = 1; - } - ~Impl() { DeleteCriticalSection(&cs); } - - void lock() { EnterCriticalSection(&cs); } - bool trylock() { return TryEnterCriticalSection(&cs) != 0; } - void unlock() { LeaveCriticalSection(&cs); } - - CRITICAL_SECTION cs; - int refcount; -}; - -#ifndef __GNUC__ -int _interlockedExchangeAdd(int* addr, int delta) -{ -#if defined _MSC_VER && _MSC_VER >= 1500 - return (int)_InterlockedExchangeAdd((long volatile*)addr, delta); -#else - return (int)InterlockedExchangeAdd((long volatile*)addr, delta); -#endif -} -#endif // __GNUC__ - -#elif defined __APPLE__ - -#include - -struct Mutex::Impl -{ - Impl() { sl = OS_SPINLOCK_INIT; refcount = 1; } - ~Impl() {} - - void lock() { OSSpinLockLock(&sl); } - bool trylock() { return OSSpinLockTry(&sl); } - void unlock() { OSSpinLockUnlock(&sl); } - - OSSpinLock sl; - int refcount; -}; - -#elif defined __linux__ && !defined ANDROID - -struct Mutex::Impl -{ - Impl() { pthread_spin_init(&sl, 0); refcount = 1; } - ~Impl() { pthread_spin_destroy(&sl); } - - void lock() { pthread_spin_lock(&sl); } - bool trylock() { return pthread_spin_trylock(&sl) == 0; } - void unlock() { pthread_spin_unlock(&sl); } - - pthread_spinlock_t sl; - int refcount; -}; - -#else - -struct Mutex::Impl -{ - Impl() { pthread_mutex_init(&sl, 0); refcount = 1; } - ~Impl() { pthread_mutex_destroy(&sl); } - - void lock() { pthread_mutex_lock(&sl); } - bool trylock() { return pthread_mutex_trylock(&sl) == 0; } - void unlock() { pthread_mutex_unlock(&sl); } - - pthread_mutex_t sl; - int refcount; -}; - -#endif - -Mutex::Mutex() -{ - impl = new Mutex::Impl; -} - -Mutex::~Mutex() -{ - if( CV_XADD(&impl->refcount, -1) == 1 ) - delete impl; - impl = 0; -} - -Mutex::Mutex(const Mutex& m) -{ - impl = m.impl; - CV_XADD(&impl->refcount, 1); -} - -Mutex& Mutex::operator = (const Mutex& m) -{ - CV_XADD(&m.impl->refcount, 1); - if( CV_XADD(&impl->refcount, -1) == 1 ) - delete impl; - impl = m.impl; - return *this; -} - -void Mutex::lock() { impl->lock(); } -void Mutex::unlock() { impl->unlock(); } -bool Mutex::trylock() { return impl->trylock(); } - - -//////////////////////////////// thread-local storage //////////////////////////////// - -class TLSStorage -{ - std::vector tlsData_; -public: - TLSStorage() { tlsData_.reserve(16); } - ~TLSStorage(); - inline void* getData(int key) const - { - CV_DbgAssert(key >= 0); - return (key < (int)tlsData_.size()) ? tlsData_[key] : NULL; - } - inline void setData(int key, void* data) - { - CV_DbgAssert(key >= 0); - if (key >= (int)tlsData_.size()) - { - tlsData_.resize(key + 1, NULL); - } - tlsData_[key] = data; - } - - inline static TLSStorage* get(); -}; - -#ifdef WIN32 -#ifdef _MSC_VER -#pragma warning(disable:4505) // unreferenced local function has been removed -#endif - -#ifdef HAVE_WINRT - // using C++11 thread attribute for local thread data - static __declspec( thread ) TLSStorage* g_tlsdata = NULL; - - static void deleteThreadData() - { - if (g_tlsdata) - { - delete g_tlsdata; - g_tlsdata = NULL; - } - } - - inline TLSStorage* TLSStorage::get() - { - if (!g_tlsdata) - { - g_tlsdata = new TLSStorage; - } - return g_tlsdata; - } -#else -#ifdef WINCE -# define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF) -#endif - static DWORD tlsKey = TLS_OUT_OF_INDEXES; - - static void deleteThreadData() - { - if(tlsKey != TLS_OUT_OF_INDEXES) - { - delete (TLSStorage*)TlsGetValue(tlsKey); - TlsSetValue(tlsKey, NULL); - } - } - - inline TLSStorage* TLSStorage::get() - { - if (tlsKey == TLS_OUT_OF_INDEXES) - { - tlsKey = TlsAlloc(); - CV_Assert(tlsKey != TLS_OUT_OF_INDEXES); - } - TLSStorage* d = (TLSStorage*)TlsGetValue(tlsKey); - if (!d) - { - d = new TLSStorage; - TlsSetValue(tlsKey, d); - } - return d; - } -#endif //HAVE_WINRT - -#if defined CVAPI_EXPORTS && defined WIN32 && !defined WINCE -#ifdef HAVE_WINRT - #pragma warning(disable:4447) // Disable warning 'main' signature found without threading model -#endif - -BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID); - -BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) -{ - if (fdwReason == DLL_THREAD_DETACH || fdwReason == DLL_PROCESS_DETACH) - { - cv::deleteThreadAllocData(); - cv::deleteThreadRNGData(); - cv::deleteThreadData(); - } - return TRUE; -} -#endif - -#else - static pthread_key_t tlsKey = 0; - static pthread_once_t tlsKeyOnce = PTHREAD_ONCE_INIT; - - static void deleteTLSStorage(void* data) - { - delete (TLSStorage*)data; - } - - static void makeKey() - { - int errcode = pthread_key_create(&tlsKey, deleteTLSStorage); - CV_Assert(errcode == 0); - } - - inline TLSStorage* TLSStorage::get() - { - pthread_once(&tlsKeyOnce, makeKey); - TLSStorage* d = (TLSStorage*)pthread_getspecific(tlsKey); - if( !d ) - { - d = new TLSStorage; - pthread_setspecific(tlsKey, d); - } - return d; - } -#endif - -class TLSContainerStorage -{ - cv::Mutex mutex_; - std::vector tlsContainers_; -public: - TLSContainerStorage() { } - ~TLSContainerStorage() - { - for (size_t i = 0; i < tlsContainers_.size(); i++) - { - CV_DbgAssert(tlsContainers_[i] == NULL); // not all keys released - tlsContainers_[i] = NULL; - } - } - - int allocateKey(TLSDataContainer* pContainer) - { - cv::AutoLock lock(mutex_); - tlsContainers_.push_back(pContainer); - return (int)tlsContainers_.size() - 1; - } - void releaseKey(int id, TLSDataContainer* pContainer) - { - cv::AutoLock lock(mutex_); - CV_Assert(tlsContainers_[id] == pContainer); - tlsContainers_[id] = NULL; - // currently, we don't go into thread's TLSData and release data for this key - } - - void destroyData(int key, void* data) - { - cv::AutoLock lock(mutex_); - TLSDataContainer* k = tlsContainers_[key]; - if (!k) - return; - try - { - k->deleteDataInstance(data); - } - catch (...) - { - CV_DbgAssert(k == NULL); // Debug this! - } - } -}; - -// This is a wrapper function that will ensure 'tlsContainerStorage' is constructed on first use. -// For more information: http://www.parashift.com/c++-faq/static-init-order-on-first-use.html -static TLSContainerStorage& getTLSContainerStorage() -{ - static TLSContainerStorage *tlsContainerStorage = new TLSContainerStorage(); - return *tlsContainerStorage; -} - -TLSDataContainer::TLSDataContainer() - : key_(-1) -{ - key_ = getTLSContainerStorage().allocateKey(this); -} - -TLSDataContainer::~TLSDataContainer() -{ - getTLSContainerStorage().releaseKey(key_, this); - key_ = -1; -} - -void* TLSDataContainer::getData() const -{ - CV_Assert(key_ >= 0); - TLSStorage* tlsData = TLSStorage::get(); - void* data = tlsData->getData(key_); - if (!data) - { - data = this->createDataInstance(); - CV_DbgAssert(data != NULL); - tlsData->setData(key_, data); - } - return data; -} - -TLSStorage::~TLSStorage() -{ - for (int i = 0; i < (int)tlsData_.size(); i++) - { - void*& data = tlsData_[i]; - if (data) - { - getTLSContainerStorage().destroyData(i, data); - data = NULL; - } - } - tlsData_.clear(); -} - -} // namespace cv - -/* End of file. */ diff --git a/modules/core/src/tables.cpp b/modules/core/src/tables.cpp deleted file mode 100644 index b316df4..0000000 --- a/modules/core/src/tables.cpp +++ /dev/null @@ -1,3512 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// CvMat helper tables -// -// */ - -#include "precomp.hpp" - -namespace cv -{ - -const float g_8x32fTab[] = -{ - -128.f, -127.f, -126.f, -125.f, -124.f, -123.f, -122.f, -121.f, - -120.f, -119.f, -118.f, -117.f, -116.f, -115.f, -114.f, -113.f, - -112.f, -111.f, -110.f, -109.f, -108.f, -107.f, -106.f, -105.f, - -104.f, -103.f, -102.f, -101.f, -100.f, -99.f, -98.f, -97.f, - -96.f, -95.f, -94.f, -93.f, -92.f, -91.f, -90.f, -89.f, - -88.f, -87.f, -86.f, -85.f, -84.f, -83.f, -82.f, -81.f, - -80.f, -79.f, -78.f, -77.f, -76.f, -75.f, -74.f, -73.f, - -72.f, -71.f, -70.f, -69.f, -68.f, -67.f, -66.f, -65.f, - -64.f, -63.f, -62.f, -61.f, -60.f, -59.f, -58.f, -57.f, - -56.f, -55.f, -54.f, -53.f, -52.f, -51.f, -50.f, -49.f, - -48.f, -47.f, -46.f, -45.f, -44.f, -43.f, -42.f, -41.f, - -40.f, -39.f, -38.f, -37.f, -36.f, -35.f, -34.f, -33.f, - -32.f, -31.f, -30.f, -29.f, -28.f, -27.f, -26.f, -25.f, - -24.f, -23.f, -22.f, -21.f, -20.f, -19.f, -18.f, -17.f, - -16.f, -15.f, -14.f, -13.f, -12.f, -11.f, -10.f, -9.f, - -8.f, -7.f, -6.f, -5.f, -4.f, -3.f, -2.f, -1.f, - 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, - 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 14.f, 15.f, - 16.f, 17.f, 18.f, 19.f, 20.f, 21.f, 22.f, 23.f, - 24.f, 25.f, 26.f, 27.f, 28.f, 29.f, 30.f, 31.f, - 32.f, 33.f, 34.f, 35.f, 36.f, 37.f, 38.f, 39.f, - 40.f, 41.f, 42.f, 43.f, 44.f, 45.f, 46.f, 47.f, - 48.f, 49.f, 50.f, 51.f, 52.f, 53.f, 54.f, 55.f, - 56.f, 57.f, 58.f, 59.f, 60.f, 61.f, 62.f, 63.f, - 64.f, 65.f, 66.f, 67.f, 68.f, 69.f, 70.f, 71.f, - 72.f, 73.f, 74.f, 75.f, 76.f, 77.f, 78.f, 79.f, - 80.f, 81.f, 82.f, 83.f, 84.f, 85.f, 86.f, 87.f, - 88.f, 89.f, 90.f, 91.f, 92.f, 93.f, 94.f, 95.f, - 96.f, 97.f, 98.f, 99.f, 100.f, 101.f, 102.f, 103.f, - 104.f, 105.f, 106.f, 107.f, 108.f, 109.f, 110.f, 111.f, - 112.f, 113.f, 114.f, 115.f, 116.f, 117.f, 118.f, 119.f, - 120.f, 121.f, 122.f, 123.f, 124.f, 125.f, 126.f, 127.f, - 128.f, 129.f, 130.f, 131.f, 132.f, 133.f, 134.f, 135.f, - 136.f, 137.f, 138.f, 139.f, 140.f, 141.f, 142.f, 143.f, - 144.f, 145.f, 146.f, 147.f, 148.f, 149.f, 150.f, 151.f, - 152.f, 153.f, 154.f, 155.f, 156.f, 157.f, 158.f, 159.f, - 160.f, 161.f, 162.f, 163.f, 164.f, 165.f, 166.f, 167.f, - 168.f, 169.f, 170.f, 171.f, 172.f, 173.f, 174.f, 175.f, - 176.f, 177.f, 178.f, 179.f, 180.f, 181.f, 182.f, 183.f, - 184.f, 185.f, 186.f, 187.f, 188.f, 189.f, 190.f, 191.f, - 192.f, 193.f, 194.f, 195.f, 196.f, 197.f, 198.f, 199.f, - 200.f, 201.f, 202.f, 203.f, 204.f, 205.f, 206.f, 207.f, - 208.f, 209.f, 210.f, 211.f, 212.f, 213.f, 214.f, 215.f, - 216.f, 217.f, 218.f, 219.f, 220.f, 221.f, 222.f, 223.f, - 224.f, 225.f, 226.f, 227.f, 228.f, 229.f, 230.f, 231.f, - 232.f, 233.f, 234.f, 235.f, 236.f, 237.f, 238.f, 239.f, - 240.f, 241.f, 242.f, 243.f, 244.f, 245.f, 246.f, 247.f, - 248.f, 249.f, 250.f, 251.f, 252.f, 253.f, 254.f, 255.f -}; - -/* [-255..255].^2 */ -const ushort g_8x16uSqrTab[] = -{ - 65025, 64516, 64009, 63504, 63001, 62500, 62001, 61504, 61009, 60516, 60025, 59536, - 59049, 58564, 58081, 57600, 57121, 56644, 56169, 55696, 55225, 54756, 54289, 53824, - 53361, 52900, 52441, 51984, 51529, 51076, 50625, 50176, 49729, 49284, 48841, 48400, - 47961, 47524, 47089, 46656, 46225, 45796, 45369, 44944, 44521, 44100, 43681, 43264, - 42849, 42436, 42025, 41616, 41209, 40804, 40401, 40000, 39601, 39204, 38809, 38416, - 38025, 37636, 37249, 36864, 36481, 36100, 35721, 35344, 34969, 34596, 34225, 33856, - 33489, 33124, 32761, 32400, 32041, 31684, 31329, 30976, 30625, 30276, 29929, 29584, - 29241, 28900, 28561, 28224, 27889, 27556, 27225, 26896, 26569, 26244, 25921, 25600, - 25281, 24964, 24649, 24336, 24025, 23716, 23409, 23104, 22801, 22500, 22201, 21904, - 21609, 21316, 21025, 20736, 20449, 20164, 19881, 19600, 19321, 19044, 18769, 18496, - 18225, 17956, 17689, 17424, 17161, 16900, 16641, 16384, 16129, 15876, 15625, 15376, - 15129, 14884, 14641, 14400, 14161, 13924, 13689, 13456, 13225, 12996, 12769, 12544, - 12321, 12100, 11881, 11664, 11449, 11236, 11025, 10816, 10609, 10404, 10201, 10000, - 9801, 9604, 9409, 9216, 9025, 8836, 8649, 8464, 8281, 8100, 7921, 7744, - 7569, 7396, 7225, 7056, 6889, 6724, 6561, 6400, 6241, 6084, 5929, 5776, - 5625, 5476, 5329, 5184, 5041, 4900, 4761, 4624, 4489, 4356, 4225, 4096, - 3969, 3844, 3721, 3600, 3481, 3364, 3249, 3136, 3025, 2916, 2809, 2704, - 2601, 2500, 2401, 2304, 2209, 2116, 2025, 1936, 1849, 1764, 1681, 1600, - 1521, 1444, 1369, 1296, 1225, 1156, 1089, 1024, 961, 900, 841, 784, - 729, 676, 625, 576, 529, 484, 441, 400, 361, 324, 289, 256, - 225, 196, 169, 144, 121, 100, 81, 64, 49, 36, 25, 16, - 9, 4, 1, 0, 1, 4, 9, 16, 25, 36, 49, 64, - 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, - 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, - 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, - 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, - 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225, 4356, 4489, 4624, - 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776, 5929, 6084, 6241, 6400, - 6561, 6724, 6889, 7056, 7225, 7396, 7569, 7744, 7921, 8100, 8281, 8464, - 8649, 8836, 9025, 9216, 9409, 9604, 9801, 10000, 10201, 10404, 10609, 10816, - 11025, 11236, 11449, 11664, 11881, 12100, 12321, 12544, 12769, 12996, 13225, 13456, - 13689, 13924, 14161, 14400, 14641, 14884, 15129, 15376, 15625, 15876, 16129, 16384, - 16641, 16900, 17161, 17424, 17689, 17956, 18225, 18496, 18769, 19044, 19321, 19600, - 19881, 20164, 20449, 20736, 21025, 21316, 21609, 21904, 22201, 22500, 22801, 23104, - 23409, 23716, 24025, 24336, 24649, 24964, 25281, 25600, 25921, 26244, 26569, 26896, - 27225, 27556, 27889, 28224, 28561, 28900, 29241, 29584, 29929, 30276, 30625, 30976, - 31329, 31684, 32041, 32400, 32761, 33124, 33489, 33856, 34225, 34596, 34969, 35344, - 35721, 36100, 36481, 36864, 37249, 37636, 38025, 38416, 38809, 39204, 39601, 40000, - 40401, 40804, 41209, 41616, 42025, 42436, 42849, 43264, 43681, 44100, 44521, 44944, - 45369, 45796, 46225, 46656, 47089, 47524, 47961, 48400, 48841, 49284, 49729, 50176, - 50625, 51076, 51529, 51984, 52441, 52900, 53361, 53824, 54289, 54756, 55225, 55696, - 56169, 56644, 57121, 57600, 58081, 58564, 59049, 59536, 60025, 60516, 61009, 61504, - 62001, 62500, 63001, 63504, 64009, 64516, 65025 -}; - -const uchar g_Saturate8u[] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255 -}; - -const char* g_HersheyGlyphs[] = { - "", - "MWRMNV RMVV PSTS", - "MWOMOV OMSMUNUPSQ OQSQURUUSVOV", - "MXVNTMRMPNOPOSPURVTVVU", - "MWOMOV OMRMTNUPUSTURVOV", - "MWOMOV OMUM OQSQ OVUV", - "MVOMOV OMUM OQSQ", - "MXVNTMRMPNOPOSPURVTVVUVR SRVR", - "MWOMOV UMUV OQUQ", - "PTRMRV", - "NUSMSTRVPVOTOS", - "MWOMOV UMOS QQUV", - "MVOMOV OVUV", - "LXNMNV NMRV VMRV VMVV", - "MWOMOV OMUV UMUV", - "MXRMPNOPOSPURVSVUUVSVPUNSMRM", - "MWOMOV OMSMUNUQSROR", - "MXRMPNOPOSPURVSVUUVSVPUNSMRM STVW", - "MWOMOV OMSMUNUQSROR RRUV", - "MWUNSMQMONOOPPTRUSUUSVQVOU", - "MWRMRV NMVM", - "MXOMOSPURVSVUUVSVM", - "MWNMRV VMRV", - "LXNMPV RMPV RMTV VMTV", - "MWOMUV UMOV", - "MWNMRQRV VMRQ", - "MWUMOV OMUM OVUV", - "MWRMNV RMVV PSTS", - "MWOMOV OMSMUNUPSQ OQSQURUUSVOV", - "MVOMOV OMUM", - "MWRMNV RMVV NVVV", - "MWOMOV OMUM OQSQ OVUV", - "MWUMOV OMUM OVUV", - "MWOMOV UMUV OQUQ", - "MXRMPNOPOSPURVSVUUVSVPUNSMRM QQTR TQQR", - "PTRMRV", - "MWOMOV UMOS QQUV", - "MWRMNV RMVV", - "LXNMNV NMRV VMRV VMVV", - "MWOMOV OMUV UMUV", - "MWOMUM PQTR TQPR OVUV", - "MXRMPNOPOSPURVSVUUVSVPUNSMRM", - "MWOMOV UMUV OMUM", - "MWOMOV OMSMUNUQSROR", - "MWOMRQOV OMUM OVUV", - "MWRMRV NMVM", - "MWNONNOMPMQNRPRV VOVNUMTMSNRP", - "LXRMRV PONPNSPTTTVSVPTOPO", - "MWOMUV UMOV", - "LXRMRV NOOPOSQTSTUSUPVO", - "MXOVQVOROPPNRMSMUNVPVRTVVV", - "MWSMMV SMUV OSTS", - "MWQMNV QMTMVNVPSQPQ SQURUTTURVNV", - "LXVPUNTMRMPNOONQNSOUPVRVTUUT", - "MXQMNV QMUMVOVQUTTURVNV", - "MVQMNV QMVM PQSQ NVSV", - "MVQMNV QMVM PQSQ", - "LXVPUNTMRMPNOONQNSOUPVRVTUUSRS", - "MXQMNV WMTV PQUQ", - "PUTMQV", - "OVUMSSRUQVPVOUOT", - "MVQMNV VMOS RQTV", - "NVRMOV OVTV", - "LYPMMV PMQV XMQV XMUV", - "MXQMNV QMTV WMTV", - "LXRMPNOONQNSOUPVRVTUUTVRVPUNTMRM", - "MWQMNV QMUMVNVPUQSRPR", - "LXRMPNOONQNSOUPVRVTUUTVRVPUNTMRM QVPUPTQSRSSTTVUWVW", - "MWQMNV QMUMVNVPUQSRPR QRRUSVTVUU", - "MWVNTMRMPNPPQQTRUSUUSVPVNU", - "MVSMPV PMVM", - "LXPMNSNUOVRVTUUSWM", - "MWOMQV WMQV", - "KXNMNV SMNV SMSV XMSV", - "NWQMTV WMNV", - "NWQMSQQV WMSQ", - "MWQMWMNVTV", - "", - "", - "", - "", - "", - "", - "LXNMRV VMRV NMVM", - "MWNLVX", - "LXRONU ROVU", - "MWNVVV", - "PVRMUQ", - "MWMMOKQKTMVMWK", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NWQPTPUQUV URQSPTPUQVSVUU", - "MWOMOV OSPURVTUUSTQRPPQOS", - "MWUQSPRPPQOSPURVSVUU", - "MWUMUV USTQRPPQOSPURVTUUS", - "MWOSUSTQRPPQOSPURVTV", - "NVUNTMSMRNRV PPTP", - "MWUPUVTXRYPY USTQRPPQOSPURVTUUS", - "MWOMOV OSPQRPTQUSUV", - "PTRLQMRNSMRL RPRV", - "PUSLRMSNTMSL SPSXRYQYPX", - "NWPMPV UPPT RSUV", - "PTRMRV", - "KYMPMV MSNQOPPPQQRSRV RSSQTPUPVQWSWV", - "MWOPOV OSPQRPTQUSUV", - "MWRPPQOSPURVTUUSTQRP", - "MWOPOY OSPURVTUUSTQRPPQOS", - "MWUPUY USTQRPPQOSPURVTUUS", - "NVPPPV PSQQSPTP", - "NWUQTPQPPQPRQSTSUTUUTVQVPU", - "NVRMRUSVTVUU PPTP", - "MWUPUV OPOSPURVTUUS", - "NVOPRV UPRV", - "LXNPPV RPPV RPTV VPTV", - "MWOPUV UPOV", - "MWOPRV UPRVQXPYOY", - "MWOPUPOVUV", - "MXVPUSTURVPUOSPQRPTQUUVV", - "MWOTQVSVTUTSSRPQRQTPUOUNTMRMQNPPOTNY", - "MXNQOPQPRQRSQW VPURSTQWPY", - "MWTNSMRMQNQORPTQUSTURVPUOSPQRP", - "NWUQSPQPPQPRQS SSQSPTPUQVSVUU", - "NWTMSNSOTP UPSPQQPSPUQVSWSXRYQY", - "LXNQOPPPQQQSPV QSRQTPUPVQVSUVTY", - "LXNQOPPPQQQURVSVTUUSVPVNUMTMSNSPTRUSWT", - "OVRPQSQURVSVTU", - "MWQPOV UPTPRQPS PSQUSVTV", - "MWOMPMQNRPUV RPOV", - "LYPPMY UPTSSUQVPVOUOS TSTUUVVVWU", - "MWNPOPOV UPTSRUOV", - "NWTMSNSOTP UPSPQQQRRSTS SSQTPUPVQWSXSYRZQZ", - "MWRPPQOSPURVTUUSTQRP", - "MXOQQPVP QPQRPV TPTRUV", - "MWOSPURVTUUSTQRPPQOSNY", - "MXVPRPPQOSPURVTUUSTQRP", - "MXOQQPVP SPRV", - "KXMQNPOPPQPUQVSVTUUSVP", - "MXPPOQOSPURVSVUUVSVQUPTPSQRSQY", - "MWOPPPQQSXTYUY UPTRPWOY", - "KYTMRY MQNPOPPQPUQVTVUUVSWP", - "LXOPNRNTOVQVRTRR UPVRVTUVSVRT", - "LWTSSQQPOQNSOUQVSUTS UPTSTUUVVV", - "MWQMOSPURVTUUSTQRPPQOS", - "MWUQSPRPPQOSPURVTV", - "LWTSSQQPOQNSOUQVSUTS VMTSTUUVVV", - "MWOSTSURUQSPRPPQOSPURVTV", - "OVVMUMTNSPQVPXOYNY QPUP", - "MXUSTQRPPQOSPURVTUUS VPTVSXRYPYOX", - "MVQMNV OSPQQPSPTQTRSTSUTVUV", - "PUSMSNTNTMSM QPRPSQSRRTRUSVTV", - "OUSMSNTNTMSM QPRPSQSRRVQXPYOYNX", - "NVRMOV UPTPRQPS PSQUSVTV", - "OTSMQSQURVSV", - "JYKPLPMQMSLV MSNQOPQPRQRSQV RSSQTPVPWQWRVTVUWVXV", - "MWNPOPPQPSOV PSQQRPTPUQURTTTUUVVV", - "MWRPPQOSPURVTUUSTQRP", - "MXNPOPPQPSNY PSQUSVUUVSUQSPQQPS", - "MXUSTQRPPQOSPURVTUUS VPSY", - "MVOPPPQQQSPV UQTPSPRQQS", - "NVTQSPQPPQPRQSRSSTSURVPVOU", - "NUSMQSQURVSV PPTP", - "MWNPOPPQPROTOUPVRVSUTS UPTSTUUVVV", - "MWNPOPPQPROTOUPVRVTUURUP", - "KYLPMPNQNRMTMUNVPVQURSSP RSRUSVUVVUWRWP", - "MWOQPPQPRQRUSVTVUU VQUPTPSQQUPVOVNU", - "MWNPOPPQPROTOUPVRVSUTS UPSVRXQYOYNX", - "NVUPOV PQQPSPTQ PUQVSVTU", - "", - "", - "", - "", - "", - "", - "MWUSTQRPPQOSPURVTUUSUPTNRMQM", - "MWUQSPRPPQOSPURVSVUU OSSS", - "MWRMQNPPOSOVPWRWSVTTUQUNTMRM PRTR", - "MWTMQY RPPQOSPURVSVUUVSUQSPRP", - "MWUQSPQPOQOSPTRUSVSWRXQX", - "", - "", - "KYTPTSUTVTWSWQVOUNSMQMONNOMQMSNUOVQWSWUV TQSPQPPQPSQTSTTS", - "MWUNORUV", - "MWONUROV", - "OUTKQKQYTY", - "OUPKSKSYPY", - "OUTKSLRNROSQQRSSRURVSXTY", - "OUPKQLRNROQQSRQSRURVQXPY", - "LYPMQNQOPPOPNONNOMPMSNUNWMNV USTTTUUVVVWUWTVSUS", - "PT", - "NV", - "MWRMPNOPOSPURVTUUSUPTNRM", - "MWPORMRV", - "MWONQMSMUNUPTROVUV", - "MWONQMSMUNUPSQ RQSQURUUSVQVOU", - "MWSMSV SMNSVS", - "MWPMOQQPRPTQUSTURVQVOU PMTM", - "MWTMRMPNOPOSPURVTUUSTQRPPQOS", - "MWUMQV OMUM", - "MWQMONOPQQSQUPUNSMQM QQOROUQVSVUUURSQ", - "MWUPTRRSPROPPNRMTNUPUSTURVPV", - "PURURVSVSURU", - "PUSVRVRUSUSWRY", - "PURPRQSQSPRP RURVSVSURU", - "PURPRQSQSPRP SVRVRUSUSWRY", - "PURMRR SMSR RURVSVSURU", - "NWPNRMSMUNUPRQRRSRSQUP RURVSVSURU", - "PTRMRQ", - "NVPMPQ TMTQ", - "NVQMPNPPQQSQTPTNSMQM", - "MWRKRX UNSMQMONOPQQTRUSUUSVQVOU", - "MWVLNX", - "OUTKRNQQQSRVTY", - "OUPKRNSQSSRVPY", - "PTRKRY", - "LXNRVR", - "LXRNRV NRVR", - "LXNPVP NTVT", - "MWOOUU UOOU", - "MWRORU OPUT UPOT", - "PURQRRSRSQRQ", - "PUSMRORQSQSPRP", - "PUSNRNRMSMSORQ", - "LXSOVRSU NRVR", - "MXQLQY TLTY OQVQ OTVT", - "LXVRURTSSURVOVNUNSORRQSPSNRMPMONOPQSSUUVVV", - "LXNNOQOSNV VNUQUSVV NNQOSOVN NVQUSUVV", - "LYRQQPOPNQNSOTQTRSSQTPVPWQWSVTTTSSRQ", - "", - "H\\NRMQLRMSNR VRWQXRWSVR", - "H\\MPLQLRMSNSOROQNPMP MQMRNRNQMQ WPVQVRWSXSYRYQXPWP WQWRXRXQWQ", - "I[KRYR", - "", - "H\\RUJPRTZPRU", - "", - "", - "", - "", - "", - "F^ISJQLPNPPQTTVUXUZT[Q ISJPLONOPPTSVTXTZS[Q IYJWLVNVPWTZV[X[ZZ[W IYJVLUNUPVTYVZXZZY[W", - "", - "F^ISJQLPNPPQTTVUXUZT[Q ISJPLONOPPTSVTXTZS[Q IW[W I[[[", - "", - "CaGO]OXI L[GU]U", - "", - "D`F^^^^FFFF^", - "", - "KYQVOUNSNQOOQNSNUOVQVSUUSVQV SVVS QVVQ OUUO NSSN NQQN", - "", - "H\\IR[R", - "H\\IR[R IQ[Q", - "", - "LYPFSCSP RDRP OPVP MRXR OVOWNWNVOUQTTTVUWWVYTZQ[O\\N^Na TTUUVWUYTZ N`O_P_S`V`W_ P_SaVaW_W^", - "LYPFSCSP RDRP OPVP MRXR OVOWNWNVOUQTTTVUWWVYTZ TTUUVWUYTZ RZTZV[W]W^V`TaQaO`N_N^O^O_ TZU[V]V^U`Ta", - "LYPFSCSP RDRP OPVP MRXR VVVWWWWVVUTTRTPUOVNYN^O`QaTaV`W^W\\VZTYQYN[ RTPVOYO^P`Qa TaU`V^V\\UZTY", - "LYPFSCSP RDRP OPVP MRXR QTOUNWOYQZTZVYWWVUTTQT QTPUOWPYQZ TZUYVWUUTT QZO[N]N^O`QaTaV`W^W]V[TZ QZP[O]O^P`Qa TaU`V^V]U[TZ", - "LYOEOFNFNEODQCTCVDWFVHTIQJOKNMNP TCUDVFUHTI NOONPNSOVOWN PNSPVPWNWM MRXR OVOWNWNVOUQTTTVUWWVYTZ TTUUVWUYTZ RZTZV[W]W^V`TaQaO`N_N^O^O_ TZU[V]V^U`Ta", - "LYOEOFNFNEODQCTCVDWFVHTI TCUDVFUHTI RITIVJWLWMVOTPQPOONNNMOMON TIUJVLVMUOTP MRXR QTOUNWOYQZTZVYWWVUTTQT QTPUOWPYQZ TZUYVWUUTT QZO[N]N^O`QaTaV`W^W]V[TZ QZP[O]O^P`Qa TaU`V^V]U[TZ", - "LYOCNI OCVC ODSDVC NIOHQGTGVHWJWMVOTPQPOONNNMOMON TGUHVJVMUOTP MRXR QTOUNWOYQZTZVYWWVUTTQT QTPUOWPYQZ TZUYVWUUTT QZO[N]N^O`QaTaV`W^W]V[TZ QZP[O]O^P`Qa TaU`V^V]U[TZ", - "LYNCNG VERLPP WCTIQP NEPCRCUE NEPDRDUEVE MRXR QTOUNWOYQZTZVYWWVUTTQT QTPUOWPYQZ TZUYVWUUTT QZO[N]N^O`QaTaV`W^W]V[TZ QZP[O]O^P`Qa TaU`V^V]U[TZ", - "LYOCNI OCVC ODSDVC NIOHQGTGVHWJWMVOTPQPOONNNMOMON TGUHVJVMUOTP MRXR VVVWWWWVVUTTRTPUOVNYN^O`QaTaV`W^W\\VZTYQYN[ RTPVOYO^P`Qa TaU`V^V\\UZTY", - "LYPFSCSP RDRP OPVP MRXR SVSa TTTa TTM]X] QaVa", - "LYOEOFNFNEODQCTCVDWFVHTI TCUDVFUHTI RITIVJWLWMVOTPQPOONNNMOMON TIUJVLVMUOTP MRXR SVSa TTTa TTM]X] QaVa", - "F^YXWZU[R[PZMXKWIWHXHZI[K[MZOWPURQTKWGYFZF[G\\H[IZH[G[FZFYFWGVHTLRPPVNZMZ OPUP", - "E^P[MZJXHUGRGOHLJIMGPFTFWGYI[L\\O\\R[UYXVZS[P[ NJNW OJOW LJSJVKWMWNVPSQOQ SJUKVMVNUPSQ LWQW SQTRUVVWWWXV SQURVVWW", - "E^P[MZJXHUGRGOHLJIMGPFTFWGYI[L\\O\\R[UYXVZS[P[ UKVJVNUKSJPJNKMLLOLRMUNVPWSWUVVT PJNLMOMRNUPW", - "E_IM[M IR[R IW[W K[YI", - "CaHQGRHSIRHQ RQQRRSSRRQ \\Q[R\\S]R\\Q", - "", - "E_NWLTIRLPNM LPJRLT JRZR VWXT[RXPVM XPZRXT", - "JZWNTLRIPLMN PLRJTL RJRZ WVTXR[PXMV PXRZTX", - "F^ZJSJOKMLKNJQJSKVMXOYSZZZ SFS^", - "F^JJQJUKWLYNZQZSYVWXUYQZJZ QFQ^", - "F^JJQJUKWLYNZQZSYVWXUYQZJZ ORZR", - "", - "H\\LBL[ RBR[ XBX[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "I[RFJ[ RFZ[ MTWT", - "G\\KFK[ KFTFWGXHYJYLXNWOTP KPTPWQXRYTYWXYWZT[K[", - "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV", - "G\\KFK[ KFRFUGWIXKYNYSXVWXUZR[K[", - "H[LFL[ LFYF LPTP L[Y[", - "HZLFL[ LFYF LPTP", - "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS USZS", - "G]KFK[ YFY[ KPYP", - "NVRFR[", - "JZVFVVUYTZR[P[NZMYLVLT", - "G\\KFK[ YFKT POY[", - "HYLFL[ L[X[", - "F^JFJ[ JFR[ ZFR[ ZFZ[", - "G]KFK[ KFY[ YFY[", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF", - "G\\KFK[ KFTFWGXHYJYMXOWPTQKQ", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF SWY]", - "G\\KFK[ KFTFWGXHYJYLXNWOTPKP RPY[", - "H\\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX", - "JZRFR[ KFYF", - "G]KFKULXNZQ[S[VZXXYUYF", - "I[JFR[ ZFR[", - "F^HFM[ RFM[ RFW[ \\FW[", - "H\\KFY[ YFK[", - "I[JFRPR[ ZFRP", - "H\\YFK[ KFYF K[Y[", - "I[RFJ[ RFZ[ MTWT", - "G\\KFK[ KFTFWGXHYJYLXNWOTP KPTPWQXRYTYWXYWZT[K[", - "HYLFL[ LFXF", - "I[RFJ[ RFZ[ J[Z[", - "H[LFL[ LFYF LPTP L[Y[", - "H\\YFK[ KFYF K[Y[", - "G]KFK[ YFY[ KPYP", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF OPUP", - "NVRFR[", - "G\\KFK[ YFKT POY[", - "I[RFJ[ RFZ[", - "F^JFJ[ JFR[ ZFR[ ZFZ[", - "G]KFK[ KFY[ YFY[", - "I[KFYF OPUP K[Y[", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF", - "G]KFK[ YFY[ KFYF", - "G\\KFK[ KFTFWGXHYJYMXOWPTQKQ", - "I[KFRPK[ KFYF K[Y[", - "JZRFR[ KFYF", - "I[KKKILGMFOFPGQIRMR[ YKYIXGWFUFTGSIRM", - "H\\RFR[ PKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK", - "H\\KFY[ K[YF", - "G]RFR[ ILJLKMLQMSNTQUSUVTWSXQYMZL[L", - "H\\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[", - "G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[", - "F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP SPTPWQXRYTYWXYWZU[R[PZOX", - "H\\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV", - "G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\\U", - "H\\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV", - "H\\RLPLNKMINGQFTFXG[G]F XGVNTTRXPZN[L[JZIXIVJULUNV QPZP", - "G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT", - "F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX MRVOXN[L]J^H^G]F\\FZHXLVRUWUZV[W[YZZY\\V", - "IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV", - "JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\\SZWX", - "F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX ^I^G]F\\FZGXIVLTNROPO ROSQSXTZU[V[XZYY[V", - "I\\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X", - "@aEMCLBJBICGEFFFHGIIIKHPGTE[ GTJLLHMGOFPFRGSISKRPQTO[ QTTLVHWGYFZF\\G]I]K\\PZWZZ[[\\[^Z_YaV", - "E]JMHLGJGIHGJFKFMGNINKMPLTJ[ LTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V", - "H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\\V", - "F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\\G]H^J^M]O\\PZQWQUPTO", - "H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X", - "F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\\H]J]M\\O[PYQVQSPTQUSUXVZX[ZZ[Y]V", - "H\\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT", - "H[RLPLNKMINGQFTFXG[G]F XGVNTTRXPZN[L[JZIXIVJULUNV", - "E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF XMWQVWVZW[X[ZZ[Y]V", - "F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q", - "C_HMFLEJEIFGHFIFKGLILLK[ UFK[ UFS[ aF_G\\JYNVTS[", - "F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU ]I]G\\FZFXGVITLPUNXLZJ[H[GZGX", - "F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM [FYMVWT]RbPfNgMfMdNaP^S[VY[V", - "H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV", - "", - "", - "", - "", - "", - "", - "I[JFR[ ZFR[ JFZF", - "G]IL[b", - "E_RJIZ RJ[Z", - "I[J[Z[", - "I[J[Z[ZZJZJ[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "I\\XMX[ XPVNTMQMONMPLSLUMXOZQ[T[VZXX", - "H[LFL[ LPNNPMSMUNWPXSXUWXUZS[P[NZLX", - "I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX", - "I\\XFX[ XPVNTMQMONMPLSLUMXOZQ[T[VZXX", - "I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX", - "MYWFUFSGRJR[ OMVM", - "I\\XMX]W`VaTbQbOa XPVNTMQMONMPLSLUMXOZQ[T[VZXX", - "I\\MFM[ MQPNRMUMWNXQX[", - "NVQFRGSFREQF RMR[", - "MWRFSGTFSERF SMS^RaPbNb", - "IZMFM[ WMMW QSX[", - "NVRFR[", - "CaGMG[ GQJNLMOMQNRQR[ RQUNWMZM\\N]Q][", - "I\\MMM[ MQPNRMUMWNXQX[", - "I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM", - "H[LMLb LPNNPMSMUNWPXSXUWXUZS[P[NZLX", - "I\\XMXb XPVNTMQMONMPLSLUMXOZQ[T[VZXX", - "KXOMO[ OSPPRNTMWM", - "J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX", - "MYRFRWSZU[W[ OMVM", - "I\\MMMWNZP[S[UZXW XMX[", - "JZLMR[ XMR[", - "G]JMN[ RMN[ RMV[ ZMV[", - "J[MMX[ XMM[", - "JZLMR[ XMR[P_NaLbKb", - "J[XMM[ MMXM M[X[", - "H]QMONMPLRKUKXLZN[P[RZUWWTYPZM QMSMTNUPWXXZY[Z[", - "I\\UFSGQIOMNPMTLZKb UFWFYHYKXMWNUORO ROTPVRWTWWVYUZS[Q[OZNYMV", - "I\\JPLNNMOMQNROSRSVR[ ZMYPXRR[P_Ob", - "I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI", - "JZWOVNTMQMONOPPRSS SSOTMVMXNZP[S[UZWX", - "JYTFRGQHQIRJUKXK XKTMQONRMUMWNYP[S]T_TaSbQbP`", - "H\\IQJOLMNMONOPNTL[ NTPPRNTMVMXOXRWWTb", - "G\\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT", - "LWRMPTOXOZP[R[TYUW", - "I[OMK[ YNXMWMUNQROSNS NSPTQUSZT[U[VZ", - "JZKFMFOGPHX[ RML[", - "H]OMIb NQMVMYO[Q[SZUXWT YMWTVXVZW[Y[[Y\\W", - "I[LMOMNSMXL[ YMXPWRUURXOZL[", - "JZTFRGQHQIRJUKXK UKRLPMOOOQQSTTVT TTPUNVMXMZO\\S^T_TaRbPb", - "J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM", - "G]PML[ UMVSWXX[ IPKNNM[M", - "I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb", - "I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM", - "H\\SMP[ JPLNOMZM", - "H\\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM", - "G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb", - "I[KMMMOOU`WbYb ZMYOWRM]K`Jb", - "F]VFNb GQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M", - "F]NMLNJQITIWJZK[M[OZQW RSQWRZS[U[WZYWZTZQYNXM", - "L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\\V", - "M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V", - "MXTTTSSRQROSNTMVMXNZP[S[VYXV", - "L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF VRUWUZV[W[YZZY\\V", - "NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV", - "OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV", - "L[UUTSRRPRNSMTLVLXMZO[Q[SZTY VRTYPdOfMgLfLdMaP^S\\U[XY[V", - "M\\MVOSRNSLTITGSFQGPIOMNSM[ M[NXOVQSSRURVSVUUXUZV[W[YZZY\\V", - "PWSMSNTNTMSM PVRRPXPZQ[R[TZUYWV", - "PWSMSNTNTMSM PVRRLdKfIgHfHdIaL^O\\Q[TYWV", - "M[MVOSRNSLTITGSFQGPIOMNSM[ M[NXOVQSSRURVSVUTVQV QVSWTZU[V[XZYY[V", - "OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV", - "E^EVGSIRJSJTIXH[ IXJVLSNRPRQSQTPXO[ PXQVSSURWRXSXUWXWZX[Y[[Z\\Y^V", - "J\\JVLSNROSOTNXM[ NXOVQSSRURVSVUUXUZV[W[YZZY\\V", - "LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV", - "KZKVMSNQMUGg MUNSPRRRTSUUUWTYSZQ[ MZO[R[UZWYZV", - "L[UUTSRRPRNSMTLVLXMZO[Q[SZ VRUUSZPaOdOfPgRfScS\\U[XY[V", - "MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV", - "NYNVPSQQQSSVTXTZR[ NZP[T[VZWYYV", - "OXOVQSSO VFPXPZQ[S[UZVYXV PNWN", - "L[LVNRLXLZM[O[QZSXUU VRTXTZU[V[XZYY[V", - "L[LVNRMWMZN[O[RZTXUUUR URVVWWYW[V", - "I^LRJTIWIYJ[L[NZPX RRPXPZQ[S[UZWXXUXR XRYVZW\\W^V", - "JZJVLSNRPRQSQZR[U[XYZV WSVRTRSSOZN[L[KZ", - "L[LVNRLXLZM[O[QZSXUU VRPdOfMgLfLdMaP^S\\U[XY[V", - "LZLVNSPRRRTTTVSXQZN[P\\Q^QaPdOfMgLfLdMaP^S\\WYZV", - "J\\K[NZQXSVUSWOXKXIWGUFSGRHQJPOPTQXRZT[V[XZYY", - "", - "", - "", - "", - "", - "I[WUWRVOUNSMQMONMPLSLVMYNZP[R[TZVXWUXPXKWHVGTFRFPGNI", - "JZWNUMRMPNNPMSMVNYOZQ[T[VZ MTUT", - "J[TFRGPJOLNOMTMXNZO[Q[SZUWVUWRXMXIWGVFTF NPWP", - "H\\VFNb QMNNLPKSKVLXNZQ[S[VZXXYUYRXPVNSMQM", - "I[XOWNTMQMNNMOLQLSMUOWSZT\\T^S_Q_", - "", - "", - "DaWNVLTKQKOLNMMOMRNTOUQVTVVUWS WKWSXUYV[V\\U]S]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYY", - "F^ZIJRZ[", - "F^JIZRJ[", - "KYOBOb OBVB ObVb", - "KYUBUb NBUB NbUb", - "KYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb", - "KYPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb", - "F^[FYGVHSHPGNFLFJGIIIKKMMMOLPJPHNF [FI[ YTWTUUTWTYV[X[ZZ[X[VYT", - "NV", - "JZ", - "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF", - "H\\NJPISFS[", - "H\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[", - "H\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW", - "H\\UFKTZT UFU[", - "H\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW", - "H\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT", - "H\\YFO[ KFYF", - "H\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF", - "H\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX", - "MWRYQZR[SZRY", - "MWSZR[QZRYSZS\\R^Q_", - "MWRMQNROSNRM RYQZR[SZRY", - "MWRMQNROSNRM SZR[QZRYSZS\\R^Q_", - "MWRFRT RYQZR[SZRY", - "I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RYQZR[SZRY", - "NVRFRM", - "JZNFNM VFVM", - "KYQFOGNINKOMQNSNUMVKVIUGSFQF", - "H\\PBP_ TBT_ YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX", - "G][BIb", - "KYVBTDRGPKOPOTPYR]T`Vb", - "KYNBPDRGTKUPUTTYR]P`Nb", - "NVRBRb", - "E_IR[R", - "E_RIR[ IR[R", - "E_IO[O IU[U", - "G]KKYY YKKY", - "JZRLRX MOWU WOMU", - "MWRQQRRSSRRQ", - "MWSFRGQIQKRLSKRJ", - "MWRHQGRFSGSIRKQL", - "E_UMXP[RXTUW IR[R", - "G]OFOb UFUb JQZQ JWZW", - "E_\\O\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\Z\\Y", - "G]IIJKKOKUJYI[ [IZKYOYUZY[[ IIKJOKUKYJ[I I[KZOYUYYZ[[", - "F_\\Q[OYNWNUOTPQTPUNVLVJUISIQJOLNNNPOQPTTUUWVYV[U\\S\\Q", - "KYOBO[ UBU[", - "F^RBR[ I[[[", - "F^[BI[[[", - "E_RIQJRKSJRI IYHZI[JZIY [YZZ[[\\Z[Y", - "F^RHNLKPJSJUKWMXOXQWRU RHVLYPZSZUYWWXUXSWRU RUQYP\\ RUSYT\\ P\\T\\", - "F^RNQKPINHMHKIJKJOKRLTNWR\\ RNSKTIVHWHYIZKZOYRXTVWR\\", - "F^RGPJLOIR RGTJXO[R IRLUPZR] [RXUTZR]", - "F^RTTWVXXXZW[U[SZQXPVPSQ SQUOVMVKUISHQHOINKNMOOQQ QQNPLPJQISIUJWLXNXPWRT RTQYP\\ RTSYT\\ P\\T\\", - "F^RRR[Q\\ RVQ\\ RIQHOHNINKONRR RISHUHVIVKUNRR RRNOLNJNIOIQJR RRVOXNZN[O[QZR RRNULVJVIUISJR RRVUXVZV[U[SZR", - "F^ISJSLTMVMXLZ ISIRJQLQMRNTNWMYLZ RGPIOLOOQUQXPZR\\ RGTIULUOSUSXTZR\\ [S[RZQXQWRVTVWWYXZ [SZSXTWVWXXZ KVYV", - "", - "", - "", - "PSSRRSQSPRPQQPRPSQSSRUQV QQQRRRRQQQ", - "PTQPPQPSQTSTTSTQSPQP RQQRRSSRRQ", - "NVPOTU TOPU NRVR", - "MWRKQMOPMR RKSMUPWR RMOQ RMUQ ROPQ ROTQ QQSQ MRWR", - "MWMRMQNOONQMSMUNVOWQWR PNTN OOUO NPVP NQVQ MRWR", - "LRLFLRRRLF LIPQ LLOR LOMQ", - "MWRKQMOPMR RKSMUPWR", - "MWWRWQVOUNSMQMONNOMQMR", - "G]]R]P\\MZJWHTGPGMHJJHMGPGR", - "MWMRMSNUOVQWSWUVVUWSWR", - "LXLPNRQSSSVRXP", - "RURUTTURTPRO", - "RVRRUPVNVLUKTK", - "NRRROPNNNLOKPK", - "MWWHVGTFQFOGNHMJMLNNOOUSVTWVWXVZU[S\\P\\N[MZ", - "G]IWHVGTGQHOINKMMMONPOTUUVWWYW[V\\U]S]P\\N[M", - "G]RRTUUVWWYW[V\\U]S]Q\\O[NYMWMUNTOPUOVMWKWIVHUGSGQHOINKMMMONPORR", - "H\\KFK[ HF[FQP[Z ZV[Y\\[ ZVZY WYZY WYZZ\\[", - "KYUARBPCNELHKLKRLUNWQXSXVWXUYR KPLMNKQJSJVKXMYPYVXZV]T_R`Oa", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - ">f>RfR", - "D`D``D", - "RRR>Rf", - "D`DD``", - "D`DR`R", - "F^FY^K", - "KYK^YF", - "", - "KYKFY^", - "F^FK^Y", - "KYKRYR", - "MWMWWM", - "", - "MWMMWW", - "", - "", - "", - "", - "D`DOGQKSPTTTYS]Q`O", - "PUUDSGQKPPPTQYS]U`", - "OTODQGSKTPTTSYQ]O`", - "D`DUGSKQPPTPYQ]S`U", - "KYRJYNKVRZ", - "JZJRNKVYZR", - "KYKVKNYVYN", - "JZLXJPZTXL", - "JZJ]L]O\\Q[TXUVVSVOULTJSIQIPJOLNONSOVPXS[U\\X]Z]", - "I]]Z]X\\U[SXPVOSNONLOJPIQISJTLUOVSVVUXT[Q\\O]L]J", - "JZZGXGUHSIPLONNQNUOXPZQ[S[TZUXVUVQUNTLQIOHLGJG", - "G[GJGLHOIQLTNUQVUVXUZT[S[QZPXOUNQNNOLPISHUGXGZ", - "E[EPFRHTJUMVQVUUXSZP[NZLWLSMQNNPLSKVKYL\\M^", - "EYETHVKWPWSVVTXQYNYLXKVKSLPNNQMTMYN\\P_", - "OUQOOQOSQUSUUSUQSOQO QPPQPSQTSTTSTQSPQP RQQRRSSRRQ", - "", - "D`DRJR ORUR ZR`R", - "D`DUDO`O`U", - "JZRDJR RDZR", - "D`DR`R JYZY P`T`", - "D`DR`R DRRb `RRb", - "", - "", - "", - "", - "", - "KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK", - "LXLLLXXXXLLL", - "KYRJKVYVRJ", - "LXRHLRR\\XRRH", - "JZRIPOJOOSMYRUWYUSZOTORI", - "KYRKRY KRYR", - "MWMMWW WMMW", - "MWRLRX MOWU WOMU", - "", - "", - "NVQNOONQNSOUQVSVUUVSVQUOSNQN OQOS PPPT QOQU RORU SOSU TPTT UQUS", - "NVNNNVVVVNNN OOOU POPU QOQU RORU SOSU TOTU UOUU", - "MWRLMUWURL ROOT ROUT RRQT RRST", - "LULRUWUMLR ORTU ORTO RRTS RRTQ", - "MWRXWOMORX RUUP RUOP RRSP RRQP", - "OXXROMOWXR URPO URPU RRPQ RRPS", - "LXRLNWXPLPVWRL RRRL RRLP RRNW RRVW RRXP", - "", - "", - "", - "MWRLRX OOUO MUOWQXSXUWWU", - "LXRLRX LQMOWOXQ PWTW", - "KYMNWX WNMX OLLOKQ ULXOYQ", - "I[NII[ VI[[ MM[[ WMI[ NIVI MMWM", - "I[RGRV MJWP WJMP IVL\\ [VX\\ IV[V L\\X\\", - "G[MJSV KPSL G\\[\\[RG\\", - "LXPLPPLPLTPTPXTXTTXTXPTPTLPL", - "KYYPXNVLSKQKNLLNKQKSLVNXQYSYVXXVYT YPWNUMSMQNPOOQOSPUQVSWUWWVYT", - "KYRJKVYVRJ RZYNKNRZ", - "G]PIPGQFSFTGTI GZHXJVKTLPLKMJOIUIWJXKXPYTZV\\X]Z GZ]Z QZP[Q\\S\\T[SZ", - "JZRMRS RSQ\\ RSS\\ Q\\S\\ RMQJPHNG QJNG RMSJTHVG SJVG RMNKLKJM PLLLJM RMVKXKZM TLXLZM RMPNOOOR RMPOOR RMTNUOUR RMTOUR", - "JZRIRK RNRP RSRU RYQ\\ RYS\\ Q\\S\\ RGQIPJ RGSITJ PJRITJ RKPNNOMN RKTNVOWN NOPORNTOVO RPPSNTLTKRKSLT RPTSVTXTYRYSXT NTPTRSTTVT RUPXOYMZLZKYJWJYLZ RUTXUYWZXZYYZWZYXZ MZOZRYUZWZ", - "JZRYQ\\ RYS\\ Q\\S\\ RYUZXZZXZUYTWTYRZOYMWLUMVJUHSGQGOHNJOMMLKMJOKRMTKTJUJXLZOZRY", - "JZRYQ\\ RYS\\ Q\\S\\ RYVXVVXUXRZQZLYIXHVHTGPGNHLHKIJLJQLRLUNVNXRY", - "I[IPKR LKNP RGRO XKVP [PYR", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "QSRQQRRSSRRQ", - "PTQPPQPSQTSTTSTQSPQP", - "NVQNOONQNSOUQVSVUUVSVQUOSNQN", - "MWQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM", - "KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK", - "G]PGMHJJHMGPGTHWJZM\\P]T]W\\ZZ\\W]T]P\\MZJWHTGPG", - "AcPALBJCGEEGCJBLAPATBXCZE]G_JaLbPcTcXbZa]__]aZbXcTcPbLaJ_G]EZCXBTAPA", - "fRAPCMDJDGCEA>H@JAMAZB]D_G`M`PaRc RATCWDZD]C_AfHdJcMcZb]`_]`W`TaRc", - "AcRAPCMDJDGCEABGAKAPBTDXG\\L`Rc RATCWDZD]C_AbGcKcPbT`X]\\X`Rc BHbH", - "H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX QMONMPLSLUMXOZQ[ LbXF", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "KYRKMX RNVX RKWX OTTT KXPX TXYX", - "JZNKNX OKOX LKSKVLWNVPSQ SKULVNUPSQ OQSQVRWTWUVWSXLX SQURVTVUUWSX", - "KYVLWKWOVLTKQKOLNMMPMSNVOWQXTXVWWU QKOMNPNSOVQX", - "JZNKNX OKOX LKSKVLWMXPXSWVVWSXLX SKULVMWPWSVVUWSX", - "JYNKNX OKOX SOSS LKVKVOUK OQSQ LXVXVTUX", - "JXNKNX OKOX SOSS LKVKVOUK OQSQ LXQX", - "K[VLWKWOVLTKQKOLNMMPMSNVOWQXTXVW QKOMNPNSOVQX TXUWVU VSVX WSWX TSYS", - "J[NKNX OKOX VKVX WKWX LKQK TKYK OQVQ LXQX TXYX", - "NWRKRX SKSX PKUK PXUX", - "LXSKSURWQX TKTUSWQXPXNWMUNTOUNV QKVK", - "JZNKNX OKOX WKOS QQVX RQWX LKQK TKYK LXQX TXYX", - "KXOKOX PKPX MKRK MXWXWTVX", - "I\\MKMX NNRX NKRU WKRX WKWX XKXX KKNK WKZK KXOX UXZX", - "JZNKNX OMVX OKVV VKVX LKOK TKXK LXPX", - "KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK QKOMNPNSOVQX TXVVWSWPVMTK", - "JYNKNX OKOX LKSKVLWNWOVQSROR SKULVNVOUQSR LXQX", - "KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK QKOMNPNSOVQX TXVVWSWPVMTK PWPUQTSTTUUZV[W[XZ TUUXVZW[", - "JZNKNX OKOX LKSKVLWNWOVQSROR SKULVNVOUQSR LXQX SRTSUWVXWXXW SRUSVWWX", - "KZVMWKWOVMULSKQKOLNMNOOPQQTRVSWT NNOOQPTQVRWSWVVWTXRXPWOVNTNXOV", - "KZRKRX SKSX NKMOMKXKXOWK PXUX", - "J[NKNUOWQXTXVWWUWK OKOUPWQX LKQK UKYK", - "KYMKRX NKRU WKRX KKPK TKYK", - "I[LKOX MKOT RKOX RKUX SKUT XKUX JKOK VKZK", - "KZNKVX OKWX WKNX LKQK TKYK LXQX TXYX", - "LYNKRRRX OKSR WKSRSX LKQK TKYK PXUX", - "LYVKNX WKOX OKNONKWK NXWXWTVX", - "KYRKMX RNVX RKWX OTTT KXPX TXYX", - "JZNKNX OKOX LKSKVLWNVPSQ SKULVNUPSQ OQSQVRWTWUVWSXLX SQURVTVUUWSX", - "KXOKOX PKPX MKWKWOVK MXRX", - "KYRKLX RMWX RKXX MWVW LXXX", - "JYNKNX OKOX SOSS LKVKVOUK OQSQ LXVXVTUX", - "LYVKNX WKOX OKNONKWK NXWXWTVX", - "J[NKNX OKOX VKVX WKWX LKQK TKYK OQVQ LXQX TXYX", - "KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK QKOMNPNSOVQX TXVVWSWPVMTK QOQT TOTT QQTQ QRTR", - "NWRKRX SKSX PKUK PXUX", - "JZNKNX OKOX WKOS QQVX RQWX LKQK TKYK LXQX TXYX", - "KYRKMX RNVX RKWX KXPX TXYX", - "I\\MKMX NNRX NKRU WKRX WKWX XKXX KKNK WKZK KXOX UXZX", - "JZNKNX OMVX OKVV VKVX LKOK TKXK LXPX", - "JZMJLM XJWM PPOS UPTS MVLY XVWY MKWK MLWL PQTQ PRTR MWWW MXWX", - "KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK QKOMNPNSOVQX TXVVWSWPVMTK", - "J[NKNX OKOX VKVX WKWX LKYK LXQX TXYX", - "JYNKNX OKOX LKSKVLWNWOVQSROR SKULVNVOUQSR LXQX", - "K[MKRQ NKSQMX MKWKXOVK NWWW MXWXXTVX", - "KZRKRX SKSX NKMOMKXKXOWK PXUX", - "KZMONLOKPKQLRORX XOWLVKUKTLSOSX MONMOLPLQMRO XOWMVLULTMSO PXUX", - "KZRKRX SKSX QNNOMQMRNTQUTUWTXRXQWOTNQN QNOONQNROTQU TUVTWRWQVOTN PKUK PXUX", - "KZNKVX OKWX WKNX LKQK TKYK LXQX TXYX", - "J[RKRX SKSX LPMONOOSQU TUVSWOXOYP MONROTQUTUVTWRXO PKUK PXUX", - "KZMVNXQXMRMONMOLQKTKVLWMXOXRTXWXXV OUNRNOOMQK TKVMWOWRVU NWPW UWWW", - "KYTKKX SMTX TKUX NTTT IXNX RXWX", - "JYPKLX QKMX NKUKWLWNVPSQ UKVLVNUPSQ OQRQTRUSUUTWQXJX RQTSTUSWQX", - "KXVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUU RKPMOONRNVPX", - "JYPKLX QKMX NKTKVLWNWQVTUVTWQXJX TKULVNVQUTTVSWQX", - "JYPKLX QKMX SORS NKXKWNWK OQRQ JXTXUUSX", - "JXPKLX QKMX SORS NKXKWNWK OQRQ JXOX", - "KYVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUVVS RKPMOONRNVPX RXTVUS SSXS", - "J[PKLX QKMX XKTX YKUX NKSK VK[K OQVQ JXOX RXWX", - "NWTKPX UKQX RKWK NXSX", - "LXUKRUQWPX VKSURWPXOXMWLUMTNUMV SKXK", - "JZPKLX QKMX YKOR RPTX SPUX NKSK VK[K JXOX RXWX", - "KXQKMX RKNX OKTK KXUXVUTX", - "I\\OKKX OMPX PKQV YKPX YKUX ZKVX MKPK YK\\K IXMX SXXX", - "JZPKLX PKTX QKTU XKTX NKQK VKZK JXNX", - "KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RKPMOONRNVPX RXTVUTVQVMTK", - "JYPKLX QKMX NKUKWLXMXOWQTROR UKWMWOVQTR JXOX", - "KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RKPMOONRNVPX RXTVUTVQVMTK OWOVPUQURVRZS[T[UZ RVSZT[", - "JZPKLX QKMX NKUKWLXMXOWQTROR UKWMWOVQTR SRTWUXVXWW SRTSUWVX JXOX", - "KZWLXLYKXNWLUKRKPLOMOOPPUSVT ONPOURVSVVUWSXPXNWMULXMWNW", - "KZTKPX UKQX PKNNOKZKYNYK NXSX", - "J[PKMUMWOXSXUWVUYK QKNUNWOX NKSK WK[K", - "KYOKPX PKQV YKPX MKRK VK[K", - "I[NKMX OKNV TKMX TKSX UKTV ZKSX LKQK XK\\K", - "KZPKTX QKUX YKLX NKSK VK[K JXOX RXWX", - "LYPKRQPX QKSQ YKSQQX NKSK VK[K NXSX", - "LYXKLX YKMX QKONPKYK LXUXVUTX", - "", - "", - "", - "", - "", - "", - "", - "KZMHX\\", - "JZRMLW RMXW", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "LZQOPPPQOQOPQOTOVQVWWXXX TOUQUWWX URRSPTOUOWPXSXTWUU RSPUPWQX", - "JYNKNX OKOX ORPPROTOVPWRWUVWTXRXPWOU TOUPVRVUUWTX LKOK", - "LXVQUQURVRVQUPSOQOOPNRNUOWQXSXUWVV QOPPOROUPWQX", - "L[VKVX WKWX VRUPSOQOOPNRNUOWQXSXUWVU QOPPOROUPWQX TKWK VXYX", - "LXOSVSVRUPSOQOOPNRNUOWQXSXUWVV USUQSO QOPPOROUPWQX", - "LWTKULUMVMVLTKRKPMPX RKQMQX NOSO NXSX", - "LYQOOQOSQUSUUSUQSOQO QOPQPSQU SUTSTQSO TPUOVO PTOUOXPYTYVZ OWPXTXVYV[T\\P\\N[NYPX", - "J[NKNX OKOX ORPPROTOVPWRWX TOUPVRVX LKOK LXQX TXYX", - "NWRKRLSLSKRK RORX SOSX POSO PXUX", - "NWSKSLTLTKSK SOSZR\\ TOTZR\\P\\O[OZPZP[O[ QOTO", - "JZNKNX OKOX WOOU RSVX SSWX LKOK TOYO LXQX TXYX", - "NWRKRX SKSX PKSK PXUX", - "F_JOJX KOKX KRLPNOPORPSRSX POQPRRRX SRTPVOXOZP[R[X XOYPZRZX HOKO HXMX PXUX XX]X", - "J[NONX OOOX ORPPROTOVPWRWX TOUPVRVX LOOO LXQX TXYX", - "LYQOOPNRNUOWQXTXVWWUWRVPTOQO QOPPOROUPWQX TXUWVUVRUPTO", - "JYNON\\ OOO\\ ORPPROTOVPWRWUVWTXRXPWOU TOUPVRVUUWTX LOOO L\\Q\\", - "KYUOU\\ VOV\\ URTPROPONPMRMUNWPXRXTWUU POOPNRNUOWPX S\\X\\", - "KXOOOX POPX PRQPSOUOVPVQUQUPVP MOPO MXRX", - "LYTOUPUQVQVPTOQOOPORQSTTVU OQQRTSVTVWTXQXOWOVPVPWQX", - "LWPKPVRXTXUWUV QKQVRX NOTO", - "J[NONUOWQXSXUWVU OOOUPWQX VOVX WOWX LOOO TOWO VXYX", - "KYNORX OORV VORX LOQO TOXO", - "I[LOOX MOOU ROOX ROUX SOUU XOUX JOOO VOZO", - "KYNOUX OOVX VONX LOQO TOXO LXPX SXXX", - "KYNORX OORV VORXP[N\\M\\L[LZMZM[L[ LOQO TOXO", - "LXUONX VOOX OONQNOVO NXVXVVUX", - "K[QOOPNQMSMUNWPXQXSWUUWRXO QOOQNSNUOWPX QOSOUPWWXX SOTPVWXXYX", - "KXRKPMOOMUK\\ QLPNNTL\\ RKTKVLVNUPRQ TKULUNTPRQ RQTRUTUVTWRXQXOWNT RQSRTTTVRX", - "KYLQNOPORPSSSXR\\ LQNPPPRQSS WOVRSXQ\\", - "KYSOQOOPNQMSMUNWPXRXTWUVVTVRUPRNQLQKRJTJUKVM QOOQNSNVPX RXTVUTUQSO QLRKTKVM", - "LXVPTOQOOPOQPRRS QOPPPQRS RSOTNUNWPXSXUW RSPTOUOWPX", - "LWRKQLQMSNVNVMSNPOOPNRNTOVPWRXSYS[R\\P\\O[ SNQOPPOROTPVRX", - "IYJRKPLONOOPOQMX MONPNQLX OQPPROTOVPVRS\\ TOUPURR\\", - "IYJSKQLPNPOQOVPX MPNQNUOWPXQXSWTVUTVQVNULTKRKQLQNRPURWS QXSVTTUQUNTK", - "NWROPVPWQXSXUWVU SOQVQWRX", - "KYOOLX POMX UOVPWPVOTORQOR ORPSRWTXVWWU ORQSSWTX", - "LXLKNKPLWX NKOLVX RPMX RPNX", - "KZOOK\\ POL\\ NUNWOXQXSWTV VOTVTWUXWXXWYU WOUVUWVX", - "JYNOMX OONUMX VRVOWOVRTUQWNXMX LOOO", - "MXRKQLQMSNVN TNQOPPPRRSUS TNROQPQRRS SSPTOUOWQXSYTZT[S\\Q\\ SSQTPUPWQX", - "KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO QOOQNSNVPX RXTVUTUQSO", - "IZPPMX PPNX TPSX TPTX KQMOXO KQMPXP", - "JXSOQOOPNQMSJ\\ QOOQNSK\\ SOUPVRVTUVTWRXPXNWMU SOUQUTTVRX", - "K[YOQOOPNQMSMUNWPXRXTWUVVTVRUPYP QOOQNSNVPX RXTVUTUQSO", - "KZSPQX SPRX MQOOXO MQOPXP", - "JXKRLPMOOOPPPROUOWPX NOOPORNUNWPXQXSWUUVRVOUOVP", - "KZOPNQMSMUNWPXRXUWWUXRXPWOUOTPSRRUO\\ MUNVPWRWUVWTXR XQWPUPSR RUQXP\\", - "KXMONOPPS[T\\ NOOPR[T\\U\\ VOTRNYL\\", - "I[TKQ\\ UKP\\ JRKPLONOOPOVPWSWUVWT MONPNTOWPXSXUWWTXRYO", - "JZNPPPPONPMQLSLUMWNXPXQWRUSR LUNWPWRU RRRWSXUXWVXTXRWPVOVPWP RUSWUWWV", - "KZVOTVTWUXWXXWYU WOUVUWVX USUQSOQOOPNQMSMUNWPXRXTV QOOQNSNVPX", - "JXOKMR PKNRNVPX NROPQOSOUPVRVTUVTWRXPXNWMUMR SOUQUTTVRX MKPK", - "KXUPUQVQUPSOQOOPNQMSMUNWPXRXTWUV QOOQNSNVPX", - "KZWKTVTWUXWXXWYU XKUVUWVX USUQSOQOOPNQMSMUNWPXRXTV QOOQNSNVPX UKXK", - "KWNURTTSURUPSOQOOPNQMSMUNWPXRXTWUV QOOQNSNVPX", - "MXWKXLXKVKTLSNPYO[N\\ VKULTNQYP[N\\L\\L[M\\ POVO", - "KYVOTVSYR[ WOUVTYR[P\\M\\L[M[N\\ USUQSOQOOPNQMSMUNWPXRXTV QOOQNSNVPX", - "KZPKLX QKMX OQPPROTOVPVRUUUWVX TOUPURTUTWUXWXXWYU NKQK", - "MWSKSLTLTKSK NROPPOROSPSRRURWSX QORPRRQUQWRXTXUWVU", - "MWTKTLULUKTK ORPPQOSOTPTRRYQ[O\\M\\M[N\\ ROSPSRQYP[O\\", - "KXPKLX QKMX VPUQVQVPUOTORQPROR ORPSQWRXTXUWVU ORQSRWSX NKQK", - "NVSKPVPWQXSXTWUU TKQVQWRX QKTK", - "F^GRHPIOKOLPLQJX JOKPKQIX LQMPOOQOSPSQQX QORPRQPX SQTPVOXOZPZRYUYWZX XOYPYRXUXWYX[X\\W]U", - "J[KRLPMOOOPPPQNX NOOPOQMX PQQPSOUOWPWRVUVWWX UOVPVRUUUWVXXXYWZU", - "KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO QOOQNSNVPX RXTVUTUQSO", - "JYKRLPMOOOPPPQM\\ NOOPOQL\\ PQROTOVPWRWTVVUWSXQXOVOT TOVQVTUVSX J\\O\\", - "KYVOR\\ WOS\\ USUQSOQOOPNQMSMUNWPXRXTV QOOQNSNVPX P\\U\\", - "LXMRNPOOQORPRQPX POQPQQOX RQSPUOVOWPWQVQWP", - "LYVPVQWQVPTOQOOPORQSTTVU OQQRTSVTVWTXQXOWNVOVOW", - "NWSKPVPWQXSXTWUU TKQVQWRX POUO", - "IZJRKPLONOOPORNUNWOX MONPNRMUMWOXQXSWTV VOTVTWUXWXXWYU WOUVUWVX", - "JXKRLPMOOOPPPROUOWPX NOOPORNUNWPXQXSWUUVRVOUOVP", - "H\\IRJPKOMONPNRMUMWNX LOMPMRLULWNXOXQWRV TORVRWTX UOSVSWTXUXWWYUZRZOYOZP", - "JZMRNPPOROSPSR QORPRRQUPWNXMXLWLVMVLW XPWQXQXPWOVOTPSRRURWSX QUQWRXTXVWWU", - "IYJRKPLONOOPORNUNWOX MONPNRMUMWOXQXSWTV VOTVSYR[ WOUVTYR[P\\M\\L[M[N\\", - "KYWOWPVQNVMWMX NQOOROUQ OPRPUQVQ NVOVRWUW OVRXUXVV", - "H[RKSLSMTMTLRKOKMLLNLX OKNLMNMX XKYLYMZMZLXKVKTMTX VKUMUX JOWO JXOX RXWX", - "J[UKVLWLWKQKOLNNNX QKPLONOX VOVX WOWX LOWO LXQX TXYX", - "J[WKQKOLNNNX QKPLONOX UKVLVX WKWX LOVO LXQX TXYX", - "F_PKQLQMRMRLPKMKKLJNJX MKLLKNKX YKZL[L[KUKSLRNRX UKTLSNSX ZOZX [O[X HO[O HXMX PXUX XX]X", - "F_PKQLQMRMRLPKMKKLJNJX MKLLKNKX [KUKSLRNRX UKTLSNSX YKZLZX [K[X HOZO HXMX PXUX XX]X", - "NWRORX SOSX POSO PXUX", - "", - "LXVPTOROPPOQNSNUOWQXSXUW ROPQOSOVQX OSSS", - "LYSKQLPMOONRNUOWPXRXTWUVVTWQWNVLUKSK SKQMPOOSOVPX RXTVUTVPVMUK OQVQ", - "KZTKQ\\ UKP\\ QONPMRMUNWQXTXWWXUXRWPTOQO QOOPNRNUOWQX TXVWWUWRVPTO", - "LXUPVRVQUPSOQOOPNRNTOVRX QOOQOTPVRXSYS[R\\P\\", - "", - "", - "", - "I[VKWLXLVKSKQLPMOOLYK[J\\ SKQMPOMYL[J\\H\\H[I\\ ZK[L[KYKWLVNSYR[Q\\ YKXLWNTYS[Q\\O\\O[P\\ LOYO", - "IZVKWLXLXKSKQLPMOOLYK[J\\ SKQMPOMYL[J\\H\\H[I\\ VOTVTWUXWXXWYU WOUVUWVX LOWO", - "IZVKWL XKSKQLPMOOLYK[J\\ SKQMPOMYL[J\\H\\H[I\\ WKTVTWUXWXXWYU XKUVUWVX LOVO", - "F^SKTLTM ULSKPKNLMMLOIYH[G\\ PKNMMOJYI[G\\E\\E[F\\ ZK[L\\L\\KWKUL TMSOPYO[N\\ WKUMTOQYP[N\\L\\L[M\\ ZOXVXWYX[X\\W]U [OYVYWZX IO[O", - "F^SKTLTM ULSKPKNLMMLOIYH[G\\ PKNMMOJYI[G\\E\\E[F\\ ZK[L \\KWKUL TMSOPYO[N\\ WKUMTOQYP[N\\L\\L[M\\ [KXVXWYX[X\\W]U \\KYVYWZX IOZO", - "MWNROPPOROSPSRRURWSX QORPRRQUQWRXTXUWVU", - "", - "OU", - "LX", - "LYQKOLNONTOWQXTXVWWTWOVLTKQK QKPLOOOTPWQX TXUWVTVOULTK", - "LYPNSKSX RLRX OXVX", - "LYOMONNNNMOLQKTKVLWNVPTQQROSNUNX TKULVNUPTQ NWOVPVSWVWWV PVSXVXWVWU", - "LYOMONNNNMOLQKTKVLWNVPTQ TKULVNUPTQ RQTQVRWTWUVWTXQXOWNVNUOUOV TQURVTVUUWTX", - "LYSMSX TKTX TKMTXT QXVX", - "LYOKNQ OKVK OLSLVK NQOPQOTOVPWRWUVWTXQXOWNVNUOUOV TOUPVRVUUWTX", - "LYVMVNWNWMVLTKRKPLOMNPNUOWQXTXVWWUWSVQTPQPNR RKPMOPOUPWQX TXUWVUVSUQTP", - "LYNKNO VMRTPX WKTQQX NMPKRKUM NMPLRLUMVM", - "LYQKOLNNOPQQTQVPWNVLTKQK QKPLONPPQQ TQUPVNULTK QQORNTNUOWQXTXVWWUWTVRTQ QQPROTOUPWQX TXUWVUVTURTQ", - "LYOVOUNUNVOWQXSXUWVVWSWNVLTKQKOLNNNPORQSTSWQ SXUVVSVNULTK QKPLONOPPRQS", - "NVRVQWRXSWRV", - "NVSWRXQWRVSWSYQ[", - "NVROQPRQSPRO RVQWRXSWRV", - "NVROQPRQSPRO SWRXQWRVSWSYQ[", - "NVRKQLRSSLRK RLRO RVQWRXSWRV", - "LYNNONOONONNOLQKTKVLWNWOVQSRRSRTST TKVMVPUQSR RWRXSXSWRW", - "OVRKRP SKRP", - "LXOKOP PKOP UKUP VKUP", - "MWQKPLPNQOSOTNTLSKQK", - "MWRJRP OKUO UKOO", - "KZXHM\\", - "MWUHSJQMPPPTQWSZU\\ SJRLQPQTRXSZ", - "MWOHQJSMTPTTSWQZO\\ QJRLSPSTRXQZ", - "MWPHP\\ QHQ\\ PHUH P\\U\\", - "MWSHS\\ THT\\ OHTH O\\T\\", - "LWSHRIQKQMRORPPRRTRUQWQYR[S\\ RIQM QKRO RUQY QWR[", - "MXQHRISKSMRORPTRRTRUSWSYR[Q\\ RISM SKRO RUSY SWR[", - "MWTHPRT\\", - "MWPHTRP\\", - "OURHR\\", - "MWPHP\\ THT\\", - "I[LRXR", - "I[RLRX LRXR", - "JZRMRX MRWR MXWX", - "JZRMRX MMWM MRWR", - "JZMMWW WMMW", - "NVRQQRRSSRRQ", - "I[RLQMRNSMRL LRXR RVQWRXSWRV", - "I[LPXP LTXT", - "I[WLMX LPXP LTXT", - "I[LNXN LRXR LVXV", - "JZWLMRWX", - "JZMLWRMX", - "JZWKMOWS MTWT MXWX", - "JZMKWOMS MTWT MXWX", - "H[YUWUUTTSRPQOONNNLOKQKRLTNUOUQTRSTPUOWNYN", - "JZLTLRMPOPUSWSXR LRMQOQUTWTXRXP", - "JZMSRPWS MSRQWS", - "NVSKPO SKTLPO", - "NVQKTO QKPLTO", - "LXNKOMQNSNUMVK NKONQOSOUNVK", - "NVSLRMQLRKSLSNQP", - "NVSKQMQORPSORNQO", - "NVQLRMSLRKQLQNSP", - "NVQKSMSORPQORNSO", - "", - "JZWMQMONNOMQMSNUOVQWWW", - "JZMMMSNUOVQWSWUVVUWSWM", - "JZMMSMUNVOWQWSVUUVSWMW", - "JZMWMQNOONQMSMUNVOWQWW", - "JZWMQMONNOMQMSNUOVQWWW MRUR", - "I[TOUPXRUTTU UPWRUT LRWR", - "MWRMRX OPPORLTOUP PORMTO", - "I[POOPLROTPU OPMROT MRXR", - "MWRLRW OTPURXTUUT PURWTU", - "KYVSUPSOQOOPNQMSMUNWPXRXTWUVVTWQWNVLTKQKPLQLRK QOOQNSNVPX RXTVUTVQVNULTK", - "JZLKRX MKRV XKRX LKXK NLWL", - "G[IOLORW KORX [FRX", - "I[XIXJYJYIXHVHTJSLROQUPYO[ UITKSORUQXPZN\\L\\K[KZLZL[", - "I[XIXJYJYIXHVHTJSLROQUPYO[ UITKSORUQXPZN\\L\\K[KZLZL[ QNOONQNSOUQVSVUUVSVQUOSNQN", - "H\\ZRYTWUVUTTSSQPPONNMNKOJQJRKTMUNUPTQSSPTOVNWNYOZQZR", - "JZXKLX OKPLPNOOMOLNLLMKOKSLVLXK UTTUTWUXWXXWXUWTUT", - "J[YPXPXQYQYPXOWOVPUTTVSWQXOXMWLVLTMSORRPSNSLRKPKOLONPQUWWXXXYW OXMVMTOR ONPPVWWX", - "J[UPSOQOPQPRQTSTUS UOUSVTXTYRYQXNVLSKRKOLMNLQLRMUOWRXSXVW", - "KZQHQ\\ THT\\ WLVLVMWMWLUKPKNLNNOPVSWT NNOOVRWTWVVWTXQXOWNVNUOUOVNV", - "KYPKP[ TKT[ MQWQ MUWU", - "LXTLSLSMTMTLSKQKPLPNQPTRUS PNQOTQUSUUSW QPOROTPVSXTY OTPUSWTYT[S\\Q\\P[PZQZQ[P[", - "LXRKQLRMSLRK RMRQ RQQSRVSSRQ RVR\\ POONNOOPPOTOUNVOUPTO", - "LXRMSLRKQLRMRQQRSURV RQSRQURVRZQ[R\\S[RZ POONNOOPPOTOUNVOUPTO PXOWNXOYPXTXUWVXUYTX", - "LYVKVX NKVK QQVQ NXVX", - "", - "H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RQQRRSSRRQ", - "LYQKPLPMQN TKULUMTN RNPOOQORPTRUSUUTVRVQUOSNRN RURY SUSY OWVW", - "LYRKPLONOOPQRRSRUQVOVNULSKRK RRRX SRSX OUVU", - "H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RKRY KRYR", - "JYRRPQOQMRLTLUMWOXPXRWSUSTRR WMRR RMWMWR RMVNWR", - "JZLLMKOKQLRNRPQRPSNT OKPLQNQQPS VKUX WKTX NTXT", - "JYNKNU OKNR NROPQOSOUPVQVTTVTXUYVYWX SOUQUTTV LKOK", - "LYONRKRQ VNSKSQ RQPROTOUPWRXSXUWVUVTURSQ RTRUSUSTRT", - "JZRKRY MKMPNRPSTSVRWPWK LMMKNM QMRKSM VMWKXM OVUV", - "JYNKNX OKOX LKSKVLWNWOVQSROR SKULVNVOUQSR LXVXVUUX", - "LYWKTKQLONNQNSOVQXTYWY WKTLRNQQQSRVTXWY", - "JZRRPQOQMRLTLUMWOXPXRWSUSTRR SLQQ WMRR XQSS", - "KYPMTW TMPW MPWT WPMT", - "J[OUMULVLXMYOYPXPVNTMRMONMOLQKTKVLWMXOXRWTUVUXVYXYYXYVXUVU NMPLULWM", - "J[OOMOLNLLMKOKPLPNNPMRMUNWOXQYTYVXWWXUXRWPUNULVKXKYLYNXOVO NWPXUXWW", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "F^KHK\\ LHL\\ XHX\\ YHY\\ HH\\H H\\O\\ U\\\\\\", - "H]KHRQJ\\ JHQQ JHYHZMXH K[X[ J\\Y\\ZWX\\", - "KYVBTDRGPKOPOTPYR]T`Vb TDRHQKPPPTQYR\\T`", - "KYNBPDRGTKUPUTTYR]P`Nb PDRHSKTPTTSYR\\P`", - "KYOBOb PBPb OBVB ObVb", - "KYTBTb UBUb NBUB NbUb", - "JYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb RDQGQKRN RVQYQ]R`", - "KZPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb RDSGSKRN RVSYS]R`", - "KYU@RCPFOIOLPOSVTYT\\S_Ra RCQEPHPKQNTUUXU[T^RaOd", - "KYO@RCTFUIULTOQVPYP\\Q_Ra RCSETHTKSNPUOXO[P^RaUd", - "AXCRGRR` GSRa FSRb X:Rb", - "F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` VDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "H\\RFK[ RFY[ RIX[ MUVU I[O[ U[[[", - "G]LFL[ MFM[ IFUFXGYHZJZLYNXOUP UFWGXHYJYLXNWOUP MPUPXQYRZTZWYYXZU[I[ UPWQXRYTYWXYWZU[", - "G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV QFOGMILKKNKSLVMXOZQ[", - "G]LFL[ MFM[ IFSFVGXIYKZNZSYVXXVZS[I[ SFUGWIXKYNYSXVWXUZS[", - "G\\LFL[ MFM[ SLST IFYFYLXF MPSP I[Y[YUX[", - "G[LFL[ MFM[ SLST IFYFYLXF MPSP I[P[", - "G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX QFOGMILKKNKSLVMXOZQ[ XSX[ YSY[ US\\S", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F LPXP H[O[ U[\\[", - "MXRFR[ SFS[ OFVF O[V[", - "KZUFUWTZR[P[NZMXMVNUOVNW TFTWSZR[ QFXF", - "F\\KFK[ LFL[ YFLS QOY[ POX[ HFOF UF[F H[O[ U[[[", - "I[NFN[ OFO[ KFRF K[Z[ZUY[", - "F_KFK[ LFRX KFR[ YFR[ YFY[ ZFZ[ HFLF YF]F H[N[ V[][", - "G^LFL[ MFYY MHY[ YFY[ IFMF VF\\F I[O[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF QFOGMILKKOKRLVMXOZQ[ S[UZWXXVYRYOXKWIUGSF", - "G]LFL[ MFM[ IFUFXGYHZJZMYOXPUQMQ UFWGXHYJYMXOWPUQ I[P[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF QFOGMILKKOKRLVMXOZQ[ S[UZWXXVYRYOXKWIUGSF NYNXOVQURUTVUXV_W`Y`Z^Z] UXV\\W^X_Y_Z^", - "G]LFL[ MFM[ IFUFXGYHZJZLYNXOUPMP UFWGXHYJYLXNWOUP I[P[ RPTQURXYYZZZ[Y TQUSWZX[Z[[Y[X", - "H\\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT KKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX", - "I\\RFR[ SFS[ LFKLKFZFZLYF O[V[", - "F^KFKULXNZQ[S[VZXXYUYF LFLUMXOZQ[ HFOF VF\\F", - "H\\KFR[ LFRX YFR[ IFOF UF[F", - "F^JFN[ KFNV RFN[ RFV[ SFVV ZFV[ GFNF WF]F", - "H\\KFX[ LFY[ YFK[ IFOF UF[F I[O[ U[[[", - "H]KFRQR[ LFSQS[ ZFSQ IFOF VF\\F O[V[", - "H\\XFK[ YFL[ LFKLKFYF K[Y[YUX[", - "H\\RFK[ RFY[ RIX[ MUVU I[O[ U[[[", - "G]LFL[ MFM[ IFUFXGYHZJZLYNXOUP UFWGXHYJYLXNWOUP MPUPXQYRZTZWYYXZU[I[ UPWQXRYTYWXYWZU[", - "I[NFN[ OFO[ KFZFZLYF K[R[", - "H\\RFJ[ RFZ[ RIY[ KZYZ J[Z[", - "G\\LFL[ MFM[ SLST IFYFYLXF MPSP I[Y[YUX[", - "H\\XFK[ YFL[ LFKLKFYF K[Y[YUX[", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F LPXP H[O[ U[\\[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF QFOGMILKKOKRLVMXOZQ[ S[UZWXXVYRYOXKWIUGSF OMOT UMUT OPUP OQUQ", - "MXRFR[ SFS[ OFVF O[V[", - "F\\KFK[ LFL[ YFLS QOY[ POX[ HFOF UF[F H[O[ U[[[", - "H\\RFK[ RFY[ RIX[ I[O[ U[[[", - "F_KFK[ LFRX KFR[ YFR[ YFY[ ZFZ[ HFLF YF]F H[N[ V[][", - "G^LFL[ MFYY MHY[ YFY[ IFMF VF\\F I[O[", - "G]KEJJ ZEYJ ONNS VNUS KWJ\\ ZWY\\ KGYG KHYH OPUP OQUQ KYYY KZYZ", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF QFOGMILKKOKRLVMXOZQ[ S[UZWXXVYRYOXKWIUGSF", - "F^KFK[ LFL[ XFX[ YFY[ HF\\F H[O[ U[\\[", - "G]LFL[ MFM[ IFUFXGYHZJZMYOXPUQMQ UFWGXHYJYMXOWPUQ I[P[", - "H]KFRPJ[ JFQP JFYFZLXF KZXZ J[Y[ZUX[", - "I\\RFR[ SFS[ LFKLKFZFZLYF O[V[", - "I\\KKKILGMFOFPGQIRMR[ KIMGOGQI ZKZIYGXFVFUGTISMS[ ZIXGVGTI O[V[", - "H]RFR[ SFS[ PKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK PKNLMMLOLRMTNUPV UVWUXTYRYOXMWLUK OFVF O[V[", - "H\\KFX[ LFY[ YFK[ IFOF UF[F I[O[ U[[[", - "G^RFR[ SFS[ IMJLLMMQNSOTQU JLKMLQMSNTQUTUWTXSYQZM[L TUVTWSXQYM[L\\M OFVF O[V[", - "G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX MWLTKPKLLINGPF TFVGXIYLYPXTWW KZNZ VZYZ", - "H\\UFH[ UFV[ THU[ LUUU F[L[ R[X[", - "F^OFI[ PFJ[ LFWFZG[I[KZNYOVP WFYGZIZKYNXOVP MPVPXQYSYUXXVZR[F[ VPWQXSXUWXUZR[", - "H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV TFRGPINLMOLSLVMYNZP[", - "F]OFI[ PFJ[ LFUFXGYHZKZOYSWWUYSZO[F[ UFWGXHYKYOXSVWTYRZO[", - "F]OFI[ PFJ[ TLRT LF[FZLZF MPSP F[U[WVT[", - "F\\OFI[ PFJ[ TLRT LF[FZLZF MPSP F[M[", - "H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT TFRGPINLMOLSLVMYNZP[ R[TZVXXT UT\\T", - "E_NFH[ OFI[ [FU[ \\FV[ KFRF XF_F LPXP E[L[ R[Y[", - "LYUFO[ VFP[ RFYF L[S[", - "I[XFSWRYQZO[M[KZJXJVKULVKW WFRWQYO[ TF[F", - "F]OFI[ PFJ[ ]FLS SOW[ ROV[ LFSF YF_F F[M[ S[Y[", - "H\\QFK[ RFL[ NFUF H[W[YUV[", - "E`NFH[ NFO[ OFPY \\FO[ \\FV[ ]FW[ KFOF \\F`F E[K[ S[Z[", - "F_OFI[ OFVX OIV[ \\FV[ LFOF YF_F F[L[", - "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF SFQGOIMLLOKSKVLYN[ Q[SZUXWUXRYNYKXHVF", - "F]OFI[ PFJ[ LFXF[G\\I\\K[NYPUQMQ XFZG[I[KZNXPUQ F[M[", - "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF SFQGOIMLLOKSKVLYN[ Q[SZUXWUXRYNYKXHVF LYLXMVOUPURVSXS_T`V`W^W] SXT^U_V_W^", - "F^OFI[ PFJ[ LFWFZG[I[KZNYOVPMP WFYGZIZKYNXOVP RPTQURVZW[Y[ZYZX URWYXZYZZY F[M[", - "G^ZH[H\\F[L[JZHYGVFRFOGMIMKNMONVRXT MKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY", - "H]UFO[ VFP[ OFLLNF]F\\L\\F L[S[", - "F_NFKQJUJXKZN[R[UZWXXU\\F OFLQKUKXLZN[ KFRF YF_F", - "H\\NFO[ OFPY \\FO[ LFRF XF^F", - "E_MFK[ NFLY UFK[ UFS[ VFTY ]FS[ JFQF ZF`F", - "G]NFU[ OFV[ \\FH[ LFRF XF^F F[L[ R[X[", - "H]NFRPO[ OFSPP[ ]FSP LFRF YF_F L[S[", - "G][FH[ \\FI[ OFLLNF\\F H[V[XUU[", - "H\\KILKXWYYY[ LLXX KIKKLMXYY[ PPLTKVKXLZK[ KVMZ LTLVMXMZK[ SSXN VIVLWNYNYLWKVI VIWLYN", - "H\\QIK[ SIY[ RIX[ MUVU I[O[ U[[[ QBOCNENGOIQJSJUIVGVEUCSBQB", - "", - "", - "", - "", - "", - "G]IB[b", - "F^RJIZ RJ[Z", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "I]NONPMPMONNPMTMVNWOXQXXYZZ[ WOWXXZZ[[[ WQVRPSMTLVLXMZP[S[UZWX PSNTMVMXNZP[", - "G\\LFL[ MFM[ MPONQMSMVNXPYSYUXXVZS[Q[OZMX SMUNWPXSXUWXUZS[ IFMF", - "H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX QMONMPLSLUMXOZQ[", - "H]WFW[ XFX[ WPUNSMQMNNLPKSKULXNZQ[S[UZWX QMONMPLSLUMXOZQ[ TFXF W[[[", - "H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX WSWPVN QMONMPLSLUMXOZQ[", - "KXUGTHUIVHVGUFSFQGPIP[ SFRGQIQ[ MMUM M[T[", - "I\\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM ONNPNTOV UVVTVPUN VOWNYMYNWN NUMVLXLYM[P\\U\\X]Y^ LYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[", - "G]LFL[ MFM[ MPONRMTMWNXPX[ TMVNWPW[ IFMF I[P[ T[[[", - "MXRFQGRHSGRF RMR[ SMS[ OMSM O[V[", - "MXSFRGSHTGSF TMT_SaQbObNaN`O_P`Oa SMS_RaQb PMTM", - "G\\LFL[ MFM[ WMMW RSX[ QSW[ IFMF TMZM I[P[ T[Z[", - "MXRFR[ SFS[ OFSF O[V[", - "BcGMG[ HMH[ HPJNMMOMRNSPS[ OMQNRPR[ SPUNXMZM]N^P^[ ZM\\N]P][ DMHM D[K[ O[V[ Z[a[", - "G]LML[ MMM[ MPONRMTMWNXPX[ TMVNWPW[ IMMM I[P[ T[[[", - "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM QMONMPLSLUMXOZQ[ S[UZWXXUXSWPUNSM", - "G\\LMLb MMMb MPONQMSMVNXPYSYUXXVZS[Q[OZMX SMUNWPXSXUWXUZS[ IMMM IbPb", - "H\\WMWb XMXb WPUNSMQMNNLPKSKULXNZQ[S[UZWX QMONMPLSLUMXOZQ[ Tb[b", - "IZNMN[ OMO[ OSPPRNTMWMXNXOWPVOWN KMOM K[R[", - "J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW MPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY", - "KZPFPWQZS[U[WZXX QFQWRZS[ MMUM", - "G]LMLXMZP[R[UZWX MMMXNZP[ WMW[ XMX[ IMMM TMXM W[[[", - "I[LMR[ MMRY XMR[ JMPM TMZM", - "F^JMN[ KMNX RMN[ RMV[ SMVX ZMV[ GMNM WM]M", - "H\\LMW[ MMX[ XML[ JMPM TMZM J[P[ T[Z[", - "H[LMR[ MMRY XMR[P_NaLbKbJaK`La JMPM TMZM", - "I[WML[ XMM[ MMLQLMXM L[X[XWW[", - "G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM QMONMPLRKUKXLZN[ QMSMUNVPXXYZZ[ SMTNUPWXXZZ[[[", - "G\\TFQGOIMMLPKTJZIb TFRGPINMMPLTKZJb TFVFXGYHYKXMWNTOPO VFXHXKWMVNTO POTPVRWTWWVYUZR[P[NZMYLV POSPURVTVWUYTZR[", - "H\\IPKNMMOMQNROSRSVRZOb JOLNPNRO ZMYPXRSYP^Nb YMXPWRSY", - "I\\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RMPNNQMTMXNZ R[TZVWWTWPVNTKSISGTFVFYH", - "I[XPVNTMPMNNNPPRSS PMONOPQRSS SSNTLVLXMZP[S[UZWX SSOTMVMXNZP[", - "I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa ULQONRMUMWNYP[", - "G]HQIOKMNMONOPNTL[ MMNNNPMTK[ NTPPRNTMVMXNYOYRXWUb VMXOXRWWTb", - "F]GQHOJMMMNNNPMUMXNZO[ LMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT SZUWVUWRXMXIWGVF", - "LXRMPTOXOZP[S[UYVW SMQTPXPZQ[", - "H\\NMJ[ OMK[ XMYNZNYMWMUNQROSMS OSQTSZT[ OSPTRZS[U[WZYW", - "H\\KFMFOGPHQJWXXZY[ MFOHPJVXWZY[Z[ RMJ[ RMK[", - "F]MMGb NMHb MPLVLYN[P[RZTXVU XMUXUZV[Y[[Y\\W YMVXVZW[", - "H\\NML[ OMNSMXL[ YMXQVU ZMYPXRVUTWQYOZL[ KMOM", - "IZTFRGQHQIRJUKXK UKQLOMNONQPSSTVT UKRLPMOOOQQSST STOUMVLXLZN\\S^T_TaRbPb STPUNVMXMZO\\S^", - "I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RMPNNQMTMXNZ R[TZVWWTWPVN", - "G]PNL[ PNM[ VNV[ VNW[ IPKNNM[M IPKONN[N", - "H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb R[TZVWWTWPVN RMPNNQMTIb", - "H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM QMONMQLTLXMZ Q[SZUWVTVPUN UN[N", - "H\\SNP[ SNQ[ JPLNOMZM JPLOONZN", - "H\\IQJOLMOMPNPPNVNYP[ NMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR XUYO", - "G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb JWLYNZQZTYWWYU ZOXNVNTPRSPYNb", - "I[KMMMONPPU_VaWb MMNNOPT_UaWbYb ZMYOWRM]K`Jb", - "F]UFOb VFNb GQHOJMMMNNNPMUMXOZRZTYWVYS LMMNMPLULXMZO[R[TZVXXUYS[M", - "F]JQLOONNMLNJQITIWJZK[M[OZQWRT IWJYKZMZOYQW QTQWRZS[U[WZYWZTZQYNXMWNYOZQ QWRYSZUZWYYW", - "H]XMVTUXUZV[Y[[Y\\W YMWTVXVZW[ VTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT QMONMQLTLXMZ", - "H[PFLSLVMYNZ QFMS MSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS VNWPWTVWTZR[ MFQF", - "I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RMPNNQMTMXNZ", - "H]ZFVTUXUZV[Y[[Y\\W [FWTVXVZW[ VTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT QMONMQLTLXMZ WF[F", - "I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RMPNNQMTMXNZ", - "KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na XFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja OMYM", - "H\\YMU[T^RaObLbJaI`I_J^K_J` XMT[S^QaOb VTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT QMONMQLTLXMZ", - "H]PFJ[ QFK[ MTOPQNSMUMWNXOXQVWVZW[ UMWOWQUWUZV[Y[[Y\\W MFQF", - "LYUFTGUHVGUF MQNOPMSMTNTQRWRZS[ RMSNSQQWQZR[U[WYXW", - "LYVFUGVHWGVF NQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka SMTNTQQ[P^O`Mb", - "H\\PFJ[ QFK[ XNWOXPYOYNXMWMUNQROSMS OSQTSZT[ OSPTRZS[U[WZYW MFQF", - "MYUFQTPXPZQ[T[VYWW VFRTQXQZR[ RFVF", - "AbBQCOEMHMINIPHTF[ GMHNHPGTE[ HTJPLNNMPMRNSOSQP[ PMRORQO[ RTTPVNXMZM\\N]O]Q[W[Z\\[ ZM\\O\\QZWZZ[[^[`YaW", - "F]GQHOJMMMNNNPMTK[ LMMNMPLTJ[ MTOPQNSMUMWNXOXQVWVZW[ UMWOWQUWUZV[Y[[Y\\W", - "I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RMPNNQMTMXNZ R[TZVWWTWPVN", - "G\\HQIOKMNMONOPNTJb MMNNNPMTIb NTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT WNXPXTWWUZS[ FbMb", - "H\\XMRb YMSb VTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT QMONMQLTLXMZ ObVb", - "IZJQKOMMPMQNQPPTN[ OMPNPPOTM[ PTRPTNVMXMYNYOXPWOXN", - "J[XOXPYPYOXNUMRMONNONQORVVWW NPOQVUWVWYVZS[P[MZLYLXMXMY", - "KYTFPTOXOZP[S[UYVW UFQTPXPZQ[ NMWM", - "F]GQHOJMMMNNNQLWLYN[ LMMNMQKWKYLZN[P[RZTXVT XMVTUXUZV[Y[[Y\\W YMWTVXVZW[", - "H\\IQJOLMOMPNPQNWNYP[ NMONOQMWMYNZP[Q[TZVXXUYQYMXMYO", - "C`DQEOGMJMKNKQIWIYK[ IMJNJQHWHYIZK[M[OZQXRV TMRVRYSZU[W[YZ[X\\V]R]M\\M]O UMSVSYU[", - "H\\KQMNOMRMSOSR QMRORRQVPXNZL[K[JZJYKXLYKZ QVQYR[U[WZYW YNXOYPZOZNYMXMVNTPSRRVRYS[", - "G\\HQIOKMNMONOQMWMYO[ MMNNNQLWLYMZO[Q[SZUXWT ZMV[U^SaPbMbKaJ`J_K^L_K` YMU[T^RaPb", - "H\\YMXOVQNWLYK[ LQMOOMRMVO MOONRNVOXO LYNYRZUZWY NYR[U[WYXW", - "G^VGUHVIWHWGUFRFOGMILLL[ RFPGNIMLM[ \\G[H\\I]H]G\\FZFXGWIW[ ZFYGXIX[ IM[M I[P[ T[[[", - "G]WGVHWIXHWGUFRFOGMILLL[ RFPGNIMLM[ WMW[ XMX[ IMXM I[P[ T[[[", - "G]VGUHVIWHWGUF XFRFOGMILLL[ RFPGNIMLM[ WHW[ XFX[ IMWM I[P[ T[[[", - "BcRGQHRISHRGPFMFJGHIGLG[ MFKGIIHLH[ ]G\\H]I^H]G[FXFUGSIRLR[ XFVGTISLS[ ]M][ ^M^[ DM^M D[K[ O[V[ Z[a[", - "BcRGQHRISHRGPFMFJGHIGLG[ MFKGIIHLH[ \\G[H\\I]H]G[F ^FXFUGSIRLR[ XFVGTISLS[ ]H][ ^F^[ DM]M D[K[ O[V[ Z[a[", - "MXRMR[ SMS[ OMSM O[V[", - "", - "IZWNUMRMONMPLSLVMYNZQ[T[VZ RMPNNPMSMVNYOZQ[ MTUT", - "I\\TFQGOJNLMOLTLXMZO[Q[TZVWWUXRYMYIXGVFTF TFRGPJOLNOMTMXNZO[ Q[SZUWVUWRXMXIWGVF NPWP", - "G]UFOb VFNb QMMNKPJSJVKXMZP[S[WZYXZUZRYPWNTMQM QMNNLPKSKVLXNZP[ S[VZXXYUYRXPVNTM", - "I[TMVNXPXOWNTMQMNNMOLQLSMUOWSZ QMONNOMQMSNUSZT\\T^S_Q_", - "", - "", - "G]LMKNJPJRKUOYP[ JRKTOXP[P]O`MbLbKaJ_J\\KXMTOQRNTMVMYNZPZTYXWZU[T[SZSXTWUXTY VMXNYPYTXXWZ", - "E_YGXHYIZHYGWFTFQGOINKMNLRJ[I_Ha TFRGPIOKNNLWK[J^I`HaFbDbCaC`D_E`Da _G^H_I`H`G_F]F[GZHYJXMU[T_Sa ]F[HZJYNWWV[U^T`SaQbObNaN`O_P`Oa IM^M", - "F^[GZH[I\\H[GXFUFRGPIOKNNMRK[J_Ia UFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea YMWTVXVZW[Z[\\Y]W ZMXTWXWZX[ JMZM", - "F^YGXHYIZHZGXF \\FUFRGPIOKNNMRK[J_Ia UFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea [FWTVXVZW[Z[\\Y]W \\FXTWXWZX[ JMYM", - "@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca OFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a `G_H`IaH`G]FZFWGUITKSNRRP[O_Na ZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja ^M\\T[X[Z\\[_[aYbW _M]T\\X\\Z][ DM_M", - "@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca OFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a ^G]H^I_H_G]F aFZFWGUITKSNRRP[O_Na ZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja `F\\T[X[Z\\[_[aYbW aF]T\\X\\Z][ DM^M", - "LYMQNOPMSMTNTQRWRZS[ RMSNSQQWQZR[U[WYXW", - "", - "NV", - "JZ", - "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF QFOGNHMJLOLRMWNYOZQ[ S[UZVYWWXRXOWJVHUGSF", - "H\\NJPISFS[ RGR[ N[W[", - "H\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ TFVGWHXJXLWNTPPR KYLXNXSZVZXYYX NXS[W[XZYXYV", - "H\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO TFVGWIWLVNTO TOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW WQXTXWWYVZT[", - "H\\THT[ UFU[ UFJUZU Q[X[", - "H\\MFKP KPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW SMUNWPXSXUWXUZS[ MFWF MGRGWF", - "H\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RFPGNIMKLOLUMXOZQ[ S[UZWXXUXTWQUOSN", - "H\\KFKL KJLHNFPFUIWIXHYF LHNGPGUI YFYIXLTQSSRVR[ XLSQRSQVQ[", - "H\\PFMGLILLMNPOTOWNXLXIWGTFPF PFNGMIMLNNPO TOVNWLWIVGTF POMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO PONPMQLSLWMYNZP[ T[VZWYXWXSWQVPTO", - "H\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX QSORMPLMLLMIOGQF SFUGWIXLXRWVVXTZR[", - "MWRYQZR[SZRY", - "MWR[QZRYSZS\\R^Q_", - "MWRMQNROSNRM RYQZR[SZRY", - "MWRMQNROSNRM R[QZRYSZS\\R^Q_", - "MWRFQHRTSHRF RHRN RYQZR[SZRY", - "I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT SFUGVHWJWLVNTP RYQZR[SZRY", - "NVRFQM SFQM", - "JZNFMM OFMM VFUM WFUM", - "KYQFOGNINKOMQNSNUMVKVIUGSFQF", - "JZRFRR MIWO WIMO", - "G][BIb", - "KYVBTDRGPKOPOTPYR]T`Vb TDRHQKPPPTQYR\\T`", - "KYNBPDRGTKUPUTTYR]P`Nb PDRHSKTPTTSYR\\P`", - "KYOBOb PBPb OBVB ObVb", - "KYTBTb UBUb NBUB NbUb", - "JYTBQEPHPJQMSOSPORSTSUQWPZP\\Q_Tb RDQGQKRN RVQYQ]R`", - "KZPBSETHTJSMQOQPURQTQUSWTZT\\S_Pb RDSGSKRN RVSYS]R`", - "KYUBNRUb", - "KYOBVROb", - "NVRBRb", - "KYOBOb UBUb", - "E_IR[R", - "E_RIR[ IR[R", - "F^RJR[ JRZR J[Z[", - "F^RJR[ JJZJ JRZR", - "G]KKYY YKKY", - "MWQQQSSSSQQQ RQRS QRSR", - "E_RIQJRKSJRI IR[R RYQZR[SZRY", - "E_IO[O IU[U", - "E_YIK[ IO[O IU[U", - "E_IM[M IR[R IW[W", - "F^ZIJRZ[", - "F^JIZRJ[", - "F^ZFJMZT JVZV J[Z[", - "F^JFZMJT JVZV J[Z[", - "F_[WYWWVUTRPQOONMNKOJQJSKUMVOVQURTUPWNYM[M", - "F^IUISJPLONOPPTSVTXTZS[Q ISJQLPNPPQTTVUXUZT[Q[O", - "G]JTROZT JTRPZT", - "LXTFOL TFUGOL", - "LXPFUL PFOGUL", - "H\\KFLHNJQKSKVJXHYF KFLINKQLSLVKXIYF", - "MWRHQGRFSGSIRKQL", - "MWSFRGQIQKRLSKRJ", - "MWRHSGRFQGQIRKSL", - "MWQFRGSISKRLQKRJ", - "E[HMLMRY KMR[ [BR[", - "F^ZJSJOKMLKNJQJSKVMXOYSZZZ", - "F^JJJQKULWNYQZSZVYXWYUZQZJ", - "F^JJQJUKWLYNZQZSYVWXUYQZJZ", - "F^JZJSKOLMNKQJSJVKXMYOZSZZ", - "F^ZJSJOKMLKNJQJSKVMXOYSZZZ JRVR", - "E_XP[RXT UMZRUW IRZR", - "JZPLRITL MORJWO RJR[", - "E_LPIRLT OMJROW JR[R", - "JZPXR[TX MURZWU RIRZ", - "I\\XRWOVNTMRMONMQLTLWMYNZP[R[UZWXXUYPYKXHWGUFRFPGOHOIPIPH RMPNNQMTMXNZ R[TZVXWUXPXKWHUF", - "H\\JFR[ KFRY ZFR[ JFZF KGYG", - "AbDMIMRY HNR[ b:R[", - "F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` VDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia", - "F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` VDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK", - "F_\\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\\Q\\S", - "F^[FI[ NFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F WTUUTWTYV[X[ZZ[X[VYTWT", - "F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y M[KZJXJUKSMQ MKNMVXXZZ[", - "E`WNVLTKQKOLNMMPMSNUPVSVUUVS QKOMNPNSOUPV WKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX XKWSWUXV", - "H\\PBP_ TBT_ XIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT KKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX", - "G]OFOb UFUb JQZQ JWZW", - "JZUITJUKVJVIUGSFQFOGNINKOMQOVR OMTPVRWTWVVXTZ PNNPMRMTNVPXU[ NVSYU[V]V_UaSbQbOaN_N^O]P^O_", - "JZRFQHRJSHRF RFRb RQQTRbSTRQ LMNNPMNLLM LMXM TMVNXMVLTM", - "JZRFQHRJSHRF RFRT RPQRSVRXQVSRRP RTRb R^Q`RbS`R^ LMNNPMNLLM LMXM TMVNXMVLTM L[N\\P[NZL[ L[X[ T[V\\X[VZT[", - "I\\XFX[ KFXF PPXP K[X[", - "", - "E`QFNGKIILHOHRIUKXNZQ[T[WZZX\\U]R]O\\LZIWGTFQF ROQPQQRRSRTQTPSORO RPRQSQSPRP", - "J[PFNGOIQJ PFOGOI UFWGVITJ UFVGVI QJOKNLMNMQNSOTQUTUVTWSXQXNWLVKTJQJ RUR[ SUS[ NXWX", - "I\\RFOGMILLLMMPORRSSSVRXPYMYLXIVGSFRF RSR[ SSS[ NWWW", - "D`PFMGJIHLGOGSHVJYM[P\\T\\W[ZY\\V]S]O\\LZIWGTFPF RFR\\ GQ]Q", - "G`PMMNKPJSJTKWMYPZQZTYVWWTWSVPTNQMPM ]GWG[HUN ]G]M\\IVO \\HVN", - "F\\IIJGLFOFQGRIRLQOPQNSKU OFPGQIQMPPNS VFT[ WFS[ KUYU", - "I\\MFMU NFMQ MQNOONQMTMWNXPXRWTUV TMVNWPWRTXTZU[W[YY KFNF", - "I\\RNOOMQLTLUMXOZR[S[VZXXYUYTXQVOSNRN RHNJRFRN SHWJSFSN RSQTQURVSVTUTTSSRS RTRUSUSTRT", - "G^QHRFR[ THSFS[ JHKFKMLPNRQSRS MHLFLNMQ [HZFZMYPWRTSSS XHYFYNXQ NWWW", - "G]LFL[ MFM[ IFUFXGYHZJZMYOXPUQMQ UFWGXHYJYMXOWPUQ I[Y[YVX[", - "H[YGUGQHNJLMKPKSLVNYQ[U\\Y\\ YGVHSJQMPPPSQVSYV[Y\\", - "F_OQMQKRJSIUIWJYKZM[O[QZRYSWSURSQROQ SHPQ ZJRR \\QST", - "H\\OKUY UKOY KOYU YOKU", - "F^NVLUKUIVHXHYI[K\\L\\N[OYOXNVKRJOJMKJMHPGTGWHYJZMZOYRVVUXUYV[X\\Y\\[[\\Y\\X[VYUXUVV JMKKMIPHTHWIYKZM", - "F^NMLNKNIMHKHJIHKGLGNHOJOKNMKQJTJVKYM[P\\T\\W[YYZVZTYQVMUKUJVHXGYG[H\\J\\K[MYNXNVM JVKXMZP[T[WZYXZV", - "I[KYYK QLULYKXOXS ULXLXO", - "I[YKKY LQLUKYOXSX LULXOX", - "I[YYKK SLOLKKLOLS OLLLLO", - "I[KKYY QXUXYYXUXQ UXXXXU", - "", - "F_JMILIJJHLGNGPHQIRKSP IJKHMHOIPJQLRPR[ [M\\L\\J[HYGWGUHTISKRP \\JZHXHVIUJTLSPS[", - "F^IGJKKMMOPPTPWOYMZK[G IGJJKLMNPOTOWNYLZJ[G PONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO PPNQMSMVNY VYWVWSVQTP", - "F^MJMV NKNU VKVU WJWV IGKIMJPKTKWJYI[G IYKWMVPUTUWVYW[Y", - "F^[ILIJJILINJPLQNQPPQNQLPJ[J IMJOKPMQ QMPKOJMI IXXXZW[U[SZQXPVPTQSSSUTWIW [TZRYQWP STTVUWWX", - "F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX MSKPJNJKKILH SGVHXJYLYOXRVU", - "G_HKKHMKMV JILLLV MKPHRKRU OIQLQU RKUHWKW[ TIVLV[ WKZH[J\\M\\P[SZUXWUYP[ YIZJ[M[PZSYUWWTYP[", - "F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S ITOTMRLOLMMJOHQG SGUHWJXMXOWRUT[T KXYX KYYY", - "F_GLJIMLMX IJLMLX MLPISLSX OJRMRX SLVIYLYW[Y UJXMXXZZ]W", - "G]ZIJY ZIWJQJ XKUKQJ ZIYLYR XKXNYR QRJR PSMSJR QRQY PSPVQY", - "F^HOJKOU JMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ WHVIUKUMWQXTXWWYUZ", - "F^IOLLPN KMOORLUN QMTOWLYN VMXO[L IULRPT KSOURRUT QSTUWRYT VSXU[R", - "F^JHNJPLQOQRPUNWJY JHMIOJQLRO RRQUOWMXJY ZHWIUJSLRO RRSUUWWXZY ZHVJTLSOSRTUVWZY IP[P IQ[Q", - "", - "", - "", - "", - "NVQQQSSSSQQQ QQSS SQQS", - "JZMPQRTTVVWYW[V]U^ MQST MRPSTUVWWY", - "JZWKVMTOPQMR SPMS UFVGWIWKVNTPQRMT", - "H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM XNSM VMQNLP ONKR LVQW NWSVXT UVYR", - "H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM XNSM VMQNLP ONKR LVQW NWSVXT UVYR", - "J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM OPUM NRVN MTWO NUXP OVWR PWVT", - "JZOGO^ UFU] MNWL MOWM MWWU MXWV", - "JZNFNX VLV^ NNVL NOVM NWVU NXVV", - "JZNBNW NNQLTLVMWOWQVSSUQVNW NNQMTMVN UMVOVQUSSU", - "E_HIHL \\I\\L HI\\I HJ\\J HK\\K HL\\L", - "JZMNMQ WNWQ MNWN MOWO MPWP MQWQ", - "JZMLWX MLONQOTOVNWMWKUKUMTO ONTO QOWM VKVN ULWL WXUVSUPUNVMWMYOYOWPU UVPU SUMW NVNY MXOX", - "JZPOOMOKMKMMNNPOSOUNWL NKNN MLOL MMSO POUN WLWY", - "A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW GdGeHeHdGd U;Q?LCIFGIFKENERFVGXJ[ R\\U[WZYWZTZPYMXKVITH", - "EfNSOUQVSVUUVSVQUOSNQNOONPMSMVNYP[S\\V\\Y[[Y\\W]T]P\\MZJXIUHRHOIMJKLIOHSHXI]KaMcPeTfYf]e`cba KLJNIRIXJ\\L`NbQdUeYe]d_cba POTO OPUP NQVQ NRVR NSVS OTUT PUTU aLaNcNcLaL bLbN aMcM aVaXcXcVaV bVbX aWcW", - "D`H@Hd M@Md W@Wd \\@\\d MMWK MNWL MOWM MWWU MXWV MYWW", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NVQQQSSSSQQQ QQSS SQQS", - "JZMPQRTTVVWYW[V]U^ MQST MRPSTUVWWY", - "JZWKVMTOPQMR SPMS UFVGWIWKVNTPQRMT", - "H\\PMMNLOKQKSLUMVPWTWWVXUYSYQXOWNTMPM MNLPLSMUNVPW WVXTXQWOVNTM", - "H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM XNSM VMQNLP ONKR LVQW NWSVXT UVYR", - "J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM OPUM NRVN MTWO NUXP OVWR PWVT", - "JZOGO^ UFU] MNWL MOWM MWWU MXWV", - "JZNFNX VLV^ NNVL NOVM NWVU NXVV", - "JZNBNW NNQLTLVMWOWQVSSUQVNW NNQMTMVN UMVOVQUSSU", - "E_HIHL \\I\\L HI\\I HJ\\J HK\\K HL\\L", - "JZMNMQ WNWQ MNWN MOWO MPWP MQWQ", - "JZQCVMRTRU ULQS TITKPRRUUY W\\UYSXQXOYN[N]O_Ra W\\UZSYOYO]P_Ra SXPZN]", - "JZPOOMOKMKMMNNPOSOUNWL NKNN MLOL MMSO POUN WLSY", - "A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW GdGeHeHdGd U;Q?LCIFGIFKENERFVGXJ[ R\\U[WZYWZTZPYMXKVITH", - "IjNQOOQNSNUOVQVSUUSVQVOUNTMQMNNKPISHWH[I^K`NaRaW`[_]]`ZcVfQiMk WHZI]K_N`R`W_[^]\\`YcTgQi POTO OPUP NQVQ NRVR NSVS OTUT PUTU eLeNgNgLeL fLfN eMgM eVeXgXgVeV fVfX eWgW", - "D`H>Hf I>If M>Mf QBSBSDQDQAR?T>W>Y?[A\\D\\I[LYNWOUOSNRLQNOQNROSQVRXSVUUWUYV[X\\[\\`[cYeWfTfReQcQ`S`SbQb RBRD QCSC Y?ZA[D[IZLYN RLRNPQNRPSRVRX YVZX[[[`ZcYe R`Rb QaSa", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "AcHBHb IBIb [B[b \\B\\b DB`B DbMb Wb`b", - "BaGBQPFb FBPP EBPQ EB\\B^I[B Ga\\a Fb\\b^[[b", - "I[X+U1R8P=OANFMNMVN^OcPgRlUsXy U1S6QPBTJTLSNROMRRUSVTXTZPbOfOjPoRsVy T.R2Q5P:P>QCRF R^QaPfPjQoRrTv", - "I\\N+R1T5U:U>TBPJPLQNROWRRUQVPXPZTbUfUjToRsNy P.R2S5T:T>SCRF R^SaTfTjSoRrPv", - "I[V.S1Q4O8N=NCOIPMSXT\\UbUgTlSoQs S1Q5P8O=OBPHQLTWU[VaVgUlSpQsNv", - "I[N.Q1S4U8V=VCUITMQXP\\ObOgPlQoSs Q1S5T8U=UBTHSLPWO[NaNgOlQpSsVv", - "7Z:RARRo @RQo ?RRr Z\"VJRr", - "Ca].\\.[/[0\\1]1^0^.],[+Y+W,U.T0S3R:QJQjPsOv \\/\\0]0]/\\/ R:Rj U.T1S:SZRjQqPtOvMxKyIyGxFvFtGsHsItIuHvGv GtGuHuHtGt", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "H\\RFJ[ RIK[J[ RIY[Z[ RFZ[ MUWU LVXV", - "H\\LFL[ MGMZ LFTFWGXHYJYMXOWPTQ MGTGWHXJXMWOTP MPTPWQXRYTYWXYWZT[L[ MQTQWRXTXWWYTZMZ", - "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV ZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV", - "H]LFL[ MGMZ LFSFVGXIYKZNZSYVXXVZS[L[ MGSGVHWIXKYNYSXVWXVYSZMZ", - "I\\MFM[ NGNZ MFYF NGYGYF NPTPTQ NQTQ NZYZY[ M[Y[", - "I[MFM[ NGN[M[ MFYF NGYGYF NPTPTQ NQTQ", - "H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR ZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR", - "G]KFK[ KFLFL[K[ YFXFX[Y[ YFY[ LPXP LQXQ", - "NWRFR[S[ RFSFS[", - "J[VFVVUYSZQZOYNVMV VFWFWVVYUZS[Q[OZNYMV", - "H]LFL[M[ LFMFM[ ZFYFMR ZFMS POY[Z[ QOZ[", - "IZMFM[ MFNFNZ NZYZY[ M[Y[", - "F^JFJ[ KKK[J[ KKR[ JFRX ZFRX YKR[ YKY[Z[ ZFZ[", - "G]KFK[ LIL[K[ LIY[ KFXX XFXX XFYFY[", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF QGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG", - "H\\LFL[ MGM[L[ LFUFWGXHYJYMXOWPUQMQ MGUGWHXJXMWOUPMP", - "G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF QGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG SXX]Y] SXTXY]", - "H\\LFL[ MGM[L[ LFTFWGXHYJYMXOWPTQMQ MGTGWHXJXMWOTPMP RQX[Y[ SQY[", - "H\\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX YIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX", - "J[RGR[ SGS[R[ LFYFYG LFLGYG", - "G]KFKULXNZQ[S[VZXXYUYF KFLFLUMXNYQZSZVYWXXUXFYF", - "H\\JFR[ JFKFRX ZFYFRX ZFR[", - "E_GFM[ GFHFMX RFMX RIM[ RIW[ RFWX ]F\\FWX ]FW[", - "H\\KFX[Y[ KFLFY[ YFXFK[ YFL[K[", - "I\\KFRPR[S[ KFLFSP ZFYFRP ZFSPS[", - "H\\XFK[ YFL[ KFYF KFKGXG LZYZY[ K[Y[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "E\\XFVHTKQPOSLWIZG[E[DZDXEWFXEY XFWJUTT[ XFU[ T[TYSVRTPRNQLQKRKTLWOZR[V[XZ", - "F^UGTHSJQOOUNWLZJ[ THSKQSPVOXMZJ[H[GZGXHWIXHY OLNNMOKOJNJLKJMHOGRFXFZG[I[KZMXNTORO XFYGZIZKYMXN TOWPXQYSYVXYWZU[S[RZRXSU TOVPWQXSXVWYU[", - "H]KHJJJLKNNOQOUNWMYKZIZGYFWFTGQJOMMQLULXMZP[R[UZWXXVXTWRURSSRU WFUGRJPMNQMUMXNZP[", - "F]UGTHSJQOOUNWLZJ[ THSKQSPVOXMZJ[H[GZGXHWJWLXNZP[S[UZWXYTZOZLYIWGUFPFMGKIJKJMKNMNNMOK", - "I\\WIVJVLWMYMZKZIYGWFTFRGQHPJPLQNSO TFRHQJQMSO SOQONPLRKTKWLYMZO[R[UZWXXVXTWRURSSRU QOOPMRLTLXMZ", - "G\\WHVJTORUQWOZM[ QLPNNOLOKMKKLINGQF[FXGWHVKTSSVRXPZM[K[IZHYHXIWJXIY SFWGXG OSPRRQVQXPZMXT", - "G]JIIKIMJOLPOPROTNWKXHXGWFVFTGRIQKPNPQQSSTUTWSYQZO WFUGSIRKQNQRST ZOYSWWUYSZO[L[JZIXIWJVKWJX YSWVUXRZO[", - "F^LLKKKILGOFRFOQMWLYKZI[G[FZFXGWHXGY RFOONRLWKYI[ JTKSMRVOXN[L]J^H^G]F\\FZGXJWLURTVTYV[W[YZ[X \\FZHXLVRUVUYV[", - "IYWHUKSPQUPWNZL[ YLWNTOQOONNLNJOHQGUFYFWHVJTPRVQXOZL[J[IZIXJWKXJY", - "IZYFWHUKSPPYN] YMWOTPQPOONMNKOIQGUFYFWIVKSTQXPZN]M^K_J^J\\KZMXOWRVVU", - "F^LLKKKIMGPFRFOQMWLYKZI[G[FZFXGWHXGY RFOONRLWKYI[ ZGWKUMSNPO ]G\\H]I^H^G]F\\FZGWLVMTNPO POSPTRUYV[ PORPSRTYV[W[YZ[X", - "I[MILKLMMOOPRPUOWNZK[H[GZFYFWGVHTKPUOWMZK[ VHTLRSQVPXNZK[I[HZHXIWKWMXPZR[U[WZYX", - "D`RFNOKUIXGZE[C[BZBXCWDXCY RFPMOQNVNZP[ RFQJPOOVOZP[ [FWORXP[ [FYMXQWVWZY[Z[\\Z^X [FZJYOXVXZY[", - "G^RFQJOPMULWJZH[F[EZEXFWGXFY RFRKSVT[ RFSKTVT[ `G_H`IaHaG`F^F\\GZJYLWQUWT[", - "H]SFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGWGUHSJQNPSPV QGOJMNLRLVMYO[", - "F]UGTHSJQOOUNWLZJ[ THSKQSPVOXMZJ[H[GZGXHWIXHY OLNNMOKOJNJLKJMHOGRFVFYGZH[J[MZOYPVQTQRP VFXGYHZJZMYOXPVQ", - "H]UJULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[XZZX WFXGYIYMXPVSSVOYK[", - "F^UGTHSJQOOUNWLZJ[ THSKQSPVOXMZJ[H[GZGXHWIXHY OLNNMOKOJNJLKJMHOGRFWFZG[I[KZMYNVORO WFYGZIZKYMXNVO ROUPVRWYX[ ROTPURVYX[Y[[Z]X", - "H\\NIMKMMNOPPSPVOXN[K\\H\\G[FZFXGWHVJUMSTRWPZN[ VJUNTUSXQZN[K[IZHXHWIVJWIX", - "I[YHXJVOTUSWQZO[ SLRNPONOMMMKNIPGSF\\FZGYHXKVSUVTXRZO[M[KZJYJXKWLXKY UFYGZG", - "G]HJJGLFMFOHOKNNKVKYL[ MFNHNKKSJVJYL[N[PZSWUTVR ZFVRUVUYW[X[ZZ\\X [FWRVVVYW[", - "G\\HJJGLFMFOHOKNOLVLYM[ MFNHNKLRKVKYM[N[QZTWVTXPYMZIZGYFXFWGVIVLWNYP[Q]Q", - "F]ILHLGKGIHGJFNFMHLLKUJ[ LLLUK[ VFTHRLOUMYK[ VFUHTLSUR[ TLTUS[ `F^G\\IZLWUUYS[", - "H\\PKOLMLLKLIMGOFQFSGTITLSPQUOXMZJ[H[GZGXHWIXHY QFRGSISLRPPUNXLZJ[ ]G\\H]I^H^G]F[FYGWIULSPRURXSZT[U[WZYX", - "G]JJLGNFOFQGQIOOORPT OFPGPINONRPTRTUSWQYNZL \\FZLWTUX ]F[LYQWUUXSZP[L[JZIXIWJVKWJX", - "G\\ZHYJWOVRUTSWQYOZL[ SLRNPONOMMMKNIPGSF]F[GZHYKXOVUTXQZL[H[GZGXHWJWLXOZQ[T[WZYX VFZG[G", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "H\\WMW[X[ WMXMX[ WPUNSMPMNNLPKSKULXNZP[S[UZWX WPSNPNNOMPLSLUMXNYPZSZWX", - "H\\LFL[M[ LFMFM[ MPONQMTMVNXPYSYUXXVZT[Q[OZMX MPQNTNVOWPXSXUWXVYTZQZMX", - "I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX XPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX", - "H\\WFW[X[ WFXFX[ WPUNSMPMNNLPKSKULXNZP[S[UZWX WPSNPNNOMPLSLUMXNYPZSZWX", - "I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX MSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX", - "LZWFUFSGRJR[S[ WFWGUGSH TGSJS[ OMVMVN OMONVN", - "H\\XMWMW\\V_U`SaQaO`N_L_ XMX\\W_UaSbPbNaL_ WPUNSMPMNNLPKSKULXNZP[S[UZWX WPSNPNNOMPLSLUMXNYPZSZWX", - "H\\LFL[M[ LFMFM[ MQPNRMUMWNXQX[ MQPORNTNVOWQW[X[", - "NWRFQGQHRISITHTGSFRF RGRHSHSGRG RMR[S[ RMSMS[", - "NWRFQGQHRISITHTGSFRF RGRHSHSGRG RMRbSb RMSMSb", - "H[LFL[M[ LFMFM[ XMWMMW XMMX PTV[X[ QSX[", - "NWRFR[S[ RFSFS[", - "CbGMG[H[ GMHMH[ HQKNMMPMRNSQS[ HQKOMNONQORQR[S[ SQVNXM[M]N^Q^[ SQVOXNZN\\O]Q][^[", - "H\\LML[M[ LMMMM[ MQPNRMUMWNXQX[ MQPORNTNVOWQW[X[", - "I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM QNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN", - "H\\LMLbMb LMMMMb MPONQMTMVNXPYSYUXXVZT[Q[OZMX MPQNTNVOWPXSXUWXVYTZQZMX", - "H\\WMWbXb WMXMXb WPUNSMPMNNLPKSKULXNZP[S[UZWX WPSNPNNOMPLSLUMXNYPZSZWX", - "KYOMO[P[ OMPMP[ PSQPSNUMXM PSQQSOUNXNXM", - "J[XPWNTMQMNNMPNRPSUUWV VUWWWXVZ WYTZQZNY OZNXMX XPWPVN WOTNQNNO ONNPOR NQPRUTWUXWXXWZT[Q[NZMX", - "MXRFR[S[ RFSFS[ OMVMVN OMONVN", - "H\\LMLWMZO[R[TZWW LMMMMWNYPZRZTYWW WMW[X[ WMXMX[", - "JZLMR[ LMMMRY XMWMRY XMR[", - "F^IMN[ IMJMNX RMNX RPN[ RPV[ RMVX [MZMVX [MV[", - "I[LMW[X[ LMMMX[ XMWML[ XMM[L[", - "JZLMR[ LMMMRY XMWMRYNb XMR[ObNb", - "I[VNL[ XMNZ LMXM LMLNVN NZXZX[ L[X[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "K[UUTSRRPRNSMTLVLXMZO[Q[SZTX PRNTMVMYO[ VRTXTZV[XZYY[V WRUXUZV[", - "LZLVNSPO SFMXMZO[P[RZTXUUURVVWWXWZV TFNXNZO[", - "LXTSSTTTTSSRQROSNTMVMXNZP[S[VYXV QROTNVNYP[", - "K[UUTSRRPRNSMTLVLXMZO[Q[SZTX PRNTMVMYO[ ZFTXTZV[XZYY[V [FUXUZV[", - "LXOYQXRWSUSSRRQROSNTMVMXNZP[S[VYXV QROTNVNYP[", - "OXRRUOWLXIXGWFUGTIKdKfLgNfOcPZQ[S[UZVYXV TISNRRO[M`Kd", - "K[UUTSRRPRNSMTLVLXMZO[Q[SZTX PRNTMVMYO[ VRPd WRT[R`PdOfMgLfLdMaO_R]V[YY[V", - "L[LVNSPO SFL[ TFM[ OUQSSRTRVSVUUXUZV[ TRUSUUTXTZV[XZYY[V", - "NVSLRMSNTMSL QROXOZQ[SZTYVV RRPXPZQ[", - "NVSLRMSNTMSL QRKd RRO[M`KdJfHgGfGdHaJ_M]Q[TYVV", - "LZLVNSPO SFL[ TFM[ URUSVSURTRRTOU OURVSZT[ OUQVRZT[U[XYZV", - "NVNVPSRO UFOXOZQ[SZTYVV VFPXPZQ[", - "E^EVGSIRKSKUI[ IRJSJUH[ KUMSORPRRSRUP[ PRQSQUO[ RUTSVRWRYSYUXXXZY[ WRXSXUWXWZY[[Z\\Y^V", - "I[IVKSMROSOUM[ MRNSNUL[ OUQSSRTRVSVUUXUZV[ TRUSUUTXTZV[XZYY[V", - "KYRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXVXXWYV PRNTMVMYO[", - "L[LVNSPO QLHg RLIg OUQSSRTRVSVUUXUZV[ TRUSUUTXTZV[XZYY[V", - "K[UUTSRRPRNSMTLVLXMZO[Q[SZ PRNTMVMYO[ VRPdPfQgSfTcT[V[YY[V WRT[R`Pd", - "LZLVNSPRRSRUP[ PRQSQUO[ RUTSVRWRVU VRVUWWXWZV", - "NZNVPSQQQSTUUWUYTZR[ QSSUTWTYR[ NZP[U[XYZV", - "NVNVPSRO UFOXOZQ[SZTYVV VFPXPZQ[ PNVN", - "K[NRLXLZN[O[QZSXUU ORMXMZN[ VRTXTZV[XZYY[V WRUXUZV[", - "KZNRMTLWLZN[O[RZTXUUUR ORNTMWMZN[ URVVWWXWZV", - "H]LRJTIWIZK[L[NZPX MRKTJWJZK[ RRPXPZR[S[UZWXXUXR SRQXQZR[ XRYVZW[W]V", - "JZJVLSNRPRQSQUPXOZM[L[KZKYLYKZ WSVTWTWSVRURSSRUQXQZR[U[XYZV QSRU SSQU PXQZ QXOZ", - "K[NRLXLZN[O[QZSXUU ORMXMZN[ VRPd WRT[R`PdOfMgLfLdMaO_R]V[YY[V", - "LYLVNSPRRRTSTVSXPZN[ RRSSSVRXPZ N[P\\Q^QaPdNfLgKfKdLaO^R\\VYYV N[O\\P^PaOdNf", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NV", - "JZ", - "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF OGMJLOLRMWOZ NYQZSZVY UZWWXRXOWJUG VHSGQGNH", - "H\\NJPISFS[ NJNKPJRHR[S[", - "H\\LKLJMHNGPFTFVGWHXJXLWNUQL[ LKMKMJNHPGTGVHWJWLVNTQK[ LZYZY[ K[Y[", - "H\\MFXFQO MFMGWG WFPO QNSNVOXQYTYUXXVZS[P[MZLYKWLW POSOVPXS TOWQXTXUWXTZ XVVYSZPZMYLW OZLX", - "H\\UIU[V[ VFV[ VFKVZV UILV LUZUZV", - "H\\MFLO NGMN MFWFWG NGWG MNPMSMVNXPYSYUXXVZS[P[MZLYKWLW LOMOONSNVOXR TNWPXSXUWXTZ XVVYSZPZMYLW OZLX", - "H\\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ WHTGRGOH PGNJMOMTNXQZ MVOYRZSZVYXV TZWXXUXTWQTO XSVPSOROOPMS QONQMT", - "H\\KFYFO[ KFKGXG XFN[O[", - "H\\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF NGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG WHTGPGMH LXOZ UZXX", - "H\\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ WMVPSR WNUQRRQRNQLN PRMPLMLLMIPG LKNHQGRGUHWK SGVIWMWRVWTZ UYRZPZMY", - "MXRXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXTZS[R[QZQYRXSXTYT\\S^Q_ RYRZSZSYRY S[T\\ TZS^", - "MXRMQNQORPSPTOTNSMRM RNROSOSNRN RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXRMQNQORPSPTOTNSMRM RNROSOSNRN TZS[R[QZQYRXSXTYT\\S^Q_ RYRZSZSYRY S[T\\ TZS^", - "MXRFRTST RFSFST RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "I\\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ LKMKMJNHQGTGWHXJXLWNUORP MIPG UGXI XMTP RPRTSTSP RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXTFRGQIQLRMSMTLTKSJRJQK RKRLSLSKRK RGQK QIRJ", - "MXTHSIRIQHQGRFSFTGTJSLQM RGRHSHSGRG SITJ THSL", - "F_\\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\\[ \\M\\NZNWP ZMXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG SHQGPGNH OGNINKONQQVWXYZZ\\Z\\[", - "I\\RBR_S_ RBSBS_ WIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX WIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX XXUZ", - "G^[BIbJb [B\\BJb", - "KYUBSDQGOKNPNTOYQ]S`UbVb UBVBTDRGPKOPOTPYR]T`Vb", - "KYNBPDRGTKUPUTTYR]P`NbOb NBOBQDSGUKVPVTUYS]Q`Ob", - "JZRFQGSQRR RFRR RFSGQQRR MINIVOWO MIWO MIMJWNWO WIVINOMO WIMO WIWJMNMO", - "F_JQ[Q[R JQJR[R", - "F_RIRZSZ RISISZ JQ[Q[R JQJR[R", - "F_JM[M[N JMJN[N JU[U[V JUJV[V", - "NWSFRGRM SGRM SFTGRM", - "I[NFMGMM NGMM NFOGMM WFVGVM WGVM WFXGVM", - "KYQFOGNINKOMQNSNUMVKVIUGSFQF QFNIOMSNVKUGQF SFOGNKQNUMVISF", - "F^ZIJRZ[ ZIZJLRZZZ[", - "F^JIZRJ[ JIJJXRJZJ[", - "G^OFObPb OFPFPb UFUbVb UFVFVb JP[P[Q JPJQ[Q JW[W[X JWJX[X", - "F^[FYGVHSHPGNFLFJGIIIKKMMMOLPJPHNF [FH[I[ [F\\FI[ YTWTUUTWTYV[X[ZZ[X[VYT NFJGIKMMPJNF LFIIKMOLPHLF YTUUTYX[[XYT WTTWV[ZZ[VWT", - "E`WMTKQKOLNMMOMRNTOUQVTVWT WMTLQLOMNONROTQUTUWT VKVSWUYVZV\\U]S]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[U[YZ VKWKWSXUZV YV[U\\S\\O[LZJYIWHTGQGNHLIKJJLIOIRJUKWLXNYQZUZYYYZ", - "E_JPLONOPPSTTUVVXVZU[S[QZOXNVNTOSPPTNULUJT ZPXOVOTPQTPUNVLVJUISIQJOLNNNPOQPTTVUXUZT KOJQJSKU YUZSZQYO", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NV", - "JZ", - "H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF TFRGPINLMOLSLVMYO[ Q[SZUXWUXRYNYKXHVF", - "H]TJO[ VFP[ VFSIPKNL UIQKNL", - "H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ VFXGYIYKXMVOPS JYKXMXRZUZWYXW MXR[U[WZXW", - "H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP VFXGYIYKXMVO QPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW SPUQVRWTWWVYUZS[", - "H]XGR[ YFS[ YFJUZU", - "H]QFLP QF[F QGVG[F LPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW SNUOVPWRWUVXTZR[", - "H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT TFRGPINLMOLSLXMZ R[TZVXWVWRVP", - "H]NFLL [FZIXLSRQUPWO[ XLRRPUOWN[ MIPFRFWI NHPGRGWIYIZH[F", - "H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF SFQGPHOJOMPOQP TPWOXNYLYIXGVF QPMQKSJUJXKZN[R[VZWYXWXTWRVQTP QPNQLSKUKXLZN[ R[UZVYWWWSVQ", - "H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX OQNONKOIQGSF XGYIYNXRWUUXSZQ[", - "MXPYOZP[QZPY", - "MXP[OZPYQZQ[P]N_", - "MXSMRNSOTNSM PYOZP[QZ", - "MXSMRNSOTNSM P[OZPYQZQ[P]N_", - "MXUFTGRS UGRS UFVGRS PYOZP[QZPY", - "H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT WFYGZIZKYMXNVO PYOZP[QZPY", - "MXVFTHSJSKTLUKTJ", - "MXUHTGUFVGVHUJSL", - "E_\\N[O\\P]O]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX K[IZHXHVITJSPP OLPQQTSWUYWZYZZY", - "H]TBL_ YBQ_ ZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT MKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW", - "G]_BEb", - "KZZBVESHQKOONTNXO]P`Qb VESIQMPPOUOZP_Qb", - "JYSBTDUGVLVPUUSYQ\\N_Jb SBTEUJUOTTSWQ[N_", - "J[TFTR OIYO YIOO", - "E_IR[R", - "E_RIR[ IR[R", - "E_IO[O IU[U", - "NWUFSM VFSM", - "I[PFNM QFNM YFWM ZFWM", - "KZSFQGPIPKQMSNUNWMXKXIWGUFSF", - "F^ZIJRZ[", - "F^JIZRJ[", - "H]SFLb YFRb LQZQ KWYW", - "E_^F\\GXHUHQGOFMFKGJIJKLMNMPLQJQHOF ^FF[ XTVTTUSWSYU[W[YZZXZVXT", - "E`WNVLTKQKOLNMMPMSNUPVSVUUVS QKOMNPNSOUPV WKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX XKWSWUXV", - "F_\\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\\Q\\S", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "H\\RFK[ RFY[ RIX[ MUVU I[O[ U[[[", - "G]LFL[ MFM[ IFYFYLXF MPUPXQYRZTZWYYXZU[I[ UPWQXRYTYWXYWZU[", - "G]LFL[ MFM[ IFUFXGYHZJZLYNXOUP UFWGXHYJYLXNWOUP MPUPXQYRZTZWYYXZU[I[ UPWQXRYTYWXYWZU[", - "I[NFN[ OFO[ KFZFZLYF K[R[", - "F^NFNLMTLXKZJ[ XFX[ YFY[ KF\\F G[\\[ G[Gb H[Gb [[\\b \\[\\b", - "G\\LFL[ MFM[ SLST IFYFYLXF MPSP I[Y[YUX[", - "CbRFR[ SFS[ OFVF GGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\\G]F^F_G_H^I]H^G NPLQKSJXIZH[ NPMQLSKXJZI[G[FZEX WPYQZS[X\\Z][ WPXQYSZX[Z\\[^[_Z`X O[V[", - "H\\LIKFKLLINGPFTFWGXIXLWNTOQO TFVGWIWLVNTO TOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW WQXTXWWYVZT[", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F XHLY H[O[ U[\\[", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F XHLY H[O[ U[\\[ N@N?M?M@NBPCTCVBW@", - "F^KFK[ LFL[ HFOF LPSPUOVMWIXGYFZF[G[HZIYHZG SPUQVSWXXZY[ SPTQUSVXWZX[Z[[Z\\X H[O[", - "E^MFMLLTKXJZI[H[GZGYHXIYHZ XFX[ YFY[ JF\\F U[\\[", - "F_KFK[ LFRX KFR[ YFR[ YFY[ ZFZ[ HFLF YF]F H[N[ V[][", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F LPXP H[O[ U[\\[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF QFOGMILKKOKRLVMXOZQ[ S[UZWXXVYRYOXKWIUGSF", - "F^KFK[ LFL[ XFX[ YFY[ HF\\F H[O[ U[\\[", - "G]LFL[ MFM[ IFUFXGYHZJZMYOXPUQMQ UFWGXHYJYMXOWPUQ I[P[", - "G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV QFOGMILKKNKSLVMXOZQ[", - "I\\RFR[ SFS[ LFKLKFZFZLYF O[V[", - "H]KFRV LFSV ZFSVQYPZN[M[LZLYMXNYMZ IFOF VF\\F", - "F_RFR[ SFS[ OFVF PILJJLIOIRJULWPXUXYW[U\\R\\O[LYJUIPI PIMJKLJOJRKUMWPX UXXWZU[R[OZLXJUI O[V[", - "H\\KFX[ LFY[ YFK[ IFOF UF[F I[O[ U[[[", - "F^KFK[ LFL[ XFX[ YFY[ HFOF UF\\F H[\\[ [[\\b \\[\\b", - "F]KFKQLSOTRTUSWQ LFLQMSOT WFW[ XFX[ HFOF TF[F T[[[", - "BcGFG[ HFH[ RFR[ SFS[ ]F][ ^F^[ DFKF OFVF ZFaF D[a[", - "BcGFG[ HFH[ RFR[ SFS[ ]F][ ^F^[ DFKF OFVF ZFaF D[a[ `[ab a[ab", - "F`PFP[ QFQ[ IFHLHFTF QPXP[Q\\R]T]W\\Y[ZX[M[ XPZQ[R\\T\\W[YZZX[", - "CaHFH[ IFI[ EFLF IPPPSQTRUTUWTYSZP[E[ PPRQSRTTTWSYRZP[ [F[[ \\F\\[ XF_F X[_[", - "H]MFM[ NFN[ JFQF NPUPXQYRZTZWYYXZU[J[ UPWQXRYTYWXYWZU[", - "H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW SFUGWIXKYNYSXVWXUZS[ PPYP", - "CbHFH[ IFI[ EFLF E[L[ VFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF VFTGRIQKPOPRQVRXTZV[ X[ZZ\\X]V^R^O]K\\IZGXF IPOP", - "G]WFW[ XFX[ [FOFLGKHJJJLKNLOOPWP OFMGLHKJKLLNMOOP RPPQORLYKZJZIY PQOSMZL[J[IYIX T[[[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "I]NONPMPMONNPMTMVNWOXQXXYZZ[ WOWXXZZ[[[ WQVRPSMTLVLXMZP[S[UZWX PSNTMVMXNZP[", - "H\\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS XFWHUIQJNLLN QMONMPLSLUMXOZQ[ S[UZWXXUXSWPUNSM", - "H\\MMM[ NMN[ JMUMXNYPYQXSUT UMWNXPXQWSUT NTUTXUYWYXXZU[J[ UTWUXWXXWZU[", - "HZMMM[ NMN[ JMXMXRWM J[Q[", - "F]NMNQMWLZK[ WMW[ XMX[ KM[M I[H`H[[[[`Z[", - "H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX WSWPVN QMONMPLSLUMXOZQ[", - "E`RMR[ SMS[ OMVM JNIOHNIMJMKNMRNSPTUTWSXRZN[M\\M]N\\O[N PTNUMVKZJ[ PTNVLZK[I[HZGX UTWUXVZZ[[ UTWVYZZ[\\[]Z^X O[V[", - "I[MOLMLQMONNPMTMWNXPXQWSTT TMVNWPWQVSTT QTTTWUXWXXWZT[P[MZLXLWMVNWMX TTVUWWWXVZT[", - "G]LML[ MMM[ WMW[ XMX[ IMPM TM[M I[P[ T[[[ WNMZ", - "G]LML[ MMM[ WMW[ XMX[ IMPM TM[M I[P[ T[[[ WNMZ OGOFNFNGOIQJSJUIVG", - "H\\MMM[ NMN[ JMQM NTPTSSTRVNWMXMYNXOWN PTSUTVVZW[ PTRUSVUZV[X[YZZX J[Q[", - "G]NMNQMWLZK[J[IZJYKZ WMW[ XMX[ KM[M T[[[", - "G^LML[ LMR[ MMRY XMR[ XMX[ YMY[ IMMM XM\\M I[O[ U[\\[", - "G]LML[ MMM[ WMW[ XMX[ IMPM TM[M MTWT I[P[ T[[[", - "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM QMONMPLSLUMXOZQ[ S[UZWXXUXSWPUNSM", - "G]LML[ MMM[ WMW[ XMX[ IM[M I[P[ T[[[", - "G\\LMLb MMMb MPONQMSMVNXPYSYUXXVZS[Q[OZMX SMUNWPXSXUWXUZS[ IMMM IbPb", - "H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX QMONMPLSLUMXOZQ[", - "I\\RMR[ SMS[ MMLRLMYMYRXM O[V[", - "I[LMR[ MMRY XMR[P_NaLbKbJaK`La JMPM TMZM", - "H]RFRb SFSb OFSF RPQNPMNMLNKQKWLZN[P[QZRX NMMNLQLWMZN[ WMXNYQYWXZW[ SPTNUMWMYNZQZWYZW[U[TZSX ObVb", - "H\\LMW[ MMX[ XML[ JMPM TMZM J[P[ T[Z[", - "G]LML[ MMM[ WMW[ XMX[ IMPM TM[M I[[[[`Z[", - "G]LMLTMVPWRWUVWT MMMTNVPW WMW[ XMX[ IMPM TM[M T[[[", - "CbHMH[ IMI[ RMR[ SMS[ \\M\\[ ]M][ EMLM OMVM YM`M E[`[", - "CbHMH[ IMI[ RMR[ SMS[ \\M\\[ ]M][ EMLM OMVM YM`M E[`[``_[", - "H]QMQ[ RMR[ LMKRKMUM RTVTYUZWZXYZV[N[ VTXUYWYXXZV[", - "E_JMJ[ KMK[ GMNM KTOTRUSWSXRZO[G[ OTQURWRXQZO[ YMY[ ZMZ[ VM]M V[][", - "J[OMO[ PMP[ LMSM PTTTWUXWXXWZT[L[ TTVUWWWXVZT[", - "I\\MOLMLQMONNPMSMVNXPYSYUXXVZS[P[NZLXLWMVNWMX SMUNWPXSXUWXUZS[ RTXT", - "DaIMI[ JMJ[ FMMM F[M[ VMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM VMTNRPQSQURXTZV[ X[ZZ\\X]U]S\\PZNXM JTPT", - "G\\VMV[ WMW[ ZMOMLNKPKQLSOTVT OMMNLPLQMSOT TTQUPVNZM[ TTRUQVOZN[L[KZJX S[Z[", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "H\\RFKZ QIW[ RIX[ RFY[ MUVU I[O[ T[[[ KZJ[ KZM[ WZU[ WYV[ XYZ[", - "G]LFL[ MGMZ NFN[ IFUFXGYHZJZLYNXOUP XHYJYLXN UFWGXIXMWOUP NPUPXQYRZTZWYYXZU[I[ XRYTYWXY UPWQXSXXWZU[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "G\\XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXXYV MILKKNKSLVMX QFOGMJLNLSMWOZQ[", - "G]LFL[ MGMZ NFN[ IFSFVGXIYKZNZSYVXXVZS[I[ WIXKYNYSXVWX SFUGWJXNXSWWUZS[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "G\\LFL[ MGMZ NFN[ IFYFYL NPTP TLTT I[Y[YU JFLG KFLH OFNH PFNG TFYG VFYH WFYI XFYL TLSPTT TNRPTR TOPPTQ LZJ[ LYK[ NYO[ NZP[ T[YZ V[YY W[YX X[YU", - "G[LFL[ MGMZ NFN[ IFYFYL NPTP TLTT I[Q[ JFLG KFLH OFNH PFNG TFYG VFYH WFYI XFYL TLSPTT TNRPTR TOPPTQ LZJ[ LYK[ NYO[ NZP[", - "G^XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXZY[YS MILKKNKSLVMX QFOGMJLNLSMWOZQ[ XTXY WSWYVZ TS\\S USWT VSWU ZSYU [SYT", - "F^KFK[ LGLZ MFM[ WFW[ XGXZ YFY[ HFPF TF\\F MPWP H[P[ T[\\[ IFKG JFKH NFMH OFMG UFWG VFWH ZFYH [FYG KZI[ KYJ[ MYN[ MZO[ WZU[ WYV[ YYZ[ YZ[[", - "LXQFQ[ RGRZ SFS[ NFVF N[V[ OFQG PFQH TFSH UFSG QZO[ QYP[ SYT[ SZU[", - "JZSFSWRZQ[ TGTWSZ UFUWTZQ[O[MZLXLVMUNUOVOWNXMX MVMWNWNVMV PFXF QFSG RFSH VFUH WFUG", - "F\\KFK[ LGLZ MFM[ XGMR PPW[ QPX[ QNY[ HFPF UF[F H[P[ T[[[ IFKG JFKH NFMH OFMG WFXG ZFXG KZI[ KYJ[ MYN[ MZO[ WYU[ WYZ[", - "I[NFN[ OGOZ PFP[ KFSF K[Z[ZU LFNG MFNH QFPH RFPG NZL[ NYM[ PYQ[ PZR[ U[ZZ W[ZY X[ZX Y[ZU", - "E_JFJZ JFQ[ KFQX LFRX XFQ[ XFX[ YGYZ ZFZ[ GFLF XF]F G[M[ U[][ HFJG [FZH \\FZG JZH[ JZL[ XZV[ XYW[ ZY[[ ZZ\\[", - "F^KFKZ KFY[ LFXX MFYX YGY[ HFMF VF\\F H[N[ IFKG WFYG [FYG KZI[ KZM[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF MILKKNKSLVMX WXXVYSYNXKWI QFOGMJLNLSMWOZQ[ S[UZWWXSXNWJUGSF", - "G]LFL[ MGMZ NFN[ IFUFXGYHZJZMYOXPUQNQ XHYJYMXO UFWGXIXNWPUQ I[Q[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF MILKKNKSLVMX WXXVYSYNXKWI QFOGMJLNLSMWOZQ[ S[UZWWXSXNWJUGSF NXOVQURUTVUXV^W`Y`Z^Z\\ V\\W^X_Y_ UXW]X^Y^Z]", - "G]LFL[ MGMZ NFN[ IFUFXGYHZJZLYNXOUPNP XHYJYLXN UFWGXIXMWOUP RPTQUSWYX[Z[[Y[W WWXYYZZZ TQURXXYYZY[X I[Q[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "H\\XIYFYLXIVGSFPFMGKIKLLNOPURWSXUXXWZ LLMNOOUQWRXT MGLILKMMONUPXRYTYWXYWZT[Q[NZLXKUK[LX", - "H\\JFJL QFQ[ RGRZ SFS[ ZFZL JFZF N[V[ KFJL LFJI MFJH OFJG UFZG WFZH XFZI YFZL QZO[ QYP[ SYT[ SZU[", - "F^KFKULXNZQ[S[VZXXYUYG LGLVMX MFMVNYOZQ[ HFPF VF\\F IFKG JFKH NFMH OFMG WFYG [FYG", - "H\\KFR[ LFRXR[ MFSX YGR[ IFPF UF[F JFLH NFMH OFMG WFYG ZFYG", - "F^JFN[ KFNVN[ LFOV RFOVN[ RFV[ SFVVV[ TFWV ZGWVV[ GFOF RFTF WF]F HFKG IFKH MFLH NFLG XFZG \\FZG", - "H\\KFW[ LFX[ MFY[ XGLZ IFPF UF[F I[O[ T[[[ JFMH NFMH OFMG VFXG ZFXG LZJ[ LZN[ WZU[ WYV[ WYZ[", - "G]JFQQQ[ KFRQRZ LFSQS[ YGSQ HFOF VF\\F N[V[ IFKG NFLG WFYG [FYG QZO[ QYP[ SYT[ SZU[", - "H\\YFKFKL WFK[ XFL[ YFM[ K[Y[YU LFKL MFKI NFKH PFKG T[YZ V[YY W[YX X[YU", - "H\\RFKZ QIW[ RIX[ RFY[ MUVU I[O[ T[[[ KZJ[ KZM[ WZU[ WYV[ XYZ[", - "G]LFL[ MGMZ NFN[ IFUFXGYHZJZLYNXOUP XHYJYLXN UFWGXIXMWOUP NPUPXQYRZTZWYYXZU[I[ XRYTYWXY UPWQXSXXWZU[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "I[NFN[ OGOZ PFP[ KFZFZL K[S[ LFNG MFNH QFPH RFPG UFZG WFZH XFZI YFZL NYM[ NZL[ PYQ[ PZR[", - "H\\RFJ[ QIX[ RIY[ RFZ[ KYXY KZXZ J[Z[", - "G\\LFL[ MGMZ NFN[ IFYFYL NPTP TLTT I[Y[YU JFLG KFLH OFNH PFNG TFYG VFYH WFYI XFYL TLSPTT TNRPTR TOPPTQ LZJ[ LYK[ NYO[ NZP[ T[YZ V[YY W[YX X[YU", - "H\\YFKFKL WFK[ XFL[ YFM[ K[Y[YU LFKL MFKI NFKH PFKG T[YZ V[YY W[YX X[YU", - "F^KFK[ LGLZ MFM[ WFW[ XGXZ YFY[ HFPF TF\\F MPWP H[P[ T[\\[ IFKG JFKH NFMH OFMG UFWG VFWH ZFYH [FYG KZI[ KYJ[ MYN[ MZO[ WZU[ WYV[ YYZ[ YZ[[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF MILKKNKSLVMX WXXVYSYNXKWI QFOGMJLNLSMWOZQ[ S[UZWWXSXNWJUGSF OMOT UMUT OPUP OQUQ ONPP OOQP UNTP UOSP PQOS QQOR SQUR TQUS", - "LXQFQ[ RGRZ SFS[ NFVF N[V[ OFQG PFQH TFSH UFSG QZO[ QYP[ SYT[ SZU[", - "F\\KFK[ LGLZ MFM[ XGMR PPW[ QPX[ QNY[ HFPF UF[F H[P[ T[[[ IFKG JFKH NFMH OFMG WFXG ZFXG KZI[ KYJ[ MYN[ MZO[ WYU[ WYZ[", - "H\\RFKZ QIW[ RIX[ RFY[ I[O[ T[[[ KZJ[ KZM[ WZU[ WYV[ XYZ[", - "E_JFJZ JFQ[ KFQX LFRX XFQ[ XFX[ YGYZ ZFZ[ GFLF XF]F G[M[ U[][ HFJG [FZH \\FZG JZH[ JZL[ XZV[ XYW[ ZY[[ ZZ\\[", - "F^KFKZ KFY[ LFXX MFYX YGY[ HFMF VF\\F H[N[ IFKG WFYG [FYG KZI[ KZM[", - "G]JEJL ZEZL OMOT UMUT JUJ\\ ZUZ\\ JGZG JHZH JIZI OPUP OQUQ JXZX JYZY JZZZ JFMH ZFWH KIJK LIJJ XIZJ YIZK ONPP OOQP UNTP UOSP PQOS QQOR SQUR TQUS JVKX JWLX ZWXX ZVYX MYJ[ WYZ[", - "G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF MILKKNKSLVMX WXXVYSYNXKWI QFOGMJLNLSMWOZQ[ S[UZWWXSXNWJUGSF", - "F^KFK[ LGLZ MFM[ WFW[ XGXZ YFY[ HF\\F H[P[ T[\\[ IFKG JFKH NFMH OFMG UFWG VFWH ZFYH [FYG KZI[ KYJ[ MYN[ MZO[ WZU[ WYV[ YYZ[ YZ[[", - "G]LFL[ MGMZ NFN[ IFUFXGYHZJZMYOXPUQNQ XHYJYMXO UFWGXIXNWPUQ I[Q[ JFLG KFLH OFNH PFNG LZJ[ LYK[ NYO[ NZP[", - "G]IFPPQQ JFQP KFRPI[ IFYFZLYIWF VFYH TFYG KYYY JZYZ I[Y[ZUYXWY", - "H\\JFJL QFQ[ RGRZ SFS[ ZFZL JFZF N[V[ KFJL LFJI MFJH OFJG UFZG WFZH XFZI YFZL QZO[ QYP[ SYT[ SZU[", - "H\\JMKILGMFOFPGQIRM LHMGOGPH JMKJMHOHPIQMQ[ RMR[ ZMYJWHUHTISMS[ XHWGUGTH ZMYIXGWFUFTGSIRM N[V[ QYP[ QZO[ SZU[ SYT[", - "G]QFQ[ RGRZ SFS[ NFVF N[V[ OFQG PFQH TFSH UFSG QZO[ QYP[ SYT[ SZU[ OKLLKMJOJRKTLUOVUVXUYTZRZOYMXLUKOK LMKOKRLT XTYRYOXM OKMLLOLRMUOV UVWUXRXOWLUK", - "H\\KFW[ LFX[ MFY[ XGLZ IFPF UF[F I[O[ T[[[ JFMH NFMH OFMG VFXG ZFXG LZJ[ LZN[ WZU[ WYV[ WYZ[", - "F^QFQ[ RGRZ SFS[ NFVF N[V[ OFQG PFQH TFSH UFSG QZO[ QYP[ SYT[ SZU[ HMIMJNKQLSMTPUTUWTXSYQZN[M\\M LRKNJLILKN HMIKJKKLLPMSNTPU YN[LZLYNXR TUVTWSXPYLZK[K\\M", - "G]NYKYJWK[O[MVKRJOJLKIMGPFTFWGYIZLZOYRWVU[Y[ZWYYVY LSKOKLLI XIYLYOXS O[MULPLKMHNGPF TFVGWHXKXPWUU[ KZNZ VZYZ", - "H\\UFIZ SJT[ THUZ UFUHVYV[ LUTU F[L[ Q[X[ IZG[ IZK[ TZR[ TYS[ VYW[", - "F^OFI[ PFJ[ QFK[ LFWFZG[I[KZNYOVP YGZIZKYNXO WFXGYIYKXNVP NPVPXQYSYUXXVZR[F[ WQXSXUWXUZ VPWRWUVXTZR[ MFPG NFOH RFPH SFPG JZG[ JYH[ KYL[ JZM[", - "H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV QHOJNLMOLSLWMY TFRGPJOLNOMSMXNZP[", - "F]OFI[ PFJ[ QFK[ LFUFXGYHZKZOYSWWUYSZO[F[ WGXHYKYOXSVWTY UFWHXKXOWSUWRZO[ MFPG NFOH RFPH SFPG JZG[ JYH[ KYL[ JZM[", - "F]OFI[ PFJ[ QFK[ ULST LF[FZL NPTP F[U[WV MFPG NFOH RFPH SFPG WFZG XFZH YFZI ZFZL ULSPST TNRPSR TOQPSQ JZG[ JYH[ KYL[ JZM[ P[UZ R[UY UYWV", - "F\\OFI[ PFJ[ QFK[ ULST LF[FZL NPTP F[N[ MFPG NFOH RFPH SFPG WFZG XFZH YFZI ZFZL ULSPST TNRPSR TOQPSQ JZG[ JYH[ KYL[ JZM[", - "H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT QHOJNLMOLSLWMY VXWWXT TFRGPJOLNOMSMXNZP[ R[TZVWWT TT\\T UTWU VTWW ZTXV [TXU", - "E_NFH[ OFI[ PFJ[ ZFT[ [FU[ \\FV[ KFSF WF_F LPXP E[M[ Q[Y[ LFOG MFNH QFOH RFOG XF[G YFZH ]F[H ^F[G IZF[ IYG[ JYK[ IZL[ UZR[ UYS[ VYW[ UZX[", - "KYTFN[ UFO[ VFP[ QFYF K[S[ RFUG SFTH WFUH XFUG OZL[ OYM[ PYQ[ OZR[", - "I\\WFRWQYO[ XFTSSVRX YFUSSXQZO[M[KZJXJVKULUMVMWLXKX KVKWLWLVKV TF\\F UFXG VFWH ZFXH [FXG", - "F]OFI[ PFJ[ QFK[ \\GMR QOU[ ROV[ SNWZ LFTF YF_F F[N[ R[Y[ MFPG NFOH RFPH SFPG ZF\\G ^F\\G JZG[ JYH[ KYL[ JZM[ UZS[ UYT[ VYX[", - "H\\QFK[ RFL[ SFM[ NFVF H[W[YU OFRG PFQH TFRH UFRG LZI[ LYJ[ MYN[ LZO[ R[WZ T[XX V[YU", - "D`MFGZ MGNYN[ NFOY OFPX [FPXN[ [FU[ \\FV[ ]FW[ JFOF [F`F D[J[ R[Z[ KFMG LFMH ^F\\H _F\\G GZE[ GZI[ VZS[ VYT[ WYX[ VZY[", - "F_OFIZ OFV[ PFVX QFWX \\GWXV[ LFQF YF_F F[L[ MFPG NFPH ZF\\G ^F\\G IZG[ IZK[", - "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF OIMLLOKSKWLY UXWUXRYNYJXH SFQGOJNLMOLSLXMZN[ Q[SZUWVUWRXNXIWGVF", - "F]OFI[ PFJ[ QFK[ LFXF[G\\I\\K[NYPUQMQ ZG[I[KZNXP XFYGZIZKYNWPUQ F[N[ MFPG NFOH RFPH SFPG JZG[ JYH[ KYL[ JZM[", - "G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF OIMLLOKSKWLY UXWUXRYNYJXH SFQGOJNLMOLSLXMZN[ Q[SZUWVUWRXNXIWGVF LXMVOUPURVSXT]U^V^W] T^U_V_ SXS_T`V`W]W\\", - "F^OFI[ PFJ[ QFK[ LFWFZG[I[KZNYOVPNP YGZIZKYNXO WFXGYIYKXNVP RPTQURWXXYYYZX WYXZYZ URVZW[Y[ZXZW F[N[ MFPG NFOH RFPH SFPG JZG[ JYH[ KYL[ JZM[", - "G^ZH[H\\F[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ NLONVRWT OGNINKOMUPWRXTXWWYVZS[O[LZKYJWJUI[JYKY", - "G]TFN[ UFO[ VFP[ MFKL ]F\\L MF]F K[S[ NFKL PFLI RFMG YF\\G ZF\\H [F\\I \\F\\L OZL[ OYM[ PYQ[ OZR[", - "F_NFKQJUJXKZN[R[UZWXXU\\G OFLQKUKYLZ PFMQLULYN[ KFSF YF_F LFOG MFNH QFOH RFOG ZF\\G ^F\\G", - "H\\NFNHOYO[ OGPX PFQW [GO[ LFSF XF^F MFNH QFPH RFOG YF[G ]F[G", - "E_MFMHKYK[ NGLX OFMW UFMWK[ UFUHSYS[ VGTX WFUW ]GUWS[ JFRF UFWF ZF`F KFNG LFMH PFNI QFNG [F]G _F]G", - "G]NFT[ OFU[ PFV[ [GIZ LFSF XF^F F[L[ Q[X[ MFOH QFPH RFPG YF[G ]F[G IZG[ IZK[ TZR[ TYS[ UYW[", - "G]MFQPN[ NFRPO[ OFSPP[ \\GSP KFRF YF_F K[S[ LFNG PFOH QFNG ZF\\G ^F\\G OZL[ OYM[ PYQ[ OZR[", - "G]ZFH[ [FI[ \\FJ[ \\FNFLL H[V[XU OFLL PFMI RFNG R[VZ T[WX U[XU", - "", - "", - "", - "", - "", - "", - "H\\JFR[ KFRX LFSX JFZFR[ LGYG LHYH", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "I]NPNOOOOQMQMONNPMTMVNWOXQXXYZZ[ VOWQWXXZ TMUNVPVXWZZ[[[ VRUSPTMULWLXMZP[S[UZVX NUMWMXNZ USQTOUNWNXOZP[", - "G\\LFL[MZOZ MGMY IFNFNZ NPONQMSMVNXPYSYUXXVZS[Q[OZNX WPXRXVWX SMUNVOWRWVVYUZS[ JFLG KFLH", - "H[WQWPVPVRXRXPVNTMQMNNLPKSKULXNZQ[S[VZXX MPLRLVMX QMONNOMRMVNYOZQ[", - "H]VFV[[[ WGWZ SFXFX[ VPUNSMQMNNLPKSKULXNZQ[S[UZVX MPLRLVMX QMONNOMRMVNYOZQ[ TFVG UFVH XYY[ XZZ[", - "H[MSXSXQWOVNSMQMNNLPKSKULXNZQ[S[VZXX WRWQVO MPLRLVMX VSVPUNSM QMONNOMRMVNYOZQ[", - "KYWHWGVGVIXIXGWFTFRGQHPKP[ RHQKQZ TFSGRIR[ MMVM M[U[ PZN[ PYO[ RYS[ RZT[", - "I\\XNYOZNYMXMVNUO QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM OONQNSOU UUVSVQUO QMPNOPOTPVQW SWTVUTUPTNSM NUMVLXLYM[N\\Q]U]X^Y_ N[Q\\U\\X] LYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[ ObMaL_L^M\\O[", - "G^LFL[ MGMZ IFNFN[ NQOOPNRMUMWNXOYRY[ WOXRXZ UMVNWQW[ I[Q[ T[\\[ JFLG KFLH LZJ[ LYK[ NYO[ NZP[ WZU[ WYV[ YYZ[ YZ[[", - "LXQFQHSHSFQF RFRH QGSG QMQ[ RNRZ NMSMS[ N[V[ OMQN PMQO QZO[ QYP[ SYT[ SZU[", - "KXRFRHTHTFRF SFSH RGTG RMR^QaPb SNS]R` OMTMT]S`RaPbMbLaL_N_NaMaM` PMRN QMRO", - "G]LFL[ MGMZ IFNFN[ WNNW RSY[ RTX[ QTW[ TM[M I[Q[ T[[[ JFLG KFLH UMWN ZMWN LZJ[ LYK[ NYO[ NZP[ WYU[ VYZ[", - "LXQFQ[ RGRZ NFSFS[ N[V[ OFQG PFQH QZO[ QYP[ SYT[ SZU[", - "AcFMF[ GNGZ CMHMH[ HQIOJNLMOMQNROSRS[ QORRRZ OMPNQQQ[ SQTOUNWMZM\\N]O^R^[ \\O]R]Z ZM[N\\Q\\[ C[K[ N[V[ Y[a[ DMFN EMFO FZD[ FYE[ HYI[ HZJ[ QZO[ QYP[ SYT[ SZU[ \\ZZ[ \\Y[[ ^Y_[ ^Z`[", - "G^LML[ MNMZ IMNMN[ NQOOPNRMUMWNXOYRY[ WOXRXZ UMVNWQW[ I[Q[ T[\\[ JMLN KMLO LZJ[ LYK[ NYO[ NZP[ WZU[ WYV[ YYZ[ YZ[[", - "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM MPLRLVMX WXXVXRWP QMONNOMRMVNYOZQ[ S[UZVYWVWRVOUNSM", - "G\\LMLb MNMa IMNMNb NPONQMSMVNXPYSYUXXVZS[Q[OZNX WPXRXVWX SMUNVOWRWVVYUZS[ IbQb JMLN KMLO LaJb L`Kb N`Ob NaPb", - "H\\VNVb WOWa UNWNXMXb VPUNSMQMNNLPKSKULXNZQ[S[UZVX MPLRLVMX QMONNOMRMVNYOZQ[ Sb[b VaTb V`Ub X`Yb XaZb", - "IZNMN[ ONOZ KMPMP[ WOWNVNVPXPXNWMUMSNQPPS K[S[ LMNN MMNO NZL[ NYM[ PYQ[ PZR[", - "J[WOXMXQWOVNTMPMNNMOMQNSPTUUWVXY NNMQ NRPSUTWU XVWZ MONQPRUSWTXVXYWZU[Q[OZNYMWM[NY", - "KZPHPVQYRZT[V[XZYX QHQWRY PHRFRWSZT[ MMVM", - "G^LMLVMYNZP[S[UZVYWW MNMWNY IMNMNWOZP[ WMW[\\[ XNXZ TMYMY[ JMLN KMLO YYZ[ YZ[[", - "I[LMR[ MMRY NMSY XNSYR[ JMQM TMZM KMNO PMNN VMXN YMXN", - "F^JMN[ KMNX LMOX RMOXN[ RMV[ SMVX RMTMWX ZNWXV[ GMOM WM]M HMKN NMLN XMZN \\MZN", - "H\\LMV[ MMW[ NMX[ WNMZ JMQM TMZM J[P[ S[Z[ KMMN PMNN UMWN YMWN MZK[ MZO[ VZT[ WZY[", - "H[LMR[ MMRY NMSY XNSYP_NaLbJbIaI_K_KaJaJ` JMQM TMZM KMNO PMNN VMXN YMXN", - "I[VML[ WMM[ XMN[ XMLMLQ L[X[XW MMLQ NMLP OMLO QMLN S[XZ U[XY V[XX W[XW", - "G^[MZQYTWXUZR[P[MZKXJUJSKPMNPMRMUNVOWQYXZZ[[\\[ ZMYQXTWVUYTZR[ LXKVKRLP P[NZMYLVLRMONNPM RMTNUOVQXXYZ[[", - "G\\QFNGMHLJKNKb NHMJLNLa QFOGNIMNMb QFSFVGWHXJXLWNVOSP PPTPWQXRYTYWXYWZT[Q[OZNYMW VHWJWLVN WRXTXWWY SFUGVIVMUOSP TPVQWSWXVZT[ KbMb", - "F\\HRINKMMMONPOQRRYSb IOKNMNOOPP HRIPKOMOOPPQQTRYRa XMWPVRTUSWR[Qb YMWQ ZMYOWRTVSXR[ XMZM QbSb", - "H\\SMQMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMPLNKMJMHNGPFSFWH MPLSLUMX WXXUXSWP QMONNOMRMVNYOZQ[ S[UZVYWVWRVOUNOKNJNIOHQGTGWH", - "I[SMUNVOWOVNSMQMMNLOLQMRQS SSQSMTKVKXMZP[S[VZXXWXVZ NNMOMQNR MULVLXMY QMONNONQORQS QSNTMVMXNZP[", - "I[QHRGRFQFPGPIQJTKXKYKYJXJUKSLPNNPMRLULWMYNZP[S\\U]V_VaUbSbRaR`S`Sa POOPNRMUMWNYOZ UKRMQNOQNTNWOYQ[S\\", - "G]JMKNLPL[ KMLNMPMZ HPINJMLMMNNPN[ UMVNWQWb WOXRXa NQOOPNRMUMWNXOYRYb L[N[ WbYb", - "F]IMJNKPKTLWMYNZQ[S[VZWYXWYRYOXJVGTFRFPGOIOKPMSOVP[Q JMKNLPLTMWNY VYWWXRXOWJVHTG GPHNIMKMLNMPMTNXOZQ[ S[UZVXWSWNVJUHSGQGOI", - "KZNMONPPPXQZS[U[WZXX OMPNQPQXRZ LPMNNMPMQNRPRXSZT[", - "G]JMKNLPL[ KMLNMPMZ HPINJMLMMNNPN[ SOUNWNXOXPZPZNXMVMTNQQOTNW XNYOYP PSQSWYYYZX TWWZYZ RTUZV[X[YZZX L[N[", - "H\\JGKFMFOGQIXXYZZ[ OHPIWXXY MFNGOIVXXZZ[[[ RMJZJ[K[RM", - "G]KMKb LNLa MMMb VMVXWZX[Z[[Z\\X WNWXXZY[ XMXXYZZ[ MXNZP[R[TZUYVW KMMM VMXM KbMb", - "G]JMKNLPMTN[ KMLNMPNTOZ HPINJMLMMNNPOTPZ VVWTXQXMYMZNYQXSVVTXQZN[ XRYOYM", - "JZPGSFRFPGOHOIPJSKVLWKVJSKPLNMMOMQNRPSSTVUWTVSSTOUMVLXLZM[O\\S]U^V_VaTbRbOaPaRb OMNONQOR NVMXMZN[ VKSKQLPMOOOQQSST VTSTPUOVNXNZP\\S]", - "H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM MPLRLVMX WXXVXRWP QMONNOMRMVNYOZQ[ S[UZVYWVWRVOUNSM", - "G]IQJOKNMM[M KOMNZN IQJPLO[O OONZM[LZMWOO UOVZW[XZWWUO [M[O OOMZ UOWZ", - "G\\QMNNLPKTKb MPLTLa QMONNOMSMb MWNYOZQ[S[VZXXYUYSXPVNSMQM WXXVXRWP S[UZVYWVWRVOUNSM KbMb", - "G]PMMNKPJSJUKXMZP[R[UZWXXUXSWPUNRM LPKRKVLX VXWVWRVP PMNNMOLRLVMYNZP[ R[TZUYVVVRUOTNRM RMZO[N[MPM RMZN", - "H\\JQKOLNNMZM LONNYN JQKPMOZO ROQZR[SZRO ZMZO RORZ", - "G\\JMKNLPLUMXOZQ[S[UZWXXVYRYNXMWMXPXSWWUZ KMLNMPMUNX WMXNXO HPINJMLMMNNPNVOYQ[", - "G]RQQNPMNMLNKOJRJUKXMZP[T[WZYXZUZRYOXNVMTMSNRQ LOKRKULX XXYUYRXO NMMNLQLVMYNZP[ T[VZWYXVXQWNVM RQQb RQRa RQSb QbSb", - "H\\LMMNNPT_VaXbZb[a NOOPU_V` INJMLMNNPPV_WaXb VSXPYMZMYOVSN\\K`JbKbL_N\\", - "F]HNINJPJUKXMZP[T[VZXXYVZRZNYMXMYPYSXWVZ JNKPKULX XMYNYO GPHNIMJMKNLPLVMYNZP[ QFSb RGRa SFQb QFSF QbSb", - "F^NMLNJPISIWJYKZM[O[QZRYSWSTRSQTQWRYSZU[W[YZZY[W[SZPXNVM KPJSJWKY RTRX YYZWZSYP NMLOKRKWLZM[ W[XZYWYRXOVM", - "G]WMUTUXVZW[Y[[Y\\W XMVTVZ WMYMWTVX UTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT NNLQKTKWLY PMNOMQLTLWMZN[", - "I\\PFNMMSMWNYOZQ[S[VZXWYTYRXOWNUMSMQNPOOQNT QFOMNQNWOZ VYWWXTXQWO MFRFPMNT S[UYVWWTWQVNUM NFQG OFPH", - "I[WQWPVPVRXRXPWNUMRMONMQLTLVMYNZP[R[UZWW OONQMTMWNY RMPOOQNTNWOZP[", - "G]YFVQUUUXVZW[Y[[Y\\W ZFWQVUVZ VF[FWTVX UTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT MOLQKTKWLY PMNOMQLTLWMZN[ WFZG XFYH", - "I[MVQUTTWRXPWNUMRMONMQLTLVMYNZP[R[UZWX OONQMTMWNY RMPOOQNTNWOZP[", - "JZZHZGYGYI[I[GZFXFVGTISKRNQRO[N^M`Kb TJSMRRP[O^ XFVHUJTMSRQZP]O_MaKbIbHaH_J_JaIaI` NMYM", - "H]XMT[S^QaOb YMU[S_ XMZMV[T_RaObLbJaI`I^K^K`J`J_ VTVQUNSMQMNNLQKTKVLYMZO[Q[SZTYUWVT NOMQLTLWMY QMOONQMTMWNZO[", - "G]OFI[K[ PFJ[ LFQFK[ MTOPQNSMUMWNXPXSVX WNWRVVVZ WPUUUXVZW[Y[[Y\\W MFPG NFOH", - "KXTFTHVHVFTF UFUH TGVG LQMOOMQMRNSPSSQX RNRRQVQZ RPPUPXQZR[T[VYWW", - "KXUFUHWHWFUF VFVH UGWG MQNOPMRMSNTPTSRZQ]P_NaLbJbIaI_K_KaJaJ` SNSSQZP]O_ SPRTP[O^N`Lb", - "G]OFI[K[ PFJ[ LFQFK[ YOYNXNXPZPZNYMWMUNQROS MSOSQTRUTYUZWZ QUSYTZ OSPTRZS[U[WZYW MFPG NFOH", - "LXTFQQPUPXQZR[T[VYWW UFRQQUQZ QFVFRTQX RFUG SFTH", - "@cAQBODMFMGNHPHSF[ GNGSE[ GPFTD[F[ HSJPLNNMPMRNSPSSQ[ RNRSP[ RPQTO[Q[ SSUPWNYM[M]N^P^S\\X ]N]R\\V\\Z ]P[U[X\\Z][_[aYbW", - "F^GQHOJMLMMNNPNSL[ MNMSK[ MPLTJ[L[ NSPPRNTMVMXNYPYSWX XNXRWVWZ XPVUVXWZX[Z[\\Y]W", - "H\\QMNNLQKTKVLYMZP[S[VZXWYTYRXOWNTMQM NOMQLTLWMY VYWWXTXQWO QMOONQMTMWNZP[ S[UYVWWTWQVNTM", - "G]HQIOKMMMNNOPOSNWKb NNNSMWJb NPMTIb OTPQQORNTMVMXNYOZRZTYWWZT[R[PZOWOT XOYQYTXWWY VMWNXQXTWWVYT[ FbNb JaGb J`Hb K`Lb JaMb", - "G\\WMQb XMRb WMYMSb UTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT MOLQKTKWLY PMNOMQLTLWMZN[ NbVb RaOb R`Pb S`Tb RaUb", - "I[JQKOMMOMPNQPQTO[ PNPTN[ PPOTM[O[ YOYNXNXPZPZNYMWMUNSPQT", - "J[XPXOWOWQYQYOXNUMRMONNONQOSQTTUVVWX ONNQ ORQSTTVU WVVZ NOOQQRTSVTWVWXVZS[P[MZLYLWNWNYMYMX", - "KYTFQQPUPXQZR[T[VYWW UFRQQUQZ TFVFRTQX NMXM", - "F^GQHOJMLMMNNPNSLX MNMRLVLZ MPKUKXLZN[P[RZTXVU XMVUVXWZX[Z[\\Y]W YMWUWZ XMZMXTWX", - "H\\IQJOLMNMONPPPSNX ONORNVNZ OPMUMXNZP[R[TZVXXUYQYMXMXNYP", - "CaDQEOGMIMJNKPKSIX JNJRIVIZ JPHUHXIZK[M[OZQXRU TMRURXSZU[W[YZ[X]U^Q^M]M]N^P UMSUSZ TMVMTTSX", - "G]JQLNNMPMRNSPSR PMQNQRPVOXMZK[I[HZHXJXJZIZIY RORRQVQY ZOZNYNYP[P[NZMXMVNTPSRRVRZS[ PVPXQZS[U[WZYW", - "G]HQIOKMMMNNOPOSMX NNNRMVMZ NPLULXMZO[Q[SZUXWT YMU[T^RaPb ZMV[T_ YM[MW[U_SaPbMbKaJ`J^L^L`K`K_", - "H\\YMXOVQNWLYK[ XOOOMPLR VORNONNO VORMOMMOLR LYUYWXXV NYRZUZVY NYR[U[WYXV", - "", - "", - "", - "", - "", - "", - "H\\WQVOUNSMQMNNLPKSKULXNZQ[S[VZWYXWYSYNXJWHVGSFQFNGMHNHOGQF MPLRLVMX VYWWXSXNWJVH QMONNOMRMVNYOZQ[ S[UZVXWTWMVIUGSF", - "I[UMWNXOYOXNUMRMONMPLSLUMXOZR[U[XZYYXYWZU[ NPMSMUNX RMPNOONRNVOYPZR[ NTTUUTTSNT NTTT", - "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF NHMJLNLSMWNY VYWWXSXNWJVH QFOGNIMNMSNXOZQ[ S[UZVXWSWNVIUGSF LPXQ LQXP", - "G]PMMNKPJSJUKXMZP[T[WZYXZUZSYPWNTMPM LPKSKULX XXYUYSXP PMNNMOLRLVMYNZP[T[VZWYXVXRWOVNTM QFSb RGRa SFQb QFSF QbSb", - "H\\TMVNXPYPYOWNTMPMMNLOKQKSLUNWPXRYSZT\\T^S_Q_O^P^Q_ MOLQLSMUOW PMNNMPMSNURY YPXO", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NV", - "JZ", - "H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF NHMJLNLSMWNY VYWWXSXNWJVH QFOGNIMNMSNXOZQ[ S[UZVXWSWNVIUGSF", - "H\\QHQ[ RHRZ SFS[ SFPINJ M[W[ QZO[ QYP[ SYT[ SZU[", - "H\\LJLKMKMJLJ LIMINJNKMLLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ WHXJXLWN TFVGWJWLVNTPPR KYLXNXSYWYYX NXSZWZXY NXS[W[XZYXYV", - "H\\LJLKMKMJLJ LIMINJNKMLLLKKKJLHMGPFTFWGXIXLWNTO VGWIWLVN SFUGVIVLUNSO QOTOVPXRYTYWXYWZT[P[MZLYKWKVLUMUNVNWMXLX WRXTXWWY SOUPVQWTWWVZT[ LVLWMWMVLV", - "H\\SIS[ THTZ UFU[ UFJUZU P[X[ SZQ[ SYR[ UYV[ UZW[", - "H\\MFKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMUNVNWMXLX WPXRXVWX SMUNVOWRWVVYUZS[ LVLWMWMVLV MFWF MGUG MHQHUGWF", - "H\\VIVJWJWIVI WHVHUIUJVKWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNQNOONPMR NIMKLOLUMXNY WXXVXSWQ RFPGOHNJMNMUNXOZQ[ S[UZVYWVWSVPUOSN", - "H\\KFKL YFYIXLTQSSRWR[ SRRTQWQ[ XLSQQTPWP[R[ KJLHNFPFUIWIXHYF MHNGPGRH KJLINHPHUI", - "H\\PFMGLILLMNPOTOWNXLXIWGTFPF NGMIMLNN VNWLWIVG PFOGNINLONPO TOUNVLVIUGTF POMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO MQLSLWMY WYXWXSWQ PONPMSMWNZP[ T[VZWWWSVPTO", - "H\\MWMXNXNWMW WOVQURSSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNVOWOXNYMY MPLNLKMI VHWIXLXRWVVX QSORNQMNMKNHOGQF SFUGVIWLWSVWUYTZR[", - "MXRXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXTZS[R[QZQYRXSXTYT\\S^Q_ RYRZSZSYRY S[T\\ TZS^", - "MXRMQNQORPSPTOTNSMRM RNROSOSNRN RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXRMQNQORPSPTOTNSMRM RNROSOSNRN TZS[R[QZQYRXSXTYT\\S^Q_ RYRZSZSYRY S[T\\ TZS^", - "MXRFQGQIRQ RFRTST RFSFST SFTGTISQ RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "I\\MKMJNJNLLLLJMHNGPFTFWGXHYJYLXNWOSQ WHXIXMWN TFVGWIWMVOUP RQRTSTSQRQ RXQYQZR[S[TZTYSXRX RYRZSZSYRY", - "MXTFRGQIQLRMSMTLTKSJRJQK RKRLSLSKRK RGQK QIRJ", - "MXTHSIRIQHQGRFSFTGTJSLQM RGRHSHSGRG SITJ THSL", - "E_[O[NZNZP\\P\\N[MZMYNXPVUTXRZP[L[JZIXIUJSPORMSKSIRGPFNGMIMLNOPRTWWZY[[[\\Y\\X KZJXJUKSLR RMSI SKRG NGMK NNPQTVWYYZ N[LZKXKULSPO MINMQQUVXYZZ[Z\\Y", - "H\\PBP_ TBT_ XKXJWJWLYLYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ LLMNOOUQWRXT MGLILKMMONUPXRYTYWXYWZT[P[MZLYKWKUMUMWLWLV", - "G^[BIbJb [B\\BJb", - "KYUBSDQGOKNPNTOYQ]S`Ub QHPKOOOUPYQ\\ SDRFQIPOPUQ[R^S`", - "KYOBQDSGUKVPVTUYS]Q`Ob SHTKUOUUTYS\\ QDRFSITOTUS[R^Q`", - "JZRFQGSQRR RFRR RFSGQQRR MINIVOWO MIWO MIMJWNWO WIVINOMO WIMO WIWJMNMO", - "F_JQ[Q[R JQJR[R", - "F_RIRZSZ RISISZ JQ[Q[R JQJR[R", - "F_JM[M[N JMJN[N JU[U[V JUJV[V", - "NWSFRGRM SGRM SFTGRM", - "I[NFMGMM NGMM NFOGMM WFVGVM WGVM WFXGVM", - "KYQFOGNINKOMQNSNUMVKVIUGSFQF QFNIOMSNVKUGQF SFOGNKQNUMVISF", - "F^ZIJRZ[ ZIZJLRZZZ[", - "F^JIZRJ[ JIJJXRJZJ[", - "G^OFObPb OFPFPb UFUbVb UFVFVb JP[P[Q JPJQ[Q JW[W[X JWJX[X", - "F^[FYGVHSHPGNFLFJGIIIKKMMMOLPJPHNF [FH[ [FI[ [FJ[ YTWTUUTWTYV[X[ZZ[X[VYT OGLFIIJLMMPJOG NFJGIK KMOLPH ZUWTTWUZX[[XZU YTUUTY V[ZZ[V H[J[", - "E`VNULSKQKOLNMMOMRNTOUQVSVUUVS OMNONROT QKPLOOORPUQV VKVSWUYVZV\\U]R]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYXYWZ WLWSXU VKXKXSYUZV", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "NV", - "JZ", - "H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF QHOJNLMOLSLWMY TYVWWUXRYNYJXH TFRGPJOLNOMSMXNZO[ Q[SZUWVUWRXNXIWGVF", - "H]TJO[Q[ WFUJP[ WFQ[ WFTIQKOL TJRKOL", - "H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMWOMUKWI[ XGYIYKXMVOSQ VFWGXIXKWMUOMU JYKXMXRYWYXX MXRZWZ MXR[U[WZXXXW", - "H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMXNVOSP XGYIYKXMWN VFWGXIXKWMUOSP QPSPVQWRXTXWWYUZR[O[LZKYJWJULULWKWKV VRWTWWVY SPUQVSVWUYTZR[", - "H]WJR[T[ ZFXJS[ ZFT[ ZFJUZU", - "H]QFLP QF[F QGYG PHUHYG[F LPMOPNSNVOWPXRXUWXUZQ[N[LZKYJWJULULWKWKV VPWRWUVXTZ SNUOVQVUUXSZQ[", - "H]YJYIXIXKZKZIYGWFTFQGOIMLLOKSKVLYMZO[R[UZWXXVXSWQVPTOQOOPNQMS PINLMOLSLWMY VXWVWSVQ TFRGPJOLNOMSMXNZO[ R[TZUYVVVRUPTO", - "H]NFLL [FZIXLTQRTQWP[ RSPWO[ XLRRPUOWN[P[ MIPFRFWI OGRGWI MIOHRHWIYIZH[F", - "H]SFPGOHNJNMOOQPTPWOYNZLZIYGWFSF UFPG PHOJONPO OORP SPWO XNYLYIXG YGUF SFQHPJPNQP TPVOWNXLXHWF QPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RPMQ NQLSKUKXLZ KZP[VZ VYWWWTVR VQSP QPOQMSLULXMZN[ R[TZUYVWVSUQTP", - "H]XNWPVQTRQROQNPMNMKNIPGSFVFXGYHZKZNYRXUVXTZQ[N[LZKXKVMVMXLXLW OPNNNKOI XHYJYNXRWUUX QRPQOOOKPHQGSF VFWGXIXNWRVUUWSZQ[", - "MXPXOYOZP[Q[RZRYQXPX PYPZQZQYPY", - "MXQ[P[OZOYPXQXRYR[Q]P^N_ PYPZQZQYPY Q[Q\\P^", - "MXSMRNROSPTPUOUNTMSM SNSOTOTNSN PXOYOZP[Q[RZRYQXPX PYPZQZQYPY", - "MXSMRNROSPTPUOUNTMSM SNSOTOTNSN Q[P[OZOYPXQXRYR[Q]P^N_ PYPZQZQYPY Q[Q\\P^", - "MXVFUFTGRT VGUGRT VGVHRT VFWGWHRT PXOYOZP[Q[RZRYQXPX PYPZQZQYPY", - "H]OKOJPJPLNLNJOHPGSFWFZG[I[KZMYNWOSPQQQSSTTT UFZG YGZIZKYMXNVO WFXGYIYKXMWNSPRQRSST PXOYOZP[Q[RZRYQXPX PYPZQZQYPY", - "MXWFUGTHSJSLTMUMVLVKUJTJ UGTITJ TKTLULUKTK", - "MXVIUITHTGUFVFWGWIVKULSM UGUHVHVGUG VIVJUL", - "E_\\O\\N[N[P]P]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQURWTZV[X[YYYX L[HZ IZHXHVITJSLR PPQSTYVZ K[JZIXIVJTKSMRRO OLPOQRSVUYWZXZYY", - "H]TBL_ YBQ_ ZKZJYJYL[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ NLONVRWT OGNINKOMUPWRXTXWWYVZS[O[LZKYJWJULULWKWKV", - "G^_BEbFb _B`BFb", - "JZZBXCUERHPKNOMSMXN\\O_Qb SHQKOONTN\\ ZBWDTGRJQLPOOSN\\ NTO]P`Qb", - "JZSBUEVHWLWQVUTYR\\O_LaJb VHVPUUSYQ\\ SBTDUGVP VHUQTUSXRZP]M`Jb", - "J[TFSGUQTR TFTR TFUGSQTR OIPIXOYO OIYO OIOJYNYO YIXIPOOO YIOO YIYJONOO", - "F_JQ[Q[R JQJR[R", - "F_RIRZSZ RISISZ JQ[Q[R JQJR[R", - "F_JM[M[N JMJN[N JU[U[V JUJV[V", - "MWUFTGRM UGRM UFVGRM", - "H\\PFOGMM PGMM PFQGMM ZFYGWM ZGWM ZF[GWM", - "KZSFQGPIPKQMSNUNWMXKXIWGUFSF SFPIQMUNXKWGSF UFQGPKSNWMXIUF", - "F^ZIJRZ[ ZIZJLRZZZ[", - "F^JIZRJ[ JIJJXRJZJ[", - "G^SFKbLb SFTFLb YFQbRb YFZFRb KP\\P\\Q KPKQ\\Q IWZWZX IWIXZX", - "E^^F\\GXHUHQGOFMFKGJIJKLMNMPLQJQHOF ^FE[ ^FF[ ^FG[ XTVTTUSWSYU[W[YZZXZVXT PGMFJIKLNMQJPG OFKGJK LMPLQH YUVTSWTZW[ZXYU XTTUSY U[YZZV E[G[", - "E`UQUNTLRKPKNLMMLPLSMUOVQVSUTTUQ OLNMMPMSNU RKPLOMNPNSOUPV VKUQUSVUXVZV\\U]R]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYXYWZ WKVQVSWU VKXKWQWSXUZV", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - 0 }; - -} - -/* End of file. */ diff --git a/modules/dynamicuda/CMakeLists.txt b/modules/dynamicuda/CMakeLists.txt deleted file mode 100644 index 75ace87..0000000 --- a/modules/dynamicuda/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -if(NOT ENABLE_DYNAMIC_CUDA) - ocv_module_disable(dynamicuda) -endif() - -set(the_description "Dynamic CUDA linkage") - -add_definitions(-DUSE_CUDA) -ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef -Wshadow) -ocv_module_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include") -set(OPENCV_MODULE_TYPE SHARED) -if (BUILD_FAT_JAVA_LIB) - ocv_define_module(dynamicuda INTERNAL opencv_java PRIVATE_REQUIRED ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) -else() - ocv_define_module(dynamicuda INTERNAL opencv_core PRIVATE_REQUIRED ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) -endif() diff --git a/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp b/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp deleted file mode 100644 index 00f0873..0000000 --- a/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp +++ /dev/null @@ -1,1143 +0,0 @@ -#ifndef __GPUMAT_CUDA_HPP__ -#define __GPUMAT_CUDA_HPP__ - -#ifndef HAVE_CUDA -typedef void* cudaStream_t; -#endif - -class DeviceInfoFuncTable -{ -public: - // cv::DeviceInfo - virtual size_t sharedMemPerBlock(int id) const = 0; - virtual void queryMemory(int id, size_t&, size_t&) const = 0; - virtual size_t freeMemory(int id) const = 0; - virtual size_t totalMemory(int id) const = 0; - virtual bool supports(int id, FeatureSet) const = 0; - virtual bool isCompatible(int id) const = 0; - virtual std::string name(int id) const = 0; - virtual int majorVersion(int id) const = 0; - virtual int minorVersion(int id) const = 0; - virtual int multiProcessorCount(int id) const = 0; - - virtual int getCudaEnabledDeviceCount() const = 0; - virtual void setDevice(int) const = 0; - virtual int getDevice() const = 0; - virtual void resetDevice() const = 0; - virtual bool deviceSupports(FeatureSet) const = 0; - - // cv::TargetArchs - virtual bool builtWith(FeatureSet) const = 0; - virtual bool has(int, int) const = 0; - virtual bool hasPtx(int, int) const = 0; - virtual bool hasBin(int, int) const = 0; - virtual bool hasEqualOrLessPtx(int, int) const = 0; - virtual bool hasEqualOrGreater(int, int) const = 0; - virtual bool hasEqualOrGreaterPtx(int, int) const = 0; - virtual bool hasEqualOrGreaterBin(int, int) const = 0; - - virtual void printCudaDeviceInfo(int) const = 0; - virtual void printShortCudaDeviceInfo(int) const = 0; - - virtual ~DeviceInfoFuncTable() {}; -}; - -class GpuFuncTable -{ -public: - // GpuMat routines - virtual void copy(const Mat& src, GpuMat& dst) const = 0; - virtual void copy(const GpuMat& src, Mat& dst) const = 0; - virtual void copy(const GpuMat& src, GpuMat& dst) const = 0; - - virtual void copyWithMask(const GpuMat& src, GpuMat& dst, const GpuMat& mask) const = 0; - - // gpu::device::convertTo funcs - virtual void convert(const GpuMat& src, GpuMat& dst, double alpha, double beta, cudaStream_t stream = 0) const = 0; - virtual void convert(const GpuMat& src, GpuMat& dst) const = 0; - - // for gpu::device::setTo funcs - virtual void setTo(cv::gpu::GpuMat&, cv::Scalar, const cv::gpu::GpuMat&, cudaStream_t) const = 0; - - virtual void mallocPitch(void** devPtr, size_t* step, size_t width, size_t height) const = 0; - virtual void free(void* devPtr) const = 0; - - virtual ~GpuFuncTable() {} -}; - -class EmptyDeviceInfoFuncTable: public DeviceInfoFuncTable -{ -public: - size_t sharedMemPerBlock(int) const { throw_nogpu; return 0; } - void queryMemory(int, size_t&, size_t&) const { throw_nogpu; } - size_t freeMemory(int) const { throw_nogpu; return 0; } - size_t totalMemory(int) const { throw_nogpu; return 0; } - bool supports(int, FeatureSet) const { throw_nogpu; return false; } - bool isCompatible(int) const { throw_nogpu; return false; } - std::string name(int) const { throw_nogpu; return std::string(); } - int majorVersion(int) const { throw_nogpu; return -1; } - int minorVersion(int) const { throw_nogpu; return -1; } - int multiProcessorCount(int) const { throw_nogpu; return -1; } - - int getCudaEnabledDeviceCount() const { return 0; } - - void setDevice(int) const { throw_nogpu; } - int getDevice() const { throw_nogpu; return 0; } - - void resetDevice() const { throw_nogpu; } - - bool deviceSupports(FeatureSet) const { throw_nogpu; return false; } - - bool builtWith(FeatureSet) const { throw_nogpu; return false; } - bool has(int, int) const { throw_nogpu; return false; } - bool hasPtx(int, int) const { throw_nogpu; return false; } - bool hasBin(int, int) const { throw_nogpu; return false; } - bool hasEqualOrLessPtx(int, int) const { throw_nogpu; return false; } - bool hasEqualOrGreater(int, int) const { throw_nogpu; return false; } - bool hasEqualOrGreaterPtx(int, int) const { throw_nogpu; return false; } - bool hasEqualOrGreaterBin(int, int) const { throw_nogpu; return false; } - - void printCudaDeviceInfo(int) const - { - printf("The library is compiled without CUDA support\n"); - } - - void printShortCudaDeviceInfo(int) const - { - printf("The library is compiled without CUDA support\n"); - } -}; - -class EmptyFuncTable : public GpuFuncTable -{ -public: - - void copy(const Mat&, GpuMat&) const { throw_nogpu; } - void copy(const GpuMat&, Mat&) const { throw_nogpu; } - void copy(const GpuMat&, GpuMat&) const { throw_nogpu; } - - void copyWithMask(const GpuMat&, GpuMat&, const GpuMat&) const { throw_nogpu; } - - void convert(const GpuMat&, GpuMat&) const { throw_nogpu; } - void convert(const GpuMat&, GpuMat&, double, double, cudaStream_t stream = 0) const { (void)stream; throw_nogpu; } - - virtual void setTo(cv::gpu::GpuMat&, cv::Scalar, const cv::gpu::GpuMat&, cudaStream_t) const { throw_nogpu; } - - void mallocPitch(void**, size_t*, size_t, size_t) const { throw_nogpu; } - void free(void*) const {} -}; - -#if defined(USE_CUDA) - -// Disable NPP for this file -//#define USE_NPP -#undef USE_NPP - -#define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, CV_Func) -inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "") -{ - if (cudaSuccess != err) - cv::gpu::error(cudaGetErrorString(err), file, line, func); -} - -#ifdef USE_NPP - -#define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__, CV_Func) -inline void ___nppSafeCall(int err, const char *file, const int line, const char *func = "") -{ - if (err < 0) - { - std::ostringstream msg; - msg << "NPP API Call Error: " << err; - cv::gpu::error(msg.str().c_str(), file, line, func); - } -} - -#endif - -namespace cv { namespace gpu { namespace device -{ - void copyToWithMask_gpu(PtrStepSzb src, PtrStepSzb dst, size_t elemSize1, int cn, PtrStepSzb mask, bool colorMask, cudaStream_t stream); - - template - void set_to_gpu(PtrStepSzb mat, const T* scalar, int channels, cudaStream_t stream); - - template - void set_to_gpu(PtrStepSzb mat, const T* scalar, PtrStepSzb mask, int channels, cudaStream_t stream); - - void convert_gpu(PtrStepSzb src, int sdepth, PtrStepSzb dst, int ddepth, double alpha, double beta, cudaStream_t stream); -}}} - -template void kernelSetCaller(GpuMat& src, Scalar s, cudaStream_t stream) -{ - Scalar_ sf = s; - cv::gpu::device::set_to_gpu(src, sf.val, src.channels(), stream); -} - -template void kernelSetCaller(GpuMat& src, Scalar s, const GpuMat& mask, cudaStream_t stream) -{ - Scalar_ sf = s; - cv::gpu::device::set_to_gpu(src, sf.val, mask, src.channels(), stream); -} - -#ifdef USE_NPP - -template struct NPPTypeTraits; -template<> struct NPPTypeTraits { typedef Npp8u npp_type; }; -template<> struct NPPTypeTraits { typedef Npp8s npp_type; }; -template<> struct NPPTypeTraits { typedef Npp16u npp_type; }; -template<> struct NPPTypeTraits { typedef Npp16s npp_type; }; -template<> struct NPPTypeTraits { typedef Npp32s npp_type; }; -template<> struct NPPTypeTraits { typedef Npp32f npp_type; }; -template<> struct NPPTypeTraits { typedef Npp64f npp_type; }; - -#endif - -////////////////////////////////////////////////////////////////////////// -// Convert - -#ifdef USE_NPP - -template struct NppConvertFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - typedef typename NPPTypeTraits::npp_type dst_t; - - typedef NppStatus (*func_ptr)(const src_t* pSrc, int nSrcStep, dst_t* pDst, int nDstStep, NppiSize oSizeROI); -}; -template struct NppConvertFunc -{ - typedef typename NPPTypeTraits::npp_type dst_t; - - typedef NppStatus (*func_ptr)(const Npp32f* pSrc, int nSrcStep, dst_t* pDst, int nDstStep, NppiSize oSizeROI, NppRoundMode eRoundMode); -}; - -template::func_ptr func> struct NppCvt -{ - typedef typename NPPTypeTraits::npp_type src_t; - typedef typename NPPTypeTraits::npp_type dst_t; - - static void call(const GpuMat& src, GpuMat& dst) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - nppSafeCall( func(src.ptr(), static_cast(src.step), dst.ptr(), static_cast(dst.step), sz) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; - -template::func_ptr func> struct NppCvt -{ - typedef typename NPPTypeTraits::npp_type dst_t; - - static void call(const GpuMat& src, GpuMat& dst) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - nppSafeCall( func(src.ptr(), static_cast(src.step), dst.ptr(), static_cast(dst.step), sz, NPP_RND_NEAR) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; - -#endif - -////////////////////////////////////////////////////////////////////////// -// Set - -#ifdef USE_NPP - -template struct NppSetFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - - typedef NppStatus (*func_ptr)(const src_t values[], src_t* pSrc, int nSrcStep, NppiSize oSizeROI); -}; -template struct NppSetFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - - typedef NppStatus (*func_ptr)(src_t val, src_t* pSrc, int nSrcStep, NppiSize oSizeROI); -}; -template struct NppSetFunc -{ - typedef NppStatus (*func_ptr)(Npp8s values[], Npp8s* pSrc, int nSrcStep, NppiSize oSizeROI); -}; -template<> struct NppSetFunc -{ - typedef NppStatus (*func_ptr)(Npp8s val, Npp8s* pSrc, int nSrcStep, NppiSize oSizeROI); -}; - -template::func_ptr func> struct NppSet -{ - typedef typename NPPTypeTraits::npp_type src_t; - - static void call(GpuMat& src, Scalar s) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - Scalar_ nppS = s; - - nppSafeCall( func(nppS.val, src.ptr(), static_cast(src.step), sz) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; -template::func_ptr func> struct NppSet -{ - typedef typename NPPTypeTraits::npp_type src_t; - - static void call(GpuMat& src, Scalar s) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - Scalar_ nppS = s; - - nppSafeCall( func(nppS[0], src.ptr(), static_cast(src.step), sz) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; - -template struct NppSetMaskFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - - typedef NppStatus (*func_ptr)(const src_t values[], src_t* pSrc, int nSrcStep, NppiSize oSizeROI, const Npp8u* pMask, int nMaskStep); -}; -template struct NppSetMaskFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - - typedef NppStatus (*func_ptr)(src_t val, src_t* pSrc, int nSrcStep, NppiSize oSizeROI, const Npp8u* pMask, int nMaskStep); -}; - -template::func_ptr func> struct NppSetMask -{ - typedef typename NPPTypeTraits::npp_type src_t; - - static void call(GpuMat& src, Scalar s, const GpuMat& mask) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - Scalar_ nppS = s; - - nppSafeCall( func(nppS.val, src.ptr(), static_cast(src.step), sz, mask.ptr(), static_cast(mask.step)) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; -template::func_ptr func> struct NppSetMask -{ - typedef typename NPPTypeTraits::npp_type src_t; - - static void call(GpuMat& src, Scalar s, const GpuMat& mask) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - Scalar_ nppS = s; - - nppSafeCall( func(nppS[0], src.ptr(), static_cast(src.step), sz, mask.ptr(), static_cast(mask.step)) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; - -#endif - -////////////////////////////////////////////////////////////////////////// -// CopyMasked - -#ifdef USE_NPP - -template struct NppCopyMaskedFunc -{ - typedef typename NPPTypeTraits::npp_type src_t; - - typedef NppStatus (*func_ptr)(const src_t* pSrc, int nSrcStep, src_t* pDst, int nDstStep, NppiSize oSizeROI, const Npp8u* pMask, int nMaskStep); -}; - -template::func_ptr func> struct NppCopyMasked -{ - typedef typename NPPTypeTraits::npp_type src_t; - - static void call(const GpuMat& src, GpuMat& dst, const GpuMat& mask, cudaStream_t /*stream*/) - { - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - nppSafeCall( func(src.ptr(), static_cast(src.step), dst.ptr(), static_cast(dst.step), sz, mask.ptr(), static_cast(mask.step)) ); - - cudaSafeCall( cudaDeviceSynchronize() ); - } -}; - -#endif - -template static inline bool isAligned(const T* ptr, size_t size) -{ - return reinterpret_cast(ptr) % size == 0; -} - -namespace cv { namespace gpu { namespace device -{ - void copyWithMask(const GpuMat& src, GpuMat& dst, const GpuMat& mask, cudaStream_t stream = 0); - void convertTo(const GpuMat& src, GpuMat& dst); - void convertTo(const GpuMat& src, GpuMat& dst, double alpha, double beta, cudaStream_t stream = 0); - void setTo(GpuMat& src, Scalar s, cudaStream_t stream); - void setTo(GpuMat& src, Scalar s, const GpuMat& mask, cudaStream_t stream); - void setTo(GpuMat& src, Scalar s); - void setTo(GpuMat& src, Scalar s, const GpuMat& mask); - - void copyWithMask(const GpuMat& src, GpuMat& dst, const GpuMat& mask, cudaStream_t stream) - { - CV_Assert(src.size() == dst.size() && src.type() == dst.type()); - CV_Assert(src.size() == mask.size() && mask.depth() == CV_8U && (mask.channels() == 1 || mask.channels() == src.channels())); - - cv::gpu::device::copyToWithMask_gpu(src.reshape(1), dst.reshape(1), src.elemSize1(), src.channels(), mask.reshape(1), mask.channels() != 1, stream); - } - - void convertTo(const GpuMat& src, GpuMat& dst) - { - cv::gpu::device::convert_gpu(src.reshape(1), src.depth(), dst.reshape(1), dst.depth(), 1.0, 0.0, 0); - } - - void convertTo(const GpuMat& src, GpuMat& dst, double alpha, double beta, cudaStream_t stream) - { - cv::gpu::device::convert_gpu(src.reshape(1), src.depth(), dst.reshape(1), dst.depth(), alpha, beta, stream); - } - - void setTo(GpuMat& src, Scalar s, cudaStream_t stream) - { - typedef void (*caller_t)(GpuMat& src, Scalar s, cudaStream_t stream); - - static const caller_t callers[] = - { - kernelSetCaller, kernelSetCaller, kernelSetCaller, kernelSetCaller, kernelSetCaller, - kernelSetCaller, kernelSetCaller - }; - - callers[src.depth()](src, s, stream); - } - - void setTo(GpuMat& src, Scalar s, const GpuMat& mask, cudaStream_t stream) - { - typedef void (*caller_t)(GpuMat& src, Scalar s, const GpuMat& mask, cudaStream_t stream); - - static const caller_t callers[] = - { - kernelSetCaller, kernelSetCaller, kernelSetCaller, kernelSetCaller, kernelSetCaller, - kernelSetCaller, kernelSetCaller - }; - - callers[src.depth()](src, s, mask, stream); - } - - void setTo(GpuMat& src, Scalar s) - { - setTo(src, s, 0); - } - - void setTo(GpuMat& src, Scalar s, const GpuMat& mask) - { - setTo(src, s, mask, 0); - } -}}} - -class CudaArch -{ -public: - CudaArch() - { - fromStr(CUDA_ARCH_BIN, bin); - fromStr(CUDA_ARCH_PTX, ptx); - fromStr(CUDA_ARCH_FEATURES, features); - } - - bool builtWith(FeatureSet feature_set) const - { - return !features.empty() && (features.back() >= feature_set); - } - - bool hasPtx(int major, int minor) const - { - return find(ptx.begin(), ptx.end(), major * 10 + minor) != ptx.end(); - } - - bool hasBin(int major, int minor) const - { - return find(bin.begin(), bin.end(), major * 10 + minor) != bin.end(); - } - - bool hasEqualOrLessPtx(int major, int minor) const - { - return !ptx.empty() && (ptx.front() <= major * 10 + minor); - } - - bool hasEqualOrGreaterPtx(int major, int minor) const - { - return !ptx.empty() && (ptx.back() >= major * 10 + minor); - } - - bool hasEqualOrGreaterBin(int major, int minor) const - { - return !bin.empty() && (bin.back() >= major * 10 + minor); - } - - -private: - void fromStr(const string& set_as_str, vector& arr) - { - if (set_as_str.find_first_not_of(" ") == string::npos) - return; - - istringstream stream(set_as_str); - int cur_value; - - while (!stream.eof()) - { - stream >> cur_value; - arr.push_back(cur_value); - } - - sort(arr.begin(), arr.end()); - } - - vector bin; - vector ptx; - vector features; -}; - -class DeviceProps -{ -public: - DeviceProps() - { - props_.resize(10, 0); - } - - ~DeviceProps() - { - for (size_t i = 0; i < props_.size(); ++i) - { - if (props_[i]) - delete props_[i]; - } - props_.clear(); - } - - cudaDeviceProp* get(int devID) - { - if (devID >= (int) props_.size()) - props_.resize(devID + 5, 0); - - if (!props_[devID]) - { - props_[devID] = new cudaDeviceProp; - cudaSafeCall( cudaGetDeviceProperties(props_[devID], devID) ); - } - - return props_[devID]; - } -private: - std::vector props_; -}; - -DeviceProps deviceProps; -const CudaArch cudaArch; - -class CudaDeviceInfoFuncTable : public DeviceInfoFuncTable -{ -public: - size_t sharedMemPerBlock(int id) const - { - return deviceProps.get(id)->sharedMemPerBlock; - } - - void queryMemory(int id, size_t& _totalMemory, size_t& _freeMemory) const - { - int prevDeviceID = getDevice(); - if (prevDeviceID != id) - setDevice(id); - - cudaSafeCall( cudaMemGetInfo(&_freeMemory, &_totalMemory) ); - - if (prevDeviceID != id) - setDevice(prevDeviceID); - } - - size_t freeMemory(int id) const - { - size_t _totalMemory, _freeMemory; - queryMemory(id, _totalMemory, _freeMemory); - return _freeMemory; - } - - size_t totalMemory(int id) const - { - size_t _totalMemory, _freeMemory; - queryMemory(id, _totalMemory, _freeMemory); - return _totalMemory; - } - - bool supports(int id, FeatureSet feature_set) const - { - int version = majorVersion(id) * 10 + minorVersion(id); - return version >= feature_set; - } - - bool isCompatible(int id) const - { - // Check PTX compatibility - if (hasEqualOrLessPtx(majorVersion(id), minorVersion(id))) - return true; - - // Check BIN compatibility - for (int i = minorVersion(id); i >= 0; --i) - if (hasBin(majorVersion(id), i)) - return true; - - return false; - } - - std::string name(int id) const - { - const cudaDeviceProp* prop = deviceProps.get(id); - return prop->name; - } - - int majorVersion(int id) const - { - const cudaDeviceProp* prop = deviceProps.get(id); - return prop->major; - } - - int minorVersion(int id) const - { - const cudaDeviceProp* prop = deviceProps.get(id); - return prop->minor; - } - - int multiProcessorCount(int id) const - { - const cudaDeviceProp* prop = deviceProps.get(id); - return prop->multiProcessorCount; - } - - int getCudaEnabledDeviceCount() const - { - int count; - cudaError_t error = cudaGetDeviceCount( &count ); - - if (error == cudaErrorInsufficientDriver) - return -1; - - if (error == cudaErrorNoDevice) - return 0; - - cudaSafeCall( error ); - return count; - } - - void setDevice(int device) const - { - cudaSafeCall( cudaSetDevice( device ) ); - } - - int getDevice() const - { - int device; - cudaSafeCall( cudaGetDevice( &device ) ); - return device; - } - - void resetDevice() const - { - cudaSafeCall( cudaDeviceReset() ); - } - - bool builtWith(FeatureSet feature_set) const - { - return cudaArch.builtWith(feature_set); - } - - bool has(int major, int minor) const - { - return hasPtx(major, minor) || hasBin(major, minor); - } - - bool hasPtx(int major, int minor) const - { - return cudaArch.hasPtx(major, minor); - } - - bool hasBin(int major, int minor) const - { - return cudaArch.hasBin(major, minor); - } - - bool hasEqualOrLessPtx(int major, int minor) const - { - return cudaArch.hasEqualOrLessPtx(major, minor); - } - - bool hasEqualOrGreater(int major, int minor) const - { - return hasEqualOrGreaterPtx(major, minor) || hasEqualOrGreaterBin(major, minor); - } - - bool hasEqualOrGreaterPtx(int major, int minor) const - { - return cudaArch.hasEqualOrGreaterPtx(major, minor); - } - - bool hasEqualOrGreaterBin(int major, int minor) const - { - return cudaArch.hasEqualOrGreaterBin(major, minor); - } - - bool deviceSupports(FeatureSet feature_set) const - { - static int versions[] = - { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - }; - static const int cache_size = static_cast(sizeof(versions) / sizeof(versions[0])); - - const int devId = getDevice(); - - int version; - - if (devId < cache_size && versions[devId] >= 0) - version = versions[devId]; - else - { - DeviceInfo dev(devId); - version = dev.majorVersion() * 10 + dev.minorVersion(); - if (devId < cache_size) - versions[devId] = version; - } - - return TargetArchs::builtWith(feature_set) && (version >= feature_set); - } - - void printCudaDeviceInfo(int device) const - { - int count = getCudaEnabledDeviceCount(); - bool valid = (device >= 0) && (device < count); - - int beg = valid ? device : 0; - int end = valid ? device+1 : count; - - printf("*** CUDA Device Query (Runtime API) version (CUDART static linking) *** \n\n"); - printf("Device count: %d\n", count); - - int driverVersion = 0, runtimeVersion = 0; - cudaSafeCall( cudaDriverGetVersion(&driverVersion) ); - cudaSafeCall( cudaRuntimeGetVersion(&runtimeVersion) ); - - const char *computeMode[] = { - "Default (multiple host threads can use ::cudaSetDevice() with device simultaneously)", - "Exclusive (only one host thread in one process is able to use ::cudaSetDevice() with this device)", - "Prohibited (no host thread can use ::cudaSetDevice() with this device)", - "Exclusive Process (many threads in one process is able to use ::cudaSetDevice() with this device)", - "Unknown", - NULL - }; - - for(int dev = beg; dev < end; ++dev) - { - cudaDeviceProp prop; - cudaSafeCall( cudaGetDeviceProperties(&prop, dev) ); - - printf("\nDevice %d: \"%s\"\n", dev, prop.name); - printf(" CUDA Driver Version / Runtime Version %d.%d / %d.%d\n", driverVersion/1000, driverVersion%100, runtimeVersion/1000, runtimeVersion%100); - printf(" CUDA Capability Major/Minor version number: %d.%d\n", prop.major, prop.minor); - printf(" Total amount of global memory: %.0f MBytes (%llu bytes)\n", (float)prop.totalGlobalMem/1048576.0f, (unsigned long long) prop.totalGlobalMem); - - int cores = convertSMVer2Cores(prop.major, prop.minor); - if (cores > 0) - printf(" (%2d) Multiprocessors x (%2d) CUDA Cores/MP: %d CUDA Cores\n", prop.multiProcessorCount, cores, cores * prop.multiProcessorCount); - - printf(" GPU Clock Speed: %.2f GHz\n", prop.clockRate * 1e-6f); - - printf(" Max Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d,%d), 3D=(%d,%d,%d)\n", - prop.maxTexture1D, prop.maxTexture2D[0], prop.maxTexture2D[1], - prop.maxTexture3D[0], prop.maxTexture3D[1], prop.maxTexture3D[2]); - printf(" Max Layered Texture Size (dim) x layers 1D=(%d) x %d, 2D=(%d,%d) x %d\n", - prop.maxTexture1DLayered[0], prop.maxTexture1DLayered[1], - prop.maxTexture2DLayered[0], prop.maxTexture2DLayered[1], prop.maxTexture2DLayered[2]); - - printf(" Total amount of constant memory: %u bytes\n", (int)prop.totalConstMem); - printf(" Total amount of shared memory per block: %u bytes\n", (int)prop.sharedMemPerBlock); - printf(" Total number of registers available per block: %d\n", prop.regsPerBlock); - printf(" Warp size: %d\n", prop.warpSize); - printf(" Maximum number of threads per block: %d\n", prop.maxThreadsPerBlock); - printf(" Maximum sizes of each dimension of a block: %d x %d x %d\n", prop.maxThreadsDim[0], prop.maxThreadsDim[1], prop.maxThreadsDim[2]); - printf(" Maximum sizes of each dimension of a grid: %d x %d x %d\n", prop.maxGridSize[0], prop.maxGridSize[1], prop.maxGridSize[2]); - printf(" Maximum memory pitch: %u bytes\n", (int)prop.memPitch); - printf(" Texture alignment: %u bytes\n", (int)prop.textureAlignment); - - printf(" Concurrent copy and execution: %s with %d copy engine(s)\n", (prop.deviceOverlap ? "Yes" : "No"), prop.asyncEngineCount); - printf(" Run time limit on kernels: %s\n", prop.kernelExecTimeoutEnabled ? "Yes" : "No"); - printf(" Integrated GPU sharing Host Memory: %s\n", prop.integrated ? "Yes" : "No"); - printf(" Support host page-locked memory mapping: %s\n", prop.canMapHostMemory ? "Yes" : "No"); - - printf(" Concurrent kernel execution: %s\n", prop.concurrentKernels ? "Yes" : "No"); - printf(" Alignment requirement for Surfaces: %s\n", prop.surfaceAlignment ? "Yes" : "No"); - printf(" Device has ECC support enabled: %s\n", prop.ECCEnabled ? "Yes" : "No"); - printf(" Device is using TCC driver mode: %s\n", prop.tccDriver ? "Yes" : "No"); - printf(" Device supports Unified Addressing (UVA): %s\n", prop.unifiedAddressing ? "Yes" : "No"); - printf(" Device PCI Bus ID / PCI location ID: %d / %d\n", prop.pciBusID, prop.pciDeviceID ); - printf(" Compute Mode:\n"); - printf(" %s \n", computeMode[prop.computeMode]); - } - - printf("\n"); - printf("deviceQuery, CUDA Driver = CUDART"); - printf(", CUDA Driver Version = %d.%d", driverVersion / 1000, driverVersion % 100); - printf(", CUDA Runtime Version = %d.%d", runtimeVersion/1000, runtimeVersion%100); - printf(", NumDevs = %d\n\n", count); - fflush(stdout); - } - - void printShortCudaDeviceInfo(int device) const - { - int count = getCudaEnabledDeviceCount(); - bool valid = (device >= 0) && (device < count); - - int beg = valid ? device : 0; - int end = valid ? device+1 : count; - - int driverVersion = 0, runtimeVersion = 0; - cudaSafeCall( cudaDriverGetVersion(&driverVersion) ); - cudaSafeCall( cudaRuntimeGetVersion(&runtimeVersion) ); - - for(int dev = beg; dev < end; ++dev) - { - cudaDeviceProp prop; - cudaSafeCall( cudaGetDeviceProperties(&prop, dev) ); - - const char *arch_str = prop.major < 2 ? " (not Fermi)" : ""; - printf("Device %d: \"%s\" %.0fMb", dev, prop.name, (float)prop.totalGlobalMem/1048576.0f); - printf(", sm_%d%d%s", prop.major, prop.minor, arch_str); - - int cores = convertSMVer2Cores(prop.major, prop.minor); - if (cores > 0) - printf(", %d cores", cores * prop.multiProcessorCount); - - printf(", Driver/Runtime ver.%d.%d/%d.%d\n", driverVersion/1000, driverVersion%100, runtimeVersion/1000, runtimeVersion%100); - } - fflush(stdout); - } - -private: - int convertSMVer2Cores(int major, int minor) const - { - // Defines for GPU Architecture types (using the SM version to determine the # of cores per SM - typedef struct { - int SM; // 0xMm (hexidecimal notation), M = SM Major version, and m = SM minor version - int Cores; - } SMtoCores; - - SMtoCores gpuArchCoresPerSM[] = { { 0x10, 8 }, { 0x11, 8 }, { 0x12, 8 }, { 0x13, 8 }, { 0x20, 32 }, { 0x21, 48 }, {0x30, 192}, {0x35, 192}, { -1, -1 } }; - - int index = 0; - while (gpuArchCoresPerSM[index].SM != -1) - { - if (gpuArchCoresPerSM[index].SM == ((major << 4) + minor) ) - return gpuArchCoresPerSM[index].Cores; - index++; - } - - return -1; - } -}; - -class CudaFuncTable : public GpuFuncTable -{ -public: - - void copy(const Mat& src, GpuMat& dst) const - { - cudaSafeCall( cudaMemcpy2D(dst.data, dst.step, src.data, src.step, src.cols * src.elemSize(), src.rows, cudaMemcpyHostToDevice) ); - } - - void copy(const GpuMat& src, Mat& dst) const - { - cudaSafeCall( cudaMemcpy2D(dst.data, dst.step, src.data, src.step, src.cols * src.elemSize(), src.rows, cudaMemcpyDeviceToHost) ); - } - - void copy(const GpuMat& src, GpuMat& dst) const - { - cudaSafeCall( cudaMemcpy2D(dst.data, dst.step, src.data, src.step, src.cols * src.elemSize(), src.rows, cudaMemcpyDeviceToDevice) ); - } - - void copyWithMask(const GpuMat& src, GpuMat& dst, const GpuMat& mask) const - { - CV_Assert(src.depth() <= CV_64F && src.channels() <= 4); - CV_Assert(src.size() == dst.size() && src.type() == dst.type()); - CV_Assert(src.size() == mask.size() && mask.depth() == CV_8U && (mask.channels() == 1 || mask.channels() == src.channels())); - - if (src.depth() == CV_64F) - { - if (!TargetArchs::builtWith(NATIVE_DOUBLE) || !DeviceInfo().supports(NATIVE_DOUBLE)) - CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double"); - } - - typedef void (*func_t)(const GpuMat& src, GpuMat& dst, const GpuMat& mask, cudaStream_t stream); - -#ifdef USE_NPP - static const func_t funcs[7][4] = - { - /* 8U */ {NppCopyMasked::call, cv::gpu::device::copyWithMask, NppCopyMasked::call, NppCopyMasked::call}, - /* 8S */ {cv::gpu::device::copyWithMask , cv::gpu::device::copyWithMask, cv::gpu::device::copyWithMask , cv::gpu::device::copyWithMask }, - /* 16U */ {NppCopyMasked::call, cv::gpu::device::copyWithMask, NppCopyMasked::call, NppCopyMasked::call}, - /* 16S */ {NppCopyMasked::call, cv::gpu::device::copyWithMask, NppCopyMasked::call, NppCopyMasked::call}, - /* 32S */ {NppCopyMasked::call, cv::gpu::device::copyWithMask, NppCopyMasked::call, NppCopyMasked::call}, - /* 32F */ {NppCopyMasked::call, cv::gpu::device::copyWithMask, NppCopyMasked::call, NppCopyMasked::call}, - /* 64F */ {cv::gpu::device::copyWithMask , cv::gpu::device::copyWithMask, cv::gpu::device::copyWithMask , cv::gpu::device::copyWithMask } - }; - - const func_t func = mask.channels() == src.channels() ? funcs[src.depth()][src.channels() - 1] : cv::gpu::device::copyWithMask; -#else - const func_t func = cv::gpu::device::copyWithMask; -#endif - - func(src, dst, mask, 0); - } - - void convert(const GpuMat& src, GpuMat& dst) const - { - typedef void (*func_t)(const GpuMat& src, GpuMat& dst); - -#ifdef USE_NPP - static const func_t funcs[7][7][4] = - { - { - /* 8U -> 8U */ {0, 0, 0, 0}, - /* 8U -> 8S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 8U -> 16U */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, NppCvt::call}, - /* 8U -> 16S */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, NppCvt::call}, - /* 8U -> 32S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 8U -> 32F */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 8U -> 64F */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo } - }, - { - /* 8S -> 8U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 8S -> 8S */ {0,0,0,0}, - /* 8S -> 16U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 8S -> 16S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 8S -> 32S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 8S -> 32F */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 8S -> 64F */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo} - }, - { - /* 16U -> 8U */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, NppCvt::call}, - /* 16U -> 8S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16U -> 16U */ {0,0,0,0}, - /* 16U -> 16S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16U -> 32S */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16U -> 32F */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16U -> 64F */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo } - }, - { - /* 16S -> 8U */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, NppCvt::call}, - /* 16S -> 8S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16S -> 16U */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16S -> 16S */ {0,0,0,0}, - /* 16S -> 32S */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16S -> 32F */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo }, - /* 16S -> 64F */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo } - }, - { - /* 32S -> 8U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32S -> 8S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32S -> 16U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32S -> 16S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32S -> 32S */ {0,0,0,0}, - /* 32S -> 32F */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32S -> 64F */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo} - }, - { - /* 32F -> 8U */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32F -> 8S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32F -> 16U */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32F -> 16S */ {NppCvt::call, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32F -> 32S */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 32F -> 32F */ {0,0,0,0}, - /* 32F -> 64F */ {cv::gpu::device::convertTo , cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo} - }, - { - /* 64F -> 8U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 8S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 16U */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 16S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 32S */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 32F */ {cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo, cv::gpu::device::convertTo}, - /* 64F -> 64F */ {0,0,0,0} - } - }; -#endif - - CV_Assert(src.depth() <= CV_64F && src.channels() <= 4); - CV_Assert(dst.depth() <= CV_64F); - CV_Assert(src.size() == dst.size() && src.channels() == dst.channels()); - - if (src.depth() == CV_64F || dst.depth() == CV_64F) - { - if (!TargetArchs::builtWith(NATIVE_DOUBLE) || !DeviceInfo().supports(NATIVE_DOUBLE)) - CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double"); - } - - bool aligned = isAligned(src.data, 16) && isAligned(dst.data, 16); - if (!aligned) - { - cv::gpu::device::convertTo(src, dst); - return; - } - -#ifdef USE_NPP - const func_t func = funcs[src.depth()][dst.depth()][src.channels() - 1]; - CV_DbgAssert(func != 0); -#else - const func_t func = cv::gpu::device::convertTo; -#endif - - func(src, dst); - } - - void convert(const GpuMat& src, GpuMat& dst, double alpha, double beta, cudaStream_t stream) const - { - CV_Assert(src.depth() <= CV_64F && src.channels() <= 4); - CV_Assert(dst.depth() <= CV_64F); - - if (src.depth() == CV_64F || dst.depth() == CV_64F) - { - if (!TargetArchs::builtWith(NATIVE_DOUBLE) || !DeviceInfo().supports(NATIVE_DOUBLE)) - CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double"); - } - - cv::gpu::device::convertTo(src, dst, alpha, beta, stream); - } - - void setTo(GpuMat& m, Scalar s, const GpuMat& mask, cudaStream_t stream) const - { - if (mask.empty()) - { - if (s[0] == 0.0 && s[1] == 0.0 && s[2] == 0.0 && s[3] == 0.0) - { - cudaSafeCall( cudaMemset2D(m.data, m.step, 0, m.cols * m.elemSize(), m.rows) ); - return; - } - - if (m.depth() == CV_8U) - { - int cn = m.channels(); - - if (cn == 1 || (cn == 2 && s[0] == s[1]) || (cn == 3 && s[0] == s[1] && s[0] == s[2]) || (cn == 4 && s[0] == s[1] && s[0] == s[2] && s[0] == s[3])) - { - int val = saturate_cast(s[0]); - cudaSafeCall( cudaMemset2D(m.data, m.step, val, m.cols * m.elemSize(), m.rows) ); - return; - } - } - - typedef void (*func_t)(GpuMat& src, Scalar s); - -#ifdef USE_NPP - static const func_t funcs[7][4] = - { - {NppSet::call, cv::gpu::device::setTo , cv::gpu::device::setTo , NppSet::call}, - {cv::gpu::device::setTo , cv::gpu::device::setTo , cv::gpu::device::setTo , cv::gpu::device::setTo }, - {NppSet::call, NppSet::call, cv::gpu::device::setTo , NppSet::call}, - {NppSet::call, NppSet::call, cv::gpu::device::setTo , NppSet::call}, - {NppSet::call, cv::gpu::device::setTo , cv::gpu::device::setTo , NppSet::call}, - {NppSet::call, cv::gpu::device::setTo , cv::gpu::device::setTo , NppSet::call}, - {cv::gpu::device::setTo , cv::gpu::device::setTo , cv::gpu::device::setTo , cv::gpu::device::setTo } - }; -#endif - - CV_Assert(m.depth() <= CV_64F && m.channels() <= 4); - - if (m.depth() == CV_64F) - { - if (!TargetArchs::builtWith(NATIVE_DOUBLE) || !DeviceInfo().supports(NATIVE_DOUBLE)) - CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double"); - } - -#ifdef USE_NPP - const func_t func = funcs[m.depth()][m.channels() - 1]; -#else - const func_t func = cv::gpu::device::setTo; -#endif - - if (stream) - cv::gpu::device::setTo(m, s, stream); - else - func(m, s); - } - else - { - typedef void (*func_t)(GpuMat& src, Scalar s, const GpuMat& mask); - -#ifdef USE_NPP - static const func_t funcs[7][4] = - { - {NppSetMask::call, cv::gpu::device::setTo, cv::gpu::device::setTo, NppSetMask::call}, - {cv::gpu::device::setTo , cv::gpu::device::setTo, cv::gpu::device::setTo, cv::gpu::device::setTo }, - {NppSetMask::call, cv::gpu::device::setTo, cv::gpu::device::setTo, NppSetMask::call}, - {NppSetMask::call, cv::gpu::device::setTo, cv::gpu::device::setTo, NppSetMask::call}, - {NppSetMask::call, cv::gpu::device::setTo, cv::gpu::device::setTo, NppSetMask::call}, - {NppSetMask::call, cv::gpu::device::setTo, cv::gpu::device::setTo, NppSetMask::call}, - {cv::gpu::device::setTo , cv::gpu::device::setTo, cv::gpu::device::setTo, cv::gpu::device::setTo } - }; -#endif - - CV_Assert(m.depth() <= CV_64F && m.channels() <= 4); - - if (m.depth() == CV_64F) - { - if (!TargetArchs::builtWith(NATIVE_DOUBLE) || !DeviceInfo().supports(NATIVE_DOUBLE)) - CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double"); - } - -#ifdef USE_NPP - const func_t func = funcs[m.depth()][m.channels() - 1]; -#else - const func_t func = cv::gpu::device::setTo; -#endif - - if (stream) - cv::gpu::device::setTo(m, s, mask, stream); - else - func(m, s, mask); - } - } - - void mallocPitch(void** devPtr, size_t* step, size_t width, size_t height) const - { - cudaSafeCall( cudaMallocPitch(devPtr, step, width, height) ); - } - - void free(void* devPtr) const - { - cudaFree(devPtr); - } -}; -#endif -#endif diff --git a/modules/features2d/CMakeLists.txt b/modules/features2d/CMakeLists.txt deleted file mode 100644 index 0b080cf..0000000 --- a/modules/features2d/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "2D Features Framework") -ocv_define_module(features2d opencv_imgproc opencv_flann OPTIONAL opencv_highgui) diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp deleted file mode 100644 index 7536128..0000000 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ /dev/null @@ -1,1611 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_FEATURES_2D_HPP__ -#define __OPENCV_FEATURES_2D_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/flann/miniflann.hpp" - -#ifdef __cplusplus -#include - -namespace cv -{ - -CV_EXPORTS bool initModule_features2d(); - -/*! - The Keypoint Class - - The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as - Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT, cv::LDetector etc. - - The keypoint is characterized by the 2D position, scale - (proportional to the diameter of the neighborhood that needs to be taken into account), - orientation and some other parameters. The keypoint neighborhood is then analyzed by another algorithm that builds a descriptor - (usually represented as a feature vector). The keypoints representing the same object in different images can then be matched using - cv::KDTree or another method. -*/ -class CV_EXPORTS_W_SIMPLE KeyPoint -{ -public: - //! the default constructor - CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {} - //! the full constructor - KeyPoint(Point2f _pt, float _size, float _angle=-1, - float _response=0, int _octave=0, int _class_id=-1) - : pt(_pt), size(_size), angle(_angle), - response(_response), octave(_octave), class_id(_class_id) {} - //! another form of the full constructor - CV_WRAP KeyPoint(float x, float y, float _size, float _angle=-1, - float _response=0, int _octave=0, int _class_id=-1) - : pt(x, y), size(_size), angle(_angle), - response(_response), octave(_octave), class_id(_class_id) {} - - size_t hash() const; - - //! converts vector of keypoints to vector of points - static void convert(const vector& keypoints, - CV_OUT vector& points2f, - const vector& keypointIndexes=vector()); - //! converts vector of points to the vector of keypoints, where each keypoint is assigned the same size and the same orientation - static void convert(const vector& points2f, - CV_OUT vector& keypoints, - float size=1, float response=1, int octave=0, int class_id=-1); - - //! computes overlap for pair of keypoints; - //! overlap is a ratio between area of keypoint regions intersection and - //! area of keypoint regions union (now keypoint region is circle) - static float overlap(const KeyPoint& kp1, const KeyPoint& kp2); - - CV_PROP_RW Point2f pt; //!< coordinates of the keypoints - CV_PROP_RW float size; //!< diameter of the meaningful keypoint neighborhood - CV_PROP_RW float angle; //!< computed orientation of the keypoint (-1 if not applicable); - //!< it's in [0,360) degrees and measured relative to - //!< image coordinate system, ie in clockwise. - CV_PROP_RW float response; //!< the response by which the most strong keypoints have been selected. Can be used for the further sorting or subsampling - CV_PROP_RW int octave; //!< octave (pyramid layer) from which the keypoint has been extracted - CV_PROP_RW int class_id; //!< object class (if the keypoints need to be clustered by an object they belong to) -}; - -//! writes vector of keypoints to the file storage -CV_EXPORTS void write(FileStorage& fs, const string& name, const vector& keypoints); -//! reads vector of keypoints from the specified file storage node -CV_EXPORTS void read(const FileNode& node, CV_OUT vector& keypoints); - -/* - * A class filters a vector of keypoints. - * Because now it is difficult to provide a convenient interface for all usage scenarios of the keypoints filter class, - * it has only several needed by now static methods. - */ -class CV_EXPORTS KeyPointsFilter -{ -public: - KeyPointsFilter(){} - - /* - * Remove keypoints within borderPixels of an image edge. - */ - static void runByImageBorder( vector& keypoints, Size imageSize, int borderSize ); - /* - * Remove keypoints of sizes out of range. - */ - static void runByKeypointSize( vector& keypoints, float minSize, - float maxSize=FLT_MAX ); - /* - * Remove keypoints from some image by mask for pixels of this image. - */ - static void runByPixelsMask( vector& keypoints, const Mat& mask ); - /* - * Remove duplicated keypoints. - */ - static void removeDuplicated( vector& keypoints ); - - /* - * Retain the specified number of the best keypoints (according to the response) - */ - static void retainBest( vector& keypoints, int npoints ); -}; - - -/************************************ Base Classes ************************************/ - -/* - * Abstract base class for 2D image feature detectors. - */ -class CV_EXPORTS_W FeatureDetector : public virtual Algorithm -{ -public: - virtual ~FeatureDetector(); - - /* - * Detect keypoints in an image. - * image The image. - * keypoints The detected keypoints. - * mask Mask specifying where to look for keypoints (optional). Must be a char - * matrix with non-zero values in the region of interest. - */ - CV_WRAP void detect( const Mat& image, CV_OUT vector& keypoints, const Mat& mask=Mat() ) const; - - /* - * Detect keypoints in an image set. - * images Image collection. - * keypoints Collection of keypoints detected in an input images. keypoints[i] is a set of keypoints detected in an images[i]. - * masks Masks for image set. masks[i] is a mask for images[i]. - */ - void detect( const vector& images, vector >& keypoints, const vector& masks=vector() ) const; - - // Return true if detector object is empty - CV_WRAP virtual bool empty() const; - - // Create feature detector by detector name. - CV_WRAP static Ptr create( const string& detectorType ); - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const = 0; - - /* - * Remove keypoints that are not in the mask. - * Helper function, useful when wrapping a library call for keypoint detection that - * does not support a mask argument. - */ - static void removeInvalidPoints( const Mat& mask, vector& keypoints ); -}; - - -/* - * Abstract base class for computing descriptors for image keypoints. - * - * In this interface we assume a keypoint descriptor can be represented as a - * dense, fixed-dimensional vector of some basic type. Most descriptors used - * in practice follow this pattern, as it makes it very easy to compute - * distances between descriptors. Therefore we represent a collection of - * descriptors as a Mat, where each row is one keypoint descriptor. - */ -class CV_EXPORTS_W DescriptorExtractor : public virtual Algorithm -{ -public: - virtual ~DescriptorExtractor(); - - /* - * Compute the descriptors for a set of keypoints in an image. - * image The image. - * keypoints The input keypoints. Keypoints for which a descriptor cannot be computed are removed. - * descriptors Copmputed descriptors. Row i is the descriptor for keypoint i. - */ - CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT vector& keypoints, CV_OUT Mat& descriptors ) const; - - /* - * Compute the descriptors for a keypoints collection detected in image collection. - * images Image collection. - * keypoints Input keypoints collection. keypoints[i] is keypoints detected in images[i]. - * Keypoints for which a descriptor cannot be computed are removed. - * descriptors Descriptor collection. descriptors[i] are descriptors computed for set keypoints[i]. - */ - void compute( const vector& images, vector >& keypoints, vector& descriptors ) const; - - CV_WRAP virtual int descriptorSize() const = 0; - CV_WRAP virtual int descriptorType() const = 0; - - CV_WRAP virtual bool empty() const; - - CV_WRAP static Ptr create( const string& descriptorExtractorType ); - -protected: - virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const = 0; - - /* - * Remove keypoints within borderPixels of an image edge. - */ - static void removeBorderKeypoints( vector& keypoints, - Size imageSize, int borderSize ); -}; - - - -/* - * Abstract base class for simultaneous 2D feature detection descriptor extraction. - */ -class CV_EXPORTS_W Feature2D : public FeatureDetector, public DescriptorExtractor -{ -public: - /* - * Detect keypoints in an image. - * image The image. - * keypoints The detected keypoints. - * mask Mask specifying where to look for keypoints (optional). Must be a char - * matrix with non-zero values in the region of interest. - * useProvidedKeypoints If true, the method will skip the detection phase and will compute - * descriptors for the provided keypoints - */ - CV_WRAP_AS(detectAndCompute) virtual void operator()( InputArray image, InputArray mask, - CV_OUT vector& keypoints, - OutputArray descriptors, - bool useProvidedKeypoints=false ) const = 0; - - CV_WRAP void compute( const Mat& image, CV_OUT CV_IN_OUT std::vector& keypoints, CV_OUT Mat& descriptors ) const; - - // Create feature detector and descriptor extractor by name. - CV_WRAP static Ptr create( const string& name ); -}; - -/*! - BRISK implementation -*/ -class CV_EXPORTS_W BRISK : public Feature2D -{ -public: - CV_WRAP explicit BRISK(int thresh=30, int octaves=3, float patternScale=1.0f); - - virtual ~BRISK(); - - // returns the descriptor size in bytes - int descriptorSize() const; - // returns the descriptor type - int descriptorType() const; - - // Compute the BRISK features on an image - void operator()(InputArray image, InputArray mask, vector& keypoints) const; - - // Compute the BRISK features and descriptors on an image - void operator()( InputArray image, InputArray mask, vector& keypoints, - OutputArray descriptors, bool useProvidedKeypoints=false ) const; - - AlgorithmInfo* info() const; - - // custom setup - CV_WRAP explicit BRISK(std::vector &radiusList, std::vector &numberList, - float dMax=5.85f, float dMin=8.2f, std::vector indexChange=std::vector()); - - // call this to generate the kernel: - // circle of radius r (pixels), with n points; - // short pairings with dMax, long pairings with dMin - CV_WRAP void generateKernel(std::vector &radiusList, - std::vector &numberList, float dMax=5.85f, float dMin=8.2f, - std::vector indexChange=std::vector()); - -protected: - - void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; - void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - void computeKeypointsNoOrientation(InputArray image, InputArray mask, vector& keypoints) const; - void computeDescriptorsAndOrOrientation(InputArray image, InputArray mask, vector& keypoints, - OutputArray descriptors, bool doDescriptors, bool doOrientation, - bool useProvidedKeypoints) const; - - // Feature parameters - CV_PROP_RW int threshold; - CV_PROP_RW int octaves; - - // some helper structures for the Brisk pattern representation - struct BriskPatternPoint{ - float x; // x coordinate relative to center - float y; // x coordinate relative to center - float sigma; // Gaussian smoothing sigma - }; - struct BriskShortPair{ - unsigned int i; // index of the first pattern point - unsigned int j; // index of other pattern point - }; - struct BriskLongPair{ - unsigned int i; // index of the first pattern point - unsigned int j; // index of other pattern point - int weighted_dx; // 1024.0/dx - int weighted_dy; // 1024.0/dy - }; - inline int smoothedIntensity(const cv::Mat& image, - const cv::Mat& integral,const float key_x, - const float key_y, const unsigned int scale, - const unsigned int rot, const unsigned int point) const; - // pattern properties - BriskPatternPoint* patternPoints_; //[i][rotation][scale] - unsigned int points_; // total number of collocation points - float* scaleList_; // lists the scaling per scale index [scale] - unsigned int* sizeList_; // lists the total pattern size per scale index [scale] - static const unsigned int scales_; // scales discretization - static const float scalerange_; // span of sizes 40->4 Octaves - else, this needs to be adjusted... - static const unsigned int n_rot_; // discretization of the rotation look-up - - // pairs - int strings_; // number of uchars the descriptor consists of - float dMax_; // short pair maximum distance - float dMin_; // long pair maximum distance - BriskShortPair* shortPairs_; // d<_dMax - BriskLongPair* longPairs_; // d>_dMin - unsigned int noShortPairs_; // number of shortParis - unsigned int noLongPairs_; // number of longParis - - // general - static const float basicSize_; -}; - - -/*! - ORB implementation. -*/ -class CV_EXPORTS_W ORB : public Feature2D -{ -public: - // the size of the signature in bytes - enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 }; - - CV_WRAP explicit ORB(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31, - int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31 ); - - // returns the descriptor size in bytes - int descriptorSize() const; - // returns the descriptor type - int descriptorType() const; - - // Compute the ORB features and descriptors on an image - void operator()(InputArray image, InputArray mask, vector& keypoints) const; - - // Compute the ORB features and descriptors on an image - void operator()( InputArray image, InputArray mask, vector& keypoints, - OutputArray descriptors, bool useProvidedKeypoints=false ) const; - - AlgorithmInfo* info() const; - -protected: - - void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; - void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - CV_PROP_RW int nfeatures; - CV_PROP_RW double scaleFactor; - CV_PROP_RW int nlevels; - CV_PROP_RW int edgeThreshold; - CV_PROP_RW int firstLevel; - CV_PROP_RW int WTA_K; - CV_PROP_RW int scoreType; - CV_PROP_RW int patchSize; -}; - -typedef ORB OrbFeatureDetector; -typedef ORB OrbDescriptorExtractor; - -/*! - FREAK implementation -*/ -class CV_EXPORTS FREAK : public DescriptorExtractor -{ -public: - /** Constructor - * @param orientationNormalized enable orientation normalization - * @param scaleNormalized enable scale normalization - * @param patternScale scaling of the description pattern - * @param nbOctave number of octaves covered by the detected keypoints - * @param selectedPairs (optional) user defined selected pairs - */ - explicit FREAK( bool orientationNormalized = true, - bool scaleNormalized = true, - float patternScale = 22.0f, - int nOctaves = 4, - const vector& selectedPairs = vector()); - FREAK( const FREAK& rhs ); - FREAK& operator=( const FREAK& ); - - virtual ~FREAK(); - - /** returns the descriptor length in bytes */ - virtual int descriptorSize() const; - - /** returns the descriptor type */ - virtual int descriptorType() const; - - /** select the 512 "best description pairs" - * @param images grayscale images set - * @param keypoints set of detected keypoints - * @param corrThresh correlation threshold - * @param verbose print construction information - * @return list of best pair indexes - */ - vector selectPairs( const vector& images, vector >& keypoints, - const double corrThresh = 0.7, bool verbose = true ); - - AlgorithmInfo* info() const; - - enum - { - NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45 - }; - -protected: - virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; - void buildPattern(); - uchar meanIntensity( const Mat& image, const Mat& integral, const float kp_x, const float kp_y, - const unsigned int scale, const unsigned int rot, const unsigned int point ) const; - - bool orientationNormalized; //true if the orientation is normalized, false otherwise - bool scaleNormalized; //true if the scale is normalized, false otherwise - double patternScale; //scaling of the pattern - int nOctaves; //number of octaves - bool extAll; // true if all pairs need to be extracted for pairs selection - - double patternScale0; - int nOctaves0; - vector selectedPairs0; - - struct PatternPoint - { - float x; // x coordinate relative to center - float y; // x coordinate relative to center - float sigma; // Gaussian smoothing sigma - }; - - struct DescriptionPair - { - uchar i; // index of the first point - uchar j; // index of the second point - }; - - struct OrientationPair - { - uchar i; // index of the first point - uchar j; // index of the second point - int weight_dx; // dx/(norm_sq))*4096 - int weight_dy; // dy/(norm_sq))*4096 - }; - - vector patternLookup; // look-up table for the pattern points (position+sigma of all points at all scales and orientation) - int patternSizes[NB_SCALES]; // size of the pattern at a specific scale (used to check if a point is within image boundaries) - DescriptionPair descriptionPairs[NB_PAIRS]; - OrientationPair orientationPairs[NB_ORIENPAIRS]; -}; - - -/*! - Maximal Stable Extremal Regions class. - - The class implements MSER algorithm introduced by J. Matas. - Unlike SIFT, SURF and many other detectors in OpenCV, this is salient region detector, - not the salient point detector. - - It returns the regions, each of those is encoded as a contour. -*/ -class CV_EXPORTS_W MSER : public FeatureDetector -{ -public: - //! the full constructor - CV_WRAP explicit MSER( int _delta=5, int _min_area=60, int _max_area=14400, - double _max_variation=0.25, double _min_diversity=.2, - int _max_evolution=200, double _area_threshold=1.01, - double _min_margin=0.003, int _edge_blur_size=5 ); - - //! the operator that extracts the MSERs from the image or the specific part of it - CV_WRAP_AS(detect) void operator()( const Mat& image, CV_OUT vector >& msers, - const Mat& mask=Mat() ) const; - AlgorithmInfo* info() const; - -protected: - void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - int delta; - int minArea; - int maxArea; - double maxVariation; - double minDiversity; - int maxEvolution; - double areaThreshold; - double minMargin; - int edgeBlurSize; -}; - -typedef MSER MserFeatureDetector; - -/*! - The "Star" Detector. - - The class implements the keypoint detector introduced by K. Konolige. -*/ -class CV_EXPORTS_W StarDetector : public FeatureDetector -{ -public: - //! the full constructor - CV_WRAP StarDetector(int _maxSize=45, int _responseThreshold=30, - int _lineThresholdProjected=10, - int _lineThresholdBinarized=8, - int _suppressNonmaxSize=5); - - //! finds the keypoints in the image - CV_WRAP_AS(detect) void operator()(const Mat& image, - CV_OUT vector& keypoints) const; - - AlgorithmInfo* info() const; - -protected: - void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - int maxSize; - int responseThreshold; - int lineThresholdProjected; - int lineThresholdBinarized; - int suppressNonmaxSize; -}; - -//! detects corners using FAST algorithm by E. Rosten -CV_EXPORTS void FAST( InputArray image, CV_OUT vector& keypoints, - int threshold, bool nonmaxSuppression=true ); - -CV_EXPORTS void FASTX( InputArray image, CV_OUT vector& keypoints, - int threshold, bool nonmaxSuppression, int type ); - -class CV_EXPORTS_W FastFeatureDetector : public FeatureDetector -{ -public: - - enum - { // Define it in old class to simplify migration to 2.5 - TYPE_5_8 = 0, TYPE_7_12 = 1, TYPE_9_16 = 2 - }; - - CV_WRAP FastFeatureDetector( int threshold=10, bool nonmaxSuppression=true ); - AlgorithmInfo* info() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - int threshold; - bool nonmaxSuppression; -}; - - -class CV_EXPORTS_W GFTTDetector : public FeatureDetector -{ -public: - CV_WRAP GFTTDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1, - int blockSize=3, bool useHarrisDetector=false, double k=0.04 ); - AlgorithmInfo* info() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - int nfeatures; - double qualityLevel; - double minDistance; - int blockSize; - bool useHarrisDetector; - double k; -}; - -typedef GFTTDetector GoodFeaturesToTrackDetector; -typedef StarDetector StarFeatureDetector; - -class CV_EXPORTS_W SimpleBlobDetector : public FeatureDetector -{ -public: - struct CV_EXPORTS_W_SIMPLE Params - { - CV_WRAP Params(); - CV_PROP_RW float thresholdStep; - CV_PROP_RW float minThreshold; - CV_PROP_RW float maxThreshold; - CV_PROP_RW size_t minRepeatability; - CV_PROP_RW float minDistBetweenBlobs; - - CV_PROP_RW bool filterByColor; - CV_PROP_RW uchar blobColor; - - CV_PROP_RW bool filterByArea; - CV_PROP_RW float minArea, maxArea; - - CV_PROP_RW bool filterByCircularity; - CV_PROP_RW float minCircularity, maxCircularity; - - CV_PROP_RW bool filterByInertia; - CV_PROP_RW float minInertiaRatio, maxInertiaRatio; - - CV_PROP_RW bool filterByConvexity; - CV_PROP_RW float minConvexity, maxConvexity; - - void read( const FileNode& fn ); - void write( FileStorage& fs ) const; - }; - - CV_WRAP SimpleBlobDetector(const SimpleBlobDetector::Params ¶meters = SimpleBlobDetector::Params()); - - virtual void read( const FileNode& fn ); - virtual void write( FileStorage& fs ) const; - -protected: - struct CV_EXPORTS Center - { - Point2d location; - double radius; - double confidence; - }; - - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - virtual void findBlobs(const Mat &image, const Mat &binaryImage, vector
          ¢ers) const; - - Params params; - AlgorithmInfo* info() const; -}; - - -class CV_EXPORTS DenseFeatureDetector : public FeatureDetector -{ -public: - explicit DenseFeatureDetector( float initFeatureScale=1.f, int featureScaleLevels=1, - float featureScaleMul=0.1f, - int initXyStep=6, int initImgBound=0, - bool varyXyStepWithScale=true, - bool varyImgBoundWithScale=false ); - AlgorithmInfo* info() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - double initFeatureScale; - int featureScaleLevels; - double featureScaleMul; - - int initXyStep; - int initImgBound; - - bool varyXyStepWithScale; - bool varyImgBoundWithScale; -}; - -/* - * Adapts a detector to partition the source image into a grid and detect - * points in each cell. - */ -class CV_EXPORTS_W GridAdaptedFeatureDetector : public FeatureDetector -{ -public: - /* - * detector Detector that will be adapted. - * maxTotalKeypoints Maximum count of keypoints detected on the image. Only the strongest keypoints - * will be keeped. - * gridRows Grid rows count. - * gridCols Grid column count. - */ - CV_WRAP GridAdaptedFeatureDetector( const Ptr& detector=0, - int maxTotalKeypoints=1000, - int gridRows=4, int gridCols=4 ); - - // TODO implement read/write - virtual bool empty() const; - - AlgorithmInfo* info() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - Ptr detector; - int maxTotalKeypoints; - int gridRows; - int gridCols; -}; - -/* - * Adapts a detector to detect points over multiple levels of a Gaussian - * pyramid. Useful for detectors that are not inherently scaled. - */ -class CV_EXPORTS_W PyramidAdaptedFeatureDetector : public FeatureDetector -{ -public: - // maxLevel - The 0-based index of the last pyramid layer - CV_WRAP PyramidAdaptedFeatureDetector( const Ptr& detector, int maxLevel=2 ); - - // TODO implement read/write - virtual bool empty() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - Ptr detector; - int maxLevel; -}; - -/** \brief A feature detector parameter adjuster, this is used by the DynamicAdaptedFeatureDetector - * and is a wrapper for FeatureDetector that allow them to be adjusted after a detection - */ -class CV_EXPORTS AdjusterAdapter: public FeatureDetector -{ -public: - /** pure virtual interface - */ - virtual ~AdjusterAdapter() {} - /** too few features were detected so, adjust the detector params accordingly - * \param min the minimum number of desired features - * \param n_detected the number previously detected - */ - virtual void tooFew(int min, int n_detected) = 0; - /** too many features were detected so, adjust the detector params accordingly - * \param max the maximum number of desired features - * \param n_detected the number previously detected - */ - virtual void tooMany(int max, int n_detected) = 0; - /** are params maxed out or still valid? - * \return false if the parameters can't be adjusted any more - */ - virtual bool good() const = 0; - - virtual Ptr clone() const = 0; - - static Ptr create( const string& detectorType ); -}; -/** \brief an adaptively adjusting detector that iteratively detects until the desired number - * of features are detected. - * Beware that this is not thread safe - as the adjustment of parameters breaks the const - * of the detection routine... - * /TODO Make this const correct and thread safe - * - * sample usage: - //will create a detector that attempts to find 100 - 110 FAST Keypoints, and will at most run - //FAST feature detection 10 times until that number of keypoints are found - Ptr detector(new DynamicAdaptedFeatureDetector(new FastAdjuster(20,true),100, 110, 10)); - - */ -class CV_EXPORTS DynamicAdaptedFeatureDetector: public FeatureDetector -{ -public: - - /** \param adjuster an AdjusterAdapter that will do the detection and parameter adjustment - * \param max_features the maximum desired number of features - * \param max_iters the maximum number of times to try to adjust the feature detector params - * for the FastAdjuster this can be high, but with Star or Surf this can get time consuming - * \param min_features the minimum desired features - */ - DynamicAdaptedFeatureDetector( const Ptr& adjuster, int min_features=400, int max_features=500, int max_iters=5 ); - - virtual bool empty() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - -private: - DynamicAdaptedFeatureDetector& operator=(const DynamicAdaptedFeatureDetector&); - DynamicAdaptedFeatureDetector(const DynamicAdaptedFeatureDetector&); - - int escape_iters_; - int min_features_, max_features_; - const Ptr adjuster_; -}; - -/**\brief an adjust for the FAST detector. This will basically decrement or increment the - * threshold by 1 - */ -class CV_EXPORTS FastAdjuster: public AdjusterAdapter -{ -public: - /**\param init_thresh the initial threshold to start with, default = 20 - * \param nonmax whether to use non max or not for fast feature detection - */ - FastAdjuster(int init_thresh=20, bool nonmax=true, int min_thresh=1, int max_thresh=200); - - virtual void tooFew(int minv, int n_detected); - virtual void tooMany(int maxv, int n_detected); - virtual bool good() const; - - virtual Ptr clone() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - int thresh_; - bool nonmax_; - int init_thresh_, min_thresh_, max_thresh_; -}; - - -/** An adjuster for StarFeatureDetector, this one adjusts the responseThreshold for now - * TODO find a faster way to converge the parameters for Star - use CvStarDetectorParams - */ -class CV_EXPORTS StarAdjuster: public AdjusterAdapter -{ -public: - StarAdjuster(double initial_thresh=30.0, double min_thresh=2., double max_thresh=200.); - - virtual void tooFew(int minv, int n_detected); - virtual void tooMany(int maxv, int n_detected); - virtual bool good() const; - - virtual Ptr clone() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - double thresh_, init_thresh_, min_thresh_, max_thresh_; -}; - -class CV_EXPORTS SurfAdjuster: public AdjusterAdapter -{ -public: - SurfAdjuster( double initial_thresh=400.f, double min_thresh=2, double max_thresh=1000 ); - - virtual void tooFew(int minv, int n_detected); - virtual void tooMany(int maxv, int n_detected); - virtual bool good() const; - - virtual Ptr clone() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - double thresh_, init_thresh_, min_thresh_, max_thresh_; -}; - -CV_EXPORTS Mat windowedMatchingMask( const vector& keypoints1, const vector& keypoints2, - float maxDeltaX, float maxDeltaY ); - - - -/* - * OpponentColorDescriptorExtractor - * - * Adapts a descriptor extractor to compute descripors in Opponent Color Space - * (refer to van de Sande et al., CGIV 2008 "Color Descriptors for Object Category Recognition"). - * Input RGB image is transformed in Opponent Color Space. Then unadapted descriptor extractor - * (set in constructor) computes descriptors on each of the three channel and concatenate - * them into a single color descriptor. - */ -class CV_EXPORTS OpponentColorDescriptorExtractor : public DescriptorExtractor -{ -public: - OpponentColorDescriptorExtractor( const Ptr& descriptorExtractor ); - - virtual void read( const FileNode& ); - virtual void write( FileStorage& ) const; - - virtual int descriptorSize() const; - virtual int descriptorType() const; - - virtual bool empty() const; - -protected: - virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; - - Ptr descriptorExtractor; -}; - -/* - * BRIEF Descriptor - */ -class CV_EXPORTS BriefDescriptorExtractor : public DescriptorExtractor -{ -public: - static const int PATCH_SIZE = 48; - static const int KERNEL_SIZE = 9; - - // bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes. - BriefDescriptorExtractor( int bytes = 32 ); - - virtual void read( const FileNode& ); - virtual void write( FileStorage& ) const; - - virtual int descriptorSize() const; - virtual int descriptorType() const; - - /// @todo read and write for brief - - AlgorithmInfo* info() const; - -protected: - virtual void computeImpl(const Mat& image, vector& keypoints, Mat& descriptors) const; - - typedef void(*PixelTestFn)(const Mat&, const vector&, Mat&); - - int bytes_; - PixelTestFn test_fn_; -}; - - -/****************************************************************************************\ -* Distance * -\****************************************************************************************/ - -template -struct CV_EXPORTS Accumulator -{ - typedef T Type; -}; - -template<> struct Accumulator { typedef float Type; }; -template<> struct Accumulator { typedef float Type; }; -template<> struct Accumulator { typedef float Type; }; -template<> struct Accumulator { typedef float Type; }; - -/* - * Squared Euclidean distance functor - */ -template -struct CV_EXPORTS SL2 -{ - enum { normType = NORM_L2SQR }; - typedef T ValueType; - typedef typename Accumulator::Type ResultType; - - ResultType operator()( const T* a, const T* b, int size ) const - { - return normL2Sqr(a, b, size); - } -}; - -/* - * Euclidean distance functor - */ -template -struct CV_EXPORTS L2 -{ - enum { normType = NORM_L2 }; - typedef T ValueType; - typedef typename Accumulator::Type ResultType; - - ResultType operator()( const T* a, const T* b, int size ) const - { - return (ResultType)sqrt((double)normL2Sqr(a, b, size)); - } -}; - -/* - * Manhattan distance (city block distance) functor - */ -template -struct CV_EXPORTS L1 -{ - enum { normType = NORM_L1 }; - typedef T ValueType; - typedef typename Accumulator::Type ResultType; - - ResultType operator()( const T* a, const T* b, int size ) const - { - return normL1(a, b, size); - } -}; - -/* - * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor - * bit count of A exclusive XOR'ed with B - */ -struct CV_EXPORTS Hamming -{ - enum { normType = NORM_HAMMING }; - typedef unsigned char ValueType; - typedef int ResultType; - - /** this will count the bits in a ^ b - */ - ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const - { - return normHamming(a, b, size); - } -}; - -typedef Hamming HammingLUT; - -template struct HammingMultilevel -{ - enum { normType = NORM_HAMMING + (cellsize>1) }; - typedef unsigned char ValueType; - typedef int ResultType; - - ResultType operator()( const unsigned char* a, const unsigned char* b, int size ) const - { - return normHamming(a, b, size, cellsize); - } -}; - -/****************************************************************************************\ -* DMatch * -\****************************************************************************************/ -/* - * Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors. - */ -struct CV_EXPORTS_W_SIMPLE DMatch -{ - CV_WRAP DMatch() : queryIdx(-1), trainIdx(-1), imgIdx(-1), distance(FLT_MAX) {} - CV_WRAP DMatch( int _queryIdx, int _trainIdx, float _distance ) : - queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(-1), distance(_distance) {} - CV_WRAP DMatch( int _queryIdx, int _trainIdx, int _imgIdx, float _distance ) : - queryIdx(_queryIdx), trainIdx(_trainIdx), imgIdx(_imgIdx), distance(_distance) {} - - CV_PROP_RW int queryIdx; // query descriptor index - CV_PROP_RW int trainIdx; // train descriptor index - CV_PROP_RW int imgIdx; // train image index - - CV_PROP_RW float distance; - - // less is better - bool operator<( const DMatch &m ) const - { - return distance < m.distance; - } -}; - -/****************************************************************************************\ -* DescriptorMatcher * -\****************************************************************************************/ -/* - * Abstract base class for matching two sets of descriptors. - */ -class CV_EXPORTS_W DescriptorMatcher : public Algorithm -{ -public: - virtual ~DescriptorMatcher(); - - /* - * Add descriptors to train descriptor collection. - * descriptors Descriptors to add. Each descriptors[i] is a descriptors set from one image. - */ - CV_WRAP virtual void add( const vector& descriptors ); - /* - * Get train descriptors collection. - */ - CV_WRAP const vector& getTrainDescriptors() const; - /* - * Clear train descriptors collection. - */ - CV_WRAP virtual void clear(); - - /* - * Return true if there are not train descriptors in collection. - */ - CV_WRAP virtual bool empty() const; - /* - * Return true if the matcher supports mask in match methods. - */ - CV_WRAP virtual bool isMaskSupported() const = 0; - - /* - * Train matcher (e.g. train flann index). - * In all methods to match the method train() is run every time before matching. - * Some descriptor matchers (e.g. BruteForceMatcher) have empty implementation - * of this method, other matchers really train their inner structures - * (e.g. FlannBasedMatcher trains flann::Index). So nonempty implementation - * of train() should check the class object state and do traing/retraining - * only if the state requires that (e.g. FlannBasedMatcher trains flann::Index - * if it has not trained yet or if new descriptors have been added to the train - * collection). - */ - CV_WRAP virtual void train(); - /* - * Group of methods to match descriptors from image pair. - * Method train() is run in this methods. - */ - // Find one best match for each query descriptor (if mask is empty). - CV_WRAP void match( const Mat& queryDescriptors, const Mat& trainDescriptors, - CV_OUT vector& matches, const Mat& mask=Mat() ) const; - // Find k best matches for each query descriptor (in increasing order of distances). - // compactResult is used when mask is not empty. If compactResult is false matches - // vector will have the same size as queryDescriptors rows. If compactResult is true - // matches vector will not contain matches for fully masked out query descriptors. - CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, - CV_OUT vector >& matches, int k, - const Mat& mask=Mat(), bool compactResult=false ) const; - // Find best matches for each query descriptor which have distance less than - // maxDistance (in increasing order of distances). - void radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, - vector >& matches, float maxDistance, - const Mat& mask=Mat(), bool compactResult=false ) const; - /* - * Group of methods to match descriptors from one image to image set. - * See description of similar methods for matching image pair above. - */ - CV_WRAP void match( const Mat& queryDescriptors, CV_OUT vector& matches, - const vector& masks=vector() ); - CV_WRAP void knnMatch( const Mat& queryDescriptors, CV_OUT vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ); - void radiusMatch( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ); - - // Reads matcher object from a file node - virtual void read( const FileNode& ); - // Writes matcher object to a file storage - virtual void write( FileStorage& ) const; - - // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies - // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters - // but with empty train data. - virtual Ptr clone( bool emptyTrainData=false ) const = 0; - - CV_WRAP static Ptr create( const string& descriptorMatcherType ); -protected: - /* - * Class to work with descriptors from several images as with one merged matrix. - * It is used e.g. in FlannBasedMatcher. - */ - class CV_EXPORTS DescriptorCollection - { - public: - DescriptorCollection(); - DescriptorCollection( const DescriptorCollection& collection ); - virtual ~DescriptorCollection(); - - // Vector of matrices "descriptors" will be merged to one matrix "mergedDescriptors" here. - void set( const vector& descriptors ); - virtual void clear(); - - const Mat& getDescriptors() const; - const Mat getDescriptor( int imgIdx, int localDescIdx ) const; - const Mat getDescriptor( int globalDescIdx ) const; - void getLocalIdx( int globalDescIdx, int& imgIdx, int& localDescIdx ) const; - - int size() const; - - protected: - Mat mergedDescriptors; - vector startIdxs; - }; - - // In fact the matching is implemented only by the following two methods. These methods suppose - // that the class object has been trained already. Public match methods call these methods - // after calling train(). - virtual void knnMatchImpl( const Mat& queryDescriptors, vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ) = 0; - virtual void radiusMatchImpl( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ) = 0; - - static bool isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx ); - static bool isMaskedOut( const vector& masks, int queryIdx ); - - static Mat clone_op( Mat m ) { return m.clone(); } - void checkMasks( const vector& masks, int queryDescriptorsCount ) const; - - // Collection of descriptors from train images. - vector trainDescCollection; -}; - -/* - * Brute-force descriptor matcher. - * - * For each descriptor in the first set, this matcher finds the closest - * descriptor in the second set by trying each one. - * - * For efficiency, BruteForceMatcher is templated on the distance metric. - * For float descriptors, a common choice would be cv::L2. - */ -class CV_EXPORTS_W BFMatcher : public DescriptorMatcher -{ -public: - CV_WRAP BFMatcher( int normType=NORM_L2, bool crossCheck=false ); - virtual ~BFMatcher() {} - - virtual bool isMaskSupported() const { return true; } - - virtual Ptr clone( bool emptyTrainData=false ) const; - - AlgorithmInfo* info() const; -protected: - virtual void knnMatchImpl( const Mat& queryDescriptors, vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ); - virtual void radiusMatchImpl( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ); - - int normType; - bool crossCheck; -}; - - -/* - * Flann based matcher - */ -class CV_EXPORTS_W FlannBasedMatcher : public DescriptorMatcher -{ -public: - CV_WRAP FlannBasedMatcher( const Ptr& indexParams=new flann::KDTreeIndexParams(), - const Ptr& searchParams=new flann::SearchParams() ); - - virtual void add( const vector& descriptors ); - virtual void clear(); - - // Reads matcher object from a file node - virtual void read( const FileNode& ); - // Writes matcher object to a file storage - virtual void write( FileStorage& ) const; - - virtual void train(); - virtual bool isMaskSupported() const; - - virtual Ptr clone( bool emptyTrainData=false ) const; - - AlgorithmInfo* info() const; -protected: - static void convertToDMatches( const DescriptorCollection& descriptors, - const Mat& indices, const Mat& distances, - vector >& matches ); - - virtual void knnMatchImpl( const Mat& queryDescriptors, vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ); - virtual void radiusMatchImpl( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ); - - Ptr indexParams; - Ptr searchParams; - Ptr flannIndex; - - DescriptorCollection mergedDescriptors; - int addedDescCount; -}; - -/****************************************************************************************\ -* GenericDescriptorMatcher * -\****************************************************************************************/ -/* - * Abstract interface for a keypoint descriptor and matcher - */ -class GenericDescriptorMatcher; -typedef GenericDescriptorMatcher GenericDescriptorMatch; - -class CV_EXPORTS GenericDescriptorMatcher -{ -public: - GenericDescriptorMatcher(); - virtual ~GenericDescriptorMatcher(); - - /* - * Add train collection: images and keypoints from them. - * images A set of train images. - * ketpoints Keypoint collection that have been detected on train images. - * - * Keypoints for which a descriptor cannot be computed are removed. Such keypoints - * must be filtered in this method befor adding keypoints to train collection "trainPointCollection". - * If inheritor class need perform such prefiltering the method add() must be overloaded. - * In the other class methods programmer has access to the train keypoints by a constant link. - */ - virtual void add( const vector& images, - vector >& keypoints ); - - const vector& getTrainImages() const; - const vector >& getTrainKeypoints() const; - - /* - * Clear images and keypoints storing in train collection. - */ - virtual void clear(); - /* - * Returns true if matcher supports mask to match descriptors. - */ - virtual bool isMaskSupported() = 0; - /* - * Train some inner structures (e.g. flann index or decision trees). - * train() methods is run every time in matching methods. So the method implementation - * should has a check whether these inner structures need be trained/retrained or not. - */ - virtual void train(); - - /* - * Classifies query keypoints. - * queryImage The query image - * queryKeypoints Keypoints from the query image - * trainImage The train image - * trainKeypoints Keypoints from the train image - */ - // Classify keypoints from query image under one train image. - void classify( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints ) const; - // Classify keypoints from query image under train image collection. - void classify( const Mat& queryImage, vector& queryKeypoints ); - - /* - * Group of methods to match keypoints from image pair. - * Keypoints for which a descriptor cannot be computed are removed. - * train() method is called here. - */ - // Find one best match for each query descriptor (if mask is empty). - void match( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector& matches, const Mat& mask=Mat() ) const; - // Find k best matches for each query keypoint (in increasing order of distances). - // compactResult is used when mask is not empty. If compactResult is false matches - // vector will have the same size as queryDescriptors rows. - // If compactResult is true matches vector will not contain matches for fully masked out query descriptors. - void knnMatch( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector >& matches, int k, - const Mat& mask=Mat(), bool compactResult=false ) const; - // Find best matches for each query descriptor which have distance less than maxDistance (in increasing order of distances). - void radiusMatch( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector >& matches, float maxDistance, - const Mat& mask=Mat(), bool compactResult=false ) const; - /* - * Group of methods to match keypoints from one image to image set. - * See description of similar methods for matching image pair above. - */ - void match( const Mat& queryImage, vector& queryKeypoints, - vector& matches, const vector& masks=vector() ); - void knnMatch( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, int k, - const vector& masks=vector(), bool compactResult=false ); - void radiusMatch( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, float maxDistance, - const vector& masks=vector(), bool compactResult=false ); - - // Reads matcher object from a file node - virtual void read( const FileNode& fn ); - // Writes matcher object to a file storage - virtual void write( FileStorage& fs ) const; - - // Return true if matching object is empty (e.g. feature detector or descriptor matcher are empty) - virtual bool empty() const; - - // Clone the matcher. If emptyTrainData is false the method create deep copy of the object, i.e. copies - // both parameters and train data. If emptyTrainData is true the method create object copy with current parameters - // but with empty train data. - virtual Ptr clone( bool emptyTrainData=false ) const = 0; - - static Ptr create( const string& genericDescritptorMatcherType, - const string ¶msFilename=string() ); - -protected: - // In fact the matching is implemented only by the following two methods. These methods suppose - // that the class object has been trained already. Public match methods call these methods - // after calling train(). - virtual void knnMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, int k, - const vector& masks, bool compactResult ) = 0; - virtual void radiusMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, float maxDistance, - const vector& masks, bool compactResult ) = 0; - /* - * A storage for sets of keypoints together with corresponding images and class IDs - */ - class CV_EXPORTS KeyPointCollection - { - public: - KeyPointCollection(); - KeyPointCollection( const KeyPointCollection& collection ); - void add( const vector& images, const vector >& keypoints ); - void clear(); - - // Returns the total number of keypoints in the collection - size_t keypointCount() const; - size_t imageCount() const; - - const vector >& getKeypoints() const; - const vector& getKeypoints( int imgIdx ) const; - const KeyPoint& getKeyPoint( int imgIdx, int localPointIdx ) const; - const KeyPoint& getKeyPoint( int globalPointIdx ) const; - void getLocalIdx( int globalPointIdx, int& imgIdx, int& localPointIdx ) const; - - const vector& getImages() const; - const Mat& getImage( int imgIdx ) const; - - protected: - int pointCount; - - vector images; - vector > keypoints; - // global indices of the first points in each image, startIndices.size() = keypoints.size() - vector startIndices; - - private: - static Mat clone_op( Mat m ) { return m.clone(); } - }; - - KeyPointCollection trainPointCollection; -}; - - -/****************************************************************************************\ -* VectorDescriptorMatcher * -\****************************************************************************************/ - -/* - * A class used for matching descriptors that can be described as vectors in a finite-dimensional space - */ -class VectorDescriptorMatcher; -typedef VectorDescriptorMatcher VectorDescriptorMatch; - -class CV_EXPORTS VectorDescriptorMatcher : public GenericDescriptorMatcher -{ -public: - VectorDescriptorMatcher( const Ptr& extractor, const Ptr& matcher ); - virtual ~VectorDescriptorMatcher(); - - virtual void add( const vector& imgCollection, - vector >& pointCollection ); - - virtual void clear(); - - virtual void train(); - - virtual bool isMaskSupported(); - - virtual void read( const FileNode& fn ); - virtual void write( FileStorage& fs ) const; - virtual bool empty() const; - - virtual Ptr clone( bool emptyTrainData=false ) const; - -protected: - virtual void knnMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, int k, - const vector& masks, bool compactResult ); - virtual void radiusMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, float maxDistance, - const vector& masks, bool compactResult ); - - Ptr extractor; - Ptr matcher; -}; - -/****************************************************************************************\ -* Drawing functions * -\****************************************************************************************/ -struct CV_EXPORTS DrawMatchesFlags -{ - enum{ DEFAULT = 0, // Output image matrix will be created (Mat::create), - // i.e. existing memory of output image may be reused. - // Two source image, matches and single keypoints will be drawn. - // For each keypoint only the center point will be drawn (without - // the circle around keypoint with keypoint size and orientation). - DRAW_OVER_OUTIMG = 1, // Output image matrix will not be created (Mat::create). - // Matches will be drawn on existing content of output image. - NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn. - DRAW_RICH_KEYPOINTS = 4 // For each keypoint the circle around keypoint with keypoint size and - // orientation will be drawn. - }; -}; - -// Draw keypoints. -CV_EXPORTS_W void drawKeypoints( const Mat& image, const vector& keypoints, CV_OUT Mat& outImage, - const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT ); - -// Draws matches of keypints from two images on output image. -CV_EXPORTS void drawMatches( const Mat& img1, const vector& keypoints1, - const Mat& img2, const vector& keypoints2, - const vector& matches1to2, Mat& outImg, - const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), - const vector& matchesMask=vector(), int flags=DrawMatchesFlags::DEFAULT ); - -CV_EXPORTS void drawMatches( const Mat& img1, const vector& keypoints1, - const Mat& img2, const vector& keypoints2, - const vector >& matches1to2, Mat& outImg, - const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), - const vector >& matchesMask=vector >(), int flags=DrawMatchesFlags::DEFAULT ); - -/****************************************************************************************\ -* Functions to evaluate the feature detectors and [generic] descriptor extractors * -\****************************************************************************************/ - -CV_EXPORTS void evaluateFeatureDetector( const Mat& img1, const Mat& img2, const Mat& H1to2, - vector* keypoints1, vector* keypoints2, - float& repeatability, int& correspCount, - const Ptr& fdetector=Ptr() ); - -CV_EXPORTS void computeRecallPrecisionCurve( const vector >& matches1to2, - const vector >& correctMatches1to2Mask, - vector& recallPrecisionCurve ); - -CV_EXPORTS float getRecall( const vector& recallPrecisionCurve, float l_precision ); -CV_EXPORTS int getNearestPoint( const vector& recallPrecisionCurve, float l_precision ); - -CV_EXPORTS void evaluateGenericDescriptorMatcher( const Mat& img1, const Mat& img2, const Mat& H1to2, - vector& keypoints1, vector& keypoints2, - vector >* matches1to2, vector >* correctMatches1to2Mask, - vector& recallPrecisionCurve, - const Ptr& dmatch=Ptr() ); - - -/****************************************************************************************\ -* Bag of visual words * -\****************************************************************************************/ -/* - * Abstract base class for training of a 'bag of visual words' vocabulary from a set of descriptors - */ -class CV_EXPORTS BOWTrainer -{ -public: - BOWTrainer(); - virtual ~BOWTrainer(); - - void add( const Mat& descriptors ); - const vector& getDescriptors() const; - int descripotorsCount() const; - - virtual void clear(); - - /* - * Train visual words vocabulary, that is cluster training descriptors and - * compute cluster centers. - * Returns cluster centers. - * - * descriptors Training descriptors computed on images keypoints. - */ - virtual Mat cluster() const = 0; - virtual Mat cluster( const Mat& descriptors ) const = 0; - -protected: - vector descriptors; - int size; -}; - -/* - * This is BOWTrainer using cv::kmeans to get vocabulary. - */ -class CV_EXPORTS BOWKMeansTrainer : public BOWTrainer -{ -public: - BOWKMeansTrainer( int clusterCount, const TermCriteria& termcrit=TermCriteria(), - int attempts=3, int flags=KMEANS_PP_CENTERS ); - virtual ~BOWKMeansTrainer(); - - // Returns trained vocabulary (i.e. cluster centers). - virtual Mat cluster() const; - virtual Mat cluster( const Mat& descriptors ) const; - -protected: - - int clusterCount; - TermCriteria termcrit; - int attempts; - int flags; -}; - -/* - * Class to compute image descriptor using bag of visual words. - */ -class CV_EXPORTS BOWImgDescriptorExtractor -{ -public: - BOWImgDescriptorExtractor( const Ptr& dextractor, - const Ptr& dmatcher ); - virtual ~BOWImgDescriptorExtractor(); - - void setVocabulary( const Mat& vocabulary ); - const Mat& getVocabulary() const; - void compute( const Mat& image, vector& keypoints, Mat& imgDescriptor, - vector >* pointIdxsOfClusters=0, Mat* descriptors=0 ); - // compute() is not constant because DescriptorMatcher::match is not constant - - int descriptorSize() const; - int descriptorType() const; - -protected: - Mat vocabulary; - Ptr dextractor; - Ptr dmatcher; -}; - -} /* namespace cv */ - -#endif /* __cplusplus */ - -#endif - -/* End of file. */ diff --git a/modules/features2d/src/bagofwords.cpp b/modules/features2d/src/bagofwords.cpp deleted file mode 100644 index 83d9df7..0000000 --- a/modules/features2d/src/bagofwords.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -using namespace std; - -namespace cv -{ - -BOWTrainer::BOWTrainer() -{} - -BOWTrainer::~BOWTrainer() -{} - -void BOWTrainer::add( const Mat& _descriptors ) -{ - CV_Assert( !_descriptors.empty() ); - if( !descriptors.empty() ) - { - CV_Assert( descriptors[0].cols == _descriptors.cols ); - CV_Assert( descriptors[0].type() == _descriptors.type() ); - size += _descriptors.rows; - } - else - { - size = _descriptors.rows; - } - - descriptors.push_back(_descriptors); -} - -const vector& BOWTrainer::getDescriptors() const -{ - return descriptors; -} - -int BOWTrainer::descripotorsCount() const -{ - return descriptors.empty() ? 0 : size; -} - -void BOWTrainer::clear() -{ - descriptors.clear(); -} - -BOWKMeansTrainer::BOWKMeansTrainer( int _clusterCount, const TermCriteria& _termcrit, - int _attempts, int _flags ) : - clusterCount(_clusterCount), termcrit(_termcrit), attempts(_attempts), flags(_flags) -{} - -Mat BOWKMeansTrainer::cluster() const -{ - CV_Assert( !descriptors.empty() ); - - int descCount = 0; - for( size_t i = 0; i < descriptors.size(); i++ ) - descCount += descriptors[i].rows; - - Mat mergedDescriptors( descCount, descriptors[0].cols, descriptors[0].type() ); - for( size_t i = 0, start = 0; i < descriptors.size(); i++ ) - { - Mat submut = mergedDescriptors.rowRange((int)start, (int)(start + descriptors[i].rows)); - descriptors[i].copyTo(submut); - start += descriptors[i].rows; - } - return cluster( mergedDescriptors ); -} - -BOWKMeansTrainer::~BOWKMeansTrainer() -{} - -Mat BOWKMeansTrainer::cluster( const Mat& _descriptors ) const -{ - Mat labels, vocabulary; - kmeans( _descriptors, clusterCount, labels, termcrit, attempts, flags, vocabulary ); - return vocabulary; -} - - -BOWImgDescriptorExtractor::BOWImgDescriptorExtractor( const Ptr& _dextractor, - const Ptr& _dmatcher ) : - dextractor(_dextractor), dmatcher(_dmatcher) -{} - -BOWImgDescriptorExtractor::~BOWImgDescriptorExtractor() -{} - -void BOWImgDescriptorExtractor::setVocabulary( const Mat& _vocabulary ) -{ - dmatcher->clear(); - vocabulary = _vocabulary; - dmatcher->add( vector(1, vocabulary) ); -} - -const Mat& BOWImgDescriptorExtractor::getVocabulary() const -{ - return vocabulary; -} - -void BOWImgDescriptorExtractor::compute( const Mat& image, vector& keypoints, Mat& imgDescriptor, - vector >* pointIdxsOfClusters, Mat* _descriptors ) -{ - imgDescriptor.release(); - - if( keypoints.empty() ) - return; - - int clusterCount = descriptorSize(); // = vocabulary.rows - - // Compute descriptors for the image. - Mat descriptors; - dextractor->compute( image, keypoints, descriptors ); - - // Match keypoint descriptors to cluster center (to vocabulary) - vector matches; - dmatcher->match( descriptors, matches ); - - // Compute image descriptor - if( pointIdxsOfClusters ) - { - pointIdxsOfClusters->clear(); - pointIdxsOfClusters->resize(clusterCount); - } - - imgDescriptor = Mat( 1, clusterCount, descriptorType(), Scalar::all(0.0) ); - float *dptr = (float*)imgDescriptor.data; - for( size_t i = 0; i < matches.size(); i++ ) - { - int queryIdx = matches[i].queryIdx; - int trainIdx = matches[i].trainIdx; // cluster index - CV_Assert( queryIdx == (int)i ); - - dptr[trainIdx] = dptr[trainIdx] + 1.f; - if( pointIdxsOfClusters ) - (*pointIdxsOfClusters)[trainIdx].push_back( queryIdx ); - } - - // Normalize image descriptor. - imgDescriptor /= descriptors.rows; - - // Add the descriptors of image keypoints - if (_descriptors) { - *_descriptors = descriptors.clone(); - } -} - -int BOWImgDescriptorExtractor::descriptorSize() const -{ - return vocabulary.empty() ? 0 : vocabulary.rows; -} - -int BOWImgDescriptorExtractor::descriptorType() const -{ - return CV_32FC1; -} - -} diff --git a/modules/features2d/src/blobdetector.cpp b/modules/features2d/src/blobdetector.cpp deleted file mode 100644 index dcc8946..0000000 --- a/modules/features2d/src/blobdetector.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -//#define DEBUG_BLOB_DETECTOR - -#ifdef DEBUG_BLOB_DETECTOR -# include "opencv2/opencv_modules.hpp" -# ifdef HAVE_OPENCV_HIGHGUI -# include "opencv2/highgui/highgui.hpp" -# else -# undef DEBUG_BLOB_DETECTOR -# endif -#endif - -using namespace cv; - -/* -* SimpleBlobDetector -*/ -SimpleBlobDetector::Params::Params() -{ - thresholdStep = 10; - minThreshold = 50; - maxThreshold = 220; - minRepeatability = 2; - minDistBetweenBlobs = 10; - - filterByColor = true; - blobColor = 0; - - filterByArea = true; - minArea = 25; - maxArea = 5000; - - filterByCircularity = false; - minCircularity = 0.8f; - maxCircularity = std::numeric_limits::max(); - - filterByInertia = true; - //minInertiaRatio = 0.6; - minInertiaRatio = 0.1f; - maxInertiaRatio = std::numeric_limits::max(); - - filterByConvexity = true; - //minConvexity = 0.8; - minConvexity = 0.95f; - maxConvexity = std::numeric_limits::max(); -} - -void SimpleBlobDetector::Params::read(const cv::FileNode& fn ) -{ - thresholdStep = fn["thresholdStep"]; - minThreshold = fn["minThreshold"]; - maxThreshold = fn["maxThreshold"]; - - minRepeatability = (size_t)(int)fn["minRepeatability"]; - minDistBetweenBlobs = fn["minDistBetweenBlobs"]; - - filterByColor = (int)fn["filterByColor"] != 0 ? true : false; - blobColor = (uchar)(int)fn["blobColor"]; - - filterByArea = (int)fn["filterByArea"] != 0 ? true : false; - minArea = fn["minArea"]; - maxArea = fn["maxArea"]; - - filterByCircularity = (int)fn["filterByCircularity"] != 0 ? true : false; - minCircularity = fn["minCircularity"]; - maxCircularity = fn["maxCircularity"]; - - filterByInertia = (int)fn["filterByInertia"] != 0 ? true : false; - minInertiaRatio = fn["minInertiaRatio"]; - maxInertiaRatio = fn["maxInertiaRatio"]; - - filterByConvexity = (int)fn["filterByConvexity"] != 0 ? true : false; - minConvexity = fn["minConvexity"]; - maxConvexity = fn["maxConvexity"]; -} - -void SimpleBlobDetector::Params::write(cv::FileStorage& fs) const -{ - fs << "thresholdStep" << thresholdStep; - fs << "minThreshold" << minThreshold; - fs << "maxThreshold" << maxThreshold; - - fs << "minRepeatability" << (int)minRepeatability; - fs << "minDistBetweenBlobs" << minDistBetweenBlobs; - - fs << "filterByColor" << (int)filterByColor; - fs << "blobColor" << (int)blobColor; - - fs << "filterByArea" << (int)filterByArea; - fs << "minArea" << minArea; - fs << "maxArea" << maxArea; - - fs << "filterByCircularity" << (int)filterByCircularity; - fs << "minCircularity" << minCircularity; - fs << "maxCircularity" << maxCircularity; - - fs << "filterByInertia" << (int)filterByInertia; - fs << "minInertiaRatio" << minInertiaRatio; - fs << "maxInertiaRatio" << maxInertiaRatio; - - fs << "filterByConvexity" << (int)filterByConvexity; - fs << "minConvexity" << minConvexity; - fs << "maxConvexity" << maxConvexity; -} - -SimpleBlobDetector::SimpleBlobDetector(const SimpleBlobDetector::Params ¶meters) : -params(parameters) -{ -} - -void SimpleBlobDetector::read( const cv::FileNode& fn ) -{ - params.read(fn); -} - -void SimpleBlobDetector::write( cv::FileStorage& fs ) const -{ - params.write(fs); -} - -void SimpleBlobDetector::findBlobs(const cv::Mat &image, const cv::Mat &binaryImage, vector
          ¢ers) const -{ - (void)image; - centers.clear(); - - vector < vector > contours; - Mat tmpBinaryImage = binaryImage.clone(); - findContours(tmpBinaryImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); - -#ifdef DEBUG_BLOB_DETECTOR - // Mat keypointsImage; - // cvtColor( binaryImage, keypointsImage, CV_GRAY2RGB ); - // - // Mat contoursImage; - // cvtColor( binaryImage, contoursImage, CV_GRAY2RGB ); - // drawContours( contoursImage, contours, -1, Scalar(0,255,0) ); - // imshow("contours", contoursImage ); -#endif - - for (size_t contourIdx = 0; contourIdx < contours.size(); contourIdx++) - { - Center center; - center.confidence = 1; - Moments moms = moments(Mat(contours[contourIdx])); - if (params.filterByArea) - { - double area = moms.m00; - if (area < params.minArea || area >= params.maxArea) - continue; - } - - if (params.filterByCircularity) - { - double area = moms.m00; - double perimeter = arcLength(Mat(contours[contourIdx]), true); - double ratio = 4 * CV_PI * area / (perimeter * perimeter); - if (ratio < params.minCircularity || ratio >= params.maxCircularity) - continue; - } - - if (params.filterByInertia) - { - double denominator = sqrt(pow(2 * moms.mu11, 2) + pow(moms.mu20 - moms.mu02, 2)); - const double eps = 1e-2; - double ratio; - if (denominator > eps) - { - double cosmin = (moms.mu20 - moms.mu02) / denominator; - double sinmin = 2 * moms.mu11 / denominator; - double cosmax = -cosmin; - double sinmax = -sinmin; - - double imin = 0.5 * (moms.mu20 + moms.mu02) - 0.5 * (moms.mu20 - moms.mu02) * cosmin - moms.mu11 * sinmin; - double imax = 0.5 * (moms.mu20 + moms.mu02) - 0.5 * (moms.mu20 - moms.mu02) * cosmax - moms.mu11 * sinmax; - ratio = imin / imax; - } - else - { - ratio = 1; - } - - if (ratio < params.minInertiaRatio || ratio >= params.maxInertiaRatio) - continue; - - center.confidence = ratio * ratio; - } - - if (params.filterByConvexity) - { - vector < Point > hull; - convexHull(Mat(contours[contourIdx]), hull); - double area = contourArea(Mat(contours[contourIdx])); - double hullArea = contourArea(Mat(hull)); - double ratio = area / hullArea; - if (ratio < params.minConvexity || ratio >= params.maxConvexity) - continue; - } - - center.location = Point2d(moms.m10 / moms.m00, moms.m01 / moms.m00); - - if (params.filterByColor) - { - if (binaryImage.at (cvRound(center.location.y), cvRound(center.location.x)) != params.blobColor) - continue; - } - - //compute blob radius - { - vector dists; - for (size_t pointIdx = 0; pointIdx < contours[contourIdx].size(); pointIdx++) - { - Point2d pt = contours[contourIdx][pointIdx]; - dists.push_back(norm(center.location - pt)); - } - std::sort(dists.begin(), dists.end()); - center.radius = (dists[(dists.size() - 1) / 2] + dists[dists.size() / 2]) / 2.; - } - - centers.push_back(center); - -#ifdef DEBUG_BLOB_DETECTOR - // circle( keypointsImage, center.location, 1, Scalar(0,0,255), 1 ); -#endif - } -#ifdef DEBUG_BLOB_DETECTOR - // imshow("bk", keypointsImage ); - // waitKey(); -#endif -} - -void SimpleBlobDetector::detectImpl(const cv::Mat& image, std::vector& keypoints, const cv::Mat&) const -{ - //TODO: support mask - keypoints.clear(); - Mat grayscaleImage; - if (image.channels() == 3) - cvtColor(image, grayscaleImage, CV_BGR2GRAY); - else - grayscaleImage = image; - - vector < vector
          > centers; - for (double thresh = params.minThreshold; thresh < params.maxThreshold; thresh += params.thresholdStep) - { - Mat binarizedImage; - threshold(grayscaleImage, binarizedImage, thresh, 255, THRESH_BINARY); - -#ifdef DEBUG_BLOB_DETECTOR - // Mat keypointsImage; - // cvtColor( binarizedImage, keypointsImage, CV_GRAY2RGB ); -#endif - - vector < Center > curCenters; - findBlobs(grayscaleImage, binarizedImage, curCenters); - vector < vector
          > newCenters; - for (size_t i = 0; i < curCenters.size(); i++) - { -#ifdef DEBUG_BLOB_DETECTOR - // circle(keypointsImage, curCenters[i].location, curCenters[i].radius, Scalar(0,0,255),-1); -#endif - - bool isNew = true; - for (size_t j = 0; j < centers.size(); j++) - { - double dist = norm(centers[j][ centers[j].size() / 2 ].location - curCenters[i].location); - isNew = dist >= params.minDistBetweenBlobs && dist >= centers[j][ centers[j].size() / 2 ].radius && dist >= curCenters[i].radius; - if (!isNew) - { - centers[j].push_back(curCenters[i]); - - size_t k = centers[j].size() - 1; - while( k > 0 && centers[j][k].radius < centers[j][k-1].radius ) - { - centers[j][k] = centers[j][k-1]; - k--; - } - centers[j][k] = curCenters[i]; - - break; - } - } - if (isNew) - { - newCenters.push_back(vector
          (1, curCenters[i])); - //centers.push_back(vector
          (1, curCenters[i])); - } - } - std::copy(newCenters.begin(), newCenters.end(), std::back_inserter(centers)); - -#ifdef DEBUG_BLOB_DETECTOR - // imshow("binarized", keypointsImage ); - //waitKey(); -#endif - } - - for (size_t i = 0; i < centers.size(); i++) - { - if (centers[i].size() < params.minRepeatability) - continue; - Point2d sumPoint(0, 0); - double normalizer = 0; - for (size_t j = 0; j < centers[i].size(); j++) - { - sumPoint += centers[i][j].confidence * centers[i][j].location; - normalizer += centers[i][j].confidence; - } - sumPoint *= (1. / normalizer); - KeyPoint kpt(sumPoint, (float)(centers[i][centers[i].size() / 2].radius)); - keypoints.push_back(kpt); - } - -#ifdef DEBUG_BLOB_DETECTOR - namedWindow("keypoints", CV_WINDOW_NORMAL); - Mat outImg = image.clone(); - for(size_t i=0; i -#include - -#include -#include - -using namespace cv; - -inline int smoothedSum(const Mat& sum, const KeyPoint& pt, int y, int x) -{ - static const int HALF_KERNEL = BriefDescriptorExtractor::KERNEL_SIZE / 2; - - int img_y = (int)(pt.pt.y + 0.5) + y; - int img_x = (int)(pt.pt.x + 0.5) + x; - return sum.at(img_y + HALF_KERNEL + 1, img_x + HALF_KERNEL + 1) - - sum.at(img_y + HALF_KERNEL + 1, img_x - HALF_KERNEL) - - sum.at(img_y - HALF_KERNEL, img_x + HALF_KERNEL + 1) - + sum.at(img_y - HALF_KERNEL, img_x - HALF_KERNEL); -} - -static void pixelTests16(const Mat& sum, const std::vector& keypoints, Mat& descriptors) -{ - for (int i = 0; i < (int)keypoints.size(); ++i) - { - uchar* desc = descriptors.ptr(i); - const KeyPoint& pt = keypoints[i]; -#include "generated_16.i" - } -} - -static void pixelTests32(const Mat& sum, const std::vector& keypoints, Mat& descriptors) -{ - for (int i = 0; i < (int)keypoints.size(); ++i) - { - uchar* desc = descriptors.ptr(i); - const KeyPoint& pt = keypoints[i]; - -#include "generated_32.i" - } -} - -static void pixelTests64(const Mat& sum, const std::vector& keypoints, Mat& descriptors) -{ - for (int i = 0; i < (int)keypoints.size(); ++i) - { - uchar* desc = descriptors.ptr(i); - const KeyPoint& pt = keypoints[i]; - -#include "generated_64.i" - } -} - -namespace cv -{ - -BriefDescriptorExtractor::BriefDescriptorExtractor(int bytes) : - bytes_(bytes), test_fn_(NULL) -{ - switch (bytes) - { - case 16: - test_fn_ = pixelTests16; - break; - case 32: - test_fn_ = pixelTests32; - break; - case 64: - test_fn_ = pixelTests64; - break; - default: - CV_Error(CV_StsBadArg, "bytes must be 16, 32, or 64"); - } -} - -int BriefDescriptorExtractor::descriptorSize() const -{ - return bytes_; -} - -int BriefDescriptorExtractor::descriptorType() const -{ - return CV_8UC1; -} - -void BriefDescriptorExtractor::read( const FileNode& fn) -{ - int dSize = fn["descriptorSize"]; - switch (dSize) - { - case 16: - test_fn_ = pixelTests16; - break; - case 32: - test_fn_ = pixelTests32; - break; - case 64: - test_fn_ = pixelTests64; - break; - default: - CV_Error(CV_StsBadArg, "descriptorSize must be 16, 32, or 64"); - } - bytes_ = dSize; -} - -void BriefDescriptorExtractor::write( FileStorage& fs) const -{ - fs << "descriptorSize" << bytes_; -} - -void BriefDescriptorExtractor::computeImpl(const Mat& image, std::vector& keypoints, Mat& descriptors) const -{ - // Construct integral image for fast smoothing (box filter) - Mat sum; - - Mat grayImage = image; - if( image.type() != CV_8U ) cvtColor( image, grayImage, CV_BGR2GRAY ); - - ///TODO allow the user to pass in a precomputed integral image - //if(image.type() == CV_32S) - // sum = image; - //else - - integral( grayImage, sum, CV_32S); - - //Remove keypoints very close to the border - KeyPointsFilter::runByImageBorder(keypoints, image.size(), PATCH_SIZE/2 + KERNEL_SIZE/2); - - descriptors = Mat::zeros((int)keypoints.size(), bytes_, CV_8U); - test_fn_(sum, keypoints, descriptors); -} - -} // namespace cv diff --git a/modules/features2d/src/brisk.cpp b/modules/features2d/src/brisk.cpp deleted file mode 100644 index 622f772..0000000 --- a/modules/features2d/src/brisk.cpp +++ /dev/null @@ -1,2240 +0,0 @@ -/********************************************************************* - * Software License Agreement (BSD License) - * - * Copyright (C) 2011 The Autonomous Systems Lab (ASL), ETH Zurich, - * Stefan Leutenegger, Simon Lynen and Margarita Chli. - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 Willow Garage 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - *********************************************************************/ - -/* - BRISK - Binary Robust Invariant Scalable Keypoints - Reference implementation of - [1] Stefan Leutenegger,Margarita Chli and Roland Siegwart, BRISK: - Binary Robust Invariant Scalable Keypoints, in Proceedings of - the IEEE International Conference on Computer Vision (ICCV2011). - */ - -#include -#include -#include -#include -#include - -#include "fast_score.hpp" - -namespace cv -{ - -// a layer in the Brisk detector pyramid -class CV_EXPORTS BriskLayer -{ -public: - // constructor arguments - struct CV_EXPORTS CommonParams - { - static const int HALFSAMPLE = 0; - static const int TWOTHIRDSAMPLE = 1; - }; - // construct a base layer - BriskLayer(const cv::Mat& img, float scale = 1.0f, float offset = 0.0f); - // derive a layer - BriskLayer(const BriskLayer& layer, int mode); - - // Fast/Agast without non-max suppression - void - getAgastPoints(int threshold, std::vector& keypoints); - - // get scores - attention, this is in layer coordinates, not scale=1 coordinates! - inline int - getAgastScore(int x, int y, int threshold) const; - inline int - getAgastScore_5_8(int x, int y, int threshold) const; - inline int - getAgastScore(float xf, float yf, int threshold, float scale = 1.0f) const; - - // accessors - inline const cv::Mat& - img() const - { - return img_; - } - inline const cv::Mat& - scores() const - { - return scores_; - } - inline float - scale() const - { - return scale_; - } - inline float - offset() const - { - return offset_; - } - - // half sampling - static inline void - halfsample(const cv::Mat& srcimg, cv::Mat& dstimg); - // two third sampling - static inline void - twothirdsample(const cv::Mat& srcimg, cv::Mat& dstimg); - -private: - // access gray values (smoothed/interpolated) - inline int - value(const cv::Mat& mat, float xf, float yf, float scale) const; - // the image - cv::Mat img_; - // its Fast scores - cv::Mat_ scores_; - // coordinate transformation - float scale_; - float offset_; - // agast - cv::Ptr fast_9_16_; - int pixel_5_8_[25]; - int pixel_9_16_[25]; -}; - -class CV_EXPORTS BriskScaleSpace -{ -public: - // construct telling the octaves number: - BriskScaleSpace(int _octaves = 3); - ~BriskScaleSpace(); - - // construct the image pyramids - void - constructPyramid(const cv::Mat& image); - - // get Keypoints - void - getKeypoints(const int _threshold, std::vector& keypoints); - -protected: - // nonmax suppression: - inline bool - isMax2D(const int layer, const int x_layer, const int y_layer); - // 1D (scale axis) refinement: - inline float - refine1D(const float s_05, const float s0, const float s05, float& max) const; // around octave - inline float - refine1D_1(const float s_05, const float s0, const float s05, float& max) const; // around intra - inline float - refine1D_2(const float s_05, const float s0, const float s05, float& max) const; // around octave 0 only - // 2D maximum refinement: - inline float - subpixel2D(const int s_0_0, const int s_0_1, const int s_0_2, const int s_1_0, const int s_1_1, const int s_1_2, - const int s_2_0, const int s_2_1, const int s_2_2, float& delta_x, float& delta_y) const; - // 3D maximum refinement centered around (x_layer,y_layer) - inline float - refine3D(const int layer, const int x_layer, const int y_layer, float& x, float& y, float& scale, bool& ismax) const; - - // interpolated score access with recalculation when needed: - inline int - getScoreAbove(const int layer, const int x_layer, const int y_layer) const; - inline int - getScoreBelow(const int layer, const int x_layer, const int y_layer) const; - - // return the maximum of score patches above or below - inline float - getScoreMaxAbove(const int layer, const int x_layer, const int y_layer, const int threshold, bool& ismax, - float& dx, float& dy) const; - inline float - getScoreMaxBelow(const int layer, const int x_layer, const int y_layer, const int threshold, bool& ismax, - float& dx, float& dy) const; - - // the image pyramids: - int layers_; - std::vector pyramid_; - - // some constant parameters: - static const float safetyFactor_; - static const float basicSize_; -}; - -const float BRISK::basicSize_ = 12.0f; -const unsigned int BRISK::scales_ = 64; -const float BRISK::scalerange_ = 30.f; // 40->4 Octaves - else, this needs to be adjusted... -const unsigned int BRISK::n_rot_ = 1024; // discretization of the rotation look-up - -const float BriskScaleSpace::safetyFactor_ = 1.0f; -const float BriskScaleSpace::basicSize_ = 12.0f; - -// constructors -BRISK::BRISK(int thresh, int octaves_in, float patternScale) -{ - threshold = thresh; - octaves = octaves_in; - - std::vector rList; - std::vector nList; - - // this is the standard pattern found to be suitable also - rList.resize(5); - nList.resize(5); - const double f = 0.85 * patternScale; - - rList[0] = (float)(f * 0.); - rList[1] = (float)(f * 2.9); - rList[2] = (float)(f * 4.9); - rList[3] = (float)(f * 7.4); - rList[4] = (float)(f * 10.8); - - nList[0] = 1; - nList[1] = 10; - nList[2] = 14; - nList[3] = 15; - nList[4] = 20; - - generateKernel(rList, nList, (float)(5.85 * patternScale), (float)(8.2 * patternScale)); - -} -BRISK::BRISK(std::vector &radiusList, std::vector &numberList, float dMax, float dMin, - std::vector indexChange) -{ - generateKernel(radiusList, numberList, dMax, dMin, indexChange); -} - -void -BRISK::generateKernel(std::vector &radiusList, std::vector &numberList, float dMax, - float dMin, std::vector indexChange) -{ - - dMax_ = dMax; - dMin_ = dMin; - - // get the total number of points - const int rings = (int)radiusList.size(); - assert(radiusList.size()!=0&&radiusList.size()==numberList.size()); - points_ = 0; // remember the total number of points - for (int ring = 0; ring < rings; ring++) - { - points_ += numberList[ring]; - } - // set up the patterns - patternPoints_ = new BriskPatternPoint[points_ * scales_ * n_rot_]; - BriskPatternPoint* patternIterator = patternPoints_; - - // define the scale discretization: - static const float lb_scale = (float)(log(scalerange_) / log(2.0)); - static const float lb_scale_step = lb_scale / (scales_); - - scaleList_ = new float[scales_]; - sizeList_ = new unsigned int[scales_]; - - const float sigma_scale = 1.3f; - - for (unsigned int scale = 0; scale < scales_; ++scale) - { - scaleList_[scale] = (float)pow((double) 2.0, (double) (scale * lb_scale_step)); - sizeList_[scale] = 0; - - // generate the pattern points look-up - double alpha, theta; - for (size_t rot = 0; rot < n_rot_; ++rot) - { - theta = double(rot) * 2 * CV_PI / double(n_rot_); // this is the rotation of the feature - for (int ring = 0; ring < rings; ++ring) - { - for (int num = 0; num < numberList[ring]; ++num) - { - // the actual coordinates on the circle - alpha = (double(num)) * 2 * CV_PI / double(numberList[ring]); - patternIterator->x = (float)(scaleList_[scale] * radiusList[ring] * cos(alpha + theta)); // feature rotation plus angle of the point - patternIterator->y = (float)(scaleList_[scale] * radiusList[ring] * sin(alpha + theta)); - // and the gaussian kernel sigma - if (ring == 0) - { - patternIterator->sigma = sigma_scale * scaleList_[scale] * 0.5f; - } - else - { - patternIterator->sigma = (float)(sigma_scale * scaleList_[scale] * (double(radiusList[ring])) - * sin(CV_PI / numberList[ring])); - } - // adapt the sizeList if necessary - const unsigned int size = cvCeil(((scaleList_[scale] * radiusList[ring]) + patternIterator->sigma)) + 1; - if (sizeList_[scale] < size) - { - sizeList_[scale] = size; - } - - // increment the iterator - ++patternIterator; - } - } - } - } - - // now also generate pairings - shortPairs_ = new BriskShortPair[points_ * (points_ - 1) / 2]; - longPairs_ = new BriskLongPair[points_ * (points_ - 1) / 2]; - noShortPairs_ = 0; - noLongPairs_ = 0; - - // fill indexChange with 0..n if empty - unsigned int indSize = (unsigned int)indexChange.size(); - if (indSize == 0) - { - indexChange.resize(points_ * (points_ - 1) / 2); - indSize = (unsigned int)indexChange.size(); - - for (unsigned int i = 0; i < indSize; i++) - indexChange[i] = i; - } - const float dMin_sq = dMin_ * dMin_; - const float dMax_sq = dMax_ * dMax_; - for (unsigned int i = 1; i < points_; i++) - { - for (unsigned int j = 0; j < i; j++) - { //(find all the pairs) - // point pair distance: - const float dx = patternPoints_[j].x - patternPoints_[i].x; - const float dy = patternPoints_[j].y - patternPoints_[i].y; - const float norm_sq = (dx * dx + dy * dy); - if (norm_sq > dMin_sq) - { - // save to long pairs - BriskLongPair& longPair = longPairs_[noLongPairs_]; - longPair.weighted_dx = int((dx / (norm_sq)) * 2048.0 + 0.5); - longPair.weighted_dy = int((dy / (norm_sq)) * 2048.0 + 0.5); - longPair.i = i; - longPair.j = j; - ++noLongPairs_; - } - else if (norm_sq < dMax_sq) - { - // save to short pairs - assert(noShortPairs_(y, x); - size_t step = image.step; - // just interpolate: - ret_val = r_x_1 * r_y_1 * ptr[0] + r_x * r_y_1 * ptr[1] + - r_x * r_y * ptr[step] + r_x_1 * r_y * ptr[step+1]; - return (ret_val + 512) / 1024; - } - - // this is the standard case (simple, not speed optimized yet): - - // scaling: - const int scaling = (int)(4194304.0 / area); - const int scaling2 = int(float(scaling) * area / 1024.0); - - // the integral image is larger: - const int integralcols = imagecols + 1; - - // calculate borders - const float x_1 = xf - sigma_half; - const float x1 = xf + sigma_half; - const float y_1 = yf - sigma_half; - const float y1 = yf + sigma_half; - - const int x_left = int(x_1 + 0.5); - const int y_top = int(y_1 + 0.5); - const int x_right = int(x1 + 0.5); - const int y_bottom = int(y1 + 0.5); - - // overlap area - multiplication factors: - const float r_x_1 = float(x_left) - x_1 + 0.5f; - const float r_y_1 = float(y_top) - y_1 + 0.5f; - const float r_x1 = x1 - float(x_right) + 0.5f; - const float r_y1 = y1 - float(y_bottom) + 0.5f; - const int dx = x_right - x_left - 1; - const int dy = y_bottom - y_top - 1; - const int A = (int)((r_x_1 * r_y_1) * scaling); - const int B = (int)((r_x1 * r_y_1) * scaling); - const int C = (int)((r_x1 * r_y1) * scaling); - const int D = (int)((r_x_1 * r_y1) * scaling); - const int r_x_1_i = (int)(r_x_1 * scaling); - const int r_y_1_i = (int)(r_y_1 * scaling); - const int r_x1_i = (int)(r_x1 * scaling); - const int r_y1_i = (int)(r_y1 * scaling); - - if (dx + dy > 2) - { - // now the calculation: - uchar* ptr = image.data + x_left + imagecols * y_top; - // first the corners: - ret_val = A * int(*ptr); - ptr += dx + 1; - ret_val += B * int(*ptr); - ptr += dy * imagecols + 1; - ret_val += C * int(*ptr); - ptr -= dx + 1; - ret_val += D * int(*ptr); - - // next the edges: - int* ptr_integral = (int*) integral.data + x_left + integralcols * y_top + 1; - // find a simple path through the different surface corners - const int tmp1 = (*ptr_integral); - ptr_integral += dx; - const int tmp2 = (*ptr_integral); - ptr_integral += integralcols; - const int tmp3 = (*ptr_integral); - ptr_integral++; - const int tmp4 = (*ptr_integral); - ptr_integral += dy * integralcols; - const int tmp5 = (*ptr_integral); - ptr_integral--; - const int tmp6 = (*ptr_integral); - ptr_integral += integralcols; - const int tmp7 = (*ptr_integral); - ptr_integral -= dx; - const int tmp8 = (*ptr_integral); - ptr_integral -= integralcols; - const int tmp9 = (*ptr_integral); - ptr_integral--; - const int tmp10 = (*ptr_integral); - ptr_integral -= dy * integralcols; - const int tmp11 = (*ptr_integral); - ptr_integral++; - const int tmp12 = (*ptr_integral); - - // assign the weighted surface integrals: - const int upper = (tmp3 - tmp2 + tmp1 - tmp12) * r_y_1_i; - const int middle = (tmp6 - tmp3 + tmp12 - tmp9) * scaling; - const int left = (tmp9 - tmp12 + tmp11 - tmp10) * r_x_1_i; - const int right = (tmp5 - tmp4 + tmp3 - tmp6) * r_x1_i; - const int bottom = (tmp7 - tmp6 + tmp9 - tmp8) * r_y1_i; - - return (ret_val + upper + middle + left + right + bottom + scaling2 / 2) / scaling2; - } - - // now the calculation: - uchar* ptr = image.data + x_left + imagecols * y_top; - // first row: - ret_val = A * int(*ptr); - ptr++; - const uchar* end1 = ptr + dx; - for (; ptr < end1; ptr++) - { - ret_val += r_y_1_i * int(*ptr); - } - ret_val += B * int(*ptr); - // middle ones: - ptr += imagecols - dx - 1; - uchar* end_j = ptr + dy * imagecols; - for (; ptr < end_j; ptr += imagecols - dx - 1) - { - ret_val += r_x_1_i * int(*ptr); - ptr++; - const uchar* end2 = ptr + dx; - for (; ptr < end2; ptr++) - { - ret_val += int(*ptr) * scaling; - } - ret_val += r_x1_i * int(*ptr); - } - // last row: - ret_val += D * int(*ptr); - ptr++; - const uchar* end3 = ptr + dx; - for (; ptr < end3; ptr++) - { - ret_val += r_y1_i * int(*ptr); - } - ret_val += C * int(*ptr); - - return (ret_val + scaling2 / 2) / scaling2; -} - -inline bool -RoiPredicate(const float minX, const float minY, const float maxX, const float maxY, const KeyPoint& keyPt) -{ - const Point2f& pt = keyPt.pt; - return (pt.x < minX) || (pt.x >= maxX) || (pt.y < minY) || (pt.y >= maxY); -} - -// computes the descriptor -void -BRISK::operator()( InputArray _image, InputArray _mask, vector& keypoints, - OutputArray _descriptors, bool useProvidedKeypoints) const -{ - bool doOrientation=true; - if (useProvidedKeypoints) - doOrientation = false; - - // If the user specified cv::noArray(), this will yield false. Otherwise it will return true. - bool doDescriptors = _descriptors.needed(); - - computeDescriptorsAndOrOrientation(_image, _mask, keypoints, _descriptors, doDescriptors, doOrientation, - useProvidedKeypoints); -} - -void -BRISK::computeDescriptorsAndOrOrientation(InputArray _image, InputArray _mask, vector& keypoints, - OutputArray _descriptors, bool doDescriptors, bool doOrientation, - bool useProvidedKeypoints) const -{ - Mat image = _image.getMat(), mask = _mask.getMat(); - if( image.type() != CV_8UC1 ) - cvtColor(image, image, CV_BGR2GRAY); - - if (!useProvidedKeypoints) - { - doOrientation = true; - computeKeypointsNoOrientation(_image, _mask, keypoints); - } - - //Remove keypoints very close to the border - size_t ksize = keypoints.size(); - std::vector kscales; // remember the scale per keypoint - kscales.resize(ksize); - static const float log2 = 0.693147180559945f; - static const float lb_scalerange = (float)(log(scalerange_) / (log2)); - std::vector::iterator beginning = keypoints.begin(); - std::vector::iterator beginningkscales = kscales.begin(); - static const float basicSize06 = basicSize_ * 0.6f; - for (size_t k = 0; k < ksize; k++) - { - unsigned int scale; - scale = std::max((int) (scales_ / lb_scalerange * (log(keypoints[k].size / (basicSize06)) / log2) + 0.5), 0); - // saturate - if (scale >= scales_) - scale = scales_ - 1; - kscales[k] = scale; - const int border = sizeList_[scale]; - const int border_x = image.cols - border; - const int border_y = image.rows - border; - if (RoiPredicate((float)border, (float)border, (float)border_x, (float)border_y, keypoints[k])) - { - keypoints.erase(beginning + k); - kscales.erase(beginningkscales + k); - if (k == 0) - { - beginning = keypoints.begin(); - beginningkscales = kscales.begin(); - } - ksize--; - k--; - } - } - - // first, calculate the integral image over the whole image: - // current integral image - cv::Mat _integral; // the integral image - cv::integral(image, _integral); - - int* _values = new int[points_]; // for temporary use - - // resize the descriptors: - cv::Mat descriptors; - if (doDescriptors) - { - _descriptors.create((int)ksize, strings_, CV_8U); - descriptors = _descriptors.getMat(); - descriptors.setTo(0); - } - - // now do the extraction for all keypoints: - - // temporary variables containing gray values at sample points: - int t1; - int t2; - - // the feature orientation - uchar* ptr = descriptors.data; - for (size_t k = 0; k < ksize; k++) - { - cv::KeyPoint& kp = keypoints[k]; - const int& scale = kscales[k]; - int* pvalues = _values; - const float& x = kp.pt.x; - const float& y = kp.pt.y; - - if (doOrientation) - { - // get the gray values in the unrotated pattern - for (unsigned int i = 0; i < points_; i++) - { - *(pvalues++) = smoothedIntensity(image, _integral, x, y, scale, 0, i); - } - - int direction0 = 0; - int direction1 = 0; - // now iterate through the long pairings - const BriskLongPair* max = longPairs_ + noLongPairs_; - for (BriskLongPair* iter = longPairs_; iter < max; ++iter) - { - t1 = *(_values + iter->i); - t2 = *(_values + iter->j); - const int delta_t = (t1 - t2); - // update the direction: - const int tmp0 = delta_t * (iter->weighted_dx) / 1024; - const int tmp1 = delta_t * (iter->weighted_dy) / 1024; - direction0 += tmp0; - direction1 += tmp1; - } - kp.angle = (float)(atan2((float) direction1, (float) direction0) / CV_PI * 180.0); - if (kp.angle < 0) - kp.angle += 360.f; - } - - if (!doDescriptors) - continue; - - int theta; - if (kp.angle==-1) - { - // don't compute the gradient direction, just assign a rotation of 0° - theta = 0; - } - else - { - theta = (int) (n_rot_ * (kp.angle / (360.0)) + 0.5); - if (theta < 0) - theta += n_rot_; - if (theta >= int(n_rot_)) - theta -= n_rot_; - } - - // now also extract the stuff for the actual direction: - // let us compute the smoothed values - int shifter = 0; - - //unsigned int mean=0; - pvalues = _values; - // get the gray values in the rotated pattern - for (unsigned int i = 0; i < points_; i++) - { - *(pvalues++) = smoothedIntensity(image, _integral, x, y, scale, theta, i); - } - - // now iterate through all the pairings - unsigned int* ptr2 = (unsigned int*) ptr; - const BriskShortPair* max = shortPairs_ + noShortPairs_; - for (BriskShortPair* iter = shortPairs_; iter < max; ++iter) - { - t1 = *(_values + iter->i); - t2 = *(_values + iter->j); - if (t1 > t2) - { - *ptr2 |= ((1) << shifter); - - } // else already initialized with zero - // take care of the iterators: - ++shifter; - if (shifter == 32) - { - shifter = 0; - ++ptr2; - } - } - - ptr += strings_; - } - - // clean-up - delete[] _values; -} - -int -BRISK::descriptorSize() const -{ - return strings_; -} - -int -BRISK::descriptorType() const -{ - return CV_8U; -} - -BRISK::~BRISK() -{ - delete[] patternPoints_; - delete[] shortPairs_; - delete[] longPairs_; - delete[] scaleList_; - delete[] sizeList_; -} - -void -BRISK::operator()(InputArray image, InputArray mask, vector& keypoints) const -{ - computeKeypointsNoOrientation(image, mask, keypoints); - computeDescriptorsAndOrOrientation(image, mask, keypoints, cv::noArray(), false, true, true); -} - -void -BRISK::computeKeypointsNoOrientation(InputArray _image, InputArray _mask, vector& keypoints) const -{ - Mat image = _image.getMat(), mask = _mask.getMat(); - if( image.type() != CV_8UC1 ) - cvtColor(_image, image, CV_BGR2GRAY); - - BriskScaleSpace briskScaleSpace(octaves); - briskScaleSpace.constructPyramid(image); - briskScaleSpace.getKeypoints(threshold, keypoints); - - // remove invalid points - removeInvalidPoints(mask, keypoints); -} - - -void -BRISK::detectImpl( const Mat& image, vector& keypoints, const Mat& mask) const -{ - (*this)(image, mask, keypoints); -} - -void -BRISK::computeImpl( const Mat& image, vector& keypoints, Mat& descriptors) const -{ - (*this)(image, Mat(), keypoints, descriptors, true); -} - -// construct telling the octaves number: -BriskScaleSpace::BriskScaleSpace(int _octaves) -{ - if (_octaves == 0) - layers_ = 1; - else - layers_ = 2 * _octaves; -} -BriskScaleSpace::~BriskScaleSpace() -{ - -} -// construct the image pyramids -void -BriskScaleSpace::constructPyramid(const cv::Mat& image) -{ - - // set correct size: - pyramid_.clear(); - - // fill the pyramid: - pyramid_.push_back(BriskLayer(image.clone())); - if (layers_ > 1) - { - pyramid_.push_back(BriskLayer(pyramid_.back(), BriskLayer::CommonParams::TWOTHIRDSAMPLE)); - } - const int octaves2 = layers_; - - for (uchar i = 2; i < octaves2; i += 2) - { - pyramid_.push_back(BriskLayer(pyramid_[i - 2], BriskLayer::CommonParams::HALFSAMPLE)); - pyramid_.push_back(BriskLayer(pyramid_[i - 1], BriskLayer::CommonParams::HALFSAMPLE)); - } -} - -void -BriskScaleSpace::getKeypoints(const int threshold_, std::vector& keypoints) -{ - // make sure keypoints is empty - keypoints.resize(0); - keypoints.reserve(2000); - - // assign thresholds - int safeThreshold_ = (int)(threshold_ * safetyFactor_); - std::vector > agastPoints; - agastPoints.resize(layers_); - - // go through the octaves and intra layers and calculate fast corner scores: - for (int i = 0; i < layers_; i++) - { - // call OAST16_9 without nms - BriskLayer& l = pyramid_[i]; - l.getAgastPoints(safeThreshold_, agastPoints[i]); - } - - if (layers_ == 1) - { - // just do a simple 2d subpixel refinement... - const size_t num = agastPoints[0].size(); - for (size_t n = 0; n < num; n++) - { - const cv::Point2f& point = agastPoints.at(0)[n].pt; - // first check if it is a maximum: - if (!isMax2D(0, (int)point.x, (int)point.y)) - continue; - - // let's do the subpixel and float scale refinement: - BriskLayer& l = pyramid_[0]; - int s_0_0 = l.getAgastScore(point.x - 1, point.y - 1, 1); - int s_1_0 = l.getAgastScore(point.x, point.y - 1, 1); - int s_2_0 = l.getAgastScore(point.x + 1, point.y - 1, 1); - int s_2_1 = l.getAgastScore(point.x + 1, point.y, 1); - int s_1_1 = l.getAgastScore(point.x, point.y, 1); - int s_0_1 = l.getAgastScore(point.x - 1, point.y, 1); - int s_0_2 = l.getAgastScore(point.x - 1, point.y + 1, 1); - int s_1_2 = l.getAgastScore(point.x, point.y + 1, 1); - int s_2_2 = l.getAgastScore(point.x + 1, point.y + 1, 1); - float delta_x, delta_y; - float max = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, delta_x, delta_y); - - // store: - keypoints.push_back(cv::KeyPoint(float(point.x) + delta_x, float(point.y) + delta_y, basicSize_, -1, max, 0)); - - } - - return; - } - - float x, y, scale, score; - for (int i = 0; i < layers_; i++) - { - BriskLayer& l = pyramid_[i]; - const size_t num = agastPoints[i].size(); - if (i == layers_ - 1) - { - for (size_t n = 0; n < num; n++) - { - const cv::Point2f& point = agastPoints.at(i)[n].pt; - // consider only 2D maxima... - if (!isMax2D(i, (int)point.x, (int)point.y)) - continue; - - bool ismax; - float dx, dy; - getScoreMaxBelow(i, (int)point.x, (int)point.y, l.getAgastScore(point.x, point.y, safeThreshold_), ismax, dx, dy); - if (!ismax) - continue; - - // get the patch on this layer: - int s_0_0 = l.getAgastScore(point.x - 1, point.y - 1, 1); - int s_1_0 = l.getAgastScore(point.x, point.y - 1, 1); - int s_2_0 = l.getAgastScore(point.x + 1, point.y - 1, 1); - int s_2_1 = l.getAgastScore(point.x + 1, point.y, 1); - int s_1_1 = l.getAgastScore(point.x, point.y, 1); - int s_0_1 = l.getAgastScore(point.x - 1, point.y, 1); - int s_0_2 = l.getAgastScore(point.x - 1, point.y + 1, 1); - int s_1_2 = l.getAgastScore(point.x, point.y + 1, 1); - int s_2_2 = l.getAgastScore(point.x + 1, point.y + 1, 1); - float delta_x, delta_y; - float max = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, delta_x, delta_y); - - // store: - keypoints.push_back( - cv::KeyPoint((float(point.x) + delta_x) * l.scale() + l.offset(), - (float(point.y) + delta_y) * l.scale() + l.offset(), basicSize_ * l.scale(), -1, max, i)); - } - } - else - { - // not the last layer: - for (size_t n = 0; n < num; n++) - { - const cv::Point2f& point = agastPoints.at(i)[n].pt; - - // first check if it is a maximum: - if (!isMax2D(i, (int)point.x, (int)point.y)) - continue; - - // let's do the subpixel and float scale refinement: - bool ismax=false; - score = refine3D(i, (int)point.x, (int)point.y, x, y, scale, ismax); - if (!ismax) - { - continue; - } - - // finally store the detected keypoint: - if (score > float(threshold_)) - { - keypoints.push_back(cv::KeyPoint(x, y, basicSize_ * scale, -1, score, i)); - } - } - } - } -} - -// interpolated score access with recalculation when needed: -inline int -BriskScaleSpace::getScoreAbove(const int layer, const int x_layer, const int y_layer) const -{ - assert(layer delta; - // put together a list of 2d-offsets to where the maximum is also reached - if (center == s_1_1) - { - delta.push_back(-1); - delta.push_back(-1); - } - if (center == s0_1) - { - delta.push_back(0); - delta.push_back(-1); - } - if (center == s1_1) - { - delta.push_back(1); - delta.push_back(-1); - } - if (center == s_10) - { - delta.push_back(-1); - delta.push_back(0); - } - if (center == s10) - { - delta.push_back(1); - delta.push_back(0); - } - if (center == s_11) - { - delta.push_back(-1); - delta.push_back(1); - } - if (center == s01) - { - delta.push_back(0); - delta.push_back(1); - } - if (center == s11) - { - delta.push_back(1); - delta.push_back(1); - } - const unsigned int deltasize = (unsigned int)delta.size(); - if (deltasize != 0) - { - // in this case, we have to analyze the situation more carefully: - // the values are gaussian blurred and then we really decide - data = scores.data + y_layer * scorescols + x_layer; - int smoothedcenter = 4 * center + 2 * (s_10 + s10 + s0_1 + s01) + s_1_1 + s1_1 + s_11 + s11; - for (unsigned int i = 0; i < deltasize; i += 2) - { - data = scores.data + (y_layer - 1 + delta[i + 1]) * scorescols + x_layer + delta[i] - 1; - int othercenter = *data; - data++; - othercenter += 2 * (*data); - data++; - othercenter += *data; - data += scorescols; - othercenter += 2 * (*data); - data--; - othercenter += 4 * (*data); - data--; - othercenter += 2 * (*data); - data += scorescols; - othercenter += *data; - data++; - othercenter += 2 * (*data); - data++; - othercenter += *data; - if (othercenter > smoothedcenter) - return false; - } - } - return true; -} - -// 3D maximum refinement centered around (x_layer,y_layer) -inline float -BriskScaleSpace::refine3D(const int layer, const int x_layer, const int y_layer, float& x, float& y, float& scale, - bool& ismax) const -{ - ismax = true; - const BriskLayer& thisLayer = pyramid_[layer]; - const int center = thisLayer.getAgastScore(x_layer, y_layer, 1); - - // check and get above maximum: - float delta_x_above = 0, delta_y_above = 0; - float max_above = getScoreMaxAbove(layer, x_layer, y_layer, center, ismax, delta_x_above, delta_y_above); - - if (!ismax) - return 0.0f; - - float max; // to be returned - - if (layer % 2 == 0) - { // on octave - // treat the patch below: - float delta_x_below, delta_y_below; - float max_below_float; - int max_below = 0; - if (layer == 0) - { - // guess the lower intra octave... - const BriskLayer& l = pyramid_[0]; - int s_0_0 = l.getAgastScore_5_8(x_layer - 1, y_layer - 1, 1); - max_below = s_0_0; - int s_1_0 = l.getAgastScore_5_8(x_layer, y_layer - 1, 1); - max_below = std::max(s_1_0, max_below); - int s_2_0 = l.getAgastScore_5_8(x_layer + 1, y_layer - 1, 1); - max_below = std::max(s_2_0, max_below); - int s_2_1 = l.getAgastScore_5_8(x_layer + 1, y_layer, 1); - max_below = std::max(s_2_1, max_below); - int s_1_1 = l.getAgastScore_5_8(x_layer, y_layer, 1); - max_below = std::max(s_1_1, max_below); - int s_0_1 = l.getAgastScore_5_8(x_layer - 1, y_layer, 1); - max_below = std::max(s_0_1, max_below); - int s_0_2 = l.getAgastScore_5_8(x_layer - 1, y_layer + 1, 1); - max_below = std::max(s_0_2, max_below); - int s_1_2 = l.getAgastScore_5_8(x_layer, y_layer + 1, 1); - max_below = std::max(s_1_2, max_below); - int s_2_2 = l.getAgastScore_5_8(x_layer + 1, y_layer + 1, 1); - max_below = std::max(s_2_2, max_below); - - max_below_float = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, delta_x_below, - delta_y_below); - max_below_float = (float)max_below; - } - else - { - max_below_float = getScoreMaxBelow(layer, x_layer, y_layer, center, ismax, delta_x_below, delta_y_below); - if (!ismax) - return 0; - } - - // get the patch on this layer: - int s_0_0 = thisLayer.getAgastScore(x_layer - 1, y_layer - 1, 1); - int s_1_0 = thisLayer.getAgastScore(x_layer, y_layer - 1, 1); - int s_2_0 = thisLayer.getAgastScore(x_layer + 1, y_layer - 1, 1); - int s_2_1 = thisLayer.getAgastScore(x_layer + 1, y_layer, 1); - int s_1_1 = thisLayer.getAgastScore(x_layer, y_layer, 1); - int s_0_1 = thisLayer.getAgastScore(x_layer - 1, y_layer, 1); - int s_0_2 = thisLayer.getAgastScore(x_layer - 1, y_layer + 1, 1); - int s_1_2 = thisLayer.getAgastScore(x_layer, y_layer + 1, 1); - int s_2_2 = thisLayer.getAgastScore(x_layer + 1, y_layer + 1, 1); - float delta_x_layer, delta_y_layer; - float max_layer = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, delta_x_layer, - delta_y_layer); - - // calculate the relative scale (1D maximum): - if (layer == 0) - { - scale = refine1D_2(max_below_float, std::max(float(center), max_layer), max_above, max); - } - else - scale = refine1D(max_below_float, std::max(float(center), max_layer), max_above, max); - - if (scale > 1.0) - { - // interpolate the position: - const float r0 = (1.5f - scale) / .5f; - const float r1 = 1.0f - r0; - x = (r0 * delta_x_layer + r1 * delta_x_above + float(x_layer)) * thisLayer.scale() + thisLayer.offset(); - y = (r0 * delta_y_layer + r1 * delta_y_above + float(y_layer)) * thisLayer.scale() + thisLayer.offset(); - } - else - { - if (layer == 0) - { - // interpolate the position: - const float r0 = (scale - 0.5f) / 0.5f; - const float r_1 = 1.0f - r0; - x = r0 * delta_x_layer + r_1 * delta_x_below + float(x_layer); - y = r0 * delta_y_layer + r_1 * delta_y_below + float(y_layer); - } - else - { - // interpolate the position: - const float r0 = (scale - 0.75f) / 0.25f; - const float r_1 = 1.0f - r0; - x = (r0 * delta_x_layer + r_1 * delta_x_below + float(x_layer)) * thisLayer.scale() + thisLayer.offset(); - y = (r0 * delta_y_layer + r_1 * delta_y_below + float(y_layer)) * thisLayer.scale() + thisLayer.offset(); - } - } - } - else - { - // on intra - // check the patch below: - float delta_x_below, delta_y_below; - float max_below = getScoreMaxBelow(layer, x_layer, y_layer, center, ismax, delta_x_below, delta_y_below); - if (!ismax) - return 0.0f; - - // get the patch on this layer: - int s_0_0 = thisLayer.getAgastScore(x_layer - 1, y_layer - 1, 1); - int s_1_0 = thisLayer.getAgastScore(x_layer, y_layer - 1, 1); - int s_2_0 = thisLayer.getAgastScore(x_layer + 1, y_layer - 1, 1); - int s_2_1 = thisLayer.getAgastScore(x_layer + 1, y_layer, 1); - int s_1_1 = thisLayer.getAgastScore(x_layer, y_layer, 1); - int s_0_1 = thisLayer.getAgastScore(x_layer - 1, y_layer, 1); - int s_0_2 = thisLayer.getAgastScore(x_layer - 1, y_layer + 1, 1); - int s_1_2 = thisLayer.getAgastScore(x_layer, y_layer + 1, 1); - int s_2_2 = thisLayer.getAgastScore(x_layer + 1, y_layer + 1, 1); - float delta_x_layer, delta_y_layer; - float max_layer = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, delta_x_layer, - delta_y_layer); - - // calculate the relative scale (1D maximum): - scale = refine1D_1(max_below, std::max(float(center), max_layer), max_above, max); - if (scale > 1.0) - { - // interpolate the position: - const float r0 = 4.0f - scale * 3.0f; - const float r1 = 1.0f - r0; - x = (r0 * delta_x_layer + r1 * delta_x_above + float(x_layer)) * thisLayer.scale() + thisLayer.offset(); - y = (r0 * delta_y_layer + r1 * delta_y_above + float(y_layer)) * thisLayer.scale() + thisLayer.offset(); - } - else - { - // interpolate the position: - const float r0 = scale * 3.0f - 2.0f; - const float r_1 = 1.0f - r0; - x = (r0 * delta_x_layer + r_1 * delta_x_below + float(x_layer)) * thisLayer.scale() + thisLayer.offset(); - y = (r0 * delta_y_layer + r_1 * delta_y_below + float(y_layer)) * thisLayer.scale() + thisLayer.offset(); - } - } - - // calculate the absolute scale: - scale *= thisLayer.scale(); - - // that's it, return the refined maximum: - return max; -} - -// return the maximum of score patches above or below -inline float -BriskScaleSpace::getScoreMaxAbove(const int layer, const int x_layer, const int y_layer, const int threshold, - bool& ismax, float& dx, float& dy) const -{ - - ismax = false; - // relevant floating point coordinates - float x_1; - float x1; - float y_1; - float y1; - - // the layer above - assert(layer+1 threshold) - return 0; - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerAbove.getAgastScore(float(x), y_1, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = x; - } - } - tmp_max = (float)layerAbove.getAgastScore(x1, y_1, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = int(x1); - } - - // middle rows - for (int y = (int)y_1 + 1; y <= int(y1); y++) - { - tmp_max = (float)layerAbove.getAgastScore(x_1, float(y), 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = int(x_1 + 1); - max_y = y; - } - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerAbove.getAgastScore(x, y, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = x; - max_y = y; - } - } - tmp_max = (float)layerAbove.getAgastScore(x1, float(y), 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = int(x1); - max_y = y; - } - } - - // bottom row - tmp_max = (float)layerAbove.getAgastScore(x_1, y1, 1); - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = int(x_1 + 1); - max_y = int(y1); - } - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerAbove.getAgastScore(float(x), y1, 1); - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = x; - max_y = int(y1); - } - } - tmp_max = (float)layerAbove.getAgastScore(x1, y1, 1); - if (tmp_max > maxval) - { - maxval = tmp_max; - max_x = int(x1); - max_y = int(y1); - } - - //find dx/dy: - int s_0_0 = layerAbove.getAgastScore(max_x - 1, max_y - 1, 1); - int s_1_0 = layerAbove.getAgastScore(max_x, max_y - 1, 1); - int s_2_0 = layerAbove.getAgastScore(max_x + 1, max_y - 1, 1); - int s_2_1 = layerAbove.getAgastScore(max_x + 1, max_y, 1); - int s_1_1 = layerAbove.getAgastScore(max_x, max_y, 1); - int s_0_1 = layerAbove.getAgastScore(max_x - 1, max_y, 1); - int s_0_2 = layerAbove.getAgastScore(max_x - 1, max_y + 1, 1); - int s_1_2 = layerAbove.getAgastScore(max_x, max_y + 1, 1); - int s_2_2 = layerAbove.getAgastScore(max_x + 1, max_y + 1, 1); - float dx_1, dy_1; - float refined_max = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, dx_1, dy_1); - - // calculate dx/dy in above coordinates - float real_x = float(max_x) + dx_1; - float real_y = float(max_y) + dy_1; - bool returnrefined = true; - if (layer % 2 == 0) - { - dx = (real_x * 6.0f + 1.0f) / 4.0f - float(x_layer); - dy = (real_y * 6.0f + 1.0f) / 4.0f - float(y_layer); - } - else - { - dx = (real_x * 8.0f + 1.0f) / 6.0f - float(x_layer); - dy = (real_y * 8.0f + 1.0f) / 6.0f - float(y_layer); - } - - // saturate - if (dx > 1.0f) - { - dx = 1.0f; - returnrefined = false; - } - if (dx < -1.0f) - { - dx = -1.0f; - returnrefined = false; - } - if (dy > 1.0f) - { - dy = 1.0f; - returnrefined = false; - } - if (dy < -1.0f) - { - dy = -1.0f; - returnrefined = false; - } - - // done and ok. - ismax = true; - if (returnrefined) - { - return std::max(refined_max, maxval); - } - return maxval; -} - -inline float -BriskScaleSpace::getScoreMaxBelow(const int layer, const int x_layer, const int y_layer, const int threshold, - bool& ismax, float& dx, float& dy) const -{ - ismax = false; - - // relevant floating point coordinates - float x_1; - float x1; - float y_1; - float y1; - - if (layer % 2 == 0) - { - // octave - x_1 = float(8 * (x_layer) + 1 - 4) / 6.0f; - x1 = float(8 * (x_layer) + 1 + 4) / 6.0f; - y_1 = float(8 * (y_layer) + 1 - 4) / 6.0f; - y1 = float(8 * (y_layer) + 1 + 4) / 6.0f; - } - else - { - x_1 = float(6 * (x_layer) + 1 - 3) / 4.0f; - x1 = float(6 * (x_layer) + 1 + 3) / 4.0f; - y_1 = float(6 * (y_layer) + 1 - 3) / 4.0f; - y1 = float(6 * (y_layer) + 1 + 3) / 4.0f; - } - - // the layer below - assert(layer>0); - const BriskLayer& layerBelow = pyramid_[layer - 1]; - - // check the first row - int max_x = (int)x_1 + 1; - int max_y = (int)y_1 + 1; - float tmp_max; - float max = (float)layerBelow.getAgastScore(x_1, y_1, 1); - if (max > threshold) - return 0; - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerBelow.getAgastScore(float(x), y_1, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > max) - { - max = tmp_max; - max_x = x; - } - } - tmp_max = (float)layerBelow.getAgastScore(x1, y_1, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > max) - { - max = tmp_max; - max_x = int(x1); - } - - // middle rows - for (int y = (int)y_1 + 1; y <= int(y1); y++) - { - tmp_max = (float)layerBelow.getAgastScore(x_1, float(y), 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > max) - { - max = tmp_max; - max_x = int(x_1 + 1); - max_y = y; - } - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerBelow.getAgastScore(x, y, 1); - if (tmp_max > threshold) - return 0; - if (tmp_max == max) - { - const int t1 = 2 - * (layerBelow.getAgastScore(x - 1, y, 1) + layerBelow.getAgastScore(x + 1, y, 1) - + layerBelow.getAgastScore(x, y + 1, 1) + layerBelow.getAgastScore(x, y - 1, 1)) - + (layerBelow.getAgastScore(x + 1, y + 1, 1) + layerBelow.getAgastScore(x - 1, y + 1, 1) - + layerBelow.getAgastScore(x + 1, y - 1, 1) + layerBelow.getAgastScore(x - 1, y - 1, 1)); - const int t2 = 2 - * (layerBelow.getAgastScore(max_x - 1, max_y, 1) + layerBelow.getAgastScore(max_x + 1, max_y, 1) - + layerBelow.getAgastScore(max_x, max_y + 1, 1) + layerBelow.getAgastScore(max_x, max_y - 1, 1)) - + (layerBelow.getAgastScore(max_x + 1, max_y + 1, 1) + layerBelow.getAgastScore(max_x - 1, - max_y + 1, 1) - + layerBelow.getAgastScore(max_x + 1, max_y - 1, 1) - + layerBelow.getAgastScore(max_x - 1, max_y - 1, 1)); - if (t1 > t2) - { - max_x = x; - max_y = y; - } - } - if (tmp_max > max) - { - max = tmp_max; - max_x = x; - max_y = y; - } - } - tmp_max = (float)layerBelow.getAgastScore(x1, float(y), 1); - if (tmp_max > threshold) - return 0; - if (tmp_max > max) - { - max = tmp_max; - max_x = int(x1); - max_y = y; - } - } - - // bottom row - tmp_max = (float)layerBelow.getAgastScore(x_1, y1, 1); - if (tmp_max > max) - { - max = tmp_max; - max_x = int(x_1 + 1); - max_y = int(y1); - } - for (int x = (int)x_1 + 1; x <= int(x1); x++) - { - tmp_max = (float)layerBelow.getAgastScore(float(x), y1, 1); - if (tmp_max > max) - { - max = tmp_max; - max_x = x; - max_y = int(y1); - } - } - tmp_max = (float)layerBelow.getAgastScore(x1, y1, 1); - if (tmp_max > max) - { - max = tmp_max; - max_x = int(x1); - max_y = int(y1); - } - - //find dx/dy: - int s_0_0 = layerBelow.getAgastScore(max_x - 1, max_y - 1, 1); - int s_1_0 = layerBelow.getAgastScore(max_x, max_y - 1, 1); - int s_2_0 = layerBelow.getAgastScore(max_x + 1, max_y - 1, 1); - int s_2_1 = layerBelow.getAgastScore(max_x + 1, max_y, 1); - int s_1_1 = layerBelow.getAgastScore(max_x, max_y, 1); - int s_0_1 = layerBelow.getAgastScore(max_x - 1, max_y, 1); - int s_0_2 = layerBelow.getAgastScore(max_x - 1, max_y + 1, 1); - int s_1_2 = layerBelow.getAgastScore(max_x, max_y + 1, 1); - int s_2_2 = layerBelow.getAgastScore(max_x + 1, max_y + 1, 1); - float dx_1, dy_1; - float refined_max = subpixel2D(s_0_0, s_0_1, s_0_2, s_1_0, s_1_1, s_1_2, s_2_0, s_2_1, s_2_2, dx_1, dy_1); - - // calculate dx/dy in above coordinates - float real_x = float(max_x) + dx_1; - float real_y = float(max_y) + dy_1; - bool returnrefined = true; - if (layer % 2 == 0) - { - dx = (float)((real_x * 6.0 + 1.0) / 8.0) - float(x_layer); - dy = (float)((real_y * 6.0 + 1.0) / 8.0) - float(y_layer); - } - else - { - dx = (float)((real_x * 4.0 - 1.0) / 6.0) - float(x_layer); - dy = (float)((real_y * 4.0 - 1.0) / 6.0) - float(y_layer); - } - - // saturate - if (dx > 1.0) - { - dx = 1.0f; - returnrefined = false; - } - if (dx < -1.0f) - { - dx = -1.0f; - returnrefined = false; - } - if (dy > 1.0f) - { - dy = 1.0f; - returnrefined = false; - } - if (dy < -1.0f) - { - dy = -1.0f; - returnrefined = false; - } - - // done and ok. - ismax = true; - if (returnrefined) - { - return std::max(refined_max, max); - } - return max; -} - -inline float -BriskScaleSpace::refine1D(const float s_05, const float s0, const float s05, float& max) const -{ - int i_05 = int(1024.0 * s_05 + 0.5); - int i0 = int(1024.0 * s0 + 0.5); - int i05 = int(1024.0 * s05 + 0.5); - - // 16.0000 -24.0000 8.0000 - // -40.0000 54.0000 -14.0000 - // 24.0000 -27.0000 6.0000 - - int three_a = 16 * i_05 - 24 * i0 + 8 * i05; - // second derivative must be negative: - if (three_a >= 0) - { - if (s0 >= s_05 && s0 >= s05) - { - max = s0; - return 1.0f; - } - if (s_05 >= s0 && s_05 >= s05) - { - max = s_05; - return 0.75f; - } - if (s05 >= s0 && s05 >= s_05) - { - max = s05; - return 1.5f; - } - } - - int three_b = -40 * i_05 + 54 * i0 - 14 * i05; - // calculate max location: - float ret_val = -float(three_b) / float(2 * three_a); - // saturate and return - if (ret_val < 0.75) - ret_val = 0.75; - else if (ret_val > 1.5) - ret_val = 1.5; // allow to be slightly off bounds ...? - int three_c = +24 * i_05 - 27 * i0 + 6 * i05; - max = float(three_c) + float(three_a) * ret_val * ret_val + float(three_b) * ret_val; - max /= 3072.0f; - return ret_val; -} - -inline float -BriskScaleSpace::refine1D_1(const float s_05, const float s0, const float s05, float& max) const -{ - int i_05 = int(1024.0 * s_05 + 0.5); - int i0 = int(1024.0 * s0 + 0.5); - int i05 = int(1024.0 * s05 + 0.5); - - // 4.5000 -9.0000 4.5000 - //-10.5000 18.0000 -7.5000 - // 6.0000 -8.0000 3.0000 - - int two_a = 9 * i_05 - 18 * i0 + 9 * i05; - // second derivative must be negative: - if (two_a >= 0) - { - if (s0 >= s_05 && s0 >= s05) - { - max = s0; - return 1.0f; - } - if (s_05 >= s0 && s_05 >= s05) - { - max = s_05; - return 0.6666666666666666666666666667f; - } - if (s05 >= s0 && s05 >= s_05) - { - max = s05; - return 1.3333333333333333333333333333f; - } - } - - int two_b = -21 * i_05 + 36 * i0 - 15 * i05; - // calculate max location: - float ret_val = -float(two_b) / float(2 * two_a); - // saturate and return - if (ret_val < 0.6666666666666666666666666667f) - ret_val = 0.666666666666666666666666667f; - else if (ret_val > 1.33333333333333333333333333f) - ret_val = 1.333333333333333333333333333f; - int two_c = +12 * i_05 - 16 * i0 + 6 * i05; - max = float(two_c) + float(two_a) * ret_val * ret_val + float(two_b) * ret_val; - max /= 2048.0f; - return ret_val; -} - -inline float -BriskScaleSpace::refine1D_2(const float s_05, const float s0, const float s05, float& max) const -{ - int i_05 = int(1024.0 * s_05 + 0.5); - int i0 = int(1024.0 * s0 + 0.5); - int i05 = int(1024.0 * s05 + 0.5); - - // 18.0000 -30.0000 12.0000 - // -45.0000 65.0000 -20.0000 - // 27.0000 -30.0000 8.0000 - - int a = 2 * i_05 - 4 * i0 + 2 * i05; - // second derivative must be negative: - if (a >= 0) - { - if (s0 >= s_05 && s0 >= s05) - { - max = s0; - return 1.0f; - } - if (s_05 >= s0 && s_05 >= s05) - { - max = s_05; - return 0.7f; - } - if (s05 >= s0 && s05 >= s_05) - { - max = s05; - return 1.5f; - } - } - - int b = -5 * i_05 + 8 * i0 - 3 * i05; - // calculate max location: - float ret_val = -float(b) / float(2 * a); - // saturate and return - if (ret_val < 0.7f) - ret_val = 0.7f; - else if (ret_val > 1.5f) - ret_val = 1.5f; // allow to be slightly off bounds ...? - int c = +3 * i_05 - 3 * i0 + 1 * i05; - max = float(c) + float(a) * ret_val * ret_val + float(b) * ret_val; - max /= 1024; - return ret_val; -} - -inline float -BriskScaleSpace::subpixel2D(const int s_0_0, const int s_0_1, const int s_0_2, const int s_1_0, const int s_1_1, - const int s_1_2, const int s_2_0, const int s_2_1, const int s_2_2, float& delta_x, - float& delta_y) const -{ - - // the coefficients of the 2d quadratic function least-squares fit: - int tmp1 = s_0_0 + s_0_2 - 2 * s_1_1 + s_2_0 + s_2_2; - int coeff1 = 3 * (tmp1 + s_0_1 - ((s_1_0 + s_1_2) << 1) + s_2_1); - int coeff2 = 3 * (tmp1 - ((s_0_1 + s_2_1) << 1) + s_1_0 + s_1_2); - int tmp2 = s_0_2 - s_2_0; - int tmp3 = (s_0_0 + tmp2 - s_2_2); - int tmp4 = tmp3 - 2 * tmp2; - int coeff3 = -3 * (tmp3 + s_0_1 - s_2_1); - int coeff4 = -3 * (tmp4 + s_1_0 - s_1_2); - int coeff5 = (s_0_0 - s_0_2 - s_2_0 + s_2_2) << 2; - int coeff6 = -(s_0_0 + s_0_2 - ((s_1_0 + s_0_1 + s_1_2 + s_2_1) << 1) - 5 * s_1_1 + s_2_0 + s_2_2) << 1; - - // 2nd derivative test: - int H_det = 4 * coeff1 * coeff2 - coeff5 * coeff5; - - if (H_det == 0) - { - delta_x = 0.0f; - delta_y = 0.0f; - return float(coeff6) / 18.0f; - } - - if (!(H_det > 0 && coeff1 < 0)) - { - // The maximum must be at the one of the 4 patch corners. - int tmp_max = coeff3 + coeff4 + coeff5; - delta_x = 1.0f; - delta_y = 1.0f; - - int tmp = -coeff3 + coeff4 - coeff5; - if (tmp > tmp_max) - { - tmp_max = tmp; - delta_x = -1.0f; - delta_y = 1.0f; - } - tmp = coeff3 - coeff4 - coeff5; - if (tmp > tmp_max) - { - tmp_max = tmp; - delta_x = 1.0f; - delta_y = -1.0f; - } - tmp = -coeff3 - coeff4 + coeff5; - if (tmp > tmp_max) - { - tmp_max = tmp; - delta_x = -1.0f; - delta_y = -1.0f; - } - return float(tmp_max + coeff1 + coeff2 + coeff6) / 18.0f; - } - - // this is hopefully the normal outcome of the Hessian test - delta_x = float(2 * coeff2 * coeff3 - coeff4 * coeff5) / float(-H_det); - delta_y = float(2 * coeff1 * coeff4 - coeff3 * coeff5) / float(-H_det); - // TODO: this is not correct, but easy, so perform a real boundary maximum search: - bool tx = false; - bool tx_ = false; - bool ty = false; - bool ty_ = false; - if (delta_x > 1.0) - tx = true; - else if (delta_x < -1.0) - tx_ = true; - if (delta_y > 1.0) - ty = true; - if (delta_y < -1.0) - ty_ = true; - - if (tx || tx_ || ty || ty_) - { - // get two candidates: - float delta_x1 = 0.0f, delta_x2 = 0.0f, delta_y1 = 0.0f, delta_y2 = 0.0f; - if (tx) - { - delta_x1 = 1.0f; - delta_y1 = -float(coeff4 + coeff5) / float(2 * coeff2); - if (delta_y1 > 1.0f) - delta_y1 = 1.0f; - else if (delta_y1 < -1.0f) - delta_y1 = -1.0f; - } - else if (tx_) - { - delta_x1 = -1.0f; - delta_y1 = -float(coeff4 - coeff5) / float(2 * coeff2); - if (delta_y1 > 1.0f) - delta_y1 = 1.0f; - else if (delta_y1 < -1.0) - delta_y1 = -1.0f; - } - if (ty) - { - delta_y2 = 1.0f; - delta_x2 = -float(coeff3 + coeff5) / float(2 * coeff1); - if (delta_x2 > 1.0f) - delta_x2 = 1.0f; - else if (delta_x2 < -1.0f) - delta_x2 = -1.0f; - } - else if (ty_) - { - delta_y2 = -1.0f; - delta_x2 = -float(coeff3 - coeff5) / float(2 * coeff1); - if (delta_x2 > 1.0f) - delta_x2 = 1.0f; - else if (delta_x2 < -1.0f) - delta_x2 = -1.0f; - } - // insert both options for evaluation which to pick - float max1 = (coeff1 * delta_x1 * delta_x1 + coeff2 * delta_y1 * delta_y1 + coeff3 * delta_x1 + coeff4 * delta_y1 - + coeff5 * delta_x1 * delta_y1 + coeff6) - / 18.0f; - float max2 = (coeff1 * delta_x2 * delta_x2 + coeff2 * delta_y2 * delta_y2 + coeff3 * delta_x2 + coeff4 * delta_y2 - + coeff5 * delta_x2 * delta_y2 + coeff6) - / 18.0f; - if (max1 > max2) - { - delta_x = delta_x1; - delta_y = delta_x1; - return max1; - } - else - { - delta_x = delta_x2; - delta_y = delta_x2; - return max2; - } - } - - // this is the case of the maximum inside the boundaries: - return (coeff1 * delta_x * delta_x + coeff2 * delta_y * delta_y + coeff3 * delta_x + coeff4 * delta_y - + coeff5 * delta_x * delta_y + coeff6) - / 18.0f; -} - -// construct a layer -BriskLayer::BriskLayer(const cv::Mat& img_in, float scale_in, float offset_in) -{ - img_ = img_in; - scores_ = cv::Mat_::zeros(img_in.rows, img_in.cols); - // attention: this means that the passed image reference must point to persistent memory - scale_ = scale_in; - offset_ = offset_in; - // create an agast detector - fast_9_16_ = new FastFeatureDetector2(1, true, FastFeatureDetector::TYPE_9_16); - makeOffsets(pixel_5_8_, (int)img_.step, 8); - makeOffsets(pixel_9_16_, (int)img_.step, 16); -} -// derive a layer -BriskLayer::BriskLayer(const BriskLayer& layer, int mode) -{ - if (mode == CommonParams::HALFSAMPLE) - { - img_.create(layer.img().rows / 2, layer.img().cols / 2, CV_8U); - halfsample(layer.img(), img_); - scale_ = layer.scale() * 2; - offset_ = 0.5f * scale_ - 0.5f; - } - else - { - img_.create(2 * (layer.img().rows / 3), 2 * (layer.img().cols / 3), CV_8U); - twothirdsample(layer.img(), img_); - scale_ = layer.scale() * 1.5f; - offset_ = 0.5f * scale_ - 0.5f; - } - scores_ = cv::Mat::zeros(img_.rows, img_.cols, CV_8U); - fast_9_16_ = new FastFeatureDetector2(1, false, FastFeatureDetector::TYPE_9_16); - makeOffsets(pixel_5_8_, (int)img_.step, 8); - makeOffsets(pixel_9_16_, (int)img_.step, 16); -} - -// Fast/Agast -// wraps the agast class -void -BriskLayer::getAgastPoints(int threshold, std::vector& keypoints) -{ - fast_9_16_->set("threshold", threshold); - fast_9_16_->detect(img_, keypoints); - - // also write scores - const size_t num = keypoints.size(); - - for (size_t i = 0; i < num; i++) - scores_((int)keypoints[i].pt.y, (int)keypoints[i].pt.x) = saturate_cast(keypoints[i].response); -} - -inline int -BriskLayer::getAgastScore(int x, int y, int threshold) const -{ - if (x < 3 || y < 3) - return 0; - if (x >= img_.cols - 3 || y >= img_.rows - 3) - return 0; - uchar& score = (uchar&)scores_(y, x); - if (score > 2) - { - return score; - } - score = (uchar)cornerScore<16>(&img_.at(y, x), pixel_9_16_, threshold - 1); - if (score < threshold) - score = 0; - return score; -} - -inline int -BriskLayer::getAgastScore_5_8(int x, int y, int threshold) const -{ - if (x < 2 || y < 2) - return 0; - if (x >= img_.cols - 2 || y >= img_.rows - 2) - return 0; - int score = cornerScore<8>(&img_.at(y, x), pixel_5_8_, threshold - 1); - if (score < threshold) - score = 0; - return score; -} - -inline int -BriskLayer::getAgastScore(float xf, float yf, int threshold_in, float scale_in) const -{ - if (scale_in <= 1.0f) - { - // just do an interpolation inside the layer - const int x = int(xf); - const float rx1 = xf - float(x); - const float rx = 1.0f - rx1; - const int y = int(yf); - const float ry1 = yf - float(y); - const float ry = 1.0f - ry1; - - return (uchar)(rx * ry * getAgastScore(x, y, threshold_in) + rx1 * ry * getAgastScore(x + 1, y, threshold_in) - + rx * ry1 * getAgastScore(x, y + 1, threshold_in) + rx1 * ry1 * getAgastScore(x + 1, y + 1, threshold_in)); - } - else - { - // this means we overlap area smoothing - const float halfscale = scale_in / 2.0f; - // get the scores first: - for (int x = int(xf - halfscale); x <= int(xf + halfscale + 1.0f); x++) - { - for (int y = int(yf - halfscale); y <= int(yf + halfscale + 1.0f); y++) - { - getAgastScore(x, y, threshold_in); - } - } - // get the smoothed value - return value(scores_, xf, yf, scale_in); - } -} - -// access gray values (smoothed/interpolated) -inline int -BriskLayer::value(const cv::Mat& mat, float xf, float yf, float scale_in) const -{ - assert(!mat.empty()); - // get the position - const int x = cvFloor(xf); - const int y = cvFloor(yf); - const cv::Mat& image = mat; - const int& imagecols = image.cols; - - // get the sigma_half: - const float sigma_half = scale_in / 2; - const float area = 4.0f * sigma_half * sigma_half; - // calculate output: - int ret_val; - if (sigma_half < 0.5) - { - //interpolation multipliers: - const int r_x = (int)((xf - x) * 1024); - const int r_y = (int)((yf - y) * 1024); - const int r_x_1 = (1024 - r_x); - const int r_y_1 = (1024 - r_y); - uchar* ptr = image.data + x + y * imagecols; - // just interpolate: - ret_val = (r_x_1 * r_y_1 * int(*ptr)); - ptr++; - ret_val += (r_x * r_y_1 * int(*ptr)); - ptr += imagecols; - ret_val += (r_x * r_y * int(*ptr)); - ptr--; - ret_val += (r_x_1 * r_y * int(*ptr)); - return 0xFF & ((ret_val + 512) / 1024 / 1024); - } - - // this is the standard case (simple, not speed optimized yet): - - // scaling: - const int scaling = (int)(4194304.0f / area); - const int scaling2 = (int)(float(scaling) * area / 1024.0f); - - // calculate borders - const float x_1 = xf - sigma_half; - const float x1 = xf + sigma_half; - const float y_1 = yf - sigma_half; - const float y1 = yf + sigma_half; - - const int x_left = int(x_1 + 0.5); - const int y_top = int(y_1 + 0.5); - const int x_right = int(x1 + 0.5); - const int y_bottom = int(y1 + 0.5); - - // overlap area - multiplication factors: - const float r_x_1 = float(x_left) - x_1 + 0.5f; - const float r_y_1 = float(y_top) - y_1 + 0.5f; - const float r_x1 = x1 - float(x_right) + 0.5f; - const float r_y1 = y1 - float(y_bottom) + 0.5f; - const int dx = x_right - x_left - 1; - const int dy = y_bottom - y_top - 1; - const int A = (int)((r_x_1 * r_y_1) * scaling); - const int B = (int)((r_x1 * r_y_1) * scaling); - const int C = (int)((r_x1 * r_y1) * scaling); - const int D = (int)((r_x_1 * r_y1) * scaling); - const int r_x_1_i = (int)(r_x_1 * scaling); - const int r_y_1_i = (int)(r_y_1 * scaling); - const int r_x1_i = (int)(r_x1 * scaling); - const int r_y1_i = (int)(r_y1 * scaling); - - // now the calculation: - uchar* ptr = image.data + x_left + imagecols * y_top; - // first row: - ret_val = A * int(*ptr); - ptr++; - const uchar* end1 = ptr + dx; - for (; ptr < end1; ptr++) - { - ret_val += r_y_1_i * int(*ptr); - } - ret_val += B * int(*ptr); - // middle ones: - ptr += imagecols - dx - 1; - uchar* end_j = ptr + dy * imagecols; - for (; ptr < end_j; ptr += imagecols - dx - 1) - { - ret_val += r_x_1_i * int(*ptr); - ptr++; - const uchar* end2 = ptr + dx; - for (; ptr < end2; ptr++) - { - ret_val += int(*ptr) * scaling; - } - ret_val += r_x1_i * int(*ptr); - } - // last row: - ret_val += D * int(*ptr); - ptr++; - const uchar* end3 = ptr + dx; - for (; ptr < end3; ptr++) - { - ret_val += r_y1_i * int(*ptr); - } - ret_val += C * int(*ptr); - - return 0xFF & ((ret_val + scaling2 / 2) / scaling2 / 1024); -} - -// half sampling -inline void -BriskLayer::halfsample(const cv::Mat& srcimg, cv::Mat& dstimg) -{ - // make sure the destination image is of the right size: - assert(srcimg.cols/2==dstimg.cols); - assert(srcimg.rows/2==dstimg.rows); - - // handle non-SSE case - resize(srcimg, dstimg, dstimg.size(), 0, 0, INTER_AREA); -} - -inline void -BriskLayer::twothirdsample(const cv::Mat& srcimg, cv::Mat& dstimg) -{ - // make sure the destination image is of the right size: - assert((srcimg.cols/3)*2==dstimg.cols); - assert((srcimg.rows/3)*2==dstimg.rows); - - resize(srcimg, dstimg, dstimg.size(), 0, 0, INTER_AREA); -} - -} diff --git a/modules/features2d/src/descriptors.cpp b/modules/features2d/src/descriptors.cpp deleted file mode 100644 index c9e87c2..0000000 --- a/modules/features2d/src/descriptors.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -using namespace std; - -namespace cv -{ - -/****************************************************************************************\ -* DescriptorExtractor * -\****************************************************************************************/ -/* - * DescriptorExtractor - */ -DescriptorExtractor::~DescriptorExtractor() -{} - -void DescriptorExtractor::compute( const Mat& image, vector& keypoints, Mat& descriptors ) const -{ - if( image.empty() || keypoints.empty() ) - { - descriptors.release(); - return; - } - - KeyPointsFilter::runByImageBorder( keypoints, image.size(), 0 ); - KeyPointsFilter::runByKeypointSize( keypoints, std::numeric_limits::epsilon() ); - - computeImpl( image, keypoints, descriptors ); -} - -void DescriptorExtractor::compute( const vector& imageCollection, vector >& pointCollection, vector& descCollection ) const -{ - CV_Assert( imageCollection.size() == pointCollection.size() ); - descCollection.resize( imageCollection.size() ); - for( size_t i = 0; i < imageCollection.size(); i++ ) - compute( imageCollection[i], pointCollection[i], descCollection[i] ); -} - -/*void DescriptorExtractor::read( const FileNode& ) -{} - -void DescriptorExtractor::write( FileStorage& ) const -{}*/ - -bool DescriptorExtractor::empty() const -{ - return false; -} - -void DescriptorExtractor::removeBorderKeypoints( vector& keypoints, - Size imageSize, int borderSize ) -{ - KeyPointsFilter::runByImageBorder( keypoints, imageSize, borderSize ); -} - -Ptr DescriptorExtractor::create(const string& descriptorExtractorType) -{ - if( descriptorExtractorType.find("Opponent") == 0 ) - { - size_t pos = string("Opponent").size(); - string type = descriptorExtractorType.substr(pos); - return new OpponentColorDescriptorExtractor(DescriptorExtractor::create(type)); - } - - return Algorithm::create("Feature2D." + descriptorExtractorType); -} - - -CV_WRAP void Feature2D::compute( const Mat& image, CV_OUT CV_IN_OUT std::vector& keypoints, CV_OUT Mat& descriptors ) const -{ - DescriptorExtractor::compute(image, keypoints, descriptors); -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/****************************************************************************************\ -* OpponentColorDescriptorExtractor * -\****************************************************************************************/ -OpponentColorDescriptorExtractor::OpponentColorDescriptorExtractor( const Ptr& _descriptorExtractor ) : - descriptorExtractor(_descriptorExtractor) -{ - CV_Assert( !descriptorExtractor.empty() ); -} - -static void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector& opponentChannels ) -{ - if( bgrImage.type() != CV_8UC3 ) - CV_Error( CV_StsBadArg, "input image must be an BGR image of type CV_8UC3" ); - - // Prepare opponent color space storage matrices. - opponentChannels.resize( 3 ); - opponentChannels[0] = cv::Mat(bgrImage.size(), CV_8UC1); // R-G RED-GREEN - opponentChannels[1] = cv::Mat(bgrImage.size(), CV_8UC1); // R+G-2B YELLOW-BLUE - opponentChannels[2] = cv::Mat(bgrImage.size(), CV_8UC1); // R+G+B - - for(int y = 0; y < bgrImage.rows; ++y) - for(int x = 0; x < bgrImage.cols; ++x) - { - Vec3b v = bgrImage.at(y, x); - uchar& b = v[0]; - uchar& g = v[1]; - uchar& r = v[2]; - - opponentChannels[0].at(y, x) = saturate_cast(0.5f * (255 + g - r)); // (R - G)/sqrt(2), but converted to the destination data type - opponentChannels[1].at(y, x) = saturate_cast(0.25f * (510 + r + g - 2*b)); // (R + G - 2B)/sqrt(6), but converted to the destination data type - opponentChannels[2].at(y, x) = saturate_cast(1.f/3.f * (r + g + b)); // (R + G + B)/sqrt(3), but converted to the destination data type - } -} - -struct KP_LessThan -{ - KP_LessThan(const vector& _kp) : kp(&_kp) {} - bool operator()(int i, int j) const - { - return (*kp)[i].class_id < (*kp)[j].class_id; - } - const vector* kp; -}; - -void OpponentColorDescriptorExtractor::computeImpl( const Mat& bgrImage, vector& keypoints, Mat& descriptors ) const -{ - vector opponentChannels; - convertBGRImageToOpponentColorSpace( bgrImage, opponentChannels ); - - const int N = 3; // channels count - vector channelKeypoints[N]; - Mat channelDescriptors[N]; - vector idxs[N]; - - // Compute descriptors three times, once for each Opponent channel to concatenate into a single color descriptor - int maxKeypointsCount = 0; - for( int ci = 0; ci < N; ci++ ) - { - channelKeypoints[ci].insert( channelKeypoints[ci].begin(), keypoints.begin(), keypoints.end() ); - // Use class_id member to get indices into initial keypoints vector - for( size_t ki = 0; ki < channelKeypoints[ci].size(); ki++ ) - channelKeypoints[ci][ki].class_id = (int)ki; - - descriptorExtractor->compute( opponentChannels[ci], channelKeypoints[ci], channelDescriptors[ci] ); - idxs[ci].resize( channelKeypoints[ci].size() ); - for( size_t ki = 0; ki < channelKeypoints[ci].size(); ki++ ) - { - idxs[ci][ki] = (int)ki; - } - std::sort( idxs[ci].begin(), idxs[ci].end(), KP_LessThan(channelKeypoints[ci]) ); - maxKeypointsCount = std::max( maxKeypointsCount, (int)channelKeypoints[ci].size()); - } - - vector outKeypoints; - outKeypoints.reserve( keypoints.size() ); - - int dSize = descriptorExtractor->descriptorSize(); - Mat mergedDescriptors( maxKeypointsCount, 3*dSize, descriptorExtractor->descriptorType() ); - int mergedCount = 0; - // cp - current channel position - size_t cp[] = {0, 0, 0}; - while( cp[0] < channelKeypoints[0].size() && - cp[1] < channelKeypoints[1].size() && - cp[2] < channelKeypoints[2].size() ) - { - const int maxInitIdx = std::max( 0, std::max( channelKeypoints[0][idxs[0][cp[0]]].class_id, - std::max( channelKeypoints[1][idxs[1][cp[1]]].class_id, - channelKeypoints[2][idxs[2][cp[2]]].class_id ) ) ); - - while( channelKeypoints[0][idxs[0][cp[0]]].class_id < maxInitIdx && cp[0] < channelKeypoints[0].size() ) { cp[0]++; } - while( channelKeypoints[1][idxs[1][cp[1]]].class_id < maxInitIdx && cp[1] < channelKeypoints[1].size() ) { cp[1]++; } - while( channelKeypoints[2][idxs[2][cp[2]]].class_id < maxInitIdx && cp[2] < channelKeypoints[2].size() ) { cp[2]++; } - if( cp[0] >= channelKeypoints[0].size() || cp[1] >= channelKeypoints[1].size() || cp[2] >= channelKeypoints[2].size() ) - break; - - if( channelKeypoints[0][idxs[0][cp[0]]].class_id == maxInitIdx && - channelKeypoints[1][idxs[1][cp[1]]].class_id == maxInitIdx && - channelKeypoints[2][idxs[2][cp[2]]].class_id == maxInitIdx ) - { - outKeypoints.push_back( keypoints[maxInitIdx] ); - // merge descriptors - for( int ci = 0; ci < N; ci++ ) - { - Mat dst = mergedDescriptors(Range(mergedCount, mergedCount+1), Range(ci*dSize, (ci+1)*dSize)); - channelDescriptors[ci].row( idxs[ci][cp[ci]] ).copyTo( dst ); - cp[ci]++; - } - mergedCount++; - } - } - mergedDescriptors.rowRange(0, mergedCount).copyTo( descriptors ); - std::swap( outKeypoints, keypoints ); -} - -void OpponentColorDescriptorExtractor::read( const FileNode& fn ) -{ - descriptorExtractor->read(fn); -} - -void OpponentColorDescriptorExtractor::write( FileStorage& fs ) const -{ - descriptorExtractor->write(fs); -} - -int OpponentColorDescriptorExtractor::descriptorSize() const -{ - return 3*descriptorExtractor->descriptorSize(); -} - -int OpponentColorDescriptorExtractor::descriptorType() const -{ - return descriptorExtractor->descriptorType(); -} - -bool OpponentColorDescriptorExtractor::empty() const -{ - return descriptorExtractor.empty() || (DescriptorExtractor*)(descriptorExtractor)->empty(); -} - -} diff --git a/modules/features2d/src/detectors.cpp b/modules/features2d/src/detectors.cpp deleted file mode 100644 index a1e389a..0000000 --- a/modules/features2d/src/detectors.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -using namespace std; - -namespace cv -{ - -/* - * FeatureDetector - */ - -FeatureDetector::~FeatureDetector() -{} - -void FeatureDetector::detect( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - keypoints.clear(); - - if( image.empty() ) - return; - - CV_Assert( mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size()) ); - - detectImpl( image, keypoints, mask ); -} - -void FeatureDetector::detect(const vector& imageCollection, vector >& pointCollection, const vector& masks ) const -{ - pointCollection.resize( imageCollection.size() ); - for( size_t i = 0; i < imageCollection.size(); i++ ) - detect( imageCollection[i], pointCollection[i], masks.empty() ? Mat() : masks[i] ); -} - -/*void FeatureDetector::read( const FileNode& ) -{} - -void FeatureDetector::write( FileStorage& ) const -{}*/ - -bool FeatureDetector::empty() const -{ - return false; -} - -void FeatureDetector::removeInvalidPoints( const Mat& mask, vector& keypoints ) -{ - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - -Ptr FeatureDetector::create( const string& detectorType ) -{ - if( detectorType.find("Grid") == 0 ) - { - return new GridAdaptedFeatureDetector(FeatureDetector::create( - detectorType.substr(strlen("Grid")))); - } - - if( detectorType.find("Pyramid") == 0 ) - { - return new PyramidAdaptedFeatureDetector(FeatureDetector::create( - detectorType.substr(strlen("Pyramid")))); - } - - if( detectorType.find("Dynamic") == 0 ) - { - return new DynamicAdaptedFeatureDetector(AdjusterAdapter::create( - detectorType.substr(strlen("Dynamic")))); - } - - if( detectorType.compare( "HARRIS" ) == 0 ) - { - Ptr fd = FeatureDetector::create("GFTT"); - fd->set("useHarrisDetector", true); - return fd; - } - - return Algorithm::create("Feature2D." + detectorType); -} - - -GFTTDetector::GFTTDetector( int _nfeatures, double _qualityLevel, - double _minDistance, int _blockSize, - bool _useHarrisDetector, double _k ) - : nfeatures(_nfeatures), qualityLevel(_qualityLevel), minDistance(_minDistance), - blockSize(_blockSize), useHarrisDetector(_useHarrisDetector), k(_k) -{ -} - -void GFTTDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask) const -{ - Mat grayImage = image; - if( image.type() != CV_8U ) cvtColor( image, grayImage, CV_BGR2GRAY ); - - vector corners; - goodFeaturesToTrack( grayImage, corners, nfeatures, qualityLevel, minDistance, mask, - blockSize, useHarrisDetector, k ); - keypoints.resize(corners.size()); - vector::const_iterator corner_it = corners.begin(); - vector::iterator keypoint_it = keypoints.begin(); - for( ; corner_it != corners.end(); ++corner_it, ++keypoint_it ) - { - *keypoint_it = KeyPoint( *corner_it, (float)blockSize ); - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - * DenseFeatureDetector - */ -DenseFeatureDetector::DenseFeatureDetector( float _initFeatureScale, int _featureScaleLevels, - float _featureScaleMul, int _initXyStep, - int _initImgBound, bool _varyXyStepWithScale, - bool _varyImgBoundWithScale ) : - initFeatureScale(_initFeatureScale), featureScaleLevels(_featureScaleLevels), - featureScaleMul(_featureScaleMul), initXyStep(_initXyStep), initImgBound(_initImgBound), - varyXyStepWithScale(_varyXyStepWithScale), varyImgBoundWithScale(_varyImgBoundWithScale) -{} - - -void DenseFeatureDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - float curScale = static_cast(initFeatureScale); - int curStep = initXyStep; - int curBound = initImgBound; - for( int curLevel = 0; curLevel < featureScaleLevels; curLevel++ ) - { - for( int x = curBound; x < image.cols - curBound; x += curStep ) - { - for( int y = curBound; y < image.rows - curBound; y += curStep ) - { - keypoints.push_back( KeyPoint(static_cast(x), static_cast(y), curScale) ); - } - } - - curScale = static_cast(curScale * featureScaleMul); - if( varyXyStepWithScale ) curStep = static_cast( curStep * featureScaleMul + 0.5f ); - if( varyImgBoundWithScale ) curBound = static_cast( curBound * featureScaleMul + 0.5f ); - } - - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - -/* - * GridAdaptedFeatureDetector - */ -GridAdaptedFeatureDetector::GridAdaptedFeatureDetector( const Ptr& _detector, - int _maxTotalKeypoints, int _gridRows, int _gridCols ) - : detector(_detector), maxTotalKeypoints(_maxTotalKeypoints), gridRows(_gridRows), gridCols(_gridCols) -{} - -bool GridAdaptedFeatureDetector::empty() const -{ - return detector.empty() || (FeatureDetector*)detector->empty(); -} - -struct ResponseComparator -{ - bool operator() (const KeyPoint& a, const KeyPoint& b) - { - return std::abs(a.response) > std::abs(b.response); - } -}; - -static void keepStrongest( int N, vector& keypoints ) -{ - if( (int)keypoints.size() > N ) - { - vector::iterator nth = keypoints.begin() + N; - std::nth_element( keypoints.begin(), nth, keypoints.end(), ResponseComparator() ); - keypoints.erase( nth, keypoints.end() ); - } -} - -namespace { -class GridAdaptedFeatureDetectorInvoker : public ParallelLoopBody -{ -private: - int gridRows_, gridCols_; - int maxPerCell_; - vector& keypoints_; - const Mat& image_; - const Mat& mask_; - const Ptr& detector_; - Mutex* kptLock_; - - GridAdaptedFeatureDetectorInvoker& operator=(const GridAdaptedFeatureDetectorInvoker&); // to quiet MSVC - -public: - - GridAdaptedFeatureDetectorInvoker(const Ptr& detector, const Mat& image, const Mat& mask, - vector& keypoints, int maxPerCell, int gridRows, int gridCols, - cv::Mutex* kptLock) - : gridRows_(gridRows), gridCols_(gridCols), maxPerCell_(maxPerCell), - keypoints_(keypoints), image_(image), mask_(mask), detector_(detector), - kptLock_(kptLock) - { - } - - void operator() (const Range& range) const - { - for (int i = range.start; i < range.end; ++i) - { - int celly = i / gridCols_; - int cellx = i - celly * gridCols_; - - Range row_range((celly*image_.rows)/gridRows_, ((celly+1)*image_.rows)/gridRows_); - Range col_range((cellx*image_.cols)/gridCols_, ((cellx+1)*image_.cols)/gridCols_); - - Mat sub_image = image_(row_range, col_range); - Mat sub_mask; - if (!mask_.empty()) sub_mask = mask_(row_range, col_range); - - vector sub_keypoints; - sub_keypoints.reserve(maxPerCell_); - - detector_->detect( sub_image, sub_keypoints, sub_mask ); - keepStrongest( maxPerCell_, sub_keypoints ); - - std::vector::iterator it = sub_keypoints.begin(), - end = sub_keypoints.end(); - for( ; it != end; ++it ) - { - it->pt.x += col_range.start; - it->pt.y += row_range.start; - } - - cv::AutoLock join_keypoints(*kptLock_); - keypoints_.insert( keypoints_.end(), sub_keypoints.begin(), sub_keypoints.end() ); - } - } -}; -} // namepace - -void GridAdaptedFeatureDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - if (image.empty() || maxTotalKeypoints < gridRows * gridCols) - { - keypoints.clear(); - return; - } - keypoints.reserve(maxTotalKeypoints); - int maxPerCell = maxTotalKeypoints / (gridRows * gridCols); - - cv::Mutex kptLock; - cv::parallel_for_(cv::Range(0, gridRows * gridCols), - GridAdaptedFeatureDetectorInvoker(detector, image, mask, keypoints, maxPerCell, gridRows, gridCols, &kptLock)); -} - -/* - * PyramidAdaptedFeatureDetector - */ -PyramidAdaptedFeatureDetector::PyramidAdaptedFeatureDetector( const Ptr& _detector, int _maxLevel ) - : detector(_detector), maxLevel(_maxLevel) -{} - -bool PyramidAdaptedFeatureDetector::empty() const -{ - return detector.empty() || (FeatureDetector*)detector->empty(); -} - -void PyramidAdaptedFeatureDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - Mat src = image; - Mat src_mask = mask; - - Mat dilated_mask; - if( !mask.empty() ) - { - dilate( mask, dilated_mask, Mat() ); - Mat mask255( mask.size(), CV_8UC1, Scalar(0) ); - mask255.setTo( Scalar(255), dilated_mask != 0 ); - dilated_mask = mask255; - } - - for( int l = 0, multiplier = 1; l <= maxLevel; ++l, multiplier *= 2 ) - { - // Detect on current level of the pyramid - vector new_pts; - detector->detect( src, new_pts, src_mask ); - vector::iterator it = new_pts.begin(), - end = new_pts.end(); - for( ; it != end; ++it) - { - it->pt.x *= multiplier; - it->pt.y *= multiplier; - it->size *= multiplier; - it->octave = l; - } - keypoints.insert( keypoints.end(), new_pts.begin(), new_pts.end() ); - - // Downsample - if( l < maxLevel ) - { - Mat dst; - pyrDown( src, dst ); - src = dst; - - if( !mask.empty() ) - resize( dilated_mask, src_mask, src.size(), 0, 0, CV_INTER_AREA ); - } - } - - if( !mask.empty() ) - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - - -} diff --git a/modules/features2d/src/draw.cpp b/modules/features2d/src/draw.cpp deleted file mode 100644 index 144f71a..0000000 --- a/modules/features2d/src/draw.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -using namespace std; - -const int draw_shift_bits = 4; -const int draw_multiplier = 1 << draw_shift_bits; - -namespace cv -{ - -/* - * Functions to draw keypoints and matches. - */ -static inline void _drawKeypoint( Mat& img, const KeyPoint& p, const Scalar& color, int flags ) -{ - CV_Assert( !img.empty() ); - Point center( cvRound(p.pt.x * draw_multiplier), cvRound(p.pt.y * draw_multiplier) ); - - if( flags & DrawMatchesFlags::DRAW_RICH_KEYPOINTS ) - { - int radius = cvRound(p.size/2 * draw_multiplier); // KeyPoint::size is a diameter - - // draw the circles around keypoints with the keypoints size - circle( img, center, radius, color, 1, CV_AA, draw_shift_bits ); - - // draw orientation of the keypoint, if it is applicable - if( p.angle != -1 ) - { - float srcAngleRad = p.angle*(float)CV_PI/180.f; - Point orient( cvRound(cos(srcAngleRad)*radius ), - cvRound(sin(srcAngleRad)*radius ) - ); - line( img, center, center+orient, color, 1, CV_AA, draw_shift_bits ); - } -#if 0 - else - { - // draw center with R=1 - int radius = 1 * draw_multiplier; - circle( img, center, radius, color, 1, CV_AA, draw_shift_bits ); - } -#endif - } - else - { - // draw center with R=3 - int radius = 3 * draw_multiplier; - circle( img, center, radius, color, 1, CV_AA, draw_shift_bits ); - } -} - -void drawKeypoints( const Mat& image, const vector& keypoints, Mat& outImage, - const Scalar& _color, int flags ) -{ - if( !(flags & DrawMatchesFlags::DRAW_OVER_OUTIMG) ) - { - if( image.type() == CV_8UC3 ) - { - image.copyTo( outImage ); - } - else if( image.type() == CV_8UC1 ) - { - cvtColor( image, outImage, CV_GRAY2BGR ); - } - else - { - CV_Error( CV_StsBadArg, "Incorrect type of input image.\n" ); - } - } - - RNG& rng=theRNG(); - bool isRandColor = _color == Scalar::all(-1); - - CV_Assert( !outImage.empty() ); - vector::const_iterator it = keypoints.begin(), - end = keypoints.end(); - for( ; it != end; ++it ) - { - Scalar color = isRandColor ? Scalar(rng(256), rng(256), rng(256)) : _color; - _drawKeypoint( outImage, *it, color, flags ); - } -} - -static void _prepareImgAndDrawKeypoints( const Mat& img1, const vector& keypoints1, - const Mat& img2, const vector& keypoints2, - Mat& outImg, Mat& outImg1, Mat& outImg2, - const Scalar& singlePointColor, int flags ) -{ - Size size( img1.cols + img2.cols, MAX(img1.rows, img2.rows) ); - if( flags & DrawMatchesFlags::DRAW_OVER_OUTIMG ) - { - if( size.width > outImg.cols || size.height > outImg.rows ) - CV_Error( CV_StsBadSize, "outImg has size less than need to draw img1 and img2 together" ); - outImg1 = outImg( Rect(0, 0, img1.cols, img1.rows) ); - outImg2 = outImg( Rect(img1.cols, 0, img2.cols, img2.rows) ); - } - else - { - outImg.create( size, CV_MAKETYPE(img1.depth(), 3) ); - outImg = Scalar::all(0); - outImg1 = outImg( Rect(0, 0, img1.cols, img1.rows) ); - outImg2 = outImg( Rect(img1.cols, 0, img2.cols, img2.rows) ); - - if( img1.type() == CV_8U ) - cvtColor( img1, outImg1, CV_GRAY2BGR ); - else - img1.copyTo( outImg1 ); - - if( img2.type() == CV_8U ) - cvtColor( img2, outImg2, CV_GRAY2BGR ); - else - img2.copyTo( outImg2 ); - } - - // draw keypoints - if( !(flags & DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS) ) - { - Mat _outImg1 = outImg( Rect(0, 0, img1.cols, img1.rows) ); - drawKeypoints( _outImg1, keypoints1, _outImg1, singlePointColor, flags + DrawMatchesFlags::DRAW_OVER_OUTIMG ); - - Mat _outImg2 = outImg( Rect(img1.cols, 0, img2.cols, img2.rows) ); - drawKeypoints( _outImg2, keypoints2, _outImg2, singlePointColor, flags + DrawMatchesFlags::DRAW_OVER_OUTIMG ); - } -} - -static inline void _drawMatch( Mat& outImg, Mat& outImg1, Mat& outImg2 , - const KeyPoint& kp1, const KeyPoint& kp2, const Scalar& matchColor, int flags ) -{ - RNG& rng = theRNG(); - bool isRandMatchColor = matchColor == Scalar::all(-1); - Scalar color = isRandMatchColor ? Scalar( rng(256), rng(256), rng(256) ) : matchColor; - - _drawKeypoint( outImg1, kp1, color, flags ); - _drawKeypoint( outImg2, kp2, color, flags ); - - Point2f pt1 = kp1.pt, - pt2 = kp2.pt, - dpt2 = Point2f( std::min(pt2.x+outImg1.cols, float(outImg.cols-1)), pt2.y ); - - line( outImg, - Point(cvRound(pt1.x*draw_multiplier), cvRound(pt1.y*draw_multiplier)), - Point(cvRound(dpt2.x*draw_multiplier), cvRound(dpt2.y*draw_multiplier)), - color, 1, CV_AA, draw_shift_bits ); -} - -void drawMatches( const Mat& img1, const vector& keypoints1, - const Mat& img2, const vector& keypoints2, - const vector& matches1to2, Mat& outImg, - const Scalar& matchColor, const Scalar& singlePointColor, - const vector& matchesMask, int flags ) -{ - if( !matchesMask.empty() && matchesMask.size() != matches1to2.size() ) - CV_Error( CV_StsBadSize, "matchesMask must have the same size as matches1to2" ); - - Mat outImg1, outImg2; - _prepareImgAndDrawKeypoints( img1, keypoints1, img2, keypoints2, - outImg, outImg1, outImg2, singlePointColor, flags ); - - // draw matches - for( size_t m = 0; m < matches1to2.size(); m++ ) - { - if( matchesMask.empty() || matchesMask[m] ) - { - int i1 = matches1to2[m].queryIdx; - int i2 = matches1to2[m].trainIdx; - CV_Assert(i1 >= 0 && i1 < static_cast(keypoints1.size())); - CV_Assert(i2 >= 0 && i2 < static_cast(keypoints2.size())); - - const KeyPoint &kp1 = keypoints1[i1], &kp2 = keypoints2[i2]; - _drawMatch( outImg, outImg1, outImg2, kp1, kp2, matchColor, flags ); - } - } -} - -void drawMatches( const Mat& img1, const vector& keypoints1, - const Mat& img2, const vector& keypoints2, - const vector >& matches1to2, Mat& outImg, - const Scalar& matchColor, const Scalar& singlePointColor, - const vector >& matchesMask, int flags ) -{ - if( !matchesMask.empty() && matchesMask.size() != matches1to2.size() ) - CV_Error( CV_StsBadSize, "matchesMask must have the same size as matches1to2" ); - - Mat outImg1, outImg2; - _prepareImgAndDrawKeypoints( img1, keypoints1, img2, keypoints2, - outImg, outImg1, outImg2, singlePointColor, flags ); - - // draw matches - for( size_t i = 0; i < matches1to2.size(); i++ ) - { - for( size_t j = 0; j < matches1to2[i].size(); j++ ) - { - int i1 = matches1to2[i][j].queryIdx; - int i2 = matches1to2[i][j].trainIdx; - if( matchesMask.empty() || matchesMask[i][j] ) - { - const KeyPoint &kp1 = keypoints1[i1], &kp2 = keypoints2[i2]; - _drawMatch( outImg, outImg1, outImg2, kp1, kp2, matchColor, flags ); - } - } - } -} -} diff --git a/modules/features2d/src/dynamic.cpp b/modules/features2d/src/dynamic.cpp deleted file mode 100644 index 3503cad..0000000 --- a/modules/features2d/src/dynamic.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - // - // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - // - // By downloading, copying, installing or using the software you agree to this license. - // If you do not agree to this license, do not download, install, - // copy or use the software. - // - // - // License Agreement - // For Open Source Computer Vision Library - // - // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. - // Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved. - // Third party copyrights are property of their respective owners. - // - // Redistribution and use in source and binary forms, with or without modification, - // are permitted provided that the following conditions are met: - // - // * Redistribution's of source code must retain the above copyright notice, - // this list of conditions and the following disclaimer. - // - // * Redistribution's in binary form must reproduce the above copyright notice, - // this list of conditions and the following disclaimer in the documentation - // and/or other materials provided with the distribution. - // - // * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, - // indirect, incidental, special, exemplary, or consequential damages - // (including, but not limited to, procurement of substitute goods or services; - // loss of use, data, or profits; or business interruption) however caused - // and on any theory of liability, whether in contract, strict liability, - // or tort (including negligence or otherwise) arising in any way out of - // the use of this software, even if advised of the possibility of such damage. - // - //M*/ - -#include "precomp.hpp" -namespace cv -{ - -DynamicAdaptedFeatureDetector::DynamicAdaptedFeatureDetector(const Ptr& a, - int min_features, int max_features, int max_iters ) : - escape_iters_(max_iters), min_features_(min_features), max_features_(max_features), adjuster_(a) -{} - -bool DynamicAdaptedFeatureDetector::empty() const -{ - return adjuster_.empty() || adjuster_->empty(); -} - -void DynamicAdaptedFeatureDetector::detectImpl(const Mat& image, vector& keypoints, const Mat& mask) const -{ - //for oscillation testing - bool down = false; - bool up = false; - - //flag for whether the correct threshhold has been reached - bool thresh_good = false; - - Ptr adjuster = adjuster_->clone(); - - //break if the desired number hasn't been reached. - int iter_count = escape_iters_; - - while( iter_count > 0 && !(down && up) && !thresh_good && adjuster->good() ) - { - keypoints.clear(); - - //the adjuster takes care of calling the detector with updated parameters - adjuster->detect(image, keypoints,mask); - - if( int(keypoints.size()) < min_features_ ) - { - down = true; - adjuster->tooFew(min_features_, (int)keypoints.size()); - } - else if( int(keypoints.size()) > max_features_ ) - { - up = true; - adjuster->tooMany(max_features_, (int)keypoints.size()); - } - else - thresh_good = true; - - iter_count--; - } - -} - -FastAdjuster::FastAdjuster( int init_thresh, bool nonmax, int min_thresh, int max_thresh ) : - thresh_(init_thresh), nonmax_(nonmax), init_thresh_(init_thresh), - min_thresh_(min_thresh), max_thresh_(max_thresh) -{} - -void FastAdjuster::detectImpl(const Mat& image, vector& keypoints, const Mat& mask) const -{ - FastFeatureDetector(thresh_, nonmax_).detect(image, keypoints, mask); -} - -void FastAdjuster::tooFew(int, int) -{ - //fast is easy to adjust - thresh_--; -} - -void FastAdjuster::tooMany(int, int) -{ - //fast is easy to adjust - thresh_++; -} - -//return whether or not the threshhold is beyond -//a useful point -bool FastAdjuster::good() const -{ - return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); -} - -Ptr FastAdjuster::clone() const -{ - Ptr cloned_obj = new FastAdjuster( init_thresh_, nonmax_, min_thresh_, max_thresh_ ); - return cloned_obj; -} - -StarAdjuster::StarAdjuster(double initial_thresh, double min_thresh, double max_thresh) : - thresh_(initial_thresh), init_thresh_(initial_thresh), - min_thresh_(min_thresh), max_thresh_(max_thresh) -{} - -void StarAdjuster::detectImpl(const Mat& image, vector& keypoints, const Mat& mask) const -{ - StarFeatureDetector detector_tmp(16, cvRound(thresh_), 10, 8, 3); - detector_tmp.detect(image, keypoints, mask); -} - -void StarAdjuster::tooFew(int, int) -{ - thresh_ *= 0.9; - if (thresh_ < 1.1) - thresh_ = 1.1; -} - -void StarAdjuster::tooMany(int, int) -{ - thresh_ *= 1.1; -} - -bool StarAdjuster::good() const -{ - return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); -} - -Ptr StarAdjuster::clone() const -{ - Ptr cloned_obj = new StarAdjuster( init_thresh_, min_thresh_, max_thresh_ ); - return cloned_obj; -} - -SurfAdjuster::SurfAdjuster( double initial_thresh, double min_thresh, double max_thresh ) : - thresh_(initial_thresh), init_thresh_(initial_thresh), - min_thresh_(min_thresh), max_thresh_(max_thresh) -{} - -void SurfAdjuster::detectImpl(const Mat& image, vector& keypoints, const cv::Mat& mask) const -{ - Ptr surf = FeatureDetector::create("SURF"); - surf->set("hessianThreshold", thresh_); - surf->detect(image, keypoints, mask); -} - -void SurfAdjuster::tooFew(int, int) -{ - thresh_ *= 0.9; - if (thresh_ < 1.1) - thresh_ = 1.1; -} - -void SurfAdjuster::tooMany(int, int) -{ - thresh_ *= 1.1; -} - -//return whether or not the threshhold is beyond -//a useful point -bool SurfAdjuster::good() const -{ - return (thresh_ > min_thresh_) && (thresh_ < max_thresh_); -} - -Ptr SurfAdjuster::clone() const -{ - Ptr cloned_obj = new SurfAdjuster( init_thresh_, min_thresh_, max_thresh_ ); - return cloned_obj; -} - -Ptr AdjusterAdapter::create( const string& detectorType ) -{ - Ptr adapter; - - if( !detectorType.compare( "FAST" ) ) - { - adapter = new FastAdjuster(); - } - else if( !detectorType.compare( "STAR" ) ) - { - adapter = new StarAdjuster(); - } - else if( !detectorType.compare( "SURF" ) ) - { - adapter = new SurfAdjuster(); - } - - return adapter; -} - -} diff --git a/modules/features2d/src/evaluation.cpp b/modules/features2d/src/evaluation.cpp deleted file mode 100644 index 52740e6..0000000 --- a/modules/features2d/src/evaluation.cpp +++ /dev/null @@ -1,612 +0,0 @@ -//*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -using namespace cv; -using namespace std; - -template static int solveQuadratic(_Tp a, _Tp b, _Tp c, _Tp& x1, _Tp& x2) -{ - if( a == 0 ) - { - if( b == 0 ) - { - x1 = x2 = 0; - return c == 0; - } - x1 = x2 = -c/b; - return 1; - } - - _Tp d = b*b - 4*a*c; - if( d < 0 ) - { - x1 = x2 = 0; - return 0; - } - if( d > 0 ) - { - d = std::sqrt(d); - double s = 1/(2*a); - x1 = (-b - d)*s; - x2 = (-b + d)*s; - if( x1 > x2 ) - std::swap(x1, x2); - return 2; - } - x1 = x2 = -b/(2*a); - return 1; -} - -//for android ndk -#undef _S -static inline Point2f applyHomography( const Mat_& H, const Point2f& pt ) -{ - double z = H(2,0)*pt.x + H(2,1)*pt.y + H(2,2); - if( z ) - { - double w = 1./z; - return Point2f( (float)((H(0,0)*pt.x + H(0,1)*pt.y + H(0,2))*w), (float)((H(1,0)*pt.x + H(1,1)*pt.y + H(1,2))*w) ); - } - return Point2f( numeric_limits::max(), numeric_limits::max() ); -} - -static inline void linearizeHomographyAt( const Mat_& H, const Point2f& pt, Mat_& A ) -{ - A.create(2,2); - double p1 = H(0,0)*pt.x + H(0,1)*pt.y + H(0,2), - p2 = H(1,0)*pt.x + H(1,1)*pt.y + H(1,2), - p3 = H(2,0)*pt.x + H(2,1)*pt.y + H(2,2), - p3_2 = p3*p3; - if( p3 ) - { - A(0,0) = H(0,0)/p3 - p1*H(2,0)/p3_2; // fxdx - A(0,1) = H(0,1)/p3 - p1*H(2,1)/p3_2; // fxdy - - A(1,0) = H(1,0)/p3 - p2*H(2,0)/p3_2; // fydx - A(1,1) = H(1,1)/p3 - p2*H(2,1)/p3_2; // fydx - } - else - A.setTo(Scalar::all(numeric_limits::max())); -} - -class EllipticKeyPoint -{ -public: - EllipticKeyPoint(); - EllipticKeyPoint( const Point2f& _center, const Scalar& _ellipse ); - - static void convert( const vector& src, vector& dst ); - static void convert( const vector& src, vector& dst ); - - static Mat_ getSecondMomentsMatrix( const Scalar& _ellipse ); - Mat_ getSecondMomentsMatrix() const; - - void calcProjection( const Mat_& H, EllipticKeyPoint& projection ) const; - static void calcProjection( const vector& src, const Mat_& H, vector& dst ); - - Point2f center; - Scalar ellipse; // 3 elements a, b, c: ax^2+2bxy+cy^2=1 - Size_ axes; // half length of ellipse axes - Size_ boundingBox; // half sizes of bounding box which sides are parallel to the coordinate axes -}; - -EllipticKeyPoint::EllipticKeyPoint() -{ - *this = EllipticKeyPoint(Point2f(0,0), Scalar(1, 0, 1) ); -} - -EllipticKeyPoint::EllipticKeyPoint( const Point2f& _center, const Scalar& _ellipse ) -{ - center = _center; - ellipse = _ellipse; - - double a = ellipse[0], b = ellipse[1], c = ellipse[2]; - double ac_b2 = a*c - b*b; - double x1, x2; - solveQuadratic(1., -(a+c), ac_b2, x1, x2); - axes.width = (float)(1/sqrt(x1)); - axes.height = (float)(1/sqrt(x2)); - - boundingBox.width = (float)sqrt(ellipse[2]/ac_b2); - boundingBox.height = (float)sqrt(ellipse[0]/ac_b2); -} - -Mat_ EllipticKeyPoint::getSecondMomentsMatrix( const Scalar& _ellipse ) -{ - Mat_ M(2, 2); - M(0,0) = _ellipse[0]; - M(1,0) = M(0,1) = _ellipse[1]; - M(1,1) = _ellipse[2]; - return M; -} - -Mat_ EllipticKeyPoint::getSecondMomentsMatrix() const -{ - return getSecondMomentsMatrix(ellipse); -} - -void EllipticKeyPoint::calcProjection( const Mat_& H, EllipticKeyPoint& projection ) const -{ - Point2f dstCenter = applyHomography(H, center); - - Mat_ invM; invert(getSecondMomentsMatrix(), invM); - Mat_ Aff; linearizeHomographyAt(H, center, Aff); - Mat_ dstM; invert(Aff*invM*Aff.t(), dstM); - - projection = EllipticKeyPoint( dstCenter, Scalar(dstM(0,0), dstM(0,1), dstM(1,1)) ); -} - -void EllipticKeyPoint::convert( const vector& src, vector& dst ) -{ - if( !src.empty() ) - { - dst.resize(src.size()); - for( size_t i = 0; i < src.size(); i++ ) - { - float rad = src[i].size/2; - assert( rad ); - float fac = 1.f/(rad*rad); - dst[i] = EllipticKeyPoint( src[i].pt, Scalar(fac, 0, fac) ); - } - } -} - -void EllipticKeyPoint::convert( const vector& src, vector& dst ) -{ - if( !src.empty() ) - { - dst.resize(src.size()); - for( size_t i = 0; i < src.size(); i++ ) - { - Size_ axes = src[i].axes; - float rad = sqrt(axes.height*axes.width); - dst[i] = KeyPoint(src[i].center, 2*rad ); - } - } -} - -void EllipticKeyPoint::calcProjection( const vector& src, const Mat_& H, vector& dst ) -{ - if( !src.empty() ) - { - assert( !H.empty() && H.cols == 3 && H.rows == 3); - dst.resize(src.size()); - vector::const_iterator srcIt = src.begin(); - vector::iterator dstIt = dst.begin(); - for( ; srcIt != src.end(); ++srcIt, ++dstIt ) - srcIt->calcProjection(H, *dstIt); - } -} - -static void filterEllipticKeyPointsByImageSize( vector& keypoints, const Size& imgSize ) -{ - if( !keypoints.empty() ) - { - vector filtered; - filtered.reserve(keypoints.size()); - vector::const_iterator it = keypoints.begin(); - for( int i = 0; it != keypoints.end(); ++it, i++ ) - { - if( it->center.x + it->boundingBox.width < imgSize.width && - it->center.x - it->boundingBox.width > 0 && - it->center.y + it->boundingBox.height < imgSize.height && - it->center.y - it->boundingBox.height > 0 ) - filtered.push_back(*it); - } - keypoints.assign(filtered.begin(), filtered.end()); - } -} - -struct IntersectAreaCounter -{ - IntersectAreaCounter( float _dr, int _minx, - int _miny, int _maxy, - const Point2f& _diff, - const Scalar& _ellipse1, const Scalar& _ellipse2 ) : - dr(_dr), bua(0), bna(0), minx(_minx), miny(_miny), maxy(_maxy), - diff(_diff), ellipse1(_ellipse1), ellipse2(_ellipse2) {} - IntersectAreaCounter( const IntersectAreaCounter& counter, Split ) - { - *this = counter; - bua = 0; - bna = 0; - } - - void operator()( const BlockedRange& range ) - { - CV_Assert( miny < maxy ); - CV_Assert( dr > FLT_EPSILON ); - - int temp_bua = bua, temp_bna = bna; - for( int i = range.begin(); i != range.end(); i++ ) - { - float rx1 = minx + i*dr; - float rx2 = rx1 - diff.x; - for( float ry1 = (float)miny; ry1 <= (float)maxy; ry1 += dr ) - { - float ry2 = ry1 - diff.y; - //compute the distance from the ellipse center - float e1 = (float)(ellipse1[0]*rx1*rx1 + 2*ellipse1[1]*rx1*ry1 + ellipse1[2]*ry1*ry1); - float e2 = (float)(ellipse2[0]*rx2*rx2 + 2*ellipse2[1]*rx2*ry2 + ellipse2[2]*ry2*ry2); - //compute the area - if( e1<1 && e2<1 ) temp_bna++; - if( e1<1 || e2<1 ) temp_bua++; - } - } - bua = temp_bua; - bna = temp_bna; - } - - void join( IntersectAreaCounter& ac ) - { - bua += ac.bua; - bna += ac.bna; - } - - float dr; - int bua, bna; - - int minx; - int miny, maxy; - - Point2f diff; - Scalar ellipse1, ellipse2; - -}; - -struct SIdx -{ - SIdx() : S(-1), i1(-1), i2(-1) {} - SIdx(float _S, int _i1, int _i2) : S(_S), i1(_i1), i2(_i2) {} - float S; - int i1; - int i2; - - bool operator<(const SIdx& v) const { return S > v.S; } - - struct UsedFinder - { - UsedFinder(const SIdx& _used) : used(_used) {} - const SIdx& used; - bool operator()(const SIdx& v) const { return (v.i1 == used.i1 || v.i2 == used.i2); } - UsedFinder& operator=(const UsedFinder&); - }; -}; - -static void computeOneToOneMatchedOverlaps( const vector& keypoints1, const vector& keypoints2t, - bool commonPart, vector& overlaps, float minOverlap ) -{ - CV_Assert( minOverlap >= 0.f ); - overlaps.clear(); - if( keypoints1.empty() || keypoints2t.empty() ) - return; - - overlaps.clear(); - overlaps.reserve(cvRound(keypoints1.size() * keypoints2t.size() * 0.01)); - - for( size_t i1 = 0; i1 < keypoints1.size(); i1++ ) - { - EllipticKeyPoint kp1 = keypoints1[i1]; - float maxDist = sqrt(kp1.axes.width*kp1.axes.height), - fac = 30.f/maxDist; - if( !commonPart ) - fac=3; - - maxDist = maxDist*4; - fac = 1.f/(fac*fac); - - EllipticKeyPoint keypoint1a = EllipticKeyPoint( kp1.center, Scalar(fac*kp1.ellipse[0], fac*kp1.ellipse[1], fac*kp1.ellipse[2]) ); - - for( size_t i2 = 0; i2 < keypoints2t.size(); i2++ ) - { - EllipticKeyPoint kp2 = keypoints2t[i2]; - Point2f diff = kp2.center - kp1.center; - - if( norm(diff) < maxDist ) - { - EllipticKeyPoint keypoint2a = EllipticKeyPoint( kp2.center, Scalar(fac*kp2.ellipse[0], fac*kp2.ellipse[1], fac*kp2.ellipse[2]) ); - //find the largest eigenvalue - int maxx = (int)ceil(( keypoint1a.boundingBox.width > (diff.x+keypoint2a.boundingBox.width)) ? - keypoint1a.boundingBox.width : (diff.x+keypoint2a.boundingBox.width)); - int minx = (int)floor((-keypoint1a.boundingBox.width < (diff.x-keypoint2a.boundingBox.width)) ? - -keypoint1a.boundingBox.width : (diff.x-keypoint2a.boundingBox.width)); - - int maxy = (int)ceil(( keypoint1a.boundingBox.height > (diff.y+keypoint2a.boundingBox.height)) ? - keypoint1a.boundingBox.height : (diff.y+keypoint2a.boundingBox.height)); - int miny = (int)floor((-keypoint1a.boundingBox.height < (diff.y-keypoint2a.boundingBox.height)) ? - -keypoint1a.boundingBox.height : (diff.y-keypoint2a.boundingBox.height)); - int mina = (maxx-minx) < (maxy-miny) ? (maxx-minx) : (maxy-miny) ; - - //compute the area - float dr = (float)mina/50.f; - int N = (int)floor((float)(maxx - minx) / dr); - IntersectAreaCounter ac( dr, minx, miny, maxy, diff, keypoint1a.ellipse, keypoint2a.ellipse ); - parallel_reduce( BlockedRange(0, N+1), ac ); - if( ac.bna > 0 ) - { - float ov = (float)ac.bna / (float)ac.bua; - if( ov >= minOverlap ) - overlaps.push_back(SIdx(ov, (int)i1, (int)i2)); - } - } - } - } - - sort( overlaps.begin(), overlaps.end() ); - - typedef vector::iterator It; - - It pos = overlaps.begin(); - It end = overlaps.end(); - - while(pos != end) - { - It prev = pos++; - end = std::remove_if(pos, end, SIdx::UsedFinder(*prev)); - } - overlaps.erase(pos, overlaps.end()); -} - -static void calculateRepeatability( const Mat& img1, const Mat& img2, const Mat& H1to2, - const vector& _keypoints1, const vector& _keypoints2, - float& repeatability, int& correspondencesCount, - Mat* thresholdedOverlapMask=0 ) -{ - vector keypoints1, keypoints2, keypoints1t, keypoints2t; - EllipticKeyPoint::convert( _keypoints1, keypoints1 ); - EllipticKeyPoint::convert( _keypoints2, keypoints2 ); - - // calculate projections of key points - EllipticKeyPoint::calcProjection( keypoints1, H1to2, keypoints1t ); - Mat H2to1; invert(H1to2, H2to1); - EllipticKeyPoint::calcProjection( keypoints2, H2to1, keypoints2t ); - - float overlapThreshold; - bool ifEvaluateDetectors = thresholdedOverlapMask == 0; - if( ifEvaluateDetectors ) - { - overlapThreshold = 1.f - 0.4f; - - // remove key points from outside of the common image part - Size sz1 = img1.size(), sz2 = img2.size(); - filterEllipticKeyPointsByImageSize( keypoints1, sz1 ); - filterEllipticKeyPointsByImageSize( keypoints1t, sz2 ); - filterEllipticKeyPointsByImageSize( keypoints2, sz2 ); - filterEllipticKeyPointsByImageSize( keypoints2t, sz1 ); - } - else - { - overlapThreshold = 1.f - 0.5f; - - thresholdedOverlapMask->create( (int)keypoints1.size(), (int)keypoints2t.size(), CV_8UC1 ); - thresholdedOverlapMask->setTo( Scalar::all(0) ); - } - size_t size1 = keypoints1.size(), size2 = keypoints2t.size(); - size_t minCount = MIN( size1, size2 ); - - // calculate overlap errors - vector overlaps; - computeOneToOneMatchedOverlaps( keypoints1, keypoints2t, ifEvaluateDetectors, overlaps, overlapThreshold/*min overlap*/ ); - - correspondencesCount = -1; - repeatability = -1.f; - if( overlaps.empty() ) - return; - - if( ifEvaluateDetectors ) - { - // regions one-to-one matching - correspondencesCount = (int)overlaps.size(); - repeatability = minCount ? (float)correspondencesCount / minCount : -1; - } - else - { - for( size_t i = 0; i < overlaps.size(); i++ ) - { - int y = overlaps[i].i1; - int x = overlaps[i].i2; - thresholdedOverlapMask->at(y,x) = 1; - } - } -} - -void cv::evaluateFeatureDetector( const Mat& img1, const Mat& img2, const Mat& H1to2, - vector* _keypoints1, vector* _keypoints2, - float& repeatability, int& correspCount, - const Ptr& _fdetector ) -{ - Ptr fdetector(_fdetector); - vector *keypoints1, *keypoints2, buf1, buf2; - keypoints1 = _keypoints1 != 0 ? _keypoints1 : &buf1; - keypoints2 = _keypoints2 != 0 ? _keypoints2 : &buf2; - - if( (keypoints1->empty() || keypoints2->empty()) && fdetector.empty() ) - CV_Error( CV_StsBadArg, "fdetector must not be empty when keypoints1 or keypoints2 is empty" ); - - if( keypoints1->empty() ) - fdetector->detect( img1, *keypoints1 ); - if( keypoints2->empty() ) - fdetector->detect( img2, *keypoints2 ); - - calculateRepeatability( img1, img2, H1to2, *keypoints1, *keypoints2, repeatability, correspCount ); -} - -struct DMatchForEvaluation : public DMatch -{ - uchar isCorrect; - DMatchForEvaluation( const DMatch &dm ) : DMatch( dm ) {} -}; - -static inline float recall( int correctMatchCount, int correspondenceCount ) -{ - return correspondenceCount ? (float)correctMatchCount / (float)correspondenceCount : -1; -} - -static inline float precision( int correctMatchCount, int falseMatchCount ) -{ - return correctMatchCount + falseMatchCount ? (float)correctMatchCount / (float)(correctMatchCount + falseMatchCount) : -1; -} - -void cv::computeRecallPrecisionCurve( const vector >& matches1to2, - const vector >& correctMatches1to2Mask, - vector& recallPrecisionCurve ) -{ - CV_Assert( matches1to2.size() == correctMatches1to2Mask.size() ); - - vector allMatches; - int correspondenceCount = 0; - for( size_t i = 0; i < matches1to2.size(); i++ ) - { - for( size_t j = 0; j < matches1to2[i].size(); j++ ) - { - DMatchForEvaluation match = matches1to2[i][j]; - match.isCorrect = correctMatches1to2Mask[i][j] ; - allMatches.push_back( match ); - correspondenceCount += match.isCorrect != 0 ? 1 : 0; - } - } - - std::sort( allMatches.begin(), allMatches.end() ); - - int correctMatchCount = 0, falseMatchCount = 0; - recallPrecisionCurve.resize( allMatches.size() ); - for( size_t i = 0; i < allMatches.size(); i++ ) - { - if( allMatches[i].isCorrect ) - correctMatchCount++; - else - falseMatchCount++; - - float r = recall( correctMatchCount, correspondenceCount ); - float p = precision( correctMatchCount, falseMatchCount ); - recallPrecisionCurve[i] = Point2f(1-p, r); - } -} - -float cv::getRecall( const vector& recallPrecisionCurve, float l_precision ) -{ - int nearestPointIndex = getNearestPoint( recallPrecisionCurve, l_precision ); - - float recall = -1.f; - - if( nearestPointIndex >= 0 ) - recall = recallPrecisionCurve[nearestPointIndex].y; - - return recall; -} - -int cv::getNearestPoint( const vector& recallPrecisionCurve, float l_precision ) -{ - int nearestPointIndex = -1; - - if( l_precision >= 0 && l_precision <= 1 ) - { - float minDiff = FLT_MAX; - for( size_t i = 0; i < recallPrecisionCurve.size(); i++ ) - { - float curDiff = std::fabs(l_precision - recallPrecisionCurve[i].x); - if( curDiff <= minDiff ) - { - nearestPointIndex = (int)i; - minDiff = curDiff; - } - } - } - - return nearestPointIndex; -} - -void cv::evaluateGenericDescriptorMatcher( const Mat& img1, const Mat& img2, const Mat& H1to2, - vector& keypoints1, vector& keypoints2, - vector >* _matches1to2, vector >* _correctMatches1to2Mask, - vector& recallPrecisionCurve, - const Ptr& _dmatcher ) -{ - Ptr dmatcher = _dmatcher; - dmatcher->clear(); - - vector > *matches1to2, buf1; - matches1to2 = _matches1to2 != 0 ? _matches1to2 : &buf1; - - vector > *correctMatches1to2Mask, buf2; - correctMatches1to2Mask = _correctMatches1to2Mask != 0 ? _correctMatches1to2Mask : &buf2; - - if( keypoints1.empty() ) - CV_Error( CV_StsBadArg, "keypoints1 must not be empty" ); - - if( matches1to2->empty() && dmatcher.empty() ) - CV_Error( CV_StsBadArg, "dmatch must not be empty when matches1to2 is empty" ); - - bool computeKeypoints2ByPrj = keypoints2.empty(); - if( computeKeypoints2ByPrj ) - { - assert(0); - // TODO: add computing keypoints2 from keypoints1 using H1to2 - } - - if( matches1to2->empty() || computeKeypoints2ByPrj ) - { - dmatcher->clear(); - dmatcher->radiusMatch( img1, keypoints1, img2, keypoints2, *matches1to2, std::numeric_limits::max() ); - } - float repeatability; - int correspCount; - Mat thresholdedOverlapMask; // thresholded allOverlapErrors - calculateRepeatability( img1, img2, H1to2, keypoints1, keypoints2, repeatability, correspCount, &thresholdedOverlapMask ); - - correctMatches1to2Mask->resize(matches1to2->size()); - for( size_t i = 0; i < matches1to2->size(); i++ ) - { - (*correctMatches1to2Mask)[i].resize((*matches1to2)[i].size()); - for( size_t j = 0;j < (*matches1to2)[i].size(); j++ ) - { - int indexQuery = (*matches1to2)[i][j].queryIdx; - int indexTrain = (*matches1to2)[i][j].trainIdx; - (*correctMatches1to2Mask)[i][j] = thresholdedOverlapMask.at( indexQuery, indexTrain ); - } - } - - computeRecallPrecisionCurve( *matches1to2, *correctMatches1to2Mask, recallPrecisionCurve ); -} diff --git a/modules/features2d/src/fast.cpp b/modules/features2d/src/fast.cpp deleted file mode 100644 index f0f636a..0000000 --- a/modules/features2d/src/fast.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten. - Below is the original copyright and the references */ - -/* -Copyright (c) 2006, 2008 Edward Rosten -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - *Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - *Redistributions in binary form must 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 University of Cambridge 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 OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -The references are: - * Machine learning for high-speed corner detection, - E. Rosten and T. Drummond, ECCV 2006 - * Faster and better: A machine learning approach to corner detection - E. Rosten, R. Porter and T. Drummond, PAMI, 2009 -*/ - -#include "precomp.hpp" -#include "fast_score.hpp" - -#if defined _MSC_VER -# pragma warning( disable : 4127) -#endif - -namespace cv -{ - -template -void FAST_t(InputArray _img, std::vector& keypoints, int threshold, bool nonmax_suppression) -{ - Mat img = _img.getMat(); - const int K = patternSize/2, N = patternSize + K + 1; -#if CV_SSE2 - const int quarterPatternSize = patternSize/4; - (void)quarterPatternSize; -#endif - int i, j, k, pixel[25]; - makeOffsets(pixel, (int)img.step, patternSize); - - keypoints.clear(); - - threshold = std::min(std::max(threshold, 0), 255); - -#if CV_SSE2 - __m128i delta = _mm_set1_epi8(-128), t = _mm_set1_epi8((char)threshold), K16 = _mm_set1_epi8((char)K); - (void)K16; - (void)delta; - (void)t; -#endif - uchar threshold_tab[512]; - for( i = -255; i <= 255; i++ ) - threshold_tab[i+255] = (uchar)(i < -threshold ? 1 : i > threshold ? 2 : 0); - - AutoBuffer _buf((img.cols+16)*3*(sizeof(int) + sizeof(uchar)) + 128); - uchar* buf[3]; - buf[0] = _buf; buf[1] = buf[0] + img.cols; buf[2] = buf[1] + img.cols; - int* cpbuf[3]; - cpbuf[0] = (int*)alignPtr(buf[2] + img.cols, sizeof(int)) + 1; - cpbuf[1] = cpbuf[0] + img.cols + 1; - cpbuf[2] = cpbuf[1] + img.cols + 1; - memset(buf[0], 0, img.cols*3); - - for(i = 3; i < img.rows-2; i++) - { - const uchar* ptr = img.ptr(i) + 3; - uchar* curr = buf[(i - 3)%3]; - int* cornerpos = cpbuf[(i - 3)%3]; - memset(curr, 0, img.cols); - int ncorners = 0; - - if( i < img.rows - 3 ) - { - j = 3; - #if CV_SSE2 - if( patternSize == 16 ) - { - for(; j < img.cols - 16 - 3; j += 16, ptr += 16) - { - __m128i m0, m1; - __m128i v0 = _mm_loadu_si128((const __m128i*)ptr); - __m128i v1 = _mm_xor_si128(_mm_subs_epu8(v0, t), delta); - v0 = _mm_xor_si128(_mm_adds_epu8(v0, t), delta); - - __m128i x0 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[0])), delta); - __m128i x1 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[quarterPatternSize])), delta); - __m128i x2 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[2*quarterPatternSize])), delta); - __m128i x3 = _mm_sub_epi8(_mm_loadu_si128((const __m128i*)(ptr + pixel[3*quarterPatternSize])), delta); - m0 = _mm_and_si128(_mm_cmpgt_epi8(x0, v0), _mm_cmpgt_epi8(x1, v0)); - m1 = _mm_and_si128(_mm_cmpgt_epi8(v1, x0), _mm_cmpgt_epi8(v1, x1)); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x1, v0), _mm_cmpgt_epi8(x2, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x1), _mm_cmpgt_epi8(v1, x2))); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x2, v0), _mm_cmpgt_epi8(x3, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x2), _mm_cmpgt_epi8(v1, x3))); - m0 = _mm_or_si128(m0, _mm_and_si128(_mm_cmpgt_epi8(x3, v0), _mm_cmpgt_epi8(x0, v0))); - m1 = _mm_or_si128(m1, _mm_and_si128(_mm_cmpgt_epi8(v1, x3), _mm_cmpgt_epi8(v1, x0))); - m0 = _mm_or_si128(m0, m1); - int mask = _mm_movemask_epi8(m0); - if( mask == 0 ) - continue; - if( (mask & 255) == 0 ) - { - j -= 8; - ptr -= 8; - continue; - } - - __m128i c0 = _mm_setzero_si128(), c1 = c0, max0 = c0, max1 = c0; - for( k = 0; k < N; k++ ) - { - __m128i x = _mm_xor_si128(_mm_loadu_si128((const __m128i*)(ptr + pixel[k])), delta); - m0 = _mm_cmpgt_epi8(x, v0); - m1 = _mm_cmpgt_epi8(v1, x); - - c0 = _mm_and_si128(_mm_sub_epi8(c0, m0), m0); - c1 = _mm_and_si128(_mm_sub_epi8(c1, m1), m1); - - max0 = _mm_max_epu8(max0, c0); - max1 = _mm_max_epu8(max1, c1); - } - - max0 = _mm_max_epu8(max0, max1); - int m = _mm_movemask_epi8(_mm_cmpgt_epi8(max0, K16)); - - for( k = 0; m > 0 && k < 16; k++, m >>= 1 ) - if(m & 1) - { - cornerpos[ncorners++] = j+k; - if(nonmax_suppression) - curr[j+k] = (uchar)cornerScore(ptr+k, pixel, threshold); - } - } - } - #endif - for( ; j < img.cols - 3; j++, ptr++ ) - { - int v = ptr[0]; - const uchar* tab = &threshold_tab[0] - v + 255; - int d = tab[ptr[pixel[0]]] | tab[ptr[pixel[8]]]; - - if( d == 0 ) - continue; - - d &= tab[ptr[pixel[2]]] | tab[ptr[pixel[10]]]; - d &= tab[ptr[pixel[4]]] | tab[ptr[pixel[12]]]; - d &= tab[ptr[pixel[6]]] | tab[ptr[pixel[14]]]; - - if( d == 0 ) - continue; - - d &= tab[ptr[pixel[1]]] | tab[ptr[pixel[9]]]; - d &= tab[ptr[pixel[3]]] | tab[ptr[pixel[11]]]; - d &= tab[ptr[pixel[5]]] | tab[ptr[pixel[13]]]; - d &= tab[ptr[pixel[7]]] | tab[ptr[pixel[15]]]; - - if( d & 1 ) - { - int vt = v - threshold, count = 0; - - for( k = 0; k < N; k++ ) - { - int x = ptr[pixel[k]]; - if(x < vt) - { - if( ++count > K ) - { - cornerpos[ncorners++] = j; - if(nonmax_suppression) - curr[j] = (uchar)cornerScore(ptr, pixel, threshold); - break; - } - } - else - count = 0; - } - } - - if( d & 2 ) - { - int vt = v + threshold, count = 0; - - for( k = 0; k < N; k++ ) - { - int x = ptr[pixel[k]]; - if(x > vt) - { - if( ++count > K ) - { - cornerpos[ncorners++] = j; - if(nonmax_suppression) - curr[j] = (uchar)cornerScore(ptr, pixel, threshold); - break; - } - } - else - count = 0; - } - } - } - } - - cornerpos[-1] = ncorners; - - if( i == 3 ) - continue; - - const uchar* prev = buf[(i - 4 + 3)%3]; - const uchar* pprev = buf[(i - 5 + 3)%3]; - cornerpos = cpbuf[(i - 4 + 3)%3]; - ncorners = cornerpos[-1]; - - for( k = 0; k < ncorners; k++ ) - { - j = cornerpos[k]; - int score = prev[j]; - if( !nonmax_suppression || - (score > prev[j+1] && score > prev[j-1] && - score > pprev[j-1] && score > pprev[j] && score > pprev[j+1] && - score > curr[j-1] && score > curr[j] && score > curr[j+1]) ) - { - keypoints.push_back(KeyPoint((float)j, (float)(i-1), 7.f, -1, (float)score)); - } - } - } -} - -void FASTX(InputArray _img, std::vector& keypoints, int threshold, bool nonmax_suppression, int type) -{ - switch(type) { - case FastFeatureDetector::TYPE_5_8: - FAST_t<8>(_img, keypoints, threshold, nonmax_suppression); - break; - case FastFeatureDetector::TYPE_7_12: - FAST_t<12>(_img, keypoints, threshold, nonmax_suppression); - break; - case FastFeatureDetector::TYPE_9_16: -#ifdef HAVE_TEGRA_OPTIMIZATION - if(tegra::FAST(_img, keypoints, threshold, nonmax_suppression)) - break; -#endif - FAST_t<16>(_img, keypoints, threshold, nonmax_suppression); - break; - } -} - -void FAST(InputArray _img, std::vector& keypoints, int threshold, bool nonmax_suppression) -{ - FASTX(_img, keypoints, threshold, nonmax_suppression, FastFeatureDetector::TYPE_9_16); -} - -/* - * FastFeatureDetector - */ -FastFeatureDetector::FastFeatureDetector( int _threshold, bool _nonmaxSuppression ) - : threshold(_threshold), nonmaxSuppression(_nonmaxSuppression) -{} - -FastFeatureDetector2::FastFeatureDetector2( int _threshold, bool _nonmaxSuppression ) - : FastFeatureDetector(_threshold, _nonmaxSuppression), type(FastFeatureDetector::TYPE_9_16) -{} - -FastFeatureDetector2::FastFeatureDetector2( int _threshold, bool _nonmaxSuppression, int _type ) - : FastFeatureDetector(_threshold, _nonmaxSuppression), type((short)_type) -{} - -void FastFeatureDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - Mat grayImage = image; - if( image.type() != CV_8U ) cvtColor( image, grayImage, CV_BGR2GRAY ); - FAST( grayImage, keypoints, threshold, nonmaxSuppression ); - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - -void FastFeatureDetector2::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - Mat grayImage = image; - if( image.type() != CV_8U ) cvtColor( image, grayImage, CV_BGR2GRAY ); - FASTX( grayImage, keypoints, threshold, nonmaxSuppression, type ); - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - -} diff --git a/modules/features2d/src/fast_score.cpp b/modules/features2d/src/fast_score.cpp deleted file mode 100644 index de697b7..0000000 --- a/modules/features2d/src/fast_score.cpp +++ /dev/null @@ -1,359 +0,0 @@ -/* This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten. - Below is the original copyright and the references */ - -/* -Copyright (c) 2006, 2008 Edward Rosten -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - *Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - *Redistributions in binary form must 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 University of Cambridge 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 OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -The references are: - * Machine learning for high-speed corner detection, - E. Rosten and T. Drummond, ECCV 2006 - * Faster and better: A machine learning approach to corner detection - E. Rosten, R. Porter and T. Drummond, PAMI, 2009 -*/ - -#include "fast_score.hpp" - -#define VERIFY_CORNERS 0 - -namespace cv { - -void makeOffsets(int pixel[25], int rowStride, int patternSize) -{ - static const int offsets16[][2] = - { - {0, 3}, { 1, 3}, { 2, 2}, { 3, 1}, { 3, 0}, { 3, -1}, { 2, -2}, { 1, -3}, - {0, -3}, {-1, -3}, {-2, -2}, {-3, -1}, {-3, 0}, {-3, 1}, {-2, 2}, {-1, 3} - }; - - static const int offsets12[][2] = - { - {0, 2}, { 1, 2}, { 2, 1}, { 2, 0}, { 2, -1}, { 1, -2}, - {0, -2}, {-1, -2}, {-2, -1}, {-2, 0}, {-2, 1}, {-1, 2} - }; - - static const int offsets8[][2] = - { - {0, 1}, { 1, 1}, { 1, 0}, { 1, -1}, - {0, -1}, {-1, -1}, {-1, 0}, {-1, 1} - }; - - const int (*offsets)[2] = patternSize == 16 ? offsets16 : - patternSize == 12 ? offsets12 : - patternSize == 8 ? offsets8 : 0; - - CV_Assert(pixel && offsets); - - int k = 0; - for( ; k < patternSize; k++ ) - pixel[k] = offsets[k][0] + offsets[k][1] * rowStride; - for( ; k < 25; k++ ) - pixel[k] = pixel[k - patternSize]; -} - -#if VERIFY_CORNERS -static void testCorner(const uchar* ptr, const int pixel[], int K, int N, int threshold) { - // check that with the computed "threshold" the pixel is still a corner - // and that with the increased-by-1 "threshold" the pixel is not a corner anymore - for( int delta = 0; delta <= 1; delta++ ) - { - int v0 = std::min(ptr[0] + threshold + delta, 255); - int v1 = std::max(ptr[0] - threshold - delta, 0); - int c0 = 0, c1 = 0; - - for( int k = 0; k < N; k++ ) - { - int x = ptr[pixel[k]]; - if(x > v0) - { - if( ++c0 > K ) - break; - c1 = 0; - } - else if( x < v1 ) - { - if( ++c1 > K ) - break; - c0 = 0; - } - else - { - c0 = c1 = 0; - } - } - CV_Assert( (delta == 0 && std::max(c0, c1) > K) || - (delta == 1 && std::max(c0, c1) <= K) ); - } -} -#endif - -template<> -int cornerScore<16>(const uchar* ptr, const int pixel[], int threshold) -{ - const int K = 8, N = K*3 + 1; - int k, v = ptr[0]; - short d[N]; - for( k = 0; k < N; k++ ) - d[k] = (short)(v - ptr[pixel[k]]); - -#if CV_SSE2 - __m128i q0 = _mm_set1_epi16(-1000), q1 = _mm_set1_epi16(1000); - for( k = 0; k < 16; k += 8 ) - { - __m128i v0 = _mm_loadu_si128((__m128i*)(d+k+1)); - __m128i v1 = _mm_loadu_si128((__m128i*)(d+k+2)); - __m128i a = _mm_min_epi16(v0, v1); - __m128i b = _mm_max_epi16(v0, v1); - v0 = _mm_loadu_si128((__m128i*)(d+k+3)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+4)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+5)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+6)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+7)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+8)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k)); - q0 = _mm_max_epi16(q0, _mm_min_epi16(a, v0)); - q1 = _mm_min_epi16(q1, _mm_max_epi16(b, v0)); - v0 = _mm_loadu_si128((__m128i*)(d+k+9)); - q0 = _mm_max_epi16(q0, _mm_min_epi16(a, v0)); - q1 = _mm_min_epi16(q1, _mm_max_epi16(b, v0)); - } - q0 = _mm_max_epi16(q0, _mm_sub_epi16(_mm_setzero_si128(), q1)); - q0 = _mm_max_epi16(q0, _mm_unpackhi_epi64(q0, q0)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 4)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 2)); - threshold = (short)_mm_cvtsi128_si32(q0) - 1; -#else - int a0 = threshold; - for( k = 0; k < 16; k += 2 ) - { - int a = std::min((int)d[k+1], (int)d[k+2]); - a = std::min(a, (int)d[k+3]); - if( a <= a0 ) - continue; - a = std::min(a, (int)d[k+4]); - a = std::min(a, (int)d[k+5]); - a = std::min(a, (int)d[k+6]); - a = std::min(a, (int)d[k+7]); - a = std::min(a, (int)d[k+8]); - a0 = std::max(a0, std::min(a, (int)d[k])); - a0 = std::max(a0, std::min(a, (int)d[k+9])); - } - - int b0 = -a0; - for( k = 0; k < 16; k += 2 ) - { - int b = std::max((int)d[k+1], (int)d[k+2]); - b = std::max(b, (int)d[k+3]); - b = std::max(b, (int)d[k+4]); - b = std::max(b, (int)d[k+5]); - if( b >= b0 ) - continue; - b = std::max(b, (int)d[k+6]); - b = std::max(b, (int)d[k+7]); - b = std::max(b, (int)d[k+8]); - - b0 = std::min(b0, std::max(b, (int)d[k])); - b0 = std::min(b0, std::max(b, (int)d[k+9])); - } - - threshold = -b0-1; -#endif - -#if VERIFY_CORNERS - testCorner(ptr, pixel, K, N, threshold); -#endif - return threshold; -} - -template<> -int cornerScore<12>(const uchar* ptr, const int pixel[], int threshold) -{ - const int K = 6, N = K*3 + 1; - int k, v = ptr[0]; - short d[N + 4]; - for( k = 0; k < N; k++ ) - d[k] = (short)(v - ptr[pixel[k]]); -#if CV_SSE2 - for( k = 0; k < 4; k++ ) - d[N+k] = d[k]; -#endif - -#if CV_SSE2 - __m128i q0 = _mm_set1_epi16(-1000), q1 = _mm_set1_epi16(1000); - for( k = 0; k < 16; k += 8 ) - { - __m128i v0 = _mm_loadu_si128((__m128i*)(d+k+1)); - __m128i v1 = _mm_loadu_si128((__m128i*)(d+k+2)); - __m128i a = _mm_min_epi16(v0, v1); - __m128i b = _mm_max_epi16(v0, v1); - v0 = _mm_loadu_si128((__m128i*)(d+k+3)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+4)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+5)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k+6)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+k)); - q0 = _mm_max_epi16(q0, _mm_min_epi16(a, v0)); - q1 = _mm_min_epi16(q1, _mm_max_epi16(b, v0)); - v0 = _mm_loadu_si128((__m128i*)(d+k+7)); - q0 = _mm_max_epi16(q0, _mm_min_epi16(a, v0)); - q1 = _mm_min_epi16(q1, _mm_max_epi16(b, v0)); - } - q0 = _mm_max_epi16(q0, _mm_sub_epi16(_mm_setzero_si128(), q1)); - q0 = _mm_max_epi16(q0, _mm_unpackhi_epi64(q0, q0)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 4)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 2)); - threshold = (short)_mm_cvtsi128_si32(q0) - 1; -#else - int a0 = threshold; - for( k = 0; k < 12; k += 2 ) - { - int a = std::min((int)d[k+1], (int)d[k+2]); - if( a <= a0 ) - continue; - a = std::min(a, (int)d[k+3]); - a = std::min(a, (int)d[k+4]); - a = std::min(a, (int)d[k+5]); - a = std::min(a, (int)d[k+6]); - a0 = std::max(a0, std::min(a, (int)d[k])); - a0 = std::max(a0, std::min(a, (int)d[k+7])); - } - - int b0 = -a0; - for( k = 0; k < 12; k += 2 ) - { - int b = std::max((int)d[k+1], (int)d[k+2]); - b = std::max(b, (int)d[k+3]); - b = std::max(b, (int)d[k+4]); - if( b >= b0 ) - continue; - b = std::max(b, (int)d[k+5]); - b = std::max(b, (int)d[k+6]); - - b0 = std::min(b0, std::max(b, (int)d[k])); - b0 = std::min(b0, std::max(b, (int)d[k+7])); - } - - threshold = -b0-1; -#endif - -#if VERIFY_CORNERS - testCorner(ptr, pixel, K, N, threshold); -#endif - return threshold; -} - -template<> -int cornerScore<8>(const uchar* ptr, const int pixel[], int threshold) -{ - const int K = 4, N = K*3 + 1; - int k, v = ptr[0]; - short d[N]; - for( k = 0; k < N; k++ ) - d[k] = (short)(v - ptr[pixel[k]]); - -#if CV_SSE2 - __m128i v0 = _mm_loadu_si128((__m128i*)(d+1)); - __m128i v1 = _mm_loadu_si128((__m128i*)(d+2)); - __m128i a = _mm_min_epi16(v0, v1); - __m128i b = _mm_max_epi16(v0, v1); - v0 = _mm_loadu_si128((__m128i*)(d+3)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+4)); - a = _mm_min_epi16(a, v0); - b = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d)); - __m128i q0 = _mm_min_epi16(a, v0); - __m128i q1 = _mm_max_epi16(b, v0); - v0 = _mm_loadu_si128((__m128i*)(d+5)); - q0 = _mm_max_epi16(q0, _mm_min_epi16(a, v0)); - q1 = _mm_min_epi16(q1, _mm_max_epi16(b, v0)); - q0 = _mm_max_epi16(q0, _mm_sub_epi16(_mm_setzero_si128(), q1)); - q0 = _mm_max_epi16(q0, _mm_unpackhi_epi64(q0, q0)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 4)); - q0 = _mm_max_epi16(q0, _mm_srli_si128(q0, 2)); - threshold = (short)_mm_cvtsi128_si32(q0) - 1; -#else - int a0 = threshold; - for( k = 0; k < 8; k += 2 ) - { - int a = std::min((int)d[k+1], (int)d[k+2]); - if( a <= a0 ) - continue; - a = std::min(a, (int)d[k+3]); - a = std::min(a, (int)d[k+4]); - a0 = std::max(a0, std::min(a, (int)d[k])); - a0 = std::max(a0, std::min(a, (int)d[k+5])); - } - - int b0 = -a0; - for( k = 0; k < 8; k += 2 ) - { - int b = std::max((int)d[k+1], (int)d[k+2]); - b = std::max(b, (int)d[k+3]); - if( b >= b0 ) - continue; - b = std::max(b, (int)d[k+4]); - - b0 = std::min(b0, std::max(b, (int)d[k])); - b0 = std::min(b0, std::max(b, (int)d[k+5])); - } - - threshold = -b0-1; -#endif - -#if VERIFY_CORNERS - testCorner(ptr, pixel, K, N, threshold); -#endif - return threshold; -} - -} // namespace cv diff --git a/modules/features2d/src/fast_score.hpp b/modules/features2d/src/fast_score.hpp deleted file mode 100644 index f009f50..0000000 --- a/modules/features2d/src/fast_score.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/* This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten. - Below is the original copyright and the references */ - -/* -Copyright (c) 2006, 2008 Edward Rosten -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - *Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - *Redistributions in binary form must 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 University of Cambridge 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 OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -The references are: - * Machine learning for high-speed corner detection, - E. Rosten and T. Drummond, ECCV 2006 - * Faster and better: A machine learning approach to corner detection - E. Rosten, R. Porter and T. Drummond, PAMI, 2009 -*/ - -#ifndef __OPENCV_FEATURES_2D_FAST_HPP__ -#define __OPENCV_FEATURES_2D_FAST_HPP__ - -#ifdef __cplusplus - -#include "precomp.hpp" - -namespace cv -{ - -void makeOffsets(int pixel[25], int row_stride, int patternSize); - -template -int cornerScore(const uchar* ptr, const int pixel[], int threshold); - -class FastFeatureDetector2 : public FastFeatureDetector -{ -public: - CV_WRAP FastFeatureDetector2( int threshold=10, bool nonmaxSuppression=true); - CV_WRAP FastFeatureDetector2( int threshold, bool nonmaxSuppression, int type); - AlgorithmInfo* info() const; - -protected: - virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; - - short type; -}; - -} - -#endif -#endif diff --git a/modules/features2d/src/features2d_init.cpp b/modules/features2d/src/features2d_init.cpp deleted file mode 100644 index e12310a..0000000 --- a/modules/features2d/src/features2d_init.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "fast_score.hpp" - -using namespace cv; - -Ptr Feature2D::create( const string& feature2DType ) -{ - return Algorithm::create("Feature2D." + feature2DType); -} - -/////////////////////// AlgorithmInfo for various detector & descriptors //////////////////////////// - -/* NOTE!!! - All the AlgorithmInfo-related stuff should be in the same file as initModule_features2d(). - Otherwise, linker may throw away some seemingly unused stuff. -*/ - -CV_INIT_ALGORITHM(BRISK, "Feature2D.BRISK", - obj.info()->addParam(obj, "thres", obj.threshold); - obj.info()->addParam(obj, "octaves", obj.octaves)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(BriefDescriptorExtractor, "Feature2D.BRIEF", - obj.info()->addParam(obj, "bytes", obj.bytes_)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(FastFeatureDetector, "Feature2D.FAST", - obj.info()->addParam(obj, "threshold", obj.threshold); - obj.info()->addParam(obj, "nonmaxSuppression", obj.nonmaxSuppression)) - -CV_INIT_ALGORITHM(FastFeatureDetector2, "Feature2D.FASTX", - obj.info()->addParam(obj, "threshold", obj.threshold); - obj.info()->addParam(obj, "nonmaxSuppression", obj.nonmaxSuppression); - obj.info()->addParam(obj, "type", obj.type)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(StarDetector, "Feature2D.STAR", - obj.info()->addParam(obj, "maxSize", obj.maxSize); - obj.info()->addParam(obj, "responseThreshold", obj.responseThreshold); - obj.info()->addParam(obj, "lineThresholdProjected", obj.lineThresholdProjected); - obj.info()->addParam(obj, "lineThresholdBinarized", obj.lineThresholdBinarized); - obj.info()->addParam(obj, "suppressNonmaxSize", obj.suppressNonmaxSize)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(MSER, "Feature2D.MSER", - obj.info()->addParam(obj, "delta", obj.delta); - obj.info()->addParam(obj, "minArea", obj.minArea); - obj.info()->addParam(obj, "maxArea", obj.maxArea); - obj.info()->addParam(obj, "maxVariation", obj.maxVariation); - obj.info()->addParam(obj, "minDiversity", obj.minDiversity); - obj.info()->addParam(obj, "maxEvolution", obj.maxEvolution); - obj.info()->addParam(obj, "areaThreshold", obj.areaThreshold); - obj.info()->addParam(obj, "minMargin", obj.minMargin); - obj.info()->addParam(obj, "edgeBlurSize", obj.edgeBlurSize)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(ORB, "Feature2D.ORB", - obj.info()->addParam(obj, "nFeatures", obj.nfeatures); - obj.info()->addParam(obj, "scaleFactor", obj.scaleFactor); - obj.info()->addParam(obj, "nLevels", obj.nlevels); - obj.info()->addParam(obj, "firstLevel", obj.firstLevel); - obj.info()->addParam(obj, "edgeThreshold", obj.edgeThreshold); - obj.info()->addParam(obj, "patchSize", obj.patchSize); - obj.info()->addParam(obj, "WTA_K", obj.WTA_K); - obj.info()->addParam(obj, "scoreType", obj.scoreType)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(FREAK, "Feature2D.FREAK", - obj.info()->addParam(obj, "orientationNormalized", obj.orientationNormalized); - obj.info()->addParam(obj, "scaleNormalized", obj.scaleNormalized); - obj.info()->addParam(obj, "patternScale", obj.patternScale); - obj.info()->addParam(obj, "nbOctave", obj.nOctaves)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(GFTTDetector, "Feature2D.GFTT", - obj.info()->addParam(obj, "nfeatures", obj.nfeatures); - obj.info()->addParam(obj, "qualityLevel", obj.qualityLevel); - obj.info()->addParam(obj, "minDistance", obj.minDistance); - obj.info()->addParam(obj, "useHarrisDetector", obj.useHarrisDetector); - obj.info()->addParam(obj, "k", obj.k)) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(SimpleBlobDetector, "Feature2D.SimpleBlob", - obj.info()->addParam(obj, "thresholdStep", obj.params.thresholdStep); - obj.info()->addParam(obj, "minThreshold", obj.params.minThreshold); - obj.info()->addParam(obj, "maxThreshold", obj.params.maxThreshold); - obj.info()->addParam_(obj, "minRepeatability", (sizeof(size_t) == sizeof(uint64))?Param::UINT64 : Param::UNSIGNED_INT, &obj.params.minRepeatability, false, 0, 0); - obj.info()->addParam(obj, "minDistBetweenBlobs", obj.params.minDistBetweenBlobs); - obj.info()->addParam(obj, "filterByColor", obj.params.filterByColor); - obj.info()->addParam(obj, "blobColor", obj.params.blobColor); - obj.info()->addParam(obj, "filterByArea", obj.params.filterByArea); - obj.info()->addParam(obj, "maxArea", obj.params.maxArea); - obj.info()->addParam(obj, "filterByCircularity", obj.params.filterByCircularity); - obj.info()->addParam(obj, "maxCircularity", obj.params.maxCircularity); - obj.info()->addParam(obj, "filterByInertia", obj.params.filterByInertia); - obj.info()->addParam(obj, "maxInertiaRatio", obj.params.maxInertiaRatio); - obj.info()->addParam(obj, "filterByConvexity", obj.params.filterByConvexity); - obj.info()->addParam(obj, "maxConvexity", obj.params.maxConvexity); - ) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -class CV_EXPORTS HarrisDetector : public GFTTDetector -{ -public: - HarrisDetector( int maxCorners=1000, double qualityLevel=0.01, double minDistance=1, - int blockSize=3, bool useHarrisDetector=true, double k=0.04 ); - AlgorithmInfo* info() const; -}; - -inline HarrisDetector::HarrisDetector( int _maxCorners, double _qualityLevel, double _minDistance, - int _blockSize, bool _useHarrisDetector, double _k ) - : GFTTDetector( _maxCorners, _qualityLevel, _minDistance, _blockSize, _useHarrisDetector, _k ) {} - -CV_INIT_ALGORITHM(HarrisDetector, "Feature2D.HARRIS", - obj.info()->addParam(obj, "nfeatures", obj.nfeatures); - obj.info()->addParam(obj, "qualityLevel", obj.qualityLevel); - obj.info()->addParam(obj, "minDistance", obj.minDistance); - obj.info()->addParam(obj, "useHarrisDetector", obj.useHarrisDetector); - obj.info()->addParam(obj, "k", obj.k)) - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(DenseFeatureDetector, "Feature2D.Dense", - obj.info()->addParam(obj, "initFeatureScale", obj.initFeatureScale); - obj.info()->addParam(obj, "featureScaleLevels", obj.featureScaleLevels); - obj.info()->addParam(obj, "featureScaleMul", obj.featureScaleMul); - obj.info()->addParam(obj, "initXyStep", obj.initXyStep); - obj.info()->addParam(obj, "initImgBound", obj.initImgBound); - obj.info()->addParam(obj, "varyXyStepWithScale", obj.varyXyStepWithScale); - obj.info()->addParam(obj, "varyImgBoundWithScale", obj.varyImgBoundWithScale)) - -CV_INIT_ALGORITHM(GridAdaptedFeatureDetector, "Feature2D.Grid", - obj.info()->addParam(obj, "detector", obj.detector, false, 0, 0); // Extra params added to avoid VS2013 fatal error in opencv2/core.hpp (decl. of addParam) - obj.info()->addParam(obj, "maxTotalKeypoints", obj.maxTotalKeypoints); - obj.info()->addParam(obj, "gridRows", obj.gridRows); - obj.info()->addParam(obj, "gridCols", obj.gridCols)) - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// - -CV_INIT_ALGORITHM(BFMatcher, "DescriptorMatcher.BFMatcher", - obj.info()->addParam(obj, "normType", obj.normType); - obj.info()->addParam(obj, "crossCheck", obj.crossCheck)) - -CV_INIT_ALGORITHM(FlannBasedMatcher, "DescriptorMatcher.FlannBasedMatcher",) - -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - -bool cv::initModule_features2d(void) -{ - bool all = true; - all &= !BriefDescriptorExtractor_info_auto.name().empty(); - all &= !BRISK_info_auto.name().empty(); - all &= !FastFeatureDetector_info_auto.name().empty(); - all &= !FastFeatureDetector2_info_auto.name().empty(); - all &= !StarDetector_info_auto.name().empty(); - all &= !MSER_info_auto.name().empty(); - all &= !FREAK_info_auto.name().empty(); - all &= !ORB_info_auto.name().empty(); - all &= !GFTTDetector_info_auto.name().empty(); - all &= !HarrisDetector_info_auto.name().empty(); - all &= !DenseFeatureDetector_info_auto.name().empty(); - all &= !GridAdaptedFeatureDetector_info_auto.name().empty(); - all &= !BFMatcher_info_auto.name().empty(); - all &= !FlannBasedMatcher_info_auto.name().empty(); - - return all; -} diff --git a/modules/features2d/src/freak.cpp b/modules/features2d/src/freak.cpp deleted file mode 100644 index 8cb1b4d..0000000 --- a/modules/features2d/src/freak.cpp +++ /dev/null @@ -1,679 +0,0 @@ -// freak.cpp -// -// Copyright (C) 2011-2012 Signal processing laboratory 2, EPFL, -// Kirell Benzi (kirell.benzi@epfl.ch), -// Raphael Ortiz (raphael.ortiz@a3.epfl.ch) -// Alexandre Alahi (alexandre.alahi@epfl.ch) -// and Pierre Vandergheynst (pierre.vandergheynst@epfl.ch) -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (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 "precomp.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace cv -{ - -static const double FREAK_SQRT2 = 1.4142135623731; -static const double FREAK_INV_SQRT2 = 1.0 / FREAK_SQRT2; -static const double FREAK_LOG2 = 0.693147180559945; -static const int FREAK_NB_ORIENTATION = 256; -static const int FREAK_NB_POINTS = 43; -static const int FREAK_SMALLEST_KP_SIZE = 7; // smallest size of keypoints -static const int FREAK_NB_SCALES = FREAK::NB_SCALES; -static const int FREAK_NB_PAIRS = FREAK::NB_PAIRS; -static const int FREAK_NB_ORIENPAIRS = FREAK::NB_ORIENPAIRS; - -// default pairs -static const int FREAK_DEF_PAIRS[FREAK::NB_PAIRS] = -{ - 404,431,818,511,181,52,311,874,774,543,719,230,417,205,11, - 560,149,265,39,306,165,857,250,8,61,15,55,717,44,412, - 592,134,761,695,660,782,625,487,549,516,271,665,762,392,178, - 796,773,31,672,845,548,794,677,654,241,831,225,238,849,83, - 691,484,826,707,122,517,583,731,328,339,571,475,394,472,580, - 381,137,93,380,327,619,729,808,218,213,459,141,806,341,95, - 382,568,124,750,193,749,706,843,79,199,317,329,768,198,100, - 466,613,78,562,783,689,136,838,94,142,164,679,219,419,366, - 418,423,77,89,523,259,683,312,555,20,470,684,123,458,453,833, - 72,113,253,108,313,25,153,648,411,607,618,128,305,232,301,84, - 56,264,371,46,407,360,38,99,176,710,114,578,66,372,653, - 129,359,424,159,821,10,323,393,5,340,891,9,790,47,0,175,346, - 236,26,172,147,574,561,32,294,429,724,755,398,787,288,299, - 769,565,767,722,757,224,465,723,498,467,235,127,802,446,233, - 544,482,800,318,16,532,801,441,554,173,60,530,713,469,30, - 212,630,899,170,266,799,88,49,512,399,23,500,107,524,90, - 194,143,135,192,206,345,148,71,119,101,563,870,158,254,214, - 276,464,332,725,188,385,24,476,40,231,620,171,258,67,109, - 844,244,187,388,701,690,50,7,850,479,48,522,22,154,12,659, - 736,655,577,737,830,811,174,21,237,335,353,234,53,270,62, - 182,45,177,245,812,673,355,556,612,166,204,54,248,365,226, - 242,452,700,685,573,14,842,481,468,781,564,416,179,405,35, - 819,608,624,367,98,643,448,2,460,676,440,240,130,146,184, - 185,430,65,807,377,82,121,708,239,310,138,596,730,575,477, - 851,797,247,27,85,586,307,779,326,494,856,324,827,96,748, - 13,397,125,688,702,92,293,716,277,140,112,4,80,855,839,1, - 413,347,584,493,289,696,19,751,379,76,73,115,6,590,183,734, - 197,483,217,344,330,400,186,243,587,220,780,200,793,246,824, - 41,735,579,81,703,322,760,720,139,480,490,91,814,813,163, - 152,488,763,263,425,410,576,120,319,668,150,160,302,491,515, - 260,145,428,97,251,395,272,252,18,106,358,854,485,144,550, - 131,133,378,68,102,104,58,361,275,209,697,582,338,742,589, - 325,408,229,28,304,191,189,110,126,486,211,547,533,70,215, - 670,249,36,581,389,605,331,518,442,822 -}; - -// used to sort pairs during pairs selection -struct PairStat -{ - double mean; - int idx; -}; - -struct sortMean -{ - bool operator()( const PairStat& a, const PairStat& b ) const - { - return a.mean < b.mean; - } -}; - -void FREAK::buildPattern() -{ - if( patternScale == patternScale0 && nOctaves == nOctaves0 && !patternLookup.empty() ) - return; - - nOctaves0 = nOctaves; - patternScale0 = patternScale; - - patternLookup.resize(FREAK_NB_SCALES*FREAK_NB_ORIENTATION*FREAK_NB_POINTS); - double scaleStep = pow(2.0, (double)(nOctaves)/FREAK_NB_SCALES ); // 2 ^ ( (nOctaves-1) /nbScales) - double scalingFactor, alpha, beta, theta = 0; - - // pattern definition, radius normalized to 1.0 (outer point position+sigma=1.0) - const int n[8] = {6,6,6,6,6,6,6,1}; // number of points on each concentric circle (from outer to inner) - const double bigR(2.0/3.0); // bigger radius - const double smallR(2.0/24.0); // smaller radius - const double unitSpace( (bigR-smallR)/21.0 ); // define spaces between concentric circles (from center to outer: 1,2,3,4,5,6) - // radii of the concentric cirles (from outer to inner) - const double radius[8] = {bigR, bigR-6*unitSpace, bigR-11*unitSpace, bigR-15*unitSpace, bigR-18*unitSpace, bigR-20*unitSpace, smallR, 0.0}; - // sigma of pattern points (each group of 6 points on a concentric cirle has the same sigma) - const double sigma[8] = {radius[0]/2.0, radius[1]/2.0, radius[2]/2.0, - radius[3]/2.0, radius[4]/2.0, radius[5]/2.0, - radius[6]/2.0, radius[6]/2.0 - }; - // fill the lookup table - for( int scaleIdx=0; scaleIdx < FREAK_NB_SCALES; ++scaleIdx ) - { - patternSizes[scaleIdx] = 0; // proper initialization - scalingFactor = pow(scaleStep,scaleIdx); //scale of the pattern, scaleStep ^ scaleIdx - - for( int orientationIdx = 0; orientationIdx < FREAK_NB_ORIENTATION; ++orientationIdx ) - { - theta = double(orientationIdx)* 2*CV_PI/double(FREAK_NB_ORIENTATION); // orientation of the pattern - int pointIdx = 0; - - PatternPoint* patternLookupPtr = &patternLookup[0]; - for( size_t i = 0; i < 8; ++i ) - { - for( int k = 0 ; k < n[i]; ++k ) - { - beta = CV_PI/n[i] * (i%2); // orientation offset so that groups of points on each circles are staggered - alpha = double(k)* 2*CV_PI/double(n[i])+beta+theta; - - // add the point to the look-up table - PatternPoint& point = patternLookupPtr[ scaleIdx*FREAK_NB_ORIENTATION*FREAK_NB_POINTS+orientationIdx*FREAK_NB_POINTS+pointIdx ]; - point.x = static_cast(radius[i] * cos(alpha) * scalingFactor * patternScale); - point.y = static_cast(radius[i] * sin(alpha) * scalingFactor * patternScale); - point.sigma = static_cast(sigma[i] * scalingFactor * patternScale); - - // adapt the sizeList if necessary - const int sizeMax = static_cast(ceil((radius[i]+sigma[i])*scalingFactor*patternScale)) + 1; - if( patternSizes[scaleIdx] < sizeMax ) - patternSizes[scaleIdx] = sizeMax; - - ++pointIdx; - } - } - } - } - - // build the list of orientation pairs - orientationPairs[0].i=0; orientationPairs[0].j=3; orientationPairs[1].i=1; orientationPairs[1].j=4; orientationPairs[2].i=2; orientationPairs[2].j=5; - orientationPairs[3].i=0; orientationPairs[3].j=2; orientationPairs[4].i=1; orientationPairs[4].j=3; orientationPairs[5].i=2; orientationPairs[5].j=4; - orientationPairs[6].i=3; orientationPairs[6].j=5; orientationPairs[7].i=4; orientationPairs[7].j=0; orientationPairs[8].i=5; orientationPairs[8].j=1; - - orientationPairs[9].i=6; orientationPairs[9].j=9; orientationPairs[10].i=7; orientationPairs[10].j=10; orientationPairs[11].i=8; orientationPairs[11].j=11; - orientationPairs[12].i=6; orientationPairs[12].j=8; orientationPairs[13].i=7; orientationPairs[13].j=9; orientationPairs[14].i=8; orientationPairs[14].j=10; - orientationPairs[15].i=9; orientationPairs[15].j=11; orientationPairs[16].i=10; orientationPairs[16].j=6; orientationPairs[17].i=11; orientationPairs[17].j=7; - - orientationPairs[18].i=12; orientationPairs[18].j=15; orientationPairs[19].i=13; orientationPairs[19].j=16; orientationPairs[20].i=14; orientationPairs[20].j=17; - orientationPairs[21].i=12; orientationPairs[21].j=14; orientationPairs[22].i=13; orientationPairs[22].j=15; orientationPairs[23].i=14; orientationPairs[23].j=16; - orientationPairs[24].i=15; orientationPairs[24].j=17; orientationPairs[25].i=16; orientationPairs[25].j=12; orientationPairs[26].i=17; orientationPairs[26].j=13; - - orientationPairs[27].i=18; orientationPairs[27].j=21; orientationPairs[28].i=19; orientationPairs[28].j=22; orientationPairs[29].i=20; orientationPairs[29].j=23; - orientationPairs[30].i=18; orientationPairs[30].j=20; orientationPairs[31].i=19; orientationPairs[31].j=21; orientationPairs[32].i=20; orientationPairs[32].j=22; - orientationPairs[33].i=21; orientationPairs[33].j=23; orientationPairs[34].i=22; orientationPairs[34].j=18; orientationPairs[35].i=23; orientationPairs[35].j=19; - - orientationPairs[36].i=24; orientationPairs[36].j=27; orientationPairs[37].i=25; orientationPairs[37].j=28; orientationPairs[38].i=26; orientationPairs[38].j=29; - orientationPairs[39].i=30; orientationPairs[39].j=33; orientationPairs[40].i=31; orientationPairs[40].j=34; orientationPairs[41].i=32; orientationPairs[41].j=35; - orientationPairs[42].i=36; orientationPairs[42].j=39; orientationPairs[43].i=37; orientationPairs[43].j=40; orientationPairs[44].i=38; orientationPairs[44].j=41; - - for( unsigned m = FREAK_NB_ORIENPAIRS; m--; ) - { - const float dx = patternLookup[orientationPairs[m].i].x-patternLookup[orientationPairs[m].j].x; - const float dy = patternLookup[orientationPairs[m].i].y-patternLookup[orientationPairs[m].j].y; - const float norm_sq = (dx*dx+dy*dy); - orientationPairs[m].weight_dx = int((dx/(norm_sq))*4096.0+0.5); - orientationPairs[m].weight_dy = int((dy/(norm_sq))*4096.0+0.5); - } - - // build the list of description pairs - std::vector allPairs; - for( unsigned int i = 1; i < (unsigned int)FREAK_NB_POINTS; ++i ) - { - // (generate all the pairs) - for( unsigned int j = 0; (unsigned int)j < i; ++j ) - { - DescriptionPair pair = {(uchar)i,(uchar)j}; - allPairs.push_back(pair); - } - } - // Input vector provided - if( !selectedPairs0.empty() ) - { - if( (int)selectedPairs0.size() == FREAK_NB_PAIRS ) - { - for( int i = 0; i < FREAK_NB_PAIRS; ++i ) - descriptionPairs[i] = allPairs[selectedPairs0.at(i)]; - } - else - { - CV_Error(CV_StsVecLengthErr, "Input vector does not match the required size"); - } - } - else // default selected pairs - { - for( int i = 0; i < FREAK_NB_PAIRS; ++i ) - descriptionPairs[i] = allPairs[FREAK_DEF_PAIRS[i]]; - } -} - -void FREAK::computeImpl( const Mat& image, std::vector& keypoints, Mat& descriptors ) const -{ - - if( image.empty() ) - return; - if( keypoints.empty() ) - return; - - ((FREAK*)this)->buildPattern(); - - Mat imgIntegral; - integral(image, imgIntegral); - std::vector kpScaleIdx(keypoints.size()); // used to save pattern scale index corresponding to each keypoints - const std::vector::iterator ScaleIdxBegin = kpScaleIdx.begin(); // used in std::vector erase function - const std::vector::iterator kpBegin = keypoints.begin(); // used in std::vector erase function - const float sizeCst = static_cast(FREAK_NB_SCALES/(FREAK_LOG2* nOctaves)); - uchar pointsValue[FREAK_NB_POINTS]; - int thetaIdx = 0; - int direction0; - int direction1; - - // compute the scale index corresponding to the keypoint size and remove keypoints close to the border - if( scaleNormalized ) - { - for( size_t k = keypoints.size(); k--; ) - { - //Is k non-zero? If so, decrement it and continue" - kpScaleIdx[k] = max( (int)(log(keypoints[k].size/FREAK_SMALLEST_KP_SIZE)*sizeCst+0.5) ,0); - if( kpScaleIdx[k] >= FREAK_NB_SCALES ) - kpScaleIdx[k] = FREAK_NB_SCALES-1; - - if( keypoints[k].pt.x <= patternSizes[kpScaleIdx[k]] || //check if the description at this specific position and scale fits inside the image - keypoints[k].pt.y <= patternSizes[kpScaleIdx[k]] || - keypoints[k].pt.x >= image.cols-patternSizes[kpScaleIdx[k]] || - keypoints[k].pt.y >= image.rows-patternSizes[kpScaleIdx[k]] - ) - { - keypoints.erase(kpBegin+k); - kpScaleIdx.erase(ScaleIdxBegin+k); - } - } - } - else - { - const int scIdx = max( (int)(1.0986122886681*sizeCst+0.5) ,0); - for( size_t k = keypoints.size(); k--; ) - { - kpScaleIdx[k] = scIdx; // equivalent to the formule when the scale is normalized with a constant size of keypoints[k].size=3*SMALLEST_KP_SIZE - if( kpScaleIdx[k] >= FREAK_NB_SCALES ) - { - kpScaleIdx[k] = FREAK_NB_SCALES-1; - } - if( keypoints[k].pt.x <= patternSizes[kpScaleIdx[k]] || - keypoints[k].pt.y <= patternSizes[kpScaleIdx[k]] || - keypoints[k].pt.x >= image.cols-patternSizes[kpScaleIdx[k]] || - keypoints[k].pt.y >= image.rows-patternSizes[kpScaleIdx[k]] - ) - { - keypoints.erase(kpBegin+k); - kpScaleIdx.erase(ScaleIdxBegin+k); - } - } - } - - // allocate descriptor memory, estimate orientations, extract descriptors - if( !extAll ) - { - // extract the best comparisons only - descriptors = cv::Mat::zeros((int)keypoints.size(), FREAK_NB_PAIRS/8, CV_8U); -#if CV_SSE2 - __m128i* ptr= (__m128i*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); -#else - std::bitset* ptr = (std::bitset*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); -#endif - for( size_t k = keypoints.size(); k--; ) - { - // estimate orientation (gradient) - if( !orientationNormalized ) - { - thetaIdx = 0; // assign 0° to all keypoints - keypoints[k].angle = 0.0; - } - else - { - // get the points intensity value in the un-rotated pattern - for( int i = FREAK_NB_POINTS; i--; ) - { - pointsValue[i] = meanIntensity(image, imgIntegral, keypoints[k].pt.x,keypoints[k].pt.y, kpScaleIdx[k], 0, i); - } - direction0 = 0; - direction1 = 0; - for( int m = 45; m--; ) - { - //iterate through the orientation pairs - const int delta = (pointsValue[ orientationPairs[m].i ]-pointsValue[ orientationPairs[m].j ]); - direction0 += delta*(orientationPairs[m].weight_dx)/2048; - direction1 += delta*(orientationPairs[m].weight_dy)/2048; - } - - keypoints[k].angle = static_cast(atan2((float)direction1,(float)direction0)*(180.0/CV_PI));//estimate orientation - thetaIdx = int(FREAK_NB_ORIENTATION*keypoints[k].angle*(1/360.0)+0.5); - if( thetaIdx < 0 ) - thetaIdx += FREAK_NB_ORIENTATION; - - if( thetaIdx >= FREAK_NB_ORIENTATION ) - thetaIdx -= FREAK_NB_ORIENTATION; - } - // extract descriptor at the computed orientation - for( int i = FREAK_NB_POINTS; i--; ) - { - pointsValue[i] = meanIntensity(image, imgIntegral, keypoints[k].pt.x,keypoints[k].pt.y, kpScaleIdx[k], thetaIdx, i); - } -#if CV_SSE2 - // note that comparisons order is modified in each block (but first 128 comparisons remain globally the same-->does not affect the 128,384 bits segmanted matching strategy) - int cnt = 0; - for( int n = FREAK_NB_PAIRS/128; n-- ; ) - { - __m128i result128 = _mm_setzero_si128(); - for( int m = 128/16; m--; cnt += 16 ) - { - __m128i operand1 = _mm_set_epi8( - pointsValue[descriptionPairs[cnt+0].i], - pointsValue[descriptionPairs[cnt+1].i], - pointsValue[descriptionPairs[cnt+2].i], - pointsValue[descriptionPairs[cnt+3].i], - pointsValue[descriptionPairs[cnt+4].i], - pointsValue[descriptionPairs[cnt+5].i], - pointsValue[descriptionPairs[cnt+6].i], - pointsValue[descriptionPairs[cnt+7].i], - pointsValue[descriptionPairs[cnt+8].i], - pointsValue[descriptionPairs[cnt+9].i], - pointsValue[descriptionPairs[cnt+10].i], - pointsValue[descriptionPairs[cnt+11].i], - pointsValue[descriptionPairs[cnt+12].i], - pointsValue[descriptionPairs[cnt+13].i], - pointsValue[descriptionPairs[cnt+14].i], - pointsValue[descriptionPairs[cnt+15].i]); - - __m128i operand2 = _mm_set_epi8( - pointsValue[descriptionPairs[cnt+0].j], - pointsValue[descriptionPairs[cnt+1].j], - pointsValue[descriptionPairs[cnt+2].j], - pointsValue[descriptionPairs[cnt+3].j], - pointsValue[descriptionPairs[cnt+4].j], - pointsValue[descriptionPairs[cnt+5].j], - pointsValue[descriptionPairs[cnt+6].j], - pointsValue[descriptionPairs[cnt+7].j], - pointsValue[descriptionPairs[cnt+8].j], - pointsValue[descriptionPairs[cnt+9].j], - pointsValue[descriptionPairs[cnt+10].j], - pointsValue[descriptionPairs[cnt+11].j], - pointsValue[descriptionPairs[cnt+12].j], - pointsValue[descriptionPairs[cnt+13].j], - pointsValue[descriptionPairs[cnt+14].j], - pointsValue[descriptionPairs[cnt+15].j]); - - __m128i workReg = _mm_min_epu8(operand1, operand2); // emulated "not less than" for 8-bit UNSIGNED integers - workReg = _mm_cmpeq_epi8(workReg, operand2); // emulated "not less than" for 8-bit UNSIGNED integers - - workReg = _mm_and_si128(_mm_set1_epi16(short(0x8080 >> m)), workReg); // merge the last 16 bits with the 128bits std::vector until full - result128 = _mm_or_si128(result128, workReg); - } - (*ptr) = result128; - ++ptr; - } - ptr -= 8; -#else - // extracting descriptor preserving the order of SSE version - int cnt = 0; - for( int n = 7; n < FREAK_NB_PAIRS; n += 128) - { - for( int m = 8; m--; ) - { - int nm = n-m; - for(int kk = nm+15*8; kk >= nm; kk-=8, ++cnt) - { - ptr->set(kk, pointsValue[descriptionPairs[cnt].i] >= pointsValue[descriptionPairs[cnt].j]); - } - } - } - --ptr; -#endif - } - } - else // extract all possible comparisons for selection - { - descriptors = cv::Mat::zeros((int)keypoints.size(), 128, CV_8U); - std::bitset<1024>* ptr = (std::bitset<1024>*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); - - for( size_t k = keypoints.size(); k--; ) - { - //estimate orientation (gradient) - if( !orientationNormalized ) - { - thetaIdx = 0;//assign 0° to all keypoints - keypoints[k].angle = 0.0; - } - else - { - //get the points intensity value in the un-rotated pattern - for( int i = FREAK_NB_POINTS;i--; ) - pointsValue[i] = meanIntensity(image, imgIntegral, keypoints[k].pt.x,keypoints[k].pt.y, kpScaleIdx[k], 0, i); - - direction0 = 0; - direction1 = 0; - for( int m = 45; m--; ) - { - //iterate through the orientation pairs - const int delta = (pointsValue[ orientationPairs[m].i ]-pointsValue[ orientationPairs[m].j ]); - direction0 += delta*(orientationPairs[m].weight_dx)/2048; - direction1 += delta*(orientationPairs[m].weight_dy)/2048; - } - - keypoints[k].angle = static_cast(atan2((float)direction1,(float)direction0)*(180.0/CV_PI)); //estimate orientation - thetaIdx = int(FREAK_NB_ORIENTATION*keypoints[k].angle*(1/360.0)+0.5); - - if( thetaIdx < 0 ) - thetaIdx += FREAK_NB_ORIENTATION; - - if( thetaIdx >= FREAK_NB_ORIENTATION ) - thetaIdx -= FREAK_NB_ORIENTATION; - } - // get the points intensity value in the rotated pattern - for( int i = FREAK_NB_POINTS; i--; ) - { - pointsValue[i] = meanIntensity(image, imgIntegral, keypoints[k].pt.x, - keypoints[k].pt.y, kpScaleIdx[k], thetaIdx, i); - } - - int cnt(0); - for( int i = 1; i < FREAK_NB_POINTS; ++i ) - { - //(generate all the pairs) - for( int j = 0; j < i; ++j ) - { - ptr->set(cnt, pointsValue[i] >= pointsValue[j] ); - ++cnt; - } - } - --ptr; - } - } -} - -// simply take average on a square patch, not even gaussian approx -uchar FREAK::meanIntensity( const cv::Mat& image, const cv::Mat& integral, - const float kp_x, - const float kp_y, - const unsigned int scale, - const unsigned int rot, - const unsigned int point) const -{ - // get point position in image - const PatternPoint& FreakPoint = patternLookup[scale*FREAK_NB_ORIENTATION*FREAK_NB_POINTS + rot*FREAK_NB_POINTS + point]; - const float xf = FreakPoint.x+kp_x; - const float yf = FreakPoint.y+kp_y; - const int x = int(xf); - const int y = int(yf); - const int& imagecols = image.cols; - - // get the sigma: - const float radius = FreakPoint.sigma; - - // calculate output: - if( radius < 0.5 ) - { - // interpolation multipliers: - const int r_x = static_cast((xf-x)*1024); - const int r_y = static_cast((yf-y)*1024); - const int r_x_1 = (1024-r_x); - const int r_y_1 = (1024-r_y); - uchar* ptr = image.data+x+y*imagecols; - unsigned int ret_val; - // linear interpolation: - ret_val = (r_x_1*r_y_1*int(*ptr)); - ptr++; - ret_val += (r_x*r_y_1*int(*ptr)); - ptr += imagecols; - ret_val += (r_x*r_y*int(*ptr)); - ptr--; - ret_val += (r_x_1*r_y*int(*ptr)); - //return the rounded mean - ret_val += 2 * 1024 * 1024; - return static_cast(ret_val / (4 * 1024 * 1024)); - } - - // expected case: - - // calculate borders - const int x_left = int(xf-radius+0.5); - const int y_top = int(yf-radius+0.5); - const int x_right = int(xf+radius+1.5);//integral image is 1px wider - const int y_bottom = int(yf+radius+1.5);//integral image is 1px higher - int ret_val; - - ret_val = integral.at(y_bottom,x_right);//bottom right corner - ret_val -= integral.at(y_bottom,x_left); - ret_val += integral.at(y_top,x_left); - ret_val -= integral.at(y_top,x_right); - ret_val = ret_val/( (x_right-x_left)* (y_bottom-y_top) ); - //~ std::cout<(ret_val); -} - -// pair selection algorithm from a set of training images and corresponding keypoints -vector FREAK::selectPairs(const std::vector& images - , std::vector >& keypoints - , const double corrTresh - , bool verbose ) -{ - extAll = true; - // compute descriptors with all pairs - Mat descriptors; - - if( verbose ) - std::cout << "Number of images: " << images.size() << std::endl; - - for( size_t i = 0;i < images.size(); ++i ) - { - Mat descriptorsTmp; - computeImpl(images[i],keypoints[i],descriptorsTmp); - descriptors.push_back(descriptorsTmp); - } - - if( verbose ) - std::cout << "number of keypoints: " << descriptors.rows << std::endl; - - //descriptor in floating point format (each bit is a float) - Mat descriptorsFloat = Mat::zeros(descriptors.rows, 903, CV_32F); - - std::bitset<1024>* ptr = (std::bitset<1024>*) (descriptors.data+(descriptors.rows-1)*descriptors.step[0]); - for( int m = descriptors.rows; m--; ) - { - for( int n = 903; n--; ) - { - if( ptr->test(n) == true ) - descriptorsFloat.at(m,n)=1.0f; - } - --ptr; - } - - std::vector pairStat; - for( int n = 903; n--; ) - { - // the higher the variance, the better --> mean = 0.5 - PairStat tmp = { fabs( mean(descriptorsFloat.col(n))[0]-0.5 ) ,n}; - pairStat.push_back(tmp); - } - - std::sort( pairStat.begin(),pairStat.end(), sortMean() ); - - std::vector bestPairs; - for( int m = 0; m < 903; ++m ) - { - if( verbose ) - std::cout << m << ":" << bestPairs.size() << " " << std::flush; - double corrMax(0); - - for( size_t n = 0; n < bestPairs.size(); ++n ) - { - int idxA = bestPairs[n].idx; - int idxB = pairStat[m].idx; - double corr(0); - // compute correlation between 2 pairs - corr = fabs(compareHist(descriptorsFloat.col(idxA), descriptorsFloat.col(idxB), CV_COMP_CORREL)); - - if( corr > corrMax ) - { - corrMax = corr; - if( corrMax >= corrTresh ) - break; - } - } - - if( corrMax < corrTresh/*0.7*/ ) - bestPairs.push_back(pairStat[m]); - - if( bestPairs.size() >= 512 ) - { - if( verbose ) - std::cout << m << std::endl; - break; - } - } - - std::vector idxBestPairs; - if( (int)bestPairs.size() >= FREAK_NB_PAIRS ) - { - for( int i = 0; i < FREAK_NB_PAIRS; ++i ) - idxBestPairs.push_back(bestPairs[i].idx); - } - else - { - if( verbose ) - std::cout << "correlation threshold too small (restrictive)" << std::endl; - CV_Error(CV_StsError, "correlation threshold too small (restrictive)"); - } - extAll = false; - return idxBestPairs; -} - - -/* -// create an image showing the brisk pattern -void FREAKImpl::drawPattern() -{ - Mat pattern = Mat::zeros(1000, 1000, CV_8UC3) + Scalar(255,255,255); - int sFac = 500 / patternScale; - for( int n = 0; n < kNB_POINTS; ++n ) - { - PatternPoint& pt = patternLookup[n]; - circle(pattern, Point( pt.x*sFac,pt.y*sFac)+Point(500,500), pt.sigma*sFac, Scalar(0,0,255),2); - // rectangle(pattern, Point( (pt.x-pt.sigma)*sFac,(pt.y-pt.sigma)*sFac)+Point(500,500), Point( (pt.x+pt.sigma)*sFac,(pt.y+pt.sigma)*sFac)+Point(500,500), Scalar(0,0,255),2); - - circle(pattern, Point( pt.x*sFac,pt.y*sFac)+Point(500,500), 1, Scalar(0,0,0),3); - std::ostringstream oss; - oss << n; - putText( pattern, oss.str(), Point( pt.x*sFac,pt.y*sFac)+Point(500,500), FONT_HERSHEY_SIMPLEX,0.5, Scalar(0,0,0), 1); - } - imshow( "FreakDescriptorExtractor pattern", pattern ); - waitKey(0); -} -*/ - -// ------------------------------------------------- -/* FREAK interface implementation */ -FREAK::FREAK( bool _orientationNormalized, bool _scaleNormalized - , float _patternScale, int _nOctaves, const std::vector& _selectedPairs ) - : orientationNormalized(_orientationNormalized), scaleNormalized(_scaleNormalized), - patternScale(_patternScale), nOctaves(_nOctaves), extAll(false), nOctaves0(0), selectedPairs0(_selectedPairs) -{ -} - -FREAK::~FREAK() -{ -} - -int FREAK::descriptorSize() const -{ - return FREAK_NB_PAIRS / 8; // descriptor length in bytes -} - -int FREAK::descriptorType() const -{ - return CV_8U; -} - -} // END NAMESPACE CV diff --git a/modules/features2d/src/generated_16.i b/modules/features2d/src/generated_16.i deleted file mode 100644 index b85bf06..0000000 --- a/modules/features2d/src/generated_16.i +++ /dev/null @@ -1,19 +0,0 @@ -// Code generated with '$ scripts/generate_code.py src/test_pairs.txt 16' -#define SMOOTHED(y,x) smoothedSum(sum, pt, y, x) - desc[0] = (uchar)(((SMOOTHED(-2, -1) < SMOOTHED(7, -1)) << 7) + ((SMOOTHED(-14, -1) < SMOOTHED(-3, 3)) << 6) + ((SMOOTHED(1, -2) < SMOOTHED(11, 2)) << 5) + ((SMOOTHED(1, 6) < SMOOTHED(-10, -7)) << 4) + ((SMOOTHED(13, 2) < SMOOTHED(-1, 0)) << 3) + ((SMOOTHED(-14, 5) < SMOOTHED(5, -3)) << 2) + ((SMOOTHED(-2, 8) < SMOOTHED(2, 4)) << 1) + ((SMOOTHED(-11, 8) < SMOOTHED(-15, 5)) << 0)); - desc[1] = (uchar)(((SMOOTHED(-6, -23) < SMOOTHED(8, -9)) << 7) + ((SMOOTHED(-12, 6) < SMOOTHED(-10, 8)) << 6) + ((SMOOTHED(-3, -1) < SMOOTHED(8, 1)) << 5) + ((SMOOTHED(3, 6) < SMOOTHED(5, 6)) << 4) + ((SMOOTHED(-7, -6) < SMOOTHED(5, -5)) << 3) + ((SMOOTHED(22, -2) < SMOOTHED(-11, -8)) << 2) + ((SMOOTHED(14, 7) < SMOOTHED(8, 5)) << 1) + ((SMOOTHED(-1, 14) < SMOOTHED(-5, -14)) << 0)); - desc[2] = (uchar)(((SMOOTHED(-14, 9) < SMOOTHED(2, 0)) << 7) + ((SMOOTHED(7, -3) < SMOOTHED(22, 6)) << 6) + ((SMOOTHED(-6, 6) < SMOOTHED(-8, -5)) << 5) + ((SMOOTHED(-5, 9) < SMOOTHED(7, -1)) << 4) + ((SMOOTHED(-3, -7) < SMOOTHED(-10, -18)) << 3) + ((SMOOTHED(4, -5) < SMOOTHED(0, 11)) << 2) + ((SMOOTHED(2, 3) < SMOOTHED(9, 10)) << 1) + ((SMOOTHED(-10, 3) < SMOOTHED(4, 9)) << 0)); - desc[3] = (uchar)(((SMOOTHED(0, 12) < SMOOTHED(-3, 19)) << 7) + ((SMOOTHED(1, 15) < SMOOTHED(-11, -5)) << 6) + ((SMOOTHED(14, -1) < SMOOTHED(7, 8)) << 5) + ((SMOOTHED(7, -23) < SMOOTHED(-5, 5)) << 4) + ((SMOOTHED(0, -6) < SMOOTHED(-10, 17)) << 3) + ((SMOOTHED(13, -4) < SMOOTHED(-3, -4)) << 2) + ((SMOOTHED(-12, 1) < SMOOTHED(-12, 2)) << 1) + ((SMOOTHED(0, 8) < SMOOTHED(3, 22)) << 0)); - desc[4] = (uchar)(((SMOOTHED(-13, 13) < SMOOTHED(3, -1)) << 7) + ((SMOOTHED(-16, 17) < SMOOTHED(6, 10)) << 6) + ((SMOOTHED(7, 15) < SMOOTHED(-5, 0)) << 5) + ((SMOOTHED(2, -12) < SMOOTHED(19, -2)) << 4) + ((SMOOTHED(3, -6) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(8, 3) < SMOOTHED(0, 14)) << 2) + ((SMOOTHED(4, -11) < SMOOTHED(5, 5)) << 1) + ((SMOOTHED(11, -7) < SMOOTHED(7, 1)) << 0)); - desc[5] = (uchar)(((SMOOTHED(6, 12) < SMOOTHED(21, 3)) << 7) + ((SMOOTHED(-3, 2) < SMOOTHED(14, 1)) << 6) + ((SMOOTHED(5, 1) < SMOOTHED(-5, 11)) << 5) + ((SMOOTHED(3, -17) < SMOOTHED(-6, 2)) << 4) + ((SMOOTHED(6, 8) < SMOOTHED(5, -10)) << 3) + ((SMOOTHED(-14, -2) < SMOOTHED(0, 4)) << 2) + ((SMOOTHED(5, -7) < SMOOTHED(-6, 5)) << 1) + ((SMOOTHED(10, 4) < SMOOTHED(4, -7)) << 0)); - desc[6] = (uchar)(((SMOOTHED(22, 0) < SMOOTHED(7, -18)) << 7) + ((SMOOTHED(-1, -3) < SMOOTHED(0, 18)) << 6) + ((SMOOTHED(-4, 22) < SMOOTHED(-5, 3)) << 5) + ((SMOOTHED(1, -7) < SMOOTHED(2, -3)) << 4) + ((SMOOTHED(19, -20) < SMOOTHED(17, -2)) << 3) + ((SMOOTHED(3, -10) < SMOOTHED(-8, 24)) << 2) + ((SMOOTHED(-5, -14) < SMOOTHED(7, 5)) << 1) + ((SMOOTHED(-2, 12) < SMOOTHED(-4, -15)) << 0)); - desc[7] = (uchar)(((SMOOTHED(4, 12) < SMOOTHED(0, -19)) << 7) + ((SMOOTHED(20, 13) < SMOOTHED(3, 5)) << 6) + ((SMOOTHED(-8, -12) < SMOOTHED(5, 0)) << 5) + ((SMOOTHED(-5, 6) < SMOOTHED(-7, -11)) << 4) + ((SMOOTHED(6, -11) < SMOOTHED(-3, -22)) << 3) + ((SMOOTHED(15, 4) < SMOOTHED(10, 1)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(15, -6)) << 1) + ((SMOOTHED(5, 10) < SMOOTHED(0, 24)) << 0)); - desc[8] = (uchar)(((SMOOTHED(3, 6) < SMOOTHED(22, -2)) << 7) + ((SMOOTHED(-13, 14) < SMOOTHED(4, -4)) << 6) + ((SMOOTHED(-13, 8) < SMOOTHED(-18, -22)) << 5) + ((SMOOTHED(-1, -1) < SMOOTHED(-7, 3)) << 4) + ((SMOOTHED(-19, -12) < SMOOTHED(4, 3)) << 3) + ((SMOOTHED(8, 10) < SMOOTHED(13, -2)) << 2) + ((SMOOTHED(-6, -1) < SMOOTHED(-6, -5)) << 1) + ((SMOOTHED(2, -21) < SMOOTHED(-3, 2)) << 0)); - desc[9] = (uchar)(((SMOOTHED(4, -7) < SMOOTHED(0, 16)) << 7) + ((SMOOTHED(-6, -5) < SMOOTHED(-12, -1)) << 6) + ((SMOOTHED(1, -1) < SMOOTHED(9, 18)) << 5) + ((SMOOTHED(-7, 10) < SMOOTHED(-11, 6)) << 4) + ((SMOOTHED(4, 3) < SMOOTHED(19, -7)) << 3) + ((SMOOTHED(-18, 5) < SMOOTHED(-4, 5)) << 2) + ((SMOOTHED(4, 0) < SMOOTHED(-20, 4)) << 1) + ((SMOOTHED(7, -11) < SMOOTHED(18, 12)) << 0)); - desc[10] = (uchar)(((SMOOTHED(-20, 17) < SMOOTHED(-18, 7)) << 7) + ((SMOOTHED(2, 15) < SMOOTHED(19, -11)) << 6) + ((SMOOTHED(-18, 6) < SMOOTHED(-7, 3)) << 5) + ((SMOOTHED(-4, 1) < SMOOTHED(-14, 13)) << 4) + ((SMOOTHED(17, 3) < SMOOTHED(2, -8)) << 3) + ((SMOOTHED(-7, 2) < SMOOTHED(1, 6)) << 2) + ((SMOOTHED(17, -9) < SMOOTHED(-2, 8)) << 1) + ((SMOOTHED(-8, -6) < SMOOTHED(-1, 12)) << 0)); - desc[11] = (uchar)(((SMOOTHED(-2, 4) < SMOOTHED(-1, 6)) << 7) + ((SMOOTHED(-2, 7) < SMOOTHED(6, 8)) << 6) + ((SMOOTHED(-8, -1) < SMOOTHED(-7, -9)) << 5) + ((SMOOTHED(8, -9) < SMOOTHED(15, 0)) << 4) + ((SMOOTHED(0, 22) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(-14, -1) < SMOOTHED(3, -2)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(17, -7)) << 1) + ((SMOOTHED(-8, -2) < SMOOTHED(9, -4)) << 0)); - desc[12] = (uchar)(((SMOOTHED(5, -7) < SMOOTHED(7, 7)) << 7) + ((SMOOTHED(-5, 13) < SMOOTHED(-8, 11)) << 6) + ((SMOOTHED(11, -4) < SMOOTHED(0, 8)) << 5) + ((SMOOTHED(5, -11) < SMOOTHED(-9, -6)) << 4) + ((SMOOTHED(2, -6) < SMOOTHED(3, -20)) << 3) + ((SMOOTHED(-6, 2) < SMOOTHED(6, 10)) << 2) + ((SMOOTHED(-6, -6) < SMOOTHED(-15, 7)) << 1) + ((SMOOTHED(-6, -3) < SMOOTHED(2, 1)) << 0)); - desc[13] = (uchar)(((SMOOTHED(11, 0) < SMOOTHED(-3, 2)) << 7) + ((SMOOTHED(7, -12) < SMOOTHED(14, 5)) << 6) + ((SMOOTHED(0, -7) < SMOOTHED(-1, -1)) << 5) + ((SMOOTHED(-16, 0) < SMOOTHED(6, 8)) << 4) + ((SMOOTHED(22, 11) < SMOOTHED(0, -3)) << 3) + ((SMOOTHED(19, 0) < SMOOTHED(5, -17)) << 2) + ((SMOOTHED(-23, -14) < SMOOTHED(-13, -19)) << 1) + ((SMOOTHED(-8, 10) < SMOOTHED(-11, -2)) << 0)); - desc[14] = (uchar)(((SMOOTHED(-11, 6) < SMOOTHED(-10, 13)) << 7) + ((SMOOTHED(1, -7) < SMOOTHED(14, 0)) << 6) + ((SMOOTHED(-12, 1) < SMOOTHED(-5, -5)) << 5) + ((SMOOTHED(4, 7) < SMOOTHED(8, -1)) << 4) + ((SMOOTHED(-1, -5) < SMOOTHED(15, 2)) << 3) + ((SMOOTHED(-3, -1) < SMOOTHED(7, -10)) << 2) + ((SMOOTHED(3, -6) < SMOOTHED(10, -18)) << 1) + ((SMOOTHED(-7, -13) < SMOOTHED(-13, 10)) << 0)); - desc[15] = (uchar)(((SMOOTHED(1, -1) < SMOOTHED(13, -10)) << 7) + ((SMOOTHED(-19, 14) < SMOOTHED(8, -14)) << 6) + ((SMOOTHED(-4, -13) < SMOOTHED(7, 1)) << 5) + ((SMOOTHED(1, -2) < SMOOTHED(12, -7)) << 4) + ((SMOOTHED(3, -5) < SMOOTHED(1, -5)) << 3) + ((SMOOTHED(-2, -2) < SMOOTHED(8, -10)) << 2) + ((SMOOTHED(2, 14) < SMOOTHED(8, 7)) << 1) + ((SMOOTHED(3, 9) < SMOOTHED(8, 2)) << 0)); -#undef SMOOTHED diff --git a/modules/features2d/src/generated_32.i b/modules/features2d/src/generated_32.i deleted file mode 100644 index 19952d2..0000000 --- a/modules/features2d/src/generated_32.i +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated with '$ scripts/generate_code.py src/test_pairs.txt 32' -#define SMOOTHED(y,x) smoothedSum(sum, pt, y, x) - desc[0] = (uchar)(((SMOOTHED(-2, -1) < SMOOTHED(7, -1)) << 7) + ((SMOOTHED(-14, -1) < SMOOTHED(-3, 3)) << 6) + ((SMOOTHED(1, -2) < SMOOTHED(11, 2)) << 5) + ((SMOOTHED(1, 6) < SMOOTHED(-10, -7)) << 4) + ((SMOOTHED(13, 2) < SMOOTHED(-1, 0)) << 3) + ((SMOOTHED(-14, 5) < SMOOTHED(5, -3)) << 2) + ((SMOOTHED(-2, 8) < SMOOTHED(2, 4)) << 1) + ((SMOOTHED(-11, 8) < SMOOTHED(-15, 5)) << 0)); - desc[1] = (uchar)(((SMOOTHED(-6, -23) < SMOOTHED(8, -9)) << 7) + ((SMOOTHED(-12, 6) < SMOOTHED(-10, 8)) << 6) + ((SMOOTHED(-3, -1) < SMOOTHED(8, 1)) << 5) + ((SMOOTHED(3, 6) < SMOOTHED(5, 6)) << 4) + ((SMOOTHED(-7, -6) < SMOOTHED(5, -5)) << 3) + ((SMOOTHED(22, -2) < SMOOTHED(-11, -8)) << 2) + ((SMOOTHED(14, 7) < SMOOTHED(8, 5)) << 1) + ((SMOOTHED(-1, 14) < SMOOTHED(-5, -14)) << 0)); - desc[2] = (uchar)(((SMOOTHED(-14, 9) < SMOOTHED(2, 0)) << 7) + ((SMOOTHED(7, -3) < SMOOTHED(22, 6)) << 6) + ((SMOOTHED(-6, 6) < SMOOTHED(-8, -5)) << 5) + ((SMOOTHED(-5, 9) < SMOOTHED(7, -1)) << 4) + ((SMOOTHED(-3, -7) < SMOOTHED(-10, -18)) << 3) + ((SMOOTHED(4, -5) < SMOOTHED(0, 11)) << 2) + ((SMOOTHED(2, 3) < SMOOTHED(9, 10)) << 1) + ((SMOOTHED(-10, 3) < SMOOTHED(4, 9)) << 0)); - desc[3] = (uchar)(((SMOOTHED(0, 12) < SMOOTHED(-3, 19)) << 7) + ((SMOOTHED(1, 15) < SMOOTHED(-11, -5)) << 6) + ((SMOOTHED(14, -1) < SMOOTHED(7, 8)) << 5) + ((SMOOTHED(7, -23) < SMOOTHED(-5, 5)) << 4) + ((SMOOTHED(0, -6) < SMOOTHED(-10, 17)) << 3) + ((SMOOTHED(13, -4) < SMOOTHED(-3, -4)) << 2) + ((SMOOTHED(-12, 1) < SMOOTHED(-12, 2)) << 1) + ((SMOOTHED(0, 8) < SMOOTHED(3, 22)) << 0)); - desc[4] = (uchar)(((SMOOTHED(-13, 13) < SMOOTHED(3, -1)) << 7) + ((SMOOTHED(-16, 17) < SMOOTHED(6, 10)) << 6) + ((SMOOTHED(7, 15) < SMOOTHED(-5, 0)) << 5) + ((SMOOTHED(2, -12) < SMOOTHED(19, -2)) << 4) + ((SMOOTHED(3, -6) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(8, 3) < SMOOTHED(0, 14)) << 2) + ((SMOOTHED(4, -11) < SMOOTHED(5, 5)) << 1) + ((SMOOTHED(11, -7) < SMOOTHED(7, 1)) << 0)); - desc[5] = (uchar)(((SMOOTHED(6, 12) < SMOOTHED(21, 3)) << 7) + ((SMOOTHED(-3, 2) < SMOOTHED(14, 1)) << 6) + ((SMOOTHED(5, 1) < SMOOTHED(-5, 11)) << 5) + ((SMOOTHED(3, -17) < SMOOTHED(-6, 2)) << 4) + ((SMOOTHED(6, 8) < SMOOTHED(5, -10)) << 3) + ((SMOOTHED(-14, -2) < SMOOTHED(0, 4)) << 2) + ((SMOOTHED(5, -7) < SMOOTHED(-6, 5)) << 1) + ((SMOOTHED(10, 4) < SMOOTHED(4, -7)) << 0)); - desc[6] = (uchar)(((SMOOTHED(22, 0) < SMOOTHED(7, -18)) << 7) + ((SMOOTHED(-1, -3) < SMOOTHED(0, 18)) << 6) + ((SMOOTHED(-4, 22) < SMOOTHED(-5, 3)) << 5) + ((SMOOTHED(1, -7) < SMOOTHED(2, -3)) << 4) + ((SMOOTHED(19, -20) < SMOOTHED(17, -2)) << 3) + ((SMOOTHED(3, -10) < SMOOTHED(-8, 24)) << 2) + ((SMOOTHED(-5, -14) < SMOOTHED(7, 5)) << 1) + ((SMOOTHED(-2, 12) < SMOOTHED(-4, -15)) << 0)); - desc[7] = (uchar)(((SMOOTHED(4, 12) < SMOOTHED(0, -19)) << 7) + ((SMOOTHED(20, 13) < SMOOTHED(3, 5)) << 6) + ((SMOOTHED(-8, -12) < SMOOTHED(5, 0)) << 5) + ((SMOOTHED(-5, 6) < SMOOTHED(-7, -11)) << 4) + ((SMOOTHED(6, -11) < SMOOTHED(-3, -22)) << 3) + ((SMOOTHED(15, 4) < SMOOTHED(10, 1)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(15, -6)) << 1) + ((SMOOTHED(5, 10) < SMOOTHED(0, 24)) << 0)); - desc[8] = (uchar)(((SMOOTHED(3, 6) < SMOOTHED(22, -2)) << 7) + ((SMOOTHED(-13, 14) < SMOOTHED(4, -4)) << 6) + ((SMOOTHED(-13, 8) < SMOOTHED(-18, -22)) << 5) + ((SMOOTHED(-1, -1) < SMOOTHED(-7, 3)) << 4) + ((SMOOTHED(-19, -12) < SMOOTHED(4, 3)) << 3) + ((SMOOTHED(8, 10) < SMOOTHED(13, -2)) << 2) + ((SMOOTHED(-6, -1) < SMOOTHED(-6, -5)) << 1) + ((SMOOTHED(2, -21) < SMOOTHED(-3, 2)) << 0)); - desc[9] = (uchar)(((SMOOTHED(4, -7) < SMOOTHED(0, 16)) << 7) + ((SMOOTHED(-6, -5) < SMOOTHED(-12, -1)) << 6) + ((SMOOTHED(1, -1) < SMOOTHED(9, 18)) << 5) + ((SMOOTHED(-7, 10) < SMOOTHED(-11, 6)) << 4) + ((SMOOTHED(4, 3) < SMOOTHED(19, -7)) << 3) + ((SMOOTHED(-18, 5) < SMOOTHED(-4, 5)) << 2) + ((SMOOTHED(4, 0) < SMOOTHED(-20, 4)) << 1) + ((SMOOTHED(7, -11) < SMOOTHED(18, 12)) << 0)); - desc[10] = (uchar)(((SMOOTHED(-20, 17) < SMOOTHED(-18, 7)) << 7) + ((SMOOTHED(2, 15) < SMOOTHED(19, -11)) << 6) + ((SMOOTHED(-18, 6) < SMOOTHED(-7, 3)) << 5) + ((SMOOTHED(-4, 1) < SMOOTHED(-14, 13)) << 4) + ((SMOOTHED(17, 3) < SMOOTHED(2, -8)) << 3) + ((SMOOTHED(-7, 2) < SMOOTHED(1, 6)) << 2) + ((SMOOTHED(17, -9) < SMOOTHED(-2, 8)) << 1) + ((SMOOTHED(-8, -6) < SMOOTHED(-1, 12)) << 0)); - desc[11] = (uchar)(((SMOOTHED(-2, 4) < SMOOTHED(-1, 6)) << 7) + ((SMOOTHED(-2, 7) < SMOOTHED(6, 8)) << 6) + ((SMOOTHED(-8, -1) < SMOOTHED(-7, -9)) << 5) + ((SMOOTHED(8, -9) < SMOOTHED(15, 0)) << 4) + ((SMOOTHED(0, 22) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(-14, -1) < SMOOTHED(3, -2)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(17, -7)) << 1) + ((SMOOTHED(-8, -2) < SMOOTHED(9, -4)) << 0)); - desc[12] = (uchar)(((SMOOTHED(5, -7) < SMOOTHED(7, 7)) << 7) + ((SMOOTHED(-5, 13) < SMOOTHED(-8, 11)) << 6) + ((SMOOTHED(11, -4) < SMOOTHED(0, 8)) << 5) + ((SMOOTHED(5, -11) < SMOOTHED(-9, -6)) << 4) + ((SMOOTHED(2, -6) < SMOOTHED(3, -20)) << 3) + ((SMOOTHED(-6, 2) < SMOOTHED(6, 10)) << 2) + ((SMOOTHED(-6, -6) < SMOOTHED(-15, 7)) << 1) + ((SMOOTHED(-6, -3) < SMOOTHED(2, 1)) << 0)); - desc[13] = (uchar)(((SMOOTHED(11, 0) < SMOOTHED(-3, 2)) << 7) + ((SMOOTHED(7, -12) < SMOOTHED(14, 5)) << 6) + ((SMOOTHED(0, -7) < SMOOTHED(-1, -1)) << 5) + ((SMOOTHED(-16, 0) < SMOOTHED(6, 8)) << 4) + ((SMOOTHED(22, 11) < SMOOTHED(0, -3)) << 3) + ((SMOOTHED(19, 0) < SMOOTHED(5, -17)) << 2) + ((SMOOTHED(-23, -14) < SMOOTHED(-13, -19)) << 1) + ((SMOOTHED(-8, 10) < SMOOTHED(-11, -2)) << 0)); - desc[14] = (uchar)(((SMOOTHED(-11, 6) < SMOOTHED(-10, 13)) << 7) + ((SMOOTHED(1, -7) < SMOOTHED(14, 0)) << 6) + ((SMOOTHED(-12, 1) < SMOOTHED(-5, -5)) << 5) + ((SMOOTHED(4, 7) < SMOOTHED(8, -1)) << 4) + ((SMOOTHED(-1, -5) < SMOOTHED(15, 2)) << 3) + ((SMOOTHED(-3, -1) < SMOOTHED(7, -10)) << 2) + ((SMOOTHED(3, -6) < SMOOTHED(10, -18)) << 1) + ((SMOOTHED(-7, -13) < SMOOTHED(-13, 10)) << 0)); - desc[15] = (uchar)(((SMOOTHED(1, -1) < SMOOTHED(13, -10)) << 7) + ((SMOOTHED(-19, 14) < SMOOTHED(8, -14)) << 6) + ((SMOOTHED(-4, -13) < SMOOTHED(7, 1)) << 5) + ((SMOOTHED(1, -2) < SMOOTHED(12, -7)) << 4) + ((SMOOTHED(3, -5) < SMOOTHED(1, -5)) << 3) + ((SMOOTHED(-2, -2) < SMOOTHED(8, -10)) << 2) + ((SMOOTHED(2, 14) < SMOOTHED(8, 7)) << 1) + ((SMOOTHED(3, 9) < SMOOTHED(8, 2)) << 0)); - desc[16] = (uchar)(((SMOOTHED(-9, 1) < SMOOTHED(-18, 0)) << 7) + ((SMOOTHED(4, 0) < SMOOTHED(1, 12)) << 6) + ((SMOOTHED(0, 9) < SMOOTHED(-14, -10)) << 5) + ((SMOOTHED(-13, -9) < SMOOTHED(-2, 6)) << 4) + ((SMOOTHED(1, 5) < SMOOTHED(10, 10)) << 3) + ((SMOOTHED(-3, -6) < SMOOTHED(-16, -5)) << 2) + ((SMOOTHED(11, 6) < SMOOTHED(-5, 0)) << 1) + ((SMOOTHED(-23, 10) < SMOOTHED(1, 2)) << 0)); - desc[17] = (uchar)(((SMOOTHED(13, -5) < SMOOTHED(-3, 9)) << 7) + ((SMOOTHED(-4, -1) < SMOOTHED(-13, -5)) << 6) + ((SMOOTHED(10, 13) < SMOOTHED(-11, 8)) << 5) + ((SMOOTHED(19, 20) < SMOOTHED(-9, 2)) << 4) + ((SMOOTHED(4, -8) < SMOOTHED(0, -9)) << 3) + ((SMOOTHED(-14, 10) < SMOOTHED(15, 19)) << 2) + ((SMOOTHED(-14, -12) < SMOOTHED(-10, -3)) << 1) + ((SMOOTHED(-23, -3) < SMOOTHED(17, -2)) << 0)); - desc[18] = (uchar)(((SMOOTHED(-3, -11) < SMOOTHED(6, -14)) << 7) + ((SMOOTHED(19, -2) < SMOOTHED(-4, 2)) << 6) + ((SMOOTHED(-5, 5) < SMOOTHED(3, -13)) << 5) + ((SMOOTHED(2, -2) < SMOOTHED(-5, 4)) << 4) + ((SMOOTHED(17, 4) < SMOOTHED(17, -11)) << 3) + ((SMOOTHED(-7, -2) < SMOOTHED(1, 23)) << 2) + ((SMOOTHED(8, 13) < SMOOTHED(1, -16)) << 1) + ((SMOOTHED(-13, -5) < SMOOTHED(1, -17)) << 0)); - desc[19] = (uchar)(((SMOOTHED(4, 6) < SMOOTHED(-8, -3)) << 7) + ((SMOOTHED(-5, -9) < SMOOTHED(-2, -10)) << 6) + ((SMOOTHED(-9, 0) < SMOOTHED(-7, -2)) << 5) + ((SMOOTHED(5, 0) < SMOOTHED(5, 2)) << 4) + ((SMOOTHED(-4, -16) < SMOOTHED(6, 3)) << 3) + ((SMOOTHED(2, -15) < SMOOTHED(-2, 12)) << 2) + ((SMOOTHED(4, -1) < SMOOTHED(6, 2)) << 1) + ((SMOOTHED(1, 1) < SMOOTHED(-2, -8)) << 0)); - desc[20] = (uchar)(((SMOOTHED(-2, 12) < SMOOTHED(-5, -2)) << 7) + ((SMOOTHED(-8, 8) < SMOOTHED(-9, 9)) << 6) + ((SMOOTHED(2, -10) < SMOOTHED(3, 1)) << 5) + ((SMOOTHED(-4, 10) < SMOOTHED(-9, 4)) << 4) + ((SMOOTHED(6, 12) < SMOOTHED(2, 5)) << 3) + ((SMOOTHED(-3, -8) < SMOOTHED(0, 5)) << 2) + ((SMOOTHED(-13, 1) < SMOOTHED(-7, 2)) << 1) + ((SMOOTHED(-1, -10) < SMOOTHED(7, -18)) << 0)); - desc[21] = (uchar)(((SMOOTHED(-1, 8) < SMOOTHED(-9, -10)) << 7) + ((SMOOTHED(-23, -1) < SMOOTHED(6, 2)) << 6) + ((SMOOTHED(-5, -3) < SMOOTHED(3, 2)) << 5) + ((SMOOTHED(0, 11) < SMOOTHED(-4, -7)) << 4) + ((SMOOTHED(15, 2) < SMOOTHED(-10, -3)) << 3) + ((SMOOTHED(-20, -8) < SMOOTHED(-13, 3)) << 2) + ((SMOOTHED(-19, -12) < SMOOTHED(5, -11)) << 1) + ((SMOOTHED(-17, -13) < SMOOTHED(-3, 2)) << 0)); - desc[22] = (uchar)(((SMOOTHED(7, 4) < SMOOTHED(-12, 0)) << 7) + ((SMOOTHED(5, -1) < SMOOTHED(-14, -6)) << 6) + ((SMOOTHED(-4, 11) < SMOOTHED(0, -4)) << 5) + ((SMOOTHED(3, 10) < SMOOTHED(7, -3)) << 4) + ((SMOOTHED(13, 21) < SMOOTHED(-11, 6)) << 3) + ((SMOOTHED(-12, 24) < SMOOTHED(-7, -4)) << 2) + ((SMOOTHED(4, 16) < SMOOTHED(3, -14)) << 1) + ((SMOOTHED(-3, 5) < SMOOTHED(-7, -12)) << 0)); - desc[23] = (uchar)(((SMOOTHED(0, -4) < SMOOTHED(7, -5)) << 7) + ((SMOOTHED(-17, -9) < SMOOTHED(13, -7)) << 6) + ((SMOOTHED(22, -6) < SMOOTHED(-11, 5)) << 5) + ((SMOOTHED(2, -8) < SMOOTHED(23, -11)) << 4) + ((SMOOTHED(7, -10) < SMOOTHED(-1, 14)) << 3) + ((SMOOTHED(-3, -10) < SMOOTHED(8, 3)) << 2) + ((SMOOTHED(-13, 1) < SMOOTHED(-6, 0)) << 1) + ((SMOOTHED(-7, -21) < SMOOTHED(6, -14)) << 0)); - desc[24] = (uchar)(((SMOOTHED(18, 19) < SMOOTHED(-4, -6)) << 7) + ((SMOOTHED(10, 7) < SMOOTHED(-1, -4)) << 6) + ((SMOOTHED(-1, 21) < SMOOTHED(1, -5)) << 5) + ((SMOOTHED(-10, 6) < SMOOTHED(-11, -2)) << 4) + ((SMOOTHED(18, -3) < SMOOTHED(-1, 7)) << 3) + ((SMOOTHED(-3, -9) < SMOOTHED(-5, 10)) << 2) + ((SMOOTHED(-13, 14) < SMOOTHED(17, -3)) << 1) + ((SMOOTHED(11, -19) < SMOOTHED(-1, -18)) << 0)); - desc[25] = (uchar)(((SMOOTHED(8, -2) < SMOOTHED(-18, -23)) << 7) + ((SMOOTHED(0, -5) < SMOOTHED(-2, -9)) << 6) + ((SMOOTHED(-4, -11) < SMOOTHED(2, -8)) << 5) + ((SMOOTHED(14, 6) < SMOOTHED(-3, -6)) << 4) + ((SMOOTHED(-3, 0) < SMOOTHED(-15, 0)) << 3) + ((SMOOTHED(-9, 4) < SMOOTHED(-15, -9)) << 2) + ((SMOOTHED(-1, 11) < SMOOTHED(3, 11)) << 1) + ((SMOOTHED(-10, -16) < SMOOTHED(-7, 7)) << 0)); - desc[26] = (uchar)(((SMOOTHED(-2, -10) < SMOOTHED(-10, -2)) << 7) + ((SMOOTHED(-5, -3) < SMOOTHED(5, -23)) << 6) + ((SMOOTHED(13, -8) < SMOOTHED(-15, -11)) << 5) + ((SMOOTHED(-15, 11) < SMOOTHED(6, -6)) << 4) + ((SMOOTHED(-16, -3) < SMOOTHED(-2, 2)) << 3) + ((SMOOTHED(6, 12) < SMOOTHED(-16, 24)) << 2) + ((SMOOTHED(-10, 0) < SMOOTHED(8, 11)) << 1) + ((SMOOTHED(-7, 7) < SMOOTHED(-19, -7)) << 0)); - desc[27] = (uchar)(((SMOOTHED(5, 16) < SMOOTHED(9, -3)) << 7) + ((SMOOTHED(9, 7) < SMOOTHED(-7, -16)) << 6) + ((SMOOTHED(3, 2) < SMOOTHED(-10, 9)) << 5) + ((SMOOTHED(21, 1) < SMOOTHED(8, 7)) << 4) + ((SMOOTHED(7, 0) < SMOOTHED(1, 17)) << 3) + ((SMOOTHED(-8, 12) < SMOOTHED(9, 6)) << 2) + ((SMOOTHED(11, -7) < SMOOTHED(-8, -6)) << 1) + ((SMOOTHED(19, 0) < SMOOTHED(9, 3)) << 0)); - desc[28] = (uchar)(((SMOOTHED(1, -7) < SMOOTHED(-5, -11)) << 7) + ((SMOOTHED(0, 8) < SMOOTHED(-2, 14)) << 6) + ((SMOOTHED(12, -2) < SMOOTHED(-15, -6)) << 5) + ((SMOOTHED(4, 12) < SMOOTHED(0, -21)) << 4) + ((SMOOTHED(17, -4) < SMOOTHED(-6, -7)) << 3) + ((SMOOTHED(-10, -9) < SMOOTHED(-14, -7)) << 2) + ((SMOOTHED(-15, -10) < SMOOTHED(-15, -14)) << 1) + ((SMOOTHED(-7, -5) < SMOOTHED(5, -12)) << 0)); - desc[29] = (uchar)(((SMOOTHED(-4, 0) < SMOOTHED(15, -4)) << 7) + ((SMOOTHED(5, 2) < SMOOTHED(-6, -23)) << 6) + ((SMOOTHED(-4, -21) < SMOOTHED(-6, 4)) << 5) + ((SMOOTHED(-10, 5) < SMOOTHED(-15, 6)) << 4) + ((SMOOTHED(4, -3) < SMOOTHED(-1, 5)) << 3) + ((SMOOTHED(-4, 19) < SMOOTHED(-23, -4)) << 2) + ((SMOOTHED(-4, 17) < SMOOTHED(13, -11)) << 1) + ((SMOOTHED(1, 12) < SMOOTHED(4, -14)) << 0)); - desc[30] = (uchar)(((SMOOTHED(-11, -6) < SMOOTHED(-20, 10)) << 7) + ((SMOOTHED(4, 5) < SMOOTHED(3, 20)) << 6) + ((SMOOTHED(-8, -20) < SMOOTHED(3, 1)) << 5) + ((SMOOTHED(-19, 9) < SMOOTHED(9, -3)) << 4) + ((SMOOTHED(18, 15) < SMOOTHED(11, -4)) << 3) + ((SMOOTHED(12, 16) < SMOOTHED(8, 7)) << 2) + ((SMOOTHED(-14, -8) < SMOOTHED(-3, 9)) << 1) + ((SMOOTHED(-6, 0) < SMOOTHED(2, -4)) << 0)); - desc[31] = (uchar)(((SMOOTHED(1, -10) < SMOOTHED(-1, 2)) << 7) + ((SMOOTHED(8, -7) < SMOOTHED(-6, 18)) << 6) + ((SMOOTHED(9, 12) < SMOOTHED(-7, -23)) << 5) + ((SMOOTHED(8, -6) < SMOOTHED(5, 2)) << 4) + ((SMOOTHED(-9, 6) < SMOOTHED(-12, -7)) << 3) + ((SMOOTHED(-1, -2) < SMOOTHED(-7, 2)) << 2) + ((SMOOTHED(9, 9) < SMOOTHED(7, 15)) << 1) + ((SMOOTHED(6, 2) < SMOOTHED(-6, 6)) << 0)); -#undef SMOOTHED diff --git a/modules/features2d/src/generated_64.i b/modules/features2d/src/generated_64.i deleted file mode 100644 index 2262e2d..0000000 --- a/modules/features2d/src/generated_64.i +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated with '$ scripts/generate_code.py src/test_pairs.txt 64' -#define SMOOTHED(y,x) smoothedSum(sum, pt, y, x) - desc[0] = (uchar)(((SMOOTHED(-2, -1) < SMOOTHED(7, -1)) << 7) + ((SMOOTHED(-14, -1) < SMOOTHED(-3, 3)) << 6) + ((SMOOTHED(1, -2) < SMOOTHED(11, 2)) << 5) + ((SMOOTHED(1, 6) < SMOOTHED(-10, -7)) << 4) + ((SMOOTHED(13, 2) < SMOOTHED(-1, 0)) << 3) + ((SMOOTHED(-14, 5) < SMOOTHED(5, -3)) << 2) + ((SMOOTHED(-2, 8) < SMOOTHED(2, 4)) << 1) + ((SMOOTHED(-11, 8) < SMOOTHED(-15, 5)) << 0)); - desc[1] = (uchar)(((SMOOTHED(-6, -23) < SMOOTHED(8, -9)) << 7) + ((SMOOTHED(-12, 6) < SMOOTHED(-10, 8)) << 6) + ((SMOOTHED(-3, -1) < SMOOTHED(8, 1)) << 5) + ((SMOOTHED(3, 6) < SMOOTHED(5, 6)) << 4) + ((SMOOTHED(-7, -6) < SMOOTHED(5, -5)) << 3) + ((SMOOTHED(22, -2) < SMOOTHED(-11, -8)) << 2) + ((SMOOTHED(14, 7) < SMOOTHED(8, 5)) << 1) + ((SMOOTHED(-1, 14) < SMOOTHED(-5, -14)) << 0)); - desc[2] = (uchar)(((SMOOTHED(-14, 9) < SMOOTHED(2, 0)) << 7) + ((SMOOTHED(7, -3) < SMOOTHED(22, 6)) << 6) + ((SMOOTHED(-6, 6) < SMOOTHED(-8, -5)) << 5) + ((SMOOTHED(-5, 9) < SMOOTHED(7, -1)) << 4) + ((SMOOTHED(-3, -7) < SMOOTHED(-10, -18)) << 3) + ((SMOOTHED(4, -5) < SMOOTHED(0, 11)) << 2) + ((SMOOTHED(2, 3) < SMOOTHED(9, 10)) << 1) + ((SMOOTHED(-10, 3) < SMOOTHED(4, 9)) << 0)); - desc[3] = (uchar)(((SMOOTHED(0, 12) < SMOOTHED(-3, 19)) << 7) + ((SMOOTHED(1, 15) < SMOOTHED(-11, -5)) << 6) + ((SMOOTHED(14, -1) < SMOOTHED(7, 8)) << 5) + ((SMOOTHED(7, -23) < SMOOTHED(-5, 5)) << 4) + ((SMOOTHED(0, -6) < SMOOTHED(-10, 17)) << 3) + ((SMOOTHED(13, -4) < SMOOTHED(-3, -4)) << 2) + ((SMOOTHED(-12, 1) < SMOOTHED(-12, 2)) << 1) + ((SMOOTHED(0, 8) < SMOOTHED(3, 22)) << 0)); - desc[4] = (uchar)(((SMOOTHED(-13, 13) < SMOOTHED(3, -1)) << 7) + ((SMOOTHED(-16, 17) < SMOOTHED(6, 10)) << 6) + ((SMOOTHED(7, 15) < SMOOTHED(-5, 0)) << 5) + ((SMOOTHED(2, -12) < SMOOTHED(19, -2)) << 4) + ((SMOOTHED(3, -6) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(8, 3) < SMOOTHED(0, 14)) << 2) + ((SMOOTHED(4, -11) < SMOOTHED(5, 5)) << 1) + ((SMOOTHED(11, -7) < SMOOTHED(7, 1)) << 0)); - desc[5] = (uchar)(((SMOOTHED(6, 12) < SMOOTHED(21, 3)) << 7) + ((SMOOTHED(-3, 2) < SMOOTHED(14, 1)) << 6) + ((SMOOTHED(5, 1) < SMOOTHED(-5, 11)) << 5) + ((SMOOTHED(3, -17) < SMOOTHED(-6, 2)) << 4) + ((SMOOTHED(6, 8) < SMOOTHED(5, -10)) << 3) + ((SMOOTHED(-14, -2) < SMOOTHED(0, 4)) << 2) + ((SMOOTHED(5, -7) < SMOOTHED(-6, 5)) << 1) + ((SMOOTHED(10, 4) < SMOOTHED(4, -7)) << 0)); - desc[6] = (uchar)(((SMOOTHED(22, 0) < SMOOTHED(7, -18)) << 7) + ((SMOOTHED(-1, -3) < SMOOTHED(0, 18)) << 6) + ((SMOOTHED(-4, 22) < SMOOTHED(-5, 3)) << 5) + ((SMOOTHED(1, -7) < SMOOTHED(2, -3)) << 4) + ((SMOOTHED(19, -20) < SMOOTHED(17, -2)) << 3) + ((SMOOTHED(3, -10) < SMOOTHED(-8, 24)) << 2) + ((SMOOTHED(-5, -14) < SMOOTHED(7, 5)) << 1) + ((SMOOTHED(-2, 12) < SMOOTHED(-4, -15)) << 0)); - desc[7] = (uchar)(((SMOOTHED(4, 12) < SMOOTHED(0, -19)) << 7) + ((SMOOTHED(20, 13) < SMOOTHED(3, 5)) << 6) + ((SMOOTHED(-8, -12) < SMOOTHED(5, 0)) << 5) + ((SMOOTHED(-5, 6) < SMOOTHED(-7, -11)) << 4) + ((SMOOTHED(6, -11) < SMOOTHED(-3, -22)) << 3) + ((SMOOTHED(15, 4) < SMOOTHED(10, 1)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(15, -6)) << 1) + ((SMOOTHED(5, 10) < SMOOTHED(0, 24)) << 0)); - desc[8] = (uchar)(((SMOOTHED(3, 6) < SMOOTHED(22, -2)) << 7) + ((SMOOTHED(-13, 14) < SMOOTHED(4, -4)) << 6) + ((SMOOTHED(-13, 8) < SMOOTHED(-18, -22)) << 5) + ((SMOOTHED(-1, -1) < SMOOTHED(-7, 3)) << 4) + ((SMOOTHED(-19, -12) < SMOOTHED(4, 3)) << 3) + ((SMOOTHED(8, 10) < SMOOTHED(13, -2)) << 2) + ((SMOOTHED(-6, -1) < SMOOTHED(-6, -5)) << 1) + ((SMOOTHED(2, -21) < SMOOTHED(-3, 2)) << 0)); - desc[9] = (uchar)(((SMOOTHED(4, -7) < SMOOTHED(0, 16)) << 7) + ((SMOOTHED(-6, -5) < SMOOTHED(-12, -1)) << 6) + ((SMOOTHED(1, -1) < SMOOTHED(9, 18)) << 5) + ((SMOOTHED(-7, 10) < SMOOTHED(-11, 6)) << 4) + ((SMOOTHED(4, 3) < SMOOTHED(19, -7)) << 3) + ((SMOOTHED(-18, 5) < SMOOTHED(-4, 5)) << 2) + ((SMOOTHED(4, 0) < SMOOTHED(-20, 4)) << 1) + ((SMOOTHED(7, -11) < SMOOTHED(18, 12)) << 0)); - desc[10] = (uchar)(((SMOOTHED(-20, 17) < SMOOTHED(-18, 7)) << 7) + ((SMOOTHED(2, 15) < SMOOTHED(19, -11)) << 6) + ((SMOOTHED(-18, 6) < SMOOTHED(-7, 3)) << 5) + ((SMOOTHED(-4, 1) < SMOOTHED(-14, 13)) << 4) + ((SMOOTHED(17, 3) < SMOOTHED(2, -8)) << 3) + ((SMOOTHED(-7, 2) < SMOOTHED(1, 6)) << 2) + ((SMOOTHED(17, -9) < SMOOTHED(-2, 8)) << 1) + ((SMOOTHED(-8, -6) < SMOOTHED(-1, 12)) << 0)); - desc[11] = (uchar)(((SMOOTHED(-2, 4) < SMOOTHED(-1, 6)) << 7) + ((SMOOTHED(-2, 7) < SMOOTHED(6, 8)) << 6) + ((SMOOTHED(-8, -1) < SMOOTHED(-7, -9)) << 5) + ((SMOOTHED(8, -9) < SMOOTHED(15, 0)) << 4) + ((SMOOTHED(0, 22) < SMOOTHED(-4, -15)) << 3) + ((SMOOTHED(-14, -1) < SMOOTHED(3, -2)) << 2) + ((SMOOTHED(-7, -4) < SMOOTHED(17, -7)) << 1) + ((SMOOTHED(-8, -2) < SMOOTHED(9, -4)) << 0)); - desc[12] = (uchar)(((SMOOTHED(5, -7) < SMOOTHED(7, 7)) << 7) + ((SMOOTHED(-5, 13) < SMOOTHED(-8, 11)) << 6) + ((SMOOTHED(11, -4) < SMOOTHED(0, 8)) << 5) + ((SMOOTHED(5, -11) < SMOOTHED(-9, -6)) << 4) + ((SMOOTHED(2, -6) < SMOOTHED(3, -20)) << 3) + ((SMOOTHED(-6, 2) < SMOOTHED(6, 10)) << 2) + ((SMOOTHED(-6, -6) < SMOOTHED(-15, 7)) << 1) + ((SMOOTHED(-6, -3) < SMOOTHED(2, 1)) << 0)); - desc[13] = (uchar)(((SMOOTHED(11, 0) < SMOOTHED(-3, 2)) << 7) + ((SMOOTHED(7, -12) < SMOOTHED(14, 5)) << 6) + ((SMOOTHED(0, -7) < SMOOTHED(-1, -1)) << 5) + ((SMOOTHED(-16, 0) < SMOOTHED(6, 8)) << 4) + ((SMOOTHED(22, 11) < SMOOTHED(0, -3)) << 3) + ((SMOOTHED(19, 0) < SMOOTHED(5, -17)) << 2) + ((SMOOTHED(-23, -14) < SMOOTHED(-13, -19)) << 1) + ((SMOOTHED(-8, 10) < SMOOTHED(-11, -2)) << 0)); - desc[14] = (uchar)(((SMOOTHED(-11, 6) < SMOOTHED(-10, 13)) << 7) + ((SMOOTHED(1, -7) < SMOOTHED(14, 0)) << 6) + ((SMOOTHED(-12, 1) < SMOOTHED(-5, -5)) << 5) + ((SMOOTHED(4, 7) < SMOOTHED(8, -1)) << 4) + ((SMOOTHED(-1, -5) < SMOOTHED(15, 2)) << 3) + ((SMOOTHED(-3, -1) < SMOOTHED(7, -10)) << 2) + ((SMOOTHED(3, -6) < SMOOTHED(10, -18)) << 1) + ((SMOOTHED(-7, -13) < SMOOTHED(-13, 10)) << 0)); - desc[15] = (uchar)(((SMOOTHED(1, -1) < SMOOTHED(13, -10)) << 7) + ((SMOOTHED(-19, 14) < SMOOTHED(8, -14)) << 6) + ((SMOOTHED(-4, -13) < SMOOTHED(7, 1)) << 5) + ((SMOOTHED(1, -2) < SMOOTHED(12, -7)) << 4) + ((SMOOTHED(3, -5) < SMOOTHED(1, -5)) << 3) + ((SMOOTHED(-2, -2) < SMOOTHED(8, -10)) << 2) + ((SMOOTHED(2, 14) < SMOOTHED(8, 7)) << 1) + ((SMOOTHED(3, 9) < SMOOTHED(8, 2)) << 0)); - desc[16] = (uchar)(((SMOOTHED(-9, 1) < SMOOTHED(-18, 0)) << 7) + ((SMOOTHED(4, 0) < SMOOTHED(1, 12)) << 6) + ((SMOOTHED(0, 9) < SMOOTHED(-14, -10)) << 5) + ((SMOOTHED(-13, -9) < SMOOTHED(-2, 6)) << 4) + ((SMOOTHED(1, 5) < SMOOTHED(10, 10)) << 3) + ((SMOOTHED(-3, -6) < SMOOTHED(-16, -5)) << 2) + ((SMOOTHED(11, 6) < SMOOTHED(-5, 0)) << 1) + ((SMOOTHED(-23, 10) < SMOOTHED(1, 2)) << 0)); - desc[17] = (uchar)(((SMOOTHED(13, -5) < SMOOTHED(-3, 9)) << 7) + ((SMOOTHED(-4, -1) < SMOOTHED(-13, -5)) << 6) + ((SMOOTHED(10, 13) < SMOOTHED(-11, 8)) << 5) + ((SMOOTHED(19, 20) < SMOOTHED(-9, 2)) << 4) + ((SMOOTHED(4, -8) < SMOOTHED(0, -9)) << 3) + ((SMOOTHED(-14, 10) < SMOOTHED(15, 19)) << 2) + ((SMOOTHED(-14, -12) < SMOOTHED(-10, -3)) << 1) + ((SMOOTHED(-23, -3) < SMOOTHED(17, -2)) << 0)); - desc[18] = (uchar)(((SMOOTHED(-3, -11) < SMOOTHED(6, -14)) << 7) + ((SMOOTHED(19, -2) < SMOOTHED(-4, 2)) << 6) + ((SMOOTHED(-5, 5) < SMOOTHED(3, -13)) << 5) + ((SMOOTHED(2, -2) < SMOOTHED(-5, 4)) << 4) + ((SMOOTHED(17, 4) < SMOOTHED(17, -11)) << 3) + ((SMOOTHED(-7, -2) < SMOOTHED(1, 23)) << 2) + ((SMOOTHED(8, 13) < SMOOTHED(1, -16)) << 1) + ((SMOOTHED(-13, -5) < SMOOTHED(1, -17)) << 0)); - desc[19] = (uchar)(((SMOOTHED(4, 6) < SMOOTHED(-8, -3)) << 7) + ((SMOOTHED(-5, -9) < SMOOTHED(-2, -10)) << 6) + ((SMOOTHED(-9, 0) < SMOOTHED(-7, -2)) << 5) + ((SMOOTHED(5, 0) < SMOOTHED(5, 2)) << 4) + ((SMOOTHED(-4, -16) < SMOOTHED(6, 3)) << 3) + ((SMOOTHED(2, -15) < SMOOTHED(-2, 12)) << 2) + ((SMOOTHED(4, -1) < SMOOTHED(6, 2)) << 1) + ((SMOOTHED(1, 1) < SMOOTHED(-2, -8)) << 0)); - desc[20] = (uchar)(((SMOOTHED(-2, 12) < SMOOTHED(-5, -2)) << 7) + ((SMOOTHED(-8, 8) < SMOOTHED(-9, 9)) << 6) + ((SMOOTHED(2, -10) < SMOOTHED(3, 1)) << 5) + ((SMOOTHED(-4, 10) < SMOOTHED(-9, 4)) << 4) + ((SMOOTHED(6, 12) < SMOOTHED(2, 5)) << 3) + ((SMOOTHED(-3, -8) < SMOOTHED(0, 5)) << 2) + ((SMOOTHED(-13, 1) < SMOOTHED(-7, 2)) << 1) + ((SMOOTHED(-1, -10) < SMOOTHED(7, -18)) << 0)); - desc[21] = (uchar)(((SMOOTHED(-1, 8) < SMOOTHED(-9, -10)) << 7) + ((SMOOTHED(-23, -1) < SMOOTHED(6, 2)) << 6) + ((SMOOTHED(-5, -3) < SMOOTHED(3, 2)) << 5) + ((SMOOTHED(0, 11) < SMOOTHED(-4, -7)) << 4) + ((SMOOTHED(15, 2) < SMOOTHED(-10, -3)) << 3) + ((SMOOTHED(-20, -8) < SMOOTHED(-13, 3)) << 2) + ((SMOOTHED(-19, -12) < SMOOTHED(5, -11)) << 1) + ((SMOOTHED(-17, -13) < SMOOTHED(-3, 2)) << 0)); - desc[22] = (uchar)(((SMOOTHED(7, 4) < SMOOTHED(-12, 0)) << 7) + ((SMOOTHED(5, -1) < SMOOTHED(-14, -6)) << 6) + ((SMOOTHED(-4, 11) < SMOOTHED(0, -4)) << 5) + ((SMOOTHED(3, 10) < SMOOTHED(7, -3)) << 4) + ((SMOOTHED(13, 21) < SMOOTHED(-11, 6)) << 3) + ((SMOOTHED(-12, 24) < SMOOTHED(-7, -4)) << 2) + ((SMOOTHED(4, 16) < SMOOTHED(3, -14)) << 1) + ((SMOOTHED(-3, 5) < SMOOTHED(-7, -12)) << 0)); - desc[23] = (uchar)(((SMOOTHED(0, -4) < SMOOTHED(7, -5)) << 7) + ((SMOOTHED(-17, -9) < SMOOTHED(13, -7)) << 6) + ((SMOOTHED(22, -6) < SMOOTHED(-11, 5)) << 5) + ((SMOOTHED(2, -8) < SMOOTHED(23, -11)) << 4) + ((SMOOTHED(7, -10) < SMOOTHED(-1, 14)) << 3) + ((SMOOTHED(-3, -10) < SMOOTHED(8, 3)) << 2) + ((SMOOTHED(-13, 1) < SMOOTHED(-6, 0)) << 1) + ((SMOOTHED(-7, -21) < SMOOTHED(6, -14)) << 0)); - desc[24] = (uchar)(((SMOOTHED(18, 19) < SMOOTHED(-4, -6)) << 7) + ((SMOOTHED(10, 7) < SMOOTHED(-1, -4)) << 6) + ((SMOOTHED(-1, 21) < SMOOTHED(1, -5)) << 5) + ((SMOOTHED(-10, 6) < SMOOTHED(-11, -2)) << 4) + ((SMOOTHED(18, -3) < SMOOTHED(-1, 7)) << 3) + ((SMOOTHED(-3, -9) < SMOOTHED(-5, 10)) << 2) + ((SMOOTHED(-13, 14) < SMOOTHED(17, -3)) << 1) + ((SMOOTHED(11, -19) < SMOOTHED(-1, -18)) << 0)); - desc[25] = (uchar)(((SMOOTHED(8, -2) < SMOOTHED(-18, -23)) << 7) + ((SMOOTHED(0, -5) < SMOOTHED(-2, -9)) << 6) + ((SMOOTHED(-4, -11) < SMOOTHED(2, -8)) << 5) + ((SMOOTHED(14, 6) < SMOOTHED(-3, -6)) << 4) + ((SMOOTHED(-3, 0) < SMOOTHED(-15, 0)) << 3) + ((SMOOTHED(-9, 4) < SMOOTHED(-15, -9)) << 2) + ((SMOOTHED(-1, 11) < SMOOTHED(3, 11)) << 1) + ((SMOOTHED(-10, -16) < SMOOTHED(-7, 7)) << 0)); - desc[26] = (uchar)(((SMOOTHED(-2, -10) < SMOOTHED(-10, -2)) << 7) + ((SMOOTHED(-5, -3) < SMOOTHED(5, -23)) << 6) + ((SMOOTHED(13, -8) < SMOOTHED(-15, -11)) << 5) + ((SMOOTHED(-15, 11) < SMOOTHED(6, -6)) << 4) + ((SMOOTHED(-16, -3) < SMOOTHED(-2, 2)) << 3) + ((SMOOTHED(6, 12) < SMOOTHED(-16, 24)) << 2) + ((SMOOTHED(-10, 0) < SMOOTHED(8, 11)) << 1) + ((SMOOTHED(-7, 7) < SMOOTHED(-19, -7)) << 0)); - desc[27] = (uchar)(((SMOOTHED(5, 16) < SMOOTHED(9, -3)) << 7) + ((SMOOTHED(9, 7) < SMOOTHED(-7, -16)) << 6) + ((SMOOTHED(3, 2) < SMOOTHED(-10, 9)) << 5) + ((SMOOTHED(21, 1) < SMOOTHED(8, 7)) << 4) + ((SMOOTHED(7, 0) < SMOOTHED(1, 17)) << 3) + ((SMOOTHED(-8, 12) < SMOOTHED(9, 6)) << 2) + ((SMOOTHED(11, -7) < SMOOTHED(-8, -6)) << 1) + ((SMOOTHED(19, 0) < SMOOTHED(9, 3)) << 0)); - desc[28] = (uchar)(((SMOOTHED(1, -7) < SMOOTHED(-5, -11)) << 7) + ((SMOOTHED(0, 8) < SMOOTHED(-2, 14)) << 6) + ((SMOOTHED(12, -2) < SMOOTHED(-15, -6)) << 5) + ((SMOOTHED(4, 12) < SMOOTHED(0, -21)) << 4) + ((SMOOTHED(17, -4) < SMOOTHED(-6, -7)) << 3) + ((SMOOTHED(-10, -9) < SMOOTHED(-14, -7)) << 2) + ((SMOOTHED(-15, -10) < SMOOTHED(-15, -14)) << 1) + ((SMOOTHED(-7, -5) < SMOOTHED(5, -12)) << 0)); - desc[29] = (uchar)(((SMOOTHED(-4, 0) < SMOOTHED(15, -4)) << 7) + ((SMOOTHED(5, 2) < SMOOTHED(-6, -23)) << 6) + ((SMOOTHED(-4, -21) < SMOOTHED(-6, 4)) << 5) + ((SMOOTHED(-10, 5) < SMOOTHED(-15, 6)) << 4) + ((SMOOTHED(4, -3) < SMOOTHED(-1, 5)) << 3) + ((SMOOTHED(-4, 19) < SMOOTHED(-23, -4)) << 2) + ((SMOOTHED(-4, 17) < SMOOTHED(13, -11)) << 1) + ((SMOOTHED(1, 12) < SMOOTHED(4, -14)) << 0)); - desc[30] = (uchar)(((SMOOTHED(-11, -6) < SMOOTHED(-20, 10)) << 7) + ((SMOOTHED(4, 5) < SMOOTHED(3, 20)) << 6) + ((SMOOTHED(-8, -20) < SMOOTHED(3, 1)) << 5) + ((SMOOTHED(-19, 9) < SMOOTHED(9, -3)) << 4) + ((SMOOTHED(18, 15) < SMOOTHED(11, -4)) << 3) + ((SMOOTHED(12, 16) < SMOOTHED(8, 7)) << 2) + ((SMOOTHED(-14, -8) < SMOOTHED(-3, 9)) << 1) + ((SMOOTHED(-6, 0) < SMOOTHED(2, -4)) << 0)); - desc[31] = (uchar)(((SMOOTHED(1, -10) < SMOOTHED(-1, 2)) << 7) + ((SMOOTHED(8, -7) < SMOOTHED(-6, 18)) << 6) + ((SMOOTHED(9, 12) < SMOOTHED(-7, -23)) << 5) + ((SMOOTHED(8, -6) < SMOOTHED(5, 2)) << 4) + ((SMOOTHED(-9, 6) < SMOOTHED(-12, -7)) << 3) + ((SMOOTHED(-1, -2) < SMOOTHED(-7, 2)) << 2) + ((SMOOTHED(9, 9) < SMOOTHED(7, 15)) << 1) + ((SMOOTHED(6, 2) < SMOOTHED(-6, 6)) << 0)); - desc[32] = (uchar)(((SMOOTHED(16, 12) < SMOOTHED(0, 19)) << 7) + ((SMOOTHED(4, 3) < SMOOTHED(6, 0)) << 6) + ((SMOOTHED(-2, -1) < SMOOTHED(2, 17)) << 5) + ((SMOOTHED(8, 1) < SMOOTHED(3, 1)) << 4) + ((SMOOTHED(-12, -1) < SMOOTHED(-11, 0)) << 3) + ((SMOOTHED(-11, 2) < SMOOTHED(7, 9)) << 2) + ((SMOOTHED(-1, 3) < SMOOTHED(-19, 4)) << 1) + ((SMOOTHED(-1, -11) < SMOOTHED(-1, 3)) << 0)); - desc[33] = (uchar)(((SMOOTHED(1, -10) < SMOOTHED(-10, -4)) << 7) + ((SMOOTHED(-2, 3) < SMOOTHED(6, 11)) << 6) + ((SMOOTHED(3, 7) < SMOOTHED(-9, -8)) << 5) + ((SMOOTHED(24, -14) < SMOOTHED(-2, -10)) << 4) + ((SMOOTHED(-3, -3) < SMOOTHED(-18, -6)) << 3) + ((SMOOTHED(-13, -10) < SMOOTHED(-7, -1)) << 2) + ((SMOOTHED(2, -7) < SMOOTHED(9, -6)) << 1) + ((SMOOTHED(2, -4) < SMOOTHED(6, -13)) << 0)); - desc[34] = (uchar)(((SMOOTHED(4, -4) < SMOOTHED(-2, 3)) << 7) + ((SMOOTHED(-4, 2) < SMOOTHED(9, 13)) << 6) + ((SMOOTHED(-11, 5) < SMOOTHED(-6, -11)) << 5) + ((SMOOTHED(4, -2) < SMOOTHED(11, -9)) << 4) + ((SMOOTHED(-19, 0) < SMOOTHED(-23, -5)) << 3) + ((SMOOTHED(-5, -7) < SMOOTHED(-3, -6)) << 2) + ((SMOOTHED(-6, -4) < SMOOTHED(12, 14)) << 1) + ((SMOOTHED(12, -11) < SMOOTHED(-8, -16)) << 0)); - desc[35] = (uchar)(((SMOOTHED(-21, 15) < SMOOTHED(-12, 6)) << 7) + ((SMOOTHED(-2, -1) < SMOOTHED(-8, 16)) << 6) + ((SMOOTHED(6, -1) < SMOOTHED(-8, -2)) << 5) + ((SMOOTHED(1, -1) < SMOOTHED(-9, 8)) << 4) + ((SMOOTHED(3, -4) < SMOOTHED(-2, -2)) << 3) + ((SMOOTHED(-7, 0) < SMOOTHED(4, -8)) << 2) + ((SMOOTHED(11, -11) < SMOOTHED(-12, 2)) << 1) + ((SMOOTHED(2, 3) < SMOOTHED(11, 7)) << 0)); - desc[36] = (uchar)(((SMOOTHED(-7, -4) < SMOOTHED(-9, -6)) << 7) + ((SMOOTHED(3, -7) < SMOOTHED(-5, 0)) << 6) + ((SMOOTHED(3, -7) < SMOOTHED(-10, -5)) << 5) + ((SMOOTHED(-3, -1) < SMOOTHED(8, -10)) << 4) + ((SMOOTHED(0, 8) < SMOOTHED(5, 1)) << 3) + ((SMOOTHED(9, 0) < SMOOTHED(1, 16)) << 2) + ((SMOOTHED(8, 4) < SMOOTHED(-11, -3)) << 1) + ((SMOOTHED(-15, 9) < SMOOTHED(8, 17)) << 0)); - desc[37] = (uchar)(((SMOOTHED(0, 2) < SMOOTHED(-9, 17)) << 7) + ((SMOOTHED(-6, -11) < SMOOTHED(-10, -3)) << 6) + ((SMOOTHED(1, 1) < SMOOTHED(15, -8)) << 5) + ((SMOOTHED(-12, -13) < SMOOTHED(-2, 4)) << 4) + ((SMOOTHED(-6, 4) < SMOOTHED(-6, -10)) << 3) + ((SMOOTHED(5, -7) < SMOOTHED(7, -5)) << 2) + ((SMOOTHED(10, 6) < SMOOTHED(8, 9)) << 1) + ((SMOOTHED(-5, 7) < SMOOTHED(-18, -3)) << 0)); - desc[38] = (uchar)(((SMOOTHED(-6, 3) < SMOOTHED(5, 4)) << 7) + ((SMOOTHED(-10, -13) < SMOOTHED(-5, -3)) << 6) + ((SMOOTHED(-11, 2) < SMOOTHED(-16, 0)) << 5) + ((SMOOTHED(7, -21) < SMOOTHED(-5, -13)) << 4) + ((SMOOTHED(-14, -14) < SMOOTHED(-4, -4)) << 3) + ((SMOOTHED(4, 9) < SMOOTHED(7, -3)) << 2) + ((SMOOTHED(4, 11) < SMOOTHED(10, -4)) << 1) + ((SMOOTHED(6, 17) < SMOOTHED(9, 17)) << 0)); - desc[39] = (uchar)(((SMOOTHED(-10, 8) < SMOOTHED(0, -11)) << 7) + ((SMOOTHED(-6, -16) < SMOOTHED(-6, 8)) << 6) + ((SMOOTHED(-13, 5) < SMOOTHED(10, -5)) << 5) + ((SMOOTHED(3, 2) < SMOOTHED(12, 16)) << 4) + ((SMOOTHED(13, -8) < SMOOTHED(0, -6)) << 3) + ((SMOOTHED(10, 0) < SMOOTHED(4, -11)) << 2) + ((SMOOTHED(8, 5) < SMOOTHED(10, -2)) << 1) + ((SMOOTHED(11, -7) < SMOOTHED(-13, 3)) << 0)); - desc[40] = (uchar)(((SMOOTHED(2, 4) < SMOOTHED(-7, -3)) << 7) + ((SMOOTHED(-14, -2) < SMOOTHED(-11, 16)) << 6) + ((SMOOTHED(11, -6) < SMOOTHED(7, 6)) << 5) + ((SMOOTHED(-3, 15) < SMOOTHED(8, -10)) << 4) + ((SMOOTHED(-3, 8) < SMOOTHED(12, -12)) << 3) + ((SMOOTHED(-13, 6) < SMOOTHED(-14, 7)) << 2) + ((SMOOTHED(-11, -5) < SMOOTHED(-8, -6)) << 1) + ((SMOOTHED(7, -6) < SMOOTHED(6, 3)) << 0)); - desc[41] = (uchar)(((SMOOTHED(-4, 10) < SMOOTHED(5, 1)) << 7) + ((SMOOTHED(9, 16) < SMOOTHED(10, 13)) << 6) + ((SMOOTHED(-17, 10) < SMOOTHED(2, 8)) << 5) + ((SMOOTHED(-5, 1) < SMOOTHED(4, -4)) << 4) + ((SMOOTHED(-14, 8) < SMOOTHED(-5, 2)) << 3) + ((SMOOTHED(4, -9) < SMOOTHED(-6, -3)) << 2) + ((SMOOTHED(3, -7) < SMOOTHED(-10, 0)) << 1) + ((SMOOTHED(-2, -8) < SMOOTHED(-10, 4)) << 0)); - desc[42] = (uchar)(((SMOOTHED(-8, 5) < SMOOTHED(-9, 24)) << 7) + ((SMOOTHED(2, -8) < SMOOTHED(8, -9)) << 6) + ((SMOOTHED(-4, 17) < SMOOTHED(-5, 2)) << 5) + ((SMOOTHED(14, 0) < SMOOTHED(-9, 9)) << 4) + ((SMOOTHED(11, 15) < SMOOTHED(-6, 5)) << 3) + ((SMOOTHED(-8, 1) < SMOOTHED(-3, 4)) << 2) + ((SMOOTHED(9, -21) < SMOOTHED(10, 2)) << 1) + ((SMOOTHED(2, -1) < SMOOTHED(4, 11)) << 0)); - desc[43] = (uchar)(((SMOOTHED(24, 3) < SMOOTHED(2, -2)) << 7) + ((SMOOTHED(-8, 17) < SMOOTHED(-14, -10)) << 6) + ((SMOOTHED(6, 5) < SMOOTHED(-13, 7)) << 5) + ((SMOOTHED(11, 10) < SMOOTHED(0, -1)) << 4) + ((SMOOTHED(4, 6) < SMOOTHED(-10, 6)) << 3) + ((SMOOTHED(-12, -2) < SMOOTHED(5, 6)) << 2) + ((SMOOTHED(3, -1) < SMOOTHED(8, -15)) << 1) + ((SMOOTHED(1, -4) < SMOOTHED(-7, 11)) << 0)); - desc[44] = (uchar)(((SMOOTHED(1, 11) < SMOOTHED(5, 0)) << 7) + ((SMOOTHED(6, -12) < SMOOTHED(10, 1)) << 6) + ((SMOOTHED(-3, -2) < SMOOTHED(-1, 4)) << 5) + ((SMOOTHED(-2, -11) < SMOOTHED(-1, 12)) << 4) + ((SMOOTHED(7, -8) < SMOOTHED(-20, -18)) << 3) + ((SMOOTHED(2, 0) < SMOOTHED(-9, 2)) << 2) + ((SMOOTHED(-13, -1) < SMOOTHED(-16, 2)) << 1) + ((SMOOTHED(3, -1) < SMOOTHED(-5, -17)) << 0)); - desc[45] = (uchar)(((SMOOTHED(15, 8) < SMOOTHED(3, -14)) << 7) + ((SMOOTHED(-13, -12) < SMOOTHED(6, 15)) << 6) + ((SMOOTHED(2, -8) < SMOOTHED(2, 6)) << 5) + ((SMOOTHED(6, 22) < SMOOTHED(-3, -23)) << 4) + ((SMOOTHED(-2, -7) < SMOOTHED(-6, 0)) << 3) + ((SMOOTHED(13, -10) < SMOOTHED(-6, 6)) << 2) + ((SMOOTHED(6, 7) < SMOOTHED(-10, 12)) << 1) + ((SMOOTHED(-6, 7) < SMOOTHED(-2, 11)) << 0)); - desc[46] = (uchar)(((SMOOTHED(0, -22) < SMOOTHED(-2, -17)) << 7) + ((SMOOTHED(-4, -1) < SMOOTHED(-11, -14)) << 6) + ((SMOOTHED(-2, -8) < SMOOTHED(7, 12)) << 5) + ((SMOOTHED(12, -5) < SMOOTHED(7, -13)) << 4) + ((SMOOTHED(2, -2) < SMOOTHED(-7, 6)) << 3) + ((SMOOTHED(0, 8) < SMOOTHED(-3, 23)) << 2) + ((SMOOTHED(6, 12) < SMOOTHED(13, -11)) << 1) + ((SMOOTHED(-21, -10) < SMOOTHED(10, 8)) << 0)); - desc[47] = (uchar)(((SMOOTHED(-3, 0) < SMOOTHED(7, 15)) << 7) + ((SMOOTHED(7, -6) < SMOOTHED(-5, -12)) << 6) + ((SMOOTHED(-21, -10) < SMOOTHED(12, -11)) << 5) + ((SMOOTHED(-5, -11) < SMOOTHED(8, -11)) << 4) + ((SMOOTHED(5, 0) < SMOOTHED(-11, -1)) << 3) + ((SMOOTHED(8, -9) < SMOOTHED(7, -1)) << 2) + ((SMOOTHED(11, -23) < SMOOTHED(21, -5)) << 1) + ((SMOOTHED(0, -5) < SMOOTHED(-8, 6)) << 0)); - desc[48] = (uchar)(((SMOOTHED(-6, 8) < SMOOTHED(8, 12)) << 7) + ((SMOOTHED(-7, 5) < SMOOTHED(3, -2)) << 6) + ((SMOOTHED(-5, -20) < SMOOTHED(-12, 9)) << 5) + ((SMOOTHED(-6, 12) < SMOOTHED(-11, 3)) << 4) + ((SMOOTHED(4, 5) < SMOOTHED(13, 11)) << 3) + ((SMOOTHED(2, 12) < SMOOTHED(13, -12)) << 2) + ((SMOOTHED(-4, -13) < SMOOTHED(4, 7)) << 1) + ((SMOOTHED(0, 15) < SMOOTHED(-3, -16)) << 0)); - desc[49] = (uchar)(((SMOOTHED(-3, 2) < SMOOTHED(-2, 14)) << 7) + ((SMOOTHED(4, -14) < SMOOTHED(16, -11)) << 6) + ((SMOOTHED(-13, 3) < SMOOTHED(23, 10)) << 5) + ((SMOOTHED(9, -19) < SMOOTHED(2, 5)) << 4) + ((SMOOTHED(5, 3) < SMOOTHED(14, -7)) << 3) + ((SMOOTHED(19, -13) < SMOOTHED(-11, 15)) << 2) + ((SMOOTHED(14, 0) < SMOOTHED(-2, -5)) << 1) + ((SMOOTHED(11, -4) < SMOOTHED(0, -6)) << 0)); - desc[50] = (uchar)(((SMOOTHED(-2, 5) < SMOOTHED(-13, -8)) << 7) + ((SMOOTHED(-11, -15) < SMOOTHED(-7, -17)) << 6) + ((SMOOTHED(1, 3) < SMOOTHED(-10, -8)) << 5) + ((SMOOTHED(-13, -10) < SMOOTHED(7, -12)) << 4) + ((SMOOTHED(0, -13) < SMOOTHED(23, -6)) << 3) + ((SMOOTHED(2, -17) < SMOOTHED(-7, -3)) << 2) + ((SMOOTHED(1, 3) < SMOOTHED(4, -10)) << 1) + ((SMOOTHED(13, 4) < SMOOTHED(14, -6)) << 0)); - desc[51] = (uchar)(((SMOOTHED(-19, -2) < SMOOTHED(-1, 5)) << 7) + ((SMOOTHED(9, -8) < SMOOTHED(10, -5)) << 6) + ((SMOOTHED(7, -1) < SMOOTHED(5, 7)) << 5) + ((SMOOTHED(9, -10) < SMOOTHED(19, 0)) << 4) + ((SMOOTHED(7, 5) < SMOOTHED(-4, -7)) << 3) + ((SMOOTHED(-11, 1) < SMOOTHED(-1, -11)) << 2) + ((SMOOTHED(2, -1) < SMOOTHED(-4, 11)) << 1) + ((SMOOTHED(-1, 7) < SMOOTHED(2, -2)) << 0)); - desc[52] = (uchar)(((SMOOTHED(1, -20) < SMOOTHED(-9, -6)) << 7) + ((SMOOTHED(-4, -18) < SMOOTHED(8, -18)) << 6) + ((SMOOTHED(-16, -2) < SMOOTHED(7, -6)) << 5) + ((SMOOTHED(-3, -6) < SMOOTHED(-1, -4)) << 4) + ((SMOOTHED(0, -16) < SMOOTHED(24, -5)) << 3) + ((SMOOTHED(-4, -2) < SMOOTHED(-1, 9)) << 2) + ((SMOOTHED(-8, 2) < SMOOTHED(-6, 15)) << 1) + ((SMOOTHED(11, 4) < SMOOTHED(0, -3)) << 0)); - desc[53] = (uchar)(((SMOOTHED(7, 6) < SMOOTHED(2, -10)) << 7) + ((SMOOTHED(-7, -9) < SMOOTHED(12, -6)) << 6) + ((SMOOTHED(24, 15) < SMOOTHED(-8, -1)) << 5) + ((SMOOTHED(15, -9) < SMOOTHED(-3, -15)) << 4) + ((SMOOTHED(17, -5) < SMOOTHED(11, -10)) << 3) + ((SMOOTHED(-2, 13) < SMOOTHED(-15, 4)) << 2) + ((SMOOTHED(-2, -1) < SMOOTHED(4, -23)) << 1) + ((SMOOTHED(-16, 3) < SMOOTHED(-7, -14)) << 0)); - desc[54] = (uchar)(((SMOOTHED(-3, -5) < SMOOTHED(-10, -9)) << 7) + ((SMOOTHED(-5, 3) < SMOOTHED(-2, -1)) << 6) + ((SMOOTHED(-1, 4) < SMOOTHED(1, 8)) << 5) + ((SMOOTHED(12, 9) < SMOOTHED(9, -14)) << 4) + ((SMOOTHED(-9, 17) < SMOOTHED(-3, 0)) << 3) + ((SMOOTHED(5, 4) < SMOOTHED(13, -6)) << 2) + ((SMOOTHED(-1, -8) < SMOOTHED(19, 10)) << 1) + ((SMOOTHED(8, -5) < SMOOTHED(-15, 2)) << 0)); - desc[55] = (uchar)(((SMOOTHED(-12, -9) < SMOOTHED(-4, -5)) << 7) + ((SMOOTHED(12, 0) < SMOOTHED(24, 4)) << 6) + ((SMOOTHED(8, -2) < SMOOTHED(14, 4)) << 5) + ((SMOOTHED(8, -4) < SMOOTHED(-7, 16)) << 4) + ((SMOOTHED(5, -1) < SMOOTHED(-8, -4)) << 3) + ((SMOOTHED(-2, 18) < SMOOTHED(-5, 17)) << 2) + ((SMOOTHED(8, -2) < SMOOTHED(-9, -2)) << 1) + ((SMOOTHED(3, -7) < SMOOTHED(1, -6)) << 0)); - desc[56] = (uchar)(((SMOOTHED(-5, -22) < SMOOTHED(-5, -2)) << 7) + ((SMOOTHED(-8, -10) < SMOOTHED(14, 1)) << 6) + ((SMOOTHED(-3, -13) < SMOOTHED(3, 9)) << 5) + ((SMOOTHED(-4, -1) < SMOOTHED(-1, 0)) << 4) + ((SMOOTHED(-7, -21) < SMOOTHED(12, -19)) << 3) + ((SMOOTHED(-8, 8) < SMOOTHED(24, 8)) << 2) + ((SMOOTHED(12, -6) < SMOOTHED(-2, 3)) << 1) + ((SMOOTHED(-5, -11) < SMOOTHED(-22, -4)) << 0)); - desc[57] = (uchar)(((SMOOTHED(-3, 5) < SMOOTHED(-4, 4)) << 7) + ((SMOOTHED(-16, 24) < SMOOTHED(7, -9)) << 6) + ((SMOOTHED(-10, 23) < SMOOTHED(-9, 18)) << 5) + ((SMOOTHED(1, 12) < SMOOTHED(17, 21)) << 4) + ((SMOOTHED(24, -6) < SMOOTHED(-3, -11)) << 3) + ((SMOOTHED(-7, 17) < SMOOTHED(1, -6)) << 2) + ((SMOOTHED(4, 4) < SMOOTHED(2, -7)) << 1) + ((SMOOTHED(14, 6) < SMOOTHED(-12, 3)) << 0)); - desc[58] = (uchar)(((SMOOTHED(-6, 0) < SMOOTHED(-16, 13)) << 7) + ((SMOOTHED(-10, 5) < SMOOTHED(7, 12)) << 6) + ((SMOOTHED(5, 2) < SMOOTHED(6, -3)) << 5) + ((SMOOTHED(7, 0) < SMOOTHED(-23, 1)) << 4) + ((SMOOTHED(15, -5) < SMOOTHED(1, 14)) << 3) + ((SMOOTHED(-3, -1) < SMOOTHED(6, 6)) << 2) + ((SMOOTHED(6, -9) < SMOOTHED(-9, 12)) << 1) + ((SMOOTHED(4, -2) < SMOOTHED(-4, 7)) << 0)); - desc[59] = (uchar)(((SMOOTHED(-4, -5) < SMOOTHED(4, 4)) << 7) + ((SMOOTHED(-13, 0) < SMOOTHED(6, -10)) << 6) + ((SMOOTHED(2, -12) < SMOOTHED(-6, -3)) << 5) + ((SMOOTHED(16, 0) < SMOOTHED(-3, 3)) << 4) + ((SMOOTHED(5, -14) < SMOOTHED(6, 11)) << 3) + ((SMOOTHED(5, 11) < SMOOTHED(0, -13)) << 2) + ((SMOOTHED(7, 5) < SMOOTHED(-1, -5)) << 1) + ((SMOOTHED(12, 4) < SMOOTHED(6, 10)) << 0)); - desc[60] = (uchar)(((SMOOTHED(-10, 4) < SMOOTHED(-1, -11)) << 7) + ((SMOOTHED(4, 10) < SMOOTHED(-14, 5)) << 6) + ((SMOOTHED(11, -14) < SMOOTHED(-13, 0)) << 5) + ((SMOOTHED(2, 8) < SMOOTHED(12, 24)) << 4) + ((SMOOTHED(-1, 3) < SMOOTHED(-1, 2)) << 3) + ((SMOOTHED(9, -14) < SMOOTHED(-23, 3)) << 2) + ((SMOOTHED(-8, -6) < SMOOTHED(0, 9)) << 1) + ((SMOOTHED(-15, 14) < SMOOTHED(10, -10)) << 0)); - desc[61] = (uchar)(((SMOOTHED(-10, -6) < SMOOTHED(-7, -5)) << 7) + ((SMOOTHED(11, 5) < SMOOTHED(-3, -15)) << 6) + ((SMOOTHED(1, 0) < SMOOTHED(1, 8)) << 5) + ((SMOOTHED(-11, -6) < SMOOTHED(-4, -18)) << 4) + ((SMOOTHED(9, 0) < SMOOTHED(22, -4)) << 3) + ((SMOOTHED(-5, -1) < SMOOTHED(-9, 4)) << 2) + ((SMOOTHED(-20, 2) < SMOOTHED(1, 6)) << 1) + ((SMOOTHED(1, 2) < SMOOTHED(-9, -12)) << 0)); - desc[62] = (uchar)(((SMOOTHED(5, 15) < SMOOTHED(4, -6)) << 7) + ((SMOOTHED(19, 4) < SMOOTHED(4, 11)) << 6) + ((SMOOTHED(17, -4) < SMOOTHED(-8, -1)) << 5) + ((SMOOTHED(-8, -12) < SMOOTHED(7, -3)) << 4) + ((SMOOTHED(11, 9) < SMOOTHED(8, 1)) << 3) + ((SMOOTHED(9, 22) < SMOOTHED(-15, 15)) << 2) + ((SMOOTHED(-7, -7) < SMOOTHED(1, -23)) << 1) + ((SMOOTHED(-5, 13) < SMOOTHED(-8, 2)) << 0)); - desc[63] = (uchar)(((SMOOTHED(3, -5) < SMOOTHED(11, -11)) << 7) + ((SMOOTHED(3, -18) < SMOOTHED(14, -5)) << 6) + ((SMOOTHED(-20, 7) < SMOOTHED(-10, -23)) << 5) + ((SMOOTHED(-2, -5) < SMOOTHED(6, 0)) << 4) + ((SMOOTHED(-17, -13) < SMOOTHED(-3, 2)) << 3) + ((SMOOTHED(-6, -1) < SMOOTHED(14, -2)) << 2) + ((SMOOTHED(-12, -16) < SMOOTHED(15, 6)) << 1) + ((SMOOTHED(-12, -2) < SMOOTHED(3, -19)) << 0)); -#undef SMOOTHED diff --git a/modules/features2d/src/keypoint.cpp b/modules/features2d/src/keypoint.cpp deleted file mode 100644 index b19cfbf..0000000 --- a/modules/features2d/src/keypoint.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -size_t KeyPoint::hash() const -{ - size_t _Val = 2166136261U, scale = 16777619U; - Cv32suf u; - u.f = pt.x; _Val = (scale * _Val) ^ u.u; - u.f = pt.y; _Val = (scale * _Val) ^ u.u; - u.f = size; _Val = (scale * _Val) ^ u.u; - u.f = angle; _Val = (scale * _Val) ^ u.u; - u.f = response; _Val = (scale * _Val) ^ u.u; - _Val = (scale * _Val) ^ ((size_t) octave); - _Val = (scale * _Val) ^ ((size_t) class_id); - return _Val; -} - -void write(FileStorage& fs, const string& objname, const vector& keypoints) -{ - WriteStructContext ws(fs, objname, CV_NODE_SEQ + CV_NODE_FLOW); - - int i, npoints = (int)keypoints.size(); - for( i = 0; i < npoints; i++ ) - { - const KeyPoint& kpt = keypoints[i]; - write(fs, kpt.pt.x); - write(fs, kpt.pt.y); - write(fs, kpt.size); - write(fs, kpt.angle); - write(fs, kpt.response); - write(fs, kpt.octave); - write(fs, kpt.class_id); - } -} - - -void read(const FileNode& node, vector& keypoints) -{ - keypoints.resize(0); - FileNodeIterator it = node.begin(), it_end = node.end(); - for( ; it != it_end; ) - { - KeyPoint kpt; - it >> kpt.pt.x >> kpt.pt.y >> kpt.size >> kpt.angle >> kpt.response >> kpt.octave >> kpt.class_id; - keypoints.push_back(kpt); - } -} - - -void KeyPoint::convert(const std::vector& keypoints, std::vector& points2f, - const vector& keypointIndexes) -{ - if( keypointIndexes.empty() ) - { - points2f.resize( keypoints.size() ); - for( size_t i = 0; i < keypoints.size(); i++ ) - points2f[i] = keypoints[i].pt; - } - else - { - points2f.resize( keypointIndexes.size() ); - for( size_t i = 0; i < keypointIndexes.size(); i++ ) - { - int idx = keypointIndexes[i]; - if( idx >= 0 ) - points2f[i] = keypoints[idx].pt; - else - { - CV_Error( CV_StsBadArg, "keypointIndexes has element < 0. TODO: process this case" ); - //points2f[i] = Point2f(-1, -1); - } - } - } -} - -void KeyPoint::convert( const std::vector& points2f, std::vector& keypoints, - float size, float response, int octave, int class_id ) -{ - keypoints.resize(points2f.size()); - for( size_t i = 0; i < points2f.size(); i++ ) - keypoints[i] = KeyPoint(points2f[i], size, -1, response, octave, class_id); -} - -float KeyPoint::overlap( const KeyPoint& kp1, const KeyPoint& kp2 ) -{ - float a = kp1.size * 0.5f; - float b = kp2.size * 0.5f; - float a_2 = a * a; - float b_2 = b * b; - - Point2f p1 = kp1.pt; - Point2f p2 = kp2.pt; - float c = (float)norm( p1 - p2 ); - - float ovrl = 0.f; - - // one circle is completely encovered by the other => no intersection points! - if( min( a, b ) + c <= max( a, b ) ) - return min( a_2, b_2 ) / max( a_2, b_2 ); - - if( c < a + b ) // circles intersect - { - float c_2 = c * c; - float cosAlpha = ( b_2 + c_2 - a_2 ) / ( kp2.size * c ); - float cosBeta = ( a_2 + c_2 - b_2 ) / ( kp1.size * c ); - float alpha = acos( cosAlpha ); - float beta = acos( cosBeta ); - float sinAlpha = sin(alpha); - float sinBeta = sin(beta); - - float segmentAreaA = a_2 * beta; - float segmentAreaB = b_2 * alpha; - - float triangleAreaA = a_2 * sinBeta * cosBeta; - float triangleAreaB = b_2 * sinAlpha * cosAlpha; - - float intersectionArea = segmentAreaA + segmentAreaB - triangleAreaA - triangleAreaB; - float unionArea = (a_2 + b_2) * (float)CV_PI - intersectionArea; - - ovrl = intersectionArea / unionArea; - } - - return ovrl; -} - - -struct KeypointResponseGreaterThanThreshold -{ - KeypointResponseGreaterThanThreshold(float _value) : - value(_value) - { - } - inline bool operator()(const KeyPoint& kpt) const - { - return kpt.response >= value; - } - float value; -}; - -struct KeypointResponseGreater -{ - inline bool operator()(const KeyPoint& kp1, const KeyPoint& kp2) const - { - return kp1.response > kp2.response; - } -}; - -// takes keypoints and culls them by the response -void KeyPointsFilter::retainBest(vector& keypoints, int n_points) -{ - //this is only necessary if the keypoints size is greater than the number of desired points. - if( n_points >= 0 && keypoints.size() > (size_t)n_points ) - { - if (n_points==0) - { - keypoints.clear(); - return; - } - //first use nth element to partition the keypoints into the best and worst. - std::nth_element(keypoints.begin(), keypoints.begin() + n_points, keypoints.end(), KeypointResponseGreater()); - //this is the boundary response, and in the case of FAST may be ambigous - float ambiguous_response = keypoints[n_points - 1].response; - //use std::partition to grab all of the keypoints with the boundary response. - vector::const_iterator new_end = - std::partition(keypoints.begin() + n_points, keypoints.end(), - KeypointResponseGreaterThanThreshold(ambiguous_response)); - //resize the keypoints, given this new end point. nth_element and partition reordered the points inplace - keypoints.resize(new_end - keypoints.begin()); - } -} - -struct RoiPredicate -{ - RoiPredicate( const Rect& _r ) : r(_r) - {} - - bool operator()( const KeyPoint& keyPt ) const - { - return !r.contains( keyPt.pt ); - } - - Rect r; -}; - -void KeyPointsFilter::runByImageBorder( vector& keypoints, Size imageSize, int borderSize ) -{ - if( borderSize > 0) - { - if (imageSize.height <= borderSize * 2 || imageSize.width <= borderSize * 2) - keypoints.clear(); - else - keypoints.erase( std::remove_if(keypoints.begin(), keypoints.end(), - RoiPredicate(Rect(Point(borderSize, borderSize), - Point(imageSize.width - borderSize, imageSize.height - borderSize)))), - keypoints.end() ); - } -} - -struct SizePredicate -{ - SizePredicate( float _minSize, float _maxSize ) : minSize(_minSize), maxSize(_maxSize) - {} - - bool operator()( const KeyPoint& keyPt ) const - { - float size = keyPt.size; - return (size < minSize) || (size > maxSize); - } - - float minSize, maxSize; -}; - -void KeyPointsFilter::runByKeypointSize( vector& keypoints, float minSize, float maxSize ) -{ - CV_Assert( minSize >= 0 ); - CV_Assert( maxSize >= 0); - CV_Assert( minSize <= maxSize ); - - keypoints.erase( std::remove_if(keypoints.begin(), keypoints.end(), SizePredicate(minSize, maxSize)), - keypoints.end() ); -} - -class MaskPredicate -{ -public: - MaskPredicate( const Mat& _mask ) : mask(_mask) {} - bool operator() (const KeyPoint& key_pt) const - { - return mask.at( (int)(key_pt.pt.y + 0.5f), (int)(key_pt.pt.x + 0.5f) ) == 0; - } - -private: - const Mat mask; - MaskPredicate& operator=(const MaskPredicate&); -}; - -void KeyPointsFilter::runByPixelsMask( vector& keypoints, const Mat& mask ) -{ - if( mask.empty() ) - return; - - keypoints.erase(std::remove_if(keypoints.begin(), keypoints.end(), MaskPredicate(mask)), keypoints.end()); -} - -struct KeyPoint_LessThan -{ - KeyPoint_LessThan(const vector& _kp) : kp(&_kp) {} - bool operator()(int i, int j) const - { - const KeyPoint& kp1 = (*kp)[i]; - const KeyPoint& kp2 = (*kp)[j]; - if( kp1.pt.x != kp2.pt.x ) - return kp1.pt.x < kp2.pt.x; - if( kp1.pt.y != kp2.pt.y ) - return kp1.pt.y < kp2.pt.y; - if( kp1.size != kp2.size ) - return kp1.size > kp2.size; - if( kp1.angle != kp2.angle ) - return kp1.angle < kp2.angle; - if( kp1.response != kp2.response ) - return kp1.response > kp2.response; - if( kp1.octave != kp2.octave ) - return kp1.octave > kp2.octave; - if( kp1.class_id != kp2.class_id ) - return kp1.class_id > kp2.class_id; - - return i < j; - } - const vector* kp; -}; - -void KeyPointsFilter::removeDuplicated( vector& keypoints ) -{ - int i, j, n = (int)keypoints.size(); - vector kpidx(n); - vector mask(n, (uchar)1); - - for( i = 0; i < n; i++ ) - kpidx[i] = i; - std::sort(kpidx.begin(), kpidx.end(), KeyPoint_LessThan(keypoints)); - for( i = 1, j = 0; i < n; i++ ) - { - KeyPoint& kp1 = keypoints[kpidx[i]]; - KeyPoint& kp2 = keypoints[kpidx[j]]; - if( kp1.pt.x != kp2.pt.x || kp1.pt.y != kp2.pt.y || - kp1.size != kp2.size || kp1.angle != kp2.angle ) - j = i; - else - mask[kpidx[i]] = 0; - } - - for( i = j = 0; i < n; i++ ) - { - if( mask[i] ) - { - if( i != j ) - keypoints[j] = keypoints[i]; - j++; - } - } - keypoints.resize(j); -} - -} diff --git a/modules/features2d/src/matchers.cpp b/modules/features2d/src/matchers.cpp deleted file mode 100644 index 40612f8..0000000 --- a/modules/features2d/src/matchers.cpp +++ /dev/null @@ -1,1165 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#include "opencv2/core/internal.hpp" -#if defined(HAVE_EIGEN) && EIGEN_WORLD_VERSION == 2 -#include -#endif - -namespace cv -{ - -Mat windowedMatchingMask( const vector& keypoints1, const vector& keypoints2, - float maxDeltaX, float maxDeltaY ) -{ - if( keypoints1.empty() || keypoints2.empty() ) - return Mat(); - - int n1 = (int)keypoints1.size(), n2 = (int)keypoints2.size(); - Mat mask( n1, n2, CV_8UC1 ); - for( int i = 0; i < n1; i++ ) - { - for( int j = 0; j < n2; j++ ) - { - Point2f diff = keypoints2[j].pt - keypoints1[i].pt; - mask.at(i, j) = std::abs(diff.x) < maxDeltaX && std::abs(diff.y) < maxDeltaY; - } - } - return mask; -} - -/****************************************************************************************\ -* DescriptorMatcher * -\****************************************************************************************/ -DescriptorMatcher::DescriptorCollection::DescriptorCollection() -{} - -DescriptorMatcher::DescriptorCollection::DescriptorCollection( const DescriptorCollection& collection ) -{ - mergedDescriptors = collection.mergedDescriptors.clone(); - std::copy( collection.startIdxs.begin(), collection.startIdxs.begin(), startIdxs.begin() ); -} - -DescriptorMatcher::DescriptorCollection::~DescriptorCollection() -{} - -void DescriptorMatcher::DescriptorCollection::set( const vector& descriptors ) -{ - clear(); - - size_t imageCount = descriptors.size(); - CV_Assert( imageCount > 0 ); - - startIdxs.resize( imageCount ); - - int dim = -1; - int type = -1; - startIdxs[0] = 0; - for( size_t i = 1; i < imageCount; i++ ) - { - int s = 0; - if( !descriptors[i-1].empty() ) - { - dim = descriptors[i-1].cols; - type = descriptors[i-1].type(); - s = descriptors[i-1].rows; - } - startIdxs[i] = startIdxs[i-1] + s; - } - if( imageCount == 1 ) - { - if( descriptors[0].empty() ) return; - - dim = descriptors[0].cols; - type = descriptors[0].type(); - } - assert( dim > 0 ); - - int count = startIdxs[imageCount-1] + descriptors[imageCount-1].rows; - - if( count > 0 ) - { - mergedDescriptors.create( count, dim, type ); - for( size_t i = 0; i < imageCount; i++ ) - { - if( !descriptors[i].empty() ) - { - CV_Assert( descriptors[i].cols == dim && descriptors[i].type() == type ); - Mat m = mergedDescriptors.rowRange( startIdxs[i], startIdxs[i] + descriptors[i].rows ); - descriptors[i].copyTo(m); - } - } - } -} - -void DescriptorMatcher::DescriptorCollection::clear() -{ - startIdxs.clear(); - mergedDescriptors.release(); -} - -const Mat DescriptorMatcher::DescriptorCollection::getDescriptor( int imgIdx, int localDescIdx ) const -{ - CV_Assert( imgIdx < (int)startIdxs.size() ); - int globalIdx = startIdxs[imgIdx] + localDescIdx; - CV_Assert( globalIdx < (int)size() ); - - return getDescriptor( globalIdx ); -} - -const Mat& DescriptorMatcher::DescriptorCollection::getDescriptors() const -{ - return mergedDescriptors; -} - -const Mat DescriptorMatcher::DescriptorCollection::getDescriptor( int globalDescIdx ) const -{ - CV_Assert( globalDescIdx < size() ); - return mergedDescriptors.row( globalDescIdx ); -} - -void DescriptorMatcher::DescriptorCollection::getLocalIdx( int globalDescIdx, int& imgIdx, int& localDescIdx ) const -{ - CV_Assert( (globalDescIdx>=0) && (globalDescIdx < size()) ); - std::vector::const_iterator img_it = std::upper_bound(startIdxs.begin(), startIdxs.end(), globalDescIdx); - --img_it; - imgIdx = (int)(img_it - startIdxs.begin()); - localDescIdx = globalDescIdx - (*img_it); -} - -int DescriptorMatcher::DescriptorCollection::size() const -{ - return mergedDescriptors.rows; -} - -/* - * DescriptorMatcher - */ -static void convertMatches( const vector >& knnMatches, vector& matches ) -{ - matches.clear(); - matches.reserve( knnMatches.size() ); - for( size_t i = 0; i < knnMatches.size(); i++ ) - { - CV_Assert( knnMatches[i].size() <= 1 ); - if( !knnMatches[i].empty() ) - matches.push_back( knnMatches[i][0] ); - } -} - -DescriptorMatcher::~DescriptorMatcher() -{} - -void DescriptorMatcher::add( const vector& descriptors ) -{ - trainDescCollection.insert( trainDescCollection.end(), descriptors.begin(), descriptors.end() ); -} - -const vector& DescriptorMatcher::getTrainDescriptors() const -{ - return trainDescCollection; -} - -void DescriptorMatcher::clear() -{ - trainDescCollection.clear(); -} - -bool DescriptorMatcher::empty() const -{ - return trainDescCollection.empty(); -} - -void DescriptorMatcher::train() -{} - -void DescriptorMatcher::match( const Mat& queryDescriptors, const Mat& trainDescriptors, vector& matches, const Mat& mask ) const -{ - Ptr tempMatcher = clone(true); - tempMatcher->add( vector(1, trainDescriptors) ); - tempMatcher->match( queryDescriptors, matches, vector(1, mask) ); -} - -void DescriptorMatcher::knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, vector >& matches, int knn, - const Mat& mask, bool compactResult ) const -{ - Ptr tempMatcher = clone(true); - tempMatcher->add( vector(1, trainDescriptors) ); - tempMatcher->knnMatch( queryDescriptors, matches, knn, vector(1, mask), compactResult ); -} - -void DescriptorMatcher::radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors, vector >& matches, float maxDistance, - const Mat& mask, bool compactResult ) const -{ - Ptr tempMatcher = clone(true); - tempMatcher->add( vector(1, trainDescriptors) ); - tempMatcher->radiusMatch( queryDescriptors, matches, maxDistance, vector(1, mask), compactResult ); -} - -void DescriptorMatcher::match( const Mat& queryDescriptors, vector& matches, const vector& masks ) -{ - vector > knnMatches; - knnMatch( queryDescriptors, knnMatches, 1, masks, true /*compactResult*/ ); - convertMatches( knnMatches, matches ); -} - -void DescriptorMatcher::checkMasks( const vector& masks, int queryDescriptorsCount ) const -{ - if( isMaskSupported() && !masks.empty() ) - { - // Check masks - size_t imageCount = trainDescCollection.size(); - CV_Assert( masks.size() == imageCount ); - for( size_t i = 0; i < imageCount; i++ ) - { - if( !masks[i].empty() && !trainDescCollection[i].empty() ) - { - CV_Assert( masks[i].rows == queryDescriptorsCount && - masks[i].cols == trainDescCollection[i].rows && - masks[i].type() == CV_8UC1 ); - } - } - } -} - -void DescriptorMatcher::knnMatch( const Mat& queryDescriptors, vector >& matches, int knn, - const vector& masks, bool compactResult ) -{ - matches.clear(); - if( empty() || queryDescriptors.empty() ) - return; - - CV_Assert( knn > 0 ); - - checkMasks( masks, queryDescriptors.rows ); - - train(); - knnMatchImpl( queryDescriptors, matches, knn, masks, compactResult ); -} - -void DescriptorMatcher::radiusMatch( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& masks, bool compactResult ) -{ - matches.clear(); - if( empty() || queryDescriptors.empty() ) - return; - - CV_Assert( maxDistance > std::numeric_limits::epsilon() ); - - checkMasks( masks, queryDescriptors.rows ); - - train(); - radiusMatchImpl( queryDescriptors, matches, maxDistance, masks, compactResult ); -} - -void DescriptorMatcher::read( const FileNode& ) -{} - -void DescriptorMatcher::write( FileStorage& ) const -{} - -bool DescriptorMatcher::isPossibleMatch( const Mat& mask, int queryIdx, int trainIdx ) -{ - return mask.empty() || mask.at(queryIdx, trainIdx); -} - -bool DescriptorMatcher::isMaskedOut( const vector& masks, int queryIdx ) -{ - size_t outCount = 0; - for( size_t i = 0; i < masks.size(); i++ ) - { - if( !masks[i].empty() && (countNonZero(masks[i].row(queryIdx)) == 0) ) - outCount++; - } - - return !masks.empty() && outCount == masks.size() ; -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -BFMatcher::BFMatcher( int _normType, bool _crossCheck ) -{ - normType = _normType; - crossCheck = _crossCheck; -} - -Ptr BFMatcher::clone( bool emptyTrainData ) const -{ - BFMatcher* matcher = new BFMatcher(normType, crossCheck); - if( !emptyTrainData ) - { - matcher->trainDescCollection.resize(trainDescCollection.size()); - std::transform( trainDescCollection.begin(), trainDescCollection.end(), - matcher->trainDescCollection.begin(), clone_op ); - } - return matcher; -} - - -void BFMatcher::knnMatchImpl( const Mat& queryDescriptors, vector >& matches, int knn, - const vector& masks, bool compactResult ) -{ - const int IMGIDX_SHIFT = 18; - const int IMGIDX_ONE = (1 << IMGIDX_SHIFT); - - if( queryDescriptors.empty() || trainDescCollection.empty() ) - { - matches.clear(); - return; - } - CV_Assert( queryDescriptors.type() == trainDescCollection[0].type() ); - - matches.reserve(queryDescriptors.rows); - - Mat dist, nidx; - - int iIdx, imgCount = (int)trainDescCollection.size(), update = 0; - int dtype = normType == NORM_HAMMING || normType == NORM_HAMMING2 || - (normType == NORM_L1 && queryDescriptors.type() == CV_8U) ? CV_32S : CV_32F; - - CV_Assert( (int64)imgCount*IMGIDX_ONE < INT_MAX ); - - for( iIdx = 0; iIdx < imgCount; iIdx++ ) - { - CV_Assert( trainDescCollection[iIdx].rows < IMGIDX_ONE ); - batchDistance(queryDescriptors, trainDescCollection[iIdx], dist, dtype, nidx, - normType, knn, masks.empty() ? Mat() : masks[iIdx], update, crossCheck); - update += IMGIDX_ONE; - } - - if( dtype == CV_32S ) - { - Mat temp; - dist.convertTo(temp, CV_32F); - dist = temp; - } - - for( int qIdx = 0; qIdx < queryDescriptors.rows; qIdx++ ) - { - const float* distptr = dist.ptr(qIdx); - const int* nidxptr = nidx.ptr(qIdx); - - matches.push_back( vector() ); - vector& mq = matches.back(); - mq.reserve(knn); - - for( int k = 0; k < nidx.cols; k++ ) - { - if( nidxptr[k] < 0 ) - break; - mq.push_back( DMatch(qIdx, nidxptr[k] & (IMGIDX_ONE - 1), - nidxptr[k] >> IMGIDX_SHIFT, distptr[k]) ); - } - - if( mq.empty() && compactResult ) - matches.pop_back(); - } -} - - -void BFMatcher::radiusMatchImpl( const Mat& queryDescriptors, vector >& matches, - float maxDistance, const vector& masks, bool compactResult ) -{ - if( queryDescriptors.empty() || trainDescCollection.empty() ) - { - matches.clear(); - return; - } - CV_Assert( queryDescriptors.type() == trainDescCollection[0].type() ); - - matches.resize(queryDescriptors.rows); - Mat dist, distf; - - int iIdx, imgCount = (int)trainDescCollection.size(); - int dtype = normType == NORM_HAMMING || - (normType == NORM_L1 && queryDescriptors.type() == CV_8U) ? CV_32S : CV_32F; - - for( iIdx = 0; iIdx < imgCount; iIdx++ ) - { - batchDistance(queryDescriptors, trainDescCollection[iIdx], dist, dtype, noArray(), - normType, 0, masks.empty() ? Mat() : masks[iIdx], 0, false); - if( dtype == CV_32S ) - dist.convertTo(distf, CV_32F); - else - distf = dist; - - for( int qIdx = 0; qIdx < queryDescriptors.rows; qIdx++ ) - { - const float* distptr = distf.ptr(qIdx); - - vector& mq = matches[qIdx]; - for( int k = 0; k < distf.cols; k++ ) - { - if( distptr[k] <= maxDistance ) - mq.push_back( DMatch(qIdx, k, iIdx, distptr[k]) ); - } - } - } - - int qIdx0 = 0; - for( int qIdx = 0; qIdx < queryDescriptors.rows; qIdx++ ) - { - if( matches[qIdx].empty() && compactResult ) - continue; - - if( qIdx0 < qIdx ) - std::swap(matches[qIdx], matches[qIdx0]); - - std::sort( matches[qIdx0].begin(), matches[qIdx0].end() ); - qIdx0++; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - * Factory function for DescriptorMatcher creating - */ -Ptr DescriptorMatcher::create( const string& descriptorMatcherType ) -{ - DescriptorMatcher* dm = 0; - if( !descriptorMatcherType.compare( "FlannBased" ) ) - { - dm = new FlannBasedMatcher(); - } - else if( !descriptorMatcherType.compare( "BruteForce" ) ) // L2 - { - dm = new BFMatcher(NORM_L2); - } - else if( !descriptorMatcherType.compare( "BruteForce-SL2" ) ) // Squared L2 - { - dm = new BFMatcher(NORM_L2SQR); - } - else if( !descriptorMatcherType.compare( "BruteForce-L1" ) ) - { - dm = new BFMatcher(NORM_L1); - } - else if( !descriptorMatcherType.compare("BruteForce-Hamming") || - !descriptorMatcherType.compare("BruteForce-HammingLUT") ) - { - dm = new BFMatcher(NORM_HAMMING); - } - else if( !descriptorMatcherType.compare("BruteForce-Hamming(2)") ) - { - dm = new BFMatcher(NORM_HAMMING2); - } - else - CV_Error( CV_StsBadArg, "Unknown matcher name" ); - - return dm; -} - - -/* - * Flann based matcher - */ -FlannBasedMatcher::FlannBasedMatcher( const Ptr& _indexParams, const Ptr& _searchParams ) - : indexParams(_indexParams), searchParams(_searchParams), addedDescCount(0) -{ - CV_Assert( !_indexParams.empty() ); - CV_Assert( !_searchParams.empty() ); -} - -void FlannBasedMatcher::add( const vector& descriptors ) -{ - DescriptorMatcher::add( descriptors ); - for( size_t i = 0; i < descriptors.size(); i++ ) - { - addedDescCount += descriptors[i].rows; - } -} - -void FlannBasedMatcher::clear() -{ - DescriptorMatcher::clear(); - - mergedDescriptors.clear(); - flannIndex.release(); - - addedDescCount = 0; -} - -void FlannBasedMatcher::train() -{ - if( flannIndex.empty() || mergedDescriptors.size() < addedDescCount ) - { - mergedDescriptors.set( trainDescCollection ); - flannIndex = new flann::Index( mergedDescriptors.getDescriptors(), *indexParams ); - } -} - -void FlannBasedMatcher::read( const FileNode& fn) -{ - if (indexParams == 0) - indexParams = new flann::IndexParams(); - - FileNode ip = fn["indexParams"]; - CV_Assert(ip.type() == FileNode::SEQ); - - for(int i = 0; i < (int)ip.size(); ++i) - { - CV_Assert(ip[i].type() == FileNode::MAP); - std::string _name = (std::string)ip[i]["name"]; - int type = (int)ip[i]["type"]; - - switch(type) - { - case CV_8U: - case CV_8S: - case CV_16U: - case CV_16S: - case CV_32S: - indexParams->setInt(_name, (int) ip[i]["value"]); - break; - case CV_32F: - indexParams->setFloat(_name, (float) ip[i]["value"]); - break; - case CV_64F: - indexParams->setDouble(_name, (double) ip[i]["value"]); - break; - case CV_USRTYPE1: - indexParams->setString(_name, (std::string) ip[i]["value"]); - break; - case CV_MAKETYPE(CV_USRTYPE1,2): - indexParams->setBool(_name, (int) ip[i]["value"] != 0); - break; - case CV_MAKETYPE(CV_USRTYPE1,3): - indexParams->setAlgorithm((int) ip[i]["value"]); - break; - }; - } - - if (searchParams == 0) - searchParams = new flann::SearchParams(); - - FileNode sp = fn["searchParams"]; - CV_Assert(sp.type() == FileNode::SEQ); - - for(int i = 0; i < (int)sp.size(); ++i) - { - CV_Assert(sp[i].type() == FileNode::MAP); - std::string _name = (std::string)sp[i]["name"]; - int type = (int)sp[i]["type"]; - - switch(type) - { - case CV_8U: - case CV_8S: - case CV_16U: - case CV_16S: - case CV_32S: - searchParams->setInt(_name, (int) sp[i]["value"]); - break; - case CV_32F: - searchParams->setFloat(_name, (float) ip[i]["value"]); - break; - case CV_64F: - searchParams->setDouble(_name, (double) ip[i]["value"]); - break; - case CV_USRTYPE1: - searchParams->setString(_name, (std::string) ip[i]["value"]); - break; - case CV_MAKETYPE(CV_USRTYPE1,2): - searchParams->setBool(_name, (int) ip[i]["value"] != 0); - break; - case CV_MAKETYPE(CV_USRTYPE1,3): - searchParams->setAlgorithm((int) ip[i]["value"]); - break; - }; - } - - flannIndex.release(); -} - -void FlannBasedMatcher::write( FileStorage& fs) const -{ - fs << "indexParams" << "["; - - if (indexParams != 0) - { - std::vector names; - std::vector types; - std::vector strValues; - std::vector numValues; - - indexParams->getAll(names, types, strValues, numValues); - - for(size_t i = 0; i < names.size(); ++i) - { - fs << "{" << "name" << names[i] << "type" << types[i] << "value"; - switch(types[i]) - { - case CV_8U: - fs << (uchar)numValues[i]; - break; - case CV_8S: - fs << (char)numValues[i]; - break; - case CV_16U: - fs << (ushort)numValues[i]; - break; - case CV_16S: - fs << (short)numValues[i]; - break; - case CV_32S: - case CV_MAKETYPE(CV_USRTYPE1,2): - case CV_MAKETYPE(CV_USRTYPE1,3): - fs << (int)numValues[i]; - break; - case CV_32F: - fs << (float)numValues[i]; - break; - case CV_64F: - fs << (double)numValues[i]; - break; - case CV_USRTYPE1: - fs << strValues[i]; - break; - default: - fs << (double)numValues[i]; - fs << "typename" << strValues[i]; - break; - } - fs << "}"; - } - } - - fs << "]" << "searchParams" << "["; - - if (searchParams != 0) - { - std::vector names; - std::vector types; - std::vector strValues; - std::vector numValues; - - searchParams->getAll(names, types, strValues, numValues); - - for(size_t i = 0; i < names.size(); ++i) - { - fs << "{" << "name" << names[i] << "type" << types[i] << "value"; - switch(types[i]) - { - case CV_8U: - fs << (uchar)numValues[i]; - break; - case CV_8S: - fs << (char)numValues[i]; - break; - case CV_16U: - fs << (ushort)numValues[i]; - break; - case CV_16S: - fs << (short)numValues[i]; - break; - case CV_32S: - case CV_MAKETYPE(CV_USRTYPE1,2): - case CV_MAKETYPE(CV_USRTYPE1,3): - fs << (int)numValues[i]; - break; - case CV_32F: - fs << (float)numValues[i]; - break; - case CV_64F: - fs << (double)numValues[i]; - break; - case CV_USRTYPE1: - fs << strValues[i]; - break; - default: - fs << (double)numValues[i]; - fs << "typename" << strValues[i]; - break; - } - fs << "}"; - } - } - fs << "]"; -} - -bool FlannBasedMatcher::isMaskSupported() const -{ - return false; -} - -Ptr FlannBasedMatcher::clone( bool emptyTrainData ) const -{ - FlannBasedMatcher* matcher = new FlannBasedMatcher(indexParams, searchParams); - if( !emptyTrainData ) - { - CV_Error( CV_StsNotImplemented, "deep clone functionality is not implemented, because " - "Flann::Index has not copy constructor or clone method "); - //matcher->flannIndex; - matcher->addedDescCount = addedDescCount; - matcher->mergedDescriptors = DescriptorCollection( mergedDescriptors ); - std::transform( trainDescCollection.begin(), trainDescCollection.end(), - matcher->trainDescCollection.begin(), clone_op ); - } - return matcher; -} - -void FlannBasedMatcher::convertToDMatches( const DescriptorCollection& collection, const Mat& indices, const Mat& dists, - vector >& matches ) -{ - matches.resize( indices.rows ); - for( int i = 0; i < indices.rows; i++ ) - { - for( int j = 0; j < indices.cols; j++ ) - { - int idx = indices.at(i, j); - if( idx >= 0 ) - { - int imgIdx, trainIdx; - collection.getLocalIdx( idx, imgIdx, trainIdx ); - float dist = 0; - if (dists.type() == CV_32S) - dist = static_cast( dists.at(i,j) ); - else - dist = std::sqrt(dists.at(i,j)); - matches[i].push_back( DMatch( i, trainIdx, imgIdx, dist ) ); - } - } - } -} - -void FlannBasedMatcher::knnMatchImpl( const Mat& queryDescriptors, vector >& matches, int knn, - const vector& /*masks*/, bool /*compactResult*/ ) -{ - Mat indices( queryDescriptors.rows, knn, CV_32SC1 ); - Mat dists( queryDescriptors.rows, knn, CV_32FC1); - flannIndex->knnSearch( queryDescriptors, indices, dists, knn, *searchParams ); - - convertToDMatches( mergedDescriptors, indices, dists, matches ); -} - -void FlannBasedMatcher::radiusMatchImpl( const Mat& queryDescriptors, vector >& matches, float maxDistance, - const vector& /*masks*/, bool /*compactResult*/ ) -{ - const int count = mergedDescriptors.size(); // TODO do count as param? - Mat indices( queryDescriptors.rows, count, CV_32SC1, Scalar::all(-1) ); - Mat dists( queryDescriptors.rows, count, CV_32FC1, Scalar::all(-1) ); - for( int qIdx = 0; qIdx < queryDescriptors.rows; qIdx++ ) - { - Mat queryDescriptorsRow = queryDescriptors.row(qIdx); - Mat indicesRow = indices.row(qIdx); - Mat distsRow = dists.row(qIdx); - flannIndex->radiusSearch( queryDescriptorsRow, indicesRow, distsRow, maxDistance*maxDistance, count, *searchParams ); - } - - convertToDMatches( mergedDescriptors, indices, dists, matches ); -} - -/****************************************************************************************\ -* GenericDescriptorMatcher * -\****************************************************************************************/ -/* - * KeyPointCollection - */ -GenericDescriptorMatcher::KeyPointCollection::KeyPointCollection() : pointCount(0) -{} - -GenericDescriptorMatcher::KeyPointCollection::KeyPointCollection( const KeyPointCollection& collection ) -{ - pointCount = collection.pointCount; - - std::transform( collection.images.begin(), collection.images.end(), images.begin(), clone_op ); - - keypoints.resize( collection.keypoints.size() ); - for( size_t i = 0; i < keypoints.size(); i++ ) - std::copy( collection.keypoints[i].begin(), collection.keypoints[i].end(), keypoints[i].begin() ); - - std::copy( collection.startIndices.begin(), collection.startIndices.end(), startIndices.begin() ); -} - -void GenericDescriptorMatcher::KeyPointCollection::add( const vector& _images, - const vector >& _points ) -{ - CV_Assert( !_images.empty() ); - CV_Assert( _images.size() == _points.size() ); - - images.insert( images.end(), _images.begin(), _images.end() ); - keypoints.insert( keypoints.end(), _points.begin(), _points.end() ); - for( size_t i = 0; i < _points.size(); i++ ) - pointCount += (int)_points[i].size(); - - size_t prevSize = startIndices.size(), addSize = _images.size(); - startIndices.resize( prevSize + addSize ); - - if( prevSize == 0 ) - startIndices[prevSize] = 0; //first - else - startIndices[prevSize] = (int)(startIndices[prevSize-1] + keypoints[prevSize-1].size()); - - for( size_t i = prevSize + 1; i < prevSize + addSize; i++ ) - { - startIndices[i] = (int)(startIndices[i - 1] + keypoints[i - 1].size()); - } -} - -void GenericDescriptorMatcher::KeyPointCollection::clear() -{ - pointCount = 0; - - images.clear(); - keypoints.clear(); - startIndices.clear(); -} - -size_t GenericDescriptorMatcher::KeyPointCollection::keypointCount() const -{ - return pointCount; -} - -size_t GenericDescriptorMatcher::KeyPointCollection::imageCount() const -{ - return images.size(); -} - -const vector >& GenericDescriptorMatcher::KeyPointCollection::getKeypoints() const -{ - return keypoints; -} - -const vector& GenericDescriptorMatcher::KeyPointCollection::getKeypoints( int imgIdx ) const -{ - CV_Assert( imgIdx < (int)imageCount() ); - return keypoints[imgIdx]; -} - -const KeyPoint& GenericDescriptorMatcher::KeyPointCollection::getKeyPoint( int imgIdx, int localPointIdx ) const -{ - CV_Assert( imgIdx < (int)images.size() ); - CV_Assert( localPointIdx < (int)keypoints[imgIdx].size() ); - return keypoints[imgIdx][localPointIdx]; -} - -const KeyPoint& GenericDescriptorMatcher::KeyPointCollection::getKeyPoint( int globalPointIdx ) const -{ - int imgIdx, localPointIdx; - getLocalIdx( globalPointIdx, imgIdx, localPointIdx ); - return keypoints[imgIdx][localPointIdx]; -} - -void GenericDescriptorMatcher::KeyPointCollection::getLocalIdx( int globalPointIdx, int& imgIdx, int& localPointIdx ) const -{ - imgIdx = -1; - CV_Assert( globalPointIdx < (int)keypointCount() ); - for( size_t i = 1; i < startIndices.size(); i++ ) - { - if( globalPointIdx < startIndices[i] ) - { - imgIdx = (int)(i - 1); - break; - } - } - imgIdx = imgIdx == -1 ? (int)(startIndices.size() - 1) : imgIdx; - localPointIdx = globalPointIdx - startIndices[imgIdx]; -} - -const vector& GenericDescriptorMatcher::KeyPointCollection::getImages() const -{ - return images; -} - -const Mat& GenericDescriptorMatcher::KeyPointCollection::getImage( int imgIdx ) const -{ - CV_Assert( imgIdx < (int)imageCount() ); - return images[imgIdx]; -} - -/* - * GenericDescriptorMatcher - */ -GenericDescriptorMatcher::GenericDescriptorMatcher() -{} - -GenericDescriptorMatcher::~GenericDescriptorMatcher() -{} - -void GenericDescriptorMatcher::add( const vector& images, - vector >& keypoints ) -{ - CV_Assert( !images.empty() ); - CV_Assert( images.size() == keypoints.size() ); - - for( size_t i = 0; i < images.size(); i++ ) - { - CV_Assert( !images[i].empty() ); - KeyPointsFilter::runByImageBorder( keypoints[i], images[i].size(), 0 ); - KeyPointsFilter::runByKeypointSize( keypoints[i], std::numeric_limits::epsilon() ); - } - - trainPointCollection.add( images, keypoints ); -} - -const vector& GenericDescriptorMatcher::getTrainImages() const -{ - return trainPointCollection.getImages(); -} - -const vector >& GenericDescriptorMatcher::getTrainKeypoints() const -{ - return trainPointCollection.getKeypoints(); -} - -void GenericDescriptorMatcher::clear() -{ - trainPointCollection.clear(); -} - -void GenericDescriptorMatcher::train() -{} - -void GenericDescriptorMatcher::classify( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints ) const -{ - vector matches; - match( queryImage, queryKeypoints, trainImage, trainKeypoints, matches ); - - // remap keypoint indices to descriptors - for( size_t i = 0; i < matches.size(); i++ ) - queryKeypoints[matches[i].queryIdx].class_id = trainKeypoints[matches[i].trainIdx].class_id; -} - -void GenericDescriptorMatcher::classify( const Mat& queryImage, vector& queryKeypoints ) -{ - vector matches; - match( queryImage, queryKeypoints, matches ); - - // remap keypoint indices to descriptors - for( size_t i = 0; i < matches.size(); i++ ) - queryKeypoints[matches[i].queryIdx].class_id = trainPointCollection.getKeyPoint( matches[i].trainIdx, matches[i].trainIdx ).class_id; -} - -void GenericDescriptorMatcher::match( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector& matches, const Mat& mask ) const -{ - Ptr tempMatcher = clone( true ); - vector > vecTrainPoints(1, trainKeypoints); - tempMatcher->add( vector(1, trainImage), vecTrainPoints ); - tempMatcher->match( queryImage, queryKeypoints, matches, vector(1, mask) ); - vecTrainPoints[0].swap( trainKeypoints ); -} - -void GenericDescriptorMatcher::knnMatch( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector >& matches, int knn, const Mat& mask, bool compactResult ) const -{ - Ptr tempMatcher = clone( true ); - vector > vecTrainPoints(1, trainKeypoints); - tempMatcher->add( vector(1, trainImage), vecTrainPoints ); - tempMatcher->knnMatch( queryImage, queryKeypoints, matches, knn, vector(1, mask), compactResult ); - vecTrainPoints[0].swap( trainKeypoints ); -} - -void GenericDescriptorMatcher::radiusMatch( const Mat& queryImage, vector& queryKeypoints, - const Mat& trainImage, vector& trainKeypoints, - vector >& matches, float maxDistance, - const Mat& mask, bool compactResult ) const -{ - Ptr tempMatcher = clone( true ); - vector > vecTrainPoints(1, trainKeypoints); - tempMatcher->add( vector(1, trainImage), vecTrainPoints ); - tempMatcher->radiusMatch( queryImage, queryKeypoints, matches, maxDistance, vector(1, mask), compactResult ); - vecTrainPoints[0].swap( trainKeypoints ); -} - -void GenericDescriptorMatcher::match( const Mat& queryImage, vector& queryKeypoints, - vector& matches, const vector& masks ) -{ - vector > knnMatches; - knnMatch( queryImage, queryKeypoints, knnMatches, 1, masks, false ); - convertMatches( knnMatches, matches ); -} - -void GenericDescriptorMatcher::knnMatch( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, int knn, - const vector& masks, bool compactResult ) -{ - matches.clear(); - - if( queryImage.empty() || queryKeypoints.empty() ) - return; - - KeyPointsFilter::runByImageBorder( queryKeypoints, queryImage.size(), 0 ); - KeyPointsFilter::runByKeypointSize( queryKeypoints, std::numeric_limits::epsilon() ); - - train(); - knnMatchImpl( queryImage, queryKeypoints, matches, knn, masks, compactResult ); -} - -void GenericDescriptorMatcher::radiusMatch( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, float maxDistance, - const vector& masks, bool compactResult ) -{ - matches.clear(); - - if( queryImage.empty() || queryKeypoints.empty() ) - return; - - KeyPointsFilter::runByImageBorder( queryKeypoints, queryImage.size(), 0 ); - KeyPointsFilter::runByKeypointSize( queryKeypoints, std::numeric_limits::epsilon() ); - - train(); - radiusMatchImpl( queryImage, queryKeypoints, matches, maxDistance, masks, compactResult ); -} - -void GenericDescriptorMatcher::read( const FileNode& ) -{} - -void GenericDescriptorMatcher::write( FileStorage& ) const -{} - -bool GenericDescriptorMatcher::empty() const -{ - return true; -} - -/* - * Factory function for GenericDescriptorMatch creating - */ -Ptr GenericDescriptorMatcher::create( const string& genericDescritptorMatcherType, - const string ¶msFilename ) -{ - Ptr descriptorMatcher = - Algorithm::create("DescriptorMatcher." + genericDescritptorMatcherType); - - if( !paramsFilename.empty() && !descriptorMatcher.empty() ) - { - FileStorage fs = FileStorage( paramsFilename, FileStorage::READ ); - if( fs.isOpened() ) - { - descriptorMatcher->read( fs.root() ); - fs.release(); - } - } - return descriptorMatcher; -} - - -/****************************************************************************************\ -* VectorDescriptorMatcher * -\****************************************************************************************/ -VectorDescriptorMatcher::VectorDescriptorMatcher( const Ptr& _extractor, - const Ptr& _matcher ) - : extractor( _extractor ), matcher( _matcher ) -{ - CV_Assert( !extractor.empty() && !matcher.empty() ); -} - -VectorDescriptorMatcher::~VectorDescriptorMatcher() -{} - -void VectorDescriptorMatcher::add( const vector& imgCollection, - vector >& pointCollection ) -{ - vector descriptors; - extractor->compute( imgCollection, pointCollection, descriptors ); - - matcher->add( descriptors ); - - trainPointCollection.add( imgCollection, pointCollection ); -} - -void VectorDescriptorMatcher::clear() -{ - //extractor->clear(); - matcher->clear(); - GenericDescriptorMatcher::clear(); -} - -void VectorDescriptorMatcher::train() -{ - matcher->train(); -} - -bool VectorDescriptorMatcher::isMaskSupported() -{ - return matcher->isMaskSupported(); -} - -void VectorDescriptorMatcher::knnMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, int knn, - const vector& masks, bool compactResult ) -{ - Mat queryDescriptors; - extractor->compute( queryImage, queryKeypoints, queryDescriptors ); - matcher->knnMatch( queryDescriptors, matches, knn, masks, compactResult ); -} - -void VectorDescriptorMatcher::radiusMatchImpl( const Mat& queryImage, vector& queryKeypoints, - vector >& matches, float maxDistance, - const vector& masks, bool compactResult ) -{ - Mat queryDescriptors; - extractor->compute( queryImage, queryKeypoints, queryDescriptors ); - matcher->radiusMatch( queryDescriptors, matches, maxDistance, masks, compactResult ); -} - -void VectorDescriptorMatcher::read( const FileNode& fn ) -{ - GenericDescriptorMatcher::read(fn); - extractor->read(fn); -} - -void VectorDescriptorMatcher::write (FileStorage& fs) const -{ - GenericDescriptorMatcher::write(fs); - extractor->write (fs); -} - -bool VectorDescriptorMatcher::empty() const -{ - return extractor.empty() || extractor->empty() || - matcher.empty() || matcher->empty(); -} - -Ptr VectorDescriptorMatcher::clone( bool emptyTrainData ) const -{ - // TODO clone extractor - return new VectorDescriptorMatcher( extractor, matcher->clone(emptyTrainData) ); -} - -} diff --git a/modules/features2d/src/mser.cpp b/modules/features2d/src/mser.cpp deleted file mode 100644 index 4393180..0000000 --- a/modules/features2d/src/mser.cpp +++ /dev/null @@ -1,1304 +0,0 @@ -/* Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * The name of Contributor may not 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 CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * Copyright© 2009, Liu Liu All rights reserved. - * - * OpenCV functions for MSER extraction - * - * 1. there are two different implementation of MSER, one for grey image, one for color image - * 2. the grey image algorithm is taken from: Linear Time Maximally Stable Extremal Regions; - * the paper claims to be faster than union-find method; - * it actually get 1.5~2m/s on my centrino L7200 1.2GHz laptop. - * 3. the color image algorithm is taken from: Maximally Stable Colour Regions for Recognition and Match; - * it should be much slower than grey image method ( 3~4 times ); - * the chi_table.h file is taken directly from paper's source code which is distributed under GPL. - * 4. though the name is *contours*, the result actually is a list of point set. - */ - -#include "precomp.hpp" - -namespace cv -{ - -const int TABLE_SIZE = 400; - -static double chitab3[]={0, 0.0150057, 0.0239478, 0.0315227, - 0.0383427, 0.0446605, 0.0506115, 0.0562786, - 0.0617174, 0.0669672, 0.0720573, 0.0770099, - 0.081843, 0.0865705, 0.0912043, 0.0957541, - 0.100228, 0.104633, 0.108976, 0.113261, - 0.117493, 0.121676, 0.125814, 0.12991, - 0.133967, 0.137987, 0.141974, 0.145929, - 0.149853, 0.15375, 0.15762, 0.161466, - 0.165287, 0.169087, 0.172866, 0.176625, - 0.180365, 0.184088, 0.187794, 0.191483, - 0.195158, 0.198819, 0.202466, 0.2061, - 0.209722, 0.213332, 0.216932, 0.220521, - 0.2241, 0.22767, 0.231231, 0.234783, - 0.238328, 0.241865, 0.245395, 0.248918, - 0.252435, 0.255947, 0.259452, 0.262952, - 0.266448, 0.269939, 0.273425, 0.276908, - 0.280386, 0.283862, 0.287334, 0.290803, - 0.29427, 0.297734, 0.301197, 0.304657, - 0.308115, 0.311573, 0.315028, 0.318483, - 0.321937, 0.32539, 0.328843, 0.332296, - 0.335749, 0.339201, 0.342654, 0.346108, - 0.349562, 0.353017, 0.356473, 0.35993, - 0.363389, 0.366849, 0.37031, 0.373774, - 0.377239, 0.380706, 0.384176, 0.387648, - 0.391123, 0.3946, 0.39808, 0.401563, - 0.405049, 0.408539, 0.412032, 0.415528, - 0.419028, 0.422531, 0.426039, 0.429551, - 0.433066, 0.436586, 0.440111, 0.44364, - 0.447173, 0.450712, 0.454255, 0.457803, - 0.461356, 0.464915, 0.468479, 0.472049, - 0.475624, 0.479205, 0.482792, 0.486384, - 0.489983, 0.493588, 0.4972, 0.500818, - 0.504442, 0.508073, 0.511711, 0.515356, - 0.519008, 0.522667, 0.526334, 0.530008, - 0.533689, 0.537378, 0.541075, 0.54478, - 0.548492, 0.552213, 0.555942, 0.55968, - 0.563425, 0.56718, 0.570943, 0.574715, - 0.578497, 0.582287, 0.586086, 0.589895, - 0.593713, 0.597541, 0.601379, 0.605227, - 0.609084, 0.612952, 0.61683, 0.620718, - 0.624617, 0.628526, 0.632447, 0.636378, - 0.64032, 0.644274, 0.648239, 0.652215, - 0.656203, 0.660203, 0.664215, 0.668238, - 0.672274, 0.676323, 0.680384, 0.684457, - 0.688543, 0.692643, 0.696755, 0.700881, - 0.70502, 0.709172, 0.713339, 0.717519, - 0.721714, 0.725922, 0.730145, 0.734383, - 0.738636, 0.742903, 0.747185, 0.751483, - 0.755796, 0.760125, 0.76447, 0.768831, - 0.773208, 0.777601, 0.782011, 0.786438, - 0.790882, 0.795343, 0.799821, 0.804318, - 0.808831, 0.813363, 0.817913, 0.822482, - 0.827069, 0.831676, 0.836301, 0.840946, - 0.84561, 0.850295, 0.854999, 0.859724, - 0.864469, 0.869235, 0.874022, 0.878831, - 0.883661, 0.888513, 0.893387, 0.898284, - 0.903204, 0.908146, 0.913112, 0.918101, - 0.923114, 0.928152, 0.933214, 0.938301, - 0.943413, 0.94855, 0.953713, 0.958903, - 0.964119, 0.969361, 0.974631, 0.979929, - 0.985254, 0.990608, 0.99599, 1.0014, - 1.00684, 1.01231, 1.01781, 1.02335, - 1.02891, 1.0345, 1.04013, 1.04579, - 1.05148, 1.05721, 1.06296, 1.06876, - 1.07459, 1.08045, 1.08635, 1.09228, - 1.09826, 1.10427, 1.11032, 1.1164, - 1.12253, 1.1287, 1.1349, 1.14115, - 1.14744, 1.15377, 1.16015, 1.16656, - 1.17303, 1.17954, 1.18609, 1.19269, - 1.19934, 1.20603, 1.21278, 1.21958, - 1.22642, 1.23332, 1.24027, 1.24727, - 1.25433, 1.26144, 1.26861, 1.27584, - 1.28312, 1.29047, 1.29787, 1.30534, - 1.31287, 1.32046, 1.32812, 1.33585, - 1.34364, 1.3515, 1.35943, 1.36744, - 1.37551, 1.38367, 1.39189, 1.4002, - 1.40859, 1.41705, 1.42561, 1.43424, - 1.44296, 1.45177, 1.46068, 1.46967, - 1.47876, 1.48795, 1.49723, 1.50662, - 1.51611, 1.52571, 1.53541, 1.54523, - 1.55517, 1.56522, 1.57539, 1.58568, - 1.59611, 1.60666, 1.61735, 1.62817, - 1.63914, 1.65025, 1.66152, 1.67293, - 1.68451, 1.69625, 1.70815, 1.72023, - 1.73249, 1.74494, 1.75757, 1.77041, - 1.78344, 1.79669, 1.81016, 1.82385, - 1.83777, 1.85194, 1.86635, 1.88103, - 1.89598, 1.91121, 1.92674, 1.94257, - 1.95871, 1.97519, 1.99201, 2.0092, - 2.02676, 2.04471, 2.06309, 2.08189, - 2.10115, 2.12089, 2.14114, 2.16192, - 2.18326, 2.2052, 2.22777, 2.25101, - 2.27496, 2.29966, 2.32518, 2.35156, - 2.37886, 2.40717, 2.43655, 2.46709, - 2.49889, 2.53206, 2.56673, 2.60305, - 2.64117, 2.6813, 2.72367, 2.76854, - 2.81623, 2.86714, 2.92173, 2.98059, - 3.04446, 3.1143, 3.19135, 3.27731, - 3.37455, 3.48653, 3.61862, 3.77982, - 3.98692, 4.2776, 4.77167, 133.333 }; - -typedef struct LinkedPoint -{ - struct LinkedPoint* prev; - struct LinkedPoint* next; - Point pt; -} -LinkedPoint; - -// the history of region grown -typedef struct MSERGrowHistory -{ - struct MSERGrowHistory* shortcut; - struct MSERGrowHistory* child; - int stable; // when it ever stabled before, record the size - int val; - int size; -} -MSERGrowHistory; - -typedef struct MSERConnectedComp -{ - LinkedPoint* head; - LinkedPoint* tail; - MSERGrowHistory* history; - unsigned long grey_level; - int size; - int dvar; // the derivative of last var - float var; // the current variation (most time is the variation of one-step back) -} -MSERConnectedComp; - -// Linear Time MSER claims by using bsf can get performance gain, here is the implementation -// however it seems that will not do any good in real world test -inline void _bitset(unsigned long * a, unsigned long b) -{ - *a |= 1<size = 0; - comp->var = 0; - comp->dvar = 1; - comp->history = NULL; -} - -// add history of size to a connected component -static void -MSERNewHistory( MSERConnectedComp* comp, MSERGrowHistory* history ) -{ - history->child = history; - if ( NULL == comp->history ) - { - history->shortcut = history; - history->stable = 0; - } else { - comp->history->child = history; - history->shortcut = comp->history->shortcut; - history->stable = comp->history->stable; - } - history->val = comp->grey_level; - history->size = comp->size; - comp->history = history; -} - -// merging two connected component -static void -MSERMergeComp( MSERConnectedComp* comp1, - MSERConnectedComp* comp2, - MSERConnectedComp* comp, - MSERGrowHistory* history ) -{ - LinkedPoint* head; - LinkedPoint* tail; - comp->grey_level = comp2->grey_level; - history->child = history; - // select the winner by size - if ( comp1->size >= comp2->size ) - { - if ( NULL == comp1->history ) - { - history->shortcut = history; - history->stable = 0; - } else { - comp1->history->child = history; - history->shortcut = comp1->history->shortcut; - history->stable = comp1->history->stable; - } - if ( NULL != comp2->history && comp2->history->stable > history->stable ) - history->stable = comp2->history->stable; - history->val = comp1->grey_level; - history->size = comp1->size; - // put comp1 to history - comp->var = comp1->var; - comp->dvar = comp1->dvar; - if ( comp1->size > 0 && comp2->size > 0 ) - { - comp1->tail->next = comp2->head; - comp2->head->prev = comp1->tail; - } - head = ( comp1->size > 0 ) ? comp1->head : comp2->head; - tail = ( comp2->size > 0 ) ? comp2->tail : comp1->tail; - // always made the newly added in the last of the pixel list (comp1 ... comp2) - } else { - if ( NULL == comp2->history ) - { - history->shortcut = history; - history->stable = 0; - } else { - comp2->history->child = history; - history->shortcut = comp2->history->shortcut; - history->stable = comp2->history->stable; - } - if ( NULL != comp1->history && comp1->history->stable > history->stable ) - history->stable = comp1->history->stable; - history->val = comp2->grey_level; - history->size = comp2->size; - // put comp2 to history - comp->var = comp2->var; - comp->dvar = comp2->dvar; - if ( comp1->size > 0 && comp2->size > 0 ) - { - comp2->tail->next = comp1->head; - comp1->head->prev = comp2->tail; - } - head = ( comp2->size > 0 ) ? comp2->head : comp1->head; - tail = ( comp1->size > 0 ) ? comp1->tail : comp2->tail; - // always made the newly added in the last of the pixel list (comp2 ... comp1) - } - comp->head = head; - comp->tail = tail; - comp->history = history; - comp->size = comp1->size + comp2->size; -} - -static float -MSERVariationCalc( MSERConnectedComp* comp, int delta ) -{ - MSERGrowHistory* history = comp->history; - int val = comp->grey_level; - if ( NULL != history ) - { - MSERGrowHistory* shortcut = history->shortcut; - while ( shortcut != shortcut->shortcut && shortcut->val + delta > val ) - shortcut = shortcut->shortcut; - MSERGrowHistory* child = shortcut->child; - while ( child != child->child && child->val + delta <= val ) - { - shortcut = child; - child = child->child; - } - // get the position of history where the shortcut->val <= delta+val and shortcut->child->val >= delta+val - history->shortcut = shortcut; - return (float)(comp->size-shortcut->size)/(float)shortcut->size; - // here is a small modification of MSER where cal ||R_{i}-R_{i-delta}||/||R_{i-delta}|| - // in standard MSER, cal ||R_{i+delta}-R_{i-delta}||/||R_{i}|| - // my calculation is simpler and much easier to implement - } - return 1.; -} - -static bool MSERStableCheck( MSERConnectedComp* comp, MSERParams params ) -{ - // tricky part: it actually check the stablity of one-step back - if ( comp->history == NULL || comp->history->size <= params.minArea || comp->history->size >= params.maxArea ) - return 0; - float div = (float)(comp->history->size-comp->history->stable)/(float)comp->history->size; - float var = MSERVariationCalc( comp, params.delta ); - int dvar = ( comp->var < var || (unsigned long)(comp->history->val + 1) < comp->grey_level ); - int stable = ( dvar && !comp->dvar && comp->var < params.maxVariation && div > params.minDiversity ); - comp->var = var; - comp->dvar = dvar; - if ( stable ) - comp->history->stable = comp->history->size; - return stable != 0; -} - -// add a pixel to the pixel list -static void accumulateMSERComp( MSERConnectedComp* comp, LinkedPoint* point ) -{ - if ( comp->size > 0 ) - { - point->prev = comp->tail; - comp->tail->next = point; - point->next = NULL; - } else { - point->prev = NULL; - point->next = NULL; - comp->head = point; - } - comp->tail = point; - comp->size++; -} - -// convert the point set to CvSeq -static CvContour* MSERToContour( MSERConnectedComp* comp, CvMemStorage* storage ) -{ - CvSeq* _contour = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvContour), sizeof(CvPoint), storage ); - CvContour* contour = (CvContour*)_contour; - cvSeqPushMulti( _contour, 0, comp->history->size ); - LinkedPoint* lpt = comp->head; - for ( int i = 0; i < comp->history->size; i++ ) - { - CvPoint* pt = CV_GET_SEQ_ELEM( CvPoint, _contour, i ); - pt->x = lpt->pt.x; - pt->y = lpt->pt.y; - lpt = lpt->next; - } - cvBoundingRect( contour ); - return contour; -} - -// to preprocess src image to following format -// 32-bit image -// > 0 is available, < 0 is visited -// 17~19 bits is the direction -// 8~11 bits is the bucket it falls to (for BitScanForward) -// 0~8 bits is the color -static int* preprocessMSER_8UC1( CvMat* img, - int*** heap_cur, - CvMat* src, - CvMat* mask ) -{ - int srccpt = src->step-src->cols; - int cpt_1 = img->cols-src->cols-1; - int* imgptr = img->data.i; - int* startptr; - - int level_size[256]; - for ( int i = 0; i < 256; i++ ) - level_size[i] = 0; - - for ( int i = 0; i < src->cols+2; i++ ) - { - *imgptr = -1; - imgptr++; - } - imgptr += cpt_1-1; - uchar* srcptr = src->data.ptr; - if ( mask ) - { - startptr = 0; - uchar* maskptr = mask->data.ptr; - for ( int i = 0; i < src->rows; i++ ) - { - *imgptr = -1; - imgptr++; - for ( int j = 0; j < src->cols; j++ ) - { - if ( *maskptr ) - { - if ( !startptr ) - startptr = imgptr; - *srcptr = 0xff-*srcptr; - level_size[*srcptr]++; - *imgptr = ((*srcptr>>5)<<8)|(*srcptr); - } else { - *imgptr = -1; - } - imgptr++; - srcptr++; - maskptr++; - } - *imgptr = -1; - imgptr += cpt_1; - srcptr += srccpt; - maskptr += srccpt; - } - } else { - startptr = imgptr+img->cols+1; - for ( int i = 0; i < src->rows; i++ ) - { - *imgptr = -1; - imgptr++; - for ( int j = 0; j < src->cols; j++ ) - { - *srcptr = 0xff-*srcptr; - level_size[*srcptr]++; - *imgptr = ((*srcptr>>5)<<8)|(*srcptr); - imgptr++; - srcptr++; - } - *imgptr = -1; - imgptr += cpt_1; - srcptr += srccpt; - } - } - for ( int i = 0; i < src->cols+2; i++ ) - { - *imgptr = -1; - imgptr++; - } - - heap_cur[0][0] = 0; - for ( int i = 1; i < 256; i++ ) - { - heap_cur[i] = heap_cur[i-1]+level_size[i-1]+1; - heap_cur[i][0] = 0; - } - return startptr; -} - -static void extractMSER_8UC1_Pass( int* ioptr, - int* imgptr, - int*** heap_cur, - LinkedPoint* ptsptr, - MSERGrowHistory* histptr, - MSERConnectedComp* comptr, - int step, - int stepmask, - int stepgap, - MSERParams params, - int color, - CvSeq* contours, - CvMemStorage* storage ) -{ - comptr->grey_level = 256; - comptr++; - comptr->grey_level = (*imgptr)&0xff; - initMSERComp( comptr ); - *imgptr |= 0x80000000; - heap_cur += (*imgptr)&0xff; - int dir[] = { 1, step, -1, -step }; -#ifdef __INTRIN_ENABLED__ - unsigned long heapbit[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - unsigned long* bit_cur = heapbit+(((*imgptr)&0x700)>>8); -#endif - for ( ; ; ) - { - // take tour of all the 4 directions - while ( ((*imgptr)&0x70000) < 0x40000 ) - { - // get the neighbor - int* imgptr_nbr = imgptr+dir[((*imgptr)&0x70000)>>16]; - if ( *imgptr_nbr >= 0 ) // if the neighbor is not visited yet - { - *imgptr_nbr |= 0x80000000; // mark it as visited - if ( ((*imgptr_nbr)&0xff) < ((*imgptr)&0xff) ) - { - // when the value of neighbor smaller than current - // push current to boundary heap and make the neighbor to be the current one - // create an empty comp - (*heap_cur)++; - **heap_cur = imgptr; - *imgptr += 0x10000; - heap_cur += ((*imgptr_nbr)&0xff)-((*imgptr)&0xff); -#ifdef __INTRIN_ENABLED__ - _bitset( bit_cur, (*imgptr)&0x1f ); - bit_cur += (((*imgptr_nbr)&0x700)-((*imgptr)&0x700))>>8; -#endif - imgptr = imgptr_nbr; - comptr++; - initMSERComp( comptr ); - comptr->grey_level = (*imgptr)&0xff; - continue; - } else { - // otherwise, push the neighbor to boundary heap - heap_cur[((*imgptr_nbr)&0xff)-((*imgptr)&0xff)]++; - *heap_cur[((*imgptr_nbr)&0xff)-((*imgptr)&0xff)] = imgptr_nbr; -#ifdef __INTRIN_ENABLED__ - _bitset( bit_cur+((((*imgptr_nbr)&0x700)-((*imgptr)&0x700))>>8), (*imgptr_nbr)&0x1f ); -#endif - } - } - *imgptr += 0x10000; - } - int imsk = (int)(imgptr-ioptr); - ptsptr->pt = cvPoint( imsk&stepmask, imsk>>stepgap ); - // get the current location - accumulateMSERComp( comptr, ptsptr ); - ptsptr++; - // get the next pixel from boundary heap - if ( **heap_cur ) - { - imgptr = **heap_cur; - (*heap_cur)--; -#ifdef __INTRIN_ENABLED__ - if ( !**heap_cur ) - _bitreset( bit_cur, (*imgptr)&0x1f ); -#endif - } else { -#ifdef __INTRIN_ENABLED__ - bool found_pixel = 0; - unsigned long pixel_val; - for ( int i = ((*imgptr)&0x700)>>8; i < 8; i++ ) - { - if ( _BitScanForward( &pixel_val, *bit_cur ) ) - { - found_pixel = 1; - pixel_val += i<<5; - heap_cur += pixel_val-((*imgptr)&0xff); - break; - } - bit_cur++; - } - if ( found_pixel ) -#else - heap_cur++; - unsigned long pixel_val = 0; - for ( unsigned long i = ((*imgptr)&0xff)+1; i < 256; i++ ) - { - if ( **heap_cur ) - { - pixel_val = i; - break; - } - heap_cur++; - } - if ( pixel_val ) -#endif - { - imgptr = **heap_cur; - (*heap_cur)--; -#ifdef __INTRIN_ENABLED__ - if ( !**heap_cur ) - _bitreset( bit_cur, pixel_val&0x1f ); -#endif - if ( pixel_val < comptr[-1].grey_level ) - { - // check the stablity and push a new history, increase the grey level - if ( MSERStableCheck( comptr, params ) ) - { - CvContour* contour = MSERToContour( comptr, storage ); - contour->color = color; - cvSeqPush( contours, &contour ); - } - MSERNewHistory( comptr, histptr ); - comptr[0].grey_level = pixel_val; - histptr++; - } else { - // keep merging top two comp in stack until the grey level >= pixel_val - for ( ; ; ) - { - comptr--; - MSERMergeComp( comptr+1, comptr, comptr, histptr ); - histptr++; - if ( pixel_val <= comptr[0].grey_level ) - break; - if ( pixel_val < comptr[-1].grey_level ) - { - // check the stablity here otherwise it wouldn't be an ER - if ( MSERStableCheck( comptr, params ) ) - { - CvContour* contour = MSERToContour( comptr, storage ); - contour->color = color; - cvSeqPush( contours, &contour ); - } - MSERNewHistory( comptr, histptr ); - comptr[0].grey_level = pixel_val; - histptr++; - break; - } - } - } - } else - break; - } - } -} - -static void extractMSER_8UC1( CvMat* src, - CvMat* mask, - CvSeq* contours, - CvMemStorage* storage, - MSERParams params ) -{ - int step = 8; - int stepgap = 3; - while ( step < src->step+2 ) - { - step <<= 1; - stepgap++; - } - int stepmask = step-1; - - // to speedup the process, make the width to be 2^N - CvMat* img = cvCreateMat( src->rows+2, step, CV_32SC1 ); - int* ioptr = img->data.i+step+1; - int* imgptr; - - // pre-allocate boundary heap - int** heap = (int**)cvAlloc( (src->rows*src->cols+256)*sizeof(heap[0]) ); - int** heap_start[256]; - heap_start[0] = heap; - - // pre-allocate linked point and grow history - LinkedPoint* pts = (LinkedPoint*)cvAlloc( src->rows*src->cols*sizeof(pts[0]) ); - MSERGrowHistory* history = (MSERGrowHistory*)cvAlloc( src->rows*src->cols*sizeof(history[0]) ); - MSERConnectedComp comp[257]; - - // darker to brighter (MSER-) - imgptr = preprocessMSER_8UC1( img, heap_start, src, mask ); - extractMSER_8UC1_Pass( ioptr, imgptr, heap_start, pts, history, comp, step, stepmask, stepgap, params, -1, contours, storage ); - // brighter to darker (MSER+) - imgptr = preprocessMSER_8UC1( img, heap_start, src, mask ); - extractMSER_8UC1_Pass( ioptr, imgptr, heap_start, pts, history, comp, step, stepmask, stepgap, params, 1, contours, storage ); - - // clean up - cvFree( &history ); - cvFree( &heap ); - cvFree( &pts ); - cvReleaseMat( &img ); -} - -struct MSCRNode; - -struct TempMSCR -{ - MSCRNode* head; - MSCRNode* tail; - double m; // the margin used to prune area later - int size; -}; - -struct MSCRNode -{ - MSCRNode* shortcut; - // to make the finding of root less painful - MSCRNode* prev; - MSCRNode* next; - // a point double-linked list - TempMSCR* tmsr; - // the temporary msr (set to NULL at every re-initialise) - TempMSCR* gmsr; - // the global msr (once set, never to NULL) - int index; - // the index of the node, at this point, it should be x at the first 16-bits, and y at the last 16-bits. - int rank; - int reinit; - int size, sizei; - double dt, di; - double s; -}; - -struct MSCREdge -{ - double chi; - MSCRNode* left; - MSCRNode* right; -}; - -static double ChiSquaredDistance( uchar* x, uchar* y ) -{ - return (double)((x[0]-y[0])*(x[0]-y[0]))/(double)(x[0]+y[0]+1e-10)+ - (double)((x[1]-y[1])*(x[1]-y[1]))/(double)(x[1]+y[1]+1e-10)+ - (double)((x[2]-y[2])*(x[2]-y[2]))/(double)(x[2]+y[2]+1e-10); -} - -static void initMSCRNode( MSCRNode* node ) -{ - node->gmsr = node->tmsr = NULL; - node->reinit = 0xffff; - node->rank = 0; - node->sizei = node->size = 1; - node->prev = node->next = node->shortcut = node; -} - -// the preprocess to get the edge list with proper gaussian blur -static int preprocessMSER_8UC3( MSCRNode* node, - MSCREdge* edge, - double* total, - CvMat* src, - CvMat* mask, - CvMat* dx, - CvMat* dy, - int Ne, - int edgeBlurSize ) -{ - int srccpt = src->step-src->cols*3; - uchar* srcptr = src->data.ptr; - uchar* lastptr = src->data.ptr+3; - double* dxptr = dx->data.db; - for ( int i = 0; i < src->rows; i++ ) - { - for ( int j = 0; j < src->cols-1; j++ ) - { - *dxptr = ChiSquaredDistance( srcptr, lastptr ); - dxptr++; - srcptr += 3; - lastptr += 3; - } - srcptr += srccpt+3; - lastptr += srccpt+3; - } - srcptr = src->data.ptr; - lastptr = src->data.ptr+src->step; - double* dyptr = dy->data.db; - for ( int i = 0; i < src->rows-1; i++ ) - { - for ( int j = 0; j < src->cols; j++ ) - { - *dyptr = ChiSquaredDistance( srcptr, lastptr ); - dyptr++; - srcptr += 3; - lastptr += 3; - } - srcptr += srccpt; - lastptr += srccpt; - } - // get dx and dy and blur it - if ( edgeBlurSize >= 1 ) - { - cvSmooth( dx, dx, CV_GAUSSIAN, edgeBlurSize, edgeBlurSize ); - cvSmooth( dy, dy, CV_GAUSSIAN, edgeBlurSize, edgeBlurSize ); - } - dxptr = dx->data.db; - dyptr = dy->data.db; - // assian dx, dy to proper edge list and initialize mscr node - // the nasty code here intended to avoid extra loops - if ( mask ) - { - Ne = 0; - int maskcpt = mask->step-mask->cols+1; - uchar* maskptr = mask->data.ptr; - MSCRNode* nodeptr = node; - initMSCRNode( nodeptr ); - nodeptr->index = 0; - *total += edge->chi = *dxptr; - if ( maskptr[0] && maskptr[1] ) - { - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - dxptr++; - nodeptr++; - maskptr++; - for ( int i = 1; i < src->cols-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = i; - if ( maskptr[0] && maskptr[1] ) - { - *total += edge->chi = *dxptr; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - dxptr++; - nodeptr++; - maskptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = src->cols-1; - nodeptr++; - maskptr += maskcpt; - for ( int i = 1; i < src->rows-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = i<<16; - if ( maskptr[0] ) - { - if ( maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - Ne++; - } - if ( maskptr[1] ) - { - *total += edge->chi = *dxptr; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - } - dyptr++; - dxptr++; - nodeptr++; - maskptr++; - for ( int j = 1; j < src->cols-1; j++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = (i<<16)|j; - if ( maskptr[0] ) - { - if ( maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - Ne++; - } - if ( maskptr[1] ) - { - *total += edge->chi = *dxptr; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - } - dyptr++; - dxptr++; - nodeptr++; - maskptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = (i<<16)|(src->cols-1); - if ( maskptr[0] && maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - Ne++; - } - dyptr++; - nodeptr++; - maskptr += maskcpt; - } - initMSCRNode( nodeptr ); - nodeptr->index = (src->rows-1)<<16; - if ( maskptr[0] ) - { - if ( maskptr[1] ) - { - *total += edge->chi = *dxptr; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - if ( maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - Ne++; - } - } - dxptr++; - dyptr++; - nodeptr++; - maskptr++; - for ( int i = 1; i < src->cols-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = ((src->rows-1)<<16)|i; - if ( maskptr[0] ) - { - if ( maskptr[1] ) - { - *total += edge->chi = *dxptr; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - Ne++; - } - if ( maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - Ne++; - } - } - dxptr++; - dyptr++; - nodeptr++; - maskptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = ((src->rows-1)<<16)|(src->cols-1); - if ( maskptr[0] && maskptr[-mask->step] ) - { - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - Ne++; - } - } else { - MSCRNode* nodeptr = node; - initMSCRNode( nodeptr ); - nodeptr->index = 0; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - nodeptr++; - for ( int i = 1; i < src->cols-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = i; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - nodeptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = src->cols-1; - nodeptr++; - for ( int i = 1; i < src->rows-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = i<<16; - *total += edge->chi = *dyptr; - dyptr++; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - nodeptr++; - for ( int j = 1; j < src->cols-1; j++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = (i<<16)|j; - *total += edge->chi = *dyptr; - dyptr++; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - nodeptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = (i<<16)|(src->cols-1); - *total += edge->chi = *dyptr; - dyptr++; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - nodeptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = (src->rows-1)<<16; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - *total += edge->chi = *dyptr; - dyptr++; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - nodeptr++; - for ( int i = 1; i < src->cols-1; i++ ) - { - initMSCRNode( nodeptr ); - nodeptr->index = ((src->rows-1)<<16)|i; - *total += edge->chi = *dxptr; - dxptr++; - edge->left = nodeptr; - edge->right = nodeptr+1; - edge++; - *total += edge->chi = *dyptr; - dyptr++; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - edge++; - nodeptr++; - } - initMSCRNode( nodeptr ); - nodeptr->index = ((src->rows-1)<<16)|(src->cols-1); - *total += edge->chi = *dyptr; - edge->left = nodeptr-src->cols; - edge->right = nodeptr; - } - return Ne; -} - -#define cmp_mscr_edge(edge1, edge2) \ - ((edge1).chi < (edge2).chi) - -static CV_IMPLEMENT_QSORT( QuickSortMSCREdge, MSCREdge, cmp_mscr_edge ) - -// to find the root of one region -static MSCRNode* findMSCR( MSCRNode* x ) -{ - MSCRNode* prev = x; - MSCRNode* next; - for ( ; ; ) - { - next = x->shortcut; - x->shortcut = prev; - if ( next == x ) break; - prev= x; - x = next; - } - MSCRNode* root = x; - for ( ; ; ) - { - prev = x->shortcut; - x->shortcut = root; - if ( prev == x ) break; - x = prev; - } - return root; -} - -// the stable mscr should be: -// bigger than minArea and smaller than maxArea -// differ from its ancestor more than minDiversity -static bool MSCRStableCheck( MSCRNode* x, MSERParams params ) -{ - if ( x->size <= params.minArea || x->size >= params.maxArea ) - return 0; - if ( x->gmsr == NULL ) - return 1; - double div = (double)(x->size-x->gmsr->size)/(double)x->size; - return div > params.minDiversity; -} - -static void -extractMSER_8UC3( CvMat* src, - CvMat* mask, - CvSeq* contours, - CvMemStorage* storage, - MSERParams params ) -{ - MSCRNode* map = (MSCRNode*)cvAlloc( src->cols*src->rows*sizeof(map[0]) ); - int Ne = src->cols*src->rows*2-src->cols-src->rows; - MSCREdge* edge = (MSCREdge*)cvAlloc( Ne*sizeof(edge[0]) ); - TempMSCR* mscr = (TempMSCR*)cvAlloc( src->cols*src->rows*sizeof(mscr[0]) ); - double emean = 0; - CvMat* dx = cvCreateMat( src->rows, src->cols-1, CV_64FC1 ); - CvMat* dy = cvCreateMat( src->rows-1, src->cols, CV_64FC1 ); - Ne = preprocessMSER_8UC3( map, edge, &emean, src, mask, dx, dy, Ne, params.edgeBlurSize ); - emean = emean / (double)Ne; - QuickSortMSCREdge( edge, Ne, 0 ); - MSCREdge* edge_ub = edge+Ne; - MSCREdge* edgeptr = edge; - TempMSCR* mscrptr = mscr; - // the evolution process - for ( int i = 0; i < params.maxEvolution; i++ ) - { - double k = (double)i/(double)params.maxEvolution*(TABLE_SIZE-1); - int ti = cvFloor(k); - double reminder = k-ti; - double thres = emean*(chitab3[ti]*(1-reminder)+chitab3[ti+1]*reminder); - // to process all the edges in the list that chi < thres - while ( edgeptr < edge_ub && edgeptr->chi < thres ) - { - MSCRNode* lr = findMSCR( edgeptr->left ); - MSCRNode* rr = findMSCR( edgeptr->right ); - // get the region root (who is responsible) - if ( lr != rr ) - { - // rank idea take from: N-tree Disjoint-Set Forests for Maximally Stable Extremal Regions - if ( rr->rank > lr->rank ) - { - MSCRNode* tmp; - CV_SWAP( lr, rr, tmp ); - } else if ( lr->rank == rr->rank ) { - // at the same rank, we will compare the size - if ( lr->size > rr->size ) - { - MSCRNode* tmp; - CV_SWAP( lr, rr, tmp ); - } - lr->rank++; - } - rr->shortcut = lr; - lr->size += rr->size; - // join rr to the end of list lr (lr is a endless double-linked list) - lr->prev->next = rr; - lr->prev = rr->prev; - rr->prev->next = lr; - rr->prev = lr; - // area threshold force to reinitialize - if ( lr->size > (lr->size-rr->size)*params.areaThreshold ) - { - lr->sizei = lr->size; - lr->reinit = i; - if ( lr->tmsr != NULL ) - { - lr->tmsr->m = lr->dt-lr->di; - lr->tmsr = NULL; - } - lr->di = edgeptr->chi; - lr->s = 1e10; - } - lr->dt = edgeptr->chi; - if ( i > lr->reinit ) - { - double s = (double)(lr->size-lr->sizei)/(lr->dt-lr->di); - if ( s < lr->s ) - { - // skip the first one and check stablity - if ( i > lr->reinit+1 && MSCRStableCheck( lr, params ) ) - { - if ( lr->tmsr == NULL ) - { - lr->gmsr = lr->tmsr = mscrptr; - mscrptr++; - } - lr->tmsr->size = lr->size; - lr->tmsr->head = lr; - lr->tmsr->tail = lr->prev; - lr->tmsr->m = 0; - } - lr->s = s; - } - } - } - edgeptr++; - } - if ( edgeptr >= edge_ub ) - break; - } - for ( TempMSCR* ptr = mscr; ptr < mscrptr; ptr++ ) - // to prune area with margin less than minMargin - if ( ptr->m > params.minMargin ) - { - CvSeq* _contour = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvContour), sizeof(CvPoint), storage ); - cvSeqPushMulti( _contour, 0, ptr->size ); - MSCRNode* lpt = ptr->head; - for ( int i = 0; i < ptr->size; i++ ) - { - CvPoint* pt = CV_GET_SEQ_ELEM( CvPoint, _contour, i ); - pt->x = (lpt->index)&0xffff; - pt->y = (lpt->index)>>16; - lpt = lpt->next; - } - CvContour* contour = (CvContour*)_contour; - cvBoundingRect( contour ); - contour->color = 0; - cvSeqPush( contours, &contour ); - } - cvReleaseMat( &dx ); - cvReleaseMat( &dy ); - cvFree( &mscr ); - cvFree( &edge ); - cvFree( &map ); -} - -static void -extractMSER( CvArr* _img, - CvArr* _mask, - CvSeq** _contours, - CvMemStorage* storage, - MSERParams params ) -{ - CvMat srchdr, *src = cvGetMat( _img, &srchdr ); - CvMat maskhdr, *mask = _mask ? cvGetMat( _mask, &maskhdr ) : 0; - CvSeq* contours = 0; - - CV_Assert(src != 0); - CV_Assert(CV_MAT_TYPE(src->type) == CV_8UC1 || CV_MAT_TYPE(src->type) == CV_8UC3); - CV_Assert(mask == 0 || (CV_ARE_SIZES_EQ(src, mask) && CV_MAT_TYPE(mask->type) == CV_8UC1)); - CV_Assert(storage != 0); - - contours = *_contours = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvSeq*), storage ); - - // choose different method for different image type - // for grey image, it is: Linear Time Maximally Stable Extremal Regions - // for color image, it is: Maximally Stable Colour Regions for Recognition and Matching - switch ( CV_MAT_TYPE(src->type) ) - { - case CV_8UC1: - extractMSER_8UC1( src, mask, contours, storage, params ); - break; - case CV_8UC3: - extractMSER_8UC3( src, mask, contours, storage, params ); - break; - } -} - - -MSER::MSER( int _delta, int _min_area, int _max_area, - double _max_variation, double _min_diversity, - int _max_evolution, double _area_threshold, - double _min_margin, int _edge_blur_size ) - : delta(_delta), minArea(_min_area), maxArea(_max_area), - maxVariation(_max_variation), minDiversity(_min_diversity), - maxEvolution(_max_evolution), areaThreshold(_area_threshold), - minMargin(_min_margin), edgeBlurSize(_edge_blur_size) -{ -} - -void MSER::operator()( const Mat& image, vector >& dstcontours, const Mat& mask ) const -{ - CvMat _image = image, _mask, *pmask = 0; - if( mask.data ) - pmask = &(_mask = mask); - MemStorage storage(cvCreateMemStorage(0)); - Seq contours; - extractMSER( &_image, pmask, &contours.seq, storage, - MSERParams(delta, minArea, maxArea, maxVariation, minDiversity, - maxEvolution, areaThreshold, minMargin, edgeBlurSize)); - SeqIterator it = contours.begin(); - size_t i, ncontours = contours.size(); - dstcontours.resize(ncontours); - for( i = 0; i < ncontours; i++, ++it ) - Seq(*it).copyTo(dstcontours[i]); -} - - -void MserFeatureDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - vector > msers; - - (*this)(image, msers, mask); - - vector >::const_iterator contour_it = msers.begin(); - Rect r(0, 0, image.cols, image.rows); - for( ; contour_it != msers.end(); ++contour_it ) - { - // TODO check transformation from MSER region to KeyPoint - RotatedRect rect = fitEllipse(Mat(*contour_it)); - float diam = sqrt(rect.size.height*rect.size.width); - - if( diam > std::numeric_limits::epsilon() && r.contains(rect.center) ) - keypoints.push_back( KeyPoint(rect.center, diam) ); - } - -} - -} diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp deleted file mode 100644 index dd81c5f..0000000 --- a/modules/features2d/src/orb.cpp +++ /dev/null @@ -1,951 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2009, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must 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 Willow Garage 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/** Authors: Ethan Rublee, Vincent Rabaud, Gary Bradski */ - -#include "precomp.hpp" -#include - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -namespace cv -{ - -const float HARRIS_K = 0.04f; -const int DESCRIPTOR_SIZE = 32; - -/** - * Function that computes the Harris responses in a - * blockSize x blockSize patch at given points in an image - */ -static void -HarrisResponses(const Mat& img, vector& pts, int blockSize, float harris_k) -{ - CV_Assert( img.type() == CV_8UC1 && blockSize*blockSize <= 2048 ); - - size_t ptidx, ptsize = pts.size(); - - const uchar* ptr00 = img.ptr(); - int step = (int)(img.step/img.elemSize1()); - int r = blockSize/2; - - float scale = (1 << 2) * blockSize * 255.0f; - scale = 1.0f / scale; - float scale_sq_sq = scale * scale * scale * scale; - - AutoBuffer ofsbuf(blockSize*blockSize); - int* ofs = ofsbuf; - for( int i = 0; i < blockSize; i++ ) - for( int j = 0; j < blockSize; j++ ) - ofs[i*blockSize + j] = (int)(i*step + j); - - for( ptidx = 0; ptidx < ptsize; ptidx++ ) - { - int x0 = cvRound(pts[ptidx].pt.x - r); - int y0 = cvRound(pts[ptidx].pt.y - r); - - const uchar* ptr0 = ptr00 + y0*step + x0; - int a = 0, b = 0, c = 0; - - for( int k = 0; k < blockSize*blockSize; k++ ) - { - const uchar* ptr = ptr0 + ofs[k]; - int Ix = (ptr[1] - ptr[-1])*2 + (ptr[-step+1] - ptr[-step-1]) + (ptr[step+1] - ptr[step-1]); - int Iy = (ptr[step] - ptr[-step])*2 + (ptr[step-1] - ptr[-step-1]) + (ptr[step+1] - ptr[-step+1]); - a += Ix*Ix; - b += Iy*Iy; - c += Ix*Iy; - } - pts[ptidx].response = ((float)a * b - (float)c * c - - harris_k * ((float)a + b) * ((float)a + b))*scale_sq_sq; - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -static float IC_Angle(const Mat& image, const int half_k, Point2f pt, - const vector & u_max) -{ - int m_01 = 0, m_10 = 0; - - const uchar* center = &image.at (cvRound(pt.y), cvRound(pt.x)); - - // Treat the center line differently, v=0 - for (int u = -half_k; u <= half_k; ++u) - m_10 += u * center[u]; - - // Go line by line in the circular patch - int step = (int)image.step1(); - for (int v = 1; v <= half_k; ++v) - { - // Proceed over the two lines - int v_sum = 0; - int d = u_max[v]; - for (int u = -d; u <= d; ++u) - { - int val_plus = center[u + v*step], val_minus = center[u - v*step]; - v_sum += (val_plus - val_minus); - m_10 += u * (val_plus + val_minus); - } - m_01 += v * v_sum; - } - - return fastAtan2((float)m_01, (float)m_10); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -static void computeOrbDescriptor(const KeyPoint& kpt, - const Mat& img, const Point* pattern, - uchar* desc, int dsize, int WTA_K) -{ - float angle = kpt.angle; - //angle = cvFloor(angle/12)*12.f; - angle *= (float)(CV_PI/180.f); - float a = (float)cos(angle), b = (float)sin(angle); - - const uchar* center = &img.at(cvRound(kpt.pt.y), cvRound(kpt.pt.x)); - int step = (int)img.step; - - float x, y; - int ix, iy; -#if 1 - #define GET_VALUE(idx) \ - (x = pattern[idx].x*a - pattern[idx].y*b, \ - y = pattern[idx].x*b + pattern[idx].y*a, \ - ix = cvRound(x), \ - iy = cvRound(y), \ - *(center + iy*step + ix) ) -#else - #define GET_VALUE(idx) \ - (x = pattern[idx].x*a - pattern[idx].y*b, \ - y = pattern[idx].x*b + pattern[idx].y*a, \ - ix = cvFloor(x), iy = cvFloor(y), \ - x -= ix, y -= iy, \ - cvRound(center[iy*step + ix]*(1-x)*(1-y) + center[(iy+1)*step + ix]*(1-x)*y + \ - center[iy*step + ix+1]*x*(1-y) + center[(iy+1)*step + ix+1]*x*y)) -#endif - - if( WTA_K == 2 ) - { - for (int i = 0; i < dsize; ++i, pattern += 16) - { - int t0, t1, val; - t0 = GET_VALUE(0); t1 = GET_VALUE(1); - val = t0 < t1; - t0 = GET_VALUE(2); t1 = GET_VALUE(3); - val |= (t0 < t1) << 1; - t0 = GET_VALUE(4); t1 = GET_VALUE(5); - val |= (t0 < t1) << 2; - t0 = GET_VALUE(6); t1 = GET_VALUE(7); - val |= (t0 < t1) << 3; - t0 = GET_VALUE(8); t1 = GET_VALUE(9); - val |= (t0 < t1) << 4; - t0 = GET_VALUE(10); t1 = GET_VALUE(11); - val |= (t0 < t1) << 5; - t0 = GET_VALUE(12); t1 = GET_VALUE(13); - val |= (t0 < t1) << 6; - t0 = GET_VALUE(14); t1 = GET_VALUE(15); - val |= (t0 < t1) << 7; - - desc[i] = (uchar)val; - } - } - else if( WTA_K == 3 ) - { - for (int i = 0; i < dsize; ++i, pattern += 12) - { - int t0, t1, t2, val; - t0 = GET_VALUE(0); t1 = GET_VALUE(1); t2 = GET_VALUE(2); - val = t2 > t1 ? (t2 > t0 ? 2 : 0) : (t1 > t0); - - t0 = GET_VALUE(3); t1 = GET_VALUE(4); t2 = GET_VALUE(5); - val |= (t2 > t1 ? (t2 > t0 ? 2 : 0) : (t1 > t0)) << 2; - - t0 = GET_VALUE(6); t1 = GET_VALUE(7); t2 = GET_VALUE(8); - val |= (t2 > t1 ? (t2 > t0 ? 2 : 0) : (t1 > t0)) << 4; - - t0 = GET_VALUE(9); t1 = GET_VALUE(10); t2 = GET_VALUE(11); - val |= (t2 > t1 ? (t2 > t0 ? 2 : 0) : (t1 > t0)) << 6; - - desc[i] = (uchar)val; - } - } - else if( WTA_K == 4 ) - { - for (int i = 0; i < dsize; ++i, pattern += 16) - { - int t0, t1, t2, t3, u, v, k, val; - t0 = GET_VALUE(0); t1 = GET_VALUE(1); - t2 = GET_VALUE(2); t3 = GET_VALUE(3); - u = 0, v = 2; - if( t1 > t0 ) t0 = t1, u = 1; - if( t3 > t2 ) t2 = t3, v = 3; - k = t0 > t2 ? u : v; - val = k; - - t0 = GET_VALUE(4); t1 = GET_VALUE(5); - t2 = GET_VALUE(6); t3 = GET_VALUE(7); - u = 0, v = 2; - if( t1 > t0 ) t0 = t1, u = 1; - if( t3 > t2 ) t2 = t3, v = 3; - k = t0 > t2 ? u : v; - val |= k << 2; - - t0 = GET_VALUE(8); t1 = GET_VALUE(9); - t2 = GET_VALUE(10); t3 = GET_VALUE(11); - u = 0, v = 2; - if( t1 > t0 ) t0 = t1, u = 1; - if( t3 > t2 ) t2 = t3, v = 3; - k = t0 > t2 ? u : v; - val |= k << 4; - - t0 = GET_VALUE(12); t1 = GET_VALUE(13); - t2 = GET_VALUE(14); t3 = GET_VALUE(15); - u = 0, v = 2; - if( t1 > t0 ) t0 = t1, u = 1; - if( t3 > t2 ) t2 = t3, v = 3; - k = t0 > t2 ? u : v; - val |= k << 6; - - desc[i] = (uchar)val; - } - } - else - CV_Error( CV_StsBadSize, "Wrong WTA_K. It can be only 2, 3 or 4." ); - - #undef GET_VALUE -} - - -static void initializeOrbPattern( const Point* pattern0, vector& pattern, int ntuples, int tupleSize, int poolSize ) -{ - RNG rng(0x12345678); - int i, k, k1; - pattern.resize(ntuples*tupleSize); - - for( i = 0; i < ntuples; i++ ) - { - for( k = 0; k < tupleSize; k++ ) - { - for(;;) - { - int idx = rng.uniform(0, poolSize); - Point pt = pattern0[idx]; - for( k1 = 0; k1 < k; k1++ ) - if( pattern[tupleSize*i + k1] == pt ) - break; - if( k1 == k ) - { - pattern[tupleSize*i + k] = pt; - break; - } - } - } - } -} - -static int bit_pattern_31_[256*4] = -{ - 8,-3, 9,5/*mean (0), correlation (0)*/, - 4,2, 7,-12/*mean (1.12461e-05), correlation (0.0437584)*/, - -11,9, -8,2/*mean (3.37382e-05), correlation (0.0617409)*/, - 7,-12, 12,-13/*mean (5.62303e-05), correlation (0.0636977)*/, - 2,-13, 2,12/*mean (0.000134953), correlation (0.085099)*/, - 1,-7, 1,6/*mean (0.000528565), correlation (0.0857175)*/, - -2,-10, -2,-4/*mean (0.0188821), correlation (0.0985774)*/, - -13,-13, -11,-8/*mean (0.0363135), correlation (0.0899616)*/, - -13,-3, -12,-9/*mean (0.121806), correlation (0.099849)*/, - 10,4, 11,9/*mean (0.122065), correlation (0.093285)*/, - -13,-8, -8,-9/*mean (0.162787), correlation (0.0942748)*/, - -11,7, -9,12/*mean (0.21561), correlation (0.0974438)*/, - 7,7, 12,6/*mean (0.160583), correlation (0.130064)*/, - -4,-5, -3,0/*mean (0.228171), correlation (0.132998)*/, - -13,2, -12,-3/*mean (0.00997526), correlation (0.145926)*/, - -9,0, -7,5/*mean (0.198234), correlation (0.143636)*/, - 12,-6, 12,-1/*mean (0.0676226), correlation (0.16689)*/, - -3,6, -2,12/*mean (0.166847), correlation (0.171682)*/, - -6,-13, -4,-8/*mean (0.101215), correlation (0.179716)*/, - 11,-13, 12,-8/*mean (0.200641), correlation (0.192279)*/, - 4,7, 5,1/*mean (0.205106), correlation (0.186848)*/, - 5,-3, 10,-3/*mean (0.234908), correlation (0.192319)*/, - 3,-7, 6,12/*mean (0.0709964), correlation (0.210872)*/, - -8,-7, -6,-2/*mean (0.0939834), correlation (0.212589)*/, - -2,11, -1,-10/*mean (0.127778), correlation (0.20866)*/, - -13,12, -8,10/*mean (0.14783), correlation (0.206356)*/, - -7,3, -5,-3/*mean (0.182141), correlation (0.198942)*/, - -4,2, -3,7/*mean (0.188237), correlation (0.21384)*/, - -10,-12, -6,11/*mean (0.14865), correlation (0.23571)*/, - 5,-12, 6,-7/*mean (0.222312), correlation (0.23324)*/, - 5,-6, 7,-1/*mean (0.229082), correlation (0.23389)*/, - 1,0, 4,-5/*mean (0.241577), correlation (0.215286)*/, - 9,11, 11,-13/*mean (0.00338507), correlation (0.251373)*/, - 4,7, 4,12/*mean (0.131005), correlation (0.257622)*/, - 2,-1, 4,4/*mean (0.152755), correlation (0.255205)*/, - -4,-12, -2,7/*mean (0.182771), correlation (0.244867)*/, - -8,-5, -7,-10/*mean (0.186898), correlation (0.23901)*/, - 4,11, 9,12/*mean (0.226226), correlation (0.258255)*/, - 0,-8, 1,-13/*mean (0.0897886), correlation (0.274827)*/, - -13,-2, -8,2/*mean (0.148774), correlation (0.28065)*/, - -3,-2, -2,3/*mean (0.153048), correlation (0.283063)*/, - -6,9, -4,-9/*mean (0.169523), correlation (0.278248)*/, - 8,12, 10,7/*mean (0.225337), correlation (0.282851)*/, - 0,9, 1,3/*mean (0.226687), correlation (0.278734)*/, - 7,-5, 11,-10/*mean (0.00693882), correlation (0.305161)*/, - -13,-6, -11,0/*mean (0.0227283), correlation (0.300181)*/, - 10,7, 12,1/*mean (0.125517), correlation (0.31089)*/, - -6,-3, -6,12/*mean (0.131748), correlation (0.312779)*/, - 10,-9, 12,-4/*mean (0.144827), correlation (0.292797)*/, - -13,8, -8,-12/*mean (0.149202), correlation (0.308918)*/, - -13,0, -8,-4/*mean (0.160909), correlation (0.310013)*/, - 3,3, 7,8/*mean (0.177755), correlation (0.309394)*/, - 5,7, 10,-7/*mean (0.212337), correlation (0.310315)*/, - -1,7, 1,-12/*mean (0.214429), correlation (0.311933)*/, - 3,-10, 5,6/*mean (0.235807), correlation (0.313104)*/, - 2,-4, 3,-10/*mean (0.00494827), correlation (0.344948)*/, - -13,0, -13,5/*mean (0.0549145), correlation (0.344675)*/, - -13,-7, -12,12/*mean (0.103385), correlation (0.342715)*/, - -13,3, -11,8/*mean (0.134222), correlation (0.322922)*/, - -7,12, -4,7/*mean (0.153284), correlation (0.337061)*/, - 6,-10, 12,8/*mean (0.154881), correlation (0.329257)*/, - -9,-1, -7,-6/*mean (0.200967), correlation (0.33312)*/, - -2,-5, 0,12/*mean (0.201518), correlation (0.340635)*/, - -12,5, -7,5/*mean (0.207805), correlation (0.335631)*/, - 3,-10, 8,-13/*mean (0.224438), correlation (0.34504)*/, - -7,-7, -4,5/*mean (0.239361), correlation (0.338053)*/, - -3,-2, -1,-7/*mean (0.240744), correlation (0.344322)*/, - 2,9, 5,-11/*mean (0.242949), correlation (0.34145)*/, - -11,-13, -5,-13/*mean (0.244028), correlation (0.336861)*/, - -1,6, 0,-1/*mean (0.247571), correlation (0.343684)*/, - 5,-3, 5,2/*mean (0.000697256), correlation (0.357265)*/, - -4,-13, -4,12/*mean (0.00213675), correlation (0.373827)*/, - -9,-6, -9,6/*mean (0.0126856), correlation (0.373938)*/, - -12,-10, -8,-4/*mean (0.0152497), correlation (0.364237)*/, - 10,2, 12,-3/*mean (0.0299933), correlation (0.345292)*/, - 7,12, 12,12/*mean (0.0307242), correlation (0.366299)*/, - -7,-13, -6,5/*mean (0.0534975), correlation (0.368357)*/, - -4,9, -3,4/*mean (0.099865), correlation (0.372276)*/, - 7,-1, 12,2/*mean (0.117083), correlation (0.364529)*/, - -7,6, -5,1/*mean (0.126125), correlation (0.369606)*/, - -13,11, -12,5/*mean (0.130364), correlation (0.358502)*/, - -3,7, -2,-6/*mean (0.131691), correlation (0.375531)*/, - 7,-8, 12,-7/*mean (0.160166), correlation (0.379508)*/, - -13,-7, -11,-12/*mean (0.167848), correlation (0.353343)*/, - 1,-3, 12,12/*mean (0.183378), correlation (0.371916)*/, - 2,-6, 3,0/*mean (0.228711), correlation (0.371761)*/, - -4,3, -2,-13/*mean (0.247211), correlation (0.364063)*/, - -1,-13, 1,9/*mean (0.249325), correlation (0.378139)*/, - 7,1, 8,-6/*mean (0.000652272), correlation (0.411682)*/, - 1,-1, 3,12/*mean (0.00248538), correlation (0.392988)*/, - 9,1, 12,6/*mean (0.0206815), correlation (0.386106)*/, - -1,-9, -1,3/*mean (0.0364485), correlation (0.410752)*/, - -13,-13, -10,5/*mean (0.0376068), correlation (0.398374)*/, - 7,7, 10,12/*mean (0.0424202), correlation (0.405663)*/, - 12,-5, 12,9/*mean (0.0942645), correlation (0.410422)*/, - 6,3, 7,11/*mean (0.1074), correlation (0.413224)*/, - 5,-13, 6,10/*mean (0.109256), correlation (0.408646)*/, - 2,-12, 2,3/*mean (0.131691), correlation (0.416076)*/, - 3,8, 4,-6/*mean (0.165081), correlation (0.417569)*/, - 2,6, 12,-13/*mean (0.171874), correlation (0.408471)*/, - 9,-12, 10,3/*mean (0.175146), correlation (0.41296)*/, - -8,4, -7,9/*mean (0.183682), correlation (0.402956)*/, - -11,12, -4,-6/*mean (0.184672), correlation (0.416125)*/, - 1,12, 2,-8/*mean (0.191487), correlation (0.386696)*/, - 6,-9, 7,-4/*mean (0.192668), correlation (0.394771)*/, - 2,3, 3,-2/*mean (0.200157), correlation (0.408303)*/, - 6,3, 11,0/*mean (0.204588), correlation (0.411762)*/, - 3,-3, 8,-8/*mean (0.205904), correlation (0.416294)*/, - 7,8, 9,3/*mean (0.213237), correlation (0.409306)*/, - -11,-5, -6,-4/*mean (0.243444), correlation (0.395069)*/, - -10,11, -5,10/*mean (0.247672), correlation (0.413392)*/, - -5,-8, -3,12/*mean (0.24774), correlation (0.411416)*/, - -10,5, -9,0/*mean (0.00213675), correlation (0.454003)*/, - 8,-1, 12,-6/*mean (0.0293635), correlation (0.455368)*/, - 4,-6, 6,-11/*mean (0.0404971), correlation (0.457393)*/, - -10,12, -8,7/*mean (0.0481107), correlation (0.448364)*/, - 4,-2, 6,7/*mean (0.050641), correlation (0.455019)*/, - -2,0, -2,12/*mean (0.0525978), correlation (0.44338)*/, - -5,-8, -5,2/*mean (0.0629667), correlation (0.457096)*/, - 7,-6, 10,12/*mean (0.0653846), correlation (0.445623)*/, - -9,-13, -8,-8/*mean (0.0858749), correlation (0.449789)*/, - -5,-13, -5,-2/*mean (0.122402), correlation (0.450201)*/, - 8,-8, 9,-13/*mean (0.125416), correlation (0.453224)*/, - -9,-11, -9,0/*mean (0.130128), correlation (0.458724)*/, - 1,-8, 1,-2/*mean (0.132467), correlation (0.440133)*/, - 7,-4, 9,1/*mean (0.132692), correlation (0.454)*/, - -2,1, -1,-4/*mean (0.135695), correlation (0.455739)*/, - 11,-6, 12,-11/*mean (0.142904), correlation (0.446114)*/, - -12,-9, -6,4/*mean (0.146165), correlation (0.451473)*/, - 3,7, 7,12/*mean (0.147627), correlation (0.456643)*/, - 5,5, 10,8/*mean (0.152901), correlation (0.455036)*/, - 0,-4, 2,8/*mean (0.167083), correlation (0.459315)*/, - -9,12, -5,-13/*mean (0.173234), correlation (0.454706)*/, - 0,7, 2,12/*mean (0.18312), correlation (0.433855)*/, - -1,2, 1,7/*mean (0.185504), correlation (0.443838)*/, - 5,11, 7,-9/*mean (0.185706), correlation (0.451123)*/, - 3,5, 6,-8/*mean (0.188968), correlation (0.455808)*/, - -13,-4, -8,9/*mean (0.191667), correlation (0.459128)*/, - -5,9, -3,-3/*mean (0.193196), correlation (0.458364)*/, - -4,-7, -3,-12/*mean (0.196536), correlation (0.455782)*/, - 6,5, 8,0/*mean (0.1972), correlation (0.450481)*/, - -7,6, -6,12/*mean (0.199438), correlation (0.458156)*/, - -13,6, -5,-2/*mean (0.211224), correlation (0.449548)*/, - 1,-10, 3,10/*mean (0.211718), correlation (0.440606)*/, - 4,1, 8,-4/*mean (0.213034), correlation (0.443177)*/, - -2,-2, 2,-13/*mean (0.234334), correlation (0.455304)*/, - 2,-12, 12,12/*mean (0.235684), correlation (0.443436)*/, - -2,-13, 0,-6/*mean (0.237674), correlation (0.452525)*/, - 4,1, 9,3/*mean (0.23962), correlation (0.444824)*/, - -6,-10, -3,-5/*mean (0.248459), correlation (0.439621)*/, - -3,-13, -1,1/*mean (0.249505), correlation (0.456666)*/, - 7,5, 12,-11/*mean (0.00119208), correlation (0.495466)*/, - 4,-2, 5,-7/*mean (0.00372245), correlation (0.484214)*/, - -13,9, -9,-5/*mean (0.00741116), correlation (0.499854)*/, - 7,1, 8,6/*mean (0.0208952), correlation (0.499773)*/, - 7,-8, 7,6/*mean (0.0220085), correlation (0.501609)*/, - -7,-4, -7,1/*mean (0.0233806), correlation (0.496568)*/, - -8,11, -7,-8/*mean (0.0236505), correlation (0.489719)*/, - -13,6, -12,-8/*mean (0.0268781), correlation (0.503487)*/, - 2,4, 3,9/*mean (0.0323324), correlation (0.501938)*/, - 10,-5, 12,3/*mean (0.0399235), correlation (0.494029)*/, - -6,-5, -6,7/*mean (0.0420153), correlation (0.486579)*/, - 8,-3, 9,-8/*mean (0.0548021), correlation (0.484237)*/, - 2,-12, 2,8/*mean (0.0616622), correlation (0.496642)*/, - -11,-2, -10,3/*mean (0.0627755), correlation (0.498563)*/, - -12,-13, -7,-9/*mean (0.0829622), correlation (0.495491)*/, - -11,0, -10,-5/*mean (0.0843342), correlation (0.487146)*/, - 5,-3, 11,8/*mean (0.0929937), correlation (0.502315)*/, - -2,-13, -1,12/*mean (0.113327), correlation (0.48941)*/, - -1,-8, 0,9/*mean (0.132119), correlation (0.467268)*/, - -13,-11, -12,-5/*mean (0.136269), correlation (0.498771)*/, - -10,-2, -10,11/*mean (0.142173), correlation (0.498714)*/, - -3,9, -2,-13/*mean (0.144141), correlation (0.491973)*/, - 2,-3, 3,2/*mean (0.14892), correlation (0.500782)*/, - -9,-13, -4,0/*mean (0.150371), correlation (0.498211)*/, - -4,6, -3,-10/*mean (0.152159), correlation (0.495547)*/, - -4,12, -2,-7/*mean (0.156152), correlation (0.496925)*/, - -6,-11, -4,9/*mean (0.15749), correlation (0.499222)*/, - 6,-3, 6,11/*mean (0.159211), correlation (0.503821)*/, - -13,11, -5,5/*mean (0.162427), correlation (0.501907)*/, - 11,11, 12,6/*mean (0.16652), correlation (0.497632)*/, - 7,-5, 12,-2/*mean (0.169141), correlation (0.484474)*/, - -1,12, 0,7/*mean (0.169456), correlation (0.495339)*/, - -4,-8, -3,-2/*mean (0.171457), correlation (0.487251)*/, - -7,1, -6,7/*mean (0.175), correlation (0.500024)*/, - -13,-12, -8,-13/*mean (0.175866), correlation (0.497523)*/, - -7,-2, -6,-8/*mean (0.178273), correlation (0.501854)*/, - -8,5, -6,-9/*mean (0.181107), correlation (0.494888)*/, - -5,-1, -4,5/*mean (0.190227), correlation (0.482557)*/, - -13,7, -8,10/*mean (0.196739), correlation (0.496503)*/, - 1,5, 5,-13/*mean (0.19973), correlation (0.499759)*/, - 1,0, 10,-13/*mean (0.204465), correlation (0.49873)*/, - 9,12, 10,-1/*mean (0.209334), correlation (0.49063)*/, - 5,-8, 10,-9/*mean (0.211134), correlation (0.503011)*/, - -1,11, 1,-13/*mean (0.212), correlation (0.499414)*/, - -9,-3, -6,2/*mean (0.212168), correlation (0.480739)*/, - -1,-10, 1,12/*mean (0.212731), correlation (0.502523)*/, - -13,1, -8,-10/*mean (0.21327), correlation (0.489786)*/, - 8,-11, 10,-6/*mean (0.214159), correlation (0.488246)*/, - 2,-13, 3,-6/*mean (0.216993), correlation (0.50287)*/, - 7,-13, 12,-9/*mean (0.223639), correlation (0.470502)*/, - -10,-10, -5,-7/*mean (0.224089), correlation (0.500852)*/, - -10,-8, -8,-13/*mean (0.228666), correlation (0.502629)*/, - 4,-6, 8,5/*mean (0.22906), correlation (0.498305)*/, - 3,12, 8,-13/*mean (0.233378), correlation (0.503825)*/, - -4,2, -3,-3/*mean (0.234323), correlation (0.476692)*/, - 5,-13, 10,-12/*mean (0.236392), correlation (0.475462)*/, - 4,-13, 5,-1/*mean (0.236842), correlation (0.504132)*/, - -9,9, -4,3/*mean (0.236977), correlation (0.497739)*/, - 0,3, 3,-9/*mean (0.24314), correlation (0.499398)*/, - -12,1, -6,1/*mean (0.243297), correlation (0.489447)*/, - 3,2, 4,-8/*mean (0.00155196), correlation (0.553496)*/, - -10,-10, -10,9/*mean (0.00239541), correlation (0.54297)*/, - 8,-13, 12,12/*mean (0.0034413), correlation (0.544361)*/, - -8,-12, -6,-5/*mean (0.003565), correlation (0.551225)*/, - 2,2, 3,7/*mean (0.00835583), correlation (0.55285)*/, - 10,6, 11,-8/*mean (0.00885065), correlation (0.540913)*/, - 6,8, 8,-12/*mean (0.0101552), correlation (0.551085)*/, - -7,10, -6,5/*mean (0.0102227), correlation (0.533635)*/, - -3,-9, -3,9/*mean (0.0110211), correlation (0.543121)*/, - -1,-13, -1,5/*mean (0.0113473), correlation (0.550173)*/, - -3,-7, -3,4/*mean (0.0140913), correlation (0.554774)*/, - -8,-2, -8,3/*mean (0.017049), correlation (0.55461)*/, - 4,2, 12,12/*mean (0.01778), correlation (0.546921)*/, - 2,-5, 3,11/*mean (0.0224022), correlation (0.549667)*/, - 6,-9, 11,-13/*mean (0.029161), correlation (0.546295)*/, - 3,-1, 7,12/*mean (0.0303081), correlation (0.548599)*/, - 11,-1, 12,4/*mean (0.0355151), correlation (0.523943)*/, - -3,0, -3,6/*mean (0.0417904), correlation (0.543395)*/, - 4,-11, 4,12/*mean (0.0487292), correlation (0.542818)*/, - 2,-4, 2,1/*mean (0.0575124), correlation (0.554888)*/, - -10,-6, -8,1/*mean (0.0594242), correlation (0.544026)*/, - -13,7, -11,1/*mean (0.0597391), correlation (0.550524)*/, - -13,12, -11,-13/*mean (0.0608974), correlation (0.55383)*/, - 6,0, 11,-13/*mean (0.065126), correlation (0.552006)*/, - 0,-1, 1,4/*mean (0.074224), correlation (0.546372)*/, - -13,3, -9,-2/*mean (0.0808592), correlation (0.554875)*/, - -9,8, -6,-3/*mean (0.0883378), correlation (0.551178)*/, - -13,-6, -8,-2/*mean (0.0901035), correlation (0.548446)*/, - 5,-9, 8,10/*mean (0.0949843), correlation (0.554694)*/, - 2,7, 3,-9/*mean (0.0994152), correlation (0.550979)*/, - -1,-6, -1,-1/*mean (0.10045), correlation (0.552714)*/, - 9,5, 11,-2/*mean (0.100686), correlation (0.552594)*/, - 11,-3, 12,-8/*mean (0.101091), correlation (0.532394)*/, - 3,0, 3,5/*mean (0.101147), correlation (0.525576)*/, - -1,4, 0,10/*mean (0.105263), correlation (0.531498)*/, - 3,-6, 4,5/*mean (0.110785), correlation (0.540491)*/, - -13,0, -10,5/*mean (0.112798), correlation (0.536582)*/, - 5,8, 12,11/*mean (0.114181), correlation (0.555793)*/, - 8,9, 9,-6/*mean (0.117431), correlation (0.553763)*/, - 7,-4, 8,-12/*mean (0.118522), correlation (0.553452)*/, - -10,4, -10,9/*mean (0.12094), correlation (0.554785)*/, - 7,3, 12,4/*mean (0.122582), correlation (0.555825)*/, - 9,-7, 10,-2/*mean (0.124978), correlation (0.549846)*/, - 7,0, 12,-2/*mean (0.127002), correlation (0.537452)*/, - -1,-6, 0,-11/*mean (0.127148), correlation (0.547401)*/ -}; - - -static void makeRandomPattern(int patchSize, Point* pattern, int npoints) -{ - RNG rng(0x34985739); // we always start with a fixed seed, - // to make patterns the same on each run - for( int i = 0; i < npoints; i++ ) - { - pattern[i].x = rng.uniform(-patchSize/2, patchSize/2+1); - pattern[i].y = rng.uniform(-patchSize/2, patchSize/2+1); - } -} - - -static inline float getScale(int level, int firstLevel, double scaleFactor) -{ - return (float)std::pow(scaleFactor, (double)(level - firstLevel)); -} - -/** Constructor - * @param detector_params parameters to use - */ -ORB::ORB(int _nfeatures, float _scaleFactor, int _nlevels, int _edgeThreshold, - int _firstLevel, int _WTA_K, int _scoreType, int _patchSize) : - nfeatures(_nfeatures), scaleFactor(_scaleFactor), nlevels(_nlevels), - edgeThreshold(_edgeThreshold), firstLevel(_firstLevel), WTA_K(_WTA_K), - scoreType(_scoreType), patchSize(_patchSize) -{} - - -int ORB::descriptorSize() const -{ - return kBytes; -} - -int ORB::descriptorType() const -{ - return CV_8U; -} - -/** Compute the ORB features and descriptors on an image - * @param img the image to compute the features and descriptors on - * @param mask the mask to apply - * @param keypoints the resulting keypoints - */ -void ORB::operator()(InputArray image, InputArray mask, vector& keypoints) const -{ - (*this)(image, mask, keypoints, noArray(), false); -} - - -/** Compute the ORB keypoint orientations - * @param image the image to compute the features and descriptors on - * @param integral_image the integral image of the iamge (can be empty, but the computation will be slower) - * @param scale the scale at which we compute the orientation - * @param keypoints the resulting keypoints - */ -static void computeOrientation(const Mat& image, vector& keypoints, - int halfPatchSize, const vector& umax) -{ - // Process each keypoint - for (vector::iterator keypoint = keypoints.begin(), - keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint) - { - keypoint->angle = IC_Angle(image, halfPatchSize, keypoint->pt, umax); - } -} - - -/** Compute the ORB keypoints on an image - * @param image_pyramid the image pyramid to compute the features and descriptors on - * @param mask_pyramid the masks to apply at every level - * @param keypoints the resulting keypoints, clustered per level - */ -static void computeKeyPoints(const vector& imagePyramid, - const vector& maskPyramid, - vector >& allKeypoints, - int nfeatures, int firstLevel, double scaleFactor, - int edgeThreshold, int patchSize, int scoreType ) -{ - int nlevels = (int)imagePyramid.size(); - vector nfeaturesPerLevel(nlevels); - - // fill the extractors and descriptors for the corresponding scales - float factor = (float)(1.0 / scaleFactor); - float ndesiredFeaturesPerScale = nfeatures*(1 - factor)/(1 - (float)pow((double)factor, (double)nlevels)); - - int sumFeatures = 0; - for( int level = 0; level < nlevels-1; level++ ) - { - nfeaturesPerLevel[level] = cvRound(ndesiredFeaturesPerScale); - sumFeatures += nfeaturesPerLevel[level]; - ndesiredFeaturesPerScale *= factor; - } - nfeaturesPerLevel[nlevels-1] = std::max(nfeatures - sumFeatures, 0); - - // Make sure we forget about what is too close to the boundary - //edge_threshold_ = std::max(edge_threshold_, patch_size_/2 + kKernelWidth / 2 + 2); - - // pre-compute the end of a row in a circular patch - int halfPatchSize = patchSize / 2; - vector umax(halfPatchSize + 2); - - int v, v0, vmax = cvFloor(halfPatchSize * sqrt(2.f) / 2 + 1); - int vmin = cvCeil(halfPatchSize * sqrt(2.f) / 2); - for (v = 0; v <= vmax; ++v) - umax[v] = cvRound(sqrt((double)halfPatchSize * halfPatchSize - v * v)); - - // Make sure we are symmetric - for (v = halfPatchSize, v0 = 0; v >= vmin; --v) - { - while (umax[v0] == umax[v0 + 1]) - ++v0; - umax[v] = v0; - ++v0; - } - - allKeypoints.resize(nlevels); - - for (int level = 0; level < nlevels; ++level) - { - int featuresNum = nfeaturesPerLevel[level]; - allKeypoints[level].reserve(featuresNum*2); - - vector & keypoints = allKeypoints[level]; - - // Detect FAST features, 20 is a good threshold - FastFeatureDetector fd(20, true); - fd.detect(imagePyramid[level], keypoints, maskPyramid[level]); - - // Remove keypoints very close to the border - KeyPointsFilter::runByImageBorder(keypoints, imagePyramid[level].size(), edgeThreshold); - - if( scoreType == ORB::HARRIS_SCORE ) - { - // Keep more points than necessary as FAST does not give amazing corners - KeyPointsFilter::retainBest(keypoints, 2 * featuresNum); - - // Compute the Harris cornerness (better scoring than FAST) - HarrisResponses(imagePyramid[level], keypoints, 7, HARRIS_K); - } - - //cull to the final desired level, using the new Harris scores or the original FAST scores. - KeyPointsFilter::retainBest(keypoints, featuresNum); - - float sf = getScale(level, firstLevel, scaleFactor); - - // Set the level of the coordinates - for (vector::iterator keypoint = keypoints.begin(), - keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint) - { - keypoint->octave = level; - keypoint->size = patchSize*sf; - } - - computeOrientation(imagePyramid[level], keypoints, halfPatchSize, umax); - } -} - - -/** Compute the ORB decriptors - * @param image the image to compute the features and descriptors on - * @param integral_image the integral image of the image (can be empty, but the computation will be slower) - * @param level the scale at which we compute the orientation - * @param keypoints the keypoints to use - * @param descriptors the resulting descriptors - */ -static void computeDescriptors(const Mat& image, vector& keypoints, Mat& descriptors, - const vector& pattern, int dsize, int WTA_K) -{ - //convert to grayscale if more than one color - CV_Assert(image.type() == CV_8UC1); - //create the descriptor mat, keypoints.size() rows, BYTES cols - descriptors = Mat::zeros((int)keypoints.size(), dsize, CV_8UC1); - - for (size_t i = 0; i < keypoints.size(); i++) - computeOrbDescriptor(keypoints[i], image, &pattern[0], descriptors.ptr((int)i), dsize, WTA_K); -} - - -/** Compute the ORB features and descriptors on an image - * @param img the image to compute the features and descriptors on - * @param mask the mask to apply - * @param keypoints the resulting keypoints - * @param descriptors the resulting descriptors - * @param do_keypoints if true, the keypoints are computed, otherwise used as an input - * @param do_descriptors if true, also computes the descriptors - */ -void ORB::operator()( InputArray _image, InputArray _mask, vector& _keypoints, - OutputArray _descriptors, bool useProvidedKeypoints) const -{ - CV_Assert(patchSize >= 2); - - bool do_keypoints = !useProvidedKeypoints; - bool do_descriptors = _descriptors.needed(); - - if( (!do_keypoints && !do_descriptors) || _image.empty() ) - return; - - //ROI handling - const int HARRIS_BLOCK_SIZE = 9; - int halfPatchSize = patchSize / 2; - int border = std::max(edgeThreshold, std::max(halfPatchSize, HARRIS_BLOCK_SIZE/2))+1; - - Mat image = _image.getMat(), mask = _mask.getMat(); - if( image.type() != CV_8UC1 ) - cvtColor(_image, image, CV_BGR2GRAY); - - int levelsNum = this->nlevels; - - if( !do_keypoints ) - { - // if we have pre-computed keypoints, they may use more levels than it is set in parameters - // !!!TODO!!! implement more correct method, independent from the used keypoint detector. - // Namely, the detector should provide correct size of each keypoint. Based on the keypoint size - // and the algorithm used (i.e. BRIEF, running on 31x31 patches) we should compute the approximate - // scale-factor that we need to apply. Then we should cluster all the computed scale-factors and - // for each cluster compute the corresponding image. - // - // In short, ultimately the descriptor should - // ignore octave parameter and deal only with the keypoint size. - levelsNum = 0; - for( size_t i = 0; i < _keypoints.size(); i++ ) - levelsNum = std::max(levelsNum, std::max(_keypoints[i].octave, 0)); - levelsNum++; - } - - // Pre-compute the scale pyramids - vector imagePyramid(levelsNum), maskPyramid(levelsNum); - for (int level = 0; level < levelsNum; ++level) - { - float scale = 1/getScale(level, firstLevel, scaleFactor); - Size sz(cvRound(image.cols*scale), cvRound(image.rows*scale)); - Size wholeSize(sz.width + border*2, sz.height + border*2); - Mat temp(wholeSize, image.type()), masktemp; - imagePyramid[level] = temp(Rect(border, border, sz.width, sz.height)); - - if( !mask.empty() ) - { - masktemp = Mat(wholeSize, mask.type()); - maskPyramid[level] = masktemp(Rect(border, border, sz.width, sz.height)); - } - - // Compute the resized image - if( level != firstLevel ) - { - if( level < firstLevel ) - { - resize(image, imagePyramid[level], sz, 0, 0, INTER_LINEAR); - if (!mask.empty()) - resize(mask, maskPyramid[level], sz, 0, 0, INTER_LINEAR); - } - else - { - resize(imagePyramid[level-1], imagePyramid[level], sz, 0, 0, INTER_LINEAR); - if (!mask.empty()) - { - resize(maskPyramid[level-1], maskPyramid[level], sz, 0, 0, INTER_LINEAR); - threshold(maskPyramid[level], maskPyramid[level], 254, 0, THRESH_TOZERO); - } - } - - copyMakeBorder(imagePyramid[level], temp, border, border, border, border, - BORDER_REFLECT_101+BORDER_ISOLATED); - if (!mask.empty()) - copyMakeBorder(maskPyramid[level], masktemp, border, border, border, border, - BORDER_CONSTANT+BORDER_ISOLATED); - } - else - { - copyMakeBorder(image, temp, border, border, border, border, - BORDER_REFLECT_101); - if( !mask.empty() ) - copyMakeBorder(mask, masktemp, border, border, border, border, - BORDER_CONSTANT+BORDER_ISOLATED); - } - } - - // Pre-compute the keypoints (we keep the best over all scales, so this has to be done beforehand - vector < vector > allKeypoints; - if( do_keypoints ) - { - // Get keypoints, those will be far enough from the border that no check will be required for the descriptor - computeKeyPoints(imagePyramid, maskPyramid, allKeypoints, - nfeatures, firstLevel, scaleFactor, - edgeThreshold, patchSize, scoreType); - - // make sure we have the right number of keypoints keypoints - /*vector temp; - - for (int level = 0; level < n_levels; ++level) - { - vector& keypoints = all_keypoints[level]; - temp.insert(temp.end(), keypoints.begin(), keypoints.end()); - keypoints.clear(); - } - - KeyPoint::retainBest(temp, n_features_); - - for (vector::iterator keypoint = temp.begin(), - keypoint_end = temp.end(); keypoint != keypoint_end; ++keypoint) - all_keypoints[keypoint->octave].push_back(*keypoint);*/ - } - else - { - // Remove keypoints very close to the border - KeyPointsFilter::runByImageBorder(_keypoints, image.size(), edgeThreshold); - - // Cluster the input keypoints depending on the level they were computed at - allKeypoints.resize(levelsNum); - for (vector::iterator keypoint = _keypoints.begin(), - keypointEnd = _keypoints.end(); keypoint != keypointEnd; ++keypoint) - allKeypoints[keypoint->octave].push_back(*keypoint); - - // Make sure we rescale the coordinates - for (int level = 0; level < levelsNum; ++level) - { - if (level == firstLevel) - continue; - - vector & keypoints = allKeypoints[level]; - float scale = 1/getScale(level, firstLevel, scaleFactor); - for (vector::iterator keypoint = keypoints.begin(), - keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint) - keypoint->pt *= scale; - } - } - - Mat descriptors; - vector pattern; - - if( do_descriptors ) - { - int nkeypoints = 0; - for (int level = 0; level < levelsNum; ++level) - nkeypoints += (int)allKeypoints[level].size(); - if( nkeypoints == 0 ) - _descriptors.release(); - else - { - _descriptors.create(nkeypoints, descriptorSize(), CV_8U); - descriptors = _descriptors.getMat(); - } - - const int npoints = 512; - Point patternbuf[npoints]; - const Point* pattern0 = (const Point*)bit_pattern_31_; - - if( patchSize != 31 ) - { - pattern0 = patternbuf; - makeRandomPattern(patchSize, patternbuf, npoints); - } - - CV_Assert( WTA_K == 2 || WTA_K == 3 || WTA_K == 4 ); - - if( WTA_K == 2 ) - std::copy(pattern0, pattern0 + npoints, std::back_inserter(pattern)); - else - { - int ntuples = descriptorSize()*4; - initializeOrbPattern(pattern0, pattern, ntuples, WTA_K, npoints); - } - } - - _keypoints.clear(); - int offset = 0; - for (int level = 0; level < levelsNum; ++level) - { - // Get the features and compute their orientation - vector& keypoints = allKeypoints[level]; - int nkeypoints = (int)keypoints.size(); - - // Compute the descriptors - if (do_descriptors) - { - Mat desc; - if (!descriptors.empty()) - { - desc = descriptors.rowRange(offset, offset + nkeypoints); - } - - offset += nkeypoints; - // preprocess the resized image - Mat& workingMat = imagePyramid[level]; - //boxFilter(working_mat, working_mat, working_mat.depth(), Size(5,5), Point(-1,-1), true, BORDER_REFLECT_101); - GaussianBlur(workingMat, workingMat, Size(7, 7), 2, 2, BORDER_REFLECT_101); - computeDescriptors(workingMat, keypoints, desc, pattern, descriptorSize(), WTA_K); - } - - // Copy to the output data - if (level != firstLevel) - { - float scale = getScale(level, firstLevel, scaleFactor); - for (vector::iterator keypoint = keypoints.begin(), - keypointEnd = keypoints.end(); keypoint != keypointEnd; ++keypoint) - keypoint->pt *= scale; - } - // And add the keypoints to the output - _keypoints.insert(_keypoints.end(), keypoints.begin(), keypoints.end()); - } -} - -void ORB::detectImpl( const Mat& image, vector& keypoints, const Mat& mask) const -{ - (*this)(image, mask, keypoints, noArray(), false); -} - -void ORB::computeImpl( const Mat& image, vector& keypoints, Mat& descriptors) const -{ - (*this)(image, Mat(), keypoints, descriptors, true); -} - -} diff --git a/modules/features2d/src/precomp.hpp b/modules/features2d/src/precomp.hpp deleted file mode 100644 index 72f6186..0000000 --- a/modules/features2d/src/precomp.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/core/internal.hpp" - -#include - -#ifdef HAVE_TEGRA_OPTIMIZATION -#include "opencv2/features2d/features2d_tegra.hpp" -#endif - -#endif diff --git a/modules/features2d/src/stardetector.cpp b/modules/features2d/src/stardetector.cpp deleted file mode 100644 index 0ceb3f8..0000000 --- a/modules/features2d/src/stardetector.cpp +++ /dev/null @@ -1,449 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -static void -computeIntegralImages( const Mat& matI, Mat& matS, Mat& matT, Mat& _FT ) -{ - CV_Assert( matI.type() == CV_8U ); - - int x, y, rows = matI.rows, cols = matI.cols; - - matS.create(rows + 1, cols + 1, CV_32S); - matT.create(rows + 1, cols + 1, CV_32S); - _FT.create(rows + 1, cols + 1, CV_32S); - - const uchar* I = matI.ptr(); - int *S = matS.ptr(), *T = matT.ptr(), *FT = _FT.ptr(); - int istep = (int)matI.step, step = (int)(matS.step/sizeof(S[0])); - - for( x = 0; x <= cols; x++ ) - S[x] = T[x] = FT[x] = 0; - - S += step; T += step; FT += step; - S[0] = T[0] = 0; - FT[0] = I[0]; - for( x = 1; x < cols; x++ ) - { - S[x] = S[x-1] + I[x-1]; - T[x] = I[x-1]; - FT[x] = I[x] + I[x-1]; - } - S[cols] = S[cols-1] + I[cols-1]; - T[cols] = FT[cols] = I[cols-1]; - - for( y = 2; y <= rows; y++ ) - { - I += istep, S += step, T += step, FT += step; - - S[0] = S[-step]; S[1] = S[-step+1] + I[0]; - T[0] = T[-step + 1]; - T[1] = FT[0] = T[-step + 2] + I[-istep] + I[0]; - FT[1] = FT[-step + 2] + I[-istep] + I[1] + I[0]; - - for( x = 2; x < cols; x++ ) - { - S[x] = S[x - 1] + S[-step + x] - S[-step + x - 1] + I[x - 1]; - T[x] = T[-step + x - 1] + T[-step + x + 1] - T[-step*2 + x] + I[-istep + x - 1] + I[x - 1]; - FT[x] = FT[-step + x - 1] + FT[-step + x + 1] - FT[-step*2 + x] + I[x] + I[x-1]; - } - - S[cols] = S[cols - 1] + S[-step + cols] - S[-step + cols - 1] + I[cols - 1]; - T[cols] = FT[cols] = T[-step + cols - 1] + I[-istep + cols - 1] + I[cols - 1]; - } -} - -struct StarFeature -{ - int area; - int* p[8]; -}; - -static int -StarDetectorComputeResponses( const Mat& img, Mat& responses, Mat& sizes, int maxSize ) -{ - const int MAX_PATTERN = 17; - static const int sizes0[] = {1, 2, 3, 4, 6, 8, 11, 12, 16, 22, 23, 32, 45, 46, 64, 90, 128, -1}; - static const int pairs[][2] = {{1, 0}, {3, 1}, {4, 2}, {5, 3}, {7, 4}, {8, 5}, {9, 6}, - {11, 8}, {13, 10}, {14, 11}, {15, 12}, {16, 14}, {-1, -1}}; - float invSizes[MAX_PATTERN][2]; - int sizes1[MAX_PATTERN]; - -#if CV_SSE2 - __m128 invSizes4[MAX_PATTERN][2]; - __m128 sizes1_4[MAX_PATTERN]; - Cv32suf absmask; - absmask.i = 0x7fffffff; - volatile bool useSIMD = cv::checkHardwareSupport(CV_CPU_SSE2); -#endif - StarFeature f[MAX_PATTERN]; - - Mat sum, tilted, flatTilted; - int y, rows = img.rows, cols = img.cols; - int border, npatterns=0, maxIdx=0; - - CV_Assert( img.type() == CV_8UC1 ); - - responses.create( img.size(), CV_32F ); - sizes.create( img.size(), CV_16S ); - - while( pairs[npatterns][0] >= 0 && ! - ( sizes0[pairs[npatterns][0]] >= maxSize - || sizes0[pairs[npatterns+1][0]] + sizes0[pairs[npatterns+1][0]]/2 >= std::min(rows, cols) ) ) - { - ++npatterns; - } - - npatterns += (pairs[npatterns-1][0] >= 0); - maxIdx = pairs[npatterns-1][0]; - - computeIntegralImages( img, sum, tilted, flatTilted ); - int step = (int)(sum.step/sum.elemSize()); - - for(int i = 0; i <= maxIdx; i++ ) - { - int ur_size = sizes0[i], t_size = sizes0[i] + sizes0[i]/2; - int ur_area = (2*ur_size + 1)*(2*ur_size + 1); - int t_area = t_size*t_size + (t_size + 1)*(t_size + 1); - - f[i].p[0] = sum.ptr() + (ur_size + 1)*step + ur_size + 1; - f[i].p[1] = sum.ptr() - ur_size*step + ur_size + 1; - f[i].p[2] = sum.ptr() + (ur_size + 1)*step - ur_size; - f[i].p[3] = sum.ptr() - ur_size*step - ur_size; - - f[i].p[4] = tilted.ptr() + (t_size + 1)*step + 1; - f[i].p[5] = flatTilted.ptr() - t_size; - f[i].p[6] = flatTilted.ptr() + t_size + 1; - f[i].p[7] = tilted.ptr() - t_size*step + 1; - - f[i].area = ur_area + t_area; - sizes1[i] = sizes0[i]; - } - // negate end points of the size range - // for a faster rejection of very small or very large features in non-maxima suppression. - sizes1[0] = -sizes1[0]; - sizes1[1] = -sizes1[1]; - sizes1[maxIdx] = -sizes1[maxIdx]; - border = sizes0[maxIdx] + sizes0[maxIdx]/2; - - for(int i = 0; i < npatterns; i++ ) - { - int innerArea = f[pairs[i][1]].area; - int outerArea = f[pairs[i][0]].area - innerArea; - invSizes[i][0] = 1.f/outerArea; - invSizes[i][1] = 1.f/innerArea; - } - -#if CV_SSE2 - if( useSIMD ) - { - for(int i = 0; i < npatterns; i++ ) - { - _mm_store_ps((float*)&invSizes4[i][0], _mm_set1_ps(invSizes[i][0])); - _mm_store_ps((float*)&invSizes4[i][1], _mm_set1_ps(invSizes[i][1])); - } - - for(int i = 0; i <= maxIdx; i++ ) - _mm_store_ps((float*)&sizes1_4[i], _mm_set1_ps((float)sizes1[i])); - } -#endif - - for( y = 0; y < border; y++ ) - { - float* r_ptr = responses.ptr(y); - float* r_ptr2 = responses.ptr(rows - 1 - y); - short* s_ptr = sizes.ptr(y); - short* s_ptr2 = sizes.ptr(rows - 1 - y); - - memset( r_ptr, 0, cols*sizeof(r_ptr[0])); - memset( r_ptr2, 0, cols*sizeof(r_ptr2[0])); - memset( s_ptr, 0, cols*sizeof(s_ptr[0])); - memset( s_ptr2, 0, cols*sizeof(s_ptr2[0])); - } - - for( y = border; y < rows - border; y++ ) - { - int x = border; - float* r_ptr = responses.ptr(y); - short* s_ptr = sizes.ptr(y); - - memset( r_ptr, 0, border*sizeof(r_ptr[0])); - memset( s_ptr, 0, border*sizeof(s_ptr[0])); - memset( r_ptr + cols - border, 0, border*sizeof(r_ptr[0])); - memset( s_ptr + cols - border, 0, border*sizeof(s_ptr[0])); - -#if CV_SSE2 - if( useSIMD ) - { - __m128 absmask4 = _mm_set1_ps(absmask.f); - for( ; x <= cols - border - 4; x += 4 ) - { - int ofs = y*step + x; - __m128 vals[MAX_PATTERN]; - __m128 bestResponse = _mm_setzero_ps(); - __m128 bestSize = _mm_setzero_ps(); - - for(int i = 0; i <= maxIdx; i++ ) - { - const int** p = (const int**)&f[i].p[0]; - __m128i r0 = _mm_sub_epi32(_mm_loadu_si128((const __m128i*)(p[0]+ofs)), - _mm_loadu_si128((const __m128i*)(p[1]+ofs))); - __m128i r1 = _mm_sub_epi32(_mm_loadu_si128((const __m128i*)(p[3]+ofs)), - _mm_loadu_si128((const __m128i*)(p[2]+ofs))); - __m128i r2 = _mm_sub_epi32(_mm_loadu_si128((const __m128i*)(p[4]+ofs)), - _mm_loadu_si128((const __m128i*)(p[5]+ofs))); - __m128i r3 = _mm_sub_epi32(_mm_loadu_si128((const __m128i*)(p[7]+ofs)), - _mm_loadu_si128((const __m128i*)(p[6]+ofs))); - r0 = _mm_add_epi32(_mm_add_epi32(r0,r1), _mm_add_epi32(r2,r3)); - _mm_store_ps((float*)&vals[i], _mm_cvtepi32_ps(r0)); - } - - for(int i = 0; i < npatterns; i++ ) - { - __m128 inner_sum = vals[pairs[i][1]]; - __m128 outer_sum = _mm_sub_ps(vals[pairs[i][0]], inner_sum); - __m128 response = _mm_sub_ps(_mm_mul_ps(inner_sum, invSizes4[i][1]), - _mm_mul_ps(outer_sum, invSizes4[i][0])); - __m128 swapmask = _mm_cmpgt_ps(_mm_and_ps(response,absmask4), - _mm_and_ps(bestResponse,absmask4)); - bestResponse = _mm_xor_ps(bestResponse, - _mm_and_ps(_mm_xor_ps(response,bestResponse), swapmask)); - bestSize = _mm_xor_ps(bestSize, - _mm_and_ps(_mm_xor_ps(sizes1_4[pairs[i][0]], bestSize), swapmask)); - } - - _mm_storeu_ps(r_ptr + x, bestResponse); - _mm_storel_epi64((__m128i*)(s_ptr + x), - _mm_packs_epi32(_mm_cvtps_epi32(bestSize),_mm_setzero_si128())); - } - } -#endif - for( ; x < cols - border; x++ ) - { - int ofs = y*step + x; - int vals[MAX_PATTERN]; - float bestResponse = 0; - int bestSize = 0; - - for(int i = 0; i <= maxIdx; i++ ) - { - const int** p = (const int**)&f[i].p[0]; - vals[i] = p[0][ofs] - p[1][ofs] - p[2][ofs] + p[3][ofs] + - p[4][ofs] - p[5][ofs] - p[6][ofs] + p[7][ofs]; - } - for(int i = 0; i < npatterns; i++ ) - { - int inner_sum = vals[pairs[i][1]]; - int outer_sum = vals[pairs[i][0]] - inner_sum; - float response = inner_sum*invSizes[i][1] - outer_sum*invSizes[i][0]; - if( fabs(response) > fabs(bestResponse) ) - { - bestResponse = response; - bestSize = sizes1[pairs[i][0]]; - } - } - - r_ptr[x] = bestResponse; - s_ptr[x] = (short)bestSize; - } - } - - return border; -} - - -static bool StarDetectorSuppressLines( const Mat& responses, const Mat& sizes, Point pt, - int lineThresholdProjected, int lineThresholdBinarized ) -{ - const float* r_ptr = responses.ptr(); - int rstep = (int)(responses.step/sizeof(r_ptr[0])); - const short* s_ptr = sizes.ptr(); - int sstep = (int)(sizes.step/sizeof(s_ptr[0])); - int sz = s_ptr[pt.y*sstep + pt.x]; - int x, y, delta = sz/4, radius = delta*4; - float Lxx = 0, Lyy = 0, Lxy = 0; - int Lxxb = 0, Lyyb = 0, Lxyb = 0; - - for( y = pt.y - radius; y <= pt.y + radius; y += delta ) - for( x = pt.x - radius; x <= pt.x + radius; x += delta ) - { - float Lx = r_ptr[y*rstep + x + 1] - r_ptr[y*rstep + x - 1]; - float Ly = r_ptr[(y+1)*rstep + x] - r_ptr[(y-1)*rstep + x]; - Lxx += Lx*Lx; Lyy += Ly*Ly; Lxy += Lx*Ly; - } - - if( (Lxx + Lyy)*(Lxx + Lyy) >= lineThresholdProjected*(Lxx*Lyy - Lxy*Lxy) ) - return true; - - for( y = pt.y - radius; y <= pt.y + radius; y += delta ) - for( x = pt.x - radius; x <= pt.x + radius; x += delta ) - { - int Lxb = (s_ptr[y*sstep + x + 1] == sz) - (s_ptr[y*sstep + x - 1] == sz); - int Lyb = (s_ptr[(y+1)*sstep + x] == sz) - (s_ptr[(y-1)*sstep + x] == sz); - Lxxb += Lxb * Lxb; Lyyb += Lyb * Lyb; Lxyb += Lxb * Lyb; - } - - if( (Lxxb + Lyyb)*(Lxxb + Lyyb) >= lineThresholdBinarized*(Lxxb*Lyyb - Lxyb*Lxyb) ) - return true; - - return false; -} - - -static void -StarDetectorSuppressNonmax( const Mat& responses, const Mat& sizes, - vector& keypoints, int border, - int responseThreshold, - int lineThresholdProjected, - int lineThresholdBinarized, - int suppressNonmaxSize ) -{ - int x, y, x1, y1, delta = suppressNonmaxSize/2; - int rows = responses.rows, cols = responses.cols; - const float* r_ptr = responses.ptr(); - int rstep = (int)(responses.step/sizeof(r_ptr[0])); - const short* s_ptr = sizes.ptr(); - int sstep = (int)(sizes.step/sizeof(s_ptr[0])); - short featureSize = 0; - - for( y = border; y < rows - border; y += delta+1 ) - for( x = border; x < cols - border; x += delta+1 ) - { - float maxResponse = (float)responseThreshold; - float minResponse = (float)-responseThreshold; - Point maxPt(-1, -1), minPt(-1, -1); - int tileEndY = MIN(y + delta, rows - border - 1); - int tileEndX = MIN(x + delta, cols - border - 1); - - for( y1 = y; y1 <= tileEndY; y1++ ) - for( x1 = x; x1 <= tileEndX; x1++ ) - { - float val = r_ptr[y1*rstep + x1]; - if( maxResponse < val ) - { - maxResponse = val; - maxPt = Point(x1, y1); - } - else if( minResponse > val ) - { - minResponse = val; - minPt = Point(x1, y1); - } - } - - if( maxPt.x >= 0 ) - { - for( y1 = maxPt.y - delta; y1 <= maxPt.y + delta; y1++ ) - for( x1 = maxPt.x - delta; x1 <= maxPt.x + delta; x1++ ) - { - float val = r_ptr[y1*rstep + x1]; - if( val >= maxResponse && (y1 != maxPt.y || x1 != maxPt.x)) - goto skip_max; - } - - if( (featureSize = s_ptr[maxPt.y*sstep + maxPt.x]) >= 4 && - !StarDetectorSuppressLines( responses, sizes, maxPt, lineThresholdProjected, - lineThresholdBinarized )) - { - KeyPoint kpt((float)maxPt.x, (float)maxPt.y, featureSize, -1, maxResponse); - keypoints.push_back(kpt); - } - } - skip_max: - if( minPt.x >= 0 ) - { - for( y1 = minPt.y - delta; y1 <= minPt.y + delta; y1++ ) - for( x1 = minPt.x - delta; x1 <= minPt.x + delta; x1++ ) - { - float val = r_ptr[y1*rstep + x1]; - if( val <= minResponse && (y1 != minPt.y || x1 != minPt.x)) - goto skip_min; - } - - if( (featureSize = s_ptr[minPt.y*sstep + minPt.x]) >= 4 && - !StarDetectorSuppressLines( responses, sizes, minPt, - lineThresholdProjected, lineThresholdBinarized)) - { - KeyPoint kpt((float)minPt.x, (float)minPt.y, featureSize, -1, maxResponse); - keypoints.push_back(kpt); - } - } - skip_min: - ; - } -} - -StarDetector::StarDetector(int _maxSize, int _responseThreshold, - int _lineThresholdProjected, - int _lineThresholdBinarized, - int _suppressNonmaxSize) -: maxSize(_maxSize), responseThreshold(_responseThreshold), - lineThresholdProjected(_lineThresholdProjected), - lineThresholdBinarized(_lineThresholdBinarized), - suppressNonmaxSize(_suppressNonmaxSize) -{} - - -void StarDetector::detectImpl( const Mat& image, vector& keypoints, const Mat& mask ) const -{ - Mat grayImage = image; - if( image.type() != CV_8U ) cvtColor( image, grayImage, CV_BGR2GRAY ); - - (*this)(grayImage, keypoints); - KeyPointsFilter::runByPixelsMask( keypoints, mask ); -} - -void StarDetector::operator()(const Mat& img, vector& keypoints) const -{ - Mat responses, sizes; - int border = StarDetectorComputeResponses( img, responses, sizes, maxSize ); - keypoints.clear(); - if( border >= 0 ) - StarDetectorSuppressNonmax( responses, sizes, keypoints, border, - responseThreshold, lineThresholdProjected, - lineThresholdBinarized, suppressNonmaxSize ); -} - -} diff --git a/modules/flann/CMakeLists.txt b/modules/flann/CMakeLists.txt deleted file mode 100644 index a6326c4..0000000 --- a/modules/flann/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "Clustering and Search in Multi-Dimensional Spaces") -ocv_define_module(flann opencv_core) diff --git a/modules/flann/include/opencv2/flann/all_indices.h b/modules/flann/include/opencv2/flann/all_indices.h deleted file mode 100644 index ff53fd8..0000000 --- a/modules/flann/include/opencv2/flann/all_indices.h +++ /dev/null @@ -1,155 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_ALL_INDICES_H_ -#define OPENCV_FLANN_ALL_INDICES_H_ - -#include "general.h" - -#include "nn_index.h" -#include "kdtree_index.h" -#include "kdtree_single_index.h" -#include "kmeans_index.h" -#include "composite_index.h" -#include "linear_index.h" -#include "hierarchical_clustering_index.h" -#include "lsh_index.h" -#include "autotuned_index.h" - - -namespace cvflann -{ - -template -struct index_creator -{ - static NNIndex* create(const Matrix& dataset, const IndexParams& params, const Distance& distance) - { - flann_algorithm_t index_type = get_param(params, "algorithm"); - - NNIndex* nnIndex; - switch (index_type) { - case FLANN_INDEX_LINEAR: - nnIndex = new LinearIndex(dataset, params, distance); - break; - case FLANN_INDEX_KDTREE_SINGLE: - nnIndex = new KDTreeSingleIndex(dataset, params, distance); - break; - case FLANN_INDEX_KDTREE: - nnIndex = new KDTreeIndex(dataset, params, distance); - break; - case FLANN_INDEX_KMEANS: - nnIndex = new KMeansIndex(dataset, params, distance); - break; - case FLANN_INDEX_COMPOSITE: - nnIndex = new CompositeIndex(dataset, params, distance); - break; - case FLANN_INDEX_AUTOTUNED: - nnIndex = new AutotunedIndex(dataset, params, distance); - break; - case FLANN_INDEX_HIERARCHICAL: - nnIndex = new HierarchicalClusteringIndex(dataset, params, distance); - break; - case FLANN_INDEX_LSH: - nnIndex = new LshIndex(dataset, params, distance); - break; - default: - throw FLANNException("Unknown index type"); - } - - return nnIndex; - } -}; - -template -struct index_creator -{ - static NNIndex* create(const Matrix& dataset, const IndexParams& params, const Distance& distance) - { - flann_algorithm_t index_type = get_param(params, "algorithm"); - - NNIndex* nnIndex; - switch (index_type) { - case FLANN_INDEX_LINEAR: - nnIndex = new LinearIndex(dataset, params, distance); - break; - case FLANN_INDEX_KMEANS: - nnIndex = new KMeansIndex(dataset, params, distance); - break; - case FLANN_INDEX_HIERARCHICAL: - nnIndex = new HierarchicalClusteringIndex(dataset, params, distance); - break; - case FLANN_INDEX_LSH: - nnIndex = new LshIndex(dataset, params, distance); - break; - default: - throw FLANNException("Unknown index type"); - } - - return nnIndex; - } -}; - -template -struct index_creator -{ - static NNIndex* create(const Matrix& dataset, const IndexParams& params, const Distance& distance) - { - flann_algorithm_t index_type = get_param(params, "algorithm"); - - NNIndex* nnIndex; - switch (index_type) { - case FLANN_INDEX_LINEAR: - nnIndex = new LinearIndex(dataset, params, distance); - break; - case FLANN_INDEX_HIERARCHICAL: - nnIndex = new HierarchicalClusteringIndex(dataset, params, distance); - break; - case FLANN_INDEX_LSH: - nnIndex = new LshIndex(dataset, params, distance); - break; - default: - throw FLANNException("Unknown index type"); - } - - return nnIndex; - } -}; - -template -NNIndex* create_index_by_type(const Matrix& dataset, const IndexParams& params, const Distance& distance) -{ - return index_creator::create(dataset, params,distance); -} - -} - -#endif /* OPENCV_FLANN_ALL_INDICES_H_ */ diff --git a/modules/flann/include/opencv2/flann/allocator.h b/modules/flann/include/opencv2/flann/allocator.h deleted file mode 100644 index 26091d0..0000000 --- a/modules/flann/include/opencv2/flann/allocator.h +++ /dev/null @@ -1,188 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_ALLOCATOR_H_ -#define OPENCV_FLANN_ALLOCATOR_H_ - -#include -#include - - -namespace cvflann -{ - -/** - * Allocates (using C's malloc) a generic type T. - * - * Params: - * count = number of instances to allocate. - * Returns: pointer (of type T*) to memory buffer - */ -template -T* allocate(size_t count = 1) -{ - T* mem = (T*) ::malloc(sizeof(T)*count); - return mem; -} - - -/** - * Pooled storage allocator - * - * The following routines allow for the efficient allocation of storage in - * small chunks from a specified pool. Rather than allowing each structure - * to be freed individually, an entire pool of storage is freed at once. - * This method has two advantages over just using malloc() and free(). First, - * it is far more efficient for allocating small objects, as there is - * no overhead for remembering all the information needed to free each - * object or consolidating fragmented memory. Second, the decision about - * how long to keep an object is made at the time of allocation, and there - * is no need to track down all the objects to free them. - * - */ - -const size_t WORDSIZE=16; -const size_t BLOCKSIZE=8192; - -class PooledAllocator -{ - /* We maintain memory alignment to word boundaries by requiring that all - allocations be in multiples of the machine wordsize. */ - /* Size of machine word in bytes. Must be power of 2. */ - /* Minimum number of bytes requested at a time from the system. Must be multiple of WORDSIZE. */ - - - int remaining; /* Number of bytes left in current block of storage. */ - void* base; /* Pointer to base of current block of storage. */ - void* loc; /* Current location in block to next allocate memory. */ - int blocksize; - - -public: - int usedMemory; - int wastedMemory; - - /** - Default constructor. Initializes a new pool. - */ - PooledAllocator(int blockSize = BLOCKSIZE) - { - blocksize = blockSize; - remaining = 0; - base = NULL; - - usedMemory = 0; - wastedMemory = 0; - } - - /** - * Destructor. Frees all the memory allocated in this pool. - */ - ~PooledAllocator() - { - void* prev; - - while (base != NULL) { - prev = *((void**) base); /* Get pointer to prev block. */ - ::free(base); - base = prev; - } - } - - /** - * Returns a pointer to a piece of new memory of the given size in bytes - * allocated from the pool. - */ - void* allocateMemory(int size) - { - int blockSize; - - /* Round size up to a multiple of wordsize. The following expression - only works for WORDSIZE that is a power of 2, by masking last bits of - incremented size to zero. - */ - size = (size + (WORDSIZE - 1)) & ~(WORDSIZE - 1); - - /* Check whether a new block must be allocated. Note that the first word - of a block is reserved for a pointer to the previous block. - */ - if (size > remaining) { - - wastedMemory += remaining; - - /* Allocate new storage. */ - blockSize = (size + sizeof(void*) + (WORDSIZE-1) > BLOCKSIZE) ? - size + sizeof(void*) + (WORDSIZE-1) : BLOCKSIZE; - - // use the standard C malloc to allocate memory - void* m = ::malloc(blockSize); - if (!m) { - fprintf(stderr,"Failed to allocate memory.\n"); - return NULL; - } - - /* Fill first word of new block with pointer to previous block. */ - ((void**) m)[0] = base; - base = m; - - int shift = 0; - //int shift = (WORDSIZE - ( (((size_t)m) + sizeof(void*)) & (WORDSIZE-1))) & (WORDSIZE-1); - - remaining = blockSize - sizeof(void*) - shift; - loc = ((char*)m + sizeof(void*) + shift); - } - void* rloc = loc; - loc = (char*)loc + size; - remaining -= size; - - usedMemory += size; - - return rloc; - } - - /** - * Allocates (using this pool) a generic type T. - * - * Params: - * count = number of instances to allocate. - * Returns: pointer (of type T*) to memory buffer - */ - template - T* allocate(size_t count = 1) - { - T* mem = (T*) this->allocateMemory((int)(sizeof(T)*count)); - return mem; - } - -}; - -} - -#endif //OPENCV_FLANN_ALLOCATOR_H_ diff --git a/modules/flann/include/opencv2/flann/any.h b/modules/flann/include/opencv2/flann/any.h deleted file mode 100644 index 7140b2a..0000000 --- a/modules/flann/include/opencv2/flann/any.h +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef OPENCV_FLANN_ANY_H_ -#define OPENCV_FLANN_ANY_H_ -/* - * (C) Copyright Christopher Diggins 2005-2011 - * (C) Copyright Pablo Aguilar 2005 - * (C) Copyright Kevlin Henney 2001 - * - * Distributed under the Boost Software License, Version 1.0. (See - * accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt - * - * Adapted for FLANN by Marius Muja - */ - -#include "defines.h" -#include -#include -#include - -namespace cvflann -{ - -namespace anyimpl -{ - -struct bad_any_cast -{ -}; - -struct empty_any -{ -}; - -inline std::ostream& operator <<(std::ostream& out, const empty_any&) -{ - out << "[empty_any]"; - return out; -} - -struct base_any_policy -{ - virtual void static_delete(void** x) = 0; - virtual void copy_from_value(void const* src, void** dest) = 0; - virtual void clone(void* const* src, void** dest) = 0; - virtual void move(void* const* src, void** dest) = 0; - virtual void* get_value(void** src) = 0; - virtual ::size_t get_size() = 0; - virtual const std::type_info& type() = 0; - virtual void print(std::ostream& out, void* const* src) = 0; - -#ifdef OPENCV_CAN_BREAK_BINARY_COMPATIBILITY - virtual ~base_any_policy() {} -#endif -}; - -template -struct typed_base_any_policy : base_any_policy -{ - virtual ::size_t get_size() { return sizeof(T); } - virtual const std::type_info& type() { return typeid(T); } - -}; - -template -struct small_any_policy : typed_base_any_policy -{ - virtual void static_delete(void**) { } - virtual void copy_from_value(void const* src, void** dest) - { - new (dest) T(* reinterpret_cast(src)); - } - virtual void clone(void* const* src, void** dest) { *dest = *src; } - virtual void move(void* const* src, void** dest) { *dest = *src; } - virtual void* get_value(void** src) { return reinterpret_cast(src); } - virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(src); } -}; - -template -struct big_any_policy : typed_base_any_policy -{ - virtual void static_delete(void** x) - { - if (* x) delete (* reinterpret_cast(x)); *x = NULL; - } - virtual void copy_from_value(void const* src, void** dest) - { - *dest = new T(*reinterpret_cast(src)); - } - virtual void clone(void* const* src, void** dest) - { - *dest = new T(**reinterpret_cast(src)); - } - virtual void move(void* const* src, void** dest) - { - (*reinterpret_cast(dest))->~T(); - **reinterpret_cast(dest) = **reinterpret_cast(src); - } - virtual void* get_value(void** src) { return *src; } - virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(*src); } -}; - -template<> inline void big_any_policy::print(std::ostream& out, void* const* src) -{ - out << int(*reinterpret_cast(*src)); -} - -template<> inline void big_any_policy::print(std::ostream& out, void* const* src) -{ - out << int(*reinterpret_cast(*src)); -} - -template -struct choose_policy -{ - typedef big_any_policy type; -}; - -template -struct choose_policy -{ - typedef small_any_policy type; -}; - -struct any; - -/// Choosing the policy for an any type is illegal, but should never happen. -/// This is designed to throw a compiler error. -template<> -struct choose_policy -{ - typedef void type; -}; - -/// Specializations for small types. -#define SMALL_POLICY(TYPE) \ - template<> \ - struct choose_policy { typedef small_any_policy type; \ - } - -SMALL_POLICY(signed char); -SMALL_POLICY(unsigned char); -SMALL_POLICY(signed short); -SMALL_POLICY(unsigned short); -SMALL_POLICY(signed int); -SMALL_POLICY(unsigned int); -SMALL_POLICY(signed long); -SMALL_POLICY(unsigned long); -SMALL_POLICY(float); -SMALL_POLICY(bool); - -#undef SMALL_POLICY - -/// This function will return a different policy for each type. -template -base_any_policy* get_policy() -{ - static typename choose_policy::type policy; - return &policy; -} -} // namespace anyimpl - -struct any -{ -private: - // fields - anyimpl::base_any_policy* policy; - void* object; - -public: - /// Initializing constructor. - template - any(const T& x) - : policy(anyimpl::get_policy()), object(NULL) - { - assign(x); - } - - /// Empty constructor. - any() - : policy(anyimpl::get_policy()), object(NULL) - { } - - /// Special initializing constructor for string literals. - any(const char* x) - : policy(anyimpl::get_policy()), object(NULL) - { - assign(x); - } - - /// Copy constructor. - any(const any& x) - : policy(anyimpl::get_policy()), object(NULL) - { - assign(x); - } - - /// Destructor. - ~any() - { - policy->static_delete(&object); - } - - /// Assignment function from another any. - any& assign(const any& x) - { - reset(); - policy = x.policy; - policy->clone(&x.object, &object); - return *this; - } - - /// Assignment function. - template - any& assign(const T& x) - { - reset(); - policy = anyimpl::get_policy(); - policy->copy_from_value(&x, &object); - return *this; - } - - /// Assignment operator. - template - any& operator=(const T& x) - { - return assign(x); - } - - /// Assignment operator, specialed for literal strings. - /// They have types like const char [6] which don't work as expected. - any& operator=(const char* x) - { - return assign(x); - } - - /// Utility functions - any& swap(any& x) - { - std::swap(policy, x.policy); - std::swap(object, x.object); - return *this; - } - - /// Cast operator. You can only cast to the original type. - template - T& cast() - { - if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast(); - T* r = reinterpret_cast(policy->get_value(&object)); - return *r; - } - - /// Cast operator. You can only cast to the original type. - template - const T& cast() const - { - if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast(); - T* r = reinterpret_cast(policy->get_value(const_cast(&object))); - return *r; - } - - /// Returns true if the any contains no value. - bool empty() const - { - return policy->type() == typeid(anyimpl::empty_any); - } - - /// Frees any allocated memory, and sets the value to NULL. - void reset() - { - policy->static_delete(&object); - policy = anyimpl::get_policy(); - } - - /// Returns true if the two types are the same. - bool compatible(const any& x) const - { - return policy->type() == x.policy->type(); - } - - /// Returns if the type is compatible with the policy - template - bool has_type() - { - return policy->type() == typeid(T); - } - - const std::type_info& type() const - { - return policy->type(); - } - - friend std::ostream& operator <<(std::ostream& out, const any& any_val); -}; - -inline std::ostream& operator <<(std::ostream& out, const any& any_val) -{ - any_val.policy->print(out,&any_val.object); - return out; -} - -} - -#endif // OPENCV_FLANN_ANY_H_ diff --git a/modules/flann/include/opencv2/flann/autotuned_index.h b/modules/flann/include/opencv2/flann/autotuned_index.h deleted file mode 100644 index 8d53175..0000000 --- a/modules/flann/include/opencv2/flann/autotuned_index.h +++ /dev/null @@ -1,583 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_AUTOTUNED_INDEX_H_ -#define OPENCV_FLANN_AUTOTUNED_INDEX_H_ - -#include "general.h" -#include "nn_index.h" -#include "ground_truth.h" -#include "index_testing.h" -#include "sampling.h" -#include "kdtree_index.h" -#include "kdtree_single_index.h" -#include "kmeans_index.h" -#include "composite_index.h" -#include "linear_index.h" -#include "logger.h" - -namespace cvflann -{ - -template -NNIndex* create_index_by_type(const Matrix& dataset, const IndexParams& params, const Distance& distance); - - -struct AutotunedIndexParams : public IndexParams -{ - AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01, float memory_weight = 0, float sample_fraction = 0.1) - { - (*this)["algorithm"] = FLANN_INDEX_AUTOTUNED; - // precision desired (used for autotuning, -1 otherwise) - (*this)["target_precision"] = target_precision; - // build tree time weighting factor - (*this)["build_weight"] = build_weight; - // index memory weighting factor - (*this)["memory_weight"] = memory_weight; - // what fraction of the dataset to use for autotuning - (*this)["sample_fraction"] = sample_fraction; - } -}; - - -template -class AutotunedIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - AutotunedIndex(const Matrix& inputData, const IndexParams& params = AutotunedIndexParams(), Distance d = Distance()) : - dataset_(inputData), distance_(d) - { - target_precision_ = get_param(params, "target_precision",0.8f); - build_weight_ = get_param(params,"build_weight", 0.01f); - memory_weight_ = get_param(params, "memory_weight", 0.0f); - sample_fraction_ = get_param(params,"sample_fraction", 0.1f); - bestIndex_ = NULL; - } - - AutotunedIndex(const AutotunedIndex&); - AutotunedIndex& operator=(const AutotunedIndex&); - - virtual ~AutotunedIndex() - { - if (bestIndex_ != NULL) { - delete bestIndex_; - bestIndex_ = NULL; - } - } - - /** - * Method responsible with building the index. - */ - virtual void buildIndex() - { - bestParams_ = estimateBuildParams(); - Logger::info("----------------------------------------------------\n"); - Logger::info("Autotuned parameters:\n"); - print_params(bestParams_); - Logger::info("----------------------------------------------------\n"); - - bestIndex_ = create_index_by_type(dataset_, bestParams_, distance_); - bestIndex_->buildIndex(); - speedup_ = estimateSearchParams(bestSearchParams_); - Logger::info("----------------------------------------------------\n"); - Logger::info("Search parameters:\n"); - print_params(bestSearchParams_); - Logger::info("----------------------------------------------------\n"); - } - - /** - * Saves the index to a stream - */ - virtual void saveIndex(FILE* stream) - { - save_value(stream, (int)bestIndex_->getType()); - bestIndex_->saveIndex(stream); - save_value(stream, get_param(bestSearchParams_, "checks")); - } - - /** - * Loads the index from a stream - */ - virtual void loadIndex(FILE* stream) - { - int index_type; - - load_value(stream, index_type); - IndexParams params; - params["algorithm"] = (flann_algorithm_t)index_type; - bestIndex_ = create_index_by_type(dataset_, params, distance_); - bestIndex_->loadIndex(stream); - int checks; - load_value(stream, checks); - bestSearchParams_["checks"] = checks; - } - - /** - * Method that searches for nearest-neighbors - */ - virtual void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) - { - int checks = get_param(searchParams,"checks",FLANN_CHECKS_AUTOTUNED); - if (checks == FLANN_CHECKS_AUTOTUNED) { - bestIndex_->findNeighbors(result, vec, bestSearchParams_); - } - else { - bestIndex_->findNeighbors(result, vec, searchParams); - } - } - - - IndexParams getParameters() const - { - return bestIndex_->getParameters(); - } - - SearchParams getSearchParameters() const - { - return bestSearchParams_; - } - - float getSpeedup() const - { - return speedup_; - } - - - /** - * Number of features in this index. - */ - virtual size_t size() const - { - return bestIndex_->size(); - } - - /** - * The length of each vector in this index. - */ - virtual size_t veclen() const - { - return bestIndex_->veclen(); - } - - /** - * The amount of memory (in bytes) this index uses. - */ - virtual int usedMemory() const - { - return bestIndex_->usedMemory(); - } - - /** - * Algorithm name - */ - virtual flann_algorithm_t getType() const - { - return FLANN_INDEX_AUTOTUNED; - } - -private: - - struct CostData - { - float searchTimeCost; - float buildTimeCost; - float memoryCost; - float totalCost; - IndexParams params; - }; - - void evaluate_kmeans(CostData& cost) - { - StartStopTimer t; - int checks; - const int nn = 1; - - Logger::info("KMeansTree using params: max_iterations=%d, branching=%d\n", - get_param(cost.params,"iterations"), - get_param(cost.params,"branching")); - KMeansIndex kmeans(sampledDataset_, cost.params, distance_); - // measure index build time - t.start(); - kmeans.buildIndex(); - t.stop(); - float buildTime = (float)t.value; - - // measure search time - float searchTime = test_index_precision(kmeans, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn); - - float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float)); - cost.memoryCost = (kmeans.usedMemory() + datasetMemory) / datasetMemory; - cost.searchTimeCost = searchTime; - cost.buildTimeCost = buildTime; - Logger::info("KMeansTree buildTime=%g, searchTime=%g, build_weight=%g\n", buildTime, searchTime, build_weight_); - } - - - void evaluate_kdtree(CostData& cost) - { - StartStopTimer t; - int checks; - const int nn = 1; - - Logger::info("KDTree using params: trees=%d\n", get_param(cost.params,"trees")); - KDTreeIndex kdtree(sampledDataset_, cost.params, distance_); - - t.start(); - kdtree.buildIndex(); - t.stop(); - float buildTime = (float)t.value; - - //measure search time - float searchTime = test_index_precision(kdtree, sampledDataset_, testDataset_, gt_matches_, target_precision_, checks, distance_, nn); - - float datasetMemory = float(sampledDataset_.rows * sampledDataset_.cols * sizeof(float)); - cost.memoryCost = (kdtree.usedMemory() + datasetMemory) / datasetMemory; - cost.searchTimeCost = searchTime; - cost.buildTimeCost = buildTime; - Logger::info("KDTree buildTime=%g, searchTime=%g\n", buildTime, searchTime); - } - - - // struct KMeansSimpleDownhillFunctor { - // - // Autotune& autotuner; - // KMeansSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {}; - // - // float operator()(int* params) { - // - // float maxFloat = numeric_limits::max(); - // - // if (params[0]<2) return maxFloat; - // if (params[1]<0) return maxFloat; - // - // CostData c; - // c.params["algorithm"] = KMEANS; - // c.params["centers-init"] = CENTERS_RANDOM; - // c.params["branching"] = params[0]; - // c.params["max-iterations"] = params[1]; - // - // autotuner.evaluate_kmeans(c); - // - // return c.timeCost; - // - // } - // }; - // - // struct KDTreeSimpleDownhillFunctor { - // - // Autotune& autotuner; - // KDTreeSimpleDownhillFunctor(Autotune& autotuner_) : autotuner(autotuner_) {}; - // - // float operator()(int* params) { - // float maxFloat = numeric_limits::max(); - // - // if (params[0]<1) return maxFloat; - // - // CostData c; - // c.params["algorithm"] = KDTREE; - // c.params["trees"] = params[0]; - // - // autotuner.evaluate_kdtree(c); - // - // return c.timeCost; - // - // } - // }; - - - - void optimizeKMeans(std::vector& costs) - { - Logger::info("KMEANS, Step 1: Exploring parameter space\n"); - - // explore kmeans parameters space using combinations of the parameters below - int maxIterations[] = { 1, 5, 10, 15 }; - int branchingFactors[] = { 16, 32, 64, 128, 256 }; - - int kmeansParamSpaceSize = FLANN_ARRAY_LEN(maxIterations) * FLANN_ARRAY_LEN(branchingFactors); - costs.reserve(costs.size() + kmeansParamSpaceSize); - - // evaluate kmeans for all parameter combinations - for (size_t i = 0; i < FLANN_ARRAY_LEN(maxIterations); ++i) { - for (size_t j = 0; j < FLANN_ARRAY_LEN(branchingFactors); ++j) { - CostData cost; - cost.params["algorithm"] = FLANN_INDEX_KMEANS; - cost.params["centers_init"] = FLANN_CENTERS_RANDOM; - cost.params["iterations"] = maxIterations[i]; - cost.params["branching"] = branchingFactors[j]; - - evaluate_kmeans(cost); - costs.push_back(cost); - } - } - - // Logger::info("KMEANS, Step 2: simplex-downhill optimization\n"); - // - // const int n = 2; - // // choose initial simplex points as the best parameters so far - // int kmeansNMPoints[n*(n+1)]; - // float kmeansVals[n+1]; - // for (int i=0;i& costs) - { - Logger::info("KD-TREE, Step 1: Exploring parameter space\n"); - - // explore kd-tree parameters space using the parameters below - int testTrees[] = { 1, 4, 8, 16, 32 }; - - // evaluate kdtree for all parameter combinations - for (size_t i = 0; i < FLANN_ARRAY_LEN(testTrees); ++i) { - CostData cost; - cost.params["trees"] = testTrees[i]; - - evaluate_kdtree(cost); - costs.push_back(cost); - } - - // Logger::info("KD-TREE, Step 2: simplex-downhill optimization\n"); - // - // const int n = 1; - // // choose initial simplex points as the best parameters so far - // int kdtreeNMPoints[n*(n+1)]; - // float kdtreeVals[n+1]; - // for (int i=0;i costs; - - int sampleSize = int(sample_fraction_ * dataset_.rows); - int testSampleSize = std::min(sampleSize / 10, 1000); - - Logger::info("Entering autotuning, dataset size: %d, sampleSize: %d, testSampleSize: %d, target precision: %g\n", dataset_.rows, sampleSize, testSampleSize, target_precision_); - - // For a very small dataset, it makes no sense to build any fancy index, just - // use linear search - if (testSampleSize < 10) { - Logger::info("Choosing linear, dataset too small\n"); - return LinearIndexParams(); - } - - // We use a fraction of the original dataset to speedup the autotune algorithm - sampledDataset_ = random_sample(dataset_, sampleSize); - // We use a cross-validation approach, first we sample a testset from the dataset - testDataset_ = random_sample(sampledDataset_, testSampleSize, true); - - // We compute the ground truth using linear search - Logger::info("Computing ground truth... \n"); - gt_matches_ = Matrix(new int[testDataset_.rows], testDataset_.rows, 1); - StartStopTimer t; - t.start(); - compute_ground_truth(sampledDataset_, testDataset_, gt_matches_, 0, distance_); - t.stop(); - - CostData linear_cost; - linear_cost.searchTimeCost = (float)t.value; - linear_cost.buildTimeCost = 0; - linear_cost.memoryCost = 0; - linear_cost.params["algorithm"] = FLANN_INDEX_LINEAR; - - costs.push_back(linear_cost); - - // Start parameter autotune process - Logger::info("Autotuning parameters...\n"); - - optimizeKMeans(costs); - optimizeKDTree(costs); - - float bestTimeCost = costs[0].searchTimeCost; - for (size_t i = 0; i < costs.size(); ++i) { - float timeCost = costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost; - if (timeCost < bestTimeCost) { - bestTimeCost = timeCost; - } - } - - float bestCost = costs[0].searchTimeCost / bestTimeCost; - IndexParams bestParams = costs[0].params; - if (bestTimeCost > 0) { - for (size_t i = 0; i < costs.size(); ++i) { - float crtCost = (costs[i].buildTimeCost * build_weight_ + costs[i].searchTimeCost) / bestTimeCost + - memory_weight_ * costs[i].memoryCost; - if (crtCost < bestCost) { - bestCost = crtCost; - bestParams = costs[i].params; - } - } - } - - delete[] gt_matches_.data; - delete[] testDataset_.data; - delete[] sampledDataset_.data; - - return bestParams; - } - - - - /** - * Estimates the search time parameters needed to get the desired precision. - * Precondition: the index is built - * Postcondition: the searchParams will have the optimum params set, also the speedup obtained over linear search. - */ - float estimateSearchParams(SearchParams& searchParams) - { - const int nn = 1; - const size_t SAMPLE_COUNT = 1000; - - assert(bestIndex_ != NULL); // must have a valid index - - float speedup = 0; - - int samples = (int)std::min(dataset_.rows / 10, SAMPLE_COUNT); - if (samples > 0) { - Matrix testDataset = random_sample(dataset_, samples); - - Logger::info("Computing ground truth\n"); - - // we need to compute the ground truth first - Matrix gt_matches(new int[testDataset.rows], testDataset.rows, 1); - StartStopTimer t; - t.start(); - compute_ground_truth(dataset_, testDataset, gt_matches, 1, distance_); - t.stop(); - float linear = (float)t.value; - - int checks; - Logger::info("Estimating number of checks\n"); - - float searchTime; - float cb_index; - if (bestIndex_->getType() == FLANN_INDEX_KMEANS) { - Logger::info("KMeans algorithm, estimating cluster border factor\n"); - KMeansIndex* kmeans = (KMeansIndex*)bestIndex_; - float bestSearchTime = -1; - float best_cb_index = -1; - int best_checks = -1; - for (cb_index = 0; cb_index < 1.1f; cb_index += 0.2f) { - kmeans->set_cb_index(cb_index); - searchTime = test_index_precision(*kmeans, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1); - if ((searchTime < bestSearchTime) || (bestSearchTime == -1)) { - bestSearchTime = searchTime; - best_cb_index = cb_index; - best_checks = checks; - } - } - searchTime = bestSearchTime; - cb_index = best_cb_index; - checks = best_checks; - - kmeans->set_cb_index(best_cb_index); - Logger::info("Optimum cb_index: %g\n", cb_index); - bestParams_["cb_index"] = cb_index; - } - else { - searchTime = test_index_precision(*bestIndex_, dataset_, testDataset, gt_matches, target_precision_, checks, distance_, nn, 1); - } - - Logger::info("Required number of checks: %d \n", checks); - searchParams["checks"] = checks; - - speedup = linear / searchTime; - - delete[] gt_matches.data; - delete[] testDataset.data; - } - - return speedup; - } - -private: - NNIndex* bestIndex_; - - IndexParams bestParams_; - SearchParams bestSearchParams_; - - Matrix sampledDataset_; - Matrix testDataset_; - Matrix gt_matches_; - - float speedup_; - - /** - * The dataset used by this index - */ - const Matrix dataset_; - - /** - * Index parameters - */ - float target_precision_; - float build_weight_; - float memory_weight_; - float sample_fraction_; - - Distance distance_; - - -}; -} - -#endif /* OPENCV_FLANN_AUTOTUNED_INDEX_H_ */ diff --git a/modules/flann/include/opencv2/flann/composite_index.h b/modules/flann/include/opencv2/flann/composite_index.h deleted file mode 100644 index 527ca1a..0000000 --- a/modules/flann/include/opencv2/flann/composite_index.h +++ /dev/null @@ -1,194 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_COMPOSITE_INDEX_H_ -#define OPENCV_FLANN_COMPOSITE_INDEX_H_ - -#include "general.h" -#include "nn_index.h" -#include "kdtree_index.h" -#include "kmeans_index.h" - -namespace cvflann -{ - -/** - * Index parameters for the CompositeIndex. - */ -struct CompositeIndexParams : public IndexParams -{ - CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11, - flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 ) - { - (*this)["algorithm"] = FLANN_INDEX_KMEANS; - // number of randomized trees to use (for kdtree) - (*this)["trees"] = trees; - // branching factor - (*this)["branching"] = branching; - // max iterations to perform in one kmeans clustering (kmeans tree) - (*this)["iterations"] = iterations; - // algorithm used for picking the initial cluster centers for kmeans tree - (*this)["centers_init"] = centers_init; - // cluster boundary index. Used when searching the kmeans tree - (*this)["cb_index"] = cb_index; - } -}; - - -/** - * This index builds a kd-tree index and a k-means index and performs nearest - * neighbour search both indexes. This gives a slight boost in search performance - * as some of the neighbours that are missed by one index are found by the other. - */ -template -class CompositeIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - /** - * Index constructor - * @param inputData dataset containing the points to index - * @param params Index parameters - * @param d Distance functor - * @return - */ - CompositeIndex(const Matrix& inputData, const IndexParams& params = CompositeIndexParams(), - Distance d = Distance()) : index_params_(params) - { - kdtree_index_ = new KDTreeIndex(inputData, params, d); - kmeans_index_ = new KMeansIndex(inputData, params, d); - - } - - CompositeIndex(const CompositeIndex&); - CompositeIndex& operator=(const CompositeIndex&); - - virtual ~CompositeIndex() - { - delete kdtree_index_; - delete kmeans_index_; - } - - /** - * @return The index type - */ - flann_algorithm_t getType() const - { - return FLANN_INDEX_COMPOSITE; - } - - /** - * @return Size of the index - */ - size_t size() const - { - return kdtree_index_->size(); - } - - /** - * \returns The dimensionality of the features in this index. - */ - size_t veclen() const - { - return kdtree_index_->veclen(); - } - - /** - * \returns The amount of memory (in bytes) used by the index. - */ - int usedMemory() const - { - return kmeans_index_->usedMemory() + kdtree_index_->usedMemory(); - } - - /** - * \brief Builds the index - */ - void buildIndex() - { - Logger::info("Building kmeans tree...\n"); - kmeans_index_->buildIndex(); - Logger::info("Building kdtree tree...\n"); - kdtree_index_->buildIndex(); - } - - /** - * \brief Saves the index to a stream - * \param stream The stream to save the index to - */ - void saveIndex(FILE* stream) - { - kmeans_index_->saveIndex(stream); - kdtree_index_->saveIndex(stream); - } - - /** - * \brief Loads the index from a stream - * \param stream The stream from which the index is loaded - */ - void loadIndex(FILE* stream) - { - kmeans_index_->loadIndex(stream); - kdtree_index_->loadIndex(stream); - } - - /** - * \returns The index parameters - */ - IndexParams getParameters() const - { - return index_params_; - } - - /** - * \brief Method that searches for nearest-neighbours - */ - void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) - { - kmeans_index_->findNeighbors(result, vec, searchParams); - kdtree_index_->findNeighbors(result, vec, searchParams); - } - -private: - /** The k-means index */ - KMeansIndex* kmeans_index_; - - /** The kd-tree index */ - KDTreeIndex* kdtree_index_; - - /** The index parameters */ - const IndexParams index_params_; -}; - -} - -#endif //OPENCV_FLANN_COMPOSITE_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/config.h b/modules/flann/include/opencv2/flann/config.h deleted file mode 100644 index 56832fd..0000000 --- a/modules/flann/include/opencv2/flann/config.h +++ /dev/null @@ -1,38 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2011 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2011 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_CONFIG_H_ -#define OPENCV_FLANN_CONFIG_H_ - -#ifdef FLANN_VERSION_ -#undef FLANN_VERSION_ -#endif -#define FLANN_VERSION_ "1.6.10" - -#endif /* OPENCV_FLANN_CONFIG_H_ */ diff --git a/modules/flann/include/opencv2/flann/defines.h b/modules/flann/include/opencv2/flann/defines.h deleted file mode 100644 index 13833b3..0000000 --- a/modules/flann/include/opencv2/flann/defines.h +++ /dev/null @@ -1,176 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2011 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2011 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_DEFINES_H_ -#define OPENCV_FLANN_DEFINES_H_ - -#include "config.h" - -#ifdef FLANN_EXPORT -#undef FLANN_EXPORT -#endif -#ifdef WIN32 -/* win32 dll export/import directives */ - #ifdef FLANN_EXPORTS - #define FLANN_EXPORT __declspec(dllexport) - #elif defined(FLANN_STATIC) - #define FLANN_EXPORT - #else - #define FLANN_EXPORT __declspec(dllimport) - #endif -#else -/* unix needs nothing */ - #define FLANN_EXPORT -#endif - - -#ifdef FLANN_DEPRECATED -#undef FLANN_DEPRECATED -#endif -#ifdef __GNUC__ -#define FLANN_DEPRECATED __attribute__ ((deprecated)) -#elif defined(_MSC_VER) -#define FLANN_DEPRECATED __declspec(deprecated) -#else -#pragma message("WARNING: You need to implement FLANN_DEPRECATED for this compiler") -#define FLANN_DEPRECATED -#endif - - -#undef FLANN_PLATFORM_32_BIT -#undef FLANN_PLATFORM_64_BIT -#if defined __amd64__ || defined __x86_64__ || defined _WIN64 || defined _M_X64 -#define FLANN_PLATFORM_64_BIT -#else -#define FLANN_PLATFORM_32_BIT -#endif - - -#undef FLANN_ARRAY_LEN -#define FLANN_ARRAY_LEN(a) (sizeof(a)/sizeof(a[0])) - -namespace cvflann { - -/* Nearest neighbour index algorithms */ -enum flann_algorithm_t -{ - FLANN_INDEX_LINEAR = 0, - FLANN_INDEX_KDTREE = 1, - FLANN_INDEX_KMEANS = 2, - FLANN_INDEX_COMPOSITE = 3, - FLANN_INDEX_KDTREE_SINGLE = 4, - FLANN_INDEX_HIERARCHICAL = 5, - FLANN_INDEX_LSH = 6, - FLANN_INDEX_SAVED = 254, - FLANN_INDEX_AUTOTUNED = 255, - - // deprecated constants, should use the FLANN_INDEX_* ones instead - LINEAR = 0, - KDTREE = 1, - KMEANS = 2, - COMPOSITE = 3, - KDTREE_SINGLE = 4, - SAVED = 254, - AUTOTUNED = 255 -}; - - - -enum flann_centers_init_t -{ - FLANN_CENTERS_RANDOM = 0, - FLANN_CENTERS_GONZALES = 1, - FLANN_CENTERS_KMEANSPP = 2, - - // deprecated constants, should use the FLANN_CENTERS_* ones instead - CENTERS_RANDOM = 0, - CENTERS_GONZALES = 1, - CENTERS_KMEANSPP = 2 -}; - -enum flann_log_level_t -{ - FLANN_LOG_NONE = 0, - FLANN_LOG_FATAL = 1, - FLANN_LOG_ERROR = 2, - FLANN_LOG_WARN = 3, - FLANN_LOG_INFO = 4 -}; - -enum flann_distance_t -{ - FLANN_DIST_EUCLIDEAN = 1, - FLANN_DIST_L2 = 1, - FLANN_DIST_MANHATTAN = 2, - FLANN_DIST_L1 = 2, - FLANN_DIST_MINKOWSKI = 3, - FLANN_DIST_MAX = 4, - FLANN_DIST_HIST_INTERSECT = 5, - FLANN_DIST_HELLINGER = 6, - FLANN_DIST_CHI_SQUARE = 7, - FLANN_DIST_CS = 7, - FLANN_DIST_KULLBACK_LEIBLER = 8, - FLANN_DIST_KL = 8, - FLANN_DIST_HAMMING = 9, - - // deprecated constants, should use the FLANN_DIST_* ones instead - EUCLIDEAN = 1, - MANHATTAN = 2, - MINKOWSKI = 3, - MAX_DIST = 4, - HIST_INTERSECT = 5, - HELLINGER = 6, - CS = 7, - KL = 8, - KULLBACK_LEIBLER = 8 -}; - -enum flann_datatype_t -{ - FLANN_INT8 = 0, - FLANN_INT16 = 1, - FLANN_INT32 = 2, - FLANN_INT64 = 3, - FLANN_UINT8 = 4, - FLANN_UINT16 = 5, - FLANN_UINT32 = 6, - FLANN_UINT64 = 7, - FLANN_FLOAT32 = 8, - FLANN_FLOAT64 = 9 -}; - -enum -{ - FLANN_CHECKS_UNLIMITED = -1, - FLANN_CHECKS_AUTOTUNED = -2 -}; - -} - -#endif /* OPENCV_FLANN_DEFINES_H_ */ diff --git a/modules/flann/include/opencv2/flann/dist.h b/modules/flann/include/opencv2/flann/dist.h deleted file mode 100644 index 80ae2dc..0000000 --- a/modules/flann/include/opencv2/flann/dist.h +++ /dev/null @@ -1,817 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_DIST_H_ -#define OPENCV_FLANN_DIST_H_ - -#include -#include -#include -#ifdef _MSC_VER -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#else -#include -#endif - -#include "defines.h" - -#if (defined WIN32 || defined _WIN32) && defined(_M_ARM) -# include -#endif - -#ifdef __ARM_NEON__ -# include "arm_neon.h" -#endif - -namespace cvflann -{ - -template -inline T abs(T x) { return (x<0) ? -x : x; } - -template<> -inline int abs(int x) { return ::abs(x); } - -template<> -inline float abs(float x) { return fabsf(x); } - -template<> -inline double abs(double x) { return fabs(x); } - -template -struct Accumulator { typedef T Type; }; -template<> -struct Accumulator { typedef float Type; }; -template<> -struct Accumulator { typedef float Type; }; -template<> -struct Accumulator { typedef float Type; }; -template<> -struct Accumulator { typedef float Type; }; -template<> -struct Accumulator { typedef float Type; }; -template<> -struct Accumulator { typedef float Type; }; - -#undef True -#undef False - -class True -{ -}; - -class False -{ -}; - - -/** - * Squared Euclidean distance functor. - * - * This is the simpler, unrolled version. This is preferable for - * very low dimensionality data (eg 3D points) - */ -template -struct L2_Simple -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const - { - ResultType result = ResultType(); - ResultType diff; - for(size_t i = 0; i < size; ++i ) { - diff = *a++ - *b++; - result += diff*diff; - } - return result; - } - - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return (a-b)*(a-b); - } -}; - - - -/** - * Squared Euclidean distance functor, optimized version - */ -template -struct L2 -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the squared Euclidean distance between two vectors. - * - * This is highly optimised, with loop unrolling, as it is one - * of the most expensive inner loops. - * - * The computation of squared root at the end is omitted for - * efficiency. - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType diff0, diff1, diff2, diff3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - diff0 = (ResultType)(a[0] - b[0]); - diff1 = (ResultType)(a[1] - b[1]); - diff2 = (ResultType)(a[2] - b[2]); - diff3 = (ResultType)(a[3] - b[3]); - result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3; - a += 4; - b += 4; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - /* Process last 0-3 pixels. Not needed for standard vector lengths. */ - while (a < last) { - diff0 = (ResultType)(*a++ - *b++); - result += diff0 * diff0; - } - return result; - } - - /** - * Partial euclidean distance, using just one dimension. This is used by the - * kd-tree when computing partial distances while traversing the tree. - * - * Squared root is omitted for efficiency. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return (a-b)*(a-b); - } -}; - - -/* - * Manhattan distance functor, optimized version - */ -template -struct L1 -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the Manhattan (L_1) distance between two vectors. - * - * This is highly optimised, with loop unrolling, as it is one - * of the most expensive inner loops. - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType diff0, diff1, diff2, diff3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - diff0 = (ResultType)abs(a[0] - b[0]); - diff1 = (ResultType)abs(a[1] - b[1]); - diff2 = (ResultType)abs(a[2] - b[2]); - diff3 = (ResultType)abs(a[3] - b[3]); - result += diff0 + diff1 + diff2 + diff3; - a += 4; - b += 4; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - /* Process last 0-3 pixels. Not needed for standard vector lengths. */ - while (a < last) { - diff0 = (ResultType)abs(*a++ - *b++); - result += diff0; - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return abs(a-b); - } -}; - - - -template -struct MinkowskiDistance -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - int order; - - MinkowskiDistance(int order_) : order(order_) {} - - /** - * Compute the Minkowsky (L_p) distance between two vectors. - * - * This is highly optimised, with loop unrolling, as it is one - * of the most expensive inner loops. - * - * The computation of squared root at the end is omitted for - * efficiency. - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType diff0, diff1, diff2, diff3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - diff0 = (ResultType)abs(a[0] - b[0]); - diff1 = (ResultType)abs(a[1] - b[1]); - diff2 = (ResultType)abs(a[2] - b[2]); - diff3 = (ResultType)abs(a[3] - b[3]); - result += pow(diff0,order) + pow(diff1,order) + pow(diff2,order) + pow(diff3,order); - a += 4; - b += 4; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - /* Process last 0-3 pixels. Not needed for standard vector lengths. */ - while (a < last) { - diff0 = (ResultType)abs(*a++ - *b++); - result += pow(diff0,order); - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return pow(static_cast(abs(a-b)),order); - } -}; - - - -template -struct MaxDistance -{ - typedef False is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the max distance (L_infinity) between two vectors. - * - * This distance is not a valid kdtree distance, it's not dimensionwise additive. - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType diff0, diff1, diff2, diff3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - diff0 = abs(a[0] - b[0]); - diff1 = abs(a[1] - b[1]); - diff2 = abs(a[2] - b[2]); - diff3 = abs(a[3] - b[3]); - if (diff0>result) {result = diff0; } - if (diff1>result) {result = diff1; } - if (diff2>result) {result = diff2; } - if (diff3>result) {result = diff3; } - a += 4; - b += 4; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - /* Process last 0-3 pixels. Not needed for standard vector lengths. */ - while (a < last) { - diff0 = abs(*a++ - *b++); - result = (diff0>result) ? diff0 : result; - } - return result; - } - - /* This distance functor is not dimension-wise additive, which - * makes it an invalid kd-tree distance, not implementing the accum_dist method */ - -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor - * bit count of A exclusive XOR'ed with B - */ -struct HammingLUT -{ - typedef False is_kdtree_distance; - typedef False is_vector_space_distance; - - typedef unsigned char ElementType; - typedef int ResultType; - - /** this will count the bits in a ^ b - */ - ResultType operator()(const unsigned char* a, const unsigned char* b, int size) const - { - static const uchar popCountTable[] = - { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 - }; - ResultType result = 0; - for (int i = 0; i < size; i++) { - result += popCountTable[a[i] ^ b[i]]; - } - return result; - } -}; - -/** - * Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor - * bit count of A exclusive XOR'ed with B - */ -struct HammingLUT2 -{ - typedef False is_kdtree_distance; - typedef False is_vector_space_distance; - - typedef unsigned char ElementType; - typedef int ResultType; - - /** this will count the bits in a ^ b - */ - ResultType operator()(const unsigned char* a, const unsigned char* b, size_t size) const - { - static const uchar popCountTable[] = - { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 - }; - ResultType result = 0; - for (size_t i = 0; i < size; i++) { - result += popCountTable[a[i] ^ b[i]]; - } - return result; - } -}; - -/** - * Hamming distance functor (pop count between two binary vectors, i.e. xor them and count the number of bits set) - * That code was taken from brief.cpp in OpenCV - */ -template -struct Hamming -{ - typedef False is_kdtree_distance; - typedef False is_vector_space_distance; - - - typedef T ElementType; - typedef int ResultType; - - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const - { - ResultType result = 0; -#ifdef __ARM_NEON__ - { - uint32x4_t bits = vmovq_n_u32(0); - for (size_t i = 0; i < size; i += 16) { - uint8x16_t A_vec = vld1q_u8 (a + i); - uint8x16_t B_vec = vld1q_u8 (b + i); - uint8x16_t AxorB = veorq_u8 (A_vec, B_vec); - uint8x16_t bitsSet = vcntq_u8 (AxorB); - uint16x8_t bitSet8 = vpaddlq_u8 (bitsSet); - uint32x4_t bitSet4 = vpaddlq_u16 (bitSet8); - bits = vaddq_u32(bits, bitSet4); - } - uint64x2_t bitSet2 = vpaddlq_u32 (bits); - result = vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),0); - result += vgetq_lane_s32 (vreinterpretq_s32_u64(bitSet2),2); - } -#elif __GNUC__ - { - //for portability just use unsigned long -- and use the __builtin_popcountll (see docs for __builtin_popcountll) - typedef unsigned long long pop_t; - const size_t modulo = size % sizeof(pop_t); - const pop_t* a2 = reinterpret_cast (a); - const pop_t* b2 = reinterpret_cast (b); - const pop_t* a2_end = a2 + (size / sizeof(pop_t)); - - for (; a2 != a2_end; ++a2, ++b2) result += __builtin_popcountll((*a2) ^ (*b2)); - - if (modulo) { - //in the case where size is not dividable by sizeof(size_t) - //need to mask off the bits at the end - pop_t a_final = 0, b_final = 0; - memcpy(&a_final, a2, modulo); - memcpy(&b_final, b2, modulo); - result += __builtin_popcountll(a_final ^ b_final); - } - } -#else // NO NEON and NOT GNUC - typedef unsigned long long pop_t; - HammingLUT lut; - result = lut(reinterpret_cast (a), - reinterpret_cast (b), size * sizeof(pop_t)); -#endif - return result; - } -}; - -template -struct Hamming2 -{ - typedef False is_kdtree_distance; - typedef False is_vector_space_distance; - - typedef T ElementType; - typedef int ResultType; - - /** This is popcount_3() from: - * http://en.wikipedia.org/wiki/Hamming_weight */ - unsigned int popcnt32(uint32_t n) const - { - n -= ((n >> 1) & 0x55555555); - n = (n & 0x33333333) + ((n >> 2) & 0x33333333); - return (((n + (n >> 4))& 0xF0F0F0F)* 0x1010101) >> 24; - } - -#ifdef FLANN_PLATFORM_64_BIT - unsigned int popcnt64(uint64_t n) const - { - n -= ((n >> 1) & 0x5555555555555555); - n = (n & 0x3333333333333333) + ((n >> 2) & 0x3333333333333333); - return (((n + (n >> 4))& 0x0f0f0f0f0f0f0f0f)* 0x0101010101010101) >> 56; - } -#endif - - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const - { -#ifdef FLANN_PLATFORM_64_BIT - const uint64_t* pa = reinterpret_cast(a); - const uint64_t* pb = reinterpret_cast(b); - ResultType result = 0; - size /= (sizeof(uint64_t)/sizeof(unsigned char)); - for(size_t i = 0; i < size; ++i ) { - result += popcnt64(*pa ^ *pb); - ++pa; - ++pb; - } -#else - const uint32_t* pa = reinterpret_cast(a); - const uint32_t* pb = reinterpret_cast(b); - ResultType result = 0; - size /= (sizeof(uint32_t)/sizeof(unsigned char)); - for(size_t i = 0; i < size; ++i ) { - result += popcnt32(*pa ^ *pb); - ++pa; - ++pb; - } -#endif - return result; - } -}; - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -template -struct HistIntersectionDistance -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the histogram intersection distance - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType min0, min1, min2, min3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - min0 = (ResultType)(a[0] < b[0] ? a[0] : b[0]); - min1 = (ResultType)(a[1] < b[1] ? a[1] : b[1]); - min2 = (ResultType)(a[2] < b[2] ? a[2] : b[2]); - min3 = (ResultType)(a[3] < b[3] ? a[3] : b[3]); - result += min0 + min1 + min2 + min3; - a += 4; - b += 4; - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - /* Process last 0-3 pixels. Not needed for standard vector lengths. */ - while (a < last) { - min0 = (ResultType)(*a < *b ? *a : *b); - result += min0; - ++a; - ++b; - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return a -struct HellingerDistance -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the histogram intersection distance - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType /*worst_dist*/ = -1) const - { - ResultType result = ResultType(); - ResultType diff0, diff1, diff2, diff3; - Iterator1 last = a + size; - Iterator1 lastgroup = last - 3; - - /* Process 4 items with each loop for efficiency. */ - while (a < lastgroup) { - diff0 = sqrt(static_cast(a[0])) - sqrt(static_cast(b[0])); - diff1 = sqrt(static_cast(a[1])) - sqrt(static_cast(b[1])); - diff2 = sqrt(static_cast(a[2])) - sqrt(static_cast(b[2])); - diff3 = sqrt(static_cast(a[3])) - sqrt(static_cast(b[3])); - result += diff0 * diff0 + diff1 * diff1 + diff2 * diff2 + diff3 * diff3; - a += 4; - b += 4; - } - while (a < last) { - diff0 = sqrt(static_cast(*a++)) - sqrt(static_cast(*b++)); - result += diff0 * diff0; - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - return sqrt(static_cast(a)) - sqrt(static_cast(b)); - } -}; - - -template -struct ChiSquareDistance -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the chi-square distance - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - ResultType sum, diff; - Iterator1 last = a + size; - - while (a < last) { - sum = (ResultType)(*a + *b); - if (sum>0) { - diff = (ResultType)(*a - *b); - result += diff*diff/sum; - } - ++a; - ++b; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - ResultType result = ResultType(); - ResultType sum, diff; - - sum = (ResultType)(a+b); - if (sum>0) { - diff = (ResultType)(a-b); - result = diff*diff/sum; - } - return result; - } -}; - - -template -struct KL_Divergence -{ - typedef True is_kdtree_distance; - typedef True is_vector_space_distance; - - typedef T ElementType; - typedef typename Accumulator::Type ResultType; - - /** - * Compute the Kullback–Leibler divergence - */ - template - ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const - { - ResultType result = ResultType(); - Iterator1 last = a + size; - - while (a < last) { - if (* a != 0) { - ResultType ratio = (ResultType)(*a / *b); - if (ratio>0) { - result += *a * log(ratio); - } - } - ++a; - ++b; - - if ((worst_dist>0)&&(result>worst_dist)) { - return result; - } - } - return result; - } - - /** - * Partial distance, used by the kd-tree. - */ - template - inline ResultType accum_dist(const U& a, const V& b, int) const - { - ResultType result = ResultType(); - ResultType ratio = (ResultType)(a / b); - if (ratio>0) { - result = a * log(ratio); - } - return result; - } -}; - - - -/* - * This is a "zero iterator". It basically behaves like a zero filled - * array to all algorithms that use arrays as iterators (STL style). - * It's useful when there's a need to compute the distance between feature - * and origin it and allows for better compiler optimisation than using a - * zero-filled array. - */ -template -struct ZeroIterator -{ - - T operator*() - { - return 0; - } - - T operator[](int) - { - return 0; - } - - const ZeroIterator& operator ++() - { - return *this; - } - - ZeroIterator operator ++(int) - { - return *this; - } - - ZeroIterator& operator+=(int) - { - return *this; - } - -}; - -} - -#endif //OPENCV_FLANN_DIST_H_ diff --git a/modules/flann/include/opencv2/flann/dummy.h b/modules/flann/include/opencv2/flann/dummy.h deleted file mode 100644 index 26bd3fa..0000000 --- a/modules/flann/include/opencv2/flann/dummy.h +++ /dev/null @@ -1,16 +0,0 @@ - -#ifndef OPENCV_FLANN_DUMMY_H_ -#define OPENCV_FLANN_DUMMY_H_ - -namespace cvflann -{ - -#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS -__declspec(dllexport) -#endif -void dummyfunc(); - -} - - -#endif /* OPENCV_FLANN_DUMMY_H_ */ diff --git a/modules/flann/include/opencv2/flann/dynamic_bitset.h b/modules/flann/include/opencv2/flann/dynamic_bitset.h deleted file mode 100644 index bfd39ce..0000000 --- a/modules/flann/include/opencv2/flann/dynamic_bitset.h +++ /dev/null @@ -1,159 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *************************************************************************/ - -/*********************************************************************** - * Author: Vincent Rabaud - *************************************************************************/ - -#ifndef OPENCV_FLANN_DYNAMIC_BITSET_H_ -#define OPENCV_FLANN_DYNAMIC_BITSET_H_ - -#ifndef FLANN_USE_BOOST -# define FLANN_USE_BOOST 0 -#endif -//#define FLANN_USE_BOOST 1 -#if FLANN_USE_BOOST -#include -typedef boost::dynamic_bitset<> DynamicBitset; -#else - -#include - -#include "dist.h" - -namespace cvflann { - -/** Class re-implementing the boost version of it - * This helps not depending on boost, it also does not do the bound checks - * and has a way to reset a block for speed - */ -class DynamicBitset -{ -public: - /** @param default constructor - */ - DynamicBitset() - { - } - - /** @param only constructor we use in our code - * @param the size of the bitset (in bits) - */ - DynamicBitset(size_t sz) - { - resize(sz); - reset(); - } - - /** Sets all the bits to 0 - */ - void clear() - { - std::fill(bitset_.begin(), bitset_.end(), 0); - } - - /** @brief checks if the bitset is empty - * @return true if the bitset is empty - */ - bool empty() const - { - return bitset_.empty(); - } - - /** @param set all the bits to 0 - */ - void reset() - { - std::fill(bitset_.begin(), bitset_.end(), 0); - } - - /** @brief set one bit to 0 - * @param - */ - void reset(size_t index) - { - bitset_[index / cell_bit_size_] &= ~(size_t(1) << (index % cell_bit_size_)); - } - - /** @brief sets a specific bit to 0, and more bits too - * This function is useful when resetting a given set of bits so that the - * whole bitset ends up being 0: if that's the case, we don't care about setting - * other bits to 0 - * @param - */ - void reset_block(size_t index) - { - bitset_[index / cell_bit_size_] = 0; - } - - /** @param resize the bitset so that it contains at least size bits - * @param size - */ - void resize(size_t sz) - { - size_ = sz; - bitset_.resize(sz / cell_bit_size_ + 1); - } - - /** @param set a bit to true - * @param index the index of the bit to set to 1 - */ - void set(size_t index) - { - bitset_[index / cell_bit_size_] |= size_t(1) << (index % cell_bit_size_); - } - - /** @param gives the number of contained bits - */ - size_t size() const - { - return size_; - } - - /** @param check if a bit is set - * @param index the index of the bit to check - * @return true if the bit is set - */ - bool test(size_t index) const - { - return (bitset_[index / cell_bit_size_] & (size_t(1) << (index % cell_bit_size_))) != 0; - } - -private: - std::vector bitset_; - size_t size_; - static const unsigned int cell_bit_size_ = CHAR_BIT * sizeof(size_t); -}; - -} // namespace cvflann - -#endif - -#endif // OPENCV_FLANN_DYNAMIC_BITSET_H_ diff --git a/modules/flann/include/opencv2/flann/flann.hpp b/modules/flann/include/opencv2/flann/flann.hpp deleted file mode 100644 index d053488..0000000 --- a/modules/flann/include/opencv2/flann/flann.hpp +++ /dev/null @@ -1,427 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _OPENCV_FLANN_HPP_ -#define _OPENCV_FLANN_HPP_ - -#ifdef __cplusplus - -#include "opencv2/core/types_c.h" -#include "opencv2/core/core.hpp" -#include "opencv2/flann/flann_base.hpp" -#include "opencv2/flann/miniflann.hpp" - -namespace cvflann -{ - CV_EXPORTS flann_distance_t flann_distance_type(); - FLANN_DEPRECATED CV_EXPORTS void set_distance_type(flann_distance_t distance_type, int order); -} - - -namespace cv -{ -namespace flann -{ - -template struct CvType {}; -template <> struct CvType { static int type() { return CV_8U; } }; -template <> struct CvType { static int type() { return CV_8S; } }; -template <> struct CvType { static int type() { return CV_16U; } }; -template <> struct CvType { static int type() { return CV_16S; } }; -template <> struct CvType { static int type() { return CV_32S; } }; -template <> struct CvType { static int type() { return CV_32F; } }; -template <> struct CvType { static int type() { return CV_64F; } }; - - -// bring the flann parameters into this namespace -using ::cvflann::get_param; -using ::cvflann::print_params; - -// bring the flann distances into this namespace -using ::cvflann::L2_Simple; -using ::cvflann::L2; -using ::cvflann::L1; -using ::cvflann::MinkowskiDistance; -using ::cvflann::MaxDistance; -using ::cvflann::HammingLUT; -using ::cvflann::Hamming; -using ::cvflann::Hamming2; -using ::cvflann::HistIntersectionDistance; -using ::cvflann::HellingerDistance; -using ::cvflann::ChiSquareDistance; -using ::cvflann::KL_Divergence; - - - -template -class GenericIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - GenericIndex(const Mat& features, const ::cvflann::IndexParams& params, Distance distance = Distance()); - - ~GenericIndex(); - - void knnSearch(const vector& query, vector& indices, - vector& dists, int knn, const ::cvflann::SearchParams& params); - void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params); - - int radiusSearch(const vector& query, vector& indices, - vector& dists, DistanceType radius, const ::cvflann::SearchParams& params); - int radiusSearch(const Mat& query, Mat& indices, Mat& dists, - DistanceType radius, const ::cvflann::SearchParams& params); - - void save(std::string filename) { nnIndex->save(filename); } - - int veclen() const { return nnIndex->veclen(); } - - int size() const { return nnIndex->size(); } - - ::cvflann::IndexParams getParameters() { return nnIndex->getParameters(); } - - FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() { return nnIndex->getIndexParameters(); } - -private: - ::cvflann::Index* nnIndex; -}; - - -#define FLANN_DISTANCE_CHECK \ - if ( ::cvflann::flann_distance_type() != cvflann::FLANN_DIST_L2) { \ - printf("[WARNING] You are using cv::flann::Index (or cv::flann::GenericIndex) and have also changed "\ - "the distance using cvflann::set_distance_type. This is no longer working as expected "\ - "(cv::flann::Index always uses L2). You should create the index templated on the distance, "\ - "for example for L1 distance use: GenericIndex< L1 > \n"); \ - } - - -template -GenericIndex::GenericIndex(const Mat& dataset, const ::cvflann::IndexParams& params, Distance distance) -{ - CV_Assert(dataset.type() == CvType::type()); - CV_Assert(dataset.isContinuous()); - ::cvflann::Matrix m_dataset((ElementType*)dataset.ptr(0), dataset.rows, dataset.cols); - - nnIndex = new ::cvflann::Index(m_dataset, params, distance); - - FLANN_DISTANCE_CHECK - - nnIndex->buildIndex(); -} - -template -GenericIndex::~GenericIndex() -{ - delete nnIndex; -} - -template -void GenericIndex::knnSearch(const vector& query, vector& indices, vector& dists, int knn, const ::cvflann::SearchParams& searchParams) -{ - ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); - ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); - ::cvflann::Matrix m_dists(&dists[0], 1, dists.size()); - - FLANN_DISTANCE_CHECK - - nnIndex->knnSearch(m_query,m_indices,m_dists,knn,searchParams); -} - - -template -void GenericIndex::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams) -{ - CV_Assert(queries.type() == CvType::type()); - CV_Assert(queries.isContinuous()); - ::cvflann::Matrix m_queries((ElementType*)queries.ptr(0), queries.rows, queries.cols); - - CV_Assert(indices.type() == CV_32S); - CV_Assert(indices.isContinuous()); - ::cvflann::Matrix m_indices((int*)indices.ptr(0), indices.rows, indices.cols); - - CV_Assert(dists.type() == CvType::type()); - CV_Assert(dists.isContinuous()); - ::cvflann::Matrix m_dists((DistanceType*)dists.ptr(0), dists.rows, dists.cols); - - FLANN_DISTANCE_CHECK - - nnIndex->knnSearch(m_queries,m_indices,m_dists,knn, searchParams); -} - -template -int GenericIndex::radiusSearch(const vector& query, vector& indices, vector& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) -{ - ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); - ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); - ::cvflann::Matrix m_dists(&dists[0], 1, dists.size()); - - FLANN_DISTANCE_CHECK - - return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); -} - -template -int GenericIndex::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) -{ - CV_Assert(query.type() == CvType::type()); - CV_Assert(query.isContinuous()); - ::cvflann::Matrix m_query((ElementType*)query.ptr(0), query.rows, query.cols); - - CV_Assert(indices.type() == CV_32S); - CV_Assert(indices.isContinuous()); - ::cvflann::Matrix m_indices((int*)indices.ptr(0), indices.rows, indices.cols); - - CV_Assert(dists.type() == CvType::type()); - CV_Assert(dists.isContinuous()); - ::cvflann::Matrix m_dists((DistanceType*)dists.ptr(0), dists.rows, dists.cols); - - FLANN_DISTANCE_CHECK - - return nnIndex->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); -} - -/** - * @deprecated Use GenericIndex class instead - */ -template -class -#ifndef _MSC_VER - FLANN_DEPRECATED -#endif - Index_ { -public: - typedef typename L2::ElementType ElementType; - typedef typename L2::ResultType DistanceType; - - Index_(const Mat& features, const ::cvflann::IndexParams& params); - - ~Index_(); - - void knnSearch(const vector& query, vector& indices, vector& dists, int knn, const ::cvflann::SearchParams& params); - void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& params); - - int radiusSearch(const vector& query, vector& indices, vector& dists, DistanceType radius, const ::cvflann::SearchParams& params); - int radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& params); - - void save(std::string filename) - { - if (nnIndex_L1) nnIndex_L1->save(filename); - if (nnIndex_L2) nnIndex_L2->save(filename); - } - - int veclen() const - { - if (nnIndex_L1) return nnIndex_L1->veclen(); - if (nnIndex_L2) return nnIndex_L2->veclen(); - } - - int size() const - { - if (nnIndex_L1) return nnIndex_L1->size(); - if (nnIndex_L2) return nnIndex_L2->size(); - } - - ::cvflann::IndexParams getParameters() - { - if (nnIndex_L1) return nnIndex_L1->getParameters(); - if (nnIndex_L2) return nnIndex_L2->getParameters(); - - } - - FLANN_DEPRECATED const ::cvflann::IndexParams* getIndexParameters() - { - if (nnIndex_L1) return nnIndex_L1->getIndexParameters(); - if (nnIndex_L2) return nnIndex_L2->getIndexParameters(); - } - -private: - // providing backwards compatibility for L2 and L1 distances (most common) - ::cvflann::Index< L2 >* nnIndex_L2; - ::cvflann::Index< L1 >* nnIndex_L1; -}; - -#ifdef _MSC_VER -template -class FLANN_DEPRECATED Index_; -#endif - -template -Index_::Index_(const Mat& dataset, const ::cvflann::IndexParams& params) -{ - printf("[WARNING] The cv::flann::Index_ class is deperecated, use cv::flann::GenericIndex instead\n"); - - CV_Assert(dataset.type() == CvType::type()); - CV_Assert(dataset.isContinuous()); - ::cvflann::Matrix m_dataset((ElementType*)dataset.ptr(0), dataset.rows, dataset.cols); - - if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) { - nnIndex_L1 = NULL; - nnIndex_L2 = new ::cvflann::Index< L2 >(m_dataset, params); - } - else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) { - nnIndex_L1 = new ::cvflann::Index< L1 >(m_dataset, params); - nnIndex_L2 = NULL; - } - else { - printf("[ERROR] cv::flann::Index_ only provides backwards compatibility for the L1 and L2 distances. " - "For other distance types you must use cv::flann::GenericIndex\n"); - CV_Assert(0); - } - if (nnIndex_L1) nnIndex_L1->buildIndex(); - if (nnIndex_L2) nnIndex_L2->buildIndex(); -} - -template -Index_::~Index_() -{ - if (nnIndex_L1) delete nnIndex_L1; - if (nnIndex_L2) delete nnIndex_L2; -} - -template -void Index_::knnSearch(const vector& query, vector& indices, vector& dists, int knn, const ::cvflann::SearchParams& searchParams) -{ - ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); - ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); - ::cvflann::Matrix m_dists(&dists[0], 1, dists.size()); - - if (nnIndex_L1) nnIndex_L1->knnSearch(m_query,m_indices,m_dists,knn,searchParams); - if (nnIndex_L2) nnIndex_L2->knnSearch(m_query,m_indices,m_dists,knn,searchParams); -} - - -template -void Index_::knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const ::cvflann::SearchParams& searchParams) -{ - CV_Assert(queries.type() == CvType::type()); - CV_Assert(queries.isContinuous()); - ::cvflann::Matrix m_queries((ElementType*)queries.ptr(0), queries.rows, queries.cols); - - CV_Assert(indices.type() == CV_32S); - CV_Assert(indices.isContinuous()); - ::cvflann::Matrix m_indices((int*)indices.ptr(0), indices.rows, indices.cols); - - CV_Assert(dists.type() == CvType::type()); - CV_Assert(dists.isContinuous()); - ::cvflann::Matrix m_dists((DistanceType*)dists.ptr(0), dists.rows, dists.cols); - - if (nnIndex_L1) nnIndex_L1->knnSearch(m_queries,m_indices,m_dists,knn, searchParams); - if (nnIndex_L2) nnIndex_L2->knnSearch(m_queries,m_indices,m_dists,knn, searchParams); -} - -template -int Index_::radiusSearch(const vector& query, vector& indices, vector& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) -{ - ::cvflann::Matrix m_query((ElementType*)&query[0], 1, query.size()); - ::cvflann::Matrix m_indices(&indices[0], 1, indices.size()); - ::cvflann::Matrix m_dists(&dists[0], 1, dists.size()); - - if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); - if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); -} - -template -int Index_::radiusSearch(const Mat& query, Mat& indices, Mat& dists, DistanceType radius, const ::cvflann::SearchParams& searchParams) -{ - CV_Assert(query.type() == CvType::type()); - CV_Assert(query.isContinuous()); - ::cvflann::Matrix m_query((ElementType*)query.ptr(0), query.rows, query.cols); - - CV_Assert(indices.type() == CV_32S); - CV_Assert(indices.isContinuous()); - ::cvflann::Matrix m_indices((int*)indices.ptr(0), indices.rows, indices.cols); - - CV_Assert(dists.type() == CvType::type()); - CV_Assert(dists.isContinuous()); - ::cvflann::Matrix m_dists((DistanceType*)dists.ptr(0), dists.rows, dists.cols); - - if (nnIndex_L1) return nnIndex_L1->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); - if (nnIndex_L2) return nnIndex_L2->radiusSearch(m_query,m_indices,m_dists,radius,searchParams); -} - - -template -int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params, - Distance d = Distance()) -{ - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - CV_Assert(features.type() == CvType::type()); - CV_Assert(features.isContinuous()); - ::cvflann::Matrix m_features((ElementType*)features.ptr(0), features.rows, features.cols); - - CV_Assert(centers.type() == CvType::type()); - CV_Assert(centers.isContinuous()); - ::cvflann::Matrix m_centers((DistanceType*)centers.ptr(0), centers.rows, centers.cols); - - return ::cvflann::hierarchicalClustering(m_features, m_centers, params, d); -} - - -template -FLANN_DEPRECATED int hierarchicalClustering(const Mat& features, Mat& centers, const ::cvflann::KMeansIndexParams& params) -{ - printf("[WARNING] cv::flann::hierarchicalClustering is deprecated, use " - "cv::flann::hierarchicalClustering instead\n"); - - if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L2 ) { - return hierarchicalClustering< L2 >(features, centers, params); - } - else if ( ::cvflann::flann_distance_type() == cvflann::FLANN_DIST_L1 ) { - return hierarchicalClustering< L1 >(features, centers, params); - } - else { - printf("[ERROR] cv::flann::hierarchicalClustering only provides backwards " - "compatibility for the L1 and L2 distances. " - "For other distance types you must use cv::flann::hierarchicalClustering\n"); - CV_Assert(0); - } -} - -} } // namespace cv::flann - -#endif // __cplusplus - -#endif diff --git a/modules/flann/include/opencv2/flann/flann_base.hpp b/modules/flann/include/opencv2/flann/flann_base.hpp deleted file mode 100644 index b5ba7d7..0000000 --- a/modules/flann/include/opencv2/flann/flann_base.hpp +++ /dev/null @@ -1,291 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_BASE_HPP_ -#define OPENCV_FLANN_BASE_HPP_ - -#include -#include -#include -#include - -#include "general.h" -#include "matrix.h" -#include "params.h" -#include "saving.h" - -#include "all_indices.h" - -namespace cvflann -{ - -/** - * Sets the log level used for all flann functions - * @param level Verbosity level - */ -inline void log_verbosity(int level) -{ - if (level >= 0) { - Logger::setLevel(level); - } -} - -/** - * (Deprecated) Index parameters for creating a saved index. - */ -struct SavedIndexParams : public IndexParams -{ - SavedIndexParams(std::string filename) - { - (* this)["algorithm"] = FLANN_INDEX_SAVED; - (*this)["filename"] = filename; - } -}; - - -template -NNIndex* load_saved_index(const Matrix& dataset, const std::string& filename, Distance distance) -{ - typedef typename Distance::ElementType ElementType; - - FILE* fin = fopen(filename.c_str(), "rb"); - if (fin == NULL) { - return NULL; - } - IndexHeader header = load_header(fin); - if (header.data_type != Datatype::type()) { - throw FLANNException("Datatype of saved index is different than of the one to be created."); - } - if ((size_t(header.rows) != dataset.rows)||(size_t(header.cols) != dataset.cols)) { - throw FLANNException("The index saved belongs to a different dataset"); - } - - IndexParams params; - params["algorithm"] = header.index_type; - NNIndex* nnIndex = create_index_by_type(dataset, params, distance); - nnIndex->loadIndex(fin); - fclose(fin); - - return nnIndex; -} - - -template -class Index : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - Index(const Matrix& features, const IndexParams& params, Distance distance = Distance() ) - : index_params_(params) - { - flann_algorithm_t index_type = get_param(params,"algorithm"); - loaded_ = false; - - if (index_type == FLANN_INDEX_SAVED) { - nnIndex_ = load_saved_index(features, get_param(params,"filename"), distance); - loaded_ = true; - } - else { - nnIndex_ = create_index_by_type(features, params, distance); - } - } - - ~Index() - { - delete nnIndex_; - } - - /** - * Builds the index. - */ - void buildIndex() - { - if (!loaded_) { - nnIndex_->buildIndex(); - } - } - - void save(std::string filename) - { - FILE* fout = fopen(filename.c_str(), "wb"); - if (fout == NULL) { - throw FLANNException("Cannot open file"); - } - save_header(fout, *nnIndex_); - saveIndex(fout); - fclose(fout); - } - - /** - * \brief Saves the index to a stream - * \param stream The stream to save the index to - */ - virtual void saveIndex(FILE* stream) - { - nnIndex_->saveIndex(stream); - } - - /** - * \brief Loads the index from a stream - * \param stream The stream from which the index is loaded - */ - virtual void loadIndex(FILE* stream) - { - nnIndex_->loadIndex(stream); - } - - /** - * \returns number of features in this index. - */ - size_t veclen() const - { - return nnIndex_->veclen(); - } - - /** - * \returns The dimensionality of the features in this index. - */ - size_t size() const - { - return nnIndex_->size(); - } - - /** - * \returns The index type (kdtree, kmeans,...) - */ - flann_algorithm_t getType() const - { - return nnIndex_->getType(); - } - - /** - * \returns The amount of memory (in bytes) used by the index. - */ - virtual int usedMemory() const - { - return nnIndex_->usedMemory(); - } - - - /** - * \returns The index parameters - */ - IndexParams getParameters() const - { - return nnIndex_->getParameters(); - } - - /** - * \brief Perform k-nearest neighbor search - * \param[in] queries The query points for which to find the nearest neighbors - * \param[out] indices The indices of the nearest neighbors found - * \param[out] dists Distances to the nearest neighbors found - * \param[in] knn Number of nearest neighbors to return - * \param[in] params Search parameters - */ - void knnSearch(const Matrix& queries, Matrix& indices, Matrix& dists, int knn, const SearchParams& params) - { - nnIndex_->knnSearch(queries, indices, dists, knn, params); - } - - /** - * \brief Perform radius search - * \param[in] query The query point - * \param[out] indices The indinces of the neighbors found within the given radius - * \param[out] dists The distances to the nearest neighbors found - * \param[in] radius The radius used for search - * \param[in] params Search parameters - * \returns Number of neighbors found - */ - int radiusSearch(const Matrix& query, Matrix& indices, Matrix& dists, float radius, const SearchParams& params) - { - return nnIndex_->radiusSearch(query, indices, dists, radius, params); - } - - /** - * \brief Method that searches for nearest-neighbours - */ - void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) - { - nnIndex_->findNeighbors(result, vec, searchParams); - } - - /** - * \brief Returns actual index - */ - FLANN_DEPRECATED NNIndex* getIndex() - { - return nnIndex_; - } - - /** - * \brief Returns index parameters. - * \deprecated use getParameters() instead. - */ - FLANN_DEPRECATED const IndexParams* getIndexParameters() - { - return &index_params_; - } - -private: - /** Pointer to actual index class */ - NNIndex* nnIndex_; - /** Indices if the index was loaded from a file */ - bool loaded_; - /** Parameters passed to the index */ - IndexParams index_params_; -}; - -/** - * Performs a hierarchical clustering of the points passed as argument and then takes a cut in the - * the clustering tree to return a flat clustering. - * @param[in] points Points to be clustered - * @param centers The computed cluster centres. Matrix should be preallocated and centers.rows is the - * number of clusters requested. - * @param params Clustering parameters (The same as for cvflann::KMeansIndex) - * @param d Distance to be used for clustering (eg: cvflann::L2) - * @return number of clusters computed (can be different than clusters.rows and is the highest number - * of the form (branching-1)*K+1 smaller than clusters.rows). - */ -template -int hierarchicalClustering(const Matrix& points, Matrix& centers, - const KMeansIndexParams& params, Distance d = Distance()) -{ - KMeansIndex kmeans(points, params, d); - kmeans.buildIndex(); - - int clusterNum = kmeans.getClusterCenters(centers); - return clusterNum; -} - -} -#endif /* OPENCV_FLANN_BASE_HPP_ */ diff --git a/modules/flann/include/opencv2/flann/general.h b/modules/flann/include/opencv2/flann/general.h deleted file mode 100644 index 87e7e2f..0000000 --- a/modules/flann/include/opencv2/flann/general.h +++ /dev/null @@ -1,52 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_GENERAL_H_ -#define OPENCV_FLANN_GENERAL_H_ - -#include "defines.h" -#include -#include - -namespace cvflann -{ - -class FLANNException : public std::runtime_error -{ -public: - FLANNException(const char* message) : std::runtime_error(message) { } - - FLANNException(const std::string& message) : std::runtime_error(message) { } -}; - -} - - -#endif /* OPENCV_FLANN_GENERAL_H_ */ diff --git a/modules/flann/include/opencv2/flann/ground_truth.h b/modules/flann/include/opencv2/flann/ground_truth.h deleted file mode 100644 index fd8f3ae..0000000 --- a/modules/flann/include/opencv2/flann/ground_truth.h +++ /dev/null @@ -1,94 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_GROUND_TRUTH_H_ -#define OPENCV_FLANN_GROUND_TRUTH_H_ - -#include "dist.h" -#include "matrix.h" - - -namespace cvflann -{ - -template -void find_nearest(const Matrix& dataset, typename Distance::ElementType* query, int* matches, int nn, - int skip = 0, Distance distance = Distance()) -{ - typedef typename Distance::ResultType DistanceType; - int n = nn + skip; - - std::vector match(n); - std::vector dists(n); - - dists[0] = distance(dataset[0], query, dataset.cols); - match[0] = 0; - int dcnt = 1; - - for (size_t i=1; i=1 && dists[j] -void compute_ground_truth(const Matrix& dataset, const Matrix& testset, Matrix& matches, - int skip=0, Distance d = Distance()) -{ - for (size_t i=0; i(dataset, testset[i], matches[i], (int)matches.cols, skip, d); - } -} - - -} - -#endif //OPENCV_FLANN_GROUND_TRUTH_H_ diff --git a/modules/flann/include/opencv2/flann/hdf5.h b/modules/flann/include/opencv2/flann/hdf5.h deleted file mode 100644 index ef3e999..0000000 --- a/modules/flann/include/opencv2/flann/hdf5.h +++ /dev/null @@ -1,231 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_HDF5_H_ -#define OPENCV_FLANN_HDF5_H_ - -#include - -#include "matrix.h" - - -namespace cvflann -{ - -namespace -{ - -template -hid_t get_hdf5_type() -{ - throw FLANNException("Unsupported type for IO operations"); -} - -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_CHAR; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_UCHAR; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_SHORT; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_USHORT; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_INT; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_UINT; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_LONG; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_ULONG; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_FLOAT; } -template<> -hid_t get_hdf5_type() { return H5T_NATIVE_DOUBLE; } -} - - -#define CHECK_ERROR(x,y) if ((x)<0) throw FLANNException((y)); - -template -void save_to_file(const cvflann::Matrix& dataset, const std::string& filename, const std::string& name) -{ - -#if H5Eset_auto_vers == 2 - H5Eset_auto( H5E_DEFAULT, NULL, NULL ); -#else - H5Eset_auto( NULL, NULL ); -#endif - - herr_t status; - hid_t file_id; - file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - if (file_id < 0) { - file_id = H5Fcreate(filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT); - } - CHECK_ERROR(file_id,"Error creating hdf5 file."); - - hsize_t dimsf[2]; // dataset dimensions - dimsf[0] = dataset.rows; - dimsf[1] = dataset.cols; - - hid_t space_id = H5Screate_simple(2, dimsf, NULL); - hid_t memspace_id = H5Screate_simple(2, dimsf, NULL); - - hid_t dataset_id; -#if H5Dcreate_vers == 2 - dataset_id = H5Dcreate2(file_id, name.c_str(), get_hdf5_type(), space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); -#else - dataset_id = H5Dcreate(file_id, name.c_str(), get_hdf5_type(), space_id, H5P_DEFAULT); -#endif - - if (dataset_id<0) { -#if H5Dopen_vers == 2 - dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT); -#else - dataset_id = H5Dopen(file_id, name.c_str()); -#endif - } - CHECK_ERROR(dataset_id,"Error creating or opening dataset in file."); - - status = H5Dwrite(dataset_id, get_hdf5_type(), memspace_id, space_id, H5P_DEFAULT, dataset.data ); - CHECK_ERROR(status, "Error writing to dataset"); - - H5Sclose(memspace_id); - H5Sclose(space_id); - H5Dclose(dataset_id); - H5Fclose(file_id); - -} - - -template -void load_from_file(cvflann::Matrix& dataset, const std::string& filename, const std::string& name) -{ - herr_t status; - hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); - CHECK_ERROR(file_id,"Error opening hdf5 file."); - - hid_t dataset_id; -#if H5Dopen_vers == 2 - dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT); -#else - dataset_id = H5Dopen(file_id, name.c_str()); -#endif - CHECK_ERROR(dataset_id,"Error opening dataset in file."); - - hid_t space_id = H5Dget_space(dataset_id); - - hsize_t dims_out[2]; - H5Sget_simple_extent_dims(space_id, dims_out, NULL); - - dataset = cvflann::Matrix(new T[dims_out[0]*dims_out[1]], dims_out[0], dims_out[1]); - - status = H5Dread(dataset_id, get_hdf5_type(), H5S_ALL, H5S_ALL, H5P_DEFAULT, dataset[0]); - CHECK_ERROR(status, "Error reading dataset"); - - H5Sclose(space_id); - H5Dclose(dataset_id); - H5Fclose(file_id); -} - - -#ifdef HAVE_MPI - -namespace mpi -{ -/** - * Loads a the hyperslice corresponding to this processor from a hdf5 file. - * @param flann_dataset Dataset where the data is loaded - * @param filename HDF5 file name - * @param name Name of dataset inside file - */ -template -void load_from_file(cvflann::Matrix& dataset, const std::string& filename, const std::string& name) -{ - MPI_Comm comm = MPI_COMM_WORLD; - MPI_Info info = MPI_INFO_NULL; - - int mpi_size, mpi_rank; - MPI_Comm_size(comm, &mpi_size); - MPI_Comm_rank(comm, &mpi_rank); - - herr_t status; - - hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_mpio(plist_id, comm, info); - hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, plist_id); - CHECK_ERROR(file_id,"Error opening hdf5 file."); - H5Pclose(plist_id); - hid_t dataset_id; -#if H5Dopen_vers == 2 - dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT); -#else - dataset_id = H5Dopen(file_id, name.c_str()); -#endif - CHECK_ERROR(dataset_id,"Error opening dataset in file."); - - hid_t space_id = H5Dget_space(dataset_id); - hsize_t dims[2]; - H5Sget_simple_extent_dims(space_id, dims, NULL); - - hsize_t count[2]; - hsize_t offset[2]; - - hsize_t item_cnt = dims[0]/mpi_size+(dims[0]%mpi_size==0 ? 0 : 1); - hsize_t cnt = (mpi_rank(), memspace_id, space_id, plist_id, dataset.data); - CHECK_ERROR(status, "Error reading dataset"); - - H5Pclose(plist_id); - H5Sclose(space_id); - H5Sclose(memspace_id); - H5Dclose(dataset_id); - H5Fclose(file_id); -} -} -#endif // HAVE_MPI -} // namespace cvflann::mpi - -#endif /* OPENCV_FLANN_HDF5_H_ */ diff --git a/modules/flann/include/opencv2/flann/heap.h b/modules/flann/include/opencv2/flann/heap.h deleted file mode 100644 index 92a6ea6..0000000 --- a/modules/flann/include/opencv2/flann/heap.h +++ /dev/null @@ -1,165 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_HEAP_H_ -#define OPENCV_FLANN_HEAP_H_ - -#include -#include - -namespace cvflann -{ - -/** - * Priority Queue Implementation - * - * The priority queue is implemented with a heap. A heap is a complete - * (full) binary tree in which each parent is less than both of its - * children, but the order of the children is unspecified. - */ -template -class Heap -{ - - /** - * Storage array for the heap. - * Type T must be comparable. - */ - std::vector heap; - int length; - - /** - * Number of element in the heap - */ - int count; - - - -public: - /** - * Constructor. - * - * Params: - * sz = heap size - */ - - Heap(int sz) - { - length = sz; - heap.reserve(length); - count = 0; - } - - /** - * - * Returns: heap size - */ - int size() - { - return count; - } - - /** - * Tests if the heap is empty - * - * Returns: true is heap empty, false otherwise - */ - bool empty() - { - return size()==0; - } - - /** - * Clears the heap. - */ - void clear() - { - heap.clear(); - count = 0; - } - - struct CompareT - { - bool operator()(const T& t_1, const T& t_2) const - { - return t_2 < t_1; - } - }; - - /** - * Insert a new element in the heap. - * - * We select the next empty leaf node, and then keep moving any larger - * parents down until the right location is found to store this element. - * - * Params: - * value = the new element to be inserted in the heap - */ - void insert(T value) - { - /* If heap is full, then return without adding this element. */ - if (count == length) { - return; - } - - heap.push_back(value); - static CompareT compareT; - std::push_heap(heap.begin(), heap.end(), compareT); - ++count; - } - - - - /** - * Returns the node of minimum value from the heap (top of the heap). - * - * Params: - * value = out parameter used to return the min element - * Returns: false if heap empty - */ - bool popMin(T& value) - { - if (count == 0) { - return false; - } - - value = heap[0]; - static CompareT compareT; - std::pop_heap(heap.begin(), heap.end(), compareT); - heap.pop_back(); - --count; - - return true; /* Return old last node. */ - } -}; - -} - -#endif //OPENCV_FLANN_HEAP_H_ diff --git a/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h b/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h deleted file mode 100644 index b511ee9..0000000 --- a/modules/flann/include/opencv2/flann/hierarchical_clustering_index.h +++ /dev/null @@ -1,759 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2011 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2011 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ -#define OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ - -#include -#include -#include -#include -#include -#include - -#include "general.h" -#include "nn_index.h" -#include "dist.h" -#include "matrix.h" -#include "result_set.h" -#include "heap.h" -#include "allocator.h" -#include "random.h" -#include "saving.h" - - -namespace cvflann -{ - -struct HierarchicalClusteringIndexParams : public IndexParams -{ - HierarchicalClusteringIndexParams(int branching = 32, - flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, - int trees = 4, int leaf_size = 100) - { - (*this)["algorithm"] = FLANN_INDEX_HIERARCHICAL; - // The branching factor used in the hierarchical clustering - (*this)["branching"] = branching; - // Algorithm used for picking the initial cluster centers - (*this)["centers_init"] = centers_init; - // number of parallel trees to build - (*this)["trees"] = trees; - // maximum leaf size - (*this)["leaf_size"] = leaf_size; - } -}; - - -/** - * Hierarchical index - * - * Contains a tree constructed through a hierarchical clustering - * and other information for indexing a set of points for nearest-neighbour matching. - */ -template -class HierarchicalClusteringIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - -private: - - - typedef void (HierarchicalClusteringIndex::* centersAlgFunction)(int, int*, int, int*, int&); - - /** - * The function used for choosing the cluster centers. - */ - centersAlgFunction chooseCenters; - - - - /** - * Chooses the initial centers in the k-means clustering in a random manner. - * - * Params: - * k = number of centers - * vecs = the dataset of points - * indices = indices in the dataset - * indices_length = length of indices vector - * - */ - void chooseCentersRandom(int k, int* dsindices, int indices_length, int* centers, int& centers_length) - { - UniqueRandom r(indices_length); - - int index; - for (index=0; index=0 && rnd < n); - - centers[0] = dsindices[rnd]; - - int index; - for (index=1; indexbest_val) { - best_val = dist; - best_index = j; - } - } - if (best_index!=-1) { - centers[index] = dsindices[best_index]; - } - else { - break; - } - } - centers_length = index; - } - - - /** - * Chooses the initial centers in the k-means using the algorithm - * proposed in the KMeans++ paper: - * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding - * - * Implementation of this function was converted from the one provided in Arthur's code. - * - * Params: - * k = number of centers - * vecs = the dataset of points - * indices = indices in the dataset - * Returns: - */ - void chooseCentersKMeanspp(int k, int* dsindices, int indices_length, int* centers, int& centers_length) - { - int n = indices_length; - - double currentPot = 0; - DistanceType* closestDistSq = new DistanceType[n]; - - // Choose one random center and set the closestDistSq values - int index = rand_int(n); - assert(index >=0 && index < n); - centers[0] = dsindices[index]; - - for (int i = 0; i < n; i++) { - closestDistSq[i] = distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols); - currentPot += closestDistSq[i]; - } - - - const int numLocalTries = 1; - - // Choose each center - int centerCount; - for (centerCount = 1; centerCount < k; centerCount++) { - - // Repeat several trials - double bestNewPot = -1; - int bestNewIndex = 0; - for (int localTrial = 0; localTrial < numLocalTries; localTrial++) { - - // Choose our center - have to be slightly careful to return a valid answer even accounting - // for possible rounding errors - double randVal = rand_double(currentPot); - for (index = 0; index < n-1; index++) { - if (randVal <= closestDistSq[index]) break; - else randVal -= closestDistSq[index]; - } - - // Compute the new potential - double newPot = 0; - for (int i = 0; i < n; i++) newPot += std::min( distance(dataset[dsindices[i]], dataset[dsindices[index]], dataset.cols), closestDistSq[i] ); - - // Store the best result - if ((bestNewPot < 0)||(newPot < bestNewPot)) { - bestNewPot = newPot; - bestNewIndex = index; - } - } - - // Add the appropriate center - centers[centerCount] = dsindices[bestNewIndex]; - currentPot = bestNewPot; - for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance(dataset[dsindices[i]], dataset[dsindices[bestNewIndex]], dataset.cols), closestDistSq[i] ); - } - - centers_length = centerCount; - - delete[] closestDistSq; - } - - -public: - - - /** - * Index constructor - * - * Params: - * inputData = dataset with the input features - * params = parameters passed to the hierarchical k-means algorithm - */ - HierarchicalClusteringIndex(const Matrix& inputData, const IndexParams& index_params = HierarchicalClusteringIndexParams(), - Distance d = Distance()) - : dataset(inputData), params(index_params), root(NULL), indices(NULL), distance(d) - { - memoryCounter = 0; - - size_ = dataset.rows; - veclen_ = dataset.cols; - - branching_ = get_param(params,"branching",32); - centers_init_ = get_param(params,"centers_init", FLANN_CENTERS_RANDOM); - trees_ = get_param(params,"trees",4); - leaf_size_ = get_param(params,"leaf_size",100); - - if (centers_init_==FLANN_CENTERS_RANDOM) { - chooseCenters = &HierarchicalClusteringIndex::chooseCentersRandom; - } - else if (centers_init_==FLANN_CENTERS_GONZALES) { - chooseCenters = &HierarchicalClusteringIndex::chooseCentersGonzales; - } - else if (centers_init_==FLANN_CENTERS_KMEANSPP) { - chooseCenters = &HierarchicalClusteringIndex::chooseCentersKMeanspp; - } - else { - throw FLANNException("Unknown algorithm for choosing initial centers."); - } - - trees_ = get_param(params,"trees",4); - root = new NodePtr[trees_]; - indices = new int*[trees_]; - - for (int i=0; i(); - computeClustering(root[i], indices[i], (int)size_, branching_,0); - } - } - - - flann_algorithm_t getType() const - { - return FLANN_INDEX_HIERARCHICAL; - } - - - void saveIndex(FILE* stream) - { - save_value(stream, branching_); - save_value(stream, trees_); - save_value(stream, centers_init_); - save_value(stream, leaf_size_); - save_value(stream, memoryCounter); - for (int i=0; i& result, const ElementType* vec, const SearchParams& searchParams) - { - - int maxChecks = get_param(searchParams,"checks",32); - - // Priority queue storing intermediate branches in the best-bin-first search - Heap* heap = new Heap((int)size_); - - std::vector checked(size_,false); - int checks = 0; - for (int i=0; ipopMin(branch) && (checks BranchSt; - - - - void save_tree(FILE* stream, NodePtr node, int num) - { - save_value(stream, *node); - if (node->childs==NULL) { - int indices_offset = (int)(node->indices - indices[num]); - save_value(stream, indices_offset); - } - else { - for(int i=0; ichilds[i], num); - } - } - } - - - void load_tree(FILE* stream, NodePtr& node, int num) - { - node = pool.allocate(); - load_value(stream, *node); - if (node->childs==NULL) { - int indices_offset; - load_value(stream, indices_offset); - node->indices = indices[num] + indices_offset; - } - else { - node->childs = pool.allocate(branching_); - for(int i=0; ichilds[i], num); - } - } - } - - - - - void computeLabels(int* dsindices, int indices_length, int* centers, int centers_length, int* labels, DistanceType& cost) - { - cost = 0; - for (int i=0; inew_dist) { - labels[i] = j; - dist = new_dist; - } - } - cost += dist; - } - } - - /** - * The method responsible with actually doing the recursive hierarchical - * clustering - * - * Params: - * node = the node to cluster - * indices = indices of the points belonging to the current node - * branching = the branching factor to use in the clustering - * - * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point) - */ - void computeClustering(NodePtr node, int* dsindices, int indices_length, int branching, int level) - { - node->size = indices_length; - node->level = level; - - if (indices_length < leaf_size_) { // leaf node - node->indices = dsindices; - std::sort(node->indices,node->indices+indices_length); - node->childs = NULL; - return; - } - - std::vector centers(branching); - std::vector labels(indices_length); - - int centers_length; - (this->*chooseCenters)(branching, dsindices, indices_length, ¢ers[0], centers_length); - - if (centers_lengthindices = dsindices; - std::sort(node->indices,node->indices+indices_length); - node->childs = NULL; - return; - } - - - // assign points to clusters - DistanceType cost; - computeLabels(dsindices, indices_length, ¢ers[0], centers_length, &labels[0], cost); - - node->childs = pool.allocate(branching); - int start = 0; - int end = start; - for (int i=0; ichilds[i] = pool.allocate(); - node->childs[i]->pivot = centers[i]; - node->childs[i]->indices = NULL; - computeClustering(node->childs[i],dsindices+start, end-start, branching, level+1); - start=end; - } - } - - - - /** - * Performs one descent in the hierarchical k-means tree. The branches not - * visited are stored in a priority queue. - * - * Params: - * node = node to explore - * result = container for the k-nearest neighbors found - * vec = query points - * checks = how many points in the dataset have been checked so far - * maxChecks = maximum dataset points to checks - */ - - - void findNN(NodePtr node, ResultSet& result, const ElementType* vec, int& checks, int maxChecks, - Heap* heap, std::vector& checked) - { - if (node->childs==NULL) { - if (checks>=maxChecks) { - if (result.full()) return; - } - for (int i=0; isize; ++i) { - int index = node->indices[i]; - if (!checked[index]) { - DistanceType dist = distance(dataset[index], vec, veclen_); - result.addPoint(dist, index); - checked[index] = true; - ++checks; - } - } - } - else { - DistanceType* domain_distances = new DistanceType[branching_]; - int best_index = 0; - domain_distances[best_index] = distance(vec, dataset[node->childs[best_index]->pivot], veclen_); - for (int i=1; ichilds[i]->pivot], veclen_); - if (domain_distances[i]insert(BranchSt(node->childs[i],domain_distances[i])); - } - } - delete[] domain_distances; - findNN(node->childs[best_index],result,vec, checks, maxChecks, heap, checked); - } - } - -private: - - - /** - * The dataset used by this index - */ - const Matrix dataset; - - /** - * Parameters used by this index - */ - IndexParams params; - - - /** - * Number of features in the dataset. - */ - size_t size_; - - /** - * Length of each feature. - */ - size_t veclen_; - - /** - * The root node in the tree. - */ - NodePtr* root; - - /** - * Array of indices to vectors in the dataset. - */ - int** indices; - - - /** - * The distance - */ - Distance distance; - - /** - * Pooled memory allocator. - * - * Using a pooled memory allocator is more efficient - * than allocating memory directly when there is a large - * number small of memory allocations. - */ - PooledAllocator pool; - - /** - * Memory occupied by the index. - */ - int memoryCounter; - - /** index parameters */ - int branching_; - int trees_; - flann_centers_init_t centers_init_; - int leaf_size_; - - -}; - -} - -#endif /* OPENCV_FLANN_HIERARCHICAL_CLUSTERING_INDEX_H_ */ diff --git a/modules/flann/include/opencv2/flann/index_testing.h b/modules/flann/include/opencv2/flann/index_testing.h deleted file mode 100644 index d764004..0000000 --- a/modules/flann/include/opencv2/flann/index_testing.h +++ /dev/null @@ -1,318 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_INDEX_TESTING_H_ -#define OPENCV_FLANN_INDEX_TESTING_H_ - -#include -#include -#include - -#include "matrix.h" -#include "nn_index.h" -#include "result_set.h" -#include "logger.h" -#include "timer.h" - - -namespace cvflann -{ - -inline int countCorrectMatches(int* neighbors, int* groundTruth, int n) -{ - int count = 0; - for (int i=0; i -typename Distance::ResultType computeDistanceRaport(const Matrix& inputData, typename Distance::ElementType* target, - int* neighbors, int* groundTruth, int veclen, int n, const Distance& distance) -{ - typedef typename Distance::ResultType DistanceType; - - DistanceType ret = 0; - for (int i=0; i -float search_with_ground_truth(NNIndex& index, const Matrix& inputData, - const Matrix& testData, const Matrix& matches, int nn, int checks, - float& time, typename Distance::ResultType& dist, const Distance& distance, int skipMatches) -{ - typedef typename Distance::ResultType DistanceType; - - if (matches.cols resultSet(nn+skipMatches); - SearchParams searchParams(checks); - - std::vector indices(nn+skipMatches); - std::vector dists(nn+skipMatches); - int* neighbors = &indices[skipMatches]; - - int correct = 0; - DistanceType distR = 0; - StartStopTimer t; - int repeats = 0; - while (t.value<0.2) { - repeats++; - t.start(); - correct = 0; - distR = 0; - for (size_t i = 0; i < testData.rows; i++) { - resultSet.init(&indices[0], &dists[0]); - index.findNeighbors(resultSet, testData[i], searchParams); - - correct += countCorrectMatches(neighbors,matches[i], nn); - distR += computeDistanceRaport(inputData, testData[i], neighbors, matches[i], (int)testData.cols, nn, distance); - } - t.stop(); - } - time = float(t.value/repeats); - - float precicion = (float)correct/(nn*testData.rows); - - dist = distR/(testData.rows*nn); - - Logger::info("%8d %10.4g %10.5g %10.5g %10.5g\n", - checks, precicion, time, 1000.0 * time / testData.rows, dist); - - return precicion; -} - - -template -float test_index_checks(NNIndex& index, const Matrix& inputData, - const Matrix& testData, const Matrix& matches, - int checks, float& precision, const Distance& distance, int nn = 1, int skipMatches = 0) -{ - typedef typename Distance::ResultType DistanceType; - - Logger::info(" Nodes Precision(%) Time(s) Time/vec(ms) Mean dist\n"); - Logger::info("---------------------------------------------------------\n"); - - float time = 0; - DistanceType dist = 0; - precision = search_with_ground_truth(index, inputData, testData, matches, nn, checks, time, dist, distance, skipMatches); - - return time; -} - -template -float test_index_precision(NNIndex& index, const Matrix& inputData, - const Matrix& testData, const Matrix& matches, - float precision, int& checks, const Distance& distance, int nn = 1, int skipMatches = 0) -{ - typedef typename Distance::ResultType DistanceType; - const float SEARCH_EPS = 0.001f; - - Logger::info(" Nodes Precision(%) Time(s) Time/vec(ms) Mean dist\n"); - Logger::info("---------------------------------------------------------\n"); - - int c2 = 1; - float p2; - int c1 = 1; - //float p1; - float time; - DistanceType dist; - - p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches); - - if (p2>precision) { - Logger::info("Got as close as I can\n"); - checks = c2; - return time; - } - - while (p2SEARCH_EPS) { - Logger::info("Start linear estimation\n"); - // after we got to values in the vecinity of the desired precision - // use linear approximation get a better estimation - - cx = (c1+c2)/2; - realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches); - while (fabs(realPrecision-precision)>SEARCH_EPS) { - - if (realPrecision -void test_index_precisions(NNIndex& index, const Matrix& inputData, - const Matrix& testData, const Matrix& matches, - float* precisions, int precisions_length, const Distance& distance, int nn = 1, int skipMatches = 0, float maxTime = 0) -{ - typedef typename Distance::ResultType DistanceType; - - const float SEARCH_EPS = 0.001; - - // make sure precisions array is sorted - std::sort(precisions, precisions+precisions_length); - - int pindex = 0; - float precision = precisions[pindex]; - - Logger::info(" Nodes Precision(%) Time(s) Time/vec(ms) Mean dist\n"); - Logger::info("---------------------------------------------------------\n"); - - int c2 = 1; - float p2; - - int c1 = 1; - float p1; - - float time; - DistanceType dist; - - p2 = search_with_ground_truth(index, inputData, testData, matches, nn, c2, time, dist, distance, skipMatches); - - // if precision for 1 run down the tree is already - // better then some of the requested precisions, then - // skip those - while (precisions[pindex] 0)&&(time > maxTime)&&(p2SEARCH_EPS) { - Logger::info("Start linear estimation\n"); - // after we got to values in the vecinity of the desired precision - // use linear approximation get a better estimation - - cx = (c1+c2)/2; - realPrecision = search_with_ground_truth(index, inputData, testData, matches, nn, cx, time, dist, distance, skipMatches); - while (fabs(realPrecision-precision)>SEARCH_EPS) { - - if (realPrecision -#include -#include -#include - -#include "general.h" -#include "nn_index.h" -#include "dynamic_bitset.h" -#include "matrix.h" -#include "result_set.h" -#include "heap.h" -#include "allocator.h" -#include "random.h" -#include "saving.h" - - -namespace cvflann -{ - -struct KDTreeIndexParams : public IndexParams -{ - KDTreeIndexParams(int trees = 4) - { - (*this)["algorithm"] = FLANN_INDEX_KDTREE; - (*this)["trees"] = trees; - } -}; - - -/** - * Randomized kd-tree index - * - * Contains the k-d trees and other information for indexing a set of points - * for nearest-neighbor matching. - */ -template -class KDTreeIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - - /** - * KDTree constructor - * - * Params: - * inputData = dataset with the input features - * params = parameters passed to the kdtree algorithm - */ - KDTreeIndex(const Matrix& inputData, const IndexParams& params = KDTreeIndexParams(), - Distance d = Distance() ) : - dataset_(inputData), index_params_(params), distance_(d) - { - size_ = dataset_.rows; - veclen_ = dataset_.cols; - - trees_ = get_param(index_params_,"trees",4); - tree_roots_ = new NodePtr[trees_]; - - // Create a permutable array of indices to the input vectors. - vind_.resize(size_); - for (size_t i = 0; i < size_; ++i) { - vind_[i] = int(i); - } - - mean_ = new DistanceType[veclen_]; - var_ = new DistanceType[veclen_]; - } - - - KDTreeIndex(const KDTreeIndex&); - KDTreeIndex& operator=(const KDTreeIndex&); - - /** - * Standard destructor - */ - ~KDTreeIndex() - { - if (tree_roots_!=NULL) { - delete[] tree_roots_; - } - delete[] mean_; - delete[] var_; - } - - /** - * Builds the index - */ - void buildIndex() - { - /* Construct the randomized trees. */ - for (int i = 0; i < trees_; i++) { - /* Randomize the order of vectors to allow for unbiased sampling. */ - std::random_shuffle(vind_.begin(), vind_.end()); - tree_roots_[i] = divideTree(&vind_[0], int(size_) ); - } - } - - - flann_algorithm_t getType() const - { - return FLANN_INDEX_KDTREE; - } - - - void saveIndex(FILE* stream) - { - save_value(stream, trees_); - for (int i=0; i& result, const ElementType* vec, const SearchParams& searchParams) - { - int maxChecks = get_param(searchParams,"checks", 32); - float epsError = 1+get_param(searchParams,"eps",0.0f); - - if (maxChecks==FLANN_CHECKS_UNLIMITED) { - getExactNeighbors(result, vec, epsError); - } - else { - getNeighbors(result, vec, maxChecks, epsError); - } - } - - IndexParams getParameters() const - { - return index_params_; - } - -private: - - - /*--------------------- Internal Data Structures --------------------------*/ - struct Node - { - /** - * Dimension used for subdivision. - */ - int divfeat; - /** - * The values used for subdivision. - */ - DistanceType divval; - /** - * The child nodes. - */ - Node* child1, * child2; - }; - typedef Node* NodePtr; - typedef BranchStruct BranchSt; - typedef BranchSt* Branch; - - - - void save_tree(FILE* stream, NodePtr tree) - { - save_value(stream, *tree); - if (tree->child1!=NULL) { - save_tree(stream, tree->child1); - } - if (tree->child2!=NULL) { - save_tree(stream, tree->child2); - } - } - - - void load_tree(FILE* stream, NodePtr& tree) - { - tree = pool_.allocate(); - load_value(stream, *tree); - if (tree->child1!=NULL) { - load_tree(stream, tree->child1); - } - if (tree->child2!=NULL) { - load_tree(stream, tree->child2); - } - } - - - /** - * Create a tree node that subdivides the list of vecs from vind[first] - * to vind[last]. The routine is called recursively on each sublist. - * Place a pointer to this new tree node in the location pTree. - * - * Params: pTree = the new node to create - * first = index of the first vector - * last = index of the last vector - */ - NodePtr divideTree(int* ind, int count) - { - NodePtr node = pool_.allocate(); // allocate memory - - /* If too few exemplars remain, then make this a leaf node. */ - if ( count == 1) { - node->child1 = node->child2 = NULL; /* Mark as leaf node. */ - node->divfeat = *ind; /* Store index of this vec. */ - } - else { - int idx; - int cutfeat; - DistanceType cutval; - meanSplit(ind, count, idx, cutfeat, cutval); - - node->divfeat = cutfeat; - node->divval = cutval; - node->child1 = divideTree(ind, idx); - node->child2 = divideTree(ind+idx, count-idx); - } - - return node; - } - - - /** - * Choose which feature to use in order to subdivide this set of vectors. - * Make a random choice among those with the highest variance, and use - * its variance as the threshold value. - */ - void meanSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval) - { - memset(mean_,0,veclen_*sizeof(DistanceType)); - memset(var_,0,veclen_*sizeof(DistanceType)); - - /* Compute mean values. Only the first SAMPLE_MEAN values need to be - sampled to get a good estimate. - */ - int cnt = std::min((int)SAMPLE_MEAN+1, count); - for (int j = 0; j < cnt; ++j) { - ElementType* v = dataset_[ind[j]]; - for (size_t k=0; kcount/2) index = lim1; - else if (lim2 v[topind[num-1]])) { - /* Put this element at end of topind. */ - if (num < RAND_DIM) { - topind[num++] = i; /* Add to list. */ - } - else { - topind[num-1] = i; /* Replace last element. */ - } - /* Bubble end value down to right location by repeated swapping. */ - int j = num - 1; - while (j > 0 && v[topind[j]] > v[topind[j-1]]) { - std::swap(topind[j], topind[j-1]); - --j; - } - } - } - /* Select a random integer in range [0,num-1], and return that index. */ - int rnd = rand_int(num); - return (int)topind[rnd]; - } - - - /** - * Subdivide the list of points by a plane perpendicular on axe corresponding - * to the 'cutfeat' dimension at 'cutval' position. - * - * On return: - * dataset[ind[0..lim1-1]][cutfeat]cutval - */ - void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2) - { - /* Move vector indices for left subtree to front of list. */ - int left = 0; - int right = count-1; - for (;; ) { - while (left<=right && dataset_[ind[left]][cutfeat]=cutval) --right; - if (left>right) break; - std::swap(ind[left], ind[right]); ++left; --right; - } - lim1 = left; - right = count-1; - for (;; ) { - while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left; - while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right; - if (left>right) break; - std::swap(ind[left], ind[right]); ++left; --right; - } - lim2 = left; - } - - /** - * Performs an exact nearest neighbor search. The exact search performs a full - * traversal of the tree. - */ - void getExactNeighbors(ResultSet& result, const ElementType* vec, float epsError) - { - // checkID -= 1; /* Set a different unique ID for each search. */ - - if (trees_ > 1) { - fprintf(stderr,"It doesn't make any sense to use more than one tree for exact search"); - } - if (trees_>0) { - searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError); - } - assert(result.full()); - } - - /** - * Performs the approximate nearest-neighbor search. The search is approximate - * because the tree traversal is abandoned after a given number of descends in - * the tree. - */ - void getNeighbors(ResultSet& result, const ElementType* vec, int maxCheck, float epsError) - { - int i; - BranchSt branch; - - int checkCount = 0; - Heap* heap = new Heap((int)size_); - DynamicBitset checked(size_); - - /* Search once through each tree down to root. */ - for (i = 0; i < trees_; ++i) { - searchLevel(result, vec, tree_roots_[i], 0, checkCount, maxCheck, epsError, heap, checked); - } - - /* Keep searching other branches from heap until finished. */ - while ( heap->popMin(branch) && (checkCount < maxCheck || !result.full() )) { - searchLevel(result, vec, branch.node, branch.mindist, checkCount, maxCheck, epsError, heap, checked); - } - - delete heap; - - assert(result.full()); - } - - - /** - * Search starting from a given node of the tree. Based on any mismatches at - * higher levels, all exemplars below this level must have a distance of - * at least "mindistsq". - */ - void searchLevel(ResultSet& result_set, const ElementType* vec, NodePtr node, DistanceType mindist, int& checkCount, int maxCheck, - float epsError, Heap* heap, DynamicBitset& checked) - { - if (result_set.worstDist()child1 == NULL)&&(node->child2 == NULL)) { - /* Do not check same node more than once when searching multiple trees. - Once a vector is checked, we set its location in vind to the - current checkID. - */ - int index = node->divfeat; - if ( checked.test(index) || ((checkCount>=maxCheck)&& result_set.full()) ) return; - checked.set(index); - checkCount++; - - DistanceType dist = distance_(dataset_[index], vec, veclen_); - result_set.addPoint(dist,index); - - return; - } - - /* Which child branch should be taken first? */ - ElementType val = vec[node->divfeat]; - DistanceType diff = val - node->divval; - NodePtr bestChild = (diff < 0) ? node->child1 : node->child2; - NodePtr otherChild = (diff < 0) ? node->child2 : node->child1; - - /* Create a branch record for the branch not taken. Add distance - of this feature boundary (we don't attempt to correct for any - use of this feature in a parent node, which is unlikely to - happen and would have only a small effect). Don't bother - adding more branches to heap after halfway point, as cost of - adding exceeds their value. - */ - - DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat); - // if (2 * checkCount < maxCheck || !result.full()) { - if ((new_distsq*epsError < result_set.worstDist())|| !result_set.full()) { - heap->insert( BranchSt(otherChild, new_distsq) ); - } - - /* Call recursively to search next level down. */ - searchLevel(result_set, vec, bestChild, mindist, checkCount, maxCheck, epsError, heap, checked); - } - - /** - * Performs an exact search in the tree starting from a node. - */ - void searchLevelExact(ResultSet& result_set, const ElementType* vec, const NodePtr node, DistanceType mindist, const float epsError) - { - /* If this is a leaf node, then do check and return. */ - if ((node->child1 == NULL)&&(node->child2 == NULL)) { - int index = node->divfeat; - DistanceType dist = distance_(dataset_[index], vec, veclen_); - result_set.addPoint(dist,index); - return; - } - - /* Which child branch should be taken first? */ - ElementType val = vec[node->divfeat]; - DistanceType diff = val - node->divval; - NodePtr bestChild = (diff < 0) ? node->child1 : node->child2; - NodePtr otherChild = (diff < 0) ? node->child2 : node->child1; - - /* Create a branch record for the branch not taken. Add distance - of this feature boundary (we don't attempt to correct for any - use of this feature in a parent node, which is unlikely to - happen and would have only a small effect). Don't bother - adding more branches to heap after halfway point, as cost of - adding exceeds their value. - */ - - DistanceType new_distsq = mindist + distance_.accum_dist(val, node->divval, node->divfeat); - - /* Call recursively to search next level down. */ - searchLevelExact(result_set, vec, bestChild, mindist, epsError); - - if (new_distsq*epsError<=result_set.worstDist()) { - searchLevelExact(result_set, vec, otherChild, new_distsq, epsError); - } - } - - -private: - - enum - { - /** - * To improve efficiency, only SAMPLE_MEAN random values are used to - * compute the mean and variance at each level when building a tree. - * A value of 100 seems to perform as well as using all values. - */ - SAMPLE_MEAN = 100, - /** - * Top random dimensions to consider - * - * When creating random trees, the dimension on which to subdivide is - * selected at random from among the top RAND_DIM dimensions with the - * highest variance. A value of 5 works well. - */ - RAND_DIM=5 - }; - - - /** - * Number of randomized trees that are used - */ - int trees_; - - /** - * Array of indices to vectors in the dataset. - */ - std::vector vind_; - - /** - * The dataset used by this index - */ - const Matrix dataset_; - - IndexParams index_params_; - - size_t size_; - size_t veclen_; - - - DistanceType* mean_; - DistanceType* var_; - - - /** - * Array of k-d trees used to find neighbours. - */ - NodePtr* tree_roots_; - - /** - * Pooled memory allocator. - * - * Using a pooled memory allocator is more efficient - * than allocating memory directly when there is a large - * number small of memory allocations. - */ - PooledAllocator pool_; - - Distance distance_; - - -}; // class KDTreeForest - -} - -#endif //OPENCV_FLANN_KDTREE_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/kdtree_single_index.h b/modules/flann/include/opencv2/flann/kdtree_single_index.h deleted file mode 100644 index 30488ad..0000000 --- a/modules/flann/include/opencv2/flann/kdtree_single_index.h +++ /dev/null @@ -1,634 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_ -#define OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_ - -#include -#include -#include -#include - -#include "general.h" -#include "nn_index.h" -#include "matrix.h" -#include "result_set.h" -#include "heap.h" -#include "allocator.h" -#include "random.h" -#include "saving.h" - -namespace cvflann -{ - -struct KDTreeSingleIndexParams : public IndexParams -{ - KDTreeSingleIndexParams(int leaf_max_size = 10, bool reorder = true, int dim = -1) - { - (*this)["algorithm"] = FLANN_INDEX_KDTREE_SINGLE; - (*this)["leaf_max_size"] = leaf_max_size; - (*this)["reorder"] = reorder; - (*this)["dim"] = dim; - } -}; - - -/** - * Randomized kd-tree index - * - * Contains the k-d trees and other information for indexing a set of points - * for nearest-neighbor matching. - */ -template -class KDTreeSingleIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - - /** - * KDTree constructor - * - * Params: - * inputData = dataset with the input features - * params = parameters passed to the kdtree algorithm - */ - KDTreeSingleIndex(const Matrix& inputData, const IndexParams& params = KDTreeSingleIndexParams(), - Distance d = Distance() ) : - dataset_(inputData), index_params_(params), distance_(d) - { - size_ = dataset_.rows; - dim_ = dataset_.cols; - int dim_param = get_param(params,"dim",-1); - if (dim_param>0) dim_ = dim_param; - leaf_max_size_ = get_param(params,"leaf_max_size",10); - reorder_ = get_param(params,"reorder",true); - - // Create a permutable array of indices to the input vectors. - vind_.resize(size_); - for (size_t i = 0; i < size_; i++) { - vind_[i] = (int)i; - } - } - - KDTreeSingleIndex(const KDTreeSingleIndex&); - KDTreeSingleIndex& operator=(const KDTreeSingleIndex&); - - /** - * Standard destructor - */ - ~KDTreeSingleIndex() - { - if (reorder_) delete[] data_.data; - } - - /** - * Builds the index - */ - void buildIndex() - { - computeBoundingBox(root_bbox_); - root_node_ = divideTree(0, (int)size_, root_bbox_ ); // construct the tree - - if (reorder_) { - delete[] data_.data; - data_ = cvflann::Matrix(new ElementType[size_*dim_], size_, dim_); - for (size_t i=0; i& queries, Matrix& indices, Matrix& dists, int knn, const SearchParams& params) - { - assert(queries.cols == veclen()); - assert(indices.rows >= queries.rows); - assert(dists.rows >= queries.rows); - assert(int(indices.cols) >= knn); - assert(int(dists.cols) >= knn); - - KNNSimpleResultSet resultSet(knn); - for (size_t i = 0; i < queries.rows; i++) { - resultSet.init(indices[i], dists[i]); - findNeighbors(resultSet, queries[i], params); - } - } - - IndexParams getParameters() const - { - return index_params_; - } - - /** - * Find set of nearest neighbors to vec. Their indices are stored inside - * the result object. - * - * Params: - * result = the result object in which the indices of the nearest-neighbors are stored - * vec = the vector for which to search the nearest neighbors - * maxCheck = the maximum number of restarts (in a best-bin-first manner) - */ - void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) - { - float epsError = 1+get_param(searchParams,"eps",0.0f); - - std::vector dists(dim_,0); - DistanceType distsq = computeInitialDistances(vec, dists); - searchLevel(result, vec, root_node_, distsq, dists, epsError); - } - -private: - - - /*--------------------- Internal Data Structures --------------------------*/ - struct Node - { - /** - * Indices of points in leaf node - */ - int left, right; - /** - * Dimension used for subdivision. - */ - int divfeat; - /** - * The values used for subdivision. - */ - DistanceType divlow, divhigh; - /** - * The child nodes. - */ - Node* child1, * child2; - }; - typedef Node* NodePtr; - - - struct Interval - { - DistanceType low, high; - }; - - typedef std::vector BoundingBox; - - typedef BranchStruct BranchSt; - typedef BranchSt* Branch; - - - - - void save_tree(FILE* stream, NodePtr tree) - { - save_value(stream, *tree); - if (tree->child1!=NULL) { - save_tree(stream, tree->child1); - } - if (tree->child2!=NULL) { - save_tree(stream, tree->child2); - } - } - - - void load_tree(FILE* stream, NodePtr& tree) - { - tree = pool_.allocate(); - load_value(stream, *tree); - if (tree->child1!=NULL) { - load_tree(stream, tree->child1); - } - if (tree->child2!=NULL) { - load_tree(stream, tree->child2); - } - } - - - void computeBoundingBox(BoundingBox& bbox) - { - bbox.resize(dim_); - for (size_t i=0; ibbox[i].high) bbox[i].high = (DistanceType)dataset_[k][i]; - } - } - } - - - /** - * Create a tree node that subdivides the list of vecs from vind[first] - * to vind[last]. The routine is called recursively on each sublist. - * Place a pointer to this new tree node in the location pTree. - * - * Params: pTree = the new node to create - * first = index of the first vector - * last = index of the last vector - */ - NodePtr divideTree(int left, int right, BoundingBox& bbox) - { - NodePtr node = pool_.allocate(); // allocate memory - - /* If too few exemplars remain, then make this a leaf node. */ - if ( (right-left) <= leaf_max_size_) { - node->child1 = node->child2 = NULL; /* Mark as leaf node. */ - node->left = left; - node->right = right; - - // compute bounding-box of leaf points - for (size_t i=0; idataset_[vind_[k]][i]) bbox[i].low=(DistanceType)dataset_[vind_[k]][i]; - if (bbox[i].highdivfeat = cutfeat; - - BoundingBox left_bbox(bbox); - left_bbox[cutfeat].high = cutval; - node->child1 = divideTree(left, left+idx, left_bbox); - - BoundingBox right_bbox(bbox); - right_bbox[cutfeat].low = cutval; - node->child2 = divideTree(left+idx, right, right_bbox); - - node->divlow = left_bbox[cutfeat].high; - node->divhigh = right_bbox[cutfeat].low; - - for (size_t i=0; imax_elem) max_elem = val; - } - } - - void middleSplit(int* ind, int count, int& index, int& cutfeat, DistanceType& cutval, const BoundingBox& bbox) - { - // find the largest span from the approximate bounding box - ElementType max_span = bbox[0].high-bbox[0].low; - cutfeat = 0; - cutval = (bbox[0].high+bbox[0].low)/2; - for (size_t i=1; imax_span) { - max_span = span; - cutfeat = i; - cutval = (bbox[i].high+bbox[i].low)/2; - } - } - - // compute exact span on the found dimension - ElementType min_elem, max_elem; - computeMinMax(ind, count, cutfeat, min_elem, max_elem); - cutval = (min_elem+max_elem)/2; - max_span = max_elem - min_elem; - - // check if a dimension of a largest span exists - size_t k = cutfeat; - for (size_t i=0; imax_span) { - computeMinMax(ind, count, i, min_elem, max_elem); - span = max_elem - min_elem; - if (span>max_span) { - max_span = span; - cutfeat = i; - cutval = (min_elem+max_elem)/2; - } - } - } - int lim1, lim2; - planeSplit(ind, count, cutfeat, cutval, lim1, lim2); - - if (lim1>count/2) index = lim1; - else if (lim2max_span) { - max_span = span; - } - } - DistanceType max_spread = -1; - cutfeat = 0; - for (size_t i=0; i(DistanceType)((1-EPS)*max_span)) { - ElementType min_elem, max_elem; - computeMinMax(ind, count, cutfeat, min_elem, max_elem); - DistanceType spread = (DistanceType)(max_elem-min_elem); - if (spread>max_spread) { - cutfeat = (int)i; - max_spread = spread; - } - } - } - // split in the middle - DistanceType split_val = (bbox[cutfeat].low+bbox[cutfeat].high)/2; - ElementType min_elem, max_elem; - computeMinMax(ind, count, cutfeat, min_elem, max_elem); - - if (split_valmax_elem) cutval = (DistanceType)max_elem; - else cutval = split_val; - - int lim1, lim2; - planeSplit(ind, count, cutfeat, cutval, lim1, lim2); - - if (lim1>count/2) index = lim1; - else if (lim2cutval - */ - void planeSplit(int* ind, int count, int cutfeat, DistanceType cutval, int& lim1, int& lim2) - { - /* Move vector indices for left subtree to front of list. */ - int left = 0; - int right = count-1; - for (;; ) { - while (left<=right && dataset_[ind[left]][cutfeat]=cutval) --right; - if (left>right) break; - std::swap(ind[left], ind[right]); ++left; --right; - } - /* If either list is empty, it means that all remaining features - * are identical. Split in the middle to maintain a balanced tree. - */ - lim1 = left; - right = count-1; - for (;; ) { - while (left<=right && dataset_[ind[left]][cutfeat]<=cutval) ++left; - while (left<=right && dataset_[ind[right]][cutfeat]>cutval) --right; - if (left>right) break; - std::swap(ind[left], ind[right]); ++left; --right; - } - lim2 = left; - } - - DistanceType computeInitialDistances(const ElementType* vec, std::vector& dists) - { - DistanceType distsq = 0.0; - - for (size_t i = 0; i < dim_; ++i) { - if (vec[i] < root_bbox_[i].low) { - dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].low, (int)i); - distsq += dists[i]; - } - if (vec[i] > root_bbox_[i].high) { - dists[i] = distance_.accum_dist(vec[i], root_bbox_[i].high, (int)i); - distsq += dists[i]; - } - } - - return distsq; - } - - /** - * Performs an exact search in the tree starting from a node. - */ - void searchLevel(ResultSet& result_set, const ElementType* vec, const NodePtr node, DistanceType mindistsq, - std::vector& dists, const float epsError) - { - /* If this is a leaf node, then do check and return. */ - if ((node->child1 == NULL)&&(node->child2 == NULL)) { - DistanceType worst_dist = result_set.worstDist(); - for (int i=node->left; iright; ++i) { - int index = reorder_ ? i : vind_[i]; - DistanceType dist = distance_(vec, data_[index], dim_, worst_dist); - if (distdivfeat; - ElementType val = vec[idx]; - DistanceType diff1 = val - node->divlow; - DistanceType diff2 = val - node->divhigh; - - NodePtr bestChild; - NodePtr otherChild; - DistanceType cut_dist; - if ((diff1+diff2)<0) { - bestChild = node->child1; - otherChild = node->child2; - cut_dist = distance_.accum_dist(val, node->divhigh, idx); - } - else { - bestChild = node->child2; - otherChild = node->child1; - cut_dist = distance_.accum_dist( val, node->divlow, idx); - } - - /* Call recursively to search next level down. */ - searchLevel(result_set, vec, bestChild, mindistsq, dists, epsError); - - DistanceType dst = dists[idx]; - mindistsq = mindistsq + cut_dist - dst; - dists[idx] = cut_dist; - if (mindistsq*epsError<=result_set.worstDist()) { - searchLevel(result_set, vec, otherChild, mindistsq, dists, epsError); - } - dists[idx] = dst; - } - -private: - - /** - * The dataset used by this index - */ - const Matrix dataset_; - - IndexParams index_params_; - - int leaf_max_size_; - bool reorder_; - - - /** - * Array of indices to vectors in the dataset. - */ - std::vector vind_; - - Matrix data_; - - size_t size_; - size_t dim_; - - /** - * Array of k-d trees used to find neighbours. - */ - NodePtr root_node_; - - BoundingBox root_bbox_; - - /** - * Pooled memory allocator. - * - * Using a pooled memory allocator is more efficient - * than allocating memory directly when there is a large - * number small of memory allocations. - */ - PooledAllocator pool_; - - Distance distance_; -}; // class KDTree - -} - -#endif //OPENCV_FLANN_KDTREE_SINGLE_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/kmeans_index.h b/modules/flann/include/opencv2/flann/kmeans_index.h deleted file mode 100644 index 489ed80..0000000 --- a/modules/flann/include/opencv2/flann/kmeans_index.h +++ /dev/null @@ -1,1117 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_KMEANS_INDEX_H_ -#define OPENCV_FLANN_KMEANS_INDEX_H_ - -#include -#include -#include -#include -#include -#include - -#include "general.h" -#include "nn_index.h" -#include "dist.h" -#include "matrix.h" -#include "result_set.h" -#include "heap.h" -#include "allocator.h" -#include "random.h" -#include "saving.h" -#include "logger.h" - - -namespace cvflann -{ - -struct KMeansIndexParams : public IndexParams -{ - KMeansIndexParams(int branching = 32, int iterations = 11, - flann_centers_init_t centers_init = FLANN_CENTERS_RANDOM, float cb_index = 0.2 ) - { - (*this)["algorithm"] = FLANN_INDEX_KMEANS; - // branching factor - (*this)["branching"] = branching; - // max iterations to perform in one kmeans clustering (kmeans tree) - (*this)["iterations"] = iterations; - // algorithm used for picking the initial cluster centers for kmeans tree - (*this)["centers_init"] = centers_init; - // cluster boundary index. Used when searching the kmeans tree - (*this)["cb_index"] = cb_index; - } -}; - - -/** - * Hierarchical kmeans index - * - * Contains a tree constructed through a hierarchical kmeans clustering - * and other information for indexing a set of points for nearest-neighbour matching. - */ -template -class KMeansIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - - - typedef void (KMeansIndex::* centersAlgFunction)(int, int*, int, int*, int&); - - /** - * The function used for choosing the cluster centers. - */ - centersAlgFunction chooseCenters; - - - - /** - * Chooses the initial centers in the k-means clustering in a random manner. - * - * Params: - * k = number of centers - * vecs = the dataset of points - * indices = indices in the dataset - * indices_length = length of indices vector - * - */ - void chooseCentersRandom(int k, int* indices, int indices_length, int* centers, int& centers_length) - { - UniqueRandom r(indices_length); - - int index; - for (index=0; index=0 && rnd < n); - - centers[0] = indices[rnd]; - - int index; - for (index=1; indexbest_val) { - best_val = dist; - best_index = j; - } - } - if (best_index!=-1) { - centers[index] = indices[best_index]; - } - else { - break; - } - } - centers_length = index; - } - - - /** - * Chooses the initial centers in the k-means using the algorithm - * proposed in the KMeans++ paper: - * Arthur, David; Vassilvitskii, Sergei - k-means++: The Advantages of Careful Seeding - * - * Implementation of this function was converted from the one provided in Arthur's code. - * - * Params: - * k = number of centers - * vecs = the dataset of points - * indices = indices in the dataset - * Returns: - */ - void chooseCentersKMeanspp(int k, int* indices, int indices_length, int* centers, int& centers_length) - { - int n = indices_length; - - double currentPot = 0; - DistanceType* closestDistSq = new DistanceType[n]; - - // Choose one random center and set the closestDistSq values - int index = rand_int(n); - assert(index >=0 && index < n); - centers[0] = indices[index]; - - for (int i = 0; i < n; i++) { - closestDistSq[i] = distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols); - currentPot += closestDistSq[i]; - } - - - const int numLocalTries = 1; - - // Choose each center - int centerCount; - for (centerCount = 1; centerCount < k; centerCount++) { - - // Repeat several trials - double bestNewPot = -1; - int bestNewIndex = -1; - for (int localTrial = 0; localTrial < numLocalTries; localTrial++) { - - // Choose our center - have to be slightly careful to return a valid answer even accounting - // for possible rounding errors - double randVal = rand_double(currentPot); - for (index = 0; index < n-1; index++) { - if (randVal <= closestDistSq[index]) break; - else randVal -= closestDistSq[index]; - } - - // Compute the new potential - double newPot = 0; - for (int i = 0; i < n; i++) newPot += std::min( distance_(dataset_[indices[i]], dataset_[indices[index]], dataset_.cols), closestDistSq[i] ); - - // Store the best result - if ((bestNewPot < 0)||(newPot < bestNewPot)) { - bestNewPot = newPot; - bestNewIndex = index; - } - } - - // Add the appropriate center - centers[centerCount] = indices[bestNewIndex]; - currentPot = bestNewPot; - for (int i = 0; i < n; i++) closestDistSq[i] = std::min( distance_(dataset_[indices[i]], dataset_[indices[bestNewIndex]], dataset_.cols), closestDistSq[i] ); - } - - centers_length = centerCount; - - delete[] closestDistSq; - } - - - -public: - - flann_algorithm_t getType() const - { - return FLANN_INDEX_KMEANS; - } - - /** - * Index constructor - * - * Params: - * inputData = dataset with the input features - * params = parameters passed to the hierarchical k-means algorithm - */ - KMeansIndex(const Matrix& inputData, const IndexParams& params = KMeansIndexParams(), - Distance d = Distance()) - : dataset_(inputData), index_params_(params), root_(NULL), indices_(NULL), distance_(d) - { - memoryCounter_ = 0; - - size_ = dataset_.rows; - veclen_ = dataset_.cols; - - branching_ = get_param(params,"branching",32); - iterations_ = get_param(params,"iterations",11); - if (iterations_<0) { - iterations_ = (std::numeric_limits::max)(); - } - centers_init_ = get_param(params,"centers_init",FLANN_CENTERS_RANDOM); - - if (centers_init_==FLANN_CENTERS_RANDOM) { - chooseCenters = &KMeansIndex::chooseCentersRandom; - } - else if (centers_init_==FLANN_CENTERS_GONZALES) { - chooseCenters = &KMeansIndex::chooseCentersGonzales; - } - else if (centers_init_==FLANN_CENTERS_KMEANSPP) { - chooseCenters = &KMeansIndex::chooseCentersKMeanspp; - } - else { - throw FLANNException("Unknown algorithm for choosing initial centers."); - } - cb_index_ = 0.4f; - - } - - - KMeansIndex(const KMeansIndex&); - KMeansIndex& operator=(const KMeansIndex&); - - - /** - * Index destructor. - * - * Release the memory used by the index. - */ - virtual ~KMeansIndex() - { - if (root_ != NULL) { - free_centers(root_); - } - if (indices_!=NULL) { - delete[] indices_; - } - } - - /** - * Returns size of index. - */ - size_t size() const - { - return size_; - } - - /** - * Returns the length of an index feature. - */ - size_t veclen() const - { - return veclen_; - } - - - void set_cb_index( float index) - { - cb_index_ = index; - } - - /** - * Computes the inde memory usage - * Returns: memory used by the index - */ - int usedMemory() const - { - return pool_.usedMemory+pool_.wastedMemory+memoryCounter_; - } - - /** - * Builds the index - */ - void buildIndex() - { - if (branching_<2) { - throw FLANNException("Branching factor must be at least 2"); - } - - indices_ = new int[size_]; - for (size_t i=0; i(); - computeNodeStatistics(root_, indices_, (int)size_); - computeClustering(root_, indices_, (int)size_, branching_,0); - } - - - void saveIndex(FILE* stream) - { - save_value(stream, branching_); - save_value(stream, iterations_); - save_value(stream, memoryCounter_); - save_value(stream, cb_index_); - save_value(stream, *indices_, (int)size_); - - save_tree(stream, root_); - } - - - void loadIndex(FILE* stream) - { - load_value(stream, branching_); - load_value(stream, iterations_); - load_value(stream, memoryCounter_); - load_value(stream, cb_index_); - if (indices_!=NULL) { - delete[] indices_; - } - indices_ = new int[size_]; - load_value(stream, *indices_, size_); - - if (root_!=NULL) { - free_centers(root_); - } - load_tree(stream, root_); - - index_params_["algorithm"] = getType(); - index_params_["branching"] = branching_; - index_params_["iterations"] = iterations_; - index_params_["centers_init"] = centers_init_; - index_params_["cb_index"] = cb_index_; - - } - - - /** - * Find set of nearest neighbors to vec. Their indices are stored inside - * the result object. - * - * Params: - * result = the result object in which the indices of the nearest-neighbors are stored - * vec = the vector for which to search the nearest neighbors - * searchParams = parameters that influence the search algorithm (checks, cb_index) - */ - void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) - { - - int maxChecks = get_param(searchParams,"checks",32); - - if (maxChecks==FLANN_CHECKS_UNLIMITED) { - findExactNN(root_, result, vec); - } - else { - // Priority queue storing intermediate branches in the best-bin-first search - Heap* heap = new Heap((int)size_); - - int checks = 0; - findNN(root_, result, vec, checks, maxChecks, heap); - - BranchSt branch; - while (heap->popMin(branch) && (checks& centers) - { - int numClusters = centers.rows; - if (numClusters<1) { - throw FLANNException("Number of clusters must be at least 1"); - } - - DistanceType variance; - KMeansNodePtr* clusters = new KMeansNodePtr[numClusters]; - - int clusterCount = getMinVarianceClusters(root_, clusters, numClusters, variance); - - Logger::info("Clusters requested: %d, returning %d\n",numClusters, clusterCount); - - for (int i=0; ipivot; - for (size_t j=0; j BranchSt; - - - - - void save_tree(FILE* stream, KMeansNodePtr node) - { - save_value(stream, *node); - save_value(stream, *(node->pivot), (int)veclen_); - if (node->childs==NULL) { - int indices_offset = (int)(node->indices - indices_); - save_value(stream, indices_offset); - } - else { - for(int i=0; ichilds[i]); - } - } - } - - - void load_tree(FILE* stream, KMeansNodePtr& node) - { - node = pool_.allocate(); - load_value(stream, *node); - node->pivot = new DistanceType[veclen_]; - load_value(stream, *(node->pivot), (int)veclen_); - if (node->childs==NULL) { - int indices_offset; - load_value(stream, indices_offset); - node->indices = indices_ + indices_offset; - } - else { - node->childs = pool_.allocate(branching_); - for(int i=0; ichilds[i]); - } - } - } - - - /** - * Helper function - */ - void free_centers(KMeansNodePtr node) - { - delete[] node->pivot; - if (node->childs!=NULL) { - for (int k=0; kchilds[k]); - } - } - } - - /** - * Computes the statistics of a node (mean, radius, variance). - * - * Params: - * node = the node to use - * indices = the indices of the points belonging to the node - */ - void computeNodeStatistics(KMeansNodePtr node, int* indices, int indices_length) - { - - DistanceType radius = 0; - DistanceType variance = 0; - DistanceType* mean = new DistanceType[veclen_]; - memoryCounter_ += int(veclen_*sizeof(DistanceType)); - - memset(mean,0,veclen_*sizeof(DistanceType)); - - for (size_t i=0; i(), veclen_); - } - for (size_t j=0; j(), veclen_); - - DistanceType tmp = 0; - for (int i=0; iradius) { - radius = tmp; - } - } - - node->variance = variance; - node->radius = radius; - node->pivot = mean; - } - - - /** - * The method responsible with actually doing the recursive hierarchical - * clustering - * - * Params: - * node = the node to cluster - * indices = indices of the points belonging to the current node - * branching = the branching factor to use in the clustering - * - * TODO: for 1-sized clusters don't store a cluster center (it's the same as the single cluster point) - */ - void computeClustering(KMeansNodePtr node, int* indices, int indices_length, int branching, int level) - { - node->size = indices_length; - node->level = level; - - if (indices_length < branching) { - node->indices = indices; - std::sort(node->indices,node->indices+indices_length); - node->childs = NULL; - return; - } - - int* centers_idx = new int[branching]; - int centers_length; - (this->*chooseCenters)(branching, indices, indices_length, centers_idx, centers_length); - - if (centers_lengthindices = indices; - std::sort(node->indices,node->indices+indices_length); - node->childs = NULL; - delete [] centers_idx; - return; - } - - - Matrix dcenters(new double[branching*veclen_],branching,veclen_); - for (int i=0; i radiuses(branching); - int* count = new int[branching]; - for (int i=0; inew_sq_dist) { - belongs_to[i] = j; - sq_dist = new_sq_dist; - } - } - if (sq_dist>radiuses[belongs_to[i]]) { - radiuses[belongs_to[i]] = sq_dist; - } - count[belongs_to[i]]++; - } - - bool converged = false; - int iteration = 0; - while (!converged && iterationnew_sq_dist) { - new_centroid = j; - sq_dist = new_sq_dist; - } - } - if (sq_dist>radiuses[new_centroid]) { - radiuses[new_centroid] = sq_dist; - } - if (new_centroid != belongs_to[i]) { - count[belongs_to[i]]--; - count[new_centroid]++; - belongs_to[i] = new_centroid; - - converged = false; - } - } - - for (int i=0; ichilds = pool_.allocate(branching); - int start = 0; - int end = start; - for (int c=0; c(), veclen_); - variance += d; - mean_radius += sqrt(d); - std::swap(indices[i],indices[end]); - std::swap(belongs_to[i],belongs_to[end]); - end++; - } - } - variance /= s; - mean_radius /= s; - variance -= distance_(centers[c], ZeroIterator(), veclen_); - - node->childs[c] = pool_.allocate(); - node->childs[c]->radius = radiuses[c]; - node->childs[c]->pivot = centers[c]; - node->childs[c]->variance = variance; - node->childs[c]->mean_radius = mean_radius; - node->childs[c]->indices = NULL; - computeClustering(node->childs[c],indices+start, end-start, branching, level+1); - start=end; - } - - delete[] dcenters.data; - delete[] centers; - delete[] count; - delete[] belongs_to; - } - - - - /** - * Performs one descent in the hierarchical k-means tree. The branches not - * visited are stored in a priority queue. - * - * Params: - * node = node to explore - * result = container for the k-nearest neighbors found - * vec = query points - * checks = how many points in the dataset have been checked so far - * maxChecks = maximum dataset points to checks - */ - - - void findNN(KMeansNodePtr node, ResultSet& result, const ElementType* vec, int& checks, int maxChecks, - Heap* heap) - { - // Ignore those clusters that are too far away - { - DistanceType bsq = distance_(vec, node->pivot, veclen_); - DistanceType rsq = node->radius; - DistanceType wsq = result.worstDist(); - - DistanceType val = bsq-rsq-wsq; - DistanceType val2 = val*val-4*rsq*wsq; - - //if (val>0) { - if ((val>0)&&(val2>0)) { - return; - } - } - - if (node->childs==NULL) { - if (checks>=maxChecks) { - if (result.full()) return; - } - checks += node->size; - for (int i=0; isize; ++i) { - int index = node->indices[i]; - DistanceType dist = distance_(dataset_[index], vec, veclen_); - result.addPoint(dist, index); - } - } - else { - DistanceType* domain_distances = new DistanceType[branching_]; - int closest_center = exploreNodeBranches(node, vec, domain_distances, heap); - delete[] domain_distances; - findNN(node->childs[closest_center],result,vec, checks, maxChecks, heap); - } - } - - /** - * Helper function that computes the nearest childs of a node to a given query point. - * Params: - * node = the node - * q = the query point - * distances = array with the distances to each child node. - * Returns: - */ - int exploreNodeBranches(KMeansNodePtr node, const ElementType* q, DistanceType* domain_distances, Heap* heap) - { - - int best_index = 0; - domain_distances[best_index] = distance_(q, node->childs[best_index]->pivot, veclen_); - for (int i=1; ichilds[i]->pivot, veclen_); - if (domain_distances[i]childs[best_index]->pivot; - for (int i=0; ichilds[i]->variance; - - // float dist_to_border = getDistanceToBorder(node.childs[i].pivot,best_center,q); - // if (domain_distances[i]insert(BranchSt(node->childs[i],domain_distances[i])); - } - } - - return best_index; - } - - - /** - * Function the performs exact nearest neighbor search by traversing the entire tree. - */ - void findExactNN(KMeansNodePtr node, ResultSet& result, const ElementType* vec) - { - // Ignore those clusters that are too far away - { - DistanceType bsq = distance_(vec, node->pivot, veclen_); - DistanceType rsq = node->radius; - DistanceType wsq = result.worstDist(); - - DistanceType val = bsq-rsq-wsq; - DistanceType val2 = val*val-4*rsq*wsq; - - // if (val>0) { - if ((val>0)&&(val2>0)) { - return; - } - } - - - if (node->childs==NULL) { - for (int i=0; isize; ++i) { - int index = node->indices[i]; - DistanceType dist = distance_(dataset_[index], vec, veclen_); - result.addPoint(dist, index); - } - } - else { - int* sort_indices = new int[branching_]; - - getCenterOrdering(node, vec, sort_indices); - - for (int i=0; ichilds[sort_indices[i]],result,vec); - } - - delete[] sort_indices; - } - } - - - /** - * Helper function. - * - * I computes the order in which to traverse the child nodes of a particular node. - */ - void getCenterOrdering(KMeansNodePtr node, const ElementType* q, int* sort_indices) - { - DistanceType* domain_distances = new DistanceType[branching_]; - for (int i=0; ichilds[i]->pivot, veclen_); - - int j=0; - while (domain_distances[j]j; --k) { - domain_distances[k] = domain_distances[k-1]; - sort_indices[k] = sort_indices[k-1]; - } - domain_distances[j] = dist; - sort_indices[j] = i; - } - delete[] domain_distances; - } - - /** - * Method that computes the squared distance from the query point q - * from inside region with center c to the border between this - * region and the region with center p - */ - DistanceType getDistanceToBorder(DistanceType* p, DistanceType* c, DistanceType* q) - { - DistanceType sum = 0; - DistanceType sum2 = 0; - - for (int i=0; ivariance*root->size; - - while (clusterCount::max)(); - int splitIndex = -1; - - for (int i=0; ichilds != NULL) { - - DistanceType variance = meanVariance - clusters[i]->variance*clusters[i]->size; - - for (int j=0; jchilds[j]->variance*clusters[i]->childs[j]->size; - } - if (variance clusters_length) break; - - meanVariance = minVariance; - - // split node - KMeansNodePtr toSplit = clusters[splitIndex]; - clusters[splitIndex] = toSplit->childs[0]; - for (int i=1; ichilds[i]; - } - } - - varianceValue = meanVariance/root->size; - return clusterCount; - } - -private: - /** The branching factor used in the hierarchical k-means clustering */ - int branching_; - - /** Maximum number of iterations to use when performing k-means clustering */ - int iterations_; - - /** Algorithm for choosing the cluster centers */ - flann_centers_init_t centers_init_; - - /** - * Cluster border index. This is used in the tree search phase when determining - * the closest cluster to explore next. A zero value takes into account only - * the cluster centres, a value greater then zero also take into account the size - * of the cluster. - */ - float cb_index_; - - /** - * The dataset used by this index - */ - const Matrix dataset_; - - /** Index parameters */ - IndexParams index_params_; - - /** - * Number of features in the dataset. - */ - size_t size_; - - /** - * Length of each feature. - */ - size_t veclen_; - - /** - * The root node in the tree. - */ - KMeansNodePtr root_; - - /** - * Array of indices to vectors in the dataset. - */ - int* indices_; - - /** - * The distance - */ - Distance distance_; - - /** - * Pooled memory allocator. - */ - PooledAllocator pool_; - - /** - * Memory occupied by the index. - */ - int memoryCounter_; -}; - -} - -#endif //OPENCV_FLANN_KMEANS_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/linear_index.h b/modules/flann/include/opencv2/flann/linear_index.h deleted file mode 100644 index 5aa7a5c..0000000 --- a/modules/flann/include/opencv2/flann/linear_index.h +++ /dev/null @@ -1,132 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_LINEAR_INDEX_H_ -#define OPENCV_FLANN_LINEAR_INDEX_H_ - -#include "general.h" -#include "nn_index.h" - -namespace cvflann -{ - -struct LinearIndexParams : public IndexParams -{ - LinearIndexParams() - { - (* this)["algorithm"] = FLANN_INDEX_LINEAR; - } -}; - -template -class LinearIndex : public NNIndex -{ -public: - - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - - LinearIndex(const Matrix& inputData, const IndexParams& params = LinearIndexParams(), - Distance d = Distance()) : - dataset_(inputData), index_params_(params), distance_(d) - { - } - - LinearIndex(const LinearIndex&); - LinearIndex& operator=(const LinearIndex&); - - flann_algorithm_t getType() const - { - return FLANN_INDEX_LINEAR; - } - - - size_t size() const - { - return dataset_.rows; - } - - size_t veclen() const - { - return dataset_.cols; - } - - - int usedMemory() const - { - return 0; - } - - void buildIndex() - { - /* nothing to do here for linear search */ - } - - void saveIndex(FILE*) - { - /* nothing to do here for linear search */ - } - - - void loadIndex(FILE*) - { - /* nothing to do here for linear search */ - - index_params_["algorithm"] = getType(); - } - - void findNeighbors(ResultSet& resultSet, const ElementType* vec, const SearchParams& /*searchParams*/) - { - ElementType* data = dataset_.data; - for (size_t i = 0; i < dataset_.rows; ++i, data += dataset_.cols) { - DistanceType dist = distance_(data, vec, dataset_.cols); - resultSet.addPoint(dist, (int)i); - } - } - - IndexParams getParameters() const - { - return index_params_; - } - -private: - /** The dataset */ - const Matrix dataset_; - /** Index parameters */ - IndexParams index_params_; - /** Index distance */ - Distance distance_; - -}; - -} - -#endif // OPENCV_FLANN_LINEAR_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/logger.h b/modules/flann/include/opencv2/flann/logger.h deleted file mode 100644 index 24f3fb6..0000000 --- a/modules/flann/include/opencv2/flann/logger.h +++ /dev/null @@ -1,130 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_LOGGER_H -#define OPENCV_FLANN_LOGGER_H - -#include -#include - -#include "defines.h" - - -namespace cvflann -{ - -class Logger -{ - Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {} - - ~Logger() - { - if ((stream!=NULL)&&(stream!=stdout)) { - fclose(stream); - } - } - - static Logger& instance() - { - static Logger logger; - return logger; - } - - void _setDestination(const char* name) - { - if (name==NULL) { - stream = stdout; - } - else { - stream = fopen(name,"w"); - if (stream == NULL) { - stream = stdout; - } - } - } - - int _log(int level, const char* fmt, va_list arglist) - { - if (level > logLevel ) return -1; - int ret = vfprintf(stream, fmt, arglist); - return ret; - } - -public: - /** - * Sets the logging level. All messages with lower priority will be ignored. - * @param level Logging level - */ - static void setLevel(int level) { instance().logLevel = level; } - - /** - * Sets the logging destination - * @param name Filename or NULL for console - */ - static void setDestination(const char* name) { instance()._setDestination(name); } - - /** - * Print log message - * @param level Log level - * @param fmt Message format - * @return - */ - static int log(int level, const char* fmt, ...) - { - va_list arglist; - va_start(arglist, fmt); - int ret = instance()._log(level,fmt,arglist); - va_end(arglist); - return ret; - } - -#define LOG_METHOD(NAME,LEVEL) \ - static int NAME(const char* fmt, ...) \ - { \ - va_list ap; \ - va_start(ap, fmt); \ - int ret = instance()._log(LEVEL, fmt, ap); \ - va_end(ap); \ - return ret; \ - } - - LOG_METHOD(fatal, FLANN_LOG_FATAL) - LOG_METHOD(error, FLANN_LOG_ERROR) - LOG_METHOD(warn, FLANN_LOG_WARN) - LOG_METHOD(info, FLANN_LOG_INFO) - -private: - FILE* stream; - int logLevel; -}; - -} - -#endif //OPENCV_FLANN_LOGGER_H diff --git a/modules/flann/include/opencv2/flann/lsh_index.h b/modules/flann/include/opencv2/flann/lsh_index.h deleted file mode 100644 index 4d4670e..0000000 --- a/modules/flann/include/opencv2/flann/lsh_index.h +++ /dev/null @@ -1,392 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *************************************************************************/ - -/*********************************************************************** - * Author: Vincent Rabaud - *************************************************************************/ - -#ifndef OPENCV_FLANN_LSH_INDEX_H_ -#define OPENCV_FLANN_LSH_INDEX_H_ - -#include -#include -#include -#include -#include - -#include "general.h" -#include "nn_index.h" -#include "matrix.h" -#include "result_set.h" -#include "heap.h" -#include "lsh_table.h" -#include "allocator.h" -#include "random.h" -#include "saving.h" - -namespace cvflann -{ - -struct LshIndexParams : public IndexParams -{ - LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2) - { - (* this)["algorithm"] = FLANN_INDEX_LSH; - // The number of hash tables to use - (*this)["table_number"] = table_number; - // The length of the key in the hash tables - (*this)["key_size"] = key_size; - // Number of levels to use in multi-probe (0 for standard LSH) - (*this)["multi_probe_level"] = multi_probe_level; - } -}; - -/** - * Randomized kd-tree index - * - * Contains the k-d trees and other information for indexing a set of points - * for nearest-neighbor matching. - */ -template -class LshIndex : public NNIndex -{ -public: - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - - /** Constructor - * @param input_data dataset with the input features - * @param params parameters passed to the LSH algorithm - * @param d the distance used - */ - LshIndex(const Matrix& input_data, const IndexParams& params = LshIndexParams(), - Distance d = Distance()) : - dataset_(input_data), index_params_(params), distance_(d) - { - // cv::flann::IndexParams sets integer params as 'int', so it is used with get_param - // in place of 'unsigned int' - table_number_ = (unsigned int)get_param(index_params_,"table_number",12); - key_size_ = (unsigned int)get_param(index_params_,"key_size",20); - multi_probe_level_ = (unsigned int)get_param(index_params_,"multi_probe_level",2); - - feature_size_ = (unsigned)dataset_.cols; - fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_); - } - - - LshIndex(const LshIndex&); - LshIndex& operator=(const LshIndex&); - - /** - * Builds the index - */ - void buildIndex() - { - tables_.resize(table_number_); - for (unsigned int i = 0; i < table_number_; ++i) { - lsh::LshTable& table = tables_[i]; - table = lsh::LshTable(feature_size_, key_size_); - - // Add the features to the table - table.add(dataset_); - } - } - - flann_algorithm_t getType() const - { - return FLANN_INDEX_LSH; - } - - - void saveIndex(FILE* stream) - { - save_value(stream,table_number_); - save_value(stream,key_size_); - save_value(stream,multi_probe_level_); - save_value(stream, dataset_); - } - - void loadIndex(FILE* stream) - { - load_value(stream, table_number_); - load_value(stream, key_size_); - load_value(stream, multi_probe_level_); - load_value(stream, dataset_); - // Building the index is so fast we can afford not storing it - buildIndex(); - - index_params_["algorithm"] = getType(); - index_params_["table_number"] = table_number_; - index_params_["key_size"] = key_size_; - index_params_["multi_probe_level"] = multi_probe_level_; - } - - /** - * Returns size of index. - */ - size_t size() const - { - return dataset_.rows; - } - - /** - * Returns the length of an index feature. - */ - size_t veclen() const - { - return feature_size_; - } - - /** - * Computes the index memory usage - * Returns: memory used by the index - */ - int usedMemory() const - { - return (int)(dataset_.rows * sizeof(int)); - } - - - IndexParams getParameters() const - { - return index_params_; - } - - /** - * \brief Perform k-nearest neighbor search - * \param[in] queries The query points for which to find the nearest neighbors - * \param[out] indices The indices of the nearest neighbors found - * \param[out] dists Distances to the nearest neighbors found - * \param[in] knn Number of nearest neighbors to return - * \param[in] params Search parameters - */ - virtual void knnSearch(const Matrix& queries, Matrix& indices, Matrix& dists, int knn, const SearchParams& params) - { - assert(queries.cols == veclen()); - assert(indices.rows >= queries.rows); - assert(dists.rows >= queries.rows); - assert(int(indices.cols) >= knn); - assert(int(dists.cols) >= knn); - - - KNNUniqueResultSet resultSet(knn); - for (size_t i = 0; i < queries.rows; i++) { - resultSet.clear(); - std::fill_n(indices[i], knn, -1); - std::fill_n(dists[i], knn, std::numeric_limits::max()); - findNeighbors(resultSet, queries[i], params); - if (get_param(params,"sorted",true)) resultSet.sortAndCopy(indices[i], dists[i], knn); - else resultSet.copy(indices[i], dists[i], knn); - } - } - - - /** - * Find set of nearest neighbors to vec. Their indices are stored inside - * the result object. - * - * Params: - * result = the result object in which the indices of the nearest-neighbors are stored - * vec = the vector for which to search the nearest neighbors - * maxCheck = the maximum number of restarts (in a best-bin-first manner) - */ - void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& /*searchParams*/) - { - getNeighbors(vec, result); - } - -private: - /** Defines the comparator on score and index - */ - typedef std::pair ScoreIndexPair; - struct SortScoreIndexPairOnSecond - { - bool operator()(const ScoreIndexPair& left, const ScoreIndexPair& right) const - { - return left.second < right.second; - } - }; - - /** Fills the different xor masks to use when getting the neighbors in multi-probe LSH - * @param key the key we build neighbors from - * @param lowest_index the lowest index of the bit set - * @param level the multi-probe level we are at - * @param xor_masks all the xor mask - */ - void fill_xor_mask(lsh::BucketKey key, int lowest_index, unsigned int level, - std::vector& xor_masks) - { - xor_masks.push_back(key); - if (level == 0) return; - for (int index = lowest_index - 1; index >= 0; --index) { - // Create a new key - lsh::BucketKey new_key = key | (1 << index); - fill_xor_mask(new_key, index, level - 1, xor_masks); - } - } - - /** Performs the approximate nearest-neighbor search. - * @param vec the feature to analyze - * @param do_radius flag indicating if we check the radius too - * @param radius the radius if it is a radius search - * @param do_k flag indicating if we limit the number of nn - * @param k_nn the number of nearest neighbors - * @param checked_average used for debugging - */ - void getNeighbors(const ElementType* vec, bool /*do_radius*/, float radius, bool do_k, unsigned int k_nn, - float& /*checked_average*/) - { - static std::vector score_index_heap; - - if (do_k) { - unsigned int worst_score = std::numeric_limits::max(); - typename std::vector >::const_iterator table = tables_.begin(); - typename std::vector >::const_iterator table_end = tables_.end(); - for (; table != table_end; ++table) { - size_t key = table->getKey(vec); - std::vector::const_iterator xor_mask = xor_masks_.begin(); - std::vector::const_iterator xor_mask_end = xor_masks_.end(); - for (; xor_mask != xor_mask_end; ++xor_mask) { - size_t sub_key = key ^ (*xor_mask); - const lsh::Bucket* bucket = table->getBucketFromKey(sub_key); - if (bucket == 0) continue; - - // Go over each descriptor index - std::vector::const_iterator training_index = bucket->begin(); - std::vector::const_iterator last_training_index = bucket->end(); - DistanceType hamming_distance; - - // Process the rest of the candidates - for (; training_index < last_training_index; ++training_index) { - hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols); - - if (hamming_distance < worst_score) { - // Insert the new element - score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index)); - std::push_heap(score_index_heap.begin(), score_index_heap.end()); - - if (score_index_heap.size() > (unsigned int)k_nn) { - // Remove the highest distance value as we have too many elements - std::pop_heap(score_index_heap.begin(), score_index_heap.end()); - score_index_heap.pop_back(); - // Keep track of the worst score - worst_score = score_index_heap.front().first; - } - } - } - } - } - } - else { - typename std::vector >::const_iterator table = tables_.begin(); - typename std::vector >::const_iterator table_end = tables_.end(); - for (; table != table_end; ++table) { - size_t key = table->getKey(vec); - std::vector::const_iterator xor_mask = xor_masks_.begin(); - std::vector::const_iterator xor_mask_end = xor_masks_.end(); - for (; xor_mask != xor_mask_end; ++xor_mask) { - size_t sub_key = key ^ (*xor_mask); - const lsh::Bucket* bucket = table->getBucketFromKey(sub_key); - if (bucket == 0) continue; - - // Go over each descriptor index - std::vector::const_iterator training_index = bucket->begin(); - std::vector::const_iterator last_training_index = bucket->end(); - DistanceType hamming_distance; - - // Process the rest of the candidates - for (; training_index < last_training_index; ++training_index) { - // Compute the Hamming distance - hamming_distance = distance_(vec, dataset_[*training_index], dataset_.cols); - if (hamming_distance < radius) score_index_heap.push_back(ScoreIndexPair(hamming_distance, training_index)); - } - } - } - } - } - - /** Performs the approximate nearest-neighbor search. - * This is a slower version than the above as it uses the ResultSet - * @param vec the feature to analyze - */ - void getNeighbors(const ElementType* vec, ResultSet& result) - { - typename std::vector >::const_iterator table = tables_.begin(); - typename std::vector >::const_iterator table_end = tables_.end(); - for (; table != table_end; ++table) { - size_t key = table->getKey(vec); - std::vector::const_iterator xor_mask = xor_masks_.begin(); - std::vector::const_iterator xor_mask_end = xor_masks_.end(); - for (; xor_mask != xor_mask_end; ++xor_mask) { - size_t sub_key = key ^ (*xor_mask); - const lsh::Bucket* bucket = table->getBucketFromKey((lsh::BucketKey)sub_key); - if (bucket == 0) continue; - - // Go over each descriptor index - std::vector::const_iterator training_index = bucket->begin(); - std::vector::const_iterator last_training_index = bucket->end(); - DistanceType hamming_distance; - - // Process the rest of the candidates - for (; training_index < last_training_index; ++training_index) { - // Compute the Hamming distance - hamming_distance = distance_(vec, dataset_[*training_index], (int)dataset_.cols); - result.addPoint(hamming_distance, *training_index); - } - } - } - } - - /** The different hash tables */ - std::vector > tables_; - - /** The data the LSH tables where built from */ - Matrix dataset_; - - /** The size of the features (as ElementType[]) */ - unsigned int feature_size_; - - IndexParams index_params_; - - /** table number */ - unsigned int table_number_; - /** key size */ - unsigned int key_size_; - /** How far should we look for neighbors in multi-probe LSH */ - unsigned int multi_probe_level_; - - /** The XOR masks to apply to a key to get the neighboring buckets */ - std::vector xor_masks_; - - Distance distance_; -}; -} - -#endif //OPENCV_FLANN_LSH_INDEX_H_ diff --git a/modules/flann/include/opencv2/flann/lsh_table.h b/modules/flann/include/opencv2/flann/lsh_table.h deleted file mode 100644 index b0f3223..0000000 --- a/modules/flann/include/opencv2/flann/lsh_table.h +++ /dev/null @@ -1,492 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *************************************************************************/ - -/*********************************************************************** - * Author: Vincent Rabaud - *************************************************************************/ - -#ifndef OPENCV_FLANN_LSH_TABLE_H_ -#define OPENCV_FLANN_LSH_TABLE_H_ - -#include -#include -#include -#include -// TODO as soon as we use C++0x, use the code in USE_UNORDERED_MAP -#ifdef __GXX_EXPERIMENTAL_CXX0X__ -# define USE_UNORDERED_MAP 1 -#else -# define USE_UNORDERED_MAP 0 -#endif -#if USE_UNORDERED_MAP -#include -#else -#include -#endif -#include -#include - -#include "dynamic_bitset.h" -#include "matrix.h" - -namespace cvflann -{ - -namespace lsh -{ - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** What is stored in an LSH bucket - */ -typedef uint32_t FeatureIndex; -/** The id from which we can get a bucket back in an LSH table - */ -typedef unsigned int BucketKey; - -/** A bucket in an LSH table - */ -typedef std::vector Bucket; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** POD for stats about an LSH table - */ -struct LshStats -{ - std::vector bucket_sizes_; - size_t n_buckets_; - size_t bucket_size_mean_; - size_t bucket_size_median_; - size_t bucket_size_min_; - size_t bucket_size_max_; - size_t bucket_size_std_dev; - /** Each contained vector contains three value: beginning/end for interval, number of elements in the bin - */ - std::vector > size_histogram_; -}; - -/** Overload the << operator for LshStats - * @param out the streams - * @param stats the stats to display - * @return the streams - */ -inline std::ostream& operator <<(std::ostream& out, const LshStats& stats) -{ - int w = 20; - out << "Lsh Table Stats:\n" << std::setw(w) << std::setiosflags(std::ios::right) << "N buckets : " - << stats.n_buckets_ << "\n" << std::setw(w) << std::setiosflags(std::ios::right) << "mean size : " - << std::setiosflags(std::ios::left) << stats.bucket_size_mean_ << "\n" << std::setw(w) - << std::setiosflags(std::ios::right) << "median size : " << stats.bucket_size_median_ << "\n" << std::setw(w) - << std::setiosflags(std::ios::right) << "min size : " << std::setiosflags(std::ios::left) - << stats.bucket_size_min_ << "\n" << std::setw(w) << std::setiosflags(std::ios::right) << "max size : " - << std::setiosflags(std::ios::left) << stats.bucket_size_max_; - - // Display the histogram - out << std::endl << std::setw(w) << std::setiosflags(std::ios::right) << "histogram : " - << std::setiosflags(std::ios::left); - for (std::vector >::const_iterator iterator = stats.size_histogram_.begin(), end = - stats.size_histogram_.end(); iterator != end; ++iterator) out << (*iterator)[0] << "-" << (*iterator)[1] << ": " << (*iterator)[2] << ", "; - - return out; -} - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** Lsh hash table. As its key is a sub-feature, and as usually - * the size of it is pretty small, we keep it as a continuous memory array. - * The value is an index in the corpus of features (we keep it as an unsigned - * int for pure memory reasons, it could be a size_t) - */ -template -class LshTable -{ -public: - /** A container of all the feature indices. Optimized for space - */ -#if USE_UNORDERED_MAP - typedef std::unordered_map BucketsSpace; -#else - typedef std::map BucketsSpace; -#endif - - /** A container of all the feature indices. Optimized for speed - */ - typedef std::vector BucketsSpeed; - - /** Default constructor - */ - LshTable() - { - } - - /** Default constructor - * Create the mask and allocate the memory - * @param feature_size is the size of the feature (considered as a ElementType[]) - * @param key_size is the number of bits that are turned on in the feature - */ - LshTable(unsigned int /*feature_size*/, unsigned int /*key_size*/) - { - std::cerr << "LSH is not implemented for that type" << std::endl; - assert(0); - } - - /** Add a feature to the table - * @param value the value to store for that feature - * @param feature the feature itself - */ - void add(unsigned int value, const ElementType* feature) - { - // Add the value to the corresponding bucket - BucketKey key = (lsh::BucketKey)getKey(feature); - - switch (speed_level_) { - case kArray: - // That means we get the buckets from an array - buckets_speed_[key].push_back(value); - break; - case kBitsetHash: - // That means we can check the bitset for the presence of a key - key_bitset_.set(key); - buckets_space_[key].push_back(value); - break; - case kHash: - { - // That means we have to check for the hash table for the presence of a key - buckets_space_[key].push_back(value); - break; - } - } - } - - /** Add a set of features to the table - * @param dataset the values to store - */ - void add(Matrix dataset) - { -#if USE_UNORDERED_MAP - buckets_space_.rehash((buckets_space_.size() + dataset.rows) * 1.2); -#endif - // Add the features to the table - for (unsigned int i = 0; i < dataset.rows; ++i) add(i, dataset[i]); - // Now that the table is full, optimize it for speed/space - optimize(); - } - - /** Get a bucket given the key - * @param key - * @return - */ - inline const Bucket* getBucketFromKey(BucketKey key) const - { - // Generate other buckets - switch (speed_level_) { - case kArray: - // That means we get the buckets from an array - return &buckets_speed_[key]; - break; - case kBitsetHash: - // That means we can check the bitset for the presence of a key - if (key_bitset_.test(key)) return &buckets_space_.find(key)->second; - else return 0; - break; - case kHash: - { - // That means we have to check for the hash table for the presence of a key - BucketsSpace::const_iterator bucket_it, bucket_end = buckets_space_.end(); - bucket_it = buckets_space_.find(key); - // Stop here if that bucket does not exist - if (bucket_it == bucket_end) return 0; - else return &bucket_it->second; - break; - } - } - return 0; - } - - /** Compute the sub-signature of a feature - */ - size_t getKey(const ElementType* /*feature*/) const - { - std::cerr << "LSH is not implemented for that type" << std::endl; - assert(0); - return 1; - } - - /** Get statistics about the table - * @return - */ - LshStats getStats() const; - -private: - /** defines the speed fo the implementation - * kArray uses a vector for storing data - * kBitsetHash uses a hash map but checks for the validity of a key with a bitset - * kHash uses a hash map only - */ - enum SpeedLevel - { - kArray, kBitsetHash, kHash - }; - - /** Initialize some variables - */ - void initialize(size_t key_size) - { - const size_t key_size_lower_bound = 1; - //a value (size_t(1) << key_size) must fit the size_t type so key_size has to be strictly less than size of size_t - const size_t key_size_upper_bound = std::min(sizeof(BucketKey) * CHAR_BIT + 1, sizeof(size_t) * CHAR_BIT); - if (key_size < key_size_lower_bound || key_size >= key_size_upper_bound) - { - std::stringstream errorMessage; - errorMessage << "Invalid key_size (=" << key_size << "). Valid values for your system are " << key_size_lower_bound << " <= key_size < " << key_size_upper_bound << "."; - CV_Error(CV_StsBadArg, errorMessage.str()); - } - - speed_level_ = kHash; - key_size_ = (unsigned)key_size; - } - - /** Optimize the table for speed/space - */ - void optimize() - { - // If we are already using the fast storage, no need to do anything - if (speed_level_ == kArray) return; - - // Use an array if it will be more than half full - if (buckets_space_.size() > ((size_t(1) << key_size_) / 2)) { - speed_level_ = kArray; - // Fill the array version of it - buckets_speed_.resize(size_t(1) << key_size_); - for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) buckets_speed_[key_bucket->first] = key_bucket->second; - - // Empty the hash table - buckets_space_.clear(); - return; - } - - // If the bitset is going to use less than 10% of the RAM of the hash map (at least 1 size_t for the key and two - // for the vector) or less than 512MB (key_size_ <= 30) - if (((std::max(buckets_space_.size(), buckets_speed_.size()) * CHAR_BIT * 3 * sizeof(BucketKey)) / 10 - >= (size_t(1) << key_size_)) || (key_size_ <= 32)) { - speed_level_ = kBitsetHash; - key_bitset_.resize(size_t(1) << key_size_); - key_bitset_.reset(); - // Try with the BucketsSpace - for (BucketsSpace::const_iterator key_bucket = buckets_space_.begin(); key_bucket != buckets_space_.end(); ++key_bucket) key_bitset_.set(key_bucket->first); - } - else { - speed_level_ = kHash; - key_bitset_.clear(); - } - } - - /** The vector of all the buckets if they are held for speed - */ - BucketsSpeed buckets_speed_; - - /** The hash table of all the buckets in case we cannot use the speed version - */ - BucketsSpace buckets_space_; - - /** What is used to store the data */ - SpeedLevel speed_level_; - - /** If the subkey is small enough, it will keep track of which subkeys are set through that bitset - * That is just a speedup so that we don't look in the hash table (which can be mush slower that checking a bitset) - */ - DynamicBitset key_bitset_; - - /** The size of the sub-signature in bits - */ - unsigned int key_size_; - - // Members only used for the unsigned char specialization - /** The mask to apply to a feature to get the hash key - * Only used in the unsigned char case - */ - std::vector mask_; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Specialization for unsigned char - -template<> -inline LshTable::LshTable(unsigned int feature_size, unsigned int subsignature_size) -{ - initialize(subsignature_size); - // Allocate the mask - mask_ = std::vector((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0); - - // A bit brutal but fast to code - std::vector indices(feature_size * CHAR_BIT); - for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i; - std::random_shuffle(indices.begin(), indices.end()); - - // Generate a random set of order of subsignature_size_ bits - for (unsigned int i = 0; i < key_size_; ++i) { - size_t index = indices[i]; - - // Set that bit in the mask - size_t divisor = CHAR_BIT * sizeof(size_t); - size_t idx = index / divisor; //pick the right size_t index - mask_[idx] |= size_t(1) << (index % divisor); //use modulo to find the bit offset - } - - // Set to 1 if you want to display the mask for debug -#if 0 - { - size_t bcount = 0; - BOOST_FOREACH(size_t mask_block, mask_){ - out << std::setw(sizeof(size_t) * CHAR_BIT / 4) << std::setfill('0') << std::hex << mask_block - << std::endl; - bcount += __builtin_popcountll(mask_block); - } - out << "bit count : " << std::dec << bcount << std::endl; - out << "mask size : " << mask_.size() << std::endl; - return out; - } -#endif -} - -/** Return the Subsignature of a feature - * @param feature the feature to analyze - */ -template<> -inline size_t LshTable::getKey(const unsigned char* feature) const -{ - // no need to check if T is dividable by sizeof(size_t) like in the Hamming - // distance computation as we have a mask - const size_t* feature_block_ptr = reinterpret_cast ((const void*)feature); - - // Figure out the subsignature of the feature - // Given the feature ABCDEF, and the mask 001011, the output will be - // 000CEF - size_t subsignature = 0; - size_t bit_index = 1; - - for (std::vector::const_iterator pmask_block = mask_.begin(); pmask_block != mask_.end(); ++pmask_block) { - // get the mask and signature blocks - size_t feature_block = *feature_block_ptr; - size_t mask_block = *pmask_block; - while (mask_block) { - // Get the lowest set bit in the mask block - size_t lowest_bit = mask_block & (-(ptrdiff_t)mask_block); - // Add it to the current subsignature if necessary - subsignature += (feature_block & lowest_bit) ? bit_index : 0; - // Reset the bit in the mask block - mask_block ^= lowest_bit; - // increment the bit index for the subsignature - bit_index <<= 1; - } - // Check the next feature block - ++feature_block_ptr; - } - return subsignature; -} - -template<> -inline LshStats LshTable::getStats() const -{ - LshStats stats; - stats.bucket_size_mean_ = 0; - if ((buckets_speed_.empty()) && (buckets_space_.empty())) { - stats.n_buckets_ = 0; - stats.bucket_size_median_ = 0; - stats.bucket_size_min_ = 0; - stats.bucket_size_max_ = 0; - return stats; - } - - if (!buckets_speed_.empty()) { - for (BucketsSpeed::const_iterator pbucket = buckets_speed_.begin(); pbucket != buckets_speed_.end(); ++pbucket) { - stats.bucket_sizes_.push_back((lsh::FeatureIndex)pbucket->size()); - stats.bucket_size_mean_ += pbucket->size(); - } - stats.bucket_size_mean_ /= buckets_speed_.size(); - stats.n_buckets_ = buckets_speed_.size(); - } - else { - for (BucketsSpace::const_iterator x = buckets_space_.begin(); x != buckets_space_.end(); ++x) { - stats.bucket_sizes_.push_back((lsh::FeatureIndex)x->second.size()); - stats.bucket_size_mean_ += x->second.size(); - } - stats.bucket_size_mean_ /= buckets_space_.size(); - stats.n_buckets_ = buckets_space_.size(); - } - - std::sort(stats.bucket_sizes_.begin(), stats.bucket_sizes_.end()); - - // BOOST_FOREACH(int size, stats.bucket_sizes_) - // std::cout << size << " "; - // std::cout << std::endl; - stats.bucket_size_median_ = stats.bucket_sizes_[stats.bucket_sizes_.size() / 2]; - stats.bucket_size_min_ = stats.bucket_sizes_.front(); - stats.bucket_size_max_ = stats.bucket_sizes_.back(); - - // TODO compute mean and std - /*float mean, stddev; - stats.bucket_size_mean_ = mean; - stats.bucket_size_std_dev = stddev;*/ - - // Include a histogram of the buckets - unsigned int bin_start = 0; - unsigned int bin_end = 20; - bool is_new_bin = true; - for (std::vector::iterator iterator = stats.bucket_sizes_.begin(), end = stats.bucket_sizes_.end(); iterator - != end; ) - if (*iterator < bin_end) { - if (is_new_bin) { - stats.size_histogram_.push_back(std::vector(3, 0)); - stats.size_histogram_.back()[0] = bin_start; - stats.size_histogram_.back()[1] = bin_end - 1; - is_new_bin = false; - } - ++stats.size_histogram_.back()[2]; - ++iterator; - } - else { - bin_start += 20; - bin_end += 20; - is_new_bin = true; - } - - return stats; -} - -// End the two namespaces -} -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#endif /* OPENCV_FLANN_LSH_TABLE_H_ */ diff --git a/modules/flann/include/opencv2/flann/matrix.h b/modules/flann/include/opencv2/flann/matrix.h deleted file mode 100644 index 51b6c63..0000000 --- a/modules/flann/include/opencv2/flann/matrix.h +++ /dev/null @@ -1,116 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_DATASET_H_ -#define OPENCV_FLANN_DATASET_H_ - -#include - -#include "general.h" - -namespace cvflann -{ - -/** - * Class that implements a simple rectangular matrix stored in a memory buffer and - * provides convenient matrix-like access using the [] operators. - */ -template -class Matrix -{ -public: - typedef T type; - - size_t rows; - size_t cols; - size_t stride; - T* data; - - Matrix() : rows(0), cols(0), stride(0), data(NULL) - { - } - - Matrix(T* data_, size_t rows_, size_t cols_, size_t stride_ = 0) : - rows(rows_), cols(cols_), stride(stride_), data(data_) - { - if (stride==0) stride = cols; - } - - /** - * Convenience function for deallocating the storage data. - */ - FLANN_DEPRECATED void free() - { - fprintf(stderr, "The cvflann::Matrix::free() method is deprecated " - "and it does not do any memory deallocation any more. You are" - "responsible for deallocating the matrix memory (by doing" - "'delete[] matrix.data' for example)"); - } - - /** - * Operator that return a (pointer to a) row of the data. - */ - T* operator[](size_t index) const - { - return data+index*stride; - } -}; - - -class UntypedMatrix -{ -public: - size_t rows; - size_t cols; - void* data; - flann_datatype_t type; - - UntypedMatrix(void* data_, long rows_, long cols_) : - rows(rows_), cols(cols_), data(data_) - { - } - - ~UntypedMatrix() - { - } - - - template - Matrix as() - { - return Matrix((T*)data, rows, cols); - } -}; - - - -} - -#endif //OPENCV_FLANN_DATASET_H_ diff --git a/modules/flann/include/opencv2/flann/miniflann.hpp b/modules/flann/include/opencv2/flann/miniflann.hpp deleted file mode 100644 index 18c9081..0000000 --- a/modules/flann/include/opencv2/flann/miniflann.hpp +++ /dev/null @@ -1,162 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _OPENCV_MINIFLANN_HPP_ -#define _OPENCV_MINIFLANN_HPP_ - -#ifdef __cplusplus - -#include "opencv2/core/core.hpp" -#include "opencv2/flann/defines.h" - -namespace cv -{ - -namespace flann -{ - -struct CV_EXPORTS IndexParams -{ - IndexParams(); - ~IndexParams(); - - std::string getString(const std::string& key, const std::string& defaultVal=std::string()) const; - int getInt(const std::string& key, int defaultVal=-1) const; - double getDouble(const std::string& key, double defaultVal=-1) const; - - void setString(const std::string& key, const std::string& value); - void setInt(const std::string& key, int value); - void setDouble(const std::string& key, double value); - void setFloat(const std::string& key, float value); - void setBool(const std::string& key, bool value); - void setAlgorithm(int value); - - void getAll(std::vector& names, - std::vector& types, - std::vector& strValues, - std::vector& numValues) const; - - void* params; -}; - -struct CV_EXPORTS KDTreeIndexParams : public IndexParams -{ - KDTreeIndexParams(int trees=4); -}; - -struct CV_EXPORTS LinearIndexParams : public IndexParams -{ - LinearIndexParams(); -}; - -struct CV_EXPORTS CompositeIndexParams : public IndexParams -{ - CompositeIndexParams(int trees = 4, int branching = 32, int iterations = 11, - cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 ); -}; - -struct CV_EXPORTS AutotunedIndexParams : public IndexParams -{ - AutotunedIndexParams(float target_precision = 0.8, float build_weight = 0.01, - float memory_weight = 0, float sample_fraction = 0.1); -}; - -struct CV_EXPORTS HierarchicalClusteringIndexParams : public IndexParams -{ - HierarchicalClusteringIndexParams(int branching = 32, - cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, int trees = 4, int leaf_size = 100 ); -}; - -struct CV_EXPORTS KMeansIndexParams : public IndexParams -{ - KMeansIndexParams(int branching = 32, int iterations = 11, - cvflann::flann_centers_init_t centers_init = cvflann::FLANN_CENTERS_RANDOM, float cb_index = 0.2 ); -}; - -struct CV_EXPORTS LshIndexParams : public IndexParams -{ - LshIndexParams(int table_number, int key_size, int multi_probe_level); -}; - -struct CV_EXPORTS SavedIndexParams : public IndexParams -{ - SavedIndexParams(const std::string& filename); -}; - -struct CV_EXPORTS SearchParams : public IndexParams -{ - SearchParams( int checks = 32, float eps = 0, bool sorted = true ); -}; - -class CV_EXPORTS_W Index -{ -public: - CV_WRAP Index(); - CV_WRAP Index(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2); - virtual ~Index(); - - CV_WRAP virtual void build(InputArray features, const IndexParams& params, cvflann::flann_distance_t distType=cvflann::FLANN_DIST_L2); - CV_WRAP virtual void knnSearch(InputArray query, OutputArray indices, - OutputArray dists, int knn, const SearchParams& params=SearchParams()); - - CV_WRAP virtual int radiusSearch(InputArray query, OutputArray indices, - OutputArray dists, double radius, int maxResults, - const SearchParams& params=SearchParams()); - - CV_WRAP virtual void save(const std::string& filename) const; - CV_WRAP virtual bool load(InputArray features, const std::string& filename); - CV_WRAP virtual void release(); - CV_WRAP cvflann::flann_distance_t getDistance() const; - CV_WRAP cvflann::flann_algorithm_t getAlgorithm() const; - -protected: - cvflann::flann_distance_t distType; - cvflann::flann_algorithm_t algo; - int featureType; - void* index; -}; - -} } // namespace cv::flann - -#endif // __cplusplus - -#endif diff --git a/modules/flann/include/opencv2/flann/nn_index.h b/modules/flann/include/opencv2/flann/nn_index.h deleted file mode 100644 index d14e83a..0000000 --- a/modules/flann/include/opencv2/flann/nn_index.h +++ /dev/null @@ -1,179 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_NNINDEX_H -#define OPENCV_FLANN_NNINDEX_H - -#include - -#include "general.h" -#include "matrix.h" -#include "result_set.h" -#include "params.h" - -namespace cvflann -{ - -/** - * Nearest-neighbour index base class - */ -template -class NNIndex -{ - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - -public: - - virtual ~NNIndex() {} - - /** - * \brief Builds the index - */ - virtual void buildIndex() = 0; - - /** - * \brief Perform k-nearest neighbor search - * \param[in] queries The query points for which to find the nearest neighbors - * \param[out] indices The indices of the nearest neighbors found - * \param[out] dists Distances to the nearest neighbors found - * \param[in] knn Number of nearest neighbors to return - * \param[in] params Search parameters - */ - virtual void knnSearch(const Matrix& queries, Matrix& indices, Matrix& dists, int knn, const SearchParams& params) - { - assert(queries.cols == veclen()); - assert(indices.rows >= queries.rows); - assert(dists.rows >= queries.rows); - assert(int(indices.cols) >= knn); - assert(int(dists.cols) >= knn); - -#if 0 - KNNResultSet resultSet(knn); - for (size_t i = 0; i < queries.rows; i++) { - resultSet.init(indices[i], dists[i]); - findNeighbors(resultSet, queries[i], params); - } -#else - KNNUniqueResultSet resultSet(knn); - for (size_t i = 0; i < queries.rows; i++) { - resultSet.clear(); - findNeighbors(resultSet, queries[i], params); - if (get_param(params,"sorted",true)) resultSet.sortAndCopy(indices[i], dists[i], knn); - else resultSet.copy(indices[i], dists[i], knn); - } -#endif - } - - /** - * \brief Perform radius search - * \param[in] query The query point - * \param[out] indices The indinces of the neighbors found within the given radius - * \param[out] dists The distances to the nearest neighbors found - * \param[in] radius The radius used for search - * \param[in] params Search parameters - * \returns Number of neighbors found - */ - virtual int radiusSearch(const Matrix& query, Matrix& indices, Matrix& dists, float radius, const SearchParams& params) - { - if (query.rows != 1) { - fprintf(stderr, "I can only search one feature at a time for range search\n"); - return -1; - } - assert(query.cols == veclen()); - assert(indices.cols == dists.cols); - - int n = 0; - int* indices_ptr = NULL; - DistanceType* dists_ptr = NULL; - if (indices.cols > 0) { - n = (int)indices.cols; - indices_ptr = indices[0]; - dists_ptr = dists[0]; - } - - RadiusUniqueResultSet resultSet((DistanceType)radius); - resultSet.clear(); - findNeighbors(resultSet, query[0], params); - if (n>0) { - if (get_param(params,"sorted",true)) resultSet.sortAndCopy(indices_ptr, dists_ptr, n); - else resultSet.copy(indices_ptr, dists_ptr, n); - } - - return (int)resultSet.size(); - } - - /** - * \brief Saves the index to a stream - * \param stream The stream to save the index to - */ - virtual void saveIndex(FILE* stream) = 0; - - /** - * \brief Loads the index from a stream - * \param stream The stream from which the index is loaded - */ - virtual void loadIndex(FILE* stream) = 0; - - /** - * \returns number of features in this index. - */ - virtual size_t size() const = 0; - - /** - * \returns The dimensionality of the features in this index. - */ - virtual size_t veclen() const = 0; - - /** - * \returns The amount of memory (in bytes) used by the index. - */ - virtual int usedMemory() const = 0; - - /** - * \returns The index type (kdtree, kmeans,...) - */ - virtual flann_algorithm_t getType() const = 0; - - /** - * \returns The index parameters - */ - virtual IndexParams getParameters() const = 0; - - - /** - * \brief Method that searches for nearest-neighbours - */ - virtual void findNeighbors(ResultSet& result, const ElementType* vec, const SearchParams& searchParams) = 0; -}; - -} - -#endif //OPENCV_FLANN_NNINDEX_H diff --git a/modules/flann/include/opencv2/flann/object_factory.h b/modules/flann/include/opencv2/flann/object_factory.h deleted file mode 100644 index 7f971c5..0000000 --- a/modules/flann/include/opencv2/flann/object_factory.h +++ /dev/null @@ -1,91 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_OBJECT_FACTORY_H_ -#define OPENCV_FLANN_OBJECT_FACTORY_H_ - -#include - -namespace cvflann -{ - -class CreatorNotFound -{ -}; - -template -class ObjectFactory -{ - typedef ObjectFactory ThisClass; - typedef std::map ObjectRegistry; - - // singleton class, private constructor - ObjectFactory() {} - -public: - - bool subscribe(UniqueIdType id, ObjectCreator creator) - { - if (object_registry.find(id) != object_registry.end()) return false; - - object_registry[id] = creator; - return true; - } - - bool unregister(UniqueIdType id) - { - return object_registry.erase(id) == 1; - } - - ObjectCreator create(UniqueIdType id) - { - typename ObjectRegistry::const_iterator iter = object_registry.find(id); - - if (iter == object_registry.end()) { - throw CreatorNotFound(); - } - - return iter->second; - } - - static ThisClass& instance() - { - static ThisClass the_factory; - return the_factory; - } -private: - ObjectRegistry object_registry; -}; - -} - -#endif /* OPENCV_FLANN_OBJECT_FACTORY_H_ */ diff --git a/modules/flann/include/opencv2/flann/params.h b/modules/flann/include/opencv2/flann/params.h deleted file mode 100644 index fc2a906..0000000 --- a/modules/flann/include/opencv2/flann/params.h +++ /dev/null @@ -1,96 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2011 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2011 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_PARAMS_H_ -#define OPENCV_FLANN_PARAMS_H_ - -#include "any.h" -#include "general.h" -#include -#include - - -namespace cvflann -{ - -typedef std::map IndexParams; - -struct SearchParams : public IndexParams -{ - SearchParams(int checks = 32, float eps = 0, bool sorted = true ) - { - // how many leafs to visit when searching for neighbours (-1 for unlimited) - (*this)["checks"] = checks; - // search for eps-approximate neighbours (default: 0) - (*this)["eps"] = eps; - // only for radius search, require neighbours sorted by distance (default: true) - (*this)["sorted"] = sorted; - } -}; - - -template -T get_param(const IndexParams& params, std::string name, const T& default_value) -{ - IndexParams::const_iterator it = params.find(name); - if (it != params.end()) { - return it->second.cast(); - } - else { - return default_value; - } -} - -template -T get_param(const IndexParams& params, std::string name) -{ - IndexParams::const_iterator it = params.find(name); - if (it != params.end()) { - return it->second.cast(); - } - else { - throw FLANNException(std::string("Missing parameter '")+name+std::string("' in the parameters given")); - } -} - -inline void print_params(const IndexParams& params) -{ - IndexParams::const_iterator it; - - for(it=params.begin(); it!=params.end(); ++it) { - std::cout << it->first << " : " << it->second << std::endl; - } -} - - - -} - - -#endif /* OPENCV_FLANN_PARAMS_H_ */ diff --git a/modules/flann/include/opencv2/flann/random.h b/modules/flann/include/opencv2/flann/random.h deleted file mode 100644 index a3cf5ec..0000000 --- a/modules/flann/include/opencv2/flann/random.h +++ /dev/null @@ -1,133 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_RANDOM_H -#define OPENCV_FLANN_RANDOM_H - -#include -#include -#include - -#include "general.h" - -namespace cvflann -{ - -/** - * Seeds the random number generator - * @param seed Random seed - */ -inline void seed_random(unsigned int seed) -{ - srand(seed); -} - -/* - * Generates a random double value. - */ -/** - * Generates a random double value. - * @param high Upper limit - * @param low Lower limit - * @return Random double value - */ -inline double rand_double(double high = 1.0, double low = 0) -{ - return low + ((high-low) * (std::rand() / (RAND_MAX + 1.0))); -} - -/** - * Generates a random integer value. - * @param high Upper limit - * @param low Lower limit - * @return Random integer value - */ -inline int rand_int(int high = RAND_MAX, int low = 0) -{ - return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0))); -} - -/** - * Random number generator that returns a distinct number from - * the [0,n) interval each time. - */ -class UniqueRandom -{ - std::vector vals_; - int size_; - int counter_; - -public: - /** - * Constructor. - * @param n Size of the interval from which to generate - * @return - */ - UniqueRandom(int n) - { - init(n); - } - - /** - * Initializes the number generator. - * @param n the size of the interval from which to generate random numbers. - */ - void init(int n) - { - // create and initialize an array of size n - vals_.resize(n); - size_ = n; - for (int i = 0; i < size_; ++i) vals_[i] = i; - - // shuffle the elements in the array - std::random_shuffle(vals_.begin(), vals_.end()); - - counter_ = 0; - } - - /** - * Return a distinct random integer in greater or equal to 0 and less - * than 'n' on each call. It should be called maximum 'n' times. - * Returns: a random integer - */ - int next() - { - if (counter_ == size_) { - return -1; - } - else { - return vals_[counter_++]; - } - } -}; - -} - -#endif //OPENCV_FLANN_RANDOM_H diff --git a/modules/flann/include/opencv2/flann/result_set.h b/modules/flann/include/opencv2/flann/result_set.h deleted file mode 100644 index 3adad46..0000000 --- a/modules/flann/include/opencv2/flann/result_set.h +++ /dev/null @@ -1,542 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_RESULTSET_H -#define OPENCV_FLANN_RESULTSET_H - -#include -#include -#include -#include -#include -#include - -namespace cvflann -{ - -/* This record represents a branch point when finding neighbors in - the tree. It contains a record of the minimum distance to the query - point, as well as the node at which the search resumes. - */ - -template -struct BranchStruct -{ - T node; /* Tree node at which search resumes */ - DistanceType mindist; /* Minimum distance to query for all nodes below. */ - - BranchStruct() {} - BranchStruct(const T& aNode, DistanceType dist) : node(aNode), mindist(dist) {} - - bool operator<(const BranchStruct& rhs) const - { - return mindist -class ResultSet -{ -public: - virtual ~ResultSet() {} - - virtual bool full() const = 0; - - virtual void addPoint(DistanceType dist, int index) = 0; - - virtual DistanceType worstDist() const = 0; - -}; - -/** - * KNNSimpleResultSet does not ensure that the element it holds are unique. - * Is used in those cases where the nearest neighbour algorithm used does not - * attempt to insert the same element multiple times. - */ -template -class KNNSimpleResultSet : public ResultSet -{ - int* indices; - DistanceType* dists; - int capacity; - int count; - DistanceType worst_distance_; - -public: - KNNSimpleResultSet(int capacity_) : capacity(capacity_), count(0) - { - } - - void init(int* indices_, DistanceType* dists_) - { - indices = indices_; - dists = dists_; - count = 0; - worst_distance_ = (std::numeric_limits::max)(); - dists[capacity-1] = worst_distance_; - } - - size_t size() const - { - return count; - } - - bool full() const - { - return count == capacity; - } - - - void addPoint(DistanceType dist, int index) - { - if (dist >= worst_distance_) return; - int i; - for (i=count; i>0; --i) { -#ifdef FLANN_FIRST_MATCH - if ( (dists[i-1]>dist) || ((dist==dists[i-1])&&(indices[i-1]>index)) ) -#else - if (dists[i-1]>dist) -#endif - { - if (i -class KNNResultSet : public ResultSet -{ - int* indices; - DistanceType* dists; - int capacity; - int count; - DistanceType worst_distance_; - -public: - KNNResultSet(int capacity_) : capacity(capacity_), count(0) - { - } - - void init(int* indices_, DistanceType* dists_) - { - indices = indices_; - dists = dists_; - count = 0; - worst_distance_ = (std::numeric_limits::max)(); - dists[capacity-1] = worst_distance_; - } - - size_t size() const - { - return count; - } - - bool full() const - { - return count == capacity; - } - - - void addPoint(DistanceType dist, int index) - { - if (dist >= worst_distance_) return; - int i; - for (i = count; i > 0; --i) { -#ifdef FLANN_FIRST_MATCH - if ( (dists[i-1]<=dist) && ((dist!=dists[i-1])||(indices[i-1]<=index)) ) -#else - if (dists[i-1]<=dist) -#endif - { - // Check for duplicate indices - int j = i - 1; - while ((j >= 0) && (dists[j] == dist)) { - if (indices[j] == index) { - return; - } - --j; - } - break; - } - } - - if (count < capacity) ++count; - for (int j = count-1; j > i; --j) { - dists[j] = dists[j-1]; - indices[j] = indices[j-1]; - } - dists[i] = dist; - indices[i] = index; - worst_distance_ = dists[capacity-1]; - } - - DistanceType worstDist() const - { - return worst_distance_; - } -}; - - -/** - * A result-set class used when performing a radius based search. - */ -template -class RadiusResultSet : public ResultSet -{ - DistanceType radius; - int* indices; - DistanceType* dists; - size_t capacity; - size_t count; - -public: - RadiusResultSet(DistanceType radius_, int* indices_, DistanceType* dists_, int capacity_) : - radius(radius_), indices(indices_), dists(dists_), capacity(capacity_) - { - init(); - } - - ~RadiusResultSet() - { - } - - void init() - { - count = 0; - } - - size_t size() const - { - return count; - } - - bool full() const - { - return true; - } - - void addPoint(DistanceType dist, int index) - { - if (dist0)&&(count < capacity)) { - dists[count] = dist; - indices[count] = index; - } - count++; - } - } - - DistanceType worstDist() const - { - return radius; - } - -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** Class that holds the k NN neighbors - * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays - */ -template -class UniqueResultSet : public ResultSet -{ -public: - struct DistIndex - { - DistIndex(DistanceType dist, unsigned int index) : - dist_(dist), index_(index) - { - } - bool operator<(const DistIndex dist_index) const - { - return (dist_ < dist_index.dist_) || ((dist_ == dist_index.dist_) && index_ < dist_index.index_); - } - DistanceType dist_; - unsigned int index_; - }; - - /** Default cosntructor */ - UniqueResultSet() : - worst_distance_(std::numeric_limits::max()) - { - } - - /** Check the status of the set - * @return true if we have k NN - */ - inline bool full() const - { - return is_full_; - } - - /** Remove all elements in the set - */ - virtual void clear() = 0; - - /** Copy the set to two C arrays - * @param indices pointer to a C array of indices - * @param dist pointer to a C array of distances - * @param n_neighbors the number of neighbors to copy - */ - virtual void copy(int* indices, DistanceType* dist, int n_neighbors = -1) const - { - if (n_neighbors < 0) { - for (typename std::set::const_iterator dist_index = dist_indices_.begin(), dist_index_end = - dist_indices_.end(); dist_index != dist_index_end; ++dist_index, ++indices, ++dist) { - *indices = dist_index->index_; - *dist = dist_index->dist_; - } - } - else { - int i = 0; - for (typename std::set::const_iterator dist_index = dist_indices_.begin(), dist_index_end = - dist_indices_.end(); (dist_index != dist_index_end) && (i < n_neighbors); ++dist_index, ++indices, ++dist, ++i) { - *indices = dist_index->index_; - *dist = dist_index->dist_; - } - } - } - - /** Copy the set to two C arrays but sort it according to the distance first - * @param indices pointer to a C array of indices - * @param dist pointer to a C array of distances - * @param n_neighbors the number of neighbors to copy - */ - virtual void sortAndCopy(int* indices, DistanceType* dist, int n_neighbors = -1) const - { - copy(indices, dist, n_neighbors); - } - - /** The number of neighbors in the set - * @return - */ - size_t size() const - { - return dist_indices_.size(); - } - - /** The distance of the furthest neighbor - * If we don't have enough neighbors, it returns the max possible value - * @return - */ - inline DistanceType worstDist() const - { - return worst_distance_; - } -protected: - /** Flag to say if the set is full */ - bool is_full_; - - /** The worst distance found so far */ - DistanceType worst_distance_; - - /** The best candidates so far */ - std::set dist_indices_; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** Class that holds the k NN neighbors - * Faster than KNNResultSet as it uses a binary heap and does not maintain two arrays - */ -template -class KNNUniqueResultSet : public UniqueResultSet -{ -public: - /** Constructor - * @param capacity the number of neighbors to store at max - */ - KNNUniqueResultSet(unsigned int capacity) : capacity_(capacity) - { - this->is_full_ = false; - this->clear(); - } - - /** Add a possible candidate to the best neighbors - * @param dist distance for that neighbor - * @param index index of that neighbor - */ - inline void addPoint(DistanceType dist, int index) - { - // Don't do anything if we are worse than the worst - if (dist >= worst_distance_) return; - dist_indices_.insert(DistIndex(dist, index)); - - if (is_full_) { - if (dist_indices_.size() > capacity_) { - dist_indices_.erase(*dist_indices_.rbegin()); - worst_distance_ = dist_indices_.rbegin()->dist_; - } - } - else if (dist_indices_.size() == capacity_) { - is_full_ = true; - worst_distance_ = dist_indices_.rbegin()->dist_; - } - } - - /** Remove all elements in the set - */ - void clear() - { - dist_indices_.clear(); - worst_distance_ = std::numeric_limits::max(); - is_full_ = false; - } - -protected: - typedef typename UniqueResultSet::DistIndex DistIndex; - using UniqueResultSet::is_full_; - using UniqueResultSet::worst_distance_; - using UniqueResultSet::dist_indices_; - - /** The number of neighbors to keep */ - unsigned int capacity_; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** Class that holds the radius nearest neighbors - * It is more accurate than RadiusResult as it is not limited in the number of neighbors - */ -template -class RadiusUniqueResultSet : public UniqueResultSet -{ -public: - /** Constructor - * @param capacity the number of neighbors to store at max - */ - RadiusUniqueResultSet(DistanceType radius) : - radius_(radius) - { - is_full_ = true; - } - - /** Add a possible candidate to the best neighbors - * @param dist distance for that neighbor - * @param index index of that neighbor - */ - void addPoint(DistanceType dist, int index) - { - if (dist <= radius_) dist_indices_.insert(DistIndex(dist, index)); - } - - /** Remove all elements in the set - */ - inline void clear() - { - dist_indices_.clear(); - } - - - /** Check the status of the set - * @return alwys false - */ - inline bool full() const - { - return true; - } - - /** The distance of the furthest neighbor - * If we don't have enough neighbors, it returns the max possible value - * @return - */ - inline DistanceType worstDist() const - { - return radius_; - } -private: - typedef typename UniqueResultSet::DistIndex DistIndex; - using UniqueResultSet::dist_indices_; - using UniqueResultSet::is_full_; - - /** The furthest distance a neighbor can be */ - DistanceType radius_; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** Class that holds the k NN neighbors within a radius distance - */ -template -class KNNRadiusUniqueResultSet : public KNNUniqueResultSet -{ -public: - /** Constructor - * @param capacity the number of neighbors to store at max - */ - KNNRadiusUniqueResultSet(unsigned int capacity, DistanceType radius) - { - this->capacity_ = capacity; - this->radius_ = radius; - this->dist_indices_.reserve(capacity_); - this->clear(); - } - - /** Remove all elements in the set - */ - void clear() - { - dist_indices_.clear(); - worst_distance_ = radius_; - is_full_ = false; - } -private: - using KNNUniqueResultSet::dist_indices_; - using KNNUniqueResultSet::is_full_; - using KNNUniqueResultSet::worst_distance_; - - /** The maximum number of neighbors to consider */ - unsigned int capacity_; - - /** The maximum distance of a neighbor */ - DistanceType radius_; -}; -} - -#endif //OPENCV_FLANN_RESULTSET_H diff --git a/modules/flann/include/opencv2/flann/sampling.h b/modules/flann/include/opencv2/flann/sampling.h deleted file mode 100644 index 396f177..0000000 --- a/modules/flann/include/opencv2/flann/sampling.h +++ /dev/null @@ -1,81 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_SAMPLING_H_ -#define OPENCV_FLANN_SAMPLING_H_ - -#include "matrix.h" -#include "random.h" - -namespace cvflann -{ - -template -Matrix random_sample(Matrix& srcMatrix, long size, bool remove = false) -{ - Matrix newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols); - - T* src,* dest; - for (long i=0; i -Matrix random_sample(const Matrix& srcMatrix, size_t size) -{ - UniqueRandom rand((int)srcMatrix.rows); - Matrix newSet(new T[size * srcMatrix.cols], size,srcMatrix.cols); - - T* src,* dest; - for (size_t i=0; i -#include - -#include "general.h" -#include "nn_index.h" - -#ifdef FLANN_SIGNATURE_ -#undef FLANN_SIGNATURE_ -#endif -#define FLANN_SIGNATURE_ "FLANN_INDEX" - -namespace cvflann -{ - -template -struct Datatype {}; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_INT8; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_INT16; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_INT32; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_UINT8; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_UINT16; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_UINT32; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_FLOAT32; } }; -template<> -struct Datatype { static flann_datatype_t type() { return FLANN_FLOAT64; } }; - - -/** - * Structure representing the index header. - */ -struct IndexHeader -{ - char signature[16]; - char version[16]; - flann_datatype_t data_type; - flann_algorithm_t index_type; - size_t rows; - size_t cols; -}; - -/** - * Saves index header to stream - * - * @param stream - Stream to save to - * @param index - The index to save - */ -template -void save_header(FILE* stream, const NNIndex& index) -{ - IndexHeader header; - memset(header.signature, 0, sizeof(header.signature)); - strcpy(header.signature, FLANN_SIGNATURE_); - memset(header.version, 0, sizeof(header.version)); - strcpy(header.version, FLANN_VERSION_); - header.data_type = Datatype::type(); - header.index_type = index.getType(); - header.rows = index.size(); - header.cols = index.veclen(); - - std::fwrite(&header, sizeof(header),1,stream); -} - - -/** - * - * @param stream - Stream to load from - * @return Index header - */ -inline IndexHeader load_header(FILE* stream) -{ - IndexHeader header; - size_t read_size = fread(&header,sizeof(header),1,stream); - - if (read_size!=(size_t)1) { - throw FLANNException("Invalid index file, cannot read"); - } - - if (strcmp(header.signature,FLANN_SIGNATURE_)!=0) { - throw FLANNException("Invalid index file, wrong signature"); - } - - return header; - -} - - -template -void save_value(FILE* stream, const T& value, size_t count = 1) -{ - fwrite(&value, sizeof(value),count, stream); -} - -template -void save_value(FILE* stream, const cvflann::Matrix& value) -{ - fwrite(&value, sizeof(value),1, stream); - fwrite(value.data, sizeof(T),value.rows*value.cols, stream); -} - -template -void save_value(FILE* stream, const std::vector& value) -{ - size_t size = value.size(); - fwrite(&size, sizeof(size_t), 1, stream); - fwrite(&value[0], sizeof(T), size, stream); -} - -template -void load_value(FILE* stream, T& value, size_t count = 1) -{ - size_t read_cnt = fread(&value, sizeof(value), count, stream); - if (read_cnt != count) { - throw FLANNException("Cannot read from file"); - } -} - -template -void load_value(FILE* stream, cvflann::Matrix& value) -{ - size_t read_cnt = fread(&value, sizeof(value), 1, stream); - if (read_cnt != 1) { - throw FLANNException("Cannot read from file"); - } - value.data = new T[value.rows*value.cols]; - read_cnt = fread(value.data, sizeof(T), value.rows*value.cols, stream); - if (read_cnt != (size_t)(value.rows*value.cols)) { - throw FLANNException("Cannot read from file"); - } -} - - -template -void load_value(FILE* stream, std::vector& value) -{ - size_t size; - size_t read_cnt = fread(&size, sizeof(size_t), 1, stream); - if (read_cnt!=1) { - throw FLANNException("Cannot read from file"); - } - value.resize(size); - read_cnt = fread(&value[0], sizeof(T), size, stream); - if (read_cnt != size) { - throw FLANNException("Cannot read from file"); - } -} - -} - -#endif /* OPENCV_FLANN_SAVING_H_ */ diff --git a/modules/flann/include/opencv2/flann/simplex_downhill.h b/modules/flann/include/opencv2/flann/simplex_downhill.h deleted file mode 100644 index 145901a..0000000 --- a/modules/flann/include/opencv2/flann/simplex_downhill.h +++ /dev/null @@ -1,186 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * THE BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 OPENCV_FLANN_SIMPLEX_DOWNHILL_H_ -#define OPENCV_FLANN_SIMPLEX_DOWNHILL_H_ - -namespace cvflann -{ - -/** - Adds val to array vals (and point to array points) and keeping the arrays sorted by vals. - */ -template -void addValue(int pos, float val, float* vals, T* point, T* points, int n) -{ - vals[pos] = val; - for (int i=0; i0 && vals[j] -float optimizeSimplexDownhill(T* points, int n, F func, float* vals = NULL ) -{ - const int MAX_ITERATIONS = 10; - - assert(n>0); - - T* p_o = new T[n]; - T* p_r = new T[n]; - T* p_e = new T[n]; - - int alpha = 1; - - int iterations = 0; - - bool ownVals = false; - if (vals == NULL) { - ownVals = true; - vals = new float[n+1]; - for (int i=0; i MAX_ITERATIONS) break; - - // compute average of simplex points (except the highest point) - for (int j=0; j=vals[0])&&(val_r=vals[n]) { - for (int i=0; i - - -namespace cvflann -{ - -/** - * A start-stop timer class. - * - * Can be used to time portions of code. - */ -class StartStopTimer -{ - clock_t startTime; - -public: - /** - * Value of the timer. - */ - double value; - - - /** - * Constructor. - */ - StartStopTimer() - { - reset(); - } - - /** - * Starts the timer. - */ - void start() - { - startTime = clock(); - } - - /** - * Stops the timer and updates timer value. - */ - void stop() - { - clock_t stopTime = clock(); - value += ( (double)stopTime - startTime) / CLOCKS_PER_SEC; - } - - /** - * Resets the timer value to 0. - */ - void reset() - { - value = 0; - } - -}; - -} - -#endif // FLANN_TIMER_H diff --git a/modules/flann/src/flann.cpp b/modules/flann/src/flann.cpp deleted file mode 100644 index 67fff88..0000000 --- a/modules/flann/src/flann.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/*********************************************************************** - * Software License Agreement (BSD License) - * - * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. - * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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 "precomp.hpp" -#include "opencv2/flann/flann.hpp" - -namespace cvflann -{ - /** Global variable indicating the distance metric to be used. - * \deprecated Provided for backward compatibility - */ - flann_distance_t flann_distance_type_ = FLANN_DIST_L2; - flann_distance_t flann_distance_type() { return flann_distance_type_; } - - /** - * Set distance type to used - * \deprecated - */ - void set_distance_type(flann_distance_t distance_type, int /*order*/) - { - printf("[WARNING] The cvflann::set_distance_type function is deperecated, " - "use cv::flann::GenericIndex instead.\n"); - if (distance_type != FLANN_DIST_L1 && distance_type != FLANN_DIST_L2) { - printf("[ERROR] cvflann::set_distance_type only provides backwards compatibility " - "for the L1 and L2 distances. " - "For other distance types you must use cv::flann::GenericIndex\n"); - } - flann_distance_type_ = distance_type; - } - - void dummyfunc() {} -} diff --git a/modules/flann/src/miniflann.cpp b/modules/flann/src/miniflann.cpp deleted file mode 100644 index 3747102..0000000 --- a/modules/flann/src/miniflann.cpp +++ /dev/null @@ -1,803 +0,0 @@ -#include "precomp.hpp" - -#define MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES 0 - -static cvflann::IndexParams& get_params(const cv::flann::IndexParams& p) -{ - return *(cvflann::IndexParams*)(p.params); -} - -cv::flann::IndexParams::~IndexParams() -{ - delete &get_params(*this); -} - -namespace cv -{ - -namespace flann -{ - -using namespace cvflann; - -IndexParams::IndexParams() -{ - params = new ::cvflann::IndexParams(); -} - -template -T getParam(const IndexParams& _p, const std::string& key, const T& defaultVal=T()) -{ - ::cvflann::IndexParams& p = get_params(_p); - ::cvflann::IndexParams::const_iterator it = p.find(key); - if( it == p.end() ) - return defaultVal; - return it->second.cast(); -} - -template -void setParam(IndexParams& _p, const std::string& key, const T& value) -{ - ::cvflann::IndexParams& p = get_params(_p); - p[key] = value; -} - -std::string IndexParams::getString(const std::string& key, const std::string& defaultVal) const -{ - return getParam(*this, key, defaultVal); -} - -int IndexParams::getInt(const std::string& key, int defaultVal) const -{ - return getParam(*this, key, defaultVal); -} - -double IndexParams::getDouble(const std::string& key, double defaultVal) const -{ - return getParam(*this, key, defaultVal); -} - - -void IndexParams::setString(const std::string& key, const std::string& value) -{ - setParam(*this, key, value); -} - -void IndexParams::setInt(const std::string& key, int value) -{ - setParam(*this, key, value); -} - -void IndexParams::setDouble(const std::string& key, double value) -{ - setParam(*this, key, value); -} - -void IndexParams::setFloat(const std::string& key, float value) -{ - setParam(*this, key, value); -} - -void IndexParams::setBool(const std::string& key, bool value) -{ - setParam(*this, key, value); -} - -void IndexParams::setAlgorithm(int value) -{ - setParam(*this, "algorithm", (cvflann::flann_algorithm_t)value); -} - -void IndexParams::getAll(std::vector& names, - std::vector& types, - std::vector& strValues, - std::vector& numValues) const -{ - names.clear(); - types.clear(); - strValues.clear(); - numValues.clear(); - - ::cvflann::IndexParams& p = get_params(*this); - ::cvflann::IndexParams::const_iterator it = p.begin(), it_end = p.end(); - - for( ; it != it_end; ++it ) - { - names.push_back(it->first); - try - { - std::string val = it->second.cast(); - types.push_back(CV_USRTYPE1); - strValues.push_back(val); - numValues.push_back(-1); - continue; - } - catch (...) {} - - strValues.push_back(it->second.type().name()); - - try - { - double val = it->second.cast(); - types.push_back( CV_64F ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - float val = it->second.cast(); - types.push_back( CV_32F ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - int val = it->second.cast(); - types.push_back( CV_32S ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - short val = it->second.cast(); - types.push_back( CV_16S ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - ushort val = it->second.cast(); - types.push_back( CV_16U ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - char val = it->second.cast(); - types.push_back( CV_8S ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - uchar val = it->second.cast(); - types.push_back( CV_8U ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - bool val = it->second.cast(); - types.push_back( CV_MAKETYPE(CV_USRTYPE1,2) ); - numValues.push_back(val); - continue; - } - catch (...) {} - try - { - cvflann::flann_algorithm_t val = it->second.cast(); - types.push_back( CV_MAKETYPE(CV_USRTYPE1,3) ); - numValues.push_back(val); - continue; - } - catch (...) {} - - - types.push_back(-1); // unknown type - numValues.push_back(-1); - } -} - - -KDTreeIndexParams::KDTreeIndexParams(int trees) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_KDTREE; - p["trees"] = trees; -} - -LinearIndexParams::LinearIndexParams() -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_LINEAR; -} - -CompositeIndexParams::CompositeIndexParams(int trees, int branching, int iterations, - flann_centers_init_t centers_init, float cb_index ) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_KMEANS; - // number of randomized trees to use (for kdtree) - p["trees"] = trees; - // branching factor - p["branching"] = branching; - // max iterations to perform in one kmeans clustering (kmeans tree) - p["iterations"] = iterations; - // algorithm used for picking the initial cluster centers for kmeans tree - p["centers_init"] = centers_init; - // cluster boundary index. Used when searching the kmeans tree - p["cb_index"] = cb_index; -} - -AutotunedIndexParams::AutotunedIndexParams(float target_precision, float build_weight, - float memory_weight, float sample_fraction) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_AUTOTUNED; - // precision desired (used for autotuning, -1 otherwise) - p["target_precision"] = target_precision; - // build tree time weighting factor - p["build_weight"] = build_weight; - // index memory weighting factor - p["memory_weight"] = memory_weight; - // what fraction of the dataset to use for autotuning - p["sample_fraction"] = sample_fraction; -} - - -KMeansIndexParams::KMeansIndexParams(int branching, int iterations, - flann_centers_init_t centers_init, float cb_index ) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_KMEANS; - // branching factor - p["branching"] = branching; - // max iterations to perform in one kmeans clustering (kmeans tree) - p["iterations"] = iterations; - // algorithm used for picking the initial cluster centers for kmeans tree - p["centers_init"] = centers_init; - // cluster boundary index. Used when searching the kmeans tree - p["cb_index"] = cb_index; -} - -HierarchicalClusteringIndexParams::HierarchicalClusteringIndexParams(int branching , - flann_centers_init_t centers_init, - int trees, int leaf_size) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_HIERARCHICAL; - // The branching factor used in the hierarchical clustering - p["branching"] = branching; - // Algorithm used for picking the initial cluster centers - p["centers_init"] = centers_init; - // number of parallel trees to build - p["trees"] = trees; - // maximum leaf size - p["leaf_size"] = leaf_size; -} - -LshIndexParams::LshIndexParams(int table_number, int key_size, int multi_probe_level) -{ - ::cvflann::IndexParams& p = get_params(*this); - p["algorithm"] = FLANN_INDEX_LSH; - // The number of hash tables to use - p["table_number"] = table_number; - // The length of the key in the hash tables - p["key_size"] = key_size; - // Number of levels to use in multi-probe (0 for standard LSH) - p["multi_probe_level"] = multi_probe_level; -} - -SavedIndexParams::SavedIndexParams(const std::string& _filename) -{ - std::string filename = _filename; - ::cvflann::IndexParams& p = get_params(*this); - - p["algorithm"] = FLANN_INDEX_SAVED; - p["filename"] = filename; -} - -SearchParams::SearchParams( int checks, float eps, bool sorted ) -{ - ::cvflann::IndexParams& p = get_params(*this); - - // how many leafs to visit when searching for neighbours (-1 for unlimited) - p["checks"] = checks; - // search for eps-approximate neighbours (default: 0) - p["eps"] = eps; - // only for radius search, require neighbours sorted by distance (default: true) - p["sorted"] = sorted; -} - - -template void -buildIndex_(void*& index, const Mat& data, const IndexParams& params, const Distance& dist = Distance()) -{ - typedef typename Distance::ElementType ElementType; - if(DataType::type != data.type()) - CV_Error_(CV_StsUnsupportedFormat, ("type=%d\n", data.type())); - if(!data.isContinuous()) - CV_Error(CV_StsBadArg, "Only continuous arrays are supported"); - - ::cvflann::Matrix dataset((ElementType*)data.data, data.rows, data.cols); - IndexType* _index = new IndexType(dataset, get_params(params), dist); - _index->buildIndex(); - index = _index; -} - -template void -buildIndex(void*& index, const Mat& data, const IndexParams& params, const Distance& dist = Distance()) -{ - buildIndex_ >(index, data, params, dist); -} - -#if CV_NEON -typedef ::cvflann::Hamming HammingDistance; -#else -typedef ::cvflann::HammingLUT2 HammingDistance; -#endif - -Index::Index() -{ - index = 0; - featureType = CV_32F; - algo = FLANN_INDEX_LINEAR; - distType = FLANN_DIST_L2; -} - -Index::Index(InputArray _data, const IndexParams& params, flann_distance_t _distType) -{ - index = 0; - featureType = CV_32F; - algo = FLANN_INDEX_LINEAR; - distType = FLANN_DIST_L2; - build(_data, params, _distType); -} - -void Index::build(InputArray _data, const IndexParams& params, flann_distance_t _distType) -{ - release(); - algo = getParam(params, "algorithm", FLANN_INDEX_LINEAR); - if( algo == FLANN_INDEX_SAVED ) - { - load(_data, getParam(params, "filename", std::string())); - return; - } - - Mat data = _data.getMat(); - index = 0; - featureType = data.type(); - distType = _distType; - - if ( algo == FLANN_INDEX_LSH) - { - distType = FLANN_DIST_HAMMING; - } - - switch( distType ) - { - case FLANN_DIST_HAMMING: - buildIndex< HammingDistance >(index, data, params); - break; - case FLANN_DIST_L2: - buildIndex< ::cvflann::L2 >(index, data, params); - break; - case FLANN_DIST_L1: - buildIndex< ::cvflann::L1 >(index, data, params); - break; -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - buildIndex< ::cvflann::MaxDistance >(index, data, params); - break; - case FLANN_DIST_HIST_INTERSECT: - buildIndex< ::cvflann::HistIntersectionDistance >(index, data, params); - break; - case FLANN_DIST_HELLINGER: - buildIndex< ::cvflann::HellingerDistance >(index, data, params); - break; - case FLANN_DIST_CHI_SQUARE: - buildIndex< ::cvflann::ChiSquareDistance >(index, data, params); - break; - case FLANN_DIST_KL: - buildIndex< ::cvflann::KL_Divergence >(index, data, params); - break; -#endif - default: - CV_Error(CV_StsBadArg, "Unknown/unsupported distance type"); - } -} - -template void deleteIndex_(void* index) -{ - delete (IndexType*)index; -} - -template void deleteIndex(void* index) -{ - deleteIndex_< ::cvflann::Index >(index); -} - -Index::~Index() -{ - release(); -} - -void Index::release() -{ - if( !index ) - return; - - switch( distType ) - { - case FLANN_DIST_HAMMING: - deleteIndex< HammingDistance >(index); - break; - case FLANN_DIST_L2: - deleteIndex< ::cvflann::L2 >(index); - break; - case FLANN_DIST_L1: - deleteIndex< ::cvflann::L1 >(index); - break; -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - deleteIndex< ::cvflann::MaxDistance >(index); - break; - case FLANN_DIST_HIST_INTERSECT: - deleteIndex< ::cvflann::HistIntersectionDistance >(index); - break; - case FLANN_DIST_HELLINGER: - deleteIndex< ::cvflann::HellingerDistance >(index); - break; - case FLANN_DIST_CHI_SQUARE: - deleteIndex< ::cvflann::ChiSquareDistance >(index); - break; - case FLANN_DIST_KL: - deleteIndex< ::cvflann::KL_Divergence >(index); - break; -#endif - default: - CV_Error(CV_StsBadArg, "Unknown/unsupported distance type"); - } - index = 0; -} - -template -void runKnnSearch_(void* index, const Mat& query, Mat& indices, Mat& dists, - int knn, const SearchParams& params) -{ - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - int type = DataType::type; - int dtype = DataType::type; - CV_Assert(query.type() == type && indices.type() == CV_32S && dists.type() == dtype); - CV_Assert(query.isContinuous() && indices.isContinuous() && dists.isContinuous()); - - ::cvflann::Matrix _query((ElementType*)query.data, query.rows, query.cols); - ::cvflann::Matrix _indices((int*)indices.data, indices.rows, indices.cols); - ::cvflann::Matrix _dists((DistanceType*)dists.data, dists.rows, dists.cols); - - ((IndexType*)index)->knnSearch(_query, _indices, _dists, knn, - (const ::cvflann::SearchParams&)get_params(params)); -} - -template -void runKnnSearch(void* index, const Mat& query, Mat& indices, Mat& dists, - int knn, const SearchParams& params) -{ - runKnnSearch_ >(index, query, indices, dists, knn, params); -} - -template -int runRadiusSearch_(void* index, const Mat& query, Mat& indices, Mat& dists, - double radius, const SearchParams& params) -{ - typedef typename Distance::ElementType ElementType; - typedef typename Distance::ResultType DistanceType; - int type = DataType::type; - int dtype = DataType::type; - CV_Assert(query.type() == type && indices.type() == CV_32S && dists.type() == dtype); - CV_Assert(query.isContinuous() && indices.isContinuous() && dists.isContinuous()); - - ::cvflann::Matrix _query((ElementType*)query.data, query.rows, query.cols); - ::cvflann::Matrix _indices((int*)indices.data, indices.rows, indices.cols); - ::cvflann::Matrix _dists((DistanceType*)dists.data, dists.rows, dists.cols); - - return ((IndexType*)index)->radiusSearch(_query, _indices, _dists, - saturate_cast(radius), - (const ::cvflann::SearchParams&)get_params(params)); -} - -template -int runRadiusSearch(void* index, const Mat& query, Mat& indices, Mat& dists, - double radius, const SearchParams& params) -{ - return runRadiusSearch_ >(index, query, indices, dists, radius, params); -} - - -static void createIndicesDists(OutputArray _indices, OutputArray _dists, - Mat& indices, Mat& dists, int rows, - int minCols, int maxCols, int dtype) -{ - if( _indices.needed() ) - { - indices = _indices.getMat(); - if( !indices.isContinuous() || indices.type() != CV_32S || - indices.rows != rows || indices.cols < minCols || indices.cols > maxCols ) - { - if( !indices.isContinuous() ) - _indices.release(); - _indices.create( rows, minCols, CV_32S ); - indices = _indices.getMat(); - } - } - else - indices.create( rows, minCols, CV_32S ); - - if( _dists.needed() ) - { - dists = _dists.getMat(); - if( !dists.isContinuous() || dists.type() != dtype || - dists.rows != rows || dists.cols < minCols || dists.cols > maxCols ) - { - if( !indices.isContinuous() ) - _dists.release(); - _dists.create( rows, minCols, dtype ); - dists = _dists.getMat(); - } - } - else - dists.create( rows, minCols, dtype ); -} - - -void Index::knnSearch(InputArray _query, OutputArray _indices, - OutputArray _dists, int knn, const SearchParams& params) -{ - Mat query = _query.getMat(), indices, dists; - int dtype = distType == FLANN_DIST_HAMMING ? CV_32S : CV_32F; - - createIndicesDists( _indices, _dists, indices, dists, query.rows, knn, knn, dtype ); - - switch( distType ) - { - case FLANN_DIST_HAMMING: - runKnnSearch(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_L2: - runKnnSearch< ::cvflann::L2 >(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_L1: - runKnnSearch< ::cvflann::L1 >(index, query, indices, dists, knn, params); - break; -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - runKnnSearch< ::cvflann::MaxDistance >(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_HIST_INTERSECT: - runKnnSearch< ::cvflann::HistIntersectionDistance >(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_HELLINGER: - runKnnSearch< ::cvflann::HellingerDistance >(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_CHI_SQUARE: - runKnnSearch< ::cvflann::ChiSquareDistance >(index, query, indices, dists, knn, params); - break; - case FLANN_DIST_KL: - runKnnSearch< ::cvflann::KL_Divergence >(index, query, indices, dists, knn, params); - break; -#endif - default: - CV_Error(CV_StsBadArg, "Unknown/unsupported distance type"); - } -} - -int Index::radiusSearch(InputArray _query, OutputArray _indices, - OutputArray _dists, double radius, int maxResults, - const SearchParams& params) -{ - Mat query = _query.getMat(), indices, dists; - int dtype = distType == FLANN_DIST_HAMMING ? CV_32S : CV_32F; - CV_Assert( maxResults > 0 ); - createIndicesDists( _indices, _dists, indices, dists, query.rows, maxResults, INT_MAX, dtype ); - - if( algo == FLANN_INDEX_LSH ) - CV_Error( CV_StsNotImplemented, "LSH index does not support radiusSearch operation" ); - - switch( distType ) - { - case FLANN_DIST_HAMMING: - return runRadiusSearch< HammingDistance >(index, query, indices, dists, radius, params); - - case FLANN_DIST_L2: - return runRadiusSearch< ::cvflann::L2 >(index, query, indices, dists, radius, params); - case FLANN_DIST_L1: - return runRadiusSearch< ::cvflann::L1 >(index, query, indices, dists, radius, params); -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - return runRadiusSearch< ::cvflann::MaxDistance >(index, query, indices, dists, radius, params); - case FLANN_DIST_HIST_INTERSECT: - return runRadiusSearch< ::cvflann::HistIntersectionDistance >(index, query, indices, dists, radius, params); - case FLANN_DIST_HELLINGER: - return runRadiusSearch< ::cvflann::HellingerDistance >(index, query, indices, dists, radius, params); - case FLANN_DIST_CHI_SQUARE: - return runRadiusSearch< ::cvflann::ChiSquareDistance >(index, query, indices, dists, radius, params); - case FLANN_DIST_KL: - return runRadiusSearch< ::cvflann::KL_Divergence >(index, query, indices, dists, radius, params); -#endif - default: - CV_Error(CV_StsBadArg, "Unknown/unsupported distance type"); - } - return -1; -} - -flann_distance_t Index::getDistance() const -{ - return distType; -} - -flann_algorithm_t Index::getAlgorithm() const -{ - return algo; -} - -template void saveIndex_(const Index* index0, const void* index, FILE* fout) -{ - IndexType* _index = (IndexType*)index; - ::cvflann::save_header(fout, *_index); - // some compilers may store short enumerations as bytes, - // so make sure we always write integers (which are 4-byte values in any modern C compiler) - int idistType = (int)index0->getDistance(); - ::cvflann::save_value(fout, idistType); - _index->saveIndex(fout); -} - -template void saveIndex(const Index* index0, const void* index, FILE* fout) -{ - saveIndex_< ::cvflann::Index >(index0, index, fout); -} - -void Index::save(const std::string& filename) const -{ - FILE* fout = fopen(filename.c_str(), "wb"); - if (fout == NULL) - CV_Error_( CV_StsError, ("Can not open file %s for writing FLANN index\n", filename.c_str()) ); - - switch( distType ) - { - case FLANN_DIST_HAMMING: - saveIndex< HammingDistance >(this, index, fout); - break; - case FLANN_DIST_L2: - saveIndex< ::cvflann::L2 >(this, index, fout); - break; - case FLANN_DIST_L1: - saveIndex< ::cvflann::L1 >(this, index, fout); - break; -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - saveIndex< ::cvflann::MaxDistance >(this, index, fout); - break; - case FLANN_DIST_HIST_INTERSECT: - saveIndex< ::cvflann::HistIntersectionDistance >(this, index, fout); - break; - case FLANN_DIST_HELLINGER: - saveIndex< ::cvflann::HellingerDistance >(this, index, fout); - break; - case FLANN_DIST_CHI_SQUARE: - saveIndex< ::cvflann::ChiSquareDistance >(this, index, fout); - break; - case FLANN_DIST_KL: - saveIndex< ::cvflann::KL_Divergence >(this, index, fout); - break; -#endif - default: - fclose(fout); - fout = 0; - CV_Error(CV_StsBadArg, "Unknown/unsupported distance type"); - } - if( fout ) - fclose(fout); -} - - -template -bool loadIndex_(Index* index0, void*& index, const Mat& data, FILE* fin, const Distance& dist=Distance()) -{ - typedef typename Distance::ElementType ElementType; - CV_Assert(DataType::type == data.type() && data.isContinuous()); - - ::cvflann::Matrix dataset((ElementType*)data.data, data.rows, data.cols); - - ::cvflann::IndexParams params; - params["algorithm"] = index0->getAlgorithm(); - IndexType* _index = new IndexType(dataset, params, dist); - _index->loadIndex(fin); - index = _index; - return true; -} - -template -bool loadIndex(Index* index0, void*& index, const Mat& data, FILE* fin, const Distance& dist=Distance()) -{ - return loadIndex_ >(index0, index, data, fin, dist); -} - -bool Index::load(InputArray _data, const std::string& filename) -{ - Mat data = _data.getMat(); - bool ok = true; - release(); - FILE* fin = fopen(filename.c_str(), "rb"); - if (fin == NULL) - return false; - - ::cvflann::IndexHeader header = ::cvflann::load_header(fin); - algo = header.index_type; - featureType = header.data_type == FLANN_UINT8 ? CV_8U : - header.data_type == FLANN_INT8 ? CV_8S : - header.data_type == FLANN_UINT16 ? CV_16U : - header.data_type == FLANN_INT16 ? CV_16S : - header.data_type == FLANN_INT32 ? CV_32S : - header.data_type == FLANN_FLOAT32 ? CV_32F : - header.data_type == FLANN_FLOAT64 ? CV_64F : -1; - - if( (int)header.rows != data.rows || (int)header.cols != data.cols || - featureType != data.type() ) - { - fprintf(stderr, "Reading FLANN index error: the saved data size (%d, %d) or type (%d) is different from the passed one (%d, %d), %d\n", - (int)header.rows, (int)header.cols, featureType, data.rows, data.cols, data.type()); - fclose(fin); - return false; - } - - int idistType = 0; - ::cvflann::load_value(fin, idistType); - distType = (flann_distance_t)idistType; - - if( !((distType == FLANN_DIST_HAMMING && featureType == CV_8U) || - (distType != FLANN_DIST_HAMMING && featureType == CV_32F)) ) - { - fprintf(stderr, "Reading FLANN index error: unsupported feature type %d for the index type %d\n", featureType, algo); - fclose(fin); - return false; - } - - switch( distType ) - { - case FLANN_DIST_HAMMING: - loadIndex< HammingDistance >(this, index, data, fin); - break; - case FLANN_DIST_L2: - loadIndex< ::cvflann::L2 >(this, index, data, fin); - break; - case FLANN_DIST_L1: - loadIndex< ::cvflann::L1 >(this, index, data, fin); - break; -#if MINIFLANN_SUPPORT_EXOTIC_DISTANCE_TYPES - case FLANN_DIST_MAX: - loadIndex< ::cvflann::MaxDistance >(this, index, data, fin); - break; - case FLANN_DIST_HIST_INTERSECT: - loadIndex< ::cvflann::HistIntersectionDistance >(index, data, fin); - break; - case FLANN_DIST_HELLINGER: - loadIndex< ::cvflann::HellingerDistance >(this, index, data, fin); - break; - case FLANN_DIST_CHI_SQUARE: - loadIndex< ::cvflann::ChiSquareDistance >(this, index, data, fin); - break; - case FLANN_DIST_KL: - loadIndex< ::cvflann::KL_Divergence >(this, index, data, fin); - break; -#endif - default: - fprintf(stderr, "Reading FLANN index error: unsupported distance type %d\n", distType); - ok = false; - } - - if( fin ) - fclose(fin); - return ok; -} - -} - -} diff --git a/modules/flann/src/precomp.hpp b/modules/flann/src/precomp.hpp deleted file mode 100644 index 988c01f..0000000 --- a/modules/flann/src/precomp.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _OPENCV_FLANN_PRECOMP_HPP_ -#define _OPENCV_FLANN_PRECOMP_HPP_ - -#include -#include -#include - -# include "cvconfig.h" -#include "opencv2/core/core.hpp" -#include "opencv2/core/internal.hpp" - -#include "opencv2/flann/miniflann.hpp" -#include "opencv2/flann/dist.h" -#include "opencv2/flann/index_testing.h" -#include "opencv2/flann/params.h" -#include "opencv2/flann/saving.h" -#include "opencv2/flann/general.h" -#include "opencv2/flann/dummy.h" - -// index types -#include "opencv2/flann/all_indices.h" -#include "opencv2/flann/flann_base.hpp" - -#endif diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt deleted file mode 100644 index 7d2547b..0000000 --- a/modules/highgui/CMakeLists.txt +++ /dev/null @@ -1,322 +0,0 @@ -set(the_description "High-level GUI and Media I/O") -ocv_add_module(highgui opencv_imgproc OPTIONAL opencv_androidcamera) - -# ---------------------------------------------------------------------------- -# CMake file for highgui. See root CMakeLists.txt -# Some parts taken from version of Hartmut Seichter, HIT Lab NZ. -# Jose Luis Blanco, 2008 -# ---------------------------------------------------------------------------- - -ocv_clear_vars(GRFMT_LIBS) - -if(HAVE_PNG OR HAVE_TIFF OR HAVE_OPENEXR) - ocv_include_directories(${ZLIB_INCLUDE_DIR}) - list(APPEND GRFMT_LIBS ${ZLIB_LIBRARIES}) -endif() - -if(HAVE_JPEG) - ocv_include_directories(${JPEG_INCLUDE_DIR}) - list(APPEND GRFMT_LIBS ${JPEG_LIBRARIES}) -endif() - -if(HAVE_PNG) - add_definitions(${PNG_DEFINITIONS}) - ocv_include_directories(${PNG_INCLUDE_DIR}) - list(APPEND GRFMT_LIBS ${PNG_LIBRARIES}) -endif() - -if(HAVE_TIFF) - ocv_include_directories(${TIFF_INCLUDE_DIR}) - list(APPEND GRFMT_LIBS ${TIFF_LIBRARIES}) -endif() - -if(HAVE_JASPER) - ocv_include_directories(${JASPER_INCLUDE_DIR}) - list(APPEND GRFMT_LIBS ${JASPER_LIBRARIES}) -endif() - -if(HAVE_OPENEXR) - include_directories(SYSTEM ${OPENEXR_INCLUDE_PATHS}) - list(APPEND GRFMT_LIBS ${OPENEXR_LIBRARIES}) -endif() - -file(GLOB grfmt_hdrs src/grfmt*.hpp) -file(GLOB grfmt_srcs src/grfmt*.cpp) -list(APPEND grfmt_hdrs src/bitstrm.hpp) -list(APPEND grfmt_srcs src/bitstrm.cpp) - -source_group("Src\\grfmts" FILES ${grfmt_hdrs} ${grfmt_srcs}) - -set(highgui_hdrs - src/precomp.hpp - src/utils.hpp - src/cap_ffmpeg_impl.hpp - ) - -set(highgui_srcs - src/cap.cpp - src/cap_images.cpp - src/cap_ffmpeg.cpp - src/loadsave.cpp - src/utils.cpp - src/window.cpp - ) - -file(GLOB highgui_ext_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h") - -if(HAVE_QT5) - set(CMAKE_AUTOMOC ON) - set(CMAKE_INCLUDE_CURRENT_DIR ON) - - QT5_ADD_RESOURCES(_RCC_OUTFILES src/window_QT.qrc) - list(APPEND highgui_srcs src/window_QT.cpp src/window_QT.h ${_RCC_OUTFILES}) - - foreach(dt5_dep Core Gui Widgets Test Concurrent) - add_definitions(${Qt5${dt5_dep}_DEFINITIONS}) - include_directories(${Qt5${dt5_dep}_INCLUDE_DIRS}) - list(APPEND HIGHGUI_LIBRARIES ${Qt5${dt5_dep}_LIBRARIES}) - endforeach() - - if(HAVE_QT_OPENGL) - add_definitions(${Qt5OpenGL_DEFINITIONS}) - include_directories(${Qt5OpenGL_INCLUDE_DIRS}) - list(APPEND HIGHGUI_LIBRARIES ${Qt5OpenGL_LIBRARIES}) - endif() - -elseif(HAVE_QT) - if (HAVE_QT_OPENGL) - set(QT_USE_QTOPENGL TRUE) - endif() - include(${QT_USE_FILE}) - - QT4_ADD_RESOURCES(_RCC_OUTFILES src/window_QT.qrc) - QT4_WRAP_CPP(_MOC_OUTFILES src/window_QT.h) - - list(APPEND HIGHGUI_LIBRARIES ${QT_LIBRARIES}) - list(APPEND highgui_srcs src/window_QT.cpp ${_MOC_OUTFILES} ${_RCC_OUTFILES}) - ocv_check_flag_support(CXX -Wno-missing-declarations _have_flag) - if(${_have_flag}) - set_source_files_properties(${_RCC_OUTFILES} PROPERTIES COMPILE_FLAGS -Wno-missing-declarations) - endif() -elseif(HAVE_WIN32UI) - list(APPEND highgui_srcs src/window_w32.cpp) -elseif(HAVE_GTK) - list(APPEND highgui_srcs src/window_gtk.cpp) -elseif(HAVE_CARBON) - list(APPEND highgui_srcs src/window_carbon.cpp) - list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime") -elseif(HAVE_COCOA) - list(APPEND highgui_srcs src/window_cocoa.mm) - list(APPEND HIGHGUI_LIBRARIES "-framework Cocoa") -endif() - -if(WIN32 AND NOT ARM) - list(APPEND highgui_srcs src/cap_cmu.cpp) -endif() - -if (WIN32 AND HAVE_DSHOW) - list(APPEND highgui_srcs src/cap_dshow.cpp) -endif() - -if (WIN32 AND HAVE_MSMF) - list(APPEND highgui_srcs src/cap_msmf.cpp) -endif() - -if (WIN32 AND HAVE_VFW) - list(APPEND highgui_srcs src/cap_vfw.cpp) -endif() - -if(HAVE_XINE) - list(APPEND highgui_srcs src/cap_xine.cpp) -endif(HAVE_XINE) - -if(HAVE_DC1394_2) - list(APPEND highgui_srcs src/cap_dc1394_v2.cpp) -endif(HAVE_DC1394_2) - -if(HAVE_DC1394) - list(APPEND highgui_srcs src/cap_dc1394.cpp) -endif(HAVE_DC1394) - -if(HAVE_GSTREAMER) - list(APPEND highgui_srcs src/cap_gstreamer.cpp) -endif(HAVE_GSTREAMER) - -if(HAVE_UNICAP) - list(APPEND highgui_srcs src/cap_unicap.cpp) -endif(HAVE_UNICAP) - -if(HAVE_LIBV4L) - list(APPEND highgui_srcs src/cap_libv4l.cpp) -elseif(HAVE_CAMV4L OR HAVE_CAMV4L2 OR HAVE_VIDEOIO) - list(APPEND highgui_srcs src/cap_v4l.cpp) -endif() - -if(HAVE_OPENNI) - list(APPEND highgui_srcs src/cap_openni.cpp) - ocv_include_directories(${OPENNI_INCLUDE_DIR}) - list(APPEND HIGHGUI_LIBRARIES ${OPENNI_LIBRARY}) -endif(HAVE_OPENNI) - -if(HAVE_opencv_androidcamera) - list(APPEND highgui_srcs src/cap_android.cpp) - add_definitions(-DHAVE_ANDROID_NATIVE_CAMERA)#TODO: remove this line -endif(HAVE_opencv_androidcamera) - -if(HAVE_XIMEA) - list(APPEND highgui_srcs src/cap_ximea.cpp) - ocv_include_directories(${XIMEA_PATH}) - if(XIMEA_LIBRARY_DIR) - link_directories("${XIMEA_LIBRARY_DIR}") - endif() - if(X86_64) - list(APPEND HIGHGUI_LIBRARIES m3apiX64) - else() - list(APPEND HIGHGUI_LIBRARIES m3api) - endif() -endif(HAVE_XIMEA) - -if(HAVE_FFMPEG) - if(UNIX AND BZIP2_LIBRARIES) - list(APPEND HIGHGUI_LIBRARIES ${BZIP2_LIBRARIES}) - endif() - if(APPLE) - list(APPEND HIGHGUI_LIBRARIES "-framework VideoDecodeAcceleration" bz2) - endif() -endif(HAVE_FFMPEG) - -if(HAVE_PVAPI) - add_definitions(-DHAVE_PVAPI) - add_definitions(${PVAPI_DEFINITIONS}) - ocv_include_directories(${PVAPI_INCLUDE_PATH}) - set(highgui_srcs src/cap_pvapi.cpp ${highgui_srcs}) - list(APPEND HIGHGUI_LIBRARIES ${PVAPI_LIBRARY}) -endif() - -if(HAVE_GIGE_API) - add_definitions(-DHAVE_GIGE_API) - ocv_include_directories(${GIGEAPI_INCLUDE_PATH}) - set(highgui_srcs src/cap_giganetix.cpp ${highgui_srcs}) - list(APPEND HIGHGUI_LIBRARIES ${GIGEAPI_LIBRARIES}) - list(APPEND highgui_srcs src/cap_giganetix.cpp) -endif(HAVE_GIGE_API) - -if(HAVE_IMAGEIO AND IOS) - list(APPEND HIGHGUI_LIBRARIES "-framework ImageIO") -endif() - -if(HAVE_AVFOUNDATION) - list(APPEND highgui_srcs src/cap_avfoundation.mm) - list(APPEND HIGHGUI_LIBRARIES "-framework AVFoundation" "-framework QuartzCore") -endif() - -if(HAVE_QUICKTIME) - list(APPEND highgui_srcs src/cap_qt.cpp) - list(APPEND HIGHGUI_LIBRARIES "-framework Carbon" "-framework QuickTime" "-framework CoreFoundation" "-framework QuartzCore") -elseif(HAVE_QTKIT) - list(APPEND highgui_srcs src/cap_qtkit.mm) - list(APPEND HIGHGUI_LIBRARIES "-framework QTKit" "-framework QuartzCore" "-framework AppKit") -endif() - -if(HAVE_INTELPERC) - list(APPEND highgui_srcs src/cap_intelperc.cpp) - ocv_include_directories(${INTELPERC_INCLUDE_DIR}) - list(APPEND HIGHGUI_LIBRARIES ${INTELPERC_LIBRARIES}) -endif(HAVE_INTELPERC) - -if(IOS) - add_definitions(-DHAVE_IOS=1) - list(APPEND highgui_srcs src/ios_conversions.mm src/cap_ios_abstract_camera.mm src/cap_ios_photo_camera.mm src/cap_ios_video_camera.mm) - list(APPEND HIGHGUI_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework AssetsLibrary") -endif() - -if(WIN32) - link_directories("${OpenCV_SOURCE_DIR}/3rdparty/lib") # for ffmpeg wrapper only - include_directories(AFTER SYSTEM "${OpenCV_SOURCE_DIR}/3rdparty/include") # for directshow in VS2005 and multi-monitor support on MinGW -endif() - -if(UNIX) - #these variables are set by CHECK_MODULE macro - foreach(P ${HIGHGUI_INCLUDE_DIRS}) - ocv_include_directories(${P}) - endforeach() - - foreach(P ${HIGHGUI_LIBRARY_DIRS}) - link_directories(${P}) - endforeach() -endif() - -source_group("Src" FILES ${highgui_srcs} ${highgui_hdrs}) -source_group("Include" FILES ${highgui_ext_hdrs}) -ocv_set_module_sources(HEADERS ${highgui_ext_hdrs} SOURCES ${highgui_srcs} ${highgui_hdrs} ${grfmt_srcs} ${grfmt_hdrs}) -ocv_module_include_directories() - -ocv_create_module(${GRFMT_LIBS} ${HIGHGUI_LIBRARIES}) - -if(APPLE) - ocv_check_flag_support(OBJCXX "-fobjc-exceptions" HAVE_OBJC_EXCEPTIONS) - if(HAVE_OBJC_EXCEPTIONS) - foreach(source ${OPENCV_MODULE_${the_module}_SOURCES}) - if("${source}" MATCHES "\\.mm$") - get_source_file_property(flags "${source}" COMPILE_FLAGS) - if(flags) - set(flags "${_flags} -fobjc-exceptions") - else() - set(flags "-fobjc-exceptions") - endif() - - set_source_files_properties("${source}" PROPERTIES COMPILE_FLAGS "${flags}") - endif() - endforeach() - endif() -endif() - -if(BUILD_SHARED_LIBS) - add_definitions(-DHIGHGUI_EXPORTS) -endif() - -if(MSVC) - set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /NODEFAULTLIB:libcmt.lib /DEBUG") -endif() - -#stop automatic dependencies propagation for this module -set_target_properties(${the_module} PROPERTIES LINK_INTERFACE_LIBRARIES "") - -ocv_add_precompiled_headers(${the_module}) -ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations) - -if(WIN32 AND WITH_FFMPEG) - #copy ffmpeg dll to the output folder - if(MSVC64 OR MINGW64) - set(FFMPEG_SUFFIX _64) - endif() - - set(ffmpeg_bare_name "opencv_ffmpeg${FFMPEG_SUFFIX}.dll") - set(ffmpeg_bare_name_ver "opencv_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll") - set(ffmpeg_path "${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/${ffmpeg_bare_name}") - - #if(MSVC AND CMAKE_VERSION VERSION_GREATER "2.8.2") - # add_custom_command(TARGET ${the_module} POST_BUILD - # COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/$/${ffmpeg_bare_name_ver}" - # COMMENT "Copying ${ffmpeg_path} to the output directory") - #else - if(MSVC_IDE) - add_custom_command(TARGET ${the_module} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Release/${ffmpeg_bare_name_ver}" - COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Debug/${ffmpeg_bare_name_ver}" - COMMENT "Copying ${ffmpeg_path} to the output directory") - elseif(MSVC AND (CMAKE_GENERATOR MATCHES "Visual")) - add_custom_command(TARGET ${the_module} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${ffmpeg_bare_name_ver}" - COMMENT "Copying ${ffmpeg_path} to the output directory") - else() - add_custom_command(TARGET ${the_module} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${ffmpeg_bare_name_ver}" - COMMENT "Copying ${ffmpeg_path} to the output directory") - endif() - - install(FILES "${ffmpeg_path}" DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs RENAME "${ffmpeg_bare_name_ver}") -endif() - -ocv_add_accuracy_tests() -ocv_add_perf_tests() diff --git a/modules/highgui/include/opencv2/highgui/cap_ios.h b/modules/highgui/include/opencv2/highgui/cap_ios.h deleted file mode 100644 index db3928f..0000000 --- a/modules/highgui/include/opencv2/highgui/cap_ios.h +++ /dev/null @@ -1,169 +0,0 @@ -/* For iOS video I/O - * by Eduard Feicho on 29/07/12 - * Copyright 2012. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import -#import -#import -#import -#include "opencv2/core/core.hpp" - -/////////////////////////////////////// CvAbstractCamera ///////////////////////////////////// - -@class CvAbstractCamera; - -@interface CvAbstractCamera : NSObject -{ - AVCaptureSession* captureSession; - AVCaptureConnection* videoCaptureConnection; - AVCaptureVideoPreviewLayer *captureVideoPreviewLayer; - - UIDeviceOrientation currentDeviceOrientation; - - BOOL cameraAvailable; - BOOL captureSessionLoaded; - BOOL running; - BOOL useAVCaptureVideoPreviewLayer; - - AVCaptureDevicePosition defaultAVCaptureDevicePosition; - AVCaptureVideoOrientation defaultAVCaptureVideoOrientation; - NSString *const defaultAVCaptureSessionPreset; - - int defaultFPS; - - UIView* parentView; - - int imageWidth; - int imageHeight; -} - -@property (nonatomic, retain) AVCaptureSession* captureSession; -@property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection; - -@property (nonatomic, readonly) BOOL running; -@property (nonatomic, readonly) BOOL captureSessionLoaded; - -@property (nonatomic, assign) int defaultFPS; -@property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition; -@property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation; -@property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer; -@property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset; - -@property (nonatomic, assign) int imageWidth; -@property (nonatomic, assign) int imageHeight; - -@property (nonatomic, retain) UIView* parentView; - -- (void)start; -- (void)stop; -- (void)switchCameras; - -- (id)initWithParentView:(UIView*)parent; - -- (void)createCaptureOutput; -- (void)createVideoPreviewLayer; -- (void)updateOrientation; - -- (void)lockFocus; -- (void)unlockFocus; -- (void)lockExposure; -- (void)unlockExposure; -- (void)lockBalance; -- (void)unlockBalance; - -@end - -///////////////////////////////// CvVideoCamera /////////////////////////////////////////// - -@class CvVideoCamera; - -@protocol CvVideoCameraDelegate - -#ifdef __cplusplus -// delegate method for processing image frames -- (void)processImage:(cv::Mat&)image; -#endif - -@end - -@interface CvVideoCamera : CvAbstractCamera -{ - AVCaptureVideoDataOutput *videoDataOutput; - - dispatch_queue_t videoDataOutputQueue; - CALayer *customPreviewLayer; - - BOOL grayscaleMode; - - BOOL recordVideo; - BOOL rotateVideo; - AVAssetWriterInput* recordAssetWriterInput; - AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor; - AVAssetWriter* recordAssetWriter; - - CMTime lastSampleTime; - -} - -@property (nonatomic, assign) id delegate; -@property (nonatomic, assign) BOOL grayscaleMode; - -@property (nonatomic, assign) BOOL recordVideo; -@property (nonatomic, assign) BOOL rotateVideo; -@property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput; -@property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor; -@property (nonatomic, retain) AVAssetWriter* recordAssetWriter; - -- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; -- (void)layoutPreviewLayer; -- (void)saveVideo; -- (NSURL *)videoFileURL; - - -@end - -///////////////////////////////// CvPhotoCamera /////////////////////////////////////////// - -@class CvPhotoCamera; - -@protocol CvPhotoCameraDelegate - -- (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image; -- (void)photoCameraCancel:(CvPhotoCamera*)photoCamera; - -@end - -@interface CvPhotoCamera : CvAbstractCamera -{ - AVCaptureStillImageOutput *stillImageOutput; -} - -@property (nonatomic, assign) id delegate; - -- (void)takePicture; - -@end diff --git a/modules/highgui/include/opencv2/highgui/highgui.hpp b/modules/highgui/include/opencv2/highgui/highgui.hpp deleted file mode 100644 index f6f2293..0000000 --- a/modules/highgui/include/opencv2/highgui/highgui.hpp +++ /dev/null @@ -1,255 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_HIGHGUI_HPP__ -#define __OPENCV_HIGHGUI_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/highgui/highgui_c.h" - -#ifdef __cplusplus - -struct CvCapture; -struct CvVideoWriter; - -namespace cv -{ - -enum { - // Flags for namedWindow - WINDOW_NORMAL = CV_WINDOW_NORMAL, // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size - WINDOW_AUTOSIZE = CV_WINDOW_AUTOSIZE, // the user cannot resize the window, the size is constrainted by the image displayed - WINDOW_OPENGL = CV_WINDOW_OPENGL, // window with opengl support - - // Flags for set / getWindowProperty - WND_PROP_FULLSCREEN = CV_WND_PROP_FULLSCREEN, // fullscreen property - WND_PROP_AUTOSIZE = CV_WND_PROP_AUTOSIZE, // autosize property - WND_PROP_ASPECT_RATIO = CV_WND_PROP_ASPECTRATIO, // window's aspect ration - WND_PROP_OPENGL = CV_WND_PROP_OPENGL // opengl support -}; - -CV_EXPORTS_W void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE); -CV_EXPORTS_W void destroyWindow(const string& winname); -CV_EXPORTS_W void destroyAllWindows(); - -CV_EXPORTS_W int startWindowThread(); - -CV_EXPORTS_W int waitKey(int delay = 0); - -CV_EXPORTS_W void imshow(const string& winname, InputArray mat); - -CV_EXPORTS_W void resizeWindow(const string& winname, int width, int height); -CV_EXPORTS_W void moveWindow(const string& winname, int x, int y); - -CV_EXPORTS_W void setWindowProperty(const string& winname, int prop_id, double prop_value);//YV -CV_EXPORTS_W double getWindowProperty(const string& winname, int prop_id);//YV - -enum -{ - EVENT_MOUSEMOVE =0, - EVENT_LBUTTONDOWN =1, - EVENT_RBUTTONDOWN =2, - EVENT_MBUTTONDOWN =3, - EVENT_LBUTTONUP =4, - EVENT_RBUTTONUP =5, - EVENT_MBUTTONUP =6, - EVENT_LBUTTONDBLCLK =7, - EVENT_RBUTTONDBLCLK =8, - EVENT_MBUTTONDBLCLK =9 -}; - -enum -{ - EVENT_FLAG_LBUTTON =1, - EVENT_FLAG_RBUTTON =2, - EVENT_FLAG_MBUTTON =4, - EVENT_FLAG_CTRLKEY =8, - EVENT_FLAG_SHIFTKEY =16, - EVENT_FLAG_ALTKEY =32 -}; - -typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata); - -//! assigns callback for mouse events -CV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0); - - -typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata); - -CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, - int* value, int count, - TrackbarCallback onChange = 0, - void* userdata = 0); - -CV_EXPORTS_W int getTrackbarPos(const string& trackbarname, const string& winname); -CV_EXPORTS_W void setTrackbarPos(const string& trackbarname, const string& winname, int pos); - -// OpenGL support - -typedef void (*OpenGlDrawCallback)(void* userdata); -CV_EXPORTS void setOpenGlDrawCallback(const string& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0); - -CV_EXPORTS void setOpenGlContext(const string& winname); - -CV_EXPORTS void updateWindow(const string& winname); - -// < Deperecated -CV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, const GlArrays& arr); -CV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, InputArray points, InputArray colors = noArray()); -// > - -//Only for Qt - -CV_EXPORTS CvFont fontQt(const string& nameFont, int pointSize=-1, - Scalar color=Scalar::all(0), int weight=CV_FONT_NORMAL, - int style=CV_STYLE_NORMAL, int spacing=0); -CV_EXPORTS void addText( const Mat& img, const string& text, Point org, CvFont font); - -CV_EXPORTS void displayOverlay(const string& winname, const string& text, int delayms CV_DEFAULT(0)); -CV_EXPORTS void displayStatusBar(const string& winname, const string& text, int delayms CV_DEFAULT(0)); - -CV_EXPORTS void saveWindowParameters(const string& windowName); -CV_EXPORTS void loadWindowParameters(const string& windowName); -CV_EXPORTS int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]); -CV_EXPORTS void stopLoop(); - -typedef void (CV_CDECL *ButtonCallback)(int state, void* userdata); -CV_EXPORTS int createButton( const string& bar_name, ButtonCallback on_change, - void* userdata=NULL, int type=CV_PUSH_BUTTON, - bool initial_button_state=0); - -//------------------------- - -enum -{ - // 8bit, color or not - IMREAD_UNCHANGED =-1, - // 8bit, gray - IMREAD_GRAYSCALE =0, - // ?, color - IMREAD_COLOR =1, - // any depth, ? - IMREAD_ANYDEPTH =2, - // ?, any color - IMREAD_ANYCOLOR =4 -}; - -enum -{ - IMWRITE_JPEG_QUALITY =1, - IMWRITE_PNG_COMPRESSION =16, - IMWRITE_PNG_STRATEGY =17, - IMWRITE_PNG_BILEVEL =18, - IMWRITE_PNG_STRATEGY_DEFAULT =0, - IMWRITE_PNG_STRATEGY_FILTERED =1, - IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2, - IMWRITE_PNG_STRATEGY_RLE =3, - IMWRITE_PNG_STRATEGY_FIXED =4, - IMWRITE_PXM_BINARY =32 -}; - -CV_EXPORTS_W Mat imread( const string& filename, int flags=1 ); -CV_EXPORTS_W bool imwrite( const string& filename, InputArray img, - const vector& params=vector()); -CV_EXPORTS_W Mat imdecode( InputArray buf, int flags ); -CV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst ); -CV_EXPORTS_W bool imencode( const string& ext, InputArray img, - CV_OUT vector& buf, - const vector& params=vector()); - -#ifndef CV_NO_VIDEO_CAPTURE_CPP_API - -template<> void CV_EXPORTS Ptr::delete_obj(); -template<> void CV_EXPORTS Ptr::delete_obj(); - -class CV_EXPORTS_W VideoCapture -{ -public: - CV_WRAP VideoCapture(); - CV_WRAP VideoCapture(const string& filename); - CV_WRAP VideoCapture(int device); - - virtual ~VideoCapture(); - CV_WRAP virtual bool open(const string& filename); - CV_WRAP virtual bool open(int device); - CV_WRAP virtual bool isOpened() const; - CV_WRAP virtual void release(); - - CV_WRAP virtual bool grab(); - CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0); - virtual VideoCapture& operator >> (CV_OUT Mat& image); - CV_WRAP virtual bool read(CV_OUT Mat& image); - - CV_WRAP virtual bool set(int propId, double value); - CV_WRAP virtual double get(int propId); - -protected: - Ptr cap; -}; - - -class CV_EXPORTS_W VideoWriter -{ -public: - CV_WRAP VideoWriter(); - CV_WRAP VideoWriter(const string& filename, int fourcc, double fps, - Size frameSize, bool isColor=true); - - virtual ~VideoWriter(); - CV_WRAP virtual bool open(const string& filename, int fourcc, double fps, - Size frameSize, bool isColor=true); - CV_WRAP virtual bool isOpened() const; - CV_WRAP virtual void release(); - virtual VideoWriter& operator << (const Mat& image); - CV_WRAP virtual void write(const Mat& image); - -protected: - Ptr writer; -}; - -#endif - -} - -#endif - -#endif diff --git a/modules/highgui/include/opencv2/highgui/highgui_c.h b/modules/highgui/include/opencv2/highgui/highgui_c.h deleted file mode 100644 index 1f86abb..0000000 --- a/modules/highgui/include/opencv2/highgui/highgui_c.h +++ /dev/null @@ -1,650 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_HIGHGUI_H__ -#define __OPENCV_HIGHGUI_H__ - -#include "opencv2/core/core_c.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/****************************************************************************************\ -* Basic GUI functions * -\****************************************************************************************/ -//YV -//-----------New for Qt -/* For font */ -enum { CV_FONT_LIGHT = 25,//QFont::Light, - CV_FONT_NORMAL = 50,//QFont::Normal, - CV_FONT_DEMIBOLD = 63,//QFont::DemiBold, - CV_FONT_BOLD = 75,//QFont::Bold, - CV_FONT_BLACK = 87 //QFont::Black -}; - -enum { CV_STYLE_NORMAL = 0,//QFont::StyleNormal, - CV_STYLE_ITALIC = 1,//QFont::StyleItalic, - CV_STYLE_OBLIQUE = 2 //QFont::StyleOblique -}; -/* ---------*/ - -//for color cvScalar(blue_component, green_component, red\_component[, alpha_component]) -//and alpha= 0 <-> 0xFF (not transparent <-> transparent) -CVAPI(CvFont) cvFontQt(const char* nameFont, int pointSize CV_DEFAULT(-1), CvScalar color CV_DEFAULT(cvScalarAll(0)), int weight CV_DEFAULT(CV_FONT_NORMAL), int style CV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0)); - -CVAPI(void) cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont *arg2); - -CVAPI(void) cvDisplayOverlay(const char* name, const char* text, int delayms CV_DEFAULT(0)); -CVAPI(void) cvDisplayStatusBar(const char* name, const char* text, int delayms CV_DEFAULT(0)); - -CVAPI(void) cvSaveWindowParameters(const char* name); -CVAPI(void) cvLoadWindowParameters(const char* name); -CVAPI(int) cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]); -CVAPI(void) cvStopLoop( void ); - -typedef void (CV_CDECL *CvButtonCallback)(int state, void* userdata); -enum {CV_PUSH_BUTTON = 0, CV_CHECKBOX = 1, CV_RADIOBOX = 2}; -CVAPI(int) cvCreateButton( const char* button_name CV_DEFAULT(NULL),CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL) , int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0)); -//---------------------- - - -/* this function is used to set some external parameters in case of X Window */ -CVAPI(int) cvInitSystem( int argc, char** argv ); - -CVAPI(int) cvStartWindowThread( void ); - -// --------- YV --------- -enum -{ - //These 3 flags are used by cvSet/GetWindowProperty - CV_WND_PROP_FULLSCREEN = 0, //to change/get window's fullscreen property - CV_WND_PROP_AUTOSIZE = 1, //to change/get window's autosize property - CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property - CV_WND_PROP_OPENGL = 3, //to change/get window's opengl support - - //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty - CV_WINDOW_NORMAL = 0x00000000, //the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size - CV_WINDOW_AUTOSIZE = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed - CV_WINDOW_OPENGL = 0x00001000, //window with opengl support - - //Those flags are only for Qt - CV_GUI_EXPANDED = 0x00000000, //status bar and tool bar - CV_GUI_NORMAL = 0x00000010, //old fashious way - - //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty - CV_WINDOW_FULLSCREEN = 1,//change the window to fullscreen - CV_WINDOW_FREERATIO = 0x00000100,//the image expends as much as it can (no ratio constraint) - CV_WINDOW_KEEPRATIO = 0x00000000//the ration image is respected. -}; - -/* create window */ -CVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) ); - -/* Set and Get Property of the window */ -CVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value); -CVAPI(double) cvGetWindowProperty(const char* name, int prop_id); - -/* display image within window (highgui windows remember their content) */ -CVAPI(void) cvShowImage( const char* name, const CvArr* image ); - -/* resize/move window */ -CVAPI(void) cvResizeWindow( const char* name, int width, int height ); -CVAPI(void) cvMoveWindow( const char* name, int x, int y ); - - -/* destroy window and all the trackers associated with it */ -CVAPI(void) cvDestroyWindow( const char* name ); - -CVAPI(void) cvDestroyAllWindows(void); - -/* get native window handle (HWND in case of Win32 and Widget in case of X Window) */ -CVAPI(void*) cvGetWindowHandle( const char* name ); - -/* get name of highgui window given its native handle */ -CVAPI(const char*) cvGetWindowName( void* window_handle ); - - -typedef void (CV_CDECL *CvTrackbarCallback)(int pos); - -/* create trackbar and display it on top of given window, set callback */ -CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name, - int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL)); - -typedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata); - -CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name, - int* value, int count, CvTrackbarCallback2 on_change, - void* userdata CV_DEFAULT(0)); - -/* retrieve or set trackbar position */ -CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name ); -CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos ); - -enum -{ - CV_EVENT_MOUSEMOVE =0, - CV_EVENT_LBUTTONDOWN =1, - CV_EVENT_RBUTTONDOWN =2, - CV_EVENT_MBUTTONDOWN =3, - CV_EVENT_LBUTTONUP =4, - CV_EVENT_RBUTTONUP =5, - CV_EVENT_MBUTTONUP =6, - CV_EVENT_LBUTTONDBLCLK =7, - CV_EVENT_RBUTTONDBLCLK =8, - CV_EVENT_MBUTTONDBLCLK =9 -}; - -enum -{ - CV_EVENT_FLAG_LBUTTON =1, - CV_EVENT_FLAG_RBUTTON =2, - CV_EVENT_FLAG_MBUTTON =4, - CV_EVENT_FLAG_CTRLKEY =8, - CV_EVENT_FLAG_SHIFTKEY =16, - CV_EVENT_FLAG_ALTKEY =32 -}; - -typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param); - -/* assign callback for mouse events */ -CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, - void* param CV_DEFAULT(NULL)); - -enum -{ -/* 8bit, color or not */ - CV_LOAD_IMAGE_UNCHANGED =-1, -/* 8bit, gray */ - CV_LOAD_IMAGE_GRAYSCALE =0, -/* ?, color */ - CV_LOAD_IMAGE_COLOR =1, -/* any depth, ? */ - CV_LOAD_IMAGE_ANYDEPTH =2, -/* ?, any color */ - CV_LOAD_IMAGE_ANYCOLOR =4 -}; - -/* load image from file - iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED - overrides the other flags - using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED - unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit -*/ -CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); -CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); - -enum -{ - CV_IMWRITE_JPEG_QUALITY =1, - CV_IMWRITE_PNG_COMPRESSION =16, - CV_IMWRITE_PNG_STRATEGY =17, - CV_IMWRITE_PNG_BILEVEL =18, - CV_IMWRITE_PNG_STRATEGY_DEFAULT =0, - CV_IMWRITE_PNG_STRATEGY_FILTERED =1, - CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2, - CV_IMWRITE_PNG_STRATEGY_RLE =3, - CV_IMWRITE_PNG_STRATEGY_FIXED =4, - CV_IMWRITE_PXM_BINARY =32 -}; - -/* save image to file */ -CVAPI(int) cvSaveImage( const char* filename, const CvArr* image, - const int* params CV_DEFAULT(0) ); - -/* decode image stored in the buffer */ -CVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); -CVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); - -/* encode image and store the result as a byte vector (single-row 8uC1 matrix) */ -CVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image, - const int* params CV_DEFAULT(0) ); - -enum -{ - CV_CVTIMG_FLIP =1, - CV_CVTIMG_SWAP_RB =2 -}; - -/* utility function: convert one image to another with optional vertical flip */ -CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0)); - -/* wait for key event infinitely (delay<=0) or for "delay" milliseconds */ -CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0)); - -// OpenGL support - -typedef void (CV_CDECL *CvOpenGlDrawCallback)(void* userdata); -CVAPI(void) cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata CV_DEFAULT(NULL)); - -CVAPI(void) cvSetOpenGlContext(const char* window_name); -CVAPI(void) cvUpdateWindow(const char* window_name); - - -/****************************************************************************************\ -* Working with Video Files and Cameras * -\****************************************************************************************/ - -/* "black box" capture structure */ -typedef struct CvCapture CvCapture; - -/* start capturing frames from video file */ -CVAPI(CvCapture*) cvCreateFileCapture( const char* filename ); - -enum -{ - CV_CAP_ANY =0, // autodetect - - CV_CAP_MIL =100, // MIL proprietary drivers - - CV_CAP_VFW =200, // platform native - CV_CAP_V4L =200, - CV_CAP_V4L2 =200, - - CV_CAP_FIREWARE =300, // IEEE 1394 drivers - CV_CAP_FIREWIRE =300, - CV_CAP_IEEE1394 =300, - CV_CAP_DC1394 =300, - CV_CAP_CMU1394 =300, - - CV_CAP_STEREO =400, // TYZX proprietary drivers - CV_CAP_TYZX =400, - CV_TYZX_LEFT =400, - CV_TYZX_RIGHT =401, - CV_TYZX_COLOR =402, - CV_TYZX_Z =403, - - CV_CAP_QT =500, // QuickTime - - CV_CAP_UNICAP =600, // Unicap drivers - - CV_CAP_DSHOW =700, // DirectShow (via videoInput) - CV_CAP_MSMF =1400, // Microsoft Media Foundation (via videoInput) - - CV_CAP_PVAPI =800, // PvAPI, Prosilica GigE SDK - - CV_CAP_OPENNI =900, // OpenNI (for Kinect) - CV_CAP_OPENNI_ASUS =910, // OpenNI (for Asus Xtion) - - CV_CAP_ANDROID =1000, // Android - CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera - CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera - - CV_CAP_XIAPI =1100, // XIMEA Camera API - - CV_CAP_AVFOUNDATION = 1200, // AVFoundation framework for iOS (OS X Lion will have the same API) - - CV_CAP_GIGANETIX = 1300, // Smartek Giganetix GigEVisionSDK - - CV_CAP_INTELPERC = 1500 // Intel Perceptual Computing SDK -}; - -/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */ -CVAPI(CvCapture*) cvCreateCameraCapture( int index ); - -/* grab a frame, return 1 on success, 0 on fail. - this function is thought to be fast */ -CVAPI(int) cvGrabFrame( CvCapture* capture ); - -/* get the frame grabbed with cvGrabFrame(..) - This function may apply some frame processing like - frame decompression, flipping etc. - !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */ -CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) ); - -/* Just a combination of cvGrabFrame and cvRetrieveFrame - !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */ -CVAPI(IplImage*) cvQueryFrame( CvCapture* capture ); - -/* stop capturing/reading and free resources */ -CVAPI(void) cvReleaseCapture( CvCapture** capture ); - -enum -{ - // modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode) - // every feature can have only one mode turned on at a time - CV_CAP_PROP_DC1394_OFF = -4, //turn the feature off (not controlled manually nor automatically) - CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user - CV_CAP_PROP_DC1394_MODE_AUTO = -2, - CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1, - CV_CAP_PROP_POS_MSEC =0, - CV_CAP_PROP_POS_FRAMES =1, - CV_CAP_PROP_POS_AVI_RATIO =2, - CV_CAP_PROP_FRAME_WIDTH =3, - CV_CAP_PROP_FRAME_HEIGHT =4, - CV_CAP_PROP_FPS =5, - CV_CAP_PROP_FOURCC =6, - CV_CAP_PROP_FRAME_COUNT =7, - CV_CAP_PROP_FORMAT =8, - CV_CAP_PROP_MODE =9, - CV_CAP_PROP_BRIGHTNESS =10, - CV_CAP_PROP_CONTRAST =11, - CV_CAP_PROP_SATURATION =12, - CV_CAP_PROP_HUE =13, - CV_CAP_PROP_GAIN =14, - CV_CAP_PROP_EXPOSURE =15, - CV_CAP_PROP_CONVERT_RGB =16, - CV_CAP_PROP_WHITE_BALANCE_BLUE_U =17, - CV_CAP_PROP_RECTIFICATION =18, - CV_CAP_PROP_MONOCROME =19, - CV_CAP_PROP_SHARPNESS =20, - CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera, - // user can adjust refernce level - // using this feature - CV_CAP_PROP_GAMMA =22, - CV_CAP_PROP_TEMPERATURE =23, - CV_CAP_PROP_TRIGGER =24, - CV_CAP_PROP_TRIGGER_DELAY =25, - CV_CAP_PROP_WHITE_BALANCE_RED_V =26, - CV_CAP_PROP_ZOOM =27, - CV_CAP_PROP_FOCUS =28, - CV_CAP_PROP_GUID =29, - CV_CAP_PROP_ISO_SPEED =30, - CV_CAP_PROP_MAX_DC1394 =31, - CV_CAP_PROP_BACKLIGHT =32, - CV_CAP_PROP_PAN =33, - CV_CAP_PROP_TILT =34, - CV_CAP_PROP_ROLL =35, - CV_CAP_PROP_IRIS =36, - CV_CAP_PROP_SETTINGS =37, - - CV_CAP_PROP_AUTOGRAB =1024, // property for highgui class CvCapture_Android only - CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed - CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed - - // OpenNI map generators - CV_CAP_OPENNI_DEPTH_GENERATOR = 1 << 31, - CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 30, - CV_CAP_OPENNI_GENERATORS_MASK = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_OPENNI_IMAGE_GENERATOR, - - // Properties of cameras available through OpenNI interfaces - CV_CAP_PROP_OPENNI_OUTPUT_MODE = 100, - CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm - CV_CAP_PROP_OPENNI_BASELINE = 102, // in mm - CV_CAP_PROP_OPENNI_FOCAL_LENGTH = 103, // in pixels - CV_CAP_PROP_OPENNI_REGISTRATION = 104, // flag - CV_CAP_PROP_OPENNI_REGISTRATION_ON = CV_CAP_PROP_OPENNI_REGISTRATION, // flag that synchronizes the remapping depth map to image map - // by changing depth generator's view point (if the flag is "on") or - // sets this view point to its normal one (if the flag is "off"). - CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105, - CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE = 106, - CV_CAP_PROP_OPENNI_CIRCLE_BUFFER = 107, - CV_CAP_PROP_OPENNI_MAX_TIME_DURATION = 108, - - CV_CAP_PROP_OPENNI_GENERATOR_PRESENT = 109, - - CV_CAP_OPENNI_IMAGE_GENERATOR_PRESENT = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_GENERATOR_PRESENT, - CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE, - CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE, - CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH, - CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION, - CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION, - - // Properties of cameras available through GStreamer interface - CV_CAP_GSTREAMER_QUEUE_LENGTH = 200, // default is 1 - CV_CAP_PROP_PVAPI_MULTICASTIP = 300, // ip for anable multicast master mode. 0 for disable multicast - - // Properties of cameras available through XIMEA SDK interface - CV_CAP_PROP_XI_DOWNSAMPLING = 400, // Change image resolution by binning or skipping. - CV_CAP_PROP_XI_DATA_FORMAT = 401, // Output data format. - CV_CAP_PROP_XI_OFFSET_X = 402, // Horizontal offset from the origin to the area of interest (in pixels). - CV_CAP_PROP_XI_OFFSET_Y = 403, // Vertical offset from the origin to the area of interest (in pixels). - CV_CAP_PROP_XI_TRG_SOURCE = 404, // Defines source of trigger. - CV_CAP_PROP_XI_TRG_SOFTWARE = 405, // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE. - CV_CAP_PROP_XI_GPI_SELECTOR = 406, // Selects general purpose input - CV_CAP_PROP_XI_GPI_MODE = 407, // Set general purpose input mode - CV_CAP_PROP_XI_GPI_LEVEL = 408, // Get general purpose level - CV_CAP_PROP_XI_GPO_SELECTOR = 409, // Selects general purpose output - CV_CAP_PROP_XI_GPO_MODE = 410, // Set general purpose output mode - CV_CAP_PROP_XI_LED_SELECTOR = 411, // Selects camera signalling LED - CV_CAP_PROP_XI_LED_MODE = 412, // Define camera signalling LED functionality - CV_CAP_PROP_XI_MANUAL_WB = 413, // Calculates White Balance(must be called during acquisition) - CV_CAP_PROP_XI_AUTO_WB = 414, // Automatic white balance - CV_CAP_PROP_XI_AEAG = 415, // Automatic exposure/gain - CV_CAP_PROP_XI_EXP_PRIORITY = 416, // Exposure priority (0.5 - exposure 50%, gain 50%). - CV_CAP_PROP_XI_AE_MAX_LIMIT = 417, // Maximum limit of exposure in AEAG procedure - CV_CAP_PROP_XI_AG_MAX_LIMIT = 418, // Maximum limit of gain in AEAG procedure - CV_CAP_PROP_XI_AEAG_LEVEL = 419, // Average intensity of output signal AEAG should achieve(in %) - CV_CAP_PROP_XI_TIMEOUT = 420, // Image capture timeout in milliseconds - - // Properties for Android cameras - CV_CAP_PROP_ANDROID_FLASH_MODE = 8001, - CV_CAP_PROP_ANDROID_FOCUS_MODE = 8002, - CV_CAP_PROP_ANDROID_WHITE_BALANCE = 8003, - CV_CAP_PROP_ANDROID_ANTIBANDING = 8004, - CV_CAP_PROP_ANDROID_FOCAL_LENGTH = 8005, - CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006, - CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007, - CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008, - CV_CAP_PROP_ANDROID_EXPOSE_LOCK = 8009, - CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK = 8010, - - // Properties of cameras available through AVFOUNDATION interface - CV_CAP_PROP_IOS_DEVICE_FOCUS = 9001, - CV_CAP_PROP_IOS_DEVICE_EXPOSURE = 9002, - CV_CAP_PROP_IOS_DEVICE_FLASH = 9003, - CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004, - CV_CAP_PROP_IOS_DEVICE_TORCH = 9005, - - // Properties of cameras available through Smartek Giganetix Ethernet Vision interface - /* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */ - CV_CAP_PROP_GIGA_FRAME_OFFSET_X = 10001, - CV_CAP_PROP_GIGA_FRAME_OFFSET_Y = 10002, - CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX = 10003, - CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004, - CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005, - CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006, - - CV_CAP_PROP_INTELPERC_PROFILE_COUNT = 11001, - CV_CAP_PROP_INTELPERC_PROFILE_IDX = 11002, - CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE = 11003, - CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE = 11004, - CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD = 11005, - CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ = 11006, - CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT = 11007, - - // Intel PerC streams - CV_CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29, - CV_CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28, - CV_CAP_INTELPERC_GENERATORS_MASK = CV_CAP_INTELPERC_DEPTH_GENERATOR + CV_CAP_INTELPERC_IMAGE_GENERATOR -}; - -enum -{ - // Data given from depth generator. - CV_CAP_OPENNI_DEPTH_MAP = 0, // Depth values in mm (CV_16UC1) - CV_CAP_OPENNI_POINT_CLOUD_MAP = 1, // XYZ in meters (CV_32FC3) - CV_CAP_OPENNI_DISPARITY_MAP = 2, // Disparity in pixels (CV_8UC1) - CV_CAP_OPENNI_DISPARITY_MAP_32F = 3, // Disparity in pixels (CV_32FC1) - CV_CAP_OPENNI_VALID_DEPTH_MASK = 4, // CV_8UC1 - - // Data given from RGB image generator. - CV_CAP_OPENNI_BGR_IMAGE = 5, - CV_CAP_OPENNI_GRAY_IMAGE = 6 -}; - -// Supported output modes of OpenNI image generator -enum -{ - CV_CAP_OPENNI_VGA_30HZ = 0, - CV_CAP_OPENNI_SXGA_15HZ = 1, - CV_CAP_OPENNI_SXGA_30HZ = 2, - CV_CAP_OPENNI_QVGA_30HZ = 3, - CV_CAP_OPENNI_QVGA_60HZ = 4 -}; - -//supported by Android camera output formats -enum -{ - CV_CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR - CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR, - CV_CAP_ANDROID_GREY_FRAME = 1, //Y - CV_CAP_ANDROID_COLOR_FRAME_RGB = 2, - CV_CAP_ANDROID_COLOR_FRAME_BGRA = 3, - CV_CAP_ANDROID_COLOR_FRAME_RGBA = 4 -}; - -// supported Android camera flash modes -enum -{ - CV_CAP_ANDROID_FLASH_MODE_AUTO = 0, - CV_CAP_ANDROID_FLASH_MODE_OFF, - CV_CAP_ANDROID_FLASH_MODE_ON, - CV_CAP_ANDROID_FLASH_MODE_RED_EYE, - CV_CAP_ANDROID_FLASH_MODE_TORCH -}; - -// supported Android camera focus modes -enum -{ - CV_CAP_ANDROID_FOCUS_MODE_AUTO = 0, - CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_PICTURE, - CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO, - CV_CAP_ANDROID_FOCUS_MODE_EDOF, - CV_CAP_ANDROID_FOCUS_MODE_FIXED, - CV_CAP_ANDROID_FOCUS_MODE_INFINITY, - CV_CAP_ANDROID_FOCUS_MODE_MACRO -}; - -// supported Android camera white balance modes -enum -{ - CV_CAP_ANDROID_WHITE_BALANCE_AUTO = 0, - CV_CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_DAYLIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_FLUORESCENT, - CV_CAP_ANDROID_WHITE_BALANCE_INCANDESCENT, - CV_CAP_ANDROID_WHITE_BALANCE_SHADE, - CV_CAP_ANDROID_WHITE_BALANCE_TWILIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT -}; - -// supported Android camera antibanding modes -enum -{ - CV_CAP_ANDROID_ANTIBANDING_50HZ = 0, - CV_CAP_ANDROID_ANTIBANDING_60HZ, - CV_CAP_ANDROID_ANTIBANDING_AUTO, - CV_CAP_ANDROID_ANTIBANDING_OFF -}; - -enum -{ - CV_CAP_INTELPERC_DEPTH_MAP = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth. - CV_CAP_INTELPERC_UVDEPTH_MAP = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates. - CV_CAP_INTELPERC_IR_MAP = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam. - CV_CAP_INTELPERC_IMAGE = 3 -}; - -/* retrieve or set capture properties */ -CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id ); -CVAPI(int) cvSetCaptureProperty( CvCapture* capture, int property_id, double value ); - -// Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY -CVAPI(int) cvGetCaptureDomain( CvCapture* capture); - -/* "black box" video file writer structure */ -typedef struct CvVideoWriter CvVideoWriter; - -#define CV_FOURCC_MACRO(c1, c2, c3, c4) (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + (((c4) & 255) << 24)) - -CV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4) -{ - return CV_FOURCC_MACRO(c1, c2, c3, c4); -} - -#define CV_FOURCC_PROMPT -1 /* Open Codec Selection Dialog (Windows only) */ -#define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */ - -/* initialize video file writer */ -CVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color CV_DEFAULT(1)); - -//CVAPI(CvVideoWriter*) cvCreateImageSequenceWriter( const char* filename, -// int is_color CV_DEFAULT(1)); - -/* write frame to video file */ -CVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image ); - -/* close video file writer */ -CVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer ); - -/****************************************************************************************\ -* Obsolete functions/synonyms * -\****************************************************************************************/ - -#define cvCaptureFromFile cvCreateFileCapture -#define cvCaptureFromCAM cvCreateCameraCapture -#define cvCaptureFromAVI cvCaptureFromFile -#define cvCreateAVIWriter cvCreateVideoWriter -#define cvWriteToAVI cvWriteFrame -#define cvAddSearchPath(path) -#define cvvInitSystem cvInitSystem -#define cvvNamedWindow cvNamedWindow -#define cvvShowImage cvShowImage -#define cvvResizeWindow cvResizeWindow -#define cvvDestroyWindow cvDestroyWindow -#define cvvCreateTrackbar cvCreateTrackbar -#define cvvLoadImage(name) cvLoadImage((name),1) -#define cvvSaveImage cvSaveImage -#define cvvAddSearchPath cvAddSearchPath -#define cvvWaitKey(name) cvWaitKey(0) -#define cvvWaitKeyEx(name,delay) cvWaitKey(delay) -#define cvvConvertImage cvConvertImage -#define HG_AUTOSIZE CV_WINDOW_AUTOSIZE -#define set_preprocess_func cvSetPreprocessFuncWin32 -#define set_postprocess_func cvSetPostprocessFuncWin32 - -#if defined WIN32 || defined _WIN32 - -CVAPI(void) cvSetPreprocessFuncWin32_(const void* callback); -CVAPI(void) cvSetPostprocessFuncWin32_(const void* callback); -#define cvSetPreprocessFuncWin32(callback) cvSetPreprocessFuncWin32_((const void*)(callback)) -#define cvSetPostprocessFuncWin32(callback) cvSetPostprocessFuncWin32_((const void*)(callback)) - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/highgui/include/opencv2/highgui/ios.h b/modules/highgui/include/opencv2/highgui/ios.h deleted file mode 100644 index a7f0395..0000000 --- a/modules/highgui/include/opencv2/highgui/ios.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "opencv2/core/core.hpp" -#import "opencv2/highgui/cap_ios.h" - -UIImage* MatToUIImage(const cv::Mat& image); -void UIImageToMat(const UIImage* image, - cv::Mat& m, bool alphaExist = false); diff --git a/modules/highgui/src/bitstrm.cpp b/modules/highgui/src/bitstrm.cpp deleted file mode 100644 index dd8bec8..0000000 --- a/modules/highgui/src/bitstrm.cpp +++ /dev/null @@ -1,582 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "bitstrm.hpp" - -namespace cv -{ - -const int BS_DEF_BLOCK_SIZE = 1<<15; - -bool bsIsBigEndian( void ) -{ - return (((const int*)"\0\x1\x2\x3\x4\x5\x6\x7")[0] & 255) != 0; -} - -///////////////////////// RBaseStream //////////////////////////// - -bool RBaseStream::isOpened() -{ - return m_is_opened; -} - -void RBaseStream::allocate() -{ - if( !m_allocated ) - { - m_start = new uchar[m_block_size]; - m_end = m_start + m_block_size; - m_current = m_end; - m_allocated = true; - } -} - - -RBaseStream::RBaseStream() -{ - m_start = m_end = m_current = 0; - m_file = 0; - m_block_size = BS_DEF_BLOCK_SIZE; - m_is_opened = false; - m_allocated = false; -} - - -RBaseStream::~RBaseStream() -{ - close(); // Close files - release(); // free buffers -} - - -void RBaseStream::readBlock() -{ - setPos( getPos() ); // normalize position - - if( m_file == 0 ) - { - if( m_block_pos == 0 && m_current < m_end ) - return; - throw RBS_THROW_EOS; - } - - fseek( m_file, m_block_pos, SEEK_SET ); - size_t readed = fread( m_start, 1, m_block_size, m_file ); - m_end = m_start + readed; - m_current = m_start; - - if( readed == 0 || m_current >= m_end ) - throw RBS_THROW_EOS; -} - - -bool RBaseStream::open( const string& filename ) -{ - close(); - allocate(); - - m_file = fopen( filename.c_str(), "rb" ); - if( m_file ) - { - m_is_opened = true; - setPos(0); - readBlock(); - } - return m_file != 0; -} - -bool RBaseStream::open( const Mat& buf ) -{ - close(); - if( buf.empty() ) - return false; - CV_Assert(buf.isContinuous()); - m_start = buf.data; - m_end = m_start + buf.cols*buf.rows*buf.elemSize(); - m_allocated = false; - m_is_opened = true; - setPos(0); - - return true; -} - -void RBaseStream::close() -{ - if( m_file ) - { - fclose( m_file ); - m_file = 0; - } - m_is_opened = false; - if( !m_allocated ) - m_start = m_end = m_current = 0; -} - - -void RBaseStream::release() -{ - if( m_allocated ) - delete[] m_start; - m_start = m_end = m_current = 0; - m_allocated = false; -} - - -void RBaseStream::setPos( int pos ) -{ - assert( isOpened() && pos >= 0 ); - - if( !m_file ) - { - m_current = m_start + pos; - m_block_pos = 0; - return; - } - - int offset = pos % m_block_size; - m_block_pos = pos - offset; - m_current = m_start + offset; -} - - -int RBaseStream::getPos() -{ - assert( isOpened() ); - return m_block_pos + (int)(m_current - m_start); -} - -void RBaseStream::skip( int bytes ) -{ - assert( bytes >= 0 ); - m_current += bytes; -} - -///////////////////////// RLByteStream //////////////////////////// - -RLByteStream::~RLByteStream() -{ -} - -int RLByteStream::getByte() -{ - uchar *current = m_current; - int val; - - if( current >= m_end ) - { - readBlock(); - current = m_current; - } - - val = *((uchar*)current); - m_current = current + 1; - return val; -} - - -int RLByteStream::getBytes( void* buffer, int count ) -{ - uchar* data = (uchar*)buffer; - int readed = 0; - assert( count >= 0 ); - - while( count > 0 ) - { - int l; - - for(;;) - { - l = (int)(m_end - m_current); - if( l > count ) l = count; - if( l > 0 ) break; - readBlock(); - } - memcpy( data, m_current, l ); - m_current += l; - data += l; - count -= l; - readed += l; - } - return readed; -} - - -//////////// RLByteStream & RMByteStream s //////////////// - -RMByteStream::~RMByteStream() -{ -} - - -int RLByteStream::getWord() -{ - uchar *current = m_current; - int val; - - if( current+1 < m_end ) - { - val = current[0] + (current[1] << 8); - m_current = current + 2; - } - else - { - val = getByte(); - val|= getByte() << 8; - } - return val; -} - - -int RLByteStream::getDWord() -{ - uchar *current = m_current; - int val; - - if( current+3 < m_end ) - { - val = current[0] + (current[1] << 8) + - (current[2] << 16) + (current[3] << 24); - m_current = current + 4; - } - else - { - val = getByte(); - val |= getByte() << 8; - val |= getByte() << 16; - val |= getByte() << 24; - } - return val; -} - - -int RMByteStream::getWord() -{ - uchar *current = m_current; - int val; - - if( current+1 < m_end ) - { - val = (current[0] << 8) + current[1]; - m_current = current + 2; - } - else - { - val = getByte() << 8; - val|= getByte(); - } - return val; -} - - -int RMByteStream::getDWord() -{ - uchar *current = m_current; - int val; - - if( current+3 < m_end ) - { - val = (current[0] << 24) + (current[1] << 16) + - (current[2] << 8) + current[3]; - m_current = current + 4; - } - else - { - val = getByte() << 24; - val |= getByte() << 16; - val |= getByte() << 8; - val |= getByte(); - } - return val; -} - -/////////////////////////// WBaseStream ///////////////////////////////// - -// WBaseStream - base class for output streams -WBaseStream::WBaseStream() -{ - m_start = m_end = m_current = 0; - m_file = 0; - m_block_size = BS_DEF_BLOCK_SIZE; - m_is_opened = false; - m_buf = 0; -} - - -WBaseStream::~WBaseStream() -{ - close(); - release(); -} - - -bool WBaseStream::isOpened() -{ - return m_is_opened; -} - - -void WBaseStream::allocate() -{ - if( !m_start ) - m_start = new uchar[m_block_size]; - - m_end = m_start + m_block_size; - m_current = m_start; -} - - -void WBaseStream::writeBlock() -{ - int size = (int)(m_current - m_start); - - assert( isOpened() ); - if( size == 0 ) - return; - - if( m_buf ) - { - size_t sz = m_buf->size(); - m_buf->resize( sz + size ); - memcpy( &(*m_buf)[sz], m_start, size ); - } - else - { - fwrite( m_start, 1, size, m_file ); - } - m_current = m_start; - m_block_pos += size; -} - - -bool WBaseStream::open( const string& filename ) -{ - close(); - allocate(); - - m_file = fopen( filename.c_str(), "wb" ); - if( m_file ) - { - m_is_opened = true; - m_block_pos = 0; - m_current = m_start; - } - return m_file != 0; -} - -bool WBaseStream::open( vector& buf ) -{ - close(); - allocate(); - - m_buf = &buf; - m_is_opened = true; - m_block_pos = 0; - m_current = m_start; - - return true; -} - -void WBaseStream::close() -{ - if( m_is_opened ) - writeBlock(); - if( m_file ) - { - fclose( m_file ); - m_file = 0; - } - m_buf = 0; - m_is_opened = false; -} - - -void WBaseStream::release() -{ - if( m_start ) - delete[] m_start; - m_start = m_end = m_current = 0; -} - - -int WBaseStream::getPos() -{ - assert( isOpened() ); - return m_block_pos + (int)(m_current - m_start); -} - - -///////////////////////////// WLByteStream /////////////////////////////////// - -WLByteStream::~WLByteStream() -{ -} - -void WLByteStream::putByte( int val ) -{ - *m_current++ = (uchar)val; - if( m_current >= m_end ) - writeBlock(); -} - - -void WLByteStream::putBytes( const void* buffer, int count ) -{ - uchar* data = (uchar*)buffer; - - assert( data && m_current && count >= 0 ); - - while( count ) - { - int l = (int)(m_end - m_current); - - if( l > count ) - l = count; - - if( l > 0 ) - { - memcpy( m_current, data, l ); - m_current += l; - data += l; - count -= l; - } - if( m_current == m_end ) - writeBlock(); - } -} - - -void WLByteStream::putWord( int val ) -{ - uchar *current = m_current; - - if( current+1 < m_end ) - { - current[0] = (uchar)val; - current[1] = (uchar)(val >> 8); - m_current = current + 2; - if( m_current == m_end ) - writeBlock(); - } - else - { - putByte(val); - putByte(val >> 8); - } -} - - -void WLByteStream::putDWord( int val ) -{ - uchar *current = m_current; - - if( current+3 < m_end ) - { - current[0] = (uchar)val; - current[1] = (uchar)(val >> 8); - current[2] = (uchar)(val >> 16); - current[3] = (uchar)(val >> 24); - m_current = current + 4; - if( m_current == m_end ) - writeBlock(); - } - else - { - putByte(val); - putByte(val >> 8); - putByte(val >> 16); - putByte(val >> 24); - } -} - - -///////////////////////////// WMByteStream /////////////////////////////////// - -WMByteStream::~WMByteStream() -{ -} - - -void WMByteStream::putWord( int val ) -{ - uchar *current = m_current; - - if( current+1 < m_end ) - { - current[0] = (uchar)(val >> 8); - current[1] = (uchar)val; - m_current = current + 2; - if( m_current == m_end ) - writeBlock(); - } - else - { - putByte(val >> 8); - putByte(val); - } -} - - -void WMByteStream::putDWord( int val ) -{ - uchar *current = m_current; - - if( current+3 < m_end ) - { - current[0] = (uchar)(val >> 24); - current[1] = (uchar)(val >> 16); - current[2] = (uchar)(val >> 8); - current[3] = (uchar)val; - m_current = current + 4; - if( m_current == m_end ) - writeBlock(); - } - else - { - putByte(val >> 24); - putByte(val >> 16); - putByte(val >> 8); - putByte(val); - } -} - -} diff --git a/modules/highgui/src/bitstrm.hpp b/modules/highgui/src/bitstrm.hpp deleted file mode 100644 index 57956be..0000000 --- a/modules/highgui/src/bitstrm.hpp +++ /dev/null @@ -1,182 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _BITSTRM_H_ -#define _BITSTRM_H_ - -#include - -namespace cv -{ - -enum -{ - RBS_THROW_EOS=-123, // exception code - RBS_THROW_FORB=-124, // exception code - RBS_HUFF_FORB=2047, // forrbidden huffman code "value" - RBS_BAD_HEADER=-125 // invalid header -}; - -typedef unsigned long ulong; - -// class RBaseStream - base class for other reading streams. -class RBaseStream -{ -public: - //methods - RBaseStream(); - virtual ~RBaseStream(); - - virtual bool open( const string& filename ); - virtual bool open( const Mat& buf ); - virtual void close(); - bool isOpened(); - void setPos( int pos ); - int getPos(); - void skip( int bytes ); - -protected: - - bool m_allocated; - uchar* m_start; - uchar* m_end; - uchar* m_current; - FILE* m_file; - int m_block_size; - int m_block_pos; - bool m_is_opened; - - virtual void readBlock(); - virtual void release(); - virtual void allocate(); -}; - - -// class RLByteStream - uchar-oriented stream. -// l in prefix means that the least significant uchar of a multi-uchar value goes first -class RLByteStream : public RBaseStream -{ -public: - virtual ~RLByteStream(); - - int getByte(); - int getBytes( void* buffer, int count ); - int getWord(); - int getDWord(); -}; - -// class RMBitStream - uchar-oriented stream. -// m in prefix means that the most significant uchar of a multi-uchar value go first -class RMByteStream : public RLByteStream -{ -public: - virtual ~RMByteStream(); - - int getWord(); - int getDWord(); -}; - -// WBaseStream - base class for output streams -class WBaseStream -{ -public: - //methods - WBaseStream(); - virtual ~WBaseStream(); - - virtual bool open( const string& filename ); - virtual bool open( vector& buf ); - virtual void close(); - bool isOpened(); - int getPos(); - -protected: - - uchar* m_start; - uchar* m_end; - uchar* m_current; - int m_block_size; - int m_block_pos; - FILE* m_file; - bool m_is_opened; - vector* m_buf; - - virtual void writeBlock(); - virtual void release(); - virtual void allocate(); -}; - - -// class WLByteStream - uchar-oriented stream. -// l in prefix means that the least significant uchar of a multi-byte value goes first -class WLByteStream : public WBaseStream -{ -public: - virtual ~WLByteStream(); - - void putByte( int val ); - void putBytes( const void* buffer, int count ); - void putWord( int val ); - void putDWord( int val ); -}; - - -// class WLByteStream - uchar-oriented stream. -// m in prefix means that the least significant uchar of a multi-byte value goes last -class WMByteStream : public WLByteStream -{ -public: - virtual ~WMByteStream(); - void putWord( int val ); - void putDWord( int val ); -}; - -inline unsigned BSWAP(unsigned v) -{ - return (v<<24)|((v&0xff00)<<8)|((v>>8)&0xff00)|((unsigned)v>>24); -} - -bool bsIsBigEndian( void ); - -} - -#endif/*_BITSTRM_H_*/ diff --git a/modules/highgui/src/cap.cpp b/modules/highgui/src/cap.cpp deleted file mode 100644 index f3dc8b9..0000000 --- a/modules/highgui/src/cap.cpp +++ /dev/null @@ -1,613 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined _M_X64 && defined _MSC_VER && !defined CV_ICC -#pragma optimize("",off) -#pragma warning(disable: 4748) -#endif - -namespace cv -{ - -template<> void Ptr::delete_obj() -{ cvReleaseCapture(&obj); } - -template<> void Ptr::delete_obj() -{ cvReleaseVideoWriter(&obj); } - -} - -/************************* Reading AVIs & Camera data **************************/ - -CV_IMPL void cvReleaseCapture( CvCapture** pcapture ) -{ - if( pcapture && *pcapture ) - { - delete *pcapture; - *pcapture = 0; - } -} - -CV_IMPL IplImage* cvQueryFrame( CvCapture* capture ) -{ - if(!capture) - return 0; - if(!capture->grabFrame()) - return 0; - return capture->retrieveFrame(0); -} - - -CV_IMPL int cvGrabFrame( CvCapture* capture ) -{ - return capture ? capture->grabFrame() : 0; -} - -CV_IMPL IplImage* cvRetrieveFrame( CvCapture* capture, int idx ) -{ - return capture ? capture->retrieveFrame(idx) : 0; -} - -CV_IMPL double cvGetCaptureProperty( CvCapture* capture, int id ) -{ - return capture ? capture->getProperty(id) : 0; -} - -CV_IMPL int cvSetCaptureProperty( CvCapture* capture, int id, double value ) -{ - return capture ? capture->setProperty(id, value) : 0; -} - -CV_IMPL int cvGetCaptureDomain( CvCapture* capture) -{ - return capture ? capture->getCaptureDomain() : 0; -} - - -/** - * Camera dispatching method: index is the camera number. - * If given an index from 0 to 99, it tries to find the first - * API that can access a given camera index. - * Add multiples of 100 to select an API. - */ -CV_IMPL CvCapture * cvCreateCameraCapture (int index) -{ - int domains[] = - { -#ifdef HAVE_DSHOW - CV_CAP_DSHOW, -#endif -#ifdef HAVE_MSMF - CV_CAP_MSMF, -#endif -#if 1 - CV_CAP_IEEE1394, // identical to CV_CAP_DC1394 -#endif -#ifdef HAVE_TYZX - CV_CAP_STEREO, -#endif -#ifdef HAVE_PVAPI - CV_CAP_PVAPI, -#endif -#if 1 - CV_CAP_VFW, // identical to CV_CAP_V4L -#endif -#ifdef HAVE_MIL - CV_CAP_MIL, -#endif -#if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) - CV_CAP_QT, -#endif -#ifdef HAVE_UNICAP - CV_CAP_UNICAP, -#endif -#ifdef HAVE_OPENNI - CV_CAP_OPENNI, -#endif -#ifdef HAVE_ANDROID_NATIVE_CAMERA - CV_CAP_ANDROID, -#endif -#ifdef HAVE_XIMEA - CV_CAP_XIAPI, -#endif -#ifdef HAVE_AVFOUNDATION - CV_CAP_AVFOUNDATION, -#endif -#ifdef HAVE_GIGE_API - CV_CAP_GIGANETIX, -#endif -#ifdef HAVE_INTELPERC - CV_CAP_INTELPERC, -#endif - -1 - }; - - // interpret preferred interface (0 = autodetect) - int pref = (index / 100) * 100; - if (pref) - { - domains[0]=pref; - index %= 100; - domains[1]=-1; - } - - // try every possibly installed camera API - for (int i = 0; domains[i] >= 0; i++) - { -#if defined(HAVE_DSHOW) || \ - defined(HAVE_MSMF) || \ - defined(HAVE_TYZX) || \ - defined(HAVE_VFW) || \ - defined(HAVE_LIBV4L) || \ - defined(HAVE_CAMV4L) || \ - defined(HAVE_CAMV4L2) || \ - defined(HAVE_VIDEOIO) || \ - defined(HAVE_GSTREAMER) || \ - defined(HAVE_DC1394_2) || \ - defined(HAVE_DC1394) || \ - defined(HAVE_CMU1394) || \ - defined(HAVE_MIL) || \ - defined(HAVE_QUICKTIME) || \ - defined(HAVE_QTKIT) || \ - defined(HAVE_UNICAP) || \ - defined(HAVE_PVAPI) || \ - defined(HAVE_OPENNI) || \ - defined(HAVE_XIMEA) || \ - defined(HAVE_AVFOUNDATION) || \ - defined(HAVE_ANDROID_NATIVE_CAMERA) || \ - defined(HAVE_GIGE_API) || \ - defined(HAVE_INTELPERC) || \ - (0) - // local variable to memorize the captured device - CvCapture *capture; -#endif - - switch (domains[i]) - { -#ifdef HAVE_DSHOW - case CV_CAP_DSHOW: - capture = cvCreateCameraCapture_DShow (index); - if (capture) - return capture; - break; -#endif -#ifdef HAVE_MSMF - case CV_CAP_MSMF: - capture = cvCreateCameraCapture_MSMF (index); - if (capture) - return capture; - break; -#endif -#ifdef HAVE_TYZX - case CV_CAP_STEREO: - capture = cvCreateCameraCapture_TYZX (index); - if (capture) - return capture; - break; -#endif - case CV_CAP_VFW: -#ifdef HAVE_VFW - capture = cvCreateCameraCapture_VFW (index); - if (capture) - return capture; -#endif -#if defined HAVE_LIBV4L || defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO - capture = cvCreateCameraCapture_V4L (index); - if (capture) - return capture; -#endif - -#ifdef HAVE_GSTREAMER - capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L2, 0); - if (capture) - return capture; - capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_V4L, 0); - if (capture) - return capture; -#endif - break; //CV_CAP_VFW - - case CV_CAP_FIREWIRE: -#ifdef HAVE_DC1394_2 - capture = cvCreateCameraCapture_DC1394_2 (index); - if (capture) - return capture; -#endif - -#ifdef HAVE_DC1394 - capture = cvCreateCameraCapture_DC1394 (index); - if (capture) - return capture; -#endif - -#ifdef HAVE_CMU1394 - capture = cvCreateCameraCapture_CMU (index); - if (capture) - return capture; -#endif - -#if defined(HAVE_GSTREAMER) && 0 - //Re-enable again when gstreamer 1394 support will land in the backend code - capture = cvCreateCapture_GStreamer(CV_CAP_GSTREAMER_1394, 0); - if (capture) - return capture; -#endif - break; //CV_CAP_FIREWIRE - -#ifdef HAVE_MIL - case CV_CAP_MIL: - capture = cvCreateCameraCapture_MIL (index); - if (capture) - return capture; - break; -#endif - -#if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) - case CV_CAP_QT: - capture = cvCreateCameraCapture_QT (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_UNICAP - case CV_CAP_UNICAP: - capture = cvCreateCameraCapture_Unicap (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_PVAPI - case CV_CAP_PVAPI: - capture = cvCreateCameraCapture_PvAPI (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_OPENNI - case CV_CAP_OPENNI: - capture = cvCreateCameraCapture_OpenNI (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_ANDROID_NATIVE_CAMERA - case CV_CAP_ANDROID: - capture = cvCreateCameraCapture_Android (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_XIMEA - case CV_CAP_XIAPI: - capture = cvCreateCameraCapture_XIMEA (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_AVFOUNDATION - case CV_CAP_AVFOUNDATION: - capture = cvCreateCameraCapture_AVFoundation (index); - if (capture) - return capture; - break; -#endif - -#ifdef HAVE_GIGE_API - case CV_CAP_GIGANETIX: - capture = cvCreateCameraCapture_Giganetix (index); - if (capture) - return capture; - break; // CV_CAP_GIGANETIX -#endif - -#ifdef HAVE_INTELPERC - case CV_CAP_INTELPERC: - capture = cvCreateCameraCapture_IntelPerC(index); - if (capture) - return capture; - break; // CV_CAP_INTEL_PERC -#endif - } - } - - // failed open a camera - return 0; -} - -/** - * Videoreader dispatching method: it tries to find the first - * API that can access a given filename. - */ -CV_IMPL CvCapture * cvCreateFileCapture (const char * filename) -{ - CvCapture * result = 0; - - if (! result) - result = cvCreateFileCapture_FFMPEG_proxy (filename); - -#ifdef HAVE_VFW - if (! result) - result = cvCreateFileCapture_VFW (filename); -#endif - -#ifdef HAVE_MSMF - if (! result) - result = cvCreateFileCapture_MSMF (filename); -#endif - -#ifdef HAVE_XINE - if (! result) - result = cvCreateFileCapture_XINE (filename); -#endif - -#ifdef HAVE_GSTREAMER - if (! result) - result = cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename); -#endif - -#if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) - if (! result) - result = cvCreateFileCapture_QT (filename); -#endif - -#ifdef HAVE_AVFOUNDATION - if (! result) - result = cvCreateFileCapture_AVFoundation (filename); -#endif - -#ifdef HAVE_OPENNI - if (! result) - result = cvCreateFileCapture_OpenNI (filename); -#endif - - if (! result) - result = cvCreateFileCapture_Images (filename); - - return result; -} - -/** - * Videowriter dispatching method: it tries to find the first - * API that can write a given stream. - */ -CV_IMPL CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ) -{ - //CV_FUNCNAME( "cvCreateVideoWriter" ); - - CvVideoWriter *result = 0; - - if(!fourcc || !fps) - result = cvCreateVideoWriter_Images(filename); - - if(!result) - result = cvCreateVideoWriter_FFMPEG_proxy (filename, fourcc, fps, frameSize, is_color); - -#ifdef HAVE_VFW - if(!result) - result = cvCreateVideoWriter_VFW(filename, fourcc, fps, frameSize, is_color); -#endif - -#ifdef HAVE_MSMF - if (!result) - result = cvCreateVideoWriter_MSMF(filename, fourcc, fps, frameSize, is_color); -#endif - -/* #ifdef HAVE_XINE - if(!result) - result = cvCreateVideoWriter_XINE(filename, fourcc, fps, frameSize, is_color); - #endif -*/ -#ifdef HAVE_AVFOUNDATION - if (! result) - result = cvCreateVideoWriter_AVFoundation(filename, fourcc, fps, frameSize, is_color); -#endif - -#if defined(HAVE_QUICKTIME) || defined(HAVE_QTKIT) - if(!result) - result = cvCreateVideoWriter_QT(filename, fourcc, fps, frameSize, is_color); -#endif - -#ifdef HAVE_GSTREAMER - if (! result) - result = cvCreateVideoWriter_GStreamer(filename, fourcc, fps, frameSize, is_color); -#endif - - if(!result) - result = cvCreateVideoWriter_Images(filename); - - return result; -} - -CV_IMPL int cvWriteFrame( CvVideoWriter* writer, const IplImage* image ) -{ - return writer ? writer->writeFrame(image) : 0; -} - -CV_IMPL void cvReleaseVideoWriter( CvVideoWriter** pwriter ) -{ - if( pwriter && *pwriter ) - { - delete *pwriter; - *pwriter = 0; - } -} - -namespace cv -{ - -VideoCapture::VideoCapture() -{} - -VideoCapture::VideoCapture(const string& filename) -{ - open(filename); -} - -VideoCapture::VideoCapture(int device) -{ - open(device); -} - -VideoCapture::~VideoCapture() -{ - cap.release(); -} - -bool VideoCapture::open(const string& filename) -{ - if (isOpened()) release(); - cap = cvCreateFileCapture(filename.c_str()); - return isOpened(); -} - -bool VideoCapture::open(int device) -{ - if (isOpened()) release(); - cap = cvCreateCameraCapture(device); - return isOpened(); -} - -bool VideoCapture::isOpened() const { return !cap.empty(); } - -void VideoCapture::release() -{ - cap.release(); -} - -bool VideoCapture::grab() -{ - return cvGrabFrame(cap) != 0; -} - -bool VideoCapture::retrieve(Mat& image, int channel) -{ - IplImage* _img = cvRetrieveFrame(cap, channel); - if( !_img ) - { - image.release(); - return false; - } - if(_img->origin == IPL_ORIGIN_TL) - Mat(_img).copyTo(image); - else - { - Mat temp(_img); - flip(temp, image, 0); - } - return true; -} - -bool VideoCapture::read(Mat& image) -{ - if(grab()) - retrieve(image); - else - image.release(); - return !image.empty(); -} - -VideoCapture& VideoCapture::operator >> (Mat& image) -{ - read(image); - return *this; -} - -bool VideoCapture::set(int propId, double value) -{ - return cvSetCaptureProperty(cap, propId, value) != 0; -} - -double VideoCapture::get(int propId) -{ - return cvGetCaptureProperty(cap, propId); -} - -VideoWriter::VideoWriter() -{} - -VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor) -{ - open(filename, fourcc, fps, frameSize, isColor); -} - -void VideoWriter::release() -{ - writer.release(); -} - -VideoWriter::~VideoWriter() -{ - release(); -} - -bool VideoWriter::open(const string& filename, int fourcc, double fps, Size frameSize, bool isColor) -{ - writer = cvCreateVideoWriter(filename.c_str(), fourcc, fps, frameSize, isColor); - return isOpened(); -} - -bool VideoWriter::isOpened() const -{ - return !writer.empty(); -} - -void VideoWriter::write(const Mat& image) -{ - IplImage _img = image; - cvWriteFrame(writer, &_img); -} - -VideoWriter& VideoWriter::operator << (const Mat& image) -{ - write(image); - return *this; -} - -} diff --git a/modules/highgui/src/cap_android.cpp b/modules/highgui/src/cap_android.cpp deleted file mode 100644 index a8d8c5b..0000000 --- a/modules/highgui/src/cap_android.cpp +++ /dev/null @@ -1,554 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_ANDROID_NATIVE_CAMERA - -#include -#include -#include -#include - -#undef LOG_TAG -#undef LOGD -#undef LOGE -#undef LOGI -#define LOG_TAG "OpenCV::camera" -#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) -#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) - -class HighguiAndroidCameraActivity; - -class CvCapture_Android : public CvCapture -{ -public: - CvCapture_Android(int); - virtual ~CvCapture_Android(); - - virtual double getProperty(int propIdx); - virtual bool setProperty(int probIdx, double propVal); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int outputType); - virtual int getCaptureDomain() { return CV_CAP_ANDROID; } - - bool isOpened() const; - -protected: - struct OutputMap - { - public: - cv::Mat mat; - IplImage* getIplImagePtr(); - private: - IplImage iplHeader; - }; - - CameraActivity* m_activity; - - //raw from camera - int m_width; - int m_height; - cv::Mat m_frameYUV420; - cv::Mat m_frameYUV420next; - - enum YUVformat - { - noformat = 0, - yuv420sp, - yvu420sp, - yuvUnknown - }; - - YUVformat m_frameFormat; - - void setFrame(const void* buffer, int bufferSize); - -private: - bool m_isOpened; - bool m_CameraParamsChanged; - - //frames counter for statistics - int m_framesGrabbed; - - //cached converted frames - OutputMap m_frameGray; - OutputMap m_frameColor; - bool m_hasGray; - bool m_hasColor; - - enum CvCapture_Android_DataState { - CVCAPTURE_ANDROID_STATE_NO_FRAME=0, - CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED, - CVCAPTURE_ANDROID_STATE_HAS_FRAME_GRABBED - }; - volatile CvCapture_Android_DataState m_dataState; - - //synchronization - pthread_mutex_t m_nextFrameMutex; - pthread_cond_t m_nextFrameCond; - volatile bool m_waitingNextFrame; - volatile bool m_shouldAutoGrab; - - void prepareCacheForYUV(int width, int height); - bool convertYUV2Grey(int width, int height, const unsigned char* yuv, cv::Mat& resmat); - bool convertYUV2BGR(int width, int height, const unsigned char* yuv, cv::Mat& resmat, bool inRGBorder, bool withAlpha); - - friend class HighguiAndroidCameraActivity; -}; - - -class HighguiAndroidCameraActivity : public CameraActivity -{ -public: - HighguiAndroidCameraActivity(CvCapture_Android* capture) - { - m_capture = capture; - m_framesReceived = 0; - } - - virtual bool onFrameBuffer(void* buffer, int bufferSize) - { - if(isConnected() && buffer != 0 && bufferSize > 0) - { - m_framesReceived++; - if (m_capture->m_waitingNextFrame || m_capture->m_shouldAutoGrab) - { - pthread_mutex_lock(&m_capture->m_nextFrameMutex); - - m_capture->setFrame(buffer, bufferSize); - - pthread_cond_broadcast(&m_capture->m_nextFrameCond); - pthread_mutex_unlock(&m_capture->m_nextFrameMutex); - } - return true; - } - return false; - } - - void LogFramesRate() - { - LOGI("FRAMES received: %d grabbed: %d", m_framesReceived, m_capture->m_framesGrabbed); - } - -private: - CvCapture_Android* m_capture; - int m_framesReceived; -}; - -IplImage* CvCapture_Android::OutputMap::getIplImagePtr() -{ - if( mat.empty() ) - return 0; - - iplHeader = IplImage(mat); - return &iplHeader; -} - -CvCapture_Android::CvCapture_Android(int cameraId) -{ - //defaults - m_width = 0; - m_height = 0; - m_activity = 0; - m_isOpened = false; - // m_frameYUV420 = 0; - // m_frameYUV420next = 0; - m_hasGray = false; - m_hasColor = false; - m_dataState = CVCAPTURE_ANDROID_STATE_NO_FRAME; - m_waitingNextFrame = false; - m_shouldAutoGrab = false; - m_framesGrabbed = 0; - m_CameraParamsChanged = false; - m_frameFormat = noformat; - - //try connect to camera - LOGD("CvCapture_Android::CvCapture_Android(%i)", cameraId); - m_activity = new HighguiAndroidCameraActivity(this); - - if (m_activity == 0) return; - - pthread_mutex_init(&m_nextFrameMutex, NULL); - pthread_cond_init (&m_nextFrameCond, NULL); - - CameraActivity::ErrorCode errcode = m_activity->connect(cameraId); - - if(errcode == CameraActivity::NO_ERROR) - m_isOpened = true; - else - { - LOGE("Native_camera returned opening error: %d", errcode); - delete m_activity; - m_activity = 0; - } -} - -bool CvCapture_Android::isOpened() const -{ - return m_isOpened; -} - -CvCapture_Android::~CvCapture_Android() -{ - if (m_activity) - { - ((HighguiAndroidCameraActivity*)m_activity)->LogFramesRate(); - - pthread_mutex_lock(&m_nextFrameMutex); - - // unsigned char *tmp1=m_frameYUV420; - // unsigned char *tmp2=m_frameYUV420next; - // m_frameYUV420 = 0; - // m_frameYUV420next = 0; - // delete tmp1; - // delete tmp2; - - m_dataState=CVCAPTURE_ANDROID_STATE_NO_FRAME; - pthread_cond_broadcast(&m_nextFrameCond); - - pthread_mutex_unlock(&m_nextFrameMutex); - - //m_activity->disconnect() will be automatically called inside destructor; - delete m_activity; - m_activity = 0; - - pthread_mutex_destroy(&m_nextFrameMutex); - pthread_cond_destroy(&m_nextFrameCond); - } -} - -double CvCapture_Android::getProperty( int propIdx ) -{ - switch ( propIdx ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return (double)m_activity->getFrameWidth(); - case CV_CAP_PROP_FRAME_HEIGHT: - return (double)m_activity->getFrameHeight(); - case CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_SUPPORTED_PREVIEW_SIZES_STRING); - case CV_CAP_PROP_PREVIEW_FORMAT: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_PREVIEW_FORMAT_STRING); - case CV_CAP_PROP_FPS: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FPS); - case CV_CAP_PROP_EXPOSURE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_EXPOSURE); - case CV_CAP_PROP_ANDROID_FLASH_MODE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FLASH_MODE); - case CV_CAP_PROP_ANDROID_FOCUS_MODE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_MODE); - case CV_CAP_PROP_ANDROID_WHITE_BALANCE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_WHITE_BALANCE); - case CV_CAP_PROP_ANDROID_ANTIBANDING: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_ANTIBANDING); - case CV_CAP_PROP_ANDROID_FOCAL_LENGTH: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCAL_LENGTH); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_NEAR); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_OPTIMAL); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_FAR); - case CV_CAP_PROP_ANDROID_EXPOSE_LOCK: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK); - case CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK); - default: - CV_Error( CV_StsOutOfRange, "Failed attempt to GET unsupported camera property." ); - break; - } - return -1.0; -} - -bool CvCapture_Android::setProperty( int propIdx, double propValue ) -{ - bool res = false; - if( isOpened() ) - { - switch ( propIdx ) - { - case CV_CAP_PROP_FRAME_WIDTH: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH, propValue); - break; - case CV_CAP_PROP_FRAME_HEIGHT: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT, propValue); - break; - case CV_CAP_PROP_AUTOGRAB: - m_shouldAutoGrab=(propValue != 0); - break; - case CV_CAP_PROP_EXPOSURE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_EXPOSURE, propValue); - break; - case CV_CAP_PROP_ANDROID_FLASH_MODE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FLASH_MODE, propValue); - break; - case CV_CAP_PROP_ANDROID_FOCUS_MODE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FOCUS_MODE, propValue); - break; - case CV_CAP_PROP_ANDROID_WHITE_BALANCE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_WHITE_BALANCE, propValue); - break; - case CV_CAP_PROP_ANDROID_ANTIBANDING: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_ANTIBANDING, propValue); - break; - case CV_CAP_PROP_ANDROID_EXPOSE_LOCK: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK, propValue); - break; - case CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK, propValue); - break; - default: - CV_Error( CV_StsOutOfRange, "Failed attempt to SET unsupported camera property." ); - return false; - } - - // Only changes in frame size require camera restart - if ((propIdx == CV_CAP_PROP_FRAME_WIDTH) || (propIdx == CV_CAP_PROP_FRAME_HEIGHT)) - { // property for highgui class CvCapture_Android only - m_CameraParamsChanged = true; - } - - res = true; - } - - return res; -} - -bool CvCapture_Android::grabFrame() -{ - if( !isOpened() ) { - LOGE("CvCapture_Android::grabFrame(): camera is not opened"); - return false; - } - - bool res=false; - pthread_mutex_lock(&m_nextFrameMutex); - if (m_CameraParamsChanged) - { - m_activity->applyProperties(); - m_CameraParamsChanged = false; - m_dataState = CVCAPTURE_ANDROID_STATE_NO_FRAME;//we will wait new frame - } - - if (m_dataState != CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED) - { - m_waitingNextFrame = true; - pthread_cond_wait(&m_nextFrameCond, &m_nextFrameMutex); - } - - if (m_dataState == CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED) - { - //LOGD("CvCapture_Android::grabFrame: get new frame"); - //swap current and new frames - cv::swap(m_frameYUV420, m_frameYUV420next); - - //discard cached frames - m_hasGray = false; - m_hasColor = false; - - m_dataState=CVCAPTURE_ANDROID_STATE_HAS_FRAME_GRABBED; - m_framesGrabbed++; - - res=true; - } else { - LOGE("CvCapture_Android::grabFrame: NO new frame"); - } - - - int res_unlock=pthread_mutex_unlock(&m_nextFrameMutex); - if (res_unlock) { - LOGE("Error in CvCapture_Android::grabFrame: pthread_mutex_unlock returned %d --- probably, this object has been destroyed", res_unlock); - return false; - } - - return res; -} - -IplImage* CvCapture_Android::retrieveFrame( int outputType ) -{ - IplImage* image = NULL; - - cv::Mat m_frameYUV420_ref = m_frameYUV420; - unsigned char *current_frameYUV420=m_frameYUV420_ref.ptr(); - //Attention! all the operations in this function below should occupy less time than the period between two frames from camera - if (NULL != current_frameYUV420) - { - if (m_frameFormat == noformat) - { - union {double prop; const char* name;} u; - u.prop = getProperty(CV_CAP_PROP_PREVIEW_FORMAT); - if (0 == strcmp(u.name, "yuv420sp")) - m_frameFormat = yuv420sp; - else if (0 == strcmp(u.name, "yvu420sp")) - m_frameFormat = yvu420sp; - else - m_frameFormat = yuvUnknown; - } - - switch(outputType) - { - case CV_CAP_ANDROID_GREY_FRAME: - if (!m_hasGray) - if (!(m_hasGray = convertYUV2Grey(m_width, m_height, current_frameYUV420, m_frameGray.mat))) - return NULL; - image = m_frameGray.getIplImagePtr(); - break; - case CV_CAP_ANDROID_COLOR_FRAME_BGR: case CV_CAP_ANDROID_COLOR_FRAME_RGB: - if (!m_hasColor) - if (!(m_hasColor = convertYUV2BGR(m_width, m_height, current_frameYUV420, m_frameColor.mat, outputType == CV_CAP_ANDROID_COLOR_FRAME_RGB, false))) - return NULL; - image = m_frameColor.getIplImagePtr(); - break; - case CV_CAP_ANDROID_COLOR_FRAME_BGRA: case CV_CAP_ANDROID_COLOR_FRAME_RGBA: - if (!m_hasColor) - if (!(m_hasColor = convertYUV2BGR(m_width, m_height, current_frameYUV420, m_frameColor.mat, outputType == CV_CAP_ANDROID_COLOR_FRAME_RGBA, true))) - return NULL; - image = m_frameColor.getIplImagePtr(); - break; - default: - LOGE("Unsupported frame output format: %d", outputType); - CV_Error( CV_StsOutOfRange, "Output frame format is not supported." ); - image = NULL; - break; - } - } - return image; -} - -//Attention: this method should be called inside pthread_mutex_lock(m_nextFrameMutex) only -void CvCapture_Android::setFrame(const void* buffer, int bufferSize) -{ - int width = m_activity->getFrameWidth(); - int height = m_activity->getFrameHeight(); - int expectedSize = (width * height * 3) >> 1; - - if ( expectedSize != bufferSize) - { - LOGE("ERROR reading YUV buffer: width=%d, height=%d, size=%d, receivedSize=%d", width, height, expectedSize, bufferSize); - return; - } - - //allocate memory if needed - prepareCacheForYUV(width, height); - - //copy data - cv::Mat m_frameYUV420next_ref = m_frameYUV420next; - memcpy(m_frameYUV420next_ref.ptr(), buffer, bufferSize); - // LOGD("CvCapture_Android::setFrame -- memcpy is done"); - // ((HighguiAndroidCameraActivity*)m_activity)->LogFramesRate(); - - m_dataState = CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED; - m_waitingNextFrame = false;//set flag that no more frames required at this moment -} - -//Attention: this method should be called inside pthread_mutex_lock(m_nextFrameMutex) only -void CvCapture_Android::prepareCacheForYUV(int width, int height) -{ - if (width != m_width || height != m_height) - { - LOGD("CvCapture_Android::prepareCacheForYUV: Changing size of buffers: from width=%d height=%d to width=%d height=%d", m_width, m_height, width, height); - m_width = width; - m_height = height; - /* - unsigned char *tmp = m_frameYUV420next; - m_frameYUV420next = new unsigned char [width * height * 3 / 2]; - if (tmp != NULL) - { - delete[] tmp; - } - - tmp = m_frameYUV420; - m_frameYUV420 = new unsigned char [width * height * 3 / 2]; - if (tmp != NULL) - { - delete[] tmp; - }*/ - m_frameYUV420.create(height * 3 / 2, width, CV_8UC1); - m_frameYUV420next.create(height * 3 / 2, width, CV_8UC1); - } -} - -bool CvCapture_Android::convertYUV2Grey(int width, int height, const unsigned char* yuv, cv::Mat& resmat) -{ - if (yuv == 0) return false; - if (m_frameFormat != yuv420sp && m_frameFormat != yvu420sp) return false; -#define ALWAYS_COPY_GRAY 0 -#if ALWAYS_COPY_GRAY - resmat.create(height, width, CV_8UC1); - unsigned char* matBuff = resmat.ptr (0); - memcpy(matBuff, yuv, width * height); -#else - resmat = cv::Mat(height, width, CV_8UC1, (void*)yuv); -#endif - return !resmat.empty(); -} - -bool CvCapture_Android::convertYUV2BGR(int width, int height, const unsigned char* yuv, cv::Mat& resmat, bool inRGBorder, bool withAlpha) -{ - if (yuv == 0) return false; - if (m_frameFormat != yuv420sp && m_frameFormat != yvu420sp) return false; - - CV_Assert(width % 2 == 0 && height % 2 == 0); - - cv::Mat src(height*3/2, width, CV_8UC1, (void*)yuv); - - if (m_frameFormat == yuv420sp) - cv::cvtColor(src, resmat, inRGBorder ? CV_YUV420sp2RGB : CV_YUV420sp2BGR, withAlpha ? 4 : 3); - else if (m_frameFormat == yvu420sp) - cv::cvtColor(src, resmat, inRGBorder ? CV_YUV2RGB_NV21 : CV_YUV2BGR_NV12, withAlpha ? 4 : 3); - - return !resmat.empty(); -} - -CvCapture* cvCreateCameraCapture_Android( int cameraId ) -{ - CvCapture_Android* capture = new CvCapture_Android(cameraId); - - if( capture->isOpened() ) - return capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_avfoundation.mm b/modules/highgui/src/cap_avfoundation.mm deleted file mode 100644 index 001ef02..0000000 --- a/modules/highgui/src/cap_avfoundation.mm +++ /dev/null @@ -1,1333 +0,0 @@ -/* - * cap_avfoundation.mm - * For iOS video I/O - * by Xiaochao Yang on 06/15/11 modified from - * cap_qtkit.mm for Nicholas Butko for Mac OS version. - * Copyright 2011. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (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 "precomp.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include -#import -#import - - -//#import - -using namespace std; - -/********************** Declaration of class headers ************************/ - -/***************************************************************************** - * - * CaptureDelegate Declaration. - * - * CaptureDelegate is notified on a separate thread by the OS whenever there - * is a new frame. When "updateImage" is called from the main thread, it - * copies this new frame into an IplImage, but only if this frame has not - * been copied before. When "getOutput" is called from the main thread, - * it gives the last copied IplImage. - * - *****************************************************************************/ - -#define DISABLE_AUTO_RESTART 999 - -@interface CaptureDelegate : NSObject -{ - int newFrame; - CVImageBufferRef mCurrentImageBuffer; - char* imagedata; - IplImage* image; - char* bgr_imagedata; - IplImage* bgr_image; - IplImage* bgr_image_r90; - size_t currSize; -} - -- (void)captureOutput:(AVCaptureOutput *)captureOutput -didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer -fromConnection:(AVCaptureConnection *)connection; - - -- (int)updateImage; -- (IplImage*)getOutput; - -@end - -/***************************************************************************** - * - * CvCaptureCAM Declaration. - * - * CvCaptureCAM is the instantiation of a capture source for cameras. - * - *****************************************************************************/ - -class CvCaptureCAM : public CvCapture { - public: - CvCaptureCAM(int cameraNum = -1) ; - ~CvCaptureCAM(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual IplImage* queryFrame(); - virtual double getProperty(int property_id); - virtual bool setProperty(int property_id, double value); - virtual int didStart(); - - private: - AVCaptureSession *mCaptureSession; - AVCaptureDeviceInput *mCaptureDeviceInput; - AVCaptureVideoDataOutput *mCaptureDecompressedVideoOutput; - AVCaptureDevice *mCaptureDevice; - CaptureDelegate *capture; - - int startCaptureDevice(int cameraNum); - void stopCaptureDevice(); - - void setWidthHeight(); - bool grabFrame(double timeOut); - - int camNum; - int width; - int height; - int settingWidth; - int settingHeight; - int started; - int disableAutoRestart; -}; - - -/***************************************************************************** - * - * CvCaptureFile Declaration. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -class CvCaptureFile : public CvCapture { - public: - - CvCaptureFile(const char* filename) ; - ~CvCaptureFile(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual IplImage* queryFrame(); - virtual double getProperty(int property_id); - virtual bool setProperty(int property_id, double value); - virtual int didStart(); - - private: - - AVAssetReader *mMovieReader; - char* imagedata; - IplImage* image; - char* bgr_imagedata; - IplImage* bgr_image; - size_t currSize; - - IplImage* retrieveFramePixelBuffer(); - double getFPS(); - - int movieWidth; - int movieHeight; - double movieFPS; - double currentFPS; - double movieDuration; - int changedPos; - - int started; -}; - - -/***************************************************************************** - * - * CvCaptureFile Declaration. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -class CvVideoWriter_AVFoundation : public CvVideoWriter{ - public: - CvVideoWriter_AVFoundation(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color=1); - ~CvVideoWriter_AVFoundation(); - bool writeFrame(const IplImage* image); - private: - IplImage* argbimage; - - AVAssetWriter *mMovieWriter; - AVAssetWriterInput* mMovieWriterInput; - AVAssetWriterInputPixelBufferAdaptor* mMovieWriterAdaptor; - - unsigned char* imagedata; - NSString* path; - NSString* codec; - NSString* fileType; - double movieFPS; - CvSize movieSize; - int movieColor; - unsigned long frameCount; -}; - - -/****************** Implementation of interface functions ********************/ - - -CvCapture* cvCreateFileCapture_AVFoundation(const char* filename) { - CvCaptureFile *retval = new CvCaptureFile(filename); - - if(retval->didStart()) - return retval; - delete retval; - return NULL; -} - -CvCapture* cvCreateCameraCapture_AVFoundation(int index ) { - - CvCapture* retval = new CvCaptureCAM(index); - if (!((CvCaptureCAM *)retval)->didStart()) - cvReleaseCapture(&retval); - return retval; - -} - -CvVideoWriter* cvCreateVideoWriter_AVFoundation(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color) { - return new CvVideoWriter_AVFoundation(filename, fourcc, fps, frame_size,is_color); -} - -/********************** Implementation of Classes ****************************/ -/***************************************************************************** - * - * CvCaptureCAM Implementation. - * - * CvCaptureCAM is the instantiation of a capture source for cameras. - * - *****************************************************************************/ - -CvCaptureCAM::CvCaptureCAM(int cameraNum) { - mCaptureSession = nil; - mCaptureDeviceInput = nil; - mCaptureDecompressedVideoOutput = nil; - capture = nil; - - width = 0; - height = 0; - settingWidth = 0; - settingHeight = 0; - disableAutoRestart = 0; - - camNum = cameraNum; - - if (!startCaptureDevice(camNum)) { - cout << "Warning, camera failed to properly initialize!" << endl; - started = 0; - } else { - started = 1; - } - -} - -CvCaptureCAM::~CvCaptureCAM() { - stopCaptureDevice(); - //cout << "Cleaned up camera." << endl; -} - -int CvCaptureCAM::didStart() { - return started; -} - - -bool CvCaptureCAM::grabFrame() { - return grabFrame(5); -} - -bool CvCaptureCAM::grabFrame(double timeOut) { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - double sleepTime = 0.005; - double total = 0; - - NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:sleepTime]; - while (![capture updateImage] && (total += sleepTime)<=timeOut && - [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode - beforeDate:loopUntil]) - loopUntil = [NSDate dateWithTimeIntervalSinceNow:sleepTime]; - - [localpool drain]; - - return total <= timeOut; -} - -IplImage* CvCaptureCAM::retrieveFrame(int) { - return [capture getOutput]; -} - -IplImage* CvCaptureCAM::queryFrame() { - while (!grabFrame()) { - cout << "WARNING: Couldn't grab new frame from camera!!!" << endl; - /* - cout << "Attempting to restart camera; set capture property DISABLE_AUTO_RESTART to disable." << endl; - stopCaptureDevice(); - startCaptureDevice(camNum); - */ - } - return retrieveFrame(0); -} - -void CvCaptureCAM::stopCaptureDevice() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - [mCaptureSession stopRunning]; - - [mCaptureSession release]; - [mCaptureDeviceInput release]; - - [mCaptureDecompressedVideoOutput release]; - [capture release]; - [localpool drain]; - -} - -int CvCaptureCAM::startCaptureDevice(int cameraNum) { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - capture = [[CaptureDelegate alloc] init]; - - AVCaptureDevice *device; - NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; - if ([devices count] == 0) { - cout << "AV Foundation didn't find any attached Video Input Devices!" << endl; - [localpool drain]; - return 0; - } - - if (cameraNum >= 0) { - camNum = cameraNum % [devices count]; - if (camNum != cameraNum) { - cout << "Warning: Max Camera Num is " << [devices count]-1 << "; Using camera " << camNum << endl; - } - device = [devices objectAtIndex:camNum]; - } else { - device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] ; - } - mCaptureDevice = device; - //int success; - NSError* error; - - if (device) { - - mCaptureDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:device error:&error] ; - mCaptureSession = [[AVCaptureSession alloc] init] ; - - /* - success = [mCaptureSession addInput:mCaptureDeviceInput]; - - if (!success) { - cout << "AV Foundation failed to start capture session with opened Capture Device" << endl; - [localpool drain]; - return 0; - } - */ - - mCaptureDecompressedVideoOutput = [[AVCaptureVideoDataOutput alloc] init]; - - dispatch_queue_t queue = dispatch_queue_create("cameraQueue", NULL); - [mCaptureDecompressedVideoOutput setSampleBufferDelegate:capture queue:queue]; - dispatch_release(queue); - - - NSDictionary *pixelBufferOptions ; - if (width > 0 && height > 0) { - pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithDouble:1.0*width], (id)kCVPixelBufferWidthKey, - [NSNumber numberWithDouble:1.0*height], (id)kCVPixelBufferHeightKey, - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - } else { - pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - } - - //TODO: add new interface for setting fps and capturing resolution. - [mCaptureDecompressedVideoOutput setVideoSettings:pixelBufferOptions]; - mCaptureDecompressedVideoOutput.alwaysDiscardsLateVideoFrames = YES; - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - mCaptureDecompressedVideoOutput.minFrameDuration = CMTimeMake(1, 30); -#endif - - //Slow. 1280*720 for iPhone4, iPod back camera. 640*480 for front camera - //mCaptureSession.sessionPreset = AVCaptureSessionPresetHigh; // fps ~= 5 slow for OpenCV - - mCaptureSession.sessionPreset = AVCaptureSessionPresetMedium; //480*360 - if (width == 0 ) width = 480; - if (height == 0 ) height = 360; - - [mCaptureSession addInput:mCaptureDeviceInput]; - [mCaptureSession addOutput:mCaptureDecompressedVideoOutput]; - - /* - // Does not work! This is the preferred way (hardware acceleration) to change pixel buffer orientation. - // I'm now using cvtranspose and cvflip instead, which takes cpu cycles. - AVCaptureConnection *connection = [[mCaptureDecompressedVideoOutput connections] objectAtIndex:0]; - if([connection isVideoOrientationSupported]) { - //NSLog(@"Setting pixel buffer orientation"); - connection.videoOrientation = AVCaptureVideoOrientationPortrait; - } - */ - - [mCaptureSession startRunning]; - - grabFrame(60); - [localpool drain]; - return 1; - } - - [localpool drain]; - return 0; -} - -void CvCaptureCAM::setWidthHeight() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - NSDictionary* pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithDouble:1.0*width], (id)kCVPixelBufferWidthKey, - [NSNumber numberWithDouble:1.0*height], (id)kCVPixelBufferHeightKey, - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - - [mCaptureDecompressedVideoOutput setVideoSettings:pixelBufferOptions]; - grabFrame(60); - [localpool drain]; -} - -//added macros into headers in highgui_c.h -/* -#define CV_CAP_PROP_IOS_DEVICE_FOCUS 9001 -#define CV_CAP_PROP_IOS_DEVICE_EXPOSURE 9002 -#define CV_CAP_PROP_IOS_DEVICE_FLASH 9003 -#define CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE 9004 -#define CV_CAP_PROP_IOS_DEVICE_TORCH 9005 -*/ - - -/* -// All available settings are taken from iOS API - -enum { - AVCaptureFlashModeOff = 0, - AVCaptureFlashModeOn = 1, - AVCaptureFlashModeAuto = 2 -}; -typedef NSInteger AVCaptureFlashMode; - -enum { - AVCaptureTorchModeOff = 0, - AVCaptureTorchModeOn = 1, - AVCaptureTorchModeAuto = 2 -}; -typedef NSInteger AVCaptureTorchMode; - -enum { - AVCaptureFocusModeLocked = 0, - AVCaptureFocusModeAutoFocus = 1, - AVCaptureFocusModeContinuousAutoFocus = 2, -}; -typedef NSInteger AVCaptureFocusMode; - -enum { - AVCaptureExposureModeLocked = 0, - AVCaptureExposureModeAutoExpose = 1, - AVCaptureExposureModeContinuousAutoExposure = 2, -}; -typedef NSInteger AVCaptureExposureMode; - -enum { - AVCaptureWhiteBalanceModeLocked = 0, - AVCaptureWhiteBalanceModeAutoWhiteBalance = 1, - AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance = 2, -}; -typedef NSInteger AVCaptureWhiteBalanceMode; -*/ - -double CvCaptureCAM::getProperty(int property_id){ - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - /* - NSArray* connections = [mCaptureDeviceInput connections]; - QTFormatDescription* format = [[connections objectAtIndex:0] formatDescription]; - NSSize s1 = [[format attributeForKey:QTFormatDescriptionVideoCleanApertureDisplaySizeAttribute] sizeValue]; - */ - - NSArray* ports = mCaptureDeviceInput.ports; - CMFormatDescriptionRef format = [[ports objectAtIndex:0] formatDescription]; - CGSize s1 = CMVideoFormatDescriptionGetPresentationDimensions(format, YES, YES); - - int width=(int)s1.width, height=(int)s1.height; - - [localpool drain]; - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - return width; - case CV_CAP_PROP_FRAME_HEIGHT: - return height; - - case CV_CAP_PROP_IOS_DEVICE_FOCUS: - return mCaptureDevice.focusMode; - case CV_CAP_PROP_IOS_DEVICE_EXPOSURE: - return mCaptureDevice.exposureMode; - case CV_CAP_PROP_IOS_DEVICE_FLASH: - return mCaptureDevice.flashMode; - case CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE: - return mCaptureDevice.whiteBalanceMode; - case CV_CAP_PROP_IOS_DEVICE_TORCH: - return mCaptureDevice.torchMode; - - default: - return 0; - } - - -} - -bool CvCaptureCAM::setProperty(int property_id, double value) { - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - width = value; - settingWidth = 1; - if (settingWidth && settingHeight) { - setWidthHeight(); - settingWidth =0; - settingHeight = 0; - } - return true; - - case CV_CAP_PROP_FRAME_HEIGHT: - height = value; - settingHeight = 1; - if (settingWidth && settingHeight) { - setWidthHeight(); - settingWidth =0; - settingHeight = 0; - } - return true; - - case CV_CAP_PROP_IOS_DEVICE_FOCUS: - if ([mCaptureDevice isFocusModeSupported:(int)value]){ - NSError* error = nil; - [mCaptureDevice lockForConfiguration:&error]; - if (error) return false; - [mCaptureDevice setFocusMode:(int)value]; - [mCaptureDevice unlockForConfiguration]; - //NSLog(@"Focus set"); - return true; - }else { - return false; - } - - case CV_CAP_PROP_IOS_DEVICE_EXPOSURE: - if ([mCaptureDevice isExposureModeSupported:(int)value]){ - NSError* error = nil; - [mCaptureDevice lockForConfiguration:&error]; - if (error) return false; - [mCaptureDevice setExposureMode:(int)value]; - [mCaptureDevice unlockForConfiguration]; - //NSLog(@"Exposure set"); - return true; - }else { - return false; - } - - case CV_CAP_PROP_IOS_DEVICE_FLASH: - if ( [mCaptureDevice hasFlash] && [mCaptureDevice isFlashModeSupported:(int)value]){ - NSError* error = nil; - [mCaptureDevice lockForConfiguration:&error]; - if (error) return false; - [mCaptureDevice setFlashMode:(int)value]; - [mCaptureDevice unlockForConfiguration]; - //NSLog(@"Flash mode set"); - return true; - }else { - return false; - } - - case CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE: - if ([mCaptureDevice isWhiteBalanceModeSupported:(int)value]){ - NSError* error = nil; - [mCaptureDevice lockForConfiguration:&error]; - if (error) return false; - [mCaptureDevice setWhiteBalanceMode:(int)value]; - [mCaptureDevice unlockForConfiguration]; - //NSLog(@"White balance set"); - return true; - }else { - return false; - } - - case CV_CAP_PROP_IOS_DEVICE_TORCH: - if ([mCaptureDevice hasFlash] && [mCaptureDevice isTorchModeSupported:(int)value]){ - NSError* error = nil; - [mCaptureDevice lockForConfiguration:&error]; - if (error) return false; - [mCaptureDevice setTorchMode:(int)value]; - [mCaptureDevice unlockForConfiguration]; - //NSLog(@"Torch mode set"); - return true; - }else { - return false; - } - - case DISABLE_AUTO_RESTART: - disableAutoRestart = value; - return 1; - default: - return false; - } -} - - -/***************************************************************************** - * - * CaptureDelegate Implementation. - * - * CaptureDelegate is notified on a separate thread by the OS whenever there - * is a new frame. When "updateImage" is called from the main thread, it - * copies this new frame into an IplImage, but only if this frame has not - * been copied before. When "getOutput" is called from the main thread, - * it gives the last copied IplImage. - * - *****************************************************************************/ - - -@implementation CaptureDelegate - -- (id)init { - [super init]; - newFrame = 0; - imagedata = NULL; - bgr_imagedata = NULL; - currSize = 0; - image = NULL; - bgr_image = NULL; - bgr_image_r90 = NULL; - return self; -} - - --(void)dealloc { - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - cvReleaseImage(&image); - cvReleaseImage(&bgr_image); - cvReleaseImage(&bgr_image_r90); - [super dealloc]; -} - - - -- (void)captureOutput:(AVCaptureOutput *)captureOutput -didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer -fromConnection:(AVCaptureConnection *)connection{ - - // Failed - // connection.videoOrientation = AVCaptureVideoOrientationPortrait; - - CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); - - CVBufferRetain(imageBuffer); - CVImageBufferRef imageBufferToRelease = mCurrentImageBuffer; - - @synchronized (self) { - - mCurrentImageBuffer = imageBuffer; - newFrame = 1; - } - - CVBufferRelease(imageBufferToRelease); - -} - - --(IplImage*) getOutput { - //return bgr_image; - return bgr_image_r90; -} - --(int) updateImage { - if (newFrame==0) return 0; - CVPixelBufferRef pixels; - - @synchronized (self){ - pixels = CVBufferRetain(mCurrentImageBuffer); - newFrame = 0; - } - - CVPixelBufferLockBaseAddress(pixels, 0); - uint32_t* baseaddress = (uint32_t*)CVPixelBufferGetBaseAddress(pixels); - - size_t width = CVPixelBufferGetWidth(pixels); - size_t height = CVPixelBufferGetHeight(pixels); - size_t rowBytes = CVPixelBufferGetBytesPerRow(pixels); - - if (rowBytes != 0) { - - if (currSize != rowBytes*height*sizeof(char)) { - currSize = rowBytes*height*sizeof(char); - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - imagedata = (char*)malloc(currSize); - bgr_imagedata = (char*)malloc(currSize); - } - - memcpy(imagedata, baseaddress, currSize); - - if (image == NULL) { - image = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, 4); - } - image->width =width; - image->height = height; - image->nChannels = 4; - image->depth = IPL_DEPTH_8U; - image->widthStep = (int)rowBytes; - image->imageData = imagedata; - image->imageSize = currSize; - - if (bgr_image == NULL) { - bgr_image = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, 3); - } - bgr_image->width =width; - bgr_image->height = height; - bgr_image->nChannels = 3; - bgr_image->depth = IPL_DEPTH_8U; - bgr_image->widthStep = (int)rowBytes; - bgr_image->imageData = bgr_imagedata; - bgr_image->imageSize = currSize; - - cvCvtColor(image, bgr_image, CV_BGRA2BGR); - - // image taken from the buffer is incorrected rotated. I'm using cvTranspose + cvFlip. - // There should be an option in iOS API to rotate the buffer output orientation. - // iOS provides hardware accelerated rotation through AVCaptureConnection class - // I can't get it work. - if (bgr_image_r90 == NULL){ - bgr_image_r90 = cvCreateImage(cvSize(height, width), IPL_DEPTH_8U, 3); - } - cvTranspose(bgr_image, bgr_image_r90); - cvFlip(bgr_image_r90, NULL, 1); - - } - - CVPixelBufferUnlockBaseAddress(pixels, 0); - CVBufferRelease(pixels); - - return 1; -} - -@end - - -/***************************************************************************** - * - * CvCaptureFile Implementation. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -CvCaptureFile::CvCaptureFile(const char* filename) { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - mMovieReader = nil; - image = NULL; - bgr_image = NULL; - imagedata = NULL; - bgr_imagedata = NULL; - currSize = 0; - - movieWidth = 0; - movieHeight = 0; - movieFPS = 0; - currentFPS = 0; - movieDuration = 0; - changedPos = 0; - - started = 0; - - AVURLAsset *asset = [AVURLAsset URLAssetWithURL: - [NSURL fileURLWithPath: [NSString stringWithUTF8String:filename]] - options:nil]; - - AVAssetTrack* videoTrack = nil; - NSArray* tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; - if ([tracks count] == 1) - { - videoTrack = [tracks objectAtIndex:0]; - - movieWidth = videoTrack.naturalSize.width; - movieHeight = videoTrack.naturalSize.height; - movieFPS = videoTrack.nominalFrameRate; - - currentFPS = movieFPS; //Debugging !! should be getFPS(); - //Debugging. need to be checked - - // In ms - movieDuration = videoTrack.timeRange.duration.value/videoTrack.timeRange.duration.timescale * 1000; - - started = 1; - NSError* error = nil; - mMovieReader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; - if (error) - NSLog(@"%@", [error localizedDescription]); - - NSDictionary* videoSettings = - [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA] - forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey]; - - [mMovieReader addOutput:[AVAssetReaderTrackOutput - assetReaderTrackOutputWithTrack:videoTrack - outputSettings:videoSettings]]; - [mMovieReader startReading]; - } - - /* - // Asynchronously open the video in another thread. Always fail. - [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler: - ^{ - // The completion block goes here. - dispatch_async(dispatch_get_main_queue(), - ^{ - AVAssetTrack* ::videoTrack = nil; - NSArray* ::tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; - if ([tracks count] == 1) - { - videoTrack = [tracks objectAtIndex:0]; - - movieWidth = videoTrack.naturalSize.width; - movieHeight = videoTrack.naturalSize.height; - movieFPS = videoTrack.nominalFrameRate; - currentFPS = movieFPS; //Debugging !! should be getFPS(); - //Debugging. need to be checked - movieDuration = videoTrack.timeRange.duration.value/videoTrack.timeRange.duration.timescale * 1000; - started = 1; - - NSError* ::error = nil; - // mMovieReader is a member variable - mMovieReader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; - if (error) - NSLog(@"%@", [error localizedDescription]); - - NSDictionary* ::videoSettings = - [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA] -forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey]; - -[mMovieReader addOutput:[AVAssetReaderTrackOutput -assetReaderTrackOutputWithTrack:videoTrack -outputSettings:videoSettings]]; -[mMovieReader startReading]; -} -}); - -}]; - */ - -[localpool drain]; -} - -CvCaptureFile::~CvCaptureFile() { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - cvReleaseImage(&image); - cvReleaseImage(&bgr_image); - [mMovieReader release]; - [localpool drain]; -} - -int CvCaptureFile::didStart() { - return started; -} - -bool CvCaptureFile::grabFrame() { - - //everything is done in queryFrame; - currentFPS = movieFPS; - return 1; - - - /* - double t1 = getProperty(CV_CAP_PROP_POS_MSEC); - [mCaptureSession stepForward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - if (t2>t1 && !changedPos) { - currentFPS = 1000.0/(t2-t1); - } else { - currentFPS = movieFPS; - } - changedPos = 0; - - */ - -} - - -IplImage* CvCaptureFile::retrieveFramePixelBuffer() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - if (mMovieReader.status != AVAssetReaderStatusReading){ - - return NULL; - } - - - AVAssetReaderTrackOutput * output = [mMovieReader.outputs objectAtIndex:0]; - CMSampleBufferRef sampleBuffer = [output copyNextSampleBuffer]; - if (!sampleBuffer) { - [localpool drain]; - return NULL; - } - CVPixelBufferRef frame = CMSampleBufferGetImageBuffer(sampleBuffer); - CVPixelBufferRef pixels = CVBufferRetain(frame); - - CVPixelBufferLockBaseAddress(pixels, 0); - - uint32_t* baseaddress = (uint32_t*)CVPixelBufferGetBaseAddress(pixels); - size_t width = CVPixelBufferGetWidth(pixels); - size_t height = CVPixelBufferGetHeight(pixels); - size_t rowBytes = CVPixelBufferGetBytesPerRow(pixels); - - if (rowBytes != 0) { - - if (currSize != rowBytes*height*sizeof(char)) { - currSize = rowBytes*height*sizeof(char); - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - imagedata = (char*)malloc(currSize); - bgr_imagedata = (char*)malloc(currSize); - } - - memcpy(imagedata, baseaddress, currSize); - - if (image == NULL) { - image = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, 4); - } - - image->width =width; - image->height = height; - image->nChannels = 4; - image->depth = IPL_DEPTH_8U; - image->widthStep = rowBytes; - image->imageData = imagedata; - image->imageSize = currSize; - - - if (bgr_image == NULL) { - bgr_image = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, 3); - } - - bgr_image->width =width; - bgr_image->height = height; - bgr_image->nChannels = 3; - bgr_image->depth = IPL_DEPTH_8U; - bgr_image->widthStep = rowBytes; - bgr_image->imageData = bgr_imagedata; - bgr_image->imageSize = currSize; - - cvCvtColor(image, bgr_image,CV_BGRA2BGR); - - } - - CVPixelBufferUnlockBaseAddress(pixels, 0); - CVBufferRelease(pixels); - CMSampleBufferInvalidate(sampleBuffer); - CFRelease(sampleBuffer); - - [localpool drain]; - return bgr_image; -} - - -IplImage* CvCaptureFile::retrieveFrame(int) { - return retrieveFramePixelBuffer(); -} - -IplImage* CvCaptureFile::queryFrame() { - grabFrame(); - return retrieveFrame(0); -} - -double CvCaptureFile::getFPS() { - - /* - if (mCaptureSession == nil) return 0; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - double now = getProperty(CV_CAP_PROP_POS_MSEC); - double retval = 0; - if (now == 0) { - [mCaptureSession stepForward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - [mCaptureSession stepBackward]; - retval = 1000.0 / (t2-now); - } else { - [mCaptureSession stepBackward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - [mCaptureSession stepForward]; - retval = 1000.0 / (now-t2); - } - [localpool drain]; - return retval; - */ - return 30.0; //TODO: Debugging -} - -double CvCaptureFile::getProperty(int property_id){ - - /* - if (mCaptureSession == nil) return 0; - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - double retval; - QTTime t; - - switch (property_id) { - case CV_CAP_PROP_POS_MSEC: - [[mCaptureSession attributeForKey:QTMovieCurrentTimeAttribute] getValue:&t]; - retval = t.timeValue * 1000.0 / t.timeScale; - break; - case CV_CAP_PROP_POS_FRAMES: - retval = movieFPS * getProperty(CV_CAP_PROP_POS_MSEC) / 1000; - break; - case CV_CAP_PROP_POS_AVI_RATIO: - retval = (getProperty(CV_CAP_PROP_POS_MSEC)) / (movieDuration ); - break; - case CV_CAP_PROP_FRAME_WIDTH: - retval = movieWidth; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - retval = movieHeight; - break; - case CV_CAP_PROP_FPS: - retval = currentFPS; - break; - case CV_CAP_PROP_FOURCC: - default: - retval = 0; - } - - [localpool drain]; - return retval; - */ - return 1.0; //Debugging -} - -bool CvCaptureFile::setProperty(int property_id, double value) { - - /* - if (mCaptureSession == nil) return false; - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - bool retval = false; - QTTime t; - - double ms; - - switch (property_id) { - case CV_CAP_PROP_POS_MSEC: - [[mCaptureSession attributeForKey:QTMovieCurrentTimeAttribute] getValue:&t]; - t.timeValue = value * t.timeScale / 1000; - [mCaptureSession setCurrentTime:t]; - changedPos = 1; - retval = true; - break; - case CV_CAP_PROP_POS_FRAMES: - ms = (value*1000.0 -5)/ currentFPS; - retval = setProperty(CV_CAP_PROP_POS_MSEC, ms); - break; - case CV_CAP_PROP_POS_AVI_RATIO: - ms = value * movieDuration; - retval = setProperty(CV_CAP_PROP_POS_MSEC, ms); - break; - case CV_CAP_PROP_FRAME_WIDTH: - //retval = movieWidth; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - //retval = movieHeight; - break; - case CV_CAP_PROP_FPS: - //etval = currentFPS; - break; - case CV_CAP_PROP_FOURCC: - default: - retval = false; - } - - [localpool drain]; - - return retval; - */ - return true; -} - - -/***************************************************************************** - * - * CvVideoWriter Implementation. - * - * CvVideoWriter is the instantiation of a video output class - * - *****************************************************************************/ - - -CvVideoWriter_AVFoundation::CvVideoWriter_AVFoundation(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color) { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - - frameCount = 0; - movieFPS = fps; - movieSize = frame_size; - movieColor = is_color; - argbimage = cvCreateImage(movieSize, IPL_DEPTH_8U, 4); - path = [[[NSString stringWithCString:filename encoding:NSASCIIStringEncoding] stringByExpandingTildeInPath] retain]; - - - /* - AVFileTypeQuickTimeMovie - UTI for the QuickTime movie file format. - The value of this UTI is com.apple.quicktime-movie. Files are identified with the .mov and .qt extensions. - - AVFileTypeMPEG4 - UTI for the MPEG-4 file format. - The value of this UTI is public.mpeg-4. Files are identified with the .mp4 extension. - - AVFileTypeAppleM4V - UTI for the iTunes video file format. - The value of this UTI is com.apple.mpeg-4-video. Files are identified with the .m4v extension. - - AVFileType3GPP - UTI for the 3GPP file format. - The value of this UTI is public.3gpp. Files are identified with the .3gp, .3gpp, and .sdv extensions. - */ - - NSString *fileExt =[[[path pathExtension] lowercaseString] copy]; - if ([fileExt isEqualToString:@"mov"] || [fileExt isEqualToString:@"qt"]){ - fileType = [AVFileTypeQuickTimeMovie copy]; - }else if ([fileExt isEqualToString:@"mp4"]){ - fileType = [AVFileTypeMPEG4 copy]; - }else if ([fileExt isEqualToString:@"m4v"]){ - fileType = [AVFileTypeAppleM4V copy]; -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - }else if ([fileExt isEqualToString:@"3gp"] || [fileExt isEqualToString:@"3gpp"] || [fileExt isEqualToString:@"sdv"] ){ - fileType = [AVFileType3GPP copy]; -#endif - } else{ - fileType = [AVFileTypeMPEG4 copy]; //default mp4 - } - [fileExt release]; - - char cc[5]; - cc[0] = fourcc & 255; - cc[1] = (fourcc >> 8) & 255; - cc[2] = (fourcc >> 16) & 255; - cc[3] = (fourcc >> 24) & 255; - cc[4] = 0; - int cc2 = CV_FOURCC(cc[0], cc[1], cc[2], cc[3]); - if (cc2!=fourcc) { - cout << "WARNING: Didn't properly encode FourCC. Expected " << fourcc - << " but got " << cc2 << "." << endl; - //exception; - } - - // Two codec supported AVVideoCodecH264 AVVideoCodecJPEG - // On iPhone 3G H264 is not supported. - if (fourcc == CV_FOURCC('J','P','E','G') || fourcc == CV_FOURCC('j','p','e','g') || - fourcc == CV_FOURCC('M','J','P','G') || fourcc == CV_FOURCC('m','j','p','g') ){ - codec = [AVVideoCodecJPEG copy]; // Use JPEG codec if specified, otherwise H264 - }else if(fourcc == CV_FOURCC('H','2','6','4') || fourcc == CV_FOURCC('a','v','c','1')){ - codec = [AVVideoCodecH264 copy]; - }else{ - codec = [AVVideoCodecH264 copy]; // default canonical H264. - - } - - //NSLog(@"Path: %@", path); - - NSError *error = nil; - - - // Make sure the file does not already exist. Necessary to overwirte?? - /* - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:path]){ - [fileManager removeItemAtPath:path error:&error]; - } - */ - - // Wire the writer: - // Supported file types: - // AVFileTypeQuickTimeMovie AVFileTypeMPEG4 AVFileTypeAppleM4V AVFileType3GPP - - mMovieWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:path] - fileType:fileType - error:&error]; - //NSParameterAssert(mMovieWriter); - - NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys: - codec, AVVideoCodecKey, - [NSNumber numberWithInt:movieSize.width], AVVideoWidthKey, - [NSNumber numberWithInt:movieSize.height], AVVideoHeightKey, - nil]; - - mMovieWriterInput = [[AVAssetWriterInput - assetWriterInputWithMediaType:AVMediaTypeVideo - outputSettings:videoSettings] retain]; - - //NSParameterAssert(mMovieWriterInput); - //NSParameterAssert([mMovieWriter canAddInput:mMovieWriterInput]); - - [mMovieWriter addInput:mMovieWriterInput]; - - mMovieWriterAdaptor = [[AVAssetWriterInputPixelBufferAdaptor alloc] initWithAssetWriterInput:mMovieWriterInput sourcePixelBufferAttributes:nil]; - - - //Start a session: - [mMovieWriter startWriting]; - [mMovieWriter startSessionAtSourceTime:kCMTimeZero]; - - - if(mMovieWriter.status == AVAssetWriterStatusFailed){ - NSLog(@"%@", [mMovieWriter.error localizedDescription]); - // TODO: error handling, cleanup. Throw execption? - // return; - } - - [localpool drain]; -} - - -CvVideoWriter_AVFoundation::~CvVideoWriter_AVFoundation() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - [mMovieWriterInput markAsFinished]; - [mMovieWriter finishWriting]; - [mMovieWriter release]; - [mMovieWriterInput release]; - [mMovieWriterAdaptor release]; - [path release]; - [codec release]; - [fileType release]; - cvReleaseImage(&argbimage); - - [localpool drain]; - -} - -bool CvVideoWriter_AVFoundation::writeFrame(const IplImage* iplimage) { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - // writer status check - if (![mMovieWriterInput isReadyForMoreMediaData] || mMovieWriter.status != AVAssetWriterStatusWriting ) { - NSLog(@"[mMovieWriterInput isReadyForMoreMediaData] Not ready for media data or ..."); - NSLog(@"mMovieWriter.status: %d. Error: %@", mMovieWriter.status, [mMovieWriter.error localizedDescription]); - [localpool drain]; - return false; - } - - BOOL success = FALSE; - - if (iplimage->height!=movieSize.height || iplimage->width!=movieSize.width){ - cout<<"Frame size does not match video size."<nChannels == 3); - cvCvtColor(iplimage, argbimage, CV_BGR2BGRA); - }else{ - //assert(iplimage->nChannels == 1); - cvCvtColor(iplimage, argbimage, CV_GRAY2BGRA); - } - //IplImage -> CGImage conversion - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - NSData *nsData = [NSData dataWithBytes:argbimage->imageData length:argbimage->imageSize]; - CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)nsData); - CGImageRef cgImage = CGImageCreate(argbimage->width, argbimage->height, - argbimage->depth, argbimage->depth * argbimage->nChannels, argbimage->widthStep, - colorSpace, kCGImageAlphaLast|kCGBitmapByteOrderDefault, - provider, NULL, false, kCGRenderingIntentDefault); - - //CGImage -> CVPixelBufferRef coversion - CVPixelBufferRef pixelBuffer = NULL; - CFDataRef cfData = CGDataProviderCopyData(CGImageGetDataProvider(cgImage)); - int status = CVPixelBufferCreateWithBytes(NULL, - movieSize.width, - movieSize.height, - kCVPixelFormatType_32BGRA, - (void*)CFDataGetBytePtr(cfData), - CGImageGetBytesPerRow(cgImage), - NULL, - 0, - NULL, - &pixelBuffer); - if(status == kCVReturnSuccess){ - success = [mMovieWriterAdaptor appendPixelBuffer:pixelBuffer - withPresentationTime:CMTimeMake(frameCount, movieFPS)]; - } - - //cleanup - CFRelease(cfData); - CVPixelBufferRelease(pixelBuffer); - CGImageRelease(cgImage); - CGDataProviderRelease(provider); - CGColorSpaceRelease(colorSpace); - - [localpool drain]; - - if (success) { - frameCount ++; - //NSLog(@"Frame #%d", frameCount); - return true; - }else{ - NSLog(@"Frame appendPixelBuffer failed."); - return false; - } - -} diff --git a/modules/highgui/src/cap_cmu.cpp b/modules/highgui/src/cap_cmu.cpp deleted file mode 100644 index 7b7845d..0000000 --- a/modules/highgui/src/cap_cmu.cpp +++ /dev/null @@ -1,551 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef WIN32 - -/****************** Capturing video from camera via CMU lib *******************/ - -#ifdef HAVE_CMU1394 - -// This firewire capability added by Philip Gruebele (pgruebele@cox.net). -// For this to work you need to install the CMU firewire DCAM drivers, -// located at http://www-2.cs.cmu.edu/~iwan/1394/. -#include "1394camera.h" - -class CvCaptureCAM_CMU : public CvCapture -{ -public: - CvCaptureCAM_CMU() - { - index = -1; - image = 0; - } - - virtual ~CvCaptureCAM_CMU() - { - close(); - } - - virtual bool open(int cameraId); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - -protected: - C1394Camera* camera(); - CvSize getSize(); - int getDepth(); - int getNChannels(); - - bool setVideoSize(int, int); - bool setMode(int mode); - bool setFrameRate(int rate); - bool setFormat(int format); - - int fps; // 0-5 - int mode; // 0-7 - int format; // 0-2, 7 ? - int index; - IplImage* image; -}; - -// CMU 1394 camera stuff. -// This firewire capability added by Philip Gruebele (pgruebele@cox.net) -// and modified by Roman Stanchak (rstanchak@yahoo.com). -// For this to work you need to install the CMU firewire DCAM drivers, -// located at http://www-2.cs.cmu.edu/~iwan/1394/. -#define CMU_MAX_CAMERAS 20 -int CMU_numCameras = 0; -int CMU_numActiveCameras = 0; -bool CMU_useCameraFlags[CMU_MAX_CAMERAS]; -C1394Camera *CMU_theCamera = 0; - -// stupid defines for mode, format, FPS -#define CV_CAP_IEEE1394_FPS_1_875 0 -#define CV_CAP_IEEE1394_FPS_3_75 1 -#define CV_CAP_IEEE1394_FPS_7_5 2 -#define CV_CAP_IEEE1394_FPS_15 3 -#define CV_CAP_IEEE1394_FPS_30 4 -#define CV_CAP_IEEE1394_FPS_60 5 - -// index by size, color -#define CV_CAP_IEEE1394_COLOR_MONO 0 -#define CV_CAP_IEEE1394_COLOR_MONO16 1 -#define CV_CAP_IEEE1394_COLOR_YUV444 2 -#define CV_CAP_IEEE1394_COLOR_YUV422 3 -#define CV_CAP_IEEE1394_COLOR_YUV411 4 -#define CV_CAP_IEEE1394_COLOR_RGB 5 - -#define CV_CAP_IEEE1394_SIZE_160X120 0 -#define CV_CAP_IEEE1394_SIZE_320X240 1 -#define CV_CAP_IEEE1394_SIZE_640X480 2 -#define CV_CAP_IEEE1394_SIZE_800X600 3 -#define CV_CAP_IEEE1394_SIZE_1024X768 4 -#define CV_CAP_IEEE1394_SIZE_1280X960 5 -#define CV_CAP_IEEE1394_SIZE_1600X1200 6 - -// given color, size, output format -// 1 16 444 422 411 RGB -static char CV_CAP_IEEE1394_FORMAT[7][6] = -{ - {-1, -1, 0, -1, -1, -1}, // 160x120 - {-1, -1, -1, 0, -1, -1}, // 320x240 - { 0, 0, -1, 0, 0, 0}, // 640x480 - { 1, 1, -1, 1, -1, 1}, // 800x600 - { 1, 1, -1, 1, -1, 1}, // 1024x768 - { 2, 2, -1, 2, -1, 2}, // 1280x960 - { 2, 2, -1, 2, -1, 2} // 1600x1200 -}; - -// given color, size, output corresponding mode -static char CV_CAP_IEEE1394_MODE[7][6] = -{ - {-1, -1, 0, -1, -1, -1}, // 160x120 - {-1, -1, -1, 1, -1, -1}, // 320x240 - { 5, 6, -1, 3, 2, 4}, // 640x480 - { 2, 6, -1, 0, -1, 1}, // 800x600 - { 5, 7, -1, 3, -1, 4}, // 1024x768 - { 2, 6, -1, 0, -1, 1}, // 1280x960 - { 5, 7, -1, 3, -1, 4} // 1600x1200 -}; - -// given format, mode, return COLOR -static char CV_CAP_IEEE1394_COLOR[2][8] = -{ - { - CV_CAP_IEEE1394_COLOR_YUV444, - CV_CAP_IEEE1394_COLOR_YUV422, - CV_CAP_IEEE1394_COLOR_YUV411, - CV_CAP_IEEE1394_COLOR_YUV422, - CV_CAP_IEEE1394_COLOR_RGB, - CV_CAP_IEEE1394_COLOR_MONO, - CV_CAP_IEEE1394_COLOR_MONO16 - }, - { - CV_CAP_IEEE1394_COLOR_YUV422, - CV_CAP_IEEE1394_COLOR_RGB, - CV_CAP_IEEE1394_COLOR_MONO, - CV_CAP_IEEE1394_COLOR_YUV422, - CV_CAP_IEEE1394_COLOR_RGB, - CV_CAP_IEEE1394_COLOR_MONO, - CV_CAP_IEEE1394_COLOR_MONO16, - CV_CAP_IEEE1394_COLOR_MONO16 - } -}; - -// convert frame rate to suitable enum -/*static int icvFrameRateToIndex_CMU(double framerate){ - if(framerate > 30) return CV_CAP_IEEE1394_FPS_60; - else if(framerate > 15) return CV_CAP_IEEE1394_FPS_30; - else if(framerate > 7.5) return CV_CAP_IEEE1394_FPS_15; - else if(framerate > 3.75) return CV_CAP_IEEE1394_FPS_7_5; - else if(framerate > 1.875) return CV_CAP_IEEE1394_FPS_3_75; - return CV_CAP_IEEE1394_FPS_1_875; -}*/ - -#if _MSC_VER >= 1200 -#pragma comment(lib,"1394camera.lib") -#endif - -C1394Camera* CvCaptureCAM_CMU::camera() -{ - return CMU_theCamera && index >= 0 ? &CMU_theCamera[index] : 0; -} - -// return the size of the image -CvSize CvCaptureCAM_CMU::getSize() -{ - C1394Camera* cmucam = camera(); - unsigned long width = 0, height = 0; - cmucam->GetVideoFrameDimensions( &width, &height ); - return cvSize((int)width, (int)height); -} - -// return the opencv depth flag corresponding to the camera format -int CvCaptureCAM_CMU::getDepth() -{ - C1394Camera* cmucam = camera(); - int format = cmucam->GetVideoFormat(); - int mode = cmucam->GetVideoMode(); - - // TODO - if( format==7 ) { - assert(0); - return 1; - } - // irrelvant to depth - if( format > 1 ) - format = 1; - - if( CV_CAP_IEEE1394_COLOR[format][mode]==CV_CAP_IEEE1394_COLOR_MONO16 ) - return IPL_DEPTH_16S; - - return IPL_DEPTH_8U; -} - -// return the number of channels for camera -int CvCaptureCAM_CMU::getNChannels() -{ - C1394Camera* cmucam = camera(); - int format = cmucam->GetVideoFormat(); - int mode = cmucam->GetVideoMode(); - - if( format==7 ){ - assert(0); - return 1; - } - - // irrelvant to nchannels - if( format > 1 ) - format = 1; - - switch(CV_CAP_IEEE1394_COLOR[format][mode]){ - case CV_CAP_IEEE1394_COLOR_RGB: - return 3; - case CV_CAP_IEEE1394_COLOR_MONO: - case CV_CAP_IEEE1394_COLOR_MONO16: - return 1; - case CV_CAP_IEEE1394_COLOR_YUV422: - case CV_CAP_IEEE1394_COLOR_YUV444: - case CV_CAP_IEEE1394_COLOR_YUV411: - return 3; - default: - ; - } - return -1; -} - -bool CvCaptureCAM_CMU::open( int _index ) -{ - close(); - - // if first time, then allocate all available cameras - if( CMU_numCameras == 0 ) - { - CMU_numActiveCameras = 0; - CMU_theCamera = new C1394Camera[CMU_MAX_CAMERAS]; - - //////////////////////////////////////////////////////////////////////////////////////////////////////// - // create all cameras - try - { - // create camera0 - if( CMU_theCamera[0].CheckLink() != CAM_SUCCESS ) - throw 1; - - // we have one pin per camera - CMU_numCameras = CMU_theCamera[0].GetNumberCameras(); - - // allocate remaining cameras - for(int i = 1; i < CMU_numCameras && i=0 && !found_format; rate--) - { - for (int color=CV_CAP_IEEE1394_COLOR_RGB; color>=0 && !found_format; color--) - { - for (int size=CV_CAP_IEEE1394_SIZE_1600X1200; size>=0 && !found_format; size--) - { - int format = CV_CAP_IEEE1394_FORMAT[size][color]; - int mode = CV_CAP_IEEE1394_MODE[size][color]; - if (format!=-1 && mode!=-1 && - CMU_theCamera[_index].HasVideoFrameRate(format,mode,rate)) - { - CMU_theCamera[_index].SetVideoFormat(format); - CMU_theCamera[_index].SetVideoMode(mode); - CMU_theCamera[_index].SetVideoFrameRate(rate); - found_format = (CMU_theCamera[_index].StartImageAcquisition() == CAM_SUCCESS); - } - } - } - } - - // try format 7 - if(!found_format){ - CMU_theCamera[_index].SetVideoFormat(7); - CMU_theCamera[_index].SetVideoMode(0); - if(CMU_theCamera[_index].StartImageAcquisition() != CAM_SUCCESS){ - // no format found - throw 9; - } - } - - index = _index; - size = getSize(); - // allocate image frame - image = cvCreateImage( size, 8, 3 ); - cvZero(image); - - // successfully activated camera - CMU_numActiveCameras++; - CMU_useCameraFlags[_index] = true; - } - catch ( int ) - { - return false; - } - - return true; -} - -void CvCaptureCAM_CMU::close() -{ - C1394Camera* cmucam = camera(); - if( cmucam ) - { - cvReleaseImage( &image ); - cmucam->StopImageAcquisition(); - CMU_useCameraFlags[index] = false; - index = -1; - - if( --CMU_numActiveCameras == 0 ) - { - delete[] CMU_theCamera; - CMU_theCamera = 0; - CMU_numCameras = 0; - } - } -} - - -bool CvCaptureCAM_CMU::grabFrame() -{ - C1394Camera* cmucam = camera(); - return cmucam ? cmucam->AcquireImage() == CAM_SUCCESS : false; -} - -/*static void swapRedBlue(IplImage * im) -{ - uchar * ptr = (uchar *) im->imageData; - uchar t; - for(int i=0; iheight; i++){ - ptr = (uchar *) im->imageData+im->widthStep*i; - for(int j=0; jwidth; j++){ - t = ptr[0]; - ptr[0] = ptr[2]; - ptr[2] = t; - ptr+=3; - } - } -}*/ - -IplImage* CvCaptureCAM_CMU::retrieveFrame(int) -{ - C1394Camera* cmucam = camera(); - if( !cmucam ) - return 0; - cmucam->getRGB((uchar*)image->imageData, image->imageSize); - cvConvertImage( image, image, CV_CVTIMG_SWAP_RB ); - return image; -} - - -double CvCaptureCAM_CMU::getProperty( int property_id ) -{ - C1394Camera* cmucam = camera(); - if( !cmucam ) - return 0; - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return image->width; - case CV_CAP_PROP_FRAME_HEIGHT: - return image->height; - case CV_CAP_PROP_FPS: - return cmucam->GetVideoFrameRate(); - case CV_CAP_PROP_MODE: - return cmucam->GetVideoMode(); - case CV_CAP_PROP_FORMAT: - return cmucam->GetVideoFormat(); - } - return 0; -} - -bool CvCaptureCAM_CMU::setVideoSize(int, int) -{ - return false; -} - -bool CvCaptureCAM_CMU::setMode(int mode) -{ - int format; - C1394Camera* cmucam = camera(); - if( !cmucam ) - return false; - format = cmucam->GetVideoFormat(); - if( mode < 0 || mode > 7 || !cmucam->HasVideoMode(format, mode)) - return false; - cmucam->StopImageAcquisition(); - cmucam->SetVideoMode(mode); - cmucam->StartImageAcquisition(); - return true; -} - -bool CvCaptureCAM_CMU::setFrameRate(int rate) -{ - int format, mode; - C1394Camera* cmucam = camera(); - if( !cmucam ) - return false; - mode = cmucam->GetVideoMode(); - format = cmucam->GetVideoFormat(); - if( rate < 0 || rate > 5 || !cmucam->HasVideoFrameRate(format, mode, rate) ) - return false; - cmucam->StopImageAcquisition(); - cmucam->SetVideoFrameRate(rate); - cmucam->StartImageAcquisition(); - return true; -} - -bool CvCaptureCAM_CMU::setFormat(int format) -{ - C1394Camera* cmucam = camera(); - if( !cmucam ) - return false; - if( format < 0 || format > 2 || !cmucam->HasVideoFormat(format) ) - return false; - cmucam->StopImageAcquisition(); - cmucam->SetVideoFormat(format); - cmucam->StartImageAcquisition(); - return true; -} - -bool CvCaptureCAM_CMU::setProperty( int property_id, double value ) -{ - bool retval = false; - int ival = cvRound(value); - C1394Camera* cmucam = camera(); - if( !cmucam ) - return false; - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - case CV_CAP_PROP_FRAME_HEIGHT: - { - int width, height; - if (property_id == CV_CAP_PROP_FRAME_WIDTH) - { - width = ival; - height = width*3/4; - } - else { - height = ival; - width = height*4/3; - } - retval = setVideoSize(width, height); - } - break; - case CV_CAP_PROP_FPS: - retval = setFrameRate(ival); - break; - case CV_CAP_PROP_MODE: - retval = setMode(ival); - break; - case CV_CAP_PROP_FORMAT: - retval = setFormat(ival); - break; - } - - // resize image if its not the right size anymore - CvSize size = getSize(); - if( !image || image->width != size.width || image->height != size.height ) - { - cvReleaseImage( &image ); - image = cvCreateImage( size, 8, 3 ); - } - return retval; -} - -CvCapture * cvCreateCameraCapture_CMU (int index) -{ - CvCaptureCAM_CMU* capture = new CvCaptureCAM_CMU; - if( capture->open(index) ) - return capture; - delete capture; - return 0; -} - -#endif // CMU -#endif // WIN32 diff --git a/modules/highgui/src/cap_dc1394.cpp b/modules/highgui/src/cap_dc1394.cpp deleted file mode 100644 index 9706bd1..0000000 --- a/modules/highgui/src/cap_dc1394.cpp +++ /dev/null @@ -1,1109 +0,0 @@ -/* This is the contributed code: -Firewire and video4linux camera support for highgui - -2003-03-12 Magnus Lundin -lundin@mlu.mine.nu - -THIS EXEPERIMENTAL CODE -Tested on 2.4.19 with 1394, video1394, v4l, dc1394 and raw1394 support - -This set of files adds support for firevre and usb cameras. -First it tries to install a firewire camera, -if that fails it tries a v4l/USB camera - -It has been tested with the motempl sample program - -INSTALLATION -Install OpenCV -Install v4l -Install dc1394 raw1394 - coriander should work with your camera - Backup highgui folder - Copy new files - cd into highgui folder - make clean (cvcap.cpp must be rebuilt) - make - make install - - -The build is controlled by the following entries in the highgui Makefile: - -libhighgui_la_LIBADD = -L/usr/X11R6/lib -lXm -lMrm -lUil -lpng -ljpeg -lz -ltiff -lavcodec -lraw1394 -ldc1394_control -DEFS = -DHAVE_CONFIG_H -DHAVE_DC1394 HAVE_CAMV4L - - -Now it should be possible to use highgui camera functions, works for me. - - -THINGS TO DO -Better ways to select 1394 or v4l camera -Better support for videosize -Format7 - -Comments and changes welcome -/Magnus - -2005-10-19 Roman Stanchak -rstanchak@yahoo.com - -Support added for setting MODE and other DC1394 properties. Also added CONVERT_RGB flag -which indicates whether or not color conversion is performed in cvRetrieveFrame. The default -for CONVERT_RGB=1 for backward compatibility. - -Tested with 2.6.12 with libdc1394-1.0.0, libraw1394-0.10.1 using a Point Grey Flea - -*/ - - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if !defined WIN32 && defined HAVE_DC1394 - -#include -#include -#include -#include - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -#define CV_DC1394_CALL(expr) \ -if((expr)<0){ \ - OPENCV_ERROR(CV_StsInternal, "", "libdc1394 function call returned < 0"); \ -} - -#define DELAY 50000 - -// bpp for 16-bits cameras... this value works for PtGrey DragonFly... -#define MONO16_BPP 8 - -/* should be in pixelformat */ -static void uyv2bgr(const unsigned char *src, unsigned char *dest, unsigned long long int NumPixels); -static void uyvy2bgr(const unsigned char *src, unsigned char *dest, unsigned long long int NumPixels); -static void uyyvyy2bgr(const unsigned char *src, unsigned char *dest, unsigned long long int NumPixels); -static void y2bgr(const unsigned char *src, unsigned char *dest, unsigned long long int NumPixels); -static void y162bgr(const unsigned char *src, unsigned char *dest, unsigned long long int NumPixels, int bits); -static void rgb482bgr(const unsigned char *src8, unsigned char *dest, unsigned long long int NumPixels, int bits); - -static const char * videodev[4]={ - "/dev/video1394/0", - "/dev/video1394/1", - "/dev/video1394/2", - "/dev/video1394/3" -}; - -typedef struct CvCaptureCAM_DC1394 -{ - raw1394handle_t handle; - nodeid_t camera_node; - dc1394_cameracapture* camera; - int format; - int mode; - int color_mode; - int frame_rate; - const char * device_name; - IplImage frame; - int convert; - int buffer_is_writeable; // indicates whether frame.imageData is allocated by OpenCV or DC1394 -} -CvCaptureCAM_DC1394; - -static void icvCloseCAM_DC1394( CvCaptureCAM_DC1394* capture ); - -static int icvGrabFrameCAM_DC1394( CvCaptureCAM_DC1394* capture ); -static IplImage* icvRetrieveFrameCAM_DC1394( CvCaptureCAM_DC1394* capture, int ); - -static double icvGetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id ); -static int icvSetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id, double value ); - -// utility functions -static int icvFormatSupportedCAM_DC1394(int format, quadlet_t formats); -static int icvModeSupportedCAM_DC1394(int format, int mode, quadlet_t modes); -static int icvColorMode( int mode ); -static unsigned int icvGetBestFrameRate( CvCaptureCAM_DC1394 * capture, int format, int mode); -static int icvResizeFrame(CvCaptureCAM_DC1394 * capture); - -/*********************** Implementations ***************************************/ -#define MAX_PORTS 3 -#define MAX_CAMERAS 8 -#define NUM_BUFFERS 8 -struct raw1394_portinfo ports[MAX_PORTS]; -static raw1394handle_t handles[MAX_PORTS]; -static int camCount[MAX_PORTS]; -static int numPorts = -1; -static int numCameras = 0; -static nodeid_t *camera_nodes; -struct camnode {dc1394_cameracapture cam;int portnum;} cameras[MAX_CAMERAS]; - -static const int preferred_modes[] -= { - // uncomment the following line to test a particular mode: - //FORMAT_VGA_NONCOMPRESSED, MODE_640x480_MONO16, 0, - FORMAT_SVGA_NONCOMPRESSED_2, - MODE_1600x1200_RGB, MODE_1600x1200_YUV422, MODE_1280x960_RGB, MODE_1280x960_YUV422, - MODE_1600x1200_MONO, MODE_1280x960_MONO, MODE_1600x1200_MONO16, MODE_1280x960_MONO16, - FORMAT_SVGA_NONCOMPRESSED_1, - MODE_1024x768_RGB, MODE_1024x768_YUV422, MODE_800x600_RGB, MODE_800x600_YUV422, - MODE_1024x768_MONO, MODE_800x600_MONO, MODE_1024x768_MONO16, MODE_800x600_MONO16, - FORMAT_VGA_NONCOMPRESSED, - MODE_640x480_RGB, MODE_640x480_YUV422, MODE_640x480_YUV411, MODE_320x240_YUV422, - MODE_160x120_YUV444, MODE_640x480_MONO, MODE_640x480_MONO16, - FORMAT_SCALABLE_IMAGE_SIZE, - MODE_FORMAT7_0, MODE_FORMAT7_1, MODE_FORMAT7_2, MODE_FORMAT7_3, - MODE_FORMAT7_4, MODE_FORMAT7_5, MODE_FORMAT7_6, MODE_FORMAT7_7, - 0 -}; - -void icvInitCapture_DC1394(){ - int p; - - raw1394handle_t raw_handle = raw1394_new_handle(); - if( raw_handle == 0 ) { - numPorts = 0; - return; - } - numPorts = raw1394_get_port_info(raw_handle, ports, MAX_PORTS); - raw1394_destroy_handle(raw_handle); - for (p = 0; p < numPorts; p++) { - handles[p] = dc1394_create_handle(p); - if (handles[p]==NULL) { numPorts=-1; return; /*ERROR_CLEANUP_EXIT*/ } - - /* get the camera nodes and describe them as we find them */ - camera_nodes = dc1394_get_camera_nodes(handles[p], &camCount[p], 0); - for (int i=0;i=numCameras) - return 0; - if (index<0) - return 0; - - CvCaptureCAM_DC1394 * pcap = (CvCaptureCAM_DC1394*)cvAlloc(sizeof(*pcap)); - - /* Select a port and camera */ - pcap->device_name = videodev[cameras[index].portnum]; - pcap->handle = handles[cameras[index].portnum]; - pcap->camera = &cameras[index].cam; - - // get supported formats - if (dc1394_query_supported_formats(pcap->handle, pcap->camera->node, &formats)<0) { - fprintf(stderr,"%s:%d: Could not query supported formats\n",__FILE__,__LINE__); - formats=0x0; - } - for (i=0; i < NUM_FORMATS; i++) { - modes[i]=0; - if (icvFormatSupportedCAM_DC1394(i+FORMAT_MIN, formats)){ - if (dc1394_query_supported_modes(pcap->handle, pcap->camera->node, i+FORMAT_MIN, &modes[i])<0) { - fprintf(stderr,"%s:%d: Could not query Format%d modes\n",__FILE__,__LINE__,i); - } - } - } - - pcap->format = 0; - pcap->mode = 0; - pcap->color_mode = 0; - pcap->frame_rate = 0; - - int format_idx = -1; - - // scan the list of preferred modes, and find a supported one - for(i=0; (pcap->mode == 0) && (preferred_modes[i] != 0); i++) { - if((preferred_modes[i] >= FORMAT_MIN) && (preferred_modes[i] <= FORMAT_MAX)) { - pcap->format = preferred_modes[i]; - format_idx = preferred_modes[i] - FORMAT_MIN; - continue; - } - assert(format_idx != -1); - if ( ! icvFormatSupportedCAM_DC1394(pcap->format, formats) ) - continue; - if ( icvModeSupportedCAM_DC1394(pcap->format, preferred_modes[i], modes[format_idx]) ){ - pcap->mode = preferred_modes[i]; - } - } - if (pcap->mode == 0) { - fprintf(stderr,"%s:%d: Could not find a supported mode for this camera\n",__FILE__,__LINE__); - goto ERROR; - } - - pcap->color_mode = icvColorMode( pcap->mode ); - if( pcap->color_mode == -1){ - fprintf(stderr,"%s:%d: ERROR: BPP is Unsupported!!\n",__FILE__,__LINE__); - goto ERROR; - } - - // set frame rate to optimal value given format and mode - pcap->frame_rate = icvGetBestFrameRate(pcap, pcap->format, pcap->mode); - - if (pcap->format!=FORMAT_SCALABLE_IMAGE_SIZE) { // everything except Format 7 - if (dc1394_dma_setup_capture(pcap->handle, pcap->camera->node, index+1 /*channel*/, - pcap->format, pcap->mode, SPEED_400, - pcap->frame_rate, NUM_BUFFERS, 1 /*drop_frames*/, - pcap->device_name, pcap->camera) != DC1394_SUCCESS) { - fprintf(stderr,"%s:%d: Failed to setup DMA capture with VIDEO1394\n",__FILE__,__LINE__); - goto ERROR; - } - } - else { - if(dc1394_dma_setup_format7_capture(pcap->handle,pcap->camera->node,index+1 /*channel*/, - pcap->mode, SPEED_400, QUERY_FROM_CAMERA, - (unsigned int)QUERY_FROM_CAMERA, (unsigned int)QUERY_FROM_CAMERA, - (unsigned int)QUERY_FROM_CAMERA, (unsigned int)QUERY_FROM_CAMERA, - NUM_BUFFERS, 1 /*drop_frames*/, - pcap->device_name, pcap->camera) != DC1394_SUCCESS) { - fprintf(stderr,"%s:%d: Failed to setup DMA capture with VIDEO1394\n",__FILE__,__LINE__); - goto ERROR; - } - } - - if (dc1394_start_iso_transmission(pcap->handle, pcap->camera->node)!=DC1394_SUCCESS) { - fprintf(stderr,"%s:%d: Could not start ISO transmission\n",__FILE__,__LINE__); - goto ERROR; - } - - usleep(DELAY); - - dc1394bool_t status; - if (dc1394_get_iso_status(pcap->handle, pcap->camera->node, &status)!=DC1394_SUCCESS) { - fprintf(stderr,"%s:%d: Could get ISO status",__FILE__,__LINE__); - goto ERROR; - } - if (status==DC1394_FALSE) { - fprintf(stderr,"%s:%d: ISO transmission refuses to start",__FILE__,__LINE__); - goto ERROR; - } - - // convert camera image to RGB by default - pcap->convert=1; - - // no image data allocated yet - pcap->buffer_is_writeable = 0; - - memset(&(pcap->frame), 0, sizeof(IplImage)); - icvResizeFrame( pcap ); - return pcap; - -ERROR: - return 0; -}; - -static void icvCloseCAM_DC1394( CvCaptureCAM_DC1394* capture ){ - dc1394_stop_iso_transmission(capture->handle, capture->camera->node); - dc1394_dma_unlisten (capture->handle, capture->camera); - /* Deallocate space for RGBA data */ - if(capture->convert){ - cvFree(&capture->frame.imageData); - } -} - -static int icvGrabFrameCAM_DC1394( CvCaptureCAM_DC1394* capture ){ - // TODO: should this function wait until the next frame is available or return - // immediately ? - float waiting = 0; - do{ - int result = dc1394_dma_single_capture_poll(capture->camera); - if(result==DC1394_SUCCESS){ - return 1; - } - else if(result==DC1394_NO_FRAME){ - usleep(1000000/120); //sleep for at least a 1/2 of the frame rate - waiting += 1.0/120.0; - } - else{ - printf("dc1394_dma_single_capture_poll failed\n"); - return 0; - } - } while(waiting<2); - printf("dc1394_dma_single_capture_poll timed out\n"); - return 0; -} - -static IplImage* icvRetrieveFrameCAM_DC1394( CvCaptureCAM_DC1394* capture, int ){ - if(capture->camera->capture_buffer ) - { - if(capture->convert){ - /* Convert to RGBA */ - unsigned char * src = (unsigned char *)capture->camera->capture_buffer; - unsigned char * dst = (unsigned char *)capture->frame.imageData; - switch (capture->color_mode) { - case COLOR_FORMAT7_RGB8: - //printf("icvRetrieveFrame convert RGB to BGR\n"); - /* Convert RGB to BGR */ - for (int i=0;iframe.imageSize;i+=6) { - dst[i] = src[i+2]; - dst[i+1] = src[i+1]; - dst[i+2] = src[i]; - dst[i+3] = src[i+5]; - dst[i+4] = src[i+4]; - dst[i+5] = src[i+3]; - } - break; - case COLOR_FORMAT7_YUV422: - //printf("icvRetrieveFrame convert YUV422 to BGR %d\n"); - uyvy2bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height); - break; - case COLOR_FORMAT7_MONO8: - //printf("icvRetrieveFrame convert MONO8 to BGR %d\n"); - y2bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height); - break; - case COLOR_FORMAT7_YUV411: - //printf("icvRetrieveFrame convert YUV411 to BGR %d\n"); - uyyvyy2bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height); - break; - case COLOR_FORMAT7_YUV444: - //printf("icvRetrieveFrame convert YUV444 to BGR %d\n"); - uyv2bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height); - break; - case COLOR_FORMAT7_MONO16: - //printf("icvRetrieveFrame convert MONO16 to BGR %d\n"); - y162bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height, MONO16_BPP); - break; - case COLOR_FORMAT7_RGB16: - //printf("icvRetrieveFrame convert RGB16 to BGR %d\n"); - rgb482bgr(src, - dst, - capture->camera->frame_width * capture->camera->frame_height, MONO16_BPP); - break; - default: - fprintf(stderr,"%s:%d: Unsupported color mode %d\n",__FILE__,__LINE__,capture->color_mode); - return 0; - } /* switch (capture->mode) */ - } - else{ - // return raw data - capture->frame.imageData = (char *) capture->camera->capture_buffer; - capture->frame.imageDataOrigin = (char *) capture->camera->capture_buffer; - } - - // TODO: if convert=0, we are not actually done with the buffer - // but this seems to work anyway. - dc1394_dma_done_with_buffer(capture->camera); - - return &capture->frame; - } - return 0; -}; - -static double icvGetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id ){ - int index=-1; - switch ( property_id ) { - case CV_CAP_PROP_CONVERT_RGB: - return capture->convert; - case CV_CAP_PROP_MODE: - return capture->mode; - case CV_CAP_PROP_FORMAT: - return capture->format; - case CV_CAP_PROP_FPS: - CV_DC1394_CALL(dc1394_get_video_framerate(capture->handle, capture->camera->node, - (unsigned int *) &capture->camera->frame_rate)); - switch(capture->camera->frame_rate) { - case FRAMERATE_1_875: - return 1.875; - case FRAMERATE_3_75: - return 3.75; - case FRAMERATE_7_5: - return 7.5; - case FRAMERATE_15: - return 15.; - case FRAMERATE_30: - return 30.; - case FRAMERATE_60: - return 60; -#if NUM_FRAMERATES > 6 - case FRAMERATE_120: - return 120; -#endif -#if NUM_FRAMERATES > 7 - case FRAMERATE_240: - return 240; -#endif - } - default: - index = property_id; // did they pass in a LIBDC1394 feature flag? - break; - } - if(index>=FEATURE_MIN && index<=FEATURE_MAX){ - dc1394bool_t has_feature; - CV_DC1394_CALL( dc1394_is_feature_present(capture->handle, capture->camera->node, - index, &has_feature)); - if(!has_feature){ - CV_WARN("Feature is not supported by this camera"); - } - else{ - unsigned int value; - dc1394_get_feature_value(capture->handle, capture->camera->node, index, &value); - return (double) value; - } - } - - return 0; -}; - -// resize capture->frame appropriately depending on camera and capture settings -static int icvResizeFrame(CvCaptureCAM_DC1394 * capture){ - if(capture->convert){ - // resize if sizes are different, formats are different - // or conversion option has changed - if(capture->camera->frame_width != capture->frame.width || - capture->camera->frame_height != capture->frame.height || - capture->frame.depth != 8 || - capture->frame.nChannels != 3 || - capture->frame.imageData == NULL || - capture->buffer_is_writeable == 0) - { - if(capture->frame.imageData && capture->buffer_is_writeable){ - cvReleaseData( &(capture->frame)); - } - cvInitImageHeader( &capture->frame, cvSize( capture->camera->frame_width, - capture->camera->frame_height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - cvCreateData( &(capture->frame) ); - capture->buffer_is_writeable = 1; - } - - } - else { - // free image data if allocated by opencv - if(capture->buffer_is_writeable){ - cvReleaseData(&(capture->frame)); - } - - // figure out number of channels and bpp - int bpp = 8; - int nch = 3; - int width = capture->camera->frame_width; - int height = capture->camera->frame_height; - double code = CV_FOURCC('B','G','R',0); - switch(capture->color_mode){ - case COLOR_FORMAT7_YUV422: - nch = 2; - code = CV_FOURCC('Y','4','2','2'); - break; - case COLOR_FORMAT7_MONO8: - code = CV_FOURCC('Y',0,0,0); - nch = 1; - break; - case COLOR_FORMAT7_YUV411: - code = CV_FOURCC('Y','4','1','1'); - width *= 2; - nch = 3; //yy[u/v] - break; - case COLOR_FORMAT7_YUV444: - code = CV_FOURCC('Y','U','V',0); - nch = 3; - break; - case COLOR_FORMAT7_MONO16: - code = CV_FOURCC('Y',0,0,0); - bpp = IPL_DEPTH_16S; - nch = 1; - break; - case COLOR_FORMAT7_RGB16: - bpp = IPL_DEPTH_16S; - nch = 3; - break; - default: - break; - } - // reset image header - cvInitImageHeader( &capture->frame,cvSize( width, height ), bpp, nch, IPL_ORIGIN_TL, 4 ); - //assert(capture->frame.imageSize == capture->camera->quadlets_per_frame*4); - capture->buffer_is_writeable = 0; - } - return 1; -} - -// Toggle setting about whether or not RGB color conversion is to be performed -// Allocates/Initializes capture->frame appropriately -int icvSetConvertRGB(CvCaptureCAM_DC1394 * capture, int convert){ - if(convert==capture->convert){ - // no action necessary - return 1; - } - capture->convert = convert; - return icvResizeFrame( capture ); -} - -// given desired format, mode, and modes bitmask from camera, determine if format and mode are supported -static int -icvFormatSupportedCAM_DC1394(int format, quadlet_t formats){ - // formats is a bitmask whose higher order bits indicate whether format is supported - int shift = 31 - (format - FORMAT_MIN); - int mask = 1 << shift; - return (formats & mask) != 0; -} - -// analyze modes bitmask from camera to determine if desired format and mode are supported -static int -icvModeSupportedCAM_DC1394(int format, int mode, quadlet_t modes){ - // modes is a bitmask whose higher order bits indicate whether mode is supported - int format_idx = format - FORMAT_MIN; - int mode_format_min = MODE_FORMAT0_MIN + 32*format_idx; - int shift = 31 - (mode - mode_format_min); - int mask = 0x1 << shift; - return (modes & mask) != 0; -} - -// Setup camera to use given dc1394 mode -static int -icvSetModeCAM_DC1394( CvCaptureCAM_DC1394 * capture, int mode ){ - quadlet_t modes, formats; - //printf("\n"); - - // figure out corrent format for this mode - int format = (mode - MODE_FORMAT0_MIN) / 32 + FORMAT_MIN; - - // get supported formats - if (dc1394_query_supported_formats(capture->handle, capture->camera->node, &formats)<0) { - fprintf(stderr,"%s:%d: Could not query supported formats\n",__FILE__,__LINE__); - return 0; - } - - // is format for requested mode supported ? - if(icvFormatSupportedCAM_DC1394(format, formats)==0){ - return 0; - } - - // get supported modes for requested format - if (dc1394_query_supported_modes(capture->handle, capture->camera->node, format, &modes)<0){ - fprintf(stderr,"%s:%d: Could not query supported modes for format %d\n",__FILE__,__LINE__, capture->format); - return 0; - } - - // is requested mode supported ? - if(! icvModeSupportedCAM_DC1394(format, mode, modes) ){ - return 0; - } - - int color_mode = icvColorMode( mode ); - - if(color_mode == -1){ - return 0; - } - - int frame_rate = icvGetBestFrameRate(capture, format, mode); - - dc1394_dma_unlisten(capture->handle, capture->camera); - if (dc1394_dma_setup_capture(capture->handle, capture->camera->node, capture->camera->channel /*channel*/, - format, mode, SPEED_400, - frame_rate, NUM_BUFFERS, 1 /*drop_frames*/, - capture->device_name, capture->camera) != DC1394_SUCCESS) { - fprintf(stderr,"%s:%d: Failed to setup DMA capture with VIDEO1394\n",__FILE__,__LINE__); - return 0; - } - dc1394_start_iso_transmission(capture->handle, capture->camera->node); - - capture->frame_rate = frame_rate; - capture->format = format; - capture->mode = mode; - capture->color_mode = color_mode; - - // now fix image size to match new mode - icvResizeFrame( capture ); - return 1; -} - -// query camera for supported frame rates and select fastest for given format and mode -static unsigned int icvGetBestFrameRate( CvCaptureCAM_DC1394 * capture, int format, int mode ){ - quadlet_t framerates; - if (dc1394_query_supported_framerates(capture->handle, capture->camera->node, - format, mode, &framerates)!=DC1394_SUCCESS) - { - fprintf(stderr,"%s:%d: Could not query supported framerates\n",__FILE__,__LINE__); - framerates = 0; - } - - for (int f=FRAMERATE_MAX; f>=FRAMERATE_MIN; f--) { - if (framerates & (0x1<< (31-(f-FRAMERATE_MIN)))) { - return f; - } - } - return 0; -} - -static int -icvSetFrameRateCAM_DC1394( CvCaptureCAM_DC1394 * capture, double value ){ - unsigned int fps=15; - if(capture->format == FORMAT_SCALABLE_IMAGE_SIZE) - return 0; /* format 7 has no fixed framerates */ - if (value==-1){ - fps=icvGetBestFrameRate( capture, capture->format, capture->mode ); - } - else if (value==1.875) - fps=FRAMERATE_1_875; - else if (value==3.75) - fps=FRAMERATE_3_75; - else if (value==7.5) - fps=FRAMERATE_7_5; - else if (value==15) - fps=FRAMERATE_15; - else if (value==30) - fps=FRAMERATE_30; - else if (value==60) - fps=FRAMERATE_60; -#if NUM_FRAMERATES > 6 - else if (value==120) - fps=FRAMERATE_120; -#endif -#if NUM_FRAMERATES > 7 - else if (value==240) - fps=FRAMERATE_240; -#endif - dc1394_set_video_framerate(capture->handle, capture->camera->node,fps); - dc1394_get_video_framerate(capture->handle, capture->camera->node, - (unsigned int *) &capture->camera->frame_rate); - - return fps==(unsigned int) capture->camera->frame_rate; -} - -// for given mode return color format -static int -icvColorMode( int mode ){ - switch(mode) { - case MODE_160x120_YUV444: - return COLOR_FORMAT7_YUV444; - case MODE_320x240_YUV422: - case MODE_640x480_YUV422: - case MODE_800x600_YUV422: - case MODE_1024x768_YUV422: - case MODE_1280x960_YUV422: - case MODE_1600x1200_YUV422: - return COLOR_FORMAT7_YUV422; - case MODE_640x480_YUV411: - return COLOR_FORMAT7_YUV411; - case MODE_640x480_RGB: - case MODE_800x600_RGB: - case MODE_1024x768_RGB: - case MODE_1280x960_RGB: - case MODE_1600x1200_RGB: - return COLOR_FORMAT7_RGB8; - case MODE_640x480_MONO: - case MODE_800x600_MONO: - case MODE_1024x768_MONO: - case MODE_1280x960_MONO: - case MODE_1600x1200_MONO: - return COLOR_FORMAT7_MONO8; - case MODE_640x480_MONO16: - case MODE_800x600_MONO16: - case MODE_1024x768_MONO16: - case MODE_1280x960_MONO16: - case MODE_1600x1200_MONO16: - return COLOR_FORMAT7_MONO16; - case MODE_FORMAT7_0: - case MODE_FORMAT7_1: - case MODE_FORMAT7_2: - case MODE_FORMAT7_3: - case MODE_FORMAT7_4: - case MODE_FORMAT7_5: - case MODE_FORMAT7_6: - case MODE_FORMAT7_7: - fprintf(stderr,"%s:%d: Format7 not yet supported\n",__FILE__,__LINE__); - default: - break; - } - return -1; -} - -// function to set camera properties using dc1394 feature enum -// val == -1 indicates to set this property to 'auto' -static int -icvSetFeatureCAM_DC1394( CvCaptureCAM_DC1394* capture, int feature_id, int val){ - dc1394bool_t isOn = DC1394_FALSE; - dc1394bool_t hasAutoCapability = DC1394_FALSE; - dc1394bool_t isAutoOn = DC1394_FALSE; - unsigned int nval; - unsigned int minval,maxval; - - // Turn the feature on if it is OFF - if( dc1394_is_feature_on(capture->handle, capture->camera->node, feature_id, &isOn) - == DC1394_FAILURE ) { - return 0; - } - if( isOn == DC1394_FALSE ) { - // try to turn it on. - if( dc1394_feature_on_off(capture->handle, capture->camera->node, feature_id, 1) == DC1394_FAILURE ) { - fprintf(stderr, "error turning feature %d on!\n", feature_id); - return 0; - } - } - - // Check if the feature supports auto mode - dc1394_has_auto_mode(capture->handle, capture->camera->node, feature_id, &hasAutoCapability); - if( hasAutoCapability ) { - - // now check if the auto is on. - if( dc1394_is_feature_auto(capture->handle, capture->camera->node, feature_id, &isAutoOn ) == DC1394_FAILURE ) { - fprintf(stderr, "error determining if feature %d has auto on!\n", feature_id); - return 0; - } - } - // Caller requested auto mode, but cannot support it - else if(val==-1){ - fprintf(stderr, "feature %d does not support auto mode\n", feature_id); - return 0; - } - - if(val==-1){ - // if the auto mode isn't enabled, enable it - if( isAutoOn == DC1394_FALSE ) { - if(dc1394_auto_on_off(capture->handle, capture->camera->node, feature_id, 1) == DC1394_FAILURE ) { - fprintf(stderr, "error turning feature %d auto ON!\n", feature_id); - return 0; - } - } - return 1; - } - - // ELSE turn OFF auto and adjust feature manually - if( isAutoOn == DC1394_TRUE ) { - if(dc1394_auto_on_off(capture->handle, capture->camera->node, feature_id, 0) == DC1394_FAILURE ) { - fprintf(stderr, "error turning feature %d auto OFF!\n", feature_id); - return 0; - } - } - - // Clamp val to within feature range - CV_DC1394_CALL( dc1394_get_min_value(capture->handle, capture->camera->node, feature_id, &minval)); - CV_DC1394_CALL( dc1394_get_max_value(capture->handle, capture->camera->node, feature_id, &maxval)); - val = (int)MIN(maxval, MAX((unsigned)val, minval)); - - - if (dc1394_set_feature_value(capture->handle, capture->camera->node, feature_id, val) == - DC1394_FAILURE){ - fprintf(stderr, "error setting feature value\n"); - return 0; - } - if (dc1394_get_feature_value(capture->handle, capture->camera->node, feature_id, &nval) == - DC1394_FAILURE){ - fprintf(stderr, "error setting feature value\n"); - return 0; - } - return nval==(unsigned int)val; - -} - -// cvSetCaptureProperty callback function implementation -static int -icvSetPropertyCAM_DC1394( CvCaptureCAM_DC1394* capture, int property_id, double value ){ - int index=-1; - switch ( property_id ) { - case CV_CAP_PROP_CONVERT_RGB: - return icvSetConvertRGB( capture, value != 0 ); - case CV_CAP_PROP_MODE: - return icvSetModeCAM_DC1394( capture, (int) value ); - case CV_CAP_PROP_FPS: - return icvSetFrameRateCAM_DC1394( capture, value ); - case CV_CAP_PROP_BRIGHTNESS: - index = FEATURE_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - index = FEATURE_GAMMA; - break; - case CV_CAP_PROP_SATURATION: - index = FEATURE_SATURATION; - break; - case CV_CAP_PROP_HUE: - index = FEATURE_HUE; - break; - case CV_CAP_PROP_GAIN: - index = FEATURE_GAIN; - break; - default: - index = property_id; // did they pass in a LIBDC1394 feature flag? - break; - } - if(index>=FEATURE_MIN && index<=FEATURE_MAX){ - return icvSetFeatureCAM_DC1394(capture, index, (int) value); - } - return 0; -}; - -/********************************************************************** - * - * CONVERSION FUNCTIONS TO RGB 24bpp - * - **********************************************************************/ - -/* color conversion functions from Bart Nabbe. *//* corrected by Damien: bad coeficients in YUV2RGB */ -#define YUV2RGB(y, u, v, r, g, b)\ - r = y + ((v*1436) >> 10);\ -g = y - ((u*352 + v*731) >> 10);\ -b = y + ((u*1814) >> 10);\ -r = r < 0 ? 0 : r;\ -g = g < 0 ? 0 : g;\ -b = b < 0 ? 0 : b;\ -r = r > 255 ? 255 : r;\ -g = g > 255 ? 255 : g;\ -b = b > 255 ? 255 : b - - static void -uyv2bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels) -{ - register int i = NumPixels + (NumPixels << 1) - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y, u, v; - register int r, g, b; - - while (i > 0) { - v = src[i--] - 128; - y = src[i--]; - u = src[i--] - 128; - YUV2RGB(y, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - } -} - - static void -uyvy2bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels) -{ - register int i = (NumPixels << 1) - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y0, y1, u, v; - register int r, g, b; - - while (i > 0) { - y1 = src[i--]; - v = src[i--] - 128; - y0 = src[i--]; - u = src[i--] - 128; - YUV2RGB(y1, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - YUV2RGB(y0, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - } -} - - - static void -uyyvyy2bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels) -{ - register int i = NumPixels + (NumPixels >> 1) - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y0, y1, y2, y3, u, v; - register int r, g, b; - - while (i > 0) { - y3 = src[i--]; - y2 = src[i--]; - v = src[i--] - 128; - y1 = src[i--]; - y0 = src[i--]; - u = src[i--] - 128; - YUV2RGB(y3, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - YUV2RGB(y2, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - YUV2RGB(y1, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - YUV2RGB(y0, u, v, r, g, b); - dest[j--] = r; - dest[j--] = g; - dest[j--] = b; - } -} - - static void -y2bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels) -{ - register int i = NumPixels - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y; - - while (i > 0) { - y = src[i--]; - dest[j--] = y; - dest[j--] = y; - dest[j--] = y; - } -} - - static void -y162bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels, int bits) -{ - register int i = (NumPixels << 1) - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y; - - while (i > 0) { - y = src[i--]; - y = (y + (src[i--] << 8)) >> (bits - 8); - dest[j--] = y; - dest[j--] = y; - dest[j--] = y; - } -} - -// this one was in coriander but didn't take bits into account - static void -rgb482bgr(const unsigned char *src, unsigned char *dest, - unsigned long long int NumPixels, int bits) -{ - register int i = (NumPixels << 1) - 1; - register int j = NumPixels + (NumPixels << 1) - 1; - register int y; - - while (i > 0) { - y = src[i--]; - dest[j-2] = (y + (src[i--] << 8)) >> (bits - 8); - j--; - y = src[i--]; - dest[j] = (y + (src[i--] << 8)) >> (bits - 8); - j--; - y = src[i--]; - dest[j+2] = (y + (src[i--] << 8)) >> (bits - 8); - j--; - } -} - - -class CvCaptureCAM_DC1394_CPP : public CvCapture -{ -public: - CvCaptureCAM_DC1394_CPP() { captureDC1394 = 0; } - virtual ~CvCaptureCAM_DC1394_CPP() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_DC1394; } // Return the type of the capture object: CV_CAP_VFW, etc... -protected: - - CvCaptureCAM_DC1394* captureDC1394; -}; - -bool CvCaptureCAM_DC1394_CPP::open( int index ) -{ - close(); - captureDC1394 = icvCaptureFromCAM_DC1394(index); - return captureDC1394 != 0; -} - -void CvCaptureCAM_DC1394_CPP::close() -{ - if( captureDC1394 ) - { - icvCloseCAM_DC1394( captureDC1394 ); - cvFree( &captureDC1394 ); - } -} - -bool CvCaptureCAM_DC1394_CPP::grabFrame() -{ - return captureDC1394 ? icvGrabFrameCAM_DC1394( captureDC1394 ) != 0 : false; -} - -IplImage* CvCaptureCAM_DC1394_CPP::retrieveFrame(int) -{ - return captureDC1394 ? (IplImage*)icvRetrieveFrameCAM_DC1394( captureDC1394, 0 ) : 0; -} - -double CvCaptureCAM_DC1394_CPP::getProperty( int propId ) -{ - return captureDC1394 ? icvGetPropertyCAM_DC1394( captureDC1394, propId ) : 0; -} - -bool CvCaptureCAM_DC1394_CPP::setProperty( int propId, double value ) -{ - return captureDC1394 ? icvSetPropertyCAM_DC1394( captureDC1394, propId, value ) != 0 : false; -} - -CvCapture* cvCreateCameraCapture_DC1394( int index ) -{ - CvCaptureCAM_DC1394_CPP* capture = new CvCaptureCAM_DC1394_CPP; - - if( capture->open( index )) - return capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_dc1394_v2.cpp b/modules/highgui/src/cap_dc1394_v2.cpp deleted file mode 100644 index 0d5f898..0000000 --- a/modules/highgui/src/cap_dc1394_v2.cpp +++ /dev/null @@ -1,932 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_DC1394_2 - -#include -#include -#ifdef WIN32 - // On Windows, we have no sys/select.h, but we need to pick up - // select() which is in winsock2. - #ifndef __SYS_SELECT_H__ - #define __SYS_SELECT_H__ 1 - #include - #endif -#else - #include -#endif /*WIN32*/ -#include -#include -#include - -static dc1394error_t adaptBufferStereoLocal(dc1394video_frame_t *in, dc1394video_frame_t *out) -{ - uint32_t bpp; - - // buffer position is not changed. Size is boubled in Y - out->size[0] = in->size[0]; - out->size[1] = in->size[1] * 2; - out->position[0] = in->position[0]; - out->position[1] = in->position[1]; - - // color coding is set to mono8 or raw8. - switch (in->color_coding) - { - case DC1394_COLOR_CODING_RAW16: - out->color_coding = DC1394_COLOR_CODING_RAW8; - break; - case DC1394_COLOR_CODING_MONO16: - case DC1394_COLOR_CODING_YUV422: - out->color_coding = DC1394_COLOR_CODING_MONO8; - break; - default: - return DC1394_INVALID_COLOR_CODING; - } - - // keep the color filter value in all cases. if the format is not raw it will not be further used anyway - out->color_filter = in->color_filter; - - // the output YUV byte order must be already set if the buffer is YUV422 at the output - // if the output is not YUV we don't care about this field. - // Hence nothing to do. - // we always convert to 8bits (at this point) we can safely set this value to 8. - out->data_depth = 8; - - // don't know what to do with stride... >>>> TODO: STRIDE SHOULD BE TAKEN INTO ACCOUNT... <<<< - // out->stride=?? - // the video mode should not change. Color coding and other stuff can be accessed in specific fields of this struct - out->video_mode = in->video_mode; - - // padding is kept: - out->padding_bytes = in->padding_bytes; - - // image bytes changes: >>>> TODO: STRIDE SHOULD BE TAKEN INTO ACCOUNT... <<<< - dc1394_get_color_coding_bit_size(out->color_coding, &bpp); - out->image_bytes = (out->size[0] * out->size[1] * bpp) / 8; - - // total is image_bytes + padding_bytes - out->total_bytes = out->image_bytes + out->padding_bytes; - - // bytes-per-packet and packets_per_frame are internal data that can be kept as is. - out->packet_size = in->packet_size; - out->packets_per_frame = in->packets_per_frame; - - // timestamp, frame_behind, id and camera are copied too: - out->timestamp = in->timestamp; - out->frames_behind = in->frames_behind; - out->camera = in->camera; - out->id = in->id; - - // verify memory allocation: - if (out->total_bytes > out->allocated_image_bytes) - { - free(out->image); - out->image = (uint8_t*)malloc(out->total_bytes * sizeof(uint8_t)); - out->allocated_image_bytes = out->total_bytes; - } - - // Copy padding bytes: - memcpy(&(out->image[out->image_bytes]), &(in->image[in->image_bytes]), out->padding_bytes); - out->little_endian = DC1394_FALSE; // not used before 1.32 is out. - out->data_in_padding = DC1394_FALSE; // not used before 1.32 is out. - return DC1394_SUCCESS; -} - -static dc1394error_t dc1394_deinterlace_stereo_frames_fixed(dc1394video_frame_t *in, - dc1394video_frame_t *out, dc1394stereo_method_t method) -{ - if((in->color_coding == DC1394_COLOR_CODING_RAW16) || - (in->color_coding == DC1394_COLOR_CODING_MONO16) || - (in->color_coding == DC1394_COLOR_CODING_YUV422)) - { - switch (method) - { - - case DC1394_STEREO_METHOD_INTERLACED: - adaptBufferStereoLocal(in, out); -//FIXED by AB: -// dc1394_deinterlace_stereo(in->image, out->image, in->size[0], in->size[1]); - dc1394_deinterlace_stereo(in->image, out->image, out->size[0], out->size[1]); - break; - - case DC1394_STEREO_METHOD_FIELD: - adaptBufferStereoLocal(in, out); - memcpy(out->image, in->image, out->image_bytes); - break; - } - - return DC1394_INVALID_STEREO_METHOD; - } - else - return DC1394_FUNCTION_NOT_SUPPORTED; -} - -static uint32_t getControlRegister(dc1394camera_t *camera, uint64_t offset) -{ - uint32_t value = 0; - dc1394error_t err = dc1394_get_control_register(camera, offset, &value); - - assert(err == DC1394_SUCCESS); - return err == DC1394_SUCCESS ? value : 0xffffffff; -} - -struct CvDC1394 -{ - CvDC1394(); - ~CvDC1394(); - - dc1394_t* dc; - fd_set camFds; -}; - -CvDC1394::CvDC1394() -{ - dc = dc1394_new(); - FD_ZERO(&camFds); -} - -CvDC1394::~CvDC1394() -{ - if (dc) - dc1394_free(dc); - dc = 0; -} - -static CvDC1394 dc1394; - -class CvCaptureCAM_DC1394_v2_CPP : public CvCapture -{ -public: - static int dc1394properties[CV_CAP_PROP_MAX_DC1394]; - CvCaptureCAM_DC1394_v2_CPP(); - virtual ~CvCaptureCAM_DC1394_v2_CPP() - { - close(); - } - - virtual bool open(int index); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_DC1394; } // Return the type of the capture object: CV_CAP_VFW, etc... - - -protected: - virtual bool startCapture(); - virtual bool getVidereCalibrationInfo( char* buf, int bufSize ); - virtual bool initVidereRectifyMaps( const char* info, IplImage* ml[2], IplImage* mr[2] ); - - uint64_t guid; - dc1394camera_t* dcCam; - int isoSpeed; - int videoMode; - int frameWidth, frameHeight; - double fps; - int nDMABufs; - bool started; - int userMode; - - enum { VIDERE = 0x5505 }; - - int cameraId; - bool colorStereo; - dc1394bayer_method_t bayer; - dc1394color_filter_t bayerFilter; - - enum { NIMG = 2 }; - IplImage *img[NIMG]; - dc1394video_frame_t* frameC; - int nimages; - - bool rectify; - bool init_rectify; - IplImage *maps[NIMG][2]; - dc1394featureset_t feature_set; -}; -//mapping CV_CAP_PROP_ to DC1394_FEATUREs -int CvCaptureCAM_DC1394_v2_CPP::dc1394properties[CV_CAP_PROP_MAX_DC1394] = { --1, //no corresponding feature for CV_CAP_PROP_POS_MSEC --1,-1,-1,-1, -DC1394_FEATURE_FRAME_RATE, //CV_CAP_PROP_FPS - fps can be set for format 7 only! --1,-1,-1,-1, -DC1394_FEATURE_BRIGHTNESS, //CV_CAP_PROP_BRIGHTNESS 10 --1, -DC1394_FEATURE_SATURATION, //CV_CAP_PROP_SATURATION -DC1394_FEATURE_HUE, -DC1394_FEATURE_GAIN, -DC1394_FEATURE_SHUTTER, //CV_CAP_PROP_EXPOSURE --1, //CV_CAP_PROP_CONVERT_RGB -DC1394_FEATURE_WHITE_BALANCE, //corresponds to CV_CAP_PROP_WHITE_BALANCE_BLUE_U and CV_CAP_PROP_WHITE_BALANCE_RED_V, see set function to check these props are set --1,-1, -DC1394_FEATURE_SHARPNESS, //20 -DC1394_FEATURE_EXPOSURE, //CV_CAP_PROP_AUTO_EXPOSURE - this is auto exposure according to the IIDC standard -DC1394_FEATURE_GAMMA, //CV_CAP_PROP_GAMMA -DC1394_FEATURE_TEMPERATURE, //CV_CAP_PROP_TEMPERATURE -DC1394_FEATURE_TRIGGER, //CV_CAP_PROP_TRIGGER -DC1394_FEATURE_TRIGGER_DELAY, //CV_CAP_PROP_TRIGGER_DELAY -DC1394_FEATURE_WHITE_BALANCE, //CV_CAP_PROP_WHITE_BALANCE_RED_V -DC1394_FEATURE_ZOOM, //CV_CAP_PROP_ZOOM -DC1394_FEATURE_FOCUS, //CV_CAP_PROP_FOCUS --1 //CV_CAP_PROP_GUID -}; -CvCaptureCAM_DC1394_v2_CPP::CvCaptureCAM_DC1394_v2_CPP() -{ - guid = 0; - dcCam = 0; - isoSpeed = 400; - fps = 15; - nDMABufs = 8; - started = false; - cameraId = 0; - colorStereo = false; - bayer = DC1394_BAYER_METHOD_BILINEAR; - bayerFilter = DC1394_COLOR_FILTER_GRBG; - frameWidth = 640; - frameHeight = 480; - - for (int i = 0; i < NIMG; i++) - img[i] = maps[i][0] = maps[i][1] = 0; - frameC = 0; - nimages = 1; - rectify = false; - userMode = -1; -} - - -bool CvCaptureCAM_DC1394_v2_CPP::startCapture() -{ - int i; - int code = 0; - if (!dcCam) - return false; - if (isoSpeed > 0) - { - // if capable set operation mode to 1394b for iso speeds above 400 - if (isoSpeed > 400 && dcCam->bmode_capable == DC1394_TRUE) - { - dc1394_video_set_operation_mode(dcCam, DC1394_OPERATION_MODE_1394B); - } - code = dc1394_video_set_iso_speed(dcCam, - isoSpeed <= 100 ? DC1394_ISO_SPEED_100 : - isoSpeed <= 200 ? DC1394_ISO_SPEED_200 : - isoSpeed <= 400 ? DC1394_ISO_SPEED_400 : - isoSpeed <= 800 ? DC1394_ISO_SPEED_800 : - isoSpeed == 1600 ? DC1394_ISO_SPEED_1600 : - DC1394_ISO_SPEED_3200); - } - - // should a specific mode be used - if (userMode >= 0) - - { - dc1394video_mode_t wantedMode; - dc1394video_modes_t videoModes; - dc1394_video_get_supported_modes(dcCam, &videoModes); - - //set mode from number, for example the second supported mode, i.e userMode = 1 - - if (userMode < (int)videoModes.num) - { - wantedMode = videoModes.modes[userMode]; - } - - //set modes directly from DC134 constants (from dc1394video_mode_t) - else if ((userMode >= DC1394_VIDEO_MODE_MIN) && (userMode <= DC1394_VIDEO_MODE_MAX )) - { - //search for wanted mode, to check if camera supports it - int j = 0; - while ((j< (int)videoModes.num) && videoModes.modes[j]!=userMode) - { - j++; - } - - if ((int)videoModes.modes[j]==userMode) - { - wantedMode = videoModes.modes[j]; - } - else - { - userMode = -1; // wanted mode not supported, search for best mode - } - } - else - { - userMode = -1; // wanted mode not supported, search for best mode - } - //if userMode is available: set it and update size - if (userMode != -1) - { - code = dc1394_video_set_mode(dcCam, wantedMode); - uint32_t width, height; - dc1394_get_image_size_from_video_mode(dcCam, wantedMode, &width, &height); - frameWidth = (int)width; - frameHeight = (int)height; - } - } - - if (userMode == -1 && (frameWidth > 0 || frameHeight > 0)) - { - dc1394video_mode_t bestMode = (dc1394video_mode_t) - 1; - dc1394video_modes_t videoModes; - dc1394_video_get_supported_modes(dcCam, &videoModes); - for (i = 0; i < (int)videoModes.num; i++) - { - dc1394video_mode_t mode = videoModes.modes[i]; - if (mode >= DC1394_VIDEO_MODE_FORMAT7_MIN && mode <= DC1394_VIDEO_MODE_FORMAT7_MAX) - continue; - int pref = -1; - dc1394color_coding_t colorCoding; - dc1394_get_color_coding_from_video_mode(dcCam, mode, &colorCoding); - - uint32_t width, height; - dc1394_get_image_size_from_video_mode(dcCam, mode, &width, &height); - if ((int)width == frameWidth || (int)height == frameHeight) - { - if (colorCoding == DC1394_COLOR_CODING_RGB8 || - colorCoding == DC1394_COLOR_CODING_RAW8) - { - bestMode = mode; - break; - } - - if (colorCoding == DC1394_COLOR_CODING_YUV411 || - colorCoding == DC1394_COLOR_CODING_YUV422 || - (colorCoding == DC1394_COLOR_CODING_YUV444 && - pref < 1)) - { - bestMode = mode; - pref = 1; - break; - } - - if (colorCoding == DC1394_COLOR_CODING_MONO8) - { - bestMode = mode; - pref = 0; - } - } - } - if ((int)bestMode >= 0) - code = dc1394_video_set_mode(dcCam, bestMode); - } - - if (fps > 0) - { - dc1394video_mode_t mode; - dc1394framerates_t framerates; - double minDiff = DBL_MAX; - dc1394framerate_t bestFps = (dc1394framerate_t) - 1; - - dc1394_video_get_mode(dcCam, &mode); - dc1394_video_get_supported_framerates(dcCam, mode, &framerates); - - for (i = 0; i < (int)framerates.num; i++) - { - dc1394framerate_t ifps = framerates.framerates[i]; - double fps1 = (1 << (ifps - DC1394_FRAMERATE_1_875)) * 1.875; - double diff = fabs(fps1 - fps); - if (diff < minDiff) - { - minDiff = diff; - bestFps = ifps; - } - } - if ((int)bestFps >= 0) - code = dc1394_video_set_framerate(dcCam, bestFps); - } - - if (cameraId == VIDERE) - { - bayerFilter = DC1394_COLOR_FILTER_GBRG; - nimages = 2; - uint32_t value = 0; - dc1394_get_control_register(dcCam, 0x50c, &value); - colorStereo = (value & 0x80000000) != 0; - } - - code = dc1394_capture_setup(dcCam, nDMABufs, DC1394_CAPTURE_FLAGS_DEFAULT); - if (code >= 0) - { - FD_SET(dc1394_capture_get_fileno(dcCam), &dc1394.camFds); - dc1394_video_set_transmission(dcCam, DC1394_ON); - if (cameraId == VIDERE) - { - enum { PROC_MODE_OFF, PROC_MODE_NONE, PROC_MODE_TEST, PROC_MODE_RECTIFIED, PROC_MODE_DISPARITY, PROC_MODE_DISPARITY_RAW }; - int procMode = PROC_MODE_RECTIFIED; - usleep(100000); - uint32_t qval1 = 0x08000000 | (0x90 << 16) | ((procMode & 0x7) << 16); - uint32_t qval2 = 0x08000000 | (0x9C << 16); - dc1394_set_control_register(dcCam, 0xFF000, qval1); - dc1394_set_control_register(dcCam, 0xFF000, qval2); - } - started = true; - } - - return code >= 0; -} - -bool CvCaptureCAM_DC1394_v2_CPP::open(int index) -{ - bool result = false; - dc1394camera_list_t* cameraList = 0; - dc1394error_t err; - - close(); - - if (!dc1394.dc) - goto _exit_; - - err = dc1394_camera_enumerate(dc1394.dc, &cameraList); - if (err < 0 || !cameraList || (unsigned)index >= (unsigned)cameraList->num) - goto _exit_; - - guid = cameraList->ids[index].guid; - dcCam = dc1394_camera_new(dc1394.dc, guid); - if (!dcCam) - goto _exit_; - - cameraId = dcCam->vendor_id; - //get all features - if (dc1394_feature_get_all(dcCam,&feature_set) == DC1394_SUCCESS) - result = true; - else - result = false; - -_exit_: - if (cameraList) - dc1394_camera_free_list(cameraList); - - return result; -} - -void CvCaptureCAM_DC1394_v2_CPP::close() -{ - if (dcCam) - { - // check for fileno valid before using - int fileno=dc1394_capture_get_fileno(dcCam); - - if (fileno>=0 && FD_ISSET(fileno, &dc1394.camFds)) - FD_CLR(fileno, &dc1394.camFds); - dc1394_video_set_transmission(dcCam, DC1394_OFF); - dc1394_capture_stop(dcCam); - dc1394_camera_free(dcCam); - dcCam = 0; - started = false; - } - - for (int i = 0; i < NIMG; i++) - { - cvReleaseImage(&img[i]); - cvReleaseImage(&maps[i][0]); - cvReleaseImage(&maps[i][1]); - } - if (frameC) - { - if (frameC->image) - free(frameC->image); - free(frameC); - frameC = 0; - } -} - - -bool CvCaptureCAM_DC1394_v2_CPP::grabFrame() -{ - dc1394capture_policy_t policy = DC1394_CAPTURE_POLICY_WAIT; - bool code = false, isColor; - dc1394video_frame_t *dcFrame = 0, *fs = 0; - int i, nch; - - if (!dcCam || (!started && !startCapture())) - return false; - - dc1394_capture_dequeue(dcCam, policy, &dcFrame); - - if (!dcFrame) - return false; - - if (/*dcFrame->frames_behind > 1 ||*/ dc1394_capture_is_frame_corrupt(dcCam, dcFrame) == DC1394_TRUE) - { - goto _exit_; - } - - isColor = dcFrame->color_coding != DC1394_COLOR_CODING_MONO8 && - dcFrame->color_coding != DC1394_COLOR_CODING_MONO16 && - dcFrame->color_coding != DC1394_COLOR_CODING_MONO16S; - - if (nimages == 2) - { - fs = (dc1394video_frame_t*)calloc(1, sizeof(*fs)); - - //dc1394_deinterlace_stereo_frames(dcFrame, fs, DC1394_STEREO_METHOD_INTERLACED); - dc1394_deinterlace_stereo_frames_fixed(dcFrame, fs, DC1394_STEREO_METHOD_INTERLACED); - - dc1394_capture_enqueue(dcCam, dcFrame); // release the captured frame as soon as possible - dcFrame = 0; - if (!fs->image) - goto _exit_; - isColor = colorStereo; - } - nch = isColor ? 3 : 1; - - for (i = 0; i < nimages; i++) - { - IplImage fhdr; - dc1394video_frame_t f = fs ? *fs : *dcFrame, *fc = &f; - f.size[1] /= nimages; - f.image += f.size[0] * f.size[1] * i; // TODO: make it more universal - if (isColor) - { - if (!frameC) - frameC = (dc1394video_frame_t*)calloc(1, sizeof(*frameC)); - frameC->color_coding = nch == 3 ? DC1394_COLOR_CODING_RGB8 : DC1394_COLOR_CODING_MONO8; - if (nimages == 1) - { - dc1394_convert_frames(&f, frameC); - dc1394_capture_enqueue(dcCam, dcFrame); - dcFrame = 0; - } - else - { - f.color_filter = bayerFilter; - dc1394_debayer_frames(&f, frameC, bayer); - } - fc = frameC; - } - if (!img[i]) - img[i] = cvCreateImage(cvSize(fc->size[0], fc->size[1]), 8, nch); - cvInitImageHeader(&fhdr, cvSize(fc->size[0], fc->size[1]), 8, nch); - cvSetData(&fhdr, fc->image, fc->size[0]*nch); - - // Swap R&B channels: - if (nch==3) - cvConvertImage(&fhdr,&fhdr,CV_CVTIMG_SWAP_RB); - - if( rectify && cameraId == VIDERE && nimages == 2 ) - { - if( !maps[0][0] || maps[0][0]->width != img[i]->width || maps[0][0]->height != img[i]->height ) - { - CvSize size = cvGetSize(img[i]); - cvReleaseImage(&maps[0][0]); - cvReleaseImage(&maps[0][1]); - cvReleaseImage(&maps[1][0]); - cvReleaseImage(&maps[1][1]); - maps[0][0] = cvCreateImage(size, IPL_DEPTH_16S, 2); - maps[0][1] = cvCreateImage(size, IPL_DEPTH_16S, 1); - maps[1][0] = cvCreateImage(size, IPL_DEPTH_16S, 2); - maps[1][1] = cvCreateImage(size, IPL_DEPTH_16S, 1); - char buf[4*4096]; - if( getVidereCalibrationInfo( buf, (int)sizeof(buf) ) && - initVidereRectifyMaps( buf, maps[0], maps[1] )) - ; - else - rectify = false; - } - cvRemap(&fhdr, img[i], maps[i][0], maps[i][1]); - } - else - cvCopy(&fhdr, img[i]); - } - - code = true; - -_exit_: - if (dcFrame) - dc1394_capture_enqueue(dcCam, dcFrame); - if (fs) - { - if (fs->image) - free(fs->image); - free(fs); - } - - return code; -} - -IplImage* CvCaptureCAM_DC1394_v2_CPP::retrieveFrame(int idx) -{ - return 0 <= idx && idx < nimages ? img[idx] : 0; -} - -double CvCaptureCAM_DC1394_v2_CPP::getProperty(int propId) -{ - switch (propId) - { - case CV_CAP_PROP_FRAME_WIDTH: - return frameWidth ? frameWidth : frameHeight*4 / 3; - case CV_CAP_PROP_FRAME_HEIGHT: - return frameHeight ? frameHeight : frameWidth*3 / 4; - case CV_CAP_PROP_FPS: - return fps; - case CV_CAP_PROP_RECTIFICATION: - return rectify ? 1 : 0; - case CV_CAP_PROP_WHITE_BALANCE_BLUE_U: - if (dc1394_feature_whitebalance_get_value(dcCam, - &feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].BU_value, - &feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].RV_value) == DC1394_SUCCESS) - return feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].BU_value; - break; - case CV_CAP_PROP_WHITE_BALANCE_RED_V: - if (dc1394_feature_whitebalance_get_value(dcCam, - &feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].BU_value, - &feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].RV_value) == DC1394_SUCCESS) - return feature_set.feature[DC1394_FEATURE_WHITE_BALANCE-DC1394_FEATURE_MIN].RV_value; - break; - case CV_CAP_PROP_GUID: - //the least 32 bits are enough to identify the camera - return (double) (guid & 0x00000000FFFFFFFF); - break; - case CV_CAP_PROP_MODE: - return (double) userMode; - break; - case CV_CAP_PROP_ISO_SPEED: - return (double) isoSpeed; - default: - if (propId FLT_EPSILON; - break; - case CV_CAP_PROP_MODE: - if(started) - return false; - userMode = cvRound(value); - break; - case CV_CAP_PROP_ISO_SPEED: - if(started) - return false; - isoSpeed = cvRound(value); - break; - //The code below is based on coriander, callbacks.c:795, refer to case RANGE_MENU_MAN : - default: - if (propIdon_off_capable) - && (dc1394_feature_set_power(dcCam, act_feature->id, DC1394_OFF) == DC1394_SUCCESS)) - { - act_feature->is_on=DC1394_OFF; - return true; - } - return false; - } - //try to turn the feature ON, feature can be ON and at the same time it can be not capable to change state to OFF - if ( (act_feature->is_on == DC1394_OFF) && (act_feature->on_off_capable == DC1394_TRUE)) - { - if (dc1394_feature_set_power(dcCam, act_feature->id, DC1394_ON) == DC1394_SUCCESS) - feature_set.feature[dc1394properties[propId]-DC1394_FEATURE_MIN].is_on=DC1394_ON; - } - //turn off absolute mode - the actual value will be stored in the value field, - //otherwise it would be stored into CSR (control and status register) absolute value - if (act_feature->absolute_capable - && dc1394_feature_set_absolute_control(dcCam, act_feature->id, DC1394_OFF) !=DC1394_SUCCESS) - return false; - else - act_feature->abs_control=DC1394_OFF; - //set AUTO - if (cvRound(value) == CV_CAP_PROP_DC1394_MODE_AUTO) - { - if (dc1394_feature_set_mode(dcCam, act_feature->id, DC1394_FEATURE_MODE_AUTO)!=DC1394_SUCCESS) - return false; - act_feature->current_mode=DC1394_FEATURE_MODE_AUTO; - return true; - } - //set ONE PUSH - if (cvRound(value) == CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO) - { - //have to set to manual first, otherwise one push will be ignored (AVT manual 4.3.0 p. 115) - if (dc1394_feature_set_mode(dcCam, act_feature->id, DC1394_FEATURE_MODE_ONE_PUSH_AUTO)!=DC1394_SUCCESS) - return false; - //will change to - act_feature->current_mode=DC1394_FEATURE_MODE_ONE_PUSH_AUTO; - return true; - } - //set the feature to MANUAL mode, - if (dc1394_feature_set_mode(dcCam, act_feature->id, DC1394_FEATURE_MODE_MANUAL)!=DC1394_SUCCESS) - return false; - else - act_feature->current_mode=DC1394_FEATURE_MODE_MANUAL; - // if property is one of the white balance features treat it in different way - if (propId == CV_CAP_PROP_WHITE_BALANCE_BLUE_U) - { - if (dc1394_feature_whitebalance_set_value(dcCam,cvRound(value), act_feature->RV_value)!=DC1394_SUCCESS) - return false; - else - { - act_feature->BU_value = cvRound(value); - return true; - } - } - if (propId == CV_CAP_PROP_WHITE_BALANCE_RED_V) - { - if (dc1394_feature_whitebalance_set_value(dcCam, act_feature->BU_value, cvRound(value))!=DC1394_SUCCESS) - return false; - else - { - act_feature->RV_value = cvRound(value); - return true; - } - } - - //first: check boundaries - if (value < act_feature->min) - { - value = act_feature->min; - } - else if (value > act_feature->max) - { - value = act_feature->max; - } - - if (dc1394_feature_set_value(dcCam, act_feature->id, cvRound(value)) == DC1394_SUCCESS) - { - act_feature->value = value; - return true; - } - } - return false; - } - return true; -} - - -bool CvCaptureCAM_DC1394_v2_CPP::getVidereCalibrationInfo( char* buf, int bufSize ) -{ - int pos; - - for( pos = 0; pos < bufSize - 4; pos += 4 ) - { - uint32_t quad = getControlRegister(dcCam, 0xF0800 + pos); - if( quad == 0 || quad == 0xffffffff ) - break; - buf[pos] = (uchar)(quad >> 24); - buf[pos+1] = (uchar)(quad >> 16); - buf[pos+2] = (uchar)(quad >> 8); - buf[pos+3] = (uchar)(quad); - } - - if( pos == 0 ) - return false; - - buf[pos] = '\0'; - return true; -} - - -bool CvCaptureCAM_DC1394_v2_CPP::initVidereRectifyMaps( const char* info, - IplImage* ml[2], IplImage* mr[2] ) -{ - float identity_data[] = {1, 0, 0, 0, 1, 0, 0, 0, 1}; - CvMat l_rect = cvMat(3, 3, CV_32F, identity_data), r_rect = l_rect; - float l_intrinsic_data[] = {1, 0, 0, 0, 1, 0, 0, 0, 1}; - float r_intrinsic_data[] = {1, 0, 0, 0, 1, 0, 0, 0, 1}; - CvMat l_intrinsic = cvMat(3, 3, CV_32F, l_intrinsic_data); - CvMat r_intrinsic = cvMat(3, 3, CV_32F, r_intrinsic_data); - float l_distortion_data[] = {0,0,0,0,0}, r_distortion_data[] = {0,0,0,0,0}; - CvMat l_distortion = cvMat(1, 5, CV_32F, l_distortion_data); - CvMat r_distortion = cvMat(1, 5, CV_32F, r_distortion_data); - IplImage* mx = cvCreateImage(cvGetSize(ml[0]), IPL_DEPTH_32F, 1); - IplImage* my = cvCreateImage(cvGetSize(ml[0]), IPL_DEPTH_32F, 1); - int k, j; - - for( k = 0; k < 2; k++ ) - { - const char* section_name = k == 0 ? "[left_camera]" : "[right_camera]"; - static const char* param_names[] = { "f ", "fy", "Cx", "Cy" "kappa1", "kappa2", "tau1", "tau2", "kappa3", 0 }; - const char* section_start = strstr( info, section_name ); - CvMat* intrinsic = k == 0 ? &l_intrinsic : &r_intrinsic; - CvMat* distortion = k == 0 ? &l_distortion : &r_distortion; - CvMat* rectification = k == 0 ? &l_rect : &r_rect; - IplImage** dst = k == 0 ? ml : mr; - if( !section_start ) - break; - section_start += strlen(section_name); - for( j = 0; param_names[j] != 0; j++ ) - { - const char* param_value_start = strstr(section_start, param_names[j]); - float val=0; - if(!param_value_start) - break; - sscanf(param_value_start + strlen(param_names[j]), "%f", &val); - if( j < 4 ) - intrinsic->data.fl[j == 0 ? 0 : j == 1 ? 4 : j == 2 ? 2 : 5] = val; - else - distortion->data.fl[j - 4] = val; - } - if( param_names[j] != 0 ) - break; - - // some sanity check for the principal point - if( fabs(mx->width*0.5 - intrinsic->data.fl[2]) > mx->width*0.1 || - fabs(my->height*0.5 - intrinsic->data.fl[5]) > my->height*0.1 ) - { - cvScale( &intrinsic, &intrinsic, 0.5 ); // try the corrected intrinsic matrix for 2x lower resolution - if( fabs(mx->width*0.5 - intrinsic->data.fl[2]) > mx->width*0.05 || - fabs(my->height*0.5 - intrinsic->data.fl[5]) > my->height*0.05 ) - cvScale( &intrinsic, &intrinsic, 2 ); // revert it back if the new variant is not much better - intrinsic->data.fl[8] = 1; - } - - cvInitUndistortRectifyMap( intrinsic, distortion, - rectification, intrinsic, mx, my ); - cvConvertMaps( mx, my, dst[0], dst[1] ); - } - - cvReleaseImage( &mx ); - cvReleaseImage( &my ); - return k >= 2; -} - - -CvCapture* cvCreateCameraCapture_DC1394_2(int index) -{ - CvCaptureCAM_DC1394_v2_CPP* capture = new CvCaptureCAM_DC1394_v2_CPP; - - if (capture->open(index)) - return capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_dshow.cpp b/modules/highgui/src/cap_dshow.cpp deleted file mode 100644 index 606e520..0000000 --- a/modules/highgui/src/cap_dshow.cpp +++ /dev/null @@ -1,3381 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if (defined WIN32 || defined _WIN32) && defined HAVE_DSHOW - -/* - DirectShow-based Video Capturing module is based on - videoInput library by Theodore Watson: - http://muonics.net/school/spring05/videoInput/ - - Below is the original copyright -*/ - -//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. - -////////////////////////////////////////////////////////// -//Written by Theodore Watson - theo.watson@gmail.com // -//Do whatever you want with this code but if you find // -//a bug or make an improvement I would love to know! // -// // -//Warning This code is experimental // -//use at your own risk :) // -////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////// -/* Shoutouts - -Thanks to: - - Dillip Kumar Kara for crossbar code. - Zachary Lieberman for getting me into this stuff - and for being so generous with time and code. - The guys at Potion Design for helping me with VC++ - Josh Fisher for being a serious C++ nerd :) - Golan Levin for helping me debug the strangest - and slowest bug in the world! - - And all the people using this library who send in - bugs, suggestions and improvements who keep me working on - the next version - yeah thanks a lot ;) - -*/ -///////////////////////////////////////////////////////// - -#include "precomp.hpp" - -#if defined _MSC_VER && _MSC_VER >= 100 -//'sprintf': name was marked as #pragma deprecated -#pragma warning(disable: 4995) -#endif - -#include -#include -#include -#include -#include -#include - -#include - -//Include Directshow stuff here so we don't worry about needing all the h files. -#if defined _MSC_VER && _MSC_VER >= 1500 -# include "DShow.h" -# include "strmif.h" -# include "Aviriff.h" -# include "dvdmedia.h" -# include "bdaiface.h" -#else -# ifdef _MSC_VER -# define __extension__ - typedef BOOL WINBOOL; -#endif - -#include "dshow/dshow.h" -#include "dshow/dvdmedia.h" -#include "dshow/bdatypes.h" - -interface IEnumPIDMap : public IUnknown -{ -public: - virtual HRESULT STDMETHODCALLTYPE Next( - /* [in] */ ULONG cRequest, - /* [size_is][out][in] */ PID_MAP *pPIDMap, - /* [out] */ ULONG *pcReceived) = 0; - - virtual HRESULT STDMETHODCALLTYPE Skip( - /* [in] */ ULONG cRecords) = 0; - - virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Clone( - /* [out] */ IEnumPIDMap **ppIEnumPIDMap) = 0; - - virtual ~IEnumPIDMap() {} -}; - -interface IMPEG2PIDMap : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE MapPID( - /* [in] */ ULONG culPID, - /* [in] */ ULONG *pulPID, - /* [in] */ MEDIA_SAMPLE_CONTENT MediaSampleContent) = 0; - - virtual HRESULT STDMETHODCALLTYPE UnmapPID( - /* [in] */ ULONG culPID, - /* [in] */ ULONG *pulPID) = 0; - - virtual HRESULT STDMETHODCALLTYPE EnumPIDMap( - /* [out] */ IEnumPIDMap **pIEnumPIDMap) = 0; - - virtual ~IMPEG2PIDMap() {} -}; - -#endif - -//for threading -#include - -//this is for TryEnterCriticalSection -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x400 -#endif - - -/* -MEDIASUBTYPE_I420 : TGUID ='{30323449-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_Y800 : TGUID ='{30303859-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_Y8 : TGUID ='{20203859-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_Y160 : TGUID ='{30363159-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_YV16 : TGUID ='{32315659-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_Y422 : TGUID ='{32323459-0000-0010-8000-00AA00389B71}'; -MEDIASUBTYPE_GREY : TGUID ='{59455247-0000-0010-8000-00AA00389B71}'; -*/ - -#include - -DEFINE_GUID(MEDIASUBTYPE_GREY, 0x59455247, 0x0000, 0x0010, 0x80, 0x00, - 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); -DEFINE_GUID(MEDIASUBTYPE_Y8, 0x20203859, 0x0000, 0x0010, 0x80, 0x00, - 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); -DEFINE_GUID(MEDIASUBTYPE_Y800, 0x30303859, 0x0000, 0x0010, 0x80, 0x00, - 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); - -DEFINE_GUID(CLSID_CaptureGraphBuilder2,0xbf87b6e1,0x8c27,0x11d0,0xb3,0xf0,0x00,0xaa,0x00,0x37,0x61,0xc5); -DEFINE_GUID(CLSID_FilterGraph,0xe436ebb3,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(CLSID_NullRenderer,0xc1f400a4,0x3f08,0x11d3,0x9f,0x0b,0x00,0x60,0x08,0x03,0x9e,0x37); -DEFINE_GUID(CLSID_SampleGrabber,0xc1f400a0,0x3f08,0x11d3,0x9f,0x0b,0x00,0x60,0x08,0x03,0x9e,0x37); -DEFINE_GUID(CLSID_SystemDeviceEnum,0x62be5d10,0x60eb,0x11d0,0xbd,0x3b,0x00,0xa0,0xc9,0x11,0xce,0x86); -DEFINE_GUID(CLSID_VideoInputDeviceCategory,0x860bb310,0x5d01,0x11d0,0xbd,0x3b,0x00,0xa0,0xc9,0x11,0xce,0x86); -DEFINE_GUID(FORMAT_VideoInfo,0x05589f80,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a); -DEFINE_GUID(IID_IAMAnalogVideoDecoder,0xc6e13350,0x30ac,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56); -DEFINE_GUID(IID_IAMCameraControl,0xc6e13370,0x30ac,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56); -DEFINE_GUID(IID_IAMCrossbar,0xc6e13380,0x30ac,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56); -DEFINE_GUID(IID_IAMStreamConfig,0xc6e13340,0x30ac,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56); -DEFINE_GUID(IID_IAMVideoProcAmp,0xc6e13360,0x30ac,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56); -DEFINE_GUID(IID_IBaseFilter,0x56a86895,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(IID_ICaptureGraphBuilder2,0x93e5a4e0,0x2d50,0x11d2,0xab,0xfa,0x00,0xa0,0xc9,0xc6,0xe3,0x8d); -DEFINE_GUID(IID_ICreateDevEnum,0x29840822,0x5b84,0x11d0,0xbd,0x3b,0x00,0xa0,0xc9,0x11,0xce,0x86); -DEFINE_GUID(IID_IGraphBuilder,0x56a868a9,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(IID_IMPEG2PIDMap,0xafb6c2a1,0x2c41,0x11d3,0x8a,0x60,0x00,0x00,0xf8,0x1e,0x0e,0x4a); -DEFINE_GUID(IID_IMediaControl,0x56a868b1,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(IID_IMediaFilter,0x56a86899,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(IID_ISampleGrabber,0x6b652fff,0x11fe,0x4fce,0x92,0xad,0x02,0x66,0xb5,0xd7,0xc7,0x8f); -DEFINE_GUID(LOOK_UPSTREAM_ONLY,0xac798be0,0x98e3,0x11d1,0xb3,0xf1,0x00,0xaa,0x00,0x37,0x61,0xc5); -DEFINE_GUID(MEDIASUBTYPE_AYUV,0x56555941,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_IYUV,0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_RGB24,0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(MEDIASUBTYPE_RGB32,0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(MEDIASUBTYPE_RGB555,0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(MEDIASUBTYPE_RGB565,0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); -DEFINE_GUID(MEDIASUBTYPE_I420,0x49343230,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_UYVY,0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_Y211,0x31313259,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_Y411,0x31313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_Y41P,0x50313459,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_YUY2,0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_YUYV,0x56595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_YV12,0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_YVU9,0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_YVYU,0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIASUBTYPE_MJPG,0x47504A4D, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71); // MGB -DEFINE_GUID(MEDIATYPE_Interleaved,0x73766169,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(MEDIATYPE_Video,0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71); -DEFINE_GUID(PIN_CATEGORY_CAPTURE,0xfb6c4281,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba); -DEFINE_GUID(PIN_CATEGORY_PREVIEW,0xfb6c4282,0x0353,0x11d1,0x90,0x5f,0x00,0x00,0xc0,0xcc,0x16,0xba); - -interface ISampleGrabberCB : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE SampleCB( - double SampleTime, - IMediaSample *pSample) = 0; - - virtual HRESULT STDMETHODCALLTYPE BufferCB( - double SampleTime, - BYTE *pBuffer, - LONG BufferLen) = 0; - - virtual ~ISampleGrabberCB() {} -}; - -interface ISampleGrabber : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE SetOneShot( - BOOL OneShot) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetMediaType( - const AM_MEDIA_TYPE *pType) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetConnectedMediaType( - AM_MEDIA_TYPE *pType) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBufferSamples( - BOOL BufferThem) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCurrentBuffer( - LONG *pBufferSize, - LONG *pBuffer) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCurrentSample( - IMediaSample **ppSample) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetCallback( - ISampleGrabberCB *pCallback, - LONG WhichMethodToCallback) = 0; - - virtual ~ISampleGrabber() {} -}; - -#ifndef HEADER -#define HEADER(p) (&(((VIDEOINFOHEADER*)(p))->bmiHeader)) -#endif - -//Example Usage -/* - //create a videoInput object - videoInput VI; - - //Prints out a list of available devices and returns num of devices found - int numDevices = VI.listDevices(); - - int device1 = 0; //this could be any deviceID that shows up in listDevices - int device2 = 1; //this could be any deviceID that shows up in listDevices - - //if you want to capture at a different frame rate (default is 30) - //specify it here, you are not guaranteed to get this fps though. - //VI.setIdealFramerate(dev, 60); - - //setup the first device - there are a number of options: - - VI.setupDevice(device1); //setup the first device with the default settings - //VI.setupDevice(device1, VI_COMPOSITE); //or setup device with specific connection type - //VI.setupDevice(device1, 320, 240); //or setup device with specified video size - //VI.setupDevice(device1, 320, 240, VI_COMPOSITE); //or setup device with video size and connection type - - //VI.setFormat(device1, VI_NTSC_M); //if your card doesn't remember what format it should be - //call this with the appropriate format listed above - //NOTE: must be called after setupDevice! - - //optionally setup a second (or third, fourth ...) device - same options as above - VI.setupDevice(device2); - - //As requested width and height can not always be accomodated - //make sure to check the size once the device is setup - - int width = VI.getWidth(device1); - int height = VI.getHeight(device1); - int size = VI.getSize(device1); - - unsigned char * yourBuffer1 = new unsigned char[size]; - unsigned char * yourBuffer2 = new unsigned char[size]; - - //to get the data from the device first check if the data is new - if(VI.isFrameNew(device1)){ - VI.getPixels(device1, yourBuffer1, false, false); //fills pixels as a BGR (for openCV) unsigned char array - no flipping - VI.getPixels(device1, yourBuffer2, true, true); //fills pixels as a RGB (for openGL) unsigned char array - flipping! - } - - //same applies to device2 etc - - //to get a settings dialog for the device - VI.showSettingsWindow(device1); - - - //Shut down devices properly - VI.stopDevice(device1); - VI.stopDevice(device2); -*/ - - -////////////////////////////////////// VARS AND DEFS ////////////////////////////////// - - -//STUFF YOU CAN CHANGE - -//change for verbose debug info -static bool verbose = true; - -//if you need VI to use multi threaded com -//#define VI_COM_MULTI_THREADED - -//STUFF YOU DON'T CHANGE - -//videoInput defines -#define VI_VERSION 0.1995 -#define VI_MAX_CAMERAS 20 -#define VI_NUM_TYPES 20 //MGB -#define VI_NUM_FORMATS 18 //DON'T TOUCH - -//defines for setPhyCon - tuner is not as well supported as composite and s-video -#define VI_COMPOSITE 0 -#define VI_S_VIDEO 1 -#define VI_TUNER 2 -#define VI_USB 3 -#define VI_1394 4 - -//defines for formats -#define VI_NTSC_M 0 -#define VI_PAL_B 1 -#define VI_PAL_D 2 -#define VI_PAL_G 3 -#define VI_PAL_H 4 -#define VI_PAL_I 5 -#define VI_PAL_M 6 -#define VI_PAL_N 7 -#define VI_PAL_NC 8 -#define VI_SECAM_B 9 -#define VI_SECAM_D 10 -#define VI_SECAM_G 11 -#define VI_SECAM_H 12 -#define VI_SECAM_K 13 -#define VI_SECAM_K1 14 -#define VI_SECAM_L 15 -#define VI_NTSC_M_J 16 -#define VI_NTSC_433 17 - - -//allows us to directShow classes here with the includes in the cpp -struct ICaptureGraphBuilder2; -struct IGraphBuilder; -struct IBaseFilter; -struct IAMCrossbar; -struct IMediaControl; -struct ISampleGrabber; -struct IMediaEventEx; -struct IAMStreamConfig; -struct _AMMediaType; -class SampleGrabberCallback; -typedef _AMMediaType AM_MEDIA_TYPE; - -//keeps track of how many instances of VI are being used -//don't touch -//static int comInitCount = 0; - - -//////////////////////////////////////// VIDEO DEVICE /////////////////////////////////// - -class videoDevice{ - - - public: - - videoDevice(); - void setSize(int w, int h); - void NukeDownstream(IBaseFilter *pBF); - void destroyGraph(); - ~videoDevice(); - - int videoSize; - int width; - int height; - - int tryWidth; - int tryHeight; - GUID tryVideoType; - - ICaptureGraphBuilder2 *pCaptureGraph; // Capture graph builder object - IGraphBuilder *pGraph; // Graph builder object - IMediaControl *pControl; // Media control object - IBaseFilter *pVideoInputFilter; // Video Capture filter - IBaseFilter *pGrabberF; - IBaseFilter * pDestFilter; - IAMStreamConfig *streamConf; - ISampleGrabber * pGrabber; // Grabs frame - AM_MEDIA_TYPE * pAmMediaType; - - IMediaEventEx * pMediaEvent; - - GUID videoType; - long formatType; - - SampleGrabberCallback * sgCallback; - - bool tryDiffSize; - bool useCrossbar; - bool readyToCapture; - bool sizeSet; - bool setupStarted; - bool specificFormat; - bool autoReconnect; - int nFramesForReconnect; - unsigned long nFramesRunning; - int connection; - int storeConn; - int myID; - long requestedFrameTime; //ie fps - - char nDeviceName[255]; - WCHAR wDeviceName[255]; - - unsigned char * pixels; - char * pBuffer; - -}; - - - - -////////////////////////////////////// VIDEO INPUT ///////////////////////////////////// - - - -class videoInput{ - - public: - videoInput(); - ~videoInput(); - - //turns off console messages - default is to print messages - static void setVerbose(bool _verbose); - - //Functions in rough order they should be used. - static int listDevices(bool silent = false); - - //needs to be called after listDevices - otherwise returns NULL - static char * getDeviceName(int deviceID); - - //choose to use callback based capture - or single threaded - void setUseCallback(bool useCallback); - - //call before setupDevice - //directshow will try and get the closest possible framerate to what is requested - void setIdealFramerate(int deviceID, int idealFramerate); - - //some devices will stop delivering frames after a while - this method gives you the option to try and reconnect - //to a device if videoInput detects that a device has stopped delivering frames. - //you MUST CALL isFrameNew every app loop for this to have any effect - void setAutoReconnectOnFreeze(int deviceNumber, bool doReconnect, int numMissedFramesBeforeReconnect); - - //Choose one of these five to setup your device - bool setupDevice(int deviceID); - bool setupDevice(int deviceID, int w, int h); - bool setupDeviceFourcc(int deviceID, int w, int h,int fourcc); - - //These two are only for capture cards - //USB and Firewire cameras souldn't specify connection - bool setupDevice(int deviceID, int connection); - bool setupDevice(int deviceID, int w, int h, int connection); - - bool setFourcc(int deviceNumber, int fourcc); - - //If you need to you can set your NTSC/PAL/SECAM - //preference here. if it is available it will be used. - //see #defines above for available formats - eg VI_NTSC_M or VI_PAL_B - //should be called after setupDevice - //can be called multiple times - bool setFormat(int deviceNumber, int format); - - //Tells you when a new frame has arrived - you should call this if you have specified setAutoReconnectOnFreeze to true - bool isFrameNew(int deviceID); - - bool isDeviceSetup(int deviceID); - - //Returns the pixels - flipRedAndBlue toggles RGB/BGR flipping - and you can flip the image too - unsigned char * getPixels(int deviceID, bool flipRedAndBlue = true, bool flipImage = false); - - //Or pass in a buffer for getPixels to fill returns true if successful. - bool getPixels(int id, unsigned char * pixels, bool flipRedAndBlue = true, bool flipImage = false); - - //Launches a pop up settings window - //For some reason in GLUT you have to call it twice each time. - void showSettingsWindow(int deviceID); - - //Manual control over settings thanks..... - //These are experimental for now. - bool setVideoSettingFilter(int deviceID, long Property, long lValue, long Flags = 0, bool useDefaultValue = false); - bool setVideoSettingFilterPct(int deviceID, long Property, float pctValue, long Flags = 0); - bool getVideoSettingFilter(int deviceID, long Property, long &min, long &max, long &SteppingDelta, long ¤tValue, long &flags, long &defaultValue); - - bool setVideoSettingCamera(int deviceID, long Property, long lValue, long Flags = 0, bool useDefaultValue = false); - bool setVideoSettingCameraPct(int deviceID, long Property, float pctValue, long Flags = 0); - bool getVideoSettingCamera(int deviceID, long Property, long &min, long &max, long &SteppingDelta, long ¤tValue, long &flags, long &defaultValue); - - //bool setVideoSettingCam(int deviceID, long Property, long lValue, long Flags = NULL, bool useDefaultValue = false); - - //get width, height and number of pixels - int getWidth(int deviceID); - int getHeight(int deviceID); - int getSize(int deviceID); - int getFourcc(int deviceID); - double getFPS(int deviceID); - - //completely stops and frees a device - void stopDevice(int deviceID); - - //as above but then sets it up with same settings - bool restartDevice(int deviceID); - - //number of devices available - int devicesFound; - - // mapping from OpenCV CV_CAP_PROP to videoinput/dshow properties - int getVideoPropertyFromCV(int cv_property); - int getCameraPropertyFromCV(int cv_property); - - private: - void setPhyCon(int deviceID, int conn); - void setAttemptCaptureSize(int deviceID, int w, int h,GUID mediaType=MEDIASUBTYPE_RGB24); - bool setup(int deviceID); - void processPixels(unsigned char * src, unsigned char * dst, int width, int height, bool bRGB, bool bFlip); - int start(int deviceID, videoDevice * VD); - int getDeviceCount(); - void getMediaSubtypeAsString(GUID type, char * typeAsString); - GUID *getMediaSubtypeFromFourcc(int fourcc); - int getFourccFromMediaSubtype(GUID type); - - void getVideoPropertyAsString(int prop, char * propertyAsString); - void getCameraPropertyAsString(int prop, char * propertyAsString); - - HRESULT getDevice(IBaseFilter **pSrcFilter, int deviceID, WCHAR * wDeviceName, char * nDeviceName); - static HRESULT ShowFilterPropertyPages(IBaseFilter *pFilter); - static HRESULT ShowStreamPropertyPages(IAMStreamConfig *pStream); - - HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath); - HRESULT routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter **pVidInFilter, int conType, GUID captureMode); - - //don't touch - static bool comInit(); - static bool comUnInit(); - - int connection; - int callbackSetCount; - bool bCallback; - - GUID CAPTURE_MODE; - - //Extra video subtypes - GUID MEDIASUBTYPE_Y800; - GUID MEDIASUBTYPE_Y8; - GUID MEDIASUBTYPE_GREY; - - videoDevice * VDList[VI_MAX_CAMERAS]; - GUID mediaSubtypes[VI_NUM_TYPES]; - long formatTypes[VI_NUM_FORMATS]; - - static void __cdecl basicThread(void * objPtr); - - static char deviceNames[VI_MAX_CAMERAS][255]; - -}; - -/////////////////////////// HANDY FUNCTIONS ///////////////////////////// - -static void MyFreeMediaType(AM_MEDIA_TYPE& mt){ - if (mt.cbFormat != 0) - { - CoTaskMemFree((PVOID)mt.pbFormat); - mt.cbFormat = 0; - mt.pbFormat = NULL; - } - if (mt.pUnk != NULL) - { - // Unecessary because pUnk should not be used, but safest. - mt.pUnk->Release(); - mt.pUnk = NULL; - } -} - -static void MyDeleteMediaType(AM_MEDIA_TYPE *pmt) -{ - if (pmt != NULL) - { - MyFreeMediaType(*pmt); - CoTaskMemFree(pmt); - } -} - -////////////////////////////// CALLBACK //////////////////////////////// - -//Callback class -class SampleGrabberCallback : public ISampleGrabberCB{ -public: - - //------------------------------------------------ - SampleGrabberCallback(){ - InitializeCriticalSection(&critSection); - freezeCheck = 0; - - - bufferSetup = false; - newFrame = false; - latestBufferLength = 0; - - hEvent = CreateEvent(NULL, true, false, NULL); - } - - - //------------------------------------------------ - virtual ~SampleGrabberCallback(){ - ptrBuffer = NULL; - DeleteCriticalSection(&critSection); - CloseHandle(hEvent); - if(bufferSetup){ - delete[] pixels; - } - } - - - //------------------------------------------------ - bool setupBuffer(int numBytesIn){ - if(bufferSetup){ - return false; - }else{ - numBytes = numBytesIn; - pixels = new unsigned char[numBytes]; - bufferSetup = true; - newFrame = false; - latestBufferLength = 0; - } - return true; - } - - - //------------------------------------------------ - STDMETHODIMP_(ULONG) AddRef() { return 1; } - STDMETHODIMP_(ULONG) Release() { return 2; } - - - //------------------------------------------------ - STDMETHODIMP QueryInterface(REFIID, void **ppvObject){ - *ppvObject = static_cast(this); - return S_OK; - } - - - //This method is meant to have less overhead - //------------------------------------------------ - STDMETHODIMP SampleCB(double , IMediaSample *pSample){ - if(WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0) return S_OK; - - HRESULT hr = pSample->GetPointer(&ptrBuffer); - - if(hr == S_OK){ - latestBufferLength = pSample->GetActualDataLength(); - if(latestBufferLength == numBytes){ - EnterCriticalSection(&critSection); - memcpy(pixels, ptrBuffer, latestBufferLength); - newFrame = true; - freezeCheck = 1; - LeaveCriticalSection(&critSection); - SetEvent(hEvent); - }else{ - printf("ERROR: SampleCB() - buffer sizes do not match\n"); - } - } - - return S_OK; - } - - - //This method is meant to have more overhead - STDMETHODIMP BufferCB(double, BYTE *, long){ - return E_NOTIMPL; - } - - int freezeCheck; - - int latestBufferLength; - int numBytes; - bool newFrame; - bool bufferSetup; - unsigned char * pixels; - unsigned char * ptrBuffer; - CRITICAL_SECTION critSection; - HANDLE hEvent; -}; - - -////////////////////////////// VIDEO DEVICE //////////////////////////////// - -// ---------------------------------------------------------------------- -// Should this class also be the callback? -// -// ---------------------------------------------------------------------- - -videoDevice::videoDevice(){ - - pCaptureGraph = NULL; // Capture graph builder object - pGraph = NULL; // Graph builder object - pControl = NULL; // Media control object - pVideoInputFilter = NULL; // Video Capture filter - pGrabber = NULL; // Grabs frame - pDestFilter = NULL; // Null Renderer Filter - pGrabberF = NULL; // Grabber Filter - pMediaEvent = NULL; - streamConf = NULL; - pAmMediaType = NULL; - - //This is our callback class that processes the frame. - sgCallback = new SampleGrabberCallback(); - sgCallback->newFrame = false; - - //Default values for capture type - videoType = MEDIASUBTYPE_RGB24; - connection = PhysConn_Video_Composite; - storeConn = 0; - - videoSize = 0; - width = 0; - height = 0; - - tryWidth = 640; - tryHeight = 480; - tryVideoType = MEDIASUBTYPE_RGB24; - nFramesForReconnect= 10000; - nFramesRunning = 0; - myID = -1; - - tryDiffSize = true; - useCrossbar = false; - readyToCapture = false; - sizeSet = false; - setupStarted = false; - specificFormat = false; - autoReconnect = false; - requestedFrameTime = -1; - - memset(wDeviceName, 0, sizeof(WCHAR) * 255); - memset(nDeviceName, 0, sizeof(char) * 255); - -} - - -// ---------------------------------------------------------------------- -// The only place we are doing new -// -// ---------------------------------------------------------------------- - -void videoDevice::setSize(int w, int h){ - if(sizeSet){ - if(verbose)printf("SETUP: Error device size should not be set more than once \n"); - } - else - { - width = w; - height = h; - videoSize = w*h*3; - sizeSet = true; - pixels = new unsigned char[videoSize]; - pBuffer = new char[videoSize]; - - memset(pixels, 0 , videoSize); - sgCallback->setupBuffer(videoSize); - - } -} - - -// ---------------------------------------------------------------------- -// Borrowed from the SDK, use it to take apart the graph from -// the capture device downstream to the null renderer -// ---------------------------------------------------------------------- - -void videoDevice::NukeDownstream(IBaseFilter *pBF){ - IPin *pP, *pTo; - ULONG u; - IEnumPins *pins = NULL; - PIN_INFO pininfo; - HRESULT hr = pBF->EnumPins(&pins); - pins->Reset(); - while (hr == NOERROR) - { - hr = pins->Next(1, &pP, &u); - if (hr == S_OK && pP) - { - pP->ConnectedTo(&pTo); - if (pTo) - { - hr = pTo->QueryPinInfo(&pininfo); - if (hr == NOERROR) - { - if (pininfo.dir == PINDIR_INPUT) - { - NukeDownstream(pininfo.pFilter); - pGraph->Disconnect(pTo); - pGraph->Disconnect(pP); - pGraph->RemoveFilter(pininfo.pFilter); - } - pininfo.pFilter->Release(); - pininfo.pFilter = NULL; - } - pTo->Release(); - } - pP->Release(); - } - } - if (pins) pins->Release(); -} - - -// ---------------------------------------------------------------------- -// Also from SDK -// ---------------------------------------------------------------------- - -void videoDevice::destroyGraph(){ - HRESULT hr = 0; - //int FuncRetval=0; - //int NumFilters=0; - - int i = 0; - while (hr == NOERROR) - { - IEnumFilters * pEnum = 0; - ULONG cFetched; - - // We must get the enumerator again every time because removing a filter from the graph - // invalidates the enumerator. We always get only the first filter from each enumerator. - hr = pGraph->EnumFilters(&pEnum); - if (FAILED(hr)) { if(verbose)printf("SETUP: pGraph->EnumFilters() failed. \n"); return; } - - IBaseFilter * pFilter = NULL; - if (pEnum->Next(1, &pFilter, &cFetched) == S_OK) - { - FILTER_INFO FilterInfo; - memset(&FilterInfo, 0, sizeof(FilterInfo)); - hr = pFilter->QueryFilterInfo(&FilterInfo); - FilterInfo.pGraph->Release(); - - int count = 0; - char buffer[255]; - memset(buffer, 0, 255 * sizeof(char)); - - while( FilterInfo.achName[count] != 0x00 ) - { - buffer[count] = (char)FilterInfo.achName[count]; - count++; - } - - if(verbose)printf("SETUP: removing filter %s...\n", buffer); - hr = pGraph->RemoveFilter(pFilter); - if (FAILED(hr)) { if(verbose)printf("SETUP: pGraph->RemoveFilter() failed. \n"); return; } - if(verbose)printf("SETUP: filter removed %s \n",buffer); - - pFilter->Release(); - pFilter = NULL; - } - else break; - pEnum->Release(); - pEnum = NULL; - i++; - } - - return; -} - - -// ---------------------------------------------------------------------- -// Our deconstructor, attempts to tear down graph and release filters etc -// Does checking to make sure it only is freeing if it needs to -// Probably could be a lot cleaner! :) -// ---------------------------------------------------------------------- - -videoDevice::~videoDevice(){ - - if(setupStarted){ if(verbose)printf("\nSETUP: Disconnecting device %i\n", myID); } - else{ - if(sgCallback){ - sgCallback->Release(); - delete sgCallback; - } - return; - } - - HRESULT HR = NOERROR; - - //Stop the callback and free it - if( (sgCallback) && (pGrabber) ) - { - pGrabber->SetCallback(NULL, 1); - if(verbose)printf("SETUP: freeing Grabber Callback\n"); - sgCallback->Release(); - - //delete our pixels - if(sizeSet){ - delete[] pixels; - delete[] pBuffer; - } - - delete sgCallback; - } - - //Check to see if the graph is running, if so stop it. - if( (pControl) ) - { - HR = pControl->Pause(); - if (FAILED(HR)) if(verbose)printf("ERROR - Could not pause pControl\n"); - - HR = pControl->Stop(); - if (FAILED(HR)) if(verbose)printf("ERROR - Could not stop pControl\n"); - } - - //Disconnect filters from capture device - if( (pVideoInputFilter) )NukeDownstream(pVideoInputFilter); - - //Release and zero pointers to our filters etc - if( (pDestFilter) ){ if(verbose)printf("SETUP: freeing Renderer \n"); - (pDestFilter)->Release(); - (pDestFilter) = 0; - } - if( (pVideoInputFilter) ){ if(verbose)printf("SETUP: freeing Capture Source \n"); - (pVideoInputFilter)->Release(); - (pVideoInputFilter) = 0; - } - if( (pGrabberF) ){ if(verbose)printf("SETUP: freeing Grabber Filter \n"); - (pGrabberF)->Release(); - (pGrabberF) = 0; - } - if( (pGrabber) ){ if(verbose)printf("SETUP: freeing Grabber \n"); - (pGrabber)->Release(); - (pGrabber) = 0; - } - if( (pControl) ){ if(verbose)printf("SETUP: freeing Control \n"); - (pControl)->Release(); - (pControl) = 0; - } - if( (pMediaEvent) ){ if(verbose)printf("SETUP: freeing Media Event \n"); - (pMediaEvent)->Release(); - (pMediaEvent) = 0; - } - if( (streamConf) ){ if(verbose)printf("SETUP: freeing Stream \n"); - (streamConf)->Release(); - (streamConf) = 0; - } - - if( (pAmMediaType) ){ if(verbose)printf("SETUP: freeing Media Type \n"); - MyDeleteMediaType(pAmMediaType); - } - - if((pMediaEvent)){ - if(verbose)printf("SETUP: freeing Media Event \n"); - (pMediaEvent)->Release(); - (pMediaEvent) = 0; - } - - //Destroy the graph - if( (pGraph) )destroyGraph(); - - //Release and zero our capture graph and our main graph - if( (pCaptureGraph) ){ if(verbose)printf("SETUP: freeing Capture Graph \n"); - (pCaptureGraph)->Release(); - (pCaptureGraph) = 0; - } - if( (pGraph) ){ if(verbose)printf("SETUP: freeing Main Graph \n"); - (pGraph)->Release(); - (pGraph) = 0; - } - - //delete our pointers - delete pDestFilter; - delete pVideoInputFilter; - delete pGrabberF; - delete pGrabber; - delete pControl; - delete streamConf; - delete pMediaEvent; - delete pCaptureGraph; - delete pGraph; - - if(verbose)printf("SETUP: Device %i disconnected and freed\n\n",myID); -} - - -////////////////////////////// VIDEO INPUT //////////////////////////////// -//////////////////////////// PUBLIC METHODS /////////////////////////////// - - -// ---------------------------------------------------------------------- -// Constructor - creates instances of videoDevice and adds the various -// media subtypes to check. -// ---------------------------------------------------------------------- - -videoInput::videoInput(){ - //start com - comInit(); - - devicesFound = 0; - callbackSetCount = 0; - bCallback = true; - - //setup a max no of device objects - for(int i=0; i= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return; - - if( idealFramerate > 0 ){ - VDList[deviceNumber]->requestedFrameTime = (unsigned long)(10000000 / idealFramerate); - } -} - - -// ---------------------------------------------------------------------- -// Set the requested framerate - no guarantee you will get this -// -// ---------------------------------------------------------------------- - -void videoInput::setAutoReconnectOnFreeze(int deviceNumber, bool doReconnect, int numMissedFramesBeforeReconnect){ - if(deviceNumber >= VI_MAX_CAMERAS) return; - - VDList[deviceNumber]->autoReconnect = doReconnect; - VDList[deviceNumber]->nFramesForReconnect = numMissedFramesBeforeReconnect; - -} - - -// ---------------------------------------------------------------------- -// Setup a device with the default settings -// -// ---------------------------------------------------------------------- - -bool videoInput::setupDevice(int deviceNumber){ - if(deviceNumber >= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return false; - - if(setup(deviceNumber))return true; - return false; -} - - -// ---------------------------------------------------------------------- -// Setup a device with the default size but specify input type -// -// ---------------------------------------------------------------------- - -bool videoInput::setupDevice(int deviceNumber, int _connection){ - if(deviceNumber >= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return false; - - setPhyCon(deviceNumber, _connection); - if(setup(deviceNumber))return true; - return false; -} - - -// ---------------------------------------------------------------------- -// Setup a device with the default connection but specify size -// -// ---------------------------------------------------------------------- - -bool videoInput::setupDevice(int deviceNumber, int w, int h){ - if(deviceNumber >= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return false; - - setAttemptCaptureSize(deviceNumber,w,h); - if(setup(deviceNumber))return true; - return false; -} - -// ---------------------------------------------------------------------- -// Setup a device with the default connection but specify size and image format -// -// Note: -// Need a new name for this since signature clashes with ",int connection)" -// ---------------------------------------------------------------------- - -bool videoInput::setupDeviceFourcc(int deviceNumber, int w, int h,int fourcc){ - if(deviceNumber >= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return false; - - if ( fourcc != -1 ) { - GUID *mediaType = getMediaSubtypeFromFourcc(fourcc); - if ( mediaType ) { - setAttemptCaptureSize(deviceNumber,w,h,*mediaType); - } - } else { - setAttemptCaptureSize(deviceNumber,w,h); - } - if(setup(deviceNumber))return true; - return false; -} - - -// ---------------------------------------------------------------------- -// Setup a device with specific size and connection -// -// ---------------------------------------------------------------------- - -bool videoInput::setupDevice(int deviceNumber, int w, int h, int _connection){ - if(deviceNumber >= VI_MAX_CAMERAS || VDList[deviceNumber]->readyToCapture) return false; - - setAttemptCaptureSize(deviceNumber,w,h); - setPhyCon(deviceNumber, _connection); - if(setup(deviceNumber))return true; - return false; -} - - -// ---------------------------------------------------------------------- -// Setup the default video format of the device -// Must be called after setup! -// See #define formats in header file (eg VI_NTSC_M ) -// -// ---------------------------------------------------------------------- - -bool videoInput::setFormat(int deviceNumber, int format){ - if(deviceNumber >= VI_MAX_CAMERAS || !VDList[deviceNumber]->readyToCapture) return false; - - bool returnVal = false; - - if(format >= 0 && format < VI_NUM_FORMATS){ - VDList[deviceNumber]->formatType = formatTypes[format]; - VDList[deviceNumber]->specificFormat = true; - - if(VDList[deviceNumber]->specificFormat){ - - HRESULT hr = getDevice(&VDList[deviceNumber]->pVideoInputFilter, deviceNumber, VDList[deviceNumber]->wDeviceName, VDList[deviceNumber]->nDeviceName); - if(hr != S_OK){ - return false; - } - - IAMAnalogVideoDecoder *pVideoDec = NULL; - hr = VDList[deviceNumber]->pCaptureGraph->FindInterface(NULL, &MEDIATYPE_Video, VDList[deviceNumber]->pVideoInputFilter, IID_IAMAnalogVideoDecoder, (void **)&pVideoDec); - - - //in case the settings window some how freed them first - if(VDList[deviceNumber]->pVideoInputFilter)VDList[deviceNumber]->pVideoInputFilter->Release(); - if(VDList[deviceNumber]->pVideoInputFilter)VDList[deviceNumber]->pVideoInputFilter = NULL; - - if(FAILED(hr)){ - printf("SETUP: couldn't set requested format\n"); - }else{ - long lValue = 0; - hr = pVideoDec->get_AvailableTVFormats(&lValue); - if( SUCCEEDED(hr) && (lValue & VDList[deviceNumber]->formatType) ) - { - hr = pVideoDec->put_TVFormat(VDList[deviceNumber]->formatType); - if( FAILED(hr) ){ - printf("SETUP: couldn't set requested format\n"); - }else{ - returnVal = true; - } - } - - pVideoDec->Release(); - pVideoDec = NULL; - } - } - } - - return returnVal; -} - -// ---------------------------------------------------------------------- -// Our static function for returning device names - thanks Peter! -// Must call listDevices first. -// -// ---------------------------------------------------------------------- -char videoInput::deviceNames[VI_MAX_CAMERAS][255]={{0}}; - -char * videoInput::getDeviceName(int deviceID){ - if( deviceID >= VI_MAX_CAMERAS ){ - return NULL; - } - return deviceNames[deviceID]; -} - - -// ---------------------------------------------------------------------- -// Our static function for finding num devices available etc -// -// ---------------------------------------------------------------------- - -int videoInput::listDevices(bool silent){ - - //COM Library Intialization - comInit(); - - if(!silent)printf("\nVIDEOINPUT SPY MODE!\n\n"); - - - ICreateDevEnum *pDevEnum = NULL; - IEnumMoniker *pEnum = NULL; - int deviceCounter = 0; - - HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, - CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, - reinterpret_cast(&pDevEnum)); - - - if (SUCCEEDED(hr)) - { - // Create an enumerator for the video capture category. - hr = pDevEnum->CreateClassEnumerator( - CLSID_VideoInputDeviceCategory, - &pEnum, 0); - - if(hr == S_OK){ - - if(!silent)printf("SETUP: Looking For Capture Devices\n"); - IMoniker *pMoniker = NULL; - - while (pEnum->Next(1, &pMoniker, NULL) == S_OK){ - - IPropertyBag *pPropBag; - hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, - (void**)(&pPropBag)); - - if (FAILED(hr)){ - pMoniker->Release(); - continue; // Skip this one, maybe the next one will work. - } - - - // Find the description or friendly name. - VARIANT varName; - VariantInit(&varName); - hr = pPropBag->Read(L"Description", &varName, 0); - - if (FAILED(hr)) hr = pPropBag->Read(L"FriendlyName", &varName, 0); - - if (SUCCEEDED(hr)){ - - hr = pPropBag->Read(L"FriendlyName", &varName, 0); - - int count = 0; - int maxLen = sizeof(deviceNames[0])/sizeof(deviceNames[0][0]) - 2; - while( varName.bstrVal[count] != 0x00 && count < maxLen) { - deviceNames[deviceCounter][count] = (char)varName.bstrVal[count]; - count++; - } - deviceNames[deviceCounter][count] = 0; - - if(!silent)printf("SETUP: %i) %s \n",deviceCounter, deviceNames[deviceCounter]); - } - - pPropBag->Release(); - pPropBag = NULL; - - pMoniker->Release(); - pMoniker = NULL; - - deviceCounter++; - } - - pDevEnum->Release(); - pDevEnum = NULL; - - pEnum->Release(); - pEnum = NULL; - } - - if(!silent)printf("SETUP: %i Device(s) found\n\n", deviceCounter); - } - - comUnInit(); - - return deviceCounter; -} - - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- - -int videoInput::getWidth(int id){ - - if(isDeviceSetup(id)) - { - return VDList[id] ->width; - } - - return 0; - -} - - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- - -int videoInput::getHeight(int id){ - - if(isDeviceSetup(id)) - { - return VDList[id] ->height; - } - - return 0; - -} - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- -int videoInput::getFourcc(int id){ - - if(isDeviceSetup(id)) - { - return getFourccFromMediaSubtype(VDList[id]->videoType); - } - - return 0; - -} - -double videoInput::getFPS(int id){ - - if(isDeviceSetup(id)) - { - double frameTime= VDList[id]->requestedFrameTime; - if (frameTime>0) { - return (10000000.0 / frameTime); - } - } - - return 0; - -} - - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- - -int videoInput::getSize(int id){ - - if(isDeviceSetup(id)) - { - return VDList[id] ->videoSize; - } - - return 0; - -} - - -// ---------------------------------------------------------------------- -// Uses a supplied buffer -// ---------------------------------------------------------------------- - -bool videoInput::getPixels(int id, unsigned char * dstBuffer, bool flipRedAndBlue, bool flipImage){ - - bool success = false; - - if(isDeviceSetup(id)){ - if(bCallback){ - //callback capture - - DWORD result = WaitForSingleObject(VDList[id]->sgCallback->hEvent, 1000); - if( result != WAIT_OBJECT_0) return false; - - //double paranoia - mutexing with both event and critical section - EnterCriticalSection(&VDList[id]->sgCallback->critSection); - - unsigned char * src = VDList[id]->sgCallback->pixels; - unsigned char * dst = dstBuffer; - int height = VDList[id]->height; - int width = VDList[id]->width; - - processPixels(src, dst, width, height, flipRedAndBlue, flipImage); - VDList[id]->sgCallback->newFrame = false; - - LeaveCriticalSection(&VDList[id]->sgCallback->critSection); - - ResetEvent(VDList[id]->sgCallback->hEvent); - - success = true; - - } - else{ - //regular capture method - long bufferSize = VDList[id]->videoSize; - HRESULT hr = VDList[id]->pGrabber->GetCurrentBuffer(&bufferSize, (long *)VDList[id]->pBuffer); - if(hr==S_OK){ - int numBytes = VDList[id]->videoSize; - if (numBytes == bufferSize){ - - unsigned char * src = (unsigned char * )VDList[id]->pBuffer; - unsigned char * dst = dstBuffer; - int height = VDList[id]->height; - int width = VDList[id]->width; - - processPixels(src, dst, width, height, flipRedAndBlue, flipImage); - success = true; - }else{ - if(verbose)printf("ERROR: GetPixels() - bufferSizes do not match!\n"); - } - }else{ - if(verbose)printf("ERROR: GetPixels() - Unable to grab frame for device %i\n", id); - } - } - } - - return success; -} - - -// ---------------------------------------------------------------------- -// Returns a buffer -// ---------------------------------------------------------------------- -unsigned char * videoInput::getPixels(int id, bool flipRedAndBlue, bool flipImage){ - - if(isDeviceSetup(id)){ - getPixels(id, VDList[id]->pixels, flipRedAndBlue, flipImage); - } - - return VDList[id]->pixels; -} - - - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- -bool videoInput::isFrameNew(int id){ - if(!isDeviceSetup(id)) return false; - if(!bCallback)return true; - - bool result = false; - bool freeze = false; - - //again super paranoia! - EnterCriticalSection(&VDList[id]->sgCallback->critSection); - result = VDList[id]->sgCallback->newFrame; - - //we need to give it some time at the begining to start up so lets check after 400 frames - if(VDList[id]->nFramesRunning > 400 && VDList[id]->sgCallback->freezeCheck > VDList[id]->nFramesForReconnect ){ - freeze = true; - } - - //we increment the freezeCheck var here - the callback resets it to 1 - //so as long as the callback is running this var should never get too high. - //if the callback is not running then this number will get high and trigger the freeze action below - VDList[id]->sgCallback->freezeCheck++; - LeaveCriticalSection(&VDList[id]->sgCallback->critSection); - - VDList[id]->nFramesRunning++; - - if(freeze && VDList[id]->autoReconnect){ - if(verbose)printf("ERROR: Device seems frozen - attempting to reconnect\n"); - if( !restartDevice(VDList[id]->myID) ){ - if(verbose)printf("ERROR: Unable to reconnect to device\n"); - }else{ - if(verbose)printf("SUCCESS: Able to reconnect to device\n"); - } - } - - return result; -} - - -// ---------------------------------------------------------------------- -// -// -// ---------------------------------------------------------------------- - -bool videoInput::isDeviceSetup(int id){ - - if(idreadyToCapture)return true; - else return false; - -} - - -// ---------------------------------------------------------------------- -// Gives us a little pop up window to adjust settings -// We do this in a seperate thread now! -// ---------------------------------------------------------------------- - - -void __cdecl videoInput::basicThread(void * objPtr){ - - //get a reference to the video device - //not a copy as we need to free the filter - videoDevice * vd = *( (videoDevice **)(objPtr) ); - ShowFilterPropertyPages(vd->pVideoInputFilter); - - - - //now we free the filter and make sure it set to NULL - if(vd->pVideoInputFilter)vd->pVideoInputFilter->Release(); - if(vd->pVideoInputFilter)vd->pVideoInputFilter = NULL; - - return; -} - -void videoInput::showSettingsWindow(int id){ - - if(isDeviceSetup(id)){ - //HANDLE myTempThread; - - //we reconnect to the device as we have freed our reference to it - //why have we freed our reference? because there seemed to be an issue - //with some mpeg devices if we didn't - HRESULT hr = getDevice(&VDList[id]->pVideoInputFilter, id, VDList[id]->wDeviceName, VDList[id]->nDeviceName); - if(hr == S_OK){ - //myTempThread = (HANDLE) - _beginthread(basicThread, 0, (void *)&VDList[id]); - } - } -} - - -// Set a video signal setting using IAMVideoProcAmp -bool videoInput::getVideoSettingFilter(int deviceID, long Property, long &min, long &max, long &SteppingDelta, long ¤tValue, long &flags, long &defaultValue){ - if( !isDeviceSetup(deviceID) )return false; - - HRESULT hr; - //bool isSuccessful = false; - - videoDevice * VD = VDList[deviceID]; - - hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); - if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); - return false; - } - - IAMVideoProcAmp *pAMVideoProcAmp = NULL; - - hr = VD->pVideoInputFilter->QueryInterface(IID_IAMVideoProcAmp, (void**)&pAMVideoProcAmp); - if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - return false; - } - - char propStr[16]; - getVideoPropertyAsString(Property,propStr); - - if (verbose) printf("Setting video setting %s.\n", propStr); - - pAMVideoProcAmp->GetRange(Property, &min, &max, &SteppingDelta, &defaultValue, &flags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); - pAMVideoProcAmp->Get(Property, ¤tValue, &flags); - - if(pAMVideoProcAmp)pAMVideoProcAmp->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - - return true; - -} - - -// Set a video signal setting using IAMVideoProcAmp -bool videoInput::setVideoSettingFilterPct(int deviceID, long Property, float pctValue, long Flags){ - if( !isDeviceSetup(deviceID) )return false; - - long min, max, currentValue, flags, defaultValue, stepAmnt; - - if( !getVideoSettingFilter(deviceID, Property, min, max, stepAmnt, currentValue, flags, defaultValue) )return false; - - if(pctValue > 1.0)pctValue = 1.0; - else if(pctValue < 0)pctValue = 0.0; - - float range = (float)max - (float)min; - if(range <= 0)return false; - if(stepAmnt == 0) return false; - - long value = (long)( (float)min + range * pctValue ); - long rasterValue = value; - - //if the range is the stepAmnt then it is just a switch - //so we either set the value to low or high - if( range == stepAmnt ){ - if( pctValue < 0.5)rasterValue = min; - else rasterValue = max; - }else{ - //we need to rasterize the value to the stepping amnt - long mod = value % stepAmnt; - float halfStep = (float)stepAmnt * 0.5f; - if( mod < halfStep ) rasterValue -= mod; - else rasterValue += stepAmnt - mod; - printf("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); - } - - return setVideoSettingFilter(deviceID, Property, rasterValue, Flags, false); -} - - -// Set a video signal setting using IAMVideoProcAmp -bool videoInput::setVideoSettingFilter(int deviceID, long Property, long lValue, long Flags, bool useDefaultValue){ - if( !isDeviceSetup(deviceID) )return false; - - HRESULT hr; - //bool isSuccessful = false; - - char propStr[16]; - getVideoPropertyAsString(Property,propStr); - - videoDevice * VD = VDList[deviceID]; - - hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); - if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); - return false; - } - - IAMVideoProcAmp *pAMVideoProcAmp = NULL; - - hr = VD->pVideoInputFilter->QueryInterface(IID_IAMVideoProcAmp, (void**)&pAMVideoProcAmp); - if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - return false; - } - - if (verbose) printf("Setting video setting %s.\n", propStr); - long CurrVal, Min, Max, SteppingDelta, Default, CapsFlags, AvailableCapsFlags = 0; - - - pAMVideoProcAmp->GetRange(Property, &Min, &Max, &SteppingDelta, &Default, &AvailableCapsFlags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); - pAMVideoProcAmp->Get(Property, &CurrVal, &CapsFlags); - - if (verbose) printf("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); - - if (useDefaultValue) { - pAMVideoProcAmp->Set(Property, Default, VideoProcAmp_Flags_Auto); - } - else{ - // Perhaps add a check that lValue and Flags are within the range aquired from GetRange above - pAMVideoProcAmp->Set(Property, lValue, Flags); - } - - if(pAMVideoProcAmp)pAMVideoProcAmp->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - - return true; - -} - - -bool videoInput::setVideoSettingCameraPct(int deviceID, long Property, float pctValue, long Flags){ - if( !isDeviceSetup(deviceID) )return false; - - long min, max, currentValue, flags, defaultValue, stepAmnt; - - if( !getVideoSettingCamera(deviceID, Property, min, max, stepAmnt, currentValue, flags, defaultValue) )return false; - - if(pctValue > 1.0)pctValue = 1.0; - else if(pctValue < 0)pctValue = 0.0; - - float range = (float)max - (float)min; - if(range <= 0)return false; - if(stepAmnt == 0) return false; - - long value = (long)( (float)min + range * pctValue ); - long rasterValue = value; - - //if the range is the stepAmnt then it is just a switch - //so we either set the value to low or high - if( range == stepAmnt ){ - if( pctValue < 0.5)rasterValue = min; - else rasterValue = max; - }else{ - //we need to rasterize the value to the stepping amnt - long mod = value % stepAmnt; - float halfStep = (float)stepAmnt * 0.5f; - if( mod < halfStep ) rasterValue -= mod; - else rasterValue += stepAmnt - mod; - printf("RASTER - pctValue is %f - value is %li - step is %li - mod is %li - rasterValue is %li\n", pctValue, value, stepAmnt, mod, rasterValue); - } - - return setVideoSettingCamera(deviceID, Property, rasterValue, Flags, false); -} - - -bool videoInput::setVideoSettingCamera(int deviceID, long Property, long lValue, long Flags, bool useDefaultValue){ - IAMCameraControl *pIAMCameraControl; - if(isDeviceSetup(deviceID)) - { - HRESULT hr; - hr = getDevice(&VDList[deviceID]->pVideoInputFilter, deviceID, VDList[deviceID]->wDeviceName, VDList[deviceID]->nDeviceName); - - char propStr[16]; - getCameraPropertyAsString(Property,propStr); - - if (verbose) printf("Setting video setting %s.\n", propStr); - hr = VDList[deviceID]->pVideoInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&pIAMCameraControl); - if (FAILED(hr)) { - printf("Error\n"); - return false; - } - else - { - long CurrVal, Min, Max, SteppingDelta, Default, CapsFlags, AvailableCapsFlags; - pIAMCameraControl->GetRange(Property, &Min, &Max, &SteppingDelta, &Default, &AvailableCapsFlags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, Min, Max, SteppingDelta, Default, AvailableCapsFlags); - pIAMCameraControl->Get(Property, &CurrVal, &CapsFlags); - if (verbose) printf("Current value: %ld Flags %ld (%s)\n", CurrVal, CapsFlags, (CapsFlags == 1 ? "Auto" : (CapsFlags == 2 ? "Manual" : "Unknown"))); - if (useDefaultValue) { - pIAMCameraControl->Set(Property, Default, CameraControl_Flags_Auto); - } - else - { - // Perhaps add a check that lValue and Flags are within the range aquired from GetRange above - pIAMCameraControl->Set(Property, lValue, Flags); - } - pIAMCameraControl->Release(); - return true; - } - } - return false; -} - - - -bool videoInput::getVideoSettingCamera(int deviceID, long Property, long &min, long &max, long &SteppingDelta, long ¤tValue, long &flags, long &defaultValue){ - if( !isDeviceSetup(deviceID) )return false; - - HRESULT hr; - //bool isSuccessful = false; - - videoDevice * VD = VDList[deviceID]; - - hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); - if (FAILED(hr)){ - printf("setVideoSetting - getDevice Error\n"); - return false; - } - - IAMCameraControl *pIAMCameraControl = NULL; - - hr = VD->pVideoInputFilter->QueryInterface(IID_IAMCameraControl, (void**)&pIAMCameraControl); - if(FAILED(hr)){ - printf("setVideoSetting - QueryInterface Error\n"); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - return false; - } - - char propStr[16]; - getCameraPropertyAsString(Property,propStr); - if (verbose) printf("Setting video setting %s.\n", propStr); - - pIAMCameraControl->GetRange(Property, &min, &max, &SteppingDelta, &defaultValue, &flags); - if (verbose) printf("Range for video setting %s: Min:%ld Max:%ld SteppingDelta:%ld Default:%ld Flags:%ld\n", propStr, min, max, SteppingDelta, defaultValue, flags); - pIAMCameraControl->Get(Property, ¤tValue, &flags); - - if(pIAMCameraControl)pIAMCameraControl->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter->Release(); - if(VD->pVideoInputFilter)VD->pVideoInputFilter = NULL; - - return true; - -} - - -// ---------------------------------------------------------------------- -// Shutsdown the device, deletes the object and creates a new object -// so it is ready to be setup again -// ---------------------------------------------------------------------- - -void videoInput::stopDevice(int id){ - if(id < VI_MAX_CAMERAS) - { - delete VDList[id]; - VDList[id] = new videoDevice(); - } - -} - -// ---------------------------------------------------------------------- -// Restarts the device with the same settings it was using -// -// ---------------------------------------------------------------------- - -bool videoInput::restartDevice(int id){ - if(isDeviceSetup(id)) - { - int conn = VDList[id]->storeConn; - int tmpW = VDList[id]->width; - int tmpH = VDList[id]->height; - - bool bFormat = VDList[id]->specificFormat; - long format = VDList[id]->formatType; - - int nReconnect = VDList[id]->nFramesForReconnect; - bool bReconnect = VDList[id]->autoReconnect; - - unsigned long avgFrameTime = VDList[id]->requestedFrameTime; - - stopDevice(id); - - //set our fps if needed - if( avgFrameTime != (unsigned long)-1){ - VDList[id]->requestedFrameTime = avgFrameTime; - } - - if( setupDevice(id, tmpW, tmpH, conn) ){ - //reapply the format - ntsc / pal etc - if( bFormat ){ - setFormat(id, format); - } - if( bReconnect ){ - setAutoReconnectOnFreeze(id, true, nReconnect); - } - return true; - } - } - return false; -} - -// ---------------------------------------------------------------------- -// Shuts down all devices, deletes objects and unitializes com if needed -// -// ---------------------------------------------------------------------- -videoInput::~videoInput(){ - - for(int i = 0; i < VI_MAX_CAMERAS; i++) - { - delete VDList[i]; - } - //Unitialize com - comUnInit(); -} - - -////////////////////////////// VIDEO INPUT //////////////////////////////// -//////////////////////////// PRIVATE METHODS ////////////////////////////// - -// ---------------------------------------------------------------------- -// We only should init com if it hasn't been done so by our apps thread -// Use a static counter to keep track of other times it has been inited -// (do we need to worry about multithreaded apps?) -// ---------------------------------------------------------------------- - -bool videoInput::comInit(){ - /*HRESULT hr = NOERROR; - - //no need for us to start com more than once - if(comInitCount == 0 ){ - - // Initialize the COM library. - //CoInitializeEx so videoInput can run in another thread - #ifdef VI_COM_MULTI_THREADED - hr = CoInitializeEx(NULL,COINIT_MULTITHREADED); - #else - hr = CoInitialize(NULL); - #endif - //this is the only case where there might be a problem - //if another library has started com as single threaded - //and we need it multi-threaded - send warning but don't fail - if( hr == RPC_E_CHANGED_MODE){ - if(verbose)printf("SETUP - COM already setup - threaded VI might not be possible\n"); - } - } - - comInitCount++;*/ - return true; -} - - -// ---------------------------------------------------------------------- -// Same as above but to unitialize com, decreases counter and frees com -// if no one else is using it -// ---------------------------------------------------------------------- - -bool videoInput::comUnInit(){ - /*if(comInitCount > 0)comInitCount--; //decrease the count of instances using com - - if(comInitCount == 0){ - CoUninitialize(); //if there are no instances left - uninitialize com - return true; - } - - return false;*/ - return true; -} - - -// ---------------------------------------------------------------------- -// This is the size we ask for - we might not get it though :) -// -// ---------------------------------------------------------------------- - -void videoInput::setAttemptCaptureSize(int id, int w, int h,GUID mediaType){ - - VDList[id]->tryWidth = w; - VDList[id]->tryHeight = h; - VDList[id]->tryDiffSize = true; - VDList[id]->tryVideoType = mediaType; - -} - -// ---------------------------------------------------------------------- -// Set the connection type -// (maybe move to private?) -// ---------------------------------------------------------------------- - -void videoInput::setPhyCon(int id, int conn){ - - switch(conn){ - - case 0: - VDList[id]->connection = PhysConn_Video_Composite; - break; - case 1: - VDList[id]->connection = PhysConn_Video_SVideo; - break; - case 2: - VDList[id]->connection = PhysConn_Video_Tuner; - break; - case 3: - VDList[id]->connection = PhysConn_Video_USB; - break; - case 4: - VDList[id]->connection = PhysConn_Video_1394; - break; - default: - return; //if it is not these types don't set crossbar - break; - } - - VDList[id]->storeConn = conn; - VDList[id]->useCrossbar = true; -} - - -// ---------------------------------------------------------------------- -// Check that we are not trying to setup a non-existant device -// Then start the graph building! -// ---------------------------------------------------------------------- - -bool videoInput::setup(int deviceNumber){ - devicesFound = getDeviceCount(); - - if(deviceNumber>devicesFound-1) - { - if(verbose)printf("SETUP: device[%i] not found - you have %i devices available\n", deviceNumber, devicesFound); - if(devicesFound>=0) if(verbose)printf("SETUP: this means that the last device you can use is device[%i] \n", devicesFound-1); - return false; - } - - if(VDList[deviceNumber]->readyToCapture) - { - if(verbose)printf("SETUP: can't setup, device %i is currently being used\n",VDList[deviceNumber]->myID); - return false; - } - - HRESULT hr = start(deviceNumber, VDList[deviceNumber]); - if(hr == S_OK)return true; - else return false; -} - - -// ---------------------------------------------------------------------- -// Does both vertical buffer flipping and bgr to rgb swapping -// You have any combination of those. -// ---------------------------------------------------------------------- - -void videoInput::processPixels(unsigned char * src, unsigned char * dst, int width, int height, bool bRGB, bool bFlip){ - - int widthInBytes = width * 3; - int numBytes = widthInBytes * height; - - if(!bRGB){ - - //int x = 0; - //int y = 0; - - if(bFlip){ - for(int y = 0; y < height; y++){ - memcpy(dst + (y * widthInBytes), src + ( (height -y -1) * widthInBytes), widthInBytes); - } - - }else{ - memcpy(dst, src, numBytes); - } - }else{ - if(bFlip){ - - int x = 0; - int y = (height - 1) * widthInBytes; - src += y; - - for(int i = 0; i < numBytes; i+=3){ - if(x >= width){ - x = 0; - src -= widthInBytes*2; - } - - *dst = *(src+2); - dst++; - - *dst = *(src+1); - dst++; - - *dst = *src; - dst++; - - src+=3; - x++; - } - } - else{ - for(int i = 0; i < numBytes; i+=3){ - *dst = *(src+2); - dst++; - - *dst = *(src+1); - dst++; - - *dst = *src; - dst++; - - src+=3; - } - } - } -} - - -//------------------------------------------------------------------------------------------ -void videoInput::getMediaSubtypeAsString(GUID type, char * typeAsString){ - - char tmpStr[8]; - if( type == MEDIASUBTYPE_RGB24) sprintf(tmpStr, "RGB24"); - else if(type == MEDIASUBTYPE_RGB32) sprintf(tmpStr, "RGB32"); - else if(type == MEDIASUBTYPE_RGB555)sprintf(tmpStr, "RGB555"); - else if(type == MEDIASUBTYPE_RGB565)sprintf(tmpStr, "RGB565"); - else if(type == MEDIASUBTYPE_YUY2) sprintf(tmpStr, "YUY2"); - else if(type == MEDIASUBTYPE_YVYU) sprintf(tmpStr, "YVYU"); - else if(type == MEDIASUBTYPE_YUYV) sprintf(tmpStr, "YUYV"); - else if(type == MEDIASUBTYPE_IYUV) sprintf(tmpStr, "IYUV"); - else if(type == MEDIASUBTYPE_UYVY) sprintf(tmpStr, "UYVY"); - else if(type == MEDIASUBTYPE_YV12) sprintf(tmpStr, "YV12"); - else if(type == MEDIASUBTYPE_YVU9) sprintf(tmpStr, "YVU9"); - else if(type == MEDIASUBTYPE_Y411) sprintf(tmpStr, "Y411"); - else if(type == MEDIASUBTYPE_Y41P) sprintf(tmpStr, "Y41P"); - else if(type == MEDIASUBTYPE_Y211) sprintf(tmpStr, "Y211"); - else if(type == MEDIASUBTYPE_AYUV) sprintf(tmpStr, "AYUV"); - else if(type == MEDIASUBTYPE_MJPG) sprintf(tmpStr, "MJPG"); - else if(type == MEDIASUBTYPE_Y800) sprintf(tmpStr, "Y800"); - else if(type == MEDIASUBTYPE_Y8) sprintf(tmpStr, "Y8"); - else if(type == MEDIASUBTYPE_GREY) sprintf(tmpStr, "GREY"); - else if(type == MEDIASUBTYPE_I420) sprintf(tmpStr, "I420"); - else sprintf(tmpStr, "OTHER"); - - memcpy(typeAsString, tmpStr, sizeof(char)*8); -} - -int videoInput::getFourccFromMediaSubtype(GUID type) { - return type.Data1; -} - -GUID *videoInput::getMediaSubtypeFromFourcc(int fourcc){ - - for (int i=0;istreamConf->GetNumberOfCapabilities(&iCount, &iSize); - - if (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS)) - { - //For each format type RGB24 YUV2 etc - for (int iFormat = 0; iFormat < iCount; iFormat++) - { - VIDEO_STREAM_CONFIG_CAPS scc; - AM_MEDIA_TYPE *pmtConfig; - hr = VD->streamConf->GetStreamCaps(iFormat, &pmtConfig, (BYTE*)&scc); - - if (SUCCEEDED(hr)){ - - //his is how many diff sizes are available for the format - int stepX = scc.OutputGranularityX; - int stepY = scc.OutputGranularityY; - - int tempW = 999999; - int tempH = 999999; - - //Don't want to get stuck in a loop - if(stepX < 1 || stepY < 1) continue; - - //if(verbose)printf("min is %i %i max is %i %i - res is %i %i \n", scc.MinOutputSize.cx, scc.MinOutputSize.cy, scc.MaxOutputSize.cx, scc.MaxOutputSize.cy, stepX, stepY); - //if(verbose)printf("min frame duration is %i max duration is %i\n", scc.MinFrameInterval, scc.MaxFrameInterval); - - bool exactMatch = false; - bool exactMatchX = false; - bool exactMatchY = false; - - for(int x = scc.MinOutputSize.cx; x <= scc.MaxOutputSize.cx; x+= stepX){ - //If we find an exact match - if( widthIn == x ){ - exactMatchX = true; - tempW = x; - } - //Otherwise lets find the closest match based on width - else if( abs(widthIn-x) < abs(widthIn-tempW) ){ - tempW = x; - } - } - - for(int y = scc.MinOutputSize.cy; y <= scc.MaxOutputSize.cy; y+= stepY){ - //If we find an exact match - if( heightIn == y){ - exactMatchY = true; - tempH = y; - } - //Otherwise lets find the closest match based on height - else if( abs(heightIn-y) < abs(heightIn-tempH) ){ - tempH = y; - } - } - - //see if we have an exact match! - if(exactMatchX && exactMatchY){ - //foundClosestMatch = false; - exactMatch = true; - - widthOut = widthIn; - heightOut = heightIn; - mediatypeOut = pmtConfig->subtype; - } - - //otherwise lets see if this filters closest size is the closest - //available. the closest size is determined by the sum difference - //of the widths and heights - else if( abs(widthIn - tempW) + abs(heightIn - tempH) < abs(widthIn - nearW) + abs(heightIn - nearH) ) - { - nearW = tempW; - nearH = tempH; - - widthOut = nearW; - heightOut = nearH; - mediatypeOut = pmtConfig->subtype; - } - - MyDeleteMediaType(pmtConfig); - - //If we have found an exact match no need to search anymore - if(exactMatch)break; - } - } - } - -} - - -//--------------------------------------------------------------------------------------------------- -static bool setSizeAndSubtype(videoDevice * VD, int attemptWidth, int attemptHeight, GUID mediatype){ - VIDEOINFOHEADER *pVih = reinterpret_cast(VD->pAmMediaType->pbFormat); - - //store current size - //int tmpWidth = HEADER(pVih)->biWidth; - //int tmpHeight = HEADER(pVih)->biHeight; - AM_MEDIA_TYPE * tmpType = NULL; - - HRESULT hr = VD->streamConf->GetFormat(&tmpType); - if(hr != S_OK)return false; - - //set new size: - //width and height - HEADER(pVih)->biWidth = attemptWidth; - HEADER(pVih)->biHeight = attemptHeight; - - VD->pAmMediaType->formattype = FORMAT_VideoInfo; - VD->pAmMediaType->majortype = MEDIATYPE_Video; - VD->pAmMediaType->subtype = mediatype; - - //buffer size - VD->pAmMediaType->lSampleSize = attemptWidth*attemptHeight*3; - - //set fps if requested - if( VD->requestedFrameTime != -1){ - pVih->AvgTimePerFrame = VD->requestedFrameTime; - } - - //okay lets try new size - hr = VD->streamConf->SetFormat(VD->pAmMediaType); - if(hr == S_OK){ - if( tmpType != NULL )MyDeleteMediaType(tmpType); - return true; - }else{ - VD->streamConf->SetFormat(tmpType); - if( tmpType != NULL )MyDeleteMediaType(tmpType); - } - - return false; -} - -// ---------------------------------------------------------------------- -// Where all the work happens! -// Attempts to build a graph for the specified device -// ---------------------------------------------------------------------- - -int videoInput::start(int deviceID, videoDevice *VD){ - - HRESULT hr = NOERROR; - VD->myID = deviceID; - VD->setupStarted = true; - CAPTURE_MODE = PIN_CATEGORY_CAPTURE; //Don't worry - it ends up being preview (which is faster) - callbackSetCount = 1; //make sure callback method is not changed after setup called - - if(verbose)printf("SETUP: Setting up device %i\n",deviceID); - - // CREATE THE GRAPH BUILDER // - // Create the filter graph manager and query for interfaces. - hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void **)&VD->pCaptureGraph); - if (FAILED(hr)) // FAILED is a macro that tests the return value - { - if(verbose)printf("ERROR - Could not create the Filter Graph Manager\n"); - return hr; - } - - //FITLER GRAPH MANAGER// - // Create the Filter Graph Manager. - hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void**)&VD->pGraph); - if (FAILED(hr)) - { - if(verbose)printf("ERROR - Could not add the graph builder!\n"); - stopDevice(deviceID); - return hr; - } - - //SET THE FILTERGRAPH// - hr = VD->pCaptureGraph->SetFiltergraph(VD->pGraph); - if (FAILED(hr)) - { - if(verbose)printf("ERROR - Could not set filtergraph\n"); - stopDevice(deviceID); - return hr; - } - - //MEDIA CONTROL (START/STOPS STREAM)// - // Using QueryInterface on the graph builder, - // Get the Media Control object. - hr = VD->pGraph->QueryInterface(IID_IMediaControl, (void **)&VD->pControl); - if (FAILED(hr)) - { - if(verbose)printf("ERROR - Could not create the Media Control object\n"); - stopDevice(deviceID); - return hr; - } - - - //FIND VIDEO DEVICE AND ADD TO GRAPH// - //gets the device specified by the second argument. - hr = getDevice(&VD->pVideoInputFilter, deviceID, VD->wDeviceName, VD->nDeviceName); - - if (SUCCEEDED(hr)){ - if(verbose)printf("SETUP: %s\n", VD->nDeviceName); - hr = VD->pGraph->AddFilter(VD->pVideoInputFilter, VD->wDeviceName); - }else{ - if(verbose)printf("ERROR - Could not find specified video device\n"); - stopDevice(deviceID); - return hr; - } - - //LOOK FOR PREVIEW PIN IF THERE IS NONE THEN WE USE CAPTURE PIN AND THEN SMART TEE TO PREVIEW - IAMStreamConfig *streamConfTest = NULL; - hr = VD->pCaptureGraph->FindInterface(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, VD->pVideoInputFilter, IID_IAMStreamConfig, (void **)&streamConfTest); - if(FAILED(hr)){ - if(verbose)printf("SETUP: Couldn't find preview pin using SmartTee\n"); - }else{ - CAPTURE_MODE = PIN_CATEGORY_PREVIEW; - streamConfTest->Release(); - streamConfTest = NULL; - } - - //CROSSBAR (SELECT PHYSICAL INPUT TYPE)// - //my own function that checks to see if the device can support a crossbar and if so it routes it. - //webcams tend not to have a crossbar so this function will also detect a webcams and not apply the crossbar - if(VD->useCrossbar) - { - if(verbose)printf("SETUP: Checking crossbar\n"); - routeCrossbar(&VD->pCaptureGraph, &VD->pVideoInputFilter, VD->connection, CAPTURE_MODE); - } - - - //we do this because webcams don't have a preview mode - hr = VD->pCaptureGraph->FindInterface(&CAPTURE_MODE, &MEDIATYPE_Video, VD->pVideoInputFilter, IID_IAMStreamConfig, (void **)&VD->streamConf); - if(FAILED(hr)){ - if(verbose)printf("ERROR: Couldn't config the stream!\n"); - stopDevice(deviceID); - return hr; - } - - //NOW LETS DEAL WITH GETTING THE RIGHT SIZE - hr = VD->streamConf->GetFormat(&VD->pAmMediaType); - if(FAILED(hr)){ - if(verbose)printf("ERROR: Couldn't getFormat for pAmMediaType!\n"); - stopDevice(deviceID); - return hr; - } - - VIDEOINFOHEADER *pVih = reinterpret_cast(VD->pAmMediaType->pbFormat); - int currentWidth = HEADER(pVih)->biWidth; - int currentHeight = HEADER(pVih)->biHeight; - - bool customSize = VD->tryDiffSize; - - bool foundSize = false; - - if(customSize){ - if(verbose) printf("SETUP: Default Format is set to %i by %i \n", currentWidth, currentHeight); - - char guidStr[8]; - // try specified format and size - getMediaSubtypeAsString(VD->tryVideoType, guidStr); - if(verbose)printf("SETUP: trying specified format %s @ %i by %i\n", guidStr, VD->tryWidth, VD->tryHeight); - - if( setSizeAndSubtype(VD, VD->tryWidth, VD->tryHeight, VD->tryVideoType) ){ - VD->setSize(VD->tryWidth, VD->tryHeight); - foundSize = true; - } else { - // try specified size with all formats - for(int i = 0; i < VI_NUM_TYPES; i++){ - - getMediaSubtypeAsString(mediaSubtypes[i], guidStr); - - if(verbose)printf("SETUP: trying format %s @ %i by %i\n", guidStr, VD->tryWidth, VD->tryHeight); - if( setSizeAndSubtype(VD, VD->tryWidth, VD->tryHeight, mediaSubtypes[i]) ){ - VD->setSize(VD->tryWidth, VD->tryHeight); - foundSize = true; - break; - } - } - } - - - //if we didn't find the requested size - lets try and find the closest matching size - if( foundSize == false ){ - if( verbose )printf("SETUP: couldn't find requested size - searching for closest matching size\n"); - - int closestWidth = -1; - int closestHeight = -1; - GUID newMediaSubtype; - - findClosestSizeAndSubtype(VD, VD->tryWidth, VD->tryHeight, closestWidth, closestHeight, newMediaSubtype); - - if( closestWidth != -1 && closestHeight != -1){ - getMediaSubtypeAsString(newMediaSubtype, guidStr); - - if(verbose)printf("SETUP: closest supported size is %s @ %i %i\n", guidStr, closestWidth, closestHeight); - if( setSizeAndSubtype(VD, closestWidth, closestHeight, newMediaSubtype) ){ - VD->setSize(closestWidth, closestHeight); - foundSize = true; - } - } - } - } - - //if we didn't specify a custom size or if we did but couldn't find it lets setup with the default settings - if(customSize == false || foundSize == false){ - if( VD->requestedFrameTime != -1 ){ - pVih->AvgTimePerFrame = VD->requestedFrameTime; - hr = VD->streamConf->SetFormat(VD->pAmMediaType); - } - VD->setSize(currentWidth, currentHeight); - } - - //SAMPLE GRABBER (ALLOWS US TO GRAB THE BUFFER)// - // Create the Sample Grabber. - hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&VD->pGrabberF); - if (FAILED(hr)){ - if(verbose)printf("Could not Create Sample Grabber - CoCreateInstance()\n"); - stopDevice(deviceID); - return hr; - } - - hr = VD->pGraph->AddFilter(VD->pGrabberF, L"Sample Grabber"); - if (FAILED(hr)){ - if(verbose)printf("Could not add Sample Grabber - AddFilter()\n"); - stopDevice(deviceID); - return hr; - } - - hr = VD->pGrabberF->QueryInterface(IID_ISampleGrabber, (void**)&VD->pGrabber); - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not query SampleGrabber\n"); - stopDevice(deviceID); - return hr; - } - - - //Set Params - One Shot should be false unless you want to capture just one buffer - hr = VD->pGrabber->SetOneShot(FALSE); - if(bCallback){ - hr = VD->pGrabber->SetBufferSamples(FALSE); - }else{ - hr = VD->pGrabber->SetBufferSamples(TRUE); - } - - if(bCallback){ - //Tell the grabber to use our callback function - 0 is for SampleCB and 1 for BufferCB - //We use SampleCB - hr = VD->pGrabber->SetCallback(VD->sgCallback, 0); - if (FAILED(hr)){ - if(verbose)printf("ERROR: problem setting callback\n"); - stopDevice(deviceID); - return hr; - }else{ - if(verbose)printf("SETUP: Capture callback set\n"); - } - } - - //MEDIA CONVERSION - //Get video properties from the stream's mediatype and apply to the grabber (otherwise we don't get an RGB image) - //zero the media type - lets try this :) - maybe this works? - AM_MEDIA_TYPE mt; - ZeroMemory(&mt,sizeof(AM_MEDIA_TYPE)); - - mt.majortype = MEDIATYPE_Video; - mt.subtype = MEDIASUBTYPE_RGB24; - mt.formattype = FORMAT_VideoInfo; - - //VD->pAmMediaType->subtype = VD->videoType; - hr = VD->pGrabber->SetMediaType(&mt); - - //lets try freeing our stream conf here too - //this will fail if the device is already running - if(VD->streamConf){ - VD->streamConf->Release(); - VD->streamConf = NULL; - }else{ - if(verbose)printf("ERROR: connecting device - prehaps it is already being used?\n"); - stopDevice(deviceID); - return S_FALSE; - } - - - //NULL RENDERER// - //used to give the video stream somewhere to go to. - hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)(&VD->pDestFilter)); - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not create filter - NullRenderer\n"); - stopDevice(deviceID); - return hr; - } - - hr = VD->pGraph->AddFilter(VD->pDestFilter, L"NullRenderer"); - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not add filter - NullRenderer\n"); - stopDevice(deviceID); - return hr; - } - - //RENDER STREAM// - //This is where the stream gets put together. - hr = VD->pCaptureGraph->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, VD->pVideoInputFilter, VD->pGrabberF, VD->pDestFilter); - - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not connect pins - RenderStream()\n"); - stopDevice(deviceID); - return hr; - } - - - //EXP - lets try setting the sync source to null - and make it run as fast as possible - { - IMediaFilter *pMediaFilter = 0; - hr = VD->pGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter); - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not get IID_IMediaFilter interface\n"); - }else{ - pMediaFilter->SetSyncSource(NULL); - pMediaFilter->Release(); - } - } - - - //LETS RUN THE STREAM! - hr = VD->pControl->Run(); - - if (FAILED(hr)){ - if(verbose)printf("ERROR: Could not start graph\n"); - stopDevice(deviceID); - return hr; - } - - - //MAKE SURE THE DEVICE IS SENDING VIDEO BEFORE WE FINISH - if(!bCallback){ - - long bufferSize = VD->videoSize; - - while( hr != S_OK){ - hr = VD->pGrabber->GetCurrentBuffer(&bufferSize, (long *)VD->pBuffer); - Sleep(10); - } - - } - - if(verbose)printf("SETUP: Device is setup and ready to capture.\n\n"); - VD->readyToCapture = true; - - //Release filters - seen someone else do this - //looks like it solved the freezes - - //if we release this then we don't have access to the settings - //we release our video input filter but then reconnect with it - //each time we need to use it - VD->pVideoInputFilter->Release(); - VD->pVideoInputFilter = NULL; - - VD->pGrabberF->Release(); - VD->pGrabberF = NULL; - - VD->pDestFilter->Release(); - VD->pDestFilter = NULL; - - return S_OK; -} - - -// ---------------------------------------------------------------------- -// Returns number of good devices -// -// ---------------------------------------------------------------------- - -int videoInput::getDeviceCount(){ - - - ICreateDevEnum *pDevEnum = NULL; - IEnumMoniker *pEnum = NULL; - int deviceCounter = 0; - - HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, - CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, - reinterpret_cast(&pDevEnum)); - - - if (SUCCEEDED(hr)) - { - // Create an enumerator for the video capture category. - hr = pDevEnum->CreateClassEnumerator( - CLSID_VideoInputDeviceCategory, - &pEnum, 0); - - if(hr == S_OK){ - IMoniker *pMoniker = NULL; - while (pEnum->Next(1, &pMoniker, NULL) == S_OK){ - - IPropertyBag *pPropBag; - hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, - (void**)(&pPropBag)); - - if (FAILED(hr)){ - pMoniker->Release(); - continue; // Skip this one, maybe the next one will work. - } - - pPropBag->Release(); - pPropBag = NULL; - - pMoniker->Release(); - pMoniker = NULL; - - deviceCounter++; - } - - pEnum->Release(); - pEnum = NULL; - } - - pDevEnum->Release(); - pDevEnum = NULL; - } - return deviceCounter; -} - - -// ---------------------------------------------------------------------- -// Do we need this? -// -// Enumerate all of the video input devices -// Return the filter with a matching friendly name -// ---------------------------------------------------------------------- - -HRESULT videoInput::getDevice(IBaseFilter** gottaFilter, int deviceId, WCHAR * wDeviceName, char * nDeviceName){ - BOOL done = false; - int deviceCounter = 0; - - // Create the System Device Enumerator. - ICreateDevEnum *pSysDevEnum = NULL; - HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum); - if (FAILED(hr)) - { - return hr; - } - - // Obtain a class enumerator for the video input category. - IEnumMoniker *pEnumCat = NULL; - hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0); - - if (hr == S_OK) - { - // Enumerate the monikers. - IMoniker *pMoniker = NULL; - ULONG cFetched; - while ((pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK) && (!done)) - { - if(deviceCounter == deviceId) - { - // Bind the first moniker to an object - IPropertyBag *pPropBag; - hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag); - if (SUCCEEDED(hr)) - { - // To retrieve the filter's friendly name, do the following: - VARIANT varName; - VariantInit(&varName); - hr = pPropBag->Read(L"FriendlyName", &varName, 0); - if (SUCCEEDED(hr)) - { - - //copy the name to nDeviceName & wDeviceName - int count = 0; - while( varName.bstrVal[count] != 0x00 ) { - wDeviceName[count] = varName.bstrVal[count]; - nDeviceName[count] = (char)varName.bstrVal[count]; - count++; - } - - // We found it, so send it back to the caller - hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)gottaFilter); - done = true; - } - VariantClear(&varName); - pPropBag->Release(); - pPropBag = NULL; - pMoniker->Release(); - pMoniker = NULL; - } - } - deviceCounter++; - } - pEnumCat->Release(); - pEnumCat = NULL; - } - pSysDevEnum->Release(); - pSysDevEnum = NULL; - - if (done) { - return hr; // found it, return native error - } else { - return VFW_E_NOT_FOUND; // didn't find it error - } -} - - -// ---------------------------------------------------------------------- -// Show the property pages for a filter -// This is stolen from the DX9 SDK -// ---------------------------------------------------------------------- - -HRESULT videoInput::ShowFilterPropertyPages(IBaseFilter *pFilter){ - - ISpecifyPropertyPages *pProp; - - HRESULT hr = pFilter->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp); - if (SUCCEEDED(hr)) - { - // Get the filter's name and IUnknown pointer. - FILTER_INFO FilterInfo; - hr = pFilter->QueryFilterInfo(&FilterInfo); - IUnknown *pFilterUnk; - pFilter->QueryInterface(IID_IUnknown, (void **)&pFilterUnk); - - // Show the page. - CAUUID caGUID; - pProp->GetPages(&caGUID); - pProp->Release(); - OleCreatePropertyFrame( - NULL, // Parent window - 0, 0, // Reserved - FilterInfo.achName, // Caption for the dialog box - 1, // Number of objects (just the filter) - &pFilterUnk, // Array of object pointers. - caGUID.cElems, // Number of property pages - caGUID.pElems, // Array of property page CLSIDs - 0, // Locale identifier - 0, NULL // Reserved - ); - - // Clean up. - if(pFilterUnk)pFilterUnk->Release(); - if(FilterInfo.pGraph)FilterInfo.pGraph->Release(); - CoTaskMemFree(caGUID.pElems); - } - return hr; -} - -HRESULT videoInput::ShowStreamPropertyPages(IAMStreamConfig * /*pStream*/){ - - HRESULT hr = NOERROR; - return hr; -} - -// ---------------------------------------------------------------------- -// This code was also brazenly stolen from the DX9 SDK -// Pass it a file name in wszPath, and it will save the filter graph to that file. -// ---------------------------------------------------------------------- - -HRESULT videoInput::SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath) { - const WCHAR wszStreamName[] = L"ActiveMovieGraph"; - HRESULT hr; - IStorage *pStorage = NULL; - - // First, create a document file which will hold the GRF file - hr = StgCreateDocfile( - wszPath, - STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, - 0, &pStorage); - if(FAILED(hr)) - { - return hr; - } - - // Next, create a stream to store. - IStream *pStream; - hr = pStorage->CreateStream( - wszStreamName, - STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, - 0, 0, &pStream); - if (FAILED(hr)) - { - pStorage->Release(); - return hr; - } - - // The IPersistStream converts a stream into a persistent object. - IPersistStream *pPersist = NULL; - pGraph->QueryInterface(IID_IPersistStream, reinterpret_cast(&pPersist)); - hr = pPersist->Save(pStream, TRUE); - pStream->Release(); - pPersist->Release(); - if (SUCCEEDED(hr)) - { - hr = pStorage->Commit(STGC_DEFAULT); - } - pStorage->Release(); - return hr; -} - - -// ---------------------------------------------------------------------- -// For changing the input types -// -// ---------------------------------------------------------------------- - -HRESULT videoInput::routeCrossbar(ICaptureGraphBuilder2 **ppBuild, IBaseFilter **pVidInFilter, int conType, GUID captureMode){ - - //create local ICaptureGraphBuilder2 - ICaptureGraphBuilder2 *pBuild = NULL; - pBuild = *ppBuild; - - //create local IBaseFilter - IBaseFilter *pVidFilter = NULL; - pVidFilter = * pVidInFilter; - - // Search upstream for a crossbar. - IAMCrossbar *pXBar1 = NULL; - HRESULT hr = pBuild->FindInterface(&LOOK_UPSTREAM_ONLY, NULL, pVidFilter, - IID_IAMCrossbar, (void**)&pXBar1); - if (SUCCEEDED(hr)) - { - - bool foundDevice = false; - - if(verbose)printf("SETUP: You are not a webcam! Setting Crossbar\n"); - pXBar1->Release(); - - IAMCrossbar *Crossbar; - hr = pBuild->FindInterface(&captureMode, &MEDIATYPE_Interleaved, pVidFilter, IID_IAMCrossbar, (void **)&Crossbar); - - if(hr != NOERROR){ - hr = pBuild->FindInterface(&captureMode, &MEDIATYPE_Video, pVidFilter, IID_IAMCrossbar, (void **)&Crossbar); - } - - LONG lInpin, lOutpin; - hr = Crossbar->get_PinCounts(&lOutpin , &lInpin); - - BOOL iPin=TRUE; LONG pIndex=0 , pRIndex=0 , pType=0; - - while( pIndex < lInpin) - { - hr = Crossbar->get_CrossbarPinInfo( iPin , pIndex , &pRIndex , &pType); - - if( pType == conType){ - if(verbose)printf("SETUP: Found Physical Interface"); - - switch(conType){ - - case PhysConn_Video_Composite: - if(verbose)printf(" - Composite\n"); - break; - case PhysConn_Video_SVideo: - if(verbose)printf(" - S-Video\n"); - break; - case PhysConn_Video_Tuner: - if(verbose)printf(" - Tuner\n"); - break; - case PhysConn_Video_USB: - if(verbose)printf(" - USB\n"); - break; - case PhysConn_Video_1394: - if(verbose)printf(" - Firewire\n"); - break; - } - - foundDevice = true; - break; - } - pIndex++; - - } - - if(foundDevice){ - BOOL OPin=FALSE; LONG pOIndex=0 , pORIndex=0 , pOType=0; - while( pOIndex < lOutpin) - { - hr = Crossbar->get_CrossbarPinInfo( OPin , pOIndex , &pORIndex , &pOType); - if( pOType == PhysConn_Video_VideoDecoder) - break; - } - Crossbar->Route(pOIndex,pIndex); - }else{ - if(verbose) printf("SETUP: Didn't find specified Physical Connection type. Using Defualt. \n"); - } - - //we only free the crossbar when we close or restart the device - //we were getting a crash otherwise - //if(Crossbar)Crossbar->Release(); - //if(Crossbar)Crossbar = NULL; - - if(pXBar1)pXBar1->Release(); - if(pXBar1)pXBar1 = NULL; - - }else{ - if(verbose) printf("SETUP: You are a webcam or snazzy firewire cam! No Crossbar needed\n"); - return hr; - } - - return hr; -} - - -/********************* Capturing video from camera via DirectShow *********************/ - -class CvCaptureCAM_DShow : public CvCapture -{ -public: - CvCaptureCAM_DShow(); - virtual ~CvCaptureCAM_DShow(); - - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_DSHOW; } // Return the type of the capture object: CV_CAP_VFW, etc... - -protected: - void init(); - - int index, width, height,fourcc; - int widthSet, heightSet; - IplImage* frame; - static videoInput VI; -}; - - -struct SuppressVideoInputMessages -{ - SuppressVideoInputMessages() { videoInput::setVerbose(false); } -}; - -static SuppressVideoInputMessages do_it; -videoInput CvCaptureCAM_DShow::VI; - -CvCaptureCAM_DShow::CvCaptureCAM_DShow() -{ - index = -1; - frame = 0; - width = height = fourcc = -1; - widthSet = heightSet = -1; - CoInitialize(0); -} - -CvCaptureCAM_DShow::~CvCaptureCAM_DShow() -{ - close(); - CoUninitialize(); -} - -void CvCaptureCAM_DShow::close() -{ - if( index >= 0 ) - { - VI.stopDevice(index); - index = -1; - cvReleaseImage(&frame); - } - widthSet = heightSet = width = height = -1; -} - -// Initialize camera input -bool CvCaptureCAM_DShow::open( int _index ) -{ - int devices = 0; - - close(); - devices = VI.listDevices(true); - if (devices == 0) - return false; - if (_index < 0 || _index > devices-1) - return false; - VI.setupDevice(_index); - if( !VI.isDeviceSetup(_index) ) - return false; - index = _index; - return true; -} - -bool CvCaptureCAM_DShow::grabFrame() -{ - return true; -} - - -IplImage* CvCaptureCAM_DShow::retrieveFrame(int) -{ - if( !frame || VI.getWidth(index) != frame->width || VI.getHeight(index) != frame->height ) - { - if (frame) - cvReleaseImage( &frame ); - int w = VI.getWidth(index), h = VI.getHeight(index); - frame = cvCreateImage( cvSize(w,h), 8, 3 ); - } - - if (VI.getPixels( index, (uchar*)frame->imageData, false, true )) - return frame; - else - return NULL; -} - -double CvCaptureCAM_DShow::getProperty( int property_id ) -{ - - long min_value,max_value,stepping_delta,current_value,flags,defaultValue; - - // image format proprrties - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return VI.getWidth(index); - - case CV_CAP_PROP_FRAME_HEIGHT: - return VI.getHeight(index); - - case CV_CAP_PROP_FOURCC: - return VI.getFourcc(index); - - case CV_CAP_PROP_FPS: - return VI.getFPS(index); - } - - // video filter properties - switch( property_id ) - { - case CV_CAP_PROP_BRIGHTNESS: - case CV_CAP_PROP_CONTRAST: - case CV_CAP_PROP_HUE: - case CV_CAP_PROP_SATURATION: - case CV_CAP_PROP_SHARPNESS: - case CV_CAP_PROP_GAMMA: - case CV_CAP_PROP_MONOCROME: - case CV_CAP_PROP_WHITE_BALANCE_BLUE_U: - case CV_CAP_PROP_BACKLIGHT: - case CV_CAP_PROP_GAIN: - if (VI.getVideoSettingFilter(index,VI.getVideoPropertyFromCV(property_id),min_value,max_value,stepping_delta,current_value,flags,defaultValue) ) return (double)current_value; - } - - // camera properties - switch( property_id ) - { - case CV_CAP_PROP_PAN: - case CV_CAP_PROP_TILT: - case CV_CAP_PROP_ROLL: - case CV_CAP_PROP_ZOOM: - case CV_CAP_PROP_EXPOSURE: - case CV_CAP_PROP_IRIS: - case CV_CAP_PROP_FOCUS: - if (VI.getVideoSettingCamera(index,VI.getCameraPropertyFromCV(property_id),min_value,max_value,stepping_delta,current_value,flags,defaultValue) ) return (double)current_value; - - } - - // unknown parameter or value not available - return -1; -} - -bool CvCaptureCAM_DShow::setProperty( int property_id, double value ) -{ - // image capture properties - bool handled = false; - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - width = cvRound(value); - handled = true; - break; - - case CV_CAP_PROP_FRAME_HEIGHT: - height = cvRound(value); - handled = true; - break; - - case CV_CAP_PROP_FOURCC: - fourcc = (int)(unsigned long)(value); - if ( fourcc == -1 ) { - // following cvCreateVideo usage will pop up caprturepindialog here if fourcc=-1 - // TODO - how to create a capture pin dialog - } - handled = true; - break; - - case CV_CAP_PROP_FPS: - int fps = cvRound(value); - if (fps != VI.getFPS(index)) - { - VI.stopDevice(index); - VI.setIdealFramerate(index,fps); - if (widthSet > 0 && heightSet > 0) - VI.setupDevice(index, widthSet, heightSet); - else - VI.setupDevice(index); - } - return VI.isDeviceSetup(index); - - } - - if ( handled ) { - // a stream setting - if( width > 0 && height > 0 ) - { - if( width != VI.getWidth(index) || height != VI.getHeight(index) )//|| fourcc != VI.getFourcc(index) ) - { - int fps = static_cast(VI.getFPS(index)); - VI.stopDevice(index); - VI.setIdealFramerate(index, fps); - VI.setupDeviceFourcc(index, width, height, fourcc); - } - - bool success = VI.isDeviceSetup(index); - if (success) - { - widthSet = width; - heightSet = height; - width = height = fourcc = -1; - } - return success; - } - return true; - } - - // show video/camera filter dialog - if ( property_id == CV_CAP_PROP_SETTINGS ) { - VI.showSettingsWindow(index); - return true; - } - - //video Filter properties - switch( property_id ) - { - case CV_CAP_PROP_BRIGHTNESS: - case CV_CAP_PROP_CONTRAST: - case CV_CAP_PROP_HUE: - case CV_CAP_PROP_SATURATION: - case CV_CAP_PROP_SHARPNESS: - case CV_CAP_PROP_GAMMA: - case CV_CAP_PROP_MONOCROME: - case CV_CAP_PROP_WHITE_BALANCE_BLUE_U: - case CV_CAP_PROP_BACKLIGHT: - case CV_CAP_PROP_GAIN: - return VI.setVideoSettingFilter(index,VI.getVideoPropertyFromCV(property_id),(long)value); - } - - //camera properties - switch( property_id ) - { - case CV_CAP_PROP_PAN: - case CV_CAP_PROP_TILT: - case CV_CAP_PROP_ROLL: - case CV_CAP_PROP_ZOOM: - case CV_CAP_PROP_EXPOSURE: - case CV_CAP_PROP_IRIS: - case CV_CAP_PROP_FOCUS: - return VI.setVideoSettingCamera(index,VI.getCameraPropertyFromCV(property_id),(long)value); - } - - return false; -} - - -CvCapture* cvCreateCameraCapture_DShow( int index ) -{ - CvCaptureCAM_DShow* capture = new CvCaptureCAM_DShow; - - try - { - if( capture->open( index )) - return capture; - } - catch(...) - { - delete capture; - throw; - } - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_ffmpeg.cpp b/modules/highgui/src/cap_ffmpeg.cpp deleted file mode 100644 index 192c0da..0000000 --- a/modules/highgui/src/cap_ffmpeg.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined HAVE_FFMPEG && !defined WIN32 -#include "cap_ffmpeg_impl.hpp" -#else -#include "cap_ffmpeg_api.hpp" -#endif - -static CvCreateFileCapture_Plugin icvCreateFileCapture_FFMPEG_p = 0; -static CvReleaseCapture_Plugin icvReleaseCapture_FFMPEG_p = 0; -static CvGrabFrame_Plugin icvGrabFrame_FFMPEG_p = 0; -static CvRetrieveFrame_Plugin icvRetrieveFrame_FFMPEG_p = 0; -static CvSetCaptureProperty_Plugin icvSetCaptureProperty_FFMPEG_p = 0; -static CvGetCaptureProperty_Plugin icvGetCaptureProperty_FFMPEG_p = 0; -static CvCreateVideoWriter_Plugin icvCreateVideoWriter_FFMPEG_p = 0; -static CvReleaseVideoWriter_Plugin icvReleaseVideoWriter_FFMPEG_p = 0; -static CvWriteFrame_Plugin icvWriteFrame_FFMPEG_p = 0; - -static cv::Mutex _icvInitFFMPEG_mutex; - -class icvInitFFMPEG -{ -public: - static void Init() - { - cv::AutoLock al(_icvInitFFMPEG_mutex); - static icvInitFFMPEG init; - } - -private: - #if defined WIN32 || defined _WIN32 - HMODULE icvFFOpenCV; - - ~icvInitFFMPEG() - { - if (icvFFOpenCV) - { - FreeLibrary(icvFFOpenCV); - icvFFOpenCV = 0; - } - } - #endif - - icvInitFFMPEG() - { - #if defined WIN32 || defined _WIN32 - # ifdef HAVE_WINRT - const wchar_t* module_name = L"opencv_ffmpeg" - CVAUX_STRW(CV_MAJOR_VERSION) CVAUX_STRW(CV_MINOR_VERSION) CVAUX_STRW(CV_SUBMINOR_VERSION) - #if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__) - L"_64" - #endif - L".dll"; - - icvFFOpenCV = LoadPackagedLibrary( module_name, 0 ); - # else - const char* module_name = "opencv_ffmpeg" - CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION) - #if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__) - "_64" - #endif - ".dll"; - - icvFFOpenCV = LoadLibrary( module_name ); - # endif - - if( icvFFOpenCV ) - { - icvCreateFileCapture_FFMPEG_p = - (CvCreateFileCapture_Plugin)GetProcAddress(icvFFOpenCV, "cvCreateFileCapture_FFMPEG"); - icvReleaseCapture_FFMPEG_p = - (CvReleaseCapture_Plugin)GetProcAddress(icvFFOpenCV, "cvReleaseCapture_FFMPEG"); - icvGrabFrame_FFMPEG_p = - (CvGrabFrame_Plugin)GetProcAddress(icvFFOpenCV, "cvGrabFrame_FFMPEG"); - icvRetrieveFrame_FFMPEG_p = - (CvRetrieveFrame_Plugin)GetProcAddress(icvFFOpenCV, "cvRetrieveFrame_FFMPEG"); - icvSetCaptureProperty_FFMPEG_p = - (CvSetCaptureProperty_Plugin)GetProcAddress(icvFFOpenCV, "cvSetCaptureProperty_FFMPEG"); - icvGetCaptureProperty_FFMPEG_p = - (CvGetCaptureProperty_Plugin)GetProcAddress(icvFFOpenCV, "cvGetCaptureProperty_FFMPEG"); - icvCreateVideoWriter_FFMPEG_p = - (CvCreateVideoWriter_Plugin)GetProcAddress(icvFFOpenCV, "cvCreateVideoWriter_FFMPEG"); - icvReleaseVideoWriter_FFMPEG_p = - (CvReleaseVideoWriter_Plugin)GetProcAddress(icvFFOpenCV, "cvReleaseVideoWriter_FFMPEG"); - icvWriteFrame_FFMPEG_p = - (CvWriteFrame_Plugin)GetProcAddress(icvFFOpenCV, "cvWriteFrame_FFMPEG"); - -#if 0 - if( icvCreateFileCapture_FFMPEG_p != 0 && - icvReleaseCapture_FFMPEG_p != 0 && - icvGrabFrame_FFMPEG_p != 0 && - icvRetrieveFrame_FFMPEG_p != 0 && - icvSetCaptureProperty_FFMPEG_p != 0 && - icvGetCaptureProperty_FFMPEG_p != 0 && - icvCreateVideoWriter_FFMPEG_p != 0 && - icvReleaseVideoWriter_FFMPEG_p != 0 && - icvWriteFrame_FFMPEG_p != 0 ) - { - printf("Successfully initialized ffmpeg plugin!\n"); - } - else - { - printf("Failed to load FFMPEG plugin: module handle=%p\n", icvFFOpenCV); - } -#endif - } - #elif defined HAVE_FFMPEG - icvCreateFileCapture_FFMPEG_p = (CvCreateFileCapture_Plugin)cvCreateFileCapture_FFMPEG; - icvReleaseCapture_FFMPEG_p = (CvReleaseCapture_Plugin)cvReleaseCapture_FFMPEG; - icvGrabFrame_FFMPEG_p = (CvGrabFrame_Plugin)cvGrabFrame_FFMPEG; - icvRetrieveFrame_FFMPEG_p = (CvRetrieveFrame_Plugin)cvRetrieveFrame_FFMPEG; - icvSetCaptureProperty_FFMPEG_p = (CvSetCaptureProperty_Plugin)cvSetCaptureProperty_FFMPEG; - icvGetCaptureProperty_FFMPEG_p = (CvGetCaptureProperty_Plugin)cvGetCaptureProperty_FFMPEG; - icvCreateVideoWriter_FFMPEG_p = (CvCreateVideoWriter_Plugin)cvCreateVideoWriter_FFMPEG; - icvReleaseVideoWriter_FFMPEG_p = (CvReleaseVideoWriter_Plugin)cvReleaseVideoWriter_FFMPEG; - icvWriteFrame_FFMPEG_p = (CvWriteFrame_Plugin)cvWriteFrame_FFMPEG; - #endif - } -}; - - -class CvCapture_FFMPEG_proxy : - public CvCapture -{ -public: - CvCapture_FFMPEG_proxy() { ffmpegCapture = 0; } - virtual ~CvCapture_FFMPEG_proxy() { close(); } - - virtual double getProperty(int propId) - { - return ffmpegCapture ? icvGetCaptureProperty_FFMPEG_p(ffmpegCapture, propId) : 0; - } - virtual bool setProperty(int propId, double value) - { - return ffmpegCapture ? icvSetCaptureProperty_FFMPEG_p(ffmpegCapture, propId, value)!=0 : false; - } - virtual bool grabFrame() - { - return ffmpegCapture ? icvGrabFrame_FFMPEG_p(ffmpegCapture)!=0 : false; - } - virtual IplImage* retrieveFrame(int) - { - unsigned char* data = 0; - int step=0, width=0, height=0, cn=0; - - if (!ffmpegCapture || - !icvRetrieveFrame_FFMPEG_p(ffmpegCapture, &data, &step, &width, &height, &cn)) - return 0; - cvInitImageHeader(&frame, cvSize(width, height), 8, cn); - cvSetData(&frame, data, step); - return &frame; - } - virtual bool open( const char* filename ) - { - icvInitFFMPEG::Init(); - close(); - - if( !icvCreateFileCapture_FFMPEG_p ) - return false; - ffmpegCapture = icvCreateFileCapture_FFMPEG_p( filename ); - return ffmpegCapture != 0; - } - virtual void close() - { - if( ffmpegCapture && icvReleaseCapture_FFMPEG_p ) - icvReleaseCapture_FFMPEG_p( &ffmpegCapture ); - assert( ffmpegCapture == 0 ); - ffmpegCapture = 0; - } - -protected: - void* ffmpegCapture; - IplImage frame; -}; - - -CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename) -{ - CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy; - if( result->open( filename )) - return result; - delete result; - return 0; -} - -class CvVideoWriter_FFMPEG_proxy : - public CvVideoWriter -{ -public: - CvVideoWriter_FFMPEG_proxy() { ffmpegWriter = 0; } - virtual ~CvVideoWriter_FFMPEG_proxy() { close(); } - - virtual bool writeFrame( const IplImage* image ) - { - if(!ffmpegWriter) - return false; - CV_Assert(image->depth == 8); - - return icvWriteFrame_FFMPEG_p(ffmpegWriter, (const uchar*)image->imageData, - image->widthStep, image->width, image->height, image->nChannels, image->origin) !=0; - } - virtual bool open( const char* filename, int fourcc, double fps, CvSize frameSize, bool isColor ) - { - icvInitFFMPEG::Init(); - close(); - if( !icvCreateVideoWriter_FFMPEG_p ) - return false; - ffmpegWriter = icvCreateVideoWriter_FFMPEG_p( filename, fourcc, fps, frameSize.width, frameSize.height, isColor ); - return ffmpegWriter != 0; - } - - virtual void close() - { - if( ffmpegWriter && icvReleaseVideoWriter_FFMPEG_p ) - icvReleaseVideoWriter_FFMPEG_p( &ffmpegWriter ); - assert( ffmpegWriter == 0 ); - ffmpegWriter = 0; - } - -protected: - void* ffmpegWriter; -}; - - -CvVideoWriter* cvCreateVideoWriter_FFMPEG_proxy( const char* filename, int fourcc, - double fps, CvSize frameSize, int isColor ) -{ - CvVideoWriter_FFMPEG_proxy* result = new CvVideoWriter_FFMPEG_proxy; - - if( result->open( filename, fourcc, fps, frameSize, isColor != 0 )) - return result; - delete result; - return 0; -} diff --git a/modules/highgui/src/cap_ffmpeg_api.hpp b/modules/highgui/src/cap_ffmpeg_api.hpp deleted file mode 100644 index 2242bd4..0000000 --- a/modules/highgui/src/cap_ffmpeg_api.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef __OPENCV_FFMPEG_H__ -#define __OPENCV_FFMPEG_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if defined WIN32 || defined _WIN32 -#define OPENCV_FFMPEG_API __declspec(dllexport) -#else -#define OPENCV_FFMPEG_API -#endif - -enum -{ - CV_FFMPEG_CAP_PROP_POS_MSEC=0, - CV_FFMPEG_CAP_PROP_POS_FRAMES=1, - CV_FFMPEG_CAP_PROP_POS_AVI_RATIO=2, - CV_FFMPEG_CAP_PROP_FRAME_WIDTH=3, - CV_FFMPEG_CAP_PROP_FRAME_HEIGHT=4, - CV_FFMPEG_CAP_PROP_FPS=5, - CV_FFMPEG_CAP_PROP_FOURCC=6, - CV_FFMPEG_CAP_PROP_FRAME_COUNT=7 -}; - - -OPENCV_FFMPEG_API struct CvCapture_FFMPEG* cvCreateFileCapture_FFMPEG(const char* filename); -OPENCV_FFMPEG_API struct CvCapture_FFMPEG_2* cvCreateFileCapture_FFMPEG_2(const char* filename); -OPENCV_FFMPEG_API int cvSetCaptureProperty_FFMPEG(struct CvCapture_FFMPEG* cap, - int prop, double value); -OPENCV_FFMPEG_API int cvSetCaptureProperty_FFMPEG_2(struct CvCapture_FFMPEG_2* cap, - int prop, double value); -OPENCV_FFMPEG_API double cvGetCaptureProperty_FFMPEG(struct CvCapture_FFMPEG* cap, int prop); -OPENCV_FFMPEG_API double cvGetCaptureProperty_FFMPEG_2(struct CvCapture_FFMPEG_2* cap, int prop); -OPENCV_FFMPEG_API int cvGrabFrame_FFMPEG(struct CvCapture_FFMPEG* cap); -OPENCV_FFMPEG_API int cvGrabFrame_FFMPEG_2(struct CvCapture_FFMPEG_2* cap); -OPENCV_FFMPEG_API int cvRetrieveFrame_FFMPEG(struct CvCapture_FFMPEG* capture, unsigned char** data, - int* step, int* width, int* height, int* cn); -OPENCV_FFMPEG_API int cvRetrieveFrame_FFMPEG_2(struct CvCapture_FFMPEG_2* capture, unsigned char** data, - int* step, int* width, int* height, int* cn); -OPENCV_FFMPEG_API void cvReleaseCapture_FFMPEG(struct CvCapture_FFMPEG** cap); -OPENCV_FFMPEG_API void cvReleaseCapture_FFMPEG_2(struct CvCapture_FFMPEG_2** cap); -OPENCV_FFMPEG_API struct CvVideoWriter_FFMPEG* cvCreateVideoWriter_FFMPEG(const char* filename, - int fourcc, double fps, int width, int height, int isColor ); -OPENCV_FFMPEG_API struct CvVideoWriter_FFMPEG_2* cvCreateVideoWriter_FFMPEG_2(const char* filename, - int fourcc, double fps, int width, int height, int isColor ); - -OPENCV_FFMPEG_API int cvWriteFrame_FFMPEG(struct CvVideoWriter_FFMPEG* writer, const unsigned char* data, - int step, int width, int height, int cn, int origin); - -OPENCV_FFMPEG_API void cvReleaseVideoWriter_FFMPEG(struct CvVideoWriter_FFMPEG** writer); - -typedef void* (*CvCreateFileCapture_Plugin)( const char* filename ); -typedef void* (*CvCreateCameraCapture_Plugin)( int index ); -typedef int (*CvGrabFrame_Plugin)( void* capture_handle ); -typedef int (*CvRetrieveFrame_Plugin)( void* capture_handle, unsigned char** data, int* step, - int* width, int* height, int* cn ); -typedef int (*CvSetCaptureProperty_Plugin)( void* capture_handle, int prop_id, double value ); -typedef double (*CvGetCaptureProperty_Plugin)( void* capture_handle, int prop_id ); -typedef void (*CvReleaseCapture_Plugin)( void** capture_handle ); -typedef void* (*CvCreateVideoWriter_Plugin)( const char* filename, int fourcc, - double fps, int width, int height, int iscolor ); -typedef int (*CvWriteFrame_Plugin)( void* writer_handle, const unsigned char* data, int step, - int width, int height, int cn, int origin); -typedef void (*CvReleaseVideoWriter_Plugin)( void** writer ); - -/* - * For CUDA encoder - */ - -OPENCV_FFMPEG_API struct OutputMediaStream_FFMPEG* create_OutputMediaStream_FFMPEG(const char* fileName, int width, int height, double fps); -OPENCV_FFMPEG_API void release_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream); -OPENCV_FFMPEG_API void write_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream, unsigned char* data, int size, int keyFrame); - -typedef struct OutputMediaStream_FFMPEG* (*Create_OutputMediaStream_FFMPEG_Plugin)(const char* fileName, int width, int height, double fps); -typedef void (*Release_OutputMediaStream_FFMPEG_Plugin)(struct OutputMediaStream_FFMPEG* stream); -typedef void (*Write_OutputMediaStream_FFMPEG_Plugin)(struct OutputMediaStream_FFMPEG* stream, unsigned char* data, int size, int keyFrame); - -/* - * For CUDA decoder - */ - -OPENCV_FFMPEG_API struct InputMediaStream_FFMPEG* create_InputMediaStream_FFMPEG(const char* fileName, int* codec, int* chroma_format, int* width, int* height); -OPENCV_FFMPEG_API void release_InputMediaStream_FFMPEG(struct InputMediaStream_FFMPEG* stream); -OPENCV_FFMPEG_API int read_InputMediaStream_FFMPEG(struct InputMediaStream_FFMPEG* stream, unsigned char** data, int* size, int* endOfFile); - -typedef struct InputMediaStream_FFMPEG* (*Create_InputMediaStream_FFMPEG_Plugin)(const char* fileName, int* codec, int* chroma_format, int* width, int* height); -typedef void (*Release_InputMediaStream_FFMPEG_Plugin)(struct InputMediaStream_FFMPEG* stream); -typedef int (*Read_InputMediaStream_FFMPEG_Plugin)(struct InputMediaStream_FFMPEG* stream, unsigned char** data, int* size, int* endOfFile); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/highgui/src/cap_ffmpeg_impl.hpp b/modules/highgui/src/cap_ffmpeg_impl.hpp deleted file mode 100644 index 96b8b68..0000000 --- a/modules/highgui/src/cap_ffmpeg_impl.hpp +++ /dev/null @@ -1,2422 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "cap_ffmpeg_api.hpp" -#if !(defined(WIN32) || defined(_WIN32) || defined(WINCE)) -# include -#endif -#include -#include -#include - -#define CALC_FFMPEG_VERSION(a,b,c) ( a<<16 | b<<8 | c ) - -#if defined _MSC_VER && _MSC_VER >= 1200 -#pragma warning( disable: 4244 4510 4512 4610 ) -#endif - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ffmpeg_codecs.hpp" - -#include - -#if LIBAVUTIL_BUILD > CALC_FFMPEG_VERSION(51,11,0) - #include -#endif - -#ifdef WIN32 - #define HAVE_FFMPEG_SWSCALE 1 - #include - #include -#else - -#ifndef HAVE_FFMPEG_SWSCALE - #error "libswscale is necessary to build the newer OpenCV ffmpeg wrapper" -#endif - -// if the header path is not specified explicitly, let's deduce it -#if !defined HAVE_FFMPEG_AVCODEC_H && !defined HAVE_LIBAVCODEC_AVCODEC_H - -#if defined(HAVE_GENTOO_FFMPEG) - #define HAVE_LIBAVCODEC_AVCODEC_H 1 - #if defined(HAVE_FFMPEG_SWSCALE) - #define HAVE_LIBSWSCALE_SWSCALE_H 1 - #endif -#elif defined HAVE_FFMPEG - #define HAVE_FFMPEG_AVCODEC_H 1 - #if defined(HAVE_FFMPEG_SWSCALE) - #define HAVE_FFMPEG_SWSCALE_H 1 - #endif -#endif - -#endif - -#if defined(HAVE_FFMPEG_AVCODEC_H) - #include -#endif -#if defined(HAVE_FFMPEG_SWSCALE_H) - #include -#endif - -#if defined(HAVE_LIBAVCODEC_AVCODEC_H) - #include -#endif -#if defined(HAVE_LIBSWSCALE_SWSCALE_H) - #include -#endif - -#endif - -#ifdef __cplusplus -} -#endif - -#if defined _MSC_VER && _MSC_VER >= 1200 -#pragma warning( default: 4244 4510 4512 4610 ) -#endif - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -/* PIX_FMT_RGBA32 macro changed in newer ffmpeg versions */ -#ifndef PIX_FMT_RGBA32 -#define PIX_FMT_RGBA32 PIX_FMT_RGB32 -#endif - - -#if defined WIN32 || defined _WIN32 - #include -#elif defined __linux__ || defined __APPLE__ - #include - #include - #include -#if defined __APPLE__ - #include -#endif -#endif - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#if defined(__APPLE__) -#define AV_NOPTS_VALUE_ ((int64_t)0x8000000000000000LL) -#else -#define AV_NOPTS_VALUE_ ((int64_t)AV_NOPTS_VALUE) -#endif - -#ifndef AVERROR_EOF -#define AVERROR_EOF (-MKTAG( 'E','O','F',' ')) -#endif - -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54,25,0) -# define CV_CODEC_ID AVCodecID -# define CV_CODEC(name) AV_##name -#else -# define CV_CODEC_ID CodecID -# define CV_CODEC(name) name -#endif - -static int get_number_of_cpus(void) -{ -#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(52, 111, 0) - return 1; -#elif defined WIN32 || defined _WIN32 - SYSTEM_INFO sysinfo; - GetSystemInfo( &sysinfo ); - - return (int)sysinfo.dwNumberOfProcessors; -#elif defined __linux__ - return (int)sysconf( _SC_NPROCESSORS_ONLN ); -#elif defined __APPLE__ - int numCPU=0; - int mib[4]; - size_t len = sizeof(numCPU); - - // set the mib for hw.ncpu - mib[0] = CTL_HW; - mib[1] = HW_AVAILCPU; // alternatively, try HW_NCPU; - - // get the number of CPUs from the system - sysctl(mib, 2, &numCPU, &len, NULL, 0); - - if( numCPU < 1 ) - { - mib[1] = HW_NCPU; - sysctl( mib, 2, &numCPU, &len, NULL, 0 ); - - if( numCPU < 1 ) - numCPU = 1; - } - - return (int)numCPU; -#else - return 1; -#endif -} - - -struct Image_FFMPEG -{ - unsigned char* data; - int step; - int width; - int height; - int cn; -}; - - -inline void _opencv_ffmpeg_free(void** ptr) -{ - if(*ptr) free(*ptr); - *ptr = 0; -} - - -struct CvCapture_FFMPEG -{ - bool open( const char* filename ); - void close(); - - double getProperty(int) const; - bool setProperty(int, double); - bool grabFrame(); - bool retrieveFrame(int, unsigned char** data, int* step, int* width, int* height, int* cn); - - void init(); - - void seek(int64_t frame_number); - void seek(double sec); - bool slowSeek( int framenumber ); - - int64_t get_total_frames() const; - double get_duration_sec() const; - double get_fps() const; - int get_bitrate() const; - - double r2d(AVRational r) const; - int64_t dts_to_frame_number(int64_t dts); - double dts_to_sec(int64_t dts); - - AVFormatContext * ic; - AVCodec * avcodec; - int video_stream; - AVStream * video_st; - AVFrame * picture; - AVFrame rgb_picture; - int64_t picture_pts; - - AVPacket packet; - Image_FFMPEG frame; - struct SwsContext *img_convert_ctx; - - int64_t frame_number, first_frame_number; - - double eps_zero; -/* - 'filename' contains the filename of the videosource, - 'filename==NULL' indicates that ffmpeg's seek support works - for the particular file. - 'filename!=NULL' indicates that the slow fallback function is used for seeking, - and so the filename is needed to reopen the file on backward seeking. -*/ - char * filename; - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - AVDictionary *dict; -#endif -}; - -void CvCapture_FFMPEG::init() -{ - ic = 0; - video_stream = -1; - video_st = 0; - picture = 0; - picture_pts = AV_NOPTS_VALUE_; - first_frame_number = -1; - memset( &rgb_picture, 0, sizeof(rgb_picture) ); - memset( &frame, 0, sizeof(frame) ); - filename = 0; - memset(&packet, 0, sizeof(packet)); - av_init_packet(&packet); - img_convert_ctx = 0; - - avcodec = 0; - frame_number = 0; - eps_zero = 0.000025; - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - dict = NULL; -#endif -} - - -void CvCapture_FFMPEG::close() -{ - if( img_convert_ctx ) - { - sws_freeContext(img_convert_ctx); - img_convert_ctx = 0; - } - - if( picture ) - { - // FFmpeg and Libav added avcodec_free_frame in different versions. -#if LIBAVCODEC_BUILD >= (LIBAVCODEC_VERSION_MICRO >= 100 \ - ? CALC_FFMPEG_VERSION(54, 59, 100) : CALC_FFMPEG_VERSION(54, 28, 0)) - avcodec_free_frame(&picture); -#else - av_free(picture); -#endif - } - - if( video_st ) - { -#if LIBAVFORMAT_BUILD > 4628 - avcodec_close( video_st->codec ); - -#else - avcodec_close( &(video_st->codec) ); - -#endif - video_st = NULL; - } - - if( ic ) - { -#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 24, 2) - av_close_input_file(ic); -#else - avformat_close_input(&ic); -#endif - - ic = NULL; - } - - if( rgb_picture.data[0] ) - { - free( rgb_picture.data[0] ); - rgb_picture.data[0] = 0; - } - - // free last packet if exist - if (packet.data) { - av_free_packet (&packet); - packet.data = NULL; - } - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - if (dict != NULL) - av_dict_free(&dict); -#endif - - init(); -} - - -#ifndef AVSEEK_FLAG_FRAME -#define AVSEEK_FLAG_FRAME 0 -#endif -#ifndef AVSEEK_FLAG_ANY -#define AVSEEK_FLAG_ANY 1 -#endif - -class ImplMutex -{ -public: - ImplMutex() { init(); } - ~ImplMutex() { destroy(); } - - void init(); - void destroy(); - - void lock(); - bool trylock(); - void unlock(); - - struct Impl; -protected: - Impl* impl; - -private: - ImplMutex(const ImplMutex&); - ImplMutex& operator = (const ImplMutex& m); -}; - -#if defined WIN32 || defined _WIN32 || defined WINCE - -struct ImplMutex::Impl -{ - void init() - { -#if (_WIN32_WINNT >= 0x0600) - ::InitializeCriticalSectionEx(&cs, 1000, 0); -#else - ::InitializeCriticalSection(&cs); -#endif - refcount = 1; - } - void destroy() { DeleteCriticalSection(&cs); } - - void lock() { EnterCriticalSection(&cs); } - bool trylock() { return TryEnterCriticalSection(&cs) != 0; } - void unlock() { LeaveCriticalSection(&cs); } - - CRITICAL_SECTION cs; - int refcount; -}; - -#ifndef __GNUC__ -static int _interlockedExchangeAdd(int* addr, int delta) -{ -#if defined _MSC_VER && _MSC_VER >= 1500 - return (int)_InterlockedExchangeAdd((long volatile*)addr, delta); -#else - return (int)InterlockedExchangeAdd((long volatile*)addr, delta); -#endif -} -#endif // __GNUC__ - -#elif defined __APPLE__ - -#include - -struct ImplMutex::Impl -{ - void init() { sl = OS_SPINLOCK_INIT; refcount = 1; } - void destroy() { } - - void lock() { OSSpinLockLock(&sl); } - bool trylock() { return OSSpinLockTry(&sl); } - void unlock() { OSSpinLockUnlock(&sl); } - - OSSpinLock sl; - int refcount; -}; - -#elif defined __linux__ && !defined ANDROID - -struct ImplMutex::Impl -{ - void init() { pthread_spin_init(&sl, 0); refcount = 1; } - void destroy() { pthread_spin_destroy(&sl); } - - void lock() { pthread_spin_lock(&sl); } - bool trylock() { return pthread_spin_trylock(&sl) == 0; } - void unlock() { pthread_spin_unlock(&sl); } - - pthread_spinlock_t sl; - int refcount; -}; - -#else - -struct ImplMutex::Impl -{ - void init() { pthread_mutex_init(&sl, 0); refcount = 1; } - void destroy() { pthread_mutex_destroy(&sl); } - - void lock() { pthread_mutex_lock(&sl); } - bool trylock() { return pthread_mutex_trylock(&sl) == 0; } - void unlock() { pthread_mutex_unlock(&sl); } - - pthread_mutex_t sl; - int refcount; -}; - -#endif - -void ImplMutex::init() -{ - impl = (Impl*)malloc(sizeof(Impl)); - impl->init(); -} -void ImplMutex::destroy() -{ - impl->destroy(); - free(impl); - impl = NULL; -} -void ImplMutex::lock() { impl->lock(); } -void ImplMutex::unlock() { impl->unlock(); } -bool ImplMutex::trylock() { return impl->trylock(); } - -static int LockCallBack(void **mutex, AVLockOp op) -{ - ImplMutex* localMutex = reinterpret_cast(*mutex); - switch (op) - { - case AV_LOCK_CREATE: - localMutex = reinterpret_cast(malloc(sizeof(ImplMutex))); - localMutex->init(); - *mutex = localMutex; - if (!*mutex) - return 1; - break; - - case AV_LOCK_OBTAIN: - localMutex->lock(); - break; - - case AV_LOCK_RELEASE: - localMutex->unlock(); - break; - - case AV_LOCK_DESTROY: - localMutex->destroy(); - free(localMutex); - localMutex = NULL; - *mutex = NULL; - break; - } - return 0; -} - -static ImplMutex _mutex; -static bool _initialized = false; - -class InternalFFMpegRegister -{ -public: - InternalFFMpegRegister() - { - _mutex.lock(); - if (!_initialized) - { - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 13, 0) - avformat_network_init(); - #endif - - /* register all codecs, demux and protocols */ - av_register_all(); - - /* register a callback function for synchronization */ - av_lockmgr_register(&LockCallBack); - - av_log_set_level(AV_LOG_ERROR); - - _initialized = true; - } - _mutex.unlock(); - } - - ~InternalFFMpegRegister() - { - _initialized = false; - av_lockmgr_register(NULL); - } -}; - -static InternalFFMpegRegister _init; - -bool CvCapture_FFMPEG::open( const char* _filename ) -{ - unsigned i; - bool valid = false; - - close(); - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - av_dict_set(&dict, "rtsp_transport", "tcp", 0); - int err = avformat_open_input(&ic, _filename, NULL, NULL); -#else - int err = av_open_input_file(&ic, _filename, NULL, 0, NULL); -#endif - - if (err < 0) - { - CV_WARN("Error opening file"); - goto exit_func; - } - err = -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 6, 0) - avformat_find_stream_info(ic, NULL); -#else - av_find_stream_info(ic); -#endif - if (err < 0) - { - CV_WARN("Could not find codec parameters"); - goto exit_func; - } - for(i = 0; i < ic->nb_streams; i++) - { -#if LIBAVFORMAT_BUILD > 4628 - AVCodecContext *enc = ic->streams[i]->codec; -#else - AVCodecContext *enc = &ic->streams[i]->codec; -#endif - -//#ifdef FF_API_THREAD_INIT -// avcodec_thread_init(enc, get_number_of_cpus()); -//#else - enc->thread_count = get_number_of_cpus(); -//#endif - -#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) -#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO -#endif - - if( AVMEDIA_TYPE_VIDEO == enc->codec_type && video_stream < 0) - { - // backup encoder' width/height - int enc_width = enc->width; - int enc_height = enc->height; - - AVCodec *codec = avcodec_find_decoder(enc->codec_id); - if (!codec || -#if LIBAVCODEC_VERSION_INT >= ((53<<16)+(8<<8)+0) - avcodec_open2(enc, codec, NULL) -#else - avcodec_open(enc, codec) -#endif - < 0) - goto exit_func; - - // checking width/height (since decoder can sometimes alter it, eg. vp6f) - if (enc_width && (enc->width != enc_width)) { enc->width = enc_width; } - if (enc_height && (enc->height != enc_height)) { enc->height = enc_height; } - - video_stream = i; - video_st = ic->streams[i]; - picture = avcodec_alloc_frame(); - - rgb_picture.data[0] = (uint8_t*)malloc( - avpicture_get_size( PIX_FMT_BGR24, - enc->width, enc->height )); - avpicture_fill( (AVPicture*)&rgb_picture, rgb_picture.data[0], - PIX_FMT_BGR24, enc->width, enc->height ); - - frame.width = enc->width; - frame.height = enc->height; - frame.cn = 3; - frame.step = rgb_picture.linesize[0]; - frame.data = rgb_picture.data[0]; - break; - } - } - - if(video_stream >= 0) valid = true; - -exit_func: - - if( !valid ) - close(); - - return valid; -} - - -bool CvCapture_FFMPEG::grabFrame() -{ - bool valid = false; - int got_picture; - - int count_errs = 0; - const int max_number_of_attempts = 1 << 9; - - if( !ic || !video_st ) return false; - - if( ic->streams[video_stream]->nb_frames > 0 && - frame_number > ic->streams[video_stream]->nb_frames ) - return false; - - picture_pts = AV_NOPTS_VALUE_; - - // get the next frame - while (!valid) - { - - av_free_packet (&packet); - int ret = av_read_frame(ic, &packet); - if (ret == AVERROR(EAGAIN)) continue; - - /* else if (ret < 0) break; */ - - if( packet.stream_index != video_stream ) - { - av_free_packet (&packet); - count_errs++; - if (count_errs > max_number_of_attempts) - break; - continue; - } - - // Decode video frame - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - avcodec_decode_video2(video_st->codec, picture, &got_picture, &packet); - #elif LIBAVFORMAT_BUILD > 4628 - avcodec_decode_video(video_st->codec, - picture, &got_picture, - packet.data, packet.size); - #else - avcodec_decode_video(&video_st->codec, - picture, &got_picture, - packet.data, packet.size); - #endif - - // Did we get a video frame? - if(got_picture) - { - //picture_pts = picture->best_effort_timestamp; - if( picture_pts == AV_NOPTS_VALUE_ ) - picture_pts = packet.pts != AV_NOPTS_VALUE_ && packet.pts != 0 ? packet.pts : packet.dts; - frame_number++; - valid = true; - } - else - { - count_errs++; - if (count_errs > max_number_of_attempts) - break; - } - } - - if( valid && first_frame_number < 0 ) - first_frame_number = dts_to_frame_number(picture_pts); - - // return if we have a new picture or not - return valid; -} - - -bool CvCapture_FFMPEG::retrieveFrame(int, unsigned char** data, int* step, int* width, int* height, int* cn) -{ - if( !video_st || !picture->data[0] ) - return false; - - avpicture_fill((AVPicture*)&rgb_picture, rgb_picture.data[0], PIX_FMT_RGB24, - video_st->codec->width, video_st->codec->height); - - if( img_convert_ctx == NULL || - frame.width != video_st->codec->width || - frame.height != video_st->codec->height ) - { - if( img_convert_ctx ) - sws_freeContext(img_convert_ctx); - - frame.width = video_st->codec->width; - frame.height = video_st->codec->height; - - img_convert_ctx = sws_getCachedContext( - NULL, - video_st->codec->width, video_st->codec->height, - video_st->codec->pix_fmt, - video_st->codec->width, video_st->codec->height, - PIX_FMT_BGR24, - SWS_BICUBIC, - NULL, NULL, NULL - ); - - if (img_convert_ctx == NULL) - return false;//CV_Error(0, "Cannot initialize the conversion context!"); - } - - sws_scale( - img_convert_ctx, - picture->data, - picture->linesize, - 0, video_st->codec->height, - rgb_picture.data, - rgb_picture.linesize - ); - - *data = frame.data; - *step = frame.step; - *width = frame.width; - *height = frame.height; - *cn = frame.cn; - - return true; -} - - -double CvCapture_FFMPEG::getProperty( int property_id ) const -{ - if( !video_st ) return 0; - - switch( property_id ) - { - case CV_FFMPEG_CAP_PROP_POS_MSEC: - return 1000.0*(double)frame_number/get_fps(); - case CV_FFMPEG_CAP_PROP_POS_FRAMES: - return (double)frame_number; - case CV_FFMPEG_CAP_PROP_POS_AVI_RATIO: - return r2d(ic->streams[video_stream]->time_base); - case CV_FFMPEG_CAP_PROP_FRAME_COUNT: - return (double)get_total_frames(); - case CV_FFMPEG_CAP_PROP_FRAME_WIDTH: - return (double)frame.width; - case CV_FFMPEG_CAP_PROP_FRAME_HEIGHT: - return (double)frame.height; - case CV_FFMPEG_CAP_PROP_FPS: -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54, 1, 0) - return av_q2d(video_st->avg_frame_rate); -#elif LIBAVCODEC_BUILD > 4753 - return av_q2d(video_st->r_frame_rate); -#else - return (double)video_st->codec.frame_rate - / (double)video_st->codec.frame_rate_base; -#endif - case CV_FFMPEG_CAP_PROP_FOURCC: -#if LIBAVFORMAT_BUILD > 4628 - return (double)video_st->codec->codec_tag; -#else - return (double)video_st->codec.codec_tag; -#endif - default: - break; - } - - return 0; -} - -double CvCapture_FFMPEG::r2d(AVRational r) const -{ - return r.num == 0 || r.den == 0 ? 0. : (double)r.num / (double)r.den; -} - -double CvCapture_FFMPEG::get_duration_sec() const -{ - double sec = (double)ic->duration / (double)AV_TIME_BASE; - - if (sec < eps_zero) - { - sec = (double)ic->streams[video_stream]->duration * r2d(ic->streams[video_stream]->time_base); - } - - if (sec < eps_zero) - { - sec = (double)ic->streams[video_stream]->duration * r2d(ic->streams[video_stream]->time_base); - } - - return sec; -} - -int CvCapture_FFMPEG::get_bitrate() const -{ - return ic->bit_rate; -} - -double CvCapture_FFMPEG::get_fps() const -{ -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54, 1, 0) - double fps = r2d(ic->streams[video_stream]->avg_frame_rate); -#else - double fps = r2d(ic->streams[video_stream]->r_frame_rate); -#endif - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - if (fps < eps_zero) - { - fps = r2d(ic->streams[video_stream]->avg_frame_rate); - } -#endif - - if (fps < eps_zero) - { - fps = 1.0 / r2d(ic->streams[video_stream]->codec->time_base); - } - - return fps; -} - -int64_t CvCapture_FFMPEG::get_total_frames() const -{ - int64_t nbf = ic->streams[video_stream]->nb_frames; - - if (nbf == 0) - { - nbf = (int64_t)floor(get_duration_sec() * get_fps() + 0.5); - } - return nbf; -} - -int64_t CvCapture_FFMPEG::dts_to_frame_number(int64_t dts) -{ - double sec = dts_to_sec(dts); - return (int64_t)(get_fps() * sec + 0.5); -} - -double CvCapture_FFMPEG::dts_to_sec(int64_t dts) -{ - return (double)(dts - ic->streams[video_stream]->start_time) * - r2d(ic->streams[video_stream]->time_base); -} - -void CvCapture_FFMPEG::seek(int64_t _frame_number) -{ - _frame_number = std::min(_frame_number, get_total_frames()); - int delta = 16; - - // if we have not grabbed a single frame before first seek, let's read the first frame - // and get some valuable information during the process - if( first_frame_number < 0 && get_total_frames() > 1 ) - grabFrame(); - - for(;;) - { - int64_t _frame_number_temp = std::max(_frame_number-delta, (int64_t)0); - double sec = (double)_frame_number_temp / get_fps(); - int64_t time_stamp = ic->streams[video_stream]->start_time; - double time_base = r2d(ic->streams[video_stream]->time_base); - time_stamp += (int64_t)(sec / time_base + 0.5); - if (get_total_frames() > 1) av_seek_frame(ic, video_stream, time_stamp, AVSEEK_FLAG_BACKWARD); - avcodec_flush_buffers(ic->streams[video_stream]->codec); - if( _frame_number > 0 ) - { - grabFrame(); - - if( _frame_number > 1 ) - { - frame_number = dts_to_frame_number(picture_pts) - first_frame_number; - //printf("_frame_number = %d, frame_number = %d, delta = %d\n", - // (int)_frame_number, (int)frame_number, delta); - - if( frame_number < 0 || frame_number > _frame_number-1 ) - { - if( _frame_number_temp == 0 || delta >= INT_MAX/4 ) - break; - delta = delta < 16 ? delta*2 : delta*3/2; - continue; - } - while( frame_number < _frame_number-1 ) - { - if(!grabFrame()) - break; - } - frame_number++; - break; - } - else - { - frame_number = 1; - break; - } - } - else - { - frame_number = 0; - break; - } - } -} - -void CvCapture_FFMPEG::seek(double sec) -{ - seek((int64_t)(sec * get_fps() + 0.5)); -} - -bool CvCapture_FFMPEG::setProperty( int property_id, double value ) -{ - if( !video_st ) return false; - - switch( property_id ) - { - case CV_FFMPEG_CAP_PROP_POS_MSEC: - case CV_FFMPEG_CAP_PROP_POS_FRAMES: - case CV_FFMPEG_CAP_PROP_POS_AVI_RATIO: - { - switch( property_id ) - { - case CV_FFMPEG_CAP_PROP_POS_FRAMES: - seek((int64_t)value); - break; - - case CV_FFMPEG_CAP_PROP_POS_MSEC: - seek(value/1000.0); - break; - - case CV_FFMPEG_CAP_PROP_POS_AVI_RATIO: - seek((int64_t)(value*ic->duration)); - break; - } - - picture_pts=(int64_t)value; - } - break; - default: - return false; - } - - return true; -} - - -///////////////// FFMPEG CvVideoWriter implementation ////////////////////////// -struct CvVideoWriter_FFMPEG -{ - bool open( const char* filename, int fourcc, - double fps, int width, int height, bool isColor ); - void close(); - bool writeFrame( const unsigned char* data, int step, int width, int height, int cn, int origin ); - - void init(); - - AVOutputFormat * fmt; - AVFormatContext * oc; - uint8_t * outbuf; - uint32_t outbuf_size; - FILE * outfile; - AVFrame * picture; - AVFrame * input_picture; - uint8_t * picbuf; - AVStream * video_st; - int input_pix_fmt; - Image_FFMPEG temp_image; - int frame_width, frame_height; - int frame_idx; - bool ok; - struct SwsContext *img_convert_ctx; -}; - -static const char * icvFFMPEGErrStr(int err) -{ -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - switch(err) { - case AVERROR_BSF_NOT_FOUND: - return "Bitstream filter not found"; - case AVERROR_DECODER_NOT_FOUND: - return "Decoder not found"; - case AVERROR_DEMUXER_NOT_FOUND: - return "Demuxer not found"; - case AVERROR_ENCODER_NOT_FOUND: - return "Encoder not found"; - case AVERROR_EOF: - return "End of file"; - case AVERROR_EXIT: - return "Immediate exit was requested; the called function should not be restarted"; - case AVERROR_FILTER_NOT_FOUND: - return "Filter not found"; - case AVERROR_INVALIDDATA: - return "Invalid data found when processing input"; - case AVERROR_MUXER_NOT_FOUND: - return "Muxer not found"; - case AVERROR_OPTION_NOT_FOUND: - return "Option not found"; - case AVERROR_PATCHWELCOME: - return "Not yet implemented in FFmpeg, patches welcome"; - case AVERROR_PROTOCOL_NOT_FOUND: - return "Protocol not found"; - case AVERROR_STREAM_NOT_FOUND: - return "Stream not found"; - default: - break; - } -#else - switch(err) { - case AVERROR_NUMEXPECTED: - return "Incorrect filename syntax"; - case AVERROR_INVALIDDATA: - return "Invalid data in header"; - case AVERROR_NOFMT: - return "Unknown format"; - case AVERROR_IO: - return "I/O error occurred"; - case AVERROR_NOMEM: - return "Memory allocation error"; - default: - break; - } -#endif - - return "Unspecified error"; -} - -/* function internal to FFMPEG (libavformat/riff.c) to lookup codec id by fourcc tag*/ -extern "C" { - enum CV_CODEC_ID codec_get_bmp_id(unsigned int tag); -} - -void CvVideoWriter_FFMPEG::init() -{ - fmt = 0; - oc = 0; - outbuf = 0; - outbuf_size = 0; - outfile = 0; - picture = 0; - input_picture = 0; - picbuf = 0; - video_st = 0; - input_pix_fmt = 0; - memset(&temp_image, 0, sizeof(temp_image)); - img_convert_ctx = 0; - frame_width = frame_height = 0; - frame_idx = 0; - ok = false; -} - -/** - * the following function is a modified version of code - * found in ffmpeg-0.4.9-pre1/output_example.c - */ -static AVFrame * icv_alloc_picture_FFMPEG(int pix_fmt, int width, int height, bool alloc) -{ - AVFrame * picture; - uint8_t * picture_buf; - int size; - - picture = avcodec_alloc_frame(); - if (!picture) - return NULL; - size = avpicture_get_size( (PixelFormat) pix_fmt, width, height); - if(alloc){ - picture_buf = (uint8_t *) malloc(size); - if (!picture_buf) - { - av_free(picture); - return NULL; - } - avpicture_fill((AVPicture *)picture, picture_buf, - (PixelFormat) pix_fmt, width, height); - } - else { - } - return picture; -} - -/* add a video output stream to the container */ -static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc, - CV_CODEC_ID codec_id, - int w, int h, int bitrate, - double fps, int pixel_format) -{ - AVCodecContext *c; - AVStream *st; - int frame_rate, frame_rate_base; - AVCodec *codec; - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 10, 0) - st = avformat_new_stream(oc, 0); -#else - st = av_new_stream(oc, 0); -#endif - - if (!st) { - CV_WARN("Could not allocate stream"); - return NULL; - } - -#if LIBAVFORMAT_BUILD > 4628 - c = st->codec; -#else - c = &(st->codec); -#endif - -#if LIBAVFORMAT_BUILD > 4621 - c->codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL, AVMEDIA_TYPE_VIDEO); -#else - c->codec_id = oc->oformat->video_codec; -#endif - - if(codec_id != CV_CODEC(CODEC_ID_NONE)){ - c->codec_id = codec_id; - } - - //if(codec_tag) c->codec_tag=codec_tag; - codec = avcodec_find_encoder(c->codec_id); - - c->codec_type = AVMEDIA_TYPE_VIDEO; - -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54,25,0) - // Set per-codec defaults - AVCodecID c_id = c->codec_id; - avcodec_get_context_defaults3(c, codec); - // avcodec_get_context_defaults3 erases codec_id for some reason - c->codec_id = c_id; -#endif - - /* put sample parameters */ - int64_t lbit_rate = (int64_t)bitrate; - lbit_rate += (bitrate / 2); - lbit_rate = std::min(lbit_rate, (int64_t)INT_MAX); - c->bit_rate = lbit_rate; - - // took advice from - // http://ffmpeg-users.933282.n4.nabble.com/warning-clipping-1-dct-coefficients-to-127-127-td934297.html - c->qmin = 3; - - /* resolution must be a multiple of two */ - c->width = w; - c->height = h; - - /* time base: this is the fundamental unit of time (in seconds) in terms - of which frame timestamps are represented. for fixed-fps content, - timebase should be 1/framerate and timestamp increments should be - identically 1. */ - frame_rate=(int)(fps+0.5); - frame_rate_base=1; - while (fabs((double)frame_rate/frame_rate_base) - fps > 0.001){ - frame_rate_base*=10; - frame_rate=(int)(fps*frame_rate_base + 0.5); - } -#if LIBAVFORMAT_BUILD > 4752 - c->time_base.den = frame_rate; - c->time_base.num = frame_rate_base; - /* adjust time base for supported framerates */ - if(codec && codec->supported_framerates){ - const AVRational *p= codec->supported_framerates; - AVRational req = {frame_rate, frame_rate_base}; - const AVRational *best=NULL; - AVRational best_error= {INT_MAX, 1}; - for(; p->den!=0; p++){ - AVRational error= av_sub_q(req, *p); - if(error.num <0) error.num *= -1; - if(av_cmp_q(error, best_error) < 0){ - best_error= error; - best= p; - } - } - c->time_base.den= best->num; - c->time_base.num= best->den; - } -#else - c->frame_rate = frame_rate; - c->frame_rate_base = frame_rate_base; -#endif - - c->gop_size = 12; /* emit one intra frame every twelve frames at most */ - c->pix_fmt = (PixelFormat) pixel_format; - - if (c->codec_id == CV_CODEC(CODEC_ID_MPEG2VIDEO)) { - c->max_b_frames = 2; - } - if (c->codec_id == CV_CODEC(CODEC_ID_MPEG1VIDEO) || c->codec_id == CV_CODEC(CODEC_ID_MSMPEG4V3)){ - /* needed to avoid using macroblocks in which some coeffs overflow - this doesnt happen with normal video, it just happens here as the - motion of the chroma plane doesnt match the luma plane */ - /* avoid FFMPEG warning 'clipping 1 dct coefficients...' */ - c->mb_decision=2; - } - -#if LIBAVUTIL_BUILD > CALC_FFMPEG_VERSION(51,11,0) - /* Some settings for libx264 encoding, restore dummy values for gop_size - and qmin since they will be set to reasonable defaults by the libx264 - preset system. Also, use a crf encode with the default quality rating, - this seems easier than finding an appropriate default bitrate. */ - if (c->codec_id == AV_CODEC_ID_H264) { - c->gop_size = -1; - c->qmin = -1; - c->bit_rate = 0; - av_opt_set(c->priv_data,"crf","23", 0); - } -#endif - -#if LIBAVCODEC_VERSION_INT>0x000409 - // some formats want stream headers to be seperate - if(oc->oformat->flags & AVFMT_GLOBALHEADER) - { - c->flags |= CODEC_FLAG_GLOBAL_HEADER; - } -#endif - - return st; -} - -static const int OPENCV_NO_FRAMES_WRITTEN_CODE = 1000; - -static int icv_av_write_frame_FFMPEG( AVFormatContext * oc, AVStream * video_st, -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54, 1, 0) - uint8_t *, uint32_t, -#else - uint8_t * outbuf, uint32_t outbuf_size, -#endif - AVFrame * picture ) -{ -#if LIBAVFORMAT_BUILD > 4628 - AVCodecContext * c = video_st->codec; -#else - AVCodecContext * c = &(video_st->codec); -#endif - int ret = OPENCV_NO_FRAMES_WRITTEN_CODE; - - if (oc->oformat->flags & AVFMT_RAWPICTURE) { - /* raw video case. The API will change slightly in the near - futur for that */ - AVPacket pkt; - av_init_packet(&pkt); - -#ifndef PKT_FLAG_KEY -#define PKT_FLAG_KEY AV_PKT_FLAG_KEY -#endif - - pkt.flags |= PKT_FLAG_KEY; - pkt.stream_index= video_st->index; - pkt.data= (uint8_t *)picture; - pkt.size= sizeof(AVPicture); - - ret = av_write_frame(oc, &pkt); - } else { - /* encode the image */ - AVPacket pkt; - av_init_packet(&pkt); -#if LIBAVCODEC_BUILD >= CALC_FFMPEG_VERSION(54, 1, 0) - int got_output = 0; - pkt.data = NULL; - pkt.size = 0; - ret = avcodec_encode_video2(c, &pkt, picture, &got_output); - if (ret < 0) - ; - else if (got_output) { - if (pkt.pts != (int64_t)AV_NOPTS_VALUE) - pkt.pts = av_rescale_q(pkt.pts, c->time_base, video_st->time_base); - if (pkt.dts != (int64_t)AV_NOPTS_VALUE) - pkt.dts = av_rescale_q(pkt.dts, c->time_base, video_st->time_base); - if (pkt.duration) - pkt.duration = av_rescale_q(pkt.duration, c->time_base, video_st->time_base); - pkt.stream_index= video_st->index; - ret = av_write_frame(oc, &pkt); - av_free_packet(&pkt); - } - else - ret = OPENCV_NO_FRAMES_WRITTEN_CODE; -#else - int out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture); - /* if zero size, it means the image was buffered */ - if (out_size > 0) { -#if LIBAVFORMAT_BUILD > 4752 - if(c->coded_frame->pts != (int64_t)AV_NOPTS_VALUE) - pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, video_st->time_base); -#else - pkt.pts = c->coded_frame->pts; -#endif - if(c->coded_frame->key_frame) - pkt.flags |= PKT_FLAG_KEY; - pkt.stream_index= video_st->index; - pkt.data= outbuf; - pkt.size= out_size; - - /* write the compressed frame in the media file */ - ret = av_write_frame(oc, &pkt); - } -#endif - } - return ret; -} - -/// write a frame with FFMPEG -bool CvVideoWriter_FFMPEG::writeFrame( const unsigned char* data, int step, int width, int height, int cn, int origin ) -{ - bool ret = false; - - if( (width & -2) != frame_width || (height & -2) != frame_height || !data ) - return false; - width = frame_width; - height = frame_height; - - // typecast from opaque data type to implemented struct -#if LIBAVFORMAT_BUILD > 4628 - AVCodecContext *c = video_st->codec; -#else - AVCodecContext *c = &(video_st->codec); -#endif - -#if LIBAVFORMAT_BUILD < 5231 - // It is not needed in the latest versions of the ffmpeg - if( c->codec_id == CV_CODEC(CODEC_ID_RAWVIDEO) && origin != 1 ) - { - if( !temp_image.data ) - { - temp_image.step = (width*cn + 3) & -4; - temp_image.width = width; - temp_image.height = height; - temp_image.cn = cn; - temp_image.data = (unsigned char*)malloc(temp_image.step*temp_image.height); - } - for( int y = 0; y < height; y++ ) - memcpy(temp_image.data + y*temp_image.step, data + (height-1-y)*step, width*cn); - data = temp_image.data; - step = temp_image.step; - } -#else - if( width*cn != step ) - { - if( !temp_image.data ) - { - temp_image.step = width*cn; - temp_image.width = width; - temp_image.height = height; - temp_image.cn = cn; - temp_image.data = (unsigned char*)malloc(temp_image.step*temp_image.height); - } - if (origin == 1) - for( int y = 0; y < height; y++ ) - memcpy(temp_image.data + y*temp_image.step, data + (height-1-y)*step, temp_image.step); - else - for( int y = 0; y < height; y++ ) - memcpy(temp_image.data + y*temp_image.step, data + y*step, temp_image.step); - data = temp_image.data; - step = temp_image.step; - } -#endif - - // check parameters - if (input_pix_fmt == PIX_FMT_BGR24) { - if (cn != 3) { - return false; - } - } - else if (input_pix_fmt == PIX_FMT_GRAY8) { - if (cn != 1) { - return false; - } - } - else { - assert(false); - } - - if ( c->pix_fmt != input_pix_fmt ) { - assert( input_picture ); - // let input_picture point to the raw data buffer of 'image' - avpicture_fill((AVPicture *)input_picture, (uint8_t *) data, - (PixelFormat)input_pix_fmt, width, height); - - if( !img_convert_ctx ) - { - img_convert_ctx = sws_getContext(width, - height, - (PixelFormat)input_pix_fmt, - c->width, - c->height, - c->pix_fmt, - SWS_BICUBIC, - NULL, NULL, NULL); - if( !img_convert_ctx ) - return false; - } - - if ( sws_scale(img_convert_ctx, input_picture->data, - input_picture->linesize, 0, - height, - picture->data, picture->linesize) < 0 ) - return false; - } - else{ - avpicture_fill((AVPicture *)picture, (uint8_t *) data, - (PixelFormat)input_pix_fmt, width, height); - } - - picture->pts = frame_idx; - ret = icv_av_write_frame_FFMPEG( oc, video_st, outbuf, outbuf_size, picture) >= 0; - frame_idx++; - - return ret; -} - -/// close video output stream and free associated memory -void CvVideoWriter_FFMPEG::close() -{ - // nothing to do if already released - if ( !picture ) - return; - - /* no more frame to compress. The codec has a latency of a few - frames if using B frames, so we get the last frames by - passing the same picture again */ - // TODO -- do we need to account for latency here? - - /* write the trailer, if any */ - if(ok && oc) - { - if( (oc->oformat->flags & AVFMT_RAWPICTURE) == 0 ) - { - for(;;) - { - int ret = icv_av_write_frame_FFMPEG( oc, video_st, outbuf, outbuf_size, NULL); - if( ret == OPENCV_NO_FRAMES_WRITTEN_CODE || ret < 0 ) - break; - } - } - av_write_trailer(oc); - } - - if( img_convert_ctx ) - { - sws_freeContext(img_convert_ctx); - img_convert_ctx = 0; - } - - // free pictures -#if LIBAVFORMAT_BUILD > 4628 - if( video_st->codec->pix_fmt != input_pix_fmt) -#else - if( video_st->codec.pix_fmt != input_pix_fmt) -#endif - { - if(picture->data[0]) - free(picture->data[0]); - picture->data[0] = 0; - } - av_free(picture); - - if (input_picture) - av_free(input_picture); - - /* close codec */ -#if LIBAVFORMAT_BUILD > 4628 - avcodec_close(video_st->codec); -#else - avcodec_close(&(video_st->codec)); -#endif - - av_free(outbuf); - - if (!(fmt->flags & AVFMT_NOFILE)) - { - /* close the output file */ - -#if LIBAVCODEC_VERSION_INT < ((52<<16)+(123<<8)+0) -#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(49<<8)+0) - url_fclose(oc->pb); -#else - url_fclose(&oc->pb); -#endif -#else - avio_close(oc->pb); -#endif - - } - - /* free the stream */ - avformat_free_context(oc); - - if( temp_image.data ) - { - free(temp_image.data); - temp_image.data = 0; - } - - init(); -} - -#define CV_PRINTABLE_CHAR(ch) ((ch) < 32 ? '?' : (ch)) -#define CV_TAG_TO_PRINTABLE_CHAR4(tag) CV_PRINTABLE_CHAR((tag) & 255), CV_PRINTABLE_CHAR(((tag) >> 8) & 255), CV_PRINTABLE_CHAR(((tag) >> 16) & 255), CV_PRINTABLE_CHAR(((tag) >> 24) & 255) - -static inline bool cv_ff_codec_tag_match(const AVCodecTag *tags, enum AVCodecID id, unsigned int tag) -{ - while (tags->id != AV_CODEC_ID_NONE) - { - if (tags->id == id && tags->tag == tag) - return true; - tags++; - } - return false; -} -static inline bool cv_ff_codec_tag_list_match(const AVCodecTag *const *tags, enum AVCodecID id, unsigned int tag) -{ - int i; - for (i = 0; tags && tags[i]; i++) { - bool res = cv_ff_codec_tag_match(tags[i], id, tag); - if (res) - return res; - } - return false; -} - -/// Create a video writer object that uses FFMPEG -bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc, - double fps, int width, int height, bool is_color ) -{ - CV_CODEC_ID codec_id = CV_CODEC(CODEC_ID_NONE); - int err, codec_pix_fmt; - double bitrate_scale = 1; - - close(); - - // check arguments - if( !filename ) - return false; - if(fps <= 0) - return false; - - // we allow frames of odd width or height, but in this case we truncate - // the rightmost column/the bottom row. Probably, this should be handled more elegantly, - // but some internal functions inside FFMPEG swscale require even width/height. - width &= -2; - height &= -2; - if( width <= 0 || height <= 0 ) - return false; - - /* auto detect the output format from the name and fourcc code. */ - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - fmt = av_guess_format(NULL, filename, NULL); -#else - fmt = guess_format(NULL, filename, NULL); -#endif - - if (!fmt) - return false; - - /* determine optimal pixel format */ - if (is_color) { - input_pix_fmt = PIX_FMT_BGR24; - } - else { - input_pix_fmt = PIX_FMT_GRAY8; - } - - /* Lookup codec_id for given fourcc */ -#if LIBAVCODEC_VERSION_INT<((51<<16)+(49<<8)+0) - if( (codec_id = codec_get_bmp_id( fourcc )) == CV_CODEC(CODEC_ID_NONE) ) - return false; -#elif LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(54, 1, 0) -// APIchnages: -// 2012-01-31 - dd6d3b0 - lavf 54.01.0 -// Add avformat_get_riff_video_tags() and avformat_get_riff_audio_tags(). - if( (codec_id = av_codec_get_id(fmt->codec_tag, fourcc)) == CV_CODEC(CODEC_ID_NONE) ) - { - const struct AVCodecTag * fallback_tags[] = { - avformat_get_riff_video_tags(), -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(55, 25, 100) -// APIchanges: ffmpeg only -// 2014-01-19 - 1a193c4 - lavf 55.25.100 - avformat.h -// Add avformat_get_mov_video_tags() and avformat_get_mov_audio_tags(). - // TODO ffmpeg only, need to skip libav: avformat_get_mov_video_tags(), -#endif - codec_bmp_tags, NULL }; - if( (codec_id = av_codec_get_id(fallback_tags, fourcc)) == CV_CODEC(CODEC_ID_NONE) ) - { - fflush(stdout); - fprintf(stderr, "OpenCV: FFMPEG: tag 0x%08x/'%c%c%c%c' is not found (format '%s / %s')'\n", - fourcc, CV_TAG_TO_PRINTABLE_CHAR4(fourcc), - fmt->name, fmt->long_name); - return false; - } - } - // validate tag - if (cv_ff_codec_tag_list_match(fmt->codec_tag, codec_id, fourcc) == false) - { - fflush(stdout); - fprintf(stderr, "OpenCV: FFMPEG: tag 0x%08x/'%c%c%c%c' is not supported with codec id %d and format '%s / %s'\n", - fourcc, CV_TAG_TO_PRINTABLE_CHAR4(fourcc), - codec_id, fmt->name, fmt->long_name); - int supported_tag; - if( (supported_tag = av_codec_get_tag(fmt->codec_tag, codec_id)) != 0 ) - { - fprintf(stderr, "OpenCV: FFMPEG: fallback to use tag 0x%08x/'%c%c%c%c'\n", - supported_tag, CV_TAG_TO_PRINTABLE_CHAR4(supported_tag)); - fourcc = supported_tag; - } - } -#else - const struct AVCodecTag * tags[] = { codec_bmp_tags, NULL}; - if( (codec_id = av_codec_get_id(tags, fourcc)) == CV_CODEC(CODEC_ID_NONE) ) - return false; -#endif - - // alloc memory for context -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - oc = avformat_alloc_context(); -#else - oc = av_alloc_format_context(); -#endif - assert (oc); - - /* set file name */ - oc->oformat = fmt; - snprintf(oc->filename, sizeof(oc->filename), "%s", filename); - - /* set some options */ - oc->max_delay = (int)(0.7*AV_TIME_BASE); /* This reduces buffer underrun warnings with MPEG */ - - // set a few optimal pixel formats for lossless codecs of interest.. - switch (codec_id) { -#if LIBAVCODEC_VERSION_INT>((50<<16)+(1<<8)+0) - case CV_CODEC(CODEC_ID_JPEGLS): - // BGR24 or GRAY8 depending on is_color... - codec_pix_fmt = input_pix_fmt; - break; -#endif - case CV_CODEC(CODEC_ID_HUFFYUV): - codec_pix_fmt = PIX_FMT_YUV422P; - break; - case CV_CODEC(CODEC_ID_MJPEG): - case CV_CODEC(CODEC_ID_LJPEG): - codec_pix_fmt = PIX_FMT_YUVJ420P; - bitrate_scale = 3; - break; - case CV_CODEC(CODEC_ID_RAWVIDEO): - codec_pix_fmt = input_pix_fmt == PIX_FMT_GRAY8 || - input_pix_fmt == PIX_FMT_GRAY16LE || - input_pix_fmt == PIX_FMT_GRAY16BE ? input_pix_fmt : PIX_FMT_YUV420P; - break; - default: - // good for lossy formats, MPEG, etc. - codec_pix_fmt = PIX_FMT_YUV420P; - break; - } - - double bitrate = MIN(bitrate_scale*fps*width*height, (double)INT_MAX/2); - - // TODO -- safe to ignore output audio stream? - video_st = icv_add_video_stream_FFMPEG(oc, codec_id, - width, height, (int)(bitrate + 0.5), - fps, codec_pix_fmt); - - /* set the output parameters (must be done even if no - parameters). */ -#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) - if (av_set_parameters(oc, NULL) < 0) { - return false; - } -#endif - -#if 0 -#if FF_API_DUMP_FORMAT - dump_format(oc, 0, filename, 1); -#else - av_dump_format(oc, 0, filename, 1); -#endif -#endif - - /* now that all the parameters are set, we can open the audio and - video codecs and allocate the necessary encode buffers */ - if (!video_st){ - return false; - } - - AVCodec *codec; - AVCodecContext *c; - -#if LIBAVFORMAT_BUILD > 4628 - c = (video_st->codec); -#else - c = &(video_st->codec); -#endif - - c->codec_tag = fourcc; - /* find the video encoder */ - codec = avcodec_find_encoder(c->codec_id); - if (!codec) { - fprintf(stderr, "Could not find encoder for codec id %d: %s", c->codec_id, icvFFMPEGErrStr( - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - AVERROR_ENCODER_NOT_FOUND - #else - -1 - #endif - )); - return false; - } - - int64_t lbit_rate = (int64_t)c->bit_rate; - lbit_rate += (bitrate / 2); - lbit_rate = std::min(lbit_rate, (int64_t)INT_MAX); - c->bit_rate_tolerance = (int)lbit_rate; - c->bit_rate = (int)lbit_rate; - - /* open the codec */ - if ((err= -#if LIBAVCODEC_VERSION_INT >= ((53<<16)+(8<<8)+0) - avcodec_open2(c, codec, NULL) -#else - avcodec_open(c, codec) -#endif - ) < 0) { - fprintf(stderr, "Could not open codec '%s': %s", codec->name, icvFFMPEGErrStr(err)); - return false; - } - - outbuf = NULL; - - if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) { - /* allocate output buffer */ - /* assume we will never get codec output with more than 4 bytes per pixel... */ - outbuf_size = width*height*4; - outbuf = (uint8_t *) av_malloc(outbuf_size); - } - - bool need_color_convert; - need_color_convert = (c->pix_fmt != input_pix_fmt); - - /* allocate the encoded raw picture */ - picture = icv_alloc_picture_FFMPEG(c->pix_fmt, c->width, c->height, need_color_convert); - if (!picture) { - return false; - } - - /* if the output format is not our input format, then a temporary - picture of the input format is needed too. It is then converted - to the required output format */ - input_picture = NULL; - if ( need_color_convert ) { - input_picture = icv_alloc_picture_FFMPEG(input_pix_fmt, c->width, c->height, false); - if (!input_picture) { - return false; - } - } - - /* open the output file, if needed */ - if (!(fmt->flags & AVFMT_NOFILE)) { -#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) - if (url_fopen(&oc->pb, filename, URL_WRONLY) < 0) -#else - if (avio_open(&oc->pb, filename, AVIO_FLAG_WRITE) < 0) -#endif - { - return false; - } - } - -#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) - /* write the stream header, if any */ - err=avformat_write_header(oc, NULL); -#else - err=av_write_header( oc ); -#endif - - if(err < 0) - { - close(); - remove(filename); - return false; - } - frame_width = width; - frame_height = height; - frame_idx = 0; - ok = true; - - return true; -} - - - -CvCapture_FFMPEG* cvCreateFileCapture_FFMPEG( const char* filename ) -{ - CvCapture_FFMPEG* capture = (CvCapture_FFMPEG*)malloc(sizeof(*capture)); - capture->init(); - if( capture->open( filename )) - return capture; - - capture->close(); - free(capture); - return 0; -} - - -void cvReleaseCapture_FFMPEG(CvCapture_FFMPEG** capture) -{ - if( capture && *capture ) - { - (*capture)->close(); - free(*capture); - *capture = 0; - } -} - -int cvSetCaptureProperty_FFMPEG(CvCapture_FFMPEG* capture, int prop_id, double value) -{ - return capture->setProperty(prop_id, value); -} - -double cvGetCaptureProperty_FFMPEG(CvCapture_FFMPEG* capture, int prop_id) -{ - return capture->getProperty(prop_id); -} - -int cvGrabFrame_FFMPEG(CvCapture_FFMPEG* capture) -{ - return capture->grabFrame(); -} - -int cvRetrieveFrame_FFMPEG(CvCapture_FFMPEG* capture, unsigned char** data, int* step, int* width, int* height, int* cn) -{ - return capture->retrieveFrame(0, data, step, width, height, cn); -} - -CvVideoWriter_FFMPEG* cvCreateVideoWriter_FFMPEG( const char* filename, int fourcc, double fps, - int width, int height, int isColor ) -{ - CvVideoWriter_FFMPEG* writer = (CvVideoWriter_FFMPEG*)malloc(sizeof(*writer)); - writer->init(); - if( writer->open( filename, fourcc, fps, width, height, isColor != 0 )) - return writer; - writer->close(); - free(writer); - return 0; -} - -void cvReleaseVideoWriter_FFMPEG( CvVideoWriter_FFMPEG** writer ) -{ - if( writer && *writer ) - { - (*writer)->close(); - free(*writer); - *writer = 0; - } -} - - -int cvWriteFrame_FFMPEG( CvVideoWriter_FFMPEG* writer, - const unsigned char* data, int step, - int width, int height, int cn, int origin) -{ - return writer->writeFrame(data, step, width, height, cn, origin); -} - - - -/* - * For CUDA encoder - */ - -struct OutputMediaStream_FFMPEG -{ - bool open(const char* fileName, int width, int height, double fps); - void close(); - - void write(unsigned char* data, int size, int keyFrame); - - // add a video output stream to the container - static AVStream* addVideoStream(AVFormatContext *oc, CV_CODEC_ID codec_id, int w, int h, int bitrate, double fps, PixelFormat pixel_format); - - AVOutputFormat* fmt_; - AVFormatContext* oc_; - AVStream* video_st_; -}; - -void OutputMediaStream_FFMPEG::close() -{ - // no more frame to compress. The codec has a latency of a few - // frames if using B frames, so we get the last frames by - // passing the same picture again - - // TODO -- do we need to account for latency here? - - if (oc_) - { - // write the trailer, if any - av_write_trailer(oc_); - - // free the streams - for (unsigned int i = 0; i < oc_->nb_streams; ++i) - { - av_freep(&oc_->streams[i]->codec); - av_freep(&oc_->streams[i]); - } - - if (!(fmt_->flags & AVFMT_NOFILE) && oc_->pb) - { - // close the output file - - #if LIBAVCODEC_VERSION_INT < ((52<<16)+(123<<8)+0) - #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(49<<8)+0) - url_fclose(oc_->pb); - #else - url_fclose(&oc_->pb); - #endif - #else - avio_close(oc_->pb); - #endif - } - - // free the stream - av_free(oc_); - } -} - -AVStream* OutputMediaStream_FFMPEG::addVideoStream(AVFormatContext *oc, CV_CODEC_ID codec_id, int w, int h, int bitrate, double fps, PixelFormat pixel_format) -{ - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 10, 0) - AVStream* st = avformat_new_stream(oc, 0); - #else - AVStream* st = av_new_stream(oc, 0); - #endif - if (!st) - return 0; - - #if LIBAVFORMAT_BUILD > 4628 - AVCodecContext* c = st->codec; - #else - AVCodecContext* c = &(st->codec); - #endif - - c->codec_id = codec_id; - c->codec_type = AVMEDIA_TYPE_VIDEO; - - // put sample parameters - unsigned long long lbit_rate = static_cast(bitrate); - lbit_rate += (bitrate / 4); - lbit_rate = std::min(lbit_rate, static_cast(std::numeric_limits::max())); - c->bit_rate = bitrate; - - // took advice from - // http://ffmpeg-users.933282.n4.nabble.com/warning-clipping-1-dct-coefficients-to-127-127-td934297.html - c->qmin = 3; - - // resolution must be a multiple of two - c->width = w; - c->height = h; - - AVCodec* codec = avcodec_find_encoder(c->codec_id); - - // time base: this is the fundamental unit of time (in seconds) in terms - // of which frame timestamps are represented. for fixed-fps content, - // timebase should be 1/framerate and timestamp increments should be - // identically 1 - - int frame_rate = static_cast(fps+0.5); - int frame_rate_base = 1; - while (fabs(static_cast(frame_rate)/frame_rate_base) - fps > 0.001) - { - frame_rate_base *= 10; - frame_rate = static_cast(fps*frame_rate_base + 0.5); - } - c->time_base.den = frame_rate; - c->time_base.num = frame_rate_base; - - #if LIBAVFORMAT_BUILD > 4752 - // adjust time base for supported framerates - if (codec && codec->supported_framerates) - { - AVRational req = {frame_rate, frame_rate_base}; - const AVRational* best = NULL; - AVRational best_error = {INT_MAX, 1}; - - for (const AVRational* p = codec->supported_framerates; p->den!=0; ++p) - { - AVRational error = av_sub_q(req, *p); - - if (error.num < 0) - error.num *= -1; - - if (av_cmp_q(error, best_error) < 0) - { - best_error= error; - best= p; - } - } - - c->time_base.den= best->num; - c->time_base.num= best->den; - } - #endif - - c->gop_size = 12; // emit one intra frame every twelve frames at most - c->pix_fmt = pixel_format; - - if (c->codec_id == CV_CODEC(CODEC_ID_MPEG2VIDEO)) - c->max_b_frames = 2; - - if (c->codec_id == CV_CODEC(CODEC_ID_MPEG1VIDEO) || c->codec_id == CV_CODEC(CODEC_ID_MSMPEG4V3)) - { - // needed to avoid using macroblocks in which some coeffs overflow - // this doesnt happen with normal video, it just happens here as the - // motion of the chroma plane doesnt match the luma plane - - // avoid FFMPEG warning 'clipping 1 dct coefficients...' - - c->mb_decision = 2; - } - - #if LIBAVCODEC_VERSION_INT > 0x000409 - // some formats want stream headers to be seperate - if (oc->oformat->flags & AVFMT_GLOBALHEADER) - { - c->flags |= CODEC_FLAG_GLOBAL_HEADER; - } - #endif - - return st; -} - -bool OutputMediaStream_FFMPEG::open(const char* fileName, int width, int height, double fps) -{ - fmt_ = 0; - oc_ = 0; - video_st_ = 0; - - // auto detect the output format from the name and fourcc code - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - fmt_ = av_guess_format(NULL, fileName, NULL); - #else - fmt_ = guess_format(NULL, fileName, NULL); - #endif - if (!fmt_) - return false; - - CV_CODEC_ID codec_id = CV_CODEC(CODEC_ID_H264); - - // alloc memory for context - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 2, 0) - oc_ = avformat_alloc_context(); - #else - oc_ = av_alloc_format_context(); - #endif - if (!oc_) - return false; - - // set some options - oc_->oformat = fmt_; - snprintf(oc_->filename, sizeof(oc_->filename), "%s", fileName); - - oc_->max_delay = (int)(0.7 * AV_TIME_BASE); // This reduces buffer underrun warnings with MPEG - - // set a few optimal pixel formats for lossless codecs of interest.. - PixelFormat codec_pix_fmt = PIX_FMT_YUV420P; - int bitrate_scale = 64; - - // TODO -- safe to ignore output audio stream? - video_st_ = addVideoStream(oc_, codec_id, width, height, width * height * bitrate_scale, fps, codec_pix_fmt); - if (!video_st_) - return false; - - // set the output parameters (must be done even if no parameters) - #if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) - if (av_set_parameters(oc_, NULL) < 0) - return false; - #endif - - // now that all the parameters are set, we can open the audio and - // video codecs and allocate the necessary encode buffers - - #if LIBAVFORMAT_BUILD > 4628 - AVCodecContext* c = (video_st_->codec); - #else - AVCodecContext* c = &(video_st_->codec); - #endif - - c->codec_tag = MKTAG('H', '2', '6', '4'); - c->bit_rate_tolerance = c->bit_rate; - - // open the output file, if needed - if (!(fmt_->flags & AVFMT_NOFILE)) - { - #if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) - int err = url_fopen(&oc_->pb, fileName, URL_WRONLY); - #else - int err = avio_open(&oc_->pb, fileName, AVIO_FLAG_WRITE); - #endif - - if (err != 0) - return false; - } - - // write the stream header, if any - #if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 2, 0) - av_write_header(oc_); - #else - avformat_write_header(oc_, NULL); - #endif - - return true; -} - -void OutputMediaStream_FFMPEG::write(unsigned char* data, int size, int keyFrame) -{ - // if zero size, it means the image was buffered - if (size > 0) - { - AVPacket pkt; - av_init_packet(&pkt); - - if (keyFrame) - pkt.flags |= PKT_FLAG_KEY; - - pkt.stream_index = video_st_->index; - pkt.data = data; - pkt.size = size; - - // write the compressed frame in the media file - av_write_frame(oc_, &pkt); - } -} - -struct OutputMediaStream_FFMPEG* create_OutputMediaStream_FFMPEG(const char* fileName, int width, int height, double fps) -{ - OutputMediaStream_FFMPEG* stream = (OutputMediaStream_FFMPEG*) malloc(sizeof(OutputMediaStream_FFMPEG)); - - if (stream->open(fileName, width, height, fps)) - return stream; - - stream->close(); - free(stream); - - return 0; -} - -void release_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream) -{ - stream->close(); - free(stream); -} - -void write_OutputMediaStream_FFMPEG(struct OutputMediaStream_FFMPEG* stream, unsigned char* data, int size, int keyFrame) -{ - stream->write(data, size, keyFrame); -} - -/* - * For CUDA decoder - */ - -enum -{ - VideoCodec_MPEG1 = 0, - VideoCodec_MPEG2, - VideoCodec_MPEG4, - VideoCodec_VC1, - VideoCodec_H264, - VideoCodec_JPEG, - VideoCodec_H264_SVC, - VideoCodec_H264_MVC, - - // Uncompressed YUV - VideoCodec_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), // Y,U,V (4:2:0) - VideoCodec_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,V,U (4:2:0) - VideoCodec_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,UV (4:2:0) - VideoCodec_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), // YUYV/YUY2 (4:2:2) - VideoCodec_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) // UYVY (4:2:2) -}; - -enum -{ - VideoChromaFormat_Monochrome = 0, - VideoChromaFormat_YUV420, - VideoChromaFormat_YUV422, - VideoChromaFormat_YUV444 -}; - -struct InputMediaStream_FFMPEG -{ -public: - bool open(const char* fileName, int* codec, int* chroma_format, int* width, int* height); - void close(); - - bool read(unsigned char** data, int* size, int* endOfFile); - -private: - InputMediaStream_FFMPEG(const InputMediaStream_FFMPEG&); - InputMediaStream_FFMPEG& operator =(const InputMediaStream_FFMPEG&); - - AVFormatContext* ctx_; - int video_stream_id_; - AVPacket pkt_; -}; - -bool InputMediaStream_FFMPEG::open(const char* fileName, int* codec, int* chroma_format, int* width, int* height) -{ - int err; - - ctx_ = 0; - video_stream_id_ = -1; - memset(&pkt_, 0, sizeof(AVPacket)); - - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 13, 0) - avformat_network_init(); - #endif - - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 6, 0) - err = avformat_open_input(&ctx_, fileName, 0, 0); - #else - err = av_open_input_file(&ctx_, fileName, 0, 0, 0); - #endif - if (err < 0) - return false; - - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 6, 0) - err = avformat_find_stream_info(ctx_, 0); - #else - err = av_find_stream_info(ctx_); - #endif - if (err < 0) - return false; - - for (unsigned int i = 0; i < ctx_->nb_streams; ++i) - { - #if LIBAVFORMAT_BUILD > 4628 - AVCodecContext *enc = ctx_->streams[i]->codec; - #else - AVCodecContext *enc = &ctx_->streams[i]->codec; - #endif - - if (enc->codec_type == AVMEDIA_TYPE_VIDEO) - { - video_stream_id_ = static_cast(i); - - switch (enc->codec_id) - { - case CV_CODEC(CODEC_ID_MPEG1VIDEO): - *codec = ::VideoCodec_MPEG1; - break; - - case CV_CODEC(CODEC_ID_MPEG2VIDEO): - *codec = ::VideoCodec_MPEG2; - break; - - case CV_CODEC(CODEC_ID_MPEG4): - *codec = ::VideoCodec_MPEG4; - break; - - case CV_CODEC(CODEC_ID_VC1): - *codec = ::VideoCodec_VC1; - break; - - case CV_CODEC(CODEC_ID_H264): - *codec = ::VideoCodec_H264; - break; - - default: - return false; - }; - - switch (enc->pix_fmt) - { - case PIX_FMT_YUV420P: - *chroma_format = ::VideoChromaFormat_YUV420; - break; - - case PIX_FMT_YUV422P: - *chroma_format = ::VideoChromaFormat_YUV422; - break; - - case PIX_FMT_YUV444P: - *chroma_format = ::VideoChromaFormat_YUV444; - break; - - default: - return false; - } - - *width = enc->coded_width; - *height = enc->coded_height; - - break; - } - } - - if (video_stream_id_ < 0) - return false; - - av_init_packet(&pkt_); - - return true; -} - -void InputMediaStream_FFMPEG::close() -{ - if (ctx_) - { - #if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 24, 2) - avformat_close_input(&ctx_); - #else - av_close_input_file(ctx_); - #endif - } - - // free last packet if exist - if (pkt_.data) - av_free_packet(&pkt_); -} - -bool InputMediaStream_FFMPEG::read(unsigned char** data, int* size, int* endOfFile) -{ - // free last packet if exist - if (pkt_.data) - av_free_packet(&pkt_); - - // get the next frame - for (;;) - { - int ret = av_read_frame(ctx_, &pkt_); - - if (ret == AVERROR(EAGAIN)) - continue; - - if (ret < 0) - { - if (ret == (int)AVERROR_EOF) - *endOfFile = true; - return false; - } - - if (pkt_.stream_index != video_stream_id_) - { - av_free_packet(&pkt_); - continue; - } - - break; - } - - *data = pkt_.data; - *size = pkt_.size; - *endOfFile = false; - - return true; -} - -InputMediaStream_FFMPEG* create_InputMediaStream_FFMPEG(const char* fileName, int* codec, int* chroma_format, int* width, int* height) -{ - InputMediaStream_FFMPEG* stream = (InputMediaStream_FFMPEG*) malloc(sizeof(InputMediaStream_FFMPEG)); - - if (stream && stream->open(fileName, codec, chroma_format, width, height)) - return stream; - - stream->close(); - free(stream); - - return 0; -} - -void release_InputMediaStream_FFMPEG(InputMediaStream_FFMPEG* stream) -{ - stream->close(); - free(stream); -} - -int read_InputMediaStream_FFMPEG(InputMediaStream_FFMPEG* stream, unsigned char** data, int* size, int* endOfFile) -{ - return stream->read(data, size, endOfFile); -} diff --git a/modules/highgui/src/cap_giganetix.cpp b/modules/highgui/src/cap_giganetix.cpp deleted file mode 100644 index ccbe702..0000000 --- a/modules/highgui/src/cap_giganetix.cpp +++ /dev/null @@ -1,763 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -// - -// -// The code has been contributed by Vladimir N. Litvinenko on 2012 Jul -// mailto:vladimir.litvinenko@codepaint.ru -// - -#include "precomp.hpp" -#include -#include - -#ifdef WIN32 -#include -#else -#include -#endif - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -#define QTGIG_HEARTBEAT_TIME (12000.0) -#define QTGIG_MAX_WAIT_TIME (2.0) -#define QTGIG_IMG_WAIT_TIME (3.0) - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn bool wrprInitGigEVisionAPI(); - \brief Wrapper to GigEVisionAPI function gige::InitGigEVisionAPI () - \return true -- success - See \a wrprExitGigEVisionAPI - -*/ -bool -wrprInitGigEVisionAPI() -{ - CV_FUNCNAME("wrprInitGigEVisionAPI"); - __BEGIN__; - - try { - gige::InitGigEVisionAPI (); - } catch(...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: initialization (InitGigEVisionAPI()) failed.\n"); - } - __END__; - return true; -} - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn void wrprExitGigEVisionAPI() - \brief Wrapper to GigEVisionAPI function gige::ExitGigEVisionAPI () - \return true -- success - See \a wrprInitGigEVisionAPI - -*/ -bool -wrprExitGigEVisionAPI() -{ - CV_FUNCNAME("wrprExitGigEVisionAPI"); - __BEGIN__; - - try { - gige::ExitGigEVisionAPI (); - } catch(...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: finalization (ExitGigEVisionAPI()) failed.\n"); - return false; - } - __END__; - return true; -} - - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn gige::IGigEVisionAPI wrprGetGigEVisionAPI() - \brief Wrapper to GigEVisionAPI function gige::GetGigEVisionAPI () - \return item of gige::IGigEVisionAPI type - See \a wrprInitGigEVisionAPI, \a gige::IGigEVisionAPI -*/ -gige::IGigEVisionAPI -wrprGetGigEVisionAPI() -{ - - gige::IGigEVisionAPI b_ret = 0; - - CV_FUNCNAME("wrprGetGigEVisionAPI"); - __BEGIN__; - - try { - b_ret = gige::GetGigEVisionAPI (); - } catch(...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: API instance (from GetGigEVisionAPI()) failed.\n"); - } - - __END__; - - return b_ret; -} - - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn bool wrprUnregisterCallback( const gige::IGigEVisionAPI* api, gige::ICallbackEvent* eventHandler) - \brief Wrapper to GigEVisionAPI function - \param api - \param eventHandler - \return true - succsess, else - false - See \a wrprInitGigEVisionAPI, \a gige::IGigEVisionAPI - -*/ -bool -wrprUnregisterCallback( const gige::IGigEVisionAPI* api, gige::ICallbackEvent* eventHandler) -{ - bool b_ret = api != NULL; - - if(b_ret) b_ret = api->IsValid (); - - CV_FUNCNAME("wrprUnregisterCallback"); - __BEGIN__; - - if(b_ret) - { - if(eventHandler != NULL) - { - try { - b_ret = ((gige::IGigEVisionAPIInterface*)api)->UnregisterCallback (eventHandler); - } catch(...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: API unregister callback function (from UnregisterCallback()) failed.\n"); - b_ret = false; - } - } - } - __END__; - - return (b_ret); -} - - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn bool wrprDeviceIsConnect( gige::IDevice& device ) - \brief Wrapper to GigEVisionAPI function IDevice::IsConnected() - \param device - selected device - \return true - device connected -*/ -bool -wrprDeviceIsConnect( gige::IDevice& device ) -{ - bool b_ret = device != NULL; - - CV_FUNCNAME("wrprDeviceIsConnect"); - __BEGIN__; - - if(b_ret) - { - try { - b_ret = device->IsConnected (); - } catch (...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: API device connection state (from IsConnected()) failed.\n"); - b_ret = false; - } - } - __END__; - - return (b_ret); -} - - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn bool wrprDeviceIsValid( gige::IDevice& device ) - \brief Wrapper to GigEVisionAPI function IDevice::Connect() - \param device - selected device - \return true - device valid - -*/ -bool -wrprDeviceIsValid( gige::IDevice& device ) -{ - bool b_ret = device != NULL; - - CV_FUNCNAME("wrprDeviceIsConnect"); - __BEGIN__; - - if(b_ret) - { - try { - b_ret = device.IsValid (); - } catch (...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: API device validation state (from IsValid()) failed.\n"); - b_ret = false; - } - } - __END__; - - return (b_ret); -} - - -/*----------------------------------------------------------------------------*/ -/** - \internal - \fn bool wrprDeviceDisconnect ( gige::IDevice& device ) - \brief Wrapper to GigEVisionAPI function IDevice::Disconnect() - \param device - selected device - \return true - device valid - -*/ -bool -wrprDeviceDisconnect ( gige::IDevice& device ) -{ - bool b_ret = device != NULL; - - CV_FUNCNAME("wrprDeviceDisconnect"); - __BEGIN__; - - if(b_ret) - { - try { - device->Disconnect (); - } catch (...) { - CV_ERROR(CV_StsError, "GigEVisionAPI: API device disconnect (from Disconnect()) failed.\n"); - b_ret = false; - } - } - - __END__; - - return (b_ret); -} - - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/** - \internal - \class CvCaptureCAM_Giganetix - \brief Capturing video from camera via Smartec Giganetix (use GigEVisualSDK library). -*/ - -class CvCaptureCAM_Giganetix : public CvCapture -{ - public: - CvCaptureCAM_Giganetix(); - virtual ~CvCaptureCAM_Giganetix(); - - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() - { - return CV_CAP_GIGANETIX; - } - - bool start (); - bool stop (); - - protected: - - void init (); - void grabImage (); - - gige::IGigEVisionAPI m_api; - bool m_api_on; - gige::IDevice m_device; - bool m_active; - - IplImage* m_raw_image; - UINT32 m_rawImagePixelType; - bool m_monocrome; - -}; -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -void -CvCaptureCAM_Giganetix::init () -{ - m_monocrome = m_active = m_api_on = false; - m_api = 0; - m_device = 0; - m_raw_image = 0; - m_rawImagePixelType = 0; -} - -/*----------------------------------------------------------------------------*/ -CvCaptureCAM_Giganetix::CvCaptureCAM_Giganetix() -{ - init (); - - m_api_on = wrprInitGigEVisionAPI (); - - if(m_api_on) - { - if((m_api = wrprGetGigEVisionAPI ()) != NULL) - { - m_api->SetHeartbeatTime (QTGIG_HEARTBEAT_TIME); - } - } -} - -/*----------------------------------------------------------------------------*/ -CvCaptureCAM_Giganetix::~CvCaptureCAM_Giganetix() -{ - close(); -} -/*----------------------------------------------------------------------------*/ -void -CvCaptureCAM_Giganetix::close() -{ - stop (); - - (void)wrprDeviceDisconnect(m_device); - - (void)wrprExitGigEVisionAPI (); - - if(m_raw_image) cvReleaseImageHeader(&m_raw_image); - - init (); -} - -/*----------------------------------------------------------------------------*/ -bool -CvCaptureCAM_Giganetix::open( int index ) -{ - bool b_ret = m_api_on; - - CV_FUNCNAME("CvCaptureCAM_Giganetix::open"); - __BEGIN__; - - if(b_ret) - b_ret = m_api.IsValid (); - - if(b_ret ) - { - m_api->FindAllDevices (QTGIG_MAX_WAIT_TIME); - - //TODO - serch device as DevicesList member - gige::DevicesList DevicesList = m_api->GetAllDevices (); - - m_device = 0; - b_ret = false; - - for (int i = 0; i < (int) DevicesList.size() && !b_ret; i++) - { - if((b_ret = i == index)) - { - m_device = DevicesList[i]; - b_ret = m_device->Connect (); - - if(b_ret) - { - b_ret = - m_device->SetStringNodeValue("AcquisitionStatusSelector", "AcquisitionActive") - && - m_device->SetStringNodeValue ("TriggerMode", "Off") - && - m_device->SetStringNodeValue ("AcquisitionMode", "Continuous") - && - m_device->SetIntegerNodeValue ("AcquisitionFrameCount", 20) - ; - } - } - } // for - } - - if(!b_ret) - { - CV_ERROR(CV_StsError, "Giganetix: Error cannot find camera\n"); - close (); - } else { - start (); - } - - __END__; - - return b_ret; -} - -/*----------------------------------------------------------------------------*/ -void -CvCaptureCAM_Giganetix::grabImage () -{ - CV_FUNCNAME("CvCaptureCAM_Giganetix::grabImage"); - __BEGIN__; - - if(wrprDeviceIsValid(m_device) && wrprDeviceIsConnect(m_device)) - { - if(!m_device->IsBufferEmpty ()) - { - gige::IImageInfo imageInfo; - m_device->GetImageInfo (&imageInfo); - assert(imageInfo.IsValid()); - - if (m_device->GetPendingImagesCount() == 1) - { - UINT32 newPixelType; - UINT32 newWidth, newHeight; - - imageInfo->GetPixelType(newPixelType); - imageInfo->GetSize(newWidth, newHeight); - - //TODO - validation of image exists - bool b_validation = m_raw_image != NULL; - if(b_validation) - { - b_validation = - m_raw_image->imageSize == (int)(imageInfo->GetRawDataSize ()) - && - m_rawImagePixelType == newPixelType; - } else { - if(m_raw_image) cvReleaseImageHeader(&m_raw_image); - } - - m_rawImagePixelType = newPixelType; - m_monocrome = GvspGetBitsPerPixel((GVSP_PIXEL_TYPES)newPixelType) == IPL_DEPTH_8U; - - try { - if (m_monocrome) - { - //TODO - For Mono & Color BayerRGB raw pixel types - if (!b_validation) - { - m_raw_image = cvCreateImageHeader (cvSize((int)newWidth, (int)newHeight),IPL_DEPTH_8U,1); - m_raw_image->origin = IPL_ORIGIN_TL; - m_raw_image->dataOrder = IPL_DATA_ORDER_PIXEL; - m_raw_image->widthStep = newWidth; - } - // Copy image. - // ::memcpy(m_raw_image->imageData, imageInfo->GetRawData (), imageInfo->GetRawDataSize ()); - - //TODO - Set pointer to image ! - m_raw_image->imageData = (char*)(imageInfo->GetRawData ()); - } - - if (!m_monocrome && newPixelType == GVSP_PIX_RGB8_PACKED) - { - //TODO - 24 bit RGB color image. - if (!b_validation) - { - m_raw_image = cvCreateImageHeader (cvSize((int)newWidth, (int)newHeight), IPL_DEPTH_32F, 3); - m_raw_image->origin = IPL_ORIGIN_TL; - m_raw_image->dataOrder = IPL_DATA_ORDER_PIXEL; - m_raw_image->widthStep = newWidth * 3; - } - m_raw_image->imageData = (char*)(imageInfo->GetRawData ()); - } - } catch (...) { - CV_ERROR(CV_StsError, "Giganetix: failed to queue a buffer on device\n"); - close (); - } - } else { - //TODO - all other pixel types - m_raw_image = 0; - CV_WARN("Giganetix: Undefined image pixel type\n"); - } - m_device->PopImage (imageInfo); - m_device->ClearImageBuffer (); - } - } - - __END__; -} - -/*----------------------------------------------------------------------------*/ -bool -CvCaptureCAM_Giganetix::start () -{ - CV_FUNCNAME("CvCaptureCAM_Giganetix::start"); - __BEGIN__; - - m_active = wrprDeviceIsValid(m_device) && wrprDeviceIsConnect(m_device); - - if(m_active) - { - (void)m_device->SetIntegerNodeValue("TLParamsLocked", 1); - (void)m_device->CommandNodeExecute("AcquisitionStart"); - m_active = m_device->GetBooleanNodeValue("AcquisitionStatus", m_active); - } - - if(!m_active) - { - CV_ERROR(CV_StsError, "Giganetix: Cannot open camera\n"); - close (); - } - - __END__; - - return m_active; -} - -/*----------------------------------------------------------------------------*/ -bool -CvCaptureCAM_Giganetix::stop () -{ - if (!m_active) return true; - - CV_FUNCNAME("CvCaptureCAM_Giganetix::stop"); - __BEGIN__; - - if(wrprDeviceIsValid(m_device) && wrprDeviceIsConnect(m_device)) - { - (void)m_device->GetBooleanNodeValue("AcquisitionStatus", m_active); - - if(m_active) - { - (void)m_device->CommandNodeExecute("AcquisitionStop"); - (void)m_device->SetIntegerNodeValue("TLParamsLocked", 0); - m_device->ClearImageBuffer (); - (void)m_device->GetBooleanNodeValue("AcquisitionStatus", m_active); - } - } - - if(m_active) - { - CV_ERROR(CV_StsError, "Giganetix: Improper closure of the camera\n"); - close (); - } - __END__; - - return !m_active; -} - -/*----------------------------------------------------------------------------*/ -bool -CvCaptureCAM_Giganetix::grabFrame() -{ - bool b_ret = - wrprDeviceIsValid(m_device) - && - wrprDeviceIsConnect(m_device); - - if(b_ret) grabImage (); - - return b_ret; -} - - -/*----------------------------------------------------------------------------*/ -IplImage* -CvCaptureCAM_Giganetix::retrieveFrame(int) -{ - return ( - wrprDeviceIsValid(m_device) && wrprDeviceIsConnect(m_device) ? - m_raw_image : - NULL - ); -} - -/*----------------------------------------------------------------------------*/ -double -CvCaptureCAM_Giganetix::getProperty( int property_id ) -{ - double d_ret = -1.0; - INT64 i; - - if(wrprDeviceIsConnect(m_device)) - { - switch ( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - m_device->GetIntegerNodeValue ("Width", i); - d_ret = i; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - m_device->GetIntegerNodeValue ("Height", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_OFFSET_X: - m_device->GetIntegerNodeValue ("OffsetX", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_OFFSET_Y: - m_device->GetIntegerNodeValue ("OffsetY", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX: - m_device->GetIntegerNodeValue ("WidthMax", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX: - m_device->GetIntegerNodeValue ("HeightMax", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH: - m_device->GetIntegerNodeValue ("SensorWidth", i); - d_ret = i; - break; - case CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH: - m_device->GetIntegerNodeValue ("SensorHeight", i); - d_ret = i; - break; - case CV_CAP_PROP_FRAME_COUNT: - m_device->GetIntegerNodeValue ("AcquisitionFrameCount", i); - d_ret = i; - break; - case CV_CAP_PROP_EXPOSURE: - m_device->GetFloatNodeValue ("ExposureTime",d_ret); - break; - case CV_CAP_PROP_GAIN : - m_device->GetFloatNodeValue ("Gain",d_ret); - break; - case CV_CAP_PROP_TRIGGER : - bool b; - m_device->GetBooleanNodeValue ("TriggerMode",b); - d_ret = (double)b; - break; - case CV_CAP_PROP_TRIGGER_DELAY : - m_device->GetFloatNodeValue ("TriggerDelay",d_ret); - break; - default : ; - } - } - - return d_ret; -} - -/*----------------------------------------------------------------------------*/ -bool -CvCaptureCAM_Giganetix::setProperty( int property_id, double value ) -{ - bool b_ret = wrprDeviceIsConnect(m_device); - - if(b_ret) - { - bool b_val = m_active; - - switch ( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - stop (); - b_ret = m_device->SetIntegerNodeValue ("Width", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX: - stop (); - b_ret = m_device->SetIntegerNodeValue ("WidthMax", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH: - stop (); - b_ret = m_device->SetIntegerNodeValue ("SensorWidth", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_FRAME_HEIGHT: - stop (); - b_ret = m_device->SetIntegerNodeValue ("Height", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX: - stop (); - b_ret = m_device->SetIntegerNodeValue ("HeightMax", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH: - stop (); - b_ret = m_device->SetIntegerNodeValue ("SensorHeight", (INT64)value); - if(b_val) start (); - break; - case CV_CAP_PROP_GIGA_FRAME_OFFSET_X: { - INT64 w, wmax, val = (INT64)value; - if((b_ret = m_device->GetIntegerNodeValue ("Width", w))) - if((b_ret = m_device->GetIntegerNodeValue ("WidthMax", wmax))) - b_ret = m_device->SetIntegerNodeValue ("OffsetX", val w > wmax ? wmax - w : val); - } break; - case CV_CAP_PROP_GIGA_FRAME_OFFSET_Y: { - INT64 h, hmax, val = (INT64)value; - if((b_ret = m_device->GetIntegerNodeValue ("Height", h))) - if((b_ret = m_device->GetIntegerNodeValue ("HeightMax", hmax))) - b_ret = m_device->SetIntegerNodeValue ("OffsetY", val h > hmax ? hmax - h : val); - b_ret = m_device->SetIntegerNodeValue ("OffsetY", (INT64)value); - } - break; - case CV_CAP_PROP_EXPOSURE: - b_ret = m_device->SetFloatNodeValue ("ExposureTime",value); - break; - case CV_CAP_PROP_GAIN : - b_ret = m_device->SetFloatNodeValue ("Gain",value); - break; - case CV_CAP_PROP_TRIGGER : - b_ret = m_device->SetBooleanNodeValue ("TriggerMode",(bool)value); - break; - case CV_CAP_PROP_TRIGGER_DELAY : - stop (); - b_ret = m_device->SetFloatNodeValue ("TriggerDelay",value); - if(b_val) start (); - break; - default: - b_ret = false; - } - } - - return b_ret; -} - - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -CvCapture* -cvCreateCameraCapture_Giganetix( int index ) -{ - CvCaptureCAM_Giganetix* capture = new CvCaptureCAM_Giganetix; - - if (!(capture->open( index ))) - { - delete capture; - capture = NULL; - } - - return ((CvCapture*)capture); -} - -/*----------------------------------------------------------------------------*/ diff --git a/modules/highgui/src/cap_gstreamer.cpp b/modules/highgui/src/cap_gstreamer.cpp deleted file mode 100644 index cafc803..0000000 --- a/modules/highgui/src/cap_gstreamer.cpp +++ /dev/null @@ -1,777 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, 2011, Nils Hasler, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// Author: Nils Hasler -// -// Max-Planck-Institut Informatik -// -// this implementation was inspired by gnash's gstreamer interface - -// -// use GStreamer to read a video -// - -#include "precomp.hpp" -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -static cv::Mutex gst_initializer_mutex; - -class gst_initializer -{ -public: - static void init() - { - gst_initializer_mutex.lock(); - static gst_initializer init; - gst_initializer_mutex.unlock(); - } -private: - gst_initializer() - { - gst_init(NULL, NULL); - } -}; - -class CvCapture_GStreamer : public CvCapture -{ -public: - CvCapture_GStreamer() { init(); } - virtual ~CvCapture_GStreamer() { close(); } - - virtual bool open( int type, const char* filename ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - -protected: - void init(); - bool reopen(); - void handleMessage(); - void restartPipeline(); - void setFilter(const char*, int, int, int); - void removeFilter(const char *filter); - void static newPad(GstElement *myelement, - GstPad *pad, - gpointer data); - GstElement *pipeline; - GstElement *uridecodebin; - GstElement *color; - GstElement *sink; - - GstBuffer *buffer; - GstCaps *caps; - IplImage *frame; -}; - -void CvCapture_GStreamer::init() -{ - pipeline=0; - frame=0; - buffer=0; - frame=0; - -} - -void CvCapture_GStreamer::handleMessage() -{ - GstBus* bus = gst_element_get_bus(pipeline); - - while(gst_bus_have_pending(bus)) { - GstMessage* msg = gst_bus_pop(bus); - -// printf("Got %s message\n", GST_MESSAGE_TYPE_NAME(msg)); - - switch (GST_MESSAGE_TYPE (msg)) { - case GST_MESSAGE_STATE_CHANGED: - GstState oldstate, newstate, pendstate; - gst_message_parse_state_changed(msg, &oldstate, &newstate, &pendstate); -// printf("state changed from %d to %d (%d)\n", oldstate, newstate, pendstate); - break; - case GST_MESSAGE_ERROR: { - GError *err; - gchar *debug; - gst_message_parse_error(msg, &err, &debug); - - fprintf(stderr, "GStreamer Plugin: Embedded video playback halted; module %s reported: %s\n", - gst_element_get_name(GST_MESSAGE_SRC (msg)), err->message); - - g_error_free(err); - g_free(debug); - - gst_element_set_state(pipeline, GST_STATE_NULL); - - break; - } - case GST_MESSAGE_EOS: -// CV_WARN("NetStream has reached the end of the stream."); - - break; - default: -// CV_WARN("unhandled message\n"); - break; - } - - gst_message_unref(msg); - } - - gst_object_unref(GST_OBJECT(bus)); -} - -// -// start the pipeline, grab a buffer, and pause again -// -bool CvCapture_GStreamer::grabFrame() -{ - - if(!pipeline) - return false; - - if(gst_app_sink_is_eos(GST_APP_SINK(sink))) - return false; - - if(buffer) - gst_buffer_unref(buffer); - handleMessage(); - - buffer = gst_app_sink_pull_buffer(GST_APP_SINK(sink)); - if(!buffer) - return false; - - return true; -} - -// -// decode buffer -// -IplImage * CvCapture_GStreamer::retrieveFrame(int) -{ - if(!buffer) - return 0; - - if(!frame) { - gint height, width; - GstCaps *buff_caps = gst_buffer_get_caps(buffer); - assert(gst_caps_get_size(buff_caps) == 1); - GstStructure* structure = gst_caps_get_structure(buff_caps, 0); - - if(!gst_structure_get_int(structure, "width", &width) || - !gst_structure_get_int(structure, "height", &height)) - return 0; - - frame = cvCreateImageHeader(cvSize(width, height), IPL_DEPTH_8U, 3); - gst_caps_unref(buff_caps); - } - - // no need to memcpy, just use gstreamer's buffer :-) - frame->imageData = (char *)GST_BUFFER_DATA(buffer); - //memcpy (frame->imageData, GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE (buffer)); - //gst_buffer_unref(buffer); - //buffer = 0; - return frame; -} - -void CvCapture_GStreamer::restartPipeline() -{ - CV_FUNCNAME("icvRestartPipeline"); - - __BEGIN__; - - printf("restarting pipeline, going to ready\n"); - - if(gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_READY) == - GST_STATE_CHANGE_FAILURE) { - CV_ERROR(CV_StsError, "GStreamer: unable to start pipeline\n"); - return; - } - - printf("ready, relinking\n"); - - gst_element_unlink(uridecodebin, color); - printf("filtering with %s\n", gst_caps_to_string(caps)); - gst_element_link_filtered(uridecodebin, color, caps); - - printf("relinked, pausing\n"); - - if(gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING) == - GST_STATE_CHANGE_FAILURE) { - CV_ERROR(CV_StsError, "GStreamer: unable to start pipeline\n"); - return; - } - - printf("state now paused\n"); - - __END__; -} - -void CvCapture_GStreamer::setFilter(const char *property, int type, int v1, int v2) -{ - - if(!caps) { - if(type == G_TYPE_INT) - caps = gst_caps_new_simple("video/x-raw-rgb", property, type, v1, NULL); - else - caps = gst_caps_new_simple("video/x-raw-rgb", property, type, v1, v2, NULL); - } else { - //printf("caps before setting %s\n", gst_caps_to_string(caps)); - if(type == G_TYPE_INT) - gst_caps_set_simple(caps, "video/x-raw-rgb", property, type, v1, NULL); - else - gst_caps_set_simple(caps, "video/x-raw-rgb", property, type, v1, v2, NULL); - } - - restartPipeline(); -} - -void CvCapture_GStreamer::removeFilter(const char *filter) -{ - if(!caps) - return; - - GstStructure *s = gst_caps_get_structure(caps, 0); - gst_structure_remove_field(s, filter); - - restartPipeline(); -} - - -// -// connect uridecodebin dynamically created source pads to colourconverter -// -void CvCapture_GStreamer::newPad(GstElement * /*uridecodebin*/, - GstPad *pad, - gpointer data) -{ - GstPad *sinkpad; - GstElement *color = (GstElement *) data; - - - sinkpad = gst_element_get_static_pad (color, "sink"); - -// printf("linking dynamic pad to colourconverter %p %p\n", uridecodebin, pad); - - gst_pad_link (pad, sinkpad); - - gst_object_unref (sinkpad); -} - -bool CvCapture_GStreamer::open( int type, const char* filename ) -{ - close(); - CV_FUNCNAME("cvCaptureFromCAM_GStreamer"); - - __BEGIN__; - - gst_initializer::init(); - -// if(!isInited) { -// printf("gst_init\n"); -// gst_init (NULL, NULL); - -// gst_debug_set_active(TRUE); -// gst_debug_set_colored(TRUE); -// gst_debug_set_default_threshold(GST_LEVEL_WARNING); - -// isInited = true; -// } - bool stream = false; - bool manualpipeline = false; - char *uri = NULL; - uridecodebin = NULL; - if(type != CV_CAP_GSTREAMER_FILE) { - close(); - return false; - } - - if(!gst_uri_is_valid(filename)) { - uri = realpath(filename, NULL); - stream=false; - if(uri) { - uri = g_filename_to_uri(uri, NULL, NULL); - if(!uri) { - CV_WARN("GStreamer: Error opening file\n"); - close(); - return false; - } - } else { - GError *err = NULL; - //uridecodebin = gst_parse_bin_from_description(filename, FALSE, &err); - uridecodebin = gst_parse_launch(filename, &err); - if(!uridecodebin) { - CV_WARN("GStreamer: Error opening bin\n"); - close(); - return false; - } - stream = true; - manualpipeline = true; - } - } else { - stream = true; - uri = g_strdup(filename); - } - - if(!uridecodebin) { - uridecodebin = gst_element_factory_make ("uridecodebin", NULL); - g_object_set(G_OBJECT(uridecodebin),"uri",uri, NULL); - if(!uridecodebin) { - CV_WARN("GStreamer: Failed to create uridecodebin\n"); - close(); - return false; - } - } - - if(manualpipeline) { - GstIterator *it = gst_bin_iterate_sinks(GST_BIN(uridecodebin)); - if(gst_iterator_next(it, (gpointer *)&sink) != GST_ITERATOR_OK) { - CV_ERROR(CV_StsError, "GStreamer: cannot find appsink in manual pipeline\n"); - return false; - } - - pipeline = uridecodebin; - } else { - pipeline = gst_pipeline_new (NULL); - - color = gst_element_factory_make("ffmpegcolorspace", NULL); - sink = gst_element_factory_make("appsink", NULL); - - gst_bin_add_many(GST_BIN(pipeline), uridecodebin, color, sink, NULL); - g_signal_connect(uridecodebin, "pad-added", G_CALLBACK(newPad), color); - - if(!gst_element_link(color, sink)) { - CV_ERROR(CV_StsError, "GStreamer: cannot link color -> sink\n"); - gst_object_unref(pipeline); - return false; - } - } - - gst_app_sink_set_max_buffers (GST_APP_SINK(sink), 1); - gst_app_sink_set_drop (GST_APP_SINK(sink), stream); - caps = gst_caps_new_simple("video/x-raw-rgb", - "red_mask", G_TYPE_INT, 0x0000FF, - "green_mask", G_TYPE_INT, 0x00FF00, - "blue_mask", G_TYPE_INT, 0xFF0000, - NULL); - gst_app_sink_set_caps(GST_APP_SINK(sink), caps); - gst_caps_unref(caps); - - if(gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_READY) == - GST_STATE_CHANGE_FAILURE) { - CV_WARN("GStreamer: unable to set pipeline to ready\n"); - gst_object_unref(pipeline); - return false; - } - - if(gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING) == - GST_STATE_CHANGE_FAILURE) { - gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); - CV_WARN("GStreamer: unable to set pipeline to playing\n"); - gst_object_unref(pipeline); - return false; - } - - - - handleMessage(); - - __END__; - - return true; -} - -// -// -// gstreamer image sequence writer -// -// -class CvVideoWriter_GStreamer : public CvVideoWriter -{ -public: - CvVideoWriter_GStreamer() { init(); } - virtual ~CvVideoWriter_GStreamer() { close(); } - - virtual bool open( const char* filename, int fourcc, - double fps, CvSize frameSize, bool isColor ); - virtual void close(); - virtual bool writeFrame( const IplImage* image ); -protected: - void init(); - std::map encs; - GstElement* source; - GstElement* file; - GstElement* enc; - GstElement* mux; - GstElement* color; - GstBuffer* buffer; - GstElement* pipeline; - int input_pix_fmt; -}; - -void CvVideoWriter_GStreamer::init() -{ - encs[CV_FOURCC('D','R','A','C')]=(char*)"diracenc"; - encs[CV_FOURCC('H','F','Y','U')]=(char*)"ffenc_huffyuv"; - encs[CV_FOURCC('J','P','E','G')]=(char*)"jpegenc"; - encs[CV_FOURCC('M','J','P','G')]=(char*)"jpegenc"; - encs[CV_FOURCC('M','P','1','V')]=(char*)"mpeg2enc"; - encs[CV_FOURCC('M','P','2','V')]=(char*)"mpeg2enc"; - encs[CV_FOURCC('T','H','E','O')]=(char*)"theoraenc"; - encs[CV_FOURCC('V','P','8','0')]=(char*)"vp8enc"; - encs[CV_FOURCC('H','2','6','4')]=(char*)"x264enc"; - encs[CV_FOURCC('X','2','6','4')]=(char*)"x264enc"; - encs[CV_FOURCC('X','V','I','D')]=(char*)"xvidenc"; - encs[CV_FOURCC('F','F','Y','U')]=(char*)"y4menc"; - //encs[CV_FOURCC('H','F','Y','U')]=(char*)"y4menc"; - pipeline=0; - buffer=0; -} -void CvVideoWriter_GStreamer::close() -{ - if (pipeline) { - gst_app_src_end_of_stream(GST_APP_SRC(source)); - gst_element_set_state (pipeline, GST_STATE_NULL); - gst_object_unref (GST_OBJECT (pipeline)); - } -} -bool CvVideoWriter_GStreamer::open( const char * filename, int fourcc, - double fps, CvSize frameSize, bool is_color ) -{ - CV_FUNCNAME("CvVideoWriter_GStreamer::open"); - - __BEGIN__; - //actually doesn't support fourcc parameter and encode an avi with jpegenc - //we need to find a common api between backend to support fourcc for avi - //but also to choose in a common way codec and container format (ogg,dirac,matroska) - // check arguments - - assert (filename); - assert (fps > 0); - assert (frameSize.width > 0 && frameSize.height > 0); - std::map::iterator encit; - encit=encs.find(fourcc); - if (encit==encs.end()) - CV_ERROR( CV_StsUnsupportedFormat,"Gstreamer Opencv backend doesn't support this codec acutally."); -// if(!isInited) { -// gst_init (NULL, NULL); -// isInited = true; -// } - gst_initializer::init(); - close(); - source=gst_element_factory_make("appsrc",NULL); - file=gst_element_factory_make("filesink", NULL); - enc=gst_element_factory_make(encit->second, NULL); - mux=gst_element_factory_make("avimux", NULL); - color = gst_element_factory_make("ffmpegcolorspace", NULL); - if (!enc) - CV_ERROR( CV_StsUnsupportedFormat, "Your version of Gstreamer doesn't support this codec acutally or needed plugin missing."); - g_object_set(G_OBJECT(file), "location", filename, NULL); - pipeline = gst_pipeline_new (NULL); - GstCaps* caps; - if (is_color) { - input_pix_fmt=1; - caps= gst_video_format_new_caps(GST_VIDEO_FORMAT_BGR, - frameSize.width, - frameSize.height, - (int) (fps * 1000), - 1000, - 1, - 1); - } - else { - input_pix_fmt=0; - caps= gst_caps_new_simple("video/x-raw-gray", - "width", G_TYPE_INT, frameSize.width, - "height", G_TYPE_INT, frameSize.height, - "framerate", GST_TYPE_FRACTION, int(fps),1, - "bpp",G_TYPE_INT,8, - "depth",G_TYPE_INT,8, - NULL); - } - gst_app_src_set_caps(GST_APP_SRC(source), caps); - if (fourcc==CV_FOURCC_DEFAULT) { - gst_bin_add_many(GST_BIN(pipeline), source, color,mux, file, NULL); - if(!gst_element_link_many(source,color,enc,mux,file,NULL)) { - CV_ERROR(CV_StsError, "GStreamer: cannot link elements\n"); - } - } - else { - gst_bin_add_many(GST_BIN(pipeline), source, color,enc,mux, file, NULL); - if(!gst_element_link_many(source,color,enc,mux,file,NULL)) { - CV_ERROR(CV_StsError, "GStreamer: cannot link elements\n"); - } - } - - - if(gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING) == - GST_STATE_CHANGE_FAILURE) { - CV_ERROR(CV_StsError, "GStreamer: cannot put pipeline to play\n"); - } - __END__; - return true; -} -bool CvVideoWriter_GStreamer::writeFrame( const IplImage * image ) -{ - - CV_FUNCNAME("CvVideoWriter_GStreamer::writerFrame"); - - __BEGIN__; - if (input_pix_fmt == 1) { - if (image->nChannels != 3 || image->depth != IPL_DEPTH_8U) { - CV_ERROR(CV_StsUnsupportedFormat, "cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 3."); - } - } - else if (input_pix_fmt == 0) { - if (image->nChannels != 1 || image->depth != IPL_DEPTH_8U) { - CV_ERROR(CV_StsUnsupportedFormat, "cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 1."); - } - } - else { - assert(false); - } - int size; - size = image->imageSize; - buffer = gst_buffer_new_and_alloc (size); - //gst_buffer_set_data (buffer,(guint8*)image->imageData, size); - memcpy (GST_BUFFER_DATA(buffer),image->imageData, size); - gst_app_src_push_buffer(GST_APP_SRC(source),buffer); - //gst_buffer_unref(buffer); - //buffer = 0; - __END__; - return true; -} -CvVideoWriter* cvCreateVideoWriter_GStreamer(const char* filename, int fourcc, double fps, - CvSize frameSize, int isColor ) -{ - CvVideoWriter_GStreamer* wrt = new CvVideoWriter_GStreamer; - if( wrt->open(filename, fourcc, fps,frameSize, isColor)) - return wrt; - - delete wrt; - return 0; -} - -void CvCapture_GStreamer::close() -{ - if(pipeline) { - gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); - gst_object_unref(GST_OBJECT(pipeline)); - } - if(buffer) - gst_buffer_unref(buffer); - if(frame) { - frame->imageData = 0; - cvReleaseImage(&frame); - } -} - -double CvCapture_GStreamer::getProperty( int propId ) -{ - GstFormat format; - //GstQuery q; - gint64 value; - - if(!pipeline) { - CV_WARN("GStreamer: no pipeline"); - return false; - } - - switch(propId) { - case CV_CAP_PROP_POS_MSEC: - format = GST_FORMAT_TIME; - if(!gst_element_query_position(sink, &format, &value)) { - CV_WARN("GStreamer: unable to query position of stream"); - return false; - } - return value * 1e-6; // nano seconds to milli seconds - case CV_CAP_PROP_POS_FRAMES: - format = GST_FORMAT_DEFAULT; - if(!gst_element_query_position(sink, &format, &value)) { - CV_WARN("GStreamer: unable to query position of stream"); - return false; - } - return value; - case CV_CAP_PROP_POS_AVI_RATIO: - format = GST_FORMAT_PERCENT; - if(!gst_element_query_position(pipeline, &format, &value)) { - CV_WARN("GStreamer: unable to query position of stream"); - return false; - } - return ((double) value) / GST_FORMAT_PERCENT_MAX; - case CV_CAP_PROP_FRAME_WIDTH: - case CV_CAP_PROP_FRAME_HEIGHT: - case CV_CAP_PROP_FPS: - case CV_CAP_PROP_FOURCC: - break; - case CV_CAP_PROP_FRAME_COUNT: - format = GST_FORMAT_DEFAULT; - if(!gst_element_query_duration(pipeline, &format, &value)) { - CV_WARN("GStreamer: unable to query position of stream"); - return false; - } - return value; - case CV_CAP_PROP_FORMAT: - case CV_CAP_PROP_MODE: - case CV_CAP_PROP_BRIGHTNESS: - case CV_CAP_PROP_CONTRAST: - case CV_CAP_PROP_SATURATION: - case CV_CAP_PROP_HUE: - case CV_CAP_PROP_GAIN: - case CV_CAP_PROP_CONVERT_RGB: - break; - case CV_CAP_GSTREAMER_QUEUE_LENGTH: - if(!sink) { - CV_WARN("GStreamer: there is no sink yet"); - return false; - } - return gst_app_sink_get_max_buffers(GST_APP_SINK(sink)); - default: - CV_WARN("GStreamer: unhandled property"); - break; - } - return false; -} - -bool CvCapture_GStreamer::setProperty( int propId, double value ) -{ - GstFormat format; - GstSeekFlags flags; - - if(!pipeline) { - CV_WARN("GStreamer: no pipeline"); - return false; - } - - switch(propId) { - case CV_CAP_PROP_POS_MSEC: - format = GST_FORMAT_TIME; - flags = (GstSeekFlags) (GST_SEEK_FLAG_FLUSH|GST_SEEK_FLAG_ACCURATE); - if(!gst_element_seek_simple(GST_ELEMENT(pipeline), format, - flags, (gint64) (value * GST_MSECOND))) { - CV_WARN("GStreamer: unable to seek"); - } - break; - case CV_CAP_PROP_POS_FRAMES: - format = GST_FORMAT_DEFAULT; - flags = (GstSeekFlags) (GST_SEEK_FLAG_FLUSH|GST_SEEK_FLAG_ACCURATE); - if(!gst_element_seek_simple(GST_ELEMENT(pipeline), format, - flags, (gint64) value)) { - CV_WARN("GStreamer: unable to seek"); - } - break; - case CV_CAP_PROP_POS_AVI_RATIO: - format = GST_FORMAT_PERCENT; - flags = (GstSeekFlags) (GST_SEEK_FLAG_FLUSH|GST_SEEK_FLAG_ACCURATE); - if(!gst_element_seek_simple(GST_ELEMENT(pipeline), format, - flags, (gint64) (value * GST_FORMAT_PERCENT_MAX))) { - CV_WARN("GStreamer: unable to seek"); - } - break; - case CV_CAP_PROP_FRAME_WIDTH: - if(value > 0) - setFilter("width", G_TYPE_INT, (int) value, 0); - else - removeFilter("width"); - break; - case CV_CAP_PROP_FRAME_HEIGHT: - if(value > 0) - setFilter("height", G_TYPE_INT, (int) value, 0); - else - removeFilter("height"); - break; - case CV_CAP_PROP_FPS: - if(value > 0) { - int num, denom; - num = (int) value; - if(value != num) { // FIXME this supports only fractions x/1 and x/2 - num = (int) (value * 2); - denom = 2; - } else - denom = 1; - - setFilter("framerate", GST_TYPE_FRACTION, num, denom); - } else - removeFilter("framerate"); - break; - case CV_CAP_PROP_FOURCC: - case CV_CAP_PROP_FRAME_COUNT: - case CV_CAP_PROP_FORMAT: - case CV_CAP_PROP_MODE: - case CV_CAP_PROP_BRIGHTNESS: - case CV_CAP_PROP_CONTRAST: - case CV_CAP_PROP_SATURATION: - case CV_CAP_PROP_HUE: - case CV_CAP_PROP_GAIN: - case CV_CAP_PROP_CONVERT_RGB: - break; - case CV_CAP_GSTREAMER_QUEUE_LENGTH: - if(!sink) - break; - gst_app_sink_set_max_buffers(GST_APP_SINK(sink), (guint) value); - break; - default: - CV_WARN("GStreamer: unhandled property"); - } - return false; -} -CvCapture* cvCreateCapture_GStreamer(int type, const char* filename ) -{ - CvCapture_GStreamer* capture = new CvCapture_GStreamer; - - if( capture->open( type, filename )) - return capture; - - delete capture; - return 0; -} diff --git a/modules/highgui/src/cap_images.cpp b/modules/highgui/src/cap_images.cpp deleted file mode 100644 index e1a8b8b..0000000 --- a/modules/highgui/src/cap_images.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, Nils Hasler, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// Author: Nils Hasler -// -// Max-Planck-Institut Informatik - -// -// capture video from a sequence of images -// the filename when opening can either be a printf pattern such as -// video%04d.png or the first frame of the sequence i.e. video0001.png -// - -#include "precomp.hpp" -#include - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -#ifndef _MAX_PATH -#define _MAX_PATH 1024 -#endif - -class CvCapture_Images : public CvCapture -{ -public: - CvCapture_Images() - { - filename = 0; - currentframe = firstframe = 0; - length = 0; - frame = 0; - } - - virtual ~CvCapture_Images() - { - close(); - } - - virtual bool open(const char* _filename); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - -protected: - char* filename; // actually a printf-pattern - unsigned currentframe; - unsigned firstframe; // number of first frame - unsigned length; // length of sequence - - IplImage* frame; -}; - - -void CvCapture_Images::close() -{ - if( filename ) - { - free(filename); - filename = 0; - } - currentframe = firstframe = 0; - length = 0; - cvReleaseImage( &frame ); -} - - -bool CvCapture_Images::grabFrame() -{ - char str[_MAX_PATH]; - sprintf(str, filename, firstframe + currentframe); - - cvReleaseImage(&frame); - frame = cvLoadImage(str, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); - if( frame ) - currentframe++; - - return frame != 0; -} - -IplImage* CvCapture_Images::retrieveFrame(int) -{ - return frame; -} - -double CvCapture_Images::getProperty(int id) -{ - switch(id) - { - case CV_CAP_PROP_POS_MSEC: - CV_WARN("collections of images don't have framerates\n"); - return 0; - case CV_CAP_PROP_POS_FRAMES: - return currentframe; - case CV_CAP_PROP_POS_AVI_RATIO: - return (double)currentframe / (double)(length - 1); - case CV_CAP_PROP_FRAME_WIDTH: - return frame ? frame->width : 0; - case CV_CAP_PROP_FRAME_HEIGHT: - return frame ? frame->height : 0; - case CV_CAP_PROP_FPS: - CV_WARN("collections of images don't have framerates\n"); - return 1; - case CV_CAP_PROP_FOURCC: - CV_WARN("collections of images don't have 4-character codes\n"); - return 0; - } - return 0; -} - -bool CvCapture_Images::setProperty(int id, double value) -{ - switch(id) - { - case CV_CAP_PROP_POS_MSEC: - case CV_CAP_PROP_POS_FRAMES: - if(value < 0) { - CV_WARN("seeking to negative positions does not work - clamping\n"); - value = 0; - } - if(value >= length) { - CV_WARN("seeking beyond end of sequence - clamping\n"); - value = length - 1; - } - currentframe = cvRound(value); - return true; - case CV_CAP_PROP_POS_AVI_RATIO: - if(value > 1) { - CV_WARN("seeking beyond end of sequence - clamping\n"); - value = 1; - } else if(value < 0) { - CV_WARN("seeking to negative positions does not work - clamping\n"); - value = 0; - } - currentframe = cvRound((length - 1) * value); - return true; - } - CV_WARN("unknown/unhandled property\n"); - return false; -} - -static char* icvExtractPattern(const char *filename, unsigned *offset) -{ - char *name = (char *)filename; - - if( !filename ) - return 0; - - // check whether this is a valid image sequence filename - char *at = strchr(name, '%'); - if(at) - { - int dummy; - if(sscanf(at + 1, "%ud", &dummy) != 1) - return 0; - name = strdup(filename); - } - else // no pattern filename was given - extract the pattern - { - at = name; - - // ignore directory names - char *slash = strrchr(at, '/'); - if (slash) at = slash + 1; - -#ifdef _WIN32 - slash = strrchr(at, '\\'); - if (slash) at = slash + 1; -#endif - - while (*at && !isdigit(*at)) at++; - - if(!*at) - return 0; - - sscanf(at, "%u", offset); - - int size = (int)strlen(filename) + 20; - name = (char *)malloc(size); - strncpy(name, filename, at - filename); - name[at - filename] = 0; - - strcat(name, "%0"); - - int i; - char *extension; - for(i = 0, extension = at; isdigit(at[i]); i++, extension++) - ; - char places[10]; - sprintf(places, "%dd", i); - - strcat(name, places); - strcat(name, extension); - } - - return name; -} - - -bool CvCapture_Images::open(const char * _filename) -{ - unsigned offset = 0; - close(); - - filename = icvExtractPattern(_filename, &offset); - if(!filename) - return false; - - // determine the length of the sequence - length = 0; - char str[_MAX_PATH]; - for(;;) - { - sprintf(str, filename, offset + length); - struct stat s; - if(stat(str, &s)) - { - if(length == 0 && offset == 0) // allow starting with 0 or 1 - { - offset++; - continue; - } - } - - if(!cvHaveImageReader(str)) - break; - - length++; - } - - if(length == 0) - { - close(); - return false; - } - - firstframe = offset; - return true; -} - - -CvCapture* cvCreateFileCapture_Images(const char * filename) -{ - CvCapture_Images* capture = new CvCapture_Images; - - if( capture->open(filename) ) - return capture; - - delete capture; - return 0; -} - -// -// -// image sequence writer -// -// -class CvVideoWriter_Images : public CvVideoWriter -{ -public: - CvVideoWriter_Images() - { - filename = 0; - currentframe = 0; - } - virtual ~CvVideoWriter_Images() { close(); } - - virtual bool open( const char* _filename ); - virtual void close(); - virtual bool writeFrame( const IplImage* ); - -protected: - char* filename; - unsigned currentframe; -}; - -bool CvVideoWriter_Images::writeFrame( const IplImage* image ) -{ - char str[_MAX_PATH]; - sprintf(str, filename, currentframe); - int ret = cvSaveImage(str, image); - - currentframe++; - - return ret > 0; -} - -void CvVideoWriter_Images::close() -{ - if( filename ) - { - free( filename ); - filename = 0; - } - currentframe = 0; -} - - -bool CvVideoWriter_Images::open( const char* _filename ) -{ - unsigned offset = 0; - - close(); - - filename = icvExtractPattern(_filename, &offset); - if(!filename) - return false; - - char str[_MAX_PATH]; - sprintf(str, filename, 0); - if(!cvHaveImageWriter(str)) - { - close(); - return false; - } - - currentframe = offset; - return true; -} - - -CvVideoWriter* cvCreateVideoWriter_Images( const char* filename ) -{ - CvVideoWriter_Images *writer = new CvVideoWriter_Images; - - if( writer->open( filename )) - return writer; - - delete writer; - return 0; -} diff --git a/modules/highgui/src/cap_intelperc.cpp b/modules/highgui/src/cap_intelperc.cpp deleted file mode 100644 index 368f4fd..0000000 --- a/modules/highgui/src/cap_intelperc.cpp +++ /dev/null @@ -1,714 +0,0 @@ -#include "precomp.hpp" - -#ifdef HAVE_INTELPERC - -#include "pxcsession.h" -#include "pxcsmartptr.h" -#include "pxccapture.h" - -class CvIntelPerCStreamBase -{ -protected: - struct FrameInternal - { - IplImage* retrieveFrame() - { - if (m_mat.empty()) - return NULL; - m_iplHeader = IplImage(m_mat); - return &m_iplHeader; - } - cv::Mat m_mat; - private: - IplImage m_iplHeader; - }; -public: - CvIntelPerCStreamBase() - : m_profileIdx(-1) - , m_frameIdx(0) - , m_timeStampStartNS(0) - { - } - virtual ~CvIntelPerCStreamBase() - { - } - - bool isValid() - { - return (m_device.IsValid() && m_stream.IsValid()); - } - bool grabFrame() - { - if (!m_stream.IsValid()) - return false; - if (-1 == m_profileIdx) - { - if (!setProperty(CV_CAP_PROP_INTELPERC_PROFILE_IDX, 0)) - return false; - } - PXCSmartPtr pxcImage; PXCSmartSP sp; - if (PXC_STATUS_NO_ERROR > m_stream->ReadStreamAsync(&pxcImage, &sp)) - return false; - if (PXC_STATUS_NO_ERROR > sp->Synchronize()) - return false; - if (0 == m_timeStampStartNS) - m_timeStampStartNS = pxcImage->QueryTimeStamp(); - m_timeStamp = (double)((pxcImage->QueryTimeStamp() - m_timeStampStartNS) / 10000); - m_frameIdx++; - return prepareIplImage(pxcImage); - } - int getProfileIDX() const - { - return m_profileIdx; - } -public: - virtual bool initStream(PXCSession *session) = 0; - virtual double getProperty(int propIdx) - { - double ret = 0.0; - switch (propIdx) - { - case CV_CAP_PROP_INTELPERC_PROFILE_COUNT: - ret = (double)m_profiles.size(); - break; - case CV_CAP_PROP_FRAME_WIDTH : - if ((0 <= m_profileIdx) && (m_profileIdx < m_profiles.size())) - ret = (double)m_profiles[m_profileIdx].imageInfo.width; - break; - case CV_CAP_PROP_FRAME_HEIGHT : - if ((0 <= m_profileIdx) && (m_profileIdx < m_profiles.size())) - ret = (double)m_profiles[m_profileIdx].imageInfo.height; - break; - case CV_CAP_PROP_FPS : - if ((0 <= m_profileIdx) && (m_profileIdx < m_profiles.size())) - { - ret = ((double)m_profiles[m_profileIdx].frameRateMin.numerator / (double)m_profiles[m_profileIdx].frameRateMin.denominator - + (double)m_profiles[m_profileIdx].frameRateMax.numerator / (double)m_profiles[m_profileIdx].frameRateMax.denominator) / 2.0; - } - break; - case CV_CAP_PROP_POS_FRAMES: - ret = (double)m_frameIdx; - break; - case CV_CAP_PROP_POS_MSEC: - ret = m_timeStamp; - break; - }; - return ret; - } - virtual bool setProperty(int propIdx, double propVal) - { - bool isSet = false; - switch (propIdx) - { - case CV_CAP_PROP_INTELPERC_PROFILE_IDX: - { - int propValInt = (int)propVal; - if ((0 <= propValInt) && (propValInt < m_profiles.size())) - { - if (m_profileIdx != propValInt) - { - m_profileIdx = propValInt; - if (m_stream.IsValid()) - m_stream->SetProfile(&m_profiles[m_profileIdx]); - m_frameIdx = 0; - m_timeStampStartNS = 0; - } - isSet = true; - } - } - break; - }; - return isSet; - } -protected: - PXCSmartPtr m_device; - bool initDevice(PXCSession *session) - { - if (NULL == session) - return false; - - pxcStatus sts = PXC_STATUS_NO_ERROR; - PXCSession::ImplDesc templat; - memset(&templat,0,sizeof(templat)); - templat.group = PXCSession::IMPL_GROUP_SENSOR; - templat.subgroup= PXCSession::IMPL_SUBGROUP_VIDEO_CAPTURE; - - for (int modidx = 0; PXC_STATUS_NO_ERROR <= sts; modidx++) - { - PXCSession::ImplDesc desc; - sts = session->QueryImpl(&templat, modidx, &desc); - if (PXC_STATUS_NO_ERROR > sts) - break; - - PXCSmartPtr capture; - sts = session->CreateImpl(&desc, &capture); - if (!capture.IsValid()) - continue; - - /* enumerate devices */ - for (int devidx = 0; PXC_STATUS_NO_ERROR <= sts; devidx++) - { - PXCSmartPtr device; - sts = capture->CreateDevice(devidx, &device); - if (PXC_STATUS_NO_ERROR <= sts) - { - m_device = device.ReleasePtr(); - return true; - } - } - } - return false; - } - - PXCSmartPtr m_stream; - void initStreamImpl(PXCImage::ImageType type) - { - if (!m_device.IsValid()) - return; - - pxcStatus sts = PXC_STATUS_NO_ERROR; - /* enumerate streams */ - for (int streamidx = 0; PXC_STATUS_NO_ERROR <= sts; streamidx++) - { - PXCCapture::Device::StreamInfo sinfo; - sts = m_device->QueryStream(streamidx, &sinfo); - if (PXC_STATUS_NO_ERROR > sts) - break; - if (PXCCapture::VideoStream::CUID != sinfo.cuid) - continue; - if (type != sinfo.imageType) - continue; - - sts = m_device->CreateStream(streamidx, &m_stream); - if (PXC_STATUS_NO_ERROR == sts) - break; - m_stream.ReleaseRef(); - } - } -protected: - std::vector m_profiles; - int m_profileIdx; - int m_frameIdx; - pxcU64 m_timeStampStartNS; - double m_timeStamp; - - virtual bool validProfile(const PXCCapture::VideoStream::ProfileInfo& /*pinfo*/) - { - return true; - } - void enumProfiles() - { - m_profiles.clear(); - if (!m_stream.IsValid()) - return; - pxcStatus sts = PXC_STATUS_NO_ERROR; - for (int profidx = 0; PXC_STATUS_NO_ERROR <= sts; profidx++) - { - PXCCapture::VideoStream::ProfileInfo pinfo; - sts = m_stream->QueryProfile(profidx, &pinfo); - if (PXC_STATUS_NO_ERROR > sts) - break; - if (validProfile(pinfo)) - m_profiles.push_back(pinfo); - } - } - virtual bool prepareIplImage(PXCImage *pxcImage) = 0; -}; - -class CvIntelPerCStreamImage - : public CvIntelPerCStreamBase -{ -public: - CvIntelPerCStreamImage() - { - } - virtual ~CvIntelPerCStreamImage() - { - } - - virtual bool initStream(PXCSession *session) - { - if (!initDevice(session)) - return false; - initStreamImpl(PXCImage::IMAGE_TYPE_COLOR); - if (!m_stream.IsValid()) - return false; - enumProfiles(); - return true; - } - virtual double getProperty(int propIdx) - { - switch (propIdx) - { - case CV_CAP_PROP_BRIGHTNESS: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_BRIGHTNESS, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_CONTRAST: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_CONTRAST, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_SATURATION: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_SATURATION, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_HUE: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_HUE, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_GAMMA: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_GAMMA, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_SHARPNESS: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_SHARPNESS, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_GAIN: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_GAIN, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_BACKLIGHT: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_BACK_LIGHT_COMPENSATION, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_EXPOSURE: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_COLOR_EXPOSURE, &fret)) - return (double)fret; - return 0.0; - } - break; - //Add image stream specific properties - } - return CvIntelPerCStreamBase::getProperty(propIdx); - } - virtual bool setProperty(int propIdx, double propVal) - { - switch (propIdx) - { - case CV_CAP_PROP_BRIGHTNESS: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_BRIGHTNESS, (float)propVal)); - } - break; - case CV_CAP_PROP_CONTRAST: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_CONTRAST, (float)propVal)); - } - break; - case CV_CAP_PROP_SATURATION: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_SATURATION, (float)propVal)); - } - break; - case CV_CAP_PROP_HUE: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_HUE, (float)propVal)); - } - break; - case CV_CAP_PROP_GAMMA: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_GAMMA, (float)propVal)); - } - break; - case CV_CAP_PROP_SHARPNESS: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_SHARPNESS, (float)propVal)); - } - break; - case CV_CAP_PROP_GAIN: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_GAIN, (float)propVal)); - } - break; - case CV_CAP_PROP_BACKLIGHT: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_BACK_LIGHT_COMPENSATION, (float)propVal)); - } - break; - case CV_CAP_PROP_EXPOSURE: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_COLOR_EXPOSURE, (float)propVal)); - } - break; - //Add image stream specific properties - } - return CvIntelPerCStreamBase::setProperty(propIdx, propVal); - } -public: - IplImage* retrieveFrame() - { - return m_frame.retrieveFrame(); - } -protected: - FrameInternal m_frame; - bool prepareIplImage(PXCImage *pxcImage) - { - if (NULL == pxcImage) - return false; - PXCImage::ImageInfo info; - pxcImage->QueryInfo(&info); - - PXCImage::ImageData data; - pxcImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::COLOR_FORMAT_RGB24, &data); - - if (PXCImage::SURFACE_TYPE_SYSTEM_MEMORY != data.type) - return false; - - cv::Mat temp(info.height, info.width, CV_8UC3, data.planes[0], data.pitches[0]); - temp.copyTo(m_frame.m_mat); - - pxcImage->ReleaseAccess(&data); - return true; - } -}; - -class CvIntelPerCStreamDepth - : public CvIntelPerCStreamBase -{ -public: - CvIntelPerCStreamDepth() - { - } - virtual ~CvIntelPerCStreamDepth() - { - } - - virtual bool initStream(PXCSession *session) - { - if (!initDevice(session)) - return false; - initStreamImpl(PXCImage::IMAGE_TYPE_DEPTH); - if (!m_stream.IsValid()) - return false; - enumProfiles(); - return true; - } - virtual double getProperty(int propIdx) - { - switch (propIdx) - { - case CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_DEPTH_LOW_CONFIDENCE_VALUE, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_DEPTH_SATURATION_VALUE, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD: - { - if (!m_device.IsValid()) - return 0.0; - float fret = 0.0f; - if (PXC_STATUS_NO_ERROR == m_device->QueryProperty(PXCCapture::Device::PROPERTY_DEPTH_CONFIDENCE_THRESHOLD, &fret)) - return (double)fret; - return 0.0; - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ: - { - if (!m_device.IsValid()) - return 0.0f; - PXCPointF32 ptf; - if (PXC_STATUS_NO_ERROR == m_device->QueryPropertyAsPoint(PXCCapture::Device::PROPERTY_DEPTH_FOCAL_LENGTH, &ptf)) - return (double)ptf.x; - return 0.0; - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT: - { - if (!m_device.IsValid()) - return 0.0f; - PXCPointF32 ptf; - if (PXC_STATUS_NO_ERROR == m_device->QueryPropertyAsPoint(PXCCapture::Device::PROPERTY_DEPTH_FOCAL_LENGTH, &ptf)) - return (double)ptf.y; - return 0.0; - } - break; - //Add depth stream sepcific properties - } - return CvIntelPerCStreamBase::getProperty(propIdx); - } - virtual bool setProperty(int propIdx, double propVal) - { - switch (propIdx) - { - case CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_DEPTH_LOW_CONFIDENCE_VALUE, (float)propVal)); - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_DEPTH_SATURATION_VALUE, (float)propVal)); - } - break; - case CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD: - { - if (!m_device.IsValid()) - return false; - return (PXC_STATUS_NO_ERROR == m_device->SetProperty(PXCCapture::Device::PROPERTY_DEPTH_CONFIDENCE_THRESHOLD, (float)propVal)); - } - break; - //Add depth stream sepcific properties - } - return CvIntelPerCStreamBase::setProperty(propIdx, propVal); - } -public: - IplImage* retrieveDepthFrame() - { - return m_frameDepth.retrieveFrame(); - } - IplImage* retrieveIRFrame() - { - return m_frameIR.retrieveFrame(); - } - IplImage* retrieveUVFrame() - { - return m_frameUV.retrieveFrame(); - } -protected: - virtual bool validProfile(const PXCCapture::VideoStream::ProfileInfo& pinfo) - { - return (PXCImage::COLOR_FORMAT_DEPTH == pinfo.imageInfo.format); - } -protected: - FrameInternal m_frameDepth; - FrameInternal m_frameIR; - FrameInternal m_frameUV; - - bool prepareIplImage(PXCImage *pxcImage) - { - if (NULL == pxcImage) - return false; - PXCImage::ImageInfo info; - pxcImage->QueryInfo(&info); - - PXCImage::ImageData data; - pxcImage->AcquireAccess(PXCImage::ACCESS_READ, &data); - - if (PXCImage::SURFACE_TYPE_SYSTEM_MEMORY != data.type) - return false; - - if (PXCImage::COLOR_FORMAT_DEPTH != data.format) - return false; - - { - cv::Mat temp(info.height, info.width, CV_16SC1, data.planes[0], data.pitches[0]); - temp.copyTo(m_frameDepth.m_mat); - } - { - cv::Mat temp(info.height, info.width, CV_16SC1, data.planes[1], data.pitches[1]); - temp.copyTo(m_frameIR.m_mat); - } - { - cv::Mat temp(info.height, info.width, CV_32FC2, data.planes[2], data.pitches[2]); - temp.copyTo(m_frameUV.m_mat); - } - - pxcImage->ReleaseAccess(&data); - return true; - } -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -class CvCapture_IntelPerC : public CvCapture -{ -public: - CvCapture_IntelPerC(int /*index*/) - : m_contextOpened(false) - { - pxcStatus sts = PXCSession_Create(&m_session); - if (PXC_STATUS_NO_ERROR > sts) - return; - m_contextOpened = m_imageStream.initStream(m_session); - m_contextOpened &= m_depthStream.initStream(m_session); - } - virtual ~CvCapture_IntelPerC(){} - - virtual double getProperty(int propIdx) - { - double propValue = 0; - int purePropIdx = propIdx & ~CV_CAP_INTELPERC_GENERATORS_MASK; - if (CV_CAP_INTELPERC_IMAGE_GENERATOR == (propIdx & CV_CAP_INTELPERC_GENERATORS_MASK)) - { - propValue = m_imageStream.getProperty(purePropIdx); - } - else if (CV_CAP_INTELPERC_DEPTH_GENERATOR == (propIdx & CV_CAP_INTELPERC_GENERATORS_MASK)) - { - propValue = m_depthStream.getProperty(purePropIdx); - } - else - { - propValue = m_depthStream.getProperty(purePropIdx); - } - return propValue; - } - virtual bool setProperty(int propIdx, double propVal) - { - bool isSet = false; - int purePropIdx = propIdx & ~CV_CAP_INTELPERC_GENERATORS_MASK; - if (CV_CAP_INTELPERC_IMAGE_GENERATOR == (propIdx & CV_CAP_INTELPERC_GENERATORS_MASK)) - { - isSet = m_imageStream.setProperty(purePropIdx, propVal); - } - else if (CV_CAP_INTELPERC_DEPTH_GENERATOR == (propIdx & CV_CAP_INTELPERC_GENERATORS_MASK)) - { - isSet = m_depthStream.setProperty(purePropIdx, propVal); - } - else - { - isSet = m_depthStream.setProperty(purePropIdx, propVal); - } - return isSet; - } - - bool grabFrame() - { - if (!isOpened()) - return false; - - bool isGrabbed = false; - if (m_depthStream.isValid()) - isGrabbed = m_depthStream.grabFrame(); - if ((m_imageStream.isValid()) && (-1 != m_imageStream.getProfileIDX())) - isGrabbed &= m_imageStream.grabFrame(); - - return isGrabbed; - } - - virtual IplImage* retrieveFrame(int outputType) - { - IplImage* image = 0; - switch (outputType) - { - case CV_CAP_INTELPERC_DEPTH_MAP: - image = m_depthStream.retrieveDepthFrame(); - break; - case CV_CAP_INTELPERC_UVDEPTH_MAP: - image = m_depthStream.retrieveUVFrame(); - break; - case CV_CAP_INTELPERC_IR_MAP: - image = m_depthStream.retrieveIRFrame(); - break; - case CV_CAP_INTELPERC_IMAGE: - image = m_imageStream.retrieveFrame(); - break; - } - CV_Assert(NULL != image); - return image; - } - - bool isOpened() const - { - return m_contextOpened; - } -protected: - bool m_contextOpened; - - PXCSmartPtr m_session; - CvIntelPerCStreamImage m_imageStream; - CvIntelPerCStreamDepth m_depthStream; -}; - - -CvCapture* cvCreateCameraCapture_IntelPerC(int index) -{ - CvCapture_IntelPerC* capture = new CvCapture_IntelPerC(index); - - if( capture->isOpened() ) - return capture; - - delete capture; - return 0; -} - - -#endif //HAVE_INTELPERC diff --git a/modules/highgui/src/cap_ios_abstract_camera.mm b/modules/highgui/src/cap_ios_abstract_camera.mm deleted file mode 100644 index b40b364..0000000 --- a/modules/highgui/src/cap_ios_abstract_camera.mm +++ /dev/null @@ -1,502 +0,0 @@ -/* - * cap_ios_abstract_camera.mm - * For iOS video I/O - * by Eduard Feicho on 29/07/12 - * by Alexander Shishkov on 17/07/13 - * Copyright 2012. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#import "opencv2/highgui/cap_ios.h" -#include "precomp.hpp" - -#pragma mark - Private Interface - -@interface CvAbstractCamera () - -@property (nonatomic, retain) AVCaptureVideoPreviewLayer* captureVideoPreviewLayer; - -- (void)deviceOrientationDidChange:(NSNotification*)notification; -- (void)startCaptureSession; - -- (void)setDesiredCameraPosition:(AVCaptureDevicePosition)desiredPosition; - -- (void)updateSize; - -@end - - -#pragma mark - Implementation - - -@implementation CvAbstractCamera - - - -#pragma mark Public - -@synthesize imageWidth; -@synthesize imageHeight; - - -@synthesize defaultFPS; -@synthesize defaultAVCaptureDevicePosition; -@synthesize defaultAVCaptureVideoOrientation; -@synthesize defaultAVCaptureSessionPreset; - - - -@synthesize captureSession; -@synthesize captureVideoPreviewLayer; -@synthesize videoCaptureConnection; -@synthesize running; -@synthesize captureSessionLoaded; -@synthesize useAVCaptureVideoPreviewLayer; - -@synthesize parentView; - -#pragma mark - Constructors - -- (id)init; -{ - self = [super init]; - if (self) { - // react to device orientation notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(deviceOrientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; - currentDeviceOrientation = [[UIDevice currentDevice] orientation]; - - - // check if camera available - cameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; - NSLog(@"camera available: %@", (cameraAvailable == YES ? @"YES" : @"NO") ); - - running = NO; - - // set camera default configuration - self.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront; - self.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationLandscapeLeft; - self.defaultFPS = 15; - self.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288; - - self.parentView = nil; - self.useAVCaptureVideoPreviewLayer = NO; - } - return self; -} - - - -- (id)initWithParentView:(UIView*)parent; -{ - self = [super init]; - if (self) { - // react to device orientation notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(deviceOrientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; - currentDeviceOrientation = [[UIDevice currentDevice] orientation]; - - - // check if camera available - cameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; - NSLog(@"camera available: %@", (cameraAvailable == YES ? @"YES" : @"NO") ); - - running = NO; - - // set camera default configuration - self.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront; - self.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationLandscapeLeft; - self.defaultFPS = 15; - self.defaultAVCaptureSessionPreset = AVCaptureSessionPreset640x480; - - self.parentView = parent; - self.useAVCaptureVideoPreviewLayer = YES; - } - return self; -} - - - -- (void)dealloc; -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; -} - - -#pragma mark - Public interface - - -- (void)start; -{ - if (![NSThread isMainThread]) { - NSLog(@"[Camera] Warning: Call start only from main thread"); - [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO]; - return; - } - - if (running == YES) { - return; - } - running = YES; - - // TOOD update image size data before actually starting (needed for recording) - [self updateSize]; - - if (cameraAvailable) { - [self startCaptureSession]; - } -} - - -- (void)pause; -{ - running = NO; - [self.captureSession stopRunning]; -} - - - -- (void)stop; -{ - running = NO; - - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; - - [self.captureSession stopRunning]; - self.captureSession = nil; - self.captureVideoPreviewLayer = nil; - self.videoCaptureConnection = nil; - captureSessionLoaded = NO; -} - - - -// use front/back camera -- (void)switchCameras; -{ - BOOL was_running = self.running; - if (was_running) { - [self stop]; - } - if (self.defaultAVCaptureDevicePosition == AVCaptureDevicePositionFront) { - self.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack; - } else { - self.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront; - } - if (was_running) { - [self start]; - } -} - - - -#pragma mark - Device Orientation Changes - - -- (void)deviceOrientationDidChange:(NSNotification*)notification -{ - UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; - - switch (orientation) - { - case UIDeviceOrientationPortrait: - case UIDeviceOrientationPortraitUpsideDown: - case UIDeviceOrientationLandscapeLeft: - case UIDeviceOrientationLandscapeRight: - currentDeviceOrientation = orientation; - break; - - case UIDeviceOrientationFaceUp: - case UIDeviceOrientationFaceDown: - default: - break; - } - NSLog(@"deviceOrientationDidChange: %d", orientation); - - [self updateOrientation]; -} - - - -#pragma mark - Private Interface - -- (void)createCaptureSession; -{ - // set a av capture session preset - self.captureSession = [[AVCaptureSession alloc] init]; - if ([self.captureSession canSetSessionPreset:self.defaultAVCaptureSessionPreset]) { - [self.captureSession setSessionPreset:self.defaultAVCaptureSessionPreset]; - } else if ([self.captureSession canSetSessionPreset:AVCaptureSessionPresetLow]) { - [self.captureSession setSessionPreset:AVCaptureSessionPresetLow]; - } else { - NSLog(@"[Camera] Error: could not set session preset"); - } -} - -- (void)createCaptureDevice; -{ - // setup the device - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - [self setDesiredCameraPosition:self.defaultAVCaptureDevicePosition]; - NSLog(@"[Camera] device connected? %@", device.connected ? @"YES" : @"NO"); - NSLog(@"[Camera] device position %@", (device.position == AVCaptureDevicePositionBack) ? @"back" : @"front"); -} - - -- (void)createVideoPreviewLayer; -{ - self.captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession]; - - if ([self.captureVideoPreviewLayer respondsToSelector:@selector(connection)]) - { - if ([self.captureVideoPreviewLayer.connection isVideoOrientationSupported]) - { - [self.captureVideoPreviewLayer.connection setVideoOrientation:self.defaultAVCaptureVideoOrientation]; - } - } - else - { - // Deprecated in 6.0; here for backward compatibility - if ([self.captureVideoPreviewLayer isOrientationSupported]) - { - [self.captureVideoPreviewLayer setOrientation:self.defaultAVCaptureVideoOrientation]; - } - } - - if (parentView != nil) { - self.captureVideoPreviewLayer.frame = self.parentView.bounds; - self.captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; - [self.parentView.layer addSublayer:self.captureVideoPreviewLayer]; - } - NSLog(@"[Camera] created AVCaptureVideoPreviewLayer"); -} - -- (void)setDesiredCameraPosition:(AVCaptureDevicePosition)desiredPosition; -{ - for (AVCaptureDevice *device in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) { - if ([device position] == desiredPosition) { - [self.captureSession beginConfiguration]; - - NSError* error; - AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; - if (!input) { - NSLog(@"error creating input %@", [error localizedDescription]); - } - - // support for autofocus - if ([device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.focusMode = AVCaptureFocusModeContinuousAutoFocus; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for autofocos configuration %@", [error localizedDescription]); - } - } - [self.captureSession addInput:input]; - - for (AVCaptureInput *oldInput in self.captureSession.inputs) { - [self.captureSession removeInput:oldInput]; - } - [self.captureSession addInput:input]; - [self.captureSession commitConfiguration]; - - break; - } - } -} - - - -- (void)startCaptureSession -{ - if (!cameraAvailable) { - return; - } - - if (self.captureSessionLoaded == NO) { - [self createCaptureSession]; - [self createCaptureDevice]; - [self createCaptureOutput]; - - // setup preview layer - if (self.useAVCaptureVideoPreviewLayer) { - [self createVideoPreviewLayer]; - } else { - [self createCustomVideoPreview]; - } - - captureSessionLoaded = YES; - } - - [self.captureSession startRunning]; -} - - -- (void)createCaptureOutput; -{ - [NSException raise:NSInternalInconsistencyException - format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]; -} - -- (void)createCustomVideoPreview; -{ - [NSException raise:NSInternalInconsistencyException - format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]; -} - -- (void)updateOrientation; -{ - // nothing to do here -} - - -- (void)updateSize; -{ - if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPresetPhoto]) { - //TODO: find the correct resolution - self.imageWidth = 640; - self.imageHeight = 480; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPresetHigh]) { - //TODO: find the correct resolution - self.imageWidth = 640; - self.imageHeight = 480; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPresetMedium]) { - //TODO: find the correct resolution - self.imageWidth = 640; - self.imageHeight = 480; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPresetLow]) { - //TODO: find the correct resolution - self.imageWidth = 640; - self.imageHeight = 480; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPreset352x288]) { - self.imageWidth = 352; - self.imageHeight = 288; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPreset640x480]) { - self.imageWidth = 640; - self.imageHeight = 480; - } else if ([self.defaultAVCaptureSessionPreset isEqualToString:AVCaptureSessionPreset1280x720]) { - self.imageWidth = 1280; - self.imageHeight = 720; - } else { - self.imageWidth = 640; - self.imageHeight = 480; - } -} - -- (void)lockFocus; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isFocusModeSupported:AVCaptureFocusModeLocked]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.focusMode = AVCaptureFocusModeLocked; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for locked focus configuration %@", [error localizedDescription]); - } - } -} - -- (void) unlockFocus; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.focusMode = AVCaptureFocusModeContinuousAutoFocus; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for autofocus configuration %@", [error localizedDescription]); - } - } -} - -- (void)lockExposure; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isExposureModeSupported:AVCaptureExposureModeLocked]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.exposureMode = AVCaptureExposureModeLocked; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for locked exposure configuration %@", [error localizedDescription]); - } - } -} - -- (void) unlockExposure; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isExposureModeSupported:AVCaptureExposureModeContinuousAutoExposure]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.exposureMode = AVCaptureExposureModeContinuousAutoExposure; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for autoexposure configuration %@", [error localizedDescription]); - } - } -} - -- (void)lockBalance; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeLocked]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.whiteBalanceMode = AVCaptureWhiteBalanceModeLocked; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for locked white balance configuration %@", [error localizedDescription]); - } - } -} - -- (void) unlockBalance; -{ - AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; - if ([device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance]) { - NSError *error = nil; - if ([device lockForConfiguration:&error]) { - device.whiteBalanceMode = AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance; - [device unlockForConfiguration]; - } else { - NSLog(@"unable to lock device for auto white balance configuration %@", [error localizedDescription]); - } - } -} - -@end diff --git a/modules/highgui/src/cap_ios_photo_camera.mm b/modules/highgui/src/cap_ios_photo_camera.mm deleted file mode 100644 index f05cfa5..0000000 --- a/modules/highgui/src/cap_ios_photo_camera.mm +++ /dev/null @@ -1,165 +0,0 @@ -/* - * cap_ios_photo_camera.mm - * For iOS video I/O - * by Eduard Feicho on 29/07/12 - * Copyright 2012. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#import "opencv2/highgui/cap_ios.h" -#include "precomp.hpp" - -#pragma mark - Private Interface - - -@interface CvPhotoCamera () - -@property (nonatomic, retain) AVCaptureStillImageOutput* stillImageOutput; - -@end - - - -#pragma mark - Implementation - - -@implementation CvPhotoCamera - - - -#pragma mark Public - -@synthesize stillImageOutput; -@synthesize delegate; - - -#pragma mark - Public interface - - -- (void)takePicture -{ - if (cameraAvailable == NO) { - return; - } - cameraAvailable = NO; - - - [self.stillImageOutput captureStillImageAsynchronouslyFromConnection:self.videoCaptureConnection - completionHandler: - ^(CMSampleBufferRef imageSampleBuffer, NSError *error) - { - if (error == nil && imageSampleBuffer != NULL) - { - // TODO check - // NSNumber* imageOrientation = [UIImage cgImageOrientationForUIDeviceOrientation:currentDeviceOrientation]; - // CMSetAttachment(imageSampleBuffer, kCGImagePropertyOrientation, imageOrientation, 1); - - NSData *jpegData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.captureSession stopRunning]; - - // Make sure we create objects on the main thread in the main context - UIImage* newImage = [UIImage imageWithData:jpegData]; - - //UIImageOrientation orientation = [newImage imageOrientation]; - - // TODO: only apply rotation, don't scale, since we can set this directly in the camera - /* - switch (orientation) { - case UIImageOrientationUp: - case UIImageOrientationDown: - newImage = [newImage imageWithAppliedRotationAndMaxSize:CGSizeMake(640.0, 480.0)]; - break; - case UIImageOrientationLeft: - case UIImageOrientationRight: - newImage = [newImage imageWithMaxSize:CGSizeMake(640.0, 480.0)]; - default: - break; - } - */ - - // We have captured the image, we can allow the user to take another picture - cameraAvailable = YES; - - NSLog(@"CvPhotoCamera captured image"); - if (self.delegate) { - [self.delegate photoCamera:self capturedImage:newImage]; - } - - [self.captureSession startRunning]; - }); - } - }]; - - -} - -- (void)stop; -{ - [super stop]; - self.stillImageOutput = nil; -} - - -#pragma mark - Private Interface - - -- (void)createStillImageOutput; -{ - // setup still image output with jpeg codec - self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; - NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecJPEG, AVVideoCodecKey, nil]; - [self.stillImageOutput setOutputSettings:outputSettings]; - [self.captureSession addOutput:self.stillImageOutput]; - - for (AVCaptureConnection *connection in self.stillImageOutput.connections) { - for (AVCaptureInputPort *port in [connection inputPorts]) { - if ([port.mediaType isEqual:AVMediaTypeVideo]) { - self.videoCaptureConnection = connection; - break; - } - } - if (self.videoCaptureConnection) { - break; - } - } - NSLog(@"[Camera] still image output created"); -} - - -- (void)createCaptureOutput; -{ - [self createStillImageOutput]; -} - -- (void)createCustomVideoPreview; -{ - //do nothing, always use AVCaptureVideoPreviewLayer -} - - -@end diff --git a/modules/highgui/src/cap_ios_video_camera.mm b/modules/highgui/src/cap_ios_video_camera.mm deleted file mode 100644 index 99f8a75..0000000 --- a/modules/highgui/src/cap_ios_video_camera.mm +++ /dev/null @@ -1,618 +0,0 @@ -/* - * cap_ios_video_camera.mm - * For iOS video I/O - * by Eduard Feicho on 29/07/12 - * by Alexander Shishkov on 17/07/13 - * Copyright 2012. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#import "opencv2/highgui/cap_ios.h" -#include "precomp.hpp" -#import - - -static CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;}; - -#pragma mark - Private Interface - - - - -@interface CvVideoCamera () - -- (void)createVideoDataOutput; -- (void)createVideoFileOutput; - - -@property (nonatomic, retain) CALayer *customPreviewLayer; -@property (nonatomic, retain) AVCaptureVideoDataOutput *videoDataOutput; - -@end - - - -#pragma mark - Implementation - - - -@implementation CvVideoCamera - - - - -@synthesize delegate; -@synthesize grayscaleMode; - -@synthesize customPreviewLayer; -@synthesize videoDataOutput; - -@synthesize recordVideo; -@synthesize rotateVideo; -//@synthesize videoFileOutput; -@synthesize recordAssetWriterInput; -@synthesize recordPixelBufferAdaptor; -@synthesize recordAssetWriter; - - - -#pragma mark - Constructors - -- (id)initWithParentView:(UIView*)parent; -{ - self = [super initWithParentView:parent]; - if (self) { - self.useAVCaptureVideoPreviewLayer = NO; - self.recordVideo = NO; - self.rotateVideo = NO; - } - return self; -} - - - -#pragma mark - Public interface - - -- (void)start; -{ - [super start]; - - if (self.recordVideo == YES) { - NSError* error; - if ([[NSFileManager defaultManager] fileExistsAtPath:[self videoFileString]]) { - [[NSFileManager defaultManager] removeItemAtPath:[self videoFileString] error:&error]; - } - if (error == nil) { - NSLog(@"[Camera] Delete file %@", [self videoFileString]); - } - } -} - - - -- (void)stop; -{ - [super stop]; - - self.videoDataOutput = nil; - if (videoDataOutputQueue) { - dispatch_release(videoDataOutputQueue); - } - - if (self.recordVideo == YES) { - - if (self.recordAssetWriter.status == AVAssetWriterStatusWriting) { - [self.recordAssetWriter finishWriting]; - NSLog(@"[Camera] recording stopped"); - } else { - NSLog(@"[Camera] Recording Error: asset writer status is not writing"); - } - - self.recordAssetWriter = nil; - self.recordAssetWriterInput = nil; - self.recordPixelBufferAdaptor = nil; - } - - [self.customPreviewLayer removeFromSuperlayer]; - self.customPreviewLayer = nil; -} - -// TODO fix -- (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; -{ - - NSLog(@"layout preview layer"); - if (self.parentView != nil) { - - CALayer* layer = self.customPreviewLayer; - CGRect bounds = self.customPreviewLayer.bounds; - int rotation_angle = 0; - bool flip_bounds = false; - - switch (interfaceOrientation) { - case UIInterfaceOrientationPortrait: - NSLog(@"to Portrait"); - rotation_angle = 270; - break; - case UIInterfaceOrientationPortraitUpsideDown: - rotation_angle = 90; - NSLog(@"to UpsideDown"); - break; - case UIInterfaceOrientationLandscapeLeft: - rotation_angle = 0; - NSLog(@"to LandscapeLeft"); - break; - case UIInterfaceOrientationLandscapeRight: - rotation_angle = 180; - NSLog(@"to LandscapeRight"); - break; - default: - break; // leave the layer in its last known orientation - } - - switch (defaultAVCaptureVideoOrientation) { - case AVCaptureVideoOrientationLandscapeRight: - rotation_angle += 180; - break; - case AVCaptureVideoOrientationPortraitUpsideDown: - rotation_angle += 270; - break; - case AVCaptureVideoOrientationPortrait: - rotation_angle += 90; - case AVCaptureVideoOrientationLandscapeLeft: - break; - default: - break; - } - rotation_angle = rotation_angle % 360; - - if (rotation_angle == 90 || rotation_angle == 270) { - flip_bounds = true; - } - - if (flip_bounds) { - NSLog(@"flip bounds"); - bounds = CGRectMake(0, 0, bounds.size.height, bounds.size.width); - } - - layer.position = CGPointMake(self.parentView.frame.size.width/2., self.parentView.frame.size.height/2.); - self.customPreviewLayer.bounds = CGRectMake(0, 0, self.parentView.frame.size.width, self.parentView.frame.size.height); - - layer.affineTransform = CGAffineTransformMakeRotation( DegreesToRadians(rotation_angle) ); - layer.bounds = bounds; - } - -} - -// TODO fix -- (void)layoutPreviewLayer; -{ - NSLog(@"layout preview layer"); - if (self.parentView != nil) { - - CALayer* layer = self.customPreviewLayer; - CGRect bounds = self.customPreviewLayer.bounds; - int rotation_angle = 0; - bool flip_bounds = false; - - switch (currentDeviceOrientation) { - case UIDeviceOrientationPortrait: - rotation_angle = 270; - break; - case UIDeviceOrientationPortraitUpsideDown: - rotation_angle = 90; - break; - case UIDeviceOrientationLandscapeLeft: - NSLog(@"left"); - rotation_angle = 180; - break; - case UIDeviceOrientationLandscapeRight: - NSLog(@"right"); - rotation_angle = 0; - break; - case UIDeviceOrientationFaceUp: - case UIDeviceOrientationFaceDown: - default: - break; // leave the layer in its last known orientation - } - - switch (defaultAVCaptureVideoOrientation) { - case AVCaptureVideoOrientationLandscapeRight: - rotation_angle += 180; - break; - case AVCaptureVideoOrientationPortraitUpsideDown: - rotation_angle += 270; - break; - case AVCaptureVideoOrientationPortrait: - rotation_angle += 90; - case AVCaptureVideoOrientationLandscapeLeft: - break; - default: - break; - } - rotation_angle = rotation_angle % 360; - - if (rotation_angle == 90 || rotation_angle == 270) { - flip_bounds = true; - } - - if (flip_bounds) { - NSLog(@"flip bounds"); - bounds = CGRectMake(0, 0, bounds.size.height, bounds.size.width); - } - - layer.position = CGPointMake(self.parentView.frame.size.width/2., self.parentView.frame.size.height/2.); - layer.affineTransform = CGAffineTransformMakeRotation( DegreesToRadians(rotation_angle) ); - layer.bounds = bounds; - } - -} - -#pragma mark - Private Interface - -- (void)createVideoDataOutput; -{ - // Make a video data output - self.videoDataOutput = [AVCaptureVideoDataOutput new]; - - // In grayscale mode we want YUV (YpCbCr 4:2:0) so we can directly access the graylevel intensity values (Y component) - // In color mode we, BGRA format is used - OSType format = self.grayscaleMode ? kCVPixelFormatType_420YpCbCr8BiPlanarFullRange : kCVPixelFormatType_32BGRA; - - self.videoDataOutput.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:format] - forKey:(id)kCVPixelBufferPixelFormatTypeKey]; - - // discard if the data output queue is blocked (as we process the still image) - [self.videoDataOutput setAlwaysDiscardsLateVideoFrames:YES]; - - if ( [self.captureSession canAddOutput:self.videoDataOutput] ) { - [self.captureSession addOutput:self.videoDataOutput]; - } - [[self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo] setEnabled:YES]; - - - // set default FPS - if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMinFrameDuration) { - [self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMinFrameDuration = CMTimeMake(1, self.defaultFPS); - } - if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMaxFrameDuration) { - [self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMaxFrameDuration = CMTimeMake(1, self.defaultFPS); - } - - // set video mirroring for front camera (more intuitive) - if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoMirroring) { - if (self.defaultAVCaptureDevicePosition == AVCaptureDevicePositionFront) { - [self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMirrored = YES; - } else { - [self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoMirrored = NO; - } - } - - // set default video orientation - if ([self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].supportsVideoOrientation) { - [self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo].videoOrientation = self.defaultAVCaptureVideoOrientation; - } - - - // create a custom preview layer - self.customPreviewLayer = [CALayer layer]; - self.customPreviewLayer.bounds = CGRectMake(0, 0, self.parentView.frame.size.width, self.parentView.frame.size.height); - [self layoutPreviewLayer]; - - // create a serial dispatch queue used for the sample buffer delegate as well as when a still image is captured - // a serial dispatch queue must be used to guarantee that video frames will be delivered in order - // see the header doc for setSampleBufferDelegate:queue: for more information - videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL); - [self.videoDataOutput setSampleBufferDelegate:self queue:videoDataOutputQueue]; - - - NSLog(@"[Camera] created AVCaptureVideoDataOutput at %d FPS", self.defaultFPS); -} - - - -- (void)createVideoFileOutput; -{ - /* Video File Output in H.264, via AVAsserWriter */ - NSLog(@"Create Video with dimensions %dx%d", self.imageWidth, self.imageHeight); - - NSDictionary *outputSettings - = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:self.imageWidth], AVVideoWidthKey, - [NSNumber numberWithInt:self.imageHeight], AVVideoHeightKey, - AVVideoCodecH264, AVVideoCodecKey, - nil - ]; - - - self.recordAssetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:outputSettings]; - - - int pixelBufferFormat = (self.grayscaleMode == YES) ? kCVPixelFormatType_420YpCbCr8BiPlanarFullRange : kCVPixelFormatType_32BGRA; - - self.recordPixelBufferAdaptor = - [[AVAssetWriterInputPixelBufferAdaptor alloc] - initWithAssetWriterInput:self.recordAssetWriterInput - sourcePixelBufferAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:pixelBufferFormat], kCVPixelBufferPixelFormatTypeKey, nil]]; - - NSError* error = nil; - NSLog(@"Create AVAssetWriter with url: %@", [self videoFileURL]); - self.recordAssetWriter = [AVAssetWriter assetWriterWithURL:[self videoFileURL] - fileType:AVFileTypeMPEG4 - error:&error]; - if (error != nil) { - NSLog(@"[Camera] Unable to create AVAssetWriter: %@", error); - } - - [self.recordAssetWriter addInput:self.recordAssetWriterInput]; - self.recordAssetWriterInput.expectsMediaDataInRealTime = YES; - - NSLog(@"[Camera] created AVAssetWriter"); -} - - -- (void)createCaptureOutput; -{ - [self createVideoDataOutput]; - if (self.recordVideo == YES) { - [self createVideoFileOutput]; - } -} - -- (void)createCustomVideoPreview; -{ - [self.parentView.layer addSublayer:self.customPreviewLayer]; -} - -- (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image -{ - - CGSize frameSize = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image)); - NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:NO], kCVPixelBufferCGImageCompatibilityKey, - [NSNumber numberWithBool:NO], kCVPixelBufferCGBitmapContextCompatibilityKey, - nil]; - CVPixelBufferRef pxbuffer = NULL; - CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, frameSize.width, - frameSize.height, kCVPixelFormatType_32ARGB, (CFDictionaryRef) CFBridgingRetain(options), - &pxbuffer); - NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL); - - CVPixelBufferLockBaseAddress(pxbuffer, 0); - void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer); - - - CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width, - frameSize.height, 8, 4*frameSize.width, rgbColorSpace, - kCGImageAlphaPremultipliedFirst); - - CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image), - CGImageGetHeight(image)), image); - CGColorSpaceRelease(rgbColorSpace); - CGContextRelease(context); - - CVPixelBufferUnlockBaseAddress(pxbuffer, 0); - - return pxbuffer; -} - -#pragma mark - Protocol AVCaptureVideoDataOutputSampleBufferDelegate - - -- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection -{ - if (self.delegate) { - - // convert from Core Media to Core Video - CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); - CVPixelBufferLockBaseAddress(imageBuffer, 0); - - void* bufferAddress; - size_t width; - size_t height; - size_t bytesPerRow; - - CGColorSpaceRef colorSpace; - CGContextRef context; - - int format_opencv; - - OSType format = CVPixelBufferGetPixelFormatType(imageBuffer); - if (format == kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) { - - format_opencv = CV_8UC1; - - bufferAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0); - width = CVPixelBufferGetWidthOfPlane(imageBuffer, 0); - height = CVPixelBufferGetHeightOfPlane(imageBuffer, 0); - bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 0); - - } else { // expect kCVPixelFormatType_32BGRA - - format_opencv = CV_8UC4; - - bufferAddress = CVPixelBufferGetBaseAddress(imageBuffer); - width = CVPixelBufferGetWidth(imageBuffer); - height = CVPixelBufferGetHeight(imageBuffer); - bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); - - } - - // delegate image processing to the delegate - cv::Mat image(height, width, format_opencv, bufferAddress, bytesPerRow); - - cv::Mat* result = NULL; - CGImage* dstImage; - - if ([self.delegate respondsToSelector:@selector(processImage:)]) { - [self.delegate processImage:image]; - } - - // check if matrix data pointer or dimensions were changed by the delegate - bool iOSimage = false; - if (height == image.rows && width == image.cols && format_opencv == image.type() && bufferAddress == image.data && bytesPerRow == image.step) { - iOSimage = true; - } - - - // (create color space, create graphics context, render buffer) - CGBitmapInfo bitmapInfo; - - // basically we decide if it's a grayscale, rgb or rgba image - if (image.channels() == 1) { - colorSpace = CGColorSpaceCreateDeviceGray(); - bitmapInfo = kCGImageAlphaNone; - } else if (image.channels() == 3) { - colorSpace = CGColorSpaceCreateDeviceRGB(); - bitmapInfo = kCGImageAlphaNone; - if (iOSimage) { - bitmapInfo |= kCGBitmapByteOrder32Little; - } else { - bitmapInfo |= kCGBitmapByteOrder32Big; - } - } else { - colorSpace = CGColorSpaceCreateDeviceRGB(); - bitmapInfo = kCGImageAlphaPremultipliedFirst; - if (iOSimage) { - bitmapInfo |= kCGBitmapByteOrder32Little; - } else { - bitmapInfo |= kCGBitmapByteOrder32Big; - } - } - - if (iOSimage) { - context = CGBitmapContextCreate(bufferAddress, width, height, 8, bytesPerRow, colorSpace, bitmapInfo); - dstImage = CGBitmapContextCreateImage(context); - CGContextRelease(context); - } else { - - NSData *data = [NSData dataWithBytes:image.data length:image.elemSize()*image.total()]; - CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); - - // Creating CGImage from cv::Mat - dstImage = CGImageCreate(image.cols, // width - image.rows, // height - 8, // bits per component - 8 * image.elemSize(), // bits per pixel - image.step, // bytesPerRow - colorSpace, // colorspace - bitmapInfo, // bitmap info - provider, // CGDataProviderRef - NULL, // decode - false, // should interpolate - kCGRenderingIntentDefault // intent - ); - - CGDataProviderRelease(provider); - } - - - // render buffer - dispatch_sync(dispatch_get_main_queue(), ^{ - self.customPreviewLayer.contents = (__bridge id)dstImage; - }); - - - if (self.recordVideo == YES) { - lastSampleTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); -// CMTimeShow(lastSampleTime); - if (self.recordAssetWriter.status != AVAssetWriterStatusWriting) { - [self.recordAssetWriter startWriting]; - [self.recordAssetWriter startSessionAtSourceTime:lastSampleTime]; - if (self.recordAssetWriter.status != AVAssetWriterStatusWriting) { - NSLog(@"[Camera] Recording Error: asset writer status is not writing: %@", self.recordAssetWriter.error); - return; - } else { - NSLog(@"[Camera] Video recording started"); - } - } - - if (self.recordAssetWriterInput.readyForMoreMediaData) { - CVImageBufferRef pixelBuffer = [self pixelBufferFromCGImage:dstImage]; - if (! [self.recordPixelBufferAdaptor appendPixelBuffer:pixelBuffer - withPresentationTime:lastSampleTime] ) { - NSLog(@"Video Writing Error"); - } - } - - } - - - // cleanup - CGImageRelease(dstImage); - - CGColorSpaceRelease(colorSpace); - - CVPixelBufferUnlockBaseAddress(imageBuffer, 0); - } -} - - -- (void)updateOrientation; -{ - if (self.rotateVideo == YES) - { - NSLog(@"rotate.."); - self.customPreviewLayer.bounds = CGRectMake(0, 0, self.parentView.frame.size.width, self.parentView.frame.size.height); - [self layoutPreviewLayer]; - } -} - - -- (void)saveVideo; -{ - if (self.recordVideo == NO) { - return; - } - - ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; - if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:[self videoFileURL]]) { - [library writeVideoAtPathToSavedPhotosAlbum:[self videoFileURL] - completionBlock:^(NSURL *assetURL, NSError *error){}]; - } -} - - -- (NSURL *)videoFileURL; -{ - NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"]; - NSURL *outputURL = [NSURL fileURLWithPath:outputPath]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:outputPath]) { - NSLog(@"file exists"); - } - return outputURL; -} - - - -- (NSString *)videoFileString; -{ - NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"]; - return outputPath; -} - -@end diff --git a/modules/highgui/src/cap_libv4l.cpp b/modules/highgui/src/cap_libv4l.cpp deleted file mode 100644 index e7aa5b5..0000000 --- a/modules/highgui/src/cap_libv4l.cpp +++ /dev/null @@ -1,1771 +0,0 @@ -/* This is the contributed code: - -File: cvcap_v4l.cpp -Current Location: ../opencv-0.9.6/otherlibs/highgui - -Original Version: 2003-03-12 Magnus Lundin lundin@mlu.mine.nu -Original Comments: - -ML:This set of files adds support for firevre and usb cameras. -First it tries to install a firewire camera, -if that fails it tries a v4l/USB camera -It has been tested with the motempl sample program - -First Patch: August 24, 2004 Travis Wood TravisOCV@tkwood.com -For Release: OpenCV-Linux Beta4 opencv-0.9.6 -Tested On: LMLBT44 with 8 video inputs -Problems? Post your questions at answers.opencv.org, - Report bugs at code.opencv.org, - Submit your fixes at https://github.com/Itseez/opencv/ -Patched Comments: - -TW: The cv cam utils that came with the initial release of OpenCV for LINUX Beta4 -were not working. I have rewritten them so they work for me. At the same time, trying -to keep the original code as ML wrote it as unchanged as possible. No one likes to debug -someone elses code, so I resisted changes as much as possible. I have tried to keep the -same "ideas" where applicable, that is, where I could figure out what the previous author -intended. Some areas I just could not help myself and had to "spiffy-it-up" my way. - -These drivers should work with other V4L frame capture cards other then my bttv -driven frame capture card. - -Re Written driver for standard V4L mode. Tested using LMLBT44 video capture card. -Standard bttv drivers are on the LMLBT44 with up to 8 Inputs. - -This utility was written with the help of the document: -http://pages.cpsc.ucalgary.ca/~sayles/VFL_HowTo -as a general guide for interfacing into the V4l standard. - -Made the index value passed for icvOpenCAM_V4L(index) be the number of the -video device source in the /dev tree. The -1 uses original /dev/video. - -Index Device - 0 /dev/video0 - 1 /dev/video1 - 2 /dev/video2 - 3 /dev/video3 - ... - 7 /dev/video7 -with - -1 /dev/video - -TW: You can select any video source, but this package was limited from the start to only -ONE camera opened at any ONE time. -This is an original program limitation. -If you are interested, I will make my version available to other OpenCV users. The big -difference in mine is you may pass the camera number as part of the cv argument, but this -convention is non standard for current OpenCV calls and the camera number is not currently -passed into the called routine. - -Second Patch: August 28, 2004 Sfuncia Fabio fiblan@yahoo.it -For Release: OpenCV-Linux Beta4 Opencv-0.9.6 - -FS: this patch fix not sequential index of device (unplugged device), and real numCameras. - for -1 index (icvOpenCAM_V4L) i dont use /dev/video but real device available, because - if /dev/video is a link to /dev/video0 and i unplugged device on /dev/video0, /dev/video - is a bad link. I search the first available device with indexList. - -Third Patch: December 9, 2004 Frederic Devernay Frederic.Devernay@inria.fr -For Release: OpenCV-Linux Beta4 Opencv-0.9.6 - -[FD] I modified the following: - - handle YUV420P, YUV420, and YUV411P palettes (for many webcams) without using floating-point - - cvGrabFrame should not wait for the end of the first frame, and should return quickly - (see highgui doc) - - cvRetrieveFrame should in turn wait for the end of frame capture, and should not - trigger the capture of the next frame (the user choses when to do it using GrabFrame) - To get the old behavior, re-call cvRetrieveFrame just after cvGrabFrame. - - having global bufferIndex and FirstCapture variables makes the code non-reentrant - (e.g. when using several cameras), put these in the CvCapture struct. - - according to V4L HowTo, incrementing the buffer index must be done before VIDIOCMCAPTURE. - - the VID_TYPE_SCALES stuff from V4L HowTo is wrong: image size can be changed - even if the hardware does not support scaling (e.g. webcams can have several - resolutions available). Just don't try to set the size at 640x480 if the hardware supports - scaling: open with the default (probably best) image size, and let the user scale it - using SetProperty. - - image size can be changed by two subsequent calls to SetProperty (for width and height) - - bug fix: if the image size changes, realloc the new image only when it is grabbed - - issue errors only when necessary, fix error message formatting. - -Fourth Patch: Sept 7, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I modified the following: - - Additional Video4Linux2 support :) - - Use mmap functions (v4l2) - - New methods are internal: - try_palette_v4l2 -> rewrite try_palette for v4l2 - mainloop_v4l2, read_image_v4l2 -> this methods are moved from official v4l2 capture.c example - try_init_v4l -> device v4l initialisation - try_init_v4l2 -> device v4l2 initialisation - autosetup_capture_mode_v4l -> autodetect capture modes for v4l - autosetup_capture_mode_v4l2 -> autodetect capture modes for v4l2 - - Modifications are according with Video4Linux old codes - - Video4Linux handling is automatically if it does not recognize a Video4Linux2 device - - Tested succesful with Logitech Quickcam Express (V4L), Creative Vista (V4L) and Genius VideoCam Notebook (V4L2) - - Correct source lines with compiler warning messages - - Information message from v4l/v4l2 detection - -Fifth Patch: Sept 7, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I modified the following: - - SN9C10x chip based webcams support - - New methods are internal: - bayer2rgb24, sonix_decompress -> decoder routines for SN9C10x decoding from Takafumi Mizuno with his pleasure :) - - Tested succesful with Genius VideoCam Notebook (V4L2) - -Sixth Patch: Sept 10, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I added the following: - - Add capture control support (hue, saturation, brightness, contrast, gain) - - Get and change V4L capture controls (hue, saturation, brightness, contrast) - - New method is internal: - icvSetControl -> set capture controls - - Tested succesful with Creative Vista (V4L) - -Seventh Patch: Sept 10, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I added the following: - - Detect, get and change V4L2 capture controls (hue, saturation, brightness, contrast, gain) - - New methods are internal: - v4l2_scan_controls_enumerate_menu, v4l2_scan_controls -> detect capture control intervals - - Tested succesful with Genius VideoCam Notebook (V4L2) - -8th patch: Jan 5, 2006, Olivier.Bornet@idiap.ch -Add support of V4L2_PIX_FMT_YUYV and V4L2_PIX_FMT_MJPEG. -With this patch, new webcams of Logitech, like QuickCam Fusion works. -Note: For use these webcams, look at the UVC driver at -http://linux-uvc.berlios.de/ - -9th patch: Mar 4, 2006, Olivier.Bornet@idiap.ch -- try V4L2 before V4L, because some devices are V4L2 by default, - but they try to implement the V4L compatibility layer. - So, I think this is better to support V4L2 before V4L. -- better separation between V4L2 and V4L initialization. (this was needed to support - some drivers working, but not fully with V4L2. (so, we do not know when we - need to switch from V4L2 to V4L. - -10th patch: July 02, 2008, Mikhail Afanasyev fopencv@theamk.com -Fix reliability problems with high-resolution UVC cameras on linux -the symptoms were damaged image and 'Corrupt JPEG data: premature end of data segment' on stderr -- V4L_ABORT_BADJPEG detects JPEG warnings and turns them into errors, so bad images - could be filtered out -- USE_TEMP_BUFFER fixes the main problem (improper buffer management) and - prevents bad images in the first place - -11th patch: Apr 13, 2010, Filipe Almeida filipe.almeida@ist.utl.pt -- Tries to setup all properties first through v4l2_ioctl call. -- Allows seting up all Video4Linux properties through cvSetCaptureProperty instead of only CV_CAP_PROP_BRIGHTNESS, CV_CAP_PROP_CONTRAST, CV_CAP_PROP_SATURATION, CV_CAP_PROP_HUE, CV_CAP_PROP_GAIN and CV_CAP_PROP_EXPOSURE. - -12th patch: Apr 16, 2010, Filipe Almeida filipe.almeida@ist.utl.pt -- CvCaptureCAM_V4L structure cleanup (no longer needs _{min,max,} variables) -- Introduction of v4l2_ctrl_range - minimum and maximum allowed values for v4l controls -- Allows seting up all Video4Linux properties through cvSetCaptureProperty using input values between 0.0 and 1.0 -- Gets v4l properties first through v4l2_ioctl call (ignores capture->is_v4l2_device) -- cvGetCaptureProperty adjusted to support the changes -- Returns device properties to initial values after device closes - -13th patch: Apr 27, 2010, Filipe Almeida filipe.almeida@ist.utl.pt -- Solved problem mmaping the device using uvcvideo driver (use o v4l2_mmap instead of mmap) -make & enjoy! - -14th patch: May 10, 2010, Filipe Almeida filipe.almeida@ist.utl.pt -- Bug #142: Solved/Workaround "setting frame width and height does not work" - There was a problem setting up the size when the input is a v4l2 device - The workaround closes the camera and reopens it with the new definition - Planning for future rewrite of this whole library (July/August 2010) - -15th patch: May 12, 2010, Filipe Almeida filipe.almeida@ist.utl.pt -- Broken compile of library (include "_highgui.h") -*/ - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if !defined WIN32 && defined HAVE_LIBV4L - -#define CLEAR(x) memset (&(x), 0, sizeof (x)) - -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for videodev2.h */ -#include -#include -#include - -#ifdef HAVE_CAMV4L -#include -#endif -#ifdef HAVE_CAMV4L2 -#include -#endif - -#include -#include - -/* Defaults - If your board can do better, set it here. Set for the most common type inputs. */ -#define DEFAULT_V4L_WIDTH 640 -#define DEFAULT_V4L_HEIGHT 480 - -#define CHANNEL_NUMBER 1 -#define MAX_CAMERAS 8 - - -// default and maximum number of V4L buffers, not including last, 'special' buffer -#define MAX_V4L_BUFFERS 10 -#define DEFAULT_V4L_BUFFERS 4 - -// if enabled, copies data from the buffer. this uses a bit more memory, -// but much more reliable for some UVC cameras -#define USE_TEMP_BUFFER - -#define MAX_DEVICE_DRIVER_NAME 80 - -/* Device Capture Objects */ -/* V4L2 structure */ -struct buffer -{ - void * start; - size_t length; -}; -static unsigned int n_buffers = 0; - -/* TODO: Dilemas: */ -/* TODO: Consider drop the use of this data structure and perform ioctl to obtain needed values */ -/* TODO: Consider at program exit return controls to the initial values - See v4l2_free_ranges function */ -/* TODO: Consider at program exit reset the device to default values - See v4l2_free_ranges function */ -typedef struct v4l2_ctrl_range { - __u32 ctrl_id; - __s32 initial_value; - __s32 current_value; - __s32 minimum; - __s32 maximum; - __s32 default_value; -} v4l2_ctrl_range; - -typedef struct CvCaptureCAM_V4L -{ - char* deviceName; - int deviceHandle; - int bufferIndex; - int FirstCapture; - - int width; int height; - - struct video_capability capability; - struct video_window captureWindow; - struct video_picture imageProperties; - struct video_mbuf memoryBuffer; - struct video_mmap *mmaps; - char *memoryMap; - IplImage frame; - - /* V4L2 variables */ - buffer buffers[MAX_V4L_BUFFERS + 1]; - struct v4l2_capability cap; - struct v4l2_input inp; - struct v4l2_format form; - struct v4l2_crop crop; - struct v4l2_cropcap cropcap; - struct v4l2_requestbuffers req; - struct v4l2_jpegcompression compr; - struct v4l2_control control; - enum v4l2_buf_type type; - struct v4l2_queryctrl queryctrl; - - /* V4L2 control variables */ - v4l2_ctrl_range** v4l2_ctrl_ranges; - int v4l2_ctrl_count; - - int is_v4l2_device; -} -CvCaptureCAM_V4L; - -static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ); - -static int icvGrabFrameCAM_V4L( CvCaptureCAM_V4L* capture ); -static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int ); -CvCapture* cvCreateCameraCapture_V4L( int index ); - -static double icvGetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, int property_id ); -static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, int property_id, double value ); - -static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h); - -/*********************** Implementations ***************************************/ - -static int numCameras = 0; -static int indexList = 0; - -// IOCTL handling for V4L2 -#ifdef HAVE_IOCTL_ULONG -static int xioctl( int fd, unsigned long request, void *arg) -#else -static int xioctl( int fd, int request, void *arg) -#endif -{ - - int r; - - - do r = v4l2_ioctl (fd, request, arg); - while (-1 == r && EINTR == errno); - - return r; - -} - - -/* Simple test program: Find number of Video Sources available. - Start from 0 and go to MAX_CAMERAS while checking for the device with that name. - If it fails on the first attempt of /dev/video0, then check if /dev/video is valid. - Returns the global numCameras with the correct value (we hope) */ - -static void icvInitCapture_V4L() { - int deviceHandle; - int CameraNumber; - char deviceName[MAX_DEVICE_DRIVER_NAME]; - - CameraNumber = 0; - while(CameraNumber < MAX_CAMERAS) { - /* Print the CameraNumber at the end of the string with a width of one character */ - sprintf(deviceName, "/dev/video%1d", CameraNumber); - /* Test using an open to see if this new device name really does exists. */ - deviceHandle = open(deviceName, O_RDONLY); - if (deviceHandle != -1) { - /* This device does indeed exist - add it to the total so far */ - // add indexList - indexList|=(1 << CameraNumber); - numCameras++; - } - if (deviceHandle != -1) - close(deviceHandle); - /* Set up to test the next /dev/video source in line */ - CameraNumber++; - } /* End while */ - -}; /* End icvInitCapture_V4L */ - - -static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName) - -{ - - // if detect = -1 then unable to open device - // if detect = 0 then detected nothing - // if detect = 1 then V4L device - int detect = 0; - - - // Test device for V4L compability - - /* Test using an open to see if this new device name really does exists. */ - /* No matter what the name - it still must be opened! */ - capture->deviceHandle = v4l1_open(deviceName, O_RDWR); - - - if (capture->deviceHandle == 0) - { - detect = -1; - - icvCloseCAM_V4L(capture); - } - - if (detect == 0) - { - /* Query the newly opened device for its capabilities */ - if (v4l1_ioctl(capture->deviceHandle, VIDIOCGCAP, &capture->capability) < 0) - { - detect = 0; - - icvCloseCAM_V4L(capture); - } - else - { - detect = 1; - } - } - - return detect; - -} - - -static int try_init_v4l2(CvCaptureCAM_V4L* capture, char *deviceName) -{ - - // if detect = -1 then unable to open device - // if detect = 0 then detected nothing - // if detect = 1 then V4L2 device - int detect = 0; - - - // Test device for V4L2 compability - - /* Open and test V4L2 device */ - capture->deviceHandle = v4l2_open (deviceName, O_RDWR /* required */ | O_NONBLOCK, 0); - - - - if (capture->deviceHandle == 0) - { - detect = -1; - - icvCloseCAM_V4L(capture); - } - - if (detect == 0) - { - CLEAR (capture->cap); - if (-1 == xioctl (capture->deviceHandle, VIDIOC_QUERYCAP, &capture->cap)) - { - detect = 0; - - icvCloseCAM_V4L(capture); - } - else - { - CLEAR (capture->capability); - capture->capability.type = capture->cap.capabilities; - - /* Query channels number */ - if (-1 != xioctl (capture->deviceHandle, VIDIOC_G_INPUT, &capture->capability.channels)) - { - detect = 1; - } - } - } - - return detect; - -} - - -static void v4l2_free_ranges(CvCaptureCAM_V4L* capture) { - int i; - if (capture->v4l2_ctrl_ranges != NULL) { - for (i = 0; i < capture->v4l2_ctrl_count; i++) { - /* Return device to initial values: */ - /* double value = (capture->v4l2_ctrl_ranges[i]->initial_value == 0)?0.0:((float)capture->v4l2_ctrl_ranges[i]->initial_value - capture->v4l2_ctrl_ranges[i]->minimum) / (capture->v4l2_ctrl_ranges[i]->maximum - capture->v4l2_ctrl_ranges[i]->minimum); */ - /* Return device to default values: */ - /* double value = (capture->v4l2_ctrl_ranges[i]->default_value == 0)?0.0:((float)capture->v4l2_ctrl_ranges[i]->default_value - capture->v4l2_ctrl_ranges[i]->minimum + 1) / (capture->v4l2_ctrl_ranges[i]->maximum - capture->v4l2_ctrl_ranges[i]->minimum); */ - - /* icvSetPropertyCAM_V4L(capture, capture->v4l2_ctrl_ranges[i]->ctrl_id, value); */ - free(capture->v4l2_ctrl_ranges[i]); - } - } - free(capture->v4l2_ctrl_ranges); - capture->v4l2_ctrl_count = 0; - capture->v4l2_ctrl_ranges = NULL; -} - -static void v4l2_add_ctrl_range(CvCaptureCAM_V4L* capture, v4l2_control* ctrl) { - v4l2_ctrl_range* range = (v4l2_ctrl_range*)malloc(sizeof(v4l2_ctrl_range)); - range->ctrl_id = ctrl->id; - range->initial_value = ctrl->value; - range->current_value = ctrl->value; - range->minimum = capture->queryctrl.minimum; - range->maximum = capture->queryctrl.maximum; - range->default_value = capture->queryctrl.default_value; - capture->v4l2_ctrl_ranges[capture->v4l2_ctrl_count] = range; - capture->v4l2_ctrl_count += 1; - capture->v4l2_ctrl_ranges = (v4l2_ctrl_range**)realloc((v4l2_ctrl_range**)capture->v4l2_ctrl_ranges, (capture->v4l2_ctrl_count + 1) * sizeof(v4l2_ctrl_range*)); -} - -static int v4l2_get_ctrl_default(CvCaptureCAM_V4L* capture, __u32 id) { - int i; - for (i = 0; i < capture->v4l2_ctrl_count; i++) { - if (id == capture->v4l2_ctrl_ranges[i]->ctrl_id) { - return capture->v4l2_ctrl_ranges[i]->default_value; - } - } - return -1; -} - -static int v4l2_get_ctrl_min(CvCaptureCAM_V4L* capture, __u32 id) { - int i; - for (i = 0; i < capture->v4l2_ctrl_count; i++) { - if (id == capture->v4l2_ctrl_ranges[i]->ctrl_id) { - return capture->v4l2_ctrl_ranges[i]->minimum; - } - } - return -1; -} - -static int v4l2_get_ctrl_max(CvCaptureCAM_V4L* capture, __u32 id) { - int i; - for (i = 0; i < capture->v4l2_ctrl_count; i++) { - if (id == capture->v4l2_ctrl_ranges[i]->ctrl_id) { - return capture->v4l2_ctrl_ranges[i]->maximum; - } - } - return -1; -} - - -static void v4l2_scan_controls(CvCaptureCAM_V4L* capture) { - - __u32 ctrl_id; - struct v4l2_control c; - if (capture->v4l2_ctrl_ranges != NULL) { - v4l2_free_ranges(capture); - } - capture->v4l2_ctrl_ranges = (v4l2_ctrl_range**)malloc(sizeof(v4l2_ctrl_range*)); -#ifdef V4L2_CTRL_FLAG_NEXT_CTRL - /* Try the extended control API first */ - capture->queryctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL; - if(0 == v4l2_ioctl (capture->deviceHandle, VIDIOC_QUERYCTRL, &capture->queryctrl)) { - do { - c.id = capture->queryctrl.id; - capture->queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL; - if(capture->queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { - continue; - } - if(capture->queryctrl.type != V4L2_CTRL_TYPE_INTEGER && - capture->queryctrl.type != V4L2_CTRL_TYPE_BOOLEAN && - capture->queryctrl.type != V4L2_CTRL_TYPE_MENU) { - continue; - } - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_G_CTRL, &c) == 0) { - v4l2_add_ctrl_range(capture, &c); - } - - } while(0 == v4l2_ioctl (capture->deviceHandle, VIDIOC_QUERYCTRL, &capture->queryctrl)); - } else -#endif - { - /* Check all the standard controls */ - for(ctrl_id=V4L2_CID_BASE; ctrl_idqueryctrl.id = ctrl_id; - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_QUERYCTRL, &capture->queryctrl) == 0) { - if(capture->queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { - continue; - } - if(capture->queryctrl.type != V4L2_CTRL_TYPE_INTEGER && - capture->queryctrl.type != V4L2_CTRL_TYPE_BOOLEAN && - capture->queryctrl.type != V4L2_CTRL_TYPE_MENU) { - continue; - } - c.id = ctrl_id; - - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_G_CTRL, &c) == 0) { - v4l2_add_ctrl_range(capture, &c); - } - } - } - - /* Check any custom controls */ - for(ctrl_id=V4L2_CID_PRIVATE_BASE; ; ctrl_id++) { - capture->queryctrl.id = ctrl_id; - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_QUERYCTRL, &capture->queryctrl) == 0) { - if(capture->queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) { - continue; - } - - - if(capture->queryctrl.type != V4L2_CTRL_TYPE_INTEGER && - capture->queryctrl.type != V4L2_CTRL_TYPE_BOOLEAN && - capture->queryctrl.type != V4L2_CTRL_TYPE_MENU) { - continue; - } - - c.id = ctrl_id; - - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_G_CTRL, &c) == 0) { - v4l2_add_ctrl_range(capture, &c); - } - } else { - break; - } - } - } -} - -static int _capture_V4L2 (CvCaptureCAM_V4L *capture, char *deviceName) -{ - int detect_v4l2 = 0; - - capture->deviceName = strdup(deviceName); - - detect_v4l2 = try_init_v4l2(capture, deviceName); - - if (detect_v4l2 != 1) { - /* init of the v4l2 device is not OK */ - return -1; - } - - /* starting from here, we assume we are in V4L2 mode */ - capture->is_v4l2_device = 1; - - capture->v4l2_ctrl_ranges = NULL; - capture->v4l2_ctrl_count = 0; - - /* Scan V4L2 controls */ - v4l2_scan_controls(capture); - - if ((capture->cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == 0) { - /* Nope. */ - fprintf( stderr, "HIGHGUI ERROR: V4L2: device %s is unable to capture video memory.\n",deviceName); - icvCloseCAM_V4L(capture); - return -1; - } - - /* The following code sets the CHANNEL_NUMBER of the video input. Some video sources - have sub "Channel Numbers". For a typical V4L TV capture card, this is usually 1. - I myself am using a simple NTSC video input capture card that uses the value of 1. - If you are not in North America or have a different video standard, you WILL have to change - the following settings and recompile/reinstall. This set of settings is based on - the most commonly encountered input video source types (like my bttv card) */ - - if(capture->inp.index > 0) { - CLEAR (capture->inp); - capture->inp.index = CHANNEL_NUMBER; - /* Set only channel number to CHANNEL_NUMBER */ - /* V4L2 have a status field from selected video mode */ - if (-1 == xioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp)) - { - fprintf (stderr, "HIGHGUI ERROR: V4L2: Aren't able to set channel number\n"); - icvCloseCAM_V4L (capture); - return -1; - } - } /* End if */ - - /* Find Window info */ - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) { - fprintf( stderr, "HIGHGUI ERROR: V4L2: Could not obtain specifics of capture window.\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - /* libv4l will convert from any format to V4L2_PIX_FMT_BGR24 */ - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->form.fmt.pix.pixelformat = V4L2_PIX_FMT_BGR24; - capture->form.fmt.pix.field = V4L2_FIELD_ANY; - capture->form.fmt.pix.width = capture->width; - capture->form.fmt.pix.height = capture->height; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_S_FMT, &capture->form)) { - fprintf(stderr, "HIGHGUI ERROR: libv4l unable to ioctl S_FMT\n"); - return -1; - } - - if (V4L2_PIX_FMT_BGR24 != capture->form.fmt.pix.pixelformat) { - fprintf( stderr, "HIGHGUI ERROR: libv4l unable convert to requested pixfmt\n"); - return -1; - } - - /* icvSetVideoSize(capture, DEFAULT_V4L_WIDTH, DEFAULT_V4L_HEIGHT); */ - - unsigned int min; - - /* Buggy driver paranoia. */ - min = capture->form.fmt.pix.width * 2; - - if (capture->form.fmt.pix.bytesperline < min) - capture->form.fmt.pix.bytesperline = min; - - min = capture->form.fmt.pix.bytesperline * capture->form.fmt.pix.height; - - if (capture->form.fmt.pix.sizeimage < min) - capture->form.fmt.pix.sizeimage = min; - - CLEAR (capture->req); - - unsigned int buffer_number = DEFAULT_V4L_BUFFERS; - - try_again: - - capture->req.count = buffer_number; - capture->req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->req.memory = V4L2_MEMORY_MMAP; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_REQBUFS, &capture->req)) - { - if (EINVAL == errno) - { - fprintf (stderr, "%s does not support memory mapping\n", deviceName); - } else { - perror ("VIDIOC_REQBUFS"); - } - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - - if (capture->req.count < buffer_number) - { - if (buffer_number == 1) - { - fprintf (stderr, "Insufficient buffer memory on %s\n", deviceName); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } else { - buffer_number--; - fprintf (stderr, "Insufficient buffer memory on %s -- decreaseing buffers\n", deviceName); - - goto try_again; - } - } - - for (n_buffers = 0; n_buffers < capture->req.count; ++n_buffers) - { - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = n_buffers; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_QUERYBUF, &buf)) { - perror ("VIDIOC_QUERYBUF"); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - - capture->buffers[n_buffers].length = buf.length; - capture->buffers[n_buffers].start = - v4l2_mmap (NULL /* start anywhere */, - buf.length, - PROT_READ | PROT_WRITE /* required */, - MAP_SHARED /* recommended */, - capture->deviceHandle, buf.m.offset); - - if (MAP_FAILED == capture->buffers[n_buffers].start) { - perror ("mmap"); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - -#ifdef USE_TEMP_BUFFER - if (n_buffers == 0) { - if (capture->buffers[MAX_V4L_BUFFERS].start) { - free(capture->buffers[MAX_V4L_BUFFERS].start); - capture->buffers[MAX_V4L_BUFFERS].start = NULL; - } - - capture->buffers[MAX_V4L_BUFFERS].start = malloc(buf.length); - capture->buffers[MAX_V4L_BUFFERS].length = buf.length; - }; -#endif - } - - /* Set up Image data */ - cvInitImageHeader( &capture->frame, - cvSize( capture->captureWindow.width, - capture->captureWindow.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - /* Allocate space for RGBA data */ - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - - return 1; -}; /* End _capture_V4L2 */ - - -static int _capture_V4L (CvCaptureCAM_V4L *capture, char *deviceName) -{ - int detect_v4l = 0; - - detect_v4l = try_init_v4l(capture, deviceName); - - if (detect_v4l == -1) - { - fprintf (stderr, "HIGHGUI ERROR: V4L" - ": device %s: Unable to open for READ ONLY\n", deviceName); - - return -1; - } - - if (detect_v4l <= 0) - { - fprintf (stderr, "HIGHGUI ERROR: V4L" - ": device %s: Unable to query number of channels\n", deviceName); - - return -1; - } - - { - if ((capture->capability.type & VID_TYPE_CAPTURE) == 0) { - /* Nope. */ - fprintf( stderr, "HIGHGUI ERROR: V4L: " - "device %s is unable to capture video memory.\n",deviceName); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - - /* The following code sets the CHANNEL_NUMBER of the video input. Some video sources - have sub "Channel Numbers". For a typical V4L TV capture card, this is usually 1. - I myself am using a simple NTSC video input capture card that uses the value of 1. - If you are not in North America or have a different video standard, you WILL have to change - the following settings and recompile/reinstall. This set of settings is based on - the most commonly encountered input video source types (like my bttv card) */ - - { - - if(capture->capability.channels>0) { - - struct video_channel selectedChannel; - - selectedChannel.channel=CHANNEL_NUMBER; - if (v4l1_ioctl(capture->deviceHandle, VIDIOCGCHAN , &selectedChannel) != -1) { - /* set the video mode to ( VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_SECAM) */ -// selectedChannel.norm = VIDEO_MODE_NTSC; - if (v4l1_ioctl(capture->deviceHandle, VIDIOCSCHAN , &selectedChannel) == -1) { - /* Could not set selected channel - Oh well */ - //printf("\n%d, %s not NTSC capable.\n",selectedChannel.channel, selectedChannel.name); - } /* End if */ - } /* End if */ - } /* End if */ - - } - - { - - if(v4l1_ioctl(capture->deviceHandle, VIDIOCGWIN, &capture->captureWindow) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: " - "Could not obtain specifics of capture window.\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - { - if(v4l1_ioctl(capture->deviceHandle, VIDIOCGPICT, &capture->imageProperties) < 0) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Unable to determine size of incoming image\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - capture->imageProperties.palette = VIDEO_PALETTE_RGB24; - capture->imageProperties.depth = 24; - if (v4l1_ioctl(capture->deviceHandle, VIDIOCSPICT, &capture->imageProperties) < 0) { - fprintf( stderr, "HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - if (v4l1_ioctl(capture->deviceHandle, VIDIOCGPICT, &capture->imageProperties) < 0) { - fprintf( stderr, "HIGHGUI ERROR: libv4l unable to ioctl VIDIOCGPICT\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - if (capture->imageProperties.palette != VIDEO_PALETTE_RGB24) { - fprintf( stderr, "HIGHGUI ERROR: libv4l unable convert to requested pixfmt\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - { - - v4l1_ioctl(capture->deviceHandle, VIDIOCGMBUF, &capture->memoryBuffer); - capture->memoryMap = (char *)v4l1_mmap(0, - capture->memoryBuffer.size, - PROT_READ | PROT_WRITE, - MAP_SHARED, - capture->deviceHandle, - 0); - if (capture->memoryMap == MAP_FAILED) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Mapping Memmory from video source error: %s\n", strerror(errno)); - icvCloseCAM_V4L(capture); - return -1; - } - - /* Set up video_mmap structure pointing to this memory mapped area so each image may be - retrieved from an index value */ - capture->mmaps = (struct video_mmap *) - (malloc(capture->memoryBuffer.frames * sizeof(struct video_mmap))); - if (!capture->mmaps) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not memory map video frames.\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - /* Set up Image data */ - cvInitImageHeader( &capture->frame, - cvSize( capture->captureWindow.width, - capture->captureWindow.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - /* Allocate space for RGBA data */ - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - - return 1; -}; /* End _capture_V4L */ - -static CvCaptureCAM_V4L * icvCaptureFromCAM_V4L (int index) -{ - static int autoindex; - autoindex = 0; - - char deviceName[MAX_DEVICE_DRIVER_NAME]; - - if (!numCameras) - icvInitCapture_V4L(); /* Havent called icvInitCapture yet - do it now! */ - if (!numCameras) - return NULL; /* Are there any /dev/video input sources? */ - - //search index in indexList - if ( (index>-1) && ! ((1 << index) & indexList) ) - { - fprintf( stderr, "HIGHGUI ERROR: V4L: index %d is not correct!\n",index); - return NULL; /* Did someone ask for not correct video source number? */ - } - /* Allocate memory for this humongus CvCaptureCAM_V4L structure that contains ALL - the handles for V4L processing */ - CvCaptureCAM_V4L * capture = (CvCaptureCAM_V4L*)cvAlloc(sizeof(CvCaptureCAM_V4L)); - if (!capture) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not allocate memory for capture process.\n"); - return NULL; - } - -#ifdef USE_TEMP_BUFFER - capture->buffers[MAX_V4L_BUFFERS].start = NULL; -#endif - - /* Select camera, or rather, V4L video source */ - if (index<0) { // Asking for the first device available - for (; autoindexFirstCapture = 1; - - /* set the default size */ - capture->width = DEFAULT_V4L_WIDTH; - capture->height = DEFAULT_V4L_HEIGHT; - - if (_capture_V4L2 (capture, deviceName) == -1) { - icvCloseCAM_V4L(capture); - capture->is_v4l2_device = 0; - if (_capture_V4L (capture, deviceName) == -1) { - icvCloseCAM_V4L(capture); - return NULL; - } - } else { - capture->is_v4l2_device = 1; - } - - return capture; -}; /* End icvOpenCAM_V4L */ - -#ifdef HAVE_CAMV4L2 - -static int read_frame_v4l2(CvCaptureCAM_V4L* capture) { - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_DQBUF, &buf)) { - switch (errno) { - case EAGAIN: - return 0; - - case EIO: - /* Could ignore EIO, see spec. */ - - /* fall through */ - - default: - /* display the error and stop processing */ - perror ("VIDIOC_DQBUF"); - return 1; - } - } - - assert(buf.index < capture->req.count); - -#ifdef USE_TEMP_BUFFER - memcpy(capture->buffers[MAX_V4L_BUFFERS].start, - capture->buffers[buf.index].start, - capture->buffers[MAX_V4L_BUFFERS].length ); - capture->bufferIndex = MAX_V4L_BUFFERS; - //printf("got data in buff %d, len=%d, flags=0x%X, seq=%d, used=%d)\n", - // buf.index, buf.length, buf.flags, buf.sequence, buf.bytesused); -#else - capture->bufferIndex = buf.index; -#endif - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_QBUF, &buf)) - perror ("VIDIOC_QBUF"); - - return 1; -} - -static void mainloop_v4l2(CvCaptureCAM_V4L* capture) { - unsigned int count; - - count = 1; - - while (count-- > 0) { - for (;;) { - fd_set fds; - struct timeval tv; - int r; - - FD_ZERO (&fds); - FD_SET (capture->deviceHandle, &fds); - - /* Timeout. */ - tv.tv_sec = 10; - tv.tv_usec = 0; - - r = select (capture->deviceHandle+1, &fds, NULL, NULL, &tv); - - if (-1 == r) { - if (EINTR == errno) - continue; - - perror ("select"); - } - - if (0 == r) { - fprintf (stderr, "select timeout\n"); - - /* end the infinite loop */ - break; - } - - if (read_frame_v4l2 (capture)) - break; - } - } -} - -static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) { - - if (capture->FirstCapture) { - /* Some general initialization must take place the first time through */ - - /* This is just a technicality, but all buffers must be filled up before any - staggered SYNC is applied. SO, filler up. (see V4L HowTo) */ - - if (capture->is_v4l2_device == 1) - { - - for (capture->bufferIndex = 0; - capture->bufferIndex < ((int)capture->req.count); - ++capture->bufferIndex) - { - - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = (unsigned long)capture->bufferIndex; - - if (-1 == xioctl (capture->deviceHandle, VIDIOC_QBUF, &buf)) { - perror ("VIDIOC_QBUF"); - return 0; - } - } - - /* enable the streaming */ - capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == xioctl (capture->deviceHandle, VIDIOC_STREAMON, - &capture->type)) { - /* error enabling the stream */ - perror ("VIDIOC_STREAMON"); - return 0; - } - } else - { - - for (capture->bufferIndex = 0; - capture->bufferIndex < (capture->memoryBuffer.frames-1); - ++capture->bufferIndex) { - - capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex; - capture->mmaps[capture->bufferIndex].width = capture->captureWindow.width; - capture->mmaps[capture->bufferIndex].height = capture->captureWindow.height; - capture->mmaps[capture->bufferIndex].format = capture->imageProperties.palette; - - if (v4l1_ioctl(capture->deviceHandle, VIDIOCMCAPTURE, &capture->mmaps[capture->bufferIndex]) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.\n"); - return 0; - } - } - - } - - /* preparation is ok */ - capture->FirstCapture = 0; - } - - if (capture->is_v4l2_device == 1) - { - - mainloop_v4l2(capture); - - } else - { - - capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex; - capture->mmaps[capture->bufferIndex].width = capture->captureWindow.width; - capture->mmaps[capture->bufferIndex].height = capture->captureWindow.height; - capture->mmaps[capture->bufferIndex].format = capture->imageProperties.palette; - - if (v4l1_ioctl (capture->deviceHandle, VIDIOCMCAPTURE, - &capture->mmaps[capture->bufferIndex]) == -1) { - /* capture is on the way, so just exit */ - return 1; - } - - ++capture->bufferIndex; - if (capture->bufferIndex == capture->memoryBuffer.frames) { - capture->bufferIndex = 0; - } - - } - - return(1); -} - -static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) { - - if (capture->is_v4l2_device == 0) - { - - /* [FD] this really belongs here */ - if (v4l1_ioctl(capture->deviceHandle, VIDIOCSYNC, &capture->mmaps[capture->bufferIndex].frame) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not SYNC to video stream. %s\n", strerror(errno)); - } - - } - - /* Now get what has already been captured as a IplImage return */ - - /* First, reallocate imageData if the frame size changed */ - - if (capture->is_v4l2_device == 1) - { - - if(((unsigned long)capture->frame.width != capture->form.fmt.pix.width) - || ((unsigned long)capture->frame.height != capture->form.fmt.pix.height)) { - cvFree(&capture->frame.imageData); - cvInitImageHeader( &capture->frame, - cvSize( capture->form.fmt.pix.width, - capture->form.fmt.pix.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - } - - } else - { - - if((capture->frame.width != capture->mmaps[capture->bufferIndex].width) - || (capture->frame.height != capture->mmaps[capture->bufferIndex].height)) { - cvFree(&capture->frame.imageData); - cvInitImageHeader( &capture->frame, - cvSize( capture->captureWindow.width, - capture->captureWindow.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - } - - } - - if (capture->is_v4l2_device == 1) - { - - if(capture->buffers[capture->bufferIndex].start){ - memcpy((char *)capture->frame.imageData, - (char *)capture->buffers[capture->bufferIndex].start, - capture->frame.imageSize); - } - - } else -#endif /* HAVE_CAMV4L2 */ - { - - switch(capture->imageProperties.palette) { - case VIDEO_PALETTE_RGB24: - memcpy((char *)capture->frame.imageData, - (char *)(capture->memoryMap + capture->memoryBuffer.offsets[capture->bufferIndex]), - capture->frame.imageSize); - break; - default: - fprintf( stderr, - "HIGHGUI ERROR: V4L: Cannot convert from palette %d to RGB\n", - capture->imageProperties.palette); - return 0; - } - - } - - return(&capture->frame); -} - -/* TODO: review this adaptation */ -static double icvGetPropertyCAM_V4L (CvCaptureCAM_V4L* capture, - int property_id ) { - char name[32]; - int is_v4l2_device = 0; - /* initialize the control structure */ - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - case CV_CAP_PROP_FRAME_HEIGHT: - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == xioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) { - /* display an error message, and return an error code */ - perror ("VIDIOC_G_FMT"); - if (v4l1_ioctl (capture->deviceHandle, VIDIOCGWIN, &capture->captureWindow) < 0) { - fprintf (stderr, "HIGHGUI ERROR: V4L: Unable to determine size of incoming image\n"); - icvCloseCAM_V4L(capture); - return -1; - } else { - int retval = (property_id == CV_CAP_PROP_FRAME_WIDTH)?capture->captureWindow.width:capture->captureWindow.height; - return retval / 0xFFFF; - } - } - return (property_id == CV_CAP_PROP_FRAME_WIDTH)?capture->form.fmt.pix.width:capture->form.fmt.pix.height; - case CV_CAP_PROP_BRIGHTNESS: - sprintf(name, "Brightness"); - capture->control.id = V4L2_CID_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - sprintf(name, "Contrast"); - capture->control.id = V4L2_CID_CONTRAST; - break; - case CV_CAP_PROP_SATURATION: - sprintf(name, "Saturation"); - capture->control.id = V4L2_CID_SATURATION; - break; - case CV_CAP_PROP_HUE: - sprintf(name, "Hue"); - capture->control.id = V4L2_CID_HUE; - break; - case CV_CAP_PROP_GAIN: - sprintf(name, "Gain"); - capture->control.id = V4L2_CID_GAIN; - break; - case CV_CAP_PROP_EXPOSURE: - sprintf(name, "Exposure"); - capture->control.id = V4L2_CID_EXPOSURE; - break; - default: - sprintf(name, ""); - capture->control.id = property_id; - } - - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_G_CTRL, &capture->control) == 0) { - /* all went well */ - is_v4l2_device = 1; - } else { - fprintf(stderr, "HIGHGUI ERROR: V4L2: Unable to get property %s(%u) - %s\n", name, capture->control.id, strerror(errno)); - } - - if (is_v4l2_device == 1) { - /* get the min/max values */ - int v4l2_min = v4l2_get_ctrl_min(capture, capture->control.id); - int v4l2_max = v4l2_get_ctrl_max(capture, capture->control.id); - - if ((v4l2_min == -1) && (v4l2_max == -1)) { - fprintf(stderr, "HIGHGUI ERROR: V4L2: Property %s(%u) not supported by device\n", name, property_id); - return -1; - } - - /* all was OK, so convert to 0.0 - 1.0 range, and return the value */ - return ((float)capture->control.value - v4l2_min) / (v4l2_max - v4l2_min); - - } else { - /* TODO: review this section */ - int retval = -1; - - switch (property_id) { - case CV_CAP_PROP_BRIGHTNESS: - retval = capture->imageProperties.brightness; - break; - case CV_CAP_PROP_CONTRAST: - retval = capture->imageProperties.contrast; - break; - case CV_CAP_PROP_SATURATION: - retval = capture->imageProperties.colour; - break; - case CV_CAP_PROP_HUE: - retval = capture->imageProperties.hue; - break; - case CV_CAP_PROP_GAIN: - fprintf(stderr, "HIGHGUI ERROR: V4L: Gain control in V4L is not supported\n"); - return -1; - break; - case CV_CAP_PROP_EXPOSURE: - fprintf(stderr, "HIGHGUI ERROR: V4L: Exposure control in V4L is not supported\n"); - return -1; - break; - } - - if (retval == -1) { - /* there was a problem */ - return -1; - } - /* all was OK, so convert to 0.0 - 1.0 range, and return the value */ - return float (retval) / 0xFFFF; - } -} - -static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h) { - - if (capture->is_v4l2_device == 1) - { - char deviceName[MAX_DEVICE_DRIVER_NAME]; - sprintf(deviceName, "%s", capture->deviceName); - icvCloseCAM_V4L(capture); - _capture_V4L2(capture, deviceName); - - CLEAR (capture->crop); - capture->crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->crop.c.left = 0; - capture->crop.c.top = 0; - capture->crop.c.height = h*24; - capture->crop.c.width = w*24; - - /* set the crop area, but don't exit if the device don't support croping */ - xioctl (capture->deviceHandle, VIDIOC_S_CROP, &capture->crop); - - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - /* read the current setting, mainly to retreive the pixelformat information */ - xioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form); - - /* set the values we want to change */ - capture->form.fmt.pix.width = w; - capture->form.fmt.pix.height = h; - capture->form.fmt.win.chromakey = 0; - capture->form.fmt.win.field = V4L2_FIELD_ANY; - capture->form.fmt.win.clips = 0; - capture->form.fmt.win.clipcount = 0; - capture->form.fmt.pix.field = V4L2_FIELD_ANY; - - /* ask the device to change the size - * don't test if the set of the size is ok, because some device - * don't allow changing the size, and we will get the real size - * later */ - xioctl (capture->deviceHandle, VIDIOC_S_FMT, &capture->form); - - /* try to set framerate to 30 fps */ - struct v4l2_streamparm setfps; - memset (&setfps, 0, sizeof(struct v4l2_streamparm)); - setfps.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - setfps.parm.capture.timeperframe.numerator = 1; - setfps.parm.capture.timeperframe.denominator = 30; - xioctl (capture->deviceHandle, VIDIOC_S_PARM, &setfps); - - /* we need to re-initialize some things, like buffers, because the size has - * changed */ - capture->FirstCapture = 1; - - /* Get window info again, to get the real value */ - if (-1 == xioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) - { - fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: Could not obtain specifics of capture window.\n\n"); - - icvCloseCAM_V4L(capture); - - return 0; - } - - return 0; - - } else - { - - if (capture==0) return 0; - if (w>capture->capability.maxwidth) { - w=capture->capability.maxwidth; - } - if (h>capture->capability.maxheight) { - h=capture->capability.maxheight; - } - - capture->captureWindow.width=w; - capture->captureWindow.height=h; - - if (ioctl(capture->deviceHandle, VIDIOCSWIN, &capture->captureWindow) < 0) { - icvCloseCAM_V4L(capture); - return 0; - } - - if (ioctl(capture->deviceHandle, VIDIOCGWIN, &capture->captureWindow) < 0) { - icvCloseCAM_V4L(capture); - return 0; - } - - capture->FirstCapture = 1; - - } - - return 0; - -} - -static int icvSetControl (CvCaptureCAM_V4L* capture, int property_id, double value) { - struct v4l2_control c; - __s32 ctrl_value; - char name[32]; - int is_v4l2 = 1; - int v4l2_min = 0; - int v4l2_max = 255; - if (capture->v4l2_ctrl_ranges == NULL) { - v4l2_scan_controls(capture); - } - - CLEAR (capture->control); - CLEAR (capture->queryctrl); - - /* get current values */ - switch (property_id) { - case CV_CAP_PROP_BRIGHTNESS: - sprintf(name, "Brightness"); - capture->control.id = V4L2_CID_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - sprintf(name, "Contrast"); - capture->control.id = V4L2_CID_CONTRAST; - break; - case CV_CAP_PROP_SATURATION: - sprintf(name, "Saturation"); - capture->control.id = V4L2_CID_SATURATION; - break; - case CV_CAP_PROP_HUE: - sprintf(name, "Hue"); - capture->control.id = V4L2_CID_HUE; - break; - case CV_CAP_PROP_GAIN: - sprintf(name, "Gain"); - capture->control.id = V4L2_CID_GAIN; - break; - case CV_CAP_PROP_EXPOSURE: - sprintf(name, "Exposure"); - capture->control.id = V4L2_CID_EXPOSURE; - break; - default: - sprintf(name, ""); - capture->control.id = property_id; - } - - v4l2_min = v4l2_get_ctrl_min(capture, capture->control.id); - v4l2_max = v4l2_get_ctrl_max(capture, capture->control.id); - - if ((v4l2_min == -1) && (v4l2_max == -1)) { - fprintf(stderr, "HIGHGUI ERROR: V4L: Property %s(%u) not supported by device\n", name, property_id); - return -1; - } - - if(v4l2_ioctl(capture->deviceHandle, VIDIOC_G_CTRL, &capture->control) == 0) { - /* all went well */ - } else { - fprintf(stderr, "HIGHGUI ERROR: V4L2: Unable to get property %s(%u) - %s\n", name, capture->control.id, strerror(errno)); - } - - if (v4l2_max != 0) { - double val = value; - if (value < 0.0) { - val = 0.0; - } else if (value > 1.0) { - val = 1.0; - } - ctrl_value = val * (double)(v4l2_max - v4l2_min) + v4l2_min; - } else { - ctrl_value = v4l2_get_ctrl_default(capture, capture->control.id) * (double)(v4l2_max - v4l2_min) + v4l2_min; - } - - /* try and set value as if it was a v4l2 device */ - c.id = capture->control.id; - c.value = ctrl_value; - if (v4l2_ioctl(capture->deviceHandle, VIDIOC_S_CTRL, &c) != 0) { - /* The driver may clamp the value or return ERANGE, ignored here */ - if (errno != ERANGE) { - fprintf(stderr, "HIGHGUI ERROR: V4L2: Failed to set control \"%d\": %s (value %d)\n", c.id, strerror(errno), c.value); - is_v4l2 = 0; - } else { - return 0; - } - } else { - return 0; - } - - if (is_v4l2 == 0) { /* use v4l1_ioctl */ - fprintf(stderr, "HIGHGUI WARNING: Setting property %u through v4l2 failed. Trying with v4l1.\n", c.id); - int v4l_value; - /* scale the value to the wanted integer one */ - v4l_value = (int)(0xFFFF * value); - - switch (property_id) { - case CV_CAP_PROP_BRIGHTNESS: - capture->imageProperties.brightness = v4l_value; - break; - case CV_CAP_PROP_CONTRAST: - capture->imageProperties.contrast = v4l_value; - break; - case CV_CAP_PROP_SATURATION: - capture->imageProperties.colour = v4l_value; - break; - case CV_CAP_PROP_HUE: - capture->imageProperties.hue = v4l_value; - break; - case CV_CAP_PROP_GAIN: - fprintf(stderr, "HIGHGUI ERROR: V4L: Gain control in V4L is not supported\n"); - return -1; - case CV_CAP_PROP_EXPOSURE: - fprintf(stderr, "HIGHGUI ERROR: V4L: Exposure control in V4L is not supported\n"); - return -1; - default: - fprintf(stderr, "HIGHGUI ERROR: V4L: property #%d is not supported\n", property_id); - return -1; - } - - if (v4l1_ioctl(capture->deviceHandle, VIDIOCSPICT, &capture->imageProperties) < 0){ - fprintf(stderr, "HIGHGUI ERROR: V4L: Unable to set video informations\n"); - icvCloseCAM_V4L(capture); - return -1; - } - } - - /* all was OK */ - return 0; -} - -static int icvSetPropertyCAM_V4L(CvCaptureCAM_V4L* capture, int property_id, double value){ - static int width = 0, height = 0; - int retval; - - /* initialization */ - retval = 0; - - /* two subsequent calls setting WIDTH and HEIGHT will change - the video size */ - /* the first one will return an error, though. */ - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - width = cvRound(value); - capture->width = width; - if(width !=0 && height != 0) { - retval = icvSetVideoSize( capture, width, height); - width = height = 0; - } - break; - case CV_CAP_PROP_FRAME_HEIGHT: - height = cvRound(value); - capture->height = height; - if(width !=0 && height != 0) { - retval = icvSetVideoSize( capture, width, height); - width = height = 0; - } - break; - case CV_CAP_PROP_FPS: - struct v4l2_streamparm setfps; - memset (&setfps, 0, sizeof(struct v4l2_streamparm)); - setfps.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - setfps.parm.capture.timeperframe.numerator = 1; - setfps.parm.capture.timeperframe.denominator = value; - if (xioctl (capture->deviceHandle, VIDIOC_S_PARM, &setfps) < 0){ - fprintf(stderr, "HIGHGUI ERROR: V4L: Unable to set camera FPS\n"); - retval=0; - } - break; - default: - retval = icvSetControl(capture, property_id, value); - } - - /* return the the status */ - return retval; -} - -static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ){ - /* Deallocate space - Hopefully, no leaks */ - if (capture) { - v4l2_free_ranges(capture); - if (capture->is_v4l2_device == 0) { - if (capture->mmaps) { - free(capture->mmaps); - } - if (capture->memoryMap) { - v4l1_munmap(capture->memoryMap, capture->memoryBuffer.size); - } - if (capture->deviceHandle != -1) { - v4l1_close(capture->deviceHandle); - } - } else { - capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (xioctl(capture->deviceHandle, VIDIOC_STREAMOFF, &capture->type) < 0) { - perror ("Unable to stop the stream."); - } - for (unsigned int n_buffers2 = 0; n_buffers2 < capture->req.count; ++n_buffers2) { - if (-1 == v4l2_munmap (capture->buffers[n_buffers2].start, capture->buffers[n_buffers2].length)) { - perror ("munmap"); - } - } - - if (capture->deviceHandle != -1) { - v4l2_close(capture->deviceHandle); - } - } - - if (capture->frame.imageData) - cvFree(&capture->frame.imageData); - -#ifdef USE_TEMP_BUFFER - if (capture->buffers[MAX_V4L_BUFFERS].start) { - free(capture->buffers[MAX_V4L_BUFFERS].start); - capture->buffers[MAX_V4L_BUFFERS].start = NULL; - } -#endif - - free(capture->deviceName); - capture->deviceName = NULL; - //v4l2_free_ranges(capture); - //cvFree((void **)capture); - } -}; - - -class CvCaptureCAM_V4L_CPP : CvCapture -{ -public: - CvCaptureCAM_V4L_CPP() { captureV4L = 0; } - virtual ~CvCaptureCAM_V4L_CPP() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); -protected: - - CvCaptureCAM_V4L* captureV4L; -}; - -bool CvCaptureCAM_V4L_CPP::open( int index ) -{ - close(); - captureV4L = icvCaptureFromCAM_V4L(index); - return captureV4L != 0; -} - -void CvCaptureCAM_V4L_CPP::close() -{ - if( captureV4L ) - { - icvCloseCAM_V4L( captureV4L ); - cvFree( &captureV4L ); - } -} - -bool CvCaptureCAM_V4L_CPP::grabFrame() -{ - return captureV4L ? icvGrabFrameCAM_V4L( captureV4L ) != 0 : false; -} - -IplImage* CvCaptureCAM_V4L_CPP::retrieveFrame(int) -{ - return captureV4L ? icvRetrieveFrameCAM_V4L( captureV4L, 0 ) : 0; -} - -double CvCaptureCAM_V4L_CPP::getProperty( int propId ) -{ - return captureV4L ? icvGetPropertyCAM_V4L( captureV4L, propId ) : 0.0; -} - -bool CvCaptureCAM_V4L_CPP::setProperty( int propId, double value ) -{ - return captureV4L ? icvSetPropertyCAM_V4L( captureV4L, propId, value ) != 0 : false; -} - -CvCapture* cvCreateCameraCapture_V4L( int index ) -{ - CvCaptureCAM_V4L_CPP* capture = new CvCaptureCAM_V4L_CPP; - - if( capture->open( index )) - return (CvCapture*)capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_mil.cpp b/modules/highgui/src/cap_mil.cpp deleted file mode 100644 index 66aec54..0000000 --- a/modules/highgui/src/cap_mil.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "mil.h" - -#if _MSC_VER >= 1200 - #pragma warning( disable: 4711 ) - #pragma comment(lib,"mil.lib") - #pragma comment(lib,"milmet2.lib") -#endif - -#if defined _M_X64 - #pragma optimize("",off) -#endif - -/********************* Capturing video from camera via MIL *********************/ - -struct -{ - MIL_ID MilApplication; - int MilUser; -} g_Mil = {0,0}; //global structure for handling MIL application - -class CvCaptureCAM_MIL : public CvCapture -{ -public: - CvCaptureCAM_MIL() { init(); } - virtual ~CvCaptureCAM_MIL() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double) { return false; } - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_MIL; } // Return the type of the capture object: CV_CAP_VFW, etc... - -protected: - void init(); - - MIL_ID - MilSystem, /* System identifier. */ - MilDisplay, /* Display identifier. */ - MilDigitizer, /* Digitizer identifier. */ - MilImage; /* Image buffer identifier. */ - IplImage* rgb_frame; -}; - - -void CvCaptureCAM_MIL::init() -{ - MilSystem = MilDisplay = MilDigitizer = MilImage = M_NULL; - rgb_frame = 0; -} - -// Initialize camera input -bool CvCaptureCAM_MIL::open( int wIndex ) -{ - close(); - - if( g_Mil.MilApplication == M_NULL ) - { - assert(g_Mil.MilUser == 0); - MappAlloc(M_DEFAULT, &(g_Mil.MilApplication) ); - g_Mil.MilUser = 1; - } - else - { - assert(g_Mil.MilUser>0); - g_Mil.MilUser++; - } - - int dev_table[16] = { M_DEV0, M_DEV1, M_DEV2, M_DEV3, - M_DEV4, M_DEV5, M_DEV6, M_DEV7, - M_DEV8, M_DEV9, M_DEV10, M_DEV11, - M_DEV12, M_DEV13, M_DEV14, M_DEV15 }; - - //set default window size - int w = 320; - int h = 240; - - for( ; wIndex < 16; wIndex++ ) - { - MsysAlloc( M_SYSTEM_SETUP, //we use default system, - //if this does not work - //try to define exact board - //e.g.M_SYSTEM_METEOR,M_SYSTEM_METEOR_II... - dev_table[wIndex], - M_DEFAULT, - &MilSystem ); - - if( MilSystem != M_NULL ) - break; - } - if( MilSystem != M_NULL ) - { - MdigAlloc(MilSystem,M_DEFAULT, - M_CAMERA_SETUP, //default. May be M_NTSC or other - M_DEFAULT,&MilDigitizer); - - rgb_frame = cvCreateImage(cvSize(w,h), IPL_DEPTH_8U, 3 ); - MdigControl(MilDigitizer, M_GRAB_SCALE, 1.0 / 2); - - /*below line enables getting image vertical orientation - consistent with VFW but it introduces some image corruption - on MeteorII, so we left the image as is*/ - //MdigControl(MilDigitizer, M_GRAB_DIRECTION_Y, M_REVERSE ); - - MilImage = MbufAllocColor(MilSystem, 3, w, h, - 8+M_UNSIGNED, M_IMAGE + M_GRAB, M_NULL); - } - - return MilSystem != M_NULL; -} - -void CvCaptureCAM_MIL::close( CvCaptureCAM_MIL* capture ) -{ - if( MilSystem != M_NULL ) - { - MdigFree( MilDigitizer ); - MbufFree( MilImage ); - MsysFree( MilSystem ); - cvReleaseImage(&rgb_frame ); - - g_Mil.MilUser--; - if(!g_Mil.MilUser) - MappFree(g_Mil.MilApplication); - - MilSystem = M_NULL; - MilDigitizer = M_NULL; - } -} - - -bool CvCaptureCAM_MIL::grabFrame() -{ - if( MilSystem ) - { - MdigGrab(MilDigitizer, MilImage); - return true; - } - return false; -} - - -IplImage* CvCaptureCAM_MIL::retrieveFrame(int) -{ - MbufGetColor(MilImage, M_BGR24+M_PACKED, M_ALL_BAND, (void*)(rgb_frame->imageData)); - return rgb_frame; -} - -double CvCaptureCAM_MIL::getProperty( int property_id ) -{ - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return rgb_frame ? rgb_frame->width : 0; - case CV_CAP_PROP_FRAME_HEIGHT: - return rgb_frame ? rgb_frame->height : 0; - } - return 0; -} - -bool CvCaptureCAM_MIL::setProperty( int, double ) -{ - return false; -} - - -CvCapture* cvCreateCameraCapture_MIL( int index ) -{ - CvCaptureCAM_MIL* capture = new CvCaptureCAM_MIL; - - if( capture->open( index )) - return capture; - - delete capture; - return 0; -} diff --git a/modules/highgui/src/cap_msmf.cpp b/modules/highgui/src/cap_msmf.cpp deleted file mode 100644 index df52f04..0000000 --- a/modules/highgui/src/cap_msmf.cpp +++ /dev/null @@ -1,3535 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#if (defined WIN32 || defined _WIN32) && defined HAVE_MSMF -/* - Media Foundation-based Video Capturing module is based on - videoInput library by Evgeny Pereguda: - http://www.codeproject.com/Articles/559437/Capturing-of-video-from-web-camera-on-Windows-7-an - Originaly licensed under The Code Project Open License (CPOL) 1.02: - http://www.codeproject.com/info/cpol10.aspx -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#pragma warning(disable:4503) -#pragma comment(lib, "mfplat") -#pragma comment(lib, "mf") -#pragma comment(lib, "mfuuid") -#pragma comment(lib, "Strmiids") -#pragma comment(lib, "Mfreadwrite") -#pragma comment(lib, "MinCore_Downlevel") - -// for ComPtr usage -#include -using namespace Microsoft::WRL; - -struct IMFMediaType; -struct IMFActivate; -struct IMFMediaSource; -struct IMFAttributes; - -namespace -{ - -template void SafeRelease(T **ppT) -{ - if (*ppT) - { - (*ppT)->Release(); - *ppT = NULL; - } -} - -/// Class for printing info into consol -class DebugPrintOut -{ -public: - ~DebugPrintOut(void); - static DebugPrintOut& getInstance(); - void printOut(const wchar_t *format, ...); - void setVerbose(bool state); - bool verbose; -private: - DebugPrintOut(void); -}; - -// Structure for collecting info about types of video, which are supported by current video device -struct MediaType -{ - unsigned int MF_MT_FRAME_SIZE; - unsigned int height; - unsigned int width; - unsigned int MF_MT_YUV_MATRIX; - unsigned int MF_MT_VIDEO_LIGHTING; - int MF_MT_DEFAULT_STRIDE; // stride is negative if image is bottom-up - unsigned int MF_MT_VIDEO_CHROMA_SITING; - GUID MF_MT_AM_FORMAT_TYPE; - wchar_t *pMF_MT_AM_FORMAT_TYPEName; - unsigned int MF_MT_FIXED_SIZE_SAMPLES; - unsigned int MF_MT_VIDEO_NOMINAL_RANGE; - unsigned int MF_MT_FRAME_RATE_NUMERATOR; - unsigned int MF_MT_FRAME_RATE_DENOMINATOR; - unsigned int MF_MT_PIXEL_ASPECT_RATIO; - unsigned int MF_MT_PIXEL_ASPECT_RATIO_low; - unsigned int MF_MT_ALL_SAMPLES_INDEPENDENT; - unsigned int MF_MT_FRAME_RATE_RANGE_MIN; - unsigned int MF_MT_FRAME_RATE_RANGE_MIN_low; - unsigned int MF_MT_SAMPLE_SIZE; - unsigned int MF_MT_VIDEO_PRIMARIES; - unsigned int MF_MT_INTERLACE_MODE; - unsigned int MF_MT_FRAME_RATE_RANGE_MAX; - unsigned int MF_MT_FRAME_RATE_RANGE_MAX_low; - GUID MF_MT_MAJOR_TYPE; - GUID MF_MT_SUBTYPE; - wchar_t *pMF_MT_MAJOR_TYPEName; - wchar_t *pMF_MT_SUBTYPEName; - MediaType(); - ~MediaType(); - void Clear(); -}; - -/// Class for parsing info from IMFMediaType into the local MediaType -class FormatReader -{ -public: - static MediaType Read(IMFMediaType *pType); - ~FormatReader(void); -private: - FormatReader(void); -}; - -DWORD WINAPI MainThreadFunction( LPVOID lpParam ); -typedef void(*emergensyStopEventCallback)(int, void *); - -class RawImage -{ -public: - ~RawImage(void); - // Function of creation of the instance of the class - static long CreateInstance(RawImage **ppRImage,unsigned int size); - void setCopy(const BYTE * pSampleBuffer); - void fastCopy(const BYTE * pSampleBuffer); - unsigned char * getpPixels(); - bool isNew(); - unsigned int getSize(); -private: - bool ri_new; - unsigned int ri_size; - unsigned char *ri_pixels; - RawImage(unsigned int size); -}; - -// Class for grabbing image from video stream -class ImageGrabber : public IMFSampleGrabberSinkCallback -{ -public: - ~ImageGrabber(void); - HRESULT initImageGrabber(IMFMediaSource *pSource, GUID VideoFormat); - HRESULT startGrabbing(void); - void pauseGrabbing(); - void resumeGrabbing(); - void stopGrabbing(); - RawImage *getRawImage(); - // Function of creation of the instance of the class - static HRESULT CreateInstance(ImageGrabber **ppIG, unsigned int deviceID, bool synchronous = false); - - const HANDLE ig_hFrameReady; - const HANDLE ig_hFrameGrabbed; - const HANDLE ig_hFinish; - -private: - bool ig_RIE; - bool ig_Close; - bool ig_Synchronous; - long m_cRef; - unsigned int ig_DeviceID; - IMFMediaSource *ig_pSource; - IMFMediaSession *ig_pSession; - IMFTopology *ig_pTopology; - RawImage *ig_RIFirst; - RawImage *ig_RISecond; - RawImage *ig_RIOut; - ImageGrabber(unsigned int deviceID, bool synchronous); - HRESULT CreateTopology(IMFMediaSource *pSource, IMFActivate *pSinkActivate, IMFTopology **ppTopo); - HRESULT AddSourceNode(IMFTopology *pTopology, IMFMediaSource *pSource, - IMFPresentationDescriptor *pPD, IMFStreamDescriptor *pSD, IMFTopologyNode **ppNode); - HRESULT AddOutputNode(IMFTopology *pTopology, IMFActivate *pActivate, DWORD dwId, IMFTopologyNode **ppNode); - // IUnknown methods - STDMETHODIMP QueryInterface(REFIID iid, void** ppv); - STDMETHODIMP_(ULONG) AddRef(); - STDMETHODIMP_(ULONG) Release(); - // IMFClockStateSink methods - STDMETHODIMP OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset); - STDMETHODIMP OnClockStop(MFTIME hnsSystemTime); - STDMETHODIMP OnClockPause(MFTIME hnsSystemTime); - STDMETHODIMP OnClockRestart(MFTIME hnsSystemTime); - STDMETHODIMP OnClockSetRate(MFTIME hnsSystemTime, float flRate); - // IMFSampleGrabberSinkCallback methods - STDMETHODIMP OnSetPresentationClock(IMFPresentationClock* pClock); - STDMETHODIMP OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags, - LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer, - DWORD dwSampleSize); - STDMETHODIMP OnShutdown(); -}; - -/// Class for controlling of thread of the grabbing raw data from video device -class ImageGrabberThread -{ - friend DWORD WINAPI MainThreadFunction( LPVOID lpParam ); -public: - ~ImageGrabberThread(void); - static HRESULT CreateInstance(ImageGrabberThread **ppIGT, IMFMediaSource *pSource, unsigned int deviceID, bool synchronious = false); - void start(); - void stop(); - void setEmergencyStopEvent(void *userData, void(*func)(int, void *)); - ImageGrabber *getImageGrabber(); -protected: - virtual void run(); -private: - ImageGrabberThread(IMFMediaSource *pSource, unsigned int deviceID, bool synchronious); - HANDLE igt_Handle; - DWORD igt_ThreadIdArray; - ImageGrabber *igt_pImageGrabber; - emergensyStopEventCallback igt_func; - void *igt_userData; - bool igt_stop; - unsigned int igt_DeviceID; -}; - -// Structure for collecting info about one parametr of current video device -struct Parametr -{ - long CurrentValue; - long Min; - long Max; - long Step; - long Default; - long Flag; - Parametr(); -}; - -// Structure for collecting info about 17 parametrs of current video device -struct CamParametrs -{ - Parametr Brightness; - Parametr Contrast; - Parametr Hue; - Parametr Saturation; - Parametr Sharpness; - Parametr Gamma; - Parametr ColorEnable; - Parametr WhiteBalance; - Parametr BacklightCompensation; - Parametr Gain; - Parametr Pan; - Parametr Tilt; - Parametr Roll; - Parametr Zoom; - Parametr Exposure; - Parametr Iris; - Parametr Focus; -}; - -typedef std::wstring String; -typedef std::vector vectorNum; -typedef std::map SUBTYPEMap; -typedef std::map FrameRateMap; -typedef void(*emergensyStopEventCallback)(int, void *); - -/// Class for controlling of video device -class videoDevice -{ -public: - videoDevice(void); - ~videoDevice(void); - void closeDevice(); - CamParametrs getParametrs(); - void setParametrs(CamParametrs parametrs); - void setEmergencyStopEvent(void *userData, void(*func)(int, void *)); - long readInfoOfDevice(IMFActivate *pActivate, unsigned int Num); - wchar_t *getName(); - int getCountFormats(); - unsigned int getWidth(); - unsigned int getHeight(); - MediaType getFormat(unsigned int id); - bool setupDevice(unsigned int w, unsigned int h, unsigned int idealFramerate = 0); - bool setupDevice(unsigned int id); - bool isDeviceSetup(); - bool isDeviceMediaSource(); - bool isDeviceRawDataSource(); - bool isFrameNew(); - IMFMediaSource *getMediaSource(); - RawImage *getRawImageOut(); -private: - enum typeLock - { - MediaSourceLock, - RawDataLock, - OpenLock - } vd_LockOut; - wchar_t *vd_pFriendlyName; - ImageGrabberThread *vd_pImGrTh; - CamParametrs vd_PrevParametrs; - unsigned int vd_Width; - unsigned int vd_Height; - unsigned int vd_CurrentNumber; - bool vd_IsSetuped; - std::map vd_CaptureFormats; - std::vector vd_CurrentFormats; - IMFMediaSource *vd_pSource; - emergensyStopEventCallback vd_func; - void *vd_userData; - HRESULT enumerateCaptureFormats(IMFMediaSource *pSource); - long setDeviceFormat(IMFMediaSource *pSource, unsigned long dwFormatIndex); - void buildLibraryofTypes(); - int findType(unsigned int size, unsigned int frameRate = 0); - long resetDevice(IMFActivate *pActivate); - long initDevice(); - long checkDevice(IMFAttributes *pAttributes, IMFActivate **pDevice); -}; - -/// Class for managing of list of video devices -class videoDevices -{ -public: - ~videoDevices(void); - long initDevices(IMFAttributes *pAttributes); - static videoDevices& getInstance(); - videoDevice *getDevice(unsigned int i); - unsigned int getCount(); - void clearDevices(); -private: - UINT32 count; - std::vector vds_Devices; - videoDevices(void); -}; - -// Class for creating of Media Foundation context -class Media_Foundation -{ -public: - virtual ~Media_Foundation(void); - static Media_Foundation& getInstance(); - bool buildListOfDevices(); -private: - Media_Foundation(void); -}; - -/// The only visiable class for controlling of video devices in format singelton -class videoInput -{ -public: - virtual ~videoInput(void); - // Getting of static instance of videoInput class - static videoInput& getInstance(); - // Closing video device with deviceID - void closeDevice(int deviceID); - // Setting callback function for emergency events(for example: removing video device with deviceID) with userData - void setEmergencyStopEvent(int deviceID, void *userData, void(*func)(int, void *)); - // Closing all devices - void closeAllDevices(); - // Getting of parametrs of video device with deviceID - CamParametrs getParametrs(int deviceID); - // Setting of parametrs of video device with deviceID - void setParametrs(int deviceID, CamParametrs parametrs); - // Getting numbers of existence videodevices with listing in consol - unsigned int listDevices(bool silent = false); - // Getting numbers of formats, which are supported by videodevice with deviceID - unsigned int getCountFormats(int deviceID); - // Getting width of image, which is getting from videodevice with deviceID - unsigned int getWidth(int deviceID); - // Getting height of image, which is getting from videodevice with deviceID - unsigned int getHeight(int deviceID); - // Getting name of videodevice with deviceID - wchar_t *getNameVideoDevice(int deviceID); - // Getting interface MediaSource for Media Foundation from videodevice with deviceID - IMFMediaSource *getMediaSource(int deviceID); - // Getting format with id, which is supported by videodevice with deviceID - MediaType getFormat(int deviceID, int unsigned id); - // Checking of existence of the suitable video devices - bool isDevicesAcceable(); - // Checking of using the videodevice with deviceID - bool isDeviceSetup(int deviceID); - // Checking of using MediaSource from videodevice with deviceID - bool isDeviceMediaSource(int deviceID); - // Checking of using Raw Data of pixels from videodevice with deviceID - bool isDeviceRawDataSource(int deviceID); - // Setting of the state of outprinting info in console - static void setVerbose(bool state); - // Initialization of video device with deviceID by media type with id - bool setupDevice(int deviceID, unsigned int id = 0); - // Initialization of video device with deviceID by wisth w, height h and fps idealFramerate - bool setupDevice(int deviceID, unsigned int w, unsigned int h, unsigned int idealFramerate = 30); - // Checking of recivig of new frame from video device with deviceID - bool isFrameNew(int deviceID); - // Writing of Raw Data pixels from video device with deviceID with correction of RedAndBlue flipping flipRedAndBlue and vertical flipping flipImage - bool getPixels(int deviceID, unsigned char * pixels, bool flipRedAndBlue = false, bool flipImage = false); - static void processPixels(unsigned char * src, unsigned char * dst, unsigned int width, unsigned int height, unsigned int bpp, bool bRGB, bool bFlip); -private: - bool accessToDevices; - videoInput(void); - void updateListOfDevices(); -}; - -DebugPrintOut::DebugPrintOut(void):verbose(true) -{ -} - -DebugPrintOut::~DebugPrintOut(void) -{ -} - -DebugPrintOut& DebugPrintOut::getInstance() -{ - static DebugPrintOut instance; - return instance; -} - -void DebugPrintOut::printOut(const wchar_t *format, ...) -{ - if(verbose) - { - int i = 0; - wchar_t *p = NULL; - va_list args; - va_start(args, format); - if(wcscmp(format, L"%i")) - { - i = va_arg (args, int); - } - if(wcscmp(format, L"%s")) - { - p = va_arg (args, wchar_t *); - } - wprintf(format, i,p); - va_end (args); - } -} - -void DebugPrintOut::setVerbose(bool state) -{ - verbose = state; -} - -LPCWSTR GetGUIDNameConstNew(const GUID& guid); -HRESULT GetGUIDNameNew(const GUID& guid, WCHAR **ppwsz); -HRESULT LogAttributeValueByIndexNew(IMFAttributes *pAttr, DWORD index); -HRESULT SpecialCaseAttributeValueNew(GUID guid, const PROPVARIANT& var, MediaType &out); - -unsigned int *GetParametr(GUID guid, MediaType &out) -{ - if(guid == MF_MT_YUV_MATRIX) - return &(out.MF_MT_YUV_MATRIX); - if(guid == MF_MT_VIDEO_LIGHTING) - return &(out.MF_MT_VIDEO_LIGHTING); - if(guid == MF_MT_DEFAULT_STRIDE) - return (unsigned int*)&(out.MF_MT_DEFAULT_STRIDE); - if(guid == MF_MT_VIDEO_CHROMA_SITING) - return &(out.MF_MT_VIDEO_CHROMA_SITING); - if(guid == MF_MT_VIDEO_NOMINAL_RANGE) - return &(out.MF_MT_VIDEO_NOMINAL_RANGE); - if(guid == MF_MT_ALL_SAMPLES_INDEPENDENT) - return &(out.MF_MT_ALL_SAMPLES_INDEPENDENT); - if(guid == MF_MT_FIXED_SIZE_SAMPLES) - return &(out.MF_MT_FIXED_SIZE_SAMPLES); - if(guid == MF_MT_SAMPLE_SIZE) - return &(out.MF_MT_SAMPLE_SIZE); - if(guid == MF_MT_VIDEO_PRIMARIES) - return &(out.MF_MT_VIDEO_PRIMARIES); - if(guid == MF_MT_INTERLACE_MODE) - return &(out.MF_MT_INTERLACE_MODE); - return NULL; -} - -HRESULT LogAttributeValueByIndexNew(IMFAttributes *pAttr, DWORD index, MediaType &out) -{ - WCHAR *pGuidName = NULL; - WCHAR *pGuidValName = NULL; - GUID guid = { 0 }; - PROPVARIANT var; - PropVariantInit(&var); - HRESULT hr = pAttr->GetItemByIndex(index, &guid, &var); - if (FAILED(hr)) - { - goto done; - } - hr = GetGUIDNameNew(guid, &pGuidName); - if (FAILED(hr)) - { - goto done; - } - hr = SpecialCaseAttributeValueNew(guid, var, out); - unsigned int *p; - if (FAILED(hr)) - { - goto done; - } - if (hr == S_FALSE) - { - switch (var.vt) - { - case VT_UI4: - p = GetParametr(guid, out); - if(p) - { - *p = var.ulVal; - } - break; - case VT_UI8: - break; - case VT_R8: - break; - case VT_CLSID: - if(guid == MF_MT_AM_FORMAT_TYPE) - { - hr = GetGUIDNameNew(*var.puuid, &pGuidValName); - if (SUCCEEDED(hr)) - { - out.MF_MT_AM_FORMAT_TYPE = MF_MT_AM_FORMAT_TYPE; - out.pMF_MT_AM_FORMAT_TYPEName = pGuidValName; - pGuidValName = NULL; - } - } - if(guid == MF_MT_MAJOR_TYPE) - { - hr = GetGUIDNameNew(*var.puuid, &pGuidValName); - if (SUCCEEDED(hr)) - { - out.MF_MT_MAJOR_TYPE = MF_MT_MAJOR_TYPE; - out.pMF_MT_MAJOR_TYPEName = pGuidValName; - pGuidValName = NULL; - } - } - if(guid == MF_MT_SUBTYPE) - { - hr = GetGUIDNameNew(*var.puuid, &pGuidValName); - if (SUCCEEDED(hr)) - { - out.MF_MT_SUBTYPE = MF_MT_SUBTYPE; - out.pMF_MT_SUBTYPEName = pGuidValName; - pGuidValName = NULL; - } - } - break; - case VT_LPWSTR: - break; - case VT_VECTOR | VT_UI1: - break; - case VT_UNKNOWN: - break; - default: - break; - } - } -done: - CoTaskMemFree(pGuidName); - CoTaskMemFree(pGuidValName); - PropVariantClear(&var); - return hr; -} - -HRESULT GetGUIDNameNew(const GUID& guid, WCHAR **ppwsz) -{ - HRESULT hr = S_OK; - WCHAR *pName = NULL; - LPCWSTR pcwsz = GetGUIDNameConstNew(guid); - if (pcwsz) - { - size_t cchLength = 0; - hr = StringCchLengthW(pcwsz, STRSAFE_MAX_CCH, &cchLength); - if (FAILED(hr)) - { - goto done; - } - pName = (WCHAR*)CoTaskMemAlloc((cchLength + 1) * sizeof(WCHAR)); - if (pName == NULL) - { - hr = E_OUTOFMEMORY; - goto done; - } - hr = StringCchCopyW(pName, cchLength + 1, pcwsz); - if (FAILED(hr)) - { - goto done; - } - } - else - { - hr = StringFromCLSID(guid, &pName); - } -done: - if (FAILED(hr)) - { - *ppwsz = NULL; - CoTaskMemFree(pName); - } - else - { - *ppwsz = pName; - } - return hr; -} - -void LogUINT32AsUINT64New(const PROPVARIANT& var, UINT32 &uHigh, UINT32 &uLow) -{ - Unpack2UINT32AsUINT64(var.uhVal.QuadPart, &uHigh, &uLow); -} - -float OffsetToFloatNew(const MFOffset& offset) -{ - return offset.value + (static_cast(offset.fract) / 65536.0f); -} - -HRESULT LogVideoAreaNew(const PROPVARIANT& var) -{ - if (var.caub.cElems < sizeof(MFVideoArea)) - { - return S_OK; - } - return S_OK; -} - -HRESULT SpecialCaseAttributeValueNew(GUID guid, const PROPVARIANT& var, MediaType &out) -{ - if (guid == MF_MT_DEFAULT_STRIDE) - { - out.MF_MT_DEFAULT_STRIDE = var.intVal; - } else - if (guid == MF_MT_FRAME_SIZE) - { - UINT32 uHigh = 0, uLow = 0; - LogUINT32AsUINT64New(var, uHigh, uLow); - out.width = uHigh; - out.height = uLow; - out.MF_MT_FRAME_SIZE = out.width * out.height; - } - else - if (guid == MF_MT_FRAME_RATE) - { - UINT32 uHigh = 0, uLow = 0; - LogUINT32AsUINT64New(var, uHigh, uLow); - out.MF_MT_FRAME_RATE_NUMERATOR = uHigh; - out.MF_MT_FRAME_RATE_DENOMINATOR = uLow; - } - else - if (guid == MF_MT_FRAME_RATE_RANGE_MAX) - { - UINT32 uHigh = 0, uLow = 0; - LogUINT32AsUINT64New(var, uHigh, uLow); - out.MF_MT_FRAME_RATE_RANGE_MAX = uHigh; - out.MF_MT_FRAME_RATE_RANGE_MAX_low = uLow; - } - else - if (guid == MF_MT_FRAME_RATE_RANGE_MIN) - { - UINT32 uHigh = 0, uLow = 0; - LogUINT32AsUINT64New(var, uHigh, uLow); - out.MF_MT_FRAME_RATE_RANGE_MIN = uHigh; - out.MF_MT_FRAME_RATE_RANGE_MIN_low = uLow; - } - else - if (guid == MF_MT_PIXEL_ASPECT_RATIO) - { - UINT32 uHigh = 0, uLow = 0; - LogUINT32AsUINT64New(var, uHigh, uLow); - out.MF_MT_PIXEL_ASPECT_RATIO = uHigh; - out.MF_MT_PIXEL_ASPECT_RATIO_low = uLow; - } - else - { - return S_FALSE; - } - return S_OK; -} - -#ifndef IF_EQUAL_RETURN -#define IF_EQUAL_RETURN(param, val) if(val == param) return L#val -#endif - -LPCWSTR GetGUIDNameConstNew(const GUID& guid) -{ - IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_SUBTYPE); - IF_EQUAL_RETURN(guid, MF_MT_ALL_SAMPLES_INDEPENDENT); - IF_EQUAL_RETURN(guid, MF_MT_FIXED_SIZE_SAMPLES); - IF_EQUAL_RETURN(guid, MF_MT_COMPRESSED); - IF_EQUAL_RETURN(guid, MF_MT_SAMPLE_SIZE); - IF_EQUAL_RETURN(guid, MF_MT_WRAPPED_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_NUM_CHANNELS); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FLOAT_SAMPLES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_AVG_BYTES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BLOCK_ALIGNMENT); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BITS_PER_SAMPLE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_VALID_BITS_PER_SAMPLE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_BLOCK); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_CHANNEL_MASK); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FOLDDOWN_MATRIX); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKREF); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKTARGET); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGREF); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGTARGET); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_PREFER_WAVEFORMATEX); - IF_EQUAL_RETURN(guid, MF_MT_AAC_PAYLOAD_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_SIZE); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MAX); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MIN); - IF_EQUAL_RETURN(guid, MF_MT_PIXEL_ASPECT_RATIO); - IF_EQUAL_RETURN(guid, MF_MT_DRM_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_PAD_CONTROL_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_SOURCE_CONTENT_HINT); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_CHROMA_SITING); - IF_EQUAL_RETURN(guid, MF_MT_INTERLACE_MODE); - IF_EQUAL_RETURN(guid, MF_MT_TRANSFER_FUNCTION); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_PRIMARIES); - IF_EQUAL_RETURN(guid, MF_MT_CUSTOM_VIDEO_PRIMARIES); - IF_EQUAL_RETURN(guid, MF_MT_YUV_MATRIX); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_LIGHTING); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_NOMINAL_RANGE); - IF_EQUAL_RETURN(guid, MF_MT_GEOMETRIC_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_MINIMUM_DISPLAY_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_ENABLED); - IF_EQUAL_RETURN(guid, MF_MT_AVG_BITRATE); - IF_EQUAL_RETURN(guid, MF_MT_AVG_BIT_ERROR_RATE); - IF_EQUAL_RETURN(guid, MF_MT_MAX_KEYFRAME_SPACING); - IF_EQUAL_RETURN(guid, MF_MT_DEFAULT_STRIDE); - IF_EQUAL_RETURN(guid, MF_MT_PALETTE); - IF_EQUAL_RETURN(guid, MF_MT_USER_DATA); - IF_EQUAL_RETURN(guid, MF_MT_AM_FORMAT_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG_START_TIME_CODE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_PROFILE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_LEVEL); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_MPEG_SEQUENCE_HEADER); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_0); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_0); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_1); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_1); - IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_SRC_PACK); - IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_CTRL_PACK); - IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_HEADER); - IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_FORMAT); - IF_EQUAL_RETURN(guid, MF_MT_IMAGE_LOSS_TOLERANT); - IF_EQUAL_RETURN(guid, MF_MT_MPEG4_SAMPLE_DESCRIPTION); - IF_EQUAL_RETURN(guid, MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY); - IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_4CC); - IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_WAVE_FORMAT_TAG); - // Media types - IF_EQUAL_RETURN(guid, MFMediaType_Audio); - IF_EQUAL_RETURN(guid, MFMediaType_Video); - IF_EQUAL_RETURN(guid, MFMediaType_Protected); - IF_EQUAL_RETURN(guid, MFMediaType_SAMI); - IF_EQUAL_RETURN(guid, MFMediaType_Script); - IF_EQUAL_RETURN(guid, MFMediaType_Image); - IF_EQUAL_RETURN(guid, MFMediaType_HTML); - IF_EQUAL_RETURN(guid, MFMediaType_Binary); - IF_EQUAL_RETURN(guid, MFMediaType_FileTransfer); - IF_EQUAL_RETURN(guid, MFVideoFormat_AI44); // FCC('AI44') - IF_EQUAL_RETURN(guid, MFVideoFormat_ARGB32); // D3DFMT_A8R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_AYUV); // FCC('AYUV') - IF_EQUAL_RETURN(guid, MFVideoFormat_DV25); // FCC('dv25') - IF_EQUAL_RETURN(guid, MFVideoFormat_DV50); // FCC('dv50') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVH1); // FCC('dvh1') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVSD); // FCC('dvsd') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVSL); // FCC('dvsl') - IF_EQUAL_RETURN(guid, MFVideoFormat_H264); // FCC('H264') - IF_EQUAL_RETURN(guid, MFVideoFormat_I420); // FCC('I420') - IF_EQUAL_RETURN(guid, MFVideoFormat_IYUV); // FCC('IYUV') - IF_EQUAL_RETURN(guid, MFVideoFormat_M4S2); // FCC('M4S2') - IF_EQUAL_RETURN(guid, MFVideoFormat_MJPG); - IF_EQUAL_RETURN(guid, MFVideoFormat_MP43); // FCC('MP43') - IF_EQUAL_RETURN(guid, MFVideoFormat_MP4S); // FCC('MP4S') - IF_EQUAL_RETURN(guid, MFVideoFormat_MP4V); // FCC('MP4V') - IF_EQUAL_RETURN(guid, MFVideoFormat_MPG1); // FCC('MPG1') - IF_EQUAL_RETURN(guid, MFVideoFormat_MSS1); // FCC('MSS1') - IF_EQUAL_RETURN(guid, MFVideoFormat_MSS2); // FCC('MSS2') - IF_EQUAL_RETURN(guid, MFVideoFormat_NV11); // FCC('NV11') - IF_EQUAL_RETURN(guid, MFVideoFormat_NV12); // FCC('NV12') - IF_EQUAL_RETURN(guid, MFVideoFormat_P010); // FCC('P010') - IF_EQUAL_RETURN(guid, MFVideoFormat_P016); // FCC('P016') - IF_EQUAL_RETURN(guid, MFVideoFormat_P210); // FCC('P210') - IF_EQUAL_RETURN(guid, MFVideoFormat_P216); // FCC('P216') - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB24); // D3DFMT_R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB32); // D3DFMT_X8R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB555); // D3DFMT_X1R5G5B5 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB565); // D3DFMT_R5G6B5 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB8); - IF_EQUAL_RETURN(guid, MFVideoFormat_UYVY); // FCC('UYVY') - IF_EQUAL_RETURN(guid, MFVideoFormat_v210); // FCC('v210') - IF_EQUAL_RETURN(guid, MFVideoFormat_v410); // FCC('v410') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV1); // FCC('WMV1') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV2); // FCC('WMV2') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV3); // FCC('WMV3') - IF_EQUAL_RETURN(guid, MFVideoFormat_WVC1); // FCC('WVC1') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y210); // FCC('Y210') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y216); // FCC('Y216') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y410); // FCC('Y410') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y416); // FCC('Y416') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y41P); - IF_EQUAL_RETURN(guid, MFVideoFormat_Y41T); - IF_EQUAL_RETURN(guid, MFVideoFormat_YUY2); // FCC('YUY2') - IF_EQUAL_RETURN(guid, MFVideoFormat_YV12); // FCC('YV12') - IF_EQUAL_RETURN(guid, MFVideoFormat_YVYU); - IF_EQUAL_RETURN(guid, MFAudioFormat_PCM); // WAVE_FORMAT_PCM - IF_EQUAL_RETURN(guid, MFAudioFormat_Float); // WAVE_FORMAT_IEEE_FLOAT - IF_EQUAL_RETURN(guid, MFAudioFormat_DTS); // WAVE_FORMAT_DTS - IF_EQUAL_RETURN(guid, MFAudioFormat_Dolby_AC3_SPDIF); // WAVE_FORMAT_DOLBY_AC3_SPDIF - IF_EQUAL_RETURN(guid, MFAudioFormat_DRM); // WAVE_FORMAT_DRM - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV8); // WAVE_FORMAT_WMAUDIO2 - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV9); // WAVE_FORMAT_WMAUDIO3 - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudio_Lossless); // WAVE_FORMAT_WMAUDIO_LOSSLESS - IF_EQUAL_RETURN(guid, MFAudioFormat_WMASPDIF); // WAVE_FORMAT_WMASPDIF - IF_EQUAL_RETURN(guid, MFAudioFormat_MSP1); // WAVE_FORMAT_WMAVOICE9 - IF_EQUAL_RETURN(guid, MFAudioFormat_MP3); // WAVE_FORMAT_MPEGLAYER3 - IF_EQUAL_RETURN(guid, MFAudioFormat_MPEG); // WAVE_FORMAT_MPEG - IF_EQUAL_RETURN(guid, MFAudioFormat_AAC); // WAVE_FORMAT_MPEG_HEAAC - IF_EQUAL_RETURN(guid, MFAudioFormat_ADTS); // WAVE_FORMAT_MPEG_ADTS_AAC - return NULL; -} - -FormatReader::FormatReader(void) -{ -} - -MediaType FormatReader::Read(IMFMediaType *pType) -{ - UINT32 count = 0; - HRESULT hr = S_OK; - MediaType out; - hr = pType->LockStore(); - if (FAILED(hr)) - { - return out; - } - hr = pType->GetCount(&count); - if (FAILED(hr)) - { - return out; - } - for (UINT32 i = 0; i < count; i++) - { - hr = LogAttributeValueByIndexNew(pType, i, out); - if (FAILED(hr)) - { - break; - } - } - hr = pType->UnlockStore(); - if (FAILED(hr)) - { - return out; - } - return out; -} - -FormatReader::~FormatReader(void) -{ -} - -#define CHECK_HR(x) if (FAILED(x)) { goto done; } - -ImageGrabber::ImageGrabber(unsigned int deviceID, bool synchronous): - m_cRef(1), - ig_DeviceID(deviceID), - ig_pSource(NULL), - ig_pSession(NULL), - ig_pTopology(NULL), - ig_RIE(true), - ig_Close(false), - ig_Synchronous(synchronous), - ig_hFrameReady(synchronous ? CreateEvent(NULL, FALSE, FALSE, NULL): 0), - ig_hFrameGrabbed(synchronous ? CreateEvent(NULL, FALSE, TRUE, NULL): 0), - ig_hFinish(CreateEvent(NULL, TRUE, FALSE, NULL)) -{} - -ImageGrabber::~ImageGrabber(void) -{ - if (ig_pSession) - { - ig_pSession->Shutdown(); - } - - CloseHandle(ig_hFinish); - - if (ig_Synchronous) - { - CloseHandle(ig_hFrameReady); - CloseHandle(ig_hFrameGrabbed); - } - - SafeRelease(&ig_pSession); - SafeRelease(&ig_pTopology); - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: Destroing instance of the ImageGrabber class\n", ig_DeviceID); -} - -HRESULT ImageGrabber::initImageGrabber(IMFMediaSource *pSource, GUID VideoFormat) -{ - ComPtr pSinkActivate = NULL; - ComPtr pType = NULL; - ComPtr pPD = NULL; - ComPtr pSD = NULL; - ComPtr pHandler = NULL; - ComPtr pCurrentType = NULL; - HRESULT hr = S_OK; - MediaType MT; - // Clean up. - if (ig_pSession) - { - ig_pSession->Shutdown(); - } - SafeRelease(&ig_pSession); - SafeRelease(&ig_pTopology); - ig_pSource = pSource; - hr = pSource->CreatePresentationDescriptor(&pPD); - if (FAILED(hr)) - { - goto err; - } - BOOL fSelected; - hr = pPD->GetStreamDescriptorByIndex(0, &fSelected, &pSD); - if (FAILED(hr)) { - goto err; - } - hr = pSD->GetMediaTypeHandler(&pHandler); - if (FAILED(hr)) { - goto err; - } - DWORD cTypes = 0; - hr = pHandler->GetMediaTypeCount(&cTypes); - if (FAILED(hr)) { - goto err; - } - if(cTypes > 0) - { - hr = pHandler->GetCurrentMediaType(&pCurrentType); - if (FAILED(hr)) { - goto err; - } - MT = FormatReader::Read(pCurrentType.Get()); - } -err: - unsigned int sizeRawImage = 0; - if(VideoFormat == MFVideoFormat_RGB24) - { - sizeRawImage = MT.MF_MT_FRAME_SIZE * 3; - } - else if(VideoFormat == MFVideoFormat_RGB32) - { - sizeRawImage = MT.MF_MT_FRAME_SIZE * 4; - } - CHECK_HR(hr = RawImage::CreateInstance(&ig_RIFirst, sizeRawImage)); - CHECK_HR(hr = RawImage::CreateInstance(&ig_RISecond, sizeRawImage)); - ig_RIOut = ig_RISecond; - // Configure the media type that the Sample Grabber will receive. - // Setting the major and subtype is usually enough for the topology loader - // to resolve the topology. - CHECK_HR(hr = MFCreateMediaType(pType.GetAddressOf())); - CHECK_HR(hr = pType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video)); - CHECK_HR(hr = pType->SetGUID(MF_MT_SUBTYPE, VideoFormat)); - // Create the sample grabber sink. - CHECK_HR(hr = MFCreateSampleGrabberSinkActivate(pType.Get(), this, pSinkActivate.GetAddressOf())); - // To run as fast as possible, set this attribute (requires Windows 7): - CHECK_HR(hr = pSinkActivate->SetUINT32(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK, TRUE)); - // Create the Media Session. - CHECK_HR(hr = MFCreateMediaSession(NULL, &ig_pSession)); - // Create the topology. - CHECK_HR(hr = CreateTopology(pSource, pSinkActivate.Get(), &ig_pTopology)); -done: - // Clean up. - if (FAILED(hr)) - { - if (ig_pSession) - { - ig_pSession->Shutdown(); - } - SafeRelease(&ig_pSession); - SafeRelease(&ig_pTopology); - } - - return hr; -} - -void ImageGrabber::stopGrabbing() -{ - if(ig_pSession) - ig_pSession->Stop(); - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: Stopping of of grabbing of images\n", ig_DeviceID); -} - -HRESULT ImageGrabber::startGrabbing(void) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - ComPtr pEvent = NULL; - PROPVARIANT var; - PropVariantInit(&var); - HRESULT hr = S_OK; - hr = ig_pSession->SetTopology(0, ig_pTopology); - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: Start Grabbing of the images\n", ig_DeviceID); - hr = ig_pSession->Start(&GUID_NULL, &var); - for(;;) - { - HRESULT hrStatus = S_OK; - MediaEventType met; - if(!ig_pSession) break; - hr = ig_pSession->GetEvent(0, &pEvent); - if(!SUCCEEDED(hr)) - { - hr = S_OK; - goto done; - } - hr = pEvent->GetStatus(&hrStatus); - if(!SUCCEEDED(hr)) - { - hr = S_OK; - goto done; - } - hr = pEvent->GetType(&met); - if(!SUCCEEDED(hr)) - { - hr = S_OK; - goto done; - } - if (met == MESessionEnded) - { - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: MESessionEnded \n", ig_DeviceID); - ig_pSession->Stop(); - break; - } - if (met == MESessionStopped) - { - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: MESessionStopped \n", ig_DeviceID); - break; - } - if (met == MEVideoCaptureDeviceRemoved) - { - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: MEVideoCaptureDeviceRemoved \n", ig_DeviceID); - break; - } - if ((met == MEError) || (met == MENonFatalError)) - { - pEvent->GetStatus(&hrStatus); - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: MEError | MENonFatalError: %u\n", ig_DeviceID, hrStatus); - break; - } - } - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: Finish startGrabbing \n", ig_DeviceID); - -done: - SetEvent(ig_hFinish); - - return hr; -} - -void ImageGrabber::pauseGrabbing() -{ -} - -void ImageGrabber::resumeGrabbing() -{ -} - -HRESULT ImageGrabber::CreateTopology(IMFMediaSource *pSource, IMFActivate *pSinkActivate, IMFTopology **ppTopo) -{ - IMFTopology* pTopology = NULL; - ComPtr pPD = NULL; - ComPtr pSD = NULL; - ComPtr pHandler = NULL; - ComPtr pNode1 = NULL; - ComPtr pNode2 = NULL; - HRESULT hr = S_OK; - DWORD cStreams = 0; - CHECK_HR(hr = MFCreateTopology(&pTopology)); - CHECK_HR(hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf())); - CHECK_HR(hr = pPD->GetStreamDescriptorCount(&cStreams)); - for (DWORD i = 0; i < cStreams; i++) - { - // In this example, we look for audio streams and connect them to the sink. - BOOL fSelected = FALSE; - GUID majorType; - CHECK_HR(hr = pPD->GetStreamDescriptorByIndex(i, &fSelected, &pSD)); - CHECK_HR(hr = pSD->GetMediaTypeHandler(&pHandler)); - CHECK_HR(hr = pHandler->GetMajorType(&majorType)); - if (majorType == MFMediaType_Video && fSelected) - { - CHECK_HR(hr = AddSourceNode(pTopology, pSource, pPD.Get(), pSD.Get(), pNode1.GetAddressOf())); - CHECK_HR(hr = AddOutputNode(pTopology, pSinkActivate, 0, pNode2.GetAddressOf())); - CHECK_HR(hr = pNode1->ConnectOutput(0, pNode2.Get(), 0)); - break; - } - else - { - CHECK_HR(hr = pPD->DeselectStream(i)); - } - } - *ppTopo = pTopology; - (*ppTopo)->AddRef(); - -done: - return hr; -} - -HRESULT ImageGrabber::AddSourceNode( - IMFTopology *pTopology, // Topology. - IMFMediaSource *pSource, // Media source. - IMFPresentationDescriptor *pPD, // Presentation descriptor. - IMFStreamDescriptor *pSD, // Stream descriptor. - IMFTopologyNode **ppNode) // Receives the node pointer. -{ - ComPtr pNode = NULL; - HRESULT hr = S_OK; - CHECK_HR(hr = MFCreateTopologyNode(MF_TOPOLOGY_SOURCESTREAM_NODE, pNode.GetAddressOf())); - CHECK_HR(hr = pNode->SetUnknown(MF_TOPONODE_SOURCE, pSource)); - CHECK_HR(hr = pNode->SetUnknown(MF_TOPONODE_PRESENTATION_DESCRIPTOR, pPD)); - CHECK_HR(hr = pNode->SetUnknown(MF_TOPONODE_STREAM_DESCRIPTOR, pSD)); - CHECK_HR(hr = pTopology->AddNode(pNode.Get())); - // Return the pointer to the caller. - *ppNode = pNode.Get(); - (*ppNode)->AddRef(); - -done: - return hr; -} - -HRESULT ImageGrabber::AddOutputNode( - IMFTopology *pTopology, // Topology. - IMFActivate *pActivate, // Media sink activation object. - DWORD dwId, // Identifier of the stream sink. - IMFTopologyNode **ppNode) // Receives the node pointer. -{ - ComPtr pNode = NULL; - HRESULT hr = S_OK; - CHECK_HR(hr = MFCreateTopologyNode(MF_TOPOLOGY_OUTPUT_NODE, pNode.GetAddressOf())); - CHECK_HR(hr = pNode->SetObject(pActivate)); - CHECK_HR(hr = pNode->SetUINT32(MF_TOPONODE_STREAMID, dwId)); - CHECK_HR(hr = pNode->SetUINT32(MF_TOPONODE_NOSHUTDOWN_ON_REMOVE, FALSE)); - CHECK_HR(hr = pTopology->AddNode(pNode.Get())); - // Return the pointer to the caller. - *ppNode = pNode.Get(); - (*ppNode)->AddRef(); - -done: - return hr; -} - -HRESULT ImageGrabber::CreateInstance(ImageGrabber **ppIG, unsigned int deviceID, bool synchronious) -{ - *ppIG = new (std::nothrow) ImageGrabber(deviceID, synchronious); - if (ppIG == NULL) - { - return E_OUTOFMEMORY; - } - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"IMAGEGRABBER VIDEODEVICE %i: Creating instance of ImageGrabber\n", deviceID); - return S_OK; -} - -STDMETHODIMP ImageGrabber::QueryInterface(REFIID riid, void** ppv) -{ - HRESULT hr = E_NOINTERFACE; - *ppv = NULL; - if(riid == IID_IUnknown || riid == IID_IMFSampleGrabberSinkCallback) - { - *ppv = static_cast(this); - hr = S_OK; - } - if(riid == IID_IMFClockStateSink) - { - *ppv = static_cast(this); - hr = S_OK; - } - if(SUCCEEDED(hr)) - { - reinterpret_cast(*ppv)->AddRef(); - } - return hr; -} - -STDMETHODIMP_(ULONG) ImageGrabber::AddRef() -{ - return InterlockedIncrement(&m_cRef); -} - -STDMETHODIMP_(ULONG) ImageGrabber::Release() -{ - ULONG cRef = InterlockedDecrement(&m_cRef); - if (cRef == 0) - { - delete this; - } - return cRef; -} - -STDMETHODIMP ImageGrabber::OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset) -{ - (void)hnsSystemTime; - (void)llClockStartOffset; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnClockStop(MFTIME hnsSystemTime) -{ - (void)hnsSystemTime; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnClockPause(MFTIME hnsSystemTime) -{ - (void)hnsSystemTime; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnClockRestart(MFTIME hnsSystemTime) -{ - (void)hnsSystemTime; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnClockSetRate(MFTIME hnsSystemTime, float flRate) -{ - (void)flRate; - (void)hnsSystemTime; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnSetPresentationClock(IMFPresentationClock* pClock) -{ - (void)pClock; - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags, - LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer, - DWORD dwSampleSize) -{ - (void)guidMajorMediaType; - (void)llSampleTime; - (void)dwSampleFlags; - (void)llSampleDuration; - (void)dwSampleSize; - - HANDLE tmp[] = {ig_hFinish, ig_hFrameGrabbed, NULL}; - - DWORD status = WaitForMultipleObjects(2, tmp, FALSE, INFINITE); - if (status == WAIT_OBJECT_0) - { - printf("OnProcessFrame called after ig_hFinish event\n"); - return S_OK; - } - - if(ig_RIE) - { - ig_RIFirst->fastCopy(pSampleBuffer); - ig_RIOut = ig_RIFirst; - } - else - { - ig_RISecond->fastCopy(pSampleBuffer); - ig_RIOut = ig_RISecond; - } - - if (ig_Synchronous) - { - SetEvent(ig_hFrameReady); - } - else - { - ig_RIE = !ig_RIE; - } - - return S_OK; -} - -STDMETHODIMP ImageGrabber::OnShutdown() -{ - SetEvent(ig_hFinish); - return S_OK; -} - -RawImage *ImageGrabber::getRawImage() -{ - return ig_RIOut; -} - -DWORD WINAPI MainThreadFunction( LPVOID lpParam ) -{ - ImageGrabberThread *pIGT = (ImageGrabberThread *)lpParam; - pIGT->run(); - return 0; -} - -HRESULT ImageGrabberThread::CreateInstance(ImageGrabberThread **ppIGT, IMFMediaSource *pSource, unsigned int deviceID, bool synchronious) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - *ppIGT = new (std::nothrow) ImageGrabberThread(pSource, deviceID, synchronious); - if (ppIGT == NULL) - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Memory cannot be allocated\n", deviceID); - return E_OUTOFMEMORY; - } - else - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Creating of the instance of ImageGrabberThread\n", deviceID); - return S_OK; -} - -ImageGrabberThread::ImageGrabberThread(IMFMediaSource *pSource, unsigned int deviceID, bool synchronious): - igt_func(NULL), - igt_Handle(NULL), - igt_stop(false) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - HRESULT hr = ImageGrabber::CreateInstance(&igt_pImageGrabber, deviceID, synchronious); - igt_DeviceID = deviceID; - if(SUCCEEDED(hr)) - { - hr = igt_pImageGrabber->initImageGrabber(pSource, MFVideoFormat_RGB24); - if(!SUCCEEDED(hr)) - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: There is a problem with initialization of the instance of the ImageGrabber class\n", deviceID); - } - else - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Initialization of instance of the ImageGrabber class\n", deviceID); - } - } - else - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i There is a problem with creation of the instance of the ImageGrabber class\n", deviceID); - } -} - -void ImageGrabberThread::setEmergencyStopEvent(void *userData, void(*func)(int, void *)) -{ - if(func) - { - igt_func = func; - igt_userData = userData; - } -} - -ImageGrabberThread::~ImageGrabberThread(void) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Destroing ImageGrabberThread\n", igt_DeviceID); - if (igt_Handle) - WaitForSingleObject(igt_Handle, INFINITE); - delete igt_pImageGrabber; -} - -void ImageGrabberThread::stop() -{ - igt_stop = true; - if(igt_pImageGrabber) - { - igt_pImageGrabber->stopGrabbing(); - } -} - -void ImageGrabberThread::start() -{ - igt_Handle = CreateThread( - NULL, // default security attributes - 0, // use default stack size - MainThreadFunction, // thread function name - this, // argument to thread function - 0, // use default creation flags - &igt_ThreadIdArray); // returns the thread identifier -} - -void ImageGrabberThread::run() -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if(igt_pImageGrabber) - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Thread for grabbing images is started\n", igt_DeviceID); - HRESULT hr = igt_pImageGrabber->startGrabbing(); - if(!SUCCEEDED(hr)) - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: There is a problem with starting the process of grabbing\n", igt_DeviceID); - } - } - else - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i The thread is finished without execution of grabbing\n", igt_DeviceID); - } - if(!igt_stop) - { - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Emergency Stop thread\n", igt_DeviceID); - if(igt_func) - { - igt_func(igt_DeviceID, igt_userData); - } - } - else - DPO->printOut(L"IMAGEGRABBERTHREAD VIDEODEVICE %i: Finish thread\n", igt_DeviceID); -} - -ImageGrabber *ImageGrabberThread::getImageGrabber() -{ - return igt_pImageGrabber; -} - -Media_Foundation::Media_Foundation(void) -{ - HRESULT hr = MFStartup(MF_VERSION); - if(!SUCCEEDED(hr)) - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"MEDIA FOUNDATION: It cannot be created!!!\n"); - } -} - -Media_Foundation::~Media_Foundation(void) -{ - HRESULT hr = MFShutdown(); - if(!SUCCEEDED(hr)) - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"MEDIA FOUNDATION: Resources cannot be released\n"); - } -} - -bool Media_Foundation::buildListOfDevices() -{ - HRESULT hr = S_OK; - ComPtr pAttributes = NULL; - CoInitialize(NULL); - hr = MFCreateAttributes(pAttributes.GetAddressOf(), 1); - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetGUID( - MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, - MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID - ); - } - if (SUCCEEDED(hr)) - { - videoDevices *vDs = &videoDevices::getInstance(); - hr = vDs->initDevices(pAttributes.Get()); - } - else - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"MEDIA FOUNDATION: The access to the video cameras denied\n"); - } - - return (SUCCEEDED(hr)); -} - -Media_Foundation& Media_Foundation::getInstance() -{ - static Media_Foundation instance; - return instance; -} - -RawImage::RawImage(unsigned int size): ri_new(false), ri_pixels(NULL) -{ - ri_size = size; - ri_pixels = new unsigned char[size]; - memset((void *)ri_pixels,0,ri_size); -} - -bool RawImage::isNew() -{ - return ri_new; -} - -unsigned int RawImage::getSize() -{ - return ri_size; -} - -RawImage::~RawImage(void) -{ - delete []ri_pixels; - ri_pixels = NULL; -} - -long RawImage::CreateInstance(RawImage **ppRImage,unsigned int size) -{ - *ppRImage = new (std::nothrow) RawImage(size); - if (ppRImage == NULL) - { - return E_OUTOFMEMORY; - } - return S_OK; -} - -void RawImage::setCopy(const BYTE * pSampleBuffer) -{ - memcpy(ri_pixels, pSampleBuffer, ri_size); - ri_new = true; -} - -void RawImage::fastCopy(const BYTE * pSampleBuffer) -{ - memcpy(ri_pixels, pSampleBuffer, ri_size); - ri_new = true; -} - -unsigned char * RawImage::getpPixels() -{ - ri_new = false; - return ri_pixels; -} - -videoDevice::videoDevice(void): vd_IsSetuped(false), vd_LockOut(OpenLock), vd_pFriendlyName(NULL), - vd_Width(0), vd_Height(0), vd_pSource(NULL), vd_func(NULL), vd_userData(NULL) -{ -} - -void videoDevice::setParametrs(CamParametrs parametrs) -{ - if(vd_IsSetuped) - { - if(vd_pSource) - { - Parametr *pParametr = (Parametr *)(¶metrs); - Parametr *pPrevParametr = (Parametr *)(&vd_PrevParametrs); - IAMVideoProcAmp *pProcAmp = NULL; - HRESULT hr = vd_pSource->QueryInterface(IID_PPV_ARGS(&pProcAmp)); - if (SUCCEEDED(hr)) - { - for(unsigned int i = 0; i < 10; i++) - { - if(pPrevParametr[i].CurrentValue != pParametr[i].CurrentValue || pPrevParametr[i].Flag != pParametr[i].Flag) - hr = pProcAmp->Set(VideoProcAmp_Brightness + i, pParametr[i].CurrentValue, pParametr[i].Flag); - } - pProcAmp->Release(); - } - IAMCameraControl *pProcControl = NULL; - hr = vd_pSource->QueryInterface(IID_PPV_ARGS(&pProcControl)); - if (SUCCEEDED(hr)) - { - for(unsigned int i = 0; i < 7; i++) - { - if(pPrevParametr[10 + i].CurrentValue != pParametr[10 + i].CurrentValue || pPrevParametr[10 + i].Flag != pParametr[10 + i].Flag) - hr = pProcControl->Set(CameraControl_Pan+i, pParametr[10 + i].CurrentValue, pParametr[10 + i].Flag); - } - pProcControl->Release(); - } - vd_PrevParametrs = parametrs; - } - } -} - -CamParametrs videoDevice::getParametrs() -{ - CamParametrs out; - if(vd_IsSetuped) - { - if(vd_pSource) - { - Parametr *pParametr = (Parametr *)(&out); - IAMVideoProcAmp *pProcAmp = NULL; - HRESULT hr = vd_pSource->QueryInterface(IID_PPV_ARGS(&pProcAmp)); - if (SUCCEEDED(hr)) - { - for(unsigned int i = 0; i < 10; i++) - { - Parametr temp; - hr = pProcAmp->GetRange(VideoProcAmp_Brightness+i, &temp.Min, &temp.Max, &temp.Step, &temp.Default, &temp.Flag); - if (SUCCEEDED(hr)) - { - temp.CurrentValue = temp.Default; - pParametr[i] = temp; - } - } - pProcAmp->Release(); - } - IAMCameraControl *pProcControl = NULL; - hr = vd_pSource->QueryInterface(IID_PPV_ARGS(&pProcControl)); - if (SUCCEEDED(hr)) - { - for(unsigned int i = 0; i < 7; i++) - { - Parametr temp; - hr = pProcControl->GetRange(CameraControl_Pan+i, &temp.Min, &temp.Max, &temp.Step, &temp.Default, &temp.Flag); - if (SUCCEEDED(hr)) - { - temp.CurrentValue = temp.Default; - pParametr[10 + i] = temp; - } - } - pProcControl->Release(); - } - } - } - return out; -} - -long videoDevice::resetDevice(IMFActivate *pActivate) -{ - HRESULT hr = -1; - vd_CurrentFormats.clear(); - if(vd_pFriendlyName) - CoTaskMemFree(vd_pFriendlyName); - vd_pFriendlyName = NULL; - if(pActivate) - { - IMFMediaSource *pSource = NULL; - hr = pActivate->GetAllocatedString( - MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, - &vd_pFriendlyName, - NULL - ); - hr = pActivate->ActivateObject( - __uuidof(IMFMediaSource), - (void**)&pSource - ); - enumerateCaptureFormats(pSource); - buildLibraryofTypes(); - SafeRelease(&pSource); - if(FAILED(hr)) - { - vd_pFriendlyName = NULL; - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"VIDEODEVICE %i: IMFMediaSource interface cannot be created \n", vd_CurrentNumber); - } - } - return hr; -} - -long videoDevice::readInfoOfDevice(IMFActivate *pActivate, unsigned int Num) -{ - HRESULT hr = -1; - vd_CurrentNumber = Num; - hr = resetDevice(pActivate); - return hr; -} - -long videoDevice::checkDevice(IMFAttributes *pAttributes, IMFActivate **pDevice) -{ - HRESULT hr = S_OK; - IMFActivate **ppDevices = NULL; - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - UINT32 count; - wchar_t *newFriendlyName = NULL; - hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count); - if (SUCCEEDED(hr)) - { - if(count > 0) - { - if(count > vd_CurrentNumber) - { - hr = ppDevices[vd_CurrentNumber]->GetAllocatedString( - MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, - &newFriendlyName, - NULL - ); - if (SUCCEEDED(hr)) - { - if(wcscmp(newFriendlyName, vd_pFriendlyName) != 0) - { - DPO->printOut(L"VIDEODEVICE %i: Chosen device cannot be found \n", vd_CurrentNumber); - hr = -1; - pDevice = NULL; - } - else - { - *pDevice = ppDevices[vd_CurrentNumber]; - (*pDevice)->AddRef(); - } - } - else - { - DPO->printOut(L"VIDEODEVICE %i: Name of device cannot be gotten \n", vd_CurrentNumber); - } - } - else - { - DPO->printOut(L"VIDEODEVICE %i: Number of devices more than corrent number of the device \n", vd_CurrentNumber); - hr = -1; - } - for(UINT32 i = 0; i < count; i++) - { - SafeRelease(&ppDevices[i]); - } - SafeRelease(ppDevices); - } - else - hr = -1; - } - else - { - DPO->printOut(L"VIDEODEVICE %i: List of DeviceSources cannot be enumerated \n", vd_CurrentNumber); - } - return hr; -} - -long videoDevice::initDevice() -{ - HRESULT hr = -1; - ComPtr pAttributes = NULL; - IMFActivate *vd_pActivate = NULL; - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - CoInitialize(NULL); - hr = MFCreateAttributes(pAttributes.GetAddressOf(), 1); - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetGUID( - MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, - MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID - ); - } - if (SUCCEEDED(hr)) - { - hr = checkDevice(pAttributes.Get(), &vd_pActivate); - if (SUCCEEDED(hr) && vd_pActivate) - { - SafeRelease(&vd_pSource); - hr = vd_pActivate->ActivateObject( - __uuidof(IMFMediaSource), - (void**)&vd_pSource - ); - if (SUCCEEDED(hr)) - { - } - SafeRelease(&vd_pActivate); - } - else - { - DPO->printOut(L"VIDEODEVICE %i: Device there is not \n", vd_CurrentNumber); - } - } - else - { - DPO->printOut(L"VIDEODEVICE %i: The attribute of video cameras cannot be getting \n", vd_CurrentNumber); - } - - return hr; -} - -MediaType videoDevice::getFormat(unsigned int id) -{ - if(id < vd_CurrentFormats.size()) - { - return vd_CurrentFormats[id]; - } - else return MediaType(); -} -int videoDevice::getCountFormats() -{ - return vd_CurrentFormats.size(); -} -void videoDevice::setEmergencyStopEvent(void *userData, void(*func)(int, void *)) -{ - vd_func = func; - vd_userData = userData; -} -void videoDevice::closeDevice() -{ - if(vd_IsSetuped) - { - vd_IsSetuped = false; - vd_pSource->Stop(); - SafeRelease(&vd_pSource); - if(vd_LockOut == RawDataLock) - { - vd_pImGrTh->stop(); - Sleep(500); - delete vd_pImGrTh; - } - vd_pImGrTh = NULL; - vd_LockOut = OpenLock; - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"VIDEODEVICE %i: Device is stopped \n", vd_CurrentNumber); - } -} -unsigned int videoDevice::getWidth() -{ - if(vd_IsSetuped) - return vd_Width; - else - return 0; -} -unsigned int videoDevice::getHeight() -{ - if(vd_IsSetuped) - return vd_Height; - else - return 0; -} -IMFMediaSource *videoDevice::getMediaSource() -{ - IMFMediaSource *out = NULL; - if(vd_LockOut == OpenLock) - { - vd_LockOut = MediaSourceLock; - out = vd_pSource; - } - return out; -} -int videoDevice::findType(unsigned int size, unsigned int frameRate) -{ - if(vd_CaptureFormats.size() == 0) - return 0; - FrameRateMap FRM = vd_CaptureFormats[size]; - if(FRM.size() == 0) - return 0; - UINT64 frameRateMax = 0; SUBTYPEMap STMMax; - if(frameRate == 0) - { - std::map::iterator f = FRM.begin(); - for(; f != FRM.end(); f++) - { - if((*f).first >= frameRateMax) - { - frameRateMax = (*f).first; - STMMax = (*f).second; - } - } - } - else - { - std::map::iterator f = FRM.begin(); - for(; f != FRM.end(); f++) - { - if((*f).first >= frameRateMax) - { - if(frameRate > (*f).first) - { - frameRateMax = (*f).first; - STMMax = (*f).second; - } - } - } - } - if(STMMax.size() == 0) - return 0; - std::map::iterator S = STMMax.begin(); - vectorNum VN = (*S).second; - if(VN.size() == 0) - return 0; - return VN[0]; -} - -void videoDevice::buildLibraryofTypes() -{ - unsigned int size; - unsigned int framerate; - std::vector::iterator i = vd_CurrentFormats.begin(); - int count = 0; - for(; i != vd_CurrentFormats.end(); i++) - { - size = (*i).MF_MT_FRAME_SIZE; - framerate = (*i).MF_MT_FRAME_RATE_NUMERATOR; - FrameRateMap FRM = vd_CaptureFormats[size]; - SUBTYPEMap STM = FRM[framerate]; - String subType((*i).pMF_MT_SUBTYPEName); - vectorNum VN = STM[subType]; - VN.push_back(count); - STM[subType] = VN; - FRM[framerate] = STM; - vd_CaptureFormats[size] = FRM; - count++; - } -} - -long videoDevice::setDeviceFormat(IMFMediaSource *pSource, unsigned long dwFormatIndex) -{ - ComPtr pPD = NULL; - ComPtr pSD = NULL; - ComPtr pHandler = NULL; - ComPtr pType = NULL; - HRESULT hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - BOOL fSelected; - hr = pPD->GetStreamDescriptorByIndex(0, &fSelected, pSD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - hr = pSD->GetMediaTypeHandler(pHandler.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - hr = pHandler->GetMediaTypeByIndex((DWORD)dwFormatIndex, pType.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - hr = pHandler->SetCurrentMediaType(pType.Get()); - -done: - return hr; -} - -bool videoDevice::isDeviceSetup() -{ - return vd_IsSetuped; -} - -RawImage * videoDevice::getRawImageOut() -{ - if(!vd_IsSetuped) return NULL; - if(vd_pImGrTh) - return vd_pImGrTh->getImageGrabber()->getRawImage(); - else - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"VIDEODEVICE %i: The instance of ImageGrabberThread class does not exist \n", vd_CurrentNumber); - } - return NULL; -} - -bool videoDevice::isFrameNew() -{ - if(!vd_IsSetuped) return false; - if(vd_LockOut == RawDataLock || vd_LockOut == OpenLock) - { - if(vd_LockOut == OpenLock) - { - vd_LockOut = RawDataLock; - HRESULT hr = ImageGrabberThread::CreateInstance(&vd_pImGrTh, vd_pSource, vd_CurrentNumber); - if(FAILED(hr)) - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"VIDEODEVICE %i: The instance of ImageGrabberThread class cannot be created.\n", vd_CurrentNumber); - return false; - } - vd_pImGrTh->setEmergencyStopEvent(vd_userData, vd_func); - vd_pImGrTh->start(); - return true; - } - if(vd_pImGrTh) - return vd_pImGrTh->getImageGrabber()->getRawImage()->isNew(); - } - return false; -} - -bool videoDevice::isDeviceMediaSource() -{ - if(vd_LockOut == MediaSourceLock) return true; - return false; -} - -bool videoDevice::isDeviceRawDataSource() -{ - if(vd_LockOut == RawDataLock) return true; - return false; -} - -bool videoDevice::setupDevice(unsigned int id) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if(!vd_IsSetuped) - { - HRESULT hr = -1; - hr = initDevice(); - if(SUCCEEDED(hr)) - { - vd_Width = vd_CurrentFormats[id].width; - vd_Height = vd_CurrentFormats[id].height; - hr = setDeviceFormat(vd_pSource, (DWORD) id); - vd_IsSetuped = (SUCCEEDED(hr)); - if(vd_IsSetuped) - DPO->printOut(L"\n\nVIDEODEVICE %i: Device is setuped \n", vd_CurrentNumber); - vd_PrevParametrs = getParametrs(); - return vd_IsSetuped; - } - else - { - DPO->printOut(L"VIDEODEVICE %i: Interface IMFMediaSource cannot be got \n", vd_CurrentNumber); - return false; - } - } - else - { - DPO->printOut(L"VIDEODEVICE %i: Device is setuped already \n", vd_CurrentNumber); - return false; - } -} - -bool videoDevice::setupDevice(unsigned int w, unsigned int h, unsigned int idealFramerate) -{ - unsigned int id = findType(w * h, idealFramerate); - return setupDevice(id); -} - -wchar_t *videoDevice::getName() -{ - return vd_pFriendlyName; -} - -videoDevice::~videoDevice(void) -{ - closeDevice(); - SafeRelease(&vd_pSource); - if(vd_pFriendlyName) - CoTaskMemFree(vd_pFriendlyName); -} - -HRESULT videoDevice::enumerateCaptureFormats(IMFMediaSource *pSource) -{ - ComPtr pPD = NULL; - ComPtr pSD = NULL; - ComPtr pHandler = NULL; - ComPtr pType = NULL; - HRESULT hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - BOOL fSelected; - hr = pPD->GetStreamDescriptorByIndex(0, &fSelected, pSD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - hr = pSD->GetMediaTypeHandler(pHandler.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - DWORD cTypes = 0; - hr = pHandler->GetMediaTypeCount(&cTypes); - if (FAILED(hr)) - { - goto done; - } - for (DWORD i = 0; i < cTypes; i++) - { - hr = pHandler->GetMediaTypeByIndex(i, pType.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - MediaType MT = FormatReader::Read(pType.Get()); - vd_CurrentFormats.push_back(MT); - } - -done: - return hr; -} - -videoDevices::videoDevices(void): count(0) -{} - -void videoDevices::clearDevices() -{ - std::vector::iterator i = vds_Devices.begin(); - for(; i != vds_Devices.end(); ++i) - delete (*i); - vds_Devices.clear(); -} - -videoDevices::~videoDevices(void) -{ - clearDevices(); -} - -videoDevice * videoDevices::getDevice(unsigned int i) -{ - if(i >= vds_Devices.size()) - { - return NULL; - } - if(i < 0) - { - return NULL; - } - return vds_Devices[i]; -} - -long videoDevices::initDevices(IMFAttributes *pAttributes) -{ - HRESULT hr = S_OK; - IMFActivate **ppDevices = NULL; - clearDevices(); - hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count); - if (SUCCEEDED(hr)) - { - if(count > 0) - { - for(UINT32 i = 0; i < count; i++) - { - videoDevice *vd = new videoDevice; - vd->readInfoOfDevice(ppDevices[i], i); - vds_Devices.push_back(vd); - SafeRelease(&ppDevices[i]); - } - SafeRelease(ppDevices); - } - else - hr = -1; - } - else - { - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"VIDEODEVICES: The instances of the videoDevice class cannot be created\n"); - } - return hr; -} - -unsigned int videoDevices::getCount() -{ - return vds_Devices.size(); -} - -videoDevices& videoDevices::getInstance() -{ - static videoDevices instance; - return instance; -} - -Parametr::Parametr() -{ - CurrentValue = 0; - Min = 0; - Max = 0; - Step = 0; - Default = 0; - Flag = 0; -} - -MediaType::MediaType() -{ - pMF_MT_AM_FORMAT_TYPEName = NULL; - pMF_MT_MAJOR_TYPEName = NULL; - pMF_MT_SUBTYPEName = NULL; - Clear(); -} - -MediaType::~MediaType() -{ - Clear(); -} - -void MediaType::Clear() -{ - MF_MT_FRAME_SIZE = 0; - height = 0; - width = 0; - MF_MT_YUV_MATRIX = 0; - MF_MT_VIDEO_LIGHTING = 0; - MF_MT_DEFAULT_STRIDE = 0; - MF_MT_VIDEO_CHROMA_SITING = 0; - MF_MT_FIXED_SIZE_SAMPLES = 0; - MF_MT_VIDEO_NOMINAL_RANGE = 0; - MF_MT_FRAME_RATE_NUMERATOR = 0; - MF_MT_FRAME_RATE_DENOMINATOR = 0; - MF_MT_PIXEL_ASPECT_RATIO = 0; - MF_MT_PIXEL_ASPECT_RATIO_low = 0; - MF_MT_ALL_SAMPLES_INDEPENDENT = 0; - MF_MT_FRAME_RATE_RANGE_MIN = 0; - MF_MT_FRAME_RATE_RANGE_MIN_low = 0; - MF_MT_SAMPLE_SIZE = 0; - MF_MT_VIDEO_PRIMARIES = 0; - MF_MT_INTERLACE_MODE = 0; - MF_MT_FRAME_RATE_RANGE_MAX = 0; - MF_MT_FRAME_RATE_RANGE_MAX_low = 0; - memset(&MF_MT_MAJOR_TYPE, 0, sizeof(GUID)); - memset(&MF_MT_AM_FORMAT_TYPE, 0, sizeof(GUID)); - memset(&MF_MT_SUBTYPE, 0, sizeof(GUID)); -} - -videoInput::videoInput(void): accessToDevices(false) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"\n***** VIDEOINPUT LIBRARY - 2013 (Author: Evgeny Pereguda) *****\n\n"); - updateListOfDevices(); - if(!accessToDevices) - DPO->printOut(L"INITIALIZATION: Ther is not any suitable video device\n"); -} - -void videoInput::updateListOfDevices() -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - Media_Foundation *MF = &Media_Foundation::getInstance(); - accessToDevices = MF->buildListOfDevices(); - if(!accessToDevices) - DPO->printOut(L"UPDATING: Ther is not any suitable video device\n"); -} - -videoInput::~videoInput(void) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->printOut(L"\n***** CLOSE VIDEOINPUT LIBRARY - 2013 *****\n\n"); -} - -IMFMediaSource *videoInput::getMediaSource(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - { - IMFMediaSource *out = VD->getMediaSource(); - if(!out) - DPO->printOut(L"VideoDevice %i: There is not any suitable IMFMediaSource interface\n", deviceID); - return out; - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return NULL; -} - -bool videoInput::setupDevice(int deviceID, unsigned int id) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0 ) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - { - bool out = VD->setupDevice(id); - if(!out) - DPO->printOut(L"VIDEODEVICE %i: This device cannot be started\n", deviceID); - return out; - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return false; -} - -bool videoInput::setupDevice(int deviceID, unsigned int w, unsigned int h, unsigned int idealFramerate) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0 ) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - { - bool out = VD->setupDevice(w, h, idealFramerate); - if(!out) - DPO->printOut(L"VIDEODEVICE %i: this device cannot be started\n", deviceID); - return out; - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n", deviceID); - } - return false; -} - -MediaType videoInput::getFormat(int deviceID, unsigned int id) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return MediaType(); - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->getFormat(id); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return MediaType(); -} - -bool videoInput::isDeviceSetup(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->isDeviceSetup(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return false; -} - -bool videoInput::isDeviceMediaSource(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->isDeviceMediaSource(); - } - else - { - DPO->printOut(L"Device(s): There is not any suitable video device\n"); - } - return false; -} - -bool videoInput::isDeviceRawDataSource(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - { - bool isRaw = VD->isDeviceRawDataSource(); - return isRaw; - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return false; -} - -bool videoInput::isFrameNew(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return false; - } - if(accessToDevices) - { - if(!isDeviceSetup(deviceID)) - { - if(isDeviceMediaSource(deviceID)) - return false; - } - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - { - return VD->isFrameNew(); - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return false; -} - -unsigned int videoInput::getCountFormats(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return 0; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->getCountFormats(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return 0; -} - -void videoInput::closeAllDevices() -{ - videoDevices *VDS = &videoDevices::getInstance(); - for(unsigned int i = 0; i < VDS->getCount(); i++) - closeDevice(i); -} - -void videoInput::setParametrs(int deviceID, CamParametrs parametrs) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice *VD = VDS->getDevice(deviceID); - if(VD) - VD->setParametrs(parametrs); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } -} - -CamParametrs videoInput::getParametrs(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - CamParametrs out; - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return out; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice *VD = VDS->getDevice(deviceID); - if(VD) - out = VD->getParametrs(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return out; -} - -void videoInput::closeDevice(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice *VD = VDS->getDevice(deviceID); - if(VD) - VD->closeDevice(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } -} - -unsigned int videoInput::getWidth(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return 0; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->getWidth(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return 0; -} - -unsigned int videoInput::getHeight(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return 0; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->getHeight(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return 0; -} - -wchar_t *videoInput::getNameVideoDevice(int deviceID) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return NULL; - } - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - return VD->getName(); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return L"Empty"; -} - -unsigned int videoInput::listDevices(bool silent) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - int out = 0; - if(accessToDevices) - { - videoDevices *VDS = &videoDevices::getInstance(); - out = VDS->getCount(); - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if(!silent)DPO->printOut(L"\nVIDEOINPUT SPY MODE!\n\n"); - if(!silent)DPO->printOut(L"SETUP: Looking For Capture Devices\n"); - for(int i = 0; i < out; i++) - { - if(!silent)DPO->printOut(L"SETUP: %i) %s \n",i, getNameVideoDevice(i)); - } - if(!silent)DPO->printOut(L"SETUP: %i Device(s) found\n\n", out); - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return out; -} - -videoInput& videoInput::getInstance() -{ - static videoInput instance; - return instance; -} - -bool videoInput::isDevicesAcceable() -{ - return accessToDevices; -} - -void videoInput::setVerbose(bool state) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - DPO->setVerbose(state); -} - -void videoInput::setEmergencyStopEvent(int deviceID, void *userData, void(*func)(int, void *)) -{ - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return; - } - if(accessToDevices) - { - if(func) - { - videoDevices *VDS = &videoDevices::getInstance(); - videoDevice * VD = VDS->getDevice(deviceID); - if(VD) - VD->setEmergencyStopEvent(userData, func); - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } -} - -bool videoInput::getPixels(int deviceID, unsigned char * dstBuffer, bool flipRedAndBlue, bool flipImage) -{ - bool success = false; - unsigned int bytes = 3; - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - if (deviceID < 0) - { - DPO->printOut(L"VIDEODEVICE %i: Invalid device ID\n", deviceID); - return success; - } - if(accessToDevices) - { - bool isRaw = isDeviceRawDataSource(deviceID); - if(isRaw) - { - videoDevices *VDS = &videoDevices::getInstance(); - DebugPrintOut *DPO = &DebugPrintOut::getInstance(); - RawImage *RIOut = VDS->getDevice(deviceID)->getRawImageOut(); - if(RIOut) - { - unsigned int height = VDS->getDevice(deviceID)->getHeight(); - unsigned int width = VDS->getDevice(deviceID)->getWidth(); - unsigned int size = bytes * width * height; - if(size == RIOut->getSize()) - { - processPixels(RIOut->getpPixels(), dstBuffer, width, height, bytes, flipRedAndBlue, flipImage); - success = true; - } - else - { - DPO->printOut(L"ERROR: GetPixels() - bufferSizes do not match!\n"); - } - } - else - { - DPO->printOut(L"ERROR: GetPixels() - Unable to grab frame for device %i\n", deviceID); - } - } - else - { - DPO->printOut(L"ERROR: GetPixels() - Not raw data source device %i\n", deviceID); - } - } - else - { - DPO->printOut(L"VIDEODEVICE(s): There is not any suitable video device\n"); - } - return success; -} - -void videoInput::processPixels(unsigned char * src, unsigned char * dst, unsigned int width, - unsigned int height, unsigned int bpp, bool bRGB, bool bFlip) -{ - unsigned int widthInBytes = width * bpp; - unsigned int numBytes = widthInBytes * height; - int *dstInt, *srcInt; - if(!bRGB) - { - if(bFlip) - { - for(unsigned int y = 0; y < height; y++) - { - dstInt = (int *)(dst + (y * widthInBytes)); - srcInt = (int *)(src + ( (height -y -1) * widthInBytes)); - memcpy(dstInt, srcInt, widthInBytes); - } - } - else - { - memcpy(dst, src, numBytes); - } - } - else - { - if(bFlip) - { - unsigned int x = 0; - unsigned int y = (height - 1) * widthInBytes; - src += y; - for(unsigned int i = 0; i < numBytes; i+=3) - { - if(x >= width) - { - x = 0; - src -= widthInBytes*2; - } - *dst = *(src+2); - dst++; - *dst = *(src+1); - dst++; - *dst = *src; - dst++; - src+=3; - x++; - } - } - else - { - for(unsigned int i = 0; i < numBytes; i+=3) - { - *dst = *(src+2); - dst++; - *dst = *(src+1); - dst++; - *dst = *src; - dst++; - src+=3; - } - } - } -} -} - -/******* Capturing video from camera via Microsoft Media Foundation **********/ -class CvCaptureCAM_MSMF : public CvCapture -{ -public: - CvCaptureCAM_MSMF(); - virtual ~CvCaptureCAM_MSMF(); - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_MSMF; } // Return the type of the capture object: CV_CAP_VFW, etc... -protected: - void init(); - int index, width, height, fourcc; - IplImage* frame; - videoInput VI; -}; - -struct SuppressVideoInputMessages -{ - SuppressVideoInputMessages() { videoInput::setVerbose(true); } -}; - -static SuppressVideoInputMessages do_it; - -CvCaptureCAM_MSMF::CvCaptureCAM_MSMF(): - index(-1), - width(-1), - height(-1), - fourcc(-1), - frame(NULL), - VI(videoInput::getInstance()) -{ - CoInitialize(0); -} - -CvCaptureCAM_MSMF::~CvCaptureCAM_MSMF() -{ - close(); - CoUninitialize(); -} - -void CvCaptureCAM_MSMF::close() -{ - if( index >= 0 ) - { - VI.closeDevice(index); - index = -1; - cvReleaseImage(&frame); - } - width = height = -1; -} - -// Initialize camera input -bool CvCaptureCAM_MSMF::open( int _index ) -{ - int try_index = _index; - int devices = 0; - close(); - devices = VI.listDevices(true); - if (devices == 0) - return false; - try_index = try_index < 0 ? 0 : (try_index > devices-1 ? devices-1 : try_index); - VI.setupDevice(try_index); - if( !VI.isFrameNew(try_index) ) - return false; - index = try_index; - return true; -} - -bool CvCaptureCAM_MSMF::grabFrame() -{ - while (VI.isDeviceSetup(index) && !VI.isFrameNew(index)) - Sleep(1); - return VI.isDeviceSetup(index); -} - -IplImage* CvCaptureCAM_MSMF::retrieveFrame(int) -{ - if( !frame || (int)VI.getWidth(index) != frame->width || (int)VI.getHeight(index) != frame->height ) - { - if (frame) - cvReleaseImage( &frame ); - unsigned int w = VI.getWidth(index), h = VI.getHeight(index); - frame = cvCreateImage( cvSize(w,h), 8, 3 ); - } - VI.getPixels( index, (uchar*)frame->imageData, false, true ); - return frame; -} - -double CvCaptureCAM_MSMF::getProperty( int property_id ) -{ - // image format proprrties - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return VI.getWidth(index); - case CV_CAP_PROP_FRAME_HEIGHT: - return VI.getHeight(index); - } - return -1; -} -bool CvCaptureCAM_MSMF::setProperty( int property_id, double value ) -{ - // image capture properties - bool handled = false; - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - width = cvRound(value); - handled = true; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - height = cvRound(value); - handled = true; - break; - } - - if ( handled ) { - if( width > 0 && height > 0 ) - { - if( width != (int)VI.getWidth(index) || height != (int)VI.getHeight(index) && VI.isDeviceSetup(index))//|| fourcc != VI.getFourcc(index) ) - { - VI.closeDevice(index); - VI.setupDevice(index, width, height); - } - return VI.isDeviceSetup(index); - } - return true; - } - - return false; -} - -class CvCaptureFile_MSMF : public CvCapture -{ -public: - CvCaptureFile_MSMF(); - virtual ~CvCaptureFile_MSMF(); - - virtual bool open( const char* filename ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_MSMF; } -protected: - ImageGrabberThread* grabberThread; - IMFMediaSource* videoFileSource; - std::vector captureFormats; - int captureFormatIndex; - IplImage* frame; - bool isOpened; - - HRESULT enumerateCaptureFormats(IMFMediaSource *pSource); - HRESULT getSourceDuration(IMFMediaSource *pSource, MFTIME *pDuration); -}; - -CvCaptureFile_MSMF::CvCaptureFile_MSMF(): - grabberThread(NULL), - videoFileSource(NULL), - captureFormatIndex(0), - frame(NULL), - isOpened(false) -{ - MFStartup(MF_VERSION); -} - -CvCaptureFile_MSMF::~CvCaptureFile_MSMF() -{ - close(); - MFShutdown(); -} - -bool CvCaptureFile_MSMF::open(const char* filename) -{ - if (!filename) - return false; - - wchar_t* unicodeFileName = new wchar_t[strlen(filename)+1]; - MultiByteToWideChar(CP_ACP, 0, filename, -1, unicodeFileName, strlen(filename)+1); - - HRESULT hr = S_OK; - - MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID; - - ComPtr pSourceResolver = NULL; - IUnknown* pUnkSource = NULL; - - hr = MFCreateSourceResolver(pSourceResolver.GetAddressOf()); - - if (SUCCEEDED(hr)) - { - hr = pSourceResolver->CreateObjectFromURL( - unicodeFileName, - MF_RESOLUTION_MEDIASOURCE, - NULL, // Optional property store. - &ObjectType, - &pUnkSource - ); - } - - // Get the IMFMediaSource from the IUnknown pointer. - if (SUCCEEDED(hr)) - { - hr = pUnkSource->QueryInterface(IID_PPV_ARGS(&videoFileSource)); - } - - SafeRelease(&pUnkSource); - - if (SUCCEEDED(hr)) - { - hr = enumerateCaptureFormats(videoFileSource); - } - - if (SUCCEEDED(hr)) - { - hr = ImageGrabberThread::CreateInstance(&grabberThread, videoFileSource, (unsigned int)-2, true); - } - - if (SUCCEEDED(hr)) - { - grabberThread->start(); - } - - isOpened = SUCCEEDED(hr); - - return isOpened; -} - -void CvCaptureFile_MSMF::close() -{ - if (grabberThread) - { - isOpened = false; - SetEvent(grabberThread->getImageGrabber()->ig_hFinish); - grabberThread->stop(); - delete grabberThread; - } - - if (videoFileSource) - { - videoFileSource->Shutdown(); - } -} - -bool CvCaptureFile_MSMF::setProperty(int property_id, double value) -{ - // image capture properties - // FIXME: implement method in VideoInput back end - (void) property_id; - (void) value; - return false; -} - -double CvCaptureFile_MSMF::getProperty(int property_id) -{ - // image format proprrties - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return captureFormats[captureFormatIndex].width; - case CV_CAP_PROP_FRAME_HEIGHT: - return captureFormats[captureFormatIndex].height; - case CV_CAP_PROP_FRAME_COUNT: - { - MFTIME duration; - getSourceDuration(this->videoFileSource, &duration); - double fps = ((double)captureFormats[captureFormatIndex].MF_MT_FRAME_RATE_NUMERATOR) / - ((double)captureFormats[captureFormatIndex].MF_MT_FRAME_RATE_DENOMINATOR); - return (double)floor(((double)duration/1e7)*fps+0.5); - } - case CV_CAP_PROP_FOURCC: - return captureFormats[captureFormatIndex].MF_MT_SUBTYPE.Data1; - case CV_CAP_PROP_FPS: - return ((double)captureFormats[captureFormatIndex].MF_MT_FRAME_RATE_NUMERATOR) / - ((double)captureFormats[captureFormatIndex].MF_MT_FRAME_RATE_DENOMINATOR); - } - - return -1; -} - -bool CvCaptureFile_MSMF::grabFrame() -{ - DWORD waitResult = (DWORD)-1; - if (isOpened) - { - SetEvent(grabberThread->getImageGrabber()->ig_hFrameGrabbed); - HANDLE tmp[] = {grabberThread->getImageGrabber()->ig_hFrameReady, grabberThread->getImageGrabber()->ig_hFinish, 0}; - waitResult = WaitForMultipleObjects(2, tmp, FALSE, INFINITE); - } - - return isOpened && grabberThread->getImageGrabber()->getRawImage()->isNew() && (waitResult == WAIT_OBJECT_0); -} - -IplImage* CvCaptureFile_MSMF::retrieveFrame(int) -{ - unsigned int width = captureFormats[captureFormatIndex].width; - unsigned int height = captureFormats[captureFormatIndex].height; - unsigned int bytes = 3; - if( !frame || (int)width != frame->width || (int)height != frame->height ) - { - if (frame) - cvReleaseImage( &frame ); - frame = cvCreateImage( cvSize(width,height), 8, 3 ); - } - - RawImage *RIOut = grabberThread->getImageGrabber()->getRawImage(); - unsigned int size = bytes * width * height; - - bool verticalFlip = captureFormats[captureFormatIndex].MF_MT_DEFAULT_STRIDE < 0; - - if(RIOut && size == RIOut->getSize()) - { - videoInput::processPixels(RIOut->getpPixels(), (unsigned char*)frame->imageData, width, - height, bytes, false, verticalFlip); - } - - return frame; -} - -HRESULT CvCaptureFile_MSMF::enumerateCaptureFormats(IMFMediaSource *pSource) -{ - ComPtr pPD = NULL; - ComPtr pSD = NULL; - ComPtr pHandler = NULL; - ComPtr pType = NULL; - HRESULT hr = pSource->CreatePresentationDescriptor(pPD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - - BOOL fSelected; - hr = pPD->GetStreamDescriptorByIndex(0, &fSelected, pSD.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - hr = pSD->GetMediaTypeHandler(pHandler.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - DWORD cTypes = 0; - hr = pHandler->GetMediaTypeCount(&cTypes); - if (FAILED(hr)) - { - goto done; - } - for (DWORD i = 0; i < cTypes; i++) - { - hr = pHandler->GetMediaTypeByIndex(i, pType.GetAddressOf()); - if (FAILED(hr)) - { - goto done; - } - MediaType MT = FormatReader::Read(pType.Get()); - captureFormats.push_back(MT); - } - -done: - return hr; -} - -HRESULT CvCaptureFile_MSMF::getSourceDuration(IMFMediaSource *pSource, MFTIME *pDuration) -{ - *pDuration = 0; - - IMFPresentationDescriptor *pPD = NULL; - - HRESULT hr = pSource->CreatePresentationDescriptor(&pPD); - if (SUCCEEDED(hr)) - { - hr = pPD->GetUINT64(MF_PD_DURATION, (UINT64*)pDuration); - pPD->Release(); - } - return hr; -} - -CvCapture* cvCreateCameraCapture_MSMF( int index ) -{ - CvCaptureCAM_MSMF* capture = new CvCaptureCAM_MSMF; - try - { - if( capture->open( index )) - return capture; - } - catch(...) - { - delete capture; - throw; - } - delete capture; - return 0; -} - -CvCapture* cvCreateFileCapture_MSMF (const char* filename) -{ - CvCaptureFile_MSMF* capture = new CvCaptureFile_MSMF; - try - { - if( capture->open(filename) ) - return capture; - else - { - delete capture; - return NULL; - } - } - catch(...) - { - delete capture; - throw; - } -} - -// -// -// Media Foundation-based Video Writer -// -// - -class CvVideoWriter_MSMF : public CvVideoWriter -{ -public: - CvVideoWriter_MSMF(); - virtual ~CvVideoWriter_MSMF(); - virtual bool open(const char* filename, int fourcc, - double fps, CvSize frameSize, bool isColor); - virtual void close(); - virtual bool writeFrame(const IplImage* img); - -private: - UINT32 videoWidth; - UINT32 videoHeight; - double fps; - UINT32 bitRate; - UINT32 frameSize; - GUID encodingFormat; - GUID inputFormat; - - DWORD streamIndex; - ComPtr sinkWriter; - - bool initiated; - - LONGLONG rtStart; - UINT64 rtDuration; - - HRESULT InitializeSinkWriter(const char* filename); - static const GUID FourCC2GUID(int fourcc); - HRESULT WriteFrame(DWORD *videoFrameBuffer, const LONGLONG& rtStart, const LONGLONG& rtDuration); -}; - -CvVideoWriter_MSMF::CvVideoWriter_MSMF(): - initiated(false) -{ -} - -CvVideoWriter_MSMF::~CvVideoWriter_MSMF() -{ - close(); -} - -const GUID CvVideoWriter_MSMF::FourCC2GUID(int fourcc) -{ - switch(fourcc) - { - case CV_FOURCC_MACRO('d', 'v', '2', '5'): - return MFVideoFormat_DV25; break; - case CV_FOURCC_MACRO('d', 'v', '5', '0'): - return MFVideoFormat_DV50; break; - case CV_FOURCC_MACRO('d', 'v', 'c', ' '): - return MFVideoFormat_DVC; break; - case CV_FOURCC_MACRO('d', 'v', 'h', '1'): - return MFVideoFormat_DVH1; break; - case CV_FOURCC_MACRO('d', 'v', 'h', 'd'): - return MFVideoFormat_DVHD; break; - case CV_FOURCC_MACRO('d', 'v', 's', 'd'): - return MFVideoFormat_DVSD; break; - case CV_FOURCC_MACRO('d', 'v', 's', 'l'): - return MFVideoFormat_DVSL; break; - case CV_FOURCC_MACRO('H', '2', '6', '3'): - return MFVideoFormat_H263; break; - case CV_FOURCC_MACRO('H', '2', '6', '4'): - return MFVideoFormat_H264; break; - case CV_FOURCC_MACRO('M', '4', 'S', '2'): - return MFVideoFormat_M4S2; break; - case CV_FOURCC_MACRO('M', 'J', 'P', 'G'): - return MFVideoFormat_MJPG; break; - case CV_FOURCC_MACRO('M', 'P', '4', '3'): - return MFVideoFormat_MP43; break; - case CV_FOURCC_MACRO('M', 'P', '4', 'S'): - return MFVideoFormat_MP4S; break; - case CV_FOURCC_MACRO('M', 'P', '4', 'V'): - return MFVideoFormat_MP4V; break; - case CV_FOURCC_MACRO('M', 'P', 'G', '1'): - return MFVideoFormat_MPG1; break; - case CV_FOURCC_MACRO('M', 'S', 'S', '1'): - return MFVideoFormat_MSS1; break; - case CV_FOURCC_MACRO('M', 'S', 'S', '2'): - return MFVideoFormat_MSS2; break; - case CV_FOURCC_MACRO('W', 'M', 'V', '1'): - return MFVideoFormat_WMV1; break; - case CV_FOURCC_MACRO('W', 'M', 'V', '2'): - return MFVideoFormat_WMV2; break; - case CV_FOURCC_MACRO('W', 'M', 'V', '3'): - return MFVideoFormat_WMV3; break; - case CV_FOURCC_MACRO('W', 'V', 'C', '1'): - return MFVideoFormat_WVC1; break; - default: - return MFVideoFormat_H264; - } -} - -bool CvVideoWriter_MSMF::open( const char* filename, int fourcc, - double _fps, CvSize frameSize, bool /*isColor*/ ) -{ - videoWidth = frameSize.width; - videoHeight = frameSize.height; - fps = _fps; - bitRate = (UINT32)fps*videoWidth*videoHeight; // 1-bit per pixel - encodingFormat = FourCC2GUID(fourcc); - inputFormat = MFVideoFormat_RGB32; - - HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - if (SUCCEEDED(hr)) - { - hr = MFStartup(MF_VERSION); - if (SUCCEEDED(hr)) - { - hr = InitializeSinkWriter(filename); - if (SUCCEEDED(hr)) - { - initiated = true; - rtStart = 0; - MFFrameRateToAverageTimePerFrame((UINT32)fps, 1, &rtDuration); - } - } - } - - return SUCCEEDED(hr); -} - -void CvVideoWriter_MSMF::close() -{ - if (!initiated) - { - return; - } - - initiated = false; - sinkWriter->Finalize(); - MFShutdown(); -} - -bool CvVideoWriter_MSMF::writeFrame(const IplImage* img) -{ - if (!img) - return false; - - int length = img->width * img->height * 4; - DWORD* target = new DWORD[length]; - - for (int rowIdx = 0; rowIdx < img->height; rowIdx++) - { - char* rowStart = img->imageData + rowIdx*img->widthStep; - for (int colIdx = 0; colIdx < img->width; colIdx++) - { - BYTE b = rowStart[colIdx * img->nChannels + 0]; - BYTE g = rowStart[colIdx * img->nChannels + 1]; - BYTE r = rowStart[colIdx * img->nChannels + 2]; - - target[rowIdx*img->width+colIdx] = (r << 16) + (g << 8) + b; - } - } - - // Send frame to the sink writer. - HRESULT hr = WriteFrame(target, rtStart, rtDuration); - if (FAILED(hr)) - { - delete[] target; - return false; - } - rtStart += rtDuration; - - delete[] target; - - return true; -} - -HRESULT CvVideoWriter_MSMF::InitializeSinkWriter(const char* filename) -{ - ComPtr spAttr; - ComPtr mediaTypeOut; - ComPtr mediaTypeIn; - ComPtr spByteStream; - - MFCreateAttributes(&spAttr, 10); - spAttr->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, true); - - wchar_t* unicodeFileName = new wchar_t[strlen(filename)+1]; - MultiByteToWideChar(CP_ACP, 0, filename, -1, unicodeFileName, strlen(filename)+1); - - HRESULT hr = MFCreateSinkWriterFromURL(unicodeFileName, NULL, spAttr.Get(), &sinkWriter); - - delete[] unicodeFileName; - - // Set the output media type. - if (SUCCEEDED(hr)) - { - hr = MFCreateMediaType(&mediaTypeOut); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeOut->SetGUID(MF_MT_SUBTYPE, encodingFormat); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, bitRate); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeSize(mediaTypeOut.Get(), MF_MT_FRAME_SIZE, videoWidth, videoHeight); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeRatio(mediaTypeOut.Get(), MF_MT_FRAME_RATE, (UINT32)fps, 1); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeRatio(mediaTypeOut.Get(), MF_MT_PIXEL_ASPECT_RATIO, 1, 1); - } - - if (SUCCEEDED(hr)) - { - hr = sinkWriter->AddStream(mediaTypeOut.Get(), &streamIndex); - } - - // Set the input media type. - if (SUCCEEDED(hr)) - { - hr = MFCreateMediaType(&mediaTypeIn); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeIn->SetGUID(MF_MT_SUBTYPE, inputFormat); - } - if (SUCCEEDED(hr)) - { - hr = mediaTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeSize(mediaTypeIn.Get(), MF_MT_FRAME_SIZE, videoWidth, videoHeight); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeRatio(mediaTypeIn.Get(), MF_MT_FRAME_RATE, (UINT32)fps, 1); - } - if (SUCCEEDED(hr)) - { - hr = MFSetAttributeRatio(mediaTypeIn.Get(), MF_MT_PIXEL_ASPECT_RATIO, 1, 1); - } - - if (SUCCEEDED(hr)) - { - hr = sinkWriter->SetInputMediaType(streamIndex, mediaTypeIn.Get(), NULL); - } - - // Tell the sink writer to start accepting data. - if (SUCCEEDED(hr)) - { - hr = sinkWriter->BeginWriting(); - } - - return hr; -} - -HRESULT CvVideoWriter_MSMF::WriteFrame(DWORD *videoFrameBuffer, const LONGLONG& Start, const LONGLONG& Duration) -{ - ComPtr sample; - ComPtr buffer; - - const LONG cbWidth = 4 * videoWidth; - const DWORD cbBuffer = cbWidth * videoHeight; - - BYTE *pData = NULL; - - // Create a new memory buffer. - HRESULT hr = MFCreateMemoryBuffer(cbBuffer, &buffer); - - // Lock the buffer and copy the video frame to the buffer. - if (SUCCEEDED(hr)) - { - hr = buffer->Lock(&pData, NULL, NULL); - } - - if (SUCCEEDED(hr)) - { -#if defined(_M_ARM) - hr = MFCopyImage( - pData, // Destination buffer. - -cbWidth, // Destination stride. - (BYTE*)videoFrameBuffer, // First row in source image. - cbWidth, // Source stride. - cbWidth, // Image width in bytes. - videoHeight // Image height in pixels. - ); -#else - hr = MFCopyImage( - pData, // Destination buffer. - cbWidth, // Destination stride. - (BYTE*)videoFrameBuffer, // First row in source image. - cbWidth, // Source stride. - cbWidth, // Image width in bytes. - videoHeight // Image height in pixels. - ); -#endif - } - - if (buffer) - { - buffer->Unlock(); - } - - // Set the data length of the buffer. - if (SUCCEEDED(hr)) - { - hr = buffer->SetCurrentLength(cbBuffer); - } - - // Create a media sample and add the buffer to the sample. - if (SUCCEEDED(hr)) - { - hr = MFCreateSample(&sample); - } - if (SUCCEEDED(hr)) - { - hr = sample->AddBuffer(buffer.Get()); - } - - // Set the time stamp and the duration. - if (SUCCEEDED(hr)) - { - hr = sample->SetSampleTime(Start); - } - if (SUCCEEDED(hr)) - { - hr = sample->SetSampleDuration(Duration); - } - - // Send the sample to the Sink Writer. - if (SUCCEEDED(hr)) - { - hr = sinkWriter->WriteSample(streamIndex, sample.Get()); - } - - return hr; -} - -CvVideoWriter* cvCreateVideoWriter_MSMF( const char* filename, int fourcc, - double fps, CvSize frameSize, int isColor ) -{ - CvVideoWriter_MSMF* writer = new CvVideoWriter_MSMF; - if( writer->open( filename, fourcc, fps, frameSize, isColor != 0 )) - return writer; - delete writer; - return NULL; -} - -#endif diff --git a/modules/highgui/src/cap_openni.cpp b/modules/highgui/src/cap_openni.cpp deleted file mode 100644 index 402a0cd..0000000 --- a/modules/highgui/src/cap_openni.cpp +++ /dev/null @@ -1,1409 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/imgproc.hpp" - -#ifdef HAVE_OPENNI - -#if defined TBB_INTERFACE_VERSION && TBB_INTERFACE_VERSION < 5000 -# undef HAVE_TBB -#endif - -#include -#include - -#ifndef i386 -# define i386 0 -#endif -#ifndef __arm__ -# define __arm__ 0 -#endif -#ifndef _ARC -# define _ARC 0 -#endif -#ifndef __APPLE__ -# define __APPLE__ 0 -#endif - -#include "XnCppWrapper.h" - -const std::string XMLConfig = -"" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - " " - "" - "" - "" - "" - "" - "" - "" -"\n"; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -class ApproximateSyncGrabber -{ -public: - ApproximateSyncGrabber( xn::Context &_context, - xn::DepthGenerator &_depthGenerator, - xn::ImageGenerator &_imageGenerator, - int _maxBufferSize, bool _isCircleBuffer, int _maxTimeDuration ) : - context(_context), depthGenerator(_depthGenerator), imageGenerator(_imageGenerator), - maxBufferSize(_maxBufferSize), isCircleBuffer(_isCircleBuffer), maxTimeDuration(_maxTimeDuration) - { - task = 0; - - CV_Assert( depthGenerator.IsValid() ); - CV_Assert( imageGenerator.IsValid() ); - } - - void setMaxBufferSize( int _maxBufferSize ) - { - maxBufferSize = _maxBufferSize; -#ifdef HAVE_TBB - task->setMaxBufferSize(); -#endif - } - inline int getMaxBufferSize() const { return maxBufferSize; } - - void setIsCircleBuffer( bool _isCircleBuffer ) { isCircleBuffer = _isCircleBuffer; } - bool getIsCircleBuffer() const { return isCircleBuffer; } - - void setMaxTimeDuration( int _maxTimeDuration ) { maxTimeDuration = _maxTimeDuration; } - int getMaxTimeDuration() const { return maxTimeDuration; } - - bool grab( xn::DepthMetaData& depthMetaData, - xn::ImageMetaData& imageMetaData ) - { - CV_Assert( task ); - - - while( task->grab(depthMetaData, imageMetaData) == false ) - { -#ifndef HAVE_TBB - task->spin(); -#endif - } - return true; - - } - - void start() - { - CV_Assert( depthGenerator.IsValid() ); - CV_Assert( imageGenerator.IsValid() ); -#ifdef HAVE_TBB - task = new( tbb::task::allocate_root() ) TBBApproximateSynchronizerTask( *this ); - tbb::task::enqueue(*task); -#else - task = new ApproximateSynchronizer( *this ); -#endif - } - - void finish() - { -#ifdef HAVE_TBB - if( task ) - tbb::task::destroy( *task ); -#else - task.release(); -#endif - } - - bool isRun() const { return task != 0; } - - xn::Context &context; - xn::DepthGenerator &depthGenerator; - xn::ImageGenerator &imageGenerator; - -private: - ApproximateSyncGrabber(const ApproximateSyncGrabber&); - ApproximateSyncGrabber& operator=(ApproximateSyncGrabber&); - - int maxBufferSize; - bool isCircleBuffer; - int maxTimeDuration; - - class ApproximateSynchronizerBase - { - public: - ApproximateSynchronizerBase( ApproximateSyncGrabber& _approxSyncGrabber ) : - approxSyncGrabber(_approxSyncGrabber), isDepthFilled(false), isImageFilled(false) - {} - - virtual ~ApproximateSynchronizerBase() {} - - virtual bool isSpinContinue() const = 0; - virtual void pushDepthMetaData( xn::DepthMetaData& depthMetaData ) = 0; - virtual void pushImageMetaData( xn::ImageMetaData& imageMetaData ) = 0; - virtual bool popDepthMetaData( xn::DepthMetaData& depthMetaData ) = 0; - virtual bool popImageMetaData( xn::ImageMetaData& imageMetaData ) = 0; - - void spin() - { - while(isSpinContinue() == true) - { - XnStatus status = approxSyncGrabber.context.WaitAnyUpdateAll(); - if( status != XN_STATUS_OK ) - continue; - - //xn::DepthMetaData depth; - //xn::ImageMetaData image; - approxSyncGrabber.depthGenerator.GetMetaData(depth); - approxSyncGrabber.imageGenerator.GetMetaData(image); - - if( depth.Data() && depth.IsDataNew() ) - pushDepthMetaData( depth ); - - if( image.Data() && image.IsDataNew() ) - pushImageMetaData( image ); - } - } - - virtual bool grab( xn::DepthMetaData& depthMetaData, - xn::ImageMetaData& imageMetaData ) - { - for(;;) - { - if( !isDepthFilled ) - isDepthFilled = popDepthMetaData(depth); - if( !isImageFilled ) - isImageFilled = popImageMetaData(image); - - if( !isDepthFilled || !isImageFilled ) - break; - - double timeDiff = 1e-3 * std::abs(static_cast(depth.Timestamp()) - static_cast(image.Timestamp())); - - if( timeDiff <= approxSyncGrabber.maxTimeDuration ) - { - depthMetaData.InitFrom(depth); - imageMetaData.InitFrom(image); - isDepthFilled = isImageFilled = false; - return true; - } - else - { - if( depth.Timestamp() < image.Timestamp() ) - isDepthFilled = false; - else - isImageFilled = false; - } - } - - return false; - } - - protected: - ApproximateSyncGrabber& approxSyncGrabber; - xn::DepthMetaData depth; - xn::ImageMetaData image; - bool isDepthFilled; - bool isImageFilled; - }; - - // If there isn't TBB the synchronization will be executed in the main thread. - class ApproximateSynchronizer: public ApproximateSynchronizerBase - { - public: - ApproximateSynchronizer( ApproximateSyncGrabber& _approxSyncGrabber ) : - ApproximateSynchronizerBase(_approxSyncGrabber) - {} - - virtual bool isSpinContinue() const - { - int maxBufferSize = approxSyncGrabber.getMaxBufferSize(); - return (maxBufferSize <= 0) || (static_cast(depthQueue.size()) < maxBufferSize && - static_cast(imageQueue.size()) < maxBufferSize); // "<" to may push - } - - virtual inline void pushDepthMetaData( xn::DepthMetaData& depthMetaData ) - { - cv::Ptr depthPtr = new xn::DepthMetaData; - depthPtr->CopyFrom(depthMetaData); - depthQueue.push(depthPtr); - } - virtual inline void pushImageMetaData( xn::ImageMetaData& imageMetaData ) - { - cv::Ptr imagePtr = new xn::ImageMetaData; - imagePtr->CopyFrom(imageMetaData); - imageQueue.push(imagePtr); - } - virtual inline bool popDepthMetaData( xn::DepthMetaData& depthMetaData ) - { - if( depthQueue.empty() ) - return false; - - depthMetaData.CopyFrom(*depthQueue.front()); - depthQueue.pop(); - return true; - } - virtual inline bool popImageMetaData( xn::ImageMetaData& imageMetaData ) - { - if( imageQueue.empty() ) - return false; - - imageMetaData.CopyFrom(*imageQueue.front()); - imageQueue.pop(); - return true; - } - - private: - std::queue > depthQueue; - std::queue > imageQueue; - }; - -#ifdef HAVE_TBB - // If there is TBB the synchronization will be executed in own thread. - class TBBApproximateSynchronizer: public ApproximateSynchronizerBase - { - public: - TBBApproximateSynchronizer( ApproximateSyncGrabber& _approxSyncGrabber ) : - ApproximateSynchronizerBase(_approxSyncGrabber) - { - setMaxBufferSize(); - } - - void setMaxBufferSize() - { - int maxBufferSize = approxSyncGrabber.getMaxBufferSize(); - if( maxBufferSize >= 0 ) - { - depthQueue.set_capacity( maxBufferSize ); - imageQueue.set_capacity( maxBufferSize ); - } - } - - virtual inline bool isSpinContinue() const { return true; } - - virtual inline void pushDepthMetaData( xn::DepthMetaData& depthMetaData ) - { - cv::Ptr depthPtr = new xn::DepthMetaData, tmp; - depthPtr->CopyFrom(depthMetaData); - - tbb::mutex mtx; - mtx.lock(); - if( depthQueue.try_push(depthPtr) == false ) - { - if( approxSyncGrabber.getIsCircleBuffer() ) - { - CV_Assert( depthQueue.try_pop(tmp) ); - CV_Assert( depthQueue.try_push(depthPtr) ); - } - } - mtx.unlock(); - } - - virtual inline void pushImageMetaData( xn::ImageMetaData& imageMetaData ) - { - cv::Ptr imagePtr = new xn::ImageMetaData, tmp; - imagePtr->CopyFrom(imageMetaData); - - tbb::mutex mtx; - mtx.lock(); - if( imageQueue.try_push(imagePtr) == false ) - { - if( approxSyncGrabber.getIsCircleBuffer() ) - { - CV_Assert( imageQueue.try_pop(tmp) ); - CV_Assert( imageQueue.try_push(imagePtr) ); - } - } - mtx.unlock(); - } - - virtual inline bool popDepthMetaData( xn::DepthMetaData& depthMetaData ) - { - cv::Ptr depthPtr; - bool isPop = depthQueue.try_pop(depthPtr); - if( isPop ) - depthMetaData.CopyFrom(*depthPtr); - return isPop; - } - virtual inline bool popImageMetaData( xn::ImageMetaData& imageMetaData ) - { - cv::Ptr imagePtr; - bool isPop = imageQueue.try_pop(imagePtr); - if( isPop ) - imageMetaData.CopyFrom(*imagePtr); - return isPop; - } - - private: - tbb::concurrent_bounded_queue > depthQueue; - tbb::concurrent_bounded_queue > imageQueue; - }; - - class TBBApproximateSynchronizerTask: public tbb::task - { - public: - TBBApproximateSynchronizerTask( ApproximateSyncGrabber& approxSyncGrabber ) : - synchronizer(approxSyncGrabber) - {} - - void setMaxBufferSize() - { - synchronizer.setMaxBufferSize(); - } - - bool grab( xn::DepthMetaData& depthMetaData, - xn::ImageMetaData& imageMetaData ) - { - return synchronizer.grab( depthMetaData, imageMetaData ); - } - - private: - tbb::task* execute() - { - synchronizer.spin(); - return 0; - } - TBBApproximateSynchronizer synchronizer; - }; -#endif // HAVE_TBB - -#ifdef HAVE_TBB - TBBApproximateSynchronizerTask* task; -#else - cv::Ptr task; -#endif -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -class CvCapture_OpenNI : public CvCapture -{ -public: - enum { DEVICE_DEFAULT=0, DEVICE_MS_KINECT=0, DEVICE_ASUS_XTION=1, DEVICE_MAX=1 }; - - static const int INVALID_PIXEL_VAL = 0; - static const int INVALID_COORDINATE_VAL = 0; - -#ifdef HAVE_TBB - static const int DEFAULT_MAX_BUFFER_SIZE = 8; -#else - static const int DEFAULT_MAX_BUFFER_SIZE = 2; -#endif - static const int DEFAULT_IS_CIRCLE_BUFFER = 0; - static const int DEFAULT_MAX_TIME_DURATION = 20; - - CvCapture_OpenNI(int index=0); - CvCapture_OpenNI(const char * filename); - virtual ~CvCapture_OpenNI(); - - virtual double getProperty(int propIdx); - virtual bool setProperty(int probIdx, double propVal); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int outputType); - - bool isOpened() const; - -protected: - struct OutputMap - { - public: - cv::Mat mat; - IplImage* getIplImagePtr(); - private: - IplImage iplHeader; - }; - - static const int outputMapsTypesCount = 7; - - static XnMapOutputMode defaultMapOutputMode(); - - IplImage* retrieveDepthMap(); - IplImage* retrievePointCloudMap(); - IplImage* retrieveDisparityMap(); - IplImage* retrieveDisparityMap_32F(); - IplImage* retrieveValidDepthMask(); - IplImage* retrieveBGRImage(); - IplImage* retrieveGrayImage(); - - bool readCamerasParams(); - - double getDepthGeneratorProperty(int propIdx); - bool setDepthGeneratorProperty(int propIdx, double propVal); - double getImageGeneratorProperty(int propIdx); - bool setImageGeneratorProperty(int propIdx, double propVal); - double getCommonProperty(int propIdx); - bool setCommonProperty(int propIdx, double propVal); - - // OpenNI context - xn::Context context; - bool isContextOpened; - - xn::ProductionNode productionNode; - - // Data generators with its metadata - xn::DepthGenerator depthGenerator; - xn::DepthMetaData depthMetaData; - - xn::ImageGenerator imageGenerator; - xn::ImageMetaData imageMetaData; - - int maxBufferSize, maxTimeDuration; // for approx sync - bool isCircleBuffer; - cv::Ptr approxSyncGrabber; - - // Cameras settings: - // TODO find in OpenNI function to convert z->disparity and remove fields "baseline" and depthFocalLength_VGA - // Distance between IR projector and IR camera (in meters) - XnDouble baseline; - // Focal length for the IR camera in VGA resolution (in pixels) - XnUInt64 depthFocalLength_VGA; - - // The value for shadow (occluded pixels) - XnUInt64 shadowValue; - // The value for pixels without a valid disparity measurement - XnUInt64 noSampleValue; - - std::vector outputMaps; -}; - -IplImage* CvCapture_OpenNI::OutputMap::getIplImagePtr() -{ - if( mat.empty() ) - return 0; - - iplHeader = IplImage(mat); - return &iplHeader; -} - -bool CvCapture_OpenNI::isOpened() const -{ - return isContextOpened; -} - -XnMapOutputMode CvCapture_OpenNI::defaultMapOutputMode() -{ - XnMapOutputMode mode; - mode.nXRes = XN_VGA_X_RES; - mode.nYRes = XN_VGA_Y_RES; - mode.nFPS = 30; - return mode; -} - -CvCapture_OpenNI::CvCapture_OpenNI( int index ) -{ - int deviceType = DEVICE_DEFAULT; - XnStatus status; - - isContextOpened = false; - maxBufferSize = DEFAULT_MAX_BUFFER_SIZE; - isCircleBuffer = DEFAULT_IS_CIRCLE_BUFFER; - maxTimeDuration = DEFAULT_MAX_TIME_DURATION; - - if( index >= 10 ) - { - deviceType = index / 10; - index %= 10; - } - - if( deviceType > DEVICE_MAX ) - return; - - // Initialize and configure the context. - status = context.Init(); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to initialize the context: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - // Find devices - xn::NodeInfoList devicesList; - status = context.EnumerateProductionTrees( XN_NODE_TYPE_DEVICE, NULL, devicesList, 0 ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate production trees: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - // Chose device according to index - xn::NodeInfoList::Iterator it = devicesList.Begin(); - for( int i = 0; i < index && it!=devicesList.End(); ++i ) it++; - if ( it == devicesList.End() ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed device with index " << index << std::endl; - return; - } - - xn::NodeInfo deviceNode = *it; - status = context.CreateProductionTree( deviceNode, productionNode ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create production tree: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - xn::ScriptNode scriptNode; - status = context.RunXmlScript( XMLConfig.c_str(), scriptNode ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to run xml script: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - // Associate generators with context. - // enumerate the nodes to find if depth generator is present - xn::NodeInfoList depthList; - status = context.EnumerateExistingNodes( depthList, XN_NODE_TYPE_DEPTH ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate depth generators: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - if( depthList.IsEmpty() ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : The device doesn't have depth generator. Such devices aren't supported now." << std::endl; - return; - } - status = depthGenerator.Create( context ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create depth generator: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - // enumerate the nodes to find if image generator is present - xn::NodeInfoList imageList; - status = context.EnumerateExistingNodes( imageList, XN_NODE_TYPE_IMAGE ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate image generators: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - if( !imageList.IsEmpty() ) - { - status = imageGenerator.Create( context ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create image generator: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - } - - // Set map output mode. - if( depthGenerator.IsValid() ) - { - CV_DbgAssert( depthGenerator.SetMapOutputMode(defaultMapOutputMode()) == XN_STATUS_OK ); // xn::DepthGenerator supports VGA only! (Jan 2011) - } - if( imageGenerator.IsValid() ) - { - CV_DbgAssert( imageGenerator.SetMapOutputMode(defaultMapOutputMode()) == XN_STATUS_OK ); - } - - if( deviceType == DEVICE_ASUS_XTION ) - { - //ps/asus specific - imageGenerator.SetIntProperty("InputFormat", 1 /*XN_IO_IMAGE_FORMAT_YUV422*/); - imageGenerator.SetPixelFormat(XN_PIXEL_FORMAT_RGB24); - depthGenerator.SetIntProperty("RegistrationType", 1 /*XN_PROCESSING_HARDWARE*/); - } - - // Start generating data. - status = context.StartGeneratingAll(); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to start generating OpenNI data: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - if( !readCamerasParams() ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Could not read cameras parameters" << std::endl; - return; - } - - outputMaps.resize( outputMapsTypesCount ); - - isContextOpened = true; - - setProperty(CV_CAP_PROP_OPENNI_REGISTRATION, 1.0); -} - -CvCapture_OpenNI::CvCapture_OpenNI(const char * filename) -{ - XnStatus status; - - isContextOpened = false; - maxBufferSize = DEFAULT_MAX_BUFFER_SIZE; - isCircleBuffer = DEFAULT_IS_CIRCLE_BUFFER; - maxTimeDuration = DEFAULT_MAX_TIME_DURATION; - - // Initialize and configure the context. - status = context.Init(); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to initialize the context: " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - // Open file - status = context.OpenFileRecording( filename, productionNode ); - if( status != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to open input file (" << filename << "): " - << std::string(xnGetStatusString(status)) << std::endl; - return; - } - - context.FindExistingNode( XN_NODE_TYPE_DEPTH, depthGenerator ); - context.FindExistingNode( XN_NODE_TYPE_IMAGE, imageGenerator ); - - if( !readCamerasParams() ) - { - std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Could not read cameras parameters" << std::endl; - return; - } - - outputMaps.resize( outputMapsTypesCount ); - - isContextOpened = true; -} - -CvCapture_OpenNI::~CvCapture_OpenNI() -{ - context.StopGeneratingAll(); - context.Release(); -} - -bool CvCapture_OpenNI::readCamerasParams() -{ - XnDouble pixelSize = 0; - if( depthGenerator.GetRealProperty( "ZPPS", pixelSize ) != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read pixel size!" << std::endl; - return false; - } - - // pixel size @ VGA = pixel size @ SXGA x 2 - pixelSize *= 2.0; // in mm - - // focal length of IR camera in pixels for VGA resolution - XnUInt64 zeroPlanDistance; // in mm - if( depthGenerator.GetIntProperty( "ZPD", zeroPlanDistance ) != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read virtual plane distance!" << std::endl; - return false; - } - - if( depthGenerator.GetRealProperty( "LDDIS", baseline ) != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read base line!" << std::endl; - return false; - } - - // baseline from cm -> mm - baseline *= 10; - - // focal length from mm -> pixels (valid for 640x480) - depthFocalLength_VGA = (XnUInt64)((double)zeroPlanDistance / (double)pixelSize); - - if( depthGenerator.GetIntProperty( "ShadowValue", shadowValue ) != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read property \"ShadowValue\"!" << std::endl; - return false; - } - - if( depthGenerator.GetIntProperty("NoSampleValue", noSampleValue ) != XN_STATUS_OK ) - { - std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read property \"NoSampleValue\"!" <isRun() ? 1. : 0.; - break; - case CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE : - propValue = maxBufferSize; - break; - case CV_CAP_PROP_OPENNI_CIRCLE_BUFFER : - propValue = isCircleBuffer ? 1. : 0.; - break; - case CV_CAP_PROP_OPENNI_MAX_TIME_DURATION : - propValue = maxTimeDuration; - break; - default : - { - std::stringstream ss; - ss << "Such parameter (propIdx=" << propIdx << ") isn't supported for getting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return propValue; -} - -bool CvCapture_OpenNI::setCommonProperty( int propIdx, double propValue ) -{ - bool isSet = false; - - switch( propIdx ) - { - // There is a set of properties that correspond to depth generator by default - // (is they are pass without particular generator flag). - case CV_CAP_PROP_OPENNI_REGISTRATION: - isSet = setDepthGeneratorProperty( propIdx, propValue ); - break; - case CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC : - if( propValue && depthGenerator.IsValid() && imageGenerator.IsValid() ) - { - // start synchronization - if( approxSyncGrabber.empty() ) - { - approxSyncGrabber = new ApproximateSyncGrabber( context, depthGenerator, imageGenerator, maxBufferSize, isCircleBuffer, maxTimeDuration ); - } - else - { - approxSyncGrabber->finish(); - - // update params - approxSyncGrabber->setMaxBufferSize(maxBufferSize); - approxSyncGrabber->setIsCircleBuffer(isCircleBuffer); - approxSyncGrabber->setMaxTimeDuration(maxTimeDuration); - } - approxSyncGrabber->start(); - } - else if( !propValue && !approxSyncGrabber.empty() ) - { - // finish synchronization - approxSyncGrabber->finish(); - } - break; - case CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE : - maxBufferSize = cvRound(propValue); - if( !approxSyncGrabber.empty() ) - approxSyncGrabber->setMaxBufferSize(maxBufferSize); - break; - case CV_CAP_PROP_OPENNI_CIRCLE_BUFFER : - if( !approxSyncGrabber.empty() ) - approxSyncGrabber->setIsCircleBuffer(isCircleBuffer); - break; - case CV_CAP_PROP_OPENNI_MAX_TIME_DURATION : - maxTimeDuration = cvRound(propValue); - if( !approxSyncGrabber.empty() ) - approxSyncGrabber->setMaxTimeDuration(maxTimeDuration); - break; - default: - { - std::stringstream ss; - ss << "Such parameter (propIdx=" << propIdx << ") isn't supported for setting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return isSet; -} - -double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx ) -{ - double propValue = 0; - if( !depthGenerator.IsValid() ) - return propValue; - - XnMapOutputMode mode; - - switch( propIdx ) - { - case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT : - CV_DbgAssert( depthGenerator.IsValid() ); - propValue = 1.; - break; - case CV_CAP_PROP_FRAME_WIDTH : - if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nXRes; - break; - case CV_CAP_PROP_FRAME_HEIGHT : - if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nYRes; - break; - case CV_CAP_PROP_FPS : - if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nFPS; - break; - case CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH : - propValue = depthGenerator.GetDeviceMaxDepth(); - break; - case CV_CAP_PROP_OPENNI_BASELINE : - propValue = baseline; - break; - case CV_CAP_PROP_OPENNI_FOCAL_LENGTH : - propValue = (double)depthFocalLength_VGA; - break; - case CV_CAP_PROP_OPENNI_REGISTRATION : - propValue = depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) ? 1.0 : 0.0; - break; - case CV_CAP_PROP_POS_MSEC : - propValue = (double)depthGenerator.GetTimestamp(); - break; - case CV_CAP_PROP_POS_FRAMES : - propValue = depthGenerator.GetFrameID(); - break; - default : - { - std::stringstream ss; - ss << "Depth generator does not support such parameter (propIdx=" << propIdx << ") for getting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return propValue; -} - -bool CvCapture_OpenNI::setDepthGeneratorProperty( int propIdx, double propValue ) -{ - bool isSet = false; - - CV_Assert( depthGenerator.IsValid() ); - - switch( propIdx ) - { - case CV_CAP_PROP_OPENNI_REGISTRATION: - { - if( propValue != 0.0 ) // "on" - { - // if there isn't image generator (i.e. ASUS XtionPro doesn't have it) - // then the property isn't avaliable - if( imageGenerator.IsValid() ) - { - if( !depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) ) - { - if( depthGenerator.GetAlternativeViewPointCap().IsViewPointSupported(imageGenerator) ) - { - XnStatus status = depthGenerator.GetAlternativeViewPointCap().SetViewPoint(imageGenerator); - if( status != XN_STATUS_OK ) - std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl; - else - isSet = true; - } - else - std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : Unsupported viewpoint." << std::endl; - } - else - isSet = true; - } - } - else // "off" - { - XnStatus status = depthGenerator.GetAlternativeViewPointCap().ResetViewPoint(); - if( status != XN_STATUS_OK ) - std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl; - else - isSet = true; - } - } - break; - default: - { - std::stringstream ss; - ss << "Depth generator does not support such parameter (propIdx=" << propIdx << ") for setting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return isSet; -} - -double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx ) -{ - double propValue = 0.; - if( !imageGenerator.IsValid() ) - return propValue; - - XnMapOutputMode mode; - switch( propIdx ) - { - case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT : - CV_DbgAssert( imageGenerator.IsValid() ); - propValue = 1.; - break; - case CV_CAP_PROP_FRAME_WIDTH : - if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nXRes; - break; - case CV_CAP_PROP_FRAME_HEIGHT : - if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nYRes; - break; - case CV_CAP_PROP_FPS : - if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK ) - propValue = mode.nFPS; - break; - case CV_CAP_PROP_POS_MSEC : - propValue = (double)imageGenerator.GetTimestamp(); - break; - case CV_CAP_PROP_POS_FRAMES : - propValue = (double)imageGenerator.GetFrameID(); - break; - default : - { - std::stringstream ss; - ss << "Image generator does not support such parameter (propIdx=" << propIdx << ") for getting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return propValue; -} - -bool CvCapture_OpenNI::setImageGeneratorProperty( int propIdx, double propValue ) -{ - bool isSet = false; - if( !imageGenerator.IsValid() ) - return isSet; - - switch( propIdx ) - { - case CV_CAP_PROP_OPENNI_OUTPUT_MODE : - { - XnMapOutputMode mode; - - switch( cvRound(propValue) ) - { - case CV_CAP_OPENNI_VGA_30HZ : - mode.nXRes = XN_VGA_X_RES; - mode.nYRes = XN_VGA_Y_RES; - mode.nFPS = 30; - break; - case CV_CAP_OPENNI_SXGA_15HZ : - mode.nXRes = XN_SXGA_X_RES; - mode.nYRes = XN_SXGA_Y_RES; - mode.nFPS = 15; - break; - case CV_CAP_OPENNI_SXGA_30HZ : - mode.nXRes = XN_SXGA_X_RES; - mode.nYRes = XN_SXGA_Y_RES; - mode.nFPS = 30; - break; - case CV_CAP_OPENNI_QVGA_30HZ : - mode.nXRes = XN_QVGA_X_RES; - mode.nYRes = XN_QVGA_Y_RES; - mode.nFPS = 30; - break; - case CV_CAP_OPENNI_QVGA_60HZ : - mode.nXRes = XN_QVGA_X_RES; - mode.nYRes = XN_QVGA_Y_RES; - mode.nFPS = 60; - break; - default : - CV_Error( CV_StsBadArg, "Unsupported image generator output mode.\n"); - } - - XnStatus status = imageGenerator.SetMapOutputMode( mode ); - if( status != XN_STATUS_OK ) - std::cerr << "CvCapture_OpenNI::setImageGeneratorProperty : " << xnGetStatusString(status) << std::endl; - else - isSet = true; - break; - } - default: - { - std::stringstream ss; - ss << "Image generator does not support such parameter (propIdx=" << propIdx << ") for setting.\n"; - CV_Error( CV_StsBadArg, ss.str().c_str() ); - } - } - - return isSet; -} - -bool CvCapture_OpenNI::grabFrame() -{ - if( !isOpened() ) - return false; - - bool isGrabbed = false; - if( !approxSyncGrabber.empty() && approxSyncGrabber->isRun() ) - { - isGrabbed = approxSyncGrabber->grab( depthMetaData, imageMetaData ); - } - else - { - XnStatus status = context.WaitAndUpdateAll(); - if( status != XN_STATUS_OK ) - return false; - - if( depthGenerator.IsValid() ) - depthGenerator.GetMetaData( depthMetaData ); - if( imageGenerator.IsValid() ) - imageGenerator.GetMetaData( imageMetaData ); - isGrabbed = true; - } - - return isGrabbed; -} - -inline void getDepthMapFromMetaData( const xn::DepthMetaData& depthMetaData, cv::Mat& depthMap, XnUInt64 noSampleValue, XnUInt64 shadowValue ) -{ - int cols = depthMetaData.XRes(); - int rows = depthMetaData.YRes(); - - depthMap.create( rows, cols, CV_16UC1 ); - - const XnDepthPixel* pDepthMap = depthMetaData.Data(); - - // CV_Assert( sizeof(unsigned short) == sizeof(XnDepthPixel) ); - memcpy( depthMap.data, pDepthMap, cols*rows*sizeof(XnDepthPixel) ); - - cv::Mat badMask = (depthMap == (double)noSampleValue) | (depthMap == (double)shadowValue) | (depthMap == 0); - - // mask the pixels with invalid depth - depthMap.setTo( cv::Scalar::all( CvCapture_OpenNI::INVALID_PIXEL_VAL ), badMask ); -} - -IplImage* CvCapture_OpenNI::retrieveDepthMap() -{ - if( !depthMetaData.Data() ) - return 0; - - getDepthMapFromMetaData( depthMetaData, outputMaps[CV_CAP_OPENNI_DEPTH_MAP].mat, noSampleValue, shadowValue ); - - return outputMaps[CV_CAP_OPENNI_DEPTH_MAP].getIplImagePtr(); -} - -IplImage* CvCapture_OpenNI::retrievePointCloudMap() -{ - if( !depthMetaData.Data() ) - return 0; - - cv::Mat depth; - getDepthMapFromMetaData( depthMetaData, depth, noSampleValue, shadowValue ); - - const int badPoint = INVALID_PIXEL_VAL; - const float badCoord = INVALID_COORDINATE_VAL; - int cols = depthMetaData.XRes(), rows = depthMetaData.YRes(); - cv::Mat pointCloud_XYZ( rows, cols, CV_32FC3, cv::Scalar::all(badPoint) ); - - cv::Ptr proj = new XnPoint3D[cols*rows]; - cv::Ptr real = new XnPoint3D[cols*rows]; - for( int y = 0; y < rows; y++ ) - { - for( int x = 0; x < cols; x++ ) - { - int ind = y*cols+x; - proj[ind].X = (float)x; - proj[ind].Y = (float)y; - proj[ind].Z = depth.at(y, x); - } - } - depthGenerator.ConvertProjectiveToRealWorld(cols*rows, proj, real); - - for( int y = 0; y < rows; y++ ) - { - for( int x = 0; x < cols; x++ ) - { - // Check for invalid measurements - if( depth.at(y, x) == badPoint ) // not valid - pointCloud_XYZ.at(y,x) = cv::Point3f( badCoord, badCoord, badCoord ); - else - { - int ind = y*cols+x; - pointCloud_XYZ.at(y,x) = cv::Point3f( real[ind].X*0.001f, real[ind].Y*0.001f, real[ind].Z*0.001f); // from mm to meters - } - } - } - - outputMaps[CV_CAP_OPENNI_POINT_CLOUD_MAP].mat = pointCloud_XYZ; - - return outputMaps[CV_CAP_OPENNI_POINT_CLOUD_MAP].getIplImagePtr(); -} - -static void computeDisparity_32F( const xn::DepthMetaData& depthMetaData, cv::Mat& disp, XnDouble baseline, XnUInt64 F, - XnUInt64 noSampleValue, XnUInt64 shadowValue ) -{ - cv::Mat depth; - getDepthMapFromMetaData( depthMetaData, depth, noSampleValue, shadowValue ); - CV_Assert( depth.type() == CV_16UC1 ); - - - // disparity = baseline * F / z; - - float mult = (float)(baseline /*mm*/ * F /*pixels*/); - - disp.create( depth.size(), CV_32FC1); - disp = cv::Scalar::all( CvCapture_OpenNI::INVALID_PIXEL_VAL ); - for( int y = 0; y < disp.rows; y++ ) - { - for( int x = 0; x < disp.cols; x++ ) - { - unsigned short curDepth = depth.at(y,x); - if( curDepth != CvCapture_OpenNI::INVALID_PIXEL_VAL ) - disp.at(y,x) = mult / curDepth; - } - } -} - -IplImage* CvCapture_OpenNI::retrieveDisparityMap() -{ - if( !depthMetaData.Data() ) - return 0; - - cv::Mat disp32; - computeDisparity_32F( depthMetaData, disp32, baseline, depthFocalLength_VGA, noSampleValue, shadowValue ); - - disp32.convertTo( outputMaps[CV_CAP_OPENNI_DISPARITY_MAP].mat, CV_8UC1 ); - - return outputMaps[CV_CAP_OPENNI_DISPARITY_MAP].getIplImagePtr(); -} - -IplImage* CvCapture_OpenNI::retrieveDisparityMap_32F() -{ - if( !depthMetaData.Data() ) - return 0; - - computeDisparity_32F( depthMetaData, outputMaps[CV_CAP_OPENNI_DISPARITY_MAP_32F].mat, baseline, depthFocalLength_VGA, noSampleValue, shadowValue ); - - return outputMaps[CV_CAP_OPENNI_DISPARITY_MAP_32F].getIplImagePtr(); -} - -IplImage* CvCapture_OpenNI::retrieveValidDepthMask() -{ - if( !depthMetaData.Data() ) - return 0; - - cv::Mat depth; - getDepthMapFromMetaData( depthMetaData, depth, noSampleValue, shadowValue ); - - outputMaps[CV_CAP_OPENNI_VALID_DEPTH_MASK].mat = depth != CvCapture_OpenNI::INVALID_PIXEL_VAL; - - return outputMaps[CV_CAP_OPENNI_VALID_DEPTH_MASK].getIplImagePtr(); -} - -inline void getBGRImageFromMetaData( const xn::ImageMetaData& imageMetaData, cv::Mat& bgrImage ) -{ - if( imageMetaData.PixelFormat() != XN_PIXEL_FORMAT_RGB24 ) - CV_Error( CV_StsUnsupportedFormat, "Unsupported format of grabbed image\n" ); - - cv::Mat rgbImage( imageMetaData.YRes(), imageMetaData.XRes(), CV_8UC3 ); - const XnRGB24Pixel* pRgbImage = imageMetaData.RGB24Data(); - - // CV_Assert( 3*sizeof(uchar) == sizeof(XnRGB24Pixel) ); - memcpy( rgbImage.data, pRgbImage, rgbImage.total()*sizeof(XnRGB24Pixel) ); - cv::cvtColor( rgbImage, bgrImage, CV_RGB2BGR ); -} - -IplImage* CvCapture_OpenNI::retrieveBGRImage() -{ - if( !imageMetaData.Data() ) - return 0; - - getBGRImageFromMetaData( imageMetaData, outputMaps[CV_CAP_OPENNI_BGR_IMAGE].mat ); - - return outputMaps[CV_CAP_OPENNI_BGR_IMAGE].getIplImagePtr(); -} - -IplImage* CvCapture_OpenNI::retrieveGrayImage() -{ - if( !imageMetaData.Data() ) - return 0; - - CV_Assert( imageMetaData.BytesPerPixel() == 3 ); // RGB - - cv::Mat rgbImage; - getBGRImageFromMetaData( imageMetaData, rgbImage ); - cv::cvtColor( rgbImage, outputMaps[CV_CAP_OPENNI_GRAY_IMAGE].mat, CV_BGR2GRAY ); - - return outputMaps[CV_CAP_OPENNI_GRAY_IMAGE].getIplImagePtr(); -} - -IplImage* CvCapture_OpenNI::retrieveFrame( int outputType ) -{ - IplImage* image = 0; - CV_Assert( outputType < outputMapsTypesCount && outputType >= 0); - - if( outputType == CV_CAP_OPENNI_DEPTH_MAP ) - { - image = retrieveDepthMap(); - } - else if( outputType == CV_CAP_OPENNI_POINT_CLOUD_MAP ) - { - image = retrievePointCloudMap(); - } - else if( outputType == CV_CAP_OPENNI_DISPARITY_MAP ) - { - image = retrieveDisparityMap(); - } - else if( outputType == CV_CAP_OPENNI_DISPARITY_MAP_32F ) - { - image = retrieveDisparityMap_32F(); - } - else if( outputType == CV_CAP_OPENNI_VALID_DEPTH_MASK ) - { - image = retrieveValidDepthMask(); - } - else if( outputType == CV_CAP_OPENNI_BGR_IMAGE ) - { - image = retrieveBGRImage(); - } - else if( outputType == CV_CAP_OPENNI_GRAY_IMAGE ) - { - image = retrieveGrayImage(); - } - - return image; -} - - -CvCapture* cvCreateCameraCapture_OpenNI( int index ) -{ - CvCapture_OpenNI* capture = new CvCapture_OpenNI( index ); - - if( capture->isOpened() ) - return capture; - - delete capture; - return 0; -} - -CvCapture* cvCreateFileCapture_OpenNI( const char* filename ) -{ - CvCapture_OpenNI* capture = new CvCapture_OpenNI( filename ); - - if( capture->isOpened() ) - return capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_pvapi.cpp b/modules/highgui/src/cap_pvapi.cpp deleted file mode 100644 index fe94d8c..0000000 --- a/modules/highgui/src/cap_pvapi.cpp +++ /dev/null @@ -1,377 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -// - -// -// The code has been contributed by Justin G. Eskesen on 2010 Jan -// - -#include "precomp.hpp" - -#ifdef HAVE_PVAPI -#if !defined WIN32 && !defined _WIN32 && !defined _LINUX -#define _LINUX -#endif - -#if defined(_x64) || defined (__x86_64) || defined (_M_X64) -#define _x64 1 -#elif defined(_x86) || defined(__i386) || defined (_M_IX86) -#define _x86 1 -#endif - -#include -#ifdef WIN32 -# include -#else -# include -#endif - -#include -//#include - -#define MAX_CAMERAS 10 - -/********************* Capturing video from camera via PvAPI *********************/ - -class CvCaptureCAM_PvAPI : public CvCapture -{ -public: - CvCaptureCAM_PvAPI(); - virtual ~CvCaptureCAM_PvAPI() - { - close(); - } - - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() - { - return CV_CAP_PVAPI; - } - -protected: -#ifndef WIN32 - virtual void Sleep(unsigned int time); -#endif - - typedef struct - { - unsigned long UID; - tPvHandle Handle; - tPvFrame Frame; - } tCamera; - - IplImage *frame; - IplImage *grayframe; - tCamera Camera; - tPvErr Errcode; - bool monocrome; -}; - - -CvCaptureCAM_PvAPI::CvCaptureCAM_PvAPI() -{ - monocrome=false; - memset(&this->Camera, 0, sizeof(this->Camera)); -} - -#ifndef WIN32 -void CvCaptureCAM_PvAPI::Sleep(unsigned int time) -{ - struct timespec t,r; - - t.tv_sec = time / 1000; - t.tv_nsec = (time % 1000) * 1000000; - - while(nanosleep(&t,&r)==-1) - t = r; -} -#endif - -void CvCaptureCAM_PvAPI::close() -{ - // Stop the acquisition & free the camera - PvCommandRun(Camera.Handle, "AcquisitionStop"); - PvCaptureEnd(Camera.Handle); - PvCameraClose(Camera.Handle); - PvUnInitialize(); -} - -// Initialize camera input -bool CvCaptureCAM_PvAPI::open( int index ) -{ - tPvCameraInfo cameraList[MAX_CAMERAS]; - - tPvCameraInfo camInfo; - tPvIpSettings ipSettings; - - - if (PvInitialize()) { - } - //return false; - - Sleep(1000); - - //close(); - - int numCameras=PvCameraList(cameraList, MAX_CAMERAS, NULL); - - if (numCameras <= 0 || index >= numCameras) - return false; - - Camera.UID = cameraList[index].UniqueId; - - if (!PvCameraInfo(Camera.UID,&camInfo) && !PvCameraIpSettingsGet(Camera.UID,&ipSettings)) { - /* - struct in_addr addr; - addr.s_addr = ipSettings.CurrentIpAddress; - printf("Current address:\t%s\n",inet_ntoa(addr)); - addr.s_addr = ipSettings.CurrentIpSubnet; - printf("Current subnet:\t\t%s\n",inet_ntoa(addr)); - addr.s_addr = ipSettings.CurrentIpGateway; - printf("Current gateway:\t%s\n",inet_ntoa(addr)); - */ - } - else { - fprintf(stderr,"ERROR: could not retrieve camera IP settings.\n"); - return false; - } - - - if (PvCameraOpen(Camera.UID, ePvAccessMaster, &(Camera.Handle))==ePvErrSuccess) - { - - //Set Pixel Format to BRG24 to follow conventions - /*Errcode = PvAttrEnumSet(Camera.Handle, "PixelFormat", "Bgr24"); - if (Errcode != ePvErrSuccess) - { - fprintf(stderr, "PvAPI: couldn't set PixelFormat to Bgr24\n"); - return NULL; - } - */ - tPvUint32 frameWidth, frameHeight, frameSize; - unsigned long maxSize; - char pixelFormat[256]; - PvAttrUint32Get(Camera.Handle, "TotalBytesPerFrame", &frameSize); - PvAttrUint32Get(Camera.Handle, "Width", &frameWidth); - PvAttrUint32Get(Camera.Handle, "Height", &frameHeight); - PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); - maxSize = 8228; - //PvAttrUint32Get(Camera.Handle,"PacketSize",&maxSize); - if (PvCaptureAdjustPacketSize(Camera.Handle,maxSize)!=ePvErrSuccess) - return false; - if (strcmp(pixelFormat, "Mono8")==0) { - grayframe = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 1); - grayframe->widthStep = (int)frameWidth; - frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 3); - frame->widthStep = (int)frameWidth*3; - Camera.Frame.ImageBufferSize = frameSize; - Camera.Frame.ImageBuffer = grayframe->imageData; - } - else if (strcmp(pixelFormat, "Mono16")==0) { - grayframe = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_16U, 1); - grayframe->widthStep = (int)frameWidth; - frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_16U, 3); - frame->widthStep = (int)frameWidth*3; - Camera.Frame.ImageBufferSize = frameSize; - Camera.Frame.ImageBuffer = grayframe->imageData; - } - else if (strcmp(pixelFormat, "Bgr24")==0) { - frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 3); - frame->widthStep = (int)frameWidth*3; - Camera.Frame.ImageBufferSize = frameSize; - Camera.Frame.ImageBuffer = frame->imageData; - } - else - return false; - // Start the camera - PvCaptureStart(Camera.Handle); - - // Set the camera to capture continuously - if(PvAttrEnumSet(Camera.Handle, "AcquisitionMode", "Continuous")!= ePvErrSuccess) - { - fprintf(stderr,"Could not set Prosilica Acquisition Mode\n"); - return false; - } - - if(PvCommandRun(Camera.Handle, "AcquisitionStart")!= ePvErrSuccess) - { - fprintf(stderr,"Could not start Prosilica acquisition\n"); - return false; - } - - if(PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Freerun")!= ePvErrSuccess) - { - fprintf(stderr,"Error setting Prosilica trigger to \"Freerun\""); - return false; - } - - return true; - } - fprintf(stderr,"Error cannot open camera\n"); - return false; - -} - -bool CvCaptureCAM_PvAPI::grabFrame() -{ - //if(Camera.Frame.Status != ePvErrUnplugged && Camera.Frame.Status != ePvErrCancelled) - return PvCaptureQueueFrame(Camera.Handle, &(Camera.Frame), NULL) == ePvErrSuccess; -} - - -IplImage* CvCaptureCAM_PvAPI::retrieveFrame(int) -{ - - if (PvCaptureWaitForFrameDone(Camera.Handle, &(Camera.Frame), 1000) == ePvErrSuccess) { - if (!monocrome) { - cvMerge(grayframe,grayframe,grayframe,NULL,frame); - return frame; - } - return grayframe; - } - else return NULL; -} - -double CvCaptureCAM_PvAPI::getProperty( int property_id ) -{ - tPvUint32 nTemp; - - switch ( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - PvAttrUint32Get(Camera.Handle, "Width", &nTemp); - return (double)nTemp; - case CV_CAP_PROP_FRAME_HEIGHT: - PvAttrUint32Get(Camera.Handle, "Height", &nTemp); - return (double)nTemp; - case CV_CAP_PROP_EXPOSURE: - PvAttrUint32Get(Camera.Handle,"ExposureValue",&nTemp); - return (double)nTemp; - case CV_CAP_PROP_FPS: - tPvFloat32 nfTemp; - PvAttrFloat32Get(Camera.Handle, "StatFrameRate", &nfTemp); - return (double)nfTemp; - case CV_CAP_PROP_PVAPI_MULTICASTIP: - char mEnable[2]; - char mIp[11]; - PvAttrEnumGet(Camera.Handle,"MulticastEnable",mEnable,sizeof(mEnable),NULL); - if (strcmp(mEnable, "Off") == 0) { - return -1; - } - else { - long int ip; - int a,b,c,d; - PvAttrStringGet(Camera.Handle, "MulticastIPAddress",mIp,sizeof(mIp),NULL); - sscanf(mIp, "%d.%d.%d.%d", &a, &b, &c, &d); ip = ((a*256 + b)*256 + c)*256 + d; - return (double)ip; - } - } - return -1.0; -} - -bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) -{ - switch ( property_id ) - { - /* TODO: Camera works, but IplImage must be modified for the new size - case CV_CAP_PROP_FRAME_WIDTH: - PvAttrUint32Set(Camera.Handle, "Width", (tPvUint32)value); - break; - case CV_CAP_PROP_FRAME_HEIGHT: - PvAttrUint32Set(Camera.Handle, "Heigth", (tPvUint32)value); - break; - */ - case CV_CAP_PROP_MONOCROME: - if (value==1) { - char pixelFormat[256]; - PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); - if ((strcmp(pixelFormat, "Mono8")==0) || strcmp(pixelFormat, "Mono16")==0) { - monocrome=true; - } - else - return false; - } - else - monocrome=false; - break; - case CV_CAP_PROP_EXPOSURE: - if ((PvAttrUint32Set(Camera.Handle,"ExposureValue",(tPvUint32)value)==ePvErrSuccess)) - break; - else - return false; - case CV_CAP_PROP_PVAPI_MULTICASTIP: - - if (value==-1) { - if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "Off")==ePvErrSuccess)) - break; - else - return false; - } - else { - std::string ip=cv::format("%d.%d.%d.%d", ((int)value>>24)&255, ((int)value>>16)&255, ((int)value>>8)&255, (int)value&255); - if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "On")==ePvErrSuccess) && - (PvAttrStringSet(Camera.Handle, "MulticastIPAddress", ip.c_str())==ePvErrSuccess)) - break; - else - return false; - } - default: - return false; - } - return true; -} - - -CvCapture* cvCreateCameraCapture_PvAPI( int index ) -{ - CvCaptureCAM_PvAPI* capture = new CvCaptureCAM_PvAPI; - - if ( capture->open( index )) - return capture; - - delete capture; - return NULL; -} -#endif diff --git a/modules/highgui/src/cap_qt.cpp b/modules/highgui/src/cap_qt.cpp deleted file mode 100644 index 1e941d0..0000000 --- a/modules/highgui/src/cap_qt.cpp +++ /dev/null @@ -1,1619 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - - -#include "precomp.hpp" - -// Original implementation by Mark Asbach -// Institute of Communications Engineering -// RWTH Aachen University -// -// For implementation details and background see: -// http://developer.apple.com/samplecode/qtframestepper.win/listing1.html -// -// Please note that timing will only be correct for videos that contain a visual track -// that has full length (compared to other tracks) - - -// standard includes -#include -#include - -// Mac OS includes -#include -#include -#include - - -// Global state (did we call EnterMovies?) -static int did_enter_movies = 0; - -// ---------------------------------------------------------------------------------------- -#pragma mark Reading Video Files - -/// Movie state structure for QuickTime movies -typedef struct CvCapture_QT_Movie -{ - Movie myMovie; // movie handle - GWorldPtr myGWorld; // we render into an offscreen GWorld - - CvSize size; // dimensions of the movie - TimeValue movie_start_time; // movies can start at arbitrary times - long number_of_frames; // duration in frames - long next_frame_time; - long next_frame_number; - - IplImage * image_rgb; // will point to the PixMap of myGWorld - IplImage * image_bgr; // will be returned by icvRetrieveFrame_QT() - -} CvCapture_QT_Movie; - - -static int icvOpenFile_QT_Movie (CvCapture_QT_Movie * capture, const char * filename); -static int icvClose_QT_Movie (CvCapture_QT_Movie * capture); -static double icvGetProperty_QT_Movie (CvCapture_QT_Movie * capture, int property_id); -static int icvSetProperty_QT_Movie (CvCapture_QT_Movie * capture, int property_id, double value); -static int icvGrabFrame_QT_Movie (CvCapture_QT_Movie * capture); -static const void * icvRetrieveFrame_QT_Movie (CvCapture_QT_Movie * capture, int); - - -static CvCapture_QT_Movie * icvCaptureFromFile_QT (const char * filename) -{ - static int did_enter_movies = 0; - if (! did_enter_movies) - { - EnterMovies(); - did_enter_movies = 1; - } - - CvCapture_QT_Movie * capture = 0; - - if (filename) - { - capture = (CvCapture_QT_Movie *) cvAlloc (sizeof (*capture)); - memset (capture, 0, sizeof(*capture)); - - if (!icvOpenFile_QT_Movie (capture, filename)) - cvFree( &capture ); - } - - return capture; -} - - - -/** - * convert full path to CFStringRef and open corresponding Movie. Then - * step over 'interesting frame times' to count total number of frames - * for video material with varying frame durations and create offscreen - * GWorld for rendering the movie frames. - * - * @author Mark Asbach - * @date 2005-11-04 - */ -static int icvOpenFile_QT_Movie (CvCapture_QT_Movie * capture, const char * filename) -{ - Rect myRect; - short myResID = 0; - Handle myDataRef = nil; - OSType myDataRefType = 0; - OSErr myErr = noErr; - - - // no old errors please - ClearMoviesStickyError (); - - // initialize pointers to zero - capture->myMovie = 0; - capture->myGWorld = nil; - - // initialize numbers with invalid values - capture->next_frame_time = -1; - capture->next_frame_number = -1; - capture->number_of_frames = -1; - capture->movie_start_time = -1; - capture->size = cvSize (-1,-1); - - - // we would use CFStringCreateWithFileSystemRepresentation (kCFAllocatorDefault, filename) on Mac OS X 10.4 - CFStringRef inPath = CFStringCreateWithCString (kCFAllocatorDefault, filename, kCFStringEncodingISOLatin1); - OPENCV_ASSERT ((inPath != nil), "icvOpenFile_QT_Movie", "couldnt create CFString from a string"); - - // create the data reference - myErr = QTNewDataReferenceFromFullPathCFString (inPath, kQTPOSIXPathStyle, 0, & myDataRef, & myDataRefType); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't create QTNewDataReferenceFromFullPathCFString().\n"); - return 0; - } - - // get the Movie - myErr = NewMovieFromDataRef(& capture->myMovie, newMovieActive | newMovieAsyncOK /* | newMovieIdleImportOK */, - & myResID, myDataRef, myDataRefType); - - // dispose of the data reference handle - we no longer need it - DisposeHandle (myDataRef); - - // if NewMovieFromDataRef failed, we already disposed the DataRef, so just return with an error - if (myErr != noErr) - { - fprintf (stderr, "Couldn't create a NewMovieFromDataRef() - error is %d.\n", myErr); - return 0; - } - - // count the number of video 'frames' in the movie by stepping through all of the - // video 'interesting times', or in other words, the places where the movie displays - // a new video sample. The time between these interesting times is not necessarily constant. - { - OSType whichMediaType = VisualMediaCharacteristic; - TimeValue theTime = -1; - - // find out movie start time - GetMovieNextInterestingTime (capture->myMovie, short (nextTimeMediaSample + nextTimeEdgeOK), - 1, & whichMediaType, TimeValue (0), 0, & theTime, NULL); - if (theTime == -1) - { - fprintf (stderr, "Couldn't inquire first frame time\n"); - return 0; - } - capture->movie_start_time = theTime; - capture->next_frame_time = theTime; - capture->next_frame_number = 0; - - // count all 'interesting times' of the movie - capture->number_of_frames = 0; - while (theTime >= 0) - { - GetMovieNextInterestingTime (capture->myMovie, short (nextTimeMediaSample), - 1, & whichMediaType, theTime, 0, & theTime, NULL); - capture->number_of_frames++; - } - } - - // get the bounding rectangle of the movie - GetMoviesError (); - GetMovieBox (capture->myMovie, & myRect); - capture->size = cvSize (myRect.right - myRect.left, myRect.bottom - myRect.top); - - // create gworld for decompressed image - myErr = QTNewGWorld (& capture->myGWorld, k32ARGBPixelFormat /* k24BGRPixelFormat geht leider nicht */, - & myRect, nil, nil, 0); - OPENCV_ASSERT (myErr == noErr, "icvOpenFile_QT_Movie", "couldnt create QTNewGWorld() for output image"); - SetMovieGWorld (capture->myMovie, capture->myGWorld, nil); - - // build IplImage header that will point to the PixMap of the Movie's GWorld later on - capture->image_rgb = cvCreateImageHeader (capture->size, IPL_DEPTH_8U, 4); - - // create IplImage that hold correctly formatted result - capture->image_bgr = cvCreateImage (capture->size, IPL_DEPTH_8U, 3); - - // okay, that's it - should we wait until the Movie is playable? - return 1; -} - -/** - * dispose of QuickTime Movie and free memory buffers - * - * @author Mark Asbach - * @date 2005-11-04 - */ -static int icvClose_QT_Movie (CvCapture_QT_Movie * capture) -{ - OPENCV_ASSERT (capture, "icvClose_QT_Movie", "'capture' is a NULL-pointer"); - - // deallocate and free resources - if (capture->myMovie) - { - cvReleaseImage (& capture->image_bgr); - cvReleaseImageHeader (& capture->image_rgb); - DisposeGWorld (capture->myGWorld); - DisposeMovie (capture->myMovie); - } - - // okay, that's it - return 1; -} - -/** - * get a capture property - * - * @author Mark Asbach - * @date 2005-11-05 - */ -static double icvGetProperty_QT_Movie (CvCapture_QT_Movie * capture, int property_id) -{ - OPENCV_ASSERT (capture, "icvGetProperty_QT_Movie", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->myMovie, "icvGetProperty_QT_Movie", "invalid Movie handle"); - OPENCV_ASSERT (capture->number_of_frames > 0, "icvGetProperty_QT_Movie", "movie has invalid number of frames"); - OPENCV_ASSERT (capture->movie_start_time >= 0, "icvGetProperty_QT_Movie", "movie has invalid start time"); - - // inquire desired property - switch (property_id) - { - case CV_CAP_PROP_POS_FRAMES: - return (capture->next_frame_number); - - case CV_CAP_PROP_POS_MSEC: - case CV_CAP_PROP_POS_AVI_RATIO: - { - TimeValue position = capture->next_frame_time - capture->movie_start_time; - - if (property_id == CV_CAP_PROP_POS_MSEC) - { - TimeScale timescale = GetMovieTimeScale (capture->myMovie); - return (static_cast (position) * 1000.0 / timescale); - } - else - { - TimeValue duration = GetMovieDuration (capture->myMovie); - return (static_cast (position) / duration); - } - } - break; // never reached - - case CV_CAP_PROP_FRAME_WIDTH: - return static_cast (capture->size.width); - - case CV_CAP_PROP_FRAME_HEIGHT: - return static_cast (capture->size.height); - - case CV_CAP_PROP_FPS: - { - TimeValue duration = GetMovieDuration (capture->myMovie); - TimeScale timescale = GetMovieTimeScale (capture->myMovie); - - return (capture->number_of_frames / (static_cast (duration) / timescale)); - } - - case CV_CAP_PROP_FRAME_COUNT: - return static_cast (capture->number_of_frames); - - case CV_CAP_PROP_FOURCC: // not implemented - case CV_CAP_PROP_FORMAT: // not implemented - case CV_CAP_PROP_MODE: // not implemented - default: - // unhandled or unknown capture property - OPENCV_ERROR (CV_StsBadArg, "icvSetProperty_QT_Movie", "unknown or unhandled property_id"); - return CV_StsBadArg; - } - - return 0; -} - -/** - * set a capture property. With movie files, it is only possible to set the - * position (i.e. jump to a given time or frame number) - * - * @author Mark Asbach - * @date 2005-11-05 - */ -static int icvSetProperty_QT_Movie (CvCapture_QT_Movie * capture, int property_id, double value) -{ - OPENCV_ASSERT (capture, "icvSetProperty_QT_Movie", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->myMovie, "icvSetProperty_QT_Movie", "invalid Movie handle"); - OPENCV_ASSERT (capture->number_of_frames > 0, "icvSetProperty_QT_Movie", "movie has invalid number of frames"); - OPENCV_ASSERT (capture->movie_start_time >= 0, "icvSetProperty_QT_Movie", "movie has invalid start time"); - - // inquire desired property - // - // rework these three points to really work through 'interesting times'. - // with the current implementation, they result in wrong times or wrong frame numbers with content that - // features varying frame durations - switch (property_id) - { - case CV_CAP_PROP_POS_MSEC: - case CV_CAP_PROP_POS_AVI_RATIO: - { - TimeValue destination; - OSType myType = VisualMediaCharacteristic; - OSErr myErr = noErr; - - if (property_id == CV_CAP_PROP_POS_MSEC) - { - TimeScale timescale = GetMovieTimeScale (capture->myMovie); - destination = static_cast (value / 1000.0 * timescale + capture->movie_start_time); - } - else - { - TimeValue duration = GetMovieDuration (capture->myMovie); - destination = static_cast (value * duration + capture->movie_start_time); - } - - // really seek? - if (capture->next_frame_time == destination) - break; - - // seek into which direction? - if (capture->next_frame_time < destination) - { - while (capture->next_frame_time < destination) - { - capture->next_frame_number++; - GetMovieNextInterestingTime (capture->myMovie, nextTimeStep, 1, & myType, capture->next_frame_time, - 1, & capture->next_frame_time, NULL); - myErr = GetMoviesError(); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't go on to GetMovieNextInterestingTime() in icvGrabFrame_QT.\n"); - return 0; - } - } - } - else - { - while (capture->next_frame_time > destination) - { - capture->next_frame_number--; - GetMovieNextInterestingTime (capture->myMovie, nextTimeStep, 1, & myType, capture->next_frame_time, - -1, & capture->next_frame_time, NULL); - myErr = GetMoviesError(); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't go back to GetMovieNextInterestingTime() in icvGrabFrame_QT.\n"); - return 0; - } - } - } - } - break; - - case CV_CAP_PROP_POS_FRAMES: - { - TimeValue destination = static_cast (value); - short direction = (destination > capture->next_frame_number) ? 1 : -1; - OSType myType = VisualMediaCharacteristic; - OSErr myErr = noErr; - - while (destination != capture->next_frame_number) - { - capture->next_frame_number += direction; - GetMovieNextInterestingTime (capture->myMovie, nextTimeStep, 1, & myType, capture->next_frame_time, - direction, & capture->next_frame_time, NULL); - myErr = GetMoviesError(); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't step to desired frame number in icvGrabFrame_QT.\n"); - return 0; - } - } - } - break; - - default: - // unhandled or unknown capture property - OPENCV_ERROR (CV_StsBadArg, "icvSetProperty_QT_Movie", "unknown or unhandled property_id"); - return 0; - } - - // positive result means success - return 1; -} - -/** - * the original meaning of this method is to acquire raw frame data for the next video - * frame but not decompress it. With the QuickTime video reader, this is reduced to - * advance to the current frame time. - * - * @author Mark Asbach - * @date 2005-11-06 - */ -static int icvGrabFrame_QT_Movie (CvCapture_QT_Movie * capture) -{ - OPENCV_ASSERT (capture, "icvGrabFrame_QT_Movie", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->myMovie, "icvGrabFrame_QT_Movie", "invalid Movie handle"); - - TimeValue myCurrTime; - OSType myType = VisualMediaCharacteristic; - OSErr myErr = noErr; - - - // jump to current video sample - SetMovieTimeValue (capture->myMovie, capture->next_frame_time); - myErr = GetMoviesError(); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't SetMovieTimeValue() in icvGrabFrame_QT_Movie.\n"); - return 0; - } - - // where are we now? - myCurrTime = GetMovieTime (capture->myMovie, NULL); - - // increment counters - capture->next_frame_number++; - GetMovieNextInterestingTime (capture->myMovie, nextTimeStep, 1, & myType, myCurrTime, 1, & capture->next_frame_time, NULL); - myErr = GetMoviesError(); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't GetMovieNextInterestingTime() in icvGrabFrame_QT_Movie.\n"); - return 0; - } - - // that's it - return 1; -} - -/** - * render the current frame into an image buffer and convert to OpenCV IplImage - * buffer layout (BGR sampling) - * - * @author Mark Asbach - * @date 2005-11-06 - */ -static const void * icvRetrieveFrame_QT_Movie (CvCapture_QT_Movie * capture, int) -{ - OPENCV_ASSERT (capture, "icvRetrieveFrame_QT_Movie", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->myMovie, "icvRetrieveFrame_QT_Movie", "invalid Movie handle"); - OPENCV_ASSERT (capture->image_rgb, "icvRetrieveFrame_QT_Movie", "invalid source image"); - OPENCV_ASSERT (capture->image_bgr, "icvRetrieveFrame_QT_Movie", "invalid destination image"); - - PixMapHandle myPixMapHandle = nil; - OSErr myErr = noErr; - - - // invalidates the movie's display state so that the Movie Toolbox - // redraws the movie the next time we call MoviesTask - UpdateMovie (capture->myMovie); - myErr = GetMoviesError (); - if (myErr != noErr) - { - fprintf (stderr, "Couldn't UpdateMovie() in icvRetrieveFrame_QT_Movie().\n"); - return 0; - } - - // service active movie (= redraw immediately) - MoviesTask (capture->myMovie, 0L); - myErr = GetMoviesError (); - if (myErr != noErr) - { - fprintf (stderr, "MoviesTask() didn't succeed in icvRetrieveFrame_QT_Movie().\n"); - return 0; - } - - // update IplImage header that points to PixMap of the Movie's GWorld. - // unfortunately, cvCvtColor doesn't know ARGB, the QuickTime pixel format, - // so we pass a modfied address. - // ATTENTION: don't access the last pixel's alpha entry, it's inexistant - myPixMapHandle = GetGWorldPixMap (capture->myGWorld); - LockPixels (myPixMapHandle); - cvSetData (capture->image_rgb, GetPixBaseAddr (myPixMapHandle) + 1, GetPixRowBytes (myPixMapHandle)); - - // covert RGB of GWorld to BGR - cvCvtColor (capture->image_rgb, capture->image_bgr, CV_RGBA2BGR); - - // allow QuickTime to access the buffer again - UnlockPixels (myPixMapHandle); - - // always return the same image pointer - return capture->image_bgr; -} - - -// ---------------------------------------------------------------------------------------- -#pragma mark - -#pragma mark Capturing from Video Cameras - -#ifdef USE_VDIG_VERSION - - /// SequenceGrabber state structure for QuickTime - typedef struct CvCapture_QT_Cam_vdig - { - ComponentInstance grabber; - short channel; - GWorldPtr myGWorld; - PixMapHandle pixmap; - - CvSize size; - long number_of_frames; - - IplImage * image_rgb; // will point to the PixMap of myGWorld - IplImage * image_bgr; // will be returned by icvRetrieveFrame_QT() - - } CvCapture_QT_Cam; - -#else - - typedef struct CvCapture_QT_Cam_barg - { - SeqGrabComponent grabber; - SGChannel channel; - GWorldPtr gworld; - Rect bounds; - ImageSequence sequence; - - volatile bool got_frame; - - CvSize size; - IplImage * image_rgb; // will point to the PixMap of myGWorld - IplImage * image_bgr; // will be returned by icvRetrieveFrame_QT() - - } CvCapture_QT_Cam; - -#endif - -static int icvOpenCamera_QT (CvCapture_QT_Cam * capture, const int index); -static int icvClose_QT_Cam (CvCapture_QT_Cam * capture); -static double icvGetProperty_QT_Cam (CvCapture_QT_Cam * capture, int property_id); -static int icvSetProperty_QT_Cam (CvCapture_QT_Cam * capture, int property_id, double value); -static int icvGrabFrame_QT_Cam (CvCapture_QT_Cam * capture); -static const void * icvRetrieveFrame_QT_Cam (CvCapture_QT_Cam * capture, int); - - -/** - * Initialize memory structure and call method to open camera - * - * @author Mark Asbach - * @date 2006-01-29 - */ -static CvCapture_QT_Cam * icvCaptureFromCam_QT (const int index) -{ - if (! did_enter_movies) - { - EnterMovies(); - did_enter_movies = 1; - } - - CvCapture_QT_Cam * capture = 0; - - if (index >= 0) - { - capture = (CvCapture_QT_Cam *) cvAlloc (sizeof (*capture)); - memset (capture, 0, sizeof(*capture)); - - if (!icvOpenCamera_QT (capture, index)) - cvFree (&capture); - } - - return capture; -} - -/// capture properties currently unimplemented for QuickTime camera interface -static double icvGetProperty_QT_Cam (CvCapture_QT_Cam * capture, int property_id) -{ - assert (0); - return 0; -} - -/// capture properties currently unimplemented for QuickTime camera interface -static int icvSetProperty_QT_Cam (CvCapture_QT_Cam * capture, int property_id, double value) -{ - assert (0); - return 0; -} - -#ifdef USE_VDIG_VERSION -#pragma mark Capturing using VDIG - -/** - * Open a quicktime video grabber component. This could be an attached - * IEEE1394 camera, a web cam, an iSight or digitizer card / video converter. - * - * @author Mark Asbach - * @date 2006-01-29 - */ -static int icvOpenCamera_QT (CvCapture_QT_Cam * capture, const int index) -{ - OPENCV_ASSERT (capture, "icvOpenCamera_QT", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (index >=0, "icvOpenCamera_QT", "camera index is negative"); - - ComponentDescription component_description; - Component component = 0; - int number_of_inputs = 0; - Rect myRect; - ComponentResult result = noErr; - - - // travers all components and count video digitizer channels - component_description.componentType = videoDigitizerComponentType; - component_description.componentSubType = 0L; - component_description.componentManufacturer = 0L; - component_description.componentFlags = 0L; - component_description.componentFlagsMask = 0L; - do - { - // traverse component list - component = FindNextComponent (component, & component_description); - - // found a component? - if (component) - { - // dump component name - #ifndef NDEBUG - ComponentDescription desc; - Handle nameHandle = NewHandleClear (200); - char nameBuffer [255]; - - result = GetComponentInfo (component, & desc, nameHandle, nil, nil); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt GetComponentInfo()"); - OPENCV_ASSERT (*nameHandle, "icvOpenCamera_QT", "No name returned by GetComponentInfo()"); - snprintf (nameBuffer, (**nameHandle) + 1, "%s", (char *) (* nameHandle + 1)); - printf ("- Videodevice: %s\n", nameBuffer); - DisposeHandle (nameHandle); - #endif - - // open component to count number of inputs - capture->grabber = OpenComponent (component); - if (capture->grabber) - { - result = VDGetNumberOfInputs (capture->grabber, & capture->channel); - if (result != noErr) - fprintf (stderr, "Couldnt GetNumberOfInputs: %d\n", (int) result); - else - { - #ifndef NDEBUG - printf (" Number of inputs: %d\n", (int) capture->channel + 1); - #endif - - // add to overall number of inputs - number_of_inputs += capture->channel + 1; - - // did the user select an input that falls into this device's - // range of inputs? Then leave the loop - if (number_of_inputs > index) - { - // calculate relative channel index - capture->channel = index - number_of_inputs + capture->channel + 1; - OPENCV_ASSERT (capture->channel >= 0, "icvOpenCamera_QT", "negative channel number"); - - // dump channel name - #ifndef NDEBUG - char name[256]; - Str255 nameBuffer; - - result = VDGetInputName (capture->grabber, capture->channel, nameBuffer); - OPENCV_ASSERT (result == noErr, "ictOpenCamera_QT", "couldnt GetInputName()"); - snprintf (name, *nameBuffer, "%s", (char *) (nameBuffer + 1)); - printf (" Choosing input %d - %s\n", (int) capture->channel, name); - #endif - - // leave the loop - break; - } - } - - // obviously no inputs of this device/component were needed - CloseComponent (capture->grabber); - } - } - } - while (component); - - // did we find the desired input? - if (! component) - { - fprintf(stderr, "Not enough inputs available - can't choose input %d\n", index); - return 0; - } - - // -- Okay now, we selected the digitizer input, lets set up digitizer destination -- - - ClearMoviesStickyError(); - - // Select the desired input - result = VDSetInput (capture->grabber, capture->channel); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt select video digitizer input"); - - // get the bounding rectangle of the video digitizer - result = VDGetActiveSrcRect (capture->grabber, capture->channel, & myRect); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt create VDGetActiveSrcRect from digitizer"); - myRect.right = 640; myRect.bottom = 480; - capture->size = cvSize (myRect.right - myRect.left, myRect.bottom - myRect.top); - printf ("Source rect is %d, %d -- %d, %d\n", (int) myRect.left, (int) myRect.top, (int) myRect.right, (int) myRect.bottom); - - // create offscreen GWorld - result = QTNewGWorld (& capture->myGWorld, k32ARGBPixelFormat, & myRect, nil, nil, 0); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt create QTNewGWorld() for output image"); - - // get pixmap - capture->pixmap = GetGWorldPixMap (capture->myGWorld); - result = GetMoviesError (); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt get pixmap"); - - // set digitizer rect - result = VDSetDigitizerRect (capture->grabber, & myRect); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt create VDGetActiveSrcRect from digitizer"); - - // set destination of digitized input - result = VDSetPlayThruDestination (capture->grabber, capture->pixmap, & myRect, nil, nil); - printf ("QuickTime error: %d\n", (int) result); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set video destination"); - - // get destination of digitized images - result = VDGetPlayThruDestination (capture->grabber, & capture->pixmap, nil, nil, nil); - printf ("QuickTime error: %d\n", (int) result); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt get video destination"); - OPENCV_ASSERT (capture->pixmap != nil, "icvOpenCamera_QT", "empty set video destination"); - - // get the bounding rectangle of the video digitizer - GetPixBounds (capture->pixmap, & myRect); - capture->size = cvSize (myRect.right - myRect.left, myRect.bottom - myRect.top); - - // build IplImage header that will point to the PixMap of the Movie's GWorld later on - capture->image_rgb = cvCreateImageHeader (capture->size, IPL_DEPTH_8U, 4); - OPENCV_ASSERT (capture->image_rgb, "icvOpenCamera_QT", "couldnt create image header"); - - // create IplImage that hold correctly formatted result - capture->image_bgr = cvCreateImage (capture->size, IPL_DEPTH_8U, 3); - OPENCV_ASSERT (capture->image_bgr, "icvOpenCamera_QT", "couldnt create image"); - - // notify digitizer component, that we well be starting grabbing soon - result = VDCaptureStateChanging (capture->grabber, vdFlagCaptureIsForRecord | vdFlagCaptureStarting | vdFlagCaptureLowLatency); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set capture state"); - - - // yeah, we did it - return 1; -} - -static int icvClose_QT_Cam (CvCapture_QT_Cam * capture) -{ - OPENCV_ASSERT (capture, "icvClose_QT_Cam", "'capture' is a NULL-pointer"); - - ComponentResult result = noErr; - - // notify digitizer component, that we well be stopping grabbing soon - result = VDCaptureStateChanging (capture->grabber, vdFlagCaptureStopping); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set capture state"); - - // release memory - cvReleaseImage (& capture->image_bgr); - cvReleaseImageHeader (& capture->image_rgb); - DisposeGWorld (capture->myGWorld); - CloseComponent (capture->grabber); - - // sucessful - return 1; -} - -static int icvGrabFrame_QT_Cam (CvCapture_QT_Cam * capture) -{ - OPENCV_ASSERT (capture, "icvGrabFrame_QT_Cam", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->grabber, "icvGrabFrame_QT_Cam", "'grabber' is a NULL-pointer"); - - ComponentResult result = noErr; - - // grab one frame - result = VDGrabOneFrame (capture->grabber); - if (result != noErr) - { - fprintf (stderr, "VDGrabOneFrame failed\n"); - return 0; - } - - // successful - return 1; -} - -static const void * icvRetrieveFrame_QT_Cam (CvCapture_QT_Cam * capture, int) -{ - OPENCV_ASSERT (capture, "icvRetrieveFrame_QT_Cam", "'capture' is a NULL-pointer"); - - PixMapHandle myPixMapHandle = nil; - - // update IplImage header that points to PixMap of the Movie's GWorld. - // unfortunately, cvCvtColor doesn't know ARGB, the QuickTime pixel format, - // so we pass a modfied address. - // ATTENTION: don't access the last pixel's alpha entry, it's inexistant - //myPixMapHandle = GetGWorldPixMap (capture->myGWorld); - myPixMapHandle = capture->pixmap; - LockPixels (myPixMapHandle); - cvSetData (capture->image_rgb, GetPixBaseAddr (myPixMapHandle) + 1, GetPixRowBytes (myPixMapHandle)); - - // covert RGB of GWorld to BGR - cvCvtColor (capture->image_rgb, capture->image_bgr, CV_RGBA2BGR); - - // allow QuickTime to access the buffer again - UnlockPixels (myPixMapHandle); - - // always return the same image pointer - return capture->image_bgr; -} - -#else -#pragma mark Capturing using Sequence Grabber - -static OSErr icvDataProc_QT_Cam (SGChannel channel, Ptr raw_data, long len, long *, long, TimeValue, short, long refCon) -{ - CvCapture_QT_Cam * capture = (CvCapture_QT_Cam *) refCon; - CodecFlags ignore; - ComponentResult err = noErr; - - - // we need valid pointers - OPENCV_ASSERT (capture, "icvDataProc_QT_Cam", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->gworld, "icvDataProc_QT_Cam", "'gworld' is a NULL-pointer"); - OPENCV_ASSERT (raw_data, "icvDataProc_QT_Cam", "'raw_data' is a NULL-pointer"); - - // create a decompression sequence the first time - if (capture->sequence == 0) - { - ImageDescriptionHandle description = (ImageDescriptionHandle) NewHandle(0); - - // we need a decompression sequence that fits the raw data coming from the camera - err = SGGetChannelSampleDescription (channel, (Handle) description); - OPENCV_ASSERT (err == noErr, "icvDataProc_QT_Cam", "couldnt get channel sample description"); - - //*************************************************************************************// - //This fixed a bug when Quicktime is called twice to grab a frame (black band bug) - Yannick Verdie 2010 - Rect sourceRect; - sourceRect.top = 0; - sourceRect.left = 0; - sourceRect.right = (**description).width; - sourceRect.bottom = (**description).height; - - MatrixRecord scaleMatrix; - RectMatrix(&scaleMatrix,&sourceRect,&capture->bounds); - - err = DecompressSequenceBegin (&capture->sequence, description, capture->gworld, 0,&capture->bounds,&scaleMatrix, srcCopy, NULL, 0, codecNormalQuality, bestSpeedCodec); - //**************************************************************************************// - - OPENCV_ASSERT (err == noErr, "icvDataProc_QT_Cam", "couldnt begin decompression sequence"); - DisposeHandle ((Handle) description); - } - - // okay, we have a decompression sequence -> decompress! - err = DecompressSequenceFrameS (capture->sequence, raw_data, len, 0, &ignore, nil); - if (err != noErr) - { - fprintf (stderr, "icvDataProc_QT_Cam: couldn't decompress frame - %d\n", (int) err); - return err; - } - - // check if we dropped a frame - /*#ifndef NDEBUG - if (capture->got_frame) - fprintf (stderr, "icvDataProc_QT_Cam: frame was dropped\n"); - #endif*/ - - // everything worked as expected - capture->got_frame = true; - return noErr; -} - - -static int icvOpenCamera_QT (CvCapture_QT_Cam * capture, const int index) -{ - OPENCV_ASSERT (capture, "icvOpenCamera_QT", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (index >= 0, "icvOpenCamera_QT", "camera index is negative"); - - PixMapHandle pixmap = nil; - OSErr result = noErr; - - // open sequence grabber component - capture->grabber = OpenDefaultComponent (SeqGrabComponentType, 0); - OPENCV_ASSERT (capture->grabber, "icvOpenCamera_QT", "couldnt create image"); - - // initialize sequence grabber component - result = SGInitialize (capture->grabber); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt initialize sequence grabber"); - result = SGSetDataRef (capture->grabber, 0, 0, seqGrabDontMakeMovie); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set data reference of sequence grabber"); - - // set up video channel - result = SGNewChannel (capture->grabber, VideoMediaType, & (capture->channel)); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt create new video channel"); - - // select the camera indicated by index - SGDeviceList device_list = 0; - result = SGGetChannelDeviceList (capture->channel, 0, & device_list); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt get channel device list"); - for (int i = 0, current_index = 1; i < (*device_list)->count; i++) - { - SGDeviceName device = (*device_list)->entry[i]; - if (device.flags == 0) - { - if (current_index == index) - { - result = SGSetChannelDevice (capture->channel, device.name); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set the channel video device"); - break; - } - current_index++; - } - } - result = SGDisposeDeviceList (capture->grabber, device_list); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt dispose the channel device list"); - - // query natural camera resolution -- this will be wrong, but will be an upper - // bound on the actual resolution -- the actual resolution is set below - // after starting the frame grabber - result = SGGetSrcVideoBounds (capture->channel, & (capture->bounds)); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set video channel bounds"); - - // create offscreen GWorld - result = QTNewGWorld (& (capture->gworld), k32ARGBPixelFormat, & (capture->bounds), 0, 0, 0); - result = SGSetGWorld (capture->grabber, capture->gworld, 0); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set GWorld for sequence grabber"); - result = SGSetChannelBounds (capture->channel, & (capture->bounds)); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set video channel bounds"); - result = SGSetChannelUsage (capture->channel, seqGrabRecord); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set channel usage"); - - // start recording so we can size - result = SGStartRecord (capture->grabber); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt start recording"); - - // don't know *actual* resolution until now - ImageDescriptionHandle imageDesc = (ImageDescriptionHandle)NewHandle(0); - result = SGGetChannelSampleDescription(capture->channel, (Handle)imageDesc); - OPENCV_ASSERT( result == noErr, "icvOpenCamera_QT", "couldn't get image size"); - capture->bounds.right = (**imageDesc).width; - capture->bounds.bottom = (**imageDesc).height; - DisposeHandle ((Handle) imageDesc); - - // stop grabber so that we can reset the parameters to the right size - result = SGStop (capture->grabber); - OPENCV_ASSERT (result == noErr, "icveClose_QT_Cam", "couldnt stop recording"); - - // reset GWorld to correct image size - GWorldPtr tmpgworld; - result = QTNewGWorld( &tmpgworld, k32ARGBPixelFormat, &(capture->bounds), 0, 0, 0); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt create offscreen GWorld"); - result = SGSetGWorld( capture->grabber, tmpgworld, 0); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set GWorld for sequence grabber"); - DisposeGWorld( capture->gworld ); - capture->gworld = tmpgworld; - - result = SGSetChannelBounds (capture->channel, & (capture->bounds)); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set video channel bounds"); - - // allocate images - capture->size = cvSize (capture->bounds.right - capture->bounds.left, capture->bounds.bottom - capture->bounds.top); - - // build IplImage header that points to the PixMap of the Movie's GWorld. - // unfortunately, cvCvtColor doesn't know ARGB, the QuickTime pixel format, - // so we shift the base address by one byte. - // ATTENTION: don't access the last pixel's alpha entry, it's inexistant - capture->image_rgb = cvCreateImageHeader (capture->size, IPL_DEPTH_8U, 4); - OPENCV_ASSERT (capture->image_rgb, "icvOpenCamera_QT", "couldnt create image header"); - pixmap = GetGWorldPixMap (capture->gworld); - OPENCV_ASSERT (pixmap, "icvOpenCamera_QT", "didn't get GWorld PixMap handle"); - LockPixels (pixmap); - cvSetData (capture->image_rgb, GetPixBaseAddr (pixmap) + 1, GetPixRowBytes (pixmap)); - - // create IplImage that hold correctly formatted result - capture->image_bgr = cvCreateImage (capture->size, IPL_DEPTH_8U, 3); - OPENCV_ASSERT (capture->image_bgr, "icvOpenCamera_QT", "couldnt create image"); - - - // tell the sequence grabber to invoke our data proc - result = SGSetDataProc (capture->grabber, NewSGDataUPP (icvDataProc_QT_Cam), (long) capture); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt set data proc"); - - // start recording - result = SGStartRecord (capture->grabber); - OPENCV_ASSERT (result == noErr, "icvOpenCamera_QT", "couldnt start recording"); - - return 1; -} - - -static int icvClose_QT_Cam (CvCapture_QT_Cam * capture) -{ - OPENCV_ASSERT (capture, "icvClose_QT_Cam", "'capture' is a NULL-pointer"); - - OSErr result = noErr; - - - // stop recording - result = SGStop (capture->grabber); - OPENCV_ASSERT (result == noErr, "icveClose_QT_Cam", "couldnt stop recording"); - - // close sequence grabber component - result = CloseComponent (capture->grabber); - OPENCV_ASSERT (result == noErr, "icveClose_QT_Cam", "couldnt close sequence grabber component"); - - // end decompression sequence - CDSequenceEnd (capture->sequence); - - // free memory - cvReleaseImage (& capture->image_bgr); - cvReleaseImageHeader (& capture->image_rgb); - DisposeGWorld (capture->gworld); - - // sucessful - return 1; -} - -static int icvGrabFrame_QT_Cam (CvCapture_QT_Cam * capture) -{ - OPENCV_ASSERT (capture, "icvGrabFrame_QT_Cam", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->grabber, "icvGrabFrame_QT_Cam", "'grabber' is a NULL-pointer"); - - ComponentResult result = noErr; - - - // grab one frame - result = SGIdle (capture->grabber); - if (result != noErr) - { - fprintf (stderr, "SGIdle failed in icvGrabFrame_QT_Cam with error %d\n", (int) result); - return 0; - } - - // successful - return 1; -} - -static const void * icvRetrieveFrame_QT_Cam (CvCapture_QT_Cam * capture, int) -{ - OPENCV_ASSERT (capture, "icvRetrieveFrame_QT_Cam", "'capture' is a NULL-pointer"); - OPENCV_ASSERT (capture->image_rgb, "icvRetrieveFrame_QT_Cam", "invalid source image"); - OPENCV_ASSERT (capture->image_bgr, "icvRetrieveFrame_QT_Cam", "invalid destination image"); - - OSErr myErr = noErr; - - - // service active sequence grabbers (= redraw immediately) - while (! capture->got_frame) - { - myErr = SGIdle (capture->grabber); - if (myErr != noErr) - { - fprintf (stderr, "SGIdle() didn't succeed in icvRetrieveFrame_QT_Cam().\n"); - return 0; - } - } - - // covert RGB of GWorld to BGR - cvCvtColor (capture->image_rgb, capture->image_bgr, CV_RGBA2BGR); - - // reset grabbing status - capture->got_frame = false; - - // always return the same image pointer - return capture->image_bgr; -} - -#endif - - -typedef struct CvVideoWriter_QT { - - DataHandler data_handler; - Movie movie; - Track track; - Media video; - - ICMCompressionSessionRef compression_session_ref; - - TimeValue duration_per_sample; -} CvVideoWriter_QT; - - -static TimeScale const TIME_SCALE = 600; - -static OSStatus icvEncodedFrameOutputCallback( - void* writer, - ICMCompressionSessionRef compression_session_ref, - OSStatus error, - ICMEncodedFrameRef encoded_frame_ref, - void* reserved -); - -static void icvSourceTrackingCallback( - void *source_tracking_ref_con, - ICMSourceTrackingFlags source_tracking_flags, - void *source_frame_ref_con, - void *reserved -); - -static int icvWriteFrame_QT( - CvVideoWriter_QT * video_writer, - const IplImage * image -) { - CVPixelBufferRef pixel_buffer_ref = NULL; - CVReturn retval = - CVPixelBufferCreate( - kCFAllocatorDefault, - image->width, image->height, k24RGBPixelFormat, - NULL /* pixel_buffer_attributes */, - &pixel_buffer_ref - ); - - // convert BGR IPL image to RGB pixel buffer - IplImage* image_rgb = - cvCreateImageHeader( - cvSize( image->width, image->height ), - IPL_DEPTH_8U, - 3 - ); - - retval = CVPixelBufferLockBaseAddress( pixel_buffer_ref, 0 ); - - void* base_address = CVPixelBufferGetBaseAddress( pixel_buffer_ref ); - size_t bytes_per_row = CVPixelBufferGetBytesPerRow( pixel_buffer_ref ); - cvSetData( image_rgb, base_address, bytes_per_row ); - - cvConvertImage( image, image_rgb, CV_CVTIMG_SWAP_RB ); - - retval = CVPixelBufferUnlockBaseAddress( pixel_buffer_ref, 0 ); - - cvReleaseImageHeader( &image_rgb ); - - ICMSourceTrackingCallbackRecord source_tracking_callback_record; - source_tracking_callback_record.sourceTrackingCallback = - icvSourceTrackingCallback; - source_tracking_callback_record.sourceTrackingRefCon = NULL; - - OSStatus status = - ICMCompressionSessionEncodeFrame( - video_writer->compression_session_ref, - pixel_buffer_ref, - 0, - video_writer->duration_per_sample, - kICMValidTime_DisplayDurationIsValid, - NULL, - &source_tracking_callback_record, - static_cast( &pixel_buffer_ref ) - ); - - return 0; -} - -static void icvReleaseVideoWriter_QT( CvVideoWriter_QT ** writer ) { - if ( ( writer != NULL ) && ( *writer != NULL ) ) { - CvVideoWriter_QT* video_writer = *writer; - - // force compression session to complete encoding of outstanding source - // frames - ICMCompressionSessionCompleteFrames( - video_writer->compression_session_ref, TRUE, 0, 0 - ); - - EndMediaEdits( video_writer->video ); - - ICMCompressionSessionRelease( video_writer->compression_session_ref ); - - InsertMediaIntoTrack( - video_writer->track, - 0, - 0, - GetMediaDuration( video_writer->video ), - FixRatio( 1, 1 ) - ); - - UpdateMovieInStorage( video_writer->movie, video_writer->data_handler ); - - CloseMovieStorage( video_writer->data_handler ); - -/* - // export to AVI - Handle data_ref; - OSType data_ref_type; - QTNewDataReferenceFromFullPathCFString( - CFSTR( "/Users/seibert/Desktop/test.avi" ), kQTPOSIXPathStyle, 0, - &data_ref, &data_ref_type - ); - - ConvertMovieToDataRef( video_writer->movie, NULL, data_ref, - data_ref_type, kQTFileTypeAVI, 'TVOD', 0, NULL ); - - DisposeHandle( data_ref ); -*/ - - DisposeMovie( video_writer->movie ); - - cvFree( writer ); - } -} - -static OSStatus icvEncodedFrameOutputCallback( - void* writer, - ICMCompressionSessionRef compression_session_ref, - OSStatus error, - ICMEncodedFrameRef encoded_frame_ref, - void* reserved -) { - CvVideoWriter_QT* video_writer = static_cast( writer ); - - OSStatus err = AddMediaSampleFromEncodedFrame( video_writer->video, - encoded_frame_ref, NULL ); - - return err; -} - -static void icvSourceTrackingCallback( - void *source_tracking_ref_con, - ICMSourceTrackingFlags source_tracking_flags, - void *source_frame_ref_con, - void *reserved -) { - if ( source_tracking_flags & kICMSourceTracking_ReleasedPixelBuffer ) { - CVPixelBufferRelease( - *static_cast( source_frame_ref_con ) - ); - } -} - - -static CvVideoWriter_QT* icvCreateVideoWriter_QT( - const char * filename, - int fourcc, - double fps, - CvSize frame_size, - int is_color -) { - CV_FUNCNAME( "icvCreateVideoWriter" ); - - CvVideoWriter_QT* video_writer = - static_cast( cvAlloc( sizeof( CvVideoWriter_QT ) ) ); - memset( video_writer, 0, sizeof( CvVideoWriter_QT ) ); - - Handle data_ref = NULL; - OSType data_ref_type; - DataHandler data_handler = NULL; - Movie movie = NULL; - ICMCompressionSessionOptionsRef options_ref = NULL; - ICMCompressionSessionRef compression_session_ref = NULL; - CFStringRef out_path = nil; - Track video_track = nil; - Media video = nil; - OSErr err = noErr; - CodecType codecType = kRawCodecType; - - __BEGIN__ - - // validate input arguments - if ( filename == NULL ) { - CV_ERROR( CV_StsBadArg, "Video file name must not be NULL" ); - } - if ( fps <= 0.0 ) { - CV_ERROR( CV_StsBadArg, "FPS must be larger than 0.0" ); - } - if ( ( frame_size.width <= 0 ) || ( frame_size.height <= 0 ) ) { - CV_ERROR( CV_StsBadArg, - "Frame width and height must be larger than 0" ); - } - - // initialize QuickTime - if ( !did_enter_movies ) { - err = EnterMovies(); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Unable to initialize QuickTime" ); - } - did_enter_movies = 1; - } - - // convert the file name into a data reference - out_path = CFStringCreateWithCString( kCFAllocatorDefault, filename, kCFStringEncodingISOLatin1 ); - CV_ASSERT( out_path != nil ); - err = QTNewDataReferenceFromFullPathCFString( out_path, kQTPOSIXPathStyle, - 0, &data_ref, &data_ref_type ); - CFRelease( out_path ); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, - "Cannot create data reference from file name" ); - } - - // create a new movie on disk - err = CreateMovieStorage( data_ref, data_ref_type, 'TVOD', - smCurrentScript, newMovieActive, &data_handler, &movie ); - - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot create movie storage" ); - } - - // create a track with video - video_track = NewMovieTrack (movie, - FixRatio( frame_size.width, 1 ), - FixRatio( frame_size.height, 1 ), - kNoVolume); - err = GetMoviesError(); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot create video track" ); - } - video = NewTrackMedia( video_track, VideoMediaType, TIME_SCALE, nil, 0 ); - err = GetMoviesError(); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot create video media" ); - } - - /*if( fourcc == CV_FOURCC( 'D', 'I', 'B', ' ' )) - codecType = kRawCodecType;*/ - - // start a compression session - err = ICMCompressionSessionOptionsCreate( kCFAllocatorDefault, - &options_ref ); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot create compression session options" ); - } - err = ICMCompressionSessionOptionsSetAllowTemporalCompression( options_ref, - true ); - if ( err != noErr) { - CV_ERROR( CV_StsInternal, "Cannot enable temporal compression" ); - } - err = ICMCompressionSessionOptionsSetAllowFrameReordering( options_ref, - true ); - if ( err != noErr) { - CV_ERROR( CV_StsInternal, "Cannot enable frame reordering" ); - } - - ICMEncodedFrameOutputRecord encoded_frame_output_record; - encoded_frame_output_record.encodedFrameOutputCallback = - icvEncodedFrameOutputCallback; - encoded_frame_output_record.encodedFrameOutputRefCon = - static_cast( video_writer ); - encoded_frame_output_record.frameDataAllocator = NULL; - - err = ICMCompressionSessionCreate( kCFAllocatorDefault, frame_size.width, - frame_size.height, codecType, TIME_SCALE, options_ref, - NULL /*source_pixel_buffer_attributes*/, &encoded_frame_output_record, - &compression_session_ref ); - ICMCompressionSessionOptionsRelease( options_ref ); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot create compression session" ); - } - - err = BeginMediaEdits( video ); - if ( err != noErr ) { - CV_ERROR( CV_StsInternal, "Cannot begin media edits" ); - } - - // fill in the video writer structure - video_writer->data_handler = data_handler; - video_writer->movie = movie; - video_writer->track = video_track; - video_writer->video = video; - video_writer->compression_session_ref = compression_session_ref; - video_writer->duration_per_sample = - static_cast( static_cast( TIME_SCALE ) / fps ); - - __END__ - - // clean up in case of error (unless error processing mode is - // CV_ErrModeLeaf) - if ( err != noErr ) { - if ( options_ref != NULL ) { - ICMCompressionSessionOptionsRelease( options_ref ); - } - if ( compression_session_ref != NULL ) { - ICMCompressionSessionRelease( compression_session_ref ); - } - if ( data_handler != NULL ) { - CloseMovieStorage( data_handler ); - } - if ( movie != NULL ) { - DisposeMovie( movie ); - } - if ( data_ref != NULL ) { - DeleteMovieStorage( data_ref, data_ref_type ); - DisposeHandle( data_ref ); - } - cvFree( reinterpret_cast( &video_writer ) ); - video_writer = NULL; - } - - return video_writer; -} - - -/** -* -* Wrappers for the new C++ CvCapture & CvVideoWriter structures -* -*/ - -class CvCapture_QT_Movie_CPP : public CvCapture -{ -public: - CvCapture_QT_Movie_CPP() { captureQT = 0; } - virtual ~CvCapture_QT_Movie_CPP() { close(); } - - virtual bool open( const char* filename ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_QT; } // Return the type of the capture object: CV_CAP_VFW, etc... -protected: - - CvCapture_QT_Movie* captureQT; -}; - -bool CvCapture_QT_Movie_CPP::open( const char* filename ) -{ - close(); - captureQT = icvCaptureFromFile_QT( filename ); - return captureQT != 0; -} - -void CvCapture_QT_Movie_CPP::close() -{ - if( captureQT ) - { - icvClose_QT_Movie( captureQT ); - cvFree( &captureQT ); - } -} - -bool CvCapture_QT_Movie_CPP::grabFrame() -{ - return captureQT ? icvGrabFrame_QT_Movie( captureQT ) != 0 : false; -} - -IplImage* CvCapture_QT_Movie_CPP::retrieveFrame(int) -{ - return captureQT ? (IplImage*)icvRetrieveFrame_QT_Movie( captureQT, 0 ) : 0; -} - -double CvCapture_QT_Movie_CPP::getProperty( int propId ) -{ - return captureQT ? icvGetProperty_QT_Movie( captureQT, propId ) : 0; -} - -bool CvCapture_QT_Movie_CPP::setProperty( int propId, double value ) -{ - return captureQT ? icvSetProperty_QT_Movie( captureQT, propId, value ) != 0 : false; -} - -CvCapture* cvCreateFileCapture_QT( const char* filename ) -{ - CvCapture_QT_Movie_CPP* capture = new CvCapture_QT_Movie_CPP; - - if( capture->open( filename )) - return capture; - - delete capture; - return 0; -} - - -///////////////////////////////////// - -class CvCapture_QT_Cam_CPP : public CvCapture -{ -public: - CvCapture_QT_Cam_CPP() { captureQT = 0; } - virtual ~CvCapture_QT_Cam_CPP() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_QT; } // Return the type of the capture object: CV_CAP_VFW, etc... -protected: - - CvCapture_QT_Cam* captureQT; -}; - -bool CvCapture_QT_Cam_CPP::open( int index ) -{ - close(); - captureQT = icvCaptureFromCam_QT( index ); - return captureQT != 0; -} - -void CvCapture_QT_Cam_CPP::close() -{ - if( captureQT ) - { - icvClose_QT_Cam( captureQT ); - cvFree( &captureQT ); - } -} - -bool CvCapture_QT_Cam_CPP::grabFrame() -{ - return captureQT ? icvGrabFrame_QT_Cam( captureQT ) != 0 : false; -} - -IplImage* CvCapture_QT_Cam_CPP::retrieveFrame(int) -{ - return captureQT ? (IplImage*)icvRetrieveFrame_QT_Cam( captureQT, 0 ) : 0; -} - -double CvCapture_QT_Cam_CPP::getProperty( int propId ) -{ - return captureQT ? icvGetProperty_QT_Cam( captureQT, propId ) : 0; -} - -bool CvCapture_QT_Cam_CPP::setProperty( int propId, double value ) -{ - return captureQT ? icvSetProperty_QT_Cam( captureQT, propId, value ) != 0 : false; -} - -CvCapture* cvCreateCameraCapture_QT( int index ) -{ - CvCapture_QT_Cam_CPP* capture = new CvCapture_QT_Cam_CPP; - - if( capture->open( index )) - return capture; - - delete capture; - return 0; -} - -///////////////////////////////// - -class CvVideoWriter_QT_CPP : public CvVideoWriter -{ -public: - CvVideoWriter_QT_CPP() { writerQT = 0; } - virtual ~CvVideoWriter_QT_CPP() { close(); } - - virtual bool open( const char* filename, int fourcc, - double fps, CvSize frameSize, bool isColor ); - virtual void close(); - virtual bool writeFrame( const IplImage* ); - -protected: - CvVideoWriter_QT* writerQT; -}; - -bool CvVideoWriter_QT_CPP::open( const char* filename, int fourcc, - double fps, CvSize frameSize, bool isColor ) -{ - close(); - writerQT = icvCreateVideoWriter_QT( filename, fourcc, fps, frameSize, isColor ); - return writerQT != 0; -} - -void CvVideoWriter_QT_CPP::close() -{ - if( writerQT ) - { - icvReleaseVideoWriter_QT( &writerQT ); - writerQT = 0; - } -} - -bool CvVideoWriter_QT_CPP::writeFrame( const IplImage* image ) -{ - if( !writerQT || !image ) - return false; - return icvWriteFrame_QT( writerQT, image ) >= 0; -} - -CvVideoWriter* cvCreateVideoWriter_QT( const char* filename, int fourcc, - double fps, CvSize frameSize, int isColor ) -{ - CvVideoWriter_QT_CPP* writer = new CvVideoWriter_QT_CPP; - if( writer->open( filename, fourcc, fps, frameSize, isColor != 0 )) - return writer; - delete writer; - return 0; -} diff --git a/modules/highgui/src/cap_qtkit.mm b/modules/highgui/src/cap_qtkit.mm deleted file mode 100644 index 6b91597..0000000 --- a/modules/highgui/src/cap_qtkit.mm +++ /dev/null @@ -1,1071 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2013, OpenCV Foundation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 contributor be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*//////////////////////////////////////////////////////////////////////////////////////// - - -#include "precomp.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include -#import - -using namespace std; - -/********************** Declaration of class headers ************************/ - -/***************************************************************************** - * - * CaptureDelegate Declaration. - * - * CaptureDelegate is notified on a separate thread by the OS whenever there - * is a new frame. When "updateImage" is called from the main thread, it - * copies this new frame into an IplImage, but only if this frame has not - * been copied before. When "getOutput" is called from the main thread, - * it gives the last copied IplImage. - * - *****************************************************************************/ - -#ifndef QTKIT_VERSION_7_6_3 -#define QTKIT_VERSION_7_6_3 70603 -#define QTKIT_VERSION_7_0 70000 -#endif - -#ifndef QTKIT_VERSION_MAX_ALLOWED -#define QTKIT_VERSION_MAX_ALLOWED QTKIT_VERSION_7_0 -#endif - -#define DISABLE_AUTO_RESTART 999 - -@interface CaptureDelegate : NSObject -{ - int newFrame; - CVImageBufferRef mCurrentImageBuffer; - char* imagedata; - IplImage* image; - char* bgr_imagedata; - IplImage* bgr_image; - size_t currSize; -} - -- (void)captureOutput:(QTCaptureOutput *)captureOutput - didOutputVideoFrame:(CVImageBufferRef)videoFrame - withSampleBuffer:(QTSampleBuffer *)sampleBuffer - fromConnection:(QTCaptureConnection *)connection; - -- (void)captureOutput:(QTCaptureOutput *)captureOutput -didDropVideoFrameWithSampleBuffer:(QTSampleBuffer *)sampleBuffer - fromConnection:(QTCaptureConnection *)connection; - -- (int)updateImage; -- (IplImage*)getOutput; - -@end - -/***************************************************************************** - * - * CvCaptureCAM Declaration. - * - * CvCaptureCAM is the instantiation of a capture source for cameras. - * - *****************************************************************************/ - -class CvCaptureCAM : public CvCapture { -public: - CvCaptureCAM(int cameraNum = -1) ; - ~CvCaptureCAM(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual double getProperty(int property_id); - virtual bool setProperty(int property_id, double value); - virtual int didStart(); - - -private: - QTCaptureSession *mCaptureSession; - QTCaptureDeviceInput *mCaptureDeviceInput; - QTCaptureDecompressedVideoOutput *mCaptureDecompressedVideoOutput; - CaptureDelegate* capture; - - int startCaptureDevice(int cameraNum); - void stopCaptureDevice(); - - void setWidthHeight(); - bool grabFrame(double timeOut); - - int camNum; - int width; - int height; - int settingWidth; - int settingHeight; - int started; - int disableAutoRestart; - -}; - - -/***************************************************************************** - * - * CvCaptureFile Declaration. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -class CvCaptureFile : public CvCapture { -public: - CvCaptureFile(const char* filename) ; - ~CvCaptureFile(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual double getProperty(int property_id); - virtual bool setProperty(int property_id, double value); - virtual int didStart(); - - -private: - QTMovie *mCaptureSession; - - char* imagedata; - IplImage* image; - char* bgr_imagedata; - IplImage* bgr_image; - size_t currSize; - - //IplImage* retrieveFrameBitmap(); - IplImage* retrieveFramePixelBuffer(); - double getFPS(); - - int movieWidth; - int movieHeight; - double movieFPS; - double currentFPS; - double movieDuration; - int changedPos; - - int started; - QTTime endOfMovie; -}; - - -/***************************************************************************** - * - * CvCaptureFile Declaration. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -class CvVideoWriter_QT : public CvVideoWriter{ -public: - CvVideoWriter_QT(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color=1); - ~CvVideoWriter_QT(); - bool writeFrame(const IplImage* image); -private: - IplImage* argbimage; - QTMovie* mMovie; - unsigned char* imagedata; - - NSString* path; - NSString* codec; - double movieFPS; - CvSize movieSize; - int movieColor; -}; - - -/****************** Implementation of interface functions ********************/ - - -CvCapture* cvCreateFileCapture_QT(const char* filename) { - CvCaptureFile *retval = new CvCaptureFile(filename); - - if(retval->didStart()) - return retval; - delete retval; - return NULL; -} - -CvCapture* cvCreateCameraCapture_QT(int index ) { - CvCapture* retval = new CvCaptureCAM(index); - if (!((CvCaptureCAM *)retval)->didStart()) - cvReleaseCapture(&retval); - return retval; -} - -CvVideoWriter* cvCreateVideoWriter_QT(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color) { - return new CvVideoWriter_QT(filename, fourcc, fps, frame_size,is_color); -} - -/********************** Implementation of Classes ****************************/ - -/***************************************************************************** - * - * CvCaptureCAM Implementation. - * - * CvCaptureCAM is the instantiation of a capture source for cameras. - * - *****************************************************************************/ - -CvCaptureCAM::CvCaptureCAM(int cameraNum) { - mCaptureSession = nil; - mCaptureDeviceInput = nil; - mCaptureDecompressedVideoOutput = nil; - capture = nil; - - width = 0; - height = 0; - settingWidth = 0; - settingHeight = 0; - disableAutoRestart = 0; - - camNum = cameraNum; - - if (!startCaptureDevice(camNum)) { - cout << "Warning, camera failed to properly initialize!" << endl; - started = 0; - } else { - started = 1; - } - -} - -CvCaptureCAM::~CvCaptureCAM() { - stopCaptureDevice(); - - cout << "Cleaned up camera." << endl; -} - -int CvCaptureCAM::didStart() { - return started; -} - - -bool CvCaptureCAM::grabFrame() { - return grabFrame(5); -} - -bool CvCaptureCAM::grabFrame(double timeOut) { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - double sleepTime = 0.005; - double total = 0; - - // If the capture is launched in a separate thread, then - // [NSRunLoop currentRunLoop] is not the same as in the main thread, and has no timer. - //see https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsrunloop_Class/Reference/Reference.html - // "If no input sources or timers are attached to the run loop, this - // method exits immediately" - // using usleep() is not a good alternative, because it may block the GUI. - // Create a dummy timer so that runUntilDate does not exit immediately: - [NSTimer scheduledTimerWithTimeInterval:100 target:nil selector:@selector(doFireTimer:) userInfo:nil repeats:YES]; - while (![capture updateImage] && (total += sleepTime)<=timeOut) { - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:sleepTime]]; - } - - [localpool drain]; - - return total <= timeOut; -} - -IplImage* CvCaptureCAM::retrieveFrame(int) { - return [capture getOutput]; -} - -void CvCaptureCAM::stopCaptureDevice() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - [mCaptureSession stopRunning]; - - QTCaptureDevice *device = [mCaptureDeviceInput device]; - if ([device isOpen]) [device close]; - - [mCaptureSession release]; - [mCaptureDeviceInput release]; - - [mCaptureDecompressedVideoOutput setDelegate:mCaptureDecompressedVideoOutput]; - [mCaptureDecompressedVideoOutput release]; - [capture release]; - [localpool drain]; - -} - -int CvCaptureCAM::startCaptureDevice(int cameraNum) { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - capture = [[CaptureDelegate alloc] init]; - - QTCaptureDevice *device; - NSArray* devices = [[[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo] - arrayByAddingObjectsFromArray:[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeMuxed]] retain]; - - if ([devices count] == 0) { - cout << "QTKit didn't find any attached Video Input Devices!" << endl; - [localpool drain]; - return 0; - } - - if (cameraNum >= 0) { - NSUInteger nCameras = [devices count]; - if( (NSUInteger)cameraNum >= nCameras ) { - [localpool drain]; - return 0; - } - device = [devices objectAtIndex:cameraNum] ; - } else { - device = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo] ; - } - int success; - NSError* error; - - if (device) { - - success = [device open:&error]; - if (!success) { - cout << "QTKit failed to open a Video Capture Device" << endl; - [localpool drain]; - return 0; - } - - mCaptureDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:device] ; - mCaptureSession = [[QTCaptureSession alloc] init] ; - - success = [mCaptureSession addInput:mCaptureDeviceInput error:&error]; - - if (!success) { - cout << "QTKit failed to start capture session with opened Capture Device" << endl; - [localpool drain]; - return 0; - } - - - mCaptureDecompressedVideoOutput = [[QTCaptureDecompressedVideoOutput alloc] init]; - [mCaptureDecompressedVideoOutput setDelegate:capture]; - NSDictionary *pixelBufferOptions ; - if (width > 0 && height > 0) { - pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithDouble:1.0*width], (id)kCVPixelBufferWidthKey, - [NSNumber numberWithDouble:1.0*height], (id)kCVPixelBufferHeightKey, - //[NSNumber numberWithUnsignedInt:k32BGRAPixelFormat], (id)kCVPixelBufferPixelFormatTypeKey, - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - } else { - pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - } - [mCaptureDecompressedVideoOutput setPixelBufferAttributes:pixelBufferOptions]; - -#if QTKIT_VERSION_MAX_ALLOWED >= QTKIT_VERSION_7_6_3 - [mCaptureDecompressedVideoOutput setAutomaticallyDropsLateVideoFrames:YES]; -#endif - - - success = [mCaptureSession addOutput:mCaptureDecompressedVideoOutput error:&error]; - if (!success) { - cout << "QTKit failed to add Output to Capture Session" << endl; - [localpool drain]; - return 0; - } - - [mCaptureSession startRunning]; - - grabFrame(60); - - [localpool drain]; - return 1; - } - - [localpool drain]; - return 0; -} - -void CvCaptureCAM::setWidthHeight() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - [mCaptureSession stopRunning]; - - NSDictionary* pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithDouble:1.0*width], (id)kCVPixelBufferWidthKey, - [NSNumber numberWithDouble:1.0*height], (id)kCVPixelBufferHeightKey, - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], - (id)kCVPixelBufferPixelFormatTypeKey, - nil]; - - [mCaptureDecompressedVideoOutput setPixelBufferAttributes:pixelBufferOptions]; - - [mCaptureSession startRunning]; - - grabFrame(60); - [localpool drain]; -} - - -double CvCaptureCAM::getProperty(int property_id){ - int retval; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - NSArray* connections = [mCaptureDeviceInput connections]; - QTFormatDescription* format = [[connections objectAtIndex:0] formatDescription]; - NSSize s1 = [[format attributeForKey:QTFormatDescriptionVideoCleanApertureDisplaySizeAttribute] sizeValue]; - - int width=s1.width, height=s1.height; - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - retval = width; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - retval = height; - break; - default: - retval = 0; - break; - } - - [localpool drain]; - return retval; -} - -bool CvCaptureCAM::setProperty(int property_id, double value) { - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - width = value; - settingWidth = 1; - if (settingWidth && settingHeight) { - setWidthHeight(); - settingWidth =0; - settingHeight = 0; - } - return true; - case CV_CAP_PROP_FRAME_HEIGHT: - height = value; - settingHeight = 1; - if (settingWidth && settingHeight) { - setWidthHeight(); - settingWidth =0; - settingHeight = 0; - } - return true; - case DISABLE_AUTO_RESTART: - disableAutoRestart = value; - return 1; - default: - return false; - } -} - - -/***************************************************************************** - * - * CaptureDelegate Implementation. - * - * CaptureDelegate is notified on a separate thread by the OS whenever there - * is a new frame. When "updateImage" is called from the main thread, it - * copies this new frame into an IplImage, but only if this frame has not - * been copied before. When "getOutput" is called from the main thread, - * it gives the last copied IplImage. - * - *****************************************************************************/ - - -@implementation CaptureDelegate - -- (id)init { - self = [super init]; - if (self) { - newFrame = 0; - imagedata = NULL; - bgr_imagedata = NULL; - currSize = 0; - image = NULL; - bgr_image = NULL; - } - return self; -} - - --(void)dealloc { - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - cvReleaseImage(&image); - cvReleaseImage(&bgr_image); - [super dealloc]; -} - -- (void)captureOutput:(QTCaptureOutput *)captureOutput - didOutputVideoFrame:(CVImageBufferRef)videoFrame - withSampleBuffer:(QTSampleBuffer *)sampleBuffer - fromConnection:(QTCaptureConnection *)connection { - (void)captureOutput; - (void)sampleBuffer; - (void)connection; - - CVBufferRetain(videoFrame); - CVImageBufferRef imageBufferToRelease = mCurrentImageBuffer; - - @synchronized (self) { - - mCurrentImageBuffer = videoFrame; - newFrame = 1; - } - - CVBufferRelease(imageBufferToRelease); - -} -- (void)captureOutput:(QTCaptureOutput *)captureOutput -didDropVideoFrameWithSampleBuffer:(QTSampleBuffer *)sampleBuffer - fromConnection:(QTCaptureConnection *)connection { - (void)captureOutput; - (void)sampleBuffer; - (void)connection; - cout << "Camera dropped frame!" << endl; -} - --(IplImage*) getOutput { - return bgr_image; -} - --(int) updateImage { - if (newFrame==0) return 0; - CVPixelBufferRef pixels; - - @synchronized (self){ - pixels = CVBufferRetain(mCurrentImageBuffer); - newFrame = 0; - } - - CVPixelBufferLockBaseAddress(pixels, 0); - uint32_t* baseaddress = (uint32_t*)CVPixelBufferGetBaseAddress(pixels); - - size_t width = CVPixelBufferGetWidth(pixels); - size_t height = CVPixelBufferGetHeight(pixels); - size_t rowBytes = CVPixelBufferGetBytesPerRow(pixels); - - if (rowBytes != 0) { - - if (currSize != rowBytes*height*sizeof(char)) { - currSize = rowBytes*height*sizeof(char); - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - imagedata = (char*)malloc(currSize); - bgr_imagedata = (char*)malloc(currSize); - } - - memcpy(imagedata, baseaddress, currSize); - - if (image == NULL) { - image = cvCreateImageHeader(cvSize((int)width,(int)height), IPL_DEPTH_8U, 4); - } - image->width = (int)width; - image->height = (int)height; - image->nChannels = 4; - image->depth = IPL_DEPTH_8U; - image->widthStep = (int)rowBytes; - image->imageData = imagedata; - image->imageSize = (int)currSize; - - if (bgr_image == NULL) { - bgr_image = cvCreateImageHeader(cvSize((int)width,(int)height), IPL_DEPTH_8U, 3); - } - bgr_image->width = (int)width; - bgr_image->height = (int)height; - bgr_image->nChannels = 3; - bgr_image->depth = IPL_DEPTH_8U; - bgr_image->widthStep = (int)rowBytes; - bgr_image->imageData = bgr_imagedata; - bgr_image->imageSize = (int)currSize; - - cvCvtColor(image, bgr_image, CV_BGRA2BGR); - - } - - CVPixelBufferUnlockBaseAddress(pixels, 0); - CVBufferRelease(pixels); - - return 1; -} - -@end - - -/***************************************************************************** - * - * CvCaptureFile Implementation. - * - * CvCaptureFile is the instantiation of a capture source for video files. - * - *****************************************************************************/ - -CvCaptureFile::CvCaptureFile(const char* filename) { - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - - mCaptureSession = nil; - image = NULL; - bgr_image = NULL; - imagedata = NULL; - bgr_imagedata = NULL; - currSize = 0; - - movieWidth = 0; - movieHeight = 0; - movieFPS = 0; - currentFPS = 0; - movieDuration = 0; - changedPos = 0; - - started = 0; - - NSError* error; - - - mCaptureSession = [[QTMovie movieWithFile:[NSString stringWithCString:filename - encoding:NSASCIIStringEncoding] - error:&error] retain]; - [mCaptureSession setAttribute:[NSNumber numberWithBool:YES] - forKey:QTMovieLoopsAttribute]; - - if (mCaptureSession == nil) { - cout << "WARNING: Couldn't read movie file " << filename << endl; - [localpool drain]; - started = 0; - return; - } - - [mCaptureSession gotoEnd]; - endOfMovie = [mCaptureSession currentTime]; - - [mCaptureSession gotoBeginning]; - - NSSize size = [[mCaptureSession attributeForKey:QTMovieNaturalSizeAttribute] sizeValue]; - - movieWidth = size.width; - movieHeight = size.height; - movieFPS = getFPS(); - currentFPS = movieFPS; - - QTTime t; - - [[mCaptureSession attributeForKey:QTMovieDurationAttribute] getValue:&t]; - movieDuration = (t.timeValue *1000.0 / t.timeScale); - started = 1; - [localpool drain]; - -} - -CvCaptureFile::~CvCaptureFile() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - cvReleaseImage(&image); - cvReleaseImage(&bgr_image); - [mCaptureSession release]; - [localpool drain]; -} - -int CvCaptureFile::didStart() { - return started; -} - -bool CvCaptureFile::grabFrame() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - double t1 = getProperty(CV_CAP_PROP_POS_MSEC); - - QTTime curTime; - curTime = [mCaptureSession currentTime]; - bool isEnd=(QTTimeCompare(curTime,endOfMovie) == NSOrderedSame); - - [mCaptureSession stepForward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - if (t2>t1 && !changedPos) { - currentFPS = 1000.0/(t2-t1); - } else { - currentFPS = movieFPS; - } - changedPos = 0; - [localpool drain]; - return !isEnd; -} - - -IplImage* CvCaptureFile::retrieveFramePixelBuffer() { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - - NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: - QTMovieFrameImageTypeCVPixelBufferRef, QTMovieFrameImageType, -#ifdef MAC_OS_X_VERSION_10_6 - [NSNumber numberWithBool:YES], QTMovieFrameImageSessionMode, -#endif - nil]; - CVPixelBufferRef frame = (CVPixelBufferRef)[mCaptureSession frameImageAtTime:[mCaptureSession currentTime] - withAttributes:attributes - error:nil]; - - CVPixelBufferRef pixels = CVBufferRetain(frame); - CVPixelBufferLockBaseAddress(pixels, 0); - - uint32_t* baseaddress = (uint32_t*)CVPixelBufferGetBaseAddress(pixels); - size_t width = CVPixelBufferGetWidth(pixels); - size_t height = CVPixelBufferGetHeight(pixels); - size_t rowBytes = CVPixelBufferGetBytesPerRow(pixels); - - if (rowBytes != 0) { - - if (currSize != rowBytes*height*sizeof(char)) { - currSize = rowBytes*height*sizeof(char); - if (imagedata != NULL) free(imagedata); - if (bgr_imagedata != NULL) free(bgr_imagedata); - imagedata = (char*)malloc(currSize); - bgr_imagedata = (char*)malloc(currSize); - } - - memcpy(imagedata, baseaddress, currSize); - - //ARGB -> BGRA - for (unsigned int i = 0; i < currSize; i+=4) { - char temp = imagedata[i]; - imagedata[i] = imagedata[i+3]; - imagedata[i+3] = temp; - temp = imagedata[i+1]; - imagedata[i+1] = imagedata[i+2]; - imagedata[i+2] = temp; - } - - if (image == NULL) { - image = cvCreateImageHeader(cvSize((int)width,(int)height), IPL_DEPTH_8U, 4); - } - - image->width = (int)width; - image->height = (int)height; - image->nChannels = 4; - image->depth = IPL_DEPTH_8U; - image->widthStep = (int)rowBytes; - image->imageData = imagedata; - image->imageSize = (int)currSize; - - - if (bgr_image == NULL) { - bgr_image = cvCreateImageHeader(cvSize((int)width,(int)height), IPL_DEPTH_8U, 3); - } - - bgr_image->width = (int)width; - bgr_image->height = (int)height; - bgr_image->nChannels = 3; - bgr_image->depth = IPL_DEPTH_8U; - bgr_image->widthStep = (int)rowBytes; - bgr_image->imageData = bgr_imagedata; - bgr_image->imageSize = (int)currSize; - - cvCvtColor(image, bgr_image,CV_BGRA2BGR); - - } - - CVPixelBufferUnlockBaseAddress(pixels, 0); - CVBufferRelease(pixels); - - [localpool drain]; - - return bgr_image; -} - - -IplImage* CvCaptureFile::retrieveFrame(int) { - return retrieveFramePixelBuffer(); -} - -double CvCaptureFile::getFPS() { - if (mCaptureSession == nil) return 0; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - double now = getProperty(CV_CAP_PROP_POS_MSEC); - double retval = 0; - if (now == 0) { - [mCaptureSession stepForward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - [mCaptureSession stepBackward]; - retval = 1000.0 / (t2-now); - } else { - [mCaptureSession stepBackward]; - double t2 = getProperty(CV_CAP_PROP_POS_MSEC); - [mCaptureSession stepForward]; - retval = 1000.0 / (now-t2); - } - [localpool drain]; - return retval; -} - -double CvCaptureFile::getProperty(int property_id){ - if (mCaptureSession == nil) return 0; - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - double retval; - QTTime t; - - //cerr << "get_prop"< 0) { - QTMedia *media = [[videoTracks objectAtIndex:0] media]; - retval = [[media attributeForKey:QTMediaSampleCountAttribute] longValue]; - } else { - retval = 0; - } - } - break; - case CV_CAP_PROP_FOURCC: - default: - retval = false; - } - - [localpool drain]; - return retval; -} - - -/***************************************************************************** - * - * CvVideoWriter Implementation. - * - * CvVideoWriter is the instantiation of a video output class - * - *****************************************************************************/ - - -CvVideoWriter_QT::CvVideoWriter_QT(const char* filename, int fourcc, - double fps, CvSize frame_size, - int is_color) { - - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - movieFPS = fps; - movieSize = frame_size; - movieColor = is_color; - mMovie = nil; - path = [[[NSString stringWithCString:filename encoding:NSASCIIStringEncoding] stringByExpandingTildeInPath] retain]; - - argbimage = cvCreateImage(movieSize, IPL_DEPTH_8U, 4); - - - char cc[5]; - cc[0] = fourcc & 255; - cc[1] = (fourcc >> 8) & 255; - cc[2] = (fourcc >> 16) & 255; - cc[3] = (fourcc >> 24) & 255; - cc[4] = 0; - int cc2 = CV_FOURCC(cc[0], cc[1], cc[2], cc[3]); - if (cc2!=fourcc) { - cout << "WARNING: Didn't properly encode FourCC. Expected " << fourcc - << " but got " << cc2 << "." << endl; - } - - codec = [[NSString stringWithCString:cc encoding:NSASCIIStringEncoding] retain]; - - NSError *error = nil; - if (!mMovie) { - - NSFileManager* files = [NSFileManager defaultManager]; - if ([files fileExistsAtPath:path]) { - if (![files removeItemAtPath:path error:nil]) { - cout << "WARNING: Failed to remove existing file " << [path cStringUsingEncoding:NSASCIIStringEncoding] << endl; - } - } - - mMovie = [[QTMovie alloc] initToWritableFile:path error:&error]; - if (!mMovie) { - cout << "WARNING: Could not create empty movie file container." << endl; - [localpool drain]; - return; - } - } - - [mMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute]; - - [localpool drain]; -} - - -CvVideoWriter_QT::~CvVideoWriter_QT() { - cvReleaseImage(&argbimage); - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - [mMovie release]; - [path release]; - [codec release]; - [localpool drain]; -} - -bool CvVideoWriter_QT::writeFrame(const IplImage* image) { - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - - cvCvtColor(image, argbimage, CV_BGR2BGRA); - - - unsigned char* imagedata = (unsigned char*)argbimage->imageData; - //BGRA --> ARGB - - for (int j = 0; j < argbimage->height; j++) { - int rowstart = argbimage->widthStep * j; - for (int i = rowstart; i < rowstart+argbimage->widthStep; i+=4) { - unsigned char temp = imagedata[i]; - imagedata[i] = 255; - imagedata[i+3] = temp; - temp = imagedata[i+2]; - imagedata[i+2] = imagedata[i+1]; - imagedata[i+1] = temp; - } - } - - NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:&imagedata - pixelsWide:movieSize.width - pixelsHigh:movieSize.height - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bitmapFormat:NSAlphaFirstBitmapFormat - bytesPerRow:argbimage->widthStep - bitsPerPixel:32] ; - - - NSImage* nsimage = [[NSImage alloc] init]; - - [nsimage addRepresentation:imageRep]; - - /* - codecLosslessQuality = 0x00000400, - codecMaxQuality = 0x000003FF, - codecMinQuality = 0x00000000, - codecLowQuality = 0x00000100, - codecNormalQuality = 0x00000200, - codecHighQuality = 0x00000300 - */ - - [mMovie addImage:nsimage forDuration:QTMakeTime(100,100*movieFPS) withAttributes:[NSDictionary dictionaryWithObjectsAndKeys: - codec, QTAddImageCodecType, - //[NSNumber numberWithInt:codecLowQuality], QTAddImageCodecQuality, - [NSNumber numberWithInt:100*movieFPS], QTTrackTimeScaleAttribute,nil]]; - - if (![mMovie updateMovieFile]) { - cout << "Didn't successfully update movie file." << endl; - } - - [imageRep release]; - [nsimage release]; - [localpool drain]; - - return 1; -} diff --git a/modules/highgui/src/cap_tyzx.cpp b/modules/highgui/src/cap_tyzx.cpp deleted file mode 100644 index c425459..0000000 --- a/modules/highgui/src/cap_tyzx.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -#if _MSC_VER >= 1200 - #pragma comment(lib,"DeepSeaIF.lib") -#endif - - -/****************** Capturing video from TYZX stereo camera *******************/ -/** Initially developed by Roman Stanchak rstanchak@yahoo.com */ - -class CvCaptureCAM_TYZX : public CvCapture -{ -public: - CvCaptureCAM_TYZX() { index = -1; image = 0; } - virtual ~CvCaptureCAM_TYZX() { close(); } - - virtual bool open( int _index ); - virtual void close(); - bool isOpened() { return index >= 0; } - - virtual double getProperty(int); - virtual bool setProperty(int, double) { return false; } - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_TYZX; } // Return the type of the capture object: CV_CAP_VFW, etc... - -protected: - virtual bool allocateImage(); - - int index; - IplImage* image; -} -CvCaptureCAM_TYZX; - -DeepSeaIF * g_tyzx_camera = 0; -int g_tyzx_refcount = 0; - -bool CvCaptureCAM_TYZX::open( int _index ) -{ - close(); - - if(!g_tyzx_camera){ - g_tyzx_camera = new DeepSeaIF; - if(!g_tyzx_camera) return false; - - if(!g_tyzx_camera->initializeSettings(NULL)){ - delete g_tyzx_camera; - return false; - } - - // set initial sensor mode - // TODO is g_tyzx_camera redundant? - g_tyzx_camera->setSensorMode(g_tyzx_camera->getSensorMode()); - - // mm's - g_tyzx_camera->setZUnits((int) 1000); - - g_tyzx_camera->enableLeftColor(true); - g_tyzx_camera->setColorMode(DeepSeaIF::BGRcolor); - g_tyzx_camera->setDoIntensityCrop(true); - g_tyzx_camera->enable8bitImages(true); - if(!g_tyzx_camera->startCapture()){ - return false; - } - g_tyzx_refcount++; - } - index = _index; - return true; -} - -void CvCaptureCAM_TYZX::close() -{ - if( isOpened() ) - { - cvReleaseImage( &image ); - g_tyzx_refcount--; - if(g_tyzx_refcount==0){ - delete g_tyzx_camera; - } - } -} - -bool CvCaptureCAM_TYZX::grabFrame() -{ - return isOpened() && g_tyzx_camera && g_tyzx_camera->grab(); -} - -bool CvCaptureCAM_TYZX::allocateImage() -{ - int depth, nch; - CvSize size; - - // assume we want to resize - cvReleaseImage(&image); - - // figure out size depending on index provided - switch(index){ - case CV_TYZX_RIGHT: - size = cvSize(g_tyzx_camera->intensityWidth(), g_tyzx_camera->intensityHeight()); - depth = 8; - nch = 1; - break; - case CV_TYZX_Z: - size = cvSize(g_tyzx_camera->zWidth(), g_tyzx_camera->zHeight()); - depth = IPL_DEPTH_16S; - nch = 1; - break; - case CV_TYZX_LEFT: - default: - size = cvSize(g_tyzx_camera->intensityWidth(), g_tyzx_camera->intensityHeight()); - depth = 8; - nch = 1; - break; - } - image = cvCreateImage(size, depth, nch); - return image != 0; -} - -/// Copy 'grabbed' image into capture buffer and return it. -IplImage * CvCaptureCAM_TYZX::retrieveFrame(int) -{ - if(!isOpened() || !g_tyzx_camera) return 0; - - if(!image && !allocateImage()) - return 0; - - // copy camera image into buffer. - // tempting to reference TYZX memory directly to avoid copying. - switch (index) - { - case CV_TYZX_RIGHT: - memcpy(image->imageData, g_tyzx_camera->getRImage(), image->imageSize); - break; - case CV_TYZX_Z: - memcpy(image->imageData, g_tyzx_camera->getZImage(), image->imageSize); - break; - case CV_TYZX_LEFT: - default: - memcpy(image->imageData, g_tyzx_camera->getLImage(), image->imageSize); - break; - } - - return image; -} - -double CvCaptureCAM_TYZX::getProperty(int property_id) -{ - CvSize size; - switch(capture->index) - { - case CV_TYZX_LEFT: - size = cvSize(g_tyzx_camera->intensityWidth(), g_tyzx_camera->intensityHeight()); - break; - case CV_TYZX_RIGHT: - size = cvSize(g_tyzx_camera->intensityWidth(), g_tyzx_camera->intensityHeight()); - break; - case CV_TYZX_Z: - size = cvSize(g_tyzx_camera->zWidth(), g_tyzx_camera->zHeight()); - break; - default: - size = cvSize(0,0); - } - - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return size.width; - case CV_CAP_PROP_FRAME_HEIGHT: - return size.height; - } - - return 0; -} - -bool CvCaptureCAM_TYZX::setProperty( int, double ) -{ - return false; -} - -CvCapture * cvCreateCameraCapture_TYZX (int index) -{ - CvCaptureCAM_TYZX * capture = new CvCaptureCAM_TYZX; - if( capture->open(index) ) - return capture; - - delete capture; - return 0; -} diff --git a/modules/highgui/src/cap_unicap.cpp b/modules/highgui/src/cap_unicap.cpp deleted file mode 100644 index 1bd0d9f..0000000 --- a/modules/highgui/src/cap_unicap.cpp +++ /dev/null @@ -1,331 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2008, Xavier Delacour, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// 2008-04-27 Xavier Delacour - -#include "precomp.hpp" -#include -#include -extern "C" { -#include -} - -#ifdef NDEBUG -#define CV_WARN(message) -#else -#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__) -#endif - -struct CvCapture_Unicap : public CvCapture -{ - CvCapture_Unicap() { init(); } - virtual ~CvCapture_Unicap() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_UNICAP; } // Return the type of the capture object: CV_CAP_VFW, etc... - - bool shutdownDevice(); - bool initDevice(); - - void init() - { - device_initialized = false; - desired_format = 0; - desired_size = cvSize(0,0); - convert_rgb = false; - - handle = 0; - memset( &device, 0, sizeof(device) ); - memset( &format_spec, 0, sizeof(format_spec) ); - memset( &format, 0, sizeof(format) ); - memset( &raw_buffer, 0, sizeof(raw_buffer) ); - memset( &buffer, 0, sizeof(buffer) ); - - raw_frame = frame = 0; - } - - bool device_initialized; - - int desired_device; - int desired_format; - CvSize desired_size; - bool convert_rgb; - - unicap_handle_t handle; - unicap_device_t device; - unicap_format_t format_spec; - unicap_format_t format; - unicap_data_buffer_t raw_buffer; - unicap_data_buffer_t buffer; - - IplImage *raw_frame; - IplImage *frame; -}; - -bool CvCapture_Unicap::shutdownDevice() { - bool result = false; - CV_FUNCNAME("CvCapture_Unicap::shutdownDevice"); - __BEGIN__; - - if (!SUCCESS(unicap_stop_capture(handle))) - CV_ERROR(CV_StsError, "unicap: failed to stop capture on device\n"); - - if (!SUCCESS(unicap_close(handle))) - CV_ERROR(CV_StsError, "unicap: failed to close the device\n"); - - cvReleaseImage(&raw_frame); - cvReleaseImage(&frame); - - device_initialized = false; - - result = true; - __END__; - return result; -} - -bool CvCapture_Unicap::initDevice() { - bool result = false; - CV_FUNCNAME("CvCapture_Unicap::initDevice"); - __BEGIN__; - - if (device_initialized && !shutdownDevice()) - return false; - - if(!SUCCESS(unicap_enumerate_devices(NULL, &device, desired_device))) - CV_ERROR(CV_StsError, "unicap: failed to get info for device\n"); - - if(!SUCCESS(unicap_open( &handle, &device))) - CV_ERROR(CV_StsError, "unicap: failed to open device\n"); - - unicap_void_format(&format_spec); - - if (!SUCCESS(unicap_enumerate_formats(handle, &format_spec, &format, desired_format))) { - shutdownDevice(); - CV_ERROR(CV_StsError, "unicap: failed to get video format\n"); - } - - int i; - if (format.sizes) - { - for (i = format.size_count - 1; i > 0; i--) - if (format.sizes[i].width == desired_size.width && - format.sizes[i].height == desired_size.height) - break; - format.size.width = format.sizes[i].width; - format.size.height = format.sizes[i].height; - } - - if (!SUCCESS(unicap_set_format(handle, &format))) { - shutdownDevice(); - CV_ERROR(CV_StsError, "unicap: failed to set video format\n"); - } - - memset(&raw_buffer, 0x0, sizeof(unicap_data_buffer_t)); - raw_frame = cvCreateImage(cvSize(format.size.width, - format.size.height), - 8, format.bpp / 8); - memcpy(&raw_buffer.format, &format, sizeof(raw_buffer.format)); - raw_buffer.data = (unsigned char*)raw_frame->imageData; - raw_buffer.buffer_size = format.size.width * - format.size.height * format.bpp / 8; - - memset(&buffer, 0x0, sizeof(unicap_data_buffer_t)); - memcpy(&buffer.format, &format, sizeof(buffer.format)); - - buffer.format.fourcc = UCIL_FOURCC('B','G','R','3'); - buffer.format.bpp = 24; - // * todo support greyscale output - // buffer.format.fourcc = UCIL_FOURCC('G','R','E','Y'); - // buffer.format.bpp = 8; - - frame = cvCreateImage(cvSize(buffer.format.size.width, - buffer.format.size.height), - 8, buffer.format.bpp / 8); - buffer.data = (unsigned char*)frame->imageData; - buffer.buffer_size = buffer.format.size.width * - buffer.format.size.height * buffer.format.bpp / 8; - - if(!SUCCESS(unicap_start_capture(handle))) { - shutdownDevice(); - CV_ERROR(CV_StsError, "unicap: failed to start capture on device\n"); - } - - device_initialized = true; - result = true; - __END__; - return result; -} - -void CvCapture_Unicap::close() { - if(device_initialized) - shutdownDevice(); -} - -bool CvCapture_Unicap::grabFrame() { - bool result = false; - - CV_FUNCNAME("CvCapture_Unicap::grabFrame"); - __BEGIN__; - - unicap_data_buffer_t *returned_buffer; - - int retry_count = 100; - - while (retry_count--) { - if(!SUCCESS(unicap_queue_buffer(handle, &raw_buffer))) - CV_ERROR(CV_StsError, "unicap: failed to queue a buffer on device\n"); - - if(SUCCESS(unicap_wait_buffer(handle, &returned_buffer))) - { - result = true; - EXIT; - } - - CV_WARN("unicap: failed to wait for buffer on device\n"); - usleep(100 * 1000); - } - - __END__; - return result; -} - -IplImage * CvCapture_Unicap::retrieveFrame(int) { - if (convert_rgb) { - ucil_convert_buffer(&buffer, &raw_buffer); - return frame; - } - return raw_frame; -} - -double CvCapture_Unicap::getProperty(int id) { - switch (id) { - case CV_CAP_PROP_POS_MSEC: break; - case CV_CAP_PROP_POS_FRAMES: break; - case CV_CAP_PROP_POS_AVI_RATIO: break; - case CV_CAP_PROP_FRAME_WIDTH: - return desired_size.width; - case CV_CAP_PROP_FRAME_HEIGHT: - return desired_size.height; - case CV_CAP_PROP_FPS: break; - case CV_CAP_PROP_FOURCC: break; - case CV_CAP_PROP_FRAME_COUNT: break; - case CV_CAP_PROP_FORMAT: - return desired_format; - case CV_CAP_PROP_MODE: break; - case CV_CAP_PROP_BRIGHTNESS: break; - case CV_CAP_PROP_CONTRAST: break; - case CV_CAP_PROP_SATURATION: break; - case CV_CAP_PROP_HUE: break; - case CV_CAP_PROP_GAIN: break; - case CV_CAP_PROP_CONVERT_RGB: - return convert_rgb; - } - - return 0; -} - -bool CvCapture_Unicap::setProperty(int id, double value) { - bool reinit = false; - - switch (id) { - case CV_CAP_PROP_POS_MSEC: break; - case CV_CAP_PROP_POS_FRAMES: break; - case CV_CAP_PROP_POS_AVI_RATIO: break; - case CV_CAP_PROP_FRAME_WIDTH: - desired_size.width = (int)value; - reinit = true; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - desired_size.height = (int)value; - reinit = true; - break; - case CV_CAP_PROP_FPS: break; - case CV_CAP_PROP_FOURCC: break; - case CV_CAP_PROP_FRAME_COUNT: break; - case CV_CAP_PROP_FORMAT: - desired_format = id; - reinit = true; - break; - case CV_CAP_PROP_MODE: break; - case CV_CAP_PROP_BRIGHTNESS: break; - case CV_CAP_PROP_CONTRAST: break; - case CV_CAP_PROP_SATURATION: break; - case CV_CAP_PROP_HUE: break; - case CV_CAP_PROP_GAIN: break; - case CV_CAP_PROP_CONVERT_RGB: - convert_rgb = value != 0; - break; - } - - if (reinit && !initDevice()) - return false; - - return true; -} - -bool CvCapture_Unicap::open(int index) -{ - close(); - device_initialized = false; - - desired_device = index < 0 ? 0 : index; - desired_format = 0; - desired_size = cvSize(320, 240); - convert_rgb = true; - - return initDevice(); -} - - -CvCapture * cvCreateCameraCapture_Unicap(const int index) -{ - CvCapture_Unicap *cap = new CvCapture_Unicap; - if( cap->open(index) ) - return cap; - delete cap; - return 0; -} diff --git a/modules/highgui/src/cap_v4l.cpp b/modules/highgui/src/cap_v4l.cpp deleted file mode 100644 index c9fca05..0000000 --- a/modules/highgui/src/cap_v4l.cpp +++ /dev/null @@ -1,2915 +0,0 @@ -/* This is the contributed code: - -File: cvcap_v4l.cpp -Current Location: ../opencv-0.9.6/otherlibs/highgui - -Original Version: 2003-03-12 Magnus Lundin lundin@mlu.mine.nu -Original Comments: - -ML:This set of files adds support for firevre and usb cameras. -First it tries to install a firewire camera, -if that fails it tries a v4l/USB camera -It has been tested with the motempl sample program - -First Patch: August 24, 2004 Travis Wood TravisOCV@tkwood.com -For Release: OpenCV-Linux Beta4 opencv-0.9.6 -Tested On: LMLBT44 with 8 video inputs -Problems? Post your questions at answers.opencv.org, - Report bugs at code.opencv.org, - Submit your fixes at https://github.com/Itseez/opencv/ -Patched Comments: - -TW: The cv cam utils that came with the initial release of OpenCV for LINUX Beta4 -were not working. I have rewritten them so they work for me. At the same time, trying -to keep the original code as ML wrote it as unchanged as possible. No one likes to debug -someone elses code, so I resisted changes as much as possible. I have tried to keep the -same "ideas" where applicable, that is, where I could figure out what the previous author -intended. Some areas I just could not help myself and had to "spiffy-it-up" my way. - -These drivers should work with other V4L frame capture cards other then my bttv -driven frame capture card. - -Re Written driver for standard V4L mode. Tested using LMLBT44 video capture card. -Standard bttv drivers are on the LMLBT44 with up to 8 Inputs. - -This utility was written with the help of the document: -http://pages.cpsc.ucalgary.ca/~sayles/VFL_HowTo -as a general guide for interfacing into the V4l standard. - -Made the index value passed for icvOpenCAM_V4L(index) be the number of the -video device source in the /dev tree. The -1 uses original /dev/video. - -Index Device - 0 /dev/video0 - 1 /dev/video1 - 2 /dev/video2 - 3 /dev/video3 - ... - 7 /dev/video7 -with - -1 /dev/video - -TW: You can select any video source, but this package was limited from the start to only -ONE camera opened at any ONE time. -This is an original program limitation. -If you are interested, I will make my version available to other OpenCV users. The big -difference in mine is you may pass the camera number as part of the cv argument, but this -convention is non standard for current OpenCV calls and the camera number is not currently -passed into the called routine. - -Second Patch: August 28, 2004 Sfuncia Fabio fiblan@yahoo.it -For Release: OpenCV-Linux Beta4 Opencv-0.9.6 - -FS: this patch fix not sequential index of device (unplugged device), and real numCameras. - for -1 index (icvOpenCAM_V4L) i dont use /dev/video but real device available, because - if /dev/video is a link to /dev/video0 and i unplugged device on /dev/video0, /dev/video - is a bad link. I search the first available device with indexList. - -Third Patch: December 9, 2004 Frederic Devernay Frederic.Devernay@inria.fr -For Release: OpenCV-Linux Beta4 Opencv-0.9.6 - -[FD] I modified the following: - - handle YUV420P, YUV420, and YUV411P palettes (for many webcams) without using floating-point - - cvGrabFrame should not wait for the end of the first frame, and should return quickly - (see highgui doc) - - cvRetrieveFrame should in turn wait for the end of frame capture, and should not - trigger the capture of the next frame (the user choses when to do it using GrabFrame) - To get the old behavior, re-call cvRetrieveFrame just after cvGrabFrame. - - having global bufferIndex and FirstCapture variables makes the code non-reentrant - (e.g. when using several cameras), put these in the CvCapture struct. - - according to V4L HowTo, incrementing the buffer index must be done before VIDIOCMCAPTURE. - - the VID_TYPE_SCALES stuff from V4L HowTo is wrong: image size can be changed - even if the hardware does not support scaling (e.g. webcams can have several - resolutions available). Just don't try to set the size at 640x480 if the hardware supports - scaling: open with the default (probably best) image size, and let the user scale it - using SetProperty. - - image size can be changed by two subsequent calls to SetProperty (for width and height) - - bug fix: if the image size changes, realloc the new image only when it is grabbed - - issue errors only when necessary, fix error message formatting. - -Fourth Patch: Sept 7, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I modified the following: - - Additional Video4Linux2 support :) - - Use mmap functions (v4l2) - - New methods are internal: - try_palette_v4l2 -> rewrite try_palette for v4l2 - mainloop_v4l2, read_image_v4l2 -> this methods are moved from official v4l2 capture.c example - try_init_v4l -> device v4l initialisation - try_init_v4l2 -> device v4l2 initialisation - autosetup_capture_mode_v4l -> autodetect capture modes for v4l - autosetup_capture_mode_v4l2 -> autodetect capture modes for v4l2 - - Modifications are according with Video4Linux old codes - - Video4Linux handling is automatically if it does not recognize a Video4Linux2 device - - Tested succesful with Logitech Quickcam Express (V4L), Creative Vista (V4L) and Genius VideoCam Notebook (V4L2) - - Correct source lines with compiler warning messages - - Information message from v4l/v4l2 detection - -Fifth Patch: Sept 7, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I modified the following: - - SN9C10x chip based webcams support - - New methods are internal: - bayer2rgb24, sonix_decompress -> decoder routines for SN9C10x decoding from Takafumi Mizuno with his pleasure :) - - Tested succesful with Genius VideoCam Notebook (V4L2) - -Sixth Patch: Sept 10, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I added the following: - - Add capture control support (hue, saturation, brightness, contrast, gain) - - Get and change V4L capture controls (hue, saturation, brightness, contrast) - - New method is internal: - icvSetControl -> set capture controls - - Tested succesful with Creative Vista (V4L) - -Seventh Patch: Sept 10, 2005 Csaba Kertesz sign@freemail.hu -For Release: OpenCV-Linux Beta5 OpenCV-0.9.7 - -I added the following: - - Detect, get and change V4L2 capture controls (hue, saturation, brightness, contrast, gain) - - New methods are internal: - v4l2_scan_controls_enumerate_menu, v4l2_scan_controls -> detect capture control intervals - - Tested succesful with Genius VideoCam Notebook (V4L2) - -8th patch: Jan 5, 2006, Olivier.Bornet@idiap.ch -Add support of V4L2_PIX_FMT_YUYV and V4L2_PIX_FMT_MJPEG. -With this patch, new webcams of Logitech, like QuickCam Fusion works. -Note: For use these webcams, look at the UVC driver at -http://linux-uvc.berlios.de/ - -9th patch: Mar 4, 2006, Olivier.Bornet@idiap.ch -- try V4L2 before V4L, because some devices are V4L2 by default, - but they try to implement the V4L compatibility layer. - So, I think this is better to support V4L2 before V4L. -- better separation between V4L2 and V4L initialization. (this was needed to support - some drivers working, but not fully with V4L2. (so, we do not know when we - need to switch from V4L2 to V4L. - -10th patch: July 02, 2008, Mikhail Afanasyev fopencv@theamk.com -Fix reliability problems with high-resolution UVC cameras on linux -the symptoms were damaged image and 'Corrupt JPEG data: premature end of data segment' on stderr -- V4L_ABORT_BADJPEG detects JPEG warnings and turns them into errors, so bad images - could be filtered out -- USE_TEMP_BUFFER fixes the main problem (improper buffer management) and - prevents bad images in the first place - -11th patch: April 2, 2013, Forrest Reiling forrest.reiling@gmail.com -Added v4l2 support for getting capture property CV_CAP_PROP_POS_MSEC. -Returns the millisecond timestamp of the last frame grabbed or 0 if no frames have been grabbed -Used to successfully synchonize 2 Logitech C310 USB webcams to within 16 ms of one another - - -make & enjoy! - -*/ - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if !defined WIN32 && (defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO) - -#define CLEAR(x) memset (&(x), 0, sizeof (x)) - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_CAMV4L -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef HAVE_CAMV4L2 -#include /* for videodev2.h */ -#include -#endif - -#ifdef HAVE_VIDEOIO -#include -#define HAVE_CAMV4L2 -#endif - -/* Defaults - If your board can do better, set it here. Set for the most common type inputs. */ -#define DEFAULT_V4L_WIDTH 640 -#define DEFAULT_V4L_HEIGHT 480 - -#define CHANNEL_NUMBER 1 -#define MAX_CAMERAS 8 - - -// default and maximum number of V4L buffers, not including last, 'special' buffer -#define MAX_V4L_BUFFERS 10 -#define DEFAULT_V4L_BUFFERS 4 - -// if enabled, then bad JPEG warnings become errors and cause NULL returned instead of image -#define V4L_ABORT_BADJPEG - -#define MAX_DEVICE_DRIVER_NAME 80 - -/* Device Capture Objects */ - -#ifdef HAVE_CAMV4L2 - -/* V4L2 structure */ -struct buffer -{ - void * start; - size_t length; -}; - -static unsigned int n_buffers = 0; - -/* Additional V4L2 pixelformats support for Sonix SN9C10x base webcams */ -#ifndef V4L2_PIX_FMT_SBGGR8 -#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ -#endif -#ifndef V4L2_PIX_FMT_SN9C10X -#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S','9','1','0') /* SN9C10x cmpr. */ -#endif - -#ifndef V4L2_PIX_FMT_SGBRG -#define V4L2_PIX_FMT_SGBRG v4l2_fourcc('G','B','R','G') /* bayer GBRG GBGB.. RGRG.. */ -#endif - -#endif /* HAVE_CAMV4L2 */ - -enum PALETTE_TYPE { - PALETTE_BGR24 = 1, - PALETTE_YVU420, - PALETTE_YUV411P, - PALETTE_YUYV, - PALETTE_UYVY, - PALETTE_SBGGR8, - PALETTE_SN9C10X, - PALETTE_MJPEG, - PALETTE_SGBRG -}; - -typedef struct CvCaptureCAM_V4L -{ - int deviceHandle; - int bufferIndex; - int FirstCapture; -#ifdef HAVE_CAMV4L - struct video_capability capability; - struct video_window captureWindow; - struct video_picture imageProperties; - struct video_mbuf memoryBuffer; - struct video_mmap *mmaps; -#endif /* HAVE_CAMV4L */ - char *memoryMap; - IplImage frame; - -#ifdef HAVE_CAMV4L2 - enum PALETTE_TYPE palette; - /* V4L2 variables */ - buffer buffers[MAX_V4L_BUFFERS + 1]; - struct v4l2_capability cap; - struct v4l2_input inp; - struct v4l2_format form; - struct v4l2_crop crop; - struct v4l2_cropcap cropcap; - struct v4l2_requestbuffers req; - struct v4l2_control control; - enum v4l2_buf_type type; - struct v4l2_queryctrl queryctrl; - - struct timeval timestamp; - - /* V4L2 control variables */ - int v4l2_brightness, v4l2_brightness_min, v4l2_brightness_max; - int v4l2_contrast, v4l2_contrast_min, v4l2_contrast_max; - int v4l2_saturation, v4l2_saturation_min, v4l2_saturation_max; - int v4l2_hue, v4l2_hue_min, v4l2_hue_max; - int v4l2_gain, v4l2_gain_min, v4l2_gain_max; - int v4l2_exposure, v4l2_exposure_min, v4l2_exposure_max; - -#endif /* HAVE_CAMV4L2 */ - -} -CvCaptureCAM_V4L; - -#ifdef HAVE_CAMV4L2 - -int V4L2_SUPPORT = 0; - -#endif /* HAVE_CAMV4L2 */ - -static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ); - -static int icvGrabFrameCAM_V4L( CvCaptureCAM_V4L* capture ); -static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int ); - -static double icvGetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, int property_id ); -static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, int property_id, double value ); - -static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h); - -/*********************** Implementations ***************************************/ - -static int numCameras = 0; -static int indexList = 0; - -/* Simple test program: Find number of Video Sources available. - Start from 0 and go to MAX_CAMERAS while checking for the device with that name. - If it fails on the first attempt of /dev/video0, then check if /dev/video is valid. - Returns the global numCameras with the correct value (we hope) */ - -static void icvInitCapture_V4L() { - int deviceHandle; - int CameraNumber; - char deviceName[MAX_DEVICE_DRIVER_NAME]; - - CameraNumber = 0; - while(CameraNumber < MAX_CAMERAS) { - /* Print the CameraNumber at the end of the string with a width of one character */ - sprintf(deviceName, "/dev/video%1d", CameraNumber); - /* Test using an open to see if this new device name really does exists. */ - deviceHandle = open(deviceName, O_RDONLY); - if (deviceHandle != -1) { - /* This device does indeed exist - add it to the total so far */ - // add indexList - indexList|=(1 << CameraNumber); - numCameras++; - } - if (deviceHandle != -1) - close(deviceHandle); - /* Set up to test the next /dev/video source in line */ - CameraNumber++; - } /* End while */ - -}; /* End icvInitCapture_V4L */ - -#ifdef HAVE_CAMV4L - -static int -try_palette(int fd, - struct video_picture *cam_pic, - int pal, - int depth) -{ - cam_pic->palette = pal; - cam_pic->depth = depth; - if (ioctl(fd, VIDIOCSPICT, cam_pic) < 0) - return 0; - if (ioctl(fd, VIDIOCGPICT, cam_pic) < 0) - return 0; - if (cam_pic->palette == pal) - return 1; - return 0; -} - -#endif /* HAVE_CAMV4L */ - -#ifdef HAVE_CAMV4L2 - -static int try_palette_v4l2(CvCaptureCAM_V4L* capture, unsigned long colorspace) -{ - CLEAR (capture->form); - - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->form.fmt.pix.pixelformat = colorspace; - capture->form.fmt.pix.field = V4L2_FIELD_ANY; - capture->form.fmt.pix.width = DEFAULT_V4L_WIDTH; - capture->form.fmt.pix.height = DEFAULT_V4L_HEIGHT; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_S_FMT, &capture->form)) - return -1; - - - if (colorspace != capture->form.fmt.pix.pixelformat) - return -1; - else - return 0; -} - -#endif /* HAVE_CAMV4L2 */ - -#ifdef HAVE_CAMV4L - -static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName) -{ - - // if detect = -1 then unable to open device - // if detect = 0 then detected nothing - // if detect = 1 then V4L device - int detect = 0; - - - // Test device for V4L compability - - /* Test using an open to see if this new device name really does exists. */ - /* No matter what the name - it still must be opened! */ - capture->deviceHandle = open(deviceName, O_RDWR); - - if (capture->deviceHandle == 0) - { - detect = -1; - - icvCloseCAM_V4L(capture); - } - - if (detect == 0) - { - /* Query the newly opened device for its capabilities */ - if (ioctl(capture->deviceHandle, VIDIOCGCAP, &capture->capability) < 0) - { - detect = 0; - icvCloseCAM_V4L(capture); - } - else - { - detect = 1; - } - } - - return detect; - -} - -#endif /* HAVE_CAMV4L */ - -#ifdef HAVE_CAMV4L2 - -static int try_init_v4l2(CvCaptureCAM_V4L* capture, char *deviceName) -{ - // Test device for V4L2 compability - // Return value: - // -1 then unable to open device - // 0 then detected nothing - // 1 then V4L2 device - - int deviceIndex; - - /* Open and test V4L2 device */ - capture->deviceHandle = open (deviceName, O_RDWR /* required */ | O_NONBLOCK, 0); - if (-1 == capture->deviceHandle) - { -#ifndef NDEBUG - fprintf(stderr, "(DEBUG) try_init_v4l2 open \"%s\": %s\n", deviceName, strerror(errno)); -#endif - icvCloseCAM_V4L(capture); - return -1; - } - - CLEAR (capture->cap); - if (-1 == ioctl (capture->deviceHandle, VIDIOC_QUERYCAP, &capture->cap)) - { -#ifndef NDEBUG - fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_QUERYCAP \"%s\": %s\n", deviceName, strerror(errno)); -#endif - icvCloseCAM_V4L(capture); - return 0; - } - - /* Query channels number */ - if (-1 == ioctl (capture->deviceHandle, VIDIOC_G_INPUT, &deviceIndex)) - { -#ifndef NDEBUG - fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_G_INPUT \"%s\": %s\n", deviceName, strerror(errno)); -#endif - icvCloseCAM_V4L(capture); - return 0; - } - - /* Query information about current input */ - CLEAR (capture->inp); - capture->inp.index = deviceIndex; - if (-1 == ioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp)) - { -#ifndef NDEBUG - fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_ENUMINPUT \"%s\": %s\n", deviceName, strerror(errno)); -#endif - icvCloseCAM_V4L(capture); - return 0; - } - - return 1; - -} - -static int autosetup_capture_mode_v4l2(CvCaptureCAM_V4L* capture) -{ - if (try_palette_v4l2(capture, V4L2_PIX_FMT_BGR24) == 0) - { - capture->palette = PALETTE_BGR24; - } - else - if (try_palette_v4l2(capture, V4L2_PIX_FMT_YVU420) == 0) - { - capture->palette = PALETTE_YVU420; - } - else - if (try_palette_v4l2(capture, V4L2_PIX_FMT_YUV411P) == 0) - { - capture->palette = PALETTE_YUV411P; - } - else - -#ifdef HAVE_JPEG - if (try_palette_v4l2(capture, V4L2_PIX_FMT_MJPEG) == 0 || - try_palette_v4l2(capture, V4L2_PIX_FMT_JPEG) == 0) - { - capture->palette = PALETTE_MJPEG; - } - else -#endif - - if (try_palette_v4l2(capture, V4L2_PIX_FMT_YUYV) == 0) - { - capture->palette = PALETTE_YUYV; - } - else if (try_palette_v4l2(capture, V4L2_PIX_FMT_UYVY) == 0) - { - capture->palette = PALETTE_UYVY; - } - else - if (try_palette_v4l2(capture, V4L2_PIX_FMT_SN9C10X) == 0) - { - capture->palette = PALETTE_SN9C10X; - } else - if (try_palette_v4l2(capture, V4L2_PIX_FMT_SBGGR8) == 0) - { - capture->palette = PALETTE_SBGGR8; - } else - if (try_palette_v4l2(capture, V4L2_PIX_FMT_SGBRG) == 0) - { - capture->palette = PALETTE_SGBRG; - } - else - { - fprintf(stderr, "HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - return 0; - -} - -#endif /* HAVE_CAMV4L2 */ - -#ifdef HAVE_CAMV4L - -static int autosetup_capture_mode_v4l(CvCaptureCAM_V4L* capture) -{ - - if(ioctl(capture->deviceHandle, VIDIOCGPICT, &capture->imageProperties) < 0) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Unable to determine size of incoming image\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - /* Yet MORE things that might have to be changes with your frame capture card */ - /* This sets the scale to the center of a 2^16 number */ - if (try_palette(capture->deviceHandle, &capture->imageProperties, VIDEO_PALETTE_RGB24, 24)) { - //printf("negotiated palette RGB24\n"); - } - else if (try_palette(capture->deviceHandle, &capture->imageProperties, VIDEO_PALETTE_YUV420P, 16)) { - //printf("negotiated palette YUV420P\n"); - } - else if (try_palette(capture->deviceHandle, &capture->imageProperties, VIDEO_PALETTE_YUV420, 16)) { - //printf("negotiated palette YUV420\n"); - } - else if (try_palette(capture->deviceHandle, &capture->imageProperties, VIDEO_PALETTE_YUV411P, 16)) { - //printf("negotiated palette YUV420P\n"); - } - else { - fprintf(stderr, "HIGHGUI ERROR: V4L: Pixel format of incoming image is unsupported by OpenCV\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - return 0; - -} - -#endif /* HAVE_CAMV4L */ - -#ifdef HAVE_CAMV4L2 - - -static void v4l2_scan_controls(CvCaptureCAM_V4L* capture) -{ - - __u32 ctrl_id; - - for (ctrl_id = V4L2_CID_BASE; - ctrl_id < V4L2_CID_LASTP1; - ctrl_id++) - { - - /* set the id we will query now */ - CLEAR (capture->queryctrl); - capture->queryctrl.id = ctrl_id; - - if (0 == ioctl (capture->deviceHandle, VIDIOC_QUERYCTRL, - &capture->queryctrl)) - { - - if (capture->queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - if (capture->queryctrl.id == V4L2_CID_BRIGHTNESS) - { - capture->v4l2_brightness = 1; - capture->v4l2_brightness_min = capture->queryctrl.minimum; - capture->v4l2_brightness_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_CONTRAST) - { - capture->v4l2_contrast = 1; - capture->v4l2_contrast_min = capture->queryctrl.minimum; - capture->v4l2_contrast_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_SATURATION) - { - capture->v4l2_saturation = 1; - capture->v4l2_saturation_min = capture->queryctrl.minimum; - capture->v4l2_saturation_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_HUE) - { - capture->v4l2_hue = 1; - capture->v4l2_hue_min = capture->queryctrl.minimum; - capture->v4l2_hue_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_GAIN) - { - capture->v4l2_gain = 1; - capture->v4l2_gain_min = capture->queryctrl.minimum; - capture->v4l2_gain_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_EXPOSURE) - { - capture->v4l2_exposure = 1; - capture->v4l2_exposure_min = capture->queryctrl.minimum; - capture->v4l2_exposure_max = capture->queryctrl.maximum; - } - - - } else { - - if (errno == EINVAL) - continue; - - perror ("VIDIOC_QUERYCTRL"); - - } - - } - - for (ctrl_id = V4L2_CID_PRIVATE_BASE;;ctrl_id++) - { - - /* set the id we will query now */ - CLEAR (capture->queryctrl); - capture->queryctrl.id = ctrl_id; - - if (0 == ioctl (capture->deviceHandle, VIDIOC_QUERYCTRL, - &capture->queryctrl)) - { - - if (capture->queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) - continue; - - if (capture->queryctrl.id == V4L2_CID_BRIGHTNESS) - { - capture->v4l2_brightness = 1; - capture->v4l2_brightness_min = capture->queryctrl.minimum; - capture->v4l2_brightness_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_CONTRAST) - { - capture->v4l2_contrast = 1; - capture->v4l2_contrast_min = capture->queryctrl.minimum; - capture->v4l2_contrast_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_SATURATION) - { - capture->v4l2_saturation = 1; - capture->v4l2_saturation_min = capture->queryctrl.minimum; - capture->v4l2_saturation_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_HUE) - { - capture->v4l2_hue = 1; - capture->v4l2_hue_min = capture->queryctrl.minimum; - capture->v4l2_hue_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_GAIN) - { - capture->v4l2_gain = 1; - capture->v4l2_gain_min = capture->queryctrl.minimum; - capture->v4l2_gain_max = capture->queryctrl.maximum; - } - - if (capture->queryctrl.id == V4L2_CID_EXPOSURE) - { - capture->v4l2_exposure = 1; - capture->v4l2_exposure_min = capture->queryctrl.minimum; - capture->v4l2_exposure_max = capture->queryctrl.maximum; - } - - } else { - - if (errno == EINVAL) - break; - - perror ("VIDIOC_QUERYCTRL"); - - } - - } - -} - -static int _capture_V4L2 (CvCaptureCAM_V4L *capture, char *deviceName) -{ - int detect_v4l2 = 0; - - detect_v4l2 = try_init_v4l2(capture, deviceName); - - if (detect_v4l2 != 1) { - /* init of the v4l2 device is not OK */ - return -1; - } - - /* starting from here, we assume we are in V4L2 mode */ - V4L2_SUPPORT = 1; - - /* Init V4L2 control variables */ - capture->v4l2_brightness = 0; - capture->v4l2_contrast = 0; - capture->v4l2_saturation = 0; - capture->v4l2_hue = 0; - capture->v4l2_gain = 0; - capture->v4l2_exposure = 0; - - capture->v4l2_brightness_min = 0; - capture->v4l2_contrast_min = 0; - capture->v4l2_saturation_min = 0; - capture->v4l2_hue_min = 0; - capture->v4l2_gain_min = 0; - capture->v4l2_exposure_min = 0; - - capture->v4l2_brightness_max = 0; - capture->v4l2_contrast_max = 0; - capture->v4l2_saturation_max = 0; - capture->v4l2_hue_max = 0; - capture->v4l2_gain_max = 0; - capture->v4l2_exposure_max = 0; - - capture->timestamp.tv_sec = 0; - capture->timestamp.tv_usec = 0; - - /* Scan V4L2 controls */ - v4l2_scan_controls(capture); - - if ((capture->cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == 0) { - /* Nope. */ - fprintf( stderr, "HIGHGUI ERROR: V4L2: device %s is unable to capture video memory.\n",deviceName); - icvCloseCAM_V4L(capture); - return -1; - } - - /* The following code sets the CHANNEL_NUMBER of the video input. Some video sources - have sub "Channel Numbers". For a typical V4L TV capture card, this is usually 1. - I myself am using a simple NTSC video input capture card that uses the value of 1. - If you are not in North America or have a different video standard, you WILL have to change - the following settings and recompile/reinstall. This set of settings is based on - the most commonly encountered input video source types (like my bttv card) */ - - if(capture->inp.index > 0) { - CLEAR (capture->inp); - capture->inp.index = CHANNEL_NUMBER; - /* Set only channel number to CHANNEL_NUMBER */ - /* V4L2 have a status field from selected video mode */ - if (-1 == ioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp)) - { - fprintf (stderr, "HIGHGUI ERROR: V4L2: Aren't able to set channel number\n"); - icvCloseCAM_V4L (capture); - return -1; - } - } /* End if */ - - /* Find Window info */ - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) { - fprintf( stderr, "HIGHGUI ERROR: V4L2: Could not obtain specifics of capture window.\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - if (V4L2_SUPPORT == 0) - { - } - - if (autosetup_capture_mode_v4l2(capture) == -1) - return -1; - - icvSetVideoSize(capture, DEFAULT_V4L_WIDTH, DEFAULT_V4L_HEIGHT); - - unsigned int min; - - /* Buggy driver paranoia. */ - min = capture->form.fmt.pix.width * 2; - - if (capture->form.fmt.pix.bytesperline < min) - capture->form.fmt.pix.bytesperline = min; - - min = capture->form.fmt.pix.bytesperline * capture->form.fmt.pix.height; - - if (capture->form.fmt.pix.sizeimage < min) - capture->form.fmt.pix.sizeimage = min; - - CLEAR (capture->req); - - unsigned int buffer_number = DEFAULT_V4L_BUFFERS; - - try_again: - - capture->req.count = buffer_number; - capture->req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->req.memory = V4L2_MEMORY_MMAP; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_REQBUFS, &capture->req)) - { - if (EINVAL == errno) - { - fprintf (stderr, "%s does not support memory mapping\n", deviceName); - } else { - perror ("VIDIOC_REQBUFS"); - } - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - - if (capture->req.count < buffer_number) - { - if (buffer_number == 1) - { - fprintf (stderr, "Insufficient buffer memory on %s\n", deviceName); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } else { - buffer_number--; - fprintf (stderr, "Insufficient buffer memory on %s -- decreaseing buffers\n", deviceName); - - goto try_again; - } - } - - for (n_buffers = 0; n_buffers < capture->req.count; ++n_buffers) - { - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = n_buffers; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_QUERYBUF, &buf)) { - perror ("VIDIOC_QUERYBUF"); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - - capture->buffers[n_buffers].length = buf.length; - capture->buffers[n_buffers].start = - mmap (NULL /* start anywhere */, - buf.length, - PROT_READ | PROT_WRITE /* required */, - MAP_SHARED /* recommended */, - capture->deviceHandle, buf.m.offset); - - if (MAP_FAILED == capture->buffers[n_buffers].start) { - perror ("mmap"); - - /* free capture, and returns an error code */ - icvCloseCAM_V4L (capture); - return -1; - } - - if (n_buffers == 0) { - capture->buffers[MAX_V4L_BUFFERS].start = malloc( buf.length ); - capture->buffers[MAX_V4L_BUFFERS].length = buf.length; - } - } - - /* Set up Image data */ - cvInitImageHeader( &capture->frame, - cvSize( capture->form.fmt.pix.width, - capture->form.fmt.pix.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - /* Allocate space for RGBA data */ - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - - return 1; -}; /* End _capture_V4L2 */ - -#endif /* HAVE_CAMV4L2 */ - -#ifdef HAVE_CAMV4L - -static int _capture_V4L (CvCaptureCAM_V4L *capture, char *deviceName) -{ - int detect_v4l = 0; - - detect_v4l = try_init_v4l(capture, deviceName); - - if ((detect_v4l == -1) - ) - { - fprintf (stderr, "HIGHGUI ERROR: V4L" - ": device %s: Unable to open for READ ONLY\n", deviceName); - - return -1; - } - - if ((detect_v4l <= 0) - ) - { - fprintf (stderr, "HIGHGUI ERROR: V4L" - ": device %s: Unable to query number of channels\n", deviceName); - - return -1; - } - - { - if ((capture->capability.type & VID_TYPE_CAPTURE) == 0) { - /* Nope. */ - fprintf( stderr, "HIGHGUI ERROR: V4L: " - "device %s is unable to capture video memory.\n",deviceName); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - - /* The following code sets the CHANNEL_NUMBER of the video input. Some video sources - have sub "Channel Numbers". For a typical V4L TV capture card, this is usually 1. - I myself am using a simple NTSC video input capture card that uses the value of 1. - If you are not in North America or have a different video standard, you WILL have to change - the following settings and recompile/reinstall. This set of settings is based on - the most commonly encountered input video source types (like my bttv card) */ - - { - - if(capture->capability.channels>0) { - - struct video_channel selectedChannel; - memset(&selectedChannel, 0, sizeof(selectedChannel)); - - selectedChannel.channel=CHANNEL_NUMBER; - if (ioctl(capture->deviceHandle, VIDIOCGCHAN , &selectedChannel) != -1) { - /* set the video mode to ( VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_SECAM) */ -// selectedChannel.norm = VIDEO_MODE_NTSC; - if (ioctl(capture->deviceHandle, VIDIOCSCHAN , &selectedChannel) == -1) { - /* Could not set selected channel - Oh well */ - //printf("\n%d, %s not NTSC capable.\n",selectedChannel.channel, selectedChannel.name); - } /* End if */ - } /* End if */ - } /* End if */ - - } - - { - - if(ioctl(capture->deviceHandle, VIDIOCGWIN, &capture->captureWindow) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: " - "Could not obtain specifics of capture window.\n\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - { - - if (autosetup_capture_mode_v4l(capture) == -1) - return -1; - - } - - { - - ioctl(capture->deviceHandle, VIDIOCGMBUF, &capture->memoryBuffer); - capture->memoryMap = (char *)mmap(0, - capture->memoryBuffer.size, - PROT_READ | PROT_WRITE, - MAP_SHARED, - capture->deviceHandle, - 0); - if (capture->memoryMap == MAP_FAILED) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Mapping Memmory from video source error: %s\n", strerror(errno)); - icvCloseCAM_V4L(capture); - } - - /* Set up video_mmap structure pointing to this memory mapped area so each image may be - retrieved from an index value */ - capture->mmaps = (struct video_mmap *) - (malloc(capture->memoryBuffer.frames * sizeof(struct video_mmap))); - if (!capture->mmaps) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not memory map video frames.\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - } - - /* Set up Image data */ - cvInitImageHeader( &capture->frame, - cvSize( capture->captureWindow.width, - capture->captureWindow.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - /* Allocate space for RGBA data */ - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - - return 1; -}; /* End _capture_V4L */ - -#endif /* HAVE_CAMV4L */ - -static CvCaptureCAM_V4L * icvCaptureFromCAM_V4L (int index) -{ - static int autoindex; - autoindex = 0; - - char deviceName[MAX_DEVICE_DRIVER_NAME]; - - if (!numCameras) - icvInitCapture_V4L(); /* Havent called icvInitCapture yet - do it now! */ - if (!numCameras) - return NULL; /* Are there any /dev/video input sources? */ - - //search index in indexList - if ( (index>-1) && ! ((1 << index) & indexList) ) - { - fprintf( stderr, "HIGHGUI ERROR: V4L: index %d is not correct!\n",index); - return NULL; /* Did someone ask for not correct video source number? */ - } - /* Allocate memory for this humongus CvCaptureCAM_V4L structure that contains ALL - the handles for V4L processing */ - CvCaptureCAM_V4L * capture = (CvCaptureCAM_V4L*)cvAlloc(sizeof(CvCaptureCAM_V4L)); - if (!capture) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not allocate memory for capture process.\n"); - return NULL; - } - /* Select camera, or rather, V4L video source */ - if (index<0) { // Asking for the first device available - for (; autoindexFirstCapture = 1; - -#ifdef HAVE_CAMV4L2 - if (_capture_V4L2 (capture, deviceName) == -1) { - icvCloseCAM_V4L(capture); - V4L2_SUPPORT = 0; -#endif /* HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - if (_capture_V4L (capture, deviceName) == -1) { - icvCloseCAM_V4L(capture); - return NULL; - } -#endif /* HAVE_CAMV4L */ -#ifdef HAVE_CAMV4L2 - } else { - V4L2_SUPPORT = 1; - } -#endif /* HAVE_CAMV4L2 */ - - return capture; -}; /* End icvOpenCAM_V4L */ - -#ifdef HAVE_CAMV4L2 - -static int read_frame_v4l2(CvCaptureCAM_V4L* capture) { - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_DQBUF, &buf)) { - switch (errno) { - case EAGAIN: - return 0; - - case EIO: - if (!(buf.flags & (V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_DONE))) - { - if (ioctl(capture->deviceHandle, VIDIOC_QBUF, &buf) == -1) - { - return 0; - } - } - return 0; - - default: - /* display the error and stop processing */ - perror ("VIDIOC_DQBUF"); - return 1; - } - } - - assert(buf.index < capture->req.count); - - memcpy(capture->buffers[MAX_V4L_BUFFERS].start, - capture->buffers[buf.index].start, - capture->buffers[MAX_V4L_BUFFERS].length ); - capture->bufferIndex = MAX_V4L_BUFFERS; - //printf("got data in buff %d, len=%d, flags=0x%X, seq=%d, used=%d)\n", - // buf.index, buf.length, buf.flags, buf.sequence, buf.bytesused); - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_QBUF, &buf)) - perror ("VIDIOC_QBUF"); - - //set timestamp in capture struct to be timestamp of most recent frame - capture->timestamp = buf.timestamp; - - return 1; -} - -static void mainloop_v4l2(CvCaptureCAM_V4L* capture) { - unsigned int count; - - count = 1; - - while (count-- > 0) { - for (;;) { - fd_set fds; - struct timeval tv; - int r; - - FD_ZERO (&fds); - FD_SET (capture->deviceHandle, &fds); - - /* Timeout. */ - tv.tv_sec = 10; - tv.tv_usec = 0; - - r = select (capture->deviceHandle+1, &fds, NULL, NULL, &tv); - - if (-1 == r) { - if (EINTR == errno) - continue; - - perror ("select"); - } - - if (0 == r) { - fprintf (stderr, "select timeout\n"); - - /* end the infinite loop */ - break; - } - - if (read_frame_v4l2 (capture)) - break; - } - } -} - -#endif /* HAVE_CAMV4L2 */ - -static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) { - - if (capture->FirstCapture) { - /* Some general initialization must take place the first time through */ - - /* This is just a technicality, but all buffers must be filled up before any - staggered SYNC is applied. SO, filler up. (see V4L HowTo) */ - -#ifdef HAVE_CAMV4L2 - -#ifdef HAVE_CAMV4L - if (V4L2_SUPPORT == 1) -#endif - { - - for (capture->bufferIndex = 0; - capture->bufferIndex < ((int)capture->req.count); - ++capture->bufferIndex) - { - - struct v4l2_buffer buf; - - CLEAR (buf); - - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - buf.index = (unsigned long)capture->bufferIndex; - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_QBUF, &buf)) { - perror ("VIDIOC_QBUF"); - return 0; - } - } - - /* enable the streaming */ - capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == ioctl (capture->deviceHandle, VIDIOC_STREAMON, - &capture->type)) { - /* error enabling the stream */ - perror ("VIDIOC_STREAMON"); - return 0; - } - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - for (capture->bufferIndex = 0; - capture->bufferIndex < (capture->memoryBuffer.frames-1); - ++capture->bufferIndex) { - - capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex; - capture->mmaps[capture->bufferIndex].width = capture->captureWindow.width; - capture->mmaps[capture->bufferIndex].height = capture->captureWindow.height; - capture->mmaps[capture->bufferIndex].format = capture->imageProperties.palette; - - if (ioctl(capture->deviceHandle, VIDIOCMCAPTURE, &capture->mmaps[capture->bufferIndex]) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.\n"); - return 0; - } - } - - } -#endif /* HAVE_CAMV4L */ - -#if defined(V4L_ABORT_BADJPEG) && defined(HAVE_CAMV4L2) - if (V4L2_SUPPORT == 1) - { - // skip first frame. it is often bad -- this is unnotied in traditional apps, - // but could be fatal if bad jpeg is enabled - mainloop_v4l2(capture); - } -#endif - - /* preparation is ok */ - capture->FirstCapture = 0; - } - -#ifdef HAVE_CAMV4L2 - - if (V4L2_SUPPORT == 1) - { - - mainloop_v4l2(capture); - - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex; - capture->mmaps[capture->bufferIndex].width = capture->captureWindow.width; - capture->mmaps[capture->bufferIndex].height = capture->captureWindow.height; - capture->mmaps[capture->bufferIndex].format = capture->imageProperties.palette; - - if (ioctl (capture->deviceHandle, VIDIOCMCAPTURE, - &capture->mmaps[capture->bufferIndex]) == -1) { - /* capture is on the way, so just exit */ - return 1; - } - - ++capture->bufferIndex; - if (capture->bufferIndex == capture->memoryBuffer.frames) { - capture->bufferIndex = 0; - } - - } -#endif /* HAVE_CAMV4L */ - - return(1); -} - -/* - * Turn a YUV4:2:0 block into an RGB block - * - * Video4Linux seems to use the blue, green, red channel - * order convention-- rgb[0] is blue, rgb[1] is green, rgb[2] is red. - * - * Color space conversion coefficients taken from the excellent - * http://www.inforamp.net/~poynton/ColorFAQ.html - * In his terminology, this is a CCIR 601.1 YCbCr -> RGB. - * Y values are given for all 4 pixels, but the U (Pb) - * and V (Pr) are assumed constant over the 2x2 block. - * - * To avoid floating point arithmetic, the color conversion - * coefficients are scaled into 16.16 fixed-point integers. - * They were determined as follows: - * - * double brightness = 1.0; (0->black; 1->full scale) - * double saturation = 1.0; (0->greyscale; 1->full color) - * double fixScale = brightness * 256 * 256; - * int rvScale = (int)(1.402 * saturation * fixScale); - * int guScale = (int)(-0.344136 * saturation * fixScale); - * int gvScale = (int)(-0.714136 * saturation * fixScale); - * int buScale = (int)(1.772 * saturation * fixScale); - * int yScale = (int)(fixScale); - */ - -/* LIMIT: convert a 16.16 fixed-point value to a byte, with clipping. */ -#define LIMIT(x) ((x)>0xffffff?0xff: ((x)<=0xffff?0:((x)>>16))) - -static inline void -move_420_block(int yTL, int yTR, int yBL, int yBR, int u, int v, - int rowPixels, unsigned char * rgb) -{ - const int rvScale = 91881; - const int guScale = -22553; - const int gvScale = -46801; - const int buScale = 116129; - const int yScale = 65536; - int r, g, b; - - g = guScale * u + gvScale * v; -// if (force_rgb) { -// r = buScale * u; -// b = rvScale * v; -// } else { - r = rvScale * v; - b = buScale * u; -// } - - yTL *= yScale; yTR *= yScale; - yBL *= yScale; yBR *= yScale; - - /* Write out top two pixels */ - rgb[0] = LIMIT(b+yTL); rgb[1] = LIMIT(g+yTL); - rgb[2] = LIMIT(r+yTL); - - rgb[3] = LIMIT(b+yTR); rgb[4] = LIMIT(g+yTR); - rgb[5] = LIMIT(r+yTR); - - /* Skip down to next line to write out bottom two pixels */ - rgb += 3 * rowPixels; - rgb[0] = LIMIT(b+yBL); rgb[1] = LIMIT(g+yBL); - rgb[2] = LIMIT(r+yBL); - - rgb[3] = LIMIT(b+yBR); rgb[4] = LIMIT(g+yBR); - rgb[5] = LIMIT(r+yBR); -} - -static inline void -move_411_block(int yTL, int yTR, int yBL, int yBR, int u, int v, - int /*rowPixels*/, unsigned char * rgb) -{ - const int rvScale = 91881; - const int guScale = -22553; - const int gvScale = -46801; - const int buScale = 116129; - const int yScale = 65536; - int r, g, b; - - g = guScale * u + gvScale * v; -// if (force_rgb) { -// r = buScale * u; -// b = rvScale * v; -// } else { - r = rvScale * v; - b = buScale * u; -// } - - yTL *= yScale; yTR *= yScale; - yBL *= yScale; yBR *= yScale; - - /* Write out top two first pixels */ - rgb[0] = LIMIT(b+yTL); rgb[1] = LIMIT(g+yTL); - rgb[2] = LIMIT(r+yTL); - - rgb[3] = LIMIT(b+yTR); rgb[4] = LIMIT(g+yTR); - rgb[5] = LIMIT(r+yTR); - - /* Write out top two last pixels */ - rgb += 6; - rgb[0] = LIMIT(b+yBL); rgb[1] = LIMIT(g+yBL); - rgb[2] = LIMIT(r+yBL); - - rgb[3] = LIMIT(b+yBR); rgb[4] = LIMIT(g+yBR); - rgb[5] = LIMIT(r+yBR); -} - -// Consider a YUV420P image of 8x2 pixels. -// -// A plane of Y values A B C D E F G H -// I J K L M N O P -// -// A plane of U values 1 2 3 4 -// A plane of V values 1 2 3 4 .... -// -// The U1/V1 samples correspond to the ABIJ pixels. -// U2/V2 samples correspond to the CDKL pixels. -// -/* Converts from planar YUV420P to RGB24. */ -static void -yuv420p_to_rgb24(int width, int height, - unsigned char *pIn0, unsigned char *pOut0) -{ - const int numpix = width * height; - const int bytes = 24 >> 3; - int i, j, y00, y01, y10, y11, u, v; - unsigned char *pY = pIn0; - unsigned char *pU = pY + numpix; - unsigned char *pV = pU + numpix / 4; - unsigned char *pOut = pOut0; - - for (j = 0; j <= height - 2; j += 2) { - for (i = 0; i <= width - 2; i += 2) { - y00 = *pY; - y01 = *(pY + 1); - y10 = *(pY + width); - y11 = *(pY + width + 1); - u = (*pU++) - 128; - v = (*pV++) - 128; - - move_420_block(y00, y01, y10, y11, u, v, - width, pOut); - - pY += 2; - pOut += 2 * bytes; - - } - pY += width; - pOut += width * bytes; - } -} - -// Consider a YUV420 image of 6x2 pixels. -// -// A B C D U1 U2 -// I J K L V1 V2 -// -// The U1/V1 samples correspond to the ABIJ pixels. -// U2/V2 samples correspond to the CDKL pixels. -// -/* Converts from interlaced YUV420 to RGB24. */ -/* [FD] untested... */ -#ifdef HAVE_CAMV4L -static void -yuv420_to_rgb24(int width, int height, - unsigned char *pIn0, unsigned char *pOut0) -{ - const int bytes = 24 >> 3; - int i, j, y00, y01, y10, y11, u, v; - unsigned char *pY = pIn0; - unsigned char *pU = pY + 4; - unsigned char *pV = pU + width; - unsigned char *pOut = pOut0; - - for (j = 0; j <= height - 2; j += 2) { - for (i = 0; i <= width - 4; i += 4) { - y00 = *pY; - y01 = *(pY + 1); - y10 = *(pY + width); - y11 = *(pY + width + 1); - u = (*pU++) - 128; - v = (*pV++) - 128; - - move_420_block(y00, y01, y10, y11, u, v, - width, pOut); - - pY += 2; - pOut += 2 * bytes; - - y00 = *pY; - y01 = *(pY + 1); - y10 = *(pY + width); - y11 = *(pY + width + 1); - u = (*pU++) - 128; - v = (*pV++) - 128; - - move_420_block(y00, y01, y10, y11, u, v, - width, pOut); - - pY += 4; // skip UV - pOut += 2 * bytes; - - } - pY += width; - pOut += width * bytes; - } -} -#endif //HAVE_CAMV4L - -// Consider a YUV411P image of 8x2 pixels. -// -// A plane of Y values as before. -// -// A plane of U values 1 2 -// 3 4 -// -// A plane of V values 1 2 -// 3 4 -// -// The U1/V1 samples correspond to the ABCD pixels. -// U2/V2 samples correspond to the EFGH pixels. -// -/* Converts from planar YUV411P to RGB24. */ -/* [FD] untested... */ -static void -yuv411p_to_rgb24(int width, int height, - unsigned char *pIn0, unsigned char *pOut0) -{ - const int numpix = width * height; - const int bytes = 24 >> 3; - int i, j, y00, y01, y10, y11, u, v; - unsigned char *pY = pIn0; - unsigned char *pU = pY + numpix; - unsigned char *pV = pU + numpix / 4; - unsigned char *pOut = pOut0; - - for (j = 0; j <= height; j++) { - for (i = 0; i <= width - 4; i += 4) { - y00 = *pY; - y01 = *(pY + 1); - y10 = *(pY + 2); - y11 = *(pY + 3); - u = (*pU++) - 128; - v = (*pV++) - 128; - - move_411_block(y00, y01, y10, y11, u, v, - width, pOut); - - pY += 4; - pOut += 4 * bytes; - - } - } -} - -/* convert from 4:2:2 YUYV interlaced to RGB24 */ -/* based on ccvt_yuyv_bgr32() from camstream */ -#define SAT(c) \ - if (c & (~255)) { if (c < 0) c = 0; else c = 255; } - -#ifdef HAVE_CAMV4L2 -static void -yuyv_to_rgb24 (int width, int height, unsigned char *src, unsigned char *dst) -{ - unsigned char *s; - unsigned char *d; - int l, c; - int r, g, b, cr, cg, cb, y1, y2; - - l = height; - s = src; - d = dst; - while (l--) { - c = width >> 1; - while (c--) { - y1 = *s++; - cb = ((*s - 128) * 454) >> 8; - cg = (*s++ - 128) * 88; - y2 = *s++; - cr = ((*s - 128) * 359) >> 8; - cg = (cg + (*s++ - 128) * 183) >> 8; - - r = y1 + cr; - b = y1 + cb; - g = y1 - cg; - SAT(r); - SAT(g); - SAT(b); - - *d++ = b; - *d++ = g; - *d++ = r; - - r = y2 + cr; - b = y2 + cb; - g = y2 - cg; - SAT(r); - SAT(g); - SAT(b); - - *d++ = b; - *d++ = g; - *d++ = r; - } - } -} - -static void -uyvy_to_rgb24 (int width, int height, unsigned char *src, unsigned char *dst) -{ - unsigned char *s; - unsigned char *d; - int l, c; - int r, g, b, cr, cg, cb, y1, y2; - - l = height; - s = src; - d = dst; - while (l--) { - c = width >> 1; - while (c--) { - cb = ((*s - 128) * 454) >> 8; - cg = (*s++ - 128) * 88; - y1 = *s++; - cr = ((*s - 128) * 359) >> 8; - cg = (cg + (*s++ - 128) * 183) >> 8; - y2 = *s++; - - r = y1 + cr; - b = y1 + cb; - g = y1 - cg; - SAT(r); - SAT(g); - SAT(b); - - *d++ = b; - *d++ = g; - *d++ = r; - - r = y2 + cr; - b = y2 + cb; - g = y2 - cg; - SAT(r); - SAT(g); - SAT(b); - - *d++ = b; - *d++ = g; - *d++ = r; - } - } -} -#endif //HAVE_CAMV4L2 - -#ifdef HAVE_JPEG - -/* convert from mjpeg to rgb24 */ -static bool -mjpeg_to_rgb24 (int width, int height, - unsigned char *src, int length, - unsigned char *dst) -{ - cv::Mat temp=cv::imdecode(cv::Mat(std::vector(src, src + length)), 1); - if( !temp.data || temp.cols != width || temp.rows != height ) - return false; - memcpy(dst, temp.data, width*height*3); - return true; -} - -#endif - -/* - * BAYER2RGB24 ROUTINE TAKEN FROM: - * - * Sonix SN9C10x based webcam basic I/F routines - * Takafumi Mizuno - * - */ - -#ifdef HAVE_CAMV4L2 -static void bayer2rgb24(long int WIDTH, long int HEIGHT, unsigned char *src, unsigned char *dst) -{ - long int i; - unsigned char *rawpt, *scanpt; - long int size; - - rawpt = src; - scanpt = dst; - size = WIDTH*HEIGHT; - - for ( i = 0; i < size; i++ ) { - if ( (i/WIDTH) % 2 == 0 ) { - if ( (i % 2) == 0 ) { - /* B */ - if ( (i > WIDTH) && ((i % WIDTH) > 0) ) { - *scanpt++ = (*(rawpt-WIDTH-1)+*(rawpt-WIDTH+1)+ - *(rawpt+WIDTH-1)+*(rawpt+WIDTH+1))/4; /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1)+ - *(rawpt+WIDTH)+*(rawpt-WIDTH))/4; /* G */ - *scanpt++ = *rawpt; /* B */ - } else { - /* first line or left column */ - *scanpt++ = *(rawpt+WIDTH+1); /* R */ - *scanpt++ = (*(rawpt+1)+*(rawpt+WIDTH))/2; /* G */ - *scanpt++ = *rawpt; /* B */ - } - } else { - /* (B)G */ - if ( (i > WIDTH) && ((i % WIDTH) < (WIDTH-1)) ) { - *scanpt++ = (*(rawpt+WIDTH)+*(rawpt-WIDTH))/2; /* R */ - *scanpt++ = *rawpt; /* G */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1))/2; /* B */ - } else { - /* first line or right column */ - *scanpt++ = *(rawpt+WIDTH); /* R */ - *scanpt++ = *rawpt; /* G */ - *scanpt++ = *(rawpt-1); /* B */ - } - } - } else { - if ( (i % 2) == 0 ) { - /* G(R) */ - if ( (i < (WIDTH*(HEIGHT-1))) && ((i % WIDTH) > 0) ) { - *scanpt++ = (*(rawpt-1)+*(rawpt+1))/2; /* R */ - *scanpt++ = *rawpt; /* G */ - *scanpt++ = (*(rawpt+WIDTH)+*(rawpt-WIDTH))/2; /* B */ - } else { - /* bottom line or left column */ - *scanpt++ = *(rawpt+1); /* R */ - *scanpt++ = *rawpt; /* G */ - *scanpt++ = *(rawpt-WIDTH); /* B */ - } - } else { - /* R */ - if ( i < (WIDTH*(HEIGHT-1)) && ((i % WIDTH) < (WIDTH-1)) ) { - *scanpt++ = *rawpt; /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1)+ - *(rawpt-WIDTH)+*(rawpt+WIDTH))/4; /* G */ - *scanpt++ = (*(rawpt-WIDTH-1)+*(rawpt-WIDTH+1)+ - *(rawpt+WIDTH-1)+*(rawpt+WIDTH+1))/4; /* B */ - } else { - /* bottom line or right column */ - *scanpt++ = *rawpt; /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt-WIDTH))/2; /* G */ - *scanpt++ = *(rawpt-WIDTH-1); /* B */ - } - } - } - rawpt++; - } - -} - -// SGBRG to RGB24 -// for some reason, red and blue needs to be swapped -// at least for 046d:092f Logitech, Inc. QuickCam Express Plus to work -//see: http://www.siliconimaging.com/RGB%20Bayer.htm -//and 4.6 at http://tldp.org/HOWTO/html_single/libdc1394-HOWTO/ -static void sgbrg2rgb24(long int WIDTH, long int HEIGHT, unsigned char *src, unsigned char *dst) -{ - long int i; - unsigned char *rawpt, *scanpt; - long int size; - - rawpt = src; - scanpt = dst; - size = WIDTH*HEIGHT; - - for ( i = 0; i < size; i++ ) - { - if ( (i/WIDTH) % 2 == 0 ) //even row - { - if ( (i % 2) == 0 ) //even pixel - { - if ( (i > WIDTH) && ((i % WIDTH) > 0) ) - { - *scanpt++ = (*(rawpt-1)+*(rawpt+1))/2; /* R */ - *scanpt++ = *(rawpt); /* G */ - *scanpt++ = (*(rawpt-WIDTH) + *(rawpt+WIDTH))/2; /* B */ - } else - { - /* first line or left column */ - - *scanpt++ = *(rawpt+1); /* R */ - *scanpt++ = *(rawpt); /* G */ - *scanpt++ = *(rawpt+WIDTH); /* B */ - } - } else //odd pixel - { - if ( (i > WIDTH) && ((i % WIDTH) < (WIDTH-1)) ) - { - *scanpt++ = *(rawpt); /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1)+*(rawpt-WIDTH)+*(rawpt+WIDTH))/4; /* G */ - *scanpt++ = (*(rawpt-WIDTH-1) + *(rawpt-WIDTH+1) + *(rawpt+WIDTH-1) + *(rawpt+WIDTH+1))/4; /* B */ - } else - { - /* first line or right column */ - - *scanpt++ = *(rawpt); /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt+WIDTH))/2; /* G */ - *scanpt++ = *(rawpt+WIDTH-1); /* B */ - } - } - } else - { //odd row - if ( (i % 2) == 0 ) //even pixel - { - if ( (i < (WIDTH*(HEIGHT-1))) && ((i % WIDTH) > 0) ) - { - *scanpt++ = (*(rawpt-WIDTH-1)+*(rawpt-WIDTH+1)+*(rawpt+WIDTH-1)+*(rawpt+WIDTH+1))/4; /* R */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1)+*(rawpt-WIDTH)+*(rawpt+WIDTH))/4; /* G */ - *scanpt++ = *(rawpt); /* B */ - } else - { - /* bottom line or left column */ - - *scanpt++ = *(rawpt-WIDTH+1); /* R */ - *scanpt++ = (*(rawpt+1)+*(rawpt-WIDTH))/2; /* G */ - *scanpt++ = *(rawpt); /* B */ - } - } else - { //odd pixel - if ( i < (WIDTH*(HEIGHT-1)) && ((i % WIDTH) < (WIDTH-1)) ) - { - *scanpt++ = (*(rawpt-WIDTH)+*(rawpt+WIDTH))/2; /* R */ - *scanpt++ = *(rawpt); /* G */ - *scanpt++ = (*(rawpt-1)+*(rawpt+1))/2; /* B */ - } else - { - /* bottom line or right column */ - - *scanpt++ = (*(rawpt-WIDTH)); /* R */ - *scanpt++ = *(rawpt); /* G */ - *scanpt++ = (*(rawpt-1)); /* B */ - } - } - } - rawpt++; - } -} - -#define CLAMP(x) ((x)<0?0:((x)>255)?255:(x)) - -typedef struct { - int is_abs; - int len; - int val; -} code_table_t; - - -/* local storage */ -static code_table_t table[256]; -static int init_done = 0; - - -/* - sonix_decompress_init - ===================== - pre-calculates a locally stored table for efficient huffman-decoding. - - Each entry at index x in the table represents the codeword - present at the MSB of byte x. - -*/ -static void sonix_decompress_init(void) -{ - int i; - int is_abs, val, len; - - for (i = 0; i < 256; i++) { - is_abs = 0; - val = 0; - len = 0; - if ((i & 0x80) == 0) { - /* code 0 */ - val = 0; - len = 1; - } - else if ((i & 0xE0) == 0x80) { - /* code 100 */ - val = +4; - len = 3; - } - else if ((i & 0xE0) == 0xA0) { - /* code 101 */ - val = -4; - len = 3; - } - else if ((i & 0xF0) == 0xD0) { - /* code 1101 */ - val = +11; - len = 4; - } - else if ((i & 0xF0) == 0xF0) { - /* code 1111 */ - val = -11; - len = 4; - } - else if ((i & 0xF8) == 0xC8) { - /* code 11001 */ - val = +20; - len = 5; - } - else if ((i & 0xFC) == 0xC0) { - /* code 110000 */ - val = -20; - len = 6; - } - else if ((i & 0xFC) == 0xC4) { - /* code 110001xx: unknown */ - val = 0; - len = 8; - } - else if ((i & 0xF0) == 0xE0) { - /* code 1110xxxx */ - is_abs = 1; - val = (i & 0x0F) << 4; - len = 8; - } - table[i].is_abs = is_abs; - table[i].val = val; - table[i].len = len; - } - - init_done = 1; -} - - -/* - sonix_decompress - ================ - decompresses an image encoded by a SN9C101 camera controller chip. - - IN width - height - inp pointer to compressed frame (with header already stripped) - OUT outp pointer to decompressed frame - - Returns 0 if the operation was successful. - Returns <0 if operation failed. - -*/ -static int sonix_decompress(int width, int height, unsigned char *inp, unsigned char *outp) -{ - int row, col; - int val; - int bitpos; - unsigned char code; - unsigned char *addr; - - if (!init_done) { - /* do sonix_decompress_init first! */ - return -1; - } - - bitpos = 0; - for (row = 0; row < height; row++) { - - col = 0; - - - - /* first two pixels in first two rows are stored as raw 8-bit */ - if (row < 2) { - addr = inp + (bitpos >> 3); - code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7))); - bitpos += 8; - *outp++ = code; - - addr = inp + (bitpos >> 3); - code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7))); - bitpos += 8; - *outp++ = code; - - col += 2; - } - - while (col < width) { - /* get bitcode from bitstream */ - addr = inp + (bitpos >> 3); - code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7))); - - /* update bit position */ - bitpos += table[code].len; - - /* calculate pixel value */ - val = table[code].val; - if (!table[code].is_abs) { - /* value is relative to top and left pixel */ - if (col < 2) { - /* left column: relative to top pixel */ - val += outp[-2*width]; - } - else if (row < 2) { - /* top row: relative to left pixel */ - val += outp[-2]; - } - else { - /* main area: average of left pixel and top pixel */ - val += (outp[-2] + outp[-2*width]) / 2; - } - } - - /* store pixel */ - *outp++ = CLAMP(val); - col++; - } - } - - return 0; -} -#endif //HAVE_CAMV4L2 - -static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) { - -#ifdef HAVE_CAMV4L2 - if (V4L2_SUPPORT == 0) -#endif /* HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - /* [FD] this really belongs here */ - if (ioctl(capture->deviceHandle, VIDIOCSYNC, &capture->mmaps[capture->bufferIndex].frame) == -1) { - fprintf( stderr, "HIGHGUI ERROR: V4L: Could not SYNC to video stream. %s\n", strerror(errno)); - } - - } -#endif /* HAVE_CAMV4L */ - - /* Now get what has already been captured as a IplImage return */ - - /* First, reallocate imageData if the frame size changed */ - -#ifdef HAVE_CAMV4L2 - - if (V4L2_SUPPORT == 1) - { - - if(((unsigned long)capture->frame.width != capture->form.fmt.pix.width) - || ((unsigned long)capture->frame.height != capture->form.fmt.pix.height)) { - cvFree(&capture->frame.imageData); - cvInitImageHeader( &capture->frame, - cvSize( capture->form.fmt.pix.width, - capture->form.fmt.pix.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - } - - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - if((capture->frame.width != capture->mmaps[capture->bufferIndex].width) - || (capture->frame.height != capture->mmaps[capture->bufferIndex].height)) { - cvFree(&capture->frame.imageData); - cvInitImageHeader( &capture->frame, - cvSize( capture->captureWindow.width, - capture->captureWindow.height ), - IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 ); - capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize); - } - - } -#endif /* HAVE_CAMV4L */ - -#ifdef HAVE_CAMV4L2 - - if (V4L2_SUPPORT == 1) - { - switch (capture->palette) - { - case PALETTE_BGR24: - memcpy((char *)capture->frame.imageData, - (char *)capture->buffers[capture->bufferIndex].start, - capture->frame.imageSize); - break; - - case PALETTE_YVU420: - yuv420p_to_rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)(capture->buffers[capture->bufferIndex].start), - (unsigned char*)capture->frame.imageData); - break; - - case PALETTE_YUV411P: - yuv411p_to_rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)(capture->buffers[capture->bufferIndex].start), - (unsigned char*)capture->frame.imageData); - break; -#ifdef HAVE_JPEG - case PALETTE_MJPEG: - if (!mjpeg_to_rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)(capture->buffers[capture->bufferIndex] - .start), - capture->buffers[capture->bufferIndex].length, - (unsigned char*)capture->frame.imageData)) - return 0; - break; -#endif - - case PALETTE_YUYV: - yuyv_to_rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)(capture->buffers[capture->bufferIndex].start), - (unsigned char*)capture->frame.imageData); - break; - case PALETTE_UYVY: - uyvy_to_rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)(capture->buffers[capture->bufferIndex].start), - (unsigned char*)capture->frame.imageData); - break; - case PALETTE_SBGGR8: - bayer2rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)capture->buffers[capture->bufferIndex].start, - (unsigned char*)capture->frame.imageData); - break; - - case PALETTE_SN9C10X: - sonix_decompress_init(); - sonix_decompress(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)capture->buffers[capture->bufferIndex].start, - (unsigned char*)capture->buffers[(capture->bufferIndex+1) % capture->req.count].start); - - bayer2rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)capture->buffers[(capture->bufferIndex+1) % capture->req.count].start, - (unsigned char*)capture->frame.imageData); - break; - - case PALETTE_SGBRG: - sgbrg2rgb24(capture->form.fmt.pix.width, - capture->form.fmt.pix.height, - (unsigned char*)capture->buffers[(capture->bufferIndex+1) % capture->req.count].start, - (unsigned char*)capture->frame.imageData); - break; - } - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - switch(capture->imageProperties.palette) - { - case VIDEO_PALETTE_RGB24: - memcpy((char *)capture->frame.imageData, - (char *)(capture->memoryMap + capture->memoryBuffer.offsets[capture->bufferIndex]), - capture->frame.imageSize); - break; - case VIDEO_PALETTE_YUV420P: - yuv420p_to_rgb24(capture->captureWindow.width, - capture->captureWindow.height, - (unsigned char*)(capture->memoryMap + capture->memoryBuffer.offsets[capture->bufferIndex]), - (unsigned char*)capture->frame.imageData); - break; - case VIDEO_PALETTE_YUV420: - yuv420_to_rgb24(capture->captureWindow.width, - capture->captureWindow.height, - (unsigned char*)(capture->memoryMap + capture->memoryBuffer.offsets[capture->bufferIndex]), - (unsigned char*)capture->frame.imageData); - break; - case VIDEO_PALETTE_YUV411P: - yuv411p_to_rgb24(capture->captureWindow.width, - capture->captureWindow.height, - (unsigned char*)(capture->memoryMap + capture->memoryBuffer.offsets[capture->bufferIndex]), - (unsigned char*)capture->frame.imageData); - break; - default: - fprintf( stderr, - "HIGHGUI ERROR: V4L: Cannot convert from palette %d to RGB\n", - capture->imageProperties.palette); - - return 0; - } - - } -#endif /* HAVE_CAMV4L */ - - return(&capture->frame); -} - -static double icvGetPropertyCAM_V4L (CvCaptureCAM_V4L* capture, - int property_id ) { - -#ifdef HAVE_CAMV4L2 - -#ifdef HAVE_CAMV4L - if (V4L2_SUPPORT == 1) -#endif - { - - /* default value for min and max */ - int v4l2_min = 0; - int v4l2_max = 255; - - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == ioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) { - /* display an error message, and return an error code */ - perror ("VIDIOC_G_FMT"); - return -1; - } - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - return capture->form.fmt.pix.width; - case CV_CAP_PROP_FRAME_HEIGHT: - return capture->form.fmt.pix.height; - } - - /* initialize the control structure */ - - switch (property_id) { - case CV_CAP_PROP_POS_MSEC: - if (capture->FirstCapture) { - return 0; - } else { - return 1000 * capture->timestamp.tv_sec + ((double) capture->timestamp.tv_usec) / 1000; - } - break; - case CV_CAP_PROP_BRIGHTNESS: - capture->control.id = V4L2_CID_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - capture->control.id = V4L2_CID_CONTRAST; - break; - case CV_CAP_PROP_SATURATION: - capture->control.id = V4L2_CID_SATURATION; - break; - case CV_CAP_PROP_HUE: - capture->control.id = V4L2_CID_HUE; - break; - case CV_CAP_PROP_GAIN: - capture->control.id = V4L2_CID_GAIN; - break; - case CV_CAP_PROP_EXPOSURE: - capture->control.id = V4L2_CID_EXPOSURE; - break; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L2: getting property #%d is not supported\n", - property_id); - return -1; - } - - if (-1 == ioctl (capture->deviceHandle, VIDIOC_G_CTRL, - &capture->control)) { - - fprintf( stderr, "HIGHGUI ERROR: V4L2: "); - switch (property_id) { - case CV_CAP_PROP_BRIGHTNESS: - fprintf (stderr, "Brightness"); - break; - case CV_CAP_PROP_CONTRAST: - fprintf (stderr, "Contrast"); - break; - case CV_CAP_PROP_SATURATION: - fprintf (stderr, "Saturation"); - break; - case CV_CAP_PROP_HUE: - fprintf (stderr, "Hue"); - break; - case CV_CAP_PROP_GAIN: - fprintf (stderr, "Gain"); - break; - case CV_CAP_PROP_EXPOSURE: - fprintf (stderr, "Exposure"); - break; - } - fprintf (stderr, " is not supported by your device\n"); - - return -1; - } - - /* get the min/max values */ - switch (property_id) { - - case CV_CAP_PROP_BRIGHTNESS: - v4l2_min = capture->v4l2_brightness_min; - v4l2_max = capture->v4l2_brightness_max; - break; - case CV_CAP_PROP_CONTRAST: - v4l2_min = capture->v4l2_contrast_min; - v4l2_max = capture->v4l2_contrast_max; - break; - case CV_CAP_PROP_SATURATION: - v4l2_min = capture->v4l2_saturation_min; - v4l2_max = capture->v4l2_saturation_max; - break; - case CV_CAP_PROP_HUE: - v4l2_min = capture->v4l2_hue_min; - v4l2_max = capture->v4l2_hue_max; - break; - case CV_CAP_PROP_GAIN: - v4l2_min = capture->v4l2_gain_min; - v4l2_max = capture->v4l2_gain_max; - break; - case CV_CAP_PROP_EXPOSURE: - v4l2_min = capture->v4l2_exposure_min; - v4l2_max = capture->v4l2_exposure_max; - break; - } - - /* all was OK, so convert to 0.0 - 1.0 range, and return the value */ - return ((float)capture->control.value - v4l2_min + 1) / (v4l2_max - v4l2_min); - - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - int retval = -1; - - if (ioctl (capture->deviceHandle, - VIDIOCGWIN, &capture->captureWindow) < 0) { - fprintf (stderr, - "HIGHGUI ERROR: V4L: " - "Unable to determine size of incoming image\n"); - icvCloseCAM_V4L(capture); - return -1; - } - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - retval = capture->captureWindow.width; - break; - case CV_CAP_PROP_FRAME_HEIGHT: - retval = capture->captureWindow.height; - break; - case CV_CAP_PROP_BRIGHTNESS: - retval = capture->imageProperties.brightness; - break; - case CV_CAP_PROP_CONTRAST: - retval = capture->imageProperties.contrast; - break; - case CV_CAP_PROP_SATURATION: - retval = capture->imageProperties.colour; - break; - case CV_CAP_PROP_HUE: - retval = capture->imageProperties.hue; - break; - case CV_CAP_PROP_GAIN: - fprintf(stderr, - "HIGHGUI ERROR: V4L: Gain control in V4L is not supported\n"); - return -1; - break; - case CV_CAP_PROP_EXPOSURE: - fprintf(stderr, - "HIGHGUI ERROR: V4L: Exposure control in V4L is not supported\n"); - return -1; - break; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L: getting property #%d is not supported\n", - property_id); - } - - if (retval == -1) { - /* there was a problem */ - return -1; - } - - /* all was OK, so convert to 0.0 - 1.0 range, and return the value */ - return float (retval) / 0xFFFF; - - } -#endif /* HAVE_CAMV4L */ - -}; - -static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h) { - -#ifdef HAVE_CAMV4L2 - - if (V4L2_SUPPORT == 1) - { - - CLEAR (capture->cropcap); - capture->cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - if (ioctl (capture->deviceHandle, VIDIOC_CROPCAP, &capture->cropcap) < 0) { - fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP\n"); - } else { - - CLEAR (capture->crop); - capture->crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - capture->crop.c= capture->cropcap.defrect; - - /* set the crop area, but don't exit if the device don't support croping */ - if (ioctl (capture->deviceHandle, VIDIOC_S_CROP, &capture->crop) < 0) { - fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP\n"); - } - } - - CLEAR (capture->form); - capture->form.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - - /* read the current setting, mainly to retreive the pixelformat information */ - ioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form); - - /* set the values we want to change */ - capture->form.fmt.pix.width = w; - capture->form.fmt.pix.height = h; - capture->form.fmt.win.chromakey = 0; - capture->form.fmt.win.field = V4L2_FIELD_ANY; - capture->form.fmt.win.clips = 0; - capture->form.fmt.win.clipcount = 0; - capture->form.fmt.pix.field = V4L2_FIELD_ANY; - - /* ask the device to change the size - * don't test if the set of the size is ok, because some device - * don't allow changing the size, and we will get the real size - * later */ - ioctl (capture->deviceHandle, VIDIOC_S_FMT, &capture->form); - - /* try to set framerate to 30 fps */ - struct v4l2_streamparm setfps; - memset (&setfps, 0, sizeof(struct v4l2_streamparm)); - setfps.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - setfps.parm.capture.timeperframe.numerator = 1; - setfps.parm.capture.timeperframe.denominator = 30; - ioctl (capture->deviceHandle, VIDIOC_S_PARM, &setfps); - - /* we need to re-initialize some things, like buffers, because the size has - * changed */ - capture->FirstCapture = 1; - - /* Get window info again, to get the real value */ - if (-1 == ioctl (capture->deviceHandle, VIDIOC_G_FMT, &capture->form)) - { - fprintf(stderr, "HIGHGUI ERROR: V4L/V4L2: Could not obtain specifics of capture window.\n\n"); - - icvCloseCAM_V4L(capture); - - return 0; - } - - return 0; - - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - if (capture==0) return 0; - if (w>capture->capability.maxwidth) { - w=capture->capability.maxwidth; - } - if (h>capture->capability.maxheight) { - h=capture->capability.maxheight; - } - - capture->captureWindow.width=w; - capture->captureWindow.height=h; - - if (ioctl(capture->deviceHandle, VIDIOCSWIN, &capture->captureWindow) < 0) { - icvCloseCAM_V4L(capture); - return 0; - } - - if (ioctl(capture->deviceHandle, VIDIOCGWIN, &capture->captureWindow) < 0) { - icvCloseCAM_V4L(capture); - return 0; - } - - capture->FirstCapture = 1; - - } -#endif /* HAVE_CAMV4L */ - - return 0; - -} - -static int icvSetControl (CvCaptureCAM_V4L* capture, - int property_id, double value) { - - /* limitation of the input value */ - if (value < 0.0) { - value = 0.0; - } else if (value > 1.0) { - value = 1.0; - } - -#ifdef HAVE_CAMV4L2 - - if (V4L2_SUPPORT == 1) - { - - /* default value for min and max */ - int v4l2_min = 0; - int v4l2_max = 255; - - /* initialisations */ - CLEAR (capture->control); - - /* set which control we want to set */ - switch (property_id) { - - case CV_CAP_PROP_BRIGHTNESS: - capture->control.id = V4L2_CID_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - capture->control.id = V4L2_CID_CONTRAST; - break; - case CV_CAP_PROP_SATURATION: - capture->control.id = V4L2_CID_SATURATION; - break; - case CV_CAP_PROP_HUE: - capture->control.id = V4L2_CID_HUE; - break; - case CV_CAP_PROP_GAIN: - capture->control.id = V4L2_CID_GAIN; - break; - case CV_CAP_PROP_EXPOSURE: - capture->control.id = V4L2_CID_EXPOSURE; - break; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L2: setting property #%d is not supported\n", - property_id); - return -1; - } - - /* get the min and max values */ - if (-1 == ioctl (capture->deviceHandle, - VIDIOC_G_CTRL, &capture->control)) { -// perror ("VIDIOC_G_CTRL for getting min/max values"); - return -1; - } - - /* get the min/max values */ - switch (property_id) { - - case CV_CAP_PROP_BRIGHTNESS: - v4l2_min = capture->v4l2_brightness_min; - v4l2_max = capture->v4l2_brightness_max; - break; - case CV_CAP_PROP_CONTRAST: - v4l2_min = capture->v4l2_contrast_min; - v4l2_max = capture->v4l2_contrast_max; - break; - case CV_CAP_PROP_SATURATION: - v4l2_min = capture->v4l2_saturation_min; - v4l2_max = capture->v4l2_saturation_max; - break; - case CV_CAP_PROP_HUE: - v4l2_min = capture->v4l2_hue_min; - v4l2_max = capture->v4l2_hue_max; - break; - case CV_CAP_PROP_GAIN: - v4l2_min = capture->v4l2_gain_min; - v4l2_max = capture->v4l2_gain_max; - break; - case CV_CAP_PROP_EXPOSURE: - v4l2_min = capture->v4l2_exposure_min; - v4l2_max = capture->v4l2_exposure_max; - break; - } - - /* initialisations */ - CLEAR (capture->control); - - /* set which control we want to set */ - switch (property_id) { - - case CV_CAP_PROP_BRIGHTNESS: - capture->control.id = V4L2_CID_BRIGHTNESS; - break; - case CV_CAP_PROP_CONTRAST: - capture->control.id = V4L2_CID_CONTRAST; - break; - case CV_CAP_PROP_SATURATION: - capture->control.id = V4L2_CID_SATURATION; - break; - case CV_CAP_PROP_HUE: - capture->control.id = V4L2_CID_HUE; - break; - case CV_CAP_PROP_GAIN: - capture->control.id = V4L2_CID_GAIN; - break; - case CV_CAP_PROP_EXPOSURE: - capture->control.id = V4L2_CID_EXPOSURE; - break; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L2: setting property #%d is not supported\n", - property_id); - return -1; - } - - /* set the value we want to set to the scaled the value */ - capture->control.value = (int)(value * (v4l2_max - v4l2_min) + v4l2_min); - - /* The driver may clamp the value or return ERANGE, ignored here */ - if (-1 == ioctl (capture->deviceHandle, - VIDIOC_S_CTRL, &capture->control) && errno != ERANGE) { - perror ("VIDIOC_S_CTRL"); - return -1; - } - } -#endif /* HAVE_CAMV4L2 */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - int v4l_value; - - /* scale the value to the wanted integer one */ - v4l_value = (int)(0xFFFF * value); - - switch (property_id) { - case CV_CAP_PROP_BRIGHTNESS: - capture->imageProperties.brightness = v4l_value; - break; - case CV_CAP_PROP_CONTRAST: - capture->imageProperties.contrast = v4l_value; - break; - case CV_CAP_PROP_SATURATION: - capture->imageProperties.colour = v4l_value; - break; - case CV_CAP_PROP_HUE: - capture->imageProperties.hue = v4l_value; - break; - case CV_CAP_PROP_GAIN: - fprintf(stderr, - "HIGHGUI ERROR: V4L: Gain control in V4L is not supported\n"); - return -1; - case CV_CAP_PROP_EXPOSURE: - fprintf(stderr, - "HIGHGUI ERROR: V4L: Exposure control in V4L is not supported\n"); - return -1; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L: property #%d is not supported\n", - property_id); - return -1; - } - - if (ioctl(capture->deviceHandle, VIDIOCSPICT, &capture->imageProperties) - < 0) - { - fprintf(stderr, - "HIGHGUI ERROR: V4L: Unable to set video informations\n"); - icvCloseCAM_V4L(capture); - return -1; - } - } -#endif /* HAVE_CAMV4L */ - - /* all was OK */ - return 0; - -} - -static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, - int property_id, double value ){ - static int width = 0, height = 0; - int retval; - - /* initialization */ - retval = 0; - - /* two subsequent calls setting WIDTH and HEIGHT will change - the video size */ - /* the first one will return an error, though. */ - - switch (property_id) { - case CV_CAP_PROP_FRAME_WIDTH: - width = cvRound(value); - if(width !=0 && height != 0) { - retval = icvSetVideoSize( capture, width, height); - width = height = 0; - } - break; - case CV_CAP_PROP_FRAME_HEIGHT: - height = cvRound(value); - if(width !=0 && height != 0) { - retval = icvSetVideoSize( capture, width, height); - width = height = 0; - } - break; - case CV_CAP_PROP_BRIGHTNESS: - case CV_CAP_PROP_CONTRAST: - case CV_CAP_PROP_SATURATION: - case CV_CAP_PROP_HUE: - case CV_CAP_PROP_GAIN: - case CV_CAP_PROP_EXPOSURE: - retval = icvSetControl(capture, property_id, value); - break; - default: - fprintf(stderr, - "HIGHGUI ERROR: V4L: setting property #%d is not supported\n", - property_id); - } - - /* return the the status */ - return retval; -} - -static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ){ - /* Deallocate space - Hopefully, no leaks */ - - if (capture) - { - -#ifdef HAVE_CAMV4L2 - if (V4L2_SUPPORT == 0) -#endif /* HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L - { - - if (capture->mmaps) - free(capture->mmaps); - if (capture->memoryMap) - munmap(capture->memoryMap, capture->memoryBuffer.size); - - } -#endif /* HAVE_CAMV4L */ -#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2) - else -#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */ -#ifdef HAVE_CAMV4L2 - { - capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - if (-1 == ioctl(capture->deviceHandle, VIDIOC_STREAMOFF, &capture->type)) { - perror ("Unable to stop the stream."); - } - - for (unsigned int n_buffers_ = 0; n_buffers_ < capture->req.count; ++n_buffers_) - { - if (-1 == munmap (capture->buffers[n_buffers_].start, capture->buffers[n_buffers_].length)) { - perror ("munmap"); - } - } - - if (capture->buffers[MAX_V4L_BUFFERS].start) - { - free(capture->buffers[MAX_V4L_BUFFERS].start); - capture->buffers[MAX_V4L_BUFFERS].start = 0; - } - } -#endif /* HAVE_CAMV4L2 */ - - if (capture->deviceHandle != -1) - close(capture->deviceHandle); - - if (capture->frame.imageData) cvFree(&capture->frame.imageData); - //cvFree((void **)capture); - } -}; - - -class CvCaptureCAM_V4L_CPP : CvCapture -{ -public: - CvCaptureCAM_V4L_CPP() { captureV4L = 0; } - virtual ~CvCaptureCAM_V4L_CPP() { close(); } - - virtual bool open( int index ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); -protected: - - CvCaptureCAM_V4L* captureV4L; -}; - -bool CvCaptureCAM_V4L_CPP::open( int index ) -{ - close(); - captureV4L = icvCaptureFromCAM_V4L(index); - return captureV4L != 0; -} - -void CvCaptureCAM_V4L_CPP::close() -{ - if( captureV4L ) - { - icvCloseCAM_V4L( captureV4L ); - cvFree( &captureV4L ); - } -} - -bool CvCaptureCAM_V4L_CPP::grabFrame() -{ - return captureV4L ? icvGrabFrameCAM_V4L( captureV4L ) != 0 : false; -} - -IplImage* CvCaptureCAM_V4L_CPP::retrieveFrame(int) -{ - return captureV4L ? icvRetrieveFrameCAM_V4L( captureV4L, 0 ) : 0; -} - -double CvCaptureCAM_V4L_CPP::getProperty( int propId ) -{ - return captureV4L ? icvGetPropertyCAM_V4L( captureV4L, propId ) : 0.0; -} - -bool CvCaptureCAM_V4L_CPP::setProperty( int propId, double value ) -{ - return captureV4L ? icvSetPropertyCAM_V4L( captureV4L, propId, value ) != 0 : false; -} - -CvCapture* cvCreateCameraCapture_V4L( int index ) -{ - CvCaptureCAM_V4L_CPP* capture = new CvCaptureCAM_V4L_CPP; - - if( capture->open( index )) - return (CvCapture*)capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/highgui/src/cap_vfw.cpp b/modules/highgui/src/cap_vfw.cpp deleted file mode 100644 index d845953..0000000 --- a/modules/highgui/src/cap_vfw.cpp +++ /dev/null @@ -1,723 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#include - -#ifdef __GNUC__ -#define WM_CAP_FIRSTA (WM_USER) -#define capSendMessage(hwnd,m,w,l) (IsWindow(hwnd)?SendMessage(hwnd,m,w,l):0) -#endif - -#if defined _M_X64 && defined _MSC_VER -#pragma optimize("",off) -#pragma warning(disable: 4748) -#endif - -/********************* Capturing video from AVI via VFW ************************/ - -static BITMAPINFOHEADER icvBitmapHeader( int width, int height, int bpp, int compression = BI_RGB ) -{ - BITMAPINFOHEADER bmih; - memset( &bmih, 0, sizeof(bmih)); - bmih.biSize = sizeof(bmih); - bmih.biWidth = width; - bmih.biHeight = height; - bmih.biBitCount = (WORD)bpp; - bmih.biCompression = compression; - bmih.biPlanes = 1; - - return bmih; -} - - -static void icvInitCapture_VFW() -{ - static int isInitialized = 0; - if( !isInitialized ) - { - AVIFileInit(); - isInitialized = 1; - } -} - - -class CvCaptureAVI_VFW : public CvCapture -{ -public: - CvCaptureAVI_VFW() - { - CoInitialize(NULL); - init(); - } - - virtual ~CvCaptureAVI_VFW() - { - close(); - CoUninitialize(); - } - - virtual bool open( const char* filename ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_VFW; } // Return the type of the capture object: CV_CAP_VFW, etc... - -protected: - void init(); - - PAVIFILE avifile; - PAVISTREAM avistream; - PGETFRAME getframe; - AVISTREAMINFO aviinfo; - BITMAPINFOHEADER * bmih; - CvSlice film_range; - double fps; - int pos; - IplImage* frame; - CvSize size; -}; - - -void CvCaptureAVI_VFW::init() -{ - avifile = 0; - avistream = 0; - getframe = 0; - memset( &aviinfo, 0, sizeof(aviinfo) ); - bmih = 0; - film_range = cvSlice(0,0); - fps = 0; - pos = 0; - frame = 0; - size = cvSize(0,0); -} - - -void CvCaptureAVI_VFW::close() -{ - if( getframe ) - AVIStreamGetFrameClose( getframe ); - - if( avistream ) - AVIStreamRelease( avistream ); - - if( avifile ) - AVIFileRelease( avifile ); - - if (frame) - cvReleaseImage( &frame ); - - init(); -} - - -bool CvCaptureAVI_VFW::open( const char* filename ) -{ - close(); - icvInitCapture_VFW(); - - if( !filename ) - return false; - - HRESULT hr = AVIFileOpen( &avifile, filename, OF_READ, NULL ); - if( SUCCEEDED(hr)) - { - hr = AVIFileGetStream( avifile, &avistream, streamtypeVIDEO, 0 ); - if( SUCCEEDED(hr)) - { - hr = AVIStreamInfo( avistream, &aviinfo, sizeof(aviinfo)); - if( SUCCEEDED(hr)) - { - size.width = aviinfo.rcFrame.right - aviinfo.rcFrame.left; - size.height = aviinfo.rcFrame.bottom - aviinfo.rcFrame.top; - BITMAPINFOHEADER bmihdr = icvBitmapHeader( size.width, size.height, 24 ); - - film_range.start_index = (int)aviinfo.dwStart; - film_range.end_index = film_range.start_index + (int)aviinfo.dwLength; - fps = (double)aviinfo.dwRate/aviinfo.dwScale; - pos = film_range.start_index; - getframe = AVIStreamGetFrameOpen( avistream, &bmihdr ); - if( getframe != 0 ) - return true; - - // Attempt to open as 8-bit AVI. - bmihdr = icvBitmapHeader( size.width, size.height, 8); - getframe = AVIStreamGetFrameOpen( avistream, &bmihdr ); - if( getframe != 0 ) - return true; - } - } - } - - close(); - return false; -} - -bool CvCaptureAVI_VFW::grabFrame() -{ - if( avistream ) - bmih = (BITMAPINFOHEADER*)AVIStreamGetFrame( getframe, pos++ ); - return bmih != 0; -} - -IplImage* CvCaptureAVI_VFW::retrieveFrame(int) -{ - if( avistream && bmih ) - { - bool isColor = bmih->biBitCount == 24; - int nChannels = (isColor) ? 3 : 1; - IplImage src; - cvInitImageHeader( &src, cvSize( bmih->biWidth, bmih->biHeight ), - IPL_DEPTH_8U, nChannels, IPL_ORIGIN_BL, 4 ); - - char* dataPtr = (char*)(bmih + 1); - - // Only account for the color map size if we are an 8-bit image and the color map is used - if (!isColor) - { - static int RGBQUAD_SIZE_PER_BYTE = sizeof(RGBQUAD)/sizeof(BYTE); - int offsetFromColormapToData = (int)bmih->biClrUsed*RGBQUAD_SIZE_PER_BYTE; - dataPtr += offsetFromColormapToData; - } - - cvSetData( &src, dataPtr, src.widthStep ); - - if( !frame || frame->width != src.width || frame->height != src.height ) - { - cvReleaseImage( &frame ); - frame = cvCreateImage( cvGetSize(&src), 8, nChannels ); - } - - cvFlip( &src, frame, 0 ); - return frame; - } - - return 0; -} - -double CvCaptureAVI_VFW::getProperty( int property_id ) -{ - switch( property_id ) - { - case CV_CAP_PROP_POS_MSEC: - return cvRound(pos*1000./fps); - case CV_CAP_PROP_POS_FRAMES: - return pos; - case CV_CAP_PROP_POS_AVI_RATIO: - return (pos - film_range.start_index)/ - (film_range.end_index - film_range.start_index + 1e-10); - case CV_CAP_PROP_FRAME_WIDTH: - return size.width; - case CV_CAP_PROP_FRAME_HEIGHT: - return size.height; - case CV_CAP_PROP_FPS: - return fps; - case CV_CAP_PROP_FOURCC: - return aviinfo.fccHandler; - case CV_CAP_PROP_FRAME_COUNT: - return film_range.end_index - film_range.start_index; - } - return 0; -} - -bool CvCaptureAVI_VFW::setProperty( int property_id, double value ) -{ - switch( property_id ) - { - case CV_CAP_PROP_POS_MSEC: - case CV_CAP_PROP_POS_FRAMES: - case CV_CAP_PROP_POS_AVI_RATIO: - { - switch( property_id ) - { - case CV_CAP_PROP_POS_MSEC: - pos = cvRound(value*fps*0.001); - break; - case CV_CAP_PROP_POS_AVI_RATIO: - pos = cvRound(value*(film_range.end_index - - film_range.start_index) + - film_range.start_index); - break; - default: - pos = cvRound(value); - } - if( pos < film_range.start_index ) - pos = film_range.start_index; - if( pos > film_range.end_index ) - pos = film_range.end_index; - } - break; - default: - return false; - } - - return true; -} - -CvCapture* cvCreateFileCapture_VFW (const char* filename) -{ - CvCaptureAVI_VFW* capture = new CvCaptureAVI_VFW; - if( capture->open(filename) ) - return capture; - delete capture; - return 0; -} - - -/********************* Capturing video from camera via VFW *********************/ - -class CvCaptureCAM_VFW : public CvCapture -{ -public: - CvCaptureCAM_VFW() { init(); } - virtual ~CvCaptureCAM_VFW() { close(); } - - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double) { return false; } - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_VFW; } // Return the type of the capture object: CV_CAP_VFW, etc... - -protected: - void init(); - void closeHIC(); - static LRESULT PASCAL frameCallback( HWND hWnd, VIDEOHDR* hdr ); - - CAPDRIVERCAPS caps; - HWND capWnd; - VIDEOHDR* hdr; - DWORD fourcc; - HIC hic; - IplImage* frame; -}; - - -void CvCaptureCAM_VFW::init() -{ - memset( &caps, 0, sizeof(caps) ); - capWnd = 0; - hdr = 0; - fourcc = 0; - hic = 0; - frame = 0; -} - -void CvCaptureCAM_VFW::closeHIC() -{ - if( hic ) - { - ICDecompressEnd( hic ); - ICClose( hic ); - hic = 0; - } -} - - -LRESULT PASCAL CvCaptureCAM_VFW::frameCallback( HWND hWnd, VIDEOHDR* hdr ) -{ - CvCaptureCAM_VFW* capture = 0; - - if (!hWnd) return FALSE; - - capture = (CvCaptureCAM_VFW*)capGetUserData(hWnd); - capture->hdr = hdr; - - return (LRESULT)TRUE; -} - - -// Initialize camera input -bool CvCaptureCAM_VFW::open( int wIndex ) -{ - char szDeviceName[80]; - char szDeviceVersion[80]; - HWND hWndC = 0; - - close(); - - if( (unsigned)wIndex >= 10 ) - wIndex = 0; - - for( ; wIndex < 10; wIndex++ ) - { - if( capGetDriverDescription( wIndex, szDeviceName, - sizeof (szDeviceName), szDeviceVersion, - sizeof (szDeviceVersion))) - { - hWndC = capCreateCaptureWindow ( "My Own Capture Window", - WS_POPUP | WS_CHILD, 0, 0, 320, 240, 0, 0); - if( capDriverConnect (hWndC, wIndex)) - break; - DestroyWindow( hWndC ); - hWndC = 0; - } - } - - if( hWndC ) - { - capWnd = hWndC; - hdr = 0; - hic = 0; - fourcc = (DWORD)-1; - - memset( &caps, 0, sizeof(caps)); - capDriverGetCaps( hWndC, &caps, sizeof(caps)); - ::MoveWindow( hWndC, 0, 0, 320, 240, TRUE ); - capSetUserData( hWndC, (size_t)this ); - capSetCallbackOnFrame( hWndC, frameCallback ); - CAPTUREPARMS p; - capCaptureGetSetup(hWndC,&p,sizeof(CAPTUREPARMS)); - p.dwRequestMicroSecPerFrame = 66667/2; - capCaptureSetSetup(hWndC,&p,sizeof(CAPTUREPARMS)); - //capPreview( hWndC, 1 ); - capPreviewScale(hWndC,FALSE); - capPreviewRate(hWndC,1); - } - return capWnd != 0; -} - - -void CvCaptureCAM_VFW::close() -{ - if( capWnd ) - { - capSetCallbackOnFrame( capWnd, NULL ); - capDriverDisconnect( capWnd ); - DestroyWindow( capWnd ); - closeHIC(); - } - cvReleaseImage( &frame ); - init(); -} - - -bool CvCaptureCAM_VFW::grabFrame() -{ - if( capWnd ) - { - SendMessage( capWnd, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0 ); - return true; - } - return false; -} - - -IplImage* CvCaptureCAM_VFW::retrieveFrame(int) -{ - BITMAPINFO vfmt; - memset( &vfmt, 0, sizeof(vfmt)); - BITMAPINFOHEADER& vfmt0 = vfmt.bmiHeader; - int sz, prevWidth, prevHeight; - - if( !capWnd ) - return 0; - - sz = capGetVideoFormat( capWnd, &vfmt, sizeof(vfmt)); - prevWidth = frame ? frame->width : 0; - prevHeight = frame ? frame->height : 0; - - if( !hdr || hdr->lpData == 0 || sz == 0 ) - return 0; - - if( !frame || frame->width != vfmt0.biWidth || frame->height != vfmt0.biHeight ) - { - cvReleaseImage( &frame ); - frame = cvCreateImage( cvSize( vfmt0.biWidth, vfmt0.biHeight ), 8, 3 ); - } - - if( vfmt.bmiHeader.biCompression != BI_RGB || - vfmt.bmiHeader.biBitCount != 24 ) - { - BITMAPINFOHEADER vfmt1 = icvBitmapHeader( vfmt0.biWidth, vfmt0.biHeight, 24 ); - - if( hic == 0 || fourcc != vfmt0.biCompression || - prevWidth != vfmt0.biWidth || prevHeight != vfmt0.biHeight ) - { - closeHIC(); - hic = ICOpen( MAKEFOURCC('V','I','D','C'), - vfmt0.biCompression, ICMODE_DECOMPRESS ); - if( hic ) - { - if( ICDecompressBegin( hic, &vfmt0, &vfmt1 ) != ICERR_OK ) - { - closeHIC(); - return 0; - } - } - } - - if( !hic || ICDecompress( hic, 0, &vfmt0, hdr->lpData, - &vfmt1, frame->imageData ) != ICERR_OK ) - { - closeHIC(); - return 0; - } - - cvFlip( frame, frame, 0 ); - } - else - { - IplImage src; - cvInitImageHeader( &src, cvSize(vfmt0.biWidth, vfmt0.biHeight), - IPL_DEPTH_8U, 3, IPL_ORIGIN_BL, 4 ); - cvSetData( &src, hdr->lpData, src.widthStep ); - cvFlip( &src, frame, 0 ); - } - - return frame; -} - - -double CvCaptureCAM_VFW::getProperty( int property_id ) -{ - switch( property_id ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return frame ? frame->width : 0; - case CV_CAP_PROP_FRAME_HEIGHT: - return frame ? frame->height : 0; - case CV_CAP_PROP_FOURCC: - return fourcc; - } - return 0; -} - - -CvCapture* cvCreateCameraCapture_VFW( int index ) -{ - CvCaptureCAM_VFW* capture = new CvCaptureCAM_VFW; - - if( capture->open( index )) - return capture; - - delete capture; - return 0; -} - - -/*************************** writing AVIs ******************************/ - -class CvVideoWriter_VFW : public CvVideoWriter -{ -public: - CvVideoWriter_VFW() { init(); } - virtual ~CvVideoWriter_VFW() { close(); } - - virtual bool open( const char* filename, int fourcc, - double fps, CvSize frameSize, bool isColor ); - virtual void close(); - virtual bool writeFrame( const IplImage* ); - -protected: - void init(); - bool createStreams( CvSize frameSize, bool isColor ); - - PAVIFILE avifile; - PAVISTREAM compressed; - PAVISTREAM uncompressed; - double fps; - IplImage* tempFrame; - long pos; - int fourcc; -}; - - -void CvVideoWriter_VFW::init() -{ - avifile = 0; - compressed = uncompressed = 0; - fps = 0; - tempFrame = 0; - pos = 0; - fourcc = 0; -} - -void CvVideoWriter_VFW::close() -{ - if( uncompressed ) - AVIStreamRelease( uncompressed ); - if( compressed ) - AVIStreamRelease( compressed ); - if( avifile ) - AVIFileRelease( avifile ); - cvReleaseImage( &tempFrame ); - init(); -} - - -// philipg. Made this code capable of writing 8bpp gray scale bitmaps -struct BITMAPINFO_8Bit -{ - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[256]; -}; - - -bool CvVideoWriter_VFW::open( const char* filename, int _fourcc, double _fps, CvSize frameSize, bool isColor ) -{ - close(); - - icvInitCapture_VFW(); - if( AVIFileOpen( &avifile, filename, OF_CREATE | OF_WRITE, 0 ) == AVIERR_OK ) - { - fourcc = _fourcc; - fps = _fps; - if( frameSize.width > 0 && frameSize.height > 0 && - !createStreams( frameSize, isColor ) ) - { - close(); - return false; - } - return true; - } - else - return false; -} - - -bool CvVideoWriter_VFW::createStreams( CvSize frameSize, bool isColor ) -{ - if( !avifile ) - return false; - AVISTREAMINFO aviinfo; - - BITMAPINFO_8Bit bmih; - bmih.bmiHeader = icvBitmapHeader( frameSize.width, frameSize.height, isColor ? 24 : 8 ); - for( int i = 0; i < 256; i++ ) - { - bmih.bmiColors[i].rgbBlue = (BYTE)i; - bmih.bmiColors[i].rgbGreen = (BYTE)i; - bmih.bmiColors[i].rgbRed = (BYTE)i; - bmih.bmiColors[i].rgbReserved = 0; - } - - memset( &aviinfo, 0, sizeof(aviinfo)); - aviinfo.fccType = streamtypeVIDEO; - aviinfo.fccHandler = 0; - // use highest possible accuracy for dwRate/dwScale - aviinfo.dwScale = (DWORD)((double)0x7FFFFFFF / fps); - aviinfo.dwRate = cvRound(fps * aviinfo.dwScale); - aviinfo.rcFrame.top = aviinfo.rcFrame.left = 0; - aviinfo.rcFrame.right = frameSize.width; - aviinfo.rcFrame.bottom = frameSize.height; - - if( AVIFileCreateStream( avifile, &uncompressed, &aviinfo ) == AVIERR_OK ) - { - AVICOMPRESSOPTIONS copts, *pcopts = &copts; - copts.fccType = streamtypeVIDEO; - copts.fccHandler = fourcc != -1 ? fourcc : 0; - copts.dwKeyFrameEvery = 1; - copts.dwQuality = 10000; - copts.dwBytesPerSecond = 0; - copts.dwFlags = AVICOMPRESSF_VALID; - copts.lpFormat = &bmih; - copts.cbFormat = (isColor ? sizeof(BITMAPINFOHEADER) : sizeof(bmih)); - copts.lpParms = 0; - copts.cbParms = 0; - copts.dwInterleaveEvery = 0; - - if( fourcc != -1 || AVISaveOptions( 0, 0, 1, &uncompressed, &pcopts ) == TRUE ) - { - if( AVIMakeCompressedStream( &compressed, uncompressed, pcopts, 0 ) == AVIERR_OK && - AVIStreamSetFormat( compressed, 0, &bmih, sizeof(bmih)) == AVIERR_OK ) - { - fps = fps; - fourcc = (int)copts.fccHandler; - frameSize = frameSize; - tempFrame = cvCreateImage( frameSize, 8, (isColor ? 3 : 1) ); - return true; - } - } - } - return false; -} - - -bool CvVideoWriter_VFW::writeFrame( const IplImage* image ) -{ - bool result = false; - CV_FUNCNAME( "CvVideoWriter_VFW::writeFrame" ); - - __BEGIN__; - - if( !image ) - EXIT; - - if( !compressed && !createStreams( cvGetSize(image), image->nChannels > 1 )) - EXIT; - - if( image->width != tempFrame->width || image->height != tempFrame->height ) - CV_ERROR( CV_StsUnmatchedSizes, - "image size is different from the currently set frame size" ); - - if( image->nChannels != tempFrame->nChannels || - image->depth != tempFrame->depth || - image->origin == 0 || - image->widthStep != cvAlign(image->width*image->nChannels*((image->depth & 255)/8), 4)) - { - cvConvertImage( image, tempFrame, image->origin == 0 ? CV_CVTIMG_FLIP : 0 ); - image = (const IplImage*)tempFrame; - } - - result = AVIStreamWrite( compressed, pos++, 1, image->imageData, - image->imageSize, AVIIF_KEYFRAME, 0, 0 ) == AVIERR_OK; - - __END__; - - return result; -} - -CvVideoWriter* cvCreateVideoWriter_VFW( const char* filename, int fourcc, - double fps, CvSize frameSize, int isColor ) -{ - CvVideoWriter_VFW* writer = new CvVideoWriter_VFW; - if( writer->open( filename, fourcc, fps, frameSize, isColor != 0 )) - return writer; - delete writer; - return 0; -} diff --git a/modules/highgui/src/cap_ximea.cpp b/modules/highgui/src/cap_ximea.cpp deleted file mode 100644 index 891b961..0000000 --- a/modules/highgui/src/cap_ximea.cpp +++ /dev/null @@ -1,352 +0,0 @@ -#include "precomp.hpp" - -#include "xiApi.h" -#include "xiExt.h" -#include "m3Api.h" - -/**********************************************************************************/ - -class CvCaptureCAM_XIMEA : public CvCapture -{ -public: - CvCaptureCAM_XIMEA() { init(); } - virtual ~CvCaptureCAM_XIMEA() { close(); } - - virtual bool open( int index ); - virtual void close(); - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual int getCaptureDomain() { return CV_CAP_XIAPI; } // Return the type of the capture object: CV_CAP_VFW, etc... - -private: - void init(); - void errMsg(const char* msg, int errNum); - void resetCvImage(); - int getBpp(); - IplImage* frame; - - HANDLE hmv; - DWORD numDevices; - int timeout; - XI_IMG image; -}; - -/**********************************************************************************/ - -CvCapture* cvCreateCameraCapture_XIMEA( int index ) -{ - CvCaptureCAM_XIMEA* capture = new CvCaptureCAM_XIMEA; - - if( capture->open( index )) - return capture; - - delete capture; - return 0; -} - -/**********************************************************************************/ -// Enumerate connected devices -void CvCaptureCAM_XIMEA::init() -{ - xiGetNumberDevices( &numDevices); - hmv = NULL; - frame = NULL; - timeout = 0; - memset(&image, 0, sizeof(XI_IMG)); -} - - -/**********************************************************************************/ -// Initialize camera input -bool CvCaptureCAM_XIMEA::open( int wIndex ) -{ -#define HandleXiResult(res) if (res!=XI_OK) goto error; - - int mvret = XI_OK; - - if(numDevices == 0) - return false; - - if((mvret = xiOpenDevice( wIndex, &hmv)) != XI_OK) - { - errMsg("Open XI_DEVICE failed", mvret); - return false; - } - - int width = 0; - int height = 0; - int isColor = 0; - - // always use auto exposure/gain - mvret = xiSetParamInt( hmv, XI_PRM_AEAG, 1); - HandleXiResult(mvret); - - mvret = xiGetParamInt( hmv, XI_PRM_WIDTH, &width); - HandleXiResult(mvret); - - mvret = xiGetParamInt( hmv, XI_PRM_HEIGHT, &height); - HandleXiResult(mvret); - - mvret = xiGetParamInt(hmv, XI_PRM_IMAGE_IS_COLOR, &isColor); - HandleXiResult(mvret); - - if(isColor) // for color cameras - { - // default image format RGB24 - mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, XI_RGB24); - HandleXiResult(mvret); - - // always use auto white balance for color cameras - mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, 1); - HandleXiResult(mvret); - - // allocate frame buffer for RGB24 image - frame = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); - } - else // for mono cameras - { - // default image format MONO8 - mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, XI_MONO8); - HandleXiResult(mvret); - - // allocate frame buffer for MONO8 image - frame = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1); - } - - //default capture timeout 10s - timeout = 10000; - - mvret = xiStartAcquisition(hmv); - if(mvret != XI_OK) - { - errMsg("StartAcquisition XI_DEVICE failed", mvret); - goto error; - } - return true; - -error: - errMsg("Open XI_DEVICE failed", mvret); - xiCloseDevice(hmv); - hmv = NULL; - return false; -} - -/**********************************************************************************/ - -void CvCaptureCAM_XIMEA::close() -{ - if(frame) - cvReleaseImage(&frame); - - if(hmv) - { - xiStopAcquisition(hmv); - xiCloseDevice(hmv); - } - hmv = NULL; -} - -/**********************************************************************************/ - -bool CvCaptureCAM_XIMEA::grabFrame() -{ - memset(&image, 0, sizeof(XI_IMG)); - image.size = sizeof(XI_IMG); - int mvret = xiGetImage( hmv, timeout, &image); - - if(mvret == MM40_ACQUISITION_STOPED) - { - xiStartAcquisition(hmv); - mvret = xiGetImage(hmv, timeout, &image); - } - - if(mvret != XI_OK) - { - errMsg("Error during GetImage", mvret); - return false; - } - - return true; -} - -/**********************************************************************************/ - -IplImage* CvCaptureCAM_XIMEA::retrieveFrame(int) -{ - // update cvImage after format has changed - resetCvImage(); - - // copy pixel data - switch( image.frm) - { - case XI_MONO8 : - case XI_RAW8 : memcpy( frame->imageData, image.bp, image.width*image.height); break; - case XI_MONO16 : - case XI_RAW16 : memcpy( frame->imageData, image.bp, image.width*image.height*sizeof(WORD)); break; - case XI_RGB24 : - case XI_RGB_PLANAR : memcpy( frame->imageData, image.bp, image.width*image.height*3); break; - case XI_RGB32 : memcpy( frame->imageData, image.bp, image.width*image.height*4); break; - default: break; - } - return frame; -} - -/**********************************************************************************/ - -void CvCaptureCAM_XIMEA::resetCvImage() -{ - int width = 0, height = 0, format = 0; - xiGetParamInt( hmv, XI_PRM_WIDTH, &width); - xiGetParamInt( hmv, XI_PRM_HEIGHT, &height); - xiGetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, &format); - - if( (int)image.width != width || (int)image.height != height || image.frm != (XI_IMG_FORMAT)format) - { - if(frame) cvReleaseImage(&frame); - frame = NULL; - - switch( image.frm) - { - case XI_MONO8 : - case XI_RAW8 : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 1); break; - case XI_MONO16 : - case XI_RAW16 : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_16U, 1); break; - case XI_RGB24 : - case XI_RGB_PLANAR : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 3); break; - case XI_RGB32 : frame = cvCreateImage(cvSize( image.width, image.height), IPL_DEPTH_8U, 4); break; - default : - return; - } - } - cvZero(frame); -} -/**********************************************************************************/ - -double CvCaptureCAM_XIMEA::getProperty( int property_id ) -{ - if(hmv == NULL) - return 0; - - int ival = 0; - float fval = 0; - - switch( property_id ) - { - // OCV parameters - case CV_CAP_PROP_POS_FRAMES : return (double) image.nframe; - case CV_CAP_PROP_FRAME_WIDTH : xiGetParamInt( hmv, XI_PRM_WIDTH, &ival); return ival; - case CV_CAP_PROP_FRAME_HEIGHT : xiGetParamInt( hmv, XI_PRM_HEIGHT, &ival); return ival; - case CV_CAP_PROP_FPS : xiGetParamFloat( hmv, XI_PRM_FRAMERATE, &fval); return fval; - case CV_CAP_PROP_GAIN : xiGetParamFloat( hmv, XI_PRM_GAIN, &fval); return fval; - case CV_CAP_PROP_EXPOSURE : xiGetParamInt( hmv, XI_PRM_EXPOSURE, &ival); return ival; - - // XIMEA camera properties - case CV_CAP_PROP_XI_DOWNSAMPLING : xiGetParamInt( hmv, XI_PRM_DOWNSAMPLING, &ival); return ival; - case CV_CAP_PROP_XI_DATA_FORMAT : xiGetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, &ival); return ival; - case CV_CAP_PROP_XI_OFFSET_X : xiGetParamInt( hmv, XI_PRM_OFFSET_X, &ival); return ival; - case CV_CAP_PROP_XI_OFFSET_Y : xiGetParamInt( hmv, XI_PRM_OFFSET_Y, &ival); return ival; - case CV_CAP_PROP_XI_TRG_SOURCE : xiGetParamInt( hmv, XI_PRM_TRG_SOURCE, &ival); return ival; - case CV_CAP_PROP_XI_GPI_SELECTOR : xiGetParamInt( hmv, XI_PRM_GPI_SELECTOR, &ival); return ival; - case CV_CAP_PROP_XI_GPI_MODE : xiGetParamInt( hmv, XI_PRM_GPI_MODE, &ival); return ival; - case CV_CAP_PROP_XI_GPI_LEVEL : xiGetParamInt( hmv, XI_PRM_GPI_LEVEL, &ival); return ival; - case CV_CAP_PROP_XI_GPO_SELECTOR : xiGetParamInt( hmv, XI_PRM_GPO_SELECTOR, &ival); return ival; - case CV_CAP_PROP_XI_GPO_MODE : xiGetParamInt( hmv, XI_PRM_GPO_MODE, &ival); return ival; - case CV_CAP_PROP_XI_LED_SELECTOR : xiGetParamInt( hmv, XI_PRM_LED_SELECTOR, &ival); return ival; - case CV_CAP_PROP_XI_LED_MODE : xiGetParamInt( hmv, XI_PRM_LED_MODE, &ival); return ival; - case CV_CAP_PROP_XI_AUTO_WB : xiGetParamInt( hmv, XI_PRM_AUTO_WB, &ival); return ival; - case CV_CAP_PROP_XI_AEAG : xiGetParamInt( hmv, XI_PRM_AEAG, &ival); return ival; - case CV_CAP_PROP_XI_EXP_PRIORITY : xiGetParamFloat( hmv, XI_PRM_EXP_PRIORITY, &fval); return fval; - case CV_CAP_PROP_XI_AE_MAX_LIMIT : xiGetParamInt( hmv, XI_PRM_EXP_PRIORITY, &ival); return ival; - case CV_CAP_PROP_XI_AG_MAX_LIMIT : xiGetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, &fval); return fval; - case CV_CAP_PROP_XI_AEAG_LEVEL : xiGetParamInt( hmv, XI_PRM_AEAG_LEVEL, &ival); return ival; - case CV_CAP_PROP_XI_TIMEOUT : return timeout; - - } - return 0; -} - -/**********************************************************************************/ - -bool CvCaptureCAM_XIMEA::setProperty( int property_id, double value ) -{ - int ival = (int) value; - float fval = (float) value; - - int mvret = XI_OK; - - switch(property_id) - { - // OCV parameters - case CV_CAP_PROP_FRAME_WIDTH : mvret = xiSetParamInt( hmv, XI_PRM_WIDTH, ival); break; - case CV_CAP_PROP_FRAME_HEIGHT : mvret = xiSetParamInt( hmv, XI_PRM_HEIGHT, ival); break; - case CV_CAP_PROP_FPS : mvret = xiSetParamFloat( hmv, XI_PRM_FRAMERATE, fval); break; - case CV_CAP_PROP_GAIN : mvret = xiSetParamFloat( hmv, XI_PRM_GAIN, fval); break; - case CV_CAP_PROP_EXPOSURE : mvret = xiSetParamInt( hmv, XI_PRM_EXPOSURE, ival); break; - // XIMEA camera properties - case CV_CAP_PROP_XI_DOWNSAMPLING : mvret = xiSetParamInt( hmv, XI_PRM_DOWNSAMPLING, ival); break; - case CV_CAP_PROP_XI_DATA_FORMAT : mvret = xiSetParamInt( hmv, XI_PRM_IMAGE_DATA_FORMAT, ival); break; - case CV_CAP_PROP_XI_OFFSET_X : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_X, ival); break; - case CV_CAP_PROP_XI_OFFSET_Y : mvret = xiSetParamInt( hmv, XI_PRM_OFFSET_Y, ival); break; - case CV_CAP_PROP_XI_TRG_SOURCE : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, ival); break; - case CV_CAP_PROP_XI_GPI_SELECTOR : mvret = xiSetParamInt( hmv, XI_PRM_GPI_SELECTOR, ival); break; - case CV_CAP_PROP_XI_TRG_SOFTWARE : mvret = xiSetParamInt( hmv, XI_PRM_TRG_SOURCE, 1); break; - case CV_CAP_PROP_XI_GPI_MODE : mvret = xiSetParamInt( hmv, XI_PRM_GPI_MODE, ival); break; - case CV_CAP_PROP_XI_GPI_LEVEL : mvret = xiSetParamInt( hmv, XI_PRM_GPI_LEVEL, ival); break; - case CV_CAP_PROP_XI_GPO_SELECTOR : mvret = xiSetParamInt( hmv, XI_PRM_GPO_SELECTOR, ival); break; - case CV_CAP_PROP_XI_GPO_MODE : mvret = xiSetParamInt( hmv, XI_PRM_GPO_MODE, ival); break; - case CV_CAP_PROP_XI_LED_SELECTOR : mvret = xiSetParamInt( hmv, XI_PRM_LED_SELECTOR, ival); break; - case CV_CAP_PROP_XI_LED_MODE : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break; - case CV_CAP_PROP_XI_AUTO_WB : mvret = xiSetParamInt( hmv, XI_PRM_AUTO_WB, ival); break; - case CV_CAP_PROP_XI_MANUAL_WB : mvret = xiSetParamInt( hmv, XI_PRM_LED_MODE, ival); break; - case CV_CAP_PROP_XI_AEAG : mvret = xiSetParamInt( hmv, XI_PRM_AEAG, ival); break; - case CV_CAP_PROP_XI_EXP_PRIORITY : mvret = xiSetParamFloat( hmv, XI_PRM_EXP_PRIORITY, fval); break; - case CV_CAP_PROP_XI_AE_MAX_LIMIT : mvret = xiSetParamInt( hmv, XI_PRM_EXP_PRIORITY, ival); break; - case CV_CAP_PROP_XI_AG_MAX_LIMIT : mvret = xiSetParamFloat( hmv, XI_PRM_AG_MAX_LIMIT, fval); break; - case CV_CAP_PROP_XI_AEAG_LEVEL : mvret = xiSetParamInt( hmv, XI_PRM_AEAG_LEVEL, ival); break; - case CV_CAP_PROP_XI_TIMEOUT : timeout = ival; break; - } - - if(mvret != XI_OK) - { - errMsg("Set parameter error", mvret); - return false; - } - else - return true; - -} - -/**********************************************************************************/ - -void CvCaptureCAM_XIMEA::errMsg(const char* msg, int errNum) -{ -#if defined WIN32 || defined _WIN32 - char buf[512]=""; - sprintf( buf, "%s : %d\n", msg, errNum); - OutputDebugString(buf); -#else - fprintf(stderr, "%s : %d\n", msg, errNum); -#endif -} - -/**********************************************************************************/ - -int CvCaptureCAM_XIMEA::getBpp() -{ - switch( image.frm) - { - case XI_MONO8 : - case XI_RAW8 : return 1; - case XI_MONO16 : - case XI_RAW16 : return 2; - case XI_RGB24 : - case XI_RGB_PLANAR : return 3; - case XI_RGB32 : return 4; - default : - return 0; - } -} - -/**********************************************************************************/ diff --git a/modules/highgui/src/cap_xine.cpp b/modules/highgui/src/cap_xine.cpp deleted file mode 100644 index 26ee4d0..0000000 --- a/modules/highgui/src/cap_xine.cpp +++ /dev/null @@ -1,846 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// Authors: Konstantin Dols -// Mark Asbach -// -// Institute of Communications Engineering -// RWTH Aachen University - - -#include "precomp.hpp" - -// required to enable some functions used here... -#define XINE_ENABLE_EXPERIMENTAL_FEATURES - -#include - -extern "C" -{ -#include - //#include - - // forward declaration from - const char *xine_get_homedir( void ); -} - -typedef struct CvCaptureAVI_XINE -{ - /// method call table - xine_t * xine; - xine_stream_t * stream; - xine_video_port_t * vo_port; - - /// frame returned by xine_get_next_video_frame() - xine_video_frame_t xine_frame; - - IplImage * yuv_frame; - IplImage * bgr_frame; - - /// image dimansions of the input stream. - CvSize size; - - /// framenumber of the last frame received from xine_get_next_video_frame(). - /// note: always keep this value updated !!!! - int frame_number; - - /// framerate of the opened stream - double frame_rate; - - /// duration of a frame in stream - double frame_duration; - - /// indicated if input is seekable - bool seekable; - -} -CvCaptureAVI_XINE; - - -// 4:2:2 interleaved -> BGR -static void icvYUY2toBGR( CvCaptureAVI_XINE * capture ) -{ - uint8_t * v = capture->xine_frame.data; - int offset; - for ( int y = 0; y < capture->yuv_frame->height; y++ ) - { - offset = y * capture->yuv_frame->widthStep; - - for ( int x = 0; x < capture->yuv_frame->width; x++, offset += 3 ) - { - capture->yuv_frame->imageData[ offset + 1 ] = v[ 3 ]; - capture->yuv_frame->imageData[ offset + 2 ] = v[ 1 ]; - if ( x & 1 ) - { - capture->yuv_frame->imageData[ offset ] = v[ 2 ]; - v += 4; - } - else - { - capture->yuv_frame->imageData[ offset ] = v[ 0 ]; - } - } - } - - // convert to BGR - cvCvtColor( capture->yuv_frame, capture->bgr_frame, CV_YCrCb2BGR ); -} - - -// 4:2:0 planary -> BGR -static void icvYV12toBGR( CvCaptureAVI_XINE * capture ) -{ - IplImage * yuv = capture->yuv_frame; - int w_Y = capture->size.width; - int h_Y = capture->size.height; - - int w_UV = w_Y >> 1; - - int size_Y = w_Y * h_Y; - int size_UV = size_Y / 4; - - int line = yuv->widthStep; - - uint8_t * addr_Y = capture->xine_frame.data; - uint8_t * addr_U = addr_Y + size_Y; - uint8_t * addr_V = addr_U + size_UV; - - // YYYY..UU.VV. -> BGRBGRBGR... - for ( int y = 0; y < h_Y; y++ ) - { - int offset = y * line; - for ( int x = 0; x < w_Y; x++, offset += 3 ) - { - /* - if ( x&1 ) - { - addr_U++; addr_V++; - } - */ - int one_zero = x & 1; - addr_U += one_zero; - addr_V += one_zero; - - yuv->imageData[ offset ] = *( addr_Y++ ); - yuv->imageData[ offset + 1 ] = *addr_U; - yuv->imageData[ offset + 2 ] = *addr_V; - } - - if ( y & 1 ) - { - addr_U -= w_UV; - addr_V -= w_UV; - } - } - - /* convert to BGR */ - cvCvtColor( capture->yuv_frame, capture->bgr_frame, CV_YCrCb2BGR ); -} - -static void icvCloseAVI_XINE( CvCaptureAVI_XINE* capture ) -{ - xine_free_video_frame( capture->vo_port, &capture->xine_frame ); - - if ( capture->yuv_frame ) cvReleaseImage( &capture->yuv_frame ); - if ( capture->bgr_frame ) cvReleaseImage( &capture->bgr_frame ); - - xine_close( capture->stream ); - // xine_dispose( capture->stream ); - - if ( capture->vo_port ) xine_close_video_driver( capture->xine, capture->vo_port ); - - xine_exit( capture->xine ); -} - - -/** - * CHECKS IF THE STREAM IN * capture IS SEEKABLE. -**/ -static void icvCheckSeekAVI_XINE( CvCaptureAVI_XINE * capture ) -{ - OPENCV_ASSERT ( capture, "icvCheckSeekAVI_XINE( CvCaptureAVI_XINE* )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvCheckSeekAVI_XINE( CvCaptureAVI_XINE* )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvCheckSeekAVI_XINE( CvCaptureAVI_XINE* )", "illegal capture->vo_port"); - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvCheckSeekAVI_XINE ... start\n" ); -#endif - - // temp. frame for testing. - xine_video_frame_t tmp; - // try to seek to a future frame... - xine_play( capture->stream, 0, 300 ); /* 300msec */ - // try to receive the frame... - xine_get_next_video_frame( capture->vo_port, &tmp ); - // if the framenumber is still 0, we can't use the xine seek functionality - capture->seekable = ( tmp.frame_number != 0 ); - // reset stream - xine_play( capture->stream, 0, 0 ); - // release xine_frame - xine_free_video_frame( capture->vo_port, &tmp ); - -#ifndef NDEBUG - if ( capture->seekable ) - fprintf( stderr, "(DEBUG) icvCheckSeekAVI_XINE: Input is seekable, using XINE seek implementation.\n" ); - else - fprintf( stderr, "(DEBUG) icvCheckSeekAVI_XINE: Input is NOT seekable, using fallback function.\n" ); - - fprintf( stderr, "(DEBUG) icvCheckSeekAVI_XINE ... end\n" ); -#endif -} - - -static int icvOpenAVI_XINE( CvCaptureAVI_XINE* capture, const char* filename ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOpenAVI_XINE ... start\n" ); -#endif - - char configfile[ 2048 ]; - - capture->xine = xine_new(); - sprintf( configfile, "%s%s", xine_get_homedir(), "/.xine/config" ); - - xine_config_load( capture->xine, configfile ); - xine_init( capture->xine ); - - xine_engine_set_param( capture->xine, 0, 0 ); - capture->vo_port = xine_new_framegrab_video_port( capture->xine ); - if ( capture->vo_port == NULL ) - { - printf( "(ERROR)icvOpenAVI_XINE(): Unable to initialize video driver.\n" ); - return 0; - } - - capture->stream = xine_stream_new( capture->xine, NULL, capture->vo_port ); - - if ( !xine_open( capture->stream, filename ) ) - { - printf( "(ERROR)icvOpenAVI_XINE(): Unable to open source '%s'\n", filename ); - return 0; - } - // reset stream... - xine_play( capture->stream, 0, 0 ); - - - // initialize some internals... - capture->frame_number = 0; - - if ( !xine_get_next_video_frame( capture->vo_port, &capture->xine_frame ) ) - { -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOpenAVI_XINE ... failed!\n" ); -#endif - return 0; - } - - capture->size = cvSize( capture->xine_frame.width, capture->xine_frame.height ); - capture->yuv_frame = cvCreateImage( capture->size, IPL_DEPTH_8U, 3 ); - capture->bgr_frame = cvCreateImage( capture->size, IPL_DEPTH_8U, 3 ); - - xine_free_video_frame( capture->vo_port, &capture->xine_frame ); - capture->xine_frame.data[ 0 ] = 0; - - icvCheckSeekAVI_XINE( capture ); - - capture->frame_duration = xine_get_stream_info( capture->stream, XINE_STREAM_INFO_FRAME_DURATION ) / 90.; - capture->frame_rate = 1000 / capture->frame_duration; - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) frame_duration = %f, framerate = %f\n", capture->frame_duration, capture->frame_rate ); -#endif - - OPENCV_ASSERT ( capture->yuv_frame, - "icvOpenAVI_XINE( CvCaptureAVI_XINE *, const char *)", "couldn't create yuv frame"); - - OPENCV_ASSERT ( capture->bgr_frame, - "icvOpenAVI_XINE( CvCaptureAVI_XINE *, const char *)", "couldn't create bgr frame"); - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOpenAVI_XINE ... end\n" ); -#endif - return 1; -} - - -static int icvGrabFrameAVI_XINE( CvCaptureAVI_XINE* capture ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvGrabFrameAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvGrabFrameAVI_XINE( CvCaptureAVI_XINE * )", "illegal capture"); - OPENCV_ASSERT ( capture->vo_port, - "icvGrabFrameAVI_XINE( CvCaptureAVI_XINE * )", "illegal capture->vo_port"); - - int res = xine_get_next_video_frame( capture->vo_port, &capture->xine_frame ); - - /* always keep internal framenumber updated !!! */ - if ( res ) capture->frame_number++; - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvGrabFrameAVI_XINE ... end\n" ); -#endif - return res; -} - - -static const IplImage* icvRetrieveFrameAVI_XINE( CvCaptureAVI_XINE* capture, int ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvRetrieveFrameAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvRetrieveFrameAVI_XINE( CvCaptureAVI_XINE * )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvRetrieveFrameAVI_XINE( CvCaptureAVI_XINE * )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvRetrieveFrameAVI_XINE( CvCaptureAVI_XINE * )", "illegal capture->vo_port"); - - /* no frame grabbed yet? so let's do it now! */ - int res = 0; - if ( capture->xine_frame.data == 0 ) - { - res = icvGrabFrameAVI_XINE( capture ); - } - else - { - res = 1; - } - - if ( res ) - { - switch ( capture->xine_frame.colorspace ) - { - case XINE_IMGFMT_YV12: icvYV12toBGR( capture ); -#ifndef NDEBUG - printf( "(DEBUG)icvRetrieveFrameAVI_XINE: converted YV12 to BGR.\n" ); -#endif - break; - - case XINE_IMGFMT_YUY2: icvYUY2toBGR( capture ); -#ifndef NDEBUG - printf( "(DEBUG)icvRetrieveFrameAVI_XINE: converted YUY2 to BGR.\n" ); -#endif - break; - case XINE_IMGFMT_XVMC: printf( "(ERROR)icvRetrieveFrameAVI_XINE: XVMC format not supported!\n" ); - break; - - case XINE_IMGFMT_XXMC: printf( "(ERROR)icvRetrieveFrameAVI_XINE: XXMC format not supported!\n" ); - break; - - default: printf( "(ERROR)icvRetrieveFrameAVI_XINE: unknown color/pixel format!\n" ); - } - - /* always release last xine_frame, not needed anymore, but store its frame_number in *capture ! */ - xine_free_video_frame( capture->vo_port, &capture->xine_frame ); - capture->xine_frame.data = 0; - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvRetrieveFrameAVI_XINE ... end\n" ); -#endif - return capture->bgr_frame; - } - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvRetrieveFrameAVI_XINE ... failed!\n" ); -#endif - return 0; -} - - -/** - * THIS FUNCTION IS A FALLBACK FUNCTION FOR THE CASE THAT THE XINE SEEK IMPLEMENTATION - * DOESN'T WORK WITH THE ACTUAL INPUT. THIS FUNCTION IS ONLY USED IN THE CASE OF AN EMERGENCY, - * BECAUSE IT IS VERY SLOW ! -**/ -static int icvOldSeekFrameAVI_XINE( CvCaptureAVI_XINE* capture, int f ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOldSeekFrameAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvRetricvOldSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvOldSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvOldSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->vo_port"); - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream ) return 0; - - // no need to seek if we are already there... - if ( f == capture->frame_number ) - { -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOldSeekFrameAVI_XINE ... end\n" ); -#endif - return 1; - } - // if the requested position is behind out actual position, - // we just need to read the remaining amount of frames until we are there. - else if ( f > capture->frame_number ) - { - for ( ;capture->frame_number < f;capture->frame_number++ ) - /// un-increment framenumber grabbing failed - if ( !xine_get_next_video_frame( capture->vo_port, &capture->xine_frame ) ) - { - capture->frame_number--; - break; - } - else - { - xine_free_video_frame( capture->vo_port, &capture->xine_frame ); - } - } - // otherwise we need to reset the stream and - // start reading frames from the beginning. - else // f < capture->frame_number - { - /// reset stream, should also work with non-seekable input - xine_play( capture->stream, 0, 0 ); - /// read frames until we are at the requested frame - for ( capture->frame_number = 0; capture->frame_number < f; capture->frame_number++ ) - /// un-increment last framenumber if grabbing failed - if ( !xine_get_next_video_frame( capture->vo_port, &capture->xine_frame ) ) - { - capture->frame_number--; - break; - } - else - { - xine_free_video_frame( capture->vo_port, &capture->xine_frame ); - } - } - - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvOldSeekFrameAVI_XINE ... end\n" ); -#endif - return ( f == capture->frame_number ) ? 1 : 0; -} - - -static int icvSeekFrameAVI_XINE( CvCaptureAVI_XINE* capture, int f ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvSeekFrameAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->vo_port"); - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream ) return 0; - - if ( capture->seekable ) - { - - /// use xinelib's seek functionality - int new_time = ( int ) ( ( f + 1 ) * ( float ) capture->frame_duration ); - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) calling xine_play()" ); -#endif - if ( xine_play( capture->stream, 0, new_time ) ) - { -#ifndef NDEBUG - fprintf( stderr, "ok\n" ); - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... end\n" ); -#endif - capture->frame_number = f; - return 1; - } - else - { -#ifndef NDEBUG - fprintf( stderr, "failed\n" ); - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... failed\n" ); -#endif - return 0; - } - } - else - { -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... end\n" ); -#endif - return icvOldSeekFrameAVI_XINE( capture, f ); - } -} - - -static int icvSeekTimeAVI_XINE( CvCaptureAVI_XINE* capture, int t ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekTimeAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvSeekTimeAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvSeekTimeAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvSeekTimeAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->vo_port"); - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekTimeAVI_XINE ... start\n" ); -#endif - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream ) return 0; - - if ( capture->seekable ) - { - /// use xinelib's seek functionality - if ( xine_play( capture->stream, 0, t ) ) - { - capture->frame_number = ( int ) ( ( float ) t * capture->frame_rate / 1000 ); -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... end\n" ); -#endif - return 1; - } - else - { -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ... failed!\n" ); -#endif - return 0; - } - } - else - { - int new_frame = ( int ) ( ( float ) t * capture->frame_rate / 1000 ); -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekFrameAVI_XINE ....end\n" ); -#endif - return icvOldSeekFrameAVI_XINE( capture, new_frame ); - } -} - - -static int icvSeekRatioAVI_XINE( CvCaptureAVI_XINE* capture, double ratio ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekRatioAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvSeekRatioAVI_XINE( CvCaptureAVI_XINE *, double )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvSeekRatioAVI_XINE( CvCaptureAVI_XINE *, double )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvSeekRatioAVI_XINE( CvCaptureAVI_XINE *, double )", "illegal capture->vo_port"); - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream ) return 0; - - /// ratio must be [0..1] - if ( ratio > 1 || ratio < 0 ) return 0; - - if ( capture->seekable ) - { - // TODO: FIX IT, DOESN'T WORK PROPERLY, YET...! - int pos_t, pos_l, length; - xine_get_pos_length( capture->stream, &pos_l, &pos_t, &length ); - fprintf( stderr, "ratio on GetProperty(): %d\n", pos_l ); - - /// use xinelib's seek functionality - if ( xine_play( capture->stream, (int)(ratio*(float)length), 0 ) ) - { - capture->frame_number = ( int ) ( ratio*length / capture->frame_duration ); - } - else - { -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekRatioAVI_XINE ... failed!\n" ); -#endif - return 0; - } - } - else - { - /// TODO: fill it ! - fprintf( stderr, "icvSeekRatioAVI_XINE(): Seek not supported by stream !\n" ); - fprintf( stderr, "icvSeekRatioAVI_XINE(): (seek in stream with NO seek support NOT implemented...yet!)\n" ); -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekRatioAVI_XINE ... failed!\n" ); -#endif - return 0; - } - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSeekRatioAVI_XINE ... end!\n" ); -#endif - return 1; -} - - -static double icvGetPropertyAVI_XINE( CvCaptureAVI_XINE* capture, int property_id ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvGetPropertyAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvGetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvGetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvGetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->vo_port"); - OPENCV_ASSERT ( capture->xine, - "icvGetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->xine"); - OPENCV_ASSERT ( capture->bgr_frame, - "icvGetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->bgr_frame"); - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream || !capture->bgr_frame || !capture->xine || !capture->vo_port ) return 0 - - int pos_t, pos_l, length; - xine_get_pos_length( capture->stream, &pos_l, &pos_t, &length ); - fprintf( stderr, "ratio on GetProperty(): %i\n", pos_l ); - - switch ( property_id ) - { - /// return actual position in msec - case CV_CAP_PROP_POS_MSEC: - if ( !capture->seekable ) - { - fprintf( stderr, "(ERROR) GetPropertyAVI_XINE(CV_CAP_PROP_POS_MSEC:\n" ); - fprintf( stderr, " Stream is NOT seekable, so position info may NOT be valid !!\n" ); - } - return pos_t; - - /// return actual frame number - case CV_CAP_PROP_POS_FRAMES: - /// we insist the capture->frame_number to be remain updated !!!! - return capture->frame_number; - - /// return actual position ratio in the range [0..1] depending on - /// the total length of the stream and the actual position - case CV_CAP_PROP_POS_AVI_RATIO: - if ( !capture->seekable ) - { - fprintf( stderr, "(ERROR) GetPropertyAVI_XINE(CV_CAP_PROP_POS_AVI_RATIO:\n" ); - fprintf( stderr, " Stream is NOT seekable, so ratio info may NOT be valid !!\n" ); - } - if ( length == 0 ) break; - else return pos_l / 65535; - - - /// return width of image source - case CV_CAP_PROP_FRAME_WIDTH: - return capture->size.width; - - /// return height of image source - case CV_CAP_PROP_FRAME_HEIGHT: - return capture->size.height; - - /// return framerate of stream - case CV_CAP_PROP_FPS: - if ( !capture->seekable ) - { - fprintf( stderr, "(ERROR) GetPropertyAVI_XINE(CV_CAP_PROP_FPS:\n" ); - fprintf( stderr, " Stream is NOT seekable, so FPS info may NOT be valid !!\n" ); - } - return capture->frame_rate; - - /// return four-character-code (FOURCC) of source's codec - case CV_CAP_PROP_FOURCC: - return ( double ) xine_get_stream_info( capture->stream, XINE_STREAM_INFO_VIDEO_FOURCC ); - } - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvGetPropertyAVI_XINE ... failed!\n" ); -#endif - - return 0; -} - - -static int icvSetPropertyAVI_XINE( CvCaptureAVI_XINE* capture, - int property_id, double value ) -{ -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSetPropertyAVI_XINE ... start\n" ); -#endif - - OPENCV_ASSERT ( capture, - "icvSetPropertyAVI_XINE( CvCaptureAVI_XINE *, int, double )", "illegal capture"); - OPENCV_ASSERT ( capture->stream, - "icvGetPropericvSetPropertyAVI_XINE( CvCaptureAVI_XINE *, int )", "illegal capture->stream"); - OPENCV_ASSERT ( capture->vo_port, - "icvSetPropertyAVI_XINE( CvCaptureAVI_XINE *, int, double )", "illegal capture->vo_port"); - -// not needed tnx to asserts... - // we need a valid capture context and it's stream to seek through -// if ( !capture || !capture->stream || !capture->bgr_frame || !capture->xine || !capture->vo_port ) return 0 - -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSetPropertyAVI_XINE: seeking to value %f ... ", value ); -#endif - - switch ( property_id ) - { - /// set (seek to) position in msec - case CV_CAP_PROP_POS_MSEC: - return icvSeekTimeAVI_XINE( capture, ( int ) value ); - - /// set (seek to) frame number - case CV_CAP_PROP_POS_FRAMES: - return icvSeekFrameAVI_XINE( capture, ( int ) value ); - - /// set (seek to) position ratio in the range [0..1] depending on - /// the total length of the stream and the actual position - case CV_CAP_PROP_POS_AVI_RATIO: - return icvSeekRatioAVI_XINE( capture, value ); - - default: -#ifndef NDEBUG - fprintf( stderr, "(DEBUG) icvSetPropertyAVI_XINE ... failed!\n" ); -#endif - - return 0; - } -} - - -static CvCaptureAVI_XINE* icvCaptureFromFile_XINE( const char* filename ) -{ - // construct capture struct - CvCaptureAVI_XINE * capture = ( CvCaptureAVI_XINE* ) cvAlloc ( sizeof ( CvCaptureAVI_XINE ) ); - memset( capture, 0, sizeof ( CvCaptureAVI_XINE ) ); - - // initialize XINE - if ( !icvOpenAVI_XINE( capture, filename ) ) - return 0; - - OPENCV_ASSERT ( capture, - "cvCaptureFromFile_XINE( const char * )", "couldn't create capture"); - - return capture; - -} - - - -class CvCaptureAVI_XINE_CPP : public CvCapture -{ -public: - CvCaptureAVI_XINE_CPP() { captureXINE = 0; } - virtual ~CvCaptureAVI_XINE_CPP() { close(); } - - virtual bool open( const char* filename ); - virtual void close(); - - virtual double getProperty(int); - virtual bool setProperty(int, double); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); -protected: - - CvCaptureAVI_XINE* captureXINE; -}; - -bool CvCaptureAVI_XINE_CPP::open( const char* filename ) -{ - close(); - captureXINE = icvCaptureFromFile_XINE(filename); - return captureXINE != 0; -} - -void CvCaptureAVI_XINE_CPP::close() -{ - if( captureXINE ) - { - icvCloseAVI_XINE( captureXINE ); - cvFree( &captureXINE ); - } -} - -bool CvCaptureAVI_XINE_CPP::grabFrame() -{ - return captureXINE ? icvGrabFrameAVI_XINE( captureXINE ) != 0 : false; -} - -IplImage* CvCaptureAVI_XINE_CPP::retrieveFrame(int) -{ - return captureXINE ? (IplImage*)icvRetrieveFrameAVI_XINE( captureXINE, 0 ) : 0; -} - -double CvCaptureAVI_XINE_CPP::getProperty( int propId ) -{ - return captureXINE ? icvGetPropertyAVI_XINE( captureXINE, propId ) : 0; -} - -bool CvCaptureAVI_XINE_CPP::setProperty( int propId, double value ) -{ - return captureXINE ? icvSetPropertyAVI_XINE( captureXINE, propId, value ) != 0 : false; -} - -CvCapture* cvCreateFileCapture_XINE(const char* filename) -{ - CvCaptureAVI_XINE_CPP* capture = new CvCaptureAVI_XINE_CPP; - - if( capture->open(filename)) - return capture; - - delete capture; - return 0; -} - - -#undef NDEBUG diff --git a/modules/highgui/src/ffmpeg_codecs.hpp b/modules/highgui/src/ffmpeg_codecs.hpp deleted file mode 100644 index 42eded7..0000000 --- a/modules/highgui/src/ffmpeg_codecs.hpp +++ /dev/null @@ -1,317 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(WIN32) || defined(__MINGW32__) -// some versions of FFMPEG assume a C99 compiler, and don't define INT64_C -#include - -// some versions of FFMPEG assume a C99 compiler, and don't define INT64_C -#ifndef INT64_C -#define INT64_C(c) (c##LL) -#endif - -#ifndef UINT64_C -#define UINT64_C(c) (c##ULL) -#endif - -#include -#endif - -// if the header path is not specified explicitly, let's deduce it -#if !defined HAVE_FFMPEG_AVCODEC_H && !defined HAVE_LIBAVCODEC_AVCODEC_H - -#if defined(HAVE_GENTOO_FFMPEG) - #define HAVE_LIBAVFORMAT_AVFORMAT_H 1 -#elif defined HAVE_FFMPEG - #define HAVE_FFMPEG_AVFORMAT_H 1 -#endif - -#if defined(HAVE_FFMPEG_AVFORMAT_H) - #include -#endif - -#if defined(HAVE_LIBAVFORMAT_AVFORMAT_H) || defined(WIN32) - #include -#endif - -#endif - -#ifdef __cplusplus -} -#endif - -#ifndef MKTAG -#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) -#endif - -// required to look up the correct codec ID depending on the FOURCC code, -// this is just a snipped from the file riff.c from ffmpeg/libavformat -typedef struct AVCodecTag { - int id; - unsigned int tag; -} AVCodecTag; - -#if (LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 51, 100)) -#define AV_CODEC_ID_H264 CODEC_ID_H264 -#define AV_CODEC_ID_H263 CODEC_ID_H263 -#define AV_CODEC_ID_H263P CODEC_ID_H263P -#define AV_CODEC_ID_H263I CODEC_ID_H263I -#define AV_CODEC_ID_H261 CODEC_ID_H261 -#define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4 -#define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3 -#define AV_CODEC_ID_MSMPEG4V2 CODEC_ID_MSMPEG4V2 -#define AV_CODEC_ID_MSMPEG4V1 CODEC_ID_MSMPEG4V1 -#define AV_CODEC_ID_WMV1 CODEC_ID_WMV1 -#define AV_CODEC_ID_WMV2 CODEC_ID_WMV1 -#define AV_CODEC_ID_DVVIDEO CODEC_ID_DVVIDEO -#define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO -#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO -#define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG -#define AV_CODEC_ID_LJPEG CODEC_ID_LJPEG -#define AV_CODEC_ID_HUFFYUV CODEC_ID_HUFFYUV -#define AV_CODEC_ID_FFVHUFF CODEC_ID_FFVHUFF -#define AV_CODEC_ID_CYUV CODEC_ID_CYUV -#define AV_CODEC_ID_RAWVIDEO CODEC_ID_RAWVIDEO -#define AV_CODEC_ID_INDEO3 CODEC_ID_INDEO3 -#define AV_CODEC_ID_VP3 CODEC_ID_VP3 -#define AV_CODEC_ID_ASV1 CODEC_ID_ASV1 -#define AV_CODEC_ID_ASV2 CODEC_ID_ASV2 -#define AV_CODEC_ID_VCR1 CODEC_ID_VCR1 -#define AV_CODEC_ID_FFV1 CODEC_ID_FFV1 -#define AV_CODEC_ID_XAN_WC4 CODEC_ID_XAN_WC4 -#define AV_CODEC_ID_MSRLE CODEC_ID_MSRLE -#define AV_CODEC_ID_MSVIDEO1 CODEC_ID_MSVIDEO1 -#define AV_CODEC_ID_CINEPAK CODEC_ID_CINEPAK -#define AV_CODEC_ID_TRUEMOTION1 CODEC_ID_TRUEMOTION1 -#define AV_CODEC_ID_MSZH CODEC_ID_MSZH -#define AV_CODEC_ID_ZLIB CODEC_ID_ZLIB -#define AV_CODEC_ID_SNOW CODEC_ID_SNOW -#define AV_CODEC_ID_4XM CODEC_ID_4XM -#define AV_CODEC_ID_FLV1 CODEC_ID_FLV1 -#define AV_CODEC_ID_SVQ1 CODEC_ID_SVQ1 -#define AV_CODEC_ID_TSCC CODEC_ID_TSCC -#define AV_CODEC_ID_ULTI CODEC_ID_ULTI -#define AV_CODEC_ID_VIXL CODEC_ID_VIXL -#define AV_CODEC_ID_QPEG CODEC_ID_QPEG -#define AV_CODEC_ID_WMV3 CODEC_ID_WMV3 -#define AV_CODEC_ID_LOCO CODEC_ID_LOCO -#define AV_CODEC_ID_THEORA CODEC_ID_THEORA -#define AV_CODEC_ID_WNV1 CODEC_ID_WNV1 -#define AV_CODEC_ID_AASC CODEC_ID_AASC -#define AV_CODEC_ID_INDEO2 CODEC_ID_INDEO2 -#define AV_CODEC_ID_FRAPS CODEC_ID_FRAPS -#define AV_CODEC_ID_TRUEMOTION2 CODEC_ID_TRUEMOTION2 -#define AV_CODEC_ID_FLASHSV CODEC_ID_FLASHSV -#define AV_CODEC_ID_JPEGLS CODEC_ID_JPEGLS -#define AV_CODEC_ID_VC1 CODEC_ID_VC1 -#define AV_CODEC_ID_CSCD CODEC_ID_CSCD -#define AV_CODEC_ID_ZMBV CODEC_ID_ZMBV -#define AV_CODEC_ID_KMVC CODEC_ID_KMVC -#define AV_CODEC_ID_VP5 CODEC_ID_VP5 -#define AV_CODEC_ID_VP6 CODEC_ID_VP6 -#define AV_CODEC_ID_VP6F CODEC_ID_VP6F -#define AV_CODEC_ID_JPEG2000 CODEC_ID_JPEG2000 -#define AV_CODEC_ID_VMNC CODEC_ID_VMNC -#define AV_CODEC_ID_TARGA CODEC_ID_TARGA -#define AV_CODEC_ID_NONE CODEC_ID_NONE -#endif - -const AVCodecTag codec_bmp_tags[] = { - { AV_CODEC_ID_H264, MKTAG('H', '2', '6', '4') }, - { AV_CODEC_ID_H264, MKTAG('h', '2', '6', '4') }, - { AV_CODEC_ID_H264, MKTAG('X', '2', '6', '4') }, - { AV_CODEC_ID_H264, MKTAG('x', '2', '6', '4') }, - { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, - { AV_CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') }, - - { AV_CODEC_ID_H263, MKTAG('H', '2', '6', '3') }, - { AV_CODEC_ID_H263P, MKTAG('H', '2', '6', '3') }, - { AV_CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */ - { AV_CODEC_ID_H261, MKTAG('H', '2', '6', '1') }, - - /* added based on MPlayer */ - { AV_CODEC_ID_H263P, MKTAG('U', '2', '6', '3') }, - { AV_CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') }, - - { AV_CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') }, - { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') }, - { AV_CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') }, - { AV_CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') }, - { AV_CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') }, - { AV_CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') }, - { AV_CODEC_ID_MPEG4, MKTAG(0x04, 0, 0, 0) }, /* some broken avi use this */ - - /* added based on MPlayer */ - { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') }, - { AV_CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') }, - { AV_CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') }, - { AV_CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') }, - { AV_CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') }, - { AV_CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') }, - - { AV_CODEC_ID_MPEG4, MKTAG('R', 'M', 'P', '4') }, - - { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */ - { AV_CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') }, - - /* added based on MPlayer */ - { AV_CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '4') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') }, - { AV_CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') }, - - { AV_CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') }, - - /* added based on MPlayer */ - { AV_CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') }, - - { AV_CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') }, - - { AV_CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') }, - - /* added based on MPlayer */ - { AV_CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') }, - { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') }, - { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') }, - { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') }, - { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') }, - { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') }, - { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') }, - { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') }, - { AV_CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') }, - { AV_CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') }, - { AV_CODEC_ID_MPEG1VIDEO, MKTAG('V', 'C', 'R', '2') }, - { AV_CODEC_ID_MPEG1VIDEO, 0x10000001 }, - { AV_CODEC_ID_MPEG2VIDEO, 0x10000002 }, - { AV_CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') }, - { AV_CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') }, - { AV_CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') }, - { AV_CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') }, - { AV_CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') }, - { AV_CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */ - { AV_CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */ - { AV_CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, - { AV_CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') }, - { AV_CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') }, - { AV_CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') }, - { AV_CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') }, - { AV_CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') }, - { AV_CODEC_ID_RAWVIDEO, 0 }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') }, - { AV_CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') }, - { AV_CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') }, - { AV_CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') }, - { AV_CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, - { AV_CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') }, - { AV_CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') }, - { AV_CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') }, - { AV_CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') }, - { AV_CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') }, - { AV_CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') }, - { AV_CODEC_ID_MSRLE, MKTAG('m', 'r', 'l', 'e') }, - { AV_CODEC_ID_MSRLE, MKTAG(0x1, 0x0, 0x0, 0x0) }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') }, - { AV_CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') }, - { AV_CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, - { AV_CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') }, - { AV_CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') }, - { AV_CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') }, - { AV_CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') }, - { AV_CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') }, - { AV_CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') }, - { AV_CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') }, - { AV_CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') }, - { AV_CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') }, - { AV_CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') }, - { AV_CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') }, - { AV_CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') }, - { AV_CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, - { AV_CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') }, - { AV_CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') }, -#if LIBAVCODEC_VERSION_INT>0x000409 - { AV_CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') }, - { AV_CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') }, - { AV_CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') }, - { AV_CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') }, - { AV_CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') }, -#endif -#if LIBAVCODEC_VERSION_INT>((50<<16)+(1<<8)+0) - { AV_CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') }, - { AV_CODEC_ID_JPEGLS,MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */ - { AV_CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, - { AV_CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') }, - { AV_CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') }, - { AV_CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') }, - { AV_CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') }, -#endif -#if LIBAVCODEC_VERSION_INT>((51<<16)+(11<<8)+0) - { AV_CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') }, - { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') }, - { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') }, - { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') }, - { AV_CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') }, - { AV_CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') }, - { AV_CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') }, -#endif -#if LIBAVCODEC_VERSION_INT>=((51<<16)+(49<<8)+0) -// this tag seems not to exist in older versions of FFMPEG - { AV_CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, -#endif - { AV_CODEC_ID_NONE, 0 }, -}; diff --git a/modules/highgui/src/files_Qt/Milky/48/1.png b/modules/highgui/src/files_Qt/Milky/48/1.png deleted file mode 100644 index 69b4dee0a5308074316febdd3e8b89297b202685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1113 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 RHnso&002ovPDHLkV1k9?MsNTC diff --git a/modules/highgui/src/files_Qt/Milky/48/102.png b/modules/highgui/src/files_Qt/Milky/48/102.png deleted file mode 100644 index cb6bb1d1bda446b11a1f9ea70ece7ec931a89dc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2906 zcmV-g3#IglP)s=!g(G`$c)z185*MiptpQ7W3G z0dFq}@<(HZkX8tY3+AxE>-Boix9{lp&AaBkT@w@RR(baLUGrvszwerFW-Mr$1|Q`^ zAOeCQjBBI&dLC&TYT2NA5eSpcB}8(>fyqb<-_+YEkh2x_aFI070-ash@i*I{S`OXdb- z3n_d`=BxE0hJ9aObG-Y1Lf~5`R>cwcUWD96z+0OZ!}KZhVFnfgT#zydHV>+*IBiw* zAh94LCki4Yk<6tVZ$tmBe?c}sL}dC9OV_S-uXj%vfj!5U??LdpsrJH_Rq(NC%fN%c zvc+M@zF8#e;qIQog0 zAb5_T)ZRi&^mwg$hqz@ z6WI3h>?mUBL1&AvjCZi;aWj3z04%cl4)AW^);&0Y-%bk_2|DA?6eK|oo;dp(W>)xY z(Z0{0?{yOpE2{=};}`LTEh_;v0M~~uFtbrq8B58yE`e;E&3CeD)KTBo#ut%6+T}K&#tp{hdVdWi7wXJZ^e8iNhEe`J=hxK@p}22 zrw+7qXsQ;U*|-2l)DcMMZdo=jTDC9h4s7^==>w+KFKd1jTI-jvyIAdFc<0({Mx^20 znG2<5j?DQ27QztlRl%I;OHiQilY~hNofS2J;5Sn!o6$IrG1ny~aT+irtvGF&q$UbJ zXq)wz1)dI7Q*@KEG$3)`Nrpxxr`d6Bn;N?{d>Js5Llfp%ssj42WYiHngFEa}3}kkf{yT z&_YQr!U$?&YW*y@dh;TE(?OYyg8fam<7Yx0mj?{Z-h_L8oX>0Q>tU|z}zRx zz*`znOTgLB?M=uXPO+FIGKC==t*1aZ5P@tiwYiLdiqa1T!YnznZJ)D$AZ>8AkIx!v znqlL8yHEq+iX-{d$XvL8`a=#4*h7L-Bg2IOICt%o1=uE|lSqzS!%UzKqBRYW$);jY z{A>o9QJctc>-zo;nW$=?kE8 z;CU_Nr8HE9A|z~*0?qom8G*<4PisR0KpMyu(@gEm;@v)AkhpK!8d$&JYvVq@^@;)3 zw+_0J8Koc;sv%($frXX{sfrpSfL@Oe^ZFr61ERxu_3O1C{|YRLeP%)?=z6r191hHr zp!tH&6TspJsZ@wt1n`3x*`??eL6IaE0o!yI&saZU;B^9WIRUTJp~0y&C+zp9ZT3vl|< z?^)DoU-ayRX@CUB4|diNVuaq3Qe+xHp(n~rD3eX=AJV478_S@<$diVAmQhNb3qq`U}-{s-k*FAUO2H4 zo>=}9xVN_QV0GrwVR#G6D3d0~F_`IxWacWDW^k(*nttu~1$7^l6{_384)%Vo zs}AznJOrwJjI|)>HfT;4-Go@DBUfPG8;`=a)i1-ex^fap1aloa&Ia%7b+YNj2_S|3+URpl}g>ph718&NoY0i`zfBpUd z;4~cu`-efwl~UM8^Wkp~r^?oa+MlUu!}>kdbs>mMse)og(!&qu!1f{*4_bgbS)kWk z-fJ(JIvv|26RrtE0YhgJ3Ex)U`6qTIIFfQ6BK=0v|Hz?DP3Bd@GPazm)Q9Zr$~V?`KjUxJS0(tKl7Z+FNCs z5{53`_ywU{;==8Bm0Y0R%Z=P0gM=uG;0tfH9QfE6XqB8%>NL^2(-76&i6({!Pd+&IEVC~j`MIwqM z!Vx4gh>rmv_=V~Ldg+S%9{`>x^Nj0JxfR6K4v=kbP>`wv!>ascuuHPDDr}!D>JA4{yM$r`w9=(ux7zqo-a3TFT3iqud71MvVl1+WF=$<-W0N@h*1i zA9!3OA|2Q>5s8_O;179$NRdOjU4YDk0)SFd%{LTbXe+hr)UTAjJ2yjZeE!*EMW;vv z+OfsusDT)5PmPjRqzwC}*;JzEfSMSWfA;t&AO96#0E6)I!A2mk;8 diff --git a/modules/highgui/src/files_Qt/Milky/48/103.png b/modules/highgui/src/files_Qt/Milky/48/103.png deleted file mode 100644 index bf0c6617b0bd516a2f5801117f024d2ebc0c85e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2924 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 W1R4{YCCTgpt z#b#}FKszm|47Q~LQG+2ul1=t~_da^gcVFM#2LxE`_+`Gm@9+M8=lst39yfxn>+o?d zUiuLPp=u5G^skX{6RU7}U~}i5M77>U#uwPnMG*MO{;pO5gbr-uRxq}bbG2N%dIH}$ zfZONM_kDLS-#hq!A@HMpD-o=?8Nqka^FD6~rbn7#X5D2F3D!YPP~r&akj^C_l^cig zjR2BDy2!4R(=M+`f+t$1PmyJQg$QL^J(Ocvps$P!|jt~C>4!;{m4<+y(tq<$E?p5(b z)d+mQ@6#~^-YbF-Ye8#&X3=fT+7p>GkinN4&kO9&!7sSLTQ4-J&;i?$+@weodQ5@C zgK;=|@*v%ZaiXoh|JK*z7fs-v=a$AqLF`AlNY}Klg0`j@j3!S)3ayS08nEr>i%GcN z1~z<-2;0{+Mj{%jhtreq!D~nMpf_{mjdc&MesjkK6S(`?#U}W$bko)AAsncMk?|Ak z#SEwkUNCa8Nq{ecZGGGFwkHhmHVNGNyg_KFZ6V;$|JE)TPn}{U9=dH{$9WUj{F{X& zoBjZSkF95opF!*3In&C#^&JvI+4N~bFSa~51S~RWFle0C%9@D3^|VPsU-$5uBRi%{ z;5)k)NO-kB!rPqG@#wydc;D0v8d^{=ELpfaYU?tZop|*fEh1 zMGw4s_!%TIf&r~}_S}ASpqPMI-ZjvRKdsj+_!3Kh!{f(5RSTe~3aDCv?bB8`N3#fgbt2{{Sx|_Unk7DjqO8#K%KM)B`hlR7Rr8tjmdZzupa}q%CkA(bD zSTN^WwER0P8z`Dw@`4hp+Jt1=`c#+9S_#*+dM)Mq9>c49Y-Wrp0Tl*NF?1u_>4SQF_H2nC|h*1QBpCr(OuvKt>;SJndvzB_y<0=hQ*>N2T>z_*@k?I7#7G+x12=jF5s+G@;_ks~KnlikNf@}bHXzb6DM7j1?4 z4cC>($8Os`cG{Xqf5_xCtD&8|BO%VUB@)7uU!!f~^tmkGQv-%)#|}5ugq&5~_n} zxDIl;bnKhIm`gHBFaqlzpVLb6p^Fr_S(`O;H}a= z<5RF^*#p>N`nh=G-&?TXKbakcfImohv1%Q55aTf;;PHAPhr!}%fD0}@t5mZzM%&=7 zFYJW+$h;!(vg?=59H-@1&6M=3G!BxDTM~td%bSsGesUdJ;X9S4OSkpN+%2b_z zzEtJ#$yea1zkb{9*k~lGnLrsKjTzeTkSX~R2^EyQkveHbL2##ZUC^hL-!G)Rd15d8 z`ry6xjLon(*gxjn2ZI>pjV71#vfBfiY4vnE$xd0v%oE%`)x$&ks|tSa-+u_Z4}90q zy#}s#S;@uPw~Smc2n_HZh$Elwd@c*3PcR;^I#;^$F0>=tmix8#R zgYP^Cz>(qxKvN=+l_%ks@eT0bkvI4`zZqlfnpMkze{|nh;pp%|&{eK2YhN|nR5j=QxbO1>KvuJmPs{9{ zJwF(Y7Z2v*`Ai|EX?2p5z*(F-<|Jkc4T=V(t}-EiF)0ep(kAm1FMZ{P(>rmqB{_;RYN!E4R*h91Hd;2;fpi<6&e-U@fCMO7 z19EF>X!LD(_@&#K2V9>dbbi^TlJ)_7J|9esr9f3!Fh6gLmtR&{eQ#~Q=n*<*&aVeK zr!W^fi*5o3)H)@cGmvBRRzQ7p4jef8TNXb>%SB~UC+`X4WKE5j2msC=;2dDd&fxK}b(zATgX|0(tSL>D5zS++DdjbO=w!q~<6DBLO2G zbSsq#rG3|VGSJWF2`quI50rumV?&c9sX=V@>fb$*NfZQQx*&_IY zKIRESO}agq*M)P6r6QMdp78oS;0t(hyi>5i6X?~y@5z?^VsqB-17F-2h+(V!h*Of9 zq9~^Tl2BNH3FWLVob3ZsF}LE53pMXYL-`TBtT6Dp0lxF)$8rM~{DtP`yZp3#(N8Iz zQfss!j2TL2FW~`|HX)StN(m8?rAGjN$j919k7pryCPSwac-Z-epXCQG`WxAbJAD#1 z*o${{dC7D}^pOdhGJ3qk-b=?xk=fh1NO0n{m4?;+4R990r%C9hga+JRTM?|)JmoVph; z;!FJv>qUcz4zy0mmN-PTt~X$05z@6QEk7@J+BTE`0000< KMNUMnLSTZygot_o diff --git a/modules/highgui/src/files_Qt/Milky/48/105.png b/modules/highgui/src/files_Qt/Milky/48/105.png deleted file mode 100644 index c0848cb6ca6020c8b1aaaedc0a8aac021e4c2d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2849 zcmV++3*PjJP)+sOX_9RxxS#GCx4?L~jsIf@+O#EC2f$zPvHOYW&#XjysQS@RRckb5e zS0BSMQ&=BE-4E~C_*?b=Lf~7+?-^uF+06{l5cG$kE#3)<`VNTIB_LWCmk8*PEvS$w zOv07PGccLC4CP85bOXgO2Y%>_n}0w0KOyk-KWsv2D+dsGG8hO$cgF_kZeI^g^-H0m zl|(6&GVX!MR((MT_(Kp1L}+9*+BzEwqUtyI?GyuEojNN4 zXHIRnwAn^;;G3>n7j0Y+NkrSBKGF>TzI*~s{OdSsHm~ZO4}4?W%c(^Zc1LgwGU@l!+l9!3-R;_cW3r3+eo&+^>1x8-|l|e%11K;^bDs{~S zcK_yWg9?IA2=EU zKbcxEfzSVXRWCM&0awdQ$`nAwrh=7uo%~x zxHiwRT>&4gZn<3)I(OaItmlkpD_ri=I44uRG;tcp+x2yCCQ?ZRJ5Iru z*Cq!*QG75yebxY=8GvOl6%Q~f3iHAHI|pG+YriNPdv=MoislAyy=(Pnx0%=EBrZ<8 zj*DX#bhfP{rENvwZk?0BXAXB0)4k1T_Z>~$aC!2yBXwSq&LtuqVEx@YAs+6q`-}z? zqD^6bM+4Hk6%TN`9m`BEjoQDAi{*OoD*+U)eqc@l1RfuPwO#!v`Ex>*nj~Fo00VHz z4IWqE_pEpT65*v)YNodJH{I*eKuPpL?>QPRIhrxs$Ys;9df6?ch2+DBy9R3#*!7EK zoO6A!qq#?zPI~5|EiKtjE1KJut@E`VcR_c{Ewj2%x_4Xh<1P(oT6Mq9wLz|kt8;qh z0<ZiO{% zcewg+%*Px<)(AJ+i2&CtNMa>fNfL$KTTOuLpQJ#mKH7x-e%zEuNpv8q*HXJ-LM3Rc z?}q-K2NxU+-q!gs=s_Z~3EA^Yb4P>sSX~5m{&;yD8+)4?+VR10T0A_R zcu5#iOGIvhyWjE1HHYGNuKpCXH>~oQkcWuokfWO7F26qj;ZQwlL*MEmfNJSS`-fOG zE>^&bYf_bJkSKwV1z^j~dxTvs=Gb!cV<>=S&KR!oO78i9^>jWh0?5W#3(bQh3Ed&U zp_fz>jWl4$Fd?ybdj|)65FXgD9~$af7oEw4{88ABeMEyza|+5T#)Qs7C>S=(2-hl` z0Ox!iHPS+#D^6FvY}vcj`L@2tp|!s2x^r40v90%UH{dGGJ0_)O-vFP_XU&6tJE_Nu zcr4ZkW%EUbE2l#748=ZHv0@)QU)i+ohHV10HFQHubOl_RdR;`hRy^d?m~fi458XQj zd)ySZOn|gt*gvvmOhW>S4cH-Iv>kcnYiPeq?Zky*xxVH1Ks?ehFW`~ap0qPFIwo@$ z;r!%DJ2&tWu)x#34Cd98YwNWMXr@2b1OYBd+)Lo)Gs8|UU`DdZ=H3Mnc=6;ua}Kx(j1_Wu7dtaY5q*er-IJ>`E6aj8b|R_|O{iaY@3~l24XIm-CC!kBESJib zkX6}){zG-4kQ0HNR;dVyTZx)3Z8q5FuH6US&ba2?3bCcAU~56EzV2a1DxCE)_~S?3uR#SDT8%^l=`&K(ZPg6G0f7kke@End#R_tnpR!W zC_Xrx!<)d&q+4@d=8{CX=9Zc@$U=`=?;3q`mquJ;QUMK0dCZ|p6$<8lSu31Arj<3w zPUb=JDYk@aN=A~tt?Fx-16fC;>;w|yiEHSQUYz-<($Q;X{QCMtxa~ zI0Xsrn2g7iWMWh(ho0|9&zzSu=N3Tq7{=HX(vVqa(kT6kcxRv7r)y*D!(WI|jD5x* z@WtDDnvh6YNJ!qab!~z%_X_adw|^8`8kW}tPn)+V&b$C=lc)}!t_>}SjoxqAoQvl}}1?yiJg zuel0aieL(Za4ZDVS2K{ApbsFh?|0wNKH=S3^v|;Edq3VglRh^UZ&}d@fsjv-AX_xn zUCE?qWM*NRFQllo`c`X#zz6I62s{VV<2h;?eeOW+i3M#f((&9u+7Z?V(5w=w7l(s-+(t=c$ zgrJs!*#^3xjW2UM`nsc*6 z1irdm&!F$h%+1;f1JMrbrL^jZ@#4SDbf{1_b{M8D&GWz03ys?kV~ zJ-d6ve!&P_f3IvM%Qi17&2FfuDTh|8LogUXC`?Ta5_pL%51xj5z0QQ6TnRMVB%3AAyti~^ehy0{6i{hE2(U@uNdl>TY+jSzf_0bO zfa0vn@#=r~DD5)DuA=^14I-vzH#GjY+Snq7IV&=Ik+El4dUI? zFXQF^JPl7|3|WO1@w0!t^(3Bs^$}zhWFWt68H^@c z4Oxp@H~k22v^}SsbDpgK!}h`c`2_y&L`L%1%NAqH^LPfm361hTbUEL_=DOP& z?t7}DVMz#(Tpl!J=;DzjifZc`40H|Pj;}n5s^zt$VI5ReO_3DR*BeUf*$Cb;V6W4t%l3 zQ+?`$<1ooiC7?2VK`&~{8Yy`dFCf9hw`|^ywllB5Ie8N1Y!jywd@$986=mzU-S-q& zPD(l}(7>@BfaA{)iQdVDRFpRS+)sN;j^)@8x6y+ zy7_ZmS_BBBRYab6X&^K#dx6jDkh8Z$t= zE>fci2O^6~sW7(!k&)QDJTq6dWkoB~BY^nCh}C1z%KGG^ROcnw2zX*yR+7(`(9(HB z&^Qn+5{@iB70n~Xg9VQmq!mzR#*wZMys4^@1~F(f7B%`Er<3IY_dKb!v<5fT-$4?J z-M4kUj`67x5xul}2^*}}BR{8D=)J0V)uI!f=z0s5JX0)S&^;5FnVm?RfRf0*eDOwQ zTp38NK!QMq$%3ud*l0r&6!&L(?HKkr#7d|^4X&)d0c%#&$Mymy)1o#1(D)e?6UZGUSX96CNNAzrjmkvLUoRUo8GyI-WpF#WQA)d1}EeRdj4?C3; z{o$Z$)fptR9>sU}IAz*%VigLPRR|DVpe4d4`^gXQ{AChwYQ9KFE+IjdT;K31wDq=P z`Rc-$RH>PXuybh8zHgVazh!6o=R*5J{&3RL2VUBPd+vM)Pdxtvczn~Mo?#NHQHe<; zD%6iE^4wkpzx&GrC|y+`q7xI)YW0|Ojq&O}wp0gOO(8$)S``y`JhM3X`tR}O#;s^M z_^=?s;QfBTAd|RQP6;B5k>KC`Gs@+CU*Z6QdL*{4i$3lG(r84vPM^+rEp(U)X^)*6YxC zq4HS4zt+g$fZ=v|TmJg+Wb2}(&8OKD zGk9`N+w$ehg+yf9(^PF#5RhEp4G#aFk5cmUN^#4L--h2CK>K@#MCe?z;+lAdPELll zQ?DRu^kZf1Y6PQh^bdB5U0CAyk;ihoe0Dt)ikr48T_0xN#$N zlvR7&FCrvQiIqsLd-8KjaP6jBVJ%;Usi|?1^v-tKQC?9cvZ~%JW5CgYK}R=9&6_;z z(#WxD*E{X!W5&i89-UIsI#yxuwE4DGS63(ByZY*@MX2=oe3W1&(K~Yx=DZ*bW}P^! zNIyoY--M3;05<^t-$N{;O#vt%EHFpOKMaTea$Zy~5zx z2^swC>@1ERJ&Nh+X&4H|QL>6jXrMFcpfkwH6T0Ma;{4;qc!9^&P9z-VlRYj~etz&b z?xwWQMl&-rh2~eUUY&ftVZ(+w;Ex?U21QZea=FBJ6tb1No5C%6bJRxf=g4}EIPB8# z@nMR*xH{wMBJsM4oRuy87?ExI=U%Up_UUwCVWEgN3Cr`d_3PKq0e}4XaRGj8Y)q5^ z@y&K4B^-O=_=P)ayo(YC0Z1J7@|h`Bw(-9c9QoH1!PX`F`v5tr0AEv6ll;EEzFx%d z1bDmME@b0$I>r5b@So+Cig`gEAkfVeVT9!qiKnivE(xC7nKNfZKRP=4xr6`6OuTmO z+MTq)uvJx6B~w0wHyVv15pmhu(a|BmI~)!np9=|o0Rgh|R^B1y<>d*>bJ(<4ECM`( zK7018C<_J#287dIXz&Xpl-PW5P0!ZP&(BZR>D}Gk;&WeLA0{RyE(-7qR)9e7V-h_* zJpycJXD0>+2hr8lCGO9iJBP{1$%_X3qEU#FR5MkMHZFrJD=WpOn;n%c&)^BPLXv8v zcEP}ZY#60vB}lOLxv`|U(PxGFMhc%7)bbzu2afjk_PdEp6U&Jk`vbLp`h3B`f2wl2 zwzjs8EZ#t^zqhxy^(n_1`#rDlhO3NH(a{($V>R`~BVbGf~9vDF~nSgJ6P#&8c>LM~PK6|gf^P&^@ z?6-7VO$EmLos}hZuIfq{j7G%cF~k#5Xtg>>l9qaEk`6XYFUNe?+1pC%i;;|`5sgL(uttolp=i_az51Nk)Y*(BJWg?|SxLPy!6zXf+(HT;X)^SUj8nqt!rf*7Izb z_JMNTw#Int7HVXi$R0@eiLflgp!tb8jhW_y*u$S3T>~cV_C(jscn_9adwzVnW(yv;<7ELp*J_meMF!I8bTAkUuvjcG zQkE(!sm0H>y^JmG_hWK+8e@Y2BACQ%EQr@nJ&&8N-R__v9$E;*NAdt!zmD`fP*hQ< z25LjYN{o90xW0KiN#-kLLA|hW?zjw`K`#`Pu~>}Og(MCh*@eemx(m+QA{3PuiFA8q z<4qVI9l+atUGJ|Z>C8A8E^!(X^RwRP# z2`1Qn#THzD#chy%Gl&Eu^qU05$bMY0>IQ!G{za*UDE)2KQu-4Kh1%Md>u~Hy4>~se zTu6ka!q%LBor{2Sv8?#FU*32htdbMc<1|m#*0Q%|~k-c@ZG_v}yHP zhbC*;0*f6}n*UF?SjDkK+C-pS)J=*PgqQaxOv092+0w|W}`@@6L{D22I?!; z@GEWkdZ10xNs4$;U$Yv0z3-6gZxK>p3+7sSzKr7W_<0BCF<44hHhm7!P@L9}S>c7@ ziC&bK)bSc}UA_d?aNr905YEPi%b|%I;ViCJgH`Dl@`92&&s!oB0jtT5#>(~dKF3mu zNF)$V1_^(<^_=DO2fQ56Kuw)GjR7`uNyZvd#vX@G{srFYUg!x3gW=UxM~jn|3OPxW zNu~5_kt!1eERl>OmW;w`u;UBsz9YtABh*kX*s@ zQ6Eo61?l`fkR4nUWkwTD_Wg&R?^bhvbT&qXTQWmHN@gq4xeKMRswgQqmNG;V`nj<& z6Ou*6Du~c~CcTwos5@T*vQj=Ufp|QMv?ir`fIn|<-i+memaL`Iq`aN&Mvc#lHh+`%okI4BF=plD+RwUHtrb%pO_$P)?N|}hW%-Y6l zuugNW_?}AyB|he7sob86JP!Extv`u@z+0#)bqWuW_z{^6@_l!{X|yYuNU1XFKJjm~ zUGsSyI`W*F=W_#^%ZhWY3AueF5%e6X}2p@z5gJ%-HF)v)Q3-UCjO0W-C9E?R7{=){M^WFn4A1ZTm6()cfj9N@N#yE0mxyw| z|G&?o$NP%dp$Vyyfs7_2Mm$42*N#Q0Mql5hZyP$Ub;M`mVghb^|M4g)Dr+$o=_60v zp-O_aof{Xt3Uk56y}HrQUb|j-5W8Rd3944OFdK@Aak*@XMrRS44n6$GdwlM^H#8KK zTdCVwTwIKXt0!SDO2SARbmbJ{wkm}U0@gA&RdbK*P0$M3Kltgg+^lNzT z)n6j*kYRNiG3Fo1zDN56+VoHPg6>o@b@{FzjmvrMi52jrrKMtLC7Hq~Z61NiM%zTA zR^6SgZE8c?RbRq^LwgYLkKxMIH`4a9iAs)UQGRo(p}~ ztECWYR?~XWyaBQtfP3&1hCICpg=fTRozqzc$C45lELsfv`!O==78R%BNiIRc@~i;= z!cQl=^Ey^hz}M8&ps=t|fM+62O-(}Ma@dQZ*h|ox+2#67H7S5(&WQM2w4$sIrOqno zDUg#?ym>}XBN&zuj?9SqF89QaS9pp6nPk(x=Ygs2ybiV$@C^+Oa5x+)_*JV`3Gm!{ zdU`PG^PuFiG1y%RabT74hLm$UHy5NJm~*cbNO4Nfl%l(+-00Z*iy3!bM~fttt&~A_ zE?c$?9JHKO%FD~Ka^*@D{IO%l;PH463qOot*sT7SHL$m zHmcxHoH&8u;bBZpPQvf^&jG*CDIR-7ohKWpG-3CFCzJA`{(*x)3d<7-6crT-*>Kui zzI?e_aGg4J3L_&U2m}Ix#QDHqh$|QKoN~IQrKOE6?{c{WXtq3So@0Q4bA5CA^l1TH zmgS2A{=B6G)hV~~YRQ`CRLDJRo`G}g>+2I*=QcDnbkV_|;X=TOk{L)R9L&Ww^vAprSnMwf0hTx>YYU3R+39=e}BIS zV4u$?Vu3S_+wE4)Y&z(jiw=IlEVO?8dIteNNY-st(rPFa5(^c_0e#*vJw1IyrTboD12dcwO@U g+2fKY@P7dY0HBo?S6zzp`v3p{07*qoM6N<$fP?$Ab^p%*{I+8A;l$X~4PBl) zv=rhdI3Y0Pt@hUxZo?ne<18h@9S#RfnluR}Po50)*?d@ATO0WOez<@CzWAAd{0`^w zhXFHY0Kfj{x;-h0U)tT)-4wDoIUy7J@7ll>EQaaRr$c&rI>g7vM?EBb+`M^{=dD|} z2ow?jOPmMC17u79_I>iL4VlULhwpUO8_!r+0*`gN$S zt%d&nej@qgghevXqpOBlJlX+wHgXCmdX3|SFV7^ z;|bYs?!0+XB_e*Sudj!?x;l~wsn+)qNYg_Dc>PabaZhtSS%#c<4yi+Y-vTB82Js9; z3qnr18+vQf;q0l)O#FjJ=9DQ6WXX~xP_krk1VJbTICJI<*$GKwF@mTbH-OhZ$a80> z&MLdz)!-Zo20*`MkgsbHXaa`DJAu{efaI85`0KvQ(Azq;xRQ{N057duhx2u?%BO&WMp%i~+Bw zIm4A(ZXcTLjA4^N=|)Wf0QyeCy^{`~o57tVY4?j0jZL|YeO0|welMMXtU`(zLNrD_+nwm0kQ zVi~ptT9cNN1)u!tHr#J|bSXk!em=bO-n*mRaQ>RX$gahPa_l&4Q#yFgomgdaM z%hNXq_)IFJvbu=Rep2>FoC`LfJKeKum*L?wu-ol0XU-hDwL6+Bg#f?@D3>XjHEWjK zfQXdDOTE`W2k_qG$YxKMmBSz3e_wJsJ3AXvQ&SnlhyZYGnS#DLB_%~J)&ZztQ%JxU zaX95bDR|h_sZ(Lb%$YDVZzi}hG9W1_X^9)sLVfvL#F{3o6O=OpKtz0-mH z`z0+I$b{I~SO)PR36#Q&CEv?|kV@!@wdql*65;{y6WqDZ{rwZy&kO?OLFWe_OUrsK9fgr1h*Asw6ix$Dk zZ+-(l!-VY4?b`t6^a_{8C&aTFz3}3T@cSc2&{ph_h-%i?*C)@6<`7PopN4Ng|2%)D z=SfQj1_sF4R7(Jc_W=Qbh^)GJk@K9PfX-T(sb}0CTCTDg+>bKmc>XRVau2 zt<7eW54PTE1%ICcL3A`$y8?<$0jtdd3aS84%#kPz40Nk7|Ec*uNvnMFtv zu;b?S$6_EhS>?^h@Hn-`N!+@BCxFp76|P^q&JmOEDMspT(Q{bMNMAKk2&o!0HQhh} zX>bFJ8CpXiC>2pvx^DzaV`2n`J|jmmNhT+1E)=eV#0^EWg1<{);u(OVbHBfT0CON8 zhWte6>FHs@70WO{Fs0wJ2r?!SMk+F#)g$0D^cVS}{~59B)%Thi9q*(rKVApn}_h8cjns0ePhv_t`*tBM0thdX#U13)qBm74)V(myN$%?ttw z>*>}zC{7H5aH`WDyU{{9K=f3u945)y?d9Lf#b*n;{bJuQI|_ePpM5#GCps9(q=16$YG^8vt zywUN7h6cHiHrcgzFK+rd=R9UFF|1Y&&hIH8iR_ZD(Z8Ej$E21v-F^SNvXc9zOP4K^ z#!GE@o7&z2MB$u5*uG;2R8~|#e_y{m*dd5F6D0`a&yKL~b_phA zoe_J^ojnUFSUXDE}T0LZ|~pF)f)kEI+LXS%WO0(5=Tqs2n0ps+L{`!J*XVrxM@=eagB|Q zSjDw>8x7v3alfHK5SI{yyRfj3xgwtH$2#`F{n&+>+2u>4b2EZ zwh|C3s;LV>N!Wu15kf%3pdL_KSRcqtJaL^QMDEhabJmRZ#&X;MOzp?R)I*|ZZEE+8 z`|YHeaGIDSjrdCGkpKwmVpFHMM6@HR9uT@b8qwWY%ur@Yc@~bx_nvqRK-{J`^*N$@ zCfUi-8&@!F0P zNU{l!kOyG{fkIn|Erg1y7EFtTXn$lQ^`)vRN!9;pez#SeKE$uePF0~wNX0==)Pm|n zh_NY$AKBey1+OFSuQ*Y3-1ZeYWHeD zC=#Q{ASD&3OqHQ>*%-xV2X23^q}>nz?>!pL$er?7*ZrGRaCER1u6oYNg(i)fZ#G<2 z*f0w$%m@OJk|Lma!s2;7Pfhm3w&%;a>jLo3!;!&AN*PYw->X{lOF&ICEI5I>=KTvX zxdt^F1)@YesZcsWG2nJF;m3PX7R6yDFF=JM6?&OZ@LySahEJ}E8_MmNOL@%0Lr^JTCKR-F;*gW>au z1R^OB=FjSyW3nxG{!Q0f0`S&eS(RdBtZyKZG3Fg$HVX?bgcDTkrW9!JE`c#u+Oz8w zJ=aPEdH=E4AezeI_@+oEzFvazq=6|T;1kpnkeibj7hvHX{p9Y~jDh6ITu*0dn z(Tus^fK#DB9X}^Ij6ZV$G26Sx8xa^7SIhZUh3ChP7b~N8{H45S>4VClt7pnubRFgg zG#htJyE+emU14aB6cA+pxqZsPRZEG}yTo*~Pr8`8I|h|$yKXism=8bXH4#*t1XoWl zjNCP59B4PAzWYcdLnQJ->h5ToGwz_!RWqux5$P6TiTgv5?%DH(nO~6s>@(~NKV^AZ zaGP5ZxEi5$l>z46!)NBafp{!P-P4gp#~*GNz@4ueIY(!E=1x~~a#C`prOW@!Yq)HV~j2bGMJ z6vot@5w$#NyBY>s_X!?ai+KyoMQ6+2Gj_g#0sQ?;GA)BXWBWE9uzA-9>i23)`0Vg! z#*F2LlJ0wB*|)zWx6MT6bu)*4cc3(Gp;-zwA9Lr!W-L&M^oV@EY_(4a0CpNAj2Diq z)~O~q3M+Ca3pg+hI-LK$UIlSqEQ`^sZ4h_=+Zru=Vvh3Y!!=5sz%WD7$XDTqe8BFhh%6-u~qPGLl3B zcJFCZP7o+eT43q)$XCugBW95fxFEX35EE6upaJ&u8IOt7J+bVYJKF<6DIC|YIzS`{ z$-~VEt74Rw?F#`=l0wEV(LjRo1mZPG;gSUpeL&qB{j2AloNdy9$x}WPN}Y*1Bdpe3 zCJ;myf<50`ME&Gf5DtTYG9jE?{S7%G5Viug7O-Cf9VSZBtI_?)e|->d>6(<1+~`${Mou_K z@axj290cZx+m!6zZ)pxfK}WR z=q$(ZiCX|xeF7UUsv)V?Gv8{*qo4R7&gmWqDO>>3;DX4HPJ&LMd$W>#c?%il5z)8* z{V^=9EnLi0WvVudj|Grho{3MD@MXYtX!S+j(LxQx;_kiuttO$bUt}(bPv0{%v1U%N zY_(NqnJ;2Q1hEc5ND4Xo;%0KTqf0zUFakPGUGx0R!+oXfvT`m2fM>o%EaZd;38Cf9 zz?8nGOYDFC=GIu?$2ammi1!gh(6N1Ht1MSd!&t^2$#@SQ2hX-hOOM~V9)1?G3eng$EJE*>I9a-tSjxAz6gzM8lCvOlF!)$l2l=<@p z_(eM)20uj*HX9iK$kIggCD)vq0`N3kKZl>Y8(wJMi&#$M?-NZIG)T+H)SRPX_zHD& zDMnxk)L^nhIQ-mt7;Fc`wSE7v*@Q6^r#s0>1k{XW*V}I;}gYAHL>JsE^2L>)r*_zyh<&_#g zM3i*COmp9zf{|+i_}&%JDi%9*867tk6B-7yIS7mnH=$Gac8N!i_rcgmAEa9a@$_ZL zm2`H@vRgA7-Xh4>6xzN;p<$<^>CW5_uE6MQkq#BHkdx)+Oe`XZ1Ul6%8>Ie3lw2I{ zgJEo$)c_z^6{G3nVsN|_oSHWU$_qy>F@0nQ~_;OH<C4x7UB)OH@gKv2Ci5;X4w#%^JQSk-+9w1li(@@wXfl(B!*z z*awAnZP?!_0Rt6c+N}8(DF2626~08dG6ueXrEyW!(g%*;^$-;&AKR298FUFK;i${s zUa315TEK^Pb&qqIkj*{<^6NMP#>xUFi*yu+KJddC(5~wf({Fm*0_*6y7|E{3W#N)R zYtaD!8o!NQbG07Uco2Zdx9U;&86C~hU_(EiVTW$$SIVItl1)f(bYnumoXVhVd78am z0D><#x2lN}(@cyuKbc{xeyRLSpIMLkY;;J-MjY)PyK*27Z2`nG;dz8{Z5^+#@H)tX zA-p{D(^=Nix8m#iQvd62cY$*l85vAPh`L7h1a$m*ogX&!1m>ele!!MdU~Vc{T|)`~ z%<8Vjd2%{-aF*pi*MBwO$FI6wMtE(sFDgPmwshPLH|UI#XV)B0+4kNqqMcN1$m2c! zzY-^YHpfOk>)ba4!1Cjl9-wMM>-XJ51E?jT+|TEjb|dDh0r(;x{}W&UT32k!SUQ@P P00000NkvXXu0mjf@O9gt diff --git a/modules/highgui/src/files_Qt/Milky/48/11.png b/modules/highgui/src/files_Qt/Milky/48/11.png deleted file mode 100644 index 565ad498e9de6f6331f4318e38f04d6e0ce62d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 zcmV-a2dnsrP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkU+DSw~RA}DqnrUcLSro_Hru*Wn-S>2{n+s2It)dYMqPSEL7etMM3Klg8B8cFE zD30Rt(JwQB0b!g$!(gpbwT*4kPIc7R+KO$}rm51pjD7P(Q9;g}^SD=D)3nV?lhhdu z{AqZ3_ub$B+;h&oPYeQpp#QRh{uc(u^JBGIh1%L$lg(zcG&VMZ-EN0lw{A&wb#?mY z=4PWLNft?JvEILb-}3O`LxIM869yU@8U%zjBNRM&@FLv_(9zKWj~_pVM~@!CvuDrXl?wi<<#+h? zw=4Mlu65iEAiS}&vlCvtcmZ8qT?#Zso(zzYfq?<|``x=C@QqD>lDY9UK=1@jQNMTZ zo`ktyQD0xLZ)47QWlzfR>gP)3_NxU}JA@FFb$#9MFiFuHCtF$KY@{ z=&K1GZLYjirDK&gXW$4J+(fK8M}p1^zsy_}z)YmxO>Dzyh^Ua3s@9y<=5c}yeC;a3CI)zwC<0mpSbe0dXjgg1{i zhhGigsZqRkt;(yk!6UQPlR5lmAT%^o{P8EV>~QpGhNrU;p8th$GeGbtdDW^_@D8E1 zz$3V$si{fubS|G8;P5#)IdJ;)X=rO}hXGmk2;OdQlyR>Rwan*J0~|g(I~z`%H~|+f zT!4!gFX9_k2Xu6HjRJ3%vDJ!N=k%EY4xg2k1xJq_g)?W)z`1kh;J|?ckdcuA*Q%=E z#ve6q;cYg%j7JO6n|Xa=fWv2IX2PLEhv4MNlW^+PDcHAfAH>GS0{#YqAi&wP=b;r} z6F+|ZsDii2_%0xN8@MqW;P4b>iuSQ%$Kd$!Cz!OrPft%*qD|31eE6{PJtih*5PW!eI82!`1?JD64?A}3fL|_OhAUSs6=Q80 zUK>Ct0VPF8N5hsaTa@S@Ja`cH@87TFygT@^vN9+sDdE?RzG&HA8BoJ-+_+JRIDwl? zCZN@Dg`YfmGR&Jd4~mP6eF{Go0}A}Qb?adF?%l9=?_Q{^tc0|*v?1`NrKK=;?pzKp zqbh=Y_|a?t0n7xqV#NyBxpOD%+O!2Qv}qHhq@)aj zr_>_&88c=;K|z6E;XO9M+hu-!K5W>qK`Gqz>(@haang&&$hGIu7l& z)TPLHApV(hL<0z6BESU;7Qpi5%VFipm5`g8I|!c4(b1VwCm|srpztFaKnOjh0ky&< zOP0XWrAvoIo{kH2`Xp2A++z+T{AdQO6w$?t7eje@IZT^2ZAigV@29grrI1di`x%Et zpdy)~n4;Z?{}#!{grmY}T9ghIf(mBRZU6xd5fKqe%UrZ*kDhf*Y+MF=P6{(drs7qGqS=ZKGBd;g zl;(-WVJlT&#lDGr)Y*Bvc`)2vx#V%KjF!>-2j8 zyFXWDW;i2pY*ivz$|)w?88A?KP}2U zVQT>M|Gdi^l@-B_tUH9VC5%vYnOL^O6Iit3nI@`=J3&>f6IJ){!sRIv?NYpow+DQ({X O0000)dm`-}gS}L`x(R^ld)e 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 j*?}K5fN%5hUjYUH&rB^UNDd}l9SlE zwMlEYNl1aw69j`HO?9+Qnz)Ee({9>OT@VF^Sd#r>moAOQBnCek2Adc#5y6J4B51oI zq>Ud*r;YxohRntmMv^uSAx+yjKJo4N-1mORmpXQx91mMHulm-t{e9ngp7;J)wLlH! zPcu)l7K>#>*Y$~e_B_tl;u%ye30Nt5YFEd=n5L`8YxRtp5qR^1@saJ`>o~WAg)U!z z5Z{MBGX##k{}a|uJI0zDI$?Qj7MeYsKv}F~pBVz0rjG1ry^+1Vz6h!+Lo~4h7)t)5 z;U9(Sp1|+_@k5rexrQ5EK8OnuP&CUgXb# zx1lTe(&>Z2x+I`#^02S53oap0MUzT268jkZZ8zaMWq;ifcEUkVBGJ-9q*>oj~$KM(ZTCTk1a8x!Dv8~A;yv(0BLd2|)Qp>vA zLr=W@<@4md1u`e=pp&sXoLOajw(!$C-zn>*Jf1@*??5mX0xDOd_mRJvJslivWmvM% z*Vvuk*yL^no7G|bn~VwnIzNq7CTW@gnNs_^?tqjS+wi%piV#a(CQJ-TNpTReYtX~f z*=47YC?Pp*`SJ13hwQX-48i$XcN+q00~^gCIL25R7uJj#PK3wqnvpFIB4J!@>-0m;I z%+hHdN0PxK-S_4yR+evK2Ru+zOtLeGCI|> z?Pe|#y8tVZvl|X90aO;L>6IJE6^f7D4m&#cz=w;c!-^^%c=o=z@KqaGv3!4W7mLq3 z(${@!NRrbqzx2LI^OgszSHvDWymtp`7tDVWM)1<$ulLXMWjk>>dE|G2mpgpBLQcB} z<`%G?&32hCDFqh!n)u-JJ2(g9p6YD#v$J#mG+}tXB4Rx~pM#|f zvpkm0!51DnAFld+;Khd*!JQ2l`rx$3pW~*0JH#Aez3pKw-E!9*iMv60U7JS77 z?tiu`XtUW_o{wY!UIA)=(5|9IAoZN)Noj@>1CVp=jKhEbb6s3b2;f74HpT|Yc%lTT zu9j+slvb*0pt=VM@{DMHNj??x5f$nZh;N>UmWSv6N5^$IGePR>_BmPJC~Ui@UD zss!$Px}CK#G?z>y4VRbeoR#$ez2qYyl?IBYf>jS843nUhwm>>5Zj9-oB-J;>d{MZR zgi>kP39&Tx0tyY*5v-~Q5ZpcsPNrf~&RWu(=}mhmd#0F>z|-tB@{Qbit4V-U<;-Yn zc06!4G2m))KypohGy=H)kD1PKV@=Catc<|dV-!RI!}#x5oo91V6q z&Cn2EP3A}E%|;90l5yww=6DNN6#{rDM}`hLt(0w2P@o#F%A{{VXyei^@PUDufxQ4LmJQ!&$}6FINO4K{3uFVOy0D!h?2_hsmOP)!=b9 zI>7FrNdoe?Zv2fW_>vm_`goL#2LoR}#2!YHV~wqDKtdU?MS-MAT5jyvTNMxF5?C+l zpt)ElSIN|R`h+5DfvbTplsA6PA12;O#nRLEtT)I3#UqCzlIK;+13Iu60+~=Dtg#;u zt5a4B)@^YC7aTb8%lNd}g7D@q)`>R;haPVnLF{8#Hd&HiLR`!zxvFGxsydBK*EwPl ztPFq^#VCz(TIR7Tjh}cj7N`V#q2S&L^kx8oPm-K)vrb@KHsd=nC7Jq>z-$sP(2Nxr zj}6fMSY5<%RnY@~d^&OX)BcQd@~H%m=NwQKHGp22B&c01$thcznd|?!(A+uf9Kshe zV4Wg{d;1xoCjaw<$laqZ@;mJiI%FS$JNed;)TXyGOGOv*I+XtjFaQmknFopJ$5Q|R N002ovPDHLkV1mzc3JCxJ diff --git a/modules/highgui/src/files_Qt/Milky/48/112.png b/modules/highgui/src/files_Qt/Milky/48/112.png deleted file mode 100644 index cc91c94caf2c9f739e2f60a318e1eab5dddd8d25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1326 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/114.png b/modules/highgui/src/files_Qt/Milky/48/114.png deleted file mode 100644 index a44368aba22be96596775d534335d8c1631e3d86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2853 zcmV+=3)=LFP)LjMlXR##pszo+6m8uB^sn1x-TQr^H0%%h3PZXYVuT3^OAr+U17LnK^T2@9+EXdv9zbBO~-UHwXUM zY_k(o$)dpk8ZH!D(& z+;=jOy^n+d1BaA%!$juIn@5WlEfS#bXY$_OUb=YkBGuQ|gWR}@jEevRhdq~Ze*@B9 zwrrVUBI5-f+6$PC($2qhxm=!=D_06r33mSO?ru7A_%K~! ziK4f(v{GwJi}-BvZ+(xt}3=)eEn+Y=5R?W==_ zsC4tobmz_;W4^_U7n9rV7FeV}M>Q>s>FjViot_mdRuEqe@MUkmLx&C?d}w6>%%=3^ zS1cqv9uLKHC-78VH(-^heMYUy>RW}alBryC?Uqu{;*>weR=4hVM-|}Db&=|^g6%Y8_tA^p(@3? zwY8PLJ~TGdK|S;nE-_GE3=RxZQgSlQO;0Bd!{naproq7hii(b+GGHaHr*CIv0Y(kzHGiDeA!F-^?V9;r`J?PbW^CppKgzwBgxbkY>}!73HEB zmZ%yJq(W5%mE{!%uIcP!=7p1410HBVN#is}00kNygR3s?;mV&64Gz)l^f{u)yKw$I z-`Ahloml03{OW#HUsp$yr%a~o++3O zn2lxv@#e(U+S(?72+6S2H3kN$2?8L(pY`?kgROAZy1Fakb46IkZfzzi>3*eBB z*?bfU6=BdjJ3DmX%6uZ2kmyXHufLD_`ucv|DK)o$C&K8QQ~uLIZYlF3?0)1Q1BF ziz8AjqDfE)HOb$IM35q~D?&6%7mR0(J}@K9qx(soC(p19NuV*51}c!&l?G6ht$1n$ z-Q`FD0uDnuE{ir6E?g*p+-5TZsD7!5ena{`%RLs7C@}zZ!GZ-MgpQIv&*5-5MU;Yh z<>uuXej|7D%0m%2fG;4nD-uugk`fYzBL`35G?~#)dBp@0Jv}{w2tfK+a{WHN<2A@MTn*UAMYM4URfUO+1b3 z|NMdiQK!If02Y(?bj!}KK?w))C#EBFyzw~0sOLXnpHNC6|p=wMDG60XV7acXfz7E%0ESn>29hzFlLV@oXLI~x+ z+)*>3K*TPfG9M7YV#d7f7`!4ozzlcuswW-`5rD=Z|NP<$tb`~tD^p}=OJS$kEIA-0 zHAR5ceb{Ei@KD)U&%A!&up*4g(CKaViZEOHn_nBb0;Yp-jSb+iYhualeSn1)lqr?% z+$q%QZS#f*sV+ksF4>hwsV!I^x zbOw(1pQ>tcMO~DZmZq;!ITu7lM+?wsINU>R0|$MgAYWV|6f<~a>dPF3m_$VI_j5+} z2KFYAnUN!+qM|}R*HGU;4Gr~dX4lR3!^D#~nk5QNg*r2X)DdmGI$7+zZMoMu*|<+B z<%tbU%7bi*tv=L1_j9mkzK3-&!ZSN-mpqX<@KDc*w3_^Z!dA8U2X5D^y~-F9MHq)95j8{}W&UX1f2Yd5OM}00000NkvXXu0mjf D2n29e diff --git a/modules/highgui/src/files_Qt/Milky/48/115.png b/modules/highgui/src/files_Qt/Milky/48/115.png deleted file mode 100644 index f8226fbea5e745763e375cba15c06164e95139ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2596 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 bzW@UOK*Vn1)luo100000NkvXXu0mjfOSoop diff --git a/modules/highgui/src/files_Qt/Milky/48/117.png b/modules/highgui/src/files_Qt/Milky/48/117.png deleted file mode 100644 index 54db487ebf841f8edb6f5827b4bf2dd0ee78a675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk-=P)enT!KA|z!7o^R!D3(0Nj8Za0NE(0SSb}0z{;UblWb<OO3n8RT-KoLxi zJS;sYY(sIhdoT_o$H9(y3}8(hmPfo_9Q2O%A@n0E08$7Lcz6iGgXiJE@tDE+nXc1( zpw|X`_xj}hhn)aVUpzX!clZ9QquX~#EQyGMC=ND?vFVx+)`aG3&;-ZF_Ioc1M!*sy zgalxSzyKZ-h_6r{zW(_9jBfI9CqS6-$3 z3y4??l+_4ajaHceHx6#WVD=xZvXFNHCO^UC{%jE+V-El&^NnB;V5tg>AOJXqQk68f zPge5Iuj>InBYAJ4;YpD1tYWqRuyj*QBP+q$tC2eK6@t5=iN^-V;1oP*iHTiZ0p}eA zk1WE(52xr&s2P@C@9k5vFa3|A2cQE0l;`=CSv0XEi;<4mQbW%xD?mK}(=@@wnM*5B zTycgXHmyEIC(lXCEcstFaS=%?O1m18V4e#_e2(!tox9Op#XqA~q?={^q9r6#&3c`S&qF(pc6M{PN)IFea!nFwbIjsvqD`Olu7Bmk#-C>$05*Ho z=O`*b4>9{!tALwZ4@3>22LMq8xkp`g5N>l)ovMN>5LS?K9yhX>*i``WJ>0~_HaYv3 z0H6oiX(1`T03fsmMgah=iJ8G8Cw3J89iQBVhhfijp08gC>NT4v-)*!+Dcf>^PXmWDQ1_l3S8giYi|R_%jb)}bt; z6wiOnaQ<_CvjkxD-)RL<00mG01yBG5Pyhu`00mHh|8)EnU;wa-7A@9RST){$KnOGm*#d;%mkJ@luj4;}-zFiro^yMF%3yh!%TL_TEsei1C zJ6*eNwqz&l+IGhqC%EWGKmIb!zVU0Ce(vY=pToS+i1?dN_@kfx^c+q7>WB2!GvT!l zp9+rb24L6fa-o?p7d<@nn9%$5ILNclfiJiWq3{17`tGo!E{Ge`&C$S_NumA8Nqoi{ z^!(^&E$;5n%x)02p0b^_t6k{waW2|9IVSXdZ35&^UdQO+@ERWY_Aq2pJk0<8#rVWc zCAQlOuTS|<{HW0O_!*EtzRXMuTyq;Z!sj9N!t-Jwos67%Wj(Q17uplREBz?`?65HK zl@U<>bCsPeHU_}~cjzc&k^l>T`rD2W?@xN8!I5F1ZR!zF?!Kdo#~+{?1>!jbj{Ye~ zU%V(v%S(|{mntC|2Kaj)iFS^Kg@LC|ftvmoY9^%%*pCUq1-c+JuR`*rEAfdNwGi)p z!4nM*hf(|xsHqQ%;z1WrRilAB0Is8>uz2ZJQCeNCfM^KdD>y5Yvb-{@Zn=Z`=f)PuHMnDuK#J&1khAX?}^I??$E=q z^xE5^w6<cPAv8$u5 zXz=6_p?$I+w2h=8oYD&Mdb5m)%M0$_K3IA4x+sa6(+DxQoz88u5MDlgWV8zk$%XPu zlya{rnrSuma?_u4BKW&G=$sBmXFu--5u2 z?iPIHg@zU~yfKlwk%Vxh7Yd83y47^c)1vjUQ9{j`U}GaBaGcwO=59CioFAI@w7OCJ zifQ=@*Rjrmbv78NqJV=a?4Fi})9A$z#=yzLLU_6x^2?cGyb^uhOc&z7bR{!$l{(&m zmQ~8aS+A8{NFUok5GN0=U^6UVTS!n@jSOGj5F5@ye?f@OlZS-CDRigRtZ|Mj3oiw9 zwfJg(v|8VG7K-9I2M^AG2gRooRM8@zdo3g0_d1|M47DIc2jo|BWe8GbePRPZOG&3} zeJg-<7B~k74!;YQuP*80AGxwA?#n`^XC;K_7zzr5k9I(gLC{(V({)PsmW0!)S+Keg zEn42mfwS2OOS4M}4CKhjn_J?(t;FTjiV)$TF!04ToQb^YGUhA*v7LbugsmGru>| zx3Op=5E*}8esD4H$0HDJ?`aZ3VMBa%3f(OW*~S6}G7DmsN;mFou*x$so{;xH3%%G4 z(Y7OAAvECMyZGH8Ea}wYbLivD-Ha{7eF41Ch2pzVe4h^r>xJ4H$SQuPAl_j;(A^1V zf-R1l^P4pg4FmiE#kY2Ngx-)Bq;<)*bf`(8q)NQCq_9b+)^)+@a{_S?*h+305ZC3# zYoXtDqUGD<|T67Y}5I8VG8Gn3dmV%>%mwlY534 z7^!mG^0`_(DT^m4g2!IY$lF6`wX>kl1eO*oL*u(6-Cc&T#)4+&Mn<1olfZ>z1R0SxW%j-3O1)dk z_KV(9;{D6kAE>b!!?sExbmi=7MLvU&UU*Yh>2+ z@|x%i9*UW(`{VBS7GW-%Q-5;nULJT1EPTHH0<~&IwXV3#q6*H${Jk6#ANl%SDt>j2 z#xomoY-Onu!Vp{(tuWDG2v?1N)~ z#F)?_jCeBv0)F0@NlA-8{;?L@x0P6ja1!BY3lG`6W~O@wTHfI#kQ5c&^50H^xJwlq zZSrt}-^0OrRxLtML%fgIgIJce_!GCa*uK|7C5WD84zd_r%<^swv{Xjb#eXNYvv@0n z*F^-Mi@@5J#=HfBUQUOQ6&nB2CtB=*?FSfy$3cWHAJJd9nAH;ah{!X06mNxK&tV2o zsWAf>!142UXzYP+Xb@rqPhY?*S}={pzMHO3ymfnun=*kILHvuS=jgNhwj(?EPrd_y j1Aqg71Ax68{}W&U)Vv|XcY0W@00000NkvXXu0mjfEXXC` diff --git a/modules/highgui/src/files_Qt/Milky/48/119.png b/modules/highgui/src/files_Qt/Milky/48/119.png deleted file mode 100644 index 683f36620ef1e11e562e287588561cbf8cc03b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1786 zcmV10GRTMunyItB+bi3Vz zT0^XjX+q*dU*OGHi1>`JCMNjO7!v~|KKY{l1%moue2^Fu(Etku)3CmFO6tB~RonylCs7Z+##)ePuuVPRpWQmGuC-Ym!)*W)aP_hkDJYAgO8(o_wIc!k3gV7ojP@DW@2LE zf`~rVcpfOjqz&?7{+|4 zJ&Wz0kJXJ8xVu`1#>3xEaBi=E^xBUNr;NsNT+WNS2EN%W_@sBUaT%`u{vA9&Ihz2F zSjP}Rrin=4vDyy~Y=!NWXJPALdH=7sFN;9$F%p`epP%HlKT~Pa$7#@;U5e}1Ut2j3 z)hBlFpmman8}KIjE(u8_O7^9JLD)7tHv8r=6uoDusPsRnO_eU6e@6z^+pAD4lpu=R zz@e(B3nElPR7w(j%%Ws&ptwcccRwZIxL=bvzkHIX`wGJBcQcJetk`b+^^9R3MFh62?74by-V=LxwoM-RD{td#$mKN z#xaFM(gbt{?mWB!pMCol zOpHGRTS~(mW0<5mLm&aa2?9X+12A>WatJVD=a3k_dF*(PjZn{7uxw zj0Eh;$e5Y=8d{{X5h)L_>}pi764A+vz9C}DXpkv9NS#2}K3Y0pflKg6N+>b0DW?iN zvvZCI=;BILhA3{4=xgwyBOmJnU+p9=Ak_y*77%hI#B^6yK2RN6V-)&#JYX{*mK1HC zfufrMU4ax44V;!zO~H*m7y~E23OFTU!E5uTeZXW8P{~rLM3C_kP_;RVT3HVW;NIv5 z;A_Z;StDmlXih0jhJLTwqmsGEfLB7CtRT>d1CoK1iT^?gQQ+DO#y1F-00Nnl@f^;$= zy#-@%S4HkiJKh6tihKA7=*)+14sfMPO z2J*o(i8luH(Gndtn3D$QkpQW*s83R$0bK1fdz~qjnD0jC=H`}HR#t2VV(D_Gm`cV> z&D%1@^nAAwWA;6&i`vgo`d;Q_RZ2kThMAI z@0koenljl)McJDLkC9PJDD8o@wYA#)R^x!UkeC?MlUX1?MSB8_q%^hwx-W*%>k0Fi ziTM(8z%wu)r+}2oyetrZV7E+g;BhAwL2fwz zAK*S%Diua*&4+DAds1&ii&}$9hxT=zK{Shwo>}HIsL%8@`yR6A_iU{v%jsI?9~@I- zFT4V4!;SVvN13WS5ywypAR3@uNTz`^LX72rCi9(U1g*7pZQ2%4=}oioX)G}TkCDuxZhgh=X<{Xq?3Fzmmwgwm*$FP zK69urP&gPC!*Y-&K>I~ns2004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkbCrLy>RA}DSS!-;Q=M{eZ`I0z}V~5-?kPs5WrGt!HX#o++)(NT5P^R7`XqouY zX=*l2-85}$Xw_BfpF%fjTGy_0tC$#NrJV+v0yHfQC=}w*7AQ%HbAj9wJBhE~#XIM< zKjVZzg41r=C!M^G{rP>L=bY!9_q?ACkw^sp&zC9jAA`Y=^h6gfTyW4(V>X+s)6&wa zQd3i_5^SVExdGBPr1GBY!s^jZgd z(}E_G2}Yw4!C(+X#62`Lw1?i`wPeW>@Bf6r*|TS#&CbrQ%gf7ihC(5P!(lN;e}BKQ z#EXd$Nn~YZ#s8Ni3BA3&?&0C#ZOfN0|LDI);PmO!4g#>Jq@<*VzY_=qgjbuJo6*tH z;YmqJX&`Vei^bw1PkRar3rnwGzg|lJS5pM4nZ%qqb3ihK&1Mtd?d40BtFEf5nsPaGxm=5B;AD5wz5zB$e(@P4 zJ}Buuv_>sO;_Yck=RwCo@+iF1H+wbLYOXm3GJPY*|`VdKV)>ypX=0$QVQJbitAaqw(Dc@XV^ zldxx}qC95-yuM!a54Q_%3uj=gGa`tHzh;vaS(yc}_z^??Hi7H`?IrD@V$X#7PUuI6yEL|7_1`1aAW7&f<{qI?|_aoO@Aw0{*`Q>mpz(s;`qLijd zihz^D$`yj;!r;&M?}H;Z6?wK&e9`tXBnBQg!x$2Qke9S=LWo*8FG2UvS&VqQQI@efPJ-9v{Ghc|Y?+k?^I5FDl=I4ni58E1)k!T}$KLY?r+ok+K4!fDGD_eaQhZ0S0O8R>=S zGrAxThA}sDop1t6X>f3m3AmCX!0j(3Zf#Lf5gL2*ZMC*jVJJsMJdX!V>%W7h#Ho9Tj#Afc(~8f-=eNvcn7gx0U3s`vr% zeabyiv69{g-gx7U#*8ARYRL8}B$ENd{{AR%$tXbed#+)1(GHYl-Xlt(kP#U*bvS+e zL%P?1^&2*V`k%No*c!Xu!{-Bs;LOMtvZE3!h&XISqQ4v8ne|g#cMowg*KOaveP_}; zG1dBQO#}N~Gt+00UOTBIMm?{nl+*zU4_3Skr?nssULUzv+HCKHl}L9{{%|hwqP%yo zEh&5mMfOE_|I)9BTsEhSAka-YQJ7tU{b!#?MdWc8wJEplP^C$mx8Tm2@;M99IdGXu zWB?(VTIaA2TEK({=e-mMueTR^O`ku1KI~LMat))HIdf+GGu`<9JbO9K@dC-Do2pYl z%+KT1p7SUu&O=k+4|S8_o0LF~qolU2zbU#vY?1zfF03v2A*^QmP2hFo*1&GFB0`l! zCp967j0)UW_9F}o_S_&r7KnJDNF%k=BJkKt*;{StHs|2T_4veo{|Ksb9}?b6l+Ab& z4A{WON;z~(@cQ>F^VXmwZ6yLhUyMYM)Hnt&p!)ut39G&K@yA7seB z2$sxzD4wi3kcmh@RVV_XTY^s{v8G}hhKGh}9fj7@#F{>32&$~sBuyYcdv;A{-<9}; zN?1jS{ca&0oxnsyZV-?Kfy4+*1fDI^R*1aRh4Hm`Ot;&~iCT411RnTF8Z~lOr>5MP zFcgqck$dli;KvhTuzsflqjuYb;K$Fw*WBFI2>RqG30l`P+=tAJ+~f$TidNb;)DfSI zN0|teWL06JXGw`*6fJ}k9dF^|d8s(IelhBse+yX)Ob9&D@*U*}`(<7`772}aDtzx5 zOUWJY#H2msX3fNazYPY7i!`?cGEyyeoH=s_`}Xa_%9Sgzb?a6b0wa)mnjx`lNG>Pj zlV}ZG61@+f2Yl2TIbC--{d1CHf`F3?1BQ44Cest8CrC+8ukqcXVR^0 zcSL~o9_>Cg7&P_}lZrNBbg&oA-N}dr{D${iZ>SI?bI70XIiLRrJJ*CTh#I zPqDas{TL8>_0eBjOg8-D;SbQ!dr`11X}tu)JI?{TpMdhr9%w`&F%r6U^jxBO3^55s z32@$h^k=l)aTVe(4SR+?JXw^8MiP;5q2*}2Axi|IAMz8AokiL6$SR>MuYvODOXLz4 zOs_o-ZPYX298JwfVKf`XTDr+0wIS(^Ob#dwoXlD*vG`cXr!Zf@J0=1Xf!7cI`Y12o zjL@UMfz;ZB)Cov%$!_gEA9oh#P1qmiJZP9sGj}jJ5{e}>lTZ;chw$O2e;Kp*L?jZy z>tkqH4g5@kB4K;&F+_ZxxD){6vC{FMn_tO;?WM(5c^JIM_p-hZL)3 zh(7p=zq4dAI*M&d* z^Ss!3%ZrwxD0iNCMk;{Q?tQKIOR)(`MuTud?7$QQE)a=bIH%MJo6{6BPmL$%4dOHyd}j*$T8DyM}Xh6=mbKeibW2ZgqJyNnME0} zP{rtP^9XMv?v`6MT#=~nZWm^9N`6I_kc|>n1OYjy!tYhi(8nn;hsv>>HN;-46D6@B z;U@9=#9xD-(1y~%6UsEPLNZEoq@s9X9@4Xt|8+*c?Ad9U`K^4IQ%pjlx&=l<==fYY z7y~~BQzCBZW_Jl@x^dW)t}Edm_`N|d?+2_+IT$^7r=(d%Mg}ZD3y$ItHC`iA1x-hU zZrX(3ZU0Q#9*IcJdO|gP~@`PrS5GxBlqZDs=OCV?b%prGNaH)78!HCKv&q0D??pqq)y^WOvh~M z>L)CZq}p&FDCS}|({DGMS{_QwWOfVGSfN&}jh+DRQqo%+W#!Ajc=F)*W4ovLl1 zBGj(!1lbxID)K;r5(I@nND2hU&dbmH*g4maT*oG{0|~3N1BY|&&GpUi`+dLXF^r-p z_%;t6zU6~S=i#$w&k78~RO)m(khOW6$!WJv;Ee_|db}?5`8=m(S=z8~-Idly;scT-2^`0P zIy}+1I_chMG}8Ub=yRJ7PT7-TvL4If^Ld?~g(Qo}G-qQRU+CZr=BAh4Ev|Xk0N7L> ziV965Os$VH9(uTKw zdbM>d8HfX+o#$^K7g&Sgl--^y==FM4csVkq*p$@k3@!_~{3M5wH8oWqnN~Aq3}^vF zhhOZ&@y6HD=564!Y*xsS2vv%zd4*`4uIfZ|&&2k2+XTW!&z_f#gxPqz>g(1~XFv<$ z+T8~H=~NYN`5Ry~8Dd(O(wJt>0y{s!VPLtYEzYSmW5&SgO9yf0#t~%LOki|O#NHXA zb*gRMfVLwH(7T9Us|>{Nd21f;_4V$lK3u$#Myfwwuosg#oL7OETW@8QNZHV zqlpd2eI_CBC_{KTvx)}R}}sj0jf4GTe^2%agz*5!vFOj(*# zAy#uP7L=^UT~|BW?p=i5pfRbqHNpyI!=R_xzDN?K^+I`Opz&l+{g4b)?6B}8Ksc>= zmP!k6j%ha>MKo(96VqSf_4rZ#_*Sf3v^{0VtH1nr96R?0U=Bj3*F_kJ8Y2^9FUp8& zn!W)1{Q;GYLtAgPCIDFeve{wa^s3ekoW^9dD-Z)B21xV}bFgvQ?=horQJjFjU=L0< z>_dmAMfIDK3G=adW);lFtk^TI-douJ$uHmvU4wz-5+*^NjOJc=FH1yWy?&1v6n8tf zweO9YPKW zQ9OP=rj0Md2lczKpm=rcxeU&V@6Y-PLd5)9Zhk?cTcR~9nt#-YMZ_|gST$13dDh|( zmSvsSFWqc#WMrG2w(%Afr;^md81+SBP(sk7!;4GbM8%@5AXzk_xckdzuVC@)b(k_v zKz++UV9(4ag0BJ%GVNV0D9D)^AEGBM#I$i`xN!Az1eJcmm@d(_m3T!`{~=aV6zC7m zU}ahHD6~A5RnJURK_udMd;FNpe-Ar;?nH*kmZ+^rZ++Kw10UAyRc*V&eHoqZHe7D2 zS8J!aQd6FB_YFLC+azhTNWhUFb(Qd$s-OiO#ERe!BPzCF1V>n+)4UaNH_ zvPvPDXq~~T1v~Mxir*2fn}%+F8vjacH5}8wxpx&6^S9xNk{=?=lnYS`VtT=%q@SZ~ zK2cHut8oG@d|d~|AjJ}9vf*|6A&K%Tm9J1h+V1Y?p*O;zOb$<9PXLx+0bbwuDV|%j z38|c5OeYTg1EC5#*1SjGi+uZZ6i=Lw-aZdX@)tzPkK~h%CugofO~p}UiiIR8hT`O* zGvpW1eW%Y8@P$?#-Fc@~^_=TXN=v~^sn**a-~)Yu8C2{2ZXe2pYV25h5Eip7c@|_6 zwNo_lyEyXEYii+l?$XC796t*euGhld{|(B^UQ8*>+AMikJZCN3ZWpe!H9#W1N0X$# zH_+_s3+z`U`N!|S+Sz>HO#I9X`l9L|z2kU#-t$hA$&^}iJqXOHbMK?m)24>q*;Ajw ztSL{8s9bJrIn})HWYv-nUUPZUDka+5+8jjqQ)aVyS4H&~cajXX-07OZQ#cSHI+#~s6)O}zuh~bgdvD;gQIM(Th!F#bob*-Gccwml&T-7!by?#DawG92tZ|Ov`r|LkTw_))vToYKSI?Cfm8VzCTqMmO(VL_q9SkI=*4!VDZqs^_1~z~NL^f4kZ*-%lyjaa}GKhyphV zg3vr-0OZ58k)GSs)U?av@lCog@n`srv(yKMX^N@l!w$7N*jeXO~@aJN)#H=C{iE+siKrW8iYzKL5UNgKvkrY zmJp?)go^M8k*ZV3J573iHFgu*>&N+gce}I9?9T4ZzRqU{geo!C+|J(Z&3xbQJ#&^! z)5QC^$#|bPsoaNOf3c%mmZfg?lq9hi?0@c&tJ;5R@y8B+@LrhcVpc%AW)kzyFYL&q zZ;8Oyo?DTkV810R^5ctBt*NHe3Z#B68u^`ee^K9B5l7U`kaaCQ0wos(c$ z(`q!xG^@ECWg7~(9Y}WiU@4^QFB*3o;b0-b5kmhDO?}BVu59Ubbw+( z$4?)=Vu56xfp>rx3I(e(G7PjDQ|+#*78#2Gor8T|$QO{C$zej9z{$4{;=<&sTr2iV zvU(9d{^8FdGk5|2y7*U(7^LU$?i=Z{PW<2x7N-Jg6#F%=C zX@j0`8ydfe=Z|m4o?qXImrm}X8l4Q75(Cb(V|6;7%8ucU)4u{#9Uob9SBh%>z?@Nt zvV3;c%GIgC@pG2hFqLx0Ds?jdaQm}k+i`i|6tYAkC(5C?b zI4KEAl5LagAHIP053Givlf97ysH1c*UEYdpPAh?RCT0UZFv6o~f$5x8SY zTm=rPfsylQS=!eAg(qseLJ1hU(G{z)qXdX(HVzqnZ_J;74c@T9(<|{22>Jk*KEG!| zo5@Wh*^s2L5lG~VGmLzw22{pw zHb28>gdH~B6}*crgn*UBdBipX8sJIIv=?)wZ@OTtal@hpNpZ`AM zN-gxffigCmB5b@&iaE zTG7<7!d{S9sMf<&+LG0sJ%r>+m4Uh3e+uzr6%xrf&n=>~1=|-EFQ)-j%!D5IGQ-Tt z9#q%GkvGRMNDD9VK~MOLFo&8{!X6rCDP)&DPu?Q4R_c@Yy}g@B|kH*tvH~ zkie;jsM&Jh1r3ujb(rebA!eAl`@lw;k{OKWexdj$@_{Ajps%$atvGAxRu+CYoB$CP zn@i0eyB9(5&__2$K|%N?HvLj!HjWL5)$B!eBIeHT$dm~uH>;zn@ilt)bhHVXfmMTG zMM;_hXp=-9KOiEIc}%H5+R)mVL_3h@kZq$0Oe1{?IpHZLl!dCzRjdbu_h&F0Q+NMWvA03{cJ>|C{Q3Lh$^%a9J=g8u? zw)!7PNM|uQazBzwmU^C_xIP5EpntpXjmOhvf2pS=*aJP`PHhHkdp@<0|2_YhwN%|P zDEc3f(?;FTC*JKxA(!7q!S`15uLg_+?d$1~g{X{o2N({blI|xG2nzhNr12%>#?EV# z*E1OJzk>YqRB!*Ep6FfhzZy`pVm^`L+WD_Fx=uGAX6Ra(m79LZ?zMq8ch9-5^#A`> e`5(7`3ormi?ARZ<@0Mf$0000g;wt8`@ z5Qns!__H85a62{U8o*|k!HwmO>2@bQ@vWEsJ$+9B{N(fF^=c`;GQP7~kD^e@owtm( z1W3(`!)sIbSIxQ<~)=UQuZP0mo=D z?SFelD)oz3R-VP_iF*bBsUtX_q+BSz(@mgxWBoMp`n;hGSjx!5@PBOYj_UEj%7C~Q zh5?j|(a}40;yd|tlXM)dKqN!}0W7U`k<;mkXMXq2`=Y^*kBuEgp~p3_ZjX)MQvj76 z`=Bto-OxVhHQ|}(UwhviZtOcUTWXZXwS}s^>o~i5_fGtaFYiAV2Eix85T@vQAOedT z0~vD1pZeZ-ZSupO#%P`SS58eYzwzQqzBgM+jXeIf`qqzpZYulzg}=Qpef>|*t>jRS z#uXgTCI zh8h(ZC>0?Zh#@KrK&VDKM~}njBM9OG9%Tp%HHeB^ASw?-T-^q7Z70NoyYajMX?p>B zYwtnQx&i6>0;C(ukZ!I5>$ZR=9pGsfI7?A5hSw5Edp$_IJzzaOPjD_rI`3>IaI@8g z8%rGm^=(XoKNJ9d`qad6ROZPCCx>Cn5DFEcfFvj#81lkM&B-!2k}1Son?+GfnuMDO zBoY@LOwAb+a~c_jUQP!BkaK@z^b9^rfg)v6^R!lkzdL)q1sj{`$~RwVHewmm*^?wp z4Z|8sQt@L__y|H_HacfYcsXj}

          4@cj^buT@cIxL4tB2BnfN*xx%AdbZ`&=QUxZC zkix|nTJ5C%qbK(sl>iv8iyu#A5)uMOTnbOx=h^~XX`kf+$YwAf0L`rhBnYNJ*tr#6 z)Jpy#lo<$X(0y870H9=qmJweT+E)i6kn>O-sC^LBk#qtTp&$tQ|bvjibR zBm<>+4Z>1LIx*`9L*LgHAjjxp5r&>E<~$G;0)h}MLb=l%`Z$qC32*gpOkm4sk49ck zAm%C03dnsLrI~A~L!ri&BCM_V;KJL>aOA+SSU6M>g^?wMuxJhD)5mk*tPkWlvQtXC znperm@qrA8)BbFqW`%SN>|t55pWM4`5*i%d1^u z679^}>ZSh9%;P`gYTsPrGT>ZYXhUHjgnF$YDh25rc=y4vAu(ROyds225E$K~k-nI! zb6QN?)7mkIyx;C55Fr&C_ydi>0t{6Pu(-M@?k8$Jvo4bksn;}f2Y`NN0N4Bn%2q4K zuyspG<^>T(l^_wS^O1ww;I)hMF!SyzOzf)3oDhHvvyS$)CA1k_22oRUv(*!0prTxB zBN4xo)joGA#9iuur+w@{;GfN#LLs9g6_{V?2v8;pX~a~>ee9tT`0Ir^A;A98L7ChF zCAg5+&cOv@0C4ONHesWi`T$bjfvpcnff>(tVrp66dS_J#ziV4ru|eKbiHsR@ktn3? zM;{)6zx;g;-oCm9V>_!#>lqL^+Lr)QSVA8t#EGz!1;F~MOqn}#d_Xxf33TaQ622&e z*L2sEGl@(i5{n}Ovc$&^ZHHIS&xsnTUK>#5HCK^STY&cg7(Dz0eDqUOGPkIJw7PH& zg7;p5-eS|1#tiZ)q|WIxgPPy7y#hNLsCi};t*u~63F%-=RC_v!QtkGM!y^L3&fzkQ zG>T4hBU{OA4l5ma3>uGr70Tr@=shPH~X+#P7IC%oRRShZ9C+3=Tsn zJXwLlX2@kGrYLl1Ujwe7X4cw0<;eX2h=9dn5e^W(MLo_9&FB&C8b2ACQ`QidhS25QaWnS%3w?7lIu6xS`aosMlv+hq<$7pi+v(bJS<-+g%g+ zB`drRr+vAA<&@Pq1zw*Mhl(;Z8jZ6IecWQsv4WS4D=}2d1L6+tM)!0bq+fQh%*&2U zPr!1u?*MR}I5BaRnfNanuvP#s90Esd|?Uu0hz!o2-gSlB2t=ZF|*MqacdzuD1}S@D;fz) zWG#>tK5#&A^Y6mV4j%sdH``X`6mzO?&elUd05Fd1QHV;91=P^?MoAQKItp3A-3?yf zi9PxRZchx}&V*fyQm>FyAYn;hW}aN zgIxJDZz}uWk@=ljek8J%u#{SEC(ucQ*_WE_X|p^1nX&4NaR|ru?<~WXvH}r6js=|e z1x_=c-P__WrMTTQWtpw>+fj&V$~aa*MZ;VxrRP5T`)2F30r2UuS{;AkBp%1Ag%BFm z2-NPO5!Q@O;_`P@^0rs>TLH6GWUT=X7yt*Hc6LzUWWm|)3F^>}!-kIm~x-1A;fY@!+%v_JmoSSR2IG+APb9LqZ|CP88 f;J@_wj{pMzLK#@xVbntJ00000NkvXXu0mjfATax{ diff --git a/modules/highgui/src/files_Qt/Milky/48/123.png b/modules/highgui/src/files_Qt/Milky/48/123.png deleted file mode 100644 index aaa02f519df813c754e9858d249f70b89ac4de4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2625 zcmV-H3cmG;P)Y2TrMgv3+Za1pHlCFxTMv@t}8;uP$t z3QQl=XzpomcZ-Z*(ou+$4Mx3EGea=d|rWc-wp`J)6n;o!!T2L7s}N&>skW-lVH%W z0lHV1gBy!)!AfC1%f?T$FJJh@Q}4?Ug~0fCKQ_!xJDcuo+tRtI6KXXTDv90j$o{9G zee(`@nA=?LU6{Oj5-v@@DkH@szxu`pWB(I@za85(%-m%nv#C=`XWD>-!w?FGVEIlC z*5o2At;ld`FKV7*qfG)LXSc{C`(Ri9e)#m(gHWvG;l=Yup|rkwjVuDlPcU)pK-KY{gH5hzs+Ld1v%BHY(F5?n16&w!%V zKrY;YC3yzQm4Zg%Q-dS$%h$ijNsRpF+p}X{SR)N*g~0RCSX4^1CA1mhHz2~E50#s1oauvS%xo6?G^dhWxNkKC@e5yU}Di=`fuTfT$nx8COwddxd2tML%XQisG@pr{b}8jXuT` zz}?kbaBcP?Jt z1~M;~V16zKm8uGx2fLxSFJoAOe@`@$Xe(CWCS?LeVu2@ST)5*?v)1hLRoL1$1ebFc zArJxOiDwU|yZc~060uJF5HC2lv+&Mq&p}H|9=bQSTQ231%iN?yV&>$dJ?AICt*c-kyPh(e2x}yNNyeD98&luzdX$=;~=R+zf^6;;gss;y_&Ap~t8C zwpv<(SZk_z0<~IgYHn^$X22wm@1VGth4x6e9?WK(pyn;EN=BR+EMSdWEiOT8OQLxK z2M->U|ML9 z*i|oNB5)(Bi5Q&dg;dB?4f+T@3t^x-ASDtBsiULA)!@YAaR_(xLTy$t`dO@JAw*kR zM29t;E=0WC-UBB!dgrDI95`@bYV3C}pSt1hUfbYpiCLZJ}T>l7C57D1^|80v3>j`pM;#8l`F zKnPkyXI&G}6L-e&jbc5BF(?5vGA4iHfAQ8ZJTf4$LdIK3qRqaZ!qKLML^tvRtz{~} zCd#kf0)bq}s(z^ZU&tt2_CAOjH`iZ=;CD%cdZ9vlP&df?E(L`T;6hZW13EzJ(aZ^j zOyGdln+Gw^Y(u;n5djO;EgsYY)F@IsRLdm=ZY`Fy)wo_37aO{gx-d5CfX!9V@D)%0 z_iA9Up*!g=6wm_QUwi&=ESZK_N>|iejd!t|EZq1vT=~P#Asi|}S0-Uu$_2b3Xlz`$ zT$35F5?{D*VQ=@wjibDfIk&;VK`5@uu=Mv6&?&|0F6IXug(ikH0NlU=lwzA5a1Hm>d0Kctp>Or*SwTo@T7@)yppfY`N3%^F{ zi~~#i(81oKj09oYu5GAC8$*ir0JEe6dS@JmfV;1h7Ni6Xo`pc7=DH7m8UvbaWerUT ztT6&Y&tQog^aPI95(+j^10F&aqGlm8q_Q^U9EQ=I@iA7Et@Av!zK=Wk0!Duqf(If% zjRs6x00k)5R8Uz%)1HbNW5lS$*gSC0Ohg)5ff~Q)1R@ab`Y@Btn?PYf%xAk$R^YC@ z4*7){P^RC3&+P1iXiK;r#KfsYeY!6ZG-BrklxyaF{@m#lZCZng)8;h9q>h>pF;9 zY8Bl*qSGp1t-kn!_E4$Z0~mp9pdUEC^=fvK0hCJ>RdbU>ECR#ZGVqBVov<+z2lIDg z(}he`s0oI<5o<&ee#{z9YGfU)Abq60+}aD7j`fEgBP z1e~IHo`b04m0%tqFRXDmCxR0|e0sg2X7i<*03K|6>H-S)pK%f)CpR+rZpMWdhdnzmM0nb zANpYo-EVFFnLp1>u?IcQirCc3Y6WU4wUMX;@{0urIR|L!umWERZ{LstrJ}&?Yj^n% z+#?N_Ae;SPiJ$E6mDst**~eq)M2p0Ony*y6oy)=OW2!5Q5b$3{@mdDr?h=VcpvHhN z&&XMpb)IH3Klaf6*+blZ@P(c)v)SeUg7C$BN`>r4D@~|MyWVl0qAFA_=E|3Owqd}h j{2H642>d^7{}o^W)-{BiRBPp$00000NkvXXu0mjfP#o{w diff --git a/modules/highgui/src/files_Qt/Milky/48/124.png b/modules/highgui/src/files_Qt/Milky/48/124.png deleted file mode 100644 index 273400a027a88df7f4bd570d2b59dfe773bf4d9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1913 zcmV-<2Zs2GP)f_9>#-#q#}|py1p~x>wC}n-gmHMG8y`mo0UHCRv=IyP$2M$H;dVqFJ8QG zSuB>jqTdj=E<8inMNg$te~SL&ty{MOXO4gX-UGn#c>I2Gaq*q{`g$rVDk4cBolevG z`Z|Tf;U{HfWxpI}!(4es``qXnV_#q2kST$op`nLD+V=roj1-MVskXM3Dl01q_p*V& z*47pU0s$&1DLJw9a)H(Z*E|b|{?pByHy<7%@cjAn$1oQ~QK+u2E=%GLha-ysp2cD@ zb7J;0U|uxYlb_E4=dZa&oy`sz2&+3E;dh)`A99FxrU-SJ>qG_3Nh69UmV@ zLSx&^)v(su+8QMi2^I$ON<~FQRt~`&kl5bdreH8gdwYAFgGx(F4fDc*BU6?Jv<;vd z8XB0bBzdTi5~{|Wjg1Ww89OKV<>h5w1DZmPF-lS}VSsYG-5e&drq}D``5>$R4d&xo z)qq}20EBV@0L>B>B!;<0J_3m^E-o_obLY-6I9&UDK3Z8>q21kG_63{GMpac+Ot87R znXjSI`T2Rqfc>=^mi1Vc2J`^H5E~2+4SYmnw*Na zDV0_PsRR=P=&M(+vLCdywIN(G39O-YZrO8c01Y;H(r^iTh8@G+0Uka!Iy%ZiN!kLm z@17*5D???@DxSZ#IZyU*17(6eG%_+m*REY-N3E%;;a~!Xg$A_(&(eTVWWaYPO=z%T ztO*;&I5|1V;KR;$6sR1g&)Ns5_tKYSQ-t}6zs=wh{WkhDd6jomyYmH2O-)g6Z!en@ z0s#C1g3#hcx8g&~O5f!~qwmZ*BnC5te*ie7n6&PZ-}x8C5@D(=t);C!FYSgmC>Zin zR6KK+HBvMcp!Jg9S$l9|m<==`D+K*MiuT4V10N@m!7)J^1TX?T=N0?k6iEg|1!XcEh81%4b;g0mw0 zVl(_6(qz9NkqeS>E`evgW3;mQ4;2dnsZ^Xo(V!qALivH5BIHw(EAj=_!#apYTFX!g zNG;?7sxPX{=4dxS2O%bqURMF~ePoaOe+#_-z%tQH;Ltiorh3SP@{#ya=7h~4F#yM0 zL?ZTyWGzK3K2mIUA>Fuc(f9amijB2oOINCE!H2M(%)VNG&CBWtc#KWqbvtX zQ!Nw{X4FvAL{3Kqg@yFx9vB_=V%psCQZ%wj<TqbpZ#ZIe>~r!bUXpihfqJ_7sja?StZl_cluRdRZsnCoa(=3?c*t$<;2Z!gB7`Cv zYcu|_d>|kD*UyF7U}Mxl9UUEf+MAe|psu2CXe#!EM#cxJsjh?E74;NPL}}IcR`|m% zm0BC1Zt~60vcsw5N zDA{EhkK#@42j`!gn`7{($7DIJmp&7~nMCwHq-p)h%Pb4$BCBsQlAwHET3Vu=ogID# zAAw_|%j5@>k*7de<${3rJR}wzP^BY01WeiJ)@MCnb|B1H#Ro1 z293aDM06AFR}gqA`VXS!b|KuENj6_oG9rfv)o62dD4CM7A~GGK(c$kUyX&0~bN z4utTO5j}eJ2=5vnfIv%2%Ljcccam2tX0KS_7dYjKfJ6bKXu6bPKA{VTu#H9*5hAVKHK00000NkvXXu0mjfs0wi% diff --git a/modules/highgui/src/files_Qt/Milky/48/125.png b/modules/highgui/src/files_Qt/Milky/48/125.png deleted file mode 100644 index 4e0573ca96662fe4fb731b45d1ecb45266490d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2882 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/126.png b/modules/highgui/src/files_Qt/Milky/48/126.png deleted file mode 100644 index fc4f11dca4054e669d3fd979ecadc19b4720339b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2762 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 Qy#N3J07*qoM6N<$g7N+%x&QzG diff --git a/modules/highgui/src/files_Qt/Milky/48/127.png b/modules/highgui/src/files_Qt/Milky/48/127.png deleted file mode 100644 index a2a7af2a8c46634a8343d1d382670cdd47b6beb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2475 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/128.png b/modules/highgui/src/files_Qt/Milky/48/128.png deleted file mode 100644 index f811ee479b198dc0e145d038fed61ca0c958e746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2383 zcmV-V39$BwP)C4b)im|kH@^HbT$}h5{(Y_+w@wJ0EyP(tZUJ%g@RI7>ikoeFwcYJPtu5o$ zn$fPQio#P{zY9gJ5I;ZsUMD{87jh@o^^VPLPewXlZybdg1EHI6kV+uK?Ad zc2PZ~QDcI_D?~H5k792h#j}0vHVBUF_XLll3K55kHrVF{w-sRuuzqU%6R4|M!Nw9& z1t>lso4;+WzM%jUoYlI*MIvSqe>8HPJlKtGhx3O^zXf<7FqEMb=5lGMt*XOz01hw< zj7(gDNW~(^7BVO}b6}0b0K!>uA{n--Wlh zx{^c@xBq_kXX%nuV$bU>&tj*ms&Y{*6bcLB(G4^lWJxt3r2>)r)ru!;3v|Go3p8%bllo zmn3sPIR)QMxNl>t$vWwX;36oI>;mV5NiJ@^+h5Pg-r}tj67(?vNqUu z{|b z&%0I-5*Ls#QtBe{jj2IM-8=^^jqS00Zx<3>&kyv;$Xs-F!+Q8v@=u1)=BkH8BzCAZ z5x}fmGUww$^N~4=2eE!?{2YQ=6XFsLCUbZ483e6@#X`MQ!sJ0TNC858FroV#t{gJQ z5jjqYsmvHAIMwVy0dyMC`&K&TQfWmKw-4}Plo$Z+Cv#=6Q7&DS`hkbcnd1m(n3)yS z99!sAP(F|x9>0)SQMcB}Ly5&gO-m4u0v-tXMH{z;fdbIs+`hJY+G*sE?T!KC$`N_-v#Try|O;Ygefd~GYXKxS?dW-_<> z4t5Nt0)gy1hhklIOILQbu4>0rZj9qXgkuL1fysQV$WGctTo5>r5V3eJRL_`pH+#5EWfx;;0^XvFr{zCDzj_gsiw zFCE#^fq?QxMWo8iz$7OUK;#@K$eFK?G$UPJ=@?TQae16zQ3)f^#6%S4Zr_(w)x~KR zDOu*Iv4}aFO`iSp^ZR^c?x%m-_6DMH$Htb&q4}P5z8LRKT>M){Zh}{S6Naxmaz8Ez zSi!-3Bq4rUu5;T?Z!`LFYA9qXr{O^VzzvogiwgYsNPE}%)sJ>O5#J4$M$f>&wNseD z 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 N002ovPDHLkV1hEbcSQgI diff --git a/modules/highgui/src/files_Qt/Milky/48/13.png b/modules/highgui/src/files_Qt/Milky/48/13.png deleted file mode 100644 index 6cb5c5dca70d2e1aea3e27883739ba0db88cf554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3016 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/14.png b/modules/highgui/src/files_Qt/Milky/48/14.png deleted file mode 100644 index 8d217be46416905142171d7291e46eecad1805ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3708 zcmV-?4ukQDP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkc0!c(cRA}DSS$S|2*O~v#tbUiX{n8I3SraBZbkU%gh(>-T=Y?|R>R?Jx`jd^sEr+=y#m&vPLfsf7jv{k8Hl z14fwU>EgNCmjBZM+@Oocb6hWh*WUSR$l-9dIUTMxuiM{R?4MUs+s1oI&h3FqYg);+hhvUiV?N7G8`qBqR;Kko=-dyMl z?po7yUrB+t2z{d`pr~;H)_mV#8;9>R?js3^)-XiNbF-8cR|^ZC?*Ajs^dH`@>Pq`R z-t+6e8%p5WUwriC#>!jTS1;OxbAx}vOk$GWahk%~HiI^c0Bi(s6#@oyYIW3=FB7qI z@WgB3nMAn#nazjxT{nTJe!4p3c6xT*zVyMil0XH{4;{?_7s9Y*>i`8OlBpQU47rq+ zX5ex8;CA~!7KAycB%lj2x?z$i@C2}=W*zn){}IK<+4dJdd2IJ}5%|)Nm%j0dHGkKt zs0j>=pBA8~ss4|9WlA-8H7%mkhfdwe? zmze}C65I+RM0{EO-8gjeCm5PI*S_;pXLtXf2t3)b_~pA-KHMHtBAAYiQy-TNyhBVF zj*dW8Xu|S)(GXgLV()^ivF!J9uJPErI5x5m=fZEIvUCwB^=81^+7%5Oap=SzB5|Sh z+mD?;@V*HA?aPf{T(PKi$NZ8y^o<=S;2H4TvPH(j16aM_udu3Ov*|)4KA#VMzaNoE z1bg@HMJyJ>;>C-xY11YsiXtSHN{PuM$q^j5_#KQUdQmm6QH-4-p$WNZK?@Fb|12C& zOt*aJ^B4Pa3Apo_=85ms*BATCx6d!B#o56l0x%PBI8E@;_!Nw!3tO7Lj!;1*yk0Lt zp%4lS3*qs21d;CUZWNGPZ3;#3yYmW4O8z=MK9iW5niBo)zxiKqa^%19$Nt?21K*{VrQPLD#1 zJFunsdCUvcVBWlWsH>|J1Q@)$8X6jKhkp!Bo+;c}kv%^5D=#lcZEYxI#yP&I2HIT&dk z2_GI@_5y-|GE`Mnp|rF#Z*Vbzr42QJn!>7;EAl1?m&=9u^XCgPmBA%=XvGT{8o3B1 z70*)I@Z@<^SKP#k-Ts~gbWPu0SKTC5R|%Yj2aSXyxUczZ2wC9Sb#enVi-@YiAb+QP zdewexg^G#_RE3t{&V`@D_{0d!ok-8mN<2UEC)`}Ww&BxXuXt=u0*^dDzrJokbL**r zLuue*5E?8zc?EYjJdOpl^fP$YUM`?n;HV~I3&2_ruGW{8!6eo+JcKe&BL#odnwylz z)=z}tD|FM4`qnuK@Q;DwAf}>YYzcCqlpv8*5;SNNR@U4rCUH_Q=hLJFrfC{!jkHhT z4OJo2tKxrtel;Q-8|;$zt=NXhWW>}yVbJM4T{kco?nSV$yycVIOY7x3?i>QGx=W$x zr$xoA4n!M|#PQLkTToV3Myu)U#Kqt^HA;|7kj0%+;N<5@5?Uf5!0MD)*m^8H7WcCg zDJm*LMQH=ADQhtpKMJ?k1#{sx5Laj5@%cFx+UUtkSr%y977Q({Y;GAC>lJJ{g^89d z;ZS^7S^qIHxcy2dDJxA*3W>+#S>OdQ`k$>pi;V!x&$wk02_nR61q-KDI|)|Qs=9kf zaY+k{AzBtsfpDX?SuR8_(~>e0W=G8wgG5QFSX6d9ii?Z0G(IsgA%OF}T*O%H1RNX# zWCdEY)8Os>xMk8zA{-8jv1E2yz3Age#uR~p-Py#W!|fviDZOQu3u&s>%B8X4V)rqu ziHJZfg@*cD(%O$kqnMtaPJ@uEcrJ-k!~5}eum{0a#n6>EaaUv=swh>;_>q0(`|N_O z6wXLeYD23KR?foda+(z^87LeXMX0E}5WPB;wg9n0NvK?~wX;qsDyqvHMW4aJ zL3DO@VrFJ03%I@RVL5oF0|zg>jOtY%N5RtDq0bND`v<>($=G1tcjPrZJdESVj|0j2yi_t6W_?c<-~lSOiSz#5|@!!Ek?>X5$IJG)m_=ECu)YUGcoz`indI|~J2Wt)mzkKJLcx3%^dBOMe z^q`}oL)@=jyB2M2ZDO(1$5^3GtMslPLwQNI|BVxuefng6`AZ!hQG| zw@j$Hxf#CiK0!|FX2&JsF40Es3gFUc(tMxRfE2|+N=aeV=$n;7<^KZ%1L-vT)?06h z;x7?Tq%|+WbIX_rZ!Q5n%s*rZm=@6J|NfD4sHv$Diw$Rwf`S53$MBW9`%yTDdIflg zMM6)U!xYsotYAtwG@&L+?ofGEI+fbNbIXgP4B|WPxWh^WE&*0|=dplhipQUhPC|M`#scP+H19&@_XJ7fG1E77BkiN(;eOQ5UnKxG zH8rI(iCq|&=`uR*yX_x@=H5L1AN1~J)K`88k9VIz-Nl{I{Z-IEyg5z8-m(>>8}TA{ zX}CuyQlwBhmo9hL=*lI~HACsq8+4}qpIyl5cA@9O|KQG*4+-DT2V4fEyyxfl-~L5B zus&0^I1c|5M#ocd{_rcJw6K$~3ty~#UflXePot>HC0qtJ7vj`@;D?yP?(ABqi>pm( zGMTzu9w&M)9TAgp4A}kF4nP+xcScx~ny6vS|J5~Hpg#P(sEu45UxD-OpJnxzW3Y93 zp2OX*Lv_S5>C&oRk#OaZklN=&akS?*@D_U0I5ewG&ZP1au&%w4i75-XjCP&s4-fVo*eT2^ zgLf|Qx%at*6tYBuEkPs-h=j)?!Q=7R?24C%&f@J;{{^?lmA!~jo177K)84rV>`G7v zJ7eiaePi#S>y$~H7c#pWwm`R_>j;NFZD7T=(&7Ql+jXwn$;$zlMFL!TRH1kWy7O*%w$5DqvjFe#D^~Rh>$J|?%qVe{-DfL-f5~2oIOjNa z+?t5y#De8Y9-j;Ey!$JB<41pkk+A_$220=!PVTgLd&ucf%B4$}(pybF6OxwWmAC8k zegfYP!qxM>(;Fk$0rPW*!LR|(`TUf_H#UVYb?(Efyyf6?1glM1WacEm zLG85>$Rcv<{rGHADYoGQyl4YAFnk_=fA%nr+d$`&yae19;Cv(mk?LkFY-qtV9xraa zk-(|WpN>WF>bXvI(AqZn9^e%d|7-#d8v(biwOc~S&FgVnSskA6_^yu#15eE0_5L2b zGT4jDmb<8VT*ofzdj+v8*M02Zt=~mkvlO)zjrfSa7_DwE)?6!S+7@(@#^2~WhCfUW ziPAs<*RDb$E10k4BcH<#Hiv)|r>%8-=p(qzp9=O;0rQRXa>m1_95&4c`OGAbQTDJMbxYjTA?)U4mwu!HWZ2mlY124y1=lp*u a*Z%^77H3Flv$RM60000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000PbNklCd0~v9$D42>FawGL^lJ5x)yNGCHQgNm#3EAQi-*}vhni!TAh zB`Tl%>G%FK-4lTOKYi~|lBVZc>+2_5trm_QKaK}ZoWS__Js95Ck5BHL#n_U%2pB*vQ$K&|(hs`^xOe>6`7Fy$swx_d z1`gb_2NRE<#_qv=7&*KHL#- zH{Zj2^BT@P@C=3B8fCjF@Aa%j(&X^Mp7gu zfiWotudm^&7eB_%;RcdE2eG=+!XF2)9&imagLCVl-%iAfVlkv$Xju<301*uTA&TwYPtOKCZTS-_YRI_4ZbgUMt8LVco zjE>c!wXuqe*ZzU#$}GO|#b8!HFlH-+QPlfFwz<0>c$eR)rqbKvXIcEPbM;l$RpqZ5G2G~ zc;6eX`QAr_?)<}rOW1MOFb>{54z)Vg{YcE<dO z&R@i_u~X1YJDQYYiv%Pg0OH@)I)j7pPC|s$3@`*V@naeRAt(fqfI=8?dm00y;hF)( zK*V5v`2&m$9zoilb_XCL-t(xKAEXqFSCA%8V!#_58*LmU#S{j^9ZO_<0I_O&6#=+P zV0}+A<-e#NkMGUOXpqAYOh)CW|0&Wl!DUv#ukUEHxguK_Q0LBC4Fct5+ z2xL8q09}I_@*wXxqxv5r;VP7R*)TWSi1APgN&<>Pka!q(t(pft%z-e{dI-aktep2H zk3axbSP$ZjMo3ogafF065Ye_g=$V8_pTt2*Dy}R>5n!GRVe;ZXE7k+J&l(c}P(hP) zln-ItSdsNeLh8qX(u~A|Q5C8JQSs5BtN-~-hfsPDBoH4FBL<|GkBI;fBCvtYy5@At z194=O#3huPOGqOLi4#n|cQXMODd+82_X?qbdhO>D(rkMGZt!ABLsYo37(6RMS^#aR z`I?u~IQdJ_h-9U??vu6>s$!7Y4Ct(&t&PMeML-IW&>w{)w&Ekg;&YIkL`X1_m6J~a z5=TIKDxn}36s-+JT+Jul_?A~9R-)G)1%a1YnCy6v;CTZNpgjTr%Q-;r+|VPb5}76H zB7h>2TQv$XkQC)P9Ex=b4uNfQZlo@n3?yK4@@s(Zh>-2xF+9gC#r0jk1-A@4Q5Sjd1 zw1{mL5Fso8h%FX=>zkW-`>jM}Aae;Qoh4H`cQB}eMUg;Wm7FsWK>|Jk=t%^8uP<_2 z657=3x#1BU%F&3ytlI7)aI-2@^0r7>^Bv?;jX*gXES~B})WY`yVACpuTUVn3)S27{ zQAu#bVA}@h@Qkcfg{qz}U5}HSMLXVRcmY%x?XPtUU_{OtVIMLu+fFz7`!scotyT-jQoru0ZuS**n5y*GiY`>GMvb55 zYo=je+|%CWx(6hRw3gz=!di3sET*>%@a9|pdZS*ip9@pVjpbTlK-`h$6Z$GlajaEX z)r#R-K>2&b51tFN%RkxngYG0rrUnNG0RT(03D~N4Foq?t7^eIg&5bKT+6XEf18D55 z>aNbV}X})pyh& z0?b`mobks0w`Wi4AOG58hiZL&Q}rQEW(QvzMv|2b-`v2WA(73bkQ!vI3~NiRON$?^ zOiiD~Z+iZ(2J!2W@8A%ClYZ;PYX-nf?D4Jv?u6I>2LMaOJF}_|`uzX^002ovPDHLk FV1k58JB9!N diff --git a/modules/highgui/src/files_Qt/Milky/48/16.png b/modules/highgui/src/files_Qt/Milky/48/16.png deleted file mode 100644 index 2e011c73965697f62512ac11bac2df47280d111c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2935 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/17.png b/modules/highgui/src/files_Qt/Milky/48/17.png deleted file mode 100644 index 4a7e5de4113130b215918aafe13ba8b85c4f933f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1828 zcmV+<2iy3GP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkUs!2paRA}DST5D`mRUH4{dwcs>%UWP841-(tAn^lPjnNpRVTlnFW5Vzm@v-6q zOcdM)KNyX1e2@?cp*)lfjh29XF^0_;jgM#-qX9pdVS>Sl*vi|D(r)YX-gB=1b9!%k zJ7`zfO54+P=RSJd-|zfizyHYuP1B&Bho#sJK@jHr<%2&zzXmk$;$d*(y&sRv_4}^1 z*kUDDCo*-R|J>!Vfp|I=-1n2OwGzKkQ3A5X4&CkdGkZctO$O?YfXCSkloD9JDTIt00U1n!snJn9nfHN`*#PQ>Z>0D8s*^GTM#59&G%KmM0Z^f(Dc=( zd{+7FaxC)LWmjT_|q_4&ET4A8Yt>+C8Y5gka5CAiv@!@C9*^y(VIv zV3v6Is|P-*sWfW1OU`{}fG2u9a1x@#>V$90mpwacMoO67g%r4xngdUA#8i+(3pj0_ z{&&8(udgPu5Yf~;Xj1^^NSVMB{k|1dtW|FCzdd|UcMZgVITM*km@JVeXvByL4y%h* z>%dz>ce`(>Bb%=*#DMYcP7?r&7K%9+uC4=I_J!Cl*dUdjhKZ>&K#0oP2HkW5KXh0Z zcr)=tKOSzWvISIF=xTv@DhlJVe@D-Z{}CKJcQh2b^gAcxZC{OYyR*;=I&quTIq=5k zceGZ=0(zEdaxaIe!~~?3MDNzMzYZJs-#l_x_m$}j1C5TRUT?>0)-S-xv%lo~a(uC_ zE}5Phz|-~B$wKJQ3<#mhs2MyPczzt;Yoqaty+=+KQZ1%!I2hK`{OEg+NHH!Yv$;>u( zJb5CfsOh0g(Gai5#8e-UU6pnvbPz1(mq|L5%1nbw(%f<^0WhJ5_(N5T0TnGEOXU$@ zyN4Mi2@1*ZXYE!Oq%!f)u61MKn_dU9dzsjGVU;Ctm>y!a1FN($RIx&~ z`S6NWrqj{g>&9YvFxiQ%q=;513qOEI#m_SmZrc*LGIcSEoc!}fVDsTFR@VD5FZbXV zdtJ7LJm4_V!DM_KHXZ5=p#)%^RlwLyW`QgarCba2B-4|uFMxP5#x&Bvo@Y*l=S*Pp zr(JFYcBYFKqJoqtNIuD8f$2nSRHL+K?{k00=0xDtgPq;zzW(Os zTj5e93>W@8&HXv66m`_hM+7}!1^te3jVU0?Tu9-fuGDztKt~^1wk?sE9z|E}dB1OV z@Us%2ga&M~!!sT^3(;sKzsfU#8sIhkM960#Hf59yNS0ZH03`%v%}bzM@FfZ0imb|{ z6tAWwA(Mz@5eh|s8rOs@YBp&ml9UjxC`%0lJ$xf++)|0S1;m5`!h*ys0YjA_P~5KU zH>t+uKz@eO=ca26xZPpr#~3@I57wU^zNrL65vwWwGQEmKF*5mU_$=66Hb|$_cr3E! z+*c{RC6>@s0of`=Ssphks+kPE26$GyYz;Dkw}O(v)QN>mltkaY7ycQk6ak^wzZ$SD zjh8=a>%(dqknI)@lw>HM889|WvcyxXfU7LYe5HBo$buj5NAZ6D;ESOH^Q&&Jg8&;F zKWtk=6vBj=2Ujx(bmkW`*`TqEh3Aqa2GAMn=q>` S4|#k50000004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkX+(|@1RA}DqnoEovR~3f8d#k!cPj%cI5GU}#Z6oWnVXFABVKI9K2chj&Hw`_>&hx%!{Cc=_397T)~# z#koh$zxwl=0`Tp_dmlb{-?0-Lw`^hQ`Xa{IaL=?sfkShXQ`4v_#+p6=0H!W|&m~kM z2t`D~bsqq22-_37|C#A6TN#_)$P3T>?fCEi`LA>R@}|T5bK{n+4^B)?k!M|u4T6^d zj0ryf&gIKU=S>dn--NL##-?CXOwv2YBp923O~ACkjK$m$6!GlSFSB&rGc`5UCwu_B zaP=LwSj*I=&1ZmfE0jIR0^dAz*RhZ7xnq86db%mRjoJsYEQ942`SJH|$F#;VY1nCv zh4W+#la4{s#-weqElko10Br&!U_xyC>?ewGH9J(W9cYH*VyuORpb#?D>lq z)=Zv!@F`Xa79rC-_ubjlL#o2H%WtEqo7a^_MHQE4_;!n*{^49BT2FuLtEYguJkJoP zNZ~NnkQfWbpr&V~5Yz&R2lbWq)kN(FUqoDna}M!>s?Po5Pk%XGe(wkO9X+P1^BR-G zx&SEPy~jJZ;+}T}VDR1}PVo_du@)P%QyI*Z0MvuH5EC|m1^`f(1^*Wb&o{gwCInSv z-2gPCKJWYh04`|Fdwd}QK-7BhNyWqu8WmJMMm(B?fNlZ^nM_?55kD34y5irNdR28fX2Y>2cQZ%A^=qlF5*2u`r_xb zDsILEs~AGwE*w5DdetC)C{e|x0^%`=M3g~#VblwDDUBo?ql1e*#*941M@l>Xln-ozjdF`zL9w9GTzoc-fCj4gL z(CAqxmhoTy`Pt9b@BQ#IpEw1~iG~{BGpg>>N{V{Hwgl@FtP23@+AmuZOwXb|Dj@t< zjH$m~SYUFj-5@tBNYBU?h*nq$Krp~qlJfK$lU!R~V%wC%SYOk!X$os=S*)H63|w7s zJolPo$MnX50+yggs>BjCs;YeVlLwB~NsfxlXov=OZQ0D#&LmfsrTo?){WU12_FY@k zX23u#pq=c~qy((GCZF_y;GcnBZXnkM_*VhBe*0i3Aw z<;nu16teyt+$*)FLBs}`d^G~U*1Z7)e_(8^ZGk~1Gr@I?t}$s?McA7aT!(-dY=L0{ ztgy)Fn+|!;YJ!))uNwe0zr&dG1{P|!X5tROVmG5ZpzZFX{0#AU#*&2Tv36bX1>k%` z>#DQ5;*Dz%8trN0!H1uH>8bMG$s_li0_FhTSiHgUFWkzJ{o5li-T*az960ef*s-vi zR@@`0NBPGy7kKnn=h!tpS$_NcZ=QRlQ9QqK@Z&?rWa+9CvtgM6xRK@DKf8&OU)qHo zpTM*xG3`lgyF8!3v^GF%0%OO)ZUEbk0FnqmICAf8i0|_FZ=Yb}SZkn=T6LuBo{gHO z6;`}VS?p#U*fW7R5552?z~`vXD?+a>1J^;N1F{5u3FHIt&HeD<8J3G;Xtf+t!zOtkEH3TiyftEP3yefYR;6V@eJ7;u@XO5C58Qc5 z`xG`(5XX+T0zzlZhyN>Vliu8Y`<=K#C5&oIVVgTx*qi%?N2!SNdHY zgf9tA=Bg<)#>A$gHc}BE;=_iioZ1MqdMp4C>9q>Ov_FysguZ|(o4E>r;_^u9E0PlK zCB%`6ct{FJ+CA;t1Z@n3qXk6QC}uhe00SC&B4f;1B14KHISb5s5nNv2x_L!!gVG~6 zXbUEFAnldz6B%CRLU{+*YaTBFXZwP9ZdhkB)P=ezC8;yt}p}8vX+Gpy0~uI zTb1$BTQYJUTevuxs7)p6d^oz?wQI|ar)eqRp)cRP`^o-nBqLJF`HpjprwK;&(4c2_ zPEYXI^Vd1NGhy?ThBW8}alrz<;g(m@=KYQ?UaL{gVHVK7k&7xU6>cH-at340yms~d#hYHKuWx&|Z#`xj zf}3^nU>!KP(5e=!Y$7kdyYSSofy0^r{{O#K{)gLt0ZCCO3z)W_<^TWy07*qoM6N<$ Ef+l$lUH||9 diff --git a/modules/highgui/src/files_Qt/Milky/48/19.png b/modules/highgui/src/files_Qt/Milky/48/19.png deleted file mode 100644 index 203510ddd4cf48a2af598b3f7123f4dc87598bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1982 zcmV;v2SNCWP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkVL`g(JRA}DSS!--mMHD`FciTc+x-HumEu~8fm50!!5v>732_l%FAjStq)0Ka| zjfN048i)olhKP^IKf6Q?8jP+8NI<2igit_Q!4}%mEqy^lTXtz{q1`*<%-p%}UAkp! zw=|i(bMNlG_xsNI&Y5$j0>&6_=RaGhi-I6T{orlCu3Z8c++^wmz?I~<{q_5Q2t@l_ zqrrtx9*CB}hlf^|XWH{UGjkR~oNWU1U-v_e?-&1IaG-3%@;x=Vl zEr#0GKjHdNKiCs9AZPMSI9j`#l5lNYvG3w&5wMJ=9=9HNaEX0lx~Cv}0i13+$Sg04 zL(tRP0hf9jVe#B2QV~Yp_YbVJkJdX!jlhq%Ji1bUJG@tN15e=Xo!zN==A%b zqo*E93Rk!gLY{F&;N5-8@~zhR%6a)qQ_uJgE0&i>P?U(Ycb^BFH39CJTDpeZQ!y?G zY~H)n9%oDNE}H#VYFl?5`1?DV#bwLWArTp5ME+^{9VSo8fvM@U-J5<|QXX>x2#b|- zrrqai>#BpxS1(AwnbimRaY%Dbx_-8~5(=l3z@$Wn=bb%^S4Z>ysIt)8KQ5{$DO~9m z2|!@0ag8uP@7`n~=kalp0ZkrNlkguol$FD%c?nB&RMoCl{G_iG^Y znP7aWk$^nIke)IPoa8yj&wH!sLbvtNzXBs6U>m9CHh#CDJS{ofLtlEbVLuB}9Ra~C zA{D>U3z)1A4eUx$?mey=-)~-Wvh;t8fepLo7pEjX3*2u4jtVMn?8E7Zu6)Sc=elE_Bd-ov#Vfv>bbUK1bjCGss2vjWIz`S z*bv5&{IM<@VGdrtRyu1nT)1=^x~{djKVDbAGim~_>?)#l3$gseuGTBH)H)`hVA6d^ z+v%p*a4sKgB)!g?UIvXFC!z29)v`~XYB&;AF-LBwEXpl)`8xiFwk!4Q0T}T?=7s_Z&VS3JyYjYZWOs?u7(flK17WXBOXb5R;oLX5`%E9=ve_>RV26 zYjed@#aLv~3nnKh5)wkK40>momOpYxnqY_gtUIB;t;$apO6R9fHwH!|p_jgzQIT%X zb0^0;;GC~Y1)^eBUZ{qGpu!Mz4-Ba?WAGaZrX^>=6h|R6w4JOb)!l&( zuvn~Q#m;rT-~n2_?i`kY%^IJ2WAIE$--A%N#4O`wm_eBB8 z-69(-NCjQ;=??{7B>Zu?F)x2Z9@5rcaY(==g0U`>Lfj~71=3v!$U`14s^HNkRf&e5Do63|vQuhXnILY=f8(5VaDLffJ6lh8a9U)NTLRkk8j$Il>NX~kSQ+s zy$HuDh&3%C!iv?+`VT>fdqeFHVk9A~Xbr2(zfK}zc6 z-E%l^$VL!x?5a^Y2=(Q(p==K44aEa!97qT$+R*64P{e^THbC9gi%l&AenjdZq=^BO z)v>0VhY+NQ^iYs~;O3b8k8ItR44+^ToM=d7M073VF#Emq6&9O?de2YJoV(t<5{NW? zk7#pun5V5FUZ|vdq}DhKSZ#C&1ej)6%!BQz5(X%Un+cw>NWn+!f!pctKOcH;kI9(o QY5)KL07*qoM6N<$g1!%+y#N3J diff --git a/modules/highgui/src/files_Qt/Milky/48/2.png b/modules/highgui/src/files_Qt/Milky/48/2.png deleted file mode 100644 index 8f4903eeab9ae70a7f872d64fb94013ca40e24e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2550 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/21.png b/modules/highgui/src/files_Qt/Milky/48/21.png deleted file mode 100644 index e65e4acd3669530ca6eeb7e3f1211bf47b58cfe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3178 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 Hu0mjf9?KS7 diff --git a/modules/highgui/src/files_Qt/Milky/48/23.png b/modules/highgui/src/files_Qt/Milky/48/23.png deleted file mode 100644 index ab9e60cfcb73b948f45f7cb941030af6b0e19b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1742 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/25.png b/modules/highgui/src/files_Qt/Milky/48/25.png deleted file mode 100644 index da93a5962d00c5518d0a9304f5a09da40041d40f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2310 zcmV+h3HkPkP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkWj7da6RA}DqT3cuw*BSoiviHmE%8_JUENx}Ewq!?E9XT<{gH$MKXamth3cVO4 zN(-e>szM756tYPJp|rFMY3Yp=8S<7F`=JkQA#qw7Qre_)os`6v#<6@+n&`69UT4nv z|31v@?9A>+wqx0GXci80=FFLy@B9D%`~P!xS7By+ls_sy;vZ$ZA9(pUhYcvoY$zU^ zR&@WWLbrsGcUiio$q4i?Ip1It9u3`spLYUe|IL-bvG0(3ILF+|3+=;Eb1HO zeD~46Jh7bwwl#!QU7t^nemWBwei&@N2P(b}T00Fjy$jKSLkK5g`K9^$C+|oNyz|WX zWW2k7O7EF~yz&BI76E236KMTB6g`Yc=K$2OK7U6N&|~5G#K>ns%l`zJ04A_=1QWP) z30ig!!trSC>hF#`en$~_`)3EfofsI+snImJd=&sU!Gi&2n?&UjLR}-!!lAh<&mJ-E z2mAm-56j20Q8||Ro z#$XVrw21J|15kBs_VRD<9sE!UoPB!l!H8kZ#fBe%Tssp8x*=rOE3yVXM9?BJ0GR(! z38=bOF!nzHT73%;W?)`5&4bsUtRTFsbl{7A{M$wUEJT$tB zeVt_hjt7_l5IFe>th{y-AfDaz&DW0Iwo1%IbE({LE))xctINJ{VJ7_XjR?-Yt3pbN zm6C$vr#hVL?DL9Ry@GJI2gIDe_=`ivZ3&?_elReo$D(t_=)I83=K!LXa3Ne;28ak! zN=PYDt}#|CYBQW*&m*&pL|;Ex$Q(1x-5w1nN)P)0=!EX@Fsk`H{NWnyO2Q^amV zWeKsK97xEycb*wHZYhD&-|w3YCzG@3-6N1|i<{!k4I;=%L9duk-gBA8d!?pwT&+<+QUZ(v8mPl9$`chIzp)otZF@f(**wh4P#P| zM5cG_8wS;iP0-ZH=bp4kP3sboFML`<2tFHaQMS2uEJf3)xMoAZF86gux7 z0Yu5SAZvtzYkjXki9wQF5{+hGqpgWZf~c7QnTQw$>c#Th*{Am!ABey!UpHpLiTHSS zs1Fde=8Ieq?Z6v->C^$DW=3L9whAI5O$%174iXZwRzt_`K2%mqnQJXE0tvkQwY0(D zLhq3=P<_K=y;kr6W6Y4Ey^z5xUbkj2NJv;!6VepE;wCC(B>TEiUM}U&Jhf-=h6oU2 zF45JINn{hYa2w+D0S)kgV_hQY3m;np_O%8PvLr;c4pB2fp6jlTgn-f8fojEsutfg4 z3H}@T(N*!#VP>!RG`XjDZc62awS2s7hFKTuy7Hc7aB@)JwMbwCfH zv|;7}9P^2o7<18dJh!7SV~0hXNU0^$5Loi2MeWq0a0?g_;jb4Xo=uD$c4(_3jbuUo z&5o0rMa@KSE{mn5YVP!7{q7P&{rwkHh9!8eXLr};#i`Mko21f~B}Ghcf|pVvqKamw zX?yP0=kOH1h{gyfB3N0jxz$-^#&jqa$)vKe;NrAp{wI$mo5!PvHN^Dhg6<0=#Z8_` z*C631A}xWtI^!s=TbX}-ujdf}(3z2orJ{B`JFWv-vk!J0vB)-m`AW^2fZ1YxDM>^ zasblx0N+B;o-tJcB*DfDKxgp6##$9twT@6M;@L-Drw4qg6fGcc6nHS`rl1)cB_I-3 zz{D2-K%IWRbOKVGeErp{sH~MCO#u?pUSP?_;>@#@@PczniJ~Zg(-hTis;WAD6{@B} z(Hch$s-{BKG^aJLX)SX!cdnwTP<0Jb4dL9mB6>UZ3t&F(7P8}yCJiE8azz_e}5CTK;mF*T0CV~X#*NwVcW&(R(C8Kq@z<5>!zKv|gh<=P3~58WUC gSK?y=|K|k$2j_+pF07*qoM6N<$f*B7vZvX%Q diff --git a/modules/highgui/src/files_Qt/Milky/48/26.png b/modules/highgui/src/files_Qt/Milky/48/26.png deleted file mode 100644 index 6ba5d6c1063f34b62bce610f8c856b6250a6b92f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2586 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 wHe;Rh2E8-i6BC3bX}F}92Jrv?t004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 JPDHLkV1ma{_A>wg diff --git a/modules/highgui/src/files_Qt/Milky/48/28.png b/modules/highgui/src/files_Qt/Milky/48/28.png deleted file mode 100644 index f0df2d35e805ab413dc6fc9b98fd79b103f7df8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmV;n21)seP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkUJV``BRA}DqSzT-tMI4{myY_l*q1U1)1#Gn~DlaV*gFYB8J{Zvl&}e+*&}fv1 z5E6_e#8x6kjZp~E7$x+opdlJ4B7%tz*H`01c_0||p~yGwwfDLAwKL<)?B49o-tOHQ zXxt{o>2s>miU- zr$F~T{owM{h3>hQ&}|bK`tk8LjI`L=-i-roEla^aQx`yUU@`D1exPB^+fKZ9?6H2I zuOas6!_N)){f*#C{11R|323MU5G%CpSqtnrv94cHe6jVbHidGo47lbi(J+U-L*UJ0eIpb+kMY-M{sI_d z0a(t6(2$S@2%h_SR?S4V{b(82l3QZ1Gjb5 zp(Gzpps^J!U-BRz`WJc4KE@5a^v8OZuL%`O85$oM@P!t>^lEL=fZ> zLr4S&iNLF0cI^l>wj8+k?k+HszRJNv2yFnNgX3B);ua%pfNh>lEOOG%i0tr&6?6hx zC4pDIxNoF6xG2)mz7))4u89YA0?-`siqW_B)$#-)wLbEbvW&RnQ}7ajmp@xM z6bJ+(!ImIkQv>#h4jBr^l|v_#l@I^B8xz?SHY->`TP(u)aQ*9fh!J?{(26cP%EL`9 z0g%Zh>_Npr9yayEDo*S|fK+P9ZW}$^Vng>>2al1SJPF381!$w&AM}AjA;-;A3641H z8@j_Kjvd6ok5NYn<0NColHqgLoDP{pg`;mS@ z8Qpa~i8T_*%%}o!*~_s}$ZZt2cVL$`snw5&WC6aU{ATx!Q>ci;si|y2mk~4{AXSJE zOK}5EsuRL4ps`CIFUWLau_iwH*3EIsE}V|56R3!|v$%n(r&Nw8b_H8)#H$giSkxbT z`__4SA)J|2CyIFuKn2{Ee5%O^8>C2$5qG?XtWIn@zTGpGq}7@i-&-=$*whdSE)D>! z;j;hKzv<)>LZ!WA>)hYIPN;BjBGwB?&ct(*EJC@-iC7#HSwfvBwif9~o~P4}fpk1O zQOs$&i8)wHVW3%rU`4|sQg~)>^yK@gB$Y;3P2|S%=^~#k;xb@lwFEBf)q9(}V;`oI zr#{L&o68iUDs@uFENl=WUbBGpIQ?;UYe6mT%+N54G+gNuUX+miIPYJepAY6nX@nY}5h_v2mjrM+!xhUuPZMCr*+cpBbkwPH=O^jf0%#>n z3z{DmC?CIkUZi1`45+Dmj7h4H;psj)=bO6=ztk@fSRk-K;D0^-1uxrDLMw+D?f?J) M07*qoM6N<$f`M%zh5!Hn diff --git a/modules/highgui/src/files_Qt/Milky/48/29.png b/modules/highgui/src/files_Qt/Milky/48/29.png deleted file mode 100644 index 6d79d929fcebac1f0f5adfd4478954200144aca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3035 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 d55DBbe*x;{-004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 pNf4uNx(004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 P00000NkvXXu0mjfq6MUC diff --git a/modules/highgui/src/files_Qt/Milky/48/33.png b/modules/highgui/src/files_Qt/Milky/48/33.png deleted file mode 100644 index 85bb86ff024094976dc9f757a12d3a85c6f769d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1971 zcmV;k2Tb^hP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkVIY~r8RA}DSnf*^wR~W~izR^->DL5i1arlFqnaffV@g*jP{s;K`lHrmiOEzE7 zIpekrjX&&%C40$q&bbJ2GcYvb=G<_IA}S#n2{%g?6A{6p6w2GRrL?#AZO=LPr7gWE z0>yHYn{)4Nd(ZcCo|p67QJSGI|^Gker7Pn&FuQ_?LKB9 z&zWnYGY)X%QssadtmS5t1tKw)<>FD_$#?ph6#=lX@wJ*__qzJw;6sol84BF5K$Hu! z@i^x@_3i+Z)c`2oljraZ2ywv^j!aPi2@jXc0~|NQ@;vW5{oWvxwEzd2-e~dUl~f1D z2B>&?;7|m@ndbzw0xJrl@67vtChGtW{JNFs$rAo3zB@S^YR zhmV=80U+Xw3)a<)qIk?YNwc2{pg{<6kwp++!~S9Br2?SOdmXmC`g})`cXR@0UJz1* zr&&S0Z+9XDuRxqTIKnJDKyA~;amM=ogq5&{ay%?mu#RabdnR!74&_H5b1Xy+wMMw#sH_ATp-0m|Q#^yi> zfw+_8`~AylX2Aga8ecDWJ6HAM!#oaqJ~-_z5Ts-P4pU|vut6! z=;y>5Ik@;(Z05w^qSi|YApsXrEs-+wbGeQ&hz;X_kBhroPsAFY3((!&?KPXtH!T*6 zM+6S8_SZphx}T^{1JKUN3Tn105E_6cnplF1@Dxaz*NQBq+^4fIN=)ksu3}zUsH>~% zCIVEs-EMF=956OH3|H=d4r7srs_Uo#TCSHBOOUFPcwe%3NmOPPGYG_I_&I|%^*RAS z8Ues+)%W+Qc*nc|?%usyjqcOpa=Bp5nl%uKL?96K!*BOKQy_HF2>?1U{+3t*5F%j( z#g#~pDH!5W;kl)R?nd}PYmS8^gm12WAFq9(h3w9qJ2lwXdpsUky?V6@F$69DeF9_Q zhiMkjQYDRv+++wvyre=%f&_d_cux9M0H}CTX0Dy&Di%~q5D0Xo`htRj6o^az9)V!E z-w;4EJIULmDdJVPP(eh5K$l1ayS7eP`9e&%jQ4i8o#xp^SEI%derWDF45Oh3hE|}D zlNC3hld6d)?x9;kaVbgCgqujP52A&RVZb&l=?je^#Hb&d{y7ArY`-CZc1^Mfy)UL) zg20nC1VyuW)S|yPWbB>T2x1r^8oNJ2hzF@FY*IN5vQi3Yey#zS%ycxGWzY)8P&}LQ zT?s>o5kH*oIshY657Mg7i*BmCS<-={T_*-V3$7G#Urvdq}d-0j=9bxRP4>FH@|i8EI}per_()D2h? z>|X4iYex4*J3BjRU?)QiJsE(rf9++5g7?;6|50GG8bE{4EKyooN+HI^##p@P+q`)* zll1@^1c`~l!a^M)7z|Q~%F0S6>j6l+b?X+jga#1~hp8p-Bj1)STbQf|Ag!aLLx&)5 zb_7DR#6lsK{Xa4SLENdRs7Qwx9UY|*Teogq8Gp0hxN(DKCt``UYu7?36w)EKZQI6V zJ%9#5+=*C1gBTeZp%B}*Z)dU|fVB4Zb{(RutPK2qKSZNZcE^q#g)0JpwCmTeQwXP% z{6`!oV=+5-?yOib0Hn3GwNVI+3kDBgRaF(cqyQ_i{SS(jlPFTbgf9R9002ovPDHLk FV1oHEg>?V` diff --git a/modules/highgui/src/files_Qt/Milky/48/34.png b/modules/highgui/src/files_Qt/Milky/48/34.png deleted file mode 100644 index fd095ee77b76190f16c0e664891d69a362496b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/36.png b/modules/highgui/src/files_Qt/Milky/48/36.png deleted file mode 100644 index c6e17fdd56c1f2c79803094a14866c89c05b6486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5230 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 Eg7`bR_y7O^ diff --git a/modules/highgui/src/files_Qt/Milky/48/39.png b/modules/highgui/src/files_Qt/Milky/48/39.png deleted file mode 100644 index d76effcd79e3a92356f35cde0f5c5f34621ab361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmV-z36l1SP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkW^GQTORA}DCS$|Lz*B$>p!~+CjC7{%#?SalD0WAnqC5$s(0%97ILeN-Erz6aC zI-Rsr2Ztn`W-^d;GMQ1MaoQRGYp~6f#zX@xje;5^P8>~?f+-k(5HBW$z%kq%+;Knl zcCX*>yW8WI+k=zk^bOD5+xPap&*$^~@!ne*+^5pl*Js2_cvVU-RvTRl3kz*?jl=FG z=$@V)0@}zJGbJS@850u|At50lqMsy5Ac`VYGyXj4_xqcRi;K@%h5(J?L zD-eOjix=}Y1jW@>0b-1kqe4VnE*B>;K0Z$O&Fj~%uM6*=7;gdyf`iY>%7WC?R1S&& zx!rCKj+7=MN?Z#upQgztCnt%3dE>^7b+L|teS0xR4if=%Ii9g70Z_#;O>rfFsnJAgQC6W~B?36< z(Rm2*HoZ#($PFo=sp9iZaU;;#*=eFllyvCvczEVPe{Q|ou}mhD4P)jUi9jir)DK#< zC~gF3a9W&bB4u$R0u>b%z4I9lf%lRKlzPdHlsV!_K%mq|?n5P*?|XHOXD9F^gc1Xk zo#I9S2j4`2t1LjYCBWY{9R$wNc(mw|WhoZucYAw#QM@b=+Af3<&?5+sBO;(|F(|&s z3h}Z)$bA&>Gxt1qD+rB4z?I+1RkafTx%=m}ICB-=3gC~ryP0!Bi|=fa)BZVJyOsj7 zBnLKR=~m;Px}Wa~D%ggX=HHoGY_SSLU=;$vb$~zT1m5o2QN)0Kn3ev06~p-C z5I8;d81~%J_kjWL(QZ##yaXP5qz3X<6bW5d|N7y9(^Zc*Y;HR@mkWhkfUZGOrbM6Q zYh1muMEJq-0_eGQ62aRvCTF0=#AZ-nDqc(z{PY-iM*HF6he}~>?h|nF%hp5qbln^l z;5*lF0zpz{_U5T4tyQIag*%o3usKK6pqMt?&=aO@4L0NbF!-Tg$%a%Y%&mZOq3*1AhTNRUk9dPnouH0MS_}U#575%)Bw@t0f*a)>Ux#&V3EP}&j z1yS-ug{=mramQG6(u_qN*NztVNusXIkVpfFsDkKo$K=m!M!Oo;T(O{bJ(t%BKH006 zfEQKpfHz2Brl~anGHt(BbBdyTSR2i&+X9kI>U$zB5Cx=GHi||(!sVEn49&YBF65Qm zAq#{iXVDyI_Uxi=o}D0xCdoPp@Lisd2)Jg=I`ajp^`6p9iNi1ZbrQfu!7IA3x}!`Q zh&pYLj@23(i2(mdG-Yv`Hvv+>g98ODF#UBbYPJuxY2+t1SDIDRA<=YOfCk_e2#W!& z9IhGAF#wKOqrxekLU%LgAv6wv~bUKc{( zPNxILhbBVVhhOn;!w*+O-UG`+GIrhShf&9b3P`FU8MdzZaY*UWNjr4ixElU>onJTP z6+mwGO5Vrec0t>f^B@=|7sdik$0S()7a+hA7{8W3QUJdxEDx;#AKx5+n}b8Dtwd^4 zGQ9Y76&SNt@P|&X2VVW`Z(tvD1nk6*fB@zBCGgt~HT)f?#|1C99D(ug?2si)>R$&) z0grbIBvB41j|3|73t-QtN;=FT2nJ`a_ru|?Q`26B{RsRYpV|q=%xvs~R`ht_53TRQ z?Xi(*1U0`*UB!+VK8YdrQB zxbf|`A14)tql zJq9<2hQmVK50z_6VDC@1(TSWt+4s+5@Snk(s>vw}u>^et68Pa51GzFk9~vqvacVzT zXmE4{8jiKVq|40%jryc4GQhrVyC5$s8@tH7?*FI_dT-z67LR z`v-LNey*B$bWrX?l8fuHSyRoRO2 z1pZ&p@kL+gdkwk8mbJz3(lY_Kp}Mc_J?QAWqMCFSf`6;_1+->T=#z;a7qU&b+yVr% z!Jx$gFCIT034X^;Se2C(1P`$P004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkV(Md!>RA}DST3c@&R~7!&+UK0HbFo7lNGiLDQ%r%Rw542np;gmLfB+#14@f)! zM<5{~9#V-P0KWhk2?+@a+~ysW2VS|Dr|fq2zDmQkB&&j#$wRqT<*>ka* zoD2^gX|(t3*<-J7ecxJp?U_TWig)wDc$Xiox6zJ9tMy=(WjOTsD`?N% z01<(RK_Ixti+>|9tq`cHKLx6?wfwc0{<7Eq+e;->ce4(_6OTT2qTOykn`PNEoh(~C zI6p$W)5iY$HehCYAP_+0+S1=pXNB)8pbCZhA>XS0UKP*%tWw`f)_u|+i+c2{|R0UHvPAFM*u#w^ntUgx@@gQtJT87(h+>*Gw;De_dO0{43|tt_VAz1U1w$<`8yI#ilX2Hnyv|#WeF}YI?8|0wWcE1b4ldx*`X8|I#!EPT>}j08 z@S`miU0gZ)pY7YqLjL$+Fuv32;I5C2&^j=N2-9flYv)aT{M2VLv^OAQ>E8A_u(Wvc z$#OhS&yAs~UcmyZx%Y#|qe}!8?<4WPl7g85QK*-alIs&Ou5P`GsrT-~`xhU;mDkoD zY-A-i9f2zHMMwnJd$QowlyuuxfE-^B?%|;v*nKx4#nCL^V_a zf=2 zlnj{Ec|XQO4xm50ftKks#DKtglIuW_3v4MF9@^AsD3}xo-e(30SG>=}E-tKX27oKN z$V;QbPizI&XC22xXoFNV=@Tgw!Rz9)5l0|a#*n4}5D`SYp`xx_VD;ggFro^Oz?PWc zS^xr7<5=(@$gj>0zz9}slR;c6tc0A0UAY4yKq+6DwInGf_H2mPzn2j>k&i?c8e@Qn zdh+hi6hNu_91IV+Xg zlpWPvRuv%5a3KbxK?%iDLVXAj`IWQ8NH}>H211M!1XuzBieSbvf=tQ)5fyU2ONHKf ziBXyaE|G$nT!oslkj6#{OkP?Mh?3h7O|lNuy_pLP1Y?Vts1(!$h$L4s7w|Efq`-mmjgGZ z$lCQGG17YzgvbaRu4ggniwLZ3I0h;#pqhykiDcp)SwTdwqJRYm;(!D|Tm>Z7{+~*T zTb57)21)h`^HkkC0e_#Fyv*Fm)KC^8pGMu{MX^miTn^$&mO^pN?F$I$rvxhwbh@&O zG?ayISwhJ*P-Ui$2}EBwPyv%Pm4$YdP{DZ5PMz1|T#aw7-Ml;rXsoTMK`{zY;Vg_C$ zqQZ8ru#h2<%pTbYwM^WKj9fghY2oI72e<#3_3!_Dd7F({F9h+39SAGVGom%ExYoLt zziB_rN#}>Yh&Z`~YwKDzjKR+6#fjcdw~RS&jL8A)?1NgZH+~OL`J7;^2W0c{97z5Q zfiUciFzk<>n+O0iFHcWTZvjBB*MknTU5wuYj7>p^XD|m*G+YWGv;A#sUfEs;Fd2Xs zF8=j$mSxK`v$Gfuhv>gPTjSxPG^z|q(aW~VN(GcvOdrf}W3!Lm*3ItfIc)ElVBYC7 z>l2TCYGpVWbo>2279PG1*?%?v`slZpl)OHnxYI(sk2K4Kg^KdcQtUEedL~2v`T(07 z+uhZ3xU%g=bn;YBf z{p*A7>Nzy?p*tL3{QMVAbUK}G`^dF3{kcD#Va_cm%ug4m^g>IUnP@y=Jg^w_N9T9m z?w=1{Z~V6s<>Se3-~@oh27YO004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkZfk{L`RA}DSTHS9P)fNApduL{MXT9rj94E08V<(hA!k3fKG=i2U0nt`PEfrNO zDpd+kmHN=qm%di~2jQ(xP0|Vkst~9k6-uc=rKMDaIH4iRm*ad9C-JV=_I`M0=ibwY z`Q8u5(1$7`jd$;?*K>a7{Lb&3d&b1fxSbDy+x)og0dySy*e0D1x69`~x>q{4`rZFL zQQZ6gwwIEN$*sZ}erRlRc+aMZn@6url|Px;xBFAC(*C6rd;6T+9h)WxAOF_G{QK`t zo%b5QYGyMK0uV$X0*DBL01zQ~NgZM8F*7(=Yi6(pG;`(2-+ngrg#f&Lr*Jmz+BmuK zp@9i#4`kYyJFzfTK6YW>?h`SHsYh%lH#$5y^30DXjDhvgu7?XR{|?ja0fvYGB!S>o z05}1F8JYpDc}8hIqBS4<(cv?d6#=|CPR^!X!;`~z7bc{|kQoCIA^=gDDj%EP_wkmE zuvtI%pdo&F=MSE6WWfPhdBDs;yDiMT`ZCTb7c51}cq0EUl=2rxAUFjgG9H>4S_4{h zMQMKir!Ss6*b~69r$>%$xYM41r$7e5>bF2r0z!f;8>JHqQ}50$I1{EA-}>YpNZSUP zIl#<;qy-2AtQZ&Gcmt=Dn+6bhpQ0#m@PqvyDdYXuz<6dT&Cr^mG{3GCKl`&+XHwCi z*Y2S4d%v^!LO!Scn+k%=NSH+nAOR8vDA$kjr)4}_!_{$Faz&-m%4;k78 zh(Us2_L-1b(+439z{mn5L52lLD|j^lVSq@0DT~taY0$pMKuK+&4y}mR++9mL){8f< zVgB+AE}!}gm8v^cZ>oL2e(P!_^_%bPun*k5fAo;SE&v8ef>q2wm;sf91cU)d6C_MP z8vdFjAoIBK$ysE+z8xa)eq;zGI1`x7(VEkrF@v=RYlhYutTbfKfz0&5az;>Js^jF} z-p0l0t5ZLJ?cxpqkRgCS%(kY!yWF@qux0Qm0R;k}TN=_7K6jZx5n(mJ3ZxYn7H%9p zkL;t{K^ZePEaC_!u5scTQk-J;4G#gZ*1qcf`!sG|x{N%R(5x@9kPw)B=TnqRRg8@~ICuOk`iglx@Wg)1&RpKRXT5o(oqRa_^w?`-^Gi={ z+r1Wg*#$|0Fa@llg`hG4BmiNca=wM?a6d#LhcIIa)Jf@XP+}?afkcYL0WcrXwVO4N z6sVS$P$=fGadZ%7z5rL+_~)NLcs_NjKW>7PA9v;-cxVmac_2X`L4W|HC4CT)E)vMh z;@as3PPqz7iby7@t#Z+dvEa5;h%2*Y2o&-b%9RF+P9A43FQAamVCQ}7Q5YS?-{1Op z#t8q+%Oh}#8|=w#6aCN)*Ec+IC|9Am(1ca6Kr*|T32TSfj1vI7I1Fdah&{RetAi8lDv+ee z`(Xs4we%%c7=B(55n$#pd!~WejPOBFcR}Q~5O4xOul`7B#`SUo+s7R=EE~`ojx8ai z#B5c=0D%5sd-9&0YbI2^6?;As2nK;**jZ@T1$zv4(S?ySAWY!{Xw|TOOAa{S#OD@+ zO}SzkFxrY*mk5La5LRPm4A>H^39L1|mIr3T-w)iet$#vQU9bw2AUu_S!Z2~>XbGOo z`KqB9Ud@A7^PpS>-O^CC8rE;^hrQSgOMlN(cX{7_O-I)dUE`oOu=15kdCIQ?->5g8 z4O1c?jjjdff_KNdna};o7nbWg3ar!1t`?c+EQO zJ`uLh@j7T9bgT3;wNQHhf?LGSvZeZ7=>ki0e4{c5g^p96P&+9bYM8VXlF*%PvN?tVy*$xAguB5kOmq`uSYl&jF=^ zY8?PlIt@T6#=y>v$eDm0NTgCa>dTelpw9;yj*X9IYJe%hwh7XS-ttS-fvCMp0tnh| zrQ)Pc0#IH%0Ihw4B}InD>Y$-CM?F3fpl!=HRxyYeseRWibTnCsQ~XcJYM2AQjQY03 zd*?0`Qo%)KN{GOQw4|j0B)y$9ntHYN+>J(@C}_O_L{iEL)#{*-W@t}CYXK&LpoBgL zVGNCKH$2*+5Pbm^;!Z_M8Xv5a6w-;^T4w}QOcg-@QyhV-a}CUvmlK|+E+9I427r)KuN+G5FP?0ZRVfYHRfnwfDdAxmOlIDK5IYgHZv`Z7mZS`P2 zsP5rLpMyv!&7A-|#a$y{N`ZV~Wx_dv200l&%R71Di(&-!sqRw_eEe5*3%?&BRc_z*;BU z=KUVr?-2>^lEvI*THRiiuiUIBB7jJVdgOra01y^8rMV0LI~6H5D*-T(tgDt%#9PX+ z8(294VG;+;84*Pk3Kc5pbqe_UMJ06gQtGe6Rw5Mv20V>+0Ekp583D@_sJV=RAOdM6 zN`s)@Guoa~%G~+PAUV1AI2MyMfOZOj;3|!)l@?we?`<^#(P@i-hM2jr-~u@lCC|ji*MWye6za@5XQ^M&p(egC3PVhYO=%~F1>PjWBB z3O?~EGc;2{S2xRRH zKKfi^zS_e2qKS-2QK{F#&7ye@IGQ9xbDiLGt&`8fI586nz8h^;5Vg&fs*4Y=YLsdk zJI3-@sI^d9XkxL+I6dbbeD~tQE3z9Ozqv7UyxzjMr4&w|MaY^0>k1Mhju}at?)rQy zdA-*egXtJ-X+*8E);@hqXlx$JAZPd>ml`cp8?Er>v_|2Luo?B-F zg`5G?5FJWGD^%Xq$Z6-mmpc->*-}_q)+jGiWwypIjAoh#kDRVmR?~Okn`3Ln0X$W- z`1}3ltw$$>FLQK$iwTib);y||oAf?Fhd;PDmwwE8yZ^h*e*xY7>q+4jV3Pm<002ov JPDHLkV1f|OlIQ>c diff --git a/modules/highgui/src/files_Qt/Milky/48/41.png b/modules/highgui/src/files_Qt/Milky/48/41.png deleted file mode 100644 index 4553c04588bd45f20476e572d844f529402a69da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 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 VIpgQ2`mF!}002ovPDHLkV1jc1+*|+v diff --git a/modules/highgui/src/files_Qt/Milky/48/45.png b/modules/highgui/src/files_Qt/Milky/48/45.png deleted file mode 100644 index a77fb9e14c240440998dd9a5d290406f646aa544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2717 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/48.png b/modules/highgui/src/files_Qt/Milky/48/48.png deleted file mode 100644 index 6092c0c3c2593911966754a6297a3785790172bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2588 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 Hu0mjfMNB$i diff --git a/modules/highgui/src/files_Qt/Milky/48/51.png b/modules/highgui/src/files_Qt/Milky/48/51.png deleted file mode 100644 index b5b77eb9ef7f75620697e133db2dbd059431ccd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2307 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/53.png b/modules/highgui/src/files_Qt/Milky/48/53.png deleted file mode 100644 index a13b5687fd11df43d74a37cafd2d7626b92f1d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2872 zcmV-83&-?{P)0qG*DY8j*<#ef!d}BIs*<(bYun{fdW$p87Xx@hp9u$jE;gxQc)0u(t|@BK))q@?Q2eA(OQ_xt@HzyJT+3#Vxs{+~Zw zB?27B&Ff(g{MpwD4&8LOlXg2ZhrKk#3EFyYyUOi76|fbto+^PofBM+PfxDHyZf~yR z-K~qPsIwVC-@zU|91syoC>RMyh$IxB25t8po7?*TCkWjC+{ayXY2R5bHur|*PS|)O z#)C2N zVi%8B2SV^oC1$;+qs4}E&$MG;GJ#h=5(Jug|yfv*Yx z4YQHM`VJ>}qX9?W4hT|G-FVlw>PUPl1b%#Au+wTb{C&&XCYNtY#CxOB^gUI8&wgRw z*S6K^fL=K!2(;VwqpLfF`4BM7HIY$~~^hSPvLXc5!H-VyS>wE~9s=e?BPkh)(G3!dmD#E1moSwE?Ch4n{!NR0Y zXY)iz0@V?gpq&fq0h+*NF>?sTmEy#l_sHi(BAL<+vh(p{?gjHecETk6VUrd~Cs(D6 zYQ>VOWey5t6q080tjY-Z7K8vLuns(_XypXT!iXzX|5*rtiW;Z4AGGgVFb}YYv+$t` ztm}CeBUiwHD=%9G;I*=5gp#H31|)r5UFoa0-t9AFQZld3mNon^h3 z9U(&d7rYLnQfmKLKonS;Y_k}UB=tzjN_tz($X=_Y_Zu8$vc8PCq)*6%rJ^b z(DsZ*8(E#IFd2gKYR9RplMVB^>9HMa4@P3ieeWEf#u5T!vzVYL880xPnNhUQq>{EZ z79(nH)K86um^Zim_LjB6sSq&D_eKKql9EbwPlqKpZ!+rEov|Dj6fi514TMC`4J zbV}gowIaLvzJK0BXSdsIyt}^63M&<&V}pJsv6Zz{E3U>oEn+&{jR-|VM4}Qigy*Vr z`3KjxTRUrNYV_+QNg{$WD{2QjJ3EC>Wl6bZ_sd;$yw6U+8yf5|894X@QA`Kptj#X( zA}SQ+Y(+K`iKa#eoYb0M-mYTpiWb;xHd@%^BU%(iOixb>^x3#>-8%0n5!ih9KlU1p zhFhJKw7i)rr$2&7L@a6IxbpU*qzB40(YgKae%Xml7q27(s5p7@B;Fs6((^f?W3e4B z`Y?}-j*bd}K;Zlh8#eeVVg1A$xZ*BPA5GiCQ|tz(V+e;6I>aK5Iqcjl-Dq(qx7f+y z!c|Ljt9o90ACJDAfTYk944eyEu=noG{!2PKI(ix#8(n_C{}#Gs$DCE@@;m>wm#ovH zQr|LlGE6Rwv1+UjC9~Cs!uGZNe#uZW*XSd&zjBEY4u^w<2_AkSh^grWVsQ!an8XTO z->&Bp`zI$S1)k?&GMT#OtU{OVe6gD*yj7t|S>Na6f9;{h%Pq5@%qgQ*9{bSB z6PZaRFJsx6qo}pVi=?O!irHzw8>1tLnNQ%HT02z;XFEZCRjpdlWbKjAKRXDq5sS#oDTqEe^B| z7p*|o7i<{wPvR%P3?LY6(4VKsNyMWmU7=FccTioZ-UCFSOG-#E@@85 zet~7nK0tFr8{Qj!1v$7}R-?EAndXWlyT#RpÏ^M~tmMaz3a#lwe3`nxaS_Y(>4 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/55.png b/modules/highgui/src/files_Qt/Milky/48/55.png deleted file mode 100644 index 216721545038a8f4107ae03cb3c744b141d1ce55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2867 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 RirN4G002ovPDHLkV1h=uV7CAO diff --git a/modules/highgui/src/files_Qt/Milky/48/56.png b/modules/highgui/src/files_Qt/Milky/48/56.png deleted file mode 100644 index ef8920b00a9f112d0d945ae01369be5290ef3f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmV+}3(@q6P)L$zo6}3Q1TtA;Uk}#f&Ya&lzjMyaBtj{L|K%n= z2k_qpaH}0pKbCH%-UIZ)Ub^nf%Px(>%_PN%}!{)TZPQrAFv; zf^0jq=atgLiAJc^Drci>>Vx*-!^~`4yIV?7f9Mgt4~{<}lWbob-s0qKZ%AF&4T?3-;;`IIS&MICB+O-dLozk_S9oj}Kd zd$IPB15mm1@Mp;>9(hMe8i0fqm(a><#TfttDf4$|uQzXAgT>J-X5P3Of_QHKd)`qE z;F+I)^M#JJtni~f2?s5Gt(bmw4mZY& z{O-v8Bi=p+;FOBx{t|L<-4YzFv;)gBN^8Y+6pJXw@t>rbrD6b~cv_m1Es!ohXCntMTLJ_2?9ZrOU++nIZKv^{{{fPPI2x+PMoaE-BD(# z^+0fy0gx~rSn`((XkXKU)!UO;ILiq_*N|bSR3HF12te5*%R>WTp7VW_;6;@N756I@ zS&_jAMX9hvzz_fs)vv4g`*8pg^&mWRZ@j=%0!ni(TDByR{a6DyXaJB0T-SnEmK6ZP zT%*aO4^>rc^yI1nz;b+eCA#O}4w)zF%4YX zc2XR)IHy~IF!wc(fIcGbex)sJs3Q&EWyKTP1NO}U=*ea1g_s9w=oH34=n*&Ln@mWl zn__LR2Cy(wIzsaDLo?U=ch4`ru>Srg_yvW+6;F5OTraB9r_l5eR>e!ODr<`ER#9^} zqR+AbY63X~$g*)-)y0&a6|VXG{zw&oub!3T!*^LI z&iiQFoG`r8s|8{5x-=fJq+Ys2mN!d^YUM=`7h;JmQ&3;ieqOp(f2BEu@}f#zOOU67OuLh`;xf)eu1+g>86gx z^|czFw?G{w8J~QwfVSQwQZ$GjFb+hbB0-h(%P}g%fcXt5753E!o9u8Tg>z-8OIB4J*Pu9>x)>^;%H1t0P+&zm11B+VISDzjl>npU8@|*UgasFQgWT!oTGB|Ki9s5*= zyI~vpg5XW`>*>{2`}PM6h)a|mA}ZBVsKGj@dQT7o!L%Xed-kL-@j(gKO|>07d=uqw z8vwWCn?*m(^?DP7p!Al#>Jf-imBLFYFKW+mV<0x}Orc|wgV7TO6c(gb{@a&suKbDs zaQnk%;|bdl?c4XK^>3r^7R)JHjq>7V0UX?HrkHA@W%4M|CQr)KJA>buTweJV1K{@i z9??s$A14s~+wX1CnvRVW;TC0023mS}n-(!!`_pt4nD{ppsztp#7<_UPL$|8OiUDx@ z-6pg%o%n!h%PzK}jdR4`MJj$`nJhsRMBkTE@QCW?sZdgJW91Kh_p;e#eI@|7{dSW+ z>*q87r`K~3Zck!j)Wx(3!iIyd?RKz*)>oN19}^$x11eVf@b{)Le!KI3Y5-yT%|`r$ zF3-2L+1R=}g$44$xwEcbHpE*m0bEZTrAuQjuFdE)ImDd*{uDARnfHzX;P&fo4Ddf6 zCDWpP8)X$fju|Bo*(~j`30U8@1TX6`PMf7dPG_1UKe(cSuejY&0Nj4ntq)vZ8Q=ep_>TYs0FPBw?K-nu_y7O^ M07*qoM6N<$f+G)Xx&QzG diff --git a/modules/highgui/src/files_Qt/Milky/48/57.png b/modules/highgui/src/files_Qt/Milky/48/57.png deleted file mode 100644 index 10dd05f60a0421d0a9157d26523d4fb04d83b8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2661 zcmV-r3YztaP)#~FTRZ>_EsmkxxH zfCN+G5C$v3xB>!GPMH|vii7P+DuzmafcXVMzrf*BJ_=XPa-86@OVm6;04r`w8?b)T@(& zw|hE|^wGdQYyUd?z`R_1I@U(bFR1RNngFv=$xT0WyiVxN#ufhki?o$(t zMGUc=&40Tdz67iJ0VVtH)QZMqO7I>L2Tbo=Z_311cpjjn^^) zRkd_4i^(g4xO0*WlPTCPp?^J(ol+0YNZ{<2Fb}E|{5ra%4vo)jLZop4DtCvVXNRCv za>CL|K(M1$sak+g^Wz9V(v5s_2qV3}B9Dx5!&y@53@=!O#k=>Q?(r^EMm~W$bdugT zO4cV}6&S5v^pmeuO*o+NA|04kUE|;Nw6cE&u9mH37pv+A~!3&!B`OOKO^wP9Ll$@ z3(!FUntz5#z`)HvEAD^}F780&(S69AK5MwXZu16|zkCywu`dj;;DC*4g4P``Sm2o^ zt^?5+Y93vN@qZ2@-9IjZo1tOzIn~HaAy;Hq@ElP>_LM1zny0tG6kOB&y90n_-1$bs!Tp|G7Eg_kVI#EFO@(>noUX1M3 z3|*^yh`mOP$sRbpK9nG9-VN79u;S+(nEc{~ksXB99qAw-mvhrdZ$=X6yY!|J9d6y^jlL|j0T=YOvkm?I@`Aj@)+gW4k_y;MQC zMuEHo2+3;;F-S$|KVa$Kl#0$A87bZXHjygswVi9B<`>Aaob>6lk#VhwHcS$i_b{@A z%mH-KIbi8uc)=#3h|kjnur~&#EXs6;gl&0Yx2ZwxA;VQLd9&>Du`HovX@acJeFZpK z$j&(K>|>=;CM~g<-u6~f7h50@q=eku9j9)H6H#av^JOClZ!xJ~v-dsvU zO!P;XUEnqMV2=A?f-|diPxVMqevd6FxW2RApXi7|qwj`4 zD;U;)dO%OkNPs$UFZ3n-_oxvr`xd(FwcUAd0kJoe=s2pRqVR+UF8b-YS zVUF*_NH*-C7jMY-(17gfBn9CfL=D*mve(x;Motueexww z2F&dVJNqz)ptas>d?JoeB4B{m%8Z|EbU&MPTmPO2ywj%eW4{xWjXFE_)Iuj2rB3FZ z!w3tww4I!?9q>OkbODD1zUhf7#9PC-@TUosvN{LdzGsll?P!sgx0fpk>T#}mVX%#p z$Ww+&oh(4{J6VJe0k4eQld}taGl8!r@R#1rB7eKWL3ckl$ol7XxXa61k0_n|u!~3} z){-`JL}K(*0n;9l`Yq;sJj38DFPcd<)wEo=bj$(2_iKOf_f3G8qcVxzM1nHI$f>-9 zdA8$uX)WX-(z1oXw}uG(Byt3v-qij4(DdNvM1Yq+FLOw&d8*o2v8FyRqN1`HDKH;T z@HP-u(6lLrTC)7bzYzF4!ty_y1^k=|@bYG>AQ6fviFMD^AV~8;@&ih-Wj13FFweXY zq`htX&T43sjV`@6N!f-6tkV6$&Dp`vivTZwY&DL^If>3SJ8BT8jmF?V@+hV&vxrFi zi8TbV{K+^9*$OVxEK8}x@xRzAEm zw1?5MF^17=Wn4d95WmC__!oz9Uq4gLn}AjR&|>^(vA=O;1gp2kF?OYd;d4d5M1-ZC zF*MLJ{rZ^#QUhg}=bHy#x`q4xjqQOE;N|x%*iR^Xt7-Aqu`LcY&oD@9m~vj6;6&m9 ztk_xwoi4wk^qaeDNUi7P5geN9m=BZyFTZO>Co_Y4^>?d~SQ5hRq-q3fq9ufJnmY#0 z77e{q_ve2+g1-5T_rMA8@|$KSE*4U1T(ndyc1Lf}{$flMzh)BnpNt?q-?9E91g!Gw zCLChoXH=_jz=wZ2I(NzZR|)X)dXsSkZXJX7zcM<1tItT_;s2F*NMLT|-vSH(p298# T7=V8-00000NkvXXu0mjf!AlcM diff --git a/modules/highgui/src/files_Qt/Milky/48/58.png b/modules/highgui/src/files_Qt/Milky/48/58.png deleted file mode 100644 index 9bdf5431562a706abacbf33db8c3bc7470ef7163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 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 e=KA004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 U%MUoTZ~y=R07*qoM6N<$f(8kcw*UYD diff --git a/modules/highgui/src/files_Qt/Milky/48/62.png b/modules/highgui/src/files_Qt/Milky/48/62.png deleted file mode 100644 index 7434c4959d0a1941d9cc14381fdda4060ae17472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3643 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 N002ovPDHLkV1nG11v&r# diff --git a/modules/highgui/src/files_Qt/Milky/48/63.png b/modules/highgui/src/files_Qt/Milky/48/63.png deleted file mode 100644 index fa0383b449e3c6624d93d3509c95a93cdd2ca5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2553 zcmV}$J8 z+}N?51w}v?OGuFN0iqzP2q|j#j092t0PRoU7a+vuc(|(|leC*N8nKNhRdERZ_Iagzh;bp$GLjs2c4hg*E1onHd zva&Ku)vTrs4%w^kdHs7`dkJp8zUk@dzwI|iYQ^Q{Q${)8R2|yfWYG7;@tN3c9p#Z zSF_nZ-kUw7n`H1@R}?@;VT07PSKeEZI)he&U|mfxM5~ zeKi%Id1@{RaH{-uyfOX5lv!0O71ZnXlc!FdS~ed)etfxHE=S@hQ2=H;9EV>qtkD>~V_xu7XyFbQ9_kV{sPJDnL zy#B6ur0Y8J`TTj_HgmaL%5*wz9Ut8t7E;x@M0Ev@0~Nq^WJ3}OZE*0WsWhO6pyGLB z>C-qNbveJT$3($mva;4hX*9owyGvIi0s^>c&WW0{NnSzVMH7z?XK`f265z54z)8t( zwp@%Avv_qRi`h{N$4VxdA@E?Uhc=mmu1u&y?Up0WrI5+sNZvppOY_h=|6Fe1S=AoU zR!GA0jt+$45VzU?z~=-sNx-4S#!D8akK}M-Jcq)Nf#YQhq!6hcstr~1cZjEam+oiF zS=4(zTmr%ctf_s|ra2wzLdW*8+jOzhw1qG5^&hP_$)AWwu=l37 zCjqe_6`LlxyHv*lO`gpfu&D5wn~+7)x*o;+&_pr#VH6wp0kngxrB=WJ-aIjso z;W)l@Y+V~Lp#y0^5`ZY0zBd`}>}4{o39|h>`H4mMSwr@7yWyI*$X7;lK*rI8AbA*d zeH}JMqpk;Rw><&YR)x34nwnbMC&0mh2}lh;JD*5dMFYeP2M0) zaIFdO)Mt@)_}ngmkxY7)uHM8WH z6DoIN0$khO23Zl#l)ppmHkytrb0r0y&&$n*k1uB@aCYMRDCoy9zx;cdkG+TnObU~o zZWGo}_CN$eka0rSL(i>6NnI%ESFF?c`~7Pu7EAClHqGsdL{0`;Ey|rdm*Ka!e@z-8 z!=#Oj3%TD1_IF~MG@H%fYp1_~vGFljdI85WXYqOSK3uIH0S-w72-1WGGSZm9`p#3V zY&}7~Q9$u%AOT1DPnddW`0Vq$SlL)6KQu5rE`ve82A<=@E=3L-BjqAVh;~F$@xM22 zq2n}BEN7sbdWrx`5J+o*Y~E?nX4n>5bUhor7CCgI29LF1d8I^@QMHonW`$DuT1Q5~ zv0{|T9!LXRt)AyZPPCs8-`4gP>Xk0+UJqvB zDC+HJB-yqY+qIj37N32kAQc=QyTcgHZCrH*<_=#4f#*jiqlv6?h|EMor_~nbQX0*O zGX`&m<$xNX1I?pP)D|wm?GS3T>1@*p~fS z3}eKYML-V%D~oDtO`I!On2`oA;sazt;sp+hNq~is3`HhQY$y^aQ@eFo^M9sxZ$@aA_?<+JP9@l z6v-MG&Qe46)~5d^1%Xzxp&Yh_p*&M0r3UaKQAiy9lm-xjXWD?|1yCf- zh$Z|YO(^}A=r3A^z=gZw)A*&(i>sq>$=MX+R4PmWbxz z&dJx|(&g{u@;Yr|WIiU+;ggf#r2RAj*LCILzEY{oCm)YW^XL zrRvmkFMS_^;bgeYOX<=<-w1tBnVAZooq7*%zxC4;fljA0ADYmI>+9?9O-@dV2Nzy@ z7c1Kf`1IjTQmdEv4zKP1F`k9;Ri7VKh8~1cPY;bx?tI_jU+BV!L}2Y!Y%&}?H?0fb z`U&3tZcL!t?P7Ct^TTNFTeoig_1w90=QEj1G-!2a0iUgZOi5fr0c0rza(xzqSAZh> zPJF0}-cR1A+N`fF&FJ*hn>c;qO&lAaNy%$|e!jM`v2pU^#fvr3ar5TQxqJ8Sy%b-k zS65dV;k`WY`@oGGH|B2NzP(hh*T0g$9mipJ?%b&o&MW)=LUaB4^)gjg#>U2eRxX$4 zk|y;geWv P00000NkvXXu0mjfb1BxP diff --git a/modules/highgui/src/files_Qt/Milky/48/64.png b/modules/highgui/src/files_Qt/Milky/48/64.png deleted file mode 100644 index df5cee046c5496453456f52536ecaf99c0b222bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2301 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 LNkvXXu0mjfu6HXy diff --git a/modules/highgui/src/files_Qt/Milky/48/68.png b/modules/highgui/src/files_Qt/Milky/48/68.png deleted file mode 100644 index c9b8a7221864d63a4fc47b0ca375ec0ec504b610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2359 zcmV-73CQ+|P)A1h?artGf~O_TOd)kWEwE$NhIn>J}$Mb~ZrOxvJp zv!*m1uBNt0N7|c)L8y`qg+g%x_~O_+jPLQj@8Dyu&ArCvp*Ej%bRV|Q`Tf54IbeuH zB5*&8VYMc{apQ&qmE)lMs;Vl_YOF!ZUvUEc{rxVS_#ECkX@RJPWxT$O*OQwzZIZvR z1Q2`+PTFQRn;|PJ3o~fk1PDA{+Oo5=!D6w*77$~0 zb{59R$B7Upv32WKc_j#BtTgz-!ot|(YB3s(P*hX|27|$gk6qWUU9+yl+8L_>UQbLW zQyd9NlB}OA0RcWICr4BBsvwR%t1a=L&pNxFd13A0&n1lt@cH@q9DFz&UI1Dh16naL z?7a+P01EW6EF(}^ zzP`Q%@3(E+#)%}7NVJ4VvCppa2p&__@`7+mXLqh`;7Z+=~lG+l2#E*Vk-x96pN03BE z+I8T}TTiyI2>U2A!|2KYb5igmLi0^cO;A==#w&1nc{zU;1QWB9dZ<$@K6jly{vNd+ zRP36QDcPtE{!m+lDJ`Z&$QZnwj&TetYwxN#$I%-5pH__4deHQU<}92p${MsoPgUSz4Jt7!u%ey z4?Mcz%kackz6Un6mI&*ks%*@Pa2Jxu;DcqF@A={J>>+DrL321e(DDnaVKmEsJ zhf(|O_zLo}i$Gzs;ILQ2fcIlqZ`lTqKibM&A{7#g$-R5``2IkzCa8y+1X&Z41661D zo;`cyxHPJ;uoDL$37DGk!z7Nd5&~;pDRkfdI}D6}$b*sGW4S`XPMe*?IMN~@-jnjE z-x4YI(xpq*xNbCz8Yit&&<1BFIDv`a9Vp5#1G6y~{`|oYp!YM+vPlR~6eC1J4Kne2 z$w=U<_BaBh{jf3%7Ob`uK+`h;=pVcSWBy^NEUSUQ=5Cd-ao=G zUVj>6<2v`_RDtUiFw!XPB~od>#j~&+j>B;-L>8dyBgK1Oe8lSJfO$#_#pmn0zCrlq zYtMi`Fvd6P>1bU`sPc+#HB}PodFKcyv)qj$81;1YvG>7N35m=BkB;MeUxGt5KLnE@ z7c+?rgLnIQc1R?VxL_(mB$8P|k4UT%6L9>9vMA8GO;1mcyXnDWUBly_IKA>sUZ4xh4-#5e2DO67%H;MISfgWKL--Hbs&O_g}5;Du1%rA30k%d$)spdxl8 zE(RFW_S@>}YHo>U*LkU_ss+yf<=6rrRR4}h2p32(gmJqnbOiyUhoJ!wGmq2)h;x^q6EJCyA4*2 zJuN4ZZO)gdu@bJLSA>WJb)o5GBfXfQdGx?*#QX?a%kU|8f#Nw^=l>>FANN67H`T&GRW*fHi03nZcZ6R9j*9 zQYLh{TyZf$)mZEqNc+@gP&P`|9;8L!>!(Vb2-;yZX98~d3AnJplK%il=Qb1*cpCoWDx?2wPhxV8+&EG9xQgKx|rP7lNeT7GzU;v$qPY-)(m^002ovPDHLkV1h~eWG4Us diff --git a/modules/highgui/src/files_Qt/Milky/48/69.png b/modules/highgui/src/files_Qt/Milky/48/69.png deleted file mode 100644 index e0ce5b8b1b06a67665880decf41f63064460b69e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/71.png b/modules/highgui/src/files_Qt/Milky/48/71.png deleted file mode 100644 index bf3c32a23dffe969cfba552a86052bad0aae5cec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/73.png b/modules/highgui/src/files_Qt/Milky/48/73.png deleted file mode 100644 index e5ca83924e120e204885a787c85e21c9ab5e847c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmVlWCu~0{{mA zI&4zV#m|44xsXm|X2mFx>!#?cTDiDV_-pRl+1tfeX*>i-2^!EFPtTq{{?0Vjl*<0C zM56TbZ{OeGgFCM}0)YTDO=oXc+_=dw4KlR3yh`t?t)y?KJEiT` z7or+HordC^eeB%FGg7G(qH*p1{rjL)QBhTmwo04S9Zy)EC%GOr{IhAa>L&HEY#Z#qH=@K7aQB+N(wZbYHx)`MspfZyYEdBPFF)T}KL$~&uNZEF!$3G2gP61cXx6G~7>v%a5DJ4O(*hwq6I`1} zea#W&4j$!oo--!kd)`f3Gi5m3A8(58Ihx zl!=aV-t;`n3&Wy>UNxvcJ=|VJ83Mwc15hF;Qr)b3_wG$|cHcgH_^`OhNkZM--Sp+n zi?mYtLkx39LY5`^Z0Z|2HU4HO&s)`hzw2%}#aghju|YjOJ+!vAMki06loT74ogjUE zeYCT)Lxnk8YaI$j_#Xhi4pojOny1GPi z>zW-#v(6!jy!M9~-wMZ@(S;>b=)a;U}*i44`OE0Gld)1#8@7~cvA+i)-e zbk1Zlp2%U0Cj!o-snu>G3JsEq^M=`x@y$SR!A9%r>!Jq(1_lP2=0;!y>U3g5brFHa zs?T7leEj$^We19sPNzGrM8R()CpeDzK$oDTZVJGiKp(#SG5!AM5dB;D$MH%@^m=ZR zPMbN85jz9y2L@n=F%={!v zENtxI;o)InP*}s5R>nEsy!!k5MMRKSh#;csbW*5{`cVjUfl3Sx4vNX!DGm10P%4j% zj0h^)(QrBwtCc2q8~((^ zi`7-UL^S)Ir8-<`}IIlf?_^`;dzuo{~W@cu7adB}T$1yue;& zdyBqbsTLL%u8ob2T{?R7XiHz$UWSa~JQmn|K3`m3UY%&%{m~ zlhig&vS=yEA7~WlraLzUZ(A?=1413w5yte+=Yp; z!NCN}Z;vI7q2)p=z2@bNz!`y4 zmPF8n&CShJ!;Oi?TfO~uiZ_Ay^wsI<>2%oh4JbA?HYORc`(0gKv%S5&LxHS206qw` zyEu+Rx~{9NK4RU6Gcz-4Ac6Ju^;rgdVPs@vNS5WwMHkR8(5(;(1MI#gjwMMV!!YRR z=;*m=n(yDZaUwUx~He72f;n-CU8p-2m(aeQ055B$_4ykPw@=D3i%hp-^ah_H8GChWrBWIl9pwaecXx?R8ZBp_R#Rpi61iNC<6+r{y1TnMRyP4fbc9<5 z1_t=?-rgRc1wksAOm<9C)gX+#FPqKM$;kv^vU^Ks_g{XlZ z@UA}u5ey0<2qwsDczBrC(_|k2M)pH$92^{^@$vDM+KZV5#JhxH&KSo`YLt2Lbh5OfSVuzdwThm?m>EEf5F$Ziu8 z6MQWr%9Sfu_%k~@JJjFb&+mz|TZ<(j?*otwT3Akia~EVN$N?2ZHBIA|#rSROV@TnAt@AAc3V1XGXoD@zI>UEv-|Y>)*~A19i`i& zA5fQkE;5KEcgGzdu;SL%7C)YxoUDQOOKI&?zmj)$XrORx%C5j^U}LK12z#ro}QkbZixOMfbCfP$;wx> zt*=m5vX>MoNs62#nYEInuvTVc$|NPEii91LTffXHKr%!cosg!elsqAtGVe6c1CWdO z78C_E%;G`Moah-cZJjK~V79IR+T@Hrwv}mF0+X(&-E-x70Zh@;SC5kgW9|6o+y>`BzGlKvMzsw&yA4KW0p4Wy9u0D zO5S2yHW@{e5>j=G$=mAK3D-LkKHl(pg#FnGo_P3|3F+Rwduf(|9%C&N^r+fGrOUa~j{ z)H1iIV^;w2iPWjKtdHs?C_JYf7atdM`rYq7+fxI7;84^vKJ*8U|GUh7-k<6lKKE3X>&&XM zng8j*@uHuUl~;*?Z8&5ZEDn=0$8Q<7%CgrdKYy8B43y`qL;!JO={8T5rfwnA+~u+E%MFdv%=+`ceyyh?ziyoUtHBw8GXk%7`A>iW0J`2GaE=#1#{d8T M07*qoM6N<$f{7X|0RR91 diff --git a/modules/highgui/src/files_Qt/Milky/48/75.png b/modules/highgui/src/files_Qt/Milky/48/75.png deleted file mode 100644 index 392792a72a1e28043df0b50d7eac3680e3b8262a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmV;=1Tg!FP)MTjkgeTVvI;nXv+Cr)N)RVkJRGWHwi{onh) z#hJwG>#O%ak3hle#GlbM{H{1plyo6RmaH#aY( zQYo*drlx4)FvVR#g;CbD#=b8vFJ3;M_ik=(GE-Ai%SHej8yjCcJ3BwOw6w?vTxb*3 z6DEaibi$z5*VkSym&?q|%q;r=tgo+s5SIVZ-QE2MS%~uQO(7cyh5!JNkF&G0GCpeF zgg$k2bVOF3wXn;TeqrDLrst=EXZS?e`&43iHAtsL0H9D$Pmf&WD%bTc zfgBYeMeX$T)N5>P^sN;DaEUq~y>W1GK+&iu14UW4-IF>oY-?+))K8Duq#nfl2VqlF zlXrf8E+3>eh#C<~6;`sgY8+gO}y;eOp^wENN6%iUfkOP@et!`uePu*-D|{XQd!O zy1KdwKn@QNB@h)eQ3e!Y&-?p(S!D+Y2TQgTMhck}56&qdTv$ppfRbk1o9Ja5cXxN* z+1Z)gLv#UBak8LmUu5)v-d2|a17KYKR@S|flM`=eXGeMjFenuqx3{-aVXo)rXDLgZ zU0q$3-Ov@qfSPde0xd1EfYrvv#v};N4~kw}TU+uo>(GlTuatz_{r&yETuz3gh++u# z(c{Vn%IX1IfN_t-kB*L{!XqOio;a=f3yMZBWU(~G2f5+l;i3Yh1}S@VbW|E;Z*NaN z52!G27(Eb1At*v&8yFZU+T1iyTBSeNvjB?YArb`OdwYAOQJjL<s&gKm~fv2G?wSl-%-mumIH3=8V z7(+utlAkVz?l^ymPy?e;6VL@?5<_^z*iJKnAQ=Rup$iYV&_sbR_j276JroOecXtbC zmm&&L5ye5dq@~`AMx{W}S`drGhVR!3bs{5pTr5gwv}>FMdOM0y+ZW1zqyFTy9PDN14UN tMf3ZC|Na$I6+jh06+jihKO4UV7yw?yVT`<=UG)F}002ovPDHLkV1lQsF&O{= diff --git a/modules/highgui/src/files_Qt/Milky/48/76.png b/modules/highgui/src/files_Qt/Milky/48/76.png deleted file mode 100644 index cc2d75d7c0c5b657b9952bdfa35dec8bdae5915c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2744 zcmV;p3P<&cP)+{fv5tE`Xg$8l+dbGTWASNgH(#Z5Q2mh0YS7C zsH$yVC5VS<+ga`tsP*NQbA6i0Pe1iig$L|onHgMKmZB^&-yp5 z90w}DSu%^&eUE%#$uL9E7Xo){H(2v!@cJIX&9=|ch#XMmpz9haXjok{Dux8{+rJ$r z3j$xui~Q;b?(aMD^4@`dpTa&4$AAGAiv+!Wdm!I&GMopvK_L?Ri>ee_khKUnDmr?P z3}9f3yg%yqhAIS!m&w`)0?-R}zMeoU2DIIjDphBVOB+}}qJys|h+fi`GY`D{=D}*< zcn6JXZ*N>JNqz?{?Dg6qBU6PS#Xy{f91eWYJ{i1Sr9;!2(GO;>0f+Y|01AVNc4DwX zdX9yjszj3z2BjJex}a~d+T|t$T8kF0a<_WG`_RXL#bOibg&;k=z&CJ3Z+u)~FPK-B@G4(24ZJ}*Agv?_c@>HaAnR+2?n3Wu`t+Bc z5%(KWN2E#!InFb35A^~!@@8!$DiuMe;e4b-qVn;94f+6ZgWaoa-5@3mg}iIP7Bt8Q zM}E`ed2H%63`D9@kP@%>0T5vXaTMZ)a5~m7euv$mkqBs%pfe zr_U3h3_$#LJ<;BQ(Zh5TBr#%nF4hunlwc^F^Wy*z%|sj@Q$9*1vOWgnBx^QINGk?+ zUrUooGQs$)Z#eICUTjDgCOOCD+T>1mhsR{$J(-qqjt+N=D?4?(L*Ojn>F(aN|M#DN z@YL04e&rvk7tWRUX6NLa7v)M_KoQkDJBkX-n?14c=2MgaQ&o7lepcxch@gjvZUhp z@#75(7A&A3*?i)}i7kbNg_~(!8oy@Enue!74}4Ys)4Bz7Wq5PG0~XFQyZ-WvihVW9 ziqOTOMm0o16#_LFX_+Wcly8Bz7dl|UOv%;yj}7ntsHzzDZ28{4MYGL~W@#YjM=25? zH_?{T=a|cn#Gs6CbuFwcDb2-gx8WUC7*?_2>Zy^|NL+7B01_u;q6RQT6clx62GWfY z0VLiJr(iOyKjL|SCZ{0QRX=(GQ<|m>+RbzxSO$3#g`UI%&xAsZqlynD$fy)mp8nQ3 z2|*3EbiAUEqgITbBaBaK3}mKa(G=>V;wPedq-+QVVM1<3(qbSfze>bU$cihJ_iARt z$G@tCcbDdZ&)rViSJLx)7#JS;y|r-Ter<`ftVNFSBpJ_PgN5 zzJImsf^XY?0FImzXIfesfggJe@K}vzW@f^z`~Sp)e1Gha!b)UCXNL=FNn)EFRiBYQ z5;~Q|_^;}NzKfO*Sj4e+&Fz21lbr-vSy`i|QOpBApN|4lw%hG6+x-@_x-UU~&P*_w zOzgdxm%$f$#FD8briP0;K>(4ru)|06vWVG077YXfkRr(J9jPYaIBN#`wGdvN_8Nlv zIf$YN1qB7Hjd;K_Y5=OL9!0KJ=jG)=`D=^7=`Ca4XlZGIo}L~kb^HVr!^`NCl{y|K zPMpXnS7@J!{P-Cj3w>;!f|ustc{qpWgNkYILd*RUR%fS~bD^kkI#5i|&xLbllmo3r zm)GlsuCA^ItVEke{o^i{x-weg3R=WLiXT3F7*3u%34Xsn#{IIgGFY{06;nL^q&Cuh zeBXr&7hwPX{iJAYOmT5BtXQ!EFe7;oaOIc)L_uJ)_w?!0Rp-y22cpyT>C?e%HpA`P zx8d5gYpieM#*L3XY9_wBe*HS^+_@97v$NTJlP6D(%@;Au@((}!a8$pu4$%Us;lyCR zLe^Qia^;|R2n-q<8)5zW^-xk$0+nfw;4jw$X`oV(-)oa(TWlC?| zx|IblJyYt8UN{CKdrBQrt0pPcXfPP8A`8x+KOZa>3zV0aGmBolc#+-X2@1$NbLPxp z<6B!>;nuBNp7@g#jwer6pFMjPrcRwo8yqZMx|AtTG?Zl-nwy*1SewlTckbM&!rPjp zloFIZNXT-LjfM#=%CZcCBKPC*5ANQ*%V>b0k0xx0^xSml(4klyjUPXry`wopctEmR zt?ZfTgzL#k`zI!x%tHX0nwnU4AbOCi$%>>1J(B|G&Ygp8+qMxkJSba+nVTrpbm`J1 zW{}I5FSAa{YMq^(3_M+t_pZ?b5Qgcyj~1-GfB!zrnl%eN9uLqxrNsjW4nVXtAb^UZ z(87yw{1?N_6F~Vh(&;L`FTyz{PylP1#sE;>CnMC?*HhmP9NPfNx~K+1F>pgNN=r+P zdGqEO=yHSlP>!Iyk5cgz^Epwv>H8ToW*EzsEi>}-^P}@!iNs8j|Md?Qj7%QCQ1uw* ybD->vo3A@!h%qV8z4)&NF95s%@O)qY6JP+L5~Ki-K#lYO00000f>-%a zz$<>dCh(fTED!EQ8g1Hptu%Ba1%6TPpRHNd6l*}`b(xhM$88FZVwVJ|>e%jX$7F4( z0I8-^xbyJ8n-k)-7LFSyAhFH>x%DlM*7m`i#?MweVgdex-_5O2Yt+>#X{n%AYe5nv z80_!2;H%O$V z7$WHAXe^Z{i#qV$jGn=I&np0rZDMus zKEdR5`M~4!LSp6|(5iIca*sfET9MhZ;2lsYweXlBO-wB=w%F!tzTxC96e6Eqt|J6J##~!eGrT(22iP$pj4{hVfVk7(UeLxXq5&S zbvvrD+vX_=kaayi0aO@^6A4Jn3x0oWJn;VB0S?qIi5ekM7d1zt5LF>}v zd67j5AcpiqcG0$h+lpp4R>Ph0z;U-=X!GLUT* zem_o%Q*g|(nmDyZi6KIOkdz$>?m7N(Ps1;c=au4hwaei)yN29IT$~UA9;c7`Tn-WV z@n@+PRC*LIE!0eO^Pn?ofz#<(4iE}bz=hRPR*6vJ;x!PbiJK-!q)_>l36U3+YOHQb z4&zz@ykBTCrW))YHRM_`nM?5=4ab3iMxt<1sFbV{is*GTMAMlsoHbB`#`xL(3`^qN z|2#1Li^1x!SR)6Qzpxi!j_b!hjDAzXL-f9|SUq%aa>b;<{t12DX7_^j$Lza5@-f>dF~ zH*rc#UUU~H_EIb|&_RS#cBYAJJXtZM$b(WZ`02S^g`}_q4uKC63sxsG9@YDiewPEo zXwTXG&bk*~jh_5fUsI;)&ARU-E{5E>Zcs{hY|J98%n3meStSTb*gJvFd;oB~zR6}z zaY9b&5-=z-9cYNA%)|mml3|`*1v*=LLJ?%3s5zZ2XYNwaYv$NY>RcRm85n(qcC0!% zF9SYQg$hjX4KH1~6x!R{;n2rhiYpI%D_L(3F}Jef$xXfzlugWGGUui1Y=8Q^uK1_* z_0syc*Tebq=WW}zZCl;db<2uvFJHKDp(#H<-%4HX-Md%y?wWV$y6WP^i`EV6H^8}b z=j;bR`Szt3g_G_Fwr?;)c9NRKwBYxH;PVI0vaoxeoyj95c?nRrv)J(*IVzW;2$Su* znU_WJx%M+A5UxZYr-WbrFrz6sE&!BA(7Z29f+Pq4@AcVszn^c51|n2-rnrvDjx1am zUF$RwY+S-YyiOIec1XMd5~&6O%bshs(V%uj_7C@fZ0YbL+%qxrfUHPXZqCp_&DI5M zMr2+HdP3lNK+sTDq6GV2KXgQbj3g7y12GMuXl~C+QNyZ*J{wKEZ}WfDVnGtqlM5^-iUb)L@Gb{$y>vJ z{`~tk-aDGJqELHgsyKg955&9*O;sW2J^_=p^U9}==|KKJJuvBxjFm^8H-#ymKQc0c z8|^sL;lqdN6U%)09o>7qUe-4FPVU3n`g}f<$K#og&n#gCEzvwSV*;`g9Q5e5Yu9LH zYB8BivZcyz-MS?=wMJOn+S1Yzx(?H2k>8;)ED=C!Z{NNRV`F2rF(shYYQZnM%l~Qr znk}v0Tk;$ByltQnTKgLVOA3^NlyzVU8uZ-#-4hgU{B9ld;K0}e`1|8O1Q&1sDf&Ff z&Ha+Kx!Qh^>3w7V&n;=GS+UE3#Kc4x7<~Y}jyASn3)O2Oun!H07}(ney`T`a>{&pB zh`p;g-j5%zY({Ms8>4Hu1!OPJ)&mZg%LVD_=}ExHHp(Uax1$_3Fd`I4-cT z(y$`@3|jXf@qT&Ao74toy7XcOK0)`wWl%ODkz6c<6_9q{vOPmHxGt} zhS*MPHUv)h^z_uGrKLe(VIicXq_Dw=R99CQB&v#_G`}je>smOk1dK)_?q!v*YVboC z91V}+`Y^eLP?d6Eq#Z{&&8_U+pl!SF8xT*O*?vU@T_Lqh{xy?QnDj7Y3ow+{P96185t*uPXo;?exsi_THwrmN7Ky7WU)nc*0>eZ{Exw)COS-W;EEMLBS z!dNFxoB+GsPC1kF`0-==Ob9$Tk)g%PmMvSxz!w!2Vd={S%n!JE^Ck-)@&qLv)^H|w z@7^V0JFYM<*wMOX0(|4f4VnNMc+y!?QUY$b8?Icr0xMUpWJW+BW!SB5R%JBY{_SOG0P_f83#F2Dkxuy_LgXRT>%ew7=ncnAa$vGSO(@MMQb9q1v}w~OskpdUqI;Af zlp2)sAh;K^5*mg2V=0!_tXU&r>`NF4O}!D zg}1qA;4Lq!09FAkvv6;cGL3DeBB$ZnIN;3G#{_ewvw65R-Fiwu!kYv@4l3Qo!d%Ie zUjQ170CG5N`N?1O(EhXj);Hb*AGDe*8QHq-Y?A@JQvuLwb)eBj0ms~#nOSZGWF}>m zh}A?OW3IHGPD9`_`R+R&MK7!!=FG6Iu&cxOS|4`J7JG7u>MHB=C%)rS? za&v>P#uM^L5R7-CycVkt#|7Ydtek*U;z7e{P^cz}K1@Xv z7(tG*8d0#yl=eW5AZL{@gq0A;N)W>GTn)(q9K*H}0H4>3$|=mkq@;{(3gmD=cKFf@ zK(aC4GXUg$Vga_@7#l~={cifiLe3R1h`>ARS1AuF5Gl&1f>`J%OjRCUDh@Hl)ga=* zNpXjLqKECDAI-QIW2fMo4cIZmNa3KIthgqwa5@n4SU-jL>flYvN^uV`5K+M7!6@T# z`5dHp*PlH0SNfRy@b~Za|6 zyF3F#LyoHAddrymu_F`;K|yvUos!`8jyipc%UMH?#A^ufAw{wcHT=pVg35`-6XTGukTZwYaJSzo4a`NVoSrj4Hg`S`uciXY!91i{WE|sUil!5CwGxj z8OyWyg#nQQXu{~A!`t`QhJ;16`sO`p$8}uYatg7|Y@4j>A4tPACwiHX#I;+Fs0I%2ErdD=fV4%(A za#6o+#XLY(gsbb*68_=JEs5ay=0LY0*i7OePcbjd#Nf z?*zNM%Cele#woJGzSrrpq2@BX4#uk-NxJ$`Uyi+_rdN)(3?7aC3okN$C@wBu7LDQ_ zaH6v2HEY(uwuv7?mNp;CjGOWHr2&J%0DM$Gca@8MzY2oDJZ8|E7^ry3&#WddLPkag z2wWzci+}%XHJOl|oekC1)$qNUUxGjI0ycepD_a{glw&ynx<*DuECgVy^i8O&sDa$v zTnaYu`Fv1U@O`K$`VLcG#~Y9)mCS0j)m!jd_-nMJj|nlCY=NSpA_lO&W*-dA^5e5ho!2Z_(z%KPF03v0Z zo}L~n-U}cvFOR<4nJ4H@aR2^&sHmub!-o$ux2Ls83W%|>F*ttwIHTOgjT;$-$P>42 z-GX2+2o{UQcJk!O6R%_aBmh*<`XX|;A9J+W*w~n)=)HUQpsTA34jecD2M->E+qZAS z&6_t_MNm8A>&~4!w-*&`rgdhs8BU)*O=%OXRx1nGco`obXLIOfyVL31`MLm-?gMyO zSuk+L9XocgfNN-I0He{!l%#U?>Q#8~;6Wlgkz&2Qy@2kwt2{s#@n(9jsi_I*93Xk5 z{Duu1psK10o)TvVp0F|dtpRykwNO`oleI9Po+H5#k^SX*D)N(ch$DXh~mdDF4JxE$-VG`jj< j4ORiH0(iU2e+3u-fWqsR^AJPm00000NkvXXu0mjf=Qob^ diff --git a/modules/highgui/src/files_Qt/Milky/48/79.png b/modules/highgui/src/files_Qt/Milky/48/79.png deleted file mode 100644 index 9e311fcb95f52a162d06a18ebe8f77424f036d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3120 zcmV-04A1k4P)wjNg$`)K#FqWgiz5oVU19fqpIw-QqzBGr)s4pqL@e#sSuT&kf@1*8k;`~ zBuec>K&ym?H4q%Y#0$pY^?}#No-?!4_r5*Y-Pj~x_m4@Ar;b;1orH z?{nkfd){sWxCvm6jmw_+{7zGgvCv`<^ba@PaZ>Wn_Tb62mPU@}ygxiR(J^1bY;G+P z@XS^YI0ua}zh3u4O%Ug{*0dEp zxzQ~LLU7jhUPIN}eeLrBK#Is+R-46@mu~}}SAisowa>nxgI&+}w|uJwx@z=oi`P}U zjkz(L<$*H@FxoTbxpEXi9KQ@(GE#gDCXtAs+}v?hr7F2TsY_ZzDA%nig-EqS$i zleWv0XN16&Fle+|;57;uEIPklXY}*D+Cjp~F{xdWqfOg?a>`E@U_S8St-7|#2kdS> z7KE4>BjbP)o&=lA=E`4L)%E!@jX?WOZ*sO3u3hEkAPP!w9Qzn(1vA(ldaUj2(^c-d z0EmV}h{Y7}ox?MYDzFyjfJLyPfV{BOQRjGY`Bqrt+5&pD$t^~sUCHNE9p#+s)`u$o zs)h(~90xHu25Oy(*+!8?$SKP&R(RdI7bYRB;uw?kIE|Y~c$EeeKkS7xL5d-Iq^@Y?n5=*lmAk{!5f`uG1q}*LmX8F)?&-1MC%l>mqgCH*vE?v% z(n1de(L!=me);X+`dU&e+t%vVueBF{V6*Vd2RIc6I;#!^Mh&BuInp!(qD}x(vw1KS zLPvKuyeEt&UXc1L{T7tuKq34p5Q{8GxVuxv&x6(403O6Q1>(puog4({O4Iv=(g~1Vttin2Q5q znl}`|$6uX*zgxzy%@eXn>OOuUZR?EMgjHe?o{rWRJM#s!T5}BPAt5OA37GIrldwQQ z$f5)mEz;2W%2Ydzxh*@&T5Kgn%|>(-71G2w7=TB=xCA+qF#w1(mctMX1W-6RWf2MQ zkzyc*B~Q>F?qqZ%5jd{npRa{HsYGV786F=S8G)hbAmiG7Uqr#QumEDyAttnp(Iz?> zjf3DQN016p3(^D_CZ^!M7nRJu4n;rP|N`gKm@gp4odfa^pltO z{$YH_wT!C{O@)QPWQYl0dt8KdD7-Wt$Z#BV7>GZ(Kjfoyj|M=5{|J$M%0*G|*JlA;7e!&*^m|ye*y&h2GL6q5ro|YKR*l5UOovCEuX>rbmz^8N=)b^AO%$DV-y-O`gln2 z&R3_qudA5*+hdmgA6Mo(L`>l%Jkvg-dizA%cRFOji1F#t!(6oR5{^r%IR@dS@tX#RWiOR2o2M;zaUc9&~vHv{4 zf$RSsKv_MPhOsC@^DAe)N^@fM{k$qj?!qK4omWlJnsKAcevy zTBK`9Nzv)*l|tvde9&z1fxowA3ruUxz+*I_FqRaa)2hKU?S#`$Z+kPxwF;yMUh0^h z=KPGxxK4$i9F~E{5IovD;ptm=cf(9(&i>&b8`NBWScrRFNf{_lYzIGYV6fEoTZ%o&kRD>3L@>Mu8Q0^W0Y@m)an!cgsYxzL> zS@T1ow8PEIZU>9&ju~H`t~GsSHC(xWgZJTn#eXd!vMDqlLT4nhYydN9EGY=(g6#dt zwVCF#$LSWBZU4Lg_%2+Y?S3W;e49_qD}b~Y+S5R}qS2@j4u|c#cI~Q7+b__Vo*5h* zbY%(0_R^TvXm4`u;>C-u1q&AZUo0RTI&`R&WnYeSrwP=0FI&# z>FL%iP18QN$K!!OAkdmF?1c*#TF1u5Xxut)79cIER4Uha-~#;T!ftTnt%4e*hOHew z|2m8Y`&a=-rNiS(USqB~bY8xEnE|*Bb3lc?3M>{2IU81?So0S=0ab-RV!~@xMx;pv)7lc}a{Mg(9cnVj z4sjGOhr+@_24H2?daxQwS^ck38(~@X-Kq1+OBX?9WhHw?6h#;s8uDZ1dPBdlrULu! z-Mf#KmzTSWi;LmFfdkOd(E*`QC>8scELj3gO-)!*8#D63Z1?GN{r&y0ZQC{=$4&0B z*=+FQi!U-j7y#;T1VFs(zY2hUK5RX9?3nwbk3NFj++3>LnI+DhI|nCEo&>wy4$nRJ z95ef@8p#6T^Z8)=_U(*vOP4NX6iS{KiA3;Yq_%12&Ye4MMEe;4sG;@++h7C|(Uk|;#y>RsCQPvSuU2@;vy?Y-=sx;C*hr#e&{02x28W3sA6#})3q_g?03t5>fEtJTVcr1t5jpTd`4ehC{l zZcN5=ICbh2p!vJgEI=RPjr3eYLjzDApz}!hTW+}p7A;!DC`GNhx*9OQ)D{#J2&1E; z{<(xv)-cn$u!9yqA#x6N z$&Z9bjd#z$OH6e5ZK$Wk0;I>PmG1RXrG1AoB!3|CV-m&zTfSC0t^7-h5|EmM9w(?0000< KMNUMnLSTYXndTn= diff --git a/modules/highgui/src/files_Qt/Milky/48/8.png b/modules/highgui/src/files_Qt/Milky/48/8.png deleted file mode 100644 index ab3280f58b1a91a87933da72368cfa06f6aa58c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 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 BOU(cP diff --git a/modules/highgui/src/files_Qt/Milky/48/81.png b/modules/highgui/src/files_Qt/Milky/48/81.png deleted file mode 100644 index d9018259a3de3a8e7de67123cbc3ecef5904ee27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2497 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

          PNX$PFMuD&3y*) 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 LNkvXXu0mjfg#Ew= diff --git a/modules/highgui/src/files_Qt/Milky/48/87.png b/modules/highgui/src/files_Qt/Milky/48/87.png deleted file mode 100644 index b1bc27b7c09b19330bad29581bb580954dbbab95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2337 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 Hu0mjfvFUa> diff --git a/modules/highgui/src/files_Qt/Milky/48/88.png b/modules/highgui/src/files_Qt/Milky/48/88.png deleted file mode 100644 index cbdca6af473c7d89fe4c9137613470960ed047d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2072 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/9.png b/modules/highgui/src/files_Qt/Milky/48/9.png deleted file mode 100644 index 4ece823fe32f53e149fb13d7a9a7da0919b43c7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1980 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/92.png b/modules/highgui/src/files_Qt/Milky/48/92.png deleted file mode 100644 index 48e5a942a59bf9409b33567ea56d8cfca9af65df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3046 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/94.png b/modules/highgui/src/files_Qt/Milky/48/94.png deleted file mode 100644 index 1e6999cbf40d0c991cb65e7c2602a8282b88e5f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3050 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 diff --git a/modules/highgui/src/files_Qt/Milky/48/96.png b/modules/highgui/src/files_Qt/Milky/48/96.png deleted file mode 100644 index daad4ea7ce061906b6138d3f8eacbd0efdd0e40a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2982 zcmV;X3t9AuP)XaGOw#gKyjJ8VZ*cp`?=~PCi?HIIDr_~Z?oJyesL8pj7 zAv1NXj)JLefg+IbDhY&SlYKw#y*=l@kG*$yLlVHuxRaZ`|GoeH|L;5JJLiAgUVbDjQ+^@9Q${j1b%&> z(FYtfa=@>`HX5yWsm)C9D(V%5{^U;Vdk>zqKe6QPz=RTb{=F4`j^kT7V4!_=(FGNg z=0Tx%G8B2rq0CoFZZ&9Vn4xd58^W>eP}y-4D8?-4kC z=_so&D{?!MX?bSlp}A+2vx3!4Z3KS7>~BL91N6$!Sq&(!S)bP=lgs*CP7&#lRm)qwKv;+f zNp*73O!(-;ZX|J(uD5Mjd$MKB1Rnd->{{&ourIF^7JubIw7dkDhr00+&s?ob2Y}D; z0vLowiN16=8?j&|VM7w-g;ntWu^n)s{{&TC{n7)UcZ^ElCvVQeR0*HjM2COr9qTZ) zA^5;qi`6Y&ut-R^d~RlfYaQvovp zF^6?FU^D*PD(hLJl&fXZJc3}>2P=_G{by>Q%aTvF2Qo?Eh`_#wBmFGh*34WAfB)AG zA6|SBD_i2h;(lF*nvzyce| zR20v{apEwX?>kO+>$WzX>C~U+Gc?tz$O_EA6VL-ASU)2M?1CHas=ObnN*1uj&r*LV+6Qlb{5bG9*63+fm6MF~s~K?e+$V7H%I9S1%2(I*^jKm5 z3yoOYS6Vn7BJp7eg!>p^o|8Z}v~LEUJ{LF}+*)1_i)O5~gp)(egCts%=LJh3(6hPf z7r4r>ejG$59X2;IvQi-23l*ia;X>a@0!vMx}QFRyt*C!UCSE`LTKrBY=fk3SNiZ&8EV1=%5V(TJ9Hk z8!VZ-9%`nq9McqBl4WR^*#tGyR*b1Wd5Hw7gI6^0M1m%HUbl~oO;W5j2*|SHC%ZcA zPKcuZStBL_^qs`fctPcNpdPL6vU$h6=yS$uR;Z@QS)tK*NS`!8FxOphMK; z6M-&;5r`WE*nx~M4V{1&_TCGJ{xdN$(x)Dz0y3b1 zhfO0?m86nMHIPjNhUfy_^tcKcJH>Rwl0oR`+6-;`?uVCc0W3?|81%j) z;gA~SveIJ^*uJs9lSw5U2ZfW^43s@2nMuf&Mgy_`!Iu3Gz$@>rW0SvYS`?3=crUzk z@Ilyi`0+8-XZ>Ulq46Oc4Cyh^X%NsJ?2LsmjV7WX2%`3|Y-vc=EuxjF#bbSk;py#n z!-1~XMzE-=X)*wPJ~`I`PrY?F>_7U4+yo@EjYIp4wRkMtIT>fc)402Me*Ie+ySdh}3wV_VTyqKMJqwnJzTSBY1`bfsq3 z=Ao{vU5V9CD>MNa9!>-u?(BYg~P-W^(Kn8bRcUkH3G|AHU}GBmsDxVa>gNWRk0- znEFxs5NtdI`@S@kmy^FmQYKDhE+5FQSjb{wqoNh^o5Y=v^88$WBO zBE8jO@(%uqc7f@?@ALrO>3sWFp}K4C3!xWUkbh&~QqU(%7m$P-BEc}WrIKI`o8+UU z7rMrVN|xSpy{v(>zOAxKpAc}tCcu@RL4E3wwY`{gYw=q@b<>-d-A<1k3d{2$8N&%y zO44>9z@&XHx5Y=$ouOL**V5n{mv3|OWPH&WnYpzN_Id~z*4##x*US=K-2)g@0EDqhF&o(d)UrM*c>ABgy;}hnoGq~ zEX{FaO+UG#*vRv2j)hi_N0M}-1Dk7p?{|s7O?k<;biKU^AECJLxqUA16uWTF#N+TT zfs~Yt6;h^la@$`mQHBxmV3RZ)W$7TpV7cYMtI1L4;NyPHy5vWqAFGo$YDudkt302R z0ikw?2xUcm{$vpnuWd;R93xIvr-3Ot97_YoJWt>c{yx?9g}&%+cu1&4BeoI|DwDJv zm~!nd8#}I*MM)kcy;vy0CT99i5%AdZx7Vch3H_--{SWzSB=Q41rE$Y=SR1Wuvx}BN zEE!K_dWC*BK{|iq&>!XN`t8IG6EJ`3nz?H2#~mcI#UoVf!k*5OR1UW*T{qgNLEy{$ c`M&@I0PhW7g#85}6951J07*qoM6N<$f~PK{2><{9 diff --git a/modules/highgui/src/files_Qt/Milky/48/97.png b/modules/highgui/src/files_Qt/Milky/48/97.png deleted file mode 100644 index b76ec545b07003b1d39fddfbfd65220a8e535855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3074 zcmV+d4E^(oP)0+5hgI{r7z5eCM41|2G0-3_i<; zoBjxba83qWxBdEh0fc%SuolmBX`XSb3)^8dRv6En)K<>_efVtON5&WUpHB(km)owE z5&klKekm&4fCI_;NcrQLzjNMZz&i2Wo3PiuYGHfVc?EFai&x1a2rEGln^AGuBl%#Y zJP~RtCPGDU6jYXv0*~A0R2e%1u^#BhM(6In-4IKMNecqgj(V)WYw`0P|8oFqpI^|5 z^38%E$|L1ExM0*Q-c&UM$xI9sEeokkw7}Z{yq*9^E-&~zL2!u@2l7$(8*r$%lPhBY zX}NpJwytvy;GRESUXMy|AdZuzXVfi#YPl8?sX-V_^g%{Rf?!ca7^;1aI^60KdMFea z4rM+WvPv5Mwf_Y;c&wA|g;Azu%~v}%o-+VHd+v)(D6`HZ1!Piu>bT3$ddDD=I1U=q z48`%UP)K%u?OtzI7%_4G)b2Q54Y|FTtT>oK_g@42yyL7Ztz!`izAWd391#6F0|jHK`^0XLgCk+q zq%T9zFT=YBw$(GxcA&t_VmcP}K=bA)O{fl6e$mWZkuE17mK+$Oy#B0U8$&2aB9l0} z#lc~HW}P+OFZWkMRrwe=(EBdDz4y;}N87mW#@)+HrqB3B58#8x(+Vfr_~<#I!R^r&HZ(NJFRTVAjf&$B*VV|f|KqEjIdnsH6T zLI=_pK8$t41G6SCf!E*LOzCzVKHOL|2EMytqKw@`p|WcE${9C8Pyas5Hi}LchX+K5 z@(v1_st=t#4E2B+#CaY-`&*Q9yCkgelVD%>+pzzWT_n2vky{RIG{+J1IJHt^AYU|L z4yR2j8^`RB%{5G&lIVkrM>N9NVbdU;P4H{>`&Pr>DmK4+7+hF=1&j_&)#WkUsD=#P zS8ei&{W{6vIhl@OedvX;)fa+GkVwboA+u2nfW~g|`+`s&sDw{W?y(Au-2R6=*L{t~iE{xP|F4t#y~{c!Qf zMs6`X?Fz|H8@&K-n*9KJXOTVuw18)92D4EO+lj~#?$ip@Pt(}4LI4^GeLh)2cqid^PvCUo`1qqZ{7*vRF7jN=am9zDf*U#k9{T`$8uTjt>s^n;S*-`KN-%kM(vbse-JI?%*UL6#(AN&4NDqY%R%s8~E2 zgTOE!x`^p(5i&mKkf1xnxjrd)oQQP86R)p=uJAkhb0x|j?BAt(oY~gU%(l+0C%bNFtqdn(2{|BpIeI4O3lwHsB{Bg{iD2tn55i0Tc^F)h%UVJflc$up z?ccwJ7vFyfTyB?6O${8J2NMI+sl+g`ko64!9ggWVUTjas(oK}EtjuIu-3)~y`tLsS z23qmQ5K($Ta0xt12w+#nd3@CUCTx0b6-2TqkJE6Hhn&vVLpuL;J!q?v3RyCm=5+c) zYk$YntDOK|!&6f-k^;$(Q{%Lvr_DSX*@K{O@Ca;veGPoryB$QA=vYUx0zHy{`fsi9 zLC>oQRJ4NA0hF0L7EUS&9)L^+r`E9yH+I1#<+VQ@HsC3f)s8UwT` z?DK&jY0!6Q0FoEg`BgbPr5cv{M)pIUoCZ5(*J-z9DTbiTmW;5$JQ8 zHjfAn&YaE%Y-m{6HoFS(A7`^=KE9ASj@CzDU0Z(NoYXfCah_+}v0SPFj4<3utjn3!Wk~0e>gQ9E1 zzphUbl{Ur)k}z;I3LdNtB3h*og?M19HX3QHU?Asc=6p`GQAqMiAo*O72qz)j6C>Vt zqMnUsyuEH7SAEaBfeIX1q;gD%zbubqT40fOxnPALWX%ESXGAB5t>~ZXL-&GjxhTyxBba3bgaG)09vLi!z`d{jM%{QuEIiwPHJHCbtYriQr%^aUt^FQ>vBz;XqwtJlJBZu3 zc7(0lf2XzoU;bCZel#`-1b{q4pym}@Y2vGBCDpNG1M56z|LpNuKK?7f04l)y=F0aA Qt^fc407*qoM6N<$g4!j__y7O^ diff --git a/modules/highgui/src/files_Qt/Milky/48/98.png b/modules/highgui/src/files_Qt/Milky/48/98.png deleted file mode 100644 index 5694611ab0cadee3f34f7060939d22758d2ded0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2981 zcmV;W3tIGvP)6ej(tvnYDZ_<0kt!9rgjW!wZ0faALB?{2@Eh) zL1LLvX{!WUMMOyCmBfT(H`(mt?%sR)|L4BWy?etWN!#(l-E;2QJ?H%2|9}5~{&Q{^ z=NvxC7b5_Su?ZQh<+WvvI8p-+7-zsLf$GN9fp-$;N>F|E&0E?hVm=}JcmO>5>YZ`a z!3ylZ6a{X?fxsBaJ03lA@8oS9_%^Jy-G6Ia;(rQY{qEaq6=3TaQ&y1Bv63qIRJ;zR zR$T#QRIjSDA#i6l=uLD&Dw`1H>AoYN7Bc255p-ExNCIk?#nKBoyoq2~4B$XL}VY~~v3e48KcRX%s+N^SjM#`Zq5{I&A z6^=0o2aaw<%XE=cT{_pBANtDc?GpyzXIrm(2(`X0hLc@C=W9@1c{!XLJ|l!Tc+Z5; z#xSFgWdPtN2BC2XDnW?HrV1LK>OX=&+JqI+5^H|3^oh>#TMY)1B9Dx93r7Im|Rfy@v#dN0%LH zzGMKaUYyl}qOHCHgSEn^20apP4)xzIgRA=n=x_OyTLbipL6I1G<3MIqqx< zKPrfLt)SJOgBu|+(o0Swlh4;&XlUQ>4qm9_Y> z?!39s4_dFlT!!tdsh$nj)Gvaw1ILVLBeZU5-mw6c)IS!!3`#;V=pFtL!ojFJ2yqy* z1*nXM%Y|dVbz~b144ox|);+cSc$YO!(4~BxucC?Tr!NqTifTHo0ulh14*-+|E8wor zt`+@`b_PK-YN_HB6r}3zDf`H9rJzy zo&5*l%@Z#|PwF@XFcU3W17triDW!AWY|}+*5sOX|Ao>PQH@N^{r$#DcrEvj(G-1Sj zMe+kCtpySQUAw4Myl(P*aUVRn3--MK3@}A;{K4bA4jA1AL1k7Q!R)mHK1Led^K=c# z+#WRP(?C8Mi9{ip`B<3E(!TDqfLV0{K?7gPHGjqum_6-Fu=mJw@Xo0n5DG+mS7OT= z4gd|3NbNu%B>aFI+f^IDp{0HTMZHI}f+O z+2s3TT$dH3P-+39Iit}i`2YD!K+3+chYN}xYRJ!d0geZunv3}@SfO#xXoCk4Thw)xFUG;4kNS%QLAN|?w z$YcS@DvA~q@^QlgwT=^GgN}mawVc6evAAiVn}RAH0CFm=^YH_qD-tL(g!8P(_UcXl zQAP^@cSRv=$Yrw*I`b5SGx34{btlvJY-0EX060DH9=v{Rv!IRaWafCZRaU^~?S+Y05l4ipMG zYtBQm1wNuCRn3Z(j`pQo+8J_7Uh{*1Fz($dUfT7+*|*>iZ$5yD-&rw{r3h!|$=!7< z$kA0bS8M_7Oh!`wq`z~u(me2s@gM3cpUYlLXoC$y$R}c56 zp?q>F6jaUj0hv17^Z{l~JW3RL`@`L^<&8%msdgJlpT>R8Sv}YzhqJ3mA(^!64sX3|X3%28O`xu2Y|0vX#JOwYjvKmgD`zI(0^F1Kq z?v1kN+|-Ht7Pv?>B)FeWWa+VW>-uC@5dc$|hqXL!9PUSFu8Kk-uL(_a#sFmcFy|C* z|GO{2tZ56y^ZtLo1P4yM41rL<+T|5d#dA#Ls&LsdrX@n*FiwPfI5dgWDGSpxB?F;LTadvUWrn9o7_1&-I{{KiWeIc=biU^ocD zNB|N&DaZ_Esqw2j9!s}f^x^K3RnbjYtcXu5hti4&rY=Ovhm0Owty9*Av<1F}-HJ{f80Sw(TPzQKVDVw3t{(3b}&o9e_V`n7{5vSkH0fq=;fBPh|yXR zj0DA)1yoM5H-$}$la1y zSWqES8am$#8j+CEolB_}RfOO;*28RDl*EZ@M|Chg&kgvuStN}-%<34iwn|wnagV#;LJN9kj9pjzT2JlI~ b{v*Hu*!-*KWSWi*00000NkvXXu0mjfW3H9k diff --git a/modules/highgui/src/files_Qt/Milky/48/99.png b/modules/highgui/src/files_Qt/Milky/48/99.png deleted file mode 100644 index 2cbc9521777527d4d3dd4b4ed38606e56edb0f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2956 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/101.png b/modules/highgui/src/files_Qt/Milky/64/101.png deleted file mode 100644 index 03fe6ff94026ac19f04fd0c9da285c2e2e887d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3948 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/104.png b/modules/highgui/src/files_Qt/Milky/64/104.png deleted file mode 100644 index a394b07b24f09d60392f1d780b3a8306f8cecf53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 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 ghe==Yu-48UO$Q diff --git a/modules/highgui/src/files_Qt/Milky/64/109.png b/modules/highgui/src/files_Qt/Milky/64/109.png deleted file mode 100644 index c42d2d5f3fc7b666a1b43306359650866118f8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4579 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/110.png b/modules/highgui/src/files_Qt/Milky/64/110.png deleted file mode 100644 index d75974a6e2308a459c00c4dbf138d514c612235e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4487 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/111.png b/modules/highgui/src/files_Qt/Milky/64/111.png deleted file mode 100644 index c61e685766f084f6371a14613479603efb042e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2999 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/112.png b/modules/highgui/src/files_Qt/Milky/64/112.png deleted file mode 100644 index 9dda7f92a2972db0c0f6a78f552bbc1104c44342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1640 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 Y07YFE?=JP-K>z>%07*qoM6N<$g8Yy&kpKVy diff --git a/modules/highgui/src/files_Qt/Milky/64/116.png b/modules/highgui/src/files_Qt/Milky/64/116.png deleted file mode 100644 index a3227c7bf0d6a90b57aed00beaf3539c59022de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4202 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 Af&c&j diff --git a/modules/highgui/src/files_Qt/Milky/64/117.png b/modules/highgui/src/files_Qt/Milky/64/117.png deleted file mode 100644 index 91991ab67253e3bfe3dffd58008b1f01958e3490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+Sb{xW978H@y_vB)FT_xwEq%|i24vciU`_UYoFS?Z>tId)RzuMdwOYXJ+JhAN%osPtBLg z^XE+pe#^JttN8Qhp7ZWwB|M~XYHb%*Ib zjN8IBNx4PtW!}|yH@nOBay57=Y!ROu#eT5<~C{|&dUzU^$qZhXMxOVaOm z*GiIi9h|s&@$|(O*?I@`S{G*uI(RJ5;9D4;qHFf`)r#wX6@D2>Xd1`dU;FX*`uu4B zd-v{doVG_90J>rs?KPTthTSl=4|K&6HNiaN`OleQMa?|+26^j?Pj7tv>vB+L>$j+9>=#&s3)7qq z>b?EMo8hCR+;QmS>1`(4_be_E43Kt?sNK@C+W0{IJYAKug3B&nleTFnluX#4V|?IT zqPTD6^i2vUxGzoEWX;_c^MA(Udu;|C4Rftr4Bs*8*i}`7MX|2%sUs=tYlZH(>}68L+6Q@l;yMQmSF*J*>$vpxe_$GzaA`#%=%<8wIPm6 zb%C_;HkP!;d7R05uLGD3Hyudu;z;Bvz4CFDOvj;)RpOl;uHgY1?)IH&7VB7I#H@v{ z{7-1Q=5Fyw>$Ud@||-c7S}C{>#=gK?MSTgHVfPOq*%YQ7kF z>t&WgPM_c@n^Xr~n~?n`9E~fi%MNaSEkBj|M>Fc_@}5HwL@ zev!q|Eaz}f=5J$O4<}o>sUh>J7s~nFFCTRvu{O(zyDxrU$b(b~6)+6F+k#By_ zEo4bZGvPWASe&@5`?RoqVbQ-3zCF*y)24r`dXv-nx3d3&XhgVUr9#%$iA8h&MWi-G zyPs$%WGLg`FZ15#{TdPXTN-w`wQsp!6|yo{U)e6BFWLt^4uiS%Q4r;Tm(7C-W9y&%;Q$yW#))kKqlB43F-eDT(d()M5Yv MPgg&ebxsLQ02SB|fdBvi diff --git a/modules/highgui/src/files_Qt/Milky/64/118.png b/modules/highgui/src/files_Qt/Milky/64/118.png deleted file mode 100644 index 50c4cfc4c677d0d43be06e7f31e66883cd70c024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3080 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 M07*qoM6N<$f+z;H1poj5 diff --git a/modules/highgui/src/files_Qt/Milky/64/12.png b/modules/highgui/src/files_Qt/Milky/64/12.png deleted file mode 100644 index 822bc42e23010ec0ac969631b03f8fc45e73ae9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5272 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 e@;*fe!2bia3mPpo>oKMP0000! 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/121.png b/modules/highgui/src/files_Qt/Milky/64/121.png deleted file mode 100644 index 01679abe84fcce0932ee781848f56815e9edc0b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3530 zcmV;*4K?zKP)$)){=9yr;@-Mf3f@BF^s_c(hMN-56f z7QtEG&UyvJ_#Z`4LS4Lm+xd-9(8#anUwQn_j=le@fo|AwK_e&{HIwE4DNSv?>$CQJ z@2l_|`YB-D6Ah~(iqfh?loobj1;13gp8dbH`qrI`D{nj`Dp9iK9|bTul=>(D#+DNc{{AfrxVXtWQis^adJZMZ0Tg*I4zObF4o z*=*M8nM_9Ogc3xfQAA@=Z5xS2tYh{pOK2tt6H-NHI)kaHDNKw{AU%@CzOH9+B>jqZ zUCo^NC@ZeUIn@`UA-M!YBYk+|-4`)1)Wg5O{h3WC*3O6n#CFFc$!%1nYZhM6jPn|n z;%M&y9Q>>o`h-yJAOBC-An`wRp&HzcF`OFeMnCHv$KTVAFRH%`*Dr6y;iLb?yYIig z=8oSc@rR$CTsvbgaNEPRYq;=DORhpuX#w_qypzrPacxEj&1ynxovLgwi+U&feIihU6q`BE>aUGEJ5wUiVw>vBwqv&O<>if0FExHTh#r&O%Xa0 zsTP=-pJg&r=skTD3mO)2CA5Z609jd?ti;6Bn1`^`p^V&s@@baP8CCCw8ORkND8Ufi z92a+^HpQ_0-u@0$R#kJ^mIabvG#aZwEDKCY?3&t%&^*)!nV$yKjNwW2z%qvnLOeJi zr*zXLnlX(2kuWK28!wJ>g|-ALps2Wb*~HYSbyE-71uq~FQeFs9HR%;Y3DzSd2+)bw z?uz(Tk%*Fu8XZbV4fmtECdu}?{1p(3$11oRfyeAq*Eth{$R7c=+1K|NC%K10>~2rH zI%4b!3bQ7WyGF(ZJTeVLK)fKHySYSI*UdeWm)UTDC3XM;EcQ3hr)Q)}?pjJ6sHIx4 zMzSPW0jip17sn*fmj^-SAoEoMCq7xiL;^_AntftNgl#-jzfTYXbT2?u!L?8wQcmV4 z)D?o}+v;l<+r5C%ixOpW4lugr^2{-j9P?XSs}m`qN)$i@LG5lZcXJ^jF&?)6qg{C^ z;5*lD(s)1>f}#0!OK^4bYS*M_$EuuendF5zMAte(^W4dBaZZ-S-^&2fOj*rW?_6#jPkTDAm$ov-J-jLtpws z6wfJ?xEGDJCBxpa8&i3KySAT&GH$OgW6kL4Kax^Wv%2f|A+a${t zcO7^H1tkd^!@IajoIiumbp(Vk0oW1^2do4$fP)kGpx!?60v>;HJ;o=8&v*@BaHJPc z?z$VPY&Ro4#jtDGZQX!AvDrT?4hUremd!hTy~7M-hb5JT*w^tA_HTI=%?ocpO?kbh zd9!P^1Y;oFetFo+g>mkSs-U#0SUVjcy%ZT2BQb5=Mxc?MfSu9s3zu5ogKSv3k) z0C5x>eC<#!te3#%4DlS_H-mIN%eyc`a2_Vr`&o=pYd0AuF{gRK2kN@8f2DV2Z3pGI>7g=gqNw%_?3S+>&9*)xq}L!YF|HBtvi~6kbeE z^qD3`Na`c1SB&HzYZ&|4Y!M0zuP&7M+t(t4;nm!DTf|7 z%CbzbEH9x;(2^_d%d1OL6G)#P7YdY$OBzKgq2e0-%nC&`0Bv$p(2^`Bd{(tbdScCx z3Op3j1gItt^$?bt^?RE8FcJj{N)uSx_%*}}qtX($tLX2u=HSffherm{(R~P0NQ0-xXm<(Apflvq#V{pY9Ok{cl3t*oxWO;@kSb(gL~u}~43%^M-q<@0mL z10$c~%@3Z(AOH3+rYAB&u~Rnzc`8f=ZxE&;#BLZ7HDweX6%V8@y095PxpfE2{pWiM z6IKyH1FSBq$Eqtg;Y$}@k6%6cEes8v)~iNY9RV`rP>3cFq9UZRIdNB3iFn@Vr6ra4 z@hx`Yy07DXVYX#@w(ULi*M8wpyo>HHbpqLbf#Xw8rPV@q* zsQ~Jo5Ye!apcy$S61SIIz_eadwS+7#F4lU!g3FNbMB5P@IC9E1D`OLBOlRtI3UC%t z912hwIxoKcxjnWj6d!*y+R28y(QX1x_=^Kn^gonRPj@E@5k?t7USjK?-$%{dD#s^9 zsH!Q_Ua(YcE58&}l7?5;Rq#!V86jq-v&c?oFg`kgSR(OEOtvIVZ4sY6D$FfV=4$ye zVe=tGvn_0>K-bAMs*+Xi2@x|r>aB!$LBdvW<;UYAW1K@$%tN%B3TS5vSY``^Y|xi4 zlX1aEM@O|DH0wc#kSXk;yB1;7qX${=lSb*BlF;=8>Z(Qy?-Nc=VW@v76)Q-r`0!7+ zr_A>RQ?_>jiBB*@$oIlvOQ=-Q88YTa&M90l6W#DIe$y_sAuo?o<}0{68x z)$ zyz-j!@X&@UG1NDJY$j`4fE7z|PT~1>u;&EN54LygTDMWYE}*vuS>HAjC2+`(jErdg zOb0@u63WWTG&5V-az6IIe*!PRaSWB`&SP+n_%GzLHr&^T%w%S7=k5(_y%$Dw6l}ld zPPF=Rfn;STkw~DtynNQ7a2T`V&oJ99*Qwb3_FEX~zZ&Jqqz@NRq)+u@a&)p?i9~Pq zUm40Ze&J`VSNO>IdLB~(Lq~0$6af>%L#(GeBhkc)&eztb ze6v9T1^mJl{(L|Kv$&b|AY!z+TJ|pznZVrYN0Axr#CU2@PmYA|O{P;AJ=LG$GtZ!( z3QUI`O5iT>Qr7o+y2KEJo=rOJbzd1GxDt{z+b}lJg{iT$H7}XTaisftQ;5V@biIC0 z;Lqx$Kb+)9V10#Q67912pKZXCF9JjkO2m6Gw{{1Hk253;^<#XnA4AxgB&mEIr&Lj)55D#`P2dP;eof>+xS>k^5~WILxlw$JE6oY zM*C0vh>f5^iNt^3z2~Q)e>$i9|Hsp3c{}SB@E-vN07wNI=vy>^#sB~S07*qoM6N<$ Ef($#5kpKVy diff --git a/modules/highgui/src/files_Qt/Milky/64/122.png b/modules/highgui/src/files_Qt/Milky/64/122.png deleted file mode 100644 index 4ee45a6d1fb82061f20b3beb9b05686b75e59b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3942 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 AZ~y=R diff --git a/modules/highgui/src/files_Qt/Milky/64/123.png b/modules/highgui/src/files_Qt/Milky/64/123.png deleted file mode 100644 index eaeb829a858a7affe7e72b29bf1284f8f7fd6309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3616 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 TTA}QW00000NkvXXu0mjfo~G_@ diff --git a/modules/highgui/src/files_Qt/Milky/64/125.png b/modules/highgui/src/files_Qt/Milky/64/125.png deleted file mode 100644 index 35d91e0d6f8fb63e41a7be7a105c095814f7f46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4129 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/128.png b/modules/highgui/src/files_Qt/Milky/64/128.png deleted file mode 100644 index b9a903cb82f131e584fdac8f04090c944ecfe45b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3399 zcmV-N4Y=}&P)OU=ZkP3_;6O3f?gc|O3{*!XdN+jqA+o!Q&lotd58Tc=VbgwO2l?%dtnecybq-|rg` z#uy&uhYud{$D{%#6)>rQNd-L84?lfE2uWYu@rTtR@)|jOfao7RBV@Y$)ue?%`t1-x=(MU4;n zwi6+%S>b&sc?LsRRuL&dEuoPqur)stRDd{v1<~~(Lu6AKmLjmF2<9FqmC;1bTem;g z)I4DYynJZ+ULsW8qVm;HS+X1or_6>aIWry#a~>S+f$o93a3TCRXzRWT8rJH6^7T{u zJS*V)2N&668%TQjl82)%> z7ZJWAY3jNg7(TBHZJ52y_gMv{uH98&$;%7Fnzk;eeyy=)o;;I#O+P0OdL1fW0$*KP z2j_478UERFD1x!N?C0OQ5S1ywZw+YM%VsQu%9+dH(5aspEAL|zAP<6UJP@sd^?f%R zz(Sxi)xr8W8|VZDqy$eX;b!|eNT_jm_K6qaV(Z^S{li@~WTJhJSwR0n4c9EITnAU~ zd<~2uC1TVZ)0fPB+XW-IdntWvWH=E)l5#LP#q7~5V>-Ww;h`6(c)ithl02Q8Q z<5+wY9`r{H1t8uEK(q!21&F~B0kDw(3&J}EJ86nz&7O@1QY%oQvo8!wLQjDkaGLvlhAG>FAd;-SRTwd5kN8lCZ3+JS%F60qiS&& zkB@*G<&lg58bmSqbz`w%D9C?I&!s5^V9Dx(U

          WC&>h!9M?qM)Pn+G|J}~3 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/129.png b/modules/highgui/src/files_Qt/Milky/64/129.png deleted file mode 100644 index 000826f4638bfba2b8e486b73acbc2f0a56aff35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4114 zcmV+t5bf`YP)v`IukRCwC#TYHcd)t&zOKIe%SW(Il8 z%nrdtUg8K66i6H*E>SRG1Rnu`SyM|aQyQ!CsB(9s?$(;5@&_iX#xhmOn3&XVYBi8b zA`%g(7$t#~F@g#VFayIp7;t8oxpN=gea@cKuY0=t^u2euoBTr>&h5wT?t8xP{NCq` zLMg?SyoGRuZ&y445&oelO5U5c{jjN--Li$<*Q|t;CMamKo_XrIEhnG+YjpJCmu9X5 z#V;xQpoCqZbRSdSAxh|ero}s6+}71Op7+_RukeE)0v>#>VO=PsZ0De3u`*1nor&5+ z1Hz#&Laa@TEyC33LWm@K-&Kg*LLIcXQPPK#ncuPNItU?1WkzwP{{x)=_zd{1jEFY& z%u_%5a(8FR1Z;g~T7q5sF$2Et>e@zJKdS|kCpBVlv=1YxiwG%Pa}-=RWfhw1KWn_q zZoG3rjlIu!mhX+@P{{ag54*md}MjHZS`G-9;< zM}CUk?LUy=cSxty0&Wk2)i16dhd$he`osk?lpt0ZjBCozXNK1Ig3Sm|=0i zdI38>STcUR-}xp3tsB5~p`GaYlT-yLrBdLI9aGHnBPV~41=rooZAtT8k55=vkbt#c zuTF%N@Vcr=70kVi1cG&uLTJf0U~FvI06U^7FoU*kQf(aulYLUK;zjp&rAdIUn}BnpuUis918txKS|9?J7Zb02 zJk*CN)24GWTM84P)28Z4RZz8b09f(IsY@J7+1T%zz*XYd0Dc}Q0ZyO9{!tcBK#fJBkP6rU;UR(RK82tb0tthc z&ZDMwvN6DU-5?7@5@{A%+TtZO!B!OD9gUI*uz(u^ECi!m3IZj7P$3RrBgn;{z=>6I zE|Ow&bO_aDQv)T+A)qQzodZw3P~juRX1H_}FhyRGs76p6KtphXF&;&_2O<|C+8@M- zOlf`s_)SJ+=Mib@{_q4srMp3$89QCoEeTLu#Q5>MEkC#VurfpHl~kHL*A-L6@)E$U zF{P5wmP!P`zUTkJ4VFi%OchZ4sv(yE%jd)L`NRVlf&^RFbe1^fQvp+;tkL%wIdAYG z+!Kz4aenYjNdzpvVS~&6+b)q`_ih(PI&-6;h(=Ga4NeoU>4hUfKKjIb$^=XNRv*OU z5!m^mW4}d`g|U~rEuMcn9=hlIC^IBMH}>mSeibb@-sijbku-j>_uJU=+5fm~5>_m^4=a~$^rge%cC62j$ff_Vnr?&ki{mRQ5OZIkOV}8T+@|f%VKelskMrJjD*?>oE>e)v%mTx z%f)r6+PM22M0D=G;YbM4vZz6@BZ=PkN&q__<0XK4Nsxf0Qk!5t6JcI~HyIfBYvj7? zx?ON(PHf@C|(6fAp=*2(&(}Y8cRPwk|9&sR(8M9x~;#rCJE46rPP)v_AYw1!Mdg__aK;-(~zaHp+8`YL2{u?)ec zQ#H8xt~*eX-jAC$x8fhWY7J7HEKhjOK98#uUp!roWox&feqjUdU%Cl*9@C0UhKM8$ z7J(WiY~2LP0A^Df(n%GW(JVVw*>&9jEeGgHU%e?S$t5+h48<3YUxlS>J`MfUZjkf{ zv=3j!k`13{BqR{a=3I6zoQeH|9Z@X0{WDN590b)eW*9u&k4QX&sq63B`cdWUnEgs`YoHh4qiYl+y*9(_ zgMU-t6egqbFhVSO@tK=^KG^flC=>g&?iaeK`42Q12Lt8VWGU{n7#-l)sDKBC0jqD?_l<;?rHOgXsvm3^*J{c zZ`R?ElMsI1P(Kr&xp5;F&Rm6t+Ic0d2zhtgYBVk%gns@sl!#&$KEsOH6quu+F)1DD zz~U7PfIWxt(zG#b>~JPo&PmOwy`gi-cgFXFWm9tCm)NGDKWO4qq~5NyOC2GqCN>@B4trMtwYG^M>`C z!PlaE{Q47^cy*lVu4axrmjFZT;7ozrozk--!VI?MsyPg6Fl{N|-$$y;aIyVd+q~C? zBsRdF=c9gOPiBR^gn;FS_i!dbQ- zdhK6uRc#zv%8~@dLxAE*uZ4_O%xt5TQCv7Y(01LMBdvLpAv;#5Ubm;Xy;iwL?~}jd)=AtTP&=6w<)y$^#N`cH!dE(wkb2wunqUX%h0OQa%#-<;^f%k}A(iYkcM zqwmrLh5B?t9Oa6N3e255wlnhTHEO{%3{HM!=jjT9#b5E2o@illF5-I`A?l?e9NfAJ)2Anq{aA2GiXD`B%4>or z&@bqytFOi*-8!C~o`F^r0oMEKpg22*pB-glLn`2(s;ato?Yr62O=<^On2^B1b&Je*9*a04s5NrKIltqU8-RydsOal1E_hSCjFUXhDFcMyA z&@h%Y=L54Ac@bVxGgOtd-g1nz$;;w$5^iAanIIGJmyiH^o3VZqrvLNvNHY?mAyfRr zx88>Z-+CdR7Ihw-g1g2tq*Y_U`4ZY#$jlkjS=xH*2|sw54G>A-YVa5{j8CyWx0-9Y zfjrUmzdIJp`qX>H7DC389EtZfF-bUo;P>d+@$xNYlc#pB`t}Q5{Q8MAhyTv%4=h#X zC9a*UzecHxhrB!49kH;&J=#!KrH`#XP1^zkw7>oB@D;xOjeskifd3O<0DU$Ni~RC1 Q7ytkO07*qoM6N<$g6|96Pyhe` diff --git a/modules/highgui/src/files_Qt/Milky/64/13.png b/modules/highgui/src/files_Qt/Milky/64/13.png deleted file mode 100644 index c4ae0c42fa75f4af787fe5ab2d4ec888c88b68c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3329 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 JPDHLkV1g+ZIokjL diff --git a/modules/highgui/src/files_Qt/Milky/64/14.png b/modules/highgui/src/files_Qt/Milky/64/14.png deleted file mode 100644 index ce96e04ceb86712e96952cb78e3edb8a27ad9e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5293 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 DgFN~t diff --git a/modules/highgui/src/files_Qt/Milky/64/16.png b/modules/highgui/src/files_Qt/Milky/64/16.png deleted file mode 100644 index 9acf8c20bd3327f0d6c7d5b28878ce9e8046348f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4376 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 KMNUMnLSTYd=(@iE diff --git a/modules/highgui/src/files_Qt/Milky/64/18.png b/modules/highgui/src/files_Qt/Milky/64/18.png deleted file mode 100644 index 3b76256babd6d44499660e41ddbd1100023e4556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3701 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 TdV9>y00000NkvXXu0mjfM}^|D diff --git a/modules/highgui/src/files_Qt/Milky/64/19.png b/modules/highgui/src/files_Qt/Milky/64/19.png deleted file mode 100644 index b0de5da46b3ba2e5f1a322adde7a77a9d54133b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2719 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 Z{2z$)Yv)_n09yb6002ovPDHLkV1gii_2d8m diff --git a/modules/highgui/src/files_Qt/Milky/64/2.png b/modules/highgui/src/files_Qt/Milky/64/2.png deleted file mode 100644 index 3523cc67061200e46dd2e47282ff2cc8b8617762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3725 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/20.png b/modules/highgui/src/files_Qt/Milky/64/20.png deleted file mode 100644 index cb5cd3788240b4a30f5b37d34c96de69213c7e77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7298 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/21.png b/modules/highgui/src/files_Qt/Milky/64/21.png deleted file mode 100644 index 4c94f544226d7a386c5c19fafc2d68360d66fa63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2321 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/23.png b/modules/highgui/src/files_Qt/Milky/64/23.png deleted file mode 100644 index 11b0899f5c1812f81b06ba910a0d7de42c130331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2562 zcmV+d3jOtoP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkXh)G02RCwC$Tl;Su)fN8E%&gxV8#{zJPGd(=(vSw(Q2HQ9&9W#`24n8+f*fT?BI!;_O1vGkZkm+iiWA#F?=xgPehwKuxrQd zP!%ol(5qj5Y}o@Kq=1wHLK@JG0+JuT4aow#uD%`7#*V=UU-{Cr%Nzg$LK=`(6VkxB zi|;`fMci=p*AZ>%h(B=r#y1~0zN>Y4x_~qw*fdj%XLI+p?!kAuTcZ{Pw+{d;pkT{_h3C4~8xZI6Lt# zG}cA&xox*VRkXwp|G4e3PdEU8WC0o z5LgR*=g6jR5PCd|B=YT>C*gVnK&5@>qvY&+zUw_0+S+w}U;CO3n4CFp!x99_e&te6 zTg!U1G+cpyy#G38a#JG!`VW8e{q$Ve=Kyf$lN(zBN)VyHv9TFMWHkjK0s$aWtUlXd zvVgJnEkwuxhg?8}0A_V;Si2RC^-)aCoCl*^jgm{Rr5Cg`T!Gf+bvSkI?--jpJqjT9 z#2u&7wF01(#0UrK>LdN@J2xSs)RoxKoJ^i8DBjDG*QE&We?>%S-G}+dl zj6zjZhsQRJ$<1Zgg?r}Hv#R!gB6Rq&lnwyo3tGWP7?g0V9Qeuzqh5+E5ZQo22&4~kZGQPzB003Y{LFyPwokmBr z3tK;R9Zvo4Wa6IRZN`y1PY+jgfxVA*?glWjc4G$`>RMd0?gzljin23JVRKJ&Ha@V& z91ah=p<)mzh&Hx^C6GM#E~FHRr|wD)RA7L4eM0Jx(g>e*zgxINq2EBN<^WXH=pgI4 zJU1LoDD_RwTtKv`1DiK~24~OzC;r{1y8&SEH+P>&2N-b2BkOkq7-{cXgZjG0@<#hz zBZM733@*_HDo{QE411Vjf2%&ygoa2IW8-I#FJwo-i2e3^XVZQS0LbhRHUmIqXFU)B z0!7u3*`HJ4l|5wOa)Hsq3ibeELy*m-nO>L3CX#mwGFu|ggZ6rvDDQ&q~-JVlVpFoP?hR_44RBxbWIG)J3}&*%HTeR$(u z0K=NY8fHjlNFhN0q(60aQeBi%VDhdLN~v%Vfw|@cT&b6rnxl-u#6<~w`MI*4}wonZSJTSoo zkcF;I0cHmy$3Pn}_KBVcNb@`aV50E(Ua03aIK+ttN=jPXhoc*~$r=tMnRg zAKMq|XNn6DVz!v#1%>?KYoYJTarqpA6!UtESslzsI0X@AcIeM+HRKE5gDgxSd)q~OGJ_g#3)#Q+N};nIMxnJ>!(s}Hri z0YaljNyw;*H*gKfll?hWQy>K+H=TpfW#aeuf9RyeK^Nc^L~OdCUrTHBeN`n$A(2fNAas#<;las)T69EnMUDeP7i}{avvI9Xg&I*@dA<4W zHJDsrQ0ST=EJY40oki+3D5|*_^Ls=^owU44(G(bt(qrgP2PW^G_l=QT?rZ7=&>y%l zg5YeITqMjbC^*xB>M{UEym3u^PkmDaLddz@)d4}#2*tdC{B!}#h`;#I)bPA+j4al6 z+s|6xY>d{&>Y5^uLe`uc69I~xe%%AQ>4@t24ONU#4}m7zkW2)$q=iKzdzLkn;G($WCIAjK+k35h~R zhoOs6B8r`OJomBve_#nbCWoXQ3WXsdiUQem0eZnW21e|!hw~rnpC^_A14i|{`Ah;c zL(dzKk`r${r4L+=@fUq9001}Ltvzckz>)+Ez45d$e7W?8R{uG=!naibRsmQAU}bOr Y2ehdqNvC#!>i_@%07*qoM6N<$f)O^YlK=n! diff --git a/modules/highgui/src/files_Qt/Milky/64/24.png b/modules/highgui/src/files_Qt/Milky/64/24.png deleted file mode 100644 index 94a8e94969701e113db222615a3259d68bc8601d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2357 zcmV-53Ci|~P)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkWyGcYrRCwCuTU&@5RTw^JGP!TI=^gc<^}*M61wni=6coV=TZ@Xc&@4WPAh<<@ zT8mv3jid~P1|4mj7V z|B!#L{Z)aZ!r^Uy%=QZax!*3e`_uzFlXAMSY2y~6GKFZGVmN>f0u6-0;vp8Vpj09o z)@>qjIhFtW%I`C9YU{FxK(B*wZSwBb_krAb-EZB}cK~3Sx)%U(X#hgUc*AhYL*xVQ zOojS?jjJ}0h7$m;yDDW=4*`??BcxS75Ofb9!wmqgmN5noRGkZS>pKQfdo1{C0X(*5 z1Oot1AvKI10Cxrn;z=4{xGx2E+}(r*LtyAVfODM)Ib}x7`WWx4j=3uoOaMlL1VyZJ zChW73V22C*OM=DFx7=I20OuoYL_7fLp4oCX4a|V{^v^xH07Hw9N*3VY1!BjnRR9ga zVcZFU1puaw0sw{>BAO8b#8wM*r2rQQi##Ay;LxW*#ti^eLkEy(#ZZ7E91#yNG&@&2 zA<*Ff8h#G9DAGxAWYVAxfMQ{QF5Bc z*5Pyp&WU$%WKn`_lt@rf71CCkuIJHiDoJ75LLCsquA^sVMp?*R(Dj zL2tzgv}=0($JYU!A1)8Pwrdf*mQ$xU0JJw=SG2)YvG6fZ+jM zdmz3Qp-%{mj1aPLK(B7g9oOm{Fzg|~jLr=+Jb*@V0Uj7Fx5Wc?ytDpcy9qSVtzm(A zeW6SbU*5Y5a0ehJ06UKAYjR`fiC*Qi-B*1-Obz^Wc>9rc7hZ7R~o+U)wZKT^a%ko`GE21TryBT2Zq4&2iN?WUXhweq~icW%Yf9@;_x@j^C{Zh z@@}-j-5;RZ_l#RSCP~^2h14s}OJBZuSKFFn zlS3L#1H(T=o6LhS4I9w-L@G|Iu=AS2O5g0iHRacAjSK*eXZEc;5sSx)xiuNmt^){) zX4!Na&fo}{z>R@_NJufA@#n7Agz={iRHnRSx^qPOq9nM}6zu$&+RX-uLuSA&GQEto051XuT!fvS$bvGfS6iK` zkDHv(N4d`ZM1d)E;0-ZDLAD~TTDuJEDx5l4nF~9APhXVWwl}{5t}BBy-H3#P8o@b@ zcT%8{YG58Hl(-1HR4xIsTZMGjtl*}cK2*INRH^m_031)hv0^h^dNG?%<>h1yR9Y(_ z8ANLc_zEG1QpA{7+q&_v+`{R%tFzro^}YdsW9#eVLL=nXWawmL(Y#w;3vc29*odSSo~p@RfGf4z=Y z70({6oebNoSyC488fOmAp9I5aP;x?w6gSKYVc6Yv&XqBU?RCt^269{?Sf1Bz)Un!} z4r_d0NziLN_1f5pm@F016EGAsmGy!C?E)x{Di6{x8jrdD+jkeHqPFXn4FDWZzM8#| z$ixfj@g!+N;l#A1d-bX4^DRRNI4J>kzl<3Hg-K6Bh%LJN zqR`QE{X(TdlvXsMGq4aa#}m6U8(>Dz2+6z*e1Ii1578a>^A%hMdQ=OfcXPg7#&q}n zvBq3)9yOp}j66P_)-}S)R37JP*4mLfLZ5pTk^FCw@5I=<82rmgPrNutT%( zX44>0#4+$fv^u~zM#2-uS3u=)Qdo-d0}BD`cX;HI&wbE3yX3lJP#$28bMH4nBk&TYEvy-k$-@w!oREd_cpY3{?1%BU#RJUo=u3&y z@nmc=J)RPzh>Fo~!0QM$VKIC(RXg_Mhsv(LRhEPH0Lv)0n`#-W#?)A%vlwTZlwj8} z?&oiay1vv;<8P}6;CST4_y#PYA*JO}E;mJbTr7hn8HCPQk~9D$1;9H0v3h^MjlG>7 zKz{m2K?W~CIurFf3MJ$ONs@@1l*Mtq+C;KMp;H*tx(52&Vc6AKFs@jiYgMpn#3rUF zYvH*%6jSYnT1Jr0f1=I}YE1(R0qfZELTm&0;|#p>Bpl}9b_w3C1V|kF`BS!R#z#_u bcgpx5o8Ny diff --git a/modules/highgui/src/files_Qt/Milky/64/25.png b/modules/highgui/src/files_Qt/Milky/64/25.png deleted file mode 100644 index 4e650dc81720ffa566437993923ab180b74959cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3364 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/27.png b/modules/highgui/src/files_Qt/Milky/64/27.png deleted file mode 100644 index 1ab2410c775933472e30e3f55d6ecb876c35731a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4494 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/28.png b/modules/highgui/src/files_Qt/Milky/64/28.png deleted file mode 100644 index 7d4d62435f165b83505c896699580c9b47dd9a03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2499 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 N002ovPDHLkV1ndIl&b&$ diff --git a/modules/highgui/src/files_Qt/Milky/64/29.png b/modules/highgui/src/files_Qt/Milky/64/29.png deleted file mode 100644 index 74a499650ab2c32ff1a4599c892add8d6af7b718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4429 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 Hu0mjf5UuE* diff --git a/modules/highgui/src/files_Qt/Milky/64/30.png b/modules/highgui/src/files_Qt/Milky/64/30.png deleted file mode 100644 index d1fbb72085312f2a81c1110bb21ab1fdef2f954b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4728 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/32.png b/modules/highgui/src/files_Qt/Milky/64/32.png deleted file mode 100644 index 11b66ad441cb40c8eace4ad926d8acc5bd3584d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3741 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 Hu0mjfY00rz diff --git a/modules/highgui/src/files_Qt/Milky/64/33.png b/modules/highgui/src/files_Qt/Milky/64/33.png deleted file mode 100644 index c76151cc32f181012d9d752863a2580a4fc7b08e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2791 zcmV004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkYZAnByRCwCuo9R1=t;dHnW@~65Rg_I++A{G3GArwLjk_9 z{eM2NvwjX_)P#``&Z!09>}&U4{t01c^6;m9A>nr)*!J5L$f}(Mnm>a{2Za^rJyt832i=`Os&x zPw@ZshAsc`g3Z5rLGsx^mK(O5^yZvGfB@fh;93-hc!+s;oPC1dbYe1WJU)pDpwDbR zF`4_U1&Ht^Hx@%q-FH&b6W2Y#Q|PnVNBB+UlVIbqNx&VQ$UaAcPzd)~3cxiVfrU=b zf$LF_Q9Z*X>51!}4}F5?XP@9Vludy3hbOSl(EIqD`)mYYrdQ!8+u8Uxps=UJCWlY3 z3O^CnADIB_4t)b_4|?MA@M7=dbIzd!V0nw+LE6l^upUZw1%Ler>N5f6Grlb8iR+#_ zW`JLh@aqtMZHXtWDgK&$hUBa%@#Gv%K!z?P0@ry(PW>z>y0!p{uSY|Ab*Q1xu>!y8 zxMAIIAo#-skF#IO!>>Nz0sk&?XM#x1>ir&^LkPf`_Q|LV(HC5r3rE^wq3Fs2&{PFO zQl*~)e!DUJNgm!f=}GX11o#pGe!mB-+UE{G|1zElp!e`OH>d(K>q0fVFZ>;j>3@b} z9jhQyHr1mnadr`aMU6&#>0gk4VJ>9UhQXnhWjs7Cg(3$36Xaj~0d_Tg54jDq zA@h6~XlkahYOn9`9!hwv8Ted+A5FlpBx58jPIF^Rf}|`?cUx{#0o1}~+AnrG!s+ zgJ{hNSd=n?$%#&L>$aJIliCZ7vbY;!4RrvV*n6IjHRc4d)3Qt&?9HUg>w$_O&OCQP=!`w8u=FYD{` z8s`|n2LXy>v#&nK3!rV0B0!Pwticxu@IuBng&#??Ex|8TyI>T!vey@?T_ZkO00Km0 z)y;&whVRW6H$q33czP;i*3IY@Ui>@yJZ*V>fsaLadB*3H-bgmf5_}2|ADQIBq9Gbz zTbSh1{|I>U)j?u ztqkR>I-^rl)&JmMBWB{Ry6$o&$Wh$F@5~*nb2(u6wriX&8Kk&6*)g5?W9~;>jS>SvNk# z5t9q_FP|-e$dkB?-;98emJ= zRB6@~#SJ^ikau+B*rWW2i=FU@2OL6|Cq{sA*wYYefJn;rMhVZZCqkGHm;|a1%t_dE z*w5^&oAmMsN(UN-<1PMxLjjL#pVjyp9-an)(?AJ5xX)`b>{SDPEN(2}{rmR@2{#*H zW2p~6>#{yxI>M55bd>4oQ9Rv|A8v?=kIjAxzsBh`R^27Jl;ILk_2t~s<|jg;1aUdY zCEVz&hYiJ36d|uDZiIGLgr#8?UTAQ{=Q!(nT=zZ>^W~^D3G0fy6|=59#o@zTENy8l zGlHitM*J( zguGPT7`3x>&(?dAi_PE%?7Klr60Ww_!OC6Vuvs@LYXx|=&1JG=*A;0)_yPTP*rJ3s z9mM5&Dnni>Zd|3A@9P%la9@vGl5nL}2eDZmh7%lC*1E8zAoTFz!|ZSk_zxsV0uFYd zB1(Aq@+CW6y3$$;F&XaCA%?gFu%zXN+36aTUx?hgb*onims@IKnPwb+euo0Ek!iB$ zFVhC?H$s*qTxza?m~?k`k~44H7d}oYfUcW2Z*nMt9k0nHJbLtqNr+GP(%SonnS=f_ zIZF~S8oF?(oLYb-3Di}h2)jyfm|u!^c6M?o0;qHrCD4((C;^AcsRdY)Ky?F(=)$3L zY5{b0baZei0;phm^X82tLHIVx<`Nw8{|k@=9A+h8G<4xmIkf<~^m;v$K(&G>;l+y= zAbc%nGYJm;e}>xI+c^{gv_lw6z|n;wR8B3xk_1YWBmsxYsRhv0*4D5(4BBC>m&4kPNCKhl~KaT3T8-6agfH tb_%CYg66K~=H_seV3QM~J_{I1004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkUTuDShRCwCun~7EGOccj0ff6ji5-5QZUJ0)RIlQ4j=i#eG-Ycg=Ty z`4|p{$V|e7#g}vb=ZNo_$^CKX-v3OJ0mpF${$+jt;B)Nl?G1{CMcIRc1Ly4QEU->b zPXp`Zovc?1TqyStk_JUnzB9v+;}&rj#;>#J*ee0+3a?(FPT zMSmj&0A&e2eSLlH4*vfB?!3Ofc3p38Z!QSAHfMW#I~65>)a~u98+6G*XK=2Htq+_HP?L zL7lsC%(b;OUjXOl=g!8)MzjEWSpbyG&DM-kk|N#~fUB#kz5~D%p(~K7xK)8rkz$?* z3_#{mUjm?Z@H3t3RWgKy(|FWC#(RFV$yd2XmKV0q`sK}z+1Be{F?wU zMT`JQEBUnmq`>O|HtW6 z3lE^t2Y3yU&KR{aOJ3iA7$*n-R*=>J{RJ?jsPI_O%GscX~`Hs zw?KHuw+bMW$pi+_DG)!6D|O2VfE0K$0642K0HT1Q8;1@+TQvb7p!5J17Z>XQ*ivo> zLKql9&P!0-FEnYJ6iKOXdH@Rx3*P`Jv7GeV5NX``u>mVc@azF{-+=4024H@E-hC*_ z3xK_K_6fX3NPT92P6f}nDtNBTB+IxyDe&O|G^&%|wAYQ2aa&tk_26||VSxe6&CMk# zEUf@^8U*VQ%npI`v&u+EGXPNc0tgDi1`PEWoL}(t{vfTC z^^FmL>FMc&0>FT%T@Yc#{HFD);Q372udlB+rM|9sl1WnF^|!{Rrltn5mK+4y3PRK% zXuC{D6});-N~OMOCT(nNxUE_M{4sh^a&mGqt9q*fpaT&F48Apj#e|Wq5YFu!DtrT_f8Qa37X zy)yIDL4i`OGHmg)2tYU{SkSY^VLiy zGi3F}N!=l4DT`ynEKv_SVU(2E7sM$tKGt29yML^|Icjol52^L}vGX~QDgXcg07*qoM6N<$f(>R87ytkO diff --git a/modules/highgui/src/files_Qt/Milky/64/35.png b/modules/highgui/src/files_Qt/Milky/64/35.png deleted file mode 100644 index c9b408445f9ecdf3f38cdcae3957554d8d9b7045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4105 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 JPDHLkV1m=IKiU8Q diff --git a/modules/highgui/src/files_Qt/Milky/64/37.png b/modules/highgui/src/files_Qt/Milky/64/37.png deleted file mode 100644 index b0898c8cc99fe6ee74b8af86bc5178bd0c9a9178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3189 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 b|Ml`8N>&@R-5h004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 IM6N<$g7_2Yt^fc4 diff --git a/modules/highgui/src/files_Qt/Milky/64/39.png b/modules/highgui/src/files_Qt/Milky/64/39.png deleted file mode 100644 index f67ae06b5ef97393db7adc989d29586ca7067d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3264 zcmV;x3_tUUP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkaMoC0LRCwCuTWM@m*A+h3cmuNx6dR{%o54^Lup18!)S`wmEV4nk!GNJj$PbWW zRi!OUuxYDQ4ODGP1eJ-R3aY9FQX0Y%mePh42sQ|@1VRRqKp@yyP;9{4c$@vr>p6Gc z9nTxTHw(-#M7i?i&OE=l_k7>^&bjA4#!QxF_&T>F_?kENI2&iNSWGyWvFBqqVmC3y z48ixIiY+);=_A-LVXrlrObuU20xn*>NC1~$Ux8qasi~-E;+@0U)PFrneGCgA+}^VJA!B>~UK$l&0q6ZmKvk>PYYIRT`E zj*bp`P2n+Z;>3xT$C7|^=gw_K@JogdAI`xO3Bt?hK@Nz(&};H=U?XLqYWSFzmZnk% zDZpm4fz@iI(Te0uD=aLuJXQppIdi5AjozP`nF)gj59Z*hk&L^#x;Sv^4u``}f@&K> zzyzMuLL=pifddEn^96mbv$K0D77-e1p_wY9Yxi6dfpKA^dYSR#eSwzjsFr%s)E zbMoZL4GArTPM$nzKmt~fQPe4p$zTFb-bdMzT*o8uwUL0QhWBkFi6e0qB!Uwuat7rV zB7;H(?^%)XN)U}G!vW8CsN7tlptwMoZnbeQ)5cF z0?6~^5wUkuvLhAX`*ksx{{RBFih_vNAOdKopoEC;%?Tsm*s)_~QPmLv)QA8w6l2zE zHk)f7b`6|^Lg4_-NxKO(B7ndv<1ohC{8J9ky(s~P#)j}h&xOJXe#aq@^*Z;ZMpef>jUN+f9HTP?+5}^3fNS$$bi7N zdS!3f2!j!FMvR9n95d1lk32`XJPxpS--X*PS55Uz7fmjYeMR;0@_DPK?~Qtk6uHGO zd4&K$jz0)xueT<-UrO1O+~;9N{!$p3ZAu7uUa}^qbMl`ZJsW0ETn0ljvW#A@RI~9| zndxB_Ag)pP5jk7|8;_Q)m1K|Uhk1)3duR@{cHM#7&7VV$qeK17j4{pUs+!N$lzUkO zk06=GylE)|VEEwgz!SqpL2*F^{OfGBq08R36@NAUK@||31F+|F0=%+k#pov{07?Ig z+o$24^`_6%2LP;w8ad#=d+C);>VR90PobsrHsn2NhN5wc;Qb4KHm(0)_L5)CI=n54 zB)A;`pU~L_8j}C`!ECeSl?*xA4{4bCO$4Bs&gV7A(IUOm)(mw`AH$e$ z6~chD!O&%ErBhtQ1T0>>IOM&_lGnqJrddOb@Jam<@JKFwb0bv*(<6>OkQy3Wufex7 z$07kkz}j=)7|VP^1o&b_mY}8MmWBuQL?7gD7Rtxb&8ZfT@0!io31q9VH)aHQl?iF| zNbWwigapsRNt$W=I!toZS(ku&l^!1jZ~|PB8_U8aJEkFu5MjYWr&-~BDP9DS_dQ-$ zOpJ|0AxvjJ?HL&YcgKqWx5BU++^7H+PSPw)F6a&NFbOa^g-DW6fID6aa0ToD`qJ)8 z!b2#fPqCz<5(bI_+;I*8$r-`k9^Shw=ssOaS>#(KIS0#O-eXFDEPMS5aC=-KwlVbV|@N)$}ob zWRNTfr3C0k5}1b6^)hoL^+HstVfyQkI{8D4m@7b;&>gIRU!<>-;2M>;u(=YZIUfKY$~w-`xpn-9}MofyOK7hy?fiUOp# zC_u>p9tV&bcNH~zyuUNPTh9Od-&SE?V;DJpjHs%U&q5Nh3q?BpHW0CkjTIFc) z#I!%o>i{XPIlzudM(*RbP)FLRo(!w%A~`Hu!KAyDLMV<3zz~r7PA;=hFj=SvM4>&c z`k);4bm8$hl}a#93UImY5lzl?441>{pG6)avIZ%X10=o;LYxS|5NL1g?0rPVK=r!t z$3HP4J41(51htP zSy@m~G_|+>CeJ$@@au!Sx%^f2yF$Xs8Kp3NOs=YC|L}`Tu<64?0l)H~~?CNExKK5^ZEhyx<=hrWK8FI3+{c0ibl{>aTH~nue z|IZ7bQm9aq;t>K~xi<-lmNPsHHk2=ffdSyV5q#C20PulNbZ}T*TnaPC<|#mY#MCw4 zgDo}x<;qgK-Ut4T=PMv5GuuxXfnWXhX6SO*`|O#ncq)KD7WaK48%AYj!p8FQ0Puj| zolv=Z7XrH9_hASARL(;1 z`!8JfS}iRl32Y9m1LBnfBusz=eglHfNK5r48ztr|_v}%DSHhPYKfhoi6z8fve*^EW z+_?k6JNhg*Fg+dq^wP^PYDBN>yK#*-Ft6x=UsLuX)TK2+tF2>$-h6V4BdFPB5Vpoz z0Tv!(4mTum2l}=`Qs$NuwFtgh7kt&M*?zLf`xNt)yLM`Vr&d+Ez~_1JRdht~>K%VW z@J-s_=l&Q<@}K24@o#!LJ#kO~eVLHHtlZ;*OYM#RnA~{e2pqX`MH~FMT&OCU736sW z|Bf#BHKp^QXv|ZJ=Vk8sP~ex9Jm&{*bK2oX(;c2nv0OhGQv!Cr+R}im)_PnL?7Q}< z5B$-iaOCP$9q{9zvZTZhghuZ9-8+L4UI6$xWl;RRd_P$n{6GJ$3!Z>4_dzdup;8EiTGzF2P6p0(|pVom_Hg|7`ID{F`ZQbUi`0d9xK zR~}>gK~4^={ZVPa6AQ*cSMA-an ypZ}X7Mg(LA-=C#Dx~3-4ioJH<>m8POF8P1se&>wXK%9&K0000P)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkZ#7RU!RCwC$TiuUcRTclOea^jihMBfQD>K*@I>3ZNptOLBpoAun!V95^Z+_s! zfbqcu_yJNeJ_a!KFNOypYXr`1Mo=)AnkXOi2A;H*ZmKy zOOj-FqtV!5UuZU)7{Bc}np;kRK=vM#-HTxFN$#HjnGA^;ia;O`Zwm-SFb~K)1ke5W zEAPC%nsI~Z8}+-W3V<)%_4zGnn(k>d8ncaN17lY)Hf(8OdgIMVRD$L;XP`#g_8!^Y zO8dV|4-ey`&INaF9wPe$*!z=5kDkA50DSiLJDy0AWbg9wGA5^{@YHu6 z$6cTKA~uX~zAThIyLbZs_|FUY^WkT3_TmXZuplC{Pk-ax=W7RG$F19*A)?vE#YKn+ zrlzK_annZJc;i;2X^L&zZ^IQgp3FT=!v|ny@^jd9<;}RFxfUnURTejZx41n2o+fX}65=>4`V)}+_F}3L`q-lyZYsWFOOB>6{i+39fgW(}1 z>WkHhW2X+`)WSU4-6d?>`~Y^|G>c6WH{q@D8 z-EKECe(LHeOz-UAhP%fx^XWS=(i{hof+7VX0zrY?m=qKd0C$e^b07;&Ae4b({Tx%r1?|9V<|jK&b?ZR5m6zCY7Bd%C8}%3deHb%G+?3{-uJ}G^Me2|NFA`(H$F)ctldcX)NM-;VX$a0 zYp^#KVTjmc{<-WL1~WrggGFc8n)?-B;_hKz-QEh``|t=}JMw!RJM{+cx#df^|BkQW zr!PE)UAI35);z&lo*ZT&wAGeA2504G#Gv4A@zj8AMhA z!Fe-cum^-lF$_xdmlzw0KzDm>y#3!-v3Y7M#@DU|1YpfOYMTof>aPX@7l0@|c)_qd z3`+FpIQ@MVuxPAwF5>-j|HhqLA4JkjAX=vDoeZr4f^W1)*@JS)VGw{8f+36#&K<=_ zYYdYcHiI>P{K-&7ZnVY%1c89emIx%KXklm&1YiIpfO18lfZQ<>*wO$b0w^)>f!UJ% z5Tg7AA~S}VIzt4C1We``x;@6Z#rJUC=3DXZk#}kWz*c4^$5JH-0E1mM$1nycLpin; z9svMb2q-XuGFIds54VM}_`pzh zo~+?Q1O)+vu+(0_)f=Y4TIvCS>@-y*Gr0_cEnqVcL_kV1^o-|G@VMIw8Cr*I5X%Ar zc`Tp|2(kO!UK@>cv}Oh%XFwDL5{Tp=2moR>=w-2A<#}Y|+-RQ#o(_1_cl%j!RTl%? zB*kZd4+08cxQUI)7z}NVLMi5pv9F3cP+);$0Gs(i00eUnOuAkM%72L_Q;S!P4-_1yCY zAkM1590(T%WJ5sLUkBuAuq=qC)ns#Xl`fEEp_H*f7}}42u<^QA0g45q2!ss-CxX-) z&caCliI82;AoA8Xtbt-uA1Xqkk`2B#i1BV77S>>Ev}Agai=ZNvrNLSO5HYcD@}YTX z@+V0okUk+nAX7&WDz(8}udT6c`+~V97$Ce5fPx4^i-zVQ0zgE??kZ8vfGj0?)F-mk zUM(aLh-Q%uzB<^2F{}EX(WD9jNR|N_mxBRY-H_{_s1=CEgOJayUy6$ybr78+p|VD3T7Wnq9T z2dx&6m)>7NgfdKv1ovlwJ`{fV#bJvMXnNht$H=y_i|Y+8*15i-L2#(`lbLk}|qN@>tB+lgS6!IY=I zJR=fB7{q`|lo$JeP^4I@03y^8KX{mj3_w%^Sn^!&rUVv)k|s#-br?&1Ees+9g!82(tCz;4Nbjfsh9MC-=U<}% z%>qq;QUs+GC_%BH5|;|C_y(*nAy9V~5P`TAo>;t7#9%wlwIT$A3YwxBW>(j=U?c?c z^diOrCxSGr5Qu9)z7FVDdwn&a1X2YUKrw9WAuR%}0Ro%VB_faw6;i4IurSxl0NAN) zmIei@Xg~y{jIM4PT>+F22$0ni8fFV`(nN{N1Pa7bcL+EJP$>+uj!{JzxIREs6VQh_ zu`zOi6x#*vb$YhlKBN$ce$lAJfWX5vcof&Jq9`BFy3#o?!e;s9GIWHH=k~rr z7y~JyV^KijUibAO)IoL)%h~`SFAX9ra$MJ^oVE%~a4|rA(j&@%xLIVpGPWJ+QlH}E zhCs=F@_K@OypBFhkX4MA03bv%1>(S%^$Hpu1E_CTxaj@TxWokX-Aa~vC8(_^q5~0) zz+m4Fy%Ycz`ger~i2u;D!R)XY&jV%!1T}}}sU%gnaC&(-04SvnMyJ9ObcFo$<~KrY z9Ul*eh?tcGvP}DoCE@YxQL@Z+a2O0Ym?TNLBgBXlLj5v85EhKvHckMkcJ0GkQ+wpy)he`RF_^3hn93ORfj|Dh|uC~ZrIp>$6( zMiESR&c0`4tcf$n764$+pc=3$00-ZEW3JI`9vB%N1pq8BFGH5rStETw2%))ftOSGu@xdg;L2e#{LG002monq9MI%|e={==FM7e6Iy`M#>Kv^IC=X zxsnZKKsaPXaD8JWLE1`i^6fJV0A?>G4GsjrE3f_Sm?D~;x_Sy@V`DgT_AGE_OUXN2 zVnWeVTml1eFIOGoGBB;N2AZP{oIHGbq1V(kTwI(W zB1~*M4n1<#eiID&?}W%JVBE&_^1YwY5fyWI;q!uf0L4j9+Db7p-bAmh@xjrv^Q>j} z+Vc68RixpQPq6T*P*>FW2F zeoa^1aq`PPl`5!2fi+|0Vh8Qz?!op_=Q#lT`cb}C0K&if9>sP9zb>ii@8F<0eh>iu Y2kQ*t3g0VzsQ>@~07*qoM6N<$f-66v0ssI2 diff --git a/modules/highgui/src/files_Qt/Milky/64/40.png b/modules/highgui/src/files_Qt/Milky/64/40.png deleted file mode 100644 index f39b08537fc3a66fc0357589702ec9b49b940e96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4555 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/41.png b/modules/highgui/src/files_Qt/Milky/64/41.png deleted file mode 100644 index 3061701f56de27a9a73c77127a68850c3fc95373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4024 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/43.png b/modules/highgui/src/files_Qt/Milky/64/43.png deleted file mode 100644 index f3d9e5d43534c91f7ae321d0c83d4d954164f500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3763 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/44.png b/modules/highgui/src/files_Qt/Milky/64/44.png deleted file mode 100644 index a549bfe0cb18e52aa961ef21231474eb4ace5234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4490 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/45.png b/modules/highgui/src/files_Qt/Milky/64/45.png deleted file mode 100644 index 123fa1a3dd2b1413efd4137a0fbab00f283c4de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4135 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/46.png b/modules/highgui/src/files_Qt/Milky/64/46.png deleted file mode 100644 index 4347e5291658b65f2d238a22e26f050b0e3b5e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5031 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/47.png b/modules/highgui/src/files_Qt/Milky/64/47.png deleted file mode 100644 index 87502ceed3dc283beffdf471e2a06bff1fc8b0f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3221 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 Hu0mjf*V6g> diff --git a/modules/highgui/src/files_Qt/Milky/64/48.png b/modules/highgui/src/files_Qt/Milky/64/48.png deleted file mode 100644 index 6cc7164b61003b28cdad047062f710dcb70d372c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3797 zcmV;`4l419P)cyzMvJd z^QUT6l`avb4~Jx(haJcEdc5!1*`4XRcV>2H*XwsCsg#lK-n;X-bIy0ZbMCo!W*A-9 z;Y!|ExWYGnz5@)yICj&XH#SDFlE6m3pKlu(cIti$v7DLj;Kc%<=kUfb-k}S7+uRUX z6A?I9*d=&Tcij|>)EX2^1;{Ds_-tls7k5IY<{^=qkki?j ze#Ga%!S0jtB?n;d;Tzui%qO;VP0xr? zECYa8(3(Lg8bj?Ug9_6#=l8yN_vnF32EY@4xJ{Qr%}`Ktz;iATIS(8^acr=E$A?uQ z?0V(84zJrku;H4U!kVt4;)$}-#HyN2af<~d+kd;l6#z&Lv?dL|PXd?A1Cvu@gD>qm z-F-0un0FW?0ut-1Bsdk4kSWZ-r`FvZ{qEq$2ds1Mc`4j?b<2jKPppUOIL;BC8)0+l*&c!YU1Na3QpefX9bg05#wV0Z|lbeGQsc{Oba zWo9ijIAN$Keofkz(%7;wpk(eh$9lcu)ASsz0z`eqYhyy?Kg+QYXz)QYk>2|1{o_X* zV*v3{Vr_!~CIHkGEQNHcbQK6xdE0SQ0n6G@rahEFt=(S+Osfwz-~ z1}y9X3ds~K4y*siZwTNGU2^#(u?M1xUyK`xsi{tX31nP+q` z{^v6a2qM?9?We8M;U8R(9RZ+JLI4T{P?Q`M&dS>@I#J7&DQ0R{Zdd4CzQ$BO;FrMX z3qfjDhS?c8p3h}TFnb>lhXg_B@cMiakIxJ8)Qk}{>kN^(Q~?^+1VB$IU3l%Fa|}>b zP!+YlUsW|K%GwpSx7}_pgfOp|nVyuVCPq+brvKINjmK;I-Tq{Ihad_AQcEyAJw9Ww zs}2aNg1JOV4?E@pB`cB9^m(+`Ynzo|W9d)QS{AdprdG&j6&U?!1T#5i|7#DNpO?0H zY#6D%Nt-GS1)98(neo(|?$VmIc_Jnz#U==8#k>YJDpe?w7rZxSA`+6uT!*& z(p4;|{8w@c_cZQvFJlA8jNODTKbc~*&EEC3dKF!JU5Tpif#sCr1kR8{1}<=%7n_x-sA z>HDR7UHclZ4)#us&d`aFgfl;q`eJ6-{m17D%bxvR)+a;D-M+X>=+y@__95$bnyeh79XWNx}Kako7}IY3)ihw`Bk~VYPZktFIBtt>VJO(@ixAe8iY2<( zLC0BIF}5++8g-eu!?B&c97|V?F^Sr4KpfV{<`<0mhzxFwBzk5zHkZlgQn+5CE$l25;?ghrJ-V_MD=5CLa#!@vDmW=UiC(I-+QP0L$2h&g!z1Ajq#W2$lsR2@3HyBb(EJ$4L-IbMjDR$#Z~hkGGQ7 zXZzZ&zA8#y%$SvD3~=itMCJcA3pG{QDeG_$)HEoMwFV_Cmca}Rr1n7M_9xqyvusSqB-wF>%2qhDp>fGk~(dn1N+x z^3d2OMRz>Kgf&g;e*J-osyV@qr`pNHr%MoByPKL?BEae}HGQ7GYGbWK($v>V{mpcj zsm_7tofj-+7+e(qm}pJYGo@ z#faDErxumvDf<3k`Fe}ywUoChPO-5mXk1tM&-1+FG2kc)(PgEbmO$0J0#-uNW!D3yw!ss%{M6J;w?YgtM&HV|0j7(LJG-#m}JPHRk%%zb61FdztSXBmJ> z9>IV&K;{BC@3$!rRUivx(5_4^GIK^AGw%zKXykFtMyz8>Ji|ZRb=1n=zZ?c#aOMyvQ4K0p1F3xDSIF z&x!O+Re^JXz+1%)9x*`o@z|~$Guq@GXU0hePy`ufzmikCf(-#FlgiAA19ldak1;le z5G9#f7La{rBxg8U81p|v+Xf4KZV5!rM_;6#PMtO1Ft-9DLqT(N7$n=^-m!Q=QTp9p z54b#T8w(8U&S3#jm}e`+Mt9QYsKo{Pt$}4l-m*An6c_J>Ht9OZWpnVakN$e#A9gqPz%h(GRUs7&4e39slp}fmCj0(+hXS=~CB= zcaO@c>~!aU;(v=Z1=fNnc<41eD>@ql?c2-WK7&(Pt#fL6>`0^33XM`*+2^Y!D3;<3 zOTQBm%;08FT`W`ADn#-2hV@8qKa8CIdu(iKr1QC*r}jR-^HkMh%ky`} zRc~WxO_$#jk_5p8ii$aYAqgDAn~L*PapDGKIP;*ji3>#^-m?g*|Q#`I|eCmSMN(HIo}7i6Ougi%L9^J|D-s z9z&6apT7O#eMtF#`FOnN@J6~;;N%yhs{-Ik*{=AHr>}Sb{wKfyG^;3BiQ0<=00000 LNkvXXu0mjfC0`4; diff --git a/modules/highgui/src/files_Qt/Milky/64/49.png b/modules/highgui/src/files_Qt/Milky/64/49.png deleted file mode 100644 index d6686e9cd13fa10b95db3769078f1922a5b225f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4077 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/5.png b/modules/highgui/src/files_Qt/Milky/64/5.png deleted file mode 100644 index 9d3c5a36833f51a519c5125098c70d268ffa1e7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3809 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 X#QNG3)Kt)V00000NkvXXu0mjf|I9A1 diff --git a/modules/highgui/src/files_Qt/Milky/64/50.png b/modules/highgui/src/files_Qt/Milky/64/50.png deleted file mode 100644 index 0bc5d92887041c4ce8ea5b90463744814ff10531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3326 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/53.png b/modules/highgui/src/files_Qt/Milky/64/53.png deleted file mode 100644 index 8c88aaab2a6a0bcc6a63c8858fbb2e9f36a8a483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4288 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 KMNUMnLSTa7oAJ^B diff --git a/modules/highgui/src/files_Qt/Milky/64/55.png b/modules/highgui/src/files_Qt/Milky/64/55.png deleted file mode 100644 index 533f2dee64ef6b48bc852011a22129100a92b0a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4140 zcmV+{5Yz98P)&PhZ;RCwC#TWN3<#}$4(d+M;X5|tCi7P3`{K)ao=1;1UKfy_*Dyd49aZ+*afbBRw zDmJ*vfMbVn2*(i;Vi6#8YeCv$c4wyZUQhQNyR(u2LAlCI(VE%anVx=MfA4#*-wcd% z4j<)>T?6160M`Hj#@Mtce*3w$HaxM-cc$mVywUXGhh96Hk{?s6UdbJv?ZF=VY`hJ3 z32d#vA%#SFp*6F*}Be)ifE<13riB$%{XbwGO#7WDOX!ks_=wfB-F zw%ypCS@mizd8tNs-Ww;-AH}r4kIP*$Ki!FZ|J*c9e`iG@dF-@$DFCB zOYA=Ej?&pQZ2ZYD0@;DvPCRYf#mrLYJu#eZ_7onrc@1?9a4~>lJUD{SVf)&>`p)S9 z&}K52BW~~#*)LVjFebWsv|NeU+oTvdlc^1sUL&9+G zb#l>&{akngr@dkCwdw>!>gvV)&mS3tk^O_kZqdH}y~18E0O26&AG|HH74OqVR)(Ss z8aLH}VW0@IoG^$5C~C;mpqp1BqIimBy9gbNlZTVQ#`TeKl0CTnhcqzXZ8+ z!*qEf6pKN_!}lQo*8|T_K%wVFH2j=YH4d%{NkXdZ@iQfk1E= zdTYpWQ~dW`>~L?12tNAbjZe>;Kj$e;(?G*%BSwe@_MVKctF429Ow!Q+f9T;bH?{~; z7sgS5xtK8vo7h|Sv56yWOpn2LYAgsZ+5lF8!O$yjgFY|* zis?%5046RBIlUe-O)bcPOfD!3aV^GCwA#qbBO!lTB+n-lmlhE#P#FqXLy-mXuC>A&F z`;4=S%`z-;OndQJw4n3-&A@xm3|ZMp$oIYp=6Di~9t6GXMKC7@r6Jrthg!kj^8(m= z!}WK2rn##Dp5IiYoIH5}zcZnJU6m(a;CFdlKrp~0|JE6pNLNx)5-*1U%%9mYZ>Gng zBr|nb!MVc*GRy%2jiUa!S%7@<9rV+PV1Ta+hdJDl0M(C5f`s9|z1Mgb$jM|Hs+Y#0 zVnG-({o+1tB>)(vDF86?mM~b83a$w-q?(h>8iSyefrA<(S6U@ALW)}4F-8DjNKhHK z(`h3gpeY^@tY8p$F$iT`K_4kVRdWPtR>UB4RwPS_cWw@~$hC@M0E$$>rZkBj4b;{? z=CXjfYk-n`pBHNa_ll0=!w!vQpS*O<;DW%5nBYl!1I4gRWFYq>5UN|k?sx$F0N68w z*_=U!a~TEHEV-)BM2ssp>XOx&pT-2Usi<-v2;SKT?h!-!zSwxH*cAZu zF%#nRLlB)40)5n^E?QMMv|T{AQW`FFHH!t#yb68fA`TEmTPUJAz>xRTDcqwI)R&3Z z+YC_A#Ril^z)H^>{uCI~MFgvq0d$U$w#09-`Vizs1ON%224qr&?Z|*cV>;U!HLV1l zDALLa(;hkg8){C7*@JQ}fZ0#u@P$BqP*$zi&w~}RzjatpOekLJ23{9XAe4xq!-7(G z&_@j6HsLBwd6i!TU;X6~T9mZ!yD_wfRI=&rDv<#WAIhR2+G*{N=Cs-r1PF8k(vimo zk^(pit|F2!_ZXyGQ7Z4cKp83FMG?jFM+8T3Jz@xDKyVTy?zWOBP@L2_F_U~ruKP$N z#f_ao7xl#K6)My0Fo!868Yx2_8LxT7&(Rd=GJ#Qmdqglm1A;QcfUxM(2JSB3g8}fs zE-o+}e%pzO#ocN^u?{jj84=l_2$#}$dF(S@vVj9H8wGs%gij1T^ydL$7#J310Y&vS zEdx9V+LqZdTtta7gBIbFewPM&f#8}lUWqIB&AN&LB?S#$4g`rg%byAi)?#b^lb`{KXP@N)IOsl?FY?y*@WLBf5c zS`&LicNmZ=$AGs;1T%vMRL+Zw!3)3UcCF78Q6Ts^0>hI91Eld>8LPyQai92!2+7zK zQGgev#bv}$&8(bd2ndg){`7rz%v9YUF2?}zLw4L0oy0J4$et5IAlP6|5eBs|En2uO zeva|d*R^8fnLOrY^C>qJ28*G~f>IECk%5-Rm;_<21L*AvW71T1S!8tu(-@983gA6JTM>d7|mUyy-ATTL6RU) z2&aY6_=&vga(7t`Kx9&HtkCF$%@+`aL`wulj_QKi-#pj@$(l+Sk44=KQO5UrqX4Ti zlS0)MLRkRhP3eTqW8HbE zU5u-!Wf4eq;jvzTb;IYSkApwqkt;?^9`h;0Pl3l-&>Fi)iOYdt%?t!OzHV6*@)H(J z4hj0FHuYG(hb1KsM()NFuS8^LzE zVE6-FR9I`4Mnw{26+iH?N`c@(U^u_q-}ylD7^td13KV6Ks0jH$bgM*uV7U|es5D=@ zG76J}CXAgFbpU#px?@HF+;hTa!Q`+h1hMY=C`4*BQSdZ5_XFSsqTm^@;TldfH|K%HN}$JBJ+JeZ4`i_9G-(OrR8qr z+^$0)^_Og_7PX7x|4f6K7XsY=xn90E=-FU+nuoQ-g0_*~e4-MQqB+Z>kQp{aMx_cK zOs)(?gcAv$TQ*bQfv=Fn-FoUY0C?92Jm53;RFD)9&39G`-8#8HD~u<cD8hw45TVE)=k z$%FOj-^uXIJonK(=(wgi0t*m;u~P*&eK4yQJni=<`Qcf4L*(x*>=3=1Q`Z!MCcM!k zE|^Xq%=rv1Har-F0Q*@P>IW^=i`@YK)S~eXYvYhTZ$j6ew7R6@fh3>y4UsU+aKqEv z@z2SzGlhhPLeqG23>L15LI2U5{R|QOelOkKrw1iZ*2`H7r5X@qJZ(hz1vrijF5r6h zWfV}`KYyyc@t5?L7;P^uVN_10x?!SuO&sc)!;r!};j93`6A?U&fMO<;$$+ObJV+2@ zX#A256`*H0^z6^rt5txV51!&3v;LBl+Fn?~+9U|jjG?i<30GPO!kNyT&lMm5kSXb3 zh7G00bI16W4VB`%ZZtl7L6q$GZtmmlSL8K0-%CD=*;e^VOCSgklna#T0D~zW4Ed1Y zMNEjJ@k?*76h?HT7)#?tWqV5>PhD{UXxrrhVezUM)Gvy_SU(D5XRd_uK`y|i*PK96 zti$^>t&R!WpG39Kc#QwTX+GoE@Gctw+WyvD1VUq2fY5hLFAKsuzg+_|IkGkKWhNc_E!%Gi*V62Z*c^&lQ_VCXYHrnUQGzFekMVI#<~bscJr1* z(RdTO-^)41Gcx|n#Th@V0MPcACbn6Ekf>i6h9wvxGZPl{9>MG}Yk5?km6XD#OM>Y2 zfu{eE6#;;@KQ4jwpOD39V9i!m4?u{)7hKhau#%U91qYBtAqRREyv`Gw-GEUGLe zDylGjT^>i1};CueW(GT?YRbFJVl7L5(s)Mzx&Yv``x{( q4!}owy9U5D0ImV>(FWlE0t^5+XAMO?WW@>q0000o=HSORCwC#TWNC~#TkC**j=rxl~$4u z$rhGu?tnp<00~e;=B|)bFa(m21N;ku^9R6H`I1k-FTkV{a)XmffRIWdC*e$ig*j}% zwq)6sWLcM`)gE(n=Y4y+XL@FLC0UXQRc5Gm&yHq$`gz{xJ-T-=IOlL7A0}Mj$Cm_r zNx%hu*z}KK7%Lv=!+RV0pn8~rt6wh9tmcIAIeF}QWy@m>AHseJFqUt7wcLNM;~A6% zmP5b?cV&7J@S`{c0q+%qh5y7!!1fHbeOJG-JTgAGM}WQ`hyE!65A&9OBF_=d0G<;O z&t3D+%D}1r_66$EM@yWNR?M5r@T{7^yGYH&x9AP1FBd-Guq4Oje zl8@kXKRxr>{`y3m69Mn<$UKSN69mkt0$pwWI>XXrc5VB|!qz!>XXbt)8pr6VDph#( zIj_3LBfdE7>HU}U`Nz3Luq)V z){whVqEA-=za6b^z_TRzB;B{H zS{4BZZcTzm&`l}GUDgh{%h!Y5k^`_(2sn*>1`Lb(wCpp$Tn_V}4a3y_x4=C+tApA{ zYPj~b%8XPPxz~%>dekkM&Q55(B ziTSu%gj?{Zx4-G`J|_YW+?;+AK|c}Z&5Q}Hy=~BP)mj0XISl+_5qPD9#wg)fJ_0vL z0C?{jFq_tc*}NIdmL4Q11+xba!1ac@F=4!a6y`oH$XFmE+KB*`0+1p&bQ>7pK5Aq z>alHP5SwY4u-_^ z*2l=;6dUn&0~)*0Xa<8*e;vcP;Hsdw?}h{3&X9mde*U$`d$(Wxl*=k$Az%}=Y@x|a z!xBJEJV)DwN{JN11LJTW0vC<>0RhxAMS=$$pZ~MrexV2=&C2(H-Eo}=m~?>^M!*|+ z3+3)=Aza}Pzyhm5g0GR`#nnLLHeb;S&U6KaUpS-OfQDE^ zfDL4Ii@+0bLlPjZZHRziXn~vu1W-UC8YBTi1)}$Y9(^|hO@U=hE@}jC5`$WC3R2y- zf{rzwvVDZTKp$Bjk{}5#&4%Bc3YK3F7kh{1Ma+fr~>?dWVCQ7q=0|F`x9M1vQ zb5Y?Q0uI1d5g=3mixR*E2~1uOK+vR2lmJ5uQ9R&Apd`O=7TDoe5rhjyqK*kkV386+ z;JOn0TJ8`9$I7Gw4I5I>c3l=`50@0F*M^HBBA`-spi=PB_hsNRWN=eetvoSJBVL9I z`K!;;C0O9E!V;>dYqk?eRD$OQ59%o|NLAdZQNSc!po#>gf*RnlXR5UQKI1agj04$<5O-A|ufB$wx(?;*tP)UU$hCtGhKNM3!Sj z0*;AF7vqQE)uKULU+84UlE4BaL@rR@9h_-T5Fm%khXl|do{JINCBR(fZ5~)%Oq7Sf z15e;}6cA0A$0W-I0mAa33y|d{aD!K^adbkfgP|S+GX+rCS79z=$UTSp)De9dck%x{=^%68Y&l%>^J-7*C3d z*C9c#g+y?Hs$f{18KSJu6byOX6?E&z6cP0478Ba9&%*JS3Q!#N zXowwly{(#Mpb=2|62%TPn1FI6E&N>xv7yXhT<-e ztPEix5_I?AO0zNs#GlKfl*UwHLG$C$4k}lT$~hkEMUf*_01CVr_`C3RGm895dEBV; zm+b67l|K%o>rhPGpMFjW|mp%{VPW~@O zv!oh?#Z?+rLBCtce?Z%Aa>5;86m1QG*|F-G9p6Ej3N5@F;9%y_bKbQ z>l8IJzQgkl`hO~C1u=k2u)6GdAn8c@GJO(IMFibuLKyjl5|qVdfyL{T7J6EZ_gqtf zmU5H9Fp(KDtrnCfeZ}ceO$Eru(vHdf#c>aET`5t;35$cYJSo7EvbW^5n9naB{K8ZS zyl!=w*v_gS43|IxsW07X!sMY!v}0VC01o?!fO#aKxf{#J4jW3NUX++sGnESJ1V2M6 zAr}0k|103Nc9?l$QN$M~A&dzu$^xLBXVH*!UN{{pV1M18#_)!Hbkp1^PZSSCfJnKz zPkBL9rNV}qsPO2T`s`94tj5C6SOy2Z_8m7GgK2+b$-jl;Yh!xRGxX<$djjEi0diYY zKrTId!WAyggALi*1l;i%8=@OLhYJ##E=qx!H3JfOkQPNsk&{vri6*6icjFV)31f27 zL=5v1OIlLbX5(o zXVG7W?>fTz@y32<9=|w*OUW)9Qq88Q1*(Zi$}}P(rV3YGi!8=#NMC)9{|&;id2IZM zT&|rnxq-X})tks)Eh-)jm!8I zZIFc}G2`*zXT;Y5VK&e=K$esRwBX1V2!>JND0Zn^ug*Ym%7-(bIBL{AOMXA#o})qq zA{LAvav+O&v}H>g{LuOdHE6EEt9%wB%O?CcaG6BYT%<}xiD1a&=12H^*{{8>L8R#u z@08SfbUv1ekay$$)JgW5*m z+SZz~e6+W~7g0dC9)Q>mc|0p~eGi3;z}<)|+S4E6YIep4`5wX3=lq5UF-AdyeE;No zWg)W-*EEQwub;F&-s6h~wUwa)ryq|Si#8d|lwYgyd>*&DFQ0Ft&y%|rr#u+@I4pd2 zeRGh{EbA2+{30>8&nYq_p(KLJy02t{hsuelK9~%b?!m)rYO;Q8!U=McEpbn542^K6 z8pQ(i`;Hs3q7E2(v!v9q2Ql=o=;!gjZ87pV+8`=7--+PYUYv&0$S$Q8C40RO_d4{= zj?g`f+V2-E_7ntHL!%W;!5D5Tp80^XvwJgnw6{6lyHN!XqZfs3B&J}U~WR} z_zcNko>%8BF=Uc{%HBn6pBM;&OXs!*%nsG{f$kEuNr31BvV|vwgH+q z+A#iE1tyP&V`*F?Ty{%VAQ^nS6p{c{ z@xZ7}LcLhP>%0=g<6CzE{H7F4;UedF1b)~3!+c3EV=bEiI`(Z2NXTM|eDRH0aqZYU zk^~)WV%InRI0KA@tPi~E_d@lzP1^{(4O1sQIR1VFe&-Uwub2QjUQ{GtZv4-GYR zpbP~pKNlilDK1bCIGuE%K}J zE~Sm6?2V;mzj}(GRJR#dcg^b&JX!vO2>gTR2!7QFpyN-H1Pdp4$@LKllOx_DE&z+T zfR?go>>F@wRNF~ho1CF&AAEn;gD1}&{HhW_#~-^C2>@F#E#+|WL<9_dRIVz77I?L` z<~BWn-iqoXl^rK_jYQzTdlL38ch0Ly03Cnm60f>FPUqcMW}vMz1#{Cr9Kj$(b^UT& zAivIr9$eNE8OLy(!n7Z}dW)&0B>iX~f7L9Od7n8EuAyzg=KuJMlVjlinBhJW4&pyRh2#akGpgx)OH=-roP zpb`7glP(M$aq5DndoITupJ^~)6a(GpP`H~zzP|hWs|5bM6F|prHbPz~0ichp+J$m% z-(bT$y2N2zR8=bRc)t;Idk?NOeJuKqe(XSDCREGrAB5 zt}Q9y>x0K!D3>|dHi1t;ON$AGvkZZ7s8M?Dxh>8eZp1pbGkFmt}<^tlp1$FDlY{{TTQA>Pu;VZoGZwxBrA zU=Aa^40Kd1?fKEDP|bNgK6e7t@ym{=UPv6YdAai^V=GT_UuXj8c&Rm$s0000q5`KTkjJ(K9WH5CXSzk>NHkcL=ycz-?Z_ zW<`>uS>N=)UWQ(Eac0 zBLYdLfM3C_-+`EjK-^@ozZpC}uxgL8ZO#Zdv@S+Rd@Ej&5k%lIaLQ#NF4EHhI^ExT3Fn#!QxVnEI6iyrw zn`NCsi4F=1qsrQj&G(xiLWu-aclSW`iWN|`{4M~k3`A3KuL$)rR4!kE;@J_%ofwAv zsf%9IAoO`;-Rh4j>FXlk;KNZ0e5(k&w!0G=9$f{I`g#VG6tCcx1yU)n4P*=|QV8Vg zHjryNAT+-Rq-ZS^PMv`9U2j0)xPyp+ReP0J5A{X+DR{h*jk=7$>-)b2^ZNQgj)p-m zWI-GM67(w>&?`j*jSA3F2~rrOSPgDf5Uy#!V`WgUT!rkOBalCxHO;^zViLEm)%z=x zvm)TL2P2)>se@qHd?*%y){XZ=a$yTHuYo##3iRAXyt#rsmZtb;9os9~dfh{hK=ZRNfQ--6FP{K)cppCN7=TVp_2Y*9HR~Eb zPJ>yfwgI9o9mtD}N*IN)cTS>tsG?bHx$oo3=2;PN;Qq*V?EeOOM2?4{lYp#dN z_%Nv1GjxyZ9SpwSh zd8nM+i6cG)+|&)gMxAIJyhVy;?)mvxOB=*m=Yw)-3Wnb}2D+lzWnfjep%v2L`iL<3}Z?ttvBolvuC z6}0{QMSNBaDw*9-8G4uXmVqR~s0(!p7RYd=$8 zotc2u;jP%&muS81nY*ES>3k@j!A1(xXbT)H+vxRX-3?qe1t2-az|@+6=(1-a)VKmw za2%3Lmx4Zh0m{eT#L>UVfU(Z<5woPvRUrH}M_y2cRmXGD#yY54G#@4pUV=*>jG88w zS({e7W+dQ~d&5_#?I#!1z=G$NgEBS_<*_jwc@eN=jks9nVEJ#+C4kL^RU(VmL!{#Y zX5-4y9q2?$rq?#Y90)2P-nuA%7kE<@)k~Tn)|iB|uMa_KTrt`w_pbe1O?y&dT0ZUx zZ@`;Vw4)98H}iNtnlwWZ!Xj2>#?FlGd zyaIYzco*Pi$$F{YkO(;=o1iBAOIsykiqWp;`8W4jB|D2u(?OUJ)M`)?R&kS^*5NW8QGKE=V zMMDDOFv$t%^(Ek=6`_+oN}~m4Qx554or4yLV53hg=@ZNO5$h5NFaghGM)U#1 z$mDdNh~RdHVxpuG`ql*O4oP;P73e+r40Ga89hoo6f;&;E+E9 zDtdlwnEL=R{@b8Ueqg4TEkX!%n}K)q-9AAy15pLUAiy|Ac%!k#5at7FkOD+|*BNWN zW_x=MR`C3y4-kMm$N)0}5MK`b-spHnKfoEz7!gF@U?_nekfV}E1x^Jp8i=6)a4Nvz z`CUH1<@E^=PZk*X`Nci*uBhP52b{n?sj}{uBM_dr;kCta)zgo#_Z=fJdtq6f5d}P+ z-^%`kOivcPz8L#w9R*w?53UFhm>2~|1d{|Q%+pV`L}qk?^mP>!vK97#aFqwpq++O>y@c`qFhWmKmU1IJaiBw~Ys5)}>U=l{Vs?;NzQY9U=%4_Q2<=*g znD+|T+C+(D+3h->Db)En%xYV?$R~~}riHy1OaQvWG&Tq+Atqb>j!%_QC!hDcoqE*&bFqd$1f zZ-aQz@2LM6OPA=&8%TCUoUHrWqHs(Vz^Fdb_ca57G=VU&ebLW2)aWKfxIVQq23kpn zaVmdq{{yr6IJ$*Oh2ErG)uC=#lxKUYQ*yfM2JUixmi$ENXdCPqHnHjywdThZLwNEE;Wl^0c10CIL^J(%EM$%Gl65c~pUn6N#vceQ~q};09pb zeck}z-fXf2GZD;8SDoiY2dQgb;HHVv7q|8I#hLA2_@rp&6$7*WJWi+z04A?u=(v2k z45<|{h}6m+Kj2_pb)9oNJVCDr90W;N2G)c@JRZ=y`Y}2wBC=(jw&Xheb zKPA^Rn5Vx|@I1gXA0Ymdqo9|i<_j8QzCdSs&FiXI>U;V>IiMLWmHu~z$lwhxk@@xz zl@FQ%U3Gvepv*R`j^*x9xdmlkvp52yUnr3IFZ=LHCBN>w8Iqo}B{DlZrR})eP}LZM70=Xymd6nDb`JD1 zv1fadfL?;Y?*V>hKsnWRI8O)ZV<=;<{(flD)H8A~Wk%Vn$R* z=gKFmWjB}3a2)gVPA^92%fxjUWFw2gGY!L(fa@;xp?kFtjuL9)?dfd13%p4@2Gyx#^$z`FwC`x_@Y z2)>nie6;s3|2b_ry$$Ec=3BB#%q)Z7km&34J@ozh{JW3@^t@#x;k-dYAl_>b;Oi0u zz=CB!9m>A#Aq0;R>F};;(8@g3-FS{{nw^?&f&f~!yGU5t$CYqyx8W09pTTAm1|6Tv zz{ma#0_rgoH?N7akw5&e9B6#xw{1K>JMeQt04;AWaFdWk5_Coa9g(?GfOxzO?LCE4 z^og?-IEfjmR_5Tpe;wfGi~w5R5J+fViX=RigbGH7^Vm762$+ckGBY1;0@@!$@M!m! zPL>&XqilP2`1-)lDFL+nql1w^Lu6-FLkPN`u4YRIGB^<_xk zhyrK!Tj00+U>G*vNT27F09yXu!9F-rCG=L;Qxa+*j2$1|UxZ1THqW+Wu8$^(c_CQ% zXc8h-5}d$H^wO!aN#v&IhGE-{_IJ(+pyhAvj0CELehR*4eKk}e851YUaN)DkbrVqA z9)<-EBp4A#_T*t|R5dfa&CieAIQUyefLZ?9&K6g`L`hh*HUZ5`qL9CYGs+JwrxgI+ zKG%Ft99mY!Ab(kdZCyID{k= zC$+%Q4`Ei>_01$yH-%y1d<9NmUaxY}DCl)Rya1DP(Z5?x04=Y#!3Ja1cPiB!h7}kl z!%-PV4i=dwcZ07%(2E{PFcMB5D8a~4#q#tx@|%A&N8rCQ0%-YjD_e9yN$8~}aSw*c zIwT`UP2$rcQw0S)A46#CJuxWdbodfOT;7fzn}2)}w#;?EzA^%6`BN)%j<2y*=U5i5 zjKjk27&}J^h*t6W*!XY-j$_m?`~-b}xA7+zZ{FVj?*y3TkFB;}h$Us{!0fRa!(0wW zdmLwTQ(0@_0)2zC>8BUxPV!$10%-X|3;UlR`hNkPKJj1@j}QE8bnYepwIP6(-?uQ6 zcp0DiJ!8pQ+SmqO9EHqR(Fb1wZr5_>A1Ch+aEE}~yZldp0RZwoMd!!>anJw&002ov JPDHLkV1g{iFERiC diff --git a/modules/highgui/src/files_Qt/Milky/64/58.png b/modules/highgui/src/files_Qt/Milky/64/58.png deleted file mode 100644 index 6142acc80672fb1b09cc2a6740f04ce0fe02c6d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2696 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/60.png b/modules/highgui/src/files_Qt/Milky/64/60.png deleted file mode 100644 index 71adc818f773dda1a6031d11197b9cdfe086e343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4302 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 S{~Gk^?6W`2!G2kT}2rkpnjlvEw{sj1)&ffkT2H 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 Ef}!S+i~s-t diff --git a/modules/highgui/src/files_Qt/Milky/64/65.png b/modules/highgui/src/files_Qt/Milky/64/65.png deleted file mode 100644 index f4e9a2880cb99a3b853fa1b9c42e64d1782163a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4367 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 JPDHLkV1o9|vK;^b diff --git a/modules/highgui/src/files_Qt/Milky/64/66.png b/modules/highgui/src/files_Qt/Milky/64/66.png deleted file mode 100644 index b98c32d0657b3d172774e18f8023313682e7809b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2793 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/67.png b/modules/highgui/src/files_Qt/Milky/64/67.png deleted file mode 100644 index 7251a6710d0ded9168ee5c10cf2b270f59ce2124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 zcmV;R3}5q!P)bI&&(5FQM(@zhjRWsTog6eZVBOiaLy z8#f>pi$(C(%?1c`z54|i-x&-BJ70V4HSl`9OsFi&%pmIRjJ09_Z@it?c~Gb)aI34U zVbi8f5Q#)uhlYkeClFpp4nX5W==uJ2>(+%xiM-^)8D%!Gl#K_0@2vnLkO_QAlHlsq zs}PUJcOVP8pPK;>cQ&>nbRm2|G<^JVq{yY6jg5^Vig)q|Z>*stAJ@|XVSaaEXS6v# z5Yx!`ii!$oZf=I_*RQ{ir@QI583WM2V_{ci^NLPy>sAo&o`VOSmrpM5e!SJ@@}DkT zxG<-TVXU2@yg`o07f^BfAUNFl*Gj=KC_6ta*?4|GlgY4fz>o|hJ82|}%%~2CYzpiP z)cZT#K8)e`eeifPP_-o3adT7UKCA0dSS!V#k(kVlPg=%tPT|R6a8_V`a5|=%3&9w< zXL+yr9G?gH^E5KhC}a%9whZ|7-?oMv4rhnc;cN?31jCDJmOUG}E%CdRo03zpp+57YPjSXln20`k2mjo z^Of!GW62R1oakqsmsNo^UOPA+Eg8VJfBl)rs9&cs zUV`QdfVO$NEfD;%H3KxQ)$8$wCX%Bdh)>~X8xKKkWn+Qt-r)-%$>Wd`;sw7cL|dm0 zfKzcZ2Jkt+3IMI^R}febupSmI&Uu0!@cj2g!Fe$uL9%`sI9I)D>wPmb@&Hg}tv#NZ zgjn(s?ES%UOXGDTWe{WmL`f|CO;kYg=m5Ae2WW1sAP1P~uOQ6}JpCN?se%bpQ8h|B zwgwjs0TmUYEM8w3hPvP)dqEhRqLRVNst^EKQb2U*0BDLYM>jkA>s6X&8S66#KxMi) zN&vtz1PB0079pC57ZpU_5{Ut#1pop9;M7L~ED~%1;P+)K20X_b4ANgl1~{_-SS7#W zA&>>Yfiy0PGcbF5+t`^ynoIRFjtgzAXqa1A3&acHvAAi zJ$*ngJsq6a9Qr?BKD-EGl?y~cgwJ|@PZH=ad-%}s0|&I$7-R#0ZoVN_(u}1~= zJF)Eb`3fs_Nkm6UYJQ@`8<^ljH8HvaM_uMKt|M2fq^Kou;(z1Ek zCs#vdZ9QBbJ%bNJ)Tz2c`g`WrgOpZu09?9oQpoP@4sHJ590So}Ca9eH2)tK5EdXGA zT!4zB|0$>gTqf_%xDaA7gc;sb89;*#!%Z(DfDO8gDbx!o1r670cJdfvkz<2LlRyos zxe&05f3wm2F=ceCxd5G-t`eMX2(%3W7DEb|t=Y#R{v@H%>6io_p9_LjewbIi0D``1 zoG+wtBuPVBOoNhg;Z#7Jb`-Fi8p}3w0ZN)4F44`j3N!xiAsNmKrprh@_aBJWiTO34ye

          B|{wxL-4v zkYxewr{i)-b$}fM{LQPe{m#1Tv&aE6VSsfVz!;!{OLpiMaEf`IehB#eaOKOdvet6m zhbiM}7MzNT5F5eyK+*-tbi(o_=yb=Wz7n@PE+s$Y0dV~I@z%kK`)#6o5}a-)2x=UL zg?qWsSl!$Vmu_BQ+21@@We?P7BBVlW5VQZJ50WDqq@xOaH1rqdtzwHG{4$u`Vn`{k z%juQ3&*#gXqc_0mblQ>ucx`0+_U-JoxC4z3)z;Sbx3#r}=-oNR7u|gQ&LueczoVdu z4rpE10yl5pGTE->5}+btrk@N#IPfZ{@|4o|?%jjiw{O#uRNj(TseqIcD)g-S`g&No zawVW0teA7V-OTt%Bm$2gKW6h569{LAhK4p93nQ&9EiEBhL^LKiBL(J26o2b<|8%Q&%dD3F?zEK6d-KupRYMSU=a0^WP?J)lKUGU&vK6U;-j z8XOD;nNp!pqg@pzm8OGZ(SIdtd{qx}aTe85(MckkW}d-m*MfDk)E zp%AQEwTgi2K6UEU*&F~nckVpf)6+A6H;0X7>nQ**A>w$>;$O1@Kreg}u@p1z+O=zN z`0!!&+oemFV9uO5EG~_#ObSo8Iy@Z^Q|}TL=4rZym@seNJm~K3hOVwIxN_wRV*oLY zLW1mi_Uu{o^y$-ozLv*S^s_VF3BgRz5e>^EZ1z=vW3Z~oIp8ZOzkmP!NmOL(Yyp5{eh13`oM=z- z=<5^8K?Z{<)Xtwj&j276V(xhtK{zt2-w0tgKa8GuhYApibIQ7uWC(GjoUsTAUw{2I z{k9e3_2g`RfPr%R5&tl;z!yM9*Gv*OE#6HYLQDnq2lpmdK0759Z2T^V{KroN# zL`_Um-6(v=Y=41*@@e_K2Xjk^hF0@8M`S#WI@s?(`Q6{jS7HPLcAujc+UYYC-W!wy zQ1}rP{_eN+84iI!@-YO%B;Np^7=WP{MLpiNGJe*-5<^AWvHKzS4InKmpG4u2Z~H^6 ztP?u2@@YSsmEUcqeE|UF|1N SMS!IM0000 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 P00000NkvXXu0mjf$%V0k diff --git a/modules/highgui/src/files_Qt/Milky/64/7.png b/modules/highgui/src/files_Qt/Milky/64/7.png deleted file mode 100644 index e97ab37ce8aab51e6e6855f836e494840c3f739b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmV+}3(@q6P)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkYv`IukRCwC$TWf3-*A+gqyMC=7yBHG;joC#3gbBE=QKFOv)#)ROl8B&IRjQx@ zQB+!5sX=L4HL5BZ@uOAMrb!zm{ZUmWjv`f6DaxY?wHk0yUTvU;5~ogLY~uhfwuv3v zYvbLyr+4nW?%cUEJ2UI%kGXI?yR-8+=R40a)TA;rF4U zC`B)@|MzP%^tdc2`tkJt&{MkyhX3D!fA{cB89>NtB+hu8{(0u1!JZ)J^2D$BWdSb$ zzWLiV8LIGsSWMYT56T*fv*TA)w+ywf`hF*WuKu|a8eEyc=KJFpf3f%CY;Tr=07!HY z7#IYP((TdT?H@V3=m0$U>rbWVt_~%p9H^;Y2ARfY$gbW3E0<*;S($=Fyd2W8HBf`A zLn$cUD@ba-mbeOY@o^xe00okV;n8z2Ixz_EoPQ0*u8sgf9HLO<#Z;8`r~yu|Am2jl<82uT#huVBy*V`{)8(p|kh>SD~?fE!?^78}QbdSD=6JRObUfy#bzo?8@QLBxnwz zk`pPae9Pu-@bo?{Xrs1`7&%^ouo`TBq8n}JqF37HElg6XJI|M~EB zP-(nzI@Tnc!^LF0t2IO!^o9BPz%JG zgwDU8>yk6M!4YW5V9G`LE2c1jPWN}i`VCtsx0GkU^5fK=Pyp=wQSF{osy;na7^6g# zcPWdGn;HU*|{mHvS8iR2}tBY_0$yCEw36tsPr{Tk7f5F#(jxx0A_tdd2O4Un}+Ii65_G4 z)_WgGWcQ{wIMByqT!OIhLoSUN8TW5HMpO4R0{zot~Y9)Ust-ShWYv z0=4N{%BBl0_BHdqb6@Z(&M&uX7H376RgD4T0#6d;WHJjkGdm#Iq^xaXWr_<-UjXLj zXCZ+V5&#@nIChql1`Q8jS}QgP#LENFFokhX-THP>g51H3E{N&^GvQBysx#+{+M$36 zE`kT-31@zNs4^1dQl18aR!&>@=87V_NYhJd62=1vA&!fpv>p|_p_DX83=a?%Qc@2f z&YTYd0XxCa-!l(TF(d#)@O!D7+b%bF`D|nWGOKQeibM_M=0E0EWB_d&?{u#Q^Rs%& zQ%qS!g}GW4&12MX9U+vZKf+gFJlpE```6$xn4O=B1VFN?4u1Z~tFU#`T~Jw83u_uT z!JZw5;O_1Foa=@B47@jX!d8$NG7uq45$BWvknjh9IAa?98x`8;70GgV>QCQ+A3pG0 zBoJ2AH^F23o^vgS`O$smX&{LOpbKYb?STj`Ugk1|8r}o!MTedHZFGSzhmFq@<#9MO z{8t7-E}|#+jX(ArguYAN>^`D}k(br7x-Fa5JPElPL}yO*U_(Twi&Uqp;H`lp@Q=q| zhV3o)!^SnYQJ1dK8yi}KL~D$wx-c4h$6|EGjm8LltE?*?94OmeSyK+AionVDyWsdco!+&CXC2|p zomHR61*Q>*q*+ni15j217E#vMTB4POqD8i>cHk}C2;F76bv+>rWL0W$4c z^rooZcn~ym>5KY-bfeYn+GO1t@l2(7ILL~f{5)MmEvQbf^k~`1!a&wp3KRnDwf2w$ z54YkLR@1${z5zblvIE-I-37_YIsq(VqLNmLjO>+|Y-uI)bf!PmPSLW>HU!pMN|>Lxpvu7@4deb{!a&@gq4!3D?k__mX_2TANRSu+h-r)`MAKrXa+8yjY?|*E^AS01)Ya9o zX~w2#XSC<+J32I69i5R_Mlf>)p#H4O?OprAZv&0fB! zwBxzF5<@`BF?2EMmN>zaUkixZm*_LIKg+ z^DGR91z<8t^%kT84Dz|xHKSCRbUYD?11MTkpWn?+>Imb$+7sQw!^0&PL0*6*lSyc5 zYVu`#nd?)14u{SH^rV9ngq`$ds~-pO1g8nu+}vD}!o`-wmKOv^V6SXv(BBO0EHxB@ zto*!=i4tC-^3;$$kpVD>qus~~^6w9P6pykTMxSenUF!hKd;WYT@UO<`Ma~!?bVgaq zhMkMx0b06i_ftL)2Z*FdHxE)y=rD*;3yt)|)a6MkP_L~1U##lSYv07=#jH@PXkPk6 zF~u!Xj`FK9eo!zzt?`4HUq7iq@1NlS=rxQK7+B@{kEfUTSn>e;52<*JGR9b;M1& diff --git a/modules/highgui/src/files_Qt/Milky/64/70.png b/modules/highgui/src/files_Qt/Milky/64/70.png deleted file mode 100644 index d07791b28745d4a49916a2a848abea4bfa6a7117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2371 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/71.png b/modules/highgui/src/files_Qt/Milky/64/71.png deleted file mode 100644 index fa32faa00d16df77d31f4d704b270d2adce156c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3305 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/74.png b/modules/highgui/src/files_Qt/Milky/64/74.png deleted file mode 100644 index 2c7ecf3053f004fa0dda44f67a531e735cbdd0b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2473 zcmV;a30C%rP)oSrtB2-EP~Rj?;eU zY1vWYMDivq1~!O^|A8$ci=_iXLTtzgA$BAPu|Yza5g>se;DJF2LPQ#kGy;t@ij>8m z0is@z;5fF^Hi_f-m9pFYtg0^Vce`)9s=J=;vS)%_(RFp#>)!7>=X~efTOG+T3_8f0 zOb2{BB;b&MLjn%=CV5>jKRud=H?~{xyP=*dj9GGc&)7$K#XT z-QD~oV==J1hfRtb*!pwk?-&O&B<1sY+Su4o7?#oD;o+1c0goR)zR4_pt*fhxbX^Y| z>wE1DPDHqoAjYL>8Z9p`E9~6R#fuje^R+w+Oixc=W^sP)*s)`uOYou(yMDaJ2$0Y) zh7Ce~(>4vVi@pQ!K~>&qP)^r*HNQkOLjp975i$Ab(W5~N0S_NOOtKrsSnThrQ#a5- zt=vpXbt3_vp=a&w?I2^a-UBYRw6rt`NVDLBf^POX&5Vnsbl`l`LI8j}fe#w*d!Yrp zA;B&b>P3eLB^z7NQ zz}~Rm)nGG%j5=U_eVt=;^nh3_MtyyKw6d~7ilT(>_F<&JAY&2Vv)L^7?v9QQ+p=DU zYX}lhI`;SX^J3`f)2Ecn<(g)_*;*ki;$iirr6pbpqqGM$yGk)?76!3LQG~()%%S!6 z_L5tj5N2qI`}|CJ?8;skkJbL%@&Jw$?!1VIv%a@!%LBww7{(gxF zvSJNSe)Z}V7dja5`0?Ym^8;T5m@kGloIH7w3Wb7&2nfo42%Z}WV%iJf+uPfGOaLz2 z-448%;WiN9RScnu0uhKQK}0f{*i}wWmIVpu92$YN2_lecdU|@ew}iPN z`~Z4uYm1YN7zg+uYlgl(z{&bfWVE)n^3;g}3PjAz%y4o*1PDQq)y#(2hP9D}@NC34 z`Z1I1XOYBf!Nj5geywlUu}DEkJ0Jxf@%;I7ZY>Z|zuw>k8dip=!RmMx?gJ6X>$_PZ z^Ay2mtZ%NdVSS{?GiT0l0)*>ACl(hMYxRY2Uw8%xgO=caTB z6PA~kx!^%>oC+JaP_PXFvj*4|A#P*<;Ogos|9s-aiCSEWYd{1thY&Bc`T6;VXA95} zQvj^*3+GXj;2cN*S@l}u^Syz;O3IZov_3Q-zQaIS3hq3ZNlKVZFf#V~a*u#@S5Mu|zNZTls*_ z6yBhr&M!KSp*{p;Hrfy5Lv){Ap{C)3vn499_AAwKNjArd4L<)B`r@8qY{cGHBYTAaZ=mo=;P^I^v0

          >(MNM{)0cX`&Qr8l`nUA} zG!!8aITRoO@3#;NYum^!(ZgpSQ(nzbr3;B_T}k|#_16s5ubQs1z!vM6)pXAO6`5zW zb;aq^^;CvF1C3HdjxtL|YI|9Z zu)bt&UF;>QETJXZJ85Hk$vi@;4AG!`DZ?tyK6;@1hQ5-xMlEu@F$8b`DGsq-&yXK* zVf=RB`Nn@JtFJL@bW>5yGP6oGfIFTbRUJUG|6Pk=BEUq%>gEEqw|3C|)tfXDpJ2!0 zjUIp+Uexblxqc8m$Q8D@D?`M9)(T$0mUcqHsZa6O5HwUsD5^PXYdJ#qmw!g*iMmX{-P1*X{ph%6z|@D!twgjz^|1Y*yZqSPLb-~7hU zPv2ul)6uc9vDDqWchhXXJy$9*k zOnzZl^uQbvm5(~3!6;L*TsDyE(&7ga?_yf(wb-!RD$udU=OMsCQ5Vgy>~T(4%bcV# zuG1=?d1J@RsyJ5J?>q&wX{RPl`B^iRy&VBcvJ3v9Au9=Vvzy zQ-8j(an&hgKbzmWhPZw0$2~@@E!x14R$>V+SNh>!ex%%R)2!(0P5@7j(Q>s$s8|$w z!UXT?`#;G{d9EnE{sgevAQq_=JWS{mt*DKD@Y8I{*OJ=*g$FRjH<;p=@@iTw>f;~2 zlTZ1*|FtK8SzBTAha|In%FvC`zy6}A1iAmUC!m;D$C>3Xv6M0O(XUh`=>5{+f1Etv n+aUpm1RN4@NWg*K{wKfy#J$N;snSx|00000NkvXXu0mjfC*i;1 diff --git a/modules/highgui/src/files_Qt/Milky/64/75.png b/modules/highgui/src/files_Qt/Milky/64/75.png deleted file mode 100644 index eecf17ecd4609e472bafd40f834efa9acbeaf976..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 zcmV+j2lx1iP) zpbUY;8{R9c6KI@ySuy2(a}*_48KjKQXc{V@afa1HgR}gRaMoUOeQZT z>k!Z9v?YzVStmLWdSfVGxNNpq$CvLLC`LA z?1#-nd?u9(0J1~CtD2XgV4;LC3Z0-)&j@>;=KyeUaNrys9)?!ftH=O0&o+eucDfyY z0RYt4+S-!UQ&^*}!uTj0fbnDlEdVsq1T0uxU6tkJWwoFXY0x$m;#@ifo)!Q#c<+tyU^0IU&#SqQy+!6%}hTvsZW_|?)N27+sAYqCFh@W7!`ETr*aKrqdL>Khvyj#$vi zclO$)1;DhjB5gD_Hah$J`_9VBid#R%rt)zvv_ z@1Rhr&ua*dz-Zzes>4!0!vlqYmjM@>1{xrgPyz(B`}y;y1OnY~uPLHzcw4OLWqcnU z9m$N<+S+QQx{3bUEZ{{)2ZRm`KzQ`%krYdS`2G901c9DUCxSMLGdzvBVJvLp-eC>* z%>sVADkd=8=b#_LgW=Q=c!|_Qab?2_MRAPA+ZbD2T`f~`h>g*_-*ZGz=Vdz9mEfPl7S7F|QdF_;33y*%^=Z*vV}fC|$HHQnkpsNq@$xZ@(I!Rj13 zK>5t~hYue*Y^*53!~i^~bb`W)u)!$RxE|wq2UvrrRYj^A;4u!ERCe6gyMYrl9E=*E zGtLhTM2VQE+Jc(Aq<7m~EwoT+I@E?06jpfoe3wQt1_Rwj=lqBvyx!8%B3Z(7Ig<7W zuQ1_Y3<2%Fxgq`)C3*QLPo89zntlxf6&SV+&+}YB{Qmv>h3MJ{qLu-EqNnK2INngD zalZN?>TPkDM!2CZ)FXrt-@Rh1bF6O~G#SH1AWk0UK?sq}9)8pf2RwfKSUTm$j~`MS z&Ub$UF`!771-us$vkMCg67`Ob4*7ta($ssSLGA7BQgAFJpi6<)?9Fkyr!YJs%5zu&y`RcAU2fOBL%Q0m&MZO|7F+iigIn?uPg+PfS8#K{rX z>NZ}#?(~<>Xw_MYiyG%+Z*T9%8~|Rve3{cw%DWKe6B$q^2(9j~-VkhzQ^G^mJxpV`J#mt5+Yg#9sGf$oTm98&Nn63m}q| zkXP~dfQ3kTG!{i^(f0QC{^{%Mo6OnpG5s1eHa6BK4#N!%4KG9mm1MgrjImLHVw3LF zA4dvN$MBK<{{B(Zd?NrJFuKKo-sUwf=wFZ&0u0?I$N3SFOAibTr1RY?5&y5TTi#*- qVgOgn~--P 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/81.png b/modules/highgui/src/files_Qt/Milky/64/81.png deleted file mode 100644 index 8ddba8b635dc43c4737a18d6dc5494472a99a263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3476 zcmV;F4Quj=P)> zWf5j!StYJIF`}55aF#@P&bj@Z*?tWrq*jNz^i21?cl!L!@BGfWw`Ub01bmTS zO3=w4|F$cKhexsHe5Z@p_F&uo>|-a3pGyFK^qZ~>9=5g3ZSP;T^k$&ubQ>+6f@5d) z!QjXdGJeZ*KREf*&lLbq{yLje6xelJ?}p4*dpF<(yrd}BQFc^hZv+7Tx_2v-rp|5O z`gnfROa~w(jsMm13>y2vy|+A;xvA$Kuv7v6M}2Vq(Pz?&`E%Q$cg5G?boKP z{$EP3&SU^oX{vy2w|?o{nQNEd23#=UoI$xd4yQ&B!SPSuhoQnpP&F&oHEd1k7P$A; z$Dz4t&c+{ZUEV*F0Z2db+_JvbIal>;n!-r?yhGWC~ z+-td2cTremAOGdmxtR+9hrX*8u9OCi7V|J%__)@1JTkk{=TC;;gR${5@_bWz7Ib#> zPzd$UTn#`EUeUH#8u-!BUSP-sh90*Xlg(m>=>kI_IOp5jI*A2$%vcSeLXeD~(h4Yi zrGVN<)V{+3!~oqWOI;vAgc)2-rYW_NSI1iTv?KMfsiSscRw!)OKrzy&hE zlxdD=4Pg)nKLi2`p;1^ke!{ zhC|?nM_#7&Mqk}Ri(UiRb|3iteZ~Jn2r!QUN}%=jNAHBo8j*|v*MIM&EFLyv+Zf6+ zA&S_KimIO-eE$CYWdQ(u-ej^8471n2A4$b12_XE(z&D?5Pte3Cy8ukHRgQ`OB^ zaO{Rde|+$gf}pzb>2I)7AL9*h>&gB(go1J?mAp(r3lzD(v2yhjZtraEx#peLp$j%-IRp zwf7WERZJNkUDA%DwfP%(64Pd^-5A&@C{ny;kkmJJBAR3nGSe!xcbM*XK z&~;X0d_54waSiqz9CpK@vvYx5ZC;j2kPNfLOh8OMEZGc1shesnjJevZMx>Xo%o3C2id$M+kXDDNN^y&ZFlhT%8cHc?Mt@ z!{O?s8Dtp05p{qB7Xe^QM1m{ozDLtd83N1>jZ0n! zSg~x2Swa#}>{}raUI)<48wQh}A4H&>}yxyVxL7Fq&m zT`_RiF+Pxx0r4UzQ=$U^4-Wxi02va>CJ`J04s((q_s?#1BUaU$v1c}uy9ru4m&*po z(#fL-KpQ>{lgCfM8>>_TVh2w7%r`#a#aayzenXU4CP)$FhA({v8OJ39c!LZeHafsX zIpwvLDm~45Wmd<6?DG4+1B=(K2c>yFC{1&)!b#&qxL7mRgV4u8JAE9^zW!!*`0sCR zHp|*mICj%L$N5g10XlveOBMpQ+jtEFqBVdgp|S6~$#Bya&oFlVW2KtKE4vo0y*AVH z#0E6H70j_bXoEvgJv$;F>(PBSW#+@2o|Vu%58&!=t${0V?}CFr|8r()==>`<$DOtY z7*f>2V>u{JnFU-F188oS0ipp0SlSWA0FKM+g}qBM-4A>PL}d($@4O4=|NS2Dsup;^ zZEJGS-j{=vQik3qZ-Wnh@djuYD%(5_Kn4I8N$qc-4zL-}2ms6q0Vai+hmo+q>zm8b z_yUZ*@g9^0PDUs;AV41=J5Ixr{v4>P1|2uH!{DydS*Zagb37Tj6HtSM6#{x}7LYZ7 z>&Zk_mdqNaQ#*uL+0Z;&18rysF6=u|qg-J#mrspBY5y^3?QVtE&a|AvVnB>1gC=FR z2u5iDji@z5BwB9EBFl7Apa=zk#BK89aTI$IRkYT;DuV@>w+!8BmTdr}2I%o=ur6)U zYLJ*iHAE}}5^I3)WdR4cC;+C=5FK0MsX@P>x#K(rNHH@L)!o9))xJU~R68t1Prh|- zF@-Y+I9{_6JIxXJ{lYY5e^M=nY0@EOK%HR-z zA#N}YK|(_u4M=kDwD0SVL*vuV&50y&TF(HtgbwS@B|UjfI!jVzT4Q)b8uT-ukrlHH zFJeGdcp=~z-$)ja{e`!k6~+LkpYT0aiv^iG!WqE;0-!?K0vZE=+v6w%zlTaq8I>v1~ejq;4#3_0Dl-HtJZA>u(%MgYlNhgpzwv45OxT$ zh%9gsBFL=tS)&1*d*!M~dXqMAJVpc^Axply>t!UX4hRncvm!1k1WZ2ztnx4>mctl8 z{drU$=1XZJKDGENL6-rXea0eahk(NXr|@tAP?Y#hJDW-(Zr4^=05~nV1lZn}TlEnl zSZz!M=~h+d8;1e!GQi!p6CzO|;MNaO_6rtYV+1IyAGA;g;LRIk3{Ri|{t6cF!(a+l zvEYS3Y&r{y(*(tnkSojv7$Ce5u*zT-DS`$SHE{rl`hASracO7$9cqjSS5qGI$O~)@ zXiNnC4&f5Sun>?85LS7cv=(H-8dt*r!Mv2#NUD;1eLOk@1mnJvRta5ZPZL3A(?3E3 z3~qUnj7plmX&{X=Y8fCJ_7Z&~0Y_U`Q6az``p0gGP2YC6vWOWG0yYC0$O1w#$I<}i zFhDOGkZMvBhk#r$V74IOs#7|h$_LwFx+zVnWkNSO3~)e*Vt`#|K|=@#n*n%3^cN#L z%O%aLK*rKzeSKO33}Mpb%fPbdTAcDuc~De9W@r#RN;nXg&8#La3X19T^r zMe;_B(P<~#{!9S8TA8R~UgVHUt8V%2wc6Dp8Lm=4oN2NkfAvAn*mj19U|yd*2UK8N zWo>YC7ERz^H6jD_$q{^G4g^h2uo%KN1i~BhHyZ%M0RhjcdwvJo(Xjjk8lzahT&(;3 zj^#k-K2=qf{dDv`0f(C{rCF2JQAHJ|XXl`83>=-c>1VE7nMX|tXWW0v` zH8j4!=soO~e>Qh&KjgDF!YPdDetIa`JUcCo1zYT>rJGXH``V-qlNT!FCGz?@^nN}J zfXdimt!3f0@3Ly?L19)}(z6#@vg1(R)&Th@iE0|ZCk;k<1j?fW7y>#{U)-q`j%q=3 zzpcUU8=94VG~&v%t*$9=MoUM0?^u`zW6e3gT@gku*fGByF5;D0v91q8iRSJLnA;LlMcGk0 z@weTL%=<{ILXXP(u|0};J=aucm1dR0^5^(?Y0L8yA`f+Y)PXM>jI3jPnAly+t1WxC zf9`xK|9bwjn)|+aO3nvx@#RSo%2efx{^#@m6JP+Kr0yw!2nTTh0000C8bpmv7al%`DvW}xW>nb($Lrj#ch zqFhR+IQ{%WK^)d*OWF?n=9BNp|C{Yd0HzmiD5x&ToI`cYfd54Wp_m+|3IM zclpATUkt-EJz(;;0~5GE!SlSJsPa`j_|l8tx+xy_zzyazgQCYx_x1-NUlJ+p>D9Ll0)n=`3ipnF z652c+2?Sy0I08@;!G~u8F^*@G1EXO9I0Yo7LbtOF2Y8hmzvA$?+MwMdz^#=xA(Pvj z#Scwgdpso`7ZIcYJoIFD1cSZaKN=ETZ5&8ag_r~KgM$UG6$tq1;ykoMEUmr;>CD;! zo_GAHgJ7)!D#SYjK7seLP_2}K?!#Z?Rc)XF+K{!O$WWEbAm-N~+;RqWN(UOST?kbI1O-N0Cm>|eE4bWlI6d+S!OeRK2=QZ41rUVE z{B~hBjUc$)9-8}FDrosa{@GceC?+5jSqDbeD?|nE8~qekh|UCpkT~*Hz*rvqsgUq? zc;cavAT5I=NV?l3ikkSbwMtO03M_qZ9OL3W(CO`grS-QVy|X-zJI+4$%|-F(iJ)nD z^%vqKro+|M#SP$DH}D+aKosj&-_QWXNCguUs!|#4^Ck?2PCf%zir25c!32ioYR8};g1@~Nvbk-zz4nHPS}~4H zSUB?2;fJ0S##oM3+Yj2eks=jd%Y^1alHWm_5<} zXdraQFxW&e9EkaQ{7@?A_Xz@PS!Z-0+T5Ms;oITu+yBCeR_-c-Fm+@A$iDjJ2@EOH z`QY4D8wdg(lI#q0#!d|OLaCCcIc^8ROnV}d3}X^U6C>Pw8+3TP;pWN>5VPylJ|DI? zHU{9&UrgdAVqVU4KJ?nI9DR7YJK^zp;^EPLq;Qowz?LA`w1BCl1B(^HOH*QXBL(Z} zoA|ew@#oGT9te%A02&!OR9R^Bp;s<#PnHYispWT80A!9{N!8>QWwS>xdj|V9S|Lgx z=GLGu7=e-S$Iv#bix)ot`)mO~#o&$6Y(WsNmW!3MOYba+a#;nhyS)ZNy+rN~TDEM{ zj+2l@>D)5-+B(rReOlmH*P%Pd-3(B57PMGinMwaumXvV>Ayv$jq21f1)5<(~(!GK) zcd#?UG%|$^no_4n&Ir15ocUk?z%K}jKK57;gay3nXVz}5Eo>}pf)7C;(`JiVY7{ix zChbazd|8BwT!fRu4?stoFn!^L!?DjzG(g(dhhLsaiwMGaCY_mGUR(i>s~w%AOPf33 zFwkJJtk96p?0Me ziQa3dvq7qDGk_uu7GM+z^$ZJmj_D)K022r)(iq)Z-I^yAqK$%J>N1)ALX8bl!!k($ z(Y*tH-f=_B5;!l2cZUS+E)&$BN5DFP!mFY^#;uI@$}k#J zSRfNF1vHXtwEVV+J15`g6i{>)C=PmVm=ZU{6uQSJ`BV9BQ3sV>@Mn4hCtdx!qperhf0SXZsJF{}-^7 zqNj-L0f3^hz=37rM}DH*$w1g2;oJn& zJ==fB_Zc3)HXO$(_;vDq_67hB4#1aw(4hrC;E$1ZTD4NO1YZvpENNi?L0%;^L|d8L z&=u%{k?84&$L&p?d!}y=$9rPK`QHzXp*u~Siada`S6_1m7&ko}NdXmN9-k}b^LsIP z?aI?rTLjP!$ZmZg^M)OqEtcdA3`L_52%eZ=S#I&%<-UDQo4@h9L2@DHh6e5dt#`x0 z`9BPeHD>_mARKUc?Q(9uoUe*fRo0AsJaQ z0x?xBOVN##IKTGR7D#0YcsEP$GVLydHXsa*Pz#qBFaX9A3-;e&S_gX9N|H99t*agU-CgwgrBb<|AF0hiWZLj;sR5>O z@G>|7+SM9skQVcQdnO;vi>1li|6Uixl`OD^K7cLvo27$=6}m{`3P}s{6kEQOF|o>I zw_9m|VF8@T0P~k`t`GTHJTAJkp1(wZ$Zi(E<>rB9nccasSj*?`%2EG&iY!}GN|&{I zKe8DBwcK+60cC$|LN=g2!)+wO7 zU}qR$a@PB+7AXW`k_zR!;`|C$45=hh|3GftH7^QySphw1NOJgXbcSa(3y)hUO0#>lHSOC71#?bVJ)_ zO#$Bir5*D^s^f+d%bOBG(=^dLB2eR`$ZGAmPAZh36Q71{Sn%f{J5JVQ13F zw0!>C?iiNEWawl-Amvf2Dz*4(e!8}<`$uD&WumLLVu0%0Jjg)?eC~qF61Q26Pl)ggI7&;U`{bU z$!fu$?rA{#Mz4DCP11n+BrOHRmPW{tG*Hw7HCH}!4ruWG_XKNK-ePhT*n8bv8cpNx zR|*SFL{N3E2pk;9Ig;}(FHgTTPwPHo{M3F~QkG#%`;1NXm1?Pq^Nf<%;@%*L`sY&) z7$MRFAXDKxKG*hA28R)eH6Y^wZu9$wz)-*#Dt?usl)~+n2Qw|t2`>LwApLeB{A=;R z04)8Go+~o&lz7Ltv`89|?_=L?4OkD>7C4Q`3fjUyu2n@##WMi7o0q%(e~JNRCwCtTkCHlR~0{Z9v(juXPm^z zCfQJL%JQlzoWFqN0|JSD*wB`bl|xH+RUy=rmKI7$B2f7RTY;$BZ6$}c2q97Jenbed z;VS~x1wmn7vGewBVowq~e%qXTJu|*zJBi1;oAs)*dovGv>^Z;tJHK=8x!0spslX?B zljt8p2s`=mSvi2a0D>~XE>!4$_6Lj|AYfI@^gX?PFo+Rsi+_0!v`#bJcxK7C@RjEr zVc98%oLw>qq5!5%ys-uV_18IYYF_}5-_Ju@%P!*SWJfdLtKU|F4woDn`b2r9^+tdQLA%)c6=0pV*J!XH71KD_Z9>KqSZl zQU$^=wk6}ay>9&0vIglyh8h3ocS{{@d>sR-(SROPiW6oSF{w?O_B@yX$;|j2)A&EV zUF>+{8(n}gK<|E1=LXQc=MCC#t)TJAs_}n(Gygys&xs(q0MY$eAT>4P-Jsbu-S}a!01ylY)Lek*(SQR) zAZCQ9zFs{q7D^z>BAk3=0QydP&xn$+^w^Ah?rSq{^??F_a1nqRZXWZ1@YibRGLgiQD9IIs6O@Mc(A#H9jXD8{sL!Et=EBA#Sgfo$-)+n74(2cOA3Uf zh%or+KJY)JPRNRcZ17N41UgUyM9%N4Mv0OPvg~Md3j++!O`u7nAUY6543{pi0w=#P z0KTE_5DFy)Vh({&J4gepB1l=`ae6_KJm7Kl;CrMR-34fH6N}+>c?CT#W5l3&L${ws zj6t<$z%z?4+*hHrxBz8a(F=m2W;JrYj}O? zgYU(oAG{o&E0@dTo2%=K@zqW6I8^2qq&{*qaR&`|y&fZ~y9B6a4N0AOV?kVPl@y&vN7RVbDU^9#?fFE+dB{g>izARA64 zwzn>=MVCRYxbeO|WRI*Pa0C#1rfEsE2&+j_jTpfE0ng7Lp9mrfE~OhZZ3|K%()GSyXRsMQx#WxPF<+p^f#U&yR9#?a zcN=bPuSM~Tr(6Ai_g>sw#M{TU5;y@Ms31f0M4}+tFw0Lp_K?vR-1_*j<(FM?enfUgy1{HxNMMkd+`WVCN3KBQ? z(t!ZI(2Ac$L7-7&C@>rlC6O{=;`kY0Brq+yz=gB1DEjf_|CauyWin~-bq#@p>9NHP z8k)obCF)hF>gQ$99Tc|&BV#93QDh*5?t=^1ivky(jnU!r`11P4k%YF%K#)a8g9tXb zhrokUbBSyrjf5&d;PU|#NF|IQgpbz+%!)_r+uPrYM)97>&8_I-di)0Tcm~)glka)4 zjs+sA0|(DRcZotN$HZ}DY=nwq2tl}bw<5&RE?|=Z90(e=$?cuZh3m^7p(YIAV9VRU zfO?}v!!2}n7!jgWDM1d|K*h0lu=fm9!(`wdy8tJIZEgs{bT*fo{_oAdf-ETDb@d&r z2PPOoLzG~70)jxrQT6w*2q8$q6-=0d_s|9E7EQFct-Y*sQxkY`+|TW@3NyNdDpo-Vbwm_kBgj|O3A`tS%_3F^!eXghn7q0A zQFJ$zKyf_5MF_#lfM%@V#S#By^JxIF1f!=%Y4#X?a?W@D?lXYcONEcR2SLDLHW^=y zUyZD7UWdN!kp^)*6o@(ys5llYSr{H0hAyw?`6p+6;U{K&>fHmN9R&2ZALKP}J+q`C z5aZiB>kHSGuRu3yf}0mdQuBXOuLsaM(->u{EQuKp5ww?%V*OjN+Kdrl9wP5B#HkI)+$65Q29B z0HHQdW*31L#t&~jz4S&Vmzug7`-cW)V1?BK-9Trx4st%{) z;uEi_p*x5IZB#_skPQSOf?swjw*K$PYWzBj5VEA0Ie=k!0|5nme7KsD8 zb#biqxS;EUP?tjpW=+9hAuY=l3V8%UMJ9NH$bzs<0QA)2Wxy`Q1IdkD$fR-$AO1vJY)u5I;WmF% z)wb*FiBq%tX>EamaP~qayr10*J^ZOhA(P)@MH05M9Yv6o!Lk>aC|0MO6xjo*WE#>t z>B#TrlhZadK%&2WX;TDkGQjY(L!RjEXJgZtInLZz{udKRr_x==g1QtM8#TV12S~&d zbkcXyW<5aEn`DClT%Eri7Z8rDInwlb`bO-Znt%lEa``N@7r5L-#*wB|?t;zL4GoQ- z`rT{Wn$3z3o#L*xd(HqGa}Wr^0!yE7VuVPiSklBw?z$+_Jx!;(oIY5KEkmVTp84$$ zZb#av2(|A5cI$`-iQpk6cvgL0*|-`>rFZo(DOFiO7kOdsaBFh|^10l?Z(g~z&}J$u z)j+t*!{LJ_VQiJ)&&F7USY5vs*@#CO6KI5>%lXoKd$6;UjJ*HS=JXxZ1nmQGM=l_? zHjL)Ccg`*27y>4fJGU1%3+o$P)n@!kkTwO(! zC0g8F5rYOoky2<&>HFR3%(U~kcjoT*ojZ4WJ9DQ~5bzJ?q=$3o&Ykmp-|u^#b1o)D zQE(?WGw$$~2OtkX9)LUmc>wYN&?Id>a;6Wb^_0+fCW;ws4-theM&v*Q2 z0FdzeX?U%)v=rRS%gbRln^WCnGG&bVE|^V@+WLh@eNQA3)2_J>4h~{yXb8i@!~BzX z2!uVi9RL#ka8Xgw&LvBhqy)EEEYrsHZUltB840fez+*ffPu=5d2I1`4vj~U7Yzez= z8vrEyOK!LO?bWMS!)~_=p)>)qX*hi}YWh{I27(bV3@~?Y(P$K>PoG9G7))7$=@tv` zwOXxL*Q{CNb-7%b0Z1p{Ov2_8KG!`S8F*H}`1m-^oH+woma91?SZ}cb>|C&5ftLxh z85;R=x?dZC@kQ6$`~>)k>Z0|i_S}#3eGDU^^%lXdAW0Hf5epYCM0ES-S~$RW8POv_EU`GaA#cBasN^&!3NEHoCQSz??aA>c|CV z&72V!5jljYG>M2bfk_oIx=?IL2Zz;R>Nps4fG5myi6+ zTjcN@zPoZ&{j$n6D0R=pWHf~2G(zA+Qdo%uC14Pfqln58(o`5>>a49v(v~G;5y)qY z@J2vr?P%*hEL>2F8s}O8dpH&p&lK8=V7EEpA}|Je`?Cr=Q@y~A;}W-N0KD+GN9su6 z#wV8V@J2|W?y;-5JkT_SEOZk=Gb^$HC7!edISEc&Sb}DL>Dr%3c>a88_;Yd}4=iRY zfghj%Dq(Q!8d+5gPRAU$3ya|o4PsHzV<~`VBfS1I2jvU^JdTpXk1W~hy)yW{5Q3Ez zlP5@2^;|CO(YA(B+(R`}(h8 z&D>{Tx40094x)4DJG76U$HrwZrT{P!dZrpdYbgMJe|U3!?fm6+Z9^BygaZghdr@7s z0`ojIG_Feh;N<1MA{LJ#6dlE$NB=&}Y!94xhCqmBSitqV!1!c85OKn6vWV{@kx96% zplRy!5cb0yjxb+oCvn;mzxwU!##317t;LRZKoZlZk;CNXxOP@pm>g z4RShEY?&@F+eHxHXG^GG_9g=10i5mr2+bqMV0RUOc^3tZJdAyxOUsi@!;ZTQC)l=KEAXMHoH}Tz&vw-q~-MM1tG%%Oa(Ty1kU5~$)@BwT}6OL zMV$p^s-tbP3wE~$jqM*M%VBjw*=dIqk?EPKoIX<;%m%_x@G6d+c?q@i9>&tjNAZ*5 zW#ay|;d2y&cs|vHGJSpL38w5+7RkYA)BY@4Bdx4~R8x=ttYIb1d z!Y5~?{aMF=TmZx-c(J44ffbu^S6MaAcYcenuQaNLp=d;shC*}1=Ok_@20XTWH`bAW zt$n94INpxt?$5zhD$ie6^>f_6KV63h>1JPYG?m z|Mg#zfiV>xXc8rrqU0#$+rqfvR@iLffZJY%I^UDxx~cu&YT)B7vAJt$4RGUSuznXQ z(*k5ArTr;hk{c8h?6z-t8ZF%yC`esIs(Mv3UNY@XT}OhnO7!Hm03#PjzsChuG7063 z`ZsI=98@?C2-;~pu`mzbyBU{zF5*(x_j+8W39om9NI({WY_=9K)2{H#zxZfc&9CMC zA7TMnTp*#Qz%*XG&SJQnPJGk+-zlMW7kc5PNCFchF#(!cv539+>&XDuyDdJOt#Ko8 zrfrBEI&{eQb=xOir%4R}q4=nX=IRPBf%{f3$5-e6lPp4}l?5qFU;snIF~mkK80m_k zyLl9)li!kH-(_TgY}Y^JtUxSmC{WsLHg(M+Nn!&u8yGb;H4PON6&)rLzOJ~qxN+sm zm0m`L``GvhKK}MFxbV@Xv6C$BSs})|amxV$}iAp~h45F>AO&p0$PEH!R!0X-J-TT=B>NjrO z=naKJf>Du&y=B<8@wYf|Y%i_J-RSJ?L_$)g$)5598bW09p73IXqj8LeJH@thSy>q# zdgvisym(RciHQjz2;V1qGoA^i?-LlE7mSRIh!Y-%!vUYqhsBE*3qh}4yC&vlAow`0 zr>93Kf=`6f&k-~i*u*y&F%5MF!fq`@g|`}$jy?=`1*Z1i6y2bx*&{M+hBO)^O@xK! z3knK^B{3t+9M9d{+$`?x-Mg313xw9VYiDe072X8 z-nMO<0Ql2SKNUyg{5(IyAh9BNK6VuX{iJ3Ael04d1Hh><%BV{T!({>EAQLzfqY~~} zx(vH_@5aEufFQu;|H><`2w|B~W`O!^MefM2q z0o-4G^;H}=Z~)}z0t9vy257~K6>O#N96NTbLj&Mn6*8BJG&ziz!Ti9qLgUrIQwK16M)~yqQZr!?7#G8hO z2Eo(8g9k-CU>+7NTEwo<(A(RadP&0i+;h)05VM;g=idEn1)z4ex`60QxdT)D#cSB1mjb2sf3 znZm-ttHgv)3uLvmwb-&{i(ufh&ps3W&%`+z6Z#DV@UEK)0A-uQWZpZO1`AHS;PJ;F z7xAXCu@Rk}op4eG%h8{La0iXmH}xecB3w^Qe86aH>5PG3KsXihX9j_yw4bbC6#>w3 zGXWs_KB94!qP~|wU`x=_F9$s>_H=c1u`4`H{loM*EI)(+66z9f)sc|(n(Jsp+3dL{ z7#<#G;dc@7(>MG51De-QbdQsd?;ziI=&MZaWr)7MJ_d#9AGu{OLJ<0!sW(!ZQOGS6 zGCPGVK%sjdu$FH1i&#v9X)#TWK3M?MZ)DzX+l!J!%u7REaxrr9$9VHoC-6Dq!JqR@ z(fog!y2D!@fII+s0P+Cj0muW82Otl?9ozmdzyKuL{~HzM!m002ovPDHLkV1jq) BaJ~Ql diff --git a/modules/highgui/src/files_Qt/Milky/64/85.png b/modules/highgui/src/files_Qt/Milky/64/85.png deleted file mode 100644 index baf7045789c49188ab01a0aa924cd14698f9d9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4341 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/87.png b/modules/highgui/src/files_Qt/Milky/64/87.png deleted file mode 100644 index 39f26f1fbb346bb36e32f1f9a57ac4d1cc563692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3289 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 XZB*C(?FAkM00000NkvXXu0mjfE1y3W diff --git a/modules/highgui/src/files_Qt/Milky/64/88.png b/modules/highgui/src/files_Qt/Milky/64/88.png deleted file mode 100644 index 1cae0fca90e5de4b88f8df78f5fdc9c9083fff81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2916 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/9.png b/modules/highgui/src/files_Qt/Milky/64/9.png deleted file mode 100644 index cce6c7ef884824424ef17946454251679179506a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2685 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/90.png b/modules/highgui/src/files_Qt/Milky/64/90.png deleted file mode 100644 index 3721677dd5a9e6797e180c4d31c53b65a56f4ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4516 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 b{|PVvs>qv;f2FGf00000NkvXXu0mjfiEUk^ diff --git a/modules/highgui/src/files_Qt/Milky/64/92.png b/modules/highgui/src/files_Qt/Milky/64/92.png deleted file mode 100644 index b3a5a4550a8ab53d0e2cc3939e7a1dde8a9258d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4331 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/97.png b/modules/highgui/src/files_Qt/Milky/64/97.png deleted file mode 100644 index 3c664086e2133a3663c72b02234bf1effbd900b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4290 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 diff --git a/modules/highgui/src/files_Qt/Milky/64/98.png b/modules/highgui/src/files_Qt/Milky/64/98.png deleted file mode 100644 index 0a11c643bbe624d172f97c2bc5867dac8b89809d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3951 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 JPDHLkV1ju0000WV@Og>004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu 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 diff --git a/modules/highgui/src/files_Qt/Milky/README.txt b/modules/highgui/src/files_Qt/Milky/README.txt deleted file mode 100644 index 01ab431..0000000 --- a/modules/highgui/src/files_Qt/Milky/README.txt +++ /dev/null @@ -1,19 +0,0 @@ -From: -http://iconeden.com/icon/milky-a-free-vector-iconset.html - -License Agreement - -This is a legal agreement between you (the downloader) and IconEden.com. On download of any royalty-free icons from our website you agree to the following: - -All of the icons remain the property of IconEden.com. The icons can be used royalty-free by the license for any personal or commercial project including web application, web design, software application, mobile application, documentation, presentation, computer game, advertising, film, video. - -You may modify the icons in shape, color, and/or file format and use the modified icons royalty-free according to the license terms for any personal or commercial product. - -The license does not permit the following uses: - - 1. The icons may not be resold, sublicensed, rented, transferred or otherwise made available for use or detached from a product, software application or web page; - 2. The icons may not be placed on any electronic bulletin board or downloadable format; - -You may not use, or allow anyone else to use the icons to create pornographic, libelous, obscene, or defamatory material. - -All icon files are provided "as is". You agree not to hold IconEden.com liable for any damages that may occur due to use, or inability to use, icons or image data from IconEden.com. diff --git a/modules/highgui/src/files_Qt/stylesheet_trackbar.qss b/modules/highgui/src/files_Qt/stylesheet_trackbar.qss deleted file mode 100644 index 9d5fd02..0000000 --- a/modules/highgui/src/files_Qt/stylesheet_trackbar.qss +++ /dev/null @@ -1,58 +0,0 @@ -/* //from http://thesmithfam.org/blog/2010/03/10/fancy-qslider-stylesheet/ */ - -QSlider::groove:horizontal { -border: 1px solid #bbb; -background: white; -height: 10px; -border-radius: 4px; -} - -QSlider::sub-page:horizontal { -background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, -stop: 0 #66e, stop: 1 #bbf); -background: qlineargradient(x1: 0, y1: 0.2, x2: 1, y2: 1, -stop: 0 #bbf, stop: 1 #55f); -border: 1px solid #777; -height: 10px; -border-radius: 4px; -} - -QSlider::add-page:horizontal { -background: #fff; -border: 1px solid #777; -height: 10px; -border-radius: 4px; -} - -QSlider::handle:horizontal { -background: qlineargradient(x1:0, y1:0, x2:1, y2:1, -stop:0 #eee, stop:1 #ccc); -border: 1px solid #777; -width: 13px; -margin-top: -2px; -margin-bottom: -2px; -border-radius: 4px; -} - -QSlider::handle:horizontal:hover { -background: qlineargradient(x1:0, y1:0, x2:1, y2:1, -stop:0 #fff, stop:1 #ddd); -border: 1px solid #444; -border-radius: 4px; -} - -QSlider::sub-page:horizontal:disabled { -background: #bbb; -border-color: #999; -} - -QSlider::add-page:horizontal:disabled { -background: #eee; -border-color: #999; -} - -QSlider::handle:horizontal:disabled { -background: #eee; -border: 1px solid #aaa; -border-radius: 4px; -} diff --git a/modules/highgui/src/grfmt_base.cpp b/modules/highgui/src/grfmt_base.cpp deleted file mode 100644 index bd9d98e..0000000 --- a/modules/highgui/src/grfmt_base.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#include "grfmt_base.hpp" -#include "bitstrm.hpp" - -namespace cv -{ - -BaseImageDecoder::BaseImageDecoder() -{ - m_width = m_height = 0; - m_type = -1; - m_buf_supported = false; -} - -bool BaseImageDecoder::setSource( const string& filename ) -{ - m_filename = filename; - m_buf.release(); - return true; -} - -bool BaseImageDecoder::setSource( const Mat& buf ) -{ - if( !m_buf_supported ) - return false; - m_filename = string(); - m_buf = buf; - return true; -} - -size_t BaseImageDecoder::signatureLength() const -{ - return m_signature.size(); -} - -bool BaseImageDecoder::checkSignature( const string& signature ) const -{ - size_t len = signatureLength(); - return signature.size() >= len && memcmp( signature.c_str(), m_signature.c_str(), len ) == 0; -} - -ImageDecoder BaseImageDecoder::newDecoder() const -{ - return ImageDecoder(); -} - -BaseImageEncoder::BaseImageEncoder() -{ - m_buf_supported = false; -} - -bool BaseImageEncoder::isFormatSupported( int depth ) const -{ - return depth == CV_8U; -} - -string BaseImageEncoder::getDescription() const -{ - return m_description; -} - -bool BaseImageEncoder::setDestination( const string& filename ) -{ - m_filename = filename; - m_buf = 0; - return true; -} - -bool BaseImageEncoder::setDestination( vector& buf ) -{ - if( !m_buf_supported ) - return false; - m_buf = &buf; - m_buf->clear(); - m_filename = string(); - return true; -} - -ImageEncoder BaseImageEncoder::newEncoder() const -{ - return ImageEncoder(); -} - -void BaseImageEncoder::throwOnEror() const -{ - if(!m_last_error.empty()) - { - std::string msg = "Raw image encoder error: " + m_last_error; - CV_Error( CV_BadImageSize, msg.c_str() ); - } -} - -} - -/* End of file. */ diff --git a/modules/highgui/src/grfmt_base.hpp b/modules/highgui/src/grfmt_base.hpp deleted file mode 100644 index 49420f4..0000000 --- a/modules/highgui/src/grfmt_base.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_BASE_H_ -#define _GRFMT_BASE_H_ - -#include "utils.hpp" -#include "bitstrm.hpp" - -namespace cv -{ - -class BaseImageDecoder; -class BaseImageEncoder; -typedef Ptr ImageEncoder; -typedef Ptr ImageDecoder; - -///////////////////////////////// base class for decoders //////////////////////// -class BaseImageDecoder -{ -public: - BaseImageDecoder(); - virtual ~BaseImageDecoder() {}; - - int width() const { return m_width; }; - int height() const { return m_height; }; - virtual int type() const { return m_type; }; - - virtual bool setSource( const string& filename ); - virtual bool setSource( const Mat& buf ); - virtual bool readHeader() = 0; - virtual bool readData( Mat& img ) = 0; - - virtual size_t signatureLength() const; - virtual bool checkSignature( const string& signature ) const; - virtual ImageDecoder newDecoder() const; - -protected: - int m_width; // width of the image ( filled by readHeader ) - int m_height; // height of the image ( filled by readHeader ) - int m_type; - string m_filename; - string m_signature; - Mat m_buf; - bool m_buf_supported; -}; - - -///////////////////////////// base class for encoders //////////////////////////// -class BaseImageEncoder -{ -public: - BaseImageEncoder(); - virtual ~BaseImageEncoder() {}; - virtual bool isFormatSupported( int depth ) const; - - virtual bool setDestination( const string& filename ); - virtual bool setDestination( vector& buf ); - virtual bool write( const Mat& img, const vector& params ) = 0; - - virtual string getDescription() const; - virtual ImageEncoder newEncoder() const; - - virtual void throwOnEror() const; - -protected: - string m_description; - - string m_filename; - vector* m_buf; - bool m_buf_supported; - - string m_last_error; -}; - -} - -#endif/*_GRFMT_BASE_H_*/ diff --git a/modules/highgui/src/grfmt_bmp.cpp b/modules/highgui/src/grfmt_bmp.cpp deleted file mode 100644 index c8f8218..0000000 --- a/modules/highgui/src/grfmt_bmp.cpp +++ /dev/null @@ -1,565 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "grfmt_bmp.hpp" - -namespace cv -{ - -static const char* fmtSignBmp = "BM"; - -/************************ BMP decoder *****************************/ - -BmpDecoder::BmpDecoder() -{ - m_signature = fmtSignBmp; - m_offset = -1; - m_buf_supported = true; -} - - -BmpDecoder::~BmpDecoder() -{ -} - - -void BmpDecoder::close() -{ - m_strm.close(); -} - -ImageDecoder BmpDecoder::newDecoder() const -{ - return new BmpDecoder; -} - -bool BmpDecoder::readHeader() -{ - bool result = false; - bool iscolor = false; - - if( !m_buf.empty() ) - { - if( !m_strm.open( m_buf ) ) - return false; - } - else if( !m_strm.open( m_filename )) - return false; - - try - { - m_strm.skip( 10 ); - m_offset = m_strm.getDWord(); - - int size = m_strm.getDWord(); - - if( size >= 36 ) - { - m_width = m_strm.getDWord(); - m_height = m_strm.getDWord(); - m_bpp = m_strm.getDWord() >> 16; - m_rle_code = (BmpCompression)m_strm.getDWord(); - m_strm.skip(12); - int clrused = m_strm.getDWord(); - m_strm.skip( size - 36 ); - - if( m_width > 0 && m_height != 0 && - (((m_bpp == 1 || m_bpp == 4 || m_bpp == 8 || - m_bpp == 24 || m_bpp == 32 ) && m_rle_code == BMP_RGB) || - (m_bpp == 16 && (m_rle_code == BMP_RGB || m_rle_code == BMP_BITFIELDS)) || - (m_bpp == 4 && m_rle_code == BMP_RLE4) || - (m_bpp == 8 && m_rle_code == BMP_RLE8))) - { - iscolor = true; - result = true; - - if( m_bpp <= 8 ) - { - memset( m_palette, 0, sizeof(m_palette)); - m_strm.getBytes( m_palette, (clrused == 0? 1<> 16; - m_rle_code = BMP_RGB; - - if( m_width > 0 && m_height != 0 && - (m_bpp == 1 || m_bpp == 4 || m_bpp == 8 || - m_bpp == 24 || m_bpp == 32 )) - { - if( m_bpp <= 8 ) - { - uchar buffer[256*3]; - int j, clrused = 1 << m_bpp; - m_strm.getBytes( buffer, clrused*3 ); - for( j = 0; j < clrused; j++ ) - { - m_palette[j].b = buffer[3*j+0]; - m_palette[j].g = buffer[3*j+1]; - m_palette[j].r = buffer[3*j+2]; - } - } - result = true; - } - } - } - catch(...) - { - } - - m_type = iscolor ? CV_8UC3 : CV_8UC1; - m_origin = m_height > 0 ? IPL_ORIGIN_BL : IPL_ORIGIN_TL; - m_height = std::abs(m_height); - - if( !result ) - { - m_offset = -1; - m_width = m_height = -1; - m_strm.close(); - } - return result; -} - - -bool BmpDecoder::readData( Mat& img ) -{ - uchar* data = img.data; - int step = (int)img.step; - bool color = img.channels() > 1; - uchar gray_palette[256]; - bool result = false; - int src_pitch = ((m_width*(m_bpp != 15 ? m_bpp : 16) + 7)/8 + 3) & -4; - int nch = color ? 3 : 1; - int y, width3 = m_width*nch; - - if( m_offset < 0 || !m_strm.isOpened()) - return false; - - if( m_origin == IPL_ORIGIN_BL ) - { - data += (m_height - 1)*step; - step = -step; - } - - AutoBuffer _src, _bgr; - _src.allocate(src_pitch + 32); - - if( !color ) - { - if( m_bpp <= 8 ) - { - CvtPaletteToGray( m_palette, gray_palette, 1 << m_bpp ); - } - _bgr.allocate(m_width*3 + 32); - } - uchar *src = _src, *bgr = _bgr; - - try - { - m_strm.setPos( m_offset ); - - switch( m_bpp ) - { - /************************* 1 BPP ************************/ - case 1: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - FillColorRow1( color ? data : bgr, src, m_width, m_palette ); - if( !color ) - icvCvt_BGR2Gray_8u_C3C1R( bgr, 0, data, 0, cvSize(m_width,1) ); - } - result = true; - break; - - /************************* 4 BPP ************************/ - case 4: - if( m_rle_code == BMP_RGB ) - { - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( color ) - FillColorRow4( data, src, m_width, m_palette ); - else - FillGrayRow4( data, src, m_width, gray_palette ); - } - result = true; - } - else if( m_rle_code == BMP_RLE4 ) // rle4 compression - { - uchar* line_end = data + width3; - y = 0; - - for(;;) - { - int code = m_strm.getWord(); - int len = code & 255; - code >>= 8; - if( len != 0 ) // encoded mode - { - PaletteEntry clr[2]; - uchar gray_clr[2]; - int t = 0; - - clr[0] = m_palette[code >> 4]; - clr[1] = m_palette[code & 15]; - gray_clr[0] = gray_palette[code >> 4]; - gray_clr[1] = gray_palette[code & 15]; - - uchar* end = data + len*nch; - if( end > line_end ) goto decode_rle4_bad; - do - { - if( color ) - WRITE_PIX( data, clr[t] ); - else - *data = gray_clr[t]; - t ^= 1; - } - while( (data += nch) < end ); - } - else if( code > 2 ) // absolute mode - { - if( data + code*nch > line_end ) goto decode_rle4_bad; - m_strm.getBytes( src, (((code + 1)>>1) + 1) & -2 ); - if( color ) - data = FillColorRow4( data, src, code, m_palette ); - else - data = FillGrayRow4( data, src, code, gray_palette ); - } - else - { - int x_shift3 = (int)(line_end - data); - int y_shift = m_height - y; - - if( code == 2 ) - { - x_shift3 = m_strm.getByte()*nch; - y_shift = m_strm.getByte(); - } - - len = x_shift3 + ((y_shift * width3) & ((code == 0) - 1)); - - if( color ) - data = FillUniColor( data, line_end, step, width3, - y, m_height, x_shift3, - m_palette[0] ); - else - data = FillUniGray( data, line_end, step, width3, - y, m_height, x_shift3, - gray_palette[0] ); - - if( y >= m_height ) - break; - } - } - - result = true; -decode_rle4_bad: ; - } - break; - - /************************* 8 BPP ************************/ - case 8: - if( m_rle_code == BMP_RGB ) - { - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( color ) - FillColorRow8( data, src, m_width, m_palette ); - else - FillGrayRow8( data, src, m_width, gray_palette ); - } - result = true; - } - else if( m_rle_code == BMP_RLE8 ) // rle8 compression - { - uchar* line_end = data + width3; - int line_end_flag = 0; - y = 0; - - for(;;) - { - int code = m_strm.getWord(); - int len = code & 255; - code >>= 8; - if( len != 0 ) // encoded mode - { - int prev_y = y; - len *= nch; - - if( data + len > line_end ) - goto decode_rle8_bad; - - if( color ) - data = FillUniColor( data, line_end, step, width3, - y, m_height, len, - m_palette[code] ); - else - data = FillUniGray( data, line_end, step, width3, - y, m_height, len, - gray_palette[code] ); - - line_end_flag = y - prev_y; - } - else if( code > 2 ) // absolute mode - { - int prev_y = y; - int code3 = code*nch; - - if( data + code3 > line_end ) - goto decode_rle8_bad; - m_strm.getBytes( src, (code + 1) & -2 ); - if( color ) - data = FillColorRow8( data, src, code, m_palette ); - else - data = FillGrayRow8( data, src, code, gray_palette ); - - line_end_flag = y - prev_y; - } - else - { - int x_shift3 = (int)(line_end - data); - int y_shift = m_height - y; - - if( code || !line_end_flag || x_shift3 < width3 ) - { - if( code == 2 ) - { - x_shift3 = m_strm.getByte()*nch; - y_shift = m_strm.getByte(); - } - - x_shift3 += (y_shift * width3) & ((code == 0) - 1); - - if( y >= m_height ) - break; - - if( color ) - data = FillUniColor( data, line_end, step, width3, - y, m_height, x_shift3, - m_palette[0] ); - else - data = FillUniGray( data, line_end, step, width3, - y, m_height, x_shift3, - gray_palette[0] ); - - if( y >= m_height ) - break; - } - - line_end_flag = 0; - if( y >= m_height ) - break; - } - } - - result = true; -decode_rle8_bad: ; - } - break; - /************************* 15 BPP ************************/ - case 15: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( !color ) - icvCvt_BGR5552Gray_8u_C2C1R( src, 0, data, 0, cvSize(m_width,1) ); - else - icvCvt_BGR5552BGR_8u_C2C3R( src, 0, data, 0, cvSize(m_width,1) ); - } - result = true; - break; - /************************* 16 BPP ************************/ - case 16: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( !color ) - icvCvt_BGR5652Gray_8u_C2C1R( src, 0, data, 0, cvSize(m_width,1) ); - else - icvCvt_BGR5652BGR_8u_C2C3R( src, 0, data, 0, cvSize(m_width,1) ); - } - result = true; - break; - /************************* 24 BPP ************************/ - case 24: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if(!color) - icvCvt_BGR2Gray_8u_C3C1R( src, 0, data, 0, cvSize(m_width,1) ); - else - memcpy( data, src, m_width*3 ); - } - result = true; - break; - /************************* 32 BPP ************************/ - case 32: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - - if( !color ) - icvCvt_BGRA2Gray_8u_C4C1R( src, 0, data, 0, cvSize(m_width,1) ); - else - icvCvt_BGRA2BGR_8u_C4C3R( src, 0, data, 0, cvSize(m_width,1) ); - } - result = true; - break; - default: - assert(0); - } - } - catch(...) - { - } - - return result; -} - - -////////////////////////////////////////////////////////////////////////////////////////// - -BmpEncoder::BmpEncoder() -{ - m_description = "Windows bitmap (*.bmp;*.dib)"; - m_buf_supported = true; -} - - -BmpEncoder::~BmpEncoder() -{ -} - -ImageEncoder BmpEncoder::newEncoder() const -{ - return new BmpEncoder; -} - -bool BmpEncoder::write( const Mat& img, const vector& ) -{ - int width = img.cols, height = img.rows, channels = img.channels(); - int fileStep = (width*channels + 3) & -4; - uchar zeropad[] = "\0\0\0\0"; - WLByteStream strm; - - if( m_buf ) - { - if( !strm.open( *m_buf ) ) - return false; - } - else if( !strm.open( m_filename )) - return false; - - int bitmapHeaderSize = 40; - int paletteSize = channels > 1 ? 0 : 1024; - int headerSize = 14 /* fileheader */ + bitmapHeaderSize + paletteSize; - int fileSize = fileStep*height + headerSize; - PaletteEntry palette[256]; - - if( m_buf ) - m_buf->reserve( alignSize(fileSize + 16, 256) ); - - // write signature 'BM' - strm.putBytes( fmtSignBmp, (int)strlen(fmtSignBmp) ); - - // write file header - strm.putDWord( fileSize ); // file size - strm.putDWord( 0 ); - strm.putDWord( headerSize ); - - // write bitmap header - strm.putDWord( bitmapHeaderSize ); - strm.putDWord( width ); - strm.putDWord( height ); - strm.putWord( 1 ); - strm.putWord( channels << 3 ); - strm.putDWord( BMP_RGB ); - strm.putDWord( 0 ); - strm.putDWord( 0 ); - strm.putDWord( 0 ); - strm.putDWord( 0 ); - strm.putDWord( 0 ); - - if( channels == 1 ) - { - FillGrayPalette( palette, 8 ); - strm.putBytes( palette, sizeof(palette)); - } - - width *= channels; - for( int y = height - 1; y >= 0; y-- ) - { - strm.putBytes( img.data + img.step*y, width ); - if( fileStep > width ) - strm.putBytes( zeropad, fileStep - width ); - } - - strm.close(); - return true; -} - -} diff --git a/modules/highgui/src/grfmt_bmp.hpp b/modules/highgui/src/grfmt_bmp.hpp deleted file mode 100644 index 404a9bd..0000000 --- a/modules/highgui/src/grfmt_bmp.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_BMP_H_ -#define _GRFMT_BMP_H_ - -#include "grfmt_base.hpp" - -namespace cv -{ - -enum BmpCompression -{ - BMP_RGB = 0, - BMP_RLE8 = 1, - BMP_RLE4 = 2, - BMP_BITFIELDS = 3 -}; - - -// Windows Bitmap reader -class BmpDecoder : public BaseImageDecoder -{ -public: - - BmpDecoder(); - ~BmpDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - ImageDecoder newDecoder() const; - -protected: - - RLByteStream m_strm; - PaletteEntry m_palette[256]; - int m_origin; - int m_bpp; - int m_offset; - BmpCompression m_rle_code; -}; - - -// ... writer -class BmpEncoder : public BaseImageEncoder -{ -public: - BmpEncoder(); - ~BmpEncoder(); - - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; -}; - -} - -#endif/*_GRFMT_BMP_H_*/ diff --git a/modules/highgui/src/grfmt_exr.cpp b/modules/highgui/src/grfmt_exr.cpp deleted file mode 100644 index c29f4ba..0000000 --- a/modules/highgui/src/grfmt_exr.cpp +++ /dev/null @@ -1,741 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_OPENEXR - -#if defined _MSC_VER && _MSC_VER >= 1200 -# pragma warning( disable: 4100 4244 4267 ) -#endif - -#if defined __GNUC__ && defined __APPLE__ -# pragma GCC diagnostic ignored "-Wshadow" -#endif - -#include -#include -#include -#include -#include -#include -#include "grfmt_exr.hpp" - -#if defined _WIN32 - -#undef UINT -#define UINT ((Imf::PixelType)0) -#undef HALF -#define HALF ((Imf::PixelType)1) -#undef FLOAT -#define FLOAT ((Imf::PixelType)2) - -#endif - -namespace cv -{ - -/////////////////////// ExrDecoder /////////////////// - -ExrDecoder::ExrDecoder() -{ - m_signature = "\x76\x2f\x31\x01"; - m_file = 0; - m_red = m_green = m_blue = 0; -} - - -ExrDecoder::~ExrDecoder() -{ - close(); -} - - -void ExrDecoder::close() -{ - if( m_file ) - { - delete m_file; - m_file = 0; - } -} - - -int ExrDecoder::type() const -{ - return CV_MAKETYPE((m_isfloat ? CV_32F : CV_32S), m_iscolor ? 3 : 1); -} - - -bool ExrDecoder::readHeader() -{ - bool result = false; - - m_file = new InputFile( m_filename.c_str() ); - - if( !m_file ) // probably paranoid - return false; - - m_datawindow = m_file->header().dataWindow(); - m_width = m_datawindow.max.x - m_datawindow.min.x + 1; - m_height = m_datawindow.max.y - m_datawindow.min.y + 1; - - // the type HALF is converted to 32 bit float - // and the other types supported by OpenEXR are 32 bit anyway - m_bit_depth = 32; - - if( hasChromaticities( m_file->header() )) - m_chroma = chromaticities( m_file->header() ); - - const ChannelList &channels = m_file->header().channels(); - m_red = channels.findChannel( "R" ); - m_green = channels.findChannel( "G" ); - m_blue = channels.findChannel( "B" ); - if( m_red || m_green || m_blue ) - { - m_iscolor = true; - m_ischroma = false; - result = true; - } - else - { - m_green = channels.findChannel( "Y" ); - if( m_green ) - { - m_ischroma = true; - m_red = channels.findChannel( "RY" ); - m_blue = channels.findChannel( "BY" ); - m_iscolor = (m_blue || m_red); - result = true; - } - else - result = false; - } - - if( result ) - { - int uintcnt = 0; - int chcnt = 0; - if( m_red ) - { - chcnt++; - uintcnt += ( m_red->type == UINT ); - } - if( m_green ) - { - chcnt++; - uintcnt += ( m_green->type == UINT ); - } - if( m_blue ) - { - chcnt++; - uintcnt += ( m_blue->type == UINT ); - } - m_type = (chcnt == uintcnt) ? UINT : FLOAT; - - m_isfloat = (m_type == FLOAT); - } - - if( !result ) - close(); - - return result; -} - - -bool ExrDecoder::readData( Mat& img ) -{ - m_native_depth = CV_MAT_DEPTH(type()) == img.depth(); - bool color = img.channels() > 1; - - uchar* data = img.data; - int step = img.step; - bool justcopy = m_native_depth; - bool chromatorgb = false; - bool rgbtogray = false; - bool result = true; - FrameBuffer frame; - int xsample[3] = {1, 1, 1}; - char *buffer; - int xstep; - int ystep; - - xstep = m_native_depth ? 4 : 1; - - if( !m_native_depth || (!color && m_iscolor )) - { - buffer = (char *)new float[ m_width * 3 ]; - ystep = 0; - } - else - { - buffer = (char *)data; - ystep = step; - } - - if( m_ischroma ) - { - if( color ) - { - if( m_iscolor ) - { - if( m_blue ) - { - frame.insert( "BY", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep, - 12, ystep, m_blue->xSampling, m_blue->ySampling, 0.0 )); - xsample[0] = m_blue->ySampling; - } - if( m_green ) - { - frame.insert( "Y", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 4, - 12, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - xsample[1] = m_green->ySampling; - } - if( m_red ) - { - frame.insert( "RY", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 8, - 12, ystep, m_red->xSampling, m_red->ySampling, 0.0 )); - xsample[2] = m_red->ySampling; - } - chromatorgb = true; - } - else - { - frame.insert( "Y", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep, - 12, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - frame.insert( "Y", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 4, - 12, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - frame.insert( "Y", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 8, - 12, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - xsample[0] = m_green->ySampling; - xsample[1] = m_green->ySampling; - xsample[2] = m_green->ySampling; - } - } - else - { - frame.insert( "Y", Slice( m_type, - buffer - m_datawindow.min.x * 4 - m_datawindow.min.y * ystep, - 4, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - xsample[0] = m_green->ySampling; - } - } - else - { - if( m_blue ) - { - frame.insert( "B", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep, - 12, ystep, m_blue->xSampling, m_blue->ySampling, 0.0 )); - xsample[0] = m_blue->ySampling; - } - if( m_green ) - { - frame.insert( "G", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 4, - 12, ystep, m_green->xSampling, m_green->ySampling, 0.0 )); - xsample[1] = m_green->ySampling; - } - if( m_red ) - { - frame.insert( "R", Slice( m_type, - buffer - m_datawindow.min.x * 12 - m_datawindow.min.y * ystep + 8, - 12, ystep, m_red->xSampling, m_red->ySampling, 0.0 )); - xsample[2] = m_red->ySampling; - } - if(color == 0) - { - rgbtogray = true; - justcopy = false; - } - } - - m_file->setFrameBuffer( frame ); - if( justcopy ) - { - m_file->readPixels( m_datawindow.min.y, m_datawindow.max.y ); - - if( color ) - { - if( m_blue && (m_blue->xSampling != 1 || m_blue->ySampling != 1) ) - UpSample( data, 3, step / xstep, xsample[0], m_blue->ySampling ); - if( m_green && (m_green->xSampling != 1 || m_green->ySampling != 1) ) - UpSample( data + xstep, 3, step / xstep, xsample[1], m_green->ySampling ); - if( m_red && (m_red->xSampling != 1 || m_red->ySampling != 1) ) - UpSample( data + 2 * xstep, 3, step / xstep, xsample[2], m_red->ySampling ); - } - else if( m_green && (m_green->xSampling != 1 || m_green->ySampling != 1) ) - UpSample( data, 1, step / xstep, xsample[0], m_green->ySampling ); - } - else - { - uchar *out = data; - int x, y; - for( y = m_datawindow.min.y; y <= m_datawindow.max.y; y++ ) - { - m_file->readPixels( y, y ); - - if( rgbtogray ) - { - if( xsample[0] != 1 ) - UpSampleX( (float *)buffer, 3, xsample[0] ); - if( xsample[1] != 1 ) - UpSampleX( (float *)buffer + 4, 3, xsample[1] ); - if( xsample[2] != 1 ) - UpSampleX( (float *)buffer + 8, 3, xsample[2] ); - - RGBToGray( (float *)buffer, (float *)out ); - } - else - { - if( xsample[0] != 1 ) - UpSampleX( (float *)buffer, 3, xsample[0] ); - if( xsample[1] != 1 ) - UpSampleX( (float *)(buffer + 4), 3, xsample[1] ); - if( xsample[2] != 1 ) - UpSampleX( (float *)(buffer + 8), 3, xsample[2] ); - - if( chromatorgb ) - ChromaToBGR( (float *)buffer, 1, step ); - - if( m_type == FLOAT ) - { - float *fi = (float *)buffer; - for( x = 0; x < m_width * 3; x++) - { - int t = cvRound(fi[x]*5); - out[x] = CV_CAST_8U(t); - } - } - else - { - unsigned *ui = (unsigned *)buffer; - for( x = 0; x < m_width * 3; x++) - { - unsigned t = ui[x]; - out[x] = CV_CAST_8U(t); - } - } - } - - out += step; - } - if( color ) - { - if( m_blue && (m_blue->xSampling != 1 || m_blue->ySampling != 1) ) - UpSampleY( data, 3, step / xstep, m_blue->ySampling ); - if( m_green && (m_green->xSampling != 1 || m_green->ySampling != 1) ) - UpSampleY( data + xstep, 3, step / xstep, m_green->ySampling ); - if( m_red && (m_red->xSampling != 1 || m_red->ySampling != 1) ) - UpSampleY( data + 2 * xstep, 3, step / xstep, m_red->ySampling ); - } - else if( m_green && (m_green->xSampling != 1 || m_green->ySampling != 1) ) - UpSampleY( data, 1, step / xstep, m_green->ySampling ); - } - - if( chromatorgb ) - ChromaToBGR( (float *)data, m_height, step / xstep ); - - close(); - - return result; -} - -/** -// on entry pixel values are stored packed in the upper left corner of the image -// this functions expands them by duplication to cover the whole image - */ -void ExrDecoder::UpSample( uchar *data, int xstep, int ystep, int xsample, int ysample ) -{ - for( int y = (m_height - 1) / ysample, yre = m_height - ysample; y >= 0; y--, yre -= ysample ) - { - for( int x = (m_width - 1) / xsample, xre = m_width - xsample; x >= 0; x--, xre -= xsample ) - { - for( int i = 0; i < ysample; i++ ) - { - for( int n = 0; n < xsample; n++ ) - { - if( !m_native_depth ) - data[(yre + i) * ystep + (xre + n) * xstep] = data[y * ystep + x * xstep]; - else if( m_type == FLOAT ) - ((float *)data)[(yre + i) * ystep + (xre + n) * xstep] = ((float *)data)[y * ystep + x * xstep]; - else - ((unsigned *)data)[(yre + i) * ystep + (xre + n) * xstep] = ((unsigned *)data)[y * ystep + x * xstep]; - } - } - } - } -} - -/** -// on entry pixel values are stored packed in the upper left corner of the image -// this functions expands them by duplication to cover the whole image - */ -void ExrDecoder::UpSampleX( float *data, int xstep, int xsample ) -{ - for( int x = (m_width - 1) / xsample, xre = m_width - xsample; x >= 0; x--, xre -= xsample ) - { - for( int n = 0; n < xsample; n++ ) - { - if( m_type == FLOAT ) - ((float *)data)[(xre + n) * xstep] = ((float *)data)[x * xstep]; - else - ((unsigned *)data)[(xre + n) * xstep] = ((unsigned *)data)[x * xstep]; - } - } -} - -/** -// on entry pixel values are stored packed in the upper left corner of the image -// this functions expands them by duplication to cover the whole image - */ -void ExrDecoder::UpSampleY( uchar *data, int xstep, int ystep, int ysample ) -{ - for( int y = m_height - ysample, yre = m_height - ysample; y >= 0; y -= ysample, yre -= ysample ) - { - for( int x = 0; x < m_width; x++ ) - { - for( int i = 1; i < ysample; i++ ) - { - if( !m_native_depth ) - data[(yre + i) * ystep + x * xstep] = data[y * ystep + x * xstep]; - else if( m_type == FLOAT ) - ((float *)data)[(yre + i) * ystep + x * xstep] = ((float *)data)[y * ystep + x * xstep]; - else - ((unsigned *)data)[(yre + i) * ystep + x * xstep] = ((unsigned *)data)[y * ystep + x * xstep]; - } - } - } -} - -/** -// algorithm from ImfRgbaYca.cpp - */ -void ExrDecoder::ChromaToBGR( float *data, int numlines, int step ) -{ - for( int y = 0; y < numlines; y++ ) - { - for( int x = 0; x < m_width; x++ ) - { - double b, Y, r; - if( !m_native_depth ) - { - b = ((uchar *)data)[y * step + x * 3]; - Y = ((uchar *)data)[y * step + x * 3 + 1]; - r = ((uchar *)data)[y * step + x * 3 + 2]; - } - else if( m_type == FLOAT ) - { - b = data[y * step + x * 3]; - Y = data[y * step + x * 3 + 1]; - r = data[y * step + x * 3 + 2]; - } - else - { - b = ((unsigned *)data)[y * step + x * 3]; - Y = ((unsigned *)data)[y * step + x * 3 + 1]; - r = ((unsigned *)data)[y * step + x * 3 + 2]; - } - r = (r + 1) * Y; - b = (b + 1) * Y; - Y = (Y - b * m_chroma.blue[1] - r * m_chroma.red[1]) / m_chroma.green[1]; - - if( !m_native_depth ) - { - int t = cvRound(b); - ((uchar *)data)[y * step + x * 3] = CV_CAST_8U(t); - t = cvRound(Y); - ((uchar *)data)[y * step + x * 3 + 1] = CV_CAST_8U(t); - t = cvRound(r); - ((uchar *)data)[y * step + x * 3 + 2] = CV_CAST_8U(t); - } - else if( m_type == FLOAT ) - { - data[y * step + x * 3] = (float)b; - data[y * step + x * 3 + 1] = (float)Y; - data[y * step + x * 3 + 2] = (float)r; - } - else - { - int t = cvRound(b); - ((unsigned *)data)[y * step + x * 3] = (unsigned)MAX(t,0); - t = cvRound(Y); - ((unsigned *)data)[y * step + x * 3 + 1] = (unsigned)MAX(t,0); - t = cvRound(r); - ((unsigned *)data)[y * step + x * 3 + 2] = (unsigned)MAX(t,0); - } - } - } -} - - -/** -// convert one row to gray -*/ -void ExrDecoder::RGBToGray( float *in, float *out ) -{ - if( m_type == FLOAT ) - { - if( m_native_depth ) - { - for( int i = 0, n = 0; i < m_width; i++, n += 3 ) - out[i] = in[n] * m_chroma.blue[0] + in[n + 1] * m_chroma.green[0] + in[n + 2] * m_chroma.red[0]; - } - else - { - uchar *o = (uchar *)out; - for( int i = 0, n = 0; i < m_width; i++, n += 3 ) - o[i] = (uchar) (in[n] * m_chroma.blue[0] + in[n + 1] * m_chroma.green[0] + in[n + 2] * m_chroma.red[0]); - } - } - else // UINT - { - if( m_native_depth ) - { - unsigned *ui = (unsigned *)in; - for( int i = 0; i < m_width * 3; i++ ) - ui[i] -= 0x80000000; - int *si = (int *)in; - for( int i = 0, n = 0; i < m_width; i++, n += 3 ) - ((int *)out)[i] = int(si[n] * m_chroma.blue[0] + si[n + 1] * m_chroma.green[0] + si[n + 2] * m_chroma.red[0]); - } - else // how to best convert float to uchar? - { - unsigned *ui = (unsigned *)in; - for( int i = 0, n = 0; i < m_width; i++, n += 3 ) - ((uchar *)out)[i] = uchar((ui[n] * m_chroma.blue[0] + ui[n + 1] * m_chroma.green[0] + ui[n + 2] * m_chroma.red[0]) * (256.0 / 4294967296.0)); - } - } -} - - -ImageDecoder ExrDecoder::newDecoder() const -{ - return new ExrDecoder; -} - -/////////////////////// ExrEncoder /////////////////// - - -ExrEncoder::ExrEncoder() -{ - m_description = "OpenEXR Image files (*.exr)"; -} - - -ExrEncoder::~ExrEncoder() -{ -} - - -bool ExrEncoder::isFormatSupported( int depth ) const -{ - return CV_MAT_DEPTH(depth) >= CV_8U && CV_MAT_DEPTH(depth) < CV_64F; -} - - -// TODO scale appropriately -bool ExrEncoder::write( const Mat& img, const vector& ) -{ - int width = img.cols, height = img.rows; - int depth = img.depth(), channels = img.channels(); - bool result = false; - bool issigned = depth == CV_8S || depth == CV_16S || depth == CV_32S; - bool isfloat = depth == CV_32F || depth == CV_64F; - depth = CV_ELEM_SIZE1(depth)*8; - uchar* data = img.data; - int step = img.step; - - Header header( width, height ); - Imf::PixelType type; - - if(depth == 8) - type = HALF; - else if(isfloat) - type = FLOAT; - else - type = UINT; - - if( channels == 3 ) - { - header.channels().insert( "R", Channel( type )); - header.channels().insert( "G", Channel( type )); - header.channels().insert( "B", Channel( type )); - //printf("bunt\n"); - } - else - { - header.channels().insert( "Y", Channel( type )); - //printf("gray\n"); - } - - OutputFile file( m_filename.c_str(), header ); - - FrameBuffer frame; - - char *buffer; - int bufferstep; - int size; - if( type == FLOAT && depth == 32 ) - { - buffer = (char *)const_cast(data); - bufferstep = step; - size = 4; - } - else if( depth > 16 || type == UINT ) - { - buffer = (char *)new unsigned[width * channels]; - bufferstep = 0; - size = 4; - } - else - { - buffer = (char *)new half[width * channels]; - bufferstep = 0; - size = 2; - } - - //printf("depth %d %s\n", depth, types[type]); - - if( channels == 3 ) - { - frame.insert( "B", Slice( type, buffer, size * 3, bufferstep )); - frame.insert( "G", Slice( type, buffer + size, size * 3, bufferstep )); - frame.insert( "R", Slice( type, buffer + size * 2, size * 3, bufferstep )); - } - else - frame.insert( "Y", Slice( type, buffer, size, bufferstep )); - - file.setFrameBuffer( frame ); - - int offset = issigned ? 1 << (depth - 1) : 0; - - result = true; - if( type == FLOAT && depth == 32 ) - { - try - { - file.writePixels( height ); - } - catch(...) - { - result = false; - } - } - else - { - // int scale = 1 << (32 - depth); - // printf("scale %d\n", scale); - for(int line = 0; line < height; line++) - { - if(type == UINT) - { - unsigned *buf = (unsigned*)buffer; // FIXME 64-bit problems - - if( depth <= 8 ) - { - for(int i = 0; i < width * channels; i++) - buf[i] = data[i] + offset; - } - else if( depth <= 16 ) - { - unsigned short *sd = (unsigned short *)data; - for(int i = 0; i < width * channels; i++) - buf[i] = sd[i] + offset; - } - else - { - int *sd = (int *)data; // FIXME 64-bit problems - for(int i = 0; i < width * channels; i++) - buf[i] = (unsigned) sd[i] + offset; - } - } - else - { - half *buf = (half *)buffer; - - if( depth <= 8 ) - { - for(int i = 0; i < width * channels; i++) - buf[i] = data[i]; - } - else if( depth <= 16 ) - { - unsigned short *sd = (unsigned short *)data; - for(int i = 0; i < width * channels; i++) - buf[i] = sd[i]; - } - } - try - { - file.writePixels( 1 ); - } - catch(...) - { - result = false; - break; - } - data += step; - } - delete[] buffer; - } - - return result; -} - - -ImageEncoder ExrEncoder::newEncoder() const -{ - return new ExrEncoder; -} - -} - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/grfmt_exr.hpp b/modules/highgui/src/grfmt_exr.hpp deleted file mode 100644 index b9467c6..0000000 --- a/modules/highgui/src/grfmt_exr.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_EXR_H_ -#define _GRFMT_EXR_H_ - -#ifdef HAVE_OPENEXR - -#if defined __GNUC__ && defined __APPLE__ -# pragma GCC diagnostic ignored "-Wshadow" -#endif - -#include -#include -#include -#include -#include "grfmt_base.hpp" - -namespace cv -{ - -using namespace Imf; -using namespace Imath; - -/* libpng version only */ - -class ExrDecoder : public BaseImageDecoder -{ -public: - - ExrDecoder(); - ~ExrDecoder(); - - int type() const; - bool readData( Mat& img ); - bool readHeader(); - void close(); - - ImageDecoder newDecoder() const; - -protected: - void UpSample( uchar *data, int xstep, int ystep, int xsample, int ysample ); - void UpSampleX( float *data, int xstep, int xsample ); - void UpSampleY( uchar *data, int xstep, int ystep, int ysample ); - void ChromaToBGR( float *data, int numlines, int step ); - void RGBToGray( float *in, float *out ); - - InputFile *m_file; - Imf::PixelType m_type; - Box2i m_datawindow; - bool m_ischroma; - const Channel *m_red; - const Channel *m_green; - const Channel *m_blue; - Chromaticities m_chroma; - int m_bit_depth; - bool m_native_depth; - bool m_iscolor; - bool m_isfloat; -}; - - -class ExrEncoder : public BaseImageEncoder -{ -public: - ExrEncoder(); - ~ExrEncoder(); - - bool isFormatSupported( int depth ) const; - bool write( const Mat& img, const vector& params ); - ImageEncoder newEncoder() const; -}; - -} - -#endif - -#endif/*_GRFMT_EXR_H_*/ diff --git a/modules/highgui/src/grfmt_imageio.cpp b/modules/highgui/src/grfmt_imageio.cpp deleted file mode 100644 index a525b96..0000000 --- a/modules/highgui/src/grfmt_imageio.cpp +++ /dev/null @@ -1,396 +0,0 @@ -/* - * grfmt_imageio.cpp - * - * - * Created by Morgan Conbere on 5/17/07. - * - */ - -#include "precomp.hpp" - -#ifdef HAVE_IMAGEIO - -#include "grfmt_imageio.hpp" - -namespace cv -{ - -/////////////////////// ImageIODecoder /////////////////// - -ImageIODecoder::ImageIODecoder() -{ - imageRef = NULL; -} - -ImageIODecoder::~ImageIODecoder() -{ - close(); -} - - -void ImageIODecoder::close() -{ - CGImageRelease( imageRef ); - imageRef = NULL; -} - - -size_t ImageIODecoder::signatureLength() const -{ - return 12; -} - -bool ImageIODecoder::checkSignature( const string& signature ) const -{ - // TODO: implement real signature check - return true; -} - -ImageDecoder ImageIODecoder::newDecoder() const -{ - return new ImageIODecoder; -} - -bool ImageIODecoder::readHeader() -{ - CFURLRef imageURLRef; - CGImageSourceRef sourceRef; - // diciu, if ReadHeader is called twice in a row make sure to release the previously allocated imageRef - if (imageRef != NULL) - CGImageRelease(imageRef); - imageRef = NULL; - - imageURLRef = CFURLCreateFromFileSystemRepresentation( NULL, - (const UInt8*)m_filename.c_str(), m_filename.size(), false ); - - sourceRef = CGImageSourceCreateWithURL( imageURLRef, NULL ); - CFRelease( imageURLRef ); - if ( !sourceRef ) - return false; - - imageRef = CGImageSourceCreateImageAtIndex( sourceRef, 0, NULL ); - CFRelease( sourceRef ); - if( !imageRef ) - return false; - - m_width = CGImageGetWidth( imageRef ); - m_height = CGImageGetHeight( imageRef ); - - CGColorSpaceRef colorSpace = CGImageGetColorSpace( imageRef ); - if( !colorSpace ) - return false; - - m_type = CGColorSpaceGetNumberOfComponents( colorSpace ) > 1 ? CV_8UC3 : CV_8UC1; - - return true; -} - - -bool ImageIODecoder::readData( Mat& img ) -{ - uchar* data = img.data; - int step = img.step; - bool color = img.channels() > 1; - int bpp; // Bytes per pixel - int bit_depth = 8; - - // Get Height, Width, and color information - if( !readHeader() ) - return false; - - CGContextRef context = NULL; // The bitmap context - CGColorSpaceRef colorSpace = NULL; - uchar* bitmap = NULL; - CGImageAlphaInfo alphaInfo; - - // CoreGraphics will take care of converting to grayscale and back as long as the - // appropriate colorspace is set - if( color == CV_LOAD_IMAGE_GRAYSCALE ) - { - colorSpace = CGColorSpaceCreateDeviceGray(); - bpp = 1; - alphaInfo = kCGImageAlphaNone; - } - else if( color == CV_LOAD_IMAGE_COLOR ) - { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceRGB(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGBLinear ); -#endif - bpp = 4; /* CG only has 8 and 32 bit color spaces, so we waste a byte */ - alphaInfo = kCGImageAlphaNoneSkipLast; - } - if( !colorSpace ) - return false; - - bitmap = (uchar*)malloc( bpp * m_height * m_width ); - if( !bitmap ) - { - CGColorSpaceRelease( colorSpace ); - return false; - } - - context = CGBitmapContextCreate( (void *)bitmap, - m_width, /* width */ - m_height, /* height */ - bit_depth, /* bit depth */ - bpp * m_width, /* bytes per row */ - colorSpace, /* color space */ - alphaInfo); - - CGColorSpaceRelease( colorSpace ); - if( !context ) - { - free( bitmap ); - return false; - } - - // Copy the image data into the bitmap region - CGRect rect = {{0,0},{m_width,m_height}}; - CGContextDrawImage( context, rect, imageRef ); - - uchar* bitdata = (uchar*)CGBitmapContextGetData( context ); - if( !bitdata ) - { - free( bitmap); - CGContextRelease( context ); - return false; - } - - // Move the bitmap (in RGB) into data (in BGR) - int bitmapIndex = 0; - - if( color == CV_LOAD_IMAGE_COLOR ) - { - uchar * base = data; - - for (int y = 0; y < m_height; y++) - { - uchar * line = base + y * step; - - for (int x = 0; x < m_width; x++) - { - // Blue channel - line[0] = bitdata[bitmapIndex + 2]; - // Green channel - line[1] = bitdata[bitmapIndex + 1]; - // Red channel - line[2] = bitdata[bitmapIndex + 0]; - - line += 3; - bitmapIndex += bpp; - } - } - } - else if( color == CV_LOAD_IMAGE_GRAYSCALE ) - { - for (int y = 0; y < m_height; y++) - memcpy (data + y * step, bitmap + y * m_width, m_width); - } - - free( bitmap ); - CGContextRelease( context ); - return true; -} - - -/////////////////////// ImageIOEncoder /////////////////// - -ImageIOEncoder::ImageIOEncoder() -{ - m_description = "Apple ImageIO (*.bmp;*.dib;*.exr;*.jpeg;*.jpg;*.jpe;*.jp2;*.pdf;*.png;*.tiff;*.tif)"; -} - - -ImageIOEncoder::~ImageIOEncoder() -{ -} - - -ImageEncoder ImageIOEncoder::newEncoder() const -{ - return new ImageIOEncoder; -} - -static -CFStringRef FilenameToUTI( const char* filename ) -{ - const char* ext = filename; - char* ext_buf; - int i; - CFStringRef imageUTI = NULL; - - for(;;) - { - const char* temp = strchr( ext + 1, '.' ); - if( !temp ) break; - ext = temp; - } - - if(!ext) - return NULL; - - ext_buf = (char*)malloc(strlen(ext)+1); - for(i = 0; ext[i] != '\0'; i++) - ext_buf[i] = (char)tolower(ext[i]); - ext_buf[i] = '\0'; - ext = ext_buf; - - if( !strcmp(ext, ".bmp") || !strcmp(ext, ".dib") ) - imageUTI = CFSTR( "com.microsoft.bmp" ); - else if( !strcmp(ext, ".exr") ) - imageUTI = CFSTR( "com.ilm.openexr-image" ); - else if( !strcmp(ext, ".jpeg") || !strcmp(ext, ".jpg") || !strcmp(ext, ".jpe") ) - imageUTI = CFSTR( "public.jpeg" ); - else if( !strcmp(ext, ".jp2") ) - imageUTI = CFSTR( "public.jpeg-2000" ); - else if( !strcmp(ext, ".pdf") ) - imageUTI = CFSTR( "com.adobe.pdf" ); - else if( !strcmp(ext, ".png") ) - imageUTI = CFSTR( "public.png" ); - else if( !strcmp(ext, ".tiff") || !strcmp(ext, ".tif") ) - imageUTI = CFSTR( "public.tiff" ); - - free(ext_buf); - - return imageUTI; -} - - -bool ImageIOEncoder::write( const Mat& img, const vector& params ) -{ - int width = img.cols, height = img.rows; - int _channels = img.channels(); - const uchar* data = img.data; - int step = img.step; - - // Determine the appropriate UTI based on the filename extension - CFStringRef imageUTI = FilenameToUTI( m_filename.c_str() ); - - // Determine the Bytes Per Pixel - int bpp = (_channels == 1) ? 1 : 4; - - // Write the data into a bitmap context - CGContextRef context; - CGColorSpaceRef colorSpace; - uchar* bitmapData = NULL; - - if( bpp == 1 ) { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceGray(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericGray ); -#endif - } - else if( bpp == 4 ) { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceRGB(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGBLinear ); -#endif - } - if( !colorSpace ) - return false; - - bitmapData = (uchar*)malloc( bpp * height * width ); - if( !bitmapData ) - { - CGColorSpaceRelease( colorSpace ); - return false; - } - - context = CGBitmapContextCreate( bitmapData, - width, - height, - 8, - bpp * width, - colorSpace, - (bpp == 1) ? kCGImageAlphaNone : - kCGImageAlphaNoneSkipLast ); - CGColorSpaceRelease( colorSpace ); - if( !context ) - { - free( bitmapData ); - return false; - } - - // Copy pixel information from data into bitmapData - if (bpp == 4) - { - int bitmapIndex = 0; - const uchar * base = data; - - for (int y = 0; y < height; y++) - { - const uchar * line = base + y * step; - - for (int x = 0; x < width; x++) - { - // Blue channel - bitmapData[bitmapIndex + 2] = line[0]; - // Green channel - bitmapData[bitmapIndex + 1] = line[1]; - // Red channel - bitmapData[bitmapIndex + 0] = line[2]; - - line += 3; - bitmapIndex += bpp; - } - } - } - else if (bpp == 1) - { - for (int y = 0; y < height; y++) - memcpy (bitmapData + y * width, data + y * step, width); - } - - // Turn the bitmap context into an imageRef - CGImageRef imageRef = CGBitmapContextCreateImage( context ); - CGContextRelease( context ); - if( !imageRef ) - { - free( bitmapData ); - return false; - } - - // Write the imageRef to a file based on the UTI - CFURLRef imageURLRef = CFURLCreateFromFileSystemRepresentation( NULL, - (const UInt8*)m_filename.c_str(), m_filename.size(), false ); - if( !imageURLRef ) - { - CGImageRelease( imageRef ); - free( bitmapData ); - return false; - } - - CGImageDestinationRef destRef = CGImageDestinationCreateWithURL( imageURLRef, - imageUTI, - 1, - NULL); - CFRelease( imageURLRef ); - if( !destRef ) - { - CGImageRelease( imageRef ); - free( bitmapData ); - fprintf(stderr, "!destRef\n"); - return false; - } - - CGImageDestinationAddImage(destRef, imageRef, NULL); - if( !CGImageDestinationFinalize(destRef) ) - { - fprintf(stderr, "Finalize failed\n"); - return false; - } - - CFRelease( destRef ); - CGImageRelease( imageRef ); - free( bitmapData ); - - return true; -} - -} - -#endif /* HAVE_IMAGEIO */ diff --git a/modules/highgui/src/grfmt_imageio.hpp b/modules/highgui/src/grfmt_imageio.hpp deleted file mode 100644 index 3eeb311..0000000 --- a/modules/highgui/src/grfmt_imageio.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * grfmt_imageio.h - * - * - * Created by Morgan Conbere on 5/17/07. - * - */ - -#ifndef _GRFMT_IMAGEIO_H_ -#define _GRFMT_IMAGEIO_H_ - -#ifdef HAVE_IMAGEIO - -#include "grfmt_base.hpp" -#include - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - -#include -#include - -#else - -#include - -#endif - -namespace cv -{ - -class ImageIODecoder : public BaseImageDecoder -{ -public: - - ImageIODecoder(); - ~ImageIODecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - size_t signatureLength() const; - bool checkSignature( const string& signature ) const; - - ImageDecoder newDecoder() const; - -protected: - - CGImageRef imageRef; -}; - -class ImageIOEncoder : public BaseImageEncoder -{ -public: - ImageIOEncoder(); - ~ImageIOEncoder(); - - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; -}; - -} - -#endif/*HAVE_IMAGEIO*/ - -#endif/*_GRFMT_IMAGEIO_H_*/ diff --git a/modules/highgui/src/grfmt_jpeg.cpp b/modules/highgui/src/grfmt_jpeg.cpp deleted file mode 100644 index bd21e2c..0000000 --- a/modules/highgui/src/grfmt_jpeg.cpp +++ /dev/null @@ -1,660 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "grfmt_jpeg.hpp" - -#ifdef HAVE_JPEG - -#ifdef _MSC_VER -//interaction between '_setjmp' and C++ object destruction is non-portable -#pragma warning(disable: 4611) -#endif - -#include -#include - -// the following defines are a hack to avoid multiple problems with frame ponter handling and setjmp -// see http://gcc.gnu.org/ml/gcc/2011-10/msg00324.html for some details -#define mingw_getsp(...) 0 -#define __builtin_frame_address(...) 0 - -#ifdef WIN32 - -#define XMD_H // prevent redefinition of INT32 -#undef FAR // prevent FAR redefinition - -#endif - -#if defined WIN32 && defined __GNUC__ -typedef unsigned char boolean; -#endif - -#undef FALSE -#undef TRUE - -extern "C" { -#include "jpeglib.h" -} - -namespace cv -{ - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable:4324) //structure was padded due to __declspec(align()) -#endif -struct JpegErrorMgr -{ - struct jpeg_error_mgr pub; - jmp_buf setjmp_buffer; -}; -#ifdef _MSC_VER -# pragma warning(pop) -#endif - -struct JpegSource -{ - struct jpeg_source_mgr pub; - int skip; -}; - -struct JpegState -{ - jpeg_decompress_struct cinfo; // IJG JPEG codec structure - JpegErrorMgr jerr; // error processing manager state - JpegSource source; // memory buffer source -}; - -/////////////////////// Error processing ///////////////////// - -METHODDEF(void) -stub(j_decompress_ptr) -{ -} - -METHODDEF(boolean) -fill_input_buffer(j_decompress_ptr) -{ - return FALSE; -} - -// emulating memory input stream - -METHODDEF(void) -skip_input_data(j_decompress_ptr cinfo, long num_bytes) -{ - JpegSource* source = (JpegSource*) cinfo->src; - - if( num_bytes > (long)source->pub.bytes_in_buffer ) - { - // We need to skip more data than we have in the buffer. - // This will force the JPEG library to suspend decoding. - source->skip = (int)(num_bytes - source->pub.bytes_in_buffer); - source->pub.next_input_byte += source->pub.bytes_in_buffer; - source->pub.bytes_in_buffer = 0; - } - else - { - // Skip portion of the buffer - source->pub.bytes_in_buffer -= num_bytes; - source->pub.next_input_byte += num_bytes; - source->skip = 0; - } -} - - -static void jpeg_buffer_src(j_decompress_ptr cinfo, JpegSource* source) -{ - cinfo->src = &source->pub; - - // Prepare for suspending reader - source->pub.init_source = stub; - source->pub.fill_input_buffer = fill_input_buffer; - source->pub.skip_input_data = skip_input_data; - source->pub.resync_to_restart = jpeg_resync_to_restart; - source->pub.term_source = stub; - source->pub.bytes_in_buffer = 0; // forces fill_input_buffer on first read - - source->skip = 0; -} - - -METHODDEF(void) -error_exit( j_common_ptr cinfo ) -{ - JpegErrorMgr* err_mgr = (JpegErrorMgr*)(cinfo->err); - - /* Return control to the setjmp point */ - longjmp( err_mgr->setjmp_buffer, 1 ); -} - - -/////////////////////// JpegDecoder /////////////////// - - -JpegDecoder::JpegDecoder() -{ - m_signature = "\xFF\xD8\xFF"; - m_state = 0; - m_f = 0; - m_buf_supported = true; -} - - -JpegDecoder::~JpegDecoder() -{ - close(); -} - - -void JpegDecoder::close() -{ - if( m_state ) - { - JpegState* state = (JpegState*)m_state; - jpeg_destroy_decompress( &state->cinfo ); - delete state; - m_state = 0; - } - - if( m_f ) - { - fclose( m_f ); - m_f = 0; - } - - m_width = m_height = 0; - m_type = -1; -} - -ImageDecoder JpegDecoder::newDecoder() const -{ - return new JpegDecoder; -} - -bool JpegDecoder::readHeader() -{ - bool result = false; - close(); - - JpegState* state = new JpegState; - m_state = state; - state->cinfo.err = jpeg_std_error(&state->jerr.pub); - state->jerr.pub.error_exit = error_exit; - - if( setjmp( state->jerr.setjmp_buffer ) == 0 ) - { - jpeg_create_decompress( &state->cinfo ); - - if( !m_buf.empty() ) - { - jpeg_buffer_src(&state->cinfo, &state->source); - state->source.pub.next_input_byte = m_buf.data; - state->source.pub.bytes_in_buffer = m_buf.cols*m_buf.rows*m_buf.elemSize(); - } - else - { - m_f = fopen( m_filename.c_str(), "rb" ); - if( m_f ) - jpeg_stdio_src( &state->cinfo, m_f ); - } - - if (state->cinfo.src != 0) - { - jpeg_read_header( &state->cinfo, TRUE ); - - m_width = state->cinfo.image_width; - m_height = state->cinfo.image_height; - m_type = state->cinfo.num_components > 1 ? CV_8UC3 : CV_8UC1; - result = true; - } - } - - if( !result ) - close(); - - return result; -} - -/*************************************************************************** - * following code is for supporting MJPEG image files - * based on a message of Laurent Pinchart on the video4linux mailing list - ***************************************************************************/ - -/* JPEG DHT Segment for YCrCb omitted from MJPEG data */ -static -unsigned char my_jpeg_odml_dht[0x1a4] = { - 0xff, 0xc4, 0x01, 0xa2, - - 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - - 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - - 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, - 0x04, 0x00, 0x00, 0x01, 0x7d, - 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, - 0x13, 0x51, 0x61, 0x07, - 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, - 0x15, 0x52, 0xd1, 0xf0, - 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, - 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x49, - 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, - 0x66, 0x67, 0x68, 0x69, - 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, - 0x86, 0x87, 0x88, 0x89, - 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, - 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, - 0xc2, 0xc3, 0xc4, 0xc5, - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, - 0xd9, 0xda, 0xe1, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, - 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa, - - 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, - 0x04, 0x00, 0x01, 0x02, 0x77, - 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, - 0x51, 0x07, 0x61, 0x71, - 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, - 0x23, 0x33, 0x52, 0xf0, - 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, - 0x18, 0x19, 0x1a, 0x26, - 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, - 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, - 0x65, 0x66, 0x67, 0x68, - 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, - 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, - 0xa2, 0xa3, 0xa4, 0xa5, - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, - 0xb9, 0xba, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xda, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, - 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa -}; - -/* - * Parse the DHT table. - * This code comes from jpeg6b (jdmarker.c). - */ -static -int my_jpeg_load_dht (struct jpeg_decompress_struct *info, unsigned char *dht, - JHUFF_TBL *ac_tables[], JHUFF_TBL *dc_tables[]) -{ - unsigned int length = (dht[2] << 8) + dht[3] - 2; - unsigned int pos = 4; - unsigned int count, i; - int index; - - JHUFF_TBL **hufftbl; - unsigned char bits[17]; - unsigned char huffval[256]; - - while (length > 16) - { - bits[0] = 0; - index = dht[pos++]; - count = 0; - for (i = 1; i <= 16; ++i) - { - bits[i] = dht[pos++]; - count += bits[i]; - } - length -= 17; - - if (count > 256 || count > length) - return -1; - - for (i = 0; i < count; ++i) - huffval[i] = dht[pos++]; - length -= count; - - if (index & 0x10) - { - index -= 0x10; - hufftbl = &ac_tables[index]; - } - else - hufftbl = &dc_tables[index]; - - if (index < 0 || index >= NUM_HUFF_TBLS) - return -1; - - if (*hufftbl == NULL) - *hufftbl = jpeg_alloc_huff_table ((j_common_ptr)info); - if (*hufftbl == NULL) - return -1; - - memcpy ((*hufftbl)->bits, bits, sizeof (*hufftbl)->bits); - memcpy ((*hufftbl)->huffval, huffval, sizeof (*hufftbl)->huffval); - } - - if (length != 0) - return -1; - - return 0; -} - -/*************************************************************************** - * end of code for supportting MJPEG image files - * based on a message of Laurent Pinchart on the video4linux mailing list - ***************************************************************************/ - -bool JpegDecoder::readData( Mat& img ) -{ - bool result = false; - int step = (int)img.step; - bool color = img.channels() > 1; - - if( m_state && m_width && m_height ) - { - jpeg_decompress_struct* cinfo = &((JpegState*)m_state)->cinfo; - JpegErrorMgr* jerr = &((JpegState*)m_state)->jerr; - JSAMPARRAY buffer = 0; - - if( setjmp( jerr->setjmp_buffer ) == 0 ) - { - /* check if this is a mjpeg image format */ - if ( cinfo->ac_huff_tbl_ptrs[0] == NULL && - cinfo->ac_huff_tbl_ptrs[1] == NULL && - cinfo->dc_huff_tbl_ptrs[0] == NULL && - cinfo->dc_huff_tbl_ptrs[1] == NULL ) - { - /* yes, this is a mjpeg image format, so load the correct - huffman table */ - my_jpeg_load_dht( cinfo, - my_jpeg_odml_dht, - cinfo->ac_huff_tbl_ptrs, - cinfo->dc_huff_tbl_ptrs ); - } - - if( color ) - { - if( cinfo->num_components != 4 ) - { - cinfo->out_color_space = JCS_RGB; - cinfo->out_color_components = 3; - } - else - { - cinfo->out_color_space = JCS_CMYK; - cinfo->out_color_components = 4; - } - } - else - { - if( cinfo->num_components != 4 ) - { - cinfo->out_color_space = JCS_GRAYSCALE; - cinfo->out_color_components = 1; - } - else - { - cinfo->out_color_space = JCS_CMYK; - cinfo->out_color_components = 4; - } - } - - jpeg_start_decompress( cinfo ); - - buffer = (*cinfo->mem->alloc_sarray)((j_common_ptr)cinfo, - JPOOL_IMAGE, m_width*4, 1 ); - - uchar* data = img.data; - for( ; m_height--; data += step ) - { - jpeg_read_scanlines( cinfo, buffer, 1 ); - if( color ) - { - if( cinfo->out_color_components == 3 ) - icvCvt_RGB2BGR_8u_C3R( buffer[0], 0, data, 0, cvSize(m_width,1) ); - else - icvCvt_CMYK2BGR_8u_C4C3R( buffer[0], 0, data, 0, cvSize(m_width,1) ); - } - else - { - if( cinfo->out_color_components == 1 ) - memcpy( data, buffer[0], m_width ); - else - icvCvt_CMYK2Gray_8u_C4C1R( buffer[0], 0, data, 0, cvSize(m_width,1) ); - } - } - result = true; - jpeg_finish_decompress( cinfo ); - } - } - - close(); - return result; -} - - -/////////////////////// JpegEncoder /////////////////// - -struct JpegDestination -{ - struct jpeg_destination_mgr pub; - vector *buf, *dst; -}; - -METHODDEF(void) -stub(j_compress_ptr) -{ -} - -METHODDEF(void) -term_destination (j_compress_ptr cinfo) -{ - JpegDestination* dest = (JpegDestination*)cinfo->dest; - size_t sz = dest->dst->size(), bufsz = dest->buf->size() - dest->pub.free_in_buffer; - if( bufsz > 0 ) - { - dest->dst->resize(sz + bufsz); - memcpy( &(*dest->dst)[0] + sz, &(*dest->buf)[0], bufsz); - } -} - -METHODDEF(boolean) -empty_output_buffer (j_compress_ptr cinfo) -{ - JpegDestination* dest = (JpegDestination*)cinfo->dest; - size_t sz = dest->dst->size(), bufsz = dest->buf->size(); - dest->dst->resize(sz + bufsz); - memcpy( &(*dest->dst)[0] + sz, &(*dest->buf)[0], bufsz); - - dest->pub.next_output_byte = &(*dest->buf)[0]; - dest->pub.free_in_buffer = bufsz; - return TRUE; -} - -static void jpeg_buffer_dest(j_compress_ptr cinfo, JpegDestination* destination) -{ - cinfo->dest = &destination->pub; - - destination->pub.init_destination = stub; - destination->pub.empty_output_buffer = empty_output_buffer; - destination->pub.term_destination = term_destination; -} - - -JpegEncoder::JpegEncoder() -{ - m_description = "JPEG files (*.jpeg;*.jpg;*.jpe)"; - m_buf_supported = true; -} - - -JpegEncoder::~JpegEncoder() -{ -} - -ImageEncoder JpegEncoder::newEncoder() const -{ - return new JpegEncoder; -} - -bool JpegEncoder::write( const Mat& img, const vector& params ) -{ - m_last_error.clear(); - - struct fileWrapper - { - FILE* f; - - fileWrapper() : f(0) {} - ~fileWrapper() { if(f) fclose(f); } - }; - bool result = false; - fileWrapper fw; - int width = img.cols, height = img.rows; - - vector out_buf(1 << 12); - AutoBuffer _buffer; - uchar* buffer; - - struct jpeg_compress_struct cinfo; - JpegErrorMgr jerr; - JpegDestination dest; - - jpeg_create_compress(&cinfo); - cinfo.err = jpeg_std_error(&jerr.pub); - jerr.pub.error_exit = error_exit; - - if( !m_buf ) - { - fw.f = fopen( m_filename.c_str(), "wb" ); - if( !fw.f ) - goto _exit_; - jpeg_stdio_dest( &cinfo, fw.f ); - } - else - { - dest.dst = m_buf; - dest.buf = &out_buf; - - jpeg_buffer_dest( &cinfo, &dest ); - - dest.pub.next_output_byte = &out_buf[0]; - dest.pub.free_in_buffer = out_buf.size(); - } - - if( setjmp( jerr.setjmp_buffer ) == 0 ) - { - cinfo.image_width = width; - cinfo.image_height = height; - - int _channels = img.channels(); - int channels = _channels > 1 ? 3 : 1; - cinfo.input_components = channels; - cinfo.in_color_space = channels > 1 ? JCS_RGB : JCS_GRAYSCALE; - - int quality = 95; - - for( size_t i = 0; i < params.size(); i += 2 ) - { - if( params[i] == CV_IMWRITE_JPEG_QUALITY ) - { - quality = params[i+1]; - quality = MIN(MAX(quality, 0), 100); - } - } - - jpeg_set_defaults( &cinfo ); - jpeg_set_quality( &cinfo, quality, - TRUE /* limit to baseline-JPEG values */ ); - jpeg_start_compress( &cinfo, TRUE ); - - if( channels > 1 ) - _buffer.allocate(width*channels); - buffer = _buffer; - - for( int y = 0; y < height; y++ ) - { - uchar *data = img.data + img.step*y, *ptr = data; - - if( _channels == 3 ) - { - icvCvt_BGR2RGB_8u_C3R( data, 0, buffer, 0, cvSize(width,1) ); - ptr = buffer; - } - else if( _channels == 4 ) - { - icvCvt_BGRA2BGR_8u_C4C3R( data, 0, buffer, 0, cvSize(width,1), 2 ); - ptr = buffer; - } - - jpeg_write_scanlines( &cinfo, &ptr, 1 ); - } - - jpeg_finish_compress( &cinfo ); - result = true; - } - -_exit_: - - if(!result) - { - char jmsg_buf[JMSG_LENGTH_MAX]; - jerr.pub.format_message((j_common_ptr)&cinfo, jmsg_buf); - m_last_error = jmsg_buf; - } - - jpeg_destroy_compress( &cinfo ); - - return result; -} - -} - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/grfmt_jpeg.hpp b/modules/highgui/src/grfmt_jpeg.hpp deleted file mode 100644 index 1a6d1ab..0000000 --- a/modules/highgui/src/grfmt_jpeg.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_JPEG_H_ -#define _GRFMT_JPEG_H_ - -#include "grfmt_base.hpp" -#include "bitstrm.hpp" - -#ifdef HAVE_JPEG - -// IJG-based Jpeg codec - -namespace cv -{ - -class JpegDecoder : public BaseImageDecoder -{ -public: - - JpegDecoder(); - virtual ~JpegDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - ImageDecoder newDecoder() const; - -protected: - - FILE* m_f; - void* m_state; -}; - - -class JpegEncoder : public BaseImageEncoder -{ -public: - JpegEncoder(); - virtual ~JpegEncoder(); - - bool write( const Mat& img, const vector& params ); - ImageEncoder newEncoder() const; -}; - -} - -#endif - -#endif/*_GRFMT_JPEG_H_*/ diff --git a/modules/highgui/src/grfmt_jpeg2000.cpp b/modules/highgui/src/grfmt_jpeg2000.cpp deleted file mode 100644 index 28818e3..0000000 --- a/modules/highgui/src/grfmt_jpeg2000.cpp +++ /dev/null @@ -1,523 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_JASPER - -#include "grfmt_jpeg2000.hpp" - -#ifdef WIN32 -#define JAS_WIN_MSVC_BUILD 1 -#ifdef __GNUC__ -#define HAVE_STDINT_H 1 -#endif -#endif - -#undef VERSION - -#include -// FIXME bad hack -#undef uchar -#undef ulong - -namespace cv -{ - -struct JasperInitializer -{ - JasperInitializer() { jas_init(); } - ~JasperInitializer() { jas_cleanup(); } -}; - -static JasperInitializer initialize_jasper; - - -/////////////////////// Jpeg2KDecoder /////////////////// - -Jpeg2KDecoder::Jpeg2KDecoder() -{ - m_signature = '\0' + string() + '\0' + string() + '\0' + string("\x0cjP \r\n\x87\n"); - m_stream = 0; - m_image = 0; -} - - -Jpeg2KDecoder::~Jpeg2KDecoder() -{ -} - -ImageDecoder Jpeg2KDecoder::newDecoder() const -{ - return new Jpeg2KDecoder; -} - -void Jpeg2KDecoder::close() -{ - if( m_stream ) - { - jas_stream_close( (jas_stream_t*)m_stream ); - m_stream = 0; - } - - if( m_image ) - { - jas_image_destroy( (jas_image_t*)m_image ); - m_image = 0; - } -} - - -bool Jpeg2KDecoder::readHeader() -{ - bool result = false; - - close(); - jas_stream_t* stream = jas_stream_fopen( m_filename.c_str(), "rb" ); - m_stream = stream; - - if( stream ) - { - jas_image_t* image = jas_image_decode( stream, -1, 0 ); - m_image = image; - if( image ) { - m_width = jas_image_width( image ); - m_height = jas_image_height( image ); - - int cntcmpts = 0; // count the known components - int numcmpts = jas_image_numcmpts( image ); - int depth = 0; - for( int i = 0; i < numcmpts; i++ ) - { - int depth_i = jas_image_cmptprec( image, i ); - depth = MAX(depth, depth_i); - if( jas_image_cmpttype( image, i ) > 2 ) - continue; - cntcmpts++; - } - - if( cntcmpts ) - { - m_type = CV_MAKETYPE(depth <= 8 ? CV_8U : CV_16U, cntcmpts > 1 ? 3 : 1); - result = true; - } - } - } - - if( !result ) - close(); - - return result; -} - - -bool Jpeg2KDecoder::readData( Mat& img ) -{ - bool result = false; - int color = img.channels() > 1; - uchar* data = img.data; - int step = (int)img.step; - jas_stream_t* stream = (jas_stream_t*)m_stream; - jas_image_t* image = (jas_image_t*)m_image; - - if( stream && image ) - { - bool convert; - int colorspace; - if( color ) - { - convert = (jas_image_clrspc( image ) != JAS_CLRSPC_SRGB); - colorspace = JAS_CLRSPC_SRGB; - } - else - { - convert = (jas_clrspc_fam( jas_image_clrspc( image ) ) != JAS_CLRSPC_FAM_GRAY); - colorspace = JAS_CLRSPC_SGRAY; // TODO GENGRAY or SGRAY? - } - - // convert to the desired colorspace - if( convert ) - { - jas_cmprof_t *clrprof = jas_cmprof_createfromclrspc( colorspace ); - if( clrprof ) - { - jas_image_t *_img = jas_image_chclrspc( image, clrprof, JAS_CMXFORM_INTENT_RELCLR ); - if( _img ) - { - jas_image_destroy( image ); - m_image = image = _img; - result = true; - } - else - fprintf(stderr, "JPEG 2000 LOADER ERROR: cannot convert colorspace\n"); - jas_cmprof_destroy( clrprof ); - } - else - fprintf(stderr, "JPEG 2000 LOADER ERROR: unable to create colorspace\n"); - } - else - result = true; - - if( result ) - { - int ncmpts; - int cmptlut[3]; - if( color ) - { - cmptlut[0] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_B ); - cmptlut[1] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_G ); - cmptlut[2] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_RGB_R ); - if( cmptlut[0] < 0 || cmptlut[1] < 0 || cmptlut[2] < 0 ) - result = false; - ncmpts = 3; - } - else - { - cmptlut[0] = jas_image_getcmptbytype( image, JAS_IMAGE_CT_GRAY_Y ); - if( cmptlut[0] < 0 ) - result = false; - ncmpts = 1; - } - - if( result ) - { - for( int i = 0; i < ncmpts; i++ ) - { - int maxval = 1 << jas_image_cmptprec( image, cmptlut[i] ); - int offset = jas_image_cmptsgnd( image, cmptlut[i] ) ? maxval / 2 : 0; - - int yend = jas_image_cmptbry( image, cmptlut[i] ); - int ystep = jas_image_cmptvstep( image, cmptlut[i] ); - int xend = jas_image_cmptbrx( image, cmptlut[i] ); - int xstep = jas_image_cmpthstep( image, cmptlut[i] ); - - jas_matrix_t *buffer = jas_matrix_create( yend / ystep, xend / xstep ); - if( buffer ) - { - if( !jas_image_readcmpt( image, cmptlut[i], 0, 0, xend / xstep, yend / ystep, buffer )) - { - if( img.depth() == CV_8U ) - result = readComponent8u( data + i, buffer, step, cmptlut[i], maxval, offset, ncmpts ); - else - result = readComponent16u( ((unsigned short *)data) + i, buffer, step / 2, cmptlut[i], maxval, offset, ncmpts ); - if( !result ) - { - i = ncmpts; - result = false; - } - } - jas_matrix_destroy( buffer ); - } - } - } - } - else - fprintf(stderr, "JPEG2000 LOADER ERROR: colorspace conversion failed\n" ); - } - - close(); - - return result; -} - - -bool Jpeg2KDecoder::readComponent8u( uchar *data, void *_buffer, - int step, int cmpt, - int maxval, int offset, int ncmpts ) -{ - jas_matrix_t* buffer = (jas_matrix_t*)_buffer; - jas_image_t* image = (jas_image_t*)m_image; - int xstart = jas_image_cmpttlx( image, cmpt ); - int xend = jas_image_cmptbrx( image, cmpt ); - int xstep = jas_image_cmpthstep( image, cmpt ); - int xoffset = jas_image_tlx( image ); - int ystart = jas_image_cmpttly( image, cmpt ); - int yend = jas_image_cmptbry( image, cmpt ); - int ystep = jas_image_cmptvstep( image, cmpt ); - int yoffset = jas_image_tly( image ); - int x, y, x1, y1, j; - int rshift = cvRound(std::log(maxval/256.)/std::log(2.)); - int lshift = MAX(0, -rshift); - rshift = MAX(0, rshift); - int delta = (rshift > 0 ? 1 << (rshift - 1) : 0) + offset; - - for( y = 0; y < yend - ystart; ) - { - jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 ); - uchar* dst = data + (y - yoffset) * step - xoffset; - - if( xstep == 1 ) - { - if( maxval == 256 && offset == 0 ) - for( x = 0; x < xend - xstart; x++ ) - { - int pix = pix_row[x]; - dst[x*ncmpts] = CV_CAST_8U(pix); - } - else - for( x = 0; x < xend - xstart; x++ ) - { - int pix = ((pix_row[x] + delta) >> rshift) << lshift; - dst[x*ncmpts] = CV_CAST_8U(pix); - } - } - else if( xstep == 2 && offset == 0 ) - for( x = 0, j = 0; x < xend - xstart; x += 2, j++ ) - { - int pix = ((pix_row[j] + delta) >> rshift) << lshift; - dst[x*ncmpts] = dst[(x+1)*ncmpts] = CV_CAST_8U(pix); - } - else - for( x = 0, j = 0; x < xend - xstart; j++ ) - { - int pix = ((pix_row[j] + delta) >> rshift) << lshift; - pix = CV_CAST_8U(pix); - for( x1 = x + xstep; x < x1; x++ ) - dst[x*ncmpts] = (uchar)pix; - } - y1 = y + ystep; - for( ++y; y < y1; y++, dst += step ) - for( x = 0; x < xend - xstart; x++ ) - dst[x*ncmpts + step] = dst[x*ncmpts]; - } - - return true; -} - - -bool Jpeg2KDecoder::readComponent16u( unsigned short *data, void *_buffer, - int step, int cmpt, - int maxval, int offset, int ncmpts ) -{ - jas_matrix_t* buffer = (jas_matrix_t*)_buffer; - jas_image_t* image = (jas_image_t*)m_image; - int xstart = jas_image_cmpttlx( image, cmpt ); - int xend = jas_image_cmptbrx( image, cmpt ); - int xstep = jas_image_cmpthstep( image, cmpt ); - int xoffset = jas_image_tlx( image ); - int ystart = jas_image_cmpttly( image, cmpt ); - int yend = jas_image_cmptbry( image, cmpt ); - int ystep = jas_image_cmptvstep( image, cmpt ); - int yoffset = jas_image_tly( image ); - int x, y, x1, y1, j; - int rshift = cvRound(std::log(maxval/65536.)/std::log(2.)); - int lshift = MAX(0, -rshift); - rshift = MAX(0, rshift); - int delta = (rshift > 0 ? 1 << (rshift - 1) : 0) + offset; - - for( y = 0; y < yend - ystart; ) - { - jas_seqent_t* pix_row = &jas_matrix_get( buffer, y / ystep, 0 ); - ushort* dst = data + (y - yoffset) * step - xoffset; - - if( xstep == 1 ) - { - if( maxval == 65536 && offset == 0 ) - for( x = 0; x < xend - xstart; x++ ) - { - int pix = pix_row[x]; - dst[x*ncmpts] = CV_CAST_16U(pix); - } - else - for( x = 0; x < xend - xstart; x++ ) - { - int pix = ((pix_row[x] + delta) >> rshift) << lshift; - dst[x*ncmpts] = CV_CAST_16U(pix); - } - } - else if( xstep == 2 && offset == 0 ) - for( x = 0, j = 0; x < xend - xstart; x += 2, j++ ) - { - int pix = ((pix_row[j] + delta) >> rshift) << lshift; - dst[x*ncmpts] = dst[(x+1)*ncmpts] = CV_CAST_16U(pix); - } - else - for( x = 0, j = 0; x < xend - xstart; j++ ) - { - int pix = ((pix_row[j] + delta) >> rshift) << lshift; - pix = CV_CAST_16U(pix); - for( x1 = x + xstep; x < x1; x++ ) - dst[x*ncmpts] = (ushort)pix; - } - y1 = y + ystep; - for( ++y; y < y1; y++, dst += step ) - for( x = 0; x < xend - xstart; x++ ) - dst[x*ncmpts + step] = dst[x*ncmpts]; - } - - return true; -} - - -/////////////////////// Jpeg2KEncoder /////////////////// - - -Jpeg2KEncoder::Jpeg2KEncoder() -{ - m_description = "JPEG-2000 files (*.jp2)"; -} - - -Jpeg2KEncoder::~Jpeg2KEncoder() -{ -} - -ImageEncoder Jpeg2KEncoder::newEncoder() const -{ - return new Jpeg2KEncoder; -} - -bool Jpeg2KEncoder::isFormatSupported( int depth ) const -{ - return depth == CV_8U || depth == CV_16U; -} - - -bool Jpeg2KEncoder::write( const Mat& _img, const vector& ) -{ - int width = _img.cols, height = _img.rows; - int depth = _img.depth(), channels = _img.channels(); - depth = depth == CV_8U ? 8 : 16; - - if( channels > 3 || channels < 1 ) - return false; - - jas_image_cmptparm_t component_info[3]; - for( int i = 0; i < channels; i++ ) - { - component_info[i].tlx = 0; - component_info[i].tly = 0; - component_info[i].hstep = 1; - component_info[i].vstep = 1; - component_info[i].width = width; - component_info[i].height = height; - component_info[i].prec = depth; - component_info[i].sgnd = 0; - } - jas_image_t *img = jas_image_create( channels, component_info, (channels == 1) ? JAS_CLRSPC_SGRAY : JAS_CLRSPC_SRGB ); - if( !img ) - return false; - - if(channels == 1) - jas_image_setcmpttype( img, 0, JAS_IMAGE_CT_GRAY_Y ); - else - { - jas_image_setcmpttype( img, 0, JAS_IMAGE_CT_RGB_B ); - jas_image_setcmpttype( img, 1, JAS_IMAGE_CT_RGB_G ); - jas_image_setcmpttype( img, 2, JAS_IMAGE_CT_RGB_R ); - } - - bool result; - if( depth == 8 ) - result = writeComponent8u( img, _img ); - else - result = writeComponent16u( img, _img ); - if( result ) - { - jas_stream_t *stream = jas_stream_fopen( m_filename.c_str(), "wb" ); - if( stream ) - { - result = !jas_image_encode( img, stream, jas_image_strtofmt( (char*)"jp2" ), (char*)"" ); - - jas_stream_close( stream ); - } - - } - jas_image_destroy( img ); - - return result; -} - - -bool Jpeg2KEncoder::writeComponent8u( void *__img, const Mat& _img ) -{ - jas_image_t* img = (jas_image_t*)__img; - int w = _img.cols, h = _img.rows, ncmpts = _img.channels(); - jas_matrix_t *row = jas_matrix_create( 1, w ); - if(!row) - return false; - - for( int y = 0; y < h; y++ ) - { - uchar* data = _img.data + _img.step*y; - for( int i = 0; i < ncmpts; i++ ) - { - for( int x = 0; x < w; x++) - jas_matrix_setv( row, x, data[x * ncmpts + i] ); - jas_image_writecmpt( img, i, 0, y, w, 1, row ); - } - } - - jas_matrix_destroy( row ); - return true; -} - - -bool Jpeg2KEncoder::writeComponent16u( void *__img, const Mat& _img ) -{ - jas_image_t* img = (jas_image_t*)__img; - int w = _img.cols, h = _img.rows, ncmpts = _img.channels(); - jas_matrix_t *row = jas_matrix_create( 1, w ); - if(!row) - return false; - - for( int y = 0; y < h; y++ ) - { - uchar* data = _img.data + _img.step*y; - for( int i = 0; i < ncmpts; i++ ) - { - for( int x = 0; x < w; x++) - jas_matrix_setv( row, x, data[x * ncmpts + i] ); - jas_image_writecmpt( img, i, 0, y, w, 1, row ); - } - } - - jas_matrix_destroy( row ); - - return true; -} - -} - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/grfmt_jpeg2000.hpp b/modules/highgui/src/grfmt_jpeg2000.hpp deleted file mode 100644 index 636a8c1..0000000 --- a/modules/highgui/src/grfmt_jpeg2000.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_JASPER_H_ -#define _GRFMT_JASPER_H_ - -#ifdef HAVE_JASPER - -#include "grfmt_base.hpp" - -namespace cv -{ - -class Jpeg2KDecoder : public BaseImageDecoder -{ -public: - - Jpeg2KDecoder(); - virtual ~Jpeg2KDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - ImageDecoder newDecoder() const; - -protected: - bool readComponent8u( uchar *data, void *buffer, int step, int cmpt, - int maxval, int offset, int ncmpts ); - bool readComponent16u( unsigned short *data, void *buffer, int step, int cmpt, - int maxval, int offset, int ncmpts ); - - void *m_stream; - void *m_image; -}; - - -class Jpeg2KEncoder : public BaseImageEncoder -{ -public: - Jpeg2KEncoder(); - virtual ~Jpeg2KEncoder(); - - bool isFormatSupported( int depth ) const; - bool write( const Mat& img, const vector& params ); - ImageEncoder newEncoder() const; - -protected: - bool writeComponent8u( void *img, const Mat& _img ); - bool writeComponent16u( void *img, const Mat& _img ); -}; - -} - -#endif - -#endif/*_GRFMT_JASPER_H_*/ diff --git a/modules/highgui/src/grfmt_png.cpp b/modules/highgui/src/grfmt_png.cpp deleted file mode 100644 index bbbfb94..0000000 --- a/modules/highgui/src/grfmt_png.cpp +++ /dev/null @@ -1,449 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_PNG - -/****************************************************************************************\ - This part of the file implements PNG codec on base of libpng library, - in particular, this code is based on example.c from libpng - (see otherlibs/_graphics/readme.txt for copyright notice) - and png2bmp sample from libpng distribution (Copyright (C) 1999-2001 MIYASAKA Masaru) -\****************************************************************************************/ - -#ifndef _LFS64_LARGEFILE -# define _LFS64_LARGEFILE 0 -#endif -#ifndef _FILE_OFFSET_BITS -# define _FILE_OFFSET_BITS 0 -#endif - -#ifdef HAVE_LIBPNG_PNG_H -#include -#else -#include -#endif -#include - -#include "grfmt_png.hpp" - -#if defined _MSC_VER && _MSC_VER >= 1200 - // interaction between '_setjmp' and C++ object destruction is non-portable - #pragma warning( disable: 4611 ) -#endif - -// the following defines are a hack to avoid multiple problems with frame ponter handling and setjmp -// see http://gcc.gnu.org/ml/gcc/2011-10/msg00324.html for some details -#define mingw_getsp(...) 0 -#define __builtin_frame_address(...) 0 - -namespace cv -{ - -/////////////////////// PngDecoder /////////////////// - -PngDecoder::PngDecoder() -{ - m_signature = "\x89\x50\x4e\x47\xd\xa\x1a\xa"; - m_color_type = 0; - m_png_ptr = 0; - m_info_ptr = m_end_info = 0; - m_f = 0; - m_buf_supported = true; - m_buf_pos = 0; -} - - -PngDecoder::~PngDecoder() -{ - close(); -} - -ImageDecoder PngDecoder::newDecoder() const -{ - return new PngDecoder; -} - -void PngDecoder::close() -{ - if( m_f ) - { - fclose( m_f ); - m_f = 0; - } - - if( m_png_ptr ) - { - png_structp png_ptr = (png_structp)m_png_ptr; - png_infop info_ptr = (png_infop)m_info_ptr; - png_infop end_info = (png_infop)m_end_info; - png_destroy_read_struct( &png_ptr, &info_ptr, &end_info ); - m_png_ptr = m_info_ptr = m_end_info = 0; - } -} - - -void PngDecoder::readDataFromBuf( void* _png_ptr, uchar* dst, size_t size ) -{ - png_structp png_ptr = (png_structp)_png_ptr; - PngDecoder* decoder = (PngDecoder*)(png_get_io_ptr(png_ptr)); - CV_Assert( decoder ); - const Mat& buf = decoder->m_buf; - if( decoder->m_buf_pos + size > buf.cols*buf.rows*buf.elemSize() ) - { - png_error(png_ptr, "PNG input buffer is incomplete"); - return; - } - memcpy( dst, &decoder->m_buf.data[decoder->m_buf_pos], size ); - decoder->m_buf_pos += size; -} - -bool PngDecoder::readHeader() -{ - bool result = false; - close(); - - png_structp png_ptr = png_create_read_struct( PNG_LIBPNG_VER_STRING, 0, 0, 0 ); - - if( png_ptr ) - { - png_infop info_ptr = png_create_info_struct( png_ptr ); - png_infop end_info = png_create_info_struct( png_ptr ); - - m_png_ptr = png_ptr; - m_info_ptr = info_ptr; - m_end_info = end_info; - m_buf_pos = 0; - - if( info_ptr && end_info ) - { - if( setjmp( png_jmpbuf( png_ptr ) ) == 0 ) - { - if( !m_buf.empty() ) - png_set_read_fn(png_ptr, this, (png_rw_ptr)readDataFromBuf ); - else - { - m_f = fopen( m_filename.c_str(), "rb" ); - if( m_f ) - png_init_io( png_ptr, m_f ); - } - - if( !m_buf.empty() || m_f ) - { - png_uint_32 wdth, hght; - int bit_depth, color_type, num_trans=0; - png_bytep trans; - png_color_16p trans_values; - - png_read_info( png_ptr, info_ptr ); - - png_get_IHDR( png_ptr, info_ptr, &wdth, &hght, - &bit_depth, &color_type, 0, 0, 0 ); - - m_width = (int)wdth; - m_height = (int)hght; - m_color_type = color_type; - m_bit_depth = bit_depth; - - if( bit_depth <= 8 || bit_depth == 16 ) - { - switch(color_type) - { - case PNG_COLOR_TYPE_RGB: - m_type = CV_8UC3; - break; - case PNG_COLOR_TYPE_PALETTE: - png_get_tRNS( png_ptr, info_ptr, &trans, &num_trans, &trans_values); - //Check if there is a transparency value in the palette - if ( num_trans > 0 ) - m_type = CV_8UC4; - else - m_type = CV_8UC3; - break; - case PNG_COLOR_TYPE_RGB_ALPHA: - m_type = CV_8UC4; - break; - default: - m_type = CV_8UC1; - } - if( bit_depth == 16 ) - m_type = CV_MAKETYPE(CV_16U, CV_MAT_CN(m_type)); - result = true; - } - } - } - } - } - - if( !result ) - close(); - - return result; -} - - -bool PngDecoder::readData( Mat& img ) -{ - bool result = false; - AutoBuffer _buffer(m_height); - uchar** buffer = _buffer; - int color = img.channels() > 1; - uchar* data = img.data; - int step = (int)img.step; - - if( m_png_ptr && m_info_ptr && m_end_info && m_width && m_height ) - { - png_structp png_ptr = (png_structp)m_png_ptr; - png_infop info_ptr = (png_infop)m_info_ptr; - png_infop end_info = (png_infop)m_end_info; - - if( setjmp( png_jmpbuf ( png_ptr ) ) == 0 ) - { - int y; - - if( img.depth() == CV_8U && m_bit_depth == 16 ) - png_set_strip_16( png_ptr ); - else if( !isBigEndian() ) - png_set_swap( png_ptr ); - - if(img.channels() < 4) - { - /* observation: png_read_image() writes 400 bytes beyond - * end of data when reading a 400x118 color png - * "mpplus_sand.png". OpenCV crashes even with demo - * programs. Looking at the loaded image I'd say we get 4 - * bytes per pixel instead of 3 bytes per pixel. Test - * indicate that it is a good idea to always ask for - * stripping alpha.. 18.11.2004 Axel Walthelm - */ - png_set_strip_alpha( png_ptr ); - } - - if( m_color_type == PNG_COLOR_TYPE_PALETTE ) - png_set_palette_to_rgb( png_ptr ); - - if( m_color_type == PNG_COLOR_TYPE_GRAY && m_bit_depth < 8 ) -#if (PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE >= 10209) || \ - (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR == 0 && PNG_LIBPNG_VER_RELEASE >= 18) - png_set_expand_gray_1_2_4_to_8( png_ptr ); -#else - png_set_gray_1_2_4_to_8( png_ptr ); -#endif - - if( CV_MAT_CN(m_type) > 1 && color ) - png_set_bgr( png_ptr ); // convert RGB to BGR - else if( color ) - png_set_gray_to_rgb( png_ptr ); // Gray->RGB - else - png_set_rgb_to_gray( png_ptr, 1, 0.299, 0.587 ); // RGB->Gray - - png_set_interlace_handling( png_ptr ); - png_read_update_info( png_ptr, info_ptr ); - - for( y = 0; y < m_height; y++ ) - buffer[y] = data + y*step; - - png_read_image( png_ptr, buffer ); - png_read_end( png_ptr, end_info ); - - result = true; - } - } - - close(); - return result; -} - - -/////////////////////// PngEncoder /////////////////// - - -PngEncoder::PngEncoder() -{ - m_description = "Portable Network Graphics files (*.png)"; - m_buf_supported = true; -} - - -PngEncoder::~PngEncoder() -{ -} - - -bool PngEncoder::isFormatSupported( int depth ) const -{ - return depth == CV_8U || depth == CV_16U; -} - -ImageEncoder PngEncoder::newEncoder() const -{ - return new PngEncoder; -} - - -void PngEncoder::writeDataToBuf(void* _png_ptr, uchar* src, size_t size) -{ - if( size == 0 ) - return; - png_structp png_ptr = (png_structp)_png_ptr; - PngEncoder* encoder = (PngEncoder*)(png_get_io_ptr(png_ptr)); - CV_Assert( encoder && encoder->m_buf ); - size_t cursz = encoder->m_buf->size(); - encoder->m_buf->resize(cursz + size); - memcpy( &(*encoder->m_buf)[cursz], src, size ); -} - - -void PngEncoder::flushBuf(void*) -{ -} - -bool PngEncoder::write( const Mat& img, const vector& params ) -{ - png_structp png_ptr = png_create_write_struct( PNG_LIBPNG_VER_STRING, 0, 0, 0 ); - png_infop info_ptr = 0; - FILE* f = 0; - int y, width = img.cols, height = img.rows; - int depth = img.depth(), channels = img.channels(); - bool result = false; - AutoBuffer buffer; - - if( depth != CV_8U && depth != CV_16U ) - return false; - - if( png_ptr ) - { - info_ptr = png_create_info_struct( png_ptr ); - - if( info_ptr ) - { - if( setjmp( png_jmpbuf ( png_ptr ) ) == 0 ) - { - if( m_buf ) - { - png_set_write_fn(png_ptr, this, - (png_rw_ptr)writeDataToBuf, (png_flush_ptr)flushBuf); - } - else - { - f = fopen( m_filename.c_str(), "wb" ); - if( f ) - png_init_io( png_ptr, f ); - } - - int compression_level = -1; // Invalid value to allow setting 0-9 as valid - int compression_strategy = Z_RLE; // Default strategy - bool isBilevel = false; - - for( size_t i = 0; i < params.size(); i += 2 ) - { - if( params[i] == CV_IMWRITE_PNG_COMPRESSION ) - { - compression_level = params[i+1]; - compression_level = MIN(MAX(compression_level, 0), Z_BEST_COMPRESSION); - } - if( params[i] == CV_IMWRITE_PNG_STRATEGY ) - { - compression_strategy = params[i+1]; - compression_strategy = MIN(MAX(compression_strategy, 0), Z_FIXED); - } - if( params[i] == CV_IMWRITE_PNG_BILEVEL ) - { - isBilevel = params[i+1] != 0; - } - } - - if( m_buf || f ) - { - if( compression_level >= 0 ) - { - png_set_compression_level( png_ptr, compression_level ); - } - else - { - // tune parameters for speed - // (see http://wiki.linuxquestions.org/wiki/Libpng) - png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_FILTER_SUB); - png_set_compression_level(png_ptr, Z_BEST_SPEED); - } - png_set_compression_strategy(png_ptr, compression_strategy); - - png_set_IHDR( png_ptr, info_ptr, width, height, depth == CV_8U ? isBilevel?1:8 : 16, - channels == 1 ? PNG_COLOR_TYPE_GRAY : - channels == 3 ? PNG_COLOR_TYPE_RGB : PNG_COLOR_TYPE_RGBA, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, - PNG_FILTER_TYPE_DEFAULT ); - - png_write_info( png_ptr, info_ptr ); - - if (isBilevel) - png_set_packing(png_ptr); - - png_set_bgr( png_ptr ); - if( !isBigEndian() ) - png_set_swap( png_ptr ); - - buffer.allocate(height); - for( y = 0; y < height; y++ ) - buffer[y] = img.data + y*img.step; - - png_write_image( png_ptr, buffer ); - png_write_end( png_ptr, info_ptr ); - - result = true; - } - } - } - } - - png_destroy_write_struct( &png_ptr, &info_ptr ); - if(f) fclose( f ); - - return result; -} - -} - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/grfmt_png.hpp b/modules/highgui/src/grfmt_png.hpp deleted file mode 100644 index afcca84..0000000 --- a/modules/highgui/src/grfmt_png.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_PNG_H_ -#define _GRFMT_PNG_H_ - -#ifdef HAVE_PNG - -#include "grfmt_base.hpp" -#include "bitstrm.hpp" - -namespace cv -{ - -class PngDecoder : public BaseImageDecoder -{ -public: - - PngDecoder(); - virtual ~PngDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - ImageDecoder newDecoder() const; - -protected: - - static void readDataFromBuf(void* png_ptr, uchar* dst, size_t size); - - int m_bit_depth; - void* m_png_ptr; // pointer to decompression structure - void* m_info_ptr; // pointer to image information structure - void* m_end_info; // pointer to one more image information structure - FILE* m_f; - int m_color_type; - size_t m_buf_pos; -}; - - -class PngEncoder : public BaseImageEncoder -{ -public: - PngEncoder(); - virtual ~PngEncoder(); - - bool isFormatSupported( int depth ) const; - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; - -protected: - static void writeDataToBuf(void* png_ptr, uchar* src, size_t size); - static void flushBuf(void* png_ptr); -}; - -} - -#endif - -#endif/*_GRFMT_PNG_H_*/ diff --git a/modules/highgui/src/grfmt_pxm.cpp b/modules/highgui/src/grfmt_pxm.cpp deleted file mode 100644 index f73bbb1..0000000 --- a/modules/highgui/src/grfmt_pxm.cpp +++ /dev/null @@ -1,513 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "utils.hpp" -#include "grfmt_pxm.hpp" - -namespace cv -{ - -///////////////////////// P?M reader ////////////////////////////// - -static int ReadNumber( RLByteStream& strm, int maxdigits ) -{ - int code; - int val = 0; - int digits = 0; - - code = strm.getByte(); - - if( !isdigit(code)) - { - do - { - if( code == '#' ) - { - do - { - code = strm.getByte(); - } - while( code != '\n' && code != '\r' ); - } - - code = strm.getByte(); - - while( isspace(code)) - code = strm.getByte(); - } - while( !isdigit( code )); - } - - do - { - val = val*10 + code - '0'; - if( ++digits >= maxdigits ) break; - code = strm.getByte(); - } - while( isdigit(code)); - - return val; -} - - -PxMDecoder::PxMDecoder() -{ - m_offset = -1; - m_buf_supported = true; -} - - -PxMDecoder::~PxMDecoder() -{ - close(); -} - -size_t PxMDecoder::signatureLength() const -{ - return 3; -} - -bool PxMDecoder::checkSignature( const string& signature ) const -{ - return signature.size() >= 3 && signature[0] == 'P' && - '1' <= signature[1] && signature[1] <= '6' && - isspace(signature[2]); -} - -ImageDecoder PxMDecoder::newDecoder() const -{ - return new PxMDecoder; -} - -void PxMDecoder::close() -{ - m_strm.close(); -} - - -bool PxMDecoder::readHeader() -{ - bool result = false; - - if( !m_buf.empty() ) - { - if( !m_strm.open(m_buf) ) - return false; - } - else if( !m_strm.open( m_filename )) - return false; - - try - { - int code = m_strm.getByte(); - if( code != 'P' ) - throw RBS_BAD_HEADER; - - code = m_strm.getByte(); - switch( code ) - { - case '1': case '4': m_bpp = 1; break; - case '2': case '5': m_bpp = 8; break; - case '3': case '6': m_bpp = 24; break; - default: throw RBS_BAD_HEADER; - } - - m_binary = code >= '4'; - m_type = m_bpp > 8 ? CV_8UC3 : CV_8UC1; - - m_width = ReadNumber( m_strm, INT_MAX ); - m_height = ReadNumber( m_strm, INT_MAX ); - - m_maxval = m_bpp == 1 ? 1 : ReadNumber( m_strm, INT_MAX ); - if( m_maxval > 65535 ) - throw RBS_BAD_HEADER; - - //if( m_maxval > 255 ) m_binary = false; nonsense - if( m_maxval > 255 ) - m_type = CV_MAKETYPE(CV_16U, CV_MAT_CN(m_type)); - - if( m_width > 0 && m_height > 0 && m_maxval > 0 && m_maxval < (1 << 16)) - { - m_offset = m_strm.getPos(); - result = true; - } - } - catch(...) - { - } - - if( !result ) - { - m_offset = -1; - m_width = m_height = -1; - m_strm.close(); - } - return result; -} - - -bool PxMDecoder::readData( Mat& img ) -{ - int color = img.channels() > 1; - uchar* data = img.data; - int step = (int)img.step; - PaletteEntry palette[256]; - bool result = false; - int bit_depth = CV_ELEM_SIZE1(m_type)*8; - int src_pitch = (m_width*m_bpp*bit_depth/8 + 7)/8; - int nch = CV_MAT_CN(m_type); - int width3 = m_width*nch; - int i, x, y; - - if( m_offset < 0 || !m_strm.isOpened()) - return false; - - AutoBuffer _src(src_pitch + 32); - uchar* src = _src; - AutoBuffer _gray_palette; - uchar* gray_palette = _gray_palette; - - // create LUT for converting colors - if( bit_depth == 8 ) - { - _gray_palette.allocate(m_maxval + 1); - gray_palette = _gray_palette; - - for( i = 0; i <= m_maxval; i++ ) - gray_palette[i] = (uchar)((i*255/m_maxval)^(m_bpp == 1 ? 255 : 0)); - - FillGrayPalette( palette, m_bpp==1 ? 1 : 8 , m_bpp == 1 ); - } - - try - { - m_strm.setPos( m_offset ); - - switch( m_bpp ) - { - ////////////////////////// 1 BPP ///////////////////////// - case 1: - if( !m_binary ) - { - for( y = 0; y < m_height; y++, data += step ) - { - for( x = 0; x < m_width; x++ ) - src[x] = ReadNumber( m_strm, 1 ) != 0; - - if( color ) - FillColorRow8( data, src, m_width, palette ); - else - FillGrayRow8( data, src, m_width, gray_palette ); - } - } - else - { - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - - if( color ) - FillColorRow1( data, src, m_width, palette ); - else - FillGrayRow1( data, src, m_width, gray_palette ); - } - } - result = true; - break; - - ////////////////////////// 8 BPP ///////////////////////// - case 8: - case 24: - for( y = 0; y < m_height; y++, data += step ) - { - if( !m_binary ) - { - for( x = 0; x < width3; x++ ) - { - int code = ReadNumber( m_strm, INT_MAX ); - if( (unsigned)code > (unsigned)m_maxval ) code = m_maxval; - if( bit_depth == 8 ) - src[x] = gray_palette[code]; - else - ((ushort *)src)[x] = (ushort)code; - } - } - else - { - m_strm.getBytes( src, src_pitch ); - if( bit_depth == 16 && !isBigEndian() ) - { - for( x = 0; x < width3; x++ ) - { - uchar v = src[x * 2]; - src[x * 2] = src[x * 2 + 1]; - src[x * 2 + 1] = v; - } - } - } - - if( img.depth() == CV_8U && bit_depth == 16 ) - { - for( x = 0; x < width3; x++ ) - { - int v = ((ushort *)src)[x]; - src[x] = (uchar)(v >> 8); - } - } - - if( m_bpp == 8 ) // image has one channel - { - if( color ) - { - if( img.depth() == CV_8U ) { - uchar *d = data, *s = src, *end = src + m_width; - for( ; s < end; d += 3, s++) - d[0] = d[1] = d[2] = *s; - } else { - ushort *d = (ushort *)data, *s = (ushort *)src, *end = ((ushort *)src) + m_width; - for( ; s < end; s++, d += 3) - d[0] = d[1] = d[2] = *s; - } - } - else - memcpy( data, src, m_width*(bit_depth/8) ); - } - else - { - if( color ) - { - if( img.depth() == CV_8U ) - icvCvt_RGB2BGR_8u_C3R( src, 0, data, 0, cvSize(m_width,1) ); - else - icvCvt_RGB2BGR_16u_C3R( (ushort *)src, 0, (ushort *)data, 0, cvSize(m_width,1) ); - } - else if( img.depth() == CV_8U ) - icvCvt_BGR2Gray_8u_C3C1R( src, 0, data, 0, cvSize(m_width,1), 2 ); - else - icvCvt_BGRA2Gray_16u_CnC1R( (ushort *)src, 0, (ushort *)data, 0, cvSize(m_width,1), 3, 2 ); - } - } - result = true; - break; - default: - assert(0); - } - } - catch(...) - { - } - - return result; -} - - -////////////////////////////////////////////////////////////////////////////////////////// - -PxMEncoder::PxMEncoder() -{ - m_description = "Portable image format (*.pbm;*.pgm;*.ppm;*.pxm;*.pnm)"; - m_buf_supported = true; -} - - -PxMEncoder::~PxMEncoder() -{ -} - - -ImageEncoder PxMEncoder::newEncoder() const -{ - return new PxMEncoder; -} - - -bool PxMEncoder::isFormatSupported( int depth ) const -{ - return depth == CV_8U || depth == CV_16U; -} - - -bool PxMEncoder::write( const Mat& img, const vector& params ) -{ - bool isBinary = true; - - int width = img.cols, height = img.rows; - int _channels = img.channels(), depth = (int)img.elemSize1()*8; - int channels = _channels > 1 ? 3 : 1; - int fileStep = width*(int)img.elemSize(); - int x, y; - - for( size_t i = 0; i < params.size(); i += 2 ) - if( params[i] == CV_IMWRITE_PXM_BINARY ) - isBinary = params[i+1] != 0; - - WLByteStream strm; - - if( m_buf ) - { - if( !strm.open(*m_buf) ) - return false; - int t = CV_MAKETYPE(img.depth(), channels); - m_buf->reserve( alignSize(256 + (isBinary ? fileStep*height : - ((t == CV_8UC1 ? 4 : t == CV_8UC3 ? 4*3+2 : - t == CV_16UC1 ? 6 : 6*3+2)*width+1)*height), 256)); - } - else if( !strm.open(m_filename) ) - return false; - - int lineLength; - int bufferSize = 128; // buffer that should fit a header - - if( isBinary ) - lineLength = width * (int)img.elemSize(); - else - lineLength = (6 * channels + (channels > 1 ? 2 : 0)) * width + 32; - - if( bufferSize < lineLength ) - bufferSize = lineLength; - - AutoBuffer _buffer(bufferSize); - char* buffer = _buffer; - - // write header; - sprintf( buffer, "P%c\n%d %d\n%d\n", - '2' + (channels > 1 ? 1 : 0) + (isBinary ? 3 : 0), - width, height, (1 << depth) - 1 ); - - strm.putBytes( buffer, (int)strlen(buffer) ); - - for( y = 0; y < height; y++ ) - { - uchar* data = img.data + img.step*y; - if( isBinary ) - { - if( _channels == 3 ) - { - if( depth == 8 ) - icvCvt_BGR2RGB_8u_C3R( (uchar*)data, 0, - (uchar*)buffer, 0, cvSize(width,1) ); - else - icvCvt_BGR2RGB_16u_C3R( (ushort*)data, 0, - (ushort*)buffer, 0, cvSize(width,1) ); - } - - // swap endianness if necessary - if( depth == 16 && !isBigEndian() ) - { - if( _channels == 1 ) - memcpy( buffer, data, fileStep ); - for( x = 0; x < width*channels*2; x += 2 ) - { - uchar v = buffer[x]; - buffer[x] = buffer[x + 1]; - buffer[x + 1] = v; - } - } - strm.putBytes( (channels > 1 || depth > 8) ? buffer : (char*)data, fileStep ); - } - else - { - char* ptr = buffer; - - if( channels > 1 ) - { - if( depth == 8 ) - { - for( x = 0; x < width*channels; x += channels ) - { - sprintf( ptr, "% 4d", data[x + 2] ); - ptr += 4; - sprintf( ptr, "% 4d", data[x + 1] ); - ptr += 4; - sprintf( ptr, "% 4d", data[x] ); - ptr += 4; - *ptr++ = ' '; - *ptr++ = ' '; - } - } - else - { - for( x = 0; x < width*channels; x += channels ) - { - sprintf( ptr, "% 6d", ((ushort *)data)[x + 2] ); - ptr += 6; - sprintf( ptr, "% 6d", ((ushort *)data)[x + 1] ); - ptr += 6; - sprintf( ptr, "% 6d", ((ushort *)data)[x] ); - ptr += 6; - *ptr++ = ' '; - *ptr++ = ' '; - } - } - } - else - { - if( depth == 8 ) - { - for( x = 0; x < width; x++ ) - { - sprintf( ptr, "% 4d", data[x] ); - ptr += 4; - } - } - else - { - for( x = 0; x < width; x++ ) - { - sprintf( ptr, "% 6d", ((ushort *)data)[x] ); - ptr += 6; - } - } - } - - *ptr++ = '\n'; - - strm.putBytes( buffer, (int)(ptr - buffer) ); - } - } - - strm.close(); - return true; -} - -} diff --git a/modules/highgui/src/grfmt_pxm.hpp b/modules/highgui/src/grfmt_pxm.hpp deleted file mode 100644 index 289275a..0000000 --- a/modules/highgui/src/grfmt_pxm.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_PxM_H_ -#define _GRFMT_PxM_H_ - -#include "grfmt_base.hpp" -#include "bitstrm.hpp" - -namespace cv -{ - -class PxMDecoder : public BaseImageDecoder -{ -public: - - PxMDecoder(); - virtual ~PxMDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - size_t signatureLength() const; - bool checkSignature( const string& signature ) const; - ImageDecoder newDecoder() const; - -protected: - - RLByteStream m_strm; - PaletteEntry m_palette[256]; - int m_bpp; - int m_offset; - bool m_binary; - int m_maxval; -}; - - -class PxMEncoder : public BaseImageEncoder -{ -public: - PxMEncoder(); - virtual ~PxMEncoder(); - - bool isFormatSupported( int depth ) const; - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; -}; - -} - -#endif/*_GRFMT_PxM_H_*/ diff --git a/modules/highgui/src/grfmt_sunras.cpp b/modules/highgui/src/grfmt_sunras.cpp deleted file mode 100644 index 19f8db4..0000000 --- a/modules/highgui/src/grfmt_sunras.cpp +++ /dev/null @@ -1,425 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "grfmt_sunras.hpp" - -namespace cv -{ - -static const char* fmtSignSunRas = "\x59\xA6\x6A\x95"; - -/************************ Sun Raster reader *****************************/ - -SunRasterDecoder::SunRasterDecoder() -{ - m_offset = -1; - m_signature = fmtSignSunRas; -} - - -SunRasterDecoder::~SunRasterDecoder() -{ -} - -ImageDecoder SunRasterDecoder::newDecoder() const -{ - return new SunRasterDecoder; -} - -void SunRasterDecoder::close() -{ - m_strm.close(); -} - - -bool SunRasterDecoder::readHeader() -{ - bool result = false; - - if( !m_strm.open( m_filename )) return false; - - try - { - m_strm.skip( 4 ); - m_width = m_strm.getDWord(); - m_height = m_strm.getDWord(); - m_bpp = m_strm.getDWord(); - int palSize = 3*(1 << m_bpp); - - m_strm.skip( 4 ); - m_encoding = (SunRasType)m_strm.getDWord(); - m_maptype = (SunRasMapType)m_strm.getDWord(); - m_maplength = m_strm.getDWord(); - - if( m_width > 0 && m_height > 0 && - (m_bpp == 1 || m_bpp == 8 || m_bpp == 24 || m_bpp == 32) && - (m_encoding == RAS_OLD || m_encoding == RAS_STANDARD || - (m_type == RAS_BYTE_ENCODED && m_bpp == 8) || m_type == RAS_FORMAT_RGB) && - ((m_maptype == RMT_NONE && m_maplength == 0) || - (m_maptype == RMT_EQUAL_RGB && m_maplength <= palSize && m_bpp <= 8))) - { - memset( m_palette, 0, sizeof(m_palette)); - - if( m_maplength != 0 ) - { - uchar buffer[256*3]; - - if( m_strm.getBytes( buffer, m_maplength ) == m_maplength ) - { - int i; - palSize = m_maplength/3; - - for( i = 0; i < palSize; i++ ) - { - m_palette[i].b = buffer[i + 2*palSize]; - m_palette[i].g = buffer[i + palSize]; - m_palette[i].r = buffer[i]; - m_palette[i].a = 0; - } - - m_type = IsColorPalette( m_palette, m_bpp ) ? CV_8UC3 : CV_8UC1; - m_offset = m_strm.getPos(); - - assert( m_offset == 32 + m_maplength ); - result = true; - } - } - else - { - m_type = m_bpp > 8 ? CV_8UC3 : CV_8UC1; - - if( CV_MAT_CN(m_type) == 1 ) - FillGrayPalette( m_palette, m_bpp ); - - m_offset = m_strm.getPos(); - - assert( m_offset == 32 + m_maplength ); - result = true; - } - } - } - catch(...) - { - } - - if( !result ) - { - m_offset = -1; - m_width = m_height = -1; - m_strm.close(); - } - return result; -} - - -bool SunRasterDecoder::readData( Mat& img ) -{ - int color = img.channels() > 1; - uchar* data = img.data; - int step = (int)img.step; - uchar gray_palette[256]; - bool result = false; - int src_pitch = ((m_width*m_bpp + 7)/8 + 1) & -2; - int nch = color ? 3 : 1; - int width3 = m_width*nch; - int y; - - if( m_offset < 0 || !m_strm.isOpened()) - return false; - - AutoBuffer _src(src_pitch + 32); - uchar* src = _src; - AutoBuffer _bgr(m_width*3 + 32); - uchar* bgr = _bgr; - - if( !color && m_maptype == RMT_EQUAL_RGB ) - CvtPaletteToGray( m_palette, gray_palette, 1 << m_bpp ); - - try - { - m_strm.setPos( m_offset ); - - switch( m_bpp ) - { - /************************* 1 BPP ************************/ - case 1: - if( m_type != RAS_BYTE_ENCODED ) - { - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( color ) - FillColorRow1( data, src, m_width, m_palette ); - else - FillGrayRow1( data, src, m_width, gray_palette ); - } - result = true; - } - else - { - uchar* line_end = src + (m_width*m_bpp + 7)/8; - uchar* tsrc = src; - y = 0; - - for(;;) - { - int max_count = (int)(line_end - tsrc); - int code = 0, len = 0, len1 = 0; - - do - { - code = m_strm.getByte(); - if( code == 0x80 ) - { - len = m_strm.getByte(); - if( len != 0 ) break; - } - tsrc[len1] = (uchar)code; - } - while( ++len1 < max_count ); - - tsrc += len1; - - if( len > 0 ) // encoded mode - { - ++len; - code = m_strm.getByte(); - if( len > line_end - tsrc ) - { - assert(0); - goto bad_decoding_1bpp; - } - - memset( tsrc, code, len ); - tsrc += len; - } - - if( tsrc >= line_end ) - { - tsrc = src; - if( color ) - FillColorRow1( data, src, m_width, m_palette ); - else - FillGrayRow1( data, src, m_width, gray_palette ); - data += step; - if( ++y >= m_height ) break; - } - } - result = true; -bad_decoding_1bpp: - ; - } - break; - /************************* 8 BPP ************************/ - case 8: - if( m_type != RAS_BYTE_ENCODED ) - { - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( src, src_pitch ); - if( color ) - FillColorRow8( data, src, m_width, m_palette ); - else - FillGrayRow8( data, src, m_width, gray_palette ); - } - result = true; - } - else // RLE-encoded - { - uchar* line_end = data + width3; - y = 0; - - for(;;) - { - int max_count = (int)(line_end - data); - int code = 0, len = 0, len1; - uchar* tsrc = src; - - do - { - code = m_strm.getByte(); - if( code == 0x80 ) - { - len = m_strm.getByte(); - if( len != 0 ) break; - } - *tsrc++ = (uchar)code; - } - while( (max_count -= nch) > 0 ); - - len1 = (int)(tsrc - src); - - if( len1 > 0 ) - { - if( color ) - FillColorRow8( data, src, len1, m_palette ); - else - FillGrayRow8( data, src, len1, gray_palette ); - data += len1*nch; - } - - if( len > 0 ) // encoded mode - { - len = (len + 1)*nch; - code = m_strm.getByte(); - - if( color ) - data = FillUniColor( data, line_end, step, width3, - y, m_height, len, - m_palette[code] ); - else - data = FillUniGray( data, line_end, step, width3, - y, m_height, len, - gray_palette[code] ); - if( y >= m_height ) - break; - } - - if( data == line_end ) - { - if( m_strm.getByte() != 0 ) - goto bad_decoding_end; - line_end += step; - data = line_end - width3; - if( ++y >= m_height ) break; - } - } - - result = true; -bad_decoding_end: - ; - } - break; - /************************* 24 BPP ************************/ - case 24: - for( y = 0; y < m_height; y++, data += step ) - { - m_strm.getBytes( color ? data : bgr, src_pitch ); - - if( color ) - { - if( m_type == RAS_FORMAT_RGB ) - icvCvt_RGB2BGR_8u_C3R( data, 0, data, 0, cvSize(m_width,1) ); - } - else - { - icvCvt_BGR2Gray_8u_C3C1R( bgr, 0, data, 0, cvSize(m_width,1), - m_type == RAS_FORMAT_RGB ? 2 : 0 ); - } - } - result = true; - break; - /************************* 32 BPP ************************/ - case 32: - for( y = 0; y < m_height; y++, data += step ) - { - /* hack: a0 b0 g0 r0 a1 b1 g1 r1 ... are written to src + 3, - so when we look at src + 4, we see b0 g0 r0 x b1 g1 g1 x ... */ - m_strm.getBytes( src + 3, src_pitch ); - - if( color ) - icvCvt_BGRA2BGR_8u_C4C3R( src + 4, 0, data, 0, cvSize(m_width,1), - m_type == RAS_FORMAT_RGB ? 2 : 0 ); - else - icvCvt_BGRA2Gray_8u_C4C1R( src + 4, 0, data, 0, cvSize(m_width,1), - m_type == RAS_FORMAT_RGB ? 2 : 0 ); - } - result = true; - break; - default: - assert(0); - } - } - catch( ... ) - { - } - - return result; -} - - -////////////////////////////////////////////////////////////////////////////////////////// - -SunRasterEncoder::SunRasterEncoder() -{ - m_description = "Sun raster files (*.sr;*.ras)"; -} - - -ImageEncoder SunRasterEncoder::newEncoder() const -{ - return new SunRasterEncoder; -} - -SunRasterEncoder::~SunRasterEncoder() -{ -} - -bool SunRasterEncoder::write( const Mat& img, const vector& ) -{ - bool result = false; - int y, width = img.cols, height = img.rows, channels = img.channels(); - int fileStep = (width*channels + 1) & -2; - WMByteStream strm; - - if( strm.open(m_filename) ) - { - strm.putBytes( fmtSignSunRas, (int)strlen(fmtSignSunRas) ); - strm.putDWord( width ); - strm.putDWord( height ); - strm.putDWord( channels*8 ); - strm.putDWord( fileStep*height ); - strm.putDWord( RAS_STANDARD ); - strm.putDWord( RMT_NONE ); - strm.putDWord( 0 ); - - for( y = 0; y < height; y++ ) - strm.putBytes( img.data + img.step*y, fileStep ); - - strm.close(); - result = true; - } - return result; -} - -} diff --git a/modules/highgui/src/grfmt_sunras.hpp b/modules/highgui/src/grfmt_sunras.hpp deleted file mode 100644 index af9b6b8..0000000 --- a/modules/highgui/src/grfmt_sunras.hpp +++ /dev/null @@ -1,105 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_SUNRAS_H_ -#define _GRFMT_SUNRAS_H_ - -#include "grfmt_base.hpp" - -namespace cv -{ - -enum SunRasType -{ - RAS_OLD = 0, - RAS_STANDARD = 1, - RAS_BYTE_ENCODED = 2, /* RLE encoded */ - RAS_FORMAT_RGB = 3 /* RGB instead of BGR */ -}; - -enum SunRasMapType -{ - RMT_NONE = 0, /* direct color encoding */ - RMT_EQUAL_RGB = 1 /* paletted image */ -}; - - -// Sun Raster Reader -class SunRasterDecoder : public BaseImageDecoder -{ -public: - - SunRasterDecoder(); - virtual ~SunRasterDecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - ImageDecoder newDecoder() const; - -protected: - - RMByteStream m_strm; - PaletteEntry m_palette[256]; - int m_bpp; - int m_offset; - SunRasType m_encoding; - SunRasMapType m_maptype; - int m_maplength; -}; - - -class SunRasterEncoder : public BaseImageEncoder -{ -public: - SunRasterEncoder(); - virtual ~SunRasterEncoder(); - - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; -}; - -} - -#endif/*_GRFMT_SUNRAS_H_*/ diff --git a/modules/highgui/src/grfmt_tiff.cpp b/modules/highgui/src/grfmt_tiff.cpp deleted file mode 100644 index f40699f..0000000 --- a/modules/highgui/src/grfmt_tiff.cpp +++ /dev/null @@ -1,743 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/****************************************************************************************\ - A part of the file implements TIFF reader on base of libtiff library - (see otherlibs/_graphics/readme.txt for copyright notice) -\****************************************************************************************/ - -#include "precomp.hpp" -#include "grfmt_tiff.hpp" - -namespace cv -{ -static const char fmtSignTiffII[] = "II\x2a\x00"; -static const char fmtSignTiffMM[] = "MM\x00\x2a"; - -#ifdef HAVE_TIFF - -#include "tiff.h" -#include "tiffio.h" - -static int grfmt_tiff_err_handler_init = 0; -static void GrFmtSilentTIFFErrorHandler( const char*, const char*, va_list ) {} - -TiffDecoder::TiffDecoder() -{ - m_tif = 0; - if( !grfmt_tiff_err_handler_init ) - { - grfmt_tiff_err_handler_init = 1; - - TIFFSetErrorHandler( GrFmtSilentTIFFErrorHandler ); - TIFFSetWarningHandler( GrFmtSilentTIFFErrorHandler ); - } -} - - -void TiffDecoder::close() -{ - if( m_tif ) - { - TIFF* tif = (TIFF*)m_tif; - TIFFClose( tif ); - m_tif = 0; - } -} - -TiffDecoder::~TiffDecoder() -{ - close(); -} - -size_t TiffDecoder::signatureLength() const -{ - return 4; -} - -bool TiffDecoder::checkSignature( const string& signature ) const -{ - return signature.size() >= 4 && - (memcmp(signature.c_str(), fmtSignTiffII, 4) == 0 || - memcmp(signature.c_str(), fmtSignTiffMM, 4) == 0); -} - -ImageDecoder TiffDecoder::newDecoder() const -{ - return new TiffDecoder; -} - -bool TiffDecoder::readHeader() -{ - bool result = false; - - close(); - // TIFFOpen() mode flags are different to fopen(). A 'b' in mode "rb" has no effect when reading. - // http://www.remotesensing.org/libtiff/man/TIFFOpen.3tiff.html - TIFF* tif = TIFFOpen( m_filename.c_str(), "r" ); - - if( tif ) - { - uint32 wdth = 0, hght = 0; - uint16 photometric = 0; - m_tif = tif; - - if( TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &wdth ) && - TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &hght ) && - TIFFGetField( tif, TIFFTAG_PHOTOMETRIC, &photometric )) - { - uint16 bpp=8, ncn = photometric > 1 ? 3 : 1; - TIFFGetField( tif, TIFFTAG_BITSPERSAMPLE, &bpp ); - TIFFGetField( tif, TIFFTAG_SAMPLESPERPIXEL, &ncn ); - - m_width = wdth; - m_height = hght; - if( bpp > 8 && - ((photometric != 2 && photometric != 1) || - (ncn != 1 && ncn != 3 && ncn != 4))) - bpp = 8; - - switch(bpp) - { - case 8: - m_type = CV_MAKETYPE(CV_8U, photometric > 1 ? 3 : 1); - break; - case 16: - m_type = CV_MAKETYPE(CV_16U, photometric > 1 ? 3 : 1); - break; - - case 32: - m_type = CV_MAKETYPE(CV_32F, photometric > 1 ? 3 : 1); - break; - case 64: - m_type = CV_MAKETYPE(CV_64F, photometric > 1 ? 3 : 1); - break; - - default: - result = false; - } - result = true; - } - } - - if( !result ) - close(); - - return result; -} - - -bool TiffDecoder::readData( Mat& img ) -{ - bool result = false; - bool color = img.channels() > 1; - uchar* data = img.data; - - if( img.depth() != CV_8U && img.depth() != CV_16U && img.depth() != CV_32F && img.depth() != CV_64F ) - return false; - - if( m_tif && m_width && m_height ) - { - TIFF* tif = (TIFF*)m_tif; - uint32 tile_width0 = m_width, tile_height0 = 0; - int x, y, i; - int is_tiled = TIFFIsTiled(tif); - uint16 photometric; - TIFFGetField( tif, TIFFTAG_PHOTOMETRIC, &photometric ); - uint16 bpp = 8, ncn = photometric > 1 ? 3 : 1; - TIFFGetField( tif, TIFFTAG_BITSPERSAMPLE, &bpp ); - TIFFGetField( tif, TIFFTAG_SAMPLESPERPIXEL, &ncn ); - const int bitsPerByte = 8; - int dst_bpp = (int)(img.elemSize1() * bitsPerByte); - - if(dst_bpp == 8) - { - char errmsg[1024]; - if(!TIFFRGBAImageOK( tif, errmsg )) - { - close(); - return false; - } - } - - if( (!is_tiled) || - (is_tiled && - TIFFGetField( tif, TIFFTAG_TILEWIDTH, &tile_width0 ) && - TIFFGetField( tif, TIFFTAG_TILELENGTH, &tile_height0 ))) - { - if(!is_tiled) - TIFFGetField( tif, TIFFTAG_ROWSPERSTRIP, &tile_height0 ); - - if( tile_width0 <= 0 ) - tile_width0 = m_width; - - if( tile_height0 <= 0 ) - tile_height0 = m_height; - - AutoBuffer _buffer( size_t(8) * tile_height0*tile_width0); - uchar* buffer = _buffer; - ushort* buffer16 = (ushort*)buffer; - float* buffer32 = (float*)buffer; - double* buffer64 = (double*)buffer; - int tileidx = 0; - - for( y = 0; y < m_height; y += tile_height0, data += img.step*tile_height0 ) - { - int tile_height = tile_height0; - - if( y + tile_height > m_height ) - tile_height = m_height - y; - - for( x = 0; x < m_width; x += tile_width0, tileidx++ ) - { - int tile_width = tile_width0, ok; - - if( x + tile_width > m_width ) - tile_width = m_width - x; - - switch(dst_bpp) - { - case 8: - { - uchar * bstart = buffer; - if( !is_tiled ) - ok = TIFFReadRGBAStrip( tif, y, (uint32*)buffer ); - else - { - ok = TIFFReadRGBATile( tif, x, y, (uint32*)buffer ); - //Tiles fill the buffer from the bottom up - bstart += (tile_height0 - tile_height) * tile_width0 * 4; - } - if( !ok ) - { - close(); - return false; - } - - for( i = 0; i < tile_height; i++ ) - if( color ) - icvCvt_BGRA2BGR_8u_C4C3R( bstart + i*tile_width0*4, 0, - data + x*3 + img.step*(tile_height - i - 1), 0, - cvSize(tile_width,1), 2 ); - else - icvCvt_BGRA2Gray_8u_C4C1R( bstart + i*tile_width0*4, 0, - data + x + img.step*(tile_height - i - 1), 0, - cvSize(tile_width,1), 2 ); - break; - } - - case 16: - { - if( !is_tiled ) - ok = (int)TIFFReadEncodedStrip( tif, tileidx, (uint32*)buffer, (tsize_t)-1 ) >= 0; - else - ok = (int)TIFFReadEncodedTile( tif, tileidx, (uint32*)buffer, (tsize_t)-1 ) >= 0; - - if( !ok ) - { - close(); - return false; - } - - for( i = 0; i < tile_height; i++ ) - { - if( color ) - { - if( ncn == 1 ) - { - icvCvt_Gray2BGR_16u_C1C3R(buffer16 + i*tile_width0*ncn, 0, - (ushort*)(data + img.step*i) + x*3, 0, - cvSize(tile_width,1) ); - } - else if( ncn == 3 ) - { - icvCvt_RGB2BGR_16u_C3R(buffer16 + i*tile_width0*ncn, 0, - (ushort*)(data + img.step*i) + x*3, 0, - cvSize(tile_width,1) ); - } - else - { - icvCvt_BGRA2BGR_16u_C4C3R(buffer16 + i*tile_width0*ncn, 0, - (ushort*)(data + img.step*i) + x*3, 0, - cvSize(tile_width,1), 2 ); - } - } - else - { - if( ncn == 1 ) - { - memcpy((ushort*)(data + img.step*i)+x, - buffer16 + i*tile_width0*ncn, - tile_width*sizeof(buffer16[0])); - } - else - { - icvCvt_BGRA2Gray_16u_CnC1R(buffer16 + i*tile_width0*ncn, 0, - (ushort*)(data + img.step*i) + x, 0, - cvSize(tile_width,1), ncn, 2 ); - } - } - } - break; - } - - case 32: - case 64: - { - if( !is_tiled ) - ok = (int)TIFFReadEncodedStrip( tif, tileidx, buffer, (tsize_t)-1 ) >= 0; - else - ok = (int)TIFFReadEncodedTile( tif, tileidx, buffer, (tsize_t)-1 ) >= 0; - - if( !ok || ncn != 1 ) - { - close(); - return false; - } - - for( i = 0; i < tile_height; i++ ) - { - if(dst_bpp == 32) - { - memcpy((float*)(data + img.step*i)+x, - buffer32 + i*tile_width0*ncn, - tile_width*sizeof(buffer32[0])); - } - else - { - memcpy((double*)(data + img.step*i)+x, - buffer64 + i*tile_width0*ncn, - tile_width*sizeof(buffer64[0])); - } - } - - break; - } - default: - { - close(); - return false; - } - } - } - } - - result = true; - } - } - - close(); - return result; -} - -#endif - -////////////////////////////////////////////////////////////////////////////////////////// - -TiffEncoder::TiffEncoder() -{ - m_description = "TIFF Files (*.tiff;*.tif)"; -#ifdef HAVE_TIFF - m_buf_supported = false; -#else - m_buf_supported = true; -#endif -} - -TiffEncoder::~TiffEncoder() -{ -} - -ImageEncoder TiffEncoder::newEncoder() const -{ - return new TiffEncoder; -} - -bool TiffEncoder::isFormatSupported( int depth ) const -{ - return depth == CV_8U || depth == CV_16U; -} - -void TiffEncoder::writeTag( WLByteStream& strm, TiffTag tag, - TiffFieldType fieldType, - int count, int value ) -{ - strm.putWord( tag ); - strm.putWord( fieldType ); - strm.putDWord( count ); - strm.putDWord( value ); -} - -#ifdef HAVE_TIFF - -static void readParam(const vector& params, int key, int& value) -{ - for(size_t i = 0; i + 1 < params.size(); i += 2) - if(params[i] == key) - { - value = params[i+1]; - break; - } -} - -bool TiffEncoder::writeLibTiff( const Mat& img, const vector& params) -{ - int channels = img.channels(); - int width = img.cols, height = img.rows; - int depth = img.depth(); - - int bitsPerChannel = -1; - switch (depth) - { - case CV_8U: - { - bitsPerChannel = 8; - break; - } - case CV_16U: - { - bitsPerChannel = 16; - break; - } - default: - { - return false; - } - } - - const int bitsPerByte = 8; - size_t fileStep = (width * channels * bitsPerChannel) / bitsPerByte; - - int rowsPerStrip = (int)((1 << 13)/fileStep); - readParam(params, TIFFTAG_ROWSPERSTRIP, rowsPerStrip); - - if( rowsPerStrip < 1 ) - rowsPerStrip = 1; - - if( rowsPerStrip > height ) - rowsPerStrip = height; - - - // do NOT put "wb" as the mode, because the b means "big endian" mode, not "binary" mode. - // http://www.remotesensing.org/libtiff/man/TIFFOpen.3tiff.html - TIFF* pTiffHandle = TIFFOpen(m_filename.c_str(), "w"); - if (!pTiffHandle) - { - return false; - } - - // defaults for now, maybe base them on params in the future - int compression = COMPRESSION_LZW; - int predictor = PREDICTOR_HORIZONTAL; - - readParam(params, TIFFTAG_COMPRESSION, compression); - readParam(params, TIFFTAG_PREDICTOR, predictor); - - int colorspace = channels > 1 ? PHOTOMETRIC_RGB : PHOTOMETRIC_MINISBLACK; - - if ( !TIFFSetField(pTiffHandle, TIFFTAG_IMAGEWIDTH, width) - || !TIFFSetField(pTiffHandle, TIFFTAG_IMAGELENGTH, height) - || !TIFFSetField(pTiffHandle, TIFFTAG_BITSPERSAMPLE, bitsPerChannel) - || !TIFFSetField(pTiffHandle, TIFFTAG_COMPRESSION, compression) - || !TIFFSetField(pTiffHandle, TIFFTAG_PHOTOMETRIC, colorspace) - || !TIFFSetField(pTiffHandle, TIFFTAG_SAMPLESPERPIXEL, channels) - || !TIFFSetField(pTiffHandle, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG) - || !TIFFSetField(pTiffHandle, TIFFTAG_ROWSPERSTRIP, rowsPerStrip) - || !TIFFSetField(pTiffHandle, TIFFTAG_PREDICTOR, predictor) - ) - { - TIFFClose(pTiffHandle); - return false; - } - - // row buffer, because TIFFWriteScanline modifies the original data! - size_t scanlineSize = TIFFScanlineSize(pTiffHandle); - AutoBuffer _buffer(scanlineSize+32); - uchar* buffer = _buffer; - if (!buffer) - { - TIFFClose(pTiffHandle); - return false; - } - - for (int y = 0; y < height; ++y) - { - switch(channels) - { - case 1: - { - memcpy(buffer, img.data + img.step * y, scanlineSize); - break; - } - - case 3: - { - if (depth == CV_8U) - icvCvt_BGR2RGB_8u_C3R( img.data + img.step*y, 0, buffer, 0, cvSize(width,1) ); - else - icvCvt_BGR2RGB_16u_C3R( (const ushort*)(img.data + img.step*y), 0, (ushort*)buffer, 0, cvSize(width,1) ); - break; - } - - case 4: - { - if (depth == CV_8U) - icvCvt_BGRA2RGBA_8u_C4R( img.data + img.step*y, 0, buffer, 0, cvSize(width,1) ); - else - icvCvt_BGRA2RGBA_16u_C4R( (const ushort*)(img.data + img.step*y), 0, (ushort*)buffer, 0, cvSize(width,1) ); - break; - } - - default: - { - TIFFClose(pTiffHandle); - return false; - } - } - - int writeResult = TIFFWriteScanline(pTiffHandle, buffer, y, 0); - if (writeResult != 1) - { - TIFFClose(pTiffHandle); - return false; - } - } - - TIFFClose(pTiffHandle); - return true; -} - -#endif - -#ifdef HAVE_TIFF -bool TiffEncoder::write( const Mat& img, const vector& params) -#else -bool TiffEncoder::write( const Mat& img, const vector& /*params*/) -#endif -{ - int channels = img.channels(); - int width = img.cols, height = img.rows; - int depth = img.depth(); - - if (depth != CV_8U && depth != CV_16U) - return false; - - int bytesPerChannel = depth == CV_8U ? 1 : 2; - int fileStep = width * channels * bytesPerChannel; - - WLByteStream strm; - - if( m_buf ) - { - if( !strm.open(*m_buf) ) - return false; - } - else - { -#ifdef HAVE_TIFF - return writeLibTiff(img, params); -#else - if( !strm.open(m_filename) ) - return false; -#endif - } - - int rowsPerStrip = (1 << 13)/fileStep; - - if( rowsPerStrip < 1 ) - rowsPerStrip = 1; - - if( rowsPerStrip > height ) - rowsPerStrip = height; - - int i, stripCount = (height + rowsPerStrip - 1) / rowsPerStrip; - - if( m_buf ) - m_buf->reserve( alignSize(stripCount*8 + fileStep*height + 256, 256) ); - -/*#if defined _DEBUG || !defined WIN32 - int uncompressedRowSize = rowsPerStrip * fileStep; -#endif*/ - int directoryOffset = 0; - - AutoBuffer stripOffsets(stripCount); - AutoBuffer stripCounts(stripCount); - AutoBuffer _buffer(fileStep+32); - uchar* buffer = _buffer; - int stripOffsetsOffset = 0; - int stripCountsOffset = 0; - int bitsPerSample = 8 * bytesPerChannel; - int y = 0; - - strm.putBytes( fmtSignTiffII, 4 ); - strm.putDWord( directoryOffset ); - - // write an image data first (the most reasonable way - // for compressed images) - for( i = 0; i < stripCount; i++ ) - { - int limit = y + rowsPerStrip; - - if( limit > height ) - limit = height; - - stripOffsets[i] = strm.getPos(); - - for( ; y < limit; y++ ) - { - if( channels == 3 ) - { - if (depth == CV_8U) - icvCvt_BGR2RGB_8u_C3R( img.data + img.step*y, 0, buffer, 0, cvSize(width,1) ); - else - icvCvt_BGR2RGB_16u_C3R( (const ushort*)(img.data + img.step*y), 0, (ushort*)buffer, 0, cvSize(width,1) ); - } - else - { - if( channels == 4 ) - { - if (depth == CV_8U) - icvCvt_BGRA2RGBA_8u_C4R( img.data + img.step*y, 0, buffer, 0, cvSize(width,1) ); - else - icvCvt_BGRA2RGBA_16u_C4R( (const ushort*)(img.data + img.step*y), 0, (ushort*)buffer, 0, cvSize(width,1) ); - } - } - - strm.putBytes( channels > 1 ? buffer : img.data + img.step*y, fileStep ); - } - - stripCounts[i] = (short)(strm.getPos() - stripOffsets[i]); - /*assert( stripCounts[i] == uncompressedRowSize || - stripCounts[i] < uncompressedRowSize && - i == stripCount - 1);*/ - } - - if( stripCount > 2 ) - { - stripOffsetsOffset = strm.getPos(); - for( i = 0; i < stripCount; i++ ) - strm.putDWord( stripOffsets[i] ); - - stripCountsOffset = strm.getPos(); - for( i = 0; i < stripCount; i++ ) - strm.putWord( stripCounts[i] ); - } - else if(stripCount == 2) - { - stripOffsetsOffset = strm.getPos(); - for (i = 0; i < stripCount; i++) - { - strm.putDWord (stripOffsets [i]); - } - stripCountsOffset = stripCounts [0] + (stripCounts [1] << 16); - } - else - { - stripOffsetsOffset = stripOffsets[0]; - stripCountsOffset = stripCounts[0]; - } - - if( channels > 1 ) - { - int bitsPerSamplePos = strm.getPos(); - strm.putWord(bitsPerSample); - strm.putWord(bitsPerSample); - strm.putWord(bitsPerSample); - if( channels == 4 ) - strm.putWord(bitsPerSample); - bitsPerSample = bitsPerSamplePos; - } - - directoryOffset = strm.getPos(); - - // write header - strm.putWord( 9 ); - - /* warning: specification 5.0 of Tiff want to have tags in - ascending order. This is a non-fatal error, but this cause - warning with some tools. So, keep this in ascending order */ - - writeTag( strm, TIFF_TAG_WIDTH, TIFF_TYPE_LONG, 1, width ); - writeTag( strm, TIFF_TAG_HEIGHT, TIFF_TYPE_LONG, 1, height ); - writeTag( strm, TIFF_TAG_BITS_PER_SAMPLE, - TIFF_TYPE_SHORT, channels, bitsPerSample ); - writeTag( strm, TIFF_TAG_COMPRESSION, TIFF_TYPE_LONG, 1, TIFF_UNCOMP ); - writeTag( strm, TIFF_TAG_PHOTOMETRIC, TIFF_TYPE_SHORT, 1, channels > 1 ? 2 : 1 ); - - writeTag( strm, TIFF_TAG_STRIP_OFFSETS, TIFF_TYPE_LONG, - stripCount, stripOffsetsOffset ); - - writeTag( strm, TIFF_TAG_SAMPLES_PER_PIXEL, TIFF_TYPE_SHORT, 1, channels ); - writeTag( strm, TIFF_TAG_ROWS_PER_STRIP, TIFF_TYPE_LONG, 1, rowsPerStrip ); - - writeTag( strm, TIFF_TAG_STRIP_COUNTS, - stripCount > 1 ? TIFF_TYPE_SHORT : TIFF_TYPE_LONG, - stripCount, stripCountsOffset ); - - strm.putDWord(0); - strm.close(); - - if( m_buf ) - { - (*m_buf)[4] = (uchar)directoryOffset; - (*m_buf)[5] = (uchar)(directoryOffset >> 8); - (*m_buf)[6] = (uchar)(directoryOffset >> 16); - (*m_buf)[7] = (uchar)(directoryOffset >> 24); - } - else - { - // write directory offset - FILE* f = fopen( m_filename.c_str(), "r+b" ); - buffer[0] = (uchar)directoryOffset; - buffer[1] = (uchar)(directoryOffset >> 8); - buffer[2] = (uchar)(directoryOffset >> 16); - buffer[3] = (uchar)(directoryOffset >> 24); - - fseek( f, 4, SEEK_SET ); - fwrite( buffer, 1, 4, f ); - fclose(f); - } - - return true; -} - -} diff --git a/modules/highgui/src/grfmt_tiff.hpp b/modules/highgui/src/grfmt_tiff.hpp deleted file mode 100644 index 8318548..0000000 --- a/modules/highgui/src/grfmt_tiff.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMT_TIFF_H_ -#define _GRFMT_TIFF_H_ - -#include "grfmt_base.hpp" - -namespace cv -{ - -// native simple TIFF codec -enum TiffCompression -{ - TIFF_UNCOMP = 1, - TIFF_HUFFMAN = 2, - TIFF_PACKBITS = 32773 -}; - -enum TiffByteOrder -{ - TIFF_ORDER_II = 0x4949, - TIFF_ORDER_MM = 0x4d4d -}; - - -enum TiffTag -{ - TIFF_TAG_WIDTH = 256, - TIFF_TAG_HEIGHT = 257, - TIFF_TAG_BITS_PER_SAMPLE = 258, - TIFF_TAG_COMPRESSION = 259, - TIFF_TAG_PHOTOMETRIC = 262, - TIFF_TAG_STRIP_OFFSETS = 273, - TIFF_TAG_STRIP_COUNTS = 279, - TIFF_TAG_SAMPLES_PER_PIXEL = 277, - TIFF_TAG_ROWS_PER_STRIP = 278, - TIFF_TAG_PLANAR_CONFIG = 284, - TIFF_TAG_COLOR_MAP = 320 -}; - - -enum TiffFieldType -{ - TIFF_TYPE_BYTE = 1, - TIFF_TYPE_SHORT = 3, - TIFF_TYPE_LONG = 4 -}; - - -#ifdef HAVE_TIFF - -// libtiff based TIFF codec - -class TiffDecoder : public BaseImageDecoder -{ -public: - TiffDecoder(); - virtual ~TiffDecoder(); - - bool readHeader(); - bool readData( Mat& img ); - void close(); - - size_t signatureLength() const; - bool checkSignature( const string& signature ) const; - ImageDecoder newDecoder() const; - -protected: - void* m_tif; -}; - -#endif - -// ... and writer -class TiffEncoder : public BaseImageEncoder -{ -public: - TiffEncoder(); - virtual ~TiffEncoder(); - - bool isFormatSupported( int depth ) const; - - bool write( const Mat& img, const vector& params ); - ImageEncoder newEncoder() const; - -protected: - void writeTag( WLByteStream& strm, TiffTag tag, - TiffFieldType fieldType, - int count, int value ); - - bool writeLibTiff( const Mat& img, const vector& params ); -}; - -} - -#endif/*_GRFMT_TIFF_H_*/ diff --git a/modules/highgui/src/grfmts.hpp b/modules/highgui/src/grfmts.hpp deleted file mode 100644 index 20acd4c..0000000 --- a/modules/highgui/src/grfmts.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _GRFMTS_H_ -#define _GRFMTS_H_ - -#include "grfmt_base.hpp" -#include "grfmt_imageio.hpp" -#include "grfmt_bmp.hpp" -#include "grfmt_sunras.hpp" -#include "grfmt_jpeg.hpp" -#include "grfmt_pxm.hpp" -#include "grfmt_tiff.hpp" -#include "grfmt_png.hpp" -#include "grfmt_jpeg2000.hpp" -#include "grfmt_exr.hpp" - -#endif/*_GRFMTS_H_*/ diff --git a/modules/highgui/src/ios_conversions.mm b/modules/highgui/src/ios_conversions.mm deleted file mode 100644 index fa6208a..0000000 --- a/modules/highgui/src/ios_conversions.mm +++ /dev/null @@ -1,117 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#import "opencv2/highgui/cap_ios.h" -#include "precomp.hpp" - -UIImage* MatToUIImage(const cv::Mat& image) { - - NSData *data = [NSData dataWithBytes:image.data - length:image.elemSize()*image.total()]; - - CGColorSpaceRef colorSpace; - - if (image.elemSize() == 1) { - colorSpace = CGColorSpaceCreateDeviceGray(); - } else { - colorSpace = CGColorSpaceCreateDeviceRGB(); - } - - CGDataProviderRef provider = - CGDataProviderCreateWithCFData((__bridge CFDataRef)data); - - // Creating CGImage from cv::Mat - CGImageRef imageRef = CGImageCreate(image.cols, - image.rows, - 8, - 8 * image.elemSize(), - image.step.p[0], - colorSpace, - kCGImageAlphaNone| - kCGBitmapByteOrderDefault, - provider, - NULL, - false, - kCGRenderingIntentDefault - ); - - - // Getting UIImage from CGImage - UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; - CGImageRelease(imageRef); - CGDataProviderRelease(provider); - CGColorSpaceRelease(colorSpace); - - return finalImage; -} - -void UIImageToMat(const UIImage* image, - cv::Mat& m, bool alphaExist) { - CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage); - CGFloat cols = image.size.width, rows = image.size.height; - CGContextRef contextRef; - CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast; - if (CGColorSpaceGetModel(colorSpace) == 0) - { - m.create(rows, cols, CV_8UC1); // 8 bits per component, 1 channel - bitmapInfo = kCGImageAlphaNone; - if (!alphaExist) - bitmapInfo = kCGImageAlphaNone; - contextRef = CGBitmapContextCreate(m.data, m.cols, m.rows, 8, - m.step[0], colorSpace, - bitmapInfo); - } - else - { - m.create(rows, cols, CV_8UC4); // 8 bits per component, 4 channels - if (!alphaExist) - bitmapInfo = kCGImageAlphaNoneSkipLast | - kCGBitmapByteOrderDefault; - contextRef = CGBitmapContextCreate(m.data, m.cols, m.rows, 8, - m.step[0], colorSpace, - bitmapInfo); - } - CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), - image.CGImage); - CGContextRelease(contextRef); - CGColorSpaceRelease(colorSpace); -} diff --git a/modules/highgui/src/loadsave.cpp b/modules/highgui/src/loadsave.cpp deleted file mode 100644 index 6658b13..0000000 --- a/modules/highgui/src/loadsave.cpp +++ /dev/null @@ -1,545 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -// -// Loading and saving IPL images. -// - -#include "precomp.hpp" -#include "grfmts.hpp" -#undef min -#undef max - -/****************************************************************************************\ -* Image Codecs * -\****************************************************************************************/ -namespace cv -{ - -struct ImageCodecInitializer -{ - ImageCodecInitializer() - { - decoders.push_back( new BmpDecoder ); - encoders.push_back( new BmpEncoder ); - #ifdef HAVE_JPEG - decoders.push_back( new JpegDecoder ); - encoders.push_back( new JpegEncoder ); - #endif - decoders.push_back( new SunRasterDecoder ); - encoders.push_back( new SunRasterEncoder ); - decoders.push_back( new PxMDecoder ); - encoders.push_back( new PxMEncoder ); - #ifdef HAVE_TIFF - decoders.push_back( new TiffDecoder ); - #endif - encoders.push_back( new TiffEncoder ); - #ifdef HAVE_PNG - decoders.push_back( new PngDecoder ); - encoders.push_back( new PngEncoder ); - #endif - #ifdef HAVE_JASPER - decoders.push_back( new Jpeg2KDecoder ); - encoders.push_back( new Jpeg2KEncoder ); - #endif - #ifdef HAVE_OPENEXR - decoders.push_back( new ExrDecoder ); - encoders.push_back( new ExrEncoder ); - #endif - // because it is a generic image I/O API, supporting many formats, - // it should be last in the list. - #ifdef HAVE_IMAGEIO - decoders.push_back( new ImageIODecoder ); - encoders.push_back( new ImageIOEncoder ); - #endif - } - - vector decoders; - vector encoders; -}; - -static ImageCodecInitializer codecs; - -static ImageDecoder findDecoder( const string& filename ) -{ - size_t i, maxlen = 0; - for( i = 0; i < codecs.decoders.size(); i++ ) - { - size_t len = codecs.decoders[i]->signatureLength(); - maxlen = std::max(maxlen, len); - } - - FILE* f= fopen( filename.c_str(), "rb" ); - if( !f ) - return ImageDecoder(); - string signature(maxlen, ' '); - maxlen = fread( &signature[0], 1, maxlen, f ); - fclose(f); - signature = signature.substr(0, maxlen); - - for( i = 0; i < codecs.decoders.size(); i++ ) - { - if( codecs.decoders[i]->checkSignature(signature) ) - return codecs.decoders[i]->newDecoder(); - } - - return ImageDecoder(); -} - -static ImageDecoder findDecoder( const Mat& buf ) -{ - size_t i, maxlen = 0; - - if( buf.rows*buf.cols < 1 || !buf.isContinuous() ) - return ImageDecoder(); - - for( i = 0; i < codecs.decoders.size(); i++ ) - { - size_t len = codecs.decoders[i]->signatureLength(); - maxlen = std::max(maxlen, len); - } - - size_t bufSize = buf.rows*buf.cols*buf.elemSize(); - maxlen = std::min(maxlen, bufSize); - string signature(maxlen, ' '); - memcpy( &signature[0], buf.data, maxlen ); - - for( i = 0; i < codecs.decoders.size(); i++ ) - { - if( codecs.decoders[i]->checkSignature(signature) ) - return codecs.decoders[i]->newDecoder(); - } - - return ImageDecoder(); -} - -static ImageEncoder findEncoder( const string& _ext ) -{ - if( _ext.size() <= 1 ) - return ImageEncoder(); - - const char* ext = strrchr( _ext.c_str(), '.' ); - if( !ext ) - return ImageEncoder(); - int len = 0; - for( ext++; isalnum(ext[len]) && len < 128; len++ ) - ; - - for( size_t i = 0; i < codecs.encoders.size(); i++ ) - { - string description = codecs.encoders[i]->getDescription(); - const char* descr = strchr( description.c_str(), '(' ); - - while( descr ) - { - descr = strchr( descr + 1, '.' ); - if( !descr ) - break; - int j = 0; - for( descr++; isalnum(descr[j]) && j < len; j++ ) - { - int c1 = tolower(ext[j]); - int c2 = tolower(descr[j]); - if( c1 != c2 ) - break; - } - if( j == len && !isalnum(descr[j])) - return codecs.encoders[i]->newEncoder(); - descr += j; - } - } - - return ImageEncoder(); -} - -enum { LOAD_CVMAT=0, LOAD_IMAGE=1, LOAD_MAT=2 }; - -static void* -imread_( const string& filename, int flags, int hdrtype, Mat* mat=0 ) -{ - IplImage* image = 0; - CvMat *matrix = 0; - Mat temp, *data = &temp; - - ImageDecoder decoder = findDecoder(filename); - if( decoder.empty() ) - return 0; - decoder->setSource(filename); - if( !decoder->readHeader() ) - return 0; - - CvSize size; - size.width = decoder->width(); - size.height = decoder->height(); - - int type = decoder->type(); - if( flags != -1 ) - { - if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 ) - type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type)); - - if( (flags & CV_LOAD_IMAGE_COLOR) != 0 || - ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) ) - type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3); - else - type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1); - } - - if( hdrtype == LOAD_CVMAT || hdrtype == LOAD_MAT ) - { - if( hdrtype == LOAD_CVMAT ) - { - matrix = cvCreateMat( size.height, size.width, type ); - temp = cvarrToMat(matrix); - } - else - { - mat->create( size.height, size.width, type ); - data = mat; - } - } - else - { - image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) ); - temp = cvarrToMat(image); - } - - if( !decoder->readData( *data )) - { - cvReleaseImage( &image ); - cvReleaseMat( &matrix ); - if( mat ) - mat->release(); - return 0; - } - - return hdrtype == LOAD_CVMAT ? (void*)matrix : - hdrtype == LOAD_IMAGE ? (void*)image : (void*)mat; -} - -Mat imread( const string& filename, int flags ) -{ - Mat img; - imread_( filename, flags, LOAD_MAT, &img ); - return img; -} - -static bool imwrite_( const string& filename, const Mat& image, - const vector& params, bool flipv ) -{ - Mat temp; - const Mat* pimage = ℑ - - CV_Assert( image.channels() == 1 || image.channels() == 3 || image.channels() == 4 ); - - ImageEncoder encoder = findEncoder( filename ); - if( encoder.empty() ) - CV_Error( CV_StsError, "could not find a writer for the specified extension" ); - - if( !encoder->isFormatSupported(image.depth()) ) - { - CV_Assert( encoder->isFormatSupported(CV_8U) ); - image.convertTo( temp, CV_8U ); - pimage = &temp; - } - - if( flipv ) - { - flip(*pimage, temp, 0); - pimage = &temp; - } - - encoder->setDestination( filename ); - bool code = encoder->write( *pimage, params ); - - // CV_Assert( code ); - return code; -} - -bool imwrite( const string& filename, InputArray _img, - const vector& params ) -{ - Mat img = _img.getMat(); - return imwrite_(filename, img, params, false); -} - -static void* -imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 ) -{ - CV_Assert(buf.data && buf.isContinuous()); - IplImage* image = 0; - CvMat *matrix = 0; - Mat temp, *data = &temp; - string filename; - - ImageDecoder decoder = findDecoder(buf); - if( decoder.empty() ) - return 0; - - if( !decoder->setSource(buf) ) - { - filename = tempfile(); - FILE* f = fopen( filename.c_str(), "wb" ); - if( !f ) - return 0; - size_t bufSize = buf.cols*buf.rows*buf.elemSize(); - fwrite( &buf.data[0], 1, bufSize, f ); - fclose(f); - decoder->setSource(filename); - } - - if( !decoder->readHeader() ) - { - if( !filename.empty() ) - remove(filename.c_str()); - return 0; - } - - CvSize size; - size.width = decoder->width(); - size.height = decoder->height(); - - int type = decoder->type(); - if( flags != -1 ) - { - if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 ) - type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type)); - - if( (flags & CV_LOAD_IMAGE_COLOR) != 0 || - ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) ) - type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3); - else - type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1); - } - - if( hdrtype == LOAD_CVMAT || hdrtype == LOAD_MAT ) - { - if( hdrtype == LOAD_CVMAT ) - { - matrix = cvCreateMat( size.height, size.width, type ); - temp = cvarrToMat(matrix); - } - else - { - mat->create( size.height, size.width, type ); - data = mat; - } - } - else - { - image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) ); - temp = cvarrToMat(image); - } - - bool code = decoder->readData( *data ); - if( !filename.empty() ) - remove(filename.c_str()); - - if( !code ) - { - cvReleaseImage( &image ); - cvReleaseMat( &matrix ); - if( mat ) - mat->release(); - return 0; - } - - return hdrtype == LOAD_CVMAT ? (void*)matrix : - hdrtype == LOAD_IMAGE ? (void*)image : (void*)mat; -} - - -Mat imdecode( InputArray _buf, int flags ) -{ - Mat buf = _buf.getMat(), img; - imdecode_( buf, flags, LOAD_MAT, &img ); - return img; -} - -Mat imdecode( InputArray _buf, int flags, Mat* dst ) -{ - Mat buf = _buf.getMat(), img; - dst = dst ? dst : &img; - imdecode_( buf, flags, LOAD_MAT, dst ); - return *dst; -} - -bool imencode( const string& ext, InputArray _image, - vector& buf, const vector& params ) -{ - Mat image = _image.getMat(); - - int channels = image.channels(); - CV_Assert( channels == 1 || channels == 3 || channels == 4 ); - - ImageEncoder encoder = findEncoder( ext ); - if( encoder.empty() ) - CV_Error( CV_StsError, "could not find encoder for the specified extension" ); - - if( !encoder->isFormatSupported(image.depth()) ) - { - CV_Assert( encoder->isFormatSupported(CV_8U) ); - Mat temp; - image.convertTo(temp, CV_8U); - image = temp; - } - - bool code; - if( encoder->setDestination(buf) ) - { - code = encoder->write(image, params); - encoder->throwOnEror(); - CV_Assert( code ); - } - else - { - string filename = tempfile(); - code = encoder->setDestination(filename); - CV_Assert( code ); - - code = encoder->write(image, params); - encoder->throwOnEror(); - CV_Assert( code ); - - FILE* f = fopen( filename.c_str(), "rb" ); - CV_Assert(f != 0); - fseek( f, 0, SEEK_END ); - long pos = ftell(f); - buf.resize((size_t)pos); - fseek( f, 0, SEEK_SET ); - buf.resize(fread( &buf[0], 1, buf.size(), f )); - fclose(f); - remove(filename.c_str()); - } - return code; -} - -} - -/****************************************************************************************\ -* HighGUI loading & saving function implementation * -\****************************************************************************************/ - -CV_IMPL int -cvHaveImageReader( const char* filename ) -{ - cv::ImageDecoder decoder = cv::findDecoder(filename); - return !decoder.empty(); -} - -CV_IMPL int cvHaveImageWriter( const char* filename ) -{ - cv::ImageEncoder encoder = cv::findEncoder(filename); - return !encoder.empty(); -} - -CV_IMPL IplImage* -cvLoadImage( const char* filename, int iscolor ) -{ - return (IplImage*)cv::imread_(filename, iscolor, cv::LOAD_IMAGE ); -} - -CV_IMPL CvMat* -cvLoadImageM( const char* filename, int iscolor ) -{ - return (CvMat*)cv::imread_( filename, iscolor, cv::LOAD_CVMAT ); -} - -CV_IMPL int -cvSaveImage( const char* filename, const CvArr* arr, const int* _params ) -{ - int i = 0; - if( _params ) - { - for( ; _params[i] > 0; i += 2 ) - ; - } - return cv::imwrite_(filename, cv::cvarrToMat(arr), - i > 0 ? cv::vector(_params, _params+i) : cv::vector(), - CV_IS_IMAGE(arr) && ((const IplImage*)arr)->origin == IPL_ORIGIN_BL ); -} - -/* decode image stored in the buffer */ -CV_IMPL IplImage* -cvDecodeImage( const CvMat* _buf, int iscolor ) -{ - CV_Assert( _buf && CV_IS_MAT_CONT(_buf->type) ); - cv::Mat buf(1, _buf->rows*_buf->cols*CV_ELEM_SIZE(_buf->type), CV_8U, _buf->data.ptr); - return (IplImage*)cv::imdecode_(buf, iscolor, cv::LOAD_IMAGE ); -} - -CV_IMPL CvMat* -cvDecodeImageM( const CvMat* _buf, int iscolor ) -{ - CV_Assert( _buf && CV_IS_MAT_CONT(_buf->type) ); - cv::Mat buf(1, _buf->rows*_buf->cols*CV_ELEM_SIZE(_buf->type), CV_8U, _buf->data.ptr); - return (CvMat*)cv::imdecode_(buf, iscolor, cv::LOAD_CVMAT ); -} - -CV_IMPL CvMat* -cvEncodeImage( const char* ext, const CvArr* arr, const int* _params ) -{ - int i = 0; - if( _params ) - { - for( ; _params[i] > 0; i += 2 ) - ; - } - cv::Mat img = cv::cvarrToMat(arr); - if( CV_IS_IMAGE(arr) && ((const IplImage*)arr)->origin == IPL_ORIGIN_BL ) - { - cv::Mat temp; - cv::flip(img, temp, 0); - img = temp; - } - cv::vector buf; - - bool code = cv::imencode(ext, img, buf, - i > 0 ? std::vector(_params, _params+i) : std::vector() ); - if( !code ) - return 0; - CvMat* _buf = cvCreateMat(1, (int)buf.size(), CV_8U); - memcpy( _buf->data.ptr, &buf[0], buf.size() ); - - return _buf; -} - -/* End of file. */ diff --git a/modules/highgui/src/precomp.hpp b/modules/highgui/src/precomp.hpp deleted file mode 100644 index af5383b..0000000 --- a/modules/highgui/src/precomp.hpp +++ /dev/null @@ -1,251 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __HIGHGUI_H_ -#define __HIGHGUI_H_ - -#include "cvconfig.h" - -#include "opencv2/highgui/highgui.hpp" -#include "opencv2/highgui/highgui_c.h" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/core/internal.hpp" - -#include -#include -#include -#include -#include -#include - -#if defined WIN32 || defined WINCE - #if !defined _WIN32_WINNT - #ifdef HAVE_MSMF - #define _WIN32_WINNT 0x0600 // Windows Vista - #else - #define _WIN32_WINNT 0x0500 // Windows 2000 - #endif - #endif - - #include - #undef small - #undef min - #undef max - #undef abs -#endif - -#ifdef HAVE_TEGRA_OPTIMIZATION -#include "opencv2/highgui/highgui_tegra.hpp" -#endif - -/* Errors */ -#define HG_OK 0 /* Don't bet on it! */ -#define HG_BADNAME -1 /* Bad window or file name */ -#define HG_INITFAILED -2 /* Can't initialize HigHGUI */ -#define HG_WCFAILED -3 /* Can't create a window */ -#define HG_NULLPTR -4 /* The null pointer where it should not appear */ -#define HG_BADPARAM -5 - -#define __BEGIN__ __CV_BEGIN__ -#define __END__ __CV_END__ -#define EXIT __CV_EXIT__ - -#define CV_WINDOW_MAGIC_VAL 0x00420042 -#define CV_TRACKBAR_MAGIC_VAL 0x00420043 - -/***************************** CvCapture structure ******************************/ - -struct CvCapture -{ - virtual ~CvCapture() {} - virtual double getProperty(int) { return 0; } - virtual bool setProperty(int, double) { return 0; } - virtual bool grabFrame() { return true; } - virtual IplImage* retrieveFrame(int) { return 0; } - virtual int getCaptureDomain() { return CV_CAP_ANY; } // Return the type of the capture object: CV_CAP_VFW, etc... -}; - -/*************************** CvVideoWriter structure ****************************/ - -struct CvVideoWriter -{ - virtual ~CvVideoWriter() {} - virtual bool writeFrame(const IplImage*) { return false; } -}; - -CvCapture * cvCreateCameraCapture_V4L( int index ); -CvCapture * cvCreateCameraCapture_DC1394( int index ); -CvCapture * cvCreateCameraCapture_DC1394_2( int index ); -CvCapture* cvCreateCameraCapture_MIL( int index ); -CvCapture* cvCreateCameraCapture_Giganetix( int index ); -CvCapture * cvCreateCameraCapture_CMU( int index ); -CV_IMPL CvCapture * cvCreateCameraCapture_TYZX( int index ); -CvCapture* cvCreateFileCapture_Win32( const char* filename ); -CvCapture* cvCreateCameraCapture_VFW( int index ); -CvCapture* cvCreateFileCapture_VFW( const char* filename ); -CvVideoWriter* cvCreateVideoWriter_Win32( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); -CvVideoWriter* cvCreateVideoWriter_VFW( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); -CvCapture* cvCreateCameraCapture_DShow( int index ); -CvCapture* cvCreateCameraCapture_MSMF( int index ); -CvCapture* cvCreateFileCapture_MSMF (const char* filename); -CvVideoWriter* cvCreateVideoWriter_MSMF( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); -CvCapture* cvCreateCameraCapture_OpenNI( int index ); -CvCapture* cvCreateFileCapture_OpenNI( const char* filename ); -CvCapture* cvCreateCameraCapture_Android( int index ); -CvCapture* cvCreateCameraCapture_XIMEA( int index ); -CvCapture* cvCreateCameraCapture_AVFoundation(int index); -CvCapture* cvCreateCameraCapture_IntelPerC(int index); - - -CVAPI(int) cvHaveImageReader(const char* filename); -CVAPI(int) cvHaveImageWriter(const char* filename); - -CvCapture* cvCreateFileCapture_Images(const char* filename); -CvVideoWriter* cvCreateVideoWriter_Images(const char* filename); - -CvCapture* cvCreateFileCapture_XINE (const char* filename); - - - - -#define CV_CAP_GSTREAMER_1394 0 -#define CV_CAP_GSTREAMER_V4L 1 -#define CV_CAP_GSTREAMER_V4L2 2 -#define CV_CAP_GSTREAMER_FILE 3 - -CvCapture* cvCreateCapture_GStreamer(int type, const char *filename); -CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char* filename); - - -CvVideoWriter* cvCreateVideoWriter_FFMPEG_proxy( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); - -CvCapture * cvCreateFileCapture_QT (const char * filename); -CvCapture * cvCreateCameraCapture_QT (const int index); - -CvVideoWriter* cvCreateVideoWriter_QT ( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); - -CvCapture* cvCreateFileCapture_AVFoundation (const char * filename); -CvVideoWriter* cvCreateVideoWriter_AVFoundation( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); - - -CvCapture * cvCreateCameraCapture_Unicap (const int index); -CvCapture * cvCreateCameraCapture_PvAPI (const int index); -CvVideoWriter* cvCreateVideoWriter_GStreamer( const char* filename, int fourcc, - double fps, CvSize frameSize, int is_color ); - -//Yannick Verdie 2010 -void cvSetModeWindow_W32(const char* name, double prop_value); -void cvSetModeWindow_GTK(const char* name, double prop_value); -void cvSetModeWindow_CARBON(const char* name, double prop_value); -void cvSetModeWindow_COCOA(const char* name, double prop_value); - -double cvGetModeWindow_W32(const char* name); -double cvGetModeWindow_GTK(const char* name); -double cvGetModeWindow_CARBON(const char* name); -double cvGetModeWindow_COCOA(const char* name); - -double cvGetPropWindowAutoSize_W32(const char* name); -double cvGetPropWindowAutoSize_GTK(const char* name); - -double cvGetRatioWindow_W32(const char* name); -double cvGetRatioWindow_GTK(const char* name); - -double cvGetOpenGlProp_W32(const char* name); -double cvGetOpenGlProp_GTK(const char* name); - -//for QT -#if defined (HAVE_QT) -double cvGetModeWindow_QT(const char* name); -void cvSetModeWindow_QT(const char* name, double prop_value); - -double cvGetPropWindow_QT(const char* name); -void cvSetPropWindow_QT(const char* name,double prop_value); - -double cvGetRatioWindow_QT(const char* name); -void cvSetRatioWindow_QT(const char* name,double prop_value); - -double cvGetOpenGlProp_QT(const char* name); -#endif - - - -/*namespace cv -{ - -class CV_EXPORTS BaseWindow -{ -public: - BaseWindow(const String& name, int flags=0); - virtual ~BaseWindow(); - virtual void close(); - virtual void show(const Mat& mat); - virtual void resize(Size size); - virtual void move(Point topleft); - virtual Size size() const; - virtual Point topLeft() const; - virtual void setGeometry(Point topLeft, Size size); - virtual void getGeometry(Point& topLeft, Size& size) const; - virtual String getTitle() const; - virtual void setTitle(const String& str); - virtual String getName() const; - virtual void setScaleMode(int mode); - virtual int getScaleMode(); - virtual void setScrollPos(double pos); - virtual double getScrollPos() const; - virtual void setScale(double scale); - virtual double getScale() const; - virtual Point getImageCoords(Point pos) const; - virtual Scalar getPixelValue(Point pos, const String& colorspace=String()) const; - - virtual void addTrackbar( const String& trackbar, int low, int high, int step ); -}; - -typedef Ptr Window; - -}*/ - -#endif /* __HIGHGUI_H_ */ diff --git a/modules/highgui/src/utils.cpp b/modules/highgui/src/utils.cpp deleted file mode 100644 index 095a256..0000000 --- a/modules/highgui/src/utils.cpp +++ /dev/null @@ -1,689 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "utils.hpp" - -#define SCALE 14 -#define cR (int)(0.299*(1 << SCALE) + 0.5) -#define cG (int)(0.587*(1 << SCALE) + 0.5) -#define cB ((1 << SCALE) - cR - cG) - -void icvCvt_BGR2Gray_8u_C3C1R( const uchar* rgb, int rgb_step, - uchar* gray, int gray_step, - CvSize size, int _swap_rb ) -{ - int i; - int swap_rb = _swap_rb ? 2 : 0; - for( ; size.height--; gray += gray_step ) - { - for( i = 0; i < size.width; i++, rgb += 3 ) - { - int t = descale( rgb[swap_rb]*cB + rgb[1]*cG + rgb[swap_rb^2]*cR, SCALE ); - gray[i] = (uchar)t; - } - - rgb += rgb_step - size.width*3; - } -} - - -void icvCvt_BGRA2Gray_16u_CnC1R( const ushort* rgb, int rgb_step, - ushort* gray, int gray_step, - CvSize size, int ncn, int _swap_rb ) -{ - int i; - int swap_rb = _swap_rb ? 2 : 0; - for( ; size.height--; gray += gray_step ) - { - for( i = 0; i < size.width; i++, rgb += ncn ) - { - int t = descale( rgb[swap_rb]*cB + rgb[1]*cG + rgb[swap_rb^2]*cR, SCALE ); - gray[i] = (ushort)t; - } - - rgb += rgb_step - size.width*ncn; - } -} - - -void icvCvt_BGRA2Gray_8u_C4C1R( const uchar* rgba, int rgba_step, - uchar* gray, int gray_step, - CvSize size, int _swap_rb ) -{ - int i; - int swap_rb = _swap_rb ? 2 : 0; - for( ; size.height--; gray += gray_step ) - { - for( i = 0; i < size.width; i++, rgba += 4 ) - { - int t = descale( rgba[swap_rb]*cB + rgba[1]*cG + rgba[swap_rb^2]*cR, SCALE ); - gray[i] = (uchar)t; - } - - rgba += rgba_step - size.width*4; - } -} - - -void icvCvt_Gray2BGR_8u_C1C3R( const uchar* gray, int gray_step, - uchar* bgr, int bgr_step, CvSize size ) -{ - int i; - for( ; size.height--; gray += gray_step ) - { - for( i = 0; i < size.width; i++, bgr += 3 ) - { - bgr[0] = bgr[1] = bgr[2] = gray[i]; - } - bgr += bgr_step - size.width*3; - } -} - - -void icvCvt_Gray2BGR_16u_C1C3R( const ushort* gray, int gray_step, - ushort* bgr, int bgr_step, CvSize size ) -{ - int i; - for( ; size.height--; gray += gray_step/sizeof(gray[0]) ) - { - for( i = 0; i < size.width; i++, bgr += 3 ) - { - bgr[0] = bgr[1] = bgr[2] = gray[i]; - } - bgr += bgr_step/sizeof(bgr[0]) - size.width*3; - } -} - - -void icvCvt_BGRA2BGR_8u_C4C3R( const uchar* bgra, int bgra_step, - uchar* bgr, int bgr_step, - CvSize size, int _swap_rb ) -{ - int i; - int swap_rb = _swap_rb ? 2 : 0; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgr += 3, bgra += 4 ) - { - uchar t0 = bgra[swap_rb], t1 = bgra[1]; - bgr[0] = t0; bgr[1] = t1; - t0 = bgra[swap_rb^2]; bgr[2] = t0; - } - bgr += bgr_step - size.width*3; - bgra += bgra_step - size.width*4; - } -} - - -void icvCvt_BGRA2BGR_16u_C4C3R( const ushort* bgra, int bgra_step, - ushort* bgr, int bgr_step, - CvSize size, int _swap_rb ) -{ - int i; - int swap_rb = _swap_rb ? 2 : 0; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgr += 3, bgra += 4 ) - { - ushort t0 = bgra[swap_rb], t1 = bgra[1]; - bgr[0] = t0; bgr[1] = t1; - t0 = bgra[swap_rb^2]; bgr[2] = t0; - } - bgr += bgr_step/sizeof(bgr[0]) - size.width*3; - bgra += bgra_step/sizeof(bgra[0]) - size.width*4; - } -} - - -void icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step, - uchar* rgba, int rgba_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgra += 4, rgba += 4 ) - { - uchar t0 = bgra[0], t1 = bgra[1]; - uchar t2 = bgra[2], t3 = bgra[3]; - rgba[0] = t2; rgba[1] = t1; - rgba[2] = t0; rgba[3] = t3; - } - bgra += bgra_step - size.width*4; - rgba += rgba_step - size.width*4; - } -} - -void icvCvt_BGRA2RGBA_16u_C4R( const ushort* bgra, int bgra_step, - ushort* rgba, int rgba_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgra += 4, rgba += 4 ) - { - ushort t0 = bgra[0], t1 = bgra[1]; - ushort t2 = bgra[2], t3 = bgra[3]; - - rgba[0] = t2; rgba[1] = t1; - rgba[2] = t0; rgba[3] = t3; - } - bgra += bgra_step/sizeof(bgra[0]) - size.width*4; - rgba += rgba_step/sizeof(rgba[0]) - size.width*4; - } -} - - -void icvCvt_BGR2RGB_8u_C3R( const uchar* bgr, int bgr_step, - uchar* rgb, int rgb_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgr += 3, rgb += 3 ) - { - uchar t0 = bgr[0], t1 = bgr[1], t2 = bgr[2]; - rgb[2] = t0; rgb[1] = t1; rgb[0] = t2; - } - bgr += bgr_step - size.width*3; - rgb += rgb_step - size.width*3; - } -} - - -void icvCvt_BGR2RGB_16u_C3R( const ushort* bgr, int bgr_step, - ushort* rgb, int rgb_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgr += 3, rgb += 3 ) - { - ushort t0 = bgr[0], t1 = bgr[1], t2 = bgr[2]; - rgb[2] = t0; rgb[1] = t1; rgb[0] = t2; - } - bgr += bgr_step - size.width*3; - rgb += rgb_step - size.width*3; - } -} - - -typedef unsigned short ushort; - -void icvCvt_BGR5552Gray_8u_C2C1R( const uchar* bgr555, int bgr555_step, - uchar* gray, int gray_step, CvSize size ) -{ - int i; - for( ; size.height--; gray += gray_step, bgr555 += bgr555_step ) - { - for( i = 0; i < size.width; i++ ) - { - int t = descale( ((((ushort*)bgr555)[i] << 3) & 0xf8)*cB + - ((((ushort*)bgr555)[i] >> 2) & 0xf8)*cG + - ((((ushort*)bgr555)[i] >> 7) & 0xf8)*cR, SCALE ); - gray[i] = (uchar)t; - } - } -} - - -void icvCvt_BGR5652Gray_8u_C2C1R( const uchar* bgr565, int bgr565_step, - uchar* gray, int gray_step, CvSize size ) -{ - int i; - for( ; size.height--; gray += gray_step, bgr565 += bgr565_step ) - { - for( i = 0; i < size.width; i++ ) - { - int t = descale( ((((ushort*)bgr565)[i] << 3) & 0xf8)*cB + - ((((ushort*)bgr565)[i] >> 3) & 0xfc)*cG + - ((((ushort*)bgr565)[i] >> 8) & 0xf8)*cR, SCALE ); - gray[i] = (uchar)t; - } - } -} - - -void icvCvt_BGR5552BGR_8u_C2C3R( const uchar* bgr555, int bgr555_step, - uchar* bgr, int bgr_step, CvSize size ) -{ - int i; - for( ; size.height--; bgr555 += bgr555_step ) - { - for( i = 0; i < size.width; i++, bgr += 3 ) - { - int t0 = (((ushort*)bgr555)[i] << 3) & 0xf8; - int t1 = (((ushort*)bgr555)[i] >> 2) & 0xf8; - int t2 = (((ushort*)bgr555)[i] >> 7) & 0xf8; - bgr[0] = (uchar)t0; bgr[1] = (uchar)t1; bgr[2] = (uchar)t2; - } - bgr += bgr_step - size.width*3; - } -} - - -void icvCvt_BGR5652BGR_8u_C2C3R( const uchar* bgr565, int bgr565_step, - uchar* bgr, int bgr_step, CvSize size ) -{ - int i; - for( ; size.height--; bgr565 += bgr565_step ) - { - for( i = 0; i < size.width; i++, bgr += 3 ) - { - int t0 = (((ushort*)bgr565)[i] << 3) & 0xf8; - int t1 = (((ushort*)bgr565)[i] >> 3) & 0xfc; - int t2 = (((ushort*)bgr565)[i] >> 8) & 0xf8; - bgr[0] = (uchar)t0; bgr[1] = (uchar)t1; bgr[2] = (uchar)t2; - } - bgr += bgr_step - size.width*3; - } -} - - -void icvCvt_CMYK2BGR_8u_C4C3R( const uchar* cmyk, int cmyk_step, - uchar* bgr, int bgr_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, bgr += 3, cmyk += 4 ) - { - int c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3]; - c = k - ((255 - c)*k>>8); - m = k - ((255 - m)*k>>8); - y = k - ((255 - y)*k>>8); - bgr[2] = (uchar)c; bgr[1] = (uchar)m; bgr[0] = (uchar)y; - } - bgr += bgr_step - size.width*3; - cmyk += cmyk_step - size.width*4; - } -} - - -void icvCvt_CMYK2Gray_8u_C4C1R( const uchar* cmyk, int cmyk_step, - uchar* gray, int gray_step, CvSize size ) -{ - int i; - for( ; size.height--; ) - { - for( i = 0; i < size.width; i++, cmyk += 4 ) - { - int c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3]; - c = k - ((255 - c)*k>>8); - m = k - ((255 - m)*k>>8); - y = k - ((255 - y)*k>>8); - int t = descale( y*cB + m*cG + c*cR, SCALE ); - gray[i] = (uchar)t; - } - gray += gray_step; - cmyk += cmyk_step - size.width*4; - } -} - - -void CvtPaletteToGray( const PaletteEntry* palette, uchar* grayPalette, int entries ) -{ - int i; - for( i = 0; i < entries; i++ ) - { - icvCvt_BGR2Gray_8u_C3C1R( (uchar*)(palette + i), 0, grayPalette + i, 0, cvSize(1,1) ); - } -} - - -void FillGrayPalette( PaletteEntry* palette, int bpp, bool negative ) -{ - int i, length = 1 << bpp; - int xor_mask = negative ? 255 : 0; - - for( i = 0; i < length; i++ ) - { - int val = (i * 255/(length - 1)) ^ xor_mask; - palette[i].b = palette[i].g = palette[i].r = (uchar)val; - palette[i].a = 0; - } -} - - -bool IsColorPalette( PaletteEntry* palette, int bpp ) -{ - int i, length = 1 << bpp; - - for( i = 0; i < length; i++ ) - { - if( palette[i].b != palette[i].g || - palette[i].b != palette[i].r ) - return true; - } - - return false; -} - - -uchar* FillUniColor( uchar* data, uchar*& line_end, - int step, int width3, - int& y, int height, - int count3, PaletteEntry clr ) -{ - do - { - uchar* end = data + count3; - - if( end > line_end ) - end = line_end; - - count3 -= (int)(end - data); - - for( ; data < end; data += 3 ) - { - WRITE_PIX( data, clr ); - } - - if( data >= line_end ) - { - line_end += step; - data = line_end - width3; - if( ++y >= height ) break; - } - } - while( count3 > 0 ); - - return data; -} - - -uchar* FillUniGray( uchar* data, uchar*& line_end, - int step, int width, - int& y, int height, - int count, uchar clr ) -{ - do - { - uchar* end = data + count; - - if( end > line_end ) - end = line_end; - - count -= (int)(end - data); - - for( ; data < end; data++ ) - { - *data = clr; - } - - if( data >= line_end ) - { - line_end += step; - data = line_end - width; - if( ++y >= height ) break; - } - } - while( count > 0 ); - - return data; -} - - -uchar* FillColorRow8( uchar* data, uchar* indices, int len, PaletteEntry* palette ) -{ - uchar* end = data + len*3; - while( (data += 3) < end ) - { - *((PaletteEntry*)(data-3)) = palette[*indices++]; - } - PaletteEntry clr = palette[indices[0]]; - WRITE_PIX( data - 3, clr ); - return data; -} - - -uchar* FillGrayRow8( uchar* data, uchar* indices, int len, uchar* palette ) -{ - int i; - for( i = 0; i < len; i++ ) - { - data[i] = palette[indices[i]]; - } - return data + len; -} - - -uchar* FillColorRow4( uchar* data, uchar* indices, int len, PaletteEntry* palette ) -{ - uchar* end = data + len*3; - - while( (data += 6) < end ) - { - int idx = *indices++; - *((PaletteEntry*)(data-6)) = palette[idx >> 4]; - *((PaletteEntry*)(data-3)) = palette[idx & 15]; - } - - int idx = indices[0]; - PaletteEntry clr = palette[idx >> 4]; - WRITE_PIX( data - 6, clr ); - - if( data == end ) - { - clr = palette[idx & 15]; - WRITE_PIX( data - 3, clr ); - } - return end; -} - - -uchar* FillGrayRow4( uchar* data, uchar* indices, int len, uchar* palette ) -{ - uchar* end = data + len; - while( (data += 2) < end ) - { - int idx = *indices++; - data[-2] = palette[idx >> 4]; - data[-1] = palette[idx & 15]; - } - - int idx = indices[0]; - uchar clr = palette[idx >> 4]; - data[-2] = clr; - - if( data == end ) - { - clr = palette[idx & 15]; - data[-1] = clr; - } - return end; -} - - -uchar* FillColorRow1( uchar* data, uchar* indices, int len, PaletteEntry* palette ) -{ - uchar* end = data + len*3; - - while( (data += 24) < end ) - { - int idx = *indices++; - *((PaletteEntry*)(data - 24)) = palette[(idx & 128) != 0]; - *((PaletteEntry*)(data - 21)) = palette[(idx & 64) != 0]; - *((PaletteEntry*)(data - 18)) = palette[(idx & 32) != 0]; - *((PaletteEntry*)(data - 15)) = palette[(idx & 16) != 0]; - *((PaletteEntry*)(data - 12)) = palette[(idx & 8) != 0]; - *((PaletteEntry*)(data - 9)) = palette[(idx & 4) != 0]; - *((PaletteEntry*)(data - 6)) = palette[(idx & 2) != 0]; - *((PaletteEntry*)(data - 3)) = palette[(idx & 1) != 0]; - } - - int idx = indices[0] << 24; - for( data -= 24; data < end; data += 3, idx += idx ) - { - PaletteEntry clr = palette[idx < 0]; - WRITE_PIX( data, clr ); - } - - return data; -} - - -uchar* FillGrayRow1( uchar* data, uchar* indices, int len, uchar* palette ) -{ - uchar* end = data + len; - - while( (data += 8) < end ) - { - int idx = *indices++; - *((uchar*)(data - 8)) = palette[(idx & 128) != 0]; - *((uchar*)(data - 7)) = palette[(idx & 64) != 0]; - *((uchar*)(data - 6)) = palette[(idx & 32) != 0]; - *((uchar*)(data - 5)) = palette[(idx & 16) != 0]; - *((uchar*)(data - 4)) = palette[(idx & 8) != 0]; - *((uchar*)(data - 3)) = palette[(idx & 4) != 0]; - *((uchar*)(data - 2)) = palette[(idx & 2) != 0]; - *((uchar*)(data - 1)) = palette[(idx & 1) != 0]; - } - - int idx = indices[0] << 24; - for( data -= 8; data < end; data++, idx += idx ) - { - data[0] = palette[idx < 0]; - } - - return data; -} - - -CV_IMPL void -cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags ) -{ - CvMat* temp = 0; - - CV_FUNCNAME( "cvConvertImage" ); - - __BEGIN__; - - CvMat srcstub, *src; - CvMat dststub, *dst; - int src_cn, dst_cn, swap_rb = flags & CV_CVTIMG_SWAP_RB; - - CV_CALL( src = cvGetMat( srcarr, &srcstub )); - CV_CALL( dst = cvGetMat( dstarr, &dststub )); - - src_cn = CV_MAT_CN( src->type ); - dst_cn = CV_MAT_CN( dst->type ); - - if( src_cn != 1 && src_cn != 3 && src_cn != 4 ) - CV_ERROR( CV_BadNumChannels, "Source image must have 1, 3 or 4 channels" ); - - if( CV_MAT_DEPTH( dst->type ) != CV_8U ) - CV_ERROR( CV_BadDepth, "Destination image must be 8u" ); - - if( CV_MAT_CN(dst->type) != 1 && CV_MAT_CN(dst->type) != 3 ) - CV_ERROR( CV_BadNumChannels, "Destination image must have 1 or 3 channels" ); - - if( !CV_ARE_DEPTHS_EQ( src, dst )) - { - int src_depth = CV_MAT_DEPTH(src->type); - double scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255; - double shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0; - - if( !CV_ARE_CNS_EQ( src, dst )) - { - temp = cvCreateMat( src->height, src->width, - (src->type & CV_MAT_CN_MASK)|(dst->type & CV_MAT_DEPTH_MASK)); - cvConvertScale( src, temp, scale, shift ); - src = temp; - } - else - { - cvConvertScale( src, dst, scale, shift ); - src = dst; - } - } - - if( src_cn != dst_cn || (src_cn == 3 && swap_rb) ) - { - uchar *s = src->data.ptr, *d = dst->data.ptr; - int s_step = src->step, d_step = dst->step; - int code = src_cn*10 + dst_cn; - CvSize size = { src->cols, src->rows }; - - if( CV_IS_MAT_CONT(src->type & dst->type) ) - { - size.width *= size.height; - size.height = 1; - s_step = d_step = CV_STUB_STEP; - } - - switch( code ) - { - case 13: - icvCvt_Gray2BGR_8u_C1C3R( s, s_step, d, d_step, size ); - break; - case 31: - icvCvt_BGR2Gray_8u_C3C1R( s, s_step, d, d_step, size, swap_rb ); - break; - case 33: - assert( swap_rb ); - icvCvt_RGB2BGR_8u_C3R( s, s_step, d, d_step, size ); - break; - case 41: - icvCvt_BGRA2Gray_8u_C4C1R( s, s_step, d, d_step, size, swap_rb ); - break; - case 43: - icvCvt_BGRA2BGR_8u_C4C3R( s, s_step, d, d_step, size, swap_rb ); - break; - default: - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported combination of input/output formats" ); - } - src = dst; - } - - if( flags & CV_CVTIMG_FLIP ) - { - CV_CALL( cvFlip( src, dst, 0 )); - } - else if( src != dst ) - { - CV_CALL( cvCopy( src, dst )); - } - - __END__; - - cvReleaseMat( &temp ); -} diff --git a/modules/highgui/src/utils.hpp b/modules/highgui/src/utils.hpp deleted file mode 100644 index cab1060..0000000 --- a/modules/highgui/src/utils.hpp +++ /dev/null @@ -1,128 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _UTILS_H_ -#define _UTILS_H_ - -struct PaletteEntry -{ - unsigned char b, g, r, a; -}; - -#define WRITE_PIX( ptr, clr ) \ - (((uchar*)(ptr))[0] = (clr).b, \ - ((uchar*)(ptr))[1] = (clr).g, \ - ((uchar*)(ptr))[2] = (clr).r) - -#define descale(x,n) (((x) + (1 << ((n)-1))) >> (n)) -#define saturate(x) (uchar)(((x) & ~255) == 0 ? (x) : ~((x)>>31)) - -void icvCvt_BGR2Gray_8u_C3C1R( const uchar* bgr, int bgr_step, - uchar* gray, int gray_step, - CvSize size, int swap_rb=0 ); -void icvCvt_BGRA2Gray_8u_C4C1R( const uchar* bgra, int bgra_step, - uchar* gray, int gray_step, - CvSize size, int swap_rb=0 ); -void icvCvt_BGRA2Gray_16u_CnC1R( const ushort* bgra, int bgra_step, - ushort* gray, int gray_step, - CvSize size, int ncn, int swap_rb=0 ); - -void icvCvt_Gray2BGR_8u_C1C3R( const uchar* gray, int gray_step, - uchar* bgr, int bgr_step, CvSize size ); -void icvCvt_Gray2BGR_16u_C1C3R( const ushort* gray, int gray_step, - ushort* bgr, int bgr_step, CvSize size ); - -void icvCvt_BGRA2BGR_8u_C4C3R( const uchar* bgra, int bgra_step, - uchar* bgr, int bgr_step, - CvSize size, int swap_rb=0 ); -void icvCvt_BGRA2BGR_16u_C4C3R( const ushort* bgra, int bgra_step, - ushort* bgr, int bgr_step, - CvSize size, int _swap_rb ); - -void icvCvt_BGR2RGB_8u_C3R( const uchar* bgr, int bgr_step, - uchar* rgb, int rgb_step, CvSize size ); -#define icvCvt_RGB2BGR_8u_C3R icvCvt_BGR2RGB_8u_C3R -void icvCvt_BGR2RGB_16u_C3R( const ushort* bgr, int bgr_step, - ushort* rgb, int rgb_step, CvSize size ); -#define icvCvt_RGB2BGR_16u_C3R icvCvt_BGR2RGB_16u_C3R - -void icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step, - uchar* rgba, int rgba_step, CvSize size ); -#define icvCvt_RGBA2BGRA_8u_C4R icvCvt_BGRA2RGBA_8u_C4R - -void icvCvt_BGRA2RGBA_16u_C4R( const ushort* bgra, int bgra_step, - ushort* rgba, int rgba_step, CvSize size ); -#define icvCvt_RGBA2BGRA_16u_C4R icvCvt_BGRA2RGBA_16u_C4R - -void icvCvt_BGR5552Gray_8u_C2C1R( const uchar* bgr555, int bgr555_step, - uchar* gray, int gray_step, CvSize size ); -void icvCvt_BGR5652Gray_8u_C2C1R( const uchar* bgr565, int bgr565_step, - uchar* gray, int gray_step, CvSize size ); -void icvCvt_BGR5552BGR_8u_C2C3R( const uchar* bgr555, int bgr555_step, - uchar* bgr, int bgr_step, CvSize size ); -void icvCvt_BGR5652BGR_8u_C2C3R( const uchar* bgr565, int bgr565_step, - uchar* bgr, int bgr_step, CvSize size ); -void icvCvt_CMYK2BGR_8u_C4C3R( const uchar* cmyk, int cmyk_step, - uchar* bgr, int bgr_step, CvSize size ); -void icvCvt_CMYK2Gray_8u_C4C1R( const uchar* ycck, int ycck_step, - uchar* gray, int gray_step, CvSize size ); - -void FillGrayPalette( PaletteEntry* palette, int bpp, bool negative = false ); -bool IsColorPalette( PaletteEntry* palette, int bpp ); -void CvtPaletteToGray( const PaletteEntry* palette, uchar* grayPalette, int entries ); -uchar* FillUniColor( uchar* data, uchar*& line_end, int step, int width3, - int& y, int height, int count3, PaletteEntry clr ); -uchar* FillUniGray( uchar* data, uchar*& line_end, int step, int width3, - int& y, int height, int count3, uchar clr ); - -uchar* FillColorRow8( uchar* data, uchar* indices, int len, PaletteEntry* palette ); -uchar* FillGrayRow8( uchar* data, uchar* indices, int len, uchar* palette ); -uchar* FillColorRow4( uchar* data, uchar* indices, int len, PaletteEntry* palette ); -uchar* FillGrayRow4( uchar* data, uchar* indices, int len, uchar* palette ); -uchar* FillColorRow1( uchar* data, uchar* indices, int len, PaletteEntry* palette ); -uchar* FillGrayRow1( uchar* data, uchar* indices, int len, uchar* palette ); - -CV_INLINE bool isBigEndian( void ) -{ - return (((const int*)"\0\x1\x2\x3\x4\x5\x6\x7")[0] & 255) != 0; -} - -#endif/*_UTILS_H_*/ diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp deleted file mode 100644 index 1e47bf6..0000000 --- a/modules/highgui/src/window.cpp +++ /dev/null @@ -1,627 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include -#include "opencv2/core/opengl_interop.hpp" - -// in later times, use this file as a dispatcher to implementations like cvcap.cpp - -CV_IMPL void cvSetWindowProperty(const char* name, int prop_id, double prop_value) -{ - switch(prop_id) - { - //change between fullscreen or not. - case CV_WND_PROP_FULLSCREEN: - - if (!name || (prop_value!=CV_WINDOW_NORMAL && prop_value!=CV_WINDOW_FULLSCREEN))//bad argument - break; - - #if defined (HAVE_QT) - cvSetModeWindow_QT(name,prop_value); - #elif defined(HAVE_WIN32UI) - cvSetModeWindow_W32(name,prop_value); - #elif defined (HAVE_GTK) - cvSetModeWindow_GTK(name,prop_value); - #elif defined (HAVE_CARBON) - cvSetModeWindow_CARBON(name,prop_value); - #elif defined (HAVE_COCOA) - cvSetModeWindow_COCOA(name,prop_value); - #endif - break; - - case CV_WND_PROP_AUTOSIZE: - #if defined (HAVE_QT) - cvSetPropWindow_QT(name,prop_value); - #endif - break; - - case CV_WND_PROP_ASPECTRATIO: - #if defined (HAVE_QT) - cvSetRatioWindow_QT(name,prop_value); - #endif - break; - - default:; - } -} - -/* return -1 if error */ -CV_IMPL double cvGetWindowProperty(const char* name, int prop_id) -{ - if (!name) - return -1; - - switch(prop_id) - { - case CV_WND_PROP_FULLSCREEN: - - #if defined (HAVE_QT) - return cvGetModeWindow_QT(name); - #elif defined(HAVE_WIN32UI) - return cvGetModeWindow_W32(name); - #elif defined (HAVE_GTK) - return cvGetModeWindow_GTK(name); - #elif defined (HAVE_CARBON) - return cvGetModeWindow_CARBON(name); - #elif defined (HAVE_COCOA) - return cvGetModeWindow_COCOA(name); - #else - return -1; - #endif - break; - - case CV_WND_PROP_AUTOSIZE: - - #if defined (HAVE_QT) - return cvGetPropWindow_QT(name); - #elif defined(HAVE_WIN32UI) - return cvGetPropWindowAutoSize_W32(name); - #elif defined (HAVE_GTK) - return cvGetPropWindowAutoSize_GTK(name); - #else - return -1; - #endif - break; - - case CV_WND_PROP_ASPECTRATIO: - - #if defined (HAVE_QT) - return cvGetRatioWindow_QT(name); - #elif defined(HAVE_WIN32UI) - return cvGetRatioWindow_W32(name); - #elif defined (HAVE_GTK) - return cvGetRatioWindow_GTK(name); - #else - return -1; - #endif - break; - - case CV_WND_PROP_OPENGL: - - #if defined (HAVE_QT) - return cvGetOpenGlProp_QT(name); - #elif defined(HAVE_WIN32UI) - return cvGetOpenGlProp_W32(name); - #elif defined (HAVE_GTK) - return cvGetOpenGlProp_GTK(name); - #else - return -1; - #endif - break; - - default: - return -1; - } -} - -void cv::namedWindow( const string& winname, int flags ) -{ - cvNamedWindow( winname.c_str(), flags ); -} - -void cv::destroyWindow( const string& winname ) -{ - cvDestroyWindow( winname.c_str() ); -} - -void cv::destroyAllWindows() -{ - cvDestroyAllWindows(); -} - -void cv::resizeWindow( const string& winname, int width, int height ) -{ - cvResizeWindow( winname.c_str(), width, height ); -} - -void cv::moveWindow( const string& winname, int x, int y ) -{ - cvMoveWindow( winname.c_str(), x, y ); -} - -void cv::setWindowProperty(const string& winname, int prop_id, double prop_value) -{ - cvSetWindowProperty( winname.c_str(), prop_id, prop_value); -} - -double cv::getWindowProperty(const string& winname, int prop_id) -{ - return cvGetWindowProperty(winname.c_str(), prop_id); -} - -int cv::waitKey(int delay) -{ - return cvWaitKey(delay); -} - -int cv::createTrackbar(const string& trackbarName, const string& winName, - int* value, int count, TrackbarCallback callback, - void* userdata) -{ - return cvCreateTrackbar2(trackbarName.c_str(), winName.c_str(), - value, count, callback, userdata); -} - -void cv::setTrackbarPos( const string& trackbarName, const string& winName, int value ) -{ - cvSetTrackbarPos(trackbarName.c_str(), winName.c_str(), value ); -} - -int cv::getTrackbarPos( const string& trackbarName, const string& winName ) -{ - return cvGetTrackbarPos(trackbarName.c_str(), winName.c_str()); -} - -void cv::setMouseCallback( const string& windowName, MouseCallback onMouse, void* param) -{ - cvSetMouseCallback(windowName.c_str(), onMouse, param); -} - -int cv::startWindowThread() -{ - return cvStartWindowThread(); -} - -// OpenGL support - -void cv::setOpenGlDrawCallback(const string& name, OpenGlDrawCallback callback, void* userdata) -{ - cvSetOpenGlDrawCallback(name.c_str(), callback, userdata); -} - -void cv::setOpenGlContext(const string& windowName) -{ - cvSetOpenGlContext(windowName.c_str()); -} - -void cv::updateWindow(const string& windowName) -{ - cvUpdateWindow(windowName.c_str()); -} - -#ifdef HAVE_OPENGL -namespace -{ - std::map wndTexs; - std::map ownWndTexs; - std::map ownWndBufs; - - void glDrawTextureCallback(void* userdata) - { - cv::ogl::Texture2D* texObj = static_cast(userdata); - - cv::ogl::render(*texObj); - } -} -#endif // HAVE_OPENGL - -void cv::imshow( const string& winname, InputArray _img ) -{ - const Size size = _img.size(); -#ifndef HAVE_OPENGL - CV_Assert(size.width>0 && size.height>0); - { - Mat img = _img.getMat(); - CvMat c_img = img; - cvShowImage(winname.c_str(), &c_img); - } -#else - const double useGl = getWindowProperty(winname, WND_PROP_OPENGL); - CV_Assert(size.width>0 && size.height>0); - - if (useGl <= 0) - { - Mat img = _img.getMat(); - CvMat c_img = img; - cvShowImage(winname.c_str(), &c_img); - } - else - { - const double autoSize = getWindowProperty(winname, WND_PROP_AUTOSIZE); - - if (autoSize > 0) - { - resizeWindow(winname, size.width, size.height); - } - - setOpenGlContext(winname); - - if (_img.kind() == _InputArray::OPENGL_TEXTURE) - { - cv::ogl::Texture2D& tex = wndTexs[winname]; - - tex = _img.getOGlTexture2D(); - - tex.setAutoRelease(false); - - setOpenGlDrawCallback(winname, glDrawTextureCallback, &tex); - } - else - { - cv::ogl::Texture2D& tex = ownWndTexs[winname]; - - if (_img.kind() == _InputArray::GPU_MAT) - { - cv::ogl::Buffer& buf = ownWndBufs[winname]; - buf.copyFrom(_img); - buf.setAutoRelease(false); - - tex.copyFrom(buf); - tex.setAutoRelease(false); - } - else - { - tex.copyFrom(_img); - } - - tex.setAutoRelease(false); - - setOpenGlDrawCallback(winname, glDrawTextureCallback, &tex); - } - - updateWindow(winname); - } -#endif -} - -void cv::pointCloudShow(const string&, const GlCamera&, const GlArrays&) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -void cv::pointCloudShow(const string&, const GlCamera&, InputArray, InputArray) -{ - CV_Error(CV_StsNotImplemented, "This function in deprecated, do not use it"); -} - -// Without OpenGL - -#ifndef HAVE_OPENGL - -CV_IMPL void cvSetOpenGlDrawCallback(const char*, CvOpenGlDrawCallback, void*) -{ - CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); -} - -CV_IMPL void cvSetOpenGlContext(const char*) -{ - CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); -} - -CV_IMPL void cvUpdateWindow(const char*) -{ - CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); -} - -#endif // !HAVE_OPENGL - -#if defined (HAVE_QT) - -CvFont cv::fontQt(const string& nameFont, int pointSize, Scalar color, int weight, int style, int /*spacing*/) -{ -return cvFontQt(nameFont.c_str(), pointSize,color,weight, style); -} - -void cv::addText( const Mat& img, const string& text, Point org, CvFont font) -{ - CvMat _img = img; - cvAddText( &_img, text.c_str(), org,&font); -} - -void cv::displayStatusBar(const string& name, const string& text, int delayms) -{ - cvDisplayStatusBar(name.c_str(),text.c_str(), delayms); -} - -void cv::displayOverlay(const string& name, const string& text, int delayms) -{ - cvDisplayOverlay(name.c_str(),text.c_str(), delayms); -} - -int cv::startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]) -{ - return cvStartLoop(pt2Func, argc, argv); -} - -void cv::stopLoop() -{ - cvStopLoop(); -} - -void cv::saveWindowParameters(const string& windowName) -{ - cvSaveWindowParameters(windowName.c_str()); -} - -void cv::loadWindowParameters(const string& windowName) -{ - cvLoadWindowParameters(windowName.c_str()); -} - -int cv::createButton(const string& button_name, ButtonCallback on_change, void* userdata, int button_type , bool initial_button_state ) -{ - return cvCreateButton(button_name.c_str(), on_change, userdata, button_type , initial_button_state ); -} - -#else - -CvFont cv::fontQt(const string&, int, Scalar, int, int, int) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); - return CvFont(); -} - -void cv::addText( const Mat&, const string&, Point, CvFont) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -void cv::displayStatusBar(const string&, const string&, int) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -void cv::displayOverlay(const string&, const string&, int ) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -int cv::startLoop(int (*)(int argc, char *argv[]), int , char**) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); - return 0; -} - -void cv::stopLoop() -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -void cv::saveWindowParameters(const string&) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -void cv::loadWindowParameters(const string&) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); -} - -int cv::createButton(const string&, ButtonCallback, void*, int , bool ) -{ - CV_Error(CV_StsNotImplemented, "The library is compiled without QT support"); - return 0; -} - -#endif - -#if defined(HAVE_WIN32UI) // see window_w32.cpp -#elif defined (HAVE_GTK) // see window_gtk.cpp -#elif defined (HAVE_COCOA) // see window_carbon.cpp -#elif defined (HAVE_CARBON) -#elif defined (HAVE_QT) //YV see window_QT.cpp - -#else - -// No windowing system present at compile time ;-( -// -// We will build place holders that don't break the API but give an error -// at runtime. This way people can choose to replace an installed HighGUI -// version with a more capable one without a need to recompile dependent -// applications or libraries. - - -#define CV_NO_GUI_ERROR(funcname) \ - cvError( CV_StsError, funcname, \ - "The function is not implemented. " \ - "Rebuild the library with Windows, GTK+ 2.x or Carbon support. "\ - "If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script", \ - __FILE__, __LINE__ ) - - -CV_IMPL int cvNamedWindow( const char*, int ) -{ - CV_NO_GUI_ERROR("cvNamedWindow"); - return -1; -} - -CV_IMPL void cvDestroyWindow( const char* ) -{ - CV_NO_GUI_ERROR( "cvDestroyWindow" ); -} - -CV_IMPL void -cvDestroyAllWindows( void ) -{ - CV_NO_GUI_ERROR( "cvDestroyAllWindows" ); -} - -CV_IMPL void -cvShowImage( const char*, const CvArr* ) -{ - CV_NO_GUI_ERROR( "cvShowImage" ); -} - -CV_IMPL void cvResizeWindow( const char*, int, int ) -{ - CV_NO_GUI_ERROR( "cvResizeWindow" ); -} - -CV_IMPL void cvMoveWindow( const char*, int, int ) -{ - CV_NO_GUI_ERROR( "cvMoveWindow" ); -} - -CV_IMPL int -cvCreateTrackbar( const char*, const char*, - int*, int, CvTrackbarCallback ) -{ - CV_NO_GUI_ERROR( "cvCreateTrackbar" ); - return -1; -} - -CV_IMPL int -cvCreateTrackbar2( const char* /*trackbar_name*/, const char* /*window_name*/, - int* /*val*/, int /*count*/, CvTrackbarCallback2 /*on_notify2*/, - void* /*userdata*/ ) -{ - CV_NO_GUI_ERROR( "cvCreateTrackbar2" ); - return -1; -} - -CV_IMPL void -cvSetMouseCallback( const char*, CvMouseCallback, void* ) -{ - CV_NO_GUI_ERROR( "cvSetMouseCallback" ); -} - -CV_IMPL int cvGetTrackbarPos( const char*, const char* ) -{ - CV_NO_GUI_ERROR( "cvGetTrackbarPos" ); - return -1; -} - -CV_IMPL void cvSetTrackbarPos( const char*, const char*, int ) -{ - CV_NO_GUI_ERROR( "cvSetTrackbarPos" ); -} - -CV_IMPL void* cvGetWindowHandle( const char* ) -{ - CV_NO_GUI_ERROR( "cvGetWindowHandle" ); - return 0; -} - -CV_IMPL const char* cvGetWindowName( void* ) -{ - CV_NO_GUI_ERROR( "cvGetWindowName" ); - return 0; -} - -CV_IMPL int cvWaitKey( int ) -{ - CV_NO_GUI_ERROR( "cvWaitKey" ); - return -1; -} - -CV_IMPL int cvInitSystem( int , char** ) -{ - - CV_NO_GUI_ERROR( "cvInitSystem" ); - return -1; -} - -CV_IMPL int cvStartWindowThread() -{ - - CV_NO_GUI_ERROR( "cvStartWindowThread" ); - return -1; -} - -//-------- Qt --------- -CV_IMPL void cvAddText( const CvArr*, const char*, CvPoint , CvFont* ) -{ - CV_NO_GUI_ERROR("cvAddText"); -} - -CV_IMPL void cvDisplayStatusBar(const char* , const char* , int ) -{ - CV_NO_GUI_ERROR("cvDisplayStatusBar"); -} - -CV_IMPL void cvDisplayOverlay(const char* , const char* , int ) -{ - CV_NO_GUI_ERROR("cvNamedWindow"); -} - -CV_IMPL int cvStartLoop(int (*)(int argc, char *argv[]), int , char* argv[]) -{ - (void)argv; - CV_NO_GUI_ERROR("cvStartLoop"); - return -1; -} - -CV_IMPL void cvStopLoop() -{ - CV_NO_GUI_ERROR("cvStopLoop"); -} - -CV_IMPL void cvSaveWindowParameters(const char* ) -{ - CV_NO_GUI_ERROR("cvSaveWindowParameters"); -} - -// CV_IMPL void cvLoadWindowParameterss(const char* name) -// { -// CV_NO_GUI_ERROR("cvLoadWindowParameters"); -// } - -CV_IMPL int cvCreateButton(const char*, void (*)(int, void*), void*, int, int) -{ - CV_NO_GUI_ERROR("cvCreateButton"); - return -1; -} - - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp deleted file mode 100644 index 64ebf08..0000000 --- a/modules/highgui/src/window_QT.cpp +++ /dev/null @@ -1,3233 +0,0 @@ -//IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. - - -// License Agreement -// For Open Source Computer Vision Library - -//Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -//Copyright (C) 2008-2010, Willow Garage Inc., all rights reserved. -//Third party copyrights are property of their respective owners. - -//Redistribution and use in source and binary forms, with or without modification, -//are permitted provided that the following conditions are met: - -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. - -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. - -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -//indirect, incidental, special, exemplary, or consequential damages -//(including, but not limited to, procurement of substitute goods or services; -//loss of use, data, or profits; or business interruption) however caused -//and on any theory of liability, whether in contract, strict liability, -//or tort (including negligence or otherwise) arising in any way out of -//the use of this software, even if advised of the possibility of such damage. - -//--------------------Google Code 2010 -- Yannick Verdie--------------------// - -#include "precomp.hpp" - -#if defined(HAVE_QT) - -#include - -#include - -#include - -#ifdef _WIN32 -#include -#else -#include -#endif - -#ifdef HAVE_QT_OPENGL - #ifdef Q_WS_X11 - #include - #endif -#endif - - -//Static and global first -static GuiReceiver *guiMainThread = NULL; -static int parameterSystemC = 1; -static char* parameterSystemV[] = {(char*)""}; -static bool multiThreads = false; -static int last_key = -1; -QWaitCondition key_pressed; -QMutex mutexKey; -static const unsigned int threshold_zoom_img_region = 30; -//the minimum zoom value to start displaying the values in the grid -//that is also the number of pixel per grid - -static CvWinProperties* global_control_panel = NULL; -//end static and global - - -CV_IMPL CvFont cvFontQt(const char* nameFont, int pointSize,CvScalar color,int weight,int style, int spacing) -{ - /* - //nameFont <- only Qt - //CvScalar color <- only Qt (blue_component, green_component, red\_component[, alpha_component]) - int font_face;//<- style in Qt - const int* ascii; - const int* greek; - const int* cyrillic; - float hscale, vscale; - float shear; - int thickness;//<- weight in Qt - float dx;//spacing letter in Qt (0 default) in pixel - int line_type;//<- pointSize in Qt - */ - CvFont f = {nameFont,color,style,NULL,NULL,NULL,0,0,0,weight,spacing,pointSize}; - return f; -} - - -CV_IMPL void cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont* font) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "putText", - Qt::AutoConnection, - Q_ARG(void*, (void*) img), - Q_ARG(QString,QString(text)), - Q_ARG(QPoint, QPoint(org.x,org.y)), - Q_ARG(void*,(void*) font)); -} - - -double cvGetRatioWindow_QT(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - double result = -1; - QMetaObject::invokeMethod(guiMainThread, - "getRatioWindow", - //Qt::DirectConnection, - Qt::AutoConnection, - Q_RETURN_ARG(double, result), - Q_ARG(QString, QString(name))); - - return result; -} - - -void cvSetRatioWindow_QT(const char* name,double prop_value) -{ - - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "setRatioWindow", - Qt::AutoConnection, - Q_ARG(QString, QString(name)), - Q_ARG(double, prop_value)); -} - - -double cvGetPropWindow_QT(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - double result = -1; - QMetaObject::invokeMethod(guiMainThread, - "getPropWindow", - //Qt::DirectConnection, - Qt::AutoConnection, - Q_RETURN_ARG(double, result), - Q_ARG(QString, QString(name))); - - return result; -} - - -void cvSetPropWindow_QT(const char* name,double prop_value) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "setPropWindow", - Qt::AutoConnection, - Q_ARG(QString, QString(name)), - Q_ARG(double, prop_value)); -} - - -void cvSetModeWindow_QT(const char* name, double prop_value) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "toggleFullScreen", - Qt::AutoConnection, - Q_ARG(QString, QString(name)), - Q_ARG(double, prop_value)); -} - - -double cvGetModeWindow_QT(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - double result = -1; - - QMetaObject::invokeMethod(guiMainThread, - "isFullScreen", - Qt::AutoConnection, - Q_RETURN_ARG(double, result), - Q_ARG(QString, QString(name))); - - return result; -} - - -CV_IMPL void cvDisplayOverlay(const char* name, const char* text, int delayms) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "displayInfo", - Qt::AutoConnection, - //Qt::DirectConnection, - Q_ARG(QString, QString(name)), - Q_ARG(QString, QString(text)), - Q_ARG(int, delayms)); -} - - -CV_IMPL void cvSaveWindowParameters(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "saveWindowParameters", - Qt::AutoConnection, - Q_ARG(QString, QString(name))); -} - - -CV_IMPL void cvLoadWindowParameters(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "loadWindowParameters", - Qt::AutoConnection, - Q_ARG(QString, QString(name))); -} - - -CV_IMPL void cvDisplayStatusBar(const char* name, const char* text, int delayms) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "displayStatusBar", - Qt::AutoConnection, - //Qt::DirectConnection, - Q_ARG(QString, QString(name)), - Q_ARG(QString, QString(text)), - Q_ARG(int, delayms)); -} - - -CV_IMPL int cvWaitKey(int delay) -{ - int result = -1; - - if (!guiMainThread) - return result; - - unsigned long delayms = delay <= 0 ? ULONG_MAX : delay; //in milliseconds - - if (multiThreads) - { - mutexKey.lock(); - if (key_pressed.wait(&mutexKey, delayms)) //false if timeout - { - result = last_key; - } - last_key = -1; - mutexKey.unlock(); - } - else - { - //cannot use wait here because events will not be distributed before processEvents (the main eventLoop is broken) - //so I create a Thread for the QTimer - - if (delay > 0) - guiMainThread->timer->start(delay); - - //QMutex dummy; - - while (!guiMainThread->bTimeOut) - { - qApp->processEvents(QEventLoop::AllEvents); - - if (!guiMainThread)//when all the windows are deleted - return result; - - mutexKey.lock(); - if (last_key != -1) - { - result = last_key; - last_key = -1; - guiMainThread->timer->stop(); - //printf("keypressed\n"); - } - mutexKey.unlock(); - - if (result!=-1) - { - break; - } - else - { - /* - * //will not work, I broke the event loop !!!! - dummy.lock(); - QWaitCondition waitCondition; - waitCondition.wait(&dummy, 2); - */ - - //to decrease CPU usage - //sleep 1 millisecond -#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64 - Sleep(1); -#else - usleep(1000); -#endif - } - } - - guiMainThread->bTimeOut = false; - } - - return result; -} - - -//Yannick Verdie -//This function is experimental and some functions (such as cvSet/getWindowProperty will not work) -//We recommend not using this function for now -CV_IMPL int cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]) -{ - multiThreads = true; - QFuture future = QtConcurrent::run(pt2Func, argc, argv); - return guiMainThread->start(); -} - - -CV_IMPL void cvStopLoop() -{ - qApp->exit(); -} - - -static CvWindow* icvFindWindowByName(QString name) -{ - CvWindow* window = 0; - - //This is not a very clean way to do the stuff. Indeed, QAction automatically generate toolTil (QLabel) - //that can be grabbed here and crash the code at 'w->param_name==name'. - foreach (QWidget* widget, QApplication::topLevelWidgets()) - { - if (widget->isWindow() && !widget->parentWidget())//is a window without parent - { - CvWinModel* temp = (CvWinModel*) widget; - - if (temp->type == type_CvWindow) - { - CvWindow* w = (CvWindow*) temp; - if (w->windowTitle() == name) - { - window = w; - break; - } - } - } - } - - return window; -} - - -static CvBar* icvFindBarByName(QBoxLayout* layout, QString name_bar, typeBar type) -{ - if (!layout) - return NULL; - - int stop_index = layout->layout()->count(); - - for (int i = 0; i < stop_index; ++i) - { - CvBar* t = (CvBar*) layout->layout()->itemAt(i); - - if (t->type == type && t->name_bar == name_bar) - return t; - } - - return NULL; -} - - -static CvTrackbar* icvFindTrackBarByName(const char* name_trackbar, const char* name_window, QBoxLayout* layout = NULL) -{ - QString nameQt(name_trackbar); - - if (!name_window && global_control_panel) //window name is null and we have a control panel - layout = global_control_panel->myLayout; - - if (!layout) - { - QPointer w = icvFindWindowByName(QLatin1String(name_window)); - - if (!w) - CV_Error(CV_StsNullPtr, "NULL window handler"); - - if (w->param_gui_mode == CV_GUI_NORMAL) - return (CvTrackbar*) icvFindBarByName(w->myBarLayout, nameQt, type_CvTrackbar); - - if (w->param_gui_mode == CV_GUI_EXPANDED) - { - CvBar* result = icvFindBarByName(w->myBarLayout, nameQt, type_CvTrackbar); - - if (result) - return (CvTrackbar*) result; - - return (CvTrackbar*) icvFindBarByName(global_control_panel->myLayout, nameQt, type_CvTrackbar); - } - - return NULL; - } - else - { - //layout was specified - return (CvTrackbar*) icvFindBarByName(layout, nameQt, type_CvTrackbar); - } -} - -/* -static CvButtonbar* icvFindButtonBarByName(const char* button_name, QBoxLayout* layout) -{ - QString nameQt(button_name); - return (CvButtonbar*) icvFindBarByName(layout, nameQt, type_CvButtonbar); -} -*/ - -static int icvInitSystem(int* c, char** v) -{ - //"For any GUI application using Qt, there is precisely one QApplication object" - if (!QApplication::instance()) - { - new QApplication(*c, v); - - qDebug() << "init done"; - -#ifdef HAVE_QT_OPENGL - qDebug() << "opengl support available"; -#endif - } - - return 0; -} - - -CV_IMPL int cvInitSystem(int, char**) -{ - icvInitSystem(¶meterSystemC, parameterSystemV); - return 0; -} - - -CV_IMPL int cvNamedWindow(const char* name, int flags) -{ - if (!guiMainThread) - guiMainThread = new GuiReceiver; - - if (multiThreads) - QMetaObject::invokeMethod(guiMainThread, - "createWindow", - Qt::BlockingQueuedConnection, - Q_ARG(QString, QString(name)), - Q_ARG(int, flags)); - else - guiMainThread->createWindow(QString(name), flags); - - return 1; //Dummy value -} - - -CV_IMPL void cvDestroyWindow(const char* name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "destroyWindow", - //Qt::BlockingQueuedConnection, - Qt::AutoConnection, - Q_ARG(QString, QString(name))); -} - - -CV_IMPL void cvDestroyAllWindows() -{ - if (!guiMainThread) - return; - - QMetaObject::invokeMethod(guiMainThread, - "destroyAllWindow", - //Qt::BlockingQueuedConnection, - Qt::AutoConnection); -} - - -CV_IMPL void* cvGetWindowHandle(const char* name) -{ - if (!name) - CV_Error( CV_StsNullPtr, "NULL name string" ); - - return (void*) icvFindWindowByName(QLatin1String(name)); -} - - -CV_IMPL const char* cvGetWindowName(void* window_handle) -{ - if( !window_handle ) - CV_Error( CV_StsNullPtr, "NULL window handler" ); - - return ((CvWindow*)window_handle)->windowTitle().toLatin1().data(); -} - - -CV_IMPL void cvMoveWindow(const char* name, int x, int y) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "moveWindow", - //Qt::BlockingQueuedConnection, - Qt::AutoConnection, - Q_ARG(QString, QString(name)), - Q_ARG(int, x), - Q_ARG(int, y)); -} - - -CV_IMPL void cvResizeWindow(const char* name, int width, int height) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "resizeWindow", - //Qt::BlockingQueuedConnection, - Qt::AutoConnection, - Q_ARG(QString, QString(name)), - Q_ARG(int, width), - Q_ARG(int, height)); -} - - -CV_IMPL int cvCreateTrackbar2(const char* name_bar, const char* window_name, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "addSlider2", - Qt::AutoConnection, - Q_ARG(QString, QString(name_bar)), - Q_ARG(QString, QString(window_name)), - Q_ARG(void*, (void*)val), - Q_ARG(int, count), - Q_ARG(void*, (void*)on_notify), - Q_ARG(void*, (void*)userdata)); - - return 1; //dummy value -} - - -CV_IMPL int cvStartWindowThread() -{ - return 0; -} - - -CV_IMPL int cvCreateTrackbar(const char* name_bar, const char* window_name, int* value, int count, CvTrackbarCallback on_change) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "addSlider", - Qt::AutoConnection, - Q_ARG(QString, QString(name_bar)), - Q_ARG(QString, QString(window_name)), - Q_ARG(void*, (void*)value), - Q_ARG(int, count), - Q_ARG(void*, (void*)on_change)); - - return 1; //dummy value -} - - -CV_IMPL int cvCreateButton(const char* button_name, CvButtonCallback on_change, void* userdata, int button_type, int initial_button_state) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - if (initial_button_state < 0 || initial_button_state > 1) - return 0; - - QMetaObject::invokeMethod(guiMainThread, - "addButton", - Qt::AutoConnection, - Q_ARG(QString, QString(button_name)), - Q_ARG(int, button_type), - Q_ARG(int, initial_button_state), - Q_ARG(void*, (void*)on_change), - Q_ARG(void*, userdata)); - - return 1;//dummy value -} - - -CV_IMPL int cvGetTrackbarPos(const char* name_bar, const char* window_name) -{ - int result = -1; - - QPointer t = icvFindTrackBarByName(name_bar, window_name); - - if (t) - result = t->slider->value(); - - return result; -} - - -CV_IMPL void cvSetTrackbarPos(const char* name_bar, const char* window_name, int pos) -{ - QPointer t = icvFindTrackBarByName(name_bar, window_name); - - if (t) - t->slider->setValue(pos); -} - - -/* assign callback for mouse events */ -CV_IMPL void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param) -{ - QPointer w = icvFindWindowByName(QLatin1String(window_name)); - - if (!w) - CV_Error(CV_StsNullPtr, "NULL window handler"); - - w->setMouseCallBack(on_mouse, param); - -} - - -CV_IMPL void cvShowImage(const char* name, const CvArr* arr) -{ - if (!guiMainThread) - guiMainThread = new GuiReceiver; - - QMetaObject::invokeMethod(guiMainThread, - "showImage", - //Qt::BlockingQueuedConnection, - Qt::DirectConnection, - Q_ARG(QString, QString(name)), - Q_ARG(void*, (void*)arr)); -} - - -#ifdef HAVE_QT_OPENGL - -CV_IMPL void cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "setOpenGlDrawCallback", - Qt::AutoConnection, - Q_ARG(QString, QString(window_name)), - Q_ARG(void*, (void*)callback), - Q_ARG(void*, userdata)); -} - - -CV_IMPL void cvSetOpenGlContext(const char* window_name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "setOpenGlContext", - Qt::AutoConnection, - Q_ARG(QString, QString(window_name))); -} - - -CV_IMPL void cvUpdateWindow(const char* window_name) -{ - if (!guiMainThread) - CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); - - QMetaObject::invokeMethod(guiMainThread, - "updateWindow", - Qt::AutoConnection, - Q_ARG(QString, QString(window_name))); -} - -#endif - - -double cvGetOpenGlProp_QT(const char* name) -{ - double result = -1; - - if (guiMainThread) - { - QMetaObject::invokeMethod(guiMainThread, - "isOpenGl", - Qt::AutoConnection, - Q_RETURN_ARG(double, result), - Q_ARG(QString, QString(name))); - } - - return result; -} - - -////////////////////////////////////////////////////// -// GuiReceiver - - -GuiReceiver::GuiReceiver() : bTimeOut(false), nb_windows(0) -{ - doesExternalQAppExist = (QApplication::instance() != 0); - icvInitSystem(¶meterSystemC, parameterSystemV); - - timer = new QTimer(this); - QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timeOut())); - timer->setSingleShot(true); -} - - -void GuiReceiver::isLastWindow() -{ - if (--nb_windows <= 0) - { - delete guiMainThread;//delete global_control_panel too - guiMainThread = NULL; - - if (!doesExternalQAppExist) - { - qApp->quit(); - } - } -} - - -GuiReceiver::~GuiReceiver() -{ - if (global_control_panel) - { - delete global_control_panel; - global_control_panel = NULL; - } -} - - -void GuiReceiver::putText(void* arr, QString text, QPoint org, void* arg2) -{ - CV_Assert(arr); - - CvMat* mat, stub; - mat = cvGetMat(arr, &stub); - - int nbChannelOriginImage = cvGetElemType(mat); - if (nbChannelOriginImage != CV_8UC3) return; //for now, font works only with 8UC3 - - QImage qimg(mat->data.ptr, mat->cols, mat->rows, mat->step, QImage::Format_RGB888); - - CvFont* font = (CvFont*)arg2; - - QPainter qp(&qimg); - if (font) - { - QFont f(font->nameFont, font->line_type/*PointSize*/, font->thickness/*weight*/); - f.setStyle((QFont::Style) font->font_face/*style*/); - f.setLetterSpacing(QFont::AbsoluteSpacing, font->dx/*spacing*/); - //cvScalar(blue_component, green_component, red_component[, alpha_component]) - //Qt map non-transparent to 0xFF and transparent to 0 - //OpenCV scalar is the reverse, so 255-font->color.val[3] - qp.setPen(QColor(font->color.val[2], font->color.val[1], font->color.val[0], 255 - font->color.val[3])); - qp.setFont(f); - } - qp.drawText(org, text); - qp.end(); -} - - -void GuiReceiver::saveWindowParameters(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->writeSettings(); -} - - -void GuiReceiver::loadWindowParameters(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->readSettings(); -} - - -double GuiReceiver::getRatioWindow(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) - return -1; - - return w->getRatio(); -} - - -void GuiReceiver::setRatioWindow(QString name, double arg2) -{ - QPointer w = icvFindWindowByName( name.toLatin1().data() ); - - if (!w) - return; - - int flags = (int) arg2; - - w->setRatio(flags); -} - - -double GuiReceiver::getPropWindow(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) - return -1; - - return (double) w->getPropWindow(); -} - - -void GuiReceiver::setPropWindow(QString name, double arg2) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) - return; - - int flags = (int) arg2; - - w->setPropWindow(flags); -} - - -double GuiReceiver::isFullScreen(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) - return -1; - - return w->isFullScreen() ? CV_WINDOW_FULLSCREEN : CV_WINDOW_NORMAL; -} - - -void GuiReceiver::toggleFullScreen(QString name, double arg2) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) - return; - - int flags = (int) arg2; - - w->toggleFullScreen(flags); -} - - -void GuiReceiver::createWindow(QString name, int flags) -{ - if (!qApp) - CV_Error(CV_StsNullPtr, "NULL session handler" ); - - // Check the name in the storage - if (icvFindWindowByName(name.toLatin1().data())) - { - return; - } - - nb_windows++; - new CvWindow(name, flags); -} - - -void GuiReceiver::timeOut() -{ - bTimeOut = true; -} - - -void GuiReceiver::displayInfo(QString name, QString text, int delayms) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->displayInfo(text, delayms); -} - - -void GuiReceiver::displayStatusBar(QString name, QString text, int delayms) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->displayStatusBar(text, delayms); -} - - -void GuiReceiver::showImage(QString name, void* arr) -{ - QPointer w = icvFindWindowByName(name); - - if (!w) //as observed in the previous implementation (W32, GTK or Carbon), create a new window is the pointer returned is null - { - cvNamedWindow(name.toLatin1().data()); - w = icvFindWindowByName(name); - } - - if (!w || !arr) - return; // keep silence here. - - if (w->isOpenGl()) - { - CvMat* mat, stub; - - mat = cvGetMat(arr, &stub); - - cv::Mat im(mat); - cv::imshow(name.toStdString(), im); - } - else - { - w->updateImage(arr); - } - - if (w->isHidden()) - w->show(); -} - - -void GuiReceiver::destroyWindow(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - { - w->close(); - - //in not-multiThreads mode, looks like the window is hidden but not deleted - //so I do it manually - //otherwise QApplication do it for me if the exec command was executed (in multiThread mode) - if (!multiThreads) - delete w; - } -} - - -void GuiReceiver::destroyAllWindow() -{ - if (!qApp) - CV_Error(CV_StsNullPtr, "NULL session handler" ); - - if (multiThreads) - { - // WARNING: this could even close windows from an external parent app - //#TODO check externalQAppExists and in case it does, close windows carefully, - // i.e. apply the className-check from below... - qApp->closeAllWindows(); - } - else - { - bool isWidgetDeleted = true; - while(isWidgetDeleted) - { - isWidgetDeleted = false; - QWidgetList list = QApplication::topLevelWidgets(); - for (int i = 0; i < list.count(); i++) - { - QObject *obj = list.at(i); - if (obj->metaObject()->className() == QString("CvWindow")) - { - delete obj; - isWidgetDeleted = true; - break; - } - } - } - } -} - - -void GuiReceiver::moveWindow(QString name, int x, int y) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->move(x, y); -} - - -void GuiReceiver::resizeWindow(QString name, int width, int height) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - { - w->showNormal(); - w->setViewportSize(QSize(width, height)); - } -} - - -void GuiReceiver::enablePropertiesButtonEachWindow() -{ - //For each window, enable window property button - foreach (QWidget* widget, QApplication::topLevelWidgets()) - { - if (widget->isWindow() && !widget->parentWidget()) //is a window without parent - { - CvWinModel* temp = (CvWinModel*) widget; - if (temp->type == type_CvWindow) - { - CvWindow* w = (CvWindow*) widget; - - //active window properties button - w->enablePropertiesButton(); - } - } - } -} - - -void GuiReceiver::addButton(QString button_name, int button_type, int initial_button_state, void* on_change, void* userdata) -{ - if (!global_control_panel) - return; - - QPointer b; - - if (global_control_panel->myLayout->count() == 0) //if that is the first button attach to the control panel, create a new button bar - { - b = CvWindow::createButtonBar(button_name); //the bar has the name of the first button attached to it - enablePropertiesButtonEachWindow(); - - } - else - { - CvBar* lastbar = (CvBar*) global_control_panel->myLayout->itemAt(global_control_panel->myLayout->count() - 1); - - if (lastbar->type == type_CvTrackbar) //if last bar is a trackbar, create a new buttonbar, else, attach to the current bar - b = CvWindow::createButtonBar(button_name); //the bar has the name of the first button attached to it - else - b = (CvButtonbar*) lastbar; - - } - - b->addButton(button_name, (CvButtonCallback) on_change, userdata, button_type, initial_button_state); -} - - -void GuiReceiver::addSlider2(QString bar_name, QString window_name, void* value, int count, void* on_change, void *userdata) -{ - QBoxLayout *layout = NULL; - QPointer w; - - if (!window_name.isEmpty()) - { - w = icvFindWindowByName(window_name); - - if (!w) - return; - } - else - { - if (global_control_panel) - layout = global_control_panel->myLayout; - } - - QPointer t = icvFindTrackBarByName(bar_name.toLatin1().data(), window_name.toLatin1().data(), layout); - - if (t) //trackbar exists - return; - - if (!value) - CV_Error(CV_StsNullPtr, "NULL value pointer" ); - - if (count <= 0) //count is the max value of the slider, so must be bigger than 0 - CV_Error(CV_StsNullPtr, "Max value of the slider must be bigger than 0" ); - - CvWindow::addSlider2(w, bar_name, (int*)value, count, (CvTrackbarCallback2) on_change, userdata); -} - - -void GuiReceiver::addSlider(QString bar_name, QString window_name, void* value, int count, void* on_change) -{ - QBoxLayout *layout = NULL; - QPointer w; - - if (!window_name.isEmpty()) - { - w = icvFindWindowByName(window_name); - - if (!w) - return; - } - else - { - if (global_control_panel) - layout = global_control_panel->myLayout; - } - - QPointer t = icvFindTrackBarByName(bar_name.toLatin1().data(), window_name.toLatin1().data(), layout); - - if (t) //trackbar exists - return; - - if (!value) - CV_Error(CV_StsNullPtr, "NULL value pointer" ); - - if (count <= 0) //count is the max value of the slider, so must be bigger than 0 - CV_Error(CV_StsNullPtr, "Max value of the slider must be bigger than 0" ); - - CvWindow::addSlider(w, bar_name, (int*)value, count, (CvTrackbarCallback) on_change); -} - - -int GuiReceiver::start() -{ - return qApp->exec(); -} - - -void GuiReceiver::setOpenGlDrawCallback(QString name, void* callback, void* userdata) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->setOpenGlDrawCallback((CvOpenGlDrawCallback) callback, userdata); -} - -void GuiReceiver::setOpenGlContext(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->makeCurrentOpenGlContext(); -} - -void GuiReceiver::updateWindow(QString name) -{ - QPointer w = icvFindWindowByName(name); - - if (w) - w->updateGl(); -} - -double GuiReceiver::isOpenGl(QString name) -{ - double result = -1; - - QPointer w = icvFindWindowByName(name); - - if (w) - result = (double) w->isOpenGl(); - - return result; -} - - -////////////////////////////////////////////////////// -// CvTrackbar - - -CvTrackbar::CvTrackbar(CvWindow* arg, QString name, int* value, int _count, CvTrackbarCallback2 on_change, void* data) -{ - callback = NULL; - callback2 = on_change; - userdata = data; - - create(arg, name, value, _count); -} - - -CvTrackbar::CvTrackbar(CvWindow* arg, QString name, int* value, int _count, CvTrackbarCallback on_change) -{ - callback = on_change; - callback2 = NULL; - userdata = NULL; - - create(arg, name, value, _count); -} - - -void CvTrackbar::create(CvWindow* arg, QString name, int* value, int _count) -{ - type = type_CvTrackbar; - myparent = arg; - name_bar = name; - setObjectName(name_bar); - dataSlider = value; - - slider = new QSlider(Qt::Horizontal); - slider->setFocusPolicy(Qt::StrongFocus); - slider->setMinimum(0); - slider->setMaximum(_count); - slider->setPageStep(5); - slider->setValue(*value); - slider->setTickPosition(QSlider::TicksBelow); - - - //Change style of the Slider - //slider->setStyleSheet(str_Trackbar_css); - - QFile qss(":/stylesheet-trackbar"); - if (qss.open(QFile::ReadOnly)) - { - slider->setStyleSheet(QLatin1String(qss.readAll())); - qss.close(); - } - - - //this next line does not work if we change the style with a stylesheet, why ? (bug in QT ?) - //slider->setTickPosition(QSlider::TicksBelow); - label = new QPushButton; - label->setFlat(true); - setLabel(slider->value()); - - - QObject::connect(slider, SIGNAL(valueChanged(int)), this, SLOT(update(int))); - - QObject::connect(label, SIGNAL(clicked()), this, SLOT(createDialog())); - - //label->setStyleSheet("QPushButton:disabled {color: black}"); - - addWidget(label, Qt::AlignLeft);//name + value - addWidget(slider, Qt::AlignCenter);//slider -} - - -void CvTrackbar::createDialog() -{ - bool ok = false; - - //crash if I access the values directly and give them to QInputDialog, so do a copy first. - int value = slider->value(); - int step = slider->singleStep(); - int min = slider->minimum(); - int max = slider->maximum(); - - int i = -#if QT_VERSION >= 0x040500 - QInputDialog::getInt -#else - QInputDialog::getInteger -#endif - (this->parentWidget(), - tr("Slider %1").arg(name_bar), - tr("New value:"), - value, - min, - max, - step, - &ok); - - if (ok) - slider->setValue(i); -} - - -void CvTrackbar::update(int myvalue) -{ - setLabel(myvalue); - - *dataSlider = myvalue; - if (callback) - { - callback(myvalue); - return; - } - - if (callback2) - { - callback2(myvalue, userdata); - return; - } -} - - -void CvTrackbar::setLabel(int myvalue) -{ - QString nameNormalized = name_bar.leftJustified( 10, ' ', true ); - QString valueMaximum = QString("%1").arg(slider->maximum()); - QString str = QString("%1 (%2/%3)").arg(nameNormalized).arg(myvalue,valueMaximum.length(),10,QChar('0')).arg(valueMaximum); - label->setText(str); -} - - -////////////////////////////////////////////////////// -// CvButtonbar - - -//here CvButtonbar class -CvButtonbar::CvButtonbar(QWidget* arg, QString arg2) -{ - type = type_CvButtonbar; - myparent = arg; - name_bar = arg2; - setObjectName(name_bar); - - group_button = new QButtonGroup(this); -} - - -void CvButtonbar::setLabel() -{ - QString nameNormalized = name_bar.leftJustified(10, ' ', true); - label->setText(nameNormalized); -} - - -void CvButtonbar::addButton(QString name, CvButtonCallback call, void* userdata, int button_type, int initial_button_state) -{ - QString button_name = name; - - if (button_name == "") - button_name = tr("button %1").arg(this->count()); - - QPointer button; - - if (button_type == CV_PUSH_BUTTON) - button = (QAbstractButton*) new CvPushButton(this, button_name,call, userdata); - - if (button_type == CV_CHECKBOX) - button = (QAbstractButton*) new CvCheckBox(this, button_name,call, userdata, initial_button_state); - - if (button_type == CV_RADIOBOX) - { - button = (QAbstractButton*) new CvRadioButton(this, button_name,call, userdata, initial_button_state); - group_button->addButton(button); - } - - if (button) - { - if (button_type == CV_PUSH_BUTTON) - QObject::connect(button, SIGNAL(clicked(bool)), button, SLOT(callCallBack(bool))); - else - QObject::connect(button, SIGNAL(toggled(bool)), button, SLOT(callCallBack(bool))); - - addWidget(button, Qt::AlignCenter); - } -} - - -////////////////////////////////////////////////////// -// Buttons - - -//buttons here -CvPushButton::CvPushButton(CvButtonbar* arg1, QString arg2, CvButtonCallback arg3, void* arg4) -{ - myparent = arg1; - button_name = arg2; - callback = arg3; - userdata = arg4; - - setObjectName(button_name); - setText(button_name); - - if (isChecked()) - callCallBack(true); -} - - -void CvPushButton::callCallBack(bool checked) -{ - if (callback) - callback(checked, userdata); -} - - -CvCheckBox::CvCheckBox(CvButtonbar* arg1, QString arg2, CvButtonCallback arg3, void* arg4, int initial_button_state) -{ - myparent = arg1; - button_name = arg2; - callback = arg3; - userdata = arg4; - - setObjectName(button_name); - setCheckState((initial_button_state == 1 ? Qt::Checked : Qt::Unchecked)); - setText(button_name); - - if (isChecked()) - callCallBack(true); -} - - -void CvCheckBox::callCallBack(bool checked) -{ - if (callback) - callback(checked, userdata); -} - - -CvRadioButton::CvRadioButton(CvButtonbar* arg1, QString arg2, CvButtonCallback arg3, void* arg4, int initial_button_state) -{ - myparent = arg1; - button_name = arg2; - callback = arg3; - userdata = arg4; - - setObjectName(button_name); - setChecked(initial_button_state); - setText(button_name); - - if (isChecked()) - callCallBack(true); -} - -void CvRadioButton::callCallBack(bool checked) -{ - if (callback) - callback(checked, userdata); -} - - -////////////////////////////////////////////////////// -// CvWinProperties - - -//here CvWinProperties class -CvWinProperties::CvWinProperties(QString name_paraWindow, QObject* /*parent*/) -{ - //setParent(parent); - type = type_CvWinProperties; - setWindowFlags(Qt::Tool); - setContentsMargins(0, 0, 0, 0); - setWindowTitle(name_paraWindow); - setObjectName(name_paraWindow); - resize(100, 50); - - myLayout = new QBoxLayout(QBoxLayout::TopToBottom); - myLayout->setObjectName(QString::fromUtf8("boxLayout")); - myLayout->setContentsMargins(0, 0, 0, 0); - myLayout->setSpacing(0); - myLayout->setMargin(0); - myLayout->setSizeConstraint(QLayout::SetFixedSize); - setLayout(myLayout); - - hide(); -} - - -void CvWinProperties::closeEvent(QCloseEvent* e) -{ - e->accept(); //intersept the close event (not sure I really need it) - //an hide event is also sent. I will intercept it and do some processing -} - - -void CvWinProperties::showEvent(QShowEvent* evnt) -{ - //why -1,-1 ?: do this trick because the first time the code is run, - //no value pos was saved so we let Qt move the window in the middle of its parent (event ignored). - //then hide will save the last position and thus, we want to retreive it (event accepted). - QPoint mypos(-1, -1); - QSettings settings("OpenCV2", windowTitle()); - mypos = settings.value("pos", mypos).toPoint(); - - if (mypos.x() >= 0) - { - move(mypos); - evnt->accept(); - } - else - { - evnt->ignore(); - } -} - - -void CvWinProperties::hideEvent(QHideEvent* evnt) -{ - QSettings settings("OpenCV2", windowTitle()); - settings.setValue("pos", pos()); //there is an offset of 6 pixels (so the window's position is wrong -- why ?) - evnt->accept(); -} - - -CvWinProperties::~CvWinProperties() -{ - //clear the setting pos - QSettings settings("OpenCV2", windowTitle()); - settings.remove("pos"); -} - - -////////////////////////////////////////////////////// -// CvWindow - - -CvWindow::CvWindow(QString name, int arg2) -{ - type = type_CvWindow; - moveToThread(qApp->instance()->thread()); - - param_flags = arg2 & 0x0000000F; - param_gui_mode = arg2 & 0x000000F0; - param_ratio_mode = arg2 & 0x00000F00; - - //setAttribute(Qt::WA_DeleteOnClose); //in other case, does not release memory - setContentsMargins(0, 0, 0, 0); - setWindowTitle(name); - setObjectName(name); - - setFocus( Qt::PopupFocusReason ); //#1695 arrow keys are not received without the explicit focus - - resize(400, 300); - setMinimumSize(1, 1); - - //1: create control panel - if (!global_control_panel) - global_control_panel = createParameterWindow(); - - //2: Layouts - createBarLayout(); - createGlobalLayout(); - - //3: my view -#ifndef HAVE_QT_OPENGL - if (arg2 & CV_WINDOW_OPENGL) - CV_Error( CV_OpenGlNotSupported, "Library was built without OpenGL support" ); - mode_display = CV_MODE_NORMAL; -#else - mode_display = arg2 & CV_WINDOW_OPENGL ? CV_MODE_OPENGL : CV_MODE_NORMAL; - if (mode_display == CV_MODE_OPENGL) - param_gui_mode = CV_GUI_NORMAL; -#endif - createView(); - - //4: shortcuts and actions - //5: toolBar and statusbar - if (param_gui_mode == CV_GUI_EXPANDED) - { - createActions(); - createShortcuts(); - - createToolBar(); - createStatusBar(); - } - - //Now attach everything - if (myToolBar) - myGlobalLayout->addWidget(myToolBar, Qt::AlignCenter); - - myGlobalLayout->addWidget(myView->getWidget(), Qt::AlignCenter); - - myGlobalLayout->addLayout(myBarLayout, Qt::AlignCenter); - - if (myStatusBar) - myGlobalLayout->addWidget(myStatusBar, Qt::AlignCenter); - - setLayout(myGlobalLayout); - show(); -} - - -CvWindow::~CvWindow() -{ - if (guiMainThread) - guiMainThread->isLastWindow(); -} - - -void CvWindow::setMouseCallBack(CvMouseCallback callback, void* param) -{ - myView->setMouseCallBack(callback, param); -} - - -void CvWindow::writeSettings() -{ - //organisation and application's name - QSettings settings("OpenCV2", QFileInfo(QApplication::applicationFilePath()).fileName()); - - settings.setValue("pos", pos()); - settings.setValue("size", size()); - settings.setValue("mode_resize" ,param_flags); - settings.setValue("mode_gui", param_gui_mode); - - myView->writeSettings(settings); - - icvSaveTrackbars(&settings); - - if (global_control_panel) - { - icvSaveControlPanel(); - settings.setValue("posPanel", global_control_panel->pos()); - } -} - - - -//TODO: load CV_GUI flag (done) and act accordingly (create win property if needed and attach trackbars) -void CvWindow::readSettings() -{ - //organisation and application's name - QSettings settings("OpenCV2", QFileInfo(QApplication::applicationFilePath()).fileName()); - - QPoint _pos = settings.value("pos", QPoint(200, 200)).toPoint(); - QSize _size = settings.value("size", QSize(400, 400)).toSize(); - - param_flags = settings.value("mode_resize", param_flags).toInt(); - param_gui_mode = settings.value("mode_gui", param_gui_mode).toInt(); - - param_flags = settings.value("mode_resize", param_flags).toInt(); - - myView->readSettings(settings); - - //trackbar here - icvLoadTrackbars(&settings); - - resize(_size); - move(_pos); - - if (global_control_panel) - { - icvLoadControlPanel(); - global_control_panel->move(settings.value("posPanel", global_control_panel->pos()).toPoint()); - } -} - - -double CvWindow::getRatio() -{ - return myView->getRatio(); -} - - -void CvWindow::setRatio(int flags) -{ - myView->setRatio(flags); -} - - -int CvWindow::getPropWindow() -{ - return param_flags; -} - - -void CvWindow::setPropWindow(int flags) -{ - if (param_flags == flags) //nothing to do - return; - - switch(flags) - { - case CV_WINDOW_NORMAL: - myGlobalLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); - param_flags = flags; - - break; - - case CV_WINDOW_AUTOSIZE: - myGlobalLayout->setSizeConstraint(QLayout::SetFixedSize); - param_flags = flags; - - break; - - default: - ; - } -} - - -void CvWindow::toggleFullScreen(int flags) -{ - if (isFullScreen() && flags == CV_WINDOW_NORMAL) - { - showTools(); - showNormal(); - return; - } - - if (!isFullScreen() && flags == CV_WINDOW_FULLSCREEN) - { - hideTools(); - showFullScreen(); - return; - } -} - - -void CvWindow::updateImage(void* arr) -{ - myView->updateImage(arr); -} - - -void CvWindow::displayInfo(QString text, int delayms) -{ - myView->startDisplayInfo(text, delayms); -} - - -void CvWindow::displayStatusBar(QString text, int delayms) -{ - if (myStatusBar) - myStatusBar->showMessage(text, delayms); -} - - -void CvWindow::enablePropertiesButton() -{ - if (!vect_QActions.empty()) - vect_QActions[9]->setDisabled(false); -} - - -CvButtonbar* CvWindow::createButtonBar(QString name_bar) -{ - QPointer t = new CvButtonbar(global_control_panel, name_bar); - t->setAlignment(Qt::AlignHCenter); - - QPointer myLayout = global_control_panel->myLayout; - - myLayout->insertLayout(myLayout->count(), t); - - return t; -} - - -void CvWindow::addSlider(CvWindow* w, QString name, int* value, int count, CvTrackbarCallback on_change) -{ - QPointer t = new CvTrackbar(w, name, value, count, on_change); - t->setAlignment(Qt::AlignHCenter); - - QPointer myLayout; - - if (w) - { - myLayout = w->myBarLayout; - } - else - { - myLayout = global_control_panel->myLayout; - - //if first one, enable control panel - if (myLayout->count() == 0) - guiMainThread->enablePropertiesButtonEachWindow(); - } - - myLayout->insertLayout(myLayout->count(), t); -} - - -void CvWindow::addSlider2(CvWindow* w, QString name, int* value, int count, CvTrackbarCallback2 on_change, void* userdata) -{ - QPointer t = new CvTrackbar(w, name, value, count, on_change, userdata); - t->setAlignment(Qt::AlignHCenter); - - QPointer myLayout; - - if (w) - { - myLayout = w->myBarLayout; - } - else - { - myLayout = global_control_panel->myLayout; - - //if first one, enable control panel - if (myLayout->count() == 0) - guiMainThread->enablePropertiesButtonEachWindow(); - } - - myLayout->insertLayout(myLayout->count(), t); -} - - -void CvWindow::setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata) -{ - myView->setOpenGlDrawCallback(callback, userdata); -} - - -void CvWindow::makeCurrentOpenGlContext() -{ - myView->makeCurrentOpenGlContext(); -} - - -void CvWindow::updateGl() -{ - myView->updateGl(); -} - - -bool CvWindow::isOpenGl() -{ - return mode_display == CV_MODE_OPENGL; -} - - -void CvWindow::setViewportSize(QSize _size) -{ - myView->getWidget()->resize(_size); - myView->setSize(_size); -} - - -void CvWindow::createBarLayout() -{ - myBarLayout = new QBoxLayout(QBoxLayout::TopToBottom); - myBarLayout->setObjectName(QString::fromUtf8("barLayout")); - myBarLayout->setContentsMargins(0, 0, 0, 0); - myBarLayout->setSpacing(0); - myBarLayout->setMargin(0); -} - - -void CvWindow::createGlobalLayout() -{ - myGlobalLayout = new QBoxLayout(QBoxLayout::TopToBottom); - myGlobalLayout->setObjectName(QString::fromUtf8("boxLayout")); - myGlobalLayout->setContentsMargins(0, 0, 0, 0); - myGlobalLayout->setSpacing(0); - myGlobalLayout->setMargin(0); - setMinimumSize(1, 1); - - if (param_flags == CV_WINDOW_AUTOSIZE) - myGlobalLayout->setSizeConstraint(QLayout::SetFixedSize); - else if (param_flags == CV_WINDOW_NORMAL) - myGlobalLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); -} - - -void CvWindow::createView() -{ -#ifdef HAVE_QT_OPENGL - if (isOpenGl()) - myView = new OpenGlViewPort(this); - else -#endif - myView = new DefaultViewPort(this, param_ratio_mode); -} - - -void CvWindow::createActions() -{ - vect_QActions.resize(10); - - QWidget* view = myView->getWidget(); - - //if the shortcuts are changed in window_QT.h, we need to update the tooltip manually - vect_QActions[0] = new QAction(QIcon(":/left-icon"), "Panning left (CTRL+arrowLEFT)", this); - vect_QActions[0]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[0], SIGNAL(triggered()), view, SLOT(siftWindowOnLeft())); - - vect_QActions[1] = new QAction(QIcon(":/right-icon"), "Panning right (CTRL+arrowRIGHT)", this); - vect_QActions[1]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[1], SIGNAL(triggered()), view, SLOT(siftWindowOnRight())); - - vect_QActions[2] = new QAction(QIcon(":/up-icon"), "Panning up (CTRL+arrowUP)", this); - vect_QActions[2]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[2], SIGNAL(triggered()), view, SLOT(siftWindowOnUp())); - - vect_QActions[3] = new QAction(QIcon(":/down-icon"), "Panning down (CTRL+arrowDOWN)", this); - vect_QActions[3]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[3], SIGNAL(triggered()), view, SLOT(siftWindowOnDown()) ); - - vect_QActions[4] = new QAction(QIcon(":/zoom_x1-icon"), "Zoom x1 (CTRL+P)", this); - vect_QActions[4]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[4], SIGNAL(triggered()), view, SLOT(resetZoom())); - - vect_QActions[5] = new QAction(QIcon(":/imgRegion-icon"), tr("Zoom x%1 (see label) (CTRL+X)").arg(threshold_zoom_img_region), this); - vect_QActions[5]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[5], SIGNAL(triggered()), view, SLOT(imgRegion())); - - vect_QActions[6] = new QAction(QIcon(":/zoom_in-icon"), "Zoom in (CTRL++)", this); - vect_QActions[6]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[6], SIGNAL(triggered()), view, SLOT(ZoomIn())); - - vect_QActions[7] = new QAction(QIcon(":/zoom_out-icon"), "Zoom out (CTRL+-)", this); - vect_QActions[7]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[7], SIGNAL(triggered()), view, SLOT(ZoomOut())); - - vect_QActions[8] = new QAction(QIcon(":/save-icon"), "Save current image (CTRL+S)", this); - vect_QActions[8]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[8], SIGNAL(triggered()), view, SLOT(saveView())); - - vect_QActions[9] = new QAction(QIcon(":/properties-icon"), "Display properties window (CTRL+P)", this); - vect_QActions[9]->setIconVisibleInMenu(true); - QObject::connect(vect_QActions[9], SIGNAL(triggered()), this, SLOT(displayPropertiesWin())); - - if (global_control_panel->myLayout->count() == 0) - vect_QActions[9]->setDisabled(true); -} - - -void CvWindow::createShortcuts() -{ - vect_QShortcuts.resize(10); - - QWidget* view = myView->getWidget(); - - vect_QShortcuts[0] = new QShortcut(shortcut_panning_left, this); - QObject::connect(vect_QShortcuts[0], SIGNAL(activated()), view, SLOT(siftWindowOnLeft())); - - vect_QShortcuts[1] = new QShortcut(shortcut_panning_right, this); - QObject::connect(vect_QShortcuts[1], SIGNAL(activated()), view, SLOT(siftWindowOnRight())); - - vect_QShortcuts[2] = new QShortcut(shortcut_panning_up, this); - QObject::connect(vect_QShortcuts[2], SIGNAL(activated()), view, SLOT(siftWindowOnUp())); - - vect_QShortcuts[3] = new QShortcut(shortcut_panning_down, this); - QObject::connect(vect_QShortcuts[3], SIGNAL(activated()), view, SLOT(siftWindowOnDown())); - - vect_QShortcuts[4] = new QShortcut(shortcut_zoom_normal, this); - QObject::connect(vect_QShortcuts[4], SIGNAL(activated()), view, SLOT(resetZoom())); - - vect_QShortcuts[5] = new QShortcut(shortcut_zoom_imgRegion, this); - QObject::connect(vect_QShortcuts[5], SIGNAL(activated()), view, SLOT(imgRegion())); - - vect_QShortcuts[6] = new QShortcut(shortcut_zoom_in, this); - QObject::connect(vect_QShortcuts[6], SIGNAL(activated()), view, SLOT(ZoomIn())); - - vect_QShortcuts[7] = new QShortcut(shortcut_zoom_out, this); - QObject::connect(vect_QShortcuts[7], SIGNAL(activated()), view, SLOT(ZoomOut())); - - vect_QShortcuts[8] = new QShortcut(shortcut_save_img, this); - QObject::connect(vect_QShortcuts[8], SIGNAL(activated()), view, SLOT(saveView())); - - vect_QShortcuts[9] = new QShortcut(shortcut_properties_win, this); - QObject::connect(vect_QShortcuts[9], SIGNAL(activated()), this, SLOT(displayPropertiesWin())); -} - - -void CvWindow::createToolBar() -{ - myToolBar = new QToolBar(this); - myToolBar->setFloatable(false); //is not a window - myToolBar->setFixedHeight(28); - myToolBar->setMinimumWidth(1); - - foreach (QAction *a, vect_QActions) - myToolBar->addAction(a); -} - - -void CvWindow::createStatusBar() -{ - myStatusBar = new QStatusBar(this); - myStatusBar->setSizeGripEnabled(false); - myStatusBar->setFixedHeight(20); - myStatusBar->setMinimumWidth(1); - myStatusBar_msg = new QLabel; - - //I comment this because if we change the style, myview (the picture) - //will not be the correct size anymore (will lost 2 pixel because of the borders) - - //myStatusBar_msg->setFrameStyle(QFrame::Raised); - - myStatusBar_msg->setAlignment(Qt::AlignHCenter); - myStatusBar->addWidget(myStatusBar_msg); -} - - -void CvWindow::hideTools() -{ - if (myToolBar) - myToolBar->hide(); - - if (myStatusBar) - myStatusBar->hide(); - - if (global_control_panel) - global_control_panel->hide(); -} - - -void CvWindow::showTools() -{ - if (myToolBar) - myToolBar->show(); - - if (myStatusBar) - myStatusBar->show(); -} - - -CvWinProperties* CvWindow::createParameterWindow() -{ - QString name_paraWindow = QFileInfo(QApplication::applicationFilePath()).fileName() + " settings"; - - CvWinProperties* result = new CvWinProperties(name_paraWindow, guiMainThread); - - return result; -} - - -void CvWindow::displayPropertiesWin() -{ - if (global_control_panel->isHidden()) - global_control_panel->show(); - else - global_control_panel->hide(); -} - - -//Need more test here ! -void CvWindow::keyPressEvent(QKeyEvent *evnt) -{ - //see http://doc.trolltech.com/4.6/qt.html#Key-enum - int key = evnt->key(); - - Qt::Key qtkey = static_cast(key); - char asciiCode = QTest::keyToAscii(qtkey); - if (asciiCode != 0) - key = static_cast(asciiCode); - else - key = evnt->nativeVirtualKey(); //same codes as returned by GTK-based backend - - //control plus (Z, +, -, up, down, left, right) are used for zoom/panning functions - if (evnt->modifiers() != Qt::ControlModifier) - { - mutexKey.lock(); - last_key = key; - mutexKey.unlock(); - key_pressed.wakeAll(); - //evnt->accept(); - } - - QWidget::keyPressEvent(evnt); -} - - -void CvWindow::icvLoadControlPanel() -{ - QSettings settings("OpenCV2", QFileInfo(QApplication::applicationFilePath()).fileName() + " control panel"); - - int bsize = settings.beginReadArray("bars"); - - if (bsize == global_control_panel->myLayout->layout()->count()) - { - for (int i = 0; i < bsize; ++i) - { - CvBar* t = (CvBar*) global_control_panel->myLayout->layout()->itemAt(i); - settings.setArrayIndex(i); - if (t->type == type_CvTrackbar) - { - if (t->name_bar == settings.value("namebar").toString()) - { - ((CvTrackbar*)t)->slider->setValue(settings.value("valuebar").toInt()); - } - } - if (t->type == type_CvButtonbar) - { - int subsize = settings.beginReadArray(QString("buttonbar")+i); - - if ( subsize == ((CvButtonbar*)t)->layout()->count() ) - icvLoadButtonbar((CvButtonbar*)t,&settings); - - settings.endArray(); - } - } - } - - settings.endArray(); -} - - -void CvWindow::icvSaveControlPanel() -{ - QSettings settings("OpenCV2", QFileInfo(QApplication::applicationFilePath()).fileName()+" control panel"); - - settings.beginWriteArray("bars"); - - for (int i = 0; i < global_control_panel->myLayout->layout()->count(); ++i) - { - CvBar* t = (CvBar*) global_control_panel->myLayout->layout()->itemAt(i); - settings.setArrayIndex(i); - if (t->type == type_CvTrackbar) - { - settings.setValue("namebar", QString(t->name_bar)); - settings.setValue("valuebar",((CvTrackbar*)t)->slider->value()); - } - if (t->type == type_CvButtonbar) - { - settings.beginWriteArray(QString("buttonbar")+i); - icvSaveButtonbar((CvButtonbar*)t,&settings); - settings.endArray(); - } - } - - settings.endArray(); -} - - -void CvWindow::icvSaveButtonbar(CvButtonbar* b, QSettings* settings) -{ - for (int i = 0, count = b->layout()->count(); i < count; ++i) - { - settings->setArrayIndex(i); - - QWidget* temp = (QWidget*) b->layout()->itemAt(i)->widget(); - QString myclass(QLatin1String(temp->metaObject()->className())); - - if (myclass == "CvPushButton") - { - CvPushButton* button = (CvPushButton*) temp; - settings->setValue("namebutton", button->text()); - settings->setValue("valuebutton", int(button->isChecked())); - } - else if (myclass == "CvCheckBox") - { - CvCheckBox* button = (CvCheckBox*) temp; - settings->setValue("namebutton", button->text()); - settings->setValue("valuebutton", int(button->isChecked())); - } - else if (myclass == "CvRadioButton") - { - CvRadioButton* button = (CvRadioButton*) temp; - settings->setValue("namebutton", button->text()); - settings->setValue("valuebutton", int(button->isChecked())); - } - } -} - - -void CvWindow::icvLoadButtonbar(CvButtonbar* b, QSettings* settings) -{ - for (int i = 0, count = b->layout()->count(); i < count; ++i) - { - settings->setArrayIndex(i); - - QWidget* temp = (QWidget*) b->layout()->itemAt(i)->widget(); - QString myclass(QLatin1String(temp->metaObject()->className())); - - if (myclass == "CvPushButton") - { - CvPushButton* button = (CvPushButton*) temp; - - if (button->text() == settings->value("namebutton").toString()) - button->setChecked(settings->value("valuebutton").toInt()); - } - else if (myclass == "CvCheckBox") - { - CvCheckBox* button = (CvCheckBox*) temp; - - if (button->text() == settings->value("namebutton").toString()) - button->setChecked(settings->value("valuebutton").toInt()); - } - else if (myclass == "CvRadioButton") - { - CvRadioButton* button = (CvRadioButton*) temp; - - if (button->text() == settings->value("namebutton").toString()) - button->setChecked(settings->value("valuebutton").toInt()); - } - - } -} - - -void CvWindow::icvLoadTrackbars(QSettings* settings) -{ - int bsize = settings->beginReadArray("trackbars"); - - //trackbar are saved in the same order, so no need to use icvFindTrackbarByName - - if (myBarLayout->layout()->count() == bsize) //if not the same number, the window saved and loaded is not the same (nb trackbar not equal) - { - for (int i = 0; i < bsize; ++i) - { - settings->setArrayIndex(i); - - CvTrackbar* t = (CvTrackbar*) myBarLayout->layout()->itemAt(i); - - if (t->name_bar == settings->value("name").toString()) - t->slider->setValue(settings->value("value").toInt()); - - } - } - - settings->endArray(); -} - - -void CvWindow::icvSaveTrackbars(QSettings* settings) -{ - settings->beginWriteArray("trackbars"); - - for (int i = 0; i < myBarLayout->layout()->count(); ++i) - { - settings->setArrayIndex(i); - - CvTrackbar* t = (CvTrackbar*) myBarLayout->layout()->itemAt(i); - - settings->setValue("name", t->name_bar); - settings->setValue("value", t->slider->value()); - } - - settings->endArray(); -} - - -////////////////////////////////////////////////////// -// DefaultViewPort - - -DefaultViewPort::DefaultViewPort(CvWindow* arg, int arg2) : QGraphicsView(arg), image2Draw_mat(0) -{ - centralWidget = arg; - param_keepRatio = arg2; - - setContentsMargins(0, 0, 0, 0); - setMinimumSize(1, 1); - setAlignment(Qt::AlignHCenter); - - setObjectName(QString::fromUtf8("graphicsView")); - - timerDisplay = new QTimer(this); - timerDisplay->setSingleShot(true); - connect(timerDisplay, SIGNAL(timeout()), this, SLOT(stopDisplayInfo())); - - drawInfo = false; - positionGrabbing = QPointF(0, 0); - positionCorners = QRect(0, 0, size().width(), size().height()); - - on_mouse = 0; - on_mouse_param = 0; - mouseCoordinate = QPoint(-1, -1); - - //no border - setStyleSheet( "QGraphicsView { border-style: none; }" ); - - image2Draw_mat = cvCreateMat(viewport()->height(), viewport()->width(), CV_8UC3); - cvZero(image2Draw_mat); - - nbChannelOriginImage = 0; - - setInteractive(false); - setMouseTracking(true); //receive mouse event everytime -} - - -DefaultViewPort::~DefaultViewPort() -{ - if (image2Draw_mat) - cvReleaseMat(&image2Draw_mat); -} - - -QWidget* DefaultViewPort::getWidget() -{ - return this; -} - - -void DefaultViewPort::setMouseCallBack(CvMouseCallback m, void* param) -{ - on_mouse = m; - - on_mouse_param = param; -} - -void DefaultViewPort::writeSettings(QSettings& settings) -{ - settings.setValue("matrix_view.m11", param_matrixWorld.m11()); - settings.setValue("matrix_view.m12", param_matrixWorld.m12()); - settings.setValue("matrix_view.m13", param_matrixWorld.m13()); - settings.setValue("matrix_view.m21", param_matrixWorld.m21()); - settings.setValue("matrix_view.m22", param_matrixWorld.m22()); - settings.setValue("matrix_view.m23", param_matrixWorld.m23()); - settings.setValue("matrix_view.m31", param_matrixWorld.m31()); - settings.setValue("matrix_view.m32", param_matrixWorld.m32()); - settings.setValue("matrix_view.m33", param_matrixWorld.m33()); -} - - -void DefaultViewPort::readSettings(QSettings& settings) -{ - qreal m11 = settings.value("matrix_view.m11", param_matrixWorld.m11()).toDouble(); - qreal m12 = settings.value("matrix_view.m12", param_matrixWorld.m12()).toDouble(); - qreal m13 = settings.value("matrix_view.m13", param_matrixWorld.m13()).toDouble(); - qreal m21 = settings.value("matrix_view.m21", param_matrixWorld.m21()).toDouble(); - qreal m22 = settings.value("matrix_view.m22", param_matrixWorld.m22()).toDouble(); - qreal m23 = settings.value("matrix_view.m23", param_matrixWorld.m23()).toDouble(); - qreal m31 = settings.value("matrix_view.m31", param_matrixWorld.m31()).toDouble(); - qreal m32 = settings.value("matrix_view.m32", param_matrixWorld.m32()).toDouble(); - qreal m33 = settings.value("matrix_view.m33", param_matrixWorld.m33()).toDouble(); - - param_matrixWorld = QTransform(m11, m12, m13, m21, m22, m23, m31, m32, m33); -} - - -double DefaultViewPort::getRatio() -{ - return param_keepRatio; -} - - -void DefaultViewPort::setRatio(int flags) -{ - if (getRatio() == flags) //nothing to do - return; - - //if valid flags - if (flags == CV_WINDOW_FREERATIO || flags == CV_WINDOW_KEEPRATIO) - { - centralWidget->param_ratio_mode = flags; - param_keepRatio = flags; - updateGeometry(); - viewport()->update(); - } -} - - -void DefaultViewPort::updateImage(const CvArr* arr) -{ - CV_Assert(arr); - - CvMat* mat, stub; - int origin = 0; - - if (CV_IS_IMAGE_HDR(arr)) - origin = ((IplImage*)arr)->origin; - - mat = cvGetMat(arr, &stub); - - if (!image2Draw_mat || !CV_ARE_SIZES_EQ(image2Draw_mat, mat)) - { - if (image2Draw_mat) - cvReleaseMat(&image2Draw_mat); - - //the image in ipl (to do a deep copy with cvCvtColor) - image2Draw_mat = cvCreateMat(mat->rows, mat->cols, CV_8UC3); - image2Draw_qt = QImage(image2Draw_mat->data.ptr, image2Draw_mat->cols, image2Draw_mat->rows, image2Draw_mat->step, QImage::Format_RGB888); - - //use to compute mouse coordinate, I need to update the ratio here and in resizeEvent - ratioX = width() / float(image2Draw_mat->cols); - ratioY = height() / float(image2Draw_mat->rows); - - updateGeometry(); - } - - nbChannelOriginImage = cvGetElemType(mat); - - cvConvertImage(mat, image2Draw_mat, (origin != 0 ? CV_CVTIMG_FLIP : 0) + CV_CVTIMG_SWAP_RB); - - viewport()->update(); -} - - -void DefaultViewPort::startDisplayInfo(QString text, int delayms) -{ - if (timerDisplay->isActive()) - stopDisplayInfo(); - - infoText = text; - if (delayms > 0) timerDisplay->start(delayms); - drawInfo = true; -} - - -void DefaultViewPort::setOpenGlDrawCallback(CvOpenGlDrawCallback /*callback*/, void* /*userdata*/) -{ - CV_Error(CV_OpenGlNotSupported, "Window doesn't support OpenGL"); -} - - -void DefaultViewPort::makeCurrentOpenGlContext() -{ - CV_Error(CV_OpenGlNotSupported, "Window doesn't support OpenGL"); -} - - -void DefaultViewPort::updateGl() -{ - CV_Error(CV_OpenGlNotSupported, "Window doesn't support OpenGL"); -} - - -//Note: move 2 percent of the window -void DefaultViewPort::siftWindowOnLeft() -{ - float delta = 2 * width() / (100.0 * param_matrixWorld.m11()); - moveView(QPointF(delta, 0)); -} - - -//Note: move 2 percent of the window -void DefaultViewPort::siftWindowOnRight() -{ - float delta = -2 * width() / (100.0 * param_matrixWorld.m11()); - moveView(QPointF(delta, 0)); -} - - -//Note: move 2 percent of the window -void DefaultViewPort::siftWindowOnUp() -{ - float delta = 2 * height() / (100.0 * param_matrixWorld.m11()); - moveView(QPointF(0, delta)); -} - - -//Note: move 2 percent of the window -void DefaultViewPort::siftWindowOnDown() -{ - float delta = -2 * height() / (100.0 * param_matrixWorld.m11()); - moveView(QPointF(0, delta)); -} - - -void DefaultViewPort::imgRegion() -{ - scaleView((threshold_zoom_img_region / param_matrixWorld.m11() - 1) * 5, QPointF(size().width() / 2, size().height() / 2)); -} - - -void DefaultViewPort::resetZoom() -{ - param_matrixWorld.reset(); - controlImagePosition(); -} - - -void DefaultViewPort::ZoomIn() -{ - scaleView(0.5, QPointF(size().width() / 2, size().height() / 2)); -} - - -void DefaultViewPort::ZoomOut() -{ - scaleView(-0.5, QPointF(size().width() / 2, size().height() / 2)); -} - - -//can save as JPG, JPEG, BMP, PNG -void DefaultViewPort::saveView() -{ - QDate date_d = QDate::currentDate(); - QString date_s = date_d.toString("dd.MM.yyyy"); - QString name_s = centralWidget->windowTitle() + "_screenshot_" + date_s; - - QString fileName = QFileDialog::getSaveFileName(this, tr("Save File %1").arg(name_s), name_s + ".png", tr("Images (*.png *.jpg *.bmp *.jpeg)")); - - if (!fileName.isEmpty()) //save the picture - { - QString extension = fileName.right(3); - - // Create a new pixmap to render the viewport into - QPixmap viewportPixmap(viewport()->size()); - viewport()->render(&viewportPixmap); - - // Save it.. - if (QString::compare(extension, "png", Qt::CaseInsensitive) == 0) - { - viewportPixmap.save(fileName, "PNG"); - return; - } - - if (QString::compare(extension, "jpg", Qt::CaseInsensitive) == 0) - { - viewportPixmap.save(fileName, "JPG"); - return; - } - - if (QString::compare(extension, "bmp", Qt::CaseInsensitive) == 0) - { - viewportPixmap.save(fileName, "BMP"); - return; - } - - if (QString::compare(extension, "jpeg", Qt::CaseInsensitive) == 0) - { - viewportPixmap.save(fileName, "JPEG"); - return; - } - - CV_Error(CV_StsNullPtr, "file extension not recognized, please choose between JPG, JPEG, BMP or PNG"); - } -} - - -void DefaultViewPort::contextMenuEvent(QContextMenuEvent* evnt) -{ - if (centralWidget->vect_QActions.size() > 0) - { - QMenu menu(this); - - foreach (QAction *a, centralWidget->vect_QActions) - menu.addAction(a); - - menu.exec(evnt->globalPos()); - } -} - - -void DefaultViewPort::resizeEvent(QResizeEvent* evnt) -{ - controlImagePosition(); - - //use to compute mouse coordinate, I need to update the ratio here and in resizeEvent - ratioX = width() / float(image2Draw_mat->cols); - ratioY = height() / float(image2Draw_mat->rows); - - if (param_keepRatio == CV_WINDOW_KEEPRATIO)//to keep the same aspect ratio - { - QSize newSize = QSize(image2Draw_mat->cols, image2Draw_mat->rows); - newSize.scale(evnt->size(), Qt::KeepAspectRatio); - - //imageWidth/imageHeight = newWidth/newHeight +/- epsilon - //ratioX = ratioY +/- epsilon - //||ratioX - ratioY|| = epsilon - if (fabs(ratioX - ratioY) * 100 > ratioX) //avoid infinity loop / epsilon = 1% of ratioX - { - resize(newSize); - - //move to the middle - //newSize get the delta offset to place the picture in the middle of its parent - newSize = (evnt->size() - newSize) / 2; - - //if the toolbar is displayed, avoid drawing myview on top of it - if (centralWidget->myToolBar) - if(!centralWidget->myToolBar->isHidden()) - newSize += QSize(0, centralWidget->myToolBar->height()); - - move(newSize.width(), newSize.height()); - } - } - - return QGraphicsView::resizeEvent(evnt); -} - - -void DefaultViewPort::wheelEvent(QWheelEvent* evnt) -{ - scaleView(evnt->delta() / 240.0, evnt->pos()); - viewport()->update(); -} - - -void DefaultViewPort::mousePressEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - //icvmouseHandler: pass parameters for cv_event, flags - icvmouseHandler(evnt, mouse_down, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - if (param_matrixWorld.m11()>1) - { - setCursor(Qt::ClosedHandCursor); - positionGrabbing = evnt->pos(); - } - - QWidget::mousePressEvent(evnt); -} - - -void DefaultViewPort::mouseReleaseEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - //icvmouseHandler: pass parameters for cv_event, flags - icvmouseHandler(evnt, mouse_up, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - if (param_matrixWorld.m11()>1) - setCursor(Qt::OpenHandCursor); - - QWidget::mouseReleaseEvent(evnt); -} - - -void DefaultViewPort::mouseDoubleClickEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - //icvmouseHandler: pass parameters for cv_event, flags - icvmouseHandler(evnt, mouse_dbclick, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - QWidget::mouseDoubleClickEvent(evnt); -} - - -void DefaultViewPort::mouseMoveEvent(QMouseEvent* evnt) -{ - int cv_event = CV_EVENT_MOUSEMOVE, flags = 0; - QPoint pt = evnt->pos(); - - //icvmouseHandler: pass parameters for cv_event, flags - icvmouseHandler(evnt, mouse_move, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - if (param_matrixWorld.m11() > 1 && evnt->buttons() == Qt::LeftButton) - { - QPointF dxy = (pt - positionGrabbing)/param_matrixWorld.m11(); - positionGrabbing = evnt->pos(); - moveView(dxy); - } - - //I update the statusbar here because if the user does a cvWaitkey(0) (like with inpaint.cpp) - //the status bar will only be repaint when a click occurs. - if (centralWidget->myStatusBar) - viewport()->update(); - - QWidget::mouseMoveEvent(evnt); -} - - -void DefaultViewPort::paintEvent(QPaintEvent* evnt) -{ - QPainter myPainter(viewport()); - myPainter.setWorldTransform(param_matrixWorld); - - draw2D(&myPainter); - - //Now disable matrixWorld for overlay display - myPainter.setWorldMatrixEnabled(false); - - //overlay pixel values if zoomed in far enough - if (param_matrixWorld.m11()*ratioX >= threshold_zoom_img_region && - param_matrixWorld.m11()*ratioY >= threshold_zoom_img_region) - { - drawImgRegion(&myPainter); - } - - //in mode zoom/panning - if (param_matrixWorld.m11() > 1) - { - drawViewOverview(&myPainter); - } - - //for information overlay - if (drawInfo) - drawInstructions(&myPainter); - - //for statusbar - if (centralWidget->myStatusBar) - drawStatusBar(); - - QGraphicsView::paintEvent(evnt); -} - - -void DefaultViewPort::stopDisplayInfo() -{ - timerDisplay->stop(); - drawInfo = false; -} - - -inline bool DefaultViewPort::isSameSize(IplImage* img1, IplImage* img2) -{ - return img1->width == img2->width && img1->height == img2->height; -} - - -void DefaultViewPort::controlImagePosition() -{ - qreal left, top, right, bottom; - - //after check top-left, bottom right corner to avoid getting "out" during zoom/panning - param_matrixWorld.map(0,0,&left,&top); - - if (left > 0) - { - param_matrixWorld.translate(-left,0); - left = 0; - } - if (top > 0) - { - param_matrixWorld.translate(0,-top); - top = 0; - } - //------- - - QSize sizeImage = size(); - param_matrixWorld.map(sizeImage.width(),sizeImage.height(),&right,&bottom); - if (right < sizeImage.width()) - { - param_matrixWorld.translate(sizeImage.width()-right,0); - right = sizeImage.width(); - } - if (bottom < sizeImage.height()) - { - param_matrixWorld.translate(0,sizeImage.height()-bottom); - bottom = sizeImage.height(); - } - - //save corner position - positionCorners.setTopLeft(QPoint(left,top)); - positionCorners.setBottomRight(QPoint(right,bottom)); - //save also the inv matrix - matrixWorld_inv = param_matrixWorld.inverted(); - - //viewport()->update(); -} - -void DefaultViewPort::moveView(QPointF delta) -{ - param_matrixWorld.translate(delta.x(),delta.y()); - controlImagePosition(); - viewport()->update(); -} - -//factor is -0.5 (zoom out) or 0.5 (zoom in) -void DefaultViewPort::scaleView(qreal factor,QPointF center) -{ - factor/=5;//-0.1 <-> 0.1 - factor+=1;//0.9 <-> 1.1 - - //limit zoom out --- - if (param_matrixWorld.m11()==1 && factor < 1) - return; - - if (param_matrixWorld.m11()*factor<1) - factor = 1/param_matrixWorld.m11(); - - - //limit zoom int --- - if (param_matrixWorld.m11()>100 && factor > 1) - return; - - //inverse the transform - int a, b; - matrixWorld_inv.map(center.x(),center.y(),&a,&b); - - param_matrixWorld.translate(a-factor*a,b-factor*b); - param_matrixWorld.scale(factor,factor); - - controlImagePosition(); - - //display new zoom - if (centralWidget->myStatusBar) - centralWidget->displayStatusBar(tr("Zoom: %1%").arg(param_matrixWorld.m11()*100),1000); - - if (param_matrixWorld.m11()>1) - setCursor(Qt::OpenHandCursor); - else - unsetCursor(); -} - - -//up, down, dclick, move -void DefaultViewPort::icvmouseHandler(QMouseEvent *evnt, type_mouse_event category, int &cv_event, int &flags) -{ - Qt::KeyboardModifiers modifiers = evnt->modifiers(); - Qt::MouseButtons buttons = evnt->buttons(); - - flags = 0; - if(modifiers & Qt::ShiftModifier) - flags |= CV_EVENT_FLAG_SHIFTKEY; - if(modifiers & Qt::ControlModifier) - flags |= CV_EVENT_FLAG_CTRLKEY; - if(modifiers & Qt::AltModifier) - flags |= CV_EVENT_FLAG_ALTKEY; - - if(buttons & Qt::LeftButton) - flags |= CV_EVENT_FLAG_LBUTTON; - if(buttons & Qt::RightButton) - flags |= CV_EVENT_FLAG_RBUTTON; - if(buttons & Qt::MidButton) - flags |= CV_EVENT_FLAG_MBUTTON; - - cv_event = CV_EVENT_MOUSEMOVE; - switch(evnt->button()) - { - case Qt::LeftButton: - cv_event = tableMouseButtons[category][0]; - flags |= CV_EVENT_FLAG_LBUTTON; - break; - case Qt::RightButton: - cv_event = tableMouseButtons[category][1]; - flags |= CV_EVENT_FLAG_RBUTTON; - break; - case Qt::MidButton: - cv_event = tableMouseButtons[category][2]; - flags |= CV_EVENT_FLAG_MBUTTON; - break; - default:; - } -} - - -void DefaultViewPort::icvmouseProcessing(QPointF pt, int cv_event, int flags) -{ - //to convert mouse coordinate - qreal pfx, pfy; - matrixWorld_inv.map(pt.x(),pt.y(),&pfx,&pfy); - - mouseCoordinate.rx()=floor(pfx/ratioX); - mouseCoordinate.ry()=floor(pfy/ratioY); - - if (on_mouse) - on_mouse( cv_event, mouseCoordinate.x(), - mouseCoordinate.y(), flags, on_mouse_param ); -} - - -QSize DefaultViewPort::sizeHint() const -{ - if(image2Draw_mat) - return QSize(image2Draw_mat->cols, image2Draw_mat->rows); - else - return QGraphicsView::sizeHint(); -} - - -void DefaultViewPort::draw2D(QPainter *painter) -{ - image2Draw_qt = QImage(image2Draw_mat->data.ptr, image2Draw_mat->cols, image2Draw_mat->rows,image2Draw_mat->step,QImage::Format_RGB888); - painter->drawImage(QRect(0,0,viewport()->width(),viewport()->height()), image2Draw_qt, QRect(0,0, image2Draw_qt.width(), image2Draw_qt.height()) ); -} - -//only if CV_8UC1 or CV_8UC3 -void DefaultViewPort::drawStatusBar() -{ - if (nbChannelOriginImage!=CV_8UC1 && nbChannelOriginImage!=CV_8UC3) - return; - - if (mouseCoordinate.x()>=0 && - mouseCoordinate.y()>=0 && - mouseCoordinate.x()=0 && mouseCoordinate.y()>=0) - { - QRgb rgbValue = image2Draw_qt.pixel(mouseCoordinate); - - if (nbChannelOriginImage==CV_8UC3 ) - { - centralWidget->myStatusBar_msg->setText(tr("(x=%1, y=%2) ~ ") - .arg(mouseCoordinate.x()) - .arg(mouseCoordinate.y())+ - tr("R:%3 ").arg(qRed(rgbValue))+//.arg(value.val[0])+ - tr("G:%4 ").arg(qGreen(rgbValue))+//.arg(value.val[1])+ - tr("B:%5").arg(qBlue(rgbValue))//.arg(value.val[2]) - ); - } - - if (nbChannelOriginImage==CV_8UC1) - { - //all the channel have the same value (because of cvconvertimage), so only the r channel is dsplayed - centralWidget->myStatusBar_msg->setText(tr("(x=%1, y=%2) ~ ") - .arg(mouseCoordinate.x()) - .arg(mouseCoordinate.y())+ - tr("L:%3 ").arg(qRed(rgbValue)) - ); - } - } -} - -//accept only CV_8UC1 and CV_8UC8 image for now -void DefaultViewPort::drawImgRegion(QPainter *painter) -{ - if (nbChannelOriginImage!=CV_8UC1 && nbChannelOriginImage!=CV_8UC3) - return; - - double pixel_width = param_matrixWorld.m11()*ratioX; - double pixel_height = param_matrixWorld.m11()*ratioY; - - qreal offsetX = param_matrixWorld.dx()/pixel_width; - offsetX = offsetX - floor(offsetX); - qreal offsetY = param_matrixWorld.dy()/pixel_height; - offsetY = offsetY - floor(offsetY); - - QSize view = size(); - QVarLengthArray linesX; - for (qreal _x = offsetX*pixel_width; _x < view.width(); _x += pixel_width ) - linesX.append(QLineF(_x, 0, _x, view.height())); - - QVarLengthArray linesY; - for (qreal _y = offsetY*pixel_height; _y < view.height(); _y += pixel_height ) - linesY.append(QLineF(0, _y, view.width(), _y)); - - - QFont f = painter->font(); - int original_font_size = f.pointSize(); - //change font size - //f.setPointSize(4+(param_matrixWorld.m11()-threshold_zoom_img_region)/5); - f.setPixelSize(10+(pixel_height-threshold_zoom_img_region)/5); - painter->setFont(f); - - - for (int j=-1;jsetPen(QPen(Qt::black, 1)); - painter->drawText(QRect(point1.x(),point1.y(),param_matrixWorld.m11(),param_matrixWorld.m11()/2), - Qt::AlignCenter, val); - */ - QString val; - - val = tr("%1").arg(qRed(rgbValue)); - painter->setPen(QPen(Qt::red, 1)); - painter->drawText(QRect(pos_in_view.x(),pos_in_view.y(),pixel_width,pixel_height/3), - Qt::AlignCenter, val); - - val = tr("%1").arg(qGreen(rgbValue)); - painter->setPen(QPen(Qt::green, 1)); - painter->drawText(QRect(pos_in_view.x(),pos_in_view.y()+pixel_height/3,pixel_width,pixel_height/3), - Qt::AlignCenter, val); - - val = tr("%1").arg(qBlue(rgbValue)); - painter->setPen(QPen(Qt::blue, 1)); - painter->drawText(QRect(pos_in_view.x(),pos_in_view.y()+2*pixel_height/3,pixel_width,pixel_height/3), - Qt::AlignCenter, val); - - } - - if (nbChannelOriginImage==CV_8UC1) - { - QString val = tr("%1").arg(qRed(rgbValue)); - painter->drawText(QRect(pos_in_view.x(),pos_in_view.y(),pixel_width,pixel_height), - Qt::AlignCenter, val); - } - } - - painter->setPen(QPen(Qt::black, 1)); - painter->drawLines(linesX.data(), linesX.size()); - painter->drawLines(linesY.data(), linesY.size()); - - //restore font size - f.setPointSize(original_font_size); - painter->setFont(f); - -} - -void DefaultViewPort::drawViewOverview(QPainter *painter) -{ - QSize viewSize = size(); - viewSize.scale ( 100, 100,Qt::KeepAspectRatio ); - - const int margin = 5; - - //draw the image's location - painter->setBrush(QColor(0, 0, 0, 127)); - painter->setPen(Qt::darkGreen); - painter->drawRect(QRect(width()-viewSize.width()-margin, 0,viewSize.width(),viewSize.height())); - - //daw the view's location inside the image - qreal ratioSize = 1/param_matrixWorld.m11(); - qreal ratioWindow = (qreal)(viewSize.height())/(qreal)(size().height()); - painter->setPen(Qt::darkBlue); - painter->drawRect(QRectF(width()-viewSize.width()-positionCorners.left()*ratioSize*ratioWindow-margin, - -positionCorners.top()*ratioSize*ratioWindow, - (viewSize.width()-1)*ratioSize, - (viewSize.height()-1)*ratioSize) - ); -} - -void DefaultViewPort::drawInstructions(QPainter *painter) -{ - QFontMetrics metrics = QFontMetrics(font()); - int border = qMax(4, metrics.leading()); - - QRect qrect = metrics.boundingRect(0, 0, width() - 2*border, int(height()*0.125), - Qt::AlignCenter | Qt::TextWordWrap, infoText); - painter->setRenderHint(QPainter::TextAntialiasing); - painter->fillRect(QRect(0, 0, width(), qrect.height() + 2*border), - QColor(0, 0, 0, 127)); - painter->setPen(Qt::white); - painter->fillRect(QRect(0, 0, width(), qrect.height() + 2*border), - QColor(0, 0, 0, 127)); - - painter->drawText((width() - qrect.width())/2, border, - qrect.width(), qrect.height(), - Qt::AlignCenter | Qt::TextWordWrap, infoText); -} - - -void DefaultViewPort::setSize(QSize /*size_*/) -{ -} - - -////////////////////////////////////////////////////// -// OpenGlViewPort - -#ifdef HAVE_QT_OPENGL - -OpenGlViewPort::OpenGlViewPort(QWidget* _parent) : QGLWidget(_parent), size(-1, -1) -{ - mouseCallback = 0; - mouseData = 0; - - glDrawCallback = 0; - glDrawData = 0; -} - -OpenGlViewPort::~OpenGlViewPort() -{ -} - -QWidget* OpenGlViewPort::getWidget() -{ - return this; -} - -void OpenGlViewPort::setMouseCallBack(CvMouseCallback callback, void* param) -{ - mouseCallback = callback; - mouseData = param; -} - -void OpenGlViewPort::writeSettings(QSettings& /*settings*/) -{ -} - -void OpenGlViewPort::readSettings(QSettings& /*settings*/) -{ -} - -double OpenGlViewPort::getRatio() -{ - return (double)width() / height(); -} - -void OpenGlViewPort::setRatio(int /*flags*/) -{ -} - -void OpenGlViewPort::updateImage(const CvArr* /*arr*/) -{ -} - -void OpenGlViewPort::startDisplayInfo(QString /*text*/, int /*delayms*/) -{ -} - -void OpenGlViewPort::setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata) -{ - glDrawCallback = callback; - glDrawData = userdata; -} - -void OpenGlViewPort::makeCurrentOpenGlContext() -{ - makeCurrent(); -} - -void OpenGlViewPort::updateGl() -{ - QGLWidget::updateGL(); -} - -void OpenGlViewPort::initializeGL() -{ - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); -} - -void OpenGlViewPort::resizeGL(int w, int h) -{ - glViewport(0, 0, w, h); -} - -void OpenGlViewPort::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (glDrawCallback) - glDrawCallback(glDrawData); -} - -void OpenGlViewPort::mousePressEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - icvmouseHandler(evnt, mouse_down, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - QGLWidget::mousePressEvent(evnt); -} - - -void OpenGlViewPort::mouseReleaseEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - icvmouseHandler(evnt, mouse_up, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - QGLWidget::mouseReleaseEvent(evnt); -} - - -void OpenGlViewPort::mouseDoubleClickEvent(QMouseEvent* evnt) -{ - int cv_event = -1, flags = 0; - QPoint pt = evnt->pos(); - - icvmouseHandler(evnt, mouse_dbclick, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - QGLWidget::mouseDoubleClickEvent(evnt); -} - - -void OpenGlViewPort::mouseMoveEvent(QMouseEvent* evnt) -{ - int cv_event = CV_EVENT_MOUSEMOVE, flags = 0; - QPoint pt = evnt->pos(); - - //icvmouseHandler: pass parameters for cv_event, flags - icvmouseHandler(evnt, mouse_move, cv_event, flags); - icvmouseProcessing(QPointF(pt), cv_event, flags); - - QGLWidget::mouseMoveEvent(evnt); -} - -void OpenGlViewPort::icvmouseHandler(QMouseEvent* evnt, type_mouse_event category, int& cv_event, int& flags) -{ - Qt::KeyboardModifiers modifiers = evnt->modifiers(); - Qt::MouseButtons buttons = evnt->buttons(); - - flags = 0; - if (modifiers & Qt::ShiftModifier) - flags |= CV_EVENT_FLAG_SHIFTKEY; - if (modifiers & Qt::ControlModifier) - flags |= CV_EVENT_FLAG_CTRLKEY; - if (modifiers & Qt::AltModifier) - flags |= CV_EVENT_FLAG_ALTKEY; - - if (buttons & Qt::LeftButton) - flags |= CV_EVENT_FLAG_LBUTTON; - if (buttons & Qt::RightButton) - flags |= CV_EVENT_FLAG_RBUTTON; - if (buttons & Qt::MidButton) - flags |= CV_EVENT_FLAG_MBUTTON; - - cv_event = CV_EVENT_MOUSEMOVE; - switch (evnt->button()) - { - case Qt::LeftButton: - cv_event = tableMouseButtons[category][0]; - flags |= CV_EVENT_FLAG_LBUTTON; - break; - - case Qt::RightButton: - cv_event = tableMouseButtons[category][1]; - flags |= CV_EVENT_FLAG_RBUTTON; - break; - - case Qt::MidButton: - cv_event = tableMouseButtons[category][2]; - flags |= CV_EVENT_FLAG_MBUTTON; - break; - - default: - ; - } -} - - -void OpenGlViewPort::icvmouseProcessing(QPointF pt, int cv_event, int flags) -{ - if (mouseCallback) - mouseCallback(cv_event, pt.x(), pt.y(), flags, mouseData); -} - - -QSize OpenGlViewPort::sizeHint() const -{ - if (size.width() > 0 && size.height() > 0) - return size; - - return QGLWidget::sizeHint(); -} - -void OpenGlViewPort::setSize(QSize size_) -{ - size = size_; - updateGeometry(); -} - -#endif - -#endif // HAVE_QT diff --git a/modules/highgui/src/window_QT.h b/modules/highgui/src/window_QT.h deleted file mode 100644 index a96a8c6..0000000 --- a/modules/highgui/src/window_QT.h +++ /dev/null @@ -1,563 +0,0 @@ -//IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. - - -// License Agreement -// For Open Source Computer Vision Library - -//Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -//Copyright (C) 2008-2010, Willow Garage Inc., all rights reserved. -//Third party copyrights are property of their respective owners. - -//Redistribution and use in source and binary forms, with or without modification, -//are permitted provided that the following conditions are met: - -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. - -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. - -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -//indirect, incidental, special, exemplary, or consequential damages -//(including, but not limited to, procurement of substitute goods or services; -//loss of use, data, or profits; or business interruption) however caused -//and on any theory of liability, whether in contract, strict liability, -//or tort (including negligence or otherwise) arising in any way out of -//the use of this software, even if advised of the possibility of such damage. - -//--------------------Google Code 2010 -- Yannick Verdie--------------------// -#ifndef __OPENCV_HIGHGUI_QT_H__ -#define __OPENCV_HIGHGUI_QT_H__ - -#include "precomp.hpp" - -#if defined( HAVE_QT_OPENGL ) -#include -#include -#endif - -#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 - -//start private enum -enum { CV_MODE_NORMAL = 0, CV_MODE_OPENGL = 1 }; - -//we can change the keyboard shortcuts from here ! -enum { shortcut_zoom_normal = Qt::CTRL + Qt::Key_Z, - shortcut_zoom_imgRegion = Qt::CTRL + Qt::Key_X, - shortcut_save_img = Qt::CTRL + Qt::Key_S, - shortcut_properties_win = Qt::CTRL + Qt::Key_P, - shortcut_zoom_in = Qt::CTRL + Qt::Key_Plus,//QKeySequence(QKeySequence::ZoomIn), - shortcut_zoom_out = Qt::CTRL + Qt::Key_Minus,//QKeySequence(QKeySequence::ZoomOut), - shortcut_panning_left = Qt::CTRL + Qt::Key_Left, - shortcut_panning_right = Qt::CTRL + Qt::Key_Right, - shortcut_panning_up = Qt::CTRL + Qt::Key_Up, - shortcut_panning_down = Qt::CTRL + Qt::Key_Down - }; - -//end enum - -class CvWindow; -class ViewPort; - - -class GuiReceiver : public QObject -{ - Q_OBJECT - -public: - GuiReceiver(); - ~GuiReceiver(); - - int start(); - void isLastWindow(); - - bool bTimeOut; - QTimer* timer; - -public slots: - void createWindow( QString name, int flags = 0 ); - void destroyWindow(QString name); - void destroyAllWindow(); - void addSlider(QString trackbar_name, QString window_name, void* value, int count, void* on_change); - void addSlider2(QString trackbar_name, QString window_name, void* value, int count, void* on_change, void *userdata); - void moveWindow(QString name, int x, int y); - void resizeWindow(QString name, int width, int height); - void showImage(QString name, void* arr); - void displayInfo( QString name, QString text, int delayms ); - void displayStatusBar( QString name, QString text, int delayms ); - void timeOut(); - void toggleFullScreen(QString name, double flags ); - double isFullScreen(QString name); - double getPropWindow(QString name); - void setPropWindow(QString name, double flags ); - double getRatioWindow(QString name); - void setRatioWindow(QString name, double arg2 ); - void saveWindowParameters(QString name); - void loadWindowParameters(QString name); - void putText(void* arg1, QString text, QPoint org, void* font); - void addButton(QString button_name, int button_type, int initial_button_state , void* on_change, void* userdata); - void enablePropertiesButtonEachWindow(); - - void setOpenGlDrawCallback(QString name, void* callback, void* userdata); - void setOpenGlContext(QString name); - void updateWindow(QString name); - double isOpenGl(QString name); - -private: - int nb_windows; - bool doesExternalQAppExist; -}; - - -enum typeBar { type_CvTrackbar = 0, type_CvButtonbar = 1 }; -class CvBar : public QHBoxLayout -{ -public: - typeBar type; - QString name_bar; - QPointer myparent; -}; - - -class CvButtonbar : public CvBar -{ - Q_OBJECT -public: - CvButtonbar(QWidget* arg, QString bar_name); - - void addButton(QString button_name, CvButtonCallback call, void* userdata, int button_type, int initial_button_state); - -private: - void setLabel(); - - QPointer label; - QPointer group_button; -}; - - -class CvPushButton : public QPushButton -{ - Q_OBJECT -public: - CvPushButton(CvButtonbar* par, QString button_name, CvButtonCallback call, void* userdata); - -private: - CvButtonbar* myparent; - QString button_name ; - CvButtonCallback callback; - void* userdata; - -private slots: - void callCallBack(bool); -}; - - -class CvCheckBox : public QCheckBox -{ - Q_OBJECT -public: - CvCheckBox(CvButtonbar* par, QString button_name, CvButtonCallback call, void* userdata, int initial_button_state); - -private: - CvButtonbar* myparent; - QString button_name ; - CvButtonCallback callback; - void* userdata; - -private slots: - void callCallBack(bool); -}; - - -class CvRadioButton : public QRadioButton -{ - Q_OBJECT -public: - CvRadioButton(CvButtonbar* par, QString button_name, CvButtonCallback call, void* userdata, int initial_button_state); - -private: - CvButtonbar* myparent; - QString button_name ; - CvButtonCallback callback; - void* userdata; - -private slots: - void callCallBack(bool); -}; - - -class CvTrackbar : public CvBar -{ - Q_OBJECT -public: - CvTrackbar(CvWindow* parent, QString name, int* value, int count, CvTrackbarCallback on_change); - CvTrackbar(CvWindow* parent, QString name, int* value, int count, CvTrackbarCallback2 on_change, void* data); - - QPointer slider; - -private slots: - void createDialog(); - void update(int myvalue); - -private: - void setLabel(int myvalue); - void create(CvWindow* arg, QString name, int* value, int count); - QString createLabel(); - QPointer label; - CvTrackbarCallback callback; - CvTrackbarCallback2 callback2;//look like it is use by python binding - int* dataSlider; - void* userdata; -}; - -//Both are top level window, so that a way to differenciate them. -//if (obj->metaObject ()->className () == "CvWindow") does not give me robust result - -enum typeWindow { type_CvWindow = 1, type_CvWinProperties = 2 }; -class CvWinModel : public QWidget -{ -public: -typeWindow type; -}; - - -class CvWinProperties : public CvWinModel -{ - Q_OBJECT -public: - CvWinProperties(QString name, QObject* parent); - ~CvWinProperties(); - QPointer myLayout; - -private: - void closeEvent ( QCloseEvent * e ); - void showEvent ( QShowEvent * event ) ; - void hideEvent ( QHideEvent * event ) ; -}; - - -class CvWindow : public CvWinModel -{ - Q_OBJECT -public: - CvWindow(QString arg2, int flag = CV_WINDOW_NORMAL); - ~CvWindow(); - - void setMouseCallBack(CvMouseCallback m, void* param); - - void writeSettings(); - void readSettings(); - - double getRatio(); - void setRatio(int flags); - - int getPropWindow(); - void setPropWindow(int flags); - - void toggleFullScreen(int flags); - - void updateImage(void* arr); - - void displayInfo(QString text, int delayms); - void displayStatusBar(QString text, int delayms); - - void enablePropertiesButton(); - - static CvButtonbar* createButtonBar(QString bar_name); - - static void addSlider(CvWindow* w, QString name, int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL)); - static void addSlider2(CvWindow* w, QString name, int* value, int count, CvTrackbarCallback2 on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(0)); - - void setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata); - void makeCurrentOpenGlContext(); - void updateGl(); - bool isOpenGl(); - - void setViewportSize(QSize size); - - //parameters (will be save/load) - int param_flags; - int param_gui_mode; - int param_ratio_mode; - - QPointer myGlobalLayout; //All the widget (toolbar, view, LayoutBar, ...) are attached to it - QPointer myBarLayout; - - QVector vect_QActions; - - QPointer myStatusBar; - QPointer myToolBar; - QPointer myStatusBar_msg; - -protected: - virtual void keyPressEvent(QKeyEvent* event); - -private: - - int mode_display; //opengl or native - ViewPort* myView; - - QVector vect_QShortcuts; - - void icvLoadTrackbars(QSettings *settings); - void icvSaveTrackbars(QSettings *settings); - void icvLoadControlPanel(); - void icvSaveControlPanel(); - void icvLoadButtonbar(CvButtonbar* t,QSettings *settings); - void icvSaveButtonbar(CvButtonbar* t,QSettings *settings); - - void createActions(); - void createShortcuts(); - void createToolBar(); - void createView(); - void createStatusBar(); - void createGlobalLayout(); - void createBarLayout(); - CvWinProperties* createParameterWindow(); - - void hideTools(); - void showTools(); - QSize getAvailableSize(); - -private slots: - void displayPropertiesWin(); -}; - - -enum type_mouse_event { mouse_up = 0, mouse_down = 1, mouse_dbclick = 2, mouse_move = 3 }; -static const int tableMouseButtons[][3]={ - {CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP}, //mouse_up - {CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN}, //mouse_down - {CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK}, //mouse_dbclick - {CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE, CV_EVENT_MOUSEMOVE} //mouse_move -}; - - -class ViewPort -{ -public: - virtual ~ViewPort() {} - - virtual QWidget* getWidget() = 0; - - virtual void setMouseCallBack(CvMouseCallback callback, void* param) = 0; - - virtual void writeSettings(QSettings& settings) = 0; - virtual void readSettings(QSettings& settings) = 0; - - virtual double getRatio() = 0; - virtual void setRatio(int flags) = 0; - - virtual void updateImage(const CvArr* arr) = 0; - - virtual void startDisplayInfo(QString text, int delayms) = 0; - - virtual void setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata) = 0; - virtual void makeCurrentOpenGlContext() = 0; - virtual void updateGl() = 0; - - virtual void setSize(QSize size_) = 0; -}; - - - -#ifdef HAVE_QT_OPENGL - -class OpenGlViewPort : public QGLWidget, public ViewPort -{ -public: - explicit OpenGlViewPort(QWidget* parent); - ~OpenGlViewPort(); - - QWidget* getWidget(); - - void setMouseCallBack(CvMouseCallback callback, void* param); - - void writeSettings(QSettings& settings); - void readSettings(QSettings& settings); - - double getRatio(); - void setRatio(int flags); - - void updateImage(const CvArr* arr); - - void startDisplayInfo(QString text, int delayms); - - void setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata); - void makeCurrentOpenGlContext(); - void updateGl(); - - void setSize(QSize size_); - -protected: - void initializeGL(); - void resizeGL(int w, int h); - void paintGL(); - - void mouseMoveEvent(QMouseEvent* event); - void mousePressEvent(QMouseEvent* event); - void mouseReleaseEvent(QMouseEvent* event); - void mouseDoubleClickEvent(QMouseEvent* event); - - QSize sizeHint() const; - -private: - QSize size; - - CvMouseCallback mouseCallback; - void* mouseData; - - CvOpenGlDrawCallback glDrawCallback; - void* glDrawData; - - void icvmouseHandler(QMouseEvent* event, type_mouse_event category, int& cv_event, int& flags); - void icvmouseProcessing(QPointF pt, int cv_event, int flags); -}; - -#endif // HAVE_QT_OPENGL - - -class DefaultViewPort : public QGraphicsView, public ViewPort -{ - Q_OBJECT - -public: - DefaultViewPort(CvWindow* centralWidget, int arg2); - ~DefaultViewPort(); - - QWidget* getWidget(); - - void setMouseCallBack(CvMouseCallback callback, void* param); - - void writeSettings(QSettings& settings); - void readSettings(QSettings& settings); - - double getRatio(); - void setRatio(int flags); - - void updateImage(const CvArr* arr); - - void startDisplayInfo(QString text, int delayms); - - void setOpenGlDrawCallback(CvOpenGlDrawCallback callback, void* userdata); - void makeCurrentOpenGlContext(); - void updateGl(); - - void setSize(QSize size_); - -public slots: - //reference: - //http://www.qtcentre.org/wiki/index.php?title=QGraphicsView:_Smooth_Panning_and_Zooming - //http://doc.qt.nokia.com/4.6/gestures-imagegestures-imagewidget-cpp.html - - void siftWindowOnLeft(); - void siftWindowOnRight(); - void siftWindowOnUp() ; - void siftWindowOnDown(); - - void resetZoom(); - void imgRegion(); - void ZoomIn(); - void ZoomOut(); - - void saveView(); - -protected: - void contextMenuEvent(QContextMenuEvent* event); - void resizeEvent(QResizeEvent* event); - void paintEvent(QPaintEvent* paintEventInfo); - void wheelEvent(QWheelEvent* event); - void mouseMoveEvent(QMouseEvent* event); - void mousePressEvent(QMouseEvent* event); - void mouseReleaseEvent(QMouseEvent* event); - void mouseDoubleClickEvent(QMouseEvent* event); - -private: - int param_keepRatio; - - //parameters (will be save/load) - QTransform param_matrixWorld; - - CvMat* image2Draw_mat; - QImage image2Draw_qt; - int nbChannelOriginImage; - - //for mouse callback - CvMouseCallback on_mouse; - void* on_mouse_param; - - - void scaleView(qreal scaleFactor, QPointF center); - void moveView(QPointF delta); - - QPoint mouseCoordinate; - QPointF positionGrabbing; - QRect positionCorners; - QTransform matrixWorld_inv; - float ratioX, ratioY; - - bool isSameSize(IplImage* img1,IplImage* img2); - - QSize sizeHint() const; - QPointer centralWidget; - QPointer timerDisplay; - bool drawInfo; - QString infoText; - QRectF target; - - void drawInstructions(QPainter *painter); - void drawViewOverview(QPainter *painter); - void drawImgRegion(QPainter *painter); - void draw2D(QPainter *painter); - void drawStatusBar(); - void controlImagePosition(); - void icvmouseHandler(QMouseEvent *event, type_mouse_event category, int &cv_event, int &flags); - void icvmouseProcessing(QPointF pt, int cv_event, int flags); - -private slots: - void stopDisplayInfo(); -}; - -#endif diff --git a/modules/highgui/src/window_QT.qrc b/modules/highgui/src/window_QT.qrc deleted file mode 100644 index 7bcdc24..0000000 --- a/modules/highgui/src/window_QT.qrc +++ /dev/null @@ -1,15 +0,0 @@ - - - files_Qt/Milky/48/28.png - files_Qt/Milky/48/23.png - files_Qt/Milky/48/19.png - files_Qt/Milky/48/24.png - files_Qt/Milky/48/27.png - files_Qt/Milky/48/61.png - files_Qt/Milky/48/106.png - files_Qt/Milky/48/107.png - files_Qt/Milky/48/7.png - files_Qt/Milky/48/38.png - files_Qt/stylesheet_trackbar.qss - - diff --git a/modules/highgui/src/window_carbon.cpp b/modules/highgui/src/window_carbon.cpp deleted file mode 100644 index 3d092e7..0000000 --- a/modules/highgui/src/window_carbon.cpp +++ /dev/null @@ -1,1100 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#include -#include //YV - -#include -#include -#include - -//#define MS_TO_TICKS(a) a*3/50 - -#define LABELWIDTH 64 -#define INTERWIDGETSPACE 16 -#define WIDGETHEIGHT 32 -#define NO_KEY -1 - -struct CvWindow; - -typedef struct CvTrackbar -{ - int signature; - - ControlRef trackbar; - ControlRef label; - - char* name; - CvTrackbar* next; - CvWindow* parent; - int* data; - int pos; - int maxval; - int labelSize;//Yannick Verdie - CvTrackbarCallback notify; - CvTrackbarCallback2 notify2; - void* userdata; -} -CvTrackbar; - - -typedef struct CvWindow -{ - int signature; - - char* name; - CvWindow* prev; - CvWindow* next; - - WindowRef window; - WindowRef oldwindow;//YV - CGImageRef imageRef; - int imageWidth;//FD - int imageHeight;//FD - - CvMat* image; - CvMat* dst_image; - int converted; - int last_key; - int flags; - int status;//YV - Ptr restoreState;//YV - - CvMouseCallback on_mouse; - void* on_mouse_param; - - struct { - int pos; - int rows; - CvTrackbar* first; - } - toolbar; - int trackbarheight; -} -CvWindow; - -static CvWindow* hg_windows = 0; - -#define Assert(exp) \ -if( !(exp) ) \ -{ \ - printf("Assertion: %s %s: %d\n", #exp, __FILE__, __LINE__);\ - assert(exp); \ -} - -static int wasInitialized = 0; -static char lastKey = NO_KEY; -OSStatus keyHandler(EventHandlerCallRef hcr, EventRef theEvent, void* inUserData); -static pascal OSStatus windowEventHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void *inUserData); - -static const EventTypeSpec applicationKeyboardEvents[] = -{ - { kEventClassKeyboard, kEventRawKeyDown }, -}; - -CV_IMPL int cvInitSystem( int argc, char** argv ) -{ - OSErr err = noErr; - if( !wasInitialized ) - { - - hg_windows = 0; - err = InstallApplicationEventHandler(NewEventHandlerUPP( keyHandler),GetEventTypeCount(applicationKeyboardEvents),applicationKeyboardEvents,NULL,NULL); - if (err != noErr) - { - fprintf(stderr,"InstallApplicationEventHandler was not ok\n"); - } - wasInitialized = 1; - } - - return 0; -} - -// TODO: implement missing functionality -CV_IMPL int cvStartWindowThread() -{ - return 0; -} - -static int icvCountTrackbarInWindow( const CvWindow* window) -{ - CvTrackbar* trackbar = window->toolbar.first; - int count = 0; - while (trackbar != 0) { - count++; - trackbar = trackbar->next; - } - return count; -} - -static CvTrackbar* icvTrackbarByHandle( void * handle ) -{ - CvWindow* window = hg_windows; - CvTrackbar* trackbar = NULL; - while( window != 0 && window->window != handle) { - trackbar = window->toolbar.first; - while (trackbar != 0 && trackbar->trackbar != handle) - trackbar = trackbar->next; - if (trackbar != 0 && trackbar->trackbar == handle) - break; - window = window->next; - } - return trackbar; -} - -static CvWindow* icvWindowByHandle( void * handle ) -{ - CvWindow* window = hg_windows; - - while( window != 0 && window->window != handle) - window = window->next; - - return window; -} - -CV_IMPL CvWindow * icvFindWindowByName( const char* name) -{ - CvWindow* window = hg_windows; - while( window != 0 && strcmp(name, window->name) != 0 ) - window = window->next; - - return window; -} - -static CvTrackbar* icvFindTrackbarByName( const CvWindow* window, const char* name ) -{ - CvTrackbar* trackbar = window->toolbar.first; - - while (trackbar != 0 && strcmp( trackbar->name, name ) != 0) - trackbar = trackbar->next; - - return trackbar; -} - -//FD -/* draw image to frame */ -static void icvDrawImage( CvWindow* window ) -{ - Assert( window != 0 ); - if( window->imageRef == 0 ) return; - - CGContextRef myContext; - CGRect rect; - Rect portrect; - int width = window->imageWidth; - int height = window->imageHeight; - - GetWindowPortBounds(window->window, &portrect); - - if(!( window->flags & CV_WINDOW_AUTOSIZE) ) //YV - { - CGPoint origin = {0,0}; - CGSize size = {portrect.right-portrect.left, portrect.bottom-portrect.top-window->trackbarheight}; - rect.origin = origin; rect.size = size; - } - else - { - CGPoint origin = {0, portrect.bottom - height - window->trackbarheight}; - CGSize size = {width, height}; - rect.origin = origin; rect.size = size; - } - - /* To be sybnchronous we are using this, better would be to susbcribe to the draw event and process whenever requested, we might save SOME CPU cycles*/ - SetPortWindowPort (window->window); - QDBeginCGContext (GetWindowPort (window->window), &myContext); - CGContextSetInterpolationQuality (myContext, kCGInterpolationLow); - CGContextDrawImage(myContext,rect,window->imageRef); - CGContextFlush(myContext);// 4 - QDEndCGContext (GetWindowPort(window->window), &myContext);// 5 -} - -//FD -/* update imageRef */ -static void icvPutImage( CvWindow* window ) -{ - Assert( window != 0 ); - if( window->image == 0 ) return; - - CGColorSpaceRef colorspace = NULL; - CGDataProviderRef provider = NULL; - int width = window->imageWidth = window->image->cols; - int height = window->imageHeight = window->image->rows; - - colorspace = CGColorSpaceCreateDeviceRGB(); - - int size = 8; - int nbChannels = 3; - - provider = CGDataProviderCreateWithData(NULL, window->image->data.ptr, width * height , NULL ); - - if (window->imageRef != NULL){ - CGImageRelease(window->imageRef); - window->imageRef = NULL; - } - - window->imageRef = CGImageCreate( width, height, size , size*nbChannels , window->image->step, colorspace, kCGImageAlphaNone , provider, NULL, true, kCGRenderingIntentDefault ); - icvDrawImage( window ); - - /* release the provider's memory */ - CGDataProviderRelease( provider ); -} - -static void icvUpdateWindowSize( const CvWindow* window ) -{ - int width = 0, height = 240; /* init à al taille de base de l'image*/ - Rect globalBounds; - - GetWindowBounds(window->window, kWindowContentRgn, &globalBounds); - - int minWidth = 320; - - if( window->image ) { - width = MAX(MAX(window->image->width, width), minWidth); - height = window->image->height; - } else - width = minWidth; - - height += window->trackbarheight; - - //height +=WIDGETHEIGHT; /* 32 pixels are spearating tracbars from the video display */ - - globalBounds.right = globalBounds.left + width; - globalBounds.bottom = globalBounds.top + height; - SetWindowBounds(window->window, kWindowContentRgn, &globalBounds); -} - -static void icvDeleteWindow( CvWindow* window ) -{ - CvTrackbar* trackbar; - - if( window->prev ) - window->prev->next = window->next; - else - hg_windows = window->next; - - if( window->next ) - window->next->prev = window->prev; - - window->prev = window->next = 0; - - cvReleaseMat( &window->image ); - cvReleaseMat( &window->dst_image ); - - for( trackbar = window->toolbar.first; trackbar != 0; ) - { - CvTrackbar* next = trackbar->next; - cvFree( (void**)&trackbar ); - trackbar = next; - } - - if (window->imageRef != NULL) - CGImageRelease(window->imageRef); - - DisposeWindow (window->window);//YV - - cvFree( (void**)&window ); -} - - -CV_IMPL void cvDestroyWindow( const char* name) -{ - CV_FUNCNAME( "cvDestroyWindow" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - EXIT; - - icvDeleteWindow( window ); - - __END__; -} - - -CV_IMPL void cvDestroyAllWindows( void ) -{ - while( hg_windows ) - { - CvWindow* window = hg_windows; - icvDeleteWindow( window ); - } -} - - -CV_IMPL void cvShowImage( const char* name, const CvArr* arr) -{ - CV_FUNCNAME( "cvShowImage" ); - - __BEGIN__; - - CvWindow* window; - int origin = 0; - int resize = 0; - CvMat stub, *image; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - { - cvNamedWindow(name, 1); - window = icvFindWindowByName(name); - } - - if( !window || !arr ) - EXIT; // keep silence here. - - if( CV_IS_IMAGE_HDR( arr )) - origin = ((IplImage*)arr)->origin; - - CV_CALL( image = cvGetMat( arr, &stub )); - - /* - if( !window->image ) - cvResizeWindow( name, image->cols, image->rows ); - */ - - if( window->image && - !CV_ARE_SIZES_EQ(window->image, image) ) { - if ( ! (window->flags & CV_WINDOW_AUTOSIZE) )//FD - resize = 1; - cvReleaseMat( &window->image ); - } - - if( !window->image ) { - resize = 1;//FD - window->image = cvCreateMat( image->rows, image->cols, CV_8UC3 ); - } - - cvConvertImage( image, window->image, (origin != 0 ? CV_CVTIMG_FLIP : 0) + CV_CVTIMG_SWAP_RB ); - icvPutImage( window ); - if ( resize )//FD - icvUpdateWindowSize( window ); - - __END__; -} - -CV_IMPL void cvResizeWindow( const char* name, int width, int height) -{ - CV_FUNCNAME( "cvResizeWindow" ); - - __BEGIN__; - - CvWindow* window; - //CvTrackbar* trackbar; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - SizeWindow(window->window, width, height, true); - - __END__; -} - -CV_IMPL void cvMoveWindow( const char* name, int x, int y) -{ - CV_FUNCNAME( "cvMoveWindow" ); - - __BEGIN__; - - CvWindow* window; - //CvTrackbar* trackbar; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - MoveWindow(window->window, x, y, true); - - __END__; -} - -void TrackbarActionProcPtr (ControlRef theControl, ControlPartCode partCode) -{ - CvTrackbar * trackbar = icvTrackbarByHandle (theControl); - - if (trackbar == NULL) - { - fprintf(stderr,"Error getting trackbar\n"); - return; - } - else - { - int pos = GetControl32BitValue (theControl); - if ( trackbar->data ) - *trackbar->data = pos; - if ( trackbar->notify ) - trackbar->notify(pos); - else if ( trackbar->notify2 ) - trackbar->notify2(pos, trackbar->userdata); - - //--------YV--------------------------- - CFStringEncoding encoding = kCFStringEncodingASCII; - CFAllocatorRef alloc_default = kCFAllocatorDefault; // = NULL; - - char valueinchar[20]; - sprintf(valueinchar, " (%d)", *trackbar->data); - - // create an empty CFMutableString - CFIndex maxLength = 256; - CFMutableStringRef cfstring = CFStringCreateMutable(alloc_default,maxLength); - - // append some c strings into it. - CFStringAppendCString(cfstring,trackbar->name,encoding); - CFStringAppendCString(cfstring,valueinchar,encoding); - - SetControlData(trackbar->label, kControlEntireControl,kControlStaticTextCFStringTag, sizeof(cfstring), &cfstring); - DrawControls(trackbar->parent->window); - //----------------------------------------- - } -} - - -static int icvCreateTrackbar (const char* trackbar_name, - const char* window_name, - int* val, int count, - CvTrackbarCallback on_notify, - CvTrackbarCallback2 on_notify2, - void* userdata) -{ - int result = 0; - - CV_FUNCNAME( "icvCreateTrackbar" ); - __BEGIN__; - - /*char slider_name[32];*/ - CvWindow* window = 0; - CvTrackbar* trackbar = 0; - Rect stboundsRect; - ControlRef outControl; - ControlRef stoutControl; - Rect bounds; - - if( !window_name || !trackbar_name ) - CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" ); - - if( count <= 0 ) - CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" ); - - window = icvFindWindowByName(window_name); - if( !window ) - EXIT; - - trackbar = icvFindTrackbarByName(window,trackbar_name); - if( !trackbar ) - { - int len = strlen(trackbar_name); - trackbar = (CvTrackbar*)cvAlloc(sizeof(CvTrackbar) + len + 1); - memset( trackbar, 0, sizeof(*trackbar)); - trackbar->signature = CV_TRACKBAR_MAGIC_VAL; - trackbar->name = (char*)(trackbar+1); - memcpy( trackbar->name, trackbar_name, len + 1 ); - trackbar->parent = window; - trackbar->next = window->toolbar.first; - window->toolbar.first = trackbar; - - if( val ) - { - int value = *val; - if( value < 0 ) - value = 0; - if( value > count ) - value = count; - trackbar->pos = value; - trackbar->data = val; - } - - trackbar->maxval = count; - - //----------- YV ---------------------- - //get nb of digits - int nbDigit = 0; - while((count/=10)>10){ - nbDigit++; - } - - //pad size maxvalue in pixel - Point qdSize; - char valueinchar[strlen(trackbar_name)+1 +1 +1+nbDigit+1];//length+\n +space +(+nbDigit+) - sprintf(valueinchar, "%s (%d)",trackbar_name, trackbar->maxval); - SInt16 baseline; - CFStringRef text = CFStringCreateWithCString(NULL,valueinchar,kCFStringEncodingASCII); - GetThemeTextDimensions( text, kThemeCurrentPortFont, kThemeStateActive, false, &qdSize, &baseline ); - trackbar->labelSize = qdSize.h; - //-------------------------------------- - - int c = icvCountTrackbarInWindow(window); - - GetWindowBounds(window->window,kWindowContentRgn,&bounds); - - stboundsRect.top = (INTERWIDGETSPACE +WIDGETHEIGHT)* (c-1)+INTERWIDGETSPACE; - stboundsRect.left = INTERWIDGETSPACE; - stboundsRect.bottom = stboundsRect.top + WIDGETHEIGHT; - stboundsRect.right = stboundsRect.left+LABELWIDTH; - - //fprintf(stdout,"create trackabar bounds (%d %d %d %d)\n",stboundsRect.top,stboundsRect.left,stboundsRect.bottom,stboundsRect.right); - //----------- YV ---------------------- - sprintf(valueinchar, "%s (%d)",trackbar_name, trackbar->pos); - CreateStaticTextControl (window->window,&stboundsRect,CFStringCreateWithCString(NULL,valueinchar,kCFStringEncodingASCII),NULL,&stoutControl); - //-------------------------------------- - - stboundsRect.top = (INTERWIDGETSPACE +WIDGETHEIGHT)* (c-1)+INTERWIDGETSPACE; - stboundsRect.left = INTERWIDGETSPACE*2+LABELWIDTH; - stboundsRect.bottom = stboundsRect.top + WIDGETHEIGHT; - stboundsRect.right = bounds.right-INTERWIDGETSPACE; - - CreateSliderControl (window->window,&stboundsRect, trackbar->pos,0,trackbar->maxval,kControlSliderLiveFeedback,0,true,NewControlActionUPP(TrackbarActionProcPtr),&outControl); - - bounds.bottom += INTERWIDGETSPACE + WIDGETHEIGHT; - SetControlVisibility (outControl,true,true); - SetControlVisibility (stoutControl,true,true); - - trackbar->trackbar = outControl; - trackbar->label = stoutControl; - if (c == 1) - window->trackbarheight = INTERWIDGETSPACE*2 + WIDGETHEIGHT; - else - window->trackbarheight += INTERWIDGETSPACE + WIDGETHEIGHT; - icvUpdateWindowSize( window ); - } - - trackbar->notify = on_notify; - trackbar->notify2 = on_notify2; - trackbar->userdata = userdata; - - result = 1; - - __END__; - return result; -} - - -CV_IMPL int cvCreateTrackbar (const char* trackbar_name, - const char* window_name, - int* val, int count, - CvTrackbarCallback on_notify) -{ - return icvCreateTrackbar(trackbar_name, window_name, val, count, on_notify, 0, 0); -} - - -CV_IMPL int cvCreateTrackbar2(const char* trackbar_name, - const char* window_name, - int* val, int count, - CvTrackbarCallback2 on_notify2, - void* userdata) -{ - return icvCreateTrackbar(trackbar_name, window_name, val, - count, 0, on_notify2, userdata); -} - - -CV_IMPL void -cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) -{ - CvWindow* window = icvFindWindowByName( name ); - if (window != NULL) - { - window->on_mouse = function; - window->on_mouse_param = info; - } - else - { - fprintf(stdout,"Error with cvSetMouseCallback. Window not found : %s\n",name); - } -} - - CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) -{ - int pos = -1; - - CV_FUNCNAME( "cvGetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - pos = trackbar->pos; - - __END__; - - return pos; -} - -CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name, int pos) -{ - CV_FUNCNAME( "cvSetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - { - if( pos < 0 ) - pos = 0; - - if( pos > trackbar->maxval ) - pos = trackbar->maxval; - - // Set new value and redraw the trackbar - SetControlValue( trackbar->trackbar, pos ); - Draw1Control( trackbar->trackbar ); - } - - __END__; - return ; -} - -CV_IMPL void* cvGetWindowHandle( const char* name ) -{ - WindowRef result = 0; - - __BEGIN__; - - CvWindow* window; - window = icvFindWindowByName( name ); - if (window != NULL) - result = window->window; - else - result = NULL; - - __END__; - - return result; -} - - -CV_IMPL const char* cvGetWindowName( void* window_handle ) -{ - const char* window_name = ""; - - CV_FUNCNAME( "cvGetWindowName" ); - - __BEGIN__; - - CvWindow* window; - - if( window_handle == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - window = icvWindowByHandle(window_handle ); - if( window ) - window_name = window->name; - - __END__; - - return window_name; -} - -double cvGetModeWindow_CARBON(const char* name)//YV -{ - double result = -1; - - CV_FUNCNAME( "cvGetModeWindow_QT" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - result = window->status; - - __END__; - return result; -} - -void cvSetModeWindow_CARBON( const char* name, double prop_value)//Yannick Verdie -{ - OSStatus err = noErr; - - - CV_FUNCNAME( "cvSetModeWindow_QT" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - if(window->flags & CV_WINDOW_AUTOSIZE)//if the flag CV_WINDOW_AUTOSIZE is set - EXIT; - - if (window->status==CV_WINDOW_FULLSCREEN && prop_value==CV_WINDOW_NORMAL) - { - err = EndFullScreen(window->restoreState,0); - if (err != noErr) - fprintf(stdout,"Error EndFullScreen\n"); - window->window = window->oldwindow; - ShowWindow( window->window ); - - window->status=CV_WINDOW_NORMAL; - EXIT; - } - - if (window->status==CV_WINDOW_NORMAL && prop_value==CV_WINDOW_FULLSCREEN) - { - GDHandle device; - err = GetWindowGreatestAreaDevice(window->window, kWindowTitleBarRgn, &device, NULL); - if (err != noErr) - fprintf(stdout,"Error GetWindowGreatestAreaDevice\n"); - - HideWindow(window->window); - window->oldwindow = window->window; - err = BeginFullScreen(&(window->restoreState), device, 0, 0, &window->window, 0, fullScreenAllowEvents | fullScreenDontSwitchMonitorResolution); - if (err != noErr) - fprintf(stdout,"Error BeginFullScreen\n"); - - window->status=CV_WINDOW_FULLSCREEN; - EXIT; - } - - __END__; -} - -CV_IMPL int cvNamedWindow( const char* name, int flags ) -{ - int result = 0; - CV_FUNCNAME( "cvNamedWindow" ); - if (!wasInitialized) - cvInitSystem(0, NULL); - - // to be able to display a window, we need to be a 'faceful' application - // http://lists.apple.com/archives/carbon-dev/2005/Jun/msg01414.html - static bool switched_to_faceful = false; - if (! switched_to_faceful) - { - ProcessSerialNumber psn = { 0, kCurrentProcess }; - OSStatus ret = TransformProcessType (&psn, kProcessTransformToForegroundApplication ); - - if (ret == noErr) - { - SetFrontProcess( &psn ); - switched_to_faceful = true; - } - else - { - fprintf(stderr, "Failed to tranform process type: %d\n", (int) ret); - fflush (stderr); - } - } - - __BEGIN__; - - WindowRef outWindow = NULL; - OSStatus err = noErr; - Rect contentBounds = {100,100,320,440}; - - CvWindow* window; - UInt wAttributes = 0; - - int len; - - const EventTypeSpec genericWindowEventHandler[] = { - { kEventClassMouse, kEventMouseMoved}, - { kEventClassMouse, kEventMouseDragged}, - { kEventClassMouse, kEventMouseUp}, - { kEventClassMouse, kEventMouseDown}, - { kEventClassWindow, kEventWindowClose }, - { kEventClassWindow, kEventWindowBoundsChanged }//FD - }; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - if( icvFindWindowByName( name ) != 0 ){ - result = 1; - EXIT; - } - len = strlen(name); - CV_CALL( window = (CvWindow*)cvAlloc(sizeof(CvWindow) + len + 1)); - memset( window, 0, sizeof(*window)); - window->name = (char*)(window + 1); - memcpy( window->name, name, len + 1 ); - window->flags = flags; - window->status = CV_WINDOW_NORMAL;//YV - window->signature = CV_WINDOW_MAGIC_VAL; - window->image = 0; - window->last_key = 0; - window->on_mouse = 0; - window->on_mouse_param = 0; - - window->next = hg_windows; - window->prev = 0; - if( hg_windows ) - hg_windows->prev = window; - hg_windows = window; - wAttributes = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute | kWindowLiveResizeAttribute; - - - if (window->flags & CV_WINDOW_AUTOSIZE)//Yannick verdie, remove the handler at the bottom-right position of the window in AUTORESIZE mode - { - wAttributes = 0; - wAttributes = kWindowCloseBoxAttribute | kWindowFullZoomAttribute | kWindowCollapseBoxAttribute | kWindowStandardHandlerAttribute | kWindowLiveResizeAttribute; - } - - err = CreateNewWindow ( kDocumentWindowClass,wAttributes,&contentBounds,&outWindow); - if (err != noErr) - fprintf(stderr,"Error while creating the window\n"); - - SetWindowTitleWithCFString(outWindow,CFStringCreateWithCString(NULL,name,kCFStringEncodingASCII)); - if (err != noErr) - fprintf(stdout,"Error SetWindowTitleWithCFString\n"); - - window->window = outWindow; - window->oldwindow = 0;//YV - - err = InstallWindowEventHandler(outWindow, NewEventHandlerUPP(windowEventHandler), GetEventTypeCount(genericWindowEventHandler), genericWindowEventHandler, outWindow, NULL); - - ShowWindow( outWindow ); - result = 1; - - __END__; - return result; -} - -static pascal OSStatus windowEventHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void *inUserData) -{ - CvWindow* window = NULL; - UInt32 eventKind, eventClass; - OSErr err = noErr; - int event = 0; - UInt32 count = 0; - HIPoint point = {0,0}; - EventMouseButton eventMouseButton = 0;//FD - UInt32 modifiers;//FD - - WindowRef theWindow = (WindowRef)inUserData; - if (theWindow == NULL) - return eventNotHandledErr; - window = icvWindowByHandle(theWindow); - if ( window == NULL) - return eventNotHandledErr; - - eventKind = GetEventKind(theEvent); - eventClass = GetEventClass(theEvent); - - switch (eventClass) { - case kEventClassMouse : { - switch (eventKind){ - case kEventMouseUp : - case kEventMouseDown : - case kEventMouseMoved : - case kEventMouseDragged : { - err = CallNextEventHandler(nextHandler, theEvent); - if (err != eventNotHandledErr) - return err; - err = GetEventParameter(theEvent, kEventParamMouseButton, typeMouseButton, NULL, sizeof(eventMouseButton), NULL, &eventMouseButton); - err = GetEventParameter(theEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(modifiers), NULL, &modifiers); - err = GetEventParameter(theEvent,kEventParamClickCount,typeUInt32,NULL,sizeof(UInt32),NULL,&count); - if (err == noErr){ - if (count >1) event += 6; - } else { - event = CV_EVENT_MOUSEMOVE; - } - - if (eventKind == kEventMouseUp) - event +=4; - if (eventKind == kEventMouseDown) - event +=1; - - unsigned int flags = 0; - - err = GetEventParameter(theEvent, kEventParamWindowMouseLocation, typeHIPoint, NULL, sizeof(point), NULL, &point); - if (eventKind != kEventMouseMoved){ - switch(eventMouseButton){ - case kEventMouseButtonPrimary: - if (modifiers & controlKey){ - flags += CV_EVENT_FLAG_RBUTTON; - event += 1; - } else { - flags += CV_EVENT_FLAG_LBUTTON; - } - break; - case kEventMouseButtonSecondary: - flags += CV_EVENT_FLAG_RBUTTON; - event += 1; - break; - case kEventMouseButtonTertiary: - flags += CV_EVENT_FLAG_MBUTTON; - event += 2; - break; - } - } - - if (modifiers&controlKey) flags += CV_EVENT_FLAG_CTRLKEY; - if (modifiers&shiftKey) flags += CV_EVENT_FLAG_SHIFTKEY; - if (modifiers& cmdKey ) flags += CV_EVENT_FLAG_ALTKEY; - - if (window->on_mouse != NULL){ - int lx,ly; - Rect structure, content; - GetWindowBounds(theWindow, kWindowStructureRgn, &structure); - GetWindowBounds(theWindow, kWindowContentRgn, &content); - lx = (int)point.x - content.left + structure.left; - ly = (int)point.y - window->trackbarheight - content.top + structure.top; /* minus la taille des trackbars */ - if (window->flags & CV_WINDOW_AUTOSIZE) {//FD - //printf("was %d,%d\n", lx, ly); - /* scale the mouse coordinates */ - lx = lx * window->imageWidth / (content.right - content.left); - ly = ly * window->imageHeight / (content.bottom - content.top - window->trackbarheight); - } - - if (lx>0 && ly >0){ /* a remettre dans les coordonnées locale */ - window->on_mouse (event, lx, ly, flags, window->on_mouse_param); - return noErr; - } - } - } - default : return eventNotHandledErr; - } - } - case kEventClassWindow : {//FD - switch (eventKind){ - case kEventWindowBoundsChanged : - { - /* resize the trackbars */ - CvTrackbar *t; - Rect bounds; - GetWindowBounds(window->window,kWindowContentRgn,&bounds); - for ( t = window->toolbar.first; t != 0; t = t->next ) - SizeControl(t->trackbar,bounds.right - bounds.left - INTERWIDGETSPACE*3 - LABELWIDTH , WIDGETHEIGHT); - } - /* redraw the image */ - icvDrawImage(window); - break; - default : - return eventNotHandledErr; - } - } - default: - return eventNotHandledErr; - } - - return eventNotHandledErr; -} - -OSStatus keyHandler(EventHandlerCallRef hcr, EventRef theEvent, void* inUserData) -{ - UInt32 eventKind; - UInt32 eventClass; - OSErr err = noErr; - - eventKind = GetEventKind (theEvent); - eventClass = GetEventClass (theEvent); - err = GetEventParameter(theEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(lastKey), NULL, &lastKey); - if (err != noErr) - lastKey = NO_KEY; - - return noErr; -} - -CV_IMPL int cvWaitKey (int maxWait) -{ - EventRecord theEvent; - - // wait at least for one event (to allow mouse, etc. processing), exit if maxWait milliseconds passed (nullEvent) - UInt32 start = TickCount(); - int iters=0; - do - { - // remaining time until maxWait is over - UInt32 wait = EventTimeToTicks (maxWait / 1000.0) - (TickCount() - start); - if ((int)wait <= 0) - { - if( maxWait > 0 && iters > 0 ) - break; - wait = 1; - } - iters++; - WaitNextEvent (everyEvent, &theEvent, maxWait > 0 ? wait : kDurationForever, NULL); - } - while (lastKey == NO_KEY && theEvent.what != nullEvent); - - int key = lastKey; - lastKey = NO_KEY; - return key; -} - -/* End of file. */ diff --git a/modules/highgui/src/window_cocoa.mm b/modules/highgui/src/window_cocoa.mm deleted file mode 100644 index d3a6810..0000000 --- a/modules/highgui/src/window_cocoa.mm +++ /dev/null @@ -1,942 +0,0 @@ -/* The file is the modified version of window_cocoa.mm from opencv-cocoa project by Andre Cohen */ - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2010, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -#import - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR -/*** begin IPhone OS Stubs ***/ -// When highgui functions are referred to on iPhone OS, they will fail silently. -CV_IMPL int cvInitSystem( int argc, char** argv) { return 0;} -CV_IMPL int cvStartWindowThread(){ return 0; } -CV_IMPL void cvDestroyWindow( const char* name) {} -CV_IMPL void cvDestroyAllWindows( void ) {} -CV_IMPL void cvShowImage( const char* name, const CvArr* arr) {} -CV_IMPL void cvResizeWindow( const char* name, int width, int height) {} -CV_IMPL void cvMoveWindow( const char* name, int x, int y){} -CV_IMPL int cvCreateTrackbar (const char* trackbar_name,const char* window_name, - int* val, int count, CvTrackbarCallback on_notify) {return 0;} -CV_IMPL int cvCreateTrackbar2(const char* trackbar_name,const char* window_name, - int* val, int count, CvTrackbarCallback2 on_notify2, void* userdata) {return 0;} -CV_IMPL void cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) {} -CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) {return 0;} -CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name, int pos) {} -CV_IMPL void* cvGetWindowHandle( const char* name ) {return NULL;} -CV_IMPL const char* cvGetWindowName( void* window_handle ) {return NULL;} -CV_IMPL int cvNamedWindow( const char* name, int flags ) {return 0; } -CV_IMPL int cvWaitKey (int maxWait) {return 0;} -//*** end IphoneOS Stubs ***/ -#else - -#import - -#include -using namespace std; - -const int TOP_BORDER = 7; -const int MIN_SLIDER_WIDTH=200; - -static NSApplication *application = nil; -static NSAutoreleasePool *pool = nil; -static NSMutableDictionary *windows = nil; -static bool wasInitialized = false; - -@interface CVView : NSView { - NSImage *image; -} -@property(retain) NSImage *image; -- (void)setImageData:(CvArr *)arr; -@end - -@interface CVSlider : NSView { - NSSlider *slider; - NSTextField *name; - int *value; - void *userData; - CvTrackbarCallback callback; - CvTrackbarCallback2 callback2; -} -@property(retain) NSSlider *slider; -@property(retain) NSTextField *name; -@property(assign) int *value; -@property(assign) void *userData; -@property(assign) CvTrackbarCallback callback; -@property(assign) CvTrackbarCallback2 callback2; -@end - -@interface CVWindow : NSWindow { - NSMutableDictionary *sliders; - CvMouseCallback mouseCallback; - void *mouseParam; - BOOL autosize; - BOOL firstContent; - int status; -} -@property(assign) CvMouseCallback mouseCallback; -@property(assign) void *mouseParam; -@property(assign) BOOL autosize; -@property(assign) BOOL firstContent; -@property(retain) NSMutableDictionary *sliders; -@property(readwrite) int status; -- (CVView *)contentView; -- (void)cvSendMouseEvent:(NSEvent *)event type:(int)type flags:(int)flags; -- (void)cvMouseEvent:(NSEvent *)event; -- (void)createSliderWithName:(const char *)name maxValue:(int)max value:(int *)value callback:(CvTrackbarCallback)callback; -@end - -/*static void icvCocoaCleanup(void) -{ - //cout << "icvCocoaCleanup" << endl; - if( application ) - { - cvDestroyAllWindows(); - //[application terminate:nil]; - application = 0; - [pool release]; - } -}*/ - -CV_IMPL int cvInitSystem( int , char** ) -{ - //cout << "cvInitSystem" << endl; - wasInitialized = true; - - pool = [[NSAutoreleasePool alloc] init]; - application = [NSApplication sharedApplication]; - windows = [[NSMutableDictionary alloc] init]; - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 - -#ifndef NSAppKitVersionNumber10_5 -#define NSAppKitVersionNumber10_5 949 -#endif - if( floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5 ) - [application setActivationPolicy:0/*NSApplicationActivationPolicyRegular*/]; -#endif - //[application finishLaunching]; - //atexit(icvCocoaCleanup); - - return 0; -} - -static CVWindow *cvGetWindow(const char *name) { - //cout << "cvGetWindow" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - NSString *cvname = [NSString stringWithFormat:@"%s", name]; - CVWindow* retval = (CVWindow*) [windows valueForKey:cvname] ; - //cout << "retain count: " << [retval retainCount] << endl; - //retval = [retval retain]; - //cout << "retain count: " << [retval retainCount] << endl; - [localpool drain]; - //cout << "retain count: " << [retval retainCount] << endl; - return retval; -} - -CV_IMPL int cvStartWindowThread() -{ - //cout << "cvStartWindowThread" << endl; - return 0; -} - -CV_IMPL void cvDestroyWindow( const char* name) -{ - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - //cout << "cvDestroyWindow" << endl; - CVWindow *window = cvGetWindow(name); - if(window) { - [window close]; - [windows removeObjectForKey:[NSString stringWithFormat:@"%s", name]]; - } - [localpool drain]; -} - - -CV_IMPL void cvDestroyAllWindows( void ) -{ - //cout << "cvDestroyAllWindows" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - NSDictionary* list = [NSDictionary dictionaryWithDictionary:windows]; - for(NSString *key in list) { - cvDestroyWindow([key cStringUsingEncoding:NSASCIIStringEncoding]); - } - [localpool drain]; -} - - -CV_IMPL void cvShowImage( const char* name, const CvArr* arr) -{ - //cout << "cvShowImage" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - CVWindow *window = cvGetWindow(name); - if(!window) - { - cvNamedWindow(name, CV_WINDOW_AUTOSIZE); - window = cvGetWindow(name); - } - - if(window) - { - bool empty = [[window contentView] image] == nil; - NSRect rect = [window frame]; - NSRect vrectOld = [[window contentView] frame]; - - [[window contentView] setImageData:(CvArr *)arr]; - if([window autosize] || [window firstContent] || empty) - { - //Set new view size considering sliders (reserve height and min width) - NSRect vrectNew = vrectOld; - int slider_height = 0; - for(NSString *key in [window sliders]) { - slider_height += [[[window sliders] valueForKey:key] frame].size.height; - } - vrectNew.size.height = [[[window contentView] image] size].height + slider_height; - vrectNew.size.width = std::max([[[window contentView] image] size].width, MIN_SLIDER_WIDTH); - [[window contentView] setFrameSize:vrectNew.size]; //adjust sliders to fit new window size - - rect.size.width += vrectNew.size.width - vrectOld.size.width; - rect.size.height += vrectNew.size.height - vrectOld.size.height; - rect.origin.y -= vrectNew.size.height - vrectOld.size.height; - - [window setFrame:rect display:YES]; - } - else - [window display]; - [window setFirstContent:NO]; - } - [localpool drain]; -} - -CV_IMPL void cvResizeWindow( const char* name, int width, int height) -{ - - //cout << "cvResizeWindow" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - CVWindow *window = cvGetWindow(name); - if(window) { - NSRect frame = [window frame]; - frame.size.width = width; - frame.size.height = height; - [window setFrame:frame display:YES]; - } - [localpool drain]; -} - -CV_IMPL void cvMoveWindow( const char* name, int x, int y) -{ - - CV_FUNCNAME("cvMoveWindow"); - __BEGIN__; - - NSAutoreleasePool* localpool1 = [[NSAutoreleasePool alloc] init]; - CVWindow *window = nil; - - if(name == NULL) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - //cout << "cvMoveWindow"<< endl; - window = cvGetWindow(name); - if(window) { - y = [[window screen] frame].size.height - y; - [window setFrameTopLeftPoint:NSMakePoint(x, y)]; - } - [localpool1 drain]; - - __END__; -} - -CV_IMPL int cvCreateTrackbar (const char* trackbar_name, - const char* window_name, - int* val, int count, - CvTrackbarCallback on_notify) -{ - CV_FUNCNAME("cvCreateTrackbar"); - - - int result = 0; - CVWindow *window = nil; - NSAutoreleasePool* localpool2 = nil; - - __BEGIN__; - if (localpool2 != nil) [localpool2 drain]; - localpool2 = [[NSAutoreleasePool alloc] init]; - - if(window_name == NULL) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - //cout << "cvCreateTrackbar" << endl ; - window = cvGetWindow(window_name); - if(window) { - [window createSliderWithName:trackbar_name - maxValue:count - value:val - callback:on_notify]; - result = 1; - } - [localpool2 drain]; - __END__; - return result; -} - - -CV_IMPL int cvCreateTrackbar2(const char* trackbar_name, - const char* window_name, - int* val, int count, - CvTrackbarCallback2 on_notify2, - void* userdata) -{ - //cout <<"cvCreateTrackbar2" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - int res = cvCreateTrackbar(trackbar_name, window_name, val, count, NULL); - if(res) { - CVSlider *slider = [[cvGetWindow(window_name) sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; - [slider setCallback2:on_notify2]; - [slider setUserData:userdata]; - } - [localpool drain]; - return res; -} - - -CV_IMPL void -cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) -{ - CV_FUNCNAME("cvSetMouseCallback"); - - CVWindow *window = nil; - NSAutoreleasePool* localpool3 = nil; - __BEGIN__; - //cout << "cvSetMouseCallback" << endl; - - if (localpool3 != nil) [localpool3 drain]; - localpool3 = [[NSAutoreleasePool alloc] init]; - - if(name == NULL) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - window = cvGetWindow(name); - if(window) { - [window setMouseCallback:function]; - [window setMouseParam:info]; - } - [localpool3 drain]; - - __END__; -} - - CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) -{ - CV_FUNCNAME("cvGetTrackbarPos"); - - CVWindow *window = nil; - int pos = -1; - NSAutoreleasePool* localpool4 = nil; - __BEGIN__; - - //cout << "cvGetTrackbarPos" << endl; - if(trackbar_name == NULL || window_name == NULL) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - if (localpool4 != nil) [localpool4 drain]; - localpool4 = [[NSAutoreleasePool alloc] init]; - - window = cvGetWindow(window_name); - if(window) { - CVSlider *slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; - if(slider) { - pos = [[slider slider] intValue]; - } - } - [localpool4 drain]; - __END__; - return pos; -} - -CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name, int pos) -{ - CV_FUNCNAME("cvSetTrackbarPos"); - - CVWindow *window = nil; - CVSlider *slider = nil; - NSAutoreleasePool* localpool5 = nil; - - __BEGIN__; - //cout << "cvSetTrackbarPos" << endl; - if(trackbar_name == NULL || window_name == NULL) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - if(pos < 0) - CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" ); - - if (localpool5 != nil) [localpool5 drain]; - localpool5 = [[NSAutoreleasePool alloc] init]; - - window = cvGetWindow(window_name); - if(window) { - slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; - if(slider) { - [[slider slider] setIntValue:pos]; - } - } - [localpool5 drain]; - - __END__; -} - -CV_IMPL void* cvGetWindowHandle( const char* name ) -{ - //cout << "cvGetWindowHandle" << endl; - return cvGetWindow(name); -} - - -CV_IMPL const char* cvGetWindowName( void* window_handle ) -{ - //cout << "cvGetWindowName" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - for(NSString *key in windows) { - if([windows valueForKey:key] == window_handle) { - [localpool drain]; - return [key UTF8String]; - } - } - [localpool drain]; - return 0; -} - -CV_IMPL int cvNamedWindow( const char* name, int flags ) -{ - if( !wasInitialized ) - cvInitSystem(0, 0); - - //cout << "cvNamedWindow" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - CVWindow *window = cvGetWindow(name); - if( window ) - { - [window setAutosize:(flags == CV_WINDOW_AUTOSIZE)]; - [localpool drain]; - return 0; - } - - NSScreen* mainDisplay = [NSScreen mainScreen]; - - NSString *windowName = [NSString stringWithFormat:@"%s", name]; - NSUInteger showResize = (flags == CV_WINDOW_AUTOSIZE) ? 0: NSResizableWindowMask ; - NSUInteger styleMask = NSTitledWindowMask|NSMiniaturizableWindowMask|showResize; - CGFloat windowWidth = [NSWindow minFrameWidthWithTitle:windowName styleMask:styleMask]; - NSRect initContentRect = NSMakeRect(0, 0, windowWidth, 0); - if (mainDisplay) { - NSRect dispFrame = [mainDisplay visibleFrame]; - initContentRect.origin.y = dispFrame.size.height-20; - } - - - window = [[CVWindow alloc] initWithContentRect:initContentRect - styleMask:NSTitledWindowMask|NSMiniaturizableWindowMask|showResize - backing:NSBackingStoreBuffered - defer:YES - screen:mainDisplay]; - - [window setFrameTopLeftPoint:initContentRect.origin]; - - [window setFirstContent:YES]; - - [window setContentView:[[CVView alloc] init]]; - - [window setHasShadow:YES]; - [window setAcceptsMouseMovedEvents:YES]; - [window useOptimizedDrawing:YES]; - [window setTitle:windowName]; - [window makeKeyAndOrderFront:nil]; - - [window setAutosize:(flags == CV_WINDOW_AUTOSIZE)]; - - [windows setValue:window forKey:windowName]; - - [localpool drain]; - return [windows count]-1; -} - -CV_IMPL int cvWaitKey (int maxWait) -{ - //cout << "cvWaitKey" << endl; - int returnCode = -1; - NSAutoreleasePool *localpool = [[NSAutoreleasePool alloc] init]; - double start = [[NSDate date] timeIntervalSince1970]; - - while(true) { - if(([[NSDate date] timeIntervalSince1970] - start) * 1000 >= maxWait && maxWait>0) - break; - - //event = [application currentEvent]; - [localpool drain]; - localpool = [[NSAutoreleasePool alloc] init]; - - NSEvent *event = - [application - nextEventMatchingMask:NSAnyEventMask - untilDate://[NSDate dateWithTimeIntervalSinceNow: 1./100] - [NSDate distantPast] - inMode:NSDefaultRunLoopMode - dequeue:YES]; - - if([event type] == NSKeyDown) { - returnCode = [[event characters] characterAtIndex:0]; - break; - } - - [application sendEvent:event]; - [application updateWindows]; - - [NSThread sleepForTimeInterval:1/100.]; - } - [localpool drain]; - - return returnCode; -} - -double cvGetModeWindow_COCOA( const char* name ) -{ - double result = -1; - CVWindow *window = nil; - - CV_FUNCNAME( "cvGetModeWindow_COCOA" ); - - __BEGIN__; - if( name == NULL ) - { - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - } - - window = cvGetWindow( name ); - if ( window == NULL ) - { - CV_ERROR( CV_StsNullPtr, "NULL window" ); - } - - result = window.status; - - __END__; - return result; -} - -void cvSetModeWindow_COCOA( const char* name, double prop_value ) -{ - CVWindow *window = nil; - NSDictionary *fullscreenOptions = nil; - NSAutoreleasePool* localpool = nil; - - CV_FUNCNAME( "cvSetModeWindow_COCOA" ); - - __BEGIN__; - if( name == NULL ) - { - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - } - - window = cvGetWindow(name); - if ( window == NULL ) - { - CV_ERROR( CV_StsNullPtr, "NULL window" ); - } - - if ( [window autosize] ) - { - return; - } - - localpool = [[NSAutoreleasePool alloc] init]; - - fullscreenOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSFullScreenModeSetting]; - if ( [[window contentView] isInFullScreenMode] && prop_value==CV_WINDOW_NORMAL ) - { - [[window contentView] exitFullScreenModeWithOptions:fullscreenOptions]; - window.status=CV_WINDOW_NORMAL; - } - else if( ![[window contentView] isInFullScreenMode] && prop_value==CV_WINDOW_FULLSCREEN ) - { - [[window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:fullscreenOptions]; - window.status=CV_WINDOW_FULLSCREEN; - } - - [localpool drain]; - - __END__; -} - -@implementation CVWindow - -@synthesize mouseCallback; -@synthesize mouseParam; -@synthesize autosize; -@synthesize firstContent; -@synthesize sliders; -@synthesize status; - -- (void)cvSendMouseEvent:(NSEvent *)event type:(int)type flags:(int)flags { - (void)event; - //cout << "cvSendMouseEvent" << endl; - NSPoint mp = [NSEvent mouseLocation]; - //NSRect visible = [[self contentView] frame]; - mp = [self convertScreenToBase: mp]; - double viewHeight = [self contentView].frame.size.height; - double viewWidth = [self contentView].frame.size.width; - CVWindow *window = (CVWindow *)[[self contentView] window]; - for(NSString *key in [window sliders]) { - NSSlider *slider = [[window sliders] valueForKey:key]; - viewHeight = std::min(viewHeight, (double)([slider frame].origin.y)); - } - viewHeight -= TOP_BORDER; - mp.y = viewHeight - mp.y; - - NSImage* image = ((CVView*)[self contentView]).image; - NSSize imageSize = [image size]; - mp.x = mp.x * imageSize.width / std::max(viewWidth, 1.); - mp.y = mp.y * imageSize.height / std::max(viewHeight, 1.); - - if( mp.x >= 0 && mp.y >= 0 && mp.x < imageSize.width && mp.y < imageSize.height ) - mouseCallback(type, mp.x, mp.y, flags, mouseParam); -} - -- (void)cvMouseEvent:(NSEvent *)event { - //cout << "cvMouseEvent" << endl; - if(!mouseCallback) - return; - - int flags = 0; - if([event modifierFlags] & NSShiftKeyMask) flags |= CV_EVENT_FLAG_SHIFTKEY; - if([event modifierFlags] & NSControlKeyMask) flags |= CV_EVENT_FLAG_CTRLKEY; - if([event modifierFlags] & NSAlternateKeyMask) flags |= CV_EVENT_FLAG_ALTKEY; - - if([event type] == NSLeftMouseDown) {[self cvSendMouseEvent:event type:CV_EVENT_LBUTTONDOWN flags:flags | CV_EVENT_FLAG_LBUTTON];} - if([event type] == NSLeftMouseUp) {[self cvSendMouseEvent:event type:CV_EVENT_LBUTTONUP flags:flags | CV_EVENT_FLAG_LBUTTON];} - if([event type] == NSRightMouseDown){[self cvSendMouseEvent:event type:CV_EVENT_RBUTTONDOWN flags:flags | CV_EVENT_FLAG_RBUTTON];} - if([event type] == NSRightMouseUp) {[self cvSendMouseEvent:event type:CV_EVENT_RBUTTONUP flags:flags | CV_EVENT_FLAG_RBUTTON];} - if([event type] == NSOtherMouseDown){[self cvSendMouseEvent:event type:CV_EVENT_MBUTTONDOWN flags:flags];} - if([event type] == NSOtherMouseUp) {[self cvSendMouseEvent:event type:CV_EVENT_MBUTTONUP flags:flags];} - if([event type] == NSMouseMoved) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags];} - if([event type] == NSLeftMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_LBUTTON];} - if([event type] == NSRightMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_RBUTTON];} - if([event type] == NSOtherMouseDragged) {[self cvSendMouseEvent:event type:CV_EVENT_MOUSEMOVE flags:flags | CV_EVENT_FLAG_MBUTTON];} -} -- (void)keyDown:(NSEvent *)theEvent { - //cout << "keyDown" << endl; - [super keyDown:theEvent]; -} -- (void)rightMouseDragged:(NSEvent *)theEvent { - //cout << "rightMouseDragged" << endl ; - [self cvMouseEvent:theEvent]; -} -- (void)rightMouseUp:(NSEvent *)theEvent { - //cout << "rightMouseUp" << endl; - [self cvMouseEvent:theEvent]; -} -- (void)rightMouseDown:(NSEvent *)theEvent { - // Does not seem to work? - //cout << "rightMouseDown" << endl; - [self cvMouseEvent:theEvent]; -} -- (void)mouseMoved:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)otherMouseDragged:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)otherMouseUp:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)otherMouseDown:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)mouseDragged:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)mouseUp:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} -- (void)mouseDown:(NSEvent *)theEvent { - [self cvMouseEvent:theEvent]; -} - -- (void)createSliderWithName:(const char *)name maxValue:(int)max value:(int *)value callback:(CvTrackbarCallback)callback { - //cout << "createSliderWithName" << endl; - if(sliders == nil) - sliders = [[NSMutableDictionary alloc] init]; - - NSString *cvname = [NSString stringWithFormat:@"%s", name]; - - // Avoid overwriting slider - if([sliders valueForKey:cvname]!=nil) - return; - - // Create slider - CVSlider *slider = [[CVSlider alloc] init]; - [[slider name] setStringValue:cvname]; - [[slider slider] setMaxValue:max]; - [[slider slider] setMinValue:0]; - [[slider slider] setNumberOfTickMarks:(max+1)]; - [[slider slider] setAllowsTickMarkValuesOnly:YES]; - if(value) - { - [[slider slider] setIntValue:*value]; - [slider setValue:value]; - } - if(callback) - [slider setCallback:callback]; - - // Save slider - [sliders setValue:slider forKey:cvname]; - [[self contentView] addSubview:slider]; - - - //update contentView size to contain sliders - NSSize viewSize=[[self contentView] frame].size, - sliderSize=[slider frame].size; - viewSize.height += sliderSize.height; - viewSize.width = std::max(viewSize.width, MIN_SLIDER_WIDTH); - - // Update slider sizes - [[self contentView] setFrameSize:viewSize]; - [[self contentView] setNeedsDisplay:YES]; - - //update window size to contain sliders - NSRect rect = [self frame]; - rect.size.height += [slider frame].size.height; - rect.size.width = std::max(rect.size.width, MIN_SLIDER_WIDTH); - [self setFrame:rect display:YES]; - - - -} - -- (CVView *)contentView { - return (CVView*)[super contentView]; -} - -@end - -@implementation CVView - -@synthesize image; - -- (id)init { - //cout << "CVView init" << endl; - [super init]; - image = [[NSImage alloc] init]; - return self; -} - -- (void)setImageData:(CvArr *)arr { - //cout << "setImageData" << endl; - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - CvMat *arrMat, *cvimage, stub; - - arrMat = cvGetMat(arr, &stub); - - cvimage = cvCreateMat(arrMat->rows, arrMat->cols, CV_8UC3); - cvConvertImage(arrMat, cvimage, CV_CVTIMG_SWAP_RB); - - /*CGColorSpaceRef colorspace = NULL; - CGDataProviderRef provider = NULL; - int width = cvimage->width; - int height = cvimage->height; - - colorspace = CGColorSpaceCreateDeviceRGB(); - - int size = 8; - int nbChannels = 3; - - provider = CGDataProviderCreateWithData(NULL, cvimage->data.ptr, width * height , NULL ); - - CGImageRef imageRef = CGImageCreate(width, height, size , size*nbChannels , cvimage->step, colorspace, kCGImageAlphaNone , provider, NULL, true, kCGRenderingIntentDefault); - - NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:imageRef]; - if(image) { - [image release]; - }*/ - - NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL - pixelsWide:cvimage->width - pixelsHigh:cvimage->height - bitsPerSample:8 - samplesPerPixel:3 - hasAlpha:NO - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bytesPerRow:(cvimage->width * 4) - bitsPerPixel:32]; - - int pixelCount = cvimage->width * cvimage->height; - unsigned char *src = cvimage->data.ptr; - unsigned char *dst = [bitmap bitmapData]; - - for( int i = 0; i < pixelCount; i++ ) - { - dst[i * 4 + 0] = src[i * 3 + 0]; - dst[i * 4 + 1] = src[i * 3 + 1]; - dst[i * 4 + 2] = src[i * 3 + 2]; - } - - if( image ) - [image release]; - - image = [[NSImage alloc] init]; - [image addRepresentation:bitmap]; - [bitmap release]; - - /*CGColorSpaceRelease(colorspace); - CGDataProviderRelease(provider); - CGImageRelease(imageRef);*/ - cvReleaseMat(&cvimage); - [localpool drain]; - - [self setNeedsDisplay:YES]; - -} - -- (void)setFrameSize:(NSSize)size { - //cout << "setFrameSize" << endl; - [super setFrameSize:size]; - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - int height = size.height; - - CVWindow *cvwindow = (CVWindow *)[self window]; - for(NSString *key in [cvwindow sliders]) { - NSSlider *slider = [[cvwindow sliders] valueForKey:key]; - NSRect r = [slider frame]; - r.origin.y = height - r.size.height; - r.size.width = [[cvwindow contentView] frame].size.width; - [slider setFrame:r]; - height -= r.size.height; - } - [localpool drain]; -} - -- (void)drawRect:(NSRect)rect { - //cout << "drawRect" << endl; - [super drawRect:rect]; - - NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; - CVWindow *cvwindow = (CVWindow *)[self window]; - int height = 0; - if ([cvwindow respondsToSelector:@selector(sliders)]) { - for(NSString *key in [cvwindow sliders]) { - height += [[[cvwindow sliders] valueForKey:key] frame].size.height; - } - } - - - NSRect imageRect = {{0,0}, {[image size].width, [image size].height}}; - - if(image != nil) { - [image drawInRect: imageRect - fromRect: NSZeroRect - operation: NSCompositeSourceOver - fraction: 1.0]; - } - [localpool release]; - -} - -@end - -@implementation CVSlider - -@synthesize slider; -@synthesize name; -@synthesize value; -@synthesize userData; -@synthesize callback; -@synthesize callback2; - -- (id)init { - [super init]; - - callback = NULL; - value = NULL; - userData = NULL; - - [self setFrame:NSMakeRect(0,0,200,30)]; - - name = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 0,110, 25)]; - [name setEditable:NO]; - [name setSelectable:NO]; - [name setBezeled:NO]; - [name setBordered:NO]; - [name setDrawsBackground:NO]; - [[name cell] setLineBreakMode:NSLineBreakByTruncatingTail]; - [self addSubview:name]; - - slider = [[NSSlider alloc] initWithFrame:NSMakeRect(120, 0, 70, 25)]; - [slider setAutoresizingMask:NSViewWidthSizable]; - [slider setMinValue:0]; - [slider setMaxValue:100]; - [slider setContinuous:YES]; - [slider setTarget:self]; - [slider setAction:@selector(sliderChanged:)]; - [self addSubview:slider]; - - [self setAutoresizingMask:NSViewWidthSizable]; - - //[self setFrame:NSMakeRect(12, 0, 100, 30)]; - - return self; -} - -- (void)sliderChanged:(NSNotification *)notification { - (void)notification; - int pos = [slider intValue]; - if(value) - *value = pos; - if(callback) - callback(pos); - if(callback2) - callback2(pos, userData); -} - -@end - -#endif - -/* End of file. */ diff --git a/modules/highgui/src/window_gtk.cpp b/modules/highgui/src/window_gtk.cpp deleted file mode 100644 index 46ac61b..0000000 --- a/modules/highgui/src/window_gtk.cpp +++ /dev/null @@ -1,1641 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifndef WIN32 - -#ifdef HAVE_GTK - -#include "gtk/gtk.h" -#include "gdk/gdkkeysyms.h" -#include - -#ifdef HAVE_OPENGL - #include - #include - #include -#endif - -// TODO Fix the initial window size when flags=0. Right now the initial window is by default -// 320x240 size. A better default would be actual size of the image. Problem -// is determining desired window size with trackbars while still allowing resizing. -// -// Gnome Totem source may be of use here, see bacon_video_widget_set_scale_ratio -// in totem/src/backend/bacon-video-widget-xine.c - -//////////////////////////////////////////////////////////// -// CvImageWidget GTK Widget Public API -//////////////////////////////////////////////////////////// -typedef struct _CvImageWidget CvImageWidget; -typedef struct _CvImageWidgetClass CvImageWidgetClass; - -struct _CvImageWidget { - GtkWidget widget; - CvMat * original_image; - CvMat * scaled_image; - int flags; -}; - -struct _CvImageWidgetClass -{ - GtkWidgetClass parent_class; -}; - - -/** Allocate new image viewer widget */ -GtkWidget* cvImageWidgetNew (int flags); - -/** Set the image to display in the widget */ -void cvImageWidgetSetImage(CvImageWidget * widget, const CvArr *arr); - -// standard GTK object macros -#define CV_IMAGE_WIDGET(obj) GTK_CHECK_CAST (obj, cvImageWidget_get_type (), CvImageWidget) -#define CV_IMAGE_WIDGET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, cvImageWidget_get_type (), CvImageWidgetClass) -#define CV_IS_IMAGE_WIDGET(obj) GTK_CHECK_TYPE (obj, cvImageWidget_get_type ()) - -///////////////////////////////////////////////////////////////////////////// -// Private API //////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// -GtkType cvImageWidget_get_type (void); - -static GtkWidgetClass * parent_class = NULL; - -// flag to help size initial window -#define CV_WINDOW_NO_IMAGE 2 - -void cvImageWidgetSetImage(CvImageWidget * widget, const CvArr *arr){ - CvMat * mat, stub; - int origin=0; - - //printf("cvImageWidgetSetImage\n"); - - if( CV_IS_IMAGE_HDR( arr )) - origin = ((IplImage*)arr)->origin; - - mat = cvGetMat(arr, &stub); - - if(widget->original_image && !CV_ARE_SIZES_EQ(mat, widget->original_image)){ - cvReleaseMat( &widget->original_image ); - } - if(!widget->original_image){ - widget->original_image = cvCreateMat( mat->rows, mat->cols, CV_8UC3 ); - gtk_widget_queue_resize( GTK_WIDGET( widget ) ); - } - cvConvertImage( mat, widget->original_image, - (origin != 0 ? CV_CVTIMG_FLIP : 0) + CV_CVTIMG_SWAP_RB ); - if(widget->scaled_image){ - cvResize( widget->original_image, widget->scaled_image, CV_INTER_AREA ); - } - - // window does not refresh without this - gtk_widget_queue_draw( GTK_WIDGET(widget) ); -} - -GtkWidget* -cvImageWidgetNew (int flags) -{ - CvImageWidget *image_widget; - - image_widget = CV_IMAGE_WIDGET( gtk_type_new (cvImageWidget_get_type ()) ); - image_widget->original_image = 0; - image_widget->scaled_image = 0; - image_widget->flags = flags | CV_WINDOW_NO_IMAGE; - - return GTK_WIDGET (image_widget); -} - -static void -cvImageWidget_realize (GtkWidget *widget) -{ - GdkWindowAttr attributes; - gint attributes_mask; - - //printf("cvImageWidget_realize\n"); - g_return_if_fail (widget != NULL); - g_return_if_fail (CV_IS_IMAGE_WIDGET (widget)); - - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); - - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.event_mask = gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); - - widget->style = gtk_style_attach (widget->style, widget->window); - - gdk_window_set_user_data (widget->window, widget); - - gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE); -} - -static CvSize cvImageWidget_calc_size( int im_width, int im_height, int max_width, int max_height ){ - float aspect = (float)im_width/(float)im_height; - float max_aspect = (float)max_width/(float)max_height; - if(aspect > max_aspect){ - return cvSize( max_width, cvRound(max_width/aspect) ); - } - return cvSize( cvRound(max_height*aspect), max_height ); -} - -static void -cvImageWidget_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - CvImageWidget * image_widget = CV_IMAGE_WIDGET( widget ); - - //printf("cvImageWidget_size_request "); - // the case the first time cvShowImage called or when AUTOSIZE - if( image_widget->original_image && - ((image_widget->flags & CV_WINDOW_AUTOSIZE) || - (image_widget->flags & CV_WINDOW_NO_IMAGE))) - { - //printf("original "); - requisition->width = image_widget->original_image->cols; - requisition->height = image_widget->original_image->rows; - } - // default case - else if(image_widget->scaled_image){ - //printf("scaled "); - requisition->width = image_widget->scaled_image->cols; - requisition->height = image_widget->scaled_image->rows; - } - // the case before cvShowImage called - else{ - //printf("default "); - requisition->width = 320; - requisition->height = 240; - } - //printf("%d %d\n",requisition->width, requisition->height); -} - -static void cvImageWidget_set_size(GtkWidget * widget, int max_width, int max_height){ - CvImageWidget * image_widget = CV_IMAGE_WIDGET( widget ); - - //printf("cvImageWidget_set_size %d %d\n", max_width, max_height); - - // don't allow to set the size - if(image_widget->flags & CV_WINDOW_AUTOSIZE) return; - if(!image_widget->original_image) return; - - CvSize scaled_image_size = cvImageWidget_calc_size( image_widget->original_image->cols, - image_widget->original_image->rows, max_width, max_height ); - - if( image_widget->scaled_image && - ( image_widget->scaled_image->cols != scaled_image_size.width || - image_widget->scaled_image->rows != scaled_image_size.height )) - { - cvReleaseMat( &image_widget->scaled_image ); - } - if( !image_widget->scaled_image ){ - image_widget->scaled_image = cvCreateMat( scaled_image_size.height, scaled_image_size.width, CV_8UC3 ); - - - } - assert( image_widget->scaled_image ); -} - -static void -cvImageWidget_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - CvImageWidget *image_widget; - - //printf("cvImageWidget_size_allocate\n"); - g_return_if_fail (widget != NULL); - g_return_if_fail (CV_IS_IMAGE_WIDGET (widget)); - g_return_if_fail (allocation != NULL); - - widget->allocation = *allocation; - image_widget = CV_IMAGE_WIDGET (widget); - - - if( (image_widget->flags & CV_WINDOW_AUTOSIZE)==0 && image_widget->original_image ){ - // (re) allocated scaled image - if( image_widget->flags & CV_WINDOW_NO_IMAGE ){ - cvImageWidget_set_size( widget, image_widget->original_image->cols, - image_widget->original_image->rows); - } - else{ - cvImageWidget_set_size( widget, allocation->width, allocation->height ); - } - cvResize( image_widget->original_image, image_widget->scaled_image, CV_INTER_AREA ); - } - - if (GTK_WIDGET_REALIZED (widget)) - { - image_widget = CV_IMAGE_WIDGET (widget); - - if( image_widget->original_image && - ((image_widget->flags & CV_WINDOW_AUTOSIZE) || - (image_widget->flags & CV_WINDOW_NO_IMAGE)) ) - { - widget->allocation.width = image_widget->original_image->cols; - widget->allocation.height = image_widget->original_image->rows; - gdk_window_move_resize( widget->window, allocation->x, allocation->y, - image_widget->original_image->cols, image_widget->original_image->rows ); - if(image_widget->flags & CV_WINDOW_NO_IMAGE){ - image_widget->flags &= ~CV_WINDOW_NO_IMAGE; - gtk_widget_queue_resize( GTK_WIDGET(widget) ); - } - } - else{ - gdk_window_move_resize (widget->window, - allocation->x, allocation->y, - allocation->width, allocation->height ); - - } - } -} - -static void -cvImageWidget_destroy (GtkObject *object) -{ - CvImageWidget *image_widget; - - g_return_if_fail (object != NULL); - g_return_if_fail (CV_IS_IMAGE_WIDGET (object)); - - image_widget = CV_IMAGE_WIDGET (object); - - cvReleaseMat( &image_widget->scaled_image ); - cvReleaseMat( &image_widget->original_image ); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -static void cvImageWidget_class_init (CvImageWidgetClass * klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass*) klass; - widget_class = (GtkWidgetClass*) klass; - - parent_class = GTK_WIDGET_CLASS( gtk_type_class (gtk_widget_get_type ()) ); - - object_class->destroy = cvImageWidget_destroy; - - widget_class->realize = cvImageWidget_realize; - widget_class->size_request = cvImageWidget_size_request; - widget_class->size_allocate = cvImageWidget_size_allocate; - widget_class->button_press_event = NULL; - widget_class->button_release_event = NULL; - widget_class->motion_notify_event = NULL; -} - -static void -cvImageWidget_init (CvImageWidget *image_widget) -{ - image_widget->original_image=0; - image_widget->scaled_image=0; - image_widget->flags=0; -} - -GtkType cvImageWidget_get_type (void){ - static GtkType image_type = 0; - - if (!image_type) - { - static const GtkTypeInfo image_info = - { - (gchar*)"CvImageWidget", - sizeof (CvImageWidget), - sizeof (CvImageWidgetClass), - (GtkClassInitFunc) cvImageWidget_class_init, - (GtkObjectInitFunc) cvImageWidget_init, - /* reserved_1 */ NULL, - /* reserved_1 */ NULL, - (GtkClassInitFunc) NULL - }; - - image_type = gtk_type_unique (GTK_TYPE_WIDGET, &image_info); - } - - return image_type; -} -///////////////////////////////////////////////////////////////////////////// -// End CvImageWidget -///////////////////////////////////////////////////////////////////////////// - - -struct CvWindow; - -typedef struct CvTrackbar -{ - int signature; - GtkWidget* widget; - char* name; - CvTrackbar* next; - CvWindow* parent; - int* data; - int pos; - int maxval; - CvTrackbarCallback notify; - CvTrackbarCallback2 notify2; - void* userdata; -} -CvTrackbar; - - -typedef struct CvWindow -{ - int signature; - GtkWidget* widget; - GtkWidget* frame; - GtkWidget* paned; - char* name; - CvWindow* prev; - CvWindow* next; - - int last_key; - int flags; - int status;//0 normal, 1 fullscreen (YV) - - CvMouseCallback on_mouse; - void* on_mouse_param; - - struct - { - int pos; - int rows; - CvTrackbar* first; - } - toolbar; - -#ifdef HAVE_OPENGL - bool useGl; - - CvOpenGlDrawCallback glDrawCallback; - void* glDrawData; -#endif -} -CvWindow; - - -static gboolean icvOnClose( GtkWidget* widget, GdkEvent* event, gpointer user_data ); -static gboolean icvOnKeyPress( GtkWidget* widget, GdkEventKey* event, gpointer user_data ); -static void icvOnTrackbar( GtkWidget* widget, gpointer user_data ); -static gboolean icvOnMouse( GtkWidget *widget, GdkEvent *event, gpointer user_data ); - -#ifdef HAVE_GTHREAD -int thread_started=0; -static gpointer icvWindowThreadLoop(); -GMutex* last_key_mutex; -GCond* cond_have_key; -GMutex* window_mutex; -GThread* window_thread; -GtkWidget* cvTopLevelWidget = 0; -#endif - -static int last_key = -1; -static CvWindow* hg_windows = 0; - -CV_IMPL int cvInitSystem( int argc, char** argv ) -{ - static int wasInitialized = 0; - - // check initialization status - if( !wasInitialized ) - { - hg_windows = 0; - - gtk_disable_setlocale(); - gtk_init( &argc, &argv ); - - #ifdef HAVE_OPENGL - gtk_gl_init(&argc, &argv); - #endif - - wasInitialized = 1; - } - - return 0; -} - -CV_IMPL int cvStartWindowThread(){ -#ifdef HAVE_GTHREAD - cvInitSystem(0,NULL); - if (!thread_started) { - if (!g_thread_supported ()) { - /* the GThread system wasn't inited, so init it */ - g_thread_init(NULL); - } - - // this mutex protects the window resources - window_mutex = g_mutex_new(); - - // protects the 'last key pressed' variable - last_key_mutex = g_mutex_new(); - - // conditional that indicates a key has been pressed - cond_have_key = g_cond_new(); - - // this is the window update thread - window_thread = g_thread_create((GThreadFunc) icvWindowThreadLoop, - NULL, TRUE, NULL); - } - thread_started = window_thread!=NULL; - return thread_started; -#else - return 0; -#endif -} - -#ifdef HAVE_GTHREAD -gpointer icvWindowThreadLoop(){ - while(1){ - g_mutex_lock(window_mutex); - gtk_main_iteration_do(FALSE); - g_mutex_unlock(window_mutex); - - // little sleep - g_usleep(500); - - g_thread_yield(); - } - return NULL; -} - -#define CV_LOCK_MUTEX() \ -if(thread_started && g_thread_self()!=window_thread){ g_mutex_lock( window_mutex ); } else { } - -#define CV_UNLOCK_MUTEX() \ -if(thread_started && g_thread_self()!=window_thread){ g_mutex_unlock( window_mutex); } else { } - -#else -#define CV_LOCK_MUTEX() -#define CV_UNLOCK_MUTEX() -#endif - -static CvWindow* icvFindWindowByName( const char* name ) -{ - CvWindow* window = hg_windows; - while( window != 0 && strcmp(name, window->name) != 0 ) - window = window->next; - - return window; -} - -static CvWindow* icvWindowByWidget( GtkWidget* widget ) -{ - CvWindow* window = hg_windows; - - while( window != 0 && window->widget != widget && - window->frame != widget && window->paned != widget ) - window = window->next; - - return window; -} - -double cvGetModeWindow_GTK(const char* name)//YV -{ - double result = -1; - - CV_FUNCNAME( "cvGetModeWindow_GTK" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - CV_LOCK_MUTEX(); - result = window->status; - CV_UNLOCK_MUTEX(); - - __END__; - return result; -} - - -void cvSetModeWindow_GTK( const char* name, double prop_value)//Yannick Verdie -{ - - CV_FUNCNAME( "cvSetModeWindow_GTK" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - if(window->flags & CV_WINDOW_AUTOSIZE)//if the flag CV_WINDOW_AUTOSIZE is set - EXIT; - - //so easy to do fullscreen here, Linux rocks ! - - if (window->status==CV_WINDOW_FULLSCREEN && prop_value==CV_WINDOW_NORMAL) - { - CV_LOCK_MUTEX(); - gtk_window_unfullscreen(GTK_WINDOW(window->frame)); - window->status=CV_WINDOW_NORMAL; - CV_UNLOCK_MUTEX(); - EXIT; - } - - if (window->status==CV_WINDOW_NORMAL && prop_value==CV_WINDOW_FULLSCREEN) - { - CV_LOCK_MUTEX(); - gtk_window_fullscreen(GTK_WINDOW(window->frame)); - window->status=CV_WINDOW_FULLSCREEN; - CV_UNLOCK_MUTEX(); - EXIT; - } - - __END__; -} - - -double cvGetPropWindowAutoSize_GTK(const char* name) -{ - double result = -1; - - CV_FUNCNAME( "cvGetPropWindowAutoSize_GTK" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = window->flags & CV_WINDOW_AUTOSIZE; - - __END__; - - return result; -} - -double cvGetRatioWindow_GTK(const char* name) -{ - double result = -1; - - CV_FUNCNAME( "cvGetRatioWindow_GTK" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = static_cast(window->widget->allocation.width) / window->widget->allocation.height; - - __END__; - - return result; -} - -double cvGetOpenGlProp_GTK(const char* name) -{ - double result = -1; - -#ifdef HAVE_OPENGL - CV_FUNCNAME( "cvGetOpenGlProp_GTK" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = window->useGl; - - __END__; -#else - (void)name; -#endif - - return result; -} - - -// OpenGL support - -#ifdef HAVE_OPENGL - -namespace -{ - void createGlContext(CvWindow* window) - { - GdkGLConfig* glconfig; - - CV_FUNCNAME( "createGlContext" ); - - __BEGIN__; - - // Try double-buffered visual - glconfig = gdk_gl_config_new_by_mode((GdkGLConfigMode)(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE)); - if (!glconfig) - CV_ERROR( CV_OpenGlApiCallError, "Can't Create A GL Device Context" ); - - // Set OpenGL-capability to the widget - if (!gtk_widget_set_gl_capability(window->widget, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Create A GL Device Context" ); - - window->useGl = true; - - __END__; - } - - void drawGl(CvWindow* window) - { - CV_FUNCNAME( "drawGl" ); - - __BEGIN__; - - GdkGLContext* glcontext = gtk_widget_get_gl_context(window->widget); - GdkGLDrawable* gldrawable = gtk_widget_get_gl_drawable(window->widget); - - if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - glViewport(0, 0, window->widget->allocation.width, window->widget->allocation.height); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (window->glDrawCallback) - window->glDrawCallback(window->glDrawData); - - if (gdk_gl_drawable_is_double_buffered (gldrawable)) - gdk_gl_drawable_swap_buffers(gldrawable); - else - glFlush(); - - gdk_gl_drawable_gl_end(gldrawable); - - __END__; - } -} - -#endif // HAVE_OPENGL - - -static gboolean cvImageWidget_expose(GtkWidget* widget, GdkEventExpose* event, gpointer data) -{ -#ifdef HAVE_OPENGL - CvWindow* window = (CvWindow*)data; - - if (window->useGl) - { - drawGl(window); - return TRUE; - } -#else - (void)data; -#endif - - CvImageWidget *image_widget; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (CV_IS_IMAGE_WIDGET (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (event->count > 0) - return FALSE; - - image_widget = CV_IMAGE_WIDGET (widget); - - gdk_window_clear_area (widget->window, - 0, 0, - widget->allocation.width, - widget->allocation.height); - if( image_widget->scaled_image ){ - // center image in available region - int x0 = (widget->allocation.width - image_widget->scaled_image->cols)/2; - int y0 = (widget->allocation.height - image_widget->scaled_image->rows)/2; - - gdk_draw_rgb_image( widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], - x0, y0, MIN(image_widget->scaled_image->cols, widget->allocation.width), - MIN(image_widget->scaled_image->rows, widget->allocation.height), - GDK_RGB_DITHER_MAX, image_widget->scaled_image->data.ptr, image_widget->scaled_image->step ); - } - else if( image_widget->original_image ){ - gdk_draw_rgb_image( widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], - 0, 0, - MIN(image_widget->original_image->cols, widget->allocation.width), - MIN(image_widget->original_image->rows, widget->allocation.height), - GDK_RGB_DITHER_MAX, image_widget->original_image->data.ptr, image_widget->original_image->step ); - } - return TRUE; -} - -CV_IMPL int cvNamedWindow( const char* name, int flags ) -{ - int result = 0; - CV_FUNCNAME( "cvNamedWindow" ); - - __BEGIN__; - - CvWindow* window; - int len; - - cvInitSystem(1,(char**)&name); - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - // Check the name in the storage - if( icvFindWindowByName( name ) != 0 ) - { - result = 1; - EXIT; - } - - len = strlen(name); - CV_CALL( window = (CvWindow*)cvAlloc(sizeof(CvWindow) + len + 1)); - memset( window, 0, sizeof(*window)); - window->name = (char*)(window + 1); - memcpy( window->name, name, len + 1 ); - window->flags = flags; - window->signature = CV_WINDOW_MAGIC_VAL; - window->last_key = 0; - window->on_mouse = 0; - window->on_mouse_param = 0; - memset( &window->toolbar, 0, sizeof(window->toolbar)); - window->next = hg_windows; - window->prev = 0; - window->status = CV_WINDOW_NORMAL;//YV - - CV_LOCK_MUTEX(); - - window->frame = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - - window->paned = gtk_vbox_new( FALSE, 0 ); - window->widget = cvImageWidgetNew( flags ); - gtk_box_pack_end( GTK_BOX(window->paned), window->widget, TRUE, TRUE, 0 ); - gtk_widget_show( window->widget ); - gtk_container_add( GTK_CONTAINER(window->frame), window->paned ); - gtk_widget_show( window->paned ); - -#ifndef HAVE_OPENGL - if (flags & CV_WINDOW_OPENGL) - CV_ERROR( CV_OpenGlNotSupported, "Library was built without OpenGL support" ); -#else - if (flags & CV_WINDOW_OPENGL) - createGlContext(window); - - window->glDrawCallback = 0; - window->glDrawData = 0; -#endif - - // - // configure event handlers - // TODO -- move this to CvImageWidget ? - gtk_signal_connect( GTK_OBJECT(window->frame), "key-press-event", - GTK_SIGNAL_FUNC(icvOnKeyPress), window ); - gtk_signal_connect( GTK_OBJECT(window->widget), "button-press-event", - GTK_SIGNAL_FUNC(icvOnMouse), window ); - gtk_signal_connect( GTK_OBJECT(window->widget), "button-release-event", - GTK_SIGNAL_FUNC(icvOnMouse), window ); - gtk_signal_connect( GTK_OBJECT(window->widget), "motion-notify-event", - GTK_SIGNAL_FUNC(icvOnMouse), window ); - gtk_signal_connect( GTK_OBJECT(window->frame), "delete-event", - GTK_SIGNAL_FUNC(icvOnClose), window ); - gtk_signal_connect( GTK_OBJECT(window->widget), "expose-event", - GTK_SIGNAL_FUNC(cvImageWidget_expose), window ); - - gtk_widget_add_events (window->widget, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK) ; - - gtk_widget_show( window->frame ); - gtk_window_set_title( GTK_WINDOW(window->frame), name ); - - if( hg_windows ) - hg_windows->prev = window; - hg_windows = window; - - gtk_window_set_resizable( GTK_WINDOW(window->frame), (flags & CV_WINDOW_AUTOSIZE) == 0 ); - - - // allow window to be resized - if( (flags & CV_WINDOW_AUTOSIZE)==0 ){ - GdkGeometry geometry; - geometry.min_width = 50; - geometry.min_height = 50; - gtk_window_set_geometry_hints( GTK_WINDOW( window->frame ), GTK_WIDGET( window->widget ), - &geometry, (GdkWindowHints) (GDK_HINT_MIN_SIZE)); - } - - CV_UNLOCK_MUTEX(); - -#ifdef HAVE_OPENGL - if (window->useGl) - cvSetOpenGlContext(name); -#endif - - result = 1; - __END__; - - return result; -} - - -#ifdef HAVE_OPENGL - -CV_IMPL void cvSetOpenGlContext(const char* name) -{ - CvWindow* window; - GdkGLContext* glcontext; - GdkGLDrawable* gldrawable; - - CV_FUNCNAME( "cvSetOpenGlContext" ); - - __BEGIN__; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - if (!window->useGl) - CV_ERROR( CV_OpenGlNotSupported, "Window doesn't support OpenGL" ); - - glcontext = gtk_widget_get_gl_context(window->widget); - gldrawable = gtk_widget_get_gl_drawable(window->widget); - - if (!gdk_gl_drawable_make_current(gldrawable, glcontext)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - __END__; -} - -CV_IMPL void cvUpdateWindow(const char* name) -{ - CV_FUNCNAME( "cvUpdateWindow" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; - - // window does not refresh without this - gtk_widget_queue_draw( GTK_WIDGET(window->widget) ); - - __END__; -} - -CV_IMPL void cvSetOpenGlDrawCallback(const char* name, CvOpenGlDrawCallback callback, void* userdata) -{ - CvWindow* window; - - CV_FUNCNAME( "cvCreateOpenGLCallback" ); - - __BEGIN__; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - EXIT; - - if (!window->useGl) - CV_ERROR( CV_OpenGlNotSupported, "Window was created without OpenGL context" ); - - window->glDrawCallback = callback; - window->glDrawData = userdata; - - __END__; -} - -#endif // HAVE_OPENGL - - - - -static void icvDeleteWindow( CvWindow* window ) -{ - CvTrackbar* trackbar; - - if( window->prev ) - window->prev->next = window->next; - else - hg_windows = window->next; - - if( window->next ) - window->next->prev = window->prev; - - window->prev = window->next = 0; - - gtk_widget_destroy( window->frame ); - - for( trackbar = window->toolbar.first; trackbar != 0; ) - { - CvTrackbar* next = trackbar->next; - cvFree( &trackbar ); - trackbar = next; - } - - cvFree( &window ); -#ifdef HAVE_GTHREAD - // if last window, send key press signal - // to jump out of any waiting cvWaitKey's - if(hg_windows==0 && thread_started){ - g_cond_broadcast(cond_have_key); - } -#endif -} - - -CV_IMPL void cvDestroyWindow( const char* name ) -{ - CV_FUNCNAME( "cvDestroyWindow" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - EXIT; - - // note that it is possible for the update thread to run this function - // if there is a call to cvShowImage in a mouse callback - // (this would produce a deadlock on window_mutex) - CV_LOCK_MUTEX(); - - icvDeleteWindow( window ); - - CV_UNLOCK_MUTEX(); - - __END__; -} - - -CV_IMPL void -cvDestroyAllWindows( void ) -{ - CV_LOCK_MUTEX(); - - while( hg_windows ) - { - CvWindow* window = hg_windows; - icvDeleteWindow( window ); - } - CV_UNLOCK_MUTEX(); -} - -// CvSize icvCalcOptimalWindowSize( CvWindow * window, CvSize new_image_size){ -// CvSize window_size; -// GtkWidget * toplevel = gtk_widget_get_toplevel( window->frame ); -// gdk_drawable_get_size( GDK_DRAWABLE(toplevel->window), -// &window_size.width, &window_size.height ); - -// window_size.width = window_size.width + new_image_size.width - window->widget->allocation.width; -// window_size.height = window_size.height + new_image_size.height - window->widget->allocation.height; - -// return window_size; -// } - -CV_IMPL void -cvShowImage( const char* name, const CvArr* arr ) -{ - CV_FUNCNAME( "cvShowImage" ); - - __BEGIN__; - - CvWindow* window; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - CV_LOCK_MUTEX(); - - window = icvFindWindowByName(name); - if(!window) - { - cvNamedWindow(name, 1); - window = icvFindWindowByName(name); - } - - if( window && arr ) - { - #ifdef HAVE_OPENGL - if (window->useGl) - { - CvMat stub; - CvMat* mat = cvGetMat(arr, &stub); - cv::Mat im(mat); - cv::imshow(name, im); - return; - } - #endif - - CvImageWidget * image_widget = CV_IMAGE_WIDGET( window->widget ); - cvImageWidgetSetImage( image_widget, arr ); - } - - CV_UNLOCK_MUTEX(); - - __END__; -} - -CV_IMPL void cvResizeWindow(const char* name, int width, int height ) -{ - CV_FUNCNAME( "cvResizeWindow" ); - - __BEGIN__; - - CvWindow* window; - CvImageWidget * image_widget; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - image_widget = CV_IMAGE_WIDGET( window->widget ); - //if(image_widget->flags & CV_WINDOW_AUTOSIZE) - //EXIT; - - CV_LOCK_MUTEX(); - - gtk_window_set_resizable( GTK_WINDOW(window->frame), 1 ); - gtk_window_resize( GTK_WINDOW(window->frame), width, height ); - - // disable initial resize since presumably user wants to keep - // this window size - image_widget->flags &= ~CV_WINDOW_NO_IMAGE; - - CV_UNLOCK_MUTEX(); - - __END__; -} - - -CV_IMPL void cvMoveWindow( const char* name, int x, int y ) -{ - CV_FUNCNAME( "cvMoveWindow" ); - - __BEGIN__; - - CvWindow* window; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - CV_LOCK_MUTEX(); - - gtk_window_move( GTK_WINDOW(window->frame), x, y ); - - CV_UNLOCK_MUTEX(); - - __END__; -} - - -static CvTrackbar* -icvFindTrackbarByName( const CvWindow* window, const char* name ) -{ - CvTrackbar* trackbar = window->toolbar.first; - - for( ; trackbar != 0 && strcmp( trackbar->name, name ) != 0; trackbar = trackbar->next ) - ; - - return trackbar; -} - -static int -icvCreateTrackbar( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback on_notify, - CvTrackbarCallback2 on_notify2, void* userdata ) -{ - int result = 0; - - CV_FUNCNAME( "icvCreateTrackbar" ); - - __BEGIN__; - - /*char slider_name[32];*/ - CvWindow* window = 0; - CvTrackbar* trackbar = 0; - - if( !window_name || !trackbar_name ) - CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" ); - - if( count <= 0 ) - CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" ); - - window = icvFindWindowByName(window_name); - if( !window ) - EXIT; - - trackbar = icvFindTrackbarByName(window,trackbar_name); - - CV_LOCK_MUTEX(); - - if( !trackbar ) - { - int len = strlen(trackbar_name); - trackbar = (CvTrackbar*)cvAlloc(sizeof(CvTrackbar) + len + 1); - memset( trackbar, 0, sizeof(*trackbar)); - trackbar->signature = CV_TRACKBAR_MAGIC_VAL; - trackbar->name = (char*)(trackbar+1); - memcpy( trackbar->name, trackbar_name, len + 1 ); - trackbar->parent = window; - trackbar->next = window->toolbar.first; - window->toolbar.first = trackbar; - - GtkWidget* hscale_box = gtk_hbox_new( FALSE, 10 ); - GtkWidget* hscale_label = gtk_label_new( trackbar_name ); - GtkWidget* hscale = gtk_hscale_new_with_range( 0, count, 1 ); - gtk_range_set_update_policy( GTK_RANGE(hscale), GTK_UPDATE_CONTINUOUS ); - gtk_scale_set_digits( GTK_SCALE(hscale), 0 ); - //gtk_scale_set_value_pos( hscale, GTK_POS_TOP ); - gtk_scale_set_draw_value( GTK_SCALE(hscale), TRUE ); - - trackbar->widget = hscale; - gtk_box_pack_start( GTK_BOX(hscale_box), hscale_label, FALSE, FALSE, 5 ); - gtk_widget_show( hscale_label ); - gtk_box_pack_start( GTK_BOX(hscale_box), hscale, TRUE, TRUE, 5 ); - gtk_widget_show( hscale ); - gtk_box_pack_start( GTK_BOX(window->paned), hscale_box, FALSE, FALSE, 5 ); - gtk_widget_show( hscale_box ); - - } - - if( val ) - { - int value = *val; - if( value < 0 ) - value = 0; - if( value > count ) - value = count; - gtk_range_set_value( GTK_RANGE(trackbar->widget), value ); - trackbar->pos = value; - trackbar->data = val; - } - - trackbar->maxval = count; - trackbar->notify = on_notify; - trackbar->notify2 = on_notify2; - trackbar->userdata = userdata; - gtk_signal_connect( GTK_OBJECT(trackbar->widget), "value-changed", - GTK_SIGNAL_FUNC(icvOnTrackbar), trackbar ); - - // queue a widget resize to trigger a window resize to - // compensate for the addition of trackbars - gtk_widget_queue_resize( GTK_WIDGET(window->widget) ); - - - CV_UNLOCK_MUTEX(); - - result = 1; - - __END__; - - return result; -} - - -CV_IMPL int -cvCreateTrackbar( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback on_notify ) -{ - return icvCreateTrackbar(trackbar_name, window_name, val, count, - on_notify, 0, 0); -} - - -CV_IMPL int -cvCreateTrackbar2( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback2 on_notify2, - void* userdata ) -{ - return icvCreateTrackbar(trackbar_name, window_name, val, count, - 0, on_notify2, userdata); -} - - -CV_IMPL void -cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param ) -{ - CV_FUNCNAME( "cvSetMouseCallback" ); - - __BEGIN__; - - CvWindow* window = 0; - - if( !window_name ) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - window = icvFindWindowByName(window_name); - if( !window ) - EXIT; - - window->on_mouse = on_mouse; - window->on_mouse_param = param; - - __END__; -} - - -CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) -{ - int pos = -1; - - CV_FUNCNAME( "cvGetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - pos = trackbar->pos; - - __END__; - - return pos; -} - - -CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos ) -{ - CV_FUNCNAME( "cvSetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - { - if( pos < 0 ) - pos = 0; - - if( pos > trackbar->maxval ) - pos = trackbar->maxval; - } - - CV_LOCK_MUTEX(); - - gtk_range_set_value( GTK_RANGE(trackbar->widget), pos ); - - CV_UNLOCK_MUTEX(); - - __END__; -} - - -CV_IMPL void* cvGetWindowHandle( const char* window_name ) -{ - void* widget = 0; - - CV_FUNCNAME( "cvGetWindowHandle" ); - - __BEGIN__; - - CvWindow* window; - - if( window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - widget = (void*)window->widget; - - __END__; - - return widget; -} - - -CV_IMPL const char* cvGetWindowName( void* window_handle ) -{ - const char* window_name = ""; - - CV_FUNCNAME( "cvGetWindowName" ); - - __BEGIN__; - - CvWindow* window; - - if( window_handle == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - window = icvWindowByWidget( (GtkWidget*)window_handle ); - if( window ) - window_name = window->name; - - __END__; - - return window_name; -} - -static gboolean icvOnKeyPress( GtkWidget * /*widget*/, - GdkEventKey* event, gpointer /*user_data*/ ) -{ - int code = 0; - - switch( event->keyval ) - { - case GDK_Escape: - code = 27; - break; - case GDK_Return: - case GDK_Linefeed: - code = '\n'; - break; - case GDK_Tab: - code = '\t'; - break; - default: - code = event->keyval; - } - - code |= event->state << 16; - -#ifdef HAVE_GTHREAD - if(thread_started) g_mutex_lock(last_key_mutex); -#endif - - last_key = code; - -#ifdef HAVE_GTHREAD - if(thread_started){ - // signal any waiting threads - g_cond_broadcast(cond_have_key); - g_mutex_unlock(last_key_mutex); - } -#endif - - return FALSE; -} - - -static void icvOnTrackbar( GtkWidget* widget, gpointer user_data ) -{ - int pos = cvRound( gtk_range_get_value(GTK_RANGE(widget))); - CvTrackbar* trackbar = (CvTrackbar*)user_data; - - if( trackbar && trackbar->signature == CV_TRACKBAR_MAGIC_VAL && - trackbar->widget == widget ) - { - trackbar->pos = pos; - if( trackbar->data ) - *trackbar->data = pos; - if( trackbar->notify2 ) - trackbar->notify2(pos, trackbar->userdata); - else if( trackbar->notify ) - trackbar->notify(pos); - } -} - -static gboolean icvOnClose( GtkWidget* widget, GdkEvent* /*event*/, gpointer user_data ) -{ - CvWindow* window = (CvWindow*)user_data; - if( window->signature == CV_WINDOW_MAGIC_VAL && - window->frame == widget ) - { - icvDeleteWindow(window); - } - return TRUE; -} - - -static gboolean icvOnMouse( GtkWidget *widget, GdkEvent *event, gpointer user_data ) -{ - // TODO move this logic to CvImageWidget - CvWindow* window = (CvWindow*)user_data; - CvPoint2D32f pt32f = {-1., -1.}; - CvPoint pt = {-1,-1}; - int cv_event = -1, state = 0; - CvImageWidget * image_widget = CV_IMAGE_WIDGET( widget ); - - if( window->signature != CV_WINDOW_MAGIC_VAL || - window->widget != widget || !window->widget || - !window->on_mouse /*|| !image_widget->original_image*/) - return FALSE; - - if( event->type == GDK_MOTION_NOTIFY ) - { - GdkEventMotion* event_motion = (GdkEventMotion*)event; - - cv_event = CV_EVENT_MOUSEMOVE; - pt32f.x = cvRound(event_motion->x); - pt32f.y = cvRound(event_motion->y); - state = event_motion->state; - } - else if( event->type == GDK_BUTTON_PRESS || - event->type == GDK_BUTTON_RELEASE || - event->type == GDK_2BUTTON_PRESS ) - { - GdkEventButton* event_button = (GdkEventButton*)event; - pt32f.x = cvRound(event_button->x); - pt32f.y = cvRound(event_button->y); - - - if( event_button->type == GDK_BUTTON_PRESS ) - { - cv_event = event_button->button == 1 ? CV_EVENT_LBUTTONDOWN : - event_button->button == 2 ? CV_EVENT_MBUTTONDOWN : - event_button->button == 3 ? CV_EVENT_RBUTTONDOWN : 0; - } - else if( event_button->type == GDK_BUTTON_RELEASE ) - { - cv_event = event_button->button == 1 ? CV_EVENT_LBUTTONUP : - event_button->button == 2 ? CV_EVENT_MBUTTONUP : - event_button->button == 3 ? CV_EVENT_RBUTTONUP : 0; - } - else if( event_button->type == GDK_2BUTTON_PRESS ) - { - cv_event = event_button->button == 1 ? CV_EVENT_LBUTTONDBLCLK : - event_button->button == 2 ? CV_EVENT_MBUTTONDBLCLK : - event_button->button == 3 ? CV_EVENT_RBUTTONDBLCLK : 0; - } - state = event_button->state; - } - - if( cv_event >= 0 ){ - // scale point if image is scaled - if( (image_widget->flags & CV_WINDOW_AUTOSIZE)==0 && - image_widget->original_image && - image_widget->scaled_image ){ - // image origin is not necessarily at (0,0) - int x0 = (widget->allocation.width - image_widget->scaled_image->cols)/2; - int y0 = (widget->allocation.height - image_widget->scaled_image->rows)/2; - pt.x = cvFloor( ((pt32f.x-x0)*image_widget->original_image->cols)/ - image_widget->scaled_image->cols ); - pt.y = cvFloor( ((pt32f.y-y0)*image_widget->original_image->rows)/ - image_widget->scaled_image->rows ); - } - else{ - pt = cvPointFrom32f( pt32f ); - } - -// if((unsigned)pt.x < (unsigned)(image_widget->original_image->width) && -// (unsigned)pt.y < (unsigned)(image_widget->original_image->height) ) - { - int flags = (state & GDK_SHIFT_MASK ? CV_EVENT_FLAG_SHIFTKEY : 0) | - (state & GDK_CONTROL_MASK ? CV_EVENT_FLAG_CTRLKEY : 0) | - (state & (GDK_MOD1_MASK|GDK_MOD2_MASK) ? CV_EVENT_FLAG_ALTKEY : 0) | - (state & GDK_BUTTON1_MASK ? CV_EVENT_FLAG_LBUTTON : 0) | - (state & GDK_BUTTON2_MASK ? CV_EVENT_FLAG_MBUTTON : 0) | - (state & GDK_BUTTON3_MASK ? CV_EVENT_FLAG_RBUTTON : 0); - window->on_mouse( cv_event, pt.x, pt.y, flags, window->on_mouse_param ); - } - } - - return FALSE; - } - - -static gboolean icvAlarm( gpointer user_data ) -{ - *(int*)user_data = 1; - return FALSE; -} - - -CV_IMPL int cvWaitKey( int delay ) -{ -#ifdef HAVE_GTHREAD - if(thread_started && g_thread_self()!=window_thread){ - gboolean expired; - int my_last_key; - - // wait for signal or timeout if delay > 0 - if(delay>0){ - GTimeVal timer; - g_get_current_time(&timer); - g_time_val_add(&timer, delay*1000); - expired = !g_cond_timed_wait(cond_have_key, last_key_mutex, &timer); - } - else{ - g_cond_wait(cond_have_key, last_key_mutex); - expired=false; - } - my_last_key = last_key; - g_mutex_unlock(last_key_mutex); - if(expired || hg_windows==0){ - return -1; - } - return my_last_key; - } - else{ -#endif - int expired = 0; - guint timer = 0; - if( delay > 0 ) - timer = g_timeout_add( delay, icvAlarm, &expired ); - last_key = -1; - while( gtk_main_iteration_do(TRUE) && last_key < 0 && !expired && hg_windows != 0 ) - ; - - if( delay > 0 && !expired ) - g_source_remove(timer); -#ifdef HAVE_GTHREAD - } -#endif - return last_key; -} - - -#endif // HAVE_GTK -#endif // WIN32 - -/* End of file. */ diff --git a/modules/highgui/src/window_w32.cpp b/modules/highgui/src/window_w32.cpp deleted file mode 100644 index 48f3aab..0000000 --- a/modules/highgui/src/window_w32.cpp +++ /dev/null @@ -1,2149 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined WIN32 || defined _WIN32 - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wmissing-declarations" -#endif - -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_OPENGL -#include -#include -#include -#include -#include "opencv2/highgui/highgui.hpp" -#include -#endif - -static const char* trackbar_text = -" "; - -#if defined _M_X64 || defined __x86_64 - -#define icvGetWindowLongPtr GetWindowLongPtr -#define icvSetWindowLongPtr( hwnd, id, ptr ) SetWindowLongPtr( hwnd, id, (LONG_PTR)(ptr) ) -#define icvGetClassLongPtr GetClassLongPtr - -#define CV_USERDATA GWLP_USERDATA -#define CV_WNDPROC GWLP_WNDPROC -#define CV_HCURSOR GCLP_HCURSOR -#define CV_HBRBACKGROUND GCLP_HBRBACKGROUND - -#else - -#define icvGetWindowLongPtr GetWindowLong -#define icvSetWindowLongPtr( hwnd, id, ptr ) SetWindowLong( hwnd, id, (size_t)ptr ) -#define icvGetClassLongPtr GetClassLong - -#define CV_USERDATA GWL_USERDATA -#define CV_WNDPROC GWL_WNDPROC -#define CV_HCURSOR GCL_HCURSOR -#define CV_HBRBACKGROUND GCL_HBRBACKGROUND - -#endif - -static void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin ) -{ - assert( bmi && width >= 0 && height >= 0 && (bpp == 8 || bpp == 24 || bpp == 32)); - - BITMAPINFOHEADER* bmih = &(bmi->bmiHeader); - - memset( bmih, 0, sizeof(*bmih)); - bmih->biSize = sizeof(BITMAPINFOHEADER); - bmih->biWidth = width; - bmih->biHeight = origin ? abs(height) : -abs(height); - bmih->biPlanes = 1; - bmih->biBitCount = (unsigned short)bpp; - bmih->biCompression = BI_RGB; - - if( bpp == 8 ) - { - RGBQUAD* palette = bmi->bmiColors; - int i; - for( i = 0; i < 256; i++ ) - { - palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i; - palette[i].rgbReserved = 0; - } - } -} - -struct CvWindow; - -typedef struct CvTrackbar -{ - int signature; - HWND hwnd; - char* name; - CvTrackbar* next; - CvWindow* parent; - HWND buddy; - int* data; - int pos; - int maxval; - void (*notify)(int); - void (*notify2)(int, void*); - void* userdata; - int id; -} -CvTrackbar; - - -typedef struct CvWindow -{ - int signature; - HWND hwnd; - char* name; - CvWindow* prev; - CvWindow* next; - HWND frame; - - HDC dc; - HGDIOBJ image; - int last_key; - int flags; - int status;//0 normal, 1 fullscreen (YV) - - CvMouseCallback on_mouse; - void* on_mouse_param; - - struct - { - HWND toolbar; - int pos; - int rows; - WNDPROC toolBarProc; - CvTrackbar* first; - } - toolbar; - - int width; - int height; - - // OpenGL support - -#ifdef HAVE_OPENGL - bool useGl; - HGLRC hGLRC; - - CvOpenGlDrawCallback glDrawCallback; - void* glDrawData; -#endif -} -CvWindow; - -#define HG_BUDDY_WIDTH 130 - -#ifndef TBIF_SIZE - #define TBIF_SIZE 0x40 -#endif - -#ifndef TB_SETBUTTONINFO - #define TB_SETBUTTONINFO (WM_USER + 66) -#endif - -#ifndef TBM_GETTOOLTIPS - #define TBM_GETTOOLTIPS (WM_USER + 30) -#endif - -static LRESULT CALLBACK HighGUIProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -static LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -static LRESULT CALLBACK MainWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -static void icvUpdateWindowPos( CvWindow* window ); - -static CvWindow* hg_windows = 0; - -typedef int (CV_CDECL * CvWin32WindowCallback)(HWND, UINT, WPARAM, LPARAM, int*); -static CvWin32WindowCallback hg_on_preprocess = 0, hg_on_postprocess = 0; -static HINSTANCE hg_hinstance = 0; - -static const char* highGUIclassName = "HighGUI class"; -static const char* mainHighGUIclassName = "Main HighGUI class"; - -static void icvCleanupHighgui() -{ - cvDestroyAllWindows(); - UnregisterClass(highGUIclassName, hg_hinstance); - UnregisterClass(mainHighGUIclassName, hg_hinstance); -} - -CV_IMPL int cvInitSystem( int, char** ) -{ - static int wasInitialized = 0; - - // check initialization status - if( !wasInitialized ) - { - // Initialize the stogare - hg_windows = 0; - - // Register the class - WNDCLASS wndc; - wndc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS; - wndc.lpfnWndProc = WindowProc; - wndc.cbClsExtra = 0; - wndc.cbWndExtra = 0; - wndc.hInstance = hg_hinstance; - wndc.lpszClassName = highGUIclassName; - wndc.lpszMenuName = highGUIclassName; - wndc.hIcon = LoadIcon(0, IDI_APPLICATION); - wndc.hCursor = (HCURSOR)LoadCursor(0, (LPSTR)(size_t)IDC_CROSS ); - wndc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - - RegisterClass(&wndc); - - wndc.lpszClassName = mainHighGUIclassName; - wndc.lpszMenuName = mainHighGUIclassName; - wndc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); - wndc.lpfnWndProc = MainWindowProc; - - RegisterClass(&wndc); - atexit( icvCleanupHighgui ); - - wasInitialized = 1; - } - - return 0; -} - -CV_IMPL int cvStartWindowThread(){ - return 0; -} - -static CvWindow* icvFindWindowByName( const char* name ) -{ - CvWindow* window = hg_windows; - - for( ; window != 0 && strcmp( name, window->name) != 0; window = window->next ) - ; - - return window; -} - - -static CvWindow* icvWindowByHWND( HWND hwnd ) -{ - CvWindow* window = (CvWindow*)icvGetWindowLongPtr( hwnd, CV_USERDATA ); - return window != 0 && hg_windows != 0 && - window->signature == CV_WINDOW_MAGIC_VAL ? window : 0; -} - - -static CvTrackbar* icvTrackbarByHWND( HWND hwnd ) -{ - CvTrackbar* trackbar = (CvTrackbar*)icvGetWindowLongPtr( hwnd, CV_USERDATA ); - return trackbar != 0 && trackbar->signature == CV_TRACKBAR_MAGIC_VAL && - trackbar->hwnd == hwnd ? trackbar : 0; -} - - -static const char* icvWindowPosRootKey = "Software\\OpenCV\\HighGUI\\Windows\\"; - -// Window positions saving/loading added by Philip Gruebele. -//pgruebele@cox.net -// Restores the window position from the registry saved position. -static void -icvLoadWindowPos( const char* name, CvRect& rect ) -{ - HKEY hkey; - char szKey[1024]; - strcpy( szKey, icvWindowPosRootKey ); - strcat( szKey, name ); - - rect.x = rect.y = CW_USEDEFAULT; - rect.width = rect.height = 320; - - if( RegOpenKeyEx(HKEY_CURRENT_USER,szKey,0,KEY_QUERY_VALUE,&hkey) == ERROR_SUCCESS ) - { - // Yes we are installed. - DWORD dwType = 0; - DWORD dwSize = sizeof(int); - - RegQueryValueEx(hkey, "Left", NULL, &dwType, (BYTE*)&rect.x, &dwSize); - RegQueryValueEx(hkey, "Top", NULL, &dwType, (BYTE*)&rect.y, &dwSize); - RegQueryValueEx(hkey, "Width", NULL, &dwType, (BYTE*)&rect.width, &dwSize); - RegQueryValueEx(hkey, "Height", NULL, &dwType, (BYTE*)&rect.height, &dwSize); - - if( rect.x != (int)CW_USEDEFAULT && (rect.x < -200 || rect.x > 3000) ) - rect.x = 100; - if( rect.y != (int)CW_USEDEFAULT && (rect.y < -200 || rect.y > 3000) ) - rect.y = 100; - - if( rect.width != (int)CW_USEDEFAULT && (rect.width < 0 || rect.width > 3000) ) - rect.width = 100; - if( rect.height != (int)CW_USEDEFAULT && (rect.height < 0 || rect.height > 3000) ) - rect.height = 100; - - RegCloseKey(hkey); - } -} - - -// Window positions saving/loading added by Philip Gruebele. -//pgruebele@cox.net -// philipg. Saves the window position in the registry -static void -icvSaveWindowPos( const char* name, CvRect rect ) -{ - static const DWORD MAX_RECORD_COUNT = 100; - HKEY hkey; - char szKey[1024]; - char rootKey[1024]; - strcpy( szKey, icvWindowPosRootKey ); - strcat( szKey, name ); - - if( RegOpenKeyEx( HKEY_CURRENT_USER,szKey,0,KEY_READ,&hkey) != ERROR_SUCCESS ) - { - HKEY hroot; - DWORD count = 0; - FILETIME oldestTime = { UINT_MAX, UINT_MAX }; - char oldestKey[1024]; - char currentKey[1024]; - - strcpy( rootKey, icvWindowPosRootKey ); - rootKey[strlen(rootKey)-1] = '\0'; - if( RegCreateKeyEx(HKEY_CURRENT_USER, rootKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ+KEY_WRITE, 0, &hroot, NULL) != ERROR_SUCCESS ) - //RegOpenKeyEx( HKEY_CURRENT_USER,rootKey,0,KEY_READ,&hroot) != ERROR_SUCCESS ) - return; - - for(;;) - { - DWORD csize = sizeof(currentKey); - FILETIME accesstime = { 0, 0 }; - LONG code = RegEnumKeyEx( hroot, count, currentKey, &csize, NULL, NULL, NULL, &accesstime ); - if( code != ERROR_SUCCESS && code != ERROR_MORE_DATA ) - break; - count++; - if( oldestTime.dwHighDateTime > accesstime.dwHighDateTime || - (oldestTime.dwHighDateTime == accesstime.dwHighDateTime && - oldestTime.dwLowDateTime > accesstime.dwLowDateTime) ) - { - oldestTime = accesstime; - strcpy( oldestKey, currentKey ); - } - } - - if( count >= MAX_RECORD_COUNT ) - RegDeleteKey( hroot, oldestKey ); - RegCloseKey( hroot ); - - if( RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &hkey, NULL) != ERROR_SUCCESS ) - return; - } - else - { - RegCloseKey( hkey ); - if( RegOpenKeyEx( HKEY_CURRENT_USER,szKey,0,KEY_WRITE,&hkey) != ERROR_SUCCESS ) - return; - } - - RegSetValueEx(hkey, "Left", 0, REG_DWORD, (BYTE*)&rect.x, sizeof(rect.x)); - RegSetValueEx(hkey, "Top", 0, REG_DWORD, (BYTE*)&rect.y, sizeof(rect.y)); - RegSetValueEx(hkey, "Width", 0, REG_DWORD, (BYTE*)&rect.width, sizeof(rect.width)); - RegSetValueEx(hkey, "Height", 0, REG_DWORD, (BYTE*)&rect.height, sizeof(rect.height)); - RegCloseKey(hkey); -} - -double cvGetModeWindow_W32(const char* name)//YV -{ - double result = -1; - - CV_FUNCNAME( "cvGetModeWindow_W32" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = window->status; - - __END__; - return result; -} - -void cvSetModeWindow_W32( const char* name, double prop_value)//Yannick Verdie -{ - CV_FUNCNAME( "cvSetModeWindow_W32" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - if(window->flags & CV_WINDOW_AUTOSIZE)//if the flag CV_WINDOW_AUTOSIZE is set - EXIT; - - { - DWORD dwStyle = (DWORD)GetWindowLongPtr(window->frame, GWL_STYLE); - CvRect position; - - if (window->status==CV_WINDOW_FULLSCREEN && prop_value==CV_WINDOW_NORMAL) - { - icvLoadWindowPos(window->name,position ); - SetWindowLongPtr(window->frame, GWL_STYLE, dwStyle | WS_CAPTION | WS_THICKFRAME); - - SetWindowPos(window->frame, HWND_TOP, position.x, position.y , position.width,position.height, SWP_NOZORDER | SWP_FRAMECHANGED); - window->status=CV_WINDOW_NORMAL; - - EXIT; - } - - if (window->status==CV_WINDOW_NORMAL && prop_value==CV_WINDOW_FULLSCREEN) - { - //save dimension - RECT rect; - GetWindowRect(window->frame, &rect); - CvRect RectCV = cvRect(rect.left, rect.top,rect.right - rect.left, rect.bottom - rect.top); - icvSaveWindowPos(window->name,RectCV ); - - //Look at coordinate for fullscreen - HMONITOR hMonitor; - MONITORINFO mi; - hMonitor = MonitorFromRect(&rect, MONITOR_DEFAULTTONEAREST); - - mi.cbSize = sizeof(mi); - GetMonitorInfo(hMonitor, &mi); - - //fullscreen - position.x=mi.rcMonitor.left;position.y=mi.rcMonitor.top; - position.width=mi.rcMonitor.right - mi.rcMonitor.left;position.height=mi.rcMonitor.bottom - mi.rcMonitor.top; - SetWindowLongPtr(window->frame, GWL_STYLE, dwStyle & ~WS_CAPTION & ~WS_THICKFRAME); - - SetWindowPos(window->frame, HWND_TOP, position.x, position.y , position.width,position.height, SWP_NOZORDER | SWP_FRAMECHANGED); - window->status=CV_WINDOW_FULLSCREEN; - - EXIT; - } - } - - __END__; -} - -double cvGetPropWindowAutoSize_W32(const char* name) -{ - double result = -1; - - CV_FUNCNAME( "cvSetCloseCallback" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = window->flags & CV_WINDOW_AUTOSIZE; - - __END__; - - return result; -} - -double cvGetRatioWindow_W32(const char* name) -{ - double result = -1; - - CV_FUNCNAME( "cvGetRatioWindow_W32" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = static_cast(window->width) / window->height; - - __END__; - - return result; -} - -double cvGetOpenGlProp_W32(const char* name) -{ - double result = -1; - -#ifdef HAVE_OPENGL - CV_FUNCNAME( "cvGetOpenGlProp_W32" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; // keep silence here - - result = window->useGl; - - __END__; -#endif - (void)name; - - return result; -} - - -// OpenGL support - -#ifdef HAVE_OPENGL - -namespace -{ - void createGlContext(HWND hWnd, HDC& hGLDC, HGLRC& hGLRC, bool& useGl) - { - CV_FUNCNAME( "createGlContext" ); - - __BEGIN__; - - useGl = false; - - int PixelFormat; - - static PIXELFORMATDESCRIPTOR pfd = - { - sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor - 1, // Version Number - PFD_DRAW_TO_WINDOW | // Format Must Support Window - PFD_SUPPORT_OPENGL | // Format Must Support OpenGL - PFD_DOUBLEBUFFER, // Must Support Double Buffering - PFD_TYPE_RGBA, // Request An RGBA Format - 32, // Select Our Color Depth - 0, 0, 0, 0, 0, 0, // Color Bits Ignored - 0, // No Alpha Buffer - 0, // Shift Bit Ignored - 0, // No Accumulation Buffer - 0, 0, 0, 0, // Accumulation Bits Ignored - 32, // 32 Bit Z-Buffer (Depth Buffer) - 0, // No Stencil Buffer - 0, // No Auxiliary Buffer - PFD_MAIN_PLANE, // Main Drawing Layer - 0, // Reserved - 0, 0, 0 // Layer Masks Ignored - }; - - hGLDC = GetDC(hWnd); - if (!hGLDC) - CV_ERROR( CV_OpenGlApiCallError, "Can't Create A GL Device Context" ); - - PixelFormat = ChoosePixelFormat(hGLDC, &pfd); - if (!PixelFormat) - CV_ERROR( CV_OpenGlApiCallError, "Can't Find A Suitable PixelFormat" ); - - if (!SetPixelFormat(hGLDC, PixelFormat, &pfd)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Set The PixelFormat" ); - - hGLRC = wglCreateContext(hGLDC); - if (!hGLRC) - CV_ERROR( CV_OpenGlApiCallError, "Can't Create A GL Rendering Context" ); - - if (!wglMakeCurrent(hGLDC, hGLRC)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - useGl = true; - - __END__; - } - - void releaseGlContext(CvWindow* window) - { - //CV_FUNCNAME( "releaseGlContext" ); - - __BEGIN__; - - if (window->hGLRC) - { - wglDeleteContext(window->hGLRC); - window->hGLRC = NULL; - } - - if (window->dc) - { - ReleaseDC(window->hwnd, window->dc); - window->dc = NULL; - } - - window->useGl = false; - - __END__; - } - - void drawGl(CvWindow* window) - { - CV_FUNCNAME( "drawGl" ); - - __BEGIN__; - - if (!wglMakeCurrent(window->dc, window->hGLRC)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (window->glDrawCallback) - window->glDrawCallback(window->glDrawData); - - if (!SwapBuffers(window->dc)) - CV_ERROR( CV_OpenGlApiCallError, "Can't swap OpenGL buffers" ); - - __END__; - } - - void resizeGl(CvWindow* window) - { - CV_FUNCNAME( "resizeGl" ); - - __BEGIN__; - - if (!wglMakeCurrent(window->dc, window->hGLRC)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - glViewport(0, 0, window->width, window->height); - - __END__; - } -} - -#endif // HAVE_OPENGL - - -CV_IMPL int cvNamedWindow( const char* name, int flags ) -{ - int result = 0; - CV_FUNCNAME( "cvNamedWindow" ); - - __BEGIN__; - - HWND hWnd, mainhWnd; - CvWindow* window; - DWORD defStyle = WS_VISIBLE | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU; - int len; - CvRect rect; -#ifdef HAVE_OPENGL - bool useGl; - HDC hGLDC; - HGLRC hGLRC; -#endif - - cvInitSystem(0,0); - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - // Check the name in the storage - window = icvFindWindowByName( name ); - if (window != 0) - { - result = 1; - EXIT; - } - - if( !(flags & CV_WINDOW_AUTOSIZE))//YV add border in order to resize the window - defStyle |= WS_SIZEBOX; - - icvLoadWindowPos( name, rect ); - - mainhWnd = CreateWindow( "Main HighGUI class", name, defStyle | WS_OVERLAPPED, - rect.x, rect.y, rect.width, rect.height, 0, 0, hg_hinstance, 0 ); - if( !mainhWnd ) - CV_ERROR( CV_StsError, "Frame window can not be created" ); - - ShowWindow(mainhWnd, SW_SHOW); - - //YV- remove one border by changing the style - hWnd = CreateWindow("HighGUI class", "", (defStyle & ~WS_SIZEBOX) | WS_CHILD, CW_USEDEFAULT, 0, rect.width, rect.height, mainhWnd, 0, hg_hinstance, 0); - if( !hWnd ) - CV_ERROR( CV_StsError, "Frame window can not be created" ); - -#ifndef HAVE_OPENGL - if (flags & CV_WINDOW_OPENGL) - CV_ERROR( CV_OpenGlNotSupported, "Library was built without OpenGL support" ); -#else - useGl = false; - hGLDC = 0; - hGLRC = 0; - - if (flags & CV_WINDOW_OPENGL) - createGlContext(hWnd, hGLDC, hGLRC, useGl); -#endif - - ShowWindow(hWnd, SW_SHOW); - - len = (int)strlen(name); - CV_CALL( window = (CvWindow*)cvAlloc(sizeof(CvWindow) + len + 1)); - - window->signature = CV_WINDOW_MAGIC_VAL; - window->hwnd = hWnd; - window->frame = mainhWnd; - window->name = (char*)(window + 1); - memcpy( window->name, name, len + 1 ); - window->flags = flags; - window->image = 0; - -#ifndef HAVE_OPENGL - window->dc = CreateCompatibleDC(0); -#else - if (!useGl) - { - window->dc = CreateCompatibleDC(0); - window->hGLRC = 0; - window->useGl = false; - } - else - { - window->dc = hGLDC; - window->hGLRC = hGLRC; - window->useGl = true; - } - - window->glDrawCallback = 0; - window->glDrawData = 0; -#endif - - window->last_key = 0; - window->status = CV_WINDOW_NORMAL;//YV - - window->on_mouse = 0; - window->on_mouse_param = 0; - - memset( &window->toolbar, 0, sizeof(window->toolbar)); - - window->next = hg_windows; - window->prev = 0; - if( hg_windows ) - hg_windows->prev = window; - hg_windows = window; - icvSetWindowLongPtr( hWnd, CV_USERDATA, window ); - icvSetWindowLongPtr( mainhWnd, CV_USERDATA, window ); - - // Recalculate window pos - icvUpdateWindowPos( window ); - - result = 1; - __END__; - - return result; -} - -#ifdef HAVE_OPENGL - -CV_IMPL void cvSetOpenGlContext(const char* name) -{ - CV_FUNCNAME( "cvSetOpenGlContext" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - if (!window->useGl) - CV_ERROR( CV_OpenGlNotSupported, "Window doesn't support OpenGL" ); - - if (!wglMakeCurrent(window->dc, window->hGLRC)) - CV_ERROR( CV_OpenGlApiCallError, "Can't Activate The GL Rendering Context" ); - - __END__; -} - -CV_IMPL void cvUpdateWindow(const char* name) -{ - CV_FUNCNAME( "cvUpdateWindow" ); - - __BEGIN__; - - CvWindow* window; - - if (!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if (!window) - EXIT; - - InvalidateRect(window->hwnd, 0, 0); - - __END__; -} - -CV_IMPL void cvSetOpenGlDrawCallback(const char* name, CvOpenGlDrawCallback callback, void* userdata) -{ - CV_FUNCNAME( "cvCreateOpenGLCallback" ); - - __BEGIN__; - - CvWindow* window; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - EXIT; - - if (!window->useGl) - CV_ERROR( CV_OpenGlNotSupported, "Window was created without OpenGL context" ); - - window->glDrawCallback = callback; - window->glDrawData = userdata; - - __END__; -} - -#endif // HAVE_OPENGL - -static void icvRemoveWindow( CvWindow* window ) -{ - CvTrackbar* trackbar = NULL; - RECT wrect={0,0,0,0}; - -#ifdef HAVE_OPENGL - if (window->useGl) - releaseGlContext(window); -#endif - - if( window->frame ) - GetWindowRect( window->frame, &wrect ); - if( window->name ) - icvSaveWindowPos( window->name, cvRect(wrect.left, wrect.top, - wrect.right-wrect.left, wrect.bottom-wrect.top) ); - - if( window->hwnd ) - icvSetWindowLongPtr( window->hwnd, CV_USERDATA, 0 ); - if( window->frame ) - icvSetWindowLongPtr( window->frame, CV_USERDATA, 0 ); - - if( window->toolbar.toolbar ) - icvSetWindowLongPtr(window->toolbar.toolbar, CV_USERDATA, 0); - - if( window->prev ) - window->prev->next = window->next; - else - hg_windows = window->next; - - if( window->next ) - window->next->prev = window->prev; - - window->prev = window->next = 0; - - if( window->dc && window->image ) - DeleteObject(SelectObject(window->dc,window->image)); - - if( window->dc ) - DeleteDC(window->dc); - - for( trackbar = window->toolbar.first; trackbar != 0; ) - { - CvTrackbar* next = trackbar->next; - if( trackbar->hwnd ) - { - icvSetWindowLongPtr( trackbar->hwnd, CV_USERDATA, 0 ); - cvFree( &trackbar ); - } - trackbar = next; - } - - cvFree( &window ); -} - - -CV_IMPL void cvDestroyWindow( const char* name ) -{ - CV_FUNCNAME( "cvDestroyWindow" ); - - __BEGIN__; - - CvWindow* window; - HWND mainhWnd; - - if(!name) - CV_ERROR( CV_StsNullPtr, "NULL name string" ); - - window = icvFindWindowByName( name ); - if( !window ) - EXIT; - - mainhWnd = window->frame; - - SendMessage(window->hwnd, WM_CLOSE, 0, 0); - SendMessage( mainhWnd, WM_CLOSE, 0, 0); - // Do NOT call _remove_window -- CvWindow list will be updated automatically ... - - __END__; -} - - -static void icvScreenToClient( HWND hwnd, RECT* rect ) -{ - POINT p; - p.x = rect->left; - p.y = rect->top; - ScreenToClient(hwnd, &p); - OffsetRect( rect, p.x - rect->left, p.y - rect->top ); -} - - -/* Calculatess the window coordinates relative to the upper left corner of the mainhWnd window */ -static RECT icvCalcWindowRect( CvWindow* window ) -{ - const int gutter = 1; - RECT crect, trect, rect; - - assert(window); - - GetClientRect(window->frame, &crect); - if(window->toolbar.toolbar) - { - GetWindowRect(window->toolbar.toolbar, &trect); - icvScreenToClient(window->frame, &trect); - SubtractRect( &rect, &crect, &trect); - } - else - rect = crect; - - rect.top += gutter; - rect.left += gutter; - rect.bottom -= gutter; - rect.right -= gutter; - - return rect; -} - -// returns TRUE if there is a problem such as ERROR_IO_PENDING. -static bool icvGetBitmapData( CvWindow* window, SIZE* size, int* channels, void** data ) -{ - BITMAP bmp; - GdiFlush(); - HGDIOBJ h = GetCurrentObject( window->dc, OBJ_BITMAP ); - if( size ) - size->cx = size->cy = 0; - if( data ) - *data = 0; - - if (h == NULL) - return true; - if (GetObject(h, sizeof(bmp), &bmp) == 0) - return true; - - if( size ) - { - size->cx = abs(bmp.bmWidth); - size->cy = abs(bmp.bmHeight); - } - - if( channels ) - *channels = bmp.bmBitsPixel/8; - - if( data ) - *data = bmp.bmBits; - - return false; -} - - -static void icvUpdateWindowPos( CvWindow* window ) -{ - RECT rect; - assert(window); - - if( (window->flags & CV_WINDOW_AUTOSIZE) && window->image ) - { - int i; - SIZE size = {0,0}; - icvGetBitmapData( window, &size, 0, 0 ); - - // Repeat two times because after the first resizing of the mainhWnd window - // toolbar may resize too - for(i = 0; i < (window->toolbar.toolbar ? 2 : 1); i++) - { - RECT rmw, rw = icvCalcWindowRect(window ); - MoveWindow(window->hwnd, rw.left, rw.top, - rw.right - rw.left + 1, rw.bottom - rw.top + 1, FALSE); - GetClientRect(window->hwnd, &rw); - GetWindowRect(window->frame, &rmw); - // Resize the mainhWnd window in order to make the bitmap fit into the child window - MoveWindow(window->frame, rmw.left, rmw.top, - rmw.right - rmw.left + size.cx - rw.right + rw.left, - rmw.bottom - rmw.top + size.cy - rw.bottom + rw.top, TRUE ); - } - } - - rect = icvCalcWindowRect(window); - MoveWindow(window->hwnd, rect.left, rect.top, - rect.right - rect.left + 1, - rect.bottom - rect.top + 1, TRUE ); -} - -CV_IMPL void -cvShowImage( const char* name, const CvArr* arr ) -{ - CV_FUNCNAME( "cvShowImage" ); - - __BEGIN__; - - CvWindow* window; - SIZE size = { 0, 0 }; - int channels = 0; - void* dst_ptr = 0; - const int channels0 = 3; - int origin = 0; - CvMat stub, dst, *image; - bool changed_size = false; // philipg - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - { - cvNamedWindow(name, CV_WINDOW_AUTOSIZE); - window = icvFindWindowByName(name); - } - - if( !window || !arr ) - EXIT; // keep silence here. - - if( CV_IS_IMAGE_HDR( arr )) - origin = ((IplImage*)arr)->origin; - - CV_CALL( image = cvGetMat( arr, &stub )); - -#ifdef HAVE_OPENGL - if (window->useGl) - { - cv::Mat im(image); - cv::imshow(name, im); - return; - } -#endif - - if (window->image) - // if there is something wrong with these system calls, we cannot display image... - if (icvGetBitmapData( window, &size, &channels, &dst_ptr )) - return; - - if( size.cx != image->width || size.cy != image->height || channels != channels0 ) - { - changed_size = true; - - uchar buffer[sizeof(BITMAPINFO) + 255*sizeof(RGBQUAD)]; - BITMAPINFO* binfo = (BITMAPINFO*)buffer; - - DeleteObject( SelectObject( window->dc, window->image )); - window->image = 0; - - size.cx = image->width; - size.cy = image->height; - channels = channels0; - - FillBitmapInfo( binfo, size.cx, size.cy, channels*8, 1 ); - - window->image = SelectObject( window->dc, CreateDIBSection(window->dc, binfo, - DIB_RGB_COLORS, &dst_ptr, 0, 0)); - } - - cvInitMatHeader( &dst, size.cy, size.cx, CV_8UC3, - dst_ptr, (size.cx * channels + 3) & -4 ); - cvConvertImage( image, &dst, origin == 0 ? CV_CVTIMG_FLIP : 0 ); - - // ony resize window if needed - if (changed_size) - icvUpdateWindowPos(window); - InvalidateRect(window->hwnd, 0, 0); - // philipg: this is not needed and just slows things down -// UpdateWindow(window->hwnd); - - __END__; -} - -#if 0 -CV_IMPL void -cvShowImageHWND(HWND w_hWnd, const CvArr* arr) -{ - CV_FUNCNAME( "cvShowImageHWND" ); - - __BEGIN__; - - SIZE size = { 0, 0 }; - int channels = 0; - void* dst_ptr = 0; - const int channels0 = 3; - int origin = 0; - CvMat stub, dst, *image; - bool changed_size = false; - BITMAPINFO tempbinfo; - HDC hdc = NULL; - - if( !arr ) - EXIT; - if( !w_hWnd ) - EXIT; - - hdc = GetDC(w_hWnd); - - if( CV_IS_IMAGE_HDR( arr ) ) - origin = ((IplImage*)arr)->origin; - - CV_CALL( image = cvGetMat( arr, &stub ) ); - - if ( hdc ) - { - //GetBitmapData - BITMAP bmp; - GdiFlush(); - HGDIOBJ h = GetCurrentObject( hdc, OBJ_BITMAP ); - - if (h == NULL) - EXIT; - if (GetObject(h, sizeof(bmp), &bmp) == 0) //GetObject(): returns size of object, 0 if error - EXIT; - - channels = bmp.bmBitsPixel/8; - dst_ptr = bmp.bmBits; - } - - if( size.cx != image->width || size.cy != image->height || channels != channels0 ) - { - changed_size = true; - - uchar buffer[sizeof(BITMAPINFO) + 255*sizeof(RGBQUAD)]; - BITMAPINFO* binfo = (BITMAPINFO*)buffer; - - BOOL bDeleteObj = DeleteObject(GetCurrentObject(hdc, OBJ_BITMAP)); - CV_Assert( FALSE != bDeleteObj ); - - size.cx = image->width; - size.cy = image->height; - channels = channels0; - - FillBitmapInfo( binfo, size.cx, size.cy, channels*8, 1 ); - - SelectObject( hdc, CreateDIBSection( hdc, binfo, DIB_RGB_COLORS, &dst_ptr, 0, 0)); - } - - cvInitMatHeader( &dst, size.cy, size.cx, CV_8UC3, dst_ptr, (size.cx * channels + 3) & -4 ); - cvConvertImage( image, &dst, origin == 0 ? CV_CVTIMG_FLIP : 0 ); - - // Image stretching to fit the window - RECT rect; - GetClientRect(w_hWnd, &rect); - StretchDIBits( hdc, 0, 0, rect.right, rect.bottom, 0, 0, image->width, image->height, dst_ptr, &tempbinfo, DIB_RGB_COLORS, SRCCOPY ); - - // ony resize window if needed - InvalidateRect(w_hWnd, 0, 0); - - __END__; -} -#endif - -CV_IMPL void cvResizeWindow(const char* name, int width, int height ) -{ - CV_FUNCNAME( "cvResizeWindow" ); - - __BEGIN__; - - int i; - CvWindow* window; - RECT rmw, rw, rect; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - // Repeat two times because after the first resizing of the mainhWnd window - // toolbar may resize too - for(i = 0; i < (window->toolbar.toolbar ? 2 : 1); i++) - { - rw = icvCalcWindowRect(window); - MoveWindow(window->hwnd, rw.left, rw.top, - rw.right - rw.left + 1, rw.bottom - rw.top + 1, FALSE); - GetClientRect(window->hwnd, &rw); - GetWindowRect(window->frame, &rmw); - // Resize the mainhWnd window in order to make the bitmap fit into the child window - MoveWindow(window->frame, rmw.left, rmw.top, - rmw.right - rmw.left + width - rw.right + rw.left, - rmw.bottom - rmw.top + height - rw.bottom + rw.top, TRUE); - } - - rect = icvCalcWindowRect(window); - MoveWindow(window->hwnd, rect.left, rect.top, - rect.right - rect.left + 1, rect.bottom - rect.top + 1, TRUE); - - __END__; -} - - -CV_IMPL void cvMoveWindow( const char* name, int x, int y ) -{ - CV_FUNCNAME( "cvMoveWindow" ); - - __BEGIN__; - - CvWindow* window; - RECT rect; - - if( !name ) - CV_ERROR( CV_StsNullPtr, "NULL name" ); - - window = icvFindWindowByName(name); - if(!window) - EXIT; - - GetWindowRect( window->frame, &rect ); - MoveWindow( window->frame, x, y, rect.right - rect.left, rect.bottom - rect.top, TRUE); - - __END__; -} - - -static LRESULT CALLBACK -MainWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - CvWindow* window = icvWindowByHWND( hwnd ); - if( !window ) - return DefWindowProc(hwnd, uMsg, wParam, lParam); - - switch(uMsg) - { - case WM_DESTROY: - - icvRemoveWindow(window); - // Do nothing!!! - //PostQuitMessage(0); - break; - - case WM_GETMINMAXINFO: - if( !(window->flags & CV_WINDOW_AUTOSIZE) ) - { - MINMAXINFO* minmax = (MINMAXINFO*)lParam; - RECT rect; - LRESULT retval = DefWindowProc(hwnd, uMsg, wParam, lParam); - - minmax->ptMinTrackSize.y = 100; - minmax->ptMinTrackSize.x = 100; - - if( window->toolbar.first ) - { - GetWindowRect( window->toolbar.first->hwnd, &rect ); - minmax->ptMinTrackSize.y += window->toolbar.rows*(rect.bottom - rect.top); - minmax->ptMinTrackSize.x = MAX(rect.right - rect.left + HG_BUDDY_WIDTH, HG_BUDDY_WIDTH*2); - } - return retval; - } - break; - - case WM_WINDOWPOSCHANGED: - { - WINDOWPOS* pos = (WINDOWPOS*)lParam; - - // Update the toolbar pos/size - if(window->toolbar.toolbar) - { - RECT rect; - GetWindowRect(window->toolbar.toolbar, &rect); - MoveWindow(window->toolbar.toolbar, 0, 0, pos->cx, rect.bottom - rect.top, TRUE); - } - - if(!(window->flags & CV_WINDOW_AUTOSIZE)) - icvUpdateWindowPos(window); - - break; - } - - case WM_WINDOWPOSCHANGING: - { - // Snap window to screen edges with multi-monitor support. // Adi Shavit - LPWINDOWPOS pos = (LPWINDOWPOS)lParam; - - RECT rect; - GetWindowRect(window->frame, &rect); - - HMONITOR hMonitor; - hMonitor = MonitorFromRect(&rect, MONITOR_DEFAULTTONEAREST); - - MONITORINFO mi; - mi.cbSize = sizeof(mi); - GetMonitorInfo(hMonitor, &mi); - - const int SNAP_DISTANCE = 15; - - if (abs(pos->x - mi.rcMonitor.left) <= SNAP_DISTANCE) - pos->x = mi.rcMonitor.left; // snap to left edge - else - if (abs(pos->x + pos->cx - mi.rcMonitor.right) <= SNAP_DISTANCE) - pos->x = mi.rcMonitor.right - pos->cx; // snap to right edge - - if (abs(pos->y - mi.rcMonitor.top) <= SNAP_DISTANCE) - pos->y = mi.rcMonitor.top; // snap to top edge - else - if (abs(pos->y + pos->cy - mi.rcMonitor.bottom) <= SNAP_DISTANCE) - pos->y = mi.rcMonitor.bottom - pos->cy; // snap to bottom edge - } - - case WM_ACTIVATE: - if(LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE) - SetFocus(window->hwnd); - break; - - case WM_ERASEBKGND: - { - RECT cr, tr, wrc; - HRGN rgn, rgn1, rgn2; - int ret; - HDC hdc = (HDC)wParam; - GetWindowRect(window->hwnd, &cr); - icvScreenToClient(window->frame, &cr); - if(window->toolbar.toolbar) - { - GetWindowRect(window->toolbar.toolbar, &tr); - icvScreenToClient(window->frame, &tr); - } - else - tr.left = tr.top = tr.right = tr.bottom = 0; - - GetClientRect(window->frame, &wrc); - - rgn = CreateRectRgn(0, 0, wrc.right, wrc.bottom); - rgn1 = CreateRectRgn(cr.left, cr.top, cr.right, cr.bottom); - rgn2 = CreateRectRgn(tr.left, tr.top, tr.right, tr.bottom); - ret = CombineRgn(rgn, rgn, rgn1, RGN_DIFF); - ret = CombineRgn(rgn, rgn, rgn2, RGN_DIFF); - - if(ret != NULLREGION && ret != ERROR) - FillRgn(hdc, rgn, (HBRUSH)icvGetClassLongPtr(hwnd, CV_HBRBACKGROUND)); - - DeleteObject(rgn); - DeleteObject(rgn1); - DeleteObject(rgn2); - } - return 1; - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - - -static LRESULT CALLBACK HighGUIProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - CvWindow* window = icvWindowByHWND(hwnd); - if( !window ) - // This window is not mentioned in HighGUI storage - // Actually, this should be error except for the case of calls to CreateWindow - return DefWindowProc(hwnd, uMsg, wParam, lParam); - - // Process the message - switch(uMsg) - { - case WM_WINDOWPOSCHANGING: - { - LPWINDOWPOS pos = (LPWINDOWPOS)lParam; - RECT rect = icvCalcWindowRect(window); - pos->x = rect.left; - pos->y = rect.top; - pos->cx = rect.right - rect.left + 1; - pos->cy = rect.bottom - rect.top + 1; - } - break; - - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_LBUTTONDBLCLK: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDBLCLK: - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_MOUSEMOVE: - if( window->on_mouse ) - { - POINT pt; - RECT rect; - SIZE size = {0,0}; - - int flags = (wParam & MK_LBUTTON ? CV_EVENT_FLAG_LBUTTON : 0)| - (wParam & MK_RBUTTON ? CV_EVENT_FLAG_RBUTTON : 0)| - (wParam & MK_MBUTTON ? CV_EVENT_FLAG_MBUTTON : 0)| - (wParam & MK_CONTROL ? CV_EVENT_FLAG_CTRLKEY : 0)| - (wParam & MK_SHIFT ? CV_EVENT_FLAG_SHIFTKEY : 0)| - (GetKeyState(VK_MENU) < 0 ? CV_EVENT_FLAG_ALTKEY : 0); - int event = uMsg == WM_LBUTTONDOWN ? CV_EVENT_LBUTTONDOWN : - uMsg == WM_RBUTTONDOWN ? CV_EVENT_RBUTTONDOWN : - uMsg == WM_MBUTTONDOWN ? CV_EVENT_MBUTTONDOWN : - uMsg == WM_LBUTTONUP ? CV_EVENT_LBUTTONUP : - uMsg == WM_RBUTTONUP ? CV_EVENT_RBUTTONUP : - uMsg == WM_MBUTTONUP ? CV_EVENT_MBUTTONUP : - uMsg == WM_LBUTTONDBLCLK ? CV_EVENT_LBUTTONDBLCLK : - uMsg == WM_RBUTTONDBLCLK ? CV_EVENT_RBUTTONDBLCLK : - uMsg == WM_MBUTTONDBLCLK ? CV_EVENT_MBUTTONDBLCLK : - CV_EVENT_MOUSEMOVE; - if( uMsg == WM_LBUTTONDOWN || uMsg == WM_RBUTTONDOWN || uMsg == WM_MBUTTONDOWN ) - SetCapture( hwnd ); - if( uMsg == WM_LBUTTONUP || uMsg == WM_RBUTTONUP || uMsg == WM_MBUTTONUP ) - ReleaseCapture(); - - pt.x = GET_X_LPARAM( lParam ); - pt.y = GET_Y_LPARAM( lParam ); - - GetClientRect( window->hwnd, &rect ); - icvGetBitmapData( window, &size, 0, 0 ); - - window->on_mouse( event, pt.x*size.cx/MAX(rect.right - rect.left,1), - pt.y*size.cy/MAX(rect.bottom - rect.top,1), flags, - window->on_mouse_param ); - } - break; - - case WM_PAINT: - if(window->image != 0) - { - int nchannels = 3; - SIZE size = {0,0}; - PAINTSTRUCT paint; - HDC hdc; - RGBQUAD table[256]; - - // Determine the bitmap's dimensions - icvGetBitmapData( window, &size, &nchannels, 0 ); - - hdc = BeginPaint(hwnd, &paint); - SetStretchBltMode(hdc, COLORONCOLOR); - - if( nchannels == 1 ) - { - int i; - for(i = 0; i < 256; i++) - { - table[i].rgbBlue = (unsigned char)i; - table[i].rgbGreen = (unsigned char)i; - table[i].rgbRed = (unsigned char)i; - } - SetDIBColorTable(window->dc, 0, 255, table); - } - - if(window->flags & CV_WINDOW_AUTOSIZE) - { - BitBlt( hdc, 0, 0, size.cx, size.cy, window->dc, 0, 0, SRCCOPY ); - } - else - { - RECT rect; - GetClientRect(window->hwnd, &rect); - StretchBlt( hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, - window->dc, 0, 0, size.cx, size.cy, SRCCOPY ); - } - //DeleteDC(hdc); - EndPaint(hwnd, &paint); - } -#ifdef HAVE_OPENGL - else if(window->useGl) - { - drawGl(window); - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } -#endif - else - { - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } - return 0; - - case WM_ERASEBKGND: - if(window->image) - return 0; - break; - - case WM_DESTROY: - - icvRemoveWindow(window); - // Do nothing!!! - //PostQuitMessage(0); - break; - - case WM_SETCURSOR: - SetCursor((HCURSOR)icvGetClassLongPtr(hwnd, CV_HCURSOR)); - return 0; - - case WM_KEYDOWN: - window->last_key = (int)wParam; - return 0; - - case WM_SIZE: - window->width = LOWORD(lParam); - window->height = HIWORD(lParam); - -#ifdef HAVE_OPENGL - if (window->useGl) - resizeGl(window); -#endif - } - - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - - -static LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - LRESULT ret; - - if( hg_on_preprocess ) - { - int was_processed = 0; - int rethg = hg_on_preprocess(hwnd, uMsg, wParam, lParam, &was_processed); - if( was_processed ) - return rethg; - } - ret = HighGUIProc(hwnd, uMsg, wParam, lParam); - - if(hg_on_postprocess) - { - int was_processed = 0; - int rethg = hg_on_postprocess(hwnd, uMsg, wParam, lParam, &was_processed); - if( was_processed ) - return rethg; - } - - return ret; -} - - -static void icvUpdateTrackbar( CvTrackbar* trackbar, int pos ) -{ - const int max_name_len = 10; - const char* suffix = ""; - char pos_text[32]; - int name_len; - - if( trackbar->data ) - *trackbar->data = pos; - - if( trackbar->pos != pos ) - { - trackbar->pos = pos; - if( trackbar->notify2 ) - trackbar->notify2(pos, trackbar->userdata); - if( trackbar->notify ) - trackbar->notify(pos); - - name_len = (int)strlen(trackbar->name); - - if( name_len > max_name_len ) - { - int start_len = max_name_len*2/3; - int end_len = max_name_len - start_len - 2; - memcpy( pos_text, trackbar->name, start_len ); - memcpy( pos_text + start_len, "...", 3 ); - memcpy( pos_text + start_len + 3, trackbar->name + name_len - end_len, end_len + 1 ); - } - else - { - memcpy( pos_text, trackbar->name, name_len + 1); - } - - sprintf( pos_text + strlen(pos_text), "%s: %d\n", suffix, pos ); - SetWindowText( trackbar->buddy, pos_text ); - } -} - - -static LRESULT CALLBACK HGToolbarProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - CvWindow* window = icvWindowByHWND( hwnd ); - if(!window) - return DefWindowProc(hwnd, uMsg, wParam, lParam); - - // Control messages processing - switch(uMsg) - { - // Slider processing - case WM_HSCROLL: - { - HWND slider = (HWND)lParam; - int pos = (int)SendMessage(slider, TBM_GETPOS, 0, 0); - CvTrackbar* trackbar = icvTrackbarByHWND( slider ); - - if( trackbar ) - { - if( trackbar->pos != pos ) - icvUpdateTrackbar( trackbar, pos ); - } - - SetFocus( window->hwnd ); - return 0; - } - - case WM_NCCALCSIZE: - { - LRESULT ret = CallWindowProc(window->toolbar.toolBarProc, hwnd, uMsg, wParam, lParam); - int rows = (int)SendMessage(hwnd, TB_GETROWS, 0, 0); - - if(window->toolbar.rows != rows) - { - SendMessage(window->toolbar.toolbar, TB_BUTTONCOUNT, 0, 0); - CvTrackbar* trackbar = window->toolbar.first; - - for( ; trackbar != 0; trackbar = trackbar->next ) - { - RECT rect; - SendMessage(window->toolbar.toolbar, TB_GETITEMRECT, - (WPARAM)trackbar->id, (LPARAM)&rect); - MoveWindow(trackbar->hwnd, rect.left + HG_BUDDY_WIDTH, rect.top, - rect.right - rect.left - HG_BUDDY_WIDTH, - rect.bottom - rect.top, FALSE); - MoveWindow(trackbar->buddy, rect.left, rect.top, - HG_BUDDY_WIDTH, rect.bottom - rect.top, FALSE); - } - window->toolbar.rows = rows; - } - return ret; - } - } - - return CallWindowProc(window->toolbar.toolBarProc, hwnd, uMsg, wParam, lParam); -} - - -CV_IMPL void -cvDestroyAllWindows(void) -{ - CvWindow* window = hg_windows; - - while( window ) - { - HWND mainhWnd = window->frame; - HWND hwnd = window->hwnd; - window = window->next; - - SendMessage( hwnd, WM_CLOSE, 0, 0 ); - SendMessage( mainhWnd, WM_CLOSE, 0, 0 ); - } -} - - -CV_IMPL int -cvWaitKey( int delay ) -{ - int time0 = GetTickCount(); - - for(;;) - { - CvWindow* window; - MSG message; - int is_processed = 0; - - if( (delay > 0 && abs((int)(GetTickCount() - time0)) >= delay) || hg_windows == 0 ) - return -1; - - if( delay <= 0 ) - GetMessage(&message, 0, 0, 0); - else if( PeekMessage(&message, 0, 0, 0, PM_REMOVE) == FALSE ) - { - Sleep(1); - continue; - } - - for( window = hg_windows; window != 0 && is_processed == 0; window = window->next ) - { - if( window->hwnd == message.hwnd || window->frame == message.hwnd ) - { - is_processed = 1; - switch(message.message) - { - case WM_DESTROY: - case WM_CHAR: - DispatchMessage(&message); - return (int)message.wParam; - - case WM_SYSKEYDOWN: - if( message.wParam == VK_F10 ) - { - is_processed = 1; - return (int)(message.wParam << 16); - } - break; - - case WM_KEYDOWN: - TranslateMessage(&message); - if( (message.wParam >= VK_F1 && message.wParam <= VK_F24) || - message.wParam == VK_HOME || message.wParam == VK_END || - message.wParam == VK_UP || message.wParam == VK_DOWN || - message.wParam == VK_LEFT || message.wParam == VK_RIGHT || - message.wParam == VK_INSERT || message.wParam == VK_DELETE || - message.wParam == VK_PRIOR || message.wParam == VK_NEXT ) - { - DispatchMessage(&message); - is_processed = 1; - return (int)(message.wParam << 16); - } - default: - DispatchMessage(&message); - is_processed = 1; - break; - } - } - } - - if( !is_processed ) - { - TranslateMessage(&message); - DispatchMessage(&message); - } - } -} - - -static CvTrackbar* -icvFindTrackbarByName( const CvWindow* window, const char* name ) -{ - CvTrackbar* trackbar = window->toolbar.first; - - for( ; trackbar != 0 && strcmp( trackbar->name, name ) != 0; trackbar = trackbar->next ) - ; - - return trackbar; -} - - -typedef struct -{ - UINT cbSize; - DWORD dwMask; - int idCommand; - int iImage; - BYTE fsState; - BYTE fsStyle; - WORD cx; - DWORD lParam; - LPSTR pszText; - int cchText; -} -ButtonInfo; - - -static int -icvCreateTrackbar( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback on_notify, - CvTrackbarCallback2 on_notify2, void* userdata ) -{ - int result = 0; - - CV_FUNCNAME( "icvCreateTrackbar" ); - - __BEGIN__; - - char slider_name[32]; - CvWindow* window = 0; - CvTrackbar* trackbar = 0; - int pos = 0; - - if( !window_name || !trackbar_name ) - CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" ); - - if( count <= 0 ) - CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" ); - - window = icvFindWindowByName(window_name); - if( !window ) - EXIT; - - trackbar = icvFindTrackbarByName(window,trackbar_name); - if( !trackbar ) - { - TBBUTTON tbs; - ButtonInfo tbis; - RECT rect; - int bcount; - int len = (int)strlen( trackbar_name ); - - // create toolbar if it is not created yet - if( !window->toolbar.toolbar ) - { - const int default_height = 30; - - window->toolbar.toolbar = CreateToolbarEx( - window->frame, WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE, - 1, 0, 0, 0, 0, 0, 16, 20, 16, 16, sizeof(TBBUTTON)); - GetClientRect(window->frame, &rect); - MoveWindow( window->toolbar.toolbar, 0, 0, - rect.right - rect.left, default_height, TRUE); - SendMessage(window->toolbar.toolbar, TB_AUTOSIZE, 0, 0); - ShowWindow(window->toolbar.toolbar, SW_SHOW); - - window->toolbar.first = 0; - window->toolbar.pos = 0; - window->toolbar.rows = 0; - window->toolbar.toolBarProc = - (WNDPROC)icvGetWindowLongPtr(window->toolbar.toolbar, CV_WNDPROC); - - icvUpdateWindowPos(window); - - // Subclassing from toolbar - icvSetWindowLongPtr(window->toolbar.toolbar, CV_WNDPROC, HGToolbarProc); - icvSetWindowLongPtr(window->toolbar.toolbar, CV_USERDATA, window); - } - - /* Retrieve current buttons count */ - bcount = (int)SendMessage(window->toolbar.toolbar, TB_BUTTONCOUNT, 0, 0); - - if(bcount > 1) - { - /* If this is not the first button then we need to - separate it from the previous one */ - tbs.iBitmap = 0; - tbs.idCommand = bcount; // Set button id to it's number - tbs.iString = 0; - tbs.fsStyle = TBSTYLE_SEP; - tbs.fsState = TBSTATE_ENABLED; - SendMessage(window->toolbar.toolbar, TB_ADDBUTTONS, 1, (LPARAM)&tbs); - - // Retrieve current buttons count - bcount = (int)SendMessage(window->toolbar.toolbar, TB_BUTTONCOUNT, 0, 0); - } - - /* Add a button which we're going to cover with the slider */ - tbs.iBitmap = 0; - tbs.idCommand = bcount; // Set button id to it's number - tbs.fsState = TBSTATE_ENABLED; -#if 0/*!defined WIN64 && !defined EM64T*/ - tbs.fsStyle = 0; - tbs.iString = 0; -#else - -#ifndef TBSTYLE_AUTOSIZE -#define TBSTYLE_AUTOSIZE 0x0010 -#endif - -#ifndef TBSTYLE_GROUP -#define TBSTYLE_GROUP 0x0004 -#endif - //tbs.fsStyle = TBSTYLE_AUTOSIZE; - tbs.fsStyle = TBSTYLE_GROUP; - tbs.iString = (INT_PTR)trackbar_text; -#endif - SendMessage(window->toolbar.toolbar, TB_ADDBUTTONS, 1, (LPARAM)&tbs); - - /* Adjust button size to the slider */ - tbis.cbSize = sizeof(tbis); - tbis.dwMask = TBIF_SIZE; - - GetClientRect(window->hwnd, &rect); - tbis.cx = (unsigned short)(rect.right - rect.left); - - SendMessage(window->toolbar.toolbar, TB_SETBUTTONINFO, - (WPARAM)tbs.idCommand, (LPARAM)&tbis); - - /* Get button pos */ - SendMessage(window->toolbar.toolbar, TB_GETITEMRECT, - (WPARAM)tbs.idCommand, (LPARAM)&rect); - - /* Create a slider */ - trackbar = (CvTrackbar*)cvAlloc( sizeof(CvTrackbar) + len + 1 ); - trackbar->signature = CV_TRACKBAR_MAGIC_VAL; - trackbar->notify = 0; - trackbar->notify2 = 0; - trackbar->parent = window; - trackbar->pos = 0; - trackbar->data = 0; - trackbar->id = bcount; - trackbar->next = window->toolbar.first; - trackbar->name = (char*)(trackbar + 1); - memcpy( trackbar->name, trackbar_name, len + 1 ); - window->toolbar.first = trackbar; - - sprintf(slider_name, "Trackbar%p", val); - trackbar->hwnd = CreateWindowEx(0, TRACKBAR_CLASS, slider_name, - WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS | - TBS_FIXEDLENGTH | TBS_HORZ | TBS_BOTTOM, - rect.left + HG_BUDDY_WIDTH, rect.top, - rect.right - rect.left - HG_BUDDY_WIDTH, - rect.bottom - rect.top, window->toolbar.toolbar, - (HMENU)(size_t)bcount, hg_hinstance, 0); - - sprintf(slider_name,"Buddy%p", val); - trackbar->buddy = CreateWindowEx(0, "STATIC", slider_name, - WS_CHILD | SS_RIGHT, - rect.left, rect.top, - HG_BUDDY_WIDTH, rect.bottom - rect.top, - window->toolbar.toolbar, 0, hg_hinstance, 0); - - icvSetWindowLongPtr( trackbar->hwnd, CV_USERDATA, trackbar ); - - /* Minimize the number of rows */ - SendMessage( window->toolbar.toolbar, TB_SETROWS, - MAKEWPARAM(1, FALSE), (LPARAM)&rect ); - } - else - { - trackbar->data = 0; - trackbar->notify = 0; - trackbar->notify2 = 0; - } - - trackbar->maxval = count; - - /* Adjust slider parameters */ - SendMessage(trackbar->hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); - SendMessage(trackbar->hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)count); - SendMessage(trackbar->hwnd, TBM_SETTICFREQ, (WPARAM)1, (LPARAM)0 ); - if( val ) - pos = *val; - - SendMessage(trackbar->hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pos ); - SendMessage(window->toolbar.toolbar, TB_AUTOSIZE, 0, 0); - - trackbar->pos = -1; - icvUpdateTrackbar( trackbar, pos ); - ShowWindow( trackbar->buddy, SW_SHOW ); - ShowWindow( trackbar->hwnd, SW_SHOW ); - - trackbar->notify = on_notify; - trackbar->notify2 = on_notify2; - trackbar->userdata = userdata; - trackbar->data = val; - - /* Resize the window to reflect the toolbar resizing*/ - icvUpdateWindowPos(window); - - result = 1; - - __END__; - - return result; -} - -CV_IMPL int -cvCreateTrackbar( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback on_notify ) -{ - return icvCreateTrackbar( trackbar_name, window_name, val, count, - on_notify, 0, 0 ); -} - -CV_IMPL int -cvCreateTrackbar2( const char* trackbar_name, const char* window_name, - int* val, int count, CvTrackbarCallback2 on_notify2, - void* userdata ) -{ - return icvCreateTrackbar( trackbar_name, window_name, val, count, - 0, on_notify2, userdata ); -} - -CV_IMPL void -cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param ) -{ - CV_FUNCNAME( "cvSetMouseCallback" ); - - __BEGIN__; - - CvWindow* window = 0; - - if( !window_name ) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - window = icvFindWindowByName(window_name); - if( !window ) - EXIT; - - window->on_mouse = on_mouse; - window->on_mouse_param = param; - - __END__; -} - - -CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) -{ - int pos = -1; - - CV_FUNCNAME( "cvGetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - pos = trackbar->pos; - - __END__; - - return pos; -} - - -CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos ) -{ - CV_FUNCNAME( "cvSetTrackbarPos" ); - - __BEGIN__; - - CvWindow* window; - CvTrackbar* trackbar = 0; - - if( trackbar_name == 0 || window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - trackbar = icvFindTrackbarByName( window, trackbar_name ); - - if( trackbar ) - { - if( pos < 0 ) - pos = 0; - - if( pos > trackbar->maxval ) - pos = trackbar->maxval; - - SendMessage( trackbar->hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pos ); - icvUpdateTrackbar( trackbar, pos ); - } - - __END__; -} - - -CV_IMPL void* cvGetWindowHandle( const char* window_name ) -{ - void* hwnd = 0; - - CV_FUNCNAME( "cvGetWindowHandle" ); - - __BEGIN__; - - CvWindow* window; - - if( window_name == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL window name" ); - - window = icvFindWindowByName( window_name ); - if( window ) - hwnd = (void*)window->hwnd; - - __END__; - - return hwnd; -} - - -CV_IMPL const char* cvGetWindowName( void* window_handle ) -{ - const char* window_name = ""; - - CV_FUNCNAME( "cvGetWindowName" ); - - __BEGIN__; - - CvWindow* window; - - if( window_handle == 0 ) - CV_ERROR( CV_StsNullPtr, "NULL window" ); - - window = icvWindowByHWND( (HWND)window_handle ); - if( window ) - window_name = window->name; - - __END__; - - return window_name; -} - - -CV_IMPL void -cvSetPreprocessFuncWin32_(const void* callback) -{ - hg_on_preprocess = (CvWin32WindowCallback)callback; -} - -CV_IMPL void -cvSetPostprocessFuncWin32_(const void* callback) -{ - hg_on_postprocess = (CvWin32WindowCallback)callback; -} - -#endif //WIN32 diff --git a/modules/imgproc/CMakeLists.txt b/modules/imgproc/CMakeLists.txt deleted file mode 100644 index 652d6e1..0000000 --- a/modules/imgproc/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "Image Processing") -ocv_define_module(imgproc opencv_core) diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp deleted file mode 100644 index 2fcccfe..0000000 --- a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp +++ /dev/null @@ -1,1303 +0,0 @@ -/*! \file imgproc.hpp - \brief The Image Processing - */ - -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_IMGPROC_HPP__ -#define __OPENCV_IMGPROC_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/types_c.h" - -#ifdef __cplusplus - -/*! \namespace cv - Namespace where all the C++ OpenCV functionality resides - */ -namespace cv -{ - -//! various border interpolation methods -enum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT, - BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_WRAP=IPL_BORDER_WRAP, - BORDER_REFLECT_101=IPL_BORDER_REFLECT_101, BORDER_REFLECT101=BORDER_REFLECT_101, - BORDER_TRANSPARENT=IPL_BORDER_TRANSPARENT, - BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 }; - -//! 1D interpolation function: returns coordinate of the "donor" pixel for the specified location p. -CV_EXPORTS_W int borderInterpolate( int p, int len, int borderType ); - -/*! - The Base Class for 1D or Row-wise Filters - - This is the base class for linear or non-linear filters that process 1D data. - In particular, such filters are used for the "horizontal" filtering parts in separable filters. - - Several functions in OpenCV return Ptr for the specific types of filters, - and those pointers can be used directly or within cv::FilterEngine. -*/ -class CV_EXPORTS BaseRowFilter -{ -public: - //! the default constructor - BaseRowFilter(); - //! the destructor - virtual ~BaseRowFilter(); - //! the filtering operator. Must be overrided in the derived classes. The horizontal border interpolation is done outside of the class. - virtual void operator()(const uchar* src, uchar* dst, - int width, int cn) = 0; - int ksize, anchor; -}; - - -/*! - The Base Class for Column-wise Filters - - This is the base class for linear or non-linear filters that process columns of 2D arrays. - Such filters are used for the "vertical" filtering parts in separable filters. - - Several functions in OpenCV return Ptr for the specific types of filters, - and those pointers can be used directly or within cv::FilterEngine. - - Unlike cv::BaseRowFilter, cv::BaseColumnFilter may have some context information, - i.e. box filter keeps the sliding sum of elements. To reset the state BaseColumnFilter::reset() - must be called (e.g. the method is called by cv::FilterEngine) - */ -class CV_EXPORTS BaseColumnFilter -{ -public: - //! the default constructor - BaseColumnFilter(); - //! the destructor - virtual ~BaseColumnFilter(); - //! the filtering operator. Must be overrided in the derived classes. The vertical border interpolation is done outside of the class. - virtual void operator()(const uchar** src, uchar* dst, int dststep, - int dstcount, int width) = 0; - //! resets the internal buffers, if any - virtual void reset(); - int ksize, anchor; -}; - -/*! - The Base Class for Non-Separable 2D Filters. - - This is the base class for linear or non-linear 2D filters. - - Several functions in OpenCV return Ptr for the specific types of filters, - and those pointers can be used directly or within cv::FilterEngine. - - Similar to cv::BaseColumnFilter, the class may have some context information, - that should be reset using BaseFilter::reset() method before processing the new array. -*/ -class CV_EXPORTS BaseFilter -{ -public: - //! the default constructor - BaseFilter(); - //! the destructor - virtual ~BaseFilter(); - //! the filtering operator. The horizontal and the vertical border interpolation is done outside of the class. - virtual void operator()(const uchar** src, uchar* dst, int dststep, - int dstcount, int width, int cn) = 0; - //! resets the internal buffers, if any - virtual void reset(); - Size ksize; - Point anchor; -}; - -/*! - The Main Class for Image Filtering. - - The class can be used to apply an arbitrary filtering operation to an image. - It contains all the necessary intermediate buffers, it computes extrapolated values - of the "virtual" pixels outside of the image etc. - Pointers to the initialized cv::FilterEngine instances - are returned by various OpenCV functions, such as cv::createSeparableLinearFilter(), - cv::createLinearFilter(), cv::createGaussianFilter(), cv::createDerivFilter(), - cv::createBoxFilter() and cv::createMorphologyFilter(). - - Using the class you can process large images by parts and build complex pipelines - that include filtering as some of the stages. If all you need is to apply some pre-defined - filtering operation, you may use cv::filter2D(), cv::erode(), cv::dilate() etc. - functions that create FilterEngine internally. - - Here is the example on how to use the class to implement Laplacian operator, which is the sum of - second-order derivatives. More complex variant for different types is implemented in cv::Laplacian(). - - \code - void laplace_f(const Mat& src, Mat& dst) - { - CV_Assert( src.type() == CV_32F ); - // make sure the destination array has the proper size and type - dst.create(src.size(), src.type()); - - // get the derivative and smooth kernels for d2I/dx2. - // for d2I/dy2 we could use the same kernels, just swapped - Mat kd, ks; - getSobelKernels( kd, ks, 2, 0, ksize, false, ktype ); - - // let's process 10 source rows at once - int DELTA = std::min(10, src.rows); - Ptr Fxx = createSeparableLinearFilter(src.type(), - dst.type(), kd, ks, Point(-1,-1), 0, borderType, borderType, Scalar() ); - Ptr Fyy = createSeparableLinearFilter(src.type(), - dst.type(), ks, kd, Point(-1,-1), 0, borderType, borderType, Scalar() ); - - int y = Fxx->start(src), dsty = 0, dy = 0; - Fyy->start(src); - const uchar* sptr = src.data + y*src.step; - - // allocate the buffers for the spatial image derivatives; - // the buffers need to have more than DELTA rows, because at the - // last iteration the output may take max(kd.rows-1,ks.rows-1) - // rows more than the input. - Mat Ixx( DELTA + kd.rows - 1, src.cols, dst.type() ); - Mat Iyy( DELTA + kd.rows - 1, src.cols, dst.type() ); - - // inside the loop we always pass DELTA rows to the filter - // (note that the "proceed" method takes care of possibe overflow, since - // it was given the actual image height in the "start" method) - // on output we can get: - // * < DELTA rows (the initial buffer accumulation stage) - // * = DELTA rows (settled state in the middle) - // * > DELTA rows (then the input image is over, but we generate - // "virtual" rows using the border mode and filter them) - // this variable number of output rows is dy. - // dsty is the current output row. - // sptr is the pointer to the first input row in the portion to process - for( ; dsty < dst.rows; sptr += DELTA*src.step, dsty += dy ) - { - Fxx->proceed( sptr, (int)src.step, DELTA, Ixx.data, (int)Ixx.step ); - dy = Fyy->proceed( sptr, (int)src.step, DELTA, d2y.data, (int)Iyy.step ); - if( dy > 0 ) - { - Mat dstripe = dst.rowRange(dsty, dsty + dy); - add(Ixx.rowRange(0, dy), Iyy.rowRange(0, dy), dstripe); - } - } - } - \endcode -*/ -class CV_EXPORTS FilterEngine -{ -public: - //! the default constructor - FilterEngine(); - //! the full constructor. Either _filter2D or both _rowFilter and _columnFilter must be non-empty. - FilterEngine(const Ptr& _filter2D, - const Ptr& _rowFilter, - const Ptr& _columnFilter, - int srcType, int dstType, int bufType, - int _rowBorderType=BORDER_REPLICATE, - int _columnBorderType=-1, - const Scalar& _borderValue=Scalar()); - //! the destructor - virtual ~FilterEngine(); - //! reinitializes the engine. The previously assigned filters are released. - void init(const Ptr& _filter2D, - const Ptr& _rowFilter, - const Ptr& _columnFilter, - int srcType, int dstType, int bufType, - int _rowBorderType=BORDER_REPLICATE, int _columnBorderType=-1, - const Scalar& _borderValue=Scalar()); - //! starts filtering of the specified ROI of an image of size wholeSize. - virtual int start(Size wholeSize, Rect roi, int maxBufRows=-1); - //! starts filtering of the specified ROI of the specified image. - virtual int start(const Mat& src, const Rect& srcRoi=Rect(0,0,-1,-1), - bool isolated=false, int maxBufRows=-1); - //! processes the next srcCount rows of the image. - virtual int proceed(const uchar* src, int srcStep, int srcCount, - uchar* dst, int dstStep); - //! applies filter to the specified ROI of the image. if srcRoi=(0,0,-1,-1), the whole image is filtered. - virtual void apply( const Mat& src, Mat& dst, - const Rect& srcRoi=Rect(0,0,-1,-1), - Point dstOfs=Point(0,0), - bool isolated=false); - //! returns true if the filter is separable - bool isSeparable() const { return (const BaseFilter*)filter2D == 0; } - //! returns the number - int remainingInputRows() const; - int remainingOutputRows() const; - - int srcType, dstType, bufType; - Size ksize; - Point anchor; - int maxWidth; - Size wholeSize; - Rect roi; - int dx1, dx2; - int rowBorderType, columnBorderType; - vector borderTab; - int borderElemSize; - vector ringBuf; - vector srcRow; - vector constBorderValue; - vector constBorderRow; - int bufStep, startY, startY0, endY, rowCount, dstY; - vector rows; - - Ptr filter2D; - Ptr rowFilter; - Ptr columnFilter; -}; - -//! type of the kernel -enum { KERNEL_GENERAL=0, KERNEL_SYMMETRICAL=1, KERNEL_ASYMMETRICAL=2, - KERNEL_SMOOTH=4, KERNEL_INTEGER=8 }; - -//! returns type (one of KERNEL_*) of 1D or 2D kernel specified by its coefficients. -CV_EXPORTS int getKernelType(InputArray kernel, Point anchor); - -//! returns the primitive row filter with the specified kernel -CV_EXPORTS Ptr getLinearRowFilter(int srcType, int bufType, - InputArray kernel, int anchor, - int symmetryType); - -//! returns the primitive column filter with the specified kernel -CV_EXPORTS Ptr getLinearColumnFilter(int bufType, int dstType, - InputArray kernel, int anchor, - int symmetryType, double delta=0, - int bits=0); - -//! returns 2D filter with the specified kernel -CV_EXPORTS Ptr getLinearFilter(int srcType, int dstType, - InputArray kernel, - Point anchor=Point(-1,-1), - double delta=0, int bits=0); - -//! returns the separable linear filter engine -CV_EXPORTS Ptr createSeparableLinearFilter(int srcType, int dstType, - InputArray rowKernel, InputArray columnKernel, - Point anchor=Point(-1,-1), double delta=0, - int rowBorderType=BORDER_DEFAULT, - int columnBorderType=-1, - const Scalar& borderValue=Scalar()); - -//! returns the non-separable linear filter engine -CV_EXPORTS Ptr createLinearFilter(int srcType, int dstType, - InputArray kernel, Point _anchor=Point(-1,-1), - double delta=0, int rowBorderType=BORDER_DEFAULT, - int columnBorderType=-1, const Scalar& borderValue=Scalar()); - -//! returns the Gaussian kernel with the specified parameters -CV_EXPORTS_W Mat getGaussianKernel( int ksize, double sigma, int ktype=CV_64F ); - -//! returns the Gaussian filter engine -CV_EXPORTS Ptr createGaussianFilter( int type, Size ksize, - double sigma1, double sigma2=0, - int borderType=BORDER_DEFAULT); -//! initializes kernels of the generalized Sobel operator -CV_EXPORTS_W void getDerivKernels( OutputArray kx, OutputArray ky, - int dx, int dy, int ksize, - bool normalize=false, int ktype=CV_32F ); -//! returns filter engine for the generalized Sobel operator -CV_EXPORTS Ptr createDerivFilter( int srcType, int dstType, - int dx, int dy, int ksize, - int borderType=BORDER_DEFAULT ); -//! returns horizontal 1D box filter -CV_EXPORTS Ptr getRowSumFilter(int srcType, int sumType, - int ksize, int anchor=-1); -//! returns vertical 1D box filter -CV_EXPORTS Ptr getColumnSumFilter( int sumType, int dstType, - int ksize, int anchor=-1, - double scale=1); -//! returns box filter engine -CV_EXPORTS Ptr createBoxFilter( int srcType, int dstType, Size ksize, - Point anchor=Point(-1,-1), - bool normalize=true, - int borderType=BORDER_DEFAULT); - -//! returns the Gabor kernel with the specified parameters -CV_EXPORTS_W Mat getGaborKernel( Size ksize, double sigma, double theta, double lambd, - double gamma, double psi=CV_PI*0.5, int ktype=CV_64F ); - -//! type of morphological operation -enum { MORPH_ERODE=CV_MOP_ERODE, MORPH_DILATE=CV_MOP_DILATE, - MORPH_OPEN=CV_MOP_OPEN, MORPH_CLOSE=CV_MOP_CLOSE, - MORPH_GRADIENT=CV_MOP_GRADIENT, MORPH_TOPHAT=CV_MOP_TOPHAT, - MORPH_BLACKHAT=CV_MOP_BLACKHAT }; - -//! returns horizontal 1D morphological filter -CV_EXPORTS Ptr getMorphologyRowFilter(int op, int type, int ksize, int anchor=-1); -//! returns vertical 1D morphological filter -CV_EXPORTS Ptr getMorphologyColumnFilter(int op, int type, int ksize, int anchor=-1); -//! returns 2D morphological filter -CV_EXPORTS Ptr getMorphologyFilter(int op, int type, InputArray kernel, - Point anchor=Point(-1,-1)); - -//! returns "magic" border value for erosion and dilation. It is automatically transformed to Scalar::all(-DBL_MAX) for dilation. -static inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); } - -//! returns morphological filter engine. Only MORPH_ERODE and MORPH_DILATE are supported. -CV_EXPORTS Ptr createMorphologyFilter(int op, int type, InputArray kernel, - Point anchor=Point(-1,-1), int rowBorderType=BORDER_CONSTANT, - int columnBorderType=-1, - const Scalar& borderValue=morphologyDefaultBorderValue()); - -//! shape of the structuring element -enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 }; -//! returns structuring element of the specified shape and size -CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1)); - -template<> CV_EXPORTS void Ptr::delete_obj(); - -//! copies 2D array to a larger destination array with extrapolation of the outer part of src using the specified border mode -CV_EXPORTS_W void copyMakeBorder( InputArray src, OutputArray dst, - int top, int bottom, int left, int right, - int borderType, const Scalar& value=Scalar() ); - -//! smooths the image using median filter. -CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize ); -//! smooths the image using Gaussian filter. -CV_EXPORTS_W void GaussianBlur( InputArray src, - OutputArray dst, Size ksize, - double sigmaX, double sigmaY=0, - int borderType=BORDER_DEFAULT ); -//! smooths the image using bilateral filter -CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d, - double sigmaColor, double sigmaSpace, - int borderType=BORDER_DEFAULT ); -//! smooths the image using adaptive bilateral filter -CV_EXPORTS_W void adaptiveBilateralFilter( InputArray src, OutputArray dst, Size ksize, - double sigmaSpace, double maxSigmaColor = 20.0, Point anchor=Point(-1, -1), - int borderType=BORDER_DEFAULT ); -//! smooths the image using the box filter. Each pixel is processed in O(1) time -CV_EXPORTS_W void boxFilter( InputArray src, OutputArray dst, int ddepth, - Size ksize, Point anchor=Point(-1,-1), - bool normalize=true, - int borderType=BORDER_DEFAULT ); -//! a synonym for normalized box filter -CV_EXPORTS_W void blur( InputArray src, OutputArray dst, - Size ksize, Point anchor=Point(-1,-1), - int borderType=BORDER_DEFAULT ); - -//! applies non-separable 2D linear filter to the image -CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth, - InputArray kernel, Point anchor=Point(-1,-1), - double delta=0, int borderType=BORDER_DEFAULT ); - -//! applies separable 2D linear filter to the image -CV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth, - InputArray kernelX, InputArray kernelY, - Point anchor=Point(-1,-1), - double delta=0, int borderType=BORDER_DEFAULT ); - -//! applies generalized Sobel operator to the image -CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth, - int dx, int dy, int ksize=3, - double scale=1, double delta=0, - int borderType=BORDER_DEFAULT ); - -//! applies the vertical or horizontal Scharr operator to the image -CV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth, - int dx, int dy, double scale=1, double delta=0, - int borderType=BORDER_DEFAULT ); - -//! applies Laplacian operator to the image -CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth, - int ksize=1, double scale=1, double delta=0, - int borderType=BORDER_DEFAULT ); - -//! applies Canny edge detector and produces the edge map. -CV_EXPORTS_W void Canny( InputArray image, OutputArray edges, - double threshold1, double threshold2, - int apertureSize=3, bool L2gradient=false ); - -//! computes minimum eigen value of 2x2 derivative covariation matrix at each pixel - the cornerness criteria -CV_EXPORTS_W void cornerMinEigenVal( InputArray src, OutputArray dst, - int blockSize, int ksize=3, - int borderType=BORDER_DEFAULT ); - -//! computes Harris cornerness criteria at each image pixel -CV_EXPORTS_W void cornerHarris( InputArray src, OutputArray dst, int blockSize, - int ksize, double k, - int borderType=BORDER_DEFAULT ); - -// low-level function for computing eigenvalues and eigenvectors of 2x2 matrices -CV_EXPORTS void eigen2x2( const float* a, float* e, int n ); - -//! computes both eigenvalues and the eigenvectors of 2x2 derivative covariation matrix at each pixel. The output is stored as 6-channel matrix. -CV_EXPORTS_W void cornerEigenValsAndVecs( InputArray src, OutputArray dst, - int blockSize, int ksize, - int borderType=BORDER_DEFAULT ); - -//! computes another complex cornerness criteria at each pixel -CV_EXPORTS_W void preCornerDetect( InputArray src, OutputArray dst, int ksize, - int borderType=BORDER_DEFAULT ); - -//! adjusts the corner locations with sub-pixel accuracy to maximize the certain cornerness criteria -CV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners, - Size winSize, Size zeroZone, - TermCriteria criteria ); - -//! finds the strong enough corners where the cornerMinEigenVal() or cornerHarris() report the local maxima -CV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners, - int maxCorners, double qualityLevel, double minDistance, - InputArray mask=noArray(), int blockSize=3, - bool useHarrisDetector=false, double k=0.04 ); - -//! finds lines in the black-n-white image using the standard or pyramid Hough transform -CV_EXPORTS_W void HoughLines( InputArray image, OutputArray lines, - double rho, double theta, int threshold, - double srn=0, double stn=0 ); - -//! finds line segments in the black-n-white image using probabilistic Hough transform -CV_EXPORTS_W void HoughLinesP( InputArray image, OutputArray lines, - double rho, double theta, int threshold, - double minLineLength=0, double maxLineGap=0 ); - -//! finds circles in the grayscale image using 2+1 gradient Hough transform -CV_EXPORTS_W void HoughCircles( InputArray image, OutputArray circles, - int method, double dp, double minDist, - double param1=100, double param2=100, - int minRadius=0, int maxRadius=0 ); - -enum -{ - GHT_POSITION = 0, - GHT_SCALE = 1, - GHT_ROTATION = 2 -}; - -//! finds arbitrary template in the grayscale image using Generalized Hough Transform -//! Ballard, D.H. (1981). Generalizing the Hough transform to detect arbitrary shapes. Pattern Recognition 13 (2): 111-122. -//! Guil, N., González-Linares, J.M. and Zapata, E.L. (1999). Bidimensional shape detection using an invariant approach. Pattern Recognition 32 (6): 1025-1038. -class CV_EXPORTS GeneralizedHough : public Algorithm -{ -public: - static Ptr create(int method); - - virtual ~GeneralizedHough(); - - //! set template to search - void setTemplate(InputArray templ, int cannyThreshold = 100, Point templCenter = Point(-1, -1)); - void setTemplate(InputArray edges, InputArray dx, InputArray dy, Point templCenter = Point(-1, -1)); - - //! find template on image - void detect(InputArray image, OutputArray positions, OutputArray votes = cv::noArray(), int cannyThreshold = 100); - void detect(InputArray edges, InputArray dx, InputArray dy, OutputArray positions, OutputArray votes = cv::noArray()); - - void release(); - -protected: - virtual void setTemplateImpl(const Mat& edges, const Mat& dx, const Mat& dy, Point templCenter) = 0; - virtual void detectImpl(const Mat& edges, const Mat& dx, const Mat& dy, OutputArray positions, OutputArray votes) = 0; - virtual void releaseImpl() = 0; - -private: - Mat edges_, dx_, dy_; -}; - -//! erodes the image (applies the local minimum operator) -CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel, - Point anchor=Point(-1,-1), int iterations=1, - int borderType=BORDER_CONSTANT, - const Scalar& borderValue=morphologyDefaultBorderValue() ); - -//! dilates the image (applies the local maximum operator) -CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel, - Point anchor=Point(-1,-1), int iterations=1, - int borderType=BORDER_CONSTANT, - const Scalar& borderValue=morphologyDefaultBorderValue() ); - -//! applies an advanced morphological operation to the image -CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst, - int op, InputArray kernel, - Point anchor=Point(-1,-1), int iterations=1, - int borderType=BORDER_CONSTANT, - const Scalar& borderValue=morphologyDefaultBorderValue() ); - -//! interpolation algorithm -enum -{ - INTER_NEAREST=CV_INTER_NN, //!< nearest neighbor interpolation - INTER_LINEAR=CV_INTER_LINEAR, //!< bilinear interpolation - INTER_CUBIC=CV_INTER_CUBIC, //!< bicubic interpolation - INTER_AREA=CV_INTER_AREA, //!< area-based (or super) interpolation - INTER_LANCZOS4=CV_INTER_LANCZOS4, //!< Lanczos interpolation over 8x8 neighborhood - INTER_MAX=7, - WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP -}; - -//! resizes the image -CV_EXPORTS_W void resize( InputArray src, OutputArray dst, - Size dsize, double fx=0, double fy=0, - int interpolation=INTER_LINEAR ); - -//! warps the image using affine transformation -CV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst, - InputArray M, Size dsize, - int flags=INTER_LINEAR, - int borderMode=BORDER_CONSTANT, - const Scalar& borderValue=Scalar()); - -//! warps the image using perspective transformation -CV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst, - InputArray M, Size dsize, - int flags=INTER_LINEAR, - int borderMode=BORDER_CONSTANT, - const Scalar& borderValue=Scalar()); - -enum -{ - INTER_BITS=5, INTER_BITS2=INTER_BITS*2, - INTER_TAB_SIZE=(1< CV_EXPORTS void Ptr::delete_obj(); - -//! computes the joint dense histogram for a set of images. -CV_EXPORTS void calcHist( const Mat* images, int nimages, - const int* channels, InputArray mask, - OutputArray hist, int dims, const int* histSize, - const float** ranges, bool uniform=true, bool accumulate=false ); - -//! computes the joint sparse histogram for a set of images. -CV_EXPORTS void calcHist( const Mat* images, int nimages, - const int* channels, InputArray mask, - SparseMat& hist, int dims, - const int* histSize, const float** ranges, - bool uniform=true, bool accumulate=false ); - -CV_EXPORTS_W void calcHist( InputArrayOfArrays images, - const vector& channels, - InputArray mask, OutputArray hist, - const vector& histSize, - const vector& ranges, - bool accumulate=false ); - -//! computes back projection for the set of images -CV_EXPORTS void calcBackProject( const Mat* images, int nimages, - const int* channels, InputArray hist, - OutputArray backProject, const float** ranges, - double scale=1, bool uniform=true ); - -//! computes back projection for the set of images -CV_EXPORTS void calcBackProject( const Mat* images, int nimages, - const int* channels, const SparseMat& hist, - OutputArray backProject, const float** ranges, - double scale=1, bool uniform=true ); - -CV_EXPORTS_W void calcBackProject( InputArrayOfArrays images, const vector& channels, - InputArray hist, OutputArray dst, - const vector& ranges, - double scale ); - -/*CV_EXPORTS void calcBackProjectPatch( const Mat* images, int nimages, const int* channels, - InputArray hist, OutputArray dst, Size patchSize, - int method, double factor=1 ); - -CV_EXPORTS_W void calcBackProjectPatch( InputArrayOfArrays images, const vector& channels, - InputArray hist, OutputArray dst, Size patchSize, - int method, double factor=1 );*/ - -//! compares two histograms stored in dense arrays -CV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method ); - -//! compares two histograms stored in sparse arrays -CV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method ); - -//! normalizes the grayscale image brightness and contrast by normalizing its histogram -CV_EXPORTS_W void equalizeHist( InputArray src, OutputArray dst ); - -class CV_EXPORTS_W CLAHE : public Algorithm -{ -public: - CV_WRAP virtual void apply(InputArray src, OutputArray dst) = 0; - - CV_WRAP virtual void setClipLimit(double clipLimit) = 0; - CV_WRAP virtual double getClipLimit() const = 0; - - CV_WRAP virtual void setTilesGridSize(Size tileGridSize) = 0; - CV_WRAP virtual Size getTilesGridSize() const = 0; - - CV_WRAP virtual void collectGarbage() = 0; -}; -CV_EXPORTS_W Ptr createCLAHE(double clipLimit = 40.0, Size tileGridSize = Size(8, 8)); - -CV_EXPORTS float EMD( InputArray signature1, InputArray signature2, - int distType, InputArray cost=noArray(), - float* lowerBound=0, OutputArray flow=noArray() ); - -//! segments the image using watershed algorithm -CV_EXPORTS_W void watershed( InputArray image, InputOutputArray markers ); - -//! filters image using meanshift algorithm -CV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst, - double sp, double sr, int maxLevel=1, - TermCriteria termcrit=TermCriteria( - TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) ); - -//! class of the pixel in GrabCut algorithm -enum -{ - GC_BGD = 0, //!< background - GC_FGD = 1, //!< foreground - GC_PR_BGD = 2, //!< most probably background - GC_PR_FGD = 3 //!< most probably foreground -}; - -//! GrabCut algorithm flags -enum -{ - GC_INIT_WITH_RECT = 0, - GC_INIT_WITH_MASK = 1, - GC_EVAL = 2 -}; - -//! segments the image using GrabCut algorithm -CV_EXPORTS_W void grabCut( InputArray img, InputOutputArray mask, Rect rect, - InputOutputArray bgdModel, InputOutputArray fgdModel, - int iterCount, int mode = GC_EVAL ); - -enum -{ - DIST_LABEL_CCOMP = 0, - DIST_LABEL_PIXEL = 1 -}; - -//! builds the discrete Voronoi diagram -CV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst, - OutputArray labels, int distanceType, int maskSize, - int labelType=DIST_LABEL_CCOMP ); - -//! computes the distance transform map -CV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst, - int distanceType, int maskSize ); - -enum { FLOODFILL_FIXED_RANGE = 1 << 16, FLOODFILL_MASK_ONLY = 1 << 17 }; - -//! fills the semi-uniform image region starting from the specified seed point -CV_EXPORTS int floodFill( InputOutputArray image, - Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0, - Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), - int flags=4 ); - -//! fills the semi-uniform image region and/or the mask starting from the specified seed point -CV_EXPORTS_W int floodFill( InputOutputArray image, InputOutputArray mask, - Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0, - Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), - int flags=4 ); - - -enum -{ - COLOR_BGR2BGRA =0, - COLOR_RGB2RGBA =COLOR_BGR2BGRA, - - COLOR_BGRA2BGR =1, - COLOR_RGBA2RGB =COLOR_BGRA2BGR, - - COLOR_BGR2RGBA =2, - COLOR_RGB2BGRA =COLOR_BGR2RGBA, - - COLOR_RGBA2BGR =3, - COLOR_BGRA2RGB =COLOR_RGBA2BGR, - - COLOR_BGR2RGB =4, - COLOR_RGB2BGR =COLOR_BGR2RGB, - - COLOR_BGRA2RGBA =5, - COLOR_RGBA2BGRA =COLOR_BGRA2RGBA, - - COLOR_BGR2GRAY =6, - COLOR_RGB2GRAY =7, - COLOR_GRAY2BGR =8, - COLOR_GRAY2RGB =COLOR_GRAY2BGR, - COLOR_GRAY2BGRA =9, - COLOR_GRAY2RGBA =COLOR_GRAY2BGRA, - COLOR_BGRA2GRAY =10, - COLOR_RGBA2GRAY =11, - - COLOR_BGR2BGR565 =12, - COLOR_RGB2BGR565 =13, - COLOR_BGR5652BGR =14, - COLOR_BGR5652RGB =15, - COLOR_BGRA2BGR565 =16, - COLOR_RGBA2BGR565 =17, - COLOR_BGR5652BGRA =18, - COLOR_BGR5652RGBA =19, - - COLOR_GRAY2BGR565 =20, - COLOR_BGR5652GRAY =21, - - COLOR_BGR2BGR555 =22, - COLOR_RGB2BGR555 =23, - COLOR_BGR5552BGR =24, - COLOR_BGR5552RGB =25, - COLOR_BGRA2BGR555 =26, - COLOR_RGBA2BGR555 =27, - COLOR_BGR5552BGRA =28, - COLOR_BGR5552RGBA =29, - - COLOR_GRAY2BGR555 =30, - COLOR_BGR5552GRAY =31, - - COLOR_BGR2XYZ =32, - COLOR_RGB2XYZ =33, - COLOR_XYZ2BGR =34, - COLOR_XYZ2RGB =35, - - COLOR_BGR2YCrCb =36, - COLOR_RGB2YCrCb =37, - COLOR_YCrCb2BGR =38, - COLOR_YCrCb2RGB =39, - - COLOR_BGR2HSV =40, - COLOR_RGB2HSV =41, - - COLOR_BGR2Lab =44, - COLOR_RGB2Lab =45, - - COLOR_BayerBG2BGR =46, - COLOR_BayerGB2BGR =47, - COLOR_BayerRG2BGR =48, - COLOR_BayerGR2BGR =49, - - COLOR_BayerBG2RGB =COLOR_BayerRG2BGR, - COLOR_BayerGB2RGB =COLOR_BayerGR2BGR, - COLOR_BayerRG2RGB =COLOR_BayerBG2BGR, - COLOR_BayerGR2RGB =COLOR_BayerGB2BGR, - - COLOR_BGR2Luv =50, - COLOR_RGB2Luv =51, - COLOR_BGR2HLS =52, - COLOR_RGB2HLS =53, - - COLOR_HSV2BGR =54, - COLOR_HSV2RGB =55, - - COLOR_Lab2BGR =56, - COLOR_Lab2RGB =57, - COLOR_Luv2BGR =58, - COLOR_Luv2RGB =59, - COLOR_HLS2BGR =60, - COLOR_HLS2RGB =61, - - COLOR_BayerBG2BGR_VNG =62, - COLOR_BayerGB2BGR_VNG =63, - COLOR_BayerRG2BGR_VNG =64, - COLOR_BayerGR2BGR_VNG =65, - - COLOR_BayerBG2RGB_VNG =COLOR_BayerRG2BGR_VNG, - COLOR_BayerGB2RGB_VNG =COLOR_BayerGR2BGR_VNG, - COLOR_BayerRG2RGB_VNG =COLOR_BayerBG2BGR_VNG, - COLOR_BayerGR2RGB_VNG =COLOR_BayerGB2BGR_VNG, - - COLOR_BGR2HSV_FULL = 66, - COLOR_RGB2HSV_FULL = 67, - COLOR_BGR2HLS_FULL = 68, - COLOR_RGB2HLS_FULL = 69, - - COLOR_HSV2BGR_FULL = 70, - COLOR_HSV2RGB_FULL = 71, - COLOR_HLS2BGR_FULL = 72, - COLOR_HLS2RGB_FULL = 73, - - COLOR_LBGR2Lab = 74, - COLOR_LRGB2Lab = 75, - COLOR_LBGR2Luv = 76, - COLOR_LRGB2Luv = 77, - - COLOR_Lab2LBGR = 78, - COLOR_Lab2LRGB = 79, - COLOR_Luv2LBGR = 80, - COLOR_Luv2LRGB = 81, - - COLOR_BGR2YUV = 82, - COLOR_RGB2YUV = 83, - COLOR_YUV2BGR = 84, - COLOR_YUV2RGB = 85, - - COLOR_BayerBG2GRAY = 86, - COLOR_BayerGB2GRAY = 87, - COLOR_BayerRG2GRAY = 88, - COLOR_BayerGR2GRAY = 89, - - //YUV 4:2:0 formats family - COLOR_YUV2RGB_NV12 = 90, - COLOR_YUV2BGR_NV12 = 91, - COLOR_YUV2RGB_NV21 = 92, - COLOR_YUV2BGR_NV21 = 93, - COLOR_YUV420sp2RGB = COLOR_YUV2RGB_NV21, - COLOR_YUV420sp2BGR = COLOR_YUV2BGR_NV21, - - COLOR_YUV2RGBA_NV12 = 94, - COLOR_YUV2BGRA_NV12 = 95, - COLOR_YUV2RGBA_NV21 = 96, - COLOR_YUV2BGRA_NV21 = 97, - COLOR_YUV420sp2RGBA = COLOR_YUV2RGBA_NV21, - COLOR_YUV420sp2BGRA = COLOR_YUV2BGRA_NV21, - - COLOR_YUV2RGB_YV12 = 98, - COLOR_YUV2BGR_YV12 = 99, - COLOR_YUV2RGB_IYUV = 100, - COLOR_YUV2BGR_IYUV = 101, - COLOR_YUV2RGB_I420 = COLOR_YUV2RGB_IYUV, - COLOR_YUV2BGR_I420 = COLOR_YUV2BGR_IYUV, - COLOR_YUV420p2RGB = COLOR_YUV2RGB_YV12, - COLOR_YUV420p2BGR = COLOR_YUV2BGR_YV12, - - COLOR_YUV2RGBA_YV12 = 102, - COLOR_YUV2BGRA_YV12 = 103, - COLOR_YUV2RGBA_IYUV = 104, - COLOR_YUV2BGRA_IYUV = 105, - COLOR_YUV2RGBA_I420 = COLOR_YUV2RGBA_IYUV, - COLOR_YUV2BGRA_I420 = COLOR_YUV2BGRA_IYUV, - COLOR_YUV420p2RGBA = COLOR_YUV2RGBA_YV12, - COLOR_YUV420p2BGRA = COLOR_YUV2BGRA_YV12, - - COLOR_YUV2GRAY_420 = 106, - COLOR_YUV2GRAY_NV21 = COLOR_YUV2GRAY_420, - COLOR_YUV2GRAY_NV12 = COLOR_YUV2GRAY_420, - COLOR_YUV2GRAY_YV12 = COLOR_YUV2GRAY_420, - COLOR_YUV2GRAY_IYUV = COLOR_YUV2GRAY_420, - COLOR_YUV2GRAY_I420 = COLOR_YUV2GRAY_420, - COLOR_YUV420sp2GRAY = COLOR_YUV2GRAY_420, - COLOR_YUV420p2GRAY = COLOR_YUV2GRAY_420, - - //YUV 4:2:2 formats family - COLOR_YUV2RGB_UYVY = 107, - COLOR_YUV2BGR_UYVY = 108, - //COLOR_YUV2RGB_VYUY = 109, - //COLOR_YUV2BGR_VYUY = 110, - COLOR_YUV2RGB_Y422 = COLOR_YUV2RGB_UYVY, - COLOR_YUV2BGR_Y422 = COLOR_YUV2BGR_UYVY, - COLOR_YUV2RGB_UYNV = COLOR_YUV2RGB_UYVY, - COLOR_YUV2BGR_UYNV = COLOR_YUV2BGR_UYVY, - - COLOR_YUV2RGBA_UYVY = 111, - COLOR_YUV2BGRA_UYVY = 112, - //COLOR_YUV2RGBA_VYUY = 113, - //COLOR_YUV2BGRA_VYUY = 114, - COLOR_YUV2RGBA_Y422 = COLOR_YUV2RGBA_UYVY, - COLOR_YUV2BGRA_Y422 = COLOR_YUV2BGRA_UYVY, - COLOR_YUV2RGBA_UYNV = COLOR_YUV2RGBA_UYVY, - COLOR_YUV2BGRA_UYNV = COLOR_YUV2BGRA_UYVY, - - COLOR_YUV2RGB_YUY2 = 115, - COLOR_YUV2BGR_YUY2 = 116, - COLOR_YUV2RGB_YVYU = 117, - COLOR_YUV2BGR_YVYU = 118, - COLOR_YUV2RGB_YUYV = COLOR_YUV2RGB_YUY2, - COLOR_YUV2BGR_YUYV = COLOR_YUV2BGR_YUY2, - COLOR_YUV2RGB_YUNV = COLOR_YUV2RGB_YUY2, - COLOR_YUV2BGR_YUNV = COLOR_YUV2BGR_YUY2, - - COLOR_YUV2RGBA_YUY2 = 119, - COLOR_YUV2BGRA_YUY2 = 120, - COLOR_YUV2RGBA_YVYU = 121, - COLOR_YUV2BGRA_YVYU = 122, - COLOR_YUV2RGBA_YUYV = COLOR_YUV2RGBA_YUY2, - COLOR_YUV2BGRA_YUYV = COLOR_YUV2BGRA_YUY2, - COLOR_YUV2RGBA_YUNV = COLOR_YUV2RGBA_YUY2, - COLOR_YUV2BGRA_YUNV = COLOR_YUV2BGRA_YUY2, - - COLOR_YUV2GRAY_UYVY = 123, - COLOR_YUV2GRAY_YUY2 = 124, - //COLOR_YUV2GRAY_VYUY = COLOR_YUV2GRAY_UYVY, - COLOR_YUV2GRAY_Y422 = COLOR_YUV2GRAY_UYVY, - COLOR_YUV2GRAY_UYNV = COLOR_YUV2GRAY_UYVY, - COLOR_YUV2GRAY_YVYU = COLOR_YUV2GRAY_YUY2, - COLOR_YUV2GRAY_YUYV = COLOR_YUV2GRAY_YUY2, - COLOR_YUV2GRAY_YUNV = COLOR_YUV2GRAY_YUY2, - - // alpha premultiplication - COLOR_RGBA2mRGBA = 125, - COLOR_mRGBA2RGBA = 126, - - COLOR_RGB2YUV_I420 = 127, - COLOR_BGR2YUV_I420 = 128, - COLOR_RGB2YUV_IYUV = COLOR_RGB2YUV_I420, - COLOR_BGR2YUV_IYUV = COLOR_BGR2YUV_I420, - - COLOR_RGBA2YUV_I420 = 129, - COLOR_BGRA2YUV_I420 = 130, - COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420, - COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420, - COLOR_RGB2YUV_YV12 = 131, - COLOR_BGR2YUV_YV12 = 132, - COLOR_RGBA2YUV_YV12 = 133, - COLOR_BGRA2YUV_YV12 = 134, - - COLOR_COLORCVT_MAX = 135 -}; - - -//! converts image from one color space to another -CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 ); - -//! raster image moments -class CV_EXPORTS_W_MAP Moments -{ -public: - //! the default constructor - Moments(); - //! the full constructor - Moments(double m00, double m10, double m01, double m20, double m11, - double m02, double m30, double m21, double m12, double m03 ); - //! the conversion from CvMoments - Moments( const CvMoments& moments ); - //! the conversion to CvMoments - operator CvMoments() const; - - //! spatial moments - CV_PROP_RW double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; - //! central moments - CV_PROP_RW double mu20, mu11, mu02, mu30, mu21, mu12, mu03; - //! central normalized moments - CV_PROP_RW double nu20, nu11, nu02, nu30, nu21, nu12, nu03; -}; - -//! computes moments of the rasterized shape or a vector of points -CV_EXPORTS_W Moments moments( InputArray array, bool binaryImage=false ); - -//! computes 7 Hu invariants from the moments -CV_EXPORTS void HuMoments( const Moments& moments, double hu[7] ); -CV_EXPORTS_W void HuMoments( const Moments& m, CV_OUT OutputArray hu ); - -//! type of the template matching operation -enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 }; - -//! computes the proximity map for the raster template and the image where the template is searched for -CV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ, - OutputArray result, int method ); - -//! mode of the contour retrieval algorithm -enum -{ - RETR_EXTERNAL=CV_RETR_EXTERNAL, //!< retrieve only the most external (top-level) contours - RETR_LIST=CV_RETR_LIST, //!< retrieve all the contours without any hierarchical information - RETR_CCOMP=CV_RETR_CCOMP, //!< retrieve the connected components (that can possibly be nested) - RETR_TREE=CV_RETR_TREE, //!< retrieve all the contours and the whole hierarchy - RETR_FLOODFILL=CV_RETR_FLOODFILL -}; - -//! the contour approximation algorithm -enum -{ - CHAIN_APPROX_NONE=CV_CHAIN_APPROX_NONE, - CHAIN_APPROX_SIMPLE=CV_CHAIN_APPROX_SIMPLE, - CHAIN_APPROX_TC89_L1=CV_CHAIN_APPROX_TC89_L1, - CHAIN_APPROX_TC89_KCOS=CV_CHAIN_APPROX_TC89_KCOS -}; - -//! retrieves contours and the hierarchical information from black-n-white image. -CV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays contours, - OutputArray hierarchy, int mode, - int method, Point offset=Point()); - -//! retrieves contours from black-n-white image. -CV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours, - int mode, int method, Point offset=Point()); - -//! draws contours in the image -CV_EXPORTS_W void drawContours( InputOutputArray image, InputArrayOfArrays contours, - int contourIdx, const Scalar& color, - int thickness=1, int lineType=8, - InputArray hierarchy=noArray(), - int maxLevel=INT_MAX, Point offset=Point() ); - -//! approximates contour or a curve using Douglas-Peucker algorithm -CV_EXPORTS_W void approxPolyDP( InputArray curve, - OutputArray approxCurve, - double epsilon, bool closed ); - -//! computes the contour perimeter (closed=true) or a curve length -CV_EXPORTS_W double arcLength( InputArray curve, bool closed ); -//! computes the bounding rectangle for a contour -CV_EXPORTS_W Rect boundingRect( InputArray points ); -//! computes the contour area -CV_EXPORTS_W double contourArea( InputArray contour, bool oriented=false ); -//! computes the minimal rotated rectangle for a set of points -CV_EXPORTS_W RotatedRect minAreaRect( InputArray points ); -//! computes the minimal enclosing circle for a set of points -CV_EXPORTS_W void minEnclosingCircle( InputArray points, - CV_OUT Point2f& center, CV_OUT float& radius ); -//! matches two contours using one of the available algorithms -CV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2, - int method, double parameter ); -//! computes convex hull for a set of 2D points. -CV_EXPORTS_W void convexHull( InputArray points, OutputArray hull, - bool clockwise=false, bool returnPoints=true ); -//! computes the contour convexity defects -CV_EXPORTS_W void convexityDefects( InputArray contour, InputArray convexhull, OutputArray convexityDefects ); - -//! returns true if the contour is convex. Does not support contours with self-intersection -CV_EXPORTS_W bool isContourConvex( InputArray contour ); - -//! finds intersection of two convex polygons -CV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2, - OutputArray _p12, bool handleNested=true ); - -//! fits ellipse to the set of 2D points -CV_EXPORTS_W RotatedRect fitEllipse( InputArray points ); - -//! fits line to the set of 2D points using M-estimator algorithm -CV_EXPORTS_W void fitLine( InputArray points, OutputArray line, int distType, - double param, double reps, double aeps ); -//! checks if the point is inside the contour. Optionally computes the signed distance from the point to the contour boundary -CV_EXPORTS_W double pointPolygonTest( InputArray contour, Point2f pt, bool measureDist ); - - -class CV_EXPORTS_W Subdiv2D -{ -public: - enum - { - PTLOC_ERROR = -2, - PTLOC_OUTSIDE_RECT = -1, - PTLOC_INSIDE = 0, - PTLOC_VERTEX = 1, - PTLOC_ON_EDGE = 2 - }; - - enum - { - NEXT_AROUND_ORG = 0x00, - NEXT_AROUND_DST = 0x22, - PREV_AROUND_ORG = 0x11, - PREV_AROUND_DST = 0x33, - NEXT_AROUND_LEFT = 0x13, - NEXT_AROUND_RIGHT = 0x31, - PREV_AROUND_LEFT = 0x20, - PREV_AROUND_RIGHT = 0x02 - }; - - CV_WRAP Subdiv2D(); - CV_WRAP Subdiv2D(Rect rect); - CV_WRAP void initDelaunay(Rect rect); - - CV_WRAP int insert(Point2f pt); - CV_WRAP void insert(const vector& ptvec); - CV_WRAP int locate(Point2f pt, CV_OUT int& edge, CV_OUT int& vertex); - - CV_WRAP int findNearest(Point2f pt, CV_OUT Point2f* nearestPt=0); - CV_WRAP void getEdgeList(CV_OUT vector& edgeList) const; - CV_WRAP void getTriangleList(CV_OUT vector& triangleList) const; - CV_WRAP void getVoronoiFacetList(const vector& idx, CV_OUT vector >& facetList, - CV_OUT vector& facetCenters); - - CV_WRAP Point2f getVertex(int vertex, CV_OUT int* firstEdge=0) const; - - CV_WRAP int getEdge( int edge, int nextEdgeType ) const; - CV_WRAP int nextEdge(int edge) const; - CV_WRAP int rotateEdge(int edge, int rotate) const; - CV_WRAP int symEdge(int edge) const; - CV_WRAP int edgeOrg(int edge, CV_OUT Point2f* orgpt=0) const; - CV_WRAP int edgeDst(int edge, CV_OUT Point2f* dstpt=0) const; - -protected: - int newEdge(); - void deleteEdge(int edge); - int newPoint(Point2f pt, bool isvirtual, int firstEdge=0); - void deletePoint(int vtx); - void setEdgePoints( int edge, int orgPt, int dstPt ); - void splice( int edgeA, int edgeB ); - int connectEdges( int edgeA, int edgeB ); - void swapEdges( int edge ); - int isRightOf(Point2f pt, int edge) const; - void calcVoronoi(); - void clearVoronoi(); - void checkSubdiv() const; - - struct CV_EXPORTS Vertex - { - Vertex(); - Vertex(Point2f pt, bool _isvirtual, int _firstEdge=0); - bool isvirtual() const; - bool isfree() const; - int firstEdge; - int type; - Point2f pt; - }; - struct CV_EXPORTS QuadEdge - { - QuadEdge(); - QuadEdge(int edgeidx); - bool isfree() const; - int next[4]; - int pt[4]; - }; - - vector vtx; - vector qedges; - int freeQEdge; - int freePoint; - bool validGeometry; - - int recentEdge; - Point2f topLeft; - Point2f bottomRight; -}; - -} - -#endif /* __cplusplus */ - -#endif - -/* End of file. */ diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc_c.h b/modules/imgproc/include/opencv2/imgproc/imgproc_c.h deleted file mode 100644 index 46d9f01..0000000 --- a/modules/imgproc/include/opencv2/imgproc/imgproc_c.h +++ /dev/null @@ -1,623 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_IMGPROC_IMGPROC_C_H__ -#define __OPENCV_IMGPROC_IMGPROC_C_H__ - -#include "opencv2/core/core_c.h" -#include "opencv2/imgproc/types_c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*********************** Background statistics accumulation *****************************/ - -/* Adds image to accumulator */ -CVAPI(void) cvAcc( const CvArr* image, CvArr* sum, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Adds squared image to accumulator */ -CVAPI(void) cvSquareAcc( const CvArr* image, CvArr* sqsum, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Adds a product of two images to accumulator */ -CVAPI(void) cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc, - const CvArr* mask CV_DEFAULT(NULL) ); - -/* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */ -CVAPI(void) cvRunningAvg( const CvArr* image, CvArr* acc, double alpha, - const CvArr* mask CV_DEFAULT(NULL) ); - -/****************************************************************************************\ -* Image Processing * -\****************************************************************************************/ - -/* Copies source 2D array inside of the larger destination array and - makes a border of the specified type (IPL_BORDER_*) around the copied area. */ -CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, - int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0))); - -/* Smoothes array (removes noise) */ -CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst, - int smoothtype CV_DEFAULT(CV_GAUSSIAN), - int size1 CV_DEFAULT(3), - int size2 CV_DEFAULT(0), - double sigma1 CV_DEFAULT(0), - double sigma2 CV_DEFAULT(0)); - -/* Convolves the image with the kernel */ -CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, - CvPoint anchor CV_DEFAULT(cvPoint(-1,-1))); - -/* Finds integral image: SUM(X,Y) = sum(x. - After that sum of histogram bins is equal to */ -CVAPI(void) cvNormalizeHist( CvHistogram* hist, double factor ); - - -/* Clear all histogram bins that are below the threshold */ -CVAPI(void) cvThreshHist( CvHistogram* hist, double threshold ); - - -/* Compares two histogram */ -CVAPI(double) cvCompareHist( const CvHistogram* hist1, - const CvHistogram* hist2, - int method); - -/* Copies one histogram to another. Destination histogram is created if - the destination pointer is NULL */ -CVAPI(void) cvCopyHist( const CvHistogram* src, CvHistogram** dst ); - - -/* Calculates bayesian probabilistic histograms - (each or src and dst is an array of histograms */ -CVAPI(void) cvCalcBayesianProb( CvHistogram** src, int number, - CvHistogram** dst); - -/* Calculates array histogram */ -CVAPI(void) cvCalcArrHist( CvArr** arr, CvHistogram* hist, - int accumulate CV_DEFAULT(0), - const CvArr* mask CV_DEFAULT(NULL) ); - -CV_INLINE void cvCalcHist( IplImage** image, CvHistogram* hist, - int accumulate CV_DEFAULT(0), - const CvArr* mask CV_DEFAULT(NULL) ) -{ - cvCalcArrHist( (CvArr**)image, hist, accumulate, mask ); -} - -/* Calculates back project */ -CVAPI(void) cvCalcArrBackProject( CvArr** image, CvArr* dst, - const CvHistogram* hist ); -#define cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist) - - -/* Does some sort of template matching but compares histograms of - template and each window location */ -CVAPI(void) cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range, - CvHistogram* hist, int method, - double factor ); -#define cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \ - cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor ) - - -/* calculates probabilistic density (divides one histogram by another) */ -CVAPI(void) cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2, - CvHistogram* dst_hist, double scale CV_DEFAULT(255) ); - -/* equalizes histogram of 8-bit single-channel image */ -CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst ); - - -/* Applies distance transform to binary image */ -CVAPI(void) cvDistTransform( const CvArr* src, CvArr* dst, - int distance_type CV_DEFAULT(CV_DIST_L2), - int mask_size CV_DEFAULT(3), - const float* mask CV_DEFAULT(NULL), - CvArr* labels CV_DEFAULT(NULL), - int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP)); - - -/* Applies fixed-level threshold to grayscale image. - This is a basic operation applied before retrieving contours */ -CVAPI(double) cvThreshold( const CvArr* src, CvArr* dst, - double threshold, double max_value, - int threshold_type ); - -/* Applies adaptive threshold to grayscale image. - The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and - CV_ADAPTIVE_THRESH_GAUSSIAN_C are: - neighborhood size (3, 5, 7 etc.), - and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */ -CVAPI(void) cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, - int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C), - int threshold_type CV_DEFAULT(CV_THRESH_BINARY), - int block_size CV_DEFAULT(3), - double param1 CV_DEFAULT(5)); - -/* Fills the connected component until the color difference gets large enough */ -CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point, - CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)), - CvScalar up_diff CV_DEFAULT(cvScalarAll(0)), - CvConnectedComp* comp CV_DEFAULT(NULL), - int flags CV_DEFAULT(4), - CvArr* mask CV_DEFAULT(NULL)); - -/****************************************************************************************\ -* Feature detection * -\****************************************************************************************/ - -/* Runs canny edge detector */ -CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1, - double threshold2, int aperture_size CV_DEFAULT(3) ); - -/* Calculates constraint image for corner detection - Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy. - Applying threshold to the result gives coordinates of corners */ -CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners, - int aperture_size CV_DEFAULT(3) ); - -/* Calculates eigen values and vectors of 2x2 - gradient covariation matrix at every image pixel */ -CVAPI(void) cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv, - int block_size, int aperture_size CV_DEFAULT(3) ); - -/* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at - every image pixel */ -CVAPI(void) cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval, - int block_size, int aperture_size CV_DEFAULT(3) ); - -/* Harris corner detector: - Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */ -CVAPI(void) cvCornerHarris( const CvArr* image, CvArr* harris_response, - int block_size, int aperture_size CV_DEFAULT(3), - double k CV_DEFAULT(0.04) ); - -/* Adjust corner position using some sort of gradient search */ -CVAPI(void) cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, - int count, CvSize win, CvSize zero_zone, - CvTermCriteria criteria ); - -/* Finds a sparse set of points within the selected region - that seem to be easy to track */ -CVAPI(void) cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, - CvArr* temp_image, CvPoint2D32f* corners, - int* corner_count, double quality_level, - double min_distance, - const CvArr* mask CV_DEFAULT(NULL), - int block_size CV_DEFAULT(3), - int use_harris CV_DEFAULT(0), - double k CV_DEFAULT(0.04) ); - -/* Finds lines on binary image using one of several methods. - line_storage is either memory storage or 1 x CvMat, its - number of columns is changed by the function. - method is one of CV_HOUGH_*; - rho, theta and threshold are used for each of those methods; - param1 ~ line length, param2 ~ line gap - for probabilistic, - param1 ~ srn, param2 ~ stn - for multi-scale */ -CVAPI(CvSeq*) cvHoughLines2( CvArr* image, void* line_storage, int method, - double rho, double theta, int threshold, - double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0)); - -/* Finds circles in the image */ -CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage, - int method, double dp, double min_dist, - double param1 CV_DEFAULT(100), - double param2 CV_DEFAULT(100), - int min_radius CV_DEFAULT(0), - int max_radius CV_DEFAULT(0)); - -/* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */ -CVAPI(void) cvFitLine( const CvArr* points, int dist_type, double param, - double reps, double aeps, float* line ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/imgproc/include/opencv2/imgproc/types_c.h b/modules/imgproc/include/opencv2/imgproc/types_c.h deleted file mode 100644 index 4aba0a8..0000000 --- a/modules/imgproc/include/opencv2/imgproc/types_c.h +++ /dev/null @@ -1,640 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_IMGPROC_TYPES_C_H__ -#define __OPENCV_IMGPROC_TYPES_C_H__ - -#include "opencv2/core/core_c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Connected component structure */ -typedef struct CvConnectedComp -{ - double area; /* area of the connected component */ - CvScalar value; /* average color of the connected component */ - CvRect rect; /* ROI of the component */ - CvSeq* contour; /* optional component boundary - (the contour might have child contours corresponding to the holes)*/ -} -CvConnectedComp; - -/* Image smooth methods */ -enum -{ - CV_BLUR_NO_SCALE =0, - CV_BLUR =1, - CV_GAUSSIAN =2, - CV_MEDIAN =3, - CV_BILATERAL =4 -}; - -/* Filters used in pyramid decomposition */ -enum -{ - CV_GAUSSIAN_5x5 = 7 -}; - -/* Special filters */ -enum -{ - CV_SCHARR =-1, - CV_MAX_SOBEL_KSIZE =7 -}; - -/* Constants for color conversion */ -enum -{ - CV_BGR2BGRA =0, - CV_RGB2RGBA =CV_BGR2BGRA, - - CV_BGRA2BGR =1, - CV_RGBA2RGB =CV_BGRA2BGR, - - CV_BGR2RGBA =2, - CV_RGB2BGRA =CV_BGR2RGBA, - - CV_RGBA2BGR =3, - CV_BGRA2RGB =CV_RGBA2BGR, - - CV_BGR2RGB =4, - CV_RGB2BGR =CV_BGR2RGB, - - CV_BGRA2RGBA =5, - CV_RGBA2BGRA =CV_BGRA2RGBA, - - CV_BGR2GRAY =6, - CV_RGB2GRAY =7, - CV_GRAY2BGR =8, - CV_GRAY2RGB =CV_GRAY2BGR, - CV_GRAY2BGRA =9, - CV_GRAY2RGBA =CV_GRAY2BGRA, - CV_BGRA2GRAY =10, - CV_RGBA2GRAY =11, - - CV_BGR2BGR565 =12, - CV_RGB2BGR565 =13, - CV_BGR5652BGR =14, - CV_BGR5652RGB =15, - CV_BGRA2BGR565 =16, - CV_RGBA2BGR565 =17, - CV_BGR5652BGRA =18, - CV_BGR5652RGBA =19, - - CV_GRAY2BGR565 =20, - CV_BGR5652GRAY =21, - - CV_BGR2BGR555 =22, - CV_RGB2BGR555 =23, - CV_BGR5552BGR =24, - CV_BGR5552RGB =25, - CV_BGRA2BGR555 =26, - CV_RGBA2BGR555 =27, - CV_BGR5552BGRA =28, - CV_BGR5552RGBA =29, - - CV_GRAY2BGR555 =30, - CV_BGR5552GRAY =31, - - CV_BGR2XYZ =32, - CV_RGB2XYZ =33, - CV_XYZ2BGR =34, - CV_XYZ2RGB =35, - - CV_BGR2YCrCb =36, - CV_RGB2YCrCb =37, - CV_YCrCb2BGR =38, - CV_YCrCb2RGB =39, - - CV_BGR2HSV =40, - CV_RGB2HSV =41, - - CV_BGR2Lab =44, - CV_RGB2Lab =45, - - CV_BayerBG2BGR =46, - CV_BayerGB2BGR =47, - CV_BayerRG2BGR =48, - CV_BayerGR2BGR =49, - - CV_BayerBG2RGB =CV_BayerRG2BGR, - CV_BayerGB2RGB =CV_BayerGR2BGR, - CV_BayerRG2RGB =CV_BayerBG2BGR, - CV_BayerGR2RGB =CV_BayerGB2BGR, - - CV_BGR2Luv =50, - CV_RGB2Luv =51, - CV_BGR2HLS =52, - CV_RGB2HLS =53, - - CV_HSV2BGR =54, - CV_HSV2RGB =55, - - CV_Lab2BGR =56, - CV_Lab2RGB =57, - CV_Luv2BGR =58, - CV_Luv2RGB =59, - CV_HLS2BGR =60, - CV_HLS2RGB =61, - - CV_BayerBG2BGR_VNG =62, - CV_BayerGB2BGR_VNG =63, - CV_BayerRG2BGR_VNG =64, - CV_BayerGR2BGR_VNG =65, - - CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG, - CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG, - CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG, - CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG, - - CV_BGR2HSV_FULL = 66, - CV_RGB2HSV_FULL = 67, - CV_BGR2HLS_FULL = 68, - CV_RGB2HLS_FULL = 69, - - CV_HSV2BGR_FULL = 70, - CV_HSV2RGB_FULL = 71, - CV_HLS2BGR_FULL = 72, - CV_HLS2RGB_FULL = 73, - - CV_LBGR2Lab = 74, - CV_LRGB2Lab = 75, - CV_LBGR2Luv = 76, - CV_LRGB2Luv = 77, - - CV_Lab2LBGR = 78, - CV_Lab2LRGB = 79, - CV_Luv2LBGR = 80, - CV_Luv2LRGB = 81, - - CV_BGR2YUV = 82, - CV_RGB2YUV = 83, - CV_YUV2BGR = 84, - CV_YUV2RGB = 85, - - CV_BayerBG2GRAY = 86, - CV_BayerGB2GRAY = 87, - CV_BayerRG2GRAY = 88, - CV_BayerGR2GRAY = 89, - - //YUV 4:2:0 formats family - CV_YUV2RGB_NV12 = 90, - CV_YUV2BGR_NV12 = 91, - CV_YUV2RGB_NV21 = 92, - CV_YUV2BGR_NV21 = 93, - CV_YUV420sp2RGB = CV_YUV2RGB_NV21, - CV_YUV420sp2BGR = CV_YUV2BGR_NV21, - - CV_YUV2RGBA_NV12 = 94, - CV_YUV2BGRA_NV12 = 95, - CV_YUV2RGBA_NV21 = 96, - CV_YUV2BGRA_NV21 = 97, - CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21, - CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21, - - CV_YUV2RGB_YV12 = 98, - CV_YUV2BGR_YV12 = 99, - CV_YUV2RGB_IYUV = 100, - CV_YUV2BGR_IYUV = 101, - CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV, - CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV, - CV_YUV420p2RGB = CV_YUV2RGB_YV12, - CV_YUV420p2BGR = CV_YUV2BGR_YV12, - - CV_YUV2RGBA_YV12 = 102, - CV_YUV2BGRA_YV12 = 103, - CV_YUV2RGBA_IYUV = 104, - CV_YUV2BGRA_IYUV = 105, - CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV, - CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV, - CV_YUV420p2RGBA = CV_YUV2RGBA_YV12, - CV_YUV420p2BGRA = CV_YUV2BGRA_YV12, - - CV_YUV2GRAY_420 = 106, - CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420, - CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420, - CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420, - CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420, - CV_YUV2GRAY_I420 = CV_YUV2GRAY_420, - CV_YUV420sp2GRAY = CV_YUV2GRAY_420, - CV_YUV420p2GRAY = CV_YUV2GRAY_420, - - //YUV 4:2:2 formats family - CV_YUV2RGB_UYVY = 107, - CV_YUV2BGR_UYVY = 108, - //CV_YUV2RGB_VYUY = 109, - //CV_YUV2BGR_VYUY = 110, - CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY, - CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY, - CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY, - CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY, - - CV_YUV2RGBA_UYVY = 111, - CV_YUV2BGRA_UYVY = 112, - //CV_YUV2RGBA_VYUY = 113, - //CV_YUV2BGRA_VYUY = 114, - CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY, - CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY, - CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY, - CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY, - - CV_YUV2RGB_YUY2 = 115, - CV_YUV2BGR_YUY2 = 116, - CV_YUV2RGB_YVYU = 117, - CV_YUV2BGR_YVYU = 118, - CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2, - CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2, - CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2, - CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2, - - CV_YUV2RGBA_YUY2 = 119, - CV_YUV2BGRA_YUY2 = 120, - CV_YUV2RGBA_YVYU = 121, - CV_YUV2BGRA_YVYU = 122, - CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2, - CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2, - CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2, - CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2, - - CV_YUV2GRAY_UYVY = 123, - CV_YUV2GRAY_YUY2 = 124, - //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY, - CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY, - CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY, - CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2, - CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2, - CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2, - - // alpha premultiplication - CV_RGBA2mRGBA = 125, - CV_mRGBA2RGBA = 126, - - CV_RGB2YUV_I420 = 127, - CV_BGR2YUV_I420 = 128, - CV_RGB2YUV_IYUV = CV_RGB2YUV_I420, - CV_BGR2YUV_IYUV = CV_BGR2YUV_I420, - - CV_RGBA2YUV_I420 = 129, - CV_BGRA2YUV_I420 = 130, - CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420, - CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420, - CV_RGB2YUV_YV12 = 131, - CV_BGR2YUV_YV12 = 132, - CV_RGBA2YUV_YV12 = 133, - CV_BGRA2YUV_YV12 = 134, - - CV_COLORCVT_MAX = 135 -}; - - -/* Sub-pixel interpolation methods */ -enum -{ - CV_INTER_NN =0, - CV_INTER_LINEAR =1, - CV_INTER_CUBIC =2, - CV_INTER_AREA =3, - CV_INTER_LANCZOS4 =4 -}; - -/* ... and other image warping flags */ -enum -{ - CV_WARP_FILL_OUTLIERS =8, - CV_WARP_INVERSE_MAP =16 -}; - -/* Shapes of a structuring element for morphological operations */ -enum -{ - CV_SHAPE_RECT =0, - CV_SHAPE_CROSS =1, - CV_SHAPE_ELLIPSE =2, - CV_SHAPE_CUSTOM =100 -}; - -/* Morphological operations */ -enum -{ - CV_MOP_ERODE =0, - CV_MOP_DILATE =1, - CV_MOP_OPEN =2, - CV_MOP_CLOSE =3, - CV_MOP_GRADIENT =4, - CV_MOP_TOPHAT =5, - CV_MOP_BLACKHAT =6 -}; - -/* Spatial and central moments */ -typedef struct CvMoments -{ - double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ - double mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ - double inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ -} -CvMoments; - -/* Hu invariants */ -typedef struct CvHuMoments -{ - double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */ -} -CvHuMoments; - -/* Template matching methods */ -enum -{ - CV_TM_SQDIFF =0, - CV_TM_SQDIFF_NORMED =1, - CV_TM_CCORR =2, - CV_TM_CCORR_NORMED =3, - CV_TM_CCOEFF =4, - CV_TM_CCOEFF_NORMED =5 -}; - -typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param ); - -/* Contour retrieval modes */ -enum -{ - CV_RETR_EXTERNAL=0, - CV_RETR_LIST=1, - CV_RETR_CCOMP=2, - CV_RETR_TREE=3, - CV_RETR_FLOODFILL=4 -}; - -/* Contour approximation methods */ -enum -{ - CV_CHAIN_CODE=0, - CV_CHAIN_APPROX_NONE=1, - CV_CHAIN_APPROX_SIMPLE=2, - CV_CHAIN_APPROX_TC89_L1=3, - CV_CHAIN_APPROX_TC89_KCOS=4, - CV_LINK_RUNS=5 -}; - -/* -Internal structure that is used for sequental retrieving contours from the image. -It supports both hierarchical and plane variants of Suzuki algorithm. -*/ -typedef struct _CvContourScanner* CvContourScanner; - -/* Freeman chain reader state */ -typedef struct CvChainPtReader -{ - CV_SEQ_READER_FIELDS() - char code; - CvPoint pt; - schar deltas[8][2]; -} -CvChainPtReader; - -/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */ -#define CV_INIT_3X3_DELTAS( deltas, step, nch ) \ - ((deltas)[0] = (nch), (deltas)[1] = -(step) + (nch), \ - (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch), \ - (deltas)[4] = -(nch), (deltas)[5] = (step) - (nch), \ - (deltas)[6] = (step), (deltas)[7] = (step) + (nch)) - - -/****************************************************************************************\ -* Planar subdivisions * -\****************************************************************************************/ - -typedef size_t CvSubdiv2DEdge; - -#define CV_QUADEDGE2D_FIELDS() \ - int flags; \ - struct CvSubdiv2DPoint* pt[4]; \ - CvSubdiv2DEdge next[4]; - -#define CV_SUBDIV2D_POINT_FIELDS()\ - int flags; \ - CvSubdiv2DEdge first; \ - CvPoint2D32f pt; \ - int id; - -#define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30) - -typedef struct CvQuadEdge2D -{ - CV_QUADEDGE2D_FIELDS() -} -CvQuadEdge2D; - -typedef struct CvSubdiv2DPoint -{ - CV_SUBDIV2D_POINT_FIELDS() -} -CvSubdiv2DPoint; - -#define CV_SUBDIV2D_FIELDS() \ - CV_GRAPH_FIELDS() \ - int quad_edges; \ - int is_geometry_valid; \ - CvSubdiv2DEdge recent_edge; \ - CvPoint2D32f topleft; \ - CvPoint2D32f bottomright; - -typedef struct CvSubdiv2D -{ - CV_SUBDIV2D_FIELDS() -} -CvSubdiv2D; - - -typedef enum CvSubdiv2DPointLocation -{ - CV_PTLOC_ERROR = -2, - CV_PTLOC_OUTSIDE_RECT = -1, - CV_PTLOC_INSIDE = 0, - CV_PTLOC_VERTEX = 1, - CV_PTLOC_ON_EDGE = 2 -} -CvSubdiv2DPointLocation; - -typedef enum CvNextEdgeType -{ - CV_NEXT_AROUND_ORG = 0x00, - CV_NEXT_AROUND_DST = 0x22, - CV_PREV_AROUND_ORG = 0x11, - CV_PREV_AROUND_DST = 0x33, - CV_NEXT_AROUND_LEFT = 0x13, - CV_NEXT_AROUND_RIGHT = 0x31, - CV_PREV_AROUND_LEFT = 0x20, - CV_PREV_AROUND_RIGHT = 0x02 -} -CvNextEdgeType; - -/* get the next edge with the same origin point (counterwise) */ -#define CV_SUBDIV2D_NEXT_EDGE( edge ) (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3]) - - -/* Contour approximation algorithms */ -enum -{ - CV_POLY_APPROX_DP = 0 -}; - -/* Shape matching methods */ -enum -{ - CV_CONTOURS_MATCH_I1 =1, - CV_CONTOURS_MATCH_I2 =2, - CV_CONTOURS_MATCH_I3 =3 -}; - -/* Shape orientation */ -enum -{ - CV_CLOCKWISE =1, - CV_COUNTER_CLOCKWISE =2 -}; - - -/* Convexity defect */ -typedef struct CvConvexityDefect -{ - CvPoint* start; /* point of the contour where the defect begins */ - CvPoint* end; /* point of the contour where the defect ends */ - CvPoint* depth_point; /* the farthest from the convex hull point within the defect */ - float depth; /* distance between the farthest point and the convex hull */ -} CvConvexityDefect; - - -/* Histogram comparison methods */ -enum -{ - CV_COMP_CORREL =0, - CV_COMP_CHISQR =1, - CV_COMP_INTERSECT =2, - CV_COMP_BHATTACHARYYA =3, - CV_COMP_HELLINGER =CV_COMP_BHATTACHARYYA -}; - -/* Mask size for distance transform */ -enum -{ - CV_DIST_MASK_3 =3, - CV_DIST_MASK_5 =5, - CV_DIST_MASK_PRECISE =0 -}; - -/* Content of output label array: connected components or pixels */ -enum -{ - CV_DIST_LABEL_CCOMP = 0, - CV_DIST_LABEL_PIXEL = 1 -}; - -/* Distance types for Distance Transform and M-estimators */ -enum -{ - CV_DIST_USER =-1, /* User defined distance */ - CV_DIST_L1 =1, /* distance = |x1-x2| + |y1-y2| */ - CV_DIST_L2 =2, /* the simple euclidean distance */ - CV_DIST_C =3, /* distance = max(|x1-x2|,|y1-y2|) */ - CV_DIST_L12 =4, /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */ - CV_DIST_FAIR =5, /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */ - CV_DIST_WELSCH =6, /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */ - CV_DIST_HUBER =7 /* distance = |x| threshold ? max_value : 0 */ - CV_THRESH_BINARY_INV =1, /* value = value > threshold ? 0 : max_value */ - CV_THRESH_TRUNC =2, /* value = value > threshold ? threshold : value */ - CV_THRESH_TOZERO =3, /* value = value > threshold ? value : 0 */ - CV_THRESH_TOZERO_INV =4, /* value = value > threshold ? 0 : value */ - CV_THRESH_MASK =7, - CV_THRESH_OTSU =8 /* use Otsu algorithm to choose the optimal threshold value; - combine the flag with one of the above CV_THRESH_* values */ -}; - -/* Adaptive threshold methods */ -enum -{ - CV_ADAPTIVE_THRESH_MEAN_C =0, - CV_ADAPTIVE_THRESH_GAUSSIAN_C =1 -}; - -/* FloodFill flags */ -enum -{ - CV_FLOODFILL_FIXED_RANGE =(1 << 16), - CV_FLOODFILL_MASK_ONLY =(1 << 17) -}; - - -/* Canny edge detector flags */ -enum -{ - CV_CANNY_L2_GRADIENT =(1 << 31) -}; - -/* Variants of a Hough transform */ -enum -{ - CV_HOUGH_STANDARD =0, - CV_HOUGH_PROBABILISTIC =1, - CV_HOUGH_MULTI_SCALE =2, - CV_HOUGH_GRADIENT =3 -}; - - -/* Fast search data structures */ -struct CvFeatureTree; -struct CvLSH; -struct CvLSHOperations; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/modules/imgproc/src/_geom.h b/modules/imgproc/src/_geom.h deleted file mode 100644 index 7da6079..0000000 --- a/modules/imgproc/src/_geom.h +++ /dev/null @@ -1,72 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _CV_GEOM_H_ -#define _CV_GEOM_H_ - -/* Finds distance between two points */ -CV_INLINE float icvDistanceL2_32f( CvPoint2D32f pt1, CvPoint2D32f pt2 ) -{ - float dx = pt2.x - pt1.x; - float dy = pt2.y - pt1.y; - - return std::sqrt( dx*dx + dy*dy ); -} - - -int icvIntersectLines( double x1, double dx1, double y1, double dy1, - double x2, double dx2, double y2, double dy2, - double* t2 ); - - -void icvCreateCenterNormalLine( CvSubdiv2DEdge edge, double* a, double* b, double* c ); - -void icvIntersectLines3( double* a0, double* b0, double* c0, - double* a1, double* b1, double* c1, - CvPoint2D32f* point ); - - -/* curvature: 0 - 1-curvature, 1 - k-cosine curvature. */ -CvSeq* icvApproximateChainTC89( CvChain* chain, int header_size, CvMemStorage* storage, int method ); - -#endif /*_IPCVGEOM_H_*/ - -/* End of file. */ diff --git a/modules/imgproc/src/_list.h b/modules/imgproc/src/_list.h deleted file mode 100644 index 29acdb4..0000000 --- a/modules/imgproc/src/_list.h +++ /dev/null @@ -1,374 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _CV_LIST_H_ -#define _CV_LIST_H_ - -#include -#include - -#define CV_FORCE_INLINE CV_INLINE - -#if !defined(_LIST_INLINE) -#define _LIST_INLINE CV_FORCE_INLINE -#endif /*_LIST_INLINE*/ - -#if defined DECLARE_LIST -#if defined _MSC_VER && _MSC_VER >= 1200 - #pragma warning("DECLARE_LIST macro is already defined!") -#endif -#endif /*DECLARE_LIST*/ - -static const long default_size = 10; -static const long default_inc_size = 10; - -struct _pos -{ - void* m_pos; -#ifdef _DEBUG - struct _list* m_list; -#endif /*_DEBUG*/ -}; -typedef struct _pos CVPOS; -struct _list -{ - void* m_buffer; - void* m_first_buffer; - long m_buf_size; /* The size of the buffer */ - long m_size; /* The number of elements */ - CVPOS m_head; - CVPOS m_tail; - CVPOS m_head_free; -}; - -typedef struct _list _CVLIST; - -#define DECLARE_LIST(type, prefix)\ - /* Basic element of a list*/\ - struct prefix##element_##type\ - {\ - struct prefix##element_##type* m_prev;\ - struct prefix##element_##type* m_next;\ - type m_data;\ - };\ - typedef struct prefix##element_##type ELEMENT_##type;\ - /* Initialization and destruction*/\ - _LIST_INLINE _CVLIST* prefix##create_list_##type(long);\ - _LIST_INLINE void prefix##destroy_list_##type(_CVLIST*);\ - /* Access functions*/\ - _LIST_INLINE CVPOS prefix##get_head_pos_##type(_CVLIST*);\ - _LIST_INLINE CVPOS prefix##get_tail_pos_##type(_CVLIST*);\ - _LIST_INLINE type* prefix##get_next_##type(CVPOS*);\ - _LIST_INLINE type* prefix##get_prev_##type(CVPOS*);\ - _LIST_INLINE int prefix##is_pos_##type(CVPOS pos);\ - /* Modification functions*/\ - _LIST_INLINE void prefix##clear_list_##type(_CVLIST*);\ - _LIST_INLINE CVPOS prefix##add_head_##type(_CVLIST*, type*);\ - _LIST_INLINE CVPOS prefix##add_tail_##type(_CVLIST*, type*);\ - _LIST_INLINE void prefix##remove_head_##type(_CVLIST*);\ - _LIST_INLINE void prefix##remove_tail_##type(_CVLIST*);\ - _LIST_INLINE CVPOS prefix##insert_before_##type(_CVLIST*, CVPOS, type*);\ - _LIST_INLINE CVPOS prefix##insert_after_##type(_CVLIST*, CVPOS, type*);\ - _LIST_INLINE void prefix##remove_at_##type(_CVLIST*, CVPOS);\ - _LIST_INLINE void prefix##set_##type(CVPOS, type*);\ - _LIST_INLINE type* prefix##get_##type(CVPOS);\ - /* Statistics functions*/\ - _LIST_INLINE int prefix##get_count_##type(_CVLIST*); - -/* This macro finds a space for a new element and puts in into 'element' pointer */ -#define INSERT_NEW(element_type, l, element)\ - l->m_size++;\ - if(l->m_head_free.m_pos != NULL)\ - {\ - element = (element_type*)(l->m_head_free.m_pos);\ - if(element->m_next != NULL)\ - {\ - element->m_next->m_prev = NULL;\ - l->m_head_free.m_pos = element->m_next;\ - }\ - else\ - {\ - l->m_head_free.m_pos = NULL;\ - }\ - }\ - else\ - {\ - if(l->m_buf_size < l->m_size && l->m_head_free.m_pos == NULL)\ - {\ - *(void**)l->m_buffer = cvAlloc(l->m_buf_size*sizeof(element_type) + sizeof(void*));\ - l->m_buffer = *(void**)l->m_buffer;\ - *(void**)l->m_buffer = NULL;\ - element = (element_type*)((char*)l->m_buffer + sizeof(void*));\ - }\ - else\ - {\ - element = (element_type*)((char*)l->m_buffer + sizeof(void*)) + l->m_size - 1;\ - }\ - } - -/* This macro adds 'element' to the list of free elements*/ -#define INSERT_FREE(element_type, l, element)\ - if(l->m_head_free.m_pos != NULL)\ - {\ - ((element_type*)l->m_head_free.m_pos)->m_prev = element;\ - }\ - element->m_next = ((element_type*)l->m_head_free.m_pos);\ - l->m_head_free.m_pos = element; - - -/*#define GET_FIRST_FREE(l) ((ELEMENT_##type*)(l->m_head_free.m_pos))*/ - -#define IMPLEMENT_LIST(type, prefix)\ -_CVLIST* prefix##create_list_##type(long size)\ -{\ - _CVLIST* pl = (_CVLIST*)cvAlloc(sizeof(_CVLIST));\ - pl->m_buf_size = size > 0 ? size : default_size;\ - pl->m_first_buffer = cvAlloc(pl->m_buf_size*sizeof(ELEMENT_##type) + sizeof(void*));\ - pl->m_buffer = pl->m_first_buffer;\ - *(void**)pl->m_buffer = NULL;\ - pl->m_size = 0;\ - pl->m_head.m_pos = NULL;\ - pl->m_tail.m_pos = NULL;\ - pl->m_head_free.m_pos = NULL;\ - return pl;\ -}\ -void prefix##destroy_list_##type(_CVLIST* l)\ -{\ - void* cur = l->m_first_buffer;\ - void* next;\ - while(cur)\ - {\ - next = *(void**)cur;\ - cvFree(&cur);\ - cur = next;\ - }\ - cvFree(&l);\ -}\ -CVPOS prefix##get_head_pos_##type(_CVLIST* l)\ -{\ - return l->m_head;\ -}\ -CVPOS prefix##get_tail_pos_##type(_CVLIST* l)\ -{\ - return l->m_tail;\ -}\ -type* prefix##get_next_##type(CVPOS* pos)\ -{\ - if(pos->m_pos)\ - {\ - ELEMENT_##type* element = (ELEMENT_##type*)(pos->m_pos);\ - pos->m_pos = element->m_next;\ - return &element->m_data;\ - }\ - else\ - {\ - return NULL;\ - }\ -}\ -type* prefix##get_prev_##type(CVPOS* pos)\ -{\ - if(pos->m_pos)\ - {\ - ELEMENT_##type* element = (ELEMENT_##type*)(pos->m_pos);\ - pos->m_pos = element->m_prev;\ - return &element->m_data;\ - }\ - else\ - {\ - return NULL;\ - }\ -}\ -int prefix##is_pos_##type(CVPOS pos)\ -{\ - return !!pos.m_pos;\ -}\ -void prefix##clear_list_##type(_CVLIST* l)\ -{\ - l->m_head.m_pos = NULL;\ - l->m_tail.m_pos = NULL;\ - l->m_size = 0;\ - l->m_head_free.m_pos = NULL;\ -}\ -CVPOS prefix##add_head_##type(_CVLIST* l, type* data)\ -{\ - ELEMENT_##type* element;\ - INSERT_NEW(ELEMENT_##type, l, element);\ - element->m_prev = NULL;\ - element->m_next = (ELEMENT_##type*)(l->m_head.m_pos);\ - memcpy(&(element->m_data), data, sizeof(*data));\ - if(element->m_next)\ - {\ - element->m_next->m_prev = element;\ - }\ - else\ - {\ - l->m_tail.m_pos = element;\ - }\ - l->m_head.m_pos = element;\ - return l->m_head;\ -}\ -CVPOS prefix##add_tail_##type(_CVLIST* l, type* data)\ -{\ - ELEMENT_##type* element;\ - INSERT_NEW(ELEMENT_##type, l, element);\ - element->m_next = NULL;\ - element->m_prev = (ELEMENT_##type*)(l->m_tail.m_pos);\ - memcpy(&(element->m_data), data, sizeof(*data));\ - if(element->m_prev)\ - {\ - element->m_prev->m_next = element;\ - }\ - else\ - {\ - l->m_head.m_pos = element;\ - }\ - l->m_tail.m_pos = element;\ - return l->m_tail;\ -}\ -void prefix##remove_head_##type(_CVLIST* l)\ -{\ - ELEMENT_##type* element = ((ELEMENT_##type*)(l->m_head.m_pos));\ - if(element->m_next != NULL)\ - {\ - element->m_next->m_prev = NULL;\ - }\ - l->m_head.m_pos = element->m_next;\ - INSERT_FREE(ELEMENT_##type, l, element);\ - l->m_size--;\ -}\ -void prefix##remove_tail_##type(_CVLIST* l)\ -{\ - ELEMENT_##type* element = ((ELEMENT_##type*)(l->m_tail.m_pos));\ - if(element->m_prev != NULL)\ - {\ - element->m_prev->m_next = NULL;\ - }\ - l->m_tail.m_pos = element->m_prev;\ - INSERT_FREE(ELEMENT_##type, l, element);\ - l->m_size--;\ -}\ -CVPOS prefix##insert_after_##type(_CVLIST* l, CVPOS pos, type* data)\ -{\ - ELEMENT_##type* element;\ - ELEMENT_##type* before;\ - CVPOS newpos;\ - INSERT_NEW(ELEMENT_##type, l, element);\ - memcpy(&(element->m_data), data, sizeof(*data));\ - before = (ELEMENT_##type*)pos.m_pos;\ - element->m_prev = before;\ - element->m_next = before->m_next;\ - before->m_next = element;\ - if(element->m_next != NULL)\ - element->m_next->m_prev = element;\ - else\ - l->m_tail.m_pos = element;\ - newpos.m_pos = element;\ - return newpos;\ -}\ -CVPOS prefix##insert_before_##type(_CVLIST* l, CVPOS pos, type* data)\ -{\ - ELEMENT_##type* element;\ - ELEMENT_##type* after;\ - CVPOS newpos;\ - INSERT_NEW(ELEMENT_##type, l, element);\ - memcpy(&(element->m_data), data, sizeof(*data));\ - after = (ELEMENT_##type*)pos.m_pos;\ - element->m_prev = after->m_prev;\ - element->m_next = after;\ - after->m_prev = element;\ - if(element->m_prev != NULL)\ - element->m_prev->m_next = element;\ - else\ - l->m_head.m_pos = element;\ - newpos.m_pos = element;\ - return newpos;\ -}\ -void prefix##remove_at_##type(_CVLIST* l, CVPOS pos)\ -{\ - ELEMENT_##type* element = ((ELEMENT_##type*)pos.m_pos);\ - if(element->m_prev != NULL)\ - {\ - element->m_prev->m_next = element->m_next;\ - }\ - else\ - {\ - l->m_head.m_pos = element->m_next;\ - }\ - if(element->m_next != NULL)\ - {\ - element->m_next->m_prev = element->m_prev;\ - }\ - else\ - {\ - l->m_tail.m_pos = element->m_prev;\ - }\ - INSERT_FREE(ELEMENT_##type, l, element);\ - l->m_size--;\ -}\ -void prefix##set_##type(CVPOS pos, type* data)\ -{\ - ELEMENT_##type* element = ((ELEMENT_##type*)(pos.m_pos));\ - memcpy(&(element->m_data), data, sizeof(*data));\ -}\ -type* prefix##get_##type(CVPOS pos)\ -{\ - ELEMENT_##type* element = ((ELEMENT_##type*)(pos.m_pos));\ - return &(element->m_data);\ -}\ -int prefix##get_count_##type(_CVLIST* list)\ -{\ - return list->m_size;\ -} - -#define DECLARE_AND_IMPLEMENT_LIST(type, prefix)\ - DECLARE_LIST(type, prefix)\ - IMPLEMENT_LIST(type, prefix) - -typedef struct __index -{ - int value; - float rho, theta; -} -_index; - -DECLARE_LIST( _index, h_ ) - -#endif/*_CV_LIST_H_*/ diff --git a/modules/imgproc/src/accum.cpp b/modules/imgproc/src/accum.cpp deleted file mode 100644 index 0ed2b3f..0000000 --- a/modules/imgproc/src/accum.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -/ -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -template void -acc_( const T* src, AT* dst, const uchar* mask, int len, int cn ) -{ - int i = 0; - - if( !mask ) - { - len *= cn; - #if CV_ENABLE_UNROLLED - for( ; i <= len - 4; i += 4 ) - { - AT t0, t1; - t0 = src[i] + dst[i]; - t1 = src[i+1] + dst[i+1]; - dst[i] = t0; dst[i+1] = t1; - - t0 = src[i+2] + dst[i+2]; - t1 = src[i+3] + dst[i+3]; - dst[i+2] = t0; dst[i+3] = t1; - } - #endif - for( ; i < len; i++ ) - dst[i] += src[i]; - } - else if( cn == 1 ) - { - for( ; i < len; i++ ) - { - if( mask[i] ) - dst[i] += src[i]; - } - } - else if( cn == 3 ) - { - for( ; i < len; i++, src += 3, dst += 3 ) - { - if( mask[i] ) - { - AT t0 = src[0] + dst[0]; - AT t1 = src[1] + dst[1]; - AT t2 = src[2] + dst[2]; - - dst[0] = t0; dst[1] = t1; dst[2] = t2; - } - } - } - else - { - for( ; i < len; i++, src += cn, dst += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - dst[k] += src[k]; - } - } -} - - -template void -accSqr_( const T* src, AT* dst, const uchar* mask, int len, int cn ) -{ - int i = 0; - - if( !mask ) - { - len *= cn; - #if CV_ENABLE_UNROLLED - for( ; i <= len - 4; i += 4 ) - { - AT t0, t1; - t0 = (AT)src[i]*src[i] + dst[i]; - t1 = (AT)src[i+1]*src[i+1] + dst[i+1]; - dst[i] = t0; dst[i+1] = t1; - - t0 = (AT)src[i+2]*src[i+2] + dst[i+2]; - t1 = (AT)src[i+3]*src[i+3] + dst[i+3]; - dst[i+2] = t0; dst[i+3] = t1; - } - #endif - for( ; i < len; i++ ) - dst[i] += (AT)src[i]*src[i]; - } - else if( cn == 1 ) - { - for( ; i < len; i++ ) - { - if( mask[i] ) - dst[i] += (AT)src[i]*src[i]; - } - } - else if( cn == 3 ) - { - for( ; i < len; i++, src += 3, dst += 3 ) - { - if( mask[i] ) - { - AT t0 = (AT)src[0]*src[0] + dst[0]; - AT t1 = (AT)src[1]*src[1] + dst[1]; - AT t2 = (AT)src[2]*src[2] + dst[2]; - - dst[0] = t0; dst[1] = t1; dst[2] = t2; - } - } - } - else - { - for( ; i < len; i++, src += cn, dst += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - dst[k] += (AT)src[k]*src[k]; - } - } -} - - -template void -accProd_( const T* src1, const T* src2, AT* dst, const uchar* mask, int len, int cn ) -{ - int i = 0; - - if( !mask ) - { - len *= cn; - #if CV_ENABLE_UNROLLED - for( ; i <= len - 4; i += 4 ) - { - AT t0, t1; - t0 = (AT)src1[i]*src2[i] + dst[i]; - t1 = (AT)src1[i+1]*src2[i+1] + dst[i+1]; - dst[i] = t0; dst[i+1] = t1; - - t0 = (AT)src1[i+2]*src2[i+2] + dst[i+2]; - t1 = (AT)src1[i+3]*src2[i+3] + dst[i+3]; - dst[i+2] = t0; dst[i+3] = t1; - } - #endif - for( ; i < len; i++ ) - dst[i] += (AT)src1[i]*src2[i]; - } - else if( cn == 1 ) - { - for( ; i < len; i++ ) - { - if( mask[i] ) - dst[i] += (AT)src1[i]*src2[i]; - } - } - else if( cn == 3 ) - { - for( ; i < len; i++, src1 += 3, src2 += 3, dst += 3 ) - { - if( mask[i] ) - { - AT t0 = (AT)src1[0]*src2[0] + dst[0]; - AT t1 = (AT)src1[1]*src2[1] + dst[1]; - AT t2 = (AT)src1[2]*src2[2] + dst[2]; - - dst[0] = t0; dst[1] = t1; dst[2] = t2; - } - } - } - else - { - for( ; i < len; i++, src1 += cn, src2 += cn, dst += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - dst[k] += (AT)src1[k]*src2[k]; - } - } -} - - -template void -accW_( const T* src, AT* dst, const uchar* mask, int len, int cn, double alpha ) -{ - AT a = (AT)alpha, b = 1 - a; - int i = 0; - - if( !mask ) - { - len *= cn; - #if CV_ENABLE_UNROLLED - for( ; i <= len - 4; i += 4 ) - { - AT t0, t1; - t0 = src[i]*a + dst[i]*b; - t1 = src[i+1]*a + dst[i+1]*b; - dst[i] = t0; dst[i+1] = t1; - - t0 = src[i+2]*a + dst[i+2]*b; - t1 = src[i+3]*a + dst[i+3]*b; - dst[i+2] = t0; dst[i+3] = t1; - } - #endif - for( ; i < len; i++ ) - dst[i] = src[i]*a + dst[i]*b; - } - else if( cn == 1 ) - { - for( ; i < len; i++ ) - { - if( mask[i] ) - dst[i] = src[i]*a + dst[i]*b; - } - } - else if( cn == 3 ) - { - for( ; i < len; i++, src += 3, dst += 3 ) - { - if( mask[i] ) - { - AT t0 = src[0]*a + dst[0]*b; - AT t1 = src[1]*a + dst[1]*b; - AT t2 = src[2]*a + dst[2]*b; - - dst[0] = t0; dst[1] = t1; dst[2] = t2; - } - } - } - else - { - for( ; i < len; i++, src += cn, dst += cn ) - if( mask[i] ) - { - for( int k = 0; k < cn; k++ ) - dst[k] = src[k]*a + dst[k]*b; - } - } -} - - -#define DEF_ACC_FUNCS(suffix, type, acctype) \ -static void acc_##suffix(const type* src, acctype* dst, \ - const uchar* mask, int len, int cn) \ -{ acc_(src, dst, mask, len, cn); } \ -\ -static void accSqr_##suffix(const type* src, acctype* dst, \ - const uchar* mask, int len, int cn) \ -{ accSqr_(src, dst, mask, len, cn); } \ -\ -static void accProd_##suffix(const type* src1, const type* src2, \ - acctype* dst, const uchar* mask, int len, int cn) \ -{ accProd_(src1, src2, dst, mask, len, cn); } \ -\ -static void accW_##suffix(const type* src, acctype* dst, \ - const uchar* mask, int len, int cn, double alpha) \ -{ accW_(src, dst, mask, len, cn, alpha); } - - -DEF_ACC_FUNCS(8u32f, uchar, float) -DEF_ACC_FUNCS(8u64f, uchar, double) -DEF_ACC_FUNCS(16u32f, ushort, float) -DEF_ACC_FUNCS(16u64f, ushort, double) -DEF_ACC_FUNCS(32f, float, float) -DEF_ACC_FUNCS(32f64f, float, double) -DEF_ACC_FUNCS(64f, double, double) - - -typedef void (*AccFunc)(const uchar*, uchar*, const uchar*, int, int); -typedef void (*AccProdFunc)(const uchar*, const uchar*, uchar*, const uchar*, int, int); -typedef void (*AccWFunc)(const uchar*, uchar*, const uchar*, int, int, double); - -static AccFunc accTab[] = -{ - (AccFunc)acc_8u32f, (AccFunc)acc_8u64f, - (AccFunc)acc_16u32f, (AccFunc)acc_16u64f, - (AccFunc)acc_32f, (AccFunc)acc_32f64f, - (AccFunc)acc_64f -}; - -static AccFunc accSqrTab[] = -{ - (AccFunc)accSqr_8u32f, (AccFunc)accSqr_8u64f, - (AccFunc)accSqr_16u32f, (AccFunc)accSqr_16u64f, - (AccFunc)accSqr_32f, (AccFunc)accSqr_32f64f, - (AccFunc)accSqr_64f -}; - -static AccProdFunc accProdTab[] = -{ - (AccProdFunc)accProd_8u32f, (AccProdFunc)accProd_8u64f, - (AccProdFunc)accProd_16u32f, (AccProdFunc)accProd_16u64f, - (AccProdFunc)accProd_32f, (AccProdFunc)accProd_32f64f, - (AccProdFunc)accProd_64f -}; - -static AccWFunc accWTab[] = -{ - (AccWFunc)accW_8u32f, (AccWFunc)accW_8u64f, - (AccWFunc)accW_16u32f, (AccWFunc)accW_16u64f, - (AccWFunc)accW_32f, (AccWFunc)accW_32f64f, - (AccWFunc)accW_64f -}; - -inline int getAccTabIdx(int sdepth, int ddepth) -{ - return sdepth == CV_8U && ddepth == CV_32F ? 0 : - sdepth == CV_8U && ddepth == CV_64F ? 1 : - sdepth == CV_16U && ddepth == CV_32F ? 2 : - sdepth == CV_16U && ddepth == CV_64F ? 3 : - sdepth == CV_32F && ddepth == CV_32F ? 4 : - sdepth == CV_32F && ddepth == CV_64F ? 5 : - sdepth == CV_64F && ddepth == CV_64F ? 6 : -1; -} - -} - -void cv::accumulate( InputArray _src, InputOutputArray _dst, InputArray _mask ) -{ - Mat src = _src.getMat(), dst = _dst.getMat(), mask = _mask.getMat(); - int sdepth = src.depth(), ddepth = dst.depth(), cn = src.channels(); - - CV_Assert( dst.size == src.size && dst.channels() == cn ); - CV_Assert( mask.empty() || (mask.size == src.size && mask.type() == CV_8U) ); - - int fidx = getAccTabIdx(sdepth, ddepth); - AccFunc func = fidx >= 0 ? accTab[fidx] : 0; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, &mask, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], ptrs[1], ptrs[2], len, cn); -} - - -void cv::accumulateSquare( InputArray _src, InputOutputArray _dst, InputArray _mask ) -{ - Mat src = _src.getMat(), dst = _dst.getMat(), mask = _mask.getMat(); - int sdepth = src.depth(), ddepth = dst.depth(), cn = src.channels(); - - CV_Assert( dst.size == src.size && dst.channels() == cn ); - CV_Assert( mask.empty() || (mask.size == src.size && mask.type() == CV_8U) ); - - int fidx = getAccTabIdx(sdepth, ddepth); - AccFunc func = fidx >= 0 ? accSqrTab[fidx] : 0; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, &mask, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], ptrs[1], ptrs[2], len, cn); -} - -void cv::accumulateProduct( InputArray _src1, InputArray _src2, - InputOutputArray _dst, InputArray _mask ) -{ - Mat src1 = _src1.getMat(), src2 = _src2.getMat(), dst = _dst.getMat(), mask = _mask.getMat(); - int sdepth = src1.depth(), ddepth = dst.depth(), cn = src1.channels(); - - CV_Assert( src2.size && src1.size && src2.type() == src1.type() ); - CV_Assert( dst.size == src1.size && dst.channels() == cn ); - CV_Assert( mask.empty() || (mask.size == src1.size && mask.type() == CV_8U) ); - - int fidx = getAccTabIdx(sdepth, ddepth); - AccProdFunc func = fidx >= 0 ? accProdTab[fidx] : 0; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src1, &src2, &dst, &mask, 0}; - uchar* ptrs[4]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], ptrs[1], ptrs[2], ptrs[3], len, cn); -} - - -void cv::accumulateWeighted( InputArray _src, InputOutputArray _dst, - double alpha, InputArray _mask ) -{ - Mat src = _src.getMat(), dst = _dst.getMat(), mask = _mask.getMat(); - int sdepth = src.depth(), ddepth = dst.depth(), cn = src.channels(); - - CV_Assert( dst.size == src.size && dst.channels() == cn ); - CV_Assert( mask.empty() || (mask.size == src.size && mask.type() == CV_8U) ); - - int fidx = getAccTabIdx(sdepth, ddepth); - AccWFunc func = fidx >= 0 ? accWTab[fidx] : 0; - CV_Assert( func != 0 ); - - const Mat* arrays[] = {&src, &dst, &mask, 0}; - uchar* ptrs[3]; - NAryMatIterator it(arrays, ptrs); - int len = (int)it.size; - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - func(ptrs[0], ptrs[1], ptrs[2], len, cn, alpha); -} - - -CV_IMPL void -cvAcc( const void* arr, void* sumarr, const void* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(arr), dst = cv::cvarrToMat(sumarr), mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::accumulate( src, dst, mask ); -} - -CV_IMPL void -cvSquareAcc( const void* arr, void* sumarr, const void* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(arr), dst = cv::cvarrToMat(sumarr), mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::accumulateSquare( src, dst, mask ); -} - -CV_IMPL void -cvMultiplyAcc( const void* arr1, const void* arr2, - void* sumarr, const void* maskarr ) -{ - cv::Mat src1 = cv::cvarrToMat(arr1), src2 = cv::cvarrToMat(arr2); - cv::Mat dst = cv::cvarrToMat(sumarr), mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::accumulateProduct( src1, src2, dst, mask ); -} - -CV_IMPL void -cvRunningAvg( const void* arr, void* sumarr, double alpha, const void* maskarr ) -{ - cv::Mat src = cv::cvarrToMat(arr), dst = cv::cvarrToMat(sumarr), mask; - if( maskarr ) - mask = cv::cvarrToMat(maskarr); - cv::accumulateWeighted( src, dst, alpha, mask ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/approx.cpp b/modules/imgproc/src/approx.cpp deleted file mode 100644 index 8bd76c3..0000000 --- a/modules/imgproc/src/approx.cpp +++ /dev/null @@ -1,807 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -/****************************************************************************************\ -* Chain Approximation * -\****************************************************************************************/ - -typedef struct _CvPtInfo -{ - CvPoint pt; - int k; /* support region */ - int s; /* curvature value */ - struct _CvPtInfo *next; -} -_CvPtInfo; - - -/* curvature: 0 - 1-curvature, 1 - k-cosine curvature. */ -CvSeq* icvApproximateChainTC89( CvChain* chain, int header_size, - CvMemStorage* storage, int method ) -{ - static const int abs_diff[] = { 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1 }; - - cv::AutoBuffer<_CvPtInfo> buf(chain->total + 8); - - _CvPtInfo temp; - _CvPtInfo *array = buf, *first = 0, *current = 0, *prev_current = 0; - int i, j, i1, i2, s, len; - int count = chain->total; - - CvChainPtReader reader; - CvSeqWriter writer; - CvPoint pt = chain->origin; - - CV_Assert( CV_IS_SEQ_CHAIN_CONTOUR( chain )); - CV_Assert( header_size >= (int)sizeof(CvContour) ); - - cvStartWriteSeq( (chain->flags & ~CV_SEQ_ELTYPE_MASK) | CV_SEQ_ELTYPE_POINT, - header_size, sizeof( CvPoint ), storage, &writer ); - - if( chain->total == 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - return cvEndWriteSeq( &writer ); - } - - cvStartReadChainPoints( chain, &reader ); - - temp.next = 0; - current = &temp; - - /* Pass 0. - Restores all the digital curve points from the chain code. - Removes the points (from the resultant polygon) - that have zero 1-curvature */ - for( i = 0; i < count; i++ ) - { - int prev_code = *reader.prev_elem; - - reader.prev_elem = reader.ptr; - CV_READ_CHAIN_POINT( pt, reader ); - - /* calc 1-curvature */ - s = abs_diff[reader.code - prev_code + 7]; - - if( method <= CV_CHAIN_APPROX_SIMPLE ) - { - if( method == CV_CHAIN_APPROX_NONE || s != 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - } - else - { - if( s != 0 ) - current = current->next = array + i; - array[i].s = s; - array[i].pt = pt; - } - } - - //assert( pt.x == chain->origin.x && pt.y == chain->origin.y ); - - if( method <= CV_CHAIN_APPROX_SIMPLE ) - return cvEndWriteSeq( &writer ); - - current->next = 0; - - len = i; - current = temp.next; - - assert( current ); - - /* Pass 1. - Determines support region for all the remained points */ - do - { - CvPoint pt0; - int k, l = 0, d_num = 0; - - i = (int)(current - array); - pt0 = array[i].pt; - - /* determine support region */ - for( k = 1;; k++ ) - { - int lk, dk_num; - int dx, dy; - Cv32suf d; - - assert( k <= len ); - - /* calc indices */ - i1 = i - k; - i1 += i1 < 0 ? len : 0; - i2 = i + k; - i2 -= i2 >= len ? len : 0; - - dx = array[i2].pt.x - array[i1].pt.x; - dy = array[i2].pt.y - array[i1].pt.y; - - /* distance between p_(i - k) and p_(i + k) */ - lk = dx * dx + dy * dy; - - /* distance between p_i and the line (p_(i-k), p_(i+k)) */ - dk_num = (pt0.x - array[i1].pt.x) * dy - (pt0.y - array[i1].pt.y) * dx; - d.f = (float) (((double) d_num) * lk - ((double) dk_num) * l); - - if( k > 1 && (l >= lk || ((d_num > 0 && d.i <= 0) || (d_num < 0 && d.i >= 0)))) - break; - - d_num = dk_num; - l = lk; - } - - current->k = --k; - - /* determine cosine curvature if it should be used */ - if( method == CV_CHAIN_APPROX_TC89_KCOS ) - { - /* calc k-cosine curvature */ - for( j = k, s = 0; j > 0; j-- ) - { - double temp_num; - int dx1, dy1, dx2, dy2; - Cv32suf sk; - - i1 = i - j; - i1 += i1 < 0 ? len : 0; - i2 = i + j; - i2 -= i2 >= len ? len : 0; - - dx1 = array[i1].pt.x - pt0.x; - dy1 = array[i1].pt.y - pt0.y; - dx2 = array[i2].pt.x - pt0.x; - dy2 = array[i2].pt.y - pt0.y; - - if( (dx1 | dy1) == 0 || (dx2 | dy2) == 0 ) - break; - - temp_num = dx1 * dx2 + dy1 * dy2; - temp_num = - (float) (temp_num / - sqrt( ((double)dx1 * dx1 + (double)dy1 * dy1) * - ((double)dx2 * dx2 + (double)dy2 * dy2) )); - sk.f = (float) (temp_num + 1.1); - - assert( 0 <= sk.f && sk.f <= 2.2 ); - if( j < k && sk.i <= s ) - break; - - s = sk.i; - } - current->s = s; - } - current = current->next; - } - while( current != 0 ); - - prev_current = &temp; - current = temp.next; - - /* Pass 2. - Performs non-maxima suppression */ - do - { - int k2 = current->k >> 1; - - s = current->s; - i = (int)(current - array); - - for( j = 1; j <= k2; j++ ) - { - i2 = i - j; - i2 += i2 < 0 ? len : 0; - - if( array[i2].s > s ) - break; - - i2 = i + j; - i2 -= i2 >= len ? len : 0; - - if( array[i2].s > s ) - break; - } - - if( j <= k2 ) /* exclude point */ - { - prev_current->next = current->next; - current->s = 0; /* "clear" point */ - } - else - prev_current = current; - current = current->next; - } - while( current != 0 ); - - /* Pass 3. - Removes non-dominant points with 1-length support region */ - current = temp.next; - assert( current ); - prev_current = &temp; - - do - { - if( current->k == 1 ) - { - s = current->s; - i = (int)(current - array); - - i1 = i - 1; - i1 += i1 < 0 ? len : 0; - - i2 = i + 1; - i2 -= i2 >= len ? len : 0; - - if( s <= array[i1].s || s <= array[i2].s ) - { - prev_current->next = current->next; - current->s = 0; - } - else - prev_current = current; - } - else - prev_current = current; - current = current->next; - } - while( current != 0 ); - - if( method == CV_CHAIN_APPROX_TC89_KCOS ) - goto copy_vect; - - /* Pass 4. - Cleans remained couples of points */ - assert( temp.next ); - - if( array[0].s != 0 && array[len - 1].s != 0 ) /* specific case */ - { - for( i1 = 1; i1 < len && array[i1].s != 0; i1++ ) - { - array[i1 - 1].s = 0; - } - if( i1 == len ) - goto copy_vect; /* all points survived */ - i1--; - - for( i2 = len - 2; i2 > 0 && array[i2].s != 0; i2-- ) - { - array[i2].next = 0; - array[i2 + 1].s = 0; - } - i2++; - - if( i1 == 0 && i2 == len - 1 ) /* only two points */ - { - i1 = (int)(array[0].next - array); - array[len] = array[0]; /* move to the end */ - array[len].next = 0; - array[len - 1].next = array + len; - } - temp.next = array + i1; - } - - current = temp.next; - first = prev_current = &temp; - count = 1; - - /* do last pass */ - do - { - if( current->next == 0 || current->next - current != 1 ) - { - if( count >= 2 ) - { - if( count == 2 ) - { - int s1 = prev_current->s; - int s2 = current->s; - - if( s1 > s2 || (s1 == s2 && prev_current->k <= current->k) ) - /* remove second */ - prev_current->next = current->next; - else - /* remove first */ - first->next = current; - } - else - first->next->next = current; - } - first = current; - count = 1; - } - else - count++; - prev_current = current; - current = current->next; - } - while( current != 0 ); - -copy_vect: - - // gather points - current = temp.next; - assert( current ); - - do - { - CV_WRITE_SEQ_ELEM( current->pt, writer ); - current = current->next; - } - while( current != 0 ); - - return cvEndWriteSeq( &writer ); -} - - -/*Applies some approximation algorithm to chain-coded contour(s) and - converts it/them to polygonal representation */ -CV_IMPL CvSeq* -cvApproxChains( CvSeq* src_seq, - CvMemStorage* storage, - int method, - double /*parameter*/, - int minimal_perimeter, - int recursive ) -{ - CvSeq *prev_contour = 0, *parent = 0; - CvSeq *dst_seq = 0; - - if( !src_seq || !storage ) - CV_Error( CV_StsNullPtr, "" ); - if( method > CV_CHAIN_APPROX_TC89_KCOS || method <= 0 || minimal_perimeter < 0 ) - CV_Error( CV_StsOutOfRange, "" ); - - while( src_seq != 0 ) - { - int len = src_seq->total; - - if( len >= minimal_perimeter ) - { - CvSeq *contour = 0; - - switch( method ) - { - case CV_CHAIN_APPROX_NONE: - case CV_CHAIN_APPROX_SIMPLE: - case CV_CHAIN_APPROX_TC89_L1: - case CV_CHAIN_APPROX_TC89_KCOS: - contour = icvApproximateChainTC89( (CvChain *) src_seq, sizeof( CvContour ), storage, method ); - break; - default: - CV_Error( CV_StsOutOfRange, "" ); - } - - if( contour->total > 0 ) - { - cvBoundingRect( contour, 1 ); - - contour->v_prev = parent; - contour->h_prev = prev_contour; - - if( prev_contour ) - prev_contour->h_next = contour; - else if( parent ) - parent->v_next = contour; - prev_contour = contour; - if( !dst_seq ) - dst_seq = prev_contour; - } - else /* if resultant contour has zero length, skip it */ - { - len = -1; - } - } - - if( !recursive ) - break; - - if( src_seq->v_next && len >= minimal_perimeter ) - { - assert( prev_contour != 0 ); - parent = prev_contour; - prev_contour = 0; - src_seq = src_seq->v_next; - } - else - { - while( src_seq->h_next == 0 ) - { - src_seq = src_seq->v_prev; - if( src_seq == 0 ) - break; - prev_contour = parent; - if( parent ) - parent = parent->v_prev; - } - if( src_seq ) - src_seq = src_seq->h_next; - } - } - - return dst_seq; -} - - -/****************************************************************************************\ -* Polygonal Approximation * -\****************************************************************************************/ - -/* Ramer-Douglas-Peucker algorithm for polygon simplification */ - -/* the version for integer point coordinates */ -template static CvSeq* -icvApproxPolyDP( CvSeq* src_contour, int header_size, - CvMemStorage* storage, double eps ) -{ - typedef cv::Point_ PT; - int init_iters = 3; - CvSlice slice = {0, 0}, right_slice = {0, 0}; - CvSeqReader reader, reader2; - CvSeqWriter writer; - PT start_pt(-1000000, -1000000), end_pt(0, 0), pt(0,0); - int i = 0, j, count = src_contour->total, new_count; - int is_closed = CV_IS_SEQ_CLOSED( src_contour ); - bool le_eps = false; - CvMemStorage* temp_storage = 0; - CvSeq* stack = 0; - CvSeq* dst_contour; - - assert( CV_SEQ_ELTYPE(src_contour) == cv::DataType::type ); - cvStartWriteSeq( src_contour->flags, header_size, sizeof(pt), storage, &writer ); - - if( src_contour->total == 0 ) - return cvEndWriteSeq( &writer ); - - temp_storage = cvCreateChildMemStorage( storage ); - - assert( src_contour->first != 0 ); - stack = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvSlice), temp_storage ); - eps *= eps; - cvStartReadSeq( src_contour, &reader, 0 ); - - if( !is_closed ) - { - right_slice.start_index = count; - end_pt = *(PT*)(reader.ptr); - start_pt = *(PT*)cvGetSeqElem( src_contour, -1 ); - - if( start_pt.x != end_pt.x || start_pt.y != end_pt.y ) - { - slice.start_index = 0; - slice.end_index = count - 1; - cvSeqPush( stack, &slice ); - } - else - { - is_closed = 1; - init_iters = 1; - } - } - - if( is_closed ) - { - /* 1. Find approximately two farthest points of the contour */ - right_slice.start_index = 0; - - for( i = 0; i < init_iters; i++ ) - { - double dist, max_dist = 0; - cvSetSeqReaderPos( &reader, right_slice.start_index, 1 ); - CV_READ_SEQ_ELEM( start_pt, reader ); /* read the first point */ - - for( j = 1; j < count; j++ ) - { - double dx, dy; - - CV_READ_SEQ_ELEM( pt, reader ); - dx = pt.x - start_pt.x; - dy = pt.y - start_pt.y; - - dist = dx * dx + dy * dy; - - if( dist > max_dist ) - { - max_dist = dist; - right_slice.start_index = j; - } - } - - le_eps = max_dist <= eps; - } - - /* 2. initialize the stack */ - if( !le_eps ) - { - slice.start_index = cvGetSeqReaderPos( &reader ); - slice.end_index = right_slice.start_index += slice.start_index; - - right_slice.start_index -= right_slice.start_index >= count ? count : 0; - right_slice.end_index = slice.start_index; - if( right_slice.end_index < right_slice.start_index ) - right_slice.end_index += count; - - cvSeqPush( stack, &right_slice ); - cvSeqPush( stack, &slice ); - } - else - CV_WRITE_SEQ_ELEM( start_pt, writer ); - } - - /* 3. run recursive process */ - while( stack->total != 0 ) - { - cvSeqPop( stack, &slice ); - - cvSetSeqReaderPos( &reader, slice.end_index ); - CV_READ_SEQ_ELEM( end_pt, reader ); - - cvSetSeqReaderPos( &reader, slice.start_index ); - CV_READ_SEQ_ELEM( start_pt, reader ); - - if( slice.end_index > slice.start_index + 1 ) - { - double dx, dy, dist, max_dist = 0; - - dx = end_pt.x - start_pt.x; - dy = end_pt.y - start_pt.y; - - assert( dx != 0 || dy != 0 ); - - for( i = slice.start_index + 1; i < slice.end_index; i++ ) - { - CV_READ_SEQ_ELEM( pt, reader ); - dist = fabs((pt.y - start_pt.y) * dx - (pt.x - start_pt.x) * dy); - - if( dist > max_dist ) - { - max_dist = dist; - right_slice.start_index = i; - } - } - - le_eps = max_dist * max_dist <= eps * (dx * dx + dy * dy); - } - else - { - assert( slice.end_index > slice.start_index ); - le_eps = true; - /* read starting point */ - cvSetSeqReaderPos( &reader, slice.start_index ); - CV_READ_SEQ_ELEM( start_pt, reader ); - } - - if( le_eps ) - { - CV_WRITE_SEQ_ELEM( start_pt, writer ); - } - else - { - right_slice.end_index = slice.end_index; - slice.end_index = right_slice.start_index; - cvSeqPush( stack, &right_slice ); - cvSeqPush( stack, &slice ); - } - } - - is_closed = CV_IS_SEQ_CLOSED( src_contour ); - if( !is_closed ) - CV_WRITE_SEQ_ELEM( end_pt, writer ); - - dst_contour = cvEndWriteSeq( &writer ); - - // last stage: do final clean-up of the approximated contour - - // remove extra points on the [almost] stright lines. - - cvStartReadSeq( dst_contour, &reader, is_closed ); - CV_READ_SEQ_ELEM( start_pt, reader ); - - reader2 = reader; - CV_READ_SEQ_ELEM( pt, reader ); - - new_count = count = dst_contour->total; - for( i = !is_closed; i < count - !is_closed && new_count > 2; i++ ) - { - double dx, dy, dist, successive_inner_product; - CV_READ_SEQ_ELEM( end_pt, reader ); - - dx = end_pt.x - start_pt.x; - dy = end_pt.y - start_pt.y; - dist = fabs((pt.x - start_pt.x)*dy - (pt.y - start_pt.y)*dx); - successive_inner_product = (pt.x - start_pt.x) * (end_pt.x - pt.x) + - (pt.y - start_pt.y) * (end_pt.y - pt.y); - - if( dist * dist <= 0.5*eps*(dx*dx + dy*dy) && dx != 0 && dy != 0 && - successive_inner_product >= 0 ) - { - new_count--; - *((PT*)reader2.ptr) = start_pt = end_pt; - CV_NEXT_SEQ_ELEM( sizeof(pt), reader2 ); - CV_READ_SEQ_ELEM( pt, reader ); - i++; - continue; - } - *((PT*)reader2.ptr) = start_pt = pt; - CV_NEXT_SEQ_ELEM( sizeof(pt), reader2 ); - pt = end_pt; - } - - if( !is_closed ) - *((PT*)reader2.ptr) = pt; - - if( new_count < count ) - cvSeqPopMulti( dst_contour, 0, count - new_count ); - - cvReleaseMemStorage( &temp_storage ); - return dst_contour; -} - - -CV_IMPL CvSeq* -cvApproxPoly( const void* array, int header_size, - CvMemStorage* storage, int method, - double parameter, int parameter2 ) -{ - CvSeq* dst_seq = 0; - CvSeq *prev_contour = 0, *parent = 0; - CvContour contour_header; - CvSeq* src_seq = 0; - CvSeqBlock block; - int recursive = 0; - - if( CV_IS_SEQ( array )) - { - src_seq = (CvSeq*)array; - if( !CV_IS_SEQ_POLYLINE( src_seq )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - - recursive = parameter2; - - if( !storage ) - storage = src_seq->storage; - } - else - { - src_seq = cvPointSeqFromMat( - CV_SEQ_KIND_CURVE | (parameter2 ? CV_SEQ_FLAG_CLOSED : 0), - array, &contour_header, &block ); - } - - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer " ); - - if( header_size < 0 ) - CV_Error( CV_StsOutOfRange, "header_size is negative. " - "Pass 0 to make the destination header_size == input header_size" ); - - if( header_size == 0 ) - header_size = src_seq->header_size; - - if( !CV_IS_SEQ_POLYLINE( src_seq )) - { - if( CV_IS_SEQ_CHAIN( src_seq )) - { - CV_Error( CV_StsBadArg, "Input curves are not polygonal. " - "Use cvApproxChains first" ); - } - else - { - CV_Error( CV_StsBadArg, "Input curves have uknown type" ); - } - } - - if( header_size == 0 ) - header_size = src_seq->header_size; - - if( header_size < (int)sizeof(CvContour) ) - CV_Error( CV_StsBadSize, "New header size must be non-less than sizeof(CvContour)" ); - - if( method != CV_POLY_APPROX_DP ) - CV_Error( CV_StsOutOfRange, "Unknown approximation method" ); - - while( src_seq != 0 ) - { - CvSeq *contour = 0; - - switch (method) - { - case CV_POLY_APPROX_DP: - if( parameter < 0 ) - CV_Error( CV_StsOutOfRange, "Accuracy must be non-negative" ); - - if( CV_SEQ_ELTYPE(src_seq) == CV_32SC2 ) - contour = icvApproxPolyDP( src_seq, header_size, storage, parameter ); - else - contour = icvApproxPolyDP( src_seq, header_size, storage, parameter ); - break; - default: - assert(0); - CV_Error( CV_StsBadArg, "Invalid approximation method" ); - } - - assert( contour ); - - if( header_size >= (int)sizeof(CvContour)) - cvBoundingRect( contour, 1 ); - - contour->v_prev = parent; - contour->h_prev = prev_contour; - - if( prev_contour ) - prev_contour->h_next = contour; - else if( parent ) - parent->v_next = contour; - prev_contour = contour; - if( !dst_seq ) - dst_seq = prev_contour; - - if( !recursive ) - break; - - if( src_seq->v_next ) - { - assert( prev_contour != 0 ); - parent = prev_contour; - prev_contour = 0; - src_seq = src_seq->v_next; - } - else - { - while( src_seq->h_next == 0 ) - { - src_seq = src_seq->v_prev; - if( src_seq == 0 ) - break; - prev_contour = parent; - if( parent ) - parent = parent->v_prev; - } - if( src_seq ) - src_seq = src_seq->h_next; - } - } - - return dst_seq; -} - -/* End of file. */ diff --git a/modules/imgproc/src/canny.cpp b/modules/imgproc/src/canny.cpp deleted file mode 100644 index 2161db9..0000000 --- a/modules/imgproc/src/canny.cpp +++ /dev/null @@ -1,339 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/* -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -#define USE_IPP_CANNY 1 -#else -#undef USE_IPP_CANNY -#endif -*/ -#ifdef USE_IPP_CANNY -namespace cv -{ -static bool ippCanny(const Mat& _src, Mat& _dst, float low, float high) -{ - int size = 0, size1 = 0; - IppiSize roi = { _src.cols, _src.rows }; - - ippiFilterSobelNegVertGetBufferSize_8u16s_C1R(roi, ippMskSize3x3, &size); - ippiFilterSobelHorizGetBufferSize_8u16s_C1R(roi, ippMskSize3x3, &size1); - size = std::max(size, size1); - ippiCannyGetSize(roi, &size1); - size = std::max(size, size1); - - AutoBuffer buf(size + 64); - uchar* buffer = alignPtr((uchar*)buf, 32); - - Mat _dx(_src.rows, _src.cols, CV_16S); - if( ippiFilterSobelNegVertBorder_8u16s_C1R(_src.data, (int)_src.step, - _dx.ptr(), (int)_dx.step, roi, - ippMskSize3x3, ippBorderRepl, 0, buffer) < 0 ) - return false; - - Mat _dy(_src.rows, _src.cols, CV_16S); - if( ippiFilterSobelHorizBorder_8u16s_C1R(_src.data, (int)_src.step, - _dy.ptr(), (int)_dy.step, roi, - ippMskSize3x3, ippBorderRepl, 0, buffer) < 0 ) - return false; - - if( ippiCanny_16s8u_C1R(_dx.ptr(), (int)_dx.step, - _dy.ptr(), (int)_dy.step, - _dst.data, (int)_dst.step, roi, low, high, buffer) < 0 ) - return false; - return true; -} -} -#endif - -void cv::Canny( InputArray _src, OutputArray _dst, - double low_thresh, double high_thresh, - int aperture_size, bool L2gradient ) -{ - Mat src = _src.getMat(); - CV_Assert( src.depth() == CV_8U ); - - _dst.create(src.size(), CV_8U); - Mat dst = _dst.getMat(); - - if (!L2gradient && (aperture_size & CV_CANNY_L2_GRADIENT) == CV_CANNY_L2_GRADIENT) - { - //backward compatibility - aperture_size &= ~CV_CANNY_L2_GRADIENT; - L2gradient = true; - } - - if ((aperture_size & 1) == 0 || (aperture_size != -1 && (aperture_size < 3 || aperture_size > 7))) - CV_Error(CV_StsBadFlag, ""); - - if (low_thresh > high_thresh) - std::swap(low_thresh, high_thresh); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::canny(src, dst, low_thresh, high_thresh, aperture_size, L2gradient)) - return; -#endif - -#ifdef USE_IPP_CANNY - if( aperture_size == 3 && !L2gradient && - ippCanny(src, dst, (float)low_thresh, (float)high_thresh) ) - return; -#endif - - const int cn = src.channels(); - Mat dx(src.rows, src.cols, CV_16SC(cn)); - Mat dy(src.rows, src.cols, CV_16SC(cn)); - - Sobel(src, dx, CV_16S, 1, 0, aperture_size, 1, 0, cv::BORDER_REPLICATE); - Sobel(src, dy, CV_16S, 0, 1, aperture_size, 1, 0, cv::BORDER_REPLICATE); - - if (L2gradient) - { - low_thresh = std::min(32767.0, low_thresh); - high_thresh = std::min(32767.0, high_thresh); - - if (low_thresh > 0) low_thresh *= low_thresh; - if (high_thresh > 0) high_thresh *= high_thresh; - } - int low = cvFloor(low_thresh); - int high = cvFloor(high_thresh); - - ptrdiff_t mapstep = src.cols + 2; - AutoBuffer buffer((src.cols+2)*(src.rows+2) + cn * mapstep * 3 * sizeof(int)); - - int* mag_buf[3]; - mag_buf[0] = (int*)(uchar*)buffer; - mag_buf[1] = mag_buf[0] + mapstep*cn; - mag_buf[2] = mag_buf[1] + mapstep*cn; - memset(mag_buf[0], 0, /* cn* */mapstep*sizeof(int)); - - uchar* map = (uchar*)(mag_buf[2] + mapstep*cn); - memset(map, 1, mapstep); - memset(map + mapstep*(src.rows + 1), 1, mapstep); - - int maxsize = std::max(1 << 10, src.cols * src.rows / 10); - std::vector stack(maxsize); - uchar **stack_top = &stack[0]; - uchar **stack_bottom = &stack[0]; - - /* sector numbers - (Top-Left Origin) - - 1 2 3 - * * * - * * * - 0*******0 - * * * - * * * - 3 2 1 - */ - - #define CANNY_PUSH(d) *(d) = uchar(2), *stack_top++ = (d) - #define CANNY_POP(d) (d) = *--stack_top - - // calculate magnitude and angle of gradient, perform non-maxima suppression. - // fill the map with one of the following values: - // 0 - the pixel might belong to an edge - // 1 - the pixel can not belong to an edge - // 2 - the pixel does belong to an edge - for (int i = 0; i <= src.rows; i++) - { - int* _norm = mag_buf[(i > 0) + 1] + 1; - if (i < src.rows) - { - short* _dx = dx.ptr(i); - short* _dy = dy.ptr(i); - - if (!L2gradient) - { - for (int j = 0; j < src.cols*cn; j++) - _norm[j] = std::abs(int(_dx[j])) + std::abs(int(_dy[j])); - } - else - { - for (int j = 0; j < src.cols*cn; j++) - _norm[j] = int(_dx[j])*_dx[j] + int(_dy[j])*_dy[j]; - } - - if (cn > 1) - { - for(int j = 0, jn = 0; j < src.cols; ++j, jn += cn) - { - int maxIdx = jn; - for(int k = 1; k < cn; ++k) - if(_norm[jn + k] > _norm[maxIdx]) maxIdx = jn + k; - _norm[j] = _norm[maxIdx]; - _dx[j] = _dx[maxIdx]; - _dy[j] = _dy[maxIdx]; - } - } - _norm[-1] = _norm[src.cols] = 0; - } - else - memset(_norm-1, 0, /* cn* */mapstep*sizeof(int)); - - // at the very beginning we do not have a complete ring - // buffer of 3 magnitude rows for non-maxima suppression - if (i == 0) - continue; - - uchar* _map = map + mapstep*i + 1; - _map[-1] = _map[src.cols] = 1; - - int* _mag = mag_buf[1] + 1; // take the central row - ptrdiff_t magstep1 = mag_buf[2] - mag_buf[1]; - ptrdiff_t magstep2 = mag_buf[0] - mag_buf[1]; - - const short* _x = dx.ptr(i-1); - const short* _y = dy.ptr(i-1); - - if ((stack_top - stack_bottom) + src.cols > maxsize) - { - int sz = (int)(stack_top - stack_bottom); - maxsize = maxsize * 3/2; - stack.resize(maxsize); - stack_bottom = &stack[0]; - stack_top = stack_bottom + sz; - } - - int prev_flag = 0; - for (int j = 0; j < src.cols; j++) - { - #define CANNY_SHIFT 15 - const int TG22 = (int)(0.4142135623730950488016887242097*(1< low) - { - int xs = _x[j]; - int ys = _y[j]; - int x = std::abs(xs); - int y = std::abs(ys) << CANNY_SHIFT; - - int tg22x = x * TG22; - - if (y < tg22x) - { - if (m > _mag[j-1] && m >= _mag[j+1]) goto __ocv_canny_push; - } - else - { - int tg67x = tg22x + (x << (CANNY_SHIFT+1)); - if (y > tg67x) - { - if (m > _mag[j+magstep2] && m >= _mag[j+magstep1]) goto __ocv_canny_push; - } - else - { - int s = (xs ^ ys) < 0 ? -1 : 1; - if (m > _mag[j+magstep2-s] && m > _mag[j+magstep1+s]) goto __ocv_canny_push; - } - } - } - prev_flag = 0; - _map[j] = uchar(1); - continue; -__ocv_canny_push: - if (!prev_flag && m > high && _map[j-mapstep] != 2) - { - CANNY_PUSH(_map + j); - prev_flag = 1; - } - else - _map[j] = 0; - } - - // scroll the ring buffer - _mag = mag_buf[0]; - mag_buf[0] = mag_buf[1]; - mag_buf[1] = mag_buf[2]; - mag_buf[2] = _mag; - } - - // now track the edges (hysteresis thresholding) - while (stack_top > stack_bottom) - { - uchar* m; - if ((stack_top - stack_bottom) + 8 > maxsize) - { - int sz = (int)(stack_top - stack_bottom); - maxsize = maxsize * 3/2; - stack.resize(maxsize); - stack_bottom = &stack[0]; - stack_top = stack_bottom + sz; - } - - CANNY_POP(m); - - if (!m[-1]) CANNY_PUSH(m - 1); - if (!m[1]) CANNY_PUSH(m + 1); - if (!m[-mapstep-1]) CANNY_PUSH(m - mapstep - 1); - if (!m[-mapstep]) CANNY_PUSH(m - mapstep); - if (!m[-mapstep+1]) CANNY_PUSH(m - mapstep + 1); - if (!m[mapstep-1]) CANNY_PUSH(m + mapstep - 1); - if (!m[mapstep]) CANNY_PUSH(m + mapstep); - if (!m[mapstep+1]) CANNY_PUSH(m + mapstep + 1); - } - - // the final pass, form the final image - const uchar* pmap = map + mapstep + 1; - uchar* pdst = dst.ptr(); - for (int i = 0; i < src.rows; i++, pmap += mapstep, pdst += dst.step) - { - for (int j = 0; j < src.cols; j++) - pdst[j] = (uchar)-(pmap[j] >> 1); - } -} - -void cvCanny( const CvArr* image, CvArr* edges, double threshold1, - double threshold2, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(image), dst = cv::cvarrToMat(edges); - CV_Assert( src.size == dst.size && src.depth() == CV_8U && dst.type() == CV_8U ); - - cv::Canny(src, dst, threshold1, threshold2, aperture_size & 255, - (aperture_size & CV_CANNY_L2_GRADIENT) != 0); -} - -/* End of file. */ diff --git a/modules/imgproc/src/clahe.cpp b/modules/imgproc/src/clahe.cpp deleted file mode 100644 index 9ecf792..0000000 --- a/modules/imgproc/src/clahe.cpp +++ /dev/null @@ -1,333 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2013, NVIDIA Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 holders or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -// ---------------------------------------------------------------------- -// CLAHE - -namespace -{ - class CLAHE_CalcLut_Body : public cv::ParallelLoopBody - { - public: - CLAHE_CalcLut_Body(const cv::Mat& src, cv::Mat& lut, cv::Size tileSize, int tilesX, int clipLimit, float lutScale) : - src_(src), lut_(lut), tileSize_(tileSize), tilesX_(tilesX), clipLimit_(clipLimit), lutScale_(lutScale) - { - } - - void operator ()(const cv::Range& range) const; - - private: - cv::Mat src_; - mutable cv::Mat lut_; - - cv::Size tileSize_; - int tilesX_; - int clipLimit_; - float lutScale_; - }; - - void CLAHE_CalcLut_Body::operator ()(const cv::Range& range) const - { - const int histSize = 256; - - uchar* tileLut = lut_.ptr(range.start); - const size_t lut_step = lut_.step; - - for (int k = range.start; k < range.end; ++k, tileLut += lut_step) - { - const int ty = k / tilesX_; - const int tx = k % tilesX_; - - // retrieve tile submatrix - - cv::Rect tileROI; - tileROI.x = tx * tileSize_.width; - tileROI.y = ty * tileSize_.height; - tileROI.width = tileSize_.width; - tileROI.height = tileSize_.height; - - const cv::Mat tile = src_(tileROI); - - // calc histogram - - int tileHist[histSize] = {0, }; - - int height = tileROI.height; - const size_t sstep = tile.step; - for (const uchar* ptr = tile.ptr(0); height--; ptr += sstep) - { - int x = 0; - for (; x <= tileROI.width - 4; x += 4) - { - int t0 = ptr[x], t1 = ptr[x+1]; - tileHist[t0]++; tileHist[t1]++; - t0 = ptr[x+2]; t1 = ptr[x+3]; - tileHist[t0]++; tileHist[t1]++; - } - - for (; x < tileROI.width; ++x) - tileHist[ptr[x]]++; - } - - // clip histogram - - if (clipLimit_ > 0) - { - // how many pixels were clipped - int clipped = 0; - for (int i = 0; i < histSize; ++i) - { - if (tileHist[i] > clipLimit_) - { - clipped += tileHist[i] - clipLimit_; - tileHist[i] = clipLimit_; - } - } - - // redistribute clipped pixels - int redistBatch = clipped / histSize; - int residual = clipped - redistBatch * histSize; - - for (int i = 0; i < histSize; ++i) - tileHist[i] += redistBatch; - - for (int i = 0; i < residual; ++i) - tileHist[i]++; - } - - // calc Lut - - int sum = 0; - for (int i = 0; i < histSize; ++i) - { - sum += tileHist[i]; - tileLut[i] = cv::saturate_cast(sum * lutScale_); - } - } - } - - class CLAHE_Interpolation_Body : public cv::ParallelLoopBody - { - public: - CLAHE_Interpolation_Body(const cv::Mat& src, cv::Mat& dst, const cv::Mat& lut, cv::Size tileSize, int tilesX, int tilesY) : - src_(src), dst_(dst), lut_(lut), tileSize_(tileSize), tilesX_(tilesX), tilesY_(tilesY) - { - } - - void operator ()(const cv::Range& range) const; - - private: - cv::Mat src_; - mutable cv::Mat dst_; - cv::Mat lut_; - - cv::Size tileSize_; - int tilesX_; - int tilesY_; - }; - - void CLAHE_Interpolation_Body::operator ()(const cv::Range& range) const - { - const size_t lut_step = lut_.step; - - for (int y = range.start; y < range.end; ++y) - { - const uchar* srcRow = src_.ptr(y); - uchar* dstRow = dst_.ptr(y); - - const float tyf = (static_cast(y) / tileSize_.height) - 0.5f; - - int ty1 = cvFloor(tyf); - int ty2 = ty1 + 1; - - const float ya = tyf - ty1; - - ty1 = std::max(ty1, 0); - ty2 = std::min(ty2, tilesY_ - 1); - - const uchar* lutPlane1 = lut_.ptr(ty1 * tilesX_); - const uchar* lutPlane2 = lut_.ptr(ty2 * tilesX_); - - for (int x = 0; x < src_.cols; ++x) - { - const float txf = (static_cast(x) / tileSize_.width) - 0.5f; - - int tx1 = cvFloor(txf); - int tx2 = tx1 + 1; - - const float xa = txf - tx1; - - tx1 = std::max(tx1, 0); - tx2 = std::min(tx2, tilesX_ - 1); - - const int srcVal = srcRow[x]; - - const size_t ind1 = tx1 * lut_step + srcVal; - const size_t ind2 = tx2 * lut_step + srcVal; - - float res = 0; - - res += lutPlane1[ind1] * ((1.0f - xa) * (1.0f - ya)); - res += lutPlane1[ind2] * ((xa) * (1.0f - ya)); - res += lutPlane2[ind1] * ((1.0f - xa) * (ya)); - res += lutPlane2[ind2] * ((xa) * (ya)); - - dstRow[x] = cv::saturate_cast(res); - } - } - } - - class CLAHE_Impl : public cv::CLAHE - { - public: - CLAHE_Impl(double clipLimit = 40.0, int tilesX = 8, int tilesY = 8); - - cv::AlgorithmInfo* info() const; - - void apply(cv::InputArray src, cv::OutputArray dst); - - void setClipLimit(double clipLimit); - double getClipLimit() const; - - void setTilesGridSize(cv::Size tileGridSize); - cv::Size getTilesGridSize() const; - - void collectGarbage(); - - private: - double clipLimit_; - int tilesX_; - int tilesY_; - - cv::Mat srcExt_; - cv::Mat lut_; - }; - - CLAHE_Impl::CLAHE_Impl(double clipLimit, int tilesX, int tilesY) : - clipLimit_(clipLimit), tilesX_(tilesX), tilesY_(tilesY) - { - } - - CV_INIT_ALGORITHM(CLAHE_Impl, "CLAHE", - obj.info()->addParam(obj, "clipLimit", obj.clipLimit_); - obj.info()->addParam(obj, "tilesX", obj.tilesX_); - obj.info()->addParam(obj, "tilesY", obj.tilesY_)) - - void CLAHE_Impl::apply(cv::InputArray _src, cv::OutputArray _dst) - { - cv::Mat src = _src.getMat(); - - CV_Assert( src.type() == CV_8UC1 ); - - _dst.create( src.size(), src.type() ); - cv::Mat dst = _dst.getMat(); - - const int histSize = 256; - - lut_.create(tilesX_ * tilesY_, histSize, CV_8UC1); - - cv::Size tileSize; - cv::Mat srcForLut; - - if (src.cols % tilesX_ == 0 && src.rows % tilesY_ == 0) - { - tileSize = cv::Size(src.cols / tilesX_, src.rows / tilesY_); - srcForLut = src; - } - else - { - cv::copyMakeBorder(src, srcExt_, 0, tilesY_ - (src.rows % tilesY_), 0, tilesX_ - (src.cols % tilesX_), cv::BORDER_REFLECT_101); - - tileSize = cv::Size(srcExt_.cols / tilesX_, srcExt_.rows / tilesY_); - srcForLut = srcExt_; - } - - const int tileSizeTotal = tileSize.area(); - const float lutScale = static_cast(histSize - 1) / tileSizeTotal; - - int clipLimit = 0; - if (clipLimit_ > 0.0) - { - clipLimit = static_cast(clipLimit_ * tileSizeTotal / histSize); - clipLimit = std::max(clipLimit, 1); - } - - CLAHE_CalcLut_Body calcLutBody(srcForLut, lut_, tileSize, tilesX_, clipLimit, lutScale); - cv::parallel_for_(cv::Range(0, tilesX_ * tilesY_), calcLutBody); - - CLAHE_Interpolation_Body interpolationBody(src, dst, lut_, tileSize, tilesX_, tilesY_); - cv::parallel_for_(cv::Range(0, src.rows), interpolationBody); - } - - void CLAHE_Impl::setClipLimit(double clipLimit) - { - clipLimit_ = clipLimit; - } - - double CLAHE_Impl::getClipLimit() const - { - return clipLimit_; - } - - void CLAHE_Impl::setTilesGridSize(cv::Size tileGridSize) - { - tilesX_ = tileGridSize.width; - tilesY_ = tileGridSize.height; - } - - cv::Size CLAHE_Impl::getTilesGridSize() const - { - return cv::Size(tilesX_, tilesY_); - } - - void CLAHE_Impl::collectGarbage() - { - srcExt_.release(); - lut_.release(); - } -} - -cv::Ptr cv::createCLAHE(double clipLimit, cv::Size tileGridSize) -{ - return new CLAHE_Impl(clipLimit, tileGridSize.width, tileGridSize.height); -} diff --git a/modules/imgproc/src/color.cpp b/modules/imgproc/src/color.cpp deleted file mode 100644 index 08f27ae..0000000 --- a/modules/imgproc/src/color.cpp +++ /dev/null @@ -1,4426 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2010, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/********************************* COPYRIGHT NOTICE *******************************\ - The function for RGB to Lab conversion is based on the MATLAB script - RGB2Lab.m translated by Mark Ruzon from C code by Yossi Rubner, 23 September 1997. - See the page [http://vision.stanford.edu/~ruzon/software/rgblab.html] -\**********************************************************************************/ - -/********************************* COPYRIGHT NOTICE *******************************\ - Original code for Bayer->BGR/RGB conversion is provided by Dirk Schaefer - from MD-Mathematische Dienste GmbH. Below is the copyright notice: - - IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - By downloading, copying, installing or using the software you agree - to this license. If you do not agree to this license, do not download, - install, copy or use the software. - - Contributors License Agreement: - - Copyright (c) 2002, - MD-Mathematische Dienste GmbH - Im Defdahl 5-10 - 44141 Dortmund - Germany - www.md-it.de - - Redistribution and use in source and binary forms, - with or without modification, are permitted provided - that the following conditions are met: - - Redistributions of source code must retain - the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - The name of Contributor may not 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 CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (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 "precomp.hpp" -#include -#include - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -#define MAX_IPP8u 255 -#define MAX_IPP16u 65535 -#define MAX_IPP32f 1.0 -static IppStatus sts = ippInit(); -#endif - -namespace cv -{ - -// computes cubic spline coefficients for a function: (xi=i, yi=f[i]), i=0..n -template static void splineBuild(const _Tp* f, int n, _Tp* tab) -{ - _Tp cn = 0; - int i; - tab[0] = tab[1] = (_Tp)0; - - for(i = 1; i < n-1; i++) - { - _Tp t = 3*(f[i+1] - 2*f[i] + f[i-1]); - _Tp l = 1/(4 - tab[(i-1)*4]); - tab[i*4] = l; tab[i*4+1] = (t - tab[(i-1)*4+1])*l; - } - - for(i = n-1; i >= 0; i--) - { - _Tp c = tab[i*4+1] - tab[i*4]*cn; - _Tp b = f[i+1] - f[i] - (cn + c*2)*(_Tp)0.3333333333333333; - _Tp d = (cn - c)*(_Tp)0.3333333333333333; - tab[i*4] = f[i]; tab[i*4+1] = b; - tab[i*4+2] = c; tab[i*4+3] = d; - cn = c; - } -} - -// interpolates value of a function at x, 0 <= x <= n using a cubic spline. -template static inline _Tp splineInterpolate(_Tp x, const _Tp* tab, int n) -{ - // don't touch this function without urgent need - some versions of gcc fail to inline it correctly - int ix = std::min(std::max(int(x), 0), n-1); - x -= ix; - tab += ix*4; - return ((tab[3]*x + tab[2])*x + tab[1])*x + tab[0]; -} - - -template struct ColorChannel -{ - typedef float worktype_f; - static _Tp max() { return std::numeric_limits<_Tp>::max(); } - static _Tp half() { return (_Tp)(max()/2 + 1); } -}; - -template<> struct ColorChannel -{ - typedef float worktype_f; - static float max() { return 1.f; } - static float half() { return 0.5f; } -}; - -/*template<> struct ColorChannel -{ - typedef double worktype_f; - static double max() { return 1.; } - static double half() { return 0.5; } -};*/ - - -///////////////////////////// Top-level template function //////////////////////////////// - -template -class CvtColorLoop_Invoker : public ParallelLoopBody -{ - typedef typename Cvt::channel_type _Tp; -public: - - CvtColorLoop_Invoker(const Mat& _src, Mat& _dst, const Cvt& _cvt) : - ParallelLoopBody(), src(_src), dst(_dst), cvt(_cvt) - { - } - - virtual void operator()(const Range& range) const - { - const uchar* yS = src.ptr(range.start); - uchar* yD = dst.ptr(range.start); - - for( int i = range.start; i < range.end; ++i, yS += src.step, yD += dst.step ) - cvt((const _Tp*)yS, (_Tp*)yD, src.cols); - } - -private: - const Mat& src; - Mat& dst; - const Cvt& cvt; - - const CvtColorLoop_Invoker& operator= (const CvtColorLoop_Invoker&); -}; - -template -void CvtColorLoop(const Mat& src, Mat& dst, const Cvt& cvt) -{ - parallel_for_(Range(0, src.rows), CvtColorLoop_Invoker(src, dst, cvt), src.total()/(double)(1<<16) ); -} - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -typedef IppStatus (CV_STDCALL* ippiReorderFunc)(const void *, int, void *, int, IppiSize, const int *); -typedef IppStatus (CV_STDCALL* ippiGeneralFunc)(const void *, int, void *, int, IppiSize); -typedef IppStatus (CV_STDCALL* ippiColor2GrayFunc)(const void *, int, void *, int, IppiSize, const Ipp32f *); - -template -class CvtColorIPPLoop_Invoker : public ParallelLoopBody -{ -public: - - CvtColorIPPLoop_Invoker(const Mat& _src, Mat& _dst, const Cvt& _cvt, bool *_ok) : - ParallelLoopBody(), src(_src), dst(_dst), cvt(_cvt), ok(_ok) - { - *ok = true; - } - - virtual void operator()(const Range& range) const - { - const void *yS = src.ptr(range.start); - void *yD = dst.ptr(range.start); - if( !cvt(yS, (int)src.step[0], yD, (int)dst.step[0], src.cols, range.end - range.start) ) - *ok = false; - } - -private: - const Mat& src; - Mat& dst; - const Cvt& cvt; - bool *ok; - - const CvtColorIPPLoop_Invoker& operator= (const CvtColorIPPLoop_Invoker&); -}; - -template -bool CvtColorIPPLoop(const Mat& src, Mat& dst, const Cvt& cvt) -{ - bool ok; - parallel_for_(Range(0, src.rows), CvtColorIPPLoop_Invoker(src, dst, cvt, &ok), src.total()/(double)(1<<16) ); - return ok; -} - -template -bool CvtColorIPPLoopCopy(Mat& src, Mat& dst, const Cvt& cvt) -{ - Mat temp; - Mat &source = src; - if( src.data == dst.data ) - { - src.copyTo(temp); - source = temp; - } - bool ok; - parallel_for_(Range(0, source.rows), CvtColorIPPLoop_Invoker(source, dst, cvt, &ok), source.total()/(double)(1<<16) ); - return ok; -} - -static IppStatus CV_STDCALL ippiSwapChannels_8u_C3C4Rf(const Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, - IppiSize roiSize, const int *dstOrder) -{ - return ippiSwapChannels_8u_C3C4R(pSrc, srcStep, pDst, dstStep, roiSize, dstOrder, MAX_IPP8u); -} - -static IppStatus CV_STDCALL ippiSwapChannels_16u_C3C4Rf(const Ipp16u* pSrc, int srcStep, Ipp16u* pDst, int dstStep, - IppiSize roiSize, const int *dstOrder) -{ - return ippiSwapChannels_16u_C3C4R(pSrc, srcStep, pDst, dstStep, roiSize, dstOrder, MAX_IPP16u); -} - -static IppStatus CV_STDCALL ippiSwapChannels_32f_C3C4Rf(const Ipp32f* pSrc, int srcStep, Ipp32f* pDst, int dstStep, - IppiSize roiSize, const int *dstOrder) -{ - return ippiSwapChannels_32f_C3C4R(pSrc, srcStep, pDst, dstStep, roiSize, dstOrder, MAX_IPP32f); -} - -static ippiReorderFunc ippiSwapChannelsC3C4RTab[] = -{ - (ippiReorderFunc)ippiSwapChannels_8u_C3C4Rf, 0, (ippiReorderFunc)ippiSwapChannels_16u_C3C4Rf, 0, - 0, (ippiReorderFunc)ippiSwapChannels_32f_C3C4Rf, 0, 0 -}; - -static ippiGeneralFunc ippiCopyAC4C3RTab[] = -{ - (ippiGeneralFunc)ippiCopy_8u_AC4C3R, 0, (ippiGeneralFunc)ippiCopy_16u_AC4C3R, 0, - 0, (ippiGeneralFunc)ippiCopy_32f_AC4C3R, 0, 0 -}; - -static ippiReorderFunc ippiSwapChannelsC4C3RTab[] = -{ - (ippiReorderFunc)ippiSwapChannels_8u_C4C3R, 0, (ippiReorderFunc)ippiSwapChannels_16u_C4C3R, 0, - 0, (ippiReorderFunc)ippiSwapChannels_32f_C4C3R, 0, 0 -}; - -static ippiReorderFunc ippiSwapChannelsC3RTab[] = -{ - (ippiReorderFunc)ippiSwapChannels_8u_C3R, 0, (ippiReorderFunc)ippiSwapChannels_16u_C3R, 0, - 0, (ippiReorderFunc)ippiSwapChannels_32f_C3R, 0, 0 -}; - -static ippiReorderFunc ippiSwapChannelsC4RTab[] = -{ - (ippiReorderFunc)ippiSwapChannels_8u_AC4R, 0, (ippiReorderFunc)ippiSwapChannels_16u_AC4R, 0, - 0, (ippiReorderFunc)ippiSwapChannels_32f_AC4R, 0, 0 -}; - -static ippiColor2GrayFunc ippiColor2GrayC3Tab[] = -{ - (ippiColor2GrayFunc)ippiColorToGray_8u_C3C1R, 0, (ippiColor2GrayFunc)ippiColorToGray_16u_C3C1R, 0, - 0, (ippiColor2GrayFunc)ippiColorToGray_32f_C3C1R, 0, 0 -}; - -static ippiColor2GrayFunc ippiColor2GrayC4Tab[] = -{ - (ippiColor2GrayFunc)ippiColorToGray_8u_AC4C1R, 0, (ippiColor2GrayFunc)ippiColorToGray_16u_AC4C1R, 0, - 0, (ippiColor2GrayFunc)ippiColorToGray_32f_AC4C1R, 0, 0 -}; - -static ippiGeneralFunc ippiRGB2GrayC3Tab[] = -{ - (ippiGeneralFunc)ippiRGBToGray_8u_C3C1R, 0, (ippiGeneralFunc)ippiRGBToGray_16u_C3C1R, 0, - 0, (ippiGeneralFunc)ippiRGBToGray_32f_C3C1R, 0, 0 -}; - -static ippiGeneralFunc ippiRGB2GrayC4Tab[] = -{ - (ippiGeneralFunc)ippiRGBToGray_8u_AC4C1R, 0, (ippiGeneralFunc)ippiRGBToGray_16u_AC4C1R, 0, - 0, (ippiGeneralFunc)ippiRGBToGray_32f_AC4C1R, 0, 0 -}; - -static ippiGeneralFunc ippiCopyP3C3RTab[] = -{ - (ippiGeneralFunc)ippiCopy_8u_P3C3R, 0, (ippiGeneralFunc)ippiCopy_16u_P3C3R, 0, - 0, (ippiGeneralFunc)ippiCopy_32f_P3C3R, 0, 0 -}; - -static ippiGeneralFunc ippiRGB2XYZTab[] = -{ - (ippiGeneralFunc)ippiRGBToXYZ_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToXYZ_16u_C3R, 0, - 0, (ippiGeneralFunc)ippiRGBToXYZ_32f_C3R, 0, 0 -}; - -static ippiGeneralFunc ippiXYZ2RGBTab[] = -{ - (ippiGeneralFunc)ippiXYZToRGB_8u_C3R, 0, (ippiGeneralFunc)ippiXYZToRGB_16u_C3R, 0, - 0, (ippiGeneralFunc)ippiXYZToRGB_32f_C3R, 0, 0 -}; - -static ippiGeneralFunc ippiRGB2HSVTab[] = -{ - (ippiGeneralFunc)ippiRGBToHSV_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToHSV_16u_C3R, 0, - 0, 0, 0, 0 -}; - -static ippiGeneralFunc ippiHSV2RGBTab[] = -{ - (ippiGeneralFunc)ippiHSVToRGB_8u_C3R, 0, (ippiGeneralFunc)ippiHSVToRGB_16u_C3R, 0, - 0, 0, 0, 0 -}; - -static ippiGeneralFunc ippiRGB2HLSTab[] = -{ - (ippiGeneralFunc)ippiRGBToHLS_8u_C3R, 0, (ippiGeneralFunc)ippiRGBToHLS_16u_C3R, 0, - 0, (ippiGeneralFunc)ippiRGBToHLS_32f_C3R, 0, 0 -}; - -static ippiGeneralFunc ippiHLS2RGBTab[] = -{ - (ippiGeneralFunc)ippiHLSToRGB_8u_C3R, 0, (ippiGeneralFunc)ippiHLSToRGB_16u_C3R, 0, - 0, (ippiGeneralFunc)ippiHLSToRGB_32f_C3R, 0, 0 -}; - -struct IPPGeneralFunctor -{ - IPPGeneralFunctor(ippiGeneralFunc _func) : func(_func){} - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - return func(src, srcStep, dst, dstStep, ippiSize(cols, rows)) >= 0; - } -private: - ippiGeneralFunc func; -}; - -struct IPPReorderFunctor -{ - IPPReorderFunctor(ippiReorderFunc _func, int _order0, int _order1, int _order2) : func(_func) - { - order[0] = _order0; - order[1] = _order1; - order[2] = _order2; - order[3] = 3; - } - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - return func(src, srcStep, dst, dstStep, ippiSize(cols, rows), order) >= 0; - } -private: - ippiReorderFunc func; - int order[4]; -}; - -struct IPPColor2GrayFunctor -{ - IPPColor2GrayFunctor(ippiColor2GrayFunc _func) : func(_func) - { - coeffs[0] = 0.114f; - coeffs[1] = 0.587f; - coeffs[2] = 0.299f; - } - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - return func(src, srcStep, dst, dstStep, ippiSize(cols, rows), coeffs) >= 0; - } -private: - ippiColor2GrayFunc func; - Ipp32f coeffs[3]; -}; - -struct IPPGray2BGRFunctor -{ - IPPGray2BGRFunctor(ippiGeneralFunc _func) : func(_func){} - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - const void* srcarray[3] = { src, src, src }; - return func(srcarray, srcStep, dst, dstStep, ippiSize(cols, rows)) >= 0; - } -private: - ippiGeneralFunc func; -}; - -struct IPPGray2BGRAFunctor -{ - IPPGray2BGRAFunctor(ippiGeneralFunc _func1, ippiReorderFunc _func2, int _depth) : func1(_func1), func2(_func2), depth(_depth){} - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - const void* srcarray[3] = { src, src, src }; - Mat temp(rows, cols, CV_MAKETYPE(depth, 3)); - if(func1(srcarray, srcStep, temp.data, (int)temp.step[0], ippiSize(cols, rows)) < 0) - return false; - int order[4] = {0, 1, 2, 3}; - return func2(temp.data, (int)temp.step[0], dst, dstStep, ippiSize(cols, rows), order) >= 0; - } -private: - ippiGeneralFunc func1; - ippiReorderFunc func2; - int depth; -}; - -struct IPPReorderGeneralFunctor -{ - IPPReorderGeneralFunctor(ippiReorderFunc _func1, ippiGeneralFunc _func2, int _order0, int _order1, int _order2, int _depth) : func1(_func1), func2(_func2), depth(_depth) - { - order[0] = _order0; - order[1] = _order1; - order[2] = _order2; - order[3] = 3; - } - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - Mat temp; - temp.create(rows, cols, CV_MAKETYPE(depth, 3)); - if(func1(src, srcStep, temp.data, (int)temp.step[0], ippiSize(cols, rows), order) < 0) - return false; - return func2(temp.data, (int)temp.step[0], dst, dstStep, ippiSize(cols, rows)) >= 0; - } -private: - ippiReorderFunc func1; - ippiGeneralFunc func2; - int order[4]; - int depth; -}; - -struct IPPGeneralReorderFunctor -{ - IPPGeneralReorderFunctor(ippiGeneralFunc _func1, ippiReorderFunc _func2, int _order0, int _order1, int _order2, int _depth) : func1(_func1), func2(_func2), depth(_depth) - { - order[0] = _order0; - order[1] = _order1; - order[2] = _order2; - order[3] = 3; - } - bool operator()(const void *src, int srcStep, void *dst, int dstStep, int cols, int rows) const - { - Mat temp; - temp.create(rows, cols, CV_MAKETYPE(depth, 3)); - if(func1(src, srcStep, temp.data, (int)temp.step[0], ippiSize(cols, rows)) < 0) - return false; - return func2(temp.data, (int)temp.step[0], dst, dstStep, ippiSize(cols, rows), order) >= 0; - } -private: - ippiGeneralFunc func1; - ippiReorderFunc func2; - int order[4]; - int depth; -}; -#endif - -////////////////// Various 3/4-channel to 3/4-channel RGB transformations ///////////////// - -template struct RGB2RGB -{ - typedef _Tp channel_type; - - RGB2RGB(int _srccn, int _dstcn, int _blueIdx) : srccn(_srccn), dstcn(_dstcn), blueIdx(_blueIdx) {} - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn, dcn = dstcn, bidx = blueIdx; - if( dcn == 3 ) - { - n *= 3; - for( int i = 0; i < n; i += 3, src += scn ) - { - _Tp t0 = src[bidx], t1 = src[1], t2 = src[bidx ^ 2]; - dst[i] = t0; dst[i+1] = t1; dst[i+2] = t2; - } - } - else if( scn == 3 ) - { - n *= 3; - _Tp alpha = ColorChannel<_Tp>::max(); - for( int i = 0; i < n; i += 3, dst += 4 ) - { - _Tp t0 = src[i], t1 = src[i+1], t2 = src[i+2]; - dst[bidx] = t0; dst[1] = t1; dst[bidx^2] = t2; dst[3] = alpha; - } - } - else - { - n *= 4; - for( int i = 0; i < n; i += 4 ) - { - _Tp t0 = src[i], t1 = src[i+1], t2 = src[i+2], t3 = src[i+3]; - dst[i] = t2; dst[i+1] = t1; dst[i+2] = t0; dst[i+3] = t3; - } - } - } - - int srccn, dstcn, blueIdx; -}; - -/////////// Transforming 16-bit (565 or 555) RGB to/from 24/32-bit (888[8]) RGB ////////// - -struct RGB5x52RGB -{ - typedef uchar channel_type; - - RGB5x52RGB(int _dstcn, int _blueIdx, int _greenBits) - : dstcn(_dstcn), blueIdx(_blueIdx), greenBits(_greenBits) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int dcn = dstcn, bidx = blueIdx; - if( greenBits == 6 ) - for( int i = 0; i < n; i++, dst += dcn ) - { - unsigned t = ((const ushort*)src)[i]; - dst[bidx] = (uchar)(t << 3); - dst[1] = (uchar)((t >> 3) & ~3); - dst[bidx ^ 2] = (uchar)((t >> 8) & ~7); - if( dcn == 4 ) - dst[3] = 255; - } - else - for( int i = 0; i < n; i++, dst += dcn ) - { - unsigned t = ((const ushort*)src)[i]; - dst[bidx] = (uchar)(t << 3); - dst[1] = (uchar)((t >> 2) & ~7); - dst[bidx ^ 2] = (uchar)((t >> 7) & ~7); - if( dcn == 4 ) - dst[3] = t & 0x8000 ? 255 : 0; - } - } - - int dstcn, blueIdx, greenBits; -}; - - -struct RGB2RGB5x5 -{ - typedef uchar channel_type; - - RGB2RGB5x5(int _srccn, int _blueIdx, int _greenBits) - : srccn(_srccn), blueIdx(_blueIdx), greenBits(_greenBits) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int scn = srccn, bidx = blueIdx; - if( greenBits == 6 ) - for( int i = 0; i < n; i++, src += scn ) - { - ((ushort*)dst)[i] = (ushort)((src[bidx] >> 3)|((src[1]&~3) << 3)|((src[bidx^2]&~7) << 8)); - } - else if( scn == 3 ) - for( int i = 0; i < n; i++, src += 3 ) - { - ((ushort*)dst)[i] = (ushort)((src[bidx] >> 3)|((src[1]&~7) << 2)|((src[bidx^2]&~7) << 7)); - } - else - for( int i = 0; i < n; i++, src += 4 ) - { - ((ushort*)dst)[i] = (ushort)((src[bidx] >> 3)|((src[1]&~7) << 2)| - ((src[bidx^2]&~7) << 7)|(src[3] ? 0x8000 : 0)); - } - } - - int srccn, blueIdx, greenBits; -}; - -///////////////////////////////// Color to/from Grayscale //////////////////////////////// - -template -struct Gray2RGB -{ - typedef _Tp channel_type; - - Gray2RGB(int _dstcn) : dstcn(_dstcn) {} - void operator()(const _Tp* src, _Tp* dst, int n) const - { - if( dstcn == 3 ) - for( int i = 0; i < n; i++, dst += 3 ) - { - dst[0] = dst[1] = dst[2] = src[i]; - } - else - { - _Tp alpha = ColorChannel<_Tp>::max(); - for( int i = 0; i < n; i++, dst += 4 ) - { - dst[0] = dst[1] = dst[2] = src[i]; - dst[3] = alpha; - } - } - } - - int dstcn; -}; - - -struct Gray2RGB5x5 -{ - typedef uchar channel_type; - - Gray2RGB5x5(int _greenBits) : greenBits(_greenBits) {} - void operator()(const uchar* src, uchar* dst, int n) const - { - if( greenBits == 6 ) - for( int i = 0; i < n; i++ ) - { - int t = src[i]; - ((ushort*)dst)[i] = (ushort)((t >> 3)|((t & ~3) << 3)|((t & ~7) << 8)); - } - else - for( int i = 0; i < n; i++ ) - { - int t = src[i] >> 3; - ((ushort*)dst)[i] = (ushort)(t|(t << 5)|(t << 10)); - } - } - int greenBits; -}; - - -#undef R2Y -#undef G2Y -#undef B2Y - -enum -{ - yuv_shift = 14, - xyz_shift = 12, - R2Y = 4899, - G2Y = 9617, - B2Y = 1868, - BLOCK_SIZE = 256 -}; - - -struct RGB5x52Gray -{ - typedef uchar channel_type; - - RGB5x52Gray(int _greenBits) : greenBits(_greenBits) {} - void operator()(const uchar* src, uchar* dst, int n) const - { - if( greenBits == 6 ) - for( int i = 0; i < n; i++ ) - { - int t = ((ushort*)src)[i]; - dst[i] = (uchar)CV_DESCALE(((t << 3) & 0xf8)*B2Y + - ((t >> 3) & 0xfc)*G2Y + - ((t >> 8) & 0xf8)*R2Y, yuv_shift); - } - else - for( int i = 0; i < n; i++ ) - { - int t = ((ushort*)src)[i]; - dst[i] = (uchar)CV_DESCALE(((t << 3) & 0xf8)*B2Y + - ((t >> 2) & 0xf8)*G2Y + - ((t >> 7) & 0xf8)*R2Y, yuv_shift); - } - } - int greenBits; -}; - - -template struct RGB2Gray -{ - typedef _Tp channel_type; - - RGB2Gray(int _srccn, int blueIdx, const float* _coeffs) : srccn(_srccn) - { - static const float coeffs0[] = { 0.299f, 0.587f, 0.114f }; - memcpy( coeffs, _coeffs ? _coeffs : coeffs0, 3*sizeof(coeffs[0]) ); - if(blueIdx == 0) - std::swap(coeffs[0], coeffs[2]); - } - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn; - float cb = coeffs[0], cg = coeffs[1], cr = coeffs[2]; - for(int i = 0; i < n; i++, src += scn) - dst[i] = saturate_cast<_Tp>(src[0]*cb + src[1]*cg + src[2]*cr); - } - int srccn; - float coeffs[3]; -}; - - -template<> struct RGB2Gray -{ - typedef uchar channel_type; - - RGB2Gray(int _srccn, int blueIdx, const int* coeffs) : srccn(_srccn) - { - const int coeffs0[] = { R2Y, G2Y, B2Y }; - if(!coeffs) coeffs = coeffs0; - - int b = 0, g = 0, r = (1 << (yuv_shift-1)); - int db = coeffs[blueIdx^2], dg = coeffs[1], dr = coeffs[blueIdx]; - - for( int i = 0; i < 256; i++, b += db, g += dg, r += dr ) - { - tab[i] = b; - tab[i+256] = g; - tab[i+512] = r; - } - } - void operator()(const uchar* src, uchar* dst, int n) const - { - int scn = srccn; - const int* _tab = tab; - for(int i = 0; i < n; i++, src += scn) - dst[i] = (uchar)((_tab[src[0]] + _tab[src[1]+256] + _tab[src[2]+512]) >> yuv_shift); - } - int srccn; - int tab[256*3]; -}; - - -template<> struct RGB2Gray -{ - typedef ushort channel_type; - - RGB2Gray(int _srccn, int blueIdx, const int* _coeffs) : srccn(_srccn) - { - static const int coeffs0[] = { R2Y, G2Y, B2Y }; - memcpy(coeffs, _coeffs ? _coeffs : coeffs0, 3*sizeof(coeffs[0])); - if( blueIdx == 0 ) - std::swap(coeffs[0], coeffs[2]); - } - - void operator()(const ushort* src, ushort* dst, int n) const - { - int scn = srccn, cb = coeffs[0], cg = coeffs[1], cr = coeffs[2]; - for(int i = 0; i < n; i++, src += scn) - dst[i] = (ushort)CV_DESCALE((unsigned)(src[0]*cb + src[1]*cg + src[2]*cr), yuv_shift); - } - int srccn; - int coeffs[3]; -}; - - -///////////////////////////////////// RGB <-> YCrCb ////////////////////////////////////// - -template struct RGB2YCrCb_f -{ - typedef _Tp channel_type; - - RGB2YCrCb_f(int _srccn, int _blueIdx, const float* _coeffs) : srccn(_srccn), blueIdx(_blueIdx) - { - static const float coeffs0[] = {0.299f, 0.587f, 0.114f, 0.713f, 0.564f}; - memcpy(coeffs, _coeffs ? _coeffs : coeffs0, 5*sizeof(coeffs[0])); - if(blueIdx==0) std::swap(coeffs[0], coeffs[2]); - } - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn, bidx = blueIdx; - const _Tp delta = ColorChannel<_Tp>::half(); - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], C3 = coeffs[3], C4 = coeffs[4]; - n *= 3; - for(int i = 0; i < n; i += 3, src += scn) - { - _Tp Y = saturate_cast<_Tp>(src[0]*C0 + src[1]*C1 + src[2]*C2); - _Tp Cr = saturate_cast<_Tp>((src[bidx^2] - Y)*C3 + delta); - _Tp Cb = saturate_cast<_Tp>((src[bidx] - Y)*C4 + delta); - dst[i] = Y; dst[i+1] = Cr; dst[i+2] = Cb; - } - } - int srccn, blueIdx; - float coeffs[5]; -}; - - -template struct RGB2YCrCb_i -{ - typedef _Tp channel_type; - - RGB2YCrCb_i(int _srccn, int _blueIdx, const int* _coeffs) - : srccn(_srccn), blueIdx(_blueIdx) - { - static const int coeffs0[] = {R2Y, G2Y, B2Y, 11682, 9241}; - memcpy(coeffs, _coeffs ? _coeffs : coeffs0, 5*sizeof(coeffs[0])); - if(blueIdx==0) std::swap(coeffs[0], coeffs[2]); - } - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn, bidx = blueIdx; - int C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], C3 = coeffs[3], C4 = coeffs[4]; - int delta = ColorChannel<_Tp>::half()*(1 << yuv_shift); - n *= 3; - for(int i = 0; i < n; i += 3, src += scn) - { - int Y = CV_DESCALE(src[0]*C0 + src[1]*C1 + src[2]*C2, yuv_shift); - int Cr = CV_DESCALE((src[bidx^2] - Y)*C3 + delta, yuv_shift); - int Cb = CV_DESCALE((src[bidx] - Y)*C4 + delta, yuv_shift); - dst[i] = saturate_cast<_Tp>(Y); - dst[i+1] = saturate_cast<_Tp>(Cr); - dst[i+2] = saturate_cast<_Tp>(Cb); - } - } - int srccn, blueIdx; - int coeffs[5]; -}; - - -template struct YCrCb2RGB_f -{ - typedef _Tp channel_type; - - YCrCb2RGB_f(int _dstcn, int _blueIdx, const float* _coeffs) - : dstcn(_dstcn), blueIdx(_blueIdx) - { - static const float coeffs0[] = {1.403f, -0.714f, -0.344f, 1.773f}; - memcpy(coeffs, _coeffs ? _coeffs : coeffs0, 4*sizeof(coeffs[0])); - } - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int dcn = dstcn, bidx = blueIdx; - const _Tp delta = ColorChannel<_Tp>::half(), alpha = ColorChannel<_Tp>::max(); - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], C3 = coeffs[3]; - n *= 3; - for(int i = 0; i < n; i += 3, dst += dcn) - { - _Tp Y = src[i]; - _Tp Cr = src[i+1]; - _Tp Cb = src[i+2]; - - _Tp b = saturate_cast<_Tp>(Y + (Cb - delta)*C3); - _Tp g = saturate_cast<_Tp>(Y + (Cb - delta)*C2 + (Cr - delta)*C1); - _Tp r = saturate_cast<_Tp>(Y + (Cr - delta)*C0); - - dst[bidx] = b; dst[1] = g; dst[bidx^2] = r; - if( dcn == 4 ) - dst[3] = alpha; - } - } - int dstcn, blueIdx; - float coeffs[4]; -}; - - -template struct YCrCb2RGB_i -{ - typedef _Tp channel_type; - - YCrCb2RGB_i(int _dstcn, int _blueIdx, const int* _coeffs) - : dstcn(_dstcn), blueIdx(_blueIdx) - { - static const int coeffs0[] = {22987, -11698, -5636, 29049}; - memcpy(coeffs, _coeffs ? _coeffs : coeffs0, 4*sizeof(coeffs[0])); - } - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int dcn = dstcn, bidx = blueIdx; - const _Tp delta = ColorChannel<_Tp>::half(), alpha = ColorChannel<_Tp>::max(); - int C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], C3 = coeffs[3]; - n *= 3; - for(int i = 0; i < n; i += 3, dst += dcn) - { - _Tp Y = src[i]; - _Tp Cr = src[i+1]; - _Tp Cb = src[i+2]; - - int b = Y + CV_DESCALE((Cb - delta)*C3, yuv_shift); - int g = Y + CV_DESCALE((Cb - delta)*C2 + (Cr - delta)*C1, yuv_shift); - int r = Y + CV_DESCALE((Cr - delta)*C0, yuv_shift); - - dst[bidx] = saturate_cast<_Tp>(b); - dst[1] = saturate_cast<_Tp>(g); - dst[bidx^2] = saturate_cast<_Tp>(r); - if( dcn == 4 ) - dst[3] = alpha; - } - } - int dstcn, blueIdx; - int coeffs[4]; -}; - - -////////////////////////////////////// RGB <-> XYZ /////////////////////////////////////// - -static const float sRGB2XYZ_D65[] = -{ - 0.412453f, 0.357580f, 0.180423f, - 0.212671f, 0.715160f, 0.072169f, - 0.019334f, 0.119193f, 0.950227f -}; - -static const float XYZ2sRGB_D65[] = -{ - 3.240479f, -1.53715f, -0.498535f, - -0.969256f, 1.875991f, 0.041556f, - 0.055648f, -0.204043f, 1.057311f -}; - -template struct RGB2XYZ_f -{ - typedef _Tp channel_type; - - RGB2XYZ_f(int _srccn, int blueIdx, const float* _coeffs) : srccn(_srccn) - { - memcpy(coeffs, _coeffs ? _coeffs : sRGB2XYZ_D65, 9*sizeof(coeffs[0])); - if(blueIdx == 0) - { - std::swap(coeffs[0], coeffs[2]); - std::swap(coeffs[3], coeffs[5]); - std::swap(coeffs[6], coeffs[8]); - } - } - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn; - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - - n *= 3; - for(int i = 0; i < n; i += 3, src += scn) - { - _Tp X = saturate_cast<_Tp>(src[0]*C0 + src[1]*C1 + src[2]*C2); - _Tp Y = saturate_cast<_Tp>(src[0]*C3 + src[1]*C4 + src[2]*C5); - _Tp Z = saturate_cast<_Tp>(src[0]*C6 + src[1]*C7 + src[2]*C8); - dst[i] = X; dst[i+1] = Y; dst[i+2] = Z; - } - } - int srccn; - float coeffs[9]; -}; - - -template struct RGB2XYZ_i -{ - typedef _Tp channel_type; - - RGB2XYZ_i(int _srccn, int blueIdx, const float* _coeffs) : srccn(_srccn) - { - static const int coeffs0[] = - { - 1689, 1465, 739, - 871, 2929, 296, - 79, 488, 3892 - }; - for( int i = 0; i < 9; i++ ) - coeffs[i] = _coeffs ? cvRound(_coeffs[i]*(1 << xyz_shift)) : coeffs0[i]; - if(blueIdx == 0) - { - std::swap(coeffs[0], coeffs[2]); - std::swap(coeffs[3], coeffs[5]); - std::swap(coeffs[6], coeffs[8]); - } - } - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int scn = srccn; - int C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - n *= 3; - for(int i = 0; i < n; i += 3, src += scn) - { - int X = CV_DESCALE(src[0]*C0 + src[1]*C1 + src[2]*C2, xyz_shift); - int Y = CV_DESCALE(src[0]*C3 + src[1]*C4 + src[2]*C5, xyz_shift); - int Z = CV_DESCALE(src[0]*C6 + src[1]*C7 + src[2]*C8, xyz_shift); - dst[i] = saturate_cast<_Tp>(X); dst[i+1] = saturate_cast<_Tp>(Y); - dst[i+2] = saturate_cast<_Tp>(Z); - } - } - int srccn; - int coeffs[9]; -}; - - -template struct XYZ2RGB_f -{ - typedef _Tp channel_type; - - XYZ2RGB_f(int _dstcn, int _blueIdx, const float* _coeffs) - : dstcn(_dstcn), blueIdx(_blueIdx) - { - memcpy(coeffs, _coeffs ? _coeffs : XYZ2sRGB_D65, 9*sizeof(coeffs[0])); - if(blueIdx == 0) - { - std::swap(coeffs[0], coeffs[6]); - std::swap(coeffs[1], coeffs[7]); - std::swap(coeffs[2], coeffs[8]); - } - } - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int dcn = dstcn; - _Tp alpha = ColorChannel<_Tp>::max(); - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - n *= 3; - for(int i = 0; i < n; i += 3, dst += dcn) - { - _Tp B = saturate_cast<_Tp>(src[i]*C0 + src[i+1]*C1 + src[i+2]*C2); - _Tp G = saturate_cast<_Tp>(src[i]*C3 + src[i+1]*C4 + src[i+2]*C5); - _Tp R = saturate_cast<_Tp>(src[i]*C6 + src[i+1]*C7 + src[i+2]*C8); - dst[0] = B; dst[1] = G; dst[2] = R; - if( dcn == 4 ) - dst[3] = alpha; - } - } - int dstcn, blueIdx; - float coeffs[9]; -}; - - -template struct XYZ2RGB_i -{ - typedef _Tp channel_type; - - XYZ2RGB_i(int _dstcn, int _blueIdx, const int* _coeffs) - : dstcn(_dstcn), blueIdx(_blueIdx) - { - static const int coeffs0[] = - { - 13273, -6296, -2042, - -3970, 7684, 170, - 228, -836, 4331 - }; - for(int i = 0; i < 9; i++) - coeffs[i] = _coeffs ? cvRound(_coeffs[i]*(1 << xyz_shift)) : coeffs0[i]; - - if(blueIdx == 0) - { - std::swap(coeffs[0], coeffs[6]); - std::swap(coeffs[1], coeffs[7]); - std::swap(coeffs[2], coeffs[8]); - } - } - void operator()(const _Tp* src, _Tp* dst, int n) const - { - int dcn = dstcn; - _Tp alpha = ColorChannel<_Tp>::max(); - int C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - n *= 3; - for(int i = 0; i < n; i += 3, dst += dcn) - { - int B = CV_DESCALE(src[i]*C0 + src[i+1]*C1 + src[i+2]*C2, xyz_shift); - int G = CV_DESCALE(src[i]*C3 + src[i+1]*C4 + src[i+2]*C5, xyz_shift); - int R = CV_DESCALE(src[i]*C6 + src[i+1]*C7 + src[i+2]*C8, xyz_shift); - dst[0] = saturate_cast<_Tp>(B); dst[1] = saturate_cast<_Tp>(G); - dst[2] = saturate_cast<_Tp>(R); - if( dcn == 4 ) - dst[3] = alpha; - } - } - int dstcn, blueIdx; - int coeffs[9]; -}; - - -////////////////////////////////////// RGB <-> HSV /////////////////////////////////////// - - -struct RGB2HSV_b -{ - typedef uchar channel_type; - - RGB2HSV_b(int _srccn, int _blueIdx, int _hrange) - : srccn(_srccn), blueIdx(_blueIdx), hrange(_hrange) - { - CV_Assert( hrange == 180 || hrange == 256 ); - } - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, bidx = blueIdx, scn = srccn; - const int hsv_shift = 12; - - static int sdiv_table[256]; - static int hdiv_table180[256]; - static int hdiv_table256[256]; - static volatile bool initialized = false; - - int hr = hrange; - const int* hdiv_table = hr == 180 ? hdiv_table180 : hdiv_table256; - n *= 3; - - if( !initialized ) - { - sdiv_table[0] = hdiv_table180[0] = hdiv_table256[0] = 0; - for( i = 1; i < 256; i++ ) - { - sdiv_table[i] = saturate_cast((255 << hsv_shift)/(1.*i)); - hdiv_table180[i] = saturate_cast((180 << hsv_shift)/(6.*i)); - hdiv_table256[i] = saturate_cast((256 << hsv_shift)/(6.*i)); - } - initialized = true; - } - - for( i = 0; i < n; i += 3, src += scn ) - { - int b = src[bidx], g = src[1], r = src[bidx^2]; - int h, s, v = b; - int vmin = b, diff; - int vr, vg; - - CV_CALC_MAX_8U( v, g ); - CV_CALC_MAX_8U( v, r ); - CV_CALC_MIN_8U( vmin, g ); - CV_CALC_MIN_8U( vmin, r ); - - diff = v - vmin; - vr = v == r ? -1 : 0; - vg = v == g ? -1 : 0; - - s = (diff * sdiv_table[v] + (1 << (hsv_shift-1))) >> hsv_shift; - h = (vr & (g - b)) + - (~vr & ((vg & (b - r + 2 * diff)) + ((~vg) & (r - g + 4 * diff)))); - h = (h * hdiv_table[diff] + (1 << (hsv_shift-1))) >> hsv_shift; - h += h < 0 ? hr : 0; - - dst[i] = saturate_cast(h); - dst[i+1] = (uchar)s; - dst[i+2] = (uchar)v; - } - } - - int srccn, blueIdx, hrange; -}; - - -struct RGB2HSV_f -{ - typedef float channel_type; - - RGB2HSV_f(int _srccn, int _blueIdx, float _hrange) - : srccn(_srccn), blueIdx(_blueIdx), hrange(_hrange) {} - - void operator()(const float* src, float* dst, int n) const - { - int i, bidx = blueIdx, scn = srccn; - float hscale = hrange*(1.f/360.f); - n *= 3; - - for( i = 0; i < n; i += 3, src += scn ) - { - float b = src[bidx], g = src[1], r = src[bidx^2]; - float h, s, v; - - float vmin, diff; - - v = vmin = r; - if( v < g ) v = g; - if( v < b ) v = b; - if( vmin > g ) vmin = g; - if( vmin > b ) vmin = b; - - diff = v - vmin; - s = diff/(float)(fabs(v) + FLT_EPSILON); - diff = (float)(60./(diff + FLT_EPSILON)); - if( v == r ) - h = (g - b)*diff; - else if( v == g ) - h = (b - r)*diff + 120.f; - else - h = (r - g)*diff + 240.f; - - if( h < 0 ) h += 360.f; - - dst[i] = h*hscale; - dst[i+1] = s; - dst[i+2] = v; - } - } - - int srccn, blueIdx; - float hrange; -}; - - -struct HSV2RGB_f -{ - typedef float channel_type; - - HSV2RGB_f(int _dstcn, int _blueIdx, float _hrange) - : dstcn(_dstcn), blueIdx(_blueIdx), hscale(6.f/_hrange) {} - - void operator()(const float* src, float* dst, int n) const - { - int i, bidx = blueIdx, dcn = dstcn; - float _hscale = hscale; - float alpha = ColorChannel::max(); - n *= 3; - - for( i = 0; i < n; i += 3, dst += dcn ) - { - float h = src[i], s = src[i+1], v = src[i+2]; - float b, g, r; - - if( s == 0 ) - b = g = r = v; - else - { - static const int sector_data[][3]= - {{1,3,0}, {1,0,2}, {3,0,1}, {0,2,1}, {0,1,3}, {2,1,0}}; - float tab[4]; - int sector; - h *= _hscale; - if( h < 0 ) - do h += 6; while( h < 0 ); - else if( h >= 6 ) - do h -= 6; while( h >= 6 ); - sector = cvFloor(h); - h -= sector; - if( (unsigned)sector >= 6u ) - { - sector = 0; - h = 0.f; - } - - tab[0] = v; - tab[1] = v*(1.f - s); - tab[2] = v*(1.f - s*h); - tab[3] = v*(1.f - s*(1.f - h)); - - b = tab[sector_data[sector][0]]; - g = tab[sector_data[sector][1]]; - r = tab[sector_data[sector][2]]; - } - - dst[bidx] = b; - dst[1] = g; - dst[bidx^2] = r; - if( dcn == 4 ) - dst[3] = alpha; - } - } - - int dstcn, blueIdx; - float hscale; -}; - - -struct HSV2RGB_b -{ - typedef uchar channel_type; - - HSV2RGB_b(int _dstcn, int _blueIdx, int _hrange) - : dstcn(_dstcn), cvt(3, _blueIdx, (float)_hrange) - {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, dcn = dstcn; - uchar alpha = ColorChannel::max(); - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, src += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3 ) - { - buf[j] = src[j]; - buf[j+1] = src[j+1]*(1.f/255.f); - buf[j+2] = src[j+2]*(1.f/255.f); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3, dst += dcn ) - { - dst[0] = saturate_cast(buf[j]*255.f); - dst[1] = saturate_cast(buf[j+1]*255.f); - dst[2] = saturate_cast(buf[j+2]*255.f); - if( dcn == 4 ) - dst[3] = alpha; - } - } - } - - int dstcn; - HSV2RGB_f cvt; -}; - - -///////////////////////////////////// RGB <-> HLS //////////////////////////////////////// - -struct RGB2HLS_f -{ - typedef float channel_type; - - RGB2HLS_f(int _srccn, int _blueIdx, float _hrange) - : srccn(_srccn), blueIdx(_blueIdx), hrange(_hrange) {} - - void operator()(const float* src, float* dst, int n) const - { - int i, bidx = blueIdx, scn = srccn; - float hscale = hrange*(1.f/360.f); - n *= 3; - - for( i = 0; i < n; i += 3, src += scn ) - { - float b = src[bidx], g = src[1], r = src[bidx^2]; - float h = 0.f, s = 0.f, l; - float vmin, vmax, diff; - - vmax = vmin = r; - if( vmax < g ) vmax = g; - if( vmax < b ) vmax = b; - if( vmin > g ) vmin = g; - if( vmin > b ) vmin = b; - - diff = vmax - vmin; - l = (vmax + vmin)*0.5f; - - if( diff > FLT_EPSILON ) - { - s = l < 0.5f ? diff/(vmax + vmin) : diff/(2 - vmax - vmin); - diff = 60.f/diff; - - if( vmax == r ) - h = (g - b)*diff; - else if( vmax == g ) - h = (b - r)*diff + 120.f; - else - h = (r - g)*diff + 240.f; - - if( h < 0.f ) h += 360.f; - } - - dst[i] = h*hscale; - dst[i+1] = l; - dst[i+2] = s; - } - } - - int srccn, blueIdx; - float hrange; -}; - - -struct RGB2HLS_b -{ - typedef uchar channel_type; - - RGB2HLS_b(int _srccn, int _blueIdx, int _hrange) - : srccn(_srccn), cvt(3, _blueIdx, (float)_hrange) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, scn = srccn; - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, dst += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3, src += scn ) - { - buf[j] = src[0]*(1.f/255.f); - buf[j+1] = src[1]*(1.f/255.f); - buf[j+2] = src[2]*(1.f/255.f); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3 ) - { - dst[j] = saturate_cast(buf[j]); - dst[j+1] = saturate_cast(buf[j+1]*255.f); - dst[j+2] = saturate_cast(buf[j+2]*255.f); - } - } - } - - int srccn; - RGB2HLS_f cvt; -}; - - -struct HLS2RGB_f -{ - typedef float channel_type; - - HLS2RGB_f(int _dstcn, int _blueIdx, float _hrange) - : dstcn(_dstcn), blueIdx(_blueIdx), hscale(6.f/_hrange) {} - - void operator()(const float* src, float* dst, int n) const - { - int i, bidx = blueIdx, dcn = dstcn; - float _hscale = hscale; - float alpha = ColorChannel::max(); - n *= 3; - - for( i = 0; i < n; i += 3, dst += dcn ) - { - float h = src[i], l = src[i+1], s = src[i+2]; - float b, g, r; - - if( s == 0 ) - b = g = r = l; - else - { - static const int sector_data[][3]= - {{1,3,0}, {1,0,2}, {3,0,1}, {0,2,1}, {0,1,3}, {2,1,0}}; - float tab[4]; - int sector; - - float p2 = l <= 0.5f ? l*(1 + s) : l + s - l*s; - float p1 = 2*l - p2; - - h *= _hscale; - if( h < 0 ) - do h += 6; while( h < 0 ); - else if( h >= 6 ) - do h -= 6; while( h >= 6 ); - - assert( 0 <= h && h < 6 ); - sector = cvFloor(h); - h -= sector; - - tab[0] = p2; - tab[1] = p1; - tab[2] = p1 + (p2 - p1)*(1-h); - tab[3] = p1 + (p2 - p1)*h; - - b = tab[sector_data[sector][0]]; - g = tab[sector_data[sector][1]]; - r = tab[sector_data[sector][2]]; - } - - dst[bidx] = b; - dst[1] = g; - dst[bidx^2] = r; - if( dcn == 4 ) - dst[3] = alpha; - } - } - - int dstcn, blueIdx; - float hscale; -}; - - -struct HLS2RGB_b -{ - typedef uchar channel_type; - - HLS2RGB_b(int _dstcn, int _blueIdx, int _hrange) - : dstcn(_dstcn), cvt(3, _blueIdx, (float)_hrange) - {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, dcn = dstcn; - uchar alpha = ColorChannel::max(); - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, src += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3 ) - { - buf[j] = src[j]; - buf[j+1] = src[j+1]*(1.f/255.f); - buf[j+2] = src[j+2]*(1.f/255.f); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3, dst += dcn ) - { - dst[0] = saturate_cast(buf[j]*255.f); - dst[1] = saturate_cast(buf[j+1]*255.f); - dst[2] = saturate_cast(buf[j+2]*255.f); - if( dcn == 4 ) - dst[3] = alpha; - } - } - } - - int dstcn; - HLS2RGB_f cvt; -}; - - -///////////////////////////////////// RGB <-> L*a*b* ///////////////////////////////////// - -static const float D65[] = { 0.950456f, 1.f, 1.088754f }; - -enum { LAB_CBRT_TAB_SIZE = 1024, GAMMA_TAB_SIZE = 1024 }; -static float LabCbrtTab[LAB_CBRT_TAB_SIZE*4]; -static const float LabCbrtTabScale = LAB_CBRT_TAB_SIZE/1.5f; - -static float sRGBGammaTab[GAMMA_TAB_SIZE*4], sRGBInvGammaTab[GAMMA_TAB_SIZE*4]; -static const float GammaTabScale = (float)GAMMA_TAB_SIZE; - -static ushort sRGBGammaTab_b[256], linearGammaTab_b[256]; -#undef lab_shift -#define lab_shift xyz_shift -#define gamma_shift 3 -#define lab_shift2 (lab_shift + gamma_shift) -#define LAB_CBRT_TAB_SIZE_B (256*3/2*(1<(255.f*(1 << gamma_shift)*(x <= 0.04045f ? x*(1.f/12.92f) : (float)pow((double)(x + 0.055)*(1./1.055), 2.4))); - linearGammaTab_b[i] = (ushort)(i*(1 << gamma_shift)); - } - - for(i = 0; i < LAB_CBRT_TAB_SIZE_B; i++) - { - float x = i*(1.f/(255.f*(1 << gamma_shift))); - LabCbrtTab_b[i] = saturate_cast((1 << lab_shift2)*(x < 0.008856f ? x*7.787f + 0.13793103448275862f : cvCbrt(x))); - } - initialized = true; - } -} - -struct RGB2Lab_b -{ - typedef uchar channel_type; - - RGB2Lab_b(int _srccn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb) - : srccn(_srccn), srgb(_srgb) - { - static volatile int _3 = 3; - initLabTabs(); - - if(!_coeffs) _coeffs = sRGB2XYZ_D65; - if(!_whitept) _whitept = D65; - float scale[] = - { - (1 << lab_shift)/_whitept[0], - (float)(1 << lab_shift), - (1 << lab_shift)/_whitept[2] - }; - - for( int i = 0; i < _3; i++ ) - { - coeffs[i*3+(blueIdx^2)] = cvRound(_coeffs[i*3]*scale[i]); - coeffs[i*3+1] = cvRound(_coeffs[i*3+1]*scale[i]); - coeffs[i*3+blueIdx] = cvRound(_coeffs[i*3+2]*scale[i]); - - CV_Assert( coeffs[i] >= 0 && coeffs[i*3+1] >= 0 && coeffs[i*3+2] >= 0 && - coeffs[i*3] + coeffs[i*3+1] + coeffs[i*3+2] < 2*(1 << lab_shift) ); - } - } - - void operator()(const uchar* src, uchar* dst, int n) const - { - const int Lscale = (116*255+50)/100; - const int Lshift = -((16*255*(1 << lab_shift2) + 50)/100); - const ushort* tab = srgb ? sRGBGammaTab_b : linearGammaTab_b; - int i, scn = srccn; - int C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - n *= 3; - - for( i = 0; i < n; i += 3, src += scn ) - { - int R = tab[src[0]], G = tab[src[1]], B = tab[src[2]]; - int fX = LabCbrtTab_b[CV_DESCALE(R*C0 + G*C1 + B*C2, lab_shift)]; - int fY = LabCbrtTab_b[CV_DESCALE(R*C3 + G*C4 + B*C5, lab_shift)]; - int fZ = LabCbrtTab_b[CV_DESCALE(R*C6 + G*C7 + B*C8, lab_shift)]; - - int L = CV_DESCALE( Lscale*fY + Lshift, lab_shift2 ); - int a = CV_DESCALE( 500*(fX - fY) + 128*(1 << lab_shift2), lab_shift2 ); - int b = CV_DESCALE( 200*(fY - fZ) + 128*(1 << lab_shift2), lab_shift2 ); - - dst[i] = saturate_cast(L); - dst[i+1] = saturate_cast(a); - dst[i+2] = saturate_cast(b); - } - } - - int srccn; - int coeffs[9]; - bool srgb; -}; - - -#define clip(value) \ - value < 0.0f ? 0.0f : value > 1.0f ? 1.0f : value; - -struct RGB2Lab_f -{ - typedef float channel_type; - - RGB2Lab_f(int _srccn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb) - : srccn(_srccn), srgb(_srgb) - { - volatile int _3 = 3; - initLabTabs(); - - if (!_coeffs) - _coeffs = sRGB2XYZ_D65; - if (!_whitept) - _whitept = D65; - - float scale[] = { 1.0f / _whitept[0], 1.0f, 1.0f / _whitept[2] }; - - for( int i = 0; i < _3; i++ ) - { - int j = i * 3; - coeffs[j + (blueIdx ^ 2)] = _coeffs[j] * scale[i]; - coeffs[j + 1] = _coeffs[j + 1] * scale[i]; - coeffs[j + blueIdx] = _coeffs[j + 2] * scale[i]; - - CV_Assert( coeffs[j] >= 0 && coeffs[j + 1] >= 0 && coeffs[j + 2] >= 0 && - coeffs[j] + coeffs[j + 1] + coeffs[j + 2] < 1.5f*LabCbrtTabScale ); - } - } - - void operator()(const float* src, float* dst, int n) const - { - int i, scn = srccn; - float gscale = GammaTabScale; - const float* gammaTab = srgb ? sRGBGammaTab : 0; - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - n *= 3; - - static const float _1_3 = 1.0f / 3.0f; - static const float _a = 16.0f / 116.0f; - for (i = 0; i < n; i += 3, src += scn ) - { - float R = clip(src[0]); - float G = clip(src[1]); - float B = clip(src[2]); - -// CV_Assert(R >= 0.0f && R <= 1.0f); -// CV_Assert(G >= 0.0f && G <= 1.0f); -// CV_Assert(B >= 0.0f && B <= 1.0f); - - if (gammaTab) - { - R = splineInterpolate(R * gscale, gammaTab, GAMMA_TAB_SIZE); - G = splineInterpolate(G * gscale, gammaTab, GAMMA_TAB_SIZE); - B = splineInterpolate(B * gscale, gammaTab, GAMMA_TAB_SIZE); - } - float X = R*C0 + G*C1 + B*C2; - float Y = R*C3 + G*C4 + B*C5; - float Z = R*C6 + G*C7 + B*C8; - - float FX = X > 0.008856f ? pow(X, _1_3) : (7.787f * X + _a); - float FY = Y > 0.008856f ? pow(Y, _1_3) : (7.787f * Y + _a); - float FZ = Z > 0.008856f ? pow(Z, _1_3) : (7.787f * Z + _a); - - float L = Y > 0.008856f ? (116.f * FY - 16.f) : (903.3f * Y); - float a = 500.f * (FX - FY); - float b = 200.f * (FY - FZ); - - dst[i] = L; - dst[i + 1] = a; - dst[i + 2] = b; - } - } - - int srccn; - float coeffs[9]; - bool srgb; -}; - -struct Lab2RGB_f -{ - typedef float channel_type; - - Lab2RGB_f( int _dstcn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb ) - : dstcn(_dstcn), srgb(_srgb), blueInd(blueIdx) - { - initLabTabs(); - - if(!_coeffs) - _coeffs = XYZ2sRGB_D65; - if(!_whitept) - _whitept = D65; - - for( int i = 0; i < 3; i++ ) - { - coeffs[i+(blueIdx^2)*3] = _coeffs[i]*_whitept[i]; - coeffs[i+3] = _coeffs[i+3]*_whitept[i]; - coeffs[i+blueIdx*3] = _coeffs[i+6]*_whitept[i]; - } - } - - void operator()(const float* src, float* dst, int n) const - { - int i, dcn = dstcn; - const float* gammaTab = srgb ? sRGBInvGammaTab : 0; - float gscale = GammaTabScale; - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - float alpha = ColorChannel::max(); - n *= 3; - - static const float lThresh = 0.008856f * 903.3f; - static const float fThresh = 7.787f * 0.008856f + 16.0f / 116.0f; - for (i = 0; i < n; i += 3, dst += dcn) - { - float li = src[i]; - float ai = src[i + 1]; - float bi = src[i + 2]; - - float y, fy; - if (li <= lThresh) - { - y = li / 903.3f; - fy = 7.787f * y + 16.0f / 116.0f; - } - else - { - fy = (li + 16.0f) / 116.0f; - y = fy * fy * fy; - } - - float fxz[] = { ai / 500.0f + fy, fy - bi / 200.0f }; - - for (int j = 0; j < 2; j++) - if (fxz[j] <= fThresh) - fxz[j] = (fxz[j] - 16.0f / 116.0f) / 7.787f; - else - fxz[j] = fxz[j] * fxz[j] * fxz[j]; - - - float x = fxz[0], z = fxz[1]; - float ro = clip(C0 * x + C1 * y + C2 * z); - float go = clip(C3 * x + C4 * y + C5 * z); - float bo = clip(C6 * x + C7 * y + C8 * z); - -// CV_Assert(ro >= 0.0f && ro <= 1.0f); -// CV_Assert(go >= 0.0f && go <= 1.0f); -// CV_Assert(bo >= 0.0f && bo <= 1.0f); - - if (gammaTab) - { - ro = splineInterpolate(ro * gscale, gammaTab, GAMMA_TAB_SIZE); - go = splineInterpolate(go * gscale, gammaTab, GAMMA_TAB_SIZE); - bo = splineInterpolate(bo * gscale, gammaTab, GAMMA_TAB_SIZE); - } - - dst[0] = ro, dst[1] = go, dst[2] = bo; - if( dcn == 4 ) - dst[3] = alpha; - } - } - - int dstcn; - float coeffs[9]; - bool srgb; - int blueInd; -}; - -#undef clip - -struct Lab2RGB_b -{ - typedef uchar channel_type; - - Lab2RGB_b( int _dstcn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb ) - : dstcn(_dstcn), cvt(3, blueIdx, _coeffs, _whitept, _srgb ) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, dcn = dstcn; - uchar alpha = ColorChannel::max(); - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, src += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3 ) - { - buf[j] = src[j]*(100.f/255.f); - buf[j+1] = (float)(src[j+1] - 128); - buf[j+2] = (float)(src[j+2] - 128); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3, dst += dcn ) - { - dst[0] = saturate_cast(buf[j]*255.f); - dst[1] = saturate_cast(buf[j+1]*255.f); - dst[2] = saturate_cast(buf[j+2]*255.f); - if( dcn == 4 ) - dst[3] = alpha; - } - } - } - - int dstcn; - Lab2RGB_f cvt; -}; - - -///////////////////////////////////// RGB <-> L*u*v* ///////////////////////////////////// - -struct RGB2Luv_f -{ - typedef float channel_type; - - RGB2Luv_f( int _srccn, int blueIdx, const float* _coeffs, - const float* whitept, bool _srgb ) - : srccn(_srccn), srgb(_srgb) - { - volatile int i; - initLabTabs(); - - if(!_coeffs) _coeffs = sRGB2XYZ_D65; - if(!whitept) whitept = D65; - - for( i = 0; i < 3; i++ ) - { - coeffs[i*3] = _coeffs[i*3]; - coeffs[i*3+1] = _coeffs[i*3+1]; - coeffs[i*3+2] = _coeffs[i*3+2]; - if( blueIdx == 0 ) - std::swap(coeffs[i*3], coeffs[i*3+2]); - CV_Assert( coeffs[i*3] >= 0 && coeffs[i*3+1] >= 0 && coeffs[i*3+2] >= 0 && - coeffs[i*3] + coeffs[i*3+1] + coeffs[i*3+2] < 1.5f ); - } - - float d = 1.f/(whitept[0] + whitept[1]*15 + whitept[2]*3); - un = 4*whitept[0]*d; - vn = 9*whitept[1]*d; - - CV_Assert(whitept[1] == 1.f); - } - - void operator()(const float* src, float* dst, int n) const - { - int i, scn = srccn; - float gscale = GammaTabScale; - const float* gammaTab = srgb ? sRGBGammaTab : 0; - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - float _un = 13*un, _vn = 13*vn; - n *= 3; - - for( i = 0; i < n; i += 3, src += scn ) - { - float R = src[0], G = src[1], B = src[2]; - if( gammaTab ) - { - R = splineInterpolate(R*gscale, gammaTab, GAMMA_TAB_SIZE); - G = splineInterpolate(G*gscale, gammaTab, GAMMA_TAB_SIZE); - B = splineInterpolate(B*gscale, gammaTab, GAMMA_TAB_SIZE); - } - - float X = R*C0 + G*C1 + B*C2; - float Y = R*C3 + G*C4 + B*C5; - float Z = R*C6 + G*C7 + B*C8; - - float L = splineInterpolate(Y*LabCbrtTabScale, LabCbrtTab, LAB_CBRT_TAB_SIZE); - L = 116.f*L - 16.f; - - float d = (4*13) / std::max(X + 15 * Y + 3 * Z, FLT_EPSILON); - float u = L*(X*d - _un); - float v = L*((9*0.25f)*Y*d - _vn); - - dst[i] = L; dst[i+1] = u; dst[i+2] = v; - } - } - - int srccn; - float coeffs[9], un, vn; - bool srgb; -}; - - -struct Luv2RGB_f -{ - typedef float channel_type; - - Luv2RGB_f( int _dstcn, int blueIdx, const float* _coeffs, - const float* whitept, bool _srgb ) - : dstcn(_dstcn), srgb(_srgb) - { - initLabTabs(); - - if(!_coeffs) _coeffs = XYZ2sRGB_D65; - if(!whitept) whitept = D65; - - for( int i = 0; i < 3; i++ ) - { - coeffs[i+(blueIdx^2)*3] = _coeffs[i]; - coeffs[i+3] = _coeffs[i+3]; - coeffs[i+blueIdx*3] = _coeffs[i+6]; - } - - float d = 1.f/(whitept[0] + whitept[1]*15 + whitept[2]*3); - un = 4*whitept[0]*d; - vn = 9*whitept[1]*d; - - CV_Assert(whitept[1] == 1.f); - } - - void operator()(const float* src, float* dst, int n) const - { - int i, dcn = dstcn; - const float* gammaTab = srgb ? sRGBInvGammaTab : 0; - float gscale = GammaTabScale; - float C0 = coeffs[0], C1 = coeffs[1], C2 = coeffs[2], - C3 = coeffs[3], C4 = coeffs[4], C5 = coeffs[5], - C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8]; - float alpha = ColorChannel::max(); - float _un = un, _vn = vn; - n *= 3; - - for( i = 0; i < n; i += 3, dst += dcn ) - { - float L = src[i], u = src[i+1], v = src[i+2], d, X, Y, Z; - Y = (L + 16.f) * (1.f/116.f); - Y = Y*Y*Y; - d = (1.f/13.f)/L; - u = u*d + _un; - v = v*d + _vn; - float iv = 1.f/v; - X = 2.25f * u * Y * iv ; - Z = (12 - 3 * u - 20 * v) * Y * 0.25f * iv; - - float R = X*C0 + Y*C1 + Z*C2; - float G = X*C3 + Y*C4 + Z*C5; - float B = X*C6 + Y*C7 + Z*C8; - - if( gammaTab ) - { - R = splineInterpolate(R*gscale, gammaTab, GAMMA_TAB_SIZE); - G = splineInterpolate(G*gscale, gammaTab, GAMMA_TAB_SIZE); - B = splineInterpolate(B*gscale, gammaTab, GAMMA_TAB_SIZE); - } - - dst[0] = R; dst[1] = G; dst[2] = B; - if( dcn == 4 ) - dst[3] = alpha; - } - } - - int dstcn; - float coeffs[9], un, vn; - bool srgb; -}; - - -struct RGB2Luv_b -{ - typedef uchar channel_type; - - RGB2Luv_b( int _srccn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb ) - : srccn(_srccn), cvt(3, blueIdx, _coeffs, _whitept, _srgb) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, scn = srccn; - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, dst += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3, src += scn ) - { - buf[j] = src[0]*(1.f/255.f); - buf[j+1] = (float)(src[1]*(1.f/255.f)); - buf[j+2] = (float)(src[2]*(1.f/255.f)); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3 ) - { - dst[j] = saturate_cast(buf[j]*2.55f); - dst[j+1] = saturate_cast(buf[j+1]*0.72033898305084743f + 96.525423728813564f); - dst[j+2] = saturate_cast(buf[j+2]*0.99609375f + 139.453125f); - } - } - } - - int srccn; - RGB2Luv_f cvt; -}; - - -struct Luv2RGB_b -{ - typedef uchar channel_type; - - Luv2RGB_b( int _dstcn, int blueIdx, const float* _coeffs, - const float* _whitept, bool _srgb ) - : dstcn(_dstcn), cvt(3, blueIdx, _coeffs, _whitept, _srgb ) {} - - void operator()(const uchar* src, uchar* dst, int n) const - { - int i, j, dcn = dstcn; - uchar alpha = ColorChannel::max(); - float buf[3*BLOCK_SIZE]; - - for( i = 0; i < n; i += BLOCK_SIZE, src += BLOCK_SIZE*3 ) - { - int dn = std::min(n - i, (int)BLOCK_SIZE); - - for( j = 0; j < dn*3; j += 3 ) - { - buf[j] = src[j]*(100.f/255.f); - buf[j+1] = (float)(src[j+1]*1.388235294117647f - 134.f); - buf[j+2] = (float)(src[j+2]*1.003921568627451f - 140.f); - } - cvt(buf, buf, dn); - - for( j = 0; j < dn*3; j += 3, dst += dcn ) - { - dst[0] = saturate_cast(buf[j]*255.f); - dst[1] = saturate_cast(buf[j+1]*255.f); - dst[2] = saturate_cast(buf[j+2]*255.f); - if( dcn == 4 ) - dst[3] = alpha; - } - } - } - - int dstcn; - Luv2RGB_f cvt; -}; - - -//////////////////////////// Bayer Pattern -> RGB conversion ///////////////////////////// - -template -class SIMDBayerStubInterpolator_ -{ -public: - int bayer2Gray(const T*, int, T*, int, int, int, int) const - { - return 0; - } - - int bayer2RGB(const T*, int, T*, int, int) const - { - return 0; - } -}; - -#if CV_SSE2 -class SIMDBayerInterpolator_8u -{ -public: - SIMDBayerInterpolator_8u() - { - use_simd = checkHardwareSupport(CV_CPU_SSE2); - } - - int bayer2Gray(const uchar* bayer, int bayer_step, uchar* dst, - int width, int bcoeff, int gcoeff, int rcoeff) const - { - if( !use_simd ) - return 0; - - __m128i _b2y = _mm_set1_epi16((short)(rcoeff*2)); - __m128i _g2y = _mm_set1_epi16((short)(gcoeff*2)); - __m128i _r2y = _mm_set1_epi16((short)(bcoeff*2)); - const uchar* bayer_end = bayer + width; - - for( ; bayer <= bayer_end - 18; bayer += 14, dst += 14 ) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)bayer); - __m128i r1 = _mm_loadu_si128((const __m128i*)(bayer+bayer_step)); - __m128i r2 = _mm_loadu_si128((const __m128i*)(bayer+bayer_step*2)); - - __m128i b1 = _mm_add_epi16(_mm_srli_epi16(_mm_slli_epi16(r0, 8), 7), - _mm_srli_epi16(_mm_slli_epi16(r2, 8), 7)); - __m128i b0 = _mm_add_epi16(b1, _mm_srli_si128(b1, 2)); - b1 = _mm_slli_epi16(_mm_srli_si128(b1, 2), 1); - - __m128i g0 = _mm_add_epi16(_mm_srli_epi16(r0, 7), _mm_srli_epi16(r2, 7)); - __m128i g1 = _mm_srli_epi16(_mm_slli_epi16(r1, 8), 7); - g0 = _mm_add_epi16(g0, _mm_add_epi16(g1, _mm_srli_si128(g1, 2))); - g1 = _mm_slli_epi16(_mm_srli_si128(g1, 2), 2); - - r0 = _mm_srli_epi16(r1, 8); - r1 = _mm_slli_epi16(_mm_add_epi16(r0, _mm_srli_si128(r0, 2)), 2); - r0 = _mm_slli_epi16(r0, 3); - - g0 = _mm_add_epi16(_mm_mulhi_epi16(b0, _b2y), _mm_mulhi_epi16(g0, _g2y)); - g1 = _mm_add_epi16(_mm_mulhi_epi16(b1, _b2y), _mm_mulhi_epi16(g1, _g2y)); - g0 = _mm_add_epi16(g0, _mm_mulhi_epi16(r0, _r2y)); - g1 = _mm_add_epi16(g1, _mm_mulhi_epi16(r1, _r2y)); - g0 = _mm_srli_epi16(g0, 2); - g1 = _mm_srli_epi16(g1, 2); - g0 = _mm_packus_epi16(g0, g0); - g1 = _mm_packus_epi16(g1, g1); - g0 = _mm_unpacklo_epi8(g0, g1); - _mm_storeu_si128((__m128i*)dst, g0); - } - - return (int)(bayer - (bayer_end - width)); - } - - int bayer2RGB(const uchar* bayer, int bayer_step, uchar* dst, int width, int blue) const - { - if( !use_simd ) - return 0; - /* - B G B G | B G B G | B G B G | B G B G - G R G R | G R G R | G R G R | G R G R - B G B G | B G B G | B G B G | B G B G - */ - __m128i delta1 = _mm_set1_epi16(1), delta2 = _mm_set1_epi16(2); - __m128i mask = _mm_set1_epi16(blue < 0 ? -1 : 0), z = _mm_setzero_si128(); - __m128i masklo = _mm_set1_epi16(0x00ff); - const uchar* bayer_end = bayer + width; - - for( ; bayer <= bayer_end - 18; bayer += 14, dst += 42 ) - { - __m128i r0 = _mm_loadu_si128((const __m128i*)bayer); - __m128i r1 = _mm_loadu_si128((const __m128i*)(bayer+bayer_step)); - __m128i r2 = _mm_loadu_si128((const __m128i*)(bayer+bayer_step*2)); - - __m128i b1 = _mm_add_epi16(_mm_and_si128(r0, masklo), _mm_and_si128(r2, masklo)); - __m128i b0 = _mm_add_epi16(b1, _mm_srli_si128(b1, 2)); - b1 = _mm_srli_si128(b1, 2); - b1 = _mm_srli_epi16(_mm_add_epi16(b1, delta1), 1); - b0 = _mm_srli_epi16(_mm_add_epi16(b0, delta2), 2); - b0 = _mm_packus_epi16(b0, b1); - - __m128i g0 = _mm_add_epi16(_mm_srli_epi16(r0, 8), _mm_srli_epi16(r2, 8)); - __m128i g1 = _mm_and_si128(r1, masklo); - g0 = _mm_add_epi16(g0, _mm_add_epi16(g1, _mm_srli_si128(g1, 2))); - g1 = _mm_srli_si128(g1, 2); - g0 = _mm_srli_epi16(_mm_add_epi16(g0, delta2), 2); - g0 = _mm_packus_epi16(g0, g1); - - r0 = _mm_srli_epi16(r1, 8); - r1 = _mm_add_epi16(r0, _mm_srli_si128(r0, 2)); - r1 = _mm_srli_epi16(_mm_add_epi16(r1, delta1), 1); - r0 = _mm_packus_epi16(r0, r1); - - b1 = _mm_and_si128(_mm_xor_si128(b0, r0), mask); - b0 = _mm_xor_si128(b0, b1); - r0 = _mm_xor_si128(r0, b1); - - // b1 g1 b1 g1 ... - b1 = _mm_unpackhi_epi8(b0, g0); - // b0 g0 b2 g2 b4 g4 .... - b0 = _mm_unpacklo_epi8(b0, g0); - - // r1 0 r3 0 ... - r1 = _mm_unpackhi_epi8(r0, z); - // r0 0 r2 0 r4 0 ... - r0 = _mm_unpacklo_epi8(r0, z); - - // 0 b0 g0 r0 0 b2 g2 r2 0 ... - g0 = _mm_slli_si128(_mm_unpacklo_epi16(b0, r0), 1); - // 0 b8 g8 r8 0 b10 g10 r10 0 ... - g1 = _mm_slli_si128(_mm_unpackhi_epi16(b0, r0), 1); - - // b1 g1 r1 0 b3 g3 r3 .... - r0 = _mm_unpacklo_epi16(b1, r1); - // b9 g9 r9 0 ... - r1 = _mm_unpackhi_epi16(b1, r1); - - b0 = _mm_srli_si128(_mm_unpacklo_epi32(g0, r0), 1); - b1 = _mm_srli_si128(_mm_unpackhi_epi32(g0, r0), 1); - - _mm_storel_epi64((__m128i*)(dst-1+0), b0); - _mm_storel_epi64((__m128i*)(dst-1+6*1), _mm_srli_si128(b0, 8)); - _mm_storel_epi64((__m128i*)(dst-1+6*2), b1); - _mm_storel_epi64((__m128i*)(dst-1+6*3), _mm_srli_si128(b1, 8)); - - g0 = _mm_srli_si128(_mm_unpacklo_epi32(g1, r1), 1); - g1 = _mm_srli_si128(_mm_unpackhi_epi32(g1, r1), 1); - - _mm_storel_epi64((__m128i*)(dst-1+6*4), g0); - _mm_storel_epi64((__m128i*)(dst-1+6*5), _mm_srli_si128(g0, 8)); - - _mm_storel_epi64((__m128i*)(dst-1+6*6), g1); - } - - return (int)(bayer - (bayer_end - width)); - } - - bool use_simd; -}; -#else -typedef SIMDBayerStubInterpolator_ SIMDBayerInterpolator_8u; -#endif - -template -static void Bayer2Gray_( const Mat& srcmat, Mat& dstmat, int code ) -{ - SIMDInterpolator vecOp; - const int R2Y = 4899; - const int G2Y = 9617; - const int B2Y = 1868; - const int SHIFT = 14; - - const T* bayer0 = (const T*)srcmat.data; - int bayer_step = (int)(srcmat.step/sizeof(T)); - T* dst0 = (T*)dstmat.data; - int dst_step = (int)(dstmat.step/sizeof(T)); - Size size = srcmat.size(); - int bcoeff = B2Y, rcoeff = R2Y; - int start_with_green = code == CV_BayerGB2GRAY || code == CV_BayerGR2GRAY; - bool brow = true; - - if( code != CV_BayerBG2GRAY && code != CV_BayerGB2GRAY ) - { - brow = false; - std::swap(bcoeff, rcoeff); - } - - dst0 += dst_step + 1; - size.height -= 2; - size.width -= 2; - - for( ; size.height-- > 0; bayer0 += bayer_step, dst0 += dst_step ) - { - unsigned t0, t1, t2; - const T* bayer = bayer0; - T* dst = dst0; - const T* bayer_end = bayer + size.width; - - if( size.width <= 0 ) - { - dst[-1] = dst[size.width] = 0; - continue; - } - - if( start_with_green ) - { - t0 = (bayer[1] + bayer[bayer_step*2+1])*rcoeff; - t1 = (bayer[bayer_step] + bayer[bayer_step+2])*bcoeff; - t2 = bayer[bayer_step+1]*(2*G2Y); - - dst[0] = (T)CV_DESCALE(t0 + t1 + t2, SHIFT+1); - bayer++; - dst++; - } - - int delta = vecOp.bayer2Gray(bayer, bayer_step, dst, size.width, bcoeff, G2Y, rcoeff); - bayer += delta; - dst += delta; - - for( ; bayer <= bayer_end - 2; bayer += 2, dst += 2 ) - { - t0 = (bayer[0] + bayer[2] + bayer[bayer_step*2] + bayer[bayer_step*2+2])*rcoeff; - t1 = (bayer[1] + bayer[bayer_step] + bayer[bayer_step+2] + bayer[bayer_step*2+1])*G2Y; - t2 = bayer[bayer_step+1]*(4*bcoeff); - dst[0] = (T)CV_DESCALE(t0 + t1 + t2, SHIFT+2); - - t0 = (bayer[2] + bayer[bayer_step*2+2])*rcoeff; - t1 = (bayer[bayer_step+1] + bayer[bayer_step+3])*bcoeff; - t2 = bayer[bayer_step+2]*(2*G2Y); - dst[1] = (T)CV_DESCALE(t0 + t1 + t2, SHIFT+1); - } - - if( bayer < bayer_end ) - { - t0 = (bayer[0] + bayer[2] + bayer[bayer_step*2] + bayer[bayer_step*2+2])*rcoeff; - t1 = (bayer[1] + bayer[bayer_step] + bayer[bayer_step+2] + bayer[bayer_step*2+1])*G2Y; - t2 = bayer[bayer_step+1]*(4*bcoeff); - dst[0] = (T)CV_DESCALE(t0 + t1 + t2, SHIFT+2); - bayer++; - dst++; - } - - dst0[-1] = dst0[0]; - dst0[size.width] = dst0[size.width-1]; - - brow = !brow; - std::swap(bcoeff, rcoeff); - start_with_green = !start_with_green; - } - - size = dstmat.size(); - dst0 = (T*)dstmat.data; - if( size.height > 2 ) - for( int i = 0; i < size.width; i++ ) - { - dst0[i] = dst0[i + dst_step]; - dst0[i + (size.height-1)*dst_step] = dst0[i + (size.height-2)*dst_step]; - } - else - for( int i = 0; i < size.width; i++ ) - { - dst0[i] = dst0[i + (size.height-1)*dst_step] = 0; - } -} - -template -static void Bayer2RGB_( const Mat& srcmat, Mat& dstmat, int code ) -{ - SIMDInterpolator vecOp; - const T* bayer0 = (const T*)srcmat.data; - int bayer_step = (int)(srcmat.step/sizeof(T)); - T* dst0 = (T*)dstmat.data; - int dst_step = (int)(dstmat.step/sizeof(T)); - Size size = srcmat.size(); - int blue = code == CV_BayerBG2BGR || code == CV_BayerGB2BGR ? -1 : 1; - int start_with_green = code == CV_BayerGB2BGR || code == CV_BayerGR2BGR; - - dst0 += dst_step + 3 + 1; - size.height -= 2; - size.width -= 2; - - for( ; size.height-- > 0; bayer0 += bayer_step, dst0 += dst_step ) - { - int t0, t1; - const T* bayer = bayer0; - T* dst = dst0; - const T* bayer_end = bayer + size.width; - - if( size.width <= 0 ) - { - dst[-4] = dst[-3] = dst[-2] = dst[size.width*3-1] = - dst[size.width*3] = dst[size.width*3+1] = 0; - continue; - } - - if( start_with_green ) - { - t0 = (bayer[1] + bayer[bayer_step*2+1] + 1) >> 1; - t1 = (bayer[bayer_step] + bayer[bayer_step+2] + 1) >> 1; - dst[-blue] = (T)t0; - dst[0] = bayer[bayer_step+1]; - dst[blue] = (T)t1; - bayer++; - dst += 3; - } - - int delta = vecOp.bayer2RGB(bayer, bayer_step, dst, size.width, blue); - bayer += delta; - dst += delta*3; - - if( blue > 0 ) - { - for( ; bayer <= bayer_end - 2; bayer += 2, dst += 6 ) - { - t0 = (bayer[0] + bayer[2] + bayer[bayer_step*2] + - bayer[bayer_step*2+2] + 2) >> 2; - t1 = (bayer[1] + bayer[bayer_step] + - bayer[bayer_step+2] + bayer[bayer_step*2+1]+2) >> 2; - dst[-1] = (T)t0; - dst[0] = (T)t1; - dst[1] = bayer[bayer_step+1]; - - t0 = (bayer[2] + bayer[bayer_step*2+2] + 1) >> 1; - t1 = (bayer[bayer_step+1] + bayer[bayer_step+3] + 1) >> 1; - dst[2] = (T)t0; - dst[3] = bayer[bayer_step+2]; - dst[4] = (T)t1; - } - } - else - { - for( ; bayer <= bayer_end - 2; bayer += 2, dst += 6 ) - { - t0 = (bayer[0] + bayer[2] + bayer[bayer_step*2] + - bayer[bayer_step*2+2] + 2) >> 2; - t1 = (bayer[1] + bayer[bayer_step] + - bayer[bayer_step+2] + bayer[bayer_step*2+1]+2) >> 2; - dst[1] = (T)t0; - dst[0] = (T)t1; - dst[-1] = bayer[bayer_step+1]; - - t0 = (bayer[2] + bayer[bayer_step*2+2] + 1) >> 1; - t1 = (bayer[bayer_step+1] + bayer[bayer_step+3] + 1) >> 1; - dst[4] = (T)t0; - dst[3] = bayer[bayer_step+2]; - dst[2] = (T)t1; - } - } - - if( bayer < bayer_end ) - { - t0 = (bayer[0] + bayer[2] + bayer[bayer_step*2] + - bayer[bayer_step*2+2] + 2) >> 2; - t1 = (bayer[1] + bayer[bayer_step] + - bayer[bayer_step+2] + bayer[bayer_step*2+1]+2) >> 2; - dst[-blue] = (T)t0; - dst[0] = (T)t1; - dst[blue] = bayer[bayer_step+1]; - bayer++; - dst += 3; - } - - dst0[-4] = dst0[-1]; - dst0[-3] = dst0[0]; - dst0[-2] = dst0[1]; - dst0[size.width*3-1] = dst0[size.width*3-4]; - dst0[size.width*3] = dst0[size.width*3-3]; - dst0[size.width*3+1] = dst0[size.width*3-2]; - - blue = -blue; - start_with_green = !start_with_green; - } - - size = dstmat.size(); - dst0 = (T*)dstmat.data; - if( size.height > 2 ) - for( int i = 0; i < size.width*3; i++ ) - { - dst0[i] = dst0[i + dst_step]; - dst0[i + (size.height-1)*dst_step] = dst0[i + (size.height-2)*dst_step]; - } - else - for( int i = 0; i < size.width*3; i++ ) - { - dst0[i] = dst0[i + (size.height-1)*dst_step] = 0; - } -} - - -/////////////////// Demosaicing using Variable Number of Gradients /////////////////////// - -static void Bayer2RGB_VNG_8u( const Mat& srcmat, Mat& dstmat, int code ) -{ - const uchar* bayer = srcmat.data; - int bstep = (int)srcmat.step; - uchar* dst = dstmat.data; - int dststep = (int)dstmat.step; - Size size = srcmat.size(); - - int blueIdx = code == CV_BayerBG2BGR_VNG || code == CV_BayerGB2BGR_VNG ? 0 : 2; - bool greenCell0 = code != CV_BayerBG2BGR_VNG && code != CV_BayerRG2BGR_VNG; - - // for too small images use the simple interpolation algorithm - if( MIN(size.width, size.height) < 8 ) - { - Bayer2RGB_( srcmat, dstmat, code ); - return; - } - - const int brows = 3, bcn = 7; - int N = size.width, N2 = N*2, N3 = N*3, N4 = N*4, N5 = N*5, N6 = N*6, N7 = N*7; - int i, bufstep = N7*bcn; - cv::AutoBuffer _buf(bufstep*brows); - ushort* buf = (ushort*)_buf; - - bayer += bstep*2; - -#if CV_SSE2 - bool haveSSE = cv::checkHardwareSupport(CV_CPU_SSE2); - #define _mm_absdiff_epu16(a,b) _mm_adds_epu16(_mm_subs_epu16(a, b), _mm_subs_epu16(b, a)) -#endif - - for( int y = 2; y < size.height - 4; y++ ) - { - uchar* dstrow = dst + dststep*y + 6; - const uchar* srow; - - for( int dy = (y == 2 ? -1 : 1); dy <= 1; dy++ ) - { - ushort* brow = buf + ((y + dy - 1)%brows)*bufstep + 1; - srow = bayer + (y+dy)*bstep + 1; - - for( i = 0; i < bcn; i++ ) - brow[N*i-1] = brow[(N-2) + N*i] = 0; - - i = 1; - -#if CV_SSE2 - if( haveSSE ) - { - __m128i z = _mm_setzero_si128(); - for( ; i <= N-9; i += 8, srow += 8, brow += 8 ) - { - __m128i s1, s2, s3, s4, s6, s7, s8, s9; - - s1 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow-1-bstep)),z); - s2 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow-bstep)),z); - s3 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow+1-bstep)),z); - - s4 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow-1)),z); - s6 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow+1)),z); - - s7 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow-1+bstep)),z); - s8 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow+bstep)),z); - s9 = _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)(srow+1+bstep)),z); - - __m128i b0, b1, b2, b3, b4, b5, b6; - - b0 = _mm_adds_epu16(_mm_slli_epi16(_mm_absdiff_epu16(s2,s8),1), - _mm_adds_epu16(_mm_absdiff_epu16(s1, s7), - _mm_absdiff_epu16(s3, s9))); - b1 = _mm_adds_epu16(_mm_slli_epi16(_mm_absdiff_epu16(s4,s6),1), - _mm_adds_epu16(_mm_absdiff_epu16(s1, s3), - _mm_absdiff_epu16(s7, s9))); - b2 = _mm_slli_epi16(_mm_absdiff_epu16(s3,s7),1); - b3 = _mm_slli_epi16(_mm_absdiff_epu16(s1,s9),1); - - _mm_storeu_si128((__m128i*)brow, b0); - _mm_storeu_si128((__m128i*)(brow + N), b1); - _mm_storeu_si128((__m128i*)(brow + N2), b2); - _mm_storeu_si128((__m128i*)(brow + N3), b3); - - b4 = _mm_adds_epu16(b2,_mm_adds_epu16(_mm_absdiff_epu16(s2, s4), - _mm_absdiff_epu16(s6, s8))); - b5 = _mm_adds_epu16(b3,_mm_adds_epu16(_mm_absdiff_epu16(s2, s6), - _mm_absdiff_epu16(s4, s8))); - b6 = _mm_adds_epu16(_mm_adds_epu16(s2, s4), _mm_adds_epu16(s6, s8)); - b6 = _mm_srli_epi16(b6, 1); - - _mm_storeu_si128((__m128i*)(brow + N4), b4); - _mm_storeu_si128((__m128i*)(brow + N5), b5); - _mm_storeu_si128((__m128i*)(brow + N6), b6); - } - } -#endif - - for( ; i < N-1; i++, srow++, brow++ ) - { - brow[0] = (ushort)(std::abs(srow[-1-bstep] - srow[-1+bstep]) + - std::abs(srow[-bstep] - srow[+bstep])*2 + - std::abs(srow[1-bstep] - srow[1+bstep])); - brow[N] = (ushort)(std::abs(srow[-1-bstep] - srow[1-bstep]) + - std::abs(srow[-1] - srow[1])*2 + - std::abs(srow[-1+bstep] - srow[1+bstep])); - brow[N2] = (ushort)(std::abs(srow[+1-bstep] - srow[-1+bstep])*2); - brow[N3] = (ushort)(std::abs(srow[-1-bstep] - srow[1+bstep])*2); - brow[N4] = (ushort)(brow[N2] + std::abs(srow[-bstep] - srow[-1]) + - std::abs(srow[+bstep] - srow[1])); - brow[N5] = (ushort)(brow[N3] + std::abs(srow[-bstep] - srow[1]) + - std::abs(srow[+bstep] - srow[-1])); - brow[N6] = (ushort)((srow[-bstep] + srow[-1] + srow[1] + srow[+bstep])>>1); - } - } - - const ushort* brow0 = buf + ((y - 2) % brows)*bufstep + 2; - const ushort* brow1 = buf + ((y - 1) % brows)*bufstep + 2; - const ushort* brow2 = buf + (y % brows)*bufstep + 2; - static const float scale[] = { 0.f, 0.5f, 0.25f, 0.1666666666667f, 0.125f, 0.1f, 0.08333333333f, 0.0714286f, 0.0625f }; - srow = bayer + y*bstep + 2; - bool greenCell = greenCell0; - - i = 2; -#if CV_SSE2 - int limit = !haveSSE ? N-2 : greenCell ? std::min(3, N-2) : 2; -#else - int limit = N - 2; -#endif - - do - { - for( ; i < limit; i++, srow++, brow0++, brow1++, brow2++, dstrow += 3 ) - { - int gradN = brow0[0] + brow1[0]; - int gradS = brow1[0] + brow2[0]; - int gradW = brow1[N-1] + brow1[N]; - int gradE = brow1[N] + brow1[N+1]; - int minGrad = std::min(std::min(std::min(gradN, gradS), gradW), gradE); - int maxGrad = std::max(std::max(std::max(gradN, gradS), gradW), gradE); - int R, G, B; - - if( !greenCell ) - { - int gradNE = brow0[N4+1] + brow1[N4]; - int gradSW = brow1[N4] + brow2[N4-1]; - int gradNW = brow0[N5-1] + brow1[N5]; - int gradSE = brow1[N5] + brow2[N5+1]; - - minGrad = std::min(std::min(std::min(std::min(minGrad, gradNE), gradSW), gradNW), gradSE); - maxGrad = std::max(std::max(std::max(std::max(maxGrad, gradNE), gradSW), gradNW), gradSE); - int T = minGrad + MAX(maxGrad/2, 1); - - int Rs = 0, Gs = 0, Bs = 0, ng = 0; - if( gradN < T ) - { - Rs += srow[-bstep*2] + srow[0]; - Gs += srow[-bstep]*2; - Bs += srow[-bstep-1] + srow[-bstep+1]; - ng++; - } - if( gradS < T ) - { - Rs += srow[bstep*2] + srow[0]; - Gs += srow[bstep]*2; - Bs += srow[bstep-1] + srow[bstep+1]; - ng++; - } - if( gradW < T ) - { - Rs += srow[-2] + srow[0]; - Gs += srow[-1]*2; - Bs += srow[-bstep-1] + srow[bstep-1]; - ng++; - } - if( gradE < T ) - { - Rs += srow[2] + srow[0]; - Gs += srow[1]*2; - Bs += srow[-bstep+1] + srow[bstep+1]; - ng++; - } - if( gradNE < T ) - { - Rs += srow[-bstep*2+2] + srow[0]; - Gs += brow0[N6+1]; - Bs += srow[-bstep+1]*2; - ng++; - } - if( gradSW < T ) - { - Rs += srow[bstep*2-2] + srow[0]; - Gs += brow2[N6-1]; - Bs += srow[bstep-1]*2; - ng++; - } - if( gradNW < T ) - { - Rs += srow[-bstep*2-2] + srow[0]; - Gs += brow0[N6-1]; - Bs += srow[-bstep+1]*2; - ng++; - } - if( gradSE < T ) - { - Rs += srow[bstep*2+2] + srow[0]; - Gs += brow2[N6+1]; - Bs += srow[-bstep+1]*2; - ng++; - } - R = srow[0]; - G = R + cvRound((Gs - Rs)*scale[ng]); - B = R + cvRound((Bs - Rs)*scale[ng]); - } - else - { - int gradNE = brow0[N2] + brow0[N2+1] + brow1[N2] + brow1[N2+1]; - int gradSW = brow1[N2] + brow1[N2-1] + brow2[N2] + brow2[N2-1]; - int gradNW = brow0[N3] + brow0[N3-1] + brow1[N3] + brow1[N3-1]; - int gradSE = brow1[N3] + brow1[N3+1] + brow2[N3] + brow2[N3+1]; - - minGrad = std::min(std::min(std::min(std::min(minGrad, gradNE), gradSW), gradNW), gradSE); - maxGrad = std::max(std::max(std::max(std::max(maxGrad, gradNE), gradSW), gradNW), gradSE); - int T = minGrad + MAX(maxGrad/2, 1); - - int Rs = 0, Gs = 0, Bs = 0, ng = 0; - if( gradN < T ) - { - Rs += srow[-bstep*2-1] + srow[-bstep*2+1]; - Gs += srow[-bstep*2] + srow[0]; - Bs += srow[-bstep]*2; - ng++; - } - if( gradS < T ) - { - Rs += srow[bstep*2-1] + srow[bstep*2+1]; - Gs += srow[bstep*2] + srow[0]; - Bs += srow[bstep]*2; - ng++; - } - if( gradW < T ) - { - Rs += srow[-1]*2; - Gs += srow[-2] + srow[0]; - Bs += srow[-bstep-2]+srow[bstep-2]; - ng++; - } - if( gradE < T ) - { - Rs += srow[1]*2; - Gs += srow[2] + srow[0]; - Bs += srow[-bstep+2]+srow[bstep+2]; - ng++; - } - if( gradNE < T ) - { - Rs += srow[-bstep*2+1] + srow[1]; - Gs += srow[-bstep+1]*2; - Bs += srow[-bstep] + srow[-bstep+2]; - ng++; - } - if( gradSW < T ) - { - Rs += srow[bstep*2-1] + srow[-1]; - Gs += srow[bstep-1]*2; - Bs += srow[bstep] + srow[bstep-2]; - ng++; - } - if( gradNW < T ) - { - Rs += srow[-bstep*2-1] + srow[-1]; - Gs += srow[-bstep-1]*2; - Bs += srow[-bstep-2]+srow[-bstep]; - ng++; - } - if( gradSE < T ) - { - Rs += srow[bstep*2+1] + srow[1]; - Gs += srow[bstep+1]*2; - Bs += srow[bstep+2]+srow[bstep]; - ng++; - } - G = srow[0]; - R = G + cvRound((Rs - Gs)*scale[ng]); - B = G + cvRound((Bs - Gs)*scale[ng]); - } - dstrow[blueIdx] = CV_CAST_8U(B); - dstrow[1] = CV_CAST_8U(G); - dstrow[blueIdx^2] = CV_CAST_8U(R); - greenCell = !greenCell; - } - -#if CV_SSE2 - if( !haveSSE ) - break; - - __m128i emask = _mm_set1_epi32(0x0000ffff), - omask = _mm_set1_epi32(0xffff0000), - z = _mm_setzero_si128(), - one = _mm_set1_epi16(1); - __m128 _0_5 = _mm_set1_ps(0.5f); - - #define _mm_merge_epi16(a, b) _mm_or_si128(_mm_and_si128(a, emask), _mm_and_si128(b, omask)) //(aA_aA_aA_aA) * (bB_bB_bB_bB) => (bA_bA_bA_bA) - #define _mm_cvtloepi16_ps(a) _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(a,a), 16)) //(1,2,3,4,5,6,7,8) => (1f,2f,3f,4f) - #define _mm_cvthiepi16_ps(a) _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpackhi_epi16(a,a), 16)) //(1,2,3,4,5,6,7,8) => (5f,6f,7f,8f) - #define _mm_loadl_u8_s16(ptr, offset) _mm_unpacklo_epi8(_mm_loadl_epi64((__m128i*)((ptr) + (offset))), z) //load 8 uchars to 8 shorts - - // process 8 pixels at once - for( ; i <= N - 10; i += 8, srow += 8, brow0 += 8, brow1 += 8, brow2 += 8 ) - { - //int gradN = brow0[0] + brow1[0]; - __m128i gradN = _mm_adds_epi16(_mm_loadu_si128((__m128i*)brow0), _mm_loadu_si128((__m128i*)brow1)); - - //int gradS = brow1[0] + brow2[0]; - __m128i gradS = _mm_adds_epi16(_mm_loadu_si128((__m128i*)brow1), _mm_loadu_si128((__m128i*)brow2)); - - //int gradW = brow1[N-1] + brow1[N]; - __m128i gradW = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N-1)), _mm_loadu_si128((__m128i*)(brow1+N))); - - //int gradE = brow1[N+1] + brow1[N]; - __m128i gradE = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N+1)), _mm_loadu_si128((__m128i*)(brow1+N))); - - //int minGrad = std::min(std::min(std::min(gradN, gradS), gradW), gradE); - //int maxGrad = std::max(std::max(std::max(gradN, gradS), gradW), gradE); - __m128i minGrad = _mm_min_epi16(_mm_min_epi16(gradN, gradS), _mm_min_epi16(gradW, gradE)); - __m128i maxGrad = _mm_max_epi16(_mm_max_epi16(gradN, gradS), _mm_max_epi16(gradW, gradE)); - - __m128i grad0, grad1; - - //int gradNE = brow0[N4+1] + brow1[N4]; - //int gradNE = brow0[N2] + brow0[N2+1] + brow1[N2] + brow1[N2+1]; - grad0 = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow0+N4+1)), _mm_loadu_si128((__m128i*)(brow1+N4))); - grad1 = _mm_adds_epi16( _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow0+N2)), _mm_loadu_si128((__m128i*)(brow0+N2+1))), - _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N2)), _mm_loadu_si128((__m128i*)(brow1+N2+1)))); - __m128i gradNE = _mm_merge_epi16(grad0, grad1); - - //int gradSW = brow1[N4] + brow2[N4-1]; - //int gradSW = brow1[N2] + brow1[N2-1] + brow2[N2] + brow2[N2-1]; - grad0 = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow2+N4-1)), _mm_loadu_si128((__m128i*)(brow1+N4))); - grad1 = _mm_adds_epi16(_mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow2+N2)), _mm_loadu_si128((__m128i*)(brow2+N2-1))), - _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N2)), _mm_loadu_si128((__m128i*)(brow1+N2-1)))); - __m128i gradSW = _mm_merge_epi16(grad0, grad1); - - minGrad = _mm_min_epi16(_mm_min_epi16(minGrad, gradNE), gradSW); - maxGrad = _mm_max_epi16(_mm_max_epi16(maxGrad, gradNE), gradSW); - - //int gradNW = brow0[N5-1] + brow1[N5]; - //int gradNW = brow0[N3] + brow0[N3-1] + brow1[N3] + brow1[N3-1]; - grad0 = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow0+N5-1)), _mm_loadu_si128((__m128i*)(brow1+N5))); - grad1 = _mm_adds_epi16(_mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow0+N3)), _mm_loadu_si128((__m128i*)(brow0+N3-1))), - _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N3)), _mm_loadu_si128((__m128i*)(brow1+N3-1)))); - __m128i gradNW = _mm_merge_epi16(grad0, grad1); - - //int gradSE = brow1[N5] + brow2[N5+1]; - //int gradSE = brow1[N3] + brow1[N3+1] + brow2[N3] + brow2[N3+1]; - grad0 = _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow2+N5+1)), _mm_loadu_si128((__m128i*)(brow1+N5))); - grad1 = _mm_adds_epi16(_mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow2+N3)), _mm_loadu_si128((__m128i*)(brow2+N3+1))), - _mm_adds_epi16(_mm_loadu_si128((__m128i*)(brow1+N3)), _mm_loadu_si128((__m128i*)(brow1+N3+1)))); - __m128i gradSE = _mm_merge_epi16(grad0, grad1); - - minGrad = _mm_min_epi16(_mm_min_epi16(minGrad, gradNW), gradSE); - maxGrad = _mm_max_epi16(_mm_max_epi16(maxGrad, gradNW), gradSE); - - //int T = minGrad + maxGrad/2; - __m128i T = _mm_adds_epi16(_mm_max_epi16(_mm_srli_epi16(maxGrad, 1), one), minGrad); - - __m128i RGs = z, GRs = z, Bs = z, ng = z; - - __m128i x0 = _mm_loadl_u8_s16(srow, +0 ); - __m128i x1 = _mm_loadl_u8_s16(srow, -1 - bstep ); - __m128i x2 = _mm_loadl_u8_s16(srow, -1 - bstep*2); - __m128i x3 = _mm_loadl_u8_s16(srow, - bstep ); - __m128i x4 = _mm_loadl_u8_s16(srow, +1 - bstep*2); - __m128i x5 = _mm_loadl_u8_s16(srow, +1 - bstep ); - __m128i x6 = _mm_loadl_u8_s16(srow, +2 - bstep ); - __m128i x7 = _mm_loadl_u8_s16(srow, +1 ); - __m128i x8 = _mm_loadl_u8_s16(srow, +2 + bstep ); - __m128i x9 = _mm_loadl_u8_s16(srow, +1 + bstep ); - __m128i x10 = _mm_loadl_u8_s16(srow, +1 + bstep*2); - __m128i x11 = _mm_loadl_u8_s16(srow, + bstep ); - __m128i x12 = _mm_loadl_u8_s16(srow, -1 + bstep*2); - __m128i x13 = _mm_loadl_u8_s16(srow, -1 + bstep ); - __m128i x14 = _mm_loadl_u8_s16(srow, -2 + bstep ); - __m128i x15 = _mm_loadl_u8_s16(srow, -1 ); - __m128i x16 = _mm_loadl_u8_s16(srow, -2 - bstep ); - - __m128i t0, t1, mask; - - // gradN *********************************************** - mask = _mm_cmpgt_epi16(T, gradN); // mask = T>gradN - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradN) - - t0 = _mm_slli_epi16(x3, 1); // srow[-bstep]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, -bstep*2), x0); // srow[-bstep*2] + srow[0] - - // RGs += (srow[-bstep*2] + srow[0]) * (T>gradN) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(t1, mask)); - // GRs += {srow[-bstep]*2; (srow[-bstep*2-1] + srow[-bstep*2+1])} * (T>gradN) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(t0, _mm_adds_epi16(x2,x4)), mask)); - // Bs += {(srow[-bstep-1]+srow[-bstep+1]); srow[-bstep]*2 } * (T>gradN) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_adds_epi16(x1,x5), t0), mask)); - - // gradNE ********************************************** - mask = _mm_cmpgt_epi16(T, gradNE); // mask = T>gradNE - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradNE) - - t0 = _mm_slli_epi16(x5, 1); // srow[-bstep+1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, -bstep*2+2), x0); // srow[-bstep*2+2] + srow[0] - - // RGs += {(srow[-bstep*2+2] + srow[0]); srow[-bstep+1]*2} * (T>gradNE) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(_mm_merge_epi16(t1, t0), mask)); - // GRs += {brow0[N6+1]; (srow[-bstep*2+1] + srow[1])} * (T>gradNE) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(_mm_loadu_si128((__m128i*)(brow0+N6+1)), _mm_adds_epi16(x4,x7)), mask)); - // Bs += {srow[-bstep+1]*2; (srow[-bstep] + srow[-bstep+2])} * (T>gradNE) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(t0,_mm_adds_epi16(x3,x6)), mask)); - - // gradE *********************************************** - mask = _mm_cmpgt_epi16(T, gradE); // mask = T>gradE - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradE) - - t0 = _mm_slli_epi16(x7, 1); // srow[1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, 2), x0); // srow[2] + srow[0] - - // RGs += (srow[2] + srow[0]) * (T>gradE) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(t1, mask)); - // GRs += (srow[1]*2) * (T>gradE) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(t0, mask)); - // Bs += {(srow[-bstep+1]+srow[bstep+1]); (srow[-bstep+2]+srow[bstep+2])} * (T>gradE) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_adds_epi16(x5,x9), _mm_adds_epi16(x6,x8)), mask)); - - // gradSE ********************************************** - mask = _mm_cmpgt_epi16(T, gradSE); // mask = T>gradSE - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradSE) - - t0 = _mm_slli_epi16(x9, 1); // srow[bstep+1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, bstep*2+2), x0); // srow[bstep*2+2] + srow[0] - - // RGs += {(srow[bstep*2+2] + srow[0]); srow[bstep+1]*2} * (T>gradSE) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(_mm_merge_epi16(t1, t0), mask)); - // GRs += {brow2[N6+1]; (srow[1]+srow[bstep*2+1])} * (T>gradSE) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(_mm_loadu_si128((__m128i*)(brow2+N6+1)), _mm_adds_epi16(x7,x10)), mask)); - // Bs += {srow[-bstep+1]*2; (srow[bstep+2]+srow[bstep])} * (T>gradSE) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_slli_epi16(x5, 1), _mm_adds_epi16(x8,x11)), mask)); - - // gradS *********************************************** - mask = _mm_cmpgt_epi16(T, gradS); // mask = T>gradS - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradS) - - t0 = _mm_slli_epi16(x11, 1); // srow[bstep]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow,bstep*2), x0); // srow[bstep*2]+srow[0] - - // RGs += (srow[bstep*2]+srow[0]) * (T>gradS) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(t1, mask)); - // GRs += {srow[bstep]*2; (srow[bstep*2+1]+srow[bstep*2-1])} * (T>gradS) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(t0, _mm_adds_epi16(x10,x12)), mask)); - // Bs += {(srow[bstep+1]+srow[bstep-1]); srow[bstep]*2} * (T>gradS) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_adds_epi16(x9,x13), t0), mask)); - - // gradSW ********************************************** - mask = _mm_cmpgt_epi16(T, gradSW); // mask = T>gradSW - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradSW) - - t0 = _mm_slli_epi16(x13, 1); // srow[bstep-1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, bstep*2-2), x0); // srow[bstep*2-2]+srow[0] - - // RGs += {(srow[bstep*2-2]+srow[0]); srow[bstep-1]*2} * (T>gradSW) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(_mm_merge_epi16(t1, t0), mask)); - // GRs += {brow2[N6-1]; (srow[bstep*2-1]+srow[-1])} * (T>gradSW) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(_mm_loadu_si128((__m128i*)(brow2+N6-1)), _mm_adds_epi16(x12,x15)), mask)); - // Bs += {srow[bstep-1]*2; (srow[bstep]+srow[bstep-2])} * (T>gradSW) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(t0,_mm_adds_epi16(x11,x14)), mask)); - - // gradW *********************************************** - mask = _mm_cmpgt_epi16(T, gradW); // mask = T>gradW - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradW) - - t0 = _mm_slli_epi16(x15, 1); // srow[-1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow, -2), x0); // srow[-2]+srow[0] - - // RGs += (srow[-2]+srow[0]) * (T>gradW) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(t1, mask)); - // GRs += (srow[-1]*2) * (T>gradW) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(t0, mask)); - // Bs += {(srow[-bstep-1]+srow[bstep-1]); (srow[bstep-2]+srow[-bstep-2])} * (T>gradW) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_adds_epi16(x1,x13), _mm_adds_epi16(x14,x16)), mask)); - - // gradNW ********************************************** - mask = _mm_cmpgt_epi16(T, gradNW); // mask = T>gradNW - ng = _mm_sub_epi16(ng, mask); // ng += (T>gradNW) - - t0 = _mm_slli_epi16(x1, 1); // srow[-bstep-1]*2 - t1 = _mm_adds_epi16(_mm_loadl_u8_s16(srow,-bstep*2-2), x0); // srow[-bstep*2-2]+srow[0] - - // RGs += {(srow[-bstep*2-2]+srow[0]); srow[-bstep-1]*2} * (T>gradNW) - RGs = _mm_adds_epi16(RGs, _mm_and_si128(_mm_merge_epi16(t1, t0), mask)); - // GRs += {brow0[N6-1]; (srow[-bstep*2-1]+srow[-1])} * (T>gradNW) - GRs = _mm_adds_epi16(GRs, _mm_and_si128(_mm_merge_epi16(_mm_loadu_si128((__m128i*)(brow0+N6-1)), _mm_adds_epi16(x2,x15)), mask)); - // Bs += {srow[-bstep-1]*2; (srow[-bstep]+srow[-bstep-2])} * (T>gradNW) - Bs = _mm_adds_epi16(Bs, _mm_and_si128(_mm_merge_epi16(_mm_slli_epi16(x5, 1),_mm_adds_epi16(x3,x16)), mask)); - - __m128 ngf0 = _mm_div_ps(_0_5, _mm_cvtloepi16_ps(ng)); - __m128 ngf1 = _mm_div_ps(_0_5, _mm_cvthiepi16_ps(ng)); - - // now interpolate r, g & b - t0 = _mm_subs_epi16(GRs, RGs); - t1 = _mm_subs_epi16(Bs, RGs); - - t0 = _mm_add_epi16(x0, _mm_packs_epi32( - _mm_cvtps_epi32(_mm_mul_ps(_mm_cvtloepi16_ps(t0), ngf0)), - _mm_cvtps_epi32(_mm_mul_ps(_mm_cvthiepi16_ps(t0), ngf1)))); - - t1 = _mm_add_epi16(x0, _mm_packs_epi32( - _mm_cvtps_epi32(_mm_mul_ps(_mm_cvtloepi16_ps(t1), ngf0)), - _mm_cvtps_epi32(_mm_mul_ps(_mm_cvthiepi16_ps(t1), ngf1)))); - - x1 = _mm_merge_epi16(x0, t0); - x2 = _mm_merge_epi16(t0, x0); - - uchar R[8], G[8], B[8]; - - _mm_storel_epi64(blueIdx ? (__m128i*)B : (__m128i*)R, _mm_packus_epi16(x1, z)); - _mm_storel_epi64((__m128i*)G, _mm_packus_epi16(x2, z)); - _mm_storel_epi64(blueIdx ? (__m128i*)R : (__m128i*)B, _mm_packus_epi16(t1, z)); - - for( int j = 0; j < 8; j++, dstrow += 3 ) - { - dstrow[0] = B[j]; dstrow[1] = G[j]; dstrow[2] = R[j]; - } - } -#endif - - limit = N - 2; - } - while( i < N - 2 ); - - for( i = 0; i < 6; i++ ) - { - dst[dststep*y + 5 - i] = dst[dststep*y + 8 - i]; - dst[dststep*y + (N - 2)*3 + i] = dst[dststep*y + (N - 3)*3 + i]; - } - - greenCell0 = !greenCell0; - blueIdx ^= 2; - } - - for( i = 0; i < size.width*3; i++ ) - { - dst[i] = dst[i + dststep] = dst[i + dststep*2]; - dst[i + dststep*(size.height-4)] = - dst[i + dststep*(size.height-3)] = - dst[i + dststep*(size.height-2)] = - dst[i + dststep*(size.height-1)] = dst[i + dststep*(size.height-5)]; - } -} - -///////////////////////////////////// YUV420 -> RGB ///////////////////////////////////// - -const int ITUR_BT_601_CY = 1220542; -const int ITUR_BT_601_CUB = 2116026; -const int ITUR_BT_601_CUG = -409993; -const int ITUR_BT_601_CVG = -852492; -const int ITUR_BT_601_CVR = 1673527; -const int ITUR_BT_601_SHIFT = 20; - -// Coefficients for RGB to YUV420p conversion -const int ITUR_BT_601_CRY = 269484; -const int ITUR_BT_601_CGY = 528482; -const int ITUR_BT_601_CBY = 102760; -const int ITUR_BT_601_CRU = -155188; -const int ITUR_BT_601_CGU = -305135; -const int ITUR_BT_601_CBU = 460324; -const int ITUR_BT_601_CGV = -385875; -const int ITUR_BT_601_CBV = -74448; - -template -struct YUV420sp2RGB888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* my1, *muv; - int width, stride; - - YUV420sp2RGB888Invoker(Mat* _dst, int _stride, const uchar* _y1, const uchar* _uv) - : dst(_dst), my1(_y1), muv(_uv), width(_dst->cols), stride(_stride) {} - - void operator()(const Range& range) const - { - int rangeBegin = range.start * 2; - int rangeEnd = range.end * 2; - - //R = 1.164(Y - 16) + 1.596(V - 128) - //G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) - //B = 1.164(Y - 16) + 2.018(U - 128) - - //R = (1220542(Y - 16) + 1673527(V - 128) + (1 << 19)) >> 20 - //G = (1220542(Y - 16) - 852492(V - 128) - 409993(U - 128) + (1 << 19)) >> 20 - //B = (1220542(Y - 16) + 2116026(U - 128) + (1 << 19)) >> 20 - - const uchar* y1 = my1 + rangeBegin * stride, *uv = muv + rangeBegin * stride / 2; - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(tegra::cvtYUV4202RGB(bIdx, uIdx, 3, y1, uv, stride, dst->ptr(rangeBegin), dst->step, rangeEnd - rangeBegin, dst->cols)) - return; -#endif - - for (int j = rangeBegin; j < rangeEnd; j += 2, y1 += stride * 2, uv += stride) - { - uchar* row1 = dst->ptr(j); - uchar* row2 = dst->ptr(j + 1); - const uchar* y2 = y1 + stride; - - for (int i = 0; i < width; i += 2, row1 += 6, row2 += 6) - { - int u = int(uv[i + 0 + uIdx]) - 128; - int v = int(uv[i + 1 - uIdx]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(y1[i]) - 16) * ITUR_BT_601_CY; - row1[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row1[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row1[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - - int y01 = std::max(0, int(y1[i + 1]) - 16) * ITUR_BT_601_CY; - row1[5-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row1[4] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row1[3+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - - int y10 = std::max(0, int(y2[i]) - 16) * ITUR_BT_601_CY; - row2[2-bIdx] = saturate_cast((y10 + ruv) >> ITUR_BT_601_SHIFT); - row2[1] = saturate_cast((y10 + guv) >> ITUR_BT_601_SHIFT); - row2[bIdx] = saturate_cast((y10 + buv) >> ITUR_BT_601_SHIFT); - - int y11 = std::max(0, int(y2[i + 1]) - 16) * ITUR_BT_601_CY; - row2[5-bIdx] = saturate_cast((y11 + ruv) >> ITUR_BT_601_SHIFT); - row2[4] = saturate_cast((y11 + guv) >> ITUR_BT_601_SHIFT); - row2[3+bIdx] = saturate_cast((y11 + buv) >> ITUR_BT_601_SHIFT); - } - } - } -}; - -template -struct YUV420sp2RGBA8888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* my1, *muv; - int width, stride; - - YUV420sp2RGBA8888Invoker(Mat* _dst, int _stride, const uchar* _y1, const uchar* _uv) - : dst(_dst), my1(_y1), muv(_uv), width(_dst->cols), stride(_stride) {} - - void operator()(const Range& range) const - { - int rangeBegin = range.start * 2; - int rangeEnd = range.end * 2; - - //R = 1.164(Y - 16) + 1.596(V - 128) - //G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) - //B = 1.164(Y - 16) + 2.018(U - 128) - - //R = (1220542(Y - 16) + 1673527(V - 128) + (1 << 19)) >> 20 - //G = (1220542(Y - 16) - 852492(V - 128) - 409993(U - 128) + (1 << 19)) >> 20 - //B = (1220542(Y - 16) + 2116026(U - 128) + (1 << 19)) >> 20 - - const uchar* y1 = my1 + rangeBegin * stride, *uv = muv + rangeBegin * stride / 2; - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(tegra::cvtYUV4202RGB(bIdx, uIdx, 4, y1, uv, stride, dst->ptr(rangeBegin), dst->step, rangeEnd - rangeBegin, dst->cols)) - return; -#endif - - for (int j = rangeBegin; j < rangeEnd; j += 2, y1 += stride * 2, uv += stride) - { - uchar* row1 = dst->ptr(j); - uchar* row2 = dst->ptr(j + 1); - const uchar* y2 = y1 + stride; - - for (int i = 0; i < width; i += 2, row1 += 8, row2 += 8) - { - int u = int(uv[i + 0 + uIdx]) - 128; - int v = int(uv[i + 1 - uIdx]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(y1[i]) - 16) * ITUR_BT_601_CY; - row1[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row1[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row1[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - row1[3] = uchar(0xff); - - int y01 = std::max(0, int(y1[i + 1]) - 16) * ITUR_BT_601_CY; - row1[6-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row1[5] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row1[4+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - row1[7] = uchar(0xff); - - int y10 = std::max(0, int(y2[i]) - 16) * ITUR_BT_601_CY; - row2[2-bIdx] = saturate_cast((y10 + ruv) >> ITUR_BT_601_SHIFT); - row2[1] = saturate_cast((y10 + guv) >> ITUR_BT_601_SHIFT); - row2[bIdx] = saturate_cast((y10 + buv) >> ITUR_BT_601_SHIFT); - row2[3] = uchar(0xff); - - int y11 = std::max(0, int(y2[i + 1]) - 16) * ITUR_BT_601_CY; - row2[6-bIdx] = saturate_cast((y11 + ruv) >> ITUR_BT_601_SHIFT); - row2[5] = saturate_cast((y11 + guv) >> ITUR_BT_601_SHIFT); - row2[4+bIdx] = saturate_cast((y11 + buv) >> ITUR_BT_601_SHIFT); - row2[7] = uchar(0xff); - } - } - } -}; - -template -struct YUV420p2RGB888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* my1, *mu, *mv; - int width, stride; - int ustepIdx, vstepIdx; - - YUV420p2RGB888Invoker(Mat* _dst, int _stride, const uchar* _y1, const uchar* _u, const uchar* _v, int _ustepIdx, int _vstepIdx) - : dst(_dst), my1(_y1), mu(_u), mv(_v), width(_dst->cols), stride(_stride), ustepIdx(_ustepIdx), vstepIdx(_vstepIdx) {} - - void operator()(const Range& range) const - { - const int rangeBegin = range.start * 2; - const int rangeEnd = range.end * 2; - - int uvsteps[2] = {width/2, stride - width/2}; - int usIdx = ustepIdx, vsIdx = vstepIdx; - - const uchar* y1 = my1 + rangeBegin * stride; - const uchar* u1 = mu + (range.start / 2) * stride; - const uchar* v1 = mv + (range.start / 2) * stride; - - if(range.start % 2 == 1) - { - u1 += uvsteps[(usIdx++) & 1]; - v1 += uvsteps[(vsIdx++) & 1]; - } - - for (int j = rangeBegin; j < rangeEnd; j += 2, y1 += stride * 2, u1 += uvsteps[(usIdx++) & 1], v1 += uvsteps[(vsIdx++) & 1]) - { - uchar* row1 = dst->ptr(j); - uchar* row2 = dst->ptr(j + 1); - const uchar* y2 = y1 + stride; - - for (int i = 0; i < width / 2; i += 1, row1 += 6, row2 += 6) - { - int u = int(u1[i]) - 128; - int v = int(v1[i]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(y1[2 * i]) - 16) * ITUR_BT_601_CY; - row1[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row1[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row1[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - - int y01 = std::max(0, int(y1[2 * i + 1]) - 16) * ITUR_BT_601_CY; - row1[5-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row1[4] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row1[3+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - - int y10 = std::max(0, int(y2[2 * i]) - 16) * ITUR_BT_601_CY; - row2[2-bIdx] = saturate_cast((y10 + ruv) >> ITUR_BT_601_SHIFT); - row2[1] = saturate_cast((y10 + guv) >> ITUR_BT_601_SHIFT); - row2[bIdx] = saturate_cast((y10 + buv) >> ITUR_BT_601_SHIFT); - - int y11 = std::max(0, int(y2[2 * i + 1]) - 16) * ITUR_BT_601_CY; - row2[5-bIdx] = saturate_cast((y11 + ruv) >> ITUR_BT_601_SHIFT); - row2[4] = saturate_cast((y11 + guv) >> ITUR_BT_601_SHIFT); - row2[3+bIdx] = saturate_cast((y11 + buv) >> ITUR_BT_601_SHIFT); - } - } - } -}; - -template -struct YUV420p2RGBA8888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* my1, *mu, *mv; - int width, stride; - int ustepIdx, vstepIdx; - - YUV420p2RGBA8888Invoker(Mat* _dst, int _stride, const uchar* _y1, const uchar* _u, const uchar* _v, int _ustepIdx, int _vstepIdx) - : dst(_dst), my1(_y1), mu(_u), mv(_v), width(_dst->cols), stride(_stride), ustepIdx(_ustepIdx), vstepIdx(_vstepIdx) {} - - void operator()(const Range& range) const - { - int rangeBegin = range.start * 2; - int rangeEnd = range.end * 2; - - int uvsteps[2] = {width/2, stride - width/2}; - int usIdx = ustepIdx, vsIdx = vstepIdx; - - const uchar* y1 = my1 + rangeBegin * stride; - const uchar* u1 = mu + (range.start / 2) * stride; - const uchar* v1 = mv + (range.start / 2) * stride; - - if(range.start % 2 == 1) - { - u1 += uvsteps[(usIdx++) & 1]; - v1 += uvsteps[(vsIdx++) & 1]; - } - - for (int j = rangeBegin; j < rangeEnd; j += 2, y1 += stride * 2, u1 += uvsteps[(usIdx++) & 1], v1 += uvsteps[(vsIdx++) & 1]) - { - uchar* row1 = dst->ptr(j); - uchar* row2 = dst->ptr(j + 1); - const uchar* y2 = y1 + stride; - - for (int i = 0; i < width / 2; i += 1, row1 += 8, row2 += 8) - { - int u = int(u1[i]) - 128; - int v = int(v1[i]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(y1[2 * i]) - 16) * ITUR_BT_601_CY; - row1[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row1[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row1[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - row1[3] = uchar(0xff); - - int y01 = std::max(0, int(y1[2 * i + 1]) - 16) * ITUR_BT_601_CY; - row1[6-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row1[5] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row1[4+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - row1[7] = uchar(0xff); - - int y10 = std::max(0, int(y2[2 * i]) - 16) * ITUR_BT_601_CY; - row2[2-bIdx] = saturate_cast((y10 + ruv) >> ITUR_BT_601_SHIFT); - row2[1] = saturate_cast((y10 + guv) >> ITUR_BT_601_SHIFT); - row2[bIdx] = saturate_cast((y10 + buv) >> ITUR_BT_601_SHIFT); - row2[3] = uchar(0xff); - - int y11 = std::max(0, int(y2[2 * i + 1]) - 16) * ITUR_BT_601_CY; - row2[6-bIdx] = saturate_cast((y11 + ruv) >> ITUR_BT_601_SHIFT); - row2[5] = saturate_cast((y11 + guv) >> ITUR_BT_601_SHIFT); - row2[4+bIdx] = saturate_cast((y11 + buv) >> ITUR_BT_601_SHIFT); - row2[7] = uchar(0xff); - } - } - } -}; - -#define MIN_SIZE_FOR_PARALLEL_YUV420_CONVERSION (320*240) - -template -inline void cvtYUV420sp2RGB(Mat& _dst, int _stride, const uchar* _y1, const uchar* _uv) -{ - YUV420sp2RGB888Invoker converter(&_dst, _stride, _y1, _uv); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV420_CONVERSION) - parallel_for_(Range(0, _dst.rows/2), converter); - else - converter(Range(0, _dst.rows/2)); -} - -template -inline void cvtYUV420sp2RGBA(Mat& _dst, int _stride, const uchar* _y1, const uchar* _uv) -{ - YUV420sp2RGBA8888Invoker converter(&_dst, _stride, _y1, _uv); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV420_CONVERSION) - parallel_for_(Range(0, _dst.rows/2), converter); - else - converter(Range(0, _dst.rows/2)); -} - -template -inline void cvtYUV420p2RGB(Mat& _dst, int _stride, const uchar* _y1, const uchar* _u, const uchar* _v, int ustepIdx, int vstepIdx) -{ - YUV420p2RGB888Invoker converter(&_dst, _stride, _y1, _u, _v, ustepIdx, vstepIdx); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV420_CONVERSION) - parallel_for_(Range(0, _dst.rows/2), converter); - else - converter(Range(0, _dst.rows/2)); -} - -template -inline void cvtYUV420p2RGBA(Mat& _dst, int _stride, const uchar* _y1, const uchar* _u, const uchar* _v, int ustepIdx, int vstepIdx) -{ - YUV420p2RGBA8888Invoker converter(&_dst, _stride, _y1, _u, _v, ustepIdx, vstepIdx); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV420_CONVERSION) - parallel_for_(Range(0, _dst.rows/2), converter); - else - converter(Range(0, _dst.rows/2)); -} - -///////////////////////////////////// RGB -> YUV420p ///////////////////////////////////// - -template -struct RGB888toYUV420pInvoker: public ParallelLoopBody -{ - RGB888toYUV420pInvoker( const Mat& src, Mat* dst, const int uIdx ) - : src_(src), - dst_(dst), - uIdx_(uIdx) { } - - void operator()(const Range& rowRange) const - { - const int w = src_.cols; - const int h = src_.rows; - - const int cn = src_.channels(); - for( int i = rowRange.start; i < rowRange.end; i++ ) - { - const uchar* row0 = src_.ptr(2 * i); - const uchar* row1 = src_.ptr(2 * i + 1); - - uchar* y = dst_->ptr(2*i); - uchar* u = dst_->ptr(h + i/2) + (i % 2) * (w/2); - uchar* v = dst_->ptr(h + (i + h/2)/2) + ((i + h/2) % 2) * (w/2); - if( uIdx_ == 2 ) std::swap(u, v); - - for( int j = 0, k = 0; j < w * cn; j += 2 * cn, k++ ) - { - int r00 = row0[2-bIdx + j]; int g00 = row0[1 + j]; int b00 = row0[bIdx + j]; - int r01 = row0[2-bIdx + cn + j]; int g01 = row0[1 + cn + j]; int b01 = row0[bIdx + cn + j]; - int r10 = row1[2-bIdx + j]; int g10 = row1[1 + j]; int b10 = row1[bIdx + j]; - int r11 = row1[2-bIdx + cn + j]; int g11 = row1[1 + cn + j]; int b11 = row1[bIdx + cn + j]; - - const int shifted16 = (16 << ITUR_BT_601_SHIFT); - const int halfShift = (1 << (ITUR_BT_601_SHIFT - 1)); - int y00 = ITUR_BT_601_CRY * r00 + ITUR_BT_601_CGY * g00 + ITUR_BT_601_CBY * b00 + halfShift + shifted16; - int y01 = ITUR_BT_601_CRY * r01 + ITUR_BT_601_CGY * g01 + ITUR_BT_601_CBY * b01 + halfShift + shifted16; - int y10 = ITUR_BT_601_CRY * r10 + ITUR_BT_601_CGY * g10 + ITUR_BT_601_CBY * b10 + halfShift + shifted16; - int y11 = ITUR_BT_601_CRY * r11 + ITUR_BT_601_CGY * g11 + ITUR_BT_601_CBY * b11 + halfShift + shifted16; - - y[2*k + 0] = saturate_cast(y00 >> ITUR_BT_601_SHIFT); - y[2*k + 1] = saturate_cast(y01 >> ITUR_BT_601_SHIFT); - y[2*k + dst_->step + 0] = saturate_cast(y10 >> ITUR_BT_601_SHIFT); - y[2*k + dst_->step + 1] = saturate_cast(y11 >> ITUR_BT_601_SHIFT); - - const int shifted128 = (128 << ITUR_BT_601_SHIFT); - int u00 = ITUR_BT_601_CRU * r00 + ITUR_BT_601_CGU * g00 + ITUR_BT_601_CBU * b00 + halfShift + shifted128; - int v00 = ITUR_BT_601_CBU * r00 + ITUR_BT_601_CGV * g00 + ITUR_BT_601_CBV * b00 + halfShift + shifted128; - - u[k] = saturate_cast(u00 >> ITUR_BT_601_SHIFT); - v[k] = saturate_cast(v00 >> ITUR_BT_601_SHIFT); - } - } - } - - static bool isFit( const Mat& src ) - { - return (src.total() >= 320*240); - } - -private: - RGB888toYUV420pInvoker& operator=(const RGB888toYUV420pInvoker&); - - const Mat& src_; - Mat* const dst_; - const int uIdx_; -}; - -template -static void cvtRGBtoYUV420p(const Mat& src, Mat& dst) -{ - RGB888toYUV420pInvoker colorConverter(src, &dst, uIdx); - if( RGB888toYUV420pInvoker::isFit(src) ) - parallel_for_(Range(0, src.rows/2), colorConverter); - else - colorConverter(Range(0, src.rows/2)); -} - -///////////////////////////////////// YUV422 -> RGB ///////////////////////////////////// - -template -struct YUV422toRGB888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* src; - int width, stride; - - YUV422toRGB888Invoker(Mat* _dst, int _stride, const uchar* _yuv) - : dst(_dst), src(_yuv), width(_dst->cols), stride(_stride) {} - - void operator()(const Range& range) const - { - int rangeBegin = range.start; - int rangeEnd = range.end; - - const int uidx = 1 - yIdx + uIdx * 2; - const int vidx = (2 + uidx) % 4; - const uchar* yuv_src = src + rangeBegin * stride; - - for (int j = rangeBegin; j < rangeEnd; j++, yuv_src += stride) - { - uchar* row = dst->ptr(j); - - for (int i = 0; i < 2 * width; i += 4, row += 6) - { - int u = int(yuv_src[i + uidx]) - 128; - int v = int(yuv_src[i + vidx]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(yuv_src[i + yIdx]) - 16) * ITUR_BT_601_CY; - row[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - - int y01 = std::max(0, int(yuv_src[i + yIdx + 2]) - 16) * ITUR_BT_601_CY; - row[5-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row[4] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row[3+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - } - } - } -}; - -template -struct YUV422toRGBA8888Invoker : ParallelLoopBody -{ - Mat* dst; - const uchar* src; - int width, stride; - - YUV422toRGBA8888Invoker(Mat* _dst, int _stride, const uchar* _yuv) - : dst(_dst), src(_yuv), width(_dst->cols), stride(_stride) {} - - void operator()(const Range& range) const - { - int rangeBegin = range.start; - int rangeEnd = range.end; - - const int uidx = 1 - yIdx + uIdx * 2; - const int vidx = (2 + uidx) % 4; - const uchar* yuv_src = src + rangeBegin * stride; - - for (int j = rangeBegin; j < rangeEnd; j++, yuv_src += stride) - { - uchar* row = dst->ptr(j); - - for (int i = 0; i < 2 * width; i += 4, row += 8) - { - int u = int(yuv_src[i + uidx]) - 128; - int v = int(yuv_src[i + vidx]) - 128; - - int ruv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVR * v; - int guv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CVG * v + ITUR_BT_601_CUG * u; - int buv = (1 << (ITUR_BT_601_SHIFT - 1)) + ITUR_BT_601_CUB * u; - - int y00 = std::max(0, int(yuv_src[i + yIdx]) - 16) * ITUR_BT_601_CY; - row[2-bIdx] = saturate_cast((y00 + ruv) >> ITUR_BT_601_SHIFT); - row[1] = saturate_cast((y00 + guv) >> ITUR_BT_601_SHIFT); - row[bIdx] = saturate_cast((y00 + buv) >> ITUR_BT_601_SHIFT); - row[3] = uchar(0xff); - - int y01 = std::max(0, int(yuv_src[i + yIdx + 2]) - 16) * ITUR_BT_601_CY; - row[6-bIdx] = saturate_cast((y01 + ruv) >> ITUR_BT_601_SHIFT); - row[5] = saturate_cast((y01 + guv) >> ITUR_BT_601_SHIFT); - row[4+bIdx] = saturate_cast((y01 + buv) >> ITUR_BT_601_SHIFT); - row[7] = uchar(0xff); - } - } - } -}; - -#define MIN_SIZE_FOR_PARALLEL_YUV422_CONVERSION (320*240) - -template -inline void cvtYUV422toRGB(Mat& _dst, int _stride, const uchar* _yuv) -{ - YUV422toRGB888Invoker converter(&_dst, _stride, _yuv); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV422_CONVERSION) - parallel_for_(Range(0, _dst.rows), converter); - else - converter(Range(0, _dst.rows)); -} - -template -inline void cvtYUV422toRGBA(Mat& _dst, int _stride, const uchar* _yuv) -{ - YUV422toRGBA8888Invoker converter(&_dst, _stride, _yuv); - if (_dst.total() >= MIN_SIZE_FOR_PARALLEL_YUV422_CONVERSION) - parallel_for_(Range(0, _dst.rows), converter); - else - converter(Range(0, _dst.rows)); -} - -/////////////////////////// RGBA <-> mRGBA (alpha premultiplied) ////////////// - -template -struct RGBA2mRGBA -{ - typedef _Tp channel_type; - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - _Tp max_val = ColorChannel<_Tp>::max(); - _Tp half_val = ColorChannel<_Tp>::half(); - for( int i = 0; i < n; i++ ) - { - _Tp v0 = *src++; - _Tp v1 = *src++; - _Tp v2 = *src++; - _Tp v3 = *src++; - - *dst++ = (v0 * v3 + half_val) / max_val; - *dst++ = (v1 * v3 + half_val) / max_val; - *dst++ = (v2 * v3 + half_val) / max_val; - *dst++ = v3; - } - } -}; - - -template -struct mRGBA2RGBA -{ - typedef _Tp channel_type; - - void operator()(const _Tp* src, _Tp* dst, int n) const - { - _Tp max_val = ColorChannel<_Tp>::max(); - for( int i = 0; i < n; i++ ) - { - _Tp v0 = *src++; - _Tp v1 = *src++; - _Tp v2 = *src++; - _Tp v3 = *src++; - _Tp v3_half = v3 / 2; - - *dst++ = (v3==0)? 0 : (v0 * max_val + v3_half) / v3; - *dst++ = (v3==0)? 0 : (v1 * max_val + v3_half) / v3; - *dst++ = (v3==0)? 0 : (v2 * max_val + v3_half) / v3; - *dst++ = v3; - } - } -}; - -}//namespace cv - -////////////////////////////////////////////////////////////////////////////////////////// -// The main function // -////////////////////////////////////////////////////////////////////////////////////////// - -void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn ) -{ - Mat src = _src.getMat(), dst; - Size sz = src.size(); - int scn = src.channels(), depth = src.depth(), bidx; - - CV_Assert( depth == CV_8U || depth == CV_16U || depth == CV_32F ); - - switch( code ) - { - case CV_BGR2BGRA: case CV_RGB2BGRA: case CV_BGRA2BGR: - case CV_RGBA2BGR: case CV_RGB2BGR: case CV_BGRA2RGBA: - CV_Assert( scn == 3 || scn == 4 ); - dcn = code == CV_BGR2BGRA || code == CV_RGB2BGRA || code == CV_BGRA2RGBA ? 4 : 3; - bidx = code == CV_BGR2BGRA || code == CV_BGRA2BGR ? 0 : 2; - - _dst.create( sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( code == CV_BGR2BGRA || code == CV_RGB2RGBA) - { - if ( CvtColorIPPLoop(src, dst, IPPReorderFunctor(ippiSwapChannelsC3C4RTab[depth], 0, 1, 2)) ) - return; - } - else if( code == CV_BGRA2BGR ) - { - if ( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiCopyAC4C3RTab[depth])) ) - return; - } - else if( code == CV_BGR2RGBA ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderFunctor(ippiSwapChannelsC3C4RTab[depth], 2, 1, 0)) ) - return; - } - else if( code == CV_RGBA2BGR ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderFunctor(ippiSwapChannelsC4C3RTab[depth], 2, 1, 0)) ) - return; - } - else if( code == CV_RGB2BGR ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPReorderFunctor(ippiSwapChannelsC3RTab[depth], 2, 1, 0)) ) - return; - } - else if( code == CV_RGBA2BGRA ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPReorderFunctor(ippiSwapChannelsC4RTab[depth], 2, 1, 0)) ) - return; - } -#endif - - if( depth == CV_8U ) - { -#ifdef HAVE_TEGRA_OPTIMIZATION - if(!tegra::cvtBGR2RGB(src, dst, bidx)) -#endif - CvtColorLoop(src, dst, RGB2RGB(scn, dcn, bidx)); - } - else if( depth == CV_16U ) - CvtColorLoop(src, dst, RGB2RGB(scn, dcn, bidx)); - else - CvtColorLoop(src, dst, RGB2RGB(scn, dcn, bidx)); - break; - - case CV_BGR2BGR565: case CV_BGR2BGR555: case CV_RGB2BGR565: case CV_RGB2BGR555: - case CV_BGRA2BGR565: case CV_BGRA2BGR555: case CV_RGBA2BGR565: case CV_RGBA2BGR555: - CV_Assert( (scn == 3 || scn == 4) && depth == CV_8U ); - _dst.create(sz, CV_8UC2); - dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(code == CV_BGR2BGR565 || code == CV_BGRA2BGR565 || code == CV_RGB2BGR565 || code == CV_RGBA2BGR565) - if(tegra::cvtRGB2RGB565(src, dst, code == CV_RGB2BGR565 || code == CV_RGBA2BGR565 ? 0 : 2)) - break; -#endif - - CvtColorLoop(src, dst, RGB2RGB5x5(scn, - code == CV_BGR2BGR565 || code == CV_BGR2BGR555 || - code == CV_BGRA2BGR565 || code == CV_BGRA2BGR555 ? 0 : 2, - code == CV_BGR2BGR565 || code == CV_RGB2BGR565 || - code == CV_BGRA2BGR565 || code == CV_RGBA2BGR565 ? 6 : 5 // green bits - )); - break; - - case CV_BGR5652BGR: case CV_BGR5552BGR: case CV_BGR5652RGB: case CV_BGR5552RGB: - case CV_BGR5652BGRA: case CV_BGR5552BGRA: case CV_BGR5652RGBA: case CV_BGR5552RGBA: - if(dcn <= 0) dcn = (code==CV_BGR5652BGRA || code==CV_BGR5552BGRA || code==CV_BGR5652RGBA || code==CV_BGR5552RGBA) ? 4 : 3; - CV_Assert( (dcn == 3 || dcn == 4) && scn == 2 && depth == CV_8U ); - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - CvtColorLoop(src, dst, RGB5x52RGB(dcn, - code == CV_BGR5652BGR || code == CV_BGR5552BGR || - code == CV_BGR5652BGRA || code == CV_BGR5552BGRA ? 0 : 2, // blue idx - code == CV_BGR5652BGR || code == CV_BGR5652RGB || - code == CV_BGR5652BGRA || code == CV_BGR5652RGBA ? 6 : 5 // green bits - )); - break; - - case CV_BGR2GRAY: case CV_BGRA2GRAY: case CV_RGB2GRAY: case CV_RGBA2GRAY: - CV_Assert( scn == 3 || scn == 4 ); - _dst.create(sz, CV_MAKETYPE(depth, 1)); - dst = _dst.getMat(); -/* -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( code == CV_BGR2GRAY ) - { - if( CvtColorIPPLoop(src, dst, IPPColor2GrayFunctor(ippiColor2GrayC3Tab[depth])) ) - return; - } - else if( code == CV_RGB2GRAY ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiRGB2GrayC3Tab[depth])) ) - return; - } - else if( code == CV_BGRA2GRAY ) - { - if( CvtColorIPPLoop(src, dst, IPPColor2GrayFunctor(ippiColor2GrayC4Tab[depth])) ) - return; - } - else if( code == CV_RGBA2GRAY ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralFunctor(ippiRGB2GrayC4Tab[depth])) ) - return; - } -#endif -*/ - bidx = code == CV_BGR2GRAY || code == CV_BGRA2GRAY ? 0 : 2; - - if( depth == CV_8U ) - { -#ifdef HAVE_TEGRA_OPTIMIZATION - if(!tegra::cvtRGB2Gray(src, dst, bidx)) -#endif - CvtColorLoop(src, dst, RGB2Gray(scn, bidx, 0)); - } - else if( depth == CV_16U ) - CvtColorLoop(src, dst, RGB2Gray(scn, bidx, 0)); - else - CvtColorLoop(src, dst, RGB2Gray(scn, bidx, 0)); - break; - - case CV_BGR5652GRAY: case CV_BGR5552GRAY: - CV_Assert( scn == 2 && depth == CV_8U ); - _dst.create(sz, CV_8UC1); - dst = _dst.getMat(); - - CvtColorLoop(src, dst, RGB5x52Gray(code == CV_BGR5652GRAY ? 6 : 5)); - break; - - case CV_GRAY2BGR: case CV_GRAY2BGRA: - if( dcn <= 0 ) dcn = (code==CV_GRAY2BGRA) ? 4 : 3; - CV_Assert( scn == 1 && (dcn == 3 || dcn == 4)); - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( code == CV_GRAY2BGR ) - { - if( CvtColorIPPLoop(src, dst, IPPGray2BGRFunctor(ippiCopyP3C3RTab[depth])) ) - return; - } - else if( code == CV_GRAY2BGRA ) - { - if( CvtColorIPPLoop(src, dst, IPPGray2BGRAFunctor(ippiCopyP3C3RTab[depth], ippiSwapChannelsC3C4RTab[depth], depth)) ) - return; - } -#endif - - - if( depth == CV_8U ) - { -#ifdef HAVE_TEGRA_OPTIMIZATION - if(!tegra::cvtGray2RGB(src, dst)) -#endif - CvtColorLoop(src, dst, Gray2RGB(dcn)); - } - else if( depth == CV_16U ) - CvtColorLoop(src, dst, Gray2RGB(dcn)); - else - CvtColorLoop(src, dst, Gray2RGB(dcn)); - break; - - case CV_GRAY2BGR565: case CV_GRAY2BGR555: - CV_Assert( scn == 1 && depth == CV_8U ); - _dst.create(sz, CV_8UC2); - dst = _dst.getMat(); - - CvtColorLoop(src, dst, Gray2RGB5x5(code == CV_GRAY2BGR565 ? 6 : 5)); - break; - - case CV_BGR2YCrCb: case CV_RGB2YCrCb: - case CV_BGR2YUV: case CV_RGB2YUV: - { - CV_Assert( scn == 3 || scn == 4 ); - bidx = code == CV_BGR2YCrCb || code == CV_BGR2YUV ? 0 : 2; - static const float yuv_f[] = { 0.114f, 0.587f, 0.299f, 0.492f, 0.877f }; - static const int yuv_i[] = { B2Y, G2Y, R2Y, 8061, 14369 }; - const float* coeffs_f = code == CV_BGR2YCrCb || code == CV_RGB2YCrCb ? 0 : yuv_f; - const int* coeffs_i = code == CV_BGR2YCrCb || code == CV_RGB2YCrCb ? 0 : yuv_i; - - _dst.create(sz, CV_MAKETYPE(depth, 3)); - dst = _dst.getMat(); - - if( depth == CV_8U ) - { -#ifdef HAVE_TEGRA_OPTIMIZATION - if((code == CV_RGB2YCrCb || code == CV_BGR2YCrCb) && tegra::cvtRGB2YCrCb(src, dst, bidx)) - break; -#endif - CvtColorLoop(src, dst, RGB2YCrCb_i(scn, bidx, coeffs_i)); - } - else if( depth == CV_16U ) - CvtColorLoop(src, dst, RGB2YCrCb_i(scn, bidx, coeffs_i)); - else - CvtColorLoop(src, dst, RGB2YCrCb_f(scn, bidx, coeffs_f)); - } - break; - - case CV_YCrCb2BGR: case CV_YCrCb2RGB: - case CV_YUV2BGR: case CV_YUV2RGB: - { - if( dcn <= 0 ) dcn = 3; - CV_Assert( scn == 3 && (dcn == 3 || dcn == 4) ); - bidx = code == CV_YCrCb2BGR || code == CV_YUV2BGR ? 0 : 2; - static const float yuv_f[] = { 2.032f, -0.395f, -0.581f, 1.140f }; - static const int yuv_i[] = { 33292, -6472, -9519, 18678 }; - const float* coeffs_f = code == CV_YCrCb2BGR || code == CV_YCrCb2RGB ? 0 : yuv_f; - const int* coeffs_i = code == CV_YCrCb2BGR || code == CV_YCrCb2RGB ? 0 : yuv_i; - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - if( depth == CV_8U ) - CvtColorLoop(src, dst, YCrCb2RGB_i(dcn, bidx, coeffs_i)); - else if( depth == CV_16U ) - CvtColorLoop(src, dst, YCrCb2RGB_i(dcn, bidx, coeffs_i)); - else - CvtColorLoop(src, dst, YCrCb2RGB_f(dcn, bidx, coeffs_f)); - } - break; - - case CV_BGR2XYZ: case CV_RGB2XYZ: - CV_Assert( scn == 3 || scn == 4 ); - bidx = code == CV_BGR2XYZ ? 0 : 2; - - _dst.create(sz, CV_MAKETYPE(depth, 3)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( code == CV_BGR2XYZ && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC3RTab[depth], ippiRGB2XYZTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_BGR2XYZ && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2XYZTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_RGB2XYZ && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiRGB2XYZTab[depth])) ) - return; - } - else if( code == CV_RGB2XYZ && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2XYZTab[depth], 0, 1, 2, depth)) ) - return; - } -#endif - - if( depth == CV_8U ) - CvtColorLoop(src, dst, RGB2XYZ_i(scn, bidx, 0)); - else if( depth == CV_16U ) - CvtColorLoop(src, dst, RGB2XYZ_i(scn, bidx, 0)); - else - CvtColorLoop(src, dst, RGB2XYZ_f(scn, bidx, 0)); - break; - - case CV_XYZ2BGR: case CV_XYZ2RGB: - if( dcn <= 0 ) dcn = 3; - CV_Assert( scn == 3 && (dcn == 3 || dcn == 4) ); - bidx = code == CV_XYZ2BGR ? 0 : 2; - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( code == CV_XYZ2BGR && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralReorderFunctor(ippiXYZ2RGBTab[depth], ippiSwapChannelsC3RTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_XYZ2BGR && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiXYZ2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 2, 1, 0, depth)) ) - return; - } - if( code == CV_XYZ2RGB && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiXYZ2RGBTab[depth])) ) - return; - } - else if( code == CV_XYZ2RGB && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiXYZ2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 0, 1, 2, depth)) ) - return; - } -#endif - - if( depth == CV_8U ) - CvtColorLoop(src, dst, XYZ2RGB_i(dcn, bidx, 0)); - else if( depth == CV_16U ) - CvtColorLoop(src, dst, XYZ2RGB_i(dcn, bidx, 0)); - else - CvtColorLoop(src, dst, XYZ2RGB_f(dcn, bidx, 0)); - break; - - case CV_BGR2HSV: case CV_RGB2HSV: case CV_BGR2HSV_FULL: case CV_RGB2HSV_FULL: - case CV_BGR2HLS: case CV_RGB2HLS: case CV_BGR2HLS_FULL: case CV_RGB2HLS_FULL: - { - CV_Assert( (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) ); - bidx = code == CV_BGR2HSV || code == CV_BGR2HLS || - code == CV_BGR2HSV_FULL || code == CV_BGR2HLS_FULL ? 0 : 2; - int hrange = depth == CV_32F ? 360 : code == CV_BGR2HSV || code == CV_RGB2HSV || - code == CV_BGR2HLS || code == CV_RGB2HLS ? 180 : 256; - - _dst.create(sz, CV_MAKETYPE(depth, 3)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( depth == CV_8U || depth == CV_16U ) - { - if( code == CV_BGR2HSV_FULL && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC3RTab[depth], ippiRGB2HSVTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_BGR2HSV_FULL && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2HSVTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_RGB2HSV_FULL && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiRGB2HSVTab[depth])) ) - return; - } - else if( code == CV_RGB2HSV_FULL && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2HSVTab[depth], 0, 1, 2, depth)) ) - return; - } - else if( code == CV_BGR2HLS_FULL && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC3RTab[depth], ippiRGB2HLSTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_BGR2HLS_FULL && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2HLSTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_RGB2HLS_FULL && scn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiRGB2HLSTab[depth])) ) - return; - } - else if( code == CV_RGB2HLS_FULL && scn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPReorderGeneralFunctor(ippiSwapChannelsC4C3RTab[depth], ippiRGB2HLSTab[depth], 0, 1, 2, depth)) ) - return; - } - } -#endif - - if( code == CV_BGR2HSV || code == CV_RGB2HSV || - code == CV_BGR2HSV_FULL || code == CV_RGB2HSV_FULL ) - { -#ifdef HAVE_TEGRA_OPTIMIZATION - if(tegra::cvtRGB2HSV(src, dst, bidx, hrange)) - break; -#endif - if( depth == CV_8U ) - CvtColorLoop(src, dst, RGB2HSV_b(scn, bidx, hrange)); - else - CvtColorLoop(src, dst, RGB2HSV_f(scn, bidx, (float)hrange)); - } - else - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, RGB2HLS_b(scn, bidx, hrange)); - else - CvtColorLoop(src, dst, RGB2HLS_f(scn, bidx, (float)hrange)); - } - } - break; - - case CV_HSV2BGR: case CV_HSV2RGB: case CV_HSV2BGR_FULL: case CV_HSV2RGB_FULL: - case CV_HLS2BGR: case CV_HLS2RGB: case CV_HLS2BGR_FULL: case CV_HLS2RGB_FULL: - { - if( dcn <= 0 ) dcn = 3; - CV_Assert( scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F) ); - bidx = code == CV_HSV2BGR || code == CV_HLS2BGR || - code == CV_HSV2BGR_FULL || code == CV_HLS2BGR_FULL ? 0 : 2; - int hrange = depth == CV_32F ? 360 : code == CV_HSV2BGR || code == CV_HSV2RGB || - code == CV_HLS2BGR || code == CV_HLS2RGB ? 180 : 255; - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( depth == CV_8U || depth == CV_16U ) - { - if( code == CV_HSV2BGR_FULL && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralReorderFunctor(ippiHSV2RGBTab[depth], ippiSwapChannelsC3RTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_HSV2BGR_FULL && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiHSV2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_HSV2RGB_FULL && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiHSV2RGBTab[depth])) ) - return; - } - else if( code == CV_HSV2RGB_FULL && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiHSV2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 0, 1, 2, depth)) ) - return; - } - else if( code == CV_HLS2BGR_FULL && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralReorderFunctor(ippiHLS2RGBTab[depth], ippiSwapChannelsC3RTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_HLS2BGR_FULL && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiHLS2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 2, 1, 0, depth)) ) - return; - } - else if( code == CV_HLS2RGB_FULL && dcn == 3 ) - { - if( CvtColorIPPLoopCopy(src, dst, IPPGeneralFunctor(ippiHLS2RGBTab[depth])) ) - return; - } - else if( code == CV_HLS2RGB_FULL && dcn == 4 ) - { - if( CvtColorIPPLoop(src, dst, IPPGeneralReorderFunctor(ippiHLS2RGBTab[depth], ippiSwapChannelsC3C4RTab[depth], 0, 1, 2, depth)) ) - return; - } - } -#endif - - if( code == CV_HSV2BGR || code == CV_HSV2RGB || - code == CV_HSV2BGR_FULL || code == CV_HSV2RGB_FULL ) - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, HSV2RGB_b(dcn, bidx, hrange)); - else - CvtColorLoop(src, dst, HSV2RGB_f(dcn, bidx, (float)hrange)); - } - else - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, HLS2RGB_b(dcn, bidx, hrange)); - else - CvtColorLoop(src, dst, HLS2RGB_f(dcn, bidx, (float)hrange)); - } - } - break; - - case CV_BGR2Lab: case CV_RGB2Lab: case CV_LBGR2Lab: case CV_LRGB2Lab: - case CV_BGR2Luv: case CV_RGB2Luv: case CV_LBGR2Luv: case CV_LRGB2Luv: - { - CV_Assert( (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) ); - bidx = code == CV_BGR2Lab || code == CV_BGR2Luv || - code == CV_LBGR2Lab || code == CV_LBGR2Luv ? 0 : 2; - bool srgb = code == CV_BGR2Lab || code == CV_RGB2Lab || - code == CV_BGR2Luv || code == CV_RGB2Luv; - - _dst.create(sz, CV_MAKETYPE(depth, 3)); - dst = _dst.getMat(); - - if( code == CV_BGR2Lab || code == CV_RGB2Lab || - code == CV_LBGR2Lab || code == CV_LRGB2Lab ) - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, RGB2Lab_b(scn, bidx, 0, 0, srgb)); - else - CvtColorLoop(src, dst, RGB2Lab_f(scn, bidx, 0, 0, srgb)); - } - else - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, RGB2Luv_b(scn, bidx, 0, 0, srgb)); - else - CvtColorLoop(src, dst, RGB2Luv_f(scn, bidx, 0, 0, srgb)); - } - } - break; - - case CV_Lab2BGR: case CV_Lab2RGB: case CV_Lab2LBGR: case CV_Lab2LRGB: - case CV_Luv2BGR: case CV_Luv2RGB: case CV_Luv2LBGR: case CV_Luv2LRGB: - { - if( dcn <= 0 ) dcn = 3; - CV_Assert( scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F) ); - bidx = code == CV_Lab2BGR || code == CV_Luv2BGR || - code == CV_Lab2LBGR || code == CV_Luv2LBGR ? 0 : 2; - bool srgb = code == CV_Lab2BGR || code == CV_Lab2RGB || - code == CV_Luv2BGR || code == CV_Luv2RGB; - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - if( code == CV_Lab2BGR || code == CV_Lab2RGB || - code == CV_Lab2LBGR || code == CV_Lab2LRGB ) - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, Lab2RGB_b(dcn, bidx, 0, 0, srgb)); - else - CvtColorLoop(src, dst, Lab2RGB_f(dcn, bidx, 0, 0, srgb)); - } - else - { - if( depth == CV_8U ) - CvtColorLoop(src, dst, Luv2RGB_b(dcn, bidx, 0, 0, srgb)); - else - CvtColorLoop(src, dst, Luv2RGB_f(dcn, bidx, 0, 0, srgb)); - } - } - break; - - case CV_BayerBG2GRAY: case CV_BayerGB2GRAY: case CV_BayerRG2GRAY: case CV_BayerGR2GRAY: - if(dcn <= 0) dcn = 1; - CV_Assert( scn == 1 && dcn == 1 ); - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - if( depth == CV_8U ) - Bayer2Gray_(src, dst, code); - else if( depth == CV_16U ) - Bayer2Gray_ >(src, dst, code); - else - CV_Error(CV_StsUnsupportedFormat, "Bayer->Gray demosaicing only supports 8u and 16u types"); - break; - - case CV_BayerBG2BGR: case CV_BayerGB2BGR: case CV_BayerRG2BGR: case CV_BayerGR2BGR: - case CV_BayerBG2BGR_VNG: case CV_BayerGB2BGR_VNG: case CV_BayerRG2BGR_VNG: case CV_BayerGR2BGR_VNG: - { - if (dcn <= 0) - dcn = 3; - CV_Assert( scn == 1 && dcn == 3 ); - - _dst.create(sz, CV_MAKE_TYPE(depth, dcn)); - Mat dst_ = _dst.getMat(); - - if( code == CV_BayerBG2BGR || code == CV_BayerGB2BGR || - code == CV_BayerRG2BGR || code == CV_BayerGR2BGR ) - { - if( depth == CV_8U ) - Bayer2RGB_(src, dst_, code); - else if( depth == CV_16U ) - Bayer2RGB_ >(src, dst_, code); - else - CV_Error(CV_StsUnsupportedFormat, "Bayer->RGB demosaicing only supports 8u and 16u types"); - } - else - { - CV_Assert( depth == CV_8U ); - Bayer2RGB_VNG_8u(src, dst_, code); - } - } - break; - case CV_YUV2BGR_NV21: case CV_YUV2RGB_NV21: case CV_YUV2BGR_NV12: case CV_YUV2RGB_NV12: - case CV_YUV2BGRA_NV21: case CV_YUV2RGBA_NV21: case CV_YUV2BGRA_NV12: case CV_YUV2RGBA_NV12: - { - // http://www.fourcc.org/yuv.php#NV21 == yuv420sp -> a plane of 8 bit Y samples followed by an interleaved V/U plane containing 8 bit 2x2 subsampled chroma samples - // http://www.fourcc.org/yuv.php#NV12 -> a plane of 8 bit Y samples followed by an interleaved U/V plane containing 8 bit 2x2 subsampled colour difference samples - - if (dcn <= 0) dcn = (code==CV_YUV420sp2BGRA || code==CV_YUV420sp2RGBA || code==CV_YUV2BGRA_NV12 || code==CV_YUV2RGBA_NV12) ? 4 : 3; - const int bIdx = (code==CV_YUV2BGR_NV21 || code==CV_YUV2BGRA_NV21 || code==CV_YUV2BGR_NV12 || code==CV_YUV2BGRA_NV12) ? 0 : 2; - const int uIdx = (code==CV_YUV2BGR_NV21 || code==CV_YUV2BGRA_NV21 || code==CV_YUV2RGB_NV21 || code==CV_YUV2RGBA_NV21) ? 1 : 0; - - CV_Assert( dcn == 3 || dcn == 4 ); - CV_Assert( sz.width % 2 == 0 && sz.height % 3 == 0 && depth == CV_8U ); - - Size dstSz(sz.width, sz.height * 2 / 3); - _dst.create(dstSz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - int srcstep = (int)src.step; - const uchar* y = src.ptr(); - const uchar* uv = y + srcstep * dstSz.height; - - switch(dcn*100 + bIdx * 10 + uIdx) - { - case 300: cvtYUV420sp2RGB<0, 0> (dst, srcstep, y, uv); break; - case 301: cvtYUV420sp2RGB<0, 1> (dst, srcstep, y, uv); break; - case 320: cvtYUV420sp2RGB<2, 0> (dst, srcstep, y, uv); break; - case 321: cvtYUV420sp2RGB<2, 1> (dst, srcstep, y, uv); break; - case 400: cvtYUV420sp2RGBA<0, 0>(dst, srcstep, y, uv); break; - case 401: cvtYUV420sp2RGBA<0, 1>(dst, srcstep, y, uv); break; - case 420: cvtYUV420sp2RGBA<2, 0>(dst, srcstep, y, uv); break; - case 421: cvtYUV420sp2RGBA<2, 1>(dst, srcstep, y, uv); break; - default: CV_Error( CV_StsBadFlag, "Unknown/unsupported color conversion code" ); break; - }; - } - break; - case CV_YUV2BGR_YV12: case CV_YUV2RGB_YV12: case CV_YUV2BGRA_YV12: case CV_YUV2RGBA_YV12: - case CV_YUV2BGR_IYUV: case CV_YUV2RGB_IYUV: case CV_YUV2BGRA_IYUV: case CV_YUV2RGBA_IYUV: - { - //http://www.fourcc.org/yuv.php#YV12 == yuv420p -> It comprises an NxM Y plane followed by (N/2)x(M/2) V and U planes. - //http://www.fourcc.org/yuv.php#IYUV == I420 -> It comprises an NxN Y plane followed by (N/2)x(N/2) U and V planes - - if (dcn <= 0) dcn = (code==CV_YUV2BGRA_YV12 || code==CV_YUV2RGBA_YV12 || code==CV_YUV2RGBA_IYUV || code==CV_YUV2BGRA_IYUV) ? 4 : 3; - const int bIdx = (code==CV_YUV2BGR_YV12 || code==CV_YUV2BGRA_YV12 || code==CV_YUV2BGR_IYUV || code==CV_YUV2BGRA_IYUV) ? 0 : 2; - const int uIdx = (code==CV_YUV2BGR_YV12 || code==CV_YUV2RGB_YV12 || code==CV_YUV2BGRA_YV12 || code==CV_YUV2RGBA_YV12) ? 1 : 0; - - CV_Assert( dcn == 3 || dcn == 4 ); - CV_Assert( sz.width % 2 == 0 && sz.height % 3 == 0 && depth == CV_8U ); - - Size dstSz(sz.width, sz.height * 2 / 3); - _dst.create(dstSz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - int srcstep = (int)src.step; - const uchar* y = src.ptr(); - const uchar* u = y + srcstep * dstSz.height; - const uchar* v = y + srcstep * (dstSz.height + dstSz.height/4) + (dstSz.width/2) * ((dstSz.height % 4)/2); - - int ustepIdx = 0; - int vstepIdx = dstSz.height % 4 == 2 ? 1 : 0; - - if(uIdx == 1) { std::swap(u ,v), std::swap(ustepIdx, vstepIdx); }; - - switch(dcn*10 + bIdx) - { - case 30: cvtYUV420p2RGB<0>(dst, srcstep, y, u, v, ustepIdx, vstepIdx); break; - case 32: cvtYUV420p2RGB<2>(dst, srcstep, y, u, v, ustepIdx, vstepIdx); break; - case 40: cvtYUV420p2RGBA<0>(dst, srcstep, y, u, v, ustepIdx, vstepIdx); break; - case 42: cvtYUV420p2RGBA<2>(dst, srcstep, y, u, v, ustepIdx, vstepIdx); break; - default: CV_Error( CV_StsBadFlag, "Unknown/unsupported color conversion code" ); break; - }; - } - break; - case CV_YUV2GRAY_420: - { - if (dcn <= 0) dcn = 1; - - CV_Assert( dcn == 1 ); - CV_Assert( sz.width % 2 == 0 && sz.height % 3 == 0 && depth == CV_8U ); - - Size dstSz(sz.width, sz.height * 2 / 3); - _dst.create(dstSz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - src(Range(0, dstSz.height), Range::all()).copyTo(dst); - } - break; - case CV_RGB2YUV_YV12: case CV_BGR2YUV_YV12: case CV_RGBA2YUV_YV12: case CV_BGRA2YUV_YV12: - case CV_RGB2YUV_IYUV: case CV_BGR2YUV_IYUV: case CV_RGBA2YUV_IYUV: case CV_BGRA2YUV_IYUV: - { - if (dcn <= 0) dcn = 1; - const int bIdx = (code == CV_BGR2YUV_IYUV || code == CV_BGRA2YUV_IYUV || code == CV_BGR2YUV_YV12 || code == CV_BGRA2YUV_YV12) ? 0 : 2; - const int uIdx = (code == CV_BGR2YUV_IYUV || code == CV_BGRA2YUV_IYUV || code == CV_RGB2YUV_IYUV || code == CV_RGBA2YUV_IYUV) ? 1 : 2; - - CV_Assert( (scn == 3 || scn == 4) && depth == CV_8U ); - CV_Assert( dcn == 1 ); - CV_Assert( sz.width % 2 == 0 && sz.height % 2 == 0 ); - - Size dstSz(sz.width, sz.height / 2 * 3); - _dst.create(dstSz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - switch(bIdx + uIdx*10) - { - case 10: cvtRGBtoYUV420p<0, 1>(src, dst); break; - case 12: cvtRGBtoYUV420p<2, 1>(src, dst); break; - case 20: cvtRGBtoYUV420p<0, 2>(src, dst); break; - case 22: cvtRGBtoYUV420p<2, 2>(src, dst); break; - default: CV_Error( CV_StsBadFlag, "Unknown/unsupported color conversion code" ); break; - }; - } - break; - case CV_YUV2RGB_UYVY: case CV_YUV2BGR_UYVY: case CV_YUV2RGBA_UYVY: case CV_YUV2BGRA_UYVY: - case CV_YUV2RGB_YUY2: case CV_YUV2BGR_YUY2: case CV_YUV2RGB_YVYU: case CV_YUV2BGR_YVYU: - case CV_YUV2RGBA_YUY2: case CV_YUV2BGRA_YUY2: case CV_YUV2RGBA_YVYU: case CV_YUV2BGRA_YVYU: - { - //http://www.fourcc.org/yuv.php#UYVY - //http://www.fourcc.org/yuv.php#YUY2 - //http://www.fourcc.org/yuv.php#YVYU - - if (dcn <= 0) dcn = (code==CV_YUV2RGBA_UYVY || code==CV_YUV2BGRA_UYVY || code==CV_YUV2RGBA_YUY2 || code==CV_YUV2BGRA_YUY2 || code==CV_YUV2RGBA_YVYU || code==CV_YUV2BGRA_YVYU) ? 4 : 3; - const int bIdx = (code==CV_YUV2BGR_UYVY || code==CV_YUV2BGRA_UYVY || code==CV_YUV2BGR_YUY2 || code==CV_YUV2BGRA_YUY2 || code==CV_YUV2BGR_YVYU || code==CV_YUV2BGRA_YVYU) ? 0 : 2; - const int ycn = (code==CV_YUV2RGB_UYVY || code==CV_YUV2BGR_UYVY || code==CV_YUV2RGBA_UYVY || code==CV_YUV2BGRA_UYVY) ? 1 : 0; - const int uIdx = (code==CV_YUV2RGB_YVYU || code==CV_YUV2BGR_YVYU || code==CV_YUV2RGBA_YVYU || code==CV_YUV2BGRA_YVYU) ? 1 : 0; - - CV_Assert( dcn == 3 || dcn == 4 ); - CV_Assert( scn == 2 && depth == CV_8U ); - - _dst.create(sz, CV_8UC(dcn)); - dst = _dst.getMat(); - - switch(dcn*1000 + bIdx*100 + uIdx*10 + ycn) - { - case 3000: cvtYUV422toRGB<0,0,0>(dst, (int)src.step, src.ptr()); break; - case 3001: cvtYUV422toRGB<0,0,1>(dst, (int)src.step, src.ptr()); break; - case 3010: cvtYUV422toRGB<0,1,0>(dst, (int)src.step, src.ptr()); break; - case 3011: cvtYUV422toRGB<0,1,1>(dst, (int)src.step, src.ptr()); break; - case 3200: cvtYUV422toRGB<2,0,0>(dst, (int)src.step, src.ptr()); break; - case 3201: cvtYUV422toRGB<2,0,1>(dst, (int)src.step, src.ptr()); break; - case 3210: cvtYUV422toRGB<2,1,0>(dst, (int)src.step, src.ptr()); break; - case 3211: cvtYUV422toRGB<2,1,1>(dst, (int)src.step, src.ptr()); break; - case 4000: cvtYUV422toRGBA<0,0,0>(dst, (int)src.step, src.ptr()); break; - case 4001: cvtYUV422toRGBA<0,0,1>(dst, (int)src.step, src.ptr()); break; - case 4010: cvtYUV422toRGBA<0,1,0>(dst, (int)src.step, src.ptr()); break; - case 4011: cvtYUV422toRGBA<0,1,1>(dst, (int)src.step, src.ptr()); break; - case 4200: cvtYUV422toRGBA<2,0,0>(dst, (int)src.step, src.ptr()); break; - case 4201: cvtYUV422toRGBA<2,0,1>(dst, (int)src.step, src.ptr()); break; - case 4210: cvtYUV422toRGBA<2,1,0>(dst, (int)src.step, src.ptr()); break; - case 4211: cvtYUV422toRGBA<2,1,1>(dst, (int)src.step, src.ptr()); break; - default: CV_Error( CV_StsBadFlag, "Unknown/unsupported color conversion code" ); break; - }; - } - break; - case CV_YUV2GRAY_UYVY: case CV_YUV2GRAY_YUY2: - { - if (dcn <= 0) dcn = 1; - - CV_Assert( dcn == 1 ); - CV_Assert( scn == 2 && depth == CV_8U ); - - extractChannel(_src, _dst, code == CV_YUV2GRAY_UYVY ? 1 : 0); - } - break; - case CV_RGBA2mRGBA: - { - if (dcn <= 0) dcn = 4; - CV_Assert( scn == 4 && dcn == 4 ); - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - if( depth == CV_8U ) - { - CvtColorLoop(src, dst, RGBA2mRGBA()); - } else { - CV_Error( CV_StsBadArg, "Unsupported image depth" ); - } - } - break; - case CV_mRGBA2RGBA: - { - if (dcn <= 0) dcn = 4; - CV_Assert( scn == 4 && dcn == 4 ); - - _dst.create(sz, CV_MAKETYPE(depth, dcn)); - dst = _dst.getMat(); - - if( depth == CV_8U ) - { - CvtColorLoop(src, dst, mRGBA2RGBA()); - } else { - CV_Error( CV_StsBadArg, "Unsupported image depth" ); - } - } - break; - default: - CV_Error( CV_StsBadFlag, "Unknown/unsupported color conversion code" ); - } -} - -CV_IMPL void -cvCvtColor( const CvArr* srcarr, CvArr* dstarr, int code ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0; - CV_Assert( src.depth() == dst.depth() ); - - cv::cvtColor(src, dst, code, dst.channels()); - CV_Assert( dst.data == dst0.data ); -} - - -/* End of file. */ diff --git a/modules/imgproc/src/contours.cpp b/modules/imgproc/src/contours.cpp deleted file mode 100644 index dc90860..0000000 --- a/modules/imgproc/src/contours.cpp +++ /dev/null @@ -1,2057 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */ -#define CV_INIT_3X3_DELTAS( deltas, step, nch ) \ - ((deltas)[0] = (nch), (deltas)[1] = -(step) + (nch), \ - (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch), \ - (deltas)[4] = -(nch), (deltas)[5] = (step) - (nch), \ - (deltas)[6] = (step), (deltas)[7] = (step) + (nch)) - -static const CvPoint icvCodeDeltas[8] = - { {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1} }; - -CV_IMPL void -cvStartReadChainPoints( CvChain * chain, CvChainPtReader * reader ) -{ - int i; - - if( !chain || !reader ) - CV_Error( CV_StsNullPtr, "" ); - - if( chain->elem_size != 1 || chain->header_size < (int)sizeof(CvChain)) - CV_Error( CV_StsBadSize, "" ); - - cvStartReadSeq( (CvSeq *) chain, (CvSeqReader *) reader, 0 ); - - reader->pt = chain->origin; - for( i = 0; i < 8; i++ ) - { - reader->deltas[i][0] = (schar) icvCodeDeltas[i].x; - reader->deltas[i][1] = (schar) icvCodeDeltas[i].y; - } -} - - -/* retrieves next point of the chain curve and updates reader */ -CV_IMPL CvPoint -cvReadChainPoint( CvChainPtReader * reader ) -{ - schar *ptr; - int code; - CvPoint pt = { 0, 0 }; - - if( !reader ) - CV_Error( CV_StsNullPtr, "" ); - - pt = reader->pt; - - ptr = reader->ptr; - if( ptr ) - { - code = *ptr++; - - if( ptr >= reader->block_max ) - { - cvChangeSeqBlock( (CvSeqReader *) reader, 1 ); - ptr = reader->ptr; - } - - reader->ptr = ptr; - reader->code = (schar)code; - assert( (code & ~7) == 0 ); - reader->pt.x = pt.x + icvCodeDeltas[code].x; - reader->pt.y = pt.y + icvCodeDeltas[code].y; - } - - return pt; -} - - -/****************************************************************************************\ -* Raster->Chain Tree (Suzuki algorithms) * -\****************************************************************************************/ - -typedef struct _CvContourInfo -{ - int flags; - struct _CvContourInfo *next; /* next contour with the same mark value */ - struct _CvContourInfo *parent; /* information about parent contour */ - CvSeq *contour; /* corresponding contour (may be 0, if rejected) */ - CvRect rect; /* bounding rectangle */ - CvPoint origin; /* origin point (where the contour was traced from) */ - int is_hole; /* hole flag */ -} -_CvContourInfo; - - -/* - Structure that is used for sequental retrieving contours from the image. - It supports both hierarchical and plane variants of Suzuki algorithm. -*/ -typedef struct _CvContourScanner -{ - CvMemStorage *storage1; /* contains fetched contours */ - CvMemStorage *storage2; /* contains approximated contours - (!=storage1 if approx_method2 != approx_method1) */ - CvMemStorage *cinfo_storage; /* contains _CvContourInfo nodes */ - CvSet *cinfo_set; /* set of _CvContourInfo nodes */ - CvMemStoragePos initial_pos; /* starting storage pos */ - CvMemStoragePos backup_pos; /* beginning of the latest approx. contour */ - CvMemStoragePos backup_pos2; /* ending of the latest approx. contour */ - schar *img0; /* image origin */ - schar *img; /* current image row */ - int img_step; /* image step */ - CvSize img_size; /* ROI size */ - CvPoint offset; /* ROI offset: coordinates, added to each contour point */ - CvPoint pt; /* current scanner position */ - CvPoint lnbd; /* position of the last met contour */ - int nbd; /* current mark val */ - _CvContourInfo *l_cinfo; /* information about latest approx. contour */ - _CvContourInfo cinfo_temp; /* temporary var which is used in simple modes */ - _CvContourInfo frame_info; /* information about frame */ - CvSeq frame; /* frame itself */ - int approx_method1; /* approx method when tracing */ - int approx_method2; /* final approx method */ - int mode; /* contour scanning mode: - 0 - external only - 1 - all the contours w/o any hierarchy - 2 - connected components (i.e. two-level structure - - external contours and holes), - 3 - full hierarchy; - 4 - connected components of a multi-level image - */ - int subst_flag; - int seq_type1; /* type of fetched contours */ - int header_size1; /* hdr size of fetched contours */ - int elem_size1; /* elem size of fetched contours */ - int seq_type2; /* */ - int header_size2; /* the same for approx. contours */ - int elem_size2; /* */ - _CvContourInfo *cinfo_table[128]; -} -_CvContourScanner; - -#define _CV_FIND_CONTOURS_FLAGS_EXTERNAL_ONLY 1 -#define _CV_FIND_CONTOURS_FLAGS_HIERARCHIC 2 - -/* - Initializes scanner structure. - Prepare image for scanning ( clear borders and convert all pixels to 0-1. -*/ -CV_IMPL CvContourScanner -cvStartFindContours( void* _img, CvMemStorage* storage, - int header_size, int mode, - int method, CvPoint offset ) -{ - if( !storage ) - CV_Error( CV_StsNullPtr, "" ); - - CvMat stub, *mat = cvGetMat( _img, &stub ); - - if( CV_MAT_TYPE(mat->type) == CV_32SC1 && mode == CV_RETR_CCOMP ) - mode = CV_RETR_FLOODFILL; - - if( !((CV_IS_MASK_ARR( mat ) && mode < CV_RETR_FLOODFILL) || - (CV_MAT_TYPE(mat->type) == CV_32SC1 && mode == CV_RETR_FLOODFILL)) ) - CV_Error( CV_StsUnsupportedFormat, "[Start]FindContours support only 8uC1 and 32sC1 images" ); - - CvSize size = cvSize( mat->width, mat->height ); - int step = mat->step; - uchar* img = (uchar*)(mat->data.ptr); - - if( method < 0 || method > CV_CHAIN_APPROX_TC89_KCOS ) - CV_Error( CV_StsOutOfRange, "" ); - - if( header_size < (int) (method == CV_CHAIN_CODE ? sizeof( CvChain ) : sizeof( CvContour ))) - CV_Error( CV_StsBadSize, "" ); - - CvContourScanner scanner = (CvContourScanner)cvAlloc( sizeof( *scanner )); - memset( scanner, 0, sizeof(*scanner) ); - - scanner->storage1 = scanner->storage2 = storage; - scanner->img0 = (schar *) img; - scanner->img = (schar *) (img + step); - scanner->img_step = step; - scanner->img_size.width = size.width - 1; /* exclude rightest column */ - scanner->img_size.height = size.height - 1; /* exclude bottomost row */ - scanner->mode = mode; - scanner->offset = offset; - scanner->pt.x = scanner->pt.y = 1; - scanner->lnbd.x = 0; - scanner->lnbd.y = 1; - scanner->nbd = 2; - scanner->mode = (int) mode; - scanner->frame_info.contour = &(scanner->frame); - scanner->frame_info.is_hole = 1; - scanner->frame_info.next = 0; - scanner->frame_info.parent = 0; - scanner->frame_info.rect = cvRect( 0, 0, size.width, size.height ); - scanner->l_cinfo = 0; - scanner->subst_flag = 0; - - scanner->frame.flags = CV_SEQ_FLAG_HOLE; - - scanner->approx_method2 = scanner->approx_method1 = method; - - if( method == CV_CHAIN_APPROX_TC89_L1 || method == CV_CHAIN_APPROX_TC89_KCOS ) - scanner->approx_method1 = CV_CHAIN_CODE; - - if( scanner->approx_method1 == CV_CHAIN_CODE ) - { - scanner->seq_type1 = CV_SEQ_CHAIN_CONTOUR; - scanner->header_size1 = scanner->approx_method1 == scanner->approx_method2 ? - header_size : sizeof( CvChain ); - scanner->elem_size1 = sizeof( char ); - } - else - { - scanner->seq_type1 = CV_SEQ_POLYGON; - scanner->header_size1 = scanner->approx_method1 == scanner->approx_method2 ? - header_size : sizeof( CvContour ); - scanner->elem_size1 = sizeof( CvPoint ); - } - - scanner->header_size2 = header_size; - - if( scanner->approx_method2 == CV_CHAIN_CODE ) - { - scanner->seq_type2 = scanner->seq_type1; - scanner->elem_size2 = scanner->elem_size1; - } - else - { - scanner->seq_type2 = CV_SEQ_POLYGON; - scanner->elem_size2 = sizeof( CvPoint ); - } - - scanner->seq_type1 = scanner->approx_method1 == CV_CHAIN_CODE ? - CV_SEQ_CHAIN_CONTOUR : CV_SEQ_POLYGON; - - scanner->seq_type2 = scanner->approx_method2 == CV_CHAIN_CODE ? - CV_SEQ_CHAIN_CONTOUR : CV_SEQ_POLYGON; - - cvSaveMemStoragePos( storage, &(scanner->initial_pos) ); - - if( method > CV_CHAIN_APPROX_SIMPLE ) - { - scanner->storage1 = cvCreateChildMemStorage( scanner->storage2 ); - } - - if( mode > CV_RETR_LIST ) - { - scanner->cinfo_storage = cvCreateChildMemStorage( scanner->storage2 ); - scanner->cinfo_set = cvCreateSet( 0, sizeof( CvSet ), sizeof( _CvContourInfo ), - scanner->cinfo_storage ); - } - - /* make zero borders */ - int esz = CV_ELEM_SIZE(mat->type); - memset( img, 0, size.width*esz ); - memset( img + step * (size.height - 1), 0, size.width*esz ); - - img += step; - for( int y = 1; y < size.height - 1; y++, img += step ) - { - for( int k = 0; k < esz; k++ ) - img[k] = img[(size.width - 1)*esz + k] = (schar)0; - } - - /* converts all pixels to 0 or 1 */ - if( CV_MAT_TYPE(mat->type) != CV_32S ) - cvThreshold( mat, mat, 0, 1, CV_THRESH_BINARY ); - - return scanner; -} - -/* - Final stage of contour processing. - Three variants possible: - 1. Contour, which was retrieved using border following, is added to - the contour tree. It is the case when the icvSubstituteContour function - was not called after retrieving the contour. - - 2. New contour, assigned by icvSubstituteContour function, is added to the - tree. The retrieved contour itself is removed from the storage. - Here two cases are possible: - 2a. If one deals with plane variant of algorithm - (hierarchical strucutre is not reconstructed), - the contour is removed completely. - 2b. In hierarchical case, the header of the contour is not removed. - It's marked as "link to contour" and h_next pointer of it is set to - new, substituting contour. - - 3. The similar to 2, but when NULL pointer was assigned by - icvSubstituteContour function. In this case, the function removes - retrieved contour completely if plane case and - leaves header if hierarchical (but doesn't mark header as "link"). - ------------------------------------------------------------------------ - The 1st variant can be used to retrieve and store all the contours from the image - (with optional convertion from chains to contours using some approximation from - restriced set of methods). Some characteristics of contour can be computed in the - same pass. - - The usage scheme can look like: - - icvContourScanner scanner; - CvMemStorage* contour_storage; - CvSeq* first_contour; - CvStatus result; - - ... - - icvCreateMemStorage( &contour_storage, block_size/0 ); - - ... - - cvStartFindContours - ( img, contour_storage, - header_size, approx_method, - [external_only,] - &scanner ); - - for(;;) - { - [CvSeq* contour;] - result = icvFindNextContour( &scanner, &contour/0 ); - - if( result != CV_OK ) break; - - // calculate some characteristics - ... - } - - if( result < 0 ) goto error_processing; - - cvEndFindContours( &scanner, &first_contour ); - ... - - ----------------------------------------------------------------- - - Second variant is more complex and can be used when someone wants store not - the retrieved contours but transformed ones. (e.g. approximated with some - non-default algorithm ). - - The scheme can be the as following: - - icvContourScanner scanner; - CvMemStorage* contour_storage; - CvMemStorage* temp_storage; - CvSeq* first_contour; - CvStatus result; - - ... - - icvCreateMemStorage( &contour_storage, block_size/0 ); - icvCreateMemStorage( &temp_storage, block_size/0 ); - - ... - - icvStartFindContours8uC1R - ( , temp_storage, - header_size, approx_method, - [retrival_mode], - &scanner ); - - for(;;) - { - CvSeq* temp_contour; - CvSeq* new_contour; - result = icvFindNextContour( scanner, &temp_contour ); - - if( result != CV_OK ) break; - - ( temp_contour, contour_storage, - &new_contour, ); - - icvSubstituteContour( scanner, new_contour ); - ... - } - - if( result < 0 ) goto error_processing; - - cvEndFindContours( &scanner, &first_contour ); - ... - - ---------------------------------------------------------------------------- - Third method to retrieve contours may be applied if contours are irrelevant - themselves but some characteristics of them are used only. - The usage is similar to second except slightly different internal loop - - for(;;) - { - CvSeq* temp_contour; - result = icvFindNextContour( &scanner, &temp_contour ); - - if( result != CV_OK ) break; - - // calculate some characteristics of temp_contour - - icvSubstituteContour( scanner, 0 ); - ... - } - - new_storage variable is not needed here. - - Note, that the second and the third methods can interleave. I.e. it is possible to - retain contours that satisfy with some criteria and reject others. - In hierarchic case the resulting tree is the part of original tree with - some nodes absent. But in the resulting tree the contour1 is a child - (may be indirect) of contour2 iff in the original tree the contour1 - is a child (may be indirect) of contour2. -*/ -static void -icvEndProcessContour( CvContourScanner scanner ) -{ - _CvContourInfo *l_cinfo = scanner->l_cinfo; - - if( l_cinfo ) - { - if( scanner->subst_flag ) - { - CvMemStoragePos temp; - - cvSaveMemStoragePos( scanner->storage2, &temp ); - - if( temp.top == scanner->backup_pos2.top && - temp.free_space == scanner->backup_pos2.free_space ) - { - cvRestoreMemStoragePos( scanner->storage2, &scanner->backup_pos ); - } - scanner->subst_flag = 0; - } - - if( l_cinfo->contour ) - { - cvInsertNodeIntoTree( l_cinfo->contour, l_cinfo->parent->contour, - &(scanner->frame) ); - } - scanner->l_cinfo = 0; - } -} - -/* replaces one contour with another */ -CV_IMPL void -cvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour ) -{ - _CvContourInfo *l_cinfo; - - if( !scanner ) - CV_Error( CV_StsNullPtr, "" ); - - l_cinfo = scanner->l_cinfo; - if( l_cinfo && l_cinfo->contour && l_cinfo->contour != new_contour ) - { - l_cinfo->contour = new_contour; - scanner->subst_flag = 1; - } -} - - -/* - marks domain border with +/- and stores the contour into CvSeq. - method: - <0 - chain - ==0 - direct - >0 - simple approximation -*/ -static void -icvFetchContour( schar *ptr, - int step, - CvPoint pt, - CvSeq* contour, - int _method ) -{ - const schar nbd = 2; - int deltas[16]; - CvSeqWriter writer; - schar *i0 = ptr, *i1, *i3, *i4 = 0; - int prev_s = -1, s, s_end; - int method = _method - 1; - - assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); - - /* initialize local state */ - CV_INIT_3X3_DELTAS( deltas, step, 1 ); - memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); - - /* initialize writer */ - cvStartAppendToSeq( contour, &writer ); - - if( method < 0 ) - ((CvChain *) contour)->origin = pt; - - s_end = s = CV_IS_SEQ_HOLE( contour ) ? 0 : 4; - - do - { - s = (s - 1) & 7; - i1 = i0 + deltas[s]; - if( *i1 != 0 ) - break; - } - while( s != s_end ); - - if( s == s_end ) /* single pixel domain */ - { - *i0 = (schar) (nbd | -128); - if( method >= 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - } - else - { - i3 = i0; - prev_s = s ^ 4; - - /* follow border */ - for( ;; ) - { - s_end = s; - - for( ;; ) - { - i4 = i3 + deltas[++s]; - if( *i4 != 0 ) - break; - } - s &= 7; - - /* check "right" bound */ - if( (unsigned) (s - 1) < (unsigned) s_end ) - { - *i3 = (schar) (nbd | -128); - } - else if( *i3 == 1 ) - { - *i3 = nbd; - } - - if( method < 0 ) - { - schar _s = (schar) s; - - CV_WRITE_SEQ_ELEM( _s, writer ); - } - else - { - if( s != prev_s || method == 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - prev_s = s; - } - - pt.x += icvCodeDeltas[s].x; - pt.y += icvCodeDeltas[s].y; - - } - - if( i4 == i0 && i3 == i1 ) - break; - - i3 = i4; - s = (s + 4) & 7; - } /* end of border following loop */ - } - - cvEndWriteSeq( &writer ); - - if( _method != CV_CHAIN_CODE ) - cvBoundingRect( contour, 1 ); - - assert( (writer.seq->total == 0 && writer.seq->first == 0) || - writer.seq->total > writer.seq->first->count || - (writer.seq->first->prev == writer.seq->first && - writer.seq->first->next == writer.seq->first) ); -} - - - -/* - trace contour until certain point is met. - returns 1 if met, 0 else. -*/ -static int -icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) -{ - int deltas[16]; - schar *i0 = ptr, *i1, *i3, *i4; - int s, s_end; - - /* initialize local state */ - CV_INIT_3X3_DELTAS( deltas, step, 1 ); - memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); - - assert( (*i0 & -2) != 0 ); - - s_end = s = is_hole ? 0 : 4; - - do - { - s = (s - 1) & 7; - i1 = i0 + deltas[s]; - if( *i1 != 0 ) - break; - } - while( s != s_end ); - - i3 = i0; - - /* check single pixel domain */ - if( s != s_end ) - { - /* follow border */ - for( ;; ) - { - s_end = s; - - for( ;; ) - { - i4 = i3 + deltas[++s]; - if( *i4 != 0 ) - break; - } - - if( i3 == stop_ptr || (i4 == i0 && i3 == i1) ) - break; - - i3 = i4; - s = (s + 4) & 7; - } /* end of border following loop */ - } - return i3 == stop_ptr; -} - - -static void -icvFetchContourEx( schar* ptr, - int step, - CvPoint pt, - CvSeq* contour, - int _method, - int nbd, - CvRect* _rect ) -{ - int deltas[16]; - CvSeqWriter writer; - schar *i0 = ptr, *i1, *i3, *i4; - CvRect rect; - int prev_s = -1, s, s_end; - int method = _method - 1; - - assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); - assert( 1 < nbd && nbd < 128 ); - - /* initialize local state */ - CV_INIT_3X3_DELTAS( deltas, step, 1 ); - memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); - - /* initialize writer */ - cvStartAppendToSeq( contour, &writer ); - - if( method < 0 ) - ((CvChain *)contour)->origin = pt; - - rect.x = rect.width = pt.x; - rect.y = rect.height = pt.y; - - s_end = s = CV_IS_SEQ_HOLE( contour ) ? 0 : 4; - - do - { - s = (s - 1) & 7; - i1 = i0 + deltas[s]; - if( *i1 != 0 ) - break; - } - while( s != s_end ); - - if( s == s_end ) /* single pixel domain */ - { - *i0 = (schar) (nbd | 0x80); - if( method >= 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - } - else - { - i3 = i0; - - prev_s = s ^ 4; - - /* follow border */ - for( ;; ) - { - s_end = s; - - for( ;; ) - { - i4 = i3 + deltas[++s]; - if( *i4 != 0 ) - break; - } - s &= 7; - - /* check "right" bound */ - if( (unsigned) (s - 1) < (unsigned) s_end ) - { - *i3 = (schar) (nbd | 0x80); - } - else if( *i3 == 1 ) - { - *i3 = (schar) nbd; - } - - if( method < 0 ) - { - schar _s = (schar) s; - CV_WRITE_SEQ_ELEM( _s, writer ); - } - else if( s != prev_s || method == 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - - if( s != prev_s ) - { - /* update bounds */ - if( pt.x < rect.x ) - rect.x = pt.x; - else if( pt.x > rect.width ) - rect.width = pt.x; - - if( pt.y < rect.y ) - rect.y = pt.y; - else if( pt.y > rect.height ) - rect.height = pt.y; - } - - prev_s = s; - pt.x += icvCodeDeltas[s].x; - pt.y += icvCodeDeltas[s].y; - - if( i4 == i0 && i3 == i1 ) break; - - i3 = i4; - s = (s + 4) & 7; - } /* end of border following loop */ - } - - rect.width -= rect.x - 1; - rect.height -= rect.y - 1; - - cvEndWriteSeq( &writer ); - - if( _method != CV_CHAIN_CODE ) - ((CvContour*)contour)->rect = rect; - - assert( (writer.seq->total == 0 && writer.seq->first == 0) || - writer.seq->total > writer.seq->first->count || - (writer.seq->first->prev == writer.seq->first && - writer.seq->first->next == writer.seq->first) ); - - if( _rect ) *_rect = rect; -} - - -static int -icvTraceContour_32s( int *ptr, int step, int *stop_ptr, int is_hole ) -{ - int deltas[16]; - int *i0 = ptr, *i1, *i3, *i4; - int s, s_end; - const int right_flag = INT_MIN; - const int new_flag = (int)((unsigned)INT_MIN >> 1); - const int value_mask = ~(right_flag | new_flag); - const int ccomp_val = *i0 & value_mask; - - /* initialize local state */ - CV_INIT_3X3_DELTAS( deltas, step, 1 ); - memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); - - s_end = s = is_hole ? 0 : 4; - - do - { - s = (s - 1) & 7; - i1 = i0 + deltas[s]; - if( (*i1 & value_mask) == ccomp_val ) - break; - } - while( s != s_end ); - - i3 = i0; - - /* check single pixel domain */ - if( s != s_end ) - { - /* follow border */ - for( ;; ) - { - s_end = s; - - for( ;; ) - { - i4 = i3 + deltas[++s]; - if( (*i4 & value_mask) == ccomp_val ) - break; - } - - if( i3 == stop_ptr || (i4 == i0 && i3 == i1) ) - break; - - i3 = i4; - s = (s + 4) & 7; - } /* end of border following loop */ - } - return i3 == stop_ptr; -} - - -static void -icvFetchContourEx_32s( int* ptr, - int step, - CvPoint pt, - CvSeq* contour, - int _method, - CvRect* _rect ) -{ - int deltas[16]; - CvSeqWriter writer; - int *i0 = ptr, *i1, *i3, *i4; - CvRect rect; - int prev_s = -1, s, s_end; - int method = _method - 1; - const int right_flag = INT_MIN; - const int new_flag = (int)((unsigned)INT_MIN >> 1); - const int value_mask = ~(right_flag | new_flag); - const int ccomp_val = *i0 & value_mask; - const int nbd0 = ccomp_val | new_flag; - const int nbd1 = nbd0 | right_flag; - - assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); - - /* initialize local state */ - CV_INIT_3X3_DELTAS( deltas, step, 1 ); - memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); - - /* initialize writer */ - cvStartAppendToSeq( contour, &writer ); - - if( method < 0 ) - ((CvChain *)contour)->origin = pt; - - rect.x = rect.width = pt.x; - rect.y = rect.height = pt.y; - - s_end = s = CV_IS_SEQ_HOLE( contour ) ? 0 : 4; - - do - { - s = (s - 1) & 7; - i1 = i0 + deltas[s]; - if( (*i1 & value_mask) == ccomp_val ) - break; - } - while( s != s_end ); - - if( s == s_end ) /* single pixel domain */ - { - *i0 = nbd1; - if( method >= 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - } - else - { - i3 = i0; - prev_s = s ^ 4; - - /* follow border */ - for( ;; ) - { - s_end = s; - - for( ;; ) - { - i4 = i3 + deltas[++s]; - if( (*i4 & value_mask) == ccomp_val ) - break; - } - s &= 7; - - /* check "right" bound */ - if( (unsigned) (s - 1) < (unsigned) s_end ) - { - *i3 = nbd1; - } - else if( *i3 == ccomp_val ) - { - *i3 = nbd0; - } - - if( method < 0 ) - { - schar _s = (schar) s; - CV_WRITE_SEQ_ELEM( _s, writer ); - } - else if( s != prev_s || method == 0 ) - { - CV_WRITE_SEQ_ELEM( pt, writer ); - } - - if( s != prev_s ) - { - /* update bounds */ - if( pt.x < rect.x ) - rect.x = pt.x; - else if( pt.x > rect.width ) - rect.width = pt.x; - - if( pt.y < rect.y ) - rect.y = pt.y; - else if( pt.y > rect.height ) - rect.height = pt.y; - } - - prev_s = s; - pt.x += icvCodeDeltas[s].x; - pt.y += icvCodeDeltas[s].y; - - if( i4 == i0 && i3 == i1 ) break; - - i3 = i4; - s = (s + 4) & 7; - } /* end of border following loop */ - } - - rect.width -= rect.x - 1; - rect.height -= rect.y - 1; - - cvEndWriteSeq( &writer ); - - if( _method != CV_CHAIN_CODE ) - ((CvContour*)contour)->rect = rect; - - assert( (writer.seq->total == 0 && writer.seq->first == 0) || - writer.seq->total > writer.seq->first->count || - (writer.seq->first->prev == writer.seq->first && - writer.seq->first->next == writer.seq->first) ); - - if( _rect ) *_rect = rect; -} - - -CvSeq * -cvFindNextContour( CvContourScanner scanner ) -{ - if( !scanner ) - CV_Error( CV_StsNullPtr, "" ); - icvEndProcessContour( scanner ); - - /* initialize local state */ - schar* img0 = scanner->img0; - schar* img = scanner->img; - int step = scanner->img_step; - int step_i = step / sizeof(int); - int x = scanner->pt.x; - int y = scanner->pt.y; - int width = scanner->img_size.width; - int height = scanner->img_size.height; - int mode = scanner->mode; - CvPoint lnbd = scanner->lnbd; - int nbd = scanner->nbd; - int prev = img[x - 1]; - int new_mask = -2; - - if( mode == CV_RETR_FLOODFILL ) - { - prev = ((int*)img)[x - 1]; - new_mask = INT_MIN >> 1; - } - - for( ; y < height; y++, img += step ) - { - int* img0_i = 0; - int* img_i = 0; - int p = 0; - - if( mode == CV_RETR_FLOODFILL ) - { - img0_i = (int*)img0; - img_i = (int*)img; - } - - for( ; x < width; x++ ) - { - if( img_i ) - { - for( ; x < width && ((p = img_i[x]) == prev || (p & ~new_mask) == (prev & ~new_mask)); x++ ) - prev = p; - } - else - { - for( ; x < width && (p = img[x]) == prev; x++ ) - ; - } - - if( x >= width ) - break; - - { - _CvContourInfo *par_info = 0; - _CvContourInfo *l_cinfo = 0; - CvSeq *seq = 0; - int is_hole = 0; - CvPoint origin; - - /* if not external contour */ - if( (!img_i && !(prev == 0 && p == 1)) || - (img_i && !(((prev & new_mask) != 0 || prev == 0) && (p & new_mask) == 0)) ) - { - /* check hole */ - if( (!img_i && (p != 0 || prev < 1)) || - (img_i && ((prev & new_mask) != 0 || (p & new_mask) != 0))) - goto resume_scan; - - if( prev & new_mask ) - { - lnbd.x = x - 1; - } - is_hole = 1; - } - - if( mode == 0 && (is_hole || img0[lnbd.y * step + lnbd.x] > 0) ) - goto resume_scan; - - origin.y = y; - origin.x = x - is_hole; - - /* find contour parent */ - if( mode <= 1 || (!is_hole && (mode == CV_RETR_CCOMP || mode == CV_RETR_FLOODFILL)) || lnbd.x <= 0 ) - { - par_info = &(scanner->frame_info); - } - else - { - int lval = (img0_i ? - img0_i[lnbd.y * step_i + lnbd.x] : - (int)img0[lnbd.y * step + lnbd.x]) & 0x7f; - _CvContourInfo *cur = scanner->cinfo_table[lval]; - - /* find the first bounding contour */ - while( cur ) - { - if( (unsigned) (lnbd.x - cur->rect.x) < (unsigned) cur->rect.width && - (unsigned) (lnbd.y - cur->rect.y) < (unsigned) cur->rect.height ) - { - if( par_info ) - { - if( (img0_i && - icvTraceContour_32s( img0_i + par_info->origin.y * step_i + - par_info->origin.x, step_i, img_i + lnbd.x, - par_info->is_hole ) > 0) || - (!img0_i && - icvTraceContour( img0 + par_info->origin.y * step + - par_info->origin.x, step, img + lnbd.x, - par_info->is_hole ) > 0) ) - break; - } - par_info = cur; - } - cur = cur->next; - } - - assert( par_info != 0 ); - - /* if current contour is a hole and previous contour is a hole or - current contour is external and previous contour is external then - the parent of the contour is the parent of the previous contour else - the parent is the previous contour itself. */ - if( par_info->is_hole == is_hole ) - { - par_info = par_info->parent; - /* every contour must have a parent - (at least, the frame of the image) */ - if( !par_info ) - par_info = &(scanner->frame_info); - } - - /* hole flag of the parent must differ from the flag of the contour */ - assert( par_info->is_hole != is_hole ); - if( par_info->contour == 0 ) /* removed contour */ - goto resume_scan; - } - - lnbd.x = x - is_hole; - - cvSaveMemStoragePos( scanner->storage2, &(scanner->backup_pos) ); - - seq = cvCreateSeq( scanner->seq_type1, scanner->header_size1, - scanner->elem_size1, scanner->storage1 ); - seq->flags |= is_hole ? CV_SEQ_FLAG_HOLE : 0; - - /* initialize header */ - if( mode <= 1 ) - { - l_cinfo = &(scanner->cinfo_temp); - icvFetchContour( img + x - is_hole, step, - cvPoint( origin.x + scanner->offset.x, - origin.y + scanner->offset.y), - seq, scanner->approx_method1 ); - } - else - { - union { _CvContourInfo* ci; CvSetElem* se; } v; - v.ci = l_cinfo; - cvSetAdd( scanner->cinfo_set, 0, &v.se ); - l_cinfo = v.ci; - int lval; - - if( img_i ) - { - lval = img_i[x - is_hole] & 127; - icvFetchContourEx_32s(img_i + x - is_hole, step_i, - cvPoint( origin.x + scanner->offset.x, - origin.y + scanner->offset.y), - seq, scanner->approx_method1, - &(l_cinfo->rect) ); - } - else - { - lval = nbd; - // change nbd - nbd = (nbd + 1) & 127; - nbd += nbd == 0 ? 3 : 0; - icvFetchContourEx( img + x - is_hole, step, - cvPoint( origin.x + scanner->offset.x, - origin.y + scanner->offset.y), - seq, scanner->approx_method1, - lval, &(l_cinfo->rect) ); - } - l_cinfo->rect.x -= scanner->offset.x; - l_cinfo->rect.y -= scanner->offset.y; - - l_cinfo->next = scanner->cinfo_table[lval]; - scanner->cinfo_table[lval] = l_cinfo; - } - - l_cinfo->is_hole = is_hole; - l_cinfo->contour = seq; - l_cinfo->origin = origin; - l_cinfo->parent = par_info; - - if( scanner->approx_method1 != scanner->approx_method2 ) - { - l_cinfo->contour = icvApproximateChainTC89( (CvChain *) seq, - scanner->header_size2, - scanner->storage2, - scanner->approx_method2 ); - cvClearMemStorage( scanner->storage1 ); - } - - l_cinfo->contour->v_prev = l_cinfo->parent->contour; - - if( par_info->contour == 0 ) - { - l_cinfo->contour = 0; - if( scanner->storage1 == scanner->storage2 ) - { - cvRestoreMemStoragePos( scanner->storage1, &(scanner->backup_pos) ); - } - else - { - cvClearMemStorage( scanner->storage1 ); - } - p = img[x]; - goto resume_scan; - } - - cvSaveMemStoragePos( scanner->storage2, &(scanner->backup_pos2) ); - scanner->l_cinfo = l_cinfo; - scanner->pt.x = !img_i ? x + 1 : x + 1 - is_hole; - scanner->pt.y = y; - scanner->lnbd = lnbd; - scanner->img = (schar *) img; - scanner->nbd = nbd; - return l_cinfo->contour; - - resume_scan: - - prev = p; - /* update lnbd */ - if( prev & -2 ) - { - lnbd.x = x; - } - } /* end of prev != p */ - } /* end of loop on x */ - - lnbd.x = 0; - lnbd.y = y + 1; - x = 1; - prev = 0; - } /* end of loop on y */ - - return 0; -} - - -/* - The function add to tree the last retrieved/substituted contour, - releases temp_storage, restores state of dst_storage (if needed), and - returns pointer to root of the contour tree */ -CV_IMPL CvSeq * -cvEndFindContours( CvContourScanner * _scanner ) -{ - CvContourScanner scanner; - CvSeq *first = 0; - - if( !_scanner ) - CV_Error( CV_StsNullPtr, "" ); - scanner = *_scanner; - - if( scanner ) - { - icvEndProcessContour( scanner ); - - if( scanner->storage1 != scanner->storage2 ) - cvReleaseMemStorage( &(scanner->storage1) ); - - if( scanner->cinfo_storage ) - cvReleaseMemStorage( &(scanner->cinfo_storage) ); - - first = scanner->frame.v_next; - cvFree( _scanner ); - } - - return first; -} - - -#define ICV_SINGLE 0 -#define ICV_CONNECTING_ABOVE 1 -#define ICV_CONNECTING_BELOW -1 -#define ICV_IS_COMPONENT_POINT(val) ((val) != 0) - -#define CV_GET_WRITTEN_ELEM( writer ) ((writer).ptr - (writer).seq->elem_size) - -typedef struct CvLinkedRunPoint -{ - struct CvLinkedRunPoint* link; - struct CvLinkedRunPoint* next; - CvPoint pt; -} -CvLinkedRunPoint; - - -static int -icvFindContoursInInterval( const CvArr* src, - /*int minValue, int maxValue,*/ - CvMemStorage* storage, - CvSeq** result, - int contourHeaderSize ) -{ - int count = 0; - cv::Ptr storage00; - cv::Ptr storage01; - CvSeq* first = 0; - - int i, j, k, n; - - uchar* src_data = 0; - int img_step = 0; - CvSize img_size; - - int connect_flag; - int lower_total; - int upper_total; - int all_total; - - CvSeq* runs; - CvLinkedRunPoint tmp; - CvLinkedRunPoint* tmp_prev; - CvLinkedRunPoint* upper_line = 0; - CvLinkedRunPoint* lower_line = 0; - CvLinkedRunPoint* last_elem; - - CvLinkedRunPoint* upper_run = 0; - CvLinkedRunPoint* lower_run = 0; - CvLinkedRunPoint* prev_point = 0; - - CvSeqWriter writer_ext; - CvSeqWriter writer_int; - CvSeqWriter writer; - CvSeqReader reader; - - CvSeq* external_contours; - CvSeq* internal_contours; - CvSeq* prev = 0; - - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - - if( !result ) - CV_Error( CV_StsNullPtr, "NULL double CvSeq pointer" ); - - if( contourHeaderSize < (int)sizeof(CvContour)) - CV_Error( CV_StsBadSize, "Contour header size must be >= sizeof(CvContour)" ); - - storage00 = cvCreateChildMemStorage(storage); - storage01 = cvCreateChildMemStorage(storage); - - CvMat stub, *mat; - - mat = cvGetMat( src, &stub ); - if( !CV_IS_MASK_ARR(mat)) - CV_Error( CV_StsBadArg, "Input array must be 8uC1 or 8sC1" ); - src_data = mat->data.ptr; - img_step = mat->step; - img_size = cvGetMatSize( mat ); - - // Create temporary sequences - runs = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvLinkedRunPoint), storage00 ); - cvStartAppendToSeq( runs, &writer ); - - cvStartWriteSeq( 0, sizeof(CvSeq), sizeof(CvLinkedRunPoint*), storage01, &writer_ext ); - cvStartWriteSeq( 0, sizeof(CvSeq), sizeof(CvLinkedRunPoint*), storage01, &writer_int ); - - tmp_prev = &(tmp); - tmp_prev->next = 0; - tmp_prev->link = 0; - - // First line. None of runs is binded - tmp.pt.y = 0; - i = 0; - CV_WRITE_SEQ_ELEM( tmp, writer ); - upper_line = (CvLinkedRunPoint*)CV_GET_WRITTEN_ELEM( writer ); - - tmp_prev = upper_line; - for( j = 0; j < img_size.width; ) - { - for( ; j < img_size.width && !ICV_IS_COMPONENT_POINT(src_data[j]); j++ ) - ; - if( j == img_size.width ) - break; - - tmp.pt.x = j; - CV_WRITE_SEQ_ELEM( tmp, writer ); - tmp_prev->next = (CvLinkedRunPoint*)CV_GET_WRITTEN_ELEM( writer ); - tmp_prev = tmp_prev->next; - - for( ; j < img_size.width && ICV_IS_COMPONENT_POINT(src_data[j]); j++ ) - ; - - tmp.pt.x = j-1; - CV_WRITE_SEQ_ELEM( tmp, writer ); - tmp_prev->next = (CvLinkedRunPoint*)CV_GET_WRITTEN_ELEM( writer ); - tmp_prev->link = tmp_prev->next; - // First point of contour - CV_WRITE_SEQ_ELEM( tmp_prev, writer_ext ); - tmp_prev = tmp_prev->next; - } - cvFlushSeqWriter( &writer ); - upper_line = upper_line->next; - upper_total = runs->total - 1; - last_elem = tmp_prev; - tmp_prev->next = 0; - - for( i = 1; i < img_size.height; i++ ) - { -//------// Find runs in next line - src_data += img_step; - tmp.pt.y = i; - all_total = runs->total; - for( j = 0; j < img_size.width; ) - { - for( ; j < img_size.width && !ICV_IS_COMPONENT_POINT(src_data[j]); j++ ) - ; - if( j == img_size.width ) break; - - tmp.pt.x = j; - CV_WRITE_SEQ_ELEM( tmp, writer ); - tmp_prev->next = (CvLinkedRunPoint*)CV_GET_WRITTEN_ELEM( writer ); - tmp_prev = tmp_prev->next; - - for( ; j < img_size.width && ICV_IS_COMPONENT_POINT(src_data[j]); j++ ) - ; - - tmp.pt.x = j-1; - CV_WRITE_SEQ_ELEM( tmp, writer ); - tmp_prev = tmp_prev->next = (CvLinkedRunPoint*)CV_GET_WRITTEN_ELEM( writer ); - }//j - cvFlushSeqWriter( &writer ); - lower_line = last_elem->next; - lower_total = runs->total - all_total; - last_elem = tmp_prev; - tmp_prev->next = 0; -//------// -//------// Find links between runs of lower_line and upper_line - upper_run = upper_line; - lower_run = lower_line; - connect_flag = ICV_SINGLE; - - for( k = 0, n = 0; k < upper_total/2 && n < lower_total/2; ) - { - switch( connect_flag ) - { - case ICV_SINGLE: - if( upper_run->next->pt.x < lower_run->next->pt.x ) - { - if( upper_run->next->pt.x >= lower_run->pt.x -1 ) - { - lower_run->link = upper_run; - connect_flag = ICV_CONNECTING_ABOVE; - prev_point = upper_run->next; - } - else - upper_run->next->link = upper_run; - k++; - upper_run = upper_run->next->next; - } - else - { - if( upper_run->pt.x <= lower_run->next->pt.x +1 ) - { - lower_run->link = upper_run; - connect_flag = ICV_CONNECTING_BELOW; - prev_point = lower_run->next; - } - else - { - lower_run->link = lower_run->next; - // First point of contour - CV_WRITE_SEQ_ELEM( lower_run, writer_ext ); - } - n++; - lower_run = lower_run->next->next; - } - break; - case ICV_CONNECTING_ABOVE: - if( upper_run->pt.x > lower_run->next->pt.x +1 ) - { - prev_point->link = lower_run->next; - connect_flag = ICV_SINGLE; - n++; - lower_run = lower_run->next->next; - } - else - { - prev_point->link = upper_run; - if( upper_run->next->pt.x < lower_run->next->pt.x ) - { - k++; - prev_point = upper_run->next; - upper_run = upper_run->next->next; - } - else - { - connect_flag = ICV_CONNECTING_BELOW; - prev_point = lower_run->next; - n++; - lower_run = lower_run->next->next; - } - } - break; - case ICV_CONNECTING_BELOW: - if( lower_run->pt.x > upper_run->next->pt.x +1 ) - { - upper_run->next->link = prev_point; - connect_flag = ICV_SINGLE; - k++; - upper_run = upper_run->next->next; - } - else - { - // First point of contour - CV_WRITE_SEQ_ELEM( lower_run, writer_int ); - - lower_run->link = prev_point; - if( lower_run->next->pt.x < upper_run->next->pt.x ) - { - n++; - prev_point = lower_run->next; - lower_run = lower_run->next->next; - } - else - { - connect_flag = ICV_CONNECTING_ABOVE; - k++; - prev_point = upper_run->next; - upper_run = upper_run->next->next; - } - } - break; - } - }// k, n - - for( ; n < lower_total/2; n++ ) - { - if( connect_flag != ICV_SINGLE ) - { - prev_point->link = lower_run->next; - connect_flag = ICV_SINGLE; - lower_run = lower_run->next->next; - continue; - } - lower_run->link = lower_run->next; - - //First point of contour - CV_WRITE_SEQ_ELEM( lower_run, writer_ext ); - - lower_run = lower_run->next->next; - } - - for( ; k < upper_total/2; k++ ) - { - if( connect_flag != ICV_SINGLE ) - { - upper_run->next->link = prev_point; - connect_flag = ICV_SINGLE; - upper_run = upper_run->next->next; - continue; - } - upper_run->next->link = upper_run; - upper_run = upper_run->next->next; - } - upper_line = lower_line; - upper_total = lower_total; - }//i - - upper_run = upper_line; - - //the last line of image - for( k = 0; k < upper_total/2; k++ ) - { - upper_run->next->link = upper_run; - upper_run = upper_run->next->next; - } - -//------// -//------//Find end read contours - external_contours = cvEndWriteSeq( &writer_ext ); - internal_contours = cvEndWriteSeq( &writer_int ); - - for( k = 0; k < 2; k++ ) - { - CvSeq* contours = k == 0 ? external_contours : internal_contours; - - cvStartReadSeq( contours, &reader ); - - for( j = 0; j < contours->total; j++, count++ ) - { - CvLinkedRunPoint* p_temp; - CvLinkedRunPoint* p00; - CvLinkedRunPoint* p01; - CvSeq* contour; - - CV_READ_SEQ_ELEM( p00, reader ); - p01 = p00; - - if( !p00->link ) - continue; - - cvStartWriteSeq( CV_SEQ_ELTYPE_POINT | CV_SEQ_POLYLINE | CV_SEQ_FLAG_CLOSED, - contourHeaderSize, sizeof(CvPoint), storage, &writer ); - do - { - CV_WRITE_SEQ_ELEM( p00->pt, writer ); - p_temp = p00; - p00 = p00->link; - p_temp->link = 0; - } - while( p00 != p01 ); - - contour = cvEndWriteSeq( &writer ); - cvBoundingRect( contour, 1 ); - - if( k != 0 ) - contour->flags |= CV_SEQ_FLAG_HOLE; - - if( !first ) - prev = first = contour; - else - { - contour->h_prev = prev; - prev = prev->h_next = contour; - } - } - } - - if( !first ) - count = -1; - - if( result ) - *result = first; - - return count; -} - - - -/*F/////////////////////////////////////////////////////////////////////////////////////// -// Name: cvFindContours -// Purpose: -// Finds all the contours on the bi-level image. -// Context: -// Parameters: -// img - source image. -// Non-zero pixels are considered as 1-pixels -// and zero pixels as 0-pixels. -// step - full width of source image in bytes. -// size - width and height of the image in pixels -// storage - pointer to storage where will the output contours be placed. -// header_size - header size of resulting contours -// mode - mode of contour retrieval. -// method - method of approximation that is applied to contours -// first_contour - pointer to first contour pointer -// Returns: -// CV_OK or error code -// Notes: -//F*/ -CV_IMPL int -cvFindContours( void* img, CvMemStorage* storage, - CvSeq** firstContour, int cntHeaderSize, - int mode, - int method, CvPoint offset ) -{ - CvContourScanner scanner = 0; - CvSeq *contour = 0; - int count = -1; - - if( !firstContour ) - CV_Error( CV_StsNullPtr, "NULL double CvSeq pointer" ); - - *firstContour = 0; - - if( method == CV_LINK_RUNS ) - { - if( offset.x != 0 || offset.y != 0 ) - CV_Error( CV_StsOutOfRange, - "Nonzero offset is not supported in CV_LINK_RUNS yet" ); - - count = icvFindContoursInInterval( img, storage, firstContour, cntHeaderSize ); - } - else - { - try - { - scanner = cvStartFindContours( img, storage, cntHeaderSize, mode, method, offset ); - - do - { - count++; - contour = cvFindNextContour( scanner ); - } - while( contour != 0 ); - } - catch(...) - { - if( scanner ) - cvEndFindContours(&scanner); - throw; - } - - *firstContour = cvEndFindContours( &scanner ); - } - - return count; -} - -void cv::findContours( InputOutputArray _image, OutputArrayOfArrays _contours, - OutputArray _hierarchy, int mode, int method, Point offset ) -{ - Mat image = _image.getMat(); - MemStorage storage(cvCreateMemStorage()); - CvMat _cimage = image; - CvSeq* _ccontours = 0; - if( _hierarchy.needed() ) - _hierarchy.clear(); - cvFindContours(&_cimage, storage, &_ccontours, sizeof(CvContour), mode, method, offset); - if( !_ccontours ) - { - _contours.clear(); - return; - } - Seq all_contours(cvTreeToNodeSeq( _ccontours, sizeof(CvSeq), storage )); - int i, total = (int)all_contours.size(); - _contours.create(total, 1, 0, -1, true); - SeqIterator it = all_contours.begin(); - for( i = 0; i < total; i++, ++it ) - { - CvSeq* c = *it; - ((CvContour*)c)->color = (int)i; - _contours.create((int)c->total, 1, CV_32SC2, i, true); - Mat ci = _contours.getMat(i); - CV_Assert( ci.isContinuous() ); - cvCvtSeqToArray(c, ci.data); - } - - if( _hierarchy.needed() ) - { - _hierarchy.create(1, total, CV_32SC4, -1, true); - Vec4i* hierarchy = _hierarchy.getMat().ptr(); - - it = all_contours.begin(); - for( i = 0; i < total; i++, ++it ) - { - CvSeq* c = *it; - int h_next = c->h_next ? ((CvContour*)c->h_next)->color : -1; - int h_prev = c->h_prev ? ((CvContour*)c->h_prev)->color : -1; - int v_next = c->v_next ? ((CvContour*)c->v_next)->color : -1; - int v_prev = c->v_prev ? ((CvContour*)c->v_prev)->color : -1; - hierarchy[i] = Vec4i(h_next, h_prev, v_next, v_prev); - } - } -} - -void cv::findContours( InputOutputArray _image, OutputArrayOfArrays _contours, - int mode, int method, Point offset) -{ - findContours(_image, _contours, noArray(), mode, method, offset); -} - -namespace cv -{ - -static void addChildContour(InputArrayOfArrays contours, - size_t ncontours, - const Vec4i* hierarchy, - int i, vector& seq, - vector& block) -{ - for( ; i >= 0; i = hierarchy[i][0] ) - { - Mat ci = contours.getMat(i); - cvMakeSeqHeaderForArray(CV_SEQ_POLYGON, sizeof(CvSeq), sizeof(Point), - !ci.empty() ? (void*)ci.data : 0, (int)ci.total(), - &seq[i], &block[i] ); - - int h_next = hierarchy[i][0], h_prev = hierarchy[i][1], - v_next = hierarchy[i][2], v_prev = hierarchy[i][3]; - seq[i].h_next = (size_t)h_next < ncontours ? &seq[h_next] : 0; - seq[i].h_prev = (size_t)h_prev < ncontours ? &seq[h_prev] : 0; - seq[i].v_next = (size_t)v_next < ncontours ? &seq[v_next] : 0; - seq[i].v_prev = (size_t)v_prev < ncontours ? &seq[v_prev] : 0; - - if( v_next >= 0 ) - addChildContour(contours, ncontours, hierarchy, v_next, seq, block); - } -} - -} - -void cv::drawContours( InputOutputArray _image, InputArrayOfArrays _contours, - int contourIdx, const Scalar& color, int thickness, - int lineType, InputArray _hierarchy, - int maxLevel, Point offset ) -{ - Mat image = _image.getMat(), hierarchy = _hierarchy.getMat(); - CvMat _cimage = image; - - size_t ncontours = _contours.total(); - size_t i = 0, first = 0, last = ncontours; - vector seq; - vector block; - - if( !last ) - return; - - seq.resize(last); - block.resize(last); - - for( i = first; i < last; i++ ) - seq[i].first = 0; - - if( contourIdx >= 0 ) - { - CV_Assert( 0 <= contourIdx && contourIdx < (int)last ); - first = contourIdx; - last = contourIdx + 1; - } - - for( i = first; i < last; i++ ) - { - Mat ci = _contours.getMat((int)i); - if( ci.empty() ) - continue; - int npoints = ci.checkVector(2, CV_32S); - CV_Assert( npoints > 0 ); - cvMakeSeqHeaderForArray( CV_SEQ_POLYGON, sizeof(CvSeq), sizeof(Point), - ci.data, npoints, &seq[i], &block[i] ); - } - - if( hierarchy.empty() || maxLevel == 0 ) - for( i = first; i < last; i++ ) - { - seq[i].h_next = i < last-1 ? &seq[i+1] : 0; - seq[i].h_prev = i > first ? &seq[i-1] : 0; - } - else - { - size_t count = last - first; - CV_Assert(hierarchy.total() == ncontours && hierarchy.type() == CV_32SC4 ); - const Vec4i* h = hierarchy.ptr(); - - if( count == ncontours ) - { - for( i = first; i < last; i++ ) - { - int h_next = h[i][0], h_prev = h[i][1], - v_next = h[i][2], v_prev = h[i][3]; - seq[i].h_next = (size_t)h_next < count ? &seq[h_next] : 0; - seq[i].h_prev = (size_t)h_prev < count ? &seq[h_prev] : 0; - seq[i].v_next = (size_t)v_next < count ? &seq[v_next] : 0; - seq[i].v_prev = (size_t)v_prev < count ? &seq[v_prev] : 0; - } - } - else - { - int child = h[first][2]; - if( child >= 0 ) - { - addChildContour(_contours, ncontours, h, child, seq, block); - seq[first].v_next = &seq[child]; - } - } - } - - cvDrawContours( &_cimage, &seq[first], color, color, contourIdx >= 0 ? - -maxLevel : maxLevel, thickness, lineType, offset ); -} - - -void cv::approxPolyDP( InputArray _curve, OutputArray _approxCurve, - double epsilon, bool closed ) -{ - Mat curve = _curve.getMat(); - int npoints = curve.checkVector(2), depth = curve.depth(); - CV_Assert( npoints >= 0 && (depth == CV_32S || depth == CV_32F)); - CvMat _ccurve = curve; - MemStorage storage(cvCreateMemStorage()); - CvSeq* result = cvApproxPoly(&_ccurve, sizeof(CvContour), storage, CV_POLY_APPROX_DP, epsilon, closed); - if( result->total > 0 ) - { - _approxCurve.create(result->total, 1, CV_MAKETYPE(curve.depth(), 2), -1, true); - cvCvtSeqToArray(result, _approxCurve.getMat().data ); - } -} - - -double cv::arcLength( InputArray _curve, bool closed ) -{ - Mat curve = _curve.getMat(); - CV_Assert(curve.checkVector(2) >= 0 && (curve.depth() == CV_32F || curve.depth() == CV_32S)); - CvMat _ccurve = curve; - return cvArcLength(&_ccurve, CV_WHOLE_SEQ, closed); -} - - -cv::Rect cv::boundingRect( InputArray _points ) -{ - Mat points = _points.getMat(); - CV_Assert(points.checkVector(2) >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S)); - CvMat _cpoints = points; - return cvBoundingRect(&_cpoints, 0); -} - - -double cv::contourArea( InputArray _contour, bool oriented ) -{ - Mat contour = _contour.getMat(); - CV_Assert(contour.checkVector(2) >= 0 && (contour.depth() == CV_32F || contour.depth() == CV_32S)); - CvMat _ccontour = contour; - return cvContourArea(&_ccontour, CV_WHOLE_SEQ, oriented); -} - - -cv::RotatedRect cv::minAreaRect( InputArray _points ) -{ - Mat points = _points.getMat(); - CV_Assert(points.checkVector(2) >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S)); - CvMat _cpoints = points; - return cvMinAreaRect2(&_cpoints, 0); -} - - -void cv::minEnclosingCircle( InputArray _points, - Point2f& center, float& radius ) -{ - Mat points = _points.getMat(); - CV_Assert(points.checkVector(2) >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S)); - CvMat _cpoints = points; - cvMinEnclosingCircle( &_cpoints, (CvPoint2D32f*)¢er, &radius ); -} - - -double cv::matchShapes( InputArray _contour1, - InputArray _contour2, - int method, double parameter ) -{ - Mat contour1 = _contour1.getMat(), contour2 = _contour2.getMat(); - CV_Assert(contour1.checkVector(2) >= 0 && contour2.checkVector(2) >= 0 && - (contour1.depth() == CV_32F || contour1.depth() == CV_32S) && - contour1.depth() == contour2.depth()); - - CvMat c1 = Mat(contour1), c2 = Mat(contour2); - return cvMatchShapes(&c1, &c2, method, parameter); -} - - -void cv::convexHull( InputArray _points, OutputArray _hull, bool clockwise, bool returnPoints ) -{ - Mat points = _points.getMat(); - int nelems = points.checkVector(2), depth = points.depth(); - CV_Assert(nelems >= 0 && (depth == CV_32F || depth == CV_32S)); - - if( nelems == 0 ) - { - _hull.release(); - return; - } - - returnPoints = !_hull.fixedType() ? returnPoints : _hull.type() != CV_32S; - Mat hull(nelems, 1, returnPoints ? CV_MAKETYPE(depth, 2) : CV_32S); - CvMat _cpoints = points, _chull = hull; - cvConvexHull2(&_cpoints, &_chull, clockwise ? CV_CLOCKWISE : CV_COUNTER_CLOCKWISE, returnPoints); - _hull.create(_chull.rows, 1, hull.type(), -1, true); - Mat dhull = _hull.getMat(), shull(dhull.size(), dhull.type(), hull.data); - shull.copyTo(dhull); -} - - -void cv::convexityDefects( InputArray _points, InputArray _hull, OutputArray _defects ) -{ - Mat points = _points.getMat(); - int ptnum = points.checkVector(2, CV_32S); - CV_Assert( ptnum > 3 ); - Mat hull = _hull.getMat(); - CV_Assert( hull.checkVector(1, CV_32S) > 2 ); - Ptr storage = cvCreateMemStorage(); - - CvMat c_points = points, c_hull = hull; - CvSeq* seq = cvConvexityDefects(&c_points, &c_hull, storage); - int i, n = seq->total; - - if( n == 0 ) - { - _defects.release(); - return; - } - - _defects.create(n, 1, CV_32SC4); - Mat defects = _defects.getMat(); - - SeqIterator it = Seq(seq).begin(); - CvPoint* ptorg = (CvPoint*)points.data; - - for( i = 0; i < n; i++, ++it ) - { - CvConvexityDefect& d = *it; - int idx0 = (int)(d.start - ptorg); - int idx1 = (int)(d.end - ptorg); - int idx2 = (int)(d.depth_point - ptorg); - CV_Assert( 0 <= idx0 && idx0 < ptnum ); - CV_Assert( 0 <= idx1 && idx1 < ptnum ); - CV_Assert( 0 <= idx2 && idx2 < ptnum ); - CV_Assert( d.depth >= 0 ); - int idepth = cvRound(d.depth*256); - defects.at(i) = Vec4i(idx0, idx1, idx2, idepth); - } -} - - -bool cv::isContourConvex( InputArray _contour ) -{ - Mat contour = _contour.getMat(); - CV_Assert(contour.checkVector(2) >= 0 && - (contour.depth() == CV_32F || contour.depth() == CV_32S)); - CvMat c = Mat(contour); - return cvCheckContourConvexity(&c) > 0; -} - -cv::RotatedRect cv::fitEllipse( InputArray _points ) -{ - Mat points = _points.getMat(); - CV_Assert(points.checkVector(2) >= 0 && - (points.depth() == CV_32F || points.depth() == CV_32S)); - CvMat _cpoints = points; - return cvFitEllipse2(&_cpoints); -} - - -void cv::fitLine( InputArray _points, OutputArray _line, int distType, - double param, double reps, double aeps ) -{ - Mat points = _points.getMat(); - - bool is3d = points.checkVector(3) >= 0; - bool is2d = points.checkVector(2) >= 0; - - CV_Assert( (is2d || is3d) && (points.depth() == CV_32F || points.depth() == CV_32S) ); - CvMat _cpoints = points.reshape(2 + (int)is3d); - float line[6]; - cvFitLine(&_cpoints, distType, param, reps, aeps, &line[0]); - - int out_size = (is2d)?( (is3d)? (points.channels() * points.rows * 2) : 4 ): 6; - - _line.create(out_size, 1, CV_32F, -1, true); - Mat l = _line.getMat(); - CV_Assert( l.isContinuous() ); - memcpy( l.data, line, out_size * sizeof(line[0]) ); -} - - -double cv::pointPolygonTest( InputArray _contour, - Point2f pt, bool measureDist ) -{ - Mat contour = _contour.getMat(); - CV_Assert(contour.checkVector(2) >= 0 && - (contour.depth() == CV_32F || contour.depth() == CV_32S)); - CvMat c = Mat(contour); - return cvPointPolygonTest( &c, pt, measureDist ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/convhull.cpp b/modules/imgproc/src/convhull.cpp deleted file mode 100644 index 145c55e..0000000 --- a/modules/imgproc/src/convhull.cpp +++ /dev/null @@ -1,815 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -static int -icvSklansky_32s( CvPoint** array, int start, int end, int* stack, int nsign, int sign2 ) -{ - int incr = end > start ? 1 : -1; - /* prepare first triangle */ - int pprev = start, pcur = pprev + incr, pnext = pcur + incr; - int stacksize = 3; - - if( start == end || - (array[start]->x == array[end]->x && - array[start]->y == array[end]->y) ) - { - stack[0] = start; - return 1; - } - - stack[0] = pprev; - stack[1] = pcur; - stack[2] = pnext; - - end += incr; /* make end = afterend */ - - while( pnext != end ) - { - /* check the angle p1,p2,p3 */ - int cury = array[pcur]->y; - int nexty = array[pnext]->y; - int by = nexty - cury; - - if( CV_SIGN(by) != nsign ) - { - int ax = array[pcur]->x - array[pprev]->x; - int bx = array[pnext]->x - array[pcur]->x; - int ay = cury - array[pprev]->y; - int convexity = ay*bx - ax*by;/* if >0 then convex angle */ - - if( CV_SIGN(convexity) == sign2 && (ax != 0 || ay != 0) ) - { - pprev = pcur; - pcur = pnext; - pnext += incr; - stack[stacksize] = pnext; - stacksize++; - } - else - { - if( pprev == start ) - { - pcur = pnext; - stack[1] = pcur; - pnext += incr; - stack[2] = pnext; - } - else - { - stack[stacksize-2] = pnext; - pcur = pprev; - pprev = stack[stacksize-4]; - stacksize--; - } - } - } - else - { - pnext += incr; - stack[stacksize-1] = pnext; - } - } - - return --stacksize; -} - - -static int -icvSklansky_32f( CvPoint2D32f** array, int start, int end, int* stack, int nsign, int sign2 ) -{ - int incr = end > start ? 1 : -1; - /* prepare first triangle */ - int pprev = start, pcur = pprev + incr, pnext = pcur + incr; - int stacksize = 3; - - if( start == end || - (array[start]->x == array[end]->x && - array[start]->y == array[end]->y) ) - { - stack[0] = start; - return 1; - } - - stack[0] = pprev; - stack[1] = pcur; - stack[2] = pnext; - - end += incr; /* make end = afterend */ - - while( pnext != end ) - { - /* check the angle p1,p2,p3 */ - float cury = array[pcur]->y; - float nexty = array[pnext]->y; - float by = nexty - cury; - - if( CV_SIGN( by ) != nsign ) - { - float ax = array[pcur]->x - array[pprev]->x; - float bx = array[pnext]->x - array[pcur]->x; - float ay = cury - array[pprev]->y; - float convexity = ay*bx - ax*by;/* if >0 then convex angle */ - - if( CV_SIGN( convexity ) == sign2 && (ax != 0 || ay != 0) ) - { - pprev = pcur; - pcur = pnext; - pnext += incr; - stack[stacksize] = pnext; - stacksize++; - } - else - { - if( pprev == start ) - { - pcur = pnext; - stack[1] = pcur; - pnext += incr; - stack[2] = pnext; - - } - else - { - stack[stacksize-2] = pnext; - pcur = pprev; - pprev = stack[stacksize-4]; - stacksize--; - } - } - } - else - { - pnext += incr; - stack[stacksize-1] = pnext; - } - } - - return --stacksize; -} - -typedef int (*sklansky_func)( CvPoint** points, int start, int end, - int* stack, int sign, int sign2 ); - -#define cmp_pts( pt1, pt2 ) \ - ((pt1)->x < (pt2)->x || ((pt1)->x <= (pt2)->x && (pt1)->y < (pt2)->y)) -static CV_IMPLEMENT_QSORT( icvSortPointsByPointers_32s, CvPoint*, cmp_pts ) -static CV_IMPLEMENT_QSORT( icvSortPointsByPointers_32f, CvPoint2D32f*, cmp_pts ) - -static void -icvCalcAndWritePtIndices( CvPoint** pointer, int* stack, int start, int end, - CvSeq* ptseq, CvSeqWriter* writer ) -{ - int i, incr = start < end ? 1 : -1; - int idx, first_idx = ptseq->first->start_index; - - for( i = start; i != end; i += incr ) - { - CvPoint* ptr = (CvPoint*)pointer[stack[i]]; - CvSeqBlock* block = ptseq->first; - while( (unsigned)(idx = (int)(ptr - (CvPoint*)block->data)) >= (unsigned)block->count ) - { - block = block->next; - if( block == ptseq->first ) - CV_Error( CV_StsError, "Internal error" ); - } - idx += block->start_index - first_idx; - CV_WRITE_SEQ_ELEM( idx, *writer ); - } -} - - -CV_IMPL CvSeq* -cvConvexHull2( const CvArr* array, void* hull_storage, - int orientation, int return_points ) -{ - union { CvContour* c; CvSeq* s; } hull; - cv::AutoBuffer _pointer; - CvPoint** pointer; - CvPoint2D32f** pointerf = 0; - cv::AutoBuffer _stack; - int* stack; - - hull.s = 0; - - CvMat* mat = 0; - CvSeqReader reader; - CvSeqWriter writer; - CvContour contour_header; - union { CvContour c; CvSeq s; } hull_header; - CvSeqBlock block, hullblock; - CvSeq* ptseq = 0; - CvSeq* hullseq = 0; - int is_float; - int* t_stack; - int t_count; - int i, miny_ind = 0, maxy_ind = 0, total; - int hulltype; - int stop_idx; - sklansky_func sklansky; - - if( CV_IS_SEQ( array )) - { - ptseq = (CvSeq*)array; - if( !CV_IS_SEQ_POINT_SET( ptseq )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - if( hull_storage == 0 ) - hull_storage = ptseq->storage; - } - else - { - ptseq = cvPointSeqFromMat( CV_SEQ_KIND_GENERIC, array, &contour_header, &block ); - } - - if( CV_IS_STORAGE( hull_storage )) - { - if( return_points ) - { - hullseq = cvCreateSeq( - CV_SEQ_KIND_CURVE|CV_SEQ_ELTYPE(ptseq)| - CV_SEQ_FLAG_CLOSED|CV_SEQ_FLAG_CONVEX, - sizeof(CvContour), sizeof(CvPoint),(CvMemStorage*)hull_storage ); - } - else - { - hullseq = cvCreateSeq( - CV_SEQ_KIND_CURVE|CV_SEQ_ELTYPE_PPOINT| - CV_SEQ_FLAG_CLOSED|CV_SEQ_FLAG_CONVEX, - sizeof(CvContour), sizeof(CvPoint*), (CvMemStorage*)hull_storage ); - } - } - else - { - if( !CV_IS_MAT( hull_storage )) - CV_Error(CV_StsBadArg, "Destination must be valid memory storage or matrix"); - - mat = (CvMat*)hull_storage; - - if( (mat->cols != 1 && mat->rows != 1) || !CV_IS_MAT_CONT(mat->type)) - CV_Error( CV_StsBadArg, - "The hull matrix should be continuous and have a single row or a single column" ); - - if( mat->cols + mat->rows - 1 < ptseq->total ) - CV_Error( CV_StsBadSize, "The hull matrix size might be not enough to fit the hull" ); - - if( CV_MAT_TYPE(mat->type) != CV_SEQ_ELTYPE(ptseq) && - CV_MAT_TYPE(mat->type) != CV_32SC1 ) - CV_Error( CV_StsUnsupportedFormat, - "The hull matrix must have the same type as input or 32sC1 (integers)" ); - - hullseq = cvMakeSeqHeaderForArray( - CV_SEQ_KIND_CURVE|CV_MAT_TYPE(mat->type)|CV_SEQ_FLAG_CLOSED, - sizeof(contour_header), CV_ELEM_SIZE(mat->type), mat->data.ptr, - mat->cols + mat->rows - 1, &hull_header.s, &hullblock ); - - cvClearSeq( hullseq ); - } - - total = ptseq->total; - if( total == 0 ) - { - if( mat ) - CV_Error( CV_StsBadSize, - "Point sequence can not be empty if the output is matrix" ); - return hull.s; - } - - cvStartAppendToSeq( hullseq, &writer ); - - is_float = CV_SEQ_ELTYPE(ptseq) == CV_32FC2; - hulltype = CV_SEQ_ELTYPE(hullseq); - sklansky = !is_float ? (sklansky_func)icvSklansky_32s : - (sklansky_func)icvSklansky_32f; - - _pointer.allocate( ptseq->total ); - _stack.allocate( ptseq->total + 2); - pointer = _pointer; - pointerf = (CvPoint2D32f**)pointer; - stack = _stack; - - cvStartReadSeq( ptseq, &reader ); - - for( i = 0; i < total; i++ ) - { - pointer[i] = (CvPoint*)reader.ptr; - CV_NEXT_SEQ_ELEM( ptseq->elem_size, reader ); - } - - // sort the point set by x-coordinate, find min and max y - if( !is_float ) - { - icvSortPointsByPointers_32s( pointer, total, 0 ); - for( i = 1; i < total; i++ ) - { - int y = pointer[i]->y; - if( pointer[miny_ind]->y > y ) - miny_ind = i; - if( pointer[maxy_ind]->y < y ) - maxy_ind = i; - } - } - else - { - icvSortPointsByPointers_32f( pointerf, total, 0 ); - for( i = 1; i < total; i++ ) - { - float y = pointerf[i]->y; - if( pointerf[miny_ind]->y > y ) - miny_ind = i; - if( pointerf[maxy_ind]->y < y ) - maxy_ind = i; - } - } - - if( pointer[0]->x == pointer[total-1]->x && - pointer[0]->y == pointer[total-1]->y ) - { - if( hulltype == CV_SEQ_ELTYPE_PPOINT ) - { - CV_WRITE_SEQ_ELEM( pointer[0], writer ); - } - else if( hulltype == CV_SEQ_ELTYPE_INDEX ) - { - int index = 0; - CV_WRITE_SEQ_ELEM( index, writer ); - } - else - { - CvPoint pt = pointer[0][0]; - CV_WRITE_SEQ_ELEM( pt, writer ); - } - goto finish_hull; - } - - /*upper half */ - { - int *tl_stack = stack; - int tl_count = sklansky( pointer, 0, maxy_ind, tl_stack, -1, 1 ); - int *tr_stack = tl_stack + tl_count; - int tr_count = sklansky( pointer, ptseq->total - 1, maxy_ind, tr_stack, -1, -1 ); - - /* gather upper part of convex hull to output */ - if( orientation == CV_COUNTER_CLOCKWISE ) - { - CV_SWAP( tl_stack, tr_stack, t_stack ); - CV_SWAP( tl_count, tr_count, t_count ); - } - - if( hulltype == CV_SEQ_ELTYPE_PPOINT ) - { - for( i = 0; i < tl_count - 1; i++ ) - CV_WRITE_SEQ_ELEM( pointer[tl_stack[i]], writer ); - - for( i = tr_count - 1; i > 0; i-- ) - CV_WRITE_SEQ_ELEM( pointer[tr_stack[i]], writer ); - } - else if( hulltype == CV_SEQ_ELTYPE_INDEX ) - { - icvCalcAndWritePtIndices( pointer, tl_stack, 0, tl_count-1, ptseq, &writer ); - icvCalcAndWritePtIndices( pointer, tr_stack, tr_count-1, 0, ptseq, &writer ); - } - else - { - for( i = 0; i < tl_count - 1; i++ ) - CV_WRITE_SEQ_ELEM( pointer[tl_stack[i]][0], writer ); - - for( i = tr_count - 1; i > 0; i-- ) - CV_WRITE_SEQ_ELEM( pointer[tr_stack[i]][0], writer ); - } - stop_idx = tr_count > 2 ? tr_stack[1] : tl_count > 2 ? tl_stack[tl_count - 2] : -1; - } - - /* lower half */ - { - int *bl_stack = stack; - int bl_count = sklansky( pointer, 0, miny_ind, bl_stack, 1, -1 ); - int *br_stack = stack + bl_count; - int br_count = sklansky( pointer, ptseq->total - 1, miny_ind, br_stack, 1, 1 ); - - if( orientation != CV_COUNTER_CLOCKWISE ) - { - CV_SWAP( bl_stack, br_stack, t_stack ); - CV_SWAP( bl_count, br_count, t_count ); - } - - if( stop_idx >= 0 ) - { - int check_idx = bl_count > 2 ? bl_stack[1] : - bl_count + br_count > 2 ? br_stack[2-bl_count] : -1; - if( check_idx == stop_idx || (check_idx >= 0 && - pointer[check_idx]->x == pointer[stop_idx]->x && - pointer[check_idx]->y == pointer[stop_idx]->y) ) - { - /* if all the points lie on the same line, then - the bottom part of the convex hull is the mirrored top part - (except the exteme points).*/ - bl_count = MIN( bl_count, 2 ); - br_count = MIN( br_count, 2 ); - } - } - - if( hulltype == CV_SEQ_ELTYPE_PPOINT ) - { - for( i = 0; i < bl_count - 1; i++ ) - CV_WRITE_SEQ_ELEM( pointer[bl_stack[i]], writer ); - - for( i = br_count - 1; i > 0; i-- ) - CV_WRITE_SEQ_ELEM( pointer[br_stack[i]], writer ); - } - else if( hulltype == CV_SEQ_ELTYPE_INDEX ) - { - icvCalcAndWritePtIndices( pointer, bl_stack, 0, bl_count-1, ptseq, &writer ); - icvCalcAndWritePtIndices( pointer, br_stack, br_count-1, 0, ptseq, &writer ); - } - else - { - for( i = 0; i < bl_count - 1; i++ ) - CV_WRITE_SEQ_ELEM( pointer[bl_stack[i]][0], writer ); - - for( i = br_count - 1; i > 0; i-- ) - CV_WRITE_SEQ_ELEM( pointer[br_stack[i]][0], writer ); - } - } - -finish_hull: - cvEndWriteSeq( &writer ); - - if( mat ) - { - if( mat->rows > mat->cols ) - mat->rows = hullseq->total; - else - mat->cols = hullseq->total; - } - else - { - hull.s = hullseq; - hull.c->rect = cvBoundingRect( ptseq, - ptseq->header_size < (int)sizeof(CvContour) || - &ptseq->flags == &contour_header.flags ); - - /*if( ptseq != (CvSeq*)&contour_header ) - hullseq->v_prev = ptseq;*/ - } - - return hull.s; -} - - -/* contour must be a simple polygon */ -/* it must have more than 3 points */ -CV_IMPL CvSeq* cvConvexityDefects( const CvArr* array, - const CvArr* hullarray, - CvMemStorage* storage ) -{ - CvSeq* defects = 0; - - int i, index; - CvPoint* hull_cur; - - /* is orientation of hull different from contour one */ - int rev_orientation; - - CvContour contour_header; - union { CvContour c; CvSeq s; } hull_header; - CvSeqBlock block, hullblock; - CvSeq *ptseq = (CvSeq*)array, *hull = (CvSeq*)hullarray; - - CvSeqReader hull_reader; - CvSeqReader ptseq_reader; - CvSeqWriter writer; - int is_index; - - if( CV_IS_SEQ( ptseq )) - { - if( !CV_IS_SEQ_POINT_SET( ptseq )) - CV_Error( CV_StsUnsupportedFormat, - "Input sequence is not a sequence of points" ); - if( !storage ) - storage = ptseq->storage; - } - else - { - ptseq = cvPointSeqFromMat( CV_SEQ_KIND_GENERIC, array, &contour_header, &block ); - } - - if( CV_SEQ_ELTYPE( ptseq ) != CV_32SC2 ) - CV_Error( CV_StsUnsupportedFormat, "Floating-point coordinates are not supported here" ); - - if( CV_IS_SEQ( hull )) - { - int hulltype = CV_SEQ_ELTYPE( hull ); - if( hulltype != CV_SEQ_ELTYPE_PPOINT && hulltype != CV_SEQ_ELTYPE_INDEX ) - CV_Error( CV_StsUnsupportedFormat, - "Convex hull must represented as a sequence " - "of indices or sequence of pointers" ); - if( !storage ) - storage = hull->storage; - } - else - { - CvMat* mat = (CvMat*)hull; - - if( !CV_IS_MAT( hull )) - CV_Error(CV_StsBadArg, "Convex hull is neither sequence nor matrix"); - - if( (mat->cols != 1 && mat->rows != 1) || - !CV_IS_MAT_CONT(mat->type) || CV_MAT_TYPE(mat->type) != CV_32SC1 ) - CV_Error( CV_StsBadArg, - "The matrix should be 1-dimensional and continuous array of int's" ); - - if( mat->cols + mat->rows - 1 > ptseq->total ) - CV_Error( CV_StsBadSize, "Convex hull is larger than the point sequence" ); - - hull = cvMakeSeqHeaderForArray( - CV_SEQ_KIND_CURVE|CV_MAT_TYPE(mat->type)|CV_SEQ_FLAG_CLOSED, - sizeof(CvContour), CV_ELEM_SIZE(mat->type), mat->data.ptr, - mat->cols + mat->rows - 1, &hull_header.s, &hullblock ); - } - - is_index = CV_SEQ_ELTYPE(hull) == CV_SEQ_ELTYPE_INDEX; - - if( !storage ) - CV_Error( CV_StsNullPtr, "NULL storage pointer" ); - - defects = cvCreateSeq( CV_SEQ_KIND_GENERIC, sizeof(CvSeq), sizeof(CvConvexityDefect), storage ); - - if( ptseq->total < 4 || hull->total < 3) - { - //CV_ERROR( CV_StsBadSize, - // "point seq size must be >= 4, convex hull size must be >= 3" ); - return defects; - } - - /* recognize co-orientation of ptseq and its hull */ - { - int sign = 0; - int index1, index2, index3; - - if( !is_index ) - { - CvPoint* pos = *CV_SEQ_ELEM( hull, CvPoint*, 0 ); - index1 = cvSeqElemIdx( ptseq, pos ); - - pos = *CV_SEQ_ELEM( hull, CvPoint*, 1 ); - index2 = cvSeqElemIdx( ptseq, pos ); - - pos = *CV_SEQ_ELEM( hull, CvPoint*, 2 ); - index3 = cvSeqElemIdx( ptseq, pos ); - } - else - { - index1 = *CV_SEQ_ELEM( hull, int, 0 ); - index2 = *CV_SEQ_ELEM( hull, int, 1 ); - index3 = *CV_SEQ_ELEM( hull, int, 2 ); - } - - sign += (index2 > index1) ? 1 : 0; - sign += (index3 > index2) ? 1 : 0; - sign += (index1 > index3) ? 1 : 0; - - rev_orientation = (sign == 2) ? 0 : 1; - } - - cvStartReadSeq( ptseq, &ptseq_reader, 0 ); - cvStartReadSeq( hull, &hull_reader, rev_orientation ); - - if( !is_index ) - { - hull_cur = *(CvPoint**)hull_reader.prev_elem; - index = cvSeqElemIdx( ptseq, (char*)hull_cur, 0 ); - } - else - { - index = *(int*)hull_reader.prev_elem; - hull_cur = CV_GET_SEQ_ELEM( CvPoint, ptseq, index ); - } - cvSetSeqReaderPos( &ptseq_reader, index ); - cvStartAppendToSeq( defects, &writer ); - - /* cycle through ptseq and hull with computing defects */ - for( i = 0; i < hull->total; i++ ) - { - CvConvexityDefect defect; - int is_defect = 0; - double dx0, dy0; - double depth = 0, scale; - CvPoint* hull_next; - - if( !is_index ) - hull_next = *(CvPoint**)hull_reader.ptr; - else - { - int t = *(int*)hull_reader.ptr; - hull_next = CV_GET_SEQ_ELEM( CvPoint, ptseq, t ); - } - - dx0 = (double)hull_next->x - (double)hull_cur->x; - dy0 = (double)hull_next->y - (double)hull_cur->y; - assert( dx0 != 0 || dy0 != 0 ); - scale = 1./sqrt(dx0*dx0 + dy0*dy0); - - defect.start = hull_cur; - defect.end = hull_next; - - for(;;) - { - /* go through ptseq to achieve next hull point */ - CV_NEXT_SEQ_ELEM( sizeof(CvPoint), ptseq_reader ); - - if( ptseq_reader.ptr == (schar*)hull_next ) - break; - else - { - CvPoint* cur = (CvPoint*)ptseq_reader.ptr; - - /* compute distance from current point to hull edge */ - double dx = (double)cur->x - (double)hull_cur->x; - double dy = (double)cur->y - (double)hull_cur->y; - - /* compute depth */ - double dist = fabs(-dy0*dx + dx0*dy) * scale; - - if( dist > depth ) - { - depth = dist; - defect.depth_point = cur; - defect.depth = (float)depth; - is_defect = 1; - } - } - } - if( is_defect ) - { - CV_WRITE_SEQ_ELEM( defect, writer ); - } - - hull_cur = hull_next; - if( rev_orientation ) - { - CV_PREV_SEQ_ELEM( hull->elem_size, hull_reader ); - } - else - { - CV_NEXT_SEQ_ELEM( hull->elem_size, hull_reader ); - } - } - - return cvEndWriteSeq( &writer ); -} - - -CV_IMPL int -cvCheckContourConvexity( const CvArr* array ) -{ - int flag = -1; - - int i; - int orientation = 0; - CvSeqReader reader; - CvContour contour_header; - CvSeqBlock block; - CvSeq* contour = (CvSeq*)array; - - if( CV_IS_SEQ(contour) ) - { - if( !CV_IS_SEQ_POINT_SET(contour)) - CV_Error( CV_StsUnsupportedFormat, - "Input sequence must be polygon (closed 2d curve)" ); - } - else - { - contour = cvPointSeqFromMat(CV_SEQ_KIND_CURVE|CV_SEQ_FLAG_CLOSED, array, &contour_header, &block ); - } - - if( contour->total == 0 ) - return -1; - - cvStartReadSeq( contour, &reader, 0 ); - flag = 1; - - if( CV_SEQ_ELTYPE( contour ) == CV_32SC2 ) - { - CvPoint *prev_pt = (CvPoint*)reader.prev_elem; - CvPoint *cur_pt = (CvPoint*)reader.ptr; - - int dx0 = cur_pt->x - prev_pt->x; - int dy0 = cur_pt->y - prev_pt->y; - - for( i = 0; i < contour->total; i++ ) - { - int dxdy0, dydx0; - int dx, dy; - - /*int orient; */ - CV_NEXT_SEQ_ELEM( sizeof(CvPoint), reader ); - prev_pt = cur_pt; - cur_pt = (CvPoint *) reader.ptr; - - dx = cur_pt->x - prev_pt->x; - dy = cur_pt->y - prev_pt->y; - dxdy0 = dx * dy0; - dydx0 = dy * dx0; - - /* find orientation */ - /*orient = -dy0 * dx + dx0 * dy; - orientation |= (orient > 0) ? 1 : 2; - */ - orientation |= (dydx0 > dxdy0) ? 1 : ((dydx0 < dxdy0) ? 2 : 3); - - if( orientation == 3 ) - { - flag = 0; - break; - } - - dx0 = dx; - dy0 = dy; - } - } - else - { - CV_Assert( CV_SEQ_ELTYPE(contour) == CV_32FC2 ); - - CvPoint2D32f *prev_pt = (CvPoint2D32f*)reader.prev_elem; - CvPoint2D32f *cur_pt = (CvPoint2D32f*)reader.ptr; - - float dx0 = cur_pt->x - prev_pt->x; - float dy0 = cur_pt->y - prev_pt->y; - - for( i = 0; i < contour->total; i++ ) - { - float dxdy0, dydx0; - float dx, dy; - - /*int orient; */ - CV_NEXT_SEQ_ELEM( sizeof(CvPoint2D32f), reader ); - prev_pt = cur_pt; - cur_pt = (CvPoint2D32f*) reader.ptr; - - dx = cur_pt->x - prev_pt->x; - dy = cur_pt->y - prev_pt->y; - dxdy0 = dx * dy0; - dydx0 = dy * dx0; - - /* find orientation */ - /*orient = -dy0 * dx + dx0 * dy; - orientation |= (orient > 0) ? 1 : 2; - */ - orientation |= (dydx0 > dxdy0) ? 1 : ((dydx0 < dxdy0) ? 2 : 3); - - if( orientation == 3 ) - { - flag = 0; - break; - } - - dx0 = dx; - dy0 = dy; - } - } - - return flag; -} - - -/* End of file. */ diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp deleted file mode 100644 index fa3021a..0000000 --- a/modules/imgproc/src/corner.cpp +++ /dev/null @@ -1,422 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - - -namespace cv -{ - -static void -calcMinEigenVal( const Mat& _cov, Mat& _dst ) -{ - int i, j; - Size size = _cov.size(); -#if CV_SSE - volatile bool simd = checkHardwareSupport(CV_CPU_SSE); -#endif - - if( _cov.isContinuous() && _dst.isContinuous() ) - { - size.width *= size.height; - size.height = 1; - } - - for( i = 0; i < size.height; i++ ) - { - const float* cov = (const float*)(_cov.data + _cov.step*i); - float* dst = (float*)(_dst.data + _dst.step*i); - j = 0; - #if CV_SSE - if( simd ) - { - __m128 half = _mm_set1_ps(0.5f); - for( ; j <= size.width - 5; j += 4 ) - { - __m128 t0 = _mm_loadu_ps(cov + j*3); // a0 b0 c0 x - __m128 t1 = _mm_loadu_ps(cov + j*3 + 3); // a1 b1 c1 x - __m128 t2 = _mm_loadu_ps(cov + j*3 + 6); // a2 b2 c2 x - __m128 t3 = _mm_loadu_ps(cov + j*3 + 9); // a3 b3 c3 x - __m128 a, b, c, t; - t = _mm_unpacklo_ps(t0, t1); // a0 a1 b0 b1 - c = _mm_unpackhi_ps(t0, t1); // c0 c1 x x - b = _mm_unpacklo_ps(t2, t3); // a2 a3 b2 b3 - c = _mm_movelh_ps(c, _mm_unpackhi_ps(t2, t3)); // c0 c1 c2 c3 - a = _mm_movelh_ps(t, b); - b = _mm_movehl_ps(b, t); - a = _mm_mul_ps(a, half); - c = _mm_mul_ps(c, half); - t = _mm_sub_ps(a, c); - t = _mm_add_ps(_mm_mul_ps(t, t), _mm_mul_ps(b,b)); - a = _mm_sub_ps(_mm_add_ps(a, c), _mm_sqrt_ps(t)); - _mm_storeu_ps(dst + j, a); - } - } - #endif - for( ; j < size.width; j++ ) - { - float a = cov[j*3]*0.5f; - float b = cov[j*3+1]; - float c = cov[j*3+2]*0.5f; - dst[j] = (float)((a + c) - std::sqrt((a - c)*(a - c) + b*b)); - } - } -} - - -static void -calcHarris( const Mat& _cov, Mat& _dst, double k ) -{ - int i, j; - Size size = _cov.size(); -#if CV_SSE - volatile bool simd = checkHardwareSupport(CV_CPU_SSE); -#endif - - if( _cov.isContinuous() && _dst.isContinuous() ) - { - size.width *= size.height; - size.height = 1; - } - - for( i = 0; i < size.height; i++ ) - { - const float* cov = (const float*)(_cov.data + _cov.step*i); - float* dst = (float*)(_dst.data + _dst.step*i); - j = 0; - - #if CV_SSE - if( simd ) - { - __m128 k4 = _mm_set1_ps((float)k); - for( ; j <= size.width - 5; j += 4 ) - { - __m128 t0 = _mm_loadu_ps(cov + j*3); // a0 b0 c0 x - __m128 t1 = _mm_loadu_ps(cov + j*3 + 3); // a1 b1 c1 x - __m128 t2 = _mm_loadu_ps(cov + j*3 + 6); // a2 b2 c2 x - __m128 t3 = _mm_loadu_ps(cov + j*3 + 9); // a3 b3 c3 x - __m128 a, b, c, t; - t = _mm_unpacklo_ps(t0, t1); // a0 a1 b0 b1 - c = _mm_unpackhi_ps(t0, t1); // c0 c1 x x - b = _mm_unpacklo_ps(t2, t3); // a2 a3 b2 b3 - c = _mm_movelh_ps(c, _mm_unpackhi_ps(t2, t3)); // c0 c1 c2 c3 - a = _mm_movelh_ps(t, b); - b = _mm_movehl_ps(b, t); - t = _mm_add_ps(a, c); - a = _mm_sub_ps(_mm_mul_ps(a, c), _mm_mul_ps(b, b)); - t = _mm_mul_ps(_mm_mul_ps(k4, t), t); - a = _mm_sub_ps(a, t); - _mm_storeu_ps(dst + j, a); - } - } - #endif - - for( ; j < size.width; j++ ) - { - float a = cov[j*3]; - float b = cov[j*3+1]; - float c = cov[j*3+2]; - dst[j] = (float)(a*c - b*b - k*(a + c)*(a + c)); - } - } -} - - -void eigen2x2( const float* cov, float* dst, int n ) -{ - for( int j = 0; j < n; j++ ) - { - double a = cov[j*3]; - double b = cov[j*3+1]; - double c = cov[j*3+2]; - - double u = (a + c)*0.5; - double v = std::sqrt((a - c)*(a - c)*0.25 + b*b); - double l1 = u + v; - double l2 = u - v; - - double x = b; - double y = l1 - a; - double e = fabs(x); - - if( e + fabs(y) < 1e-4 ) - { - y = b; - x = l1 - c; - e = fabs(x); - if( e + fabs(y) < 1e-4 ) - { - e = 1./(e + fabs(y) + FLT_EPSILON); - x *= e, y *= e; - } - } - - double d = 1./std::sqrt(x*x + y*y + DBL_EPSILON); - dst[6*j] = (float)l1; - dst[6*j + 2] = (float)(x*d); - dst[6*j + 3] = (float)(y*d); - - x = b; - y = l2 - a; - e = fabs(x); - - if( e + fabs(y) < 1e-4 ) - { - y = b; - x = l2 - c; - e = fabs(x); - if( e + fabs(y) < 1e-4 ) - { - e = 1./(e + fabs(y) + FLT_EPSILON); - x *= e, y *= e; - } - } - - d = 1./std::sqrt(x*x + y*y + DBL_EPSILON); - dst[6*j + 1] = (float)l2; - dst[6*j + 4] = (float)(x*d); - dst[6*j + 5] = (float)(y*d); - } -} - -static void -calcEigenValsVecs( const Mat& _cov, Mat& _dst ) -{ - Size size = _cov.size(); - if( _cov.isContinuous() && _dst.isContinuous() ) - { - size.width *= size.height; - size.height = 1; - } - - for( int i = 0; i < size.height; i++ ) - { - const float* cov = (const float*)(_cov.data + _cov.step*i); - float* dst = (float*)(_dst.data + _dst.step*i); - - eigen2x2(cov, dst, size.width); - } -} - - -enum { MINEIGENVAL=0, HARRIS=1, EIGENVALSVECS=2 }; - - -static void -cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size, - int aperture_size, int op_type, double k=0., - int borderType=BORDER_DEFAULT ) -{ -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::cornerEigenValsVecs(src, eigenv, block_size, aperture_size, op_type, k, borderType)) - return; -#endif - - int depth = src.depth(); - double scale = (double)(1 << ((aperture_size > 0 ? aperture_size : 3) - 1)) * block_size; - if( aperture_size < 0 ) - scale *= 2.; - if( depth == CV_8U ) - scale *= 255.; - scale = 1./scale; - - CV_Assert( src.type() == CV_8UC1 || src.type() == CV_32FC1 ); - - Mat Dx, Dy; - if( aperture_size > 0 ) - { - Sobel( src, Dx, CV_32F, 1, 0, aperture_size, scale, 0, borderType ); - Sobel( src, Dy, CV_32F, 0, 1, aperture_size, scale, 0, borderType ); - } - else - { - Scharr( src, Dx, CV_32F, 1, 0, scale, 0, borderType ); - Scharr( src, Dy, CV_32F, 0, 1, scale, 0, borderType ); - } - - Size size = src.size(); - Mat cov( size, CV_32FC3 ); - int i, j; - - for( i = 0; i < size.height; i++ ) - { - float* cov_data = (float*)(cov.data + i*cov.step); - const float* dxdata = (const float*)(Dx.data + i*Dx.step); - const float* dydata = (const float*)(Dy.data + i*Dy.step); - - for( j = 0; j < size.width; j++ ) - { - float dx = dxdata[j]; - float dy = dydata[j]; - - cov_data[j*3] = dx*dx; - cov_data[j*3+1] = dx*dy; - cov_data[j*3+2] = dy*dy; - } - } - - boxFilter(cov, cov, cov.depth(), Size(block_size, block_size), - Point(-1,-1), false, borderType ); - - if( op_type == MINEIGENVAL ) - calcMinEigenVal( cov, eigenv ); - else if( op_type == HARRIS ) - calcHarris( cov, eigenv, k ); - else if( op_type == EIGENVALSVECS ) - calcEigenValsVecs( cov, eigenv ); -} - -} - -void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, int ksize, int borderType ) -{ - Mat src = _src.getMat(); - _dst.create( src.size(), CV_32F ); - Mat dst = _dst.getMat(); - cornerEigenValsVecs( src, dst, blockSize, ksize, MINEIGENVAL, 0, borderType ); -} - - -void cv::cornerHarris( InputArray _src, OutputArray _dst, int blockSize, int ksize, double k, int borderType ) -{ - Mat src = _src.getMat(); - _dst.create( src.size(), CV_32F ); - Mat dst = _dst.getMat(); - cornerEigenValsVecs( src, dst, blockSize, ksize, HARRIS, k, borderType ); -} - - -void cv::cornerEigenValsAndVecs( InputArray _src, OutputArray _dst, int blockSize, int ksize, int borderType ) -{ - Mat src = _src.getMat(); - Size dsz = _dst.size(); - int dtype = _dst.type(); - - if( dsz.height != src.rows || dsz.width*CV_MAT_CN(dtype) != src.cols*6 || CV_MAT_DEPTH(dtype) != CV_32F ) - _dst.create( src.size(), CV_32FC(6) ); - Mat dst = _dst.getMat(); - cornerEigenValsVecs( src, dst, blockSize, ksize, EIGENVALSVECS, 0, borderType ); -} - - -void cv::preCornerDetect( InputArray _src, OutputArray _dst, int ksize, int borderType ) -{ - Mat Dx, Dy, D2x, D2y, Dxy, src = _src.getMat(); - - CV_Assert( src.type() == CV_8UC1 || src.type() == CV_32FC1 ); - _dst.create( src.size(), CV_32F ); - Mat dst = _dst.getMat(); - - Sobel( src, Dx, CV_32F, 1, 0, ksize, 1, 0, borderType ); - Sobel( src, Dy, CV_32F, 0, 1, ksize, 1, 0, borderType ); - Sobel( src, D2x, CV_32F, 2, 0, ksize, 1, 0, borderType ); - Sobel( src, D2y, CV_32F, 0, 2, ksize, 1, 0, borderType ); - Sobel( src, Dxy, CV_32F, 1, 1, ksize, 1, 0, borderType ); - - double factor = 1 << (ksize - 1); - if( src.depth() == CV_8U ) - factor *= 255; - factor = 1./(factor * factor * factor); - - Size size = src.size(); - int i, j; - for( i = 0; i < size.height; i++ ) - { - float* dstdata = (float*)(dst.data + i*dst.step); - const float* dxdata = (const float*)(Dx.data + i*Dx.step); - const float* dydata = (const float*)(Dy.data + i*Dy.step); - const float* d2xdata = (const float*)(D2x.data + i*D2x.step); - const float* d2ydata = (const float*)(D2y.data + i*D2y.step); - const float* dxydata = (const float*)(Dxy.data + i*Dxy.step); - - for( j = 0; j < size.width; j++ ) - { - float dx = dxdata[j]; - float dy = dydata[j]; - dstdata[j] = (float)(factor*(dx*dx*d2ydata[j] + dy*dy*d2xdata[j] - 2*dx*dy*dxydata[j])); - } - } -} - -CV_IMPL void -cvCornerMinEigenVal( const CvArr* srcarr, CvArr* dstarr, - int block_size, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size() == dst.size() && dst.type() == CV_32FC1 ); - cv::cornerMinEigenVal( src, dst, block_size, aperture_size, cv::BORDER_REPLICATE ); -} - -CV_IMPL void -cvCornerHarris( const CvArr* srcarr, CvArr* dstarr, - int block_size, int aperture_size, double k ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size() == dst.size() && dst.type() == CV_32FC1 ); - cv::cornerHarris( src, dst, block_size, aperture_size, k, cv::BORDER_REPLICATE ); -} - - -CV_IMPL void -cvCornerEigenValsAndVecs( const void* srcarr, void* dstarr, - int block_size, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.rows == dst.rows && src.cols*6 == dst.cols*dst.channels() && dst.depth() == CV_32F ); - cv::cornerEigenValsAndVecs( src, dst, block_size, aperture_size, cv::BORDER_REPLICATE ); -} - - -CV_IMPL void -cvPreCornerDetect( const void* srcarr, void* dstarr, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size() == dst.size() && dst.type() == CV_32FC1 ); - cv::preCornerDetect( src, dst, aperture_size, cv::BORDER_REPLICATE ); -} - -/* End of file */ diff --git a/modules/imgproc/src/cornersubpix.cpp b/modules/imgproc/src/cornersubpix.cpp deleted file mode 100644 index 1f55fa7..0000000 --- a/modules/imgproc/src/cornersubpix.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -CV_IMPL void -cvFindCornerSubPix( const void* srcarr, CvPoint2D32f* corners, - int count, CvSize win, CvSize zeroZone, - CvTermCriteria criteria ) -{ - cv::AutoBuffer buffer; - - const int MAX_ITERS = 100; - const float drv[] = { -1.f, 0.f, 1.f }; - float *maskX; - float *maskY; - float *mask; - float *src_buffer; - float *gx_buffer; - float *gy_buffer; - int win_w = win.width * 2 + 1, win_h = win.height * 2 + 1; - int win_rect_size = (win_w + 4) * (win_h + 4); - double coeff; - CvSize size, src_buf_size; - int i, j, k, pt_i; - int max_iters = 10; - double eps = 0; - - CvMat stub, *src = (CvMat*)srcarr; - src = cvGetMat( srcarr, &stub ); - - if( CV_MAT_TYPE( src->type ) != CV_8UC1 ) - CV_Error( CV_StsUnsupportedFormat, "The source image must be 8-bit single-channel (CV_8UC1)" ); - - if( !corners ) - CV_Error( CV_StsNullPtr, "" ); - - if( count < 0 ) - CV_Error( CV_StsBadSize, "" ); - - if( count == 0 ) - return; - - if( win.width <= 0 || win.height <= 0 ) - CV_Error( CV_StsBadSize, "" ); - - size = cvGetMatSize( src ); - - if( size.width < win_w + 4 || size.height < win_h + 4 ) - CV_Error( CV_StsBadSize, "" ); - - /* initialize variables, controlling loop termination */ - switch( criteria.type ) - { - case CV_TERMCRIT_ITER: - eps = 0.f; - max_iters = criteria.max_iter; - break; - case CV_TERMCRIT_EPS: - eps = criteria.epsilon; - max_iters = MAX_ITERS; - break; - case CV_TERMCRIT_ITER | CV_TERMCRIT_EPS: - eps = criteria.epsilon; - max_iters = criteria.max_iter; - break; - default: - assert( 0 ); - CV_Error( CV_StsBadFlag, "" ); - } - - eps = MAX( eps, 0 ); - eps *= eps; /* use square of error in comparsion operations. */ - - max_iters = MAX( max_iters, 1 ); - max_iters = MIN( max_iters, MAX_ITERS ); - - buffer.allocate( win_rect_size * 5 + win_w + win_h + 32 ); - - /* assign pointers */ - maskX = buffer; - maskY = maskX + win_w + 4; - mask = maskY + win_h + 4; - src_buffer = mask + win_w * win_h; - gx_buffer = src_buffer + win_rect_size; - gy_buffer = gx_buffer + win_rect_size; - - coeff = 1. / (win.width * win.width); - - /* calculate mask */ - for( i = -win.width, k = 0; i <= win.width; i++, k++ ) - { - maskX[k] = (float)exp( -i * i * coeff ); - } - - if( win.width == win.height ) - { - maskY = maskX; - } - else - { - coeff = 1. / (win.height * win.height); - for( i = -win.height, k = 0; i <= win.height; i++, k++ ) - { - maskY[k] = (float) exp( -i * i * coeff ); - } - } - - for( i = 0; i < win_h; i++ ) - { - for( j = 0; j < win_w; j++ ) - { - mask[i * win_w + j] = maskX[j] * maskY[i]; - } - } - - - /* make zero_zone */ - if( zeroZone.width >= 0 && zeroZone.height >= 0 && - zeroZone.width * 2 + 1 < win_w && zeroZone.height * 2 + 1 < win_h ) - { - for( i = win.height - zeroZone.height; i <= win.height + zeroZone.height; i++ ) - { - for( j = win.width - zeroZone.width; j <= win.width + zeroZone.width; j++ ) - { - mask[i * win_w + j] = 0; - } - } - } - - /* set sizes of image rectangles, used in convolutions */ - src_buf_size.width = win_w + 2; - src_buf_size.height = win_h + 2; - - /* do optimization loop for all the points */ - for( pt_i = 0; pt_i < count; pt_i++ ) - { - CvPoint2D32f cT = corners[pt_i], cI = cT; - int iter = 0; - double err; - - do - { - CvPoint2D32f cI2; - double a, b, c, bb1, bb2; - - IPPI_CALL( icvGetRectSubPix_8u32f_C1R( (uchar*)src->data.ptr, src->step, size, - src_buffer, (win_w + 2) * sizeof( src_buffer[0] ), - cvSize( win_w + 2, win_h + 2 ), cI )); - - /* calc derivatives */ - icvSepConvSmall3_32f( src_buffer+src_buf_size.width, src_buf_size.width * sizeof(src_buffer[0]), - gx_buffer, win_w * sizeof(gx_buffer[0]), - src_buf_size, drv, NULL, NULL ); - icvSepConvSmall3_32f( src_buffer+1, src_buf_size.width * sizeof(src_buffer[0]), - gy_buffer, win_w * sizeof(gy_buffer[0]), - src_buf_size, NULL, drv, NULL ); - - a = b = c = bb1 = bb2 = 0; - - /* process gradient */ - for( i = 0, k = 0; i < win_h; i++ ) - { - double py = i - win.height; - - for( j = 0; j < win_w; j++, k++ ) - { - double m = mask[k]; - double tgx = gx_buffer[k]; - double tgy = gy_buffer[k]; - double gxx = tgx * tgx * m; - double gxy = tgx * tgy * m; - double gyy = tgy * tgy * m; - double px = j - win.width; - - a += gxx; - b += gxy; - c += gyy; - - bb1 += gxx * px + gxy * py; - bb2 += gxy * px + gyy * py; - } - } - - double det=a*c-b*b; - if( fabs( det ) > DBL_EPSILON*DBL_EPSILON ) - { - // 2x2 matrix inversion - double scale=1.0/det; - cI2.x = (float)(cI.x + c*scale*bb1 - b*scale*bb2); - cI2.y = (float)(cI.y - b*scale*bb1 + a*scale*bb2); - } - else - { - cI2 = cI; - } - - err = (cI2.x - cI.x) * (cI2.x - cI.x) + (cI2.y - cI.y) * (cI2.y - cI.y); - cI = cI2; - } - while( ++iter < max_iters && err > eps ); - - /* if new point is too far from initial, it means poor convergence. - leave initial point as the result */ - if( fabs( cI.x - cT.x ) > win.width || fabs( cI.y - cT.y ) > win.height ) - { - cI = cT; - } - - corners[pt_i] = cI; /* store result */ - } -} - -void cv::cornerSubPix( InputArray _image, InputOutputArray _corners, - Size winSize, Size zeroZone, - TermCriteria criteria ) -{ - Mat corners = _corners.getMat(); - int ncorners = corners.checkVector(2); - CV_Assert( ncorners >= 0 && corners.depth() == CV_32F ); - Mat image = _image.getMat(); - CvMat c_image = image; - - cvFindCornerSubPix( &c_image, (CvPoint2D32f*)corners.data, ncorners, - winSize, zeroZone, criteria ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/deriv.cpp b/modules/imgproc/src/deriv.cpp deleted file mode 100644 index ea91c07..0000000 --- a/modules/imgproc/src/deriv.cpp +++ /dev/null @@ -1,670 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -static IppStatus sts = ippInit(); -#endif -/****************************************************************************************/ - -/* lightweight convolution with 3x3 kernel */ -void icvSepConvSmall3_32f( float* src, int src_step, float* dst, int dst_step, - CvSize src_size, const float* kx, const float* ky, float* buffer ) -{ - int dst_width, buffer_step = 0; - int x, y; - bool fast_kx = true, fast_ky = true; - - assert( src && dst && src_size.width > 2 && src_size.height > 2 && - (src_step & 3) == 0 && (dst_step & 3) == 0 && - (kx || ky) && (buffer || !kx || !ky)); - - src_step /= sizeof(src[0]); - dst_step /= sizeof(dst[0]); - - dst_width = src_size.width - 2; - - if( !kx ) - { - /* set vars, so that vertical convolution - will write results into destination ROI and - horizontal convolution won't run */ - src_size.width = dst_width; - buffer_step = dst_step; - buffer = dst; - dst_width = 0; - } - else - fast_kx = kx[1] == 0.f && kx[0] == -kx[2] && kx[0] == -1.f; - - assert( src_step >= src_size.width && dst_step >= dst_width ); - - src_size.height -= 2; - if( !ky ) - { - /* set vars, so that vertical convolution won't run and - horizontal convolution will write results into destination ROI */ - src_size.height += 2; - buffer_step = src_step; - buffer = src; - src_size.width = 0; - } - else - fast_ky = ky[1] == 0.f && ky[0] == -ky[2] && ky[0] == -1.f; - - for( y = 0; y < src_size.height; y++, src += src_step, - dst += dst_step, - buffer += buffer_step ) - { - float* src2 = src + src_step; - float* src3 = src + src_step*2; - if( fast_ky ) - for( x = 0; x < src_size.width; x++ ) - { - buffer[x] = (float)(src3[x] - src[x]); - } - else - for( x = 0; x < src_size.width; x++ ) - { - buffer[x] = (float)(ky[0]*src[x] + ky[1]*src2[x] + ky[2]*src3[x]); - } - - if( fast_kx ) - for( x = 0; x < dst_width; x++ ) - { - dst[x] = (float)(buffer[x+2] - buffer[x]); - } - else - for( x = 0; x < dst_width; x++ ) - { - dst[x] = (float)(kx[0]*buffer[x] + kx[1]*buffer[x+1] + kx[2]*buffer[x+2]); - } - } -} - - -/****************************************************************************************\ - Sobel & Scharr Derivative Filters -\****************************************************************************************/ - -namespace cv -{ - -static void getScharrKernels( OutputArray _kx, OutputArray _ky, - int dx, int dy, bool normalize, int ktype ) -{ - const int ksize = 3; - - CV_Assert( ktype == CV_32F || ktype == CV_64F ); - _kx.create(ksize, 1, ktype, -1, true); - _ky.create(ksize, 1, ktype, -1, true); - Mat kx = _kx.getMat(); - Mat ky = _ky.getMat(); - - CV_Assert( dx >= 0 && dy >= 0 && dx+dy == 1 ); - - for( int k = 0; k < 2; k++ ) - { - Mat* kernel = k == 0 ? &kx : &ky; - int order = k == 0 ? dx : dy; - int kerI[3]; - - if( order == 0 ) - kerI[0] = 3, kerI[1] = 10, kerI[2] = 3; - else if( order == 1 ) - kerI[0] = -1, kerI[1] = 0, kerI[2] = 1; - - Mat temp(kernel->rows, kernel->cols, CV_32S, &kerI[0]); - double scale = !normalize || order == 1 ? 1. : 1./32; - temp.convertTo(*kernel, ktype, scale); - } -} - - -static void getSobelKernels( OutputArray _kx, OutputArray _ky, - int dx, int dy, int _ksize, bool normalize, int ktype ) -{ - int i, j, ksizeX = _ksize, ksizeY = _ksize; - if( ksizeX == 1 && dx > 0 ) - ksizeX = 3; - if( ksizeY == 1 && dy > 0 ) - ksizeY = 3; - - CV_Assert( ktype == CV_32F || ktype == CV_64F ); - - _kx.create(ksizeX, 1, ktype, -1, true); - _ky.create(ksizeY, 1, ktype, -1, true); - Mat kx = _kx.getMat(); - Mat ky = _ky.getMat(); - - if( _ksize % 2 == 0 || _ksize > 31 ) - CV_Error( CV_StsOutOfRange, "The kernel size must be odd and not larger than 31" ); - vector kerI(std::max(ksizeX, ksizeY) + 1); - - CV_Assert( dx >= 0 && dy >= 0 && dx+dy > 0 ); - - for( int k = 0; k < 2; k++ ) - { - Mat* kernel = k == 0 ? &kx : &ky; - int order = k == 0 ? dx : dy; - int ksize = k == 0 ? ksizeX : ksizeY; - - CV_Assert( ksize > order ); - - if( ksize == 1 ) - kerI[0] = 1; - else if( ksize == 3 ) - { - if( order == 0 ) - kerI[0] = 1, kerI[1] = 2, kerI[2] = 1; - else if( order == 1 ) - kerI[0] = -1, kerI[1] = 0, kerI[2] = 1; - else - kerI[0] = 1, kerI[1] = -2, kerI[2] = 1; - } - else - { - int oldval, newval; - kerI[0] = 1; - for( i = 0; i < ksize; i++ ) - kerI[i+1] = 0; - - for( i = 0; i < ksize - order - 1; i++ ) - { - oldval = kerI[0]; - for( j = 1; j <= ksize; j++ ) - { - newval = kerI[j]+kerI[j-1]; - kerI[j-1] = oldval; - oldval = newval; - } - } - - for( i = 0; i < order; i++ ) - { - oldval = -kerI[0]; - for( j = 1; j <= ksize; j++ ) - { - newval = kerI[j-1] - kerI[j]; - kerI[j-1] = oldval; - oldval = newval; - } - } - } - - Mat temp(kernel->rows, kernel->cols, CV_32S, &kerI[0]); - double scale = !normalize ? 1. : 1./(1 << (ksize-order-1)); - temp.convertTo(*kernel, ktype, scale); - } -} - -} - -void cv::getDerivKernels( OutputArray kx, OutputArray ky, int dx, int dy, - int ksize, bool normalize, int ktype ) -{ - if( ksize <= 0 ) - getScharrKernels( kx, ky, dx, dy, normalize, ktype ); - else - getSobelKernels( kx, ky, dx, dy, ksize, normalize, ktype ); -} - - -cv::Ptr cv::createDerivFilter(int srcType, int dstType, - int dx, int dy, int ksize, int borderType ) -{ - Mat kx, ky; - getDerivKernels( kx, ky, dx, dy, ksize, false, CV_32F ); - return createSeparableLinearFilter(srcType, dstType, - kx, ky, Point(-1,-1), 0, borderType ); -} - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - -namespace cv -{ - -static bool IPPDerivScharr(const Mat& src, Mat& dst, int ddepth, int dx, int dy, double scale) -{ - int bufSize = 0; - cv::AutoBuffer buffer; - IppiSize roi = ippiSize(src.cols, src.rows); - - if( ddepth < 0 ) - ddepth = src.depth(); - - dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - - switch(src.type()) - { - case CV_8U: - { - if(scale != 1) - return false; - - switch(dst.type()) - { - case CV_16S: - { - if((dx == 1) && (dy == 0)) - { - ippiFilterScharrVertGetBufferSize_8u16s_C1R(roi,&bufSize); - buffer.allocate(bufSize); - - ippiFilterScharrVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, roi, ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - - return true; - } - - if((dx == 0) && (dy == 1)) - { - ippiFilterScharrHorizGetBufferSize_8u16s_C1R(roi,&bufSize); - buffer.allocate(bufSize); - - ippiFilterScharrHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, roi, ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - - return true; - } - } - - default: - return false; - } - } - - case CV_32F: - { - switch(dst.type()) - { - case CV_32F: - if((dx == 1) && (dy == 0)) - { - ippiFilterScharrVertGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows),&bufSize); - buffer.allocate(bufSize); - - ippiFilterScharrVertBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - /* IPP is fast, so MulC produce very little perf degradation */ - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f*)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - - if((dx == 0) && (dy == 1)) - { - ippiFilterScharrHorizGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows),&bufSize); - buffer.allocate(bufSize); - - ippiFilterScharrHorizBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - - default: - return false; - } - } - - default: - return false; - } -} - - -static bool IPPDeriv(const Mat& src, Mat& dst, int ddepth, int dx, int dy, int ksize, double scale) -{ - int bufSize = 0; - cv::AutoBuffer buffer; - - if(ksize == 3 || ksize == 5) - { - if( ddepth < 0 ) - ddepth = src.depth(); - - if(src.type() == CV_8U && dst.type() == CV_16S && scale == 1) - { - if((dx == 1) && (dy == 0)) - { - ippiFilterSobelNegVertGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelNegVertBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - return true; - } - - if((dx == 0) && (dy == 1)) - { - ippiFilterSobelHorizGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelHorizBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - - return true; - } - - if((dx == 2) && (dy == 0)) - { - ippiFilterSobelVertSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelVertSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - - return true; - } - - if((dx == 0) && (dy == 2)) - { - ippiFilterSobelHorizSecondGetBufferSize_8u16s_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelHorizSecondBorder_8u16s_C1R((const Ipp8u*)src.data, (int)src.step, - (Ipp16s*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - - return true; - } - } - - if(src.type() == CV_32F && dst.type() == CV_32F) - { - if((dx == 1) && (dy == 0)) - { - ippiFilterSobelNegVertGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), &bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelNegVertBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - - if((dx == 0) && (dy == 1)) - { - ippiFilterSobelHorizGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelHorizBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - - if((dx == 2) && (dy == 0)) - { - ippiFilterSobelVertSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelVertSecondBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - - if((dx == 0) && (dy == 2)) - { - ippiFilterSobelHorizSecondGetBufferSize_32f_C1R(ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize),&bufSize); - buffer.allocate(bufSize); - - ippiFilterSobelHorizSecondBorder_32f_C1R((const Ipp32f*)src.data, (int)src.step, - (Ipp32f*)dst.data, (int)dst.step, ippiSize(src.cols, src.rows), (IppiMaskSize)(ksize*10+ksize), - ippBorderRepl, 0, (Ipp8u*)(char*)buffer); - if(scale != 1) - ippiMulC_32f_C1IR((Ipp32f)scale, (Ipp32f *)dst.data, (int)dst.step, ippiSize(dst.cols*dst.channels(), dst.rows)); - - return true; - } - } - } - - if(ksize <= 0) - return IPPDerivScharr(src, dst, ddepth, dx, dy, scale); - - return false; -} - -} - -#endif - -void cv::Sobel( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, - int ksize, double scale, double delta, int borderType ) -{ - Mat src = _src.getMat(); - if (ddepth < 0) - ddepth = src.depth(); - _dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - Mat dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (scale == 1.0 && delta == 0) - { - if (ksize == 3 && tegra::sobel3x3(src, dst, dx, dy, borderType)) - return; - if (ksize == -1 && tegra::scharr(src, dst, dx, dy, borderType)) - return; - } -#endif - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if(dx < 3 && dy < 3 && src.channels() == 1 && borderType == 1) - { - if(IPPDeriv(src, dst, ddepth, dx, dy, ksize,scale)) - return; - } -#endif - int ktype = std::max(CV_32F, std::max(ddepth, src.depth())); - - Mat kx, ky; - getDerivKernels( kx, ky, dx, dy, ksize, false, ktype ); - if( scale != 1 ) - { - // usually the smoothing part is the slowest to compute, - // so try to scale it instead of the faster differenciating part - if( dx == 0 ) - kx *= scale; - else - ky *= scale; - } - sepFilter2D( src, dst, ddepth, kx, ky, Point(-1,-1), delta, borderType ); -} - - -void cv::Scharr( InputArray _src, OutputArray _dst, int ddepth, int dx, int dy, - double scale, double delta, int borderType ) -{ - Mat src = _src.getMat(); - if (ddepth < 0) - ddepth = src.depth(); - _dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - Mat dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (scale == 1.0 && delta == 0) - if (tegra::scharr(src, dst, dx, dy, borderType)) - return; -#endif - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if(dx < 2 && dy < 2 && src.channels() == 1 && borderType == 1) - { - if(IPPDerivScharr(src, dst, ddepth, dx, dy, scale)) - return; - } -#endif - int ktype = std::max(CV_32F, std::max(ddepth, src.depth())); - - Mat kx, ky; - getScharrKernels( kx, ky, dx, dy, false, ktype ); - if( scale != 1 ) - { - // usually the smoothing part is the slowest to compute, - // so try to scale it instead of the faster differenciating part - if( dx == 0 ) - kx *= scale; - else - ky *= scale; - } - sepFilter2D( src, dst, ddepth, kx, ky, Point(-1,-1), delta, borderType ); -} - - -void cv::Laplacian( InputArray _src, OutputArray _dst, int ddepth, int ksize, - double scale, double delta, int borderType ) -{ - Mat src = _src.getMat(); - if (ddepth < 0) - ddepth = src.depth(); - _dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - Mat dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (scale == 1.0 && delta == 0) - { - if (ksize == 1 && tegra::laplace1(src, dst, borderType)) - return; - if (ksize == 3 && tegra::laplace3(src, dst, borderType)) - return; - if (ksize == 5 && tegra::laplace5(src, dst, borderType)) - return; - } -#endif - - if( ksize == 1 || ksize == 3 ) - { - float K[2][9] = - {{0, 1, 0, 1, -4, 1, 0, 1, 0}, - {2, 0, 2, 0, -8, 0, 2, 0, 2}}; - Mat kernel(3, 3, CV_32F, K[ksize == 3]); - if( scale != 1 ) - kernel *= scale; - filter2D( src, dst, ddepth, kernel, Point(-1,-1), delta, borderType ); - } - else - { - const size_t STRIPE_SIZE = 1 << 14; - - int depth = src.depth(); - int ktype = std::max(CV_32F, std::max(ddepth, depth)); - int wdepth = depth == CV_8U && ksize <= 5 ? CV_16S : depth <= CV_32F ? CV_32F : CV_64F; - int wtype = CV_MAKETYPE(wdepth, src.channels()); - Mat kd, ks; - getSobelKernels( kd, ks, 2, 0, ksize, false, ktype ); - if( ddepth < 0 ) - ddepth = src.depth(); - int dtype = CV_MAKETYPE(ddepth, src.channels()); - - int dy0 = std::min(std::max((int)(STRIPE_SIZE/(getElemSize(src.type())*src.cols)), 1), src.rows); - Ptr fx = createSeparableLinearFilter(src.type(), - wtype, kd, ks, Point(-1,-1), 0, borderType, borderType, Scalar() ); - Ptr fy = createSeparableLinearFilter(src.type(), - wtype, ks, kd, Point(-1,-1), 0, borderType, borderType, Scalar() ); - - int y = fx->start(src), dsty = 0, dy = 0; - fy->start(src); - const uchar* sptr = src.data + y*src.step; - - Mat d2x( dy0 + kd.rows - 1, src.cols, wtype ); - Mat d2y( dy0 + kd.rows - 1, src.cols, wtype ); - - for( ; dsty < src.rows; sptr += dy0*src.step, dsty += dy ) - { - fx->proceed( sptr, (int)src.step, dy0, d2x.data, (int)d2x.step ); - dy = fy->proceed( sptr, (int)src.step, dy0, d2y.data, (int)d2y.step ); - if( dy > 0 ) - { - Mat dstripe = dst.rowRange(dsty, dsty + dy); - d2x.rows = d2y.rows = dy; // modify the headers, which should work - d2x += d2y; - d2x.convertTo( dstripe, dtype, scale, delta ); - } - } - } -} - -///////////////////////////////////////////////////////////////////////////////////////// - -CV_IMPL void -cvSobel( const void* srcarr, void* dstarr, int dx, int dy, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size() == dst.size() && src.channels() == dst.channels() ); - - cv::Sobel( src, dst, dst.depth(), dx, dy, aperture_size, 1, 0, cv::BORDER_REPLICATE ); - if( CV_IS_IMAGE(srcarr) && ((IplImage*)srcarr)->origin && dy % 2 != 0 ) - dst *= -1; -} - - -CV_IMPL void -cvLaplace( const void* srcarr, void* dstarr, int aperture_size ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( src.size() == dst.size() && src.channels() == dst.channels() ); - - cv::Laplacian( src, dst, dst.depth(), aperture_size, 1, 0, cv::BORDER_REPLICATE ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/distransform.cpp b/modules/imgproc/src/distransform.cpp deleted file mode 100644 index a09b940..0000000 --- a/modules/imgproc/src/distransform.cpp +++ /dev/null @@ -1,859 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -#define ICV_DIST_SHIFT 16 -#define ICV_INIT_DIST0 (INT_MAX >> 2) - -static CvStatus -icvInitTopBottom( int* temp, int tempstep, CvSize size, int border ) -{ - int i, j; - for( i = 0; i < border; i++ ) - { - int* ttop = (int*)(temp + i*tempstep); - int* tbottom = (int*)(temp + (size.height + border*2 - i - 1)*tempstep); - - for( j = 0; j < size.width + border*2; j++ ) - { - ttop[j] = ICV_INIT_DIST0; - tbottom[j] = ICV_INIT_DIST0; - } - } - - return CV_OK; -} - - -static CvStatus CV_STDCALL -icvDistanceTransform_3x3_C1R( const uchar* src, int srcstep, int* temp, - int step, float* dist, int dststep, CvSize size, const float* metrics ) -{ - const int BORDER = 1; - int i, j; - const int HV_DIST = CV_FLT_TO_FIX( metrics[0], ICV_DIST_SHIFT ); - const int DIAG_DIST = CV_FLT_TO_FIX( metrics[1], ICV_DIST_SHIFT ); - const float scale = 1.f/(1 << ICV_DIST_SHIFT); - - srcstep /= sizeof(src[0]); - step /= sizeof(temp[0]); - dststep /= sizeof(dist[0]); - - icvInitTopBottom( temp, step, size, BORDER ); - - // forward pass - for( i = 0; i < size.height; i++ ) - { - const uchar* s = src + i*srcstep; - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - - for( j = 0; j < BORDER; j++ ) - tmp[-j-1] = tmp[size.width + j] = ICV_INIT_DIST0; - - for( j = 0; j < size.width; j++ ) - { - if( !s[j] ) - tmp[j] = 0; - else - { - int t0 = tmp[j-step-1] + DIAG_DIST; - int t = tmp[j-step] + HV_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step+1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-1] + HV_DIST; - if( t0 > t ) t0 = t; - tmp[j] = t0; - } - } - } - - // backward pass - for( i = size.height - 1; i >= 0; i-- ) - { - float* d = (float*)(dist + i*dststep); - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - - for( j = size.width - 1; j >= 0; j-- ) - { - int t0 = tmp[j]; - if( t0 > HV_DIST ) - { - int t = tmp[j+step+1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step] + HV_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step-1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+1] + HV_DIST; - if( t0 > t ) t0 = t; - tmp[j] = t0; - } - d[j] = (float)(t0 * scale); - } - } - - return CV_OK; -} - - -static CvStatus CV_STDCALL -icvDistanceTransform_5x5_C1R( const uchar* src, int srcstep, int* temp, - int step, float* dist, int dststep, CvSize size, const float* metrics ) -{ - const int BORDER = 2; - int i, j; - const int HV_DIST = CV_FLT_TO_FIX( metrics[0], ICV_DIST_SHIFT ); - const int DIAG_DIST = CV_FLT_TO_FIX( metrics[1], ICV_DIST_SHIFT ); - const int LONG_DIST = CV_FLT_TO_FIX( metrics[2], ICV_DIST_SHIFT ); - const float scale = 1.f/(1 << ICV_DIST_SHIFT); - - srcstep /= sizeof(src[0]); - step /= sizeof(temp[0]); - dststep /= sizeof(dist[0]); - - icvInitTopBottom( temp, step, size, BORDER ); - - // forward pass - for( i = 0; i < size.height; i++ ) - { - const uchar* s = src + i*srcstep; - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - - for( j = 0; j < BORDER; j++ ) - tmp[-j-1] = tmp[size.width + j] = ICV_INIT_DIST0; - - for( j = 0; j < size.width; j++ ) - { - if( !s[j] ) - tmp[j] = 0; - else - { - int t0 = tmp[j-step*2-1] + LONG_DIST; - int t = tmp[j-step*2+1] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step-2] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step-1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step] + HV_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step+1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-step+2] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j-1] + HV_DIST; - if( t0 > t ) t0 = t; - tmp[j] = t0; - } - } - } - - // backward pass - for( i = size.height - 1; i >= 0; i-- ) - { - float* d = (float*)(dist + i*dststep); - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - - for( j = size.width - 1; j >= 0; j-- ) - { - int t0 = tmp[j]; - if( t0 > HV_DIST ) - { - int t = tmp[j+step*2+1] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step*2-1] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step+2] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step+1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step] + HV_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step-1] + DIAG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+step-2] + LONG_DIST; - if( t0 > t ) t0 = t; - t = tmp[j+1] + HV_DIST; - if( t0 > t ) t0 = t; - tmp[j] = t0; - } - d[j] = (float)(t0 * scale); - } - } - - return CV_OK; -} - - -static CvStatus CV_STDCALL -icvDistanceTransformEx_5x5_C1R( const uchar* src, int srcstep, int* temp, - int step, float* dist, int dststep, int* labels, int lstep, - CvSize size, const float* metrics ) -{ - const int BORDER = 2; - - int i, j; - const int HV_DIST = CV_FLT_TO_FIX( metrics[0], ICV_DIST_SHIFT ); - const int DIAG_DIST = CV_FLT_TO_FIX( metrics[1], ICV_DIST_SHIFT ); - const int LONG_DIST = CV_FLT_TO_FIX( metrics[2], ICV_DIST_SHIFT ); - const float scale = 1.f/(1 << ICV_DIST_SHIFT); - - srcstep /= sizeof(src[0]); - step /= sizeof(temp[0]); - dststep /= sizeof(dist[0]); - lstep /= sizeof(labels[0]); - - icvInitTopBottom( temp, step, size, BORDER ); - - // forward pass - for( i = 0; i < size.height; i++ ) - { - const uchar* s = src + i*srcstep; - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - int* lls = (int*)(labels + i*lstep); - - for( j = 0; j < BORDER; j++ ) - tmp[-j-1] = tmp[size.width + j] = ICV_INIT_DIST0; - - for( j = 0; j < size.width; j++ ) - { - if( !s[j] ) - { - tmp[j] = 0; - //assert( lls[j] != 0 ); - } - else - { - int t0 = ICV_INIT_DIST0, t; - int l0 = 0; - - t = tmp[j-step*2-1] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep*2-1]; - } - t = tmp[j-step*2+1] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep*2+1]; - } - t = tmp[j-step-2] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep-2]; - } - t = tmp[j-step-1] + DIAG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep-1]; - } - t = tmp[j-step] + HV_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep]; - } - t = tmp[j-step+1] + DIAG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep+1]; - } - t = tmp[j-step+2] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-lstep+2]; - } - t = tmp[j-1] + HV_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j-1]; - } - - tmp[j] = t0; - lls[j] = l0; - } - } - } - - // backward pass - for( i = size.height - 1; i >= 0; i-- ) - { - float* d = (float*)(dist + i*dststep); - int* tmp = (int*)(temp + (i+BORDER)*step) + BORDER; - int* lls = (int*)(labels + i*lstep); - - for( j = size.width - 1; j >= 0; j-- ) - { - int t0 = tmp[j]; - int l0 = lls[j]; - if( t0 > HV_DIST ) - { - int t = tmp[j+step*2+1] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep*2+1]; - } - t = tmp[j+step*2-1] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep*2-1]; - } - t = tmp[j+step+2] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep+2]; - } - t = tmp[j+step+1] + DIAG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep+1]; - } - t = tmp[j+step] + HV_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep]; - } - t = tmp[j+step-1] + DIAG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep-1]; - } - t = tmp[j+step-2] + LONG_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+lstep-2]; - } - t = tmp[j+1] + HV_DIST; - if( t0 > t ) - { - t0 = t; - l0 = lls[j+1]; - } - tmp[j] = t0; - lls[j] = l0; - } - d[j] = (float)(t0 * scale); - } - } - - return CV_OK; -} - - -static CvStatus -icvGetDistanceTransformMask( int maskType, float *metrics ) -{ - if( !metrics ) - return CV_NULLPTR_ERR; - - switch (maskType) - { - case 30: - metrics[0] = 1.0f; - metrics[1] = 1.0f; - break; - - case 31: - metrics[0] = 1.0f; - metrics[1] = 2.0f; - break; - - case 32: - metrics[0] = 0.955f; - metrics[1] = 1.3693f; - break; - - case 50: - metrics[0] = 1.0f; - metrics[1] = 1.0f; - metrics[2] = 2.0f; - break; - - case 51: - metrics[0] = 1.0f; - metrics[1] = 2.0f; - metrics[2] = 3.0f; - break; - - case 52: - metrics[0] = 1.0f; - metrics[1] = 1.4f; - metrics[2] = 2.1969f; - break; - default: - return CV_BADRANGE_ERR; - } - - return CV_OK; -} - -namespace cv -{ - -struct DTColumnInvoker : ParallelLoopBody -{ - DTColumnInvoker( const CvMat* _src, CvMat* _dst, const int* _sat_tab, const float* _sqr_tab) - { - src = _src; - dst = _dst; - sat_tab = _sat_tab + src->rows*2 + 1; - sqr_tab = _sqr_tab; - } - - void operator()( const Range& range ) const - { - int i, i1 = range.start, i2 = range.end; - int m = src->rows; - size_t sstep = src->step, dstep = dst->step/sizeof(float); - AutoBuffer _d(m); - int* d = _d; - - for( i = i1; i < i2; i++ ) - { - const uchar* sptr = src->data.ptr + i + (m-1)*sstep; - float* dptr = dst->data.fl + i; - int j, dist = m-1; - - for( j = m-1; j >= 0; j--, sptr -= sstep ) - { - dist = (dist + 1) & (sptr[0] == 0 ? 0 : -1); - d[j] = dist; - } - - dist = m-1; - for( j = 0; j < m; j++, dptr += dstep ) - { - dist = dist + 1 - sat_tab[dist - d[j]]; - d[j] = dist; - dptr[0] = sqr_tab[dist]; - } - } - } - - const CvMat* src; - CvMat* dst; - const int* sat_tab; - const float* sqr_tab; -}; - - -struct DTRowInvoker : ParallelLoopBody -{ - DTRowInvoker( CvMat* _dst, const float* _sqr_tab, const float* _inv_tab ) - { - dst = _dst; - sqr_tab = _sqr_tab; - inv_tab = _inv_tab; - } - - void operator()( const Range& range ) const - { - const float inf = 1e15f; - int i, i1 = range.start, i2 = range.end; - int n = dst->cols; - AutoBuffer _buf((n+2)*2*sizeof(float) + (n+2)*sizeof(int)); - float* f = (float*)(uchar*)_buf; - float* z = f + n; - int* v = alignPtr((int*)(z + n + 1), sizeof(int)); - - for( i = i1; i < i2; i++ ) - { - float* d = (float*)(dst->data.ptr + i*dst->step); - int p, q, k; - - v[0] = 0; - z[0] = -inf; - z[1] = inf; - f[0] = d[0]; - - for( q = 1, k = 0; q < n; q++ ) - { - float fq = d[q]; - f[q] = fq; - - for(;;k--) - { - p = v[k]; - float s = (fq + sqr_tab[q] - d[p] - sqr_tab[p])*inv_tab[q - p]; - if( s > z[k] ) - { - k++; - v[k] = q; - z[k] = s; - z[k+1] = inf; - break; - } - } - } - - for( q = 0, k = 0; q < n; q++ ) - { - while( z[k+1] < q ) - k++; - p = v[k]; - d[q] = std::sqrt(sqr_tab[std::abs(q - p)] + f[p]); - } - } - } - - CvMat* dst; - const float* sqr_tab; - const float* inv_tab; -}; - -} - -static void -icvTrueDistTrans( const CvMat* src, CvMat* dst ) -{ - const float inf = 1e15f; - - if( !CV_ARE_SIZES_EQ( src, dst )) - CV_Error( CV_StsUnmatchedSizes, "" ); - - if( CV_MAT_TYPE(src->type) != CV_8UC1 || - CV_MAT_TYPE(dst->type) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, - "The input image must have 8uC1 type and the output one must have 32fC1 type" ); - - int i, m = src->rows, n = src->cols; - - cv::AutoBuffer _buf(std::max(m*2*sizeof(float) + (m*3+1)*sizeof(int), n*2*sizeof(float))); - // stage 1: compute 1d distance transform of each column - float* sqr_tab = (float*)(uchar*)_buf; - int* sat_tab = cv::alignPtr((int*)(sqr_tab + m*2), sizeof(int)); - int shift = m*2; - - for( i = 0; i < m; i++ ) - sqr_tab[i] = (float)(i*i); - for( i = m; i < m*2; i++ ) - sqr_tab[i] = inf; - for( i = 0; i < shift; i++ ) - sat_tab[i] = 0; - for( ; i <= m*3; i++ ) - sat_tab[i] = i - shift; - - cv::parallel_for_(cv::Range(0, n), cv::DTColumnInvoker(src, dst, sat_tab, sqr_tab)); - - // stage 2: compute modified distance transform for each row - float* inv_tab = sqr_tab + n; - - inv_tab[0] = sqr_tab[0] = 0.f; - for( i = 1; i < n; i++ ) - { - inv_tab[i] = (float)(0.5/i); - sqr_tab[i] = (float)(i*i); - } - - cv::parallel_for_(cv::Range(0, m), cv::DTRowInvoker(dst, sqr_tab, inv_tab)); -} - - -/*********************************** IPP functions *********************************/ - -typedef CvStatus (CV_STDCALL * CvIPPDistTransFunc)( const uchar* src, int srcstep, - void* dst, int dststep, - CvSize size, const void* metrics ); - -typedef CvStatus (CV_STDCALL * CvIPPDistTransFunc2)( uchar* src, int srcstep, - CvSize size, const int* metrics ); - -/***********************************************************************************/ - -typedef CvStatus (CV_STDCALL * CvDistTransFunc)( const uchar* src, int srcstep, - int* temp, int tempstep, - float* dst, int dststep, - CvSize size, const float* metrics ); - - -/****************************************************************************************\ - Non-inplace and Inplace 8u->8u Distance Transform for CityBlock (a.k.a. L1) metric - (C) 2006 by Jay Stavinzky. -\****************************************************************************************/ - -//BEGIN ATS ADDITION -/* 8-bit grayscale distance transform function */ -static void -icvDistanceATS_L1_8u( const CvMat* src, CvMat* dst ) -{ - int width = src->cols, height = src->rows; - - int a; - uchar lut[256]; - int x, y; - - const uchar *sbase = src->data.ptr; - uchar *dbase = dst->data.ptr; - int srcstep = src->step; - int dststep = dst->step; - - CV_Assert( CV_IS_MASK_ARR( src ) && CV_MAT_TYPE( dst->type ) == CV_8UC1 ); - CV_Assert( CV_ARE_SIZES_EQ( src, dst )); - - ////////////////////// forward scan //////////////////////// - for( x = 0; x < 256; x++ ) - lut[x] = CV_CAST_8U(x+1); - - //init first pixel to max (we're going to be skipping it) - dbase[0] = (uchar)(sbase[0] == 0 ? 0 : 255); - - //first row (scan west only, skip first pixel) - for( x = 1; x < width; x++ ) - dbase[x] = (uchar)(sbase[x] == 0 ? 0 : lut[dbase[x-1]]); - - for( y = 1; y < height; y++ ) - { - sbase += srcstep; - dbase += dststep; - - //for left edge, scan north only - a = sbase[0] == 0 ? 0 : lut[dbase[-dststep]]; - dbase[0] = (uchar)a; - - for( x = 1; x < width; x++ ) - { - a = sbase[x] == 0 ? 0 : lut[MIN(a, dbase[x - dststep])]; - dbase[x] = (uchar)a; - } - } - - ////////////////////// backward scan /////////////////////// - - a = dbase[width-1]; - - // do last row east pixel scan here (skip bottom right pixel) - for( x = width - 2; x >= 0; x-- ) - { - a = lut[a]; - dbase[x] = (uchar)(CV_CALC_MIN_8U(a, dbase[x])); - } - - // right edge is the only error case - for( y = height - 2; y >= 0; y-- ) - { - dbase -= dststep; - - // do right edge - a = lut[dbase[width-1+dststep]]; - dbase[width-1] = (uchar)(MIN(a, dbase[width-1])); - - for( x = width - 2; x >= 0; x-- ) - { - int b = dbase[x+dststep]; - a = lut[MIN(a, b)]; - dbase[x] = (uchar)(MIN(a, dbase[x])); - } - } -} -//END ATS ADDITION - - -/* Wrapper function for distance transform group */ -CV_IMPL void -cvDistTransform( const void* srcarr, void* dstarr, - int distType, int maskSize, - const float *mask, - void* labelsarr, int labelType ) -{ - float _mask[5] = {0}; - CvMat srcstub, *src = (CvMat*)srcarr; - CvMat dststub, *dst = (CvMat*)dstarr; - CvMat lstub, *labels = (CvMat*)labelsarr; - - src = cvGetMat( src, &srcstub ); - dst = cvGetMat( dst, &dststub ); - - if( !CV_IS_MASK_ARR( src ) || (CV_MAT_TYPE( dst->type ) != CV_32FC1 && - (CV_MAT_TYPE(dst->type) != CV_8UC1 || distType != CV_DIST_L1 || labels)) ) - CV_Error( CV_StsUnsupportedFormat, - "source image must be 8uC1 and the distance map must be 32fC1 " - "(or 8uC1 in case of simple L1 distance transform)" ); - - if( !CV_ARE_SIZES_EQ( src, dst )) - CV_Error( CV_StsUnmatchedSizes, "the source and the destination images must be of the same size" ); - - if( maskSize != CV_DIST_MASK_3 && maskSize != CV_DIST_MASK_5 && maskSize != CV_DIST_MASK_PRECISE ) - CV_Error( CV_StsBadSize, "Mask size should be 3 or 5 or 0 (presize)" ); - - if( distType == CV_DIST_C || distType == CV_DIST_L1 ) - maskSize = !labels ? CV_DIST_MASK_3 : CV_DIST_MASK_5; - else if( distType == CV_DIST_L2 && labels ) - maskSize = CV_DIST_MASK_5; - - if( maskSize == CV_DIST_MASK_PRECISE ) - { - icvTrueDistTrans( src, dst ); - return; - } - - if( labels ) - { - labels = cvGetMat( labels, &lstub ); - if( CV_MAT_TYPE( labels->type ) != CV_32SC1 ) - CV_Error( CV_StsUnsupportedFormat, "the output array of labels must be 32sC1" ); - - if( !CV_ARE_SIZES_EQ( labels, dst )) - CV_Error( CV_StsUnmatchedSizes, "the array of labels has a different size" ); - - if( maskSize == CV_DIST_MASK_3 ) - CV_Error( CV_StsNotImplemented, - "3x3 mask can not be used for \"labeled\" distance transform. Use 5x5 mask" ); - } - - if( distType == CV_DIST_C || distType == CV_DIST_L1 || distType == CV_DIST_L2 ) - { - icvGetDistanceTransformMask( (distType == CV_DIST_C ? 0 : - distType == CV_DIST_L1 ? 1 : 2) + maskSize*10, _mask ); - } - else if( distType == CV_DIST_USER ) - { - if( !mask ) - CV_Error( CV_StsNullPtr, "" ); - - memcpy( _mask, mask, (maskSize/2 + 1)*sizeof(float)); - } - - CvSize size = cvGetMatSize(src); - - if( CV_MAT_TYPE(dst->type) == CV_8UC1 ) - { - icvDistanceATS_L1_8u( src, dst ); - } - else - { - int border = maskSize == CV_DIST_MASK_3 ? 1 : 2; - cv::Ptr temp = cvCreateMat( size.height + border*2, size.width + border*2, CV_32SC1 ); - - if( !labels ) - { - #if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( maskSize == CV_DIST_MASK_5 ) - { - IppiSize roi = { src->cols, src->rows }; - if( ippiDistanceTransform_5x5_8u32f_C1R( - src->data.ptr, src->step, - dst->data.fl, dst->step, roi, _mask) >= 0 ) - return; - } - #endif - CvDistTransFunc func = maskSize == CV_DIST_MASK_3 ? - icvDistanceTransform_3x3_C1R : - icvDistanceTransform_5x5_C1R; - - func( src->data.ptr, src->step, temp->data.i, temp->step, - dst->data.fl, dst->step, size, _mask ); - } - else - { - cvZero( labels ); - - if( labelType == CV_DIST_LABEL_CCOMP ) - { - CvSeq *contours = 0; - cv::Ptr st = cvCreateMemStorage(); - cv::Ptr src_copy = cvCreateMat( size.height+border*2, size.width+border*2, src->type ); - cvCopyMakeBorder(src, src_copy, cvPoint(border, border), IPL_BORDER_CONSTANT, cvScalarAll(255)); - cvCmpS( src_copy, 0, src_copy, CV_CMP_EQ ); - cvFindContours( src_copy, st, &contours, sizeof(CvContour), - CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(-border, -border)); - - for( int label = 1; contours != 0; contours = contours->h_next, label++ ) - { - CvScalar area_color = cvScalarAll(label); - cvDrawContours( labels, contours, area_color, area_color, -255, -1, 8 ); - } - } - else - { - int k = 1; - for( int i = 0; i < src->rows; i++ ) - { - const uchar* srcptr = src->data.ptr + src->step*i; - int* labelptr = (int*)(labels->data.ptr + labels->step*i); - - for( int j = 0; j < src->cols; j++ ) - if( srcptr[j] == 0 ) - labelptr[j] = k++; - } - } - - icvDistanceTransformEx_5x5_C1R( src->data.ptr, src->step, temp->data.i, temp->step, - dst->data.fl, dst->step, labels->data.i, labels->step, size, _mask ); - } - } -} - -void cv::distanceTransform( InputArray _src, OutputArray _dst, OutputArray _labels, - int distanceType, int maskSize, int labelType ) -{ - Mat src = _src.getMat(); - _dst.create(src.size(), CV_32F); - _labels.create(src.size(), CV_32S); - CvMat c_src = src, c_dst = _dst.getMat(), c_labels = _labels.getMat(); - cvDistTransform(&c_src, &c_dst, distanceType, maskSize, 0, &c_labels, labelType); -} - -void cv::distanceTransform( InputArray _src, OutputArray _dst, - int distanceType, int maskSize ) -{ - Mat src = _src.getMat(); - _dst.create(src.size(), CV_32F); - Mat dst = _dst.getMat(); - CvMat c_src = src, c_dst = _dst.getMat(); - cvDistTransform(&c_src, &c_dst, distanceType, maskSize, 0, 0, -1); -} - -/* End of file. */ diff --git a/modules/imgproc/src/emd.cpp b/modules/imgproc/src/emd.cpp deleted file mode 100644 index 69006f3..0000000 --- a/modules/imgproc/src/emd.cpp +++ /dev/null @@ -1,1162 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* - Partially based on Yossi Rubner code: - ========================================================================= - emd.c - - Last update: 3/14/98 - - An implementation of the Earth Movers Distance. - Based of the solution for the Transportation problem as described in - "Introduction to Mathematical Programming" by F. S. Hillier and - G. J. Lieberman, McGraw-Hill, 1990. - - Copyright (C) 1998 Yossi Rubner - Computer Science Department, Stanford University - E-Mail: rubner@cs.stanford.edu URL: http://vision.stanford.edu/~rubner - ========================================================================== -*/ -#include "precomp.hpp" - -#define MAX_ITERATIONS 500 -#define CV_EMD_INF ((float)1e20) -#define CV_EMD_EPS ((float)1e-5) - -/* CvNode1D is used for lists, representing 1D sparse array */ -typedef struct CvNode1D -{ - float val; - struct CvNode1D *next; -} -CvNode1D; - -/* CvNode2D is used for lists, representing 2D sparse matrix */ -typedef struct CvNode2D -{ - float val; - struct CvNode2D *next[2]; /* next row & next column */ - int i, j; -} -CvNode2D; - - -typedef struct CvEMDState -{ - int ssize, dsize; - - float **cost; - CvNode2D *_x; - CvNode2D *end_x; - CvNode2D *enter_x; - char **is_x; - - CvNode2D **rows_x; - CvNode2D **cols_x; - - CvNode1D *u; - CvNode1D *v; - - int* idx1; - int* idx2; - - /* find_loop buffers */ - CvNode2D **loop; - char *is_used; - - /* russel buffers */ - float *s; - float *d; - float **delta; - - float weight, max_cost; - char *buffer; -} -CvEMDState; - -/* static function declaration */ -static int icvInitEMD( const float *signature1, int size1, - const float *signature2, int size2, - int dims, CvDistanceFunction dist_func, void *user_param, - const float* cost, int cost_step, - CvEMDState * state, float *lower_bound, - cv::AutoBuffer& _buffer ); - -static int icvFindBasicVariables( float **cost, char **is_x, - CvNode1D * u, CvNode1D * v, int ssize, int dsize ); - -static float icvIsOptimal( float **cost, char **is_x, - CvNode1D * u, CvNode1D * v, - int ssize, int dsize, CvNode2D * enter_x ); - -static void icvRussel( CvEMDState * state ); - - -static bool icvNewSolution( CvEMDState * state ); -static int icvFindLoop( CvEMDState * state ); - -static void icvAddBasicVariable( CvEMDState * state, - int min_i, int min_j, - CvNode1D * prev_u_min_i, - CvNode1D * prev_v_min_j, - CvNode1D * u_head ); - -static float icvDistL2( const float *x, const float *y, void *user_param ); -static float icvDistL1( const float *x, const float *y, void *user_param ); -static float icvDistC( const float *x, const float *y, void *user_param ); - -/* The main function */ -CV_IMPL float cvCalcEMD2( const CvArr* signature_arr1, - const CvArr* signature_arr2, - int dist_type, - CvDistanceFunction dist_func, - const CvArr* cost_matrix, - CvArr* flow_matrix, - float *lower_bound, - void *user_param ) -{ - cv::AutoBuffer local_buf; - CvEMDState state; - float emd = 0; - - memset( &state, 0, sizeof(state)); - - double total_cost = 0; - int result = 0; - float eps, min_delta; - CvNode2D *xp = 0; - CvMat sign_stub1, *signature1 = (CvMat*)signature_arr1; - CvMat sign_stub2, *signature2 = (CvMat*)signature_arr2; - CvMat cost_stub, *cost = &cost_stub; - CvMat flow_stub, *flow = (CvMat*)flow_matrix; - int dims, size1, size2; - - signature1 = cvGetMat( signature1, &sign_stub1 ); - signature2 = cvGetMat( signature2, &sign_stub2 ); - - if( signature1->cols != signature2->cols ) - CV_Error( CV_StsUnmatchedSizes, "The arrays must have equal number of columns (which is number of dimensions but 1)" ); - - dims = signature1->cols - 1; - size1 = signature1->rows; - size2 = signature2->rows; - - if( !CV_ARE_TYPES_EQ( signature1, signature2 )) - CV_Error( CV_StsUnmatchedFormats, "The array must have equal types" ); - - if( CV_MAT_TYPE( signature1->type ) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, "The signatures must be 32fC1" ); - - if( flow ) - { - flow = cvGetMat( flow, &flow_stub ); - - if( flow->rows != size1 || flow->cols != size2 ) - CV_Error( CV_StsUnmatchedSizes, - "The flow matrix size does not match to the signatures' sizes" ); - - if( CV_MAT_TYPE( flow->type ) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, "The flow matrix must be 32fC1" ); - } - - cost->data.fl = 0; - cost->step = 0; - - if( dist_type < 0 ) - { - if( cost_matrix ) - { - if( dist_func ) - CV_Error( CV_StsBadArg, - "Only one of cost matrix or distance function should be non-NULL in case of user-defined distance" ); - - if( lower_bound ) - CV_Error( CV_StsBadArg, - "The lower boundary can not be calculated if the cost matrix is used" ); - - cost = cvGetMat( cost_matrix, &cost_stub ); - if( cost->rows != size1 || cost->cols != size2 ) - CV_Error( CV_StsUnmatchedSizes, - "The cost matrix size does not match to the signatures' sizes" ); - - if( CV_MAT_TYPE( cost->type ) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, "The cost matrix must be 32fC1" ); - } - else if( !dist_func ) - CV_Error( CV_StsNullPtr, "In case of user-defined distance Distance function is undefined" ); - } - else - { - if( dims == 0 ) - CV_Error( CV_StsBadSize, - "Number of dimensions can be 0 only if a user-defined metric is used" ); - user_param = (void *) (size_t)dims; - switch (dist_type) - { - case CV_DIST_L1: - dist_func = icvDistL1; - break; - case CV_DIST_L2: - dist_func = icvDistL2; - break; - case CV_DIST_C: - dist_func = icvDistC; - break; - default: - CV_Error( CV_StsBadFlag, "Bad or unsupported metric type" ); - } - } - - result = icvInitEMD( signature1->data.fl, size1, - signature2->data.fl, size2, - dims, dist_func, user_param, - cost->data.fl, cost->step, - &state, lower_bound, local_buf ); - - if( result > 0 && lower_bound ) - { - emd = *lower_bound; - return emd; - } - - eps = CV_EMD_EPS * state.max_cost; - - /* if ssize = 1 or dsize = 1 then we are done, else ... */ - if( state.ssize > 1 && state.dsize > 1 ) - { - int itr; - - for( itr = 1; itr < MAX_ITERATIONS; itr++ ) - { - /* find basic variables */ - result = icvFindBasicVariables( state.cost, state.is_x, - state.u, state.v, state.ssize, state.dsize ); - if( result < 0 ) - break; - - /* check for optimality */ - min_delta = icvIsOptimal( state.cost, state.is_x, - state.u, state.v, - state.ssize, state.dsize, state.enter_x ); - - if( min_delta == CV_EMD_INF ) - CV_Error( CV_StsNoConv, "" ); - - /* if no negative deltamin, we found the optimal solution */ - if( min_delta >= -eps ) - break; - - /* improve solution */ - if(!icvNewSolution( &state )) - CV_Error( CV_StsNoConv, "" ); - } - } - - /* compute the total flow */ - for( xp = state._x; xp < state.end_x; xp++ ) - { - float val = xp->val; - int i = xp->i; - int j = xp->j; - - if( xp == state.enter_x ) - continue; - - int ci = state.idx1[i]; - int cj = state.idx2[j]; - - if( ci >= 0 && cj >= 0 ) - { - total_cost += (double)val * state.cost[i][j]; - if( flow ) - ((float*)(flow->data.ptr + flow->step*ci))[cj] = val; - } - } - - emd = (float) (total_cost / state.weight); - return emd; -} - - -/************************************************************************************\ -* initialize structure, allocate buffers and generate initial golution * -\************************************************************************************/ -static int icvInitEMD( const float* signature1, int size1, - const float* signature2, int size2, - int dims, CvDistanceFunction dist_func, void* user_param, - const float* cost, int cost_step, - CvEMDState* state, float* lower_bound, - cv::AutoBuffer& _buffer ) -{ - float s_sum = 0, d_sum = 0, diff; - int i, j; - int ssize = 0, dsize = 0; - int equal_sums = 1; - int buffer_size; - float max_cost = 0; - char *buffer, *buffer_end; - - memset( state, 0, sizeof( *state )); - assert( cost_step % sizeof(float) == 0 ); - cost_step /= sizeof(float); - - /* calculate buffer size */ - buffer_size = (size1+1) * (size2+1) * (sizeof( float ) + /* cost */ - sizeof( char ) + /* is_x */ - sizeof( float )) + /* delta matrix */ - (size1 + size2 + 2) * (sizeof( CvNode2D ) + /* _x */ - sizeof( CvNode2D * ) + /* cols_x & rows_x */ - sizeof( CvNode1D ) + /* u & v */ - sizeof( float ) + /* s & d */ - sizeof( int ) + sizeof(CvNode2D*)) + /* idx1 & idx2 */ - (size1+1) * (sizeof( float * ) + sizeof( char * ) + /* rows pointers for */ - sizeof( float * )) + 256; /* cost, is_x and delta */ - - if( buffer_size < (int) (dims * 2 * sizeof( float ))) - { - buffer_size = dims * 2 * sizeof( float ); - } - - /* allocate buffers */ - _buffer.allocate(buffer_size); - - state->buffer = buffer = _buffer; - buffer_end = buffer + buffer_size; - - state->idx1 = (int*) buffer; - buffer += (size1 + 1) * sizeof( int ); - - state->idx2 = (int*) buffer; - buffer += (size2 + 1) * sizeof( int ); - - state->s = (float *) buffer; - buffer += (size1 + 1) * sizeof( float ); - - state->d = (float *) buffer; - buffer += (size2 + 1) * sizeof( float ); - - /* sum up the supply and demand */ - for( i = 0; i < size1; i++ ) - { - float weight = signature1[i * (dims + 1)]; - - if( weight > 0 ) - { - s_sum += weight; - state->s[ssize] = weight; - state->idx1[ssize++] = i; - - } - else if( weight < 0 ) - CV_Error(CV_StsOutOfRange, ""); - } - - for( i = 0; i < size2; i++ ) - { - float weight = signature2[i * (dims + 1)]; - - if( weight > 0 ) - { - d_sum += weight; - state->d[dsize] = weight; - state->idx2[dsize++] = i; - } - else if( weight < 0 ) - CV_Error(CV_StsOutOfRange, ""); - } - - if( ssize == 0 || dsize == 0 ) - CV_Error(CV_StsOutOfRange, ""); - - /* if supply different than the demand, add a zero-cost dummy cluster */ - diff = s_sum - d_sum; - if( fabs( diff ) >= CV_EMD_EPS * s_sum ) - { - equal_sums = 0; - if( diff < 0 ) - { - state->s[ssize] = -diff; - state->idx1[ssize++] = -1; - } - else - { - state->d[dsize] = diff; - state->idx2[dsize++] = -1; - } - } - - state->ssize = ssize; - state->dsize = dsize; - state->weight = s_sum > d_sum ? s_sum : d_sum; - - if( lower_bound && equal_sums ) /* check lower bound */ - { - int sz1 = size1 * (dims + 1), sz2 = size2 * (dims + 1); - float lb = 0; - - float* xs = (float *) buffer; - float* xd = xs + dims; - - memset( xs, 0, dims*sizeof(xs[0])); - memset( xd, 0, dims*sizeof(xd[0])); - - for( j = 0; j < sz1; j += dims + 1 ) - { - float weight = signature1[j]; - for( i = 0; i < dims; i++ ) - xs[i] += signature1[j + i + 1] * weight; - } - - for( j = 0; j < sz2; j += dims + 1 ) - { - float weight = signature2[j]; - for( i = 0; i < dims; i++ ) - xd[i] += signature2[j + i + 1] * weight; - } - - lb = dist_func( xs, xd, user_param ) / state->weight; - i = *lower_bound <= lb; - *lower_bound = lb; - if( i ) - return 1; - } - - /* assign pointers */ - state->is_used = (char *) buffer; - /* init delta matrix */ - state->delta = (float **) buffer; - buffer += ssize * sizeof( float * ); - - for( i = 0; i < ssize; i++ ) - { - state->delta[i] = (float *) buffer; - buffer += dsize * sizeof( float ); - } - - state->loop = (CvNode2D **) buffer; - buffer += (ssize + dsize + 1) * sizeof(CvNode2D*); - - state->_x = state->end_x = (CvNode2D *) buffer; - buffer += (ssize + dsize) * sizeof( CvNode2D ); - - /* init cost matrix */ - state->cost = (float **) buffer; - buffer += ssize * sizeof( float * ); - - /* compute the distance matrix */ - for( i = 0; i < ssize; i++ ) - { - int ci = state->idx1[i]; - - state->cost[i] = (float *) buffer; - buffer += dsize * sizeof( float ); - - if( ci >= 0 ) - { - for( j = 0; j < dsize; j++ ) - { - int cj = state->idx2[j]; - if( cj < 0 ) - state->cost[i][j] = 0; - else - { - float val; - if( dist_func ) - { - val = dist_func( signature1 + ci * (dims + 1) + 1, - signature2 + cj * (dims + 1) + 1, - user_param ); - } - else - { - assert( cost ); - val = cost[cost_step*ci + cj]; - } - state->cost[i][j] = val; - if( max_cost < val ) - max_cost = val; - } - } - } - else - { - for( j = 0; j < dsize; j++ ) - state->cost[i][j] = 0; - } - } - - state->max_cost = max_cost; - - memset( buffer, 0, buffer_end - buffer ); - - state->rows_x = (CvNode2D **) buffer; - buffer += ssize * sizeof( CvNode2D * ); - - state->cols_x = (CvNode2D **) buffer; - buffer += dsize * sizeof( CvNode2D * ); - - state->u = (CvNode1D *) buffer; - buffer += ssize * sizeof( CvNode1D ); - - state->v = (CvNode1D *) buffer; - buffer += dsize * sizeof( CvNode1D ); - - /* init is_x matrix */ - state->is_x = (char **) buffer; - buffer += ssize * sizeof( char * ); - - for( i = 0; i < ssize; i++ ) - { - state->is_x[i] = buffer; - buffer += dsize; - } - - assert( buffer <= buffer_end ); - - icvRussel( state ); - - state->enter_x = (state->end_x)++; - return 0; -} - - -/****************************************************************************************\ -* icvFindBasicVariables * -\****************************************************************************************/ -static int icvFindBasicVariables( float **cost, char **is_x, - CvNode1D * u, CvNode1D * v, int ssize, int dsize ) -{ - int i, j, found; - int u_cfound, v_cfound; - CvNode1D u0_head, u1_head, *cur_u, *prev_u; - CvNode1D v0_head, v1_head, *cur_v, *prev_v; - - /* initialize the rows list (u) and the columns list (v) */ - u0_head.next = u; - for( i = 0; i < ssize; i++ ) - { - u[i].next = u + i + 1; - } - u[ssize - 1].next = 0; - u1_head.next = 0; - - v0_head.next = ssize > 1 ? v + 1 : 0; - for( i = 1; i < dsize; i++ ) - { - v[i].next = v + i + 1; - } - v[dsize - 1].next = 0; - v1_head.next = 0; - - /* there are ssize+dsize variables but only ssize+dsize-1 independent equations, - so set v[0]=0 */ - v[0].val = 0; - v1_head.next = v; - v1_head.next->next = 0; - - /* loop until all variables are found */ - u_cfound = v_cfound = 0; - while( u_cfound < ssize || v_cfound < dsize ) - { - found = 0; - if( v_cfound < dsize ) - { - /* loop over all marked columns */ - prev_v = &v1_head; - - for( found |= (cur_v = v1_head.next) != 0; cur_v != 0; cur_v = cur_v->next ) - { - float cur_v_val = cur_v->val; - - j = (int)(cur_v - v); - /* find the variables in column j */ - prev_u = &u0_head; - for( cur_u = u0_head.next; cur_u != 0; ) - { - i = (int)(cur_u - u); - if( is_x[i][j] ) - { - /* compute u[i] */ - cur_u->val = cost[i][j] - cur_v_val; - /* ...and add it to the marked list */ - prev_u->next = cur_u->next; - cur_u->next = u1_head.next; - u1_head.next = cur_u; - cur_u = prev_u->next; - } - else - { - prev_u = cur_u; - cur_u = cur_u->next; - } - } - prev_v->next = cur_v->next; - v_cfound++; - } - } - - if( u_cfound < ssize ) - { - /* loop over all marked rows */ - prev_u = &u1_head; - for( found |= (cur_u = u1_head.next) != 0; cur_u != 0; cur_u = cur_u->next ) - { - float cur_u_val = cur_u->val; - float *_cost; - char *_is_x; - - i = (int)(cur_u - u); - _cost = cost[i]; - _is_x = is_x[i]; - /* find the variables in rows i */ - prev_v = &v0_head; - for( cur_v = v0_head.next; cur_v != 0; ) - { - j = (int)(cur_v - v); - if( _is_x[j] ) - { - /* compute v[j] */ - cur_v->val = _cost[j] - cur_u_val; - /* ...and add it to the marked list */ - prev_v->next = cur_v->next; - cur_v->next = v1_head.next; - v1_head.next = cur_v; - cur_v = prev_v->next; - } - else - { - prev_v = cur_v; - cur_v = cur_v->next; - } - } - prev_u->next = cur_u->next; - u_cfound++; - } - } - - if( !found ) - return -1; - } - - return 0; -} - - -/****************************************************************************************\ -* icvIsOptimal * -\****************************************************************************************/ -static float -icvIsOptimal( float **cost, char **is_x, - CvNode1D * u, CvNode1D * v, int ssize, int dsize, CvNode2D * enter_x ) -{ - float delta, min_delta = CV_EMD_INF; - int i, j, min_i = 0, min_j = 0; - - /* find the minimal cij-ui-vj over all i,j */ - for( i = 0; i < ssize; i++ ) - { - float u_val = u[i].val; - float *_cost = cost[i]; - char *_is_x = is_x[i]; - - for( j = 0; j < dsize; j++ ) - { - if( !_is_x[j] ) - { - delta = _cost[j] - u_val - v[j].val; - if( min_delta > delta ) - { - min_delta = delta; - min_i = i; - min_j = j; - } - } - } - } - - enter_x->i = min_i; - enter_x->j = min_j; - - return min_delta; -} - -/****************************************************************************************\ -* icvNewSolution * -\****************************************************************************************/ -static bool -icvNewSolution( CvEMDState * state ) -{ - int i, j; - float min_val = CV_EMD_INF; - int steps; - CvNode2D head, *cur_x, *next_x, *leave_x = 0; - CvNode2D *enter_x = state->enter_x; - CvNode2D **loop = state->loop; - - /* enter the new basic variable */ - i = enter_x->i; - j = enter_x->j; - state->is_x[i][j] = 1; - enter_x->next[0] = state->rows_x[i]; - enter_x->next[1] = state->cols_x[j]; - enter_x->val = 0; - state->rows_x[i] = enter_x; - state->cols_x[j] = enter_x; - - /* find a chain reaction */ - steps = icvFindLoop( state ); - - if( steps == 0 ) - return false; - - /* find the largest value in the loop */ - for( i = 1; i < steps; i += 2 ) - { - float temp = loop[i]->val; - - if( min_val > temp ) - { - leave_x = loop[i]; - min_val = temp; - } - } - - /* update the loop */ - for( i = 0; i < steps; i += 2 ) - { - float temp0 = loop[i]->val + min_val; - float temp1 = loop[i + 1]->val - min_val; - - loop[i]->val = temp0; - loop[i + 1]->val = temp1; - } - - /* remove the leaving basic variable */ - i = leave_x->i; - j = leave_x->j; - state->is_x[i][j] = 0; - - head.next[0] = state->rows_x[i]; - cur_x = &head; - while( (next_x = cur_x->next[0]) != leave_x ) - { - cur_x = next_x; - assert( cur_x ); - } - cur_x->next[0] = next_x->next[0]; - state->rows_x[i] = head.next[0]; - - head.next[1] = state->cols_x[j]; - cur_x = &head; - while( (next_x = cur_x->next[1]) != leave_x ) - { - cur_x = next_x; - assert( cur_x ); - } - cur_x->next[1] = next_x->next[1]; - state->cols_x[j] = head.next[1]; - - /* set enter_x to be the new empty slot */ - state->enter_x = leave_x; - - return true; -} - - - -/****************************************************************************************\ -* icvFindLoop * -\****************************************************************************************/ -static int -icvFindLoop( CvEMDState * state ) -{ - int i, steps = 1; - CvNode2D *new_x; - CvNode2D **loop = state->loop; - CvNode2D *enter_x = state->enter_x, *_x = state->_x; - char *is_used = state->is_used; - - memset( is_used, 0, state->ssize + state->dsize ); - - new_x = loop[0] = enter_x; - is_used[enter_x - _x] = 1; - steps = 1; - - do - { - if( (steps & 1) == 1 ) - { - /* find an unused x in the row */ - new_x = state->rows_x[new_x->i]; - while( new_x != 0 && is_used[new_x - _x] ) - new_x = new_x->next[0]; - } - else - { - /* find an unused x in the column, or the entering x */ - new_x = state->cols_x[new_x->j]; - while( new_x != 0 && is_used[new_x - _x] && new_x != enter_x ) - new_x = new_x->next[1]; - if( new_x == enter_x ) - break; - } - - if( new_x != 0 ) /* found the next x */ - { - /* add x to the loop */ - loop[steps++] = new_x; - is_used[new_x - _x] = 1; - } - else /* didn't find the next x */ - { - /* backtrack */ - do - { - i = steps & 1; - new_x = loop[steps - 1]; - do - { - new_x = new_x->next[i]; - } - while( new_x != 0 && is_used[new_x - _x] ); - - if( new_x == 0 ) - { - is_used[loop[--steps] - _x] = 0; - } - } - while( new_x == 0 && steps > 0 ); - - is_used[loop[steps - 1] - _x] = 0; - loop[steps - 1] = new_x; - is_used[new_x - _x] = 1; - } - } - while( steps > 0 ); - - return steps; -} - - - -/****************************************************************************************\ -* icvRussel * -\****************************************************************************************/ -static void -icvRussel( CvEMDState * state ) -{ - int i, j, min_i = -1, min_j = -1; - float min_delta, diff; - CvNode1D u_head, *cur_u, *prev_u; - CvNode1D v_head, *cur_v, *prev_v; - CvNode1D *prev_u_min_i = 0, *prev_v_min_j = 0, *remember; - CvNode1D *u = state->u, *v = state->v; - int ssize = state->ssize, dsize = state->dsize; - float eps = CV_EMD_EPS * state->max_cost; - float **cost = state->cost; - float **delta = state->delta; - - /* initialize the rows list (ur), and the columns list (vr) */ - u_head.next = u; - for( i = 0; i < ssize; i++ ) - { - u[i].next = u + i + 1; - } - u[ssize - 1].next = 0; - - v_head.next = v; - for( i = 0; i < dsize; i++ ) - { - v[i].val = -CV_EMD_INF; - v[i].next = v + i + 1; - } - v[dsize - 1].next = 0; - - /* find the maximum row and column values (ur[i] and vr[j]) */ - for( i = 0; i < ssize; i++ ) - { - float u_val = -CV_EMD_INF; - float *cost_row = cost[i]; - - for( j = 0; j < dsize; j++ ) - { - float temp = cost_row[j]; - - if( u_val < temp ) - u_val = temp; - if( v[j].val < temp ) - v[j].val = temp; - } - u[i].val = u_val; - } - - /* compute the delta matrix */ - for( i = 0; i < ssize; i++ ) - { - float u_val = u[i].val; - float *delta_row = delta[i]; - float *cost_row = cost[i]; - - for( j = 0; j < dsize; j++ ) - { - delta_row[j] = cost_row[j] - u_val - v[j].val; - } - } - - /* find the basic variables */ - do - { - /* find the smallest delta[i][j] */ - min_i = -1; - min_delta = CV_EMD_INF; - prev_u = &u_head; - for( cur_u = u_head.next; cur_u != 0; cur_u = cur_u->next ) - { - i = (int)(cur_u - u); - float *delta_row = delta[i]; - - prev_v = &v_head; - for( cur_v = v_head.next; cur_v != 0; cur_v = cur_v->next ) - { - j = (int)(cur_v - v); - if( min_delta > delta_row[j] ) - { - min_delta = delta_row[j]; - min_i = i; - min_j = j; - prev_u_min_i = prev_u; - prev_v_min_j = prev_v; - } - prev_v = cur_v; - } - prev_u = cur_u; - } - - if( min_i < 0 ) - break; - - /* add x[min_i][min_j] to the basis, and adjust supplies and cost */ - remember = prev_u_min_i->next; - icvAddBasicVariable( state, min_i, min_j, prev_u_min_i, prev_v_min_j, &u_head ); - - /* update the necessary delta[][] */ - if( remember == prev_u_min_i->next ) /* line min_i was deleted */ - { - for( cur_v = v_head.next; cur_v != 0; cur_v = cur_v->next ) - { - j = (int)(cur_v - v); - if( cur_v->val == cost[min_i][j] ) /* column j needs updating */ - { - float max_val = -CV_EMD_INF; - - /* find the new maximum value in the column */ - for( cur_u = u_head.next; cur_u != 0; cur_u = cur_u->next ) - { - float temp = cost[cur_u - u][j]; - - if( max_val < temp ) - max_val = temp; - } - - /* if needed, adjust the relevant delta[*][j] */ - diff = max_val - cur_v->val; - cur_v->val = max_val; - if( fabs( diff ) < eps ) - { - for( cur_u = u_head.next; cur_u != 0; cur_u = cur_u->next ) - delta[cur_u - u][j] += diff; - } - } - } - } - else /* column min_j was deleted */ - { - for( cur_u = u_head.next; cur_u != 0; cur_u = cur_u->next ) - { - i = (int)(cur_u - u); - if( cur_u->val == cost[i][min_j] ) /* row i needs updating */ - { - float max_val = -CV_EMD_INF; - - /* find the new maximum value in the row */ - for( cur_v = v_head.next; cur_v != 0; cur_v = cur_v->next ) - { - float temp = cost[i][cur_v - v]; - - if( max_val < temp ) - max_val = temp; - } - - /* if needed, adjust the relevant delta[i][*] */ - diff = max_val - cur_u->val; - cur_u->val = max_val; - - if( fabs( diff ) < eps ) - { - for( cur_v = v_head.next; cur_v != 0; cur_v = cur_v->next ) - delta[i][cur_v - v] += diff; - } - } - } - } - } - while( u_head.next != 0 || v_head.next != 0 ); -} - - - -/****************************************************************************************\ -* icvAddBasicVariable * -\****************************************************************************************/ -static void -icvAddBasicVariable( CvEMDState * state, - int min_i, int min_j, - CvNode1D * prev_u_min_i, CvNode1D * prev_v_min_j, CvNode1D * u_head ) -{ - float temp; - CvNode2D *end_x = state->end_x; - - if( state->s[min_i] < state->d[min_j] + state->weight * CV_EMD_EPS ) - { /* supply exhausted */ - temp = state->s[min_i]; - state->s[min_i] = 0; - state->d[min_j] -= temp; - } - else /* demand exhausted */ - { - temp = state->d[min_j]; - state->d[min_j] = 0; - state->s[min_i] -= temp; - } - - /* x(min_i,min_j) is a basic variable */ - state->is_x[min_i][min_j] = 1; - - end_x->val = temp; - end_x->i = min_i; - end_x->j = min_j; - end_x->next[0] = state->rows_x[min_i]; - end_x->next[1] = state->cols_x[min_j]; - state->rows_x[min_i] = end_x; - state->cols_x[min_j] = end_x; - state->end_x = end_x + 1; - - /* delete supply row only if the empty, and if not last row */ - if( state->s[min_i] == 0 && u_head->next->next != 0 ) - prev_u_min_i->next = prev_u_min_i->next->next; /* remove row from list */ - else - prev_v_min_j->next = prev_v_min_j->next->next; /* remove column from list */ -} - - -/****************************************************************************************\ -* standard metrics * -\****************************************************************************************/ -static float -icvDistL1( const float *x, const float *y, void *user_param ) -{ - int i, dims = (int)(size_t)user_param; - double s = 0; - - for( i = 0; i < dims; i++ ) - { - double t = x[i] - y[i]; - - s += fabs( t ); - } - return (float)s; -} - -static float -icvDistL2( const float *x, const float *y, void *user_param ) -{ - int i, dims = (int)(size_t)user_param; - double s = 0; - - for( i = 0; i < dims; i++ ) - { - double t = x[i] - y[i]; - - s += t * t; - } - return cvSqrt( (float)s ); -} - -static float -icvDistC( const float *x, const float *y, void *user_param ) -{ - int i, dims = (int)(size_t)user_param; - double s = 0; - - for( i = 0; i < dims; i++ ) - { - double t = fabs( x[i] - y[i] ); - - if( s < t ) - s = t; - } - return (float)s; -} - - -float cv::EMD( InputArray _signature1, InputArray _signature2, - int distType, InputArray _cost, - float* lowerBound, OutputArray _flow ) -{ - Mat signature1 = _signature1.getMat(), signature2 = _signature2.getMat(); - Mat cost = _cost.getMat(), flow; - - CvMat _csignature1 = signature1; - CvMat _csignature2 = signature2; - CvMat _ccost = cost, _cflow; - if( _flow.needed() ) - { - _flow.create(signature1.rows, signature2.rows, CV_32F); - flow = _flow.getMat(); - _cflow = flow; - } - - return cvCalcEMD2( &_csignature1, &_csignature2, distType, 0, cost.empty() ? 0 : &_ccost, - _flow.needed() ? &_cflow : 0, lowerBound, 0 ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/featureselect.cpp b/modules/imgproc/src/featureselect.cpp deleted file mode 100644 index 827fd40..0000000 --- a/modules/imgproc/src/featureselect.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" -#include -#include - -namespace cv -{ - -template struct greaterThanPtr -{ - bool operator()(const T* a, const T* b) const { return *a > *b; } -}; - -} - -void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners, - int maxCorners, double qualityLevel, double minDistance, - InputArray _mask, int blockSize, - bool useHarrisDetector, double harrisK ) -{ - Mat image = _image.getMat(), mask = _mask.getMat(); - - CV_Assert( qualityLevel > 0 && minDistance >= 0 && maxCorners >= 0 ); - CV_Assert( mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size()) ); - - Mat eig, tmp; - if( useHarrisDetector ) - cornerHarris( image, eig, blockSize, 3, harrisK ); - else - cornerMinEigenVal( image, eig, blockSize, 3 ); - - double maxVal = 0; - minMaxLoc( eig, 0, &maxVal, 0, 0, mask ); - threshold( eig, eig, maxVal*qualityLevel, 0, THRESH_TOZERO ); - dilate( eig, tmp, Mat()); - - Size imgsize = image.size(); - - vector tmpCorners; - - // collect list of pointers to features - put them into temporary image - for( int y = 1; y < imgsize.height - 1; y++ ) - { - const float* eig_data = (const float*)eig.ptr(y); - const float* tmp_data = (const float*)tmp.ptr(y); - const uchar* mask_data = mask.data ? mask.ptr(y) : 0; - - for( int x = 1; x < imgsize.width - 1; x++ ) - { - float val = eig_data[x]; - if( val != 0 && val == tmp_data[x] && (!mask_data || mask_data[x]) ) - tmpCorners.push_back(eig_data + x); - } - } - - sort( tmpCorners, greaterThanPtr() ); - vector corners; - size_t i, j, total = tmpCorners.size(), ncorners = 0; - - if(minDistance >= 1) - { - // Partition the image into larger grids - int w = image.cols; - int h = image.rows; - - const int cell_size = cvRound(minDistance); - const int grid_width = (w + cell_size - 1) / cell_size; - const int grid_height = (h + cell_size - 1) / cell_size; - - std::vector > grid(grid_width*grid_height); - - minDistance *= minDistance; - - for( i = 0; i < total; i++ ) - { - int ofs = (int)((const uchar*)tmpCorners[i] - eig.data); - int y = (int)(ofs / eig.step); - int x = (int)((ofs - y*eig.step)/sizeof(float)); - - bool good = true; - - int x_cell = x / cell_size; - int y_cell = y / cell_size; - - int x1 = x_cell - 1; - int y1 = y_cell - 1; - int x2 = x_cell + 1; - int y2 = y_cell + 1; - - // boundary check - x1 = std::max(0, x1); - y1 = std::max(0, y1); - x2 = std::min(grid_width-1, x2); - y2 = std::min(grid_height-1, y2); - - for( int yy = y1; yy <= y2; yy++ ) - { - for( int xx = x1; xx <= x2; xx++ ) - { - vector &m = grid[yy*grid_width + xx]; - - if( m.size() ) - { - for(j = 0; j < m.size(); j++) - { - float dx = x - m[j].x; - float dy = y - m[j].y; - - if( dx*dx + dy*dy < minDistance ) - { - good = false; - goto break_out; - } - } - } - } - } - - break_out: - - if(good) - { - // printf("%d: %d %d -> %d %d, %d, %d -- %d %d %d %d, %d %d, c=%d\n", - // i,x, y, x_cell, y_cell, (int)minDistance, cell_size,x1,y1,x2,y2, grid_width,grid_height,c); - grid[y_cell*grid_width + x_cell].push_back(Point2f((float)x, (float)y)); - - corners.push_back(Point2f((float)x, (float)y)); - ++ncorners; - - if( maxCorners > 0 && (int)ncorners == maxCorners ) - break; - } - } - } - else - { - for( i = 0; i < total; i++ ) - { - int ofs = (int)((const uchar*)tmpCorners[i] - eig.data); - int y = (int)(ofs / eig.step); - int x = (int)((ofs - y*eig.step)/sizeof(float)); - - corners.push_back(Point2f((float)x, (float)y)); - ++ncorners; - if( maxCorners > 0 && (int)ncorners == maxCorners ) - break; - } - } - - Mat(corners).convertTo(_corners, _corners.fixedType() ? _corners.type() : CV_32F); - - /* - for( i = 0; i < total; i++ ) - { - int ofs = (int)((const uchar*)tmpCorners[i] - eig.data); - int y = (int)(ofs / eig.step); - int x = (int)((ofs - y*eig.step)/sizeof(float)); - - if( minDistance > 0 ) - { - for( j = 0; j < ncorners; j++ ) - { - float dx = x - corners[j].x; - float dy = y - corners[j].y; - if( dx*dx + dy*dy < minDistance ) - break; - } - if( j < ncorners ) - continue; - } - - corners.push_back(Point2f((float)x, (float)y)); - ++ncorners; - if( maxCorners > 0 && (int)ncorners == maxCorners ) - break; - } -*/ -} - -CV_IMPL void -cvGoodFeaturesToTrack( const void* _image, void*, void*, - CvPoint2D32f* _corners, int *_corner_count, - double quality_level, double min_distance, - const void* _maskImage, int block_size, - int use_harris, double harris_k ) -{ - cv::Mat image = cv::cvarrToMat(_image), mask; - cv::vector corners; - - if( _maskImage ) - mask = cv::cvarrToMat(_maskImage); - - CV_Assert( _corners && _corner_count ); - cv::goodFeaturesToTrack( image, corners, *_corner_count, quality_level, - min_distance, mask, block_size, use_harris != 0, harris_k ); - - size_t i, ncorners = corners.size(); - for( i = 0; i < ncorners; i++ ) - _corners[i] = corners[i]; - *_corner_count = (int)ncorners; -} - -/* End of file. */ diff --git a/modules/imgproc/src/filter.cpp b/modules/imgproc/src/filter.cpp deleted file mode 100644 index 1d05d3c..0000000 --- a/modules/imgproc/src/filter.cpp +++ /dev/null @@ -1,3348 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/****************************************************************************************\ - Base Image Filter -\****************************************************************************************/ - -#if defined HAVE_IPP && IPP_VERSION_MAJOR*100 + IPP_VERSION_MINOR >= 701 -#define USE_IPP_SEP_FILTERS 1 -#else -#undef USE_IPP_SEP_FILTERS -#endif - -/* - Various border types, image boundaries are denoted with '|' - - * BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh - * BORDER_REFLECT: fedcba|abcdefgh|hgfedcb - * BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba - * BORDER_WRAP: cdefgh|abcdefgh|abcdefg - * BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified 'i' - */ -int cv::borderInterpolate( int p, int len, int borderType ) -{ - if( (unsigned)p < (unsigned)len ) - ; - else if( borderType == BORDER_REPLICATE ) - p = p < 0 ? 0 : len - 1; - else if( borderType == BORDER_REFLECT || borderType == BORDER_REFLECT_101 ) - { - int delta = borderType == BORDER_REFLECT_101; - if( len == 1 ) - return 0; - do - { - if( p < 0 ) - p = -p - 1 + delta; - else - p = len - 1 - (p - len) - delta; - } - while( (unsigned)p >= (unsigned)len ); - } - else if( borderType == BORDER_WRAP ) - { - if( p < 0 ) - p -= ((p-len+1)/len)*len; - if( p >= len ) - p %= len; - } - else if( borderType == BORDER_CONSTANT ) - p = -1; - else - CV_Error( CV_StsBadArg, "Unknown/unsupported border type" ); - return p; -} - - -namespace cv -{ - -BaseRowFilter::BaseRowFilter() { ksize = anchor = -1; } -BaseRowFilter::~BaseRowFilter() {} - -BaseColumnFilter::BaseColumnFilter() { ksize = anchor = -1; } -BaseColumnFilter::~BaseColumnFilter() {} -void BaseColumnFilter::reset() {} - -BaseFilter::BaseFilter() { ksize = Size(-1,-1); anchor = Point(-1,-1); } -BaseFilter::~BaseFilter() {} -void BaseFilter::reset() {} - -FilterEngine::FilterEngine() -{ - srcType = dstType = bufType = -1; - rowBorderType = columnBorderType = BORDER_REPLICATE; - bufStep = startY = startY0 = endY = rowCount = dstY = 0; - maxWidth = 0; - - wholeSize = Size(-1,-1); -} - - -FilterEngine::FilterEngine( const Ptr& _filter2D, - const Ptr& _rowFilter, - const Ptr& _columnFilter, - int _srcType, int _dstType, int _bufType, - int _rowBorderType, int _columnBorderType, - const Scalar& _borderValue ) -{ - init(_filter2D, _rowFilter, _columnFilter, _srcType, _dstType, _bufType, - _rowBorderType, _columnBorderType, _borderValue); -} - -FilterEngine::~FilterEngine() -{ -} - - -void FilterEngine::init( const Ptr& _filter2D, - const Ptr& _rowFilter, - const Ptr& _columnFilter, - int _srcType, int _dstType, int _bufType, - int _rowBorderType, int _columnBorderType, - const Scalar& _borderValue ) -{ - _srcType = CV_MAT_TYPE(_srcType); - _bufType = CV_MAT_TYPE(_bufType); - _dstType = CV_MAT_TYPE(_dstType); - - srcType = _srcType; - int srcElemSize = (int)getElemSize(srcType); - dstType = _dstType; - bufType = _bufType; - - filter2D = _filter2D; - rowFilter = _rowFilter; - columnFilter = _columnFilter; - - if( _columnBorderType < 0 ) - _columnBorderType = _rowBorderType; - - rowBorderType = _rowBorderType; - columnBorderType = _columnBorderType; - - CV_Assert( columnBorderType != BORDER_WRAP ); - - if( isSeparable() ) - { - CV_Assert( !rowFilter.empty() && !columnFilter.empty() ); - ksize = Size(rowFilter->ksize, columnFilter->ksize); - anchor = Point(rowFilter->anchor, columnFilter->anchor); - } - else - { - CV_Assert( bufType == srcType ); - ksize = filter2D->ksize; - anchor = filter2D->anchor; - } - - CV_Assert( 0 <= anchor.x && anchor.x < ksize.width && - 0 <= anchor.y && anchor.y < ksize.height ); - - borderElemSize = srcElemSize/(CV_MAT_DEPTH(srcType) >= CV_32S ? sizeof(int) : 1); - int borderLength = std::max(ksize.width - 1, 1); - borderTab.resize(borderLength*borderElemSize); - - maxWidth = bufStep = 0; - constBorderRow.clear(); - - if( rowBorderType == BORDER_CONSTANT || columnBorderType == BORDER_CONSTANT ) - { - constBorderValue.resize(srcElemSize*borderLength); - int srcType1 = CV_MAKETYPE(CV_MAT_DEPTH(srcType), MIN(CV_MAT_CN(srcType), 4)); - scalarToRawData(_borderValue, &constBorderValue[0], srcType1, - borderLength*CV_MAT_CN(srcType)); - } - - wholeSize = Size(-1,-1); -} - -static const int VEC_ALIGN = CV_MALLOC_ALIGN; - -int FilterEngine::start(Size _wholeSize, Rect _roi, int _maxBufRows) -{ - int i, j; - - wholeSize = _wholeSize; - roi = _roi; - CV_Assert( roi.x >= 0 && roi.y >= 0 && roi.width >= 0 && roi.height >= 0 && - roi.x + roi.width <= wholeSize.width && - roi.y + roi.height <= wholeSize.height ); - - int esz = (int)getElemSize(srcType); - int bufElemSize = (int)getElemSize(bufType); - const uchar* constVal = !constBorderValue.empty() ? &constBorderValue[0] : 0; - - if( _maxBufRows < 0 ) - _maxBufRows = ksize.height + 3; - _maxBufRows = std::max(_maxBufRows, std::max(anchor.y, ksize.height-anchor.y-1)*2+1); - - if( maxWidth < roi.width || _maxBufRows != (int)rows.size() ) - { - rows.resize(_maxBufRows); - maxWidth = std::max(maxWidth, roi.width); - int cn = CV_MAT_CN(srcType); - srcRow.resize(esz*(maxWidth + ksize.width - 1)); - if( columnBorderType == BORDER_CONSTANT ) - { - constBorderRow.resize(getElemSize(bufType)*(maxWidth + ksize.width - 1 + VEC_ALIGN)); - uchar *dst = alignPtr(&constBorderRow[0], VEC_ALIGN), *tdst; - int n = (int)constBorderValue.size(), N; - N = (maxWidth + ksize.width - 1)*esz; - tdst = isSeparable() ? &srcRow[0] : dst; - - for( i = 0; i < N; i += n ) - { - n = std::min( n, N - i ); - for(j = 0; j < n; j++) - tdst[i+j] = constVal[j]; - } - - if( isSeparable() ) - (*rowFilter)(&srcRow[0], dst, maxWidth, cn); - } - - int maxBufStep = bufElemSize*(int)alignSize(maxWidth + - (!isSeparable() ? ksize.width - 1 : 0),VEC_ALIGN); - ringBuf.resize(maxBufStep*rows.size()+VEC_ALIGN); - } - - // adjust bufstep so that the used part of the ring buffer stays compact in memory - bufStep = bufElemSize*(int)alignSize(roi.width + (!isSeparable() ? ksize.width - 1 : 0),16); - - dx1 = std::max(anchor.x - roi.x, 0); - dx2 = std::max(ksize.width - anchor.x - 1 + roi.x + roi.width - wholeSize.width, 0); - - // recompute border tables - if( dx1 > 0 || dx2 > 0 ) - { - if( rowBorderType == BORDER_CONSTANT ) - { - int nr = isSeparable() ? 1 : (int)rows.size(); - for( i = 0; i < nr; i++ ) - { - uchar* dst = isSeparable() ? &srcRow[0] : alignPtr(&ringBuf[0],VEC_ALIGN) + bufStep*i; - memcpy( dst, constVal, dx1*esz ); - memcpy( dst + (roi.width + ksize.width - 1 - dx2)*esz, constVal, dx2*esz ); - } - } - else - { - int xofs1 = std::min(roi.x, anchor.x) - roi.x; - - int btab_esz = borderElemSize, wholeWidth = wholeSize.width; - int* btab = (int*)&borderTab[0]; - - for( i = 0; i < dx1; i++ ) - { - int p0 = (borderInterpolate(i-dx1, wholeWidth, rowBorderType) + xofs1)*btab_esz; - for( j = 0; j < btab_esz; j++ ) - btab[i*btab_esz + j] = p0 + j; - } - - for( i = 0; i < dx2; i++ ) - { - int p0 = (borderInterpolate(wholeWidth + i, wholeWidth, rowBorderType) + xofs1)*btab_esz; - for( j = 0; j < btab_esz; j++ ) - btab[(i + dx1)*btab_esz + j] = p0 + j; - } - } - } - - rowCount = dstY = 0; - startY = startY0 = std::max(roi.y - anchor.y, 0); - endY = std::min(roi.y + roi.height + ksize.height - anchor.y - 1, wholeSize.height); - if( !columnFilter.empty() ) - columnFilter->reset(); - if( !filter2D.empty() ) - filter2D->reset(); - - return startY; -} - - -int FilterEngine::start(const Mat& src, const Rect& _srcRoi, - bool isolated, int maxBufRows) -{ - Rect srcRoi = _srcRoi; - - if( srcRoi == Rect(0,0,-1,-1) ) - srcRoi = Rect(0,0,src.cols,src.rows); - - CV_Assert( srcRoi.x >= 0 && srcRoi.y >= 0 && - srcRoi.width >= 0 && srcRoi.height >= 0 && - srcRoi.x + srcRoi.width <= src.cols && - srcRoi.y + srcRoi.height <= src.rows ); - - Point ofs; - Size wsz(src.cols, src.rows); - if( !isolated ) - src.locateROI( wsz, ofs ); - start( wsz, srcRoi + ofs, maxBufRows ); - - return startY - ofs.y; -} - - -int FilterEngine::remainingInputRows() const -{ - return endY - startY - rowCount; -} - -int FilterEngine::remainingOutputRows() const -{ - return roi.height - dstY; -} - -int FilterEngine::proceed( const uchar* src, int srcstep, int count, - uchar* dst, int dststep ) -{ - CV_Assert( wholeSize.width > 0 && wholeSize.height > 0 ); - - const int *btab = &borderTab[0]; - int esz = (int)getElemSize(srcType), btab_esz = borderElemSize; - uchar** brows = &rows[0]; - int bufRows = (int)rows.size(); - int cn = CV_MAT_CN(bufType); - int width = roi.width, kwidth = ksize.width; - int kheight = ksize.height, ay = anchor.y; - int _dx1 = dx1, _dx2 = dx2; - int width1 = roi.width + kwidth - 1; - int xofs1 = std::min(roi.x, anchor.x); - bool isSep = isSeparable(); - bool makeBorder = (_dx1 > 0 || _dx2 > 0) && rowBorderType != BORDER_CONSTANT; - int dy = 0, i = 0; - - src -= xofs1*esz; - count = std::min(count, remainingInputRows()); - - CV_Assert( src && dst && count > 0 ); - - for(;; dst += dststep*i, dy += i) - { - int dcount = bufRows - ay - startY - rowCount + roi.y; - dcount = dcount > 0 ? dcount : bufRows - kheight + 1; - dcount = std::min(dcount, count); - count -= dcount; - for( ; dcount-- > 0; src += srcstep ) - { - int bi = (startY - startY0 + rowCount) % bufRows; - uchar* brow = alignPtr(&ringBuf[0], VEC_ALIGN) + bi*bufStep; - uchar* row = isSep ? &srcRow[0] : brow; - - if( ++rowCount > bufRows ) - { - --rowCount; - ++startY; - } - - memcpy( row + _dx1*esz, src, (width1 - _dx2 - _dx1)*esz ); - - if( makeBorder ) - { - if( btab_esz*(int)sizeof(int) == esz ) - { - const int* isrc = (const int*)src; - int* irow = (int*)row; - - for( i = 0; i < _dx1*btab_esz; i++ ) - irow[i] = isrc[btab[i]]; - for( i = 0; i < _dx2*btab_esz; i++ ) - irow[i + (width1 - _dx2)*btab_esz] = isrc[btab[i+_dx1*btab_esz]]; - } - else - { - for( i = 0; i < _dx1*esz; i++ ) - row[i] = src[btab[i]]; - for( i = 0; i < _dx2*esz; i++ ) - row[i + (width1 - _dx2)*esz] = src[btab[i+_dx1*esz]]; - } - } - - if( isSep ) - (*rowFilter)(row, brow, width, CV_MAT_CN(srcType)); - } - - int max_i = std::min(bufRows, roi.height - (dstY + dy) + (kheight - 1)); - for( i = 0; i < max_i; i++ ) - { - int srcY = borderInterpolate(dstY + dy + i + roi.y - ay, - wholeSize.height, columnBorderType); - if( srcY < 0 ) // can happen only with constant border type - brows[i] = alignPtr(&constBorderRow[0], VEC_ALIGN); - else - { - CV_Assert( srcY >= startY ); - if( srcY >= startY + rowCount ) - break; - int bi = (srcY - startY0) % bufRows; - brows[i] = alignPtr(&ringBuf[0], VEC_ALIGN) + bi*bufStep; - } - } - if( i < kheight ) - break; - i -= kheight - 1; - if( isSeparable() ) - (*columnFilter)((const uchar**)brows, dst, dststep, i, roi.width*cn); - else - (*filter2D)((const uchar**)brows, dst, dststep, i, roi.width, cn); - } - - dstY += dy; - CV_Assert( dstY <= roi.height ); - return dy; -} - - -void FilterEngine::apply(const Mat& src, Mat& dst, - const Rect& _srcRoi, Point dstOfs, bool isolated) -{ - CV_Assert( src.type() == srcType && dst.type() == dstType ); - - Rect srcRoi = _srcRoi; - if( srcRoi == Rect(0,0,-1,-1) ) - srcRoi = Rect(0,0,src.cols,src.rows); - - if( srcRoi.area() == 0 ) - return; - - CV_Assert( dstOfs.x >= 0 && dstOfs.y >= 0 && - dstOfs.x + srcRoi.width <= dst.cols && - dstOfs.y + srcRoi.height <= dst.rows ); - - int y = start(src, srcRoi, isolated); - proceed( src.data + y*src.step, (int)src.step, endY - startY, - dst.data + dstOfs.y*dst.step + dstOfs.x*dst.elemSize(), (int)dst.step ); -} - -} - -/****************************************************************************************\ -* Separable linear filter * -\****************************************************************************************/ - -int cv::getKernelType(InputArray filter_kernel, Point anchor) -{ - Mat _kernel = filter_kernel.getMat(); - CV_Assert( _kernel.channels() == 1 ); - int i, sz = _kernel.rows*_kernel.cols; - - Mat kernel; - _kernel.convertTo(kernel, CV_64F); - - const double* coeffs = (double*)kernel.data; - double sum = 0; - int type = KERNEL_SMOOTH + KERNEL_INTEGER; - if( (_kernel.rows == 1 || _kernel.cols == 1) && - anchor.x*2 + 1 == _kernel.cols && - anchor.y*2 + 1 == _kernel.rows ) - type |= (KERNEL_SYMMETRICAL + KERNEL_ASYMMETRICAL); - - for( i = 0; i < sz; i++ ) - { - double a = coeffs[i], b = coeffs[sz - i - 1]; - if( a != b ) - type &= ~KERNEL_SYMMETRICAL; - if( a != -b ) - type &= ~KERNEL_ASYMMETRICAL; - if( a < 0 ) - type &= ~KERNEL_SMOOTH; - if( a != saturate_cast(a) ) - type &= ~KERNEL_INTEGER; - sum += a; - } - - if( fabs(sum - 1) > FLT_EPSILON*(fabs(sum) + 1) ) - type &= ~KERNEL_SMOOTH; - return type; -} - - -namespace cv -{ - -struct RowNoVec -{ - RowNoVec() {} - RowNoVec(const Mat&) {} - int operator()(const uchar*, uchar*, int, int) const { return 0; } -}; - -struct ColumnNoVec -{ - ColumnNoVec() {} - ColumnNoVec(const Mat&, int, int, double) {} - int operator()(const uchar**, uchar*, int) const { return 0; } -}; - -struct SymmRowSmallNoVec -{ - SymmRowSmallNoVec() {} - SymmRowSmallNoVec(const Mat&, int) {} - int operator()(const uchar*, uchar*, int, int) const { return 0; } -}; - -struct SymmColumnSmallNoVec -{ - SymmColumnSmallNoVec() {} - SymmColumnSmallNoVec(const Mat&, int, int, double) {} - int operator()(const uchar**, uchar*, int) const { return 0; } -}; - -struct FilterNoVec -{ - FilterNoVec() {} - FilterNoVec(const Mat&, int, double) {} - int operator()(const uchar**, uchar*, int) const { return 0; } -}; - - -#if CV_SSE2 - -///////////////////////////////////// 8u-16s & 8u-8u ////////////////////////////////// - -struct RowVec_8u32s -{ - RowVec_8u32s() { smallValues = false; } - RowVec_8u32s( const Mat& _kernel ) - { - kernel = _kernel; - smallValues = true; - int k, ksize = kernel.rows + kernel.cols - 1; - for( k = 0; k < ksize; k++ ) - { - int v = ((const int*)kernel.data)[k]; - if( v < SHRT_MIN || v > SHRT_MAX ) - { - smallValues = false; - break; - } - } - } - - int operator()(const uchar* _src, uchar* _dst, int width, int cn) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int i = 0, k, _ksize = kernel.rows + kernel.cols - 1; - int* dst = (int*)_dst; - const int* _kx = (const int*)kernel.data; - width *= cn; - - if( smallValues ) - { - for( ; i <= width - 16; i += 16 ) - { - const uchar* src = _src + i; - __m128i f, z = _mm_setzero_si128(), s0 = z, s1 = z, s2 = z, s3 = z; - __m128i x0, x1, x2, x3; - - for( k = 0; k < _ksize; k++, src += cn ) - { - f = _mm_cvtsi32_si128(_kx[k]); - f = _mm_shuffle_epi32(f, 0); - f = _mm_packs_epi32(f, f); - - x0 = _mm_loadu_si128((const __m128i*)src); - x2 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - x1 = _mm_mulhi_epi16(x0, f); - x3 = _mm_mulhi_epi16(x2, f); - x0 = _mm_mullo_epi16(x0, f); - x2 = _mm_mullo_epi16(x2, f); - - s0 = _mm_add_epi32(s0, _mm_unpacklo_epi16(x0, x1)); - s1 = _mm_add_epi32(s1, _mm_unpackhi_epi16(x0, x1)); - s2 = _mm_add_epi32(s2, _mm_unpacklo_epi16(x2, x3)); - s3 = _mm_add_epi32(s3, _mm_unpackhi_epi16(x2, x3)); - } - - _mm_store_si128((__m128i*)(dst + i), s0); - _mm_store_si128((__m128i*)(dst + i + 4), s1); - _mm_store_si128((__m128i*)(dst + i + 8), s2); - _mm_store_si128((__m128i*)(dst + i + 12), s3); - } - - for( ; i <= width - 4; i += 4 ) - { - const uchar* src = _src + i; - __m128i f, z = _mm_setzero_si128(), s0 = z, x0, x1; - - for( k = 0; k < _ksize; k++, src += cn ) - { - f = _mm_cvtsi32_si128(_kx[k]); - f = _mm_shuffle_epi32(f, 0); - f = _mm_packs_epi32(f, f); - - x0 = _mm_cvtsi32_si128(*(const int*)src); - x0 = _mm_unpacklo_epi8(x0, z); - x1 = _mm_mulhi_epi16(x0, f); - x0 = _mm_mullo_epi16(x0, f); - s0 = _mm_add_epi32(s0, _mm_unpacklo_epi16(x0, x1)); - } - _mm_store_si128((__m128i*)(dst + i), s0); - } - } - return i; - } - - Mat kernel; - bool smallValues; -}; - - -struct SymmRowSmallVec_8u32s -{ - SymmRowSmallVec_8u32s() { smallValues = false; } - SymmRowSmallVec_8u32s( const Mat& _kernel, int _symmetryType ) - { - kernel = _kernel; - symmetryType = _symmetryType; - smallValues = true; - int k, ksize = kernel.rows + kernel.cols - 1; - for( k = 0; k < ksize; k++ ) - { - int v = ((const int*)kernel.data)[k]; - if( v < SHRT_MIN || v > SHRT_MAX ) - { - smallValues = false; - break; - } - } - } - - int operator()(const uchar* src, uchar* _dst, int width, int cn) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int i = 0, j, k, _ksize = kernel.rows + kernel.cols - 1; - int* dst = (int*)_dst; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const int* kx = (const int*)kernel.data + _ksize/2; - if( !smallValues ) - return 0; - - src += (_ksize/2)*cn; - width *= cn; - - __m128i z = _mm_setzero_si128(); - if( symmetrical ) - { - if( _ksize == 1 ) - return 0; - if( _ksize == 3 ) - { - if( kx[0] == 2 && kx[1] == 1 ) - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_si128((__m128i*)(src - cn)); - x1 = _mm_loadu_si128((__m128i*)src); - x2 = _mm_loadu_si128((__m128i*)(src + cn)); - y0 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - y1 = _mm_unpackhi_epi8(x1, z); - x1 = _mm_unpacklo_epi8(x1, z); - y2 = _mm_unpackhi_epi8(x2, z); - x2 = _mm_unpacklo_epi8(x2, z); - x0 = _mm_add_epi16(x0, _mm_add_epi16(_mm_add_epi16(x1, x1), x2)); - y0 = _mm_add_epi16(y0, _mm_add_epi16(_mm_add_epi16(y1, y1), y2)); - _mm_store_si128((__m128i*)(dst + i), _mm_unpacklo_epi16(x0, z)); - _mm_store_si128((__m128i*)(dst + i + 4), _mm_unpackhi_epi16(x0, z)); - _mm_store_si128((__m128i*)(dst + i + 8), _mm_unpacklo_epi16(y0, z)); - _mm_store_si128((__m128i*)(dst + i + 12), _mm_unpackhi_epi16(y0, z)); - } - else if( kx[0] == -2 && kx[1] == 1 ) - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_si128((__m128i*)(src - cn)); - x1 = _mm_loadu_si128((__m128i*)src); - x2 = _mm_loadu_si128((__m128i*)(src + cn)); - y0 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - y1 = _mm_unpackhi_epi8(x1, z); - x1 = _mm_unpacklo_epi8(x1, z); - y2 = _mm_unpackhi_epi8(x2, z); - x2 = _mm_unpacklo_epi8(x2, z); - x0 = _mm_add_epi16(x0, _mm_sub_epi16(x2, _mm_add_epi16(x1, x1))); - y0 = _mm_add_epi16(y0, _mm_sub_epi16(y2, _mm_add_epi16(y1, y1))); - _mm_store_si128((__m128i*)(dst + i), _mm_srai_epi32(_mm_unpacklo_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 4), _mm_srai_epi32(_mm_unpackhi_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 8), _mm_srai_epi32(_mm_unpacklo_epi16(y0, y0),16)); - _mm_store_si128((__m128i*)(dst + i + 12), _mm_srai_epi32(_mm_unpackhi_epi16(y0, y0),16)); - } - else - { - __m128i k0 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[0]), 0), - k1 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[1]), 0); - k0 = _mm_packs_epi32(k0, k0); - k1 = _mm_packs_epi32(k1, k1); - - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, t0, t1, z0, z1, z2, z3; - x0 = _mm_loadu_si128((__m128i*)(src - cn)); - x1 = _mm_loadu_si128((__m128i*)src); - x2 = _mm_loadu_si128((__m128i*)(src + cn)); - y0 = _mm_add_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x2, z)); - x0 = _mm_add_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x2, z)); - y1 = _mm_unpackhi_epi8(x1, z); - x1 = _mm_unpacklo_epi8(x1, z); - - t1 = _mm_mulhi_epi16(x1, k0); - t0 = _mm_mullo_epi16(x1, k0); - x2 = _mm_mulhi_epi16(x0, k1); - x0 = _mm_mullo_epi16(x0, k1); - z0 = _mm_unpacklo_epi16(t0, t1); - z1 = _mm_unpackhi_epi16(t0, t1); - z0 = _mm_add_epi32(z0, _mm_unpacklo_epi16(x0, x2)); - z1 = _mm_add_epi32(z1, _mm_unpackhi_epi16(x0, x2)); - - t1 = _mm_mulhi_epi16(y1, k0); - t0 = _mm_mullo_epi16(y1, k0); - y1 = _mm_mulhi_epi16(y0, k1); - y0 = _mm_mullo_epi16(y0, k1); - z2 = _mm_unpacklo_epi16(t0, t1); - z3 = _mm_unpackhi_epi16(t0, t1); - z2 = _mm_add_epi32(z2, _mm_unpacklo_epi16(y0, y1)); - z3 = _mm_add_epi32(z3, _mm_unpackhi_epi16(y0, y1)); - _mm_store_si128((__m128i*)(dst + i), z0); - _mm_store_si128((__m128i*)(dst + i + 4), z1); - _mm_store_si128((__m128i*)(dst + i + 8), z2); - _mm_store_si128((__m128i*)(dst + i + 12), z3); - } - } - } - else if( _ksize == 5 ) - { - if( kx[0] == -2 && kx[1] == 0 && kx[2] == 1 ) - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_si128((__m128i*)(src - cn*2)); - x1 = _mm_loadu_si128((__m128i*)src); - x2 = _mm_loadu_si128((__m128i*)(src + cn*2)); - y0 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - y1 = _mm_unpackhi_epi8(x1, z); - x1 = _mm_unpacklo_epi8(x1, z); - y2 = _mm_unpackhi_epi8(x2, z); - x2 = _mm_unpacklo_epi8(x2, z); - x0 = _mm_add_epi16(x0, _mm_sub_epi16(x2, _mm_add_epi16(x1, x1))); - y0 = _mm_add_epi16(y0, _mm_sub_epi16(y2, _mm_add_epi16(y1, y1))); - _mm_store_si128((__m128i*)(dst + i), _mm_srai_epi32(_mm_unpacklo_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 4), _mm_srai_epi32(_mm_unpackhi_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 8), _mm_srai_epi32(_mm_unpacklo_epi16(y0, y0),16)); - _mm_store_si128((__m128i*)(dst + i + 12), _mm_srai_epi32(_mm_unpackhi_epi16(y0, y0),16)); - } - else - { - __m128i k0 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[0]), 0), - k1 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[1]), 0), - k2 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[2]), 0); - k0 = _mm_packs_epi32(k0, k0); - k1 = _mm_packs_epi32(k1, k1); - k2 = _mm_packs_epi32(k2, k2); - - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, t0, t1, z0, z1, z2, z3; - x0 = _mm_loadu_si128((__m128i*)(src - cn)); - x1 = _mm_loadu_si128((__m128i*)src); - x2 = _mm_loadu_si128((__m128i*)(src + cn)); - y0 = _mm_add_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x2, z)); - x0 = _mm_add_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x2, z)); - y1 = _mm_unpackhi_epi8(x1, z); - x1 = _mm_unpacklo_epi8(x1, z); - - t1 = _mm_mulhi_epi16(x1, k0); - t0 = _mm_mullo_epi16(x1, k0); - x2 = _mm_mulhi_epi16(x0, k1); - x0 = _mm_mullo_epi16(x0, k1); - z0 = _mm_unpacklo_epi16(t0, t1); - z1 = _mm_unpackhi_epi16(t0, t1); - z0 = _mm_add_epi32(z0, _mm_unpacklo_epi16(x0, x2)); - z1 = _mm_add_epi32(z1, _mm_unpackhi_epi16(x0, x2)); - - t1 = _mm_mulhi_epi16(y1, k0); - t0 = _mm_mullo_epi16(y1, k0); - y1 = _mm_mulhi_epi16(y0, k1); - y0 = _mm_mullo_epi16(y0, k1); - z2 = _mm_unpacklo_epi16(t0, t1); - z3 = _mm_unpackhi_epi16(t0, t1); - z2 = _mm_add_epi32(z2, _mm_unpacklo_epi16(y0, y1)); - z3 = _mm_add_epi32(z3, _mm_unpackhi_epi16(y0, y1)); - - x0 = _mm_loadu_si128((__m128i*)(src - cn*2)); - x1 = _mm_loadu_si128((__m128i*)(src + cn*2)); - y1 = _mm_add_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x1, z)); - y0 = _mm_add_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x1, z)); - - t1 = _mm_mulhi_epi16(y0, k2); - t0 = _mm_mullo_epi16(y0, k2); - y0 = _mm_mullo_epi16(y1, k2); - y1 = _mm_mulhi_epi16(y1, k2); - z0 = _mm_add_epi32(z0, _mm_unpacklo_epi16(t0, t1)); - z1 = _mm_add_epi32(z1, _mm_unpackhi_epi16(t0, t1)); - z2 = _mm_add_epi32(z2, _mm_unpacklo_epi16(y0, y1)); - z3 = _mm_add_epi32(z3, _mm_unpackhi_epi16(y0, y1)); - - _mm_store_si128((__m128i*)(dst + i), z0); - _mm_store_si128((__m128i*)(dst + i + 4), z1); - _mm_store_si128((__m128i*)(dst + i + 8), z2); - _mm_store_si128((__m128i*)(dst + i + 12), z3); - } - } - } - } - else - { - if( _ksize == 3 ) - { - if( kx[0] == 0 && kx[1] == 1 ) - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, y0; - x0 = _mm_loadu_si128((__m128i*)(src + cn)); - x1 = _mm_loadu_si128((__m128i*)(src - cn)); - y0 = _mm_sub_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x1, z)); - x0 = _mm_sub_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x1, z)); - _mm_store_si128((__m128i*)(dst + i), _mm_srai_epi32(_mm_unpacklo_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 4), _mm_srai_epi32(_mm_unpackhi_epi16(x0, x0),16)); - _mm_store_si128((__m128i*)(dst + i + 8), _mm_srai_epi32(_mm_unpacklo_epi16(y0, y0),16)); - _mm_store_si128((__m128i*)(dst + i + 12), _mm_srai_epi32(_mm_unpackhi_epi16(y0, y0),16)); - } - else - { - __m128i k1 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[1]), 0); - k1 = _mm_packs_epi32(k1, k1); - - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, y0, y1, z0, z1, z2, z3; - x0 = _mm_loadu_si128((__m128i*)(src + cn)); - x1 = _mm_loadu_si128((__m128i*)(src - cn)); - y0 = _mm_sub_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x1, z)); - x0 = _mm_sub_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x1, z)); - - x1 = _mm_mulhi_epi16(x0, k1); - x0 = _mm_mullo_epi16(x0, k1); - z0 = _mm_unpacklo_epi16(x0, x1); - z1 = _mm_unpackhi_epi16(x0, x1); - - y1 = _mm_mulhi_epi16(y0, k1); - y0 = _mm_mullo_epi16(y0, k1); - z2 = _mm_unpacklo_epi16(y0, y1); - z3 = _mm_unpackhi_epi16(y0, y1); - _mm_store_si128((__m128i*)(dst + i), z0); - _mm_store_si128((__m128i*)(dst + i + 4), z1); - _mm_store_si128((__m128i*)(dst + i + 8), z2); - _mm_store_si128((__m128i*)(dst + i + 12), z3); - } - } - } - else if( _ksize == 5 ) - { - __m128i k0 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[0]), 0), - k1 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[1]), 0), - k2 = _mm_shuffle_epi32(_mm_cvtsi32_si128(kx[2]), 0); - k0 = _mm_packs_epi32(k0, k0); - k1 = _mm_packs_epi32(k1, k1); - k2 = _mm_packs_epi32(k2, k2); - - for( ; i <= width - 16; i += 16, src += 16 ) - { - __m128i x0, x1, x2, y0, y1, t0, t1, z0, z1, z2, z3; - x0 = _mm_loadu_si128((__m128i*)(src + cn)); - x2 = _mm_loadu_si128((__m128i*)(src - cn)); - y0 = _mm_sub_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x2, z)); - x0 = _mm_sub_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x2, z)); - - x2 = _mm_mulhi_epi16(x0, k1); - x0 = _mm_mullo_epi16(x0, k1); - z0 = _mm_unpacklo_epi16(x0, x2); - z1 = _mm_unpackhi_epi16(x0, x2); - y1 = _mm_mulhi_epi16(y0, k1); - y0 = _mm_mullo_epi16(y0, k1); - z2 = _mm_unpacklo_epi16(y0, y1); - z3 = _mm_unpackhi_epi16(y0, y1); - - x0 = _mm_loadu_si128((__m128i*)(src + cn*2)); - x1 = _mm_loadu_si128((__m128i*)(src - cn*2)); - y1 = _mm_sub_epi16(_mm_unpackhi_epi8(x0, z), _mm_unpackhi_epi8(x1, z)); - y0 = _mm_sub_epi16(_mm_unpacklo_epi8(x0, z), _mm_unpacklo_epi8(x1, z)); - - t1 = _mm_mulhi_epi16(y0, k2); - t0 = _mm_mullo_epi16(y0, k2); - y0 = _mm_mullo_epi16(y1, k2); - y1 = _mm_mulhi_epi16(y1, k2); - z0 = _mm_add_epi32(z0, _mm_unpacklo_epi16(t0, t1)); - z1 = _mm_add_epi32(z1, _mm_unpackhi_epi16(t0, t1)); - z2 = _mm_add_epi32(z2, _mm_unpacklo_epi16(y0, y1)); - z3 = _mm_add_epi32(z3, _mm_unpackhi_epi16(y0, y1)); - - _mm_store_si128((__m128i*)(dst + i), z0); - _mm_store_si128((__m128i*)(dst + i + 4), z1); - _mm_store_si128((__m128i*)(dst + i + 8), z2); - _mm_store_si128((__m128i*)(dst + i + 12), z3); - } - } - } - - src -= (_ksize/2)*cn; - kx -= _ksize/2; - for( ; i <= width - 4; i += 4, src += 4 ) - { - __m128i f, s0 = z, x0, x1; - - for( k = j = 0; k < _ksize; k++, j += cn ) - { - f = _mm_cvtsi32_si128(kx[k]); - f = _mm_shuffle_epi32(f, 0); - f = _mm_packs_epi32(f, f); - - x0 = _mm_cvtsi32_si128(*(const int*)(src + j)); - x0 = _mm_unpacklo_epi8(x0, z); - x1 = _mm_mulhi_epi16(x0, f); - x0 = _mm_mullo_epi16(x0, f); - s0 = _mm_add_epi32(s0, _mm_unpacklo_epi16(x0, x1)); - } - _mm_store_si128((__m128i*)(dst + i), s0); - } - - return i; - } - - Mat kernel; - int symmetryType; - bool smallValues; -}; - - -struct SymmColumnVec_32s8u -{ - SymmColumnVec_32s8u() { symmetryType=0; } - SymmColumnVec_32s8u(const Mat& _kernel, int _symmetryType, int _bits, double _delta) - { - symmetryType = _symmetryType; - _kernel.convertTo(kernel, CV_32F, 1./(1 << _bits), 0); - delta = (float)(_delta/(1 << _bits)); - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - } - - int operator()(const uchar** _src, uchar* dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int ksize2 = (kernel.rows + kernel.cols - 1)/2; - const float* ky = (const float*)kernel.data + ksize2; - int i = 0, k; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const int** src = (const int**)_src; - const __m128i *S, *S2; - __m128 d4 = _mm_set1_ps(delta); - - if( symmetrical ) - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128 s0, s1, s2, s3; - __m128i x0, x1; - S = (const __m128i*)(src[0] + i); - s0 = _mm_cvtepi32_ps(_mm_load_si128(S)); - s1 = _mm_cvtepi32_ps(_mm_load_si128(S+1)); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - s1 = _mm_add_ps(_mm_mul_ps(s1, f), d4); - s2 = _mm_cvtepi32_ps(_mm_load_si128(S+2)); - s3 = _mm_cvtepi32_ps(_mm_load_si128(S+3)); - s2 = _mm_add_ps(_mm_mul_ps(s2, f), d4); - s3 = _mm_add_ps(_mm_mul_ps(s3, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - S = (const __m128i*)(src[k] + i); - S2 = (const __m128i*)(src[-k] + i); - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_add_epi32(_mm_load_si128(S), _mm_load_si128(S2)); - x1 = _mm_add_epi32(_mm_load_si128(S+1), _mm_load_si128(S2+1)); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(_mm_cvtepi32_ps(x1), f)); - x0 = _mm_add_epi32(_mm_load_si128(S+2), _mm_load_si128(S2+2)); - x1 = _mm_add_epi32(_mm_load_si128(S+3), _mm_load_si128(S2+3)); - s2 = _mm_add_ps(s2, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(_mm_cvtepi32_ps(x1), f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - x1 = _mm_packs_epi32(_mm_cvtps_epi32(s2), _mm_cvtps_epi32(s3)); - x0 = _mm_packus_epi16(x0, x1); - _mm_storeu_si128((__m128i*)(dst + i), x0); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128i x0; - __m128 s0 = _mm_cvtepi32_ps(_mm_load_si128((const __m128i*)(src[0] + i))); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - S = (const __m128i*)(src[k] + i); - S2 = (const __m128i*)(src[-k] + i); - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_add_epi32(_mm_load_si128(S), _mm_load_si128(S2)); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - } - - x0 = _mm_cvtps_epi32(s0); - x0 = _mm_packs_epi32(x0, x0); - x0 = _mm_packus_epi16(x0, x0); - *(int*)(dst + i) = _mm_cvtsi128_si32(x0); - } - } - else - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f, s0 = d4, s1 = d4, s2 = d4, s3 = d4; - __m128i x0, x1; - - for( k = 1; k <= ksize2; k++ ) - { - S = (const __m128i*)(src[k] + i); - S2 = (const __m128i*)(src[-k] + i); - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_epi32(_mm_load_si128(S), _mm_load_si128(S2)); - x1 = _mm_sub_epi32(_mm_load_si128(S+1), _mm_load_si128(S2+1)); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(_mm_cvtepi32_ps(x1), f)); - x0 = _mm_sub_epi32(_mm_load_si128(S+2), _mm_load_si128(S2+2)); - x1 = _mm_sub_epi32(_mm_load_si128(S+3), _mm_load_si128(S2+3)); - s2 = _mm_add_ps(s2, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(_mm_cvtepi32_ps(x1), f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - x1 = _mm_packs_epi32(_mm_cvtps_epi32(s2), _mm_cvtps_epi32(s3)); - x0 = _mm_packus_epi16(x0, x1); - _mm_storeu_si128((__m128i*)(dst + i), x0); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f, s0 = d4; - __m128i x0; - - for( k = 1; k <= ksize2; k++ ) - { - S = (const __m128i*)(src[k] + i); - S2 = (const __m128i*)(src[-k] + i); - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_epi32(_mm_load_si128(S), _mm_load_si128(S2)); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0), f)); - } - - x0 = _mm_cvtps_epi32(s0); - x0 = _mm_packs_epi32(x0, x0); - x0 = _mm_packus_epi16(x0, x0); - *(int*)(dst + i) = _mm_cvtsi128_si32(x0); - } - } - - return i; - } - - int symmetryType; - float delta; - Mat kernel; -}; - - -struct SymmColumnSmallVec_32s16s -{ - SymmColumnSmallVec_32s16s() { symmetryType=0; } - SymmColumnSmallVec_32s16s(const Mat& _kernel, int _symmetryType, int _bits, double _delta) - { - symmetryType = _symmetryType; - _kernel.convertTo(kernel, CV_32F, 1./(1 << _bits), 0); - delta = (float)(_delta/(1 << _bits)); - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - } - - int operator()(const uchar** _src, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int ksize2 = (kernel.rows + kernel.cols - 1)/2; - const float* ky = (const float*)kernel.data + ksize2; - int i = 0; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const int** src = (const int**)_src; - const int *S0 = src[-1], *S1 = src[0], *S2 = src[1]; - short* dst = (short*)_dst; - __m128 df4 = _mm_set1_ps(delta); - __m128i d4 = _mm_cvtps_epi32(df4); - - if( symmetrical ) - { - if( ky[0] == 2 && ky[1] == 1 ) - { - for( ; i <= width - 8; i += 8 ) - { - __m128i s0, s1, s2, s3, s4, s5; - s0 = _mm_load_si128((__m128i*)(S0 + i)); - s1 = _mm_load_si128((__m128i*)(S0 + i + 4)); - s2 = _mm_load_si128((__m128i*)(S1 + i)); - s3 = _mm_load_si128((__m128i*)(S1 + i + 4)); - s4 = _mm_load_si128((__m128i*)(S2 + i)); - s5 = _mm_load_si128((__m128i*)(S2 + i + 4)); - s0 = _mm_add_epi32(s0, _mm_add_epi32(s4, _mm_add_epi32(s2, s2))); - s1 = _mm_add_epi32(s1, _mm_add_epi32(s5, _mm_add_epi32(s3, s3))); - s0 = _mm_add_epi32(s0, d4); - s1 = _mm_add_epi32(s1, d4); - _mm_storeu_si128((__m128i*)(dst + i), _mm_packs_epi32(s0, s1)); - } - } - else if( ky[0] == -2 && ky[1] == 1 ) - { - for( ; i <= width - 8; i += 8 ) - { - __m128i s0, s1, s2, s3, s4, s5; - s0 = _mm_load_si128((__m128i*)(S0 + i)); - s1 = _mm_load_si128((__m128i*)(S0 + i + 4)); - s2 = _mm_load_si128((__m128i*)(S1 + i)); - s3 = _mm_load_si128((__m128i*)(S1 + i + 4)); - s4 = _mm_load_si128((__m128i*)(S2 + i)); - s5 = _mm_load_si128((__m128i*)(S2 + i + 4)); - s0 = _mm_add_epi32(s0, _mm_sub_epi32(s4, _mm_add_epi32(s2, s2))); - s1 = _mm_add_epi32(s1, _mm_sub_epi32(s5, _mm_add_epi32(s3, s3))); - s0 = _mm_add_epi32(s0, d4); - s1 = _mm_add_epi32(s1, d4); - _mm_storeu_si128((__m128i*)(dst + i), _mm_packs_epi32(s0, s1)); - } - } - else - { - __m128 k0 = _mm_set1_ps(ky[0]), k1 = _mm_set1_ps(ky[1]); - for( ; i <= width - 8; i += 8 ) - { - __m128 s0, s1; - s0 = _mm_cvtepi32_ps(_mm_load_si128((__m128i*)(S1 + i))); - s1 = _mm_cvtepi32_ps(_mm_load_si128((__m128i*)(S1 + i + 4))); - s0 = _mm_add_ps(_mm_mul_ps(s0, k0), df4); - s1 = _mm_add_ps(_mm_mul_ps(s1, k0), df4); - __m128i x0, x1; - x0 = _mm_add_epi32(_mm_load_si128((__m128i*)(S0 + i)), - _mm_load_si128((__m128i*)(S2 + i))); - x1 = _mm_add_epi32(_mm_load_si128((__m128i*)(S0 + i + 4)), - _mm_load_si128((__m128i*)(S2 + i + 4))); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0),k1)); - s1 = _mm_add_ps(s1, _mm_mul_ps(_mm_cvtepi32_ps(x1),k1)); - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - _mm_storeu_si128((__m128i*)(dst + i), x0); - } - } - } - else - { - if( fabs(ky[1]) == 1 && ky[1] == -ky[-1] ) - { - if( ky[1] < 0 ) - std::swap(S0, S2); - for( ; i <= width - 8; i += 8 ) - { - __m128i s0, s1, s2, s3; - s0 = _mm_load_si128((__m128i*)(S2 + i)); - s1 = _mm_load_si128((__m128i*)(S2 + i + 4)); - s2 = _mm_load_si128((__m128i*)(S0 + i)); - s3 = _mm_load_si128((__m128i*)(S0 + i + 4)); - s0 = _mm_add_epi32(_mm_sub_epi32(s0, s2), d4); - s1 = _mm_add_epi32(_mm_sub_epi32(s1, s3), d4); - _mm_storeu_si128((__m128i*)(dst + i), _mm_packs_epi32(s0, s1)); - } - } - else - { - __m128 k1 = _mm_set1_ps(ky[1]); - for( ; i <= width - 8; i += 8 ) - { - __m128 s0 = df4, s1 = df4; - __m128i x0, x1; - x0 = _mm_sub_epi32(_mm_load_si128((__m128i*)(S0 + i)), - _mm_load_si128((__m128i*)(S2 + i))); - x1 = _mm_sub_epi32(_mm_load_si128((__m128i*)(S0 + i + 4)), - _mm_load_si128((__m128i*)(S2 + i + 4))); - s0 = _mm_add_ps(s0, _mm_mul_ps(_mm_cvtepi32_ps(x0),k1)); - s1 = _mm_add_ps(s1, _mm_mul_ps(_mm_cvtepi32_ps(x1),k1)); - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - _mm_storeu_si128((__m128i*)(dst + i), x0); - } - } - } - - return i; - } - - int symmetryType; - float delta; - Mat kernel; -}; - - -/////////////////////////////////////// 16s ////////////////////////////////// - -struct RowVec_16s32f -{ - RowVec_16s32f() {} - RowVec_16s32f( const Mat& _kernel ) - { - kernel = _kernel; - sse2_supported = checkHardwareSupport(CV_CPU_SSE2); - } - - int operator()(const uchar* _src, uchar* _dst, int width, int cn) const - { - if( !sse2_supported ) - return 0; - - int i = 0, k, _ksize = kernel.rows + kernel.cols - 1; - float* dst = (float*)_dst; - const float* _kx = (const float*)kernel.data; - width *= cn; - - for( ; i <= width - 8; i += 8 ) - { - const short* src = (const short*)_src + i; - __m128 f, s0 = _mm_setzero_ps(), s1 = s0, x0, x1; - for( k = 0; k < _ksize; k++, src += cn ) - { - f = _mm_load_ss(_kx+k); - f = _mm_shuffle_ps(f, f, 0); - - __m128i x0i = _mm_loadu_si128((const __m128i*)src); - __m128i x1i = _mm_srai_epi32(_mm_unpackhi_epi16(x0i, x0i), 16); - x0i = _mm_srai_epi32(_mm_unpacklo_epi16(x0i, x0i), 16); - x0 = _mm_cvtepi32_ps(x0i); - x1 = _mm_cvtepi32_ps(x1i); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - } - _mm_store_ps(dst + i, s0); - _mm_store_ps(dst + i + 4, s1); - } - return i; - } - - Mat kernel; - bool sse2_supported; -}; - - -struct SymmColumnVec_32f16s -{ - SymmColumnVec_32f16s() { symmetryType=0; } - SymmColumnVec_32f16s(const Mat& _kernel, int _symmetryType, int, double _delta) - { - symmetryType = _symmetryType; - kernel = _kernel; - delta = (float)_delta; - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - sse2_supported = checkHardwareSupport(CV_CPU_SSE2); - } - - int operator()(const uchar** _src, uchar* _dst, int width) const - { - if( !sse2_supported ) - return 0; - - int ksize2 = (kernel.rows + kernel.cols - 1)/2; - const float* ky = (const float*)kernel.data + ksize2; - int i = 0, k; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const float** src = (const float**)_src; - const float *S, *S2; - short* dst = (short*)_dst; - __m128 d4 = _mm_set1_ps(delta); - - if( symmetrical ) - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128 s0, s1, s2, s3; - __m128 x0, x1; - S = src[0] + i; - s0 = _mm_load_ps(S); - s1 = _mm_load_ps(S+4); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - s1 = _mm_add_ps(_mm_mul_ps(s1, f), d4); - s2 = _mm_load_ps(S+8); - s3 = _mm_load_ps(S+12); - s2 = _mm_add_ps(_mm_mul_ps(s2, f), d4); - s3 = _mm_add_ps(_mm_mul_ps(s3, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - S = src[k] + i; - S2 = src[-k] + i; - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_add_ps(_mm_load_ps(S), _mm_load_ps(S2)); - x1 = _mm_add_ps(_mm_load_ps(S+4), _mm_load_ps(S2+4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - x0 = _mm_add_ps(_mm_load_ps(S+8), _mm_load_ps(S2+8)); - x1 = _mm_add_ps(_mm_load_ps(S+12), _mm_load_ps(S2+12)); - s2 = _mm_add_ps(s2, _mm_mul_ps(x0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(x1, f)); - } - - __m128i s0i = _mm_cvtps_epi32(s0); - __m128i s1i = _mm_cvtps_epi32(s1); - __m128i s2i = _mm_cvtps_epi32(s2); - __m128i s3i = _mm_cvtps_epi32(s3); - - _mm_storeu_si128((__m128i*)(dst + i), _mm_packs_epi32(s0i, s1i)); - _mm_storeu_si128((__m128i*)(dst + i + 8), _mm_packs_epi32(s2i, s3i)); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128 x0, s0 = _mm_load_ps(src[0] + i); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - S = src[k] + i; - S2 = src[-k] + i; - x0 = _mm_add_ps(_mm_load_ps(src[k]+i), _mm_load_ps(src[-k] + i)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - } - - __m128i s0i = _mm_cvtps_epi32(s0); - _mm_storel_epi64((__m128i*)(dst + i), _mm_packs_epi32(s0i, s0i)); - } - } - else - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f, s0 = d4, s1 = d4, s2 = d4, s3 = d4; - __m128 x0, x1; - S = src[0] + i; - - for( k = 1; k <= ksize2; k++ ) - { - S = src[k] + i; - S2 = src[-k] + i; - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_ps(_mm_load_ps(S), _mm_load_ps(S2)); - x1 = _mm_sub_ps(_mm_load_ps(S+4), _mm_load_ps(S2+4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - x0 = _mm_sub_ps(_mm_load_ps(S+8), _mm_load_ps(S2+8)); - x1 = _mm_sub_ps(_mm_load_ps(S+12), _mm_load_ps(S2+12)); - s2 = _mm_add_ps(s2, _mm_mul_ps(x0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(x1, f)); - } - - __m128i s0i = _mm_cvtps_epi32(s0); - __m128i s1i = _mm_cvtps_epi32(s1); - __m128i s2i = _mm_cvtps_epi32(s2); - __m128i s3i = _mm_cvtps_epi32(s3); - - _mm_storeu_si128((__m128i*)(dst + i), _mm_packs_epi32(s0i, s1i)); - _mm_storeu_si128((__m128i*)(dst + i + 8), _mm_packs_epi32(s2i, s3i)); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f, x0, s0 = d4; - - for( k = 1; k <= ksize2; k++ ) - { - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_ps(_mm_load_ps(src[k]+i), _mm_load_ps(src[-k] + i)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - } - - __m128i s0i = _mm_cvtps_epi32(s0); - _mm_storel_epi64((__m128i*)(dst + i), _mm_packs_epi32(s0i, s0i)); - } - } - - return i; - } - - int symmetryType; - float delta; - Mat kernel; - bool sse2_supported; -}; - - -/////////////////////////////////////// 32f ////////////////////////////////// - -struct RowVec_32f -{ - RowVec_32f() {} - RowVec_32f( const Mat& _kernel ) - { - kernel = _kernel; - haveSSE = checkHardwareSupport(CV_CPU_SSE); -#ifdef USE_IPP_SEP_FILTERS - bufsz = -1; -#endif - } - - int operator()(const uchar* _src, uchar* _dst, int width, int cn) const - { - int _ksize = kernel.rows + kernel.cols - 1; - const float* src0 = (const float*)_src; - float* dst = (float*)_dst; - const float* _kx = (const float*)kernel.data; - -#ifdef USE_IPP_SEP_FILTERS - IppiSize roisz = { width, 1 }; - if( (cn == 1 || cn == 3) && width >= _ksize*8 ) - { - if( bufsz < 0 ) - { - if( (cn == 1 && ippiFilterRowBorderPipelineGetBufferSize_32f_C1R(roisz, _ksize, &bufsz) < 0) || - (cn == 3 && ippiFilterRowBorderPipelineGetBufferSize_32f_C3R(roisz, _ksize, &bufsz) < 0)) - return 0; - } - AutoBuffer buf(bufsz + 64); - uchar* bufptr = alignPtr((uchar*)buf, 32); - int step = (int)(width*sizeof(dst[0])*cn); - float borderValue[] = {0.f, 0.f, 0.f}; - // here is the trick. IPP needs border type and extrapolates the row. We did it already. - // So we pass anchor=0 and ignore the right tail of results since they are incorrect there. - if( (cn == 1 && ippiFilterRowBorderPipeline_32f_C1R(src0, step, &dst, roisz, _kx, _ksize, 0, - ippBorderRepl, borderValue[0], bufptr) < 0) || - (cn == 3 && ippiFilterRowBorderPipeline_32f_C3R(src0, step, &dst, roisz, _kx, _ksize, 0, - ippBorderRepl, borderValue, bufptr) < 0)) - return 0; - return width - _ksize + 1; - } -#endif - - if( !haveSSE ) - return 0; - - int i = 0, k; - width *= cn; - - for( ; i <= width - 8; i += 8 ) - { - const float* src = src0 + i; - __m128 f, s0 = _mm_setzero_ps(), s1 = s0, x0, x1; - for( k = 0; k < _ksize; k++, src += cn ) - { - f = _mm_load_ss(_kx+k); - f = _mm_shuffle_ps(f, f, 0); - - x0 = _mm_loadu_ps(src); - x1 = _mm_loadu_ps(src + 4); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - } - _mm_store_ps(dst + i, s0); - _mm_store_ps(dst + i + 4, s1); - } - return i; - } - - Mat kernel; - bool haveSSE; -#ifdef USE_IPP_SEP_FILTERS - mutable int bufsz; -#endif -}; - - -struct SymmRowSmallVec_32f -{ - SymmRowSmallVec_32f() {} - SymmRowSmallVec_32f( const Mat& _kernel, int _symmetryType ) - { - kernel = _kernel; - symmetryType = _symmetryType; - } - - int operator()(const uchar* _src, uchar* _dst, int width, int cn) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int i = 0, _ksize = kernel.rows + kernel.cols - 1; - float* dst = (float*)_dst; - const float* src = (const float*)_src + (_ksize/2)*cn; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const float* kx = (const float*)kernel.data + _ksize/2; - width *= cn; - - if( symmetrical ) - { - if( _ksize == 1 ) - return 0; - if( _ksize == 3 ) - { - if( kx[0] == 2 && kx[1] == 1 ) - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_ps(src - cn); - x1 = _mm_loadu_ps(src); - x2 = _mm_loadu_ps(src + cn); - y0 = _mm_loadu_ps(src - cn + 4); - y1 = _mm_loadu_ps(src + 4); - y2 = _mm_loadu_ps(src + cn + 4); - x0 = _mm_add_ps(x0, _mm_add_ps(_mm_add_ps(x1, x1), x2)); - y0 = _mm_add_ps(y0, _mm_add_ps(_mm_add_ps(y1, y1), y2)); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - else if( kx[0] == -2 && kx[1] == 1 ) - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_ps(src - cn); - x1 = _mm_loadu_ps(src); - x2 = _mm_loadu_ps(src + cn); - y0 = _mm_loadu_ps(src - cn + 4); - y1 = _mm_loadu_ps(src + 4); - y2 = _mm_loadu_ps(src + cn + 4); - x0 = _mm_add_ps(x0, _mm_sub_ps(x2, _mm_add_ps(x1, x1))); - y0 = _mm_add_ps(y0, _mm_sub_ps(y2, _mm_add_ps(y1, y1))); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - else - { - __m128 k0 = _mm_set1_ps(kx[0]), k1 = _mm_set1_ps(kx[1]); - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_ps(src - cn); - x1 = _mm_loadu_ps(src); - x2 = _mm_loadu_ps(src + cn); - y0 = _mm_loadu_ps(src - cn + 4); - y1 = _mm_loadu_ps(src + 4); - y2 = _mm_loadu_ps(src + cn + 4); - - x0 = _mm_mul_ps(_mm_add_ps(x0, x2), k1); - y0 = _mm_mul_ps(_mm_add_ps(y0, y2), k1); - x0 = _mm_add_ps(x0, _mm_mul_ps(x1, k0)); - y0 = _mm_add_ps(y0, _mm_mul_ps(y1, k0)); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - } - } - else if( _ksize == 5 ) - { - if( kx[0] == -2 && kx[1] == 0 && kx[2] == 1 ) - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_ps(src - cn*2); - x1 = _mm_loadu_ps(src); - x2 = _mm_loadu_ps(src + cn*2); - y0 = _mm_loadu_ps(src - cn*2 + 4); - y1 = _mm_loadu_ps(src + 4); - y2 = _mm_loadu_ps(src + cn*2 + 4); - x0 = _mm_add_ps(x0, _mm_sub_ps(x2, _mm_add_ps(x1, x1))); - y0 = _mm_add_ps(y0, _mm_sub_ps(y2, _mm_add_ps(y1, y1))); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - else - { - __m128 k0 = _mm_set1_ps(kx[0]), k1 = _mm_set1_ps(kx[1]), k2 = _mm_set1_ps(kx[2]); - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_ps(src - cn); - x1 = _mm_loadu_ps(src); - x2 = _mm_loadu_ps(src + cn); - y0 = _mm_loadu_ps(src - cn + 4); - y1 = _mm_loadu_ps(src + 4); - y2 = _mm_loadu_ps(src + cn + 4); - - x0 = _mm_mul_ps(_mm_add_ps(x0, x2), k1); - y0 = _mm_mul_ps(_mm_add_ps(y0, y2), k1); - x0 = _mm_add_ps(x0, _mm_mul_ps(x1, k0)); - y0 = _mm_add_ps(y0, _mm_mul_ps(y1, k0)); - - x2 = _mm_add_ps(_mm_loadu_ps(src + cn*2), _mm_loadu_ps(src - cn*2)); - y2 = _mm_add_ps(_mm_loadu_ps(src + cn*2 + 4), _mm_loadu_ps(src - cn*2 + 4)); - x0 = _mm_add_ps(x0, _mm_mul_ps(x2, k2)); - y0 = _mm_add_ps(y0, _mm_mul_ps(y2, k2)); - - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - } - } - } - else - { - if( _ksize == 3 ) - { - if( kx[0] == 0 && kx[1] == 1 ) - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x2, y0, y2; - x0 = _mm_loadu_ps(src + cn); - x2 = _mm_loadu_ps(src - cn); - y0 = _mm_loadu_ps(src + cn + 4); - y2 = _mm_loadu_ps(src - cn + 4); - x0 = _mm_sub_ps(x0, x2); - y0 = _mm_sub_ps(y0, y2); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - else - { - __m128 k1 = _mm_set1_ps(kx[1]); - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x2, y0, y2; - x0 = _mm_loadu_ps(src + cn); - x2 = _mm_loadu_ps(src - cn); - y0 = _mm_loadu_ps(src + cn + 4); - y2 = _mm_loadu_ps(src - cn + 4); - - x0 = _mm_mul_ps(_mm_sub_ps(x0, x2), k1); - y0 = _mm_mul_ps(_mm_sub_ps(y0, y2), k1); - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - } - } - else if( _ksize == 5 ) - { - __m128 k1 = _mm_set1_ps(kx[1]), k2 = _mm_set1_ps(kx[2]); - for( ; i <= width - 8; i += 8, src += 8 ) - { - __m128 x0, x2, y0, y2; - x0 = _mm_loadu_ps(src + cn); - x2 = _mm_loadu_ps(src - cn); - y0 = _mm_loadu_ps(src + cn + 4); - y2 = _mm_loadu_ps(src - cn + 4); - - x0 = _mm_mul_ps(_mm_sub_ps(x0, x2), k1); - y0 = _mm_mul_ps(_mm_sub_ps(y0, y2), k1); - - x2 = _mm_sub_ps(_mm_loadu_ps(src + cn*2), _mm_loadu_ps(src - cn*2)); - y2 = _mm_sub_ps(_mm_loadu_ps(src + cn*2 + 4), _mm_loadu_ps(src - cn*2 + 4)); - x0 = _mm_add_ps(x0, _mm_mul_ps(x2, k2)); - y0 = _mm_add_ps(y0, _mm_mul_ps(y2, k2)); - - _mm_store_ps(dst + i, x0); - _mm_store_ps(dst + i + 4, y0); - } - } - } - - return i; - } - - Mat kernel; - int symmetryType; -}; - - -struct SymmColumnVec_32f -{ - SymmColumnVec_32f() { symmetryType=0; } - SymmColumnVec_32f(const Mat& _kernel, int _symmetryType, int, double _delta) - { - symmetryType = _symmetryType; - kernel = _kernel; - delta = (float)_delta; - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - } - - int operator()(const uchar** _src, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int ksize2 = (kernel.rows + kernel.cols - 1)/2; - const float* ky = (const float*)kernel.data + ksize2; - int i = 0, k; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const float** src = (const float**)_src; - const float *S, *S2; - float* dst = (float*)_dst; - __m128 d4 = _mm_set1_ps(delta); - - if( symmetrical ) - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128 s0, s1, s2, s3; - __m128 x0, x1; - S = src[0] + i; - s0 = _mm_load_ps(S); - s1 = _mm_load_ps(S+4); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - s1 = _mm_add_ps(_mm_mul_ps(s1, f), d4); - s2 = _mm_load_ps(S+8); - s3 = _mm_load_ps(S+12); - s2 = _mm_add_ps(_mm_mul_ps(s2, f), d4); - s3 = _mm_add_ps(_mm_mul_ps(s3, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - S = src[k] + i; - S2 = src[-k] + i; - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_add_ps(_mm_load_ps(S), _mm_load_ps(S2)); - x1 = _mm_add_ps(_mm_load_ps(S+4), _mm_load_ps(S2+4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - x0 = _mm_add_ps(_mm_load_ps(S+8), _mm_load_ps(S2+8)); - x1 = _mm_add_ps(_mm_load_ps(S+12), _mm_load_ps(S2+12)); - s2 = _mm_add_ps(s2, _mm_mul_ps(x0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(x1, f)); - } - - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - _mm_storeu_ps(dst + i + 8, s2); - _mm_storeu_ps(dst + i + 12, s3); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f = _mm_load_ss(ky); - f = _mm_shuffle_ps(f, f, 0); - __m128 x0, s0 = _mm_load_ps(src[0] + i); - s0 = _mm_add_ps(_mm_mul_ps(s0, f), d4); - - for( k = 1; k <= ksize2; k++ ) - { - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - S = src[k] + i; - S2 = src[-k] + i; - x0 = _mm_add_ps(_mm_load_ps(src[k]+i), _mm_load_ps(src[-k] + i)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - } - - _mm_storeu_ps(dst + i, s0); - } - } - else - { - for( ; i <= width - 16; i += 16 ) - { - __m128 f, s0 = d4, s1 = d4, s2 = d4, s3 = d4; - __m128 x0, x1; - S = src[0] + i; - - for( k = 1; k <= ksize2; k++ ) - { - S = src[k] + i; - S2 = src[-k] + i; - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_ps(_mm_load_ps(S), _mm_load_ps(S2)); - x1 = _mm_sub_ps(_mm_load_ps(S+4), _mm_load_ps(S2+4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1, f)); - x0 = _mm_sub_ps(_mm_load_ps(S+8), _mm_load_ps(S2+8)); - x1 = _mm_sub_ps(_mm_load_ps(S+12), _mm_load_ps(S2+12)); - s2 = _mm_add_ps(s2, _mm_mul_ps(x0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(x1, f)); - } - - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - _mm_storeu_ps(dst + i + 8, s2); - _mm_storeu_ps(dst + i + 12, s3); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 f, x0, s0 = d4; - - for( k = 1; k <= ksize2; k++ ) - { - f = _mm_load_ss(ky+k); - f = _mm_shuffle_ps(f, f, 0); - x0 = _mm_sub_ps(_mm_load_ps(src[k]+i), _mm_load_ps(src[-k] + i)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0, f)); - } - - _mm_storeu_ps(dst + i, s0); - } - } - - return i; - } - - int symmetryType; - float delta; - Mat kernel; -}; - - -struct SymmColumnSmallVec_32f -{ - SymmColumnSmallVec_32f() { symmetryType=0; } - SymmColumnSmallVec_32f(const Mat& _kernel, int _symmetryType, int, double _delta) - { - symmetryType = _symmetryType; - kernel = _kernel; - delta = (float)_delta; - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - } - - int operator()(const uchar** _src, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int ksize2 = (kernel.rows + kernel.cols - 1)/2; - const float* ky = (const float*)kernel.data + ksize2; - int i = 0; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - const float** src = (const float**)_src; - const float *S0 = src[-1], *S1 = src[0], *S2 = src[1]; - float* dst = (float*)_dst; - __m128 d4 = _mm_set1_ps(delta); - - if( symmetrical ) - { - if( ky[0] == 2 && ky[1] == 1 ) - { - for( ; i <= width - 8; i += 8 ) - { - __m128 s0, s1, s2, s3, s4, s5; - s0 = _mm_load_ps(S0 + i); - s1 = _mm_load_ps(S0 + i + 4); - s2 = _mm_load_ps(S1 + i); - s3 = _mm_load_ps(S1 + i + 4); - s4 = _mm_load_ps(S2 + i); - s5 = _mm_load_ps(S2 + i + 4); - s0 = _mm_add_ps(s0, _mm_add_ps(s4, _mm_add_ps(s2, s2))); - s1 = _mm_add_ps(s1, _mm_add_ps(s5, _mm_add_ps(s3, s3))); - s0 = _mm_add_ps(s0, d4); - s1 = _mm_add_ps(s1, d4); - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - } - } - else if( ky[0] == -2 && ky[1] == 1 ) - { - for( ; i <= width - 8; i += 8 ) - { - __m128 s0, s1, s2, s3, s4, s5; - s0 = _mm_load_ps(S0 + i); - s1 = _mm_load_ps(S0 + i + 4); - s2 = _mm_load_ps(S1 + i); - s3 = _mm_load_ps(S1 + i + 4); - s4 = _mm_load_ps(S2 + i); - s5 = _mm_load_ps(S2 + i + 4); - s0 = _mm_add_ps(s0, _mm_sub_ps(s4, _mm_add_ps(s2, s2))); - s1 = _mm_add_ps(s1, _mm_sub_ps(s5, _mm_add_ps(s3, s3))); - s0 = _mm_add_ps(s0, d4); - s1 = _mm_add_ps(s1, d4); - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - } - } - else - { - __m128 k0 = _mm_set1_ps(ky[0]), k1 = _mm_set1_ps(ky[1]); - for( ; i <= width - 8; i += 8 ) - { - __m128 s0, s1, x0, x1; - s0 = _mm_load_ps(S1 + i); - s1 = _mm_load_ps(S1 + i + 4); - s0 = _mm_add_ps(_mm_mul_ps(s0, k0), d4); - s1 = _mm_add_ps(_mm_mul_ps(s1, k0), d4); - x0 = _mm_add_ps(_mm_load_ps(S0 + i), _mm_load_ps(S2 + i)); - x1 = _mm_add_ps(_mm_load_ps(S0 + i + 4), _mm_load_ps(S2 + i + 4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0,k1)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1,k1)); - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - } - } - } - else - { - if( fabs(ky[1]) == 1 && ky[1] == -ky[-1] ) - { - if( ky[1] < 0 ) - std::swap(S0, S2); - for( ; i <= width - 8; i += 8 ) - { - __m128 s0, s1, s2, s3; - s0 = _mm_load_ps(S2 + i); - s1 = _mm_load_ps(S2 + i + 4); - s2 = _mm_load_ps(S0 + i); - s3 = _mm_load_ps(S0 + i + 4); - s0 = _mm_add_ps(_mm_sub_ps(s0, s2), d4); - s1 = _mm_add_ps(_mm_sub_ps(s1, s3), d4); - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - } - } - else - { - __m128 k1 = _mm_set1_ps(ky[1]); - for( ; i <= width - 8; i += 8 ) - { - __m128 s0 = d4, s1 = d4, x0, x1; - x0 = _mm_sub_ps(_mm_load_ps(S2 + i), _mm_load_ps(S0 + i)); - x1 = _mm_sub_ps(_mm_load_ps(S2 + i + 4), _mm_load_ps(S0 + i + 4)); - s0 = _mm_add_ps(s0, _mm_mul_ps(x0,k1)); - s1 = _mm_add_ps(s1, _mm_mul_ps(x1,k1)); - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - } - } - } - - return i; - } - - int symmetryType; - float delta; - Mat kernel; -}; - - -/////////////////////////////// non-separable filters /////////////////////////////// - -///////////////////////////////// 8u<->8u, 8u<->16s ///////////////////////////////// - -struct FilterVec_8u -{ - FilterVec_8u() {} - FilterVec_8u(const Mat& _kernel, int _bits, double _delta) - { - Mat kernel; - _kernel.convertTo(kernel, CV_32F, 1./(1 << _bits), 0); - delta = (float)(_delta/(1 << _bits)); - vector coords; - preprocess2DKernel(kernel, coords, coeffs); - _nz = (int)coords.size(); - } - - int operator()(const uchar** src, uchar* dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const float* kf = (const float*)&coeffs[0]; - int i = 0, k, nz = _nz; - __m128 d4 = _mm_set1_ps(delta); - - for( ; i <= width - 16; i += 16 ) - { - __m128 s0 = d4, s1 = d4, s2 = d4, s3 = d4; - __m128i x0, x1, z = _mm_setzero_si128(); - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0, t1; - f = _mm_shuffle_ps(f, f, 0); - - x0 = _mm_loadu_si128((const __m128i*)(src[k] + i)); - x1 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x0, z)); - t1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(x0, z)); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(t1, f)); - - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x1, z)); - t1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(x1, z)); - s2 = _mm_add_ps(s2, _mm_mul_ps(t0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(t1, f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - x1 = _mm_packs_epi32(_mm_cvtps_epi32(s2), _mm_cvtps_epi32(s3)); - x0 = _mm_packus_epi16(x0, x1); - _mm_storeu_si128((__m128i*)(dst + i), x0); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 s0 = d4; - __m128i x0, z = _mm_setzero_si128(); - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0; - f = _mm_shuffle_ps(f, f, 0); - - x0 = _mm_cvtsi32_si128(*(const int*)(src[k] + i)); - x0 = _mm_unpacklo_epi8(x0, z); - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x0, z)); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), z); - x0 = _mm_packus_epi16(x0, x0); - *(int*)(dst + i) = _mm_cvtsi128_si32(x0); - } - - return i; - } - - int _nz; - vector coeffs; - float delta; -}; - - -struct FilterVec_8u16s -{ - FilterVec_8u16s() {} - FilterVec_8u16s(const Mat& _kernel, int _bits, double _delta) - { - Mat kernel; - _kernel.convertTo(kernel, CV_32F, 1./(1 << _bits), 0); - delta = (float)(_delta/(1 << _bits)); - vector coords; - preprocess2DKernel(kernel, coords, coeffs); - _nz = (int)coords.size(); - } - - int operator()(const uchar** src, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const float* kf = (const float*)&coeffs[0]; - short* dst = (short*)_dst; - int i = 0, k, nz = _nz; - __m128 d4 = _mm_set1_ps(delta); - - for( ; i <= width - 16; i += 16 ) - { - __m128 s0 = d4, s1 = d4, s2 = d4, s3 = d4; - __m128i x0, x1, z = _mm_setzero_si128(); - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0, t1; - f = _mm_shuffle_ps(f, f, 0); - - x0 = _mm_loadu_si128((const __m128i*)(src[k] + i)); - x1 = _mm_unpackhi_epi8(x0, z); - x0 = _mm_unpacklo_epi8(x0, z); - - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x0, z)); - t1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(x0, z)); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(t1, f)); - - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x1, z)); - t1 = _mm_cvtepi32_ps(_mm_unpackhi_epi16(x1, z)); - s2 = _mm_add_ps(s2, _mm_mul_ps(t0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(t1, f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), _mm_cvtps_epi32(s1)); - x1 = _mm_packs_epi32(_mm_cvtps_epi32(s2), _mm_cvtps_epi32(s3)); - _mm_storeu_si128((__m128i*)(dst + i), x0); - _mm_storeu_si128((__m128i*)(dst + i + 8), x1); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 s0 = d4; - __m128i x0, z = _mm_setzero_si128(); - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0; - f = _mm_shuffle_ps(f, f, 0); - - x0 = _mm_cvtsi32_si128(*(const int*)(src[k] + i)); - x0 = _mm_unpacklo_epi8(x0, z); - t0 = _mm_cvtepi32_ps(_mm_unpacklo_epi16(x0, z)); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - } - - x0 = _mm_packs_epi32(_mm_cvtps_epi32(s0), z); - _mm_storel_epi64((__m128i*)(dst + i), x0); - } - - return i; - } - - int _nz; - vector coeffs; - float delta; -}; - - -struct FilterVec_32f -{ - FilterVec_32f() {} - FilterVec_32f(const Mat& _kernel, int, double _delta) - { - delta = (float)_delta; - vector coords; - preprocess2DKernel(_kernel, coords, coeffs); - _nz = (int)coords.size(); - } - - int operator()(const uchar** _src, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - const float* kf = (const float*)&coeffs[0]; - const float** src = (const float**)_src; - float* dst = (float*)_dst; - int i = 0, k, nz = _nz; - __m128 d4 = _mm_set1_ps(delta); - - for( ; i <= width - 16; i += 16 ) - { - __m128 s0 = d4, s1 = d4, s2 = d4, s3 = d4; - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0, t1; - f = _mm_shuffle_ps(f, f, 0); - const float* S = src[k] + i; - - t0 = _mm_loadu_ps(S); - t1 = _mm_loadu_ps(S + 4); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - s1 = _mm_add_ps(s1, _mm_mul_ps(t1, f)); - - t0 = _mm_loadu_ps(S + 8); - t1 = _mm_loadu_ps(S + 12); - s2 = _mm_add_ps(s2, _mm_mul_ps(t0, f)); - s3 = _mm_add_ps(s3, _mm_mul_ps(t1, f)); - } - - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - _mm_storeu_ps(dst + i + 8, s2); - _mm_storeu_ps(dst + i + 12, s3); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 s0 = d4; - - for( k = 0; k < nz; k++ ) - { - __m128 f = _mm_load_ss(kf+k), t0; - f = _mm_shuffle_ps(f, f, 0); - t0 = _mm_loadu_ps(src[k] + i); - s0 = _mm_add_ps(s0, _mm_mul_ps(t0, f)); - } - _mm_storeu_ps(dst + i, s0); - } - - return i; - } - - int _nz; - vector coeffs; - float delta; -}; - - -#else - -typedef RowNoVec RowVec_8u32s; -typedef RowNoVec RowVec_16s32f; -typedef RowNoVec RowVec_32f; -typedef SymmRowSmallNoVec SymmRowSmallVec_8u32s; -typedef SymmRowSmallNoVec SymmRowSmallVec_32f; -typedef ColumnNoVec SymmColumnVec_32s8u; -typedef ColumnNoVec SymmColumnVec_32f16s; -typedef ColumnNoVec SymmColumnVec_32f; -typedef SymmColumnSmallNoVec SymmColumnSmallVec_32s16s; -typedef SymmColumnSmallNoVec SymmColumnSmallVec_32f; -typedef FilterNoVec FilterVec_8u; -typedef FilterNoVec FilterVec_8u16s; -typedef FilterNoVec FilterVec_32f; - -#endif - - -template struct RowFilter : public BaseRowFilter -{ - RowFilter( const Mat& _kernel, int _anchor, const VecOp& _vecOp=VecOp() ) - { - if( _kernel.isContinuous() ) - kernel = _kernel; - else - _kernel.copyTo(kernel); - anchor = _anchor; - ksize = kernel.rows + kernel.cols - 1; - CV_Assert( kernel.type() == DataType

          ::type && - (kernel.rows == 1 || kernel.cols == 1)); - vecOp = _vecOp; - } - - void operator()(const uchar* src, uchar* dst, int width, int cn) - { - int _ksize = ksize; - const DT* kx = (const DT*)kernel.data; - const ST* S; - DT* D = (DT*)dst; - int i, k; - - i = vecOp(src, dst, width, cn); - width *= cn; - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - S = (const ST*)src + i; - DT f = kx[0]; - DT s0 = f*S[0], s1 = f*S[1], s2 = f*S[2], s3 = f*S[3]; - - for( k = 1; k < _ksize; k++ ) - { - S += cn; - f = kx[k]; - s0 += f*S[0]; s1 += f*S[1]; - s2 += f*S[2]; s3 += f*S[3]; - } - - D[i] = s0; D[i+1] = s1; - D[i+2] = s2; D[i+3] = s3; - } - #endif - for( ; i < width; i++ ) - { - S = (const ST*)src + i; - DT s0 = kx[0]*S[0]; - for( k = 1; k < _ksize; k++ ) - { - S += cn; - s0 += kx[k]*S[0]; - } - D[i] = s0; - } - } - - Mat kernel; - VecOp vecOp; -}; - - -template struct SymmRowSmallFilter : - public RowFilter -{ - SymmRowSmallFilter( const Mat& _kernel, int _anchor, int _symmetryType, - const VecOp& _vecOp = VecOp()) - : RowFilter( _kernel, _anchor, _vecOp ) - { - symmetryType = _symmetryType; - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 && this->ksize <= 5 ); - } - - void operator()(const uchar* src, uchar* dst, int width, int cn) - { - int ksize2 = this->ksize/2, ksize2n = ksize2*cn; - const DT* kx = (const DT*)this->kernel.data + ksize2; - bool symmetrical = (this->symmetryType & KERNEL_SYMMETRICAL) != 0; - DT* D = (DT*)dst; - int i = this->vecOp(src, dst, width, cn), j, k; - const ST* S = (const ST*)src + i + ksize2n; - width *= cn; - - if( symmetrical ) - { - if( this->ksize == 1 && kx[0] == 1 ) - { - for( ; i <= width - 2; i += 2 ) - { - DT s0 = S[i], s1 = S[i+1]; - D[i] = s0; D[i+1] = s1; - } - S += i; - } - else if( this->ksize == 3 ) - { - if( kx[0] == 2 && kx[1] == 1 ) - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = S[-cn] + S[0]*2 + S[cn], s1 = S[1-cn] + S[1]*2 + S[1+cn]; - D[i] = s0; D[i+1] = s1; - } - else if( kx[0] == -2 && kx[1] == 1 ) - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = S[-cn] - S[0]*2 + S[cn], s1 = S[1-cn] - S[1]*2 + S[1+cn]; - D[i] = s0; D[i+1] = s1; - } - else - { - DT k0 = kx[0], k1 = kx[1]; - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = S[0]*k0 + (S[-cn] + S[cn])*k1, s1 = S[1]*k0 + (S[1-cn] + S[1+cn])*k1; - D[i] = s0; D[i+1] = s1; - } - } - } - else if( this->ksize == 5 ) - { - DT k0 = kx[0], k1 = kx[1], k2 = kx[2]; - if( k0 == -2 && k1 == 0 && k2 == 1 ) - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = -2*S[0] + S[-cn*2] + S[cn*2]; - DT s1 = -2*S[1] + S[1-cn*2] + S[1+cn*2]; - D[i] = s0; D[i+1] = s1; - } - else - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = S[0]*k0 + (S[-cn] + S[cn])*k1 + (S[-cn*2] + S[cn*2])*k2; - DT s1 = S[1]*k0 + (S[1-cn] + S[1+cn])*k1 + (S[1-cn*2] + S[1+cn*2])*k2; - D[i] = s0; D[i+1] = s1; - } - } - - for( ; i < width; i++, S++ ) - { - DT s0 = kx[0]*S[0]; - for( k = 1, j = cn; k <= ksize2; k++, j += cn ) - s0 += kx[k]*(S[j] + S[-j]); - D[i] = s0; - } - } - else - { - if( this->ksize == 3 ) - { - if( kx[0] == 0 && kx[1] == 1 ) - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = S[cn] - S[-cn], s1 = S[1+cn] - S[1-cn]; - D[i] = s0; D[i+1] = s1; - } - else - { - DT k1 = kx[1]; - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = (S[cn] - S[-cn])*k1, s1 = (S[1+cn] - S[1-cn])*k1; - D[i] = s0; D[i+1] = s1; - } - } - } - else if( this->ksize == 5 ) - { - DT k1 = kx[1], k2 = kx[2]; - for( ; i <= width - 2; i += 2, S += 2 ) - { - DT s0 = (S[cn] - S[-cn])*k1 + (S[cn*2] - S[-cn*2])*k2; - DT s1 = (S[1+cn] - S[1-cn])*k1 + (S[1+cn*2] - S[1-cn*2])*k2; - D[i] = s0; D[i+1] = s1; - } - } - - for( ; i < width; i++, S++ ) - { - DT s0 = kx[0]*S[0]; - for( k = 1, j = cn; k <= ksize2; k++, j += cn ) - s0 += kx[k]*(S[j] - S[-j]); - D[i] = s0; - } - } - } - - int symmetryType; -}; - - -template struct ColumnFilter : public BaseColumnFilter -{ - typedef typename CastOp::type1 ST; - typedef typename CastOp::rtype DT; - - ColumnFilter( const Mat& _kernel, int _anchor, - double _delta, const CastOp& _castOp=CastOp(), - const VecOp& _vecOp=VecOp() ) - { - if( _kernel.isContinuous() ) - kernel = _kernel; - else - _kernel.copyTo(kernel); - anchor = _anchor; - ksize = kernel.rows + kernel.cols - 1; - delta = saturate_cast(_delta); - castOp0 = _castOp; - vecOp = _vecOp; - CV_Assert( kernel.type() == DataType::type && - (kernel.rows == 1 || kernel.cols == 1)); - } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - const ST* ky = (const ST*)kernel.data; - ST _delta = delta; - int _ksize = ksize; - int i, k; - CastOp castOp = castOp0; - - for( ; count--; dst += dststep, src++ ) - { - DT* D = (DT*)dst; - i = vecOp(src, dst, width); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST f = ky[0]; - const ST* S = (const ST*)src[0] + i; - ST s0 = f*S[0] + _delta, s1 = f*S[1] + _delta, - s2 = f*S[2] + _delta, s3 = f*S[3] + _delta; - - for( k = 1; k < _ksize; k++ ) - { - S = (const ST*)src[k] + i; f = ky[k]; - s0 += f*S[0]; s1 += f*S[1]; - s2 += f*S[2]; s3 += f*S[3]; - } - - D[i] = castOp(s0); D[i+1] = castOp(s1); - D[i+2] = castOp(s2); D[i+3] = castOp(s3); - } - #endif - for( ; i < width; i++ ) - { - ST s0 = ky[0]*((const ST*)src[0])[i] + _delta; - for( k = 1; k < _ksize; k++ ) - s0 += ky[k]*((const ST*)src[k])[i]; - D[i] = castOp(s0); - } - } - } - - Mat kernel; - CastOp castOp0; - VecOp vecOp; - ST delta; -}; - - -template struct SymmColumnFilter : public ColumnFilter -{ - typedef typename CastOp::type1 ST; - typedef typename CastOp::rtype DT; - - SymmColumnFilter( const Mat& _kernel, int _anchor, - double _delta, int _symmetryType, - const CastOp& _castOp=CastOp(), - const VecOp& _vecOp=VecOp()) - : ColumnFilter( _kernel, _anchor, _delta, _castOp, _vecOp ) - { - symmetryType = _symmetryType; - CV_Assert( (symmetryType & (KERNEL_SYMMETRICAL | KERNEL_ASYMMETRICAL)) != 0 ); - } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int ksize2 = this->ksize/2; - const ST* ky = (const ST*)this->kernel.data + ksize2; - int i, k; - bool symmetrical = (symmetryType & KERNEL_SYMMETRICAL) != 0; - ST _delta = this->delta; - CastOp castOp = this->castOp0; - src += ksize2; - - if( symmetrical ) - { - for( ; count--; dst += dststep, src++ ) - { - DT* D = (DT*)dst; - i = (this->vecOp)(src, dst, width); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST f = ky[0]; - const ST* S = (const ST*)src[0] + i, *S2; - ST s0 = f*S[0] + _delta, s1 = f*S[1] + _delta, - s2 = f*S[2] + _delta, s3 = f*S[3] + _delta; - - for( k = 1; k <= ksize2; k++ ) - { - S = (const ST*)src[k] + i; - S2 = (const ST*)src[-k] + i; - f = ky[k]; - s0 += f*(S[0] + S2[0]); - s1 += f*(S[1] + S2[1]); - s2 += f*(S[2] + S2[2]); - s3 += f*(S[3] + S2[3]); - } - - D[i] = castOp(s0); D[i+1] = castOp(s1); - D[i+2] = castOp(s2); D[i+3] = castOp(s3); - } - #endif - for( ; i < width; i++ ) - { - ST s0 = ky[0]*((const ST*)src[0])[i] + _delta; - for( k = 1; k <= ksize2; k++ ) - s0 += ky[k]*(((const ST*)src[k])[i] + ((const ST*)src[-k])[i]); - D[i] = castOp(s0); - } - } - } - else - { - for( ; count--; dst += dststep, src++ ) - { - DT* D = (DT*)dst; - i = this->vecOp(src, dst, width); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST f = ky[0]; - const ST *S, *S2; - ST s0 = _delta, s1 = _delta, s2 = _delta, s3 = _delta; - - for( k = 1; k <= ksize2; k++ ) - { - S = (const ST*)src[k] + i; - S2 = (const ST*)src[-k] + i; - f = ky[k]; - s0 += f*(S[0] - S2[0]); - s1 += f*(S[1] - S2[1]); - s2 += f*(S[2] - S2[2]); - s3 += f*(S[3] - S2[3]); - } - - D[i] = castOp(s0); D[i+1] = castOp(s1); - D[i+2] = castOp(s2); D[i+3] = castOp(s3); - } - #endif - for( ; i < width; i++ ) - { - ST s0 = _delta; - for( k = 1; k <= ksize2; k++ ) - s0 += ky[k]*(((const ST*)src[k])[i] - ((const ST*)src[-k])[i]); - D[i] = castOp(s0); - } - } - } - } - - int symmetryType; -}; - - -template -struct SymmColumnSmallFilter : public SymmColumnFilter -{ - typedef typename CastOp::type1 ST; - typedef typename CastOp::rtype DT; - - SymmColumnSmallFilter( const Mat& _kernel, int _anchor, - double _delta, int _symmetryType, - const CastOp& _castOp=CastOp(), - const VecOp& _vecOp=VecOp()) - : SymmColumnFilter( _kernel, _anchor, _delta, _symmetryType, _castOp, _vecOp ) - { - CV_Assert( this->ksize == 3 ); - } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int ksize2 = this->ksize/2; - const ST* ky = (const ST*)this->kernel.data + ksize2; - int i; - bool symmetrical = (this->symmetryType & KERNEL_SYMMETRICAL) != 0; - bool is_1_2_1 = ky[0] == 1 && ky[1] == 2; - bool is_1_m2_1 = ky[0] == 1 && ky[1] == -2; - bool is_m1_0_1 = ky[1] == 1 || ky[1] == -1; - ST f0 = ky[0], f1 = ky[1]; - ST _delta = this->delta; - CastOp castOp = this->castOp0; - src += ksize2; - - for( ; count--; dst += dststep, src++ ) - { - DT* D = (DT*)dst; - i = (this->vecOp)(src, dst, width); - const ST* S0 = (const ST*)src[-1]; - const ST* S1 = (const ST*)src[0]; - const ST* S2 = (const ST*)src[1]; - - if( symmetrical ) - { - if( is_1_2_1 ) - { - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST s0 = S0[i] + S1[i]*2 + S2[i] + _delta; - ST s1 = S0[i+1] + S1[i+1]*2 + S2[i+1] + _delta; - D[i] = castOp(s0); - D[i+1] = castOp(s1); - - s0 = S0[i+2] + S1[i+2]*2 + S2[i+2] + _delta; - s1 = S0[i+3] + S1[i+3]*2 + S2[i+3] + _delta; - D[i+2] = castOp(s0); - D[i+3] = castOp(s1); - } - #else - for( ; i < width; i ++ ) - { - ST s0 = S0[i] + S1[i]*2 + S2[i] + _delta; - D[i] = castOp(s0); - } - #endif - } - else if( is_1_m2_1 ) - { - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST s0 = S0[i] - S1[i]*2 + S2[i] + _delta; - ST s1 = S0[i+1] - S1[i+1]*2 + S2[i+1] + _delta; - D[i] = castOp(s0); - D[i+1] = castOp(s1); - - s0 = S0[i+2] - S1[i+2]*2 + S2[i+2] + _delta; - s1 = S0[i+3] - S1[i+3]*2 + S2[i+3] + _delta; - D[i+2] = castOp(s0); - D[i+3] = castOp(s1); - } - #else - for( ; i < width; i ++ ) - { - ST s0 = S0[i] - S1[i]*2 + S2[i] + _delta; - D[i] = castOp(s0); - } - #endif - } - else - { - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST s0 = (S0[i] + S2[i])*f1 + S1[i]*f0 + _delta; - ST s1 = (S0[i+1] + S2[i+1])*f1 + S1[i+1]*f0 + _delta; - D[i] = castOp(s0); - D[i+1] = castOp(s1); - - s0 = (S0[i+2] + S2[i+2])*f1 + S1[i+2]*f0 + _delta; - s1 = (S0[i+3] + S2[i+3])*f1 + S1[i+3]*f0 + _delta; - D[i+2] = castOp(s0); - D[i+3] = castOp(s1); - } - #else - for( ; i < width; i ++ ) - { - ST s0 = (S0[i] + S2[i])*f1 + S1[i]*f0 + _delta; - D[i] = castOp(s0); - } - #endif - } - for( ; i < width; i++ ) - D[i] = castOp((S0[i] + S2[i])*f1 + S1[i]*f0 + _delta); - } - else - { - if( is_m1_0_1 ) - { - if( f1 < 0 ) - std::swap(S0, S2); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST s0 = S2[i] - S0[i] + _delta; - ST s1 = S2[i+1] - S0[i+1] + _delta; - D[i] = castOp(s0); - D[i+1] = castOp(s1); - - s0 = S2[i+2] - S0[i+2] + _delta; - s1 = S2[i+3] - S0[i+3] + _delta; - D[i+2] = castOp(s0); - D[i+3] = castOp(s1); - } - #else - for( ; i < width; i ++ ) - { - ST s0 = S2[i] - S0[i] + _delta; - D[i] = castOp(s0); - } - #endif - if( f1 < 0 ) - std::swap(S0, S2); - } - else - { - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - ST s0 = (S2[i] - S0[i])*f1 + _delta; - ST s1 = (S2[i+1] - S0[i+1])*f1 + _delta; - D[i] = castOp(s0); - D[i+1] = castOp(s1); - - s0 = (S2[i+2] - S0[i+2])*f1 + _delta; - s1 = (S2[i+3] - S0[i+3])*f1 + _delta; - D[i+2] = castOp(s0); - D[i+3] = castOp(s1); - } - #endif - } - - for( ; i < width; i++ ) - D[i] = castOp((S2[i] - S0[i])*f1 + _delta); - } - } - } -}; - -template struct Cast -{ - typedef ST type1; - typedef DT rtype; - - DT operator()(ST val) const { return saturate_cast
          (val); } -}; - -template struct FixedPtCast -{ - typedef ST type1; - typedef DT rtype; - enum { SHIFT = bits, DELTA = 1 << (bits-1) }; - - DT operator()(ST val) const { return saturate_cast
          ((val + DELTA)>>SHIFT); } -}; - -template struct FixedPtCastEx -{ - typedef ST type1; - typedef DT rtype; - - FixedPtCastEx() : SHIFT(0), DELTA(0) {} - FixedPtCastEx(int bits) : SHIFT(bits), DELTA(bits ? 1 << (bits-1) : 0) {} - DT operator()(ST val) const { return saturate_cast
          ((val + DELTA)>>SHIFT); } - int SHIFT, DELTA; -}; - -} - -cv::Ptr cv::getLinearRowFilter( int srcType, int bufType, - InputArray _kernel, int anchor, - int symmetryType ) -{ - Mat kernel = _kernel.getMat(); - int sdepth = CV_MAT_DEPTH(srcType), ddepth = CV_MAT_DEPTH(bufType); - int cn = CV_MAT_CN(srcType); - CV_Assert( cn == CV_MAT_CN(bufType) && - ddepth >= std::max(sdepth, CV_32S) && - kernel.type() == ddepth ); - int ksize = kernel.rows + kernel.cols - 1; - - if( (symmetryType & (KERNEL_SYMMETRICAL|KERNEL_ASYMMETRICAL)) != 0 && ksize <= 5 ) - { - if( sdepth == CV_8U && ddepth == CV_32S ) - return Ptr(new SymmRowSmallFilter - (kernel, anchor, symmetryType, SymmRowSmallVec_8u32s(kernel, symmetryType))); - if( sdepth == CV_32F && ddepth == CV_32F ) - return Ptr(new SymmRowSmallFilter - (kernel, anchor, symmetryType, SymmRowSmallVec_32f(kernel, symmetryType))); - } - - if( sdepth == CV_8U && ddepth == CV_32S ) - return Ptr(new RowFilter - (kernel, anchor, RowVec_8u32s(kernel))); - if( sdepth == CV_8U && ddepth == CV_32F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_8U && ddepth == CV_64F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_16U && ddepth == CV_32F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_16U && ddepth == CV_64F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_16S && ddepth == CV_32F ) - return Ptr(new RowFilter - (kernel, anchor, RowVec_16s32f(kernel))); - if( sdepth == CV_16S && ddepth == CV_64F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_32F && ddepth == CV_32F ) - return Ptr(new RowFilter - (kernel, anchor, RowVec_32f(kernel))); - if( sdepth == CV_32F && ddepth == CV_64F ) - return Ptr(new RowFilter(kernel, anchor)); - if( sdepth == CV_64F && ddepth == CV_64F ) - return Ptr(new RowFilter(kernel, anchor)); - - CV_Error_( CV_StsNotImplemented, - ("Unsupported combination of source format (=%d), and buffer format (=%d)", - srcType, bufType)); - - return Ptr(0); -} - - -cv::Ptr cv::getLinearColumnFilter( int bufType, int dstType, - InputArray _kernel, int anchor, - int symmetryType, double delta, - int bits ) -{ - Mat kernel = _kernel.getMat(); - int sdepth = CV_MAT_DEPTH(bufType), ddepth = CV_MAT_DEPTH(dstType); - int cn = CV_MAT_CN(dstType); - CV_Assert( cn == CV_MAT_CN(bufType) && - sdepth >= std::max(ddepth, CV_32S) && - kernel.type() == sdepth ); - - if( !(symmetryType & (KERNEL_SYMMETRICAL|KERNEL_ASYMMETRICAL)) ) - { - if( ddepth == CV_8U && sdepth == CV_32S ) - return Ptr(new ColumnFilter, ColumnNoVec> - (kernel, anchor, delta, FixedPtCastEx(bits))); - if( ddepth == CV_8U && sdepth == CV_32F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_8U && sdepth == CV_64F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_16U && sdepth == CV_32F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_16U && sdepth == CV_64F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_16S && sdepth == CV_32F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_16S && sdepth == CV_64F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_32F && sdepth == CV_32F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - if( ddepth == CV_64F && sdepth == CV_64F ) - return Ptr(new ColumnFilter, ColumnNoVec>(kernel, anchor, delta)); - } - else - { - int ksize = kernel.rows + kernel.cols - 1; - if( ksize == 3 ) - { - if( ddepth == CV_8U && sdepth == CV_32S ) - return Ptr(new SymmColumnSmallFilter< - FixedPtCastEx, SymmColumnVec_32s8u> - (kernel, anchor, delta, symmetryType, FixedPtCastEx(bits), - SymmColumnVec_32s8u(kernel, symmetryType, bits, delta))); - if( ddepth == CV_16S && sdepth == CV_32S && bits == 0 ) - return Ptr(new SymmColumnSmallFilter, - SymmColumnSmallVec_32s16s>(kernel, anchor, delta, symmetryType, - Cast(), SymmColumnSmallVec_32s16s(kernel, symmetryType, bits, delta))); - if( ddepth == CV_32F && sdepth == CV_32F ) - return Ptr(new SymmColumnSmallFilter< - Cast,SymmColumnSmallVec_32f> - (kernel, anchor, delta, symmetryType, Cast(), - SymmColumnSmallVec_32f(kernel, symmetryType, 0, delta))); - } - if( ddepth == CV_8U && sdepth == CV_32S ) - return Ptr(new SymmColumnFilter, SymmColumnVec_32s8u> - (kernel, anchor, delta, symmetryType, FixedPtCastEx(bits), - SymmColumnVec_32s8u(kernel, symmetryType, bits, delta))); - if( ddepth == CV_8U && sdepth == CV_32F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_8U && sdepth == CV_64F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_16U && sdepth == CV_32F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_16U && sdepth == CV_64F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_16S && sdepth == CV_32S ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_16S && sdepth == CV_32F ) - return Ptr(new SymmColumnFilter, SymmColumnVec_32f16s> - (kernel, anchor, delta, symmetryType, Cast(), - SymmColumnVec_32f16s(kernel, symmetryType, 0, delta))); - if( ddepth == CV_16S && sdepth == CV_64F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - if( ddepth == CV_32F && sdepth == CV_32F ) - return Ptr(new SymmColumnFilter, SymmColumnVec_32f> - (kernel, anchor, delta, symmetryType, Cast(), - SymmColumnVec_32f(kernel, symmetryType, 0, delta))); - if( ddepth == CV_64F && sdepth == CV_64F ) - return Ptr(new SymmColumnFilter, ColumnNoVec> - (kernel, anchor, delta, symmetryType)); - } - - CV_Error_( CV_StsNotImplemented, - ("Unsupported combination of buffer format (=%d), and destination format (=%d)", - bufType, dstType)); - - return Ptr(0); -} - - -cv::Ptr cv::createSeparableLinearFilter( - int _srcType, int _dstType, - InputArray __rowKernel, InputArray __columnKernel, - Point _anchor, double _delta, - int _rowBorderType, int _columnBorderType, - const Scalar& _borderValue ) -{ - Mat _rowKernel = __rowKernel.getMat(), _columnKernel = __columnKernel.getMat(); - _srcType = CV_MAT_TYPE(_srcType); - _dstType = CV_MAT_TYPE(_dstType); - int sdepth = CV_MAT_DEPTH(_srcType), ddepth = CV_MAT_DEPTH(_dstType); - int cn = CV_MAT_CN(_srcType); - CV_Assert( cn == CV_MAT_CN(_dstType) ); - int rsize = _rowKernel.rows + _rowKernel.cols - 1; - int csize = _columnKernel.rows + _columnKernel.cols - 1; - if( _anchor.x < 0 ) - _anchor.x = rsize/2; - if( _anchor.y < 0 ) - _anchor.y = csize/2; - int rtype = getKernelType(_rowKernel, - _rowKernel.rows == 1 ? Point(_anchor.x, 0) : Point(0, _anchor.x)); - int ctype = getKernelType(_columnKernel, - _columnKernel.rows == 1 ? Point(_anchor.y, 0) : Point(0, _anchor.y)); - Mat rowKernel, columnKernel; - - int bdepth = std::max(CV_32F,std::max(sdepth, ddepth)); - int bits = 0; - - if( sdepth == CV_8U && - ((rtype == KERNEL_SMOOTH+KERNEL_SYMMETRICAL && - ctype == KERNEL_SMOOTH+KERNEL_SYMMETRICAL && - ddepth == CV_8U) || - ((rtype & (KERNEL_SYMMETRICAL+KERNEL_ASYMMETRICAL)) && - (ctype & (KERNEL_SYMMETRICAL+KERNEL_ASYMMETRICAL)) && - (rtype & ctype & KERNEL_INTEGER) && - ddepth == CV_16S)) ) - { - bdepth = CV_32S; - bits = ddepth == CV_8U ? 8 : 0; - _rowKernel.convertTo( rowKernel, CV_32S, 1 << bits ); - _columnKernel.convertTo( columnKernel, CV_32S, 1 << bits ); - bits *= 2; - _delta *= (1 << bits); - } - else - { - if( _rowKernel.type() != bdepth ) - _rowKernel.convertTo( rowKernel, bdepth ); - else - rowKernel = _rowKernel; - if( _columnKernel.type() != bdepth ) - _columnKernel.convertTo( columnKernel, bdepth ); - else - columnKernel = _columnKernel; - } - - int _bufType = CV_MAKETYPE(bdepth, cn); - Ptr _rowFilter = getLinearRowFilter( - _srcType, _bufType, rowKernel, _anchor.x, rtype); - Ptr _columnFilter = getLinearColumnFilter( - _bufType, _dstType, columnKernel, _anchor.y, ctype, _delta, bits ); - - return Ptr( new FilterEngine(Ptr(0), _rowFilter, _columnFilter, - _srcType, _dstType, _bufType, _rowBorderType, _columnBorderType, _borderValue )); -} - - -/****************************************************************************************\ -* Non-separable linear filter * -\****************************************************************************************/ - -namespace cv -{ - -void preprocess2DKernel( const Mat& kernel, vector& coords, vector& coeffs ) -{ - int i, j, k, nz = countNonZero(kernel), ktype = kernel.type(); - if(nz == 0) - nz = 1; - CV_Assert( ktype == CV_8U || ktype == CV_32S || ktype == CV_32F || ktype == CV_64F ); - coords.resize(nz); - coeffs.resize(nz*getElemSize(ktype)); - uchar* _coeffs = &coeffs[0]; - - for( i = k = 0; i < kernel.rows; i++ ) - { - const uchar* krow = kernel.data + kernel.step*i; - for( j = 0; j < kernel.cols; j++ ) - { - if( ktype == CV_8U ) - { - uchar val = krow[j]; - if( val == 0 ) - continue; - coords[k] = Point(j,i); - _coeffs[k++] = val; - } - else if( ktype == CV_32S ) - { - int val = ((const int*)krow)[j]; - if( val == 0 ) - continue; - coords[k] = Point(j,i); - ((int*)_coeffs)[k++] = val; - } - else if( ktype == CV_32F ) - { - float val = ((const float*)krow)[j]; - if( val == 0 ) - continue; - coords[k] = Point(j,i); - ((float*)_coeffs)[k++] = val; - } - else - { - double val = ((const double*)krow)[j]; - if( val == 0 ) - continue; - coords[k] = Point(j,i); - ((double*)_coeffs)[k++] = val; - } - } - } -} - - -template struct Filter2D : public BaseFilter -{ - typedef typename CastOp::type1 KT; - typedef typename CastOp::rtype DT; - - Filter2D( const Mat& _kernel, Point _anchor, - double _delta, const CastOp& _castOp=CastOp(), - const VecOp& _vecOp=VecOp() ) - { - anchor = _anchor; - ksize = _kernel.size(); - delta = saturate_cast(_delta); - castOp0 = _castOp; - vecOp = _vecOp; - CV_Assert( _kernel.type() == DataType::type ); - preprocess2DKernel( _kernel, coords, coeffs ); - ptrs.resize( coords.size() ); - } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width, int cn) - { - KT _delta = delta; - const Point* pt = &coords[0]; - const KT* kf = (const KT*)&coeffs[0]; - const ST** kp = (const ST**)&ptrs[0]; - int i, k, nz = (int)coords.size(); - CastOp castOp = castOp0; - - width *= cn; - for( ; count > 0; count--, dst += dststep, src++ ) - { - DT* D = (DT*)dst; - - for( k = 0; k < nz; k++ ) - kp[k] = (const ST*)src[pt[k].y] + pt[k].x*cn; - - i = vecOp((const uchar**)kp, dst, width); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - KT s0 = _delta, s1 = _delta, s2 = _delta, s3 = _delta; - - for( k = 0; k < nz; k++ ) - { - const ST* sptr = kp[k] + i; - KT f = kf[k]; - s0 += f*sptr[0]; - s1 += f*sptr[1]; - s2 += f*sptr[2]; - s3 += f*sptr[3]; - } - - D[i] = castOp(s0); D[i+1] = castOp(s1); - D[i+2] = castOp(s2); D[i+3] = castOp(s3); - } - #endif - for( ; i < width; i++ ) - { - KT s0 = _delta; - for( k = 0; k < nz; k++ ) - s0 += kf[k]*kp[k][i]; - D[i] = castOp(s0); - } - } - } - - vector coords; - vector coeffs; - vector ptrs; - KT delta; - CastOp castOp0; - VecOp vecOp; -}; - -} - -cv::Ptr cv::getLinearFilter(int srcType, int dstType, - InputArray filter_kernel, Point anchor, - double delta, int bits) -{ - Mat _kernel = filter_kernel.getMat(); - int sdepth = CV_MAT_DEPTH(srcType), ddepth = CV_MAT_DEPTH(dstType); - int cn = CV_MAT_CN(srcType), kdepth = _kernel.depth(); - CV_Assert( cn == CV_MAT_CN(dstType) && ddepth >= sdepth ); - - anchor = normalizeAnchor(anchor, _kernel.size()); - - /*if( sdepth == CV_8U && ddepth == CV_8U && kdepth == CV_32S ) - return Ptr(new Filter2D, FilterVec_8u> - (_kernel, anchor, delta, FixedPtCastEx(bits), - FilterVec_8u(_kernel, bits, delta))); - if( sdepth == CV_8U && ddepth == CV_16S && kdepth == CV_32S ) - return Ptr(new Filter2D, FilterVec_8u16s> - (_kernel, anchor, delta, FixedPtCastEx(bits), - FilterVec_8u16s(_kernel, bits, delta)));*/ - - kdepth = sdepth == CV_64F || ddepth == CV_64F ? CV_64F : CV_32F; - Mat kernel; - if( _kernel.type() == kdepth ) - kernel = _kernel; - else - _kernel.convertTo(kernel, kdepth, _kernel.type() == CV_32S ? 1./(1 << bits) : 1.); - - if( sdepth == CV_8U && ddepth == CV_8U ) - return Ptr(new Filter2D, FilterVec_8u> - (kernel, anchor, delta, Cast(), FilterVec_8u(kernel, 0, delta))); - if( sdepth == CV_8U && ddepth == CV_16U ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_8U && ddepth == CV_16S ) - return Ptr(new Filter2D, FilterVec_8u16s> - (kernel, anchor, delta, Cast(), FilterVec_8u16s(kernel, 0, delta))); - if( sdepth == CV_8U && ddepth == CV_32F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_8U && ddepth == CV_64F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - - if( sdepth == CV_16U && ddepth == CV_16U ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_16U && ddepth == CV_32F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_16U && ddepth == CV_64F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - - if( sdepth == CV_16S && ddepth == CV_16S ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_16S && ddepth == CV_32F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - if( sdepth == CV_16S && ddepth == CV_64F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - - if( sdepth == CV_32F && ddepth == CV_32F ) - return Ptr(new Filter2D, FilterVec_32f> - (kernel, anchor, delta, Cast(), FilterVec_32f(kernel, 0, delta))); - if( sdepth == CV_64F && ddepth == CV_64F ) - return Ptr(new Filter2D, FilterNoVec>(kernel, anchor, delta)); - - CV_Error_( CV_StsNotImplemented, - ("Unsupported combination of source format (=%d), and destination format (=%d)", - srcType, dstType)); - - return Ptr(0); -} - - -cv::Ptr cv::createLinearFilter( int _srcType, int _dstType, - InputArray filter_kernel, - Point _anchor, double _delta, - int _rowBorderType, int _columnBorderType, - const Scalar& _borderValue ) -{ - Mat _kernel = filter_kernel.getMat(); - _srcType = CV_MAT_TYPE(_srcType); - _dstType = CV_MAT_TYPE(_dstType); - int cn = CV_MAT_CN(_srcType); - CV_Assert( cn == CV_MAT_CN(_dstType) ); - - Mat kernel = _kernel; - int bits = 0; - - /*int sdepth = CV_MAT_DEPTH(_srcType), ddepth = CV_MAT_DEPTH(_dstType); - int ktype = _kernel.depth() == CV_32S ? KERNEL_INTEGER : getKernelType(_kernel, _anchor); - if( sdepth == CV_8U && (ddepth == CV_8U || ddepth == CV_16S) && - _kernel.rows*_kernel.cols <= (1 << 10) ) - { - bits = (ktype & KERNEL_INTEGER) ? 0 : 11; - _kernel.convertTo(kernel, CV_32S, 1 << bits); - }*/ - - Ptr _filter2D = getLinearFilter(_srcType, _dstType, - kernel, _anchor, _delta, bits); - - return Ptr(new FilterEngine(_filter2D, Ptr(0), - Ptr(0), _srcType, _dstType, _srcType, - _rowBorderType, _columnBorderType, _borderValue )); -} - - -void cv::filter2D( InputArray _src, OutputArray _dst, int ddepth, - InputArray _kernel, Point anchor, - double delta, int borderType ) -{ - Mat src = _src.getMat(), kernel = _kernel.getMat(); - - if( ddepth < 0 ) - ddepth = src.depth(); - -#if CV_SSE2 - int dft_filter_size = ((src.depth() == CV_8U && (ddepth == CV_8U || ddepth == CV_16S)) || - (src.depth() == CV_32F && ddepth == CV_32F)) && checkHardwareSupport(CV_CPU_SSE3)? 130 : 50; -#else - int dft_filter_size = 50; -#endif - - _dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - Mat dst = _dst.getMat(); - anchor = normalizeAnchor(anchor, kernel.size()); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if( tegra::filter2D(src, dst, kernel, anchor, delta, borderType) ) - return; -#endif - - if( kernel.cols*kernel.rows >= dft_filter_size ) - { - Mat temp; - if( src.data != dst.data ) - temp = dst; - else - temp.create(dst.size(), dst.type()); - crossCorr( src, kernel, temp, src.size(), - CV_MAKETYPE(ddepth, src.channels()), - anchor, delta, borderType ); - if( temp.data != dst.data ) - temp.copyTo(dst); - return; - } - - Ptr f = createLinearFilter(src.type(), dst.type(), kernel, - anchor, delta, borderType & ~BORDER_ISOLATED ); - f->apply(src, dst, Rect(0,0,-1,-1), Point(), (borderType & BORDER_ISOLATED) != 0 ); -} - - -void cv::sepFilter2D( InputArray _src, OutputArray _dst, int ddepth, - InputArray _kernelX, InputArray _kernelY, Point anchor, - double delta, int borderType ) -{ - Mat src = _src.getMat(), kernelX = _kernelX.getMat(), kernelY = _kernelY.getMat(); - - if( ddepth < 0 ) - ddepth = src.depth(); - - _dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) ); - Mat dst = _dst.getMat(); - - Ptr f = createSeparableLinearFilter(src.type(), - dst.type(), kernelX, kernelY, anchor, delta, borderType & ~BORDER_ISOLATED ); - f->apply(src, dst, Rect(0,0,-1,-1), Point(), (borderType & BORDER_ISOLATED) != 0 ); -} - - -CV_IMPL void -cvFilter2D( const CvArr* srcarr, CvArr* dstarr, const CvMat* _kernel, CvPoint anchor ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - cv::Mat kernel = cv::cvarrToMat(_kernel); - - CV_Assert( src.size() == dst.size() && src.channels() == dst.channels() ); - - cv::filter2D( src, dst, dst.depth(), kernel, anchor, 0, cv::BORDER_REPLICATE ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/floodfill.cpp b/modules/imgproc/src/floodfill.cpp deleted file mode 100644 index db2563d..0000000 --- a/modules/imgproc/src/floodfill.cpp +++ /dev/null @@ -1,651 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) -# pragma GCC diagnostic ignored "-Warray-bounds" -#endif - -typedef struct CvFFillSegment -{ - ushort y; - ushort l; - ushort r; - ushort prevl; - ushort prevr; - short dir; -} -CvFFillSegment; - -#define UP 1 -#define DOWN -1 - -#define ICV_PUSH( Y, L, R, PREV_L, PREV_R, DIR ) \ -{ \ - tail->y = (ushort)(Y); \ - tail->l = (ushort)(L); \ - tail->r = (ushort)(R); \ - tail->prevl = (ushort)(PREV_L); \ - tail->prevr = (ushort)(PREV_R); \ - tail->dir = (short)(DIR); \ - if( ++tail == buffer_end ) \ - { \ - buffer->resize(buffer->size() * 2); \ - tail = &buffer->front() + (tail - head); \ - head = &buffer->front(); \ - buffer_end = head + buffer->size(); \ - } \ -} - -#define ICV_POP( Y, L, R, PREV_L, PREV_R, DIR ) \ -{ \ - --tail; \ - Y = tail->y; \ - L = tail->l; \ - R = tail->r; \ - PREV_L = tail->prevl; \ - PREV_R = tail->prevr; \ - DIR = tail->dir; \ -} - -/****************************************************************************************\ -* Simple Floodfill (repainting single-color connected component) * -\****************************************************************************************/ - -template -static void -icvFloodFill_CnIR( uchar* pImage, int step, CvSize roi, CvPoint seed, - _Tp newVal, CvConnectedComp* region, int flags, - std::vector* buffer ) -{ - _Tp* img = (_Tp*)(pImage + step * seed.y); - int i, L, R; - int area = 0; - int XMin, XMax, YMin = seed.y, YMax = seed.y; - int _8_connectivity = (flags & 255) == 8; - CvFFillSegment* buffer_end = &buffer->front() + buffer->size(), *head = &buffer->front(), *tail = &buffer->front(); - - L = R = XMin = XMax = seed.x; - - _Tp val0 = img[L]; - img[L] = newVal; - - while( ++R < roi.width && img[R] == val0 ) - img[R] = newVal; - - while( --L >= 0 && img[L] == val0 ) - img[L] = newVal; - - XMax = --R; - XMin = ++L; - - ICV_PUSH( seed.y, L, R, R + 1, R, UP ); - - while( head != tail ) - { - int k, YC, PL, PR, dir; - ICV_POP( YC, L, R, PL, PR, dir ); - - int data[][3] = - { - {-dir, L - _8_connectivity, R + _8_connectivity}, - {dir, L - _8_connectivity, PL - 1}, - {dir, PR + 1, R + _8_connectivity} - }; - - if( region ) - { - area += R - L + 1; - - if( XMax < R ) XMax = R; - if( XMin > L ) XMin = L; - if( YMax < YC ) YMax = YC; - if( YMin > YC ) YMin = YC; - } - - for( k = 0; k < 3; k++ ) - { - dir = data[k][0]; - img = (_Tp*)(pImage + (YC + dir) * step); - int left = data[k][1]; - int right = data[k][2]; - - if( (unsigned)(YC + dir) >= (unsigned)roi.height ) - continue; - - for( i = left; i <= right; i++ ) - { - if( (unsigned)i < (unsigned)roi.width && img[i] == val0 ) - { - int j = i; - img[i] = newVal; - while( --j >= 0 && img[j] == val0 ) - img[j] = newVal; - - while( ++i < roi.width && img[i] == val0 ) - img[i] = newVal; - - ICV_PUSH( YC + dir, j+1, i-1, L, R, -dir ); - } - } - } - } - - if( region ) - { - region->area = area; - region->rect.x = XMin; - region->rect.y = YMin; - region->rect.width = XMax - XMin + 1; - region->rect.height = YMax - YMin + 1; - region->value = cv::Scalar(newVal); - } -} - -/****************************************************************************************\ -* Gradient Floodfill * -\****************************************************************************************/ - -struct Diff8uC1 -{ - Diff8uC1(uchar _lo, uchar _up) : lo(_lo), interval(_lo + _up) {} - bool operator()(const uchar* a, const uchar* b) const - { return (unsigned)(a[0] - b[0] + lo) <= interval; } - unsigned lo, interval; -}; - -struct Diff8uC3 -{ - Diff8uC3(cv::Vec3b _lo, cv::Vec3b _up) - { - for( int k = 0; k < 3; k++ ) - lo[k] = _lo[k], interval[k] = _lo[k] + _up[k]; - } - bool operator()(const cv::Vec3b* a, const cv::Vec3b* b) const - { - return (unsigned)(a[0][0] - b[0][0] + lo[0]) <= interval[0] && - (unsigned)(a[0][1] - b[0][1] + lo[1]) <= interval[1] && - (unsigned)(a[0][2] - b[0][2] + lo[2]) <= interval[2]; - } - unsigned lo[3], interval[3]; -}; - -template -struct DiffC1 -{ - DiffC1(_Tp _lo, _Tp _up) : lo(-_lo), up(_up) {} - bool operator()(const _Tp* a, const _Tp* b) const - { - _Tp d = a[0] - b[0]; - return lo <= d && d <= up; - } - _Tp lo, up; -}; - -template -struct DiffC3 -{ - DiffC3(_Tp _lo, _Tp _up) : lo(-_lo), up(_up) {} - bool operator()(const _Tp* a, const _Tp* b) const - { - _Tp d = *a - *b; - return lo[0] <= d[0] && d[0] <= up[0] && - lo[1] <= d[1] && d[1] <= up[1] && - lo[2] <= d[2] && d[2] <= up[2]; - } - _Tp lo, up; -}; - -typedef DiffC1 Diff32sC1; -typedef DiffC3 Diff32sC3; -typedef DiffC1 Diff32fC1; -typedef DiffC3 Diff32fC3; - -static cv::Vec3i& operator += (cv::Vec3i& a, const cv::Vec3b& b) -{ - a[0] += b[0]; - a[1] += b[1]; - a[2] += b[2]; - return a; -} - -template -static void -icvFloodFillGrad_CnIR( uchar* pImage, int step, uchar* pMask, int maskStep, - CvSize /*roi*/, CvPoint seed, _Tp newVal, Diff diff, - CvConnectedComp* region, int flags, - std::vector* buffer ) -{ - _Tp* img = (_Tp*)(pImage + step*seed.y); - uchar* mask = (pMask += maskStep + 1) + maskStep*seed.y; - int i, L, R; - int area = 0; - _WTp sum = _WTp((typename cv::DataType<_Tp>::channel_type)0); - int XMin, XMax, YMin = seed.y, YMax = seed.y; - int _8_connectivity = (flags & 255) == 8; - int fixedRange = flags & CV_FLOODFILL_FIXED_RANGE; - int fillImage = (flags & CV_FLOODFILL_MASK_ONLY) == 0; - uchar newMaskVal = (uchar)(flags & 0xff00 ? flags >> 8 : 1); - CvFFillSegment* buffer_end = &buffer->front() + buffer->size(), *head = &buffer->front(), *tail = &buffer->front(); - - L = R = seed.x; - if( mask[L] ) - return; - - mask[L] = newMaskVal; - _Tp val0 = img[L]; - - if( fixedRange ) - { - while( !mask[R + 1] && diff( img + (R+1), &val0 )) - mask[++R] = newMaskVal; - - while( !mask[L - 1] && diff( img + (L-1), &val0 )) - mask[--L] = newMaskVal; - } - else - { - while( !mask[R + 1] && diff( img + (R+1), img + R )) - mask[++R] = newMaskVal; - - while( !mask[L - 1] && diff( img + (L-1), img + L )) - mask[--L] = newMaskVal; - } - - XMax = R; - XMin = L; - - ICV_PUSH( seed.y, L, R, R + 1, R, UP ); - - while( head != tail ) - { - int k, YC, PL, PR, dir; - ICV_POP( YC, L, R, PL, PR, dir ); - - int data[][3] = - { - {-dir, L - _8_connectivity, R + _8_connectivity}, - {dir, L - _8_connectivity, PL - 1}, - {dir, PR + 1, R + _8_connectivity} - }; - - unsigned length = (unsigned)(R-L); - - if( region ) - { - area += (int)length + 1; - - if( XMax < R ) XMax = R; - if( XMin > L ) XMin = L; - if( YMax < YC ) YMax = YC; - if( YMin > YC ) YMin = YC; - } - - for( k = 0; k < 3; k++ ) - { - dir = data[k][0]; - img = (_Tp*)(pImage + (YC + dir) * step); - _Tp* img1 = (_Tp*)(pImage + YC * step); - mask = pMask + (YC + dir) * maskStep; - int left = data[k][1]; - int right = data[k][2]; - - if( fixedRange ) - for( i = left; i <= right; i++ ) - { - if( !mask[i] && diff( img + i, &val0 )) - { - int j = i; - mask[i] = newMaskVal; - while( !mask[--j] && diff( img + j, &val0 )) - mask[j] = newMaskVal; - - while( !mask[++i] && diff( img + i, &val0 )) - mask[i] = newMaskVal; - - ICV_PUSH( YC + dir, j+1, i-1, L, R, -dir ); - } - } - else if( !_8_connectivity ) - for( i = left; i <= right; i++ ) - { - if( !mask[i] && diff( img + i, img1 + i )) - { - int j = i; - mask[i] = newMaskVal; - while( !mask[--j] && diff( img + j, img + (j+1) )) - mask[j] = newMaskVal; - - while( !mask[++i] && - (diff( img + i, img + (i-1) ) || - (diff( img + i, img1 + i) && i <= R))) - mask[i] = newMaskVal; - - ICV_PUSH( YC + dir, j+1, i-1, L, R, -dir ); - } - } - else - for( i = left; i <= right; i++ ) - { - int idx; - _Tp val; - - if( !mask[i] && - (((val = img[i], - (unsigned)(idx = i-L-1) <= length) && - diff( &val, img1 + (i-1))) || - ((unsigned)(++idx) <= length && - diff( &val, img1 + i )) || - ((unsigned)(++idx) <= length && - diff( &val, img1 + (i+1) )))) - { - int j = i; - mask[i] = newMaskVal; - while( !mask[--j] && diff( img + j, img + (j+1) )) - mask[j] = newMaskVal; - - while( !mask[++i] && - ((val = img[i], - diff( &val, img + (i-1) )) || - (((unsigned)(idx = i-L-1) <= length && - diff( &val, img1 + (i-1) ))) || - ((unsigned)(++idx) <= length && - diff( &val, img1 + i )) || - ((unsigned)(++idx) <= length && - diff( &val, img1 + (i+1) )))) - mask[i] = newMaskVal; - - ICV_PUSH( YC + dir, j+1, i-1, L, R, -dir ); - } - } - } - - img = (_Tp*)(pImage + YC * step); - if( fillImage ) - for( i = L; i <= R; i++ ) - img[i] = newVal; - else if( region ) - for( i = L; i <= R; i++ ) - sum += img[i]; - } - - if( region ) - { - region->area = area; - region->rect.x = XMin; - region->rect.y = YMin; - region->rect.width = XMax - XMin + 1; - region->rect.height = YMax - YMin + 1; - - if( fillImage ) - region->value = cv::Scalar(newVal); - else - { - double iarea = area ? 1./area : 0; - region->value = cv::Scalar(sum*iarea); - } - } -} - - -/****************************************************************************************\ -* External Functions * -\****************************************************************************************/ - -typedef void (*CvFloodFillFunc)( - void* img, int step, CvSize size, CvPoint seed, void* newval, - CvConnectedComp* comp, int flags, void* buffer, int cn ); - -typedef void (*CvFloodFillGradFunc)( - void* img, int step, uchar* mask, int maskStep, CvSize size, - CvPoint seed, void* newval, void* d_lw, void* d_up, void* ccomp, - int flags, void* buffer, int cn ); - -CV_IMPL void -cvFloodFill( CvArr* arr, CvPoint seed_point, - CvScalar newVal, CvScalar lo_diff, CvScalar up_diff, - CvConnectedComp* comp, int flags, CvArr* maskarr ) -{ - cv::Ptr tempMask; - std::vector buffer; - - if( comp ) - memset( comp, 0, sizeof(*comp) ); - - int i, type, depth, cn, is_simple; - int buffer_size, connectivity = flags & 255; - union { - uchar b[4]; - int i[4]; - float f[4]; - double _[4]; - } nv_buf; - nv_buf._[0] = nv_buf._[1] = nv_buf._[2] = nv_buf._[3] = 0; - - struct { cv::Vec3b b; cv::Vec3i i; cv::Vec3f f; } ld_buf, ud_buf; - CvMat stub, *img = cvGetMat(arr, &stub); - CvMat maskstub, *mask = (CvMat*)maskarr; - CvSize size; - - type = CV_MAT_TYPE( img->type ); - depth = CV_MAT_DEPTH(type); - cn = CV_MAT_CN(type); - - if( connectivity == 0 ) - connectivity = 4; - else if( connectivity != 4 && connectivity != 8 ) - CV_Error( CV_StsBadFlag, "Connectivity must be 4, 0(=4) or 8" ); - - is_simple = mask == 0 && (flags & CV_FLOODFILL_MASK_ONLY) == 0; - - for( i = 0; i < cn; i++ ) - { - if( lo_diff.val[i] < 0 || up_diff.val[i] < 0 ) - CV_Error( CV_StsBadArg, "lo_diff and up_diff must be non-negative" ); - is_simple &= fabs(lo_diff.val[i]) < DBL_EPSILON && fabs(up_diff.val[i]) < DBL_EPSILON; - } - - size = cvGetMatSize( img ); - - if( (unsigned)seed_point.x >= (unsigned)size.width || - (unsigned)seed_point.y >= (unsigned)size.height ) - CV_Error( CV_StsOutOfRange, "Seed point is outside of image" ); - - cvScalarToRawData( &newVal, &nv_buf, type, 0 ); - buffer_size = MAX( size.width, size.height ) * 2; - buffer.resize( buffer_size ); - - if( is_simple ) - { - int elem_size = CV_ELEM_SIZE(type); - const uchar* seed_ptr = img->data.ptr + img->step*seed_point.y + elem_size*seed_point.x; - - for(i = 0; i < elem_size; i++) - if (seed_ptr[i] != nv_buf.b[i]) - break; - - if (i != elem_size) - { - if( type == CV_8UC1 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.b[0], - comp, flags, &buffer); - else if( type == CV_8UC3 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3b(nv_buf.b), - comp, flags, &buffer); - else if( type == CV_32SC1 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.i[0], - comp, flags, &buffer); - else if( type == CV_32FC1 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.f[0], - comp, flags, &buffer); - else if( type == CV_32SC3 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3i(nv_buf.i), - comp, flags, &buffer); - else if( type == CV_32FC3 ) - icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3f(nv_buf.f), - comp, flags, &buffer); - else - CV_Error( CV_StsUnsupportedFormat, "" ); - return; - } - } - - if( !mask ) - { - /* created mask will be 8-byte aligned */ - tempMask = cvCreateMat( size.height + 2, (size.width + 9) & -8, CV_8UC1 ); - mask = tempMask; - } - else - { - mask = cvGetMat( mask, &maskstub ); - if( !CV_IS_MASK_ARR( mask )) - CV_Error( CV_StsBadMask, "" ); - - if( mask->width != size.width + 2 || mask->height != size.height + 2 ) - CV_Error( CV_StsUnmatchedSizes, "mask must be 2 pixel wider " - "and 2 pixel taller than filled image" ); - } - - int width = tempMask ? mask->step : size.width + 2; - uchar* mask_row = mask->data.ptr + mask->step; - memset( mask_row - mask->step, 1, width ); - - for( i = 1; i <= size.height; i++, mask_row += mask->step ) - { - if( tempMask ) - memset( mask_row, 0, width ); - mask_row[0] = mask_row[size.width+1] = (uchar)1; - } - memset( mask_row, 1, width ); - - if( depth == CV_8U ) - for( i = 0; i < cn; i++ ) - { - int t = cvFloor(lo_diff.val[i]); - ld_buf.b[i] = CV_CAST_8U(t); - t = cvFloor(up_diff.val[i]); - ud_buf.b[i] = CV_CAST_8U(t); - } - else if( depth == CV_32S ) - for( i = 0; i < cn; i++ ) - { - int t = cvFloor(lo_diff.val[i]); - ld_buf.i[i] = t; - t = cvFloor(up_diff.val[i]); - ud_buf.i[i] = t; - } - else if( depth == CV_32F ) - for( i = 0; i < cn; i++ ) - { - ld_buf.f[i] = (float)lo_diff.val[i]; - ud_buf.f[i] = (float)up_diff.val[i]; - } - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - if( type == CV_8UC1 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, nv_buf.b[0], - Diff8uC1(ld_buf.b[0], ud_buf.b[0]), - comp, flags, &buffer); - else if( type == CV_8UC3 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, cv::Vec3b(nv_buf.b), - Diff8uC3(ld_buf.b, ud_buf.b), - comp, flags, &buffer); - else if( type == CV_32SC1 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, nv_buf.i[0], - Diff32sC1(ld_buf.i[0], ud_buf.i[0]), - comp, flags, &buffer); - else if( type == CV_32SC3 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, cv::Vec3i(nv_buf.i), - Diff32sC3(ld_buf.i, ud_buf.i), - comp, flags, &buffer); - else if( type == CV_32FC1 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, nv_buf.f[0], - Diff32fC1(ld_buf.f[0], ud_buf.f[0]), - comp, flags, &buffer); - else if( type == CV_32FC3 ) - icvFloodFillGrad_CnIR( - img->data.ptr, img->step, mask->data.ptr, mask->step, - size, seed_point, cv::Vec3f(nv_buf.f), - Diff32fC3(ld_buf.f, ud_buf.f), - comp, flags, &buffer); - else - CV_Error(CV_StsUnsupportedFormat, ""); -} - - -int cv::floodFill( InputOutputArray _image, Point seedPoint, - Scalar newVal, Rect* rect, - Scalar loDiff, Scalar upDiff, int flags ) -{ - CvConnectedComp ccomp; - CvMat c_image = _image.getMat(); - cvFloodFill(&c_image, seedPoint, newVal, loDiff, upDiff, &ccomp, flags, 0); - if( rect ) - *rect = ccomp.rect; - return cvRound(ccomp.area); -} - -int cv::floodFill( InputOutputArray _image, InputOutputArray _mask, - Point seedPoint, Scalar newVal, Rect* rect, - Scalar loDiff, Scalar upDiff, int flags ) -{ - CvConnectedComp ccomp; - CvMat c_image = _image.getMat(), c_mask = _mask.getMat(); - cvFloodFill(&c_image, seedPoint, newVal, loDiff, upDiff, &ccomp, flags, c_mask.data.ptr ? &c_mask : 0); - if( rect ) - *rect = ccomp.rect; - return cvRound(ccomp.area); -} - -/* End of file. */ diff --git a/modules/imgproc/src/gabor.cpp b/modules/imgproc/src/gabor.cpp deleted file mode 100644 index 567ed8f..0000000 --- a/modules/imgproc/src/gabor.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009-2012, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/* - Gabor filters and such. To be greatly extended to have full texture analysis. - For the formulas and the explanation of the parameters see: - http://en.wikipedia.org/wiki/Gabor_filter -*/ - -cv::Mat cv::getGaborKernel( Size ksize, double sigma, double theta, - double lambd, double gamma, double psi, int ktype ) -{ - double sigma_x = sigma; - double sigma_y = sigma/gamma; - int nstds = 3; - int xmin, xmax, ymin, ymax; - double c = cos(theta), s = sin(theta); - - if( ksize.width > 0 ) - xmax = ksize.width/2; - else - xmax = cvRound(std::max(fabs(nstds*sigma_x*c), fabs(nstds*sigma_y*s))); - - if( ksize.height > 0 ) - ymax = ksize.height/2; - else - ymax = cvRound(std::max(fabs(nstds*sigma_x*s), fabs(nstds*sigma_y*c))); - - xmin = -xmax; - ymin = -ymax; - - CV_Assert( ktype == CV_32F || ktype == CV_64F ); - - Mat kernel(ymax - ymin + 1, xmax - xmin + 1, ktype); - double scale = 1; - double ex = -0.5/(sigma_x*sigma_x); - double ey = -0.5/(sigma_y*sigma_y); - double cscale = CV_PI*2/lambd; - - for( int y = ymin; y <= ymax; y++ ) - for( int x = xmin; x <= xmax; x++ ) - { - double xr = x*c + y*s; - double yr = -x*s + y*c; - - double v = scale*exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi); - if( ktype == CV_32F ) - kernel.at(ymax - y, xmax - x) = (float)v; - else - kernel.at(ymax - y, xmax - x) = v; - } - - return kernel; -} - - -/* End of file. */ diff --git a/modules/imgproc/src/gcgraph.hpp b/modules/imgproc/src/gcgraph.hpp deleted file mode 100644 index 92b9e12..0000000 --- a/modules/imgproc/src/gcgraph.hpp +++ /dev/null @@ -1,385 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef _CV_GCGRAPH_H_ -#define _CV_GCGRAPH_H_ - -template class GCGraph -{ -public: - GCGraph(); - GCGraph( unsigned int vtxCount, unsigned int edgeCount ); - ~GCGraph(); - void create( unsigned int vtxCount, unsigned int edgeCount ); - int addVtx(); - void addEdges( int i, int j, TWeight w, TWeight revw ); - void addTermWeights( int i, TWeight sourceW, TWeight sinkW ); - TWeight maxFlow(); - bool inSourceSegment( int i ); -private: - class Vtx - { - public: - Vtx *next; // initialized and used in maxFlow() only - int parent; - int first; - int ts; - int dist; - TWeight weight; - uchar t; - }; - class Edge - { - public: - int dst; - int next; - TWeight weight; - }; - - std::vector vtcs; - std::vector edges; - TWeight flow; -}; - -template -GCGraph::GCGraph() -{ - flow = 0; -} -template -GCGraph::GCGraph( unsigned int vtxCount, unsigned int edgeCount ) -{ - create( vtxCount, edgeCount ); -} -template -GCGraph::~GCGraph() -{ -} -template -void GCGraph::create( unsigned int vtxCount, unsigned int edgeCount ) -{ - vtcs.reserve( vtxCount ); - edges.reserve( edgeCount + 2 ); - flow = 0; -} - -template -int GCGraph::addVtx() -{ - Vtx v; - memset( &v, 0, sizeof(Vtx)); - vtcs.push_back(v); - return (int)vtcs.size() - 1; -} - -template -void GCGraph::addEdges( int i, int j, TWeight w, TWeight revw ) -{ - CV_Assert( i>=0 && i<(int)vtcs.size() ); - CV_Assert( j>=0 && j<(int)vtcs.size() ); - CV_Assert( w>=0 && revw>=0 ); - CV_Assert( i != j ); - - if( !edges.size() ) - edges.resize( 2 ); - - Edge fromI, toI; - fromI.dst = j; - fromI.next = vtcs[i].first; - fromI.weight = w; - vtcs[i].first = (int)edges.size(); - edges.push_back( fromI ); - - toI.dst = i; - toI.next = vtcs[j].first; - toI.weight = revw; - vtcs[j].first = (int)edges.size(); - edges.push_back( toI ); -} - -template -void GCGraph::addTermWeights( int i, TWeight sourceW, TWeight sinkW ) -{ - CV_Assert( i>=0 && i<(int)vtcs.size() ); - - TWeight dw = vtcs[i].weight; - if( dw > 0 ) - sourceW += dw; - else - sinkW -= dw; - flow += (sourceW < sinkW) ? sourceW : sinkW; - vtcs[i].weight = sourceW - sinkW; -} - -template -TWeight GCGraph::maxFlow() -{ - const int TERMINAL = -1, ORPHAN = -2; - Vtx stub, *nilNode = &stub, *first = nilNode, *last = nilNode; - int curr_ts = 0; - stub.next = nilNode; - Vtx *vtxPtr = &vtcs[0]; - Edge *edgePtr = &edges[0]; - - std::vector orphans; - - // initialize the active queue and the graph vertices - for( int i = 0; i < (int)vtcs.size(); i++ ) - { - Vtx* v = vtxPtr + i; - v->ts = 0; - if( v->weight != 0 ) - { - last = last->next = v; - v->dist = 1; - v->parent = TERMINAL; - v->t = v->weight < 0; - } - else - v->parent = 0; - } - first = first->next; - last->next = nilNode; - nilNode->next = 0; - - // run the search-path -> augment-graph -> restore-trees loop - for(;;) - { - Vtx* v, *u; - int e0 = -1, ei = 0, ej = 0; - TWeight minWeight, weight; - uchar vt; - - // grow S & T search trees, find an edge connecting them - while( first != nilNode ) - { - v = first; - if( v->parent ) - { - vt = v->t; - for( ei = v->first; ei != 0; ei = edgePtr[ei].next ) - { - if( edgePtr[ei^vt].weight == 0 ) - continue; - u = vtxPtr+edgePtr[ei].dst; - if( !u->parent ) - { - u->t = vt; - u->parent = ei ^ 1; - u->ts = v->ts; - u->dist = v->dist + 1; - if( !u->next ) - { - u->next = nilNode; - last = last->next = u; - } - continue; - } - - if( u->t != vt ) - { - e0 = ei ^ vt; - break; - } - - if( u->dist > v->dist+1 && u->ts <= v->ts ) - { - // reassign the parent - u->parent = ei ^ 1; - u->ts = v->ts; - u->dist = v->dist + 1; - } - } - if( e0 > 0 ) - break; - } - // exclude the vertex from the active list - first = first->next; - v->next = 0; - } - - if( e0 <= 0 ) - break; - - // find the minimum edge weight along the path - minWeight = edgePtr[e0].weight; - assert( minWeight > 0 ); - // k = 1: source tree, k = 0: destination tree - for( int k = 1; k >= 0; k-- ) - { - for( v = vtxPtr+edgePtr[e0^k].dst;; v = vtxPtr+edgePtr[ei].dst ) - { - if( (ei = v->parent) < 0 ) - break; - weight = edgePtr[ei^k].weight; - minWeight = MIN(minWeight, weight); - assert( minWeight > 0 ); - } - weight = fabs(v->weight); - minWeight = MIN(minWeight, weight); - assert( minWeight > 0 ); - } - - // modify weights of the edges along the path and collect orphans - edgePtr[e0].weight -= minWeight; - edgePtr[e0^1].weight += minWeight; - flow += minWeight; - - // k = 1: source tree, k = 0: destination tree - for( int k = 1; k >= 0; k-- ) - { - for( v = vtxPtr+edgePtr[e0^k].dst;; v = vtxPtr+edgePtr[ei].dst ) - { - if( (ei = v->parent) < 0 ) - break; - edgePtr[ei^(k^1)].weight += minWeight; - if( (edgePtr[ei^k].weight -= minWeight) == 0 ) - { - orphans.push_back(v); - v->parent = ORPHAN; - } - } - - v->weight = v->weight + minWeight*(1-k*2); - if( v->weight == 0 ) - { - orphans.push_back(v); - v->parent = ORPHAN; - } - } - - // restore the search trees by finding new parents for the orphans - curr_ts++; - while( !orphans.empty() ) - { - Vtx* v2 = orphans.back(); - orphans.pop_back(); - - int d, minDist = INT_MAX; - e0 = 0; - vt = v2->t; - - for( ei = v2->first; ei != 0; ei = edgePtr[ei].next ) - { - if( edgePtr[ei^(vt^1)].weight == 0 ) - continue; - u = vtxPtr+edgePtr[ei].dst; - if( u->t != vt || u->parent == 0 ) - continue; - // compute the distance to the tree root - for( d = 0;; ) - { - if( u->ts == curr_ts ) - { - d += u->dist; - break; - } - ej = u->parent; - d++; - if( ej < 0 ) - { - if( ej == ORPHAN ) - d = INT_MAX-1; - else - { - u->ts = curr_ts; - u->dist = 1; - } - break; - } - u = vtxPtr+edgePtr[ej].dst; - } - - // update the distance - if( ++d < INT_MAX ) - { - if( d < minDist ) - { - minDist = d; - e0 = ei; - } - for( u = vtxPtr+edgePtr[ei].dst; u->ts != curr_ts; u = vtxPtr+edgePtr[u->parent].dst ) - { - u->ts = curr_ts; - u->dist = --d; - } - } - } - - if( (v2->parent = e0) > 0 ) - { - v2->ts = curr_ts; - v2->dist = minDist; - continue; - } - - /* no parent is found */ - v2->ts = 0; - for( ei = v2->first; ei != 0; ei = edgePtr[ei].next ) - { - u = vtxPtr+edgePtr[ei].dst; - ej = u->parent; - if( u->t != vt || !ej ) - continue; - if( edgePtr[ei^(vt^1)].weight && !u->next ) - { - u->next = nilNode; - last = last->next = u; - } - if( ej > 0 && vtxPtr+edgePtr[ej].dst == v2 ) - { - orphans.push_back(u); - u->parent = ORPHAN; - } - } - } - } - return flow; -} - -template -bool GCGraph::inSourceSegment( int i ) -{ - CV_Assert( i>=0 && i<(int)vtcs.size() ); - return vtcs[i].t == 0; -} - -#endif diff --git a/modules/imgproc/src/generalized_hough.cpp b/modules/imgproc/src/generalized_hough.cpp deleted file mode 100644 index 8d0ac75..0000000 --- a/modules/imgproc/src/generalized_hough.cpp +++ /dev/null @@ -1,1290 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -using namespace std; -using namespace cv; - -namespace -{ - ///////////////////////////////////// - // Common - - template void releaseVector(vector& v) - { - vector empty; - empty.swap(v); - } - - double toRad(double a) - { - return a * CV_PI / 180.0; - } - - bool notNull(float v) - { - return fabs(v) > numeric_limits::epsilon(); - } - - class GHT_Pos : public GeneralizedHough - { - public: - GHT_Pos(); - - protected: - void setTemplateImpl(const Mat& edges, const Mat& dx, const Mat& dy, Point templCenter); - void detectImpl(const Mat& edges, const Mat& dx, const Mat& dy, OutputArray positions, OutputArray votes); - void releaseImpl(); - - virtual void processTempl() = 0; - virtual void processImage() = 0; - - void filterMinDist(); - void convertTo(OutputArray positions, OutputArray votes); - - double minDist; - - Size templSize; - Point templCenter; - Mat templEdges; - Mat templDx; - Mat templDy; - - Size imageSize; - Mat imageEdges; - Mat imageDx; - Mat imageDy; - - vector posOutBuf; - vector voteOutBuf; - }; - - GHT_Pos::GHT_Pos() - { - minDist = 1.0; - } - - void GHT_Pos::setTemplateImpl(const Mat& edges, const Mat& dx, const Mat& dy, Point templCenter_) - { - templSize = edges.size(); - templCenter = templCenter_; - edges.copyTo(templEdges); - dx.copyTo(templDx); - dy.copyTo(templDy); - - processTempl(); - } - - void GHT_Pos::detectImpl(const Mat& edges, const Mat& dx, const Mat& dy, OutputArray positions, OutputArray votes) - { - imageSize = edges.size(); - edges.copyTo(imageEdges); - dx.copyTo(imageDx); - dy.copyTo(imageDy); - - posOutBuf.clear(); - voteOutBuf.clear(); - - processImage(); - - if (!posOutBuf.empty()) - { - if (minDist > 1) - filterMinDist(); - convertTo(positions, votes); - } - else - { - positions.release(); - if (votes.needed()) - votes.release(); - } - } - - void GHT_Pos::releaseImpl() - { - templSize = Size(); - templCenter = Point(-1, -1); - templEdges.release(); - templDx.release(); - templDy.release(); - - imageSize = Size(); - imageEdges.release(); - imageDx.release(); - imageDy.release(); - - releaseVector(posOutBuf); - releaseVector(voteOutBuf); - } - - #define votes_cmp_gt(l1, l2) (aux[l1][0] > aux[l2][0]) - static CV_IMPLEMENT_QSORT_EX( sortIndexies, size_t, votes_cmp_gt, const Vec3i* ) - - void GHT_Pos::filterMinDist() - { - size_t oldSize = posOutBuf.size(); - const bool hasVotes = !voteOutBuf.empty(); - - CV_Assert(!hasVotes || voteOutBuf.size() == oldSize); - - vector oldPosBuf(posOutBuf); - vector oldVoteBuf(voteOutBuf); - - vector indexies(oldSize); - for (size_t i = 0; i < oldSize; ++i) - indexies[i] = i; - sortIndexies(&indexies[0], oldSize, &oldVoteBuf[0]); - - posOutBuf.clear(); - voteOutBuf.clear(); - - const int cellSize = cvRound(minDist); - const int gridWidth = (imageSize.width + cellSize - 1) / cellSize; - const int gridHeight = (imageSize.height + cellSize - 1) / cellSize; - - vector< vector > grid(gridWidth * gridHeight); - - const double minDist2 = minDist * minDist; - - for (size_t i = 0; i < oldSize; ++i) - { - const size_t ind = indexies[i]; - - Point2f p(oldPosBuf[ind][0], oldPosBuf[ind][1]); - - bool good = true; - - const int xCell = static_cast(p.x / cellSize); - const int yCell = static_cast(p.y / cellSize); - - int x1 = xCell - 1; - int y1 = yCell - 1; - int x2 = xCell + 1; - int y2 = yCell + 1; - - // boundary check - x1 = std::max(0, x1); - y1 = std::max(0, y1); - x2 = std::min(gridWidth - 1, x2); - y2 = std::min(gridHeight - 1, y2); - - for (int yy = y1; yy <= y2; ++yy) - { - for (int xx = x1; xx <= x2; ++xx) - { - const vector& m = grid[yy * gridWidth + xx]; - - for(size_t j = 0; j < m.size(); ++j) - { - const Point2f d = p - m[j]; - - if (d.ddot(d) < minDist2) - { - good = false; - goto break_out; - } - } - } - } - - break_out: - - if(good) - { - grid[yCell * gridWidth + xCell].push_back(p); - - posOutBuf.push_back(oldPosBuf[ind]); - if (hasVotes) - voteOutBuf.push_back(oldVoteBuf[ind]); - } - } - } - - void GHT_Pos::convertTo(OutputArray _positions, OutputArray _votes) - { - const int total = static_cast(posOutBuf.size()); - const bool hasVotes = !voteOutBuf.empty(); - - CV_Assert(!hasVotes || voteOutBuf.size() == posOutBuf.size()); - - _positions.create(1, total, CV_32FC4); - Mat positions = _positions.getMat(); - Mat(1, total, CV_32FC4, &posOutBuf[0]).copyTo(positions); - - if (_votes.needed()) - { - if (!hasVotes) - _votes.release(); - else - { - _votes.create(1, total, CV_32SC3); - Mat votes = _votes.getMat(); - Mat(1, total, CV_32SC3, &voteOutBuf[0]).copyTo(votes); - } - } - } - - ///////////////////////////////////// - // POSITION Ballard - - class GHT_Ballard_Pos : public GHT_Pos - { - public: - AlgorithmInfo* info() const; - - GHT_Ballard_Pos(); - - protected: - void releaseImpl(); - - void processTempl(); - void processImage(); - - virtual void calcHist(); - virtual void findPosInHist(); - - int levels; - int votesThreshold; - double dp; - - vector< vector > r_table; - Mat hist; - }; - - CV_INIT_ALGORITHM(GHT_Ballard_Pos, "GeneralizedHough.POSITION", - obj.info()->addParam(obj, "minDist", obj.minDist, false, 0, 0, - "Minimum distance between the centers of the detected objects."); - obj.info()->addParam(obj, "levels", obj.levels, false, 0, 0, - "R-Table levels."); - obj.info()->addParam(obj, "votesThreshold", obj.votesThreshold, false, 0, 0, - "The accumulator threshold for the template centers at the detection stage. The smaller it is, the more false positions may be detected."); - obj.info()->addParam(obj, "dp", obj.dp, false, 0, 0, - "Inverse ratio of the accumulator resolution to the image resolution.")) - - GHT_Ballard_Pos::GHT_Ballard_Pos() - { - levels = 360; - votesThreshold = 100; - dp = 1.0; - } - - void GHT_Ballard_Pos::releaseImpl() - { - GHT_Pos::releaseImpl(); - - releaseVector(r_table); - hist.release(); - } - - void GHT_Ballard_Pos::processTempl() - { - CV_Assert(templEdges.type() == CV_8UC1); - CV_Assert(templDx.type() == CV_32FC1 && templDx.size() == templSize); - CV_Assert(templDy.type() == templDx.type() && templDy.size() == templSize); - CV_Assert(levels > 0); - - const double thetaScale = levels / 360.0; - - r_table.resize(levels + 1); - for_each(r_table.begin(), r_table.end(), mem_fun_ref(&vector::clear)); - - for (int y = 0; y < templSize.height; ++y) - { - const uchar* edgesRow = templEdges.ptr(y); - const float* dxRow = templDx.ptr(y); - const float* dyRow = templDy.ptr(y); - - for (int x = 0; x < templSize.width; ++x) - { - const Point p(x, y); - - if (edgesRow[x] && (notNull(dyRow[x]) || notNull(dxRow[x]))) - { - const float theta = fastAtan2(dyRow[x], dxRow[x]); - const int n = cvRound(theta * thetaScale); - r_table[n].push_back(p - templCenter); - } - } - } - } - - void GHT_Ballard_Pos::processImage() - { - calcHist(); - findPosInHist(); - } - - void GHT_Ballard_Pos::calcHist() - { - CV_Assert(imageEdges.type() == CV_8UC1); - CV_Assert(imageDx.type() == CV_32FC1 && imageDx.size() == imageSize); - CV_Assert(imageDy.type() == imageDx.type() && imageDy.size() == imageSize); - CV_Assert(levels > 0 && r_table.size() == static_cast(levels + 1)); - CV_Assert(dp > 0.0); - - const double thetaScale = levels / 360.0; - const double idp = 1.0 / dp; - - hist.create(cvCeil(imageSize.height * idp) + 2, cvCeil(imageSize.width * idp) + 2, CV_32SC1); - hist.setTo(0); - - const int rows = hist.rows - 2; - const int cols = hist.cols - 2; - - for (int y = 0; y < imageSize.height; ++y) - { - const uchar* edgesRow = imageEdges.ptr(y); - const float* dxRow = imageDx.ptr(y); - const float* dyRow = imageDy.ptr(y); - - for (int x = 0; x < imageSize.width; ++x) - { - const Point p(x, y); - - if (edgesRow[x] && (notNull(dyRow[x]) || notNull(dxRow[x]))) - { - const float theta = fastAtan2(dyRow[x], dxRow[x]); - const int n = cvRound(theta * thetaScale); - - const vector& r_row = r_table[n]; - - for (size_t j = 0; j < r_row.size(); ++j) - { - Point c = p - r_row[j]; - - c.x = cvRound(c.x * idp); - c.y = cvRound(c.y * idp); - - if (c.x >= 0 && c.x < cols && c.y >= 0 && c.y < rows) - ++hist.at(c.y + 1, c.x + 1); - } - } - } - } - } - - void GHT_Ballard_Pos::findPosInHist() - { - CV_Assert(votesThreshold > 0); - - const int histRows = hist.rows - 2; - const int histCols = hist.cols - 2; - - for(int y = 0; y < histRows; ++y) - { - const int* prevRow = hist.ptr(y); - const int* curRow = hist.ptr(y + 1); - const int* nextRow = hist.ptr(y + 2); - - for(int x = 0; x < histCols; ++x) - { - const int votes = curRow[x + 1]; - - if (votes > votesThreshold && votes > curRow[x] && votes >= curRow[x + 2] && votes > prevRow[x + 1] && votes >= nextRow[x + 1]) - { - posOutBuf.push_back(Vec4f(static_cast(x * dp), static_cast(y * dp), 1.0f, 0.0f)); - voteOutBuf.push_back(Vec3i(votes, 0, 0)); - } - } - } - } - - ///////////////////////////////////// - // POSITION & SCALE - - class GHT_Ballard_PosScale : public GHT_Ballard_Pos - { - public: - AlgorithmInfo* info() const; - - GHT_Ballard_PosScale(); - - protected: - void calcHist(); - void findPosInHist(); - - double minScale; - double maxScale; - double scaleStep; - - class Worker; - friend class Worker; - }; - - CV_INIT_ALGORITHM(GHT_Ballard_PosScale, "GeneralizedHough.POSITION_SCALE", - obj.info()->addParam(obj, "minDist", obj.minDist, false, 0, 0, - "Minimum distance between the centers of the detected objects."); - obj.info()->addParam(obj, "levels", obj.levels, false, 0, 0, - "R-Table levels."); - obj.info()->addParam(obj, "votesThreshold", obj.votesThreshold, false, 0, 0, - "The accumulator threshold for the template centers at the detection stage. The smaller it is, the more false positions may be detected."); - obj.info()->addParam(obj, "dp", obj.dp, false, 0, 0, - "Inverse ratio of the accumulator resolution to the image resolution."); - obj.info()->addParam(obj, "minScale", obj.minScale, false, 0, 0, - "Minimal scale to detect."); - obj.info()->addParam(obj, "maxScale", obj.maxScale, false, 0, 0, - "Maximal scale to detect."); - obj.info()->addParam(obj, "scaleStep", obj.scaleStep, false, 0, 0, - "Scale step.")) - - GHT_Ballard_PosScale::GHT_Ballard_PosScale() - { - minScale = 0.5; - maxScale = 2.0; - scaleStep = 0.05; - } - - class GHT_Ballard_PosScale::Worker : public ParallelLoopBody - { - public: - explicit Worker(GHT_Ballard_PosScale* base_) : base(base_) {} - - void operator ()(const Range& range) const; - - private: - GHT_Ballard_PosScale* base; - }; - - void GHT_Ballard_PosScale::Worker::operator ()(const Range& range) const - { - const double thetaScale = base->levels / 360.0; - const double idp = 1.0 / base->dp; - - for (int s = range.start; s < range.end; ++s) - { - const double scale = base->minScale + s * base->scaleStep; - - Mat curHist(base->hist.size[1], base->hist.size[2], CV_32SC1, base->hist.ptr(s + 1), base->hist.step[1]); - - for (int y = 0; y < base->imageSize.height; ++y) - { - const uchar* edgesRow = base->imageEdges.ptr(y); - const float* dxRow = base->imageDx.ptr(y); - const float* dyRow = base->imageDy.ptr(y); - - for (int x = 0; x < base->imageSize.width; ++x) - { - const Point2d p(x, y); - - if (edgesRow[x] && (notNull(dyRow[x]) || notNull(dxRow[x]))) - { - const float theta = fastAtan2(dyRow[x], dxRow[x]); - const int n = cvRound(theta * thetaScale); - - const vector& r_row = base->r_table[n]; - - for (size_t j = 0; j < r_row.size(); ++j) - { - Point2d d = r_row[j]; - Point2d c = p - d * scale; - - c.x *= idp; - c.y *= idp; - - if (c.x >= 0 && c.x < base->hist.size[2] - 2 && c.y >= 0 && c.y < base->hist.size[1] - 2) - ++curHist.at(cvRound(c.y + 1), cvRound(c.x + 1)); - } - } - } - } - } - } - - void GHT_Ballard_PosScale::calcHist() - { - CV_Assert(imageEdges.type() == CV_8UC1); - CV_Assert(imageDx.type() == CV_32FC1 && imageDx.size() == imageSize); - CV_Assert(imageDy.type() == imageDx.type() && imageDy.size() == imageSize); - CV_Assert(levels > 0 && r_table.size() == static_cast(levels + 1)); - CV_Assert(dp > 0.0); - CV_Assert(minScale > 0.0 && minScale < maxScale); - CV_Assert(scaleStep > 0.0); - - const double idp = 1.0 / dp; - const int scaleRange = cvCeil((maxScale - minScale) / scaleStep); - - const int sizes[] = {scaleRange + 2, cvCeil(imageSize.height * idp) + 2, cvCeil(imageSize.width * idp) + 2}; - hist.create(3, sizes, CV_32SC1); - hist.setTo(0); - - parallel_for_(Range(0, scaleRange), Worker(this)); - } - - void GHT_Ballard_PosScale::findPosInHist() - { - CV_Assert(votesThreshold > 0); - - const int scaleRange = hist.size[0] - 2; - const int histRows = hist.size[1] - 2; - const int histCols = hist.size[2] - 2; - - for (int s = 0; s < scaleRange; ++s) - { - const float scale = static_cast(minScale + s * scaleStep); - - const Mat prevHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(s), hist.step[1]); - const Mat curHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(s + 1), hist.step[1]); - const Mat nextHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(s + 2), hist.step[1]); - - for(int y = 0; y < histRows; ++y) - { - const int* prevHistRow = prevHist.ptr(y + 1); - const int* prevRow = curHist.ptr(y); - const int* curRow = curHist.ptr(y + 1); - const int* nextRow = curHist.ptr(y + 2); - const int* nextHistRow = nextHist.ptr(y + 1); - - for(int x = 0; x < histCols; ++x) - { - const int votes = curRow[x + 1]; - - if (votes > votesThreshold && - votes > curRow[x] && - votes >= curRow[x + 2] && - votes > prevRow[x + 1] && - votes >= nextRow[x + 1] && - votes > prevHistRow[x + 1] && - votes >= nextHistRow[x + 1]) - { - posOutBuf.push_back(Vec4f(static_cast(x * dp), static_cast(y * dp), scale, 0.0f)); - voteOutBuf.push_back(Vec3i(votes, votes, 0)); - } - } - } - } - } - - ///////////////////////////////////// - // POSITION & ROTATION - - class GHT_Ballard_PosRotation : public GHT_Ballard_Pos - { - public: - AlgorithmInfo* info() const; - - GHT_Ballard_PosRotation(); - - protected: - void calcHist(); - void findPosInHist(); - - double minAngle; - double maxAngle; - double angleStep; - - class Worker; - friend class Worker; - }; - - CV_INIT_ALGORITHM(GHT_Ballard_PosRotation, "GeneralizedHough.POSITION_ROTATION", - obj.info()->addParam(obj, "minDist", obj.minDist, false, 0, 0, - "Minimum distance between the centers of the detected objects."); - obj.info()->addParam(obj, "levels", obj.levels, false, 0, 0, - "R-Table levels."); - obj.info()->addParam(obj, "votesThreshold", obj.votesThreshold, false, 0, 0, - "The accumulator threshold for the template centers at the detection stage. The smaller it is, the more false positions may be detected."); - obj.info()->addParam(obj, "dp", obj.dp, false, 0, 0, - "Inverse ratio of the accumulator resolution to the image resolution."); - obj.info()->addParam(obj, "minAngle", obj.minAngle, false, 0, 0, - "Minimal rotation angle to detect in degrees."); - obj.info()->addParam(obj, "maxAngle", obj.maxAngle, false, 0, 0, - "Maximal rotation angle to detect in degrees."); - obj.info()->addParam(obj, "angleStep", obj.angleStep, false, 0, 0, - "Angle step in degrees.")) - - GHT_Ballard_PosRotation::GHT_Ballard_PosRotation() - { - minAngle = 0.0; - maxAngle = 360.0; - angleStep = 1.0; - } - - class GHT_Ballard_PosRotation::Worker : public ParallelLoopBody - { - public: - explicit Worker(GHT_Ballard_PosRotation* base_) : base(base_) {} - - void operator ()(const Range& range) const; - - private: - GHT_Ballard_PosRotation* base; - }; - - void GHT_Ballard_PosRotation::Worker::operator ()(const Range& range) const - { - const double thetaScale = base->levels / 360.0; - const double idp = 1.0 / base->dp; - - for (int a = range.start; a < range.end; ++a) - { - const double angle = base->minAngle + a * base->angleStep; - - const double sinA = ::sin(toRad(angle)); - const double cosA = ::cos(toRad(angle)); - - Mat curHist(base->hist.size[1], base->hist.size[2], CV_32SC1, base->hist.ptr(a + 1), base->hist.step[1]); - - for (int y = 0; y < base->imageSize.height; ++y) - { - const uchar* edgesRow = base->imageEdges.ptr(y); - const float* dxRow = base->imageDx.ptr(y); - const float* dyRow = base->imageDy.ptr(y); - - for (int x = 0; x < base->imageSize.width; ++x) - { - const Point2d p(x, y); - - if (edgesRow[x] && (notNull(dyRow[x]) || notNull(dxRow[x]))) - { - double theta = fastAtan2(dyRow[x], dxRow[x]) - angle; - if (theta < 0) - theta += 360.0; - const int n = cvRound(theta * thetaScale); - - const vector& r_row = base->r_table[n]; - - for (size_t j = 0; j < r_row.size(); ++j) - { - Point2d d = r_row[j]; - Point2d c = p - Point2d(d.x * cosA - d.y * sinA, d.x * sinA + d.y * cosA); - - c.x *= idp; - c.y *= idp; - - if (c.x >= 0 && c.x < base->hist.size[2] - 2 && c.y >= 0 && c.y < base->hist.size[1] - 2) - ++curHist.at(cvRound(c.y + 1), cvRound(c.x + 1)); - } - } - } - } - } - } - - void GHT_Ballard_PosRotation::calcHist() - { - CV_Assert(imageEdges.type() == CV_8UC1); - CV_Assert(imageDx.type() == CV_32FC1 && imageDx.size() == imageSize); - CV_Assert(imageDy.type() == imageDx.type() && imageDy.size() == imageSize); - CV_Assert(levels > 0 && r_table.size() == static_cast(levels + 1)); - CV_Assert(dp > 0.0); - CV_Assert(minAngle >= 0.0 && minAngle < maxAngle && maxAngle <= 360.0); - CV_Assert(angleStep > 0.0 && angleStep < 360.0); - - const double idp = 1.0 / dp; - const int angleRange = cvCeil((maxAngle - minAngle) / angleStep); - - const int sizes[] = {angleRange + 2, cvCeil(imageSize.height * idp) + 2, cvCeil(imageSize.width * idp) + 2}; - hist.create(3, sizes, CV_32SC1); - hist.setTo(0); - - parallel_for_(Range(0, angleRange), Worker(this)); - } - - void GHT_Ballard_PosRotation::findPosInHist() - { - CV_Assert(votesThreshold > 0); - - const int angleRange = hist.size[0] - 2; - const int histRows = hist.size[1] - 2; - const int histCols = hist.size[2] - 2; - - for (int a = 0; a < angleRange; ++a) - { - const float angle = static_cast(minAngle + a * angleStep); - - const Mat prevHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(a), hist.step[1]); - const Mat curHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(a + 1), hist.step[1]); - const Mat nextHist(histRows + 2, histCols + 2, CV_32SC1, hist.ptr(a + 2), hist.step[1]); - - for(int y = 0; y < histRows; ++y) - { - const int* prevHistRow = prevHist.ptr(y + 1); - const int* prevRow = curHist.ptr(y); - const int* curRow = curHist.ptr(y + 1); - const int* nextRow = curHist.ptr(y + 2); - const int* nextHistRow = nextHist.ptr(y + 1); - - for(int x = 0; x < histCols; ++x) - { - const int votes = curRow[x + 1]; - - if (votes > votesThreshold && - votes > curRow[x] && - votes >= curRow[x + 2] && - votes > prevRow[x + 1] && - votes >= nextRow[x + 1] && - votes > prevHistRow[x + 1] && - votes >= nextHistRow[x + 1]) - { - posOutBuf.push_back(Vec4f(static_cast(x * dp), static_cast(y * dp), 1.0f, angle)); - voteOutBuf.push_back(Vec3i(votes, 0, votes)); - } - } - } - } - } - - ///////////////////////////////////////// - // POSITION & SCALE & ROTATION - - double clampAngle(double a) - { - double res = a; - - while (res > 360.0) - res -= 360.0; - while (res < 0) - res += 360.0; - - return res; - } - - bool angleEq(double a, double b, double eps = 1.0) - { - return (fabs(clampAngle(a - b)) <= eps); - } - - class GHT_Guil_Full : public GHT_Pos - { - public: - AlgorithmInfo* info() const; - - GHT_Guil_Full(); - - protected: - void releaseImpl(); - - void processTempl(); - void processImage(); - - struct ContourPoint - { - Point2d pos; - double theta; - }; - - struct Feature - { - ContourPoint p1; - ContourPoint p2; - - double alpha12; - double d12; - - Point2d r1; - Point2d r2; - }; - - void buildFeatureList(const Mat& edges, const Mat& dx, const Mat& dy, vector< vector >& features, Point2d center = Point2d()); - void getContourPoints(const Mat& edges, const Mat& dx, const Mat& dy, vector& points); - - void calcOrientation(); - void calcScale(double angle); - void calcPosition(double angle, int angleVotes, double scale, int scaleVotes); - - int maxSize; - double xi; - int levels; - double angleEpsilon; - - double minAngle; - double maxAngle; - double angleStep; - int angleThresh; - - double minScale; - double maxScale; - double scaleStep; - int scaleThresh; - - double dp; - int posThresh; - - vector< vector > templFeatures; - vector< vector > imageFeatures; - - vector< pair > angles; - vector< pair > scales; - }; - - CV_INIT_ALGORITHM(GHT_Guil_Full, "GeneralizedHough.POSITION_SCALE_ROTATION", - obj.info()->addParam(obj, "minDist", obj.minDist, false, 0, 0, - "Minimum distance between the centers of the detected objects."); - obj.info()->addParam(obj, "maxSize", obj.maxSize, false, 0, 0, - "Maximal size of inner buffers."); - obj.info()->addParam(obj, "xi", obj.xi, false, 0, 0, - "Angle difference in degrees between two points in feature."); - obj.info()->addParam(obj, "levels", obj.levels, false, 0, 0, - "Feature table levels."); - obj.info()->addParam(obj, "angleEpsilon", obj.angleEpsilon, false, 0, 0, - "Maximal difference between angles that treated as equal."); - obj.info()->addParam(obj, "minAngle", obj.minAngle, false, 0, 0, - "Minimal rotation angle to detect in degrees."); - obj.info()->addParam(obj, "maxAngle", obj.maxAngle, false, 0, 0, - "Maximal rotation angle to detect in degrees."); - obj.info()->addParam(obj, "angleStep", obj.angleStep, false, 0, 0, - "Angle step in degrees."); - obj.info()->addParam(obj, "angleThresh", obj.angleThresh, false, 0, 0, - "Angle threshold."); - obj.info()->addParam(obj, "minScale", obj.minScale, false, 0, 0, - "Minimal scale to detect."); - obj.info()->addParam(obj, "maxScale", obj.maxScale, false, 0, 0, - "Maximal scale to detect."); - obj.info()->addParam(obj, "scaleStep", obj.scaleStep, false, 0, 0, - "Scale step."); - obj.info()->addParam(obj, "scaleThresh", obj.scaleThresh, false, 0, 0, - "Scale threshold."); - obj.info()->addParam(obj, "dp", obj.dp, false, 0, 0, - "Inverse ratio of the accumulator resolution to the image resolution."); - obj.info()->addParam(obj, "posThresh", obj.posThresh, false, 0, 0, - "Position threshold.")) - - GHT_Guil_Full::GHT_Guil_Full() - { - maxSize = 1000; - xi = 90.0; - levels = 360; - angleEpsilon = 1.0; - - minAngle = 0.0; - maxAngle = 360.0; - angleStep = 1.0; - angleThresh = 15000; - - minScale = 0.5; - maxScale = 2.0; - scaleStep = 0.05; - scaleThresh = 1000; - - dp = 1.0; - posThresh = 100; - } - - void GHT_Guil_Full::releaseImpl() - { - GHT_Pos::releaseImpl(); - - releaseVector(templFeatures); - releaseVector(imageFeatures); - - releaseVector(angles); - releaseVector(scales); - } - - void GHT_Guil_Full::processTempl() - { - buildFeatureList(templEdges, templDx, templDy, templFeatures, templCenter); - } - - void GHT_Guil_Full::processImage() - { - buildFeatureList(imageEdges, imageDx, imageDy, imageFeatures); - - calcOrientation(); - - for (size_t i = 0; i < angles.size(); ++i) - { - const double angle = angles[i].first; - const int angleVotes = angles[i].second; - - calcScale(angle); - - for (size_t j = 0; j < scales.size(); ++j) - { - const double scale = scales[j].first; - const int scaleVotes = scales[j].second; - - calcPosition(angle, angleVotes, scale, scaleVotes); - } - } - } - - void GHT_Guil_Full::buildFeatureList(const Mat& edges, const Mat& dx, const Mat& dy, vector< vector >& features, Point2d center) - { - CV_Assert(levels > 0); - - const double maxDist = sqrt((double) templSize.width * templSize.width + templSize.height * templSize.height) * maxScale; - - const double alphaScale = levels / 360.0; - - vector points; - getContourPoints(edges, dx, dy, points); - - features.resize(levels + 1); - for_each(features.begin(), features.end(), mem_fun_ref(&vector::clear)); - for_each(features.begin(), features.end(), bind2nd(mem_fun_ref(&vector::reserve), maxSize)); - - for (size_t i = 0; i < points.size(); ++i) - { - ContourPoint p1 = points[i]; - - for (size_t j = 0; j < points.size(); ++j) - { - ContourPoint p2 = points[j]; - - if (angleEq(p1.theta - p2.theta, xi, angleEpsilon)) - { - const Point2d d = p1.pos - p2.pos; - - Feature f; - - f.p1 = p1; - f.p2 = p2; - - f.alpha12 = clampAngle(fastAtan2((float)d.y, (float)d.x) - p1.theta); - f.d12 = norm(d); - - if (f.d12 > maxDist) - continue; - - f.r1 = p1.pos - center; - f.r2 = p2.pos - center; - - const int n = cvRound(f.alpha12 * alphaScale); - - if (features[n].size() < static_cast(maxSize)) - features[n].push_back(f); - } - } - } - } - - void GHT_Guil_Full::getContourPoints(const Mat& edges, const Mat& dx, const Mat& dy, vector& points) - { - CV_Assert(edges.type() == CV_8UC1); - CV_Assert(dx.type() == CV_32FC1 && dx.size == edges.size); - CV_Assert(dy.type() == dx.type() && dy.size == edges.size); - - points.clear(); - points.reserve(edges.size().area()); - - for (int y = 0; y < edges.rows; ++y) - { - const uchar* edgesRow = edges.ptr(y); - const float* dxRow = dx.ptr(y); - const float* dyRow = dy.ptr(y); - - for (int x = 0; x < edges.cols; ++x) - { - if (edgesRow[x] && (notNull(dyRow[x]) || notNull(dxRow[x]))) - { - ContourPoint p; - - p.pos = Point2d(x, y); - p.theta = fastAtan2(dyRow[x], dxRow[x]); - - points.push_back(p); - } - } - } - } - - void GHT_Guil_Full::calcOrientation() - { - CV_Assert(levels > 0); - CV_Assert(templFeatures.size() == static_cast(levels + 1)); - CV_Assert(imageFeatures.size() == templFeatures.size()); - CV_Assert(minAngle >= 0.0 && minAngle < maxAngle && maxAngle <= 360.0); - CV_Assert(angleStep > 0.0 && angleStep < 360.0); - CV_Assert(angleThresh > 0); - - const double iAngleStep = 1.0 / angleStep; - const int angleRange = cvCeil((maxAngle - minAngle) * iAngleStep); - - vector OHist(angleRange + 1, 0); - for (int i = 0; i <= levels; ++i) - { - const vector& templRow = templFeatures[i]; - const vector& imageRow = imageFeatures[i]; - - for (size_t j = 0; j < templRow.size(); ++j) - { - Feature templF = templRow[j]; - - for (size_t k = 0; k < imageRow.size(); ++k) - { - Feature imF = imageRow[k]; - - const double angle = clampAngle(imF.p1.theta - templF.p1.theta); - if (angle >= minAngle && angle <= maxAngle) - { - const int n = cvRound((angle - minAngle) * iAngleStep); - ++OHist[n]; - } - } - } - } - - angles.clear(); - - for (int n = 0; n < angleRange; ++n) - { - if (OHist[n] >= angleThresh) - { - const double angle = minAngle + n * angleStep; - angles.push_back(make_pair(angle, OHist[n])); - } - } - } - - void GHT_Guil_Full::calcScale(double angle) - { - CV_Assert(levels > 0); - CV_Assert(templFeatures.size() == static_cast(levels + 1)); - CV_Assert(imageFeatures.size() == templFeatures.size()); - CV_Assert(minScale > 0.0 && minScale < maxScale); - CV_Assert(scaleStep > 0.0); - CV_Assert(scaleThresh > 0); - - const double iScaleStep = 1.0 / scaleStep; - const int scaleRange = cvCeil((maxScale - minScale) * iScaleStep); - - vector SHist(scaleRange + 1, 0); - - for (int i = 0; i <= levels; ++i) - { - const vector& templRow = templFeatures[i]; - const vector& imageRow = imageFeatures[i]; - - for (size_t j = 0; j < templRow.size(); ++j) - { - Feature templF = templRow[j]; - - templF.p1.theta += angle; - - for (size_t k = 0; k < imageRow.size(); ++k) - { - Feature imF = imageRow[k]; - - if (angleEq(imF.p1.theta, templF.p1.theta, angleEpsilon)) - { - const double scale = imF.d12 / templF.d12; - if (scale >= minScale && scale <= maxScale) - { - const int s = cvRound((scale - minScale) * iScaleStep); - ++SHist[s]; - } - } - } - } - } - - scales.clear(); - - for (int s = 0; s < scaleRange; ++s) - { - if (SHist[s] >= scaleThresh) - { - const double scale = minScale + s * scaleStep; - scales.push_back(make_pair(scale, SHist[s])); - } - } - } - - void GHT_Guil_Full::calcPosition(double angle, int angleVotes, double scale, int scaleVotes) - { - CV_Assert(levels > 0); - CV_Assert(templFeatures.size() == static_cast(levels + 1)); - CV_Assert(imageFeatures.size() == templFeatures.size()); - CV_Assert(dp > 0.0); - CV_Assert(posThresh > 0); - - const double sinVal = sin(toRad(angle)); - const double cosVal = cos(toRad(angle)); - const double idp = 1.0 / dp; - - const int histRows = cvCeil(imageSize.height * idp); - const int histCols = cvCeil(imageSize.width * idp); - - Mat DHist(histRows + 2, histCols + 2, CV_32SC1, Scalar::all(0)); - - for (int i = 0; i <= levels; ++i) - { - const vector& templRow = templFeatures[i]; - const vector& imageRow = imageFeatures[i]; - - for (size_t j = 0; j < templRow.size(); ++j) - { - Feature templF = templRow[j]; - - templF.p1.theta += angle; - - templF.r1 *= scale; - templF.r2 *= scale; - - templF.r1 = Point2d(cosVal * templF.r1.x - sinVal * templF.r1.y, sinVal * templF.r1.x + cosVal * templF.r1.y); - templF.r2 = Point2d(cosVal * templF.r2.x - sinVal * templF.r2.y, sinVal * templF.r2.x + cosVal * templF.r2.y); - - for (size_t k = 0; k < imageRow.size(); ++k) - { - Feature imF = imageRow[k]; - - if (angleEq(imF.p1.theta, templF.p1.theta, angleEpsilon)) - { - Point2d c1, c2; - - c1 = imF.p1.pos - templF.r1; - c1 *= idp; - - c2 = imF.p2.pos - templF.r2; - c2 *= idp; - - if (fabs(c1.x - c2.x) > 1 || fabs(c1.y - c2.y) > 1) - continue; - - if (c1.y >= 0 && c1.y < histRows && c1.x >= 0 && c1.x < histCols) - ++DHist.at(cvRound(c1.y) + 1, cvRound(c1.x) + 1); - } - } - } - } - - for(int y = 0; y < histRows; ++y) - { - const int* prevRow = DHist.ptr(y); - const int* curRow = DHist.ptr(y + 1); - const int* nextRow = DHist.ptr(y + 2); - - for(int x = 0; x < histCols; ++x) - { - const int votes = curRow[x + 1]; - - if (votes > posThresh && votes > curRow[x] && votes >= curRow[x + 2] && votes > prevRow[x + 1] && votes >= nextRow[x + 1]) - { - posOutBuf.push_back(Vec4f(static_cast(x * dp), static_cast(y * dp), static_cast(scale), static_cast(angle))); - voteOutBuf.push_back(Vec3i(votes, scaleVotes, angleVotes)); - } - } - } - } -} - -Ptr cv::GeneralizedHough::create(int method) -{ - switch (method) - { - case GHT_POSITION: - CV_Assert( !GHT_Ballard_Pos_info_auto.name().empty() ); - return new GHT_Ballard_Pos(); - - case (GHT_POSITION | GHT_SCALE): - CV_Assert( !GHT_Ballard_PosScale_info_auto.name().empty() ); - return new GHT_Ballard_PosScale(); - - case (GHT_POSITION | GHT_ROTATION): - CV_Assert( !GHT_Ballard_PosRotation_info_auto.name().empty() ); - return new GHT_Ballard_PosRotation(); - - case (GHT_POSITION | GHT_SCALE | GHT_ROTATION): - CV_Assert( !GHT_Guil_Full_info_auto.name().empty() ); - return new GHT_Guil_Full(); - } - - CV_Error(CV_StsBadArg, "Unsupported method"); - return Ptr(); -} - -cv::GeneralizedHough::~GeneralizedHough() -{ -} - -void cv::GeneralizedHough::setTemplate(InputArray _templ, int cannyThreshold, Point templCenter) -{ - Mat templ = _templ.getMat(); - - CV_Assert(templ.type() == CV_8UC1); - CV_Assert(cannyThreshold > 0); - - Canny(templ, edges_, cannyThreshold / 2, cannyThreshold); - Sobel(templ, dx_, CV_32F, 1, 0); - Sobel(templ, dy_, CV_32F, 0, 1); - - if (templCenter == Point(-1, -1)) - templCenter = Point(templ.cols / 2, templ.rows / 2); - - setTemplateImpl(edges_, dx_, dy_, templCenter); -} - -void cv::GeneralizedHough::setTemplate(InputArray _edges, InputArray _dx, InputArray _dy, Point templCenter) -{ - Mat edges = _edges.getMat(); - Mat dx = _dx.getMat(); - Mat dy = _dy.getMat(); - - if (templCenter == Point(-1, -1)) - templCenter = Point(edges.cols / 2, edges.rows / 2); - - setTemplateImpl(edges, dx, dy, templCenter); -} - -void cv::GeneralizedHough::detect(InputArray _image, OutputArray positions, OutputArray votes, int cannyThreshold) -{ - Mat image = _image.getMat(); - - CV_Assert(image.type() == CV_8UC1); - CV_Assert(cannyThreshold > 0); - - Canny(image, edges_, cannyThreshold / 2, cannyThreshold); - Sobel(image, dx_, CV_32F, 1, 0); - Sobel(image, dy_, CV_32F, 0, 1); - - detectImpl(edges_, dx_, dy_, positions, votes); -} - -void cv::GeneralizedHough::detect(InputArray _edges, InputArray _dx, InputArray _dy, OutputArray positions, OutputArray votes) -{ - cv::Mat edges = _edges.getMat(); - cv::Mat dx = _dx.getMat(); - cv::Mat dy = _dy.getMat(); - - detectImpl(edges, dx, dy, positions, votes); -} - -void cv::GeneralizedHough::release() -{ - edges_.release(); - dx_.release(); - dy_.release(); - releaseImpl(); -} diff --git a/modules/imgproc/src/geometry.cpp b/modules/imgproc/src/geometry.cpp deleted file mode 100644 index 337362f..0000000 --- a/modules/imgproc/src/geometry.cpp +++ /dev/null @@ -1,774 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - - -CV_IMPL CvRect -cvMaxRect( const CvRect* rect1, const CvRect* rect2 ) -{ - if( rect1 && rect2 ) - { - CvRect max_rect; - int a, b; - - max_rect.x = a = rect1->x; - b = rect2->x; - if( max_rect.x > b ) - max_rect.x = b; - - max_rect.width = a += rect1->width; - b += rect2->width; - - if( max_rect.width < b ) - max_rect.width = b; - max_rect.width -= max_rect.x; - - max_rect.y = a = rect1->y; - b = rect2->y; - if( max_rect.y > b ) - max_rect.y = b; - - max_rect.height = a += rect1->height; - b += rect2->height; - - if( max_rect.height < b ) - max_rect.height = b; - max_rect.height -= max_rect.y; - return max_rect; - } - else if( rect1 ) - return *rect1; - else if( rect2 ) - return *rect2; - else - return cvRect(0,0,0,0); -} - - -CV_IMPL void -cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] ) -{ - if( !pt ) - CV_Error( CV_StsNullPtr, "NULL vertex array pointer" ); - cv::RotatedRect(box).points((cv::Point2f*)pt); -} - - -int -icvIntersectLines( double x1, double dx1, double y1, double dy1, - double x2, double dx2, double y2, double dy2, double *t2 ) -{ - double d = dx1 * dy2 - dx2 * dy1; - int result = -1; - - if( d != 0 ) - { - *t2 = ((x2 - x1) * dy1 - (y2 - y1) * dx1) / d; - result = 0; - } - return result; -} - - -void -icvIntersectLines3( double *a0, double *b0, double *c0, - double *a1, double *b1, double *c1, CvPoint2D32f * point ) -{ - double det = a0[0] * b1[0] - a1[0] * b0[0]; - - if( det != 0 ) - { - det = 1. / det; - point->x = (float) ((b0[0] * c1[0] - b1[0] * c0[0]) * det); - point->y = (float) ((a1[0] * c0[0] - a0[0] * c1[0]) * det); - } - else - { - point->x = point->y = FLT_MAX; - } -} - - -CV_IMPL double -cvPointPolygonTest( const CvArr* _contour, CvPoint2D32f pt, int measure_dist ) -{ - double result = 0; - - CvSeqBlock block; - CvContour header; - CvSeq* contour = (CvSeq*)_contour; - CvSeqReader reader; - int i, total, counter = 0; - int is_float; - double min_dist_num = FLT_MAX, min_dist_denom = 1; - CvPoint ip = {0,0}; - - if( !CV_IS_SEQ(contour) ) - { - contour = cvPointSeqFromMat( CV_SEQ_KIND_CURVE + CV_SEQ_FLAG_CLOSED, - _contour, &header, &block ); - } - else if( CV_IS_SEQ_POINT_SET(contour) ) - { - if( contour->header_size == sizeof(CvContour) && !measure_dist ) - { - CvRect r = ((CvContour*)contour)->rect; - if( pt.x < r.x || pt.y < r.y || - pt.x >= r.x + r.width || pt.y >= r.y + r.height ) - return -1; - } - } - else if( CV_IS_SEQ_CHAIN(contour) ) - { - CV_Error( CV_StsBadArg, - "Chains are not supported. Convert them to polygonal representation using cvApproxChains()" ); - } - else - CV_Error( CV_StsBadArg, "Input contour is neither a valid sequence nor a matrix" ); - - total = contour->total; - is_float = CV_SEQ_ELTYPE(contour) == CV_32FC2; - cvStartReadSeq( contour, &reader, -1 ); - - if( !is_float && !measure_dist && (ip.x = cvRound(pt.x)) == pt.x && (ip.y = cvRound(pt.y)) == pt.y ) - { - // the fastest "pure integer" branch - CvPoint v0, v; - CV_READ_SEQ_ELEM( v, reader ); - - for( i = 0; i < total; i++ ) - { - int dist; - v0 = v; - CV_READ_SEQ_ELEM( v, reader ); - - if( (v0.y <= ip.y && v.y <= ip.y) || - (v0.y > ip.y && v.y > ip.y) || - (v0.x < ip.x && v.x < ip.x) ) - { - if( ip.y == v.y && (ip.x == v.x || (ip.y == v0.y && - ((v0.x <= ip.x && ip.x <= v.x) || (v.x <= ip.x && ip.x <= v0.x)))) ) - return 0; - continue; - } - - dist = (ip.y - v0.y)*(v.x - v0.x) - (ip.x - v0.x)*(v.y - v0.y); - if( dist == 0 ) - return 0; - if( v.y < v0.y ) - dist = -dist; - counter += dist > 0; - } - - result = counter % 2 == 0 ? -1 : 1; - } - else - { - CvPoint2D32f v0, v; - CvPoint iv; - - if( is_float ) - { - CV_READ_SEQ_ELEM( v, reader ); - } - else - { - CV_READ_SEQ_ELEM( iv, reader ); - v = cvPointTo32f( iv ); - } - - if( !measure_dist ) - { - for( i = 0; i < total; i++ ) - { - double dist; - v0 = v; - if( is_float ) - { - CV_READ_SEQ_ELEM( v, reader ); - } - else - { - CV_READ_SEQ_ELEM( iv, reader ); - v = cvPointTo32f( iv ); - } - - if( (v0.y <= pt.y && v.y <= pt.y) || - (v0.y > pt.y && v.y > pt.y) || - (v0.x < pt.x && v.x < pt.x) ) - { - if( pt.y == v.y && (pt.x == v.x || (pt.y == v0.y && - ((v0.x <= pt.x && pt.x <= v.x) || (v.x <= pt.x && pt.x <= v0.x)))) ) - return 0; - continue; - } - - dist = (double)(pt.y - v0.y)*(v.x - v0.x) - (double)(pt.x - v0.x)*(v.y - v0.y); - if( dist == 0 ) - return 0; - if( v.y < v0.y ) - dist = -dist; - counter += dist > 0; - } - - result = counter % 2 == 0 ? -1 : 1; - } - else - { - for( i = 0; i < total; i++ ) - { - double dx, dy, dx1, dy1, dx2, dy2, dist_num, dist_denom = 1; - - v0 = v; - if( is_float ) - { - CV_READ_SEQ_ELEM( v, reader ); - } - else - { - CV_READ_SEQ_ELEM( iv, reader ); - v = cvPointTo32f( iv ); - } - - dx = v.x - v0.x; dy = v.y - v0.y; - dx1 = pt.x - v0.x; dy1 = pt.y - v0.y; - dx2 = pt.x - v.x; dy2 = pt.y - v.y; - - if( dx1*dx + dy1*dy <= 0 ) - dist_num = dx1*dx1 + dy1*dy1; - else if( dx2*dx + dy2*dy >= 0 ) - dist_num = dx2*dx2 + dy2*dy2; - else - { - dist_num = (dy1*dx - dx1*dy); - dist_num *= dist_num; - dist_denom = dx*dx + dy*dy; - } - - if( dist_num*min_dist_denom < min_dist_num*dist_denom ) - { - min_dist_num = dist_num; - min_dist_denom = dist_denom; - if( min_dist_num == 0 ) - break; - } - - if( (v0.y <= pt.y && v.y <= pt.y) || - (v0.y > pt.y && v.y > pt.y) || - (v0.x < pt.x && v.x < pt.x) ) - continue; - - dist_num = dy1*dx - dx1*dy; - if( dy < 0 ) - dist_num = -dist_num; - counter += dist_num > 0; - } - - result = sqrt(min_dist_num/min_dist_denom); - if( counter % 2 == 0 ) - result = -result; - } - } - - return result; -} - - -/* - This code is described in "Computational Geometry in C" (Second Edition), - Chapter 7. It is not written to be comprehensible without the - explanation in that book. - - Written by Joseph O'Rourke. - Last modified: December 1997 - Questions to orourke@cs.smith.edu. - -------------------------------------------------------------------- - This code is Copyright 1997 by Joseph O'Rourke. It may be freely - redistributed in its entirety provided that this copyright notice is - not removed. - -------------------------------------------------------------------- - */ - -namespace cv -{ -typedef enum { Pin, Qin, Unknown } tInFlag; - -static int areaSign( Point2f a, Point2f b, Point2f c ) -{ - static const double eps = 1e-5; - double area2 = (b.x - a.x) * (double)(c.y - a.y) - (c.x - a.x ) * (double)(b.y - a.y); - return area2 > eps ? 1 : area2 < -eps ? -1 : 0; -} - -//--------------------------------------------------------------------- -// Returns true iff point c lies on the closed segement ab. -// Assumes it is already known that abc are collinear. -//--------------------------------------------------------------------- -static bool between( Point2f a, Point2f b, Point2f c ) -{ - Point2f ba, ca; - - // If ab not vertical, check betweenness on x; else on y. - if ( a.x != b.x ) - return ((a.x <= c.x) && (c.x <= b.x)) || - ((a.x >= c.x) && (c.x >= b.x)); - else - return ((a.y <= c.y) && (c.y <= b.y)) || - ((a.y >= c.y) && (c.y >= b.y)); -} - -static char parallelInt( Point2f a, Point2f b, Point2f c, Point2f d, Point2f& p, Point2f& q ) -{ - char code = 'e'; - if( areaSign(a, b, c) != 0 ) - code = '0'; - else if( between(a, b, c) && between(a, b, d)) - p = c, q = d; - else if( between(c, d, a) && between(c, d, b)) - p = a, q = b; - else if( between(a, b, c) && between(c, d, b)) - p = c, q = b; - else if( between(a, b, c) && between(c, d, a)) - p = c, q = a; - else if( between(a, b, d) && between(c, d, b)) - p = d, q = b; - else if( between(a, b, d) && between(c, d, a)) - p = d, q = a; - else - code = '0'; - return code; -} - -//--------------------------------------------------------------------- -// segSegInt: Finds the point of intersection p between two closed -// segments ab and cd. Returns p and a char with the following meaning: -// 'e': The segments collinearly overlap, sharing a point. -// 'v': An endpoint (vertex) of one segment is on the other segment, -// but 'e' doesn't hold. -// '1': The segments intersect properly (i.e., they share a point and -// neither 'v' nor 'e' holds). -// '0': The segments do not intersect (i.e., they share no points). -// Note that two collinear segments that share just one point, an endpoint -// of each, returns 'e' rather than 'v' as one might expect. -//--------------------------------------------------------------------- -static char segSegInt( Point2f a, Point2f b, Point2f c, Point2f d, Point2f& p, Point2f& q ) -{ - double s, t; // The two parameters of the parametric eqns. - double num, denom; // Numerator and denoninator of equations. - char code = '?'; // Return char characterizing intersection. - - denom = a.x * (double)( d.y - c.y ) + - b.x * (double)( c.y - d.y ) + - d.x * (double)( b.y - a.y ) + - c.x * (double)( a.y - b.y ); - - // If denom is zero, then segments are parallel: handle separately. - if (denom == 0.0) - return parallelInt(a, b, c, d, p, q); - - num = a.x * (double)( d.y - c.y ) + - c.x * (double)( a.y - d.y ) + - d.x * (double)( c.y - a.y ); - if ( (num == 0.0) || (num == denom) ) code = 'v'; - s = num / denom; - - num = -( a.x * (double)( c.y - b.y ) + - b.x * (double)( a.y - c.y ) + - c.x * (double)( b.y - a.y ) ); - if ( (num == 0.0) || (num == denom) ) code = 'v'; - t = num / denom; - - if ( (0.0 < s) && (s < 1.0) && - (0.0 < t) && (t < 1.0) ) - code = '1'; - else if ( (0.0 > s) || (s > 1.0) || - (0.0 > t) || (t > 1.0) ) - code = '0'; - - p.x = (float)(a.x + s*(b.x - a.x)); - p.y = (float)(a.y + s*(b.y - a.y)); - - return code; -} - -static tInFlag inOut( Point2f p, tInFlag inflag, int aHB, int bHA, Point2f*& result ) -{ - if( p != result[-1] ) - *result++ = p; - // Update inflag. - return aHB > 0 ? Pin : bHA > 0 ? Qin : inflag; -} - -//--------------------------------------------------------------------- -// Advances and prints out an inside vertex if appropriate. -//--------------------------------------------------------------------- -static int advance( int a, int *aa, int n, bool inside, Point2f v, Point2f*& result ) -{ - if( inside && v != result[-1] ) - *result++ = v; - (*aa)++; - return (a+1) % n; -} - -static void addSharedSeg( Point2f p, Point2f q, Point2f*& result ) -{ - if( p != result[-1] ) - *result++ = p; - if( q != result[-1] ) - *result++ = q; -} - - -static int intersectConvexConvex_( const Point2f* P, int n, const Point2f* Q, int m, - Point2f* result, float* _area ) -{ - Point2f* result0 = result; - // P has n vertices, Q has m vertices. - int a=0, b=0; // indices on P and Q (resp.) - Point2f Origin(0,0); - tInFlag inflag=Unknown; // {Pin, Qin, Unknown}: which inside - int aa=0, ba=0; // # advances on a & b indices (after 1st inter.) - bool FirstPoint=true;// Is this the first point? (used to initialize). - Point2f p0; // The first point. - *result++ = Point2f(FLT_MAX, FLT_MAX); - - do - { - // Computations of key variables. - int a1 = (a + n - 1) % n; // a-1, b-1 (resp.) - int b1 = (b + m - 1) % m; - - Point2f A = P[a] - P[a1], B = Q[b] - Q[b1]; // directed edges on P and Q (resp.) - - int cross = areaSign( Origin, A, B ); // sign of z-component of A x B - int aHB = areaSign( Q[b1], Q[b], P[a] ); // a in H(b). - int bHA = areaSign( P[a1], P[a], Q[b] ); // b in H(A); - - // If A & B intersect, update inflag. - Point2f p, q; - int code = segSegInt( P[a1], P[a], Q[b1], Q[b], p, q ); - if( code == '1' || code == 'v' ) - { - if( inflag == Unknown && FirstPoint ) - { - aa = ba = 0; - FirstPoint = false; - p0 = p; - *result++ = p; - } - inflag = inOut( p, inflag, aHB, bHA, result ); - } - - //-----Advance rules----- - - // Special case: A & B overlap and oppositely oriented. - if( code == 'e' && A.ddot(B) < 0 ) - { - addSharedSeg( p, q, result ); - return (int)(result - result0); - } - - // Special case: A & B parallel and separated. - if( cross == 0 && aHB < 0 && bHA < 0 ) - return (int)(result - result0); - - // Special case: A & B collinear. - else if ( cross == 0 && aHB == 0 && bHA == 0 ) { - // Advance but do not output point. - if ( inflag == Pin ) - b = advance( b, &ba, m, inflag == Qin, Q[b], result ); - else - a = advance( a, &aa, n, inflag == Pin, P[a], result ); - } - - // Generic cases. - else if( cross >= 0 ) - { - if( bHA > 0) - a = advance( a, &aa, n, inflag == Pin, P[a], result ); - else - b = advance( b, &ba, m, inflag == Qin, Q[b], result ); - } - else - { - if( aHB > 0) - b = advance( b, &ba, m, inflag == Qin, Q[b], result ); - else - a = advance( a, &aa, n, inflag == Pin, P[a], result ); - } - // Quit when both adv. indices have cycled, or one has cycled twice. - } - while ( ((aa < n) || (ba < m)) && (aa < 2*n) && (ba < 2*m) ); - - // Deal with special cases: not implemented. - if( inflag == Unknown ) - { - // The boundaries of P and Q do not cross. - // ... - } - - int i, nr = (int)(result - result0); - double area = 0; - Point2f prev = result0[nr-1]; - for( i = 1; i < nr; i++ ) - { - result0[i-1] = result0[i]; - area += (double)prev.x*result0[i].y - (double)prev.y*result0[i].x; - prev = result0[i]; - } - - *_area = (float)(area*0.5); - - if( result0[nr-2] == result0[0] && nr > 1 ) - nr--; - return nr-1; -} - -} - -float cv::intersectConvexConvex( InputArray _p1, InputArray _p2, OutputArray _p12, bool handleNested ) -{ - Mat p1 = _p1.getMat(), p2 = _p2.getMat(); - CV_Assert( p1.depth() == CV_32S || p1.depth() == CV_32F ); - CV_Assert( p2.depth() == CV_32S || p2.depth() == CV_32F ); - - int n = p1.checkVector(2, p1.depth(), true); - int m = p2.checkVector(2, p2.depth(), true); - - CV_Assert( n >= 0 && m >= 0 ); - - if( n < 2 || m < 2 ) - { - _p12.release(); - return 0.f; - } - - AutoBuffer _result(n*2 + m*2 + 1); - Point2f *fp1 = _result, *fp2 = fp1 + n; - Point2f* result = fp2 + m; - int orientation = 0; - - for( int k = 1; k <= 2; k++ ) - { - Mat& p = k == 1 ? p1 : p2; - int len = k == 1 ? n : m; - Point2f* dst = k == 1 ? fp1 : fp2; - - Mat temp(p.size(), CV_MAKETYPE(CV_32F, p.channels()), dst); - p.convertTo(temp, CV_32F); - CV_Assert( temp.ptr() == dst ); - Point2f diff0 = dst[0] - dst[len-1]; - for( int i = 1; i < len; i++ ) - { - double s = diff0.cross(dst[i] - dst[i-1]); - if( s != 0 ) - { - if( s < 0 ) - { - orientation++; - flip( temp, temp, temp.rows > 1 ? 0 : 1 ); - } - break; - } - } - } - - float area = 0.f; - int nr = intersectConvexConvex_(fp1, n, fp2, m, result, &area); - if( nr == 0 ) - { - if( !handleNested ) - { - _p12.release(); - return 0.f; - } - - if( pointPolygonTest(_InputArray(fp1, n), fp2[0], false) >= 0 ) - { - result = fp2; - nr = m; - } - else if( pointPolygonTest(_InputArray(fp2, n), fp1[0], false) >= 0 ) - { - result = fp1; - nr = n; - } - else - { - _p12.release(); - return 0.f; - } - area = (float)contourArea(_InputArray(result, nr), false); - } - - if( _p12.needed() ) - { - Mat temp(nr, 1, CV_32FC2, result); - // if both input contours were reflected, - // let's orient the result as the input vectors - if( orientation == 2 ) - flip(temp, temp, 0); - - temp.copyTo(_p12); - } - return (float)fabs(area); -} - -/* -static void testConvConv() -{ - static const int P1[] = - { - 0, 0, - 100, 0, - 100, 100, - 0, 100, - }; - - static const int Q1[] = - { - 100, 80, - 50, 80, - 50, 50, - 100, 50 - }; - - static const int P2[] = - { - 0, 0, - 200, 0, - 200, 100, - 100, 200, - 0, 100 - }; - - static const int Q2[] = - { - 100, 100, - 300, 100, - 300, 200, - 100, 200 - }; - - static const int P3[] = - { - 0, 0, - 100, 0, - 100, 100, - 0, 100 - }; - - static const int Q3[] = - { - 50, 50, - 150, 50, - 150, 150, - 50, 150 - }; - - static const int P4[] = - { - 0, 160, - 50, 80, - 130, 0, - 190, 20, - 240, 100, - 240, 260, - 190, 290, - 130, 320, - 70, 320, - 30, 290 - }; - - static const int Q4[] = - { - 160, -30, - 280, 160, - 160, 320, - 0, 220, - 30, 100 - }; - - static const void* PQs[] = - { - P1, Q1, P2, Q2, P3, Q3, P4, Q4 - }; - - static const int lens[] = - { - CV_DIM(P1), CV_DIM(Q1), - CV_DIM(P2), CV_DIM(Q2), - CV_DIM(P3), CV_DIM(Q3), - CV_DIM(P4), CV_DIM(Q4) - }; - - Mat img(800, 800, CV_8UC3); - - for( int i = 0; i < CV_DIM(PQs)/2; i++ ) - { - Mat Pm = Mat(lens[i*2]/2, 1, CV_32SC2, (void*)PQs[i*2]) + Scalar(100, 100); - Mat Qm = Mat(lens[i*2+1]/2, 1, CV_32SC2, (void*)PQs[i*2+1]) + Scalar(100, 100); - Point* P = Pm.ptr(); - Point* Q = Qm.ptr(); - - flip(Pm, Pm, 0); - flip(Qm, Qm, 0); - - Mat Rm; - intersectConvexConvex(Pm, Qm, Rm); - std::cout << Rm << std::endl << std::endl; - - img = Scalar::all(0); - - polylines(img, Pm, true, Scalar(0,255,0), 1, CV_AA, 0); - polylines(img, Qm, true, Scalar(0,0,255), 1, CV_AA, 0); - Mat temp; - Rm.convertTo(temp, CV_32S, 256); - polylines(img, temp, true, Scalar(128, 255, 255), 3, CV_AA, 8); - - namedWindow("test", 1); - imshow("test", img); - waitKey(); - } -} -*/ - -/* End of file. */ diff --git a/modules/imgproc/src/grabcut.cpp b/modules/imgproc/src/grabcut.cpp deleted file mode 100644 index 943d42e..0000000 --- a/modules/imgproc/src/grabcut.cpp +++ /dev/null @@ -1,575 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "gcgraph.hpp" -#include - -using namespace cv; - -/* -This is implementation of image segmentation algorithm GrabCut described in -"GrabCut — Interactive Foreground Extraction using Iterated Graph Cuts". -Carsten Rother, Vladimir Kolmogorov, Andrew Blake. - */ - -/* - GMM - Gaussian Mixture Model -*/ -class GMM -{ -public: - static const int componentsCount = 5; - - GMM( Mat& _model ); - double operator()( const Vec3d color ) const; - double operator()( int ci, const Vec3d color ) const; - int whichComponent( const Vec3d color ) const; - - void initLearning(); - void addSample( int ci, const Vec3d color ); - void endLearning(); - -private: - void calcInverseCovAndDeterm( int ci ); - Mat model; - double* coefs; - double* mean; - double* cov; - - double inverseCovs[componentsCount][3][3]; - double covDeterms[componentsCount]; - - double sums[componentsCount][3]; - double prods[componentsCount][3][3]; - int sampleCounts[componentsCount]; - int totalSampleCount; -}; - -GMM::GMM( Mat& _model ) -{ - const int modelSize = 3/*mean*/ + 9/*covariance*/ + 1/*component weight*/; - if( _model.empty() ) - { - _model.create( 1, modelSize*componentsCount, CV_64FC1 ); - _model.setTo(Scalar(0)); - } - else if( (_model.type() != CV_64FC1) || (_model.rows != 1) || (_model.cols != modelSize*componentsCount) ) - CV_Error( CV_StsBadArg, "_model must have CV_64FC1 type, rows == 1 and cols == 13*componentsCount" ); - - model = _model; - - coefs = model.ptr(0); - mean = coefs + componentsCount; - cov = mean + 3*componentsCount; - - for( int ci = 0; ci < componentsCount; ci++ ) - if( coefs[ci] > 0 ) - calcInverseCovAndDeterm( ci ); -} - -double GMM::operator()( const Vec3d color ) const -{ - double res = 0; - for( int ci = 0; ci < componentsCount; ci++ ) - res += coefs[ci] * (*this)(ci, color ); - return res; -} - -double GMM::operator()( int ci, const Vec3d color ) const -{ - double res = 0; - if( coefs[ci] > 0 ) - { - CV_Assert( covDeterms[ci] > std::numeric_limits::epsilon() ); - Vec3d diff = color; - double* m = mean + 3*ci; - diff[0] -= m[0]; diff[1] -= m[1]; diff[2] -= m[2]; - double mult = diff[0]*(diff[0]*inverseCovs[ci][0][0] + diff[1]*inverseCovs[ci][1][0] + diff[2]*inverseCovs[ci][2][0]) - + diff[1]*(diff[0]*inverseCovs[ci][0][1] + diff[1]*inverseCovs[ci][1][1] + diff[2]*inverseCovs[ci][2][1]) - + diff[2]*(diff[0]*inverseCovs[ci][0][2] + diff[1]*inverseCovs[ci][1][2] + diff[2]*inverseCovs[ci][2][2]); - res = 1.0f/sqrt(covDeterms[ci]) * exp(-0.5f*mult); - } - return res; -} - -int GMM::whichComponent( const Vec3d color ) const -{ - int k = 0; - double max = 0; - - for( int ci = 0; ci < componentsCount; ci++ ) - { - double p = (*this)( ci, color ); - if( p > max ) - { - k = ci; - max = p; - } - } - return k; -} - -void GMM::initLearning() -{ - for( int ci = 0; ci < componentsCount; ci++) - { - sums[ci][0] = sums[ci][1] = sums[ci][2] = 0; - prods[ci][0][0] = prods[ci][0][1] = prods[ci][0][2] = 0; - prods[ci][1][0] = prods[ci][1][1] = prods[ci][1][2] = 0; - prods[ci][2][0] = prods[ci][2][1] = prods[ci][2][2] = 0; - sampleCounts[ci] = 0; - } - totalSampleCount = 0; -} - -void GMM::addSample( int ci, const Vec3d color ) -{ - sums[ci][0] += color[0]; sums[ci][1] += color[1]; sums[ci][2] += color[2]; - prods[ci][0][0] += color[0]*color[0]; prods[ci][0][1] += color[0]*color[1]; prods[ci][0][2] += color[0]*color[2]; - prods[ci][1][0] += color[1]*color[0]; prods[ci][1][1] += color[1]*color[1]; prods[ci][1][2] += color[1]*color[2]; - prods[ci][2][0] += color[2]*color[0]; prods[ci][2][1] += color[2]*color[1]; prods[ci][2][2] += color[2]*color[2]; - sampleCounts[ci]++; - totalSampleCount++; -} - -void GMM::endLearning() -{ - const double variance = 0.01; - for( int ci = 0; ci < componentsCount; ci++ ) - { - int n = sampleCounts[ci]; - if( n == 0 ) - coefs[ci] = 0; - else - { - coefs[ci] = (double)n/totalSampleCount; - - double* m = mean + 3*ci; - m[0] = sums[ci][0]/n; m[1] = sums[ci][1]/n; m[2] = sums[ci][2]/n; - - double* c = cov + 9*ci; - c[0] = prods[ci][0][0]/n - m[0]*m[0]; c[1] = prods[ci][0][1]/n - m[0]*m[1]; c[2] = prods[ci][0][2]/n - m[0]*m[2]; - c[3] = prods[ci][1][0]/n - m[1]*m[0]; c[4] = prods[ci][1][1]/n - m[1]*m[1]; c[5] = prods[ci][1][2]/n - m[1]*m[2]; - c[6] = prods[ci][2][0]/n - m[2]*m[0]; c[7] = prods[ci][2][1]/n - m[2]*m[1]; c[8] = prods[ci][2][2]/n - m[2]*m[2]; - - double dtrm = c[0]*(c[4]*c[8]-c[5]*c[7]) - c[1]*(c[3]*c[8]-c[5]*c[6]) + c[2]*(c[3]*c[7]-c[4]*c[6]); - if( dtrm <= std::numeric_limits::epsilon() ) - { - // Adds the white noise to avoid singular covariance matrix. - c[0] += variance; - c[4] += variance; - c[8] += variance; - } - - calcInverseCovAndDeterm(ci); - } - } -} - -void GMM::calcInverseCovAndDeterm( int ci ) -{ - if( coefs[ci] > 0 ) - { - double *c = cov + 9*ci; - double dtrm = - covDeterms[ci] = c[0]*(c[4]*c[8]-c[5]*c[7]) - c[1]*(c[3]*c[8]-c[5]*c[6]) + c[2]*(c[3]*c[7]-c[4]*c[6]); - - CV_Assert( dtrm > std::numeric_limits::epsilon() ); - inverseCovs[ci][0][0] = (c[4]*c[8] - c[5]*c[7]) / dtrm; - inverseCovs[ci][1][0] = -(c[3]*c[8] - c[5]*c[6]) / dtrm; - inverseCovs[ci][2][0] = (c[3]*c[7] - c[4]*c[6]) / dtrm; - inverseCovs[ci][0][1] = -(c[1]*c[8] - c[2]*c[7]) / dtrm; - inverseCovs[ci][1][1] = (c[0]*c[8] - c[2]*c[6]) / dtrm; - inverseCovs[ci][2][1] = -(c[0]*c[7] - c[1]*c[6]) / dtrm; - inverseCovs[ci][0][2] = (c[1]*c[5] - c[2]*c[4]) / dtrm; - inverseCovs[ci][1][2] = -(c[0]*c[5] - c[2]*c[3]) / dtrm; - inverseCovs[ci][2][2] = (c[0]*c[4] - c[1]*c[3]) / dtrm; - } -} - -/* - Calculate beta - parameter of GrabCut algorithm. - beta = 1/(2*avg(sqr(||color[i] - color[j]||))) -*/ -static double calcBeta( const Mat& img ) -{ - double beta = 0; - for( int y = 0; y < img.rows; y++ ) - { - for( int x = 0; x < img.cols; x++ ) - { - Vec3d color = img.at(y,x); - if( x>0 ) // left - { - Vec3d diff = color - (Vec3d)img.at(y,x-1); - beta += diff.dot(diff); - } - if( y>0 && x>0 ) // upleft - { - Vec3d diff = color - (Vec3d)img.at(y-1,x-1); - beta += diff.dot(diff); - } - if( y>0 ) // up - { - Vec3d diff = color - (Vec3d)img.at(y-1,x); - beta += diff.dot(diff); - } - if( y>0 && x(y-1,x+1); - beta += diff.dot(diff); - } - } - } - if( beta <= std::numeric_limits::epsilon() ) - beta = 0; - else - beta = 1.f / (2 * beta/(4*img.cols*img.rows - 3*img.cols - 3*img.rows + 2) ); - - return beta; -} - -/* - Calculate weights of noterminal vertices of graph. - beta and gamma - parameters of GrabCut algorithm. - */ -static void calcNWeights( const Mat& img, Mat& leftW, Mat& upleftW, Mat& upW, Mat& uprightW, double beta, double gamma ) -{ - const double gammaDivSqrt2 = gamma / std::sqrt(2.0f); - leftW.create( img.rows, img.cols, CV_64FC1 ); - upleftW.create( img.rows, img.cols, CV_64FC1 ); - upW.create( img.rows, img.cols, CV_64FC1 ); - uprightW.create( img.rows, img.cols, CV_64FC1 ); - for( int y = 0; y < img.rows; y++ ) - { - for( int x = 0; x < img.cols; x++ ) - { - Vec3d color = img.at(y,x); - if( x-1>=0 ) // left - { - Vec3d diff = color - (Vec3d)img.at(y,x-1); - leftW.at(y,x) = gamma * exp(-beta*diff.dot(diff)); - } - else - leftW.at(y,x) = 0; - if( x-1>=0 && y-1>=0 ) // upleft - { - Vec3d diff = color - (Vec3d)img.at(y-1,x-1); - upleftW.at(y,x) = gammaDivSqrt2 * exp(-beta*diff.dot(diff)); - } - else - upleftW.at(y,x) = 0; - if( y-1>=0 ) // up - { - Vec3d diff = color - (Vec3d)img.at(y-1,x); - upW.at(y,x) = gamma * exp(-beta*diff.dot(diff)); - } - else - upW.at(y,x) = 0; - if( x+1=0 ) // upright - { - Vec3d diff = color - (Vec3d)img.at(y-1,x+1); - uprightW.at(y,x) = gammaDivSqrt2 * exp(-beta*diff.dot(diff)); - } - else - uprightW.at(y,x) = 0; - } - } -} - -/* - Check size, type and element values of mask matrix. - */ -static void checkMask( const Mat& img, const Mat& mask ) -{ - if( mask.empty() ) - CV_Error( CV_StsBadArg, "mask is empty" ); - if( mask.type() != CV_8UC1 ) - CV_Error( CV_StsBadArg, "mask must have CV_8UC1 type" ); - if( mask.cols != img.cols || mask.rows != img.rows ) - CV_Error( CV_StsBadArg, "mask must have as many rows and cols as img" ); - for( int y = 0; y < mask.rows; y++ ) - { - for( int x = 0; x < mask.cols; x++ ) - { - uchar val = mask.at(y,x); - if( val!=GC_BGD && val!=GC_FGD && val!=GC_PR_BGD && val!=GC_PR_FGD ) - CV_Error( CV_StsBadArg, "mask element value must be equel" - "GC_BGD or GC_FGD or GC_PR_BGD or GC_PR_FGD" ); - } - } -} - -/* - Initialize mask using rectangular. -*/ -static void initMaskWithRect( Mat& mask, Size imgSize, Rect rect ) -{ - mask.create( imgSize, CV_8UC1 ); - mask.setTo( GC_BGD ); - - rect.x = max(0, rect.x); - rect.y = max(0, rect.y); - rect.width = min(rect.width, imgSize.width-rect.x); - rect.height = min(rect.height, imgSize.height-rect.y); - - (mask(rect)).setTo( Scalar(GC_PR_FGD) ); -} - -/* - Initialize GMM background and foreground models using kmeans algorithm. -*/ -static void initGMMs( const Mat& img, const Mat& mask, GMM& bgdGMM, GMM& fgdGMM ) -{ - const int kMeansItCount = 10; - const int kMeansType = KMEANS_PP_CENTERS; - - Mat bgdLabels, fgdLabels; - vector bgdSamples, fgdSamples; - Point p; - for( p.y = 0; p.y < img.rows; p.y++ ) - { - for( p.x = 0; p.x < img.cols; p.x++ ) - { - if( mask.at(p) == GC_BGD || mask.at(p) == GC_PR_BGD ) - bgdSamples.push_back( (Vec3f)img.at(p) ); - else // GC_FGD | GC_PR_FGD - fgdSamples.push_back( (Vec3f)img.at(p) ); - } - } - CV_Assert( !bgdSamples.empty() && !fgdSamples.empty() ); - Mat _bgdSamples( (int)bgdSamples.size(), 3, CV_32FC1, &bgdSamples[0][0] ); - kmeans( _bgdSamples, GMM::componentsCount, bgdLabels, - TermCriteria( CV_TERMCRIT_ITER, kMeansItCount, 0.0), 0, kMeansType ); - Mat _fgdSamples( (int)fgdSamples.size(), 3, CV_32FC1, &fgdSamples[0][0] ); - kmeans( _fgdSamples, GMM::componentsCount, fgdLabels, - TermCriteria( CV_TERMCRIT_ITER, kMeansItCount, 0.0), 0, kMeansType ); - - bgdGMM.initLearning(); - for( int i = 0; i < (int)bgdSamples.size(); i++ ) - bgdGMM.addSample( bgdLabels.at(i,0), bgdSamples[i] ); - bgdGMM.endLearning(); - - fgdGMM.initLearning(); - for( int i = 0; i < (int)fgdSamples.size(); i++ ) - fgdGMM.addSample( fgdLabels.at(i,0), fgdSamples[i] ); - fgdGMM.endLearning(); -} - -/* - Assign GMMs components for each pixel. -*/ -static void assignGMMsComponents( const Mat& img, const Mat& mask, const GMM& bgdGMM, const GMM& fgdGMM, Mat& compIdxs ) -{ - Point p; - for( p.y = 0; p.y < img.rows; p.y++ ) - { - for( p.x = 0; p.x < img.cols; p.x++ ) - { - Vec3d color = img.at(p); - compIdxs.at(p) = mask.at(p) == GC_BGD || mask.at(p) == GC_PR_BGD ? - bgdGMM.whichComponent(color) : fgdGMM.whichComponent(color); - } - } -} - -/* - Learn GMMs parameters. -*/ -static void learnGMMs( const Mat& img, const Mat& mask, const Mat& compIdxs, GMM& bgdGMM, GMM& fgdGMM ) -{ - bgdGMM.initLearning(); - fgdGMM.initLearning(); - Point p; - for( int ci = 0; ci < GMM::componentsCount; ci++ ) - { - for( p.y = 0; p.y < img.rows; p.y++ ) - { - for( p.x = 0; p.x < img.cols; p.x++ ) - { - if( compIdxs.at(p) == ci ) - { - if( mask.at(p) == GC_BGD || mask.at(p) == GC_PR_BGD ) - bgdGMM.addSample( ci, img.at(p) ); - else - fgdGMM.addSample( ci, img.at(p) ); - } - } - } - } - bgdGMM.endLearning(); - fgdGMM.endLearning(); -} - -/* - Construct GCGraph -*/ -static void constructGCGraph( const Mat& img, const Mat& mask, const GMM& bgdGMM, const GMM& fgdGMM, double lambda, - const Mat& leftW, const Mat& upleftW, const Mat& upW, const Mat& uprightW, - GCGraph& graph ) -{ - int vtxCount = img.cols*img.rows, - edgeCount = 2*(4*img.cols*img.rows - 3*(img.cols + img.rows) + 2); - graph.create(vtxCount, edgeCount); - Point p; - for( p.y = 0; p.y < img.rows; p.y++ ) - { - for( p.x = 0; p.x < img.cols; p.x++) - { - // add node - int vtxIdx = graph.addVtx(); - Vec3b color = img.at(p); - - // set t-weights - double fromSource, toSink; - if( mask.at(p) == GC_PR_BGD || mask.at(p) == GC_PR_FGD ) - { - fromSource = -log( bgdGMM(color) ); - toSink = -log( fgdGMM(color) ); - } - else if( mask.at(p) == GC_BGD ) - { - fromSource = 0; - toSink = lambda; - } - else // GC_FGD - { - fromSource = lambda; - toSink = 0; - } - graph.addTermWeights( vtxIdx, fromSource, toSink ); - - // set n-weights - if( p.x>0 ) - { - double w = leftW.at(p); - graph.addEdges( vtxIdx, vtxIdx-1, w, w ); - } - if( p.x>0 && p.y>0 ) - { - double w = upleftW.at(p); - graph.addEdges( vtxIdx, vtxIdx-img.cols-1, w, w ); - } - if( p.y>0 ) - { - double w = upW.at(p); - graph.addEdges( vtxIdx, vtxIdx-img.cols, w, w ); - } - if( p.x0 ) - { - double w = uprightW.at(p); - graph.addEdges( vtxIdx, vtxIdx-img.cols+1, w, w ); - } - } - } -} - -/* - Estimate segmentation using MaxFlow algorithm -*/ -static void estimateSegmentation( GCGraph& graph, Mat& mask ) -{ - graph.maxFlow(); - Point p; - for( p.y = 0; p.y < mask.rows; p.y++ ) - { - for( p.x = 0; p.x < mask.cols; p.x++ ) - { - if( mask.at(p) == GC_PR_BGD || mask.at(p) == GC_PR_FGD ) - { - if( graph.inSourceSegment( p.y*mask.cols+p.x /*vertex index*/ ) ) - mask.at(p) = GC_PR_FGD; - else - mask.at(p) = GC_PR_BGD; - } - } - } -} - -void cv::grabCut( InputArray _img, InputOutputArray _mask, Rect rect, - InputOutputArray _bgdModel, InputOutputArray _fgdModel, - int iterCount, int mode ) -{ - Mat img = _img.getMat(); - Mat& mask = _mask.getMatRef(); - Mat& bgdModel = _bgdModel.getMatRef(); - Mat& fgdModel = _fgdModel.getMatRef(); - - if( img.empty() ) - CV_Error( CV_StsBadArg, "image is empty" ); - if( img.type() != CV_8UC3 ) - CV_Error( CV_StsBadArg, "image mush have CV_8UC3 type" ); - - GMM bgdGMM( bgdModel ), fgdGMM( fgdModel ); - Mat compIdxs( img.size(), CV_32SC1 ); - - if( mode == GC_INIT_WITH_RECT || mode == GC_INIT_WITH_MASK ) - { - if( mode == GC_INIT_WITH_RECT ) - initMaskWithRect( mask, img.size(), rect ); - else // flag == GC_INIT_WITH_MASK - checkMask( img, mask ); - initGMMs( img, mask, bgdGMM, fgdGMM ); - } - - if( iterCount <= 0) - return; - - if( mode == GC_EVAL ) - checkMask( img, mask ); - - const double gamma = 50; - const double lambda = 9*gamma; - const double beta = calcBeta( img ); - - Mat leftW, upleftW, upW, uprightW; - calcNWeights( img, leftW, upleftW, upW, uprightW, beta, gamma ); - - for( int i = 0; i < iterCount; i++ ) - { - GCGraph graph; - assignGMMsComponents( img, mask, bgdGMM, fgdGMM, compIdxs ); - learnGMMs( img, mask, compIdxs, bgdGMM, fgdGMM ); - constructGCGraph(img, mask, bgdGMM, fgdGMM, lambda, leftW, upleftW, upW, uprightW, graph ); - estimateSegmentation( graph, mask ); - } -} diff --git a/modules/imgproc/src/histogram.cpp b/modules/imgproc/src/histogram.cpp deleted file mode 100644 index 18ff343..0000000 --- a/modules/imgproc/src/histogram.cpp +++ /dev/null @@ -1,3328 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -namespace cv -{ - -template<> void Ptr::delete_obj() -{ cvReleaseHist(&obj); } - - -////////////////// Helper functions ////////////////////// - -static const size_t OUT_OF_RANGE = (size_t)1 << (sizeof(size_t)*8 - 2); - -static void -calcHistLookupTables_8u( const Mat& hist, const SparseMat& shist, - int dims, const float** ranges, const double* uniranges, - bool uniform, bool issparse, vector& _tab ) -{ - const int low = 0, high = 256; - int i, j; - _tab.resize((high-low)*dims); - size_t* tab = &_tab[0]; - - if( uniform ) - { - for( i = 0; i < dims; i++ ) - { - double a = uniranges[i*2]; - double b = uniranges[i*2+1]; - int sz = !issparse ? hist.size[i] : shist.size(i); - size_t step = !issparse ? hist.step[i] : 1; - - for( j = low; j < high; j++ ) - { - int idx = cvFloor(j*a + b); - size_t written_idx; - if( (unsigned)idx < (unsigned)sz ) - written_idx = idx*step; - else - written_idx = OUT_OF_RANGE; - - tab[i*(high - low) + j - low] = written_idx; - } - } - } - else - { - for( i = 0; i < dims; i++ ) - { - int limit = std::min(cvCeil(ranges[i][0]), high); - int idx = -1, sz = !issparse ? hist.size[i] : shist.size(i); - size_t written_idx = OUT_OF_RANGE; - size_t step = !issparse ? hist.step[i] : 1; - - for(j = low;;) - { - for( ; j < limit; j++ ) - tab[i*(high - low) + j - low] = written_idx; - - if( (unsigned)(++idx) < (unsigned)sz ) - { - limit = std::min(cvCeil(ranges[i][idx+1]), high); - written_idx = idx*step; - } - else - { - for( ; j < high; j++ ) - tab[i*(high - low) + j - low] = OUT_OF_RANGE; - break; - } - } - } - } -} - - -static void histPrepareImages( const Mat* images, int nimages, const int* channels, - const Mat& mask, int dims, const int* histSize, - const float** ranges, bool uniform, - vector& ptrs, vector& deltas, - Size& imsize, vector& uniranges ) -{ - int i, j, c; - CV_Assert( channels != 0 || nimages == dims ); - - imsize = images[0].size(); - int depth = images[0].depth(), esz1 = (int)images[0].elemSize1(); - bool isContinuous = true; - - ptrs.resize(dims + 1); - deltas.resize((dims + 1)*2); - - for( i = 0; i < dims; i++ ) - { - if(!channels) - { - j = i; - c = 0; - CV_Assert( images[j].channels() == 1 ); - } - else - { - c = channels[i]; - CV_Assert( c >= 0 ); - for( j = 0; j < nimages; c -= images[j].channels(), j++ ) - if( c < images[j].channels() ) - break; - CV_Assert( j < nimages ); - } - - CV_Assert( images[j].size() == imsize && images[j].depth() == depth ); - if( !images[j].isContinuous() ) - isContinuous = false; - ptrs[i] = images[j].data + c*esz1; - deltas[i*2] = images[j].channels(); - deltas[i*2+1] = (int)(images[j].step/esz1 - imsize.width*deltas[i*2]); - } - - if( mask.data ) - { - CV_Assert( mask.size() == imsize && mask.channels() == 1 ); - isContinuous = isContinuous && mask.isContinuous(); - ptrs[dims] = mask.data; - deltas[dims*2] = 1; - deltas[dims*2 + 1] = (int)(mask.step/mask.elemSize1()); - } - -#ifndef HAVE_TBB - if( isContinuous ) - { - imsize.width *= imsize.height; - imsize.height = 1; - } -#endif - - if( !ranges ) - { - CV_Assert( depth == CV_8U ); - - uniranges.resize( dims*2 ); - for( i = 0; i < dims; i++ ) - { - uniranges[i*2] = histSize[i]/256.; - uniranges[i*2+1] = 0; - } - } - else if( uniform ) - { - uniranges.resize( dims*2 ); - for( i = 0; i < dims; i++ ) - { - CV_Assert( ranges[i] && ranges[i][0] < ranges[i][1] ); - double low = ranges[i][0], high = ranges[i][1]; - double t = histSize[i]/(high - low); - uniranges[i*2] = t; - uniranges[i*2+1] = -t*low; - } - } - else - { - for( i = 0; i < dims; i++ ) - { - size_t n = histSize[i]; - for(size_t k = 0; k < n; k++ ) - CV_Assert( ranges[i][k] < ranges[i][k+1] ); - } - } -} - - -////////////////////////////////// C A L C U L A T E H I S T O G R A M //////////////////////////////////// -#ifdef HAVE_TBB -enum {one = 1, two, three}; // array elements number - -template -class calcHist1D_Invoker -{ -public: - calcHist1D_Invoker( const vector& _ptrs, const vector& _deltas, - Mat& hist, const double* _uniranges, int sz, int dims, - Size& imageSize ) - : mask_(_ptrs[dims]), - mstep_(_deltas[dims*2 + 1]), - imageWidth_(imageSize.width), - histogramSize_(hist.size()), histogramType_(hist.type()), - globalHistogram_((tbb::atomic*)hist.data) - { - p_[0] = ((T**)&_ptrs[0])[0]; - step_[0] = (&_deltas[0])[1]; - d_[0] = (&_deltas[0])[0]; - a_[0] = (&_uniranges[0])[0]; - b_[0] = (&_uniranges[0])[1]; - size_[0] = sz; - } - - void operator()( const BlockedRange& range ) const - { - T* p0 = p_[0] + range.begin() * (step_[0] + imageWidth_*d_[0]); - uchar* mask = mask_ + range.begin()*mstep_; - - for( int row = range.begin(); row < range.end(); row++, p0 += step_[0] ) - { - if( !mask_ ) - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0] ) - { - int idx = cvFloor(*p0*a_[0] + b_[0]); - if( (unsigned)idx < (unsigned)size_[0] ) - { - globalHistogram_[idx].fetch_and_add(1); - } - } - } - else - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0] ) - { - if( mask[x] ) - { - int idx = cvFloor(*p0*a_[0] + b_[0]); - if( (unsigned)idx < (unsigned)size_[0] ) - { - globalHistogram_[idx].fetch_and_add(1); - } - } - } - mask += mstep_; - } - } - } - -private: - calcHist1D_Invoker operator=(const calcHist1D_Invoker&); - - T* p_[one]; - uchar* mask_; - int step_[one]; - int d_[one]; - int mstep_; - double a_[one]; - double b_[one]; - int size_[one]; - int imageWidth_; - Size histogramSize_; - int histogramType_; - tbb::atomic* globalHistogram_; -}; - -template -class calcHist2D_Invoker -{ -public: - calcHist2D_Invoker( const vector& _ptrs, const vector& _deltas, - Mat& hist, const double* _uniranges, const int* size, - int dims, Size& imageSize, size_t* hstep ) - : mask_(_ptrs[dims]), - mstep_(_deltas[dims*2 + 1]), - imageWidth_(imageSize.width), - histogramSize_(hist.size()), histogramType_(hist.type()), - globalHistogram_(hist.data) - { - p_[0] = ((T**)&_ptrs[0])[0]; p_[1] = ((T**)&_ptrs[0])[1]; - step_[0] = (&_deltas[0])[1]; step_[1] = (&_deltas[0])[3]; - d_[0] = (&_deltas[0])[0]; d_[1] = (&_deltas[0])[2]; - a_[0] = (&_uniranges[0])[0]; a_[1] = (&_uniranges[0])[2]; - b_[0] = (&_uniranges[0])[1]; b_[1] = (&_uniranges[0])[3]; - size_[0] = size[0]; size_[1] = size[1]; - hstep_[0] = hstep[0]; - } - - void operator()(const BlockedRange& range) const - { - T* p0 = p_[0] + range.begin()*(step_[0] + imageWidth_*d_[0]); - T* p1 = p_[1] + range.begin()*(step_[1] + imageWidth_*d_[1]); - uchar* mask = mask_ + range.begin()*mstep_; - - for( int row = range.begin(); row < range.end(); row++, p0 += step_[0], p1 += step_[1] ) - { - if( !mask_ ) - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1] ) - { - int idx0 = cvFloor(*p0*a_[0] + b_[0]); - int idx1 = cvFloor(*p1*a_[1] + b_[1]); - if( (unsigned)idx0 < (unsigned)size_[0] && (unsigned)idx1 < (unsigned)size_[1] ) - ( (tbb::atomic*)(globalHistogram_ + hstep_[0]*idx0) )[idx1].fetch_and_add(1); - } - } - else - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1] ) - { - if( mask[x] ) - { - int idx0 = cvFloor(*p0*a_[0] + b_[0]); - int idx1 = cvFloor(*p1*a_[1] + b_[1]); - if( (unsigned)idx0 < (unsigned)size_[0] && (unsigned)idx1 < (unsigned)size_[1] ) - ((tbb::atomic*)(globalHistogram_ + hstep_[0]*idx0))[idx1].fetch_and_add(1); - } - } - mask += mstep_; - } - } - } - -private: - calcHist2D_Invoker operator=(const calcHist2D_Invoker&); - - T* p_[two]; - uchar* mask_; - int step_[two]; - int d_[two]; - int mstep_; - double a_[two]; - double b_[two]; - int size_[two]; - const int imageWidth_; - size_t hstep_[one]; - Size histogramSize_; - int histogramType_; - uchar* globalHistogram_; -}; - - -template -class calcHist3D_Invoker -{ -public: - calcHist3D_Invoker( const vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, const double* uniranges, int _dims, - size_t* hstep, int* size ) - : mask_(_ptrs[_dims]), - mstep_(_deltas[_dims*2 + 1]), - imageWidth_(imsize.width), - globalHistogram_(hist.data) - { - p_[0] = ((T**)&_ptrs[0])[0]; p_[1] = ((T**)&_ptrs[0])[1]; p_[2] = ((T**)&_ptrs[0])[2]; - step_[0] = (&_deltas[0])[1]; step_[1] = (&_deltas[0])[3]; step_[2] = (&_deltas[0])[5]; - d_[0] = (&_deltas[0])[0]; d_[1] = (&_deltas[0])[2]; d_[2] = (&_deltas[0])[4]; - a_[0] = uniranges[0]; a_[1] = uniranges[2]; a_[2] = uniranges[4]; - b_[0] = uniranges[1]; b_[1] = uniranges[3]; b_[2] = uniranges[5]; - size_[0] = size[0]; size_[1] = size[1]; size_[2] = size[2]; - hstep_[0] = hstep[0]; hstep_[1] = hstep[1]; - } - - void operator()( const BlockedRange& range ) const - { - T* p0 = p_[0] + range.begin()*(imageWidth_*d_[0] + step_[0]); - T* p1 = p_[1] + range.begin()*(imageWidth_*d_[1] + step_[1]); - T* p2 = p_[2] + range.begin()*(imageWidth_*d_[2] + step_[2]); - uchar* mask = mask_ + range.begin()*mstep_; - - for( int i = range.begin(); i < range.end(); i++, p0 += step_[0], p1 += step_[1], p2 += step_[2] ) - { - if( !mask_ ) - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1], p2 += d_[2] ) - { - int idx0 = cvFloor(*p0*a_[0] + b_[0]); - int idx1 = cvFloor(*p1*a_[1] + b_[1]); - int idx2 = cvFloor(*p2*a_[2] + b_[2]); - if( (unsigned)idx0 < (unsigned)size_[0] && - (unsigned)idx1 < (unsigned)size_[1] && - (unsigned)idx2 < (unsigned)size_[2] ) - { - ( (tbb::atomic*)(globalHistogram_ + hstep_[0]*idx0 + hstep_[1]*idx1) )[idx2].fetch_and_add(1); - } - } - } - else - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1], p2 += d_[2] ) - { - if( mask[x] ) - { - int idx0 = cvFloor(*p0*a_[0] + b_[0]); - int idx1 = cvFloor(*p1*a_[1] + b_[1]); - int idx2 = cvFloor(*p2*a_[2] + b_[2]); - if( (unsigned)idx0 < (unsigned)size_[0] && - (unsigned)idx1 < (unsigned)size_[1] && - (unsigned)idx2 < (unsigned)size_[2] ) - { - ( (tbb::atomic*)(globalHistogram_ + hstep_[0]*idx0 + hstep_[1]*idx1) )[idx2].fetch_and_add(1); - } - } - } - mask += mstep_; - } - } - } - - static bool isFit( const Mat& histogram, const Size imageSize ) - { - return ( imageSize.width * imageSize.height >= 320*240 - && histogram.total() >= 8*8*8 ); - } - -private: - calcHist3D_Invoker operator=(const calcHist3D_Invoker&); - - T* p_[three]; - uchar* mask_; - int step_[three]; - int d_[three]; - const int mstep_; - double a_[three]; - double b_[three]; - int size_[three]; - int imageWidth_; - size_t hstep_[two]; - uchar* globalHistogram_; -}; - -class CalcHist1D_8uInvoker -{ -public: - CalcHist1D_8uInvoker( const vector& ptrs, const vector& deltas, - Size imsize, Mat& hist, int dims, const vector& tab, - tbb::mutex* lock ) - : mask_(ptrs[dims]), - mstep_(deltas[dims*2 + 1]), - imageWidth_(imsize.width), - imageSize_(imsize), - histSize_(hist.size()), histType_(hist.type()), - tab_((size_t*)&tab[0]), - histogramWriteLock_(lock), - globalHistogram_(hist.data) - { - p_[0] = (&ptrs[0])[0]; - step_[0] = (&deltas[0])[1]; - d_[0] = (&deltas[0])[0]; - } - - void operator()( const BlockedRange& range ) const - { - int localHistogram[256] = { 0, }; - uchar* mask = mask_; - uchar* p0 = p_[0]; - int x; - tbb::mutex::scoped_lock lock; - - if( !mask_ ) - { - int n = (imageWidth_ - 4) / 4 + 1; - int tail = imageWidth_ - n*4; - - int xN = 4*n; - p0 += (xN*d_[0] + tail*d_[0] + step_[0]) * range.begin(); - } - else - { - p0 += (imageWidth_*d_[0] + step_[0]) * range.begin(); - mask += mstep_*range.begin(); - } - - for( int i = range.begin(); i < range.end(); i++, p0 += step_[0] ) - { - if( !mask_ ) - { - if( d_[0] == 1 ) - { - for( x = 0; x <= imageWidth_ - 4; x += 4 ) - { - int t0 = p0[x], t1 = p0[x+1]; - localHistogram[t0]++; localHistogram[t1]++; - t0 = p0[x+2]; t1 = p0[x+3]; - localHistogram[t0]++; localHistogram[t1]++; - } - p0 += x; - } - else - { - for( x = 0; x <= imageWidth_ - 4; x += 4 ) - { - int t0 = p0[0], t1 = p0[d_[0]]; - localHistogram[t0]++; localHistogram[t1]++; - p0 += d_[0]*2; - t0 = p0[0]; t1 = p0[d_[0]]; - localHistogram[t0]++; localHistogram[t1]++; - p0 += d_[0]*2; - } - } - - for( ; x < imageWidth_; x++, p0 += d_[0] ) - { - localHistogram[*p0]++; - } - } - else - { - for( x = 0; x < imageWidth_; x++, p0 += d_[0] ) - { - if( mask[x] ) - { - localHistogram[*p0]++; - } - } - mask += mstep_; - } - } - - lock.acquire(*histogramWriteLock_); - for(int i = 0; i < 256; i++ ) - { - size_t hidx = tab_[i]; - if( hidx < OUT_OF_RANGE ) - { - *(int*)((globalHistogram_ + hidx)) += localHistogram[i]; - } - } - lock.release(); - } - - static bool isFit( const Mat& histogram, const Size imageSize ) - { - return ( histogram.total() >= 8 - && imageSize.width * imageSize.height >= 160*120 ); - } - -private: - uchar* p_[one]; - uchar* mask_; - int mstep_; - int step_[one]; - int d_[one]; - int imageWidth_; - Size imageSize_; - Size histSize_; - int histType_; - size_t* tab_; - tbb::mutex* histogramWriteLock_; - uchar* globalHistogram_; -}; - -class CalcHist2D_8uInvoker -{ -public: - CalcHist2D_8uInvoker( const vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, const vector& _tab, - tbb::mutex* lock ) - : mask_(_ptrs[dims]), - mstep_(_deltas[dims*2 + 1]), - imageWidth_(imsize.width), - histSize_(hist.size()), histType_(hist.type()), - tab_((size_t*)&_tab[0]), - histogramWriteLock_(lock), - globalHistogram_(hist.data) - { - p_[0] = (uchar*)(&_ptrs[0])[0]; p_[1] = (uchar*)(&_ptrs[0])[1]; - step_[0] = (&_deltas[0])[1]; step_[1] = (&_deltas[0])[3]; - d_[0] = (&_deltas[0])[0]; d_[1] = (&_deltas[0])[2]; - } - - void operator()( const BlockedRange& range ) const - { - uchar* p0 = p_[0] + range.begin()*(step_[0] + imageWidth_*d_[0]); - uchar* p1 = p_[1] + range.begin()*(step_[1] + imageWidth_*d_[1]); - uchar* mask = mask_ + range.begin()*mstep_; - - Mat localHist = Mat::zeros(histSize_, histType_); - uchar* localHistData = localHist.data; - tbb::mutex::scoped_lock lock; - - for(int i = range.begin(); i < range.end(); i++, p0 += step_[0], p1 += step_[1]) - { - if( !mask_ ) - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1] ) - { - size_t idx = tab_[*p0] + tab_[*p1 + 256]; - if( idx < OUT_OF_RANGE ) - { - ++*(int*)(localHistData + idx); - } - } - } - else - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1] ) - { - size_t idx; - if( mask[x] && (idx = tab_[*p0] + tab_[*p1 + 256]) < OUT_OF_RANGE ) - { - ++*(int*)(localHistData + idx); - } - } - mask += mstep_; - } - } - - lock.acquire(*histogramWriteLock_); - for(int i = 0; i < histSize_.width*histSize_.height; i++) - { - ((int*)globalHistogram_)[i] += ((int*)localHistData)[i]; - } - lock.release(); - } - - static bool isFit( const Mat& histogram, const Size imageSize ) - { - return ( (histogram.total() > 4*4 && histogram.total() <= 116*116 - && imageSize.width * imageSize.height >= 320*240) - || (histogram.total() > 116*116 && imageSize.width * imageSize.height >= 1280*720) ); - } - -private: - uchar* p_[two]; - uchar* mask_; - int step_[two]; - int d_[two]; - int mstep_; - int imageWidth_; - Size histSize_; - int histType_; - size_t* tab_; - tbb::mutex* histogramWriteLock_; - uchar* globalHistogram_; -}; - -class CalcHist3D_8uInvoker -{ -public: - CalcHist3D_8uInvoker( const vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, const vector& tab ) - : mask_(_ptrs[dims]), - mstep_(_deltas[dims*2 + 1]), - histogramSize_(hist.size.p), histogramType_(hist.type()), - imageWidth_(imsize.width), - tab_((size_t*)&tab[0]), - globalHistogram_(hist.data) - { - p_[0] = (uchar*)(&_ptrs[0])[0]; p_[1] = (uchar*)(&_ptrs[0])[1]; p_[2] = (uchar*)(&_ptrs[0])[2]; - step_[0] = (&_deltas[0])[1]; step_[1] = (&_deltas[0])[3]; step_[2] = (&_deltas[0])[5]; - d_[0] = (&_deltas[0])[0]; d_[1] = (&_deltas[0])[2]; d_[2] = (&_deltas[0])[4]; - } - - void operator()( const BlockedRange& range ) const - { - uchar* p0 = p_[0] + range.begin()*(step_[0] + imageWidth_*d_[0]); - uchar* p1 = p_[1] + range.begin()*(step_[1] + imageWidth_*d_[1]); - uchar* p2 = p_[2] + range.begin()*(step_[2] + imageWidth_*d_[2]); - uchar* mask = mask_ + range.begin()*mstep_; - - for(int i = range.begin(); i < range.end(); i++, p0 += step_[0], p1 += step_[1], p2 += step_[2] ) - { - if( !mask_ ) - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1], p2 += d_[2] ) - { - size_t idx = tab_[*p0] + tab_[*p1 + 256] + tab_[*p2 + 512]; - if( idx < OUT_OF_RANGE ) - { - ( *(tbb::atomic*)(globalHistogram_ + idx) ).fetch_and_add(1); - } - } - } - else - { - for( int x = 0; x < imageWidth_; x++, p0 += d_[0], p1 += d_[1], p2 += d_[2] ) - { - size_t idx; - if( mask[x] && (idx = tab_[*p0] + tab_[*p1 + 256] + tab_[*p2 + 512]) < OUT_OF_RANGE ) - { - (*(tbb::atomic*)(globalHistogram_ + idx)).fetch_and_add(1); - } - } - mask += mstep_; - } - } - } - - static bool isFit( const Mat& histogram, const Size imageSize ) - { - return ( histogram.total() >= 128*128*128 - && imageSize.width * imageSize.width >= 320*240 ); - } - -private: - uchar* p_[three]; - uchar* mask_; - int mstep_; - int step_[three]; - int d_[three]; - int* histogramSize_; - int histogramType_; - int imageWidth_; - size_t* tab_; - uchar* globalHistogram_; -}; - -static void -callCalcHist2D_8u( vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, vector& _tab ) -{ - int grainSize = imsize.height / tbb::task_scheduler_init::default_num_threads(); - tbb::mutex histogramWriteLock; - - CalcHist2D_8uInvoker body(_ptrs, _deltas, imsize, hist, dims, _tab, &histogramWriteLock); - parallel_for(BlockedRange(0, imsize.height, grainSize), body); -} - -static void -callCalcHist3D_8u( vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, vector& _tab ) -{ - CalcHist3D_8uInvoker body(_ptrs, _deltas, imsize, hist, dims, _tab); - parallel_for(BlockedRange(0, imsize.height), body); -} -#endif - -template static void -calcHist_( vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, const float** _ranges, - const double* _uniranges, bool uniform ) -{ - T** ptrs = (T**)&_ptrs[0]; - const int* deltas = &_deltas[0]; - uchar* H = hist.data; - int i, x; - const uchar* mask = _ptrs[dims]; - int mstep = _deltas[dims*2 + 1]; - int size[CV_MAX_DIM]; - size_t hstep[CV_MAX_DIM]; - - for( i = 0; i < dims; i++ ) - { - size[i] = hist.size[i]; - hstep[i] = hist.step[i]; - } - - if( uniform ) - { - const double* uniranges = &_uniranges[0]; - - if( dims == 1 ) - { -#ifdef HAVE_TBB - calcHist1D_Invoker body(_ptrs, _deltas, hist, _uniranges, size[0], dims, imsize); - parallel_for(BlockedRange(0, imsize.height), body); -#else - double a = uniranges[0], b = uniranges[1]; - int sz = size[0], d0 = deltas[0], step0 = deltas[1]; - const T* p0 = (const T*)ptrs[0]; - - for( ; imsize.height--; p0 += step0, mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++, p0 += d0 ) - { - int idx = cvFloor(*p0*a + b); - if( (unsigned)idx < (unsigned)sz ) - ((int*)H)[idx]++; - } - else - for( x = 0; x < imsize.width; x++, p0 += d0 ) - if( mask[x] ) - { - int idx = cvFloor(*p0*a + b); - if( (unsigned)idx < (unsigned)sz ) - ((int*)H)[idx]++; - } - } -#endif //HAVE_TBB - return; - } - else if( dims == 2 ) - { -#ifdef HAVE_TBB - calcHist2D_Invoker body(_ptrs, _deltas, hist, _uniranges, size, dims, imsize, hstep); - parallel_for(BlockedRange(0, imsize.height), body); -#else - double a0 = uniranges[0], b0 = uniranges[1], a1 = uniranges[2], b1 = uniranges[3]; - int sz0 = size[0], sz1 = size[1]; - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3]; - size_t hstep0 = hstep[0]; - const T* p0 = (const T*)ptrs[0]; - const T* p1 = (const T*)ptrs[1]; - - for( ; imsize.height--; p0 += step0, p1 += step1, mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - if( (unsigned)idx0 < (unsigned)sz0 && (unsigned)idx1 < (unsigned)sz1 ) - ((int*)(H + hstep0*idx0))[idx1]++; - } - else - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - if( mask[x] ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - if( (unsigned)idx0 < (unsigned)sz0 && (unsigned)idx1 < (unsigned)sz1 ) - ((int*)(H + hstep0*idx0))[idx1]++; - } - } -#endif //HAVE_TBB - return; - } - else if( dims == 3 ) - { -#ifdef HAVE_TBB - if( calcHist3D_Invoker::isFit(hist, imsize) ) - { - calcHist3D_Invoker body(_ptrs, _deltas, imsize, hist, uniranges, dims, hstep, size); - parallel_for(BlockedRange(0, imsize.height), body); - return; - } -#endif - double a0 = uniranges[0], b0 = uniranges[1], - a1 = uniranges[2], b1 = uniranges[3], - a2 = uniranges[4], b2 = uniranges[5]; - int sz0 = size[0], sz1 = size[1], sz2 = size[2]; - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3], - d2 = deltas[4], step2 = deltas[5]; - size_t hstep0 = hstep[0], hstep1 = hstep[1]; - const T* p0 = (const T*)ptrs[0]; - const T* p1 = (const T*)ptrs[1]; - const T* p2 = (const T*)ptrs[2]; - - for( ; imsize.height--; p0 += step0, p1 += step1, p2 += step2, mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - int idx2 = cvFloor(*p2*a2 + b2); - if( (unsigned)idx0 < (unsigned)sz0 && - (unsigned)idx1 < (unsigned)sz1 && - (unsigned)idx2 < (unsigned)sz2 ) - ((int*)(H + hstep0*idx0 + hstep1*idx1))[idx2]++; - } - else - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - if( mask[x] ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - int idx2 = cvFloor(*p2*a2 + b2); - if( (unsigned)idx0 < (unsigned)sz0 && - (unsigned)idx1 < (unsigned)sz1 && - (unsigned)idx2 < (unsigned)sz2 ) - ((int*)(H + hstep0*idx0 + hstep1*idx1))[idx2]++; - } - } - } - else - { - for( ; imsize.height--; mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - for( i = 0; i < dims; i++ ) - { - int idx = cvFloor(*ptrs[i]*uniranges[i*2] + uniranges[i*2+1]); - if( (unsigned)idx >= (unsigned)size[i] ) - break; - ptrs[i] += deltas[i*2]; - Hptr += idx*hstep[i]; - } - - if( i == dims ) - ++*((int*)Hptr); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - else - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - i = 0; - if( mask[x] ) - for( ; i < dims; i++ ) - { - int idx = cvFloor(*ptrs[i]*uniranges[i*2] + uniranges[i*2+1]); - if( (unsigned)idx >= (unsigned)size[i] ) - break; - ptrs[i] += deltas[i*2]; - Hptr += idx*hstep[i]; - } - - if( i == dims ) - ++*((int*)Hptr); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } - } - else - { - // non-uniform histogram - const float* ranges[CV_MAX_DIM]; - for( i = 0; i < dims; i++ ) - ranges[i] = &_ranges[i][0]; - - for( ; imsize.height--; mask += mstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - i = 0; - - if( !mask || mask[x] ) - for( ; i < dims; i++ ) - { - float v = (float)*ptrs[i]; - const float* R = ranges[i]; - int idx = -1, sz = size[i]; - - while( v >= R[idx+1] && ++idx < sz ) - ; // nop - - if( (unsigned)idx >= (unsigned)sz ) - break; - - ptrs[i] += deltas[i*2]; - Hptr += idx*hstep[i]; - } - - if( i == dims ) - ++*((int*)Hptr); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - - -static void -calcHist_8u( vector& _ptrs, const vector& _deltas, - Size imsize, Mat& hist, int dims, const float** _ranges, - const double* _uniranges, bool uniform ) -{ - uchar** ptrs = &_ptrs[0]; - const int* deltas = &_deltas[0]; - uchar* H = hist.data; - int x; - const uchar* mask = _ptrs[dims]; - int mstep = _deltas[dims*2 + 1]; - vector _tab; - - calcHistLookupTables_8u( hist, SparseMat(), dims, _ranges, _uniranges, uniform, false, _tab ); - const size_t* tab = &_tab[0]; - - if( dims == 1 ) - { -#ifdef HAVE_TBB - if( CalcHist1D_8uInvoker::isFit(hist, imsize) ) - { - int treadsNumber = tbb::task_scheduler_init::default_num_threads(); - int grainSize = imsize.height/treadsNumber; - tbb::mutex histogramWriteLock; - - CalcHist1D_8uInvoker body(_ptrs, _deltas, imsize, hist, dims, _tab, &histogramWriteLock); - parallel_for(BlockedRange(0, imsize.height, grainSize), body); - return; - } -#endif - int d0 = deltas[0], step0 = deltas[1]; - int matH[256] = { 0, }; - const uchar* p0 = (const uchar*)ptrs[0]; - - for( ; imsize.height--; p0 += step0, mask += mstep ) - { - if( !mask ) - { - if( d0 == 1 ) - { - for( x = 0; x <= imsize.width - 4; x += 4 ) - { - int t0 = p0[x], t1 = p0[x+1]; - matH[t0]++; matH[t1]++; - t0 = p0[x+2]; t1 = p0[x+3]; - matH[t0]++; matH[t1]++; - } - p0 += x; - } - else - for( x = 0; x <= imsize.width - 4; x += 4 ) - { - int t0 = p0[0], t1 = p0[d0]; - matH[t0]++; matH[t1]++; - p0 += d0*2; - t0 = p0[0]; t1 = p0[d0]; - matH[t0]++; matH[t1]++; - p0 += d0*2; - } - - for( ; x < imsize.width; x++, p0 += d0 ) - matH[*p0]++; - } - else - for( x = 0; x < imsize.width; x++, p0 += d0 ) - if( mask[x] ) - matH[*p0]++; - } - - for(int i = 0; i < 256; i++ ) - { - size_t hidx = tab[i]; - if( hidx < OUT_OF_RANGE ) - *(int*)(H + hidx) += matH[i]; - } - } - else if( dims == 2 ) - { -#ifdef HAVE_TBB - if( CalcHist2D_8uInvoker::isFit(hist, imsize) ) - { - callCalcHist2D_8u(_ptrs, _deltas, imsize, hist, dims, _tab); - return; - } -#endif - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3]; - const uchar* p0 = (const uchar*)ptrs[0]; - const uchar* p1 = (const uchar*)ptrs[1]; - - for( ; imsize.height--; p0 += step0, p1 += step1, mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - { - size_t idx = tab[*p0] + tab[*p1 + 256]; - if( idx < OUT_OF_RANGE ) - ++*(int*)(H + idx); - } - else - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - { - size_t idx; - if( mask[x] && (idx = tab[*p0] + tab[*p1 + 256]) < OUT_OF_RANGE ) - ++*(int*)(H + idx); - } - } - } - else if( dims == 3 ) - { -#ifdef HAVE_TBB - if( CalcHist3D_8uInvoker::isFit(hist, imsize) ) - { - callCalcHist3D_8u(_ptrs, _deltas, imsize, hist, dims, _tab); - return; - } -#endif - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3], - d2 = deltas[4], step2 = deltas[5]; - - const uchar* p0 = (const uchar*)ptrs[0]; - const uchar* p1 = (const uchar*)ptrs[1]; - const uchar* p2 = (const uchar*)ptrs[2]; - - for( ; imsize.height--; p0 += step0, p1 += step1, p2 += step2, mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - { - size_t idx = tab[*p0] + tab[*p1 + 256] + tab[*p2 + 512]; - if( idx < OUT_OF_RANGE ) - ++*(int*)(H + idx); - } - else - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - { - size_t idx; - if( mask[x] && (idx = tab[*p0] + tab[*p1 + 256] + tab[*p2 + 512]) < OUT_OF_RANGE ) - ++*(int*)(H + idx); - } - } - } - else - { - for( ; imsize.height--; mask += mstep ) - { - if( !mask ) - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - int i = 0; - for( ; i < dims; i++ ) - { - size_t idx = tab[*ptrs[i] + i*256]; - if( idx >= OUT_OF_RANGE ) - break; - Hptr += idx; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - ++*((int*)Hptr); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - else - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - int i = 0; - if( mask[x] ) - for( ; i < dims; i++ ) - { - size_t idx = tab[*ptrs[i] + i*256]; - if( idx >= OUT_OF_RANGE ) - break; - Hptr += idx; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - ++*((int*)Hptr); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - for(int i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - -} - -void cv::calcHist( const Mat* images, int nimages, const int* channels, - InputArray _mask, OutputArray _hist, int dims, const int* histSize, - const float** ranges, bool uniform, bool accumulate ) -{ - Mat mask = _mask.getMat(); - - CV_Assert(dims > 0 && histSize); - - uchar* histdata = _hist.getMat().data; - _hist.create(dims, histSize, CV_32F); - Mat hist = _hist.getMat(), ihist = hist; - ihist.flags = (ihist.flags & ~CV_MAT_TYPE_MASK)|CV_32S; - - if( !accumulate || histdata != hist.data ) - hist = Scalar(0.); - else - hist.convertTo(ihist, CV_32S); - - vector ptrs; - vector deltas; - vector uniranges; - Size imsize; - - CV_Assert( !mask.data || mask.type() == CV_8UC1 ); - histPrepareImages( images, nimages, channels, mask, dims, hist.size, ranges, - uniform, ptrs, deltas, imsize, uniranges ); - const double* _uniranges = uniform ? &uniranges[0] : 0; - - int depth = images[0].depth(); - - if( depth == CV_8U ) - calcHist_8u(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform ); - else if( depth == CV_16U ) - calcHist_(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform ); - else if( depth == CV_32F ) - calcHist_(ptrs, deltas, imsize, ihist, dims, ranges, _uniranges, uniform ); - else - CV_Error(CV_StsUnsupportedFormat, ""); - - ihist.convertTo(hist, CV_32F); -} - - -namespace cv -{ - -template static void -calcSparseHist_( vector& _ptrs, const vector& _deltas, - Size imsize, SparseMat& hist, int dims, const float** _ranges, - const double* _uniranges, bool uniform ) -{ - T** ptrs = (T**)&_ptrs[0]; - const int* deltas = &_deltas[0]; - int i, x; - const uchar* mask = _ptrs[dims]; - int mstep = _deltas[dims*2 + 1]; - const int* size = hist.hdr->size; - int idx[CV_MAX_DIM]; - - if( uniform ) - { - const double* uniranges = &_uniranges[0]; - - for( ; imsize.height--; mask += mstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - i = 0; - if( !mask || mask[x] ) - for( ; i < dims; i++ ) - { - idx[i] = cvFloor(*ptrs[i]*uniranges[i*2] + uniranges[i*2+1]); - if( (unsigned)idx[i] >= (unsigned)size[i] ) - break; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - ++*(int*)hist.ptr(idx, true); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } - else - { - // non-uniform histogram - const float* ranges[CV_MAX_DIM]; - for( i = 0; i < dims; i++ ) - ranges[i] = &_ranges[i][0]; - - for( ; imsize.height--; mask += mstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - i = 0; - - if( !mask || mask[x] ) - for( ; i < dims; i++ ) - { - float v = (float)*ptrs[i]; - const float* R = ranges[i]; - int j = -1, sz = size[i]; - - while( v >= R[j+1] && ++j < sz ) - ; // nop - - if( (unsigned)j >= (unsigned)sz ) - break; - ptrs[i] += deltas[i*2]; - idx[i] = j; - } - - if( i == dims ) - ++*(int*)hist.ptr(idx, true); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - - -static void -calcSparseHist_8u( vector& _ptrs, const vector& _deltas, - Size imsize, SparseMat& hist, int dims, const float** _ranges, - const double* _uniranges, bool uniform ) -{ - uchar** ptrs = (uchar**)&_ptrs[0]; - const int* deltas = &_deltas[0]; - int x; - const uchar* mask = _ptrs[dims]; - int mstep = _deltas[dims*2 + 1]; - int idx[CV_MAX_DIM]; - vector _tab; - - calcHistLookupTables_8u( Mat(), hist, dims, _ranges, _uniranges, uniform, true, _tab ); - const size_t* tab = &_tab[0]; - - for( ; imsize.height--; mask += mstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - int i = 0; - if( !mask || mask[x] ) - for( ; i < dims; i++ ) - { - size_t hidx = tab[*ptrs[i] + i*256]; - if( hidx >= OUT_OF_RANGE ) - break; - ptrs[i] += deltas[i*2]; - idx[i] = (int)hidx; - } - - if( i == dims ) - ++*(int*)hist.ptr(idx,true); - else - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - for(int i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } -} - - -static void calcHist( const Mat* images, int nimages, const int* channels, - const Mat& mask, SparseMat& hist, int dims, const int* histSize, - const float** ranges, bool uniform, bool accumulate, bool keepInt ) -{ - size_t i, N; - - if( !accumulate ) - hist.create(dims, histSize, CV_32F); - else - { - SparseMatIterator it = hist.begin(); - for( i = 0, N = hist.nzcount(); i < N; i++, ++it ) - { - Cv32suf* val = (Cv32suf*)it.ptr; - val->i = cvRound(val->f); - } - } - - vector ptrs; - vector deltas; - vector uniranges; - Size imsize; - - CV_Assert( !mask.data || mask.type() == CV_8UC1 ); - histPrepareImages( images, nimages, channels, mask, dims, hist.hdr->size, ranges, - uniform, ptrs, deltas, imsize, uniranges ); - const double* _uniranges = uniform ? &uniranges[0] : 0; - - int depth = images[0].depth(); - if( depth == CV_8U ) - calcSparseHist_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); - else if( depth == CV_16U ) - calcSparseHist_(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); - else if( depth == CV_32F ) - calcSparseHist_(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, uniform ); - else - CV_Error(CV_StsUnsupportedFormat, ""); - - if( !keepInt ) - { - SparseMatIterator it = hist.begin(); - for( i = 0, N = hist.nzcount(); i < N; i++, ++it ) - { - Cv32suf* val = (Cv32suf*)it.ptr; - val->f = (float)val->i; - } - } -} - -} - -void cv::calcHist( const Mat* images, int nimages, const int* channels, - InputArray _mask, SparseMat& hist, int dims, const int* histSize, - const float** ranges, bool uniform, bool accumulate ) -{ - Mat mask = _mask.getMat(); - calcHist( images, nimages, channels, mask, hist, dims, histSize, - ranges, uniform, accumulate, false ); -} - - -void cv::calcHist( InputArrayOfArrays images, const vector& channels, - InputArray mask, OutputArray hist, - const vector& histSize, - const vector& ranges, - bool accumulate ) -{ - int i, dims = (int)histSize.size(), rsz = (int)ranges.size(), csz = (int)channels.size(); - int nimages = (int)images.total(); - - CV_Assert(nimages > 0 && dims > 0); - CV_Assert(rsz == dims*2 || (rsz == 0 && images.depth(0) == CV_8U)); - CV_Assert(csz == 0 || csz == dims); - float* _ranges[CV_MAX_DIM]; - if( rsz > 0 ) - { - for( i = 0; i < rsz/2; i++ ) - _ranges[i] = (float*)&ranges[i*2]; - } - - AutoBuffer buf(nimages); - for( i = 0; i < nimages; i++ ) - buf[i] = images.getMat(i); - - calcHist(&buf[0], nimages, csz ? &channels[0] : 0, - mask, hist, dims, &histSize[0], rsz ? (const float**)_ranges : 0, - true, accumulate); -} - - -/////////////////////////////////////// B A C K P R O J E C T //////////////////////////////////// - -namespace cv -{ - -template static void -calcBackProj_( vector& _ptrs, const vector& _deltas, - Size imsize, const Mat& hist, int dims, const float** _ranges, - const double* _uniranges, float scale, bool uniform ) -{ - T** ptrs = (T**)&_ptrs[0]; - const int* deltas = &_deltas[0]; - uchar* H = hist.data; - int i, x; - BT* bproj = (BT*)_ptrs[dims]; - int bpstep = _deltas[dims*2 + 1]; - int size[CV_MAX_DIM]; - size_t hstep[CV_MAX_DIM]; - - for( i = 0; i < dims; i++ ) - { - size[i] = hist.size[i]; - hstep[i] = hist.step[i]; - } - - if( uniform ) - { - const double* uniranges = &_uniranges[0]; - - if( dims == 1 ) - { - double a = uniranges[0], b = uniranges[1]; - int sz = size[0], d0 = deltas[0], step0 = deltas[1]; - const T* p0 = (const T*)ptrs[0]; - - for( ; imsize.height--; p0 += step0, bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++, p0 += d0 ) - { - int idx = cvFloor(*p0*a + b); - bproj[x] = (unsigned)idx < (unsigned)sz ? saturate_cast(((float*)H)[idx]*scale) : 0; - } - } - } - else if( dims == 2 ) - { - double a0 = uniranges[0], b0 = uniranges[1], - a1 = uniranges[2], b1 = uniranges[3]; - int sz0 = size[0], sz1 = size[1]; - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3]; - size_t hstep0 = hstep[0]; - const T* p0 = (const T*)ptrs[0]; - const T* p1 = (const T*)ptrs[1]; - - for( ; imsize.height--; p0 += step0, p1 += step1, bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - bproj[x] = (unsigned)idx0 < (unsigned)sz0 && - (unsigned)idx1 < (unsigned)sz1 ? - saturate_cast(((float*)(H + hstep0*idx0))[idx1]*scale) : 0; - } - } - } - else if( dims == 3 ) - { - double a0 = uniranges[0], b0 = uniranges[1], - a1 = uniranges[2], b1 = uniranges[3], - a2 = uniranges[4], b2 = uniranges[5]; - int sz0 = size[0], sz1 = size[1], sz2 = size[2]; - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3], - d2 = deltas[4], step2 = deltas[5]; - size_t hstep0 = hstep[0], hstep1 = hstep[1]; - const T* p0 = (const T*)ptrs[0]; - const T* p1 = (const T*)ptrs[1]; - const T* p2 = (const T*)ptrs[2]; - - for( ; imsize.height--; p0 += step0, p1 += step1, p2 += step2, bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - { - int idx0 = cvFloor(*p0*a0 + b0); - int idx1 = cvFloor(*p1*a1 + b1); - int idx2 = cvFloor(*p2*a2 + b2); - bproj[x] = (unsigned)idx0 < (unsigned)sz0 && - (unsigned)idx1 < (unsigned)sz1 && - (unsigned)idx2 < (unsigned)sz2 ? - saturate_cast(((float*)(H + hstep0*idx0 + hstep1*idx1))[idx2]*scale) : 0; - } - } - } - else - { - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - for( i = 0; i < dims; i++ ) - { - int idx = cvFloor(*ptrs[i]*uniranges[i*2] + uniranges[i*2+1]); - if( (unsigned)idx >= (unsigned)size[i] || (_ranges && *ptrs[i] >= _ranges[i][1])) - break; - ptrs[i] += deltas[i*2]; - Hptr += idx*hstep[i]; - } - - if( i == dims ) - bproj[x] = saturate_cast(*(float*)Hptr*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } - } - else - { - // non-uniform histogram - const float* ranges[CV_MAX_DIM]; - for( i = 0; i < dims; i++ ) - ranges[i] = &_ranges[i][0]; - - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - for( i = 0; i < dims; i++ ) - { - float v = (float)*ptrs[i]; - const float* R = ranges[i]; - int idx = -1, sz = size[i]; - - while( v >= R[idx+1] && ++idx < sz ) - ; // nop - - if( (unsigned)idx >= (unsigned)sz ) - break; - - ptrs[i] += deltas[i*2]; - Hptr += idx*hstep[i]; - } - - if( i == dims ) - bproj[x] = saturate_cast(*(float*)Hptr*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - - -static void -calcBackProj_8u( vector& _ptrs, const vector& _deltas, - Size imsize, const Mat& hist, int dims, const float** _ranges, - const double* _uniranges, float scale, bool uniform ) -{ - uchar** ptrs = &_ptrs[0]; - const int* deltas = &_deltas[0]; - uchar* H = hist.data; - int i, x; - uchar* bproj = _ptrs[dims]; - int bpstep = _deltas[dims*2 + 1]; - vector _tab; - - calcHistLookupTables_8u( hist, SparseMat(), dims, _ranges, _uniranges, uniform, false, _tab ); - const size_t* tab = &_tab[0]; - - if( dims == 1 ) - { - int d0 = deltas[0], step0 = deltas[1]; - uchar matH[256] = {0}; - const uchar* p0 = (const uchar*)ptrs[0]; - - for( i = 0; i < 256; i++ ) - { - size_t hidx = tab[i]; - if( hidx < OUT_OF_RANGE ) - matH[i] = saturate_cast(*(float*)(H + hidx)*scale); - } - - for( ; imsize.height--; p0 += step0, bproj += bpstep ) - { - if( d0 == 1 ) - { - for( x = 0; x <= imsize.width - 4; x += 4 ) - { - uchar t0 = matH[p0[x]], t1 = matH[p0[x+1]]; - bproj[x] = t0; bproj[x+1] = t1; - t0 = matH[p0[x+2]]; t1 = matH[p0[x+3]]; - bproj[x+2] = t0; bproj[x+3] = t1; - } - p0 += x; - } - else - for( x = 0; x <= imsize.width - 4; x += 4 ) - { - uchar t0 = matH[p0[0]], t1 = matH[p0[d0]]; - bproj[x] = t0; bproj[x+1] = t1; - p0 += d0*2; - t0 = matH[p0[0]]; t1 = matH[p0[d0]]; - bproj[x+2] = t0; bproj[x+3] = t1; - p0 += d0*2; - } - - for( ; x < imsize.width; x++, p0 += d0 ) - bproj[x] = matH[*p0]; - } - } - else if( dims == 2 ) - { - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3]; - const uchar* p0 = (const uchar*)ptrs[0]; - const uchar* p1 = (const uchar*)ptrs[1]; - - for( ; imsize.height--; p0 += step0, p1 += step1, bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1 ) - { - size_t idx = tab[*p0] + tab[*p1 + 256]; - bproj[x] = idx < OUT_OF_RANGE ? saturate_cast(*(float*)(H + idx)*scale) : 0; - } - } - } - else if( dims == 3 ) - { - int d0 = deltas[0], step0 = deltas[1], - d1 = deltas[2], step1 = deltas[3], - d2 = deltas[4], step2 = deltas[5]; - const uchar* p0 = (const uchar*)ptrs[0]; - const uchar* p1 = (const uchar*)ptrs[1]; - const uchar* p2 = (const uchar*)ptrs[2]; - - for( ; imsize.height--; p0 += step0, p1 += step1, p2 += step2, bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++, p0 += d0, p1 += d1, p2 += d2 ) - { - size_t idx = tab[*p0] + tab[*p1 + 256] + tab[*p2 + 512]; - bproj[x] = idx < OUT_OF_RANGE ? saturate_cast(*(float*)(H + idx)*scale) : 0; - } - } - } - else - { - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - uchar* Hptr = H; - for( i = 0; i < dims; i++ ) - { - size_t idx = tab[*ptrs[i] + i*256]; - if( idx >= OUT_OF_RANGE ) - break; - ptrs[i] += deltas[i*2]; - Hptr += idx; - } - - if( i == dims ) - bproj[x] = saturate_cast(*(float*)Hptr*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - -} - -void cv::calcBackProject( const Mat* images, int nimages, const int* channels, - InputArray _hist, OutputArray _backProject, - const float** ranges, double scale, bool uniform ) -{ - Mat hist = _hist.getMat(); - vector ptrs; - vector deltas; - vector uniranges; - Size imsize; - int dims = hist.dims == 2 && hist.size[1] == 1 ? 1 : hist.dims; - - CV_Assert( dims > 0 && hist.data ); - _backProject.create( images[0].size(), images[0].depth() ); - Mat backProject = _backProject.getMat(); - histPrepareImages( images, nimages, channels, backProject, dims, hist.size, ranges, - uniform, ptrs, deltas, imsize, uniranges ); - const double* _uniranges = uniform ? &uniranges[0] : 0; - - int depth = images[0].depth(); - if( depth == CV_8U ) - calcBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform); - else if( depth == CV_16U ) - calcBackProj_(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform ); - else if( depth == CV_32F ) - calcBackProj_(ptrs, deltas, imsize, hist, dims, ranges, _uniranges, (float)scale, uniform ); - else - CV_Error(CV_StsUnsupportedFormat, ""); -} - - -namespace cv -{ - -template static void -calcSparseBackProj_( vector& _ptrs, const vector& _deltas, - Size imsize, const SparseMat& hist, int dims, const float** _ranges, - const double* _uniranges, float scale, bool uniform ) -{ - T** ptrs = (T**)&_ptrs[0]; - const int* deltas = &_deltas[0]; - int i, x; - BT* bproj = (BT*)_ptrs[dims]; - int bpstep = _deltas[dims*2 + 1]; - const int* size = hist.hdr->size; - int idx[CV_MAX_DIM]; - const SparseMat_& hist_ = (const SparseMat_&)hist; - - if( uniform ) - { - const double* uniranges = &_uniranges[0]; - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - for( i = 0; i < dims; i++ ) - { - idx[i] = cvFloor(*ptrs[i]*uniranges[i*2] + uniranges[i*2+1]); - if( (unsigned)idx[i] >= (unsigned)size[i] ) - break; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - bproj[x] = saturate_cast(hist_(idx)*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } - else - { - // non-uniform histogram - const float* ranges[CV_MAX_DIM]; - for( i = 0; i < dims; i++ ) - ranges[i] = &_ranges[i][0]; - - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - for( i = 0; i < dims; i++ ) - { - float v = (float)*ptrs[i]; - const float* R = ranges[i]; - int j = -1, sz = size[i]; - - while( v >= R[j+1] && ++j < sz ) - ; // nop - - if( (unsigned)j >= (unsigned)sz ) - break; - idx[i] = j; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - bproj[x] = saturate_cast(hist_(idx)*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } - } -} - - -static void -calcSparseBackProj_8u( vector& _ptrs, const vector& _deltas, - Size imsize, const SparseMat& hist, int dims, const float** _ranges, - const double* _uniranges, float scale, bool uniform ) -{ - uchar** ptrs = &_ptrs[0]; - const int* deltas = &_deltas[0]; - int i, x; - uchar* bproj = _ptrs[dims]; - int bpstep = _deltas[dims*2 + 1]; - vector _tab; - int idx[CV_MAX_DIM]; - - calcHistLookupTables_8u( Mat(), hist, dims, _ranges, _uniranges, uniform, true, _tab ); - const size_t* tab = &_tab[0]; - - for( ; imsize.height--; bproj += bpstep ) - { - for( x = 0; x < imsize.width; x++ ) - { - for( i = 0; i < dims; i++ ) - { - size_t hidx = tab[*ptrs[i] + i*256]; - if( hidx >= OUT_OF_RANGE ) - break; - idx[i] = (int)hidx; - ptrs[i] += deltas[i*2]; - } - - if( i == dims ) - bproj[x] = saturate_cast(hist.value(idx)*scale); - else - { - bproj[x] = 0; - for( ; i < dims; i++ ) - ptrs[i] += deltas[i*2]; - } - } - for( i = 0; i < dims; i++ ) - ptrs[i] += deltas[i*2 + 1]; - } -} - -} - -void cv::calcBackProject( const Mat* images, int nimages, const int* channels, - const SparseMat& hist, OutputArray _backProject, - const float** ranges, double scale, bool uniform ) -{ - vector ptrs; - vector deltas; - vector uniranges; - Size imsize; - int dims = hist.dims(); - - CV_Assert( dims > 0 ); - _backProject.create( images[0].size(), images[0].depth() ); - Mat backProject = _backProject.getMat(); - histPrepareImages( images, nimages, channels, backProject, - dims, hist.hdr->size, ranges, - uniform, ptrs, deltas, imsize, uniranges ); - const double* _uniranges = uniform ? &uniranges[0] : 0; - - int depth = images[0].depth(); - if( depth == CV_8U ) - calcSparseBackProj_8u(ptrs, deltas, imsize, hist, dims, ranges, - _uniranges, (float)scale, uniform); - else if( depth == CV_16U ) - calcSparseBackProj_(ptrs, deltas, imsize, hist, dims, ranges, - _uniranges, (float)scale, uniform ); - else if( depth == CV_32F ) - calcSparseBackProj_(ptrs, deltas, imsize, hist, dims, ranges, - _uniranges, (float)scale, uniform ); - else - CV_Error(CV_StsUnsupportedFormat, ""); -} - - -void cv::calcBackProject( InputArrayOfArrays images, const vector& channels, - InputArray hist, OutputArray dst, - const vector& ranges, - double scale ) -{ - Mat H0 = hist.getMat(), H; - int hcn = H0.channels(); - if( hcn > 1 ) - { - CV_Assert( H0.isContinuous() ); - int hsz[CV_CN_MAX+1]; - memcpy(hsz, &H0.size[0], H0.dims*sizeof(hsz[0])); - hsz[H0.dims] = hcn; - H = Mat(H0.dims+1, hsz, H0.depth(), H0.data); - } - else - H = H0; - bool _1d = H.rows == 1 || H.cols == 1; - int i, dims = H.dims, rsz = (int)ranges.size(), csz = (int)channels.size(); - int nimages = (int)images.total(); - CV_Assert(nimages > 0); - CV_Assert(rsz == dims*2 || (rsz == 2 && _1d) || (rsz == 0 && images.depth(0) == CV_8U)); - CV_Assert(csz == 0 || csz == dims || (csz == 1 && _1d)); - float* _ranges[CV_MAX_DIM]; - if( rsz > 0 ) - { - for( i = 0; i < rsz/2; i++ ) - _ranges[i] = (float*)&ranges[i*2]; - } - - AutoBuffer buf(nimages); - for( i = 0; i < nimages; i++ ) - buf[i] = images.getMat(i); - - calcBackProject(&buf[0], nimages, csz ? &channels[0] : 0, - hist, dst, rsz ? (const float**)_ranges : 0, scale, true); -} - - -////////////////// C O M P A R E H I S T O G R A M S //////////////////////// - -double cv::compareHist( InputArray _H1, InputArray _H2, int method ) -{ - Mat H1 = _H1.getMat(), H2 = _H2.getMat(); - const Mat* arrays[] = {&H1, &H2, 0}; - Mat planes[2]; - NAryMatIterator it(arrays, planes); - double result = 0; - int j, len = (int)it.size; - - CV_Assert( H1.type() == H2.type() && H1.type() == CV_32F ); - - double s1 = 0, s2 = 0, s11 = 0, s12 = 0, s22 = 0; - - CV_Assert( it.planes[0].isContinuous() && it.planes[1].isContinuous() ); - - for( size_t i = 0; i < it.nplanes; i++, ++it ) - { - const float* h1 = (const float*)it.planes[0].data; - const float* h2 = (const float*)it.planes[1].data; - len = it.planes[0].rows*it.planes[0].cols; - - if( method == CV_COMP_CHISQR ) - { - for( j = 0; j < len; j++ ) - { - double a = h1[j] - h2[j]; - double b = h1[j]; - if( fabs(b) > DBL_EPSILON ) - result += a*a/b; - } - } - else if( method == CV_COMP_CORREL ) - { - for( j = 0; j < len; j++ ) - { - double a = h1[j]; - double b = h2[j]; - - s12 += a*b; - s1 += a; - s11 += a*a; - s2 += b; - s22 += b*b; - } - } - else if( method == CV_COMP_INTERSECT ) - { - for( j = 0; j < len; j++ ) - result += std::min(h1[j], h2[j]); - } - else if( method == CV_COMP_BHATTACHARYYA ) - { - for( j = 0; j < len; j++ ) - { - double a = h1[j]; - double b = h2[j]; - result += std::sqrt(a*b); - s1 += a; - s2 += b; - } - } - else - CV_Error( CV_StsBadArg, "Unknown comparison method" ); - } - - if( method == CV_COMP_CORREL ) - { - size_t total = H1.total(); - double scale = 1./total; - double num = s12 - s1*s2*scale; - double denom2 = (s11 - s1*s1*scale)*(s22 - s2*s2*scale); - result = std::abs(denom2) > DBL_EPSILON ? num/std::sqrt(denom2) : 1.; - } - else if( method == CV_COMP_BHATTACHARYYA ) - { - s1 *= s2; - s1 = fabs(s1) > FLT_EPSILON ? 1./std::sqrt(s1) : 1.; - result = std::sqrt(std::max(1. - result*s1, 0.)); - } - - return result; -} - - -double cv::compareHist( const SparseMat& H1, const SparseMat& H2, int method ) -{ - double result = 0; - int i, dims = H1.dims(); - - CV_Assert( dims > 0 && dims == H2.dims() && H1.type() == H2.type() && H1.type() == CV_32F ); - for( i = 0; i < dims; i++ ) - CV_Assert( H1.size(i) == H2.size(i) ); - - const SparseMat *PH1 = &H1, *PH2 = &H2; - if( PH1->nzcount() > PH2->nzcount() && method != CV_COMP_CHISQR ) - std::swap(PH1, PH2); - - SparseMatConstIterator it = PH1->begin(); - int N1 = (int)PH1->nzcount(), N2 = (int)PH2->nzcount(); - - if( method == CV_COMP_CHISQR ) - { - for( i = 0; i < N1; i++, ++it ) - { - float v1 = it.value(); - const SparseMat::Node* node = it.node(); - float v2 = PH2->value(node->idx, (size_t*)&node->hashval); - double a = v1 - v2; - double b = v1; - if( fabs(b) > DBL_EPSILON ) - result += a*a/b; - } - } - else if( method == CV_COMP_CORREL ) - { - double s1 = 0, s2 = 0, s11 = 0, s12 = 0, s22 = 0; - - for( i = 0; i < N1; i++, ++it ) - { - double v1 = it.value(); - const SparseMat::Node* node = it.node(); - s12 += v1*PH2->value(node->idx, (size_t*)&node->hashval); - s1 += v1; - s11 += v1*v1; - } - - it = PH2->begin(); - for( i = 0; i < N2; i++, ++it ) - { - double v2 = it.value(); - s2 += v2; - s22 += v2*v2; - } - - size_t total = 1; - for( i = 0; i < H1.dims(); i++ ) - total *= H1.size(i); - double scale = 1./total; - double num = s12 - s1*s2*scale; - double denom2 = (s11 - s1*s1*scale)*(s22 - s2*s2*scale); - result = std::abs(denom2) > DBL_EPSILON ? num/std::sqrt(denom2) : 1.; - } - else if( method == CV_COMP_INTERSECT ) - { - for( i = 0; i < N1; i++, ++it ) - { - float v1 = it.value(); - const SparseMat::Node* node = it.node(); - float v2 = PH2->value(node->idx, (size_t*)&node->hashval); - if( v2 ) - result += std::min(v1, v2); - } - } - else if( method == CV_COMP_BHATTACHARYYA ) - { - double s1 = 0, s2 = 0; - - for( i = 0; i < N1; i++, ++it ) - { - double v1 = it.value(); - const SparseMat::Node* node = it.node(); - double v2 = PH2->value(node->idx, (size_t*)&node->hashval); - result += std::sqrt(v1*v2); - s1 += v1; - } - - it = PH2->begin(); - for( i = 0; i < N2; i++, ++it ) - s2 += it.value(); - - s1 *= s2; - s1 = fabs(s1) > FLT_EPSILON ? 1./std::sqrt(s1) : 1.; - result = std::sqrt(std::max(1. - result*s1, 0.)); - } - else - CV_Error( CV_StsBadArg, "Unknown comparison method" ); - - return result; -} - - -const int CV_HIST_DEFAULT_TYPE = CV_32F; - -/* Creates new histogram */ -CvHistogram * -cvCreateHist( int dims, int *sizes, CvHistType type, float** ranges, int uniform ) -{ - CvHistogram *hist = 0; - - if( (unsigned)dims > CV_MAX_DIM ) - CV_Error( CV_BadOrder, "Number of dimensions is out of range" ); - - if( !sizes ) - CV_Error( CV_HeaderIsNull, "Null pointer" ); - - hist = (CvHistogram *)cvAlloc( sizeof( CvHistogram )); - hist->type = CV_HIST_MAGIC_VAL + ((int)type & 1); - if (uniform) hist->type|= CV_HIST_UNIFORM_FLAG; - hist->thresh2 = 0; - hist->bins = 0; - if( type == CV_HIST_ARRAY ) - { - hist->bins = cvInitMatNDHeader( &hist->mat, dims, sizes, - CV_HIST_DEFAULT_TYPE ); - cvCreateData( hist->bins ); - } - else if( type == CV_HIST_SPARSE ) - hist->bins = cvCreateSparseMat( dims, sizes, CV_HIST_DEFAULT_TYPE ); - else - CV_Error( CV_StsBadArg, "Invalid histogram type" ); - - if( ranges ) - cvSetHistBinRanges( hist, ranges, uniform ); - - return hist; -} - - -/* Creates histogram wrapping header for given array */ -CV_IMPL CvHistogram* -cvMakeHistHeaderForArray( int dims, int *sizes, CvHistogram *hist, - float *data, float **ranges, int uniform ) -{ - if( !hist ) - CV_Error( CV_StsNullPtr, "Null histogram header pointer" ); - - if( !data ) - CV_Error( CV_StsNullPtr, "Null data pointer" ); - - hist->thresh2 = 0; - hist->type = CV_HIST_MAGIC_VAL; - hist->bins = cvInitMatNDHeader( &hist->mat, dims, sizes, CV_HIST_DEFAULT_TYPE, data ); - - if( ranges ) - { - if( !uniform ) - CV_Error( CV_StsBadArg, "Only uniform bin ranges can be used here " - "(to avoid memory allocation)" ); - cvSetHistBinRanges( hist, ranges, uniform ); - } - - return hist; -} - - -CV_IMPL void -cvReleaseHist( CvHistogram **hist ) -{ - if( !hist ) - CV_Error( CV_StsNullPtr, "" ); - - if( *hist ) - { - CvHistogram* temp = *hist; - - if( !CV_IS_HIST(temp)) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - *hist = 0; - - if( CV_IS_SPARSE_HIST( temp )) - cvReleaseSparseMat( (CvSparseMat**)&temp->bins ); - else - { - cvReleaseData( temp->bins ); - temp->bins = 0; - } - - if( temp->thresh2 ) - cvFree( &temp->thresh2 ); - cvFree( &temp ); - } -} - -CV_IMPL void -cvClearHist( CvHistogram *hist ) -{ - if( !CV_IS_HIST(hist) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - cvZero( hist->bins ); -} - - -// Clears histogram bins that are below than threshold -CV_IMPL void -cvThreshHist( CvHistogram* hist, double thresh ) -{ - if( !CV_IS_HIST(hist) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - - if( !CV_IS_SPARSE_MAT(hist->bins) ) - { - CvMat mat; - cvGetMat( hist->bins, &mat, 0, 1 ); - cvThreshold( &mat, &mat, thresh, 0, CV_THRESH_TOZERO ); - } - else - { - CvSparseMat* mat = (CvSparseMat*)hist->bins; - CvSparseMatIterator iterator; - CvSparseNode *node; - - for( node = cvInitSparseMatIterator( mat, &iterator ); - node != 0; node = cvGetNextSparseNode( &iterator )) - { - float* val = (float*)CV_NODE_VAL( mat, node ); - if( *val <= thresh ) - *val = 0; - } - } -} - - -// Normalizes histogram (make sum of the histogram bins == factor) -CV_IMPL void -cvNormalizeHist( CvHistogram* hist, double factor ) -{ - double sum = 0; - - if( !CV_IS_HIST(hist) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - - if( !CV_IS_SPARSE_HIST(hist) ) - { - CvMat mat; - cvGetMat( hist->bins, &mat, 0, 1 ); - sum = cvSum( &mat ).val[0]; - if( fabs(sum) < DBL_EPSILON ) - sum = 1; - cvScale( &mat, &mat, factor/sum, 0 ); - } - else - { - CvSparseMat* mat = (CvSparseMat*)hist->bins; - CvSparseMatIterator iterator; - CvSparseNode *node; - float scale; - - for( node = cvInitSparseMatIterator( mat, &iterator ); - node != 0; node = cvGetNextSparseNode( &iterator )) - { - sum += *(float*)CV_NODE_VAL(mat,node); - } - - if( fabs(sum) < DBL_EPSILON ) - sum = 1; - scale = (float)(factor/sum); - - for( node = cvInitSparseMatIterator( mat, &iterator ); - node != 0; node = cvGetNextSparseNode( &iterator )) - { - *(float*)CV_NODE_VAL(mat,node) *= scale; - } - } -} - - -// Retrieves histogram global min, max and their positions -CV_IMPL void -cvGetMinMaxHistValue( const CvHistogram* hist, - float *value_min, float* value_max, - int* idx_min, int* idx_max ) -{ - double minVal, maxVal; - int dims, size[CV_MAX_DIM]; - - if( !CV_IS_HIST(hist) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - - dims = cvGetDims( hist->bins, size ); - - if( !CV_IS_SPARSE_HIST(hist) ) - { - CvMat mat; - CvPoint minPt, maxPt; - - cvGetMat( hist->bins, &mat, 0, 1 ); - cvMinMaxLoc( &mat, &minVal, &maxVal, &minPt, &maxPt ); - - if( dims == 1 ) - { - if( idx_min ) - *idx_min = minPt.y + minPt.x; - if( idx_max ) - *idx_max = maxPt.y + maxPt.x; - } - else if( dims == 2 ) - { - if( idx_min ) - idx_min[0] = minPt.y, idx_min[1] = minPt.x; - if( idx_max ) - idx_max[0] = maxPt.y, idx_max[1] = maxPt.x; - } - else if( idx_min || idx_max ) - { - int imin = minPt.y*mat.cols + minPt.x; - int imax = maxPt.y*mat.cols + maxPt.x; - - for(int i = dims - 1; i >= 0; i-- ) - { - if( idx_min ) - { - int t = imin / size[i]; - idx_min[i] = imin - t*size[i]; - imin = t; - } - - if( idx_max ) - { - int t = imax / size[i]; - idx_max[i] = imax - t*size[i]; - imax = t; - } - } - } - } - else - { - CvSparseMat* mat = (CvSparseMat*)hist->bins; - CvSparseMatIterator iterator; - CvSparseNode *node; - int minv = INT_MAX; - int maxv = INT_MIN; - CvSparseNode* minNode = 0; - CvSparseNode* maxNode = 0; - const int *_idx_min = 0, *_idx_max = 0; - Cv32suf m; - - for( node = cvInitSparseMatIterator( mat, &iterator ); - node != 0; node = cvGetNextSparseNode( &iterator )) - { - int value = *(int*)CV_NODE_VAL(mat,node); - value = CV_TOGGLE_FLT(value); - if( value < minv ) - { - minv = value; - minNode = node; - } - - if( value > maxv ) - { - maxv = value; - maxNode = node; - } - } - - if( minNode ) - { - _idx_min = CV_NODE_IDX(mat,minNode); - _idx_max = CV_NODE_IDX(mat,maxNode); - m.i = CV_TOGGLE_FLT(minv); minVal = m.f; - m.i = CV_TOGGLE_FLT(maxv); maxVal = m.f; - } - else - { - minVal = maxVal = 0; - } - - for(int i = 0; i < dims; i++ ) - { - if( idx_min ) - idx_min[i] = _idx_min ? _idx_min[i] : -1; - if( idx_max ) - idx_max[i] = _idx_max ? _idx_max[i] : -1; - } - } - - if( value_min ) - *value_min = (float)minVal; - - if( value_max ) - *value_max = (float)maxVal; -} - - -// Compares two histograms using one of a few methods -CV_IMPL double -cvCompareHist( const CvHistogram* hist1, - const CvHistogram* hist2, - int method ) -{ - int i; - int size1[CV_MAX_DIM], size2[CV_MAX_DIM], total = 1; - - if( !CV_IS_HIST(hist1) || !CV_IS_HIST(hist2) ) - CV_Error( CV_StsBadArg, "Invalid histogram header[s]" ); - - if( CV_IS_SPARSE_MAT(hist1->bins) != CV_IS_SPARSE_MAT(hist2->bins)) - CV_Error(CV_StsUnmatchedFormats, "One of histograms is sparse and other is not"); - - if( !CV_IS_SPARSE_MAT(hist1->bins) ) - { - cv::Mat H1((const CvMatND*)hist1->bins), H2((const CvMatND*)hist2->bins); - return cv::compareHist(H1, H2, method); - } - - int dims1 = cvGetDims( hist1->bins, size1 ); - int dims2 = cvGetDims( hist2->bins, size2 ); - - if( dims1 != dims2 ) - CV_Error( CV_StsUnmatchedSizes, - "The histograms have different numbers of dimensions" ); - - for( i = 0; i < dims1; i++ ) - { - if( size1[i] != size2[i] ) - CV_Error( CV_StsUnmatchedSizes, "The histograms have different sizes" ); - total *= size1[i]; - } - - double result = 0; - CvSparseMat* mat1 = (CvSparseMat*)(hist1->bins); - CvSparseMat* mat2 = (CvSparseMat*)(hist2->bins); - CvSparseMatIterator iterator; - CvSparseNode *node1, *node2; - - if( mat1->heap->active_count > mat2->heap->active_count && method != CV_COMP_CHISQR ) - { - CvSparseMat* t; - CV_SWAP( mat1, mat2, t ); - } - - if( method == CV_COMP_CHISQR ) - { - for( node1 = cvInitSparseMatIterator( mat1, &iterator ); - node1 != 0; node1 = cvGetNextSparseNode( &iterator )) - { - double v1 = *(float*)CV_NODE_VAL(mat1,node1); - uchar* node2_data = cvPtrND( mat2, CV_NODE_IDX(mat1,node1), 0, 0, &node1->hashval ); - double v2 = node2_data ? *(float*)node2_data : 0.f; - double a = v1 - v2; - double b = v1; - if( fabs(b) > DBL_EPSILON ) - result += a*a/b; - } - } - else if( method == CV_COMP_CORREL ) - { - double s1 = 0, s11 = 0; - double s2 = 0, s22 = 0; - double s12 = 0; - double num, denom2, scale = 1./total; - - for( node1 = cvInitSparseMatIterator( mat1, &iterator ); - node1 != 0; node1 = cvGetNextSparseNode( &iterator )) - { - double v1 = *(float*)CV_NODE_VAL(mat1,node1); - uchar* node2_data = cvPtrND( mat2, CV_NODE_IDX(mat1,node1), - 0, 0, &node1->hashval ); - if( node2_data ) - { - double v2 = *(float*)node2_data; - s12 += v1*v2; - } - s1 += v1; - s11 += v1*v1; - } - - for( node2 = cvInitSparseMatIterator( mat2, &iterator ); - node2 != 0; node2 = cvGetNextSparseNode( &iterator )) - { - double v2 = *(float*)CV_NODE_VAL(mat2,node2); - s2 += v2; - s22 += v2*v2; - } - - num = s12 - s1*s2*scale; - denom2 = (s11 - s1*s1*scale)*(s22 - s2*s2*scale); - result = fabs(denom2) > DBL_EPSILON ? num/sqrt(denom2) : 1; - } - else if( method == CV_COMP_INTERSECT ) - { - for( node1 = cvInitSparseMatIterator( mat1, &iterator ); - node1 != 0; node1 = cvGetNextSparseNode( &iterator )) - { - float v1 = *(float*)CV_NODE_VAL(mat1,node1); - uchar* node2_data = cvPtrND( mat2, CV_NODE_IDX(mat1,node1), - 0, 0, &node1->hashval ); - if( node2_data ) - { - float v2 = *(float*)node2_data; - if( v1 <= v2 ) - result += v1; - else - result += v2; - } - } - } - else if( method == CV_COMP_BHATTACHARYYA ) - { - double s1 = 0, s2 = 0; - - for( node1 = cvInitSparseMatIterator( mat1, &iterator ); - node1 != 0; node1 = cvGetNextSparseNode( &iterator )) - { - double v1 = *(float*)CV_NODE_VAL(mat1,node1); - uchar* node2_data = cvPtrND( mat2, CV_NODE_IDX(mat1,node1), - 0, 0, &node1->hashval ); - s1 += v1; - if( node2_data ) - { - double v2 = *(float*)node2_data; - result += sqrt(v1 * v2); - } - } - - for( node1 = cvInitSparseMatIterator( mat2, &iterator ); - node1 != 0; node1 = cvGetNextSparseNode( &iterator )) - { - double v2 = *(float*)CV_NODE_VAL(mat2,node1); - s2 += v2; - } - - s1 *= s2; - s1 = fabs(s1) > FLT_EPSILON ? 1./sqrt(s1) : 1.; - result = 1. - result*s1; - result = sqrt(MAX(result,0.)); - } - else - CV_Error( CV_StsBadArg, "Unknown comparison method" ); - - return result; -} - -// copies one histogram to another -CV_IMPL void -cvCopyHist( const CvHistogram* src, CvHistogram** _dst ) -{ - if( !_dst ) - CV_Error( CV_StsNullPtr, "Destination double pointer is NULL" ); - - CvHistogram* dst = *_dst; - - if( !CV_IS_HIST(src) || (dst && !CV_IS_HIST(dst)) ) - CV_Error( CV_StsBadArg, "Invalid histogram header[s]" ); - - bool eq = false; - int size1[CV_MAX_DIM]; - bool is_sparse = CV_IS_SPARSE_MAT(src->bins); - int dims1 = cvGetDims( src->bins, size1 ); - - if( dst && (is_sparse == CV_IS_SPARSE_MAT(dst->bins))) - { - int size2[CV_MAX_DIM]; - int dims2 = cvGetDims( dst->bins, size2 ); - - if( dims1 == dims2 ) - { - int i; - - for( i = 0; i < dims1; i++ ) - { - if( size1[i] != size2[i] ) - break; - } - - eq = (i == dims1); - } - } - - if( !eq ) - { - cvReleaseHist( _dst ); - dst = cvCreateHist( dims1, size1, !is_sparse ? CV_HIST_ARRAY : CV_HIST_SPARSE, 0, 0 ); - *_dst = dst; - } - - if( CV_HIST_HAS_RANGES( src )) - { - float* ranges[CV_MAX_DIM]; - float** thresh = 0; - - if( CV_IS_UNIFORM_HIST( src )) - { - for( int i = 0; i < dims1; i++ ) - ranges[i] = (float*)src->thresh[i]; - - thresh = ranges; - } - else - { - thresh = src->thresh2; - } - - cvSetHistBinRanges( dst, thresh, CV_IS_UNIFORM_HIST(src)); - } - - cvCopy( src->bins, dst->bins ); -} - - -// Sets a value range for every histogram bin -CV_IMPL void -cvSetHistBinRanges( CvHistogram* hist, float** ranges, int uniform ) -{ - int dims, size[CV_MAX_DIM], total = 0; - int i, j; - - if( !ranges ) - CV_Error( CV_StsNullPtr, "NULL ranges pointer" ); - - if( !CV_IS_HIST(hist) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - - dims = cvGetDims( hist->bins, size ); - for( i = 0; i < dims; i++ ) - total += size[i]+1; - - if( uniform ) - { - for( i = 0; i < dims; i++ ) - { - if( !ranges[i] ) - CV_Error( CV_StsNullPtr, "One of elements is NULL" ); - hist->thresh[i][0] = ranges[i][0]; - hist->thresh[i][1] = ranges[i][1]; - } - - hist->type |= CV_HIST_UNIFORM_FLAG + CV_HIST_RANGES_FLAG; - } - else - { - float* dim_ranges; - - if( !hist->thresh2 ) - { - hist->thresh2 = (float**)cvAlloc( - dims*sizeof(hist->thresh2[0])+ - total*sizeof(hist->thresh2[0][0])); - } - dim_ranges = (float*)(hist->thresh2 + dims); - - for( i = 0; i < dims; i++ ) - { - float val0 = -FLT_MAX; - - if( !ranges[i] ) - CV_Error( CV_StsNullPtr, "One of elements is NULL" ); - - for( j = 0; j <= size[i]; j++ ) - { - float val = ranges[i][j]; - if( val <= val0 ) - CV_Error(CV_StsOutOfRange, "Bin ranges should go in ascenting order"); - val0 = dim_ranges[j] = val; - } - - hist->thresh2[i] = dim_ranges; - dim_ranges += size[i] + 1; - } - - hist->type |= CV_HIST_RANGES_FLAG; - hist->type &= ~CV_HIST_UNIFORM_FLAG; - } -} - - -CV_IMPL void -cvCalcArrHist( CvArr** img, CvHistogram* hist, int accumulate, const CvArr* mask ) -{ - if( !CV_IS_HIST(hist)) - CV_Error( CV_StsBadArg, "Bad histogram pointer" ); - - if( !img ) - CV_Error( CV_StsNullPtr, "Null double array pointer" ); - - int size[CV_MAX_DIM]; - int i, dims = cvGetDims( hist->bins, size); - bool uniform = CV_IS_UNIFORM_HIST(hist); - - cv::vector images(dims); - for( i = 0; i < dims; i++ ) - images[i] = cv::cvarrToMat(img[i]); - - cv::Mat _mask; - if( mask ) - _mask = cv::cvarrToMat(mask); - - const float* uranges[CV_MAX_DIM] = {0}; - const float** ranges = 0; - - if( hist->type & CV_HIST_RANGES_FLAG ) - { - ranges = (const float**)hist->thresh2; - if( uniform ) - { - for( i = 0; i < dims; i++ ) - uranges[i] = &hist->thresh[i][0]; - ranges = uranges; - } - } - - if( !CV_IS_SPARSE_HIST(hist) ) - { - cv::Mat H((const CvMatND*)hist->bins); - cv::calcHist( &images[0], (int)images.size(), 0, _mask, - H, cvGetDims(hist->bins), H.size, ranges, uniform, accumulate != 0 ); - } - else - { - CvSparseMat* sparsemat = (CvSparseMat*)hist->bins; - - if( !accumulate ) - cvZero( hist->bins ); - cv::SparseMat sH(sparsemat); - cv::calcHist( &images[0], (int)images.size(), 0, _mask, sH, sH.dims(), - sH.dims() > 0 ? sH.hdr->size : 0, ranges, uniform, accumulate != 0, true ); - - if( accumulate ) - cvZero( sparsemat ); - - cv::SparseMatConstIterator it = sH.begin(); - int nz = (int)sH.nzcount(); - for( i = 0; i < nz; i++, ++it ) - *(float*)cvPtrND(sparsemat, it.node()->idx, 0, -2) = (float)*(const int*)it.ptr; - } -} - - -CV_IMPL void -cvCalcArrBackProject( CvArr** img, CvArr* dst, const CvHistogram* hist ) -{ - if( !CV_IS_HIST(hist)) - CV_Error( CV_StsBadArg, "Bad histogram pointer" ); - - if( !img ) - CV_Error( CV_StsNullPtr, "Null double array pointer" ); - - int size[CV_MAX_DIM]; - int i, dims = cvGetDims( hist->bins, size ); - - bool uniform = CV_IS_UNIFORM_HIST(hist); - const float* uranges[CV_MAX_DIM] = {0}; - const float** ranges = 0; - - if( hist->type & CV_HIST_RANGES_FLAG ) - { - ranges = (const float**)hist->thresh2; - if( uniform ) - { - for( i = 0; i < dims; i++ ) - uranges[i] = &hist->thresh[i][0]; - ranges = uranges; - } - } - - cv::vector images(dims); - for( i = 0; i < dims; i++ ) - images[i] = cv::cvarrToMat(img[i]); - - cv::Mat _dst = cv::cvarrToMat(dst); - - CV_Assert( _dst.size() == images[0].size() && _dst.depth() == images[0].depth() ); - - if( !CV_IS_SPARSE_HIST(hist) ) - { - cv::Mat H((const CvMatND*)hist->bins); - cv::calcBackProject( &images[0], (int)images.size(), - 0, H, _dst, ranges, 1, uniform ); - } - else - { - cv::SparseMat sH((const CvSparseMat*)hist->bins); - cv::calcBackProject( &images[0], (int)images.size(), - 0, sH, _dst, ranges, 1, uniform ); - } -} - - -////////////////////// B A C K P R O J E C T P A T C H ///////////////////////// - -CV_IMPL void -cvCalcArrBackProjectPatch( CvArr** arr, CvArr* dst, CvSize patch_size, CvHistogram* hist, - int method, double norm_factor ) -{ - CvHistogram* model = 0; - - IplImage imgstub[CV_MAX_DIM], *img[CV_MAX_DIM]; - IplROI roi; - CvMat dststub, *dstmat; - int i, dims; - int x, y; - CvSize size; - - if( !CV_IS_HIST(hist)) - CV_Error( CV_StsBadArg, "Bad histogram pointer" ); - - if( !arr ) - CV_Error( CV_StsNullPtr, "Null double array pointer" ); - - if( norm_factor <= 0 ) - CV_Error( CV_StsOutOfRange, - "Bad normalization factor (set it to 1.0 if unsure)" ); - - if( patch_size.width <= 0 || patch_size.height <= 0 ) - CV_Error( CV_StsBadSize, "The patch width and height must be positive" ); - - dims = cvGetDims( hist->bins ); - cvNormalizeHist( hist, norm_factor ); - - for( i = 0; i < dims; i++ ) - { - CvMat stub, *mat; - mat = cvGetMat( arr[i], &stub, 0, 0 ); - img[i] = cvGetImage( mat, &imgstub[i] ); - img[i]->roi = &roi; - } - - dstmat = cvGetMat( dst, &dststub, 0, 0 ); - if( CV_MAT_TYPE( dstmat->type ) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, "Resultant image must have 32fC1 type" ); - - if( dstmat->cols != img[0]->width - patch_size.width + 1 || - dstmat->rows != img[0]->height - patch_size.height + 1 ) - CV_Error( CV_StsUnmatchedSizes, - "The output map must be (W-w+1 x H-h+1), " - "where the input images are (W x H) each and the patch is (w x h)" ); - - cvCopyHist( hist, &model ); - - size = cvGetMatSize(dstmat); - roi.coi = 0; - roi.width = patch_size.width; - roi.height = patch_size.height; - - for( y = 0; y < size.height; y++ ) - { - for( x = 0; x < size.width; x++ ) - { - double result; - roi.xOffset = x; - roi.yOffset = y; - - cvCalcHist( img, model ); - cvNormalizeHist( model, norm_factor ); - result = cvCompareHist( model, hist, method ); - CV_MAT_ELEM( *dstmat, float, y, x ) = (float)result; - } - } - - cvReleaseHist( &model ); -} - - -// Calculates Bayes probabilistic histograms -CV_IMPL void -cvCalcBayesianProb( CvHistogram** src, int count, CvHistogram** dst ) -{ - int i; - - if( !src || !dst ) - CV_Error( CV_StsNullPtr, "NULL histogram array pointer" ); - - if( count < 2 ) - CV_Error( CV_StsOutOfRange, "Too small number of histograms" ); - - for( i = 0; i < count; i++ ) - { - if( !CV_IS_HIST(src[i]) || !CV_IS_HIST(dst[i]) ) - CV_Error( CV_StsBadArg, "Invalid histogram header" ); - - if( !CV_IS_MATND(src[i]->bins) || !CV_IS_MATND(dst[i]->bins) ) - CV_Error( CV_StsBadArg, "The function supports dense histograms only" ); - } - - cvZero( dst[0]->bins ); - // dst[0] = src[0] + ... + src[count-1] - for( i = 0; i < count; i++ ) - cvAdd( src[i]->bins, dst[0]->bins, dst[0]->bins ); - - cvDiv( 0, dst[0]->bins, dst[0]->bins ); - - // dst[i] = src[i]*(1/dst[0]) - for( i = count - 1; i >= 0; i-- ) - cvMul( src[i]->bins, dst[0]->bins, dst[i]->bins ); -} - - -CV_IMPL void -cvCalcProbDensity( const CvHistogram* hist, const CvHistogram* hist_mask, - CvHistogram* hist_dens, double scale ) -{ - if( scale <= 0 ) - CV_Error( CV_StsOutOfRange, "scale must be positive" ); - - if( !CV_IS_HIST(hist) || !CV_IS_HIST(hist_mask) || !CV_IS_HIST(hist_dens) ) - CV_Error( CV_StsBadArg, "Invalid histogram pointer[s]" ); - - { - CvArr* arrs[] = { hist->bins, hist_mask->bins, hist_dens->bins }; - CvMatND stubs[3]; - CvNArrayIterator iterator; - - cvInitNArrayIterator( 3, arrs, 0, stubs, &iterator ); - - if( CV_MAT_TYPE(iterator.hdr[0]->type) != CV_32FC1 ) - CV_Error( CV_StsUnsupportedFormat, "All histograms must have 32fC1 type" ); - - do - { - const float* srcdata = (const float*)(iterator.ptr[0]); - const float* maskdata = (const float*)(iterator.ptr[1]); - float* dstdata = (float*)(iterator.ptr[2]); - int i; - - for( i = 0; i < iterator.size.width; i++ ) - { - float s = srcdata[i]; - float m = maskdata[i]; - if( s > FLT_EPSILON ) - if( m <= s ) - dstdata[i] = (float)(m*scale/s); - else - dstdata[i] = (float)scale; - else - dstdata[i] = (float)0; - } - } - while( cvNextNArraySlice( &iterator )); - } -} - -class EqualizeHistCalcHist_Invoker : public cv::ParallelLoopBody -{ -public: - enum {HIST_SZ = 256}; - - EqualizeHistCalcHist_Invoker(cv::Mat& src, int* histogram, cv::Mutex* histogramLock) - : src_(src), globalHistogram_(histogram), histogramLock_(histogramLock) - { } - - void operator()( const cv::Range& rowRange ) const - { - int localHistogram[HIST_SZ] = {0, }; - - const size_t sstep = src_.step; - - int width = src_.cols; - int height = rowRange.end - rowRange.start; - - if (src_.isContinuous()) - { - width *= height; - height = 1; - } - - for (const uchar* ptr = src_.ptr(rowRange.start); height--; ptr += sstep) - { - int x = 0; - for (; x <= width - 4; x += 4) - { - int t0 = ptr[x], t1 = ptr[x+1]; - localHistogram[t0]++; localHistogram[t1]++; - t0 = ptr[x+2]; t1 = ptr[x+3]; - localHistogram[t0]++; localHistogram[t1]++; - } - - for (; x < width; ++x) - localHistogram[ptr[x]]++; - } - - cv::AutoLock lock(*histogramLock_); - - for( int i = 0; i < HIST_SZ; i++ ) - globalHistogram_[i] += localHistogram[i]; - } - - static bool isWorthParallel( const cv::Mat& src ) - { - return ( src.total() >= 640*480 ); - } - -private: - EqualizeHistCalcHist_Invoker& operator=(const EqualizeHistCalcHist_Invoker&); - - cv::Mat& src_; - int* globalHistogram_; - cv::Mutex* histogramLock_; -}; - -class EqualizeHistLut_Invoker : public cv::ParallelLoopBody -{ -public: - EqualizeHistLut_Invoker( cv::Mat& src, cv::Mat& dst, int* lut ) - : src_(src), - dst_(dst), - lut_(lut) - { } - - void operator()( const cv::Range& rowRange ) const - { - const size_t sstep = src_.step; - const size_t dstep = dst_.step; - - int width = src_.cols; - int height = rowRange.end - rowRange.start; - int* lut = lut_; - - if (src_.isContinuous() && dst_.isContinuous()) - { - width *= height; - height = 1; - } - - const uchar* sptr = src_.ptr(rowRange.start); - uchar* dptr = dst_.ptr(rowRange.start); - - for (; height--; sptr += sstep, dptr += dstep) - { - int x = 0; - for (; x <= width - 4; x += 4) - { - int v0 = sptr[x]; - int v1 = sptr[x+1]; - int x0 = lut[v0]; - int x1 = lut[v1]; - dptr[x] = (uchar)x0; - dptr[x+1] = (uchar)x1; - - v0 = sptr[x+2]; - v1 = sptr[x+3]; - x0 = lut[v0]; - x1 = lut[v1]; - dptr[x+2] = (uchar)x0; - dptr[x+3] = (uchar)x1; - } - - for (; x < width; ++x) - dptr[x] = (uchar)lut[sptr[x]]; - } - } - - static bool isWorthParallel( const cv::Mat& src ) - { - return ( src.total() >= 640*480 ); - } - -private: - EqualizeHistLut_Invoker& operator=(const EqualizeHistLut_Invoker&); - - cv::Mat& src_; - cv::Mat& dst_; - int* lut_; -}; - -CV_IMPL void cvEqualizeHist( const CvArr* srcarr, CvArr* dstarr ) -{ - cv::equalizeHist(cv::cvarrToMat(srcarr), cv::cvarrToMat(dstarr)); -} - -void cv::equalizeHist( InputArray _src, OutputArray _dst ) -{ - Mat src = _src.getMat(); - CV_Assert( src.type() == CV_8UC1 ); - - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if(src.empty()) - return; - - Mutex histogramLockInstance; - - const int hist_sz = EqualizeHistCalcHist_Invoker::HIST_SZ; - int hist[hist_sz] = {0,}; - int lut[hist_sz]; - - EqualizeHistCalcHist_Invoker calcBody(src, hist, &histogramLockInstance); - EqualizeHistLut_Invoker lutBody(src, dst, lut); - cv::Range heightRange(0, src.rows); - - if(EqualizeHistCalcHist_Invoker::isWorthParallel(src)) - parallel_for_(heightRange, calcBody); - else - calcBody(heightRange); - - int i = 0; - while (!hist[i]) ++i; - - int total = (int)src.total(); - if (hist[i] == total) - { - dst.setTo(i); - return; - } - - float scale = (hist_sz - 1.f)/(total - hist[i]); - int sum = 0; - - for (lut[i++] = 0; i < hist_sz; ++i) - { - sum += hist[i]; - lut[i] = saturate_cast(sum * scale); - } - - if(EqualizeHistLut_Invoker::isWorthParallel(src)) - parallel_for_(heightRange, lutBody); - else - lutBody(heightRange); -} - -// ---------------------------------------------------------------------- - -/* Implementation of RTTI and Generic Functions for CvHistogram */ -#define CV_TYPE_NAME_HIST "opencv-hist" - -static int icvIsHist( const void * ptr ) -{ - return CV_IS_HIST( ((CvHistogram*)ptr) ); -} - -static CvHistogram * icvCloneHist( const CvHistogram * src ) -{ - CvHistogram * dst=NULL; - cvCopyHist(src, &dst); - return dst; -} - -static void *icvReadHist( CvFileStorage * fs, CvFileNode * node ) -{ - CvHistogram * h = 0; - int type = 0; - int is_uniform = 0; - int have_ranges = 0; - - h = (CvHistogram *)cvAlloc( sizeof(CvHistogram) ); - - type = cvReadIntByName( fs, node, "type", 0 ); - is_uniform = cvReadIntByName( fs, node, "is_uniform", 0 ); - have_ranges = cvReadIntByName( fs, node, "have_ranges", 0 ); - h->type = CV_HIST_MAGIC_VAL | type | - (is_uniform ? CV_HIST_UNIFORM_FLAG : 0) | - (have_ranges ? CV_HIST_RANGES_FLAG : 0); - - if(type == CV_HIST_ARRAY) - { - // read histogram bins - CvMatND* mat = (CvMatND*)cvReadByName( fs, node, "mat" ); - int i, sizes[CV_MAX_DIM]; - - if(!CV_IS_MATND(mat)) - CV_Error( CV_StsError, "Expected CvMatND"); - - for(i=0; idims; i++) - sizes[i] = mat->dim[i].size; - - cvInitMatNDHeader( &(h->mat), mat->dims, sizes, mat->type, mat->data.ptr ); - h->bins = &(h->mat); - - // take ownership of refcount pointer as well - h->mat.refcount = mat->refcount; - - // increase refcount so freeing temp header doesn't free data - cvIncRefData( mat ); - - // free temporary header - cvReleaseMatND( &mat ); - } - else - { - h->bins = cvReadByName( fs, node, "bins" ); - if(!CV_IS_SPARSE_MAT(h->bins)){ - CV_Error( CV_StsError, "Unknown Histogram type"); - } - } - - // read thresholds - if(have_ranges) - { - int i, dims, size[CV_MAX_DIM], total = 0; - CvSeqReader reader; - CvFileNode * thresh_node; - - dims = cvGetDims( h->bins, size ); - for( i = 0; i < dims; i++ ) - total += size[i]+1; - - thresh_node = cvGetFileNodeByName( fs, node, "thresh" ); - if(!thresh_node) - CV_Error( CV_StsError, "'thresh' node is missing"); - cvStartReadRawData( fs, thresh_node, &reader ); - - if(is_uniform) - { - for(i=0; ithresh[i], "f" ); - h->thresh2 = NULL; - } - else - { - float* dim_ranges; - h->thresh2 = (float**)cvAlloc( - dims*sizeof(h->thresh2[0])+ - total*sizeof(h->thresh2[0][0])); - dim_ranges = (float*)(h->thresh2 + dims); - for(i=0; i < dims; i++) - { - h->thresh2[i] = dim_ranges; - cvReadRawDataSlice( fs, &reader, size[i]+1, dim_ranges, "f" ); - dim_ranges += size[i] + 1; - } - } - } - - return h; -} - -static void icvWriteHist( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList /*attributes*/ ) -{ - const CvHistogram * hist = (const CvHistogram *) struct_ptr; - int sizes[CV_MAX_DIM]; - int dims; - int i; - int is_uniform, have_ranges; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_HIST ); - - is_uniform = (CV_IS_UNIFORM_HIST(hist) ? 1 : 0); - have_ranges = (hist->type & CV_HIST_RANGES_FLAG ? 1 : 0); - - cvWriteInt( fs, "type", (hist->type & 1) ); - cvWriteInt( fs, "is_uniform", is_uniform ); - cvWriteInt( fs, "have_ranges", have_ranges ); - if(!CV_IS_SPARSE_HIST(hist)) - cvWrite( fs, "mat", &(hist->mat) ); - else - cvWrite( fs, "bins", hist->bins ); - - // write thresholds - if(have_ranges){ - dims = cvGetDims( hist->bins, sizes ); - cvStartWriteStruct( fs, "thresh", CV_NODE_SEQ + CV_NODE_FLOW ); - if(is_uniform){ - for(i=0; ithresh[i], 2, "f" ); - } - } - else{ - for(i=0; ithresh2[i], sizes[i]+1, "f" ); - } - } - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); -} - - -CvType hist_type( CV_TYPE_NAME_HIST, icvIsHist, (CvReleaseFunc)cvReleaseHist, - icvReadHist, icvWriteHist, (CvCloneFunc)icvCloneHist ); - -/* End of file. */ diff --git a/modules/imgproc/src/hough.cpp b/modules/imgproc/src/hough.cpp deleted file mode 100644 index 3e737d8..0000000 --- a/modules/imgproc/src/hough.cpp +++ /dev/null @@ -1,1143 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include "_list.h" - -#define halfPi ((float)(CV_PI*0.5)) -#define Pi ((float)CV_PI) -#define a0 0 /*-4.172325e-7f*/ /*(-(float)0x7)/((float)0x1000000); */ -#define a1 1.000025f /*((float)0x1922253)/((float)0x1000000)*2/Pi; */ -#define a2 -2.652905e-4f /*(-(float)0x2ae6)/((float)0x1000000)*4/(Pi*Pi); */ -#define a3 -0.165624f /*(-(float)0xa45511)/((float)0x1000000)*8/(Pi*Pi*Pi); */ -#define a4 -1.964532e-3f /*(-(float)0x30fd3)/((float)0x1000000)*16/(Pi*Pi*Pi*Pi); */ -#define a5 1.02575e-2f /*((float)0x191cac)/((float)0x1000000)*32/(Pi*Pi*Pi*Pi*Pi); */ -#define a6 -9.580378e-4f /*(-(float)0x3af27)/((float)0x1000000)*64/(Pi*Pi*Pi*Pi*Pi*Pi); */ - -#define _sin(x) ((((((a6*(x) + a5)*(x) + a4)*(x) + a3)*(x) + a2)*(x) + a1)*(x) + a0) -#define _cos(x) _sin(halfPi - (x)) - -/****************************************************************************************\ -* Classical Hough Transform * -\****************************************************************************************/ - -typedef struct CvLinePolar -{ - float rho; - float angle; -} -CvLinePolar; - -/*=====================================================================================*/ - -#define hough_cmp_gt(l1,l2) (aux[l1] > aux[l2]) - -static CV_IMPLEMENT_QSORT_EX( icvHoughSortDescent32s, int, hough_cmp_gt, const int* ) - -/* -Here image is an input raster; -step is it's step; size characterizes it's ROI; -rho and theta are discretization steps (in pixels and radians correspondingly). -threshold is the minimum number of pixels in the feature for it -to be a candidate for line. lines is the output -array of (rho, theta) pairs. linesMax is the buffer size (number of pairs). -Functions return the actual number of found lines. -*/ -static void -icvHoughLinesStandard( const CvMat* img, float rho, float theta, - int threshold, CvSeq *lines, int linesMax ) -{ - cv::AutoBuffer _accum, _sort_buf; - cv::AutoBuffer _tabSin, _tabCos; - - const uchar* image; - int step, width, height; - int numangle, numrho; - int total = 0; - int i, j; - float irho = 1 / rho; - double scale; - - CV_Assert( CV_IS_MAT(img) && CV_MAT_TYPE(img->type) == CV_8UC1 ); - - image = img->data.ptr; - step = img->step; - width = img->cols; - height = img->rows; - - numangle = cvRound(CV_PI / theta); - numrho = cvRound(((width + height) * 2 + 1) / rho); - - _accum.allocate((numangle+2) * (numrho+2)); - _sort_buf.allocate(numangle * numrho); - _tabSin.allocate(numangle); - _tabCos.allocate(numangle); - int *accum = _accum, *sort_buf = _sort_buf; - float *tabSin = _tabSin, *tabCos = _tabCos; - - memset( accum, 0, sizeof(accum[0]) * (numangle+2) * (numrho+2) ); - - float ang = 0; - for(int n = 0; n < numangle; ang += theta, n++ ) - { - tabSin[n] = (float)(sin((double)ang) * irho); - tabCos[n] = (float)(cos((double)ang) * irho); - } - - // stage 1. fill accumulator - for( i = 0; i < height; i++ ) - for( j = 0; j < width; j++ ) - { - if( image[i * step + j] != 0 ) - for(int n = 0; n < numangle; n++ ) - { - int r = cvRound( j * tabCos[n] + i * tabSin[n] ); - r += (numrho - 1) / 2; - accum[(n+1) * (numrho+2) + r+1]++; - } - } - - // stage 2. find local maximums - for(int r = 0; r < numrho; r++ ) - for(int n = 0; n < numangle; n++ ) - { - int base = (n+1) * (numrho+2) + r+1; - if( accum[base] > threshold && - accum[base] > accum[base - 1] && accum[base] >= accum[base + 1] && - accum[base] > accum[base - numrho - 2] && accum[base] >= accum[base + numrho + 2] ) - sort_buf[total++] = base; - } - - // stage 3. sort the detected lines by accumulator value - icvHoughSortDescent32s( sort_buf, total, accum ); - - // stage 4. store the first min(total,linesMax) lines to the output buffer - linesMax = MIN(linesMax, total); - scale = 1./(numrho+2); - for( i = 0; i < linesMax; i++ ) - { - CvLinePolar line; - int idx = sort_buf[i]; - int n = cvFloor(idx*scale) - 1; - int r = idx - (n+1)*(numrho+2) - 1; - line.rho = (r - (numrho - 1)*0.5f) * rho; - line.angle = n * theta; - cvSeqPush( lines, &line ); - } -} - - -/****************************************************************************************\ -* Multi-Scale variant of Classical Hough Transform * -\****************************************************************************************/ - -//DECLARE_AND_IMPLEMENT_LIST( _index, h_ ); -IMPLEMENT_LIST( _index, h_ ) - -static void -icvHoughLinesSDiv( const CvMat* img, - float rho, float theta, int threshold, - int srn, int stn, - CvSeq* lines, int linesMax ) -{ - std::vector _caccum, _buffer; - std::vector _sinTable; - std::vector _x, _y; - float* sinTable; - int *x, *y; - uchar *caccum, *buffer; - _CVLIST* list = 0; - -#define _POINT(row, column)\ - (image_src[(row)*step+(column)]) - - uchar *mcaccum = 0; - int rn, tn; /* number of rho and theta discrete values */ - int index, i; - int ri, ti, ti1, ti0; - int row, col; - float r, t; /* Current rho and theta */ - float rv; /* Some temporary rho value */ - float irho; - float itheta; - float srho, stheta; - float isrho, istheta; - - const uchar* image_src; - int w, h, step; - int fn = 0; - float xc, yc; - - const float d2r = (float)(Pi / 180); - int sfn = srn * stn; - int fi; - int count; - int cmax = 0; - - CVPOS pos; - _index *pindex; - _index vi; - - CV_Assert( CV_IS_MAT(img) && CV_MAT_TYPE(img->type) == CV_8UC1 ); - CV_Assert( linesMax > 0 && rho > 0 && theta > 0 ); - - threshold = MIN( threshold, 255 ); - - image_src = img->data.ptr; - step = img->step; - w = img->cols; - h = img->rows; - - irho = 1 / rho; - itheta = 1 / theta; - srho = rho / srn; - stheta = theta / stn; - isrho = 1 / srho; - istheta = 1 / stheta; - - rn = cvFloor( sqrt( (double)w * w + (double)h * h ) * irho ); - tn = cvFloor( 2 * Pi * itheta ); - - list = h_create_list__index( linesMax < 1000 ? linesMax : 1000 ); - vi.value = threshold; - vi.rho = -1; - h_add_head__index( list, &vi ); - - /* Precalculating sin */ - _sinTable.resize( 5 * tn * stn ); - sinTable = &_sinTable[0]; - - for( index = 0; index < 5 * tn * stn; index++ ) - sinTable[index] = (float)cos( stheta * index * 0.2f ); - - _caccum.resize(rn * tn); - caccum = &_caccum[0]; - memset( caccum, 0, rn * tn * sizeof( caccum[0] )); - - /* Counting all feature pixels */ - for( row = 0; row < h; row++ ) - for( col = 0; col < w; col++ ) - fn += _POINT( row, col ) != 0; - - _x.resize(fn); - _y.resize(fn); - x = &_x[0]; - y = &_y[0]; - - /* Full Hough Transform (it's accumulator update part) */ - fi = 0; - for( row = 0; row < h; row++ ) - { - for( col = 0; col < w; col++ ) - { - if( _POINT( row, col )) - { - int halftn; - float r0; - float scale_factor; - int iprev = -1; - float phi, phi1; - float theta_it; /* Value of theta for iterating */ - - /* Remember the feature point */ - x[fi] = col; - y[fi] = row; - fi++; - - yc = (float) row + 0.5f; - xc = (float) col + 0.5f; - - /* Update the accumulator */ - t = (float) fabs( cvFastArctan( yc, xc ) * d2r ); - r = (float) sqrt( (double)xc * xc + (double)yc * yc ); - r0 = r * irho; - ti0 = cvFloor( (t + Pi / 2) * itheta ); - - caccum[ti0]++; - - theta_it = rho / r; - theta_it = theta_it < theta ? theta_it : theta; - scale_factor = theta_it * itheta; - halftn = cvFloor( Pi / theta_it ); - for( ti1 = 1, phi = theta_it - halfPi, phi1 = (theta_it + t) * itheta; - ti1 < halftn; ti1++, phi += theta_it, phi1 += scale_factor ) - { - rv = r0 * _cos( phi ); - i = cvFloor( rv ) * tn; - i += cvFloor( phi1 ); - assert( i >= 0 ); - assert( i < rn * tn ); - caccum[i] = (uchar) (caccum[i] + ((i ^ iprev) != 0)); - iprev = i; - if( cmax < caccum[i] ) - cmax = caccum[i]; - } - } - } - } - - /* Starting additional analysis */ - count = 0; - for( ri = 0; ri < rn; ri++ ) - { - for( ti = 0; ti < tn; ti++ ) - { - if( caccum[ri * tn + ti] > threshold ) - { - count++; - } - } - } - - if( count * 100 > rn * tn ) - { - icvHoughLinesStandard( img, rho, theta, threshold, lines, linesMax ); - return; - } - - _buffer.resize(srn * stn + 2); - buffer = &_buffer[0]; - mcaccum = buffer + 1; - - count = 0; - for( ri = 0; ri < rn; ri++ ) - { - for( ti = 0; ti < tn; ti++ ) - { - if( caccum[ri * tn + ti] > threshold ) - { - count++; - memset( mcaccum, 0, sfn * sizeof( uchar )); - - for( index = 0; index < fn; index++ ) - { - int ti2; - float r0; - - yc = (float) y[index] + 0.5f; - xc = (float) x[index] + 0.5f; - - /* Update the accumulator */ - t = (float) fabs( cvFastArctan( yc, xc ) * d2r ); - r = (float) sqrt( (double)xc * xc + (double)yc * yc ) * isrho; - ti0 = cvFloor( (t + Pi * 0.5f) * istheta ); - ti2 = (ti * stn - ti0) * 5; - r0 = (float) ri *srn; - - for( ti1 = 0 /*, phi = ti*theta - Pi/2 - t */ ; ti1 < stn; ti1++, ti2 += 5 - /*phi += stheta */ ) - { - /*rv = r*_cos(phi) - r0; */ - rv = r * sinTable[(int) (abs( ti2 ))] - r0; - i = cvFloor( rv ) * stn + ti1; - - i = CV_IMAX( i, -1 ); - i = CV_IMIN( i, sfn ); - mcaccum[i]++; - assert( i >= -1 ); - assert( i <= sfn ); - } - } - - /* Find peaks in maccum... */ - for( index = 0; index < sfn; index++ ) - { - i = 0; - pos = h_get_tail_pos__index( list ); - if( h_get_prev__index( &pos )->value < mcaccum[index] ) - { - vi.value = mcaccum[index]; - vi.rho = index / stn * srho + ri * rho; - vi.theta = index % stn * stheta + ti * theta - halfPi; - while( h_is_pos__index( pos )) - { - if( h_get__index( pos )->value > mcaccum[index] ) - { - h_insert_after__index( list, pos, &vi ); - if( h_get_count__index( list ) > linesMax ) - { - h_remove_tail__index( list ); - } - break; - } - h_get_prev__index( &pos ); - } - if( !h_is_pos__index( pos )) - { - h_add_head__index( list, &vi ); - if( h_get_count__index( list ) > linesMax ) - { - h_remove_tail__index( list ); - } - } - } - } - } - } - } - - pos = h_get_head_pos__index( list ); - if( h_get_count__index( list ) == 1 ) - { - if( h_get__index( pos )->rho < 0 ) - { - h_clear_list__index( list ); - } - } - else - { - while( h_is_pos__index( pos )) - { - CvLinePolar line; - pindex = h_get__index( pos ); - if( pindex->rho < 0 ) - { - /* This should be the last element... */ - h_get_next__index( &pos ); - assert( !h_is_pos__index( pos )); - break; - } - line.rho = pindex->rho; - line.angle = pindex->theta; - cvSeqPush( lines, &line ); - - if( lines->total >= linesMax ) - break; - h_get_next__index( &pos ); - } - } - - h_destroy_list__index(list); -} - - -/****************************************************************************************\ -* Probabilistic Hough Transform * -\****************************************************************************************/ - -static void -icvHoughLinesProbabilistic( CvMat* image, - float rho, float theta, int threshold, - int lineLength, int lineGap, - CvSeq *lines, int linesMax ) -{ - cv::Mat accum, mask; - cv::vector trigtab; - cv::MemStorage storage(cvCreateMemStorage(0)); - - CvSeq* seq; - CvSeqWriter writer; - int width, height; - int numangle, numrho; - float ang; - int r, n, count; - CvPoint pt; - float irho = 1 / rho; - CvRNG rng = cvRNG(-1); - const float* ttab; - uchar* mdata0; - - CV_Assert( CV_IS_MAT(image) && CV_MAT_TYPE(image->type) == CV_8UC1 ); - - width = image->cols; - height = image->rows; - - numangle = cvRound(CV_PI / theta); - numrho = cvRound(((width + height) * 2 + 1) / rho); - - accum.create( numangle, numrho, CV_32SC1 ); - mask.create( height, width, CV_8UC1 ); - trigtab.resize(numangle*2); - accum = cv::Scalar(0); - - for( ang = 0, n = 0; n < numangle; ang += theta, n++ ) - { - trigtab[n*2] = (float)(cos(ang) * irho); - trigtab[n*2+1] = (float)(sin(ang) * irho); - } - ttab = &trigtab[0]; - mdata0 = mask.data; - - cvStartWriteSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage, &writer ); - - // stage 1. collect non-zero image points - for( pt.y = 0, count = 0; pt.y < height; pt.y++ ) - { - const uchar* data = image->data.ptr + pt.y*image->step; - uchar* mdata = mdata0 + pt.y*width; - for( pt.x = 0; pt.x < width; pt.x++ ) - { - if( data[pt.x] ) - { - mdata[pt.x] = (uchar)1; - CV_WRITE_SEQ_ELEM( pt, writer ); - } - else - mdata[pt.x] = 0; - } - } - - seq = cvEndWriteSeq( &writer ); - count = seq->total; - - // stage 2. process all the points in random order - for( ; count > 0; count-- ) - { - // choose random point out of the remaining ones - int idx = cvRandInt(&rng) % count; - int max_val = threshold-1, max_n = 0; - CvPoint* point = (CvPoint*)cvGetSeqElem( seq, idx ); - CvPoint line_end[2] = {{0,0}, {0,0}}; - float a, b; - int* adata = (int*)accum.data; - int i, j, k, x0, y0, dx0, dy0, xflag; - int good_line; - const int shift = 16; - - i = point->y; - j = point->x; - - // "remove" it by overriding it with the last element - *point = *(CvPoint*)cvGetSeqElem( seq, count-1 ); - - // check if it has been excluded already (i.e. belongs to some other line) - if( !mdata0[i*width + j] ) - continue; - - // update accumulator, find the most probable line - for( n = 0; n < numangle; n++, adata += numrho ) - { - r = cvRound( j * ttab[n*2] + i * ttab[n*2+1] ); - r += (numrho - 1) / 2; - int val = ++adata[r]; - if( max_val < val ) - { - max_val = val; - max_n = n; - } - } - - // if it is too "weak" candidate, continue with another point - if( max_val < threshold ) - continue; - - // from the current point walk in each direction - // along the found line and extract the line segment - a = -ttab[max_n*2+1]; - b = ttab[max_n*2]; - x0 = j; - y0 = i; - if( fabs(a) > fabs(b) ) - { - xflag = 1; - dx0 = a > 0 ? 1 : -1; - dy0 = cvRound( b*(1 << shift)/fabs(a) ); - y0 = (y0 << shift) + (1 << (shift-1)); - } - else - { - xflag = 0; - dy0 = b > 0 ? 1 : -1; - dx0 = cvRound( a*(1 << shift)/fabs(b) ); - x0 = (x0 << shift) + (1 << (shift-1)); - } - - for( k = 0; k < 2; k++ ) - { - int gap = 0, x = x0, y = y0, dx = dx0, dy = dy0; - - if( k > 0 ) - dx = -dx, dy = -dy; - - // walk along the line using fixed-point arithmetics, - // stop at the image border or in case of too big gap - for( ;; x += dx, y += dy ) - { - uchar* mdata; - int i1, j1; - - if( xflag ) - { - j1 = x; - i1 = y >> shift; - } - else - { - j1 = x >> shift; - i1 = y; - } - - if( j1 < 0 || j1 >= width || i1 < 0 || i1 >= height ) - break; - - mdata = mdata0 + i1*width + j1; - - // for each non-zero point: - // update line end, - // clear the mask element - // reset the gap - if( *mdata ) - { - gap = 0; - line_end[k].y = i1; - line_end[k].x = j1; - } - else if( ++gap > lineGap ) - break; - } - } - - good_line = abs(line_end[1].x - line_end[0].x) >= lineLength || - abs(line_end[1].y - line_end[0].y) >= lineLength; - - for( k = 0; k < 2; k++ ) - { - int x = x0, y = y0, dx = dx0, dy = dy0; - - if( k > 0 ) - dx = -dx, dy = -dy; - - // walk along the line using fixed-point arithmetics, - // stop at the image border or in case of too big gap - for( ;; x += dx, y += dy ) - { - uchar* mdata; - int i1, j1; - - if( xflag ) - { - j1 = x; - i1 = y >> shift; - } - else - { - j1 = x >> shift; - i1 = y; - } - - mdata = mdata0 + i1*width + j1; - - // for each non-zero point: - // update line end, - // clear the mask element - // reset the gap - if( *mdata ) - { - if( good_line ) - { - adata = (int*)accum.data; - for( n = 0; n < numangle; n++, adata += numrho ) - { - r = cvRound( j1 * ttab[n*2] + i1 * ttab[n*2+1] ); - r += (numrho - 1) / 2; - adata[r]--; - } - } - *mdata = 0; - } - - if( i1 == line_end[k].y && j1 == line_end[k].x ) - break; - } - } - - if( good_line ) - { - CvRect lr = { line_end[0].x, line_end[0].y, line_end[1].x, line_end[1].y }; - cvSeqPush( lines, &lr ); - if( lines->total >= linesMax ) - return; - } - } -} - -/* Wrapper function for standard hough transform */ -CV_IMPL CvSeq* -cvHoughLines2( CvArr* src_image, void* lineStorage, int method, - double rho, double theta, int threshold, - double param1, double param2 ) -{ - CvSeq* result = 0; - - CvMat stub, *img = (CvMat*)src_image; - CvMat* mat = 0; - CvSeq* lines = 0; - CvSeq lines_header; - CvSeqBlock lines_block; - int lineType, elemSize; - int linesMax = INT_MAX; - int iparam1, iparam2; - - img = cvGetMat( img, &stub ); - - if( !CV_IS_MASK_ARR(img)) - CV_Error( CV_StsBadArg, "The source image must be 8-bit, single-channel" ); - - if( !lineStorage ) - CV_Error( CV_StsNullPtr, "NULL destination" ); - - if( rho <= 0 || theta <= 0 || threshold <= 0 ) - CV_Error( CV_StsOutOfRange, "rho, theta and threshold must be positive" ); - - if( method != CV_HOUGH_PROBABILISTIC ) - { - lineType = CV_32FC2; - elemSize = sizeof(float)*2; - } - else - { - lineType = CV_32SC4; - elemSize = sizeof(int)*4; - } - - if( CV_IS_STORAGE( lineStorage )) - { - lines = cvCreateSeq( lineType, sizeof(CvSeq), elemSize, (CvMemStorage*)lineStorage ); - } - else if( CV_IS_MAT( lineStorage )) - { - mat = (CvMat*)lineStorage; - - if( !CV_IS_MAT_CONT( mat->type ) || (mat->rows != 1 && mat->cols != 1) ) - CV_Error( CV_StsBadArg, - "The destination matrix should be continuous and have a single row or a single column" ); - - if( CV_MAT_TYPE( mat->type ) != lineType ) - CV_Error( CV_StsBadArg, - "The destination matrix data type is inappropriate, see the manual" ); - - lines = cvMakeSeqHeaderForArray( lineType, sizeof(CvSeq), elemSize, mat->data.ptr, - mat->rows + mat->cols - 1, &lines_header, &lines_block ); - linesMax = lines->total; - cvClearSeq( lines ); - } - else - CV_Error( CV_StsBadArg, "Destination is not CvMemStorage* nor CvMat*" ); - - iparam1 = cvRound(param1); - iparam2 = cvRound(param2); - - switch( method ) - { - case CV_HOUGH_STANDARD: - icvHoughLinesStandard( img, (float)rho, - (float)theta, threshold, lines, linesMax ); - break; - case CV_HOUGH_MULTI_SCALE: - icvHoughLinesSDiv( img, (float)rho, (float)theta, - threshold, iparam1, iparam2, lines, linesMax ); - break; - case CV_HOUGH_PROBABILISTIC: - icvHoughLinesProbabilistic( img, (float)rho, (float)theta, - threshold, iparam1, iparam2, lines, linesMax ); - break; - default: - CV_Error( CV_StsBadArg, "Unrecognized method id" ); - } - - if( mat ) - { - if( mat->cols > mat->rows ) - mat->cols = lines->total; - else - mat->rows = lines->total; - } - else - result = lines; - - return result; -} - - -/****************************************************************************************\ -* Circle Detection * -\****************************************************************************************/ - -static void -icvHoughCirclesGradient( CvMat* img, float dp, float min_dist, - int min_radius, int max_radius, - int canny_threshold, int acc_threshold, - CvSeq* circles, int circles_max ) -{ - const int SHIFT = 10, ONE = 1 << SHIFT; - cv::Ptr dx, dy; - cv::Ptr edges, accum, dist_buf; - std::vector sort_buf; - cv::Ptr storage; - - int x, y, i, j, k, center_count, nz_count; - float min_radius2 = (float)min_radius*min_radius; - float max_radius2 = (float)max_radius*max_radius; - int rows, cols, arows, acols; - int astep, *adata; - float* ddata; - CvSeq *nz, *centers; - float idp, dr; - CvSeqReader reader; - - edges = cvCreateMat( img->rows, img->cols, CV_8UC1 ); - cvCanny( img, edges, MAX(canny_threshold/2,1), canny_threshold, 3 ); - - dx = cvCreateMat( img->rows, img->cols, CV_16SC1 ); - dy = cvCreateMat( img->rows, img->cols, CV_16SC1 ); - cvSobel( img, dx, 1, 0, 3 ); - cvSobel( img, dy, 0, 1, 3 ); - - if( dp < 1.f ) - dp = 1.f; - idp = 1.f/dp; - accum = cvCreateMat( cvCeil(img->rows*idp)+2, cvCeil(img->cols*idp)+2, CV_32SC1 ); - cvZero(accum); - - storage = cvCreateMemStorage(); - nz = cvCreateSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage ); - centers = cvCreateSeq( CV_32SC1, sizeof(CvSeq), sizeof(int), storage ); - - rows = img->rows; - cols = img->cols; - arows = accum->rows - 2; - acols = accum->cols - 2; - adata = accum->data.i; - astep = accum->step/sizeof(adata[0]); - // Accumulate circle evidence for each edge pixel - for( y = 0; y < rows; y++ ) - { - const uchar* edges_row = edges->data.ptr + y*edges->step; - const short* dx_row = (const short*)(dx->data.ptr + y*dx->step); - const short* dy_row = (const short*)(dy->data.ptr + y*dy->step); - - for( x = 0; x < cols; x++ ) - { - float vx, vy; - int sx, sy, x0, y0, x1, y1, r; - CvPoint pt; - - vx = dx_row[x]; - vy = dy_row[x]; - - if( !edges_row[x] || (vx == 0 && vy == 0) ) - continue; - - float mag = sqrt(vx*vx+vy*vy); - assert( mag >= 1 ); - sx = cvRound((vx*idp)*ONE/mag); - sy = cvRound((vy*idp)*ONE/mag); - - x0 = cvRound((x*idp)*ONE); - y0 = cvRound((y*idp)*ONE); - // Step from min_radius to max_radius in both directions of the gradient - for(int k1 = 0; k1 < 2; k1++ ) - { - x1 = x0 + min_radius * sx; - y1 = y0 + min_radius * sy; - - for( r = min_radius; r <= max_radius; x1 += sx, y1 += sy, r++ ) - { - int x2 = x1 >> SHIFT, y2 = y1 >> SHIFT; - if( (unsigned)x2 >= (unsigned)acols || - (unsigned)y2 >= (unsigned)arows ) - break; - adata[y2*astep + x2]++; - } - - sx = -sx; sy = -sy; - } - - pt.x = x; pt.y = y; - cvSeqPush( nz, &pt ); - } - } - - nz_count = nz->total; - if( !nz_count ) - return; - //Find possible circle centers - for( y = 1; y < arows - 1; y++ ) - { - for( x = 1; x < acols - 1; x++ ) - { - int base = y*(acols+2) + x; - if( adata[base] > acc_threshold && - adata[base] > adata[base-1] && adata[base] > adata[base+1] && - adata[base] > adata[base-acols-2] && adata[base] > adata[base+acols+2] ) - cvSeqPush(centers, &base); - } - } - - center_count = centers->total; - if( !center_count ) - return; - - sort_buf.resize( MAX(center_count,nz_count) ); - cvCvtSeqToArray( centers, &sort_buf[0] ); - - icvHoughSortDescent32s( &sort_buf[0], center_count, adata ); - cvClearSeq( centers ); - cvSeqPushMulti( centers, &sort_buf[0], center_count ); - - dist_buf = cvCreateMat( 1, nz_count, CV_32FC1 ); - ddata = dist_buf->data.fl; - - dr = dp; - min_dist = MAX( min_dist, dp ); - min_dist *= min_dist; - // For each found possible center - // Estimate radius and check support - for( i = 0; i < centers->total; i++ ) - { - int ofs = *(int*)cvGetSeqElem( centers, i ); - y = ofs/(acols+2); - x = ofs - (y)*(acols+2); - //Calculate circle's center in pixels - float cx = (float)((x + 0.5f)*dp), cy = (float)(( y + 0.5f )*dp); - float start_dist, dist_sum; - float r_best = 0; - int max_count = 0; - // Check distance with previously detected circles - for( j = 0; j < circles->total; j++ ) - { - float* c = (float*)cvGetSeqElem( circles, j ); - if( (c[0] - cx)*(c[0] - cx) + (c[1] - cy)*(c[1] - cy) < min_dist ) - break; - } - - if( j < circles->total ) - continue; - // Estimate best radius - cvStartReadSeq( nz, &reader ); - for( j = k = 0; j < nz_count; j++ ) - { - CvPoint pt; - float _dx, _dy, _r2; - CV_READ_SEQ_ELEM( pt, reader ); - _dx = cx - pt.x; _dy = cy - pt.y; - _r2 = _dx*_dx + _dy*_dy; - if(min_radius2 <= _r2 && _r2 <= max_radius2 ) - { - ddata[k] = _r2; - sort_buf[k] = k; - k++; - } - } - - int nz_count1 = k, start_idx = nz_count1 - 1; - if( nz_count1 == 0 ) - continue; - dist_buf->cols = nz_count1; - cvPow( dist_buf, dist_buf, 0.5 ); - icvHoughSortDescent32s( &sort_buf[0], nz_count1, (int*)ddata ); - - dist_sum = start_dist = ddata[sort_buf[nz_count1-1]]; - for( j = nz_count1 - 2; j >= 0; j-- ) - { - float d = ddata[sort_buf[j]]; - - if( d > max_radius ) - break; - - if( d - start_dist > dr ) - { - float r_cur = ddata[sort_buf[(j + start_idx)/2]]; - if( (start_idx - j)*r_best >= max_count*r_cur || - (r_best < FLT_EPSILON && start_idx - j >= max_count) ) - { - r_best = r_cur; - max_count = start_idx - j; - } - start_dist = d; - start_idx = j; - dist_sum = 0; - } - dist_sum += d; - } - // Check if the circle has enough support - if( max_count > acc_threshold ) - { - float c[3]; - c[0] = cx; - c[1] = cy; - c[2] = (float)r_best; - cvSeqPush( circles, c ); - if( circles->total > circles_max ) - return; - } - } -} - -CV_IMPL CvSeq* -cvHoughCircles( CvArr* src_image, void* circle_storage, - int method, double dp, double min_dist, - double param1, double param2, - int min_radius, int max_radius ) -{ - CvSeq* result = 0; - - CvMat stub, *img = (CvMat*)src_image; - CvMat* mat = 0; - CvSeq* circles = 0; - CvSeq circles_header; - CvSeqBlock circles_block; - int circles_max = INT_MAX; - int canny_threshold = cvRound(param1); - int acc_threshold = cvRound(param2); - - img = cvGetMat( img, &stub ); - - if( !CV_IS_MASK_ARR(img)) - CV_Error( CV_StsBadArg, "The source image must be 8-bit, single-channel" ); - - if( !circle_storage ) - CV_Error( CV_StsNullPtr, "NULL destination" ); - - if( dp <= 0 || min_dist <= 0 || canny_threshold <= 0 || acc_threshold <= 0 ) - CV_Error( CV_StsOutOfRange, "dp, min_dist, canny_threshold and acc_threshold must be all positive numbers" ); - - min_radius = MAX( min_radius, 0 ); - if( max_radius <= 0 ) - max_radius = MAX( img->rows, img->cols ); - else if( max_radius <= min_radius ) - max_radius = min_radius + 2; - - if( CV_IS_STORAGE( circle_storage )) - { - circles = cvCreateSeq( CV_32FC3, sizeof(CvSeq), - sizeof(float)*3, (CvMemStorage*)circle_storage ); - } - else if( CV_IS_MAT( circle_storage )) - { - mat = (CvMat*)circle_storage; - - if( !CV_IS_MAT_CONT( mat->type ) || (mat->rows != 1 && mat->cols != 1) || - CV_MAT_TYPE(mat->type) != CV_32FC3 ) - CV_Error( CV_StsBadArg, - "The destination matrix should be continuous and have a single row or a single column" ); - - circles = cvMakeSeqHeaderForArray( CV_32FC3, sizeof(CvSeq), sizeof(float)*3, - mat->data.ptr, mat->rows + mat->cols - 1, &circles_header, &circles_block ); - circles_max = circles->total; - cvClearSeq( circles ); - } - else - CV_Error( CV_StsBadArg, "Destination is not CvMemStorage* nor CvMat*" ); - - switch( method ) - { - case CV_HOUGH_GRADIENT: - icvHoughCirclesGradient( img, (float)dp, (float)min_dist, - min_radius, max_radius, canny_threshold, - acc_threshold, circles, circles_max ); - break; - default: - CV_Error( CV_StsBadArg, "Unrecognized method id" ); - } - - if( mat ) - { - if( mat->cols > mat->rows ) - mat->cols = circles->total; - else - mat->rows = circles->total; - } - else - result = circles; - - return result; -} - - -namespace cv -{ - -const int STORAGE_SIZE = 1 << 12; - -static void seqToMat(const CvSeq* seq, OutputArray _arr) -{ - if( seq && seq->total > 0 ) - { - _arr.create(1, seq->total, seq->flags, -1, true); - Mat arr = _arr.getMat(); - cvCvtSeqToArray(seq, arr.data); - } - else - _arr.release(); -} - -} - -void cv::HoughLines( InputArray _image, OutputArray _lines, - double rho, double theta, int threshold, - double srn, double stn ) -{ - Ptr storage = cvCreateMemStorage(STORAGE_SIZE); - Mat image = _image.getMat(); - CvMat c_image = image; - CvSeq* seq = cvHoughLines2( &c_image, storage, srn == 0 && stn == 0 ? - CV_HOUGH_STANDARD : CV_HOUGH_MULTI_SCALE, - rho, theta, threshold, srn, stn ); - seqToMat(seq, _lines); -} - -void cv::HoughLinesP( InputArray _image, OutputArray _lines, - double rho, double theta, int threshold, - double minLineLength, double maxGap ) -{ - Ptr storage = cvCreateMemStorage(STORAGE_SIZE); - Mat image = _image.getMat(); - CvMat c_image = image; - CvSeq* seq = cvHoughLines2( &c_image, storage, CV_HOUGH_PROBABILISTIC, - rho, theta, threshold, minLineLength, maxGap ); - seqToMat(seq, _lines); -} - -void cv::HoughCircles( InputArray _image, OutputArray _circles, - int method, double dp, double min_dist, - double param1, double param2, - int minRadius, int maxRadius ) -{ - Ptr storage = cvCreateMemStorage(STORAGE_SIZE); - Mat image = _image.getMat(); - CvMat c_image = image; - CvSeq* seq = cvHoughCircles( &c_image, storage, method, - dp, min_dist, param1, param2, minRadius, maxRadius ); - seqToMat(seq, _circles); -} - -/* End of file. */ diff --git a/modules/imgproc/src/imgwarp.cpp b/modules/imgproc/src/imgwarp.cpp deleted file mode 100644 index 6cbb416..0000000 --- a/modules/imgproc/src/imgwarp.cpp +++ /dev/null @@ -1,4250 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -/* //////////////////////////////////////////////////////////////////// -// -// Geometrical transforms on images and matrices: rotation, zoom etc. -// -// */ - -#include "precomp.hpp" -#include -#include - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -static IppStatus sts = ippInit(); -#endif - -namespace cv -{ - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - typedef IppStatus (CV_STDCALL* ippiSetFunc)(const void*, void *, int, IppiSize); - typedef IppStatus (CV_STDCALL* ippiWarpPerspectiveBackFunc)(const void*, IppiSize, int, IppiRect, void *, int, IppiRect, double [3][3], int); - typedef IppStatus (CV_STDCALL* ippiWarpAffineBackFunc)(const void*, IppiSize, int, IppiRect, void *, int, IppiRect, double [2][3], int); - typedef IppStatus (CV_STDCALL* ippiResizeSqrPixelFunc)(const void*, IppiSize, int, IppiRect, void*, int, IppiRect, double, double, double, double, int, Ipp8u *); - - template - bool IPPSetSimple(cv::Scalar value, void *dataPointer, int step, IppiSize &size, ippiSetFunc func) - { - Type values[channels]; - for( int i = 0; i < channels; i++ ) - values[i] = (Type)value[i]; - return func(values, dataPointer, step, size) >= 0; - } - - bool IPPSet(const cv::Scalar &value, void *dataPointer, int step, IppiSize &size, int channels, int depth) - { - if( channels == 1 ) - { - switch( depth ) - { - case CV_8U: - return ippiSet_8u_C1R((Ipp8u)value[0], (Ipp8u *)dataPointer, step, size) >= 0; - case CV_16U: - return ippiSet_16u_C1R((Ipp16u)value[0], (Ipp16u *)dataPointer, step, size) >= 0; - case CV_32F: - return ippiSet_32f_C1R((Ipp32f)value[0], (Ipp32f *)dataPointer, step, size) >= 0; - } - } - else - { - if( channels == 3 ) - { - switch( depth ) - { - case CV_8U: - return IPPSetSimple<3, Ipp8u>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_8u_C3R); - case CV_16U: - return IPPSetSimple<3, Ipp16u>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_16u_C3R); - case CV_32F: - return IPPSetSimple<3, Ipp32f>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_32f_C3R); - } - } - else if( channels == 4 ) - { - switch( depth ) - { - case CV_8U: - return IPPSetSimple<4, Ipp8u>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_8u_C4R); - case CV_16U: - return IPPSetSimple<4, Ipp16u>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_16u_C4R); - case CV_32F: - return IPPSetSimple<4, Ipp32f>(value, dataPointer, step, size, (ippiSetFunc)ippiSet_32f_C4R); - } - } - } - return false; - } -#endif - -/************** interpolation formulas and tables ***************/ - -const int INTER_RESIZE_COEF_BITS=11; -const int INTER_RESIZE_COEF_SCALE=1 << INTER_RESIZE_COEF_BITS; - -const int INTER_REMAP_COEF_BITS=15; -const int INTER_REMAP_COEF_SCALE=1 << INTER_REMAP_COEF_BITS; - -static uchar NNDeltaTab_i[INTER_TAB_SIZE2][2]; - -static float BilinearTab_f[INTER_TAB_SIZE2][2][2]; -static short BilinearTab_i[INTER_TAB_SIZE2][2][2]; - -#if CV_SSE2 -static short BilinearTab_iC4_buf[INTER_TAB_SIZE2+2][2][8]; -static short (*BilinearTab_iC4)[2][8] = (short (*)[2][8])alignPtr(BilinearTab_iC4_buf, 16); -#endif - -static float BicubicTab_f[INTER_TAB_SIZE2][4][4]; -static short BicubicTab_i[INTER_TAB_SIZE2][4][4]; - -static float Lanczos4Tab_f[INTER_TAB_SIZE2][8][8]; -static short Lanczos4Tab_i[INTER_TAB_SIZE2][8][8]; - -static inline void interpolateLinear( float x, float* coeffs ) -{ - coeffs[0] = 1.f - x; - coeffs[1] = x; -} - -static inline void interpolateCubic( float x, float* coeffs ) -{ - const float A = -0.75f; - - coeffs[0] = ((A*(x + 1) - 5*A)*(x + 1) + 8*A)*(x + 1) - 4*A; - coeffs[1] = ((A + 2)*x - (A + 3))*x*x + 1; - coeffs[2] = ((A + 2)*(1 - x) - (A + 3))*(1 - x)*(1 - x) + 1; - coeffs[3] = 1.f - coeffs[0] - coeffs[1] - coeffs[2]; -} - -static inline void interpolateLanczos4( float x, float* coeffs ) -{ - static const double s45 = 0.70710678118654752440084436210485; - static const double cs[][2]= - {{1, 0}, {-s45, -s45}, {0, 1}, {s45, -s45}, {-1, 0}, {s45, s45}, {0, -1}, {-s45, s45}}; - - if( x < FLT_EPSILON ) - { - for( int i = 0; i < 8; i++ ) - coeffs[i] = 0; - coeffs[3] = 1; - return; - } - - float sum = 0; - double y0=-(x+3)*CV_PI*0.25, s0 = sin(y0), c0=cos(y0); - for(int i = 0; i < 8; i++ ) - { - double y = -(x+3-i)*CV_PI*0.25; - coeffs[i] = (float)((cs[i][0]*s0 + cs[i][1]*c0)/(y*y)); - sum += coeffs[i]; - } - - sum = 1.f/sum; - for(int i = 0; i < 8; i++ ) - coeffs[i] *= sum; -} - -static void initInterTab1D(int method, float* tab, int tabsz) -{ - float scale = 1.f/tabsz; - if( method == INTER_LINEAR ) - { - for( int i = 0; i < tabsz; i++, tab += 2 ) - interpolateLinear( i*scale, tab ); - } - else if( method == INTER_CUBIC ) - { - for( int i = 0; i < tabsz; i++, tab += 4 ) - interpolateCubic( i*scale, tab ); - } - else if( method == INTER_LANCZOS4 ) - { - for( int i = 0; i < tabsz; i++, tab += 8 ) - interpolateLanczos4( i*scale, tab ); - } - else - CV_Error( CV_StsBadArg, "Unknown interpolation method" ); -} - - -static const void* initInterTab2D( int method, bool fixpt ) -{ - static bool inittab[INTER_MAX+1] = {false}; - float* tab = 0; - short* itab = 0; - int ksize = 0; - if( method == INTER_LINEAR ) - tab = BilinearTab_f[0][0], itab = BilinearTab_i[0][0], ksize=2; - else if( method == INTER_CUBIC ) - tab = BicubicTab_f[0][0], itab = BicubicTab_i[0][0], ksize=4; - else if( method == INTER_LANCZOS4 ) - tab = Lanczos4Tab_f[0][0], itab = Lanczos4Tab_i[0][0], ksize=8; - else - CV_Error( CV_StsBadArg, "Unknown/unsupported interpolation type" ); - - if( !inittab[method] ) - { - AutoBuffer _tab(8*INTER_TAB_SIZE); - int i, j, k1, k2; - initInterTab1D(method, _tab, INTER_TAB_SIZE); - for( i = 0; i < INTER_TAB_SIZE; i++ ) - for( j = 0; j < INTER_TAB_SIZE; j++, tab += ksize*ksize, itab += ksize*ksize ) - { - int isum = 0; - NNDeltaTab_i[i*INTER_TAB_SIZE+j][0] = j < INTER_TAB_SIZE/2; - NNDeltaTab_i[i*INTER_TAB_SIZE+j][1] = i < INTER_TAB_SIZE/2; - - for( k1 = 0; k1 < ksize; k1++ ) - { - float vy = _tab[i*ksize + k1]; - for( k2 = 0; k2 < ksize; k2++ ) - { - float v = vy*_tab[j*ksize + k2]; - tab[k1*ksize + k2] = v; - isum += itab[k1*ksize + k2] = saturate_cast(v*INTER_REMAP_COEF_SCALE); - } - } - - if( isum != INTER_REMAP_COEF_SCALE ) - { - int diff = isum - INTER_REMAP_COEF_SCALE; - int ksize2 = ksize/2, Mk1=ksize2, Mk2=ksize2, mk1=ksize2, mk2=ksize2; - for( k1 = ksize2; k1 < ksize2+2; k1++ ) - for( k2 = ksize2; k2 < ksize2+2; k2++ ) - { - if( itab[k1*ksize+k2] < itab[mk1*ksize+mk2] ) - mk1 = k1, mk2 = k2; - else if( itab[k1*ksize+k2] > itab[Mk1*ksize+Mk2] ) - Mk1 = k1, Mk2 = k2; - } - if( diff < 0 ) - itab[Mk1*ksize + Mk2] = (short)(itab[Mk1*ksize + Mk2] - diff); - else - itab[mk1*ksize + mk2] = (short)(itab[mk1*ksize + mk2] - diff); - } - } - tab -= INTER_TAB_SIZE2*ksize*ksize; - itab -= INTER_TAB_SIZE2*ksize*ksize; -#if CV_SSE2 - if( method == INTER_LINEAR ) - { - for( i = 0; i < INTER_TAB_SIZE2; i++ ) - for( j = 0; j < 4; j++ ) - { - BilinearTab_iC4[i][0][j*2] = BilinearTab_i[i][0][0]; - BilinearTab_iC4[i][0][j*2+1] = BilinearTab_i[i][0][1]; - BilinearTab_iC4[i][1][j*2] = BilinearTab_i[i][1][0]; - BilinearTab_iC4[i][1][j*2+1] = BilinearTab_i[i][1][1]; - } - } -#endif - inittab[method] = true; - } - return fixpt ? (const void*)itab : (const void*)tab; -} - -#ifndef __MINGW32__ -static bool initAllInterTab2D() -{ - return initInterTab2D( INTER_LINEAR, false ) && - initInterTab2D( INTER_LINEAR, true ) && - initInterTab2D( INTER_CUBIC, false ) && - initInterTab2D( INTER_CUBIC, true ) && - initInterTab2D( INTER_LANCZOS4, false ) && - initInterTab2D( INTER_LANCZOS4, true ); -} - -static volatile bool doInitAllInterTab2D = initAllInterTab2D(); -#endif - -template struct Cast -{ - typedef ST type1; - typedef DT rtype; - - DT operator()(ST val) const { return saturate_cast
          (val); } -}; - -template struct FixedPtCast -{ - typedef ST type1; - typedef DT rtype; - enum { SHIFT = bits, DELTA = 1 << (bits-1) }; - - DT operator()(ST val) const { return saturate_cast
          ((val + DELTA)>>SHIFT); } -}; - -/****************************************************************************************\ -* Resize * -\****************************************************************************************/ - -class resizeNNInvoker : - public ParallelLoopBody -{ -public: - resizeNNInvoker(const Mat& _src, Mat &_dst, int *_x_ofs, int _pix_size4, double _ify) : - ParallelLoopBody(), src(_src), dst(_dst), x_ofs(_x_ofs), pix_size4(_pix_size4), - ify(_ify) - { - } - - virtual void operator() (const Range& range) const - { - Size ssize = src.size(), dsize = dst.size(); - int y, x, pix_size = (int)src.elemSize(); - - for( y = range.start; y < range.end; y++ ) - { - uchar* D = dst.data + dst.step*y; - int sy = std::min(cvFloor(y*ify), ssize.height-1); - const uchar* S = src.data + src.step*sy; - - switch( pix_size ) - { - case 1: - for( x = 0; x <= dsize.width - 2; x += 2 ) - { - uchar t0 = S[x_ofs[x]]; - uchar t1 = S[x_ofs[x+1]]; - D[x] = t0; - D[x+1] = t1; - } - - for( ; x < dsize.width; x++ ) - D[x] = S[x_ofs[x]]; - break; - case 2: - for( x = 0; x < dsize.width; x++ ) - *(ushort*)(D + x*2) = *(ushort*)(S + x_ofs[x]); - break; - case 3: - for( x = 0; x < dsize.width; x++, D += 3 ) - { - const uchar* _tS = S + x_ofs[x]; - D[0] = _tS[0]; D[1] = _tS[1]; D[2] = _tS[2]; - } - break; - case 4: - for( x = 0; x < dsize.width; x++ ) - *(int*)(D + x*4) = *(int*)(S + x_ofs[x]); - break; - case 6: - for( x = 0; x < dsize.width; x++, D += 6 ) - { - const ushort* _tS = (const ushort*)(S + x_ofs[x]); - ushort* _tD = (ushort*)D; - _tD[0] = _tS[0]; _tD[1] = _tS[1]; _tD[2] = _tS[2]; - } - break; - case 8: - for( x = 0; x < dsize.width; x++, D += 8 ) - { - const int* _tS = (const int*)(S + x_ofs[x]); - int* _tD = (int*)D; - _tD[0] = _tS[0]; _tD[1] = _tS[1]; - } - break; - case 12: - for( x = 0; x < dsize.width; x++, D += 12 ) - { - const int* _tS = (const int*)(S + x_ofs[x]); - int* _tD = (int*)D; - _tD[0] = _tS[0]; _tD[1] = _tS[1]; _tD[2] = _tS[2]; - } - break; - default: - for( x = 0; x < dsize.width; x++, D += pix_size ) - { - const int* _tS = (const int*)(S + x_ofs[x]); - int* _tD = (int*)D; - for( int k = 0; k < pix_size4; k++ ) - _tD[k] = _tS[k]; - } - } - } - } - -private: - const Mat src; - Mat dst; - int* x_ofs, pix_size4; - double ify; - - resizeNNInvoker(const resizeNNInvoker&); - resizeNNInvoker& operator=(const resizeNNInvoker&); -}; - -static void -resizeNN( const Mat& src, Mat& dst, double fx, double fy ) -{ - Size ssize = src.size(), dsize = dst.size(); - AutoBuffer _x_ofs(dsize.width); - int* x_ofs = _x_ofs; - int pix_size = (int)src.elemSize(); - int pix_size4 = (int)(pix_size / sizeof(int)); - double ifx = 1./fx, ify = 1./fy; - int x; - - for( x = 0; x < dsize.width; x++ ) - { - int sx = cvFloor(x*ifx); - x_ofs[x] = std::min(sx, ssize.width-1)*pix_size; - } - - Range range(0, dsize.height); - resizeNNInvoker invoker(src, dst, x_ofs, pix_size4, ify); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); -} - - -struct VResizeNoVec -{ - int operator()(const uchar**, uchar*, const uchar*, int ) const { return 0; } -}; - -struct HResizeNoVec -{ - int operator()(const uchar**, uchar**, int, const int*, - const uchar*, int, int, int, int, int) const { return 0; } -}; - -#if CV_SSE2 - -struct VResizeLinearVec_32s8u -{ - int operator()(const uchar** _src, uchar* dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const int** src = (const int**)_src; - const short* beta = (const short*)_beta; - const int *S0 = src[0], *S1 = src[1]; - int x = 0; - __m128i b0 = _mm_set1_epi16(beta[0]), b1 = _mm_set1_epi16(beta[1]); - __m128i delta = _mm_set1_epi16(2); - - if( (((size_t)S0|(size_t)S1)&15) == 0 ) - for( ; x <= width - 16; x += 16 ) - { - __m128i x0, x1, x2, y0, y1, y2; - x0 = _mm_load_si128((const __m128i*)(S0 + x)); - x1 = _mm_load_si128((const __m128i*)(S0 + x + 4)); - y0 = _mm_load_si128((const __m128i*)(S1 + x)); - y1 = _mm_load_si128((const __m128i*)(S1 + x + 4)); - x0 = _mm_packs_epi32(_mm_srai_epi32(x0, 4), _mm_srai_epi32(x1, 4)); - y0 = _mm_packs_epi32(_mm_srai_epi32(y0, 4), _mm_srai_epi32(y1, 4)); - - x1 = _mm_load_si128((const __m128i*)(S0 + x + 8)); - x2 = _mm_load_si128((const __m128i*)(S0 + x + 12)); - y1 = _mm_load_si128((const __m128i*)(S1 + x + 8)); - y2 = _mm_load_si128((const __m128i*)(S1 + x + 12)); - x1 = _mm_packs_epi32(_mm_srai_epi32(x1, 4), _mm_srai_epi32(x2, 4)); - y1 = _mm_packs_epi32(_mm_srai_epi32(y1, 4), _mm_srai_epi32(y2, 4)); - - x0 = _mm_adds_epi16(_mm_mulhi_epi16( x0, b0 ), _mm_mulhi_epi16( y0, b1 )); - x1 = _mm_adds_epi16(_mm_mulhi_epi16( x1, b0 ), _mm_mulhi_epi16( y1, b1 )); - - x0 = _mm_srai_epi16(_mm_adds_epi16(x0, delta), 2); - x1 = _mm_srai_epi16(_mm_adds_epi16(x1, delta), 2); - _mm_storeu_si128( (__m128i*)(dst + x), _mm_packus_epi16(x0, x1)); - } - else - for( ; x <= width - 16; x += 16 ) - { - __m128i x0, x1, x2, y0, y1, y2; - x0 = _mm_loadu_si128((const __m128i*)(S0 + x)); - x1 = _mm_loadu_si128((const __m128i*)(S0 + x + 4)); - y0 = _mm_loadu_si128((const __m128i*)(S1 + x)); - y1 = _mm_loadu_si128((const __m128i*)(S1 + x + 4)); - x0 = _mm_packs_epi32(_mm_srai_epi32(x0, 4), _mm_srai_epi32(x1, 4)); - y0 = _mm_packs_epi32(_mm_srai_epi32(y0, 4), _mm_srai_epi32(y1, 4)); - - x1 = _mm_loadu_si128((const __m128i*)(S0 + x + 8)); - x2 = _mm_loadu_si128((const __m128i*)(S0 + x + 12)); - y1 = _mm_loadu_si128((const __m128i*)(S1 + x + 8)); - y2 = _mm_loadu_si128((const __m128i*)(S1 + x + 12)); - x1 = _mm_packs_epi32(_mm_srai_epi32(x1, 4), _mm_srai_epi32(x2, 4)); - y1 = _mm_packs_epi32(_mm_srai_epi32(y1, 4), _mm_srai_epi32(y2, 4)); - - x0 = _mm_adds_epi16(_mm_mulhi_epi16( x0, b0 ), _mm_mulhi_epi16( y0, b1 )); - x1 = _mm_adds_epi16(_mm_mulhi_epi16( x1, b0 ), _mm_mulhi_epi16( y1, b1 )); - - x0 = _mm_srai_epi16(_mm_adds_epi16(x0, delta), 2); - x1 = _mm_srai_epi16(_mm_adds_epi16(x1, delta), 2); - _mm_storeu_si128( (__m128i*)(dst + x), _mm_packus_epi16(x0, x1)); - } - - for( ; x < width - 4; x += 4 ) - { - __m128i x0, y0; - x0 = _mm_srai_epi32(_mm_loadu_si128((const __m128i*)(S0 + x)), 4); - y0 = _mm_srai_epi32(_mm_loadu_si128((const __m128i*)(S1 + x)), 4); - x0 = _mm_packs_epi32(x0, x0); - y0 = _mm_packs_epi32(y0, y0); - x0 = _mm_adds_epi16(_mm_mulhi_epi16(x0, b0), _mm_mulhi_epi16(y0, b1)); - x0 = _mm_srai_epi16(_mm_adds_epi16(x0, delta), 2); - x0 = _mm_packus_epi16(x0, x0); - *(int*)(dst + x) = _mm_cvtsi128_si32(x0); - } - - return x; - } -}; - - -template struct VResizeLinearVec_32f16 -{ - int operator()(const uchar** _src, uchar* _dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const float** src = (const float**)_src; - const float* beta = (const float*)_beta; - const float *S0 = src[0], *S1 = src[1]; - ushort* dst = (ushort*)_dst; - int x = 0; - - __m128 b0 = _mm_set1_ps(beta[0]), b1 = _mm_set1_ps(beta[1]); - __m128i preshift = _mm_set1_epi32(shiftval); - __m128i postshift = _mm_set1_epi16((short)shiftval); - - if( (((size_t)S0|(size_t)S1)&15) == 0 ) - for( ; x <= width - 16; x += 16 ) - { - __m128 x0, x1, y0, y1; - __m128i t0, t1, t2; - x0 = _mm_load_ps(S0 + x); - x1 = _mm_load_ps(S0 + x + 4); - y0 = _mm_load_ps(S1 + x); - y1 = _mm_load_ps(S1 + x + 4); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - t0 = _mm_add_epi32(_mm_cvtps_epi32(x0), preshift); - t2 = _mm_add_epi32(_mm_cvtps_epi32(x1), preshift); - t0 = _mm_add_epi16(_mm_packs_epi32(t0, t2), postshift); - - x0 = _mm_load_ps(S0 + x + 8); - x1 = _mm_load_ps(S0 + x + 12); - y0 = _mm_load_ps(S1 + x + 8); - y1 = _mm_load_ps(S1 + x + 12); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - t1 = _mm_add_epi32(_mm_cvtps_epi32(x0), preshift); - t2 = _mm_add_epi32(_mm_cvtps_epi32(x1), preshift); - t1 = _mm_add_epi16(_mm_packs_epi32(t1, t2), postshift); - - _mm_storeu_si128( (__m128i*)(dst + x), t0); - _mm_storeu_si128( (__m128i*)(dst + x + 8), t1); - } - else - for( ; x <= width - 16; x += 16 ) - { - __m128 x0, x1, y0, y1; - __m128i t0, t1, t2; - x0 = _mm_loadu_ps(S0 + x); - x1 = _mm_loadu_ps(S0 + x + 4); - y0 = _mm_loadu_ps(S1 + x); - y1 = _mm_loadu_ps(S1 + x + 4); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - t0 = _mm_add_epi32(_mm_cvtps_epi32(x0), preshift); - t2 = _mm_add_epi32(_mm_cvtps_epi32(x1), preshift); - t0 = _mm_add_epi16(_mm_packs_epi32(t0, t2), postshift); - - x0 = _mm_loadu_ps(S0 + x + 8); - x1 = _mm_loadu_ps(S0 + x + 12); - y0 = _mm_loadu_ps(S1 + x + 8); - y1 = _mm_loadu_ps(S1 + x + 12); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - t1 = _mm_add_epi32(_mm_cvtps_epi32(x0), preshift); - t2 = _mm_add_epi32(_mm_cvtps_epi32(x1), preshift); - t1 = _mm_add_epi16(_mm_packs_epi32(t1, t2), postshift); - - _mm_storeu_si128( (__m128i*)(dst + x), t0); - _mm_storeu_si128( (__m128i*)(dst + x + 8), t1); - } - - for( ; x < width - 4; x += 4 ) - { - __m128 x0, y0; - __m128i t0; - x0 = _mm_loadu_ps(S0 + x); - y0 = _mm_loadu_ps(S1 + x); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - t0 = _mm_add_epi32(_mm_cvtps_epi32(x0), preshift); - t0 = _mm_add_epi16(_mm_packs_epi32(t0, t0), postshift); - _mm_storel_epi64( (__m128i*)(dst + x), t0); - } - - return x; - } -}; - -typedef VResizeLinearVec_32f16 VResizeLinearVec_32f16u; -typedef VResizeLinearVec_32f16<0> VResizeLinearVec_32f16s; - -struct VResizeLinearVec_32f -{ - int operator()(const uchar** _src, uchar* _dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - const float** src = (const float**)_src; - const float* beta = (const float*)_beta; - const float *S0 = src[0], *S1 = src[1]; - float* dst = (float*)_dst; - int x = 0; - - __m128 b0 = _mm_set1_ps(beta[0]), b1 = _mm_set1_ps(beta[1]); - - if( (((size_t)S0|(size_t)S1)&15) == 0 ) - for( ; x <= width - 8; x += 8 ) - { - __m128 x0, x1, y0, y1; - x0 = _mm_load_ps(S0 + x); - x1 = _mm_load_ps(S0 + x + 4); - y0 = _mm_load_ps(S1 + x); - y1 = _mm_load_ps(S1 + x + 4); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - - _mm_storeu_ps( dst + x, x0); - _mm_storeu_ps( dst + x + 4, x1); - } - else - for( ; x <= width - 8; x += 8 ) - { - __m128 x0, x1, y0, y1; - x0 = _mm_loadu_ps(S0 + x); - x1 = _mm_loadu_ps(S0 + x + 4); - y0 = _mm_loadu_ps(S1 + x); - y1 = _mm_loadu_ps(S1 + x + 4); - - x0 = _mm_add_ps(_mm_mul_ps(x0, b0), _mm_mul_ps(y0, b1)); - x1 = _mm_add_ps(_mm_mul_ps(x1, b0), _mm_mul_ps(y1, b1)); - - _mm_storeu_ps( dst + x, x0); - _mm_storeu_ps( dst + x + 4, x1); - } - - return x; - } -}; - - -struct VResizeCubicVec_32s8u -{ - int operator()(const uchar** _src, uchar* dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const int** src = (const int**)_src; - const short* beta = (const short*)_beta; - const int *S0 = src[0], *S1 = src[1], *S2 = src[2], *S3 = src[3]; - int x = 0; - float scale = 1.f/(INTER_RESIZE_COEF_SCALE*INTER_RESIZE_COEF_SCALE); - __m128 b0 = _mm_set1_ps(beta[0]*scale), b1 = _mm_set1_ps(beta[1]*scale), - b2 = _mm_set1_ps(beta[2]*scale), b3 = _mm_set1_ps(beta[3]*scale); - - if( (((size_t)S0|(size_t)S1|(size_t)S2|(size_t)S3)&15) == 0 ) - for( ; x <= width - 8; x += 8 ) - { - __m128i x0, x1, y0, y1; - __m128 s0, s1, f0, f1; - x0 = _mm_load_si128((const __m128i*)(S0 + x)); - x1 = _mm_load_si128((const __m128i*)(S0 + x + 4)); - y0 = _mm_load_si128((const __m128i*)(S1 + x)); - y1 = _mm_load_si128((const __m128i*)(S1 + x + 4)); - - s0 = _mm_mul_ps(_mm_cvtepi32_ps(x0), b0); - s1 = _mm_mul_ps(_mm_cvtepi32_ps(x1), b0); - f0 = _mm_mul_ps(_mm_cvtepi32_ps(y0), b1); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(y1), b1); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - - x0 = _mm_load_si128((const __m128i*)(S2 + x)); - x1 = _mm_load_si128((const __m128i*)(S2 + x + 4)); - y0 = _mm_load_si128((const __m128i*)(S3 + x)); - y1 = _mm_load_si128((const __m128i*)(S3 + x + 4)); - - f0 = _mm_mul_ps(_mm_cvtepi32_ps(x0), b2); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(x1), b2); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - f0 = _mm_mul_ps(_mm_cvtepi32_ps(y0), b3); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(y1), b3); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - - x0 = _mm_cvtps_epi32(s0); - x1 = _mm_cvtps_epi32(s1); - - x0 = _mm_packs_epi32(x0, x1); - _mm_storel_epi64( (__m128i*)(dst + x), _mm_packus_epi16(x0, x0)); - } - else - for( ; x <= width - 8; x += 8 ) - { - __m128i x0, x1, y0, y1; - __m128 s0, s1, f0, f1; - x0 = _mm_loadu_si128((const __m128i*)(S0 + x)); - x1 = _mm_loadu_si128((const __m128i*)(S0 + x + 4)); - y0 = _mm_loadu_si128((const __m128i*)(S1 + x)); - y1 = _mm_loadu_si128((const __m128i*)(S1 + x + 4)); - - s0 = _mm_mul_ps(_mm_cvtepi32_ps(x0), b0); - s1 = _mm_mul_ps(_mm_cvtepi32_ps(x1), b0); - f0 = _mm_mul_ps(_mm_cvtepi32_ps(y0), b1); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(y1), b1); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - - x0 = _mm_loadu_si128((const __m128i*)(S2 + x)); - x1 = _mm_loadu_si128((const __m128i*)(S2 + x + 4)); - y0 = _mm_loadu_si128((const __m128i*)(S3 + x)); - y1 = _mm_loadu_si128((const __m128i*)(S3 + x + 4)); - - f0 = _mm_mul_ps(_mm_cvtepi32_ps(x0), b2); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(x1), b2); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - f0 = _mm_mul_ps(_mm_cvtepi32_ps(y0), b3); - f1 = _mm_mul_ps(_mm_cvtepi32_ps(y1), b3); - s0 = _mm_add_ps(s0, f0); - s1 = _mm_add_ps(s1, f1); - - x0 = _mm_cvtps_epi32(s0); - x1 = _mm_cvtps_epi32(s1); - - x0 = _mm_packs_epi32(x0, x1); - _mm_storel_epi64( (__m128i*)(dst + x), _mm_packus_epi16(x0, x0)); - } - - return x; - } -}; - - -template struct VResizeCubicVec_32f16 -{ - int operator()(const uchar** _src, uchar* _dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - const float** src = (const float**)_src; - const float* beta = (const float*)_beta; - const float *S0 = src[0], *S1 = src[1], *S2 = src[2], *S3 = src[3]; - ushort* dst = (ushort*)_dst; - int x = 0; - __m128 b0 = _mm_set1_ps(beta[0]), b1 = _mm_set1_ps(beta[1]), - b2 = _mm_set1_ps(beta[2]), b3 = _mm_set1_ps(beta[3]); - __m128i preshift = _mm_set1_epi32(shiftval); - __m128i postshift = _mm_set1_epi16((short)shiftval); - - for( ; x <= width - 8; x += 8 ) - { - __m128 x0, x1, y0, y1, s0, s1; - __m128i t0, t1; - x0 = _mm_loadu_ps(S0 + x); - x1 = _mm_loadu_ps(S0 + x + 4); - y0 = _mm_loadu_ps(S1 + x); - y1 = _mm_loadu_ps(S1 + x + 4); - - s0 = _mm_mul_ps(x0, b0); - s1 = _mm_mul_ps(x1, b0); - y0 = _mm_mul_ps(y0, b1); - y1 = _mm_mul_ps(y1, b1); - s0 = _mm_add_ps(s0, y0); - s1 = _mm_add_ps(s1, y1); - - x0 = _mm_loadu_ps(S2 + x); - x1 = _mm_loadu_ps(S2 + x + 4); - y0 = _mm_loadu_ps(S3 + x); - y1 = _mm_loadu_ps(S3 + x + 4); - - x0 = _mm_mul_ps(x0, b2); - x1 = _mm_mul_ps(x1, b2); - y0 = _mm_mul_ps(y0, b3); - y1 = _mm_mul_ps(y1, b3); - s0 = _mm_add_ps(s0, x0); - s1 = _mm_add_ps(s1, x1); - s0 = _mm_add_ps(s0, y0); - s1 = _mm_add_ps(s1, y1); - - t0 = _mm_add_epi32(_mm_cvtps_epi32(s0), preshift); - t1 = _mm_add_epi32(_mm_cvtps_epi32(s1), preshift); - - t0 = _mm_add_epi16(_mm_packs_epi32(t0, t1), postshift); - _mm_storeu_si128( (__m128i*)(dst + x), t0); - } - - return x; - } -}; - -typedef VResizeCubicVec_32f16 VResizeCubicVec_32f16u; -typedef VResizeCubicVec_32f16<0> VResizeCubicVec_32f16s; - -struct VResizeCubicVec_32f -{ - int operator()(const uchar** _src, uchar* _dst, const uchar* _beta, int width ) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - const float** src = (const float**)_src; - const float* beta = (const float*)_beta; - const float *S0 = src[0], *S1 = src[1], *S2 = src[2], *S3 = src[3]; - float* dst = (float*)_dst; - int x = 0; - __m128 b0 = _mm_set1_ps(beta[0]), b1 = _mm_set1_ps(beta[1]), - b2 = _mm_set1_ps(beta[2]), b3 = _mm_set1_ps(beta[3]); - - for( ; x <= width - 8; x += 8 ) - { - __m128 x0, x1, y0, y1, s0, s1; - x0 = _mm_loadu_ps(S0 + x); - x1 = _mm_loadu_ps(S0 + x + 4); - y0 = _mm_loadu_ps(S1 + x); - y1 = _mm_loadu_ps(S1 + x + 4); - - s0 = _mm_mul_ps(x0, b0); - s1 = _mm_mul_ps(x1, b0); - y0 = _mm_mul_ps(y0, b1); - y1 = _mm_mul_ps(y1, b1); - s0 = _mm_add_ps(s0, y0); - s1 = _mm_add_ps(s1, y1); - - x0 = _mm_loadu_ps(S2 + x); - x1 = _mm_loadu_ps(S2 + x + 4); - y0 = _mm_loadu_ps(S3 + x); - y1 = _mm_loadu_ps(S3 + x + 4); - - x0 = _mm_mul_ps(x0, b2); - x1 = _mm_mul_ps(x1, b2); - y0 = _mm_mul_ps(y0, b3); - y1 = _mm_mul_ps(y1, b3); - s0 = _mm_add_ps(s0, x0); - s1 = _mm_add_ps(s1, x1); - s0 = _mm_add_ps(s0, y0); - s1 = _mm_add_ps(s1, y1); - - _mm_storeu_ps( dst + x, s0); - _mm_storeu_ps( dst + x + 4, s1); - } - - return x; - } -}; - -#else - -typedef VResizeNoVec VResizeLinearVec_32s8u; -typedef VResizeNoVec VResizeLinearVec_32f16u; -typedef VResizeNoVec VResizeLinearVec_32f16s; -typedef VResizeNoVec VResizeLinearVec_32f; - -typedef VResizeNoVec VResizeCubicVec_32s8u; -typedef VResizeNoVec VResizeCubicVec_32f16u; -typedef VResizeNoVec VResizeCubicVec_32f16s; -typedef VResizeNoVec VResizeCubicVec_32f; - -#endif - -typedef HResizeNoVec HResizeLinearVec_8u32s; -typedef HResizeNoVec HResizeLinearVec_16u32f; -typedef HResizeNoVec HResizeLinearVec_16s32f; -typedef HResizeNoVec HResizeLinearVec_32f; -typedef HResizeNoVec HResizeLinearVec_64f; - - -template -struct HResizeLinear -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const T** src, WT** dst, int count, - const int* xofs, const AT* alpha, - int swidth, int dwidth, int cn, int xmin, int xmax ) const - { - int dx, k; - VecOp vecOp; - - int dx0 = vecOp((const uchar**)src, (uchar**)dst, count, - xofs, (const uchar*)alpha, swidth, dwidth, cn, xmin, xmax ); - - for( k = 0; k <= count - 2; k++ ) - { - const T *S0 = src[k], *S1 = src[k+1]; - WT *D0 = dst[k], *D1 = dst[k+1]; - for( dx = dx0; dx < xmax; dx++ ) - { - int sx = xofs[dx]; - WT a0 = alpha[dx*2], a1 = alpha[dx*2+1]; - WT t0 = S0[sx]*a0 + S0[sx + cn]*a1; - WT t1 = S1[sx]*a0 + S1[sx + cn]*a1; - D0[dx] = t0; D1[dx] = t1; - } - - for( ; dx < dwidth; dx++ ) - { - int sx = xofs[dx]; - D0[dx] = WT(S0[sx]*ONE); D1[dx] = WT(S1[sx]*ONE); - } - } - - for( ; k < count; k++ ) - { - const T *S = src[k]; - WT *D = dst[k]; - for( dx = 0; dx < xmax; dx++ ) - { - int sx = xofs[dx]; - D[dx] = S[sx]*alpha[dx*2] + S[sx+cn]*alpha[dx*2+1]; - } - - for( ; dx < dwidth; dx++ ) - D[dx] = WT(S[xofs[dx]]*ONE); - } - } -}; - - -template -struct VResizeLinear -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const WT** src, T* dst, const AT* beta, int width ) const - { - WT b0 = beta[0], b1 = beta[1]; - const WT *S0 = src[0], *S1 = src[1]; - CastOp castOp; - VecOp vecOp; - - int x = vecOp((const uchar**)src, (uchar*)dst, (const uchar*)beta, width); - #if CV_ENABLE_UNROLLED - for( ; x <= width - 4; x += 4 ) - { - WT t0, t1; - t0 = S0[x]*b0 + S1[x]*b1; - t1 = S0[x+1]*b0 + S1[x+1]*b1; - dst[x] = castOp(t0); dst[x+1] = castOp(t1); - t0 = S0[x+2]*b0 + S1[x+2]*b1; - t1 = S0[x+3]*b0 + S1[x+3]*b1; - dst[x+2] = castOp(t0); dst[x+3] = castOp(t1); - } - #endif - for( ; x < width; x++ ) - dst[x] = castOp(S0[x]*b0 + S1[x]*b1); - } -}; - -template<> -struct VResizeLinear, VResizeLinearVec_32s8u> -{ - typedef uchar value_type; - typedef int buf_type; - typedef short alpha_type; - - void operator()(const buf_type** src, value_type* dst, const alpha_type* beta, int width ) const - { - alpha_type b0 = beta[0], b1 = beta[1]; - const buf_type *S0 = src[0], *S1 = src[1]; - VResizeLinearVec_32s8u vecOp; - - int x = vecOp((const uchar**)src, (uchar*)dst, (const uchar*)beta, width); - #if CV_ENABLE_UNROLLED - for( ; x <= width - 4; x += 4 ) - { - dst[x+0] = uchar(( ((b0 * (S0[x+0] >> 4)) >> 16) + ((b1 * (S1[x+0] >> 4)) >> 16) + 2)>>2); - dst[x+1] = uchar(( ((b0 * (S0[x+1] >> 4)) >> 16) + ((b1 * (S1[x+1] >> 4)) >> 16) + 2)>>2); - dst[x+2] = uchar(( ((b0 * (S0[x+2] >> 4)) >> 16) + ((b1 * (S1[x+2] >> 4)) >> 16) + 2)>>2); - dst[x+3] = uchar(( ((b0 * (S0[x+3] >> 4)) >> 16) + ((b1 * (S1[x+3] >> 4)) >> 16) + 2)>>2); - } - #endif - for( ; x < width; x++ ) - dst[x] = uchar(( ((b0 * (S0[x] >> 4)) >> 16) + ((b1 * (S1[x] >> 4)) >> 16) + 2)>>2); - } -}; - - -template -struct HResizeCubic -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const T** src, WT** dst, int count, - const int* xofs, const AT* alpha, - int swidth, int dwidth, int cn, int xmin, int xmax ) const - { - for( int k = 0; k < count; k++ ) - { - const T *S = src[k]; - WT *D = dst[k]; - int dx = 0, limit = xmin; - for(;;) - { - for( ; dx < limit; dx++, alpha += 4 ) - { - int j, sx = xofs[dx] - cn; - WT v = 0; - for( j = 0; j < 4; j++ ) - { - int sxj = sx + j*cn; - if( (unsigned)sxj >= (unsigned)swidth ) - { - while( sxj < 0 ) - sxj += cn; - while( sxj >= swidth ) - sxj -= cn; - } - v += S[sxj]*alpha[j]; - } - D[dx] = v; - } - if( limit == dwidth ) - break; - for( ; dx < xmax; dx++, alpha += 4 ) - { - int sx = xofs[dx]; - D[dx] = S[sx-cn]*alpha[0] + S[sx]*alpha[1] + - S[sx+cn]*alpha[2] + S[sx+cn*2]*alpha[3]; - } - limit = dwidth; - } - alpha -= dwidth*4; - } - } -}; - - -template -struct VResizeCubic -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const WT** src, T* dst, const AT* beta, int width ) const - { - WT b0 = beta[0], b1 = beta[1], b2 = beta[2], b3 = beta[3]; - const WT *S0 = src[0], *S1 = src[1], *S2 = src[2], *S3 = src[3]; - CastOp castOp; - VecOp vecOp; - - int x = vecOp((const uchar**)src, (uchar*)dst, (const uchar*)beta, width); - for( ; x < width; x++ ) - dst[x] = castOp(S0[x]*b0 + S1[x]*b1 + S2[x]*b2 + S3[x]*b3); - } -}; - - -template -struct HResizeLanczos4 -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const T** src, WT** dst, int count, - const int* xofs, const AT* alpha, - int swidth, int dwidth, int cn, int xmin, int xmax ) const - { - for( int k = 0; k < count; k++ ) - { - const T *S = src[k]; - WT *D = dst[k]; - int dx = 0, limit = xmin; - for(;;) - { - for( ; dx < limit; dx++, alpha += 8 ) - { - int j, sx = xofs[dx] - cn*3; - WT v = 0; - for( j = 0; j < 8; j++ ) - { - int sxj = sx + j*cn; - if( (unsigned)sxj >= (unsigned)swidth ) - { - while( sxj < 0 ) - sxj += cn; - while( sxj >= swidth ) - sxj -= cn; - } - v += S[sxj]*alpha[j]; - } - D[dx] = v; - } - if( limit == dwidth ) - break; - for( ; dx < xmax; dx++, alpha += 8 ) - { - int sx = xofs[dx]; - D[dx] = S[sx-cn*3]*alpha[0] + S[sx-cn*2]*alpha[1] + - S[sx-cn]*alpha[2] + S[sx]*alpha[3] + - S[sx+cn]*alpha[4] + S[sx+cn*2]*alpha[5] + - S[sx+cn*3]*alpha[6] + S[sx+cn*4]*alpha[7]; - } - limit = dwidth; - } - alpha -= dwidth*8; - } - } -}; - - -template -struct VResizeLanczos4 -{ - typedef T value_type; - typedef WT buf_type; - typedef AT alpha_type; - - void operator()(const WT** src, T* dst, const AT* beta, int width ) const - { - CastOp castOp; - VecOp vecOp; - int k, x = vecOp((const uchar**)src, (uchar*)dst, (const uchar*)beta, width); - #if CV_ENABLE_UNROLLED - for( ; x <= width - 4; x += 4 ) - { - WT b = beta[0]; - const WT* S = src[0]; - WT s0 = S[x]*b, s1 = S[x+1]*b, s2 = S[x+2]*b, s3 = S[x+3]*b; - - for( k = 1; k < 8; k++ ) - { - b = beta[k]; S = src[k]; - s0 += S[x]*b; s1 += S[x+1]*b; - s2 += S[x+2]*b; s3 += S[x+3]*b; - } - - dst[x] = castOp(s0); dst[x+1] = castOp(s1); - dst[x+2] = castOp(s2); dst[x+3] = castOp(s3); - } - #endif - for( ; x < width; x++ ) - { - dst[x] = castOp(src[0][x]*beta[0] + src[1][x]*beta[1] + - src[2][x]*beta[2] + src[3][x]*beta[3] + src[4][x]*beta[4] + - src[5][x]*beta[5] + src[6][x]*beta[6] + src[7][x]*beta[7]); - } - } -}; - - -static inline int clip(int x, int a, int b) -{ - return x >= a ? (x < b ? x : b-1) : a; -} - -static const int MAX_ESIZE=16; - -template -class resizeGeneric_Invoker : - public ParallelLoopBody -{ -public: - typedef typename HResize::value_type T; - typedef typename HResize::buf_type WT; - typedef typename HResize::alpha_type AT; - - resizeGeneric_Invoker(const Mat& _src, Mat &_dst, const int *_xofs, const int *_yofs, - const AT* _alpha, const AT* __beta, const Size& _ssize, const Size &_dsize, - int _ksize, int _xmin, int _xmax) : - ParallelLoopBody(), src(_src), dst(_dst), xofs(_xofs), yofs(_yofs), - alpha(_alpha), _beta(__beta), ssize(_ssize), dsize(_dsize), - ksize(_ksize), xmin(_xmin), xmax(_xmax) - { - CV_Assert(ksize <= MAX_ESIZE); - } - -#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Warray-bounds" -#endif - virtual void operator() (const Range& range) const - { - int dy, cn = src.channels(); - HResize hresize; - VResize vresize; - - int bufstep = (int)alignSize(dsize.width, 16); - AutoBuffer _buffer(bufstep*ksize); - const T* srows[MAX_ESIZE]={0}; - WT* rows[MAX_ESIZE]={0}; - int prev_sy[MAX_ESIZE]; - - for(int k = 0; k < ksize; k++ ) - { - prev_sy[k] = -1; - rows[k] = (WT*)_buffer + bufstep*k; - } - - const AT* beta = _beta + ksize * range.start; - - for( dy = range.start; dy < range.end; dy++, beta += ksize ) - { - int sy0 = yofs[dy], k0=ksize, k1=0, ksize2 = ksize/2; - - for(int k = 0; k < ksize; k++ ) - { - int sy = clip(sy0 - ksize2 + 1 + k, 0, ssize.height); - for( k1 = std::max(k1, k); k1 < ksize; k1++ ) - { - if( sy == prev_sy[k1] ) // if the sy-th row has been computed already, reuse it. - { - if( k1 > k ) - memcpy( rows[k], rows[k1], bufstep*sizeof(rows[0][0]) ); - break; - } - } - if( k1 == ksize ) - k0 = std::min(k0, k); // remember the first row that needs to be computed - srows[k] = (T*)(src.data + src.step*sy); - prev_sy[k] = sy; - } - - if( k0 < ksize ) - hresize( (const T**)(srows + k0), (WT**)(rows + k0), ksize - k0, xofs, (const AT*)(alpha), - ssize.width, dsize.width, cn, xmin, xmax ); - vresize( (const WT**)rows, (T*)(dst.data + dst.step*dy), beta, dsize.width ); - } - } -#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) -# pragma GCC diagnostic pop -#endif - -private: - Mat src; - Mat dst; - const int* xofs, *yofs; - const AT* alpha, *_beta; - Size ssize, dsize; - const int ksize, xmin, xmax; - - resizeGeneric_Invoker& operator = (const resizeGeneric_Invoker&); -}; - -template -static void resizeGeneric_( const Mat& src, Mat& dst, - const int* xofs, const void* _alpha, - const int* yofs, const void* _beta, - int xmin, int xmax, int ksize ) -{ - typedef typename HResize::alpha_type AT; - - const AT* beta = (const AT*)_beta; - Size ssize = src.size(), dsize = dst.size(); - int cn = src.channels(); - ssize.width *= cn; - dsize.width *= cn; - xmin *= cn; - xmax *= cn; - // image resize is a separable operation. In case of not too strong - - Range range(0, dsize.height); - resizeGeneric_Invoker invoker(src, dst, xofs, yofs, (const AT*)_alpha, beta, - ssize, dsize, ksize, xmin, xmax); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); -} - -template -struct ResizeAreaFastNoVec -{ - ResizeAreaFastNoVec(int /*_scale_x*/, int /*_scale_y*/, - int /*_cn*/, int /*_step*//*, const int**/ /*_ofs*/) { } - int operator() (const T* /*S*/, T* /*D*/, int /*w*/) const { return 0; } -}; - -template -struct ResizeAreaFastVec -{ - ResizeAreaFastVec(int _scale_x, int _scale_y, int _cn, int _step/*, const int* _ofs*/) : - scale_x(_scale_x), scale_y(_scale_y), cn(_cn), step(_step)/*, ofs(_ofs)*/ - { - fast_mode = scale_x == 2 && scale_y == 2 && (cn == 1 || cn == 3 || cn == 4); - } - - int operator() (const T* S, T* D, int w) const - { - if( !fast_mode ) - return 0; - - const T* nextS = (const T*)((const uchar*)S + step); - int dx = 0; - - if (cn == 1) - for( ; dx < w; ++dx ) - { - int index = dx*2; - D[dx] = (T)((S[index] + S[index+1] + nextS[index] + nextS[index+1] + 2) >> 2); - } - else if (cn == 3) - for( ; dx < w; dx += 3 ) - { - int index = dx*2; - D[dx] = (T)((S[index] + S[index+3] + nextS[index] + nextS[index+3] + 2) >> 2); - D[dx+1] = (T)((S[index+1] + S[index+4] + nextS[index+1] + nextS[index+4] + 2) >> 2); - D[dx+2] = (T)((S[index+2] + S[index+5] + nextS[index+2] + nextS[index+5] + 2) >> 2); - } - else - { - assert(cn == 4); - for( ; dx < w; dx += 4 ) - { - int index = dx*2; - D[dx] = (T)((S[index] + S[index+4] + nextS[index] + nextS[index+4] + 2) >> 2); - D[dx+1] = (T)((S[index+1] + S[index+5] + nextS[index+1] + nextS[index+5] + 2) >> 2); - D[dx+2] = (T)((S[index+2] + S[index+6] + nextS[index+2] + nextS[index+6] + 2) >> 2); - D[dx+3] = (T)((S[index+3] + S[index+7] + nextS[index+3] + nextS[index+7] + 2) >> 2); - } - } - - return dx; - } - -private: - int scale_x, scale_y; - int cn; - bool fast_mode; - int step; -}; - -template -class resizeAreaFast_Invoker : - public ParallelLoopBody -{ -public: - resizeAreaFast_Invoker(const Mat &_src, Mat &_dst, - int _scale_x, int _scale_y, const int* _ofs, const int* _xofs) : - ParallelLoopBody(), src(_src), dst(_dst), scale_x(_scale_x), - scale_y(_scale_y), ofs(_ofs), xofs(_xofs) - { - } - - virtual void operator() (const Range& range) const - { - Size ssize = src.size(), dsize = dst.size(); - int cn = src.channels(); - int area = scale_x*scale_y; - float scale = 1.f/(area); - int dwidth1 = (ssize.width/scale_x)*cn; - dsize.width *= cn; - ssize.width *= cn; - int dy, dx, k = 0; - - VecOp vop(scale_x, scale_y, src.channels(), (int)src.step/*, area_ofs*/); - - for( dy = range.start; dy < range.end; dy++ ) - { - T* D = (T*)(dst.data + dst.step*dy); - int sy0 = dy*scale_y; - int w = sy0 + scale_y <= ssize.height ? dwidth1 : 0; - - if( sy0 >= ssize.height ) - { - for( dx = 0; dx < dsize.width; dx++ ) - D[dx] = 0; - continue; - } - - dx = vop((const T*)(src.data + src.step * sy0), D, w); - for( ; dx < w; dx++ ) - { - const T* S = (const T*)(src.data + src.step * sy0) + xofs[dx]; - WT sum = 0; - k = 0; - #if CV_ENABLE_UNROLLED - for( ; k <= area - 4; k += 4 ) - sum += S[ofs[k]] + S[ofs[k+1]] + S[ofs[k+2]] + S[ofs[k+3]]; - #endif - for( ; k < area; k++ ) - sum += S[ofs[k]]; - - D[dx] = saturate_cast(sum * scale); - } - - for( ; dx < dsize.width; dx++ ) - { - WT sum = 0; - int count = 0, sx0 = xofs[dx]; - if( sx0 >= ssize.width ) - D[dx] = 0; - - for( int sy = 0; sy < scale_y; sy++ ) - { - if( sy0 + sy >= ssize.height ) - break; - const T* S = (const T*)(src.data + src.step*(sy0 + sy)) + sx0; - for( int sx = 0; sx < scale_x*cn; sx += cn ) - { - if( sx0 + sx >= ssize.width ) - break; - sum += S[sx]; - count++; - } - } - - D[dx] = saturate_cast((float)sum/count); - } - } - } - -private: - Mat src; - Mat dst; - int scale_x, scale_y; - const int *ofs, *xofs; -}; - -template -static void resizeAreaFast_( const Mat& src, Mat& dst, const int* ofs, const int* xofs, - int scale_x, int scale_y ) -{ - Range range(0, dst.rows); - resizeAreaFast_Invoker invoker(src, dst, scale_x, - scale_y, ofs, xofs); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); -} - -struct DecimateAlpha -{ - int si, di; - float alpha; -}; - - -template class ResizeArea_Invoker : - public ParallelLoopBody -{ -public: - ResizeArea_Invoker( const Mat& _src, Mat& _dst, - const DecimateAlpha* _xtab, int _xtab_size, - const DecimateAlpha* _ytab, int _ytab_size, - const int* _tabofs ) - { - src = &_src; - dst = &_dst; - xtab0 = _xtab; - xtab_size0 = _xtab_size; - ytab = _ytab; - ytab_size = _ytab_size; - tabofs = _tabofs; - } - - virtual void operator() (const Range& range) const - { - Size dsize = dst->size(); - int cn = dst->channels(); - dsize.width *= cn; - AutoBuffer _buffer(dsize.width*2); - const DecimateAlpha* xtab = xtab0; - int xtab_size = xtab_size0; - WT *buf = _buffer, *sum = buf + dsize.width; - int j_start = tabofs[range.start], j_end = tabofs[range.end], j, k, dx, prev_dy = ytab[j_start].di; - - for( dx = 0; dx < dsize.width; dx++ ) - sum[dx] = (WT)0; - - for( j = j_start; j < j_end; j++ ) - { - WT beta = ytab[j].alpha; - int dy = ytab[j].di; - int sy = ytab[j].si; - - { - const T* S = (const T*)(src->data + src->step*sy); - for( dx = 0; dx < dsize.width; dx++ ) - buf[dx] = (WT)0; - - if( cn == 1 ) - for( k = 0; k < xtab_size; k++ ) - { - int dxn = xtab[k].di; - WT alpha = xtab[k].alpha; - buf[dxn] += S[xtab[k].si]*alpha; - } - else if( cn == 2 ) - for( k = 0; k < xtab_size; k++ ) - { - int sxn = xtab[k].si; - int dxn = xtab[k].di; - WT alpha = xtab[k].alpha; - WT t0 = buf[dxn] + S[sxn]*alpha; - WT t1 = buf[dxn+1] + S[sxn+1]*alpha; - buf[dxn] = t0; buf[dxn+1] = t1; - } - else if( cn == 3 ) - for( k = 0; k < xtab_size; k++ ) - { - int sxn = xtab[k].si; - int dxn = xtab[k].di; - WT alpha = xtab[k].alpha; - WT t0 = buf[dxn] + S[sxn]*alpha; - WT t1 = buf[dxn+1] + S[sxn+1]*alpha; - WT t2 = buf[dxn+2] + S[sxn+2]*alpha; - buf[dxn] = t0; buf[dxn+1] = t1; buf[dxn+2] = t2; - } - else if( cn == 4 ) - { - for( k = 0; k < xtab_size; k++ ) - { - int sxn = xtab[k].si; - int dxn = xtab[k].di; - WT alpha = xtab[k].alpha; - WT t0 = buf[dxn] + S[sxn]*alpha; - WT t1 = buf[dxn+1] + S[sxn+1]*alpha; - buf[dxn] = t0; buf[dxn+1] = t1; - t0 = buf[dxn+2] + S[sxn+2]*alpha; - t1 = buf[dxn+3] + S[sxn+3]*alpha; - buf[dxn+2] = t0; buf[dxn+3] = t1; - } - } - else - { - for( k = 0; k < xtab_size; k++ ) - { - int sxn = xtab[k].si; - int dxn = xtab[k].di; - WT alpha = xtab[k].alpha; - for( int c = 0; c < cn; c++ ) - buf[dxn + c] += S[sxn + c]*alpha; - } - } - } - - if( dy != prev_dy ) - { - T* D = (T*)(dst->data + dst->step*prev_dy); - - for( dx = 0; dx < dsize.width; dx++ ) - { - D[dx] = saturate_cast(sum[dx]); - sum[dx] = beta*buf[dx]; - } - prev_dy = dy; - } - else - { - for( dx = 0; dx < dsize.width; dx++ ) - sum[dx] += beta*buf[dx]; - } - } - - { - T* D = (T*)(dst->data + dst->step*prev_dy); - for( dx = 0; dx < dsize.width; dx++ ) - D[dx] = saturate_cast(sum[dx]); - } - } - -private: - const Mat* src; - Mat* dst; - const DecimateAlpha* xtab0; - const DecimateAlpha* ytab; - int xtab_size0, ytab_size; - const int* tabofs; -}; - - -template -static void resizeArea_( const Mat& src, Mat& dst, - const DecimateAlpha* xtab, int xtab_size, - const DecimateAlpha* ytab, int ytab_size, - const int* tabofs ) -{ - parallel_for_(Range(0, dst.rows), - ResizeArea_Invoker(src, dst, xtab, xtab_size, ytab, ytab_size, tabofs), - dst.total()/((double)(1 << 16))); -} - - -typedef void (*ResizeFunc)( const Mat& src, Mat& dst, - const int* xofs, const void* alpha, - const int* yofs, const void* beta, - int xmin, int xmax, int ksize ); - -typedef void (*ResizeAreaFastFunc)( const Mat& src, Mat& dst, - const int* ofs, const int *xofs, - int scale_x, int scale_y ); - -typedef void (*ResizeAreaFunc)( const Mat& src, Mat& dst, - const DecimateAlpha* xtab, int xtab_size, - const DecimateAlpha* ytab, int ytab_size, - const int* yofs); - - -static int computeResizeAreaTab( int ssize, int dsize, int cn, double scale, DecimateAlpha* tab ) -{ - int k = 0; - for(int dx = 0; dx < dsize; dx++ ) - { - double fsx1 = dx * scale; - double fsx2 = fsx1 + scale; - double cellWidth = min(scale, ssize - fsx1); - - int sx1 = cvCeil(fsx1), sx2 = cvFloor(fsx2); - - sx2 = std::min(sx2, ssize - 1); - sx1 = std::min(sx1, sx2); - - if( sx1 - fsx1 > 1e-3 ) - { - assert( k < ssize*2 ); - tab[k].di = dx * cn; - tab[k].si = (sx1 - 1) * cn; - tab[k++].alpha = (float)((sx1 - fsx1) / cellWidth); - } - - for(int sx = sx1; sx < sx2; sx++ ) - { - assert( k < ssize*2 ); - tab[k].di = dx * cn; - tab[k].si = sx * cn; - tab[k++].alpha = float(1.0 / cellWidth); - } - - if( fsx2 - sx2 > 1e-3 ) - { - assert( k < ssize*2 ); - tab[k].di = dx * cn; - tab[k].si = sx2 * cn; - tab[k++].alpha = (float)(min(min(fsx2 - sx2, 1.), cellWidth) / cellWidth); - } - } - return k; -} - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -class IPPresizeInvoker : - public ParallelLoopBody -{ -public: - IPPresizeInvoker(Mat &_src, Mat &_dst, double &_inv_scale_x, double &_inv_scale_y, int _mode, ippiResizeSqrPixelFunc _func, bool *_ok) : - ParallelLoopBody(), src(_src), dst(_dst), inv_scale_x(_inv_scale_x), inv_scale_y(_inv_scale_y), mode(_mode), func(_func), ok(_ok) - { - *ok = true; - } - - virtual void operator() (const Range& range) const - { - int cn = src.channels(); - IppiRect srcroi = { 0, range.start, src.cols, range.end - range.start }; - int dsty = CV_IMIN(cvRound(range.start * inv_scale_y), dst.rows); - int dstwidth = CV_IMIN(cvRound(src.cols * inv_scale_x), dst.cols); - int dstheight = CV_IMIN(cvRound(range.end * inv_scale_y), dst.rows); - IppiRect dstroi = { 0, dsty, dstwidth, dstheight - dsty }; - int bufsize; - ippiResizeGetBufSize( srcroi, dstroi, cn, mode, &bufsize ); - AutoBuffer buf(bufsize + 64); - uchar* bufptr = alignPtr((uchar*)buf, 32); - if( func( src.data, ippiSize(src.cols, src.rows), (int)src.step[0], srcroi, dst.data, (int)dst.step[0], dstroi, inv_scale_x, inv_scale_y, 0, 0, mode, bufptr ) < 0 ) - *ok = false; - } -private: - Mat &src; - Mat &dst; - double inv_scale_x; - double inv_scale_y; - int mode; - ippiResizeSqrPixelFunc func; - bool *ok; - const IPPresizeInvoker& operator= (const IPPresizeInvoker&); -}; -#endif - -} - - -////////////////////////////////////////////////////////////////////////////////////////// - -void cv::resize( InputArray _src, OutputArray _dst, Size dsize, - double inv_scale_x, double inv_scale_y, int interpolation ) -{ - static ResizeFunc linear_tab[] = - { - resizeGeneric_< - HResizeLinear, - VResizeLinear, - VResizeLinearVec_32s8u> >, - 0, - resizeGeneric_< - HResizeLinear, - VResizeLinear, - VResizeLinearVec_32f16u> >, - resizeGeneric_< - HResizeLinear, - VResizeLinear, - VResizeLinearVec_32f16s> >, - 0, - resizeGeneric_< - HResizeLinear, - VResizeLinear, - VResizeLinearVec_32f> >, - resizeGeneric_< - HResizeLinear, - VResizeLinear, - VResizeNoVec> >, - 0 - }; - - static ResizeFunc cubic_tab[] = - { - resizeGeneric_< - HResizeCubic, - VResizeCubic, - VResizeCubicVec_32s8u> >, - 0, - resizeGeneric_< - HResizeCubic, - VResizeCubic, - VResizeCubicVec_32f16u> >, - resizeGeneric_< - HResizeCubic, - VResizeCubic, - VResizeCubicVec_32f16s> >, - 0, - resizeGeneric_< - HResizeCubic, - VResizeCubic, - VResizeCubicVec_32f> >, - resizeGeneric_< - HResizeCubic, - VResizeCubic, - VResizeNoVec> >, - 0 - }; - - static ResizeFunc lanczos4_tab[] = - { - resizeGeneric_, - VResizeLanczos4, - VResizeNoVec> >, - 0, - resizeGeneric_, - VResizeLanczos4, - VResizeNoVec> >, - resizeGeneric_, - VResizeLanczos4, - VResizeNoVec> >, - 0, - resizeGeneric_, - VResizeLanczos4, - VResizeNoVec> >, - resizeGeneric_, - VResizeLanczos4, - VResizeNoVec> >, - 0 - }; - - static ResizeAreaFastFunc areafast_tab[] = - { - resizeAreaFast_ >, - 0, - resizeAreaFast_ >, - resizeAreaFast_ >, - 0, - resizeAreaFast_ >, - resizeAreaFast_ >, - 0 - }; - - static ResizeAreaFunc area_tab[] = - { - resizeArea_, 0, resizeArea_, - resizeArea_, 0, resizeArea_, - resizeArea_, 0 - }; - - Mat src = _src.getMat(); - Size ssize = src.size(); - - CV_Assert( ssize.area() > 0 ); - CV_Assert( dsize.area() || (inv_scale_x > 0 && inv_scale_y > 0) ); - if( !dsize.area() ) - { - dsize = Size(saturate_cast(src.cols*inv_scale_x), - saturate_cast(src.rows*inv_scale_y)); - CV_Assert( dsize.area() ); - } - else - { - inv_scale_x = (double)dsize.width/src.cols; - inv_scale_y = (double)dsize.height/src.rows; - } - _dst.create(dsize, src.type()); - Mat dst = _dst.getMat(); - - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::resize(src, dst, (float)inv_scale_x, (float)inv_scale_y, interpolation)) - return; -#endif - - int depth = src.depth(), cn = src.channels(); - double scale_x = 1./inv_scale_x, scale_y = 1./inv_scale_y; - int k, sx, sy, dx, dy; -/* -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - int mode = interpolation == INTER_LINEAR ? IPPI_INTER_LINEAR : 0; - int type = src.type(); - ippiResizeSqrPixelFunc ippFunc = - type == CV_8UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C1R : - type == CV_8UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C3R : - type == CV_8UC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_8u_C4R : - type == CV_16UC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C1R : - type == CV_16UC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C3R : - type == CV_16UC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16u_C4R : - type == CV_16SC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16s_C1R : - type == CV_16SC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16s_C3R : - type == CV_16SC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_16s_C4R : - type == CV_32FC1 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_32f_C1R : - type == CV_32FC3 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_32f_C3R : - type == CV_32FC4 ? (ippiResizeSqrPixelFunc)ippiResizeSqrPixel_32f_C4R : - 0; - if( ippFunc && mode != 0 ) - { - bool ok; - Range range(0, src.rows); - IPPresizeInvoker invoker(src, dst, inv_scale_x, inv_scale_y, mode, ippFunc, &ok); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); - if( ok ) - return; - } -#endif -*/ - if( interpolation == INTER_NEAREST ) - { - resizeNN( src, dst, inv_scale_x, inv_scale_y ); - return; - } - - { - int iscale_x = saturate_cast(scale_x); - int iscale_y = saturate_cast(scale_y); - - bool is_area_fast = std::abs(scale_x - iscale_x) < DBL_EPSILON && - std::abs(scale_y - iscale_y) < DBL_EPSILON; - - // in case of scale_x && scale_y is equal to 2 - // INTER_AREA (fast) also is equal to INTER_LINEAR - if( interpolation == INTER_LINEAR && is_area_fast && iscale_x == 2 && iscale_y == 2 ) - { - interpolation = INTER_AREA; - } - - // true "area" interpolation is only implemented for the case (scale_x <= 1 && scale_y <= 1). - // In other cases it is emulated using some variant of bilinear interpolation - if( interpolation == INTER_AREA && scale_x >= 1 && scale_y >= 1 ) - { - if( is_area_fast ) - { - int area = iscale_x*iscale_y; - size_t srcstep = src.step / src.elemSize1(); - AutoBuffer _ofs(area + dsize.width*cn); - int* ofs = _ofs; - int* xofs = ofs + area; - ResizeAreaFastFunc func = areafast_tab[depth]; - CV_Assert( func != 0 ); - - for( sy = 0, k = 0; sy < iscale_y; sy++ ) - for( sx = 0; sx < iscale_x; sx++ ) - ofs[k++] = (int)(sy*srcstep + sx*cn); - - for( dx = 0; dx < dsize.width; dx++ ) - { - int j = dx * cn; - sx = iscale_x * j; - for( k = 0; k < cn; k++ ) - xofs[j + k] = sx + k; - } - - func( src, dst, ofs, xofs, iscale_x, iscale_y ); - return; - } - - ResizeAreaFunc func = area_tab[depth]; - CV_Assert( func != 0 && cn <= 4 ); - - AutoBuffer _xytab((ssize.width + ssize.height)*2); - DecimateAlpha* xtab = _xytab, *ytab = xtab + ssize.width*2; - - int xtab_size = computeResizeAreaTab(ssize.width, dsize.width, cn, scale_x, xtab); - int ytab_size = computeResizeAreaTab(ssize.height, dsize.height, 1, scale_y, ytab); - - AutoBuffer _tabofs(dsize.height + 1); - int* tabofs = _tabofs; - for( k = 0, dy = 0; k < ytab_size; k++ ) - { - if( k == 0 || ytab[k].di != ytab[k-1].di ) - { - assert( ytab[k].di == dy ); - tabofs[dy++] = k; - } - } - tabofs[dy] = ytab_size; - - func( src, dst, xtab, xtab_size, ytab, ytab_size, tabofs ); - return; - } - } - - int xmin = 0, xmax = dsize.width, width = dsize.width*cn; - bool area_mode = interpolation == INTER_AREA; - bool fixpt = depth == CV_8U; - float fx, fy; - ResizeFunc func=0; - int ksize=0, ksize2; - if( interpolation == INTER_CUBIC ) - ksize = 4, func = cubic_tab[depth]; - else if( interpolation == INTER_LANCZOS4 ) - ksize = 8, func = lanczos4_tab[depth]; - else if( interpolation == INTER_LINEAR || interpolation == INTER_AREA ) - ksize = 2, func = linear_tab[depth]; - else - CV_Error( CV_StsBadArg, "Unknown interpolation method" ); - ksize2 = ksize/2; - - CV_Assert( func != 0 ); - - AutoBuffer _buffer((width + dsize.height)*(sizeof(int) + sizeof(float)*ksize)); - int* xofs = (int*)(uchar*)_buffer; - int* yofs = xofs + width; - float* alpha = (float*)(yofs + dsize.height); - short* ialpha = (short*)alpha; - float* beta = alpha + width*ksize; - short* ibeta = ialpha + width*ksize; - float cbuf[MAX_ESIZE]; - - for( dx = 0; dx < dsize.width; dx++ ) - { - if( !area_mode ) - { - fx = (float)((dx+0.5)*scale_x - 0.5); - sx = cvFloor(fx); - fx -= sx; - } - else - { - sx = cvFloor(dx*scale_x); - fx = (float)((dx+1) - (sx+1)*inv_scale_x); - fx = fx <= 0 ? 0.f : fx - cvFloor(fx); - } - - if( sx < ksize2-1 ) - { - xmin = dx+1; - if( sx < 0 ) - fx = 0, sx = 0; - } - - if( sx + ksize2 >= ssize.width ) - { - xmax = std::min( xmax, dx ); - if( sx >= ssize.width-1 ) - fx = 0, sx = ssize.width-1; - } - - for( k = 0, sx *= cn; k < cn; k++ ) - xofs[dx*cn + k] = sx + k; - - if( interpolation == INTER_CUBIC ) - interpolateCubic( fx, cbuf ); - else if( interpolation == INTER_LANCZOS4 ) - interpolateLanczos4( fx, cbuf ); - else - { - cbuf[0] = 1.f - fx; - cbuf[1] = fx; - } - if( fixpt ) - { - for( k = 0; k < ksize; k++ ) - ialpha[dx*cn*ksize + k] = saturate_cast(cbuf[k]*INTER_RESIZE_COEF_SCALE); - for( ; k < cn*ksize; k++ ) - ialpha[dx*cn*ksize + k] = ialpha[dx*cn*ksize + k - ksize]; - } - else - { - for( k = 0; k < ksize; k++ ) - alpha[dx*cn*ksize + k] = cbuf[k]; - for( ; k < cn*ksize; k++ ) - alpha[dx*cn*ksize + k] = alpha[dx*cn*ksize + k - ksize]; - } - } - - for( dy = 0; dy < dsize.height; dy++ ) - { - if( !area_mode ) - { - fy = (float)((dy+0.5)*scale_y - 0.5); - sy = cvFloor(fy); - fy -= sy; - } - else - { - sy = cvFloor(dy*scale_y); - fy = (float)((dy+1) - (sy+1)*inv_scale_y); - fy = fy <= 0 ? 0.f : fy - cvFloor(fy); - } - - yofs[dy] = sy; - if( interpolation == INTER_CUBIC ) - interpolateCubic( fy, cbuf ); - else if( interpolation == INTER_LANCZOS4 ) - interpolateLanczos4( fy, cbuf ); - else - { - cbuf[0] = 1.f - fy; - cbuf[1] = fy; - } - - if( fixpt ) - { - for( k = 0; k < ksize; k++ ) - ibeta[dy*ksize + k] = saturate_cast(cbuf[k]*INTER_RESIZE_COEF_SCALE); - } - else - { - for( k = 0; k < ksize; k++ ) - beta[dy*ksize + k] = cbuf[k]; - } - } - - func( src, dst, xofs, fixpt ? (void*)ialpha : (void*)alpha, yofs, - fixpt ? (void*)ibeta : (void*)beta, xmin, xmax, ksize ); -} - - -/****************************************************************************************\ -* General warping (affine, perspective, remap) * -\****************************************************************************************/ - -namespace cv -{ - -template -static void remapNearest( const Mat& _src, Mat& _dst, const Mat& _xy, - int borderType, const Scalar& _borderValue ) -{ - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - const T* S0 = (const T*)_src.data; - size_t sstep = _src.step/sizeof(S0[0]); - Scalar_ cval(saturate_cast(_borderValue[0]), - saturate_cast(_borderValue[1]), - saturate_cast(_borderValue[2]), - saturate_cast(_borderValue[3])); - int dx, dy; - - unsigned width1 = ssize.width, height1 = ssize.height; - - if( _dst.isContinuous() && _xy.isContinuous() ) - { - dsize.width *= dsize.height; - dsize.height = 1; - } - - for( dy = 0; dy < dsize.height; dy++ ) - { - T* D = (T*)(_dst.data + _dst.step*dy); - const short* XY = (const short*)(_xy.data + _xy.step*dy); - - if( cn == 1 ) - { - for( dx = 0; dx < dsize.width; dx++ ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - if( (unsigned)sx < width1 && (unsigned)sy < height1 ) - D[dx] = S0[sy*sstep + sx]; - else - { - if( borderType == BORDER_REPLICATE ) - { - sx = clip(sx, 0, ssize.width); - sy = clip(sy, 0, ssize.height); - D[dx] = S0[sy*sstep + sx]; - } - else if( borderType == BORDER_CONSTANT ) - D[dx] = cval[0]; - else if( borderType != BORDER_TRANSPARENT ) - { - sx = borderInterpolate(sx, ssize.width, borderType); - sy = borderInterpolate(sy, ssize.height, borderType); - D[dx] = S0[sy*sstep + sx]; - } - } - } - } - else - { - for( dx = 0; dx < dsize.width; dx++, D += cn ) - { - int sx = XY[dx*2], sy = XY[dx*2+1], k; - const T *S; - if( (unsigned)sx < width1 && (unsigned)sy < height1 ) - { - if( cn == 3 ) - { - S = S0 + sy*sstep + sx*3; - D[0] = S[0], D[1] = S[1], D[2] = S[2]; - } - else if( cn == 4 ) - { - S = S0 + sy*sstep + sx*4; - D[0] = S[0], D[1] = S[1], D[2] = S[2], D[3] = S[3]; - } - else - { - S = S0 + sy*sstep + sx*cn; - for( k = 0; k < cn; k++ ) - D[k] = S[k]; - } - } - else if( borderType != BORDER_TRANSPARENT ) - { - if( borderType == BORDER_REPLICATE ) - { - sx = clip(sx, 0, ssize.width); - sy = clip(sy, 0, ssize.height); - S = S0 + sy*sstep + sx*cn; - } - else if( borderType == BORDER_CONSTANT ) - S = &cval[0]; - else - { - sx = borderInterpolate(sx, ssize.width, borderType); - sy = borderInterpolate(sy, ssize.height, borderType); - S = S0 + sy*sstep + sx*cn; - } - for( k = 0; k < cn; k++ ) - D[k] = S[k]; - } - } - } - } -} - - -struct RemapNoVec -{ - int operator()( const Mat&, void*, const short*, const ushort*, - const void*, int ) const { return 0; } -}; - -#if CV_SSE2 - -struct RemapVec_8u -{ - int operator()( const Mat& _src, void* _dst, const short* XY, - const ushort* FXY, const void* _wtab, int width ) const - { - int cn = _src.channels(), x = 0, sstep = (int)_src.step; - - if( (cn != 1 && cn != 3 && cn != 4) || !checkHardwareSupport(CV_CPU_SSE2) || - sstep > 0x8000 ) - return 0; - - const uchar *S0 = _src.data, *S1 = _src.data + _src.step; - const short* wtab = cn == 1 ? (const short*)_wtab : &BilinearTab_iC4[0][0][0]; - uchar* D = (uchar*)_dst; - __m128i delta = _mm_set1_epi32(INTER_REMAP_COEF_SCALE/2); - __m128i xy2ofs = _mm_set1_epi32(cn + (sstep << 16)); - __m128i z = _mm_setzero_si128(); - int CV_DECL_ALIGNED(16) iofs0[4], iofs1[4]; - - if( cn == 1 ) - { - for( ; x <= width - 8; x += 8 ) - { - __m128i xy0 = _mm_loadu_si128( (const __m128i*)(XY + x*2)); - __m128i xy1 = _mm_loadu_si128( (const __m128i*)(XY + x*2 + 8)); - __m128i v0, v1, v2, v3, a0, a1, b0, b1; - unsigned i0, i1; - - xy0 = _mm_madd_epi16( xy0, xy2ofs ); - xy1 = _mm_madd_epi16( xy1, xy2ofs ); - _mm_store_si128( (__m128i*)iofs0, xy0 ); - _mm_store_si128( (__m128i*)iofs1, xy1 ); - - i0 = *(ushort*)(S0 + iofs0[0]) + (*(ushort*)(S0 + iofs0[1]) << 16); - i1 = *(ushort*)(S0 + iofs0[2]) + (*(ushort*)(S0 + iofs0[3]) << 16); - v0 = _mm_unpacklo_epi32(_mm_cvtsi32_si128(i0), _mm_cvtsi32_si128(i1)); - i0 = *(ushort*)(S1 + iofs0[0]) + (*(ushort*)(S1 + iofs0[1]) << 16); - i1 = *(ushort*)(S1 + iofs0[2]) + (*(ushort*)(S1 + iofs0[3]) << 16); - v1 = _mm_unpacklo_epi32(_mm_cvtsi32_si128(i0), _mm_cvtsi32_si128(i1)); - v0 = _mm_unpacklo_epi8(v0, z); - v1 = _mm_unpacklo_epi8(v1, z); - - a0 = _mm_unpacklo_epi32(_mm_loadl_epi64((__m128i*)(wtab+FXY[x]*4)), - _mm_loadl_epi64((__m128i*)(wtab+FXY[x+1]*4))); - a1 = _mm_unpacklo_epi32(_mm_loadl_epi64((__m128i*)(wtab+FXY[x+2]*4)), - _mm_loadl_epi64((__m128i*)(wtab+FXY[x+3]*4))); - b0 = _mm_unpacklo_epi64(a0, a1); - b1 = _mm_unpackhi_epi64(a0, a1); - v0 = _mm_madd_epi16(v0, b0); - v1 = _mm_madd_epi16(v1, b1); - v0 = _mm_add_epi32(_mm_add_epi32(v0, v1), delta); - - i0 = *(ushort*)(S0 + iofs1[0]) + (*(ushort*)(S0 + iofs1[1]) << 16); - i1 = *(ushort*)(S0 + iofs1[2]) + (*(ushort*)(S0 + iofs1[3]) << 16); - v2 = _mm_unpacklo_epi32(_mm_cvtsi32_si128(i0), _mm_cvtsi32_si128(i1)); - i0 = *(ushort*)(S1 + iofs1[0]) + (*(ushort*)(S1 + iofs1[1]) << 16); - i1 = *(ushort*)(S1 + iofs1[2]) + (*(ushort*)(S1 + iofs1[3]) << 16); - v3 = _mm_unpacklo_epi32(_mm_cvtsi32_si128(i0), _mm_cvtsi32_si128(i1)); - v2 = _mm_unpacklo_epi8(v2, z); - v3 = _mm_unpacklo_epi8(v3, z); - - a0 = _mm_unpacklo_epi32(_mm_loadl_epi64((__m128i*)(wtab+FXY[x+4]*4)), - _mm_loadl_epi64((__m128i*)(wtab+FXY[x+5]*4))); - a1 = _mm_unpacklo_epi32(_mm_loadl_epi64((__m128i*)(wtab+FXY[x+6]*4)), - _mm_loadl_epi64((__m128i*)(wtab+FXY[x+7]*4))); - b0 = _mm_unpacklo_epi64(a0, a1); - b1 = _mm_unpackhi_epi64(a0, a1); - v2 = _mm_madd_epi16(v2, b0); - v3 = _mm_madd_epi16(v3, b1); - v2 = _mm_add_epi32(_mm_add_epi32(v2, v3), delta); - - v0 = _mm_srai_epi32(v0, INTER_REMAP_COEF_BITS); - v2 = _mm_srai_epi32(v2, INTER_REMAP_COEF_BITS); - v0 = _mm_packus_epi16(_mm_packs_epi32(v0, v2), z); - _mm_storel_epi64( (__m128i*)(D + x), v0 ); - } - } - else if( cn == 3 ) - { - for( ; x <= width - 5; x += 4, D += 12 ) - { - __m128i xy0 = _mm_loadu_si128( (const __m128i*)(XY + x*2)); - __m128i u0, v0, u1, v1; - - xy0 = _mm_madd_epi16( xy0, xy2ofs ); - _mm_store_si128( (__m128i*)iofs0, xy0 ); - const __m128i *w0, *w1; - w0 = (const __m128i*)(wtab + FXY[x]*16); - w1 = (const __m128i*)(wtab + FXY[x+1]*16); - - u0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[0])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[0] + 3))); - v0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[0])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[0] + 3))); - u1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[1])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[1] + 3))); - v1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[1])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[1] + 3))); - u0 = _mm_unpacklo_epi8(u0, z); - v0 = _mm_unpacklo_epi8(v0, z); - u1 = _mm_unpacklo_epi8(u1, z); - v1 = _mm_unpacklo_epi8(v1, z); - u0 = _mm_add_epi32(_mm_madd_epi16(u0, w0[0]), _mm_madd_epi16(v0, w0[1])); - u1 = _mm_add_epi32(_mm_madd_epi16(u1, w1[0]), _mm_madd_epi16(v1, w1[1])); - u0 = _mm_srai_epi32(_mm_add_epi32(u0, delta), INTER_REMAP_COEF_BITS); - u1 = _mm_srai_epi32(_mm_add_epi32(u1, delta), INTER_REMAP_COEF_BITS); - u0 = _mm_slli_si128(u0, 4); - u0 = _mm_packs_epi32(u0, u1); - u0 = _mm_packus_epi16(u0, u0); - _mm_storel_epi64((__m128i*)D, _mm_srli_si128(u0,1)); - - w0 = (const __m128i*)(wtab + FXY[x+2]*16); - w1 = (const __m128i*)(wtab + FXY[x+3]*16); - - u0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[2])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[2] + 3))); - v0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[2])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[2] + 3))); - u1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[3])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[3] + 3))); - v1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[3])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[3] + 3))); - u0 = _mm_unpacklo_epi8(u0, z); - v0 = _mm_unpacklo_epi8(v0, z); - u1 = _mm_unpacklo_epi8(u1, z); - v1 = _mm_unpacklo_epi8(v1, z); - u0 = _mm_add_epi32(_mm_madd_epi16(u0, w0[0]), _mm_madd_epi16(v0, w0[1])); - u1 = _mm_add_epi32(_mm_madd_epi16(u1, w1[0]), _mm_madd_epi16(v1, w1[1])); - u0 = _mm_srai_epi32(_mm_add_epi32(u0, delta), INTER_REMAP_COEF_BITS); - u1 = _mm_srai_epi32(_mm_add_epi32(u1, delta), INTER_REMAP_COEF_BITS); - u0 = _mm_slli_si128(u0, 4); - u0 = _mm_packs_epi32(u0, u1); - u0 = _mm_packus_epi16(u0, u0); - _mm_storel_epi64((__m128i*)(D + 6), _mm_srli_si128(u0,1)); - } - } - else if( cn == 4 ) - { - for( ; x <= width - 4; x += 4, D += 16 ) - { - __m128i xy0 = _mm_loadu_si128( (const __m128i*)(XY + x*2)); - __m128i u0, v0, u1, v1; - - xy0 = _mm_madd_epi16( xy0, xy2ofs ); - _mm_store_si128( (__m128i*)iofs0, xy0 ); - const __m128i *w0, *w1; - w0 = (const __m128i*)(wtab + FXY[x]*16); - w1 = (const __m128i*)(wtab + FXY[x+1]*16); - - u0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[0])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[0] + 4))); - v0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[0])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[0] + 4))); - u1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[1])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[1] + 4))); - v1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[1])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[1] + 4))); - u0 = _mm_unpacklo_epi8(u0, z); - v0 = _mm_unpacklo_epi8(v0, z); - u1 = _mm_unpacklo_epi8(u1, z); - v1 = _mm_unpacklo_epi8(v1, z); - u0 = _mm_add_epi32(_mm_madd_epi16(u0, w0[0]), _mm_madd_epi16(v0, w0[1])); - u1 = _mm_add_epi32(_mm_madd_epi16(u1, w1[0]), _mm_madd_epi16(v1, w1[1])); - u0 = _mm_srai_epi32(_mm_add_epi32(u0, delta), INTER_REMAP_COEF_BITS); - u1 = _mm_srai_epi32(_mm_add_epi32(u1, delta), INTER_REMAP_COEF_BITS); - u0 = _mm_packs_epi32(u0, u1); - u0 = _mm_packus_epi16(u0, u0); - _mm_storel_epi64((__m128i*)D, u0); - - w0 = (const __m128i*)(wtab + FXY[x+2]*16); - w1 = (const __m128i*)(wtab + FXY[x+3]*16); - - u0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[2])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[2] + 4))); - v0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[2])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[2] + 4))); - u1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S0 + iofs0[3])), - _mm_cvtsi32_si128(*(int*)(S0 + iofs0[3] + 4))); - v1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(*(int*)(S1 + iofs0[3])), - _mm_cvtsi32_si128(*(int*)(S1 + iofs0[3] + 4))); - u0 = _mm_unpacklo_epi8(u0, z); - v0 = _mm_unpacklo_epi8(v0, z); - u1 = _mm_unpacklo_epi8(u1, z); - v1 = _mm_unpacklo_epi8(v1, z); - u0 = _mm_add_epi32(_mm_madd_epi16(u0, w0[0]), _mm_madd_epi16(v0, w0[1])); - u1 = _mm_add_epi32(_mm_madd_epi16(u1, w1[0]), _mm_madd_epi16(v1, w1[1])); - u0 = _mm_srai_epi32(_mm_add_epi32(u0, delta), INTER_REMAP_COEF_BITS); - u1 = _mm_srai_epi32(_mm_add_epi32(u1, delta), INTER_REMAP_COEF_BITS); - u0 = _mm_packs_epi32(u0, u1); - u0 = _mm_packus_epi16(u0, u0); - _mm_storel_epi64((__m128i*)(D + 8), u0); - } - } - - return x; - } -}; - -#else - -typedef RemapNoVec RemapVec_8u; - -#endif - - -template -static void remapBilinear( const Mat& _src, Mat& _dst, const Mat& _xy, - const Mat& _fxy, const void* _wtab, - int borderType, const Scalar& _borderValue ) -{ - typedef typename CastOp::rtype T; - typedef typename CastOp::type1 WT; - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - const AT* wtab = (const AT*)_wtab; - const T* S0 = (const T*)_src.data; - size_t sstep = _src.step/sizeof(S0[0]); - Scalar_ cval(saturate_cast(_borderValue[0]), - saturate_cast(_borderValue[1]), - saturate_cast(_borderValue[2]), - saturate_cast(_borderValue[3])); - int dx, dy; - CastOp castOp; - VecOp vecOp; - - unsigned width1 = std::max(ssize.width-1, 0), height1 = std::max(ssize.height-1, 0); - CV_Assert( cn <= 4 && ssize.area() > 0 ); -#if CV_SSE2 - if( _src.type() == CV_8UC3 ) - width1 = std::max(ssize.width-2, 0); -#endif - - for( dy = 0; dy < dsize.height; dy++ ) - { - T* D = (T*)(_dst.data + _dst.step*dy); - const short* XY = (const short*)(_xy.data + _xy.step*dy); - const ushort* FXY = (const ushort*)(_fxy.data + _fxy.step*dy); - int X0 = 0; - bool prevInlier = false; - - for( dx = 0; dx <= dsize.width; dx++ ) - { - bool curInlier = dx < dsize.width ? - (unsigned)XY[dx*2] < width1 && - (unsigned)XY[dx*2+1] < height1 : !prevInlier; - if( curInlier == prevInlier ) - continue; - - int X1 = dx; - dx = X0; - X0 = X1; - prevInlier = curInlier; - - if( !curInlier ) - { - int len = vecOp( _src, D, XY + dx*2, FXY + dx, wtab, X1 - dx ); - D += len*cn; - dx += len; - - if( cn == 1 ) - { - for( ; dx < X1; dx++, D++ ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - const AT* w = wtab + FXY[dx]*4; - const T* S = S0 + sy*sstep + sx; - *D = castOp(WT(S[0]*w[0] + S[1]*w[1] + S[sstep]*w[2] + S[sstep+1]*w[3])); - } - } - else if( cn == 2 ) - for( ; dx < X1; dx++, D += 2 ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - const AT* w = wtab + FXY[dx]*4; - const T* S = S0 + sy*sstep + sx*2; - WT t0 = S[0]*w[0] + S[2]*w[1] + S[sstep]*w[2] + S[sstep+2]*w[3]; - WT t1 = S[1]*w[0] + S[3]*w[1] + S[sstep+1]*w[2] + S[sstep+3]*w[3]; - D[0] = castOp(t0); D[1] = castOp(t1); - } - else if( cn == 3 ) - for( ; dx < X1; dx++, D += 3 ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - const AT* w = wtab + FXY[dx]*4; - const T* S = S0 + sy*sstep + sx*3; - WT t0 = S[0]*w[0] + S[3]*w[1] + S[sstep]*w[2] + S[sstep+3]*w[3]; - WT t1 = S[1]*w[0] + S[4]*w[1] + S[sstep+1]*w[2] + S[sstep+4]*w[3]; - WT t2 = S[2]*w[0] + S[5]*w[1] + S[sstep+2]*w[2] + S[sstep+5]*w[3]; - D[0] = castOp(t0); D[1] = castOp(t1); D[2] = castOp(t2); - } - else - for( ; dx < X1; dx++, D += 4 ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - const AT* w = wtab + FXY[dx]*4; - const T* S = S0 + sy*sstep + sx*4; - WT t0 = S[0]*w[0] + S[4]*w[1] + S[sstep]*w[2] + S[sstep+4]*w[3]; - WT t1 = S[1]*w[0] + S[5]*w[1] + S[sstep+1]*w[2] + S[sstep+5]*w[3]; - D[0] = castOp(t0); D[1] = castOp(t1); - t0 = S[2]*w[0] + S[6]*w[1] + S[sstep+2]*w[2] + S[sstep+6]*w[3]; - t1 = S[3]*w[0] + S[7]*w[1] + S[sstep+3]*w[2] + S[sstep+7]*w[3]; - D[2] = castOp(t0); D[3] = castOp(t1); - } - } - else - { - if( borderType == BORDER_TRANSPARENT && cn != 3 ) - { - D += (X1 - dx)*cn; - dx = X1; - continue; - } - - if( cn == 1 ) - for( ; dx < X1; dx++, D++ ) - { - int sx = XY[dx*2], sy = XY[dx*2+1]; - if( borderType == BORDER_CONSTANT && - (sx >= ssize.width || sx+1 < 0 || - sy >= ssize.height || sy+1 < 0) ) - { - D[0] = cval[0]; - } - else - { - int sx0, sx1, sy0, sy1; - T v0, v1, v2, v3; - const AT* w = wtab + FXY[dx]*4; - if( borderType == BORDER_REPLICATE ) - { - sx0 = clip(sx, 0, ssize.width); - sx1 = clip(sx+1, 0, ssize.width); - sy0 = clip(sy, 0, ssize.height); - sy1 = clip(sy+1, 0, ssize.height); - v0 = S0[sy0*sstep + sx0]; - v1 = S0[sy0*sstep + sx1]; - v2 = S0[sy1*sstep + sx0]; - v3 = S0[sy1*sstep + sx1]; - } - else - { - sx0 = borderInterpolate(sx, ssize.width, borderType); - sx1 = borderInterpolate(sx+1, ssize.width, borderType); - sy0 = borderInterpolate(sy, ssize.height, borderType); - sy1 = borderInterpolate(sy+1, ssize.height, borderType); - v0 = sx0 >= 0 && sy0 >= 0 ? S0[sy0*sstep + sx0] : cval[0]; - v1 = sx1 >= 0 && sy0 >= 0 ? S0[sy0*sstep + sx1] : cval[0]; - v2 = sx0 >= 0 && sy1 >= 0 ? S0[sy1*sstep + sx0] : cval[0]; - v3 = sx1 >= 0 && sy1 >= 0 ? S0[sy1*sstep + sx1] : cval[0]; - } - D[0] = castOp(WT(v0*w[0] + v1*w[1] + v2*w[2] + v3*w[3])); - } - } - else - for( ; dx < X1; dx++, D += cn ) - { - int sx = XY[dx*2], sy = XY[dx*2+1], k; - if( borderType == BORDER_CONSTANT && - (sx >= ssize.width || sx+1 < 0 || - sy >= ssize.height || sy+1 < 0) ) - { - for( k = 0; k < cn; k++ ) - D[k] = cval[k]; - } - else - { - int sx0, sx1, sy0, sy1; - const T *v0, *v1, *v2, *v3; - const AT* w = wtab + FXY[dx]*4; - if( borderType == BORDER_REPLICATE ) - { - sx0 = clip(sx, 0, ssize.width); - sx1 = clip(sx+1, 0, ssize.width); - sy0 = clip(sy, 0, ssize.height); - sy1 = clip(sy+1, 0, ssize.height); - v0 = S0 + sy0*sstep + sx0*cn; - v1 = S0 + sy0*sstep + sx1*cn; - v2 = S0 + sy1*sstep + sx0*cn; - v3 = S0 + sy1*sstep + sx1*cn; - } - else if( borderType == BORDER_TRANSPARENT && - ((unsigned)sx >= (unsigned)(ssize.width-1) || - (unsigned)sy >= (unsigned)(ssize.height-1))) - continue; - else - { - sx0 = borderInterpolate(sx, ssize.width, borderType); - sx1 = borderInterpolate(sx+1, ssize.width, borderType); - sy0 = borderInterpolate(sy, ssize.height, borderType); - sy1 = borderInterpolate(sy+1, ssize.height, borderType); - v0 = sx0 >= 0 && sy0 >= 0 ? S0 + sy0*sstep + sx0*cn : &cval[0]; - v1 = sx1 >= 0 && sy0 >= 0 ? S0 + sy0*sstep + sx1*cn : &cval[0]; - v2 = sx0 >= 0 && sy1 >= 0 ? S0 + sy1*sstep + sx0*cn : &cval[0]; - v3 = sx1 >= 0 && sy1 >= 0 ? S0 + sy1*sstep + sx1*cn : &cval[0]; - } - for( k = 0; k < cn; k++ ) - D[k] = castOp(WT(v0[k]*w[0] + v1[k]*w[1] + v2[k]*w[2] + v3[k]*w[3])); - } - } - } - } - } -} - - -template -static void remapBicubic( const Mat& _src, Mat& _dst, const Mat& _xy, - const Mat& _fxy, const void* _wtab, - int borderType, const Scalar& _borderValue ) -{ - typedef typename CastOp::rtype T; - typedef typename CastOp::type1 WT; - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - const AT* wtab = (const AT*)_wtab; - const T* S0 = (const T*)_src.data; - size_t sstep = _src.step/sizeof(S0[0]); - Scalar_ cval(saturate_cast(_borderValue[0]), - saturate_cast(_borderValue[1]), - saturate_cast(_borderValue[2]), - saturate_cast(_borderValue[3])); - int dx, dy; - CastOp castOp; - int borderType1 = borderType != BORDER_TRANSPARENT ? borderType : BORDER_REFLECT_101; - - unsigned width1 = std::max(ssize.width-3, 0), height1 = std::max(ssize.height-3, 0); - - if( _dst.isContinuous() && _xy.isContinuous() && _fxy.isContinuous() ) - { - dsize.width *= dsize.height; - dsize.height = 1; - } - - for( dy = 0; dy < dsize.height; dy++ ) - { - T* D = (T*)(_dst.data + _dst.step*dy); - const short* XY = (const short*)(_xy.data + _xy.step*dy); - const ushort* FXY = (const ushort*)(_fxy.data + _fxy.step*dy); - - for( dx = 0; dx < dsize.width; dx++, D += cn ) - { - int sx = XY[dx*2]-1, sy = XY[dx*2+1]-1; - const AT* w = wtab + FXY[dx]*16; - int i, k; - if( (unsigned)sx < width1 && (unsigned)sy < height1 ) - { - const T* S = S0 + sy*sstep + sx*cn; - for( k = 0; k < cn; k++ ) - { - WT sum = S[0]*w[0] + S[cn]*w[1] + S[cn*2]*w[2] + S[cn*3]*w[3]; - S += sstep; - sum += S[0]*w[4] + S[cn]*w[5] + S[cn*2]*w[6] + S[cn*3]*w[7]; - S += sstep; - sum += S[0]*w[8] + S[cn]*w[9] + S[cn*2]*w[10] + S[cn*3]*w[11]; - S += sstep; - sum += S[0]*w[12] + S[cn]*w[13] + S[cn*2]*w[14] + S[cn*3]*w[15]; - S += 1 - sstep*3; - D[k] = castOp(sum); - } - } - else - { - int x[4], y[4]; - if( borderType == BORDER_TRANSPARENT && - ((unsigned)(sx+1) >= (unsigned)ssize.width || - (unsigned)(sy+1) >= (unsigned)ssize.height) ) - continue; - - if( borderType1 == BORDER_CONSTANT && - (sx >= ssize.width || sx+4 <= 0 || - sy >= ssize.height || sy+4 <= 0)) - { - for( k = 0; k < cn; k++ ) - D[k] = cval[k]; - continue; - } - - for( i = 0; i < 4; i++ ) - { - x[i] = borderInterpolate(sx + i, ssize.width, borderType1)*cn; - y[i] = borderInterpolate(sy + i, ssize.height, borderType1); - } - - for( k = 0; k < cn; k++, S0++, w -= 16 ) - { - WT cv = cval[k], sum = cv*ONE; - for( i = 0; i < 4; i++, w += 4 ) - { - int yi = y[i]; - const T* S = S0 + yi*sstep; - if( yi < 0 ) - continue; - if( x[0] >= 0 ) - sum += (S[x[0]] - cv)*w[0]; - if( x[1] >= 0 ) - sum += (S[x[1]] - cv)*w[1]; - if( x[2] >= 0 ) - sum += (S[x[2]] - cv)*w[2]; - if( x[3] >= 0 ) - sum += (S[x[3]] - cv)*w[3]; - } - D[k] = castOp(sum); - } - S0 -= cn; - } - } - } -} - - -template -static void remapLanczos4( const Mat& _src, Mat& _dst, const Mat& _xy, - const Mat& _fxy, const void* _wtab, - int borderType, const Scalar& _borderValue ) -{ - typedef typename CastOp::rtype T; - typedef typename CastOp::type1 WT; - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - const AT* wtab = (const AT*)_wtab; - const T* S0 = (const T*)_src.data; - size_t sstep = _src.step/sizeof(S0[0]); - Scalar_ cval(saturate_cast(_borderValue[0]), - saturate_cast(_borderValue[1]), - saturate_cast(_borderValue[2]), - saturate_cast(_borderValue[3])); - int dx, dy; - CastOp castOp; - int borderType1 = borderType != BORDER_TRANSPARENT ? borderType : BORDER_REFLECT_101; - - unsigned width1 = std::max(ssize.width-7, 0), height1 = std::max(ssize.height-7, 0); - - if( _dst.isContinuous() && _xy.isContinuous() && _fxy.isContinuous() ) - { - dsize.width *= dsize.height; - dsize.height = 1; - } - - for( dy = 0; dy < dsize.height; dy++ ) - { - T* D = (T*)(_dst.data + _dst.step*dy); - const short* XY = (const short*)(_xy.data + _xy.step*dy); - const ushort* FXY = (const ushort*)(_fxy.data + _fxy.step*dy); - - for( dx = 0; dx < dsize.width; dx++, D += cn ) - { - int sx = XY[dx*2]-3, sy = XY[dx*2+1]-3; - const AT* w = wtab + FXY[dx]*64; - const T* S = S0 + sy*sstep + sx*cn; - int i, k; - if( (unsigned)sx < width1 && (unsigned)sy < height1 ) - { - for( k = 0; k < cn; k++ ) - { - WT sum = 0; - for( int r = 0; r < 8; r++, S += sstep, w += 8 ) - sum += S[0]*w[0] + S[cn]*w[1] + S[cn*2]*w[2] + S[cn*3]*w[3] + - S[cn*4]*w[4] + S[cn*5]*w[5] + S[cn*6]*w[6] + S[cn*7]*w[7]; - w -= 64; - S -= sstep*8 - 1; - D[k] = castOp(sum); - } - } - else - { - int x[8], y[8]; - if( borderType == BORDER_TRANSPARENT && - ((unsigned)(sx+3) >= (unsigned)ssize.width || - (unsigned)(sy+3) >= (unsigned)ssize.height) ) - continue; - - if( borderType1 == BORDER_CONSTANT && - (sx >= ssize.width || sx+8 <= 0 || - sy >= ssize.height || sy+8 <= 0)) - { - for( k = 0; k < cn; k++ ) - D[k] = cval[k]; - continue; - } - - for( i = 0; i < 8; i++ ) - { - x[i] = borderInterpolate(sx + i, ssize.width, borderType1)*cn; - y[i] = borderInterpolate(sy + i, ssize.height, borderType1); - } - - for( k = 0; k < cn; k++, S0++, w -= 64 ) - { - WT cv = cval[k], sum = cv*ONE; - for( i = 0; i < 8; i++, w += 8 ) - { - int yi = y[i]; - const T* S1 = S0 + yi*sstep; - if( yi < 0 ) - continue; - if( x[0] >= 0 ) - sum += (S1[x[0]] - cv)*w[0]; - if( x[1] >= 0 ) - sum += (S1[x[1]] - cv)*w[1]; - if( x[2] >= 0 ) - sum += (S1[x[2]] - cv)*w[2]; - if( x[3] >= 0 ) - sum += (S1[x[3]] - cv)*w[3]; - if( x[4] >= 0 ) - sum += (S1[x[4]] - cv)*w[4]; - if( x[5] >= 0 ) - sum += (S1[x[5]] - cv)*w[5]; - if( x[6] >= 0 ) - sum += (S1[x[6]] - cv)*w[6]; - if( x[7] >= 0 ) - sum += (S1[x[7]] - cv)*w[7]; - } - D[k] = castOp(sum); - } - S0 -= cn; - } - } - } -} - - -typedef void (*RemapNNFunc)(const Mat& _src, Mat& _dst, const Mat& _xy, - int borderType, const Scalar& _borderValue ); - -typedef void (*RemapFunc)(const Mat& _src, Mat& _dst, const Mat& _xy, - const Mat& _fxy, const void* _wtab, - int borderType, const Scalar& _borderValue); - -class RemapInvoker : - public ParallelLoopBody -{ -public: - RemapInvoker(const Mat& _src, Mat& _dst, const Mat *_m1, - const Mat *_m2, int _interpolation, int _borderType, const Scalar &_borderValue, - int _planar_input, RemapNNFunc _nnfunc, RemapFunc _ifunc, const void *_ctab) : - ParallelLoopBody(), src(&_src), dst(&_dst), m1(_m1), m2(_m2), - interpolation(_interpolation), borderType(_borderType), borderValue(_borderValue), - planar_input(_planar_input), nnfunc(_nnfunc), ifunc(_ifunc), ctab(_ctab) - { - } - - virtual void operator() (const Range& range) const - { - int x, y, x1, y1; - const int buf_size = 1 << 14; - int brows0 = std::min(128, dst->rows), map_depth = m1->depth(); - int bcols0 = std::min(buf_size/brows0, dst->cols); - brows0 = std::min(buf_size/bcols0, dst->rows); - #if CV_SSE2 - bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); - #endif - - Mat _bufxy(brows0, bcols0, CV_16SC2), _bufa; - if( !nnfunc ) - _bufa.create(brows0, bcols0, CV_16UC1); - - for( y = range.start; y < range.end; y += brows0 ) - { - for( x = 0; x < dst->cols; x += bcols0 ) - { - int brows = std::min(brows0, range.end - y); - int bcols = std::min(bcols0, dst->cols - x); - Mat dpart(*dst, Rect(x, y, bcols, brows)); - Mat bufxy(_bufxy, Rect(0, 0, bcols, brows)); - - if( nnfunc ) - { - if( m1->type() == CV_16SC2 && !m2->data ) // the data is already in the right format - bufxy = (*m1)(Rect(x, y, bcols, brows)); - else if( map_depth != CV_32F ) - { - for( y1 = 0; y1 < brows; y1++ ) - { - short* XY = (short*)(bufxy.data + bufxy.step*y1); - const short* sXY = (const short*)(m1->data + m1->step*(y+y1)) + x*2; - const ushort* sA = (const ushort*)(m2->data + m2->step*(y+y1)) + x; - - for( x1 = 0; x1 < bcols; x1++ ) - { - int a = sA[x1] & (INTER_TAB_SIZE2-1); - XY[x1*2] = sXY[x1*2] + NNDeltaTab_i[a][0]; - XY[x1*2+1] = sXY[x1*2+1] + NNDeltaTab_i[a][1]; - } - } - } - else if( !planar_input ) - (*m1)(Rect(x, y, bcols, brows)).convertTo(bufxy, bufxy.depth()); - else - { - for( y1 = 0; y1 < brows; y1++ ) - { - short* XY = (short*)(bufxy.data + bufxy.step*y1); - const float* sX = (const float*)(m1->data + m1->step*(y+y1)) + x; - const float* sY = (const float*)(m2->data + m2->step*(y+y1)) + x; - x1 = 0; - - #if CV_SSE2 - if( useSIMD ) - { - for( ; x1 <= bcols - 8; x1 += 8 ) - { - __m128 fx0 = _mm_loadu_ps(sX + x1); - __m128 fx1 = _mm_loadu_ps(sX + x1 + 4); - __m128 fy0 = _mm_loadu_ps(sY + x1); - __m128 fy1 = _mm_loadu_ps(sY + x1 + 4); - __m128i ix0 = _mm_cvtps_epi32(fx0); - __m128i ix1 = _mm_cvtps_epi32(fx1); - __m128i iy0 = _mm_cvtps_epi32(fy0); - __m128i iy1 = _mm_cvtps_epi32(fy1); - ix0 = _mm_packs_epi32(ix0, ix1); - iy0 = _mm_packs_epi32(iy0, iy1); - ix1 = _mm_unpacklo_epi16(ix0, iy0); - iy1 = _mm_unpackhi_epi16(ix0, iy0); - _mm_storeu_si128((__m128i*)(XY + x1*2), ix1); - _mm_storeu_si128((__m128i*)(XY + x1*2 + 8), iy1); - } - } - #endif - - for( ; x1 < bcols; x1++ ) - { - XY[x1*2] = saturate_cast(sX[x1]); - XY[x1*2+1] = saturate_cast(sY[x1]); - } - } - } - nnfunc( *src, dpart, bufxy, borderType, borderValue ); - continue; - } - - Mat bufa(_bufa, Rect(0, 0, bcols, brows)); - for( y1 = 0; y1 < brows; y1++ ) - { - short* XY = (short*)(bufxy.data + bufxy.step*y1); - ushort* A = (ushort*)(bufa.data + bufa.step*y1); - - if( m1->type() == CV_16SC2 && (m2->type() == CV_16UC1 || m2->type() == CV_16SC1) ) - { - bufxy = (*m1)(Rect(x, y, bcols, brows)); - - const ushort* sA = (const ushort*)(m2->data + m2->step*(y+y1)) + x; - for( x1 = 0; x1 < bcols; x1++ ) - A[x1] = (ushort)(sA[x1] & (INTER_TAB_SIZE2-1)); - } - else if( planar_input ) - { - const float* sX = (const float*)(m1->data + m1->step*(y+y1)) + x; - const float* sY = (const float*)(m2->data + m2->step*(y+y1)) + x; - - x1 = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128 scale = _mm_set1_ps((float)INTER_TAB_SIZE); - __m128i mask = _mm_set1_epi32(INTER_TAB_SIZE-1); - for( ; x1 <= bcols - 8; x1 += 8 ) - { - __m128 fx0 = _mm_loadu_ps(sX + x1); - __m128 fx1 = _mm_loadu_ps(sX + x1 + 4); - __m128 fy0 = _mm_loadu_ps(sY + x1); - __m128 fy1 = _mm_loadu_ps(sY + x1 + 4); - __m128i ix0 = _mm_cvtps_epi32(_mm_mul_ps(fx0, scale)); - __m128i ix1 = _mm_cvtps_epi32(_mm_mul_ps(fx1, scale)); - __m128i iy0 = _mm_cvtps_epi32(_mm_mul_ps(fy0, scale)); - __m128i iy1 = _mm_cvtps_epi32(_mm_mul_ps(fy1, scale)); - __m128i mx0 = _mm_and_si128(ix0, mask); - __m128i mx1 = _mm_and_si128(ix1, mask); - __m128i my0 = _mm_and_si128(iy0, mask); - __m128i my1 = _mm_and_si128(iy1, mask); - mx0 = _mm_packs_epi32(mx0, mx1); - my0 = _mm_packs_epi32(my0, my1); - my0 = _mm_slli_epi16(my0, INTER_BITS); - mx0 = _mm_or_si128(mx0, my0); - _mm_storeu_si128((__m128i*)(A + x1), mx0); - ix0 = _mm_srai_epi32(ix0, INTER_BITS); - ix1 = _mm_srai_epi32(ix1, INTER_BITS); - iy0 = _mm_srai_epi32(iy0, INTER_BITS); - iy1 = _mm_srai_epi32(iy1, INTER_BITS); - ix0 = _mm_packs_epi32(ix0, ix1); - iy0 = _mm_packs_epi32(iy0, iy1); - ix1 = _mm_unpacklo_epi16(ix0, iy0); - iy1 = _mm_unpackhi_epi16(ix0, iy0); - _mm_storeu_si128((__m128i*)(XY + x1*2), ix1); - _mm_storeu_si128((__m128i*)(XY + x1*2 + 8), iy1); - } - } - #endif - - for( ; x1 < bcols; x1++ ) - { - int sx = cvRound(sX[x1]*INTER_TAB_SIZE); - int sy = cvRound(sY[x1]*INTER_TAB_SIZE); - int v = (sy & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (sx & (INTER_TAB_SIZE-1)); - XY[x1*2] = saturate_cast(sx >> INTER_BITS); - XY[x1*2+1] = saturate_cast(sy >> INTER_BITS); - A[x1] = (ushort)v; - } - } - else - { - const float* sXY = (const float*)(m1->data + m1->step*(y+y1)) + x*2; - - for( x1 = 0; x1 < bcols; x1++ ) - { - int sx = cvRound(sXY[x1*2]*INTER_TAB_SIZE); - int sy = cvRound(sXY[x1*2+1]*INTER_TAB_SIZE); - int v = (sy & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (sx & (INTER_TAB_SIZE-1)); - XY[x1*2] = saturate_cast(sx >> INTER_BITS); - XY[x1*2+1] = saturate_cast(sy >> INTER_BITS); - A[x1] = (ushort)v; - } - } - } - ifunc(*src, dpart, bufxy, bufa, ctab, borderType, borderValue); - } - } - } - -private: - const Mat* src; - Mat* dst; - const Mat *m1, *m2; - int interpolation, borderType; - Scalar borderValue; - int planar_input; - RemapNNFunc nnfunc; - RemapFunc ifunc; - const void *ctab; -}; - -} - -void cv::remap( InputArray _src, OutputArray _dst, - InputArray _map1, InputArray _map2, - int interpolation, int borderType, const Scalar& borderValue ) -{ - static RemapNNFunc nn_tab[] = - { - remapNearest, remapNearest, remapNearest, remapNearest, - remapNearest, remapNearest, remapNearest, 0 - }; - - static RemapFunc linear_tab[] = - { - remapBilinear, RemapVec_8u, short>, 0, - remapBilinear, RemapNoVec, float>, - remapBilinear, RemapNoVec, float>, 0, - remapBilinear, RemapNoVec, float>, - remapBilinear, RemapNoVec, float>, 0 - }; - - static RemapFunc cubic_tab[] = - { - remapBicubic, short, INTER_REMAP_COEF_SCALE>, 0, - remapBicubic, float, 1>, - remapBicubic, float, 1>, 0, - remapBicubic, float, 1>, - remapBicubic, float, 1>, 0 - }; - - static RemapFunc lanczos4_tab[] = - { - remapLanczos4, short, INTER_REMAP_COEF_SCALE>, 0, - remapLanczos4, float, 1>, - remapLanczos4, float, 1>, 0, - remapLanczos4, float, 1>, - remapLanczos4, float, 1>, 0 - }; - - Mat src = _src.getMat(), map1 = _map1.getMat(), map2 = _map2.getMat(); - - CV_Assert( map1.size().area() > 0 ); - CV_Assert( !map2.data || (map2.size() == map1.size())); - - _dst.create( map1.size(), src.type() ); - Mat dst = _dst.getMat(); - if( dst.data == src.data ) - src = src.clone(); - - int depth = src.depth(); - RemapNNFunc nnfunc = 0; - RemapFunc ifunc = 0; - const void* ctab = 0; - bool fixpt = depth == CV_8U; - bool planar_input = false; - - if( interpolation == INTER_NEAREST ) - { - nnfunc = nn_tab[depth]; - CV_Assert( nnfunc != 0 ); - } - else - { - if( interpolation == INTER_AREA ) - interpolation = INTER_LINEAR; - - if( interpolation == INTER_LINEAR ) - ifunc = linear_tab[depth]; - else if( interpolation == INTER_CUBIC ) - ifunc = cubic_tab[depth]; - else if( interpolation == INTER_LANCZOS4 ) - ifunc = lanczos4_tab[depth]; - else - CV_Error( CV_StsBadArg, "Unknown interpolation method" ); - CV_Assert( ifunc != 0 ); - ctab = initInterTab2D( interpolation, fixpt ); - } - - const Mat *m1 = &map1, *m2 = &map2; - - if( (map1.type() == CV_16SC2 && (map2.type() == CV_16UC1 || map2.type() == CV_16SC1 || !map2.data)) || - (map2.type() == CV_16SC2 && (map1.type() == CV_16UC1 || map1.type() == CV_16SC1 || !map1.data)) ) - { - if( map1.type() != CV_16SC2 ) - std::swap(m1, m2); - } - else - { - CV_Assert( ((map1.type() == CV_32FC2 || map1.type() == CV_16SC2) && !map2.data) || - (map1.type() == CV_32FC1 && map2.type() == CV_32FC1) ); - planar_input = map1.channels() == 1; - } - - RemapInvoker invoker(src, dst, m1, m2, interpolation, - borderType, borderValue, planar_input, nnfunc, ifunc, - ctab); - parallel_for_(Range(0, dst.rows), invoker, dst.total()/(double)(1<<16)); -} - - -void cv::convertMaps( InputArray _map1, InputArray _map2, - OutputArray _dstmap1, OutputArray _dstmap2, - int dstm1type, bool nninterpolate ) -{ - Mat map1 = _map1.getMat(), map2 = _map2.getMat(), dstmap1, dstmap2; - Size size = map1.size(); - const Mat *m1 = &map1, *m2 = &map2; - int m1type = m1->type(), m2type = m2->type(); - - CV_Assert( (m1type == CV_16SC2 && (nninterpolate || m2type == CV_16UC1 || m2type == CV_16SC1)) || - (m2type == CV_16SC2 && (nninterpolate || m1type == CV_16UC1 || m1type == CV_16SC1)) || - (m1type == CV_32FC1 && m2type == CV_32FC1) || - (m1type == CV_32FC2 && !m2->data) ); - - if( m2type == CV_16SC2 ) - { - std::swap( m1, m2 ); - std::swap( m1type, m2type ); - } - - if( dstm1type <= 0 ) - dstm1type = m1type == CV_16SC2 ? CV_32FC2 : CV_16SC2; - CV_Assert( dstm1type == CV_16SC2 || dstm1type == CV_32FC1 || dstm1type == CV_32FC2 ); - _dstmap1.create( size, dstm1type ); - dstmap1 = _dstmap1.getMat(); - - if( !nninterpolate && dstm1type != CV_32FC2 ) - { - _dstmap2.create( size, dstm1type == CV_16SC2 ? CV_16UC1 : CV_32FC1 ); - dstmap2 = _dstmap2.getMat(); - } - else - _dstmap2.release(); - - if( m1type == dstm1type || (nninterpolate && - ((m1type == CV_16SC2 && dstm1type == CV_32FC2) || - (m1type == CV_32FC2 && dstm1type == CV_16SC2))) ) - { - m1->convertTo( dstmap1, dstmap1.type() ); - if( dstmap2.data && dstmap2.type() == m2->type() ) - m2->copyTo( dstmap2 ); - return; - } - - if( m1type == CV_32FC1 && dstm1type == CV_32FC2 ) - { - Mat vdata[] = { *m1, *m2 }; - merge( vdata, 2, dstmap1 ); - return; - } - - if( m1type == CV_32FC2 && dstm1type == CV_32FC1 ) - { - Mat mv[] = { dstmap1, dstmap2 }; - split( *m1, mv ); - return; - } - - if( m1->isContinuous() && (!m2->data || m2->isContinuous()) && - dstmap1.isContinuous() && (!dstmap2.data || dstmap2.isContinuous()) ) - { - size.width *= size.height; - size.height = 1; - } - - const float scale = 1.f/INTER_TAB_SIZE; - int x, y; - for( y = 0; y < size.height; y++ ) - { - const float* src1f = (const float*)(m1->data + m1->step*y); - const float* src2f = (const float*)(m2->data + m2->step*y); - const short* src1 = (const short*)src1f; - const ushort* src2 = (const ushort*)src2f; - - float* dst1f = (float*)(dstmap1.data + dstmap1.step*y); - float* dst2f = (float*)(dstmap2.data + dstmap2.step*y); - short* dst1 = (short*)dst1f; - ushort* dst2 = (ushort*)dst2f; - - if( m1type == CV_32FC1 && dstm1type == CV_16SC2 ) - { - if( nninterpolate ) - for( x = 0; x < size.width; x++ ) - { - dst1[x*2] = saturate_cast(src1f[x]); - dst1[x*2+1] = saturate_cast(src2f[x]); - } - else - for( x = 0; x < size.width; x++ ) - { - int ix = saturate_cast(src1f[x]*INTER_TAB_SIZE); - int iy = saturate_cast(src2f[x]*INTER_TAB_SIZE); - dst1[x*2] = saturate_cast(ix >> INTER_BITS); - dst1[x*2+1] = saturate_cast(iy >> INTER_BITS); - dst2[x] = (ushort)((iy & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (ix & (INTER_TAB_SIZE-1))); - } - } - else if( m1type == CV_32FC2 && dstm1type == CV_16SC2 ) - { - if( nninterpolate ) - for( x = 0; x < size.width; x++ ) - { - dst1[x*2] = saturate_cast(src1f[x*2]); - dst1[x*2+1] = saturate_cast(src1f[x*2+1]); - } - else - for( x = 0; x < size.width; x++ ) - { - int ix = saturate_cast(src1f[x*2]*INTER_TAB_SIZE); - int iy = saturate_cast(src1f[x*2+1]*INTER_TAB_SIZE); - dst1[x*2] = saturate_cast(ix >> INTER_BITS); - dst1[x*2+1] = saturate_cast(iy >> INTER_BITS); - dst2[x] = (ushort)((iy & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (ix & (INTER_TAB_SIZE-1))); - } - } - else if( m1type == CV_16SC2 && dstm1type == CV_32FC1 ) - { - for( x = 0; x < size.width; x++ ) - { - int fxy = src2 ? src2[x] & (INTER_TAB_SIZE2-1) : 0; - dst1f[x] = src1[x*2] + (fxy & (INTER_TAB_SIZE-1))*scale; - dst2f[x] = src1[x*2+1] + (fxy >> INTER_BITS)*scale; - } - } - else if( m1type == CV_16SC2 && dstm1type == CV_32FC2 ) - { - for( x = 0; x < size.width; x++ ) - { - int fxy = src2 ? src2[x] & (INTER_TAB_SIZE2-1): 0; - dst1f[x*2] = src1[x*2] + (fxy & (INTER_TAB_SIZE-1))*scale; - dst1f[x*2+1] = src1[x*2+1] + (fxy >> INTER_BITS)*scale; - } - } - else - CV_Error( CV_StsNotImplemented, "Unsupported combination of input/output matrices" ); - } -} - - -namespace cv -{ - -class warpAffineInvoker : - public ParallelLoopBody -{ -public: - warpAffineInvoker(const Mat &_src, Mat &_dst, int _interpolation, int _borderType, - const Scalar &_borderValue, int *_adelta, int *_bdelta, double *_M) : - ParallelLoopBody(), src(_src), dst(_dst), interpolation(_interpolation), - borderType(_borderType), borderValue(_borderValue), adelta(_adelta), bdelta(_bdelta), - M(_M) - { - } - - virtual void operator() (const Range& range) const - { - const int BLOCK_SZ = 64; - short XY[BLOCK_SZ*BLOCK_SZ*2], A[BLOCK_SZ*BLOCK_SZ]; - const int AB_BITS = MAX(10, (int)INTER_BITS); - const int AB_SCALE = 1 << AB_BITS; - int round_delta = interpolation == INTER_NEAREST ? AB_SCALE/2 : AB_SCALE/INTER_TAB_SIZE/2, x, y, x1, y1; - #if CV_SSE2 - bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); - #endif - - int bh0 = std::min(BLOCK_SZ/2, dst.rows); - int bw0 = std::min(BLOCK_SZ*BLOCK_SZ/bh0, dst.cols); - bh0 = std::min(BLOCK_SZ*BLOCK_SZ/bw0, dst.rows); - - for( y = range.start; y < range.end; y += bh0 ) - { - for( x = 0; x < dst.cols; x += bw0 ) - { - int bw = std::min( bw0, dst.cols - x); - int bh = std::min( bh0, range.end - y); - - Mat _XY(bh, bw, CV_16SC2, XY), matA; - Mat dpart(dst, Rect(x, y, bw, bh)); - - for( y1 = 0; y1 < bh; y1++ ) - { - short* xy = XY + y1*bw*2; - int X0 = saturate_cast((M[1]*(y + y1) + M[2])*AB_SCALE) + round_delta; - int Y0 = saturate_cast((M[4]*(y + y1) + M[5])*AB_SCALE) + round_delta; - - if( interpolation == INTER_NEAREST ) - for( x1 = 0; x1 < bw; x1++ ) - { - int X = (X0 + adelta[x+x1]) >> AB_BITS; - int Y = (Y0 + bdelta[x+x1]) >> AB_BITS; - xy[x1*2] = saturate_cast(X); - xy[x1*2+1] = saturate_cast(Y); - } - else - { - short* alpha = A + y1*bw; - x1 = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i fxy_mask = _mm_set1_epi32(INTER_TAB_SIZE - 1); - __m128i XX = _mm_set1_epi32(X0), YY = _mm_set1_epi32(Y0); - for( ; x1 <= bw - 8; x1 += 8 ) - { - __m128i tx0, tx1, ty0, ty1; - tx0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(adelta + x + x1)), XX); - ty0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(bdelta + x + x1)), YY); - tx1 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(adelta + x + x1 + 4)), XX); - ty1 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(bdelta + x + x1 + 4)), YY); - - tx0 = _mm_srai_epi32(tx0, AB_BITS - INTER_BITS); - ty0 = _mm_srai_epi32(ty0, AB_BITS - INTER_BITS); - tx1 = _mm_srai_epi32(tx1, AB_BITS - INTER_BITS); - ty1 = _mm_srai_epi32(ty1, AB_BITS - INTER_BITS); - - __m128i fx_ = _mm_packs_epi32(_mm_and_si128(tx0, fxy_mask), - _mm_and_si128(tx1, fxy_mask)); - __m128i fy_ = _mm_packs_epi32(_mm_and_si128(ty0, fxy_mask), - _mm_and_si128(ty1, fxy_mask)); - tx0 = _mm_packs_epi32(_mm_srai_epi32(tx0, INTER_BITS), - _mm_srai_epi32(tx1, INTER_BITS)); - ty0 = _mm_packs_epi32(_mm_srai_epi32(ty0, INTER_BITS), - _mm_srai_epi32(ty1, INTER_BITS)); - fx_ = _mm_adds_epi16(fx_, _mm_slli_epi16(fy_, INTER_BITS)); - - _mm_storeu_si128((__m128i*)(xy + x1*2), _mm_unpacklo_epi16(tx0, ty0)); - _mm_storeu_si128((__m128i*)(xy + x1*2 + 8), _mm_unpackhi_epi16(tx0, ty0)); - _mm_storeu_si128((__m128i*)(alpha + x1), fx_); - } - } - #endif - for( ; x1 < bw; x1++ ) - { - int X = (X0 + adelta[x+x1]) >> (AB_BITS - INTER_BITS); - int Y = (Y0 + bdelta[x+x1]) >> (AB_BITS - INTER_BITS); - xy[x1*2] = saturate_cast(X >> INTER_BITS); - xy[x1*2+1] = saturate_cast(Y >> INTER_BITS); - alpha[x1] = (short)((Y & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + - (X & (INTER_TAB_SIZE-1))); - } - } - } - - if( interpolation == INTER_NEAREST ) - remap( src, dpart, _XY, Mat(), interpolation, borderType, borderValue ); - else - { - Mat _matA(bh, bw, CV_16U, A); - remap( src, dpart, _XY, _matA, interpolation, borderType, borderValue ); - } - } - } - } - -private: - Mat src; - Mat dst; - int interpolation, borderType; - Scalar borderValue; - int *adelta, *bdelta; - double *M; -}; - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -class IPPwarpAffineInvoker : - public ParallelLoopBody -{ -public: - IPPwarpAffineInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[2][3], int &_interpolation, int &_borderType, const Scalar &_borderValue, ippiWarpAffineBackFunc _func, bool *_ok) : - ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs), borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok) - { - *ok = true; - } - - virtual void operator() (const Range& range) const - { - IppiSize srcsize = { src.cols, src.rows }; - IppiRect srcroi = { 0, 0, src.cols, src.rows }; - IppiRect dstroi = { 0, range.start, dst.cols, range.end - range.start }; - int cnn = src.channels(); - if( borderType == BORDER_CONSTANT ) - { - IppiSize setSize = { dst.cols, range.end - range.start }; - void *dataPointer = dst.data + dst.step[0] * range.start; - if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) ) - { - *ok = false; - return; - } - } - if( func( src.data, srcsize, (int)src.step[0], srcroi, dst.data, (int)dst.step[0], dstroi, coeffs, mode ) < 0) ////Aug 2013: problem in IPP 7.1, 8.0 : sometimes function return ippStsCoeffErr - *ok = false; - } -private: - Mat &src; - Mat &dst; - double (&coeffs)[2][3]; - int mode; - int borderType; - Scalar borderValue; - ippiWarpAffineBackFunc func; - bool *ok; - const IPPwarpAffineInvoker& operator= (const IPPwarpAffineInvoker&); -}; -#endif - -} - - -void cv::warpAffine( InputArray _src, OutputArray _dst, - InputArray _M0, Size dsize, - int flags, int borderType, const Scalar& borderValue ) -{ - Mat src = _src.getMat(), M0 = _M0.getMat(); - _dst.create( dsize.area() == 0 ? src.size() : dsize, src.type() ); - Mat dst = _dst.getMat(); - CV_Assert( src.cols > 0 && src.rows > 0 ); - if( dst.data == src.data ) - src = src.clone(); - - double M[6]; - Mat matM(2, 3, CV_64F, M); - int interpolation = flags & INTER_MAX; - if( interpolation == INTER_AREA ) - interpolation = INTER_LINEAR; - - CV_Assert( (M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3 ); - M0.convertTo(matM, matM.type()); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if( tegra::warpAffine(src, dst, M, flags, borderType, borderValue) ) - return; -#endif - - if( !(flags & WARP_INVERSE_MAP) ) - { - double D = M[0]*M[4] - M[1]*M[3]; - D = D != 0 ? 1./D : 0; - double A11 = M[4]*D, A22=M[0]*D; - M[0] = A11; M[1] *= -D; - M[3] *= -D; M[4] = A22; - double b1 = -M[0]*M[2] - M[1]*M[5]; - double b2 = -M[3]*M[2] - M[4]*M[5]; - M[2] = b1; M[5] = b2; - } - - int x; - AutoBuffer _abdelta(dst.cols*2); - int* adelta = &_abdelta[0], *bdelta = adelta + dst.cols; - const int AB_BITS = MAX(10, (int)INTER_BITS); - const int AB_SCALE = 1 << AB_BITS; -/* -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - int depth = src.depth(); - int channels = src.channels(); - if( ( depth == CV_8U || depth == CV_16U || depth == CV_32F ) && - ( channels == 1 || channels == 3 || channels == 4 ) && - ( borderType == cv::BORDER_TRANSPARENT || ( borderType == cv::BORDER_CONSTANT ) ) ) - { - int type = src.type(); - ippiWarpAffineBackFunc ippFunc = - type == CV_8UC1 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_8u_C1R : - type == CV_8UC3 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_8u_C3R : - type == CV_8UC4 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_8u_C4R : - type == CV_16UC1 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_16u_C1R : - type == CV_16UC3 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_16u_C3R : - type == CV_16UC4 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_16u_C4R : - type == CV_32FC1 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_32f_C1R : - type == CV_32FC3 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_32f_C3R : - type == CV_32FC4 ? (ippiWarpAffineBackFunc)ippiWarpAffineBack_32f_C4R : - 0; - int mode = - flags == INTER_LINEAR ? IPPI_INTER_LINEAR : - flags == INTER_NEAREST ? IPPI_INTER_NN : - flags == INTER_CUBIC ? IPPI_INTER_CUBIC : - 0; - if( mode && ippFunc ) - { - double coeffs[2][3]; - for( int i = 0; i < 2; i++ ) - { - for( int j = 0; j < 3; j++ ) - { - coeffs[i][j] = matM.at(i, j); - } - } - bool ok; - Range range(0, dst.rows); - IPPwarpAffineInvoker invoker(src, dst, coeffs, mode, borderType, borderValue, ippFunc, &ok); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); - if( ok ) - return; - } - } -#endif -*/ - for( x = 0; x < dst.cols; x++ ) - { - adelta[x] = saturate_cast(M[0]*x*AB_SCALE); - bdelta[x] = saturate_cast(M[3]*x*AB_SCALE); - } - - Range range(0, dst.rows); - warpAffineInvoker invoker(src, dst, interpolation, borderType, - borderValue, adelta, bdelta, M); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); -} - - -namespace cv -{ - -class warpPerspectiveInvoker : - public ParallelLoopBody -{ -public: - - warpPerspectiveInvoker(const Mat &_src, Mat &_dst, double *_M, int _interpolation, - int _borderType, const Scalar &_borderValue) : - ParallelLoopBody(), src(_src), dst(_dst), M(_M), interpolation(_interpolation), - borderType(_borderType), borderValue(_borderValue) - { - } - - virtual void operator() (const Range& range) const - { - const int BLOCK_SZ = 32; - short XY[BLOCK_SZ*BLOCK_SZ*2], A[BLOCK_SZ*BLOCK_SZ]; - int x, y, x1, y1, width = dst.cols, height = dst.rows; - - int bh0 = std::min(BLOCK_SZ/2, height); - int bw0 = std::min(BLOCK_SZ*BLOCK_SZ/bh0, width); - bh0 = std::min(BLOCK_SZ*BLOCK_SZ/bw0, height); - - for( y = range.start; y < range.end; y += bh0 ) - { - for( x = 0; x < width; x += bw0 ) - { - int bw = std::min( bw0, width - x); - int bh = std::min( bh0, range.end - y); // height - - Mat _XY(bh, bw, CV_16SC2, XY), matA; - Mat dpart(dst, Rect(x, y, bw, bh)); - - for( y1 = 0; y1 < bh; y1++ ) - { - short* xy = XY + y1*bw*2; - double X0 = M[0]*x + M[1]*(y + y1) + M[2]; - double Y0 = M[3]*x + M[4]*(y + y1) + M[5]; - double W0 = M[6]*x + M[7]*(y + y1) + M[8]; - - if( interpolation == INTER_NEAREST ) - for( x1 = 0; x1 < bw; x1++ ) - { - double W = W0 + M[6]*x1; - W = W ? 1./W : 0; - double fX = std::max((double)INT_MIN, std::min((double)INT_MAX, (X0 + M[0]*x1)*W)); - double fY = std::max((double)INT_MIN, std::min((double)INT_MAX, (Y0 + M[3]*x1)*W)); - int X = saturate_cast(fX); - int Y = saturate_cast(fY); - - xy[x1*2] = saturate_cast(X); - xy[x1*2+1] = saturate_cast(Y); - } - else - { - short* alpha = A + y1*bw; - for( x1 = 0; x1 < bw; x1++ ) - { - double W = W0 + M[6]*x1; - W = W ? INTER_TAB_SIZE/W : 0; - double fX = std::max((double)INT_MIN, std::min((double)INT_MAX, (X0 + M[0]*x1)*W)); - double fY = std::max((double)INT_MIN, std::min((double)INT_MAX, (Y0 + M[3]*x1)*W)); - int X = saturate_cast(fX); - int Y = saturate_cast(fY); - - xy[x1*2] = saturate_cast(X >> INTER_BITS); - xy[x1*2+1] = saturate_cast(Y >> INTER_BITS); - alpha[x1] = (short)((Y & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + - (X & (INTER_TAB_SIZE-1))); - } - } - } - - if( interpolation == INTER_NEAREST ) - remap( src, dpart, _XY, Mat(), interpolation, borderType, borderValue ); - else - { - Mat _matA(bh, bw, CV_16U, A); - remap( src, dpart, _XY, _matA, interpolation, borderType, borderValue ); - } - } - } - } - -private: - Mat src; - Mat dst; - double* M; - int interpolation, borderType; - Scalar borderValue; -}; - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -class IPPwarpPerspectiveInvoker : - public ParallelLoopBody -{ -public: - IPPwarpPerspectiveInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[3][3], int &_interpolation, int &_borderType, const Scalar &_borderValue, ippiWarpPerspectiveBackFunc _func, bool *_ok) : - ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs), borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok) - { - *ok = true; - } - - virtual void operator() (const Range& range) const - { - IppiSize srcsize = {src.cols, src.rows}; - IppiRect srcroi = {0, 0, src.cols, src.rows}; - IppiRect dstroi = {0, range.start, dst.cols, range.end - range.start}; - int cnn = src.channels(); - - if( borderType == BORDER_CONSTANT ) - { - IppiSize setSize = {dst.cols, range.end - range.start}; - void *dataPointer = dst.data + dst.step[0] * range.start; - if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) ) - { - *ok = false; - return; - } - } - if( func(src.data, srcsize, (int)src.step[0], srcroi, dst.data, (int)dst.step[0], dstroi, coeffs, mode) < 0) - *ok = false; - } -private: - Mat &src; - Mat &dst; - double (&coeffs)[3][3]; - int mode; - int borderType; - const Scalar borderValue; - ippiWarpPerspectiveBackFunc func; - bool *ok; - const IPPwarpPerspectiveInvoker& operator= (const IPPwarpPerspectiveInvoker&); -}; -#endif - -} - -void cv::warpPerspective( InputArray _src, OutputArray _dst, InputArray _M0, - Size dsize, int flags, int borderType, const Scalar& borderValue ) -{ - Mat src = _src.getMat(), M0 = _M0.getMat(); - _dst.create( dsize.area() == 0 ? src.size() : dsize, src.type() ); - Mat dst = _dst.getMat(); - - CV_Assert( src.cols > 0 && src.rows > 0 ); - if( dst.data == src.data ) - src = src.clone(); - - double M[9]; - Mat matM(3, 3, CV_64F, M); - int interpolation = flags & INTER_MAX; - if( interpolation == INTER_AREA ) - interpolation = INTER_LINEAR; - - CV_Assert( (M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 3 && M0.cols == 3 ); - M0.convertTo(matM, matM.type()); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if( tegra::warpPerspective(src, dst, M, flags, borderType, borderValue) ) - return; -#endif - - if( !(flags & WARP_INVERSE_MAP) ) - invert(matM, matM); -/* -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - int depth = src.depth(); - int channels = src.channels(); - if( ( depth == CV_8U || depth == CV_16U || depth == CV_32F ) && - ( channels == 1 || channels == 3 || channels == 4 ) && - ( borderType == cv::BORDER_TRANSPARENT || borderType == cv::BORDER_CONSTANT ) ) - { - int type = src.type(); - ippiWarpPerspectiveBackFunc ippFunc = - type == CV_8UC1 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_8u_C1R : - type == CV_8UC3 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_8u_C3R : - type == CV_8UC4 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_8u_C4R : - type == CV_16UC1 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_16u_C1R : - type == CV_16UC3 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_16u_C3R : - type == CV_16UC4 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_16u_C4R : - type == CV_32FC1 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_32f_C1R : - type == CV_32FC3 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_32f_C3R : - type == CV_32FC4 ? (ippiWarpPerspectiveBackFunc)ippiWarpPerspectiveBack_32f_C4R : - 0; - int mode = - flags == INTER_LINEAR ? IPPI_INTER_LINEAR : - flags == INTER_NEAREST ? IPPI_INTER_NN : - flags == INTER_CUBIC ? IPPI_INTER_CUBIC : - 0; - if( mode && ippFunc ) - { - double coeffs[3][3]; - for( int i = 0; i < 3; i++ ) - { - for( int j = 0; j < 3; j++ ) - { - coeffs[i][j] = matM.at(i, j); - } - } - bool ok; - Range range(0, dst.rows); - IPPwarpPerspectiveInvoker invoker(src, dst, coeffs, mode, borderType, borderValue, ippFunc, &ok); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); - if( ok ) - return; - } - } -#endif -*/ - Range range(0, dst.rows); - warpPerspectiveInvoker invoker(src, dst, M, interpolation, borderType, borderValue); - parallel_for_(range, invoker, dst.total()/(double)(1<<16)); -} - - -cv::Mat cv::getRotationMatrix2D( Point2f center, double angle, double scale ) -{ - angle *= CV_PI/180; - double alpha = cos(angle)*scale; - double beta = sin(angle)*scale; - - Mat M(2, 3, CV_64F); - double* m = (double*)M.data; - - m[0] = alpha; - m[1] = beta; - m[2] = (1-alpha)*center.x - beta*center.y; - m[3] = -beta; - m[4] = alpha; - m[5] = beta*center.x + (1-alpha)*center.y; - - return M; -} - -/* Calculates coefficients of perspective transformation - * which maps (xi,yi) to (ui,vi), (i=1,2,3,4): - * - * c00*xi + c01*yi + c02 - * ui = --------------------- - * c20*xi + c21*yi + c22 - * - * c10*xi + c11*yi + c12 - * vi = --------------------- - * c20*xi + c21*yi + c22 - * - * Coefficients are calculated by solving linear system: - * / x0 y0 1 0 0 0 -x0*u0 -y0*u0 \ /c00\ /u0\ - * | x1 y1 1 0 0 0 -x1*u1 -y1*u1 | |c01| |u1| - * | x2 y2 1 0 0 0 -x2*u2 -y2*u2 | |c02| |u2| - * | x3 y3 1 0 0 0 -x3*u3 -y3*u3 |.|c10|=|u3|, - * | 0 0 0 x0 y0 1 -x0*v0 -y0*v0 | |c11| |v0| - * | 0 0 0 x1 y1 1 -x1*v1 -y1*v1 | |c12| |v1| - * | 0 0 0 x2 y2 1 -x2*v2 -y2*v2 | |c20| |v2| - * \ 0 0 0 x3 y3 1 -x3*v3 -y3*v3 / \c21/ \v3/ - * - * where: - * cij - matrix coefficients, c22 = 1 - */ -cv::Mat cv::getPerspectiveTransform( const Point2f src[], const Point2f dst[] ) -{ - Mat M(3, 3, CV_64F), X(8, 1, CV_64F, M.data); - double a[8][8], b[8]; - Mat A(8, 8, CV_64F, a), B(8, 1, CV_64F, b); - - for( int i = 0; i < 4; ++i ) - { - a[i][0] = a[i+4][3] = src[i].x; - a[i][1] = a[i+4][4] = src[i].y; - a[i][2] = a[i+4][5] = 1; - a[i][3] = a[i][4] = a[i][5] = - a[i+4][0] = a[i+4][1] = a[i+4][2] = 0; - a[i][6] = -src[i].x*dst[i].x; - a[i][7] = -src[i].y*dst[i].x; - a[i+4][6] = -src[i].x*dst[i].y; - a[i+4][7] = -src[i].y*dst[i].y; - b[i] = dst[i].x; - b[i+4] = dst[i].y; - } - - solve( A, B, X, DECOMP_SVD ); - ((double*)M.data)[8] = 1.; - - return M; -} - -/* Calculates coefficients of affine transformation - * which maps (xi,yi) to (ui,vi), (i=1,2,3): - * - * ui = c00*xi + c01*yi + c02 - * - * vi = c10*xi + c11*yi + c12 - * - * Coefficients are calculated by solving linear system: - * / x0 y0 1 0 0 0 \ /c00\ /u0\ - * | x1 y1 1 0 0 0 | |c01| |u1| - * | x2 y2 1 0 0 0 | |c02| |u2| - * | 0 0 0 x0 y0 1 | |c10| |v0| - * | 0 0 0 x1 y1 1 | |c11| |v1| - * \ 0 0 0 x2 y2 1 / |c12| |v2| - * - * where: - * cij - matrix coefficients - */ - -cv::Mat cv::getAffineTransform( const Point2f src[], const Point2f dst[] ) -{ - Mat M(2, 3, CV_64F), X(6, 1, CV_64F, M.data); - double a[6*6], b[6]; - Mat A(6, 6, CV_64F, a), B(6, 1, CV_64F, b); - - for( int i = 0; i < 3; i++ ) - { - int j = i*12; - int k = i*12+6; - a[j] = a[k+3] = src[i].x; - a[j+1] = a[k+4] = src[i].y; - a[j+2] = a[k+5] = 1; - a[j+3] = a[j+4] = a[j+5] = 0; - a[k] = a[k+1] = a[k+2] = 0; - b[i*2] = dst[i].x; - b[i*2+1] = dst[i].y; - } - - solve( A, B, X ); - return M; -} - -void cv::invertAffineTransform(InputArray _matM, OutputArray __iM) -{ - Mat matM = _matM.getMat(); - CV_Assert(matM.rows == 2 && matM.cols == 3); - __iM.create(2, 3, matM.type()); - Mat _iM = __iM.getMat(); - - if( matM.type() == CV_32F ) - { - const float* M = (const float*)matM.data; - float* iM = (float*)_iM.data; - int step = (int)(matM.step/sizeof(M[0])), istep = (int)(_iM.step/sizeof(iM[0])); - - double D = M[0]*M[step+1] - M[1]*M[step]; - D = D != 0 ? 1./D : 0; - double A11 = M[step+1]*D, A22 = M[0]*D, A12 = -M[1]*D, A21 = -M[step]*D; - double b1 = -A11*M[2] - A12*M[step+2]; - double b2 = -A21*M[2] - A22*M[step+2]; - - iM[0] = (float)A11; iM[1] = (float)A12; iM[2] = (float)b1; - iM[istep] = (float)A21; iM[istep+1] = (float)A22; iM[istep+2] = (float)b2; - } - else if( matM.type() == CV_64F ) - { - const double* M = (const double*)matM.data; - double* iM = (double*)_iM.data; - int step = (int)(matM.step/sizeof(M[0])), istep = (int)(_iM.step/sizeof(iM[0])); - - double D = M[0]*M[step+1] - M[1]*M[step]; - D = D != 0 ? 1./D : 0; - double A11 = M[step+1]*D, A22 = M[0]*D, A12 = -M[1]*D, A21 = -M[step]*D; - double b1 = -A11*M[2] - A12*M[step+2]; - double b2 = -A21*M[2] - A22*M[step+2]; - - iM[0] = A11; iM[1] = A12; iM[2] = b1; - iM[istep] = A21; iM[istep+1] = A22; iM[istep+2] = b2; - } - else - CV_Error( CV_StsUnsupportedFormat, "" ); -} - -cv::Mat cv::getPerspectiveTransform(InputArray _src, InputArray _dst) -{ - Mat src = _src.getMat(), dst = _dst.getMat(); - CV_Assert(src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4); - return getPerspectiveTransform((const Point2f*)src.data, (const Point2f*)dst.data); -} - -cv::Mat cv::getAffineTransform(InputArray _src, InputArray _dst) -{ - Mat src = _src.getMat(), dst = _dst.getMat(); - CV_Assert(src.checkVector(2, CV_32F) == 3 && dst.checkVector(2, CV_32F) == 3); - return getAffineTransform((const Point2f*)src.data, (const Point2f*)dst.data); -} - -CV_IMPL void -cvResize( const CvArr* srcarr, CvArr* dstarr, int method ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - CV_Assert( src.type() == dst.type() ); - cv::resize( src, dst, dst.size(), (double)dst.cols/src.cols, - (double)dst.rows/src.rows, method ); -} - - -CV_IMPL void -cvWarpAffine( const CvArr* srcarr, CvArr* dstarr, const CvMat* marr, - int flags, CvScalar fillval ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - cv::Mat matrix = cv::cvarrToMat(marr); - CV_Assert( src.type() == dst.type() ); - cv::warpAffine( src, dst, matrix, dst.size(), flags, - (flags & CV_WARP_FILL_OUTLIERS) ? cv::BORDER_CONSTANT : cv::BORDER_TRANSPARENT, - fillval ); -} - -CV_IMPL void -cvWarpPerspective( const CvArr* srcarr, CvArr* dstarr, const CvMat* marr, - int flags, CvScalar fillval ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - cv::Mat matrix = cv::cvarrToMat(marr); - CV_Assert( src.type() == dst.type() ); - cv::warpPerspective( src, dst, matrix, dst.size(), flags, - (flags & CV_WARP_FILL_OUTLIERS) ? cv::BORDER_CONSTANT : cv::BORDER_TRANSPARENT, - fillval ); -} - -CV_IMPL void -cvRemap( const CvArr* srcarr, CvArr* dstarr, - const CvArr* _mapx, const CvArr* _mapy, - int flags, CvScalar fillval ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), dst0 = dst; - cv::Mat mapx = cv::cvarrToMat(_mapx), mapy = cv::cvarrToMat(_mapy); - CV_Assert( src.type() == dst.type() && dst.size() == mapx.size() ); - cv::remap( src, dst, mapx, mapy, flags & cv::INTER_MAX, - (flags & CV_WARP_FILL_OUTLIERS) ? cv::BORDER_CONSTANT : cv::BORDER_TRANSPARENT, - fillval ); - CV_Assert( dst0.data == dst.data ); -} - - -CV_IMPL CvMat* -cv2DRotationMatrix( CvPoint2D32f center, double angle, - double scale, CvMat* matrix ) -{ - cv::Mat M0 = cv::cvarrToMat(matrix), M = cv::getRotationMatrix2D(center, angle, scale); - CV_Assert( M.size() == M0.size() ); - M.convertTo(M0, M0.type()); - return matrix; -} - - -CV_IMPL CvMat* -cvGetPerspectiveTransform( const CvPoint2D32f* src, - const CvPoint2D32f* dst, - CvMat* matrix ) -{ - cv::Mat M0 = cv::cvarrToMat(matrix), - M = cv::getPerspectiveTransform((const cv::Point2f*)src, (const cv::Point2f*)dst); - CV_Assert( M.size() == M0.size() ); - M.convertTo(M0, M0.type()); - return matrix; -} - - -CV_IMPL CvMat* -cvGetAffineTransform( const CvPoint2D32f* src, - const CvPoint2D32f* dst, - CvMat* matrix ) -{ - cv::Mat M0 = cv::cvarrToMat(matrix), - M = cv::getAffineTransform((const cv::Point2f*)src, (const cv::Point2f*)dst); - CV_Assert( M.size() == M0.size() ); - M.convertTo(M0, M0.type()); - return matrix; -} - - -CV_IMPL void -cvConvertMaps( const CvArr* arr1, const CvArr* arr2, CvArr* dstarr1, CvArr* dstarr2 ) -{ - cv::Mat map1 = cv::cvarrToMat(arr1), map2; - cv::Mat dstmap1 = cv::cvarrToMat(dstarr1), dstmap2; - - if( arr2 ) - map2 = cv::cvarrToMat(arr2); - if( dstarr2 ) - { - dstmap2 = cv::cvarrToMat(dstarr2); - if( dstmap2.type() == CV_16SC1 ) - dstmap2 = cv::Mat(dstmap2.size(), CV_16UC1, dstmap2.data, dstmap2.step); - } - - cv::convertMaps( map1, map2, dstmap1, dstmap2, dstmap1.type(), false ); -} - -/****************************************************************************************\ -* Log-Polar Transform * -\****************************************************************************************/ - -/* now it is done via Remap; more correct implementation should use - some super-sampling technique outside of the "fovea" circle */ -CV_IMPL void -cvLogPolar( const CvArr* srcarr, CvArr* dstarr, - CvPoint2D32f center, double M, int flags ) -{ - cv::Ptr mapx, mapy; - - CvMat srcstub, *src = cvGetMat(srcarr, &srcstub); - CvMat dststub, *dst = cvGetMat(dstarr, &dststub); - CvSize ssize, dsize; - - if( !CV_ARE_TYPES_EQ( src, dst )) - CV_Error( CV_StsUnmatchedFormats, "" ); - - if( M <= 0 ) - CV_Error( CV_StsOutOfRange, "M should be >0" ); - - ssize = cvGetMatSize(src); - dsize = cvGetMatSize(dst); - - mapx = cvCreateMat( dsize.height, dsize.width, CV_32F ); - mapy = cvCreateMat( dsize.height, dsize.width, CV_32F ); - - if( !(flags & CV_WARP_INVERSE_MAP) ) - { - int phi, rho; - cv::AutoBuffer _exp_tab(dsize.width); - double* exp_tab = _exp_tab; - - for( rho = 0; rho < dst->width; rho++ ) - exp_tab[rho] = std::exp(rho/M); - - for( phi = 0; phi < dsize.height; phi++ ) - { - double cp = cos(phi*2*CV_PI/dsize.height); - double sp = sin(phi*2*CV_PI/dsize.height); - float* mx = (float*)(mapx->data.ptr + phi*mapx->step); - float* my = (float*)(mapy->data.ptr + phi*mapy->step); - - for( rho = 0; rho < dsize.width; rho++ ) - { - double r = exp_tab[rho]; - double x = r*cp + center.x; - double y = r*sp + center.y; - - mx[rho] = (float)x; - my[rho] = (float)y; - } - } - } - else - { - int x, y; - CvMat bufx, bufy, bufp, bufa; - double ascale = ssize.height/(2*CV_PI); - cv::AutoBuffer _buf(4*dsize.width); - float* buf = _buf; - - bufx = cvMat( 1, dsize.width, CV_32F, buf ); - bufy = cvMat( 1, dsize.width, CV_32F, buf + dsize.width ); - bufp = cvMat( 1, dsize.width, CV_32F, buf + dsize.width*2 ); - bufa = cvMat( 1, dsize.width, CV_32F, buf + dsize.width*3 ); - - for( x = 0; x < dsize.width; x++ ) - bufx.data.fl[x] = (float)x - center.x; - - for( y = 0; y < dsize.height; y++ ) - { - float* mx = (float*)(mapx->data.ptr + y*mapx->step); - float* my = (float*)(mapy->data.ptr + y*mapy->step); - - for( x = 0; x < dsize.width; x++ ) - bufy.data.fl[x] = (float)y - center.y; - -#if 1 - cvCartToPolar( &bufx, &bufy, &bufp, &bufa ); - - for( x = 0; x < dsize.width; x++ ) - bufp.data.fl[x] += 1.f; - - cvLog( &bufp, &bufp ); - - for( x = 0; x < dsize.width; x++ ) - { - double rho = bufp.data.fl[x]*M; - double phi = bufa.data.fl[x]*ascale; - - mx[x] = (float)rho; - my[x] = (float)phi; - } -#else - for( x = 0; x < dsize.width; x++ ) - { - double xx = bufx.data.fl[x]; - double yy = bufy.data.fl[x]; - - double p = log(sqrt(xx*xx + yy*yy) + 1.)*M; - double a = atan2(yy,xx); - if( a < 0 ) - a = 2*CV_PI + a; - a *= ascale; - - mx[x] = (float)p; - my[x] = (float)a; - } -#endif - } - } - - cvRemap( src, dst, mapx, mapy, flags, cvScalarAll(0) ); -} - - -/**************************************************************************************** - Linear-Polar Transform - J.L. Blanco, Apr 2009 - ****************************************************************************************/ -CV_IMPL -void cvLinearPolar( const CvArr* srcarr, CvArr* dstarr, - CvPoint2D32f center, double maxRadius, int flags ) -{ - cv::Ptr mapx, mapy; - - CvMat srcstub, *src = (CvMat*)srcarr; - CvMat dststub, *dst = (CvMat*)dstarr; - CvSize ssize, dsize; - - src = cvGetMat( srcarr, &srcstub,0,0 ); - dst = cvGetMat( dstarr, &dststub,0,0 ); - - if( !CV_ARE_TYPES_EQ( src, dst )) - CV_Error( CV_StsUnmatchedFormats, "" ); - - ssize.width = src->cols; - ssize.height = src->rows; - dsize.width = dst->cols; - dsize.height = dst->rows; - - mapx = cvCreateMat( dsize.height, dsize.width, CV_32F ); - mapy = cvCreateMat( dsize.height, dsize.width, CV_32F ); - - if( !(flags & CV_WARP_INVERSE_MAP) ) - { - int phi, rho; - - for( phi = 0; phi < dsize.height; phi++ ) - { - double cp = cos(phi*2*CV_PI/dsize.height); - double sp = sin(phi*2*CV_PI/dsize.height); - float* mx = (float*)(mapx->data.ptr + phi*mapx->step); - float* my = (float*)(mapy->data.ptr + phi*mapy->step); - - for( rho = 0; rho < dsize.width; rho++ ) - { - double r = maxRadius*(rho+1)/dsize.width; - double x = r*cp + center.x; - double y = r*sp + center.y; - - mx[rho] = (float)x; - my[rho] = (float)y; - } - } - } - else - { - int x, y; - CvMat bufx, bufy, bufp, bufa; - const double ascale = ssize.height/(2*CV_PI); - const double pscale = ssize.width/maxRadius; - - cv::AutoBuffer _buf(4*dsize.width); - float* buf = _buf; - - bufx = cvMat( 1, dsize.width, CV_32F, buf ); - bufy = cvMat( 1, dsize.width, CV_32F, buf + dsize.width ); - bufp = cvMat( 1, dsize.width, CV_32F, buf + dsize.width*2 ); - bufa = cvMat( 1, dsize.width, CV_32F, buf + dsize.width*3 ); - - for( x = 0; x < dsize.width; x++ ) - bufx.data.fl[x] = (float)x - center.x; - - for( y = 0; y < dsize.height; y++ ) - { - float* mx = (float*)(mapx->data.ptr + y*mapx->step); - float* my = (float*)(mapy->data.ptr + y*mapy->step); - - for( x = 0; x < dsize.width; x++ ) - bufy.data.fl[x] = (float)y - center.y; - - cvCartToPolar( &bufx, &bufy, &bufp, &bufa, 0 ); - - for( x = 0; x < dsize.width; x++ ) - bufp.data.fl[x] += 1.f; - - for( x = 0; x < dsize.width; x++ ) - { - double rho = bufp.data.fl[x]*pscale; - double phi = bufa.data.fl[x]*ascale; - mx[x] = (float)rho; - my[x] = (float)phi; - } - } - } - - cvRemap( src, dst, mapx, mapy, flags, cvScalarAll(0) ); -} - - -/* End of file. */ diff --git a/modules/imgproc/src/linefit.cpp b/modules/imgproc/src/linefit.cpp deleted file mode 100644 index c513565..0000000 --- a/modules/imgproc/src/linefit.cpp +++ /dev/null @@ -1,719 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -static const double eps = 1e-6; - -static CvStatus -icvFitLine2D_wods( CvPoint2D32f * points, int _count, float *weights, float *line ) -{ - double x = 0, y = 0, x2 = 0, y2 = 0, xy = 0, w = 0; - double dx2, dy2, dxy; - int i; - int count = _count; - float t; - - /* Calculating the average of x and y... */ - - if( weights == 0 ) - { - for( i = 0; i < count; i += 1 ) - { - x += points[i].x; - y += points[i].y; - x2 += points[i].x * points[i].x; - y2 += points[i].y * points[i].y; - xy += points[i].x * points[i].y; - } - w = (float) count; - } - else - { - for( i = 0; i < count; i += 1 ) - { - x += weights[i] * points[i].x; - y += weights[i] * points[i].y; - x2 += weights[i] * points[i].x * points[i].x; - y2 += weights[i] * points[i].y * points[i].y; - xy += weights[i] * points[i].x * points[i].y; - w += weights[i]; - } - } - - x /= w; - y /= w; - x2 /= w; - y2 /= w; - xy /= w; - - dx2 = x2 - x * x; - dy2 = y2 - y * y; - dxy = xy - x * y; - - t = (float) atan2( 2 * dxy, dx2 - dy2 ) / 2; - line[0] = (float) cos( t ); - line[1] = (float) sin( t ); - - line[2] = (float) x; - line[3] = (float) y; - - return CV_NO_ERR; -} - -static CvStatus -icvFitLine3D_wods( CvPoint3D32f * points, int count, float *weights, float *line ) -{ - int i; - float w0 = 0; - float x0 = 0, y0 = 0, z0 = 0; - float x2 = 0, y2 = 0, z2 = 0, xy = 0, yz = 0, xz = 0; - float dx2, dy2, dz2, dxy, dxz, dyz; - float *v; - float n; - float det[9], evc[9], evl[3]; - - memset( evl, 0, 3*sizeof(evl[0])); - memset( evc, 0, 9*sizeof(evl[0])); - - if( weights ) - { - for( i = 0; i < count; i++ ) - { - float x = points[i].x; - float y = points[i].y; - float z = points[i].z; - float w = weights[i]; - - - x2 += x * x * w; - xy += x * y * w; - xz += x * z * w; - y2 += y * y * w; - yz += y * z * w; - z2 += z * z * w; - x0 += x * w; - y0 += y * w; - z0 += z * w; - w0 += w; - } - } - else - { - for( i = 0; i < count; i++ ) - { - float x = points[i].x; - float y = points[i].y; - float z = points[i].z; - - x2 += x * x; - xy += x * y; - xz += x * z; - y2 += y * y; - yz += y * z; - z2 += z * z; - x0 += x; - y0 += y; - z0 += z; - } - w0 = (float) count; - } - - x2 /= w0; - xy /= w0; - xz /= w0; - y2 /= w0; - yz /= w0; - z2 /= w0; - - x0 /= w0; - y0 /= w0; - z0 /= w0; - - dx2 = x2 - x0 * x0; - dxy = xy - x0 * y0; - dxz = xz - x0 * z0; - dy2 = y2 - y0 * y0; - dyz = yz - y0 * z0; - dz2 = z2 - z0 * z0; - - det[0] = dz2 + dy2; - det[1] = -dxy; - det[2] = -dxz; - det[3] = det[1]; - det[4] = dx2 + dz2; - det[5] = -dyz; - det[6] = det[2]; - det[7] = det[5]; - det[8] = dy2 + dx2; - - /* Searching for a eigenvector of det corresponding to the minimal eigenvalue */ -#if 1 - { - CvMat _det = cvMat( 3, 3, CV_32F, det ); - CvMat _evc = cvMat( 3, 3, CV_32F, evc ); - CvMat _evl = cvMat( 3, 1, CV_32F, evl ); - cvEigenVV( &_det, &_evc, &_evl, 0 ); - i = evl[0] < evl[1] ? (evl[0] < evl[2] ? 0 : 2) : (evl[1] < evl[2] ? 1 : 2); - } -#else - { - CvMat _det = cvMat( 3, 3, CV_32F, det ); - CvMat _evc = cvMat( 3, 3, CV_32F, evc ); - CvMat _evl = cvMat( 1, 3, CV_32F, evl ); - - cvSVD( &_det, &_evl, &_evc, 0, CV_SVD_MODIFY_A+CV_SVD_U_T ); - } - i = 2; -#endif - v = &evc[i * 3]; - n = (float) sqrt( (double)v[0] * v[0] + (double)v[1] * v[1] + (double)v[2] * v[2] ); - n = (float)MAX(n, eps); - line[0] = v[0] / n; - line[1] = v[1] / n; - line[2] = v[2] / n; - line[3] = x0; - line[4] = y0; - line[5] = z0; - - return CV_NO_ERR; -} - -static double -icvCalcDist2D( CvPoint2D32f * points, int count, float *_line, float *dist ) -{ - int j; - float px = _line[2], py = _line[3]; - float nx = _line[1], ny = -_line[0]; - double sum_dist = 0.; - - for( j = 0; j < count; j++ ) - { - float x, y; - - x = points[j].x - px; - y = points[j].y - py; - - dist[j] = (float) fabs( nx * x + ny * y ); - sum_dist += dist[j]; - } - - return sum_dist; -} - -static double -icvCalcDist3D( CvPoint3D32f * points, int count, float *_line, float *dist ) -{ - int j; - float px = _line[3], py = _line[4], pz = _line[5]; - float vx = _line[0], vy = _line[1], vz = _line[2]; - double sum_dist = 0.; - - for( j = 0; j < count; j++ ) - { - float x, y, z; - double p1, p2, p3; - - x = points[j].x - px; - y = points[j].y - py; - z = points[j].z - pz; - - p1 = vy * z - vz * y; - p2 = vz * x - vx * z; - p3 = vx * y - vy * x; - - dist[j] = (float) sqrt( p1*p1 + p2*p2 + p3*p3 ); - sum_dist += dist[j]; - } - - return sum_dist; -} - -static void -icvWeightL1( float *d, int count, float *w ) -{ - int i; - - for( i = 0; i < count; i++ ) - { - double t = fabs( (double) d[i] ); - w[i] = (float)(1. / MAX(t, eps)); - } -} - -static void -icvWeightL12( float *d, int count, float *w ) -{ - int i; - - for( i = 0; i < count; i++ ) - { - w[i] = 1.0f / (float) sqrt( 1 + (double) (d[i] * d[i] * 0.5) ); - } -} - - -static void -icvWeightHuber( float *d, int count, float *w, float _c ) -{ - int i; - const float c = _c <= 0 ? 1.345f : _c; - - for( i = 0; i < count; i++ ) - { - if( d[i] < c ) - w[i] = 1.0f; - else - w[i] = c/d[i]; - } -} - - -static void -icvWeightFair( float *d, int count, float *w, float _c ) -{ - int i; - const float c = _c == 0 ? 1 / 1.3998f : 1 / _c; - - for( i = 0; i < count; i++ ) - { - w[i] = 1 / (1 + d[i] * c); - } -} - -static void -icvWeightWelsch( float *d, int count, float *w, float _c ) -{ - int i; - const float c = _c == 0 ? 1 / 2.9846f : 1 / _c; - - for( i = 0; i < count; i++ ) - { - w[i] = (float) exp( -d[i] * d[i] * c * c ); - } -} - - -/* Takes an array of 2D points, type of distance (including user-defined -distance specified by callbacks, fills the array of four floats with line -parameters A, B, C, D, where (A, B) is the normalized direction vector, -(C, D) is the point that belongs to the line. */ - -static CvStatus icvFitLine2D( CvPoint2D32f * points, int count, int dist, - float _param, float reps, float aeps, float *line ) -{ - double EPS = count*FLT_EPSILON; - void (*calc_weights) (float *, int, float *) = 0; - void (*calc_weights_param) (float *, int, float *, float) = 0; - float *w; /* weights */ - float *r; /* square distances */ - int i, j, k; - float _line[6], _lineprev[6]; - float rdelta = reps != 0 ? reps : 1.0f; - float adelta = aeps != 0 ? aeps : 0.01f; - double min_err = DBL_MAX, err = 0; - CvRNG rng = cvRNG(-1); - - memset( line, 0, 4*sizeof(line[0]) ); - - switch (dist) - { - case CV_DIST_L2: - return icvFitLine2D_wods( points, count, 0, line ); - - case CV_DIST_L1: - calc_weights = icvWeightL1; - break; - - case CV_DIST_L12: - calc_weights = icvWeightL12; - break; - - case CV_DIST_FAIR: - calc_weights_param = icvWeightFair; - break; - - case CV_DIST_WELSCH: - calc_weights_param = icvWeightWelsch; - break; - - case CV_DIST_HUBER: - calc_weights_param = icvWeightHuber; - break; - - /*case CV_DIST_USER: - calc_weights = (void ( * )(float *, int, float *)) _PFP.fp; - break;*/ - - default: - return CV_BADFACTOR_ERR; - } - - w = (float *) cvAlloc( count * sizeof( float )); - r = (float *) cvAlloc( count * sizeof( float )); - - for( k = 0; k < 20; k++ ) - { - int first = 1; - for( i = 0; i < count; i++ ) - w[i] = 0.f; - - for( i = 0; i < MIN(count,10); ) - { - j = cvRandInt(&rng) % count; - if( w[j] < FLT_EPSILON ) - { - w[j] = 1.f; - i++; - } - } - - icvFitLine2D_wods( points, count, w, _line ); - for( i = 0; i < 30; i++ ) - { - double sum_w = 0; - - if( first ) - { - first = 0; - } - else - { - double t = _line[0] * _lineprev[0] + _line[1] * _lineprev[1]; - t = MAX(t,-1.); - t = MIN(t,1.); - if( fabs(acos(t)) < adelta ) - { - float x, y, d; - - x = (float) fabs( _line[2] - _lineprev[2] ); - y = (float) fabs( _line[3] - _lineprev[3] ); - - d = x > y ? x : y; - if( d < rdelta ) - break; - } - } - /* calculate distances */ - err = icvCalcDist2D( points, count, _line, r ); - if( err < EPS ) - break; - - /* calculate weights */ - if( calc_weights ) - calc_weights( r, count, w ); - else - calc_weights_param( r, count, w, _param ); - - for( j = 0; j < count; j++ ) - sum_w += w[j]; - - if( fabs(sum_w) > FLT_EPSILON ) - { - sum_w = 1./sum_w; - for( j = 0; j < count; j++ ) - w[j] = (float)(w[j]*sum_w); - } - else - { - for( j = 0; j < count; j++ ) - w[j] = 1.f; - } - - /* save the line parameters */ - memcpy( _lineprev, _line, 4 * sizeof( float )); - - /* Run again... */ - icvFitLine2D_wods( points, count, w, _line ); - } - - if( err < min_err ) - { - min_err = err; - memcpy( line, _line, 4 * sizeof(line[0])); - if( err < EPS ) - break; - } - } - - cvFree( &w ); - cvFree( &r ); - return CV_OK; -} - - -/* Takes an array of 3D points, type of distance (including user-defined -distance specified by callbacks, fills the array of four floats with line -parameters A, B, C, D, E, F, where (A, B, C) is the normalized direction vector, -(D, E, F) is the point that belongs to the line. */ - -static CvStatus -icvFitLine3D( CvPoint3D32f * points, int count, int dist, - float _param, float reps, float aeps, float *line ) -{ - double EPS = count*FLT_EPSILON; - void (*calc_weights) (float *, int, float *) = 0; - void (*calc_weights_param) (float *, int, float *, float) = 0; - float *w; /* weights */ - float *r; /* square distances */ - int i, j, k; - float _line[6]={0,0,0,0,0,0}, _lineprev[6]={0,0,0,0,0,0}; - float rdelta = reps != 0 ? reps : 1.0f; - float adelta = aeps != 0 ? aeps : 0.01f; - double min_err = DBL_MAX, err = 0; - CvRNG rng = cvRNG(-1); - - switch (dist) - { - case CV_DIST_L2: - return icvFitLine3D_wods( points, count, 0, line ); - - case CV_DIST_L1: - calc_weights = icvWeightL1; - break; - - case CV_DIST_L12: - calc_weights = icvWeightL12; - break; - - case CV_DIST_FAIR: - calc_weights_param = icvWeightFair; - break; - - case CV_DIST_WELSCH: - calc_weights_param = icvWeightWelsch; - break; - - case CV_DIST_HUBER: - calc_weights_param = icvWeightHuber; - break; - - /*case CV_DIST_USER: - _PFP.p = param; - calc_weights = (void ( * )(float *, int, float *)) _PFP.fp; - break;*/ - - default: - return CV_BADFACTOR_ERR; - } - - w = (float *) cvAlloc( count * sizeof( float )); - r = (float *) cvAlloc( count * sizeof( float )); - - for( k = 0; k < 20; k++ ) - { - int first = 1; - for( i = 0; i < count; i++ ) - w[i] = 0.f; - - for( i = 0; i < MIN(count,10); ) - { - j = cvRandInt(&rng) % count; - if( w[j] < FLT_EPSILON ) - { - w[j] = 1.f; - i++; - } - } - - icvFitLine3D_wods( points, count, w, _line ); - for( i = 0; i < 30; i++ ) - { - double sum_w = 0; - - if( first ) - { - first = 0; - } - else - { - double t = _line[0] * _lineprev[0] + _line[1] * _lineprev[1] + _line[2] * _lineprev[2]; - t = MAX(t,-1.); - t = MIN(t,1.); - if( fabs(acos(t)) < adelta ) - { - float x, y, z, ax, ay, az, dx, dy, dz, d; - - x = _line[3] - _lineprev[3]; - y = _line[4] - _lineprev[4]; - z = _line[5] - _lineprev[5]; - ax = _line[0] - _lineprev[0]; - ay = _line[1] - _lineprev[1]; - az = _line[2] - _lineprev[2]; - dx = (float) fabs( y * az - z * ay ); - dy = (float) fabs( z * ax - x * az ); - dz = (float) fabs( x * ay - y * ax ); - - d = dx > dy ? (dx > dz ? dx : dz) : (dy > dz ? dy : dz); - if( d < rdelta ) - break; - } - } - /* calculate distances */ - if( icvCalcDist3D( points, count, _line, r ) < FLT_EPSILON*count ) - break; - - /* calculate weights */ - if( calc_weights ) - calc_weights( r, count, w ); - else - calc_weights_param( r, count, w, _param ); - - for( j = 0; j < count; j++ ) - sum_w += w[j]; - - if( fabs(sum_w) > FLT_EPSILON ) - { - sum_w = 1./sum_w; - for( j = 0; j < count; j++ ) - w[j] = (float)(w[j]*sum_w); - } - else - { - for( j = 0; j < count; j++ ) - w[j] = 1.f; - } - - /* save the line parameters */ - memcpy( _lineprev, _line, 6 * sizeof( float )); - - /* Run again... */ - icvFitLine3D_wods( points, count, w, _line ); - } - - if( err < min_err ) - { - min_err = err; - memcpy( line, _line, 6 * sizeof(line[0])); - if( err < EPS ) - break; - } - } - - // Return... - cvFree( &w ); - cvFree( &r ); - return CV_OK; -} - - -CV_IMPL void -cvFitLine( const CvArr* array, int dist, double param, - double reps, double aeps, float *line ) -{ - cv::AutoBuffer buffer; - - schar* points = 0; - union { CvContour contour; CvSeq seq; } header; - CvSeqBlock block; - CvSeq* ptseq = (CvSeq*)array; - int type; - - if( !line ) - CV_Error( CV_StsNullPtr, "NULL pointer to line parameters" ); - - if( CV_IS_SEQ(ptseq) ) - { - type = CV_SEQ_ELTYPE(ptseq); - if( ptseq->total == 0 ) - CV_Error( CV_StsBadSize, "The sequence has no points" ); - if( (type!=CV_32FC2 && type!=CV_32FC3 && type!=CV_32SC2 && type!=CV_32SC3) || - CV_ELEM_SIZE(type) != ptseq->elem_size ) - CV_Error( CV_StsUnsupportedFormat, - "Input sequence must consist of 2d points or 3d points" ); - } - else - { - CvMat* mat = (CvMat*)array; - type = CV_MAT_TYPE(mat->type); - if( !CV_IS_MAT(mat)) - CV_Error( CV_StsBadArg, "Input array is not a sequence nor matrix" ); - - if( !CV_IS_MAT_CONT(mat->type) || - (type!=CV_32FC2 && type!=CV_32FC3 && type!=CV_32SC2 && type!=CV_32SC3) || - (mat->width != 1 && mat->height != 1)) - CV_Error( CV_StsBadArg, - "Input array must be 1d continuous array of 2d or 3d points" ); - - ptseq = cvMakeSeqHeaderForArray( - CV_SEQ_KIND_GENERIC|type, sizeof(CvContour), CV_ELEM_SIZE(type), mat->data.ptr, - mat->width + mat->height - 1, &header.seq, &block ); - } - - if( reps < 0 || aeps < 0 ) - CV_Error( CV_StsOutOfRange, "Both reps and aeps must be non-negative" ); - - if( CV_MAT_DEPTH(type) == CV_32F && ptseq->first->next == ptseq->first ) - { - /* no need to copy data in this case */ - points = ptseq->first->data; - } - else - { - buffer.allocate(ptseq->total*CV_ELEM_SIZE(type)); - points = buffer; - cvCvtSeqToArray( ptseq, points, CV_WHOLE_SEQ ); - - if( CV_MAT_DEPTH(type) != CV_32F ) - { - int i, total = ptseq->total*CV_MAT_CN(type); - assert( CV_MAT_DEPTH(type) == CV_32S ); - - for( i = 0; i < total; i++ ) - ((float*)points)[i] = (float)((int*)points)[i]; - } - } - - if( dist == CV_DIST_USER ) - CV_Error( CV_StsBadArg, "User-defined distance is not allowed" ); - - if( CV_MAT_CN(type) == 2 ) - { - IPPI_CALL( icvFitLine2D( (CvPoint2D32f*)points, ptseq->total, - dist, (float)param, (float)reps, (float)aeps, line )); - } - else - { - IPPI_CALL( icvFitLine3D( (CvPoint3D32f*)points, ptseq->total, - dist, (float)param, (float)reps, (float)aeps, line )); - } -} - -/* End of file. */ diff --git a/modules/imgproc/src/matchcontours.cpp b/modules/imgproc/src/matchcontours.cpp deleted file mode 100644 index 44c01e0..0000000 --- a/modules/imgproc/src/matchcontours.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -/*F/////////////////////////////////////////////////////////////////////////////////////// -// Name: cvMatchContours -// Purpose: -// Calculates matching of the two contours -// Context: -// Parameters: -// contour_1 - pointer to the first input contour object. -// contour_2 - pointer to the second input contour object. -// method - method for the matching calculation -// (now CV_IPPI_CONTOURS_MATCH_I1, CV_CONTOURS_MATCH_I2 or -// CV_CONTOURS_MATCH_I3 only ) -// rezult - output calculated measure -// -//F*/ -CV_IMPL double -cvMatchShapes( const void* contour1, const void* contour2, - int method, double /*parameter*/ ) -{ - CvMoments moments; - CvHuMoments huMoments; - double ma[7], mb[7]; - int i, sma, smb; - double eps = 1.e-5; - double mmm; - double result = 0; - - if( !contour1 || !contour2 ) - CV_Error( CV_StsNullPtr, "" ); - - // calculate moments of the first shape - cvMoments( contour1, &moments ); - cvGetHuMoments( &moments, &huMoments ); - - ma[0] = huMoments.hu1; - ma[1] = huMoments.hu2; - ma[2] = huMoments.hu3; - ma[3] = huMoments.hu4; - ma[4] = huMoments.hu5; - ma[5] = huMoments.hu6; - ma[6] = huMoments.hu7; - - - // calculate moments of the second shape - cvMoments( contour2, &moments ); - cvGetHuMoments( &moments, &huMoments ); - - mb[0] = huMoments.hu1; - mb[1] = huMoments.hu2; - mb[2] = huMoments.hu3; - mb[3] = huMoments.hu4; - mb[4] = huMoments.hu5; - mb[5] = huMoments.hu6; - mb[6] = huMoments.hu7; - - switch (method) - { - case 1: - { - for( i = 0; i < 7; i++ ) - { - double ama = fabs( ma[i] ); - double amb = fabs( mb[i] ); - - if( ma[i] > 0 ) - sma = 1; - else if( ma[i] < 0 ) - sma = -1; - else - sma = 0; - if( mb[i] > 0 ) - smb = 1; - else if( mb[i] < 0 ) - smb = -1; - else - smb = 0; - - if( ama > eps && amb > eps ) - { - ama = 1. / (sma * log10( ama )); - amb = 1. / (smb * log10( amb )); - result += fabs( -ama + amb ); - } - } - break; - } - - case 2: - { - for( i = 0; i < 7; i++ ) - { - double ama = fabs( ma[i] ); - double amb = fabs( mb[i] ); - - if( ma[i] > 0 ) - sma = 1; - else if( ma[i] < 0 ) - sma = -1; - else - sma = 0; - if( mb[i] > 0 ) - smb = 1; - else if( mb[i] < 0 ) - smb = -1; - else - smb = 0; - - if( ama > eps && amb > eps ) - { - ama = sma * log10( ama ); - amb = smb * log10( amb ); - result += fabs( -ama + amb ); - } - } - break; - } - - case 3: - { - for( i = 0; i < 7; i++ ) - { - double ama = fabs( ma[i] ); - double amb = fabs( mb[i] ); - - if( ma[i] > 0 ) - sma = 1; - else if( ma[i] < 0 ) - sma = -1; - else - sma = 0; - if( mb[i] > 0 ) - smb = 1; - else if( mb[i] < 0 ) - smb = -1; - else - smb = 0; - - if( ama > eps && amb > eps ) - { - ama = sma * log10( ama ); - amb = smb * log10( amb ); - mmm = fabs( (ama - amb) / ama ); - if( result < mmm ) - result = mmm; - } - } - break; - } - default: - CV_Error( CV_StsBadArg, "Unknown comparison method" ); - } - - return result; -} - - -/* End of file. */ diff --git a/modules/imgproc/src/moments.cpp b/modules/imgproc/src/moments.cpp deleted file mode 100644 index 2fca862..0000000 --- a/modules/imgproc/src/moments.cpp +++ /dev/null @@ -1,655 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -// The function calculates center of gravity and the central second order moments -static void icvCompleteMomentState( CvMoments* moments ) -{ - double cx = 0, cy = 0; - double mu20, mu11, mu02; - - assert( moments != 0 ); - moments->inv_sqrt_m00 = 0; - - if( fabs(moments->m00) > DBL_EPSILON ) - { - double inv_m00 = 1. / moments->m00; - cx = moments->m10 * inv_m00; - cy = moments->m01 * inv_m00; - moments->inv_sqrt_m00 = std::sqrt( fabs(inv_m00) ); - } - - // mu20 = m20 - m10*cx - mu20 = moments->m20 - moments->m10 * cx; - // mu11 = m11 - m10*cy - mu11 = moments->m11 - moments->m10 * cy; - // mu02 = m02 - m01*cy - mu02 = moments->m02 - moments->m01 * cy; - - moments->mu20 = mu20; - moments->mu11 = mu11; - moments->mu02 = mu02; - - // mu30 = m30 - cx*(3*mu20 + cx*m10) - moments->mu30 = moments->m30 - cx * (3 * mu20 + cx * moments->m10); - mu11 += mu11; - // mu21 = m21 - cx*(2*mu11 + cx*m01) - cy*mu20 - moments->mu21 = moments->m21 - cx * (mu11 + cx * moments->m01) - cy * mu20; - // mu12 = m12 - cy*(2*mu11 + cy*m10) - cx*mu02 - moments->mu12 = moments->m12 - cy * (mu11 + cy * moments->m10) - cx * mu02; - // mu03 = m03 - cy*(3*mu02 + cy*m01) - moments->mu03 = moments->m03 - cy * (3 * mu02 + cy * moments->m01); -} - - -static void icvContourMoments( CvSeq* contour, CvMoments* moments ) -{ - int is_float = CV_SEQ_ELTYPE(contour) == CV_32FC2; - - if( contour->total ) - { - CvSeqReader reader; - double a00, a10, a01, a20, a11, a02, a30, a21, a12, a03; - double xi, yi, xi2, yi2, xi_1, yi_1, xi_12, yi_12, dxy, xii_1, yii_1; - int lpt = contour->total; - - a00 = a10 = a01 = a20 = a11 = a02 = a30 = a21 = a12 = a03 = 0; - - cvStartReadSeq( contour, &reader, 0 ); - - if( !is_float ) - { - xi_1 = ((CvPoint*)(reader.ptr))->x; - yi_1 = ((CvPoint*)(reader.ptr))->y; - } - else - { - xi_1 = ((CvPoint2D32f*)(reader.ptr))->x; - yi_1 = ((CvPoint2D32f*)(reader.ptr))->y; - } - CV_NEXT_SEQ_ELEM( contour->elem_size, reader ); - - xi_12 = xi_1 * xi_1; - yi_12 = yi_1 * yi_1; - - while( lpt-- > 0 ) - { - if( !is_float ) - { - xi = ((CvPoint*)(reader.ptr))->x; - yi = ((CvPoint*)(reader.ptr))->y; - } - else - { - xi = ((CvPoint2D32f*)(reader.ptr))->x; - yi = ((CvPoint2D32f*)(reader.ptr))->y; - } - CV_NEXT_SEQ_ELEM( contour->elem_size, reader ); - - xi2 = xi * xi; - yi2 = yi * yi; - dxy = xi_1 * yi - xi * yi_1; - xii_1 = xi_1 + xi; - yii_1 = yi_1 + yi; - - a00 += dxy; - a10 += dxy * xii_1; - a01 += dxy * yii_1; - a20 += dxy * (xi_1 * xii_1 + xi2); - a11 += dxy * (xi_1 * (yii_1 + yi_1) + xi * (yii_1 + yi)); - a02 += dxy * (yi_1 * yii_1 + yi2); - a30 += dxy * xii_1 * (xi_12 + xi2); - a03 += dxy * yii_1 * (yi_12 + yi2); - a21 += - dxy * (xi_12 * (3 * yi_1 + yi) + 2 * xi * xi_1 * yii_1 + - xi2 * (yi_1 + 3 * yi)); - a12 += - dxy * (yi_12 * (3 * xi_1 + xi) + 2 * yi * yi_1 * xii_1 + - yi2 * (xi_1 + 3 * xi)); - - xi_1 = xi; - yi_1 = yi; - xi_12 = xi2; - yi_12 = yi2; - } - - double db1_2, db1_6, db1_12, db1_24, db1_20, db1_60; - - if( fabs(a00) > FLT_EPSILON ) - { - if( a00 > 0 ) - { - db1_2 = 0.5; - db1_6 = 0.16666666666666666666666666666667; - db1_12 = 0.083333333333333333333333333333333; - db1_24 = 0.041666666666666666666666666666667; - db1_20 = 0.05; - db1_60 = 0.016666666666666666666666666666667; - } - else - { - db1_2 = -0.5; - db1_6 = -0.16666666666666666666666666666667; - db1_12 = -0.083333333333333333333333333333333; - db1_24 = -0.041666666666666666666666666666667; - db1_20 = -0.05; - db1_60 = -0.016666666666666666666666666666667; - } - - // spatial moments - moments->m00 = a00 * db1_2; - moments->m10 = a10 * db1_6; - moments->m01 = a01 * db1_6; - moments->m20 = a20 * db1_12; - moments->m11 = a11 * db1_24; - moments->m02 = a02 * db1_12; - moments->m30 = a30 * db1_20; - moments->m21 = a21 * db1_60; - moments->m12 = a12 * db1_60; - moments->m03 = a03 * db1_20; - - icvCompleteMomentState( moments ); - } - } -} - - -/****************************************************************************************\ -* Spatial Raster Moments * -\****************************************************************************************/ - -template -#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 9 -// Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60196 -__attribute__((optimize("no-tree-vectorize"))) -#endif -static void momentsInTile( const cv::Mat& img, double* moments ) -{ - cv::Size size = img.size(); - int x, y; - MT mom[10] = {0,0,0,0,0,0,0,0,0,0}; - - for( y = 0; y < size.height; y++ ) - { - const T* ptr = (const T*)(img.data + y*img.step); - WT x0 = 0, x1 = 0, x2 = 0; - MT x3 = 0; - - for( x = 0; x < size.width; x++ ) - { - WT p = ptr[x]; - WT xp = x * p, xxp; - - x0 += p; - x1 += xp; - xxp = xp * x; - x2 += xxp; - x3 += xxp * x; - } - - WT py = y * x0, sy = y*y; - - mom[9] += ((MT)py) * sy; // m03 - mom[8] += ((MT)x1) * sy; // m12 - mom[7] += ((MT)x2) * y; // m21 - mom[6] += x3; // m30 - mom[5] += x0 * sy; // m02 - mom[4] += x1 * y; // m11 - mom[3] += x2; // m20 - mom[2] += py; // m01 - mom[1] += x1; // m10 - mom[0] += x0; // m00 - } - - for( x = 0; x < 10; x++ ) - moments[x] = (double)mom[x]; -} - - -#if CV_SSE2 - -template<> void momentsInTile( const cv::Mat& img, double* moments ) -{ - typedef uchar T; - typedef int WT; - typedef int MT; - cv::Size size = img.size(); - int y; - MT mom[10] = {0,0,0,0,0,0,0,0,0,0}; - bool useSIMD = cv::checkHardwareSupport(CV_CPU_SSE2); - - for( y = 0; y < size.height; y++ ) - { - const T* ptr = img.ptr(y); - int x0 = 0, x1 = 0, x2 = 0, x3 = 0, x = 0; - - if( useSIMD ) - { - __m128i qx_init = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7); - __m128i dx = _mm_set1_epi16(8); - __m128i z = _mm_setzero_si128(), qx0 = z, qx1 = z, qx2 = z, qx3 = z, qx = qx_init; - - for( ; x <= size.width - 8; x += 8 ) - { - __m128i p = _mm_unpacklo_epi8(_mm_loadl_epi64((const __m128i*)(ptr + x)), z); - qx0 = _mm_add_epi32(qx0, _mm_sad_epu8(p, z)); - __m128i px = _mm_mullo_epi16(p, qx); - __m128i sx = _mm_mullo_epi16(qx, qx); - qx1 = _mm_add_epi32(qx1, _mm_madd_epi16(p, qx)); - qx2 = _mm_add_epi32(qx2, _mm_madd_epi16(p, sx)); - qx3 = _mm_add_epi32(qx3, _mm_madd_epi16(px, sx)); - - qx = _mm_add_epi16(qx, dx); - } - int CV_DECL_ALIGNED(16) buf[4]; - _mm_store_si128((__m128i*)buf, qx0); - x0 = buf[0] + buf[1] + buf[2] + buf[3]; - _mm_store_si128((__m128i*)buf, qx1); - x1 = buf[0] + buf[1] + buf[2] + buf[3]; - _mm_store_si128((__m128i*)buf, qx2); - x2 = buf[0] + buf[1] + buf[2] + buf[3]; - _mm_store_si128((__m128i*)buf, qx3); - x3 = buf[0] + buf[1] + buf[2] + buf[3]; - } - - for( ; x < size.width; x++ ) - { - WT p = ptr[x]; - WT xp = x * p, xxp; - - x0 += p; - x1 += xp; - xxp = xp * x; - x2 += xxp; - x3 += xxp * x; - } - - WT py = y * x0, sy = y*y; - - mom[9] += ((MT)py) * sy; // m03 - mom[8] += ((MT)x1) * sy; // m12 - mom[7] += ((MT)x2) * y; // m21 - mom[6] += x3; // m30 - mom[5] += x0 * sy; // m02 - mom[4] += x1 * y; // m11 - mom[3] += x2; // m20 - mom[2] += py; // m01 - mom[1] += x1; // m10 - mom[0] += x0; // m00 - } - - for(int x = 0; x < 10; x++ ) - moments[x] = (double)mom[x]; -} - -#endif - -typedef void (*CvMomentsInTileFunc)(const cv::Mat& img, double* moments); - -CV_IMPL void cvMoments( const void* array, CvMoments* moments, int binary ) -{ - const int TILE_SIZE = 32; - int type, depth, cn, coi = 0; - CvMat stub, *mat = (CvMat*)array; - CvMomentsInTileFunc func = 0; - CvContour contourHeader; - CvSeq* contour = 0; - CvSeqBlock block; - double buf[TILE_SIZE*TILE_SIZE]; - uchar nzbuf[TILE_SIZE*TILE_SIZE]; - - if( CV_IS_SEQ( array )) - { - contour = (CvSeq*)array; - if( !CV_IS_SEQ_POINT_SET( contour )) - CV_Error( CV_StsBadArg, "The passed sequence is not a valid contour" ); - } - - if( !moments ) - CV_Error( CV_StsNullPtr, "" ); - - memset( moments, 0, sizeof(*moments)); - - if( !contour ) - { - mat = cvGetMat( mat, &stub, &coi ); - type = CV_MAT_TYPE( mat->type ); - - if( type == CV_32SC2 || type == CV_32FC2 ) - { - contour = cvPointSeqFromMat( - CV_SEQ_KIND_CURVE | CV_SEQ_FLAG_CLOSED, - mat, &contourHeader, &block ); - } - } - - if( contour ) - { - icvContourMoments( contour, moments ); - return; - } - - type = CV_MAT_TYPE( mat->type ); - depth = CV_MAT_DEPTH( type ); - cn = CV_MAT_CN( type ); - - cv::Size size = cvGetMatSize( mat ); - - if( cn > 1 && coi == 0 ) - CV_Error( CV_StsBadArg, "Invalid image type" ); - - if( size.width <= 0 || size.height <= 0 ) - return; - - if( binary || depth == CV_8U ) - func = momentsInTile; - else if( depth == CV_16U ) - func = momentsInTile; - else if( depth == CV_16S ) - func = momentsInTile; - else if( depth == CV_32F ) - func = momentsInTile; - else if( depth == CV_64F ) - func = momentsInTile; - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - cv::Mat src0(mat); - - for( int y = 0; y < size.height; y += TILE_SIZE ) - { - cv::Size tileSize; - tileSize.height = std::min(TILE_SIZE, size.height - y); - - for( int x = 0; x < size.width; x += TILE_SIZE ) - { - tileSize.width = std::min(TILE_SIZE, size.width - x); - cv::Mat src(src0, cv::Rect(x, y, tileSize.width, tileSize.height)); - - if( coi > 0 ) - { - cv::Mat tmp(tileSize, depth, buf); - int pairs[] = {coi-1, 0}; - cv::mixChannels(&src, 1, &tmp, 1, pairs, 1); - src = tmp; - } - if( binary ) - { - cv::Mat tmp(tileSize, CV_8U, nzbuf); - cv::compare( src, 0, tmp, CV_CMP_NE ); - src = tmp; - } - - double mom[10]; - func( src, mom ); - - if(binary) - { - double s = 1./255; - for( int k = 0; k < 10; k++ ) - mom[k] *= s; - } - - double xm = x * mom[0], ym = y * mom[0]; - - // accumulate moments computed in each tile - - // + m00 ( = m00' ) - moments->m00 += mom[0]; - - // + m10 ( = m10' + x*m00' ) - moments->m10 += mom[1] + xm; - - // + m01 ( = m01' + y*m00' ) - moments->m01 += mom[2] + ym; - - // + m20 ( = m20' + 2*x*m10' + x*x*m00' ) - moments->m20 += mom[3] + x * (mom[1] * 2 + xm); - - // + m11 ( = m11' + x*m01' + y*m10' + x*y*m00' ) - moments->m11 += mom[4] + x * (mom[2] + ym) + y * mom[1]; - - // + m02 ( = m02' + 2*y*m01' + y*y*m00' ) - moments->m02 += mom[5] + y * (mom[2] * 2 + ym); - - // + m30 ( = m30' + 3*x*m20' + 3*x*x*m10' + x*x*x*m00' ) - moments->m30 += mom[6] + x * (3. * mom[3] + x * (3. * mom[1] + xm)); - - // + m21 ( = m21' + x*(2*m11' + 2*y*m10' + x*m01' + x*y*m00') + y*m20') - moments->m21 += mom[7] + x * (2 * (mom[4] + y * mom[1]) + x * (mom[2] + ym)) + y * mom[3]; - - // + m12 ( = m12' + y*(2*m11' + 2*x*m01' + y*m10' + x*y*m00') + x*m02') - moments->m12 += mom[8] + y * (2 * (mom[4] + x * mom[2]) + y * (mom[1] + xm)) + x * mom[5]; - - // + m03 ( = m03' + 3*y*m02' + 3*y*y*m01' + y*y*y*m00' ) - moments->m03 += mom[9] + y * (3. * mom[5] + y * (3. * mom[2] + ym)); - } - } - - icvCompleteMomentState( moments ); -} - - -CV_IMPL void cvGetHuMoments( CvMoments * mState, CvHuMoments * HuState ) -{ - if( !mState || !HuState ) - CV_Error( CV_StsNullPtr, "" ); - - double m00s = mState->inv_sqrt_m00, m00 = m00s * m00s, s2 = m00 * m00, s3 = s2 * m00s; - - double nu20 = mState->mu20 * s2, - nu11 = mState->mu11 * s2, - nu02 = mState->mu02 * s2, - nu30 = mState->mu30 * s3, - nu21 = mState->mu21 * s3, nu12 = mState->mu12 * s3, nu03 = mState->mu03 * s3; - - double t0 = nu30 + nu12; - double t1 = nu21 + nu03; - - double q0 = t0 * t0, q1 = t1 * t1; - - double n4 = 4 * nu11; - double s = nu20 + nu02; - double d = nu20 - nu02; - - HuState->hu1 = s; - HuState->hu2 = d * d + n4 * nu11; - HuState->hu4 = q0 + q1; - HuState->hu6 = d * (q0 - q1) + n4 * t0 * t1; - - t0 *= q0 - 3 * q1; - t1 *= 3 * q0 - q1; - - q0 = nu30 - 3 * nu12; - q1 = 3 * nu21 - nu03; - - HuState->hu3 = q0 * q0 + q1 * q1; - HuState->hu5 = q0 * t0 + q1 * t1; - HuState->hu7 = q1 * t0 - q0 * t1; -} - - -CV_IMPL double cvGetSpatialMoment( CvMoments * moments, int x_order, int y_order ) -{ - int order = x_order + y_order; - - if( !moments ) - CV_Error( CV_StsNullPtr, "" ); - if( (x_order | y_order) < 0 || order > 3 ) - CV_Error( CV_StsOutOfRange, "" ); - - return (&(moments->m00))[order + (order >> 1) + (order > 2) * 2 + y_order]; -} - - -CV_IMPL double cvGetCentralMoment( CvMoments * moments, int x_order, int y_order ) -{ - int order = x_order + y_order; - - if( !moments ) - CV_Error( CV_StsNullPtr, "" ); - if( (x_order | y_order) < 0 || order > 3 ) - CV_Error( CV_StsOutOfRange, "" ); - - return order >= 2 ? (&(moments->m00))[4 + order * 3 + y_order] : - order == 0 ? moments->m00 : 0; -} - - -CV_IMPL double cvGetNormalizedCentralMoment( CvMoments * moments, int x_order, int y_order ) -{ - int order = x_order + y_order; - - double mu = cvGetCentralMoment( moments, x_order, y_order ); - double m00s = moments->inv_sqrt_m00; - - while( --order >= 0 ) - mu *= m00s; - return mu * m00s * m00s; -} - - -namespace cv -{ - -Moments::Moments() -{ - m00 = m10 = m01 = m20 = m11 = m02 = m30 = m21 = m12 = m03 = - mu20 = mu11 = mu02 = mu30 = mu21 = mu12 = mu03 = - nu20 = nu11 = nu02 = nu30 = nu21 = nu12 = nu03 = 0.; -} - -Moments::Moments( double _m00, double _m10, double _m01, double _m20, double _m11, - double _m02, double _m30, double _m21, double _m12, double _m03 ) -{ - m00 = _m00; m10 = _m10; m01 = _m01; - m20 = _m20; m11 = _m11; m02 = _m02; - m30 = _m30; m21 = _m21; m12 = _m12; m03 = _m03; - - double cx = 0, cy = 0, inv_m00 = 0; - if( std::abs(m00) > DBL_EPSILON ) - { - inv_m00 = 1./m00; - cx = m10*inv_m00; cy = m01*inv_m00; - } - - mu20 = m20 - m10*cx; - mu11 = m11 - m10*cy; - mu02 = m02 - m01*cy; - - mu30 = m30 - cx*(3*mu20 + cx*m10); - mu21 = m21 - cx*(2*mu11 + cx*m01) - cy*mu20; - mu12 = m12 - cy*(2*mu11 + cy*m10) - cx*mu02; - mu03 = m03 - cy*(3*mu02 + cy*m01); - - double inv_sqrt_m00 = std::sqrt(std::abs(inv_m00)); - double s2 = inv_m00*inv_m00, s3 = s2*inv_sqrt_m00; - - nu20 = mu20*s2; nu11 = mu11*s2; nu02 = mu02*s2; - nu30 = mu30*s3; nu21 = mu21*s3; nu12 = mu12*s3; nu03 = mu03*s3; -} - -Moments::Moments( const CvMoments& m ) -{ - *this = Moments(m.m00, m.m10, m.m01, m.m20, m.m11, m.m02, m.m30, m.m21, m.m12, m.m03); -} - -Moments::operator CvMoments() const -{ - CvMoments m; - m.m00 = m00; m.m10 = m10; m.m01 = m01; - m.m20 = m20; m.m11 = m11; m.m02 = m02; - m.m30 = m30; m.m21 = m21; m.m12 = m12; m.m03 = m03; - m.mu20 = mu20; m.mu11 = mu11; m.mu02 = mu02; - m.mu30 = mu30; m.mu21 = mu21; m.mu12 = mu12; m.mu03 = mu03; - double am00 = std::abs(m00); - m.inv_sqrt_m00 = am00 > DBL_EPSILON ? 1./std::sqrt(am00) : 0; - - return m; -} - -} - -cv::Moments cv::moments( InputArray _array, bool binaryImage ) -{ - CvMoments om; - Mat arr = _array.getMat(); - CvMat c_array = arr; - cvMoments(&c_array, &om, binaryImage); - return om; -} - -void cv::HuMoments( const Moments& m, double hu[7] ) -{ - double t0 = m.nu30 + m.nu12; - double t1 = m.nu21 + m.nu03; - - double q0 = t0 * t0, q1 = t1 * t1; - - double n4 = 4 * m.nu11; - double s = m.nu20 + m.nu02; - double d = m.nu20 - m.nu02; - - hu[0] = s; - hu[1] = d * d + n4 * m.nu11; - hu[3] = q0 + q1; - hu[5] = d * (q0 - q1) + n4 * t0 * t1; - - t0 *= q0 - 3 * q1; - t1 *= 3 * q0 - q1; - - q0 = m.nu30 - 3 * m.nu12; - q1 = 3 * m.nu21 - m.nu03; - - hu[2] = q0 * q0 + q1 * q1; - hu[4] = q0 * t0 + q1 * t1; - hu[6] = q1 * t0 - q0 * t1; -} - -void cv::HuMoments( const Moments& m, OutputArray _hu ) -{ - _hu.create(7, 1, CV_64F); - Mat hu = _hu.getMat(); - CV_Assert( hu.isContinuous() ); - HuMoments(m, (double*)hu.data); -} - -/* End of file. */ diff --git a/modules/imgproc/src/morph.cpp b/modules/imgproc/src/morph.cpp deleted file mode 100644 index 19636bc..0000000 --- a/modules/imgproc/src/morph.cpp +++ /dev/null @@ -1,1524 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include -#include - -/****************************************************************************************\ - Basic Morphological Operations: Erosion & Dilation -\****************************************************************************************/ - -namespace cv -{ - -template struct MinOp -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator ()(const T a, const T b) const { return std::min(a, b); } -}; - -template struct MaxOp -{ - typedef T type1; - typedef T type2; - typedef T rtype; - T operator ()(const T a, const T b) const { return std::max(a, b); } -}; - -#undef CV_MIN_8U -#undef CV_MAX_8U -#define CV_MIN_8U(a,b) ((a) - CV_FAST_CAST_8U((a) - (b))) -#define CV_MAX_8U(a,b) ((a) + CV_FAST_CAST_8U((b) - (a))) - -template<> inline uchar MinOp::operator ()(const uchar a, const uchar b) const { return CV_MIN_8U(a, b); } -template<> inline uchar MaxOp::operator ()(const uchar a, const uchar b) const { return CV_MAX_8U(a, b); } - -struct MorphRowNoVec -{ - MorphRowNoVec(int, int) {} - int operator()(const uchar*, uchar*, int, int) const { return 0; } -}; - -struct MorphColumnNoVec -{ - MorphColumnNoVec(int, int) {} - int operator()(const uchar**, uchar*, int, int, int) const { return 0; } -}; - -struct MorphNoVec -{ - int operator()(uchar**, int, uchar*, int) const { return 0; } -}; - -#if CV_SSE2 - -template struct MorphRowIVec -{ - enum { ESZ = VecUpdate::ESZ }; - - MorphRowIVec(int _ksize, int _anchor) : ksize(_ksize), anchor(_anchor) {} - int operator()(const uchar* src, uchar* dst, int width, int cn) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - cn *= ESZ; - int i, k, _ksize = ksize*cn; - width = (width & -4)*cn; - VecUpdate updateOp; - - for( i = 0; i <= width - 16; i += 16 ) - { - __m128i s = _mm_loadu_si128((const __m128i*)(src + i)); - for( k = cn; k < _ksize; k += cn ) - { - __m128i x = _mm_loadu_si128((const __m128i*)(src + i + k)); - s = updateOp(s, x); - } - _mm_storeu_si128((__m128i*)(dst + i), s); - } - - for( ; i < width; i += 4 ) - { - __m128i s = _mm_cvtsi32_si128(*(const int*)(src + i)); - for( k = cn; k < _ksize; k += cn ) - { - __m128i x = _mm_cvtsi32_si128(*(const int*)(src + i + k)); - s = updateOp(s, x); - } - *(int*)(dst + i) = _mm_cvtsi128_si32(s); - } - - return i/ESZ; - } - - int ksize, anchor; -}; - - -template struct MorphRowFVec -{ - MorphRowFVec(int _ksize, int _anchor) : ksize(_ksize), anchor(_anchor) {} - int operator()(const uchar* src, uchar* dst, int width, int cn) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int i, k, _ksize = ksize*cn; - width = (width & -4)*cn; - VecUpdate updateOp; - - for( i = 0; i < width; i += 4 ) - { - __m128 s = _mm_loadu_ps((const float*)src + i); - for( k = cn; k < _ksize; k += cn ) - { - __m128 x = _mm_loadu_ps((const float*)src + i + k); - s = updateOp(s, x); - } - _mm_storeu_ps((float*)dst + i, s); - } - - return i; - } - - int ksize, anchor; -}; - - -template struct MorphColumnIVec -{ - enum { ESZ = VecUpdate::ESZ }; - - MorphColumnIVec(int _ksize, int _anchor) : ksize(_ksize), anchor(_anchor) {} - int operator()(const uchar** src, uchar* dst, int dststep, int count, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int i = 0, k, _ksize = ksize; - width *= ESZ; - VecUpdate updateOp; - - for( i = 0; i < count + ksize - 1; i++ ) - CV_Assert( ((size_t)src[i] & 15) == 0 ); - - for( ; _ksize > 1 && count > 1; count -= 2, dst += dststep*2, src += 2 ) - { - for( i = 0; i <= width - 32; i += 32 ) - { - const uchar* sptr = src[1] + i; - __m128i s0 = _mm_load_si128((const __m128i*)sptr); - __m128i s1 = _mm_load_si128((const __m128i*)(sptr + 16)); - __m128i x0, x1; - - for( k = 2; k < _ksize; k++ ) - { - sptr = src[k] + i; - x0 = _mm_load_si128((const __m128i*)sptr); - x1 = _mm_load_si128((const __m128i*)(sptr + 16)); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - } - - sptr = src[0] + i; - x0 = _mm_load_si128((const __m128i*)sptr); - x1 = _mm_load_si128((const __m128i*)(sptr + 16)); - _mm_storeu_si128((__m128i*)(dst + i), updateOp(s0, x0)); - _mm_storeu_si128((__m128i*)(dst + i + 16), updateOp(s1, x1)); - - sptr = src[k] + i; - x0 = _mm_load_si128((const __m128i*)sptr); - x1 = _mm_load_si128((const __m128i*)(sptr + 16)); - _mm_storeu_si128((__m128i*)(dst + dststep + i), updateOp(s0, x0)); - _mm_storeu_si128((__m128i*)(dst + dststep + i + 16), updateOp(s1, x1)); - } - - for( ; i <= width - 8; i += 8 ) - { - __m128i s0 = _mm_loadl_epi64((const __m128i*)(src[1] + i)), x0; - - for( k = 2; k < _ksize; k++ ) - { - x0 = _mm_loadl_epi64((const __m128i*)(src[k] + i)); - s0 = updateOp(s0, x0); - } - - x0 = _mm_loadl_epi64((const __m128i*)(src[0] + i)); - _mm_storel_epi64((__m128i*)(dst + i), updateOp(s0, x0)); - x0 = _mm_loadl_epi64((const __m128i*)(src[k] + i)); - _mm_storel_epi64((__m128i*)(dst + dststep + i), updateOp(s0, x0)); - } - } - - for( ; count > 0; count--, dst += dststep, src++ ) - { - for( i = 0; i <= width - 32; i += 32 ) - { - const uchar* sptr = src[0] + i; - __m128i s0 = _mm_load_si128((const __m128i*)sptr); - __m128i s1 = _mm_load_si128((const __m128i*)(sptr + 16)); - __m128i x0, x1; - - for( k = 1; k < _ksize; k++ ) - { - sptr = src[k] + i; - x0 = _mm_load_si128((const __m128i*)sptr); - x1 = _mm_load_si128((const __m128i*)(sptr + 16)); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - } - _mm_storeu_si128((__m128i*)(dst + i), s0); - _mm_storeu_si128((__m128i*)(dst + i + 16), s1); - } - - for( ; i <= width - 8; i += 8 ) - { - __m128i s0 = _mm_loadl_epi64((const __m128i*)(src[0] + i)), x0; - - for( k = 1; k < _ksize; k++ ) - { - x0 = _mm_loadl_epi64((const __m128i*)(src[k] + i)); - s0 = updateOp(s0, x0); - } - _mm_storel_epi64((__m128i*)(dst + i), s0); - } - } - - return i/ESZ; - } - - int ksize, anchor; -}; - - -template struct MorphColumnFVec -{ - MorphColumnFVec(int _ksize, int _anchor) : ksize(_ksize), anchor(_anchor) {} - int operator()(const uchar** _src, uchar* _dst, int dststep, int count, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int i = 0, k, _ksize = ksize; - VecUpdate updateOp; - - for( i = 0; i < count + ksize - 1; i++ ) - CV_Assert( ((size_t)_src[i] & 15) == 0 ); - - const float** src = (const float**)_src; - float* dst = (float*)_dst; - dststep /= sizeof(dst[0]); - - for( ; _ksize > 1 && count > 1; count -= 2, dst += dststep*2, src += 2 ) - { - for( i = 0; i <= width - 16; i += 16 ) - { - const float* sptr = src[1] + i; - __m128 s0 = _mm_load_ps(sptr); - __m128 s1 = _mm_load_ps(sptr + 4); - __m128 s2 = _mm_load_ps(sptr + 8); - __m128 s3 = _mm_load_ps(sptr + 12); - __m128 x0, x1, x2, x3; - - for( k = 2; k < _ksize; k++ ) - { - sptr = src[k] + i; - x0 = _mm_load_ps(sptr); - x1 = _mm_load_ps(sptr + 4); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - x2 = _mm_load_ps(sptr + 8); - x3 = _mm_load_ps(sptr + 12); - s2 = updateOp(s2, x2); - s3 = updateOp(s3, x3); - } - - sptr = src[0] + i; - x0 = _mm_load_ps(sptr); - x1 = _mm_load_ps(sptr + 4); - x2 = _mm_load_ps(sptr + 8); - x3 = _mm_load_ps(sptr + 12); - _mm_storeu_ps(dst + i, updateOp(s0, x0)); - _mm_storeu_ps(dst + i + 4, updateOp(s1, x1)); - _mm_storeu_ps(dst + i + 8, updateOp(s2, x2)); - _mm_storeu_ps(dst + i + 12, updateOp(s3, x3)); - - sptr = src[k] + i; - x0 = _mm_load_ps(sptr); - x1 = _mm_load_ps(sptr + 4); - x2 = _mm_load_ps(sptr + 8); - x3 = _mm_load_ps(sptr + 12); - _mm_storeu_ps(dst + dststep + i, updateOp(s0, x0)); - _mm_storeu_ps(dst + dststep + i + 4, updateOp(s1, x1)); - _mm_storeu_ps(dst + dststep + i + 8, updateOp(s2, x2)); - _mm_storeu_ps(dst + dststep + i + 12, updateOp(s3, x3)); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 s0 = _mm_load_ps(src[1] + i), x0; - - for( k = 2; k < _ksize; k++ ) - { - x0 = _mm_load_ps(src[k] + i); - s0 = updateOp(s0, x0); - } - - x0 = _mm_load_ps(src[0] + i); - _mm_storeu_ps(dst + i, updateOp(s0, x0)); - x0 = _mm_load_ps(src[k] + i); - _mm_storeu_ps(dst + dststep + i, updateOp(s0, x0)); - } - } - - for( ; count > 0; count--, dst += dststep, src++ ) - { - for( i = 0; i <= width - 16; i += 16 ) - { - const float* sptr = src[0] + i; - __m128 s0 = _mm_load_ps(sptr); - __m128 s1 = _mm_load_ps(sptr + 4); - __m128 s2 = _mm_load_ps(sptr + 8); - __m128 s3 = _mm_load_ps(sptr + 12); - __m128 x0, x1, x2, x3; - - for( k = 1; k < _ksize; k++ ) - { - sptr = src[k] + i; - x0 = _mm_load_ps(sptr); - x1 = _mm_load_ps(sptr + 4); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - x2 = _mm_load_ps(sptr + 8); - x3 = _mm_load_ps(sptr + 12); - s2 = updateOp(s2, x2); - s3 = updateOp(s3, x3); - } - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - _mm_storeu_ps(dst + i + 8, s2); - _mm_storeu_ps(dst + i + 12, s3); - } - - for( i = 0; i <= width - 4; i += 4 ) - { - __m128 s0 = _mm_load_ps(src[0] + i), x0; - for( k = 1; k < _ksize; k++ ) - { - x0 = _mm_load_ps(src[k] + i); - s0 = updateOp(s0, x0); - } - _mm_storeu_ps(dst + i, s0); - } - } - - return i; - } - - int ksize, anchor; -}; - - -template struct MorphIVec -{ - enum { ESZ = VecUpdate::ESZ }; - - int operator()(uchar** src, int nz, uchar* dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int i, k; - width *= ESZ; - VecUpdate updateOp; - - for( i = 0; i <= width - 32; i += 32 ) - { - const uchar* sptr = src[0] + i; - __m128i s0 = _mm_loadu_si128((const __m128i*)sptr); - __m128i s1 = _mm_loadu_si128((const __m128i*)(sptr + 16)); - __m128i x0, x1; - - for( k = 1; k < nz; k++ ) - { - sptr = src[k] + i; - x0 = _mm_loadu_si128((const __m128i*)sptr); - x1 = _mm_loadu_si128((const __m128i*)(sptr + 16)); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - } - _mm_storeu_si128((__m128i*)(dst + i), s0); - _mm_storeu_si128((__m128i*)(dst + i + 16), s1); - } - - for( ; i <= width - 8; i += 8 ) - { - __m128i s0 = _mm_loadl_epi64((const __m128i*)(src[0] + i)), x0; - - for( k = 1; k < nz; k++ ) - { - x0 = _mm_loadl_epi64((const __m128i*)(src[k] + i)); - s0 = updateOp(s0, x0); - } - _mm_storel_epi64((__m128i*)(dst + i), s0); - } - - return i/ESZ; - } -}; - - -template struct MorphFVec -{ - int operator()(uchar** _src, int nz, uchar* _dst, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - const float** src = (const float**)_src; - float* dst = (float*)_dst; - int i, k; - VecUpdate updateOp; - - for( i = 0; i <= width - 16; i += 16 ) - { - const float* sptr = src[0] + i; - __m128 s0 = _mm_loadu_ps(sptr); - __m128 s1 = _mm_loadu_ps(sptr + 4); - __m128 s2 = _mm_loadu_ps(sptr + 8); - __m128 s3 = _mm_loadu_ps(sptr + 12); - __m128 x0, x1, x2, x3; - - for( k = 1; k < nz; k++ ) - { - sptr = src[k] + i; - x0 = _mm_loadu_ps(sptr); - x1 = _mm_loadu_ps(sptr + 4); - x2 = _mm_loadu_ps(sptr + 8); - x3 = _mm_loadu_ps(sptr + 12); - s0 = updateOp(s0, x0); - s1 = updateOp(s1, x1); - s2 = updateOp(s2, x2); - s3 = updateOp(s3, x3); - } - _mm_storeu_ps(dst + i, s0); - _mm_storeu_ps(dst + i + 4, s1); - _mm_storeu_ps(dst + i + 8, s2); - _mm_storeu_ps(dst + i + 12, s3); - } - - for( ; i <= width - 4; i += 4 ) - { - __m128 s0 = _mm_loadu_ps(src[0] + i), x0; - - for( k = 1; k < nz; k++ ) - { - x0 = _mm_loadu_ps(src[k] + i); - s0 = updateOp(s0, x0); - } - _mm_storeu_ps(dst + i, s0); - } - - for( ; i < width; i++ ) - { - __m128 s0 = _mm_load_ss(src[0] + i), x0; - - for( k = 1; k < nz; k++ ) - { - x0 = _mm_load_ss(src[k] + i); - s0 = updateOp(s0, x0); - } - _mm_store_ss(dst + i, s0); - } - - return i; - } -}; - -struct VMin8u -{ - enum { ESZ = 1 }; - __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_min_epu8(a,b); } -}; -struct VMax8u -{ - enum { ESZ = 1 }; - __m128i operator()(const __m128i& a, const __m128i& b) const { return _mm_max_epu8(a,b); } -}; -struct VMin16u -{ - enum { ESZ = 2 }; - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_subs_epu16(a,_mm_subs_epu16(a,b)); } -}; -struct VMax16u -{ - enum { ESZ = 2 }; - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_adds_epu16(_mm_subs_epu16(a,b), b); } -}; -struct VMin16s -{ - enum { ESZ = 2 }; - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_min_epi16(a, b); } -}; -struct VMax16s -{ - enum { ESZ = 2 }; - __m128i operator()(const __m128i& a, const __m128i& b) const - { return _mm_max_epi16(a, b); } -}; -struct VMin32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_min_ps(a,b); }}; -struct VMax32f { __m128 operator()(const __m128& a, const __m128& b) const { return _mm_max_ps(a,b); }}; - -typedef MorphRowIVec ErodeRowVec8u; -typedef MorphRowIVec DilateRowVec8u; -typedef MorphRowIVec ErodeRowVec16u; -typedef MorphRowIVec DilateRowVec16u; -typedef MorphRowIVec ErodeRowVec16s; -typedef MorphRowIVec DilateRowVec16s; -typedef MorphRowFVec ErodeRowVec32f; -typedef MorphRowFVec DilateRowVec32f; - -typedef MorphColumnIVec ErodeColumnVec8u; -typedef MorphColumnIVec DilateColumnVec8u; -typedef MorphColumnIVec ErodeColumnVec16u; -typedef MorphColumnIVec DilateColumnVec16u; -typedef MorphColumnIVec ErodeColumnVec16s; -typedef MorphColumnIVec DilateColumnVec16s; -typedef MorphColumnFVec ErodeColumnVec32f; -typedef MorphColumnFVec DilateColumnVec32f; - -typedef MorphIVec ErodeVec8u; -typedef MorphIVec DilateVec8u; -typedef MorphIVec ErodeVec16u; -typedef MorphIVec DilateVec16u; -typedef MorphIVec ErodeVec16s; -typedef MorphIVec DilateVec16s; -typedef MorphFVec ErodeVec32f; -typedef MorphFVec DilateVec32f; - -#else - -#ifdef HAVE_TEGRA_OPTIMIZATION -using tegra::ErodeRowVec8u; -using tegra::DilateRowVec8u; - -using tegra::ErodeColumnVec8u; -using tegra::DilateColumnVec8u; -#else -typedef MorphRowNoVec ErodeRowVec8u; -typedef MorphRowNoVec DilateRowVec8u; - -typedef MorphColumnNoVec ErodeColumnVec8u; -typedef MorphColumnNoVec DilateColumnVec8u; -#endif - -typedef MorphRowNoVec ErodeRowVec16u; -typedef MorphRowNoVec DilateRowVec16u; -typedef MorphRowNoVec ErodeRowVec16s; -typedef MorphRowNoVec DilateRowVec16s; -typedef MorphRowNoVec ErodeRowVec32f; -typedef MorphRowNoVec DilateRowVec32f; - -typedef MorphColumnNoVec ErodeColumnVec16u; -typedef MorphColumnNoVec DilateColumnVec16u; -typedef MorphColumnNoVec ErodeColumnVec16s; -typedef MorphColumnNoVec DilateColumnVec16s; -typedef MorphColumnNoVec ErodeColumnVec32f; -typedef MorphColumnNoVec DilateColumnVec32f; - -typedef MorphNoVec ErodeVec8u; -typedef MorphNoVec DilateVec8u; -typedef MorphNoVec ErodeVec16u; -typedef MorphNoVec DilateVec16u; -typedef MorphNoVec ErodeVec16s; -typedef MorphNoVec DilateVec16s; -typedef MorphNoVec ErodeVec32f; -typedef MorphNoVec DilateVec32f; - -#endif - -typedef MorphRowNoVec ErodeRowVec64f; -typedef MorphRowNoVec DilateRowVec64f; -typedef MorphColumnNoVec ErodeColumnVec64f; -typedef MorphColumnNoVec DilateColumnVec64f; -typedef MorphNoVec ErodeVec64f; -typedef MorphNoVec DilateVec64f; - - -template struct MorphRowFilter : public BaseRowFilter -{ - typedef typename Op::rtype T; - - MorphRowFilter( int _ksize, int _anchor ) : vecOp(_ksize, _anchor) - { - ksize = _ksize; - anchor = _anchor; - } - - void operator()(const uchar* src, uchar* dst, int width, int cn) - { - int i, j, k, _ksize = ksize*cn; - const T* S = (const T*)src; - Op op; - T* D = (T*)dst; - - if( _ksize == cn ) - { - for( i = 0; i < width*cn; i++ ) - D[i] = S[i]; - return; - } - - int i0 = vecOp(src, dst, width, cn); - width *= cn; - - for( k = 0; k < cn; k++, S++, D++ ) - { - for( i = i0; i <= width - cn*2; i += cn*2 ) - { - const T* s = S + i; - T m = s[cn]; - for( j = cn*2; j < _ksize; j += cn ) - m = op(m, s[j]); - D[i] = op(m, s[0]); - D[i+cn] = op(m, s[j]); - } - - for( ; i < width; i += cn ) - { - const T* s = S + i; - T m = s[0]; - for( j = cn; j < _ksize; j += cn ) - m = op(m, s[j]); - D[i] = m; - } - } - } - - VecOp vecOp; -}; - - -template struct MorphColumnFilter : public BaseColumnFilter -{ - typedef typename Op::rtype T; - - MorphColumnFilter( int _ksize, int _anchor ) : vecOp(_ksize, _anchor) - { - ksize = _ksize; - anchor = _anchor; - } - - void operator()(const uchar** _src, uchar* dst, int dststep, int count, int width) - { - int i, k, _ksize = ksize; - const T** src = (const T**)_src; - T* D = (T*)dst; - Op op; - - int i0 = vecOp(_src, dst, dststep, count, width); - dststep /= sizeof(D[0]); - - for( ; _ksize > 1 && count > 1; count -= 2, D += dststep*2, src += 2 ) - { - i = i0; - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - const T* sptr = src[1] + i; - T s0 = sptr[0], s1 = sptr[1], s2 = sptr[2], s3 = sptr[3]; - - for( k = 2; k < _ksize; k++ ) - { - sptr = src[k] + i; - s0 = op(s0, sptr[0]); s1 = op(s1, sptr[1]); - s2 = op(s2, sptr[2]); s3 = op(s3, sptr[3]); - } - - sptr = src[0] + i; - D[i] = op(s0, sptr[0]); - D[i+1] = op(s1, sptr[1]); - D[i+2] = op(s2, sptr[2]); - D[i+3] = op(s3, sptr[3]); - - sptr = src[k] + i; - D[i+dststep] = op(s0, sptr[0]); - D[i+dststep+1] = op(s1, sptr[1]); - D[i+dststep+2] = op(s2, sptr[2]); - D[i+dststep+3] = op(s3, sptr[3]); - } - #endif - for( ; i < width; i++ ) - { - T s0 = src[1][i]; - - for( k = 2; k < _ksize; k++ ) - s0 = op(s0, src[k][i]); - - D[i] = op(s0, src[0][i]); - D[i+dststep] = op(s0, src[k][i]); - } - } - - for( ; count > 0; count--, D += dststep, src++ ) - { - i = i0; - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - const T* sptr = src[0] + i; - T s0 = sptr[0], s1 = sptr[1], s2 = sptr[2], s3 = sptr[3]; - - for( k = 1; k < _ksize; k++ ) - { - sptr = src[k] + i; - s0 = op(s0, sptr[0]); s1 = op(s1, sptr[1]); - s2 = op(s2, sptr[2]); s3 = op(s3, sptr[3]); - } - - D[i] = s0; D[i+1] = s1; - D[i+2] = s2; D[i+3] = s3; - } - #endif - for( ; i < width; i++ ) - { - T s0 = src[0][i]; - for( k = 1; k < _ksize; k++ ) - s0 = op(s0, src[k][i]); - D[i] = s0; - } - } - } - - VecOp vecOp; -}; - - -template struct MorphFilter : BaseFilter -{ - typedef typename Op::rtype T; - - MorphFilter( const Mat& _kernel, Point _anchor ) - { - anchor = _anchor; - ksize = _kernel.size(); - CV_Assert( _kernel.type() == CV_8U ); - - vector coeffs; // we do not really the values of non-zero - // kernel elements, just their locations - preprocess2DKernel( _kernel, coords, coeffs ); - ptrs.resize( coords.size() ); - } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width, int cn) - { - const Point* pt = &coords[0]; - const T** kp = (const T**)&ptrs[0]; - int i, k, nz = (int)coords.size(); - Op op; - - width *= cn; - for( ; count > 0; count--, dst += dststep, src++ ) - { - T* D = (T*)dst; - - for( k = 0; k < nz; k++ ) - kp[k] = (const T*)src[pt[k].y] + pt[k].x*cn; - - i = vecOp(&ptrs[0], nz, dst, width); - #if CV_ENABLE_UNROLLED - for( ; i <= width - 4; i += 4 ) - { - const T* sptr = kp[0] + i; - T s0 = sptr[0], s1 = sptr[1], s2 = sptr[2], s3 = sptr[3]; - - for( k = 1; k < nz; k++ ) - { - sptr = kp[k] + i; - s0 = op(s0, sptr[0]); s1 = op(s1, sptr[1]); - s2 = op(s2, sptr[2]); s3 = op(s3, sptr[3]); - } - - D[i] = s0; D[i+1] = s1; - D[i+2] = s2; D[i+3] = s3; - } - #endif - for( ; i < width; i++ ) - { - T s0 = kp[0][i]; - for( k = 1; k < nz; k++ ) - s0 = op(s0, kp[k][i]); - D[i] = s0; - } - } - } - - vector coords; - vector ptrs; - VecOp vecOp; -}; - -} - -/////////////////////////////////// External Interface ///////////////////////////////////// - -cv::Ptr cv::getMorphologyRowFilter(int op, int type, int ksize, int anchor) -{ - int depth = CV_MAT_DEPTH(type); - if( anchor < 0 ) - anchor = ksize/2; - CV_Assert( op == MORPH_ERODE || op == MORPH_DILATE ); - if( op == MORPH_ERODE ) - { - if( depth == CV_8U ) - return Ptr(new MorphRowFilter, - ErodeRowVec8u>(ksize, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphRowFilter, - ErodeRowVec16u>(ksize, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphRowFilter, - ErodeRowVec16s>(ksize, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphRowFilter, - ErodeRowVec32f>(ksize, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphRowFilter, - ErodeRowVec64f>(ksize, anchor)); - } - else - { - if( depth == CV_8U ) - return Ptr(new MorphRowFilter, - DilateRowVec8u>(ksize, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphRowFilter, - DilateRowVec16u>(ksize, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphRowFilter, - DilateRowVec16s>(ksize, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphRowFilter, - DilateRowVec32f>(ksize, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphRowFilter, - DilateRowVec64f>(ksize, anchor)); - } - - CV_Error_( CV_StsNotImplemented, ("Unsupported data type (=%d)", type)); - return Ptr(0); -} - -cv::Ptr cv::getMorphologyColumnFilter(int op, int type, int ksize, int anchor) -{ - int depth = CV_MAT_DEPTH(type); - if( anchor < 0 ) - anchor = ksize/2; - CV_Assert( op == MORPH_ERODE || op == MORPH_DILATE ); - if( op == MORPH_ERODE ) - { - if( depth == CV_8U ) - return Ptr(new MorphColumnFilter, - ErodeColumnVec8u>(ksize, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphColumnFilter, - ErodeColumnVec16u>(ksize, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphColumnFilter, - ErodeColumnVec16s>(ksize, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphColumnFilter, - ErodeColumnVec32f>(ksize, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphColumnFilter, - ErodeColumnVec64f>(ksize, anchor)); - } - else - { - if( depth == CV_8U ) - return Ptr(new MorphColumnFilter, - DilateColumnVec8u>(ksize, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphColumnFilter, - DilateColumnVec16u>(ksize, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphColumnFilter, - DilateColumnVec16s>(ksize, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphColumnFilter, - DilateColumnVec32f>(ksize, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphColumnFilter, - DilateColumnVec64f>(ksize, anchor)); - } - - CV_Error_( CV_StsNotImplemented, ("Unsupported data type (=%d)", type)); - return Ptr(0); -} - - -cv::Ptr cv::getMorphologyFilter(int op, int type, InputArray _kernel, Point anchor) -{ - Mat kernel = _kernel.getMat(); - int depth = CV_MAT_DEPTH(type); - anchor = normalizeAnchor(anchor, kernel.size()); - CV_Assert( op == MORPH_ERODE || op == MORPH_DILATE ); - if( op == MORPH_ERODE ) - { - if( depth == CV_8U ) - return Ptr(new MorphFilter, ErodeVec8u>(kernel, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphFilter, ErodeVec16u>(kernel, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphFilter, ErodeVec16s>(kernel, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphFilter, ErodeVec32f>(kernel, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphFilter, ErodeVec64f>(kernel, anchor)); - } - else - { - if( depth == CV_8U ) - return Ptr(new MorphFilter, DilateVec8u>(kernel, anchor)); - if( depth == CV_16U ) - return Ptr(new MorphFilter, DilateVec16u>(kernel, anchor)); - if( depth == CV_16S ) - return Ptr(new MorphFilter, DilateVec16s>(kernel, anchor)); - if( depth == CV_32F ) - return Ptr(new MorphFilter, DilateVec32f>(kernel, anchor)); - if( depth == CV_64F ) - return Ptr(new MorphFilter, DilateVec64f>(kernel, anchor)); - } - - CV_Error_( CV_StsNotImplemented, ("Unsupported data type (=%d)", type)); - return Ptr(0); -} - - -cv::Ptr cv::createMorphologyFilter( int op, int type, InputArray _kernel, - Point anchor, int _rowBorderType, int _columnBorderType, - const Scalar& _borderValue ) -{ - Mat kernel = _kernel.getMat(); - anchor = normalizeAnchor(anchor, kernel.size()); - - Ptr rowFilter; - Ptr columnFilter; - Ptr filter2D; - - if( countNonZero(kernel) == kernel.rows*kernel.cols ) - { - // rectangular structuring element - rowFilter = getMorphologyRowFilter(op, type, kernel.cols, anchor.x); - columnFilter = getMorphologyColumnFilter(op, type, kernel.rows, anchor.y); - } - else - filter2D = getMorphologyFilter(op, type, kernel, anchor); - - Scalar borderValue = _borderValue; - if( (_rowBorderType == BORDER_CONSTANT || _columnBorderType == BORDER_CONSTANT) && - borderValue == morphologyDefaultBorderValue() ) - { - int depth = CV_MAT_DEPTH(type); - CV_Assert( depth == CV_8U || depth == CV_16U || depth == CV_16S || - depth == CV_32F || depth == CV_64F ); - if( op == MORPH_ERODE ) - borderValue = Scalar::all( depth == CV_8U ? (double)UCHAR_MAX : - depth == CV_16U ? (double)USHRT_MAX : - depth == CV_16S ? (double)SHRT_MAX : - depth == CV_32F ? (double)FLT_MAX : DBL_MAX); - else - borderValue = Scalar::all( depth == CV_8U || depth == CV_16U ? - 0. : - depth == CV_16S ? (double)SHRT_MIN : - depth == CV_32F ? (double)-FLT_MAX : -DBL_MAX); - } - - return Ptr(new FilterEngine(filter2D, rowFilter, columnFilter, - type, type, type, _rowBorderType, _columnBorderType, borderValue )); -} - - -cv::Mat cv::getStructuringElement(int shape, Size ksize, Point anchor) -{ - int i, j; - int r = 0, c = 0; - double inv_r2 = 0; - - CV_Assert( shape == MORPH_RECT || shape == MORPH_CROSS || shape == MORPH_ELLIPSE ); - - anchor = normalizeAnchor(anchor, ksize); - - if( ksize == Size(1,1) ) - shape = MORPH_RECT; - - if( shape == MORPH_ELLIPSE ) - { - r = ksize.height/2; - c = ksize.width/2; - inv_r2 = r ? 1./((double)r*r) : 0; - } - - Mat elem(ksize, CV_8U); - - for( i = 0; i < ksize.height; i++ ) - { - uchar* ptr = elem.data + i*elem.step; - int j1 = 0, j2 = 0; - - if( shape == MORPH_RECT || (shape == MORPH_CROSS && i == anchor.y) ) - j2 = ksize.width; - else if( shape == MORPH_CROSS ) - j1 = anchor.x, j2 = j1 + 1; - else - { - int dy = i - r; - if( std::abs(dy) <= r ) - { - int dx = saturate_cast(c*std::sqrt((r*r - dy*dy)*inv_r2)); - j1 = std::max( c - dx, 0 ); - j2 = std::min( c + dx + 1, ksize.width ); - } - } - - for( j = 0; j < j1; j++ ) - ptr[j] = 0; - for( ; j < j2; j++ ) - ptr[j] = 1; - for( ; j < ksize.width; j++ ) - ptr[j] = 0; - } - - return elem; -} - -namespace cv -{ - -class MorphologyRunner : public ParallelLoopBody -{ -public: - MorphologyRunner(Mat _src, Mat _dst, int _nStripes, int _iterations, - int _op, Mat _kernel, Point _anchor, - int _rowBorderType, int _columnBorderType, const Scalar& _borderValue) : - borderValue(_borderValue) - { - src = _src; - dst = _dst; - - nStripes = _nStripes; - iterations = _iterations; - - op = _op; - kernel = _kernel; - anchor = _anchor; - rowBorderType = _rowBorderType; - columnBorderType = _columnBorderType; - } - - void operator () ( const Range& range ) const - { - int row0 = min(cvRound(range.start * src.rows / nStripes), src.rows); - int row1 = min(cvRound(range.end * src.rows / nStripes), src.rows); - - /*if(0) - printf("Size = (%d, %d), range[%d,%d), row0 = %d, row1 = %d\n", - src.rows, src.cols, range.start, range.end, row0, row1);*/ - - Mat srcStripe = src.rowRange(row0, row1); - Mat dstStripe = dst.rowRange(row0, row1); - - Ptr f = createMorphologyFilter(op, src.type(), kernel, anchor, - rowBorderType, columnBorderType, borderValue ); - - f->apply( srcStripe, dstStripe ); - for( int i = 1; i < iterations; i++ ) - f->apply( dstStripe, dstStripe ); - } - -private: - Mat src; - Mat dst; - int nStripes; - int iterations; - - int op; - Mat kernel; - Point anchor; - int rowBorderType; - int columnBorderType; - Scalar borderValue; -}; - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -static bool IPPMorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kernel, - const Size& ksize, const Point &anchor, bool rectKernel) -{ - int type = src.type(); - const Mat* _src = &src; - Mat temp; - if( src.data == dst.data ) - { - src.copyTo(temp); - _src = &temp; - } - //DEPRECATED. Allocates and initializes morphology state structure for erosion or dilation operation. - typedef IppStatus (CV_STDCALL* ippiMorphologyInitAllocFunc)(int, const void*, IppiSize, IppiPoint, IppiMorphState **); - typedef IppStatus (CV_STDCALL* ippiMorphologyBorderReplicateFunc)(const void*, int, void *, int, - IppiSize, IppiBorderType, IppiMorphState *); - typedef IppStatus (CV_STDCALL* ippiFilterMinMaxGetBufferSizeFunc)(int, IppiSize, int*); - typedef IppStatus (CV_STDCALL* ippiFilterMinMaxBorderReplicateFunc)(const void*, int, void*, int, - IppiSize, IppiSize, IppiPoint, void*); - - ippiMorphologyInitAllocFunc initAllocFunc = 0; - ippiMorphologyBorderReplicateFunc morphFunc = 0; - ippiFilterMinMaxGetBufferSizeFunc getBufSizeFunc = 0; - ippiFilterMinMaxBorderReplicateFunc morphRectFunc = 0; - - #define IPP_MORPH_CASE(type, flavor) \ - case type: \ - initAllocFunc = (ippiMorphologyInitAllocFunc)ippiMorphologyInitAlloc_##flavor; \ - morphFunc = op == MORPH_ERODE ? (ippiMorphologyBorderReplicateFunc)ippiErodeBorderReplicate_##flavor : \ - (ippiMorphologyBorderReplicateFunc)ippiDilateBorderReplicate_##flavor; \ - getBufSizeFunc = (ippiFilterMinMaxGetBufferSizeFunc)ippiFilterMinGetBufferSize_##flavor; \ - morphRectFunc = op == MORPH_ERODE ? (ippiFilterMinMaxBorderReplicateFunc)ippiFilterMinBorderReplicate_##flavor : \ - (ippiFilterMinMaxBorderReplicateFunc)ippiFilterMaxBorderReplicate_##flavor; \ - break - - switch( type ) - { - IPP_MORPH_CASE(CV_8UC1, 8u_C1R); - IPP_MORPH_CASE(CV_8UC3, 8u_C3R); - IPP_MORPH_CASE(CV_8UC4, 8u_C4R); - IPP_MORPH_CASE(CV_32FC1, 32f_C1R); - IPP_MORPH_CASE(CV_32FC3, 32f_C3R); - IPP_MORPH_CASE(CV_32FC4, 32f_C4R); - default: - return false; - } - #undef IPP_MORPH_CASE - - IppiSize roiSize = {src.cols, src.rows}; - IppiSize kernelSize = {ksize.width, ksize.height}; - IppiPoint point = {anchor.x, anchor.y}; - - if( !rectKernel && morphFunc && initAllocFunc ) - { - IppiMorphState* pState; - if( initAllocFunc( roiSize.width, kernel.data, kernelSize, point, &pState ) < 0 ) - return false; - bool is_ok = morphFunc( _src->data, (int)_src->step[0], - dst.data, (int)dst.step[0], - roiSize, ippBorderRepl, pState ) >= 0; - ippiMorphologyFree(pState); - return is_ok; - } - else if( rectKernel && morphRectFunc && getBufSizeFunc ) - { - int bufSize = 0; - if( getBufSizeFunc( src.cols, kernelSize, &bufSize) < 0 ) - return false; - AutoBuffer buf(bufSize + 64); - uchar* buffer = alignPtr((uchar*)buf, 32); - return morphRectFunc(_src->data, (int)_src->step[0], dst.data, (int)dst.step[0], - roiSize, kernelSize, point, buffer) >= 0; - } - return false; -} - -static bool IPPMorphOp(int op, InputArray _src, OutputArray _dst, - const Mat& _kernel, Point anchor, int iterations, - int borderType, const Scalar &borderValue) -{ - Mat src = _src.getMat(), kernel = _kernel; - if( !( src.depth() == CV_8U || src.depth() == CV_32F ) || ( iterations > 1 ) || - !( borderType == cv::BORDER_REPLICATE || (borderType == cv::BORDER_CONSTANT && borderValue == morphologyDefaultBorderValue()) ) - || !( op == MORPH_DILATE || op == MORPH_ERODE) ) - return false; - if( borderType == cv::BORDER_CONSTANT && kernel.data ) - { - int x, y; - for( y = 0; y < kernel.rows; y++ ) - { - if( kernel.at(y, anchor.x) != 0 ) - continue; - for( x = 0; x < kernel.cols; x++ ) - { - if( kernel.at(y,x) != 0 ) - return false; - } - } - for( x = 0; y < kernel.cols; x++ ) - { - if( kernel.at(anchor.y, x) != 0 ) - continue; - for( y = 0; y < kernel.rows; y++ ) - { - if( kernel.at(y,x) != 0 ) - return false; - } - } - - } - Size ksize = kernel.data ? kernel.size() : Size(3,3); - - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if( iterations == 0 || kernel.rows*kernel.cols == 1 ) - { - src.copyTo(dst); - return true; - } - - bool rectKernel = false; - if( !kernel.data ) - { - ksize = Size(1+iterations*2,1+iterations*2); - anchor = Point(iterations, iterations); - rectKernel = true; - iterations = 1; - } - else if( iterations >= 1 && countNonZero(kernel) == kernel.rows*kernel.cols ) - { - ksize = Size(ksize.width + (iterations-1)*(ksize.width-1), - ksize.height + (iterations-1)*(ksize.height-1)), - anchor = Point(anchor.x*iterations, anchor.y*iterations); - kernel = Mat(); - rectKernel = true; - iterations = 1; - } - - // TODO: implement the case of iterations > 1. - if( iterations > 1 ) - return false; - - return IPPMorphReplicate( op, src, dst, kernel, ksize, anchor, rectKernel ); -} -#endif - -static void morphOp( int op, InputArray _src, OutputArray _dst, - InputArray _kernel, - Point anchor, int iterations, - int borderType, const Scalar& borderValue ) -{ - Mat kernel = _kernel.getMat(); - Size ksize = kernel.data ? kernel.size() : Size(3,3); - anchor = normalizeAnchor(anchor, ksize); - - CV_Assert( anchor.inside(Rect(0, 0, ksize.width, ksize.height)) ); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( IPPMorphOp(op, _src, _dst, kernel, anchor, iterations, borderType, borderValue) ) - return; -#endif - - Mat src = _src.getMat(); - - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if( iterations == 0 || kernel.rows*kernel.cols == 1 ) - { - src.copyTo(dst); - return; - } - - if( !kernel.data ) - { - kernel = getStructuringElement(MORPH_RECT, Size(1+iterations*2,1+iterations*2)); - anchor = Point(iterations, iterations); - iterations = 1; - } - else if( iterations > 1 && countNonZero(kernel) == kernel.rows*kernel.cols ) - { - anchor = Point(anchor.x*iterations, anchor.y*iterations); - kernel = getStructuringElement(MORPH_RECT, - Size(ksize.width + (iterations-1)*(ksize.width-1), - ksize.height + (iterations-1)*(ksize.height-1)), - anchor); - iterations = 1; - } - - int nStripes = 1; -#if defined HAVE_TEGRA_OPTIMIZATION - if (src.data != dst.data && iterations == 1 && //NOTE: threads are not used for inplace processing - (borderType & BORDER_ISOLATED) == 0 && //TODO: check border types - src.rows >= 64 ) //NOTE: just heuristics - nStripes = 4; -#endif - - parallel_for_(Range(0, nStripes), - MorphologyRunner(src, dst, nStripes, iterations, op, kernel, anchor, borderType, borderType, borderValue)); - - //Ptr f = createMorphologyFilter(op, src.type(), - // kernel, anchor, borderType, borderType, borderValue ); - - //f->apply( src, dst ); - //for( int i = 1; i < iterations; i++ ) - // f->apply( dst, dst ); -} - -template<> void Ptr::delete_obj() -{ cvReleaseStructuringElement(&obj); } - -} - -void cv::erode( InputArray src, OutputArray dst, InputArray kernel, - Point anchor, int iterations, - int borderType, const Scalar& borderValue ) -{ - morphOp( MORPH_ERODE, src, dst, kernel, anchor, iterations, borderType, borderValue ); -} - - -void cv::dilate( InputArray src, OutputArray dst, InputArray kernel, - Point anchor, int iterations, - int borderType, const Scalar& borderValue ) -{ - morphOp( MORPH_DILATE, src, dst, kernel, anchor, iterations, borderType, borderValue ); -} - - -void cv::morphologyEx( InputArray _src, OutputArray _dst, int op, - InputArray kernel, Point anchor, int iterations, - int borderType, const Scalar& borderValue ) -{ - Mat src = _src.getMat(), temp; - _dst.create(src.size(), src.type()); - Mat dst = _dst.getMat(); - - switch( op ) - { - case MORPH_ERODE: - erode( src, dst, kernel, anchor, iterations, borderType, borderValue ); - break; - case MORPH_DILATE: - dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); - break; - case MORPH_OPEN: - erode( src, dst, kernel, anchor, iterations, borderType, borderValue ); - dilate( dst, dst, kernel, anchor, iterations, borderType, borderValue ); - break; - case CV_MOP_CLOSE: - dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); - erode( dst, dst, kernel, anchor, iterations, borderType, borderValue ); - break; - case CV_MOP_GRADIENT: - erode( src, temp, kernel, anchor, iterations, borderType, borderValue ); - dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); - dst -= temp; - break; - case CV_MOP_TOPHAT: - if( src.data != dst.data ) - temp = dst; - erode( src, temp, kernel, anchor, iterations, borderType, borderValue ); - dilate( temp, temp, kernel, anchor, iterations, borderType, borderValue ); - dst = src - temp; - break; - case CV_MOP_BLACKHAT: - if( src.data != dst.data ) - temp = dst; - dilate( src, temp, kernel, anchor, iterations, borderType, borderValue ); - erode( temp, temp, kernel, anchor, iterations, borderType, borderValue ); - dst = temp - src; - break; - default: - CV_Error( CV_StsBadArg, "unknown morphological operation" ); - } -} - -CV_IMPL IplConvKernel * -cvCreateStructuringElementEx( int cols, int rows, - int anchorX, int anchorY, - int shape, int *values ) -{ - cv::Size ksize = cv::Size(cols, rows); - cv::Point anchor = cv::Point(anchorX, anchorY); - CV_Assert( cols > 0 && rows > 0 && anchor.inside(cv::Rect(0,0,cols,rows)) && - (shape != CV_SHAPE_CUSTOM || values != 0)); - - int i, size = rows * cols; - int element_size = sizeof(IplConvKernel) + size*sizeof(int); - IplConvKernel *element = (IplConvKernel*)cvAlloc(element_size + 32); - - element->nCols = cols; - element->nRows = rows; - element->anchorX = anchorX; - element->anchorY = anchorY; - element->nShiftR = shape < CV_SHAPE_ELLIPSE ? shape : CV_SHAPE_CUSTOM; - element->values = (int*)(element + 1); - - if( shape == CV_SHAPE_CUSTOM ) - { - for( i = 0; i < size; i++ ) - element->values[i] = values[i]; - } - else - { - cv::Mat elem = cv::getStructuringElement(shape, ksize, anchor); - for( i = 0; i < size; i++ ) - element->values[i] = elem.data[i]; - } - - return element; -} - - -CV_IMPL void -cvReleaseStructuringElement( IplConvKernel ** element ) -{ - if( !element ) - CV_Error( CV_StsNullPtr, "" ); - cvFree( element ); -} - - -static void convertConvKernel( const IplConvKernel* src, cv::Mat& dst, cv::Point& anchor ) -{ - if(!src) - { - anchor = cv::Point(1,1); - dst.release(); - return; - } - anchor = cv::Point(src->anchorX, src->anchorY); - dst.create(src->nRows, src->nCols, CV_8U); - - int i, size = src->nRows*src->nCols; - for( i = 0; i < size; i++ ) - dst.data[i] = (uchar)(src->values[i] != 0); -} - - -CV_IMPL void -cvErode( const CvArr* srcarr, CvArr* dstarr, IplConvKernel* element, int iterations ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), kernel; - CV_Assert( src.size() == dst.size() && src.type() == dst.type() ); - cv::Point anchor; - convertConvKernel( element, kernel, anchor ); - cv::erode( src, dst, kernel, anchor, iterations, cv::BORDER_REPLICATE ); -} - - -CV_IMPL void -cvDilate( const CvArr* srcarr, CvArr* dstarr, IplConvKernel* element, int iterations ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), kernel; - CV_Assert( src.size() == dst.size() && src.type() == dst.type() ); - cv::Point anchor; - convertConvKernel( element, kernel, anchor ); - cv::dilate( src, dst, kernel, anchor, iterations, cv::BORDER_REPLICATE ); -} - - -CV_IMPL void -cvMorphologyEx( const void* srcarr, void* dstarr, void*, - IplConvKernel* element, int op, int iterations ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), kernel; - CV_Assert( src.size() == dst.size() && src.type() == dst.type() ); - cv::Point anchor; - IplConvKernel* temp_element = NULL; - if (!element) - { - temp_element = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT); - } else { - temp_element = element; - } - convertConvKernel( temp_element, kernel, anchor ); - if (!element) - { - cvReleaseStructuringElement(&temp_element); - } - cv::morphologyEx( src, dst, op, kernel, anchor, iterations, cv::BORDER_REPLICATE ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/phasecorr.cpp b/modules/imgproc/src/phasecorr.cpp deleted file mode 100644 index 87e4d30..0000000 --- a/modules/imgproc/src/phasecorr.cpp +++ /dev/null @@ -1,615 +0,0 @@ -/********************************************************************* - * Software License Agreement (BSD License) - * - * Copyright (c) 2008-2011, William Lucas - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must 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 Willow Garage 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 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (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 "precomp.hpp" -#include - -namespace cv -{ - -static void magSpectrums( InputArray _src, OutputArray _dst) -{ - Mat src = _src.getMat(); - int depth = src.depth(), cn = src.channels(), type = src.type(); - int rows = src.rows, cols = src.cols; - int j, k; - - CV_Assert( type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 ); - - if(src.depth() == CV_32F) - _dst.create( src.rows, src.cols, CV_32FC1 ); - else - _dst.create( src.rows, src.cols, CV_64FC1 ); - - Mat dst = _dst.getMat(); - dst.setTo(0);//Mat elements are not equal to zero by default! - - bool is_1d = (rows == 1 || (cols == 1 && src.isContinuous() && dst.isContinuous())); - - if( is_1d ) - cols = cols + rows - 1, rows = 1; - - int ncols = cols*cn; - int j0 = cn == 1; - int j1 = ncols - (cols % 2 == 0 && cn == 1); - - if( depth == CV_32F ) - { - const float* dataSrc = (const float*)src.data; - float* dataDst = (float*)dst.data; - - size_t stepSrc = src.step/sizeof(dataSrc[0]); - size_t stepDst = dst.step/sizeof(dataDst[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataSrc += cols - 1, dataDst += cols - 1; - dataDst[0] = dataSrc[0]*dataSrc[0]; - if( rows % 2 == 0 ) - dataDst[(rows-1)*stepDst] = dataSrc[(rows-1)*stepSrc]*dataSrc[(rows-1)*stepSrc]; - - for( j = 1; j <= rows - 2; j += 2 ) - { - dataDst[j*stepDst] = (float)std::sqrt((double)dataSrc[j*stepSrc]*dataSrc[j*stepSrc] + - (double)dataSrc[(j+1)*stepSrc]*dataSrc[(j+1)*stepSrc]); - } - - if( k == 1 ) - dataSrc -= cols - 1, dataDst -= cols - 1; - } - } - - for( ; rows--; dataSrc += stepSrc, dataDst += stepDst ) - { - if( is_1d && cn == 1 ) - { - dataDst[0] = dataSrc[0]*dataSrc[0]; - if( cols % 2 == 0 ) - dataDst[j1] = dataSrc[j1]*dataSrc[j1]; - } - - for( j = j0; j < j1; j += 2 ) - { - dataDst[j] = (float)std::sqrt((double)dataSrc[j]*dataSrc[j] + (double)dataSrc[j+1]*dataSrc[j+1]); - } - } - } - else - { - const double* dataSrc = (const double*)src.data; - double* dataDst = (double*)dst.data; - - size_t stepSrc = src.step/sizeof(dataSrc[0]); - size_t stepDst = dst.step/sizeof(dataDst[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataSrc += cols - 1, dataDst += cols - 1; - dataDst[0] = dataSrc[0]*dataSrc[0]; - if( rows % 2 == 0 ) - dataDst[(rows-1)*stepDst] = dataSrc[(rows-1)*stepSrc]*dataSrc[(rows-1)*stepSrc]; - - for( j = 1; j <= rows - 2; j += 2 ) - { - dataDst[j*stepDst] = std::sqrt(dataSrc[j*stepSrc]*dataSrc[j*stepSrc] + - dataSrc[(j+1)*stepSrc]*dataSrc[(j+1)*stepSrc]); - } - - if( k == 1 ) - dataSrc -= cols - 1, dataDst -= cols - 1; - } - } - - for( ; rows--; dataSrc += stepSrc, dataDst += stepDst ) - { - if( is_1d && cn == 1 ) - { - dataDst[0] = dataSrc[0]*dataSrc[0]; - if( cols % 2 == 0 ) - dataDst[j1] = dataSrc[j1]*dataSrc[j1]; - } - - for( j = j0; j < j1; j += 2 ) - { - dataDst[j] = std::sqrt(dataSrc[j]*dataSrc[j] + dataSrc[j+1]*dataSrc[j+1]); - } - } - } -} - -static void divSpectrums( InputArray _srcA, InputArray _srcB, OutputArray _dst, int flags, bool conjB) -{ - Mat srcA = _srcA.getMat(), srcB = _srcB.getMat(); - int depth = srcA.depth(), cn = srcA.channels(), type = srcA.type(); - int rows = srcA.rows, cols = srcA.cols; - int j, k; - - CV_Assert( type == srcB.type() && srcA.size() == srcB.size() ); - CV_Assert( type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 ); - - _dst.create( srcA.rows, srcA.cols, type ); - Mat dst = _dst.getMat(); - - bool is_1d = (flags & DFT_ROWS) || (rows == 1 || (cols == 1 && - srcA.isContinuous() && srcB.isContinuous() && dst.isContinuous())); - - if( is_1d && !(flags & DFT_ROWS) ) - cols = cols + rows - 1, rows = 1; - - int ncols = cols*cn; - int j0 = cn == 1; - int j1 = ncols - (cols % 2 == 0 && cn == 1); - - if( depth == CV_32F ) - { - const float* dataA = (const float*)srcA.data; - const float* dataB = (const float*)srcB.data; - float* dataC = (float*)dst.data; - float eps = FLT_EPSILON; // prevent div0 problems - - size_t stepA = srcA.step/sizeof(dataA[0]); - size_t stepB = srcB.step/sizeof(dataB[0]); - size_t stepC = dst.step/sizeof(dataC[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataA += cols - 1, dataB += cols - 1, dataC += cols - 1; - dataC[0] = dataA[0] / (dataB[0] + eps); - if( rows % 2 == 0 ) - dataC[(rows-1)*stepC] = dataA[(rows-1)*stepA] / (dataB[(rows-1)*stepB] + eps); - if( !conjB ) - for( j = 1; j <= rows - 2; j += 2 ) - { - double denom = (double)dataB[j*stepB]*dataB[j*stepB] + - (double)dataB[(j+1)*stepB]*dataB[(j+1)*stepB] + (double)eps; - - double re = (double)dataA[j*stepA]*dataB[j*stepB] + - (double)dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - - double im = (double)dataA[(j+1)*stepA]*dataB[j*stepB] - - (double)dataA[j*stepA]*dataB[(j+1)*stepB]; - - dataC[j*stepC] = (float)(re / denom); - dataC[(j+1)*stepC] = (float)(im / denom); - } - else - for( j = 1; j <= rows - 2; j += 2 ) - { - - double denom = (double)dataB[j*stepB]*dataB[j*stepB] + - (double)dataB[(j+1)*stepB]*dataB[(j+1)*stepB] + (double)eps; - - double re = (double)dataA[j*stepA]*dataB[j*stepB] - - (double)dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - - double im = (double)dataA[(j+1)*stepA]*dataB[j*stepB] + - (double)dataA[j*stepA]*dataB[(j+1)*stepB]; - - dataC[j*stepC] = (float)(re / denom); - dataC[(j+1)*stepC] = (float)(im / denom); - } - if( k == 1 ) - dataA -= cols - 1, dataB -= cols - 1, dataC -= cols - 1; - } - } - - for( ; rows--; dataA += stepA, dataB += stepB, dataC += stepC ) - { - if( is_1d && cn == 1 ) - { - dataC[0] = dataA[0] / (dataB[0] + eps); - if( cols % 2 == 0 ) - dataC[j1] = dataA[j1] / (dataB[j1] + eps); - } - - if( !conjB ) - for( j = j0; j < j1; j += 2 ) - { - double denom = (double)(dataB[j]*dataB[j] + dataB[j+1]*dataB[j+1] + eps); - double re = (double)(dataA[j]*dataB[j] + dataA[j+1]*dataB[j+1]); - double im = (double)(dataA[j+1]*dataB[j] - dataA[j]*dataB[j+1]); - dataC[j] = (float)(re / denom); - dataC[j+1] = (float)(im / denom); - } - else - for( j = j0; j < j1; j += 2 ) - { - double denom = (double)(dataB[j]*dataB[j] + dataB[j+1]*dataB[j+1] + eps); - double re = (double)(dataA[j]*dataB[j] - dataA[j+1]*dataB[j+1]); - double im = (double)(dataA[j+1]*dataB[j] + dataA[j]*dataB[j+1]); - dataC[j] = (float)(re / denom); - dataC[j+1] = (float)(im / denom); - } - } - } - else - { - const double* dataA = (const double*)srcA.data; - const double* dataB = (const double*)srcB.data; - double* dataC = (double*)dst.data; - double eps = DBL_EPSILON; // prevent div0 problems - - size_t stepA = srcA.step/sizeof(dataA[0]); - size_t stepB = srcB.step/sizeof(dataB[0]); - size_t stepC = dst.step/sizeof(dataC[0]); - - if( !is_1d && cn == 1 ) - { - for( k = 0; k < (cols % 2 ? 1 : 2); k++ ) - { - if( k == 1 ) - dataA += cols - 1, dataB += cols - 1, dataC += cols - 1; - dataC[0] = dataA[0] / (dataB[0] + eps); - if( rows % 2 == 0 ) - dataC[(rows-1)*stepC] = dataA[(rows-1)*stepA] / (dataB[(rows-1)*stepB] + eps); - if( !conjB ) - for( j = 1; j <= rows - 2; j += 2 ) - { - double denom = dataB[j*stepB]*dataB[j*stepB] + - dataB[(j+1)*stepB]*dataB[(j+1)*stepB] + eps; - - double re = dataA[j*stepA]*dataB[j*stepB] + - dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - - double im = dataA[(j+1)*stepA]*dataB[j*stepB] - - dataA[j*stepA]*dataB[(j+1)*stepB]; - - dataC[j*stepC] = re / denom; - dataC[(j+1)*stepC] = im / denom; - } - else - for( j = 1; j <= rows - 2; j += 2 ) - { - double denom = dataB[j*stepB]*dataB[j*stepB] + - dataB[(j+1)*stepB]*dataB[(j+1)*stepB] + eps; - - double re = dataA[j*stepA]*dataB[j*stepB] - - dataA[(j+1)*stepA]*dataB[(j+1)*stepB]; - - double im = dataA[(j+1)*stepA]*dataB[j*stepB] + - dataA[j*stepA]*dataB[(j+1)*stepB]; - - dataC[j*stepC] = re / denom; - dataC[(j+1)*stepC] = im / denom; - } - if( k == 1 ) - dataA -= cols - 1, dataB -= cols - 1, dataC -= cols - 1; - } - } - - for( ; rows--; dataA += stepA, dataB += stepB, dataC += stepC ) - { - if( is_1d && cn == 1 ) - { - dataC[0] = dataA[0] / (dataB[0] + eps); - if( cols % 2 == 0 ) - dataC[j1] = dataA[j1] / (dataB[j1] + eps); - } - - if( !conjB ) - for( j = j0; j < j1; j += 2 ) - { - double denom = dataB[j]*dataB[j] + dataB[j+1]*dataB[j+1] + eps; - double re = dataA[j]*dataB[j] + dataA[j+1]*dataB[j+1]; - double im = dataA[j+1]*dataB[j] - dataA[j]*dataB[j+1]; - dataC[j] = re / denom; - dataC[j+1] = im / denom; - } - else - for( j = j0; j < j1; j += 2 ) - { - double denom = dataB[j]*dataB[j] + dataB[j+1]*dataB[j+1] + eps; - double re = dataA[j]*dataB[j] - dataA[j+1]*dataB[j+1]; - double im = dataA[j+1]*dataB[j] + dataA[j]*dataB[j+1]; - dataC[j] = re / denom; - dataC[j+1] = im / denom; - } - } - } - -} - -static void fftShift(InputOutputArray _out) -{ - Mat out = _out.getMat(); - - if(out.rows == 1 && out.cols == 1) - { - // trivially shifted. - return; - } - - vector planes; - split(out, planes); - - int xMid = out.cols >> 1; - int yMid = out.rows >> 1; - - bool is_1d = xMid == 0 || yMid == 0; - - if(is_1d) - { - xMid = xMid + yMid; - - for(size_t i = 0; i < planes.size(); i++) - { - Mat tmp; - Mat half0(planes[i], Rect(0, 0, xMid, 1)); - Mat half1(planes[i], Rect(xMid, 0, xMid, 1)); - - half0.copyTo(tmp); - half1.copyTo(half0); - tmp.copyTo(half1); - } - } - else - { - for(size_t i = 0; i < planes.size(); i++) - { - // perform quadrant swaps... - Mat tmp; - Mat q0(planes[i], Rect(0, 0, xMid, yMid)); - Mat q1(planes[i], Rect(xMid, 0, xMid, yMid)); - Mat q2(planes[i], Rect(0, yMid, xMid, yMid)); - Mat q3(planes[i], Rect(xMid, yMid, xMid, yMid)); - - q0.copyTo(tmp); - q3.copyTo(q0); - tmp.copyTo(q3); - - q1.copyTo(tmp); - q2.copyTo(q1); - tmp.copyTo(q2); - } - } - - merge(planes, out); -} - -static Point2d weightedCentroid(InputArray _src, cv::Point peakLocation, cv::Size weightBoxSize, double* response) -{ - Mat src = _src.getMat(); - - int type = src.type(); - CV_Assert( type == CV_32FC1 || type == CV_64FC1 ); - - int minr = peakLocation.y - (weightBoxSize.height >> 1); - int maxr = peakLocation.y + (weightBoxSize.height >> 1); - int minc = peakLocation.x - (weightBoxSize.width >> 1); - int maxc = peakLocation.x + (weightBoxSize.width >> 1); - - Point2d centroid; - double sumIntensity = 0.0; - - // clamp the values to min and max if needed. - if(minr < 0) - { - minr = 0; - } - - if(minc < 0) - { - minc = 0; - } - - if(maxr > src.rows - 1) - { - maxr = src.rows - 1; - } - - if(maxc > src.cols - 1) - { - maxc = src.cols - 1; - } - - if(type == CV_32FC1) - { - const float* dataIn = (const float*)src.data; - dataIn += minr*src.cols; - for(int y = minr; y <= maxr; y++) - { - for(int x = minc; x <= maxc; x++) - { - centroid.x += (double)x*dataIn[x]; - centroid.y += (double)y*dataIn[x]; - sumIntensity += (double)dataIn[x]; - } - - dataIn += src.cols; - } - } - else - { - const double* dataIn = (const double*)src.data; - dataIn += minr*src.cols; - for(int y = minr; y <= maxr; y++) - { - for(int x = minc; x <= maxc; x++) - { - centroid.x += (double)x*dataIn[x]; - centroid.y += (double)y*dataIn[x]; - sumIntensity += dataIn[x]; - } - - dataIn += src.cols; - } - } - - if(response) - *response = sumIntensity; - - sumIntensity += DBL_EPSILON; // prevent div0 problems... - - centroid.x /= sumIntensity; - centroid.y /= sumIntensity; - - return centroid; -} - -} - -cv::Point2d cv::phaseCorrelateRes(InputArray _src1, InputArray _src2, InputArray _window, double* response) -{ - Mat src1 = _src1.getMat(); - Mat src2 = _src2.getMat(); - Mat window = _window.getMat(); - - CV_Assert( src1.type() == src2.type()); - CV_Assert( src1.type() == CV_32FC1 || src1.type() == CV_64FC1 ); - CV_Assert( src1.size == src2.size); - - if(!window.empty()) - { - CV_Assert( src1.type() == window.type()); - CV_Assert( src1.size == window.size); - } - - int M = getOptimalDFTSize(src1.rows); - int N = getOptimalDFTSize(src1.cols); - - Mat padded1, padded2, paddedWin; - - if(M != src1.rows || N != src1.cols) - { - copyMakeBorder(src1, padded1, 0, M - src1.rows, 0, N - src1.cols, BORDER_CONSTANT, Scalar::all(0)); - copyMakeBorder(src2, padded2, 0, M - src2.rows, 0, N - src2.cols, BORDER_CONSTANT, Scalar::all(0)); - - if(!window.empty()) - { - copyMakeBorder(window, paddedWin, 0, M - window.rows, 0, N - window.cols, BORDER_CONSTANT, Scalar::all(0)); - } - } - else - { - padded1 = src1; - padded2 = src2; - paddedWin = window; - } - - Mat FFT1, FFT2, P, Pm, C; - - // perform window multiplication if available - if(!paddedWin.empty()) - { - // apply window to both images before proceeding... - multiply(paddedWin, padded1, padded1); - multiply(paddedWin, padded2, padded2); - } - - // execute phase correlation equation - // Reference: http://en.wikipedia.org/wiki/Phase_correlation - dft(padded1, FFT1, DFT_REAL_OUTPUT); - dft(padded2, FFT2, DFT_REAL_OUTPUT); - - mulSpectrums(FFT1, FFT2, P, 0, true); - - magSpectrums(P, Pm); - divSpectrums(P, Pm, C, 0, false); // FF* / |FF*| (phase correlation equation completed here...) - - idft(C, C); // gives us the nice peak shift location... - - fftShift(C); // shift the energy to the center of the frame. - - // locate the highest peak - Point peakLoc; - minMaxLoc(C, NULL, NULL, NULL, &peakLoc); - - // get the phase shift with sub-pixel accuracy, 5x5 window seems about right here... - Point2d t; - t = weightedCentroid(C, peakLoc, Size(5, 5), response); - - // max response is M*N (not exactly, might be slightly larger due to rounding errors) - if(response) - *response /= M*N; - - // adjust shift relative to image center... - Point2d center((double)padded1.cols / 2.0, (double)padded1.rows / 2.0); - - return (center - t); -} - -cv::Point2d cv::phaseCorrelate(InputArray _src1, InputArray _src2, InputArray _window) -{ - return phaseCorrelateRes(_src1, _src2, _window, 0); -} - -void cv::createHanningWindow(OutputArray _dst, cv::Size winSize, int type) -{ - CV_Assert( type == CV_32FC1 || type == CV_64FC1 ); - - _dst.create(winSize, type); - Mat dst = _dst.getMat(); - - int rows = dst.rows; - int cols = dst.cols; - - if(dst.depth() == CV_32F) - { - for(int i = 0; i < rows; i++) - { - float* dstData = dst.ptr(i); - double wr = 0.5 * (1.0f - cos(2.0f * CV_PI * (double)i / (double)(rows - 1))); - for(int j = 0; j < cols; j++) - { - double wc = 0.5 * (1.0f - cos(2.0f * CV_PI * (double)j / (double)(cols - 1))); - dstData[j] = (float)(wr * wc); - } - } - } - else - { - for(int i = 0; i < rows; i++) - { - double* dstData = dst.ptr(i); - double wr = 0.5 * (1.0 - cos(2.0 * CV_PI * (double)i / (double)(rows - 1))); - for(int j = 0; j < cols; j++) - { - double wc = 0.5 * (1.0 - cos(2.0 * CV_PI * (double)j / (double)(cols - 1))); - dstData[j] = wr * wc; - } - } - } - - // perform batch sqrt for SSE performance gains - cv::sqrt(dst, dst); -} diff --git a/modules/imgproc/src/precomp.hpp b/modules/imgproc/src/precomp.hpp deleted file mode 100644 index 83b722f..0000000 --- a/modules/imgproc/src/precomp.hpp +++ /dev/null @@ -1,154 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/imgproc/imgproc_c.h" -#include "opencv2/core/internal.hpp" -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_TEGRA_OPTIMIZATION -#include "opencv2/imgproc/imgproc_tegra.hpp" -#else -#define GET_OPTIMIZED(func) (func) -#endif - -/* helper tables */ -extern const uchar icvSaturate8u_cv[]; -#define CV_FAST_CAST_8U(t) (assert(-256 <= (t) && (t) <= 512), icvSaturate8u_cv[(t)+256]) -#define CV_CALC_MIN_8U(a,b) (a) -= CV_FAST_CAST_8U((a) - (b)) -#define CV_CALC_MAX_8U(a,b) (a) += CV_FAST_CAST_8U((b) - (a)) - -// -256.f ... 511.f -extern const float icv8x32fTab_cv[]; -#define CV_8TO32F(x) icv8x32fTab_cv[(x)+256] - -// (-128.f)^2 ... (255.f)^2 -extern const float icv8x32fSqrTab[]; -#define CV_8TO32F_SQR(x) icv8x32fSqrTab[(x)+128] - -namespace cv -{ - -static inline Point normalizeAnchor( Point anchor, Size ksize ) -{ - if( anchor.x == -1 ) - anchor.x = ksize.width/2; - if( anchor.y == -1 ) - anchor.y = ksize.height/2; - CV_Assert( anchor.inside(Rect(0, 0, ksize.width, ksize.height)) ); - return anchor; -} - -void preprocess2DKernel( const Mat& kernel, vector& coords, vector& coeffs ); -void crossCorr( const Mat& src, const Mat& templ, Mat& dst, - Size corrsize, int ctype, - Point anchor=Point(0,0), double delta=0, - int borderType=BORDER_REFLECT_101 ); - -} - -typedef struct CvPyramid -{ - uchar **ptr; - CvSize *sz; - double *rate; - int *step; - uchar *state; - int level; -} -CvPyramid; - -#define CV_COPY( dst, src, len, idx ) \ - for( (idx) = 0; (idx) < (len); (idx)++) (dst)[idx] = (src)[idx] - -#define CV_SET( dst, val, len, idx ) \ - for( (idx) = 0; (idx) < (len); (idx)++) (dst)[idx] = (val) - -/* performs convolution of 2d floating-point array with 3x1, 1x3 or separable 3x3 mask */ -void icvSepConvSmall3_32f( float* src, int src_step, float* dst, int dst_step, - CvSize src_size, const float* kx, const float* ky, float* buffer ); - -#undef CV_CALC_MIN -#define CV_CALC_MIN(a, b) if((a) > (b)) (a) = (b) - -#undef CV_CALC_MAX -#define CV_CALC_MAX(a, b) if((a) < (b)) (a) = (b) - -CvStatus CV_STDCALL -icvCopyReplicateBorder_8u( const uchar* src, int srcstep, CvSize srcroi, - uchar* dst, int dststep, CvSize dstroi, - int left, int right, int cn, const uchar* value = 0 ); - -CvStatus CV_STDCALL icvGetRectSubPix_8u_C1R -( const uchar* src, int src_step, CvSize src_size, - uchar* dst, int dst_step, CvSize win_size, CvPoint2D32f center ); -CvStatus CV_STDCALL icvGetRectSubPix_8u32f_C1R -( const uchar* src, int src_step, CvSize src_size, - float* dst, int dst_step, CvSize win_size, CvPoint2D32f center ); -CvStatus CV_STDCALL icvGetRectSubPix_32f_C1R -( const float* src, int src_step, CvSize src_size, - float* dst, int dst_step, CvSize win_size, CvPoint2D32f center ); - -CvStatus CV_STDCALL icvGetQuadrangleSubPix_8u_C1R -( const uchar* src, int src_step, CvSize src_size, - uchar* dst, int dst_step, CvSize win_size, const float *matrix ); -CvStatus CV_STDCALL icvGetQuadrangleSubPix_8u32f_C1R -( const uchar* src, int src_step, CvSize src_size, - float* dst, int dst_step, CvSize win_size, const float *matrix ); -CvStatus CV_STDCALL icvGetQuadrangleSubPix_32f_C1R -( const float* src, int src_step, CvSize src_size, - float* dst, int dst_step, CvSize win_size, const float *matrix ); - -#include "_geom.h" - -#endif /*__OPENCV_CV_INTERNAL_H_*/ diff --git a/modules/imgproc/src/pyramids.cpp b/modules/imgproc/src/pyramids.cpp deleted file mode 100644 index 01e510e..0000000 --- a/modules/imgproc/src/pyramids.cpp +++ /dev/null @@ -1,581 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -template struct FixPtCast -{ - typedef int type1; - typedef T rtype; - rtype operator ()(type1 arg) const { return (T)((arg + (1 << (shift-1))) >> shift); } -}; - -template struct FltCast -{ - typedef T type1; - typedef T rtype; - rtype operator ()(type1 arg) const { return arg*(T)(1./(1 << shift)); } -}; - -template struct NoVec -{ - int operator()(T1**, T2*, int, int) const { return 0; } -}; - -#if CV_SSE2 - -struct PyrDownVec_32s8u -{ - int operator()(int** src, uchar* dst, int, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE2) ) - return 0; - - int x = 0; - const int *row0 = src[0], *row1 = src[1], *row2 = src[2], *row3 = src[3], *row4 = src[4]; - __m128i delta = _mm_set1_epi16(128); - - for( ; x <= width - 16; x += 16 ) - { - __m128i r0, r1, r2, r3, r4, t0, t1; - r0 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row0 + x)), - _mm_load_si128((const __m128i*)(row0 + x + 4))); - r1 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row1 + x)), - _mm_load_si128((const __m128i*)(row1 + x + 4))); - r2 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row2 + x)), - _mm_load_si128((const __m128i*)(row2 + x + 4))); - r3 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row3 + x)), - _mm_load_si128((const __m128i*)(row3 + x + 4))); - r4 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row4 + x)), - _mm_load_si128((const __m128i*)(row4 + x + 4))); - r0 = _mm_add_epi16(r0, r4); - r1 = _mm_add_epi16(_mm_add_epi16(r1, r3), r2); - r0 = _mm_add_epi16(r0, _mm_add_epi16(r2, r2)); - t0 = _mm_add_epi16(r0, _mm_slli_epi16(r1, 2)); - r0 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row0 + x + 8)), - _mm_load_si128((const __m128i*)(row0 + x + 12))); - r1 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row1 + x + 8)), - _mm_load_si128((const __m128i*)(row1 + x + 12))); - r2 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row2 + x + 8)), - _mm_load_si128((const __m128i*)(row2 + x + 12))); - r3 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row3 + x + 8)), - _mm_load_si128((const __m128i*)(row3 + x + 12))); - r4 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row4 + x + 8)), - _mm_load_si128((const __m128i*)(row4 + x + 12))); - r0 = _mm_add_epi16(r0, r4); - r1 = _mm_add_epi16(_mm_add_epi16(r1, r3), r2); - r0 = _mm_add_epi16(r0, _mm_add_epi16(r2, r2)); - t1 = _mm_add_epi16(r0, _mm_slli_epi16(r1, 2)); - t0 = _mm_srli_epi16(_mm_add_epi16(t0, delta), 8); - t1 = _mm_srli_epi16(_mm_add_epi16(t1, delta), 8); - _mm_storeu_si128((__m128i*)(dst + x), _mm_packus_epi16(t0, t1)); - } - - for( ; x <= width - 4; x += 4 ) - { - __m128i r0, r1, r2, r3, r4, z = _mm_setzero_si128(); - r0 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row0 + x)), z); - r1 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row1 + x)), z); - r2 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row2 + x)), z); - r3 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row3 + x)), z); - r4 = _mm_packs_epi32(_mm_load_si128((const __m128i*)(row4 + x)), z); - r0 = _mm_add_epi16(r0, r4); - r1 = _mm_add_epi16(_mm_add_epi16(r1, r3), r2); - r0 = _mm_add_epi16(r0, _mm_add_epi16(r2, r2)); - r0 = _mm_add_epi16(r0, _mm_slli_epi16(r1, 2)); - r0 = _mm_srli_epi16(_mm_add_epi16(r0, delta), 8); - *(int*)(dst + x) = _mm_cvtsi128_si32(_mm_packus_epi16(r0, r0)); - } - - return x; - } -}; - -struct PyrDownVec_32f -{ - int operator()(float** src, float* dst, int, int width) const - { - if( !checkHardwareSupport(CV_CPU_SSE) ) - return 0; - - int x = 0; - const float *row0 = src[0], *row1 = src[1], *row2 = src[2], *row3 = src[3], *row4 = src[4]; - __m128 _4 = _mm_set1_ps(4.f), _scale = _mm_set1_ps(1.f/256); - for( ; x <= width - 8; x += 8 ) - { - __m128 r0, r1, r2, r3, r4, t0, t1; - r0 = _mm_load_ps(row0 + x); - r1 = _mm_load_ps(row1 + x); - r2 = _mm_load_ps(row2 + x); - r3 = _mm_load_ps(row3 + x); - r4 = _mm_load_ps(row4 + x); - r0 = _mm_add_ps(r0, r4); - r1 = _mm_add_ps(_mm_add_ps(r1, r3), r2); - r0 = _mm_add_ps(r0, _mm_add_ps(r2, r2)); - t0 = _mm_add_ps(r0, _mm_mul_ps(r1, _4)); - - r0 = _mm_load_ps(row0 + x + 4); - r1 = _mm_load_ps(row1 + x + 4); - r2 = _mm_load_ps(row2 + x + 4); - r3 = _mm_load_ps(row3 + x + 4); - r4 = _mm_load_ps(row4 + x + 4); - r0 = _mm_add_ps(r0, r4); - r1 = _mm_add_ps(_mm_add_ps(r1, r3), r2); - r0 = _mm_add_ps(r0, _mm_add_ps(r2, r2)); - t1 = _mm_add_ps(r0, _mm_mul_ps(r1, _4)); - - t0 = _mm_mul_ps(t0, _scale); - t1 = _mm_mul_ps(t1, _scale); - - _mm_storeu_ps(dst + x, t0); - _mm_storeu_ps(dst + x + 4, t1); - } - - return x; - } -}; - -#else - -typedef NoVec PyrDownVec_32s8u; -typedef NoVec PyrDownVec_32f; - -#endif - -template void -pyrDown_( const Mat& _src, Mat& _dst, int borderType ) -{ - const int PD_SZ = 5; - typedef typename CastOp::type1 WT; - typedef typename CastOp::rtype T; - - CV_Assert( !_src.empty() ); - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - int bufstep = (int)alignSize(dsize.width*cn, 16); - AutoBuffer _buf(bufstep*PD_SZ + 16); - WT* buf = alignPtr((WT*)_buf, 16); - int tabL[CV_CN_MAX*(PD_SZ+2)], tabR[CV_CN_MAX*(PD_SZ+2)]; - AutoBuffer _tabM(dsize.width*cn); - int* tabM = _tabM; - WT* rows[PD_SZ]; - CastOp castOp; - VecOp vecOp; - - CV_Assert( std::abs(dsize.width*2 - ssize.width) <= 2 && - std::abs(dsize.height*2 - ssize.height) <= 2 ); - int k, x, sy0 = -PD_SZ/2, sy = sy0, width0 = std::min((ssize.width-PD_SZ/2-1)/2 + 1, dsize.width); - - for( x = 0; x <= PD_SZ+1; x++ ) - { - int sx0 = borderInterpolate(x - PD_SZ/2, ssize.width, borderType)*cn; - int sx1 = borderInterpolate(x + width0*2 - PD_SZ/2, ssize.width, borderType)*cn; - for( k = 0; k < cn; k++ ) - { - tabL[x*cn + k] = sx0 + k; - tabR[x*cn + k] = sx1 + k; - } - } - - ssize.width *= cn; - dsize.width *= cn; - width0 *= cn; - - for( x = 0; x < dsize.width; x++ ) - tabM[x] = (x/cn)*2*cn + x % cn; - - for( int y = 0; y < dsize.height; y++ ) - { - T* dst = (T*)(_dst.data + _dst.step*y); - WT *row0, *row1, *row2, *row3, *row4; - - // fill the ring buffer (horizontal convolution and decimation) - for( ; sy <= y*2 + 2; sy++ ) - { - WT* row = buf + ((sy - sy0) % PD_SZ)*bufstep; - int _sy = borderInterpolate(sy, ssize.height, borderType); - const T* src = (const T*)(_src.data + _src.step*_sy); - int limit = cn; - const int* tab = tabL; - - for( x = 0;;) - { - for( ; x < limit; x++ ) - { - row[x] = src[tab[x+cn*2]]*6 + (src[tab[x+cn]] + src[tab[x+cn*3]])*4 + - src[tab[x]] + src[tab[x+cn*4]]; - } - - if( x == dsize.width ) - break; - - if( cn == 1 ) - { - for( ; x < width0; x++ ) - row[x] = src[x*2]*6 + (src[x*2 - 1] + src[x*2 + 1])*4 + - src[x*2 - 2] + src[x*2 + 2]; - } - else if( cn == 3 ) - { - for( ; x < width0; x += 3 ) - { - const T* s = src + x*2; - WT t0 = s[0]*6 + (s[-3] + s[3])*4 + s[-6] + s[6]; - WT t1 = s[1]*6 + (s[-2] + s[4])*4 + s[-5] + s[7]; - WT t2 = s[2]*6 + (s[-1] + s[5])*4 + s[-4] + s[8]; - row[x] = t0; row[x+1] = t1; row[x+2] = t2; - } - } - else if( cn == 4 ) - { - for( ; x < width0; x += 4 ) - { - const T* s = src + x*2; - WT t0 = s[0]*6 + (s[-4] + s[4])*4 + s[-8] + s[8]; - WT t1 = s[1]*6 + (s[-3] + s[5])*4 + s[-7] + s[9]; - row[x] = t0; row[x+1] = t1; - t0 = s[2]*6 + (s[-2] + s[6])*4 + s[-6] + s[10]; - t1 = s[3]*6 + (s[-1] + s[7])*4 + s[-5] + s[11]; - row[x+2] = t0; row[x+3] = t1; - } - } - else - { - for( ; x < width0; x++ ) - { - int sx = tabM[x]; - row[x] = src[sx]*6 + (src[sx - cn] + src[sx + cn])*4 + - src[sx - cn*2] + src[sx + cn*2]; - } - } - - limit = dsize.width; - tab = tabR - x; - } - } - - // do vertical convolution and decimation and write the result to the destination image - for( k = 0; k < PD_SZ; k++ ) - rows[k] = buf + ((y*2 - PD_SZ/2 + k - sy0) % PD_SZ)*bufstep; - row0 = rows[0]; row1 = rows[1]; row2 = rows[2]; row3 = rows[3]; row4 = rows[4]; - - x = vecOp(rows, dst, (int)_dst.step, dsize.width); - for( ; x < dsize.width; x++ ) - dst[x] = castOp(row2[x]*6 + (row1[x] + row3[x])*4 + row0[x] + row4[x]); - } -} - - -template void -pyrUp_( const Mat& _src, Mat& _dst, int) -{ - const int PU_SZ = 3; - typedef typename CastOp::type1 WT; - typedef typename CastOp::rtype T; - - Size ssize = _src.size(), dsize = _dst.size(); - int cn = _src.channels(); - int bufstep = (int)alignSize((dsize.width+1)*cn, 16); - AutoBuffer _buf(bufstep*PU_SZ + 16); - WT* buf = alignPtr((WT*)_buf, 16); - AutoBuffer _dtab(ssize.width*cn); - int* dtab = _dtab; - WT* rows[PU_SZ]; - CastOp castOp; - VecOp vecOp; - - CV_Assert( std::abs(dsize.width - ssize.width*2) == dsize.width % 2 && - std::abs(dsize.height - ssize.height*2) == dsize.height % 2); - int k, x, sy0 = -PU_SZ/2, sy = sy0; - - ssize.width *= cn; - dsize.width *= cn; - - for( x = 0; x < ssize.width; x++ ) - dtab[x] = (x/cn)*2*cn + x % cn; - - for( int y = 0; y < ssize.height; y++ ) - { - T* dst0 = (T*)(_dst.data + _dst.step*y*2); - T* dst1 = (T*)(_dst.data + _dst.step*(y*2+1)); - WT *row0, *row1, *row2; - - if( y*2+1 >= dsize.height ) - dst1 = dst0; - - // fill the ring buffer (horizontal convolution and decimation) - for( ; sy <= y + 1; sy++ ) - { - WT* row = buf + ((sy - sy0) % PU_SZ)*bufstep; - int _sy = borderInterpolate(sy*2, dsize.height, BORDER_REFLECT_101)/2; - const T* src = (const T*)(_src.data + _src.step*_sy); - - if( ssize.width == cn ) - { - for( x = 0; x < cn; x++ ) - row[x] = row[x + cn] = src[x]*8; - continue; - } - - for( x = 0; x < cn; x++ ) - { - int dx = dtab[x]; - WT t0 = src[x]*6 + src[x + cn]*2; - WT t1 = (src[x] + src[x + cn])*4; - row[dx] = t0; row[dx + cn] = t1; - dx = dtab[ssize.width - cn + x]; - int sx = ssize.width - cn + x; - t0 = src[sx - cn] + src[sx]*7; - t1 = src[sx]*8; - row[dx] = t0; row[dx + cn] = t1; - } - - for( x = cn; x < ssize.width - cn; x++ ) - { - int dx = dtab[x]; - WT t0 = src[x-cn] + src[x]*6 + src[x+cn]; - WT t1 = (src[x] + src[x+cn])*4; - row[dx] = t0; - row[dx+cn] = t1; - } - } - - // do vertical convolution and decimation and write the result to the destination image - for( k = 0; k < PU_SZ; k++ ) - rows[k] = buf + ((y - PU_SZ/2 + k - sy0) % PU_SZ)*bufstep; - row0 = rows[0]; row1 = rows[1]; row2 = rows[2]; - - x = vecOp(rows, dst0, (int)_dst.step, dsize.width); - for( ; x < dsize.width; x++ ) - { - T t1 = castOp((row1[x] + row2[x])*4); - T t0 = castOp(row0[x] + row1[x]*6 + row2[x]); - dst1[x] = t1; dst0[x] = t0; - } - } -} - -typedef void (*PyrFunc)(const Mat&, Mat&, int); - -} - -void cv::pyrDown( InputArray _src, OutputArray _dst, const Size& _dsz, int borderType ) -{ - Mat src = _src.getMat(); - Size dsz = _dsz == Size() ? Size((src.cols + 1)/2, (src.rows + 1)/2) : _dsz; - _dst.create( dsz, src.type() ); - Mat dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(borderType == BORDER_DEFAULT && tegra::pyrDown(src, dst)) - return; -#endif - - int depth = src.depth(); - PyrFunc func = 0; - if( depth == CV_8U ) - func = pyrDown_, PyrDownVec_32s8u>; - else if( depth == CV_16S ) - func = pyrDown_, NoVec >; - else if( depth == CV_16U ) - func = pyrDown_, NoVec >; - else if( depth == CV_32F ) - func = pyrDown_, PyrDownVec_32f>; - else if( depth == CV_64F ) - func = pyrDown_, NoVec >; - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - func( src, dst, borderType ); -} - -void cv::pyrUp( InputArray _src, OutputArray _dst, const Size& _dsz, int borderType ) -{ - Mat src = _src.getMat(); - Size dsz = _dsz == Size() ? Size(src.cols*2, src.rows*2) : _dsz; - _dst.create( dsz, src.type() ); - Mat dst = _dst.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(borderType == BORDER_DEFAULT && tegra::pyrUp(src, dst)) - return; -#endif - - int depth = src.depth(); - PyrFunc func = 0; - if( depth == CV_8U ) - func = pyrUp_, NoVec >; - else if( depth == CV_16S ) - func = pyrUp_, NoVec >; - else if( depth == CV_16U ) - func = pyrUp_, NoVec >; - else if( depth == CV_32F ) - func = pyrUp_, NoVec >; - else if( depth == CV_64F ) - func = pyrUp_, NoVec >; - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - func( src, dst, borderType ); -} - -void cv::buildPyramid( InputArray _src, OutputArrayOfArrays _dst, int maxlevel, int borderType ) -{ - Mat src = _src.getMat(); - _dst.create( maxlevel + 1, 1, 0 ); - _dst.getMatRef(0) = src; - for( int i = 1; i <= maxlevel; i++ ) - pyrDown( _dst.getMatRef(i-1), _dst.getMatRef(i), Size(), borderType ); -} - -CV_IMPL void cvPyrDown( const void* srcarr, void* dstarr, int _filter ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( _filter == CV_GAUSSIAN_5x5 && src.type() == dst.type()); - cv::pyrDown( src, dst, dst.size() ); -} - -CV_IMPL void cvPyrUp( const void* srcarr, void* dstarr, int _filter ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - - CV_Assert( _filter == CV_GAUSSIAN_5x5 && src.type() == dst.type()); - cv::pyrUp( src, dst, dst.size() ); -} - - -CV_IMPL void -cvReleasePyramid( CvMat*** _pyramid, int extra_layers ) -{ - if( !_pyramid ) - CV_Error( CV_StsNullPtr, "" ); - - if( *_pyramid ) - for( int i = 0; i <= extra_layers; i++ ) - cvReleaseMat( &(*_pyramid)[i] ); - - cvFree( _pyramid ); -} - - -CV_IMPL CvMat** -cvCreatePyramid( const CvArr* srcarr, int extra_layers, double rate, - const CvSize* layer_sizes, CvArr* bufarr, - int calc, int filter ) -{ - const float eps = 0.1f; - uchar* ptr = 0; - - CvMat stub, *src = cvGetMat( srcarr, &stub ); - - if( extra_layers < 0 ) - CV_Error( CV_StsOutOfRange, "The number of extra layers must be non negative" ); - - int i, layer_step, elem_size = CV_ELEM_SIZE(src->type); - CvSize layer_size, size = cvGetMatSize(src); - - if( bufarr ) - { - CvMat bstub, *buf; - int bufsize = 0; - - buf = cvGetMat( bufarr, &bstub ); - bufsize = buf->rows*buf->cols*CV_ELEM_SIZE(buf->type); - layer_size = size; - for( i = 1; i <= extra_layers; i++ ) - { - if( !layer_sizes ) - { - layer_size.width = cvRound(layer_size.width*rate+eps); - layer_size.height = cvRound(layer_size.height*rate+eps); - } - else - layer_size = layer_sizes[i-1]; - layer_step = layer_size.width*elem_size; - bufsize -= layer_step*layer_size.height; - } - - if( bufsize < 0 ) - CV_Error( CV_StsOutOfRange, "The buffer is too small to fit the pyramid" ); - ptr = buf->data.ptr; - } - - CvMat** pyramid = (CvMat**)cvAlloc( (extra_layers+1)*sizeof(pyramid[0]) ); - memset( pyramid, 0, (extra_layers+1)*sizeof(pyramid[0]) ); - - pyramid[0] = cvCreateMatHeader( size.height, size.width, src->type ); - cvSetData( pyramid[0], src->data.ptr, src->step ); - layer_size = size; - - for( i = 1; i <= extra_layers; i++ ) - { - if( !layer_sizes ) - { - layer_size.width = cvRound(layer_size.width*rate + eps); - layer_size.height = cvRound(layer_size.height*rate + eps); - } - else - layer_size = layer_sizes[i]; - - if( bufarr ) - { - pyramid[i] = cvCreateMatHeader( layer_size.height, layer_size.width, src->type ); - layer_step = layer_size.width*elem_size; - cvSetData( pyramid[i], ptr, layer_step ); - ptr += layer_step*layer_size.height; - } - else - pyramid[i] = cvCreateMat( layer_size.height, layer_size.width, src->type ); - - if( calc ) - cvPyrDown( pyramid[i-1], pyramid[i], filter ); - //cvResize( pyramid[i-1], pyramid[i], CV_INTER_LINEAR ); - } - - return pyramid; -} - -/* End of file. */ diff --git a/modules/imgproc/src/rotcalipers.cpp b/modules/imgproc/src/rotcalipers.cpp deleted file mode 100644 index 3795f7a..0000000 --- a/modules/imgproc/src/rotcalipers.cpp +++ /dev/null @@ -1,440 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -typedef struct -{ - int bottom; - int left; - float height; - float width; - float base_a; - float base_b; -} -icvMinAreaState; - -#define CV_CALIPERS_MAXHEIGHT 0 -#define CV_CALIPERS_MINAREARECT 1 -#define CV_CALIPERS_MAXDIST 2 - -/*F/////////////////////////////////////////////////////////////////////////////////////// -// Name: icvRotatingCalipers -// Purpose: -// Rotating calipers algorithm with some applications -// -// Context: -// Parameters: -// points - convex hull vertices ( any orientation ) -// n - number of vertices -// mode - concrete application of algorithm -// can be CV_CALIPERS_MAXDIST or -// CV_CALIPERS_MINAREARECT -// left, bottom, right, top - indexes of extremal points -// out - output info. -// In case CV_CALIPERS_MAXDIST it points to float value - -// maximal height of polygon. -// In case CV_CALIPERS_MINAREARECT -// ((CvPoint2D32f*)out)[0] - corner -// ((CvPoint2D32f*)out)[1] - vector1 -// ((CvPoint2D32f*)out)[0] - corner2 -// -// ^ -// | -// vector2 | -// | -// |____________\ -// corner / -// vector1 -// -// Returns: -// Notes: -//F*/ - -/* we will use usual cartesian coordinates */ -static void -icvRotatingCalipers( CvPoint2D32f* points, int n, int mode, float* out ) -{ - float minarea = FLT_MAX; - float max_dist = 0; - char buffer[32] = {}; - int i, k; - CvPoint2D32f* vect = (CvPoint2D32f*)cvAlloc( n * sizeof(vect[0]) ); - float* inv_vect_length = (float*)cvAlloc( n * sizeof(inv_vect_length[0]) ); - int left = 0, bottom = 0, right = 0, top = 0; - int seq[4] = { -1, -1, -1, -1 }; - - /* rotating calipers sides will always have coordinates - (a,b) (-b,a) (-a,-b) (b, -a) - */ - /* this is a first base bector (a,b) initialized by (1,0) */ - float orientation = 0; - float base_a; - float base_b = 0; - - float left_x, right_x, top_y, bottom_y; - CvPoint2D32f pt0 = points[0]; - - left_x = right_x = pt0.x; - top_y = bottom_y = pt0.y; - - for( i = 0; i < n; i++ ) - { - double dx, dy; - - if( pt0.x < left_x ) - left_x = pt0.x, left = i; - - if( pt0.x > right_x ) - right_x = pt0.x, right = i; - - if( pt0.y > top_y ) - top_y = pt0.y, top = i; - - if( pt0.y < bottom_y ) - bottom_y = pt0.y, bottom = i; - - CvPoint2D32f pt = points[(i+1) & (i+1 < n ? -1 : 0)]; - - dx = pt.x - pt0.x; - dy = pt.y - pt0.y; - - vect[i].x = (float)dx; - vect[i].y = (float)dy; - inv_vect_length[i] = (float)(1./sqrt(dx*dx + dy*dy)); - - pt0 = pt; - } - - //cvbInvSqrt( inv_vect_length, inv_vect_length, n ); - - /* find convex hull orientation */ - { - double ax = vect[n-1].x; - double ay = vect[n-1].y; - - for( i = 0; i < n; i++ ) - { - double bx = vect[i].x; - double by = vect[i].y; - - double convexity = ax * by - ay * bx; - - if( convexity != 0 ) - { - orientation = (convexity > 0) ? 1.f : (-1.f); - break; - } - ax = bx; - ay = by; - } - assert( orientation != 0 ); - } - base_a = orientation; - -/*****************************************************************************************/ -/* init calipers position */ - seq[0] = bottom; - seq[1] = right; - seq[2] = top; - seq[3] = left; -/*****************************************************************************************/ -/* Main loop - evaluate angles and rotate calipers */ - - /* all of edges will be checked while rotating calipers by 90 degrees */ - for( k = 0; k < n; k++ ) - { - /* sinus of minimal angle */ - /*float sinus;*/ - - /* compute cosine of angle between calipers side and polygon edge */ - /* dp - dot product */ - float dp0 = base_a * vect[seq[0]].x + base_b * vect[seq[0]].y; - float dp1 = -base_b * vect[seq[1]].x + base_a * vect[seq[1]].y; - float dp2 = -base_a * vect[seq[2]].x - base_b * vect[seq[2]].y; - float dp3 = base_b * vect[seq[3]].x - base_a * vect[seq[3]].y; - - float cosalpha = dp0 * inv_vect_length[seq[0]]; - float maxcos = cosalpha; - - /* number of calipers edges, that has minimal angle with edge */ - int main_element = 0; - - /* choose minimal angle */ - cosalpha = dp1 * inv_vect_length[seq[1]]; - maxcos = (cosalpha > maxcos) ? (main_element = 1, cosalpha) : maxcos; - cosalpha = dp2 * inv_vect_length[seq[2]]; - maxcos = (cosalpha > maxcos) ? (main_element = 2, cosalpha) : maxcos; - cosalpha = dp3 * inv_vect_length[seq[3]]; - maxcos = (cosalpha > maxcos) ? (main_element = 3, cosalpha) : maxcos; - - /*rotate calipers*/ - { - //get next base - int pindex = seq[main_element]; - float lead_x = vect[pindex].x*inv_vect_length[pindex]; - float lead_y = vect[pindex].y*inv_vect_length[pindex]; - switch( main_element ) - { - case 0: - base_a = lead_x; - base_b = lead_y; - break; - case 1: - base_a = lead_y; - base_b = -lead_x; - break; - case 2: - base_a = -lead_x; - base_b = -lead_y; - break; - case 3: - base_a = -lead_y; - base_b = lead_x; - break; - default: assert(0); - } - } - /* change base point of main edge */ - seq[main_element] += 1; - seq[main_element] = (seq[main_element] == n) ? 0 : seq[main_element]; - - - switch (mode) - { - case CV_CALIPERS_MAXHEIGHT: - { - /* now main element lies on edge alligned to calipers side */ - - /* find opposite element i.e. transform */ - /* 0->2, 1->3, 2->0, 3->1 */ - int opposite_el = main_element ^ 2; - - float dx = points[seq[opposite_el]].x - points[seq[main_element]].x; - float dy = points[seq[opposite_el]].y - points[seq[main_element]].y; - float dist; - - if( main_element & 1 ) - dist = (float)fabs(dx * base_a + dy * base_b); - else - dist = (float)fabs(dx * (-base_b) + dy * base_a); - - if( dist > max_dist ) - max_dist = dist; - - break; - } - case CV_CALIPERS_MINAREARECT: - /* find area of rectangle */ - { - float height; - float area; - - /* find vector left-right */ - float dx = points[seq[1]].x - points[seq[3]].x; - float dy = points[seq[1]].y - points[seq[3]].y; - - /* dotproduct */ - float width = dx * base_a + dy * base_b; - - /* find vector left-right */ - dx = points[seq[2]].x - points[seq[0]].x; - dy = points[seq[2]].y - points[seq[0]].y; - - /* dotproduct */ - height = -dx * base_b + dy * base_a; - - area = width * height; - if( area <= minarea ) - { - float *buf = (float *) buffer; - - minarea = area; - /* leftist point */ - ((int *) buf)[0] = seq[3]; - buf[1] = base_a; - buf[2] = width; - buf[3] = base_b; - buf[4] = height; - /* bottom point */ - ((int *) buf)[5] = seq[0]; - buf[6] = area; - } - break; - } - } /*switch */ - } /* for */ - - switch (mode) - { - case CV_CALIPERS_MINAREARECT: - { - float *buf = (float *) buffer; - - float A1 = buf[1]; - float B1 = buf[3]; - - float A2 = -buf[3]; - float B2 = buf[1]; - - float C1 = A1 * points[((int *) buf)[0]].x + points[((int *) buf)[0]].y * B1; - float C2 = A2 * points[((int *) buf)[5]].x + points[((int *) buf)[5]].y * B2; - - float idet = 1.f / (A1 * B2 - A2 * B1); - - float px = (C1 * B2 - C2 * B1) * idet; - float py = (A1 * C2 - A2 * C1) * idet; - - out[0] = px; - out[1] = py; - - out[2] = A1 * buf[2]; - out[3] = B1 * buf[2]; - - out[4] = A2 * buf[4]; - out[5] = B2 * buf[4]; - } - break; - case CV_CALIPERS_MAXHEIGHT: - { - out[0] = max_dist; - } - break; - } - - cvFree( &vect ); - cvFree( &inv_vect_length ); -} - - -CV_IMPL CvBox2D -cvMinAreaRect2( const CvArr* array, CvMemStorage* storage ) -{ - cv::Ptr temp_storage; - CvBox2D box; - cv::AutoBuffer _points; - CvPoint2D32f* points; - - memset(&box, 0, sizeof(box)); - - int i, n; - CvSeqReader reader; - CvContour contour_header; - CvSeqBlock block; - CvSeq* ptseq = (CvSeq*)array; - CvPoint2D32f out[3]; - - if( CV_IS_SEQ(ptseq) ) - { - if( !CV_IS_SEQ_POINT_SET(ptseq) && - (CV_SEQ_KIND(ptseq) != CV_SEQ_KIND_CURVE || - CV_SEQ_ELTYPE(ptseq) != CV_SEQ_ELTYPE_PPOINT )) - CV_Error( CV_StsUnsupportedFormat, - "Input sequence must consist of 2d points or pointers to 2d points" ); - if( !storage ) - storage = ptseq->storage; - } - else - { - ptseq = cvPointSeqFromMat( CV_SEQ_KIND_GENERIC, array, &contour_header, &block ); - } - - if( storage ) - { - temp_storage = cvCreateChildMemStorage( storage ); - } - else - { - temp_storage = cvCreateMemStorage(1 << 10); - } - - ptseq = cvConvexHull2( ptseq, temp_storage, CV_CLOCKWISE, 1 ); - n = ptseq->total; - - _points.allocate(n); - points = _points; - cvStartReadSeq( ptseq, &reader ); - - if( CV_SEQ_ELTYPE( ptseq ) == CV_32SC2 ) - { - for( i = 0; i < n; i++ ) - { - CvPoint pt; - CV_READ_SEQ_ELEM( pt, reader ); - points[i].x = (float)pt.x; - points[i].y = (float)pt.y; - } - } - else - { - for( i = 0; i < n; i++ ) - { - CV_READ_SEQ_ELEM( points[i], reader ); - } - } - - if( n > 2 ) - { - icvRotatingCalipers( points, n, CV_CALIPERS_MINAREARECT, (float*)out ); - box.center.x = out[0].x + (out[1].x + out[2].x)*0.5f; - box.center.y = out[0].y + (out[1].y + out[2].y)*0.5f; - box.size.width = (float)sqrt((double)out[1].x*out[1].x + (double)out[1].y*out[1].y); - box.size.height = (float)sqrt((double)out[2].x*out[2].x + (double)out[2].y*out[2].y); - box.angle = (float)atan2( (double)out[1].y, (double)out[1].x ); - } - else if( n == 2 ) - { - box.center.x = (points[0].x + points[1].x)*0.5f; - box.center.y = (points[0].y + points[1].y)*0.5f; - double dx = points[1].x - points[0].x; - double dy = points[1].y - points[0].y; - box.size.width = (float)sqrt(dx*dx + dy*dy); - box.size.height = 0; - box.angle = (float)atan2( dy, dx ); - } - else - { - if( n == 1 ) - box.center = points[0]; - } - - box.angle = (float)(box.angle*180/CV_PI); - return box; -} diff --git a/modules/imgproc/src/samplers.cpp b/modules/imgproc/src/samplers.cpp deleted file mode 100644 index f1c1144..0000000 --- a/modules/imgproc/src/samplers.cpp +++ /dev/null @@ -1,900 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/**************************************************************************************\ -* line samplers * -\**************************************************************************************/ - -CV_IMPL int -cvSampleLine( const void* img, CvPoint pt1, CvPoint pt2, - void* _buffer, int connectivity ) -{ - int count = -1; - - int i, coi = 0, pix_size; - CvMat stub, *mat = cvGetMat( img, &stub, &coi ); - CvLineIterator iterator; - uchar* buffer = (uchar*)_buffer; - - if( coi != 0 ) - CV_Error( CV_BadCOI, "" ); - - if( !buffer ) - CV_Error( CV_StsNullPtr, "" ); - - count = cvInitLineIterator( mat, pt1, pt2, &iterator, connectivity ); - - pix_size = CV_ELEM_SIZE(mat->type); - for( i = 0; i < count; i++ ) - { - for( int j = 0; j < pix_size; j++ ) - buffer[j] = iterator.ptr[j]; - buffer += pix_size; - CV_NEXT_LINE_POINT( iterator ); - } - - return count; -} - - -static const void* -icvAdjustRect( const void* srcptr, int src_step, int pix_size, - CvSize src_size, CvSize win_size, - CvPoint ip, CvRect* pRect ) -{ - CvRect rect; - const char* src = (const char*)srcptr; - - if( ip.x >= 0 ) - { - src += ip.x*pix_size; - rect.x = 0; - } - else - { - rect.x = -ip.x; - if( rect.x > win_size.width ) - rect.x = win_size.width; - } - - if( ip.x < src_size.width - win_size.width ) - rect.width = win_size.width; - else - { - rect.width = src_size.width - ip.x - 1; - if( rect.width < 0 ) - { - src += rect.width*pix_size; - rect.width = 0; - } - assert( rect.width <= win_size.width ); - } - - if( ip.y >= 0 ) - { - src += ip.y * src_step; - rect.y = 0; - } - else - rect.y = -ip.y; - - if( ip.y < src_size.height - win_size.height ) - rect.height = win_size.height; - else - { - rect.height = src_size.height - ip.y - 1; - if( rect.height < 0 ) - { - src += rect.height*src_step; - rect.height = 0; - } - } - - *pRect = rect; - return src - rect.x*pix_size; -} - - -#define ICV_DEF_GET_RECT_SUB_PIX_FUNC( flavor, srctype, dsttype, worktype, \ - cast_macro, scale_macro, cast_macro2 )\ -CvStatus CV_STDCALL icvGetRectSubPix_##flavor##_C1R \ -( const srctype* src, int src_step, CvSize src_size, \ - dsttype* dst, int dst_step, CvSize win_size, CvPoint2D32f center ) \ -{ \ - CvPoint ip; \ - worktype a11, a12, a21, a22, b1, b2; \ - float a, b; \ - int i, j; \ - \ - center.x -= (win_size.width-1)*0.5f; \ - center.y -= (win_size.height-1)*0.5f; \ - \ - ip.x = cvFloor( center.x ); \ - ip.y = cvFloor( center.y ); \ - \ - a = center.x - ip.x; \ - b = center.y - ip.y; \ - a11 = scale_macro((1.f-a)*(1.f-b)); \ - a12 = scale_macro(a*(1.f-b)); \ - a21 = scale_macro((1.f-a)*b); \ - a22 = scale_macro(a*b); \ - b1 = scale_macro(1.f - b); \ - b2 = scale_macro(b); \ - \ - src_step /= sizeof(src[0]); \ - dst_step /= sizeof(dst[0]); \ - \ - if( 0 <= ip.x && ip.x < src_size.width - win_size.width && \ - 0 <= ip.y && ip.y < src_size.height - win_size.height ) \ - { \ - /* extracted rectangle is totally inside the image */ \ - src += ip.y * src_step + ip.x; \ - \ - for( i = 0; i < win_size.height; i++, src += src_step, \ - dst += dst_step ) \ - { \ - for( j = 0; j <= win_size.width - 2; j += 2 ) \ - { \ - worktype s0 = cast_macro(src[j])*a11 + \ - cast_macro(src[j+1])*a12 + \ - cast_macro(src[j+src_step])*a21 + \ - cast_macro(src[j+src_step+1])*a22; \ - worktype s1 = cast_macro(src[j+1])*a11 + \ - cast_macro(src[j+2])*a12 + \ - cast_macro(src[j+src_step+1])*a21 + \ - cast_macro(src[j+src_step+2])*a22; \ - \ - dst[j] = (dsttype)cast_macro2(s0); \ - dst[j+1] = (dsttype)cast_macro2(s1); \ - } \ - \ - for( ; j < win_size.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[j])*a11 + \ - cast_macro(src[j+1])*a12 + \ - cast_macro(src[j+src_step])*a21 + \ - cast_macro(src[j+src_step+1])*a22; \ - \ - dst[j] = (dsttype)cast_macro2(s0); \ - } \ - } \ - } \ - else \ - { \ - CvRect r; \ - \ - src = (const srctype*)icvAdjustRect( src, src_step*sizeof(*src), \ - sizeof(*src), src_size, win_size,ip, &r); \ - \ - for( i = 0; i < win_size.height; i++, dst += dst_step ) \ - { \ - const srctype *src2 = src + src_step; \ - \ - if( i < r.y || i >= r.height ) \ - src2 -= src_step; \ - \ - for( j = 0; j < r.x; j++ ) \ - { \ - worktype s0 = cast_macro(src[r.x])*b1 + \ - cast_macro(src2[r.x])*b2; \ - \ - dst[j] = (dsttype)cast_macro2(s0); \ - } \ - \ - for( ; j < r.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[j])*a11 + \ - cast_macro(src[j+1])*a12 + \ - cast_macro(src2[j])*a21 + \ - cast_macro(src2[j+1])*a22; \ - \ - dst[j] = (dsttype)cast_macro2(s0); \ - } \ - \ - for( ; j < win_size.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[r.width])*b1 + \ - cast_macro(src2[r.width])*b2; \ - \ - dst[j] = (dsttype)cast_macro2(s0); \ - } \ - \ - if( i < r.height ) \ - src = src2; \ - } \ - } \ - \ - return CV_OK; \ -} - - -#define ICV_DEF_GET_RECT_SUB_PIX_FUNC_C3( flavor, srctype, dsttype, worktype, \ - cast_macro, scale_macro, mul_macro )\ -static CvStatus CV_STDCALL icvGetRectSubPix_##flavor##_C3R \ -( const srctype* src, int src_step, CvSize src_size, \ - dsttype* dst, int dst_step, CvSize win_size, CvPoint2D32f center ) \ -{ \ - CvPoint ip; \ - worktype a, b; \ - int i, j; \ - \ - center.x -= (win_size.width-1)*0.5f; \ - center.y -= (win_size.height-1)*0.5f; \ - \ - ip.x = cvFloor( center.x ); \ - ip.y = cvFloor( center.y ); \ - \ - a = scale_macro( center.x - ip.x ); \ - b = scale_macro( center.y - ip.y ); \ - \ - src_step /= sizeof( src[0] ); \ - dst_step /= sizeof( dst[0] ); \ - \ - if( 0 <= ip.x && ip.x < src_size.width - win_size.width && \ - 0 <= ip.y && ip.y < src_size.height - win_size.height ) \ - { \ - /* extracted rectangle is totally inside the image */ \ - src += ip.y * src_step + ip.x*3; \ - \ - for( i = 0; i < win_size.height; i++, src += src_step, \ - dst += dst_step ) \ - { \ - for( j = 0; j < win_size.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[j*3]); \ - worktype s1 = cast_macro(src[j*3 + src_step]); \ - s0 += mul_macro( a, (cast_macro(src[j*3+3]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src[j*3+3+src_step]) - s1));\ - dst[j*3] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[j*3+1]); \ - s1 = cast_macro(src[j*3+1 + src_step]); \ - s0 += mul_macro( a, (cast_macro(src[j*3+4]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src[j*3+4+src_step]) - s1));\ - dst[j*3+1] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[j*3+2]); \ - s1 = cast_macro(src[j*3+2 + src_step]); \ - s0 += mul_macro( a, (cast_macro(src[j*3+5]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src[j*3+5+src_step]) - s1));\ - dst[j*3+2] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - } \ - } \ - } \ - else \ - { \ - CvRect r; \ - \ - src = (const srctype*)icvAdjustRect( src, src_step*sizeof(*src), \ - sizeof(*src)*3, src_size, win_size, ip, &r ); \ - \ - for( i = 0; i < win_size.height; i++, dst += dst_step ) \ - { \ - const srctype *src2 = src + src_step; \ - \ - if( i < r.y || i >= r.height ) \ - src2 -= src_step; \ - \ - for( j = 0; j < r.x; j++ ) \ - { \ - worktype s0 = cast_macro(src[r.x*3]); \ - worktype s1 = cast_macro(src2[r.x*3]); \ - dst[j*3] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[r.x*3+1]); \ - s1 = cast_macro(src2[r.x*3+1]); \ - dst[j*3+1] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[r.x*3+2]); \ - s1 = cast_macro(src2[r.x*3+2]); \ - dst[j*3+2] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - } \ - \ - for( ; j < r.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[j*3]); \ - worktype s1 = cast_macro(src2[j*3]); \ - s0 += mul_macro( a, (cast_macro(src[j*3 + 3]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src2[j*3 + 3]) - s1)); \ - dst[j*3] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[j*3+1]); \ - s1 = cast_macro(src2[j*3+1]); \ - s0 += mul_macro( a, (cast_macro(src[j*3 + 4]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src2[j*3 + 4]) - s1)); \ - dst[j*3+1] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[j*3+2]); \ - s1 = cast_macro(src2[j*3+2]); \ - s0 += mul_macro( a, (cast_macro(src[j*3 + 5]) - s0)); \ - s1 += mul_macro( a, (cast_macro(src2[j*3 + 5]) - s1)); \ - dst[j*3+2] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - } \ - \ - for( ; j < win_size.width; j++ ) \ - { \ - worktype s0 = cast_macro(src[r.width*3]); \ - worktype s1 = cast_macro(src2[r.width*3]); \ - dst[j*3] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[r.width*3+1]); \ - s1 = cast_macro(src2[r.width*3+1]); \ - dst[j*3+1] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - \ - s0 = cast_macro(src[r.width*3+2]); \ - s1 = cast_macro(src2[r.width*3+2]); \ - dst[j*3+2] = (dsttype)(s0 + mul_macro( b, (s1 - s0))); \ - } \ - \ - if( i < r.height ) \ - src = src2; \ - } \ - } \ - \ - return CV_OK; \ -} - - - -CvStatus CV_STDCALL icvGetRectSubPix_8u32f_C1R -( const uchar* src, int src_step, CvSize src_size, - float* dst, int dst_step, CvSize win_size, CvPoint2D32f center ) -{ - CvPoint ip; - float a12, a22, b1, b2; - float a, b; - double s = 0; - int i, j; - - center.x -= (win_size.width-1)*0.5f; - center.y -= (win_size.height-1)*0.5f; - - ip.x = cvFloor( center.x ); - ip.y = cvFloor( center.y ); - - if( win_size.width <= 0 || win_size.height <= 0 ) - return CV_BADRANGE_ERR; - - a = center.x - ip.x; - b = center.y - ip.y; - a = MAX(a,0.0001f); - a12 = a*(1.f-b); - a22 = a*b; - b1 = 1.f - b; - b2 = b; - s = (1. - a)/a; - - src_step /= sizeof(src[0]); - dst_step /= sizeof(dst[0]); - - if( 0 <= ip.x && ip.x < src_size.width - win_size.width && - 0 <= ip.y && ip.y < src_size.height - win_size.height ) - { - // extracted rectangle is totally inside the image - src += ip.y * src_step + ip.x; - -#if 0 - if( icvCopySubpix_8u32f_C1R_p && - icvCopySubpix_8u32f_C1R_p( src, src_step, dst, - dst_step*sizeof(dst[0]), win_size, a, b ) >= 0 ) - return CV_OK; -#endif - - for( ; win_size.height--; src += src_step, dst += dst_step ) - { - float prev = (1 - a)*(b1*CV_8TO32F(src[0]) + b2*CV_8TO32F(src[src_step])); - for( j = 0; j < win_size.width; j++ ) - { - float t = a12*CV_8TO32F(src[j+1]) + a22*CV_8TO32F(src[j+1+src_step]); - dst[j] = prev + t; - prev = (float)(t*s); - } - } - } - else - { - CvRect r; - - src = (const uchar*)icvAdjustRect( src, src_step*sizeof(*src), - sizeof(*src), src_size, win_size,ip, &r); - - for( i = 0; i < win_size.height; i++, dst += dst_step ) - { - const uchar *src2 = src + src_step; - - if( i < r.y || i >= r.height ) - src2 -= src_step; - - for( j = 0; j < r.x; j++ ) - { - float s0 = CV_8TO32F(src[r.x])*b1 + - CV_8TO32F(src2[r.x])*b2; - - dst[j] = (float)(s0); - } - - if( j < r.width ) - { - float prev = (1 - a)*(b1*CV_8TO32F(src[j]) + b2*CV_8TO32F(src2[j])); - - for( ; j < r.width; j++ ) - { - float t = a12*CV_8TO32F(src[j+1]) + a22*CV_8TO32F(src2[j+1]); - dst[j] = prev + t; - prev = (float)(t*s); - } - } - - for( ; j < win_size.width; j++ ) - { - float s0 = CV_8TO32F(src[r.width])*b1 + - CV_8TO32F(src2[r.width])*b2; - - dst[j] = (float)(s0); - } - - if( i < r.height ) - src = src2; - } - } - - return CV_OK; -} - - - -#define ICV_SHIFT 16 -#define ICV_SCALE(x) cvRound((x)*(1 << ICV_SHIFT)) -#define ICV_MUL_SCALE(x,y) (((x)*(y) + (1 << (ICV_SHIFT-1))) >> ICV_SHIFT) -#define ICV_DESCALE(x) (((x)+(1 << (ICV_SHIFT-1))) >> ICV_SHIFT) - -/*icvCopySubpix_8u_C1R_t icvCopySubpix_8u_C1R_p = 0; -icvCopySubpix_8u32f_C1R_t icvCopySubpix_8u32f_C1R_p = 0; -icvCopySubpix_32f_C1R_t icvCopySubpix_32f_C1R_p = 0;*/ - -ICV_DEF_GET_RECT_SUB_PIX_FUNC( 8u, uchar, uchar, int, CV_NOP, ICV_SCALE, ICV_DESCALE ) -//ICV_DEF_GET_RECT_SUB_PIX_FUNC( 8u32f, uchar, float, float, CV_8TO32F, CV_NOP, CV_NOP ) -ICV_DEF_GET_RECT_SUB_PIX_FUNC( 32f, float, float, float, CV_NOP, CV_NOP, CV_NOP ) - -ICV_DEF_GET_RECT_SUB_PIX_FUNC_C3( 8u, uchar, uchar, int, CV_NOP, ICV_SCALE, ICV_MUL_SCALE ) -ICV_DEF_GET_RECT_SUB_PIX_FUNC_C3( 8u32f, uchar, float, float, CV_8TO32F, CV_NOP, CV_MUL ) -ICV_DEF_GET_RECT_SUB_PIX_FUNC_C3( 32f, float, float, float, CV_NOP, CV_NOP, CV_MUL ) - - -#define ICV_DEF_INIT_SUBPIX_TAB( FUNCNAME, FLAG ) \ -static void icvInit##FUNCNAME##FLAG##Table( CvFuncTable* tab ) \ -{ \ - tab->fn_2d[CV_8U] = (void*)icv##FUNCNAME##_8u_##FLAG; \ - tab->fn_2d[CV_32F] = (void*)icv##FUNCNAME##_32f_##FLAG; \ - \ - tab->fn_2d[1] = (void*)icv##FUNCNAME##_8u32f_##FLAG; \ -} - - -ICV_DEF_INIT_SUBPIX_TAB( GetRectSubPix, C1R ) -ICV_DEF_INIT_SUBPIX_TAB( GetRectSubPix, C3R ) - -typedef CvStatus (CV_STDCALL *CvGetRectSubPixFunc)( const void* src, int src_step, - CvSize src_size, void* dst, - int dst_step, CvSize win_size, - CvPoint2D32f center ); - -typedef CvStatus (CV_STDCALL *CvIPPGetRectSubPixFunc)( const void* src, int src_step, - CvSize src_size, void* dst, - int dst_step, CvSize win_size, - CvPoint2D32f center, - CvPoint* minpt, CvPoint* maxpt ); - -CV_IMPL void -cvGetRectSubPix( const void* srcarr, void* dstarr, CvPoint2D32f center ) -{ - static CvFuncTable gr_tab[2]; - static int inittab = 0; - - CvMat srcstub, *src = (CvMat*)srcarr; - CvMat dststub, *dst = (CvMat*)dstarr; - CvSize src_size, dst_size; - CvGetRectSubPixFunc func; - int cn, src_step, dst_step; - - if( !inittab ) - { - icvInitGetRectSubPixC1RTable( gr_tab + 0 ); - icvInitGetRectSubPixC3RTable( gr_tab + 1 ); - inittab = 1; - } - - if( !CV_IS_MAT(src)) - src = cvGetMat( src, &srcstub ); - - if( !CV_IS_MAT(dst)) - dst = cvGetMat( dst, &dststub ); - - cn = CV_MAT_CN( src->type ); - - if( (cn != 1 && cn != 3) || !CV_ARE_CNS_EQ( src, dst )) - CV_Error( CV_StsUnsupportedFormat, "" ); - - src_size = cvGetMatSize( src ); - dst_size = cvGetMatSize( dst ); - src_step = src->step ? src->step : CV_STUB_STEP; - dst_step = dst->step ? dst->step : CV_STUB_STEP; - - //if( dst_size.width > src_size.width || dst_size.height > src_size.height ) - // CV_ERROR( CV_StsBadSize, "destination ROI must be smaller than source ROI" ); -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - CvPoint minpt, maxpt; - int srctype = CV_MAT_TYPE(src->type), dsttype = CV_MAT_TYPE(dst->type); - CvIPPGetRectSubPixFunc ippfunc = - srctype == CV_8UC1 && dsttype == CV_8UC1 ? (CvIPPGetRectSubPixFunc)ippiCopySubpixIntersect_8u_C1R : - srctype == CV_8UC1 && dsttype == CV_32FC1 ? (CvIPPGetRectSubPixFunc)ippiCopySubpixIntersect_8u32f_C1R : - srctype == CV_32FC1 && dsttype == CV_32FC1 ? (CvIPPGetRectSubPixFunc)ippiCopySubpixIntersect_32f_C1R : 0; - - if( ippfunc && ippfunc(src->data.ptr, src->step, src_size, dst->data.ptr, - dst->step, dst_size, center, &minpt, &maxpt) >= 0 ) - return; -#endif - - if( CV_ARE_DEPTHS_EQ( src, dst )) - { - func = (CvGetRectSubPixFunc)(gr_tab[cn != 1].fn_2d[CV_MAT_DEPTH(src->type)]); - } - else - { - if( CV_MAT_DEPTH( src->type ) != CV_8U || CV_MAT_DEPTH( dst->type ) != CV_32F ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - func = (CvGetRectSubPixFunc)(gr_tab[cn != 1].fn_2d[1]); - } - - if( !func ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - IPPI_CALL( func( src->data.ptr, src_step, src_size, - dst->data.ptr, dst_step, dst_size, center )); -} - - -#define ICV_32F8U(x) ((uchar)cvRound(x)) - -#define ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC( flavor, srctype, dsttype, \ - worktype, cast_macro, cvt ) \ -CvStatus CV_STDCALL \ -icvGetQuadrangleSubPix_##flavor##_C1R \ -( const srctype * src, int src_step, CvSize src_size, \ - dsttype *dst, int dst_step, CvSize win_size, const float *matrix ) \ -{ \ - int x, y; \ - double dx = (win_size.width - 1)*0.5; \ - double dy = (win_size.height - 1)*0.5; \ - double A11 = matrix[0], A12 = matrix[1], A13 = matrix[2]-A11*dx-A12*dy; \ - double A21 = matrix[3], A22 = matrix[4], A23 = matrix[5]-A21*dx-A22*dy; \ - \ - src_step /= sizeof(srctype); \ - dst_step /= sizeof(dsttype); \ - \ - for( y = 0; y < win_size.height; y++, dst += dst_step ) \ - { \ - double xs = A12*y + A13; \ - double ys = A22*y + A23; \ - double xe = A11*(win_size.width-1) + A12*y + A13; \ - double ye = A21*(win_size.width-1) + A22*y + A23; \ - \ - if( (unsigned)(cvFloor(xs)-1) < (unsigned)(src_size.width - 3) && \ - (unsigned)(cvFloor(ys)-1) < (unsigned)(src_size.height - 3) && \ - (unsigned)(cvFloor(xe)-1) < (unsigned)(src_size.width - 3) && \ - (unsigned)(cvFloor(ye)-1) < (unsigned)(src_size.height - 3)) \ - { \ - for( x = 0; x < win_size.width; x++ ) \ - { \ - int ixs = cvFloor( xs ); \ - int iys = cvFloor( ys ); \ - const srctype *ptr = src + src_step*iys + ixs; \ - double a = xs - ixs, b = ys - iys, a1 = 1.f - a; \ - worktype p0 = cvt(ptr[0])*a1 + cvt(ptr[1])*a; \ - worktype p1 = cvt(ptr[src_step])*a1 + cvt(ptr[src_step+1])*a;\ - xs += A11; \ - ys += A21; \ - \ - dst[x] = cast_macro(p0 + b * (p1 - p0)); \ - } \ - } \ - else \ - { \ - for( x = 0; x < win_size.width; x++ ) \ - { \ - int ixs = cvFloor( xs ), iys = cvFloor( ys ); \ - double a = xs - ixs, b = ys - iys, a1 = 1.f - a; \ - const srctype *ptr0, *ptr1; \ - worktype p0, p1; \ - xs += A11; ys += A21; \ - \ - if( (unsigned)iys < (unsigned)(src_size.height-1) ) \ - ptr0 = src + src_step*iys, ptr1 = ptr0 + src_step; \ - else \ - ptr0 = ptr1 = src + (iys < 0 ? 0 : src_size.height-1)*src_step; \ - \ - if( (unsigned)ixs < (unsigned)(src_size.width-1) ) \ - { \ - p0 = cvt(ptr0[ixs])*a1 + cvt(ptr0[ixs+1])*a; \ - p1 = cvt(ptr1[ixs])*a1 + cvt(ptr1[ixs+1])*a; \ - } \ - else \ - { \ - ixs = ixs < 0 ? 0 : src_size.width - 1; \ - p0 = cvt(ptr0[ixs]); p1 = cvt(ptr1[ixs]); \ - } \ - dst[x] = cast_macro(p0 + b * (p1 - p0)); \ - } \ - } \ - } \ - \ - return CV_OK; \ -} - - -#define ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC_C3( flavor, srctype, dsttype, \ - worktype, cast_macro, cvt ) \ -static CvStatus CV_STDCALL \ -icvGetQuadrangleSubPix_##flavor##_C3R \ -( const srctype * src, int src_step, CvSize src_size, \ - dsttype *dst, int dst_step, CvSize win_size, const float *matrix ) \ -{ \ - int x, y; \ - double dx = (win_size.width - 1)*0.5; \ - double dy = (win_size.height - 1)*0.5; \ - double A11 = matrix[0], A12 = matrix[1], A13 = matrix[2]-A11*dx-A12*dy; \ - double A21 = matrix[3], A22 = matrix[4], A23 = matrix[5]-A21*dx-A22*dy; \ - \ - src_step /= sizeof(srctype); \ - dst_step /= sizeof(dsttype); \ - \ - for( y = 0; y < win_size.height; y++, dst += dst_step ) \ - { \ - double xs = A12*y + A13; \ - double ys = A22*y + A23; \ - double xe = A11*(win_size.width-1) + A12*y + A13; \ - double ye = A21*(win_size.width-1) + A22*y + A23; \ - \ - if( (unsigned)(cvFloor(xs)-1) < (unsigned)(src_size.width - 3) && \ - (unsigned)(cvFloor(ys)-1) < (unsigned)(src_size.height - 3) && \ - (unsigned)(cvFloor(xe)-1) < (unsigned)(src_size.width - 3) && \ - (unsigned)(cvFloor(ye)-1) < (unsigned)(src_size.height - 3)) \ - { \ - for( x = 0; x < win_size.width; x++ ) \ - { \ - int ixs = cvFloor( xs ); \ - int iys = cvFloor( ys ); \ - const srctype *ptr = src + src_step*iys + ixs*3; \ - double a = xs - ixs, b = ys - iys, a1 = 1.f - a; \ - worktype p0, p1; \ - xs += A11; \ - ys += A21; \ - \ - p0 = cvt(ptr[0])*a1 + cvt(ptr[3])*a; \ - p1 = cvt(ptr[src_step])*a1 + cvt(ptr[src_step+3])*a; \ - dst[x*3] = cast_macro(p0 + b * (p1 - p0)); \ - \ - p0 = cvt(ptr[1])*a1 + cvt(ptr[4])*a; \ - p1 = cvt(ptr[src_step+1])*a1 + cvt(ptr[src_step+4])*a; \ - dst[x*3+1] = cast_macro(p0 + b * (p1 - p0)); \ - \ - p0 = cvt(ptr[2])*a1 + cvt(ptr[5])*a; \ - p1 = cvt(ptr[src_step+2])*a1 + cvt(ptr[src_step+5])*a; \ - dst[x*3+2] = cast_macro(p0 + b * (p1 - p0)); \ - } \ - } \ - else \ - { \ - for( x = 0; x < win_size.width; x++ ) \ - { \ - int ixs = cvFloor(xs), iys = cvFloor(ys); \ - double a = xs - ixs, b = ys - iys; \ - const srctype *ptr0, *ptr1; \ - xs += A11; ys += A21; \ - \ - if( (unsigned)iys < (unsigned)(src_size.height-1) ) \ - ptr0 = src + src_step*iys, ptr1 = ptr0 + src_step; \ - else \ - ptr0 = ptr1 = src + (iys < 0 ? 0 : src_size.height-1)*src_step; \ - \ - if( (unsigned)ixs < (unsigned)(src_size.width - 1) ) \ - { \ - double a1 = 1.f - a; \ - worktype p0, p1; \ - ptr0 += ixs*3; ptr1 += ixs*3; \ - p0 = cvt(ptr0[0])*a1 + cvt(ptr0[3])*a; \ - p1 = cvt(ptr1[0])*a1 + cvt(ptr1[3])*a; \ - dst[x*3] = cast_macro(p0 + b * (p1 - p0)); \ - \ - p0 = cvt(ptr0[1])*a1 + cvt(ptr0[4])*a; \ - p1 = cvt(ptr1[1])*a1 + cvt(ptr1[4])*a; \ - dst[x*3+1] = cast_macro(p0 + b * (p1 - p0)); \ - \ - p0 = cvt(ptr0[2])*a1 + cvt(ptr0[5])*a; \ - p1 = cvt(ptr1[2])*a1 + cvt(ptr1[5])*a; \ - dst[x*3+2] = cast_macro(p0 + b * (p1 - p0)); \ - } \ - else \ - { \ - double b1 = 1.f - b; \ - ixs = ixs < 0 ? 0 : src_size.width - 1; \ - ptr0 += ixs*3; ptr1 += ixs*3; \ - \ - dst[x*3] = cast_macro(cvt(ptr0[0])*b1 + cvt(ptr1[0])*b);\ - dst[x*3+1]=cast_macro(cvt(ptr0[1])*b1 + cvt(ptr1[1])*b);\ - dst[x*3+2]=cast_macro(cvt(ptr0[2])*b1 + cvt(ptr1[2])*b);\ - } \ - } \ - } \ - } \ - \ - return CV_OK; \ -} - - -/*#define srctype uchar -#define dsttype uchar -#define worktype float -#define cvt CV_8TO32F -#define cast_macro ICV_32F8U - -#undef srctype -#undef dsttype -#undef worktype -#undef cvt -#undef cast_macro*/ - -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC( 8u, uchar, uchar, double, ICV_32F8U, CV_8TO32F ) -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC( 32f, float, float, double, CV_CAST_32F, CV_NOP ) -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC( 8u32f, uchar, float, double, CV_CAST_32F, CV_8TO32F ) - -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC_C3( 8u, uchar, uchar, double, ICV_32F8U, CV_8TO32F ) -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC_C3( 32f, float, float, double, CV_CAST_32F, CV_NOP ) -ICV_DEF_GET_QUADRANGLE_SUB_PIX_FUNC_C3( 8u32f, uchar, float, double, CV_CAST_32F, CV_8TO32F ) - -ICV_DEF_INIT_SUBPIX_TAB( GetQuadrangleSubPix, C1R ) -ICV_DEF_INIT_SUBPIX_TAB( GetQuadrangleSubPix, C3R ) - -typedef CvStatus (CV_STDCALL *CvGetQuadrangleSubPixFunc)( - const void* src, int src_step, - CvSize src_size, void* dst, - int dst_step, CvSize win_size, - const float* matrix ); - -CV_IMPL void -cvGetQuadrangleSubPix( const void* srcarr, void* dstarr, const CvMat* mat ) -{ - static CvFuncTable gq_tab[2]; - static int inittab = 0; - - CvMat srcstub, *src = (CvMat*)srcarr; - CvMat dststub, *dst = (CvMat*)dstarr; - CvSize src_size, dst_size; - CvGetQuadrangleSubPixFunc func; - float m[6]; - int k, cn; - - if( !inittab ) - { - icvInitGetQuadrangleSubPixC1RTable( gq_tab + 0 ); - icvInitGetQuadrangleSubPixC3RTable( gq_tab + 1 ); - inittab = 1; - } - - if( !CV_IS_MAT(src)) - src = cvGetMat( src, &srcstub ); - - if( !CV_IS_MAT(dst)) - dst = cvGetMat( dst, &dststub ); - - if( !CV_IS_MAT(mat)) - CV_Error( CV_StsBadArg, "map matrix is not valid" ); - - cn = CV_MAT_CN( src->type ); - - if( (cn != 1 && cn != 3) || !CV_ARE_CNS_EQ( src, dst )) - CV_Error( CV_StsUnsupportedFormat, "" ); - - src_size = cvGetMatSize( src ); - dst_size = cvGetMatSize( dst ); - - /*if( dst_size.width > src_size.width || dst_size.height > src_size.height ) - CV_ERROR( CV_StsBadSize, "destination ROI must not be larger than source ROI" );*/ - - if( mat->rows != 2 || mat->cols != 3 ) - CV_Error( CV_StsBadArg, - "Transformation matrix must be 2x3" ); - - if( CV_MAT_TYPE( mat->type ) == CV_32FC1 ) - { - for( k = 0; k < 3; k++ ) - { - m[k] = mat->data.fl[k]; - m[3 + k] = ((float*)(mat->data.ptr + mat->step))[k]; - } - } - else if( CV_MAT_TYPE( mat->type ) == CV_64FC1 ) - { - for( k = 0; k < 3; k++ ) - { - m[k] = (float)mat->data.db[k]; - m[3 + k] = (float)((double*)(mat->data.ptr + mat->step))[k]; - } - } - else - CV_Error( CV_StsUnsupportedFormat, - "The transformation matrix should have 32fC1 or 64fC1 type" ); - - if( CV_ARE_DEPTHS_EQ( src, dst )) - { - func = (CvGetQuadrangleSubPixFunc)(gq_tab[cn != 1].fn_2d[CV_MAT_DEPTH(src->type)]); - } - else - { - if( CV_MAT_DEPTH( src->type ) != CV_8U || CV_MAT_DEPTH( dst->type ) != CV_32F ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - func = (CvGetQuadrangleSubPixFunc)(gq_tab[cn != 1].fn_2d[1]); - } - - if( !func ) - CV_Error( CV_StsUnsupportedFormat, "" ); - - IPPI_CALL( func( src->data.ptr, src->step, src_size, - dst->data.ptr, dst->step, dst_size, m )); -} - - -void cv::getRectSubPix( InputArray _image, Size patchSize, Point2f center, - OutputArray _patch, int patchType ) -{ - Mat image = _image.getMat(); - _patch.create(patchSize, patchType < 0 ? image.type() : - CV_MAKETYPE(CV_MAT_DEPTH(patchType),image.channels())); - Mat patch = _patch.getMat(); - CvMat _cimage = image, _cpatch = patch; - cvGetRectSubPix(&_cimage, &_cpatch, center); -} - -/* End of file. */ diff --git a/modules/imgproc/src/segmentation.cpp b/modules/imgproc/src/segmentation.cpp deleted file mode 100644 index 92f4433..0000000 --- a/modules/imgproc/src/segmentation.cpp +++ /dev/null @@ -1,541 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/****************************************************************************************\ -* Watershed * -\****************************************************************************************/ - -typedef struct CvWSNode -{ - struct CvWSNode* next; - int mask_ofs; - int img_ofs; -} -CvWSNode; - -typedef struct CvWSQueue -{ - CvWSNode* first; - CvWSNode* last; -} -CvWSQueue; - -static CvWSNode* -icvAllocWSNodes( CvMemStorage* storage ) -{ - CvWSNode* n = 0; - - int i, count = (storage->block_size - sizeof(CvMemBlock))/sizeof(*n) - 1; - - n = (CvWSNode*)cvMemStorageAlloc( storage, count*sizeof(*n) ); - for( i = 0; i < count-1; i++ ) - n[i].next = n + i + 1; - n[count-1].next = 0; - - return n; -} - - -CV_IMPL void -cvWatershed( const CvArr* srcarr, CvArr* dstarr ) -{ - const int IN_QUEUE = -2; - const int WSHED = -1; - const int NQ = 256; - cv::Ptr storage; - - CvMat sstub, *src; - CvMat dstub, *dst; - CvSize size; - CvWSNode* free_node = 0, *node; - CvWSQueue q[NQ]; - int active_queue; - int i, j; - int db, dg, dr; - int* mask; - uchar* img; - int mstep, istep; - int subs_tab[513]; - - // MAX(a,b) = b + MAX(a-b,0) - #define ws_max(a,b) ((b) + subs_tab[(a)-(b)+NQ]) - // MIN(a,b) = a - MAX(a-b,0) - #define ws_min(a,b) ((a) - subs_tab[(a)-(b)+NQ]) - - #define ws_push(idx,mofs,iofs) \ - { \ - if( !free_node ) \ - free_node = icvAllocWSNodes( storage );\ - node = free_node; \ - free_node = free_node->next;\ - node->next = 0; \ - node->mask_ofs = mofs; \ - node->img_ofs = iofs; \ - if( q[idx].last ) \ - q[idx].last->next=node; \ - else \ - q[idx].first = node; \ - q[idx].last = node; \ - } - - #define ws_pop(idx,mofs,iofs) \ - { \ - node = q[idx].first; \ - q[idx].first = node->next; \ - if( !node->next ) \ - q[idx].last = 0; \ - node->next = free_node; \ - free_node = node; \ - mofs = node->mask_ofs; \ - iofs = node->img_ofs; \ - } - - #define c_diff(ptr1,ptr2,diff) \ - { \ - db = abs((ptr1)[0] - (ptr2)[0]);\ - dg = abs((ptr1)[1] - (ptr2)[1]);\ - dr = abs((ptr1)[2] - (ptr2)[2]);\ - diff = ws_max(db,dg); \ - diff = ws_max(diff,dr); \ - assert( 0 <= diff && diff <= 255 ); \ - } - - src = cvGetMat( srcarr, &sstub ); - dst = cvGetMat( dstarr, &dstub ); - - if( CV_MAT_TYPE(src->type) != CV_8UC3 ) - CV_Error( CV_StsUnsupportedFormat, "Only 8-bit, 3-channel input images are supported" ); - - if( CV_MAT_TYPE(dst->type) != CV_32SC1 ) - CV_Error( CV_StsUnsupportedFormat, - "Only 32-bit, 1-channel output images are supported" ); - - if( !CV_ARE_SIZES_EQ( src, dst )) - CV_Error( CV_StsUnmatchedSizes, "The input and output images must have the same size" ); - - size = cvGetMatSize(src); - storage = cvCreateMemStorage(); - - istep = src->step; - img = src->data.ptr; - mstep = dst->step / sizeof(mask[0]); - mask = dst->data.i; - - memset( q, 0, NQ*sizeof(q[0]) ); - - for( i = 0; i < 256; i++ ) - subs_tab[i] = 0; - for( i = 256; i <= 512; i++ ) - subs_tab[i] = i - 256; - - // draw a pixel-wide border of dummy "watershed" (i.e. boundary) pixels - for( j = 0; j < size.width; j++ ) - mask[j] = mask[j + mstep*(size.height-1)] = WSHED; - - // initial phase: put all the neighbor pixels of each marker to the ordered queue - - // determine the initial boundaries of the basins - for( i = 1; i < size.height-1; i++ ) - { - img += istep; mask += mstep; - mask[0] = mask[size.width-1] = WSHED; - - for( j = 1; j < size.width-1; j++ ) - { - int* m = mask + j; - if( m[0] < 0 ) m[0] = 0; - if( m[0] == 0 && (m[-1] > 0 || m[1] > 0 || m[-mstep] > 0 || m[mstep] > 0) ) - { - uchar* ptr = img + j*3; - int idx = 256, t; - if( m[-1] > 0 ) - c_diff( ptr, ptr - 3, idx ); - if( m[1] > 0 ) - { - c_diff( ptr, ptr + 3, t ); - idx = ws_min( idx, t ); - } - if( m[-mstep] > 0 ) - { - c_diff( ptr, ptr - istep, t ); - idx = ws_min( idx, t ); - } - if( m[mstep] > 0 ) - { - c_diff( ptr, ptr + istep, t ); - idx = ws_min( idx, t ); - } - assert( 0 <= idx && idx <= 255 ); - ws_push( idx, i*mstep + j, i*istep + j*3 ); - m[0] = IN_QUEUE; - } - } - } - - // find the first non-empty queue - for( i = 0; i < NQ; i++ ) - if( q[i].first ) - break; - - // if there is no markers, exit immediately - if( i == NQ ) - return; - - active_queue = i; - img = src->data.ptr; - mask = dst->data.i; - - // recursively fill the basins - for(;;) - { - int mofs, iofs; - int lab = 0, t; - int* m; - uchar* ptr; - - if( q[active_queue].first == 0 ) - { - for( i = active_queue+1; i < NQ; i++ ) - if( q[i].first ) - break; - if( i == NQ ) - break; - active_queue = i; - } - - ws_pop( active_queue, mofs, iofs ); - - m = mask + mofs; - ptr = img + iofs; - t = m[-1]; - if( t > 0 ) lab = t; - t = m[1]; - if( t > 0 ) - { - if( lab == 0 ) lab = t; - else if( t != lab ) lab = WSHED; - } - t = m[-mstep]; - if( t > 0 ) - { - if( lab == 0 ) lab = t; - else if( t != lab ) lab = WSHED; - } - t = m[mstep]; - if( t > 0 ) - { - if( lab == 0 ) lab = t; - else if( t != lab ) lab = WSHED; - } - assert( lab != 0 ); - m[0] = lab; - if( lab == WSHED ) - continue; - - if( m[-1] == 0 ) - { - c_diff( ptr, ptr - 3, t ); - ws_push( t, mofs - 1, iofs - 3 ); - active_queue = ws_min( active_queue, t ); - m[-1] = IN_QUEUE; - } - if( m[1] == 0 ) - { - c_diff( ptr, ptr + 3, t ); - ws_push( t, mofs + 1, iofs + 3 ); - active_queue = ws_min( active_queue, t ); - m[1] = IN_QUEUE; - } - if( m[-mstep] == 0 ) - { - c_diff( ptr, ptr - istep, t ); - ws_push( t, mofs - mstep, iofs - istep ); - active_queue = ws_min( active_queue, t ); - m[-mstep] = IN_QUEUE; - } - if( m[mstep] == 0 ) - { - c_diff( ptr, ptr + istep, t ); - ws_push( t, mofs + mstep, iofs + istep ); - active_queue = ws_min( active_queue, t ); - m[mstep] = IN_QUEUE; - } - } -} - - -void cv::watershed( InputArray _src, InputOutputArray markers ) -{ - Mat src = _src.getMat(); - CvMat c_src = _src.getMat(), c_markers = markers.getMat(); - cvWatershed( &c_src, &c_markers ); -} - - -/****************************************************************************************\ -* Meanshift * -\****************************************************************************************/ - -CV_IMPL void -cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr, - double sp0, double sr, int max_level, - CvTermCriteria termcrit ) -{ - const int cn = 3; - const int MAX_LEVELS = 8; - - if( (unsigned)max_level > (unsigned)MAX_LEVELS ) - CV_Error( CV_StsOutOfRange, "The number of pyramid levels is too large or negative" ); - - std::vector src_pyramid(max_level+1); - std::vector dst_pyramid(max_level+1); - cv::Mat mask0; - int i, j, level; - //uchar* submask = 0; - - #define cdiff(ofs0) (tab[c0-dptr[ofs0]+255] + \ - tab[c1-dptr[(ofs0)+1]+255] + tab[c2-dptr[(ofs0)+2]+255] >= isr22) - - double sr2 = sr * sr; - int isr2 = cvRound(sr2), isr22 = MAX(isr2,16); - int tab[768]; - cv::Mat src0 = cv::cvarrToMat(srcarr); - cv::Mat dst0 = cv::cvarrToMat(dstarr); - - if( src0.type() != CV_8UC3 ) - CV_Error( CV_StsUnsupportedFormat, "Only 8-bit, 3-channel images are supported" ); - - if( src0.type() != dst0.type() ) - CV_Error( CV_StsUnmatchedFormats, "The input and output images must have the same type" ); - - if( src0.size() != dst0.size() ) - CV_Error( CV_StsUnmatchedSizes, "The input and output images must have the same size" ); - - if( !(termcrit.type & CV_TERMCRIT_ITER) ) - termcrit.max_iter = 5; - termcrit.max_iter = MAX(termcrit.max_iter,1); - termcrit.max_iter = MIN(termcrit.max_iter,100); - if( !(termcrit.type & CV_TERMCRIT_EPS) ) - termcrit.epsilon = 1.f; - termcrit.epsilon = MAX(termcrit.epsilon, 0.f); - - for( i = 0; i < 768; i++ ) - tab[i] = (i - 255)*(i - 255); - - // 1. construct pyramid - src_pyramid[0] = src0; - dst_pyramid[0] = dst0; - for( level = 1; level <= max_level; level++ ) - { - src_pyramid[level].create( (src_pyramid[level-1].rows+1)/2, - (src_pyramid[level-1].cols+1)/2, src_pyramid[level-1].type() ); - dst_pyramid[level].create( src_pyramid[level].rows, - src_pyramid[level].cols, src_pyramid[level].type() ); - cv::pyrDown( src_pyramid[level-1], src_pyramid[level], src_pyramid[level].size() ); - //CV_CALL( cvResize( src_pyramid[level-1], src_pyramid[level], CV_INTER_AREA )); - } - - mask0.create(src0.rows, src0.cols, CV_8UC1); - //CV_CALL( submask = (uchar*)cvAlloc( (sp+2)*(sp+2) )); - - // 2. apply meanshift, starting from the pyramid top (i.e. the smallest layer) - for( level = max_level; level >= 0; level-- ) - { - cv::Mat src = src_pyramid[level]; - cv::Size size = src.size(); - uchar* sptr = src.data; - int sstep = (int)src.step; - uchar* mask = 0; - int mstep = 0; - uchar* dptr; - int dstep; - float sp = (float)(sp0 / (1 << level)); - sp = MAX( sp, 1 ); - - if( level < max_level ) - { - cv::Size size1 = dst_pyramid[level+1].size(); - cv::Mat m( size.height, size.width, CV_8UC1, mask0.data ); - dstep = (int)dst_pyramid[level+1].step; - dptr = dst_pyramid[level+1].data + dstep + cn; - mstep = (int)m.step; - mask = m.data + mstep; - //cvResize( dst_pyramid[level+1], dst_pyramid[level], CV_INTER_CUBIC ); - cv::pyrUp( dst_pyramid[level+1], dst_pyramid[level], dst_pyramid[level].size() ); - m.setTo(cv::Scalar::all(0)); - - for( i = 1; i < size1.height-1; i++, dptr += dstep - (size1.width-2)*3, mask += mstep*2 ) - { - for( j = 1; j < size1.width-1; j++, dptr += cn ) - { - int c0 = dptr[0], c1 = dptr[1], c2 = dptr[2]; - mask[j*2 - 1] = cdiff(-3) || cdiff(3) || cdiff(-dstep-3) || cdiff(-dstep) || - cdiff(-dstep+3) || cdiff(dstep-3) || cdiff(dstep) || cdiff(dstep+3); - } - } - - cv::dilate( m, m, cv::Mat() ); - mask = m.data; - } - - dptr = dst_pyramid[level].data; - dstep = (int)dst_pyramid[level].step; - - for( i = 0; i < size.height; i++, sptr += sstep - size.width*3, - dptr += dstep - size.width*3, - mask += mstep ) - { - for( j = 0; j < size.width; j++, sptr += 3, dptr += 3 ) - { - int x0 = j, y0 = i, x1, y1, iter; - int c0, c1, c2; - - if( mask && !mask[j] ) - continue; - - c0 = sptr[0], c1 = sptr[1], c2 = sptr[2]; - - // iterate meanshift procedure - for( iter = 0; iter < termcrit.max_iter; iter++ ) - { - uchar* ptr; - int x, y, count = 0; - int minx, miny, maxx, maxy; - int s0 = 0, s1 = 0, s2 = 0, sx = 0, sy = 0; - double icount; - int stop_flag; - - //mean shift: process pixels in window (p-sigmaSp)x(p+sigmaSp) - minx = cvRound(x0 - sp); minx = MAX(minx, 0); - miny = cvRound(y0 - sp); miny = MAX(miny, 0); - maxx = cvRound(x0 + sp); maxx = MIN(maxx, size.width-1); - maxy = cvRound(y0 + sp); maxy = MIN(maxy, size.height-1); - ptr = sptr + (miny - i)*sstep + (minx - j)*3; - - for( y = miny; y <= maxy; y++, ptr += sstep - (maxx-minx+1)*3 ) - { - int row_count = 0; - x = minx; - #if CV_ENABLE_UNROLLED - for( ; x + 3 <= maxx; x += 4, ptr += 12 ) - { - int t0 = ptr[0], t1 = ptr[1], t2 = ptr[2]; - if( tab[t0-c0+255] + tab[t1-c1+255] + tab[t2-c2+255] <= isr2 ) - { - s0 += t0; s1 += t1; s2 += t2; - sx += x; row_count++; - } - t0 = ptr[3], t1 = ptr[4], t2 = ptr[5]; - if( tab[t0-c0+255] + tab[t1-c1+255] + tab[t2-c2+255] <= isr2 ) - { - s0 += t0; s1 += t1; s2 += t2; - sx += x+1; row_count++; - } - t0 = ptr[6], t1 = ptr[7], t2 = ptr[8]; - if( tab[t0-c0+255] + tab[t1-c1+255] + tab[t2-c2+255] <= isr2 ) - { - s0 += t0; s1 += t1; s2 += t2; - sx += x+2; row_count++; - } - t0 = ptr[9], t1 = ptr[10], t2 = ptr[11]; - if( tab[t0-c0+255] + tab[t1-c1+255] + tab[t2-c2+255] <= isr2 ) - { - s0 += t0; s1 += t1; s2 += t2; - sx += x+3; row_count++; - } - } - #endif - for( ; x <= maxx; x++, ptr += 3 ) - { - int t0 = ptr[0], t1 = ptr[1], t2 = ptr[2]; - if( tab[t0-c0+255] + tab[t1-c1+255] + tab[t2-c2+255] <= isr2 ) - { - s0 += t0; s1 += t1; s2 += t2; - sx += x; row_count++; - } - } - count += row_count; - sy += y*row_count; - } - - if( count == 0 ) - break; - - icount = 1./count; - x1 = cvRound(sx*icount); - y1 = cvRound(sy*icount); - s0 = cvRound(s0*icount); - s1 = cvRound(s1*icount); - s2 = cvRound(s2*icount); - - stop_flag = (x0 == x1 && y0 == y1) || abs(x1-x0) + abs(y1-y0) + - tab[s0 - c0 + 255] + tab[s1 - c1 + 255] + - tab[s2 - c2 + 255] <= termcrit.epsilon; - - x0 = x1; y0 = y1; - c0 = s0; c1 = s1; c2 = s2; - - if( stop_flag ) - break; - } - - dptr[0] = (uchar)c0; - dptr[1] = (uchar)c1; - dptr[2] = (uchar)c2; - } - } - } -} - -void cv::pyrMeanShiftFiltering( InputArray _src, OutputArray _dst, - double sp, double sr, int maxLevel, - TermCriteria termcrit ) -{ - Mat src = _src.getMat(); - - if( src.empty() ) - return; - - _dst.create( src.size(), src.type() ); - CvMat c_src = src, c_dst = _dst.getMat(); - cvPyrMeanShiftFiltering( &c_src, &c_dst, sp, sr, maxLevel, termcrit ); -} diff --git a/modules/imgproc/src/shapedescr.cpp b/modules/imgproc/src/shapedescr.cpp deleted file mode 100644 index c6c49a1..0000000 --- a/modules/imgproc/src/shapedescr.cpp +++ /dev/null @@ -1,1186 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -/* calculates length of a curve (e.g. contour perimeter) */ -CV_IMPL double -cvArcLength( const void *array, CvSlice slice, int is_closed ) -{ - double perimeter = 0; - - int i, j = 0, count; - const int N = 16; - float buf[N]; - CvMat buffer = cvMat( 1, N, CV_32F, buf ); - CvSeqReader reader; - CvContour contour_header; - CvSeq* contour = 0; - CvSeqBlock block; - - if( CV_IS_SEQ( array )) - { - contour = (CvSeq*)array; - if( !CV_IS_SEQ_POLYLINE( contour )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - if( is_closed < 0 ) - is_closed = CV_IS_SEQ_CLOSED( contour ); - } - else - { - is_closed = is_closed > 0; - contour = cvPointSeqFromMat( - CV_SEQ_KIND_CURVE | (is_closed ? CV_SEQ_FLAG_CLOSED : 0), - array, &contour_header, &block ); - } - - if( contour->total > 1 ) - { - int is_float = CV_SEQ_ELTYPE( contour ) == CV_32FC2; - - cvStartReadSeq( contour, &reader, 0 ); - cvSetSeqReaderPos( &reader, slice.start_index ); - count = cvSliceLength( slice, contour ); - - count -= !is_closed && count == contour->total; - - /* scroll the reader by 1 point */ - reader.prev_elem = reader.ptr; - CV_NEXT_SEQ_ELEM( sizeof(CvPoint), reader ); - - for( i = 0; i < count; i++ ) - { - float dx, dy; - - if( !is_float ) - { - CvPoint* pt = (CvPoint*)reader.ptr; - CvPoint* prev_pt = (CvPoint*)reader.prev_elem; - - dx = (float)pt->x - (float)prev_pt->x; - dy = (float)pt->y - (float)prev_pt->y; - } - else - { - CvPoint2D32f* pt = (CvPoint2D32f*)reader.ptr; - CvPoint2D32f* prev_pt = (CvPoint2D32f*)reader.prev_elem; - - dx = pt->x - prev_pt->x; - dy = pt->y - prev_pt->y; - } - - reader.prev_elem = reader.ptr; - CV_NEXT_SEQ_ELEM( contour->elem_size, reader ); - // Bugfix by Axel at rubico.com 2010-03-22, affects closed slices only - // wraparound not handled by CV_NEXT_SEQ_ELEM - if( is_closed && i == count - 2 ) - cvSetSeqReaderPos( &reader, slice.start_index ); - - buffer.data.fl[j] = dx * dx + dy * dy; - if( ++j == N || i == count - 1 ) - { - buffer.cols = j; - cvPow( &buffer, &buffer, 0.5 ); - for( ; j > 0; j-- ) - perimeter += buffer.data.fl[j-1]; - } - } - } - - return perimeter; -} - - -static CvStatus -icvFindCircle( CvPoint2D32f pt0, CvPoint2D32f pt1, - CvPoint2D32f pt2, CvPoint2D32f * center, float *radius ) -{ - double x1 = (pt0.x + pt1.x) * 0.5; - double dy1 = pt0.x - pt1.x; - double x2 = (pt1.x + pt2.x) * 0.5; - double dy2 = pt1.x - pt2.x; - double y1 = (pt0.y + pt1.y) * 0.5; - double dx1 = pt1.y - pt0.y; - double y2 = (pt1.y + pt2.y) * 0.5; - double dx2 = pt2.y - pt1.y; - double t = 0; - - CvStatus result = CV_OK; - - if( icvIntersectLines( x1, dx1, y1, dy1, x2, dx2, y2, dy2, &t ) >= 0 ) - { - center->x = (float) (x2 + dx2 * t); - center->y = (float) (y2 + dy2 * t); - *radius = (float) icvDistanceL2_32f( *center, pt0 ); - } - else - { - center->x = center->y = 0.f; - radius = 0; - result = CV_NOTDEFINED_ERR; - } - - return result; -} - - -CV_INLINE double icvIsPtInCircle( CvPoint2D32f pt, CvPoint2D32f center, float radius ) -{ - double dx = pt.x - center.x; - double dy = pt.y - center.y; - return (double)radius*radius - dx*dx - dy*dy; -} - - -static int -icvFindEnslosingCicle4pts_32f( CvPoint2D32f * pts, CvPoint2D32f * _center, float *_radius ) -{ - int shuffles[4][4] = { {0, 1, 2, 3}, {0, 1, 3, 2}, {2, 3, 0, 1}, {2, 3, 1, 0} }; - - int idxs[4] = { 0, 1, 2, 3 }; - int i, j, k = 1, mi = 0; - float max_dist = 0; - CvPoint2D32f center; - CvPoint2D32f min_center; - float radius, min_radius = FLT_MAX; - CvPoint2D32f res_pts[4]; - - center = min_center = pts[0]; - radius = 1.f; - - for( i = 0; i < 4; i++ ) - for( j = i + 1; j < 4; j++ ) - { - float dist = icvDistanceL2_32f( pts[i], pts[j] ); - - if( max_dist < dist ) - { - max_dist = dist; - idxs[0] = i; - idxs[1] = j; - } - } - - if( max_dist == 0 ) - goto function_exit; - - k = 2; - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < k; j++ ) - if( i == idxs[j] ) - break; - if( j == k ) - idxs[k++] = i; - } - - center = cvPoint2D32f( (pts[idxs[0]].x + pts[idxs[1]].x)*0.5f, - (pts[idxs[0]].y + pts[idxs[1]].y)*0.5f ); - radius = (float)(icvDistanceL2_32f( pts[idxs[0]], center )*1.03); - if( radius < 1.f ) - radius = 1.f; - - if( icvIsPtInCircle( pts[idxs[2]], center, radius ) >= 0 && - icvIsPtInCircle( pts[idxs[3]], center, radius ) >= 0 ) - { - k = 2; //rand()%2+2; - } - else - { - mi = -1; - for( i = 0; i < 4; i++ ) - { - if( icvFindCircle( pts[shuffles[i][0]], pts[shuffles[i][1]], - pts[shuffles[i][2]], ¢er, &radius ) >= 0 ) - { - radius *= 1.03f; - if( radius < 2.f ) - radius = 2.f; - - if( icvIsPtInCircle( pts[shuffles[i][3]], center, radius ) >= 0 && - min_radius > radius ) - { - min_radius = radius; - min_center = center; - mi = i; - } - } - } - assert( mi >= 0 ); - if( mi < 0 ) - mi = 0; - k = 3; - center = min_center; - radius = min_radius; - for( i = 0; i < 4; i++ ) - idxs[i] = shuffles[mi][i]; - } - - function_exit: - - *_center = center; - *_radius = radius; - - /* reorder output points */ - for( i = 0; i < 4; i++ ) - res_pts[i] = pts[idxs[i]]; - - for( i = 0; i < 4; i++ ) - { - pts[i] = res_pts[i]; - assert( icvIsPtInCircle( pts[i], center, radius ) >= 0 ); - } - - return k; -} - - -CV_IMPL int -cvMinEnclosingCircle( const void* array, CvPoint2D32f * _center, float *_radius ) -{ - const int max_iters = 100; - const float eps = FLT_EPSILON*2; - CvPoint2D32f center = { 0, 0 }; - float radius = 0; - int result = 0; - - if( _center ) - _center->x = _center->y = 0.f; - if( _radius ) - *_radius = 0; - - CvSeqReader reader; - int k, count; - CvPoint2D32f pts[8]; - CvContour contour_header; - CvSeqBlock block; - CvSeq* sequence = 0; - int is_float; - - if( !_center || !_radius ) - CV_Error( CV_StsNullPtr, "Null center or radius pointers" ); - - if( CV_IS_SEQ(array) ) - { - sequence = (CvSeq*)array; - if( !CV_IS_SEQ_POINT_SET( sequence )) - CV_Error( CV_StsBadArg, "The passed sequence is not a valid contour" ); - } - else - { - sequence = cvPointSeqFromMat( - CV_SEQ_KIND_GENERIC, array, &contour_header, &block ); - } - - if( sequence->total <= 0 ) - CV_Error( CV_StsBadSize, "" ); - - cvStartReadSeq( sequence, &reader, 0 ); - - count = sequence->total; - is_float = CV_SEQ_ELTYPE(sequence) == CV_32FC2; - - if( !is_float ) - { - CvPoint *pt_left, *pt_right, *pt_top, *pt_bottom; - CvPoint pt; - pt_left = pt_right = pt_top = pt_bottom = (CvPoint *)(reader.ptr); - CV_READ_SEQ_ELEM( pt, reader ); - - for(int i = 1; i < count; i++ ) - { - CvPoint* pt_ptr = (CvPoint*)reader.ptr; - CV_READ_SEQ_ELEM( pt, reader ); - - if( pt.x < pt_left->x ) - pt_left = pt_ptr; - if( pt.x > pt_right->x ) - pt_right = pt_ptr; - if( pt.y < pt_top->y ) - pt_top = pt_ptr; - if( pt.y > pt_bottom->y ) - pt_bottom = pt_ptr; - } - - pts[0] = cvPointTo32f( *pt_left ); - pts[1] = cvPointTo32f( *pt_right ); - pts[2] = cvPointTo32f( *pt_top ); - pts[3] = cvPointTo32f( *pt_bottom ); - } - else - { - CvPoint2D32f *pt_left, *pt_right, *pt_top, *pt_bottom; - CvPoint2D32f pt; - pt_left = pt_right = pt_top = pt_bottom = (CvPoint2D32f *) (reader.ptr); - CV_READ_SEQ_ELEM( pt, reader ); - - for(int i = 1; i < count; i++ ) - { - CvPoint2D32f* pt_ptr = (CvPoint2D32f*)reader.ptr; - CV_READ_SEQ_ELEM( pt, reader ); - - if( pt.x < pt_left->x ) - pt_left = pt_ptr; - if( pt.x > pt_right->x ) - pt_right = pt_ptr; - if( pt.y < pt_top->y ) - pt_top = pt_ptr; - if( pt.y > pt_bottom->y ) - pt_bottom = pt_ptr; - } - - pts[0] = *pt_left; - pts[1] = *pt_right; - pts[2] = *pt_top; - pts[3] = *pt_bottom; - } - - for( k = 0; k < max_iters; k++ ) - { - double min_delta = 0, delta; - CvPoint2D32f ptfl, farAway = { 0, 0}; - /*only for first iteration because the alg is repared at the loop's foot*/ - if(k==0) - icvFindEnslosingCicle4pts_32f( pts, ¢er, &radius ); - - cvStartReadSeq( sequence, &reader, 0 ); - - for(int i = 0; i < count; i++ ) - { - if( !is_float ) - { - ptfl.x = (float)((CvPoint*)reader.ptr)->x; - ptfl.y = (float)((CvPoint*)reader.ptr)->y; - } - else - { - ptfl = *(CvPoint2D32f*)reader.ptr; - } - CV_NEXT_SEQ_ELEM( sequence->elem_size, reader ); - - delta = icvIsPtInCircle( ptfl, center, radius ); - if( delta < min_delta ) - { - min_delta = delta; - farAway = ptfl; - } - } - result = min_delta >= 0; - if( result ) - break; - - CvPoint2D32f ptsCopy[4]; - /* find good replacement partner for the point which is at most far away, - starting with the one that lays in the actual circle (i=3) */ - for(int i = 3; i >=0; i-- ) - { - for(int j = 0; j < 4; j++ ) - { - ptsCopy[j]=(i != j)? pts[j]: farAway; - } - - icvFindEnslosingCicle4pts_32f(ptsCopy, ¢er, &radius ); - if( icvIsPtInCircle( pts[i], center, radius )>=0){ // replaced one again in the new circle? - pts[i] = farAway; - break; - } - } - } - - if( !result ) - { - cvStartReadSeq( sequence, &reader, 0 ); - radius = 0.f; - - for(int i = 0; i < count; i++ ) - { - CvPoint2D32f ptfl; - float t, dx, dy; - - if( !is_float ) - { - ptfl.x = (float)((CvPoint*)reader.ptr)->x; - ptfl.y = (float)((CvPoint*)reader.ptr)->y; - } - else - { - ptfl = *(CvPoint2D32f*)reader.ptr; - } - - CV_NEXT_SEQ_ELEM( sequence->elem_size, reader ); - dx = center.x - ptfl.x; - dy = center.y - ptfl.y; - t = dx*dx + dy*dy; - radius = MAX(radius,t); - } - - radius = (float)(sqrt(radius)*(1 + eps)); - result = 1; - } - - *_center = center; - *_radius = radius; - - return result; -} - - -/* area of a whole sequence */ -static CvStatus -icvContourArea( const CvSeq* contour, double *area ) -{ - if( contour->total ) - { - CvSeqReader reader; - int lpt = contour->total; - double a00 = 0, xi_1, yi_1; - int is_float = CV_SEQ_ELTYPE(contour) == CV_32FC2; - - cvStartReadSeq( contour, &reader, 0 ); - - if( !is_float ) - { - xi_1 = ((CvPoint*)(reader.ptr))->x; - yi_1 = ((CvPoint*)(reader.ptr))->y; - } - else - { - xi_1 = ((CvPoint2D32f*)(reader.ptr))->x; - yi_1 = ((CvPoint2D32f*)(reader.ptr))->y; - } - CV_NEXT_SEQ_ELEM( contour->elem_size, reader ); - - while( lpt-- > 0 ) - { - double dxy, xi, yi; - - if( !is_float ) - { - xi = ((CvPoint*)(reader.ptr))->x; - yi = ((CvPoint*)(reader.ptr))->y; - } - else - { - xi = ((CvPoint2D32f*)(reader.ptr))->x; - yi = ((CvPoint2D32f*)(reader.ptr))->y; - } - CV_NEXT_SEQ_ELEM( contour->elem_size, reader ); - - dxy = xi_1 * yi - xi * yi_1; - a00 += dxy; - xi_1 = xi; - yi_1 = yi; - } - - *area = a00 * 0.5; - } - else - *area = 0; - - return CV_OK; -} - - -/****************************************************************************************\ - - copy data from one buffer to other buffer - -\****************************************************************************************/ - -static CvStatus -icvMemCopy( double **buf1, double **buf2, double **buf3, int *b_max ) -{ - int bb; - - if( (*buf1 == NULL && *buf2 == NULL) || *buf3 == NULL ) - return CV_NULLPTR_ERR; - - bb = *b_max; - if( *buf2 == NULL ) - { - *b_max = 2 * (*b_max); - *buf2 = (double *)cvAlloc( (*b_max) * sizeof( double )); - - if( *buf2 == NULL ) - return CV_OUTOFMEM_ERR; - - memcpy( *buf2, *buf3, bb * sizeof( double )); - - *buf3 = *buf2; - cvFree( buf1 ); - *buf1 = NULL; - } - else - { - *b_max = 2 * (*b_max); - *buf1 = (double *) cvAlloc( (*b_max) * sizeof( double )); - - if( *buf1 == NULL ) - return CV_OUTOFMEM_ERR; - - memcpy( *buf1, *buf3, bb * sizeof( double )); - - *buf3 = *buf1; - cvFree( buf2 ); - *buf2 = NULL; - } - return CV_OK; -} - - -/* area of a contour sector */ -static CvStatus icvContourSecArea( CvSeq * contour, CvSlice slice, double *area ) -{ - CvPoint pt; /* pointer to points */ - CvPoint pt_s, pt_e; /* first and last points */ - CvSeqReader reader; /* points reader of contour */ - - int p_max = 2, p_ind; - int lpt, flag, i; - double a00; /* unnormalized moments m00 */ - double xi, yi, xi_1, yi_1, x0, y0, dxy, sk, sk1, t; - double x_s, y_s, nx, ny, dx, dy, du, dv; - double eps = 1.e-5; - double *p_are1, *p_are2, *p_are; - - assert( contour != NULL ); - - if( contour == NULL ) - return CV_NULLPTR_ERR; - - if( !CV_IS_SEQ_POINT_SET( contour )) - return CV_BADFLAG_ERR; - - lpt = cvSliceLength( slice, contour ); - /*if( n2 >= n1 ) - lpt = n2 - n1 + 1; - else - lpt = contour->total - n1 + n2 + 1;*/ - - if( contour->total && lpt > 2 ) - { - a00 = x0 = y0 = xi_1 = yi_1 = 0; - sk1 = 0; - flag = 0; - dxy = 0; - p_are1 = (double *) cvAlloc( p_max * sizeof( double )); - - if( p_are1 == NULL ) - return CV_OUTOFMEM_ERR; - - p_are = p_are1; - p_are2 = NULL; - - cvStartReadSeq( contour, &reader, 0 ); - cvSetSeqReaderPos( &reader, slice.start_index ); - CV_READ_SEQ_ELEM( pt_s, reader ); - p_ind = 0; - cvSetSeqReaderPos( &reader, slice.end_index ); - CV_READ_SEQ_ELEM( pt_e, reader ); - -/* normal coefficients */ - nx = pt_s.y - pt_e.y; - ny = pt_e.x - pt_s.x; - cvSetSeqReaderPos( &reader, slice.start_index ); - - while( lpt-- > 0 ) - { - CV_READ_SEQ_ELEM( pt, reader ); - - if( flag == 0 ) - { - xi_1 = (double) pt.x; - yi_1 = (double) pt.y; - x0 = xi_1; - y0 = yi_1; - sk1 = 0; - flag = 1; - } - else - { - xi = (double) pt.x; - yi = (double) pt.y; - -/**************** edges intersection examination **************************/ - sk = nx * (xi - pt_s.x) + ny * (yi - pt_s.y); - if( (fabs( sk ) < eps && lpt > 0) || sk * sk1 < -eps ) - { - if( fabs( sk ) < eps ) - { - dxy = xi_1 * yi - xi * yi_1; - a00 = a00 + dxy; - dxy = xi * y0 - x0 * yi; - a00 = a00 + dxy; - - if( p_ind >= p_max ) - icvMemCopy( &p_are1, &p_are2, &p_are, &p_max ); - - p_are[p_ind] = a00 / 2.; - p_ind++; - a00 = 0; - sk1 = 0; - x0 = xi; - y0 = yi; - dxy = 0; - } - else - { -/* define intersection point */ - dv = yi - yi_1; - du = xi - xi_1; - dx = ny; - dy = -nx; - if( fabs( du ) > eps ) - t = ((yi_1 - pt_s.y) * du + dv * (pt_s.x - xi_1)) / - (du * dy - dx * dv); - else - t = (xi_1 - pt_s.x) / dx; - if( t > eps && t < 1 - eps ) - { - x_s = pt_s.x + t * dx; - y_s = pt_s.y + t * dy; - dxy = xi_1 * y_s - x_s * yi_1; - a00 += dxy; - dxy = x_s * y0 - x0 * y_s; - a00 += dxy; - if( p_ind >= p_max ) - icvMemCopy( &p_are1, &p_are2, &p_are, &p_max ); - - p_are[p_ind] = a00 / 2.; - p_ind++; - - a00 = 0; - sk1 = 0; - x0 = x_s; - y0 = y_s; - dxy = x_s * yi - xi * y_s; - } - } - } - else - dxy = xi_1 * yi - xi * yi_1; - - a00 += dxy; - xi_1 = xi; - yi_1 = yi; - sk1 = sk; - - } - } - - xi = x0; - yi = y0; - dxy = xi_1 * yi - xi * yi_1; - - a00 += dxy; - - if( p_ind >= p_max ) - icvMemCopy( &p_are1, &p_are2, &p_are, &p_max ); - - p_are[p_ind] = a00 / 2.; - p_ind++; - -/* common area calculation */ - *area = 0; - for( i = 0; i < p_ind; i++ ) - (*area) += fabs( p_are[i] ); - - if( p_are1 != NULL ) - cvFree( &p_are1 ); - else if( p_are2 != NULL ) - cvFree( &p_are2 ); - - return CV_OK; - } - else - return CV_BADSIZE_ERR; -} - - -/* external contour area function */ -CV_IMPL double -cvContourArea( const void *array, CvSlice slice, int oriented ) -{ - double area = 0; - - CvContour contour_header; - CvSeq* contour = 0; - CvSeqBlock block; - - if( CV_IS_SEQ( array )) - { - contour = (CvSeq*)array; - if( !CV_IS_SEQ_POLYLINE( contour )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - } - else - { - contour = cvPointSeqFromMat( CV_SEQ_KIND_CURVE, array, &contour_header, &block ); - } - - if( cvSliceLength( slice, contour ) == contour->total ) - { - IPPI_CALL( icvContourArea( contour, &area )); - } - else - { - if( CV_SEQ_ELTYPE( contour ) != CV_32SC2 ) - CV_Error( CV_StsUnsupportedFormat, - "Only curves with integer coordinates are supported in case of contour slice" ); - IPPI_CALL( icvContourSecArea( contour, slice, &area )); - } - - return oriented ? area : fabs(area); -} - - -CV_IMPL CvBox2D -cvFitEllipse2( const CvArr* array ) -{ - CvBox2D box; - cv::AutoBuffer Ad, bd; - memset( &box, 0, sizeof(box)); - - CvContour contour_header; - CvSeq* ptseq = 0; - CvSeqBlock block; - int n; - - if( CV_IS_SEQ( array )) - { - ptseq = (CvSeq*)array; - if( !CV_IS_SEQ_POINT_SET( ptseq )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - } - else - { - ptseq = cvPointSeqFromMat(CV_SEQ_KIND_GENERIC, array, &contour_header, &block); - } - - n = ptseq->total; - if( n < 5 ) - CV_Error( CV_StsBadSize, "Number of points should be >= 5" ); - - /* - * New fitellipse algorithm, contributed by Dr. Daniel Weiss - */ - CvPoint2D32f c = {0,0}; - double gfp[5], rp[5], t; - CvMat A, b, x; - const double min_eps = 1e-8; - int i, is_float; - CvSeqReader reader; - - Ad.allocate(n*5); - bd.allocate(n); - - // first fit for parameters A - E - A = cvMat( n, 5, CV_64F, Ad ); - b = cvMat( n, 1, CV_64F, bd ); - x = cvMat( 5, 1, CV_64F, gfp ); - - cvStartReadSeq( ptseq, &reader ); - is_float = CV_SEQ_ELTYPE(ptseq) == CV_32FC2; - - for( i = 0; i < n; i++ ) - { - CvPoint2D32f p; - if( is_float ) - p = *(CvPoint2D32f*)(reader.ptr); - else - { - p.x = (float)((int*)reader.ptr)[0]; - p.y = (float)((int*)reader.ptr)[1]; - } - CV_NEXT_SEQ_ELEM( sizeof(p), reader ); - c.x += p.x; - c.y += p.y; - } - c.x /= n; - c.y /= n; - - for( i = 0; i < n; i++ ) - { - CvPoint2D32f p; - if( is_float ) - p = *(CvPoint2D32f*)(reader.ptr); - else - { - p.x = (float)((int*)reader.ptr)[0]; - p.y = (float)((int*)reader.ptr)[1]; - } - CV_NEXT_SEQ_ELEM( sizeof(p), reader ); - p.x -= c.x; - p.y -= c.y; - - bd[i] = 10000.0; // 1.0? - Ad[i*5] = -(double)p.x * p.x; // A - C signs inverted as proposed by APP - Ad[i*5 + 1] = -(double)p.y * p.y; - Ad[i*5 + 2] = -(double)p.x * p.y; - Ad[i*5 + 3] = p.x; - Ad[i*5 + 4] = p.y; - } - - cvSolve( &A, &b, &x, CV_SVD ); - - // now use general-form parameters A - E to find the ellipse center: - // differentiate general form wrt x/y to get two equations for cx and cy - A = cvMat( 2, 2, CV_64F, Ad ); - b = cvMat( 2, 1, CV_64F, bd ); - x = cvMat( 2, 1, CV_64F, rp ); - Ad[0] = 2 * gfp[0]; - Ad[1] = Ad[2] = gfp[2]; - Ad[3] = 2 * gfp[1]; - bd[0] = gfp[3]; - bd[1] = gfp[4]; - cvSolve( &A, &b, &x, CV_SVD ); - - // re-fit for parameters A - C with those center coordinates - A = cvMat( n, 3, CV_64F, Ad ); - b = cvMat( n, 1, CV_64F, bd ); - x = cvMat( 3, 1, CV_64F, gfp ); - for( i = 0; i < n; i++ ) - { - CvPoint2D32f p; - if( is_float ) - p = *(CvPoint2D32f*)(reader.ptr); - else - { - p.x = (float)((int*)reader.ptr)[0]; - p.y = (float)((int*)reader.ptr)[1]; - } - CV_NEXT_SEQ_ELEM( sizeof(p), reader ); - p.x -= c.x; - p.y -= c.y; - bd[i] = 1.0; - Ad[i * 3] = (p.x - rp[0]) * (p.x - rp[0]); - Ad[i * 3 + 1] = (p.y - rp[1]) * (p.y - rp[1]); - Ad[i * 3 + 2] = (p.x - rp[0]) * (p.y - rp[1]); - } - cvSolve(&A, &b, &x, CV_SVD); - - // store angle and radii - rp[4] = -0.5 * atan2(gfp[2], gfp[1] - gfp[0]); // convert from APP angle usage - t = sin(-2.0 * rp[4]); - if( fabs(t) > fabs(gfp[2])*min_eps ) - t = gfp[2]/t; - else - t = gfp[1] - gfp[0]; - rp[2] = fabs(gfp[0] + gfp[1] - t); - if( rp[2] > min_eps ) - rp[2] = sqrt(2.0 / rp[2]); - rp[3] = fabs(gfp[0] + gfp[1] + t); - if( rp[3] > min_eps ) - rp[3] = sqrt(2.0 / rp[3]); - - box.center.x = (float)rp[0] + c.x; - box.center.y = (float)rp[1] + c.y; - box.size.width = (float)(rp[2]*2); - box.size.height = (float)(rp[3]*2); - if( box.size.width > box.size.height ) - { - float tmp; - CV_SWAP( box.size.width, box.size.height, tmp ); - box.angle = (float)(90 + rp[4]*180/CV_PI); - } - if( box.angle < -180 ) - box.angle += 360; - if( box.angle > 360 ) - box.angle -= 360; - - return box; -} - - -/* Calculates bounding rectagnle of a point set or retrieves already calculated */ -CV_IMPL CvRect -cvBoundingRect( CvArr* array, int update ) -{ - CvSeqReader reader; - CvRect rect = { 0, 0, 0, 0 }; - CvContour contour_header; - CvSeq* ptseq = 0; - CvSeqBlock block; - - CvMat stub, *mat = 0; - int xmin = 0, ymin = 0, xmax = -1, ymax = -1, i, j, k; - int calculate = update; - - if( CV_IS_SEQ( array )) - { - ptseq = (CvSeq*)array; - if( !CV_IS_SEQ_POINT_SET( ptseq )) - CV_Error( CV_StsBadArg, "Unsupported sequence type" ); - - if( ptseq->header_size < (int)sizeof(CvContour)) - { - update = 0; - calculate = 1; - } - } - else - { - mat = cvGetMat( array, &stub ); - if( CV_MAT_TYPE(mat->type) == CV_32SC2 || - CV_MAT_TYPE(mat->type) == CV_32FC2 ) - { - ptseq = cvPointSeqFromMat(CV_SEQ_KIND_GENERIC, mat, &contour_header, &block); - mat = 0; - } - else if( CV_MAT_TYPE(mat->type) != CV_8UC1 && - CV_MAT_TYPE(mat->type) != CV_8SC1 ) - CV_Error( CV_StsUnsupportedFormat, - "The image/matrix format is not supported by the function" ); - update = 0; - calculate = 1; - } - - if( !calculate ) - return ((CvContour*)ptseq)->rect; - - if( mat ) - { - CvSize size = cvGetMatSize(mat); - xmin = size.width; - ymin = -1; - - for( i = 0; i < size.height; i++ ) - { - uchar* _ptr = mat->data.ptr + i*mat->step; - uchar* ptr = (uchar*)cvAlignPtr(_ptr, 4); - int have_nz = 0, k_min, offset = (int)(ptr - _ptr); - j = 0; - offset = MIN(offset, size.width); - for( ; j < offset; j++ ) - if( _ptr[j] ) - { - have_nz = 1; - break; - } - if( j < offset ) - { - if( j < xmin ) - xmin = j; - if( j > xmax ) - xmax = j; - } - if( offset < size.width ) - { - xmin -= offset; - xmax -= offset; - size.width -= offset; - j = 0; - for( ; j <= xmin - 4; j += 4 ) - if( *((int*)(ptr+j)) ) - break; - for( ; j < xmin; j++ ) - if( ptr[j] ) - { - xmin = j; - if( j > xmax ) - xmax = j; - have_nz = 1; - break; - } - k_min = MAX(j-1, xmax); - k = size.width - 1; - for( ; k > k_min && (k&3) != 3; k-- ) - if( ptr[k] ) - break; - if( k > k_min && (k&3) == 3 ) - { - for( ; k > k_min+3; k -= 4 ) - if( *((int*)(ptr+k-3)) ) - break; - } - for( ; k > k_min; k-- ) - if( ptr[k] ) - { - xmax = k; - have_nz = 1; - break; - } - if( !have_nz ) - { - j &= ~3; - for( ; j <= k - 3; j += 4 ) - if( *((int*)(ptr+j)) ) - break; - for( ; j <= k; j++ ) - if( ptr[j] ) - { - have_nz = 1; - break; - } - } - xmin += offset; - xmax += offset; - size.width += offset; - } - if( have_nz ) - { - if( ymin < 0 ) - ymin = i; - ymax = i; - } - } - - if( xmin >= size.width ) - xmin = ymin = 0; - } - else if( ptseq->total ) - { - int is_float = CV_SEQ_ELTYPE(ptseq) == CV_32FC2; - cvStartReadSeq( ptseq, &reader, 0 ); - CvPoint pt; - CV_READ_SEQ_ELEM( pt, reader ); - #if CV_SSE4_2 - if(cv::checkHardwareSupport(CV_CPU_SSE4_2)) - { - if( !is_float ) - { - __m128i minval, maxval; - minval = maxval = _mm_loadl_epi64((const __m128i*)(&pt)); //min[0]=pt.x, min[1]=pt.y - - for( i = 1; i < ptseq->total; i++) - { - __m128i ptXY = _mm_loadl_epi64((const __m128i*)(reader.ptr)); - CV_NEXT_SEQ_ELEM(sizeof(pt), reader); - minval = _mm_min_epi32(ptXY, minval); - maxval = _mm_max_epi32(ptXY, maxval); - } - xmin = _mm_cvtsi128_si32(minval); - ymin = _mm_cvtsi128_si32(_mm_srli_si128(minval, 4)); - xmax = _mm_cvtsi128_si32(maxval); - ymax = _mm_cvtsi128_si32(_mm_srli_si128(maxval, 4)); - } - else - { - __m128 minvalf, maxvalf, z = _mm_setzero_ps(), ptXY = _mm_setzero_ps(); - minvalf = maxvalf = _mm_loadl_pi(z, (const __m64*)(&pt)); - - for( i = 1; i < ptseq->total; i++ ) - { - ptXY = _mm_loadl_pi(ptXY, (const __m64*)reader.ptr); - CV_NEXT_SEQ_ELEM(sizeof(pt), reader); - - minvalf = _mm_min_ps(minvalf, ptXY); - maxvalf = _mm_max_ps(maxvalf, ptXY); - } - - float xyminf[2], xymaxf[2]; - _mm_storel_pi((__m64*)xyminf, minvalf); - _mm_storel_pi((__m64*)xymaxf, maxvalf); - xmin = cvFloor(xyminf[0]); - ymin = cvFloor(xyminf[1]); - xmax = cvFloor(xymaxf[0]); - ymax = cvFloor(xymaxf[1]); - } - } - else - #endif - { - if( !is_float ) - { - xmin = xmax = pt.x; - ymin = ymax = pt.y; - - for( i = 1; i < ptseq->total; i++ ) - { - CV_READ_SEQ_ELEM( pt, reader ); - - if( xmin > pt.x ) - xmin = pt.x; - - if( xmax < pt.x ) - xmax = pt.x; - - if( ymin > pt.y ) - ymin = pt.y; - - if( ymax < pt.y ) - ymax = pt.y; - } - } - else - { - Cv32suf v; - // init values - xmin = xmax = CV_TOGGLE_FLT(pt.x); - ymin = ymax = CV_TOGGLE_FLT(pt.y); - - for( i = 1; i < ptseq->total; i++ ) - { - CV_READ_SEQ_ELEM( pt, reader ); - pt.x = CV_TOGGLE_FLT(pt.x); - pt.y = CV_TOGGLE_FLT(pt.y); - - if( xmin > pt.x ) - xmin = pt.x; - - if( xmax < pt.x ) - xmax = pt.x; - - if( ymin > pt.y ) - ymin = pt.y; - - if( ymax < pt.y ) - ymax = pt.y; - } - - v.i = CV_TOGGLE_FLT(xmin); xmin = cvFloor(v.f); - v.i = CV_TOGGLE_FLT(ymin); ymin = cvFloor(v.f); - // because right and bottom sides of the bounding rectangle are not inclusive - // (note +1 in width and height calculation below), cvFloor is used here instead of cvCeil - v.i = CV_TOGGLE_FLT(xmax); xmax = cvFloor(v.f); - v.i = CV_TOGGLE_FLT(ymax); ymax = cvFloor(v.f); - } - } - rect.x = xmin; - rect.y = ymin; - rect.width = xmax - xmin + 1; - rect.height = ymax - ymin + 1; - } - if( update ) - ((CvContour*)ptseq)->rect = rect; - return rect; -} - -/* End of file. */ diff --git a/modules/imgproc/src/smooth.cpp b/modules/imgproc/src/smooth.cpp deleted file mode 100644 index ae14ca9..0000000 --- a/modules/imgproc/src/smooth.cpp +++ /dev/null @@ -1,2582 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/* - * This file includes the code, contributed by Simon Perreault - * (the function icvMedianBlur_8u_O1) - * - * Constant-time median filtering -- http://nomis80.org/ctmf.html - * Copyright (C) 2006 Simon Perreault - * - * Contact: - * Laboratoire de vision et systemes numeriques - * Pavillon Adrien-Pouliot - * Universite Laval - * Sainte-Foy, Quebec, Canada - * G1K 7P4 - * - * perreaul@gel.ulaval.ca - */ - -namespace cv -{ - -/****************************************************************************************\ - Box Filter -\****************************************************************************************/ - -template struct RowSum : public BaseRowFilter -{ - RowSum( int _ksize, int _anchor ) - { - ksize = _ksize; - anchor = _anchor; - } - - void operator()(const uchar* src, uchar* dst, int width, int cn) - { - const T* S = (const T*)src; - ST* D = (ST*)dst; - int i = 0, k, ksz_cn = ksize*cn; - - width = (width - 1)*cn; - for( k = 0; k < cn; k++, S++, D++ ) - { - ST s = 0; - for( i = 0; i < ksz_cn; i += cn ) - s += S[i]; - D[0] = s; - for( i = 0; i < width; i += cn ) - { - s += S[i + ksz_cn] - S[i]; - D[i+cn] = s; - } - } - } -}; - - -template struct ColumnSum : public BaseColumnFilter -{ - ColumnSum( int _ksize, int _anchor, double _scale ) - { - ksize = _ksize; - anchor = _anchor; - scale = _scale; - sumCount = 0; - } - - void reset() { sumCount = 0; } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int i; - ST* SUM; - bool haveScale = scale != 1; - double _scale = scale; - - if( width != (int)sum.size() ) - { - sum.resize(width); - sumCount = 0; - } - - SUM = &sum[0]; - if( sumCount == 0 ) - { - for( i = 0; i < width; i++ ) - SUM[i] = 0; - for( ; sumCount < ksize - 1; sumCount++, src++ ) - { - const ST* Sp = (const ST*)src[0]; - for( i = 0; i <= width - 2; i += 2 ) - { - ST s0 = SUM[i] + Sp[i], s1 = SUM[i+1] + Sp[i+1]; - SUM[i] = s0; SUM[i+1] = s1; - } - - for( ; i < width; i++ ) - SUM[i] += Sp[i]; - } - } - else - { - CV_Assert( sumCount == ksize-1 ); - src += ksize-1; - } - - for( ; count--; src++ ) - { - const ST* Sp = (const ST*)src[0]; - const ST* Sm = (const ST*)src[1-ksize]; - T* D = (T*)dst; - if( haveScale ) - { - for( i = 0; i <= width - 2; i += 2 ) - { - ST s0 = SUM[i] + Sp[i], s1 = SUM[i+1] + Sp[i+1]; - D[i] = saturate_cast(s0*_scale); - D[i+1] = saturate_cast(s1*_scale); - s0 -= Sm[i]; s1 -= Sm[i+1]; - SUM[i] = s0; SUM[i+1] = s1; - } - - for( ; i < width; i++ ) - { - ST s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0*_scale); - SUM[i] = s0 - Sm[i]; - } - } - else - { - for( i = 0; i <= width - 2; i += 2 ) - { - ST s0 = SUM[i] + Sp[i], s1 = SUM[i+1] + Sp[i+1]; - D[i] = saturate_cast(s0); - D[i+1] = saturate_cast(s1); - s0 -= Sm[i]; s1 -= Sm[i+1]; - SUM[i] = s0; SUM[i+1] = s1; - } - - for( ; i < width; i++ ) - { - ST s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0); - SUM[i] = s0 - Sm[i]; - } - } - dst += dststep; - } - } - - double scale; - int sumCount; - vector sum; -}; - - -template<> struct ColumnSum : public BaseColumnFilter -{ - ColumnSum( int _ksize, int _anchor, double _scale ) - { - ksize = _ksize; - anchor = _anchor; - scale = _scale; - sumCount = 0; - } - - void reset() { sumCount = 0; } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int i; - int* SUM; - bool haveScale = scale != 1; - double _scale = scale; - - #if CV_SSE2 - bool haveSSE2 = checkHardwareSupport(CV_CPU_SSE2); - #endif - - if( width != (int)sum.size() ) - { - sum.resize(width); - sumCount = 0; - } - - SUM = &sum[0]; - if( sumCount == 0 ) - { - memset((void*)SUM, 0, width*sizeof(int)); - for( ; sumCount < ksize - 1; sumCount++, src++ ) - { - const int* Sp = (const int*)src[0]; - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - for( ; i < width-4; i+=4 ) - { - __m128i _sum = _mm_loadu_si128((const __m128i*)(SUM+i)); - __m128i _sp = _mm_loadu_si128((const __m128i*)(Sp+i)); - _mm_storeu_si128((__m128i*)(SUM+i),_mm_add_epi32(_sum, _sp)); - } - } - #endif - for( ; i < width; i++ ) - SUM[i] += Sp[i]; - } - } - else - { - CV_Assert( sumCount == ksize-1 ); - src += ksize-1; - } - - for( ; count--; src++ ) - { - const int* Sp = (const int*)src[0]; - const int* Sm = (const int*)src[1-ksize]; - uchar* D = (uchar*)dst; - if( haveScale ) - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - const __m128 scale4 = _mm_set1_ps((float)_scale); - for( ; i < width-8; i+=8 ) - { - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _sm1 = _mm_loadu_si128((const __m128i*)(Sm+i+4)); - - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - __m128i _s01 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i+4)), - _mm_loadu_si128((const __m128i*)(Sp+i+4))); - - __m128i _s0T = _mm_cvtps_epi32(_mm_mul_ps(scale4, _mm_cvtepi32_ps(_s0))); - __m128i _s0T1 = _mm_cvtps_epi32(_mm_mul_ps(scale4, _mm_cvtepi32_ps(_s01))); - - _s0T = _mm_packs_epi32(_s0T, _s0T1); - - _mm_storel_epi64((__m128i*)(D+i), _mm_packus_epi16(_s0T, _s0T)); - - _mm_storeu_si128((__m128i*)(SUM+i), _mm_sub_epi32(_s0,_sm)); - _mm_storeu_si128((__m128i*)(SUM+i+4),_mm_sub_epi32(_s01,_sm1)); - } - } - #endif - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0*_scale); - SUM[i] = s0 - Sm[i]; - } - } - else - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - for( ; i < width-8; i+=8 ) - { - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _sm1 = _mm_loadu_si128((const __m128i*)(Sm+i+4)); - - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - __m128i _s01 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i+4)), - _mm_loadu_si128((const __m128i*)(Sp+i+4))); - - __m128i _s0T = _mm_packs_epi32(_s0, _s01); - - _mm_storel_epi64((__m128i*)(D+i), _mm_packus_epi16(_s0T, _s0T)); - - _mm_storeu_si128((__m128i*)(SUM+i), _mm_sub_epi32(_s0,_sm)); - _mm_storeu_si128((__m128i*)(SUM+i+4),_mm_sub_epi32(_s01,_sm1)); - } - } - #endif - - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0); - SUM[i] = s0 - Sm[i]; - } - } - dst += dststep; - } - } - - double scale; - int sumCount; - vector sum; -}; - -template<> struct ColumnSum : public BaseColumnFilter -{ - ColumnSum( int _ksize, int _anchor, double _scale ) - { - ksize = _ksize; - anchor = _anchor; - scale = _scale; - sumCount = 0; - } - - void reset() { sumCount = 0; } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int i; - int* SUM; - bool haveScale = scale != 1; - double _scale = scale; - - #if CV_SSE2 - bool haveSSE2 = checkHardwareSupport(CV_CPU_SSE2); - #endif - - if( width != (int)sum.size() ) - { - sum.resize(width); - sumCount = 0; - } - SUM = &sum[0]; - if( sumCount == 0 ) - { - memset((void*)SUM, 0, width*sizeof(int)); - for( ; sumCount < ksize - 1; sumCount++, src++ ) - { - const int* Sp = (const int*)src[0]; - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - for( ; i < width-4; i+=4 ) - { - __m128i _sum = _mm_loadu_si128((const __m128i*)(SUM+i)); - __m128i _sp = _mm_loadu_si128((const __m128i*)(Sp+i)); - _mm_storeu_si128((__m128i*)(SUM+i),_mm_add_epi32(_sum, _sp)); - } - } - #endif - for( ; i < width; i++ ) - SUM[i] += Sp[i]; - } - } - else - { - CV_Assert( sumCount == ksize-1 ); - src += ksize-1; - } - - for( ; count--; src++ ) - { - const int* Sp = (const int*)src[0]; - const int* Sm = (const int*)src[1-ksize]; - short* D = (short*)dst; - if( haveScale ) - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - const __m128 scale4 = _mm_set1_ps((float)_scale); - for( ; i < width-8; i+=8 ) - { - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _sm1 = _mm_loadu_si128((const __m128i*)(Sm+i+4)); - - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - __m128i _s01 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i+4)), - _mm_loadu_si128((const __m128i*)(Sp+i+4))); - - __m128i _s0T = _mm_cvtps_epi32(_mm_mul_ps(scale4, _mm_cvtepi32_ps(_s0))); - __m128i _s0T1 = _mm_cvtps_epi32(_mm_mul_ps(scale4, _mm_cvtepi32_ps(_s01))); - - _mm_storeu_si128((__m128i*)(D+i), _mm_packs_epi32(_s0T, _s0T1)); - - _mm_storeu_si128((__m128i*)(SUM+i),_mm_sub_epi32(_s0,_sm)); - _mm_storeu_si128((__m128i*)(SUM+i+4), _mm_sub_epi32(_s01,_sm1)); - } - } - #endif - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0*_scale); - SUM[i] = s0 - Sm[i]; - } - } - else - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - for( ; i < width-8; i+=8 ) - { - - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _sm1 = _mm_loadu_si128((const __m128i*)(Sm+i+4)); - - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - __m128i _s01 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i+4)), - _mm_loadu_si128((const __m128i*)(Sp+i+4))); - - _mm_storeu_si128((__m128i*)(D+i), _mm_packs_epi32(_s0, _s01)); - - _mm_storeu_si128((__m128i*)(SUM+i), _mm_sub_epi32(_s0,_sm)); - _mm_storeu_si128((__m128i*)(SUM+i+4),_mm_sub_epi32(_s01,_sm1)); - } - } - #endif - - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0); - SUM[i] = s0 - Sm[i]; - } - } - dst += dststep; - } - } - - double scale; - int sumCount; - vector sum; -}; - - -template<> struct ColumnSum : public BaseColumnFilter -{ - ColumnSum( int _ksize, int _anchor, double _scale ) - { - ksize = _ksize; - anchor = _anchor; - scale = _scale; - sumCount = 0; - } - - void reset() { sumCount = 0; } - - void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) - { - int i; - int* SUM; - bool haveScale = scale != 1; - double _scale = scale; - #if CV_SSE2 - bool haveSSE2 = checkHardwareSupport(CV_CPU_SSE2); - #endif - - if( width != (int)sum.size() ) - { - sum.resize(width); - sumCount = 0; - } - SUM = &sum[0]; - if( sumCount == 0 ) - { - memset((void*)SUM, 0, width*sizeof(int)); - for( ; sumCount < ksize - 1; sumCount++, src++ ) - { - const int* Sp = (const int*)src[0]; - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - for( ; i < width-4; i+=4 ) - { - __m128i _sum = _mm_loadu_si128((const __m128i*)(SUM+i)); - __m128i _sp = _mm_loadu_si128((const __m128i*)(Sp+i)); - _mm_storeu_si128((__m128i*)(SUM+i), _mm_add_epi32(_sum, _sp)); - } - } - #endif - for( ; i < width; i++ ) - SUM[i] += Sp[i]; - } - } - else - { - CV_Assert( sumCount == ksize-1 ); - src += ksize-1; - } - - for( ; count--; src++ ) - { - const int* Sp = (const int*)src[0]; - const int* Sm = (const int*)src[1-ksize]; - ushort* D = (ushort*)dst; - if( haveScale ) - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - const __m128 scale4 = _mm_set1_ps((float)_scale); - const __m128i delta0 = _mm_set1_epi32(0x8000); - const __m128i delta1 = _mm_set1_epi32(0x80008000); - - for( ; i < width-4; i+=4) - { - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - - __m128i _res = _mm_cvtps_epi32(_mm_mul_ps(scale4, _mm_cvtepi32_ps(_s0))); - - _res = _mm_sub_epi32(_res, delta0); - _res = _mm_add_epi16(_mm_packs_epi32(_res, _res), delta1); - - _mm_storel_epi64((__m128i*)(D+i), _res); - _mm_storeu_si128((__m128i*)(SUM+i), _mm_sub_epi32(_s0,_sm)); - } - } - #endif - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0*_scale); - SUM[i] = s0 - Sm[i]; - } - } - else - { - i = 0; - #if CV_SSE2 - if(haveSSE2) - { - const __m128i delta0 = _mm_set1_epi32(0x8000); - const __m128i delta1 = _mm_set1_epi32(0x80008000); - - for( ; i < width-4; i+=4 ) - { - __m128i _sm = _mm_loadu_si128((const __m128i*)(Sm+i)); - __m128i _s0 = _mm_add_epi32(_mm_loadu_si128((const __m128i*)(SUM+i)), - _mm_loadu_si128((const __m128i*)(Sp+i))); - - __m128i _res = _mm_sub_epi32(_s0, delta0); - _res = _mm_add_epi16(_mm_packs_epi32(_res, _res), delta1); - - _mm_storel_epi64((__m128i*)(D+i), _res); - _mm_storeu_si128((__m128i*)(SUM+i), _mm_sub_epi32(_s0,_sm)); - } - } - #endif - - for( ; i < width; i++ ) - { - int s0 = SUM[i] + Sp[i]; - D[i] = saturate_cast(s0); - SUM[i] = s0 - Sm[i]; - } - } - dst += dststep; - } - } - - double scale; - int sumCount; - vector sum; -}; - - -} - -cv::Ptr cv::getRowSumFilter(int srcType, int sumType, int ksize, int anchor) -{ - int sdepth = CV_MAT_DEPTH(srcType), ddepth = CV_MAT_DEPTH(sumType); - CV_Assert( CV_MAT_CN(sumType) == CV_MAT_CN(srcType) ); - - if( anchor < 0 ) - anchor = ksize/2; - - if( sdepth == CV_8U && ddepth == CV_32S ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_8U && ddepth == CV_64F ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_16U && ddepth == CV_32S ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_16U && ddepth == CV_64F ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_16S && ddepth == CV_32S ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_32S && ddepth == CV_32S ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_16S && ddepth == CV_64F ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_32F && ddepth == CV_64F ) - return Ptr(new RowSum(ksize, anchor)); - if( sdepth == CV_64F && ddepth == CV_64F ) - return Ptr(new RowSum(ksize, anchor)); - - CV_Error_( CV_StsNotImplemented, - ("Unsupported combination of source format (=%d), and buffer format (=%d)", - srcType, sumType)); - - return Ptr(0); -} - - -cv::Ptr cv::getColumnSumFilter(int sumType, int dstType, int ksize, - int anchor, double scale) -{ - int sdepth = CV_MAT_DEPTH(sumType), ddepth = CV_MAT_DEPTH(dstType); - CV_Assert( CV_MAT_CN(sumType) == CV_MAT_CN(dstType) ); - - if( anchor < 0 ) - anchor = ksize/2; - - if( ddepth == CV_8U && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_8U && sdepth == CV_64F ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_16U && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_16U && sdepth == CV_64F ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_16S && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_16S && sdepth == CV_64F ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_32S && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_32F && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_32F && sdepth == CV_64F ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_64F && sdepth == CV_32S ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - if( ddepth == CV_64F && sdepth == CV_64F ) - return Ptr(new ColumnSum(ksize, anchor, scale)); - - CV_Error_( CV_StsNotImplemented, - ("Unsupported combination of sum format (=%d), and destination format (=%d)", - sumType, dstType)); - - return Ptr(0); -} - - -cv::Ptr cv::createBoxFilter( int srcType, int dstType, Size ksize, - Point anchor, bool normalize, int borderType ) -{ - int sdepth = CV_MAT_DEPTH(srcType); - int cn = CV_MAT_CN(srcType), sumType = CV_64F; - if( sdepth <= CV_32S && (!normalize || - ksize.width*ksize.height <= (sdepth == CV_8U ? (1<<23) : - sdepth == CV_16U ? (1 << 15) : (1 << 16))) ) - sumType = CV_32S; - sumType = CV_MAKETYPE( sumType, cn ); - - Ptr rowFilter = getRowSumFilter(srcType, sumType, ksize.width, anchor.x ); - Ptr columnFilter = getColumnSumFilter(sumType, - dstType, ksize.height, anchor.y, normalize ? 1./(ksize.width*ksize.height) : 1); - - return Ptr(new FilterEngine(Ptr(0), rowFilter, columnFilter, - srcType, dstType, sumType, borderType )); -} - - -void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth, - Size ksize, Point anchor, - bool normalize, int borderType ) -{ - Mat src = _src.getMat(); - int sdepth = src.depth(), cn = src.channels(); - if( ddepth < 0 ) - ddepth = sdepth; - _dst.create( src.size(), CV_MAKETYPE(ddepth, cn) ); - Mat dst = _dst.getMat(); - if( borderType != BORDER_CONSTANT && normalize && (borderType & BORDER_ISOLATED) != 0 ) - { - if( src.rows == 1 ) - ksize.height = 1; - if( src.cols == 1 ) - ksize.width = 1; - } -#ifdef HAVE_TEGRA_OPTIMIZATION - if ( tegra::box(src, dst, ksize, anchor, normalize, borderType) ) - return; -#endif - - Ptr f = createBoxFilter( src.type(), dst.type(), - ksize, anchor, normalize, borderType ); - f->apply( src, dst ); -} - -void cv::blur( InputArray src, OutputArray dst, - Size ksize, Point anchor, int borderType ) -{ - boxFilter( src, dst, -1, ksize, anchor, true, borderType ); -} - -/****************************************************************************************\ - Gaussian Blur -\****************************************************************************************/ - -cv::Mat cv::getGaussianKernel( int n, double sigma, int ktype ) -{ - const int SMALL_GAUSSIAN_SIZE = 7; - static const float small_gaussian_tab[][SMALL_GAUSSIAN_SIZE] = - { - {1.f}, - {0.25f, 0.5f, 0.25f}, - {0.0625f, 0.25f, 0.375f, 0.25f, 0.0625f}, - {0.03125f, 0.109375f, 0.21875f, 0.28125f, 0.21875f, 0.109375f, 0.03125f} - }; - - const float* fixed_kernel = n % 2 == 1 && n <= SMALL_GAUSSIAN_SIZE && sigma <= 0 ? - small_gaussian_tab[n>>1] : 0; - - CV_Assert( ktype == CV_32F || ktype == CV_64F ); - Mat kernel(n, 1, ktype); - float* cf = (float*)kernel.data; - double* cd = (double*)kernel.data; - - double sigmaX = sigma > 0 ? sigma : ((n-1)*0.5 - 1)*0.3 + 0.8; - double scale2X = -0.5/(sigmaX*sigmaX); - double sum = 0; - - int i; - for( i = 0; i < n; i++ ) - { - double x = i - (n-1)*0.5; - double t = fixed_kernel ? (double)fixed_kernel[i] : std::exp(scale2X*x*x); - if( ktype == CV_32F ) - { - cf[i] = (float)t; - sum += cf[i]; - } - else - { - cd[i] = t; - sum += cd[i]; - } - } - - sum = 1./sum; - for( i = 0; i < n; i++ ) - { - if( ktype == CV_32F ) - cf[i] = (float)(cf[i]*sum); - else - cd[i] *= sum; - } - - return kernel; -} - - -cv::Ptr cv::createGaussianFilter( int type, Size ksize, - double sigma1, double sigma2, - int borderType ) -{ - int depth = CV_MAT_DEPTH(type); - if( sigma2 <= 0 ) - sigma2 = sigma1; - - // automatic detection of kernel size from sigma - if( ksize.width <= 0 && sigma1 > 0 ) - ksize.width = cvRound(sigma1*(depth == CV_8U ? 3 : 4)*2 + 1)|1; - if( ksize.height <= 0 && sigma2 > 0 ) - ksize.height = cvRound(sigma2*(depth == CV_8U ? 3 : 4)*2 + 1)|1; - - CV_Assert( ksize.width > 0 && ksize.width % 2 == 1 && - ksize.height > 0 && ksize.height % 2 == 1 ); - - sigma1 = std::max( sigma1, 0. ); - sigma2 = std::max( sigma2, 0. ); - - Mat kx = getGaussianKernel( ksize.width, sigma1, std::max(depth, CV_32F) ); - Mat ky; - if( ksize.height == ksize.width && std::abs(sigma1 - sigma2) < DBL_EPSILON ) - ky = kx; - else - ky = getGaussianKernel( ksize.height, sigma2, std::max(depth, CV_32F) ); - - return createSeparableLinearFilter( type, type, kx, ky, Point(-1,-1), 0, borderType ); -} - - -void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize, - double sigma1, double sigma2, - int borderType ) -{ - Mat src = _src.getMat(); - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if( borderType != BORDER_CONSTANT ) - { - if( src.rows == 1 ) - ksize.height = 1; - if( src.cols == 1 ) - ksize.width = 1; - } - - if( ksize.width == 1 && ksize.height == 1 ) - { - src.copyTo(dst); - return; - } - -#ifdef HAVE_TEGRA_OPTIMIZATION - if(sigma1 == 0 && sigma2 == 0 && tegra::gaussian(src, dst, ksize, borderType)) - return; -#endif - -#if defined HAVE_IPP && (IPP_VERSION_MAJOR >= 7) - if(src.type() == CV_32FC1 && sigma1 == sigma2 && ksize.width == ksize.height && sigma1 != 0.0 ) - { - IppiSize roi = {src.cols, src.rows}; - int bufSize = 0; - ippiFilterGaussGetBufferSize_32f_C1R(roi, ksize.width, &bufSize); - AutoBuffer buf(bufSize+128); - if( ippiFilterGaussBorder_32f_C1R((const Ipp32f *)src.data, (int)src.step, - (Ipp32f *)dst.data, (int)dst.step, - roi, ksize.width, (Ipp32f)sigma1, - (IppiBorderType)borderType, 0.0, - alignPtr(&buf[0],32)) >= 0 ) - return; - } -#endif - - Ptr f = createGaussianFilter( src.type(), ksize, sigma1, sigma2, borderType ); - f->apply( src, dst ); -} - - -/****************************************************************************************\ - Median Filter -\****************************************************************************************/ - -namespace cv -{ -typedef ushort HT; - -/** - * This structure represents a two-tier histogram. The first tier (known as the - * "coarse" level) is 4 bit wide and the second tier (known as the "fine" level) - * is 8 bit wide. Pixels inserted in the fine level also get inserted into the - * coarse bucket designated by the 4 MSBs of the fine bucket value. - * - * The structure is aligned on 16 bits, which is a prerequisite for SIMD - * instructions. Each bucket is 16 bit wide, which means that extra care must be - * taken to prevent overflow. - */ -typedef struct -{ - HT coarse[16]; - HT fine[16][16]; -} Histogram; - - -#if CV_SSE2 -#define MEDIAN_HAVE_SIMD 1 - -static inline void histogram_add_simd( const HT x[16], HT y[16] ) -{ - const __m128i* rx = (const __m128i*)x; - __m128i* ry = (__m128i*)y; - __m128i r0 = _mm_add_epi16(_mm_load_si128(ry+0),_mm_load_si128(rx+0)); - __m128i r1 = _mm_add_epi16(_mm_load_si128(ry+1),_mm_load_si128(rx+1)); - _mm_store_si128(ry+0, r0); - _mm_store_si128(ry+1, r1); -} - -static inline void histogram_sub_simd( const HT x[16], HT y[16] ) -{ - const __m128i* rx = (const __m128i*)x; - __m128i* ry = (__m128i*)y; - __m128i r0 = _mm_sub_epi16(_mm_load_si128(ry+0),_mm_load_si128(rx+0)); - __m128i r1 = _mm_sub_epi16(_mm_load_si128(ry+1),_mm_load_si128(rx+1)); - _mm_store_si128(ry+0, r0); - _mm_store_si128(ry+1, r1); -} - -#else -#define MEDIAN_HAVE_SIMD 0 -#endif - - -static inline void histogram_add( const HT x[16], HT y[16] ) -{ - int i; - for( i = 0; i < 16; ++i ) - y[i] = (HT)(y[i] + x[i]); -} - -static inline void histogram_sub( const HT x[16], HT y[16] ) -{ - int i; - for( i = 0; i < 16; ++i ) - y[i] = (HT)(y[i] - x[i]); -} - -static inline void histogram_muladd( int a, const HT x[16], - HT y[16] ) -{ - for( int i = 0; i < 16; ++i ) - y[i] = (HT)(y[i] + a * x[i]); -} - -static void -medianBlur_8u_O1( const Mat& _src, Mat& _dst, int ksize ) -{ -/** - * HOP is short for Histogram OPeration. This macro makes an operation \a op on - * histogram \a h for pixel value \a x. It takes care of handling both levels. - */ -#define HOP(h,x,op) \ - h.coarse[x>>4] op, \ - *((HT*)h.fine + x) op - -#define COP(c,j,x,op) \ - h_coarse[ 16*(n*c+j) + (x>>4) ] op, \ - h_fine[ 16 * (n*(16*c+(x>>4)) + j) + (x & 0xF) ] op - - int cn = _dst.channels(), m = _dst.rows, r = (ksize-1)/2; - size_t sstep = _src.step, dstep = _dst.step; - Histogram CV_DECL_ALIGNED(16) H[4]; - HT CV_DECL_ALIGNED(16) luc[4][16]; - - int STRIPE_SIZE = std::min( _dst.cols, 512/cn ); - - vector _h_coarse(1 * 16 * (STRIPE_SIZE + 2*r) * cn + 16); - vector _h_fine(16 * 16 * (STRIPE_SIZE + 2*r) * cn + 16); - HT* h_coarse = alignPtr(&_h_coarse[0], 16); - HT* h_fine = alignPtr(&_h_fine[0], 16); -#if MEDIAN_HAVE_SIMD - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); -#endif - - for( int x = 0; x < _dst.cols; x += STRIPE_SIZE ) - { - int i, j, k, c, n = std::min(_dst.cols - x, STRIPE_SIZE) + r*2; - const uchar* src = _src.data + x*cn; - uchar* dst = _dst.data + (x - r)*cn; - - memset( h_coarse, 0, 16*n*cn*sizeof(h_coarse[0]) ); - memset( h_fine, 0, 16*16*n*cn*sizeof(h_fine[0]) ); - - // First row initialization - for( c = 0; c < cn; c++ ) - { - for( j = 0; j < n; j++ ) - COP( c, j, src[cn*j+c], += (cv::HT)(r+2) ); - - for( i = 1; i < r; i++ ) - { - const uchar* p = src + sstep*std::min(i, m-1); - for ( j = 0; j < n; j++ ) - COP( c, j, p[cn*j+c], ++ ); - } - } - - for( i = 0; i < m; i++ ) - { - const uchar* p0 = src + sstep * std::max( 0, i-r-1 ); - const uchar* p1 = src + sstep * std::min( m-1, i+r ); - - memset( H, 0, cn*sizeof(H[0]) ); - memset( luc, 0, cn*sizeof(luc[0]) ); - for( c = 0; c < cn; c++ ) - { - // Update column histograms for the entire row. - for( j = 0; j < n; j++ ) - { - COP( c, j, p0[j*cn + c], -- ); - COP( c, j, p1[j*cn + c], ++ ); - } - - // First column initialization - for( k = 0; k < 16; ++k ) - histogram_muladd( 2*r+1, &h_fine[16*n*(16*c+k)], &H[c].fine[k][0] ); - - #if MEDIAN_HAVE_SIMD - if( useSIMD ) - { - for( j = 0; j < 2*r; ++j ) - histogram_add_simd( &h_coarse[16*(n*c+j)], H[c].coarse ); - - for( j = r; j < n-r; j++ ) - { - int t = 2*r*r + 2*r, b, sum = 0; - HT* segment; - - histogram_add_simd( &h_coarse[16*(n*c + std::min(j+r,n-1))], H[c].coarse ); - - // Find median at coarse level - for ( k = 0; k < 16 ; ++k ) - { - sum += H[c].coarse[k]; - if ( sum > t ) - { - sum -= H[c].coarse[k]; - break; - } - } - assert( k < 16 ); - - /* Update corresponding histogram segment */ - if ( luc[c][k] <= j-r ) - { - memset( &H[c].fine[k], 0, 16 * sizeof(HT) ); - for ( luc[c][k] = cv::HT(j-r); luc[c][k] < MIN(j+r+1,n); ++luc[c][k] ) - histogram_add_simd( &h_fine[16*(n*(16*c+k)+luc[c][k])], H[c].fine[k] ); - - if ( luc[c][k] < j+r+1 ) - { - histogram_muladd( j+r+1 - n, &h_fine[16*(n*(16*c+k)+(n-1))], &H[c].fine[k][0] ); - luc[c][k] = (HT)(j+r+1); - } - } - else - { - for ( ; luc[c][k] < j+r+1; ++luc[c][k] ) - { - histogram_sub_simd( &h_fine[16*(n*(16*c+k)+MAX(luc[c][k]-2*r-1,0))], H[c].fine[k] ); - histogram_add_simd( &h_fine[16*(n*(16*c+k)+MIN(luc[c][k],n-1))], H[c].fine[k] ); - } - } - - histogram_sub_simd( &h_coarse[16*(n*c+MAX(j-r,0))], H[c].coarse ); - - /* Find median in segment */ - segment = H[c].fine[k]; - for ( b = 0; b < 16 ; b++ ) - { - sum += segment[b]; - if ( sum > t ) - { - dst[dstep*i+cn*j+c] = (uchar)(16*k + b); - break; - } - } - assert( b < 16 ); - } - } - else - #endif - { - for( j = 0; j < 2*r; ++j ) - histogram_add( &h_coarse[16*(n*c+j)], H[c].coarse ); - - for( j = r; j < n-r; j++ ) - { - int t = 2*r*r + 2*r, b, sum = 0; - HT* segment; - - histogram_add( &h_coarse[16*(n*c + std::min(j+r,n-1))], H[c].coarse ); - - // Find median at coarse level - for ( k = 0; k < 16 ; ++k ) - { - sum += H[c].coarse[k]; - if ( sum > t ) - { - sum -= H[c].coarse[k]; - break; - } - } - assert( k < 16 ); - - /* Update corresponding histogram segment */ - if ( luc[c][k] <= j-r ) - { - memset( &H[c].fine[k], 0, 16 * sizeof(HT) ); - for ( luc[c][k] = cv::HT(j-r); luc[c][k] < MIN(j+r+1,n); ++luc[c][k] ) - histogram_add( &h_fine[16*(n*(16*c+k)+luc[c][k])], H[c].fine[k] ); - - if ( luc[c][k] < j+r+1 ) - { - histogram_muladd( j+r+1 - n, &h_fine[16*(n*(16*c+k)+(n-1))], &H[c].fine[k][0] ); - luc[c][k] = (HT)(j+r+1); - } - } - else - { - for ( ; luc[c][k] < j+r+1; ++luc[c][k] ) - { - histogram_sub( &h_fine[16*(n*(16*c+k)+MAX(luc[c][k]-2*r-1,0))], H[c].fine[k] ); - histogram_add( &h_fine[16*(n*(16*c+k)+MIN(luc[c][k],n-1))], H[c].fine[k] ); - } - } - - histogram_sub( &h_coarse[16*(n*c+MAX(j-r,0))], H[c].coarse ); - - /* Find median in segment */ - segment = H[c].fine[k]; - for ( b = 0; b < 16 ; b++ ) - { - sum += segment[b]; - if ( sum > t ) - { - dst[dstep*i+cn*j+c] = (uchar)(16*k + b); - break; - } - } - assert( b < 16 ); - } - } - } - } - } - -#undef HOP -#undef COP -} - -static void -medianBlur_8u_Om( const Mat& _src, Mat& _dst, int m ) -{ - #define N 16 - int zone0[4][N]; - int zone1[4][N*N]; - int x, y; - int n2 = m*m/2; - Size size = _dst.size(); - const uchar* src = _src.data; - uchar* dst = _dst.data; - int src_step = (int)_src.step, dst_step = (int)_dst.step; - int cn = _src.channels(); - const uchar* src_max = src + size.height*src_step; - - #define UPDATE_ACC01( pix, cn, op ) \ - { \ - int p = (pix); \ - zone1[cn][p] op; \ - zone0[cn][p >> 4] op; \ - } - - //CV_Assert( size.height >= nx && size.width >= nx ); - for( x = 0; x < size.width; x++, src += cn, dst += cn ) - { - uchar* dst_cur = dst; - const uchar* src_top = src; - const uchar* src_bottom = src; - int k, c; - int src_step1 = src_step, dst_step1 = dst_step; - - if( x % 2 != 0 ) - { - src_bottom = src_top += src_step*(size.height-1); - dst_cur += dst_step*(size.height-1); - src_step1 = -src_step1; - dst_step1 = -dst_step1; - } - - // init accumulator - memset( zone0, 0, sizeof(zone0[0])*cn ); - memset( zone1, 0, sizeof(zone1[0])*cn ); - - for( y = 0; y <= m/2; y++ ) - { - for( c = 0; c < cn; c++ ) - { - if( y > 0 ) - { - for( k = 0; k < m*cn; k += cn ) - UPDATE_ACC01( src_bottom[k+c], c, ++ ); - } - else - { - for( k = 0; k < m*cn; k += cn ) - UPDATE_ACC01( src_bottom[k+c], c, += m/2+1 ); - } - } - - if( (src_step1 > 0 && y < size.height-1) || - (src_step1 < 0 && size.height-y-1 > 0) ) - src_bottom += src_step1; - } - - for( y = 0; y < size.height; y++, dst_cur += dst_step1 ) - { - // find median - for( c = 0; c < cn; c++ ) - { - int s = 0; - for( k = 0; ; k++ ) - { - int t = s + zone0[c][k]; - if( t > n2 ) break; - s = t; - } - - for( k *= N; ;k++ ) - { - s += zone1[c][k]; - if( s > n2 ) break; - } - - dst_cur[c] = (uchar)k; - } - - if( y+1 == size.height ) - break; - - if( cn == 1 ) - { - for( k = 0; k < m; k++ ) - { - int p = src_top[k]; - int q = src_bottom[k]; - zone1[0][p]--; - zone0[0][p>>4]--; - zone1[0][q]++; - zone0[0][q>>4]++; - } - } - else if( cn == 3 ) - { - for( k = 0; k < m*3; k += 3 ) - { - UPDATE_ACC01( src_top[k], 0, -- ); - UPDATE_ACC01( src_top[k+1], 1, -- ); - UPDATE_ACC01( src_top[k+2], 2, -- ); - - UPDATE_ACC01( src_bottom[k], 0, ++ ); - UPDATE_ACC01( src_bottom[k+1], 1, ++ ); - UPDATE_ACC01( src_bottom[k+2], 2, ++ ); - } - } - else - { - assert( cn == 4 ); - for( k = 0; k < m*4; k += 4 ) - { - UPDATE_ACC01( src_top[k], 0, -- ); - UPDATE_ACC01( src_top[k+1], 1, -- ); - UPDATE_ACC01( src_top[k+2], 2, -- ); - UPDATE_ACC01( src_top[k+3], 3, -- ); - - UPDATE_ACC01( src_bottom[k], 0, ++ ); - UPDATE_ACC01( src_bottom[k+1], 1, ++ ); - UPDATE_ACC01( src_bottom[k+2], 2, ++ ); - UPDATE_ACC01( src_bottom[k+3], 3, ++ ); - } - } - - if( (src_step1 > 0 && src_bottom + src_step1 < src_max) || - (src_step1 < 0 && src_bottom + src_step1 >= src) ) - src_bottom += src_step1; - - if( y >= m/2 ) - src_top += src_step1; - } - } -#undef N -#undef UPDATE_ACC -} - - -struct MinMax8u -{ - typedef uchar value_type; - typedef int arg_type; - enum { SIZE = 1 }; - arg_type load(const uchar* ptr) { return *ptr; } - void store(uchar* ptr, arg_type val) { *ptr = (uchar)val; } - void operator()(arg_type& a, arg_type& b) const - { - int t = CV_FAST_CAST_8U(a - b); - b += t; a -= t; - } -}; - -struct MinMax16u -{ - typedef ushort value_type; - typedef int arg_type; - enum { SIZE = 1 }; - arg_type load(const ushort* ptr) { return *ptr; } - void store(ushort* ptr, arg_type val) { *ptr = (ushort)val; } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = std::min(a, b); - b = std::max(b, t); - } -}; - -struct MinMax16s -{ - typedef short value_type; - typedef int arg_type; - enum { SIZE = 1 }; - arg_type load(const short* ptr) { return *ptr; } - void store(short* ptr, arg_type val) { *ptr = (short)val; } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = std::min(a, b); - b = std::max(b, t); - } -}; - -struct MinMax32f -{ - typedef float value_type; - typedef float arg_type; - enum { SIZE = 1 }; - arg_type load(const float* ptr) { return *ptr; } - void store(float* ptr, arg_type val) { *ptr = val; } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = std::min(a, b); - b = std::max(b, t); - } -}; - -#if CV_SSE2 - -struct MinMaxVec8u -{ - typedef uchar value_type; - typedef __m128i arg_type; - enum { SIZE = 16 }; - arg_type load(const uchar* ptr) { return _mm_loadu_si128((const __m128i*)ptr); } - void store(uchar* ptr, arg_type val) { _mm_storeu_si128((__m128i*)ptr, val); } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = _mm_min_epu8(a, b); - b = _mm_max_epu8(b, t); - } -}; - - -struct MinMaxVec16u -{ - typedef ushort value_type; - typedef __m128i arg_type; - enum { SIZE = 8 }; - arg_type load(const ushort* ptr) { return _mm_loadu_si128((const __m128i*)ptr); } - void store(ushort* ptr, arg_type val) { _mm_storeu_si128((__m128i*)ptr, val); } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = _mm_subs_epu16(a, b); - a = _mm_subs_epu16(a, t); - b = _mm_adds_epu16(b, t); - } -}; - - -struct MinMaxVec16s -{ - typedef short value_type; - typedef __m128i arg_type; - enum { SIZE = 8 }; - arg_type load(const short* ptr) { return _mm_loadu_si128((const __m128i*)ptr); } - void store(short* ptr, arg_type val) { _mm_storeu_si128((__m128i*)ptr, val); } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = _mm_min_epi16(a, b); - b = _mm_max_epi16(b, t); - } -}; - - -struct MinMaxVec32f -{ - typedef float value_type; - typedef __m128 arg_type; - enum { SIZE = 4 }; - arg_type load(const float* ptr) { return _mm_loadu_ps(ptr); } - void store(float* ptr, arg_type val) { _mm_storeu_ps(ptr, val); } - void operator()(arg_type& a, arg_type& b) const - { - arg_type t = a; - a = _mm_min_ps(a, b); - b = _mm_max_ps(b, t); - } -}; - - -#else - -typedef MinMax8u MinMaxVec8u; -typedef MinMax16u MinMaxVec16u; -typedef MinMax16s MinMaxVec16s; -typedef MinMax32f MinMaxVec32f; - -#endif - -template -static void -medianBlur_SortNet( const Mat& _src, Mat& _dst, int m ) -{ - typedef typename Op::value_type T; - typedef typename Op::arg_type WT; - typedef typename VecOp::arg_type VT; - - const T* src = (const T*)_src.data; - T* dst = (T*)_dst.data; - int sstep = (int)(_src.step/sizeof(T)); - int dstep = (int)(_dst.step/sizeof(T)); - Size size = _dst.size(); - int i, j, k, cn = _src.channels(); - Op op; - VecOp vop; - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE2); - - if( m == 3 ) - { - if( size.width == 1 || size.height == 1 ) - { - int len = size.width + size.height - 1; - int sdelta = size.height == 1 ? cn : sstep; - int sdelta0 = size.height == 1 ? 0 : sstep - cn; - int ddelta = size.height == 1 ? cn : dstep; - - for( i = 0; i < len; i++, src += sdelta0, dst += ddelta ) - for( j = 0; j < cn; j++, src++ ) - { - WT p0 = src[i > 0 ? -sdelta : 0]; - WT p1 = src[0]; - WT p2 = src[i < len - 1 ? sdelta : 0]; - - op(p0, p1); op(p1, p2); op(p0, p1); - dst[j] = (T)p1; - } - return; - } - - size.width *= cn; - for( i = 0; i < size.height; i++, dst += dstep ) - { - const T* row0 = src + std::max(i - 1, 0)*sstep; - const T* row1 = src + i*sstep; - const T* row2 = src + std::min(i + 1, size.height-1)*sstep; - int limit = useSIMD ? cn : size.width; - - for(j = 0;; ) - { - for( ; j < limit; j++ ) - { - int j0 = j >= cn ? j - cn : j; - int j2 = j < size.width - cn ? j + cn : j; - WT p0 = row0[j0], p1 = row0[j], p2 = row0[j2]; - WT p3 = row1[j0], p4 = row1[j], p5 = row1[j2]; - WT p6 = row2[j0], p7 = row2[j], p8 = row2[j2]; - - op(p1, p2); op(p4, p5); op(p7, p8); op(p0, p1); - op(p3, p4); op(p6, p7); op(p1, p2); op(p4, p5); - op(p7, p8); op(p0, p3); op(p5, p8); op(p4, p7); - op(p3, p6); op(p1, p4); op(p2, p5); op(p4, p7); - op(p4, p2); op(p6, p4); op(p4, p2); - dst[j] = (T)p4; - } - - if( limit == size.width ) - break; - - for( ; j <= size.width - VecOp::SIZE - cn; j += VecOp::SIZE ) - { - VT p0 = vop.load(row0+j-cn), p1 = vop.load(row0+j), p2 = vop.load(row0+j+cn); - VT p3 = vop.load(row1+j-cn), p4 = vop.load(row1+j), p5 = vop.load(row1+j+cn); - VT p6 = vop.load(row2+j-cn), p7 = vop.load(row2+j), p8 = vop.load(row2+j+cn); - - vop(p1, p2); vop(p4, p5); vop(p7, p8); vop(p0, p1); - vop(p3, p4); vop(p6, p7); vop(p1, p2); vop(p4, p5); - vop(p7, p8); vop(p0, p3); vop(p5, p8); vop(p4, p7); - vop(p3, p6); vop(p1, p4); vop(p2, p5); vop(p4, p7); - vop(p4, p2); vop(p6, p4); vop(p4, p2); - vop.store(dst+j, p4); - } - - limit = size.width; - } - } - } - else if( m == 5 ) - { - if( size.width == 1 || size.height == 1 ) - { - int len = size.width + size.height - 1; - int sdelta = size.height == 1 ? cn : sstep; - int sdelta0 = size.height == 1 ? 0 : sstep - cn; - int ddelta = size.height == 1 ? cn : dstep; - - for( i = 0; i < len; i++, src += sdelta0, dst += ddelta ) - for( j = 0; j < cn; j++, src++ ) - { - int i1 = i > 0 ? -sdelta : 0; - int i0 = i > 1 ? -sdelta*2 : i1; - int i3 = i < len-1 ? sdelta : 0; - int i4 = i < len-2 ? sdelta*2 : i3; - WT p0 = src[i0], p1 = src[i1], p2 = src[0], p3 = src[i3], p4 = src[i4]; - - op(p0, p1); op(p3, p4); op(p2, p3); op(p3, p4); op(p0, p2); - op(p2, p4); op(p1, p3); op(p1, p2); - dst[j] = (T)p2; - } - return; - } - - size.width *= cn; - for( i = 0; i < size.height; i++, dst += dstep ) - { - const T* row[5]; - row[0] = src + std::max(i - 2, 0)*sstep; - row[1] = src + std::max(i - 1, 0)*sstep; - row[2] = src + i*sstep; - row[3] = src + std::min(i + 1, size.height-1)*sstep; - row[4] = src + std::min(i + 2, size.height-1)*sstep; - int limit = useSIMD ? cn*2 : size.width; - - for(j = 0;; ) - { - for( ; j < limit; j++ ) - { - WT p[25]; - int j1 = j >= cn ? j - cn : j; - int j0 = j >= cn*2 ? j - cn*2 : j1; - int j3 = j < size.width - cn ? j + cn : j; - int j4 = j < size.width - cn*2 ? j + cn*2 : j3; - for( k = 0; k < 5; k++ ) - { - const T* rowk = row[k]; - p[k*5] = rowk[j0]; p[k*5+1] = rowk[j1]; - p[k*5+2] = rowk[j]; p[k*5+3] = rowk[j3]; - p[k*5+4] = rowk[j4]; - } - - op(p[1], p[2]); op(p[0], p[1]); op(p[1], p[2]); op(p[4], p[5]); op(p[3], p[4]); - op(p[4], p[5]); op(p[0], p[3]); op(p[2], p[5]); op(p[2], p[3]); op(p[1], p[4]); - op(p[1], p[2]); op(p[3], p[4]); op(p[7], p[8]); op(p[6], p[7]); op(p[7], p[8]); - op(p[10], p[11]); op(p[9], p[10]); op(p[10], p[11]); op(p[6], p[9]); op(p[8], p[11]); - op(p[8], p[9]); op(p[7], p[10]); op(p[7], p[8]); op(p[9], p[10]); op(p[0], p[6]); - op(p[4], p[10]); op(p[4], p[6]); op(p[2], p[8]); op(p[2], p[4]); op(p[6], p[8]); - op(p[1], p[7]); op(p[5], p[11]); op(p[5], p[7]); op(p[3], p[9]); op(p[3], p[5]); - op(p[7], p[9]); op(p[1], p[2]); op(p[3], p[4]); op(p[5], p[6]); op(p[7], p[8]); - op(p[9], p[10]); op(p[13], p[14]); op(p[12], p[13]); op(p[13], p[14]); op(p[16], p[17]); - op(p[15], p[16]); op(p[16], p[17]); op(p[12], p[15]); op(p[14], p[17]); op(p[14], p[15]); - op(p[13], p[16]); op(p[13], p[14]); op(p[15], p[16]); op(p[19], p[20]); op(p[18], p[19]); - op(p[19], p[20]); op(p[21], p[22]); op(p[23], p[24]); op(p[21], p[23]); op(p[22], p[24]); - op(p[22], p[23]); op(p[18], p[21]); op(p[20], p[23]); op(p[20], p[21]); op(p[19], p[22]); - op(p[22], p[24]); op(p[19], p[20]); op(p[21], p[22]); op(p[23], p[24]); op(p[12], p[18]); - op(p[16], p[22]); op(p[16], p[18]); op(p[14], p[20]); op(p[20], p[24]); op(p[14], p[16]); - op(p[18], p[20]); op(p[22], p[24]); op(p[13], p[19]); op(p[17], p[23]); op(p[17], p[19]); - op(p[15], p[21]); op(p[15], p[17]); op(p[19], p[21]); op(p[13], p[14]); op(p[15], p[16]); - op(p[17], p[18]); op(p[19], p[20]); op(p[21], p[22]); op(p[23], p[24]); op(p[0], p[12]); - op(p[8], p[20]); op(p[8], p[12]); op(p[4], p[16]); op(p[16], p[24]); op(p[12], p[16]); - op(p[2], p[14]); op(p[10], p[22]); op(p[10], p[14]); op(p[6], p[18]); op(p[6], p[10]); - op(p[10], p[12]); op(p[1], p[13]); op(p[9], p[21]); op(p[9], p[13]); op(p[5], p[17]); - op(p[13], p[17]); op(p[3], p[15]); op(p[11], p[23]); op(p[11], p[15]); op(p[7], p[19]); - op(p[7], p[11]); op(p[11], p[13]); op(p[11], p[12]); - dst[j] = (T)p[12]; - } - - if( limit == size.width ) - break; - - for( ; j <= size.width - VecOp::SIZE - cn*2; j += VecOp::SIZE ) - { - VT p[25]; - for( k = 0; k < 5; k++ ) - { - const T* rowk = row[k]; - p[k*5] = vop.load(rowk+j-cn*2); p[k*5+1] = vop.load(rowk+j-cn); - p[k*5+2] = vop.load(rowk+j); p[k*5+3] = vop.load(rowk+j+cn); - p[k*5+4] = vop.load(rowk+j+cn*2); - } - - vop(p[1], p[2]); vop(p[0], p[1]); vop(p[1], p[2]); vop(p[4], p[5]); vop(p[3], p[4]); - vop(p[4], p[5]); vop(p[0], p[3]); vop(p[2], p[5]); vop(p[2], p[3]); vop(p[1], p[4]); - vop(p[1], p[2]); vop(p[3], p[4]); vop(p[7], p[8]); vop(p[6], p[7]); vop(p[7], p[8]); - vop(p[10], p[11]); vop(p[9], p[10]); vop(p[10], p[11]); vop(p[6], p[9]); vop(p[8], p[11]); - vop(p[8], p[9]); vop(p[7], p[10]); vop(p[7], p[8]); vop(p[9], p[10]); vop(p[0], p[6]); - vop(p[4], p[10]); vop(p[4], p[6]); vop(p[2], p[8]); vop(p[2], p[4]); vop(p[6], p[8]); - vop(p[1], p[7]); vop(p[5], p[11]); vop(p[5], p[7]); vop(p[3], p[9]); vop(p[3], p[5]); - vop(p[7], p[9]); vop(p[1], p[2]); vop(p[3], p[4]); vop(p[5], p[6]); vop(p[7], p[8]); - vop(p[9], p[10]); vop(p[13], p[14]); vop(p[12], p[13]); vop(p[13], p[14]); vop(p[16], p[17]); - vop(p[15], p[16]); vop(p[16], p[17]); vop(p[12], p[15]); vop(p[14], p[17]); vop(p[14], p[15]); - vop(p[13], p[16]); vop(p[13], p[14]); vop(p[15], p[16]); vop(p[19], p[20]); vop(p[18], p[19]); - vop(p[19], p[20]); vop(p[21], p[22]); vop(p[23], p[24]); vop(p[21], p[23]); vop(p[22], p[24]); - vop(p[22], p[23]); vop(p[18], p[21]); vop(p[20], p[23]); vop(p[20], p[21]); vop(p[19], p[22]); - vop(p[22], p[24]); vop(p[19], p[20]); vop(p[21], p[22]); vop(p[23], p[24]); vop(p[12], p[18]); - vop(p[16], p[22]); vop(p[16], p[18]); vop(p[14], p[20]); vop(p[20], p[24]); vop(p[14], p[16]); - vop(p[18], p[20]); vop(p[22], p[24]); vop(p[13], p[19]); vop(p[17], p[23]); vop(p[17], p[19]); - vop(p[15], p[21]); vop(p[15], p[17]); vop(p[19], p[21]); vop(p[13], p[14]); vop(p[15], p[16]); - vop(p[17], p[18]); vop(p[19], p[20]); vop(p[21], p[22]); vop(p[23], p[24]); vop(p[0], p[12]); - vop(p[8], p[20]); vop(p[8], p[12]); vop(p[4], p[16]); vop(p[16], p[24]); vop(p[12], p[16]); - vop(p[2], p[14]); vop(p[10], p[22]); vop(p[10], p[14]); vop(p[6], p[18]); vop(p[6], p[10]); - vop(p[10], p[12]); vop(p[1], p[13]); vop(p[9], p[21]); vop(p[9], p[13]); vop(p[5], p[17]); - vop(p[13], p[17]); vop(p[3], p[15]); vop(p[11], p[23]); vop(p[11], p[15]); vop(p[7], p[19]); - vop(p[7], p[11]); vop(p[11], p[13]); vop(p[11], p[12]); - vop.store(dst+j, p[12]); - } - - limit = size.width; - } - } - } -} - -} - -void cv::medianBlur( InputArray _src0, OutputArray _dst, int ksize ) -{ - Mat src0 = _src0.getMat(); - _dst.create( src0.size(), src0.type() ); - Mat dst = _dst.getMat(); - - if( ksize <= 1 ) - { - src0.copyTo(dst); - return; - } - - CV_Assert( ksize % 2 == 1 ); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::medianBlur(src0, dst, ksize)) - return; -#endif - - bool useSortNet = ksize == 3 || (ksize == 5 -#if !CV_SSE2 - && src0.depth() > CV_8U -#endif - ); - - Mat src; - if( useSortNet ) - { - if( dst.data != src0.data ) - src = src0; - else - src0.copyTo(src); - - if( src.depth() == CV_8U ) - medianBlur_SortNet( src, dst, ksize ); - else if( src.depth() == CV_16U ) - medianBlur_SortNet( src, dst, ksize ); - else if( src.depth() == CV_16S ) - medianBlur_SortNet( src, dst, ksize ); - else if( src.depth() == CV_32F ) - medianBlur_SortNet( src, dst, ksize ); - else - CV_Error(CV_StsUnsupportedFormat, ""); - - return; - } - else - { - cv::copyMakeBorder( src0, src, 0, 0, ksize/2, ksize/2, BORDER_REPLICATE ); - - int cn = src0.channels(); - CV_Assert( src.depth() == CV_8U && (cn == 1 || cn == 3 || cn == 4) ); - - double img_size_mp = (double)(src0.total())/(1 << 20); - if( ksize <= 3 + (img_size_mp < 1 ? 12 : img_size_mp < 4 ? 6 : 2)*(MEDIAN_HAVE_SIMD && checkHardwareSupport(CV_CPU_SSE2) ? 1 : 3)) - medianBlur_8u_Om( src, dst, ksize ); - else - medianBlur_8u_O1( src, dst, ksize ); - } -} - -/****************************************************************************************\ - Bilateral Filtering -\****************************************************************************************/ - -namespace cv -{ - -class BilateralFilter_8u_Invoker : - public ParallelLoopBody -{ -public: - BilateralFilter_8u_Invoker(Mat& _dest, const Mat& _temp, int _radius, int _maxk, - int* _space_ofs, float *_space_weight, float *_color_weight) : - temp(&_temp), dest(&_dest), radius(_radius), - maxk(_maxk), space_ofs(_space_ofs), space_weight(_space_weight), color_weight(_color_weight) - { - } - - virtual void operator() (const Range& range) const - { - int i, j, cn = dest->channels(), k; - Size size = dest->size(); - #if CV_SSE3 - int CV_DECL_ALIGNED(16) buf[4]; - float CV_DECL_ALIGNED(16) bufSum[4]; - static const int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 }; - bool haveSSE3 = checkHardwareSupport(CV_CPU_SSE3); - #endif - - for( i = range.start; i < range.end; i++ ) - { - const uchar* sptr = temp->ptr(i+radius) + radius*cn; - uchar* dptr = dest->ptr(i); - - if( cn == 1 ) - { - for( j = 0; j < size.width; j++ ) - { - float sum = 0, wsum = 0; - int val0 = sptr[j]; - k = 0; - #if CV_SSE3 - if( haveSSE3 ) - { - __m128 _val0 = _mm_set1_ps(static_cast(val0)); - const __m128 _signMask = _mm_load_ps((const float*)bufSignMask); - - for( ; k <= maxk - 4; k += 4 ) - { - __m128 _valF = _mm_set_ps(sptr[j + space_ofs[k+3]], sptr[j + space_ofs[k+2]], - sptr[j + space_ofs[k+1]], sptr[j + space_ofs[k]]); - - __m128 _val = _mm_andnot_ps(_signMask, _mm_sub_ps(_valF, _val0)); - _mm_store_si128((__m128i*)buf, _mm_cvtps_epi32(_val)); - - __m128 _cw = _mm_set_ps(color_weight[buf[3]],color_weight[buf[2]], - color_weight[buf[1]],color_weight[buf[0]]); - __m128 _sw = _mm_loadu_ps(space_weight+k); - __m128 _w = _mm_mul_ps(_cw, _sw); - _cw = _mm_mul_ps(_w, _valF); - - _sw = _mm_hadd_ps(_w, _cw); - _sw = _mm_hadd_ps(_sw, _sw); - _mm_storel_pi((__m64*)bufSum, _sw); - - sum += bufSum[1]; - wsum += bufSum[0]; - } - } - #endif - for( ; k < maxk; k++ ) - { - int val = sptr[j + space_ofs[k]]; - float w = space_weight[k]*color_weight[std::abs(val - val0)]; - sum += val*w; - wsum += w; - } - // overflow is not possible here => there is no need to use CV_CAST_8U - dptr[j] = (uchar)cvRound(sum/wsum); - } - } - else - { - assert( cn == 3 ); - for( j = 0; j < size.width*3; j += 3 ) - { - float sum_b = 0, sum_g = 0, sum_r = 0, wsum = 0; - int b0 = sptr[j], g0 = sptr[j+1], r0 = sptr[j+2]; - k = 0; - #if CV_SSE3 - if( haveSSE3 ) - { - const __m128 _b0 = _mm_set1_ps(static_cast(b0)); - const __m128 _g0 = _mm_set1_ps(static_cast(g0)); - const __m128 _r0 = _mm_set1_ps(static_cast(r0)); - const __m128 _signMask = _mm_load_ps((const float*)bufSignMask); - - for( ; k <= maxk - 4; k += 4 ) - { - const uchar* sptr_k = sptr + j + space_ofs[k]; - const uchar* sptr_k1 = sptr + j + space_ofs[k+1]; - const uchar* sptr_k2 = sptr + j + space_ofs[k+2]; - const uchar* sptr_k3 = sptr + j + space_ofs[k+3]; - - __m128 _b = _mm_set_ps(sptr_k3[0],sptr_k2[0],sptr_k1[0],sptr_k[0]); - __m128 _g = _mm_set_ps(sptr_k3[1],sptr_k2[1],sptr_k1[1],sptr_k[1]); - __m128 _r = _mm_set_ps(sptr_k3[2],sptr_k2[2],sptr_k1[2],sptr_k[2]); - - __m128 bt = _mm_andnot_ps(_signMask, _mm_sub_ps(_b,_b0)); - __m128 gt = _mm_andnot_ps(_signMask, _mm_sub_ps(_g,_g0)); - __m128 rt = _mm_andnot_ps(_signMask, _mm_sub_ps(_r,_r0)); - - bt =_mm_add_ps(rt, _mm_add_ps(bt, gt)); - _mm_store_si128((__m128i*)buf, _mm_cvtps_epi32(bt)); - - __m128 _w = _mm_set_ps(color_weight[buf[3]],color_weight[buf[2]], - color_weight[buf[1]],color_weight[buf[0]]); - __m128 _sw = _mm_loadu_ps(space_weight+k); - - _w = _mm_mul_ps(_w,_sw); - _b = _mm_mul_ps(_b, _w); - _g = _mm_mul_ps(_g, _w); - _r = _mm_mul_ps(_r, _w); - - _w = _mm_hadd_ps(_w, _b); - _g = _mm_hadd_ps(_g, _r); - - _w = _mm_hadd_ps(_w, _g); - _mm_store_ps(bufSum, _w); - - wsum += bufSum[0]; - sum_b += bufSum[1]; - sum_g += bufSum[2]; - sum_r += bufSum[3]; - } - } - #endif - - for( ; k < maxk; k++ ) - { - const uchar* sptr_k = sptr + j + space_ofs[k]; - int b = sptr_k[0], g = sptr_k[1], r = sptr_k[2]; - float w = space_weight[k]*color_weight[std::abs(b - b0) + - std::abs(g - g0) + std::abs(r - r0)]; - sum_b += b*w; sum_g += g*w; sum_r += r*w; - wsum += w; - } - wsum = 1.f/wsum; - b0 = cvRound(sum_b*wsum); - g0 = cvRound(sum_g*wsum); - r0 = cvRound(sum_r*wsum); - dptr[j] = (uchar)b0; dptr[j+1] = (uchar)g0; dptr[j+2] = (uchar)r0; - } - } - } - } - -private: - const Mat *temp; - Mat *dest; - int radius, maxk, *space_ofs; - float *space_weight, *color_weight; -}; - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -class IPPBilateralFilter_8u_Invoker : - public ParallelLoopBody -{ -public: - IPPBilateralFilter_8u_Invoker(Mat &_src, Mat &_dst, double _sigma_color, double _sigma_space, int _radius, bool *_ok) : - ParallelLoopBody(), src(_src), dst(_dst), sigma_color(_sigma_color), sigma_space(_sigma_space), radius(_radius), ok(_ok) - { - *ok = true; - } - - virtual void operator() (const Range& range) const - { - int d = radius * 2 + 1; - IppiSize kernel = {d, d}; - IppiSize roi={dst.cols, range.end - range.start}; - int bufsize=0; - ippiFilterBilateralGetBufSize_8u_C1R( ippiFilterBilateralGauss, roi, kernel, &bufsize); - AutoBuffer buf(bufsize); - IppiFilterBilateralSpec *pSpec = (IppiFilterBilateralSpec *)alignPtr(&buf[0], 32); - ippiFilterBilateralInit_8u_C1R( ippiFilterBilateralGauss, kernel, (Ipp32f)sigma_color, (Ipp32f)sigma_space, 1, pSpec ); - if( ippiFilterBilateral_8u_C1R( src.ptr(range.start) + radius * ((int)src.step[0] + 1), (int)src.step[0], dst.ptr(range.start), (int)dst.step[0], roi, kernel, pSpec ) < 0) - *ok = false; - } -private: - Mat &src; - Mat &dst; - double sigma_color; - double sigma_space; - int radius; - bool *ok; - const IPPBilateralFilter_8u_Invoker& operator= (const IPPBilateralFilter_8u_Invoker&); -}; -#endif - -static void -bilateralFilter_8u( const Mat& src, Mat& dst, int d, - double sigma_color, double sigma_space, - int borderType ) -{ - - int cn = src.channels(); - int i, j, maxk, radius; - Size size = src.size(); - - CV_Assert( (src.type() == CV_8UC1 || src.type() == CV_8UC3) && - src.type() == dst.type() && src.size() == dst.size() && - src.data != dst.data ); - - if( sigma_color <= 0 ) - sigma_color = 1; - if( sigma_space <= 0 ) - sigma_space = 1; - - double gauss_color_coeff = -0.5/(sigma_color*sigma_color); - double gauss_space_coeff = -0.5/(sigma_space*sigma_space); - - if( d <= 0 ) - radius = cvRound(sigma_space*1.5); - else - radius = d/2; - radius = MAX(radius, 1); - d = radius*2 + 1; - - Mat temp; - copyMakeBorder( src, temp, radius, radius, radius, radius, borderType ); - -#if defined HAVE_IPP && (IPP_VERSION_MAJOR >= 7) - if( cn == 1 ) - { - bool ok; - IPPBilateralFilter_8u_Invoker body(temp, dst, sigma_color * sigma_color, sigma_space * sigma_space, radius, &ok ); - parallel_for_(Range(0, dst.rows), body, dst.total()/(double)(1<<16)); - if( ok ) return; - } -#endif - - vector _color_weight(cn*256); - vector _space_weight(d*d); - vector _space_ofs(d*d); - float* color_weight = &_color_weight[0]; - float* space_weight = &_space_weight[0]; - int* space_ofs = &_space_ofs[0]; - - // initialize color-related bilateral filter coefficients - - for( i = 0; i < 256*cn; i++ ) - color_weight[i] = (float)std::exp(i*i*gauss_color_coeff); - - // initialize space-related bilateral filter coefficients - for( i = -radius, maxk = 0; i <= radius; i++ ) - { - j = -radius; - - for( ;j <= radius; j++ ) - { - double r = std::sqrt((double)i*i + (double)j*j); - if( r > radius ) - continue; - space_weight[maxk] = (float)std::exp(r*r*gauss_space_coeff); - space_ofs[maxk++] = (int)(i*temp.step + j*cn); - } - } - - BilateralFilter_8u_Invoker body(dst, temp, radius, maxk, space_ofs, space_weight, color_weight); - parallel_for_(Range(0, size.height), body, dst.total()/(double)(1<<16)); -} - - -class BilateralFilter_32f_Invoker : - public ParallelLoopBody -{ -public: - - BilateralFilter_32f_Invoker(int _cn, int _radius, int _maxk, int *_space_ofs, - const Mat& _temp, Mat& _dest, float _scale_index, float *_space_weight, float *_expLUT) : - cn(_cn), radius(_radius), maxk(_maxk), space_ofs(_space_ofs), - temp(&_temp), dest(&_dest), scale_index(_scale_index), space_weight(_space_weight), expLUT(_expLUT) - { - } - - virtual void operator() (const Range& range) const - { - int i, j, k; - Size size = dest->size(); - #if CV_SSE3 - int CV_DECL_ALIGNED(16) idxBuf[4]; - float CV_DECL_ALIGNED(16) bufSum32[4]; - static const int CV_DECL_ALIGNED(16) bufSignMask[] = { 0x80000000, 0x80000000, 0x80000000, 0x80000000 }; - bool haveSSE3 = checkHardwareSupport(CV_CPU_SSE3); - #endif - - for( i = range.start; i < range.end; i++ ) - { - const float* sptr = temp->ptr(i+radius) + radius*cn; - float* dptr = dest->ptr(i); - - if( cn == 1 ) - { - for( j = 0; j < size.width; j++ ) - { - float sum = 0, wsum = 0; - float val0 = sptr[j]; - k = 0; - #if CV_SSE3 - if( haveSSE3 ) - { - const __m128 _val0 = _mm_set1_ps(sptr[j]); - const __m128 _scale_index = _mm_set1_ps(scale_index); - const __m128 _signMask = _mm_load_ps((const float*)bufSignMask); - - for( ; k <= maxk - 4 ; k += 4 ) - { - __m128 _sw = _mm_loadu_ps(space_weight + k); - __m128 _val = _mm_set_ps(sptr[j + space_ofs[k+3]], sptr[j + space_ofs[k+2]], - sptr[j + space_ofs[k+1]], sptr[j + space_ofs[k]]); - __m128 _alpha = _mm_mul_ps(_mm_andnot_ps( _signMask, _mm_sub_ps(_val,_val0)), _scale_index); - - __m128i _idx = _mm_cvtps_epi32(_alpha); - _mm_store_si128((__m128i*)idxBuf, _idx); - _alpha = _mm_sub_ps(_alpha, _mm_cvtepi32_ps(_idx)); - - __m128 _explut = _mm_set_ps(expLUT[idxBuf[3]], expLUT[idxBuf[2]], - expLUT[idxBuf[1]], expLUT[idxBuf[0]]); - __m128 _explut1 = _mm_set_ps(expLUT[idxBuf[3]+1], expLUT[idxBuf[2]+1], - expLUT[idxBuf[1]+1], expLUT[idxBuf[0]+1]); - - __m128 _w = _mm_mul_ps(_sw, _mm_add_ps(_explut, _mm_mul_ps(_alpha, _mm_sub_ps(_explut1, _explut)))); - _val = _mm_mul_ps(_w, _val); - - _sw = _mm_hadd_ps(_w, _val); - _sw = _mm_hadd_ps(_sw, _sw); - _mm_storel_pi((__m64*)bufSum32, _sw); - - sum += bufSum32[1]; - wsum += bufSum32[0]; - } - } - #endif - - for( ; k < maxk; k++ ) - { - float val = sptr[j + space_ofs[k]]; - float alpha = (float)(std::abs(val - val0)*scale_index); - int idx = cvFloor(alpha); - alpha -= idx; - float w = space_weight[k]*(expLUT[idx] + alpha*(expLUT[idx+1] - expLUT[idx])); - sum += val*w; - wsum += w; - } - dptr[j] = (float)(sum/wsum); - } - } - else - { - assert( cn == 3 ); - for( j = 0; j < size.width*3; j += 3 ) - { - float sum_b = 0, sum_g = 0, sum_r = 0, wsum = 0; - float b0 = sptr[j], g0 = sptr[j+1], r0 = sptr[j+2]; - k = 0; - #if CV_SSE3 - if( haveSSE3 ) - { - const __m128 _b0 = _mm_set1_ps(b0); - const __m128 _g0 = _mm_set1_ps(g0); - const __m128 _r0 = _mm_set1_ps(r0); - const __m128 _scale_index = _mm_set1_ps(scale_index); - const __m128 _signMask = _mm_load_ps((const float*)bufSignMask); - - for( ; k <= maxk-4; k += 4 ) - { - __m128 _sw = _mm_loadu_ps(space_weight + k); - - const float* sptr_k = sptr + j + space_ofs[k]; - const float* sptr_k1 = sptr + j + space_ofs[k+1]; - const float* sptr_k2 = sptr + j + space_ofs[k+2]; - const float* sptr_k3 = sptr + j + space_ofs[k+3]; - - __m128 _b = _mm_set_ps(sptr_k3[0], sptr_k2[0], sptr_k1[0], sptr_k[0]); - __m128 _g = _mm_set_ps(sptr_k3[1], sptr_k2[1], sptr_k1[1], sptr_k[1]); - __m128 _r = _mm_set_ps(sptr_k3[2], sptr_k2[2], sptr_k1[2], sptr_k[2]); - - __m128 _bt = _mm_andnot_ps(_signMask,_mm_sub_ps(_b,_b0)); - __m128 _gt = _mm_andnot_ps(_signMask,_mm_sub_ps(_g,_g0)); - __m128 _rt = _mm_andnot_ps(_signMask,_mm_sub_ps(_r,_r0)); - - __m128 _alpha = _mm_mul_ps(_scale_index, _mm_add_ps(_rt,_mm_add_ps(_bt, _gt))); - - __m128i _idx = _mm_cvtps_epi32(_alpha); - _mm_store_si128((__m128i*)idxBuf, _idx); - _alpha = _mm_sub_ps(_alpha, _mm_cvtepi32_ps(_idx)); - - __m128 _explut = _mm_set_ps(expLUT[idxBuf[3]], expLUT[idxBuf[2]], expLUT[idxBuf[1]], expLUT[idxBuf[0]]); - __m128 _explut1 = _mm_set_ps(expLUT[idxBuf[3]+1], expLUT[idxBuf[2]+1], expLUT[idxBuf[1]+1], expLUT[idxBuf[0]+1]); - - __m128 _w = _mm_mul_ps(_sw, _mm_add_ps(_explut, _mm_mul_ps(_alpha, _mm_sub_ps(_explut1, _explut)))); - - _b = _mm_mul_ps(_b, _w); - _g = _mm_mul_ps(_g, _w); - _r = _mm_mul_ps(_r, _w); - - _w = _mm_hadd_ps(_w, _b); - _g = _mm_hadd_ps(_g, _r); - - _w = _mm_hadd_ps(_w, _g); - _mm_store_ps(bufSum32, _w); - - wsum += bufSum32[0]; - sum_b += bufSum32[1]; - sum_g += bufSum32[2]; - sum_r += bufSum32[3]; - } - - } - #endif - - for(; k < maxk; k++ ) - { - const float* sptr_k = sptr + j + space_ofs[k]; - float b = sptr_k[0], g = sptr_k[1], r = sptr_k[2]; - float alpha = (float)((std::abs(b - b0) + - std::abs(g - g0) + std::abs(r - r0))*scale_index); - int idx = cvFloor(alpha); - alpha -= idx; - float w = space_weight[k]*(expLUT[idx] + alpha*(expLUT[idx+1] - expLUT[idx])); - sum_b += b*w; sum_g += g*w; sum_r += r*w; - wsum += w; - } - wsum = 1.f/wsum; - b0 = sum_b*wsum; - g0 = sum_g*wsum; - r0 = sum_r*wsum; - dptr[j] = b0; dptr[j+1] = g0; dptr[j+2] = r0; - } - } - } - } - -private: - int cn, radius, maxk, *space_ofs; - const Mat* temp; - Mat *dest; - float scale_index, *space_weight, *expLUT; -}; - - -static void -bilateralFilter_32f( const Mat& src, Mat& dst, int d, - double sigma_color, double sigma_space, - int borderType ) -{ - int cn = src.channels(); - int i, j, maxk, radius; - double minValSrc=-1, maxValSrc=1; - const int kExpNumBinsPerChannel = 1 << 12; - int kExpNumBins = 0; - float lastExpVal = 1.f; - float len, scale_index; - Size size = src.size(); - - CV_Assert( (src.type() == CV_32FC1 || src.type() == CV_32FC3) && - src.type() == dst.type() && src.size() == dst.size() && - src.data != dst.data ); - - if( sigma_color <= 0 ) - sigma_color = 1; - if( sigma_space <= 0 ) - sigma_space = 1; - - double gauss_color_coeff = -0.5/(sigma_color*sigma_color); - double gauss_space_coeff = -0.5/(sigma_space*sigma_space); - - if( d <= 0 ) - radius = cvRound(sigma_space*1.5); - else - radius = d/2; - radius = MAX(radius, 1); - d = radius*2 + 1; - // compute the min/max range for the input image (even if multichannel) - - minMaxLoc( src.reshape(1), &minValSrc, &maxValSrc ); - if(std::abs(minValSrc - maxValSrc) < FLT_EPSILON) - { - src.copyTo(dst); - return; - } - - // temporary copy of the image with borders for easy processing - Mat temp; - copyMakeBorder( src, temp, radius, radius, radius, radius, borderType ); - const double insteadNaNValue = -5. * sigma_color; - patchNaNs( temp, insteadNaNValue ); // this replacement of NaNs makes the assumption that depth values are nonnegative - // TODO: make insteadNaNValue avalible in the outside function interface to control the cases breaking the assumption - // allocate lookup tables - vector _space_weight(d*d); - vector _space_ofs(d*d); - float* space_weight = &_space_weight[0]; - int* space_ofs = &_space_ofs[0]; - - // assign a length which is slightly more than needed - len = (float)(maxValSrc - minValSrc) * cn; - kExpNumBins = kExpNumBinsPerChannel * cn; - vector _expLUT(kExpNumBins+2); - float* expLUT = &_expLUT[0]; - - scale_index = kExpNumBins/len; - - // initialize the exp LUT - for( i = 0; i < kExpNumBins+2; i++ ) - { - if( lastExpVal > 0.f ) - { - double val = i / scale_index; - expLUT[i] = (float)std::exp(val * val * gauss_color_coeff); - lastExpVal = expLUT[i]; - } - else - expLUT[i] = 0.f; - } - - // initialize space-related bilateral filter coefficients - for( i = -radius, maxk = 0; i <= radius; i++ ) - for( j = -radius; j <= radius; j++ ) - { - double r = std::sqrt((double)i*i + (double)j*j); - if( r > radius ) - continue; - space_weight[maxk] = (float)std::exp(r*r*gauss_space_coeff); - space_ofs[maxk++] = (int)(i*(temp.step/sizeof(float)) + j*cn); - } - - // parallel_for usage - - BilateralFilter_32f_Invoker body(cn, radius, maxk, space_ofs, temp, dst, scale_index, space_weight, expLUT); - parallel_for_(Range(0, size.height), body, dst.total()/(double)(1<<16)); -} - -} - -void cv::bilateralFilter( InputArray _src, OutputArray _dst, int d, - double sigmaColor, double sigmaSpace, - int borderType ) -{ - Mat src = _src.getMat(); - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if( src.depth() == CV_8U ) - bilateralFilter_8u( src, dst, d, sigmaColor, sigmaSpace, borderType ); - else if( src.depth() == CV_32F ) - bilateralFilter_32f( src, dst, d, sigmaColor, sigmaSpace, borderType ); - else - CV_Error( CV_StsUnsupportedFormat, - "Bilateral filtering is only implemented for 8u and 32f images" ); -} - - -/****************************************************************************************\ - Adaptive Bilateral Filtering -\****************************************************************************************/ - -namespace cv -{ -#ifndef ABF_CALCVAR -#define ABF_CALCVAR 1 -#endif - -#ifndef ABF_FIXED_WEIGHT -#define ABF_FIXED_WEIGHT 0 -#endif - -#ifndef ABF_GAUSSIAN -#define ABF_GAUSSIAN 1 -#endif - -class adaptiveBilateralFilter_8u_Invoker : - public ParallelLoopBody -{ -public: - adaptiveBilateralFilter_8u_Invoker(Mat& _dest, const Mat& _temp, Size _ksize, double _sigma_space, double _maxSigmaColor, Point _anchor) : - temp(&_temp), dest(&_dest), ksize(_ksize), sigma_space(_sigma_space), maxSigma_Color(_maxSigmaColor), anchor(_anchor) - { - if( sigma_space <= 0 ) - sigma_space = 1; - CV_Assert((ksize.width & 1) && (ksize.height & 1)); - space_weight.resize(ksize.width * ksize.height); - double sigma2 = sigma_space * sigma_space; - int idx = 0; - int w = ksize.width / 2; - int h = ksize.height / 2; - for(int y=-h; y<=h; y++) - for(int x=-w; x<=w; x++) - { -#if ABF_GAUSSIAN - space_weight[idx++] = (float)exp ( -0.5*(x * x + y * y)/sigma2); -#else - space_weight[idx++] = (float)(sigma2 / (sigma2 + x * x + y * y)); -#endif - } - } - virtual void operator()(const Range& range) const - { - int cn = dest->channels(); - int anX = anchor.x; - - const uchar *tptr; - - for(int i = range.start;i < range.end; i++) - { - int startY = i; - if(cn == 1) - { - float var; - int currVal; - int sumVal = 0; - int sumValSqr = 0; - int currValCenter; - int currWRTCenter; - float weight; - float totalWeight = 0.; - float tmpSum = 0.; - - for(int j = 0;j < dest->cols *cn; j+=cn) - { - sumVal = 0; - sumValSqr= 0; - totalWeight = 0.; - tmpSum = 0.; - - // Top row: don't sum the very last element - int startLMJ = 0; - int endLMJ = ksize.width - 1; - int howManyAll = (anX *2 +1)*(ksize.width ); -#if ABF_CALCVAR - for(int x = startLMJ; x< endLMJ; x++) - { - tptr = temp->ptr(startY + x) +j; - for(int y=-anX; y<=anX; y++) - { - currVal = tptr[cn*(y+anX)]; - sumVal += currVal; - sumValSqr += (currVal *currVal); - } - } - var = ( (sumValSqr * howManyAll)- sumVal * sumVal ) / ( (float)(howManyAll*howManyAll)); - - if(var < 0.01) - var = 0.01f; - else if(var > (float)(maxSigma_Color*maxSigma_Color) ) - var = (float)(maxSigma_Color*maxSigma_Color) ; - -#else - var = maxSigmaColor*maxSigmaColor; -#endif - startLMJ = 0; - endLMJ = ksize.width; - tptr = temp->ptr(startY + (startLMJ+ endLMJ)/2); - currValCenter =tptr[j+cn*anX]; - for(int x = startLMJ; x< endLMJ; x++) - { - tptr = temp->ptr(startY + x) +j; - for(int y=-anX; y<=anX; y++) - { -#if ABF_FIXED_WEIGHT - weight = 1.0; -#else - currVal = tptr[cn*(y+anX)]; - currWRTCenter = currVal - currValCenter; - -#if ABF_GAUSSIAN - weight = exp ( -0.5f * currWRTCenter * currWRTCenter/var ) * space_weight[x*ksize.width+y+anX]; -#else - weight = var / ( var + (currWRTCenter * currWRTCenter) ) * space_weight[x*ksize.width+y+anX]; -#endif - -#endif - tmpSum += ((float)tptr[cn*(y+anX)] * weight); - totalWeight += weight; - } - } - tmpSum /= totalWeight; - - dest->at(startY ,j)= static_cast(tmpSum); - } - } - else - { - assert(cn == 3); - float var_b, var_g, var_r; - int currVal_b, currVal_g, currVal_r; - int sumVal_b= 0, sumVal_g= 0, sumVal_r= 0; - int sumValSqr_b= 0, sumValSqr_g= 0, sumValSqr_r= 0; - int currValCenter_b= 0, currValCenter_g= 0, currValCenter_r= 0; - int currWRTCenter_b, currWRTCenter_g, currWRTCenter_r; - float weight_b, weight_g, weight_r; - float totalWeight_b= 0., totalWeight_g= 0., totalWeight_r= 0.; - float tmpSum_b = 0., tmpSum_g= 0., tmpSum_r = 0.; - - for(int j = 0;j < dest->cols *cn; j+=cn) - { - sumVal_b= 0, sumVal_g= 0, sumVal_r= 0; - sumValSqr_b= 0, sumValSqr_g= 0, sumValSqr_r= 0; - totalWeight_b= 0., totalWeight_g= 0., totalWeight_r= 0.; - tmpSum_b = 0., tmpSum_g= 0., tmpSum_r = 0.; - - // Top row: don't sum the very last element - int startLMJ = 0; - int endLMJ = ksize.width - 1; - int howManyAll = (anX *2 +1)*(ksize.width); -#if ABF_CALCVAR - float max_var = (float)( maxSigma_Color*maxSigma_Color); - for(int x = startLMJ; x< endLMJ; x++) - { - tptr = temp->ptr(startY + x) +j; - for(int y=-anX; y<=anX; y++) - { - currVal_b = tptr[cn*(y+anX)], currVal_g = tptr[cn*(y+anX)+1], currVal_r =tptr[cn*(y+anX)+2]; - sumVal_b += currVal_b; - sumVal_g += currVal_g; - sumVal_r += currVal_r; - sumValSqr_b += (currVal_b *currVal_b); - sumValSqr_g += (currVal_g *currVal_g); - sumValSqr_r += (currVal_r *currVal_r); - } - } - var_b = ( (sumValSqr_b * howManyAll)- sumVal_b * sumVal_b ) / ( (float)(howManyAll*howManyAll)); - var_g = ( (sumValSqr_g * howManyAll)- sumVal_g * sumVal_g ) / ( (float)(howManyAll*howManyAll)); - var_r = ( (sumValSqr_r * howManyAll)- sumVal_r * sumVal_r ) / ( (float)(howManyAll*howManyAll)); - - if(var_b < 0.01) - var_b = 0.01f; - else if(var_b > max_var ) - var_b = (float)(max_var) ; - - if(var_g < 0.01) - var_g = 0.01f; - else if(var_g > max_var ) - var_g = (float)(max_var) ; - - if(var_r < 0.01) - var_r = 0.01f; - else if(var_r > max_var ) - var_r = (float)(max_var) ; - -#else - var_b = maxSigma_Color*maxSigma_Color; var_g = maxSigma_Color*maxSigma_Color; var_r = maxSigma_Color*maxSigma_Color; -#endif - startLMJ = 0; - endLMJ = ksize.width; - tptr = temp->ptr(startY + (startLMJ+ endLMJ)/2) + j; - currValCenter_b =tptr[cn*anX], currValCenter_g =tptr[cn*anX+1], currValCenter_r =tptr[cn*anX+2]; - for(int x = startLMJ; x< endLMJ; x++) - { - tptr = temp->ptr(startY + x) +j; - for(int y=-anX; y<=anX; y++) - { -#if ABF_FIXED_WEIGHT - weight_b = 1.0; - weight_g = 1.0; - weight_r = 1.0; -#else - currVal_b = tptr[cn*(y+anX)];currVal_g=tptr[cn*(y+anX)+1];currVal_r=tptr[cn*(y+anX)+2]; - currWRTCenter_b = currVal_b - currValCenter_b; - currWRTCenter_g = currVal_g - currValCenter_g; - currWRTCenter_r = currVal_r - currValCenter_r; - - float cur_spw = space_weight[x*ksize.width+y+anX]; - -#if ABF_GAUSSIAN - weight_b = exp( -0.5f * currWRTCenter_b * currWRTCenter_b/ var_b ) * cur_spw; - weight_g = exp( -0.5f * currWRTCenter_g * currWRTCenter_g/ var_g ) * cur_spw; - weight_r = exp( -0.5f * currWRTCenter_r * currWRTCenter_r/ var_r ) * cur_spw; -#else - weight_b = var_b / ( var_b + (currWRTCenter_b * currWRTCenter_b) ) * cur_spw; - weight_g = var_g / ( var_g + (currWRTCenter_g * currWRTCenter_g) ) * cur_spw; - weight_r = var_r / ( var_r + (currWRTCenter_r * currWRTCenter_r) ) * cur_spw; -#endif -#endif - tmpSum_b += ((float)tptr[cn*(y+anX)] * weight_b); - tmpSum_g += ((float)tptr[cn*(y+anX)+1] * weight_g); - tmpSum_r += ((float)tptr[cn*(y+anX)+2] * weight_r); - totalWeight_b += weight_b, totalWeight_g += weight_g, totalWeight_r += weight_r; - } - } - tmpSum_b /= totalWeight_b; - tmpSum_g /= totalWeight_g; - tmpSum_r /= totalWeight_r; - - dest->at(startY,j )= static_cast(tmpSum_b); - dest->at(startY,j+1)= static_cast(tmpSum_g); - dest->at(startY,j+2)= static_cast(tmpSum_r); - } - } - } - } -private: - const Mat *temp; - Mat *dest; - Size ksize; - double sigma_space; - double maxSigma_Color; - Point anchor; - vector space_weight; -}; -static void adaptiveBilateralFilter_8u( const Mat& src, Mat& dst, Size ksize, double sigmaSpace, double maxSigmaColor, Point anchor, int borderType ) -{ - Size size = src.size(); - - CV_Assert( (src.type() == CV_8UC1 || src.type() == CV_8UC3) && - src.type() == dst.type() && src.size() == dst.size() && - src.data != dst.data ); - Mat temp; - copyMakeBorder(src, temp, anchor.x, anchor.y, anchor.x, anchor.y, borderType); - - adaptiveBilateralFilter_8u_Invoker body(dst, temp, ksize, sigmaSpace, maxSigmaColor, anchor); - parallel_for_(Range(0, size.height), body, dst.total()/(double)(1<<16)); -} -} -void cv::adaptiveBilateralFilter( InputArray _src, OutputArray _dst, Size ksize, - double sigmaSpace, double maxSigmaColor, Point anchor, int borderType ) -{ - Mat src = _src.getMat(); - _dst.create(src.size(), src.type()); - Mat dst = _dst.getMat(); - - CV_Assert(src.type() == CV_8UC1 || src.type() == CV_8UC3); - - anchor = normalizeAnchor(anchor,ksize); - if( src.depth() == CV_8U ) - adaptiveBilateralFilter_8u( src, dst, ksize, sigmaSpace, maxSigmaColor, anchor, borderType ); - else - CV_Error( CV_StsUnsupportedFormat, - "Adaptive Bilateral filtering is only implemented for 8u images" ); -} - -////////////////////////////////////////////////////////////////////////////////////////// - -CV_IMPL void -cvSmooth( const void* srcarr, void* dstarr, int smooth_type, - int param1, int param2, double param3, double param4 ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0; - - CV_Assert( dst.size() == src.size() && - (smooth_type == CV_BLUR_NO_SCALE || dst.type() == src.type()) ); - - if( param2 <= 0 ) - param2 = param1; - - if( smooth_type == CV_BLUR || smooth_type == CV_BLUR_NO_SCALE ) - cv::boxFilter( src, dst, dst.depth(), cv::Size(param1, param2), cv::Point(-1,-1), - smooth_type == CV_BLUR, cv::BORDER_REPLICATE ); - else if( smooth_type == CV_GAUSSIAN ) - cv::GaussianBlur( src, dst, cv::Size(param1, param2), param3, param4, cv::BORDER_REPLICATE ); - else if( smooth_type == CV_MEDIAN ) - cv::medianBlur( src, dst, param1 ); - else - cv::bilateralFilter( src, dst, param1, param3, param4, cv::BORDER_REPLICATE ); - - if( dst.data != dst0.data ) - CV_Error( CV_StsUnmatchedFormats, "The destination image does not have the proper type" ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/subdivision2d.cpp b/modules/imgproc/src/subdivision2d.cpp deleted file mode 100644 index 16e8477..0000000 --- a/modules/imgproc/src/subdivision2d.cpp +++ /dev/null @@ -1,827 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ -#include "precomp.hpp" - -namespace cv -{ - -int Subdiv2D::nextEdge(int edge) const -{ - CV_DbgAssert((size_t)(edge >> 2) < qedges.size()); - return qedges[edge >> 2].next[edge & 3]; -} - -int Subdiv2D::rotateEdge(int edge, int rotate) const -{ - return (edge & ~3) + ((edge + rotate) & 3); -} - -int Subdiv2D::symEdge(int edge) const -{ - return edge ^ 2; -} - -int Subdiv2D::getEdge(int edge, int nextEdgeType) const -{ - CV_DbgAssert((size_t)(edge >> 2) < qedges.size()); - edge = qedges[edge >> 2].next[(edge + nextEdgeType) & 3]; - return (edge & ~3) + ((edge + (nextEdgeType >> 4)) & 3); -} - -int Subdiv2D::edgeOrg(int edge, CV_OUT Point2f* orgpt) const -{ - CV_DbgAssert((size_t)(edge >> 2) < qedges.size()); - int vidx = qedges[edge >> 2].pt[edge & 3]; - if( orgpt ) - { - CV_DbgAssert((size_t)vidx < vtx.size()); - *orgpt = vtx[vidx].pt; - } - return vidx; -} - -int Subdiv2D::edgeDst(int edge, CV_OUT Point2f* dstpt) const -{ - CV_DbgAssert((size_t)(edge >> 2) < qedges.size()); - int vidx = qedges[edge >> 2].pt[(edge + 2) & 3]; - if( dstpt ) - { - CV_DbgAssert((size_t)vidx < vtx.size()); - *dstpt = vtx[vidx].pt; - } - return vidx; -} - - -Point2f Subdiv2D::getVertex(int vertex, CV_OUT int* firstEdge) const -{ - CV_DbgAssert((size_t)vertex < vtx.size()); - if( firstEdge ) - *firstEdge = vtx[vertex].firstEdge; - return vtx[vertex].pt; -} - - -Subdiv2D::Subdiv2D() -{ - validGeometry = false; - freeQEdge = 0; - freePoint = 0; - recentEdge = 0; -} - -Subdiv2D::Subdiv2D(Rect rect) -{ - validGeometry = false; - freeQEdge = 0; - freePoint = 0; - recentEdge = 0; - - initDelaunay(rect); -} - - -Subdiv2D::QuadEdge::QuadEdge() -{ - next[0] = next[1] = next[2] = next[3] = 0; - pt[0] = pt[1] = pt[2] = pt[3] = 0; -} - -Subdiv2D::QuadEdge::QuadEdge(int edgeidx) -{ - CV_DbgAssert((edgeidx & 3) == 0); - next[0] = edgeidx; - next[1] = edgeidx+3; - next[2] = edgeidx+2; - next[3] = edgeidx+1; - - pt[0] = pt[1] = pt[2] = pt[3] = 0; -} - -bool Subdiv2D::QuadEdge::isfree() const -{ - return next[0] <= 0; -} - -Subdiv2D::Vertex::Vertex() -{ - firstEdge = 0; - type = -1; -} - -Subdiv2D::Vertex::Vertex(Point2f _pt, bool _isvirtual, int _firstEdge) -{ - firstEdge = _firstEdge; - type = (int)_isvirtual; - pt = _pt; -} - -bool Subdiv2D::Vertex::isvirtual() const -{ - return type > 0; -} - -bool Subdiv2D::Vertex::isfree() const -{ - return type < 0; -} - -void Subdiv2D::splice( int edgeA, int edgeB ) -{ - int& a_next = qedges[edgeA >> 2].next[edgeA & 3]; - int& b_next = qedges[edgeB >> 2].next[edgeB & 3]; - int a_rot = rotateEdge(a_next, 1); - int b_rot = rotateEdge(b_next, 1); - int& a_rot_next = qedges[a_rot >> 2].next[a_rot & 3]; - int& b_rot_next = qedges[b_rot >> 2].next[b_rot & 3]; - std::swap(a_next, b_next); - std::swap(a_rot_next, b_rot_next); -} - -void Subdiv2D::setEdgePoints(int edge, int orgPt, int dstPt) -{ - qedges[edge >> 2].pt[edge & 3] = orgPt; - qedges[edge >> 2].pt[(edge + 2) & 3] = dstPt; - vtx[orgPt].firstEdge = edge; - vtx[dstPt].firstEdge = edge ^ 2; -} - -int Subdiv2D::connectEdges( int edgeA, int edgeB ) -{ - int edge = newEdge(); - - splice(edge, getEdge(edgeA, NEXT_AROUND_LEFT)); - splice(symEdge(edge), edgeB); - - setEdgePoints(edge, edgeDst(edgeA), edgeOrg(edgeB)); - return edge; -} - -void Subdiv2D::swapEdges( int edge ) -{ - int sedge = symEdge(edge); - int a = getEdge(edge, PREV_AROUND_ORG); - int b = getEdge(sedge, PREV_AROUND_ORG); - - splice(edge, a); - splice(sedge, b); - - setEdgePoints(edge, edgeDst(a), edgeDst(b)); - - splice(edge, getEdge(a, NEXT_AROUND_LEFT)); - splice(sedge, getEdge(b, NEXT_AROUND_LEFT)); -} - -static double triangleArea( Point2f a, Point2f b, Point2f c ) -{ - return ((double)b.x - a.x) * ((double)c.y - a.y) - ((double)b.y - a.y) * ((double)c.x - a.x); -} - -int Subdiv2D::isRightOf(Point2f pt, int edge) const -{ - Point2f org, dst; - edgeOrg(edge, &org); - edgeDst(edge, &dst); - double cw_area = triangleArea( pt, dst, org ); - - return (cw_area > 0) - (cw_area < 0); -} - -int Subdiv2D::newEdge() -{ - if( freeQEdge <= 0 ) - { - qedges.push_back(QuadEdge()); - freeQEdge = (int)(qedges.size()-1); - } - int edge = freeQEdge*4; - freeQEdge = qedges[edge >> 2].next[1]; - qedges[edge >> 2] = QuadEdge(edge); - return edge; -} - -void Subdiv2D::deleteEdge(int edge) -{ - CV_DbgAssert((size_t)(edge >> 2) < (size_t)qedges.size()); - splice( edge, getEdge(edge, PREV_AROUND_ORG) ); - int sedge = symEdge(edge); - splice(sedge, getEdge(sedge, PREV_AROUND_ORG) ); - - edge >>= 2; - qedges[edge].next[0] = 0; - qedges[edge].next[1] = freeQEdge; - freeQEdge = edge; -} - -int Subdiv2D::newPoint(Point2f pt, bool isvirtual, int firstEdge) -{ - if( freePoint == 0 ) - { - vtx.push_back(Vertex()); - freePoint = (int)(vtx.size()-1); - } - int vidx = freePoint; - freePoint = vtx[vidx].firstEdge; - vtx[vidx] = Vertex(pt, isvirtual, firstEdge); - - return vidx; -} - -void Subdiv2D::deletePoint(int vidx) -{ - CV_DbgAssert( (size_t)vidx < vtx.size() ); - vtx[vidx].firstEdge = freePoint; - vtx[vidx].type = -1; - freePoint = vidx; -} - -int Subdiv2D::locate(Point2f pt, int& _edge, int& _vertex) -{ - int vertex = 0; - - int i, maxEdges = (int)(qedges.size() * 4); - - if( qedges.size() < (size_t)4 ) - CV_Error( CV_StsError, "Subdivision is empty" ); - - if( pt.x < topLeft.x || pt.y < topLeft.y || pt.x >= bottomRight.x || pt.y >= bottomRight.y ) - CV_Error( CV_StsOutOfRange, "" ); - - int edge = recentEdge; - CV_Assert(edge > 0); - - int location = PTLOC_ERROR; - - int right_of_curr = isRightOf(pt, edge); - if( right_of_curr > 0 ) - { - edge = symEdge(edge); - right_of_curr = -right_of_curr; - } - - for( i = 0; i < maxEdges; i++ ) - { - int onext_edge = nextEdge( edge ); - int dprev_edge = getEdge( edge, PREV_AROUND_DST ); - - int right_of_onext = isRightOf( pt, onext_edge ); - int right_of_dprev = isRightOf( pt, dprev_edge ); - - if( right_of_dprev > 0 ) - { - if( right_of_onext > 0 || (right_of_onext == 0 && right_of_curr == 0) ) - { - location = PTLOC_INSIDE; - break; - } - else - { - right_of_curr = right_of_onext; - edge = onext_edge; - } - } - else - { - if( right_of_onext > 0 ) - { - if( right_of_dprev == 0 && right_of_curr == 0 ) - { - location = PTLOC_INSIDE; - break; - } - else - { - right_of_curr = right_of_dprev; - edge = dprev_edge; - } - } - else if( right_of_curr == 0 && - isRightOf( vtx[edgeDst(onext_edge)].pt, edge ) >= 0 ) - { - edge = symEdge( edge ); - } - else - { - right_of_curr = right_of_onext; - edge = onext_edge; - } - } - } - - recentEdge = edge; - - if( location == PTLOC_INSIDE ) - { - Point2f org_pt, dst_pt; - edgeOrg(edge, &org_pt); - edgeDst(edge, &dst_pt); - - double t1 = fabs( pt.x - org_pt.x ); - t1 += fabs( pt.y - org_pt.y ); - double t2 = fabs( pt.x - dst_pt.x ); - t2 += fabs( pt.y - dst_pt.y ); - double t3 = fabs( org_pt.x - dst_pt.x ); - t3 += fabs( org_pt.y - dst_pt.y ); - - if( t1 < FLT_EPSILON ) - { - location = PTLOC_VERTEX; - vertex = edgeOrg( edge ); - edge = 0; - } - else if( t2 < FLT_EPSILON ) - { - location = PTLOC_VERTEX; - vertex = edgeDst( edge ); - edge = 0; - } - else if( (t1 < t3 || t2 < t3) && - fabs( triangleArea( pt, org_pt, dst_pt )) < FLT_EPSILON ) - { - location = PTLOC_ON_EDGE; - vertex = 0; - } - } - - if( location == PTLOC_ERROR ) - { - edge = 0; - vertex = 0; - } - - _edge = edge; - _vertex = vertex; - - return location; -} - - -inline int -isPtInCircle3( Point2f pt, Point2f a, Point2f b, Point2f c) -{ - const double eps = FLT_EPSILON*0.125; - double val = ((double)a.x * a.x + (double)a.y * a.y) * triangleArea( b, c, pt ); - val -= ((double)b.x * b.x + (double)b.y * b.y) * triangleArea( a, c, pt ); - val += ((double)c.x * c.x + (double)c.y * c.y) * triangleArea( a, b, pt ); - val -= ((double)pt.x * pt.x + (double)pt.y * pt.y) * triangleArea( a, b, c ); - - return val > eps ? 1 : val < -eps ? -1 : 0; -} - - -int Subdiv2D::insert(Point2f pt) -{ - int curr_point = 0, curr_edge = 0, deleted_edge = 0; - int location = locate( pt, curr_edge, curr_point ); - - if( location == PTLOC_ERROR ) - CV_Error( CV_StsBadSize, "" ); - - if( location == PTLOC_OUTSIDE_RECT ) - CV_Error( CV_StsOutOfRange, "" ); - - if( location == PTLOC_VERTEX ) - return curr_point; - - if( location == PTLOC_ON_EDGE ) - { - deleted_edge = curr_edge; - recentEdge = curr_edge = getEdge( curr_edge, PREV_AROUND_ORG ); - deleteEdge(deleted_edge); - } - else if( location == PTLOC_INSIDE ) - ; - else - CV_Error_(CV_StsError, ("Subdiv2D::locate returned invalid location = %d", location) ); - - assert( curr_edge != 0 ); - validGeometry = false; - - curr_point = newPoint(pt, false); - int base_edge = newEdge(); - int first_point = edgeOrg(curr_edge); - setEdgePoints(base_edge, first_point, curr_point); - splice(base_edge, curr_edge); - - do - { - base_edge = connectEdges( curr_edge, symEdge(base_edge) ); - curr_edge = getEdge(base_edge, PREV_AROUND_ORG); - } - while( edgeDst(curr_edge) != first_point ); - - curr_edge = getEdge( base_edge, PREV_AROUND_ORG ); - - int i, max_edges = (int)(qedges.size()*4); - - for( i = 0; i < max_edges; i++ ) - { - int temp_dst = 0, curr_org = 0, curr_dst = 0; - int temp_edge = getEdge( curr_edge, PREV_AROUND_ORG ); - - temp_dst = edgeDst( temp_edge ); - curr_org = edgeOrg( curr_edge ); - curr_dst = edgeDst( curr_edge ); - - if( isRightOf( vtx[temp_dst].pt, curr_edge ) > 0 && - isPtInCircle3( vtx[curr_org].pt, vtx[temp_dst].pt, - vtx[curr_dst].pt, vtx[curr_point].pt ) < 0 ) - { - swapEdges( curr_edge ); - curr_edge = getEdge( curr_edge, PREV_AROUND_ORG ); - } - else if( curr_org == first_point ) - break; - else - curr_edge = getEdge( nextEdge( curr_edge ), PREV_AROUND_LEFT ); - } - - return curr_point; -} - -void Subdiv2D::insert(const vector& ptvec) -{ - for( size_t i = 0; i < ptvec.size(); i++ ) - insert(ptvec[i]); -} - -void Subdiv2D::initDelaunay( Rect rect ) -{ - float big_coord = 3.f * MAX( rect.width, rect.height ); - float rx = (float)rect.x; - float ry = (float)rect.y; - - vtx.clear(); - qedges.clear(); - - recentEdge = 0; - validGeometry = false; - - topLeft = Point2f( rx, ry ); - bottomRight = Point2f( rx + rect.width, ry + rect.height ); - - Point2f ppA( rx + big_coord, ry ); - Point2f ppB( rx, ry + big_coord ); - Point2f ppC( rx - big_coord, ry - big_coord ); - - vtx.push_back(Vertex()); - qedges.push_back(QuadEdge()); - - freeQEdge = 0; - freePoint = 0; - - int pA = newPoint(ppA, false); - int pB = newPoint(ppB, false); - int pC = newPoint(ppC, false); - - int edge_AB = newEdge(); - int edge_BC = newEdge(); - int edge_CA = newEdge(); - - setEdgePoints( edge_AB, pA, pB ); - setEdgePoints( edge_BC, pB, pC ); - setEdgePoints( edge_CA, pC, pA ); - - splice( edge_AB, symEdge( edge_CA )); - splice( edge_BC, symEdge( edge_AB )); - splice( edge_CA, symEdge( edge_BC )); - - recentEdge = edge_AB; -} - - -void Subdiv2D::clearVoronoi() -{ - size_t i, total = qedges.size(); - - for( i = 0; i < total; i++ ) - qedges[i].pt[1] = qedges[i].pt[3] = 0; - - total = vtx.size(); - for( i = 0; i < total; i++ ) - { - if( vtx[i].isvirtual() ) - deletePoint((int)i); - } - - validGeometry = false; -} - - -static Point2f computeVoronoiPoint(Point2f org0, Point2f dst0, Point2f org1, Point2f dst1) -{ - double a0 = dst0.x - org0.x; - double b0 = dst0.y - org0.y; - double c0 = -0.5*(a0 * (dst0.x + org0.x) + b0 * (dst0.y + org0.y)); - - double a1 = dst1.x - org1.x; - double b1 = dst1.y - org1.y; - double c1 = -0.5*(a1 * (dst1.x + org1.x) + b1 * (dst1.y + org1.y)); - - double det = a0 * b1 - a1 * b0; - - if( det != 0 ) - { - det = 1. / det; - return Point2f((float) ((b0 * c1 - b1 * c0) * det), - (float) ((a1 * c0 - a0 * c1) * det)); - } - - return Point2f(FLT_MAX, FLT_MAX); -} - - -void Subdiv2D::calcVoronoi() -{ - // check if it is already calculated - if( validGeometry ) - return; - - clearVoronoi(); - int i, total = (int)qedges.size(); - - // loop through all quad-edges, except for the first 3 (#1, #2, #3 - 0 is reserved for "NULL" pointer) - for( i = 4; i < total; i++ ) - { - QuadEdge& quadedge = qedges[i]; - - if( quadedge.isfree() ) - continue; - - int edge0 = (int)(i*4); - Point2f org0, dst0, org1, dst1; - - if( !quadedge.pt[3] ) - { - int edge1 = getEdge( edge0, NEXT_AROUND_LEFT ); - int edge2 = getEdge( edge1, NEXT_AROUND_LEFT ); - - edgeOrg(edge0, &org0); - edgeDst(edge0, &dst0); - edgeOrg(edge1, &org1); - edgeDst(edge1, &dst1); - - Point2f virt_point = computeVoronoiPoint(org0, dst0, org1, dst1); - - if( fabs( virt_point.x ) < FLT_MAX * 0.5 && - fabs( virt_point.y ) < FLT_MAX * 0.5 ) - { - quadedge.pt[3] = qedges[edge1 >> 2].pt[3 - (edge1 & 2)] = - qedges[edge2 >> 2].pt[3 - (edge2 & 2)] = newPoint(virt_point, true); - } - } - - if( !quadedge.pt[1] ) - { - int edge1 = getEdge( edge0, NEXT_AROUND_RIGHT ); - int edge2 = getEdge( edge1, NEXT_AROUND_RIGHT ); - - edgeOrg(edge0, &org0); - edgeDst(edge0, &dst0); - edgeOrg(edge1, &org1); - edgeDst(edge1, &dst1); - - Point2f virt_point = computeVoronoiPoint(org0, dst0, org1, dst1); - - if( fabs( virt_point.x ) < FLT_MAX * 0.5 && - fabs( virt_point.y ) < FLT_MAX * 0.5 ) - { - quadedge.pt[1] = qedges[edge1 >> 2].pt[1 + (edge1 & 2)] = - qedges[edge2 >> 2].pt[1 + (edge2 & 2)] = newPoint(virt_point, true); - } - } - } - - validGeometry = true; -} - - -static int -isRightOf2( const Point2f& pt, const Point2f& org, const Point2f& diff ) -{ - double cw_area = ((double)org.x - pt.x)*diff.y - ((double)org.y - pt.y)*diff.x; - return (cw_area > 0) - (cw_area < 0); -} - - -int Subdiv2D::findNearest(Point2f pt, Point2f* nearestPt) -{ - if( !validGeometry ) - calcVoronoi(); - - int vertex = 0, edge = 0; - int loc = locate( pt, edge, vertex ); - - if( loc != PTLOC_ON_EDGE && loc != PTLOC_INSIDE ) - return vertex; - - vertex = 0; - - Point2f start; - edgeOrg(edge, &start); - Point2f diff = pt - start; - - edge = rotateEdge(edge, 1); - - int i, total = (int)vtx.size(); - - for( i = 0; i < total; i++ ) - { - Point2f t; - - for(;;) - { - CV_Assert( edgeDst(edge, &t) > 0 ); - if( isRightOf2( t, start, diff ) >= 0 ) - break; - - edge = getEdge( edge, NEXT_AROUND_LEFT ); - } - - for(;;) - { - CV_Assert( edgeOrg( edge, &t ) > 0 ); - - if( isRightOf2( t, start, diff ) < 0 ) - break; - - edge = getEdge( edge, PREV_AROUND_LEFT ); - } - - Point2f tempDiff; - edgeDst(edge, &tempDiff); - edgeOrg(edge, &t); - tempDiff -= t; - - if( isRightOf2( pt, t, tempDiff ) >= 0 ) - { - vertex = edgeOrg(rotateEdge( edge, 3 )); - break; - } - - edge = symEdge( edge ); - } - - if( nearestPt && vertex > 0 ) - *nearestPt = vtx[vertex].pt; - - return vertex; -} - -void Subdiv2D::getEdgeList(vector& edgeList) const -{ - edgeList.clear(); - - for( size_t i = 4; i < qedges.size(); i++ ) - { - if( qedges[i].isfree() ) - continue; - if( qedges[i].pt[0] > 0 && qedges[i].pt[2] > 0 ) - { - Point2f org = vtx[qedges[i].pt[0]].pt; - Point2f dst = vtx[qedges[i].pt[2]].pt; - edgeList.push_back(Vec4f(org.x, org.y, dst.x, dst.y)); - } - } -} - -void Subdiv2D::getTriangleList(vector& triangleList) const -{ - triangleList.clear(); - int i, total = (int)(qedges.size()*4); - vector edgemask(total, false); - - for( i = 4; i < total; i += 2 ) - { - if( edgemask[i] ) - continue; - Point2f a, b, c; - int edge = i; - edgeOrg(edge, &a); - edgemask[edge] = true; - edge = getEdge(edge, NEXT_AROUND_LEFT); - edgeOrg(edge, &b); - edgemask[edge] = true; - edge = getEdge(edge, NEXT_AROUND_LEFT); - edgeOrg(edge, &c); - edgemask[edge] = true; - triangleList.push_back(Vec6f(a.x, a.y, b.x, b.y, c.x, c.y)); - } -} - -void Subdiv2D::getVoronoiFacetList(const vector& idx, - CV_OUT vector >& facetList, - CV_OUT vector& facetCenters) -{ - calcVoronoi(); - facetList.clear(); - facetCenters.clear(); - - vector buf; - - size_t i, total; - if( idx.empty() ) - i = 4, total = vtx.size(); - else - i = 0, total = idx.size(); - - for( ; i < total; i++ ) - { - int k = idx.empty() ? (int)i : idx[i]; - - if( vtx[k].isfree() || vtx[k].isvirtual() ) - continue; - int edge = rotateEdge(vtx[k].firstEdge, 1), t = edge; - - // gather points - buf.clear(); - do - { - buf.push_back(vtx[edgeOrg(t)].pt); - t = getEdge( t, NEXT_AROUND_LEFT ); - } - while( t != edge ); - - facetList.push_back(buf); - facetCenters.push_back(vtx[k].pt); - } -} - - -void Subdiv2D::checkSubdiv() const -{ - int i, j, total = (int)qedges.size(); - - for( i = 0; i < total; i++ ) - { - const QuadEdge& qe = qedges[i]; - - if( qe.isfree() ) - continue; - - for( j = 0; j < 4; j++ ) - { - int e = (int)(i*4 + j); - int o_next = nextEdge(e); - int o_prev = getEdge(e, PREV_AROUND_ORG ); - int d_prev = getEdge(e, PREV_AROUND_DST ); - int d_next = getEdge(e, NEXT_AROUND_DST ); - - // check points - CV_Assert( edgeOrg(e) == edgeOrg(o_next)); - CV_Assert( edgeOrg(e) == edgeOrg(o_prev)); - CV_Assert( edgeDst(e) == edgeDst(d_next)); - CV_Assert( edgeDst(e) == edgeDst(d_prev)); - - if( j % 2 == 0 ) - { - CV_Assert( edgeDst(o_next) == edgeOrg(d_prev)); - CV_Assert( edgeDst(o_prev) == edgeOrg(d_next)); - CV_Assert( getEdge(getEdge(getEdge(e,NEXT_AROUND_LEFT),NEXT_AROUND_LEFT),NEXT_AROUND_LEFT) == e ); - CV_Assert( getEdge(getEdge(getEdge(e,NEXT_AROUND_RIGHT),NEXT_AROUND_RIGHT),NEXT_AROUND_RIGHT) == e); - } - } - } -} - -} - -/* End of file. */ diff --git a/modules/imgproc/src/sumpixels.cpp b/modules/imgproc/src/sumpixels.cpp deleted file mode 100644 index 219f28d..0000000 --- a/modules/imgproc/src/sumpixels.cpp +++ /dev/null @@ -1,359 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) -static IppStatus sts = ippInit(); -#endif - -namespace cv -{ - -template -void integral_( const T* src, size_t _srcstep, ST* sum, size_t _sumstep, - QT* sqsum, size_t _sqsumstep, ST* tilted, size_t _tiltedstep, - Size size, int cn ) -{ - int x, y, k; - - int srcstep = (int)(_srcstep/sizeof(T)); - int sumstep = (int)(_sumstep/sizeof(ST)); - int tiltedstep = (int)(_tiltedstep/sizeof(ST)); - int sqsumstep = (int)(_sqsumstep/sizeof(QT)); - - size.width *= cn; - - memset( sum, 0, (size.width+cn)*sizeof(sum[0])); - sum += sumstep + cn; - - if( sqsum ) - { - memset( sqsum, 0, (size.width+cn)*sizeof(sqsum[0])); - sqsum += sqsumstep + cn; - } - - if( tilted ) - { - memset( tilted, 0, (size.width+cn)*sizeof(tilted[0])); - tilted += tiltedstep + cn; - } - - if( sqsum == 0 && tilted == 0 ) - { - for( y = 0; y < size.height; y++, src += srcstep - cn, sum += sumstep - cn ) - { - for( k = 0; k < cn; k++, src++, sum++ ) - { - ST s = sum[-cn] = 0; - for( x = 0; x < size.width; x += cn ) - { - s += src[x]; - sum[x] = sum[x - sumstep] + s; - } - } - } - } - else if( tilted == 0 ) - { - for( y = 0; y < size.height; y++, src += srcstep - cn, - sum += sumstep - cn, sqsum += sqsumstep - cn ) - { - for( k = 0; k < cn; k++, src++, sum++, sqsum++ ) - { - ST s = sum[-cn] = 0; - QT sq = sqsum[-cn] = 0; - for( x = 0; x < size.width; x += cn ) - { - T it = src[x]; - s += it; - sq += (QT)it*it; - ST t = sum[x - sumstep] + s; - QT tq = sqsum[x - sqsumstep] + sq; - sum[x] = t; - sqsum[x] = tq; - } - } - } - } - else - { - AutoBuffer _buf(size.width+cn); - ST* buf = _buf; - ST s; - QT sq; - for( k = 0; k < cn; k++, src++, sum++, tilted++, buf++ ) - { - sum[-cn] = tilted[-cn] = 0; - - for( x = 0, s = 0, sq = 0; x < size.width; x += cn ) - { - T it = src[x]; - buf[x] = tilted[x] = it; - s += it; - sq += (QT)it*it; - sum[x] = s; - if( sqsum ) - sqsum[x] = sq; - } - - if( size.width == cn ) - buf[cn] = 0; - - if( sqsum ) - { - sqsum[-cn] = 0; - sqsum++; - } - } - - for( y = 1; y < size.height; y++ ) - { - src += srcstep - cn; - sum += sumstep - cn; - tilted += tiltedstep - cn; - buf += -cn; - - if( sqsum ) - sqsum += sqsumstep - cn; - - for( k = 0; k < cn; k++, src++, sum++, tilted++, buf++ ) - { - T it = src[0]; - ST t0 = s = it; - QT tq0 = sq = (QT)it*it; - - sum[-cn] = 0; - if( sqsum ) - sqsum[-cn] = 0; - tilted[-cn] = tilted[-tiltedstep]; - - sum[0] = sum[-sumstep] + t0; - if( sqsum ) - sqsum[0] = sqsum[-sqsumstep] + tq0; - tilted[0] = tilted[-tiltedstep] + t0 + buf[cn]; - - for( x = cn; x < size.width - cn; x += cn ) - { - ST t1 = buf[x]; - buf[x - cn] = t1 + t0; - t0 = it = src[x]; - tq0 = (QT)it*it; - s += t0; - sq += tq0; - sum[x] = sum[x - sumstep] + s; - if( sqsum ) - sqsum[x] = sqsum[x - sqsumstep] + sq; - t1 += buf[x + cn] + t0 + tilted[x - tiltedstep - cn]; - tilted[x] = t1; - } - - if( size.width > cn ) - { - ST t1 = buf[x]; - buf[x - cn] = t1 + t0; - t0 = it = src[x]; - tq0 = (QT)it*it; - s += t0; - sq += tq0; - sum[x] = sum[x - sumstep] + s; - if( sqsum ) - sqsum[x] = sqsum[x - sqsumstep] + sq; - tilted[x] = t0 + t1 + tilted[x - tiltedstep - cn]; - buf[x] = t0; - } - - if( sqsum ) - sqsum++; - } - } - } -} - - -#define DEF_INTEGRAL_FUNC(suffix, T, ST, QT) \ -static void integral_##suffix( T* src, size_t srcstep, ST* sum, size_t sumstep, QT* sqsum, size_t sqsumstep, \ - ST* tilted, size_t tiltedstep, Size size, int cn ) \ -{ integral_(src, srcstep, sum, sumstep, sqsum, sqsumstep, tilted, tiltedstep, size, cn); } - -DEF_INTEGRAL_FUNC(8u32s, uchar, int, double) -DEF_INTEGRAL_FUNC(8u32f, uchar, float, double) -DEF_INTEGRAL_FUNC(8u64f, uchar, double, double) -DEF_INTEGRAL_FUNC(32f, float, float, double) -DEF_INTEGRAL_FUNC(32f64f, float, double, double) -DEF_INTEGRAL_FUNC(64f, double, double, double) - -typedef void (*IntegralFunc)(const uchar* src, size_t srcstep, uchar* sum, size_t sumstep, - uchar* sqsum, size_t sqsumstep, uchar* tilted, size_t tstep, - Size size, int cn ); - -} - - -void cv::integral( InputArray _src, OutputArray _sum, OutputArray _sqsum, OutputArray _tilted, int sdepth ) -{ - Mat src = _src.getMat(), sum, sqsum, tilted; - int depth = src.depth(), cn = src.channels(); - Size isize(src.cols + 1, src.rows+1); - - if( sdepth <= 0 ) - sdepth = depth == CV_8U ? CV_32S : CV_64F; - sdepth = CV_MAT_DEPTH(sdepth); - -#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) - if( ( depth == CV_8U ) && ( !_tilted.needed() ) ) - { - if( sdepth == CV_32F ) - { - if( cn == 1 ) - { - IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); - _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); - sum = _sum.getMat(); - if( _sqsum.needed() ) - { - _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); - sqsum = _sqsum.getMat(); - ippiSqrIntegral_8u32f64f_C1R( (const Ipp8u*)src.data, (int)src.step, (Ipp32f*)sum.data, (int)sum.step, (Ipp64f*)sqsum.data, (int)sqsum.step, srcRoiSize, 0, 0 ); - } - else - { - ippiIntegral_8u32f_C1R( (const Ipp8u*)src.data, (int)src.step, (Ipp32f*)sum.data, (int)sum.step, srcRoiSize, 0 ); - } - return; - } - } - if( sdepth == CV_32S ) - { - if( cn == 1 ) - { - IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); - _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); - sum = _sum.getMat(); - if( _sqsum.needed() ) - { - _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); - sqsum = _sqsum.getMat(); - ippiSqrIntegral_8u32s64f_C1R( (const Ipp8u*)src.data, (int)src.step, (Ipp32s*)sum.data, (int)sum.step, (Ipp64f*)sqsum.data, (int)sqsum.step, srcRoiSize, 0, 0 ); - } - else - { - ippiIntegral_8u32s_C1R( (const Ipp8u*)src.data, (int)src.step, (Ipp32s*)sum.data, (int)sum.step, srcRoiSize, 0 ); - } - return; - } - } - } -#endif - - _sum.create( isize, CV_MAKETYPE(sdepth, cn) ); - sum = _sum.getMat(); - - if( _tilted.needed() ) - { - _tilted.create( isize, CV_MAKETYPE(sdepth, cn) ); - tilted = _tilted.getMat(); - } - - if( _sqsum.needed() ) - { - _sqsum.create( isize, CV_MAKETYPE(CV_64F, cn) ); - sqsum = _sqsum.getMat(); - } - - IntegralFunc func = 0; - - if( depth == CV_8U && sdepth == CV_32S ) - func = (IntegralFunc)GET_OPTIMIZED(integral_8u32s); - else if( depth == CV_8U && sdepth == CV_32F ) - func = (IntegralFunc)integral_8u32f; - else if( depth == CV_8U && sdepth == CV_64F ) - func = (IntegralFunc)integral_8u64f; - else if( depth == CV_32F && sdepth == CV_32F ) - func = (IntegralFunc)integral_32f; - else if( depth == CV_32F && sdepth == CV_64F ) - func = (IntegralFunc)integral_32f64f; - else if( depth == CV_64F && sdepth == CV_64F ) - func = (IntegralFunc)integral_64f; - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - func( src.data, src.step, sum.data, sum.step, sqsum.data, sqsum.step, - tilted.data, tilted.step, src.size(), cn ); -} - -void cv::integral( InputArray src, OutputArray sum, int sdepth ) -{ - integral( src, sum, noArray(), noArray(), sdepth ); -} - -void cv::integral( InputArray src, OutputArray sum, OutputArray sqsum, int sdepth ) -{ - integral( src, sum, sqsum, noArray(), sdepth ); -} - - -CV_IMPL void -cvIntegral( const CvArr* image, CvArr* sumImage, - CvArr* sumSqImage, CvArr* tiltedSumImage ) -{ - cv::Mat src = cv::cvarrToMat(image), sum = cv::cvarrToMat(sumImage), sum0 = sum; - cv::Mat sqsum0, sqsum, tilted0, tilted; - cv::Mat *psqsum = 0, *ptilted = 0; - - if( sumSqImage ) - { - sqsum0 = sqsum = cv::cvarrToMat(sumSqImage); - psqsum = &sqsum; - } - - if( tiltedSumImage ) - { - tilted0 = tilted = cv::cvarrToMat(tiltedSumImage); - ptilted = &tilted; - } - cv::integral( src, sum, psqsum ? cv::_OutputArray(*psqsum) : cv::_OutputArray(), - ptilted ? cv::_OutputArray(*ptilted) : cv::_OutputArray(), sum.depth() ); - - CV_Assert( sum.data == sum0.data && sqsum.data == sqsum0.data && tilted.data == tilted0.data ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/tables.cpp b/modules/imgproc/src/tables.cpp deleted file mode 100644 index 31550f4..0000000 --- a/modules/imgproc/src/tables.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/* //////////////////////////////////////////////////////////////////// -// -// CvMat helper tables -// -// */ - -#include "precomp.hpp" - -const float icv8x32fTab_cv[] = -{ - -256.f, -255.f, -254.f, -253.f, -252.f, -251.f, -250.f, -249.f, - -248.f, -247.f, -246.f, -245.f, -244.f, -243.f, -242.f, -241.f, - -240.f, -239.f, -238.f, -237.f, -236.f, -235.f, -234.f, -233.f, - -232.f, -231.f, -230.f, -229.f, -228.f, -227.f, -226.f, -225.f, - -224.f, -223.f, -222.f, -221.f, -220.f, -219.f, -218.f, -217.f, - -216.f, -215.f, -214.f, -213.f, -212.f, -211.f, -210.f, -209.f, - -208.f, -207.f, -206.f, -205.f, -204.f, -203.f, -202.f, -201.f, - -200.f, -199.f, -198.f, -197.f, -196.f, -195.f, -194.f, -193.f, - -192.f, -191.f, -190.f, -189.f, -188.f, -187.f, -186.f, -185.f, - -184.f, -183.f, -182.f, -181.f, -180.f, -179.f, -178.f, -177.f, - -176.f, -175.f, -174.f, -173.f, -172.f, -171.f, -170.f, -169.f, - -168.f, -167.f, -166.f, -165.f, -164.f, -163.f, -162.f, -161.f, - -160.f, -159.f, -158.f, -157.f, -156.f, -155.f, -154.f, -153.f, - -152.f, -151.f, -150.f, -149.f, -148.f, -147.f, -146.f, -145.f, - -144.f, -143.f, -142.f, -141.f, -140.f, -139.f, -138.f, -137.f, - -136.f, -135.f, -134.f, -133.f, -132.f, -131.f, -130.f, -129.f, - -128.f, -127.f, -126.f, -125.f, -124.f, -123.f, -122.f, -121.f, - -120.f, -119.f, -118.f, -117.f, -116.f, -115.f, -114.f, -113.f, - -112.f, -111.f, -110.f, -109.f, -108.f, -107.f, -106.f, -105.f, - -104.f, -103.f, -102.f, -101.f, -100.f, -99.f, -98.f, -97.f, - -96.f, -95.f, -94.f, -93.f, -92.f, -91.f, -90.f, -89.f, - -88.f, -87.f, -86.f, -85.f, -84.f, -83.f, -82.f, -81.f, - -80.f, -79.f, -78.f, -77.f, -76.f, -75.f, -74.f, -73.f, - -72.f, -71.f, -70.f, -69.f, -68.f, -67.f, -66.f, -65.f, - -64.f, -63.f, -62.f, -61.f, -60.f, -59.f, -58.f, -57.f, - -56.f, -55.f, -54.f, -53.f, -52.f, -51.f, -50.f, -49.f, - -48.f, -47.f, -46.f, -45.f, -44.f, -43.f, -42.f, -41.f, - -40.f, -39.f, -38.f, -37.f, -36.f, -35.f, -34.f, -33.f, - -32.f, -31.f, -30.f, -29.f, -28.f, -27.f, -26.f, -25.f, - -24.f, -23.f, -22.f, -21.f, -20.f, -19.f, -18.f, -17.f, - -16.f, -15.f, -14.f, -13.f, -12.f, -11.f, -10.f, -9.f, - -8.f, -7.f, -6.f, -5.f, -4.f, -3.f, -2.f, -1.f, - 0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, - 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 14.f, 15.f, - 16.f, 17.f, 18.f, 19.f, 20.f, 21.f, 22.f, 23.f, - 24.f, 25.f, 26.f, 27.f, 28.f, 29.f, 30.f, 31.f, - 32.f, 33.f, 34.f, 35.f, 36.f, 37.f, 38.f, 39.f, - 40.f, 41.f, 42.f, 43.f, 44.f, 45.f, 46.f, 47.f, - 48.f, 49.f, 50.f, 51.f, 52.f, 53.f, 54.f, 55.f, - 56.f, 57.f, 58.f, 59.f, 60.f, 61.f, 62.f, 63.f, - 64.f, 65.f, 66.f, 67.f, 68.f, 69.f, 70.f, 71.f, - 72.f, 73.f, 74.f, 75.f, 76.f, 77.f, 78.f, 79.f, - 80.f, 81.f, 82.f, 83.f, 84.f, 85.f, 86.f, 87.f, - 88.f, 89.f, 90.f, 91.f, 92.f, 93.f, 94.f, 95.f, - 96.f, 97.f, 98.f, 99.f, 100.f, 101.f, 102.f, 103.f, - 104.f, 105.f, 106.f, 107.f, 108.f, 109.f, 110.f, 111.f, - 112.f, 113.f, 114.f, 115.f, 116.f, 117.f, 118.f, 119.f, - 120.f, 121.f, 122.f, 123.f, 124.f, 125.f, 126.f, 127.f, - 128.f, 129.f, 130.f, 131.f, 132.f, 133.f, 134.f, 135.f, - 136.f, 137.f, 138.f, 139.f, 140.f, 141.f, 142.f, 143.f, - 144.f, 145.f, 146.f, 147.f, 148.f, 149.f, 150.f, 151.f, - 152.f, 153.f, 154.f, 155.f, 156.f, 157.f, 158.f, 159.f, - 160.f, 161.f, 162.f, 163.f, 164.f, 165.f, 166.f, 167.f, - 168.f, 169.f, 170.f, 171.f, 172.f, 173.f, 174.f, 175.f, - 176.f, 177.f, 178.f, 179.f, 180.f, 181.f, 182.f, 183.f, - 184.f, 185.f, 186.f, 187.f, 188.f, 189.f, 190.f, 191.f, - 192.f, 193.f, 194.f, 195.f, 196.f, 197.f, 198.f, 199.f, - 200.f, 201.f, 202.f, 203.f, 204.f, 205.f, 206.f, 207.f, - 208.f, 209.f, 210.f, 211.f, 212.f, 213.f, 214.f, 215.f, - 216.f, 217.f, 218.f, 219.f, 220.f, 221.f, 222.f, 223.f, - 224.f, 225.f, 226.f, 227.f, 228.f, 229.f, 230.f, 231.f, - 232.f, 233.f, 234.f, 235.f, 236.f, 237.f, 238.f, 239.f, - 240.f, 241.f, 242.f, 243.f, 244.f, 245.f, 246.f, 247.f, - 248.f, 249.f, 250.f, 251.f, 252.f, 253.f, 254.f, 255.f, - 256.f, 257.f, 258.f, 259.f, 260.f, 261.f, 262.f, 263.f, - 264.f, 265.f, 266.f, 267.f, 268.f, 269.f, 270.f, 271.f, - 272.f, 273.f, 274.f, 275.f, 276.f, 277.f, 278.f, 279.f, - 280.f, 281.f, 282.f, 283.f, 284.f, 285.f, 286.f, 287.f, - 288.f, 289.f, 290.f, 291.f, 292.f, 293.f, 294.f, 295.f, - 296.f, 297.f, 298.f, 299.f, 300.f, 301.f, 302.f, 303.f, - 304.f, 305.f, 306.f, 307.f, 308.f, 309.f, 310.f, 311.f, - 312.f, 313.f, 314.f, 315.f, 316.f, 317.f, 318.f, 319.f, - 320.f, 321.f, 322.f, 323.f, 324.f, 325.f, 326.f, 327.f, - 328.f, 329.f, 330.f, 331.f, 332.f, 333.f, 334.f, 335.f, - 336.f, 337.f, 338.f, 339.f, 340.f, 341.f, 342.f, 343.f, - 344.f, 345.f, 346.f, 347.f, 348.f, 349.f, 350.f, 351.f, - 352.f, 353.f, 354.f, 355.f, 356.f, 357.f, 358.f, 359.f, - 360.f, 361.f, 362.f, 363.f, 364.f, 365.f, 366.f, 367.f, - 368.f, 369.f, 370.f, 371.f, 372.f, 373.f, 374.f, 375.f, - 376.f, 377.f, 378.f, 379.f, 380.f, 381.f, 382.f, 383.f, - 384.f, 385.f, 386.f, 387.f, 388.f, 389.f, 390.f, 391.f, - 392.f, 393.f, 394.f, 395.f, 396.f, 397.f, 398.f, 399.f, - 400.f, 401.f, 402.f, 403.f, 404.f, 405.f, 406.f, 407.f, - 408.f, 409.f, 410.f, 411.f, 412.f, 413.f, 414.f, 415.f, - 416.f, 417.f, 418.f, 419.f, 420.f, 421.f, 422.f, 423.f, - 424.f, 425.f, 426.f, 427.f, 428.f, 429.f, 430.f, 431.f, - 432.f, 433.f, 434.f, 435.f, 436.f, 437.f, 438.f, 439.f, - 440.f, 441.f, 442.f, 443.f, 444.f, 445.f, 446.f, 447.f, - 448.f, 449.f, 450.f, 451.f, 452.f, 453.f, 454.f, 455.f, - 456.f, 457.f, 458.f, 459.f, 460.f, 461.f, 462.f, 463.f, - 464.f, 465.f, 466.f, 467.f, 468.f, 469.f, 470.f, 471.f, - 472.f, 473.f, 474.f, 475.f, 476.f, 477.f, 478.f, 479.f, - 480.f, 481.f, 482.f, 483.f, 484.f, 485.f, 486.f, 487.f, - 488.f, 489.f, 490.f, 491.f, 492.f, 493.f, 494.f, 495.f, - 496.f, 497.f, 498.f, 499.f, 500.f, 501.f, 502.f, 503.f, - 504.f, 505.f, 506.f, 507.f, 508.f, 509.f, 510.f, 511.f, -}; - -const float icv8x32fSqrTab[] = -{ - 16384.f, 16129.f, 15876.f, 15625.f, 15376.f, 15129.f, 14884.f, 14641.f, - 14400.f, 14161.f, 13924.f, 13689.f, 13456.f, 13225.f, 12996.f, 12769.f, - 12544.f, 12321.f, 12100.f, 11881.f, 11664.f, 11449.f, 11236.f, 11025.f, - 10816.f, 10609.f, 10404.f, 10201.f, 10000.f, 9801.f, 9604.f, 9409.f, - 9216.f, 9025.f, 8836.f, 8649.f, 8464.f, 8281.f, 8100.f, 7921.f, - 7744.f, 7569.f, 7396.f, 7225.f, 7056.f, 6889.f, 6724.f, 6561.f, - 6400.f, 6241.f, 6084.f, 5929.f, 5776.f, 5625.f, 5476.f, 5329.f, - 5184.f, 5041.f, 4900.f, 4761.f, 4624.f, 4489.f, 4356.f, 4225.f, - 4096.f, 3969.f, 3844.f, 3721.f, 3600.f, 3481.f, 3364.f, 3249.f, - 3136.f, 3025.f, 2916.f, 2809.f, 2704.f, 2601.f, 2500.f, 2401.f, - 2304.f, 2209.f, 2116.f, 2025.f, 1936.f, 1849.f, 1764.f, 1681.f, - 1600.f, 1521.f, 1444.f, 1369.f, 1296.f, 1225.f, 1156.f, 1089.f, - 1024.f, 961.f, 900.f, 841.f, 784.f, 729.f, 676.f, 625.f, - 576.f, 529.f, 484.f, 441.f, 400.f, 361.f, 324.f, 289.f, - 256.f, 225.f, 196.f, 169.f, 144.f, 121.f, 100.f, 81.f, - 64.f, 49.f, 36.f, 25.f, 16.f, 9.f, 4.f, 1.f, - 0.f, 1.f, 4.f, 9.f, 16.f, 25.f, 36.f, 49.f, - 64.f, 81.f, 100.f, 121.f, 144.f, 169.f, 196.f, 225.f, - 256.f, 289.f, 324.f, 361.f, 400.f, 441.f, 484.f, 529.f, - 576.f, 625.f, 676.f, 729.f, 784.f, 841.f, 900.f, 961.f, - 1024.f, 1089.f, 1156.f, 1225.f, 1296.f, 1369.f, 1444.f, 1521.f, - 1600.f, 1681.f, 1764.f, 1849.f, 1936.f, 2025.f, 2116.f, 2209.f, - 2304.f, 2401.f, 2500.f, 2601.f, 2704.f, 2809.f, 2916.f, 3025.f, - 3136.f, 3249.f, 3364.f, 3481.f, 3600.f, 3721.f, 3844.f, 3969.f, - 4096.f, 4225.f, 4356.f, 4489.f, 4624.f, 4761.f, 4900.f, 5041.f, - 5184.f, 5329.f, 5476.f, 5625.f, 5776.f, 5929.f, 6084.f, 6241.f, - 6400.f, 6561.f, 6724.f, 6889.f, 7056.f, 7225.f, 7396.f, 7569.f, - 7744.f, 7921.f, 8100.f, 8281.f, 8464.f, 8649.f, 8836.f, 9025.f, - 9216.f, 9409.f, 9604.f, 9801.f, 10000.f, 10201.f, 10404.f, 10609.f, - 10816.f, 11025.f, 11236.f, 11449.f, 11664.f, 11881.f, 12100.f, 12321.f, - 12544.f, 12769.f, 12996.f, 13225.f, 13456.f, 13689.f, 13924.f, 14161.f, - 14400.f, 14641.f, 14884.f, 15129.f, 15376.f, 15625.f, 15876.f, 16129.f, - 16384.f, 16641.f, 16900.f, 17161.f, 17424.f, 17689.f, 17956.f, 18225.f, - 18496.f, 18769.f, 19044.f, 19321.f, 19600.f, 19881.f, 20164.f, 20449.f, - 20736.f, 21025.f, 21316.f, 21609.f, 21904.f, 22201.f, 22500.f, 22801.f, - 23104.f, 23409.f, 23716.f, 24025.f, 24336.f, 24649.f, 24964.f, 25281.f, - 25600.f, 25921.f, 26244.f, 26569.f, 26896.f, 27225.f, 27556.f, 27889.f, - 28224.f, 28561.f, 28900.f, 29241.f, 29584.f, 29929.f, 30276.f, 30625.f, - 30976.f, 31329.f, 31684.f, 32041.f, 32400.f, 32761.f, 33124.f, 33489.f, - 33856.f, 34225.f, 34596.f, 34969.f, 35344.f, 35721.f, 36100.f, 36481.f, - 36864.f, 37249.f, 37636.f, 38025.f, 38416.f, 38809.f, 39204.f, 39601.f, - 40000.f, 40401.f, 40804.f, 41209.f, 41616.f, 42025.f, 42436.f, 42849.f, - 43264.f, 43681.f, 44100.f, 44521.f, 44944.f, 45369.f, 45796.f, 46225.f, - 46656.f, 47089.f, 47524.f, 47961.f, 48400.f, 48841.f, 49284.f, 49729.f, - 50176.f, 50625.f, 51076.f, 51529.f, 51984.f, 52441.f, 52900.f, 53361.f, - 53824.f, 54289.f, 54756.f, 55225.f, 55696.f, 56169.f, 56644.f, 57121.f, - 57600.f, 58081.f, 58564.f, 59049.f, 59536.f, 60025.f, 60516.f, 61009.f, - 61504.f, 62001.f, 62500.f, 63001.f, 63504.f, 64009.f, 64516.f, 65025.f -}; - -const uchar icvSaturate8u_cv[] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255 -}; - -/* End of file. */ diff --git a/modules/imgproc/src/templmatch.cpp b/modules/imgproc/src/templmatch.cpp deleted file mode 100644 index 18d7da9..0000000 --- a/modules/imgproc/src/templmatch.cpp +++ /dev/null @@ -1,390 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -void crossCorr( const Mat& img, const Mat& _templ, Mat& corr, - Size corrsize, int ctype, - Point anchor, double delta, int borderType ) -{ - const double blockScale = 4.5; - const int minBlockSize = 256; - std::vector buf; - - Mat templ = _templ; - int depth = img.depth(), cn = img.channels(); - int tdepth = templ.depth(), tcn = templ.channels(); - int cdepth = CV_MAT_DEPTH(ctype), ccn = CV_MAT_CN(ctype); - - CV_Assert( img.dims <= 2 && templ.dims <= 2 && corr.dims <= 2 ); - - if( depth != tdepth && tdepth != std::max(CV_32F, depth) ) - { - _templ.convertTo(templ, std::max(CV_32F, depth)); - tdepth = templ.depth(); - } - - CV_Assert( depth == tdepth || tdepth == CV_32F); - CV_Assert( corrsize.height <= img.rows + templ.rows - 1 && - corrsize.width <= img.cols + templ.cols - 1 ); - - CV_Assert( ccn == 1 || delta == 0 ); - - corr.create(corrsize, ctype); - - int maxDepth = depth > CV_8S ? CV_64F : std::max(std::max(CV_32F, tdepth), cdepth); - Size blocksize, dftsize; - - blocksize.width = cvRound(templ.cols*blockScale); - blocksize.width = std::max( blocksize.width, minBlockSize - templ.cols + 1 ); - blocksize.width = std::min( blocksize.width, corr.cols ); - blocksize.height = cvRound(templ.rows*blockScale); - blocksize.height = std::max( blocksize.height, minBlockSize - templ.rows + 1 ); - blocksize.height = std::min( blocksize.height, corr.rows ); - - dftsize.width = std::max(getOptimalDFTSize(blocksize.width + templ.cols - 1), 2); - dftsize.height = getOptimalDFTSize(blocksize.height + templ.rows - 1); - if( dftsize.width <= 0 || dftsize.height <= 0 ) - CV_Error( CV_StsOutOfRange, "the input arrays are too big" ); - - // recompute block size - blocksize.width = dftsize.width - templ.cols + 1; - blocksize.width = MIN( blocksize.width, corr.cols ); - blocksize.height = dftsize.height - templ.rows + 1; - blocksize.height = MIN( blocksize.height, corr.rows ); - - Mat dftTempl( dftsize.height*tcn, dftsize.width, maxDepth ); - Mat dftImg( dftsize, maxDepth ); - - int i, k, bufSize = 0; - if( tcn > 1 && tdepth != maxDepth ) - bufSize = templ.cols*templ.rows*CV_ELEM_SIZE(tdepth); - - if( cn > 1 && depth != maxDepth ) - bufSize = std::max( bufSize, (blocksize.width + templ.cols - 1)* - (blocksize.height + templ.rows - 1)*CV_ELEM_SIZE(depth)); - - if( (ccn > 1 || cn > 1) && cdepth != maxDepth ) - bufSize = std::max( bufSize, blocksize.width*blocksize.height*CV_ELEM_SIZE(cdepth)); - - buf.resize(bufSize); - - // compute DFT of each template plane - for( k = 0; k < tcn; k++ ) - { - int yofs = k*dftsize.height; - Mat src = templ; - Mat dst(dftTempl, Rect(0, yofs, dftsize.width, dftsize.height)); - Mat dst1(dftTempl, Rect(0, yofs, templ.cols, templ.rows)); - - if( tcn > 1 ) - { - src = tdepth == maxDepth ? dst1 : Mat(templ.size(), tdepth, &buf[0]); - int pairs[] = {k, 0}; - mixChannels(&templ, 1, &src, 1, pairs, 1); - } - - if( dst1.data != src.data ) - src.convertTo(dst1, dst1.depth()); - - if( dst.cols > templ.cols ) - { - Mat part(dst, Range(0, templ.rows), Range(templ.cols, dst.cols)); - part = Scalar::all(0); - } - dft(dst, dst, 0, templ.rows); - } - - int tileCountX = (corr.cols + blocksize.width - 1)/blocksize.width; - int tileCountY = (corr.rows + blocksize.height - 1)/blocksize.height; - int tileCount = tileCountX * tileCountY; - - Size wholeSize = img.size(); - Point roiofs(0,0); - Mat img0 = img; - - if( !(borderType & BORDER_ISOLATED) ) - { - img.locateROI(wholeSize, roiofs); - img0.adjustROI(roiofs.y, wholeSize.height-img.rows-roiofs.y, - roiofs.x, wholeSize.width-img.cols-roiofs.x); - } - borderType |= BORDER_ISOLATED; - - // calculate correlation by blocks - for( i = 0; i < tileCount; i++ ) - { - int x = (i%tileCountX)*blocksize.width; - int y = (i/tileCountX)*blocksize.height; - - Size bsz(std::min(blocksize.width, corr.cols - x), - std::min(blocksize.height, corr.rows - y)); - Size dsz(bsz.width + templ.cols - 1, bsz.height + templ.rows - 1); - int x0 = x - anchor.x + roiofs.x, y0 = y - anchor.y + roiofs.y; - int x1 = std::max(0, x0), y1 = std::max(0, y0); - int x2 = std::min(img0.cols, x0 + dsz.width); - int y2 = std::min(img0.rows, y0 + dsz.height); - Mat src0(img0, Range(y1, y2), Range(x1, x2)); - Mat dst(dftImg, Rect(0, 0, dsz.width, dsz.height)); - Mat dst1(dftImg, Rect(x1-x0, y1-y0, x2-x1, y2-y1)); - Mat cdst(corr, Rect(x, y, bsz.width, bsz.height)); - - for( k = 0; k < cn; k++ ) - { - Mat src = src0; - dftImg = Scalar::all(0); - - if( cn > 1 ) - { - src = depth == maxDepth ? dst1 : Mat(y2-y1, x2-x1, depth, &buf[0]); - int pairs[] = {k, 0}; - mixChannels(&src0, 1, &src, 1, pairs, 1); - } - - if( dst1.data != src.data ) - src.convertTo(dst1, dst1.depth()); - - if( x2 - x1 < dsz.width || y2 - y1 < dsz.height ) - copyMakeBorder(dst1, dst, y1-y0, dst.rows-dst1.rows-(y1-y0), - x1-x0, dst.cols-dst1.cols-(x1-x0), borderType); - - dft( dftImg, dftImg, 0, dsz.height ); - Mat dftTempl1(dftTempl, Rect(0, tcn > 1 ? k*dftsize.height : 0, - dftsize.width, dftsize.height)); - mulSpectrums(dftImg, dftTempl1, dftImg, 0, true); - dft( dftImg, dftImg, DFT_INVERSE + DFT_SCALE, bsz.height ); - - src = dftImg(Rect(0, 0, bsz.width, bsz.height)); - - if( ccn > 1 ) - { - if( cdepth != maxDepth ) - { - Mat plane(bsz, cdepth, &buf[0]); - src.convertTo(plane, cdepth, 1, delta); - src = plane; - } - int pairs[] = {0, k}; - mixChannels(&src, 1, &cdst, 1, pairs, 1); - } - else - { - if( k == 0 ) - src.convertTo(cdst, cdepth, 1, delta); - else - { - if( maxDepth != cdepth ) - { - Mat plane(bsz, cdepth, &buf[0]); - src.convertTo(plane, cdepth); - src = plane; - } - add(src, cdst, cdst); - } - } - } - } -} - -} - -/*****************************************************************************************/ - -void cv::matchTemplate( InputArray _img, InputArray _templ, OutputArray _result, int method ) -{ - CV_Assert( CV_TM_SQDIFF <= method && method <= CV_TM_CCOEFF_NORMED ); - - int numType = method == CV_TM_CCORR || method == CV_TM_CCORR_NORMED ? 0 : - method == CV_TM_CCOEFF || method == CV_TM_CCOEFF_NORMED ? 1 : 2; - bool isNormed = method == CV_TM_CCORR_NORMED || - method == CV_TM_SQDIFF_NORMED || - method == CV_TM_CCOEFF_NORMED; - - Mat img = _img.getMat(), templ = _templ.getMat(); - if( img.rows < templ.rows || img.cols < templ.cols ) - std::swap(img, templ); - - CV_Assert( (img.depth() == CV_8U || img.depth() == CV_32F) && - img.type() == templ.type() ); - - CV_Assert( img.rows >= templ.rows && img.cols >= templ.cols); - - Size corrSize(img.cols - templ.cols + 1, img.rows - templ.rows + 1); - _result.create(corrSize, CV_32F); - Mat result = _result.getMat(); - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::matchTemplate(img, templ, result, method)) - return; -#endif - - int cn = img.channels(); - crossCorr( img, templ, result, result.size(), result.type(), Point(0,0), 0, 0); - - if( method == CV_TM_CCORR ) - return; - - double invArea = 1./((double)templ.rows * templ.cols); - - Mat sum, sqsum; - Scalar templMean, templSdv; - double *q0 = 0, *q1 = 0, *q2 = 0, *q3 = 0; - double templNorm = 0, templSum2 = 0; - - if( method == CV_TM_CCOEFF ) - { - integral(img, sum, CV_64F); - templMean = mean(templ); - } - else - { - integral(img, sum, sqsum, CV_64F); - meanStdDev( templ, templMean, templSdv ); - - templNorm = CV_SQR(templSdv[0]) + CV_SQR(templSdv[1]) + - CV_SQR(templSdv[2]) + CV_SQR(templSdv[3]); - - if( templNorm < DBL_EPSILON && method == CV_TM_CCOEFF_NORMED ) - { - result = Scalar::all(1); - return; - } - - templSum2 = templNorm + - CV_SQR(templMean[0]) + CV_SQR(templMean[1]) + - CV_SQR(templMean[2]) + CV_SQR(templMean[3]); - - if( numType != 1 ) - { - templMean = Scalar::all(0); - templNorm = templSum2; - } - - templSum2 /= invArea; - templNorm = sqrt(templNorm); - templNorm /= sqrt(invArea); // care of accuracy here - - q0 = (double*)sqsum.data; - q1 = q0 + templ.cols*cn; - q2 = (double*)(sqsum.data + templ.rows*sqsum.step); - q3 = q2 + templ.cols*cn; - } - - double* p0 = (double*)sum.data; - double* p1 = p0 + templ.cols*cn; - double* p2 = (double*)(sum.data + templ.rows*sum.step); - double* p3 = p2 + templ.cols*cn; - - int sumstep = sum.data ? (int)(sum.step / sizeof(double)) : 0; - int sqstep = sqsum.data ? (int)(sqsum.step / sizeof(double)) : 0; - - int i, j, k; - - for( i = 0; i < result.rows; i++ ) - { - float* rrow = (float*)(result.data + i*result.step); - int idx = i * sumstep; - int idx2 = i * sqstep; - - for( j = 0; j < result.cols; j++, idx += cn, idx2 += cn ) - { - double num = rrow[j], t; - double wndMean2 = 0, wndSum2 = 0; - - if( numType == 1 ) - { - for( k = 0; k < cn; k++ ) - { - t = p0[idx+k] - p1[idx+k] - p2[idx+k] + p3[idx+k]; - wndMean2 += CV_SQR(t); - num -= t*templMean[k]; - } - - wndMean2 *= invArea; - } - - if( isNormed || numType == 2 ) - { - for( k = 0; k < cn; k++ ) - { - t = q0[idx2+k] - q1[idx2+k] - q2[idx2+k] + q3[idx2+k]; - wndSum2 += t; - } - - if( numType == 2 ) - { - num = wndSum2 - 2*num + templSum2; - num = MAX(num, 0.); - } - } - - if( isNormed ) - { - t = sqrt(MAX(wndSum2 - wndMean2,0))*templNorm; - if( fabs(num) < t ) - num /= t; - else if( fabs(num) < t*1.125 ) - num = num > 0 ? 1 : -1; - else - num = method != CV_TM_SQDIFF_NORMED ? 0 : 1; - } - - rrow[j] = (float)num; - } - } -} - - -CV_IMPL void -cvMatchTemplate( const CvArr* _img, const CvArr* _templ, CvArr* _result, int method ) -{ - cv::Mat img = cv::cvarrToMat(_img), templ = cv::cvarrToMat(_templ), - result = cv::cvarrToMat(_result); - CV_Assert( result.size() == cv::Size(std::abs(img.cols - templ.cols) + 1, - std::abs(img.rows - templ.rows) + 1) && - result.type() == CV_32F ); - matchTemplate(img, templ, result, method); -} - -/* End of file. */ diff --git a/modules/imgproc/src/thresh.cpp b/modules/imgproc/src/thresh.cpp deleted file mode 100644 index 06906dc..0000000 --- a/modules/imgproc/src/thresh.cpp +++ /dev/null @@ -1,877 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -static void -thresh_8u( const Mat& _src, Mat& _dst, uchar thresh, uchar maxval, int type ) -{ - int i, j, j_scalar = 0; - uchar tab[256]; - Size roi = _src.size(); - roi.width *= _src.channels(); - - if( _src.isContinuous() && _dst.isContinuous() ) - { - roi.width *= roi.height; - roi.height = 1; - } - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::thresh_8u(_src, _dst, roi.width, roi.height, thresh, maxval, type)) - return; -#endif - - switch( type ) - { - case THRESH_BINARY: - for( i = 0; i <= thresh; i++ ) - tab[i] = 0; - for( ; i < 256; i++ ) - tab[i] = maxval; - break; - case THRESH_BINARY_INV: - for( i = 0; i <= thresh; i++ ) - tab[i] = maxval; - for( ; i < 256; i++ ) - tab[i] = 0; - break; - case THRESH_TRUNC: - for( i = 0; i <= thresh; i++ ) - tab[i] = (uchar)i; - for( ; i < 256; i++ ) - tab[i] = thresh; - break; - case THRESH_TOZERO: - for( i = 0; i <= thresh; i++ ) - tab[i] = 0; - for( ; i < 256; i++ ) - tab[i] = (uchar)i; - break; - case THRESH_TOZERO_INV: - for( i = 0; i <= thresh; i++ ) - tab[i] = (uchar)i; - for( ; i < 256; i++ ) - tab[i] = 0; - break; - default: - CV_Error( CV_StsBadArg, "Unknown threshold type" ); - } - -#if CV_SSE2 - if( checkHardwareSupport(CV_CPU_SSE2) ) - { - __m128i _x80 = _mm_set1_epi8('\x80'); - __m128i thresh_u = _mm_set1_epi8(thresh); - __m128i thresh_s = _mm_set1_epi8(thresh ^ 0x80); - __m128i maxval_ = _mm_set1_epi8(maxval); - j_scalar = roi.width & -8; - - for( i = 0; i < roi.height; i++ ) - { - const uchar* src = (const uchar*)(_src.data + _src.step*i); - uchar* dst = (uchar*)(_dst.data + _dst.step*i); - - switch( type ) - { - case THRESH_BINARY: - for( j = 0; j <= roi.width - 32; j += 32 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 16) ); - v0 = _mm_cmpgt_epi8( _mm_xor_si128(v0, _x80), thresh_s ); - v1 = _mm_cmpgt_epi8( _mm_xor_si128(v1, _x80), thresh_s ); - v0 = _mm_and_si128( v0, maxval_ ); - v1 = _mm_and_si128( v1, maxval_ ); - _mm_storeu_si128( (__m128i*)(dst + j), v0 ); - _mm_storeu_si128( (__m128i*)(dst + j + 16), v1 ); - } - - for( ; j <= roi.width - 8; j += 8 ) - { - __m128i v0 = _mm_loadl_epi64( (const __m128i*)(src + j) ); - v0 = _mm_cmpgt_epi8( _mm_xor_si128(v0, _x80), thresh_s ); - v0 = _mm_and_si128( v0, maxval_ ); - _mm_storel_epi64( (__m128i*)(dst + j), v0 ); - } - break; - - case THRESH_BINARY_INV: - for( j = 0; j <= roi.width - 32; j += 32 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 16) ); - v0 = _mm_cmpgt_epi8( _mm_xor_si128(v0, _x80), thresh_s ); - v1 = _mm_cmpgt_epi8( _mm_xor_si128(v1, _x80), thresh_s ); - v0 = _mm_andnot_si128( v0, maxval_ ); - v1 = _mm_andnot_si128( v1, maxval_ ); - _mm_storeu_si128( (__m128i*)(dst + j), v0 ); - _mm_storeu_si128( (__m128i*)(dst + j + 16), v1 ); - } - - for( ; j <= roi.width - 8; j += 8 ) - { - __m128i v0 = _mm_loadl_epi64( (const __m128i*)(src + j) ); - v0 = _mm_cmpgt_epi8( _mm_xor_si128(v0, _x80), thresh_s ); - v0 = _mm_andnot_si128( v0, maxval_ ); - _mm_storel_epi64( (__m128i*)(dst + j), v0 ); - } - break; - - case THRESH_TRUNC: - for( j = 0; j <= roi.width - 32; j += 32 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 16) ); - v0 = _mm_subs_epu8( v0, _mm_subs_epu8( v0, thresh_u )); - v1 = _mm_subs_epu8( v1, _mm_subs_epu8( v1, thresh_u )); - _mm_storeu_si128( (__m128i*)(dst + j), v0 ); - _mm_storeu_si128( (__m128i*)(dst + j + 16), v1 ); - } - - for( ; j <= roi.width - 8; j += 8 ) - { - __m128i v0 = _mm_loadl_epi64( (const __m128i*)(src + j) ); - v0 = _mm_subs_epu8( v0, _mm_subs_epu8( v0, thresh_u )); - _mm_storel_epi64( (__m128i*)(dst + j), v0 ); - } - break; - - case THRESH_TOZERO: - for( j = 0; j <= roi.width - 32; j += 32 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 16) ); - v0 = _mm_and_si128( v0, _mm_cmpgt_epi8(_mm_xor_si128(v0, _x80), thresh_s )); - v1 = _mm_and_si128( v1, _mm_cmpgt_epi8(_mm_xor_si128(v1, _x80), thresh_s )); - _mm_storeu_si128( (__m128i*)(dst + j), v0 ); - _mm_storeu_si128( (__m128i*)(dst + j + 16), v1 ); - } - - for( ; j <= roi.width - 8; j += 8 ) - { - __m128i v0 = _mm_loadl_epi64( (const __m128i*)(src + j) ); - v0 = _mm_and_si128( v0, _mm_cmpgt_epi8(_mm_xor_si128(v0, _x80), thresh_s )); - _mm_storel_epi64( (__m128i*)(dst + j), v0 ); - } - break; - - case THRESH_TOZERO_INV: - for( j = 0; j <= roi.width - 32; j += 32 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 16) ); - v0 = _mm_andnot_si128( _mm_cmpgt_epi8(_mm_xor_si128(v0, _x80), thresh_s ), v0 ); - v1 = _mm_andnot_si128( _mm_cmpgt_epi8(_mm_xor_si128(v1, _x80), thresh_s ), v1 ); - _mm_storeu_si128( (__m128i*)(dst + j), v0 ); - _mm_storeu_si128( (__m128i*)(dst + j + 16), v1 ); - } - - for( ; j <= roi.width - 8; j += 8 ) - { - __m128i v0 = _mm_loadl_epi64( (const __m128i*)(src + j) ); - v0 = _mm_andnot_si128( _mm_cmpgt_epi8(_mm_xor_si128(v0, _x80), thresh_s ), v0 ); - _mm_storel_epi64( (__m128i*)(dst + j), v0 ); - } - break; - } - } - } -#endif - - if( j_scalar < roi.width ) - { - for( i = 0; i < roi.height; i++ ) - { - const uchar* src = (const uchar*)(_src.data + _src.step*i); - uchar* dst = (uchar*)(_dst.data + _dst.step*i); - j = j_scalar; -#if CV_ENABLE_UNROLLED - for( ; j <= roi.width - 4; j += 4 ) - { - uchar t0 = tab[src[j]]; - uchar t1 = tab[src[j+1]]; - - dst[j] = t0; - dst[j+1] = t1; - - t0 = tab[src[j+2]]; - t1 = tab[src[j+3]]; - - dst[j+2] = t0; - dst[j+3] = t1; - } -#endif - for( ; j < roi.width; j++ ) - dst[j] = tab[src[j]]; - } - } -} - - -static void -thresh_16s( const Mat& _src, Mat& _dst, short thresh, short maxval, int type ) -{ - int i, j; - Size roi = _src.size(); - roi.width *= _src.channels(); - const short* src = (const short*)_src.data; - short* dst = (short*)_dst.data; - size_t src_step = _src.step/sizeof(src[0]); - size_t dst_step = _dst.step/sizeof(dst[0]); - -#if CV_SSE2 - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE); -#endif - - if( _src.isContinuous() && _dst.isContinuous() ) - { - roi.width *= roi.height; - roi.height = 1; - } - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::thresh_16s(_src, _dst, roi.width, roi.height, thresh, maxval, type)) - return; -#endif - - switch( type ) - { - case THRESH_BINARY: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i thresh8 = _mm_set1_epi16(thresh), maxval8 = _mm_set1_epi16(maxval); - for( ; j <= roi.width - 16; j += 16 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 8) ); - v0 = _mm_cmpgt_epi16( v0, thresh8 ); - v1 = _mm_cmpgt_epi16( v1, thresh8 ); - v0 = _mm_and_si128( v0, maxval8 ); - v1 = _mm_and_si128( v1, maxval8 ); - _mm_storeu_si128((__m128i*)(dst + j), v0 ); - _mm_storeu_si128((__m128i*)(dst + j + 8), v1 ); - } - } - #endif - - for( ; j < roi.width; j++ ) - dst[j] = src[j] > thresh ? maxval : 0; - } - break; - - case THRESH_BINARY_INV: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i thresh8 = _mm_set1_epi16(thresh), maxval8 = _mm_set1_epi16(maxval); - for( ; j <= roi.width - 16; j += 16 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 8) ); - v0 = _mm_cmpgt_epi16( v0, thresh8 ); - v1 = _mm_cmpgt_epi16( v1, thresh8 ); - v0 = _mm_andnot_si128( v0, maxval8 ); - v1 = _mm_andnot_si128( v1, maxval8 ); - _mm_storeu_si128((__m128i*)(dst + j), v0 ); - _mm_storeu_si128((__m128i*)(dst + j + 8), v1 ); - } - } - #endif - - for( ; j < roi.width; j++ ) - dst[j] = src[j] <= thresh ? maxval : 0; - } - break; - - case THRESH_TRUNC: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i thresh8 = _mm_set1_epi16(thresh); - for( ; j <= roi.width - 16; j += 16 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 8) ); - v0 = _mm_min_epi16( v0, thresh8 ); - v1 = _mm_min_epi16( v1, thresh8 ); - _mm_storeu_si128((__m128i*)(dst + j), v0 ); - _mm_storeu_si128((__m128i*)(dst + j + 8), v1 ); - } - } - #endif - - for( ; j < roi.width; j++ ) - dst[j] = std::min(src[j], thresh); - } - break; - - case THRESH_TOZERO: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i thresh8 = _mm_set1_epi16(thresh); - for( ; j <= roi.width - 16; j += 16 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 8) ); - v0 = _mm_and_si128(v0, _mm_cmpgt_epi16(v0, thresh8)); - v1 = _mm_and_si128(v1, _mm_cmpgt_epi16(v1, thresh8)); - _mm_storeu_si128((__m128i*)(dst + j), v0 ); - _mm_storeu_si128((__m128i*)(dst + j + 8), v1 ); - } - } - #endif - - for( ; j < roi.width; j++ ) - { - short v = src[j]; - dst[j] = v > thresh ? v : 0; - } - } - break; - - case THRESH_TOZERO_INV: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; - #if CV_SSE2 - if( useSIMD ) - { - __m128i thresh8 = _mm_set1_epi16(thresh); - for( ; j <= roi.width - 16; j += 16 ) - { - __m128i v0, v1; - v0 = _mm_loadu_si128( (const __m128i*)(src + j) ); - v1 = _mm_loadu_si128( (const __m128i*)(src + j + 8) ); - v0 = _mm_andnot_si128(_mm_cmpgt_epi16(v0, thresh8), v0); - v1 = _mm_andnot_si128(_mm_cmpgt_epi16(v1, thresh8), v1); - _mm_storeu_si128((__m128i*)(dst + j), v0 ); - _mm_storeu_si128((__m128i*)(dst + j + 8), v1 ); - } - } - #endif - for( ; j < roi.width; j++ ) - { - short v = src[j]; - dst[j] = v <= thresh ? v : 0; - } - } - break; - default: - return CV_Error( CV_StsBadArg, "" ); - } -} - - -static void -thresh_32f( const Mat& _src, Mat& _dst, float thresh, float maxval, int type ) -{ - int i, j; - Size roi = _src.size(); - roi.width *= _src.channels(); - const float* src = (const float*)_src.data; - float* dst = (float*)_dst.data; - size_t src_step = _src.step/sizeof(src[0]); - size_t dst_step = _dst.step/sizeof(dst[0]); - -#if CV_SSE2 - volatile bool useSIMD = checkHardwareSupport(CV_CPU_SSE); -#endif - - if( _src.isContinuous() && _dst.isContinuous() ) - { - roi.width *= roi.height; - roi.height = 1; - } - -#ifdef HAVE_TEGRA_OPTIMIZATION - if (tegra::thresh_32f(_src, _dst, roi.width, roi.height, thresh, maxval, type)) - return; -#endif - - switch( type ) - { - case THRESH_BINARY: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; -#if CV_SSE2 - if( useSIMD ) - { - __m128 thresh4 = _mm_set1_ps(thresh), maxval4 = _mm_set1_ps(maxval); - for( ; j <= roi.width - 8; j += 8 ) - { - __m128 v0, v1; - v0 = _mm_loadu_ps( src + j ); - v1 = _mm_loadu_ps( src + j + 4 ); - v0 = _mm_cmpgt_ps( v0, thresh4 ); - v1 = _mm_cmpgt_ps( v1, thresh4 ); - v0 = _mm_and_ps( v0, maxval4 ); - v1 = _mm_and_ps( v1, maxval4 ); - _mm_storeu_ps( dst + j, v0 ); - _mm_storeu_ps( dst + j + 4, v1 ); - } - } -#endif - - for( ; j < roi.width; j++ ) - dst[j] = src[j] > thresh ? maxval : 0; - } - break; - - case THRESH_BINARY_INV: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; -#if CV_SSE2 - if( useSIMD ) - { - __m128 thresh4 = _mm_set1_ps(thresh), maxval4 = _mm_set1_ps(maxval); - for( ; j <= roi.width - 8; j += 8 ) - { - __m128 v0, v1; - v0 = _mm_loadu_ps( src + j ); - v1 = _mm_loadu_ps( src + j + 4 ); - v0 = _mm_cmple_ps( v0, thresh4 ); - v1 = _mm_cmple_ps( v1, thresh4 ); - v0 = _mm_and_ps( v0, maxval4 ); - v1 = _mm_and_ps( v1, maxval4 ); - _mm_storeu_ps( dst + j, v0 ); - _mm_storeu_ps( dst + j + 4, v1 ); - } - } -#endif - - for( ; j < roi.width; j++ ) - dst[j] = src[j] <= thresh ? maxval : 0; - } - break; - - case THRESH_TRUNC: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; -#if CV_SSE2 - if( useSIMD ) - { - __m128 thresh4 = _mm_set1_ps(thresh); - for( ; j <= roi.width - 8; j += 8 ) - { - __m128 v0, v1; - v0 = _mm_loadu_ps( src + j ); - v1 = _mm_loadu_ps( src + j + 4 ); - v0 = _mm_min_ps( v0, thresh4 ); - v1 = _mm_min_ps( v1, thresh4 ); - _mm_storeu_ps( dst + j, v0 ); - _mm_storeu_ps( dst + j + 4, v1 ); - } - } -#endif - - for( ; j < roi.width; j++ ) - dst[j] = std::min(src[j], thresh); - } - break; - - case THRESH_TOZERO: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; -#if CV_SSE2 - if( useSIMD ) - { - __m128 thresh4 = _mm_set1_ps(thresh); - for( ; j <= roi.width - 8; j += 8 ) - { - __m128 v0, v1; - v0 = _mm_loadu_ps( src + j ); - v1 = _mm_loadu_ps( src + j + 4 ); - v0 = _mm_and_ps(v0, _mm_cmpgt_ps(v0, thresh4)); - v1 = _mm_and_ps(v1, _mm_cmpgt_ps(v1, thresh4)); - _mm_storeu_ps( dst + j, v0 ); - _mm_storeu_ps( dst + j + 4, v1 ); - } - } -#endif - - for( ; j < roi.width; j++ ) - { - float v = src[j]; - dst[j] = v > thresh ? v : 0; - } - } - break; - - case THRESH_TOZERO_INV: - for( i = 0; i < roi.height; i++, src += src_step, dst += dst_step ) - { - j = 0; -#if CV_SSE2 - if( useSIMD ) - { - __m128 thresh4 = _mm_set1_ps(thresh); - for( ; j <= roi.width - 8; j += 8 ) - { - __m128 v0, v1; - v0 = _mm_loadu_ps( src + j ); - v1 = _mm_loadu_ps( src + j + 4 ); - v0 = _mm_and_ps(v0, _mm_cmple_ps(v0, thresh4)); - v1 = _mm_and_ps(v1, _mm_cmple_ps(v1, thresh4)); - _mm_storeu_ps( dst + j, v0 ); - _mm_storeu_ps( dst + j + 4, v1 ); - } - } -#endif - for( ; j < roi.width; j++ ) - { - float v = src[j]; - dst[j] = v <= thresh ? v : 0; - } - } - break; - default: - return CV_Error( CV_StsBadArg, "" ); - } -} - - -static double -getThreshVal_Otsu_8u( const Mat& _src ) -{ - Size size = _src.size(); - if( _src.isContinuous() ) - { - size.width *= size.height; - size.height = 1; - } - const int N = 256; - int i, j, h[N] = {0}; - for( i = 0; i < size.height; i++ ) - { - const uchar* src = _src.data + _src.step*i; - j = 0; - #if CV_ENABLE_UNROLLED - for( ; j <= size.width - 4; j += 4 ) - { - int v0 = src[j], v1 = src[j+1]; - h[v0]++; h[v1]++; - v0 = src[j+2]; v1 = src[j+3]; - h[v0]++; h[v1]++; - } - #endif - for( ; j < size.width; j++ ) - h[src[j]]++; - } - - double mu = 0, scale = 1./(size.width*size.height); - for( i = 0; i < N; i++ ) - mu += i*(double)h[i]; - - mu *= scale; - double mu1 = 0, q1 = 0; - double max_sigma = 0, max_val = 0; - - for( i = 0; i < N; i++ ) - { - double p_i, q2, mu2, sigma; - - p_i = h[i]*scale; - mu1 *= q1; - q1 += p_i; - q2 = 1. - q1; - - if( std::min(q1,q2) < FLT_EPSILON || std::max(q1,q2) > 1. - FLT_EPSILON ) - continue; - - mu1 = (mu1 + i*p_i)/q1; - mu2 = (mu - q1*mu1)/q2; - sigma = q1*q2*(mu1 - mu2)*(mu1 - mu2); - if( sigma > max_sigma ) - { - max_sigma = sigma; - max_val = i; - } - } - - return max_val; -} - -class ThresholdRunner : public ParallelLoopBody -{ -public: - ThresholdRunner(Mat _src, Mat _dst, double _thresh, double _maxval, int _thresholdType) - { - src = _src; - dst = _dst; - - thresh = _thresh; - maxval = _maxval; - thresholdType = _thresholdType; - } - - void operator () ( const Range& range ) const - { - int row0 = range.start; - int row1 = range.end; - - Mat srcStripe = src.rowRange(row0, row1); - Mat dstStripe = dst.rowRange(row0, row1); - - if (srcStripe.depth() == CV_8U) - { - thresh_8u( srcStripe, dstStripe, (uchar)thresh, (uchar)maxval, thresholdType ); - } - else if( srcStripe.depth() == CV_16S ) - { - thresh_16s( srcStripe, dstStripe, (short)thresh, (short)maxval, thresholdType ); - } - else if( srcStripe.depth() == CV_32F ) - { - thresh_32f( srcStripe, dstStripe, (float)thresh, (float)maxval, thresholdType ); - } - } - -private: - Mat src; - Mat dst; - int nStripes; - - double thresh; - double maxval; - int thresholdType; -}; - -} - -double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double maxval, int type ) -{ - Mat src = _src.getMat(); - bool use_otsu = (type & THRESH_OTSU) != 0; - type &= THRESH_MASK; - - if( use_otsu ) - { - CV_Assert( src.type() == CV_8UC1 ); - thresh = getThreshVal_Otsu_8u(src); - } - - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - if( src.depth() == CV_8U ) - { - int ithresh = cvFloor(thresh); - thresh = ithresh; - int imaxval = cvRound(maxval); - if( type == THRESH_TRUNC ) - imaxval = ithresh; - imaxval = saturate_cast(imaxval); - - if( ithresh < 0 || ithresh >= 255 ) - { - if( type == THRESH_BINARY || type == THRESH_BINARY_INV || - ((type == THRESH_TRUNC || type == THRESH_TOZERO_INV) && ithresh < 0) || - (type == THRESH_TOZERO && ithresh >= 255) ) - { - int v = type == THRESH_BINARY ? (ithresh >= 255 ? 0 : imaxval) : - type == THRESH_BINARY_INV ? (ithresh >= 255 ? imaxval : 0) : - /*type == THRESH_TRUNC ? imaxval :*/ 0; - dst.setTo(v); - } - else - src.copyTo(dst); - return thresh; - } - thresh = ithresh; - maxval = imaxval; - } - else if( src.depth() == CV_16S ) - { - int ithresh = cvFloor(thresh); - thresh = ithresh; - int imaxval = cvRound(maxval); - if( type == THRESH_TRUNC ) - imaxval = ithresh; - imaxval = saturate_cast(imaxval); - - if( ithresh < SHRT_MIN || ithresh >= SHRT_MAX ) - { - if( type == THRESH_BINARY || type == THRESH_BINARY_INV || - ((type == THRESH_TRUNC || type == THRESH_TOZERO_INV) && ithresh < SHRT_MIN) || - (type == THRESH_TOZERO && ithresh >= SHRT_MAX) ) - { - int v = type == THRESH_BINARY ? (ithresh >= SHRT_MAX ? 0 : imaxval) : - type == THRESH_BINARY_INV ? (ithresh >= SHRT_MAX ? imaxval : 0) : - /*type == THRESH_TRUNC ? imaxval :*/ 0; - dst.setTo(v); - } - else - src.copyTo(dst); - return thresh; - } - thresh = ithresh; - maxval = imaxval; - } - else if( src.depth() == CV_32F ) - ; - else - CV_Error( CV_StsUnsupportedFormat, "" ); - - parallel_for_(Range(0, dst.rows), - ThresholdRunner(src, dst, thresh, maxval, type), - dst.total()/(double)(1<<16)); - return thresh; -} - - -void cv::adaptiveThreshold( InputArray _src, OutputArray _dst, double maxValue, - int method, int type, int blockSize, double delta ) -{ - Mat src = _src.getMat(); - CV_Assert( src.type() == CV_8UC1 ); - CV_Assert( blockSize % 2 == 1 && blockSize > 1 ); - Size size = src.size(); - - _dst.create( size, src.type() ); - Mat dst = _dst.getMat(); - - if( maxValue < 0 ) - { - dst = Scalar(0); - return; - } - - Mat mean; - - if( src.data != dst.data ) - mean = dst; - - if( method == ADAPTIVE_THRESH_MEAN_C ) - boxFilter( src, mean, src.type(), Size(blockSize, blockSize), - Point(-1,-1), true, BORDER_REPLICATE ); - else if( method == ADAPTIVE_THRESH_GAUSSIAN_C ) - GaussianBlur( src, mean, Size(blockSize, blockSize), 0, 0, BORDER_REPLICATE ); - else - CV_Error( CV_StsBadFlag, "Unknown/unsupported adaptive threshold method" ); - - int i, j; - uchar imaxval = saturate_cast(maxValue); - int idelta = type == THRESH_BINARY ? cvCeil(delta) : cvFloor(delta); - uchar tab[768]; - - if( type == CV_THRESH_BINARY ) - for( i = 0; i < 768; i++ ) - tab[i] = (uchar)(i - 255 > -idelta ? imaxval : 0); - else if( type == CV_THRESH_BINARY_INV ) - for( i = 0; i < 768; i++ ) - tab[i] = (uchar)(i - 255 <= -idelta ? imaxval : 0); - else - CV_Error( CV_StsBadFlag, "Unknown/unsupported threshold type" ); - - if( src.isContinuous() && mean.isContinuous() && dst.isContinuous() ) - { - size.width *= size.height; - size.height = 1; - } - - for( i = 0; i < size.height; i++ ) - { - const uchar* sdata = src.data + src.step*i; - const uchar* mdata = mean.data + mean.step*i; - uchar* ddata = dst.data + dst.step*i; - - for( j = 0; j < size.width; j++ ) - ddata[j] = tab[sdata[j] - mdata[j] + 255]; - } -} - -CV_IMPL double -cvThreshold( const void* srcarr, void* dstarr, double thresh, double maxval, int type ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), dst0 = dst; - - CV_Assert( src.size == dst.size && src.channels() == dst.channels() && - (src.depth() == dst.depth() || dst.depth() == CV_8U)); - - thresh = cv::threshold( src, dst, thresh, maxval, type ); - if( dst0.data != dst.data ) - dst.convertTo( dst0, dst0.depth() ); - return thresh; -} - - -CV_IMPL void -cvAdaptiveThreshold( const void *srcIm, void *dstIm, double maxValue, - int method, int type, int blockSize, double delta ) -{ - cv::Mat src = cv::cvarrToMat(srcIm), dst = cv::cvarrToMat(dstIm); - CV_Assert( src.size == dst.size && src.type() == dst.type() ); - cv::adaptiveThreshold( src, dst, maxValue, method, type, blockSize, delta ); -} - -/* End of file. */ diff --git a/modules/imgproc/src/undistort.cpp b/modules/imgproc/src/undistort.cpp deleted file mode 100644 index fc13b50..0000000 --- a/modules/imgproc/src/undistort.cpp +++ /dev/null @@ -1,572 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -cv::Mat cv::getDefaultNewCameraMatrix( InputArray _cameraMatrix, Size imgsize, - bool centerPrincipalPoint ) -{ - Mat cameraMatrix = _cameraMatrix.getMat(); - if( !centerPrincipalPoint && cameraMatrix.type() == CV_64F ) - return cameraMatrix; - - Mat newCameraMatrix; - cameraMatrix.convertTo(newCameraMatrix, CV_64F); - if( centerPrincipalPoint ) - { - ((double*)newCameraMatrix.data)[2] = (imgsize.width-1)*0.5; - ((double*)newCameraMatrix.data)[5] = (imgsize.height-1)*0.5; - } - return newCameraMatrix; -} - -void cv::initUndistortRectifyMap( InputArray _cameraMatrix, InputArray _distCoeffs, - InputArray _matR, InputArray _newCameraMatrix, - Size size, int m1type, OutputArray _map1, OutputArray _map2 ) -{ - Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat(); - Mat matR = _matR.getMat(), newCameraMatrix = _newCameraMatrix.getMat(); - - if( m1type <= 0 ) - m1type = CV_16SC2; - CV_Assert( m1type == CV_16SC2 || m1type == CV_32FC1 || m1type == CV_32FC2 ); - _map1.create( size, m1type ); - Mat map1 = _map1.getMat(), map2; - if( m1type != CV_32FC2 ) - { - _map2.create( size, m1type == CV_16SC2 ? CV_16UC1 : CV_32FC1 ); - map2 = _map2.getMat(); - } - else - _map2.release(); - - Mat_ R = Mat_::eye(3, 3); - Mat_ A = Mat_(cameraMatrix), Ar; - - if( newCameraMatrix.data ) - Ar = Mat_(newCameraMatrix); - else - Ar = getDefaultNewCameraMatrix( A, size, true ); - - if( matR.data ) - R = Mat_(matR); - - if( distCoeffs.data ) - distCoeffs = Mat_(distCoeffs); - else - { - distCoeffs.create(8, 1, CV_64F); - distCoeffs = 0.; - } - - CV_Assert( A.size() == Size(3,3) && A.size() == R.size() ); - CV_Assert( Ar.size() == Size(3,3) || Ar.size() == Size(4, 3)); - Mat_ iR = (Ar.colRange(0,3)*R).inv(DECOMP_LU); - const double* ir = &iR(0,0); - - double u0 = A(0, 2), v0 = A(1, 2); - double fx = A(0, 0), fy = A(1, 1); - - CV_Assert( distCoeffs.size() == Size(1, 4) || distCoeffs.size() == Size(4, 1) || - distCoeffs.size() == Size(1, 5) || distCoeffs.size() == Size(5, 1) || - distCoeffs.size() == Size(1, 8) || distCoeffs.size() == Size(8, 1)); - - if( distCoeffs.rows != 1 && !distCoeffs.isContinuous() ) - distCoeffs = distCoeffs.t(); - - double k1 = ((double*)distCoeffs.data)[0]; - double k2 = ((double*)distCoeffs.data)[1]; - double p1 = ((double*)distCoeffs.data)[2]; - double p2 = ((double*)distCoeffs.data)[3]; - double k3 = distCoeffs.cols + distCoeffs.rows - 1 >= 5 ? ((double*)distCoeffs.data)[4] : 0.; - double k4 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[5] : 0.; - double k5 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[6] : 0.; - double k6 = distCoeffs.cols + distCoeffs.rows - 1 >= 8 ? ((double*)distCoeffs.data)[7] : 0.; - - for( int i = 0; i < size.height; i++ ) - { - float* m1f = (float*)(map1.data + map1.step*i); - float* m2f = (float*)(map2.data + map2.step*i); - short* m1 = (short*)m1f; - ushort* m2 = (ushort*)m2f; - double _x = i*ir[1] + ir[2], _y = i*ir[4] + ir[5], _w = i*ir[7] + ir[8]; - - for( int j = 0; j < size.width; j++, _x += ir[0], _y += ir[3], _w += ir[6] ) - { - double w = 1./_w, x = _x*w, y = _y*w; - double x2 = x*x, y2 = y*y; - double r2 = x2 + y2, _2xy = 2*x*y; - double kr = (1 + ((k3*r2 + k2)*r2 + k1)*r2)/(1 + ((k6*r2 + k5)*r2 + k4)*r2); - double u = fx*(x*kr + p1*_2xy + p2*(r2 + 2*x2)) + u0; - double v = fy*(y*kr + p1*(r2 + 2*y2) + p2*_2xy) + v0; - if( m1type == CV_16SC2 ) - { - int iu = saturate_cast(u*INTER_TAB_SIZE); - int iv = saturate_cast(v*INTER_TAB_SIZE); - m1[j*2] = (short)(iu >> INTER_BITS); - m1[j*2+1] = (short)(iv >> INTER_BITS); - m2[j] = (ushort)((iv & (INTER_TAB_SIZE-1))*INTER_TAB_SIZE + (iu & (INTER_TAB_SIZE-1))); - } - else if( m1type == CV_32FC1 ) - { - m1f[j] = (float)u; - m2f[j] = (float)v; - } - else - { - m1f[j*2] = (float)u; - m1f[j*2+1] = (float)v; - } - } - } -} - - -void cv::undistort( InputArray _src, OutputArray _dst, InputArray _cameraMatrix, - InputArray _distCoeffs, InputArray _newCameraMatrix ) -{ - Mat src = _src.getMat(), cameraMatrix = _cameraMatrix.getMat(); - Mat distCoeffs = _distCoeffs.getMat(), newCameraMatrix = _newCameraMatrix.getMat(); - - _dst.create( src.size(), src.type() ); - Mat dst = _dst.getMat(); - - CV_Assert( dst.data != src.data ); - - int stripe_size0 = std::min(std::max(1, (1 << 12) / std::max(src.cols, 1)), src.rows); - Mat map1(stripe_size0, src.cols, CV_16SC2), map2(stripe_size0, src.cols, CV_16UC1); - - Mat_ A, Ar, I = Mat_::eye(3,3); - - cameraMatrix.convertTo(A, CV_64F); - if( distCoeffs.data ) - distCoeffs = Mat_(distCoeffs); - else - { - distCoeffs.create(5, 1, CV_64F); - distCoeffs = 0.; - } - - if( newCameraMatrix.data ) - newCameraMatrix.convertTo(Ar, CV_64F); - else - A.copyTo(Ar); - - double v0 = Ar(1, 2); - for( int y = 0; y < src.rows; y += stripe_size0 ) - { - int stripe_size = std::min( stripe_size0, src.rows - y ); - Ar(1, 2) = v0 - y; - Mat map1_part = map1.rowRange(0, stripe_size), - map2_part = map2.rowRange(0, stripe_size), - dst_part = dst.rowRange(y, y + stripe_size); - - initUndistortRectifyMap( A, distCoeffs, I, Ar, Size(src.cols, stripe_size), - map1_part.type(), map1_part, map2_part ); - remap( src, dst_part, map1_part, map2_part, INTER_LINEAR, BORDER_CONSTANT ); - } -} - - -CV_IMPL void -cvUndistort2( const CvArr* srcarr, CvArr* dstarr, const CvMat* Aarr, const CvMat* dist_coeffs, const CvMat* newAarr ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), dst0 = dst; - cv::Mat A = cv::cvarrToMat(Aarr), distCoeffs = cv::cvarrToMat(dist_coeffs), newA; - if( newAarr ) - newA = cv::cvarrToMat(newAarr); - - CV_Assert( src.size() == dst.size() && src.type() == dst.type() ); - cv::undistort( src, dst, A, distCoeffs, newA ); -} - - -CV_IMPL void cvInitUndistortMap( const CvMat* Aarr, const CvMat* dist_coeffs, - CvArr* mapxarr, CvArr* mapyarr ) -{ - cv::Mat A = cv::cvarrToMat(Aarr), distCoeffs = cv::cvarrToMat(dist_coeffs); - cv::Mat mapx = cv::cvarrToMat(mapxarr), mapy, mapx0 = mapx, mapy0; - - if( mapyarr ) - mapy0 = mapy = cv::cvarrToMat(mapyarr); - - cv::initUndistortRectifyMap( A, distCoeffs, cv::Mat(), A, - mapx.size(), mapx.type(), mapx, mapy ); - CV_Assert( mapx0.data == mapx.data && mapy0.data == mapy.data ); -} - -void -cvInitUndistortRectifyMap( const CvMat* Aarr, const CvMat* dist_coeffs, - const CvMat *Rarr, const CvMat* ArArr, CvArr* mapxarr, CvArr* mapyarr ) -{ - cv::Mat A = cv::cvarrToMat(Aarr), distCoeffs, R, Ar; - cv::Mat mapx = cv::cvarrToMat(mapxarr), mapy, mapx0 = mapx, mapy0; - - if( mapyarr ) - mapy0 = mapy = cv::cvarrToMat(mapyarr); - - if( dist_coeffs ) - distCoeffs = cv::cvarrToMat(dist_coeffs); - if( Rarr ) - R = cv::cvarrToMat(Rarr); - if( ArArr ) - Ar = cv::cvarrToMat(ArArr); - - cv::initUndistortRectifyMap( A, distCoeffs, R, Ar, mapx.size(), mapx.type(), mapx, mapy ); - CV_Assert( mapx0.data == mapx.data && mapy0.data == mapy.data ); -} - - -void cvUndistortPoints( const CvMat* _src, CvMat* _dst, const CvMat* _cameraMatrix, - const CvMat* _distCoeffs, - const CvMat* matR, const CvMat* matP ) -{ - double A[3][3], RR[3][3], k[8]={0,0,0,0,0,0,0,0}, fx, fy, ifx, ify, cx, cy; - CvMat matA=cvMat(3, 3, CV_64F, A), _Dk; - CvMat _RR=cvMat(3, 3, CV_64F, RR); - const CvPoint2D32f* srcf; - const CvPoint2D64f* srcd; - CvPoint2D32f* dstf; - CvPoint2D64f* dstd; - int stype, dtype; - int sstep, dstep; - int i, j, n, iters = 1; - - CV_Assert( CV_IS_MAT(_src) && CV_IS_MAT(_dst) && - (_src->rows == 1 || _src->cols == 1) && - (_dst->rows == 1 || _dst->cols == 1) && - _src->cols + _src->rows - 1 == _dst->rows + _dst->cols - 1 && - (CV_MAT_TYPE(_src->type) == CV_32FC2 || CV_MAT_TYPE(_src->type) == CV_64FC2) && - (CV_MAT_TYPE(_dst->type) == CV_32FC2 || CV_MAT_TYPE(_dst->type) == CV_64FC2)); - - CV_Assert( CV_IS_MAT(_cameraMatrix) && - _cameraMatrix->rows == 3 && _cameraMatrix->cols == 3 ); - - cvConvert( _cameraMatrix, &matA ); - - if( _distCoeffs ) - { - CV_Assert( CV_IS_MAT(_distCoeffs) && - (_distCoeffs->rows == 1 || _distCoeffs->cols == 1) && - (_distCoeffs->rows*_distCoeffs->cols == 4 || - _distCoeffs->rows*_distCoeffs->cols == 5 || - _distCoeffs->rows*_distCoeffs->cols == 8)); - - _Dk = cvMat( _distCoeffs->rows, _distCoeffs->cols, - CV_MAKETYPE(CV_64F,CV_MAT_CN(_distCoeffs->type)), k); - - cvConvert( _distCoeffs, &_Dk ); - iters = 5; - } - - if( matR ) - { - CV_Assert( CV_IS_MAT(matR) && matR->rows == 3 && matR->cols == 3 ); - cvConvert( matR, &_RR ); - } - else - cvSetIdentity(&_RR); - - if( matP ) - { - double PP[3][3]; - CvMat _P3x3, _PP=cvMat(3, 3, CV_64F, PP); - CV_Assert( CV_IS_MAT(matP) && matP->rows == 3 && (matP->cols == 3 || matP->cols == 4)); - cvConvert( cvGetCols(matP, &_P3x3, 0, 3), &_PP ); - cvMatMul( &_PP, &_RR, &_RR ); - } - - srcf = (const CvPoint2D32f*)_src->data.ptr; - srcd = (const CvPoint2D64f*)_src->data.ptr; - dstf = (CvPoint2D32f*)_dst->data.ptr; - dstd = (CvPoint2D64f*)_dst->data.ptr; - stype = CV_MAT_TYPE(_src->type); - dtype = CV_MAT_TYPE(_dst->type); - sstep = _src->rows == 1 ? 1 : _src->step/CV_ELEM_SIZE(stype); - dstep = _dst->rows == 1 ? 1 : _dst->step/CV_ELEM_SIZE(dtype); - - n = _src->rows + _src->cols - 1; - - fx = A[0][0]; - fy = A[1][1]; - ifx = 1./fx; - ify = 1./fy; - cx = A[0][2]; - cy = A[1][2]; - - for( i = 0; i < n; i++ ) - { - double x, y, x0, y0; - if( stype == CV_32FC2 ) - { - x = srcf[i*sstep].x; - y = srcf[i*sstep].y; - } - else - { - x = srcd[i*sstep].x; - y = srcd[i*sstep].y; - } - - x0 = x = (x - cx)*ifx; - y0 = y = (y - cy)*ify; - - // compensate distortion iteratively - for( j = 0; j < iters; j++ ) - { - double r2 = x*x + y*y; - double icdist = (1 + ((k[7]*r2 + k[6])*r2 + k[5])*r2)/(1 + ((k[4]*r2 + k[1])*r2 + k[0])*r2); - double deltaX = 2*k[2]*x*y + k[3]*(r2 + 2*x*x); - double deltaY = k[2]*(r2 + 2*y*y) + 2*k[3]*x*y; - x = (x0 - deltaX)*icdist; - y = (y0 - deltaY)*icdist; - } - - double xx = RR[0][0]*x + RR[0][1]*y + RR[0][2]; - double yy = RR[1][0]*x + RR[1][1]*y + RR[1][2]; - double ww = 1./(RR[2][0]*x + RR[2][1]*y + RR[2][2]); - x = xx*ww; - y = yy*ww; - - if( dtype == CV_32FC2 ) - { - dstf[i*dstep].x = (float)x; - dstf[i*dstep].y = (float)y; - } - else - { - dstd[i*dstep].x = x; - dstd[i*dstep].y = y; - } - } -} - - -void cv::undistortPoints( InputArray _src, OutputArray _dst, - InputArray _cameraMatrix, - InputArray _distCoeffs, - InputArray _Rmat, - InputArray _Pmat ) -{ - Mat src = _src.getMat(), cameraMatrix = _cameraMatrix.getMat(); - Mat distCoeffs = _distCoeffs.getMat(), R = _Rmat.getMat(), P = _Pmat.getMat(); - - CV_Assert( src.isContinuous() && (src.depth() == CV_32F || src.depth() == CV_64F) && - ((src.rows == 1 && src.channels() == 2) || src.cols*src.channels() == 2)); - - _dst.create(src.size(), src.type(), -1, true); - Mat dst = _dst.getMat(); - - CvMat _csrc = src, _cdst = dst, _ccameraMatrix = cameraMatrix; - CvMat matR, matP, _cdistCoeffs, *pR=0, *pP=0, *pD=0; - if( R.data ) - pR = &(matR = R); - if( P.data ) - pP = &(matP = P); - if( distCoeffs.data ) - pD = &(_cdistCoeffs = distCoeffs); - cvUndistortPoints(&_csrc, &_cdst, &_ccameraMatrix, pD, pR, pP); -} - -namespace cv -{ - -static Point2f mapPointSpherical(const Point2f& p, float alpha, Vec4d* J, int projType) -{ - double x = p.x, y = p.y; - double beta = 1 + 2*alpha; - double v = x*x + y*y + 1, iv = 1/v; - double u = sqrt(beta*v + alpha*alpha); - - double k = (u - alpha)*iv; - double kv = (v*beta/u - (u - alpha)*2)*iv*iv; - double kx = kv*x, ky = kv*y; - - if( projType == PROJ_SPHERICAL_ORTHO ) - { - if(J) - *J = Vec4d(kx*x + k, kx*y, ky*x, ky*y + k); - return Point2f((float)(x*k), (float)(y*k)); - } - if( projType == PROJ_SPHERICAL_EQRECT ) - { - // equirectangular - double iR = 1/(alpha + 1); - double x1 = std::max(std::min(x*k*iR, 1.), -1.); - double y1 = std::max(std::min(y*k*iR, 1.), -1.); - - if(J) - { - double fx1 = iR/sqrt(1 - x1*x1); - double fy1 = iR/sqrt(1 - y1*y1); - *J = Vec4d(fx1*(kx*x + k), fx1*ky*x, fy1*kx*y, fy1*(ky*y + k)); - } - return Point2f((float)asin(x1), (float)asin(y1)); - } - CV_Error(CV_StsBadArg, "Unknown projection type"); - return Point2f(); -} - - -static Point2f invMapPointSpherical(Point2f _p, float alpha, int projType) -{ - static int avgiter = 0, avgn = 0; - - double eps = 1e-12; - Vec2d p(_p.x, _p.y), q(_p.x, _p.y), err; - Vec4d J; - int i, maxiter = 5; - - for( i = 0; i < maxiter; i++ ) - { - Point2f p1 = mapPointSpherical(Point2f((float)q[0], (float)q[1]), alpha, &J, projType); - err = Vec2d(p1.x, p1.y) - p; - if( err[0]*err[0] + err[1]*err[1] < eps ) - break; - - Vec4d JtJ(J[0]*J[0] + J[2]*J[2], J[0]*J[1] + J[2]*J[3], - J[0]*J[1] + J[2]*J[3], J[1]*J[1] + J[3]*J[3]); - double d = JtJ[0]*JtJ[3] - JtJ[1]*JtJ[2]; - d = d ? 1./d : 0; - Vec4d iJtJ(JtJ[3]*d, -JtJ[1]*d, -JtJ[2]*d, JtJ[0]*d); - Vec2d JtErr(J[0]*err[0] + J[2]*err[1], J[1]*err[0] + J[3]*err[1]); - - q -= Vec2d(iJtJ[0]*JtErr[0] + iJtJ[1]*JtErr[1], iJtJ[2]*JtErr[0] + iJtJ[3]*JtErr[1]); - //Matx22d J(kx*x + k, kx*y, ky*x, ky*y + k); - //q -= Vec2d((J.t()*J).inv()*(J.t()*err)); - } - - if( i < maxiter ) - { - avgiter += i; - avgn++; - if( avgn == 1500 ) - printf("avg iters = %g\n", (double)avgiter/avgn); - } - - return i < maxiter ? Point2f((float)q[0], (float)q[1]) : Point2f(-FLT_MAX, -FLT_MAX); -} - -} - -float cv::initWideAngleProjMap( InputArray _cameraMatrix0, InputArray _distCoeffs0, - Size imageSize, int destImageWidth, int m1type, - OutputArray _map1, OutputArray _map2, int projType, double _alpha ) -{ - Mat cameraMatrix0 = _cameraMatrix0.getMat(), distCoeffs0 = _distCoeffs0.getMat(); - double k[8] = {0,0,0,0,0,0,0,0}, M[9]={0,0,0,0,0,0,0,0,0}; - Mat distCoeffs(distCoeffs0.rows, distCoeffs0.cols, CV_MAKETYPE(CV_64F,distCoeffs0.channels()), k); - Mat cameraMatrix(3,3,CV_64F,M); - Point2f scenter((float)cameraMatrix.at(0,2), (float)cameraMatrix.at(1,2)); - Point2f dcenter((destImageWidth-1)*0.5f, 0.f); - float xmin = FLT_MAX, xmax = -FLT_MAX, ymin = FLT_MAX, ymax = -FLT_MAX; - int N = 9; - std::vector uvec(1), vvec(1); - Mat I = Mat::eye(3,3,CV_64F); - float alpha = (float)_alpha; - - int ndcoeffs = distCoeffs0.cols*distCoeffs0.rows*distCoeffs0.channels(); - CV_Assert((distCoeffs0.cols == 1 || distCoeffs0.rows == 1) && - (ndcoeffs == 4 || ndcoeffs == 5 || ndcoeffs == 8)); - CV_Assert(cameraMatrix0.size() == Size(3,3)); - distCoeffs0.convertTo(distCoeffs,CV_64F); - cameraMatrix0.convertTo(cameraMatrix,CV_64F); - - alpha = std::min(alpha, 0.999f); - - for( int i = 0; i < N; i++ ) - for( int j = 0; j < N; j++ ) - { - Point2f p((float)j*imageSize.width/(N-1), (float)i*imageSize.height/(N-1)); - uvec[0] = p; - undistortPoints(uvec, vvec, cameraMatrix, distCoeffs, I, I); - Point2f q = mapPointSpherical(vvec[0], alpha, 0, projType); - if( xmin > q.x ) xmin = q.x; - if( xmax < q.x ) xmax = q.x; - if( ymin > q.y ) ymin = q.y; - if( ymax < q.y ) ymax = q.y; - } - - float scale = (float)std::min(dcenter.x/fabs(xmax), dcenter.x/fabs(xmin)); - Size dsize(destImageWidth, cvCeil(std::max(scale*fabs(ymin)*2, scale*fabs(ymax)*2))); - dcenter.y = (dsize.height - 1)*0.5f; - - Mat mapxy(dsize, CV_32FC2); - double k1 = k[0], k2 = k[1], k3 = k[2], p1 = k[3], p2 = k[4], k4 = k[5], k5 = k[6], k6 = k[7]; - double fx = cameraMatrix.at(0,0), fy = cameraMatrix.at(1,1), cx = scenter.x, cy = scenter.y; - - for( int y = 0; y < dsize.height; y++ ) - { - Point2f* mxy = mapxy.ptr(y); - for( int x = 0; x < dsize.width; x++ ) - { - Point2f p = (Point2f((float)x, (float)y) - dcenter)*(1.f/scale); - Point2f q = invMapPointSpherical(p, alpha, projType); - if( q.x <= -FLT_MAX && q.y <= -FLT_MAX ) - { - mxy[x] = Point2f(-1.f, -1.f); - continue; - } - double x2 = q.x*q.x, y2 = q.y*q.y; - double r2 = x2 + y2, _2xy = 2*q.x*q.y; - double kr = 1 + ((k3*r2 + k2)*r2 + k1)*r2/(1 + ((k6*r2 + k5)*r2 + k4)*r2); - double u = fx*(q.x*kr + p1*_2xy + p2*(r2 + 2*x2)) + cx; - double v = fy*(q.y*kr + p1*(r2 + 2*y2) + p2*_2xy) + cy; - - mxy[x] = Point2f((float)u, (float)v); - } - } - - if(m1type == CV_32FC2) - { - _map1.create(mapxy.size(), mapxy.type()); - Mat map1 = _map1.getMat(); - mapxy.copyTo(map1); - _map2.release(); - } - else - convertMaps(mapxy, Mat(), _map1, _map2, m1type, false); - - return scale; -} - -/* End of file */ diff --git a/modules/imgproc/src/utils.cpp b/modules/imgproc/src/utils.cpp deleted file mode 100644 index 72f4978..0000000 --- a/modules/imgproc/src/utils.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -CV_IMPL CvSeq* cvPointSeqFromMat( int seq_kind, const CvArr* arr, - CvContour* contour_header, CvSeqBlock* block ) -{ - CV_Assert( arr != 0 && contour_header != 0 && block != 0 ); - - int eltype; - CvMat hdr; - CvMat* mat = (CvMat*)arr; - - if( !CV_IS_MAT( mat )) - CV_Error( CV_StsBadArg, "Input array is not a valid matrix" ); - - if( CV_MAT_CN(mat->type) == 1 && mat->width == 2 ) - mat = cvReshape(mat, &hdr, 2); - - eltype = CV_MAT_TYPE( mat->type ); - if( eltype != CV_32SC2 && eltype != CV_32FC2 ) - CV_Error( CV_StsUnsupportedFormat, - "The matrix can not be converted to point sequence because of " - "inappropriate element type" ); - - if( (mat->width != 1 && mat->height != 1) || !CV_IS_MAT_CONT(mat->type)) - CV_Error( CV_StsBadArg, - "The matrix converted to point sequence must be " - "1-dimensional and continuous" ); - - cvMakeSeqHeaderForArray( - (seq_kind & (CV_SEQ_KIND_MASK|CV_SEQ_FLAG_CLOSED)) | eltype, - sizeof(CvContour), CV_ELEM_SIZE(eltype), mat->data.ptr, - mat->width*mat->height, (CvSeq*)contour_header, block ); - - return (CvSeq*)contour_header; -} - -namespace cv -{ - -static void copyMakeBorder_8u( const uchar* src, size_t srcstep, Size srcroi, - uchar* dst, size_t dststep, Size dstroi, - int top, int left, int cn, int borderType ) -{ - const int isz = (int)sizeof(int); - int i, j, k, elemSize = 1; - bool intMode = false; - - if( (cn | srcstep | dststep | (size_t)src | (size_t)dst) % isz == 0 ) - { - cn /= isz; - elemSize = isz; - intMode = true; - } - - AutoBuffer _tab((dstroi.width - srcroi.width)*cn); - int* tab = _tab; - int right = dstroi.width - srcroi.width - left; - int bottom = dstroi.height - srcroi.height - top; - - for( i = 0; i < left; i++ ) - { - j = borderInterpolate(i - left, srcroi.width, borderType)*cn; - for( k = 0; k < cn; k++ ) - tab[i*cn + k] = j + k; - } - - for( i = 0; i < right; i++ ) - { - j = borderInterpolate(srcroi.width + i, srcroi.width, borderType)*cn; - for( k = 0; k < cn; k++ ) - tab[(i+left)*cn + k] = j + k; - } - - srcroi.width *= cn; - dstroi.width *= cn; - left *= cn; - right *= cn; - - uchar* dstInner = dst + dststep*top + left*elemSize; - - for( i = 0; i < srcroi.height; i++, dstInner += dststep, src += srcstep ) - { - if( dstInner != src ) - memcpy(dstInner, src, srcroi.width*elemSize); - - if( intMode ) - { - const int* isrc = (int*)src; - int* idstInner = (int*)dstInner; - for( j = 0; j < left; j++ ) - idstInner[j - left] = isrc[tab[j]]; - for( j = 0; j < right; j++ ) - idstInner[j + srcroi.width] = isrc[tab[j + left]]; - } - else - { - for( j = 0; j < left; j++ ) - dstInner[j - left] = src[tab[j]]; - for( j = 0; j < right; j++ ) - dstInner[j + srcroi.width] = src[tab[j + left]]; - } - } - - dstroi.width *= elemSize; - dst += dststep*top; - - for( i = 0; i < top; i++ ) - { - j = borderInterpolate(i - top, srcroi.height, borderType); - memcpy(dst + (i - top)*dststep, dst + j*dststep, dstroi.width); - } - - for( i = 0; i < bottom; i++ ) - { - j = borderInterpolate(i + srcroi.height, srcroi.height, borderType); - memcpy(dst + (i + srcroi.height)*dststep, dst + j*dststep, dstroi.width); - } -} - - -static void copyMakeConstBorder_8u( const uchar* src, size_t srcstep, Size srcroi, - uchar* dst, size_t dststep, Size dstroi, - int top, int left, int cn, const uchar* value ) -{ - int i, j; - AutoBuffer _constBuf(dstroi.width*cn); - uchar* constBuf = _constBuf; - int right = dstroi.width - srcroi.width - left; - int bottom = dstroi.height - srcroi.height - top; - - for( i = 0; i < dstroi.width; i++ ) - { - for( j = 0; j < cn; j++ ) - constBuf[i*cn + j] = value[j]; - } - - srcroi.width *= cn; - dstroi.width *= cn; - left *= cn; - right *= cn; - - uchar* dstInner = dst + dststep*top + left; - - for( i = 0; i < srcroi.height; i++, dstInner += dststep, src += srcstep ) - { - if( dstInner != src ) - memcpy( dstInner, src, srcroi.width ); - memcpy( dstInner - left, constBuf, left ); - memcpy( dstInner + srcroi.width, constBuf, right ); - } - - dst += dststep*top; - - for( i = 0; i < top; i++ ) - memcpy(dst + (i - top)*dststep, constBuf, dstroi.width); - - for( i = 0; i < bottom; i++ ) - memcpy(dst + (i + srcroi.height)*dststep, constBuf, dstroi.width); -} - -} - -void cv::copyMakeBorder( InputArray _src, OutputArray _dst, int top, int bottom, - int left, int right, int borderType, const Scalar& value ) -{ - Mat src = _src.getMat(); - CV_Assert( top >= 0 && bottom >= 0 && left >= 0 && right >= 0 ); - - if( src.isSubmatrix() && (borderType & BORDER_ISOLATED) == 0 ) - { - Size wholeSize; - Point ofs; - src.locateROI(wholeSize, ofs); - int dtop = std::min(ofs.y, top); - int dbottom = std::min(wholeSize.height - src.rows - ofs.y, bottom); - int dleft = std::min(ofs.x, left); - int dright = std::min(wholeSize.width - src.cols - ofs.x, right); - src.adjustROI(dtop, dbottom, dleft, dright); - top -= dtop; - left -= dleft; - bottom -= dbottom; - right -= dright; - } - - _dst.create( src.rows + top + bottom, src.cols + left + right, src.type() ); - Mat dst = _dst.getMat(); - - if(top == 0 && left == 0 && bottom == 0 && right == 0) - { - if(src.data != dst.data || src.step != dst.step) - src.copyTo(dst); - return; - } - - borderType &= ~BORDER_ISOLATED; - - if( borderType != BORDER_CONSTANT ) - copyMakeBorder_8u( src.data, src.step, src.size(), - dst.data, dst.step, dst.size(), - top, left, (int)src.elemSize(), borderType ); - else - { - int cn = src.channels(), cn1 = cn; - AutoBuffer buf(cn); - if( cn > 4 ) - { - CV_Assert( value[0] == value[1] && value[0] == value[2] && value[0] == value[3] ); - cn1 = 1; - } - scalarToRawData(value, buf, CV_MAKETYPE(src.depth(), cn1), cn); - copyMakeConstBorder_8u( src.data, src.step, src.size(), - dst.data, dst.step, dst.size(), - top, left, (int)src.elemSize(), (uchar*)(double*)buf ); - } -} - - -double cv::PSNR(InputArray _src1, InputArray _src2) -{ - Mat src1 = _src1.getMat(), src2 = _src2.getMat(); - CV_Assert( src1.depth() == CV_8U ); - double diff = std::sqrt(norm(src1, src2, NORM_L2SQR)/(src1.total()*src1.channels())); - return 20*log10(255./(diff+DBL_EPSILON)); -} - - -CV_IMPL void -cvCopyMakeBorder( const CvArr* srcarr, CvArr* dstarr, CvPoint offset, - int borderType, CvScalar value ) -{ - cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); - int left = offset.x, right = dst.cols - src.cols - left; - int top = offset.y, bottom = dst.rows - src.rows - top; - - CV_Assert( dst.type() == src.type() ); - cv::copyMakeBorder( src, dst, top, bottom, left, right, borderType, value ); -} - -/* End of file. */ diff --git a/modules/ml/CMakeLists.txt b/modules/ml/CMakeLists.txt deleted file mode 100644 index 27b4990..0000000 --- a/modules/ml/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "Machine Learning") -ocv_define_module(ml opencv_core) diff --git a/modules/ml/include/opencv2/ml/ml.hpp b/modules/ml/include/opencv2/ml/ml.hpp deleted file mode 100644 index d86ecde..0000000 --- a/modules/ml/include/opencv2/ml/ml.hpp +++ /dev/null @@ -1,2147 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_ML_HPP__ -#define __OPENCV_ML_HPP__ - -#include "opencv2/core/core.hpp" -#include - -#ifdef __cplusplus - -#include -#include -#include - -// Apple defines a check() macro somewhere in the debug headers -// that interferes with a method definiton in this header -#undef check - -/****************************************************************************************\ -* Main struct definitions * -\****************************************************************************************/ - -/* log(2*PI) */ -#define CV_LOG2PI (1.8378770664093454835606594728112) - -/* columns of matrix are training samples */ -#define CV_COL_SAMPLE 0 - -/* rows of matrix are training samples */ -#define CV_ROW_SAMPLE 1 - -#define CV_IS_ROW_SAMPLE(flags) ((flags) & CV_ROW_SAMPLE) - -struct CvVectors -{ - int type; - int dims, count; - CvVectors* next; - union - { - uchar** ptr; - float** fl; - double** db; - } data; -}; - -#if 0 -/* A structure, representing the lattice range of statmodel parameters. - It is used for optimizing statmodel parameters by cross-validation method. - The lattice is logarithmic, so must be greater then 1. */ -typedef struct CvParamLattice -{ - double min_val; - double max_val; - double step; -} -CvParamLattice; - -CV_INLINE CvParamLattice cvParamLattice( double min_val, double max_val, - double log_step ) -{ - CvParamLattice pl; - pl.min_val = MIN( min_val, max_val ); - pl.max_val = MAX( min_val, max_val ); - pl.step = MAX( log_step, 1. ); - return pl; -} - -CV_INLINE CvParamLattice cvDefaultParamLattice( void ) -{ - CvParamLattice pl = {0,0,0}; - return pl; -} -#endif - -/* Variable type */ -#define CV_VAR_NUMERICAL 0 -#define CV_VAR_ORDERED 0 -#define CV_VAR_CATEGORICAL 1 - -#define CV_TYPE_NAME_ML_SVM "opencv-ml-svm" -#define CV_TYPE_NAME_ML_KNN "opencv-ml-knn" -#define CV_TYPE_NAME_ML_NBAYES "opencv-ml-bayesian" -#define CV_TYPE_NAME_ML_EM "opencv-ml-em" -#define CV_TYPE_NAME_ML_BOOSTING "opencv-ml-boost-tree" -#define CV_TYPE_NAME_ML_TREE "opencv-ml-tree" -#define CV_TYPE_NAME_ML_ANN_MLP "opencv-ml-ann-mlp" -#define CV_TYPE_NAME_ML_CNN "opencv-ml-cnn" -#define CV_TYPE_NAME_ML_RTREES "opencv-ml-random-trees" -#define CV_TYPE_NAME_ML_ERTREES "opencv-ml-extremely-randomized-trees" -#define CV_TYPE_NAME_ML_GBT "opencv-ml-gradient-boosting-trees" - -#define CV_TRAIN_ERROR 0 -#define CV_TEST_ERROR 1 - -class CV_EXPORTS_W CvStatModel -{ -public: - CvStatModel(); - virtual ~CvStatModel(); - - virtual void clear(); - - CV_WRAP virtual void save( const char* filename, const char* name=0 ) const; - CV_WRAP virtual void load( const char* filename, const char* name=0 ); - - virtual void write( CvFileStorage* storage, const char* name ) const; - virtual void read( CvFileStorage* storage, CvFileNode* node ); - -protected: - const char* default_model_name; -}; - -/****************************************************************************************\ -* Normal Bayes Classifier * -\****************************************************************************************/ - -/* The structure, representing the grid range of statmodel parameters. - It is used for optimizing statmodel accuracy by varying model parameters, - the accuracy estimate being computed by cross-validation. - The grid is logarithmic, so must be greater then 1. */ - -class CvMLData; - -struct CV_EXPORTS_W_MAP CvParamGrid -{ - // SVM params type - enum { SVM_C=0, SVM_GAMMA=1, SVM_P=2, SVM_NU=3, SVM_COEF=4, SVM_DEGREE=5 }; - - CvParamGrid() - { - min_val = max_val = step = 0; - } - - CvParamGrid( double min_val, double max_val, double log_step ); - //CvParamGrid( int param_id ); - bool check() const; - - CV_PROP_RW double min_val; - CV_PROP_RW double max_val; - CV_PROP_RW double step; -}; - -inline CvParamGrid::CvParamGrid( double _min_val, double _max_val, double _log_step ) -{ - min_val = _min_val; - max_val = _max_val; - step = _log_step; -} - -class CV_EXPORTS_W CvNormalBayesClassifier : public CvStatModel -{ -public: - CV_WRAP CvNormalBayesClassifier(); - virtual ~CvNormalBayesClassifier(); - - CvNormalBayesClassifier( const CvMat* trainData, const CvMat* responses, - const CvMat* varIdx=0, const CvMat* sampleIdx=0 ); - - virtual bool train( const CvMat* trainData, const CvMat* responses, - const CvMat* varIdx = 0, const CvMat* sampleIdx=0, bool update=false ); - - virtual float predict( const CvMat* samples, CV_OUT CvMat* results=0 ) const; - CV_WRAP virtual void clear(); - - CV_WRAP CvNormalBayesClassifier( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat() ); - CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& varIdx = cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(), - bool update=false ); - CV_WRAP virtual float predict( const cv::Mat& samples, CV_OUT cv::Mat* results=0 ) const; - - virtual void write( CvFileStorage* storage, const char* name ) const; - virtual void read( CvFileStorage* storage, CvFileNode* node ); - -protected: - int var_count, var_all; - CvMat* var_idx; - CvMat* cls_labels; - CvMat** count; - CvMat** sum; - CvMat** productsum; - CvMat** avg; - CvMat** inv_eigen_values; - CvMat** cov_rotate_mats; - CvMat* c; -}; - - -/****************************************************************************************\ -* K-Nearest Neighbour Classifier * -\****************************************************************************************/ - -// k Nearest Neighbors -class CV_EXPORTS_W CvKNearest : public CvStatModel -{ -public: - - CV_WRAP CvKNearest(); - virtual ~CvKNearest(); - - CvKNearest( const CvMat* trainData, const CvMat* responses, - const CvMat* sampleIdx=0, bool isRegression=false, int max_k=32 ); - - virtual bool train( const CvMat* trainData, const CvMat* responses, - const CvMat* sampleIdx=0, bool is_regression=false, - int maxK=32, bool updateBase=false ); - - virtual float find_nearest( const CvMat* samples, int k, CV_OUT CvMat* results=0, - const float** neighbors=0, CV_OUT CvMat* neighborResponses=0, CV_OUT CvMat* dist=0 ) const; - - CV_WRAP CvKNearest( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false, int max_k=32 ); - - CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& sampleIdx=cv::Mat(), bool isRegression=false, - int maxK=32, bool updateBase=false ); - - virtual float find_nearest( const cv::Mat& samples, int k, cv::Mat* results=0, - const float** neighbors=0, cv::Mat* neighborResponses=0, - cv::Mat* dist=0 ) const; - CV_WRAP virtual float find_nearest( const cv::Mat& samples, int k, CV_OUT cv::Mat& results, - CV_OUT cv::Mat& neighborResponses, CV_OUT cv::Mat& dists) const; - - virtual void clear(); - int get_max_k() const; - int get_var_count() const; - int get_sample_count() const; - bool is_regression() const; - - virtual float write_results( int k, int k1, int start, int end, - const float* neighbor_responses, const float* dist, CvMat* _results, - CvMat* _neighbor_responses, CvMat* _dist, Cv32suf* sort_buf ) const; - - virtual void find_neighbors_direct( const CvMat* _samples, int k, int start, int end, - float* neighbor_responses, const float** neighbors, float* dist ) const; - -protected: - - int max_k, var_count; - int total; - bool regression; - CvVectors* samples; -}; - -/****************************************************************************************\ -* Support Vector Machines * -\****************************************************************************************/ - -// SVM training parameters -struct CV_EXPORTS_W_MAP CvSVMParams -{ - CvSVMParams(); - CvSVMParams( int svm_type, int kernel_type, - double degree, double gamma, double coef0, - double Cvalue, double nu, double p, - CvMat* class_weights, CvTermCriteria term_crit ); - - CV_PROP_RW int svm_type; - CV_PROP_RW int kernel_type; - CV_PROP_RW double degree; // for poly - CV_PROP_RW double gamma; // for poly/rbf/sigmoid - CV_PROP_RW double coef0; // for poly/sigmoid - - CV_PROP_RW double C; // for CV_SVM_C_SVC, CV_SVM_EPS_SVR and CV_SVM_NU_SVR - CV_PROP_RW double nu; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR - CV_PROP_RW double p; // for CV_SVM_EPS_SVR - CvMat* class_weights; // for CV_SVM_C_SVC - CV_PROP_RW CvTermCriteria term_crit; // termination criteria -}; - - -struct CV_EXPORTS CvSVMKernel -{ - typedef void (CvSVMKernel::*Calc)( int vec_count, int vec_size, const float** vecs, - const float* another, float* results ); - CvSVMKernel(); - CvSVMKernel( const CvSVMParams* params, Calc _calc_func ); - virtual bool create( const CvSVMParams* params, Calc _calc_func ); - virtual ~CvSVMKernel(); - - virtual void clear(); - virtual void calc( int vcount, int n, const float** vecs, const float* another, float* results ); - - const CvSVMParams* params; - Calc calc_func; - - virtual void calc_non_rbf_base( int vec_count, int vec_size, const float** vecs, - const float* another, float* results, - double alpha, double beta ); - - virtual void calc_linear( int vec_count, int vec_size, const float** vecs, - const float* another, float* results ); - virtual void calc_rbf( int vec_count, int vec_size, const float** vecs, - const float* another, float* results ); - virtual void calc_poly( int vec_count, int vec_size, const float** vecs, - const float* another, float* results ); - virtual void calc_sigmoid( int vec_count, int vec_size, const float** vecs, - const float* another, float* results ); -}; - - -struct CvSVMKernelRow -{ - CvSVMKernelRow* prev; - CvSVMKernelRow* next; - float* data; -}; - - -struct CvSVMSolutionInfo -{ - double obj; - double rho; - double upper_bound_p; - double upper_bound_n; - double r; // for Solver_NU -}; - -class CV_EXPORTS CvSVMSolver -{ -public: - typedef bool (CvSVMSolver::*SelectWorkingSet)( int& i, int& j ); - typedef float* (CvSVMSolver::*GetRow)( int i, float* row, float* dst, bool existed ); - typedef void (CvSVMSolver::*CalcRho)( double& rho, double& r ); - - CvSVMSolver(); - - CvSVMSolver( int count, int var_count, const float** samples, schar* y, - int alpha_count, double* alpha, double Cp, double Cn, - CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row, - SelectWorkingSet select_working_set, CalcRho calc_rho ); - virtual bool create( int count, int var_count, const float** samples, schar* y, - int alpha_count, double* alpha, double Cp, double Cn, - CvMemStorage* storage, CvSVMKernel* kernel, GetRow get_row, - SelectWorkingSet select_working_set, CalcRho calc_rho ); - virtual ~CvSVMSolver(); - - virtual void clear(); - virtual bool solve_generic( CvSVMSolutionInfo& si ); - - virtual bool solve_c_svc( int count, int var_count, const float** samples, schar* y, - double Cp, double Cn, CvMemStorage* storage, - CvSVMKernel* kernel, double* alpha, CvSVMSolutionInfo& si ); - virtual bool solve_nu_svc( int count, int var_count, const float** samples, schar* y, - CvMemStorage* storage, CvSVMKernel* kernel, - double* alpha, CvSVMSolutionInfo& si ); - virtual bool solve_one_class( int count, int var_count, const float** samples, - CvMemStorage* storage, CvSVMKernel* kernel, - double* alpha, CvSVMSolutionInfo& si ); - - virtual bool solve_eps_svr( int count, int var_count, const float** samples, const float* y, - CvMemStorage* storage, CvSVMKernel* kernel, - double* alpha, CvSVMSolutionInfo& si ); - - virtual bool solve_nu_svr( int count, int var_count, const float** samples, const float* y, - CvMemStorage* storage, CvSVMKernel* kernel, - double* alpha, CvSVMSolutionInfo& si ); - - virtual float* get_row_base( int i, bool* _existed ); - virtual float* get_row( int i, float* dst ); - - int sample_count; - int var_count; - int cache_size; - int cache_line_size; - const float** samples; - const CvSVMParams* params; - CvMemStorage* storage; - CvSVMKernelRow lru_list; - CvSVMKernelRow* rows; - - int alpha_count; - - double* G; - double* alpha; - - // -1 - lower bound, 0 - free, 1 - upper bound - schar* alpha_status; - - schar* y; - double* b; - float* buf[2]; - double eps; - int max_iter; - double C[2]; // C[0] == Cn, C[1] == Cp - CvSVMKernel* kernel; - - SelectWorkingSet select_working_set_func; - CalcRho calc_rho_func; - GetRow get_row_func; - - virtual bool select_working_set( int& i, int& j ); - virtual bool select_working_set_nu_svm( int& i, int& j ); - virtual void calc_rho( double& rho, double& r ); - virtual void calc_rho_nu_svm( double& rho, double& r ); - - virtual float* get_row_svc( int i, float* row, float* dst, bool existed ); - virtual float* get_row_one_class( int i, float* row, float* dst, bool existed ); - virtual float* get_row_svr( int i, float* row, float* dst, bool existed ); -}; - - -struct CvSVMDecisionFunc -{ - double rho; - int sv_count; - double* alpha; - int* sv_index; -}; - - -// SVM model -class CV_EXPORTS_W CvSVM : public CvStatModel -{ -public: - // SVM type - enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 }; - - // SVM kernel type - enum { LINEAR=0, POLY=1, RBF=2, SIGMOID=3 }; - - // SVM params type - enum { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 }; - - CV_WRAP CvSVM(); - virtual ~CvSVM(); - - CvSVM( const CvMat* trainData, const CvMat* responses, - const CvMat* varIdx=0, const CvMat* sampleIdx=0, - CvSVMParams params=CvSVMParams() ); - - virtual bool train( const CvMat* trainData, const CvMat* responses, - const CvMat* varIdx=0, const CvMat* sampleIdx=0, - CvSVMParams params=CvSVMParams() ); - - virtual bool train_auto( const CvMat* trainData, const CvMat* responses, - const CvMat* varIdx, const CvMat* sampleIdx, CvSVMParams params, - int kfold = 10, - CvParamGrid Cgrid = get_default_grid(CvSVM::C), - CvParamGrid gammaGrid = get_default_grid(CvSVM::GAMMA), - CvParamGrid pGrid = get_default_grid(CvSVM::P), - CvParamGrid nuGrid = get_default_grid(CvSVM::NU), - CvParamGrid coeffGrid = get_default_grid(CvSVM::COEF), - CvParamGrid degreeGrid = get_default_grid(CvSVM::DEGREE), - bool balanced=false ); - - virtual float predict( const CvMat* sample, bool returnDFVal=false ) const; - virtual float predict( const CvMat* samples, CV_OUT CvMat* results ) const; - - CV_WRAP CvSVM( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(), - CvSVMParams params=CvSVMParams() ); - - CV_WRAP virtual bool train( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& varIdx=cv::Mat(), const cv::Mat& sampleIdx=cv::Mat(), - CvSVMParams params=CvSVMParams() ); - - CV_WRAP virtual bool train_auto( const cv::Mat& trainData, const cv::Mat& responses, - const cv::Mat& varIdx, const cv::Mat& sampleIdx, CvSVMParams params, - int k_fold = 10, - CvParamGrid Cgrid = CvSVM::get_default_grid(CvSVM::C), - CvParamGrid gammaGrid = CvSVM::get_default_grid(CvSVM::GAMMA), - CvParamGrid pGrid = CvSVM::get_default_grid(CvSVM::P), - CvParamGrid nuGrid = CvSVM::get_default_grid(CvSVM::NU), - CvParamGrid coeffGrid = CvSVM::get_default_grid(CvSVM::COEF), - CvParamGrid degreeGrid = CvSVM::get_default_grid(CvSVM::DEGREE), - bool balanced=false); - CV_WRAP virtual float predict( const cv::Mat& sample, bool returnDFVal=false ) const; - CV_WRAP_AS(predict_all) void predict( cv::InputArray samples, cv::OutputArray results ) const; - - CV_WRAP virtual int get_support_vector_count() const; - virtual const float* get_support_vector(int i) const; - virtual CvSVMParams get_params() const { return params; }; - CV_WRAP virtual void clear(); - - static CvParamGrid get_default_grid( int param_id ); - - virtual void write( CvFileStorage* storage, const char* name ) const; - virtual void read( CvFileStorage* storage, CvFileNode* node ); - CV_WRAP int get_var_count() const { return var_idx ? var_idx->cols : var_all; } - -protected: - - virtual bool set_params( const CvSVMParams& params ); - virtual bool train1( int sample_count, int var_count, const float** samples, - const void* responses, double Cp, double Cn, - CvMemStorage* _storage, double* alpha, double& rho ); - virtual bool do_train( int svm_type, int sample_count, int var_count, const float** samples, - const CvMat* responses, CvMemStorage* _storage, double* alpha ); - virtual void create_kernel(); - virtual void create_solver(); - - virtual float predict( const float* row_sample, int row_len, bool returnDFVal=false ) const; - - virtual void write_params( CvFileStorage* fs ) const; - virtual void read_params( CvFileStorage* fs, CvFileNode* node ); - - void optimize_linear_svm(); - - CvSVMParams params; - CvMat* class_labels; - int var_all; - float** sv; - int sv_total; - CvMat* var_idx; - CvMat* class_weights; - CvSVMDecisionFunc* decision_func; - CvMemStorage* storage; - - CvSVMSolver* solver; - CvSVMKernel* kernel; - -private: - CvSVM(const CvSVM&); - CvSVM& operator = (const CvSVM&); -}; - -/****************************************************************************************\ -* Expectation - Maximization * -\****************************************************************************************/ -namespace cv -{ -class CV_EXPORTS_W EM : public Algorithm -{ -public: - // Type of covariation matrices - enum {COV_MAT_SPHERICAL=0, COV_MAT_DIAGONAL=1, COV_MAT_GENERIC=2, COV_MAT_DEFAULT=COV_MAT_DIAGONAL}; - - // Default parameters - enum {DEFAULT_NCLUSTERS=5, DEFAULT_MAX_ITERS=100}; - - // The initial step - enum {START_E_STEP=1, START_M_STEP=2, START_AUTO_STEP=0}; - - CV_WRAP EM(int nclusters=EM::DEFAULT_NCLUSTERS, int covMatType=EM::COV_MAT_DIAGONAL, - const TermCriteria& termCrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, - EM::DEFAULT_MAX_ITERS, FLT_EPSILON)); - - virtual ~EM(); - CV_WRAP virtual void clear(); - - CV_WRAP virtual bool train(InputArray samples, - OutputArray logLikelihoods=noArray(), - OutputArray labels=noArray(), - OutputArray probs=noArray()); - - CV_WRAP virtual bool trainE(InputArray samples, - InputArray means0, - InputArray covs0=noArray(), - InputArray weights0=noArray(), - OutputArray logLikelihoods=noArray(), - OutputArray labels=noArray(), - OutputArray probs=noArray()); - - CV_WRAP virtual bool trainM(InputArray samples, - InputArray probs0, - OutputArray logLikelihoods=noArray(), - OutputArray labels=noArray(), - OutputArray probs=noArray()); - - CV_WRAP Vec2d predict(InputArray sample, - OutputArray probs=noArray()) const; - - CV_WRAP bool isTrained() const; - - AlgorithmInfo* info() const; - virtual void read(const FileNode& fn); - -protected: - - virtual void setTrainData(int startStep, const Mat& samples, - const Mat* probs0, - const Mat* means0, - const vector* covs0, - const Mat* weights0); - - bool doTrain(int startStep, - OutputArray logLikelihoods, - OutputArray labels, - OutputArray probs); - virtual void eStep(); - virtual void mStep(); - - void clusterTrainSamples(); - void decomposeCovs(); - void computeLogWeightDivDet(); - - Vec2d computeProbabilities(const Mat& sample, Mat* probs) const; - - // all inner matrices have type CV_64FC1 - CV_PROP_RW int nclusters; - CV_PROP_RW int covMatType; - CV_PROP_RW int maxIters; - CV_PROP_RW double epsilon; - - Mat trainSamples; - Mat trainProbs; - Mat trainLogLikelihoods; - Mat trainLabels; - - CV_PROP Mat weights; - CV_PROP Mat means; - CV_PROP vector covs; - - vector covsEigenValues; - vector covsRotateMats; - vector invCovsEigenValues; - Mat logWeightDivDet; -}; -} // namespace cv - -/****************************************************************************************\ -* Decision Tree * -\****************************************************************************************/\ -struct CvPair16u32s -{ - unsigned short* u; - int* i; -}; - - -#define CV_DTREE_CAT_DIR(idx,subset) \ - (2*((subset[(idx)>>5]&(1 << ((idx) & 31)))==0)-1) - -struct CvDTreeSplit -{ - int var_idx; - int condensed_idx; - int inversed; - float quality; - CvDTreeSplit* next; - union - { - int subset[2]; - struct - { - float c; - int split_point; - } - ord; - }; -}; - -struct CvDTreeNode -{ - int class_idx; - int Tn; - double value; - - CvDTreeNode* parent; - CvDTreeNode* left; - CvDTreeNode* right; - - CvDTreeSplit* split; - - int sample_count; - int depth; - int* num_valid; - int offset; - int buf_idx; - double maxlr; - - // global pruning data - int complexity; - double alpha; - double node_risk, tree_risk, tree_error; - - // cross-validation pruning data - int* cv_Tn; - double* cv_node_risk; - double* cv_node_error; - - int get_num_valid(int vi) { return num_valid ? num_valid[vi] : sample_count; } - void set_num_valid(int vi, int n) { if( num_valid ) num_valid[vi] = n; } -}; - - -struct CV_EXPORTS_W_MAP CvDTreeParams -{ - CV_PROP_RW int max_categories; - CV_PROP_RW int max_depth; - CV_PROP_RW int min_sample_count; - CV_PROP_RW int cv_folds; - CV_PROP_RW bool use_surrogates; - CV_PROP_RW bool use_1se_rule; - CV_PROP_RW bool truncate_pruned_tree; - CV_PROP_RW float regression_accuracy; - const float* priors; - - CvDTreeParams(); - CvDTreeParams( int max_depth, int min_sample_count, - float regression_accuracy, bool use_surrogates, - int max_categories, int cv_folds, - bool use_1se_rule, bool truncate_pruned_tree, - const float* priors ); -}; - - -struct CV_EXPORTS CvDTreeTrainData -{ - CvDTreeTrainData(); - CvDTreeTrainData( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - const CvDTreeParams& params=CvDTreeParams(), - bool _shared=false, bool _add_labels=false ); - virtual ~CvDTreeTrainData(); - - virtual void set_data( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - const CvDTreeParams& params=CvDTreeParams(), - bool _shared=false, bool _add_labels=false, - bool _update_data=false ); - virtual void do_responses_copy(); - - virtual void get_vectors( const CvMat* _subsample_idx, - float* values, uchar* missing, float* responses, bool get_class_idx=false ); - - virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx ); - - virtual void write_params( CvFileStorage* fs ) const; - virtual void read_params( CvFileStorage* fs, CvFileNode* node ); - - // release all the data - virtual void clear(); - - int get_num_classes() const; - int get_var_type(int vi) const; - int get_work_var_count() const {return work_var_count;} - - virtual const float* get_ord_responses( CvDTreeNode* n, float* values_buf, int* sample_indices_buf ); - virtual const int* get_class_labels( CvDTreeNode* n, int* labels_buf ); - virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf ); - virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf ); - virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf ); - virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* sorted_indices_buf, - const float** ord_values, const int** sorted_indices, int* sample_indices_buf ); - virtual int get_child_buf_idx( CvDTreeNode* n ); - - //////////////////////////////////// - - virtual bool set_params( const CvDTreeParams& params ); - virtual CvDTreeNode* new_node( CvDTreeNode* parent, int count, - int storage_idx, int offset ); - - virtual CvDTreeSplit* new_split_ord( int vi, float cmp_val, - int split_point, int inversed, float quality ); - virtual CvDTreeSplit* new_split_cat( int vi, float quality ); - virtual void free_node_data( CvDTreeNode* node ); - virtual void free_train_data(); - virtual void free_node( CvDTreeNode* node ); - - int sample_count, var_all, var_count, max_c_count; - int ord_var_count, cat_var_count, work_var_count; - bool have_labels, have_priors; - bool is_classifier; - int tflag; - - const CvMat* train_data; - const CvMat* responses; - CvMat* responses_copy; // used in Boosting - - int buf_count, buf_size; // buf_size is obsolete, please do not use it, use expression ((int64)buf->rows * (int64)buf->cols / buf_count) instead - bool shared; - int is_buf_16u; - - CvMat* cat_count; - CvMat* cat_ofs; - CvMat* cat_map; - - CvMat* counts; - CvMat* buf; - inline size_t get_length_subbuf() const - { - size_t res = (size_t)(work_var_count + 1) * (size_t)sample_count; - return res; - } - - CvMat* direction; - CvMat* split_buf; - - CvMat* var_idx; - CvMat* var_type; // i-th element = - // k<0 - ordered - // k>=0 - categorical, see k-th element of cat_* arrays - CvMat* priors; - CvMat* priors_mult; - - CvDTreeParams params; - - CvMemStorage* tree_storage; - CvMemStorage* temp_storage; - - CvDTreeNode* data_root; - - CvSet* node_heap; - CvSet* split_heap; - CvSet* cv_heap; - CvSet* nv_heap; - - cv::RNG* rng; -}; - -class CvDTree; -class CvForestTree; - -namespace cv -{ - struct DTreeBestSplitFinder; - struct ForestTreeBestSplitFinder; -} - -class CV_EXPORTS_W CvDTree : public CvStatModel -{ -public: - CV_WRAP CvDTree(); - virtual ~CvDTree(); - - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvDTreeParams params=CvDTreeParams() ); - - virtual bool train( CvMLData* trainData, CvDTreeParams params=CvDTreeParams() ); - - // type in {CV_TRAIN_ERROR, CV_TEST_ERROR} - virtual float calc_error( CvMLData* trainData, int type, std::vector *resp = 0 ); - - virtual bool train( CvDTreeTrainData* trainData, const CvMat* subsampleIdx ); - - virtual CvDTreeNode* predict( const CvMat* sample, const CvMat* missingDataMask=0, - bool preprocessedInput=false ) const; - - CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvDTreeParams params=CvDTreeParams() ); - - CV_WRAP virtual CvDTreeNode* predict( const cv::Mat& sample, const cv::Mat& missingDataMask=cv::Mat(), - bool preprocessedInput=false ) const; - CV_WRAP virtual cv::Mat getVarImportance(); - - virtual const CvMat* get_var_importance(); - CV_WRAP virtual void clear(); - - virtual void read( CvFileStorage* fs, CvFileNode* node ); - virtual void write( CvFileStorage* fs, const char* name ) const; - - // special read & write methods for trees in the tree ensembles - virtual void read( CvFileStorage* fs, CvFileNode* node, - CvDTreeTrainData* data ); - virtual void write( CvFileStorage* fs ) const; - - const CvDTreeNode* get_root() const; - int get_pruned_tree_idx() const; - CvDTreeTrainData* get_data(); - -protected: - friend struct cv::DTreeBestSplitFinder; - - virtual bool do_train( const CvMat* _subsample_idx ); - - virtual void try_split_node( CvDTreeNode* n ); - virtual void split_node_data( CvDTreeNode* n ); - virtual CvDTreeSplit* find_best_split( CvDTreeNode* n ); - virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 ); - virtual double calc_node_dir( CvDTreeNode* node ); - virtual void complete_node_dir( CvDTreeNode* node ); - virtual void cluster_categories( const int* vectors, int vector_count, - int var_count, int* sums, int k, int* cluster_labels ); - - virtual void calc_node_value( CvDTreeNode* node ); - - virtual void prune_cv(); - virtual double update_tree_rnc( int T, int fold ); - virtual int cut_tree( int T, int fold, double min_alpha ); - virtual void free_prune_data(bool cut_tree); - virtual void free_tree(); - - virtual void write_node( CvFileStorage* fs, CvDTreeNode* node ) const; - virtual void write_split( CvFileStorage* fs, CvDTreeSplit* split ) const; - virtual CvDTreeNode* read_node( CvFileStorage* fs, CvFileNode* node, CvDTreeNode* parent ); - virtual CvDTreeSplit* read_split( CvFileStorage* fs, CvFileNode* node ); - virtual void write_tree_nodes( CvFileStorage* fs ) const; - virtual void read_tree_nodes( CvFileStorage* fs, CvFileNode* node ); - - CvDTreeNode* root; - CvMat* var_importance; - CvDTreeTrainData* data; - -public: - int pruned_tree_idx; -}; - - -/****************************************************************************************\ -* Random Trees Classifier * -\****************************************************************************************/ - -class CvRTrees; - -class CV_EXPORTS CvForestTree: public CvDTree -{ -public: - CvForestTree(); - virtual ~CvForestTree(); - - virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx, CvRTrees* forest ); - - virtual int get_var_count() const {return data ? data->var_count : 0;} - virtual void read( CvFileStorage* fs, CvFileNode* node, CvRTrees* forest, CvDTreeTrainData* _data ); - - /* dummy methods to avoid warnings: BEGIN */ - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvDTreeParams params=CvDTreeParams() ); - - virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx ); - virtual void read( CvFileStorage* fs, CvFileNode* node ); - virtual void read( CvFileStorage* fs, CvFileNode* node, - CvDTreeTrainData* data ); - /* dummy methods to avoid warnings: END */ - -protected: - friend struct cv::ForestTreeBestSplitFinder; - - virtual CvDTreeSplit* find_best_split( CvDTreeNode* n ); - CvRTrees* forest; -}; - - -struct CV_EXPORTS_W_MAP CvRTParams : public CvDTreeParams -{ - //Parameters for the forest - CV_PROP_RW bool calc_var_importance; // true <=> RF processes variable importance - CV_PROP_RW int nactive_vars; - CV_PROP_RW CvTermCriteria term_crit; - - CvRTParams(); - CvRTParams( int max_depth, int min_sample_count, - float regression_accuracy, bool use_surrogates, - int max_categories, const float* priors, bool calc_var_importance, - int nactive_vars, int max_num_of_trees_in_the_forest, - float forest_accuracy, int termcrit_type ); -}; - - -class CV_EXPORTS_W CvRTrees : public CvStatModel -{ -public: - CV_WRAP CvRTrees(); - virtual ~CvRTrees(); - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvRTParams params=CvRTParams() ); - - virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() ); - virtual float predict( const CvMat* sample, const CvMat* missing = 0 ) const; - virtual float predict_prob( const CvMat* sample, const CvMat* missing = 0 ) const; - - CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvRTParams params=CvRTParams() ); - CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const; - CV_WRAP virtual float predict_prob( const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const; - CV_WRAP virtual cv::Mat getVarImportance(); - - CV_WRAP virtual void clear(); - - virtual const CvMat* get_var_importance(); - virtual float get_proximity( const CvMat* sample1, const CvMat* sample2, - const CvMat* missing1 = 0, const CvMat* missing2 = 0 ) const; - - virtual float calc_error( CvMLData* data, int type , std::vector* resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR} - - virtual float get_train_error(); - - virtual void read( CvFileStorage* fs, CvFileNode* node ); - virtual void write( CvFileStorage* fs, const char* name ) const; - - CvMat* get_active_var_mask(); - CvRNG* get_rng(); - - int get_tree_count() const; - CvForestTree* get_tree(int i) const; - -protected: - virtual std::string getName() const; - - virtual bool grow_forest( const CvTermCriteria term_crit ); - - // array of the trees of the forest - CvForestTree** trees; - CvDTreeTrainData* data; - int ntrees; - int nclasses; - double oob_error; - CvMat* var_importance; - int nsamples; - - cv::RNG* rng; - CvMat* active_var_mask; -}; - -/****************************************************************************************\ -* Extremely randomized trees Classifier * -\****************************************************************************************/ -struct CV_EXPORTS CvERTreeTrainData : public CvDTreeTrainData -{ - virtual void set_data( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - const CvDTreeParams& params=CvDTreeParams(), - bool _shared=false, bool _add_labels=false, - bool _update_data=false ); - virtual void get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* missing_buf, - const float** ord_values, const int** missing, int* sample_buf = 0 ); - virtual const int* get_sample_indices( CvDTreeNode* n, int* indices_buf ); - virtual const int* get_cv_labels( CvDTreeNode* n, int* labels_buf ); - virtual const int* get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf ); - virtual void get_vectors( const CvMat* _subsample_idx, float* values, uchar* missing, - float* responses, bool get_class_idx=false ); - virtual CvDTreeNode* subsample_data( const CvMat* _subsample_idx ); - const CvMat* missing_mask; -}; - -class CV_EXPORTS CvForestERTree : public CvForestTree -{ -protected: - virtual double calc_node_dir( CvDTreeNode* node ); - virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual void split_node_data( CvDTreeNode* n ); -}; - -class CV_EXPORTS_W CvERTrees : public CvRTrees -{ -public: - CV_WRAP CvERTrees(); - virtual ~CvERTrees(); - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvRTParams params=CvRTParams()); - CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvRTParams params=CvRTParams()); - virtual bool train( CvMLData* data, CvRTParams params=CvRTParams() ); -protected: - virtual std::string getName() const; - virtual bool grow_forest( const CvTermCriteria term_crit ); -}; - - -/****************************************************************************************\ -* Boosted tree classifier * -\****************************************************************************************/ - -struct CV_EXPORTS_W_MAP CvBoostParams : public CvDTreeParams -{ - CV_PROP_RW int boost_type; - CV_PROP_RW int weak_count; - CV_PROP_RW int split_criteria; - CV_PROP_RW double weight_trim_rate; - - CvBoostParams(); - CvBoostParams( int boost_type, int weak_count, double weight_trim_rate, - int max_depth, bool use_surrogates, const float* priors ); -}; - - -class CvBoost; - -class CV_EXPORTS CvBoostTree: public CvDTree -{ -public: - CvBoostTree(); - virtual ~CvBoostTree(); - - virtual bool train( CvDTreeTrainData* trainData, - const CvMat* subsample_idx, CvBoost* ensemble ); - - virtual void scale( double s ); - virtual void read( CvFileStorage* fs, CvFileNode* node, - CvBoost* ensemble, CvDTreeTrainData* _data ); - virtual void clear(); - - /* dummy methods to avoid warnings: BEGIN */ - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvDTreeParams params=CvDTreeParams() ); - virtual bool train( CvDTreeTrainData* trainData, const CvMat* _subsample_idx ); - - virtual void read( CvFileStorage* fs, CvFileNode* node ); - virtual void read( CvFileStorage* fs, CvFileNode* node, - CvDTreeTrainData* data ); - /* dummy methods to avoid warnings: END */ - -protected: - - virtual void try_split_node( CvDTreeNode* n ); - virtual CvDTreeSplit* find_surrogate_split_ord( CvDTreeNode* n, int vi, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_surrogate_split_cat( CvDTreeNode* n, int vi, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_ord_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_class( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_ord_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual CvDTreeSplit* find_split_cat_reg( CvDTreeNode* n, int vi, - float init_quality = 0, CvDTreeSplit* _split = 0, uchar* ext_buf = 0 ); - virtual void calc_node_value( CvDTreeNode* n ); - virtual double calc_node_dir( CvDTreeNode* n ); - - CvBoost* ensemble; -}; - - -class CV_EXPORTS_W CvBoost : public CvStatModel -{ -public: - // Boosting type - enum { DISCRETE=0, REAL=1, LOGIT=2, GENTLE=3 }; - - // Splitting criteria - enum { DEFAULT=0, GINI=1, MISCLASS=3, SQERR=4 }; - - CV_WRAP CvBoost(); - virtual ~CvBoost(); - - CvBoost( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvBoostParams params=CvBoostParams() ); - - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvBoostParams params=CvBoostParams(), - bool update=false ); - - virtual bool train( CvMLData* data, - CvBoostParams params=CvBoostParams(), - bool update=false ); - - virtual float predict( const CvMat* sample, const CvMat* missing=0, - CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ, - bool raw_mode=false, bool return_sum=false ) const; - - CV_WRAP CvBoost( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvBoostParams params=CvBoostParams() ); - - CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvBoostParams params=CvBoostParams(), - bool update=false ); - - CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(), - const cv::Range& slice=cv::Range::all(), bool rawMode=false, - bool returnSum=false ) const; - - virtual float calc_error( CvMLData* _data, int type , std::vector *resp = 0 ); // type in {CV_TRAIN_ERROR, CV_TEST_ERROR} - - CV_WRAP virtual void prune( CvSlice slice ); - - CV_WRAP virtual void clear(); - - virtual void write( CvFileStorage* storage, const char* name ) const; - virtual void read( CvFileStorage* storage, CvFileNode* node ); - virtual const CvMat* get_active_vars(bool absolute_idx=true); - - CvSeq* get_weak_predictors(); - - CvMat* get_weights(); - CvMat* get_subtree_weights(); - CvMat* get_weak_response(); - const CvBoostParams& get_params() const; - const CvDTreeTrainData* get_data() const; - -protected: - - void update_weights_impl( CvBoostTree* tree, double initial_weights[2] ); - - virtual bool set_params( const CvBoostParams& params ); - virtual void update_weights( CvBoostTree* tree ); - virtual void trim_weights(); - virtual void write_params( CvFileStorage* fs ) const; - virtual void read_params( CvFileStorage* fs, CvFileNode* node ); - - CvDTreeTrainData* data; - CvBoostParams params; - CvSeq* weak; - - CvMat* active_vars; - CvMat* active_vars_abs; - bool have_active_cat_vars; - - CvMat* orig_response; - CvMat* sum_response; - CvMat* weak_eval; - CvMat* subsample_mask; - CvMat* weights; - CvMat* subtree_weights; - bool have_subsample; -}; - - -/****************************************************************************************\ -* Gradient Boosted Trees * -\****************************************************************************************/ - -// DataType: STRUCT CvGBTreesParams -// Parameters of GBT (Gradient Boosted trees model), including single -// tree settings and ensemble parameters. -// -// weak_count - count of trees in the ensemble -// loss_function_type - loss function used for ensemble training -// subsample_portion - portion of whole training set used for -// every single tree training. -// subsample_portion value is in (0.0, 1.0]. -// subsample_portion == 1.0 when whole dataset is -// used on each step. Count of sample used on each -// step is computed as -// int(total_samples_count * subsample_portion). -// shrinkage - regularization parameter. -// Each tree prediction is multiplied on shrinkage value. - - -struct CV_EXPORTS_W_MAP CvGBTreesParams : public CvDTreeParams -{ - CV_PROP_RW int weak_count; - CV_PROP_RW int loss_function_type; - CV_PROP_RW float subsample_portion; - CV_PROP_RW float shrinkage; - - CvGBTreesParams(); - CvGBTreesParams( int loss_function_type, int weak_count, float shrinkage, - float subsample_portion, int max_depth, bool use_surrogates ); -}; - -// DataType: CLASS CvGBTrees -// Gradient Boosting Trees (GBT) algorithm implementation. -// -// data - training dataset -// params - parameters of the CvGBTrees -// weak - array[0..(class_count-1)] of CvSeq -// for storing tree ensembles -// orig_response - original responses of the training set samples -// sum_response - predicitons of the current model on the training dataset. -// this matrix is updated on every iteration. -// sum_response_tmp - predicitons of the model on the training set on the next -// step. On every iteration values of sum_responses_tmp are -// computed via sum_responses values. When the current -// step is complete sum_response values become equal to -// sum_responses_tmp. -// sampleIdx - indices of samples used for training the ensemble. -// CvGBTrees training procedure takes a set of samples -// (train_data) and a set of responses (responses). -// Only pairs (train_data[i], responses[i]), where i is -// in sample_idx are used for training the ensemble. -// subsample_train - indices of samples used for training a single decision -// tree on the current step. This indices are countered -// relatively to the sample_idx, so that pairs -// (train_data[sample_idx[i]], responses[sample_idx[i]]) -// are used for training a decision tree. -// Training set is randomly splited -// in two parts (subsample_train and subsample_test) -// on every iteration accordingly to the portion parameter. -// subsample_test - relative indices of samples from the training set, -// which are not used for training a tree on the current -// step. -// missing - mask of the missing values in the training set. This -// matrix has the same size as train_data. 1 - missing -// value, 0 - not a missing value. -// class_labels - output class labels map. -// rng - random number generator. Used for spliting the -// training set. -// class_count - count of output classes. -// class_count == 1 in the case of regression, -// and > 1 in the case of classification. -// delta - Huber loss function parameter. -// base_value - start point of the gradient descent procedure. -// model prediction is -// f(x) = f_0 + sum_{i=1..weak_count-1}(f_i(x)), where -// f_0 is the base value. - - - -class CV_EXPORTS_W CvGBTrees : public CvStatModel -{ -public: - - /* - // DataType: ENUM - // Loss functions implemented in CvGBTrees. - // - // SQUARED_LOSS - // problem: regression - // loss = (x - x')^2 - // - // ABSOLUTE_LOSS - // problem: regression - // loss = abs(x - x') - // - // HUBER_LOSS - // problem: regression - // loss = delta*( abs(x - x') - delta/2), if abs(x - x') > delta - // 1/2*(x - x')^2, if abs(x - x') <= delta, - // where delta is the alpha-quantile of pseudo responses from - // the training set. - // - // DEVIANCE_LOSS - // problem: classification - // - */ - enum {SQUARED_LOSS=0, ABSOLUTE_LOSS, HUBER_LOSS=3, DEVIANCE_LOSS}; - - - /* - // Default constructor. Creates a model only (without training). - // Should be followed by one form of the train(...) function. - // - // API - // CvGBTrees(); - - // INPUT - // OUTPUT - // RESULT - */ - CV_WRAP CvGBTrees(); - - - /* - // Full form constructor. Creates a gradient boosting model and does the - // train. - // - // API - // CvGBTrees( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvGBTreesParams params=CvGBTreesParams() ); - - // INPUT - // trainData - a set of input feature vectors. - // size of matrix is - // x - // or x - // depending on the tflag parameter. - // matrix values are float. - // tflag - a flag showing how do samples stored in the - // trainData matrix row by row (tflag=CV_ROW_SAMPLE) - // or column by column (tflag=CV_COL_SAMPLE). - // responses - a vector of responses corresponding to the samples - // in trainData. - // varIdx - indices of used variables. zero value means that all - // variables are active. - // sampleIdx - indices of used samples. zero value means that all - // samples from trainData are in the training set. - // varType - vector of length. gives every - // variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED. - // varType = 0 means all variables are numerical. - // missingDataMask - a mask of misiing values in trainData. - // missingDataMask = 0 means that there are no missing - // values. - // params - parameters of GTB algorithm. - // OUTPUT - // RESULT - */ - CvGBTrees( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvGBTreesParams params=CvGBTreesParams() ); - - - /* - // Destructor. - */ - virtual ~CvGBTrees(); - - - /* - // Gradient tree boosting model training - // - // API - // virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvGBTreesParams params=CvGBTreesParams(), - bool update=false ); - - // INPUT - // trainData - a set of input feature vectors. - // size of matrix is - // x - // or x - // depending on the tflag parameter. - // matrix values are float. - // tflag - a flag showing how do samples stored in the - // trainData matrix row by row (tflag=CV_ROW_SAMPLE) - // or column by column (tflag=CV_COL_SAMPLE). - // responses - a vector of responses corresponding to the samples - // in trainData. - // varIdx - indices of used variables. zero value means that all - // variables are active. - // sampleIdx - indices of used samples. zero value means that all - // samples from trainData are in the training set. - // varType - vector of length. gives every - // variable type CV_VAR_CATEGORICAL or CV_VAR_ORDERED. - // varType = 0 means all variables are numerical. - // missingDataMask - a mask of misiing values in trainData. - // missingDataMask = 0 means that there are no missing - // values. - // params - parameters of GTB algorithm. - // update - is not supported now. (!) - // OUTPUT - // RESULT - // Error state. - */ - virtual bool train( const CvMat* trainData, int tflag, - const CvMat* responses, const CvMat* varIdx=0, - const CvMat* sampleIdx=0, const CvMat* varType=0, - const CvMat* missingDataMask=0, - CvGBTreesParams params=CvGBTreesParams(), - bool update=false ); - - - /* - // Gradient tree boosting model training - // - // API - // virtual bool train( CvMLData* data, - CvGBTreesParams params=CvGBTreesParams(), - bool update=false ) {return false;}; - - // INPUT - // data - training set. - // params - parameters of GTB algorithm. - // update - is not supported now. (!) - // OUTPUT - // RESULT - // Error state. - */ - virtual bool train( CvMLData* data, - CvGBTreesParams params=CvGBTreesParams(), - bool update=false ); - - - /* - // Response value prediction - // - // API - // virtual float predict_serial( const CvMat* sample, const CvMat* missing=0, - CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ, - int k=-1 ) const; - - // INPUT - // sample - input sample of the same type as in the training set. - // missing - missing values mask. missing=0 if there are no - // missing values in sample vector. - // weak_responses - predictions of all of the trees. - // not implemented (!) - // slice - part of the ensemble used for prediction. - // slice = CV_WHOLE_SEQ when all trees are used. - // k - number of ensemble used. - // k is in {-1,0,1,..,}. - // in the case of classification problem - // ensembles are built. - // If k = -1 ordinary prediction is the result, - // otherwise function gives the prediction of the - // k-th ensemble only. - // OUTPUT - // RESULT - // Predicted value. - */ - virtual float predict_serial( const CvMat* sample, const CvMat* missing=0, - CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ, - int k=-1 ) const; - - /* - // Response value prediction. - // Parallel version (in the case of TBB existence) - // - // API - // virtual float predict( const CvMat* sample, const CvMat* missing=0, - CvMat* weak_responses=0, CvSlice slice = CV_WHOLE_SEQ, - int k=-1 ) const; - - // INPUT - // sample - input sample of the same type as in the training set. - // missing - missing values mask. missing=0 if there are no - // missing values in sample vector. - // weak_responses - predictions of all of the trees. - // not implemented (!) - // slice - part of the ensemble used for prediction. - // slice = CV_WHOLE_SEQ when all trees are used. - // k - number of ensemble used. - // k is in {-1,0,1,..,}. - // in the case of classification problem - // ensembles are built. - // If k = -1 ordinary prediction is the result, - // otherwise function gives the prediction of the - // k-th ensemble only. - // OUTPUT - // RESULT - // Predicted value. - */ - virtual float predict( const CvMat* sample, const CvMat* missing=0, - CvMat* weakResponses=0, CvSlice slice = CV_WHOLE_SEQ, - int k=-1 ) const; - - /* - // Deletes all the data. - // - // API - // virtual void clear(); - - // INPUT - // OUTPUT - // delete data, weak, orig_response, sum_response, - // weak_eval, subsample_train, subsample_test, - // sample_idx, missing, lass_labels - // delta = 0.0 - // RESULT - */ - CV_WRAP virtual void clear(); - - /* - // Compute error on the train/test set. - // - // API - // virtual float calc_error( CvMLData* _data, int type, - // std::vector *resp = 0 ); - // - // INPUT - // data - dataset - // type - defines which error is to compute: train (CV_TRAIN_ERROR) or - // test (CV_TEST_ERROR). - // OUTPUT - // resp - vector of predicitons - // RESULT - // Error value. - */ - virtual float calc_error( CvMLData* _data, int type, - std::vector *resp = 0 ); - - /* - // - // Write parameters of the gtb model and data. Write learned model. - // - // API - // virtual void write( CvFileStorage* fs, const char* name ) const; - // - // INPUT - // fs - file storage to read parameters from. - // name - model name. - // OUTPUT - // RESULT - */ - virtual void write( CvFileStorage* fs, const char* name ) const; - - - /* - // - // Read parameters of the gtb model and data. Read learned model. - // - // API - // virtual void read( CvFileStorage* fs, CvFileNode* node ); - // - // INPUT - // fs - file storage to read parameters from. - // node - file node. - // OUTPUT - // RESULT - */ - virtual void read( CvFileStorage* fs, CvFileNode* node ); - - - // new-style C++ interface - CV_WRAP CvGBTrees( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvGBTreesParams params=CvGBTreesParams() ); - - CV_WRAP virtual bool train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx=cv::Mat(), - const cv::Mat& sampleIdx=cv::Mat(), const cv::Mat& varType=cv::Mat(), - const cv::Mat& missingDataMask=cv::Mat(), - CvGBTreesParams params=CvGBTreesParams(), - bool update=false ); - - CV_WRAP virtual float predict( const cv::Mat& sample, const cv::Mat& missing=cv::Mat(), - const cv::Range& slice = cv::Range::all(), - int k=-1 ) const; - -protected: - - /* - // Compute the gradient vector components. - // - // API - // virtual void find_gradient( const int k = 0); - - // INPUT - // k - used for classification problem, determining current - // tree ensemble. - // OUTPUT - // changes components of data->responses - // which correspond to samples used for training - // on the current step. - // RESULT - */ - virtual void find_gradient( const int k = 0); - - - /* - // - // Change values in tree leaves according to the used loss function. - // - // API - // virtual void change_values(CvDTree* tree, const int k = 0); - // - // INPUT - // tree - decision tree to change. - // k - used for classification problem, determining current - // tree ensemble. - // OUTPUT - // changes 'value' fields of the trees' leaves. - // changes sum_response_tmp. - // RESULT - */ - virtual void change_values(CvDTree* tree, const int k = 0); - - - /* - // - // Find optimal constant prediction value according to the used loss - // function. - // The goal is to find a constant which gives the minimal summary loss - // on the _Idx samples. - // - // API - // virtual float find_optimal_value( const CvMat* _Idx ); - // - // INPUT - // _Idx - indices of the samples from the training set. - // OUTPUT - // RESULT - // optimal constant value. - */ - virtual float find_optimal_value( const CvMat* _Idx ); - - - /* - // - // Randomly split the whole training set in two parts according - // to params.portion. - // - // API - // virtual void do_subsample(); - // - // INPUT - // OUTPUT - // subsample_train - indices of samples used for training - // subsample_test - indices of samples used for test - // RESULT - */ - virtual void do_subsample(); - - - /* - // - // Internal recursive function giving an array of subtree tree leaves. - // - // API - // void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node ); - // - // INPUT - // node - current leaf. - // OUTPUT - // count - count of leaves in the subtree. - // leaves - array of pointers to leaves. - // RESULT - */ - void leaves_get( CvDTreeNode** leaves, int& count, CvDTreeNode* node ); - - - /* - // - // Get leaves of the tree. - // - // API - // CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len ); - // - // INPUT - // dtree - decision tree. - // OUTPUT - // len - count of the leaves. - // RESULT - // CvDTreeNode** - array of pointers to leaves. - */ - CvDTreeNode** GetLeaves( const CvDTree* dtree, int& len ); - - - /* - // - // Is it a regression or a classification. - // - // API - // bool problem_type(); - // - // INPUT - // OUTPUT - // RESULT - // false if it is a classification problem, - // true - if regression. - */ - virtual bool problem_type() const; - - - /* - // - // Write parameters of the gtb model. - // - // API - // virtual void write_params( CvFileStorage* fs ) const; - // - // INPUT - // fs - file storage to write parameters to. - // OUTPUT - // RESULT - */ - virtual void write_params( CvFileStorage* fs ) const; - - - /* - // - // Read parameters of the gtb model and data. - // - // API - // virtual void read_params( CvFileStorage* fs ); - // - // INPUT - // fs - file storage to read parameters from. - // OUTPUT - // params - parameters of the gtb model. - // data - contains information about the structure - // of the data set (count of variables, - // their types, etc.). - // class_labels - output class labels map. - // RESULT - */ - virtual void read_params( CvFileStorage* fs, CvFileNode* fnode ); - int get_len(const CvMat* mat) const; - - - CvDTreeTrainData* data; - CvGBTreesParams params; - - CvSeq** weak; - CvMat* orig_response; - CvMat* sum_response; - CvMat* sum_response_tmp; - CvMat* sample_idx; - CvMat* subsample_train; - CvMat* subsample_test; - CvMat* missing; - CvMat* class_labels; - - cv::RNG* rng; - - int class_count; - float delta; - float base_value; - -}; - - - -/****************************************************************************************\ -* Artificial Neural Networks (ANN) * -\****************************************************************************************/ - -/////////////////////////////////// Multi-Layer Perceptrons ////////////////////////////// - -struct CV_EXPORTS_W_MAP CvANN_MLP_TrainParams -{ - CvANN_MLP_TrainParams(); - CvANN_MLP_TrainParams( CvTermCriteria term_crit, int train_method, - double param1, double param2=0 ); - ~CvANN_MLP_TrainParams(); - - enum { BACKPROP=0, RPROP=1 }; - - CV_PROP_RW CvTermCriteria term_crit; - CV_PROP_RW int train_method; - - // backpropagation parameters - CV_PROP_RW double bp_dw_scale, bp_moment_scale; - - // rprop parameters - CV_PROP_RW double rp_dw0, rp_dw_plus, rp_dw_minus, rp_dw_min, rp_dw_max; -}; - - -class CV_EXPORTS_W CvANN_MLP : public CvStatModel -{ -public: - CV_WRAP CvANN_MLP(); - CvANN_MLP( const CvMat* layerSizes, - int activateFunc=CvANN_MLP::SIGMOID_SYM, - double fparam1=0, double fparam2=0 ); - - virtual ~CvANN_MLP(); - - virtual void create( const CvMat* layerSizes, - int activateFunc=CvANN_MLP::SIGMOID_SYM, - double fparam1=0, double fparam2=0 ); - - virtual int train( const CvMat* inputs, const CvMat* outputs, - const CvMat* sampleWeights, const CvMat* sampleIdx=0, - CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(), - int flags=0 ); - virtual float predict( const CvMat* inputs, CV_OUT CvMat* outputs ) const; - - CV_WRAP CvANN_MLP( const cv::Mat& layerSizes, - int activateFunc=CvANN_MLP::SIGMOID_SYM, - double fparam1=0, double fparam2=0 ); - - CV_WRAP virtual void create( const cv::Mat& layerSizes, - int activateFunc=CvANN_MLP::SIGMOID_SYM, - double fparam1=0, double fparam2=0 ); - - CV_WRAP virtual int train( const cv::Mat& inputs, const cv::Mat& outputs, - const cv::Mat& sampleWeights, const cv::Mat& sampleIdx=cv::Mat(), - CvANN_MLP_TrainParams params = CvANN_MLP_TrainParams(), - int flags=0 ); - - CV_WRAP virtual float predict( const cv::Mat& inputs, CV_OUT cv::Mat& outputs ) const; - - CV_WRAP virtual void clear(); - - // possible activation functions - enum { IDENTITY = 0, SIGMOID_SYM = 1, GAUSSIAN = 2 }; - - // available training flags - enum { UPDATE_WEIGHTS = 1, NO_INPUT_SCALE = 2, NO_OUTPUT_SCALE = 4 }; - - virtual void read( CvFileStorage* fs, CvFileNode* node ); - virtual void write( CvFileStorage* storage, const char* name ) const; - - int get_layer_count() { return layer_sizes ? layer_sizes->cols : 0; } - const CvMat* get_layer_sizes() { return layer_sizes; } - double* get_weights(int layer) - { - return layer_sizes && weights && - (unsigned)layer <= (unsigned)layer_sizes->cols ? weights[layer] : 0; - } - - virtual void calc_activ_func_deriv( CvMat* xf, CvMat* deriv, const double* bias ) const; - -protected: - - virtual bool prepare_to_train( const CvMat* _inputs, const CvMat* _outputs, - const CvMat* _sample_weights, const CvMat* sampleIdx, - CvVectors* _ivecs, CvVectors* _ovecs, double** _sw, int _flags ); - - // sequential random backpropagation - virtual int train_backprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw ); - - // RPROP algorithm - virtual int train_rprop( CvVectors _ivecs, CvVectors _ovecs, const double* _sw ); - - virtual void calc_activ_func( CvMat* xf, const double* bias ) const; - virtual void set_activ_func( int _activ_func=SIGMOID_SYM, - double _f_param1=0, double _f_param2=0 ); - virtual void init_weights(); - virtual void scale_input( const CvMat* _src, CvMat* _dst ) const; - virtual void scale_output( const CvMat* _src, CvMat* _dst ) const; - virtual void calc_input_scale( const CvVectors* vecs, int flags ); - virtual void calc_output_scale( const CvVectors* vecs, int flags ); - - virtual void write_params( CvFileStorage* fs ) const; - virtual void read_params( CvFileStorage* fs, CvFileNode* node ); - - CvMat* layer_sizes; - CvMat* wbuf; - CvMat* sample_weights; - double** weights; - double f_param1, f_param2; - double min_val, max_val, min_val1, max_val1; - int activ_func; - int max_count, max_buf_sz; - CvANN_MLP_TrainParams params; - cv::RNG* rng; -}; - -/****************************************************************************************\ -* Auxilary functions declarations * -\****************************************************************************************/ - -/* Generates from multivariate normal distribution, where - is an - average row vector, - symmetric covariation matrix */ -CVAPI(void) cvRandMVNormal( CvMat* mean, CvMat* cov, CvMat* sample, - CvRNG* rng CV_DEFAULT(0) ); - -/* Generates sample from gaussian mixture distribution */ -CVAPI(void) cvRandGaussMixture( CvMat* means[], - CvMat* covs[], - float weights[], - int clsnum, - CvMat* sample, - CvMat* sampClasses CV_DEFAULT(0) ); - -#define CV_TS_CONCENTRIC_SPHERES 0 - -/* creates test set */ -CVAPI(void) cvCreateTestSet( int type, CvMat** samples, - int num_samples, - int num_features, - CvMat** responses, - int num_classes, ... ); - -/****************************************************************************************\ -* Data * -\****************************************************************************************/ - -#define CV_COUNT 0 -#define CV_PORTION 1 - -struct CV_EXPORTS CvTrainTestSplit -{ - CvTrainTestSplit(); - CvTrainTestSplit( int train_sample_count, bool mix = true); - CvTrainTestSplit( float train_sample_portion, bool mix = true); - - union - { - int count; - float portion; - } train_sample_part; - int train_sample_part_mode; - - bool mix; -}; - -class CV_EXPORTS CvMLData -{ -public: - CvMLData(); - virtual ~CvMLData(); - - // returns: - // 0 - OK - // -1 - file can not be opened or is not correct - int read_csv( const char* filename ); - - const CvMat* get_values() const; - const CvMat* get_responses(); - const CvMat* get_missing() const; - - void set_response_idx( int idx ); // old response become predictors, new response_idx = idx - // if idx < 0 there will be no response - int get_response_idx() const; - - void set_train_test_split( const CvTrainTestSplit * spl ); - const CvMat* get_train_sample_idx() const; - const CvMat* get_test_sample_idx() const; - void mix_train_and_test_idx(); - - const CvMat* get_var_idx(); - void chahge_var_idx( int vi, bool state ); // misspelled (saved for back compitability), - // use change_var_idx - void change_var_idx( int vi, bool state ); // state == true to set vi-variable as predictor - - const CvMat* get_var_types(); - int get_var_type( int var_idx ) const; - // following 2 methods enable to change vars type - // use these methods to assign CV_VAR_CATEGORICAL type for categorical variable - // with numerical labels; in the other cases var types are correctly determined automatically - void set_var_types( const char* str ); // str examples: - // "ord[0-17],cat[18]", "ord[0,2,4,10-12], cat[1,3,5-9,13,14]", - // "cat", "ord" (all vars are categorical/ordered) - void change_var_type( int var_idx, int type); // type in { CV_VAR_ORDERED, CV_VAR_CATEGORICAL } - - void set_delimiter( char ch ); - char get_delimiter() const; - - void set_miss_ch( char ch ); - char get_miss_ch() const; - - const std::map& get_class_labels_map() const; - -protected: - virtual void clear(); - - void str_to_flt_elem( const char* token, float& flt_elem, int& type); - void free_train_test_idx(); - - char delimiter; - char miss_ch; - //char flt_separator; - - CvMat* values; - CvMat* missing; - CvMat* var_types; - CvMat* var_idx_mask; - - CvMat* response_out; // header - CvMat* var_idx_out; // mat - CvMat* var_types_out; // mat - - int response_idx; - - int train_sample_count; - bool mix; - - int total_class_count; - std::map class_map; - - CvMat* train_sample_idx; - CvMat* test_sample_idx; - int* sample_idx; // data of train_sample_idx and test_sample_idx - - cv::RNG* rng; -}; - - -namespace cv -{ - -typedef CvStatModel StatModel; -typedef CvParamGrid ParamGrid; -typedef CvNormalBayesClassifier NormalBayesClassifier; -typedef CvKNearest KNearest; -typedef CvSVMParams SVMParams; -typedef CvSVMKernel SVMKernel; -typedef CvSVMSolver SVMSolver; -typedef CvSVM SVM; -typedef CvDTreeParams DTreeParams; -typedef CvMLData TrainData; -typedef CvDTree DecisionTree; -typedef CvForestTree ForestTree; -typedef CvRTParams RandomTreeParams; -typedef CvRTrees RandomTrees; -typedef CvERTreeTrainData ERTreeTRainData; -typedef CvForestERTree ERTree; -typedef CvERTrees ERTrees; -typedef CvBoostParams BoostParams; -typedef CvBoostTree BoostTree; -typedef CvBoost Boost; -typedef CvANN_MLP_TrainParams ANN_MLP_TrainParams; -typedef CvANN_MLP NeuralNet_MLP; -typedef CvGBTreesParams GradientBoostingTreeParams; -typedef CvGBTrees GradientBoostingTrees; - -template<> CV_EXPORTS void Ptr::delete_obj(); - -CV_EXPORTS bool initModule_ml(void); - -} - -#endif // __cplusplus -#endif // __OPENCV_ML_HPP__ - -/* End of file. */ diff --git a/modules/ml/src/ann_mlp.cpp b/modules/ml/src/ann_mlp.cpp deleted file mode 100644 index 7323ab5..0000000 --- a/modules/ml/src/ann_mlp.cpp +++ /dev/null @@ -1,1618 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -CvANN_MLP_TrainParams::CvANN_MLP_TrainParams() -{ - term_crit = cvTermCriteria( CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 1000, 0.01 ); - train_method = RPROP; - bp_dw_scale = bp_moment_scale = 0.1; - rp_dw0 = 0.1; rp_dw_plus = 1.2; rp_dw_minus = 0.5; - rp_dw_min = FLT_EPSILON; rp_dw_max = 50.; -} - - -CvANN_MLP_TrainParams::CvANN_MLP_TrainParams( CvTermCriteria _term_crit, - int _train_method, - double _param1, double _param2 ) -{ - term_crit = _term_crit; - train_method = _train_method; - bp_dw_scale = bp_moment_scale = 0.1; - rp_dw0 = 1.; rp_dw_plus = 1.2; rp_dw_minus = 0.5; - rp_dw_min = FLT_EPSILON; rp_dw_max = 50.; - - if( train_method == RPROP ) - { - rp_dw0 = _param1; - if( rp_dw0 < FLT_EPSILON ) - rp_dw0 = 1.; - rp_dw_min = _param2; - rp_dw_min = MAX( rp_dw_min, 0 ); - } - else if( train_method == BACKPROP ) - { - bp_dw_scale = _param1; - if( bp_dw_scale <= 0 ) - bp_dw_scale = 0.1; - bp_dw_scale = MAX( bp_dw_scale, 1e-3 ); - bp_dw_scale = MIN( bp_dw_scale, 1 ); - bp_moment_scale = _param2; - if( bp_moment_scale < 0 ) - bp_moment_scale = 0.1; - bp_moment_scale = MIN( bp_moment_scale, 1 ); - } - else - train_method = RPROP; -} - - -CvANN_MLP_TrainParams::~CvANN_MLP_TrainParams() -{ -} - - -CvANN_MLP::CvANN_MLP() -{ - layer_sizes = wbuf = 0; - min_val = max_val = min_val1 = max_val1 = 0.; - weights = 0; - rng = &cv::theRNG(); - default_model_name = "my_nn"; - clear(); -} - - -CvANN_MLP::CvANN_MLP( const CvMat* _layer_sizes, - int _activ_func, - double _f_param1, double _f_param2 ) -{ - layer_sizes = wbuf = 0; - min_val = max_val = min_val1 = max_val1 = 0.; - weights = 0; - rng = &cv::theRNG(); - default_model_name = "my_nn"; - create( _layer_sizes, _activ_func, _f_param1, _f_param2 ); -} - - -CvANN_MLP::~CvANN_MLP() -{ - clear(); -} - - -void CvANN_MLP::clear() -{ - cvReleaseMat( &layer_sizes ); - cvReleaseMat( &wbuf ); - cvFree( &weights ); - activ_func = SIGMOID_SYM; - f_param1 = f_param2 = 1; - max_buf_sz = 1 << 12; -} - - -void CvANN_MLP::set_activ_func( int _activ_func, double _f_param1, double _f_param2 ) -{ - CV_FUNCNAME( "CvANN_MLP::set_activ_func" ); - - __BEGIN__; - - if( _activ_func < 0 || _activ_func > GAUSSIAN ) - CV_ERROR( CV_StsOutOfRange, "Unknown activation function" ); - - activ_func = _activ_func; - - switch( activ_func ) - { - case SIGMOID_SYM: - max_val = 0.95; min_val = -max_val; - max_val1 = 0.98; min_val1 = -max_val1; - if( fabs(_f_param1) < FLT_EPSILON ) - _f_param1 = 2./3; - if( fabs(_f_param2) < FLT_EPSILON ) - _f_param2 = 1.7159; - break; - case GAUSSIAN: - max_val = 1.; min_val = 0.05; - max_val1 = 1.; min_val1 = 0.02; - if( fabs(_f_param1) < FLT_EPSILON ) - _f_param1 = 1.; - if( fabs(_f_param2) < FLT_EPSILON ) - _f_param2 = 1.; - break; - default: - min_val = max_val = min_val1 = max_val1 = 0.; - _f_param1 = 1.; - _f_param2 = 0.; - } - - f_param1 = _f_param1; - f_param2 = _f_param2; - - __END__; -} - - -void CvANN_MLP::init_weights() -{ - int i, j, k; - - for( i = 1; i < layer_sizes->cols; i++ ) - { - int n1 = layer_sizes->data.i[i-1]; - int n2 = layer_sizes->data.i[i]; - double val = 0, G = n2 > 2 ? 0.7*pow((double)n1,1./(n2-1)) : 1.; - double* w = weights[i]; - - // initialize weights using Nguyen-Widrow algorithm - for( j = 0; j < n2; j++ ) - { - double s = 0; - for( k = 0; k <= n1; k++ ) - { - val = rng->uniform(0., 1.)*2-1.; - w[k*n2 + j] = val; - s += fabs(val); - } - - if( i < layer_sizes->cols - 1 ) - { - s = 1./(s - fabs(val)); - for( k = 0; k <= n1; k++ ) - w[k*n2 + j] *= s; - w[n1*n2 + j] *= G*(-1+j*2./n2); - } - } - } -} - - -void CvANN_MLP::create( const CvMat* _layer_sizes, int _activ_func, - double _f_param1, double _f_param2 ) -{ - CV_FUNCNAME( "CvANN_MLP::create" ); - - __BEGIN__; - - int i, l_step, l_count, buf_sz = 0; - int *l_src, *l_dst; - - clear(); - - if( !CV_IS_MAT(_layer_sizes) || - (_layer_sizes->cols != 1 && _layer_sizes->rows != 1) || - CV_MAT_TYPE(_layer_sizes->type) != CV_32SC1 ) - CV_ERROR( CV_StsBadArg, - "The array of layer neuron counters must be an integer vector" ); - - CV_CALL( set_activ_func( _activ_func, _f_param1, _f_param2 )); - - l_count = _layer_sizes->rows + _layer_sizes->cols - 1; - l_src = _layer_sizes->data.i; - l_step = CV_IS_MAT_CONT(_layer_sizes->type) ? 1 : - _layer_sizes->step / sizeof(l_src[0]); - CV_CALL( layer_sizes = cvCreateMat( 1, l_count, CV_32SC1 )); - l_dst = layer_sizes->data.i; - - max_count = 0; - for( i = 0; i < l_count; i++ ) - { - int n = l_src[i*l_step]; - if( n < 1 + (0 < i && i < l_count-1)) - CV_ERROR( CV_StsOutOfRange, - "there should be at least one input and one output " - "and every hidden layer must have more than 1 neuron" ); - l_dst[i] = n; - max_count = MAX( max_count, n ); - if( i > 0 ) - buf_sz += (l_dst[i-1]+1)*n; - } - - buf_sz += (l_dst[0] + l_dst[l_count-1]*2)*2; - - CV_CALL( wbuf = cvCreateMat( 1, buf_sz, CV_64F )); - CV_CALL( weights = (double**)cvAlloc( (l_count+2)*sizeof(weights[0]) )); - - weights[0] = wbuf->data.db; - weights[1] = weights[0] + l_dst[0]*2; - for( i = 1; i < l_count; i++ ) - weights[i+1] = weights[i] + (l_dst[i-1] + 1)*l_dst[i]; - weights[l_count+1] = weights[l_count] + l_dst[l_count-1]*2; - - __END__; -} - - -float CvANN_MLP::predict( const CvMat* _inputs, CvMat* _outputs ) const -{ - int i, j, n, dn = 0, l_count, dn0, buf_sz, min_buf_sz; - - if( !layer_sizes ) - CV_Error( CV_StsError, "The network has not been initialized" ); - - if( !CV_IS_MAT(_inputs) || !CV_IS_MAT(_outputs) || - !CV_ARE_TYPES_EQ(_inputs,_outputs) || - (CV_MAT_TYPE(_inputs->type) != CV_32FC1 && - CV_MAT_TYPE(_inputs->type) != CV_64FC1) || - _inputs->rows != _outputs->rows ) - CV_Error( CV_StsBadArg, "Both input and output must be floating-point matrices " - "of the same type and have the same number of rows" ); - - if( _inputs->cols != layer_sizes->data.i[0] ) - CV_Error( CV_StsBadSize, "input matrix must have the same number of columns as " - "the number of neurons in the input layer" ); - - if( _outputs->cols != layer_sizes->data.i[layer_sizes->cols - 1] ) - CV_Error( CV_StsBadSize, "output matrix must have the same number of columns as " - "the number of neurons in the output layer" ); - n = dn0 = _inputs->rows; - min_buf_sz = 2*max_count; - buf_sz = n*min_buf_sz; - - if( buf_sz > max_buf_sz ) - { - dn0 = max_buf_sz/min_buf_sz; - dn0 = MAX( dn0, 1 ); - buf_sz = dn0*min_buf_sz; - } - - cv::AutoBuffer buf(buf_sz); - l_count = layer_sizes->cols; - - for( i = 0; i < n; i += dn ) - { - CvMat hdr[2], _w, *layer_in = &hdr[0], *layer_out = &hdr[1], *temp; - dn = MIN( dn0, n - i ); - - cvGetRows( _inputs, layer_in, i, i + dn ); - cvInitMatHeader( layer_out, dn, layer_in->cols, CV_64F, &buf[0] ); - - scale_input( layer_in, layer_out ); - CV_SWAP( layer_in, layer_out, temp ); - - for( j = 1; j < l_count; j++ ) - { - double* data = buf + (j&1 ? max_count*dn0 : 0); - int cols = layer_sizes->data.i[j]; - - cvInitMatHeader( layer_out, dn, cols, CV_64F, data ); - cvInitMatHeader( &_w, layer_in->cols, layer_out->cols, CV_64F, weights[j] ); - cvGEMM( layer_in, &_w, 1, 0, 0, layer_out ); - calc_activ_func( layer_out, _w.data.db + _w.rows*_w.cols ); - - CV_SWAP( layer_in, layer_out, temp ); - } - - cvGetRows( _outputs, layer_out, i, i + dn ); - scale_output( layer_in, layer_out ); - } - - return 0.f; -} - - -void CvANN_MLP::scale_input( const CvMat* _src, CvMat* _dst ) const -{ - int i, j, cols = _src->cols; - double* dst = _dst->data.db; - const double* w = weights[0]; - int step = _src->step; - - if( CV_MAT_TYPE( _src->type ) == CV_32F ) - { - const float* src = _src->data.fl; - step /= sizeof(src[0]); - - for( i = 0; i < _src->rows; i++, src += step, dst += cols ) - for( j = 0; j < cols; j++ ) - dst[j] = src[j]*w[j*2] + w[j*2+1]; - } - else - { - const double* src = _src->data.db; - step /= sizeof(src[0]); - - for( i = 0; i < _src->rows; i++, src += step, dst += cols ) - for( j = 0; j < cols; j++ ) - dst[j] = src[j]*w[j*2] + w[j*2+1]; - } -} - - -void CvANN_MLP::scale_output( const CvMat* _src, CvMat* _dst ) const -{ - int i, j, cols = _src->cols; - const double* src = _src->data.db; - const double* w = weights[layer_sizes->cols]; - int step = _dst->step; - - if( CV_MAT_TYPE( _dst->type ) == CV_32F ) - { - float* dst = _dst->data.fl; - step /= sizeof(dst[0]); - - for( i = 0; i < _src->rows; i++, src += cols, dst += step ) - for( j = 0; j < cols; j++ ) - dst[j] = (float)(src[j]*w[j*2] + w[j*2+1]); - } - else - { - double* dst = _dst->data.db; - step /= sizeof(dst[0]); - - for( i = 0; i < _src->rows; i++, src += cols, dst += step ) - for( j = 0; j < cols; j++ ) - dst[j] = src[j]*w[j*2] + w[j*2+1]; - } -} - - -void CvANN_MLP::calc_activ_func( CvMat* sums, const double* bias ) const -{ - int i, j, n = sums->rows, cols = sums->cols; - double* data = sums->data.db; - double scale = 0, scale2 = f_param2; - - switch( activ_func ) - { - case IDENTITY: - scale = 1.; - break; - case SIGMOID_SYM: - scale = -f_param1; - break; - case GAUSSIAN: - scale = -f_param1*f_param1; - break; - default: - ; - } - - assert( CV_IS_MAT_CONT(sums->type) ); - - if( activ_func != GAUSSIAN ) - { - for( i = 0; i < n; i++, data += cols ) - for( j = 0; j < cols; j++ ) - data[j] = (data[j] + bias[j])*scale; - - if( activ_func == IDENTITY ) - return; - } - else - { - for( i = 0; i < n; i++, data += cols ) - for( j = 0; j < cols; j++ ) - { - double t = data[j] + bias[j]; - data[j] = t*t*scale; - } - } - - cvExp( sums, sums ); - - n *= cols; - data -= n; - - switch( activ_func ) - { - case SIGMOID_SYM: - for( i = 0; i <= n - 4; i += 4 ) - { - double x0 = 1.+data[i], x1 = 1.+data[i+1], x2 = 1.+data[i+2], x3 = 1.+data[i+3]; - double a = x0*x1, b = x2*x3, d = scale2/(a*b), t0, t1; - a *= d; b *= d; - t0 = (2 - x0)*b*x1; t1 = (2 - x1)*b*x0; - data[i] = t0; data[i+1] = t1; - t0 = (2 - x2)*a*x3; t1 = (2 - x3)*a*x2; - data[i+2] = t0; data[i+3] = t1; - } - - for( ; i < n; i++ ) - { - double t = scale2*(1. - data[i])/(1. + data[i]); - data[i] = t; - } - break; - - case GAUSSIAN: - for( i = 0; i < n; i++ ) - data[i] = scale2*data[i]; - break; - - default: - ; - } -} - - -void CvANN_MLP::calc_activ_func_deriv( CvMat* _xf, CvMat* _df, - const double* bias ) const -{ - int i, j, n = _xf->rows, cols = _xf->cols; - double* xf = _xf->data.db; - double* df = _df->data.db; - double scale, scale2 = f_param2; - assert( CV_IS_MAT_CONT( _xf->type & _df->type ) ); - - if( activ_func == IDENTITY ) - { - for( i = 0; i < n; i++, xf += cols, df += cols ) - for( j = 0; j < cols; j++ ) - { - xf[j] += bias[j]; - df[j] = 1; - } - return; - } - else if( activ_func == GAUSSIAN ) - { - scale = -f_param1*f_param1; - scale2 *= scale; - for( i = 0; i < n; i++, xf += cols, df += cols ) - for( j = 0; j < cols; j++ ) - { - double t = xf[j] + bias[j]; - df[j] = t*2*scale2; - xf[j] = t*t*scale; - } - cvExp( _xf, _xf ); - - n *= cols; - xf -= n; df -= n; - - for( i = 0; i < n; i++ ) - df[i] *= xf[i]; - } - else - { - scale = f_param1; - for( i = 0; i < n; i++, xf += cols, df += cols ) - for( j = 0; j < cols; j++ ) - { - xf[j] = (xf[j] + bias[j])*scale; - df[j] = -fabs(xf[j]); - } - - cvExp( _df, _df ); - - n *= cols; - xf -= n; df -= n; - - // ((1+exp(-ax))^-1)'=a*((1+exp(-ax))^-2)*exp(-ax); - // ((1-exp(-ax))/(1+exp(-ax)))'=(a*exp(-ax)*(1+exp(-ax)) + a*exp(-ax)*(1-exp(-ax)))/(1+exp(-ax))^2= - // 2*a*exp(-ax)/(1+exp(-ax))^2 - scale *= 2*f_param2; - for( i = 0; i < n; i++ ) - { - int s0 = xf[i] > 0 ? 1 : -1; - double t0 = 1./(1. + df[i]); - double t1 = scale*df[i]*t0*t0; - t0 *= scale2*(1. - df[i])*s0; - df[i] = t1; - xf[i] = t0; - } - } -} - - -void CvANN_MLP::calc_input_scale( const CvVectors* vecs, int flags ) -{ - bool reset_weights = (flags & UPDATE_WEIGHTS) == 0; - bool no_scale = (flags & NO_INPUT_SCALE) != 0; - double* scale = weights[0]; - int count = vecs->count; - - if( reset_weights ) - { - int i, j, vcount = layer_sizes->data.i[0]; - int type = vecs->type; - double a = no_scale ? 1. : 0.; - - for( j = 0; j < vcount; j++ ) - scale[2*j] = a, scale[j*2+1] = 0.; - - if( no_scale ) - return; - - for( i = 0; i < count; i++ ) - { - const float* f = vecs->data.fl[i]; - const double* d = vecs->data.db[i]; - for( j = 0; j < vcount; j++ ) - { - double t = type == CV_32F ? (double)f[j] : d[j]; - scale[j*2] += t; - scale[j*2+1] += t*t; - } - } - - for( j = 0; j < vcount; j++ ) - { - double s = scale[j*2], s2 = scale[j*2+1]; - double m = s/count, sigma2 = s2/count - m*m; - scale[j*2] = sigma2 < DBL_EPSILON ? 1 : 1./sqrt(sigma2); - scale[j*2+1] = -m*scale[j*2]; - } - } -} - - -void CvANN_MLP::calc_output_scale( const CvVectors* vecs, int flags ) -{ - int i, j, vcount = layer_sizes->data.i[layer_sizes->cols-1]; - int type = vecs->type; - double m = min_val, M = max_val, m1 = min_val1, M1 = max_val1; - bool reset_weights = (flags & UPDATE_WEIGHTS) == 0; - bool no_scale = (flags & NO_OUTPUT_SCALE) != 0; - int l_count = layer_sizes->cols; - double* scale = weights[l_count]; - double* inv_scale = weights[l_count+1]; - int count = vecs->count; - - CV_FUNCNAME( "CvANN_MLP::calc_output_scale" ); - - __BEGIN__; - - if( reset_weights ) - { - double a0 = no_scale ? 1 : DBL_MAX, b0 = no_scale ? 0 : -DBL_MAX; - - for( j = 0; j < vcount; j++ ) - { - scale[2*j] = inv_scale[2*j] = a0; - scale[j*2+1] = inv_scale[2*j+1] = b0; - } - - if( no_scale ) - EXIT; - } - - for( i = 0; i < count; i++ ) - { - const float* f = vecs->data.fl[i]; - const double* d = vecs->data.db[i]; - - for( j = 0; j < vcount; j++ ) - { - double t = type == CV_32F ? (double)f[j] : d[j]; - - if( reset_weights ) - { - double mj = scale[j*2], Mj = scale[j*2+1]; - if( mj > t ) mj = t; - if( Mj < t ) Mj = t; - - scale[j*2] = mj; - scale[j*2+1] = Mj; - } - else - { - t = t*inv_scale[j*2] + inv_scale[2*j+1]; - if( t < m1 || t > M1 ) - CV_ERROR( CV_StsOutOfRange, - "Some of new output training vector components run exceed the original range too much" ); - } - } - } - - if( reset_weights ) - for( j = 0; j < vcount; j++ ) - { - // map mj..Mj to m..M - double mj = scale[j*2], Mj = scale[j*2+1]; - double a, b; - double delta = Mj - mj; - if( delta < DBL_EPSILON ) - a = 1, b = (M + m - Mj - mj)*0.5; - else - a = (M - m)/delta, b = m - mj*a; - inv_scale[j*2] = a; inv_scale[j*2+1] = b; - a = 1./a; b = -b*a; - scale[j*2] = a; scale[j*2+1] = b; - } - - __END__; -} - - -bool CvANN_MLP::prepare_to_train( const CvMat* _inputs, const CvMat* _outputs, - const CvMat* _sample_weights, const CvMat* _sample_idx, - CvVectors* _ivecs, CvVectors* _ovecs, double** _sw, int _flags ) -{ - bool ok = false; - CvMat* sample_idx = 0; - CvVectors ivecs, ovecs; - double* sw = 0; - int count = 0; - - CV_FUNCNAME( "CvANN_MLP::prepare_to_train" ); - - ivecs.data.ptr = ovecs.data.ptr = 0; - assert( _ivecs && _ovecs ); - - __BEGIN__; - - const int* sidx = 0; - int i, sw_type = 0, sw_count = 0; - int sw_step = 0; - double sw_sum = 0; - - if( !layer_sizes ) - CV_ERROR( CV_StsError, - "The network has not been created. Use method create or the appropriate constructor" ); - - if( !CV_IS_MAT(_inputs) || (CV_MAT_TYPE(_inputs->type) != CV_32FC1 && - CV_MAT_TYPE(_inputs->type) != CV_64FC1) || _inputs->cols != layer_sizes->data.i[0] ) - CV_ERROR( CV_StsBadArg, - "input training data should be a floating-point matrix with" - "the number of rows equal to the number of training samples and " - "the number of columns equal to the size of 0-th (input) layer" ); - - if( !CV_IS_MAT(_outputs) || (CV_MAT_TYPE(_outputs->type) != CV_32FC1 && - CV_MAT_TYPE(_outputs->type) != CV_64FC1) || - _outputs->cols != layer_sizes->data.i[layer_sizes->cols - 1] ) - CV_ERROR( CV_StsBadArg, - "output training data should be a floating-point matrix with" - "the number of rows equal to the number of training samples and " - "the number of columns equal to the size of last (output) layer" ); - - if( _inputs->rows != _outputs->rows ) - CV_ERROR( CV_StsUnmatchedSizes, "The numbers of input and output samples do not match" ); - - if( _sample_idx ) - { - CV_CALL( sample_idx = cvPreprocessIndexArray( _sample_idx, _inputs->rows )); - sidx = sample_idx->data.i; - count = sample_idx->cols + sample_idx->rows - 1; - } - else - count = _inputs->rows; - - if( _sample_weights ) - { - if( !CV_IS_MAT(_sample_weights) ) - CV_ERROR( CV_StsBadArg, "sample_weights (if passed) must be a valid matrix" ); - - sw_type = CV_MAT_TYPE(_sample_weights->type); - sw_count = _sample_weights->cols + _sample_weights->rows - 1; - - if( (sw_type != CV_32FC1 && sw_type != CV_64FC1) || - (_sample_weights->cols != 1 && _sample_weights->rows != 1) || - (sw_count != count && sw_count != _inputs->rows) ) - CV_ERROR( CV_StsBadArg, - "sample_weights must be 1d floating-point vector containing weights " - "of all or selected training samples" ); - - sw_step = CV_IS_MAT_CONT(_sample_weights->type) ? 1 : - _sample_weights->step/CV_ELEM_SIZE(sw_type); - - CV_CALL( sw = (double*)cvAlloc( count*sizeof(sw[0]) )); - } - - CV_CALL( ivecs.data.ptr = (uchar**)cvAlloc( count*sizeof(ivecs.data.ptr[0]) )); - CV_CALL( ovecs.data.ptr = (uchar**)cvAlloc( count*sizeof(ovecs.data.ptr[0]) )); - - ivecs.type = CV_MAT_TYPE(_inputs->type); - ovecs.type = CV_MAT_TYPE(_outputs->type); - ivecs.count = ovecs.count = count; - - for( i = 0; i < count; i++ ) - { - int idx = sidx ? sidx[i] : i; - ivecs.data.ptr[i] = _inputs->data.ptr + idx*_inputs->step; - ovecs.data.ptr[i] = _outputs->data.ptr + idx*_outputs->step; - if( sw ) - { - int si = sw_count == count ? i : idx; - double w = sw_type == CV_32FC1 ? - (double)_sample_weights->data.fl[si*sw_step] : - _sample_weights->data.db[si*sw_step]; - sw[i] = w; - if( w < 0 ) - CV_ERROR( CV_StsOutOfRange, "some of sample weights are negative" ); - sw_sum += w; - } - } - - // normalize weights - if( sw ) - { - sw_sum = sw_sum > DBL_EPSILON ? 1./sw_sum : 0; - for( i = 0; i < count; i++ ) - sw[i] *= sw_sum; - } - - calc_input_scale( &ivecs, _flags ); - CV_CALL( calc_output_scale( &ovecs, _flags )); - - ok = true; - - __END__; - - if( !ok ) - { - cvFree( &ivecs.data.ptr ); - cvFree( &ovecs.data.ptr ); - cvFree( &sw ); - } - - cvReleaseMat( &sample_idx ); - *_ivecs = ivecs; - *_ovecs = ovecs; - *_sw = sw; - - return ok; -} - - -int CvANN_MLP::train( const CvMat* _inputs, const CvMat* _outputs, - const CvMat* _sample_weights, const CvMat* _sample_idx, - CvANN_MLP_TrainParams _params, int flags ) -{ - const int MAX_ITER = 1000; - const double DEFAULT_EPSILON = FLT_EPSILON; - - double* sw = 0; - CvVectors x0, u; - int iter = -1; - - x0.data.ptr = u.data.ptr = 0; - - CV_FUNCNAME( "CvANN_MLP::train" ); - - __BEGIN__; - - int max_iter; - double epsilon; - - params = _params; - - // initialize training data - CV_CALL( prepare_to_train( _inputs, _outputs, _sample_weights, - _sample_idx, &x0, &u, &sw, flags )); - - // ... and link weights - if( !(flags & UPDATE_WEIGHTS) ) - init_weights(); - - max_iter = params.term_crit.type & CV_TERMCRIT_ITER ? params.term_crit.max_iter : MAX_ITER; - max_iter = MAX( max_iter, 1 ); - - epsilon = params.term_crit.type & CV_TERMCRIT_EPS ? params.term_crit.epsilon : DEFAULT_EPSILON; - epsilon = MAX(epsilon, DBL_EPSILON); - - params.term_crit.type = CV_TERMCRIT_ITER + CV_TERMCRIT_EPS; - params.term_crit.max_iter = max_iter; - params.term_crit.epsilon = epsilon; - - if( params.train_method == CvANN_MLP_TrainParams::BACKPROP ) - { - CV_CALL( iter = train_backprop( x0, u, sw )); - } - else - { - CV_CALL( iter = train_rprop( x0, u, sw )); - } - - __END__; - - cvFree( &x0.data.ptr ); - cvFree( &u.data.ptr ); - cvFree( &sw ); - - return iter; -} - - -int CvANN_MLP::train_backprop( CvVectors x0, CvVectors u, const double* sw ) -{ - CvMat* dw = 0; - CvMat* buf = 0; - double **x = 0, **df = 0; - CvMat* _idx = 0; - int iter = -1, count = x0.count; - - CV_FUNCNAME( "CvANN_MLP::train_backprop" ); - - __BEGIN__; - - int i, j, k, ivcount, ovcount, l_count, total = 0, max_iter; - double *buf_ptr; - double prev_E = DBL_MAX*0.5, E = 0, epsilon; - - max_iter = params.term_crit.max_iter*count; - epsilon = params.term_crit.epsilon*count; - - l_count = layer_sizes->cols; - ivcount = layer_sizes->data.i[0]; - ovcount = layer_sizes->data.i[l_count-1]; - - // allocate buffers - for( i = 0; i < l_count; i++ ) - total += layer_sizes->data.i[i] + 1; - - CV_CALL( dw = cvCreateMat( wbuf->rows, wbuf->cols, wbuf->type )); - cvZero( dw ); - CV_CALL( buf = cvCreateMat( 1, (total + max_count)*2, CV_64F )); - CV_CALL( _idx = cvCreateMat( 1, count, CV_32SC1 )); - for( i = 0; i < count; i++ ) - _idx->data.i[i] = i; - - CV_CALL( x = (double**)cvAlloc( total*2*sizeof(x[0]) )); - df = x + total; - buf_ptr = buf->data.db; - - for( j = 0; j < l_count; j++ ) - { - x[j] = buf_ptr; - df[j] = x[j] + layer_sizes->data.i[j]; - buf_ptr += (df[j] - x[j])*2; - } - - // run back-propagation loop - /* - y_i = w_i*x_{i-1} - x_i = f(y_i) - E = 1/2*||u - x_N||^2 - grad_N = (x_N - u)*f'(y_i) - dw_i(t) = momentum*dw_i(t-1) + dw_scale*x_{i-1}*grad_i - w_i(t+1) = w_i(t) + dw_i(t) - grad_{i-1} = w_i^t*grad_i - */ - for( iter = 0; iter < max_iter; iter++ ) - { - int idx = iter % count; - double* w = weights[0]; - double sweight = sw ? count*sw[idx] : 1.; - CvMat _w, _dw, hdr1, hdr2, ghdr1, ghdr2, _df; - CvMat *x1 = &hdr1, *x2 = &hdr2, *grad1 = &ghdr1, *grad2 = &ghdr2, *temp; - - if( idx == 0 ) - { - //printf("%d. E = %g\n", iter/count, E); - if( fabs(prev_E - E) < epsilon ) - break; - prev_E = E; - E = 0; - - // shuffle indices - for( i = 0; i < count; i++ ) - { - int tt; - j = (*rng)(count); - k = (*rng)(count); - CV_SWAP( _idx->data.i[j], _idx->data.i[k], tt ); - } - } - - idx = _idx->data.i[idx]; - - if( x0.type == CV_32F ) - { - const float* x0data = x0.data.fl[idx]; - for( j = 0; j < ivcount; j++ ) - x[0][j] = x0data[j]*w[j*2] + w[j*2 + 1]; - } - else - { - const double* x0data = x0.data.db[idx]; - for( j = 0; j < ivcount; j++ ) - x[0][j] = x0data[j]*w[j*2] + w[j*2 + 1]; - } - - cvInitMatHeader( x1, 1, ivcount, CV_64F, x[0] ); - - // forward pass, compute y[i]=w*x[i-1], x[i]=f(y[i]), df[i]=f'(y[i]) - for( i = 1; i < l_count; i++ ) - { - cvInitMatHeader( x2, 1, layer_sizes->data.i[i], CV_64F, x[i] ); - cvInitMatHeader( &_w, x1->cols, x2->cols, CV_64F, weights[i] ); - cvGEMM( x1, &_w, 1, 0, 0, x2 ); - _df = *x2; - _df.data.db = df[i]; - calc_activ_func_deriv( x2, &_df, _w.data.db + _w.rows*_w.cols ); - CV_SWAP( x1, x2, temp ); - } - - cvInitMatHeader( grad1, 1, ovcount, CV_64F, buf_ptr ); - *grad2 = *grad1; - grad2->data.db = buf_ptr + max_count; - - w = weights[l_count+1]; - - // calculate error - if( u.type == CV_32F ) - { - const float* udata = u.data.fl[idx]; - for( k = 0; k < ovcount; k++ ) - { - double t = udata[k]*w[k*2] + w[k*2+1] - x[l_count-1][k]; - grad1->data.db[k] = t*sweight; - E += t*t; - } - } - else - { - const double* udata = u.data.db[idx]; - for( k = 0; k < ovcount; k++ ) - { - double t = udata[k]*w[k*2] + w[k*2+1] - x[l_count-1][k]; - grad1->data.db[k] = t*sweight; - E += t*t; - } - } - E *= sweight; - - // backward pass, update weights - for( i = l_count-1; i > 0; i-- ) - { - int n1 = layer_sizes->data.i[i-1], n2 = layer_sizes->data.i[i]; - cvInitMatHeader( &_df, 1, n2, CV_64F, df[i] ); - cvMul( grad1, &_df, grad1 ); - cvInitMatHeader( &_w, n1+1, n2, CV_64F, weights[i] ); - cvInitMatHeader( &_dw, n1+1, n2, CV_64F, dw->data.db + (weights[i] - weights[0]) ); - cvInitMatHeader( x1, n1+1, 1, CV_64F, x[i-1] ); - x[i-1][n1] = 1.; - cvGEMM( x1, grad1, params.bp_dw_scale, &_dw, params.bp_moment_scale, &_dw ); - cvAdd( &_w, &_dw, &_w ); - if( i > 1 ) - { - grad2->cols = n1; - _w.rows = n1; - cvGEMM( grad1, &_w, 1, 0, 0, grad2, CV_GEMM_B_T ); - } - CV_SWAP( grad1, grad2, temp ); - } - } - - iter /= count; - - __END__; - - cvReleaseMat( &dw ); - cvReleaseMat( &buf ); - cvReleaseMat( &_idx ); - cvFree( &x ); - - return iter; -} - -struct rprop_loop : cv::ParallelLoopBody { - rprop_loop(const CvANN_MLP* _point, double**& _weights, int& _count, int& _ivcount, CvVectors* _x0, - int& _l_count, CvMat*& _layer_sizes, int& _ovcount, int& _max_count, - CvVectors* _u, const double*& _sw, double& _inv_count, CvMat*& _dEdw, int& _dcount0, double* _E, int _buf_sz) - { - point = _point; - weights = _weights; - count = _count; - ivcount = _ivcount; - x0 = _x0; - l_count = _l_count; - layer_sizes = _layer_sizes; - ovcount = _ovcount; - max_count = _max_count; - u = _u; - sw = _sw; - inv_count = _inv_count; - dEdw = _dEdw; - dcount0 = _dcount0; - E = _E; - buf_sz = _buf_sz; - } - - const CvANN_MLP* point; - double** weights; - int count; - int ivcount; - CvVectors* x0; - int l_count; - CvMat* layer_sizes; - int ovcount; - int max_count; - CvVectors* u; - const double* sw; - double inv_count; - CvMat* dEdw; - int dcount0; - double* E; - int buf_sz; - - - void operator()( const cv::Range& range ) const - { - double* buf_ptr; - double** x = 0; - double **df = 0; - int total = 0; - - for(int i = 0; i < l_count; i++ ) - total += layer_sizes->data.i[i]; - CvMat* buf; - buf = cvCreateMat( 1, buf_sz, CV_64F ); - x = (double**)cvAlloc( total*2*sizeof(x[0]) ); - df = x + total; - buf_ptr = buf->data.db; - for(int i = 0; i < l_count; i++ ) - { - x[i] = buf_ptr; - df[i] = x[i] + layer_sizes->data.i[i]*dcount0; - buf_ptr += (df[i] - x[i])*2; - } - - for(int si = range.start; si < range.end; si++ ) - { - if (si % dcount0 != 0) continue; - int n1, n2, k; - double* w; - CvMat _w, _dEdw, hdr1, hdr2, ghdr1, ghdr2, _df; - CvMat *x1, *x2, *grad1, *grad2, *temp; - int dcount = 0; - - dcount = MIN(count - si , dcount0 ); - w = weights[0]; - grad1 = &ghdr1; grad2 = &ghdr2; - x1 = &hdr1; x2 = &hdr2; - - // grab and preprocess input data - if( x0->type == CV_32F ) - { - for(int i = 0; i < dcount; i++ ) - { - const float* x0data = x0->data.fl[si+i]; - double* xdata = x[0]+i*ivcount; - for(int j = 0; j < ivcount; j++ ) - xdata[j] = x0data[j]*w[j*2] + w[j*2+1]; - } - } - else - for(int i = 0; i < dcount; i++ ) - { - const double* x0data = x0->data.db[si+i]; - double* xdata = x[0]+i*ivcount; - for(int j = 0; j < ivcount; j++ ) - xdata[j] = x0data[j]*w[j*2] + w[j*2+1]; - } - cvInitMatHeader( x1, dcount, ivcount, CV_64F, x[0] ); - - // forward pass, compute y[i]=w*x[i-1], x[i]=f(y[i]), df[i]=f'(y[i]) - for(int i = 1; i < l_count; i++ ) - { - cvInitMatHeader( x2, dcount, layer_sizes->data.i[i], CV_64F, x[i] ); - cvInitMatHeader( &_w, x1->cols, x2->cols, CV_64F, weights[i] ); - cvGEMM( x1, &_w, 1, 0, 0, x2 ); - _df = *x2; - _df.data.db = df[i]; - point->calc_activ_func_deriv( x2, &_df, _w.data.db + _w.rows*_w.cols ); - CV_SWAP( x1, x2, temp ); - } - cvInitMatHeader( grad1, dcount, ovcount, CV_64F, buf_ptr ); - - w = weights[l_count+1]; - grad2->data.db = buf_ptr + max_count*dcount; - - // calculate error - if( u->type == CV_32F ) - for(int i = 0; i < dcount; i++ ) - { - const float* udata = u->data.fl[si+i]; - const double* xdata = x[l_count-1] + i*ovcount; - double* gdata = grad1->data.db + i*ovcount; - double sweight = sw ? sw[si+i] : inv_count, E1 = 0; - - for(int j = 0; j < ovcount; j++ ) - { - double t = udata[j]*w[j*2] + w[j*2+1] - xdata[j]; - gdata[j] = t*sweight; - E1 += t*t; - } - *E += sweight*E1; - } - else - for(int i = 0; i < dcount; i++ ) - { - const double* udata = u->data.db[si+i]; - const double* xdata = x[l_count-1] + i*ovcount; - double* gdata = grad1->data.db + i*ovcount; - double sweight = sw ? sw[si+i] : inv_count, E1 = 0; - - for(int j = 0; j < ovcount; j++ ) - { - double t = udata[j]*w[j*2] + w[j*2+1] - xdata[j]; - gdata[j] = t*sweight; - E1 += t*t; - } - *E += sweight*E1; - } - - // backward pass, update dEdw - static cv::Mutex mutex; - - for(int i = l_count-1; i > 0; i-- ) - { - n1 = layer_sizes->data.i[i-1]; n2 = layer_sizes->data.i[i]; - cvInitMatHeader( &_df, dcount, n2, CV_64F, df[i] ); - cvMul( grad1, &_df, grad1 ); - - { - cv::AutoLock lock(mutex); - cvInitMatHeader( &_dEdw, n1, n2, CV_64F, dEdw->data.db+(weights[i]-weights[0]) ); - cvInitMatHeader( x1, dcount, n1, CV_64F, x[i-1] ); - cvGEMM( x1, grad1, 1, &_dEdw, 1, &_dEdw, CV_GEMM_A_T ); - - // update bias part of dEdw - for( k = 0; k < dcount; k++ ) - { - double* dst = _dEdw.data.db + n1*n2; - const double* src = grad1->data.db + k*n2; - for(int j = 0; j < n2; j++ ) - dst[j] += src[j]; - } - - if (i > 1) - cvInitMatHeader( &_w, n1, n2, CV_64F, weights[i] ); - } - - cvInitMatHeader( grad2, dcount, n1, CV_64F, grad2->data.db ); - if( i > 1 ) - cvGEMM( grad1, &_w, 1, 0, 0, grad2, CV_GEMM_B_T ); - CV_SWAP( grad1, grad2, temp ); - } - } - cvFree(&x); - cvReleaseMat( &buf ); -} - -}; - - -int CvANN_MLP::train_rprop( CvVectors x0, CvVectors u, const double* sw ) -{ - const int max_buf_size = 1 << 16; - CvMat* dw = 0; - CvMat* dEdw = 0; - CvMat* prev_dEdw_sign = 0; - CvMat* buf = 0; - double **x = 0, **df = 0; - int iter = -1, count = x0.count; - - CV_FUNCNAME( "CvANN_MLP::train" ); - - __BEGIN__; - - int i, ivcount, ovcount, l_count, total = 0, max_iter, buf_sz, dcount0; - double *buf_ptr; - double prev_E = DBL_MAX*0.5, epsilon; - double dw_plus, dw_minus, dw_min, dw_max; - double inv_count; - - max_iter = params.term_crit.max_iter; - epsilon = params.term_crit.epsilon; - dw_plus = params.rp_dw_plus; - dw_minus = params.rp_dw_minus; - dw_min = params.rp_dw_min; - dw_max = params.rp_dw_max; - - l_count = layer_sizes->cols; - ivcount = layer_sizes->data.i[0]; - ovcount = layer_sizes->data.i[l_count-1]; - - // allocate buffers - for( i = 0; i < l_count; i++ ) - total += layer_sizes->data.i[i]; - - CV_CALL( dw = cvCreateMat( wbuf->rows, wbuf->cols, wbuf->type )); - cvSet( dw, cvScalarAll(params.rp_dw0) ); - CV_CALL( dEdw = cvCreateMat( wbuf->rows, wbuf->cols, wbuf->type )); - cvZero( dEdw ); - CV_CALL( prev_dEdw_sign = cvCreateMat( wbuf->rows, wbuf->cols, CV_8SC1 )); - cvZero( prev_dEdw_sign ); - - inv_count = 1./count; - dcount0 = max_buf_size/(2*total); - dcount0 = MAX( dcount0, 1 ); - dcount0 = MIN( dcount0, count ); - buf_sz = dcount0*(total + max_count)*2; - - CV_CALL( buf = cvCreateMat( 1, buf_sz, CV_64F )); - - CV_CALL( x = (double**)cvAlloc( total*2*sizeof(x[0]) )); - df = x + total; - buf_ptr = buf->data.db; - - for( i = 0; i < l_count; i++ ) - { - x[i] = buf_ptr; - df[i] = x[i] + layer_sizes->data.i[i]*dcount0; - buf_ptr += (df[i] - x[i])*2; - } - - // run rprop loop - /* - y_i(t) = w_i(t)*x_{i-1}(t) - x_i(t) = f(y_i(t)) - E = sum_over_all_samples(1/2*||u - x_N||^2) - grad_N = (x_N - u)*f'(y_i) - - MIN(dw_i{jk}(t)*dw_plus, dw_max), if dE/dw_i{jk}(t)*dE/dw_i{jk}(t-1) > 0 - dw_i{jk}(t) = MAX(dw_i{jk}(t)*dw_minus, dw_min), if dE/dw_i{jk}(t)*dE/dw_i{jk}(t-1) < 0 - dw_i{jk}(t-1) else - - if (dE/dw_i{jk}(t)*dE/dw_i{jk}(t-1) < 0) - dE/dw_i{jk}(t)<-0 - else - w_i{jk}(t+1) = w_i{jk}(t) + dw_i{jk}(t) - grad_{i-1}(t) = w_i^t(t)*grad_i(t) - */ - for( iter = 0; iter < max_iter; iter++ ) - { - int n1, n2, j, k; - double E = 0; - - // first, iterate through all the samples and compute dEdw - cv::parallel_for_(cv::Range(0, count), - rprop_loop(this, weights, count, ivcount, &x0, l_count, layer_sizes, - ovcount, max_count, &u, sw, inv_count, dEdw, dcount0, &E, buf_sz) - ); - - // now update weights - for( i = 1; i < l_count; i++ ) - { - n1 = layer_sizes->data.i[i-1]; n2 = layer_sizes->data.i[i]; - for( k = 0; k <= n1; k++ ) - { - double* wk = weights[i]+k*n2; - size_t delta = wk - weights[0]; - double* dwk = dw->data.db + delta; - double* dEdwk = dEdw->data.db + delta; - char* prevEk = (char*)(prev_dEdw_sign->data.ptr + delta); - - for( j = 0; j < n2; j++ ) - { - double Eval = dEdwk[j]; - double dval = dwk[j]; - double wval = wk[j]; - int s = CV_SIGN(Eval); - int ss = prevEk[j]*s; - if( ss > 0 ) - { - dval *= dw_plus; - dval = MIN( dval, dw_max ); - dwk[j] = dval; - wk[j] = wval + dval*s; - } - else if( ss < 0 ) - { - dval *= dw_minus; - dval = MAX( dval, dw_min ); - prevEk[j] = 0; - dwk[j] = dval; - wk[j] = wval + dval*s; - } - else - { - prevEk[j] = (char)s; - wk[j] = wval + dval*s; - } - dEdwk[j] = 0.; - } - } - } - - //printf("%d. E = %g\n", iter, E); - if( fabs(prev_E - E) < epsilon ) - break; - prev_E = E; - E = 0; - } - - __END__; - - cvReleaseMat( &dw ); - cvReleaseMat( &dEdw ); - cvReleaseMat( &prev_dEdw_sign ); - cvReleaseMat( &buf ); - cvFree( &x ); - - return iter; -} - - -void CvANN_MLP::write_params( CvFileStorage* fs ) const -{ - //CV_FUNCNAME( "CvANN_MLP::write_params" ); - - __BEGIN__; - - const char* activ_func_name = activ_func == IDENTITY ? "IDENTITY" : - activ_func == SIGMOID_SYM ? "SIGMOID_SYM" : - activ_func == GAUSSIAN ? "GAUSSIAN" : 0; - - if( activ_func_name ) - cvWriteString( fs, "activation_function", activ_func_name ); - else - cvWriteInt( fs, "activation_function", activ_func ); - - if( activ_func != IDENTITY ) - { - cvWriteReal( fs, "f_param1", f_param1 ); - cvWriteReal( fs, "f_param2", f_param2 ); - } - - cvWriteReal( fs, "min_val", min_val ); - cvWriteReal( fs, "max_val", max_val ); - cvWriteReal( fs, "min_val1", min_val1 ); - cvWriteReal( fs, "max_val1", max_val1 ); - - cvStartWriteStruct( fs, "training_params", CV_NODE_MAP ); - if( params.train_method == CvANN_MLP_TrainParams::BACKPROP ) - { - cvWriteString( fs, "train_method", "BACKPROP" ); - cvWriteReal( fs, "dw_scale", params.bp_dw_scale ); - cvWriteReal( fs, "moment_scale", params.bp_moment_scale ); - } - else if( params.train_method == CvANN_MLP_TrainParams::RPROP ) - { - cvWriteString( fs, "train_method", "RPROP" ); - cvWriteReal( fs, "dw0", params.rp_dw0 ); - cvWriteReal( fs, "dw_plus", params.rp_dw_plus ); - cvWriteReal( fs, "dw_minus", params.rp_dw_minus ); - cvWriteReal( fs, "dw_min", params.rp_dw_min ); - cvWriteReal( fs, "dw_max", params.rp_dw_max ); - } - - cvStartWriteStruct( fs, "term_criteria", CV_NODE_MAP + CV_NODE_FLOW ); - if( params.term_crit.type & CV_TERMCRIT_EPS ) - cvWriteReal( fs, "epsilon", params.term_crit.epsilon ); - if( params.term_crit.type & CV_TERMCRIT_ITER ) - cvWriteInt( fs, "iterations", params.term_crit.max_iter ); - cvEndWriteStruct( fs ); - - cvEndWriteStruct( fs ); - - __END__; -} - - -void CvANN_MLP::write( CvFileStorage* fs, const char* name ) const -{ - CV_FUNCNAME( "CvANN_MLP::write" ); - - __BEGIN__; - - int i, l_count = layer_sizes->cols; - - if( !layer_sizes ) - CV_ERROR( CV_StsError, "The network has not been initialized" ); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_ANN_MLP ); - - cvWrite( fs, "layer_sizes", layer_sizes ); - - write_params( fs ); - - cvStartWriteStruct( fs, "input_scale", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, weights[0], layer_sizes->data.i[0]*2, "d" ); - cvEndWriteStruct( fs ); - - cvStartWriteStruct( fs, "output_scale", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, weights[l_count], layer_sizes->data.i[l_count-1]*2, "d" ); - cvEndWriteStruct( fs ); - - cvStartWriteStruct( fs, "inv_output_scale", CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, weights[l_count+1], layer_sizes->data.i[l_count-1]*2, "d" ); - cvEndWriteStruct( fs ); - - cvStartWriteStruct( fs, "weights", CV_NODE_SEQ ); - for( i = 1; i < l_count; i++ ) - { - cvStartWriteStruct( fs, 0, CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, weights[i], (layer_sizes->data.i[i-1]+1)*layer_sizes->data.i[i], "d" ); - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); - - __END__; -} - - -void CvANN_MLP::read_params( CvFileStorage* fs, CvFileNode* node ) -{ - //CV_FUNCNAME( "CvANN_MLP::read_params" ); - - __BEGIN__; - - const char* activ_func_name = cvReadStringByName( fs, node, "activation_function", 0 ); - CvFileNode* tparams_node; - - if( activ_func_name ) - activ_func = strcmp( activ_func_name, "SIGMOID_SYM" ) == 0 ? SIGMOID_SYM : - strcmp( activ_func_name, "IDENTITY" ) == 0 ? IDENTITY : - strcmp( activ_func_name, "GAUSSIAN" ) == 0 ? GAUSSIAN : 0; - else - activ_func = cvReadIntByName( fs, node, "activation_function" ); - - f_param1 = cvReadRealByName( fs, node, "f_param1", 0 ); - f_param2 = cvReadRealByName( fs, node, "f_param2", 0 ); - - set_activ_func( activ_func, f_param1, f_param2 ); - - min_val = cvReadRealByName( fs, node, "min_val", 0. ); - max_val = cvReadRealByName( fs, node, "max_val", 1. ); - min_val1 = cvReadRealByName( fs, node, "min_val1", 0. ); - max_val1 = cvReadRealByName( fs, node, "max_val1", 1. ); - - tparams_node = cvGetFileNodeByName( fs, node, "training_params" ); - params = CvANN_MLP_TrainParams(); - - if( tparams_node ) - { - const char* tmethod_name = cvReadStringByName( fs, tparams_node, "train_method", "" ); - CvFileNode* tcrit_node; - - if( strcmp( tmethod_name, "BACKPROP" ) == 0 ) - { - params.train_method = CvANN_MLP_TrainParams::BACKPROP; - params.bp_dw_scale = cvReadRealByName( fs, tparams_node, "dw_scale", 0 ); - params.bp_moment_scale = cvReadRealByName( fs, tparams_node, "moment_scale", 0 ); - } - else if( strcmp( tmethod_name, "RPROP" ) == 0 ) - { - params.train_method = CvANN_MLP_TrainParams::RPROP; - params.rp_dw0 = cvReadRealByName( fs, tparams_node, "dw0", 0 ); - params.rp_dw_plus = cvReadRealByName( fs, tparams_node, "dw_plus", 0 ); - params.rp_dw_minus = cvReadRealByName( fs, tparams_node, "dw_minus", 0 ); - params.rp_dw_min = cvReadRealByName( fs, tparams_node, "dw_min", 0 ); - params.rp_dw_max = cvReadRealByName( fs, tparams_node, "dw_max", 0 ); - } - - tcrit_node = cvGetFileNodeByName( fs, tparams_node, "term_criteria" ); - if( tcrit_node ) - { - params.term_crit.epsilon = cvReadRealByName( fs, tcrit_node, "epsilon", -1 ); - params.term_crit.max_iter = cvReadIntByName( fs, tcrit_node, "iterations", -1 ); - params.term_crit.type = (params.term_crit.epsilon >= 0 ? CV_TERMCRIT_EPS : 0) + - (params.term_crit.max_iter >= 0 ? CV_TERMCRIT_ITER : 0); - } - } - - __END__; -} - - -void CvANN_MLP::read( CvFileStorage* fs, CvFileNode* node ) -{ - CvMat* _layer_sizes = 0; - - CV_FUNCNAME( "CvANN_MLP::read" ); - - __BEGIN__; - - CvFileNode* w; - CvSeqReader reader; - int i, l_count; - - _layer_sizes = (CvMat*)cvReadByName( fs, node, "layer_sizes" ); - CV_CALL( create( _layer_sizes, SIGMOID_SYM, 0, 0 )); - l_count = layer_sizes->cols; - - CV_CALL( read_params( fs, node )); - - w = cvGetFileNodeByName( fs, node, "input_scale" ); - if( !w || CV_NODE_TYPE(w->tag) != CV_NODE_SEQ || - w->data.seq->total != layer_sizes->data.i[0]*2 ) - CV_ERROR( CV_StsParseError, "input_scale tag is not found or is invalid" ); - - CV_CALL( cvReadRawData( fs, w, weights[0], "d" )); - - w = cvGetFileNodeByName( fs, node, "output_scale" ); - if( !w || CV_NODE_TYPE(w->tag) != CV_NODE_SEQ || - w->data.seq->total != layer_sizes->data.i[l_count-1]*2 ) - CV_ERROR( CV_StsParseError, "output_scale tag is not found or is invalid" ); - - CV_CALL( cvReadRawData( fs, w, weights[l_count], "d" )); - - w = cvGetFileNodeByName( fs, node, "inv_output_scale" ); - if( !w || CV_NODE_TYPE(w->tag) != CV_NODE_SEQ || - w->data.seq->total != layer_sizes->data.i[l_count-1]*2 ) - CV_ERROR( CV_StsParseError, "inv_output_scale tag is not found or is invalid" ); - - CV_CALL( cvReadRawData( fs, w, weights[l_count+1], "d" )); - - w = cvGetFileNodeByName( fs, node, "weights" ); - if( !w || CV_NODE_TYPE(w->tag) != CV_NODE_SEQ || - w->data.seq->total != l_count - 1 ) - CV_ERROR( CV_StsParseError, "weights tag is not found or is invalid" ); - - cvStartReadSeq( w->data.seq, &reader ); - - for( i = 1; i < l_count; i++ ) - { - w = (CvFileNode*)reader.ptr; - CV_CALL( cvReadRawData( fs, w, weights[i], "d" )); - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - - __END__; -} - -using namespace cv; - -CvANN_MLP::CvANN_MLP( const Mat& _layer_sizes, int _activ_func, - double _f_param1, double _f_param2 ) -{ - layer_sizes = wbuf = 0; - min_val = max_val = min_val1 = max_val1 = 0.; - weights = 0; - rng = &cv::theRNG(); - default_model_name = "my_nn"; - create( _layer_sizes, _activ_func, _f_param1, _f_param2 ); -} - -void CvANN_MLP::create( const Mat& _layer_sizes, int _activ_func, - double _f_param1, double _f_param2 ) -{ - CvMat cvlayer_sizes = _layer_sizes; - create( &cvlayer_sizes, _activ_func, _f_param1, _f_param2 ); -} - -int CvANN_MLP::train( const Mat& _inputs, const Mat& _outputs, - const Mat& _sample_weights, const Mat& _sample_idx, - CvANN_MLP_TrainParams _params, int flags ) -{ - CvMat inputs = _inputs, outputs = _outputs, sweights = _sample_weights, sidx = _sample_idx; - return train(&inputs, &outputs, sweights.data.ptr ? &sweights : 0, - sidx.data.ptr ? &sidx : 0, _params, flags); -} - -float CvANN_MLP::predict( const Mat& _inputs, Mat& _outputs ) const -{ - CV_Assert(layer_sizes != 0); - _outputs.create(_inputs.rows, layer_sizes->data.i[layer_sizes->cols-1], _inputs.type()); - CvMat inputs = _inputs, outputs = _outputs; - - return predict(&inputs, &outputs); -} - -/* End of file. */ diff --git a/modules/ml/src/boost.cpp b/modules/ml/src/boost.cpp deleted file mode 100644 index d8e5c0d..0000000 --- a/modules/ml/src/boost.cpp +++ /dev/null @@ -1,2156 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -static inline double -log_ratio( double val ) -{ - const double eps = 1e-5; - - val = MAX( val, eps ); - val = MIN( val, 1. - eps ); - return log( val/(1. - val) ); -} - - -CvBoostParams::CvBoostParams() -{ - boost_type = CvBoost::REAL; - weak_count = 100; - weight_trim_rate = 0.95; - cv_folds = 0; - max_depth = 1; -} - - -CvBoostParams::CvBoostParams( int _boost_type, int _weak_count, - double _weight_trim_rate, int _max_depth, - bool _use_surrogates, const float* _priors ) -{ - boost_type = _boost_type; - weak_count = _weak_count; - weight_trim_rate = _weight_trim_rate; - split_criteria = CvBoost::DEFAULT; - cv_folds = 0; - max_depth = _max_depth; - use_surrogates = _use_surrogates; - priors = _priors; -} - - - -///////////////////////////////// CvBoostTree /////////////////////////////////// - -CvBoostTree::CvBoostTree() -{ - ensemble = 0; -} - - -CvBoostTree::~CvBoostTree() -{ - clear(); -} - - -void -CvBoostTree::clear() -{ - CvDTree::clear(); - ensemble = 0; -} - - -bool -CvBoostTree::train( CvDTreeTrainData* _train_data, - const CvMat* _subsample_idx, CvBoost* _ensemble ) -{ - clear(); - ensemble = _ensemble; - data = _train_data; - data->shared = true; - return do_train( _subsample_idx ); -} - - -bool -CvBoostTree::train( const CvMat*, int, const CvMat*, const CvMat*, - const CvMat*, const CvMat*, const CvMat*, CvDTreeParams ) -{ - assert(0); - return false; -} - - -bool -CvBoostTree::train( CvDTreeTrainData*, const CvMat* ) -{ - assert(0); - return false; -} - - -void -CvBoostTree::scale( double _scale ) -{ - CvDTreeNode* node = root; - - // traverse the tree and scale all the node values - for(;;) - { - CvDTreeNode* parent; - for(;;) - { - node->value *= _scale; - if( !node->left ) - break; - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } -} - - -void -CvBoostTree::try_split_node( CvDTreeNode* node ) -{ - CvDTree::try_split_node( node ); - - if( !node->left ) - { - // if the node has not been split, - // store the responses for the corresponding training samples - double* weak_eval = ensemble->get_weak_response()->data.db; - cv::AutoBuffer inn_buf(node->sample_count); - const int* labels = data->get_cv_labels( node, (int*)inn_buf ); - int i, count = node->sample_count; - double value = node->value; - - for( i = 0; i < count; i++ ) - weak_eval[labels[i]] = value; - } -} - - -double -CvBoostTree::calc_node_dir( CvDTreeNode* node ) -{ - char* dir = (char*)data->direction->data.ptr; - const double* weights = ensemble->get_subtree_weights()->data.db; - int i, n = node->sample_count, vi = node->split->var_idx; - double L, R; - - assert( !node->split->inversed ); - - if( data->get_var_type(vi) >= 0 ) // split on categorical var - { - cv::AutoBuffer inn_buf(n); - const int* cat_labels = data->get_cat_var_data( node, vi, (int*)inn_buf ); - const int* subset = node->split->subset; - double sum = 0, sum_abs = 0; - - for( i = 0; i < n; i++ ) - { - int idx = ((cat_labels[i] == 65535) && data->is_buf_16u) ? -1 : cat_labels[i]; - double w = weights[i]; - int d = idx >= 0 ? CV_DTREE_CAT_DIR(idx,subset) : 0; - sum += d*w; sum_abs += (d & 1)*w; - dir[i] = (char)d; - } - - R = (sum_abs + sum) * 0.5; - L = (sum_abs - sum) * 0.5; - } - else // split on ordered var - { - cv::AutoBuffer inn_buf(2*n*sizeof(int)+n*sizeof(float)); - float* values_buf = (float*)(uchar*)inn_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, &sorted_indices, sample_indices_buf ); - int split_point = node->split->ord.split_point; - int n1 = node->get_num_valid(vi); - - assert( 0 <= split_point && split_point < n1-1 ); - L = R = 0; - - for( i = 0; i <= split_point; i++ ) - { - int idx = sorted_indices[i]; - double w = weights[idx]; - dir[idx] = (char)-1; - L += w; - } - - for( ; i < n1; i++ ) - { - int idx = sorted_indices[i]; - double w = weights[idx]; - dir[idx] = (char)1; - R += w; - } - - for( ; i < n; i++ ) - dir[sorted_indices[i]] = (char)0; - } - - node->maxlr = MAX( L, R ); - return node->split->quality/(L + R); -} - - -CvDTreeSplit* -CvBoostTree::find_split_ord_class( CvDTreeNode* node, int vi, float init_quality, - CvDTreeSplit* _split, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - - const double* weights = ensemble->get_subtree_weights()->data.db; - int n = node->sample_count; - int n1 = node->get_num_valid(vi); - - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(n*(3*sizeof(int)+sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, &sorted_indices, sample_indices_buf ); - int* responses_buf = sorted_indices_buf + n; - const int* responses = data->get_class_labels( node, responses_buf ); - const double* rcw0 = weights + n; - double lcw[2] = {0,0}, rcw[2]; - int i, best_i = -1; - double best_val = init_quality; - int boost_type = ensemble->get_params().boost_type; - int split_criteria = ensemble->get_params().split_criteria; - - rcw[0] = rcw0[0]; rcw[1] = rcw0[1]; - for( i = n1; i < n; i++ ) - { - int idx = sorted_indices[i]; - double w = weights[idx]; - rcw[responses[idx]] -= w; - } - - if( split_criteria != CvBoost::GINI && split_criteria != CvBoost::MISCLASS ) - split_criteria = boost_type == CvBoost::DISCRETE ? CvBoost::MISCLASS : CvBoost::GINI; - - if( split_criteria == CvBoost::GINI ) - { - double L = 0, R = rcw[0] + rcw[1]; - double lsum2 = 0, rsum2 = rcw[0]*rcw[0] + rcw[1]*rcw[1]; - - for( i = 0; i < n1 - 1; i++ ) - { - int idx = sorted_indices[i]; - double w = weights[idx], w2 = w*w; - double lv, rv; - idx = responses[idx]; - L += w; R -= w; - lv = lcw[idx]; rv = rcw[idx]; - lsum2 += 2*lv*w + w2; - rsum2 -= 2*rv*w - w2; - lcw[idx] = lv + w; rcw[idx] = rv - w; - - if( values[i] + epsilon < values[i+1] ) - { - double val = (lsum2*R + rsum2*L)/(L*R); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - } - else - { - for( i = 0; i < n1 - 1; i++ ) - { - int idx = sorted_indices[i]; - double w = weights[idx]; - idx = responses[idx]; - lcw[idx] += w; - rcw[idx] -= w; - - if( values[i] + epsilon < values[i+1] ) - { - double val = lcw[0] + rcw[1], val2 = lcw[1] + rcw[0]; - val = MAX(val, val2); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - } - - CvDTreeSplit* split = 0; - if( best_i >= 0 ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (values[best_i] + values[best_i+1])*0.5f; - split->ord.split_point = best_i; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - - -#define CV_CMP_NUM_PTR(a,b) (*(a) < *(b)) -static CV_IMPLEMENT_QSORT_EX( icvSortDblPtr, double*, CV_CMP_NUM_PTR, int ) - -CvDTreeSplit* -CvBoostTree::find_split_cat_class( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - int ci = data->get_var_type(vi); - int n = node->sample_count; - int mi = data->cat_count->data.i[ci]; - - int base_size = (2*mi+3)*sizeof(double) + mi*sizeof(double*); - cv::AutoBuffer inn_buf((2*mi+3)*sizeof(double) + mi*sizeof(double*)); - if( !_ext_buf) - inn_buf.allocate( base_size + 2*n*sizeof(int) ); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - - int* cat_labels_buf = (int*)ext_buf; - const int* cat_labels = data->get_cat_var_data(node, vi, cat_labels_buf); - int* responses_buf = cat_labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - double lcw[2]={0,0}, rcw[2]={0,0}; - - double* cjk = (double*)cv::alignPtr(base_buf,sizeof(double))+2; - const double* weights = ensemble->get_subtree_weights()->data.db; - double** dbl_ptr = (double**)(cjk + 2*mi); - int i, j, k, idx; - double L = 0, R; - double best_val = init_quality; - int best_subset = -1, subset_i; - int boost_type = ensemble->get_params().boost_type; - int split_criteria = ensemble->get_params().split_criteria; - - // init array of counters: - // c_{jk} - number of samples that have vi-th input variable = j and response = k. - for( j = -1; j < mi; j++ ) - cjk[j*2] = cjk[j*2+1] = 0; - - for( i = 0; i < n; i++ ) - { - double w = weights[i]; - j = ((cat_labels[i] == 65535) && data->is_buf_16u) ? -1 : cat_labels[i]; - k = responses[i]; - cjk[j*2 + k] += w; - } - - for( j = 0; j < mi; j++ ) - { - rcw[0] += cjk[j*2]; - rcw[1] += cjk[j*2+1]; - dbl_ptr[j] = cjk + j*2 + 1; - } - - R = rcw[0] + rcw[1]; - - if( split_criteria != CvBoost::GINI && split_criteria != CvBoost::MISCLASS ) - split_criteria = boost_type == CvBoost::DISCRETE ? CvBoost::MISCLASS : CvBoost::GINI; - - // sort rows of c_jk by increasing c_j,1 - // (i.e. by the weight of samples in j-th category that belong to class 1) - icvSortDblPtr( dbl_ptr, mi, 0 ); - - for( subset_i = 0; subset_i < mi-1; subset_i++ ) - { - idx = (int)(dbl_ptr[subset_i] - cjk)/2; - const double* crow = cjk + idx*2; - double w0 = crow[0], w1 = crow[1]; - double weight = w0 + w1; - - if( weight < FLT_EPSILON ) - continue; - - lcw[0] += w0; rcw[0] -= w0; - lcw[1] += w1; rcw[1] -= w1; - - if( split_criteria == CvBoost::GINI ) - { - double lsum2 = lcw[0]*lcw[0] + lcw[1]*lcw[1]; - double rsum2 = rcw[0]*rcw[0] + rcw[1]*rcw[1]; - - L += weight; - R -= weight; - - if( L > FLT_EPSILON && R > FLT_EPSILON ) - { - double val = (lsum2*R + rsum2*L)/(L*R); - if( best_val < val ) - { - best_val = val; - best_subset = subset_i; - } - } - } - else - { - double val = lcw[0] + rcw[1]; - double val2 = lcw[1] + rcw[0]; - - val = MAX(val, val2); - if( best_val < val ) - { - best_val = val; - best_subset = subset_i; - } - } - } - - CvDTreeSplit* split = 0; - if( best_subset >= 0 ) - { - split = _split ? _split : data->new_split_cat( 0, -1.0f); - split->var_idx = vi; - split->quality = (float)best_val; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - for( i = 0; i <= best_subset; i++ ) - { - idx = (int)(dbl_ptr[i] - cjk) >> 1; - split->subset[idx >> 5] |= 1 << (idx & 31); - } - } - return split; -} - - -CvDTreeSplit* -CvBoostTree::find_split_ord_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - const double* weights = ensemble->get_subtree_weights()->data.db; - int n = node->sample_count; - int n1 = node->get_num_valid(vi); - - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(2*n*(sizeof(int)+sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - - float* values_buf = (float*)ext_buf; - int* indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = indices_buf + n; - const float* values = 0; - const int* indices = 0; - data->get_ord_var_data( node, vi, values_buf, indices_buf, &values, &indices, sample_indices_buf ); - float* responses_buf = (float*)(indices_buf + n); - const float* responses = data->get_ord_responses( node, responses_buf, sample_indices_buf ); - - int i, best_i = -1; - double L = 0, R = weights[n]; - double best_val = init_quality, lsum = 0, rsum = node->value*R; - - // compensate for missing values - for( i = n1; i < n; i++ ) - { - int idx = indices[i]; - double w = weights[idx]; - rsum -= responses[idx]*w; - R -= w; - } - - // find the optimal split - for( i = 0; i < n1 - 1; i++ ) - { - int idx = indices[i]; - double w = weights[idx]; - double t = responses[idx]*w; - L += w; R -= w; - lsum += t; rsum -= t; - - if( values[i] + epsilon < values[i+1] ) - { - double val = (lsum*lsum*R + rsum*rsum*L)/(L*R); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - - CvDTreeSplit* split = 0; - if( best_i >= 0 ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (values[best_i] + values[best_i+1])*0.5f; - split->ord.split_point = best_i; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - - -CvDTreeSplit* -CvBoostTree::find_split_cat_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - const double* weights = ensemble->get_subtree_weights()->data.db; - int ci = data->get_var_type(vi); - int n = node->sample_count; - int mi = data->cat_count->data.i[ci]; - int base_size = (2*mi+3)*sizeof(double) + mi*sizeof(double*); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*(2*sizeof(int) + sizeof(float))); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - - int* cat_labels_buf = (int*)ext_buf; - const int* cat_labels = data->get_cat_var_data(node, vi, cat_labels_buf); - float* responses_buf = (float*)(cat_labels_buf + n); - int* sample_indices_buf = (int*)(responses_buf + n); - const float* responses = data->get_ord_responses(node, responses_buf, sample_indices_buf); - - double* sum = (double*)cv::alignPtr(base_buf,sizeof(double)) + 1; - double* counts = sum + mi + 1; - double** sum_ptr = (double**)(counts + mi); - double L = 0, R = 0, best_val = init_quality, lsum = 0, rsum = 0; - int i, best_subset = -1, subset_i; - - for( i = -1; i < mi; i++ ) - sum[i] = counts[i] = 0; - - // calculate sum response and weight of each category of the input var - for( i = 0; i < n; i++ ) - { - int idx = ((cat_labels[i] == 65535) && data->is_buf_16u) ? -1 : cat_labels[i]; - double w = weights[i]; - double s = sum[idx] + responses[i]*w; - double nc = counts[idx] + w; - sum[idx] = s; - counts[idx] = nc; - } - - // calculate average response in each category - for( i = 0; i < mi; i++ ) - { - R += counts[i]; - rsum += sum[i]; - sum[i] = fabs(counts[i]) > DBL_EPSILON ? sum[i]/counts[i] : 0; - sum_ptr[i] = sum + i; - } - - icvSortDblPtr( sum_ptr, mi, 0 ); - - // revert back to unnormalized sums - // (there should be a very little loss in accuracy) - for( i = 0; i < mi; i++ ) - sum[i] *= counts[i]; - - for( subset_i = 0; subset_i < mi-1; subset_i++ ) - { - int idx = (int)(sum_ptr[subset_i] - sum); - double ni = counts[idx]; - - if( ni > FLT_EPSILON ) - { - double s = sum[idx]; - lsum += s; L += ni; - rsum -= s; R -= ni; - - if( L > FLT_EPSILON && R > FLT_EPSILON ) - { - double val = (lsum*lsum*R + rsum*rsum*L)/(L*R); - if( best_val < val ) - { - best_val = val; - best_subset = subset_i; - } - } - } - } - - CvDTreeSplit* split = 0; - if( best_subset >= 0 ) - { - split = _split ? _split : data->new_split_cat( 0, -1.0f); - split->var_idx = vi; - split->quality = (float)best_val; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - for( i = 0; i <= best_subset; i++ ) - { - int idx = (int)(sum_ptr[i] - sum); - split->subset[idx >> 5] |= 1 << (idx & 31); - } - } - return split; -} - - -CvDTreeSplit* -CvBoostTree::find_surrogate_split_ord( CvDTreeNode* node, int vi, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - int n = node->sample_count; - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(n*(2*sizeof(int)+sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = indices_buf + n; - const float* values = 0; - const int* indices = 0; - data->get_ord_var_data( node, vi, values_buf, indices_buf, &values, &indices, sample_indices_buf ); - - const double* weights = ensemble->get_subtree_weights()->data.db; - const char* dir = (char*)data->direction->data.ptr; - int n1 = node->get_num_valid(vi); - // LL - number of samples that both the primary and the surrogate splits send to the left - // LR - ... primary split sends to the left and the surrogate split sends to the right - // RL - ... primary split sends to the right and the surrogate split sends to the left - // RR - ... both send to the right - int i, best_i = -1, best_inversed = 0; - double best_val; - double LL = 0, RL = 0, LR, RR; - double worst_val = node->maxlr; - double sum = 0, sum_abs = 0; - best_val = worst_val; - - for( i = 0; i < n1; i++ ) - { - int idx = indices[i]; - double w = weights[idx]; - int d = dir[idx]; - sum += d*w; sum_abs += (d & 1)*w; - } - - // sum_abs = R + L; sum = R - L - RR = (sum_abs + sum)*0.5; - LR = (sum_abs - sum)*0.5; - - // initially all the samples are sent to the right by the surrogate split, - // LR of them are sent to the left by primary split, and RR - to the right. - // now iteratively compute LL, LR, RL and RR for every possible surrogate split value. - for( i = 0; i < n1 - 1; i++ ) - { - int idx = indices[i]; - double w = weights[idx]; - int d = dir[idx]; - - if( d < 0 ) - { - LL += w; LR -= w; - if( LL + RR > best_val && values[i] + epsilon < values[i+1] ) - { - best_val = LL + RR; - best_i = i; best_inversed = 0; - } - } - else if( d > 0 ) - { - RL += w; RR -= w; - if( RL + LR > best_val && values[i] + epsilon < values[i+1] ) - { - best_val = RL + LR; - best_i = i; best_inversed = 1; - } - } - } - - return best_i >= 0 && best_val > node->maxlr ? data->new_split_ord( vi, - (values[best_i] + values[best_i+1])*0.5f, best_i, - best_inversed, (float)best_val ) : 0; -} - - -CvDTreeSplit* -CvBoostTree::find_surrogate_split_cat( CvDTreeNode* node, int vi, uchar* _ext_buf ) -{ - const char* dir = (char*)data->direction->data.ptr; - const double* weights = ensemble->get_subtree_weights()->data.db; - int n = node->sample_count; - int i, mi = data->cat_count->data.i[data->get_var_type(vi)]; - - int base_size = (2*mi+3)*sizeof(double); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*sizeof(int)); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - int* cat_labels_buf = (int*)ext_buf; - const int* cat_labels = data->get_cat_var_data(node, vi, cat_labels_buf); - - // LL - number of samples that both the primary and the surrogate splits send to the left - // LR - ... primary split sends to the left and the surrogate split sends to the right - // RL - ... primary split sends to the right and the surrogate split sends to the left - // RR - ... both send to the right - CvDTreeSplit* split = data->new_split_cat( vi, 0 ); - double best_val = 0; - double* lc = (double*)cv::alignPtr(cat_labels_buf + n, sizeof(double)) + 1; - double* rc = lc + mi + 1; - - for( i = -1; i < mi; i++ ) - lc[i] = rc[i] = 0; - - // 1. for each category calculate the weight of samples - // sent to the left (lc) and to the right (rc) by the primary split - for( i = 0; i < n; i++ ) - { - int idx = ((cat_labels[i] == 65535) && data->is_buf_16u) ? -1 : cat_labels[i]; - double w = weights[i]; - int d = dir[i]; - double sum = lc[idx] + d*w; - double sum_abs = rc[idx] + (d & 1)*w; - lc[idx] = sum; rc[idx] = sum_abs; - } - - for( i = 0; i < mi; i++ ) - { - double sum = lc[i]; - double sum_abs = rc[i]; - lc[i] = (sum_abs - sum) * 0.5; - rc[i] = (sum_abs + sum) * 0.5; - } - - // 2. now form the split. - // in each category send all the samples to the same direction as majority - for( i = 0; i < mi; i++ ) - { - double lval = lc[i], rval = rc[i]; - if( lval > rval ) - { - split->subset[i >> 5] |= 1 << (i & 31); - best_val += lval; - } - else - best_val += rval; - } - - split->quality = (float)best_val; - if( split->quality <= node->maxlr ) - cvSetRemoveByPtr( data->split_heap, split ), split = 0; - - return split; -} - - -void -CvBoostTree::calc_node_value( CvDTreeNode* node ) -{ - int i, n = node->sample_count; - const double* weights = ensemble->get_weights()->data.db; - cv::AutoBuffer inn_buf(n*(sizeof(int) + ( data->is_classifier ? sizeof(int) : sizeof(int) + sizeof(float)))); - int* labels_buf = (int*)(uchar*)inn_buf; - const int* labels = data->get_cv_labels(node, labels_buf); - double* subtree_weights = ensemble->get_subtree_weights()->data.db; - double rcw[2] = {0,0}; - int boost_type = ensemble->get_params().boost_type; - - if( data->is_classifier ) - { - int* _responses_buf = labels_buf + n; - const int* _responses = data->get_class_labels(node, _responses_buf); - int m = data->get_num_classes(); - int* cls_count = data->counts->data.i; - for( int k = 0; k < m; k++ ) - cls_count[k] = 0; - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - double w = weights[idx]; - int r = _responses[i]; - rcw[r] += w; - cls_count[r]++; - subtree_weights[i] = w; - } - - node->class_idx = rcw[1] > rcw[0]; - - if( boost_type == CvBoost::DISCRETE ) - { - // ignore cat_map for responses, and use {-1,1}, - // as the whole ensemble response is computes as sign(sum_i(weak_response_i) - node->value = node->class_idx*2 - 1; - } - else - { - double p = rcw[1]/(rcw[0] + rcw[1]); - assert( boost_type == CvBoost::REAL ); - - // store log-ratio of the probability - node->value = 0.5*log_ratio(p); - } - } - else - { - // in case of regression tree: - // * node value is 1/n*sum_i(Y_i), where Y_i is i-th response, - // n is the number of samples in the node. - // * node risk is the sum of squared errors: sum_i((Y_i - )^2) - double sum = 0, sum2 = 0, iw; - float* values_buf = (float*)(labels_buf + n); - int* sample_indices_buf = (int*)(values_buf + n); - const float* values = data->get_ord_responses(node, values_buf, sample_indices_buf); - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - double w = weights[idx]/*priors[values[i] > 0]*/; - double t = values[i]; - rcw[0] += w; - subtree_weights[i] = w; - sum += t*w; - sum2 += t*t*w; - } - - iw = 1./rcw[0]; - node->value = sum*iw; - node->node_risk = sum2 - (sum*iw)*sum; - - // renormalize the risk, as in try_split_node the unweighted formula - // sqrt(risk)/n is used, rather than sqrt(risk)/sum(weights_i) - node->node_risk *= n*iw*n*iw; - } - - // store summary weights - subtree_weights[n] = rcw[0]; - subtree_weights[n+1] = rcw[1]; -} - - -void CvBoostTree::read( CvFileStorage* fs, CvFileNode* fnode, CvBoost* _ensemble, CvDTreeTrainData* _data ) -{ - CvDTree::read( fs, fnode, _data ); - ensemble = _ensemble; -} - - -void CvBoostTree::read( CvFileStorage*, CvFileNode* ) -{ - assert(0); -} - -void CvBoostTree::read( CvFileStorage* _fs, CvFileNode* _node, - CvDTreeTrainData* _data ) -{ - CvDTree::read( _fs, _node, _data ); -} - - -/////////////////////////////////// CvBoost ///////////////////////////////////// - -CvBoost::CvBoost() -{ - data = 0; - weak = 0; - default_model_name = "my_boost_tree"; - - active_vars = active_vars_abs = orig_response = sum_response = weak_eval = - subsample_mask = weights = subtree_weights = 0; - have_active_cat_vars = have_subsample = false; - - clear(); -} - - -void CvBoost::prune( CvSlice slice ) -{ - if( weak && weak->total > 0 ) - { - CvSeqReader reader; - int i, count = cvSliceLength( slice, weak ); - - cvStartReadSeq( weak, &reader ); - cvSetSeqReaderPos( &reader, slice.start_index ); - - for( i = 0; i < count; i++ ) - { - CvBoostTree* w; - CV_READ_SEQ_ELEM( w, reader ); - delete w; - } - - cvSeqRemoveSlice( weak, slice ); - } -} - - -void CvBoost::clear() -{ - if( weak ) - { - prune( CV_WHOLE_SEQ ); - cvReleaseMemStorage( &weak->storage ); - } - if( data ) - delete data; - weak = 0; - data = 0; - cvReleaseMat( &active_vars ); - cvReleaseMat( &active_vars_abs ); - cvReleaseMat( &orig_response ); - cvReleaseMat( &sum_response ); - cvReleaseMat( &weak_eval ); - cvReleaseMat( &subsample_mask ); - cvReleaseMat( &weights ); - cvReleaseMat( &subtree_weights ); - - have_subsample = false; -} - - -CvBoost::~CvBoost() -{ - clear(); -} - - -CvBoost::CvBoost( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, CvBoostParams _params ) -{ - weak = 0; - data = 0; - default_model_name = "my_boost_tree"; - - active_vars = active_vars_abs = orig_response = sum_response = weak_eval = - subsample_mask = weights = subtree_weights = 0; - - train( _train_data, _tflag, _responses, _var_idx, _sample_idx, - _var_type, _missing_mask, _params ); -} - - -bool -CvBoost::set_params( const CvBoostParams& _params ) -{ - bool ok = false; - - CV_FUNCNAME( "CvBoost::set_params" ); - - __BEGIN__; - - params = _params; - if( params.boost_type != DISCRETE && params.boost_type != REAL && - params.boost_type != LOGIT && params.boost_type != GENTLE ) - CV_ERROR( CV_StsBadArg, "Unknown/unsupported boosting type" ); - - params.weak_count = MAX( params.weak_count, 1 ); - params.weight_trim_rate = MAX( params.weight_trim_rate, 0. ); - params.weight_trim_rate = MIN( params.weight_trim_rate, 1. ); - if( params.weight_trim_rate < FLT_EPSILON ) - params.weight_trim_rate = 1.f; - - if( params.boost_type == DISCRETE && - params.split_criteria != GINI && params.split_criteria != MISCLASS ) - params.split_criteria = MISCLASS; - if( params.boost_type == REAL && - params.split_criteria != GINI && params.split_criteria != MISCLASS ) - params.split_criteria = GINI; - if( (params.boost_type == LOGIT || params.boost_type == GENTLE) && - params.split_criteria != SQERR ) - params.split_criteria = SQERR; - - ok = true; - - __END__; - - return ok; -} - - -bool -CvBoost::train( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, - CvBoostParams _params, bool _update ) -{ - bool ok = false; - CvMemStorage* storage = 0; - - CV_FUNCNAME( "CvBoost::train" ); - - __BEGIN__; - - int i; - - set_params( _params ); - - cvReleaseMat( &active_vars ); - cvReleaseMat( &active_vars_abs ); - - if( !_update || !data ) - { - clear(); - data = new CvDTreeTrainData( _train_data, _tflag, _responses, _var_idx, - _sample_idx, _var_type, _missing_mask, _params, true, true ); - - if( data->get_num_classes() != 2 ) - CV_ERROR( CV_StsNotImplemented, - "Boosted trees can only be used for 2-class classification." ); - CV_CALL( storage = cvCreateMemStorage() ); - weak = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvBoostTree*), storage ); - storage = 0; - } - else - { - data->set_data( _train_data, _tflag, _responses, _var_idx, - _sample_idx, _var_type, _missing_mask, _params, true, true, true ); - } - - if ( (_params.boost_type == LOGIT) || (_params.boost_type == GENTLE) ) - data->do_responses_copy(); - - update_weights( 0 ); - - for( i = 0; i < params.weak_count; i++ ) - { - CvBoostTree* tree = new CvBoostTree; - if( !tree->train( data, subsample_mask, this ) ) - { - delete tree; - break; - } - //cvCheckArr( get_weak_response()); - cvSeqPush( weak, &tree ); - update_weights( tree ); - trim_weights(); - if( cvCountNonZero(subsample_mask) == 0 ) - break; - } - - if(weak->total > 0) - { - get_active_vars(); // recompute active_vars* maps and condensed_idx's in the splits. - data->is_classifier = true; - data->free_train_data(); - ok = true; - } - else - clear(); - - __END__; - - return ok; -} - -bool CvBoost::train( CvMLData* _data, - CvBoostParams _params, - bool update ) -{ - bool result = false; - - CV_FUNCNAME( "CvBoost::train" ); - - __BEGIN__; - - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* var_types = _data->get_var_types(); - const CvMat* train_sidx = _data->get_train_sample_idx(); - const CvMat* var_idx = _data->get_var_idx(); - - CV_CALL( result = train( values, CV_ROW_SAMPLE, response, var_idx, - train_sidx, var_types, missing, _params, update ) ); - - __END__; - - return result; -} - -void -CvBoost::update_weights_impl( CvBoostTree* tree, double initial_weights[2] ) -{ - CV_FUNCNAME( "CvBoost::update_weights_impl" ); - - __BEGIN__; - - int i, n = data->sample_count; - double sumw = 0.; - int step = 0; - float* fdata = 0; - int *sample_idx_buf; - const int* sample_idx = 0; - cv::AutoBuffer inn_buf; - size_t _buf_size = (params.boost_type == LOGIT) || (params.boost_type == GENTLE) ? (size_t)(data->sample_count)*sizeof(int) : 0; - if( !tree ) - _buf_size += n*sizeof(int); - else - { - if( have_subsample ) - _buf_size += data->get_length_subbuf()*(sizeof(float)+sizeof(uchar)); - } - inn_buf.allocate(_buf_size); - uchar* cur_buf_pos = (uchar*)inn_buf; - - if ( (params.boost_type == LOGIT) || (params.boost_type == GENTLE) ) - { - step = CV_IS_MAT_CONT(data->responses_copy->type) ? - 1 : data->responses_copy->step / CV_ELEM_SIZE(data->responses_copy->type); - fdata = data->responses_copy->data.fl; - sample_idx_buf = (int*)cur_buf_pos; - cur_buf_pos = (uchar*)(sample_idx_buf + data->sample_count); - sample_idx = data->get_sample_indices( data->data_root, sample_idx_buf ); - } - CvMat* dtree_data_buf = data->buf; - size_t length_buf_row = data->get_length_subbuf(); - if( !tree ) // before training the first tree, initialize weights and other parameters - { - int* class_labels_buf = (int*)cur_buf_pos; - cur_buf_pos = (uchar*)(class_labels_buf + n); - const int* class_labels = data->get_class_labels(data->data_root, class_labels_buf); - // in case of logitboost and gentle adaboost each weak tree is a regression tree, - // so we need to convert class labels to floating-point values - - double w0 = 1./n; - double p[2] = { initial_weights[0], initial_weights[1] }; - - cvReleaseMat( &orig_response ); - cvReleaseMat( &sum_response ); - cvReleaseMat( &weak_eval ); - cvReleaseMat( &subsample_mask ); - cvReleaseMat( &weights ); - cvReleaseMat( &subtree_weights ); - - CV_CALL( orig_response = cvCreateMat( 1, n, CV_32S )); - CV_CALL( weak_eval = cvCreateMat( 1, n, CV_64F )); - CV_CALL( subsample_mask = cvCreateMat( 1, n, CV_8U )); - CV_CALL( weights = cvCreateMat( 1, n, CV_64F )); - CV_CALL( subtree_weights = cvCreateMat( 1, n + 2, CV_64F )); - - if( data->have_priors ) - { - // compute weight scale for each class from their prior probabilities - int c1 = 0; - for( i = 0; i < n; i++ ) - c1 += class_labels[i]; - p[0] = data->priors->data.db[0]*(c1 < n ? 1./(n - c1) : 0.); - p[1] = data->priors->data.db[1]*(c1 > 0 ? 1./c1 : 0.); - p[0] /= p[0] + p[1]; - p[1] = 1. - p[0]; - } - - if (data->is_buf_16u) - { - unsigned short* labels = (unsigned short*)(dtree_data_buf->data.s + data->data_root->buf_idx*length_buf_row + - data->data_root->offset + (data->work_var_count-1)*data->sample_count); - for( i = 0; i < n; i++ ) - { - // save original categorical responses {0,1}, convert them to {-1,1} - orig_response->data.i[i] = class_labels[i]*2 - 1; - // make all the samples active at start. - // later, in trim_weights() deactivate/reactive again some, if need - subsample_mask->data.ptr[i] = (uchar)1; - // make all the initial weights the same. - weights->data.db[i] = w0*p[class_labels[i]]; - // set the labels to find (from within weak tree learning proc) - // the particular sample weight, and where to store the response. - labels[i] = (unsigned short)i; - } - } - else - { - int* labels = dtree_data_buf->data.i + data->data_root->buf_idx*length_buf_row + - data->data_root->offset + (data->work_var_count-1)*data->sample_count; - - for( i = 0; i < n; i++ ) - { - // save original categorical responses {0,1}, convert them to {-1,1} - orig_response->data.i[i] = class_labels[i]*2 - 1; - // make all the samples active at start. - // later, in trim_weights() deactivate/reactive again some, if need - subsample_mask->data.ptr[i] = (uchar)1; - // make all the initial weights the same. - weights->data.db[i] = w0*p[class_labels[i]]; - // set the labels to find (from within weak tree learning proc) - // the particular sample weight, and where to store the response. - labels[i] = i; - } - } - - if( params.boost_type == LOGIT ) - { - CV_CALL( sum_response = cvCreateMat( 1, n, CV_64F )); - - for( i = 0; i < n; i++ ) - { - sum_response->data.db[i] = 0; - fdata[sample_idx[i]*step] = orig_response->data.i[i] > 0 ? 2.f : -2.f; - } - - // in case of logitboost each weak tree is a regression tree. - // the target function values are recalculated for each of the trees - data->is_classifier = false; - } - else if( params.boost_type == GENTLE ) - { - for( i = 0; i < n; i++ ) - fdata[sample_idx[i]*step] = (float)orig_response->data.i[i]; - - data->is_classifier = false; - } - } - else - { - // at this moment, for all the samples that participated in the training of the most - // recent weak classifier we know the responses. For other samples we need to compute them - if( have_subsample ) - { - float* values = (float*)cur_buf_pos; - cur_buf_pos = (uchar*)(values + data->get_length_subbuf()); - uchar* missing = cur_buf_pos; - cur_buf_pos = missing + data->get_length_subbuf() * (size_t)CV_ELEM_SIZE(data->buf->type); - - CvMat _sample, _mask; - - // invert the subsample mask - cvXorS( subsample_mask, cvScalar(1.), subsample_mask ); - data->get_vectors( subsample_mask, values, missing, 0 ); - - _sample = cvMat( 1, data->var_count, CV_32F ); - _mask = cvMat( 1, data->var_count, CV_8U ); - - // run tree through all the non-processed samples - for( i = 0; i < n; i++ ) - if( subsample_mask->data.ptr[i] ) - { - _sample.data.fl = values; - _mask.data.ptr = missing; - values += _sample.cols; - missing += _mask.cols; - weak_eval->data.db[i] = tree->predict( &_sample, &_mask, true )->value; - } - } - - // now update weights and other parameters for each type of boosting - if( params.boost_type == DISCRETE ) - { - // Discrete AdaBoost: - // weak_eval[i] (=f(x_i)) is in {-1,1} - // err = sum(w_i*(f(x_i) != y_i))/sum(w_i) - // C = log((1-err)/err) - // w_i *= exp(C*(f(x_i) != y_i)) - - double C, err = 0.; - double scale[] = { 1., 0. }; - - for( i = 0; i < n; i++ ) - { - double w = weights->data.db[i]; - sumw += w; - err += w*(weak_eval->data.db[i] != orig_response->data.i[i]); - } - - if( sumw != 0 ) - err /= sumw; - C = err = -log_ratio( err ); - scale[1] = exp(err); - - sumw = 0; - for( i = 0; i < n; i++ ) - { - double w = weights->data.db[i]* - scale[weak_eval->data.db[i] != orig_response->data.i[i]]; - sumw += w; - weights->data.db[i] = w; - } - - tree->scale( C ); - } - else if( params.boost_type == REAL ) - { - // Real AdaBoost: - // weak_eval[i] = f(x_i) = 0.5*log(p(x_i)/(1-p(x_i))), p(x_i)=P(y=1|x_i) - // w_i *= exp(-y_i*f(x_i)) - - for( i = 0; i < n; i++ ) - weak_eval->data.db[i] *= -orig_response->data.i[i]; - - cvExp( weak_eval, weak_eval ); - - for( i = 0; i < n; i++ ) - { - double w = weights->data.db[i]*weak_eval->data.db[i]; - sumw += w; - weights->data.db[i] = w; - } - } - else if( params.boost_type == LOGIT ) - { - // LogitBoost: - // weak_eval[i] = f(x_i) in [-z_max,z_max] - // sum_response = F(x_i). - // F(x_i) += 0.5*f(x_i) - // p(x_i) = exp(F(x_i))/(exp(F(x_i)) + exp(-F(x_i))=1/(1+exp(-2*F(x_i))) - // reuse weak_eval: weak_eval[i] <- p(x_i) - // w_i = p(x_i)*1(1 - p(x_i)) - // z_i = ((y_i+1)/2 - p(x_i))/(p(x_i)*(1 - p(x_i))) - // store z_i to the data->data_root as the new target responses - - const double lb_weight_thresh = FLT_EPSILON; - const double lb_z_max = 10.; - /*float* responses_buf = data->get_resp_float_buf(); - const float* responses = 0; - data->get_ord_responses(data->data_root, responses_buf, &responses);*/ - - /*if( weak->total == 7 ) - putchar('*');*/ - - for( i = 0; i < n; i++ ) - { - double s = sum_response->data.db[i] + 0.5*weak_eval->data.db[i]; - sum_response->data.db[i] = s; - weak_eval->data.db[i] = -2*s; - } - - cvExp( weak_eval, weak_eval ); - - for( i = 0; i < n; i++ ) - { - double p = 1./(1. + weak_eval->data.db[i]); - double w = p*(1 - p), z; - w = MAX( w, lb_weight_thresh ); - weights->data.db[i] = w; - sumw += w; - if( orig_response->data.i[i] > 0 ) - { - z = 1./p; - fdata[sample_idx[i]*step] = (float)MIN(z, lb_z_max); - } - else - { - z = 1./(1-p); - fdata[sample_idx[i]*step] = (float)-MIN(z, lb_z_max); - } - } - } - else - { - // Gentle AdaBoost: - // weak_eval[i] = f(x_i) in [-1,1] - // w_i *= exp(-y_i*f(x_i)) - assert( params.boost_type == GENTLE ); - - for( i = 0; i < n; i++ ) - weak_eval->data.db[i] *= -orig_response->data.i[i]; - - cvExp( weak_eval, weak_eval ); - - for( i = 0; i < n; i++ ) - { - double w = weights->data.db[i] * weak_eval->data.db[i]; - weights->data.db[i] = w; - sumw += w; - } - } - } - - // renormalize weights - if( sumw > FLT_EPSILON ) - { - sumw = 1./sumw; - for( i = 0; i < n; ++i ) - weights->data.db[i] *= sumw; - } - - __END__; -} - -void -CvBoost::update_weights( CvBoostTree* tree ) { - double initial_weights[2] = { 1, 1 }; - update_weights_impl( tree, initial_weights ); -} - -static CV_IMPLEMENT_QSORT_EX( icvSort_64f, double, CV_LT, int ) - - -void -CvBoost::trim_weights() -{ - //CV_FUNCNAME( "CvBoost::trim_weights" ); - - __BEGIN__; - - int i, count = data->sample_count, nz_count = 0; - double sum, threshold; - - if( params.weight_trim_rate <= 0. || params.weight_trim_rate >= 1. ) - EXIT; - - // use weak_eval as temporary buffer for sorted weights - cvCopy( weights, weak_eval ); - - icvSort_64f( weak_eval->data.db, count, 0 ); - - // as weight trimming occurs immediately after updating the weights, - // where they are renormalized, we assume that the weight sum = 1. - sum = 1. - params.weight_trim_rate; - - for( i = 0; i < count; i++ ) - { - double w = weak_eval->data.db[i]; - if( sum <= 0 ) - break; - sum -= w; - } - - threshold = i < count ? weak_eval->data.db[i] : DBL_MAX; - - for( i = 0; i < count; i++ ) - { - double w = weights->data.db[i]; - int f = w >= threshold; - subsample_mask->data.ptr[i] = (uchar)f; - nz_count += f; - } - - have_subsample = nz_count < count; - - __END__; -} - - -const CvMat* -CvBoost::get_active_vars( bool absolute_idx ) -{ - CvMat* mask = 0; - CvMat* inv_map = 0; - CvMat* result = 0; - - CV_FUNCNAME( "CvBoost::get_active_vars" ); - - __BEGIN__; - - if( !weak ) - CV_ERROR( CV_StsError, "The boosted tree ensemble has not been trained yet" ); - - if( !active_vars || !active_vars_abs ) - { - CvSeqReader reader; - int i, j, nactive_vars; - CvBoostTree* wtree; - const CvDTreeNode* node; - - assert(!active_vars && !active_vars_abs); - mask = cvCreateMat( 1, data->var_count, CV_8U ); - inv_map = cvCreateMat( 1, data->var_count, CV_32S ); - cvZero( mask ); - cvSet( inv_map, cvScalar(-1) ); - - // first pass: compute the mask of used variables - cvStartReadSeq( weak, &reader ); - for( i = 0; i < weak->total; i++ ) - { - CV_READ_SEQ_ELEM(wtree, reader); - - node = wtree->get_root(); - assert( node != 0 ); - for(;;) - { - const CvDTreeNode* parent; - for(;;) - { - CvDTreeSplit* split = node->split; - for( ; split != 0; split = split->next ) - mask->data.ptr[split->var_idx] = 1; - if( !node->left ) - break; - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } - } - - nactive_vars = cvCountNonZero(mask); - - //if ( nactive_vars > 0 ) - { - active_vars = cvCreateMat( 1, nactive_vars, CV_32S ); - active_vars_abs = cvCreateMat( 1, nactive_vars, CV_32S ); - - have_active_cat_vars = false; - - for( i = j = 0; i < data->var_count; i++ ) - { - if( mask->data.ptr[i] ) - { - active_vars->data.i[j] = i; - active_vars_abs->data.i[j] = data->var_idx ? data->var_idx->data.i[i] : i; - inv_map->data.i[i] = j; - if( data->var_type->data.i[i] >= 0 ) - have_active_cat_vars = true; - j++; - } - } - - - // second pass: now compute the condensed indices - cvStartReadSeq( weak, &reader ); - for( i = 0; i < weak->total; i++ ) - { - CV_READ_SEQ_ELEM(wtree, reader); - node = wtree->get_root(); - for(;;) - { - const CvDTreeNode* parent; - for(;;) - { - CvDTreeSplit* split = node->split; - for( ; split != 0; split = split->next ) - { - split->condensed_idx = inv_map->data.i[split->var_idx]; - assert( split->condensed_idx >= 0 ); - } - - if( !node->left ) - break; - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } - } - } - } - - result = absolute_idx ? active_vars_abs : active_vars; - - __END__; - - cvReleaseMat( &mask ); - cvReleaseMat( &inv_map ); - - return result; -} - - -float -CvBoost::predict( const CvMat* _sample, const CvMat* _missing, - CvMat* weak_responses, CvSlice slice, - bool raw_mode, bool return_sum ) const -{ - float value = -FLT_MAX; - - CvSeqReader reader; - double sum = 0; - int wstep = 0; - const float* sample_data; - - if( !weak ) - CV_Error( CV_StsError, "The boosted tree ensemble has not been trained yet" ); - - if( !CV_IS_MAT(_sample) || CV_MAT_TYPE(_sample->type) != CV_32FC1 || - (_sample->cols != 1 && _sample->rows != 1) || - (_sample->cols + _sample->rows - 1 != data->var_all && !raw_mode) || - (active_vars && _sample->cols + _sample->rows - 1 != active_vars->cols && raw_mode) ) - CV_Error( CV_StsBadArg, - "the input sample must be 1d floating-point vector with the same " - "number of elements as the total number of variables or " - "as the number of variables used for training" ); - - if( _missing ) - { - if( !CV_IS_MAT(_missing) || !CV_IS_MASK_ARR(_missing) || - !CV_ARE_SIZES_EQ(_missing, _sample) ) - CV_Error( CV_StsBadArg, - "the missing data mask must be 8-bit vector of the same size as input sample" ); - } - - int i, weak_count = cvSliceLength( slice, weak ); - if( weak_count >= weak->total ) - { - weak_count = weak->total; - slice.start_index = 0; - } - - if( weak_responses ) - { - if( !CV_IS_MAT(weak_responses) || - CV_MAT_TYPE(weak_responses->type) != CV_32FC1 || - (weak_responses->cols != 1 && weak_responses->rows != 1) || - weak_responses->cols + weak_responses->rows - 1 != weak_count ) - CV_Error( CV_StsBadArg, - "The output matrix of weak classifier responses must be valid " - "floating-point vector of the same number of components as the length of input slice" ); - wstep = CV_IS_MAT_CONT(weak_responses->type) ? 1 : weak_responses->step/sizeof(float); - } - - int var_count = active_vars->cols; - const int* vtype = data->var_type->data.i; - const int* cmap = data->cat_map->data.i; - const int* cofs = data->cat_ofs->data.i; - - cv::Mat sample = _sample; - cv::Mat missing; - if(!_missing) - missing = _missing; - - // if need, preprocess the input vector - if( !raw_mode ) - { - int sstep, mstep = 0; - const float* src_sample; - const uchar* src_mask = 0; - float* dst_sample; - uchar* dst_mask; - const int* vidx = active_vars->data.i; - const int* vidx_abs = active_vars_abs->data.i; - bool have_mask = _missing != 0; - - sample = cv::Mat(1, var_count, CV_32FC1); - missing = cv::Mat(1, var_count, CV_8UC1); - - dst_sample = sample.ptr(); - dst_mask = missing.ptr(); - - src_sample = _sample->data.fl; - sstep = CV_IS_MAT_CONT(_sample->type) ? 1 : _sample->step/sizeof(src_sample[0]); - - if( _missing ) - { - src_mask = _missing->data.ptr; - mstep = CV_IS_MAT_CONT(_missing->type) ? 1 : _missing->step; - } - - for( i = 0; i < var_count; i++ ) - { - int idx = vidx[i], idx_abs = vidx_abs[i]; - float val = src_sample[idx_abs*sstep]; - int ci = vtype[idx]; - uchar m = src_mask ? src_mask[idx_abs*mstep] : (uchar)0; - - if( ci >= 0 ) - { - int a = cofs[ci], b = (ci+1 >= data->cat_ofs->cols) ? data->cat_map->cols : cofs[ci+1], - c = a; - int ival = cvRound(val); - if ( (ival != val) && (!m) ) - CV_Error( CV_StsBadArg, - "one of input categorical variable is not an integer" ); - - while( a < b ) - { - c = (a + b) >> 1; - if( ival < cmap[c] ) - b = c; - else if( ival > cmap[c] ) - a = c+1; - else - break; - } - - if( c < 0 || ival != cmap[c] ) - { - m = 1; - have_mask = true; - } - else - { - val = (float)(c - cofs[ci]); - } - } - - dst_sample[i] = val; - dst_mask[i] = m; - } - - if( !have_mask ) - missing.release(); - } - else - { - if( !CV_IS_MAT_CONT(_sample->type & (_missing ? _missing->type : -1)) ) - CV_Error( CV_StsBadArg, "In raw mode the input vectors must be continuous" ); - } - - cvStartReadSeq( weak, &reader ); - cvSetSeqReaderPos( &reader, slice.start_index ); - - sample_data = sample.ptr(); - - if( !have_active_cat_vars && missing.empty() && !weak_responses ) - { - for( i = 0; i < weak_count; i++ ) - { - CvBoostTree* wtree; - const CvDTreeNode* node; - CV_READ_SEQ_ELEM( wtree, reader ); - - node = wtree->get_root(); - while( node->left ) - { - CvDTreeSplit* split = node->split; - int vi = split->condensed_idx; - float val = sample_data[vi]; - int dir = val <= split->ord.c ? -1 : 1; - if( split->inversed ) - dir = -dir; - node = dir < 0 ? node->left : node->right; - } - sum += node->value; - } - } - else - { - const int* avars = active_vars->data.i; - const uchar* m = !missing.empty() ? missing.ptr() : 0; - - // full-featured version - for( i = 0; i < weak_count; i++ ) - { - CvBoostTree* wtree; - const CvDTreeNode* node; - CV_READ_SEQ_ELEM( wtree, reader ); - - node = wtree->get_root(); - while( node->left ) - { - const CvDTreeSplit* split = node->split; - int dir = 0; - for( ; !dir && split != 0; split = split->next ) - { - int vi = split->condensed_idx; - int ci = vtype[avars[vi]]; - float val = sample_data[vi]; - if( m && m[vi] ) - continue; - if( ci < 0 ) // ordered - dir = val <= split->ord.c ? -1 : 1; - else // categorical - { - int c = cvRound(val); - dir = CV_DTREE_CAT_DIR(c, split->subset); - } - if( split->inversed ) - dir = -dir; - } - - if( !dir ) - { - int diff = node->right->sample_count - node->left->sample_count; - dir = diff < 0 ? -1 : 1; - } - node = dir < 0 ? node->left : node->right; - } - if( weak_responses ) - weak_responses->data.fl[i*wstep] = (float)node->value; - sum += node->value; - } - } - - if( return_sum ) - value = (float)sum; - else - { - int cls_idx = sum >= 0; - if( raw_mode ) - value = (float)cls_idx; - else - value = (float)cmap[cofs[vtype[data->var_count]] + cls_idx]; - } - - return value; -} - -float CvBoost::calc_error( CvMLData* _data, int type, std::vector *resp ) -{ - float err = 0; - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* sample_idx = (type == CV_TEST_ERROR) ? _data->get_test_sample_idx() : _data->get_train_sample_idx(); - const CvMat* var_types = _data->get_var_types(); - int* sidx = sample_idx ? sample_idx->data.i : 0; - int r_step = CV_IS_MAT_CONT(response->type) ? - 1 : response->step / CV_ELEM_SIZE(response->type); - bool is_classifier = var_types->data.ptr[var_types->cols-1] == CV_VAR_CATEGORICAL; - int sample_count = sample_idx ? sample_idx->cols : 0; - sample_count = (type == CV_TRAIN_ERROR && sample_count == 0) ? values->rows : sample_count; - float* pred_resp = 0; - if( resp && (sample_count > 0) ) - { - resp->resize( sample_count ); - pred_resp = &((*resp)[0]); - } - if ( is_classifier ) - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 ); - if( pred_resp ) - pred_resp[i] = r; - int d = fabs((double)r - response->data.fl[si*r_step]) <= FLT_EPSILON ? 0 : 1; - err += d; - } - err = sample_count ? err / (float)sample_count * 100 : -FLT_MAX; - } - else - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 ); - if( pred_resp ) - pred_resp[i] = r; - float d = r - response->data.fl[si*r_step]; - err += d*d; - } - err = sample_count ? err / (float)sample_count : -FLT_MAX; - } - return err; -} - -void CvBoost::write_params( CvFileStorage* fs ) const -{ - const char* boost_type_str = - params.boost_type == DISCRETE ? "DiscreteAdaboost" : - params.boost_type == REAL ? "RealAdaboost" : - params.boost_type == LOGIT ? "LogitBoost" : - params.boost_type == GENTLE ? "GentleAdaboost" : 0; - - const char* split_crit_str = - params.split_criteria == DEFAULT ? "Default" : - params.split_criteria == GINI ? "Gini" : - params.boost_type == MISCLASS ? "Misclassification" : - params.boost_type == SQERR ? "SquaredErr" : 0; - - if( boost_type_str ) - cvWriteString( fs, "boosting_type", boost_type_str ); - else - cvWriteInt( fs, "boosting_type", params.boost_type ); - - if( split_crit_str ) - cvWriteString( fs, "splitting_criteria", split_crit_str ); - else - cvWriteInt( fs, "splitting_criteria", params.split_criteria ); - - cvWriteInt( fs, "ntrees", weak->total ); - cvWriteReal( fs, "weight_trimming_rate", params.weight_trim_rate ); - - data->write_params( fs ); -} - - -void CvBoost::read_params( CvFileStorage* fs, CvFileNode* fnode ) -{ - CV_FUNCNAME( "CvBoost::read_params" ); - - __BEGIN__; - - CvFileNode* temp; - - if( !fnode || !CV_NODE_IS_MAP(fnode->tag) ) - return; - - data = new CvDTreeTrainData(); - CV_CALL( data->read_params(fs, fnode)); - data->shared = true; - - params.max_depth = data->params.max_depth; - params.min_sample_count = data->params.min_sample_count; - params.max_categories = data->params.max_categories; - params.priors = data->params.priors; - params.regression_accuracy = data->params.regression_accuracy; - params.use_surrogates = data->params.use_surrogates; - - temp = cvGetFileNodeByName( fs, fnode, "boosting_type" ); - if( !temp ) - return; - - if( temp && CV_NODE_IS_STRING(temp->tag) ) - { - const char* boost_type_str = cvReadString( temp, "" ); - params.boost_type = strcmp( boost_type_str, "DiscreteAdaboost" ) == 0 ? DISCRETE : - strcmp( boost_type_str, "RealAdaboost" ) == 0 ? REAL : - strcmp( boost_type_str, "LogitBoost" ) == 0 ? LOGIT : - strcmp( boost_type_str, "GentleAdaboost" ) == 0 ? GENTLE : -1; - } - else - params.boost_type = cvReadInt( temp, -1 ); - - if( params.boost_type < DISCRETE || params.boost_type > GENTLE ) - CV_ERROR( CV_StsBadArg, "Unknown boosting type" ); - - temp = cvGetFileNodeByName( fs, fnode, "splitting_criteria" ); - if( temp && CV_NODE_IS_STRING(temp->tag) ) - { - const char* split_crit_str = cvReadString( temp, "" ); - params.split_criteria = strcmp( split_crit_str, "Default" ) == 0 ? DEFAULT : - strcmp( split_crit_str, "Gini" ) == 0 ? GINI : - strcmp( split_crit_str, "Misclassification" ) == 0 ? MISCLASS : - strcmp( split_crit_str, "SquaredErr" ) == 0 ? SQERR : -1; - } - else - params.split_criteria = cvReadInt( temp, -1 ); - - if( params.split_criteria < DEFAULT || params.boost_type > SQERR ) - CV_ERROR( CV_StsBadArg, "Unknown boosting type" ); - - params.weak_count = cvReadIntByName( fs, fnode, "ntrees" ); - params.weight_trim_rate = cvReadRealByName( fs, fnode, "weight_trimming_rate", 0. ); - - __END__; -} - - - -void -CvBoost::read( CvFileStorage* fs, CvFileNode* node ) -{ - CV_FUNCNAME( "CvBoost::read" ); - - __BEGIN__; - - CvSeqReader reader; - CvFileNode* trees_fnode; - CvMemStorage* storage; - int i, ntrees; - - clear(); - read_params( fs, node ); - - if( !data ) - EXIT; - - trees_fnode = cvGetFileNodeByName( fs, node, "trees" ); - if( !trees_fnode || !CV_NODE_IS_SEQ(trees_fnode->tag) ) - CV_ERROR( CV_StsParseError, " tag is missing" ); - - cvStartReadSeq( trees_fnode->data.seq, &reader ); - ntrees = trees_fnode->data.seq->total; - - if( ntrees != params.weak_count ) - CV_ERROR( CV_StsUnmatchedSizes, - "The number of trees stored does not match tag value" ); - - CV_CALL( storage = cvCreateMemStorage() ); - weak = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvBoostTree*), storage ); - - for( i = 0; i < ntrees; i++ ) - { - CvBoostTree* tree = new CvBoostTree(); - CV_CALL(tree->read( fs, (CvFileNode*)reader.ptr, this, data )); - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - cvSeqPush( weak, &tree ); - } - get_active_vars(); - - __END__; -} - - -void -CvBoost::write( CvFileStorage* fs, const char* name ) const -{ - CV_FUNCNAME( "CvBoost::write" ); - - __BEGIN__; - - CvSeqReader reader; - int i; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_BOOSTING ); - - if( !weak ) - CV_ERROR( CV_StsBadArg, "The classifier has not been trained yet" ); - - write_params( fs ); - cvStartWriteStruct( fs, "trees", CV_NODE_SEQ ); - - cvStartReadSeq( weak, &reader ); - - for( i = 0; i < weak->total; i++ ) - { - CvBoostTree* tree; - CV_READ_SEQ_ELEM( tree, reader ); - cvStartWriteStruct( fs, 0, CV_NODE_MAP ); - tree->write( fs ); - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); - - __END__; -} - - -CvMat* -CvBoost::get_weights() -{ - return weights; -} - - -CvMat* -CvBoost::get_subtree_weights() -{ - return subtree_weights; -} - - -CvMat* -CvBoost::get_weak_response() -{ - return weak_eval; -} - - -const CvBoostParams& -CvBoost::get_params() const -{ - return params; -} - -CvSeq* CvBoost::get_weak_predictors() -{ - return weak; -} - -const CvDTreeTrainData* CvBoost::get_data() const -{ - return data; -} - -using namespace cv; - -CvBoost::CvBoost( const Mat& _train_data, int _tflag, - const Mat& _responses, const Mat& _var_idx, - const Mat& _sample_idx, const Mat& _var_type, - const Mat& _missing_mask, - CvBoostParams _params ) -{ - weak = 0; - data = 0; - default_model_name = "my_boost_tree"; - active_vars = active_vars_abs = orig_response = sum_response = weak_eval = - subsample_mask = weights = subtree_weights = 0; - - train( _train_data, _tflag, _responses, _var_idx, _sample_idx, - _var_type, _missing_mask, _params ); -} - - -bool -CvBoost::train( const Mat& _train_data, int _tflag, - const Mat& _responses, const Mat& _var_idx, - const Mat& _sample_idx, const Mat& _var_type, - const Mat& _missing_mask, - CvBoostParams _params, bool _update ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, - sidx = _sample_idx, vtype = _var_type, mmask = _missing_mask; - return train(&tdata, _tflag, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0, vtype.data.ptr ? &vtype : 0, - mmask.data.ptr ? &mmask : 0, _params, _update); -} - -float -CvBoost::predict( const Mat& _sample, const Mat& _missing, - const Range& slice, bool raw_mode, bool return_sum ) const -{ - CvMat sample = _sample, mmask = _missing; - /*if( weak_responses ) - { - int weak_count = cvSliceLength( slice, weak ); - if( weak_count >= weak->total ) - { - weak_count = weak->total; - slice.start_index = 0; - } - - if( !(weak_responses->data && weak_responses->type() == CV_32FC1 && - (weak_responses->cols == 1 || weak_responses->rows == 1) && - weak_responses->cols + weak_responses->rows - 1 == weak_count) ) - weak_responses->create(weak_count, 1, CV_32FC1); - pwr = &(wr = *weak_responses); - }*/ - return predict(&sample, _missing.empty() ? 0 : &mmask, 0, - slice == Range::all() ? CV_WHOLE_SEQ : cvSlice(slice.start, slice.end), - raw_mode, return_sum); -} - -/* End of file. */ diff --git a/modules/ml/src/cnn.cpp b/modules/ml/src/cnn.cpp deleted file mode 100644 index 0e0b1d0..0000000 --- a/modules/ml/src/cnn.cpp +++ /dev/null @@ -1,1675 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if 0 -/****************************************************************************************\ -* Auxilary functions declarations * -\****************************************************************************************/ -/*---------------------- functions for the CNN classifier ------------------------------*/ -static float icvCNNModelPredict( - const CvStatModel* cnn_model, - const CvMat* image, - CvMat* probs CV_DEFAULT(0) ); - -static void icvCNNModelUpdate( - CvStatModel* cnn_model, const CvMat* images, int tflag, - const CvMat* responses, const CvStatModelParams* params, - const CvMat* CV_DEFAULT(0), const CvMat* sample_idx CV_DEFAULT(0), - const CvMat* CV_DEFAULT(0), const CvMat* CV_DEFAULT(0)); - -static void icvCNNModelRelease( CvStatModel** cnn_model ); - -static void icvTrainCNNetwork( CvCNNetwork* network, - const float** images, - const CvMat* responses, - const CvMat* etalons, - int grad_estim_type, - int max_iter, - int start_iter ); - -/*------------------------- functions for the CNN network ------------------------------*/ -static void icvCNNetworkAddLayer( CvCNNetwork* network, CvCNNLayer* layer ); -static void icvCNNetworkRelease( CvCNNetwork** network ); - -/* In all layer functions we denote input by X and output by Y, where - X and Y are column-vectors, so that - length(X)==**, - length(Y)==**. -*/ -/*------------------------ functions for convolutional layer ---------------------------*/ -static void icvCNNConvolutionRelease( CvCNNLayer** p_layer ); - -static void icvCNNConvolutionForward( CvCNNLayer* layer, const CvMat* X, CvMat* Y ); - -static void icvCNNConvolutionBackward( CvCNNLayer* layer, int t, - const CvMat* X, const CvMat* dE_dY, CvMat* dE_dX ); - -/*------------------------ functions for sub-sampling layer ----------------------------*/ -static void icvCNNSubSamplingRelease( CvCNNLayer** p_layer ); - -static void icvCNNSubSamplingForward( CvCNNLayer* layer, const CvMat* X, CvMat* Y ); - -static void icvCNNSubSamplingBackward( CvCNNLayer* layer, int t, - const CvMat* X, const CvMat* dE_dY, CvMat* dE_dX ); - -/*------------------------ functions for full connected layer --------------------------*/ -static void icvCNNFullConnectRelease( CvCNNLayer** p_layer ); - -static void icvCNNFullConnectForward( CvCNNLayer* layer, const CvMat* X, CvMat* Y ); - -static void icvCNNFullConnectBackward( CvCNNLayer* layer, int, - const CvMat*, const CvMat* dE_dY, CvMat* dE_dX ); - -/****************************************************************************************\ -* Functions implementations * -\****************************************************************************************/ - -#define ICV_CHECK_CNN_NETWORK(network) \ -{ \ - CvCNNLayer* first_layer, *layer, *last_layer; \ - int n_layers, i; \ - if( !network ) \ - CV_ERROR( CV_StsNullPtr, \ - "Null pointer. Network must be created by user." ); \ - n_layers = network->n_layers; \ - first_layer = last_layer = network->layers; \ - for( i = 0, layer = first_layer; i < n_layers && layer; i++ ) \ - { \ - if( !ICV_IS_CNN_LAYER(layer) ) \ - CV_ERROR( CV_StsNullPtr, "Invalid network" ); \ - last_layer = layer; \ - layer = layer->next_layer; \ - } \ - \ - if( i == 0 || i != n_layers || first_layer->prev_layer || layer ) \ - CV_ERROR( CV_StsNullPtr, "Invalid network" ); \ - \ - if( first_layer->n_input_planes != 1 ) \ - CV_ERROR( CV_StsBadArg, "First layer must contain only one input plane" ); \ - \ - if( img_size != first_layer->input_height*first_layer->input_width ) \ - CV_ERROR( CV_StsBadArg, "Invalid input sizes of the first layer" ); \ - \ - if( params->etalons->cols != last_layer->n_output_planes* \ - last_layer->output_height*last_layer->output_width ) \ - CV_ERROR( CV_StsBadArg, "Invalid output sizes of the last layer" ); \ -} - -#define ICV_CHECK_CNN_MODEL_PARAMS(params) \ -{ \ - if( !params ) \ - CV_ERROR( CV_StsNullPtr, "Null pointer" ); \ - \ - if( !ICV_IS_MAT_OF_TYPE(params->etalons, CV_32FC1) ) \ - CV_ERROR( CV_StsBadArg, " must be CV_32FC1 type" ); \ - if( params->etalons->rows != cnn_model->cls_labels->cols ) \ - CV_ERROR( CV_StsBadArg, "Invalid size" ); \ - \ - if( params->grad_estim_type != CV_CNN_GRAD_ESTIM_RANDOM && \ - params->grad_estim_type != CV_CNN_GRAD_ESTIM_BY_WORST_IMG ) \ - CV_ERROR( CV_StsBadArg, "Invalid " ); \ - \ - if( params->start_iter < 0 ) \ - CV_ERROR( CV_StsBadArg, "Parameter must be positive or zero" ); \ - \ - if( params->max_iter < 1 ) \ - params->max_iter = 1; \ -} - -/****************************************************************************************\ -* Classifier functions * -\****************************************************************************************/ -ML_IMPL CvStatModel* -cvTrainCNNClassifier( const CvMat* _train_data, int tflag, - const CvMat* _responses, - const CvStatModelParams* _params, - const CvMat*, const CvMat* _sample_idx, const CvMat*, const CvMat* ) -{ - CvCNNStatModel* cnn_model = 0; - const float** out_train_data = 0; - CvMat* responses = 0; - - CV_FUNCNAME("cvTrainCNNClassifier"); - __BEGIN__; - - int n_images; - int img_size; - CvCNNStatModelParams* params = (CvCNNStatModelParams*)_params; - - CV_CALL(cnn_model = (CvCNNStatModel*)cvCreateStatModel( - CV_STAT_MODEL_MAGIC_VAL|CV_CNN_MAGIC_VAL, sizeof(CvCNNStatModel), - icvCNNModelRelease, icvCNNModelPredict, icvCNNModelUpdate )); - - CV_CALL(cvPrepareTrainData( "cvTrainCNNClassifier", - _train_data, tflag, _responses, CV_VAR_CATEGORICAL, - 0, _sample_idx, false, &out_train_data, - &n_images, &img_size, &img_size, &responses, - &cnn_model->cls_labels, 0 )); - - ICV_CHECK_CNN_MODEL_PARAMS(params); - ICV_CHECK_CNN_NETWORK(params->network); - - cnn_model->network = params->network; - CV_CALL(cnn_model->etalons = (CvMat*)cvClone( params->etalons )); - - CV_CALL( icvTrainCNNetwork( cnn_model->network, out_train_data, responses, - cnn_model->etalons, params->grad_estim_type, params->max_iter, - params->start_iter )); - - __END__; - - if( cvGetErrStatus() < 0 && cnn_model ) - { - cnn_model->release( (CvStatModel**)&cnn_model ); - } - cvFree( &out_train_data ); - cvReleaseMat( &responses ); - - return (CvStatModel*)cnn_model; -} - -/****************************************************************************************/ -static void icvTrainCNNetwork( CvCNNetwork* network, - const float** images, - const CvMat* responses, - const CvMat* etalons, - int grad_estim_type, - int max_iter, - int start_iter ) -{ - CvMat** X = 0; - CvMat** dE_dX = 0; - const int n_layers = network->n_layers; - int k; - - CV_FUNCNAME("icvTrainCNNetwork"); - __BEGIN__; - - CvCNNLayer* first_layer = network->layers; - const int img_height = first_layer->input_height; - const int img_width = first_layer->input_width; - const int img_size = img_width*img_height; - const int n_images = responses->cols; - CvMat image = cvMat( 1, img_size, CV_32FC1 ); - CvCNNLayer* layer; - int n; - CvRNG rng = cvRNG(-1); - - CV_CALL(X = (CvMat**)cvAlloc( (n_layers+1)*sizeof(CvMat*) )); - CV_CALL(dE_dX = (CvMat**)cvAlloc( (n_layers+1)*sizeof(CvMat*) )); - memset( X, 0, (n_layers+1)*sizeof(CvMat*) ); - memset( dE_dX, 0, (n_layers+1)*sizeof(CvMat*) ); - - CV_CALL(X[0] = cvCreateMat( img_height*img_width,1,CV_32FC1 )); - CV_CALL(dE_dX[0] = cvCreateMat( 1, X[0]->rows, CV_32FC1 )); - for( k = 0, layer = first_layer; k < n_layers; k++, layer = layer->next_layer ) - { - CV_CALL(X[k+1] = cvCreateMat( layer->n_output_planes*layer->output_height* - layer->output_width, 1, CV_32FC1 )); - CV_CALL(dE_dX[k+1] = cvCreateMat( 1, X[k+1]->rows, CV_32FC1 )); - } - - for( n = 1; n <= max_iter; n++ ) - { - float loss, max_loss = 0; - int i; - int worst_img_idx = -1; - int* right_etal_idx = responses->data.i; - CvMat etalon; - - // Find the worst image (which produces the greatest loss) or use the random image - if( grad_estim_type == CV_CNN_GRAD_ESTIM_BY_WORST_IMG ) - { - for( i = 0; i < n_images; i++, right_etal_idx++ ) - { - image.data.fl = (float*)images[i]; - cvTranspose( &image, X[0] ); - - for( k = 0, layer = first_layer; k < n_layers; k++, layer = layer->next_layer ) - CV_CALL(layer->forward( layer, X[k], X[k+1] )); - - cvTranspose( X[n_layers], dE_dX[n_layers] ); - cvGetRow( etalons, &etalon, *right_etal_idx ); - loss = (float)cvNorm( dE_dX[n_layers], &etalon ); - if( loss > max_loss ) - { - max_loss = loss; - worst_img_idx = i; - } - } - } - else - worst_img_idx = cvRandInt(&rng) % n_images; - - // Train network on the worst image - // 1) Compute the network output on the - image.data.fl = (float*)images[worst_img_idx]; - CV_CALL(cvTranspose( &image, X[0] )); - - for( k = 0, layer = first_layer; k < n_layers - 1; k++, layer = layer->next_layer ) - CV_CALL(layer->forward( layer, X[k], X[k+1] )); - CV_CALL(layer->forward( layer, X[k], X[k+1] )); - - // 2) Compute the gradient - cvTranspose( X[n_layers], dE_dX[n_layers] ); - cvGetRow( etalons, &etalon, responses->data.i[worst_img_idx] ); - cvSub( dE_dX[n_layers], &etalon, dE_dX[n_layers] ); - - // 3) Update weights by the gradient descent - for( k = n_layers; k > 0; k--, layer = layer->prev_layer ) - CV_CALL(layer->backward( layer, n + start_iter, X[k-1], dE_dX[k], dE_dX[k-1] )); - } - - __END__; - - for( k = 0; k <= n_layers; k++ ) - { - cvReleaseMat( &X[k] ); - cvReleaseMat( &dE_dX[k] ); - } - cvFree( &X ); - cvFree( &dE_dX ); -} - -/****************************************************************************************/ -static float icvCNNModelPredict( const CvStatModel* model, - const CvMat* _image, - CvMat* probs ) -{ - CvMat** X = 0; - float* img_data = 0; - int n_layers = 0; - int best_etal_idx = -1; - int k; - - CV_FUNCNAME("icvCNNModelPredict"); - __BEGIN__; - - CvCNNStatModel* cnn_model = (CvCNNStatModel*)model; - CvCNNLayer* first_layer, *layer = 0; - int img_height, img_width, img_size; - int nclasses, i; - float loss, min_loss = FLT_MAX; - float* probs_data; - CvMat etalon, image; - - if( !CV_IS_CNN(model) ) - CV_ERROR( CV_StsBadArg, "Invalid model" ); - - nclasses = cnn_model->cls_labels->cols; - n_layers = cnn_model->network->n_layers; - first_layer = cnn_model->network->layers; - img_height = first_layer->input_height; - img_width = first_layer->input_width; - img_size = img_height*img_width; - - cvPreparePredictData( _image, img_size, 0, nclasses, probs, &img_data ); - - CV_CALL(X = (CvMat**)cvAlloc( (n_layers+1)*sizeof(CvMat*) )); - memset( X, 0, (n_layers+1)*sizeof(CvMat*) ); - - CV_CALL(X[0] = cvCreateMat( img_size,1,CV_32FC1 )); - for( k = 0, layer = first_layer; k < n_layers; k++, layer = layer->next_layer ) - { - CV_CALL(X[k+1] = cvCreateMat( layer->n_output_planes*layer->output_height* - layer->output_width, 1, CV_32FC1 )); - } - - image = cvMat( 1, img_size, CV_32FC1, img_data ); - cvTranspose( &image, X[0] ); - for( k = 0, layer = first_layer; k < n_layers; k++, layer = layer->next_layer ) - CV_CALL(layer->forward( layer, X[k], X[k+1] )); - - probs_data = probs ? probs->data.fl : 0; - etalon = cvMat( cnn_model->etalons->cols, 1, CV_32FC1, cnn_model->etalons->data.fl ); - for( i = 0; i < nclasses; i++, etalon.data.fl += cnn_model->etalons->cols ) - { - loss = (float)cvNorm( X[n_layers], &etalon ); - if( loss < min_loss ) - { - min_loss = loss; - best_etal_idx = i; - } - if( probs ) - *probs_data++ = -loss; - } - - if( probs ) - { - cvExp( probs, probs ); - CvScalar sum = cvSum( probs ); - cvConvertScale( probs, probs, 1./sum.val[0] ); - } - - __END__; - - for( k = 0; k <= n_layers; k++ ) - cvReleaseMat( &X[k] ); - cvFree( &X ); - if( img_data != _image->data.fl ) - cvFree( &img_data ); - - return ((float) ((CvCNNStatModel*)model)->cls_labels->data.i[best_etal_idx]); -} - -/****************************************************************************************/ -static void icvCNNModelUpdate( - CvStatModel* _cnn_model, const CvMat* _train_data, int tflag, - const CvMat* _responses, const CvStatModelParams* _params, - const CvMat*, const CvMat* _sample_idx, - const CvMat*, const CvMat* ) -{ - const float** out_train_data = 0; - CvMat* responses = 0; - CvMat* cls_labels = 0; - - CV_FUNCNAME("icvCNNModelUpdate"); - __BEGIN__; - - int n_images, img_size, i; - CvCNNStatModelParams* params = (CvCNNStatModelParams*)_params; - CvCNNStatModel* cnn_model = (CvCNNStatModel*)_cnn_model; - - if( !CV_IS_CNN(cnn_model) ) - CV_ERROR( CV_StsBadArg, "Invalid model" ); - - CV_CALL(cvPrepareTrainData( "cvTrainCNNClassifier", - _train_data, tflag, _responses, CV_VAR_CATEGORICAL, - 0, _sample_idx, false, &out_train_data, - &n_images, &img_size, &img_size, &responses, - &cls_labels, 0, 0 )); - - ICV_CHECK_CNN_MODEL_PARAMS(params); - - // Number of classes must be the same as when classifiers was created - if( !CV_ARE_SIZES_EQ(cls_labels, cnn_model->cls_labels) ) - CV_ERROR( CV_StsBadArg, "Number of classes must be left unchanged" ); - for( i = 0; i < cls_labels->cols; i++ ) - { - if( cls_labels->data.i[i] != cnn_model->cls_labels->data.i[i] ) - CV_ERROR( CV_StsBadArg, "Number of classes must be left unchanged" ); - } - - CV_CALL( icvTrainCNNetwork( cnn_model->network, out_train_data, responses, - cnn_model->etalons, params->grad_estim_type, params->max_iter, - params->start_iter )); - - __END__; - - cvFree( &out_train_data ); - cvReleaseMat( &responses ); -} - -/****************************************************************************************/ -static void icvCNNModelRelease( CvStatModel** cnn_model ) -{ - CV_FUNCNAME("icvCNNModelRelease"); - __BEGIN__; - - CvCNNStatModel* cnn; - if( !cnn_model ) - CV_ERROR( CV_StsNullPtr, "Null double pointer" ); - - cnn = *(CvCNNStatModel**)cnn_model; - - cvReleaseMat( &cnn->cls_labels ); - cvReleaseMat( &cnn->etalons ); - cnn->network->release( &cnn->network ); - - cvFree( &cnn ); - - __END__; - -} - -/****************************************************************************************\ -* Network functions * -\****************************************************************************************/ -ML_IMPL CvCNNetwork* cvCreateCNNetwork( CvCNNLayer* first_layer ) -{ - CvCNNetwork* network = 0; - - CV_FUNCNAME( "cvCreateCNNetwork" ); - __BEGIN__; - - if( !ICV_IS_CNN_LAYER(first_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - CV_CALL(network = (CvCNNetwork*)cvAlloc( sizeof(CvCNNetwork) )); - memset( network, 0, sizeof(CvCNNetwork) ); - - network->layers = first_layer; - network->n_layers = 1; - network->release = icvCNNetworkRelease; - network->add_layer = icvCNNetworkAddLayer; - - __END__; - - if( cvGetErrStatus() < 0 && network ) - cvFree( &network ); - - return network; - -} - -/****************************************************************************************/ -static void icvCNNetworkAddLayer( CvCNNetwork* network, CvCNNLayer* layer ) -{ - CV_FUNCNAME( "icvCNNetworkAddLayer" ); - __BEGIN__; - - CvCNNLayer* prev_layer; - - if( network == NULL ) - CV_ERROR( CV_StsNullPtr, "Null pointer" ); - - prev_layer = network->layers; - while( prev_layer->next_layer ) - prev_layer = prev_layer->next_layer; - - if( ICV_IS_CNN_FULLCONNECT_LAYER(layer) ) - { - if( layer->n_input_planes != prev_layer->output_width*prev_layer->output_height* - prev_layer->n_output_planes ) - CV_ERROR( CV_StsBadArg, "Unmatched size of the new layer" ); - if( layer->input_height != 1 || layer->output_height != 1 || - layer->input_width != 1 || layer->output_width != 1 ) - CV_ERROR( CV_StsBadArg, "Invalid size of the new layer" ); - } - else if( ICV_IS_CNN_CONVOLUTION_LAYER(layer) || ICV_IS_CNN_SUBSAMPLING_LAYER(layer) ) - { - if( prev_layer->n_output_planes != layer->n_input_planes || - prev_layer->output_height != layer->input_height || - prev_layer->output_width != layer->input_width ) - CV_ERROR( CV_StsBadArg, "Unmatched size of the new layer" ); - } - else - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - layer->prev_layer = prev_layer; - prev_layer->next_layer = layer; - network->n_layers++; - - __END__; -} - -/****************************************************************************************/ -static void icvCNNetworkRelease( CvCNNetwork** network_pptr ) -{ - CV_FUNCNAME( "icvReleaseCNNetwork" ); - __BEGIN__; - - CvCNNetwork* network = 0; - CvCNNLayer* layer = 0, *next_layer = 0; - int k; - - if( network_pptr == NULL ) - CV_ERROR( CV_StsBadArg, "Null double pointer" ); - if( *network_pptr == NULL ) - return; - - network = *network_pptr; - layer = network->layers; - if( layer == NULL ) - CV_ERROR( CV_StsBadArg, "CNN is empty (does not contain any layer)" ); - - // k is the number of the layer to be deleted - for( k = 0; k < network->n_layers && layer; k++ ) - { - next_layer = layer->next_layer; - layer->release( &layer ); - layer = next_layer; - } - - if( k != network->n_layers || layer) - CV_ERROR( CV_StsBadArg, "Invalid network" ); - - cvFree( &network ); - - __END__; -} - -/****************************************************************************************\ -* Layer functions * -\****************************************************************************************/ -static CvCNNLayer* icvCreateCNNLayer( int layer_type, int header_size, - int n_input_planes, int input_height, int input_width, - int n_output_planes, int output_height, int output_width, - float init_learn_rate, int learn_rate_decrease_type, - CvCNNLayerRelease release, CvCNNLayerForward forward, CvCNNLayerBackward backward ) -{ - CvCNNLayer* layer = 0; - - CV_FUNCNAME("icvCreateCNNLayer"); - __BEGIN__; - - CV_ASSERT( release && forward && backward ) - CV_ASSERT( header_size >= sizeof(CvCNNLayer) ) - - if( n_input_planes < 1 || n_output_planes < 1 || - input_height < 1 || input_width < 1 || - output_height < 1 || output_width < 1 || - input_height < output_height || - input_width < output_width ) - CV_ERROR( CV_StsBadArg, "Incorrect input or output parameters" ); - if( init_learn_rate < FLT_EPSILON ) - CV_ERROR( CV_StsBadArg, "Initial learning rate must be positive" ); - if( learn_rate_decrease_type != CV_CNN_LEARN_RATE_DECREASE_HYPERBOLICALLY && - learn_rate_decrease_type != CV_CNN_LEARN_RATE_DECREASE_SQRT_INV && - learn_rate_decrease_type != CV_CNN_LEARN_RATE_DECREASE_LOG_INV ) - CV_ERROR( CV_StsBadArg, "Invalid type of learning rate dynamics" ); - - CV_CALL(layer = (CvCNNLayer*)cvAlloc( header_size )); - memset( layer, 0, header_size ); - - layer->flags = ICV_CNN_LAYER|layer_type; - CV_ASSERT( ICV_IS_CNN_LAYER(layer) ) - - layer->n_input_planes = n_input_planes; - layer->input_height = input_height; - layer->input_width = input_width; - - layer->n_output_planes = n_output_planes; - layer->output_height = output_height; - layer->output_width = output_width; - - layer->init_learn_rate = init_learn_rate; - layer->learn_rate_decrease_type = learn_rate_decrease_type; - - layer->release = release; - layer->forward = forward; - layer->backward = backward; - - __END__; - - if( cvGetErrStatus() < 0 && layer) - cvFree( &layer ); - - return layer; -} - -/****************************************************************************************/ -ML_IMPL CvCNNLayer* cvCreateCNNConvolutionLayer( - int n_input_planes, int input_height, int input_width, - int n_output_planes, int K, - float init_learn_rate, int learn_rate_decrease_type, - CvMat* connect_mask, CvMat* weights ) - -{ - CvCNNConvolutionLayer* layer = 0; - - CV_FUNCNAME("cvCreateCNNConvolutionLayer"); - __BEGIN__; - - const int output_height = input_height - K + 1; - const int output_width = input_width - K + 1; - - if( K < 1 || init_learn_rate <= 0 ) - CV_ERROR( CV_StsBadArg, "Incorrect parameters" ); - - CV_CALL(layer = (CvCNNConvolutionLayer*)icvCreateCNNLayer( ICV_CNN_CONVOLUTION_LAYER, - sizeof(CvCNNConvolutionLayer), n_input_planes, input_height, input_width, - n_output_planes, output_height, output_width, - init_learn_rate, learn_rate_decrease_type, - icvCNNConvolutionRelease, icvCNNConvolutionForward, icvCNNConvolutionBackward )); - - layer->K = K; - CV_CALL(layer->weights = cvCreateMat( n_output_planes, K*K+1, CV_32FC1 )); - CV_CALL(layer->connect_mask = cvCreateMat( n_output_planes, n_input_planes, CV_8UC1)); - - if( weights ) - { - if( !ICV_IS_MAT_OF_TYPE( weights, CV_32FC1 ) ) - CV_ERROR( CV_StsBadSize, "Type of initial weights matrix must be CV_32FC1" ); - if( !CV_ARE_SIZES_EQ( weights, layer->weights ) ) - CV_ERROR( CV_StsBadSize, "Invalid size of initial weights matrix" ); - CV_CALL(cvCopy( weights, layer->weights )); - } - else - { - CvRNG rng = cvRNG( 0xFFFFFFFF ); - cvRandArr( &rng, layer->weights, CV_RAND_UNI, cvRealScalar(-1), cvRealScalar(1) ); - } - - if( connect_mask ) - { - if( !ICV_IS_MAT_OF_TYPE( connect_mask, CV_8UC1 ) ) - CV_ERROR( CV_StsBadSize, "Type of connection matrix must be CV_32FC1" ); - if( !CV_ARE_SIZES_EQ( connect_mask, layer->connect_mask ) ) - CV_ERROR( CV_StsBadSize, "Invalid size of connection matrix" ); - CV_CALL(cvCopy( connect_mask, layer->connect_mask )); - } - else - CV_CALL(cvSet( layer->connect_mask, cvRealScalar(1) )); - - __END__; - - if( cvGetErrStatus() < 0 && layer ) - { - cvReleaseMat( &layer->weights ); - cvReleaseMat( &layer->connect_mask ); - cvFree( &layer ); - } - - return (CvCNNLayer*)layer; -} - -/****************************************************************************************/ -ML_IMPL CvCNNLayer* cvCreateCNNSubSamplingLayer( - int n_input_planes, int input_height, int input_width, - int sub_samp_scale, float a, float s, - float init_learn_rate, int learn_rate_decrease_type, CvMat* weights ) - -{ - CvCNNSubSamplingLayer* layer = 0; - - CV_FUNCNAME("cvCreateCNNSubSamplingLayer"); - __BEGIN__; - - const int output_height = input_height/sub_samp_scale; - const int output_width = input_width/sub_samp_scale; - const int n_output_planes = n_input_planes; - - if( sub_samp_scale < 1 || a <= 0 || s <= 0) - CV_ERROR( CV_StsBadArg, "Incorrect parameters" ); - - CV_CALL(layer = (CvCNNSubSamplingLayer*)icvCreateCNNLayer( ICV_CNN_SUBSAMPLING_LAYER, - sizeof(CvCNNSubSamplingLayer), n_input_planes, input_height, input_width, - n_output_planes, output_height, output_width, - init_learn_rate, learn_rate_decrease_type, - icvCNNSubSamplingRelease, icvCNNSubSamplingForward, icvCNNSubSamplingBackward )); - - layer->sub_samp_scale = sub_samp_scale; - layer->a = a; - layer->s = s; - - CV_CALL(layer->sumX = - cvCreateMat( n_output_planes*output_width*output_height, 1, CV_32FC1 )); - CV_CALL(layer->exp2ssumWX = - cvCreateMat( n_output_planes*output_width*output_height, 1, CV_32FC1 )); - - cvZero( layer->sumX ); - cvZero( layer->exp2ssumWX ); - - CV_CALL(layer->weights = cvCreateMat( n_output_planes, 2, CV_32FC1 )); - if( weights ) - { - if( !ICV_IS_MAT_OF_TYPE( weights, CV_32FC1 ) ) - CV_ERROR( CV_StsBadSize, "Type of initial weights matrix must be CV_32FC1" ); - if( !CV_ARE_SIZES_EQ( weights, layer->weights ) ) - CV_ERROR( CV_StsBadSize, "Invalid size of initial weights matrix" ); - CV_CALL(cvCopy( weights, layer->weights )); - } - else - { - CvRNG rng = cvRNG( 0xFFFFFFFF ); - cvRandArr( &rng, layer->weights, CV_RAND_UNI, cvRealScalar(-1), cvRealScalar(1) ); - } - - __END__; - - if( cvGetErrStatus() < 0 && layer ) - { - cvReleaseMat( &layer->exp2ssumWX ); - cvFree( &layer ); - } - - return (CvCNNLayer*)layer; -} - -/****************************************************************************************/ -ML_IMPL CvCNNLayer* cvCreateCNNFullConnectLayer( - int n_inputs, int n_outputs, float a, float s, - float init_learn_rate, int learn_rate_decrease_type, CvMat* weights ) -{ - CvCNNFullConnectLayer* layer = 0; - - CV_FUNCNAME("cvCreateCNNFullConnectLayer"); - __BEGIN__; - - if( a <= 0 || s <= 0 || init_learn_rate <= 0) - CV_ERROR( CV_StsBadArg, "Incorrect parameters" ); - - CV_CALL(layer = (CvCNNFullConnectLayer*)icvCreateCNNLayer( ICV_CNN_FULLCONNECT_LAYER, - sizeof(CvCNNFullConnectLayer), n_inputs, 1, 1, n_outputs, 1, 1, - init_learn_rate, learn_rate_decrease_type, - icvCNNFullConnectRelease, icvCNNFullConnectForward, icvCNNFullConnectBackward )); - - layer->a = a; - layer->s = s; - - CV_CALL(layer->exp2ssumWX = cvCreateMat( n_outputs, 1, CV_32FC1 )); - cvZero( layer->exp2ssumWX ); - - CV_CALL(layer->weights = cvCreateMat( n_outputs, n_inputs+1, CV_32FC1 )); - if( weights ) - { - if( !ICV_IS_MAT_OF_TYPE( weights, CV_32FC1 ) ) - CV_ERROR( CV_StsBadSize, "Type of initial weights matrix must be CV_32FC1" ); - if( !CV_ARE_SIZES_EQ( weights, layer->weights ) ) - CV_ERROR( CV_StsBadSize, "Invalid size of initial weights matrix" ); - CV_CALL(cvCopy( weights, layer->weights )); - } - else - { - CvRNG rng = cvRNG( 0xFFFFFFFF ); - cvRandArr( &rng, layer->weights, CV_RAND_UNI, cvRealScalar(-1), cvRealScalar(1) ); - } - - __END__; - - if( cvGetErrStatus() < 0 && layer ) - { - cvReleaseMat( &layer->exp2ssumWX ); - cvReleaseMat( &layer->weights ); - cvFree( &layer ); - } - - return (CvCNNLayer*)layer; -} - - -/****************************************************************************************\ -* Layer FORWARD functions * -\****************************************************************************************/ -static void icvCNNConvolutionForward( CvCNNLayer* _layer, - const CvMat* X, - CvMat* Y ) -{ - CV_FUNCNAME("icvCNNConvolutionForward"); - - if( !ICV_IS_CNN_CONVOLUTION_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNConvolutionLayer* layer = (CvCNNConvolutionLayer*) _layer; - - const int K = layer->K; - const int n_weights_for_Yplane = K*K + 1; - - const int nXplanes = layer->n_input_planes; - const int Xheight = layer->input_height; - const int Xwidth = layer->input_width ; - const int Xsize = Xwidth*Xheight; - - const int nYplanes = layer->n_output_planes; - const int Yheight = layer->output_height; - const int Ywidth = layer->output_width; - const int Ysize = Ywidth*Yheight; - - int xx, yy, ni, no, kx, ky; - float *Yplane = 0, *Xplane = 0, *w = 0; - uchar* connect_mask_data = 0; - - CV_ASSERT( X->rows == nXplanes*Xsize && X->cols == 1 ); - CV_ASSERT( Y->rows == nYplanes*Ysize && Y->cols == 1 ); - - cvSetZero( Y ); - - Yplane = Y->data.fl; - connect_mask_data = layer->connect_mask->data.ptr; - w = layer->weights->data.fl; - for( no = 0; no < nYplanes; no++, Yplane += Ysize, w += n_weights_for_Yplane ) - { - Xplane = X->data.fl; - for( ni = 0; ni < nXplanes; ni++, Xplane += Xsize, connect_mask_data++ ) - { - if( *connect_mask_data ) - { - float* Yelem = Yplane; - - // Xheight-K+1 == Yheight && Xwidth-K+1 == Ywidth - for( yy = 0; yy < Xheight-K+1; yy++ ) - { - for( xx = 0; xx < Xwidth-K+1; xx++, Yelem++ ) - { - float* templ = Xplane+yy*Xwidth+xx; - float WX = 0; - for( ky = 0; ky < K; ky++, templ += Xwidth-K ) - { - for( kx = 0; kx < K; kx++, templ++ ) - { - WX += *templ*w[ky*K+kx]; - } - } - *Yelem += WX + w[K*K]; - } - } - } - } - } - }__END__; -} - -/****************************************************************************************/ -static void icvCNNSubSamplingForward( CvCNNLayer* _layer, - const CvMat* X, - CvMat* Y ) -{ - CV_FUNCNAME("icvCNNSubSamplingForward"); - - if( !ICV_IS_CNN_SUBSAMPLING_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNSubSamplingLayer* layer = (CvCNNSubSamplingLayer*) _layer; - - const int sub_sampl_scale = layer->sub_samp_scale; - const int nplanes = layer->n_input_planes; - - const int Xheight = layer->input_height; - const int Xwidth = layer->input_width ; - const int Xsize = Xwidth*Xheight; - - const int Yheight = layer->output_height; - const int Ywidth = layer->output_width; - const int Ysize = Ywidth*Yheight; - - int xx, yy, ni, kx, ky; - float* sumX_data = 0, *w = 0; - CvMat sumX_sub_col, exp2ssumWX_sub_col; - - CV_ASSERT(X->rows == nplanes*Xsize && X->cols == 1); - CV_ASSERT(layer->exp2ssumWX->cols == 1 && layer->exp2ssumWX->rows == nplanes*Ysize); - - // update inner variable layer->exp2ssumWX, which will be used in back-progation - cvZero( layer->sumX ); - cvZero( layer->exp2ssumWX ); - - for( ky = 0; ky < sub_sampl_scale; ky++ ) - for( kx = 0; kx < sub_sampl_scale; kx++ ) - { - float* Xplane = X->data.fl; - sumX_data = layer->sumX->data.fl; - for( ni = 0; ni < nplanes; ni++, Xplane += Xsize ) - { - for( yy = 0; yy < Yheight; yy++ ) - for( xx = 0; xx < Ywidth; xx++, sumX_data++ ) - *sumX_data += Xplane[((yy+ky)*Xwidth+(xx+kx))]; - } - } - - w = layer->weights->data.fl; - cvGetRows( layer->sumX, &sumX_sub_col, 0, Ysize ); - cvGetRows( layer->exp2ssumWX, &exp2ssumWX_sub_col, 0, Ysize ); - for( ni = 0; ni < nplanes; ni++, w += 2 ) - { - CV_CALL(cvConvertScale( &sumX_sub_col, &exp2ssumWX_sub_col, w[0], w[1] )); - sumX_sub_col.data.fl += Ysize; - exp2ssumWX_sub_col.data.fl += Ysize; - } - - CV_CALL(cvScale( layer->exp2ssumWX, layer->exp2ssumWX, 2.0*layer->s )); - CV_CALL(cvExp( layer->exp2ssumWX, layer->exp2ssumWX )); - CV_CALL(cvMinS( layer->exp2ssumWX, FLT_MAX, layer->exp2ssumWX )); -//#ifdef _DEBUG - { - float* exp2ssumWX_data = layer->exp2ssumWX->data.fl; - for( ni = 0; ni < layer->exp2ssumWX->rows; ni++, exp2ssumWX_data++ ) - { - if( *exp2ssumWX_data == FLT_MAX ) - cvSetErrStatus( 1 ); - } - } -//#endif - // compute the output variable Y == ( a - 2a/(layer->exp2ssumWX + 1)) - CV_CALL(cvAddS( layer->exp2ssumWX, cvRealScalar(1), Y )); - CV_CALL(cvDiv( 0, Y, Y, -2.0*layer->a )); - CV_CALL(cvAddS( Y, cvRealScalar(layer->a), Y )); - - }__END__; -} - -/****************************************************************************************/ -static void icvCNNFullConnectForward( CvCNNLayer* _layer, const CvMat* X, CvMat* Y ) -{ - CV_FUNCNAME("icvCNNFullConnectForward"); - - if( !ICV_IS_CNN_FULLCONNECT_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNFullConnectLayer* layer = (CvCNNFullConnectLayer*)_layer; - CvMat* weights = layer->weights; - CvMat sub_weights, bias; - - CV_ASSERT(X->cols == 1 && X->rows == layer->n_input_planes); - CV_ASSERT(Y->cols == 1 && Y->rows == layer->n_output_planes); - - CV_CALL(cvGetSubRect( weights, &sub_weights, - cvRect(0, 0, weights->cols-1, weights->rows ))); - CV_CALL(cvGetCol( weights, &bias, weights->cols-1)); - - // update inner variable layer->exp2ssumWX, which will be used in Back-Propagation - CV_CALL(cvGEMM( &sub_weights, X, 2*layer->s, &bias, 2*layer->s, layer->exp2ssumWX )); - CV_CALL(cvExp( layer->exp2ssumWX, layer->exp2ssumWX )); - CV_CALL(cvMinS( layer->exp2ssumWX, FLT_MAX, layer->exp2ssumWX )); -//#ifdef _DEBUG - { - float* exp2ssumWX_data = layer->exp2ssumWX->data.fl; - int i; - for( i = 0; i < layer->exp2ssumWX->rows; i++, exp2ssumWX_data++ ) - { - if( *exp2ssumWX_data == FLT_MAX ) - cvSetErrStatus( 1 ); - } - } -//#endif - // compute the output variable Y == ( a - 2a/(layer->exp2ssumWX + 1)) - CV_CALL(cvAddS( layer->exp2ssumWX, cvRealScalar(1), Y )); - CV_CALL(cvDiv( 0, Y, Y, -2.0*layer->a )); - CV_CALL(cvAddS( Y, cvRealScalar(layer->a), Y )); - - }__END__; -} - -/****************************************************************************************\ -* Layer BACKWARD functions * -\****************************************************************************************/ - -/* , should be row-vectors. - Function computes partial derivatives - of the loss function with respect to the planes components - of the previous layer (X). - It is a basic function for back propagation method. - Input parameter is the partial derivative of the - loss function with respect to the planes components - of the current layer. */ -static void icvCNNConvolutionBackward( - CvCNNLayer* _layer, int t, const CvMat* X, const CvMat* dE_dY, CvMat* dE_dX ) -{ - CvMat* dY_dX = 0; - CvMat* dY_dW = 0; - CvMat* dE_dW = 0; - - CV_FUNCNAME("icvCNNConvolutionBackward"); - - if( !ICV_IS_CNN_CONVOLUTION_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNConvolutionLayer* layer = (CvCNNConvolutionLayer*) _layer; - - const int K = layer->K; - - const int n_X_planes = layer->n_input_planes; - const int X_plane_height = layer->input_height; - const int X_plane_width = layer->input_width; - const int X_plane_size = X_plane_height*X_plane_width; - - const int n_Y_planes = layer->n_output_planes; - const int Y_plane_height = layer->output_height; - const int Y_plane_width = layer->output_width; - const int Y_plane_size = Y_plane_height*Y_plane_width; - - int no, ni, yy, xx, ky, kx; - int X_idx = 0, Y_idx = 0; - - float *X_plane = 0, *w = 0; - - CvMat* weights = layer->weights; - - CV_ASSERT( t >= 1 ); - CV_ASSERT( n_Y_planes == weights->rows ); - - dY_dX = cvCreateMat( n_Y_planes*Y_plane_size, X->rows, CV_32FC1 ); - dY_dW = cvCreateMat( dY_dX->rows, weights->cols*weights->rows, CV_32FC1 ); - dE_dW = cvCreateMat( 1, dY_dW->cols, CV_32FC1 ); - - cvZero( dY_dX ); - cvZero( dY_dW ); - - // compute gradient of the loss function with respect to X and W - for( no = 0; no < n_Y_planes; no++, Y_idx += Y_plane_size ) - { - w = weights->data.fl + no*(K*K+1); - X_idx = 0; - X_plane = X->data.fl; - for( ni = 0; ni < n_X_planes; ni++, X_plane += X_plane_size ) - { - if( layer->connect_mask->data.ptr[ni*n_Y_planes+no] ) - { - for( yy = 0; yy < X_plane_height - K + 1; yy++ ) - { - for( xx = 0; xx < X_plane_width - K + 1; xx++ ) - { - for( ky = 0; ky < K; ky++ ) - { - for( kx = 0; kx < K; kx++ ) - { - CV_MAT_ELEM(*dY_dX, float, Y_idx+yy*Y_plane_width+xx, - X_idx+(yy+ky)*X_plane_width+(xx+kx)) = w[ky*K+kx]; - - // dY_dWi, i=1,...,K*K - CV_MAT_ELEM(*dY_dW, float, Y_idx+yy*Y_plane_width+xx, - no*(K*K+1)+ky*K+kx) += - X_plane[(yy+ky)*X_plane_width+(xx+kx)]; - } - } - // dY_dW(K*K+1)==1 because W(K*K+1) is bias - CV_MAT_ELEM(*dY_dW, float, Y_idx+yy*Y_plane_width+xx, - no*(K*K+1)+K*K) += 1; - } - } - } - X_idx += X_plane_size; - } - } - - CV_CALL(cvMatMul( dE_dY, dY_dW, dE_dW )); - CV_CALL(cvMatMul( dE_dY, dY_dX, dE_dX )); - - // update weights - { - CvMat dE_dW_mat; - float eta; - if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_LOG_INV ) - eta = -layer->init_learn_rate/logf(1+(float)t); - else if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_SQRT_INV ) - eta = -layer->init_learn_rate/sqrtf((float)t); - else - eta = -layer->init_learn_rate/(float)t; - cvReshape( dE_dW, &dE_dW_mat, 0, weights->rows ); - cvScaleAdd( &dE_dW_mat, cvRealScalar(eta), weights, weights ); - } - - }__END__; - - cvReleaseMat( &dY_dX ); - cvReleaseMat( &dY_dW ); - cvReleaseMat( &dE_dW ); -} - -/****************************************************************************************/ -static void icvCNNSubSamplingBackward( - CvCNNLayer* _layer, int t, const CvMat*, const CvMat* dE_dY, CvMat* dE_dX ) -{ - // derivative of activation function - CvMat* dY_dX_elems = 0; // elements of matrix dY_dX - CvMat* dY_dW_elems = 0; // elements of matrix dY_dW - CvMat* dE_dW = 0; - - CV_FUNCNAME("icvCNNSubSamplingBackward"); - - if( !ICV_IS_CNN_SUBSAMPLING_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNSubSamplingLayer* layer = (CvCNNSubSamplingLayer*) _layer; - - const int Xwidth = layer->input_width; - const int Ywidth = layer->output_width; - const int Yheight = layer->output_height; - const int Ysize = Ywidth * Yheight; - const int scale = layer->sub_samp_scale; - const int k_max = layer->n_output_planes * Yheight; - - int k, i, j, m; - float* dY_dX_current_elem = 0, *dE_dX_start = 0, *dE_dW_data = 0, *w = 0; - CvMat dy_dw0, dy_dw1; - CvMat activ_func_der, sumX_row; - CvMat dE_dY_sub_row, dY_dX_sub_col, dy_dw0_sub_row, dy_dw1_sub_row; - - CV_CALL(dY_dX_elems = cvCreateMat( layer->sumX->rows, 1, CV_32FC1 )); - CV_CALL(dY_dW_elems = cvCreateMat( 2, layer->sumX->rows, CV_32FC1 )); - CV_CALL(dE_dW = cvCreateMat( 1, 2*layer->n_output_planes, CV_32FC1 )); - - // compute derivative of activ.func. - // == = 4as*(layer->exp2ssumWX)/(layer->exp2ssumWX + 1)^2 - CV_CALL(cvAddS( layer->exp2ssumWX, cvRealScalar(1), dY_dX_elems )); - CV_CALL(cvPow( dY_dX_elems, dY_dX_elems, -2.0 )); - CV_CALL(cvMul( dY_dX_elems, layer->exp2ssumWX, dY_dX_elems, 4.0*layer->a*layer->s )); - - // compute - // a) compute - cvReshape( dY_dX_elems, &activ_func_der, 0, 1 ); - cvGetRow( dY_dW_elems, &dy_dw0, 0 ); - cvGetRow( dY_dW_elems, &dy_dw1, 1 ); - CV_CALL(cvCopy( &activ_func_der, &dy_dw0 )); - CV_CALL(cvCopy( &activ_func_der, &dy_dw1 )); - - cvReshape( layer->sumX, &sumX_row, 0, 1 ); - cvMul( &dy_dw0, &sumX_row, &dy_dw0 ); - - // b) compute = * - cvGetCols( dE_dY, &dE_dY_sub_row, 0, Ysize ); - cvGetCols( &dy_dw0, &dy_dw0_sub_row, 0, Ysize ); - cvGetCols( &dy_dw1, &dy_dw1_sub_row, 0, Ysize ); - dE_dW_data = dE_dW->data.fl; - for( i = 0; i < layer->n_output_planes; i++ ) - { - *dE_dW_data++ = (float)cvDotProduct( &dE_dY_sub_row, &dy_dw0_sub_row ); - *dE_dW_data++ = (float)cvDotProduct( &dE_dY_sub_row, &dy_dw1_sub_row ); - - dE_dY_sub_row.data.fl += Ysize; - dy_dw0_sub_row.data.fl += Ysize; - dy_dw1_sub_row.data.fl += Ysize; - } - - // compute = layer->weights* - w = layer->weights->data.fl; - cvGetRows( dY_dX_elems, &dY_dX_sub_col, 0, Ysize ); - for( i = 0; i < layer->n_input_planes; i++, w++, dY_dX_sub_col.data.fl += Ysize ) - CV_CALL(cvConvertScale( &dY_dX_sub_col, &dY_dX_sub_col, (float)*w )); - - // compute - CV_CALL(cvReshape( dY_dX_elems, dY_dX_elems, 0, 1 )); - CV_CALL(cvMul( dY_dX_elems, dE_dY, dY_dX_elems )); - - dY_dX_current_elem = dY_dX_elems->data.fl; - dE_dX_start = dE_dX->data.fl; - for( k = 0; k < k_max; k++ ) - { - for( i = 0; i < Ywidth; i++, dY_dX_current_elem++ ) - { - float* dE_dX_current_elem = dE_dX_start; - for( j = 0; j < scale; j++, dE_dX_current_elem += Xwidth - scale ) - { - for( m = 0; m < scale; m++, dE_dX_current_elem++ ) - *dE_dX_current_elem = *dY_dX_current_elem; - } - dE_dX_start += scale; - } - dE_dX_start += Xwidth * (scale - 1); - } - - // update weights - { - CvMat dE_dW_mat, *weights = layer->weights; - float eta; - if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_LOG_INV ) - eta = -layer->init_learn_rate/logf(1+(float)t); - else if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_SQRT_INV ) - eta = -layer->init_learn_rate/sqrtf((float)t); - else - eta = -layer->init_learn_rate/(float)t; - cvReshape( dE_dW, &dE_dW_mat, 0, weights->rows ); - cvScaleAdd( &dE_dW_mat, cvRealScalar(eta), weights, weights ); - } - - }__END__; - - cvReleaseMat( &dY_dX_elems ); - cvReleaseMat( &dY_dW_elems ); - cvReleaseMat( &dE_dW ); -} - -/****************************************************************************************/ -/* , should be row-vectors. - Function computes partial derivatives , - of the loss function with respect to the planes components - of the previous layer (X) and the weights of the current layer (W) - and updates weights od the current layer by using . - It is a basic function for back propagation method. - Input parameter is the partial derivative of the - loss function with respect to the planes components - of the current layer. */ -static void icvCNNFullConnectBackward( CvCNNLayer* _layer, - int t, - const CvMat* X, - const CvMat* dE_dY, - CvMat* dE_dX ) -{ - CvMat* dE_dY_activ_func_der = 0; - CvMat* dE_dW = 0; - - CV_FUNCNAME( "icvCNNFullConnectBackward" ); - - if( !ICV_IS_CNN_FULLCONNECT_LAYER(_layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - {__BEGIN__; - - const CvCNNFullConnectLayer* layer = (CvCNNFullConnectLayer*)_layer; - const int n_outputs = layer->n_output_planes; - const int n_inputs = layer->n_input_planes; - - int i; - float* dE_dY_activ_func_der_data; - CvMat* weights = layer->weights; - CvMat sub_weights, Xtemplate, Xrow, exp2ssumWXrow; - - CV_ASSERT(X->cols == 1 && X->rows == n_inputs); - CV_ASSERT(dE_dY->rows == 1 && dE_dY->cols == n_outputs ); - CV_ASSERT(dE_dX->rows == 1 && dE_dX->cols == n_inputs ); - - // we violate the convetion about vector's orientation because - // here is more convenient to make this parameter a row-vector - CV_CALL(dE_dY_activ_func_der = cvCreateMat( 1, n_outputs, CV_32FC1 )); - CV_CALL(dE_dW = cvCreateMat( 1, weights->rows*weights->cols, CV_32FC1 )); - - // 1) compute gradients dE_dX and dE_dW - // activ_func_der == 4as*(layer->exp2ssumWX)/(layer->exp2ssumWX + 1)^2 - CV_CALL(cvReshape( layer->exp2ssumWX, &exp2ssumWXrow, 0, layer->exp2ssumWX->cols )); - CV_CALL(cvAddS( &exp2ssumWXrow, cvRealScalar(1), dE_dY_activ_func_der )); - CV_CALL(cvPow( dE_dY_activ_func_der, dE_dY_activ_func_der, -2.0 )); - CV_CALL(cvMul( dE_dY_activ_func_der, &exp2ssumWXrow, dE_dY_activ_func_der, - 4.0*layer->a*layer->s )); - CV_CALL(cvMul( dE_dY, dE_dY_activ_func_der, dE_dY_activ_func_der )); - - // sub_weights = d(W*(X|1))/dX - CV_CALL(cvGetSubRect( weights, &sub_weights, - cvRect(0, 0, weights->cols-1, weights->rows) )); - CV_CALL(cvMatMul( dE_dY_activ_func_der, &sub_weights, dE_dX )); - - cvReshape( X, &Xrow, 0, 1 ); - dE_dY_activ_func_der_data = dE_dY_activ_func_der->data.fl; - Xtemplate = cvMat( 1, n_inputs, CV_32FC1, dE_dW->data.fl ); - for( i = 0; i < n_outputs; i++, Xtemplate.data.fl += n_inputs + 1 ) - { - CV_CALL(cvConvertScale( &Xrow, &Xtemplate, *dE_dY_activ_func_der_data )); - Xtemplate.data.fl[n_inputs] = *dE_dY_activ_func_der_data++; - } - - // 2) update weights - { - CvMat dE_dW_mat; - float eta; - if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_LOG_INV ) - eta = -layer->init_learn_rate/logf(1+(float)t); - else if( layer->learn_rate_decrease_type == CV_CNN_LEARN_RATE_DECREASE_SQRT_INV ) - eta = -layer->init_learn_rate/sqrtf((float)t); - else - eta = -layer->init_learn_rate/(float)t; - cvReshape( dE_dW, &dE_dW_mat, 0, n_outputs ); - cvScaleAdd( &dE_dW_mat, cvRealScalar(eta), weights, weights ); - } - - }__END__; - - cvReleaseMat( &dE_dY_activ_func_der ); - cvReleaseMat( &dE_dW ); -} - -/****************************************************************************************\ -* Layer RELEASE functions * -\****************************************************************************************/ -static void icvCNNConvolutionRelease( CvCNNLayer** p_layer ) -{ - CV_FUNCNAME("icvCNNConvolutionRelease"); - __BEGIN__; - - CvCNNConvolutionLayer* layer = 0; - - if( !p_layer ) - CV_ERROR( CV_StsNullPtr, "Null double pointer" ); - - layer = *(CvCNNConvolutionLayer**)p_layer; - - if( !layer ) - return; - if( !ICV_IS_CNN_CONVOLUTION_LAYER(layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - cvReleaseMat( &layer->weights ); - cvReleaseMat( &layer->connect_mask ); - cvFree( p_layer ); - - __END__; -} - -/****************************************************************************************/ -static void icvCNNSubSamplingRelease( CvCNNLayer** p_layer ) -{ - CV_FUNCNAME("icvCNNSubSamplingRelease"); - __BEGIN__; - - CvCNNSubSamplingLayer* layer = 0; - - if( !p_layer ) - CV_ERROR( CV_StsNullPtr, "Null double pointer" ); - - layer = *(CvCNNSubSamplingLayer**)p_layer; - - if( !layer ) - return; - if( !ICV_IS_CNN_SUBSAMPLING_LAYER(layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - cvReleaseMat( &layer->exp2ssumWX ); - cvReleaseMat( &layer->weights ); - cvFree( p_layer ); - - __END__; -} - -/****************************************************************************************/ -static void icvCNNFullConnectRelease( CvCNNLayer** p_layer ) -{ - CV_FUNCNAME("icvCNNFullConnectRelease"); - __BEGIN__; - - CvCNNFullConnectLayer* layer = 0; - - if( !p_layer ) - CV_ERROR( CV_StsNullPtr, "Null double pointer" ); - - layer = *(CvCNNFullConnectLayer**)p_layer; - - if( !layer ) - return; - if( !ICV_IS_CNN_FULLCONNECT_LAYER(layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - cvReleaseMat( &layer->exp2ssumWX ); - cvReleaseMat( &layer->weights ); - cvFree( p_layer ); - - __END__; -} - -/****************************************************************************************\ -* Read/Write CNN classifier * -\****************************************************************************************/ -static int icvIsCNNModel( const void* ptr ) -{ - return CV_IS_CNN(ptr); -} - -/****************************************************************************************/ -static void icvReleaseCNNModel( void** ptr ) -{ - CV_FUNCNAME("icvReleaseCNNModel"); - __BEGIN__; - - if( !ptr ) - CV_ERROR( CV_StsNullPtr, "NULL double pointer" ); - CV_ASSERT(CV_IS_CNN(*ptr)); - - icvCNNModelRelease( (CvStatModel**)ptr ); - - __END__; -} - -/****************************************************************************************/ -static CvCNNLayer* icvReadCNNLayer( CvFileStorage* fs, CvFileNode* node ) -{ - CvCNNLayer* layer = 0; - CvMat* weights = 0; - CvMat* connect_mask = 0; - - CV_FUNCNAME("icvReadCNNLayer"); - __BEGIN__; - - int n_input_planes, input_height, input_width; - int n_output_planes, output_height, output_width; - int learn_type, layer_type; - float init_learn_rate; - - CV_CALL(n_input_planes = cvReadIntByName( fs, node, "n_input_planes", -1 )); - CV_CALL(input_height = cvReadIntByName( fs, node, "input_height", -1 )); - CV_CALL(input_width = cvReadIntByName( fs, node, "input_width", -1 )); - CV_CALL(n_output_planes = cvReadIntByName( fs, node, "n_output_planes", -1 )); - CV_CALL(output_height = cvReadIntByName( fs, node, "output_height", -1 )); - CV_CALL(output_width = cvReadIntByName( fs, node, "output_width", -1 )); - CV_CALL(layer_type = cvReadIntByName( fs, node, "layer_type", -1 )); - - CV_CALL(init_learn_rate = (float)cvReadRealByName( fs, node, "init_learn_rate", -1 )); - CV_CALL(learn_type = cvReadIntByName( fs, node, "learn_rate_decrease_type", -1 )); - CV_CALL(weights = (CvMat*)cvReadByName( fs, node, "weights" )); - - if( n_input_planes < 0 || input_height < 0 || input_width < 0 || - n_output_planes < 0 || output_height < 0 || output_width < 0 || - init_learn_rate < 0 || learn_type < 0 || layer_type < 0 || !weights ) - CV_ERROR( CV_StsParseError, "" ); - - if( layer_type == ICV_CNN_CONVOLUTION_LAYER ) - { - const int K = input_height - output_height + 1; - if( K <= 0 || K != input_width - output_width + 1 ) - CV_ERROR( CV_StsBadArg, "Invalid " ); - - CV_CALL(connect_mask = (CvMat*)cvReadByName( fs, node, "connect_mask" )); - if( !connect_mask ) - CV_ERROR( CV_StsParseError, "Missing " ); - - CV_CALL(layer = cvCreateCNNConvolutionLayer( - n_input_planes, input_height, input_width, n_output_planes, K, - init_learn_rate, learn_type, connect_mask, weights )); - } - else if( layer_type == ICV_CNN_SUBSAMPLING_LAYER ) - { - float a, s; - const int sub_samp_scale = input_height/output_height; - - if( sub_samp_scale <= 0 || sub_samp_scale != input_width/output_width ) - CV_ERROR( CV_StsBadArg, "Invalid " ); - - CV_CALL(a = (float)cvReadRealByName( fs, node, "a", -1 )); - CV_CALL(s = (float)cvReadRealByName( fs, node, "s", -1 )); - if( a < 0 || s < 0 ) - CV_ERROR( CV_StsParseError, "Missing or " ); - - CV_CALL(layer = cvCreateCNNSubSamplingLayer( - n_input_planes, input_height, input_width, sub_samp_scale, - a, s, init_learn_rate, learn_type, weights )); - } - else if( layer_type == ICV_CNN_FULLCONNECT_LAYER ) - { - float a, s; - CV_CALL(a = (float)cvReadRealByName( fs, node, "a", -1 )); - CV_CALL(s = (float)cvReadRealByName( fs, node, "s", -1 )); - if( a < 0 || s < 0 ) - CV_ERROR( CV_StsParseError, "" ); - if( input_height != 1 || input_width != 1 || - output_height != 1 || output_width != 1 ) - CV_ERROR( CV_StsBadArg, "" ); - - CV_CALL(layer = cvCreateCNNFullConnectLayer( n_input_planes, n_output_planes, - a, s, init_learn_rate, learn_type, weights )); - } - else - CV_ERROR( CV_StsBadArg, "Invalid " ); - - __END__; - - if( cvGetErrStatus() < 0 && layer ) - layer->release( &layer ); - - cvReleaseMat( &weights ); - cvReleaseMat( &connect_mask ); - - return layer; -} - -/****************************************************************************************/ -static void icvWriteCNNLayer( CvFileStorage* fs, CvCNNLayer* layer ) -{ - CV_FUNCNAME ("icvWriteCNNLayer"); - __BEGIN__; - - if( !ICV_IS_CNN_LAYER(layer) ) - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - CV_CALL( cvStartWriteStruct( fs, NULL, CV_NODE_MAP, "opencv-ml-cnn-layer" )); - - CV_CALL(cvWriteInt( fs, "n_input_planes", layer->n_input_planes )); - CV_CALL(cvWriteInt( fs, "input_height", layer->input_height )); - CV_CALL(cvWriteInt( fs, "input_width", layer->input_width )); - CV_CALL(cvWriteInt( fs, "n_output_planes", layer->n_output_planes )); - CV_CALL(cvWriteInt( fs, "output_height", layer->output_height )); - CV_CALL(cvWriteInt( fs, "output_width", layer->output_width )); - CV_CALL(cvWriteInt( fs, "learn_rate_decrease_type", layer->learn_rate_decrease_type)); - CV_CALL(cvWriteReal( fs, "init_learn_rate", layer->init_learn_rate )); - CV_CALL(cvWrite( fs, "weights", layer->weights )); - - if( ICV_IS_CNN_CONVOLUTION_LAYER( layer )) - { - CvCNNConvolutionLayer* l = (CvCNNConvolutionLayer*)layer; - CV_CALL(cvWriteInt( fs, "layer_type", ICV_CNN_CONVOLUTION_LAYER )); - CV_CALL(cvWrite( fs, "connect_mask", l->connect_mask )); - } - else if( ICV_IS_CNN_SUBSAMPLING_LAYER( layer ) ) - { - CvCNNSubSamplingLayer* l = (CvCNNSubSamplingLayer*)layer; - CV_CALL(cvWriteInt( fs, "layer_type", ICV_CNN_SUBSAMPLING_LAYER )); - CV_CALL(cvWriteReal( fs, "a", l->a )); - CV_CALL(cvWriteReal( fs, "s", l->s )); - } - else if( ICV_IS_CNN_FULLCONNECT_LAYER( layer ) ) - { - CvCNNFullConnectLayer* l = (CvCNNFullConnectLayer*)layer; - CV_CALL(cvWriteInt( fs, "layer_type", ICV_CNN_FULLCONNECT_LAYER )); - CV_CALL(cvWriteReal( fs, "a", l->a )); - CV_CALL(cvWriteReal( fs, "s", l->s )); - } - else - CV_ERROR( CV_StsBadArg, "Invalid layer" ); - - CV_CALL( cvEndWriteStruct( fs )); //"opencv-ml-cnn-layer" - - __END__; -} - -/****************************************************************************************/ -static void* icvReadCNNModel( CvFileStorage* fs, CvFileNode* root_node ) -{ - CvCNNStatModel* cnn = 0; - CvCNNLayer* layer = 0; - - CV_FUNCNAME("icvReadCNNModel"); - __BEGIN__; - - CvFileNode* node; - CvSeq* seq; - CvSeqReader reader; - int i; - - CV_CALL(cnn = (CvCNNStatModel*)cvCreateStatModel( - CV_STAT_MODEL_MAGIC_VAL|CV_CNN_MAGIC_VAL, sizeof(CvCNNStatModel), - icvCNNModelRelease, icvCNNModelPredict, icvCNNModelUpdate )); - - CV_CALL(cnn->etalons = (CvMat*)cvReadByName( fs, root_node, "etalons" )); - CV_CALL(cnn->cls_labels = (CvMat*)cvReadByName( fs, root_node, "cls_labels" )); - - if( !cnn->etalons || !cnn->cls_labels ) - CV_ERROR( CV_StsParseError, "No or in CNN model" ); - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "network" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) ) - CV_ERROR( CV_StsBadArg, "" ); - - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - CV_CALL(layer = icvReadCNNLayer( fs, (CvFileNode*)reader.ptr )); - CV_CALL(cnn->network = cvCreateCNNetwork( layer )); - - for( i = 1; i < seq->total; i++ ) - { - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - CV_CALL(layer = icvReadCNNLayer( fs, (CvFileNode*)reader.ptr )); - CV_CALL(cnn->network->add_layer( cnn->network, layer )); - } - - __END__; - - if( cvGetErrStatus() < 0 ) - { - if( cnn ) cnn->release( (CvStatModel**)&cnn ); - if( layer ) layer->release( &layer ); - } - return (void*)cnn; -} - -/****************************************************************************************/ -static void -icvWriteCNNModel( CvFileStorage* fs, const char* name, - const void* struct_ptr, CvAttrList ) - -{ - CV_FUNCNAME ("icvWriteCNNModel"); - __BEGIN__; - - CvCNNStatModel* cnn = (CvCNNStatModel*)struct_ptr; - int n_layers, i; - CvCNNLayer* layer; - - if( !CV_IS_CNN(cnn) ) - CV_ERROR( CV_StsBadArg, "Invalid pointer" ); - - n_layers = cnn->network->n_layers; - - CV_CALL( cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_CNN )); - - CV_CALL(cvWrite( fs, "etalons", cnn->etalons )); - CV_CALL(cvWrite( fs, "cls_labels", cnn->cls_labels )); - - CV_CALL( cvStartWriteStruct( fs, "network", CV_NODE_SEQ )); - - layer = cnn->network->layers; - for( i = 0; i < n_layers && layer; i++, layer = layer->next_layer ) - CV_CALL(icvWriteCNNLayer( fs, layer )); - if( i < n_layers || layer ) - CV_ERROR( CV_StsBadArg, "Invalid network" ); - - CV_CALL( cvEndWriteStruct( fs )); //"network" - CV_CALL( cvEndWriteStruct( fs )); //"opencv-ml-cnn" - - __END__; -} - -static int icvRegisterCNNStatModelType() -{ - CvTypeInfo info; - - info.header_size = sizeof( info ); - info.is_instance = icvIsCNNModel; - info.release = icvReleaseCNNModel; - info.read = icvReadCNNModel; - info.write = icvWriteCNNModel; - info.clone = NULL; - info.type_name = CV_TYPE_NAME_ML_CNN; - cvRegisterType( &info ); - - return 1; -} // End of icvRegisterCNNStatModelType - -static int cnn = icvRegisterCNNStatModelType(); - -#endif - -// End of file diff --git a/modules/ml/src/data.cpp b/modules/ml/src/data.cpp deleted file mode 100644 index 8f2c772..0000000 --- a/modules/ml/src/data.cpp +++ /dev/null @@ -1,769 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -#define MISS_VAL FLT_MAX -#define CV_VAR_MISS 0 - -CvTrainTestSplit::CvTrainTestSplit() -{ - train_sample_part_mode = CV_COUNT; - train_sample_part.count = -1; - mix = false; -} - -CvTrainTestSplit::CvTrainTestSplit( int _train_sample_count, bool _mix ) -{ - train_sample_part_mode = CV_COUNT; - train_sample_part.count = _train_sample_count; - mix = _mix; -} - -CvTrainTestSplit::CvTrainTestSplit( float _train_sample_portion, bool _mix ) -{ - train_sample_part_mode = CV_PORTION; - train_sample_part.portion = _train_sample_portion; - mix = _mix; -} - -//////////////// - -CvMLData::CvMLData() -{ - values = missing = var_types = var_idx_mask = response_out = var_idx_out = var_types_out = 0; - train_sample_idx = test_sample_idx = 0; - sample_idx = 0; - response_idx = -1; - - train_sample_count = -1; - - delimiter = ','; - miss_ch = '?'; - //flt_separator = '.'; - - rng = &cv::theRNG(); -} - -CvMLData::~CvMLData() -{ - clear(); -} - -void CvMLData::free_train_test_idx() -{ - cvReleaseMat( &train_sample_idx ); - cvReleaseMat( &test_sample_idx ); - sample_idx = 0; -} - -void CvMLData::clear() -{ - class_map.clear(); - - cvReleaseMat( &values ); - cvReleaseMat( &missing ); - cvReleaseMat( &var_types ); - cvReleaseMat( &var_idx_mask ); - - cvReleaseMat( &response_out ); - cvReleaseMat( &var_idx_out ); - cvReleaseMat( &var_types_out ); - - free_train_test_idx(); - - total_class_count = 0; - - response_idx = -1; - - train_sample_count = -1; -} - -static char *fgets_chomp(char *str, int n, FILE *stream) -{ - char *head = fgets(str, n, stream); - if( head ) - { - for(char *tail = head + strlen(head) - 1; tail >= head; --tail) - { - if( *tail != '\r' && *tail != '\n' ) - break; - *tail = '\0'; - } - } - return head; -} - - -int CvMLData::read_csv(const char* filename) -{ - const int M = 1000000; - const char str_delimiter[3] = { ' ', delimiter, '\0' }; - FILE* file = 0; - CvMemStorage* storage; - CvSeq* seq; - char *ptr; - float* el_ptr; - CvSeqReader reader; - int cols_count = 0; - uchar *var_types_ptr = 0; - - clear(); - - file = fopen( filename, "rt" ); - - if( !file ) - return -1; - - // read the first line and determine the number of variables - std::vector _buf(M); - char* buf = &_buf[0]; - if( !fgets_chomp( buf, M, file )) - { - fclose(file); - return -1; - } - - ptr = buf; - while( *ptr == ' ' ) - ptr++; - for( ; *ptr != '\0'; ) - { - if(*ptr == delimiter || *ptr == ' ') - { - cols_count++; - ptr++; - while( *ptr == ' ' ) ptr++; - } - else - ptr++; - } - - cols_count++; - - if ( cols_count == 0) - { - fclose(file); - return -1; - } - - // create temporary memory storage to store the whole database - el_ptr = new float[cols_count]; - storage = cvCreateMemStorage(); - seq = cvCreateSeq( 0, sizeof(*seq), cols_count*sizeof(float), storage ); - - var_types = cvCreateMat( 1, cols_count, CV_8U ); - cvZero( var_types ); - var_types_ptr = var_types->data.ptr; - - for(;;) - { - char *token = NULL; - int type; - token = strtok(buf, str_delimiter); - if (!token) - break; - for (int i = 0; i < cols_count-1; i++) - { - str_to_flt_elem( token, el_ptr[i], type); - var_types_ptr[i] |= type; - token = strtok(NULL, str_delimiter); - if (!token) - { - fclose(file); - delete [] el_ptr; - return -1; - } - } - str_to_flt_elem( token, el_ptr[cols_count-1], type); - var_types_ptr[cols_count-1] |= type; - cvSeqPush( seq, el_ptr ); - if( !fgets_chomp( buf, M, file ) ) - break; - } - fclose(file); - - values = cvCreateMat( seq->total, cols_count, CV_32FC1 ); - missing = cvCreateMat( seq->total, cols_count, CV_8U ); - var_idx_mask = cvCreateMat( 1, values->cols, CV_8UC1 ); - cvSet( var_idx_mask, cvRealScalar(1) ); - train_sample_count = seq->total; - - cvStartReadSeq( seq, &reader ); - for(int i = 0; i < seq->total; i++ ) - { - const float* sdata = (float*)reader.ptr; - float* ddata = values->data.fl + cols_count*i; - uchar* dm = missing->data.ptr + cols_count*i; - - for( int j = 0; j < cols_count; j++ ) - { - ddata[j] = sdata[j]; - dm[j] = ( fabs( MISS_VAL - sdata[j] ) <= FLT_EPSILON ); - } - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - if ( cvNorm( missing, 0, CV_L1 ) <= FLT_EPSILON ) - cvReleaseMat( &missing ); - - cvReleaseMemStorage( &storage ); - delete []el_ptr; - return 0; -} - -const CvMat* CvMLData::get_values() const -{ - return values; -} - -const CvMat* CvMLData::get_missing() const -{ - CV_FUNCNAME( "CvMLData::get_missing" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - __END__; - - return missing; -} - -const std::map& CvMLData::get_class_labels_map() const -{ - return class_map; -} - -void CvMLData::str_to_flt_elem( const char* token, float& flt_elem, int& type) -{ - - char* stopstring = NULL; - flt_elem = (float)strtod( token, &stopstring ); - assert( stopstring ); - type = CV_VAR_ORDERED; - if ( *stopstring == miss_ch && strlen(stopstring) == 1 ) // missed value - { - flt_elem = MISS_VAL; - type = CV_VAR_MISS; - } - else - { - if ( (*stopstring != 0) && (*stopstring != '\n') && (strcmp(stopstring, "\r\n") != 0) ) // class label - { - int idx = class_map[token]; - if ( idx == 0) - { - total_class_count++; - idx = total_class_count; - class_map[token] = idx; - } - flt_elem = (float)idx; - type = CV_VAR_CATEGORICAL; - } - } -} - -void CvMLData::set_delimiter(char ch) -{ - CV_FUNCNAME( "CvMLData::set_delimited" ); - __BEGIN__; - - if (ch == miss_ch /*|| ch == flt_separator*/) - CV_ERROR(CV_StsBadArg, "delimited, miss_character and flt_separator must be different"); - - delimiter = ch; - - __END__; -} - -char CvMLData::get_delimiter() const -{ - return delimiter; -} - -void CvMLData::set_miss_ch(char ch) -{ - CV_FUNCNAME( "CvMLData::set_miss_ch" ); - __BEGIN__; - - if (ch == delimiter/* || ch == flt_separator*/) - CV_ERROR(CV_StsBadArg, "delimited, miss_character and flt_separator must be different"); - - miss_ch = ch; - - __END__; -} - -char CvMLData::get_miss_ch() const -{ - return miss_ch; -} - -void CvMLData::set_response_idx( int idx ) -{ - CV_FUNCNAME( "CvMLData::set_response_idx" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - if ( idx >= values->cols) - CV_ERROR( CV_StsBadArg, "idx value is not correct" ); - - if ( response_idx >= 0 ) - chahge_var_idx( response_idx, true ); - if ( idx >= 0 ) - chahge_var_idx( idx, false ); - response_idx = idx; - - __END__; -} - -int CvMLData::get_response_idx() const -{ - CV_FUNCNAME( "CvMLData::get_response_idx" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - __END__; - return response_idx; -} - -void CvMLData::change_var_type( int var_idx, int type ) -{ - CV_FUNCNAME( "CvMLData::change_var_type" ); - __BEGIN__; - - int var_count = 0; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - var_count = values->cols; - - if ( var_idx < 0 || var_idx >= var_count) - CV_ERROR( CV_StsBadArg, "var_idx is not correct" ); - - if ( type != CV_VAR_ORDERED && type != CV_VAR_CATEGORICAL) - CV_ERROR( CV_StsBadArg, "type is not correct" ); - - assert( var_types ); - if ( var_types->data.ptr[var_idx] == CV_VAR_CATEGORICAL && type == CV_VAR_ORDERED) - CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" ); - var_types->data.ptr[var_idx] = (uchar)type; - - __END__; - - return; -} - -void CvMLData::set_var_types( const char* str ) -{ - CV_FUNCNAME( "CvMLData::set_var_types" ); - __BEGIN__; - - const char* ord = 0, *cat = 0; - int var_count = 0, set_var_type_count = 0; - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - var_count = values->cols; - - assert( var_types ); - - ord = strstr( str, "ord" ); - cat = strstr( str, "cat" ); - if ( !ord && !cat ) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - if ( !ord && strlen(cat) == 3 ) // str == "cat" - { - cvSet( var_types, cvScalarAll(CV_VAR_CATEGORICAL) ); - return; - } - - if ( !cat && strlen(ord) == 3 ) // str == "ord" - { - cvSet( var_types, cvScalarAll(CV_VAR_ORDERED) ); - return; - } - - if ( ord ) // parse ord str - { - char* stopstring = NULL; - if ( ord[3] != '[') - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - ord += 4; // pass "ord[" - do - { - int b1 = (int)strtod( ord, &stopstring ); - if ( *stopstring == 0 || (*stopstring != ',' && *stopstring != ']' && *stopstring != '-') ) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - ord = stopstring + 1; - if ( (stopstring[0] == ',') || (stopstring[0] == ']')) - { - if ( var_types->data.ptr[b1] == CV_VAR_CATEGORICAL) - CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" ); - var_types->data.ptr[b1] = CV_VAR_ORDERED; - set_var_type_count++; - } - else - { - if ( stopstring[0] == '-') - { - int b2 = (int)strtod( ord, &stopstring); - if ( (*stopstring == 0) || (*stopstring != ',' && *stopstring != ']') ) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - ord = stopstring + 1; - for (int i = b1; i <= b2; i++) - { - if ( var_types->data.ptr[i] == CV_VAR_CATEGORICAL) - CV_ERROR( CV_StsBadArg, "it`s impossible to assign CV_VAR_ORDERED type to categorical variable" ); - var_types->data.ptr[i] = CV_VAR_ORDERED; - } - set_var_type_count += b2 - b1 + 1; - } - else - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - } - } - while (*stopstring != ']'); - - if ( stopstring[1] != '\0' && stopstring[1] != ',') - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - } - - if ( cat ) // parse cat str - { - char* stopstring = NULL; - if ( cat[3] != '[') - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - cat += 4; // pass "cat[" - do - { - int b1 = (int)strtod( cat, &stopstring ); - if ( *stopstring == 0 || (*stopstring != ',' && *stopstring != ']' && *stopstring != '-') ) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - cat = stopstring + 1; - if ( (stopstring[0] == ',') || (stopstring[0] == ']')) - { - var_types->data.ptr[b1] = CV_VAR_CATEGORICAL; - set_var_type_count++; - } - else - { - if ( stopstring[0] == '-') - { - int b2 = (int)strtod( cat, &stopstring); - if ( (*stopstring == 0) || (*stopstring != ',' && *stopstring != ']') ) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - cat = stopstring + 1; - for (int i = b1; i <= b2; i++) - var_types->data.ptr[i] = CV_VAR_CATEGORICAL; - set_var_type_count += b2 - b1 + 1; - } - else - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - } - } - while (*stopstring != ']'); - - if ( stopstring[1] != '\0' && stopstring[1] != ',') - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - } - - if (set_var_type_count != var_count) - CV_ERROR( CV_StsBadArg, "types string is not correct" ); - - __END__; -} - -const CvMat* CvMLData::get_var_types() -{ - CV_FUNCNAME( "CvMLData::get_var_types" ); - __BEGIN__; - - uchar *var_types_out_ptr = 0; - int avcount, vt_size; - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - assert( var_idx_mask ); - - avcount = cvFloor( cvNorm( var_idx_mask, 0, CV_L1 ) ); - vt_size = avcount + (response_idx >= 0); - - if ( avcount == values->cols || (avcount == values->cols-1 && response_idx == values->cols-1) ) - return var_types; - - if ( !var_types_out || ( var_types_out && var_types_out->cols != vt_size ) ) - { - cvReleaseMat( &var_types_out ); - var_types_out = cvCreateMat( 1, vt_size, CV_8UC1 ); - } - - var_types_out_ptr = var_types_out->data.ptr; - for( int i = 0; i < var_types->cols; i++) - { - if (i == response_idx || !var_idx_mask->data.ptr[i]) continue; - *var_types_out_ptr = var_types->data.ptr[i]; - var_types_out_ptr++; - } - if ( response_idx >= 0 ) - *var_types_out_ptr = var_types->data.ptr[response_idx]; - - __END__; - - return var_types_out; -} - -int CvMLData::get_var_type( int var_idx ) const -{ - return var_types->data.ptr[var_idx]; -} - -const CvMat* CvMLData::get_responses() -{ - CV_FUNCNAME( "CvMLData::get_responses_ptr" ); - __BEGIN__; - - int var_count = 0; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - var_count = values->cols; - - if ( response_idx < 0 || response_idx >= var_count ) - return 0; - if ( !response_out ) - response_out = cvCreateMatHeader( values->rows, 1, CV_32FC1 ); - else - cvInitMatHeader( response_out, values->rows, 1, CV_32FC1); - cvGetCol( values, response_out, response_idx ); - - __END__; - - return response_out; -} - -void CvMLData::set_train_test_split( const CvTrainTestSplit * spl) -{ - CV_FUNCNAME( "CvMLData::set_division" ); - __BEGIN__; - - int sample_count = 0; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - sample_count = values->rows; - - float train_sample_portion; - - if (spl->train_sample_part_mode == CV_COUNT) - { - train_sample_count = spl->train_sample_part.count; - if (train_sample_count > sample_count) - CV_ERROR( CV_StsBadArg, "train samples count is not correct" ); - train_sample_count = train_sample_count<=0 ? sample_count : train_sample_count; - } - else // dtype.train_sample_part_mode == CV_PORTION - { - train_sample_portion = spl->train_sample_part.portion; - if ( train_sample_portion > 1) - CV_ERROR( CV_StsBadArg, "train samples count is not correct" ); - train_sample_portion = train_sample_portion <= FLT_EPSILON || - 1 - train_sample_portion <= FLT_EPSILON ? 1 : train_sample_portion; - train_sample_count = std::max(1, cvFloor( train_sample_portion * sample_count )); - } - - if ( train_sample_count == sample_count ) - { - free_train_test_idx(); - return; - } - - if ( train_sample_idx && train_sample_idx->cols != train_sample_count ) - free_train_test_idx(); - - if ( !sample_idx) - { - int test_sample_count = sample_count- train_sample_count; - sample_idx = (int*)cvAlloc( sample_count * sizeof(sample_idx[0]) ); - for (int i = 0; i < sample_count; i++ ) - sample_idx[i] = i; - train_sample_idx = cvCreateMatHeader( 1, train_sample_count, CV_32SC1 ); - *train_sample_idx = cvMat( 1, train_sample_count, CV_32SC1, &sample_idx[0] ); - - CV_Assert(test_sample_count > 0); - test_sample_idx = cvCreateMatHeader( 1, test_sample_count, CV_32SC1 ); - *test_sample_idx = cvMat( 1, test_sample_count, CV_32SC1, &sample_idx[train_sample_count] ); - } - - mix = spl->mix; - if ( mix ) - mix_train_and_test_idx(); - - __END__; -} - -const CvMat* CvMLData::get_train_sample_idx() const -{ - CV_FUNCNAME( "CvMLData::get_train_sample_idx" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - __END__; - - return train_sample_idx; -} - -const CvMat* CvMLData::get_test_sample_idx() const -{ - CV_FUNCNAME( "CvMLData::get_test_sample_idx" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - __END__; - - return test_sample_idx; -} - -void CvMLData::mix_train_and_test_idx() -{ - CV_FUNCNAME( "CvMLData::mix_train_and_test_idx" ); - __BEGIN__; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - __END__; - - if ( !sample_idx) - return; - - if ( train_sample_count > 0 && train_sample_count < values->rows ) - { - int n = values->rows; - for (int i = 0; i < n; i++) - { - int a = (*rng)(n); - int b = (*rng)(n); - int t; - CV_SWAP( sample_idx[a], sample_idx[b], t ); - } - } -} - -const CvMat* CvMLData::get_var_idx() -{ - CV_FUNCNAME( "CvMLData::get_var_idx" ); - __BEGIN__; - - int avcount = 0; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - assert( var_idx_mask ); - - avcount = cvFloor( cvNorm( var_idx_mask, 0, CV_L1 ) ); - int* vidx; - - if ( avcount == values->cols ) - return 0; - - if ( !var_idx_out || ( var_idx_out && var_idx_out->cols != avcount ) ) - { - cvReleaseMat( &var_idx_out ); - var_idx_out = cvCreateMat( 1, avcount, CV_32SC1); - if ( response_idx >=0 ) - var_idx_mask->data.ptr[response_idx] = 0; - } - - vidx = var_idx_out->data.i; - - for(int i = 0; i < var_idx_mask->cols; i++) - if ( var_idx_mask->data.ptr[i] ) - { - *vidx = i; - vidx++; - } - - __END__; - - return var_idx_out; -} - -void CvMLData::chahge_var_idx( int vi, bool state ) -{ - change_var_idx( vi, state ); -} - -void CvMLData::change_var_idx( int vi, bool state ) -{ - CV_FUNCNAME( "CvMLData::change_var_idx" ); - __BEGIN__; - - int var_count = 0; - - if ( !values ) - CV_ERROR( CV_StsInternal, "data is empty" ); - - var_count = values->cols; - - if ( vi < 0 || vi >= var_count) - CV_ERROR( CV_StsBadArg, "variable index is not correct" ); - - assert( var_idx_mask ); - var_idx_mask->data.ptr[vi] = state; - - __END__; -} - -/* End of file. */ diff --git a/modules/ml/src/em.cpp b/modules/ml/src/em.cpp deleted file mode 100644 index 12c720d..0000000 --- a/modules/ml/src/em.cpp +++ /dev/null @@ -1,677 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright( C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -//(including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort(including negligence or otherwise) arising in any way out of -// the use of this software, even ifadvised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -const double minEigenValue = DBL_EPSILON; - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -EM::EM(int _nclusters, int _covMatType, const TermCriteria& _termCrit) -{ - nclusters = _nclusters; - covMatType = _covMatType; - maxIters = (_termCrit.type & TermCriteria::MAX_ITER) ? _termCrit.maxCount : DEFAULT_MAX_ITERS; - epsilon = (_termCrit.type & TermCriteria::EPS) ? _termCrit.epsilon : 0; -} - -EM::~EM() -{ - //clear(); -} - -void EM::clear() -{ - trainSamples.release(); - trainProbs.release(); - trainLogLikelihoods.release(); - trainLabels.release(); - - weights.release(); - means.release(); - covs.clear(); - - covsEigenValues.clear(); - invCovsEigenValues.clear(); - covsRotateMats.clear(); - - logWeightDivDet.release(); -} - - -bool EM::train(InputArray samples, - OutputArray logLikelihoods, - OutputArray labels, - OutputArray probs) -{ - Mat samplesMat = samples.getMat(); - setTrainData(START_AUTO_STEP, samplesMat, 0, 0, 0, 0); - return doTrain(START_AUTO_STEP, logLikelihoods, labels, probs); -} - -bool EM::trainE(InputArray samples, - InputArray _means0, - InputArray _covs0, - InputArray _weights0, - OutputArray logLikelihoods, - OutputArray labels, - OutputArray probs) -{ - Mat samplesMat = samples.getMat(); - vector covs0; - _covs0.getMatVector(covs0); - - Mat means0 = _means0.getMat(), weights0 = _weights0.getMat(); - - setTrainData(START_E_STEP, samplesMat, 0, !_means0.empty() ? &means0 : 0, - !_covs0.empty() ? &covs0 : 0, !_weights0.empty() ? &weights0 : 0); - return doTrain(START_E_STEP, logLikelihoods, labels, probs); -} - -bool EM::trainM(InputArray samples, - InputArray _probs0, - OutputArray logLikelihoods, - OutputArray labels, - OutputArray probs) -{ - Mat samplesMat = samples.getMat(); - Mat probs0 = _probs0.getMat(); - - setTrainData(START_M_STEP, samplesMat, !_probs0.empty() ? &probs0 : 0, 0, 0, 0); - return doTrain(START_M_STEP, logLikelihoods, labels, probs); -} - - -Vec2d EM::predict(InputArray _sample, OutputArray _probs) const -{ - Mat sample = _sample.getMat(); - CV_Assert(isTrained()); - - CV_Assert(!sample.empty()); - if(sample.type() != CV_64FC1) - { - Mat tmp; - sample.convertTo(tmp, CV_64FC1); - sample = tmp; - } - sample.reshape(1, 1); - - Mat probs; - if( _probs.needed() ) - { - _probs.create(1, nclusters, CV_64FC1); - probs = _probs.getMat(); - } - - return computeProbabilities(sample, !probs.empty() ? &probs : 0); -} - -bool EM::isTrained() const -{ - return !means.empty(); -} - - -static -void checkTrainData(int startStep, const Mat& samples, - int nclusters, int covMatType, const Mat* probs, const Mat* means, - const vector* covs, const Mat* weights) -{ - // Check samples. - CV_Assert(!samples.empty()); - CV_Assert(samples.channels() == 1); - - int nsamples = samples.rows; - int dim = samples.cols; - - // Check training params. - CV_Assert(nclusters > 0); - CV_Assert(nclusters <= nsamples); - CV_Assert(startStep == EM::START_AUTO_STEP || - startStep == EM::START_E_STEP || - startStep == EM::START_M_STEP); - CV_Assert(covMatType == EM::COV_MAT_GENERIC || - covMatType == EM::COV_MAT_DIAGONAL || - covMatType == EM::COV_MAT_SPHERICAL); - - CV_Assert(!probs || - (!probs->empty() && - probs->rows == nsamples && probs->cols == nclusters && - (probs->type() == CV_32FC1 || probs->type() == CV_64FC1))); - - CV_Assert(!weights || - (!weights->empty() && - (weights->cols == 1 || weights->rows == 1) && static_cast(weights->total()) == nclusters && - (weights->type() == CV_32FC1 || weights->type() == CV_64FC1))); - - CV_Assert(!means || - (!means->empty() && - means->rows == nclusters && means->cols == dim && - means->channels() == 1)); - - CV_Assert(!covs || - (!covs->empty() && - static_cast(covs->size()) == nclusters)); - if(covs) - { - const Size covSize(dim, dim); - for(size_t i = 0; i < covs->size(); i++) - { - const Mat& m = (*covs)[i]; - CV_Assert(!m.empty() && m.size() == covSize && (m.channels() == 1)); - } - } - - if(startStep == EM::START_E_STEP) - { - CV_Assert(means); - } - else if(startStep == EM::START_M_STEP) - { - CV_Assert(probs); - } -} - -static -void preprocessSampleData(const Mat& src, Mat& dst, int dstType, bool isAlwaysClone) -{ - if(src.type() == dstType && !isAlwaysClone) - dst = src; - else - src.convertTo(dst, dstType); -} - -static -void preprocessProbability(Mat& probs) -{ - max(probs, 0., probs); - - const double uniformProbability = (double)(1./probs.cols); - for(int y = 0; y < probs.rows; y++) - { - Mat sampleProbs = probs.row(y); - - double maxVal = 0; - minMaxLoc(sampleProbs, 0, &maxVal); - if(maxVal < FLT_EPSILON) - sampleProbs.setTo(uniformProbability); - else - normalize(sampleProbs, sampleProbs, 1, 0, NORM_L1); - } -} - -void EM::setTrainData(int startStep, const Mat& samples, - const Mat* probs0, - const Mat* means0, - const vector* covs0, - const Mat* weights0) -{ - clear(); - - checkTrainData(startStep, samples, nclusters, covMatType, probs0, means0, covs0, weights0); - - bool isKMeansInit = (startStep == EM::START_AUTO_STEP) || (startStep == EM::START_E_STEP && (covs0 == 0 || weights0 == 0)); - // Set checked data - preprocessSampleData(samples, trainSamples, isKMeansInit ? CV_32FC1 : CV_64FC1, false); - - // set probs - if(probs0 && startStep == EM::START_M_STEP) - { - preprocessSampleData(*probs0, trainProbs, CV_64FC1, true); - preprocessProbability(trainProbs); - } - - // set weights - if(weights0 && (startStep == EM::START_E_STEP && covs0)) - { - weights0->convertTo(weights, CV_64FC1); - weights.reshape(1,1); - preprocessProbability(weights); - } - - // set means - if(means0 && (startStep == EM::START_E_STEP/* || startStep == EM::START_AUTO_STEP*/)) - means0->convertTo(means, isKMeansInit ? CV_32FC1 : CV_64FC1); - - // set covs - if(covs0 && (startStep == EM::START_E_STEP && weights0)) - { - covs.resize(nclusters); - for(size_t i = 0; i < covs0->size(); i++) - (*covs0)[i].convertTo(covs[i], CV_64FC1); - } -} - -void EM::decomposeCovs() -{ - CV_Assert(!covs.empty()); - covsEigenValues.resize(nclusters); - if(covMatType == EM::COV_MAT_GENERIC) - covsRotateMats.resize(nclusters); - invCovsEigenValues.resize(nclusters); - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - CV_Assert(!covs[clusterIndex].empty()); - - SVD svd(covs[clusterIndex], SVD::MODIFY_A + SVD::FULL_UV); - - if(covMatType == EM::COV_MAT_SPHERICAL) - { - double maxSingularVal = svd.w.at(0); - covsEigenValues[clusterIndex] = Mat(1, 1, CV_64FC1, Scalar(maxSingularVal)); - } - else if(covMatType == EM::COV_MAT_DIAGONAL) - { - covsEigenValues[clusterIndex] = svd.w; - } - else //EM::COV_MAT_GENERIC - { - covsEigenValues[clusterIndex] = svd.w; - covsRotateMats[clusterIndex] = svd.u; - } - max(covsEigenValues[clusterIndex], minEigenValue, covsEigenValues[clusterIndex]); - invCovsEigenValues[clusterIndex] = 1./covsEigenValues[clusterIndex]; - } -} - -void EM::clusterTrainSamples() -{ - int nsamples = trainSamples.rows; - - // Cluster samples, compute/update means - - // Convert samples and means to 32F, because kmeans requires this type. - Mat trainSamplesFlt, meansFlt; - if(trainSamples.type() != CV_32FC1) - trainSamples.convertTo(trainSamplesFlt, CV_32FC1); - else - trainSamplesFlt = trainSamples; - if(!means.empty()) - { - if(means.type() != CV_32FC1) - means.convertTo(meansFlt, CV_32FC1); - else - meansFlt = means; - } - - Mat labels; - kmeans(trainSamplesFlt, nclusters, labels, TermCriteria(TermCriteria::COUNT, means.empty() ? 10 : 1, 0.5), 10, KMEANS_PP_CENTERS, meansFlt); - - // Convert samples and means back to 64F. - CV_Assert(meansFlt.type() == CV_32FC1); - if(trainSamples.type() != CV_64FC1) - { - Mat trainSamplesBuffer; - trainSamplesFlt.convertTo(trainSamplesBuffer, CV_64FC1); - trainSamples = trainSamplesBuffer; - } - meansFlt.convertTo(means, CV_64FC1); - - // Compute weights and covs - weights = Mat(1, nclusters, CV_64FC1, Scalar(0)); - covs.resize(nclusters); - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - Mat clusterSamples; - for(int sampleIndex = 0; sampleIndex < nsamples; sampleIndex++) - { - if(labels.at(sampleIndex) == clusterIndex) - { - const Mat sample = trainSamples.row(sampleIndex); - clusterSamples.push_back(sample); - } - } - CV_Assert(!clusterSamples.empty()); - - calcCovarMatrix(clusterSamples, covs[clusterIndex], means.row(clusterIndex), - CV_COVAR_NORMAL + CV_COVAR_ROWS + CV_COVAR_USE_AVG + CV_COVAR_SCALE, CV_64FC1); - weights.at(clusterIndex) = static_cast(clusterSamples.rows)/static_cast(nsamples); - } - - decomposeCovs(); -} - -void EM::computeLogWeightDivDet() -{ - CV_Assert(!covsEigenValues.empty()); - - Mat logWeights; - cv::max(weights, DBL_MIN, weights); - log(weights, logWeights); - - logWeightDivDet.create(1, nclusters, CV_64FC1); - // note: logWeightDivDet = log(weight_k) - 0.5 * log(|det(cov_k)|) - - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - double logDetCov = 0.; - const int evalCount = static_cast(covsEigenValues[clusterIndex].total()); - for(int di = 0; di < evalCount; di++) - logDetCov += std::log(covsEigenValues[clusterIndex].at(covMatType != EM::COV_MAT_SPHERICAL ? di : 0)); - - logWeightDivDet.at(clusterIndex) = logWeights.at(clusterIndex) - 0.5 * logDetCov; - } -} - -bool EM::doTrain(int startStep, OutputArray logLikelihoods, OutputArray labels, OutputArray probs) -{ - int dim = trainSamples.cols; - // Precompute the empty initial train data in the cases of EM::START_E_STEP and START_AUTO_STEP - if(startStep != EM::START_M_STEP) - { - if(covs.empty()) - { - CV_Assert(weights.empty()); - clusterTrainSamples(); - } - } - - if(!covs.empty() && covsEigenValues.empty() ) - { - CV_Assert(invCovsEigenValues.empty()); - decomposeCovs(); - } - - if(startStep == EM::START_M_STEP) - mStep(); - - double trainLogLikelihood, prevTrainLogLikelihood = 0.; - for(int iter = 0; ; iter++) - { - eStep(); - trainLogLikelihood = sum(trainLogLikelihoods)[0]; - - if(iter >= maxIters - 1) - break; - - double trainLogLikelihoodDelta = trainLogLikelihood - prevTrainLogLikelihood; - if( iter != 0 && - (trainLogLikelihoodDelta < -DBL_EPSILON || - trainLogLikelihoodDelta < epsilon * std::fabs(trainLogLikelihood))) - break; - - mStep(); - - prevTrainLogLikelihood = trainLogLikelihood; - } - - if( trainLogLikelihood <= -DBL_MAX/10000. ) - { - clear(); - return false; - } - - // postprocess covs - covs.resize(nclusters); - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - if(covMatType == EM::COV_MAT_SPHERICAL) - { - covs[clusterIndex].create(dim, dim, CV_64FC1); - setIdentity(covs[clusterIndex], Scalar(covsEigenValues[clusterIndex].at(0))); - } - else if(covMatType == EM::COV_MAT_DIAGONAL) - { - covs[clusterIndex] = Mat::diag(covsEigenValues[clusterIndex]); - } - } - - if(labels.needed()) - trainLabels.copyTo(labels); - if(probs.needed()) - trainProbs.copyTo(probs); - if(logLikelihoods.needed()) - trainLogLikelihoods.copyTo(logLikelihoods); - - trainSamples.release(); - trainProbs.release(); - trainLabels.release(); - trainLogLikelihoods.release(); - - return true; -} - -Vec2d EM::computeProbabilities(const Mat& sample, Mat* probs) const -{ - // L_ik = log(weight_k) - 0.5 * log(|det(cov_k)|) - 0.5 *(x_i - mean_k)' cov_k^(-1) (x_i - mean_k)] - // q = arg(max_k(L_ik)) - // probs_ik = exp(L_ik - L_iq) / (1 + sum_j!=q (exp(L_ij - L_iq)) - // see Alex Smola's blog http://blog.smola.org/page/2 for - // details on the log-sum-exp trick - - CV_Assert(!means.empty()); - CV_Assert(sample.type() == CV_64FC1); - CV_Assert(sample.rows == 1); - CV_Assert(sample.cols == means.cols); - - int dim = sample.cols; - - Mat L(1, nclusters, CV_64FC1); - int label = 0; - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - const Mat centeredSample = sample - means.row(clusterIndex); - - Mat rotatedCenteredSample = covMatType != EM::COV_MAT_GENERIC ? - centeredSample : centeredSample * covsRotateMats[clusterIndex]; - - double Lval = 0; - for(int di = 0; di < dim; di++) - { - double w = invCovsEigenValues[clusterIndex].at(covMatType != EM::COV_MAT_SPHERICAL ? di : 0); - double val = rotatedCenteredSample.at(di); - Lval += w * val * val; - } - CV_DbgAssert(!logWeightDivDet.empty()); - L.at(clusterIndex) = logWeightDivDet.at(clusterIndex) - 0.5 * Lval; - - if(L.at(clusterIndex) > L.at(label)) - label = clusterIndex; - } - - double maxLVal = L.at(label); - Mat expL_Lmax = L; // exp(L_ij - L_iq) - for(int i = 0; i < L.cols; i++) - expL_Lmax.at(i) = std::exp(L.at(i) - maxLVal); - double expDiffSum = sum(expL_Lmax)[0]; // sum_j(exp(L_ij - L_iq)) - - if(probs) - { - probs->create(1, nclusters, CV_64FC1); - double factor = 1./expDiffSum; - expL_Lmax *= factor; - expL_Lmax.copyTo(*probs); - } - - Vec2d res; - res[0] = std::log(expDiffSum) + maxLVal - 0.5 * dim * CV_LOG2PI; - res[1] = label; - - return res; -} - -void EM::eStep() -{ - // Compute probs_ik from means_k, covs_k and weights_k. - trainProbs.create(trainSamples.rows, nclusters, CV_64FC1); - trainLabels.create(trainSamples.rows, 1, CV_32SC1); - trainLogLikelihoods.create(trainSamples.rows, 1, CV_64FC1); - - computeLogWeightDivDet(); - - CV_DbgAssert(trainSamples.type() == CV_64FC1); - CV_DbgAssert(means.type() == CV_64FC1); - - for(int sampleIndex = 0; sampleIndex < trainSamples.rows; sampleIndex++) - { - Mat sampleProbs = trainProbs.row(sampleIndex); - Vec2d res = computeProbabilities(trainSamples.row(sampleIndex), &sampleProbs); - trainLogLikelihoods.at(sampleIndex) = res[0]; - trainLabels.at(sampleIndex) = static_cast(res[1]); - } -} - -void EM::mStep() -{ - // Update means_k, covs_k and weights_k from probs_ik - int dim = trainSamples.cols; - - // Update weights - // not normalized first - reduce(trainProbs, weights, 0, CV_REDUCE_SUM); - - // Update means - means.create(nclusters, dim, CV_64FC1); - means = Scalar(0); - - const double minPosWeight = trainSamples.rows * DBL_EPSILON; - double minWeight = DBL_MAX; - int minWeightClusterIndex = -1; - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - if(weights.at(clusterIndex) <= minPosWeight) - continue; - - if(weights.at(clusterIndex) < minWeight) - { - minWeight = weights.at(clusterIndex); - minWeightClusterIndex = clusterIndex; - } - - Mat clusterMean = means.row(clusterIndex); - for(int sampleIndex = 0; sampleIndex < trainSamples.rows; sampleIndex++) - clusterMean += trainProbs.at(sampleIndex, clusterIndex) * trainSamples.row(sampleIndex); - clusterMean /= weights.at(clusterIndex); - } - - // Update covsEigenValues and invCovsEigenValues - covs.resize(nclusters); - covsEigenValues.resize(nclusters); - if(covMatType == EM::COV_MAT_GENERIC) - covsRotateMats.resize(nclusters); - invCovsEigenValues.resize(nclusters); - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - if(weights.at(clusterIndex) <= minPosWeight) - continue; - - if(covMatType != EM::COV_MAT_SPHERICAL) - covsEigenValues[clusterIndex].create(1, dim, CV_64FC1); - else - covsEigenValues[clusterIndex].create(1, 1, CV_64FC1); - - if(covMatType == EM::COV_MAT_GENERIC) - covs[clusterIndex].create(dim, dim, CV_64FC1); - - Mat clusterCov = covMatType != EM::COV_MAT_GENERIC ? - covsEigenValues[clusterIndex] : covs[clusterIndex]; - - clusterCov = Scalar(0); - - Mat centeredSample; - for(int sampleIndex = 0; sampleIndex < trainSamples.rows; sampleIndex++) - { - centeredSample = trainSamples.row(sampleIndex) - means.row(clusterIndex); - - if(covMatType == EM::COV_MAT_GENERIC) - clusterCov += trainProbs.at(sampleIndex, clusterIndex) * centeredSample.t() * centeredSample; - else - { - double p = trainProbs.at(sampleIndex, clusterIndex); - for(int di = 0; di < dim; di++ ) - { - double val = centeredSample.at(di); - clusterCov.at(covMatType != EM::COV_MAT_SPHERICAL ? di : 0) += p*val*val; - } - } - } - - if(covMatType == EM::COV_MAT_SPHERICAL) - clusterCov /= dim; - - clusterCov /= weights.at(clusterIndex); - - // Update covsRotateMats for EM::COV_MAT_GENERIC only - if(covMatType == EM::COV_MAT_GENERIC) - { - SVD svd(covs[clusterIndex], SVD::MODIFY_A + SVD::FULL_UV); - covsEigenValues[clusterIndex] = svd.w; - covsRotateMats[clusterIndex] = svd.u; - } - - max(covsEigenValues[clusterIndex], minEigenValue, covsEigenValues[clusterIndex]); - - // update invCovsEigenValues - invCovsEigenValues[clusterIndex] = 1./covsEigenValues[clusterIndex]; - } - - for(int clusterIndex = 0; clusterIndex < nclusters; clusterIndex++) - { - if(weights.at(clusterIndex) <= minPosWeight) - { - Mat clusterMean = means.row(clusterIndex); - means.row(minWeightClusterIndex).copyTo(clusterMean); - covs[minWeightClusterIndex].copyTo(covs[clusterIndex]); - covsEigenValues[minWeightClusterIndex].copyTo(covsEigenValues[clusterIndex]); - if(covMatType == EM::COV_MAT_GENERIC) - covsRotateMats[minWeightClusterIndex].copyTo(covsRotateMats[clusterIndex]); - invCovsEigenValues[minWeightClusterIndex].copyTo(invCovsEigenValues[clusterIndex]); - } - } - - // Normalize weights - weights /= trainSamples.rows; -} - -void EM::read(const FileNode& fn) -{ - Algorithm::read(fn); - - decomposeCovs(); - computeLogWeightDivDet(); -} - -} // namespace cv - -/* End of file. */ diff --git a/modules/ml/src/ertrees.cpp b/modules/ml/src/ertrees.cpp deleted file mode 100644 index d911834..0000000 --- a/modules/ml/src/ertrees.cpp +++ /dev/null @@ -1,1849 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// - - IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. - - By downloading, copying, installing or using the software you agree to this license. - If you do not agree to this license, do not download, install, - copy or use the software. - - - Intel License Agreement - - Copyright (C) 2000, Intel Corporation, all rights reserved. - Third party copyrights are property of their respective owners. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - * Redistribution's of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistribution's in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, - indirect, incidental, special, exemplary, or consequential damages - (including, but not limited to, procurement of substitute goods or services; - loss of use, data, or profits; or business interruption) however caused - and on any theory of liability, whether in contract, strict liability, - or tort (including negligence or otherwise) arising in any way out of - the use of this software, even if advised of the possibility of such damage. - -M*/ - -#include "precomp.hpp" - -static const float ord_nan = FLT_MAX*0.5f; -static const int min_block_size = 1 << 16; -static const int block_size_delta = 1 << 10; - -#define CV_CMP_NUM_PTR(a,b) (*(a) < *(b)) -static CV_IMPLEMENT_QSORT_EX( icvSortIntPtr, int*, CV_CMP_NUM_PTR, int ) - -#define CV_CMP_PAIRS(a,b) (*((a).i) < *((b).i)) -static CV_IMPLEMENT_QSORT_EX( icvSortPairs, CvPair16u32s, CV_CMP_PAIRS, int ) - -/// - -void CvERTreeTrainData::set_data( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, const CvMat* _sample_idx, - const CvMat* _var_type, const CvMat* _missing_mask, const CvDTreeParams& _params, - bool _shared, bool _add_labels, bool _update_data ) -{ - CvMat* sample_indices = 0; - CvMat* var_type0 = 0; - CvMat* tmp_map = 0; - int** int_ptr = 0; - CvPair16u32s* pair16u32s_ptr = 0; - CvDTreeTrainData* data = 0; - float *_fdst = 0; - int *_idst = 0; - unsigned short* udst = 0; - int* idst = 0; - - CV_FUNCNAME( "CvERTreeTrainData::set_data" ); - - __BEGIN__; - - int sample_all = 0, r_type, cv_n; - int total_c_count = 0; - int tree_block_size, temp_block_size, max_split_size, nv_size, cv_size = 0; - int ds_step, dv_step, ms_step = 0, mv_step = 0; // {data|mask}{sample|var}_step - int vi, i, size; - char err[100]; - const int *sidx = 0, *vidx = 0; - - uint64 effective_buf_size = 0; - int effective_buf_height = 0, effective_buf_width = 0; - - if ( _params.use_surrogates ) - CV_ERROR(CV_StsBadArg, "CvERTrees do not support surrogate splits"); - - if( _update_data && data_root ) - { - CV_ERROR(CV_StsBadArg, "CvERTrees do not support data update"); - } - - clear(); - - var_all = 0; - rng = &cv::theRNG(); - - CV_CALL( set_params( _params )); - - // check parameter types and sizes - CV_CALL( cvCheckTrainData( _train_data, _tflag, _missing_mask, &var_all, &sample_all )); - - train_data = _train_data; - responses = _responses; - missing_mask = _missing_mask; - - if( _tflag == CV_ROW_SAMPLE ) - { - ds_step = _train_data->step/CV_ELEM_SIZE(_train_data->type); - dv_step = 1; - if( _missing_mask ) - ms_step = _missing_mask->step, mv_step = 1; - } - else - { - dv_step = _train_data->step/CV_ELEM_SIZE(_train_data->type); - ds_step = 1; - if( _missing_mask ) - mv_step = _missing_mask->step, ms_step = 1; - } - tflag = _tflag; - - sample_count = sample_all; - var_count = var_all; - - if( _sample_idx ) - { - CV_CALL( sample_indices = cvPreprocessIndexArray( _sample_idx, sample_all )); - sidx = sample_indices->data.i; - sample_count = sample_indices->rows + sample_indices->cols - 1; - } - - if( _var_idx ) - { - CV_CALL( var_idx = cvPreprocessIndexArray( _var_idx, var_all )); - vidx = var_idx->data.i; - var_count = var_idx->rows + var_idx->cols - 1; - } - - if( !CV_IS_MAT(_responses) || - (CV_MAT_TYPE(_responses->type) != CV_32SC1 && - CV_MAT_TYPE(_responses->type) != CV_32FC1) || - (_responses->rows != 1 && _responses->cols != 1) || - _responses->rows + _responses->cols - 1 != sample_all ) - CV_ERROR( CV_StsBadArg, "The array of _responses must be an integer or " - "floating-point vector containing as many elements as " - "the total number of samples in the training data matrix" ); - - is_buf_16u = false; - if ( sample_count < 65536 ) - is_buf_16u = true; - - r_type = CV_VAR_CATEGORICAL; - if( _var_type ) - CV_CALL( var_type0 = cvPreprocessVarType( _var_type, var_idx, var_count, &r_type )); - - CV_CALL( var_type = cvCreateMat( 1, var_count+2, CV_32SC1 )); - - cat_var_count = 0; - ord_var_count = -1; - - is_classifier = r_type == CV_VAR_CATEGORICAL; - - // step 0. calc the number of categorical vars - for( vi = 0; vi < var_count; vi++ ) - { - char vt = var_type0 ? var_type0->data.ptr[vi] : CV_VAR_ORDERED; - var_type->data.i[vi] = vt == CV_VAR_CATEGORICAL ? cat_var_count++ : ord_var_count--; - } - - ord_var_count = ~ord_var_count; - cv_n = params.cv_folds; - // set the two last elements of var_type array to be able - // to locate responses and cross-validation labels using - // the corresponding get_* functions. - var_type->data.i[var_count] = cat_var_count; - var_type->data.i[var_count+1] = cat_var_count+1; - - // in case of single ordered predictor we need dummy cv_labels - // for safe split_node_data() operation - have_labels = cv_n > 0 || (ord_var_count == 1 && cat_var_count == 0) || _add_labels; - - work_var_count = cat_var_count + (is_classifier ? 1 : 0) + (have_labels ? 1 : 0); - - shared = _shared; - buf_count = shared ? 2 : 1; - - buf_size = -1; // the member buf_size is obsolete - - effective_buf_size = (uint64)(work_var_count + 1)*(uint64)sample_count * buf_count; // this is the total size of "CvMat buf" to be allocated - effective_buf_width = sample_count; - effective_buf_height = work_var_count+1; - - if (effective_buf_width >= effective_buf_height) - effective_buf_height *= buf_count; - else - effective_buf_width *= buf_count; - - if ((uint64)effective_buf_width * (uint64)effective_buf_height != effective_buf_size) - { - CV_Error(CV_StsBadArg, "The memory buffer cannot be allocated since its size exceeds integer fields limit"); - } - - if ( is_buf_16u ) - { - CV_CALL( buf = cvCreateMat( effective_buf_height, effective_buf_width, CV_16UC1 )); - CV_CALL( pair16u32s_ptr = (CvPair16u32s*)cvAlloc( sample_count*sizeof(pair16u32s_ptr[0]) )); - } - else - { - CV_CALL( buf = cvCreateMat( effective_buf_height, effective_buf_width, CV_32SC1 )); - CV_CALL( int_ptr = (int**)cvAlloc( sample_count*sizeof(int_ptr[0]) )); - } - - size = is_classifier ? cat_var_count+1 : cat_var_count; - size = !size ? 1 : size; - CV_CALL( cat_count = cvCreateMat( 1, size, CV_32SC1 )); - CV_CALL( cat_ofs = cvCreateMat( 1, size, CV_32SC1 )); - - size = is_classifier ? (cat_var_count + 1)*params.max_categories : cat_var_count*params.max_categories; - size = !size ? 1 : size; - CV_CALL( cat_map = cvCreateMat( 1, size, CV_32SC1 )); - - // now calculate the maximum size of split, - // create memory storage that will keep nodes and splits of the decision tree - // allocate root node and the buffer for the whole training data - max_split_size = cvAlign(sizeof(CvDTreeSplit) + - (MAX(0,sample_count - 33)/32)*sizeof(int),sizeof(void*)); - tree_block_size = MAX((int)sizeof(CvDTreeNode)*8, max_split_size); - tree_block_size = MAX(tree_block_size + block_size_delta, min_block_size); - CV_CALL( tree_storage = cvCreateMemStorage( tree_block_size )); - CV_CALL( node_heap = cvCreateSet( 0, sizeof(*node_heap), sizeof(CvDTreeNode), tree_storage )); - - nv_size = var_count*sizeof(int); - nv_size = cvAlign(MAX( nv_size, (int)sizeof(CvSetElem) ), sizeof(void*)); - - temp_block_size = nv_size; - - if( cv_n ) - { - if( sample_count < cv_n*MAX(params.min_sample_count,10) ) - CV_ERROR( CV_StsOutOfRange, - "The many folds in cross-validation for such a small dataset" ); - - cv_size = cvAlign( cv_n*(sizeof(int) + sizeof(double)*2), sizeof(double) ); - temp_block_size = MAX(temp_block_size, cv_size); - } - - temp_block_size = MAX( temp_block_size + block_size_delta, min_block_size ); - CV_CALL( temp_storage = cvCreateMemStorage( temp_block_size )); - CV_CALL( nv_heap = cvCreateSet( 0, sizeof(*nv_heap), nv_size, temp_storage )); - if( cv_size ) - CV_CALL( cv_heap = cvCreateSet( 0, sizeof(*cv_heap), cv_size, temp_storage )); - - CV_CALL( data_root = new_node( 0, sample_count, 0, 0 )); - - max_c_count = 1; - - _fdst = 0; - _idst = 0; - if (ord_var_count) - _fdst = (float*)cvAlloc(sample_count*sizeof(_fdst[0])); - if (is_buf_16u && (cat_var_count || is_classifier)) - _idst = (int*)cvAlloc(sample_count*sizeof(_idst[0])); - - // transform the training data to convenient representation - for( vi = 0; vi <= var_count; vi++ ) - { - int ci; - const uchar* mask = 0; - int m_step = 0, step; - const int* idata = 0; - const float* fdata = 0; - int num_valid = 0; - - if( vi < var_count ) // analyze i-th input variable - { - int vi0 = vidx ? vidx[vi] : vi; - ci = get_var_type(vi); - step = ds_step; m_step = ms_step; - if( CV_MAT_TYPE(_train_data->type) == CV_32SC1 ) - idata = _train_data->data.i + vi0*dv_step; - else - fdata = _train_data->data.fl + vi0*dv_step; - if( _missing_mask ) - mask = _missing_mask->data.ptr + vi0*mv_step; - } - else // analyze _responses - { - ci = cat_var_count; - step = CV_IS_MAT_CONT(_responses->type) ? - 1 : _responses->step / CV_ELEM_SIZE(_responses->type); - if( CV_MAT_TYPE(_responses->type) == CV_32SC1 ) - idata = _responses->data.i; - else - fdata = _responses->data.fl; - } - - if( (vi < var_count && ci>=0) || - (vi == var_count && is_classifier) ) // process categorical variable or response - { - int c_count, prev_label; - int* c_map; - - if (is_buf_16u) - udst = (unsigned short*)(buf->data.s + ci*sample_count); - else - idst = buf->data.i + ci*sample_count; - - // copy data - for( i = 0; i < sample_count; i++ ) - { - int val = INT_MAX, si = sidx ? sidx[i] : i; - if( !mask || !mask[(size_t)si*m_step] ) - { - if( idata ) - val = idata[(size_t)si*step]; - else - { - float t = fdata[(size_t)si*step]; - val = cvRound(t); - if( val != t ) - { - sprintf( err, "%d-th value of %d-th (categorical) " - "variable is not an integer", i, vi ); - CV_ERROR( CV_StsBadArg, err ); - } - } - - if( val == INT_MAX ) - { - sprintf( err, "%d-th value of %d-th (categorical) " - "variable is too large", i, vi ); - CV_ERROR( CV_StsBadArg, err ); - } - num_valid++; - } - if (is_buf_16u) - { - _idst[i] = val; - pair16u32s_ptr[i].u = udst + i; - pair16u32s_ptr[i].i = _idst + i; - } - else - { - idst[i] = val; - int_ptr[i] = idst + i; - } - } - - c_count = num_valid > 0; - - if (is_buf_16u) - { - icvSortPairs( pair16u32s_ptr, sample_count, 0 ); - // count the categories - for( i = 1; i < num_valid; i++ ) - if (*pair16u32s_ptr[i].i != *pair16u32s_ptr[i-1].i) - c_count ++ ; - } - else - { - icvSortIntPtr( int_ptr, sample_count, 0 ); - // count the categories - for( i = 1; i < num_valid; i++ ) - c_count += *int_ptr[i] != *int_ptr[i-1]; - } - - if( vi > 0 ) - max_c_count = MAX( max_c_count, c_count ); - cat_count->data.i[ci] = c_count; - cat_ofs->data.i[ci] = total_c_count; - - // resize cat_map, if need - if( cat_map->cols < total_c_count + c_count ) - { - tmp_map = cat_map; - CV_CALL( cat_map = cvCreateMat( 1, - MAX(cat_map->cols*3/2,total_c_count+c_count), CV_32SC1 )); - for( i = 0; i < total_c_count; i++ ) - cat_map->data.i[i] = tmp_map->data.i[i]; - cvReleaseMat( &tmp_map ); - } - - c_map = cat_map->data.i + total_c_count; - total_c_count += c_count; - - c_count = -1; - if (is_buf_16u) - { - // compact the class indices and build the map - prev_label = ~*pair16u32s_ptr[0].i; - for( i = 0; i < num_valid; i++ ) - { - int cur_label = *pair16u32s_ptr[i].i; - if( cur_label != prev_label ) - c_map[++c_count] = prev_label = cur_label; - *pair16u32s_ptr[i].u = (unsigned short)c_count; - } - // replace labels for missing values with 65535 - for( ; i < sample_count; i++ ) - *pair16u32s_ptr[i].u = 65535; - } - else - { - // compact the class indices and build the map - prev_label = ~*int_ptr[0]; - for( i = 0; i < num_valid; i++ ) - { - int cur_label = *int_ptr[i]; - if( cur_label != prev_label ) - c_map[++c_count] = prev_label = cur_label; - *int_ptr[i] = c_count; - } - // replace labels for missing values with -1 - for( ; i < sample_count; i++ ) - *int_ptr[i] = -1; - } - } - else if( ci < 0 ) // process ordered variable - { - for( i = 0; i < sample_count; i++ ) - { - float val = ord_nan; - int si = sidx ? sidx[i] : i; - if( !mask || !mask[(size_t)si*m_step] ) - { - if( idata ) - val = (float)idata[(size_t)si*step]; - else - val = fdata[(size_t)si*step]; - - if( fabs(val) >= ord_nan ) - { - sprintf( err, "%d-th value of %d-th (ordered) " - "variable (=%g) is too large", i, vi, val ); - CV_ERROR( CV_StsBadArg, err ); - } - num_valid++; - } - } - } - if( vi < var_count ) - data_root->set_num_valid(vi, num_valid); - } - - // set sample labels - if (is_buf_16u) - udst = (unsigned short*)(buf->data.s + get_work_var_count()*sample_count); - else - idst = buf->data.i + get_work_var_count()*sample_count; - - for (i = 0; i < sample_count; i++) - { - if (udst) - udst[i] = sidx ? (unsigned short)sidx[i] : (unsigned short)i; - else - idst[i] = sidx ? sidx[i] : i; - } - - if( cv_n ) - { - unsigned short* usdst = 0; - int* idst2 = 0; - - if (is_buf_16u) - { - usdst = (unsigned short*)(buf->data.s + (get_work_var_count()-1)*sample_count); - for( i = vi = 0; i < sample_count; i++ ) - { - usdst[i] = (unsigned short)vi++; - vi &= vi < cv_n ? -1 : 0; - } - - for( i = 0; i < sample_count; i++ ) - { - int a = (*rng)(sample_count); - int b = (*rng)(sample_count); - unsigned short unsh = (unsigned short)vi; - CV_SWAP( usdst[a], usdst[b], unsh ); - } - } - else - { - idst2 = buf->data.i + (get_work_var_count()-1)*sample_count; - for( i = vi = 0; i < sample_count; i++ ) - { - idst2[i] = vi++; - vi &= vi < cv_n ? -1 : 0; - } - - for( i = 0; i < sample_count; i++ ) - { - int a = (*rng)(sample_count); - int b = (*rng)(sample_count); - CV_SWAP( idst2[a], idst2[b], vi ); - } - } - } - - if ( cat_map ) - cat_map->cols = MAX( total_c_count, 1 ); - - max_split_size = cvAlign(sizeof(CvDTreeSplit) + - (MAX(0,max_c_count - 33)/32)*sizeof(int),sizeof(void*)); - CV_CALL( split_heap = cvCreateSet( 0, sizeof(*split_heap), max_split_size, tree_storage )); - - have_priors = is_classifier && params.priors; - if( is_classifier ) - { - int m = get_num_classes(); - double sum = 0; - CV_CALL( priors = cvCreateMat( 1, m, CV_64F )); - for( i = 0; i < m; i++ ) - { - double val = have_priors ? params.priors[i] : 1.; - if( val <= 0 ) - CV_ERROR( CV_StsOutOfRange, "Every class weight should be positive" ); - priors->data.db[i] = val; - sum += val; - } - - // normalize weights - if( have_priors ) - cvScale( priors, priors, 1./sum ); - - CV_CALL( priors_mult = cvCloneMat( priors )); - CV_CALL( counts = cvCreateMat( 1, m, CV_32SC1 )); - } - - CV_CALL( direction = cvCreateMat( 1, sample_count, CV_8UC1 )); - CV_CALL( split_buf = cvCreateMat( 1, sample_count, CV_32SC1 )); - - __END__; - - if( data ) - delete data; - - if (_fdst) - cvFree( &_fdst ); - if (_idst) - cvFree( &_idst ); - cvFree( &int_ptr ); - cvReleaseMat( &var_type0 ); - cvReleaseMat( &sample_indices ); - cvReleaseMat( &tmp_map ); -} - -void CvERTreeTrainData::get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* missing_buf, - const float** ord_values, const int** missing, int* sample_indices_buf ) -{ - int vidx = var_idx ? var_idx->data.i[vi] : vi; - int node_sample_count = n->sample_count; - // may use missing_buf as buffer for sample indices! - const int* sample_indices = get_sample_indices(n, sample_indices_buf ? sample_indices_buf : missing_buf); - - int td_step = train_data->step/CV_ELEM_SIZE(train_data->type); - int m_step = missing_mask ? missing_mask->step/CV_ELEM_SIZE(missing_mask->type) : 1; - if( tflag == CV_ROW_SAMPLE ) - { - for( int i = 0; i < node_sample_count; i++ ) - { - int idx = sample_indices[i]; - missing_buf[i] = missing_mask ? *(missing_mask->data.ptr + idx * m_step + vi) : 0; - ord_values_buf[i] = *(train_data->data.fl + idx * td_step + vidx); - } - } - else - for( int i = 0; i < node_sample_count; i++ ) - { - int idx = sample_indices[i]; - missing_buf[i] = missing_mask ? *(missing_mask->data.ptr + vi* m_step + idx) : 0; - ord_values_buf[i] = *(train_data->data.fl + vidx* td_step + idx); - } - *ord_values = ord_values_buf; - *missing = missing_buf; -} - - -const int* CvERTreeTrainData::get_sample_indices( CvDTreeNode* n, int* indices_buf ) -{ - return get_cat_var_data( n, var_count + (is_classifier ? 1 : 0) + (have_labels ? 1 : 0), indices_buf ); -} - - -const int* CvERTreeTrainData::get_cv_labels( CvDTreeNode* n, int* labels_buf ) -{ - if (have_labels) - return get_cat_var_data( n, var_count + (is_classifier ? 1 : 0), labels_buf ); - return 0; -} - - -const int* CvERTreeTrainData::get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf ) -{ - int ci = get_var_type( vi); - const int* cat_values = 0; - if( !is_buf_16u ) - cat_values = buf->data.i + n->buf_idx*get_length_subbuf() + ci*sample_count + n->offset; - else { - const unsigned short* short_values = (const unsigned short*)(buf->data.s + n->buf_idx*get_length_subbuf() + - ci*sample_count + n->offset); - for( int i = 0; i < n->sample_count; i++ ) - cat_values_buf[i] = short_values[i]; - cat_values = cat_values_buf; - } - return cat_values; -} - -void CvERTreeTrainData::get_vectors( const CvMat* _subsample_idx, - float* values, uchar* missing, - float* _responses, bool get_class_idx ) -{ - CvMat* subsample_idx = 0; - CvMat* subsample_co = 0; - - cv::AutoBuffer inn_buf(sample_count*(sizeof(float) + sizeof(int))); - - CV_FUNCNAME( "CvERTreeTrainData::get_vectors" ); - - __BEGIN__; - - int i, vi, total = sample_count, count = total, cur_ofs = 0; - int* sidx = 0; - int* co = 0; - - if( _subsample_idx ) - { - CV_CALL( subsample_idx = cvPreprocessIndexArray( _subsample_idx, sample_count )); - sidx = subsample_idx->data.i; - CV_CALL( subsample_co = cvCreateMat( 1, sample_count*2, CV_32SC1 )); - co = subsample_co->data.i; - cvZero( subsample_co ); - count = subsample_idx->cols + subsample_idx->rows - 1; - for( i = 0; i < count; i++ ) - co[sidx[i]*2]++; - for( i = 0; i < total; i++ ) - { - int count_i = co[i*2]; - if( count_i ) - { - co[i*2+1] = cur_ofs*var_count; - cur_ofs += count_i; - } - } - } - - if( missing ) - memset( missing, 1, count*var_count ); - - for( vi = 0; vi < var_count; vi++ ) - { - int ci = get_var_type(vi); - if( ci >= 0 ) // categorical - { - float* dst = values + vi; - uchar* m = missing ? missing + vi : 0; - int* lbls_buf = (int*)(uchar*)inn_buf; - const int* src = get_cat_var_data(data_root, vi, lbls_buf); - - for( i = 0; i < count; i++, dst += var_count ) - { - int idx = sidx ? sidx[i] : i; - int val = src[idx]; - *dst = (float)val; - if( m ) - { - *m = (!is_buf_16u && val < 0) || (is_buf_16u && (val == 65535)); - m += var_count; - } - } - } - else // ordered - { - int* mis_buf = (int*)(uchar*)inn_buf; - const float *dst = 0; - const int* mis = 0; - get_ord_var_data(data_root, vi, values + vi, mis_buf, &dst, &mis, 0); - for (int si = 0; si < total; si++) - *(missing + vi + si) = mis[si] == 0 ? 0 : 1; - } - } - - // copy responses - if( _responses ) - { - if( is_classifier ) - { - int* lbls_buf = (int*)(uchar*)inn_buf; - const int* src = get_class_labels(data_root, lbls_buf); - for( i = 0; i < count; i++ ) - { - int idx = sidx ? sidx[i] : i; - int val = get_class_idx ? src[idx] : - cat_map->data.i[cat_ofs->data.i[cat_var_count]+src[idx]]; - _responses[i] = (float)val; - } - } - else - { - float* _values_buf = (float*)(uchar*)inn_buf; - int* sample_idx_buf = (int*)(_values_buf + sample_count); - const float* _values = get_ord_responses(data_root, _values_buf, sample_idx_buf); - for( i = 0; i < count; i++ ) - { - int idx = sidx ? sidx[i] : i; - _responses[i] = _values[idx]; - } - } - } - - __END__; - - cvReleaseMat( &subsample_idx ); - cvReleaseMat( &subsample_co ); -} - -CvDTreeNode* CvERTreeTrainData::subsample_data( const CvMat* _subsample_idx ) -{ - CvDTreeNode* root = 0; - - CV_FUNCNAME( "CvERTreeTrainData::subsample_data" ); - - __BEGIN__; - - if( !data_root ) - CV_ERROR( CV_StsError, "No training data has been set" ); - - if( !_subsample_idx ) - { - // make a copy of the root node - CvDTreeNode temp; - int i; - root = new_node( 0, 1, 0, 0 ); - temp = *root; - *root = *data_root; - root->num_valid = temp.num_valid; - if( root->num_valid ) - { - for( i = 0; i < var_count; i++ ) - root->num_valid[i] = data_root->num_valid[i]; - } - root->cv_Tn = temp.cv_Tn; - root->cv_node_risk = temp.cv_node_risk; - root->cv_node_error = temp.cv_node_error; - } - else - CV_ERROR( CV_StsError, "_subsample_idx must be null for extra-trees" ); - __END__; - - return root; -} - -double CvForestERTree::calc_node_dir( CvDTreeNode* node ) -{ - char* dir = (char*)data->direction->data.ptr; - int i, n = node->sample_count, vi = node->split->var_idx; - double L, R; - - assert( !node->split->inversed ); - - if( data->get_var_type(vi) >= 0 ) // split on categorical var - { - cv::AutoBuffer inn_buf(n*sizeof(int)*(!data->have_priors ? 1 : 2)); - int* labels_buf = (int*)(uchar*)inn_buf; - const int* labels = data->get_cat_var_data( node, vi, labels_buf ); - const int* subset = node->split->subset; - if( !data->have_priors ) - { - int sum = 0, sum_abs = 0; - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - int d = ( ((idx >= 0)&&(!data->is_buf_16u)) || ((idx != 65535)&&(data->is_buf_16u)) ) ? - CV_DTREE_CAT_DIR(idx,subset) : 0; - sum += d; sum_abs += d & 1; - dir[i] = (char)d; - } - - R = (sum_abs + sum) >> 1; - L = (sum_abs - sum) >> 1; - } - else - { - const double* priors = data->priors_mult->data.db; - double sum = 0, sum_abs = 0; - int *responses_buf = labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - double w = priors[responses[i]]; - int d = idx >= 0 ? CV_DTREE_CAT_DIR(idx,subset) : 0; - sum += d*w; sum_abs += (d & 1)*w; - dir[i] = (char)d; - } - - R = (sum_abs + sum) * 0.5; - L = (sum_abs - sum) * 0.5; - } - } - else // split on ordered var - { - float split_val = node->split->ord.c; - cv::AutoBuffer inn_buf(n*(sizeof(int)*(!data->have_priors ? 1 : 2) + sizeof(float))); - float* val_buf = (float*)(uchar*)inn_buf; - int* missing_buf = (int*)(val_buf + n); - const float* val = 0; - const int* missing = 0; - data->get_ord_var_data( node, vi, val_buf, missing_buf, &val, &missing, 0 ); - - if( !data->have_priors ) - { - L = R = 0; - for( i = 0; i < n; i++ ) - { - if ( missing[i] ) - dir[i] = (char)0; - else - { - if ( val[i] < split_val) - { - dir[i] = (char)-1; - L++; - } - else - { - dir[i] = (char)1; - R++; - } - } - } - } - else - { - const double* priors = data->priors_mult->data.db; - int* responses_buf = missing_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - L = R = 0; - for( i = 0; i < n; i++ ) - { - if ( missing[i] ) - dir[i] = (char)0; - else - { - double w = priors[responses[i]]; - if ( val[i] < split_val) - { - dir[i] = (char)-1; - L += w; - } - else - { - dir[i] = (char)1; - R += w; - } - } - } - } - } - - node->maxlr = MAX( L, R ); - return node->split->quality/(L + R); -} - -CvDTreeSplit* CvForestERTree::find_split_ord_class( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, - uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - const float split_delta = (1 + FLT_EPSILON) * FLT_EPSILON; - - int n = node->sample_count; - int m = data->get_num_classes(); - - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(n*(2*sizeof(int) + sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* missing_buf = (int*)(values_buf + n); - const float* values = 0; - const int* missing = 0; - data->get_ord_var_data( node, vi, values_buf, missing_buf, &values, &missing, 0 ); - int* responses_buf = missing_buf + n; - const int* responses = data->get_class_labels( node, responses_buf ); - - double lbest_val = 0, rbest_val = 0, best_val = init_quality, split_val = 0; - const double* priors = data->have_priors ? data->priors_mult->data.db : 0; - bool is_find_split = false; - float pmin, pmax; - int smpi = 0; - while ( missing[smpi] && (smpi < n) ) - smpi++; - assert(smpi < n); - - pmin = values[smpi]; - pmax = pmin; - for (; smpi < n; smpi++) - { - float ptemp = values[smpi]; - int ms = missing[smpi]; - if (ms) continue; - if ( ptemp < pmin) - pmin = ptemp; - if ( ptemp > pmax) - pmax = ptemp; - } - float fdiff = pmax-pmin; - if (fdiff > epsilon) - { - is_find_split = true; - cv::RNG* rng = data->rng; - split_val = pmin + rng->uniform(0.f, 1.f) * fdiff ; - if (split_val - pmin <= FLT_EPSILON) - split_val = pmin + split_delta; - if (pmax - split_val <= FLT_EPSILON) - split_val = pmax - split_delta; - - // calculate Gini index - if ( !priors ) - { - cv::AutoBuffer lrc(m*2); - int *lc = lrc, *rc = lc + m; - int L = 0, R = 0; - - // init arrays of class instance counters on both sides of the split - for(int i = 0; i < m; i++ ) - { - lc[i] = 0; - rc[i] = 0; - } - for( int si = 0; si < n; si++ ) - { - int r = responses[si]; - float val = values[si]; - int ms = missing[si]; - if (ms) continue; - if ( val < split_val ) - { - lc[r]++; - L++; - } - else - { - rc[r]++; - R++; - } - } - for (int i = 0; i < m; i++) - { - lbest_val += lc[i]*lc[i]; - rbest_val += rc[i]*rc[i]; - } - best_val = (lbest_val*R + rbest_val*L) / ((double)(L*R)); - } - else - { - cv::AutoBuffer lrc(m*2); - double *lc = lrc, *rc = lc + m; - double L = 0, R = 0; - - // init arrays of class instance counters on both sides of the split - for(int i = 0; i < m; i++ ) - { - lc[i] = 0; - rc[i] = 0; - } - for( int si = 0; si < n; si++ ) - { - int r = responses[si]; - float val = values[si]; - int ms = missing[si]; - double p = priors[r]; - if (ms) continue; - if ( val < split_val ) - { - lc[r] += p; - L += p; - } - else - { - rc[r] += p; - R += p; - } - } - for (int i = 0; i < m; i++) - { - lbest_val += lc[i]*lc[i]; - rbest_val += rc[i]*rc[i]; - } - best_val = (lbest_val*R + rbest_val*L) / (L*R); - } - - } - - CvDTreeSplit* split = 0; - if( is_find_split ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (float)split_val; - split->ord.split_point = -1; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - -CvDTreeSplit* CvForestERTree::find_split_cat_class( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, - uchar* _ext_buf ) -{ - int ci = data->get_var_type(vi); - int n = node->sample_count; - int cm = data->get_num_classes(); - int vm = data->cat_count->data.i[ci]; - double best_val = init_quality; - CvDTreeSplit *split = 0; - - if ( vm > 1 ) - { - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(2*n); - int* ext_buf = _ext_buf ? (int*)_ext_buf : (int*)inn_buf; - - const int* labels = data->get_cat_var_data( node, vi, ext_buf ); - const int* responses = data->get_class_labels( node, ext_buf + n ); - - const double* priors = data->have_priors ? data->priors_mult->data.db : 0; - - // create random class mask - cv::AutoBuffer valid_cidx(vm); - for (int i = 0; i < vm; i++) - { - valid_cidx[i] = -1; - } - for (int si = 0; si < n; si++) - { - int c = labels[si]; - if ( ((c == 65535) && data->is_buf_16u) || ((c<0) && (!data->is_buf_16u)) ) - continue; - valid_cidx[c]++; - } - - int valid_ccount = 0; - for (int i = 0; i < vm; i++) - if (valid_cidx[i] >= 0) - { - valid_cidx[i] = valid_ccount; - valid_ccount++; - } - if (valid_ccount > 1) - { - CvRNG* rng = forest->get_rng(); - int l_cval_count = 1 + cvRandInt(rng) % (valid_ccount-1); - - CvMat* var_class_mask = cvCreateMat( 1, valid_ccount, CV_8UC1 ); - CvMat submask; - memset(var_class_mask->data.ptr, 0, valid_ccount*CV_ELEM_SIZE(var_class_mask->type)); - cvGetCols( var_class_mask, &submask, 0, l_cval_count ); - cvSet( &submask, cvScalar(1) ); - for (int i = 0; i < valid_ccount; i++) - { - uchar temp; - int i1 = cvRandInt( rng ) % valid_ccount; - int i2 = cvRandInt( rng ) % valid_ccount; - CV_SWAP( var_class_mask->data.ptr[i1], var_class_mask->data.ptr[i2], temp ); - } - - split = _split ? _split : data->new_split_cat( 0, -1.0f ); - split->var_idx = vi; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - - // calculate Gini index - double lbest_val = 0, rbest_val = 0; - if( !priors ) - { - cv::AutoBuffer lrc(cm*2); - int *lc = lrc, *rc = lc + cm; - int L = 0, R = 0; - // init arrays of class instance counters on both sides of the split - for(int i = 0; i < cm; i++ ) - { - lc[i] = 0; - rc[i] = 0; - } - for( int si = 0; si < n; si++ ) - { - int r = responses[si]; - int var_class_idx = labels[si]; - if ( ((var_class_idx == 65535) && data->is_buf_16u) || ((var_class_idx<0) && (!data->is_buf_16u)) ) - continue; - int mask_class_idx = valid_cidx[var_class_idx]; - if (var_class_mask->data.ptr[mask_class_idx]) - { - lc[r]++; - L++; - split->subset[var_class_idx >> 5] |= 1 << (var_class_idx & 31); - } - else - { - rc[r]++; - R++; - } - } - for (int i = 0; i < cm; i++) - { - lbest_val += lc[i]*lc[i]; - rbest_val += rc[i]*rc[i]; - } - best_val = (lbest_val*R + rbest_val*L) / ((double)(L*R)); - } - else - { - cv::AutoBuffer lrc(cm*2); - int *lc = lrc, *rc = lc + cm; - double L = 0, R = 0; - // init arrays of class instance counters on both sides of the split - for(int i = 0; i < cm; i++ ) - { - lc[i] = 0; - rc[i] = 0; - } - for( int si = 0; si < n; si++ ) - { - int r = responses[si]; - int var_class_idx = labels[si]; - if ( ((var_class_idx == 65535) && data->is_buf_16u) || ((var_class_idx<0) && (!data->is_buf_16u)) ) - continue; - double p = priors[si]; - int mask_class_idx = valid_cidx[var_class_idx]; - - if (var_class_mask->data.ptr[mask_class_idx]) - { - lc[r]+=(int)p; - L+=p; - split->subset[var_class_idx >> 5] |= 1 << (var_class_idx & 31); - } - else - { - rc[r]+=(int)p; - R+=p; - } - } - for (int i = 0; i < cm; i++) - { - lbest_val += lc[i]*lc[i]; - rbest_val += rc[i]*rc[i]; - } - best_val = (lbest_val*R + rbest_val*L) / (L*R); - } - split->quality = (float)best_val; - - cvReleaseMat(&var_class_mask); - } - } - - return split; -} - -CvDTreeSplit* CvForestERTree::find_split_ord_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, - uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - const float split_delta = (1 + FLT_EPSILON) * FLT_EPSILON; - int n = node->sample_count; - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(n*(2*sizeof(int) + 2*sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* missing_buf = (int*)(values_buf + n); - const float* values = 0; - const int* missing = 0; - data->get_ord_var_data( node, vi, values_buf, missing_buf, &values, &missing, 0 ); - float* responses_buf = (float*)(missing_buf + n); - int* sample_indices_buf = (int*)(responses_buf + n); - const float* responses = data->get_ord_responses( node, responses_buf, sample_indices_buf ); - - double best_val = init_quality, split_val = 0, lsum = 0, rsum = 0; - int L = 0, R = 0; - - bool is_find_split = false; - float pmin, pmax; - int smpi = 0; - while ( missing[smpi] && (smpi < n) ) - smpi++; - - assert(smpi < n); - - pmin = values[smpi]; - pmax = pmin; - for (; smpi < n; smpi++) - { - float ptemp = values[smpi]; - int m = missing[smpi]; - if (m) continue; - if ( ptemp < pmin) - pmin = ptemp; - if ( ptemp > pmax) - pmax = ptemp; - } - float fdiff = pmax-pmin; - if (fdiff > epsilon) - { - is_find_split = true; - cv::RNG* rng = data->rng; - split_val = pmin + rng->uniform(0.f, 1.f) * fdiff ; - if (split_val - pmin <= FLT_EPSILON) - split_val = pmin + split_delta; - if (pmax - split_val <= FLT_EPSILON) - split_val = pmax - split_delta; - - for (int si = 0; si < n; si++) - { - float r = responses[si]; - float val = values[si]; - int m = missing[si]; - if (m) continue; - if (val < split_val) - { - lsum += r; - L++; - } - else - { - rsum += r; - R++; - } - } - best_val = (lsum*lsum*R + rsum*rsum*L)/((double)L*R); - } - - CvDTreeSplit* split = 0; - if( is_find_split ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (float)split_val; - split->ord.split_point = -1; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - -CvDTreeSplit* CvForestERTree::find_split_cat_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, - uchar* _ext_buf ) -{ - int ci = data->get_var_type(vi); - int n = node->sample_count; - int vm = data->cat_count->data.i[ci]; - double best_val = init_quality; - CvDTreeSplit *split = 0; - float lsum = 0, rsum = 0; - - if ( vm > 1 ) - { - int base_size = vm*sizeof(int); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*(2*sizeof(int) + sizeof(float))); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - int* labels_buf = (int*)ext_buf; - const int* labels = data->get_cat_var_data( node, vi, labels_buf ); - float* responses_buf = (float*)(labels_buf + n); - int* sample_indices_buf = (int*)(responses_buf + n); - const float* responses = data->get_ord_responses( node, responses_buf, sample_indices_buf ); - - // create random class mask - int *valid_cidx = (int*)base_buf; - for (int i = 0; i < vm; i++) - { - valid_cidx[i] = -1; - } - for (int si = 0; si < n; si++) - { - int c = labels[si]; - if ( ((c == 65535) && data->is_buf_16u) || ((c<0) && (!data->is_buf_16u)) ) - continue; - valid_cidx[c]++; - } - - int valid_ccount = 0; - for (int i = 0; i < vm; i++) - if (valid_cidx[i] >= 0) - { - valid_cidx[i] = valid_ccount; - valid_ccount++; - } - if (valid_ccount > 1) - { - CvRNG* rng = forest->get_rng(); - int l_cval_count = 1 + cvRandInt(rng) % (valid_ccount-1); - - CvMat* var_class_mask = cvCreateMat( 1, valid_ccount, CV_8UC1 ); - CvMat submask; - memset(var_class_mask->data.ptr, 0, valid_ccount*CV_ELEM_SIZE(var_class_mask->type)); - cvGetCols( var_class_mask, &submask, 0, l_cval_count ); - cvSet( &submask, cvScalar(1) ); - for (int i = 0; i < valid_ccount; i++) - { - uchar temp; - int i1 = cvRandInt( rng ) % valid_ccount; - int i2 = cvRandInt( rng ) % valid_ccount; - CV_SWAP( var_class_mask->data.ptr[i1], var_class_mask->data.ptr[i2], temp ); - } - - split = _split ? _split : data->new_split_cat( 0, -1.0f); - split->var_idx = vi; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - - int L = 0, R = 0; - for( int si = 0; si < n; si++ ) - { - float r = responses[si]; - int var_class_idx = labels[si]; - if ( ((var_class_idx == 65535) && data->is_buf_16u) || ((var_class_idx<0) && (!data->is_buf_16u)) ) - continue; - int mask_class_idx = valid_cidx[var_class_idx]; - if (var_class_mask->data.ptr[mask_class_idx]) - { - lsum += r; - L++; - split->subset[var_class_idx >> 5] |= 1 << (var_class_idx & 31); - } - else - { - rsum += r; - R++; - } - } - best_val = (lsum*lsum*R + rsum*rsum*L)/((double)L*R); - - split->quality = (float)best_val; - - cvReleaseMat(&var_class_mask); - } - } - - return split; -} - -void CvForestERTree::split_node_data( CvDTreeNode* node ) -{ - int vi, i, n = node->sample_count, nl, nr, scount = data->sample_count; - char* dir = (char*)data->direction->data.ptr; - CvDTreeNode *left = 0, *right = 0; - int new_buf_idx = data->get_child_buf_idx( node ); - CvMat* buf = data->buf; - size_t length_buf_row = data->get_length_subbuf(); - cv::AutoBuffer temp_buf(n); - - complete_node_dir(node); - - for( i = nl = nr = 0; i < n; i++ ) - { - int d = dir[i]; - nr += d; - nl += d^1; - } - - bool split_input_data; - node->left = left = data->new_node( node, nl, new_buf_idx, node->offset ); - node->right = right = data->new_node( node, nr, new_buf_idx, node->offset + nl ); - - split_input_data = node->depth + 1 < data->params.max_depth && - (node->left->sample_count > data->params.min_sample_count || - node->right->sample_count > data->params.min_sample_count); - - cv::AutoBuffer inn_buf(n*(sizeof(int)+sizeof(float))); - // split ordered vars - for( vi = 0; vi < data->var_count; vi++ ) - { - int ci = data->get_var_type(vi); - if (ci >= 0) continue; - - int n1 = node->get_num_valid(vi), nr1 = 0; - float* values_buf = (float*)(uchar*)inn_buf; - int* missing_buf = (int*)(values_buf + n); - const float* values = 0; - const int* missing = 0; - data->get_ord_var_data( node, vi, values_buf, missing_buf, &values, &missing, 0 ); - - for( i = 0; i < n; i++ ) - nr1 += ((!missing[i]) & dir[i]); - left->set_num_valid(vi, n1 - nr1); - right->set_num_valid(vi, nr1); - } - // split categorical vars, responses and cv_labels using new_idx relocation table - for( vi = 0; vi < data->get_work_var_count() + data->ord_var_count; vi++ ) - { - int ci = data->get_var_type(vi); - if (ci < 0) continue; - - int n1 = node->get_num_valid(vi), nr1 = 0; - const int* src_lbls = data->get_cat_var_data(node, vi, (int*)(uchar*)inn_buf); - - for(i = 0; i < n; i++) - temp_buf[i] = src_lbls[i]; - - if (data->is_buf_16u) - { - unsigned short *ldst = (unsigned short *)(buf->data.s + left->buf_idx*length_buf_row + - ci*scount + left->offset); - unsigned short *rdst = (unsigned short *)(buf->data.s + right->buf_idx*length_buf_row + - ci*scount + right->offset); - - for( i = 0; i < n; i++ ) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = (unsigned short)idx; - rdst++; - nr1 += (idx != 65535); - } - else - { - *ldst = (unsigned short)idx; - ldst++; - } - } - - if( vi < data->var_count ) - { - left->set_num_valid(vi, n1 - nr1); - right->set_num_valid(vi, nr1); - } - } - else - { - int *ldst = buf->data.i + left->buf_idx*length_buf_row + - ci*scount + left->offset; - int *rdst = buf->data.i + right->buf_idx*length_buf_row + - ci*scount + right->offset; - - for( i = 0; i < n; i++ ) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - nr1 += (idx >= 0); - } - else - { - *ldst = idx; - ldst++; - } - - } - - if( vi < data->var_count ) - { - left->set_num_valid(vi, n1 - nr1); - right->set_num_valid(vi, nr1); - } - } - } - - // split sample indices - int *sample_idx_src_buf = (int*)(uchar*)inn_buf; - const int* sample_idx_src = 0; - if (split_input_data) - { - sample_idx_src = data->get_sample_indices(node, sample_idx_src_buf); - - for(i = 0; i < n; i++) - temp_buf[i] = sample_idx_src[i]; - - int pos = data->get_work_var_count(); - - if (data->is_buf_16u) - { - unsigned short* ldst = (unsigned short*)(buf->data.s + left->buf_idx*length_buf_row + - pos*scount + left->offset); - unsigned short* rdst = (unsigned short*)(buf->data.s + right->buf_idx*length_buf_row + - pos*scount + right->offset); - - for (i = 0; i < n; i++) - { - int d = dir[i]; - unsigned short idx = (unsigned short)temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - } - else - { - int* ldst = buf->data.i + left->buf_idx*length_buf_row + - pos*scount + left->offset; - int* rdst = buf->data.i + right->buf_idx*length_buf_row + - pos*scount + right->offset; - for (i = 0; i < n; i++) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - } - } - - // deallocate the parent node data that is not needed anymore - data->free_node_data(node); -} - -CvERTrees::CvERTrees() -{ -} - -CvERTrees::~CvERTrees() -{ -} - -std::string CvERTrees::getName() const -{ - return CV_TYPE_NAME_ML_ERTREES; -} - -bool CvERTrees::train( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, CvRTParams params ) -{ - bool result = false; - - CV_FUNCNAME("CvERTrees::train"); - __BEGIN__ - int var_count = 0; - - clear(); - - CvDTreeParams tree_params( params.max_depth, params.min_sample_count, - params.regression_accuracy, params.use_surrogates, params.max_categories, - params.cv_folds, params.use_1se_rule, false, params.priors ); - - data = new CvERTreeTrainData(); - CV_CALL(data->set_data( _train_data, _tflag, _responses, _var_idx, - _sample_idx, _var_type, _missing_mask, tree_params, true)); - - var_count = data->var_count; - if( params.nactive_vars > var_count ) - params.nactive_vars = var_count; - else if( params.nactive_vars == 0 ) - params.nactive_vars = (int)sqrt((double)var_count); - else if( params.nactive_vars < 0 ) - CV_ERROR( CV_StsBadArg, " must be non-negative" ); - - // Create mask of active variables at the tree nodes - CV_CALL(active_var_mask = cvCreateMat( 1, var_count, CV_8UC1 )); - if( params.calc_var_importance ) - { - CV_CALL(var_importance = cvCreateMat( 1, var_count, CV_32FC1 )); - cvZero(var_importance); - } - { // initialize active variables mask - CvMat submask1, submask2; - CV_Assert( (active_var_mask->cols >= 1) && (params.nactive_vars > 0) && (params.nactive_vars <= active_var_mask->cols) ); - cvGetCols( active_var_mask, &submask1, 0, params.nactive_vars ); - cvSet( &submask1, cvScalar(1) ); - if( params.nactive_vars < active_var_mask->cols ) - { - cvGetCols( active_var_mask, &submask2, params.nactive_vars, var_count ); - cvZero( &submask2 ); - } - } - - CV_CALL(result = grow_forest( params.term_crit )); - - result = true; - - __END__ - return result; - -} - -bool CvERTrees::train( CvMLData* _data, CvRTParams params) -{ - bool result = false; - - CV_FUNCNAME( "CvERTrees::train" ); - - __BEGIN__; - - CV_CALL( result = CvRTrees::train( _data, params) ); - - __END__; - - return result; -} - -bool CvERTrees::grow_forest( const CvTermCriteria term_crit ) -{ - bool result = false; - - CvMat* sample_idx_for_tree = 0; - - CV_FUNCNAME("CvERTrees::grow_forest"); - __BEGIN__; - - const int max_ntrees = term_crit.max_iter; - const double max_oob_err = term_crit.epsilon; - - const int dims = data->var_count; - float maximal_response = 0; - - CvMat* oob_sample_votes = 0; - CvMat* oob_responses = 0; - - float* oob_samples_perm_ptr= 0; - - float* samples_ptr = 0; - uchar* missing_ptr = 0; - float* true_resp_ptr = 0; - bool is_oob_or_vimportance = ((max_oob_err > 0) && (term_crit.type != CV_TERMCRIT_ITER)) || var_importance; - - // oob_predictions_sum[i] = sum of predicted values for the i-th sample - // oob_num_of_predictions[i] = number of summands - // (number of predictions for the i-th sample) - // initialize these variable to avoid warning C4701 - CvMat oob_predictions_sum = cvMat( 1, 1, CV_32FC1 ); - CvMat oob_num_of_predictions = cvMat( 1, 1, CV_32FC1 ); - - nsamples = data->sample_count; - nclasses = data->get_num_classes(); - - if ( is_oob_or_vimportance ) - { - if( data->is_classifier ) - { - CV_CALL(oob_sample_votes = cvCreateMat( nsamples, nclasses, CV_32SC1 )); - cvZero(oob_sample_votes); - } - else - { - // oob_responses[0,i] = oob_predictions_sum[i] - // = sum of predicted values for the i-th sample - // oob_responses[1,i] = oob_num_of_predictions[i] - // = number of summands (number of predictions for the i-th sample) - CV_CALL(oob_responses = cvCreateMat( 2, nsamples, CV_32FC1 )); - cvZero(oob_responses); - cvGetRow( oob_responses, &oob_predictions_sum, 0 ); - cvGetRow( oob_responses, &oob_num_of_predictions, 1 ); - } - - CV_CALL(oob_samples_perm_ptr = (float*)cvAlloc( sizeof(float)*nsamples*dims )); - CV_CALL(samples_ptr = (float*)cvAlloc( sizeof(float)*nsamples*dims )); - CV_CALL(missing_ptr = (uchar*)cvAlloc( sizeof(uchar)*nsamples*dims )); - CV_CALL(true_resp_ptr = (float*)cvAlloc( sizeof(float)*nsamples )); - - CV_CALL(data->get_vectors( 0, samples_ptr, missing_ptr, true_resp_ptr )); - { - double minval, maxval; - CvMat responses = cvMat(1, nsamples, CV_32FC1, true_resp_ptr); - cvMinMaxLoc( &responses, &minval, &maxval ); - maximal_response = (float)MAX( MAX( fabs(minval), fabs(maxval) ), 0 ); - } - } - - trees = (CvForestTree**)cvAlloc( sizeof(trees[0])*max_ntrees ); - memset( trees, 0, sizeof(trees[0])*max_ntrees ); - - CV_CALL(sample_idx_for_tree = cvCreateMat( 1, nsamples, CV_32SC1 )); - - for (int i = 0; i < nsamples; i++) - sample_idx_for_tree->data.i[i] = i; - ntrees = 0; - while( ntrees < max_ntrees ) - { - int i, oob_samples_count = 0; - double ncorrect_responses = 0; // used for estimation of variable importance - CvForestTree* tree = 0; - - trees[ntrees] = new CvForestERTree(); - tree = (CvForestERTree*)trees[ntrees]; - CV_CALL(tree->train( data, 0, this )); - - if ( is_oob_or_vimportance ) - { - CvMat sample, missing; - // form array of OOB samples indices and get these samples - sample = cvMat( 1, dims, CV_32FC1, samples_ptr ); - missing = cvMat( 1, dims, CV_8UC1, missing_ptr ); - - oob_error = 0; - for( i = 0; i < nsamples; i++, - sample.data.fl += dims, missing.data.ptr += dims ) - { - CvDTreeNode* predicted_node = 0; - - // predict oob samples - if( !predicted_node ) - CV_CALL(predicted_node = tree->predict(&sample, &missing, true)); - - if( !data->is_classifier ) //regression - { - double avg_resp, resp = predicted_node->value; - oob_predictions_sum.data.fl[i] += (float)resp; - oob_num_of_predictions.data.fl[i] += 1; - - // compute oob error - avg_resp = oob_predictions_sum.data.fl[i]/oob_num_of_predictions.data.fl[i]; - avg_resp -= true_resp_ptr[i]; - oob_error += avg_resp*avg_resp; - resp = (resp - true_resp_ptr[i])/maximal_response; - ncorrect_responses += exp( -resp*resp ); - } - else //classification - { - double prdct_resp; - CvPoint max_loc; - CvMat votes; - - cvGetRow(oob_sample_votes, &votes, i); - votes.data.i[predicted_node->class_idx]++; - - // compute oob error - cvMinMaxLoc( &votes, 0, 0, 0, &max_loc ); - - prdct_resp = data->cat_map->data.i[max_loc.x]; - oob_error += (fabs(prdct_resp - true_resp_ptr[i]) < FLT_EPSILON) ? 0 : 1; - - ncorrect_responses += cvRound(predicted_node->value - true_resp_ptr[i]) == 0; - } - oob_samples_count++; - } - if( oob_samples_count > 0 ) - oob_error /= (double)oob_samples_count; - - // estimate variable importance - if( var_importance && oob_samples_count > 0 ) - { - int m; - - memcpy( oob_samples_perm_ptr, samples_ptr, dims*nsamples*sizeof(float)); - for( m = 0; m < dims; m++ ) - { - double ncorrect_responses_permuted = 0; - // randomly permute values of the m-th variable in the oob samples - float* mth_var_ptr = oob_samples_perm_ptr + m; - - for( i = 0; i < nsamples; i++ ) - { - int i1, i2; - float temp; - - i1 = (*rng)(nsamples); - i2 = (*rng)(nsamples); - CV_SWAP( mth_var_ptr[i1*dims], mth_var_ptr[i2*dims], temp ); - - // turn values of (m-1)-th variable, that were permuted - // at the previous iteration, untouched - if( m > 1 ) - oob_samples_perm_ptr[i*dims+m-1] = samples_ptr[i*dims+m-1]; - } - - // predict "permuted" cases and calculate the number of votes for the - // correct class in the variable-m-permuted oob data - sample = cvMat( 1, dims, CV_32FC1, oob_samples_perm_ptr ); - missing = cvMat( 1, dims, CV_8UC1, missing_ptr ); - for( i = 0; i < nsamples; i++, - sample.data.fl += dims, missing.data.ptr += dims ) - { - double predct_resp, true_resp; - - predct_resp = tree->predict(&sample, &missing, true)->value; - true_resp = true_resp_ptr[i]; - if( data->is_classifier ) - ncorrect_responses_permuted += cvRound(true_resp - predct_resp) == 0; - else - { - true_resp = (true_resp - predct_resp)/maximal_response; - ncorrect_responses_permuted += exp( -true_resp*true_resp ); - } - } - var_importance->data.fl[m] += (float)(ncorrect_responses - - ncorrect_responses_permuted); - } - } - } - ntrees++; - if( term_crit.type != CV_TERMCRIT_ITER && oob_error < max_oob_err ) - break; - } - if( var_importance ) - { - for ( int vi = 0; vi < var_importance->cols; vi++ ) - var_importance->data.fl[vi] = ( var_importance->data.fl[vi] > 0 ) ? - var_importance->data.fl[vi] : 0; - cvNormalize( var_importance, var_importance, 1., 0, CV_L1 ); - } - - result = true; - - cvFree( &oob_samples_perm_ptr ); - cvFree( &samples_ptr ); - cvFree( &missing_ptr ); - cvFree( &true_resp_ptr ); - - cvReleaseMat( &sample_idx_for_tree ); - - cvReleaseMat( &oob_sample_votes ); - cvReleaseMat( &oob_responses ); - - __END__; - - return result; -} - -using namespace cv; - -bool CvERTrees::train( const Mat& _train_data, int _tflag, - const Mat& _responses, const Mat& _var_idx, - const Mat& _sample_idx, const Mat& _var_type, - const Mat& _missing_mask, CvRTParams params ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, - sidx = _sample_idx, vtype = _var_type, mmask = _missing_mask; - return train(&tdata, _tflag, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0, vtype.data.ptr ? &vtype : 0, - mmask.data.ptr ? &mmask : 0, params); -} - -// End of file. diff --git a/modules/ml/src/estimate.cpp b/modules/ml/src/estimate.cpp deleted file mode 100644 index e9cab88..0000000 --- a/modules/ml/src/estimate.cpp +++ /dev/null @@ -1,728 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#if 0 - -ML_IMPL int -icvCmpIntegers (const void* a, const void* b) {return *(const int*)a - *(const int*)b;} - -/****************************************************************************************\ -* Cross-validation algorithms realizations * -\****************************************************************************************/ - -// Return pointer to trainIdx. Function DOES NOT FILL this matrix! -ML_IMPL -const CvMat* cvCrossValGetTrainIdxMatrix (const CvStatModel* estimateModel) -{ - CvMat* result = NULL; - - CV_FUNCNAME ("cvCrossValGetTrainIdxMatrix"); - __BEGIN__ - - if (!CV_IS_CROSSVAL(estimateModel)) - { - CV_ERROR (CV_StsBadArg, "Pointer point to not CvCrossValidationModel"); - } - - result = ((CvCrossValidationModel*)estimateModel)->sampleIdxTrain; - - __END__ - - return result; -} // End of cvCrossValGetTrainIdxMatrix - -/****************************************************************************************/ -// Return pointer to checkIdx. Function DOES NOT FILL this matrix! -ML_IMPL -const CvMat* cvCrossValGetCheckIdxMatrix (const CvStatModel* estimateModel) -{ - CvMat* result = NULL; - - CV_FUNCNAME ("cvCrossValGetCheckIdxMatrix"); - __BEGIN__ - - if (!CV_IS_CROSSVAL (estimateModel)) - { - CV_ERROR (CV_StsBadArg, "Pointer point to not CvCrossValidationModel"); - } - - result = ((CvCrossValidationModel*)estimateModel)->sampleIdxEval; - - __END__ - - return result; -} // End of cvCrossValGetCheckIdxMatrix - -/****************************************************************************************/ -// Create new Idx-matrix for next classifiers training and return code of result. -// Result is 0 if function can't make next step (error input or folds are finished), -// it is 1 if all was correct, and it is 2 if current fold wasn't' checked. -ML_IMPL -int cvCrossValNextStep (CvStatModel* estimateModel) -{ - int result = 0; - - CV_FUNCNAME ("cvCrossValGetNextTrainIdx"); - __BEGIN__ - - CvCrossValidationModel* crVal = (CvCrossValidationModel*) estimateModel; - int k, fold; - - if (!CV_IS_CROSSVAL (estimateModel)) - { - CV_ERROR (CV_StsBadArg, "Pointer point to not CvCrossValidationModel"); - } - - fold = ++crVal->current_fold; - - if (fold >= crVal->folds_all) - { - if (fold == crVal->folds_all) - EXIT; - else - { - CV_ERROR (CV_StsInternal, "All iterations has end long ago"); - } - } - - k = crVal->folds[fold + 1] - crVal->folds[fold]; - crVal->sampleIdxTrain->data.i = crVal->sampleIdxAll + crVal->folds[fold + 1]; - crVal->sampleIdxTrain->cols = crVal->samples_all - k; - crVal->sampleIdxEval->data.i = crVal->sampleIdxAll + crVal->folds[fold]; - crVal->sampleIdxEval->cols = k; - - if (crVal->is_checked) - { - crVal->is_checked = 0; - result = 1; - } - else - { - result = 2; - } - - __END__ - - return result; -} - -/****************************************************************************************/ -// Do checking part of loop of cross-validations metod. -ML_IMPL -void cvCrossValCheckClassifier (CvStatModel* estimateModel, - const CvStatModel* model, - const CvMat* trainData, - int sample_t_flag, - const CvMat* trainClasses) -{ - CV_FUNCNAME ("cvCrossValCheckClassifier "); - __BEGIN__ - - CvCrossValidationModel* crVal = (CvCrossValidationModel*) estimateModel; - int i, j, k; - int* data; - float* responses_fl; - int step; - float* responses_result; - int* responses_i; - double te, te1; - double sum_c, sum_p, sum_pp, sum_cp, sum_cc, sq_err; - -// Check input data to correct values. - if (!CV_IS_CROSSVAL (estimateModel)) - { - CV_ERROR (CV_StsBadArg,"First parameter point to not CvCrossValidationModel"); - } - if (!CV_IS_STAT_MODEL (model)) - { - CV_ERROR (CV_StsBadArg, "Second parameter point to not CvStatModel"); - } - if (!CV_IS_MAT (trainData)) - { - CV_ERROR (CV_StsBadArg, "Third parameter point to not CvMat"); - } - if (!CV_IS_MAT (trainClasses)) - { - CV_ERROR (CV_StsBadArg, "Fifth parameter point to not CvMat"); - } - if (crVal->is_checked) - { - CV_ERROR (CV_StsInternal, "This iterations already was checked"); - } - -// Initialize. - k = crVal->sampleIdxEval->cols; - data = crVal->sampleIdxEval->data.i; - -// Eval tested feature vectors. - CV_CALL (cvStatModelMultiPredict (model, trainData, sample_t_flag, - crVal->predict_results, NULL, crVal->sampleIdxEval)); -// Count number if correct results. - responses_result = crVal->predict_results->data.fl; - if (crVal->is_regression) - { - sum_c = sum_p = sum_pp = sum_cp = sum_cc = sq_err = 0; - if (CV_MAT_TYPE (trainClasses->type) == CV_32FC1) - { - responses_fl = trainClasses->data.fl; - step = trainClasses->rows == 1 ? 1 : trainClasses->step / sizeof(float); - for (i = 0; i < k; i++) - { - te = responses_result[*data]; - te1 = responses_fl[*data * step]; - sum_c += te1; - sum_p += te; - sum_cc += te1 * te1; - sum_pp += te * te; - sum_cp += te1 * te; - te -= te1; - sq_err += te * te; - - data++; - } - } - else - { - responses_i = trainClasses->data.i; - step = trainClasses->rows == 1 ? 1 : trainClasses->step / sizeof(int); - for (i = 0; i < k; i++) - { - te = responses_result[*data]; - te1 = responses_i[*data * step]; - sum_c += te1; - sum_p += te; - sum_cc += te1 * te1; - sum_pp += te * te; - sum_cp += te1 * te; - te -= te1; - sq_err += te * te; - - data++; - } - } - // Fixing new internal values of accuracy. - crVal->sum_correct += sum_c; - crVal->sum_predict += sum_p; - crVal->sum_cc += sum_cc; - crVal->sum_pp += sum_pp; - crVal->sum_cp += sum_cp; - crVal->sq_error += sq_err; - } - else - { - if (CV_MAT_TYPE (trainClasses->type) == CV_32FC1) - { - responses_fl = trainClasses->data.fl; - step = trainClasses->rows == 1 ? 1 : trainClasses->step / sizeof(float); - for (i = 0, j = 0; i < k; i++) - { - if (cvRound (responses_result[*data]) == cvRound (responses_fl[*data * step])) - j++; - data++; - } - } - else - { - responses_i = trainClasses->data.i; - step = trainClasses->rows == 1 ? 1 : trainClasses->step / sizeof(int); - for (i = 0, j = 0; i < k; i++) - { - if (cvRound (responses_result[*data]) == responses_i[*data * step]) - j++; - data++; - } - } - // Fixing new internal values of accuracy. - crVal->correct_results += j; - } -// Fixing that this fold already checked. - crVal->all_results += k; - crVal->is_checked = 1; - - __END__ -} // End of cvCrossValCheckClassifier - -/****************************************************************************************/ -// Return current accuracy. -ML_IMPL -float cvCrossValGetResult (const CvStatModel* estimateModel, - float* correlation) -{ - float result = 0; - - CV_FUNCNAME ("cvCrossValGetResult"); - __BEGIN__ - - double te, te1; - CvCrossValidationModel* crVal = (CvCrossValidationModel*)estimateModel; - - if (!CV_IS_CROSSVAL (estimateModel)) - { - CV_ERROR (CV_StsBadArg, "Pointer point to not CvCrossValidationModel"); - } - - if (crVal->all_results) - { - if (crVal->is_regression) - { - result = ((float)crVal->sq_error) / crVal->all_results; - if (correlation) - { - te = crVal->all_results * crVal->sum_cp - - crVal->sum_correct * crVal->sum_predict; - te *= te; - te1 = (crVal->all_results * crVal->sum_cc - - crVal->sum_correct * crVal->sum_correct) * - (crVal->all_results * crVal->sum_pp - - crVal->sum_predict * crVal->sum_predict); - *correlation = (float)(te / te1); - - } - } - else - { - result = ((float)crVal->correct_results) / crVal->all_results; - } - } - - __END__ - - return result; -} - -/****************************************************************************************/ -// Reset cross-validation EstimateModel to state the same as it was immidiatly after -// its creating. -ML_IMPL -void cvCrossValReset (CvStatModel* estimateModel) -{ - CV_FUNCNAME ("cvCrossValReset"); - __BEGIN__ - - CvCrossValidationModel* crVal = (CvCrossValidationModel*)estimateModel; - - if (!CV_IS_CROSSVAL (estimateModel)) - { - CV_ERROR (CV_StsBadArg, "Pointer point to not CvCrossValidationModel"); - } - - crVal->current_fold = -1; - crVal->is_checked = 1; - crVal->all_results = 0; - crVal->correct_results = 0; - crVal->sq_error = 0; - crVal->sum_correct = 0; - crVal->sum_predict = 0; - crVal->sum_cc = 0; - crVal->sum_pp = 0; - crVal->sum_cp = 0; - - __END__ -} - -/****************************************************************************************/ -// This function is standart CvStatModel field to release cross-validation EstimateModel. -ML_IMPL -void cvReleaseCrossValidationModel (CvStatModel** model) -{ - CvCrossValidationModel* pModel; - - CV_FUNCNAME ("cvReleaseCrossValidationModel"); - __BEGIN__ - - if (!model) - { - CV_ERROR (CV_StsNullPtr, ""); - } - - pModel = (CvCrossValidationModel*)*model; - if (!pModel) - { - return; - } - if (!CV_IS_CROSSVAL (pModel)) - { - CV_ERROR (CV_StsBadArg, ""); - } - - cvFree (&pModel->sampleIdxAll); - cvFree (&pModel->folds); - cvReleaseMat (&pModel->sampleIdxEval); - cvReleaseMat (&pModel->sampleIdxTrain); - cvReleaseMat (&pModel->predict_results); - - cvFree (model); - - __END__ -} // End of cvReleaseCrossValidationModel. - -/****************************************************************************************/ -// This function create cross-validation EstimateModel. -ML_IMPL CvStatModel* -cvCreateCrossValidationEstimateModel( - int samples_all, - const CvStatModelParams* estimateParams, - const CvMat* sampleIdx) -{ - CvStatModel* model = NULL; - CvCrossValidationModel* crVal = NULL; - - CV_FUNCNAME ("cvCreateCrossValidationEstimateModel"); - __BEGIN__ - - int k_fold = 10; - - int i, j, k, s_len; - int samples_selected; - CvRNG rng; - CvRNG* prng; - int* res_s_data; - int* te_s_data; - int* folds; - - rng = cvRNG(cvGetTickCount()); - cvRandInt (&rng); cvRandInt (&rng); cvRandInt (&rng); cvRandInt (&rng); -// Check input parameters. - if (estimateParams) - k_fold = ((CvCrossValidationParams*)estimateParams)->k_fold; - if (!k_fold) - { - CV_ERROR (CV_StsBadArg, "Error in parameters of cross-validation (k_fold == 0)!"); - } - if (samples_all <= 0) - { - CV_ERROR (CV_StsBadArg, " should be positive!"); - } - -// Alloc memory and fill standart StatModel's fields. - CV_CALL (crVal = (CvCrossValidationModel*)cvCreateStatModel ( - CV_STAT_MODEL_MAGIC_VAL | CV_CROSSVAL_MAGIC_VAL, - sizeof(CvCrossValidationModel), - cvReleaseCrossValidationModel, - NULL, NULL)); - crVal->current_fold = -1; - crVal->folds_all = k_fold; - if (estimateParams && ((CvCrossValidationParams*)estimateParams)->is_regression) - crVal->is_regression = 1; - else - crVal->is_regression = 0; - if (estimateParams && ((CvCrossValidationParams*)estimateParams)->rng) - prng = ((CvCrossValidationParams*)estimateParams)->rng; - else - prng = &rng; - - // Check and preprocess sample indices. - if (sampleIdx) - { - int s_step; - int s_type = 0; - - if (!CV_IS_MAT (sampleIdx)) - CV_ERROR (CV_StsBadArg, "Invalid sampleIdx array"); - - if (sampleIdx->rows != 1 && sampleIdx->cols != 1) - CV_ERROR (CV_StsBadSize, "sampleIdx array must be 1-dimensional"); - - s_len = sampleIdx->rows + sampleIdx->cols - 1; - s_step = sampleIdx->rows == 1 ? - 1 : sampleIdx->step / CV_ELEM_SIZE(sampleIdx->type); - - s_type = CV_MAT_TYPE (sampleIdx->type); - - switch (s_type) - { - case CV_8UC1: - case CV_8SC1: - { - uchar* s_data = sampleIdx->data.ptr; - - // sampleIdx is array of 1's and 0's - - // i.e. it is a mask of the selected samples - if( s_len != samples_all ) - CV_ERROR (CV_StsUnmatchedSizes, - "Sample mask should contain as many elements as the total number of samples"); - - samples_selected = 0; - for (i = 0; i < s_len; i++) - samples_selected += s_data[i * s_step] != 0; - - if (samples_selected == 0) - CV_ERROR (CV_StsOutOfRange, "No samples is selected!"); - } - s_len = samples_selected; - break; - case CV_32SC1: - if (s_len > samples_all) - CV_ERROR (CV_StsOutOfRange, - "sampleIdx array may not contain more elements than the total number of samples"); - samples_selected = s_len; - break; - default: - CV_ERROR (CV_StsUnsupportedFormat, "Unsupported sampleIdx array data type " - "(it should be 8uC1, 8sC1 or 32sC1)"); - } - - // Alloc additional memory for internal Idx and fill it. -/*!!*/ CV_CALL (res_s_data = crVal->sampleIdxAll = - (int*)cvAlloc (2 * s_len * sizeof(int))); - - if (s_type < CV_32SC1) - { - uchar* s_data = sampleIdx->data.ptr; - for (i = 0; i < s_len; i++) - if (s_data[i * s_step]) - { - *res_s_data++ = i; - } - res_s_data = crVal->sampleIdxAll; - } - else - { - int* s_data = sampleIdx->data.i; - int out_of_order = 0; - - for (i = 0; i < s_len; i++) - { - res_s_data[i] = s_data[i * s_step]; - if (i > 0 && res_s_data[i] < res_s_data[i - 1]) - out_of_order = 1; - } - - if (out_of_order) - qsort (res_s_data, s_len, sizeof(res_s_data[0]), icvCmpIntegers); - - if (res_s_data[0] < 0 || - res_s_data[s_len - 1] >= samples_all) - CV_ERROR (CV_StsBadArg, "There are out-of-range sample indices"); - for (i = 1; i < s_len; i++) - if (res_s_data[i] <= res_s_data[i - 1]) - CV_ERROR (CV_StsBadArg, "There are duplicated"); - } - } - else // if (sampleIdx) - { - // Alloc additional memory for internal Idx and fill it. - s_len = samples_all; - CV_CALL (res_s_data = crVal->sampleIdxAll = (int*)cvAlloc (2 * s_len * sizeof(int))); - for (i = 0; i < s_len; i++) - { - *res_s_data++ = i; - } - res_s_data = crVal->sampleIdxAll; - } // if (sampleIdx) ... else - -// Resort internal Idx. - te_s_data = res_s_data + s_len; - for (i = s_len; i > 1; i--) - { - j = cvRandInt (prng) % i; - k = *(--te_s_data); - *te_s_data = res_s_data[j]; - res_s_data[j] = k; - } - -// Duplicate resorted internal Idx. -// It will be used to simplify operation of getting trainIdx. - te_s_data = res_s_data + s_len; - for (i = 0; i < s_len; i++) - { - *te_s_data++ = *res_s_data++; - } - -// Cut sampleIdxAll to parts. - if (k_fold > 0) - { - if (k_fold > s_len) - { - CV_ERROR (CV_StsBadArg, - "Error in parameters of cross-validation ('k_fold' > #samples)!"); - } - folds = crVal->folds = (int*) cvAlloc ((k_fold + 1) * sizeof (int)); - *folds++ = 0; - for (i = 1; i < k_fold; i++) - { - *folds++ = cvRound (i * s_len * 1. / k_fold); - } - *folds = s_len; - folds = crVal->folds; - - crVal->max_fold_size = (s_len - 1) / k_fold + 1; - } - else - { - k = -k_fold; - crVal->max_fold_size = k; - if (k >= s_len) - { - CV_ERROR (CV_StsBadArg, - "Error in parameters of cross-validation (-'k_fold' > #samples)!"); - } - crVal->folds_all = k = (s_len - 1) / k + 1; - - folds = crVal->folds = (int*) cvAlloc ((k + 1) * sizeof (int)); - for (i = 0; i < k; i++) - { - *folds++ = -i * k_fold; - } - *folds = s_len; - folds = crVal->folds; - } - -// Prepare other internal fields to working. - CV_CALL (crVal->predict_results = cvCreateMat (1, samples_all, CV_32FC1)); - CV_CALL (crVal->sampleIdxEval = cvCreateMatHeader (1, 1, CV_32SC1)); - CV_CALL (crVal->sampleIdxTrain = cvCreateMatHeader (1, 1, CV_32SC1)); - crVal->sampleIdxEval->cols = 0; - crVal->sampleIdxTrain->cols = 0; - crVal->samples_all = s_len; - crVal->is_checked = 1; - - crVal->getTrainIdxMat = cvCrossValGetTrainIdxMatrix; - crVal->getCheckIdxMat = cvCrossValGetCheckIdxMatrix; - crVal->nextStep = cvCrossValNextStep; - crVal->check = cvCrossValCheckClassifier; - crVal->getResult = cvCrossValGetResult; - crVal->reset = cvCrossValReset; - - model = (CvStatModel*)crVal; - - __END__ - - if (!model) - { - cvReleaseCrossValidationModel ((CvStatModel**)&crVal); - } - - return model; -} // End of cvCreateCrossValidationEstimateModel - - -/****************************************************************************************\ -* Extended interface with backcalls for models * -\****************************************************************************************/ -ML_IMPL float -cvCrossValidation (const CvMat* trueData, - int tflag, - const CvMat* trueClasses, - CvStatModel* (*createClassifier) (const CvMat*, - int, - const CvMat*, - const CvClassifierTrainParams*, - const CvMat*, - const CvMat*, - const CvMat*, - const CvMat*), - const CvClassifierTrainParams* estimateParams, - const CvClassifierTrainParams* trainParams, - const CvMat* compIdx, - const CvMat* sampleIdx, - CvStatModel** pCrValModel, - const CvMat* typeMask, - const CvMat* missedMeasurementMask) -{ - CvCrossValidationModel* crVal = NULL; - float result = 0; - CvStatModel* pClassifier = NULL; - - CV_FUNCNAME ("cvCrossValidation"); - __BEGIN__ - - const CvMat* trainDataIdx; - int samples_all; - -// checking input data - if ((createClassifier) == NULL) - { - CV_ERROR (CV_StsNullPtr, "Null pointer to functiion which create classifier"); - } - if (pCrValModel && *pCrValModel && !CV_IS_CROSSVAL(*pCrValModel)) - { - CV_ERROR (CV_StsBadArg, - " point to not cross-validation model"); - } - -// initialization - if (pCrValModel && *pCrValModel) - { - crVal = (CvCrossValidationModel*)*pCrValModel; - crVal->reset ((CvStatModel*)crVal); - } - else - { - samples_all = ((tflag) ? trueData->rows : trueData->cols); - CV_CALL (crVal = (CvCrossValidationModel*) - cvCreateCrossValidationEstimateModel (samples_all, estimateParams, sampleIdx)); - } - - CV_CALL (trainDataIdx = crVal->getTrainIdxMat ((CvStatModel*)crVal)); - -// operation loop - for (; crVal->nextStep((CvStatModel*)crVal) != 0; ) - { - CV_CALL (pClassifier = createClassifier (trueData, tflag, trueClasses, - trainParams, compIdx, trainDataIdx, typeMask, missedMeasurementMask)); - CV_CALL (crVal->check ((CvStatModel*)crVal, pClassifier, - trueData, tflag, trueClasses)); - - pClassifier->release (&pClassifier); - } - -// Get result and fill output field. - CV_CALL (result = crVal->getResult ((CvStatModel*)crVal, 0)); - - if (pCrValModel && !*pCrValModel) - *pCrValModel = (CvStatModel*)crVal; - - __END__ - -// Free all memory that should be freed. - if (pClassifier) - pClassifier->release (&pClassifier); - if (crVal && (!pCrValModel || !*pCrValModel)) - crVal->release ((CvStatModel**)&crVal); - - return result; -} // End of cvCrossValidation - -#endif - -/* End of file */ diff --git a/modules/ml/src/gbt.cpp b/modules/ml/src/gbt.cpp deleted file mode 100644 index b52ffbe..0000000 --- a/modules/ml/src/gbt.cpp +++ /dev/null @@ -1,1379 +0,0 @@ - -#include "precomp.hpp" -#include -#include - -using namespace std; - -#define pCvSeq CvSeq* -#define pCvDTreeNode CvDTreeNode* - -#define CV_CMP_FLOAT(a,b) ((a) < (b)) -static CV_IMPLEMENT_QSORT_EX( icvSortFloat, float, CV_CMP_FLOAT, float) - -//=========================================================================== -static string ToString(int i) -{ - stringstream tmp; - tmp << i; - - return tmp.str(); -} - - -//=========================================================================== -//----------------------------- CvGBTreesParams ----------------------------- -//=========================================================================== - -CvGBTreesParams::CvGBTreesParams() - : CvDTreeParams( 3, 10, 0, false, 10, 0, false, false, 0 ) -{ - weak_count = 200; - loss_function_type = CvGBTrees::SQUARED_LOSS; - subsample_portion = 0.8f; - shrinkage = 0.01f; -} - -//=========================================================================== - -CvGBTreesParams::CvGBTreesParams( int _loss_function_type, int _weak_count, - float _shrinkage, float _subsample_portion, - int _max_depth, bool _use_surrogates ) - : CvDTreeParams( 3, 10, 0, false, 10, 0, false, false, 0 ) -{ - loss_function_type = _loss_function_type; - weak_count = _weak_count; - shrinkage = _shrinkage; - subsample_portion = _subsample_portion; - max_depth = _max_depth; - use_surrogates = _use_surrogates; -} - -//=========================================================================== -//------------------------------- CvGBTrees --------------------------------- -//=========================================================================== - -CvGBTrees::CvGBTrees() -{ - data = 0; - weak = 0; - default_model_name = "my_boost_tree"; - orig_response = sum_response = sum_response_tmp = 0; - subsample_train = subsample_test = 0; - missing = sample_idx = 0; - class_labels = 0; - class_count = 1; - delta = 0.0f; - - clear(); -} - -//=========================================================================== - -int CvGBTrees::get_len(const CvMat* mat) const -{ - return (mat->cols > mat->rows) ? mat->cols : mat->rows; -} - -//=========================================================================== - -void CvGBTrees::clear() -{ - if( weak ) - { - CvSeqReader reader; - CvSlice slice = CV_WHOLE_SEQ; - CvDTree* tree; - - //data->shared = false; - for (int i=0; iclear(); - delete tree; - tree = 0; - } - } - } - for (int i=0; istorage) ); - delete[] weak; - } - if (data) - { - data->shared = false; - delete data; - } - weak = 0; - data = 0; - delta = 0.0f; - cvReleaseMat( &orig_response ); - cvReleaseMat( &sum_response ); - cvReleaseMat( &sum_response_tmp ); - cvReleaseMat( &subsample_train ); - cvReleaseMat( &subsample_test ); - cvReleaseMat( &sample_idx ); - cvReleaseMat( &missing ); - cvReleaseMat( &class_labels ); -} - -//=========================================================================== - -CvGBTrees::~CvGBTrees() -{ - clear(); -} - -//=========================================================================== - -CvGBTrees::CvGBTrees( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, CvGBTreesParams _params ) -{ - weak = 0; - data = 0; - default_model_name = "my_boost_tree"; - orig_response = sum_response = sum_response_tmp = 0; - subsample_train = subsample_test = 0; - missing = sample_idx = 0; - class_labels = 0; - class_count = 1; - delta = 0.0f; - - train( _train_data, _tflag, _responses, _var_idx, _sample_idx, - _var_type, _missing_mask, _params ); -} - -//=========================================================================== - -bool CvGBTrees::problem_type() const -{ - switch (params.loss_function_type) - { - case DEVIANCE_LOSS: return false; - default: return true; - } -} - -//=========================================================================== - -bool -CvGBTrees::train( CvMLData* _data, CvGBTreesParams _params, bool update ) -{ - bool result; - result = train ( _data->get_values(), CV_ROW_SAMPLE, - _data->get_responses(), _data->get_var_idx(), - _data->get_train_sample_idx(), _data->get_var_types(), - _data->get_missing(), _params, update); - //update is not supported - return result; -} - -//=========================================================================== - - -bool -CvGBTrees::train( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, - CvGBTreesParams _params, bool /*_update*/ ) //update is not supported -{ - CvMemStorage* storage = 0; - - params = _params; - bool is_regression = problem_type(); - - clear(); - /* - n - count of samples - m - count of variables - */ - int n = _train_data->rows; - int m = _train_data->cols; - if (_tflag != CV_ROW_SAMPLE) - { - int tmp; - CV_SWAP(n,m,tmp); - } - - CvMat* new_responses = cvCreateMat( n, 1, CV_32F); - cvZero(new_responses); - - data = new CvDTreeTrainData( _train_data, _tflag, new_responses, _var_idx, - _sample_idx, _var_type, _missing_mask, _params, true, true ); - if (_missing_mask) - { - missing = cvCreateMat(_missing_mask->rows, _missing_mask->cols, - _missing_mask->type); - cvCopy( _missing_mask, missing); - } - - orig_response = cvCreateMat( 1, n, CV_32F ); - int step = (_responses->cols > _responses->rows) ? 1 : _responses->step / CV_ELEM_SIZE(_responses->type); - switch (CV_MAT_TYPE(_responses->type)) - { - case CV_32FC1: - { - for (int i=0; idata.fl[i] = _responses->data.fl[i*step]; - }; break; - case CV_32SC1: - { - for (int i=0; idata.fl[i] = (float) _responses->data.i[i*step]; - }; break; - default: - CV_Error(CV_StsUnmatchedFormats, "Response should be a 32fC1 or 32sC1 vector."); - } - - if (!is_regression) - { - class_count = 0; - unsigned char * mask = new unsigned char[n]; - memset(mask, 0, n); - // compute the count of different output classes - for (int i=0; idata.fl[j]) == int(orig_response->data.fl[i])) - mask[j] = 1; - } - delete[] mask; - - class_labels = cvCreateMat(1, class_count, CV_32S); - class_labels->data.i[0] = int(orig_response->data.fl[0]); - int j = 1; - for (int i=1; idata.fl[i]) - class_labels->data.i[k]) && (kdata.i[k] = int(orig_response->data.fl[i]); - j++; - } - } - } - - // inside gbt learning proccess only regression decision trees are built - data->is_classifier = false; - - // preproccessing sample indices - if (_sample_idx) - { - int sample_idx_len = get_len(_sample_idx); - - switch (CV_MAT_TYPE(_sample_idx->type)) - { - case CV_32SC1: - { - sample_idx = cvCreateMat( 1, sample_idx_len, CV_32S ); - for (int i=0; idata.i[i] = _sample_idx->data.i[i]; - } break; - case CV_8S: - case CV_8U: - { - int active_samples_count = 0; - for (int i=0; idata.ptr[i] ); - sample_idx = cvCreateMat( 1, active_samples_count, CV_32S ); - active_samples_count = 0; - for (int i=0; idata.ptr[i] )) - sample_idx->data.i[active_samples_count++] = i; - - } break; - default: CV_Error(CV_StsUnmatchedFormats, "_sample_idx should be a 32sC1, 8sC1 or 8uC1 vector."); - } - icvSortFloat(sample_idx->data.fl, sample_idx_len, 0); - } - else - { - sample_idx = cvCreateMat( 1, n, CV_32S ); - for (int i=0; idata.i[i] = i; - } - - sum_response = cvCreateMat(class_count, n, CV_32F); - sum_response_tmp = cvCreateMat(class_count, n, CV_32F); - cvZero(sum_response); - - delta = 0.0f; - /* - in the case of a regression problem the initial guess (the zero term - in the sum) is set to the mean of all the training responses, that is - the best constant model - */ - if (is_regression) base_value = find_optimal_value(sample_idx); - /* - in the case of a classification problem the initial guess (the zero term - in the sum) is set to zero for all the trees sequences - */ - else base_value = 0.0f; - /* - current predicition on all training samples is set to be - equal to the base_value - */ - cvSet( sum_response, cvScalar(base_value) ); - - weak = new pCvSeq[class_count]; - for (int i=0; itrain( data, subsample_train ); - change_values(tree, k); - - if (subsample_test) - { - CvMat x; - CvMat x_miss; - int* sample_data = sample_idx->data.i; - int* subsample_data = subsample_test->data.i; - int s_step = (sample_idx->cols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - for (int j=0; jtrain_data, &x, idx); - else - cvGetCol( data->train_data, &x, idx); - - if (missing) - { - if (_tflag == CV_ROW_SAMPLE) - cvGetRow( missing, &x_miss, idx); - else - cvGetCol( missing, &x_miss, idx); - - res = (float)tree->predict(&x, &x_miss)->value; - } - else - { - res = (float)tree->predict(&x)->value; - } - sum_response_tmp->data.fl[idx + k*n] = - sum_response->data.fl[idx + k*n] + - params.shrinkage * res; - } - } - - cvSeqPush( weak[k], &tree ); - tree = 0; - } // k=0..class_count - CvMat* tmp; - tmp = sum_response_tmp; - sum_response_tmp = sum_response; - sum_response = tmp; - tmp = 0; - } // i=0..params.weak_count - - delete[] idx_data; - cvReleaseMat(&new_responses); - data->free_train_data(); - - return true; - -} // CvGBTrees::train(...) - -//=========================================================================== - -inline float Sign(float x) - { - if (x<0.0f) return -1.0f; - else if (x>0.0f) return 1.0f; - return 0.0f; - } - -//=========================================================================== - -void CvGBTrees::find_gradient(const int k) -{ - int* sample_data = sample_idx->data.i; - int* subsample_data = subsample_train->data.i; - float* grad_data = data->responses->data.fl; - float* resp_data = orig_response->data.fl; - float* current_data = sum_response->data.fl; - - switch (params.loss_function_type) - // loss_function_type in - // {SQUARED_LOSS, ABSOLUTE_LOSS, HUBER_LOSS, DEVIANCE_LOSS} - { - case SQUARED_LOSS: - { - for (int i=0; icols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - int idx = *(sample_data + subsample_data[i]*s_step); - grad_data[idx] = resp_data[idx] - current_data[idx]; - } - }; break; - - case ABSOLUTE_LOSS: - { - for (int i=0; icols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - int idx = *(sample_data + subsample_data[i]*s_step); - grad_data[idx] = Sign(resp_data[idx] - current_data[idx]); - } - }; break; - - case HUBER_LOSS: - { - float alpha = 0.2f; - int n = get_len(subsample_train); - int s_step = (sample_idx->cols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - - float* residuals = new float[n]; - for (int i=0; i delta) ? delta*Sign(r) : r; - } - delete[] residuals; - - }; break; - - case DEVIANCE_LOSS: - { - for (int i=0; icols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - int idx = *(sample_data + subsample_data[i]*s_step); - - for (int j=0; jcols]; - res = exp(res); - if (j == k) exp_fk = res; - exp_sfi += res; - } - int orig_label = int(resp_data[idx]); - /* - grad_data[idx] = (float)(!(k-class_labels->data.i[orig_label]+1)) - - (float)(exp_fk / exp_sfi); - */ - int ensemble_label = 0; - while (class_labels->data.i[ensemble_label] - orig_label) - ensemble_label++; - - grad_data[idx] = (float)(!(k-ensemble_label)) - - (float)(exp_fk / exp_sfi); - } - }; break; - - default: break; - } - -} // CvGBTrees::find_gradient(...) - -//=========================================================================== - -void CvGBTrees::change_values(CvDTree* tree, const int _k) -{ - CvDTreeNode** predictions = new pCvDTreeNode[get_len(subsample_train)]; - - int* sample_data = sample_idx->data.i; - int* subsample_data = subsample_train->data.i; - int s_step = (sample_idx->cols > sample_idx->rows) ? 1 - : sample_idx->step/CV_ELEM_SIZE(sample_idx->type); - - CvMat x; - CvMat miss_x; - - for (int i=0; itflag == CV_ROW_SAMPLE) - cvGetRow( data->train_data, &x, idx); - else - cvGetCol( data->train_data, &x, idx); - - if (missing) - { - if (data->tflag == CV_ROW_SAMPLE) - cvGetRow( missing, &miss_x, idx); - else - cvGetCol( missing, &miss_x, idx); - - predictions[i] = tree->predict(&x, &miss_x); - } - else - predictions[i] = tree->predict(&x); - } - - - CvDTreeNode** leaves; - int leaves_count = 0; - leaves = GetLeaves( tree, leaves_count); - - for (int i=0; ivalue = 0.0; - continue; - } - - CvMat* leaf_idx = cvCreateMat(1, samples_in_leaf, CV_32S); - int* leaf_idx_data = leaf_idx->data.i; - - for (int j=0; jvalue = value; - - leaf_idx_data = leaf_idx->data.i; - - int len = sum_response_tmp->cols; - for (int j=0; jdata.fl[idx + _k*len] = - sum_response->data.fl[idx + _k*len] + - params.shrinkage * value; - } - leaf_idx_data = 0; - cvReleaseMat(&leaf_idx); - } - - // releasing the memory - for (int i=0; icols; - CvMat leaf_idx; - leaf_idx.rows = 1; - - leaves = GetLeaves( tree, leaves_count); - - for (int i=0; isample_count; - int* leaf_idx_data = new int[n]; - data->get_sample_indices(leaves[i], leaf_idx_data); - //CvMat* leaf_idx = new CvMat(); - //cvInitMatHeader(leaf_idx, n, 1, CV_32S, leaf_idx_data); - leaf_idx.cols = n; - leaf_idx.data.i = leaf_idx_data; - - float value = find_optimal_value(&leaf_idx); - leaves[i]->value = value; - float val = params.shrinkage * value; - - - for (int j=0; jdata.fl[idx] = sum_response->data.fl[idx] + val; - } - //leaf_idx_data = 0; - //cvReleaseMat(&leaf_idx); - leaf_idx.data.i = 0; - //delete leaf_idx; - delete[] leaf_idx_data; - } - - // releasing the memory - for (int i=0; idata.i; - float* resp_data = orig_response->data.fl; - float* cur_data = sum_response->data.fl; - int n = get_len(_Idx); - - switch (params.loss_function_type) - // SQUARED_LOSS=0, ABSOLUTE_LOSS=1, HUBER_LOSS=3, DEVIANCE_LOSS=4 - { - case SQUARED_LOSS: - { - for (int i=0; i> 1; - float r_median = (n == n_half<<1) ? - (residuals[n_half-1] + residuals[n_half]) / 2.0f : - residuals[n_half]; - - for (int i=0; iresponses->data.fl; - double tmp1 = 0; - double tmp2 = 0; - double tmp = 0; - for (int i=0; ileft != NULL) leaves_get(leaves, count, node->left); - if (node->right != NULL) leaves_get(leaves, count, node->right); - if ((node->left == NULL) && (node->right == NULL)) - leaves[count++] = node; -} - -//--------------------------------------------------------------------------- - -CvDTreeNode** CvGBTrees::GetLeaves( const CvDTree* dtree, int& len ) -{ - len = 0; - CvDTreeNode** leaves = new pCvDTreeNode[(size_t)1 << params.max_depth]; - leaves_get(leaves, len, const_cast(dtree->get_root())); - return leaves; -} - -//=========================================================================== - -void CvGBTrees::do_subsample() -{ - - int n = get_len(sample_idx); - int* idx = subsample_train->data.i; - - for (int i = 0; i < n; i++ ) - idx[i] = i; - - if (subsample_test) - for (int i = 0; i < n; i++) - { - int a = (*rng)(n); - int b = (*rng)(n); - int t; - CV_SWAP( idx[a], idx[b], t ); - } - -/* - int n = get_len(sample_idx); - if (subsample_train == 0) - subsample_train = cvCreateMat(1, n, CV_32S); - int* subsample_data = subsample_train->data.i; - for (int i=0; itype) != CV_32F) - return 0.0f; - if ((k >= 0) && (krows != 1)) - return 0.0f; - if ((k == -1) && (weak_responses->rows != class_count)) - return 0.0f; - if (weak_responses->cols != weak_count) - return 0.0f; - } - - float* sum = new float[class_count]; - memset(sum, 0, class_count*sizeof(float)); - - for (int i=0; ipredict(_sample, _missing)->value); - sum[i] += params.shrinkage * p; - if (weak_responses) - weak_responses->data.fl[i*weak_count+j] = p; - } - } - } - - for (int i=0; i=0) && (k max) - { - max = sum[i]; - class_label = i; - } - - delete[] sum; - - /* - int orig_class_label = -1; - for (int i=0; idata.i[i] == class_label+1) - orig_class_label = i; - */ - int orig_class_label = class_labels->data.i[class_label]; - - return float(orig_class_label); -} - - -class Tree_predictor : public cv::ParallelLoopBody -{ -private: - pCvSeq* weak; - float* sum; - const int k; - const CvMat* sample; - const CvMat* missing; - const float shrinkage; - - static cv::Mutex SumMutex; - - -public: - Tree_predictor() : weak(0), sum(0), k(0), sample(0), missing(0), shrinkage(1.0f) {} - Tree_predictor(pCvSeq* _weak, const int _k, const float _shrinkage, - const CvMat* _sample, const CvMat* _missing, float* _sum ) : - weak(_weak), sum(_sum), k(_k), sample(_sample), - missing(_missing), shrinkage(_shrinkage) - {} - - Tree_predictor( const Tree_predictor& p, cv::Split ) : - weak(p.weak), sum(p.sum), k(p.k), sample(p.sample), - missing(p.missing), shrinkage(p.shrinkage) - {} - - Tree_predictor& operator=( const Tree_predictor& ) - { return *this; } - - virtual void operator()(const cv::Range& range) const - { - CvSeqReader reader; - int begin = range.start; - int end = range.end; - - int weak_count = end - begin; - CvDTree* tree; - - for (int i=0; ipredict(sample, missing)->value); - } - } - - { - cv::AutoLock lock(SumMutex); - sum[i] += tmp_sum; - } - } - } // Tree_predictor::operator() - - virtual ~Tree_predictor() {} - -}; // class Tree_predictor - -cv::Mutex Tree_predictor::SumMutex; - - -float CvGBTrees::predict( const CvMat* _sample, const CvMat* _missing, - CvMat* /*weak_responses*/, CvSlice slice, int k) const - { - float result = 0.0f; - if (!weak) return 0.0f; - float* sum = new float[class_count]; - for (int i=0; i=0) && (k max) - { - max = sum[i]; - class_label = i; - } - - delete[] sum; - int orig_class_label = class_labels->data.i[class_label]; - - return float(orig_class_label); - } - - -//=========================================================================== - -void CvGBTrees::write_params( CvFileStorage* fs ) const -{ - const char* loss_function_type_str = - params.loss_function_type == SQUARED_LOSS ? "SquaredLoss" : - params.loss_function_type == ABSOLUTE_LOSS ? "AbsoluteLoss" : - params.loss_function_type == HUBER_LOSS ? "HuberLoss" : - params.loss_function_type == DEVIANCE_LOSS ? "DevianceLoss" : 0; - - - if( loss_function_type_str ) - cvWriteString( fs, "loss_function", loss_function_type_str ); - else - cvWriteInt( fs, "loss_function", params.loss_function_type ); - - cvWriteInt( fs, "ensemble_length", params.weak_count ); - cvWriteReal( fs, "shrinkage", params.shrinkage ); - cvWriteReal( fs, "subsample_portion", params.subsample_portion ); - //cvWriteInt( fs, "max_tree_depth", params.max_depth ); - //cvWriteString( fs, "use_surrogate_splits", params.use_surrogates ? "true" : "false"); - if (class_labels) cvWrite( fs, "class_labels", class_labels); - - data->is_classifier = !problem_type(); - data->write_params( fs ); - data->is_classifier = 0; -} - - -//=========================================================================== - -void CvGBTrees::read_params( CvFileStorage* fs, CvFileNode* fnode ) -{ - CV_FUNCNAME( "CvGBTrees::read_params" ); - __BEGIN__; - - - CvFileNode* temp; - - if( !fnode || !CV_NODE_IS_MAP(fnode->tag) ) - return; - - data = new CvDTreeTrainData(); - CV_CALL( data->read_params(fs, fnode)); - data->shared = true; - - params.max_depth = data->params.max_depth; - params.min_sample_count = data->params.min_sample_count; - params.max_categories = data->params.max_categories; - params.priors = data->params.priors; - params.regression_accuracy = data->params.regression_accuracy; - params.use_surrogates = data->params.use_surrogates; - - temp = cvGetFileNodeByName( fs, fnode, "loss_function" ); - if( !temp ) - EXIT; - - if( temp && CV_NODE_IS_STRING(temp->tag) ) - { - const char* loss_function_type_str = cvReadString( temp, "" ); - params.loss_function_type = strcmp( loss_function_type_str, "SquaredLoss" ) == 0 ? SQUARED_LOSS : - strcmp( loss_function_type_str, "AbsoluteLoss" ) == 0 ? ABSOLUTE_LOSS : - strcmp( loss_function_type_str, "HuberLoss" ) == 0 ? HUBER_LOSS : - strcmp( loss_function_type_str, "DevianceLoss" ) == 0 ? DEVIANCE_LOSS : -1; - } - else - params.loss_function_type = cvReadInt( temp, -1 ); - - - if( params.loss_function_type < SQUARED_LOSS || params.loss_function_type > DEVIANCE_LOSS || params.loss_function_type == 2) - CV_ERROR( CV_StsBadArg, "Unknown loss function" ); - - params.weak_count = cvReadIntByName( fs, fnode, "ensemble_length" ); - params.shrinkage = (float)cvReadRealByName( fs, fnode, "shrinkage", 0.1 ); - params.subsample_portion = (float)cvReadRealByName( fs, fnode, "subsample_portion", 1.0 ); - - if (data->is_classifier) - { - class_labels = (CvMat*)cvReadByName( fs, fnode, "class_labels" ); - if( class_labels && !CV_IS_MAT(class_labels)) - CV_ERROR( CV_StsParseError, "class_labels must stored as a matrix"); - } - data->is_classifier = 0; - - __END__; -} - - - - -void CvGBTrees::write( CvFileStorage* fs, const char* name ) const -{ - CV_FUNCNAME( "CvGBTrees::write" ); - - __BEGIN__; - - CvSeqReader reader; - int i; - std::string s; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_GBT ); - - if( !weak ) - CV_ERROR( CV_StsBadArg, "The model has not been trained yet" ); - - write_params( fs ); - cvWriteReal( fs, "base_value", base_value); - cvWriteInt( fs, "class_count", class_count); - - for ( int j=0; j < class_count; ++j ) - { - s = "trees_"; - s += ToString(j); - cvStartWriteStruct( fs, s.c_str(), CV_NODE_SEQ ); - - cvStartReadSeq( weak[j], &reader ); - - for( i = 0; i < weak[j]->total; i++ ) - { - CvDTree* tree; - CV_READ_SEQ_ELEM( tree, reader ); - cvStartWriteStruct( fs, 0, CV_NODE_MAP ); - tree->write( fs ); - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); - - __END__; -} - - -//=========================================================================== - - -void CvGBTrees::read( CvFileStorage* fs, CvFileNode* node ) -{ - - CV_FUNCNAME( "CvGBTrees::read" ); - - __BEGIN__; - - CvSeqReader reader; - CvFileNode* trees_fnode; - CvMemStorage* storage; - int i, ntrees; - std::string s; - - clear(); - read_params( fs, node ); - - if( !data ) - EXIT; - - base_value = (float)cvReadRealByName( fs, node, "base_value", 0.0 ); - class_count = cvReadIntByName( fs, node, "class_count", 1 ); - - weak = new pCvSeq[class_count]; - - - for (int j=0; jtag) ) - CV_ERROR( CV_StsParseError, " tag is missing" ); - - cvStartReadSeq( trees_fnode->data.seq, &reader ); - ntrees = trees_fnode->data.seq->total; - - if( ntrees != params.weak_count ) - CV_ERROR( CV_StsUnmatchedSizes, - "The number of trees stored does not match tag value" ); - - CV_CALL( storage = cvCreateMemStorage() ); - weak[j] = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvDTree*), storage ); - - for( i = 0; i < ntrees; i++ ) - { - CvDTree* tree = new CvDTree(); - CV_CALL(tree->read( fs, (CvFileNode*)reader.ptr, data )); - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - cvSeqPush( weak[j], &tree ); - } - } - - __END__; -} - -//=========================================================================== - -class Sample_predictor : public cv::ParallelLoopBody -{ -private: - const CvGBTrees* gbt; - float* predictions; - const CvMat* samples; - const CvMat* missing; - const CvMat* idx; - CvSlice slice; - -public: - Sample_predictor() : gbt(0), predictions(0), samples(0), missing(0), - idx(0), slice(CV_WHOLE_SEQ) - {} - - Sample_predictor(const CvGBTrees* _gbt, float* _predictions, - const CvMat* _samples, const CvMat* _missing, - const CvMat* _idx, CvSlice _slice=CV_WHOLE_SEQ) : - gbt(_gbt), predictions(_predictions), samples(_samples), - missing(_missing), idx(_idx), slice(_slice) - {} - - - Sample_predictor( const Sample_predictor& p, cv::Split ) : - gbt(p.gbt), predictions(p.predictions), - samples(p.samples), missing(p.missing), idx(p.idx), - slice(p.slice) - {} - - - virtual void operator()(const cv::Range& range) const - { - int begin = range.start; - int end = range.end; - - CvMat x; - CvMat miss; - - for (int i=begin; idata.i[i] : i; - cvGetRow(samples, &x, j); - if (!missing) - { - predictions[i] = gbt->predict_serial(&x,0,0,slice); - } - else - { - cvGetRow(missing, &miss, j); - predictions[i] = gbt->predict_serial(&x,&miss,0,slice); - } - } - } // Sample_predictor::operator() - - virtual ~Sample_predictor() {} - -}; // class Sample_predictor - - - -// type in {CV_TRAIN_ERROR, CV_TEST_ERROR} -float -CvGBTrees::calc_error( CvMLData* _data, int type, std::vector *resp ) -{ - - float err = 0.0f; - const CvMat* _sample_idx = (type == CV_TRAIN_ERROR) ? - _data->get_train_sample_idx() : - _data->get_test_sample_idx(); - const CvMat* response = _data->get_responses(); - - int n = _sample_idx ? get_len(_sample_idx) : 0; - n = (type == CV_TRAIN_ERROR && n == 0) ? _data->get_values()->rows : n; - - if (!n) - return -FLT_MAX; - - float* pred_resp = 0; - if (resp) - { - resp->resize(n); - pred_resp = &((*resp)[0]); - } - else - pred_resp = new float[n]; - - Sample_predictor predictor = Sample_predictor(this, pred_resp, _data->get_values(), - _data->get_missing(), _sample_idx); - - cv::parallel_for_(cv::Range(0,n), predictor); - - int* sidx = _sample_idx ? _sample_idx->data.i : 0; - int r_step = CV_IS_MAT_CONT(response->type) ? - 1 : response->step / CV_ELEM_SIZE(response->type); - - - if ( !problem_type() ) - { - for( int i = 0; i < n; i++ ) - { - int si = sidx ? sidx[i] : i; - int d = fabs((double)pred_resp[i] - response->data.fl[si*r_step]) <= FLT_EPSILON ? 0 : 1; - err += d; - } - err = err / (float)n * 100.0f; - } - else - { - for( int i = 0; i < n; i++ ) - { - int si = sidx ? sidx[i] : i; - float d = pred_resp[i] - response->data.fl[si*r_step]; - err += d*d; - } - err = err / (float)n; - } - - return err; -} - - -CvGBTrees::CvGBTrees( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx, - const cv::Mat& sampleIdx, const cv::Mat& varType, - const cv::Mat& missingDataMask, - CvGBTreesParams _params ) -{ - data = 0; - weak = 0; - default_model_name = "my_boost_tree"; - orig_response = sum_response = sum_response_tmp = 0; - subsample_train = subsample_test = 0; - missing = sample_idx = 0; - class_labels = 0; - class_count = 1; - delta = 0.0f; - - clear(); - - train(trainData, tflag, responses, varIdx, sampleIdx, varType, missingDataMask, _params, false); -} - -bool CvGBTrees::train( const cv::Mat& trainData, int tflag, - const cv::Mat& responses, const cv::Mat& varIdx, - const cv::Mat& sampleIdx, const cv::Mat& varType, - const cv::Mat& missingDataMask, - CvGBTreesParams _params, - bool update ) -{ - CvMat _trainData = trainData, _responses = responses; - CvMat _varIdx = varIdx, _sampleIdx = sampleIdx, _varType = varType; - CvMat _missingDataMask = missingDataMask; - - return train( &_trainData, tflag, &_responses, varIdx.empty() ? 0 : &_varIdx, - sampleIdx.empty() ? 0 : &_sampleIdx, varType.empty() ? 0 : &_varType, - missingDataMask.empty() ? 0 : &_missingDataMask, _params, update); -} - -float CvGBTrees::predict( const cv::Mat& sample, const cv::Mat& _missing, - const cv::Range& slice, int k ) const -{ - CvMat _sample = sample, miss = _missing; - return predict(&_sample, _missing.empty() ? 0 : &miss, 0, - slice==cv::Range::all() ? CV_WHOLE_SEQ : cvSlice(slice.start, slice.end), k); -} diff --git a/modules/ml/src/inner_functions.cpp b/modules/ml/src/inner_functions.cpp deleted file mode 100644 index f0e085d..0000000 --- a/modules/ml/src/inner_functions.cpp +++ /dev/null @@ -1,1879 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - - -CvStatModel::CvStatModel() -{ - default_model_name = "my_stat_model"; -} - - -CvStatModel::~CvStatModel() -{ - clear(); -} - - -void CvStatModel::clear() -{ -} - - -void CvStatModel::save( const char* filename, const char* name ) const -{ - CvFileStorage* fs = 0; - - CV_FUNCNAME( "CvStatModel::save" ); - - __BEGIN__; - - CV_CALL( fs = cvOpenFileStorage( filename, 0, CV_STORAGE_WRITE )); - if( !fs ) - CV_ERROR( CV_StsError, "Could not open the file storage. Check the path and permissions" ); - - write( fs, name ? name : default_model_name ); - - __END__; - - cvReleaseFileStorage( &fs ); -} - - -void CvStatModel::load( const char* filename, const char* name ) -{ - CvFileStorage* fs = 0; - - CV_FUNCNAME( "CvStatModel::load" ); - - __BEGIN__; - - CvFileNode* model_node = 0; - - CV_CALL( fs = cvOpenFileStorage( filename, 0, CV_STORAGE_READ )); - if( !fs ) - EXIT; - - if( name ) - model_node = cvGetFileNodeByName( fs, 0, name ); - else - { - CvFileNode* root = cvGetRootFileNode( fs ); - if( root->data.seq->total > 0 ) - model_node = (CvFileNode*)cvGetSeqElem( root->data.seq, 0 ); - } - - read( fs, model_node ); - - __END__; - - cvReleaseFileStorage( &fs ); -} - - -void CvStatModel::write( CvFileStorage*, const char* ) const -{ - OPENCV_ERROR( CV_StsNotImplemented, "CvStatModel::write", "" ); -} - - -void CvStatModel::read( CvFileStorage*, CvFileNode* ) -{ - OPENCV_ERROR( CV_StsNotImplemented, "CvStatModel::read", "" ); -} - - -/* Calculates upper triangular matrix S, where A is a symmetrical matrix A=S'*S */ -static void cvChol( CvMat* A, CvMat* S ) -{ - int dim = A->rows; - - int i, j, k; - float sum; - - for( i = 0; i < dim; i++ ) - { - for( j = 0; j < i; j++ ) - CV_MAT_ELEM(*S, float, i, j) = 0; - - sum = 0; - for( k = 0; k < i; k++ ) - sum += CV_MAT_ELEM(*S, float, k, i) * CV_MAT_ELEM(*S, float, k, i); - - CV_MAT_ELEM(*S, float, i, i) = (float)sqrt(CV_MAT_ELEM(*A, float, i, i) - sum); - - for( j = i + 1; j < dim; j++ ) - { - sum = 0; - for( k = 0; k < i; k++ ) - sum += CV_MAT_ELEM(*S, float, k, i) * CV_MAT_ELEM(*S, float, k, j); - - CV_MAT_ELEM(*S, float, i, j) = - (CV_MAT_ELEM(*A, float, i, j) - sum) / CV_MAT_ELEM(*S, float, i, i); - - } - } -} - -/* Generates from multivariate normal distribution, where - is an - average row vector, - symmetric covariation matrix */ -CV_IMPL void cvRandMVNormal( CvMat* mean, CvMat* cov, CvMat* sample, CvRNG* rng ) -{ - int dim = sample->cols; - int amount = sample->rows; - - CvRNG state = rng ? *rng : cvRNG( cvGetTickCount() ); - cvRandArr(&state, sample, CV_RAND_NORMAL, cvScalarAll(0), cvScalarAll(1) ); - - CvMat* utmat = cvCreateMat(dim, dim, sample->type); - CvMat* vect = cvCreateMatHeader(1, dim, sample->type); - - cvChol(cov, utmat); - - int i; - for( i = 0; i < amount; i++ ) - { - cvGetRow(sample, vect, i); - cvMatMulAdd(vect, utmat, mean, vect); - } - - cvReleaseMat(&vect); - cvReleaseMat(&utmat); -} - - -/* Generates of points from a discrete variate xi, - where Pr{xi = k} == probs[k], 0 < k < len - 1. */ -static void cvRandSeries( float probs[], int len, int sample[], int amount ) -{ - CvMat* univals = cvCreateMat(1, amount, CV_32FC1); - float* knots = (float*)cvAlloc( len * sizeof(float) ); - - int i, j; - - CvRNG state = cvRNG(-1); - cvRandArr(&state, univals, CV_RAND_UNI, cvScalarAll(0), cvScalarAll(1) ); - - knots[0] = probs[0]; - for( i = 1; i < len; i++ ) - knots[i] = knots[i - 1] + probs[i]; - - for( i = 0; i < amount; i++ ) - for( j = 0; j < len; j++ ) - { - if ( CV_MAT_ELEM(*univals, float, 0, i) <= knots[j] ) - { - sample[i] = j; - break; - } - } - - cvFree(&knots); -} - -/* Generates from gaussian mixture distribution */ -CV_IMPL void cvRandGaussMixture( CvMat* means[], - CvMat* covs[], - float weights[], - int clsnum, - CvMat* sample, - CvMat* sampClasses ) -{ - int dim = sample->cols; - int amount = sample->rows; - - int i, clss; - - int* sample_clsnum = (int*)cvAlloc( amount * sizeof(int) ); - CvMat** utmats = (CvMat**)cvAlloc( clsnum * sizeof(CvMat*) ); - CvMat* vect = cvCreateMatHeader(1, dim, CV_32FC1); - - CvMat* classes; - if( sampClasses ) - classes = sampClasses; - else - classes = cvCreateMat(1, amount, CV_32FC1); - - CvRNG state = cvRNG(-1); - cvRandArr(&state, sample, CV_RAND_NORMAL, cvScalarAll(0), cvScalarAll(1)); - - cvRandSeries(weights, clsnum, sample_clsnum, amount); - - for( i = 0; i < clsnum; i++ ) - { - utmats[i] = cvCreateMat(dim, dim, CV_32FC1); - cvChol(covs[i], utmats[i]); - } - - for( i = 0; i < amount; i++ ) - { - CV_MAT_ELEM(*classes, float, 0, i) = (float)sample_clsnum[i]; - cvGetRow(sample, vect, i); - clss = sample_clsnum[i]; - cvMatMulAdd(vect, utmats[clss], means[clss], vect); - } - - if( !sampClasses ) - cvReleaseMat(&classes); - for( i = 0; i < clsnum; i++ ) - cvReleaseMat(&utmats[i]); - cvFree(&utmats); - cvFree(&sample_clsnum); - cvReleaseMat(&vect); -} - - -CvMat* icvGenerateRandomClusterCenters ( int seed, const CvMat* data, - int num_of_clusters, CvMat* _centers ) -{ - CvMat* centers = _centers; - - CV_FUNCNAME("icvGenerateRandomClusterCenters"); - __BEGIN__; - - CvRNG rng; - CvMat data_comp, centers_comp; - CvPoint minLoc, maxLoc; // Not used, just for function "cvMinMaxLoc" - double minVal, maxVal; - int i; - int dim = data ? data->cols : 0; - - if( ICV_IS_MAT_OF_TYPE(data, CV_32FC1) ) - { - if( _centers && !ICV_IS_MAT_OF_TYPE (_centers, CV_32FC1) ) - { - CV_ERROR(CV_StsBadArg,""); - } - else if( !_centers ) - CV_CALL(centers = cvCreateMat (num_of_clusters, dim, CV_32FC1)); - } - else if( ICV_IS_MAT_OF_TYPE(data, CV_64FC1) ) - { - if( _centers && !ICV_IS_MAT_OF_TYPE (_centers, CV_64FC1) ) - { - CV_ERROR(CV_StsBadArg,""); - } - else if( !_centers ) - CV_CALL(centers = cvCreateMat (num_of_clusters, dim, CV_64FC1)); - } - else - CV_ERROR (CV_StsBadArg,""); - - if( num_of_clusters < 1 ) - CV_ERROR (CV_StsBadArg,""); - - rng = cvRNG(seed); - for (i = 0; i < dim; i++) - { - CV_CALL(cvGetCol (data, &data_comp, i)); - CV_CALL(cvMinMaxLoc (&data_comp, &minVal, &maxVal, &minLoc, &maxLoc)); - CV_CALL(cvGetCol (centers, ¢ers_comp, i)); - CV_CALL(cvRandArr (&rng, ¢ers_comp, CV_RAND_UNI, cvScalarAll(minVal), cvScalarAll(maxVal))); - } - - __END__; - - if( (cvGetErrStatus () < 0) || (centers != _centers) ) - cvReleaseMat (¢ers); - - return _centers ? _centers : centers; -} // end of icvGenerateRandomClusterCenters - -// By S. Dilman - begin - - -#define ICV_RAND_MAX 4294967296 // == 2^32 - -// static void cvRandRoundUni (CvMat* center, -// float radius_small, -// float radius_large, -// CvMat* desired_matrix, -// CvRNG* rng_state_ptr) -// { -// float rad, norm, coefficient; -// int dim, size, i, j; -// CvMat *cov, sample; -// CvRNG rng_local; - -// CV_FUNCNAME("cvRandRoundUni"); -// __BEGIN__ - -// rng_local = *rng_state_ptr; - -// CV_ASSERT ((radius_small >= 0) && -// (radius_large > 0) && -// (radius_small <= radius_large)); -// CV_ASSERT (center && desired_matrix && rng_state_ptr); -// CV_ASSERT (center->rows == 1); -// CV_ASSERT (center->cols == desired_matrix->cols); - -// dim = desired_matrix->cols; -// size = desired_matrix->rows; -// cov = cvCreateMat (dim, dim, CV_32FC1); -// cvSetIdentity (cov); -// cvRandMVNormal (center, cov, desired_matrix, &rng_local); - -// for (i = 0; i < size; i++) -// { -// rad = (float)(cvRandReal(&rng_local)*(radius_large - radius_small) + radius_small); -// cvGetRow (desired_matrix, &sample, i); -// norm = (float) cvNorm (&sample, 0, CV_L2); -// coefficient = rad / norm; -// for (j = 0; j < dim; j++) -// CV_MAT_ELEM (sample, float, 0, j) *= coefficient; -// } - -// __END__ - -// } - -// By S. Dilman - end - - -static int CV_CDECL -icvCmpIntegers( const void* a, const void* b ) -{ - return *(const int*)a - *(const int*)b; -} - - -static int CV_CDECL -icvCmpIntegersPtr( const void* _a, const void* _b ) -{ - int a = **(const int**)_a; - int b = **(const int**)_b; - return (a < b ? -1 : 0)|(a > b); -} - - -static int icvCmpSparseVecElems( const void* a, const void* b ) -{ - return ((CvSparseVecElem32f*)a)->idx - ((CvSparseVecElem32f*)b)->idx; -} - - -CvMat* -cvPreprocessIndexArray( const CvMat* idx_arr, int data_arr_size, bool check_for_duplicates ) -{ - CvMat* idx = 0; - - CV_FUNCNAME( "cvPreprocessIndexArray" ); - - __BEGIN__; - - int i, idx_total, idx_selected = 0, step, type, prev = INT_MIN, is_sorted = 1; - uchar* srcb = 0; - int* srci = 0; - int* dsti; - - if( !CV_IS_MAT(idx_arr) ) - CV_ERROR( CV_StsBadArg, "Invalid index array" ); - - if( idx_arr->rows != 1 && idx_arr->cols != 1 ) - CV_ERROR( CV_StsBadSize, "the index array must be 1-dimensional" ); - - idx_total = idx_arr->rows + idx_arr->cols - 1; - srcb = idx_arr->data.ptr; - srci = idx_arr->data.i; - - type = CV_MAT_TYPE(idx_arr->type); - step = CV_IS_MAT_CONT(idx_arr->type) ? 1 : idx_arr->step/CV_ELEM_SIZE(type); - - switch( type ) - { - case CV_8UC1: - case CV_8SC1: - // idx_arr is array of 1's and 0's - - // i.e. it is a mask of the selected components - if( idx_total != data_arr_size ) - CV_ERROR( CV_StsUnmatchedSizes, - "Component mask should contain as many elements as the total number of input variables" ); - - for( i = 0; i < idx_total; i++ ) - idx_selected += srcb[i*step] != 0; - - if( idx_selected == 0 ) - CV_ERROR( CV_StsOutOfRange, "No components/input_variables is selected!" ); - - break; - case CV_32SC1: - // idx_arr is array of integer indices of selected components - if( idx_total > data_arr_size ) - CV_ERROR( CV_StsOutOfRange, - "index array may not contain more elements than the total number of input variables" ); - idx_selected = idx_total; - // check if sorted already - for( i = 0; i < idx_total; i++ ) - { - int val = srci[i*step]; - if( val >= prev ) - { - is_sorted = 0; - break; - } - prev = val; - } - break; - default: - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported index array data type " - "(it should be 8uC1, 8sC1 or 32sC1)" ); - } - - CV_CALL( idx = cvCreateMat( 1, idx_selected, CV_32SC1 )); - dsti = idx->data.i; - - if( type < CV_32SC1 ) - { - for( i = 0; i < idx_total; i++ ) - if( srcb[i*step] ) - *dsti++ = i; - } - else - { - for( i = 0; i < idx_total; i++ ) - dsti[i] = srci[i*step]; - - if( !is_sorted ) - qsort( dsti, idx_total, sizeof(dsti[0]), icvCmpIntegers ); - - if( dsti[0] < 0 || dsti[idx_total-1] >= data_arr_size ) - CV_ERROR( CV_StsOutOfRange, "the index array elements are out of range" ); - - if( check_for_duplicates ) - { - for( i = 1; i < idx_total; i++ ) - if( dsti[i] <= dsti[i-1] ) - CV_ERROR( CV_StsBadArg, "There are duplicated index array elements" ); - } - } - - __END__; - - if( cvGetErrStatus() < 0 ) - cvReleaseMat( &idx ); - - return idx; -} - - -CvMat* -cvPreprocessVarType( const CvMat* var_type, const CvMat* var_idx, - int var_count, int* response_type ) -{ - CvMat* out_var_type = 0; - CV_FUNCNAME( "cvPreprocessVarType" ); - - if( response_type ) - *response_type = -1; - - __BEGIN__; - - int i, tm_size, tm_step; - //int* map = 0; - const uchar* src; - uchar* dst; - - if( !CV_IS_MAT(var_type) ) - CV_ERROR( var_type ? CV_StsBadArg : CV_StsNullPtr, "Invalid or absent var_type array" ); - - if( var_type->rows != 1 && var_type->cols != 1 ) - CV_ERROR( CV_StsBadSize, "var_type array must be 1-dimensional" ); - - if( !CV_IS_MASK_ARR(var_type)) - CV_ERROR( CV_StsUnsupportedFormat, "type mask must be 8uC1 or 8sC1 array" ); - - tm_size = var_type->rows + var_type->cols - 1; - tm_step = var_type->rows == 1 ? 1 : var_type->step/CV_ELEM_SIZE(var_type->type); - - if( /*tm_size != var_count &&*/ tm_size != var_count + 1 ) - CV_ERROR( CV_StsBadArg, - "type mask must be of + 1 size" ); - - if( response_type && tm_size > var_count ) - *response_type = var_type->data.ptr[var_count*tm_step] != 0; - - if( var_idx ) - { - if( !CV_IS_MAT(var_idx) || CV_MAT_TYPE(var_idx->type) != CV_32SC1 || - (var_idx->rows != 1 && var_idx->cols != 1) || !CV_IS_MAT_CONT(var_idx->type) ) - CV_ERROR( CV_StsBadArg, "var index array should be continuous 1-dimensional integer vector" ); - if( var_idx->rows + var_idx->cols - 1 > var_count ) - CV_ERROR( CV_StsBadSize, "var index array is too large" ); - //map = var_idx->data.i; - var_count = var_idx->rows + var_idx->cols - 1; - } - - CV_CALL( out_var_type = cvCreateMat( 1, var_count, CV_8UC1 )); - src = var_type->data.ptr; - dst = out_var_type->data.ptr; - - for( i = 0; i < var_count; i++ ) - { - //int idx = map ? map[i] : i; - assert( (unsigned)/*idx*/i < (unsigned)tm_size ); - dst[i] = (uchar)(src[/*idx*/i*tm_step] != 0); - } - - __END__; - - return out_var_type; -} - - -CvMat* -cvPreprocessOrderedResponses( const CvMat* responses, const CvMat* sample_idx, int sample_all ) -{ - CvMat* out_responses = 0; - - CV_FUNCNAME( "cvPreprocessOrderedResponses" ); - - __BEGIN__; - - int i, r_type, r_step; - const int* map = 0; - float* dst; - int sample_count = sample_all; - - if( !CV_IS_MAT(responses) ) - CV_ERROR( CV_StsBadArg, "Invalid response array" ); - - if( responses->rows != 1 && responses->cols != 1 ) - CV_ERROR( CV_StsBadSize, "Response array must be 1-dimensional" ); - - if( responses->rows + responses->cols - 1 != sample_count ) - CV_ERROR( CV_StsUnmatchedSizes, - "Response array must contain as many elements as the total number of samples" ); - - r_type = CV_MAT_TYPE(responses->type); - if( r_type != CV_32FC1 && r_type != CV_32SC1 ) - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported response type" ); - - r_step = responses->step ? responses->step / CV_ELEM_SIZE(responses->type) : 1; - - if( r_type == CV_32FC1 && CV_IS_MAT_CONT(responses->type) && !sample_idx ) - { - out_responses = cvCloneMat( responses ); - EXIT; - } - - if( sample_idx ) - { - if( !CV_IS_MAT(sample_idx) || CV_MAT_TYPE(sample_idx->type) != CV_32SC1 || - (sample_idx->rows != 1 && sample_idx->cols != 1) || !CV_IS_MAT_CONT(sample_idx->type) ) - CV_ERROR( CV_StsBadArg, "sample index array should be continuous 1-dimensional integer vector" ); - if( sample_idx->rows + sample_idx->cols - 1 > sample_count ) - CV_ERROR( CV_StsBadSize, "sample index array is too large" ); - map = sample_idx->data.i; - sample_count = sample_idx->rows + sample_idx->cols - 1; - } - - CV_CALL( out_responses = cvCreateMat( 1, sample_count, CV_32FC1 )); - - dst = out_responses->data.fl; - if( r_type == CV_32FC1 ) - { - const float* src = responses->data.fl; - for( i = 0; i < sample_count; i++ ) - { - int idx = map ? map[i] : i; - assert( (unsigned)idx < (unsigned)sample_all ); - dst[i] = src[idx*r_step]; - } - } - else - { - const int* src = responses->data.i; - for( i = 0; i < sample_count; i++ ) - { - int idx = map ? map[i] : i; - assert( (unsigned)idx < (unsigned)sample_all ); - dst[i] = (float)src[idx*r_step]; - } - } - - __END__; - - return out_responses; -} - -CvMat* -cvPreprocessCategoricalResponses( const CvMat* responses, - const CvMat* sample_idx, int sample_all, - CvMat** out_response_map, CvMat** class_counts ) -{ - CvMat* out_responses = 0; - int** response_ptr = 0; - - CV_FUNCNAME( "cvPreprocessCategoricalResponses" ); - - if( out_response_map ) - *out_response_map = 0; - - if( class_counts ) - *class_counts = 0; - - __BEGIN__; - - int i, r_type, r_step; - int cls_count = 1, prev_cls, prev_i; - const int* map = 0; - const int* srci; - const float* srcfl; - int* dst; - int* cls_map; - int* cls_counts = 0; - int sample_count = sample_all; - - if( !CV_IS_MAT(responses) ) - CV_ERROR( CV_StsBadArg, "Invalid response array" ); - - if( responses->rows != 1 && responses->cols != 1 ) - CV_ERROR( CV_StsBadSize, "Response array must be 1-dimensional" ); - - if( responses->rows + responses->cols - 1 != sample_count ) - CV_ERROR( CV_StsUnmatchedSizes, - "Response array must contain as many elements as the total number of samples" ); - - r_type = CV_MAT_TYPE(responses->type); - if( r_type != CV_32FC1 && r_type != CV_32SC1 ) - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported response type" ); - - r_step = responses->rows == 1 ? 1 : responses->step / CV_ELEM_SIZE(responses->type); - - if( sample_idx ) - { - if( !CV_IS_MAT(sample_idx) || CV_MAT_TYPE(sample_idx->type) != CV_32SC1 || - (sample_idx->rows != 1 && sample_idx->cols != 1) || !CV_IS_MAT_CONT(sample_idx->type) ) - CV_ERROR( CV_StsBadArg, "sample index array should be continuous 1-dimensional integer vector" ); - if( sample_idx->rows + sample_idx->cols - 1 > sample_count ) - CV_ERROR( CV_StsBadSize, "sample index array is too large" ); - map = sample_idx->data.i; - sample_count = sample_idx->rows + sample_idx->cols - 1; - } - - CV_CALL( out_responses = cvCreateMat( 1, sample_count, CV_32SC1 )); - - if( !out_response_map ) - CV_ERROR( CV_StsNullPtr, "out_response_map pointer is NULL" ); - - CV_CALL( response_ptr = (int**)cvAlloc( sample_count*sizeof(response_ptr[0]))); - - srci = responses->data.i; - srcfl = responses->data.fl; - dst = out_responses->data.i; - - for( i = 0; i < sample_count; i++ ) - { - int idx = map ? map[i] : i; - assert( (unsigned)idx < (unsigned)sample_all ); - if( r_type == CV_32SC1 ) - dst[i] = srci[idx*r_step]; - else - { - float rf = srcfl[idx*r_step]; - int ri = cvRound(rf); - if( ri != rf ) - { - char buf[100]; - sprintf( buf, "response #%d is not integral", idx ); - CV_ERROR( CV_StsBadArg, buf ); - } - dst[i] = ri; - } - response_ptr[i] = dst + i; - } - - qsort( response_ptr, sample_count, sizeof(int*), icvCmpIntegersPtr ); - - // count the classes - for( i = 1; i < sample_count; i++ ) - cls_count += *response_ptr[i] != *response_ptr[i-1]; - - if( cls_count < 2 ) - CV_ERROR( CV_StsBadArg, "There is only a single class" ); - - CV_CALL( *out_response_map = cvCreateMat( 1, cls_count, CV_32SC1 )); - - if( class_counts ) - { - CV_CALL( *class_counts = cvCreateMat( 1, cls_count, CV_32SC1 )); - cls_counts = (*class_counts)->data.i; - } - - // compact the class indices and build the map - prev_cls = ~*response_ptr[0]; - cls_count = -1; - cls_map = (*out_response_map)->data.i; - - for( i = 0, prev_i = -1; i < sample_count; i++ ) - { - int cur_cls = *response_ptr[i]; - if( cur_cls != prev_cls ) - { - if( cls_counts && cls_count >= 0 ) - cls_counts[cls_count] = i - prev_i; - cls_map[++cls_count] = prev_cls = cur_cls; - prev_i = i; - } - *response_ptr[i] = cls_count; - } - - if( cls_counts ) - cls_counts[cls_count] = i - prev_i; - - __END__; - - cvFree( &response_ptr ); - - return out_responses; -} - - -const float** -cvGetTrainSamples( const CvMat* train_data, int tflag, - const CvMat* var_idx, const CvMat* sample_idx, - int* _var_count, int* _sample_count, - bool always_copy_data ) -{ - float** samples = 0; - - CV_FUNCNAME( "cvGetTrainSamples" ); - - __BEGIN__; - - int i, j, var_count, sample_count, s_step, v_step; - bool copy_data; - const float* data; - const int *s_idx, *v_idx; - - if( !CV_IS_MAT(train_data) ) - CV_ERROR( CV_StsBadArg, "Invalid or NULL training data matrix" ); - - var_count = var_idx ? var_idx->cols + var_idx->rows - 1 : - tflag == CV_ROW_SAMPLE ? train_data->cols : train_data->rows; - sample_count = sample_idx ? sample_idx->cols + sample_idx->rows - 1 : - tflag == CV_ROW_SAMPLE ? train_data->rows : train_data->cols; - - if( _var_count ) - *_var_count = var_count; - - if( _sample_count ) - *_sample_count = sample_count; - - copy_data = tflag != CV_ROW_SAMPLE || var_idx || always_copy_data; - - CV_CALL( samples = (float**)cvAlloc(sample_count*sizeof(samples[0]) + - (copy_data ? 1 : 0)*var_count*sample_count*sizeof(samples[0][0])) ); - data = train_data->data.fl; - s_step = train_data->step / sizeof(samples[0][0]); - v_step = 1; - s_idx = sample_idx ? sample_idx->data.i : 0; - v_idx = var_idx ? var_idx->data.i : 0; - - if( !copy_data ) - { - for( i = 0; i < sample_count; i++ ) - samples[i] = (float*)(data + (s_idx ? s_idx[i] : i)*s_step); - } - else - { - samples[0] = (float*)(samples + sample_count); - if( tflag != CV_ROW_SAMPLE ) - CV_SWAP( s_step, v_step, i ); - - for( i = 0; i < sample_count; i++ ) - { - float* dst = samples[i] = samples[0] + i*var_count; - const float* src = data + (s_idx ? s_idx[i] : i)*s_step; - - if( !v_idx ) - for( j = 0; j < var_count; j++ ) - dst[j] = src[j*v_step]; - else - for( j = 0; j < var_count; j++ ) - dst[j] = src[v_idx[j]*v_step]; - } - } - - __END__; - - return (const float**)samples; -} - - -void -cvCheckTrainData( const CvMat* train_data, int tflag, - const CvMat* missing_mask, - int* var_all, int* sample_all ) -{ - CV_FUNCNAME( "cvCheckTrainData" ); - - if( var_all ) - *var_all = 0; - - if( sample_all ) - *sample_all = 0; - - __BEGIN__; - - // check parameter types and sizes - if( !CV_IS_MAT(train_data) || CV_MAT_TYPE(train_data->type) != CV_32FC1 ) - CV_ERROR( CV_StsBadArg, "train data must be floating-point matrix" ); - - if( missing_mask ) - { - if( !CV_IS_MAT(missing_mask) || !CV_IS_MASK_ARR(missing_mask) || - !CV_ARE_SIZES_EQ(train_data, missing_mask) ) - CV_ERROR( CV_StsBadArg, - "missing value mask must be 8-bit matrix of the same size as training data" ); - } - - if( tflag != CV_ROW_SAMPLE && tflag != CV_COL_SAMPLE ) - CV_ERROR( CV_StsBadArg, - "Unknown training data layout (must be CV_ROW_SAMPLE or CV_COL_SAMPLE)" ); - - if( var_all ) - *var_all = tflag == CV_ROW_SAMPLE ? train_data->cols : train_data->rows; - - if( sample_all ) - *sample_all = tflag == CV_ROW_SAMPLE ? train_data->rows : train_data->cols; - - __END__; -} - - -int -cvPrepareTrainData( const char* /*funcname*/, - const CvMat* train_data, int tflag, - const CvMat* responses, int response_type, - const CvMat* var_idx, - const CvMat* sample_idx, - bool always_copy_data, - const float*** out_train_samples, - int* _sample_count, - int* _var_count, - int* _var_all, - CvMat** out_responses, - CvMat** out_response_map, - CvMat** out_var_idx, - CvMat** out_sample_idx ) -{ - int ok = 0; - CvMat* _var_idx = 0; - CvMat* _sample_idx = 0; - CvMat* _responses = 0; - int sample_all = 0, sample_count = 0, var_all = 0, var_count = 0; - - CV_FUNCNAME( "cvPrepareTrainData" ); - - // step 0. clear all the output pointers to ensure we do not try - // to call free() with uninitialized pointers - if( out_responses ) - *out_responses = 0; - - if( out_response_map ) - *out_response_map = 0; - - if( out_var_idx ) - *out_var_idx = 0; - - if( out_sample_idx ) - *out_sample_idx = 0; - - if( out_train_samples ) - *out_train_samples = 0; - - if( _sample_count ) - *_sample_count = 0; - - if( _var_count ) - *_var_count = 0; - - if( _var_all ) - *_var_all = 0; - - __BEGIN__; - - if( !out_train_samples ) - CV_ERROR( CV_StsBadArg, "output pointer to train samples is NULL" ); - - CV_CALL( cvCheckTrainData( train_data, tflag, 0, &var_all, &sample_all )); - - if( sample_idx ) - CV_CALL( _sample_idx = cvPreprocessIndexArray( sample_idx, sample_all )); - if( var_idx ) - CV_CALL( _var_idx = cvPreprocessIndexArray( var_idx, var_all )); - - if( responses ) - { - if( !out_responses ) - CV_ERROR( CV_StsNullPtr, "output response pointer is NULL" ); - - if( response_type == CV_VAR_NUMERICAL ) - { - CV_CALL( _responses = cvPreprocessOrderedResponses( responses, - _sample_idx, sample_all )); - } - else - { - CV_CALL( _responses = cvPreprocessCategoricalResponses( responses, - _sample_idx, sample_all, out_response_map, 0 )); - } - } - - CV_CALL( *out_train_samples = - cvGetTrainSamples( train_data, tflag, _var_idx, _sample_idx, - &var_count, &sample_count, always_copy_data )); - - ok = 1; - - __END__; - - if( ok ) - { - if( out_responses ) - *out_responses = _responses, _responses = 0; - - if( out_var_idx ) - *out_var_idx = _var_idx, _var_idx = 0; - - if( out_sample_idx ) - *out_sample_idx = _sample_idx, _sample_idx = 0; - - if( _sample_count ) - *_sample_count = sample_count; - - if( _var_count ) - *_var_count = var_count; - - if( _var_all ) - *_var_all = var_all; - } - else - { - if( out_response_map ) - cvReleaseMat( out_response_map ); - cvFree( out_train_samples ); - } - - if( _responses != responses ) - cvReleaseMat( &_responses ); - cvReleaseMat( &_var_idx ); - cvReleaseMat( &_sample_idx ); - - return ok; -} - - -typedef struct CvSampleResponsePair -{ - const float* sample; - const uchar* mask; - int response; - int index; -} -CvSampleResponsePair; - - -static int -CV_CDECL icvCmpSampleResponsePairs( const void* a, const void* b ) -{ - int ra = ((const CvSampleResponsePair*)a)->response; - int rb = ((const CvSampleResponsePair*)b)->response; - int ia = ((const CvSampleResponsePair*)a)->index; - int ib = ((const CvSampleResponsePair*)b)->index; - - return ra < rb ? -1 : ra > rb ? 1 : ia - ib; - //return (ra > rb ? -1 : 0)|(ra < rb); -} - - -void -cvSortSamplesByClasses( const float** samples, const CvMat* classes, - int* class_ranges, const uchar** mask ) -{ - CvSampleResponsePair* pairs = 0; - CV_FUNCNAME( "cvSortSamplesByClasses" ); - - __BEGIN__; - - int i, k = 0, sample_count; - - if( !samples || !classes || !class_ranges ) - CV_ERROR( CV_StsNullPtr, "INTERNAL ERROR: some of the args are NULL pointers" ); - - if( classes->rows != 1 || CV_MAT_TYPE(classes->type) != CV_32SC1 ) - CV_ERROR( CV_StsBadArg, "classes array must be a single row of integers" ); - - sample_count = classes->cols; - CV_CALL( pairs = (CvSampleResponsePair*)cvAlloc( (sample_count+1)*sizeof(pairs[0]))); - - for( i = 0; i < sample_count; i++ ) - { - pairs[i].sample = samples[i]; - pairs[i].mask = (mask) ? (mask[i]) : 0; - pairs[i].response = classes->data.i[i]; - pairs[i].index = i; - assert( classes->data.i[i] >= 0 ); - } - - qsort( pairs, sample_count, sizeof(pairs[0]), icvCmpSampleResponsePairs ); - pairs[sample_count].response = -1; - class_ranges[0] = 0; - - for( i = 0; i < sample_count; i++ ) - { - samples[i] = pairs[i].sample; - if (mask) - mask[i] = pairs[i].mask; - classes->data.i[i] = pairs[i].response; - - if( pairs[i].response != pairs[i+1].response ) - class_ranges[++k] = i+1; - } - - __END__; - - cvFree( &pairs ); -} - - -void -cvPreparePredictData( const CvArr* _sample, int dims_all, - const CvMat* comp_idx, int class_count, - const CvMat* prob, float** _row_sample, - int as_sparse ) -{ - float* row_sample = 0; - int* inverse_comp_idx = 0; - - CV_FUNCNAME( "cvPreparePredictData" ); - - __BEGIN__; - - const CvMat* sample = (const CvMat*)_sample; - float* sample_data; - int sample_step; - int is_sparse = CV_IS_SPARSE_MAT(sample); - int d, sizes[CV_MAX_DIM]; - int i, dims_selected; - int vec_size; - - if( !is_sparse && !CV_IS_MAT(sample) ) - CV_ERROR( !sample ? CV_StsNullPtr : CV_StsBadArg, "The sample is not a valid vector" ); - - if( cvGetElemType( sample ) != CV_32FC1 ) - CV_ERROR( CV_StsUnsupportedFormat, "Input sample must have 32fC1 type" ); - - CV_CALL( d = cvGetDims( sample, sizes )); - - if( !((is_sparse && d == 1) || (!is_sparse && d == 2 && (sample->rows == 1 || sample->cols == 1))) ) - CV_ERROR( CV_StsBadSize, "Input sample must be 1-dimensional vector" ); - - if( d == 1 ) - sizes[1] = 1; - - if( sizes[0] + sizes[1] - 1 != dims_all ) - CV_ERROR( CV_StsUnmatchedSizes, - "The sample size is different from what has been used for training" ); - - if( !_row_sample ) - CV_ERROR( CV_StsNullPtr, "INTERNAL ERROR: The row_sample pointer is NULL" ); - - if( comp_idx && (!CV_IS_MAT(comp_idx) || comp_idx->rows != 1 || - CV_MAT_TYPE(comp_idx->type) != CV_32SC1) ) - CV_ERROR( CV_StsBadArg, "INTERNAL ERROR: invalid comp_idx" ); - - dims_selected = comp_idx ? comp_idx->cols : dims_all; - - if( prob ) - { - if( !CV_IS_MAT(prob) ) - CV_ERROR( CV_StsBadArg, "The output matrix of probabilities is invalid" ); - - if( (prob->rows != 1 && prob->cols != 1) || - (CV_MAT_TYPE(prob->type) != CV_32FC1 && - CV_MAT_TYPE(prob->type) != CV_64FC1) ) - CV_ERROR( CV_StsBadSize, - "The matrix of probabilities must be 1-dimensional vector of 32fC1 type" ); - - if( prob->rows + prob->cols - 1 != class_count ) - CV_ERROR( CV_StsUnmatchedSizes, - "The vector of probabilities must contain as many elements as " - "the number of classes in the training set" ); - } - - vec_size = !as_sparse ? dims_selected*sizeof(row_sample[0]) : - (dims_selected + 1)*sizeof(CvSparseVecElem32f); - - if( CV_IS_MAT(sample) ) - { - sample_data = sample->data.fl; - sample_step = CV_IS_MAT_CONT(sample->type) ? 1 : sample->step/sizeof(row_sample[0]); - - if( !comp_idx && CV_IS_MAT_CONT(sample->type) && !as_sparse ) - *_row_sample = sample_data; - else - { - CV_CALL( row_sample = (float*)cvAlloc( vec_size )); - - if( !comp_idx ) - for( i = 0; i < dims_selected; i++ ) - row_sample[i] = sample_data[sample_step*i]; - else - { - int* comp = comp_idx->data.i; - for( i = 0; i < dims_selected; i++ ) - row_sample[i] = sample_data[sample_step*comp[i]]; - } - - *_row_sample = row_sample; - } - - if( as_sparse ) - { - const float* src = (const float*)row_sample; - CvSparseVecElem32f* dst = (CvSparseVecElem32f*)row_sample; - - dst[dims_selected].idx = -1; - for( i = dims_selected - 1; i >= 0; i-- ) - { - dst[i].idx = i; - dst[i].val = src[i]; - } - } - } - else - { - CvSparseNode* node; - CvSparseMatIterator mat_iterator; - const CvSparseMat* sparse = (const CvSparseMat*)sample; - assert( is_sparse ); - - node = cvInitSparseMatIterator( sparse, &mat_iterator ); - CV_CALL( row_sample = (float*)cvAlloc( vec_size )); - - if( comp_idx ) - { - CV_CALL( inverse_comp_idx = (int*)cvAlloc( dims_all*sizeof(int) )); - memset( inverse_comp_idx, -1, dims_all*sizeof(int) ); - for( i = 0; i < dims_selected; i++ ) - inverse_comp_idx[comp_idx->data.i[i]] = i; - } - - if( !as_sparse ) - { - memset( row_sample, 0, vec_size ); - - for( ; node != 0; node = cvGetNextSparseNode(&mat_iterator) ) - { - int idx = *CV_NODE_IDX( sparse, node ); - if( inverse_comp_idx ) - { - idx = inverse_comp_idx[idx]; - if( idx < 0 ) - continue; - } - row_sample[idx] = *(float*)CV_NODE_VAL( sparse, node ); - } - } - else - { - CvSparseVecElem32f* ptr = (CvSparseVecElem32f*)row_sample; - - for( ; node != 0; node = cvGetNextSparseNode(&mat_iterator) ) - { - int idx = *CV_NODE_IDX( sparse, node ); - if( inverse_comp_idx ) - { - idx = inverse_comp_idx[idx]; - if( idx < 0 ) - continue; - } - ptr->idx = idx; - ptr->val = *(float*)CV_NODE_VAL( sparse, node ); - ptr++; - } - - qsort( row_sample, ptr - (CvSparseVecElem32f*)row_sample, - sizeof(ptr[0]), icvCmpSparseVecElems ); - ptr->idx = -1; - } - - *_row_sample = row_sample; - } - - __END__; - - if( inverse_comp_idx ) - cvFree( &inverse_comp_idx ); - - if( cvGetErrStatus() < 0 && _row_sample ) - { - cvFree( &row_sample ); - *_row_sample = 0; - } -} - - -static void -icvConvertDataToSparse( const uchar* src, int src_step, int src_type, - uchar* dst, int dst_step, int dst_type, - CvSize size, int* idx ) -{ - CV_FUNCNAME( "icvConvertDataToSparse" ); - - __BEGIN__; - - int i, j; - src_type = CV_MAT_TYPE(src_type); - dst_type = CV_MAT_TYPE(dst_type); - - if( CV_MAT_CN(src_type) != 1 || CV_MAT_CN(dst_type) != 1 ) - CV_ERROR( CV_StsUnsupportedFormat, "The function supports only single-channel arrays" ); - - if( src_step == 0 ) - src_step = CV_ELEM_SIZE(src_type); - - if( dst_step == 0 ) - dst_step = CV_ELEM_SIZE(dst_type); - - // if there is no "idx" and if both arrays are continuous, - // do the whole processing (copying or conversion) in a single loop - if( !idx && CV_ELEM_SIZE(src_type)*size.width == src_step && - CV_ELEM_SIZE(dst_type)*size.width == dst_step ) - { - size.width *= size.height; - size.height = 1; - } - - if( src_type == dst_type ) - { - int full_width = CV_ELEM_SIZE(dst_type)*size.width; - - if( full_width == sizeof(int) ) // another common case: copy int's or float's - for( i = 0; i < size.height; i++, src += src_step ) - *(int*)(dst + dst_step*(idx ? idx[i] : i)) = *(int*)src; - else - for( i = 0; i < size.height; i++, src += src_step ) - memcpy( dst + dst_step*(idx ? idx[i] : i), src, full_width ); - } - else if( src_type == CV_32SC1 && (dst_type == CV_32FC1 || dst_type == CV_64FC1) ) - for( i = 0; i < size.height; i++, src += src_step ) - { - uchar* _dst = dst + dst_step*(idx ? idx[i] : i); - if( dst_type == CV_32FC1 ) - for( j = 0; j < size.width; j++ ) - ((float*)_dst)[j] = (float)((int*)src)[j]; - else - for( j = 0; j < size.width; j++ ) - ((double*)_dst)[j] = ((int*)src)[j]; - } - else if( (src_type == CV_32FC1 || src_type == CV_64FC1) && dst_type == CV_32SC1 ) - for( i = 0; i < size.height; i++, src += src_step ) - { - uchar* _dst = dst + dst_step*(idx ? idx[i] : i); - if( src_type == CV_32FC1 ) - for( j = 0; j < size.width; j++ ) - ((int*)_dst)[j] = cvRound(((float*)src)[j]); - else - for( j = 0; j < size.width; j++ ) - ((int*)_dst)[j] = cvRound(((double*)src)[j]); - } - else if( (src_type == CV_32FC1 && dst_type == CV_64FC1) || - (src_type == CV_64FC1 && dst_type == CV_32FC1) ) - for( i = 0; i < size.height; i++, src += src_step ) - { - uchar* _dst = dst + dst_step*(idx ? idx[i] : i); - if( src_type == CV_32FC1 ) - for( j = 0; j < size.width; j++ ) - ((double*)_dst)[j] = ((float*)src)[j]; - else - for( j = 0; j < size.width; j++ ) - ((float*)_dst)[j] = (float)((double*)src)[j]; - } - else - CV_ERROR( CV_StsUnsupportedFormat, "Unsupported combination of input and output vectors" ); - - __END__; -} - - -void -cvWritebackLabels( const CvMat* labels, CvMat* dst_labels, - const CvMat* centers, CvMat* dst_centers, - const CvMat* probs, CvMat* dst_probs, - const CvMat* sample_idx, int samples_all, - const CvMat* comp_idx, int dims_all ) -{ - CV_FUNCNAME( "cvWritebackLabels" ); - - __BEGIN__; - - int samples_selected = samples_all, dims_selected = dims_all; - - if( dst_labels && !CV_IS_MAT(dst_labels) ) - CV_ERROR( CV_StsBadArg, "Array of output labels is not a valid matrix" ); - - if( dst_centers ) - if( !ICV_IS_MAT_OF_TYPE(dst_centers, CV_32FC1) && - !ICV_IS_MAT_OF_TYPE(dst_centers, CV_64FC1) ) - CV_ERROR( CV_StsBadArg, "Array of cluster centers is not a valid matrix" ); - - if( dst_probs && !CV_IS_MAT(dst_probs) ) - CV_ERROR( CV_StsBadArg, "Probability matrix is not valid" ); - - if( sample_idx ) - { - CV_ASSERT( sample_idx->rows == 1 && CV_MAT_TYPE(sample_idx->type) == CV_32SC1 ); - samples_selected = sample_idx->cols; - } - - if( comp_idx ) - { - CV_ASSERT( comp_idx->rows == 1 && CV_MAT_TYPE(comp_idx->type) == CV_32SC1 ); - dims_selected = comp_idx->cols; - } - - if( dst_labels && (!labels || labels->data.ptr != dst_labels->data.ptr) ) - { - if( !labels ) - CV_ERROR( CV_StsNullPtr, "NULL labels" ); - - CV_ASSERT( labels->rows == 1 ); - - if( dst_labels->rows != 1 && dst_labels->cols != 1 ) - CV_ERROR( CV_StsBadSize, "Array of output labels should be 1d vector" ); - - if( dst_labels->rows + dst_labels->cols - 1 != samples_all ) - CV_ERROR( CV_StsUnmatchedSizes, - "Size of vector of output labels is not equal to the total number of input samples" ); - - CV_ASSERT( labels->cols == samples_selected ); - - CV_CALL( icvConvertDataToSparse( labels->data.ptr, labels->step, labels->type, - dst_labels->data.ptr, dst_labels->step, dst_labels->type, - cvSize( 1, samples_selected ), sample_idx ? sample_idx->data.i : 0 )); - } - - if( dst_centers && (!centers || centers->data.ptr != dst_centers->data.ptr) ) - { - int i; - - if( !centers ) - CV_ERROR( CV_StsNullPtr, "NULL centers" ); - - if( centers->rows != dst_centers->rows ) - CV_ERROR( CV_StsUnmatchedSizes, "Invalid number of rows in matrix of output centers" ); - - if( dst_centers->cols != dims_all ) - CV_ERROR( CV_StsUnmatchedSizes, - "Number of columns in matrix of output centers is " - "not equal to the total number of components in the input samples" ); - - CV_ASSERT( centers->cols == dims_selected ); - - for( i = 0; i < centers->rows; i++ ) - CV_CALL( icvConvertDataToSparse( centers->data.ptr + i*centers->step, 0, centers->type, - dst_centers->data.ptr + i*dst_centers->step, 0, dst_centers->type, - cvSize( 1, dims_selected ), comp_idx ? comp_idx->data.i : 0 )); - } - - if( dst_probs && (!probs || probs->data.ptr != dst_probs->data.ptr) ) - { - if( !probs ) - CV_ERROR( CV_StsNullPtr, "NULL probs" ); - - if( probs->cols != dst_probs->cols ) - CV_ERROR( CV_StsUnmatchedSizes, "Invalid number of columns in output probability matrix" ); - - if( dst_probs->rows != samples_all ) - CV_ERROR( CV_StsUnmatchedSizes, - "Number of rows in output probability matrix is " - "not equal to the total number of input samples" ); - - CV_ASSERT( probs->rows == samples_selected ); - - CV_CALL( icvConvertDataToSparse( probs->data.ptr, probs->step, probs->type, - dst_probs->data.ptr, dst_probs->step, dst_probs->type, - cvSize( probs->cols, samples_selected ), - sample_idx ? sample_idx->data.i : 0 )); - } - - __END__; -} - -#if 0 -CV_IMPL void -cvStatModelMultiPredict( const CvStatModel* stat_model, - const CvArr* predict_input, - int flags, CvMat* predict_output, - CvMat* probs, const CvMat* sample_idx ) -{ - CvMemStorage* storage = 0; - CvMat* sample_idx_buffer = 0; - CvSparseMat** sparse_rows = 0; - int samples_selected = 0; - - CV_FUNCNAME( "cvStatModelMultiPredict" ); - - __BEGIN__; - - int i; - int predict_output_step = 1, sample_idx_step = 1; - int type; - int d, sizes[CV_MAX_DIM]; - int tflag = flags == CV_COL_SAMPLE; - int samples_all, dims_all; - int is_sparse = CV_IS_SPARSE_MAT(predict_input); - CvMat predict_input_part; - CvArr* sample = &predict_input_part; - CvMat probs_part; - CvMat* probs1 = probs ? &probs_part : 0; - - if( !CV_IS_STAT_MODEL(stat_model) ) - CV_ERROR( !stat_model ? CV_StsNullPtr : CV_StsBadArg, "Invalid statistical model" ); - - if( !stat_model->predict ) - CV_ERROR( CV_StsNotImplemented, "There is no \"predict\" method" ); - - if( !predict_input || !predict_output ) - CV_ERROR( CV_StsNullPtr, "NULL input or output matrices" ); - - if( !is_sparse && !CV_IS_MAT(predict_input) ) - CV_ERROR( CV_StsBadArg, "predict_input should be a matrix or a sparse matrix" ); - - if( !CV_IS_MAT(predict_output) ) - CV_ERROR( CV_StsBadArg, "predict_output should be a matrix" ); - - type = cvGetElemType( predict_input ); - if( type != CV_32FC1 || - (CV_MAT_TYPE(predict_output->type) != CV_32FC1 && - CV_MAT_TYPE(predict_output->type) != CV_32SC1 )) - CV_ERROR( CV_StsUnsupportedFormat, "The input or output matrix has unsupported format" ); - - CV_CALL( d = cvGetDims( predict_input, sizes )); - if( d > 2 ) - CV_ERROR( CV_StsBadSize, "The input matrix should be 1- or 2-dimensional" ); - - if( !tflag ) - { - samples_all = samples_selected = sizes[0]; - dims_all = sizes[1]; - } - else - { - samples_all = samples_selected = sizes[1]; - dims_all = sizes[0]; - } - - if( sample_idx ) - { - if( !CV_IS_MAT(sample_idx) ) - CV_ERROR( CV_StsBadArg, "Invalid sample_idx matrix" ); - - if( sample_idx->cols != 1 && sample_idx->rows != 1 ) - CV_ERROR( CV_StsBadSize, "sample_idx must be 1-dimensional matrix" ); - - samples_selected = sample_idx->rows + sample_idx->cols - 1; - - if( CV_MAT_TYPE(sample_idx->type) == CV_32SC1 ) - { - if( samples_selected > samples_all ) - CV_ERROR( CV_StsBadSize, "sample_idx is too large vector" ); - } - else if( samples_selected != samples_all ) - CV_ERROR( CV_StsUnmatchedSizes, "sample_idx has incorrect size" ); - - sample_idx_step = sample_idx->step ? - sample_idx->step / CV_ELEM_SIZE(sample_idx->type) : 1; - } - - if( predict_output->rows != 1 && predict_output->cols != 1 ) - CV_ERROR( CV_StsBadSize, "predict_output should be a 1-dimensional matrix" ); - - if( predict_output->rows + predict_output->cols - 1 != samples_all ) - CV_ERROR( CV_StsUnmatchedSizes, "predict_output and predict_input have uncoordinated sizes" ); - - predict_output_step = predict_output->step ? - predict_output->step / CV_ELEM_SIZE(predict_output->type) : 1; - - if( probs ) - { - if( !CV_IS_MAT(probs) ) - CV_ERROR( CV_StsBadArg, "Invalid matrix of probabilities" ); - - if( probs->rows != samples_all ) - CV_ERROR( CV_StsUnmatchedSizes, - "matrix of probabilities must have as many rows as the total number of samples" ); - - if( CV_MAT_TYPE(probs->type) != CV_32FC1 ) - CV_ERROR( CV_StsUnsupportedFormat, "matrix of probabilities must have 32fC1 type" ); - } - - if( is_sparse ) - { - CvSparseNode* node; - CvSparseMatIterator mat_iterator; - CvSparseMat* sparse = (CvSparseMat*)predict_input; - - if( sample_idx && CV_MAT_TYPE(sample_idx->type) == CV_32SC1 ) - { - CV_CALL( sample_idx_buffer = cvCreateMat( 1, samples_all, CV_8UC1 )); - cvZero( sample_idx_buffer ); - for( i = 0; i < samples_selected; i++ ) - sample_idx_buffer->data.ptr[sample_idx->data.i[i*sample_idx_step]] = 1; - samples_selected = samples_all; - sample_idx = sample_idx_buffer; - sample_idx_step = 1; - } - - CV_CALL( sparse_rows = (CvSparseMat**)cvAlloc( samples_selected*sizeof(sparse_rows[0]))); - for( i = 0; i < samples_selected; i++ ) - { - if( sample_idx && sample_idx->data.ptr[i*sample_idx_step] == 0 ) - continue; - CV_CALL( sparse_rows[i] = cvCreateSparseMat( 1, &dims_all, type )); - if( !storage ) - storage = sparse_rows[i]->heap->storage; - else - { - // hack: to decrease memory footprint, make all the sparse matrices - // reside in the same storage - int elem_size = sparse_rows[i]->heap->elem_size; - cvReleaseMemStorage( &sparse_rows[i]->heap->storage ); - sparse_rows[i]->heap = cvCreateSet( 0, sizeof(CvSet), elem_size, storage ); - } - } - - // put each row (or column) of predict_input into separate sparse matrix. - node = cvInitSparseMatIterator( sparse, &mat_iterator ); - for( ; node != 0; node = cvGetNextSparseNode( &mat_iterator )) - { - int* idx = CV_NODE_IDX( sparse, node ); - int idx0 = idx[tflag ^ 1]; - int idx1 = idx[tflag]; - - if( sample_idx && sample_idx->data.ptr[idx0*sample_idx_step] == 0 ) - continue; - - assert( sparse_rows[idx0] != 0 ); - *(float*)cvPtrND( sparse, &idx1, 0, 1, 0 ) = *(float*)CV_NODE_VAL( sparse, node ); - } - } - - for( i = 0; i < samples_selected; i++ ) - { - int idx = i; - float response; - - if( sample_idx ) - { - if( CV_MAT_TYPE(sample_idx->type) == CV_32SC1 ) - { - idx = sample_idx->data.i[i*sample_idx_step]; - if( (unsigned)idx >= (unsigned)samples_all ) - CV_ERROR( CV_StsOutOfRange, "Some of sample_idx elements are out of range" ); - } - else if( CV_MAT_TYPE(sample_idx->type) == CV_8UC1 && - sample_idx->data.ptr[i*sample_idx_step] == 0 ) - continue; - } - - if( !is_sparse ) - { - if( !tflag ) - cvGetRow( predict_input, &predict_input_part, idx ); - else - { - cvGetCol( predict_input, &predict_input_part, idx ); - } - } - else - sample = sparse_rows[idx]; - - if( probs ) - cvGetRow( probs, probs1, idx ); - - CV_CALL( response = stat_model->predict( stat_model, (CvMat*)sample, probs1 )); - - if( CV_MAT_TYPE(predict_output->type) == CV_32FC1 ) - predict_output->data.fl[idx*predict_output_step] = response; - else - { - CV_ASSERT( cvRound(response) == response ); - predict_output->data.i[idx*predict_output_step] = cvRound(response); - } - } - - __END__; - - if( sparse_rows ) - { - int i; - for( i = 0; i < samples_selected; i++ ) - if( sparse_rows[i] ) - { - sparse_rows[i]->heap->storage = 0; - cvReleaseSparseMat( &sparse_rows[i] ); - } - cvFree( &sparse_rows ); - } - - cvReleaseMat( &sample_idx_buffer ); - cvReleaseMemStorage( &storage ); -} -#endif - -// By P. Yarykin - begin - - -void cvCombineResponseMaps (CvMat* _responses, - const CvMat* old_response_map, - CvMat* new_response_map, - CvMat** out_response_map) -{ - int** old_data = NULL; - int** new_data = NULL; - - CV_FUNCNAME ("cvCombineResponseMaps"); - __BEGIN__ - - int i,j; - int old_n, new_n, out_n; - int samples, free_response; - int* first; - int* responses; - int* out_data; - - if( out_response_map ) - *out_response_map = 0; - -// Check input data. - if ((!ICV_IS_MAT_OF_TYPE (_responses, CV_32SC1)) || - (!ICV_IS_MAT_OF_TYPE (old_response_map, CV_32SC1)) || - (!ICV_IS_MAT_OF_TYPE (new_response_map, CV_32SC1))) - { - CV_ERROR (CV_StsBadArg, "Some of input arguments is not the CvMat") - } - -// Prepare sorted responses. - first = new_response_map->data.i; - new_n = new_response_map->cols; - CV_CALL (new_data = (int**)cvAlloc (new_n * sizeof (new_data[0]))); - for (i = 0; i < new_n; i++) - new_data[i] = first + i; - qsort (new_data, new_n, sizeof(int*), icvCmpIntegersPtr); - - first = old_response_map->data.i; - old_n = old_response_map->cols; - CV_CALL (old_data = (int**)cvAlloc (old_n * sizeof (old_data[0]))); - for (i = 0; i < old_n; i++) - old_data[i] = first + i; - qsort (old_data, old_n, sizeof(int*), icvCmpIntegersPtr); - -// Count the number of different responses. - for (i = 0, j = 0, out_n = 0; i < old_n && j < new_n; out_n++) - { - if (*old_data[i] == *new_data[j]) - { - i++; - j++; - } - else if (*old_data[i] < *new_data[j]) - i++; - else - j++; - } - out_n += old_n - i + new_n - j; - -// Create and fill the result response maps. - CV_CALL (*out_response_map = cvCreateMat (1, out_n, CV_32SC1)); - out_data = (*out_response_map)->data.i; - memcpy (out_data, first, old_n * sizeof (int)); - - free_response = old_n; - for (i = 0, j = 0; i < old_n && j < new_n; ) - { - if (*old_data[i] == *new_data[j]) - { - *new_data[j] = (int)(old_data[i] - first); - i++; - j++; - } - else if (*old_data[i] < *new_data[j]) - i++; - else - { - out_data[free_response] = *new_data[j]; - *new_data[j] = free_response++; - j++; - } - } - for (; j < new_n; j++) - { - out_data[free_response] = *new_data[j]; - *new_data[j] = free_response++; - } - CV_ASSERT (free_response == out_n); - -// Change according to out response map. - samples = _responses->cols + _responses->rows - 1; - responses = _responses->data.i; - first = new_response_map->data.i; - for (i = 0; i < samples; i++) - { - responses[i] = first[responses[i]]; - } - - __END__ - - cvFree(&old_data); - cvFree(&new_data); - -} - - -static int icvGetNumberOfCluster( double* prob_vector, int num_of_clusters, float r, - float outlier_thresh, int normalize_probs ) -{ - int max_prob_loc = 0; - - CV_FUNCNAME("icvGetNumberOfCluster"); - __BEGIN__; - - double prob, maxprob, sum; - int i; - - CV_ASSERT(prob_vector); - CV_ASSERT(num_of_clusters >= 0); - - maxprob = prob_vector[0]; - max_prob_loc = 0; - sum = maxprob; - for( i = 1; i < num_of_clusters; i++ ) - { - prob = prob_vector[i]; - sum += prob; - if( prob > maxprob ) - { - max_prob_loc = i; - maxprob = prob; - } - } - if( normalize_probs && fabs(sum - 1.) > FLT_EPSILON ) - { - for( i = 0; i < num_of_clusters; i++ ) - prob_vector[i] /= sum; - } - if( fabs(r - 1.) > FLT_EPSILON && fabs(sum - 1.) < outlier_thresh ) - max_prob_loc = -1; - - __END__; - - return max_prob_loc; - -} // End of icvGetNumberOfCluster - - -void icvFindClusterLabels( const CvMat* probs, float outlier_thresh, float r, - const CvMat* labels ) -{ - CvMat* counts = 0; - - CV_FUNCNAME("icvFindClusterLabels"); - __BEGIN__; - - int nclusters, nsamples; - int i, j; - double* probs_data; - - CV_ASSERT( ICV_IS_MAT_OF_TYPE(probs, CV_64FC1) ); - CV_ASSERT( ICV_IS_MAT_OF_TYPE(labels, CV_32SC1) ); - - nclusters = probs->cols; - nsamples = probs->rows; - CV_ASSERT( nsamples == labels->cols ); - - CV_CALL( counts = cvCreateMat( 1, nclusters + 1, CV_32SC1 ) ); - CV_CALL( cvSetZero( counts )); - for( i = 0; i < nsamples; i++ ) - { - labels->data.i[i] = icvGetNumberOfCluster( probs->data.db + i*probs->cols, - nclusters, r, outlier_thresh, 1 ); - counts->data.i[labels->data.i[i] + 1]++; - } - CV_ASSERT((int)cvSum(counts).val[0] == nsamples); - // Filling empty clusters with the vector, that has the maximal probability - for( j = 0; j < nclusters; j++ ) // outliers are ignored - { - int maxprob_loc = -1; - double maxprob = 0; - - if( counts->data.i[j+1] ) // j-th class is not empty - continue; - // look for the presentative, which is not lonely in it's cluster - // and that has a maximal probability among all these vectors - probs_data = probs->data.db; - for( i = 0; i < nsamples; i++, probs_data++ ) - { - int label = labels->data.i[i]; - double prob; - if( counts->data.i[label+1] == 0 || - (counts->data.i[label+1] <= 1 && label != -1) ) - continue; - prob = *probs_data; - if( prob >= maxprob ) - { - maxprob = prob; - maxprob_loc = i; - } - } - // maxprob_loc == 0 <=> number of vectors less then number of clusters - CV_ASSERT( maxprob_loc >= 0 ); - counts->data.i[labels->data.i[maxprob_loc] + 1]--; - labels->data.i[maxprob_loc] = j; - counts->data.i[j + 1]++; - } - - __END__; - - cvReleaseMat( &counts ); -} // End of icvFindClusterLabels - -/* End of file */ diff --git a/modules/ml/src/knearest.cpp b/modules/ml/src/knearest.cpp deleted file mode 100644 index a05a30d..0000000 --- a/modules/ml/src/knearest.cpp +++ /dev/null @@ -1,482 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/****************************************************************************************\ -* K-Nearest Neighbors Classifier * -\****************************************************************************************/ - -// k Nearest Neighbors -CvKNearest::CvKNearest() -{ - samples = 0; - clear(); -} - - -CvKNearest::~CvKNearest() -{ - clear(); -} - - -CvKNearest::CvKNearest( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _sample_idx, bool _is_regression, int _max_k ) -{ - samples = 0; - train( _train_data, _responses, _sample_idx, _is_regression, _max_k, false ); -} - - -void CvKNearest::clear() -{ - while( samples ) - { - CvVectors* next_samples = samples->next; - cvFree( &samples->data.fl ); - cvFree( &samples ); - samples = next_samples; - } - var_count = 0; - total = 0; - max_k = 0; -} - - -int CvKNearest::get_max_k() const { return max_k; } - -int CvKNearest::get_var_count() const { return var_count; } - -bool CvKNearest::is_regression() const { return regression; } - -int CvKNearest::get_sample_count() const { return total; } - -bool CvKNearest::train( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _sample_idx, bool _is_regression, - int _max_k, bool _update_base ) -{ - bool ok = false; - CvMat* responses = 0; - - CV_FUNCNAME( "CvKNearest::train" ); - - __BEGIN__; - - CvVectors* _samples = 0; - float** _data = 0; - int _count = 0, _dims = 0, _dims_all = 0, _rsize = 0; - - if( !_update_base ) - clear(); - - // Prepare training data and related parameters. - // Treat categorical responses as ordered - to prevent class label compression and - // to enable entering new classes in the updates - CV_CALL( cvPrepareTrainData( "CvKNearest::train", _train_data, CV_ROW_SAMPLE, - _responses, CV_VAR_ORDERED, 0, _sample_idx, true, (const float***)&_data, - &_count, &_dims, &_dims_all, &responses, 0, 0 )); - - if( !responses ) - CV_ERROR( CV_StsNoMem, "Could not allocate memory for responses" ); - - if( _update_base && _dims != var_count ) - CV_ERROR( CV_StsBadArg, "The newly added data have different dimensionality" ); - - if( !_update_base ) - { - if( _max_k < 1 ) - CV_ERROR( CV_StsOutOfRange, "max_k must be a positive number" ); - - regression = _is_regression; - var_count = _dims; - max_k = _max_k; - } - - _rsize = _count*sizeof(float); - CV_CALL( _samples = (CvVectors*)cvAlloc( sizeof(*_samples) + _rsize )); - _samples->next = samples; - _samples->type = CV_32F; - _samples->data.fl = _data; - _samples->count = _count; - total += _count; - - samples = _samples; - memcpy( _samples + 1, responses->data.fl, _rsize ); - - ok = true; - - __END__; - - if( responses && responses->data.ptr != _responses->data.ptr ) - cvReleaseMat(&responses); - - return ok; -} - - - -void CvKNearest::find_neighbors_direct( const CvMat* _samples, int k, int start, int end, - float* neighbor_responses, const float** neighbors, float* dist ) const -{ - int i, j, count = end - start, k1 = 0, k2 = 0, d = var_count; - CvVectors* s = samples; - - for( ; s != 0; s = s->next ) - { - int n = s->count; - for( j = 0; j < n; j++ ) - { - for( i = 0; i < count; i++ ) - { - double sum = 0; - Cv32suf si; - const float* v = s->data.fl[j]; - const float* u = (float*)(_samples->data.ptr + _samples->step*(start + i)); - Cv32suf* dd = (Cv32suf*)(dist + i*k); - float* nr; - const float** nn; - int t, ii, ii1; - - for( t = 0; t <= d - 4; t += 4 ) - { - double t0 = u[t] - v[t], t1 = u[t+1] - v[t+1]; - double t2 = u[t+2] - v[t+2], t3 = u[t+3] - v[t+3]; - sum += t0*t0 + t1*t1 + t2*t2 + t3*t3; - } - - for( ; t < d; t++ ) - { - double t0 = u[t] - v[t]; - sum += t0*t0; - } - - si.f = (float)sum; - for( ii = k1-1; ii >= 0; ii-- ) - if( si.i > dd[ii].i ) - break; - if( ii >= k-1 ) - continue; - - nr = neighbor_responses + i*k; - nn = neighbors ? neighbors + (start + i)*k : 0; - for( ii1 = k2 - 1; ii1 > ii; ii1-- ) - { - dd[ii1+1].i = dd[ii1].i; - nr[ii1+1] = nr[ii1]; - if( nn ) nn[ii1+1] = nn[ii1]; - } - dd[ii+1].i = si.i; - nr[ii+1] = ((float*)(s + 1))[j]; - if( nn ) - nn[ii+1] = v; - } - k1 = MIN( k1+1, k ); - k2 = MIN( k1, k-1 ); - } - } -} - - -float CvKNearest::write_results( int k, int k1, int start, int end, - const float* neighbor_responses, const float* dist, - CvMat* _results, CvMat* _neighbor_responses, - CvMat* _dist, Cv32suf* sort_buf ) const -{ - float result = 0.f; - int i, j, j1, count = end - start; - double inv_scale = 1./k1; - int rstep = _results && !CV_IS_MAT_CONT(_results->type) ? _results->step/sizeof(result) : 1; - - for( i = 0; i < count; i++ ) - { - const Cv32suf* nr = (const Cv32suf*)(neighbor_responses + i*k); - float* dst; - float r; - if( _results || start+i == 0 ) - { - if( regression ) - { - double s = 0; - for( j = 0; j < k1; j++ ) - s += nr[j].f; - r = (float)(s*inv_scale); - } - else - { - int prev_start = 0, best_count = 0, cur_count; - Cv32suf best_val; - - for( j = 0; j < k1; j++ ) - sort_buf[j].i = nr[j].i; - - for( j = k1-1; j > 0; j-- ) - { - bool swap_fl = false; - for( j1 = 0; j1 < j; j1++ ) - if( sort_buf[j1].i > sort_buf[j1+1].i ) - { - int t; - CV_SWAP( sort_buf[j1].i, sort_buf[j1+1].i, t ); - swap_fl = true; - } - if( !swap_fl ) - break; - } - - best_val.i = 0; - for( j = 1; j <= k1; j++ ) - if( j == k1 || sort_buf[j].i != sort_buf[j-1].i ) - { - cur_count = j - prev_start; - if( best_count < cur_count ) - { - best_count = cur_count; - best_val.i = sort_buf[j-1].i; - } - prev_start = j; - } - r = best_val.f; - } - - if( start+i == 0 ) - result = r; - - if( _results ) - _results->data.fl[(start + i)*rstep] = r; - } - - if( _neighbor_responses ) - { - dst = (float*)(_neighbor_responses->data.ptr + - (start + i)*_neighbor_responses->step); - for( j = 0; j < k1; j++ ) - dst[j] = nr[j].f; - for( ; j < k; j++ ) - dst[j] = 0.f; - } - - if( _dist ) - { - dst = (float*)(_dist->data.ptr + (start + i)*_dist->step); - for( j = 0; j < k1; j++ ) - dst[j] = dist[j + i*k]; - for( ; j < k; j++ ) - dst[j] = 0.f; - } - } - - return result; -} - -struct P1 : cv::ParallelLoopBody { - P1(const CvKNearest* _pointer, int _buf_sz, int _k, const CvMat* __samples, const float** __neighbors, - int _k1, CvMat* __results, CvMat* __neighbor_responses, CvMat* __dist, float* _result) - { - pointer = _pointer; - k = _k; - _samples = __samples; - _neighbors = __neighbors; - k1 = _k1; - _results = __results; - _neighbor_responses = __neighbor_responses; - _dist = __dist; - result = _result; - buf_sz = _buf_sz; - } - - const CvKNearest* pointer; - int k; - const CvMat* _samples; - const float** _neighbors; - int k1; - CvMat* _results; - CvMat* _neighbor_responses; - CvMat* _dist; - float* result; - int buf_sz; - - void operator()( const cv::Range& range ) const - { - cv::AutoBuffer buf(buf_sz); - for(int i = range.start; i < range.end; i += 1 ) - { - float* neighbor_responses = &buf[0]; - float* dist = neighbor_responses + 1*k; - Cv32suf* sort_buf = (Cv32suf*)(dist + 1*k); - - pointer->find_neighbors_direct( _samples, k, i, i + 1, - neighbor_responses, _neighbors, dist ); - - float r = pointer->write_results( k, k1, i, i + 1, neighbor_responses, dist, - _results, _neighbor_responses, _dist, sort_buf ); - - if( i == 0 ) - *result = r; - } - } - -}; - -float CvKNearest::find_nearest( const CvMat* _samples, int k, CvMat* _results, - const float** _neighbors, CvMat* _neighbor_responses, CvMat* _dist ) const -{ - float result = 0.f; - const int max_blk_count = 128, max_buf_sz = 1 << 12; - - if( !samples ) - CV_Error( CV_StsError, "The search tree must be constructed first using train method" ); - - if( !CV_IS_MAT(_samples) || - CV_MAT_TYPE(_samples->type) != CV_32FC1 || - _samples->cols != var_count ) - CV_Error( CV_StsBadArg, "Input samples must be floating-point matrix (x)" ); - - if( _results && (!CV_IS_MAT(_results) || - (_results->cols != 1 && _results->rows != 1) || - _results->cols + _results->rows - 1 != _samples->rows) ) - CV_Error( CV_StsBadArg, - "The results must be 1d vector containing as much elements as the number of samples" ); - - if( _results && CV_MAT_TYPE(_results->type) != CV_32FC1 && - (CV_MAT_TYPE(_results->type) != CV_32SC1 || regression)) - CV_Error( CV_StsUnsupportedFormat, - "The results must be floating-point or integer (in case of classification) vector" ); - - if( k < 1 || k > max_k ) - CV_Error( CV_StsOutOfRange, "k must be within 1..max_k range" ); - - if( _neighbor_responses ) - { - if( !CV_IS_MAT(_neighbor_responses) || CV_MAT_TYPE(_neighbor_responses->type) != CV_32FC1 || - _neighbor_responses->rows != _samples->rows || _neighbor_responses->cols != k ) - CV_Error( CV_StsBadArg, - "The neighbor responses (if present) must be floating-point matrix of x size" ); - } - - if( _dist ) - { - if( !CV_IS_MAT(_dist) || CV_MAT_TYPE(_dist->type) != CV_32FC1 || - _dist->rows != _samples->rows || _dist->cols != k ) - CV_Error( CV_StsBadArg, - "The distances from the neighbors (if present) must be floating-point matrix of x size" ); - } - - int count = _samples->rows; - int count_scale = k*2; - int blk_count0 = MIN( count, max_blk_count ); - int buf_sz = MIN( blk_count0 * count_scale, max_buf_sz ); - blk_count0 = MAX( buf_sz/count_scale, 1 ); - blk_count0 += blk_count0 % 2; - blk_count0 = MIN( blk_count0, count ); - buf_sz = blk_count0 * count_scale + k; - int k1 = get_sample_count(); - k1 = MIN( k1, k ); - - cv::parallel_for_(cv::Range(0, count), P1(this, buf_sz, k, _samples, _neighbors, k1, - _results, _neighbor_responses, _dist, &result) - ); - - return result; -} - - -using namespace cv; - -CvKNearest::CvKNearest( const Mat& _train_data, const Mat& _responses, - const Mat& _sample_idx, bool _is_regression, int _max_k ) -{ - samples = 0; - train(_train_data, _responses, _sample_idx, _is_regression, _max_k, false ); -} - -bool CvKNearest::train( const Mat& _train_data, const Mat& _responses, - const Mat& _sample_idx, bool _is_regression, - int _max_k, bool _update_base ) -{ - CvMat tdata = _train_data, responses = _responses, sidx = _sample_idx; - - return train(&tdata, &responses, sidx.data.ptr ? &sidx : 0, _is_regression, _max_k, _update_base ); -} - - -float CvKNearest::find_nearest( const Mat& _samples, int k, Mat* _results, - const float** _neighbors, Mat* _neighbor_responses, - Mat* _dist ) const -{ - CvMat s = _samples, results, *presults = 0, nresponses, *pnresponses = 0, dist, *pdist = 0; - - if( _results ) - { - if(!(_results->data && (_results->type() == CV_32F || - (_results->type() == CV_32S && regression)) && - (_results->cols == 1 || _results->rows == 1) && - _results->cols + _results->rows - 1 == _samples.rows) ) - _results->create(_samples.rows, 1, CV_32F); - presults = &(results = *_results); - } - - if( _neighbor_responses ) - { - if(!(_neighbor_responses->data && _neighbor_responses->type() == CV_32F && - _neighbor_responses->cols == k && _neighbor_responses->rows == _samples.rows) ) - _neighbor_responses->create(_samples.rows, k, CV_32F); - pnresponses = &(nresponses = *_neighbor_responses); - } - - if( _dist ) - { - if(!(_dist->data && _dist->type() == CV_32F && - _dist->cols == k && _dist->rows == _samples.rows) ) - _dist->create(_samples.rows, k, CV_32F); - pdist = &(dist = *_dist); - } - - return find_nearest(&s, k, presults, _neighbors, pnresponses, pdist ); -} - - -float CvKNearest::find_nearest( const cv::Mat& _samples, int k, CV_OUT cv::Mat& results, - CV_OUT cv::Mat& neighborResponses, CV_OUT cv::Mat& dists) const -{ - return find_nearest(_samples, k, &results, 0, &neighborResponses, &dists); -} - -/* End of file */ diff --git a/modules/ml/src/ml_init.cpp b/modules/ml/src/ml_init.cpp deleted file mode 100644 index c6cb594..0000000 --- a/modules/ml/src/ml_init.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -namespace cv -{ - -CV_INIT_ALGORITHM(EM, "StatModel.EM", - obj.info()->addParam(obj, "nclusters", obj.nclusters); - obj.info()->addParam(obj, "covMatType", obj.covMatType); - obj.info()->addParam(obj, "maxIters", obj.maxIters); - obj.info()->addParam(obj, "epsilon", obj.epsilon); - obj.info()->addParam(obj, "weights", obj.weights, true); - obj.info()->addParam(obj, "means", obj.means, true); - obj.info()->addParam(obj, "covs", obj.covs, true)) - -bool initModule_ml(void) -{ - Ptr em = createEM(); - return em->info() != 0; -} - -} diff --git a/modules/ml/src/nbayes.cpp b/modules/ml/src/nbayes.cpp deleted file mode 100644 index 5ad1b13..0000000 --- a/modules/ml/src/nbayes.cpp +++ /dev/null @@ -1,627 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -CvNormalBayesClassifier::CvNormalBayesClassifier() -{ - var_count = var_all = 0; - var_idx = 0; - cls_labels = 0; - count = 0; - sum = 0; - productsum = 0; - avg = 0; - inv_eigen_values = 0; - cov_rotate_mats = 0; - c = 0; - default_model_name = "my_nb"; -} - - -void CvNormalBayesClassifier::clear() -{ - if( cls_labels ) - { - for( int cls = 0; cls < cls_labels->cols; cls++ ) - { - cvReleaseMat( &count[cls] ); - cvReleaseMat( &sum[cls] ); - cvReleaseMat( &productsum[cls] ); - cvReleaseMat( &avg[cls] ); - cvReleaseMat( &inv_eigen_values[cls] ); - cvReleaseMat( &cov_rotate_mats[cls] ); - } - } - - cvReleaseMat( &cls_labels ); - cvReleaseMat( &var_idx ); - cvReleaseMat( &c ); - cvFree( &count ); -} - - -CvNormalBayesClassifier::~CvNormalBayesClassifier() -{ - clear(); -} - - -CvNormalBayesClassifier::CvNormalBayesClassifier( - const CvMat* _train_data, const CvMat* _responses, - const CvMat* _var_idx, const CvMat* _sample_idx ) -{ - var_count = var_all = 0; - var_idx = 0; - cls_labels = 0; - count = 0; - sum = 0; - productsum = 0; - avg = 0; - inv_eigen_values = 0; - cov_rotate_mats = 0; - c = 0; - default_model_name = "my_nb"; - - train( _train_data, _responses, _var_idx, _sample_idx ); -} - - -bool CvNormalBayesClassifier::train( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _var_idx, const CvMat* _sample_idx, bool update ) -{ - const float min_variation = FLT_EPSILON; - bool result = false; - CvMat* responses = 0; - const float** train_data = 0; - CvMat* __cls_labels = 0; - CvMat* __var_idx = 0; - CvMat* cov = 0; - - CV_FUNCNAME( "CvNormalBayesClassifier::train" ); - - __BEGIN__; - - int cls, nsamples = 0, _var_count = 0, _var_all = 0, nclasses = 0; - int s, c1, c2; - const int* responses_data; - - CV_CALL( cvPrepareTrainData( 0, - _train_data, CV_ROW_SAMPLE, _responses, CV_VAR_CATEGORICAL, - _var_idx, _sample_idx, false, &train_data, - &nsamples, &_var_count, &_var_all, &responses, - &__cls_labels, &__var_idx )); - - if( !update ) - { - const size_t mat_size = sizeof(CvMat*); - size_t data_size; - - clear(); - - var_idx = __var_idx; - cls_labels = __cls_labels; - __var_idx = __cls_labels = 0; - var_count = _var_count; - var_all = _var_all; - - nclasses = cls_labels->cols; - data_size = nclasses*6*mat_size; - - CV_CALL( count = (CvMat**)cvAlloc( data_size )); - memset( count, 0, data_size ); - - sum = count + nclasses; - productsum = sum + nclasses; - avg = productsum + nclasses; - inv_eigen_values= avg + nclasses; - cov_rotate_mats = inv_eigen_values + nclasses; - - CV_CALL( c = cvCreateMat( 1, nclasses, CV_64FC1 )); - - for( cls = 0; cls < nclasses; cls++ ) - { - CV_CALL(count[cls] = cvCreateMat( 1, var_count, CV_32SC1 )); - CV_CALL(sum[cls] = cvCreateMat( 1, var_count, CV_64FC1 )); - CV_CALL(productsum[cls] = cvCreateMat( var_count, var_count, CV_64FC1 )); - CV_CALL(avg[cls] = cvCreateMat( 1, var_count, CV_64FC1 )); - CV_CALL(inv_eigen_values[cls] = cvCreateMat( 1, var_count, CV_64FC1 )); - CV_CALL(cov_rotate_mats[cls] = cvCreateMat( var_count, var_count, CV_64FC1 )); - CV_CALL(cvZero( count[cls] )); - CV_CALL(cvZero( sum[cls] )); - CV_CALL(cvZero( productsum[cls] )); - CV_CALL(cvZero( avg[cls] )); - CV_CALL(cvZero( inv_eigen_values[cls] )); - CV_CALL(cvZero( cov_rotate_mats[cls] )); - } - } - else - { - // check that the new training data has the same dimensionality etc. - if( _var_count != var_count || _var_all != var_all || !((!_var_idx && !var_idx) || - (_var_idx && var_idx && cvNorm(_var_idx,var_idx,CV_C) < DBL_EPSILON)) ) - CV_ERROR( CV_StsBadArg, - "The new training data is inconsistent with the original training data" ); - - if( cls_labels->cols != __cls_labels->cols || - cvNorm(cls_labels, __cls_labels, CV_C) > DBL_EPSILON ) - CV_ERROR( CV_StsNotImplemented, - "In the current implementation the new training data must have absolutely " - "the same set of class labels as used in the original training data" ); - - nclasses = cls_labels->cols; - } - - responses_data = responses->data.i; - CV_CALL( cov = cvCreateMat( _var_count, _var_count, CV_64FC1 )); - - /* process train data (count, sum , productsum) */ - for( s = 0; s < nsamples; s++ ) - { - cls = responses_data[s]; - int* count_data = count[cls]->data.i; - double* sum_data = sum[cls]->data.db; - double* prod_data = productsum[cls]->data.db; - const float* train_vec = train_data[s]; - - for( c1 = 0; c1 < _var_count; c1++, prod_data += _var_count ) - { - double val1 = train_vec[c1]; - sum_data[c1] += val1; - count_data[c1]++; - for( c2 = c1; c2 < _var_count; c2++ ) - prod_data[c2] += train_vec[c2]*val1; - } - } - cvReleaseMat( &responses ); - responses = 0; - - /* calculate avg, covariance matrix, c */ - for( cls = 0; cls < nclasses; cls++ ) - { - double det = 1; - int i, j; - CvMat* w = inv_eigen_values[cls]; - int* count_data = count[cls]->data.i; - double* avg_data = avg[cls]->data.db; - double* sum1 = sum[cls]->data.db; - - cvCompleteSymm( productsum[cls], 0 ); - - for( j = 0; j < _var_count; j++ ) - { - int n = count_data[j]; - avg_data[j] = n ? sum1[j] / n : 0.; - } - - count_data = count[cls]->data.i; - avg_data = avg[cls]->data.db; - sum1 = sum[cls]->data.db; - - for( i = 0; i < _var_count; i++ ) - { - double* avg2_data = avg[cls]->data.db; - double* sum2 = sum[cls]->data.db; - double* prod_data = productsum[cls]->data.db + i*_var_count; - double* cov_data = cov->data.db + i*_var_count; - double s1val = sum1[i]; - double avg1 = avg_data[i]; - int _count = count_data[i]; - - for( j = 0; j <= i; j++ ) - { - double avg2 = avg2_data[j]; - double cov_val = prod_data[j] - avg1 * sum2[j] - avg2 * s1val + avg1 * avg2 * _count; - cov_val = (_count > 1) ? cov_val / (_count - 1) : cov_val; - cov_data[j] = cov_val; - } - } - - CV_CALL( cvCompleteSymm( cov, 1 )); - CV_CALL( cvSVD( cov, w, cov_rotate_mats[cls], 0, CV_SVD_U_T )); - CV_CALL( cvMaxS( w, min_variation, w )); - for( j = 0; j < _var_count; j++ ) - det *= w->data.db[j]; - - CV_CALL( cvDiv( NULL, w, w )); - c->data.db[cls] = det > 0 ? log(det) : -700; - } - - result = true; - - __END__; - - if( !result || cvGetErrStatus() < 0 ) - clear(); - - cvReleaseMat( &cov ); - cvReleaseMat( &__cls_labels ); - cvReleaseMat( &__var_idx ); - cvFree( &train_data ); - - return result; -} - -struct predict_body : cv::ParallelLoopBody { - predict_body(CvMat* _c, CvMat** _cov_rotate_mats, CvMat** _inv_eigen_values, CvMat** _avg, - const CvMat* _samples, const int* _vidx, CvMat* _cls_labels, - CvMat* _results, float* _value, int _var_count1 - ) - { - c = _c; - cov_rotate_mats = _cov_rotate_mats; - inv_eigen_values = _inv_eigen_values; - avg = _avg; - samples = _samples; - vidx = _vidx; - cls_labels = _cls_labels; - results = _results; - value = _value; - var_count1 = _var_count1; - } - - CvMat* c; - CvMat** cov_rotate_mats; - CvMat** inv_eigen_values; - CvMat** avg; - const CvMat* samples; - const int* vidx; - CvMat* cls_labels; - - CvMat* results; - float* value; - int var_count1; - - void operator()( const cv::Range& range ) const - { - - int cls = -1; - int rtype = 0, rstep = 0; - int nclasses = cls_labels->cols; - int _var_count = avg[0]->cols; - - if (results) - { - rtype = CV_MAT_TYPE(results->type); - rstep = CV_IS_MAT_CONT(results->type) ? 1 : results->step/CV_ELEM_SIZE(rtype); - } - // allocate memory and initializing headers for calculating - cv::AutoBuffer buffer(nclasses + var_count1); - CvMat diff = cvMat( 1, var_count1, CV_64FC1, &buffer[0] ); - - for(int k = range.start; k < range.end; k += 1 ) - { - int ival; - double opt = FLT_MAX; - - for(int i = 0; i < nclasses; i++ ) - { - - double cur = c->data.db[i]; - CvMat* u = cov_rotate_mats[i]; - CvMat* w = inv_eigen_values[i]; - - const double* avg_data = avg[i]->data.db; - const float* x = (const float*)(samples->data.ptr + samples->step*k); - - // cov = u w u' --> cov^(-1) = u w^(-1) u' - for(int j = 0; j < _var_count; j++ ) - diff.data.db[j] = avg_data[j] - x[vidx ? vidx[j] : j]; - - cvGEMM( &diff, u, 1, 0, 0, &diff, CV_GEMM_B_T ); - for(int j = 0; j < _var_count; j++ ) - { - double d = diff.data.db[j]; - cur += d*d*w->data.db[j]; - } - - if( cur < opt ) - { - cls = i; - opt = cur; - } - /* probability = exp( -0.5 * cur ) */ - } - - ival = cls_labels->data.i[cls]; - if( results ) - { - if( rtype == CV_32SC1 ) - results->data.i[k*rstep] = ival; - else - results->data.fl[k*rstep] = (float)ival; - } - if( k == 0 ) - *value = (float)ival; - } - } -}; - - -float CvNormalBayesClassifier::predict( const CvMat* samples, CvMat* results ) const -{ - float value = 0; - - if( !CV_IS_MAT(samples) || CV_MAT_TYPE(samples->type) != CV_32FC1 || samples->cols != var_all ) - CV_Error( CV_StsBadArg, - "The input samples must be 32f matrix with the number of columns = var_all" ); - - if( samples->rows > 1 && !results ) - CV_Error( CV_StsNullPtr, - "When the number of input samples is >1, the output vector of results must be passed" ); - - if( results ) - { - if( !CV_IS_MAT(results) || (CV_MAT_TYPE(results->type) != CV_32FC1 && - CV_MAT_TYPE(results->type) != CV_32SC1) || - (results->cols != 1 && results->rows != 1) || - results->cols + results->rows - 1 != samples->rows ) - CV_Error( CV_StsBadArg, "The output array must be integer or floating-point vector " - "with the number of elements = number of rows in the input matrix" ); - } - - const int* vidx = var_idx ? var_idx->data.i : 0; - - cv::parallel_for_(cv::Range(0, samples->rows), - predict_body(c, cov_rotate_mats, inv_eigen_values, avg, samples, - vidx, cls_labels, results, &value, var_count)); - - return value; -} - - -void CvNormalBayesClassifier::write( CvFileStorage* fs, const char* name ) const -{ - CV_FUNCNAME( "CvNormalBayesClassifier::write" ); - - __BEGIN__; - - int nclasses, i; - - nclasses = cls_labels->cols; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_NBAYES ); - - CV_CALL( cvWriteInt( fs, "var_count", var_count )); - CV_CALL( cvWriteInt( fs, "var_all", var_all )); - - if( var_idx ) - CV_CALL( cvWrite( fs, "var_idx", var_idx )); - CV_CALL( cvWrite( fs, "cls_labels", cls_labels )); - - CV_CALL( cvStartWriteStruct( fs, "count", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, count[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvStartWriteStruct( fs, "sum", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, sum[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvStartWriteStruct( fs, "productsum", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, productsum[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvStartWriteStruct( fs, "avg", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, avg[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvStartWriteStruct( fs, "inv_eigen_values", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, inv_eigen_values[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvStartWriteStruct( fs, "cov_rotate_mats", CV_NODE_SEQ )); - for( i = 0; i < nclasses; i++ ) - CV_CALL( cvWrite( fs, NULL, cov_rotate_mats[i] )); - CV_CALL( cvEndWriteStruct( fs )); - - CV_CALL( cvWrite( fs, "c", c )); - - cvEndWriteStruct( fs ); - - __END__; -} - - -void CvNormalBayesClassifier::read( CvFileStorage* fs, CvFileNode* root_node ) -{ - bool ok = false; - CV_FUNCNAME( "CvNormalBayesClassifier::read" ); - - __BEGIN__; - - int nclasses, i; - size_t data_size; - CvFileNode* node; - CvSeq* seq; - CvSeqReader reader; - - clear(); - - CV_CALL( var_count = cvReadIntByName( fs, root_node, "var_count", -1 )); - CV_CALL( var_all = cvReadIntByName( fs, root_node, "var_all", -1 )); - CV_CALL( var_idx = (CvMat*)cvReadByName( fs, root_node, "var_idx" )); - CV_CALL( cls_labels = (CvMat*)cvReadByName( fs, root_node, "cls_labels" )); - if( !cls_labels ) - CV_ERROR( CV_StsParseError, "No \"cls_labels\" in NBayes classifier" ); - if( cls_labels->cols < 1 ) - CV_ERROR( CV_StsBadArg, "Number of classes is less 1" ); - if( var_count <= 0 ) - CV_ERROR( CV_StsParseError, - "The field \"var_count\" of NBayes classifier is missing" ); - nclasses = cls_labels->cols; - - data_size = nclasses*6*sizeof(CvMat*); - CV_CALL( count = (CvMat**)cvAlloc( data_size )); - memset( count, 0, data_size ); - - sum = count + nclasses; - productsum = sum + nclasses; - avg = productsum + nclasses; - inv_eigen_values = avg + nclasses; - cov_rotate_mats = inv_eigen_values + nclasses; - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "count" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( count[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "sum" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( sum[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "productsum" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( productsum[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "avg" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( avg[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "inv_eigen_values" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( inv_eigen_values[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( node = cvGetFileNodeByName( fs, root_node, "cov_rotate_mats" )); - seq = node->data.seq; - if( !CV_NODE_IS_SEQ(node->tag) || seq->total != nclasses) - CV_ERROR( CV_StsBadArg, "" ); - CV_CALL( cvStartReadSeq( seq, &reader, 0 )); - for( i = 0; i < nclasses; i++ ) - { - CV_CALL( cov_rotate_mats[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr )); - CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); - } - - CV_CALL( c = (CvMat*)cvReadByName( fs, root_node, "c" )); - - ok = true; - - __END__; - - if( !ok ) - clear(); -} - -using namespace cv; - -CvNormalBayesClassifier::CvNormalBayesClassifier( const Mat& _train_data, const Mat& _responses, - const Mat& _var_idx, const Mat& _sample_idx ) -{ - var_count = var_all = 0; - var_idx = 0; - cls_labels = 0; - count = 0; - sum = 0; - productsum = 0; - avg = 0; - inv_eigen_values = 0; - cov_rotate_mats = 0; - c = 0; - default_model_name = "my_nb"; - - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, sidx = _sample_idx; - train(&tdata, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0); -} - -bool CvNormalBayesClassifier::train( const Mat& _train_data, const Mat& _responses, - const Mat& _var_idx, const Mat& _sample_idx, bool update ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, sidx = _sample_idx; - return train(&tdata, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0, update); -} - -float CvNormalBayesClassifier::predict( const Mat& _samples, Mat* _results ) const -{ - CvMat samples = _samples, results, *presults = 0; - - if( _results ) - { - if( !(_results->data && _results->type() == CV_32F && - (_results->cols == 1 || _results->rows == 1) && - _results->cols + _results->rows - 1 == _samples.rows) ) - _results->create(_samples.rows, 1, CV_32F); - presults = &(results = *_results); - } - - return predict(&samples, presults); -} - -/* End of file. */ diff --git a/modules/ml/src/precomp.hpp b/modules/ml/src/precomp.hpp deleted file mode 100644 index b4ae21a..0000000 --- a/modules/ml/src/precomp.hpp +++ /dev/null @@ -1,372 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#include "cvconfig.h" - -#include "opencv2/ml/ml.hpp" -#include "opencv2/core/core_c.h" -#include "opencv2/core/internal.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define ML_IMPL CV_IMPL - -#define CV_MAT_ELEM_FLAG( mat, type, comp, vect, tflag ) \ - (( tflag == CV_ROW_SAMPLE ) \ - ? (CV_MAT_ELEM( mat, type, comp, vect )) \ - : (CV_MAT_ELEM( mat, type, vect, comp ))) - -/* Convert matrix to vector */ -#define ICV_MAT2VEC( mat, vdata, vstep, num ) \ - if( MIN( (mat).rows, (mat).cols ) != 1 ) \ - CV_ERROR( CV_StsBadArg, "" ); \ - (vdata) = ((mat).data.ptr); \ - if( (mat).rows == 1 ) \ - { \ - (vstep) = CV_ELEM_SIZE( (mat).type ); \ - (num) = (mat).cols; \ - } \ - else \ - { \ - (vstep) = (mat).step; \ - (num) = (mat).rows; \ - } - -/* get raw data */ -#define ICV_RAWDATA( mat, flags, rdata, sstep, cstep, m, n ) \ - (rdata) = (mat).data.ptr; \ - if( CV_IS_ROW_SAMPLE( flags ) ) \ - { \ - (sstep) = (mat).step; \ - (cstep) = CV_ELEM_SIZE( (mat).type ); \ - (m) = (mat).rows; \ - (n) = (mat).cols; \ - } \ - else \ - { \ - (cstep) = (mat).step; \ - (sstep) = CV_ELEM_SIZE( (mat).type ); \ - (n) = (mat).rows; \ - (m) = (mat).cols; \ - } - -#define ICV_IS_MAT_OF_TYPE( mat, mat_type) \ - (CV_IS_MAT( mat ) && CV_MAT_TYPE( mat->type ) == (mat_type) && \ - (mat)->cols > 0 && (mat)->rows > 0) - -/* - uchar* data; int sstep, cstep; - trainData->data - uchar* classes; int clstep; int ncl;- trainClasses - uchar* tmask; int tmstep; int ntm; - typeMask - uchar* missed;int msstep, mcstep; -missedMeasurements... - int mm, mn; == m,n == size,dim - uchar* sidx;int sistep; - sampleIdx - uchar* cidx;int cistep; - compIdx - int k, l; == n,m == dim,size (length of cidx, sidx) - int m, n; == size,dim -*/ -#define ICV_DECLARE_TRAIN_ARGS() \ - uchar* data; \ - int sstep, cstep; \ - uchar* classes; \ - int clstep; \ - int ncl; \ - uchar* tmask; \ - int tmstep; \ - int ntm; \ - uchar* missed; \ - int msstep, mcstep; \ - int mm, mn; \ - uchar* sidx; \ - int sistep; \ - uchar* cidx; \ - int cistep; \ - int k, l; \ - int m, n; \ - \ - data = classes = tmask = missed = sidx = cidx = NULL; \ - sstep = cstep = clstep = ncl = tmstep = ntm = msstep = mcstep = mm = mn = 0; \ - sistep = cistep = k = l = m = n = 0; - -#define ICV_TRAIN_DATA_REQUIRED( param, flags ) \ - if( !ICV_IS_MAT_OF_TYPE( (param), CV_32FC1 ) ) \ - { \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - else \ - { \ - ICV_RAWDATA( *(param), (flags), data, sstep, cstep, m, n ); \ - k = n; \ - l = m; \ - } - -#define ICV_TRAIN_CLASSES_REQUIRED( param ) \ - if( !ICV_IS_MAT_OF_TYPE( (param), CV_32FC1 ) ) \ - { \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - else \ - { \ - ICV_MAT2VEC( *(param), classes, clstep, ncl ); \ - if( m != ncl ) \ - { \ - CV_ERROR( CV_StsBadArg, "Unmatched sizes" ); \ - } \ - } - -#define ICV_ARG_NULL( param ) \ - if( (param) != NULL ) \ - { \ - CV_ERROR( CV_StsBadArg, #param " parameter must be NULL" ); \ - } - -#define ICV_MISSED_MEASUREMENTS_OPTIONAL( param, flags ) \ - if( param ) \ - { \ - if( !ICV_IS_MAT_OF_TYPE( param, CV_8UC1 ) ) \ - { \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - else \ - { \ - ICV_RAWDATA( *(param), (flags), missed, msstep, mcstep, mm, mn ); \ - if( mm != m || mn != n ) \ - { \ - CV_ERROR( CV_StsBadArg, "Unmatched sizes" ); \ - } \ - } \ - } - -#define ICV_COMP_IDX_OPTIONAL( param ) \ - if( param ) \ - { \ - if( !ICV_IS_MAT_OF_TYPE( param, CV_32SC1 ) ) \ - { \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - else \ - { \ - ICV_MAT2VEC( *(param), cidx, cistep, k ); \ - if( k > n ) \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - } - -#define ICV_SAMPLE_IDX_OPTIONAL( param ) \ - if( param ) \ - { \ - if( !ICV_IS_MAT_OF_TYPE( param, CV_32SC1 ) ) \ - { \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - else \ - { \ - ICV_MAT2VEC( *sampleIdx, sidx, sistep, l ); \ - if( l > m ) \ - CV_ERROR( CV_StsBadArg, "Invalid " #param " parameter" ); \ - } \ - } - -/****************************************************************************************/ -#define ICV_CONVERT_FLOAT_ARRAY_TO_MATRICE( array, matrice ) \ -{ \ - CvMat a, b; \ - int dims = (matrice)->cols; \ - int nsamples = (matrice)->rows; \ - int type = CV_MAT_TYPE((matrice)->type); \ - int i, offset = dims; \ - \ - CV_ASSERT( type == CV_32FC1 || type == CV_64FC1 ); \ - offset *= ((type == CV_32FC1) ? sizeof(float) : sizeof(double));\ - \ - b = cvMat( 1, dims, CV_32FC1 ); \ - cvGetRow( matrice, &a, 0 ); \ - for( i = 0; i < nsamples; i++, a.data.ptr += offset ) \ - { \ - b.data.fl = (float*)array[i]; \ - CV_CALL( cvConvert( &b, &a ) ); \ - } \ -} - -/****************************************************************************************\ -* Auxiliary functions declarations * -\****************************************************************************************/ - -/* Generates a set of classes centers in quantity that are generated as - uniform random vectors in parallelepiped, where is concentrated. Vectors in - should have horizontal orientation. If != NULL, the function doesn't - allocate any memory and stores generated centers in , returns . - If == NULL, the function allocates memory and creates the matrice. Centers - are supposed to be oriented horizontally. */ -CvMat* icvGenerateRandomClusterCenters( int seed, - const CvMat* data, - int num_of_clusters, - CvMat* centers CV_DEFAULT(0)); - -/* Fills the using by choosing the maximal probability. Outliers are - fixed by and have cluster label (-1). Function also controls that there - weren't "empty" clusters by filling empty clusters with the maximal probability vector. - If probs_sums != NULL, filles it with the sums of probabilities for each sample (it is - useful for normalizing probabilities' matrice of FCM) */ -void icvFindClusterLabels( const CvMat* probs, float outlier_thresh, float r, - const CvMat* labels ); - -typedef struct CvSparseVecElem32f -{ - int idx; - float val; -} -CvSparseVecElem32f; - -/* Prepare training data and related parameters */ -#define CV_TRAIN_STATMODEL_DEFRAGMENT_TRAIN_DATA 1 -#define CV_TRAIN_STATMODEL_SAMPLES_AS_ROWS 2 -#define CV_TRAIN_STATMODEL_SAMPLES_AS_COLUMNS 4 -#define CV_TRAIN_STATMODEL_CATEGORICAL_RESPONSE 8 -#define CV_TRAIN_STATMODEL_ORDERED_RESPONSE 16 -#define CV_TRAIN_STATMODEL_RESPONSES_ON_OUTPUT 32 -#define CV_TRAIN_STATMODEL_ALWAYS_COPY_TRAIN_DATA 64 -#define CV_TRAIN_STATMODEL_SPARSE_AS_SPARSE 128 - -int -cvPrepareTrainData( const char* /*funcname*/, - const CvMat* train_data, int tflag, - const CvMat* responses, int response_type, - const CvMat* var_idx, - const CvMat* sample_idx, - bool always_copy_data, - const float*** out_train_samples, - int* _sample_count, - int* _var_count, - int* _var_all, - CvMat** out_responses, - CvMat** out_response_map, - CvMat** out_var_idx, - CvMat** out_sample_idx=0 ); - -void -cvSortSamplesByClasses( const float** samples, const CvMat* classes, - int* class_ranges, const uchar** mask CV_DEFAULT(0) ); - -void -cvCombineResponseMaps (CvMat* _responses, - const CvMat* old_response_map, - CvMat* new_response_map, - CvMat** out_response_map); - -void -cvPreparePredictData( const CvArr* sample, int dims_all, const CvMat* comp_idx, - int class_count, const CvMat* prob, float** row_sample, - int as_sparse CV_DEFAULT(0) ); - -/* copies clustering [or batch "predict"] results - (labels and/or centers and/or probs) back to the output arrays */ -void -cvWritebackLabels( const CvMat* labels, CvMat* dst_labels, - const CvMat* centers, CvMat* dst_centers, - const CvMat* probs, CvMat* dst_probs, - const CvMat* sample_idx, int samples_all, - const CvMat* comp_idx, int dims_all ); -#define cvWritebackResponses cvWritebackLabels - -#define XML_FIELD_NAME "_name" -CvFileNode* icvFileNodeGetChild(CvFileNode* father, const char* name); -CvFileNode* icvFileNodeGetChildArrayElem(CvFileNode* father, const char* name,int index); -CvFileNode* icvFileNodeGetNext(CvFileNode* n, const char* name); - - -void cvCheckTrainData( const CvMat* train_data, int tflag, - const CvMat* missing_mask, - int* var_all, int* sample_all ); - -CvMat* cvPreprocessIndexArray( const CvMat* idx_arr, int data_arr_size, bool check_for_duplicates=false ); - -CvMat* cvPreprocessVarType( const CvMat* type_mask, const CvMat* var_idx, - int var_all, int* response_type ); - -CvMat* cvPreprocessOrderedResponses( const CvMat* responses, - const CvMat* sample_idx, int sample_all ); - -CvMat* cvPreprocessCategoricalResponses( const CvMat* responses, - const CvMat* sample_idx, int sample_all, - CvMat** out_response_map, CvMat** class_counts=0 ); - -const float** cvGetTrainSamples( const CvMat* train_data, int tflag, - const CvMat* var_idx, const CvMat* sample_idx, - int* _var_count, int* _sample_count, - bool always_copy_data=false ); - -namespace cv -{ - struct DTreeBestSplitFinder - { - DTreeBestSplitFinder(){ tree = 0; node = 0; } - DTreeBestSplitFinder( CvDTree* _tree, CvDTreeNode* _node); - DTreeBestSplitFinder( const DTreeBestSplitFinder& finder, Split ); - virtual ~DTreeBestSplitFinder() {} - virtual void operator()(const BlockedRange& range); - void join( DTreeBestSplitFinder& rhs ); - Ptr bestSplit; - Ptr split; - int splitSize; - CvDTree* tree; - CvDTreeNode* node; - }; - - struct ForestTreeBestSplitFinder : DTreeBestSplitFinder - { - ForestTreeBestSplitFinder() : DTreeBestSplitFinder() {} - ForestTreeBestSplitFinder( CvForestTree* _tree, CvDTreeNode* _node ); - ForestTreeBestSplitFinder( const ForestTreeBestSplitFinder& finder, Split ); - virtual void operator()(const BlockedRange& range); - }; -} - -#endif /* __ML_H__ */ diff --git a/modules/ml/src/rtrees.cpp b/modules/ml/src/rtrees.cpp deleted file mode 100644 index d88611b..0000000 --- a/modules/ml/src/rtrees.cpp +++ /dev/null @@ -1,867 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -CvForestTree::CvForestTree() -{ - forest = NULL; -} - - -CvForestTree::~CvForestTree() -{ - clear(); -} - - -bool CvForestTree::train( CvDTreeTrainData* _data, - const CvMat* _subsample_idx, - CvRTrees* _forest ) -{ - clear(); - forest = _forest; - - data = _data; - data->shared = true; - return do_train(_subsample_idx); -} - - -bool -CvForestTree::train( const CvMat*, int, const CvMat*, const CvMat*, - const CvMat*, const CvMat*, const CvMat*, CvDTreeParams ) -{ - assert(0); - return false; -} - - -bool -CvForestTree::train( CvDTreeTrainData*, const CvMat* ) -{ - assert(0); - return false; -} - - - -namespace cv -{ - -ForestTreeBestSplitFinder::ForestTreeBestSplitFinder( CvForestTree* _tree, CvDTreeNode* _node ) : - DTreeBestSplitFinder(_tree, _node) {} - -ForestTreeBestSplitFinder::ForestTreeBestSplitFinder( const ForestTreeBestSplitFinder& finder, Split spl ) : - DTreeBestSplitFinder( finder, spl ) {} - -void ForestTreeBestSplitFinder::operator()(const BlockedRange& range) -{ - int vi, vi1 = range.begin(), vi2 = range.end(); - int n = node->sample_count; - CvDTreeTrainData* data = tree->get_data(); - AutoBuffer inn_buf(2*n*(sizeof(int) + sizeof(float))); - - CvForestTree* ftree = (CvForestTree*)tree; - const CvMat* active_var_mask = ftree->forest->get_active_var_mask(); - - for( vi = vi1; vi < vi2; vi++ ) - { - CvDTreeSplit *res; - int ci = data->var_type->data.i[vi]; - if( node->num_valid[vi] <= 1 - || (active_var_mask && !active_var_mask->data.ptr[vi]) ) - continue; - - if( data->is_classifier ) - { - if( ci >= 0 ) - res = ftree->find_split_cat_class( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - else - res = ftree->find_split_ord_class( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - } - else - { - if( ci >= 0 ) - res = ftree->find_split_cat_reg( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - else - res = ftree->find_split_ord_reg( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - } - - if( res && bestSplit->quality < split->quality ) - memcpy( (CvDTreeSplit*)bestSplit, (CvDTreeSplit*)split, splitSize ); - } -} -} - -CvDTreeSplit* CvForestTree::find_best_split( CvDTreeNode* node ) -{ - CvMat* active_var_mask = 0; - if( forest ) - { - int var_count; - CvRNG* rng = forest->get_rng(); - - active_var_mask = forest->get_active_var_mask(); - var_count = active_var_mask->cols; - - CV_Assert( var_count == data->var_count ); - - for( int vi = 0; vi < var_count; vi++ ) - { - uchar temp; - int i1 = cvRandInt(rng) % var_count; - int i2 = cvRandInt(rng) % var_count; - CV_SWAP( active_var_mask->data.ptr[i1], - active_var_mask->data.ptr[i2], temp ); - } - } - - cv::ForestTreeBestSplitFinder finder( this, node ); - - cv::parallel_reduce(cv::BlockedRange(0, data->var_count), finder); - - CvDTreeSplit *bestSplit = 0; - if( finder.bestSplit->quality > 0 ) - { - bestSplit = data->new_split_cat( 0, -1.0f ); - memcpy( bestSplit, finder.bestSplit, finder.splitSize ); - } - - return bestSplit; -} - -void CvForestTree::read( CvFileStorage* fs, CvFileNode* fnode, CvRTrees* _forest, CvDTreeTrainData* _data ) -{ - CvDTree::read( fs, fnode, _data ); - forest = _forest; -} - - -void CvForestTree::read( CvFileStorage*, CvFileNode* ) -{ - assert(0); -} - -void CvForestTree::read( CvFileStorage* _fs, CvFileNode* _node, - CvDTreeTrainData* _data ) -{ - CvDTree::read( _fs, _node, _data ); -} - - -////////////////////////////////////////////////////////////////////////////////////////// -// Random trees // -////////////////////////////////////////////////////////////////////////////////////////// -CvRTParams::CvRTParams() : CvDTreeParams( 5, 10, 0, false, 10, 0, false, false, 0 ), - calc_var_importance(false), nactive_vars(0) -{ - term_crit = cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 50, 0.1 ); -} - -CvRTParams::CvRTParams( int _max_depth, int _min_sample_count, - float _regression_accuracy, bool _use_surrogates, - int _max_categories, const float* _priors, bool _calc_var_importance, - int _nactive_vars, int max_num_of_trees_in_the_forest, - float forest_accuracy, int termcrit_type ) : - CvDTreeParams( _max_depth, _min_sample_count, _regression_accuracy, - _use_surrogates, _max_categories, 0, - false, false, _priors ), - calc_var_importance(_calc_var_importance), - nactive_vars(_nactive_vars) -{ - term_crit = cvTermCriteria(termcrit_type, - max_num_of_trees_in_the_forest, forest_accuracy); -} - -CvRTrees::CvRTrees() -{ - nclasses = 0; - oob_error = 0; - ntrees = 0; - trees = NULL; - data = NULL; - active_var_mask = NULL; - var_importance = NULL; - rng = &cv::theRNG(); - default_model_name = "my_random_trees"; -} - - -void CvRTrees::clear() -{ - int k; - for( k = 0; k < ntrees; k++ ) - delete trees[k]; - cvFree( &trees ); - - delete data; - data = 0; - - cvReleaseMat( &active_var_mask ); - cvReleaseMat( &var_importance ); - ntrees = 0; -} - - -CvRTrees::~CvRTrees() -{ - clear(); -} - -std::string CvRTrees::getName() const -{ - return CV_TYPE_NAME_ML_RTREES; -} - -CvMat* CvRTrees::get_active_var_mask() -{ - return active_var_mask; -} - - -CvRNG* CvRTrees::get_rng() -{ - return &rng->state; -} - -bool CvRTrees::train( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, CvRTParams params ) -{ - clear(); - - CvDTreeParams tree_params( params.max_depth, params.min_sample_count, - params.regression_accuracy, params.use_surrogates, params.max_categories, - params.cv_folds, params.use_1se_rule, false, params.priors ); - - data = new CvDTreeTrainData(); - data->set_data( _train_data, _tflag, _responses, _var_idx, - _sample_idx, _var_type, _missing_mask, tree_params, true); - - int var_count = data->var_count; - if( params.nactive_vars > var_count ) - params.nactive_vars = var_count; - else if( params.nactive_vars == 0 ) - params.nactive_vars = (int)sqrt((double)var_count); - else if( params.nactive_vars < 0 ) - CV_Error( CV_StsBadArg, " must be non-negative" ); - - // Create mask of active variables at the tree nodes - active_var_mask = cvCreateMat( 1, var_count, CV_8UC1 ); - if( params.calc_var_importance ) - { - var_importance = cvCreateMat( 1, var_count, CV_32FC1 ); - cvZero(var_importance); - } - { // initialize active variables mask - CvMat submask1, submask2; - CV_Assert( (active_var_mask->cols >= 1) && (params.nactive_vars > 0) && (params.nactive_vars <= active_var_mask->cols) ); - cvGetCols( active_var_mask, &submask1, 0, params.nactive_vars ); - cvSet( &submask1, cvScalar(1) ); - if( params.nactive_vars < active_var_mask->cols ) - { - cvGetCols( active_var_mask, &submask2, params.nactive_vars, var_count ); - cvZero( &submask2 ); - } - } - - return grow_forest( params.term_crit ); -} - -bool CvRTrees::train( CvMLData* _data, CvRTParams params ) -{ - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* var_types = _data->get_var_types(); - const CvMat* train_sidx = _data->get_train_sample_idx(); - const CvMat* var_idx = _data->get_var_idx(); - - return train( values, CV_ROW_SAMPLE, response, var_idx, - train_sidx, var_types, missing, params ); -} - -bool CvRTrees::grow_forest( const CvTermCriteria term_crit ) -{ - CvMat* sample_idx_mask_for_tree = 0; - CvMat* sample_idx_for_tree = 0; - - const int max_ntrees = term_crit.max_iter; - const double max_oob_err = term_crit.epsilon; - - const int dims = data->var_count; - float maximal_response = 0; - - CvMat* oob_sample_votes = 0; - CvMat* oob_responses = 0; - - float* oob_samples_perm_ptr= 0; - - float* samples_ptr = 0; - uchar* missing_ptr = 0; - float* true_resp_ptr = 0; - bool is_oob_or_vimportance = (max_oob_err > 0 && term_crit.type != CV_TERMCRIT_ITER) || var_importance; - - // oob_predictions_sum[i] = sum of predicted values for the i-th sample - // oob_num_of_predictions[i] = number of summands - // (number of predictions for the i-th sample) - // initialize these variable to avoid warning C4701 - CvMat oob_predictions_sum = cvMat( 1, 1, CV_32FC1 ); - CvMat oob_num_of_predictions = cvMat( 1, 1, CV_32FC1 ); - - nsamples = data->sample_count; - nclasses = data->get_num_classes(); - - if ( is_oob_or_vimportance ) - { - if( data->is_classifier ) - { - oob_sample_votes = cvCreateMat( nsamples, nclasses, CV_32SC1 ); - cvZero(oob_sample_votes); - } - else - { - // oob_responses[0,i] = oob_predictions_sum[i] - // = sum of predicted values for the i-th sample - // oob_responses[1,i] = oob_num_of_predictions[i] - // = number of summands (number of predictions for the i-th sample) - oob_responses = cvCreateMat( 2, nsamples, CV_32FC1 ); - cvZero(oob_responses); - cvGetRow( oob_responses, &oob_predictions_sum, 0 ); - cvGetRow( oob_responses, &oob_num_of_predictions, 1 ); - } - - oob_samples_perm_ptr = (float*)cvAlloc( sizeof(float)*nsamples*dims ); - samples_ptr = (float*)cvAlloc( sizeof(float)*nsamples*dims ); - missing_ptr = (uchar*)cvAlloc( sizeof(uchar)*nsamples*dims ); - true_resp_ptr = (float*)cvAlloc( sizeof(float)*nsamples ); - - data->get_vectors( 0, samples_ptr, missing_ptr, true_resp_ptr ); - - double minval, maxval; - CvMat responses = cvMat(1, nsamples, CV_32FC1, true_resp_ptr); - cvMinMaxLoc( &responses, &minval, &maxval ); - maximal_response = (float)MAX( MAX( fabs(minval), fabs(maxval) ), 0 ); - } - - trees = (CvForestTree**)cvAlloc( sizeof(trees[0])*max_ntrees ); - memset( trees, 0, sizeof(trees[0])*max_ntrees ); - - sample_idx_mask_for_tree = cvCreateMat( 1, nsamples, CV_8UC1 ); - sample_idx_for_tree = cvCreateMat( 1, nsamples, CV_32SC1 ); - - ntrees = 0; - while( ntrees < max_ntrees ) - { - int i, oob_samples_count = 0; - double ncorrect_responses = 0; // used for estimation of variable importance - CvForestTree* tree = 0; - - cvZero( sample_idx_mask_for_tree ); - for(i = 0; i < nsamples; i++ ) //form sample for creation one tree - { - int idx = (*rng)(nsamples); - sample_idx_for_tree->data.i[i] = idx; - sample_idx_mask_for_tree->data.ptr[idx] = 0xFF; - } - - trees[ntrees] = new CvForestTree(); - tree = trees[ntrees]; - tree->train( data, sample_idx_for_tree, this ); - - if ( is_oob_or_vimportance ) - { - CvMat sample, missing; - // form array of OOB samples indices and get these samples - sample = cvMat( 1, dims, CV_32FC1, samples_ptr ); - missing = cvMat( 1, dims, CV_8UC1, missing_ptr ); - - oob_error = 0; - for( i = 0; i < nsamples; i++, - sample.data.fl += dims, missing.data.ptr += dims ) - { - CvDTreeNode* predicted_node = 0; - // check if the sample is OOB - if( sample_idx_mask_for_tree->data.ptr[i] ) - continue; - - // predict oob samples - if( !predicted_node ) - predicted_node = tree->predict(&sample, &missing, true); - - if( !data->is_classifier ) //regression - { - double avg_resp, resp = predicted_node->value; - oob_predictions_sum.data.fl[i] += (float)resp; - oob_num_of_predictions.data.fl[i] += 1; - - // compute oob error - avg_resp = oob_predictions_sum.data.fl[i]/oob_num_of_predictions.data.fl[i]; - avg_resp -= true_resp_ptr[i]; - oob_error += avg_resp*avg_resp; - resp = (resp - true_resp_ptr[i])/maximal_response; - ncorrect_responses += exp( -resp*resp ); - } - else //classification - { - double prdct_resp; - CvPoint max_loc; - CvMat votes; - - cvGetRow(oob_sample_votes, &votes, i); - votes.data.i[predicted_node->class_idx]++; - - // compute oob error - cvMinMaxLoc( &votes, 0, 0, 0, &max_loc ); - - prdct_resp = data->cat_map->data.i[max_loc.x]; - oob_error += (fabs(prdct_resp - true_resp_ptr[i]) < FLT_EPSILON) ? 0 : 1; - - ncorrect_responses += cvRound(predicted_node->value - true_resp_ptr[i]) == 0; - } - oob_samples_count++; - } - if( oob_samples_count > 0 ) - oob_error /= (double)oob_samples_count; - - // estimate variable importance - if( var_importance && oob_samples_count > 0 ) - { - int m; - - memcpy( oob_samples_perm_ptr, samples_ptr, dims*nsamples*sizeof(float)); - for( m = 0; m < dims; m++ ) - { - double ncorrect_responses_permuted = 0; - // randomly permute values of the m-th variable in the oob samples - float* mth_var_ptr = oob_samples_perm_ptr + m; - - for( i = 0; i < nsamples; i++ ) - { - int i1, i2; - float temp; - - if( sample_idx_mask_for_tree->data.ptr[i] ) //the sample is not OOB - continue; - i1 = (*rng)(nsamples); - i2 = (*rng)(nsamples); - CV_SWAP( mth_var_ptr[i1*dims], mth_var_ptr[i2*dims], temp ); - - // turn values of (m-1)-th variable, that were permuted - // at the previous iteration, untouched - if( m > 1 ) - oob_samples_perm_ptr[i*dims+m-1] = samples_ptr[i*dims+m-1]; - } - - // predict "permuted" cases and calculate the number of votes for the - // correct class in the variable-m-permuted oob data - sample = cvMat( 1, dims, CV_32FC1, oob_samples_perm_ptr ); - missing = cvMat( 1, dims, CV_8UC1, missing_ptr ); - for( i = 0; i < nsamples; i++, - sample.data.fl += dims, missing.data.ptr += dims ) - { - double predct_resp, true_resp; - - if( sample_idx_mask_for_tree->data.ptr[i] ) //the sample is not OOB - continue; - - predct_resp = tree->predict(&sample, &missing, true)->value; - true_resp = true_resp_ptr[i]; - if( data->is_classifier ) - ncorrect_responses_permuted += cvRound(true_resp - predct_resp) == 0; - else - { - true_resp = (true_resp - predct_resp)/maximal_response; - ncorrect_responses_permuted += exp( -true_resp*true_resp ); - } - } - var_importance->data.fl[m] += (float)(ncorrect_responses - - ncorrect_responses_permuted); - } - } - } - ntrees++; - if( term_crit.type != CV_TERMCRIT_ITER && oob_error < max_oob_err ) - break; - } - - if( var_importance ) - { - for ( int vi = 0; vi < var_importance->cols; vi++ ) - var_importance->data.fl[vi] = ( var_importance->data.fl[vi] > 0 ) ? - var_importance->data.fl[vi] : 0; - cvNormalize( var_importance, var_importance, 1., 0, CV_L1 ); - } - - cvFree( &oob_samples_perm_ptr ); - cvFree( &samples_ptr ); - cvFree( &missing_ptr ); - cvFree( &true_resp_ptr ); - - cvReleaseMat( &sample_idx_mask_for_tree ); - cvReleaseMat( &sample_idx_for_tree ); - - cvReleaseMat( &oob_sample_votes ); - cvReleaseMat( &oob_responses ); - - return true; -} - - -const CvMat* CvRTrees::get_var_importance() -{ - return var_importance; -} - - -float CvRTrees::get_proximity( const CvMat* sample1, const CvMat* sample2, - const CvMat* missing1, const CvMat* missing2 ) const -{ - float result = 0; - - for( int i = 0; i < ntrees; i++ ) - result += trees[i]->predict( sample1, missing1 ) == - trees[i]->predict( sample2, missing2 ) ? 1 : 0; - result = result/(float)ntrees; - - return result; -} - -float CvRTrees::calc_error( CvMLData* _data, int type , std::vector *resp ) -{ - float err = 0; - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* sample_idx = (type == CV_TEST_ERROR) ? _data->get_test_sample_idx() : _data->get_train_sample_idx(); - const CvMat* var_types = _data->get_var_types(); - int* sidx = sample_idx ? sample_idx->data.i : 0; - int r_step = CV_IS_MAT_CONT(response->type) ? - 1 : response->step / CV_ELEM_SIZE(response->type); - bool is_classifier = var_types->data.ptr[var_types->cols-1] == CV_VAR_CATEGORICAL; - int sample_count = sample_idx ? sample_idx->cols : 0; - sample_count = (type == CV_TRAIN_ERROR && sample_count == 0) ? values->rows : sample_count; - float* pred_resp = 0; - if( resp && (sample_count > 0) ) - { - resp->resize( sample_count ); - pred_resp = &((*resp)[0]); - } - if ( is_classifier ) - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 ); - if( pred_resp ) - pred_resp[i] = r; - int d = fabs((double)r - response->data.fl[si*r_step]) <= FLT_EPSILON ? 0 : 1; - err += d; - } - err = sample_count ? err / (float)sample_count * 100 : -FLT_MAX; - } - else - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 ); - if( pred_resp ) - pred_resp[i] = r; - float d = r - response->data.fl[si*r_step]; - err += d*d; - } - err = sample_count ? err / (float)sample_count : -FLT_MAX; - } - return err; -} - -float CvRTrees::get_train_error() -{ - float err = -1; - - int sample_count = data->sample_count; - int var_count = data->var_count; - - float *values_ptr = (float*)cvAlloc( sizeof(float)*sample_count*var_count ); - uchar *missing_ptr = (uchar*)cvAlloc( sizeof(uchar)*sample_count*var_count ); - float *responses_ptr = (float*)cvAlloc( sizeof(float)*sample_count ); - - data->get_vectors( 0, values_ptr, missing_ptr, responses_ptr); - - if (data->is_classifier) - { - int err_count = 0; - float *vp = values_ptr; - uchar *mp = missing_ptr; - for (int si = 0; si < sample_count; si++, vp += var_count, mp += var_count) - { - CvMat sample = cvMat( 1, var_count, CV_32FC1, vp ); - CvMat missing = cvMat( 1, var_count, CV_8UC1, mp ); - float r = predict( &sample, &missing ); - if (fabs(r - responses_ptr[si]) >= FLT_EPSILON) - err_count++; - } - err = (float)err_count / (float)sample_count; - } - else - CV_Error( CV_StsBadArg, "This method is not supported for regression problems" ); - - cvFree( &values_ptr ); - cvFree( &missing_ptr ); - cvFree( &responses_ptr ); - - return err; -} - - -float CvRTrees::predict( const CvMat* sample, const CvMat* missing ) const -{ - double result = -1; - int k; - - if( nclasses > 0 ) //classification - { - int max_nvotes = 0; - cv::AutoBuffer _votes(nclasses); - int* votes = _votes; - memset( votes, 0, sizeof(*votes)*nclasses ); - for( k = 0; k < ntrees; k++ ) - { - CvDTreeNode* predicted_node = trees[k]->predict( sample, missing ); - int nvotes; - int class_idx = predicted_node->class_idx; - CV_Assert( 0 <= class_idx && class_idx < nclasses ); - - nvotes = ++votes[class_idx]; - if( nvotes > max_nvotes ) - { - max_nvotes = nvotes; - result = predicted_node->value; - } - } - } - else // regression - { - result = 0; - for( k = 0; k < ntrees; k++ ) - result += trees[k]->predict( sample, missing )->value; - result /= (double)ntrees; - } - - return (float)result; -} - -float CvRTrees::predict_prob( const CvMat* sample, const CvMat* missing) const -{ - if( nclasses == 2 ) //classification - { - cv::AutoBuffer _votes(nclasses); - int* votes = _votes; - memset( votes, 0, sizeof(*votes)*nclasses ); - for( int k = 0; k < ntrees; k++ ) - { - CvDTreeNode* predicted_node = trees[k]->predict( sample, missing ); - int class_idx = predicted_node->class_idx; - CV_Assert( 0 <= class_idx && class_idx < nclasses ); - - ++votes[class_idx]; - } - - return float(votes[1])/ntrees; - } - else // regression - CV_Error(CV_StsBadArg, "This function works for binary classification problems only..."); - - return -1; -} - -void CvRTrees::write( CvFileStorage* fs, const char* name ) const -{ - int k; - - if( ntrees < 1 || !trees || nsamples < 1 ) - CV_Error( CV_StsBadArg, "Invalid CvRTrees object" ); - - std::string modelNodeName = this->getName(); - cvStartWriteStruct( fs, name, CV_NODE_MAP, modelNodeName.c_str() ); - - cvWriteInt( fs, "nclasses", nclasses ); - cvWriteInt( fs, "nsamples", nsamples ); - cvWriteInt( fs, "nactive_vars", (int)cvSum(active_var_mask).val[0] ); - cvWriteReal( fs, "oob_error", oob_error ); - - if( var_importance ) - cvWrite( fs, "var_importance", var_importance ); - - cvWriteInt( fs, "ntrees", ntrees ); - - data->write_params( fs ); - - cvStartWriteStruct( fs, "trees", CV_NODE_SEQ ); - - for( k = 0; k < ntrees; k++ ) - { - cvStartWriteStruct( fs, 0, CV_NODE_MAP ); - trees[k]->write( fs ); - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); //trees - cvEndWriteStruct( fs ); //CV_TYPE_NAME_ML_RTREES -} - - -void CvRTrees::read( CvFileStorage* fs, CvFileNode* fnode ) -{ - int nactive_vars, var_count, k; - CvSeqReader reader; - CvFileNode* trees_fnode = 0; - - clear(); - - nclasses = cvReadIntByName( fs, fnode, "nclasses", -1 ); - nsamples = cvReadIntByName( fs, fnode, "nsamples" ); - nactive_vars = cvReadIntByName( fs, fnode, "nactive_vars", -1 ); - oob_error = cvReadRealByName(fs, fnode, "oob_error", -1 ); - ntrees = cvReadIntByName( fs, fnode, "ntrees", -1 ); - - var_importance = (CvMat*)cvReadByName( fs, fnode, "var_importance" ); - - if( nclasses < 0 || nsamples <= 0 || nactive_vars < 0 || oob_error < 0 || ntrees <= 0) - CV_Error( CV_StsParseError, "Some , , , " - ", , of tags are missing" ); - - rng = &cv::theRNG(); - - trees = (CvForestTree**)cvAlloc( sizeof(trees[0])*ntrees ); - memset( trees, 0, sizeof(trees[0])*ntrees ); - - data = new CvDTreeTrainData(); - data->read_params( fs, fnode ); - data->shared = true; - - trees_fnode = cvGetFileNodeByName( fs, fnode, "trees" ); - if( !trees_fnode || !CV_NODE_IS_SEQ(trees_fnode->tag) ) - CV_Error( CV_StsParseError, " tag is missing" ); - - cvStartReadSeq( trees_fnode->data.seq, &reader ); - if( reader.seq->total != ntrees ) - CV_Error( CV_StsParseError, - " is not equal to the number of trees saved in file" ); - - for( k = 0; k < ntrees; k++ ) - { - trees[k] = new CvForestTree(); - trees[k]->read( fs, (CvFileNode*)reader.ptr, this, data ); - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - - var_count = data->var_count; - active_var_mask = cvCreateMat( 1, var_count, CV_8UC1 ); - { - // initialize active variables mask - CvMat submask1; - cvGetCols( active_var_mask, &submask1, 0, nactive_vars ); - cvSet( &submask1, cvScalar(1) ); - - if( nactive_vars < var_count ) - { - CvMat submask2; - cvGetCols( active_var_mask, &submask2, nactive_vars, var_count ); - cvZero( &submask2 ); - } - } -} - - -int CvRTrees::get_tree_count() const -{ - return ntrees; -} - -CvForestTree* CvRTrees::get_tree(int i) const -{ - return (unsigned)i < (unsigned)ntrees ? trees[i] : 0; -} - -using namespace cv; - -bool CvRTrees::train( const Mat& _train_data, int _tflag, - const Mat& _responses, const Mat& _var_idx, - const Mat& _sample_idx, const Mat& _var_type, - const Mat& _missing_mask, CvRTParams _params ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, - sidx = _sample_idx, vtype = _var_type, mmask = _missing_mask; - return train(&tdata, _tflag, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0, vtype.data.ptr ? &vtype : 0, - mmask.data.ptr ? &mmask : 0, _params); -} - - -float CvRTrees::predict( const Mat& _sample, const Mat& _missing ) const -{ - CvMat sample = _sample, mmask = _missing; - return predict(&sample, mmask.data.ptr ? &mmask : 0); -} - -float CvRTrees::predict_prob( const Mat& _sample, const Mat& _missing) const -{ - CvMat sample = _sample, mmask = _missing; - return predict_prob(&sample, mmask.data.ptr ? &mmask : 0); -} - -Mat CvRTrees::getVarImportance() -{ - return Mat(get_var_importance()); -} - -// End of file. diff --git a/modules/ml/src/svm.cpp b/modules/ml/src/svm.cpp deleted file mode 100644 index f158805..0000000 --- a/modules/ml/src/svm.cpp +++ /dev/null @@ -1,2959 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/****************************************************************************************\ - COPYRIGHT NOTICE - ---------------- - - The code has been derived from libsvm library (version 2.6) - (http://www.csie.ntu.edu.tw/~cjlin/libsvm). - - Here is the orignal copyright: ------------------------------------------------------------------------------------------- - Copyright (c) 2000-2003 Chih-Chung Chang and Chih-Jen Lin - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither name of copyright holders 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 REGENTS OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -\****************************************************************************************/ - -using namespace cv; - -#define CV_SVM_MIN_CACHE_SIZE (40 << 20) /* 40Mb */ - -#include -#include - -#if 1 -typedef float Qfloat; -#define QFLOAT_TYPE CV_32F -#else -typedef double Qfloat; -#define QFLOAT_TYPE CV_64F -#endif - -// Param Grid -bool CvParamGrid::check() const -{ - bool ok = false; - - CV_FUNCNAME( "CvParamGrid::check" ); - __BEGIN__; - - if( min_val > max_val ) - CV_ERROR( CV_StsBadArg, "Lower bound of the grid must be less then the upper one" ); - if( min_val < DBL_EPSILON ) - CV_ERROR( CV_StsBadArg, "Lower bound of the grid must be positive" ); - if( step < 1. + FLT_EPSILON ) - CV_ERROR( CV_StsBadArg, "Grid step must greater then 1" ); - - ok = true; - - __END__; - - return ok; -} - -CvParamGrid CvSVM::get_default_grid( int param_id ) -{ - CvParamGrid grid; - if( param_id == CvSVM::C ) - { - grid.min_val = 0.1; - grid.max_val = 500; - grid.step = 5; // total iterations = 5 - } - else if( param_id == CvSVM::GAMMA ) - { - grid.min_val = 1e-5; - grid.max_val = 0.6; - grid.step = 15; // total iterations = 4 - } - else if( param_id == CvSVM::P ) - { - grid.min_val = 0.01; - grid.max_val = 100; - grid.step = 7; // total iterations = 4 - } - else if( param_id == CvSVM::NU ) - { - grid.min_val = 0.01; - grid.max_val = 0.2; - grid.step = 3; // total iterations = 3 - } - else if( param_id == CvSVM::COEF ) - { - grid.min_val = 0.1; - grid.max_val = 300; - grid.step = 14; // total iterations = 3 - } - else if( param_id == CvSVM::DEGREE ) - { - grid.min_val = 0.01; - grid.max_val = 4; - grid.step = 7; // total iterations = 3 - } - else - cvError( CV_StsBadArg, "CvSVM::get_default_grid", "Invalid type of parameter " - "(use one of CvSVM::C, CvSVM::GAMMA et al.)", __FILE__, __LINE__ ); - return grid; -} - -// SVM training parameters -CvSVMParams::CvSVMParams() : - svm_type(CvSVM::C_SVC), kernel_type(CvSVM::RBF), degree(0), - gamma(1), coef0(0), C(1), nu(0), p(0), class_weights(0) -{ - term_crit = cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON ); -} - - -CvSVMParams::CvSVMParams( int _svm_type, int _kernel_type, - double _degree, double _gamma, double _coef0, - double _Con, double _nu, double _p, - CvMat* _class_weights, CvTermCriteria _term_crit ) : - svm_type(_svm_type), kernel_type(_kernel_type), - degree(_degree), gamma(_gamma), coef0(_coef0), - C(_Con), nu(_nu), p(_p), class_weights(_class_weights), term_crit(_term_crit) -{ -} - - -/////////////////////////////////////// SVM kernel /////////////////////////////////////// - -CvSVMKernel::CvSVMKernel() -{ - clear(); -} - - -void CvSVMKernel::clear() -{ - params = 0; - calc_func = 0; -} - - -CvSVMKernel::~CvSVMKernel() -{ -} - - -CvSVMKernel::CvSVMKernel( const CvSVMParams* _params, Calc _calc_func ) -{ - clear(); - create( _params, _calc_func ); -} - - -bool CvSVMKernel::create( const CvSVMParams* _params, Calc _calc_func ) -{ - clear(); - params = _params; - calc_func = _calc_func; - - if( !calc_func ) - calc_func = params->kernel_type == CvSVM::RBF ? &CvSVMKernel::calc_rbf : - params->kernel_type == CvSVM::POLY ? &CvSVMKernel::calc_poly : - params->kernel_type == CvSVM::SIGMOID ? &CvSVMKernel::calc_sigmoid : - &CvSVMKernel::calc_linear; - - return true; -} - - -void CvSVMKernel::calc_non_rbf_base( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results, - double alpha, double beta ) -{ - int j, k; - for( j = 0; j < vcount; j++ ) - { - const float* sample = vecs[j]; - double s = 0; - for( k = 0; k <= var_count - 4; k += 4 ) - s += sample[k]*another[k] + sample[k+1]*another[k+1] + - sample[k+2]*another[k+2] + sample[k+3]*another[k+3]; - for( ; k < var_count; k++ ) - s += sample[k]*another[k]; - results[j] = (Qfloat)(s*alpha + beta); - } -} - - -void CvSVMKernel::calc_linear( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results ) -{ - calc_non_rbf_base( vcount, var_count, vecs, another, results, 1, 0 ); -} - - -void CvSVMKernel::calc_poly( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results ) -{ - CvMat R = cvMat( 1, vcount, QFLOAT_TYPE, results ); - calc_non_rbf_base( vcount, var_count, vecs, another, results, params->gamma, params->coef0 ); - if( vcount > 0 ) - cvPow( &R, &R, params->degree ); -} - - -void CvSVMKernel::calc_sigmoid( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results ) -{ - int j; - calc_non_rbf_base( vcount, var_count, vecs, another, results, - -2*params->gamma, -2*params->coef0 ); - // TODO: speedup this - for( j = 0; j < vcount; j++ ) - { - Qfloat t = results[j]; - double e = exp(-fabs(t)); - if( t > 0 ) - results[j] = (Qfloat)((1. - e)/(1. + e)); - else - results[j] = (Qfloat)((e - 1.)/(e + 1.)); - } -} - - -void CvSVMKernel::calc_rbf( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results ) -{ - CvMat R = cvMat( 1, vcount, QFLOAT_TYPE, results ); - double gamma = -params->gamma; - int j, k; - - for( j = 0; j < vcount; j++ ) - { - const float* sample = vecs[j]; - double s = 0; - - for( k = 0; k <= var_count - 4; k += 4 ) - { - double t0 = sample[k] - another[k]; - double t1 = sample[k+1] - another[k+1]; - - s += t0*t0 + t1*t1; - - t0 = sample[k+2] - another[k+2]; - t1 = sample[k+3] - another[k+3]; - - s += t0*t0 + t1*t1; - } - - for( ; k < var_count; k++ ) - { - double t0 = sample[k] - another[k]; - s += t0*t0; - } - results[j] = (Qfloat)(s*gamma); - } - - if( vcount > 0 ) - cvExp( &R, &R ); -} - - -void CvSVMKernel::calc( int vcount, int var_count, const float** vecs, - const float* another, Qfloat* results ) -{ - const Qfloat max_val = (Qfloat)(FLT_MAX*1e-3); - int j; - (this->*calc_func)( vcount, var_count, vecs, another, results ); - for( j = 0; j < vcount; j++ ) - { - if( results[j] > max_val ) - results[j] = max_val; - } -} - - -// Generalized SMO+SVMlight algorithm -// Solves: -// -// min [0.5(\alpha^T Q \alpha) + b^T \alpha] -// -// y^T \alpha = \delta -// y_i = +1 or -1 -// 0 <= alpha_i <= Cp for y_i = 1 -// 0 <= alpha_i <= Cn for y_i = -1 -// -// Given: -// -// Q, b, y, Cp, Cn, and an initial feasible point \alpha -// l is the size of vectors and matrices -// eps is the stopping criterion -// -// solution will be put in \alpha, objective value will be put in obj -// - -void CvSVMSolver::clear() -{ - G = 0; - alpha = 0; - y = 0; - b = 0; - buf[0] = buf[1] = 0; - cvReleaseMemStorage( &storage ); - kernel = 0; - select_working_set_func = 0; - calc_rho_func = 0; - - rows = 0; - samples = 0; - get_row_func = 0; -} - - -CvSVMSolver::CvSVMSolver() -{ - storage = 0; - clear(); -} - - -CvSVMSolver::~CvSVMSolver() -{ - clear(); -} - - -CvSVMSolver::CvSVMSolver( int _sample_count, int _var_count, const float** _samples, schar* _y, - int _alpha_count, double* _alpha, double _Cp, double _Cn, - CvMemStorage* _storage, CvSVMKernel* _kernel, GetRow _get_row, - SelectWorkingSet _select_working_set, CalcRho _calc_rho ) -{ - storage = 0; - create( _sample_count, _var_count, _samples, _y, _alpha_count, _alpha, _Cp, _Cn, - _storage, _kernel, _get_row, _select_working_set, _calc_rho ); -} - - -bool CvSVMSolver::create( int _sample_count, int _var_count, const float** _samples, schar* _y, - int _alpha_count, double* _alpha, double _Cp, double _Cn, - CvMemStorage* _storage, CvSVMKernel* _kernel, GetRow _get_row, - SelectWorkingSet _select_working_set, CalcRho _calc_rho ) -{ - bool ok = false; - int i, svm_type; - - CV_FUNCNAME( "CvSVMSolver::create" ); - - __BEGIN__; - - int rows_hdr_size; - - clear(); - - sample_count = _sample_count; - var_count = _var_count; - samples = _samples; - y = _y; - alpha_count = _alpha_count; - alpha = _alpha; - kernel = _kernel; - - C[0] = _Cn; - C[1] = _Cp; - eps = kernel->params->term_crit.epsilon; - max_iter = kernel->params->term_crit.max_iter; - storage = cvCreateChildMemStorage( _storage ); - - b = (double*)cvMemStorageAlloc( storage, alpha_count*sizeof(b[0])); - alpha_status = (schar*)cvMemStorageAlloc( storage, alpha_count*sizeof(alpha_status[0])); - G = (double*)cvMemStorageAlloc( storage, alpha_count*sizeof(G[0])); - for( i = 0; i < 2; i++ ) - buf[i] = (Qfloat*)cvMemStorageAlloc( storage, sample_count*2*sizeof(buf[i][0]) ); - svm_type = kernel->params->svm_type; - - select_working_set_func = _select_working_set; - if( !select_working_set_func ) - select_working_set_func = svm_type == CvSVM::NU_SVC || svm_type == CvSVM::NU_SVR ? - &CvSVMSolver::select_working_set_nu_svm : &CvSVMSolver::select_working_set; - - calc_rho_func = _calc_rho; - if( !calc_rho_func ) - calc_rho_func = svm_type == CvSVM::NU_SVC || svm_type == CvSVM::NU_SVR ? - &CvSVMSolver::calc_rho_nu_svm : &CvSVMSolver::calc_rho; - - get_row_func = _get_row; - if( !get_row_func ) - get_row_func = params->svm_type == CvSVM::EPS_SVR || - params->svm_type == CvSVM::NU_SVR ? &CvSVMSolver::get_row_svr : - params->svm_type == CvSVM::C_SVC || - params->svm_type == CvSVM::NU_SVC ? &CvSVMSolver::get_row_svc : - &CvSVMSolver::get_row_one_class; - - cache_line_size = sample_count*sizeof(Qfloat); - // cache size = max(num_of_samples^2*sizeof(Qfloat)*0.25, 64Kb) - // (assuming that for large training sets ~25% of Q matrix is used) - cache_size = MAX( cache_line_size*sample_count/4, CV_SVM_MIN_CACHE_SIZE ); - - // the size of Q matrix row headers - rows_hdr_size = sample_count*sizeof(rows[0]); - if( rows_hdr_size > storage->block_size ) - CV_ERROR( CV_StsOutOfRange, "Too small storage block size" ); - - lru_list.prev = lru_list.next = &lru_list; - rows = (CvSVMKernelRow*)cvMemStorageAlloc( storage, rows_hdr_size ); - memset( rows, 0, rows_hdr_size ); - - ok = true; - - __END__; - - return ok; -} - - -float* CvSVMSolver::get_row_base( int i, bool* _existed ) -{ - int i1 = i < sample_count ? i : i - sample_count; - CvSVMKernelRow* row = rows + i1; - bool existed = row->data != 0; - Qfloat* data; - - if( existed || cache_size <= 0 ) - { - CvSVMKernelRow* del_row = existed ? row : lru_list.prev; - data = del_row->data; - assert( data != 0 ); - - // delete row from the LRU list - del_row->data = 0; - del_row->prev->next = del_row->next; - del_row->next->prev = del_row->prev; - } - else - { - data = (Qfloat*)cvMemStorageAlloc( storage, cache_line_size ); - cache_size -= cache_line_size; - } - - // insert row into the LRU list - row->data = data; - row->prev = &lru_list; - row->next = lru_list.next; - row->prev->next = row->next->prev = row; - - if( !existed ) - { - kernel->calc( sample_count, var_count, samples, samples[i1], row->data ); - } - - if( _existed ) - *_existed = existed; - - return row->data; -} - - -float* CvSVMSolver::get_row_svc( int i, float* row, float*, bool existed ) -{ - if( !existed ) - { - const schar* _y = y; - int j, len = sample_count; - assert( _y && i < sample_count ); - - if( _y[i] > 0 ) - { - for( j = 0; j < len; j++ ) - row[j] = _y[j]*row[j]; - } - else - { - for( j = 0; j < len; j++ ) - row[j] = -_y[j]*row[j]; - } - } - return row; -} - - -float* CvSVMSolver::get_row_one_class( int, float* row, float*, bool ) -{ - return row; -} - - -float* CvSVMSolver::get_row_svr( int i, float* row, float* dst, bool ) -{ - int j, len = sample_count; - Qfloat* dst_pos = dst; - Qfloat* dst_neg = dst + len; - if( i >= len ) - { - Qfloat* temp; - CV_SWAP( dst_pos, dst_neg, temp ); - } - - for( j = 0; j < len; j++ ) - { - Qfloat t = row[j]; - dst_pos[j] = t; - dst_neg[j] = -t; - } - return dst; -} - - - -float* CvSVMSolver::get_row( int i, float* dst ) -{ - bool existed = false; - float* row = get_row_base( i, &existed ); - return (this->*get_row_func)( i, row, dst, existed ); -} - - -#undef is_upper_bound -#define is_upper_bound(i) (alpha_status[i] > 0) - -#undef is_lower_bound -#define is_lower_bound(i) (alpha_status[i] < 0) - -#undef is_free -#define is_free(i) (alpha_status[i] == 0) - -#undef get_C -#define get_C(i) (C[y[i]>0]) - -#undef update_alpha_status -#define update_alpha_status(i) \ - alpha_status[i] = (schar)(alpha[i] >= get_C(i) ? 1 : alpha[i] <= 0 ? -1 : 0) - -#undef reconstruct_gradient -#define reconstruct_gradient() /* empty for now */ - - -bool CvSVMSolver::solve_generic( CvSVMSolutionInfo& si ) -{ - int iter = 0; - int i, j, k; - - // 1. initialize gradient and alpha status - for( i = 0; i < alpha_count; i++ ) - { - update_alpha_status(i); - G[i] = b[i]; - if( fabs(G[i]) > 1e200 ) - return false; - } - - for( i = 0; i < alpha_count; i++ ) - { - if( !is_lower_bound(i) ) - { - const Qfloat *Q_i = get_row( i, buf[0] ); - double alpha_i = alpha[i]; - - for( j = 0; j < alpha_count; j++ ) - G[j] += alpha_i*Q_i[j]; - } - } - - // 2. optimization loop - for(;;) - { - const Qfloat *Q_i, *Q_j; - double C_i, C_j; - double old_alpha_i, old_alpha_j, alpha_i, alpha_j; - double delta_alpha_i, delta_alpha_j; - -#ifdef _DEBUG - for( i = 0; i < alpha_count; i++ ) - { - if( fabs(G[i]) > 1e+300 ) - return false; - - if( fabs(alpha[i]) > 1e16 ) - return false; - } -#endif - - if( (this->*select_working_set_func)( i, j ) != 0 || iter++ >= max_iter ) - break; - - Q_i = get_row( i, buf[0] ); - Q_j = get_row( j, buf[1] ); - - C_i = get_C(i); - C_j = get_C(j); - - alpha_i = old_alpha_i = alpha[i]; - alpha_j = old_alpha_j = alpha[j]; - - if( y[i] != y[j] ) - { - double denom = Q_i[i]+Q_j[j]+2*Q_i[j]; - double delta = (-G[i]-G[j])/MAX(fabs(denom),FLT_EPSILON); - double diff = alpha_i - alpha_j; - alpha_i += delta; - alpha_j += delta; - - if( diff > 0 && alpha_j < 0 ) - { - alpha_j = 0; - alpha_i = diff; - } - else if( diff <= 0 && alpha_i < 0 ) - { - alpha_i = 0; - alpha_j = -diff; - } - - if( diff > C_i - C_j && alpha_i > C_i ) - { - alpha_i = C_i; - alpha_j = C_i - diff; - } - else if( diff <= C_i - C_j && alpha_j > C_j ) - { - alpha_j = C_j; - alpha_i = C_j + diff; - } - } - else - { - double denom = Q_i[i]+Q_j[j]-2*Q_i[j]; - double delta = (G[i]-G[j])/MAX(fabs(denom),FLT_EPSILON); - double sum = alpha_i + alpha_j; - alpha_i -= delta; - alpha_j += delta; - - if( sum > C_i && alpha_i > C_i ) - { - alpha_i = C_i; - alpha_j = sum - C_i; - } - else if( sum <= C_i && alpha_j < 0) - { - alpha_j = 0; - alpha_i = sum; - } - - if( sum > C_j && alpha_j > C_j ) - { - alpha_j = C_j; - alpha_i = sum - C_j; - } - else if( sum <= C_j && alpha_i < 0 ) - { - alpha_i = 0; - alpha_j = sum; - } - } - - // update alpha - alpha[i] = alpha_i; - alpha[j] = alpha_j; - update_alpha_status(i); - update_alpha_status(j); - - // update G - delta_alpha_i = alpha_i - old_alpha_i; - delta_alpha_j = alpha_j - old_alpha_j; - - for( k = 0; k < alpha_count; k++ ) - G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j; - } - - // calculate rho - (this->*calc_rho_func)( si.rho, si.r ); - - // calculate objective value - for( i = 0, si.obj = 0; i < alpha_count; i++ ) - si.obj += alpha[i] * (G[i] + b[i]); - - si.obj *= 0.5; - - si.upper_bound_p = C[1]; - si.upper_bound_n = C[0]; - - return true; -} - - -// return 1 if already optimal, return 0 otherwise -bool -CvSVMSolver::select_working_set( int& out_i, int& out_j ) -{ - // return i,j which maximize -grad(f)^T d , under constraint - // if alpha_i == C, d != +1 - // if alpha_i == 0, d != -1 - double Gmax1 = -DBL_MAX; // max { -grad(f)_i * d | y_i*d = +1 } - int Gmax1_idx = -1; - - double Gmax2 = -DBL_MAX; // max { -grad(f)_i * d | y_i*d = -1 } - int Gmax2_idx = -1; - - int i; - - for( i = 0; i < alpha_count; i++ ) - { - double t; - - if( y[i] > 0 ) // y = +1 - { - if( !is_upper_bound(i) && (t = -G[i]) > Gmax1 ) // d = +1 - { - Gmax1 = t; - Gmax1_idx = i; - } - if( !is_lower_bound(i) && (t = G[i]) > Gmax2 ) // d = -1 - { - Gmax2 = t; - Gmax2_idx = i; - } - } - else // y = -1 - { - if( !is_upper_bound(i) && (t = -G[i]) > Gmax2 ) // d = +1 - { - Gmax2 = t; - Gmax2_idx = i; - } - if( !is_lower_bound(i) && (t = G[i]) > Gmax1 ) // d = -1 - { - Gmax1 = t; - Gmax1_idx = i; - } - } - } - - out_i = Gmax1_idx; - out_j = Gmax2_idx; - - return Gmax1 + Gmax2 < eps; -} - - -void -CvSVMSolver::calc_rho( double& rho, double& r ) -{ - int i, nr_free = 0; - double ub = DBL_MAX, lb = -DBL_MAX, sum_free = 0; - - for( i = 0; i < alpha_count; i++ ) - { - double yG = y[i]*G[i]; - - if( is_lower_bound(i) ) - { - if( y[i] > 0 ) - ub = MIN(ub,yG); - else - lb = MAX(lb,yG); - } - else if( is_upper_bound(i) ) - { - if( y[i] < 0) - ub = MIN(ub,yG); - else - lb = MAX(lb,yG); - } - else - { - ++nr_free; - sum_free += yG; - } - } - - rho = nr_free > 0 ? sum_free/nr_free : (ub + lb)*0.5; - r = 0; -} - - -bool -CvSVMSolver::select_working_set_nu_svm( int& out_i, int& out_j ) -{ - // return i,j which maximize -grad(f)^T d , under constraint - // if alpha_i == C, d != +1 - // if alpha_i == 0, d != -1 - double Gmax1 = -DBL_MAX; // max { -grad(f)_i * d | y_i = +1, d = +1 } - int Gmax1_idx = -1; - - double Gmax2 = -DBL_MAX; // max { -grad(f)_i * d | y_i = +1, d = -1 } - int Gmax2_idx = -1; - - double Gmax3 = -DBL_MAX; // max { -grad(f)_i * d | y_i = -1, d = +1 } - int Gmax3_idx = -1; - - double Gmax4 = -DBL_MAX; // max { -grad(f)_i * d | y_i = -1, d = -1 } - int Gmax4_idx = -1; - - int i; - - for( i = 0; i < alpha_count; i++ ) - { - double t; - - if( y[i] > 0 ) // y == +1 - { - if( !is_upper_bound(i) && (t = -G[i]) > Gmax1 ) // d = +1 - { - Gmax1 = t; - Gmax1_idx = i; - } - if( !is_lower_bound(i) && (t = G[i]) > Gmax2 ) // d = -1 - { - Gmax2 = t; - Gmax2_idx = i; - } - } - else // y == -1 - { - if( !is_upper_bound(i) && (t = -G[i]) > Gmax3 ) // d = +1 - { - Gmax3 = t; - Gmax3_idx = i; - } - if( !is_lower_bound(i) && (t = G[i]) > Gmax4 ) // d = -1 - { - Gmax4 = t; - Gmax4_idx = i; - } - } - } - - if( MAX(Gmax1 + Gmax2, Gmax3 + Gmax4) < eps ) - return 1; - - if( Gmax1 + Gmax2 > Gmax3 + Gmax4 ) - { - out_i = Gmax1_idx; - out_j = Gmax2_idx; - } - else - { - out_i = Gmax3_idx; - out_j = Gmax4_idx; - } - return 0; -} - - -void -CvSVMSolver::calc_rho_nu_svm( double& rho, double& r ) -{ - int nr_free1 = 0, nr_free2 = 0; - double ub1 = DBL_MAX, ub2 = DBL_MAX; - double lb1 = -DBL_MAX, lb2 = -DBL_MAX; - double sum_free1 = 0, sum_free2 = 0; - double r1, r2; - - int i; - - for( i = 0; i < alpha_count; i++ ) - { - double G_i = G[i]; - if( y[i] > 0 ) - { - if( is_lower_bound(i) ) - ub1 = MIN( ub1, G_i ); - else if( is_upper_bound(i) ) - lb1 = MAX( lb1, G_i ); - else - { - ++nr_free1; - sum_free1 += G_i; - } - } - else - { - if( is_lower_bound(i) ) - ub2 = MIN( ub2, G_i ); - else if( is_upper_bound(i) ) - lb2 = MAX( lb2, G_i ); - else - { - ++nr_free2; - sum_free2 += G_i; - } - } - } - - r1 = nr_free1 > 0 ? sum_free1/nr_free1 : (ub1 + lb1)*0.5; - r2 = nr_free2 > 0 ? sum_free2/nr_free2 : (ub2 + lb2)*0.5; - - rho = (r1 - r2)*0.5; - r = (r1 + r2)*0.5; -} - - -/* -///////////////////////// construct and solve various formulations /////////////////////// -*/ - -bool CvSVMSolver::solve_c_svc( int _sample_count, int _var_count, const float** _samples, schar* _y, - double _Cp, double _Cn, CvMemStorage* _storage, - CvSVMKernel* _kernel, double* _alpha, CvSVMSolutionInfo& _si ) -{ - int i; - - if( !create( _sample_count, _var_count, _samples, _y, _sample_count, - _alpha, _Cp, _Cn, _storage, _kernel, &CvSVMSolver::get_row_svc, - &CvSVMSolver::select_working_set, &CvSVMSolver::calc_rho )) - return false; - - for( i = 0; i < sample_count; i++ ) - { - alpha[i] = 0; - b[i] = -1; - } - - if( !solve_generic( _si )) - return false; - - for( i = 0; i < sample_count; i++ ) - alpha[i] *= y[i]; - - return true; -} - - -bool CvSVMSolver::solve_nu_svc( int _sample_count, int _var_count, const float** _samples, schar* _y, - CvMemStorage* _storage, CvSVMKernel* _kernel, - double* _alpha, CvSVMSolutionInfo& _si ) -{ - int i; - double sum_pos, sum_neg, inv_r; - - if( !create( _sample_count, _var_count, _samples, _y, _sample_count, - _alpha, 1., 1., _storage, _kernel, &CvSVMSolver::get_row_svc, - &CvSVMSolver::select_working_set_nu_svm, &CvSVMSolver::calc_rho_nu_svm )) - return false; - - sum_pos = kernel->params->nu * sample_count * 0.5; - sum_neg = kernel->params->nu * sample_count * 0.5; - - for( i = 0; i < sample_count; i++ ) - { - if( y[i] > 0 ) - { - alpha[i] = MIN(1.0, sum_pos); - sum_pos -= alpha[i]; - } - else - { - alpha[i] = MIN(1.0, sum_neg); - sum_neg -= alpha[i]; - } - b[i] = 0; - } - - if( !solve_generic( _si )) - return false; - - inv_r = 1./_si.r; - - for( i = 0; i < sample_count; i++ ) - alpha[i] *= y[i]*inv_r; - - _si.rho *= inv_r; - _si.obj *= (inv_r*inv_r); - _si.upper_bound_p = inv_r; - _si.upper_bound_n = inv_r; - - return true; -} - - -bool CvSVMSolver::solve_one_class( int _sample_count, int _var_count, const float** _samples, - CvMemStorage* _storage, CvSVMKernel* _kernel, - double* _alpha, CvSVMSolutionInfo& _si ) -{ - int i, n; - double nu = _kernel->params->nu; - - if( !create( _sample_count, _var_count, _samples, 0, _sample_count, - _alpha, 1., 1., _storage, _kernel, &CvSVMSolver::get_row_one_class, - &CvSVMSolver::select_working_set, &CvSVMSolver::calc_rho )) - return false; - - y = (schar*)cvMemStorageAlloc( storage, sample_count*sizeof(y[0]) ); - n = cvRound( nu*sample_count ); - - for( i = 0; i < sample_count; i++ ) - { - y[i] = 1; - b[i] = 0; - alpha[i] = i < n ? 1 : 0; - } - - if( n < sample_count ) - alpha[n] = nu * sample_count - n; - else - alpha[n-1] = nu * sample_count - (n-1); - - return solve_generic(_si); -} - - -bool CvSVMSolver::solve_eps_svr( int _sample_count, int _var_count, const float** _samples, - const float* _y, CvMemStorage* _storage, - CvSVMKernel* _kernel, double* _alpha, CvSVMSolutionInfo& _si ) -{ - int i; - double p = _kernel->params->p, kernel_param_c = _kernel->params->C; - - if( !create( _sample_count, _var_count, _samples, 0, - _sample_count*2, 0, kernel_param_c, kernel_param_c, _storage, _kernel, &CvSVMSolver::get_row_svr, - &CvSVMSolver::select_working_set, &CvSVMSolver::calc_rho )) - return false; - - y = (schar*)cvMemStorageAlloc( storage, sample_count*2*sizeof(y[0]) ); - alpha = (double*)cvMemStorageAlloc( storage, alpha_count*sizeof(alpha[0]) ); - - for( i = 0; i < sample_count; i++ ) - { - alpha[i] = 0; - b[i] = p - _y[i]; - y[i] = 1; - - alpha[i+sample_count] = 0; - b[i+sample_count] = p + _y[i]; - y[i+sample_count] = -1; - } - - if( !solve_generic( _si )) - return false; - - for( i = 0; i < sample_count; i++ ) - _alpha[i] = alpha[i] - alpha[i+sample_count]; - - return true; -} - - -bool CvSVMSolver::solve_nu_svr( int _sample_count, int _var_count, const float** _samples, - const float* _y, CvMemStorage* _storage, - CvSVMKernel* _kernel, double* _alpha, CvSVMSolutionInfo& _si ) -{ - int i; - double kernel_param_c = _kernel->params->C, sum; - - if( !create( _sample_count, _var_count, _samples, 0, - _sample_count*2, 0, 1., 1., _storage, _kernel, &CvSVMSolver::get_row_svr, - &CvSVMSolver::select_working_set_nu_svm, &CvSVMSolver::calc_rho_nu_svm )) - return false; - - y = (schar*)cvMemStorageAlloc( storage, sample_count*2*sizeof(y[0]) ); - alpha = (double*)cvMemStorageAlloc( storage, alpha_count*sizeof(alpha[0]) ); - sum = kernel_param_c * _kernel->params->nu * sample_count * 0.5; - - for( i = 0; i < sample_count; i++ ) - { - alpha[i] = alpha[i + sample_count] = MIN(sum, kernel_param_c); - sum -= alpha[i]; - - b[i] = -_y[i]; - y[i] = 1; - - b[i + sample_count] = _y[i]; - y[i + sample_count] = -1; - } - - if( !solve_generic( _si )) - return false; - - for( i = 0; i < sample_count; i++ ) - _alpha[i] = alpha[i] - alpha[i+sample_count]; - - return true; -} - - -////////////////////////////////////////////////////////////////////////////////////////// - -CvSVM::CvSVM() -{ - decision_func = 0; - class_labels = 0; - class_weights = 0; - storage = 0; - var_idx = 0; - kernel = 0; - solver = 0; - default_model_name = "my_svm"; - - clear(); -} - - -CvSVM::~CvSVM() -{ - clear(); -} - - -void CvSVM::clear() -{ - cvFree( &decision_func ); - cvReleaseMat( &class_labels ); - cvReleaseMat( &class_weights ); - cvReleaseMemStorage( &storage ); - cvReleaseMat( &var_idx ); - delete kernel; - delete solver; - kernel = 0; - solver = 0; - var_all = 0; - sv = 0; - sv_total = 0; -} - - -CvSVM::CvSVM( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _var_idx, const CvMat* _sample_idx, CvSVMParams _params ) -{ - decision_func = 0; - class_labels = 0; - class_weights = 0; - storage = 0; - var_idx = 0; - kernel = 0; - solver = 0; - default_model_name = "my_svm"; - - train( _train_data, _responses, _var_idx, _sample_idx, _params ); -} - - -int CvSVM::get_support_vector_count() const -{ - return sv_total; -} - - -const float* CvSVM::get_support_vector(int i) const -{ - return sv && (unsigned)i < (unsigned)sv_total ? sv[i] : 0; -} - - -bool CvSVM::set_params( const CvSVMParams& _params ) -{ - bool ok = false; - - CV_FUNCNAME( "CvSVM::set_params" ); - - __BEGIN__; - - int kernel_type, svm_type; - - params = _params; - - kernel_type = params.kernel_type; - svm_type = params.svm_type; - - if( kernel_type != LINEAR && kernel_type != POLY && - kernel_type != SIGMOID && kernel_type != RBF ) - CV_ERROR( CV_StsBadArg, "Unknown/unsupported kernel type" ); - - if( kernel_type == LINEAR ) - params.gamma = 1; - else if( params.gamma <= 0 ) - CV_ERROR( CV_StsOutOfRange, "gamma parameter of the kernel must be positive" ); - - if( kernel_type != SIGMOID && kernel_type != POLY ) - params.coef0 = 0; - else if( params.coef0 < 0 ) - CV_ERROR( CV_StsOutOfRange, "The kernel parameter must be positive or zero" ); - - if( kernel_type != POLY ) - params.degree = 0; - else if( params.degree <= 0 ) - CV_ERROR( CV_StsOutOfRange, "The kernel parameter must be positive" ); - - if( svm_type != C_SVC && svm_type != NU_SVC && - svm_type != ONE_CLASS && svm_type != EPS_SVR && - svm_type != NU_SVR ) - CV_ERROR( CV_StsBadArg, "Unknown/unsupported SVM type" ); - - if( svm_type == ONE_CLASS || svm_type == NU_SVC ) - params.C = 0; - else if( params.C <= 0 ) - CV_ERROR( CV_StsOutOfRange, "The parameter C must be positive" ); - - if( svm_type == C_SVC || svm_type == EPS_SVR ) - params.nu = 0; - else if( params.nu <= 0 || params.nu >= 1 ) - CV_ERROR( CV_StsOutOfRange, "The parameter nu must be between 0 and 1" ); - - if( svm_type != EPS_SVR ) - params.p = 0; - else if( params.p <= 0 ) - CV_ERROR( CV_StsOutOfRange, "The parameter p must be positive" ); - - if( svm_type != C_SVC ) - params.class_weights = 0; - - params.term_crit = cvCheckTermCriteria( params.term_crit, DBL_EPSILON, INT_MAX ); - params.term_crit.epsilon = MAX( params.term_crit.epsilon, DBL_EPSILON ); - ok = true; - - __END__; - - return ok; -} - - - -void CvSVM::create_kernel() -{ - kernel = new CvSVMKernel(¶ms,0); -} - - -void CvSVM::create_solver( ) -{ - solver = new CvSVMSolver; -} - - -// switching function -bool CvSVM::train1( int sample_count, int var_count, const float** samples, - const void* _responses, double Cp, double Cn, - CvMemStorage* _storage, double* alpha, double& rho ) -{ - bool ok = false; - - //CV_FUNCNAME( "CvSVM::train1" ); - - __BEGIN__; - - CvSVMSolutionInfo si; - int svm_type = params.svm_type; - - si.rho = 0; - - ok = svm_type == C_SVC ? solver->solve_c_svc( sample_count, var_count, samples, (schar*)_responses, - Cp, Cn, _storage, kernel, alpha, si ) : - svm_type == NU_SVC ? solver->solve_nu_svc( sample_count, var_count, samples, (schar*)_responses, - _storage, kernel, alpha, si ) : - svm_type == ONE_CLASS ? solver->solve_one_class( sample_count, var_count, samples, - _storage, kernel, alpha, si ) : - svm_type == EPS_SVR ? solver->solve_eps_svr( sample_count, var_count, samples, (float*)_responses, - _storage, kernel, alpha, si ) : - svm_type == NU_SVR ? solver->solve_nu_svr( sample_count, var_count, samples, (float*)_responses, - _storage, kernel, alpha, si ) : false; - - rho = si.rho; - - __END__; - - return ok; -} - - -bool CvSVM::do_train( int svm_type, int sample_count, int var_count, const float** samples, - const CvMat* responses, CvMemStorage* temp_storage, double* alpha ) -{ - bool ok = false; - - CV_FUNCNAME( "CvSVM::do_train" ); - - __BEGIN__; - - CvSVMDecisionFunc* df = 0; - const int sample_size = var_count*sizeof(samples[0][0]); - int i, j, k; - - cvClearMemStorage( storage ); - - if( svm_type == ONE_CLASS || svm_type == EPS_SVR || svm_type == NU_SVR ) - { - int sv_count = 0; - - CV_CALL( decision_func = df = - (CvSVMDecisionFunc*)cvAlloc( sizeof(df[0]) )); - - df->rho = 0; - if( !train1( sample_count, var_count, samples, svm_type == ONE_CLASS ? 0 : - responses->data.i, 0, 0, temp_storage, alpha, df->rho )) - EXIT; - - for( i = 0; i < sample_count; i++ ) - sv_count += fabs(alpha[i]) > 0; - - CV_Assert(sv_count != 0); - - sv_total = df->sv_count = sv_count; - CV_CALL( df->alpha = (double*)cvMemStorageAlloc( storage, sv_count*sizeof(df->alpha[0])) ); - CV_CALL( sv = (float**)cvMemStorageAlloc( storage, sv_count*sizeof(sv[0]))); - - for( i = k = 0; i < sample_count; i++ ) - { - if( fabs(alpha[i]) > 0 ) - { - CV_CALL( sv[k] = (float*)cvMemStorageAlloc( storage, sample_size )); - memcpy( sv[k], samples[i], sample_size ); - df->alpha[k++] = alpha[i]; - } - } - } - else - { - int class_count = class_labels->cols; - int* sv_tab = 0; - const float** temp_samples = 0; - int* class_ranges = 0; - schar* temp_y = 0; - assert( svm_type == CvSVM::C_SVC || svm_type == CvSVM::NU_SVC ); - - if( svm_type == CvSVM::C_SVC && params.class_weights ) - { - const CvMat* cw = params.class_weights; - - if( !CV_IS_MAT(cw) || (cw->cols != 1 && cw->rows != 1) || - cw->rows + cw->cols - 1 != class_count || - (CV_MAT_TYPE(cw->type) != CV_32FC1 && CV_MAT_TYPE(cw->type) != CV_64FC1) ) - CV_ERROR( CV_StsBadArg, "params.class_weights must be 1d floating-point vector " - "containing as many elements as the number of classes" ); - - CV_CALL( class_weights = cvCreateMat( cw->rows, cw->cols, CV_64F )); - CV_CALL( cvConvert( cw, class_weights )); - CV_CALL( cvScale( class_weights, class_weights, params.C )); - } - - CV_CALL( decision_func = df = (CvSVMDecisionFunc*)cvAlloc( - (class_count*(class_count-1)/2)*sizeof(df[0]))); - - CV_CALL( sv_tab = (int*)cvMemStorageAlloc( temp_storage, sample_count*sizeof(sv_tab[0]) )); - memset( sv_tab, 0, sample_count*sizeof(sv_tab[0]) ); - CV_CALL( class_ranges = (int*)cvMemStorageAlloc( temp_storage, - (class_count + 1)*sizeof(class_ranges[0]))); - CV_CALL( temp_samples = (const float**)cvMemStorageAlloc( temp_storage, - sample_count*sizeof(temp_samples[0]))); - CV_CALL( temp_y = (schar*)cvMemStorageAlloc( temp_storage, sample_count)); - - class_ranges[class_count] = 0; - cvSortSamplesByClasses( samples, responses, class_ranges, 0 ); - //check that while cross-validation there were the samples from all the classes - if( class_ranges[class_count] <= 0 ) - CV_ERROR( CV_StsBadArg, "While cross-validation one or more of the classes have " - "been fell out of the sample. Try to enlarge " ); - - if( svm_type == NU_SVC ) - { - // check if nu is feasible - for(i = 0; i < class_count; i++ ) - { - int ci = class_ranges[i+1] - class_ranges[i]; - for( j = i+1; j< class_count; j++ ) - { - int cj = class_ranges[j+1] - class_ranges[j]; - if( params.nu*(ci + cj)*0.5 > MIN( ci, cj ) ) - { - // !!!TODO!!! add some diagnostic - EXIT; // exit immediately; will release the model and return NULL pointer - } - } - } - } - - // train n*(n-1)/2 classifiers - for( i = 0; i < class_count; i++ ) - { - for( j = i+1; j < class_count; j++, df++ ) - { - int si = class_ranges[i], ci = class_ranges[i+1] - si; - int sj = class_ranges[j], cj = class_ranges[j+1] - sj; - double Cp = params.C, Cn = Cp; - int k1 = 0, sv_count = 0; - - for( k = 0; k < ci; k++ ) - { - temp_samples[k] = samples[si + k]; - temp_y[k] = 1; - } - - for( k = 0; k < cj; k++ ) - { - temp_samples[ci + k] = samples[sj + k]; - temp_y[ci + k] = -1; - } - - if( class_weights ) - { - Cp = class_weights->data.db[i]; - Cn = class_weights->data.db[j]; - } - - if( !train1( ci + cj, var_count, temp_samples, temp_y, - Cp, Cn, temp_storage, alpha, df->rho )) - EXIT; - - for( k = 0; k < ci + cj; k++ ) - sv_count += fabs(alpha[k]) > 0; - - df->sv_count = sv_count; - - CV_CALL( df->alpha = (double*)cvMemStorageAlloc( temp_storage, - sv_count*sizeof(df->alpha[0]))); - CV_CALL( df->sv_index = (int*)cvMemStorageAlloc( temp_storage, - sv_count*sizeof(df->sv_index[0]))); - - for( k = 0; k < ci; k++ ) - { - if( fabs(alpha[k]) > 0 ) - { - sv_tab[si + k] = 1; - df->sv_index[k1] = si + k; - df->alpha[k1++] = alpha[k]; - } - } - - for( k = 0; k < cj; k++ ) - { - if( fabs(alpha[ci + k]) > 0 ) - { - sv_tab[sj + k] = 1; - df->sv_index[k1] = sj + k; - df->alpha[k1++] = alpha[ci + k]; - } - } - } - } - - // allocate support vectors and initialize sv_tab - for( i = 0, k = 0; i < sample_count; i++ ) - { - if( sv_tab[i] ) - sv_tab[i] = ++k; - } - - sv_total = k; - CV_CALL( sv = (float**)cvMemStorageAlloc( storage, sv_total*sizeof(sv[0]))); - - for( i = 0, k = 0; i < sample_count; i++ ) - { - if( sv_tab[i] ) - { - CV_CALL( sv[k] = (float*)cvMemStorageAlloc( storage, sample_size )); - memcpy( sv[k], samples[i], sample_size ); - k++; - } - } - - df = (CvSVMDecisionFunc*)decision_func; - - // set sv pointers - for( i = 0; i < class_count; i++ ) - { - for( j = i+1; j < class_count; j++, df++ ) - { - for( k = 0; k < df->sv_count; k++ ) - { - df->sv_index[k] = sv_tab[df->sv_index[k]]-1; - assert( (unsigned)df->sv_index[k] < (unsigned)sv_total ); - } - } - } - } - - optimize_linear_svm(); - ok = true; - - __END__; - - return ok; -} - - -void CvSVM::optimize_linear_svm() -{ - // we optimize only linear SVM: compress all the support vectors into one. - if( params.kernel_type != LINEAR ) - return; - - int class_count = class_labels ? class_labels->cols : - params.svm_type == CvSVM::ONE_CLASS ? 1 : 0; - - int i, df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1; - CvSVMDecisionFunc* df = decision_func; - - for( i = 0; i < df_count; i++ ) - { - int sv_count = df[i].sv_count; - if( sv_count != 1 ) - break; - } - - // if every decision functions uses a single support vector; - // it's already compressed. skip it then. - if( i == df_count ) - return; - - int var_count = get_var_count(); - cv::AutoBuffer vbuf(var_count); - double* v = vbuf; - float** new_sv = (float**)cvMemStorageAlloc(storage, df_count*sizeof(new_sv[0])); - - for( i = 0; i < df_count; i++ ) - { - new_sv[i] = (float*)cvMemStorageAlloc(storage, var_count*sizeof(new_sv[i][0])); - float* dst = new_sv[i]; - memset(v, 0, var_count*sizeof(v[0])); - int j, k, sv_count = df[i].sv_count; - for( j = 0; j < sv_count; j++ ) - { - const float* src = class_count > 1 && df[i].sv_index ? sv[df[i].sv_index[j]] : sv[j]; - double a = df[i].alpha[j]; - for( k = 0; k < var_count; k++ ) - v[k] += src[k]*a; - } - for( k = 0; k < var_count; k++ ) - dst[k] = (float)v[k]; - df[i].sv_count = 1; - df[i].alpha[0] = 1.; - if( class_count > 1 && df[i].sv_index ) - df[i].sv_index[0] = i; - } - - sv = new_sv; - sv_total = df_count; -} - - -bool CvSVM::train( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _var_idx, const CvMat* _sample_idx, CvSVMParams _params ) -{ - bool ok = false; - CvMat* responses = 0; - CvMemStorage* temp_storage = 0; - const float** samples = 0; - - CV_FUNCNAME( "CvSVM::train" ); - - __BEGIN__; - - int svm_type, sample_count, var_count, sample_size; - int block_size = 1 << 16; - double* alpha; - - clear(); - CV_CALL( set_params( _params )); - - svm_type = _params.svm_type; - - /* Prepare training data and related parameters */ - CV_CALL( cvPrepareTrainData( "CvSVM::train", _train_data, CV_ROW_SAMPLE, - svm_type != CvSVM::ONE_CLASS ? _responses : 0, - svm_type == CvSVM::C_SVC || - svm_type == CvSVM::NU_SVC ? CV_VAR_CATEGORICAL : - CV_VAR_ORDERED, _var_idx, _sample_idx, - false, &samples, &sample_count, &var_count, &var_all, - &responses, &class_labels, &var_idx )); - - - sample_size = var_count*sizeof(samples[0][0]); - - // make the storage block size large enough to fit all - // the temporary vectors and output support vectors. - block_size = MAX( block_size, sample_count*(int)sizeof(CvSVMKernelRow)); - block_size = MAX( block_size, sample_count*2*(int)sizeof(double) + 1024 ); - block_size = MAX( block_size, sample_size*2 + 1024 ); - - CV_CALL( storage = cvCreateMemStorage(block_size + sizeof(CvMemBlock) + sizeof(CvSeqBlock))); - CV_CALL( temp_storage = cvCreateChildMemStorage(storage)); - CV_CALL( alpha = (double*)cvMemStorageAlloc(temp_storage, sample_count*sizeof(double))); - - create_kernel(); - create_solver(); - - if( !do_train( svm_type, sample_count, var_count, samples, responses, temp_storage, alpha )) - EXIT; - - ok = true; // model has been trained succesfully - - __END__; - - delete solver; - solver = 0; - cvReleaseMemStorage( &temp_storage ); - cvReleaseMat( &responses ); - cvFree( &samples ); - - if( cvGetErrStatus() < 0 || !ok ) - clear(); - - return ok; -} - -struct indexedratio -{ - double val; - int ind; - int count_smallest, count_biggest; - void eval() { val = (double) count_smallest/(count_smallest+count_biggest); } -}; - -static int CV_CDECL -icvCmpIndexedratio( const void* a, const void* b ) -{ - return ((const indexedratio*)a)->val < ((const indexedratio*)b)->val ? -1 - : ((const indexedratio*)a)->val > ((const indexedratio*)b)->val ? 1 - : 0; -} - -bool CvSVM::train_auto( const CvMat* _train_data, const CvMat* _responses, - const CvMat* _var_idx, const CvMat* _sample_idx, CvSVMParams _params, int k_fold, - CvParamGrid C_grid, CvParamGrid gamma_grid, CvParamGrid p_grid, - CvParamGrid nu_grid, CvParamGrid coef_grid, CvParamGrid degree_grid, - bool balanced) -{ - bool ok = false; - CvMat* responses = 0; - CvMat* responses_local = 0; - CvMemStorage* temp_storage = 0; - const float** samples = 0; - const float** samples_local = 0; - - CV_FUNCNAME( "CvSVM::train_auto" ); - __BEGIN__; - - int svm_type, sample_count, var_count, sample_size; - int block_size = 1 << 16; - double* alpha; - RNG* rng = &theRNG(); - - // all steps are logarithmic and must be > 1 - double degree_step = 10, g_step = 10, coef_step = 10, C_step = 10, nu_step = 10, p_step = 10; - double gamma = 0, curr_c = 0, degree = 0, coef = 0, p = 0, nu = 0; - double best_degree = 0, best_gamma = 0, best_coef = 0, best_C = 0, best_nu = 0, best_p = 0; - float min_error = FLT_MAX, error; - - if( _params.svm_type == CvSVM::ONE_CLASS ) - { - if(!train( _train_data, _responses, _var_idx, _sample_idx, _params )) - EXIT; - return true; - } - - clear(); - - if( k_fold < 2 ) - CV_ERROR( CV_StsBadArg, "Parameter must be > 1" ); - - CV_CALL(set_params( _params )); - svm_type = _params.svm_type; - - // All the parameters except, possibly, are positive. - // is nonnegative - if( C_grid.step <= 1 ) - { - C_grid.min_val = C_grid.max_val = params.C; - C_grid.step = 10; - } - else - CV_CALL(C_grid.check()); - - if( gamma_grid.step <= 1 ) - { - gamma_grid.min_val = gamma_grid.max_val = params.gamma; - gamma_grid.step = 10; - } - else - CV_CALL(gamma_grid.check()); - - if( p_grid.step <= 1 ) - { - p_grid.min_val = p_grid.max_val = params.p; - p_grid.step = 10; - } - else - CV_CALL(p_grid.check()); - - if( nu_grid.step <= 1 ) - { - nu_grid.min_val = nu_grid.max_val = params.nu; - nu_grid.step = 10; - } - else - CV_CALL(nu_grid.check()); - - if( coef_grid.step <= 1 ) - { - coef_grid.min_val = coef_grid.max_val = params.coef0; - coef_grid.step = 10; - } - else - CV_CALL(coef_grid.check()); - - if( degree_grid.step <= 1 ) - { - degree_grid.min_val = degree_grid.max_val = params.degree; - degree_grid.step = 10; - } - else - CV_CALL(degree_grid.check()); - - // these parameters are not used: - if( params.kernel_type != CvSVM::POLY ) - degree_grid.min_val = degree_grid.max_val = params.degree; - if( params.kernel_type == CvSVM::LINEAR ) - gamma_grid.min_val = gamma_grid.max_val = params.gamma; - if( params.kernel_type != CvSVM::POLY && params.kernel_type != CvSVM::SIGMOID ) - coef_grid.min_val = coef_grid.max_val = params.coef0; - if( svm_type == CvSVM::NU_SVC || svm_type == CvSVM::ONE_CLASS ) - C_grid.min_val = C_grid.max_val = params.C; - if( svm_type == CvSVM::C_SVC || svm_type == CvSVM::EPS_SVR ) - nu_grid.min_val = nu_grid.max_val = params.nu; - if( svm_type != CvSVM::EPS_SVR ) - p_grid.min_val = p_grid.max_val = params.p; - - CV_ASSERT( g_step > 1 && degree_step > 1 && coef_step > 1); - CV_ASSERT( p_step > 1 && C_step > 1 && nu_step > 1 ); - - /* Prepare training data and related parameters */ - CV_CALL(cvPrepareTrainData( "CvSVM::train_auto", _train_data, CV_ROW_SAMPLE, - svm_type != CvSVM::ONE_CLASS ? _responses : 0, - svm_type == CvSVM::C_SVC || - svm_type == CvSVM::NU_SVC ? CV_VAR_CATEGORICAL : - CV_VAR_ORDERED, _var_idx, _sample_idx, - false, &samples, &sample_count, &var_count, &var_all, - &responses, &class_labels, &var_idx )); - - sample_size = var_count*sizeof(samples[0][0]); - - // make the storage block size large enough to fit all - // the temporary vectors and output support vectors. - block_size = MAX( block_size, sample_count*(int)sizeof(CvSVMKernelRow)); - block_size = MAX( block_size, sample_count*2*(int)sizeof(double) + 1024 ); - block_size = MAX( block_size, sample_size*2 + 1024 ); - - CV_CALL( storage = cvCreateMemStorage(block_size + sizeof(CvMemBlock) + sizeof(CvSeqBlock))); - CV_CALL(temp_storage = cvCreateChildMemStorage(storage)); - CV_CALL(alpha = (double*)cvMemStorageAlloc(temp_storage, sample_count*sizeof(double))); - - create_kernel(); - create_solver(); - - { - const int testset_size = sample_count/k_fold; - const int trainset_size = sample_count - testset_size; - const int last_testset_size = sample_count - testset_size*(k_fold-1); - const int last_trainset_size = sample_count - last_testset_size; - const bool is_regression = (svm_type == EPS_SVR) || (svm_type == NU_SVR); - - size_t resp_elem_size = CV_ELEM_SIZE(responses->type); - size_t size = 2*last_trainset_size*sizeof(samples[0]); - - samples_local = (const float**) cvAlloc( size ); - memset( samples_local, 0, size ); - - responses_local = cvCreateMat( 1, trainset_size, CV_MAT_TYPE(responses->type) ); - cvZero( responses_local ); - - // randomly permute samples and responses - for(int i = 0; i < sample_count; i++ ) - { - int i1 = (*rng)(sample_count); - int i2 = (*rng)(sample_count); - const float* temp; - float t; - int y; - - CV_SWAP( samples[i1], samples[i2], temp ); - if( is_regression ) - CV_SWAP( responses->data.fl[i1], responses->data.fl[i2], t ); - else - CV_SWAP( responses->data.i[i1], responses->data.i[i2], y ); - } - - if (!is_regression && class_labels->cols==2 && balanced) - { - // count class samples - int num_0=0,num_1=0; - for (int i=0; idata.i[i]==class_labels->data.i[0]) - ++num_0; - else - ++num_1; - } - - int label_smallest_class; - int label_biggest_class; - if (num_0 < num_1) - { - label_biggest_class = class_labels->data.i[1]; - label_smallest_class = class_labels->data.i[0]; - } - else - { - label_biggest_class = class_labels->data.i[0]; - label_smallest_class = class_labels->data.i[1]; - int y; - CV_SWAP(num_0,num_1,y); - } - const double class_ratio = (double) num_0/sample_count; - // calculate class ratio of each fold - indexedratio *ratios=0; - ratios = (indexedratio*) cvAlloc(k_fold*sizeof(*ratios)); - for (int k=0, i_begin=0; kdata.i[i]==label_smallest_class) - ++count0; - else - ++count1; - } - ratios[k].ind = k; - ratios[k].count_smallest = count0; - ratios[k].count_biggest = count1; - ratios[k].eval(); - } - // initial distance - qsort(ratios, k_fold, sizeof(ratios[0]), icvCmpIndexedratio); - double old_dist = 0.0; - for (int k=0; k 0.0) - { - if (ratios[0].count_biggest==0 || ratios[k_fold-1].count_smallest==0) - break; // we are not able to swap samples anymore - // what if we swap the samples, calculate the new distance - ratios[0].count_smallest++; - ratios[0].count_biggest--; - ratios[0].eval(); - ratios[k_fold-1].count_smallest--; - ratios[k_fold-1].count_biggest++; - ratios[k_fold-1].eval(); - qsort(ratios, k_fold, sizeof(ratios[0]), icvCmpIndexedratio); - new_dist = 0.0; - for (int k=0; kdata.i[i1]==label_biggest_class) - break; - } - // index of the smallest_class sample from the maximum ratio fold - int i2 = ratios[k_fold-1].ind * testset_size; - for ( ; i2data.i[i2]==label_smallest_class) - break; - } - // swap - const float* temp; - int y; - CV_SWAP( samples[i1], samples[i2], temp ); - CV_SWAP( responses->data.i[i1], responses->data.i[i2], y ); - old_dist = new_dist; - } - else - break; // does not improve, so break the loop - } - cvFree(&ratios); - } - - int* cls_lbls = class_labels ? class_labels->data.i : 0; - curr_c = C_grid.min_val; - do - { - params.C = curr_c; - gamma = gamma_grid.min_val; - do - { - params.gamma = gamma; - p = p_grid.min_val; - do - { - params.p = p; - nu = nu_grid.min_val; - do - { - params.nu = nu; - coef = coef_grid.min_val; - do - { - params.coef0 = coef; - degree = degree_grid.min_val; - do - { - params.degree = degree; - - float** test_samples_ptr = (float**)samples; - uchar* true_resp = responses->data.ptr; - int test_size = testset_size; - int train_size = trainset_size; - - error = 0; - for(int k = 0; k < k_fold; k++ ) - { - memcpy( samples_local, samples, sizeof(samples[0])*test_size*k ); - memcpy( samples_local + test_size*k, test_samples_ptr + test_size, - sizeof(samples[0])*(sample_count - testset_size*(k+1)) ); - - memcpy( responses_local->data.ptr, responses->data.ptr, resp_elem_size*test_size*k ); - memcpy( responses_local->data.ptr + resp_elem_size*test_size*k, - true_resp + resp_elem_size*test_size, - resp_elem_size*(sample_count - testset_size*(k+1)) ); - - if( k == k_fold - 1 ) - { - test_size = last_testset_size; - train_size = last_trainset_size; - responses_local->cols = last_trainset_size; - } - - // Train SVM on samples - if( !do_train( svm_type, train_size, var_count, - (const float**)samples_local, responses_local, temp_storage, alpha ) ) - EXIT; - - // Compute test set error on samples - for(int i = 0; i < test_size; i++, true_resp += resp_elem_size, test_samples_ptr++ ) - { - float resp = predict( *test_samples_ptr, var_count ); - error += is_regression ? powf( resp - *(float*)true_resp, 2 ) - : ((int)resp != cls_lbls[*(int*)true_resp]); - } - } - if( min_error > error ) - { - min_error = error; - best_degree = degree; - best_gamma = gamma; - best_coef = coef; - best_C = curr_c; - best_nu = nu; - best_p = p; - } - degree *= degree_grid.step; - } - while( degree < degree_grid.max_val ); - coef *= coef_grid.step; - } - while( coef < coef_grid.max_val ); - nu *= nu_grid.step; - } - while( nu < nu_grid.max_val ); - p *= p_grid.step; - } - while( p < p_grid.max_val ); - gamma *= gamma_grid.step; - } - while( gamma < gamma_grid.max_val ); - curr_c *= C_grid.step; - } - while( curr_c < C_grid.max_val ); - } - - min_error /= (float) sample_count; - - params.C = best_C; - params.nu = best_nu; - params.p = best_p; - params.gamma = best_gamma; - params.degree = best_degree; - params.coef0 = best_coef; - - CV_CALL(ok = do_train( svm_type, sample_count, var_count, samples, responses, temp_storage, alpha )); - - __END__; - - delete solver; - solver = 0; - cvReleaseMemStorage( &temp_storage ); - cvReleaseMat( &responses ); - cvReleaseMat( &responses_local ); - cvFree( &samples ); - cvFree( &samples_local ); - - if( cvGetErrStatus() < 0 || !ok ) - clear(); - - return ok; -} - -float CvSVM::predict( const float* row_sample, int row_len, bool returnDFVal ) const -{ - assert( kernel ); - assert( row_sample ); - - int var_count = get_var_count(); - assert( row_len == var_count ); - (void)row_len; - - int class_count = class_labels ? class_labels->cols : - params.svm_type == ONE_CLASS ? 1 : 0; - - float result = 0; - cv::AutoBuffer _buffer(sv_total + (class_count+1)*2); - float* buffer = _buffer; - - if( params.svm_type == EPS_SVR || - params.svm_type == NU_SVR || - params.svm_type == ONE_CLASS ) - { - CvSVMDecisionFunc* df = (CvSVMDecisionFunc*)decision_func; - int i, sv_count = df->sv_count; - double sum = -df->rho; - - kernel->calc( sv_count, var_count, (const float**)sv, row_sample, buffer ); - for( i = 0; i < sv_count; i++ ) - sum += buffer[i]*df->alpha[i]; - - result = params.svm_type == ONE_CLASS ? (float)(sum > 0) : (float)sum; - } - else if( params.svm_type == C_SVC || - params.svm_type == NU_SVC ) - { - CvSVMDecisionFunc* df = (CvSVMDecisionFunc*)decision_func; - int* vote = (int*)(buffer + sv_total); - int i, j, k; - - memset( vote, 0, class_count*sizeof(vote[0])); - kernel->calc( sv_total, var_count, (const float**)sv, row_sample, buffer ); - double sum = 0.; - - for( i = 0; i < class_count; i++ ) - { - for( j = i+1; j < class_count; j++, df++ ) - { - sum = -df->rho; - int sv_count = df->sv_count; - for( k = 0; k < sv_count; k++ ) - sum += df->alpha[k]*buffer[df->sv_index[k]]; - - vote[sum > 0 ? i : j]++; - } - } - - for( i = 1, k = 0; i < class_count; i++ ) - { - if( vote[i] > vote[k] ) - k = i; - } - result = returnDFVal && class_count == 2 ? (float)sum : (float)(class_labels->data.i[k]); - } - else - CV_Error( CV_StsBadArg, "INTERNAL ERROR: Unknown SVM type, " - "the SVM structure is probably corrupted" ); - - return result; -} - -float CvSVM::predict( const CvMat* sample, bool returnDFVal ) const -{ - float result = 0; - float* row_sample = 0; - - CV_FUNCNAME( "CvSVM::predict" ); - - __BEGIN__; - - int class_count; - - if( !kernel ) - CV_ERROR( CV_StsBadArg, "The SVM should be trained first" ); - - class_count = class_labels ? class_labels->cols : - params.svm_type == ONE_CLASS ? 1 : 0; - - CV_CALL( cvPreparePredictData( sample, var_all, var_idx, - class_count, 0, &row_sample )); - result = predict( row_sample, get_var_count(), returnDFVal ); - - __END__; - - if( sample && (!CV_IS_MAT(sample) || sample->data.fl != row_sample) ) - cvFree( &row_sample ); - - return result; -} - -struct predict_body_svm : ParallelLoopBody { - predict_body_svm(const CvSVM* _pointer, float* _result, const CvMat* _samples, CvMat* _results) - { - pointer = _pointer; - result = _result; - samples = _samples; - results = _results; - } - - const CvSVM* pointer; - float* result; - const CvMat* samples; - CvMat* results; - - void operator()( const cv::Range& range ) const - { - for(int i = range.start; i < range.end; i++ ) - { - CvMat sample; - cvGetRow( samples, &sample, i ); - int r = (int)pointer->predict(&sample); - if (results) - results->data.fl[i] = (float)r; - if (i == 0) - *result = (float)r; - } - } -}; - -float CvSVM::predict(const CvMat* samples, CV_OUT CvMat* results) const -{ - float result = 0; - cv::parallel_for_(cv::Range(0, samples->rows), - predict_body_svm(this, &result, samples, results) - ); - return result; -} - -void CvSVM::predict( cv::InputArray _samples, cv::OutputArray _results ) const -{ - _results.create(_samples.size().height, 1, CV_32F); - CvMat samples = _samples.getMat(), results = _results.getMat(); - predict(&samples, &results); -} - -CvSVM::CvSVM( const Mat& _train_data, const Mat& _responses, - const Mat& _var_idx, const Mat& _sample_idx, CvSVMParams _params ) -{ - decision_func = 0; - class_labels = 0; - class_weights = 0; - storage = 0; - var_idx = 0; - kernel = 0; - solver = 0; - default_model_name = "my_svm"; - - train( _train_data, _responses, _var_idx, _sample_idx, _params ); -} - -bool CvSVM::train( const Mat& _train_data, const Mat& _responses, - const Mat& _var_idx, const Mat& _sample_idx, CvSVMParams _params ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, sidx = _sample_idx; - return train(&tdata, &responses, vidx.data.ptr ? &vidx : 0, sidx.data.ptr ? &sidx : 0, _params); -} - - -bool CvSVM::train_auto( const Mat& _train_data, const Mat& _responses, - const Mat& _var_idx, const Mat& _sample_idx, CvSVMParams _params, int k_fold, - CvParamGrid C_grid, CvParamGrid gamma_grid, CvParamGrid p_grid, - CvParamGrid nu_grid, CvParamGrid coef_grid, CvParamGrid degree_grid, bool balanced ) -{ - CvMat tdata = _train_data, responses = _responses, vidx = _var_idx, sidx = _sample_idx; - return train_auto(&tdata, &responses, vidx.data.ptr ? &vidx : 0, - sidx.data.ptr ? &sidx : 0, _params, k_fold, C_grid, gamma_grid, p_grid, - nu_grid, coef_grid, degree_grid, balanced); -} - -float CvSVM::predict( const Mat& _sample, bool returnDFVal ) const -{ - CvMat sample = _sample; - return predict(&sample, returnDFVal); -} - - -void CvSVM::write_params( CvFileStorage* fs ) const -{ - //CV_FUNCNAME( "CvSVM::write_params" ); - - __BEGIN__; - - int svm_type = params.svm_type; - int kernel_type = params.kernel_type; - - const char* svm_type_str = - svm_type == CvSVM::C_SVC ? "C_SVC" : - svm_type == CvSVM::NU_SVC ? "NU_SVC" : - svm_type == CvSVM::ONE_CLASS ? "ONE_CLASS" : - svm_type == CvSVM::EPS_SVR ? "EPS_SVR" : - svm_type == CvSVM::NU_SVR ? "NU_SVR" : 0; - const char* kernel_type_str = - kernel_type == CvSVM::LINEAR ? "LINEAR" : - kernel_type == CvSVM::POLY ? "POLY" : - kernel_type == CvSVM::RBF ? "RBF" : - kernel_type == CvSVM::SIGMOID ? "SIGMOID" : 0; - - if( svm_type_str ) - cvWriteString( fs, "svm_type", svm_type_str ); - else - cvWriteInt( fs, "svm_type", svm_type ); - - // save kernel - cvStartWriteStruct( fs, "kernel", CV_NODE_MAP + CV_NODE_FLOW ); - - if( kernel_type_str ) - cvWriteString( fs, "type", kernel_type_str ); - else - cvWriteInt( fs, "type", kernel_type ); - - if( kernel_type == CvSVM::POLY || !kernel_type_str ) - cvWriteReal( fs, "degree", params.degree ); - - if( kernel_type != CvSVM::LINEAR || !kernel_type_str ) - cvWriteReal( fs, "gamma", params.gamma ); - - if( kernel_type == CvSVM::POLY || kernel_type == CvSVM::SIGMOID || !kernel_type_str ) - cvWriteReal( fs, "coef0", params.coef0 ); - - cvEndWriteStruct(fs); - - if( svm_type == CvSVM::C_SVC || svm_type == CvSVM::EPS_SVR || - svm_type == CvSVM::NU_SVR || !svm_type_str ) - cvWriteReal( fs, "C", params.C ); - - if( svm_type == CvSVM::NU_SVC || svm_type == CvSVM::ONE_CLASS || - svm_type == CvSVM::NU_SVR || !svm_type_str ) - cvWriteReal( fs, "nu", params.nu ); - - if( svm_type == CvSVM::EPS_SVR || !svm_type_str ) - cvWriteReal( fs, "p", params.p ); - - cvStartWriteStruct( fs, "term_criteria", CV_NODE_MAP + CV_NODE_FLOW ); - if( params.term_crit.type & CV_TERMCRIT_EPS ) - cvWriteReal( fs, "epsilon", params.term_crit.epsilon ); - if( params.term_crit.type & CV_TERMCRIT_ITER ) - cvWriteInt( fs, "iterations", params.term_crit.max_iter ); - cvEndWriteStruct( fs ); - - __END__; -} - - -static bool isSvmModelApplicable(int sv_total, int var_all, int var_count, int class_count) -{ - return (sv_total > 0 && var_count > 0 && var_count <= var_all && class_count >= 0); -} - - -void CvSVM::write( CvFileStorage* fs, const char* name ) const -{ - CV_FUNCNAME( "CvSVM::write" ); - - __BEGIN__; - - int i, var_count = get_var_count(), df_count; - int class_count = class_labels ? class_labels->cols : - params.svm_type == CvSVM::ONE_CLASS ? 1 : 0; - const CvSVMDecisionFunc* df = decision_func; - if( !isSvmModelApplicable(sv_total, var_all, var_count, class_count) ) - CV_ERROR( CV_StsParseError, "SVM model data is invalid, check sv_count, var_* and class_count tags" ); - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM ); - - write_params( fs ); - - cvWriteInt( fs, "var_all", var_all ); - cvWriteInt( fs, "var_count", var_count ); - - if( class_count ) - { - cvWriteInt( fs, "class_count", class_count ); - - if( class_labels ) - cvWrite( fs, "class_labels", class_labels ); - - if( class_weights ) - cvWrite( fs, "class_weights", class_weights ); - } - - if( var_idx ) - cvWrite( fs, "var_idx", var_idx ); - - // write the joint collection of support vectors - cvWriteInt( fs, "sv_total", sv_total ); - cvStartWriteStruct( fs, "support_vectors", CV_NODE_SEQ ); - for( i = 0; i < sv_total; i++ ) - { - cvStartWriteStruct( fs, 0, CV_NODE_SEQ + CV_NODE_FLOW ); - cvWriteRawData( fs, sv[i], var_count, "f" ); - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); - - // write decision functions - df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1; - df = decision_func; - - cvStartWriteStruct( fs, "decision_functions", CV_NODE_SEQ ); - for( i = 0; i < df_count; i++ ) - { - int sv_count = df[i].sv_count; - cvStartWriteStruct( fs, 0, CV_NODE_MAP ); - cvWriteInt( fs, "sv_count", sv_count ); - cvWriteReal( fs, "rho", df[i].rho ); - cvStartWriteStruct( fs, "alpha", CV_NODE_SEQ+CV_NODE_FLOW ); - cvWriteRawData( fs, df[i].alpha, df[i].sv_count, "d" ); - cvEndWriteStruct( fs ); - if( class_count > 1 ) - { - cvStartWriteStruct( fs, "index", CV_NODE_SEQ+CV_NODE_FLOW ); - cvWriteRawData( fs, df[i].sv_index, df[i].sv_count, "i" ); - cvEndWriteStruct( fs ); - } - else - CV_ASSERT( sv_count == sv_total ); - cvEndWriteStruct( fs ); - } - cvEndWriteStruct( fs ); - cvEndWriteStruct( fs ); - - __END__; -} - - -void CvSVM::read_params( CvFileStorage* fs, CvFileNode* svm_node ) -{ - CV_FUNCNAME( "CvSVM::read_params" ); - - __BEGIN__; - - int svm_type, kernel_type; - CvSVMParams _params; - - CvFileNode* tmp_node = cvGetFileNodeByName( fs, svm_node, "svm_type" ); - CvFileNode* kernel_node; - if( !tmp_node ) - CV_ERROR( CV_StsBadArg, "svm_type tag is not found" ); - - if( CV_NODE_TYPE(tmp_node->tag) == CV_NODE_INT ) - svm_type = cvReadInt( tmp_node, -1 ); - else - { - const char* svm_type_str = cvReadString( tmp_node, "" ); - svm_type = - strcmp( svm_type_str, "C_SVC" ) == 0 ? CvSVM::C_SVC : - strcmp( svm_type_str, "NU_SVC" ) == 0 ? CvSVM::NU_SVC : - strcmp( svm_type_str, "ONE_CLASS" ) == 0 ? CvSVM::ONE_CLASS : - strcmp( svm_type_str, "EPS_SVR" ) == 0 ? CvSVM::EPS_SVR : - strcmp( svm_type_str, "NU_SVR" ) == 0 ? CvSVM::NU_SVR : -1; - - if( svm_type < 0 ) - CV_ERROR( CV_StsParseError, "Missing of invalid SVM type" ); - } - - kernel_node = cvGetFileNodeByName( fs, svm_node, "kernel" ); - if( !kernel_node ) - CV_ERROR( CV_StsParseError, "SVM kernel tag is not found" ); - - tmp_node = cvGetFileNodeByName( fs, kernel_node, "type" ); - if( !tmp_node ) - CV_ERROR( CV_StsParseError, "SVM kernel type tag is not found" ); - - if( CV_NODE_TYPE(tmp_node->tag) == CV_NODE_INT ) - kernel_type = cvReadInt( tmp_node, -1 ); - else - { - const char* kernel_type_str = cvReadString( tmp_node, "" ); - kernel_type = - strcmp( kernel_type_str, "LINEAR" ) == 0 ? CvSVM::LINEAR : - strcmp( kernel_type_str, "POLY" ) == 0 ? CvSVM::POLY : - strcmp( kernel_type_str, "RBF" ) == 0 ? CvSVM::RBF : - strcmp( kernel_type_str, "SIGMOID" ) == 0 ? CvSVM::SIGMOID : -1; - - if( kernel_type < 0 ) - CV_ERROR( CV_StsParseError, "Missing of invalid SVM kernel type" ); - } - - _params.svm_type = svm_type; - _params.kernel_type = kernel_type; - _params.degree = cvReadRealByName( fs, kernel_node, "degree", 0 ); - _params.gamma = cvReadRealByName( fs, kernel_node, "gamma", 0 ); - _params.coef0 = cvReadRealByName( fs, kernel_node, "coef0", 0 ); - - _params.C = cvReadRealByName( fs, svm_node, "C", 0 ); - _params.nu = cvReadRealByName( fs, svm_node, "nu", 0 ); - _params.p = cvReadRealByName( fs, svm_node, "p", 0 ); - _params.class_weights = 0; - - tmp_node = cvGetFileNodeByName( fs, svm_node, "term_criteria" ); - if( tmp_node ) - { - _params.term_crit.epsilon = cvReadRealByName( fs, tmp_node, "epsilon", -1. ); - _params.term_crit.max_iter = cvReadIntByName( fs, tmp_node, "iterations", -1 ); - _params.term_crit.type = (_params.term_crit.epsilon >= 0 ? CV_TERMCRIT_EPS : 0) + - (_params.term_crit.max_iter >= 0 ? CV_TERMCRIT_ITER : 0); - } - else - _params.term_crit = cvTermCriteria( CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 1000, FLT_EPSILON ); - - set_params( _params ); - - __END__; -} - -void CvSVM::read( CvFileStorage* fs, CvFileNode* svm_node ) -{ - const double not_found_dbl = DBL_MAX; - - CV_FUNCNAME( "CvSVM::read" ); - - __BEGIN__; - - int i, var_count, df_count, class_count; - int block_size = 1 << 16, sv_size; - CvFileNode *sv_node, *df_node; - CvSVMDecisionFunc* df; - CvSeqReader reader; - - if( !svm_node ) - CV_ERROR( CV_StsParseError, "The requested element is not found" ); - - clear(); - - // read SVM parameters - read_params( fs, svm_node ); - - // and top-level data - sv_total = cvReadIntByName( fs, svm_node, "sv_total", -1 ); - var_all = cvReadIntByName( fs, svm_node, "var_all", -1 ); - var_count = cvReadIntByName( fs, svm_node, "var_count", var_all ); - class_count = cvReadIntByName( fs, svm_node, "class_count", 0 ); - - if( !isSvmModelApplicable(sv_total, var_all, var_count, class_count) ) - CV_ERROR( CV_StsParseError, "SVM model data is invalid, check sv_count, var_* and class_count tags" ); - - CV_CALL( class_labels = (CvMat*)cvReadByName( fs, svm_node, "class_labels" )); - CV_CALL( class_weights = (CvMat*)cvReadByName( fs, svm_node, "class_weights" )); - CV_CALL( var_idx = (CvMat*)cvReadByName( fs, svm_node, "var_idx" )); - - if( class_count > 1 && (!class_labels || - !CV_IS_MAT(class_labels) || class_labels->cols != class_count)) - CV_ERROR( CV_StsParseError, "Array of class labels is missing or invalid" ); - - if( var_count < var_all && (!var_idx || !CV_IS_MAT(var_idx) || var_idx->cols != var_count) ) - CV_ERROR( CV_StsParseError, "var_idx array is missing or invalid" ); - - // read support vectors - sv_node = cvGetFileNodeByName( fs, svm_node, "support_vectors" ); - if( !sv_node || !CV_NODE_IS_SEQ(sv_node->tag)) - CV_ERROR( CV_StsParseError, "Missing or invalid sequence of support vectors" ); - - block_size = MAX( block_size, sv_total*(int)sizeof(CvSVMKernelRow)); - block_size = MAX( block_size, sv_total*2*(int)sizeof(double)); - block_size = MAX( block_size, var_all*(int)sizeof(double)); - - CV_CALL( storage = cvCreateMemStorage(block_size + sizeof(CvMemBlock) + sizeof(CvSeqBlock))); - CV_CALL( sv = (float**)cvMemStorageAlloc( storage, - sv_total*sizeof(sv[0]) )); - - CV_CALL( cvStartReadSeq( sv_node->data.seq, &reader, 0 )); - sv_size = var_count*sizeof(sv[0][0]); - - for( i = 0; i < sv_total; i++ ) - { - CvFileNode* sv_elem = (CvFileNode*)reader.ptr; - CV_ASSERT( var_count == 1 || (CV_NODE_IS_SEQ(sv_elem->tag) && - sv_elem->data.seq->total == var_count) ); - - CV_CALL( sv[i] = (float*)cvMemStorageAlloc( storage, sv_size )); - CV_CALL( cvReadRawData( fs, sv_elem, sv[i], "f" )); - CV_NEXT_SEQ_ELEM( sv_node->data.seq->elem_size, reader ); - } - - // read decision functions - df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1; - df_node = cvGetFileNodeByName( fs, svm_node, "decision_functions" ); - if( !df_node || !CV_NODE_IS_SEQ(df_node->tag) || - df_node->data.seq->total != df_count ) - CV_ERROR( CV_StsParseError, "decision_functions is missing or is not a collection " - "or has a wrong number of elements" ); - - CV_CALL( df = decision_func = (CvSVMDecisionFunc*)cvAlloc( df_count*sizeof(df[0]) )); - cvStartReadSeq( df_node->data.seq, &reader, 0 ); - - for( i = 0; i < df_count; i++ ) - { - CvFileNode* df_elem = (CvFileNode*)reader.ptr; - CvFileNode* alpha_node = cvGetFileNodeByName( fs, df_elem, "alpha" ); - - int sv_count = cvReadIntByName( fs, df_elem, "sv_count", -1 ); - if( sv_count <= 0 ) - CV_ERROR( CV_StsParseError, "sv_count is missing or non-positive" ); - df[i].sv_count = sv_count; - - df[i].rho = cvReadRealByName( fs, df_elem, "rho", not_found_dbl ); - if( fabs(df[i].rho - not_found_dbl) < DBL_EPSILON ) - CV_ERROR( CV_StsParseError, "rho is missing" ); - - if( !alpha_node ) - CV_ERROR( CV_StsParseError, "alpha is missing in the decision function" ); - - CV_CALL( df[i].alpha = (double*)cvMemStorageAlloc( storage, - sv_count*sizeof(df[i].alpha[0]))); - CV_ASSERT( sv_count == 1 || (CV_NODE_IS_SEQ(alpha_node->tag) && - alpha_node->data.seq->total == sv_count) ); - CV_CALL( cvReadRawData( fs, alpha_node, df[i].alpha, "d" )); - - if( class_count > 1 ) - { - CvFileNode* index_node = cvGetFileNodeByName( fs, df_elem, "index" ); - if( !index_node ) - CV_ERROR( CV_StsParseError, "index is missing in the decision function" ); - CV_CALL( df[i].sv_index = (int*)cvMemStorageAlloc( storage, - sv_count*sizeof(df[i].sv_index[0]))); - CV_ASSERT( sv_count == 1 || (CV_NODE_IS_SEQ(index_node->tag) && - index_node->data.seq->total == sv_count) ); - CV_CALL( cvReadRawData( fs, index_node, df[i].sv_index, "i" )); - } - else - df[i].sv_index = 0; - - CV_NEXT_SEQ_ELEM( df_node->data.seq->elem_size, reader ); - } - - if( cvReadIntByName(fs, svm_node, "optimize_linear", 1) != 0 ) - optimize_linear_svm(); - create_kernel(); - - __END__; -} - -#if 0 - -static void* -icvCloneSVM( const void* _src ) -{ - CvSVMModel* dst = 0; - - CV_FUNCNAME( "icvCloneSVM" ); - - __BEGIN__; - - const CvSVMModel* src = (const CvSVMModel*)_src; - int var_count, class_count; - int i, sv_total, df_count; - int sv_size; - - if( !CV_IS_SVM(src) ) - CV_ERROR( !src ? CV_StsNullPtr : CV_StsBadArg, "Input pointer is NULL or invalid" ); - - // 0. create initial CvSVMModel structure - CV_CALL( dst = icvCreateSVM() ); - dst->params = src->params; - dst->params.weight_labels = 0; - dst->params.weights = 0; - - dst->var_all = src->var_all; - if( src->class_labels ) - dst->class_labels = cvCloneMat( src->class_labels ); - if( src->class_weights ) - dst->class_weights = cvCloneMat( src->class_weights ); - if( src->comp_idx ) - dst->comp_idx = cvCloneMat( src->comp_idx ); - - var_count = src->comp_idx ? src->comp_idx->cols : src->var_all; - class_count = src->class_labels ? src->class_labels->cols : - src->params.svm_type == CvSVM::ONE_CLASS ? 1 : 0; - sv_total = dst->sv_total = src->sv_total; - CV_CALL( dst->storage = cvCreateMemStorage( src->storage->block_size )); - CV_CALL( dst->sv = (float**)cvMemStorageAlloc( dst->storage, - sv_total*sizeof(dst->sv[0]) )); - - sv_size = var_count*sizeof(dst->sv[0][0]); - - for( i = 0; i < sv_total; i++ ) - { - CV_CALL( dst->sv[i] = (float*)cvMemStorageAlloc( dst->storage, sv_size )); - memcpy( dst->sv[i], src->sv[i], sv_size ); - } - - df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1; - - CV_CALL( dst->decision_func = cvAlloc( df_count*sizeof(CvSVMDecisionFunc) )); - - for( i = 0; i < df_count; i++ ) - { - const CvSVMDecisionFunc *sdf = - (const CvSVMDecisionFunc*)src->decision_func+i; - CvSVMDecisionFunc *ddf = - (CvSVMDecisionFunc*)dst->decision_func+i; - int sv_count = sdf->sv_count; - ddf->sv_count = sv_count; - ddf->rho = sdf->rho; - CV_CALL( ddf->alpha = (double*)cvMemStorageAlloc( dst->storage, - sv_count*sizeof(ddf->alpha[0]))); - memcpy( ddf->alpha, sdf->alpha, sv_count*sizeof(ddf->alpha[0])); - - if( class_count > 1 ) - { - CV_CALL( ddf->sv_index = (int*)cvMemStorageAlloc( dst->storage, - sv_count*sizeof(ddf->sv_index[0]))); - memcpy( ddf->sv_index, sdf->sv_index, sv_count*sizeof(ddf->sv_index[0])); - } - else - ddf->sv_index = 0; - } - - __END__; - - if( cvGetErrStatus() < 0 && dst ) - icvReleaseSVM( &dst ); - - return dst; -} - -static int icvRegisterSVMType() -{ - CvTypeInfo info; - memset( &info, 0, sizeof(info) ); - - info.flags = 0; - info.header_size = sizeof( info ); - info.is_instance = icvIsSVM; - info.release = (CvReleaseFunc)icvReleaseSVM; - info.read = icvReadSVM; - info.write = icvWriteSVM; - info.clone = icvCloneSVM; - info.type_name = CV_TYPE_NAME_ML_SVM; - cvRegisterType( &info ); - - return 1; -} - - -static int svm = icvRegisterSVMType(); - -/* The function trains SVM model with optimal parameters, obtained by using cross-validation. -The parameters to be estimated should be indicated by setting theirs values to FLT_MAX. -The optimal parameters are saved in */ -CV_IMPL CvStatModel* -cvTrainSVM_CrossValidation( const CvMat* train_data, int tflag, - const CvMat* responses, - CvStatModelParams* model_params, - const CvStatModelParams* cross_valid_params, - const CvMat* comp_idx, - const CvMat* sample_idx, - const CvParamGrid* degree_grid, - const CvParamGrid* gamma_grid, - const CvParamGrid* coef_grid, - const CvParamGrid* C_grid, - const CvParamGrid* nu_grid, - const CvParamGrid* p_grid ) -{ - CvStatModel* svm = 0; - - CV_FUNCNAME("cvTainSVMCrossValidation"); - __BEGIN__; - - double degree_step = 7, - g_step = 15, - coef_step = 14, - C_step = 20, - nu_step = 5, - p_step = 7; // all steps must be > 1 - double degree_begin = 0.01, degree_end = 2; - double g_begin = 1e-5, g_end = 0.5; - double coef_begin = 0.1, coef_end = 300; - double C_begin = 0.1, C_end = 6000; - double nu_begin = 0.01, nu_end = 0.4; - double p_begin = 0.01, p_end = 100; - - double rate = 0, gamma = 0, C = 0, degree = 0, coef = 0, p = 0, nu = 0; - - double best_rate = 0; - double best_degree = degree_begin; - double best_gamma = g_begin; - double best_coef = coef_begin; - double best_C = C_begin; - double best_nu = nu_begin; - double best_p = p_begin; - - CvSVMModelParams svm_params, *psvm_params; - CvCrossValidationParams* cv_params = (CvCrossValidationParams*)cross_valid_params; - int svm_type, kernel; - int is_regression; - - if( !model_params ) - CV_ERROR( CV_StsBadArg, "" ); - if( !cv_params ) - CV_ERROR( CV_StsBadArg, "" ); - - svm_params = *(CvSVMModelParams*)model_params; - psvm_params = (CvSVMModelParams*)model_params; - svm_type = svm_params.svm_type; - kernel = svm_params.kernel_type; - - svm_params.degree = svm_params.degree > 0 ? svm_params.degree : 1; - svm_params.gamma = svm_params.gamma > 0 ? svm_params.gamma : 1; - svm_params.coef0 = svm_params.coef0 > 0 ? svm_params.coef0 : 1e-6; - svm_params.C = svm_params.C > 0 ? svm_params.C : 1; - svm_params.nu = svm_params.nu > 0 ? svm_params.nu : 1; - svm_params.p = svm_params.p > 0 ? svm_params.p : 1; - - if( degree_grid ) - { - if( !(degree_grid->max_val == 0 && degree_grid->min_val == 0 && - degree_grid->step == 0) ) - { - if( degree_grid->min_val > degree_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( degree_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - degree_begin = degree_grid->min_val; - degree_end = degree_grid->max_val; - degree_step = degree_grid->step; - } - } - else - degree_begin = degree_end = svm_params.degree; - - if( gamma_grid ) - { - if( !(gamma_grid->max_val == 0 && gamma_grid->min_val == 0 && - gamma_grid->step == 0) ) - { - if( gamma_grid->min_val > gamma_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( gamma_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - g_begin = gamma_grid->min_val; - g_end = gamma_grid->max_val; - g_step = gamma_grid->step; - } - } - else - g_begin = g_end = svm_params.gamma; - - if( coef_grid ) - { - if( !(coef_grid->max_val == 0 && coef_grid->min_val == 0 && - coef_grid->step == 0) ) - { - if( coef_grid->min_val > coef_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( coef_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - coef_begin = coef_grid->min_val; - coef_end = coef_grid->max_val; - coef_step = coef_grid->step; - } - } - else - coef_begin = coef_end = svm_params.coef0; - - if( C_grid ) - { - if( !(C_grid->max_val == 0 && C_grid->min_val == 0 && C_grid->step == 0)) - { - if( C_grid->min_val > C_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( C_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - C_begin = C_grid->min_val; - C_end = C_grid->max_val; - C_step = C_grid->step; - } - } - else - C_begin = C_end = svm_params.C; - - if( nu_grid ) - { - if(!(nu_grid->max_val == 0 && nu_grid->min_val == 0 && nu_grid->step==0)) - { - if( nu_grid->min_val > nu_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( nu_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - nu_begin = nu_grid->min_val; - nu_end = nu_grid->max_val; - nu_step = nu_grid->step; - } - } - else - nu_begin = nu_end = svm_params.nu; - - if( p_grid ) - { - if( !(p_grid->max_val == 0 && p_grid->min_val == 0 && p_grid->step == 0)) - { - if( p_grid->min_val > p_grid->max_val ) - CV_ERROR( CV_StsBadArg, - "low bound of grid should be less then the upper one"); - if( p_grid->step <= 1 ) - CV_ERROR( CV_StsBadArg, "grid step should be greater 1" ); - p_begin = p_grid->min_val; - p_end = p_grid->max_val; - p_step = p_grid->step; - } - } - else - p_begin = p_end = svm_params.p; - - // these parameters are not used: - if( kernel != CvSVM::POLY ) - degree_begin = degree_end = svm_params.degree; - - if( kernel == CvSVM::LINEAR ) - g_begin = g_end = svm_params.gamma; - - if( kernel != CvSVM::POLY && kernel != CvSVM::SIGMOID ) - coef_begin = coef_end = svm_params.coef0; - - if( svm_type == CvSVM::NU_SVC || svm_type == CvSVM::ONE_CLASS ) - C_begin = C_end = svm_params.C; - - if( svm_type == CvSVM::C_SVC || svm_type == CvSVM::EPS_SVR ) - nu_begin = nu_end = svm_params.nu; - - if( svm_type != CvSVM::EPS_SVR ) - p_begin = p_end = svm_params.p; - - is_regression = cv_params->is_regression; - best_rate = is_regression ? FLT_MAX : 0; - - assert( g_step > 1 && degree_step > 1 && coef_step > 1); - assert( p_step > 1 && C_step > 1 && nu_step > 1 ); - - for( degree = degree_begin; degree <= degree_end; degree *= degree_step ) - { - svm_params.degree = degree; - //printf("degree = %.3f\n", degree ); - for( gamma= g_begin; gamma <= g_end; gamma *= g_step ) - { - svm_params.gamma = gamma; - //printf(" gamma = %.3f\n", gamma ); - for( coef = coef_begin; coef <= coef_end; coef *= coef_step ) - { - svm_params.coef0 = coef; - //printf(" coef = %.3f\n", coef ); - for( C = C_begin; C <= C_end; C *= C_step ) - { - svm_params.C = C; - //printf(" C = %.3f\n", C ); - for( nu = nu_begin; nu <= nu_end; nu *= nu_step ) - { - svm_params.nu = nu; - //printf(" nu = %.3f\n", nu ); - for( p = p_begin; p <= p_end; p *= p_step ) - { - int well; - svm_params.p = p; - //printf(" p = %.3f\n", p ); - - CV_CALL(rate = cvCrossValidation( train_data, tflag, responses, &cvTrainSVM, - cross_valid_params, (CvStatModelParams*)&svm_params, comp_idx, sample_idx )); - - well = rate > best_rate && !is_regression || rate < best_rate && is_regression; - if( well || (rate == best_rate && C < best_C) ) - { - best_rate = rate; - best_degree = degree; - best_gamma = gamma; - best_coef = coef; - best_C = C; - best_nu = nu; - best_p = p; - } - //printf(" rate = %.2f\n", rate ); - } - } - } - } - } - } - //printf("The best:\nrate = %.2f%% degree = %f gamma = %f coef = %f c = %f nu = %f p = %f\n", - // best_rate, best_degree, best_gamma, best_coef, best_C, best_nu, best_p ); - - psvm_params->C = best_C; - psvm_params->nu = best_nu; - psvm_params->p = best_p; - psvm_params->gamma = best_gamma; - psvm_params->degree = best_degree; - psvm_params->coef0 = best_coef; - - CV_CALL(svm = cvTrainSVM( train_data, tflag, responses, model_params, comp_idx, sample_idx )); - - __END__; - - return svm; -} - -#endif - -/* End of file. */ diff --git a/modules/ml/src/testset.cpp b/modules/ml/src/testset.cpp deleted file mode 100644 index 5edb3b4..0000000 --- a/modules/ml/src/testset.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -typedef struct CvDI -{ - double d; - int i; -} CvDI; - -static int CV_CDECL -icvCmpDI( const void* a, const void* b, void* ) -{ - const CvDI* e1 = (const CvDI*) a; - const CvDI* e2 = (const CvDI*) b; - - return (e1->d < e2->d) ? -1 : (e1->d > e2->d); -} - -CV_IMPL void -cvCreateTestSet( int type, CvMat** samples, - int num_samples, - int num_features, - CvMat** responses, - int num_classes, ... ) -{ - CvMat* mean = NULL; - CvMat* cov = NULL; - CvMemStorage* storage = NULL; - - CV_FUNCNAME( "cvCreateTestSet" ); - - __BEGIN__; - - if( samples ) - *samples = NULL; - if( responses ) - *responses = NULL; - - if( type != CV_TS_CONCENTRIC_SPHERES ) - CV_ERROR( CV_StsBadArg, "Invalid type parameter" ); - - if( !samples ) - CV_ERROR( CV_StsNullPtr, "samples parameter must be not NULL" ); - - if( !responses ) - CV_ERROR( CV_StsNullPtr, "responses parameter must be not NULL" ); - - if( num_samples < 1 ) - CV_ERROR( CV_StsBadArg, "num_samples parameter must be positive" ); - - if( num_features < 1 ) - CV_ERROR( CV_StsBadArg, "num_features parameter must be positive" ); - - if( num_classes < 1 ) - CV_ERROR( CV_StsBadArg, "num_classes parameter must be positive" ); - - if( type == CV_TS_CONCENTRIC_SPHERES ) - { - CvSeqWriter writer; - CvSeqReader reader; - CvMat sample; - CvDI elem; - CvSeq* seq = NULL; - int i, cur_class; - - CV_CALL( *samples = cvCreateMat( num_samples, num_features, CV_32FC1 ) ); - CV_CALL( *responses = cvCreateMat( 1, num_samples, CV_32SC1 ) ); - CV_CALL( mean = cvCreateMat( 1, num_features, CV_32FC1 ) ); - CV_CALL( cvSetZero( mean ) ); - CV_CALL( cov = cvCreateMat( num_features, num_features, CV_32FC1 ) ); - CV_CALL( cvSetIdentity( cov ) ); - - /* fill the feature values matrix with random numbers drawn from standard - normal distribution */ - CV_CALL( cvRandMVNormal( mean, cov, *samples ) ); - - /* calculate distances from the origin to the samples and put them - into the sequence along with indices */ - CV_CALL( storage = cvCreateMemStorage() ); - CV_CALL( cvStartWriteSeq( 0, sizeof( CvSeq ), sizeof( CvDI ), storage, &writer )); - for( i = 0; i < (*samples)->rows; ++i ) - { - CV_CALL( cvGetRow( *samples, &sample, i )); - elem.i = i; - CV_CALL( elem.d = cvNorm( &sample, NULL, CV_L2 )); - CV_WRITE_SEQ_ELEM( elem, writer ); - } - CV_CALL( seq = cvEndWriteSeq( &writer ) ); - - /* sort the sequence in a distance ascending order */ - CV_CALL( cvSeqSort( seq, icvCmpDI, NULL ) ); - - /* assign class labels */ - num_classes = MIN( num_samples, num_classes ); - CV_CALL( cvStartReadSeq( seq, &reader ) ); - CV_READ_SEQ_ELEM( elem, reader ); - for( i = 0, cur_class = 0; i < num_samples; ++cur_class ) - { - int last_idx; - double max_dst; - - last_idx = num_samples * (cur_class + 1) / num_classes - 1; - CV_CALL( max_dst = (*((CvDI*) cvGetSeqElem( seq, last_idx ))).d ); - max_dst = MAX( max_dst, elem.d ); - - for( ; elem.d <= max_dst && i < num_samples; ++i ) - { - CV_MAT_ELEM( **responses, int, 0, elem.i ) = cur_class; - if( i < num_samples - 1 ) - { - CV_READ_SEQ_ELEM( elem, reader ); - } - } - } - } - - __END__; - - if( cvGetErrStatus() < 0 ) - { - if( samples ) - cvReleaseMat( samples ); - if( responses ) - cvReleaseMat( responses ); - } - cvReleaseMat( &mean ); - cvReleaseMat( &cov ); - cvReleaseMemStorage( &storage ); -} - -/* End of file. */ diff --git a/modules/ml/src/tree.cpp b/modules/ml/src/tree.cpp deleted file mode 100644 index 1ba94fc..0000000 --- a/modules/ml/src/tree.cpp +++ /dev/null @@ -1,4137 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" -#include - -using namespace cv; - -static const float ord_nan = FLT_MAX*0.5f; -static const int min_block_size = 1 << 16; -static const int block_size_delta = 1 << 10; - -CvDTreeTrainData::CvDTreeTrainData() -{ - var_idx = var_type = cat_count = cat_ofs = cat_map = - priors = priors_mult = counts = direction = split_buf = responses_copy = 0; - buf = 0; - tree_storage = temp_storage = 0; - - clear(); -} - - -CvDTreeTrainData::CvDTreeTrainData( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, const CvDTreeParams& _params, - bool _shared, bool _add_labels ) -{ - var_idx = var_type = cat_count = cat_ofs = cat_map = - priors = priors_mult = counts = direction = split_buf = responses_copy = 0; - buf = 0; - - tree_storage = temp_storage = 0; - - set_data( _train_data, _tflag, _responses, _var_idx, _sample_idx, - _var_type, _missing_mask, _params, _shared, _add_labels ); -} - - -CvDTreeTrainData::~CvDTreeTrainData() -{ - clear(); -} - - -bool CvDTreeTrainData::set_params( const CvDTreeParams& _params ) -{ - bool ok = false; - - CV_FUNCNAME( "CvDTreeTrainData::set_params" ); - - __BEGIN__; - - // set parameters - params = _params; - - if( params.max_categories < 2 ) - CV_ERROR( CV_StsOutOfRange, "params.max_categories should be >= 2" ); - params.max_categories = MIN( params.max_categories, 15 ); - - if( params.max_depth < 0 ) - CV_ERROR( CV_StsOutOfRange, "params.max_depth should be >= 0" ); - params.max_depth = MIN( params.max_depth, 25 ); - - params.min_sample_count = MAX(params.min_sample_count,1); - - if( params.cv_folds < 0 ) - CV_ERROR( CV_StsOutOfRange, - "params.cv_folds should be =0 (the tree is not pruned) " - "or n>0 (tree is pruned using n-fold cross-validation)" ); - - if( params.cv_folds == 1 ) - params.cv_folds = 0; - - if( params.regression_accuracy < 0 ) - CV_ERROR( CV_StsOutOfRange, "params.regression_accuracy should be >= 0" ); - - ok = true; - - __END__; - - return ok; -} - -#define CV_CMP_NUM_PTR(a,b) (*(a) < *(b)) -static CV_IMPLEMENT_QSORT_EX( icvSortIntPtr, int*, CV_CMP_NUM_PTR, int ) -static CV_IMPLEMENT_QSORT_EX( icvSortDblPtr, double*, CV_CMP_NUM_PTR, int ) - -#define CV_CMP_NUM_IDX(i,j) (aux[i] < aux[j]) -static CV_IMPLEMENT_QSORT_EX( icvSortIntAux, int, CV_CMP_NUM_IDX, const float* ) -static CV_IMPLEMENT_QSORT_EX( icvSortUShAux, unsigned short, CV_CMP_NUM_IDX, const float* ) - -#define CV_CMP_PAIRS(a,b) (*((a).i) < *((b).i)) -static CV_IMPLEMENT_QSORT_EX( icvSortPairs, CvPair16u32s, CV_CMP_PAIRS, int ) - -void CvDTreeTrainData::set_data( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, const CvMat* _sample_idx, - const CvMat* _var_type, const CvMat* _missing_mask, const CvDTreeParams& _params, - bool _shared, bool _add_labels, bool _update_data ) -{ - CvMat* sample_indices = 0; - CvMat* var_type0 = 0; - CvMat* tmp_map = 0; - int** int_ptr = 0; - CvPair16u32s* pair16u32s_ptr = 0; - CvDTreeTrainData* data = 0; - float *_fdst = 0; - int *_idst = 0; - unsigned short* udst = 0; - int* idst = 0; - - CV_FUNCNAME( "CvDTreeTrainData::set_data" ); - - __BEGIN__; - - int sample_all = 0, r_type, cv_n; - int total_c_count = 0; - int tree_block_size, temp_block_size, max_split_size, nv_size, cv_size = 0; - int ds_step, dv_step, ms_step = 0, mv_step = 0; // {data|mask}{sample|var}_step - int vi, i, size; - char err[100]; - const int *sidx = 0, *vidx = 0; - - uint64 effective_buf_size = 0; - int effective_buf_height = 0, effective_buf_width = 0; - - if( _update_data && data_root ) - { - data = new CvDTreeTrainData( _train_data, _tflag, _responses, _var_idx, - _sample_idx, _var_type, _missing_mask, _params, _shared, _add_labels ); - - // compare new and old train data - if( !(data->var_count == var_count && - cvNorm( data->var_type, var_type, CV_C ) < FLT_EPSILON && - cvNorm( data->cat_count, cat_count, CV_C ) < FLT_EPSILON && - cvNorm( data->cat_map, cat_map, CV_C ) < FLT_EPSILON) ) - CV_ERROR( CV_StsBadArg, - "The new training data must have the same types and the input and output variables " - "and the same categories for categorical variables" ); - - cvReleaseMat( &priors ); - cvReleaseMat( &priors_mult ); - cvReleaseMat( &buf ); - cvReleaseMat( &direction ); - cvReleaseMat( &split_buf ); - cvReleaseMemStorage( &temp_storage ); - - priors = data->priors; data->priors = 0; - priors_mult = data->priors_mult; data->priors_mult = 0; - buf = data->buf; data->buf = 0; - buf_count = data->buf_count; buf_size = data->buf_size; - sample_count = data->sample_count; - - direction = data->direction; data->direction = 0; - split_buf = data->split_buf; data->split_buf = 0; - temp_storage = data->temp_storage; data->temp_storage = 0; - nv_heap = data->nv_heap; cv_heap = data->cv_heap; - - data_root = new_node( 0, sample_count, 0, 0 ); - EXIT; - } - - clear(); - - var_all = 0; - rng = &cv::theRNG(); - - CV_CALL( set_params( _params )); - - // check parameter types and sizes - CV_CALL( cvCheckTrainData( _train_data, _tflag, _missing_mask, &var_all, &sample_all )); - - train_data = _train_data; - responses = _responses; - - if( _tflag == CV_ROW_SAMPLE ) - { - ds_step = _train_data->step/CV_ELEM_SIZE(_train_data->type); - dv_step = 1; - if( _missing_mask ) - ms_step = _missing_mask->step, mv_step = 1; - } - else - { - dv_step = _train_data->step/CV_ELEM_SIZE(_train_data->type); - ds_step = 1; - if( _missing_mask ) - mv_step = _missing_mask->step, ms_step = 1; - } - tflag = _tflag; - - sample_count = sample_all; - var_count = var_all; - - if( _sample_idx ) - { - CV_CALL( sample_indices = cvPreprocessIndexArray( _sample_idx, sample_all )); - sidx = sample_indices->data.i; - sample_count = sample_indices->rows + sample_indices->cols - 1; - } - - if( _var_idx ) - { - CV_CALL( var_idx = cvPreprocessIndexArray( _var_idx, var_all )); - vidx = var_idx->data.i; - var_count = var_idx->rows + var_idx->cols - 1; - } - - is_buf_16u = false; - if ( sample_count < 65536 ) - is_buf_16u = true; - - if( !CV_IS_MAT(_responses) || - (CV_MAT_TYPE(_responses->type) != CV_32SC1 && - CV_MAT_TYPE(_responses->type) != CV_32FC1) || - (_responses->rows != 1 && _responses->cols != 1) || - _responses->rows + _responses->cols - 1 != sample_all ) - CV_ERROR( CV_StsBadArg, "The array of _responses must be an integer or " - "floating-point vector containing as many elements as " - "the total number of samples in the training data matrix" ); - - r_type = CV_VAR_CATEGORICAL; - if( _var_type ) - CV_CALL( var_type0 = cvPreprocessVarType( _var_type, var_idx, var_count, &r_type )); - - CV_CALL( var_type = cvCreateMat( 1, var_count+2, CV_32SC1 )); - - cat_var_count = 0; - ord_var_count = -1; - - is_classifier = r_type == CV_VAR_CATEGORICAL; - - // step 0. calc the number of categorical vars - for( vi = 0; vi < var_count; vi++ ) - { - char vt = var_type0 ? var_type0->data.ptr[vi] : CV_VAR_ORDERED; - var_type->data.i[vi] = vt == CV_VAR_CATEGORICAL ? cat_var_count++ : ord_var_count--; - } - - ord_var_count = ~ord_var_count; - cv_n = params.cv_folds; - // set the two last elements of var_type array to be able - // to locate responses and cross-validation labels using - // the corresponding get_* functions. - var_type->data.i[var_count] = cat_var_count; - var_type->data.i[var_count+1] = cat_var_count+1; - - // in case of single ordered predictor we need dummy cv_labels - // for safe split_node_data() operation - have_labels = cv_n > 0 || (ord_var_count == 1 && cat_var_count == 0) || _add_labels; - - work_var_count = var_count + (is_classifier ? 1 : 0) // for responses class_labels - + (have_labels ? 1 : 0); // for cv_labels - - shared = _shared; - buf_count = shared ? 2 : 1; - - buf_size = -1; // the member buf_size is obsolete - - effective_buf_size = (uint64)(work_var_count + 1)*(uint64)sample_count * buf_count; // this is the total size of "CvMat buf" to be allocated - effective_buf_width = sample_count; - effective_buf_height = work_var_count+1; - - if (effective_buf_width >= effective_buf_height) - effective_buf_height *= buf_count; - else - effective_buf_width *= buf_count; - - if ((uint64)effective_buf_width * (uint64)effective_buf_height != effective_buf_size) - { - CV_Error(CV_StsBadArg, "The memory buffer cannot be allocated since its size exceeds integer fields limit"); - } - - - - if ( is_buf_16u ) - { - CV_CALL( buf = cvCreateMat( effective_buf_height, effective_buf_width, CV_16UC1 )); - CV_CALL( pair16u32s_ptr = (CvPair16u32s*)cvAlloc( sample_count*sizeof(pair16u32s_ptr[0]) )); - } - else - { - CV_CALL( buf = cvCreateMat( effective_buf_height, effective_buf_width, CV_32SC1 )); - CV_CALL( int_ptr = (int**)cvAlloc( sample_count*sizeof(int_ptr[0]) )); - } - - size = is_classifier ? (cat_var_count+1) : cat_var_count; - size = !size ? 1 : size; - CV_CALL( cat_count = cvCreateMat( 1, size, CV_32SC1 )); - CV_CALL( cat_ofs = cvCreateMat( 1, size, CV_32SC1 )); - - size = is_classifier ? (cat_var_count + 1)*params.max_categories : cat_var_count*params.max_categories; - size = !size ? 1 : size; - CV_CALL( cat_map = cvCreateMat( 1, size, CV_32SC1 )); - - // now calculate the maximum size of split, - // create memory storage that will keep nodes and splits of the decision tree - // allocate root node and the buffer for the whole training data - max_split_size = cvAlign(sizeof(CvDTreeSplit) + - (MAX(0,sample_count - 33)/32)*sizeof(int),sizeof(void*)); - tree_block_size = MAX((int)sizeof(CvDTreeNode)*8, max_split_size); - tree_block_size = MAX(tree_block_size + block_size_delta, min_block_size); - CV_CALL( tree_storage = cvCreateMemStorage( tree_block_size )); - CV_CALL( node_heap = cvCreateSet( 0, sizeof(*node_heap), sizeof(CvDTreeNode), tree_storage )); - - nv_size = var_count*sizeof(int); - nv_size = cvAlign(MAX( nv_size, (int)sizeof(CvSetElem) ), sizeof(void*)); - - temp_block_size = nv_size; - - if( cv_n ) - { - if( sample_count < cv_n*MAX(params.min_sample_count,10) ) - CV_ERROR( CV_StsOutOfRange, - "The many folds in cross-validation for such a small dataset" ); - - cv_size = cvAlign( cv_n*(sizeof(int) + sizeof(double)*2), sizeof(double) ); - temp_block_size = MAX(temp_block_size, cv_size); - } - - temp_block_size = MAX( temp_block_size + block_size_delta, min_block_size ); - CV_CALL( temp_storage = cvCreateMemStorage( temp_block_size )); - CV_CALL( nv_heap = cvCreateSet( 0, sizeof(*nv_heap), nv_size, temp_storage )); - if( cv_size ) - CV_CALL( cv_heap = cvCreateSet( 0, sizeof(*cv_heap), cv_size, temp_storage )); - - CV_CALL( data_root = new_node( 0, sample_count, 0, 0 )); - - max_c_count = 1; - - _fdst = 0; - _idst = 0; - if (ord_var_count) - _fdst = (float*)cvAlloc(sample_count*sizeof(_fdst[0])); - if (is_buf_16u && (cat_var_count || is_classifier)) - _idst = (int*)cvAlloc(sample_count*sizeof(_idst[0])); - - // transform the training data to convenient representation - for( vi = 0; vi <= var_count; vi++ ) - { - int ci; - const uchar* mask = 0; - int64 m_step = 0, step; - const int* idata = 0; - const float* fdata = 0; - int num_valid = 0; - - if( vi < var_count ) // analyze i-th input variable - { - int vi0 = vidx ? vidx[vi] : vi; - ci = get_var_type(vi); - step = ds_step; m_step = ms_step; - if( CV_MAT_TYPE(_train_data->type) == CV_32SC1 ) - idata = _train_data->data.i + vi0*dv_step; - else - fdata = _train_data->data.fl + vi0*dv_step; - if( _missing_mask ) - mask = _missing_mask->data.ptr + vi0*mv_step; - } - else // analyze _responses - { - ci = cat_var_count; - step = CV_IS_MAT_CONT(_responses->type) ? - 1 : _responses->step / CV_ELEM_SIZE(_responses->type); - if( CV_MAT_TYPE(_responses->type) == CV_32SC1 ) - idata = _responses->data.i; - else - fdata = _responses->data.fl; - } - - if( (vi < var_count && ci>=0) || - (vi == var_count && is_classifier) ) // process categorical variable or response - { - int c_count, prev_label; - int* c_map; - - if (is_buf_16u) - udst = (unsigned short*)(buf->data.s + vi*sample_count); - else - idst = buf->data.i + vi*sample_count; - - // copy data - for( i = 0; i < sample_count; i++ ) - { - int val = INT_MAX, si = sidx ? sidx[i] : i; - if( !mask || !mask[(size_t)si*m_step] ) - { - if( idata ) - val = idata[(size_t)si*step]; - else - { - float t = fdata[(size_t)si*step]; - val = cvRound(t); - if( fabs(t - val) > FLT_EPSILON ) - { - sprintf( err, "%d-th value of %d-th (categorical) " - "variable is not an integer", i, vi ); - CV_ERROR( CV_StsBadArg, err ); - } - } - - if( val == INT_MAX ) - { - sprintf( err, "%d-th value of %d-th (categorical) " - "variable is too large", i, vi ); - CV_ERROR( CV_StsBadArg, err ); - } - num_valid++; - } - if (is_buf_16u) - { - _idst[i] = val; - pair16u32s_ptr[i].u = udst + i; - pair16u32s_ptr[i].i = _idst + i; - } - else - { - idst[i] = val; - int_ptr[i] = idst + i; - } - } - - c_count = num_valid > 0; - if (is_buf_16u) - { - icvSortPairs( pair16u32s_ptr, sample_count, 0 ); - // count the categories - for( i = 1; i < num_valid; i++ ) - if (*pair16u32s_ptr[i].i != *pair16u32s_ptr[i-1].i) - c_count ++ ; - } - else - { - icvSortIntPtr( int_ptr, sample_count, 0 ); - // count the categories - for( i = 1; i < num_valid; i++ ) - c_count += *int_ptr[i] != *int_ptr[i-1]; - } - - if( vi > 0 ) - max_c_count = MAX( max_c_count, c_count ); - cat_count->data.i[ci] = c_count; - cat_ofs->data.i[ci] = total_c_count; - - // resize cat_map, if need - if( cat_map->cols < total_c_count + c_count ) - { - tmp_map = cat_map; - CV_CALL( cat_map = cvCreateMat( 1, - MAX(cat_map->cols*3/2,total_c_count+c_count), CV_32SC1 )); - for( i = 0; i < total_c_count; i++ ) - cat_map->data.i[i] = tmp_map->data.i[i]; - cvReleaseMat( &tmp_map ); - } - - c_map = cat_map->data.i + total_c_count; - total_c_count += c_count; - - c_count = -1; - if (is_buf_16u) - { - // compact the class indices and build the map - prev_label = ~*pair16u32s_ptr[0].i; - for( i = 0; i < num_valid; i++ ) - { - int cur_label = *pair16u32s_ptr[i].i; - if( cur_label != prev_label ) - c_map[++c_count] = prev_label = cur_label; - *pair16u32s_ptr[i].u = (unsigned short)c_count; - } - // replace labels for missing values with -1 - for( ; i < sample_count; i++ ) - *pair16u32s_ptr[i].u = 65535; - } - else - { - // compact the class indices and build the map - prev_label = ~*int_ptr[0]; - for( i = 0; i < num_valid; i++ ) - { - int cur_label = *int_ptr[i]; - if( cur_label != prev_label ) - c_map[++c_count] = prev_label = cur_label; - *int_ptr[i] = c_count; - } - // replace labels for missing values with -1 - for( ; i < sample_count; i++ ) - *int_ptr[i] = -1; - } - } - else if( ci < 0 ) // process ordered variable - { - if (is_buf_16u) - udst = (unsigned short*)(buf->data.s + vi*sample_count); - else - idst = buf->data.i + vi*sample_count; - - for( i = 0; i < sample_count; i++ ) - { - float val = ord_nan; - int si = sidx ? sidx[i] : i; - if( !mask || !mask[(size_t)si*m_step] ) - { - if( idata ) - val = (float)idata[(size_t)si*step]; - else - val = fdata[(size_t)si*step]; - - if( fabs(val) >= ord_nan ) - { - sprintf( err, "%d-th value of %d-th (ordered) " - "variable (=%g) is too large", i, vi, val ); - CV_ERROR( CV_StsBadArg, err ); - } - num_valid++; - } - - if (is_buf_16u) - udst[i] = (unsigned short)i; // TODO: memory corruption may be here - else - idst[i] = i; - _fdst[i] = val; - - } - if (is_buf_16u) - icvSortUShAux( udst, sample_count, _fdst); - else - icvSortIntAux( idst, sample_count, _fdst ); - } - - if( vi < var_count ) - data_root->set_num_valid(vi, num_valid); - } - - // set sample labels - if (is_buf_16u) - udst = (unsigned short*)(buf->data.s + work_var_count*sample_count); - else - idst = buf->data.i + work_var_count*sample_count; - - for (i = 0; i < sample_count; i++) - { - if (udst) - udst[i] = sidx ? (unsigned short)sidx[i] : (unsigned short)i; - else - idst[i] = sidx ? sidx[i] : i; - } - - if( cv_n ) - { - unsigned short* usdst = 0; - int* idst2 = 0; - - if (is_buf_16u) - { - usdst = (unsigned short*)(buf->data.s + (get_work_var_count()-1)*sample_count); - for( i = vi = 0; i < sample_count; i++ ) - { - usdst[i] = (unsigned short)vi++; - vi &= vi < cv_n ? -1 : 0; - } - - for( i = 0; i < sample_count; i++ ) - { - int a = (*rng)(sample_count); - int b = (*rng)(sample_count); - unsigned short unsh = (unsigned short)vi; - CV_SWAP( usdst[a], usdst[b], unsh ); - } - } - else - { - idst2 = buf->data.i + (get_work_var_count()-1)*sample_count; - for( i = vi = 0; i < sample_count; i++ ) - { - idst2[i] = vi++; - vi &= vi < cv_n ? -1 : 0; - } - - for( i = 0; i < sample_count; i++ ) - { - int a = (*rng)(sample_count); - int b = (*rng)(sample_count); - CV_SWAP( idst2[a], idst2[b], vi ); - } - } - } - - if ( cat_map ) - cat_map->cols = MAX( total_c_count, 1 ); - - max_split_size = cvAlign(sizeof(CvDTreeSplit) + - (MAX(0,max_c_count - 33)/32)*sizeof(int),sizeof(void*)); - CV_CALL( split_heap = cvCreateSet( 0, sizeof(*split_heap), max_split_size, tree_storage )); - - have_priors = is_classifier && params.priors; - if( is_classifier ) - { - int m = get_num_classes(); - double sum = 0; - CV_CALL( priors = cvCreateMat( 1, m, CV_64F )); - for( i = 0; i < m; i++ ) - { - double val = have_priors ? params.priors[i] : 1.; - if( val <= 0 ) - CV_ERROR( CV_StsOutOfRange, "Every class weight should be positive" ); - priors->data.db[i] = val; - sum += val; - } - - // normalize weights - if( have_priors ) - cvScale( priors, priors, 1./sum ); - - CV_CALL( priors_mult = cvCloneMat( priors )); - CV_CALL( counts = cvCreateMat( 1, m, CV_32SC1 )); - } - - - CV_CALL( direction = cvCreateMat( 1, sample_count, CV_8UC1 )); - CV_CALL( split_buf = cvCreateMat( 1, sample_count, CV_32SC1 )); - - __END__; - - if( data ) - delete data; - - if (_fdst) - cvFree( &_fdst ); - if (_idst) - cvFree( &_idst ); - cvFree( &int_ptr ); - cvFree( &pair16u32s_ptr); - cvReleaseMat( &var_type0 ); - cvReleaseMat( &sample_indices ); - cvReleaseMat( &tmp_map ); -} - -void CvDTreeTrainData::do_responses_copy() -{ - responses_copy = cvCreateMat( responses->rows, responses->cols, responses->type ); - cvCopy( responses, responses_copy); - responses = responses_copy; -} - -CvDTreeNode* CvDTreeTrainData::subsample_data( const CvMat* _subsample_idx ) -{ - CvDTreeNode* root = 0; - CvMat* isubsample_idx = 0; - CvMat* subsample_co = 0; - - bool isMakeRootCopy = true; - - CV_FUNCNAME( "CvDTreeTrainData::subsample_data" ); - - __BEGIN__; - - if( !data_root ) - CV_ERROR( CV_StsError, "No training data has been set" ); - - if( _subsample_idx ) - { - CV_CALL( isubsample_idx = cvPreprocessIndexArray( _subsample_idx, sample_count )); - - if( isubsample_idx->cols + isubsample_idx->rows - 1 == sample_count ) - { - const int* sidx = isubsample_idx->data.i; - for( int i = 0; i < sample_count; i++ ) - { - if( sidx[i] != i ) - { - isMakeRootCopy = false; - break; - } - } - } - else - isMakeRootCopy = false; - } - - if( isMakeRootCopy ) - { - // make a copy of the root node - CvDTreeNode temp; - int i; - root = new_node( 0, 1, 0, 0 ); - temp = *root; - *root = *data_root; - root->num_valid = temp.num_valid; - if( root->num_valid ) - { - for( i = 0; i < var_count; i++ ) - root->num_valid[i] = data_root->num_valid[i]; - } - root->cv_Tn = temp.cv_Tn; - root->cv_node_risk = temp.cv_node_risk; - root->cv_node_error = temp.cv_node_error; - } - else - { - int* sidx = isubsample_idx->data.i; - // co - array of count/offset pairs (to handle duplicated values in _subsample_idx) - int* co, cur_ofs = 0; - int vi, i; - int workVarCount = get_work_var_count(); - int count = isubsample_idx->rows + isubsample_idx->cols - 1; - - root = new_node( 0, count, 1, 0 ); - - CV_CALL( subsample_co = cvCreateMat( 1, sample_count*2, CV_32SC1 )); - cvZero( subsample_co ); - co = subsample_co->data.i; - for( i = 0; i < count; i++ ) - co[sidx[i]*2]++; - for( i = 0; i < sample_count; i++ ) - { - if( co[i*2] ) - { - co[i*2+1] = cur_ofs; - cur_ofs += co[i*2]; - } - else - co[i*2+1] = -1; - } - - cv::AutoBuffer inn_buf(sample_count*(2*sizeof(int) + sizeof(float))); - for( vi = 0; vi < workVarCount; vi++ ) - { - int ci = get_var_type(vi); - - if( ci >= 0 || vi >= var_count ) - { - int num_valid = 0; - const int* src = CvDTreeTrainData::get_cat_var_data( data_root, vi, (int*)(uchar*)inn_buf ); - - if (is_buf_16u) - { - unsigned short* udst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() + - vi*sample_count + root->offset); - for( i = 0; i < count; i++ ) - { - int val = src[sidx[i]]; - udst[i] = (unsigned short)val; - num_valid += val >= 0; - } - } - else - { - int* idst = buf->data.i + root->buf_idx*get_length_subbuf() + - vi*sample_count + root->offset; - for( i = 0; i < count; i++ ) - { - int val = src[sidx[i]]; - idst[i] = val; - num_valid += val >= 0; - } - } - - if( vi < var_count ) - root->set_num_valid(vi, num_valid); - } - else - { - int *src_idx_buf = (int*)(uchar*)inn_buf; - float *src_val_buf = (float*)(src_idx_buf + sample_count); - int* sample_indices_buf = (int*)(src_val_buf + sample_count); - const int* src_idx = 0; - const float* src_val = 0; - get_ord_var_data( data_root, vi, src_val_buf, src_idx_buf, &src_val, &src_idx, sample_indices_buf ); - int j = 0, idx, count_i; - int num_valid = data_root->get_num_valid(vi); - - if (is_buf_16u) - { - unsigned short* udst_idx = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() + - vi*sample_count + data_root->offset); - for( i = 0; i < num_valid; i++ ) - { - idx = src_idx[i]; - count_i = co[idx*2]; - if( count_i ) - for( cur_ofs = co[idx*2+1]; count_i > 0; count_i--, j++, cur_ofs++ ) - udst_idx[j] = (unsigned short)cur_ofs; - } - - root->set_num_valid(vi, j); - - for( ; i < sample_count; i++ ) - { - idx = src_idx[i]; - count_i = co[idx*2]; - if( count_i ) - for( cur_ofs = co[idx*2+1]; count_i > 0; count_i--, j++, cur_ofs++ ) - udst_idx[j] = (unsigned short)cur_ofs; - } - } - else - { - int* idst_idx = buf->data.i + root->buf_idx*get_length_subbuf() + - vi*sample_count + root->offset; - for( i = 0; i < num_valid; i++ ) - { - idx = src_idx[i]; - count_i = co[idx*2]; - if( count_i ) - for( cur_ofs = co[idx*2+1]; count_i > 0; count_i--, j++, cur_ofs++ ) - idst_idx[j] = cur_ofs; - } - - root->set_num_valid(vi, j); - - for( ; i < sample_count; i++ ) - { - idx = src_idx[i]; - count_i = co[idx*2]; - if( count_i ) - for( cur_ofs = co[idx*2+1]; count_i > 0; count_i--, j++, cur_ofs++ ) - idst_idx[j] = cur_ofs; - } - } - } - } - // sample indices subsampling - const int* sample_idx_src = get_sample_indices(data_root, (int*)(uchar*)inn_buf); - if (is_buf_16u) - { - unsigned short* sample_idx_dst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() + - workVarCount*sample_count + root->offset); - for (i = 0; i < count; i++) - sample_idx_dst[i] = (unsigned short)sample_idx_src[sidx[i]]; - } - else - { - int* sample_idx_dst = buf->data.i + root->buf_idx*get_length_subbuf() + - workVarCount*sample_count + root->offset; - for (i = 0; i < count; i++) - sample_idx_dst[i] = sample_idx_src[sidx[i]]; - } - } - - __END__; - - cvReleaseMat( &isubsample_idx ); - cvReleaseMat( &subsample_co ); - - return root; -} - - -void CvDTreeTrainData::get_vectors( const CvMat* _subsample_idx, - float* values, uchar* missing, - float* _responses, bool get_class_idx ) -{ - CvMat* subsample_idx = 0; - CvMat* subsample_co = 0; - - CV_FUNCNAME( "CvDTreeTrainData::get_vectors" ); - - __BEGIN__; - - int i, vi, total = sample_count, count = total, cur_ofs = 0; - int* sidx = 0; - int* co = 0; - - cv::AutoBuffer inn_buf(sample_count*(2*sizeof(int) + sizeof(float))); - if( _subsample_idx ) - { - CV_CALL( subsample_idx = cvPreprocessIndexArray( _subsample_idx, sample_count )); - sidx = subsample_idx->data.i; - CV_CALL( subsample_co = cvCreateMat( 1, sample_count*2, CV_32SC1 )); - co = subsample_co->data.i; - cvZero( subsample_co ); - count = subsample_idx->cols + subsample_idx->rows - 1; - for( i = 0; i < count; i++ ) - co[sidx[i]*2]++; - for( i = 0; i < total; i++ ) - { - int count_i = co[i*2]; - if( count_i ) - { - co[i*2+1] = cur_ofs*var_count; - cur_ofs += count_i; - } - } - } - - if( missing ) - memset( missing, 1, count*var_count ); - - for( vi = 0; vi < var_count; vi++ ) - { - int ci = get_var_type(vi); - if( ci >= 0 ) // categorical - { - float* dst = values + vi; - uchar* m = missing ? missing + vi : 0; - const int* src = get_cat_var_data(data_root, vi, (int*)(uchar*)inn_buf); - - for( i = 0; i < count; i++, dst += var_count ) - { - int idx = sidx ? sidx[i] : i; - int val = src[idx]; - *dst = (float)val; - if( m ) - { - *m = (!is_buf_16u && val < 0) || (is_buf_16u && (val == 65535)); - m += var_count; - } - } - } - else // ordered - { - float* dst = values + vi; - uchar* m = missing ? missing + vi : 0; - int count1 = data_root->get_num_valid(vi); - float *src_val_buf = (float*)(uchar*)inn_buf; - int* src_idx_buf = (int*)(src_val_buf + sample_count); - int* sample_indices_buf = src_idx_buf + sample_count; - const float *src_val = 0; - const int* src_idx = 0; - get_ord_var_data(data_root, vi, src_val_buf, src_idx_buf, &src_val, &src_idx, sample_indices_buf); - - for( i = 0; i < count1; i++ ) - { - int idx = src_idx[i]; - int count_i = 1; - if( co ) - { - count_i = co[idx*2]; - cur_ofs = co[idx*2+1]; - } - else - cur_ofs = idx*var_count; - if( count_i ) - { - float val = src_val[i]; - for( ; count_i > 0; count_i--, cur_ofs += var_count ) - { - dst[cur_ofs] = val; - if( m ) - m[cur_ofs] = 0; - } - } - } - } - } - - // copy responses - if( _responses ) - { - if( is_classifier ) - { - const int* src = get_class_labels(data_root, (int*)(uchar*)inn_buf); - for( i = 0; i < count; i++ ) - { - int idx = sidx ? sidx[i] : i; - int val = get_class_idx ? src[idx] : - cat_map->data.i[cat_ofs->data.i[cat_var_count]+src[idx]]; - _responses[i] = (float)val; - } - } - else - { - float* val_buf = (float*)(uchar*)inn_buf; - int* sample_idx_buf = (int*)(val_buf + sample_count); - const float* _values = get_ord_responses(data_root, val_buf, sample_idx_buf); - for( i = 0; i < count; i++ ) - { - int idx = sidx ? sidx[i] : i; - _responses[i] = _values[idx]; - } - } - } - - __END__; - - cvReleaseMat( &subsample_idx ); - cvReleaseMat( &subsample_co ); -} - - -CvDTreeNode* CvDTreeTrainData::new_node( CvDTreeNode* parent, int count, - int storage_idx, int offset ) -{ - CvDTreeNode* node = (CvDTreeNode*)cvSetNew( node_heap ); - - node->sample_count = count; - node->depth = parent ? parent->depth + 1 : 0; - node->parent = parent; - node->left = node->right = 0; - node->split = 0; - node->value = 0; - node->class_idx = 0; - node->maxlr = 0.; - - node->buf_idx = storage_idx; - node->offset = offset; - if( nv_heap ) - node->num_valid = (int*)cvSetNew( nv_heap ); - else - node->num_valid = 0; - node->alpha = node->node_risk = node->tree_risk = node->tree_error = 0.; - node->complexity = 0; - - if( params.cv_folds > 0 && cv_heap ) - { - int cv_n = params.cv_folds; - node->Tn = INT_MAX; - node->cv_Tn = (int*)cvSetNew( cv_heap ); - node->cv_node_risk = (double*)cvAlignPtr(node->cv_Tn + cv_n, sizeof(double)); - node->cv_node_error = node->cv_node_risk + cv_n; - } - else - { - node->Tn = 0; - node->cv_Tn = 0; - node->cv_node_risk = 0; - node->cv_node_error = 0; - } - - return node; -} - - -CvDTreeSplit* CvDTreeTrainData::new_split_ord( int vi, float cmp_val, - int split_point, int inversed, float quality ) -{ - CvDTreeSplit* split = (CvDTreeSplit*)cvSetNew( split_heap ); - split->var_idx = vi; - split->condensed_idx = INT_MIN; - split->ord.c = cmp_val; - split->ord.split_point = split_point; - split->inversed = inversed; - split->quality = quality; - split->next = 0; - - return split; -} - - -CvDTreeSplit* CvDTreeTrainData::new_split_cat( int vi, float quality ) -{ - CvDTreeSplit* split = (CvDTreeSplit*)cvSetNew( split_heap ); - int i, n = (max_c_count + 31)/32; - - split->var_idx = vi; - split->condensed_idx = INT_MIN; - split->inversed = 0; - split->quality = quality; - for( i = 0; i < n; i++ ) - split->subset[i] = 0; - split->next = 0; - - return split; -} - - -void CvDTreeTrainData::free_node( CvDTreeNode* node ) -{ - CvDTreeSplit* split = node->split; - free_node_data( node ); - while( split ) - { - CvDTreeSplit* next = split->next; - cvSetRemoveByPtr( split_heap, split ); - split = next; - } - node->split = 0; - cvSetRemoveByPtr( node_heap, node ); -} - - -void CvDTreeTrainData::free_node_data( CvDTreeNode* node ) -{ - if( node->num_valid ) - { - cvSetRemoveByPtr( nv_heap, node->num_valid ); - node->num_valid = 0; - } - // do not free cv_* fields, as all the cross-validation related data is released at once. -} - - -void CvDTreeTrainData::free_train_data() -{ - cvReleaseMat( &counts ); - cvReleaseMat( &buf ); - cvReleaseMat( &direction ); - cvReleaseMat( &split_buf ); - cvReleaseMemStorage( &temp_storage ); - cvReleaseMat( &responses_copy ); - cv_heap = nv_heap = 0; -} - - -void CvDTreeTrainData::clear() -{ - free_train_data(); - - cvReleaseMemStorage( &tree_storage ); - - cvReleaseMat( &var_idx ); - cvReleaseMat( &var_type ); - cvReleaseMat( &cat_count ); - cvReleaseMat( &cat_ofs ); - cvReleaseMat( &cat_map ); - cvReleaseMat( &priors ); - cvReleaseMat( &priors_mult ); - - node_heap = split_heap = 0; - - sample_count = var_all = var_count = max_c_count = ord_var_count = cat_var_count = 0; - have_labels = have_priors = is_classifier = false; - - buf_count = buf_size = 0; - shared = false; - - data_root = 0; - - rng = &cv::theRNG(); -} - - -int CvDTreeTrainData::get_num_classes() const -{ - return is_classifier ? cat_count->data.i[cat_var_count] : 0; -} - - -int CvDTreeTrainData::get_var_type(int vi) const -{ - return var_type->data.i[vi]; -} - -void CvDTreeTrainData::get_ord_var_data( CvDTreeNode* n, int vi, float* ord_values_buf, int* sorted_indices_buf, - const float** ord_values, const int** sorted_indices, int* sample_indices_buf ) -{ - int vidx = var_idx ? var_idx->data.i[vi] : vi; - int node_sample_count = n->sample_count; - int td_step = train_data->step/CV_ELEM_SIZE(train_data->type); - - const int* sample_indices = get_sample_indices(n, sample_indices_buf); - - if( !is_buf_16u ) - *sorted_indices = buf->data.i + n->buf_idx*get_length_subbuf() + - vi*sample_count + n->offset; - else { - const unsigned short* short_indices = (const unsigned short*)(buf->data.s + n->buf_idx*get_length_subbuf() + - vi*sample_count + n->offset ); - for( int i = 0; i < node_sample_count; i++ ) - sorted_indices_buf[i] = short_indices[i]; - *sorted_indices = sorted_indices_buf; - } - - if( tflag == CV_ROW_SAMPLE ) - { - for( int i = 0; i < node_sample_count && - ((((*sorted_indices)[i] >= 0) && !is_buf_16u) || (((*sorted_indices)[i] != 65535) && is_buf_16u)); i++ ) - { - int idx = (*sorted_indices)[i]; - idx = sample_indices[idx]; - ord_values_buf[i] = *(train_data->data.fl + idx * td_step + vidx); - } - } - else - for( int i = 0; i < node_sample_count && - ((((*sorted_indices)[i] >= 0) && !is_buf_16u) || (((*sorted_indices)[i] != 65535) && is_buf_16u)); i++ ) - { - int idx = (*sorted_indices)[i]; - idx = sample_indices[idx]; - ord_values_buf[i] = *(train_data->data.fl + vidx* td_step + idx); - } - - *ord_values = ord_values_buf; -} - - -const int* CvDTreeTrainData::get_class_labels( CvDTreeNode* n, int* labels_buf ) -{ - if (is_classifier) - return get_cat_var_data( n, var_count, labels_buf); - return 0; -} - -const int* CvDTreeTrainData::get_sample_indices( CvDTreeNode* n, int* indices_buf ) -{ - return get_cat_var_data( n, get_work_var_count(), indices_buf ); -} - -const float* CvDTreeTrainData::get_ord_responses( CvDTreeNode* n, float* values_buf, int*sample_indices_buf ) -{ - int _sample_count = n->sample_count; - int r_step = CV_IS_MAT_CONT(responses->type) ? 1 : responses->step/CV_ELEM_SIZE(responses->type); - const int* indices = get_sample_indices(n, sample_indices_buf); - - for( int i = 0; i < _sample_count && - (((indices[i] >= 0) && !is_buf_16u) || ((indices[i] != 65535) && is_buf_16u)); i++ ) - { - int idx = indices[i]; - values_buf[i] = *(responses->data.fl + idx * r_step); - } - - return values_buf; -} - - -const int* CvDTreeTrainData::get_cv_labels( CvDTreeNode* n, int* labels_buf ) -{ - if (have_labels) - return get_cat_var_data( n, get_work_var_count()- 1, labels_buf); - return 0; -} - - -const int* CvDTreeTrainData::get_cat_var_data( CvDTreeNode* n, int vi, int* cat_values_buf) -{ - const int* cat_values = 0; - if( !is_buf_16u ) - cat_values = buf->data.i + n->buf_idx*get_length_subbuf() + - vi*sample_count + n->offset; - else { - const unsigned short* short_values = (const unsigned short*)(buf->data.s + n->buf_idx*get_length_subbuf() + - vi*sample_count + n->offset); - for( int i = 0; i < n->sample_count; i++ ) - cat_values_buf[i] = short_values[i]; - cat_values = cat_values_buf; - } - return cat_values; -} - - -int CvDTreeTrainData::get_child_buf_idx( CvDTreeNode* n ) -{ - int idx = n->buf_idx + 1; - if( idx >= buf_count ) - idx = shared ? 1 : 0; - return idx; -} - - -void CvDTreeTrainData::write_params( CvFileStorage* fs ) const -{ - CV_FUNCNAME( "CvDTreeTrainData::write_params" ); - - __BEGIN__; - - int vi, vcount = var_count; - - cvWriteInt( fs, "is_classifier", is_classifier ? 1 : 0 ); - cvWriteInt( fs, "var_all", var_all ); - cvWriteInt( fs, "var_count", var_count ); - cvWriteInt( fs, "ord_var_count", ord_var_count ); - cvWriteInt( fs, "cat_var_count", cat_var_count ); - - cvStartWriteStruct( fs, "training_params", CV_NODE_MAP ); - cvWriteInt( fs, "use_surrogates", params.use_surrogates ? 1 : 0 ); - - if( is_classifier ) - { - cvWriteInt( fs, "max_categories", params.max_categories ); - } - else - { - cvWriteReal( fs, "regression_accuracy", params.regression_accuracy ); - } - - cvWriteInt( fs, "max_depth", params.max_depth ); - cvWriteInt( fs, "min_sample_count", params.min_sample_count ); - cvWriteInt( fs, "cross_validation_folds", params.cv_folds ); - - if( params.cv_folds > 1 ) - { - cvWriteInt( fs, "use_1se_rule", params.use_1se_rule ? 1 : 0 ); - cvWriteInt( fs, "truncate_pruned_tree", params.truncate_pruned_tree ? 1 : 0 ); - } - - if( priors ) - cvWrite( fs, "priors", priors ); - - cvEndWriteStruct( fs ); - - if( var_idx ) - cvWrite( fs, "var_idx", var_idx ); - - cvStartWriteStruct( fs, "var_type", CV_NODE_SEQ+CV_NODE_FLOW ); - - for( vi = 0; vi < vcount; vi++ ) - cvWriteInt( fs, 0, var_type->data.i[vi] >= 0 ); - - cvEndWriteStruct( fs ); - - if( cat_count && (cat_var_count > 0 || is_classifier) ) - { - CV_ASSERT( cat_count != 0 ); - cvWrite( fs, "cat_count", cat_count ); - cvWrite( fs, "cat_map", cat_map ); - } - - __END__; -} - - -void CvDTreeTrainData::read_params( CvFileStorage* fs, CvFileNode* node ) -{ - CV_FUNCNAME( "CvDTreeTrainData::read_params" ); - - __BEGIN__; - - CvFileNode *tparams_node, *vartype_node; - CvSeqReader reader; - int vi, max_split_size, tree_block_size; - - is_classifier = (cvReadIntByName( fs, node, "is_classifier" ) != 0); - var_all = cvReadIntByName( fs, node, "var_all" ); - var_count = cvReadIntByName( fs, node, "var_count", var_all ); - cat_var_count = cvReadIntByName( fs, node, "cat_var_count" ); - ord_var_count = cvReadIntByName( fs, node, "ord_var_count" ); - - tparams_node = cvGetFileNodeByName( fs, node, "training_params" ); - - if( tparams_node ) // training parameters are not necessary - { - params.use_surrogates = cvReadIntByName( fs, tparams_node, "use_surrogates", 1 ) != 0; - - if( is_classifier ) - { - params.max_categories = cvReadIntByName( fs, tparams_node, "max_categories" ); - } - else - { - params.regression_accuracy = - (float)cvReadRealByName( fs, tparams_node, "regression_accuracy" ); - } - - params.max_depth = cvReadIntByName( fs, tparams_node, "max_depth" ); - params.min_sample_count = cvReadIntByName( fs, tparams_node, "min_sample_count" ); - params.cv_folds = cvReadIntByName( fs, tparams_node, "cross_validation_folds" ); - - if( params.cv_folds > 1 ) - { - params.use_1se_rule = cvReadIntByName( fs, tparams_node, "use_1se_rule" ) != 0; - params.truncate_pruned_tree = - cvReadIntByName( fs, tparams_node, "truncate_pruned_tree" ) != 0; - } - - priors = (CvMat*)cvReadByName( fs, tparams_node, "priors" ); - if( priors ) - { - if( !CV_IS_MAT(priors) ) - CV_ERROR( CV_StsParseError, "priors must stored as a matrix" ); - priors_mult = cvCloneMat( priors ); - } - } - - CV_CALL( var_idx = (CvMat*)cvReadByName( fs, node, "var_idx" )); - if( var_idx ) - { - if( !CV_IS_MAT(var_idx) || - (var_idx->cols != 1 && var_idx->rows != 1) || - var_idx->cols + var_idx->rows - 1 != var_count || - CV_MAT_TYPE(var_idx->type) != CV_32SC1 ) - CV_ERROR( CV_StsParseError, - "var_idx (if exist) must be valid 1d integer vector containing elements" ); - - for( vi = 0; vi < var_count; vi++ ) - if( (unsigned)var_idx->data.i[vi] >= (unsigned)var_all ) - CV_ERROR( CV_StsOutOfRange, "some of var_idx elements are out of range" ); - } - - ////// read var type - CV_CALL( var_type = cvCreateMat( 1, var_count + 2, CV_32SC1 )); - - cat_var_count = 0; - ord_var_count = -1; - vartype_node = cvGetFileNodeByName( fs, node, "var_type" ); - - if( vartype_node && CV_NODE_TYPE(vartype_node->tag) == CV_NODE_INT && var_count == 1 ) - var_type->data.i[0] = vartype_node->data.i ? cat_var_count++ : ord_var_count--; - else - { - if( !vartype_node || CV_NODE_TYPE(vartype_node->tag) != CV_NODE_SEQ || - vartype_node->data.seq->total != var_count ) - CV_ERROR( CV_StsParseError, "var_type must exist and be a sequence of 0's and 1's" ); - - cvStartReadSeq( vartype_node->data.seq, &reader ); - - for( vi = 0; vi < var_count; vi++ ) - { - CvFileNode* n = (CvFileNode*)reader.ptr; - if( CV_NODE_TYPE(n->tag) != CV_NODE_INT || (n->data.i & ~1) ) - CV_ERROR( CV_StsParseError, "var_type must exist and be a sequence of 0's and 1's" ); - var_type->data.i[vi] = n->data.i ? cat_var_count++ : ord_var_count--; - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - } - var_type->data.i[var_count] = cat_var_count; - - ord_var_count = ~ord_var_count; - if( cat_var_count != cat_var_count || ord_var_count != ord_var_count ) - CV_ERROR( CV_StsParseError, "var_type is inconsistent with cat_var_count and ord_var_count" ); - ////// - - if( cat_var_count > 0 || is_classifier ) - { - int ccount, total_c_count = 0; - CV_CALL( cat_count = (CvMat*)cvReadByName( fs, node, "cat_count" )); - CV_CALL( cat_map = (CvMat*)cvReadByName( fs, node, "cat_map" )); - - if( !CV_IS_MAT(cat_count) || !CV_IS_MAT(cat_map) || - (cat_count->cols != 1 && cat_count->rows != 1) || - CV_MAT_TYPE(cat_count->type) != CV_32SC1 || - cat_count->cols + cat_count->rows - 1 != cat_var_count + is_classifier || - (cat_map->cols != 1 && cat_map->rows != 1) || - CV_MAT_TYPE(cat_map->type) != CV_32SC1 ) - CV_ERROR( CV_StsParseError, - "Both cat_count and cat_map must exist and be valid 1d integer vectors of an appropriate size" ); - - ccount = cat_var_count + is_classifier; - - CV_CALL( cat_ofs = cvCreateMat( 1, ccount + 1, CV_32SC1 )); - cat_ofs->data.i[0] = 0; - max_c_count = 1; - - for( vi = 0; vi < ccount; vi++ ) - { - int val = cat_count->data.i[vi]; - if( val <= 0 ) - CV_ERROR( CV_StsOutOfRange, "some of cat_count elements are out of range" ); - max_c_count = MAX( max_c_count, val ); - cat_ofs->data.i[vi+1] = total_c_count += val; - } - - if( cat_map->cols + cat_map->rows - 1 != total_c_count ) - CV_ERROR( CV_StsBadSize, - "cat_map vector length is not equal to the total number of categories in all categorical vars" ); - } - - max_split_size = cvAlign(sizeof(CvDTreeSplit) + - (MAX(0,max_c_count - 33)/32)*sizeof(int),sizeof(void*)); - - tree_block_size = MAX((int)sizeof(CvDTreeNode)*8, max_split_size); - tree_block_size = MAX(tree_block_size + block_size_delta, min_block_size); - CV_CALL( tree_storage = cvCreateMemStorage( tree_block_size )); - CV_CALL( node_heap = cvCreateSet( 0, sizeof(node_heap[0]), - sizeof(CvDTreeNode), tree_storage )); - CV_CALL( split_heap = cvCreateSet( 0, sizeof(split_heap[0]), - max_split_size, tree_storage )); - - __END__; -} - -/////////////////////// Decision Tree ///////////////////////// -CvDTreeParams::CvDTreeParams() : max_categories(10), max_depth(INT_MAX), min_sample_count(10), - cv_folds(10), use_surrogates(true), use_1se_rule(true), - truncate_pruned_tree(true), regression_accuracy(0.01f), priors(0) -{} - -CvDTreeParams::CvDTreeParams( int _max_depth, int _min_sample_count, - float _regression_accuracy, bool _use_surrogates, - int _max_categories, int _cv_folds, - bool _use_1se_rule, bool _truncate_pruned_tree, - const float* _priors ) : - max_categories(_max_categories), max_depth(_max_depth), - min_sample_count(_min_sample_count), cv_folds (_cv_folds), - use_surrogates(_use_surrogates), use_1se_rule(_use_1se_rule), - truncate_pruned_tree(_truncate_pruned_tree), - regression_accuracy(_regression_accuracy), - priors(_priors) -{} - -CvDTree::CvDTree() -{ - data = 0; - var_importance = 0; - default_model_name = "my_tree"; - - clear(); -} - - -void CvDTree::clear() -{ - cvReleaseMat( &var_importance ); - if( data ) - { - if( !data->shared ) - delete data; - else - free_tree(); - data = 0; - } - root = 0; - pruned_tree_idx = -1; -} - - -CvDTree::~CvDTree() -{ - clear(); -} - - -const CvDTreeNode* CvDTree::get_root() const -{ - return root; -} - - -int CvDTree::get_pruned_tree_idx() const -{ - return pruned_tree_idx; -} - - -CvDTreeTrainData* CvDTree::get_data() -{ - return data; -} - - -bool CvDTree::train( const CvMat* _train_data, int _tflag, - const CvMat* _responses, const CvMat* _var_idx, - const CvMat* _sample_idx, const CvMat* _var_type, - const CvMat* _missing_mask, CvDTreeParams _params ) -{ - bool result = false; - - CV_FUNCNAME( "CvDTree::train" ); - - __BEGIN__; - - clear(); - data = new CvDTreeTrainData( _train_data, _tflag, _responses, - _var_idx, _sample_idx, _var_type, - _missing_mask, _params, false ); - CV_CALL( result = do_train(0) ); - - __END__; - - return result; -} - -bool CvDTree::train( const Mat& _train_data, int _tflag, - const Mat& _responses, const Mat& _var_idx, - const Mat& _sample_idx, const Mat& _var_type, - const Mat& _missing_mask, CvDTreeParams _params ) -{ - CvMat tdata = _train_data, responses = _responses, vidx=_var_idx, - sidx=_sample_idx, vtype=_var_type, mmask=_missing_mask; - return train(&tdata, _tflag, &responses, vidx.data.ptr ? &vidx : 0, sidx.data.ptr ? &sidx : 0, - vtype.data.ptr ? &vtype : 0, mmask.data.ptr ? &mmask : 0, _params); -} - - -bool CvDTree::train( CvMLData* _data, CvDTreeParams _params ) -{ - bool result = false; - - CV_FUNCNAME( "CvDTree::train" ); - - __BEGIN__; - - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* var_types = _data->get_var_types(); - const CvMat* train_sidx = _data->get_train_sample_idx(); - const CvMat* var_idx = _data->get_var_idx(); - - CV_CALL( result = train( values, CV_ROW_SAMPLE, response, var_idx, - train_sidx, var_types, missing, _params ) ); - - __END__; - - return result; -} - -bool CvDTree::train( CvDTreeTrainData* _data, const CvMat* _subsample_idx ) -{ - bool result = false; - - CV_FUNCNAME( "CvDTree::train" ); - - __BEGIN__; - - clear(); - data = _data; - data->shared = true; - CV_CALL( result = do_train(_subsample_idx)); - - __END__; - - return result; -} - - -bool CvDTree::do_train( const CvMat* _subsample_idx ) -{ - bool result = false; - - CV_FUNCNAME( "CvDTree::do_train" ); - - __BEGIN__; - - root = data->subsample_data( _subsample_idx ); - - CV_CALL( try_split_node(root)); - - if( root->split ) - { - CV_Assert( root->left ); - CV_Assert( root->right ); - - if( data->params.cv_folds > 0 ) - CV_CALL( prune_cv() ); - - if( !data->shared ) - data->free_train_data(); - - result = true; - } - - __END__; - - return result; -} - - -void CvDTree::try_split_node( CvDTreeNode* node ) -{ - CvDTreeSplit* best_split = 0; - int i, n = node->sample_count, vi; - bool can_split = true; - double quality_scale; - - calc_node_value( node ); - - if( node->sample_count <= data->params.min_sample_count || - node->depth >= data->params.max_depth ) - can_split = false; - - if( can_split && data->is_classifier ) - { - // check if we have a "pure" node, - // we assume that cls_count is filled by calc_node_value() - int* cls_count = data->counts->data.i; - int nz = 0, m = data->get_num_classes(); - for( i = 0; i < m; i++ ) - nz += cls_count[i] != 0; - if( nz == 1 ) // there is only one class - can_split = false; - } - else if( can_split ) - { - if( sqrt(node->node_risk)/n < data->params.regression_accuracy ) - can_split = false; - } - - if( can_split ) - { - best_split = find_best_split(node); - // TODO: check the split quality ... - node->split = best_split; - } - if( !can_split || !best_split ) - { - data->free_node_data(node); - return; - } - - quality_scale = calc_node_dir( node ); - if( data->params.use_surrogates ) - { - // find all the surrogate splits - // and sort them by their similarity to the primary one - for( vi = 0; vi < data->var_count; vi++ ) - { - CvDTreeSplit* split; - int ci = data->get_var_type(vi); - - if( vi == best_split->var_idx ) - continue; - - if( ci >= 0 ) - split = find_surrogate_split_cat( node, vi ); - else - split = find_surrogate_split_ord( node, vi ); - - if( split ) - { - // insert the split - CvDTreeSplit* prev_split = node->split; - split->quality = (float)(split->quality*quality_scale); - - while( prev_split->next && - prev_split->next->quality > split->quality ) - prev_split = prev_split->next; - split->next = prev_split->next; - prev_split->next = split; - } - } - } - split_node_data( node ); - try_split_node( node->left ); - try_split_node( node->right ); -} - - -// calculate direction (left(-1),right(1),missing(0)) -// for each sample using the best split -// the function returns scale coefficients for surrogate split quality factors. -// the scale is applied to normalize surrogate split quality relatively to the -// best (primary) split quality. That is, if a surrogate split is absolutely -// identical to the primary split, its quality will be set to the maximum value = -// quality of the primary split; otherwise, it will be lower. -// besides, the function compute node->maxlr, -// minimum possible quality (w/o considering the above mentioned scale) -// for a surrogate split. Surrogate splits with quality less than node->maxlr -// are not discarded. -double CvDTree::calc_node_dir( CvDTreeNode* node ) -{ - char* dir = (char*)data->direction->data.ptr; - int i, n = node->sample_count, vi = node->split->var_idx; - double L, R; - - assert( !node->split->inversed ); - - if( data->get_var_type(vi) >= 0 ) // split on categorical var - { - cv::AutoBuffer inn_buf(n*(!data->have_priors ? 1 : 2)); - int* labels_buf = (int*)inn_buf; - const int* labels = data->get_cat_var_data( node, vi, labels_buf ); - const int* subset = node->split->subset; - if( !data->have_priors ) - { - int sum = 0, sum_abs = 0; - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - int d = ( ((idx >= 0)&&(!data->is_buf_16u)) || ((idx != 65535)&&(data->is_buf_16u)) ) ? - CV_DTREE_CAT_DIR(idx,subset) : 0; - sum += d; sum_abs += d & 1; - dir[i] = (char)d; - } - - R = (sum_abs + sum) >> 1; - L = (sum_abs - sum) >> 1; - } - else - { - const double* priors = data->priors_mult->data.db; - double sum = 0, sum_abs = 0; - int* responses_buf = labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - double w = priors[responses[i]]; - int d = idx >= 0 ? CV_DTREE_CAT_DIR(idx,subset) : 0; - sum += d*w; sum_abs += (d & 1)*w; - dir[i] = (char)d; - } - - R = (sum_abs + sum) * 0.5; - L = (sum_abs - sum) * 0.5; - } - } - else // split on ordered var - { - int split_point = node->split->ord.split_point; - int n1 = node->get_num_valid(vi); - cv::AutoBuffer inn_buf(n*(sizeof(int)*(data->have_priors ? 3 : 2) + sizeof(float))); - float* val_buf = (float*)(uchar*)inn_buf; - int* sorted_buf = (int*)(val_buf + n); - int* sample_idx_buf = sorted_buf + n; - const float* val = 0; - const int* sorted = 0; - data->get_ord_var_data( node, vi, val_buf, sorted_buf, &val, &sorted, sample_idx_buf); - - assert( 0 <= split_point && split_point < n1-1 ); - - if( !data->have_priors ) - { - for( i = 0; i <= split_point; i++ ) - dir[sorted[i]] = (char)-1; - for( ; i < n1; i++ ) - dir[sorted[i]] = (char)1; - for( ; i < n; i++ ) - dir[sorted[i]] = (char)0; - - L = split_point-1; - R = n1 - split_point + 1; - } - else - { - const double* priors = data->priors_mult->data.db; - int* responses_buf = sample_idx_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - L = R = 0; - - for( i = 0; i <= split_point; i++ ) - { - int idx = sorted[i]; - double w = priors[responses[idx]]; - dir[idx] = (char)-1; - L += w; - } - - for( ; i < n1; i++ ) - { - int idx = sorted[i]; - double w = priors[responses[idx]]; - dir[idx] = (char)1; - R += w; - } - - for( ; i < n; i++ ) - dir[sorted[i]] = (char)0; - } - } - node->maxlr = MAX( L, R ); - return node->split->quality/(L + R); -} - - -namespace cv -{ - -template<> CV_EXPORTS void Ptr::delete_obj() -{ - fastFree(obj); -} - -DTreeBestSplitFinder::DTreeBestSplitFinder( CvDTree* _tree, CvDTreeNode* _node) -{ - tree = _tree; - node = _node; - splitSize = tree->get_data()->split_heap->elem_size; - - bestSplit = (CvDTreeSplit*)fastMalloc(splitSize); - memset((CvDTreeSplit*)bestSplit, 0, splitSize); - bestSplit->quality = -1; - bestSplit->condensed_idx = INT_MIN; - split = (CvDTreeSplit*)fastMalloc(splitSize); - memset((CvDTreeSplit*)split, 0, splitSize); - //haveSplit = false; -} - -DTreeBestSplitFinder::DTreeBestSplitFinder( const DTreeBestSplitFinder& finder, Split ) -{ - tree = finder.tree; - node = finder.node; - splitSize = tree->get_data()->split_heap->elem_size; - - bestSplit = (CvDTreeSplit*)fastMalloc(splitSize); - memcpy((CvDTreeSplit*)(bestSplit), (const CvDTreeSplit*)finder.bestSplit, splitSize); - split = (CvDTreeSplit*)fastMalloc(splitSize); - memset((CvDTreeSplit*)split, 0, splitSize); -} - -void DTreeBestSplitFinder::operator()(const BlockedRange& range) -{ - int vi, vi1 = range.begin(), vi2 = range.end(); - int n = node->sample_count; - CvDTreeTrainData* data = tree->get_data(); - AutoBuffer inn_buf(2*n*(sizeof(int) + sizeof(float))); - - for( vi = vi1; vi < vi2; vi++ ) - { - CvDTreeSplit *res; - int ci = data->get_var_type(vi); - if( node->get_num_valid(vi) <= 1 ) - continue; - - if( data->is_classifier ) - { - if( ci >= 0 ) - res = tree->find_split_cat_class( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - else - res = tree->find_split_ord_class( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - } - else - { - if( ci >= 0 ) - res = tree->find_split_cat_reg( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - else - res = tree->find_split_ord_reg( node, vi, bestSplit->quality, split, (uchar*)inn_buf ); - } - - if( res && bestSplit->quality < split->quality ) - memcpy( (CvDTreeSplit*)bestSplit, (CvDTreeSplit*)split, splitSize ); - } -} - -void DTreeBestSplitFinder::join( DTreeBestSplitFinder& rhs ) -{ - if( bestSplit->quality < rhs.bestSplit->quality ) - memcpy( (CvDTreeSplit*)bestSplit, (CvDTreeSplit*)rhs.bestSplit, splitSize ); -} -} - - -CvDTreeSplit* CvDTree::find_best_split( CvDTreeNode* node ) -{ - DTreeBestSplitFinder finder( this, node ); - - cv::parallel_reduce(cv::BlockedRange(0, data->var_count), finder); - - CvDTreeSplit *bestSplit = 0; - if( finder.bestSplit->quality > 0 ) - { - bestSplit = data->new_split_cat( 0, -1.0f ); - memcpy( bestSplit, finder.bestSplit, finder.splitSize ); - } - - return bestSplit; -} - -CvDTreeSplit* CvDTree::find_split_ord_class( CvDTreeNode* node, int vi, - float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - int n = node->sample_count; - int n1 = node->get_num_valid(vi); - int m = data->get_num_classes(); - - int base_size = 2*m*sizeof(int); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*(3*sizeof(int)+sizeof(float))); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - float* values_buf = (float*)ext_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, - &sorted_indices, sample_indices_buf ); - int* responses_buf = sample_indices_buf + n; - const int* responses = data->get_class_labels( node, responses_buf ); - - const int* rc0 = data->counts->data.i; - int* lc = (int*)base_buf; - int* rc = lc + m; - int i, best_i = -1; - double lsum2 = 0, rsum2 = 0, best_val = init_quality; - const double* priors = data->have_priors ? data->priors_mult->data.db : 0; - - // init arrays of class instance counters on both sides of the split - for( i = 0; i < m; i++ ) - { - lc[i] = 0; - rc[i] = rc0[i]; - } - - // compensate for missing values - for( i = n1; i < n; i++ ) - { - rc[responses[sorted_indices[i]]]--; - } - - if( !priors ) - { - int L = 0, R = n1; - - for( i = 0; i < m; i++ ) - rsum2 += (double)rc[i]*rc[i]; - - for( i = 0; i < n1 - 1; i++ ) - { - int idx = responses[sorted_indices[i]]; - int lv, rv; - L++; R--; - lv = lc[idx]; rv = rc[idx]; - lsum2 += lv*2 + 1; - rsum2 -= rv*2 - 1; - lc[idx] = lv + 1; rc[idx] = rv - 1; - - if( values[i] + epsilon < values[i+1] ) - { - double val = (lsum2*R + rsum2*L)/((double)L*R); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - } - else - { - double L = 0, R = 0; - for( i = 0; i < m; i++ ) - { - double wv = rc[i]*priors[i]; - R += wv; - rsum2 += wv*wv; - } - - for( i = 0; i < n1 - 1; i++ ) - { - int idx = responses[sorted_indices[i]]; - int lv, rv; - double p = priors[idx], p2 = p*p; - L += p; R -= p; - lv = lc[idx]; rv = rc[idx]; - lsum2 += p2*(lv*2 + 1); - rsum2 -= p2*(rv*2 - 1); - lc[idx] = lv + 1; rc[idx] = rv - 1; - - if( values[i] + epsilon < values[i+1] ) - { - double val = (lsum2*R + rsum2*L)/((double)L*R); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - } - - CvDTreeSplit* split = 0; - if( best_i >= 0 ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (values[best_i] + values[best_i+1])*0.5f; - split->ord.split_point = best_i; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - - -void CvDTree::cluster_categories( const int* vectors, int n, int m, - int* csums, int k, int* labels ) -{ - // TODO: consider adding priors (class weights) and sample weights to the clustering algorithm - int iters = 0, max_iters = 100; - int i, j, idx; - cv::AutoBuffer buf(n + k); - double *v_weights = buf, *c_weights = buf + n; - bool modified = true; - RNG* r = data->rng; - - // assign labels randomly - for( i = 0; i < n; i++ ) - { - int sum = 0; - const int* v = vectors + i*m; - labels[i] = i < k ? i : r->uniform(0, k); - - // compute weight of each vector - for( j = 0; j < m; j++ ) - sum += v[j]; - v_weights[i] = sum ? 1./sum : 0.; - } - - for( i = 0; i < n; i++ ) - { - int i1 = (*r)(n); - int i2 = (*r)(n); - CV_SWAP( labels[i1], labels[i2], j ); - } - - for( iters = 0; iters <= max_iters; iters++ ) - { - // calculate csums - for( i = 0; i < k; i++ ) - { - for( j = 0; j < m; j++ ) - csums[i*m + j] = 0; - } - - for( i = 0; i < n; i++ ) - { - const int* v = vectors + i*m; - int* s = csums + labels[i]*m; - for( j = 0; j < m; j++ ) - s[j] += v[j]; - } - - // exit the loop here, when we have up-to-date csums - if( iters == max_iters || !modified ) - break; - - modified = false; - - // calculate weight of each cluster - for( i = 0; i < k; i++ ) - { - const int* s = csums + i*m; - int sum = 0; - for( j = 0; j < m; j++ ) - sum += s[j]; - c_weights[i] = sum ? 1./sum : 0; - } - - // now for each vector determine the closest cluster - for( i = 0; i < n; i++ ) - { - const int* v = vectors + i*m; - double alpha = v_weights[i]; - double min_dist2 = DBL_MAX; - int min_idx = -1; - - for( idx = 0; idx < k; idx++ ) - { - const int* s = csums + idx*m; - double dist2 = 0., beta = c_weights[idx]; - for( j = 0; j < m; j++ ) - { - double t = v[j]*alpha - s[j]*beta; - dist2 += t*t; - } - if( min_dist2 > dist2 ) - { - min_dist2 = dist2; - min_idx = idx; - } - } - - if( min_idx != labels[i] ) - modified = true; - labels[i] = min_idx; - } - } -} - - -CvDTreeSplit* CvDTree::find_split_cat_class( CvDTreeNode* node, int vi, float init_quality, - CvDTreeSplit* _split, uchar* _ext_buf ) -{ - int ci = data->get_var_type(vi); - int n = node->sample_count; - int m = data->get_num_classes(); - int _mi = data->cat_count->data.i[ci], mi = _mi; - - int base_size = m*(3 + mi)*sizeof(int) + (mi+1)*sizeof(double); - if( m > 2 && mi > data->params.max_categories ) - base_size += (m*min(data->params.max_categories, n) + mi)*sizeof(int); - else - base_size += mi*sizeof(int*); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + 2*n*sizeof(int)); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - - int* lc = (int*)base_buf; - int* rc = lc + m; - int* _cjk = rc + m*2, *cjk = _cjk; - double* c_weights = (double*)alignPtr(cjk + m*mi, sizeof(double)); - - int* labels_buf = (int*)ext_buf; - const int* labels = data->get_cat_var_data(node, vi, labels_buf); - int* responses_buf = labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - - int* cluster_labels = 0; - int** int_ptr = 0; - int i, j, k, idx; - double L = 0, R = 0; - double best_val = init_quality; - int prevcode = 0, best_subset = -1, subset_i, subset_n, subtract = 0; - const double* priors = data->priors_mult->data.db; - - // init array of counters: - // c_{jk} - number of samples that have vi-th input variable = j and response = k. - for( j = -1; j < mi; j++ ) - for( k = 0; k < m; k++ ) - cjk[j*m + k] = 0; - - for( i = 0; i < n; i++ ) - { - j = ( labels[i] == 65535 && data->is_buf_16u) ? -1 : labels[i]; - k = responses[i]; - cjk[j*m + k]++; - } - - if( m > 2 ) - { - if( mi > data->params.max_categories ) - { - mi = MIN(data->params.max_categories, n); - cjk = (int*)(c_weights + _mi); - cluster_labels = cjk + m*mi; - cluster_categories( _cjk, _mi, m, cjk, mi, cluster_labels ); - } - subset_i = 1; - subset_n = 1 << mi; - } - else - { - assert( m == 2 ); - int_ptr = (int**)(c_weights + _mi); - for( j = 0; j < mi; j++ ) - int_ptr[j] = cjk + j*2 + 1; - icvSortIntPtr( int_ptr, mi, 0 ); - subset_i = 0; - subset_n = mi; - } - - for( k = 0; k < m; k++ ) - { - int sum = 0; - for( j = 0; j < mi; j++ ) - sum += cjk[j*m + k]; - rc[k] = sum; - lc[k] = 0; - } - - for( j = 0; j < mi; j++ ) - { - double sum = 0; - for( k = 0; k < m; k++ ) - sum += cjk[j*m + k]*priors[k]; - c_weights[j] = sum; - R += c_weights[j]; - } - - for( ; subset_i < subset_n; subset_i++ ) - { - double weight; - int* crow; - double lsum2 = 0, rsum2 = 0; - - if( m == 2 ) - idx = (int)(int_ptr[subset_i] - cjk)/2; - else - { - int graycode = (subset_i>>1)^subset_i; - int diff = graycode ^ prevcode; - - // determine index of the changed bit. - Cv32suf u; - idx = diff >= (1 << 16) ? 16 : 0; - u.f = (float)(((diff >> 16) | diff) & 65535); - idx += (u.i >> 23) - 127; - subtract = graycode < prevcode; - prevcode = graycode; - } - - crow = cjk + idx*m; - weight = c_weights[idx]; - if( weight < FLT_EPSILON ) - continue; - - if( !subtract ) - { - for( k = 0; k < m; k++ ) - { - int t = crow[k]; - int lval = lc[k] + t; - int rval = rc[k] - t; - double p = priors[k], p2 = p*p; - lsum2 += p2*lval*lval; - rsum2 += p2*rval*rval; - lc[k] = lval; rc[k] = rval; - } - L += weight; - R -= weight; - } - else - { - for( k = 0; k < m; k++ ) - { - int t = crow[k]; - int lval = lc[k] - t; - int rval = rc[k] + t; - double p = priors[k], p2 = p*p; - lsum2 += p2*lval*lval; - rsum2 += p2*rval*rval; - lc[k] = lval; rc[k] = rval; - } - L -= weight; - R += weight; - } - - if( L > FLT_EPSILON && R > FLT_EPSILON ) - { - double val = (lsum2*R + rsum2*L)/((double)L*R); - if( best_val < val ) - { - best_val = val; - best_subset = subset_i; - } - } - } - - CvDTreeSplit* split = 0; - if( best_subset >= 0 ) - { - split = _split ? _split : data->new_split_cat( 0, -1.0f ); - split->var_idx = vi; - split->quality = (float)best_val; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - if( m == 2 ) - { - for( i = 0; i <= best_subset; i++ ) - { - idx = (int)(int_ptr[i] - cjk) >> 1; - split->subset[idx >> 5] |= 1 << (idx & 31); - } - } - else - { - for( i = 0; i < _mi; i++ ) - { - idx = cluster_labels ? cluster_labels[i] : i; - if( best_subset & (1 << idx) ) - split->subset[i >> 5] |= 1 << (i & 31); - } - } - } - return split; -} - - -CvDTreeSplit* CvDTree::find_split_ord_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - int n = node->sample_count; - int n1 = node->get_num_valid(vi); - - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate(2*n*(sizeof(int) + sizeof(float))); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, &sorted_indices, sample_indices_buf ); - float* responses_buf = (float*)(sample_indices_buf + n); - const float* responses = data->get_ord_responses( node, responses_buf, sample_indices_buf ); - - int i, best_i = -1; - double best_val = init_quality, lsum = 0, rsum = node->value*n; - int L = 0, R = n1; - - // compensate for missing values - for( i = n1; i < n; i++ ) - rsum -= responses[sorted_indices[i]]; - - // find the optimal split - for( i = 0; i < n1 - 1; i++ ) - { - float t = responses[sorted_indices[i]]; - L++; R--; - lsum += t; - rsum -= t; - - if( values[i] + epsilon < values[i+1] ) - { - double val = (lsum*lsum*R + rsum*rsum*L)/((double)L*R); - if( best_val < val ) - { - best_val = val; - best_i = i; - } - } - } - - CvDTreeSplit* split = 0; - if( best_i >= 0 ) - { - split = _split ? _split : data->new_split_ord( 0, 0.0f, 0, 0, 0.0f ); - split->var_idx = vi; - split->ord.c = (values[best_i] + values[best_i+1])*0.5f; - split->ord.split_point = best_i; - split->inversed = 0; - split->quality = (float)best_val; - } - return split; -} - -CvDTreeSplit* CvDTree::find_split_cat_reg( CvDTreeNode* node, int vi, float init_quality, CvDTreeSplit* _split, uchar* _ext_buf ) -{ - int ci = data->get_var_type(vi); - int n = node->sample_count; - int mi = data->cat_count->data.i[ci]; - - int base_size = (mi+2)*sizeof(double) + (mi+1)*(sizeof(int) + sizeof(double*)); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*(2*sizeof(int) + sizeof(float))); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - int* labels_buf = (int*)ext_buf; - const int* labels = data->get_cat_var_data(node, vi, labels_buf); - float* responses_buf = (float*)(labels_buf + n); - int* sample_indices_buf = (int*)(responses_buf + n); - const float* responses = data->get_ord_responses(node, responses_buf, sample_indices_buf); - - double* sum = (double*)cv::alignPtr(base_buf,sizeof(double)) + 1; - int* counts = (int*)(sum + mi) + 1; - double** sum_ptr = (double**)(counts + mi); - int i, L = 0, R = 0; - double best_val = init_quality, lsum = 0, rsum = 0; - int best_subset = -1, subset_i; - - for( i = -1; i < mi; i++ ) - sum[i] = counts[i] = 0; - - // calculate sum response and weight of each category of the input var - for( i = 0; i < n; i++ ) - { - int idx = ( (labels[i] == 65535) && data->is_buf_16u ) ? -1 : labels[i]; - double s = sum[idx] + responses[i]; - int nc = counts[idx] + 1; - sum[idx] = s; - counts[idx] = nc; - } - - // calculate average response in each category - for( i = 0; i < mi; i++ ) - { - R += counts[i]; - rsum += sum[i]; - sum[i] /= MAX(counts[i],1); - sum_ptr[i] = sum + i; - } - - icvSortDblPtr( sum_ptr, mi, 0 ); - - // revert back to unnormalized sums - // (there should be a very little loss of accuracy) - for( i = 0; i < mi; i++ ) - sum[i] *= counts[i]; - - for( subset_i = 0; subset_i < mi-1; subset_i++ ) - { - int idx = (int)(sum_ptr[subset_i] - sum); - int ni = counts[idx]; - - if( ni ) - { - double s = sum[idx]; - lsum += s; L += ni; - rsum -= s; R -= ni; - - if( L && R ) - { - double val = (lsum*lsum*R + rsum*rsum*L)/((double)L*R); - if( best_val < val ) - { - best_val = val; - best_subset = subset_i; - } - } - } - } - - CvDTreeSplit* split = 0; - if( best_subset >= 0 ) - { - split = _split ? _split : data->new_split_cat( 0, -1.0f); - split->var_idx = vi; - split->quality = (float)best_val; - memset( split->subset, 0, (data->max_c_count + 31)/32 * sizeof(int)); - for( i = 0; i <= best_subset; i++ ) - { - int idx = (int)(sum_ptr[i] - sum); - split->subset[idx >> 5] |= 1 << (idx & 31); - } - } - return split; -} - -CvDTreeSplit* CvDTree::find_surrogate_split_ord( CvDTreeNode* node, int vi, uchar* _ext_buf ) -{ - const float epsilon = FLT_EPSILON*2; - const char* dir = (char*)data->direction->data.ptr; - int n = node->sample_count, n1 = node->get_num_valid(vi); - cv::AutoBuffer inn_buf; - if( !_ext_buf ) - inn_buf.allocate( n*(sizeof(int)*(data->have_priors ? 3 : 2) + sizeof(float)) ); - uchar* ext_buf = _ext_buf ? _ext_buf : (uchar*)inn_buf; - float* values_buf = (float*)ext_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, &sorted_indices, sample_indices_buf ); - // LL - number of samples that both the primary and the surrogate splits send to the left - // LR - ... primary split sends to the left and the surrogate split sends to the right - // RL - ... primary split sends to the right and the surrogate split sends to the left - // RR - ... both send to the right - int i, best_i = -1, best_inversed = 0; - double best_val; - - if( !data->have_priors ) - { - int LL = 0, RL = 0, LR, RR; - int worst_val = cvFloor(node->maxlr), _best_val = worst_val; - int sum = 0, sum_abs = 0; - - for( i = 0; i < n1; i++ ) - { - int d = dir[sorted_indices[i]]; - sum += d; sum_abs += d & 1; - } - - // sum_abs = R + L; sum = R - L - RR = (sum_abs + sum) >> 1; - LR = (sum_abs - sum) >> 1; - - // initially all the samples are sent to the right by the surrogate split, - // LR of them are sent to the left by primary split, and RR - to the right. - // now iteratively compute LL, LR, RL and RR for every possible surrogate split value. - for( i = 0; i < n1 - 1; i++ ) - { - int d = dir[sorted_indices[i]]; - - if( d < 0 ) - { - LL++; LR--; - if( LL + RR > _best_val && values[i] + epsilon < values[i+1] ) - { - best_val = LL + RR; - best_i = i; best_inversed = 0; - } - } - else if( d > 0 ) - { - RL++; RR--; - if( RL + LR > _best_val && values[i] + epsilon < values[i+1] ) - { - best_val = RL + LR; - best_i = i; best_inversed = 1; - } - } - } - best_val = _best_val; - } - else - { - double LL = 0, RL = 0, LR, RR; - double worst_val = node->maxlr; - double sum = 0, sum_abs = 0; - const double* priors = data->priors_mult->data.db; - int* responses_buf = sample_indices_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - best_val = worst_val; - - for( i = 0; i < n1; i++ ) - { - int idx = sorted_indices[i]; - double w = priors[responses[idx]]; - int d = dir[idx]; - sum += d*w; sum_abs += (d & 1)*w; - } - - // sum_abs = R + L; sum = R - L - RR = (sum_abs + sum)*0.5; - LR = (sum_abs - sum)*0.5; - - // initially all the samples are sent to the right by the surrogate split, - // LR of them are sent to the left by primary split, and RR - to the right. - // now iteratively compute LL, LR, RL and RR for every possible surrogate split value. - for( i = 0; i < n1 - 1; i++ ) - { - int idx = sorted_indices[i]; - double w = priors[responses[idx]]; - int d = dir[idx]; - - if( d < 0 ) - { - LL += w; LR -= w; - if( LL + RR > best_val && values[i] + epsilon < values[i+1] ) - { - best_val = LL + RR; - best_i = i; best_inversed = 0; - } - } - else if( d > 0 ) - { - RL += w; RR -= w; - if( RL + LR > best_val && values[i] + epsilon < values[i+1] ) - { - best_val = RL + LR; - best_i = i; best_inversed = 1; - } - } - } - } - return best_i >= 0 && best_val > node->maxlr ? data->new_split_ord( vi, - (values[best_i] + values[best_i+1])*0.5f, best_i, best_inversed, (float)best_val ) : 0; -} - - -CvDTreeSplit* CvDTree::find_surrogate_split_cat( CvDTreeNode* node, int vi, uchar* _ext_buf ) -{ - const char* dir = (char*)data->direction->data.ptr; - int n = node->sample_count; - int i, mi = data->cat_count->data.i[data->get_var_type(vi)], l_win = 0; - - int base_size = (2*(mi+1)+1)*sizeof(double) + (!data->have_priors ? 2*(mi+1)*sizeof(int) : 0); - cv::AutoBuffer inn_buf(base_size); - if( !_ext_buf ) - inn_buf.allocate(base_size + n*(sizeof(int) + (data->have_priors ? sizeof(int) : 0))); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = _ext_buf ? _ext_buf : base_buf + base_size; - - int* labels_buf = (int*)ext_buf; - const int* labels = data->get_cat_var_data(node, vi, labels_buf); - // LL - number of samples that both the primary and the surrogate splits send to the left - // LR - ... primary split sends to the left and the surrogate split sends to the right - // RL - ... primary split sends to the right and the surrogate split sends to the left - // RR - ... both send to the right - CvDTreeSplit* split = data->new_split_cat( vi, 0 ); - double best_val = 0; - double* lc = (double*)cv::alignPtr(base_buf,sizeof(double)) + 1; - double* rc = lc + mi + 1; - - for( i = -1; i < mi; i++ ) - lc[i] = rc[i] = 0; - - // for each category calculate the weight of samples - // sent to the left (lc) and to the right (rc) by the primary split - if( !data->have_priors ) - { - int* _lc = (int*)rc + 1; - int* _rc = _lc + mi + 1; - - for( i = -1; i < mi; i++ ) - _lc[i] = _rc[i] = 0; - - for( i = 0; i < n; i++ ) - { - int idx = ( (labels[i] == 65535) && (data->is_buf_16u) ) ? -1 : labels[i]; - int d = dir[i]; - int sum = _lc[idx] + d; - int sum_abs = _rc[idx] + (d & 1); - _lc[idx] = sum; _rc[idx] = sum_abs; - } - - for( i = 0; i < mi; i++ ) - { - int sum = _lc[i]; - int sum_abs = _rc[i]; - lc[i] = (sum_abs - sum) >> 1; - rc[i] = (sum_abs + sum) >> 1; - } - } - else - { - const double* priors = data->priors_mult->data.db; - int* responses_buf = labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - - for( i = 0; i < n; i++ ) - { - int idx = ( (labels[i] == 65535) && (data->is_buf_16u) ) ? -1 : labels[i]; - double w = priors[responses[i]]; - int d = dir[i]; - double sum = lc[idx] + d*w; - double sum_abs = rc[idx] + (d & 1)*w; - lc[idx] = sum; rc[idx] = sum_abs; - } - - for( i = 0; i < mi; i++ ) - { - double sum = lc[i]; - double sum_abs = rc[i]; - lc[i] = (sum_abs - sum) * 0.5; - rc[i] = (sum_abs + sum) * 0.5; - } - } - - // 2. now form the split. - // in each category send all the samples to the same direction as majority - for( i = 0; i < mi; i++ ) - { - double lval = lc[i], rval = rc[i]; - if( lval > rval ) - { - split->subset[i >> 5] |= 1 << (i & 31); - best_val += lval; - l_win++; - } - else - best_val += rval; - } - - split->quality = (float)best_val; - if( split->quality <= node->maxlr || l_win == 0 || l_win == mi ) - cvSetRemoveByPtr( data->split_heap, split ), split = 0; - - return split; -} - - -void CvDTree::calc_node_value( CvDTreeNode* node ) -{ - int i, j, k, n = node->sample_count, cv_n = data->params.cv_folds; - int m = data->get_num_classes(); - - int base_size = data->is_classifier ? m*cv_n*sizeof(int) : 2*cv_n*sizeof(double)+cv_n*sizeof(int); - int ext_size = n*(sizeof(int) + (data->is_classifier ? sizeof(int) : sizeof(int)+sizeof(float))); - cv::AutoBuffer inn_buf(base_size + ext_size); - uchar* base_buf = (uchar*)inn_buf; - uchar* ext_buf = base_buf + base_size; - - int* cv_labels_buf = (int*)ext_buf; - const int* cv_labels = data->get_cv_labels(node, cv_labels_buf); - - if( data->is_classifier ) - { - // in case of classification tree: - // * node value is the label of the class that has the largest weight in the node. - // * node risk is the weighted number of misclassified samples, - // * j-th cross-validation fold value and risk are calculated as above, - // but using the samples with cv_labels(*)!=j. - // * j-th cross-validation fold error is calculated as the weighted number of - // misclassified samples with cv_labels(*)==j. - - // compute the number of instances of each class - int* cls_count = data->counts->data.i; - int* responses_buf = cv_labels_buf + n; - const int* responses = data->get_class_labels(node, responses_buf); - int* cv_cls_count = (int*)base_buf; - double max_val = -1, total_weight = 0; - int max_k = -1; - double* priors = data->priors_mult->data.db; - - for( k = 0; k < m; k++ ) - cls_count[k] = 0; - - if( cv_n == 0 ) - { - for( i = 0; i < n; i++ ) - cls_count[responses[i]]++; - } - else - { - for( j = 0; j < cv_n; j++ ) - for( k = 0; k < m; k++ ) - cv_cls_count[j*m + k] = 0; - - for( i = 0; i < n; i++ ) - { - j = cv_labels[i]; k = responses[i]; - cv_cls_count[j*m + k]++; - } - - for( j = 0; j < cv_n; j++ ) - for( k = 0; k < m; k++ ) - cls_count[k] += cv_cls_count[j*m + k]; - } - - if( data->have_priors && node->parent == 0 ) - { - // compute priors_mult from priors, take the sample ratio into account. - double sum = 0; - for( k = 0; k < m; k++ ) - { - int n_k = cls_count[k]; - priors[k] = data->priors->data.db[k]*(n_k ? 1./n_k : 0.); - sum += priors[k]; - } - sum = 1./sum; - for( k = 0; k < m; k++ ) - priors[k] *= sum; - } - - for( k = 0; k < m; k++ ) - { - double val = cls_count[k]*priors[k]; - total_weight += val; - if( max_val < val ) - { - max_val = val; - max_k = k; - } - } - - node->class_idx = max_k; - node->value = data->cat_map->data.i[ - data->cat_ofs->data.i[data->cat_var_count] + max_k]; - node->node_risk = total_weight - max_val; - - for( j = 0; j < cv_n; j++ ) - { - double sum_k = 0, sum = 0, max_val_k = 0; - max_val = -1; max_k = -1; - - for( k = 0; k < m; k++ ) - { - double w = priors[k]; - double val_k = cv_cls_count[j*m + k]*w; - double val = cls_count[k]*w - val_k; - sum_k += val_k; - sum += val; - if( max_val < val ) - { - max_val = val; - max_val_k = val_k; - max_k = k; - } - } - - node->cv_Tn[j] = INT_MAX; - node->cv_node_risk[j] = sum - max_val; - node->cv_node_error[j] = sum_k - max_val_k; - } - } - else - { - // in case of regression tree: - // * node value is 1/n*sum_i(Y_i), where Y_i is i-th response, - // n is the number of samples in the node. - // * node risk is the sum of squared errors: sum_i((Y_i - )^2) - // * j-th cross-validation fold value and risk are calculated as above, - // but using the samples with cv_labels(*)!=j. - // * j-th cross-validation fold error is calculated - // using samples with cv_labels(*)==j as the test subset: - // error_j = sum_(i,cv_labels(i)==j)((Y_i - )^2), - // where node_value_j is the node value calculated - // as described in the previous bullet, and summation is done - // over the samples with cv_labels(*)==j. - - double sum = 0, sum2 = 0; - float* values_buf = (float*)(cv_labels_buf + n); - int* sample_indices_buf = (int*)(values_buf + n); - const float* values = data->get_ord_responses(node, values_buf, sample_indices_buf); - double *cv_sum = 0, *cv_sum2 = 0; - int* cv_count = 0; - - if( cv_n == 0 ) - { - for( i = 0; i < n; i++ ) - { - double t = values[i]; - sum += t; - sum2 += t*t; - } - } - else - { - cv_sum = (double*)base_buf; - cv_sum2 = cv_sum + cv_n; - cv_count = (int*)(cv_sum2 + cv_n); - - for( j = 0; j < cv_n; j++ ) - { - cv_sum[j] = cv_sum2[j] = 0.; - cv_count[j] = 0; - } - - for( i = 0; i < n; i++ ) - { - j = cv_labels[i]; - double t = values[i]; - double s = cv_sum[j] + t; - double s2 = cv_sum2[j] + t*t; - int nc = cv_count[j] + 1; - cv_sum[j] = s; - cv_sum2[j] = s2; - cv_count[j] = nc; - } - - for( j = 0; j < cv_n; j++ ) - { - sum += cv_sum[j]; - sum2 += cv_sum2[j]; - } - } - - node->node_risk = sum2 - (sum/n)*sum; - node->value = sum/n; - - for( j = 0; j < cv_n; j++ ) - { - double s = cv_sum[j], si = sum - s; - double s2 = cv_sum2[j], s2i = sum2 - s2; - int c = cv_count[j], ci = n - c; - double r = si/MAX(ci,1); - node->cv_node_risk[j] = s2i - r*r*ci; - node->cv_node_error[j] = s2 - 2*r*s + c*r*r; - node->cv_Tn[j] = INT_MAX; - } - } -} - - -void CvDTree::complete_node_dir( CvDTreeNode* node ) -{ - int vi, i, n = node->sample_count, nl, nr, d0 = 0, d1 = -1; - int nz = n - node->get_num_valid(node->split->var_idx); - char* dir = (char*)data->direction->data.ptr; - - // try to complete direction using surrogate splits - if( nz && data->params.use_surrogates ) - { - cv::AutoBuffer inn_buf(n*(2*sizeof(int)+sizeof(float))); - CvDTreeSplit* split = node->split->next; - for( ; split != 0 && nz; split = split->next ) - { - int inversed_mask = split->inversed ? -1 : 0; - vi = split->var_idx; - - if( data->get_var_type(vi) >= 0 ) // split on categorical var - { - int* labels_buf = (int*)(uchar*)inn_buf; - const int* labels = data->get_cat_var_data(node, vi, labels_buf); - const int* subset = split->subset; - - for( i = 0; i < n; i++ ) - { - int idx = labels[i]; - if( !dir[i] && ( ((idx >= 0)&&(!data->is_buf_16u)) || ((idx != 65535)&&(data->is_buf_16u)) )) - - { - int d = CV_DTREE_CAT_DIR(idx,subset); - dir[i] = (char)((d ^ inversed_mask) - inversed_mask); - if( --nz ) - break; - } - } - } - else // split on ordered var - { - float* values_buf = (float*)(uchar*)inn_buf; - int* sorted_indices_buf = (int*)(values_buf + n); - int* sample_indices_buf = sorted_indices_buf + n; - const float* values = 0; - const int* sorted_indices = 0; - data->get_ord_var_data( node, vi, values_buf, sorted_indices_buf, &values, &sorted_indices, sample_indices_buf ); - int split_point = split->ord.split_point; - int n1 = node->get_num_valid(vi); - - assert( 0 <= split_point && split_point < n-1 ); - - for( i = 0; i < n1; i++ ) - { - int idx = sorted_indices[i]; - if( !dir[idx] ) - { - int d = i <= split_point ? -1 : 1; - dir[idx] = (char)((d ^ inversed_mask) - inversed_mask); - if( --nz ) - break; - } - } - } - } - } - - // find the default direction for the rest - if( nz ) - { - for( i = nr = 0; i < n; i++ ) - nr += dir[i] > 0; - nl = n - nr - nz; - d0 = nl > nr ? -1 : nr > nl; - } - - // make sure that every sample is directed either to the left or to the right - for( i = 0; i < n; i++ ) - { - int d = dir[i]; - if( !d ) - { - d = d0; - if( !d ) - d = d1, d1 = -d1; - } - d = d > 0; - dir[i] = (char)d; // remap (-1,1) to (0,1) - } -} - - -void CvDTree::split_node_data( CvDTreeNode* node ) -{ - int vi, i, n = node->sample_count, nl, nr, scount = data->sample_count; - char* dir = (char*)data->direction->data.ptr; - CvDTreeNode *left = 0, *right = 0; - int* new_idx = data->split_buf->data.i; - int new_buf_idx = data->get_child_buf_idx( node ); - int work_var_count = data->get_work_var_count(); - CvMat* buf = data->buf; - size_t length_buf_row = data->get_length_subbuf(); - cv::AutoBuffer inn_buf(n*(3*sizeof(int) + sizeof(float))); - int* temp_buf = (int*)(uchar*)inn_buf; - - complete_node_dir(node); - - for( i = nl = nr = 0; i < n; i++ ) - { - int d = dir[i]; - // initialize new indices for splitting ordered variables - new_idx[i] = (nl & (d-1)) | (nr & -d); // d ? ri : li - nr += d; - nl += d^1; - } - - bool split_input_data; - node->left = left = data->new_node( node, nl, new_buf_idx, node->offset ); - node->right = right = data->new_node( node, nr, new_buf_idx, node->offset + nl ); - - split_input_data = node->depth + 1 < data->params.max_depth && - (node->left->sample_count > data->params.min_sample_count || - node->right->sample_count > data->params.min_sample_count); - - // split ordered variables, keep both halves sorted. - for( vi = 0; vi < data->var_count; vi++ ) - { - int ci = data->get_var_type(vi); - - if( ci >= 0 || !split_input_data ) - continue; - - int n1 = node->get_num_valid(vi); - float* src_val_buf = (float*)(uchar*)(temp_buf + n); - int* src_sorted_idx_buf = (int*)(src_val_buf + n); - int* src_sample_idx_buf = src_sorted_idx_buf + n; - const float* src_val = 0; - const int* src_sorted_idx = 0; - data->get_ord_var_data(node, vi, src_val_buf, src_sorted_idx_buf, &src_val, &src_sorted_idx, src_sample_idx_buf); - - for(i = 0; i < n; i++) - temp_buf[i] = src_sorted_idx[i]; - - if (data->is_buf_16u) - { - unsigned short *ldst, *rdst, *ldst0, *rdst0; - //unsigned short tl, tr; - ldst0 = ldst = (unsigned short*)(buf->data.s + left->buf_idx*length_buf_row + - vi*scount + left->offset); - rdst0 = rdst = (unsigned short*)(ldst + nl); - - // split sorted - for( i = 0; i < n1; i++ ) - { - int idx = temp_buf[i]; - int d = dir[idx]; - idx = new_idx[idx]; - if (d) - { - *rdst = (unsigned short)idx; - rdst++; - } - else - { - *ldst = (unsigned short)idx; - ldst++; - } - } - - left->set_num_valid(vi, (int)(ldst - ldst0)); - right->set_num_valid(vi, (int)(rdst - rdst0)); - - // split missing - for( ; i < n; i++ ) - { - int idx = temp_buf[i]; - int d = dir[idx]; - idx = new_idx[idx]; - if (d) - { - *rdst = (unsigned short)idx; - rdst++; - } - else - { - *ldst = (unsigned short)idx; - ldst++; - } - } - } - else - { - int *ldst0, *ldst, *rdst0, *rdst; - ldst0 = ldst = buf->data.i + left->buf_idx*length_buf_row + - vi*scount + left->offset; - rdst0 = rdst = buf->data.i + right->buf_idx*length_buf_row + - vi*scount + right->offset; - - // split sorted - for( i = 0; i < n1; i++ ) - { - int idx = temp_buf[i]; - int d = dir[idx]; - idx = new_idx[idx]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - - left->set_num_valid(vi, (int)(ldst - ldst0)); - right->set_num_valid(vi, (int)(rdst - rdst0)); - - // split missing - for( ; i < n; i++ ) - { - int idx = temp_buf[i]; - int d = dir[idx]; - idx = new_idx[idx]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - } - } - - // split categorical vars, responses and cv_labels using new_idx relocation table - for( vi = 0; vi < work_var_count; vi++ ) - { - int ci = data->get_var_type(vi); - int n1 = node->get_num_valid(vi), nr1 = 0; - - if( ci < 0 || (vi < data->var_count && !split_input_data) ) - continue; - - int *src_lbls_buf = temp_buf + n; - const int* src_lbls = data->get_cat_var_data(node, vi, src_lbls_buf); - - for(i = 0; i < n; i++) - temp_buf[i] = src_lbls[i]; - - if (data->is_buf_16u) - { - unsigned short *ldst = (unsigned short *)(buf->data.s + left->buf_idx*length_buf_row + - vi*scount + left->offset); - unsigned short *rdst = (unsigned short *)(buf->data.s + right->buf_idx*length_buf_row + - vi*scount + right->offset); - - for( i = 0; i < n; i++ ) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = (unsigned short)idx; - rdst++; - nr1 += (idx != 65535 )&d; - } - else - { - *ldst = (unsigned short)idx; - ldst++; - } - } - - if( vi < data->var_count ) - { - left->set_num_valid(vi, n1 - nr1); - right->set_num_valid(vi, nr1); - } - } - else - { - int *ldst = buf->data.i + left->buf_idx*length_buf_row + - vi*scount + left->offset; - int *rdst = buf->data.i + right->buf_idx*length_buf_row + - vi*scount + right->offset; - - for( i = 0; i < n; i++ ) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - nr1 += (idx >= 0)&d; - } - else - { - *ldst = idx; - ldst++; - } - - } - - if( vi < data->var_count ) - { - left->set_num_valid(vi, n1 - nr1); - right->set_num_valid(vi, nr1); - } - } - } - - - // split sample indices - int *sample_idx_src_buf = temp_buf + n; - const int* sample_idx_src = data->get_sample_indices(node, sample_idx_src_buf); - - for(i = 0; i < n; i++) - temp_buf[i] = sample_idx_src[i]; - - int pos = data->get_work_var_count(); - if (data->is_buf_16u) - { - unsigned short* ldst = (unsigned short*)(buf->data.s + left->buf_idx*length_buf_row + - pos*scount + left->offset); - unsigned short* rdst = (unsigned short*)(buf->data.s + right->buf_idx*length_buf_row + - pos*scount + right->offset); - for (i = 0; i < n; i++) - { - int d = dir[i]; - unsigned short idx = (unsigned short)temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - } - else - { - int* ldst = buf->data.i + left->buf_idx*length_buf_row + - pos*scount + left->offset; - int* rdst = buf->data.i + right->buf_idx*length_buf_row + - pos*scount + right->offset; - for (i = 0; i < n; i++) - { - int d = dir[i]; - int idx = temp_buf[i]; - if (d) - { - *rdst = idx; - rdst++; - } - else - { - *ldst = idx; - ldst++; - } - } - } - - // deallocate the parent node data that is not needed anymore - data->free_node_data(node); -} - -float CvDTree::calc_error( CvMLData* _data, int type, vector *resp ) -{ - float err = 0; - const CvMat* values = _data->get_values(); - const CvMat* response = _data->get_responses(); - const CvMat* missing = _data->get_missing(); - const CvMat* sample_idx = (type == CV_TEST_ERROR) ? _data->get_test_sample_idx() : _data->get_train_sample_idx(); - const CvMat* var_types = _data->get_var_types(); - int* sidx = sample_idx ? sample_idx->data.i : 0; - int r_step = CV_IS_MAT_CONT(response->type) ? - 1 : response->step / CV_ELEM_SIZE(response->type); - bool is_classifier = var_types->data.ptr[var_types->cols-1] == CV_VAR_CATEGORICAL; - int sample_count = sample_idx ? sample_idx->cols : 0; - sample_count = (type == CV_TRAIN_ERROR && sample_count == 0) ? values->rows : sample_count; - float* pred_resp = 0; - if( resp && (sample_count > 0) ) - { - resp->resize( sample_count ); - pred_resp = &((*resp)[0]); - } - - if ( is_classifier ) - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 )->value; - if( pred_resp ) - pred_resp[i] = r; - int d = fabs((double)r - response->data.fl[(size_t)si*r_step]) <= FLT_EPSILON ? 0 : 1; - err += d; - } - err = sample_count ? err / (float)sample_count * 100 : -FLT_MAX; - } - else - { - for( int i = 0; i < sample_count; i++ ) - { - CvMat sample, miss; - int si = sidx ? sidx[i] : i; - cvGetRow( values, &sample, si ); - if( missing ) - cvGetRow( missing, &miss, si ); - float r = (float)predict( &sample, missing ? &miss : 0 )->value; - if( pred_resp ) - pred_resp[i] = r; - float d = r - response->data.fl[(size_t)si*r_step]; - err += d*d; - } - err = sample_count ? err / (float)sample_count : -FLT_MAX; - } - return err; -} - -void CvDTree::prune_cv() -{ - CvMat* ab = 0; - CvMat* temp = 0; - CvMat* err_jk = 0; - - // 1. build tree sequence for each cv fold, calculate error_{Tj,beta_k}. - // 2. choose the best tree index (if need, apply 1SE rule). - // 3. store the best index and cut the branches. - - CV_FUNCNAME( "CvDTree::prune_cv" ); - - __BEGIN__; - - int ti, j, tree_count = 0, cv_n = data->params.cv_folds, n = root->sample_count; - // currently, 1SE for regression is not implemented - bool use_1se = data->params.use_1se_rule != 0 && data->is_classifier; - double* err; - double min_err = 0, min_err_se = 0; - int min_idx = -1; - - CV_CALL( ab = cvCreateMat( 1, 256, CV_64F )); - - // build the main tree sequence, calculate alpha's - for(;;tree_count++) - { - double min_alpha = update_tree_rnc(tree_count, -1); - if( cut_tree(tree_count, -1, min_alpha) ) - break; - - if( ab->cols <= tree_count ) - { - CV_CALL( temp = cvCreateMat( 1, ab->cols*3/2, CV_64F )); - for( ti = 0; ti < ab->cols; ti++ ) - temp->data.db[ti] = ab->data.db[ti]; - cvReleaseMat( &ab ); - ab = temp; - temp = 0; - } - - ab->data.db[tree_count] = min_alpha; - } - - ab->data.db[0] = 0.; - - if( tree_count > 0 ) - { - for( ti = 1; ti < tree_count-1; ti++ ) - ab->data.db[ti] = sqrt(ab->data.db[ti]*ab->data.db[ti+1]); - ab->data.db[tree_count-1] = DBL_MAX*0.5; - - CV_CALL( err_jk = cvCreateMat( cv_n, tree_count, CV_64F )); - err = err_jk->data.db; - - for( j = 0; j < cv_n; j++ ) - { - int tj = 0, tk = 0; - for( ; tk < tree_count; tj++ ) - { - double min_alpha = update_tree_rnc(tj, j); - if( cut_tree(tj, j, min_alpha) ) - min_alpha = DBL_MAX; - - for( ; tk < tree_count; tk++ ) - { - if( ab->data.db[tk] > min_alpha ) - break; - err[j*tree_count + tk] = root->tree_error; - } - } - } - - for( ti = 0; ti < tree_count; ti++ ) - { - double sum_err = 0; - for( j = 0; j < cv_n; j++ ) - sum_err += err[j*tree_count + ti]; - if( ti == 0 || sum_err < min_err ) - { - min_err = sum_err; - min_idx = ti; - if( use_1se ) - min_err_se = sqrt( sum_err*(n - sum_err) ); - } - else if( sum_err < min_err + min_err_se ) - min_idx = ti; - } - } - - pruned_tree_idx = min_idx; - free_prune_data(data->params.truncate_pruned_tree != 0); - - __END__; - - cvReleaseMat( &err_jk ); - cvReleaseMat( &ab ); - cvReleaseMat( &temp ); -} - - -double CvDTree::update_tree_rnc( int T, int fold ) -{ - CvDTreeNode* node = root; - double min_alpha = DBL_MAX; - - for(;;) - { - CvDTreeNode* parent; - for(;;) - { - int t = fold >= 0 ? node->cv_Tn[fold] : node->Tn; - if( t <= T || !node->left ) - { - node->complexity = 1; - node->tree_risk = node->node_risk; - node->tree_error = 0.; - if( fold >= 0 ) - { - node->tree_risk = node->cv_node_risk[fold]; - node->tree_error = node->cv_node_error[fold]; - } - break; - } - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - { - parent->complexity += node->complexity; - parent->tree_risk += node->tree_risk; - parent->tree_error += node->tree_error; - - parent->alpha = ((fold >= 0 ? parent->cv_node_risk[fold] : parent->node_risk) - - parent->tree_risk)/(parent->complexity - 1); - min_alpha = MIN( min_alpha, parent->alpha ); - } - - if( !parent ) - break; - - parent->complexity = node->complexity; - parent->tree_risk = node->tree_risk; - parent->tree_error = node->tree_error; - node = parent->right; - } - - return min_alpha; -} - - -int CvDTree::cut_tree( int T, int fold, double min_alpha ) -{ - CvDTreeNode* node = root; - if( !node->left ) - return 1; - - for(;;) - { - CvDTreeNode* parent; - for(;;) - { - int t = fold >= 0 ? node->cv_Tn[fold] : node->Tn; - if( t <= T || !node->left ) - break; - if( node->alpha <= min_alpha + FLT_EPSILON ) - { - if( fold >= 0 ) - node->cv_Tn[fold] = T; - else - node->Tn = T; - if( node == root ) - return 1; - break; - } - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } - - return 0; -} - - -void CvDTree::free_prune_data(bool _cut_tree) -{ - CvDTreeNode* node = root; - - for(;;) - { - CvDTreeNode* parent; - for(;;) - { - // do not call cvSetRemoveByPtr( cv_heap, node->cv_Tn ) - // as we will clear the whole cross-validation heap at the end - node->cv_Tn = 0; - node->cv_node_error = node->cv_node_risk = 0; - if( !node->left ) - break; - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - { - if( _cut_tree && parent->Tn <= pruned_tree_idx ) - { - data->free_node( parent->left ); - data->free_node( parent->right ); - parent->left = parent->right = 0; - } - } - - if( !parent ) - break; - - node = parent->right; - } - - if( data->cv_heap ) - cvClearSet( data->cv_heap ); -} - - -void CvDTree::free_tree() -{ - if( root && data && data->shared ) - { - pruned_tree_idx = INT_MIN; - free_prune_data(true); - data->free_node(root); - root = 0; - } -} - -CvDTreeNode* CvDTree::predict( const CvMat* _sample, - const CvMat* _missing, bool preprocessed_input ) const -{ - cv::AutoBuffer catbuf; - - int i, mstep = 0; - const uchar* m = 0; - CvDTreeNode* node = root; - - if( !node ) - CV_Error( CV_StsError, "The tree has not been trained yet" ); - - if( !CV_IS_MAT(_sample) || CV_MAT_TYPE(_sample->type) != CV_32FC1 || - (_sample->cols != 1 && _sample->rows != 1) || - (_sample->cols + _sample->rows - 1 != data->var_all && !preprocessed_input) || - (_sample->cols + _sample->rows - 1 != data->var_count && preprocessed_input) ) - CV_Error( CV_StsBadArg, - "the input sample must be 1d floating-point vector with the same " - "number of elements as the total number of variables used for training" ); - - const float* sample = _sample->data.fl; - int step = CV_IS_MAT_CONT(_sample->type) ? 1 : _sample->step/sizeof(sample[0]); - - if( data->cat_count && !preprocessed_input ) // cache for categorical variables - { - int n = data->cat_count->cols; - catbuf.allocate(n); - for( i = 0; i < n; i++ ) - catbuf[i] = -1; - } - - if( _missing ) - { - if( !CV_IS_MAT(_missing) || !CV_IS_MASK_ARR(_missing) || - !CV_ARE_SIZES_EQ(_missing, _sample) ) - CV_Error( CV_StsBadArg, - "the missing data mask must be 8-bit vector of the same size as input sample" ); - m = _missing->data.ptr; - mstep = CV_IS_MAT_CONT(_missing->type) ? 1 : _missing->step/sizeof(m[0]); - } - - const int* vtype = data->var_type->data.i; - const int* vidx = data->var_idx && !preprocessed_input ? data->var_idx->data.i : 0; - const int* cmap = data->cat_map ? data->cat_map->data.i : 0; - const int* cofs = data->cat_ofs ? data->cat_ofs->data.i : 0; - - while( node->Tn > pruned_tree_idx && node->left ) - { - CvDTreeSplit* split = node->split; - int dir = 0; - for( ; !dir && split != 0; split = split->next ) - { - int vi = split->var_idx; - int ci = vtype[vi]; - i = vidx ? vidx[vi] : vi; - float val = sample[(size_t)i*step]; - if( m && m[(size_t)i*mstep] ) - continue; - if( ci < 0 ) // ordered - dir = val <= split->ord.c ? -1 : 1; - else // categorical - { - int c; - if( preprocessed_input ) - c = cvRound(val); - else - { - c = catbuf[ci]; - if( c < 0 ) - { - int a = c = cofs[ci]; - int b = (ci+1 >= data->cat_ofs->cols) ? data->cat_map->cols : cofs[ci+1]; - - int ival = cvRound(val); - if( ival != val ) - CV_Error( CV_StsBadArg, - "one of input categorical variable is not an integer" ); - - int sh = 0; - while( a < b ) - { - sh++; - c = (a + b) >> 1; - if( ival < cmap[c] ) - b = c; - else if( ival > cmap[c] ) - a = c+1; - else - break; - } - - if( c < 0 || ival != cmap[c] ) - continue; - - catbuf[ci] = c -= cofs[ci]; - } - } - c = ( (c == 65535) && data->is_buf_16u ) ? -1 : c; - dir = CV_DTREE_CAT_DIR(c, split->subset); - } - - if( split->inversed ) - dir = -dir; - } - - if( !dir ) - { - double diff = node->right->sample_count - node->left->sample_count; - dir = diff < 0 ? -1 : 1; - } - node = dir < 0 ? node->left : node->right; - } - - return node; -} - - -CvDTreeNode* CvDTree::predict( const Mat& _sample, const Mat& _missing, bool preprocessed_input ) const -{ - CvMat sample = _sample, mmask = _missing; - return predict(&sample, mmask.data.ptr ? &mmask : 0, preprocessed_input); -} - - -const CvMat* CvDTree::get_var_importance() -{ - if( !var_importance ) - { - CvDTreeNode* node = root; - double* importance; - if( !node ) - return 0; - var_importance = cvCreateMat( 1, data->var_count, CV_64F ); - cvZero( var_importance ); - importance = var_importance->data.db; - - for(;;) - { - CvDTreeNode* parent; - for( ;; node = node->left ) - { - CvDTreeSplit* split = node->split; - - if( !node->left || node->Tn <= pruned_tree_idx ) - break; - - for( ; split != 0; split = split->next ) - importance[split->var_idx] += split->quality; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } - - cvNormalize( var_importance, var_importance, 1., 0, CV_L1 ); - } - - return var_importance; -} - - -void CvDTree::write_split( CvFileStorage* fs, CvDTreeSplit* split ) const -{ - int ci; - - cvStartWriteStruct( fs, 0, CV_NODE_MAP + CV_NODE_FLOW ); - cvWriteInt( fs, "var", split->var_idx ); - cvWriteReal( fs, "quality", split->quality ); - - ci = data->get_var_type(split->var_idx); - if( ci >= 0 ) // split on a categorical var - { - int i, n = data->cat_count->data.i[ci], to_right = 0, default_dir; - for( i = 0; i < n; i++ ) - to_right += CV_DTREE_CAT_DIR(i,split->subset) > 0; - - // ad-hoc rule when to use inverse categorical split notation - // to achieve more compact and clear representation - default_dir = to_right <= 1 || to_right <= MIN(3, n/2) || to_right <= n/3 ? -1 : 1; - - cvStartWriteStruct( fs, default_dir*(split->inversed ? -1 : 1) > 0 ? - "in" : "not_in", CV_NODE_SEQ+CV_NODE_FLOW ); - - for( i = 0; i < n; i++ ) - { - int dir = CV_DTREE_CAT_DIR(i,split->subset); - if( dir*default_dir < 0 ) - cvWriteInt( fs, 0, i ); - } - cvEndWriteStruct( fs ); - } - else - cvWriteReal( fs, !split->inversed ? "le" : "gt", split->ord.c ); - - cvEndWriteStruct( fs ); -} - - -void CvDTree::write_node( CvFileStorage* fs, CvDTreeNode* node ) const -{ - CvDTreeSplit* split; - - cvStartWriteStruct( fs, 0, CV_NODE_MAP ); - - cvWriteInt( fs, "depth", node->depth ); - cvWriteInt( fs, "sample_count", node->sample_count ); - cvWriteReal( fs, "value", node->value ); - - if( data->is_classifier ) - cvWriteInt( fs, "norm_class_idx", node->class_idx ); - - cvWriteInt( fs, "Tn", node->Tn ); - cvWriteInt( fs, "complexity", node->complexity ); - cvWriteReal( fs, "alpha", node->alpha ); - cvWriteReal( fs, "node_risk", node->node_risk ); - cvWriteReal( fs, "tree_risk", node->tree_risk ); - cvWriteReal( fs, "tree_error", node->tree_error ); - - if( node->left ) - { - cvStartWriteStruct( fs, "splits", CV_NODE_SEQ ); - - for( split = node->split; split != 0; split = split->next ) - write_split( fs, split ); - - cvEndWriteStruct( fs ); - } - - cvEndWriteStruct( fs ); -} - - -void CvDTree::write_tree_nodes( CvFileStorage* fs ) const -{ - //CV_FUNCNAME( "CvDTree::write_tree_nodes" ); - - __BEGIN__; - - CvDTreeNode* node = root; - - // traverse the tree and save all the nodes in depth-first order - for(;;) - { - CvDTreeNode* parent; - for(;;) - { - write_node( fs, node ); - if( !node->left ) - break; - node = node->left; - } - - for( parent = node->parent; parent && parent->right == node; - node = parent, parent = parent->parent ) - ; - - if( !parent ) - break; - - node = parent->right; - } - - __END__; -} - - -void CvDTree::write( CvFileStorage* fs, const char* name ) const -{ - //CV_FUNCNAME( "CvDTree::write" ); - - __BEGIN__; - - cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_TREE ); - - //get_var_importance(); - data->write_params( fs ); - //if( var_importance ) - //cvWrite( fs, "var_importance", var_importance ); - write( fs ); - - cvEndWriteStruct( fs ); - - __END__; -} - - -void CvDTree::write( CvFileStorage* fs ) const -{ - //CV_FUNCNAME( "CvDTree::write" ); - - __BEGIN__; - - cvWriteInt( fs, "best_tree_idx", pruned_tree_idx ); - - cvStartWriteStruct( fs, "nodes", CV_NODE_SEQ ); - write_tree_nodes( fs ); - cvEndWriteStruct( fs ); - - __END__; -} - - -CvDTreeSplit* CvDTree::read_split( CvFileStorage* fs, CvFileNode* fnode ) -{ - CvDTreeSplit* split = 0; - - CV_FUNCNAME( "CvDTree::read_split" ); - - __BEGIN__; - - int vi, ci; - - if( !fnode || CV_NODE_TYPE(fnode->tag) != CV_NODE_MAP ) - CV_ERROR( CV_StsParseError, "some of the splits are not stored properly" ); - - vi = cvReadIntByName( fs, fnode, "var", -1 ); - if( (unsigned)vi >= (unsigned)data->var_count ) - CV_ERROR( CV_StsOutOfRange, "Split variable index is out of range" ); - - ci = data->get_var_type(vi); - if( ci >= 0 ) // split on categorical var - { - int i, n = data->cat_count->data.i[ci], inversed = 0, val; - CvSeqReader reader; - CvFileNode* inseq; - split = data->new_split_cat( vi, 0 ); - inseq = cvGetFileNodeByName( fs, fnode, "in" ); - if( !inseq ) - { - inseq = cvGetFileNodeByName( fs, fnode, "not_in" ); - inversed = 1; - } - if( !inseq || - (CV_NODE_TYPE(inseq->tag) != CV_NODE_SEQ && CV_NODE_TYPE(inseq->tag) != CV_NODE_INT)) - CV_ERROR( CV_StsParseError, - "Either 'in' or 'not_in' tags should be inside a categorical split data" ); - - if( CV_NODE_TYPE(inseq->tag) == CV_NODE_INT ) - { - val = inseq->data.i; - if( (unsigned)val >= (unsigned)n ) - CV_ERROR( CV_StsOutOfRange, "some of in/not_in elements are out of range" ); - - split->subset[val >> 5] |= 1 << (val & 31); - } - else - { - cvStartReadSeq( inseq->data.seq, &reader ); - - for( i = 0; i < reader.seq->total; i++ ) - { - CvFileNode* inode = (CvFileNode*)reader.ptr; - val = inode->data.i; - if( CV_NODE_TYPE(inode->tag) != CV_NODE_INT || (unsigned)val >= (unsigned)n ) - CV_ERROR( CV_StsOutOfRange, "some of in/not_in elements are out of range" ); - - split->subset[val >> 5] |= 1 << (val & 31); - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - } - - // for categorical splits we do not use inversed splits, - // instead we inverse the variable set in the split - if( inversed ) - for( i = 0; i < (n + 31) >> 5; i++ ) - split->subset[i] ^= -1; - } - else - { - CvFileNode* cmp_node; - split = data->new_split_ord( vi, 0, 0, 0, 0 ); - - cmp_node = cvGetFileNodeByName( fs, fnode, "le" ); - if( !cmp_node ) - { - cmp_node = cvGetFileNodeByName( fs, fnode, "gt" ); - split->inversed = 1; - } - - split->ord.c = (float)cvReadReal( cmp_node ); - } - - split->quality = (float)cvReadRealByName( fs, fnode, "quality" ); - - __END__; - - return split; -} - - -CvDTreeNode* CvDTree::read_node( CvFileStorage* fs, CvFileNode* fnode, CvDTreeNode* parent ) -{ - CvDTreeNode* node = 0; - - CV_FUNCNAME( "CvDTree::read_node" ); - - __BEGIN__; - - CvFileNode* splits; - int i, depth; - - if( !fnode || CV_NODE_TYPE(fnode->tag) != CV_NODE_MAP ) - CV_ERROR( CV_StsParseError, "some of the tree elements are not stored properly" ); - - CV_CALL( node = data->new_node( parent, 0, 0, 0 )); - depth = cvReadIntByName( fs, fnode, "depth", -1 ); - if( depth != node->depth ) - CV_ERROR( CV_StsParseError, "incorrect node depth" ); - - node->sample_count = cvReadIntByName( fs, fnode, "sample_count" ); - node->value = cvReadRealByName( fs, fnode, "value" ); - if( data->is_classifier ) - node->class_idx = cvReadIntByName( fs, fnode, "norm_class_idx" ); - - node->Tn = cvReadIntByName( fs, fnode, "Tn" ); - node->complexity = cvReadIntByName( fs, fnode, "complexity" ); - node->alpha = cvReadRealByName( fs, fnode, "alpha" ); - node->node_risk = cvReadRealByName( fs, fnode, "node_risk" ); - node->tree_risk = cvReadRealByName( fs, fnode, "tree_risk" ); - node->tree_error = cvReadRealByName( fs, fnode, "tree_error" ); - - splits = cvGetFileNodeByName( fs, fnode, "splits" ); - if( splits ) - { - CvSeqReader reader; - CvDTreeSplit* last_split = 0; - - if( CV_NODE_TYPE(splits->tag) != CV_NODE_SEQ ) - CV_ERROR( CV_StsParseError, "splits tag must stored as a sequence" ); - - cvStartReadSeq( splits->data.seq, &reader ); - for( i = 0; i < reader.seq->total; i++ ) - { - CvDTreeSplit* split; - CV_CALL( split = read_split( fs, (CvFileNode*)reader.ptr )); - if( !last_split ) - node->split = last_split = split; - else - last_split = last_split->next = split; - - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - } - - __END__; - - return node; -} - - -void CvDTree::read_tree_nodes( CvFileStorage* fs, CvFileNode* fnode ) -{ - CV_FUNCNAME( "CvDTree::read_tree_nodes" ); - - __BEGIN__; - - CvSeqReader reader; - CvDTreeNode _root; - CvDTreeNode* parent = &_root; - int i; - parent->left = parent->right = parent->parent = 0; - - cvStartReadSeq( fnode->data.seq, &reader ); - - for( i = 0; i < reader.seq->total; i++ ) - { - CvDTreeNode* node; - - CV_CALL( node = read_node( fs, (CvFileNode*)reader.ptr, parent != &_root ? parent : 0 )); - if( !parent->left ) - parent->left = node; - else - parent->right = node; - if( node->split ) - parent = node; - else - { - while( parent && parent->right ) - parent = parent->parent; - } - - CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); - } - - root = _root.left; - - __END__; -} - - -void CvDTree::read( CvFileStorage* fs, CvFileNode* fnode ) -{ - CvDTreeTrainData* _data = new CvDTreeTrainData(); - _data->read_params( fs, fnode ); - - read( fs, fnode, _data ); - get_var_importance(); -} - - -// a special entry point for reading weak decision trees from the tree ensembles -void CvDTree::read( CvFileStorage* fs, CvFileNode* node, CvDTreeTrainData* _data ) -{ - CV_FUNCNAME( "CvDTree::read" ); - - __BEGIN__; - - CvFileNode* tree_nodes; - - clear(); - data = _data; - - tree_nodes = cvGetFileNodeByName( fs, node, "nodes" ); - if( !tree_nodes || CV_NODE_TYPE(tree_nodes->tag) != CV_NODE_SEQ ) - CV_ERROR( CV_StsParseError, "nodes tag is missing" ); - - pruned_tree_idx = cvReadIntByName( fs, node, "best_tree_idx", -1 ); - read_tree_nodes( fs, tree_nodes ); - - __END__; -} - -Mat CvDTree::getVarImportance() -{ - return Mat(get_var_importance()); -} - -/* End of file. */ diff --git a/modules/objdetect/CMakeLists.txt b/modules/objdetect/CMakeLists.txt deleted file mode 100644 index 78aa4aa..0000000 --- a/modules/objdetect/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -set(the_description "Object Detection") -ocv_define_module(objdetect opencv_core opencv_imgproc OPTIONAL opencv_highgui) diff --git a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp b/modules/objdetect/include/opencv2/objdetect/objdetect.hpp deleted file mode 100644 index d5d6f0b..0000000 --- a/modules/objdetect/include/opencv2/objdetect/objdetect.hpp +++ /dev/null @@ -1,1073 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not 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 Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_OBJDETECT_HPP__ -#define __OPENCV_OBJDETECT_HPP__ - -#include "opencv2/core/core.hpp" - -#ifdef __cplusplus -#include -#include - -extern "C" { -#endif - -/****************************************************************************************\ -* Haar-like Object Detection functions * -\****************************************************************************************/ - -#define CV_HAAR_MAGIC_VAL 0x42500000 -#define CV_TYPE_NAME_HAAR "opencv-haar-classifier" - -#define CV_IS_HAAR_CLASSIFIER( haar ) \ - ((haar) != NULL && \ - (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL) - -#define CV_HAAR_FEATURE_MAX 3 - -typedef struct CvHaarFeature -{ - int tilted; - struct - { - CvRect r; - float weight; - } rect[CV_HAAR_FEATURE_MAX]; -} CvHaarFeature; - -typedef struct CvHaarClassifier -{ - int count; - CvHaarFeature* haar_feature; - float* threshold; - int* left; - int* right; - float* alpha; -} CvHaarClassifier; - -typedef struct CvHaarStageClassifier -{ - int count; - float threshold; - CvHaarClassifier* classifier; - - int next; - int child; - int parent; -} CvHaarStageClassifier; - -typedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade; - -typedef struct CvHaarClassifierCascade -{ - int flags; - int count; - CvSize orig_window_size; - CvSize real_window_size; - double scale; - CvHaarStageClassifier* stage_classifier; - CvHidHaarClassifierCascade* hid_cascade; -} CvHaarClassifierCascade; - -typedef struct CvAvgComp -{ - CvRect rect; - int neighbors; -} CvAvgComp; - -/* Loads haar classifier cascade from a directory. - It is obsolete: convert your cascade to xml and use cvLoad instead */ -CVAPI(CvHaarClassifierCascade*) cvLoadHaarClassifierCascade( - const char* directory, CvSize orig_window_size); - -CVAPI(void) cvReleaseHaarClassifierCascade( CvHaarClassifierCascade** cascade ); - -#define CV_HAAR_DO_CANNY_PRUNING 1 -#define CV_HAAR_SCALE_IMAGE 2 -#define CV_HAAR_FIND_BIGGEST_OBJECT 4 -#define CV_HAAR_DO_ROUGH_SEARCH 8 - -//CVAPI(CvSeq*) cvHaarDetectObjectsForROC( const CvArr* image, -// CvHaarClassifierCascade* cascade, CvMemStorage* storage, -// CvSeq** rejectLevels, CvSeq** levelWeightds, -// double scale_factor CV_DEFAULT(1.1), -// int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), -// CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)), -// bool outputRejectLevels = false ); - - -CVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image, - CvHaarClassifierCascade* cascade, CvMemStorage* storage, - double scale_factor CV_DEFAULT(1.1), - int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), - CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0))); - -/* sets images for haar classifier cascade */ -CVAPI(void) cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade, - const CvArr* sum, const CvArr* sqsum, - const CvArr* tilted_sum, double scale ); - -/* runs the cascade on the specified window */ -CVAPI(int) cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade, - CvPoint pt, int start_stage CV_DEFAULT(0)); - - -/****************************************************************************************\ -* Latent SVM Object Detection functions * -\****************************************************************************************/ - -// DataType: STRUCT position -// Structure describes the position of the filter in the feature pyramid -// l - level in the feature pyramid -// (x, y) - coordinate in level l -typedef struct CvLSVMFilterPosition -{ - int x; - int y; - int l; -} CvLSVMFilterPosition; - -// DataType: STRUCT filterObject -// Description of the filter, which corresponds to the part of the object -// V - ideal (penalty = 0) position of the partial filter -// from the root filter position (V_i in the paper) -// penaltyFunction - vector describes penalty function (d_i in the paper) -// pf[0] * x + pf[1] * y + pf[2] * x^2 + pf[3] * y^2 -// FILTER DESCRIPTION -// Rectangular map (sizeX x sizeY), -// every cell stores feature vector (dimension = p) -// H - matrix of feature vectors -// to set and get feature vectors (i,j) -// used formula H[(j * sizeX + i) * p + k], where -// k - component of feature vector in cell (i, j) -// END OF FILTER DESCRIPTION -typedef struct CvLSVMFilterObject{ - CvLSVMFilterPosition V; - float fineFunction[4]; - int sizeX; - int sizeY; - int numFeatures; - float *H; -} CvLSVMFilterObject; - -// data type: STRUCT CvLatentSvmDetector -// structure contains internal representation of trained Latent SVM detector -// num_filters - total number of filters (root plus part) in model -// num_components - number of components in model -// num_part_filters - array containing number of part filters for each component -// filters - root and part filters for all model components -// b - biases for all model components -// score_threshold - confidence level threshold -typedef struct CvLatentSvmDetector -{ - int num_filters; - int num_components; - int* num_part_filters; - CvLSVMFilterObject** filters; - float* b; - float score_threshold; -} -CvLatentSvmDetector; - -// data type: STRUCT CvObjectDetection -// structure contains the bounding box and confidence level for detected object -// rect - bounding box for a detected object -// score - confidence level -typedef struct CvObjectDetection -{ - CvRect rect; - float score; -} CvObjectDetection; - -//////////////// Object Detection using Latent SVM ////////////// - - -/* -// load trained detector from a file -// -// API -// CvLatentSvmDetector* cvLoadLatentSvmDetector(const char* filename); -// INPUT -// filename - path to the file containing the parameters of - - trained Latent SVM detector -// OUTPUT -// trained Latent SVM detector in internal representation -*/ -CVAPI(CvLatentSvmDetector*) cvLoadLatentSvmDetector(const char* filename); - -/* -// release memory allocated for CvLatentSvmDetector structure -// -// API -// void cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector); -// INPUT -// detector - CvLatentSvmDetector structure to be released -// OUTPUT -*/ -CVAPI(void) cvReleaseLatentSvmDetector(CvLatentSvmDetector** detector); - -/* -// find rectangular regions in the given image that are likely -// to contain objects and corresponding confidence levels -// -// API -// CvSeq* cvLatentSvmDetectObjects(const IplImage* image, -// CvLatentSvmDetector* detector, -// CvMemStorage* storage, -// float overlap_threshold = 0.5f, -// int numThreads = -1); -// INPUT -// image - image to detect objects in -// detector - Latent SVM detector in internal representation -// storage - memory storage to store the resultant sequence -// of the object candidate rectangles -// overlap_threshold - threshold for the non-maximum suppression algorithm - = 0.5f [here will be the reference to original paper] -// OUTPUT -// sequence of detected objects (bounding boxes and confidence levels stored in CvObjectDetection structures) -*/ -CVAPI(CvSeq*) cvLatentSvmDetectObjects(IplImage* image, - CvLatentSvmDetector* detector, - CvMemStorage* storage, - float overlap_threshold CV_DEFAULT(0.5f), - int numThreads CV_DEFAULT(-1)); - -#ifdef __cplusplus -} - -CV_EXPORTS CvSeq* cvHaarDetectObjectsForROC( const CvArr* image, - CvHaarClassifierCascade* cascade, CvMemStorage* storage, - std::vector& rejectLevels, std::vector& levelWeightds, - double scale_factor CV_DEFAULT(1.1), - int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), - CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0)), - bool outputRejectLevels = false ); - -namespace cv -{ - -///////////////////////////// Object Detection //////////////////////////// - -/* - * This is a class wrapping up the structure CvLatentSvmDetector and functions working with it. - * The class goals are: - * 1) provide c++ interface; - * 2) make it possible to load and detect more than one class (model) unlike CvLatentSvmDetector. - */ -class CV_EXPORTS LatentSvmDetector -{ -public: - struct CV_EXPORTS ObjectDetection - { - ObjectDetection(); - ObjectDetection( const Rect& rect, float score, int classID=-1 ); - Rect rect; - float score; - int classID; - }; - - LatentSvmDetector(); - LatentSvmDetector( const vector& filenames, const vector& classNames=vector() ); - virtual ~LatentSvmDetector(); - - virtual void clear(); - virtual bool empty() const; - bool load( const vector& filenames, const vector& classNames=vector() ); - - virtual void detect( const Mat& image, - vector& objectDetections, - float overlapThreshold=0.5f, - int numThreads=-1 ); - - const vector& getClassNames() const; - size_t getClassCount() const; - -private: - vector detectors; - vector classNames; -}; - -// class for grouping object candidates, detected by Cascade Classifier, HOG etc. -// instance of the class is to be passed to cv::partition (see cxoperations.hpp) -class CV_EXPORTS SimilarRects -{ -public: - SimilarRects(double _eps) : eps(_eps) {} - inline bool operator()(const Rect& r1, const Rect& r2) const - { - double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5; - return std::abs(r1.x - r2.x) <= delta && - std::abs(r1.y - r2.y) <= delta && - std::abs(r1.x + r1.width - r2.x - r2.width) <= delta && - std::abs(r1.y + r1.height - r2.y - r2.height) <= delta; - } - double eps; -}; - -CV_EXPORTS void groupRectangles(CV_OUT CV_IN_OUT vector& rectList, int groupThreshold, double eps=0.2); -CV_EXPORTS_W void groupRectangles(CV_OUT CV_IN_OUT vector& rectList, CV_OUT vector& weights, int groupThreshold, double eps=0.2); -CV_EXPORTS void groupRectangles( vector& rectList, int groupThreshold, double eps, vector* weights, vector* levelWeights ); -CV_EXPORTS void groupRectangles(vector& rectList, vector& rejectLevels, - vector& levelWeights, int groupThreshold, double eps=0.2); -CV_EXPORTS void groupRectangles_meanshift(vector& rectList, vector& foundWeights, vector& foundScales, - double detectThreshold = 0.0, Size winDetSize = Size(64, 128)); - - -class CV_EXPORTS FeatureEvaluator -{ -public: - enum { HAAR = 0, LBP = 1, HOG = 2 }; - virtual ~FeatureEvaluator(); - - virtual bool read(const FileNode& node); - virtual Ptr clone() const; - virtual int getFeatureType() const; - - virtual bool setImage(const Mat& img, Size origWinSize); - virtual bool setWindow(Point p); - - virtual double calcOrd(int featureIdx) const; - virtual int calcCat(int featureIdx) const; - - static Ptr create(int type); -}; - -template<> CV_EXPORTS void Ptr::delete_obj(); - -enum -{ - CASCADE_DO_CANNY_PRUNING=1, - CASCADE_SCALE_IMAGE=2, - CASCADE_FIND_BIGGEST_OBJECT=4, - CASCADE_DO_ROUGH_SEARCH=8 -}; - -class CV_EXPORTS_W CascadeClassifier -{ -public: - CV_WRAP CascadeClassifier(); - CV_WRAP CascadeClassifier( const string& filename ); - virtual ~CascadeClassifier(); - - CV_WRAP virtual bool empty() const; - CV_WRAP bool load( const string& filename ); - virtual bool read( const FileNode& node ); - CV_WRAP virtual void detectMultiScale( const Mat& image, - CV_OUT vector& objects, - double scaleFactor=1.1, - int minNeighbors=3, int flags=0, - Size minSize=Size(), - Size maxSize=Size() ); - - CV_WRAP virtual void detectMultiScale( const Mat& image, - CV_OUT vector& objects, - vector& rejectLevels, - vector& levelWeights, - double scaleFactor=1.1, - int minNeighbors=3, int flags=0, - Size minSize=Size(), - Size maxSize=Size(), - bool outputRejectLevels=false ); - - - bool isOldFormatCascade() const; - virtual Size getOriginalWindowSize() const; - int getFeatureType() const; - bool setImage( const Mat& ); - -protected: - //virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize, - // int stripSize, int yStep, double factor, vector& candidates ); - - virtual bool detectSingleScale( const Mat& image, int stripCount, Size processingRectSize, - int stripSize, int yStep, double factor, vector& candidates, - vector& rejectLevels, vector& levelWeights, bool outputRejectLevels=false); - -protected: - enum { BOOST = 0 }; - enum { DO_CANNY_PRUNING = 1, SCALE_IMAGE = 2, - FIND_BIGGEST_OBJECT = 4, DO_ROUGH_SEARCH = 8 }; - - friend class CascadeClassifierInvoker; - - template - friend int predictOrdered( CascadeClassifier& cascade, Ptr &featureEvaluator, double& weight); - - template - friend int predictCategorical( CascadeClassifier& cascade, Ptr &featureEvaluator, double& weight); - - template - friend int predictOrderedStump( CascadeClassifier& cascade, Ptr &featureEvaluator, double& weight); - - template - friend int predictCategoricalStump( CascadeClassifier& cascade, Ptr &featureEvaluator, double& weight); - - bool setImage( Ptr& feval, const Mat& image); - virtual int runAt( Ptr& feval, Point pt, double& weight ); - - class Data - { - public: - struct CV_EXPORTS DTreeNode - { - int featureIdx; - float threshold; // for ordered features only - int left; - int right; - }; - - struct CV_EXPORTS DTree - { - int nodeCount; - }; - - struct CV_EXPORTS Stage - { - int first; - int ntrees; - float threshold; - }; - - bool read(const FileNode &node); - - bool isStumpBased; - - int stageType; - int featureType; - int ncategories; - Size origWinSize; - - vector stages; - vector classifiers; - vector nodes; - vector leaves; - vector subsets; - }; - - Data data; - Ptr featureEvaluator; - Ptr oldCascade; - -public: - class CV_EXPORTS MaskGenerator - { - public: - virtual ~MaskGenerator() {} - virtual cv::Mat generateMask(const cv::Mat& src)=0; - virtual void initializeMask(const cv::Mat& /*src*/) {}; - }; - void setMaskGenerator(Ptr maskGenerator); - Ptr getMaskGenerator(); - - void setFaceDetectionMaskGenerator(); - -protected: - Ptr maskGenerator; -}; - - -//////////////// HOG (Histogram-of-Oriented-Gradients) Descriptor and Object Detector ////////////// - -// struct for detection region of interest (ROI) -struct DetectionROI -{ - // scale(size) of the bounding box - double scale; - // set of requrested locations to be evaluated - vector locations; - // vector that will contain confidence values for each location - vector confidences; -}; - -struct CV_EXPORTS_W HOGDescriptor -{ -public: - enum { L2Hys=0 }; - enum { DEFAULT_NLEVELS=64 }; - - CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8), - cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1), - histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true), - nlevels(HOGDescriptor::DEFAULT_NLEVELS) - {} - - CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride, - Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1, - int _histogramNormType=HOGDescriptor::L2Hys, - double _L2HysThreshold=0.2, bool _gammaCorrection=false, - int _nlevels=HOGDescriptor::DEFAULT_NLEVELS) - : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize), - nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma), - histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold), - gammaCorrection(_gammaCorrection), nlevels(_nlevels) - {} - - CV_WRAP HOGDescriptor(const String& filename) - { - load(filename); - } - - HOGDescriptor(const HOGDescriptor& d) - { - d.copyTo(*this); - } - - virtual ~HOGDescriptor() {} - - CV_WRAP size_t getDescriptorSize() const; - CV_WRAP bool checkDetectorSize() const; - CV_WRAP double getWinSigma() const; - - CV_WRAP virtual void setSVMDetector(InputArray _svmdetector); - - virtual bool read(FileNode& fn); - virtual void write(FileStorage& fs, const String& objname) const; - - CV_WRAP virtual bool load(const String& filename, const String& objname=String()); - CV_WRAP virtual void save(const String& filename, const String& objname=String()) const; - virtual void copyTo(HOGDescriptor& c) const; - - CV_WRAP virtual void compute(const Mat& img, - CV_OUT vector& descriptors, - Size winStride=Size(), Size padding=Size(), - const vector& locations=vector()) const; - //with found weights output - CV_WRAP virtual void detect(const Mat& img, CV_OUT vector& foundLocations, - CV_OUT vector& weights, - double hitThreshold=0, Size winStride=Size(), - Size padding=Size(), - const vector& searchLocations=vector()) const; - //without found weights output - virtual void detect(const Mat& img, CV_OUT vector& foundLocations, - double hitThreshold=0, Size winStride=Size(), - Size padding=Size(), - const vector& searchLocations=vector()) const; - //with result weights output - CV_WRAP virtual void detectMultiScale(const Mat& img, CV_OUT vector& foundLocations, - CV_OUT vector& foundWeights, double hitThreshold=0, - Size winStride=Size(), Size padding=Size(), double scale=1.05, - double finalThreshold=2.0,bool useMeanshiftGrouping = false) const; - //without found weights output - virtual void detectMultiScale(const Mat& img, CV_OUT vector& foundLocations, - double hitThreshold=0, Size winStride=Size(), - Size padding=Size(), double scale=1.05, - double finalThreshold=2.0, bool useMeanshiftGrouping = false) const; - - CV_WRAP virtual void computeGradient(const Mat& img, CV_OUT Mat& grad, CV_OUT Mat& angleOfs, - Size paddingTL=Size(), Size paddingBR=Size()) const; - - CV_WRAP static vector getDefaultPeopleDetector(); - CV_WRAP static vector getDaimlerPeopleDetector(); - - CV_PROP Size winSize; - CV_PROP Size blockSize; - CV_PROP Size blockStride; - CV_PROP Size cellSize; - CV_PROP int nbins; - CV_PROP int derivAperture; - CV_PROP double winSigma; - CV_PROP int histogramNormType; - CV_PROP double L2HysThreshold; - CV_PROP bool gammaCorrection; - CV_PROP vector svmDetector; - CV_PROP int nlevels; - - - // evaluate specified ROI and return confidence value for each location - void detectROI(const cv::Mat& img, const vector &locations, - CV_OUT std::vector& foundLocations, CV_OUT std::vector& confidences, - double hitThreshold = 0, cv::Size winStride = Size(), - cv::Size padding = Size()) const; - - // evaluate specified ROI and return confidence value for each location in multiple scales - void detectMultiScaleROI(const cv::Mat& img, - CV_OUT std::vector& foundLocations, - std::vector& locations, - double hitThreshold = 0, - int groupThreshold = 0) const; - - // read/parse Dalal's alt model file - void readALTModel(std::string modelfile); - void groupRectangles(vector& rectList, vector& weights, int groupThreshold, double eps) const; -}; - - -CV_EXPORTS_W void findDataMatrix(InputArray image, - CV_OUT vector& codes, - OutputArray corners=noArray(), - OutputArrayOfArrays dmtx=noArray()); -CV_EXPORTS_W void drawDataMatrixCodes(InputOutputArray image, - const vector& codes, - InputArray corners); -} - -/****************************************************************************************\ -* Datamatrix * -\****************************************************************************************/ - -struct CV_EXPORTS CvDataMatrixCode { - char msg[4]; - CvMat *original; - CvMat *corners; -}; - -CV_EXPORTS std::deque cvFindDataMatrix(CvMat *im); - -/****************************************************************************************\ -* LINE-MOD * -\****************************************************************************************/ - -namespace cv { -namespace linemod { - -using cv::FileNode; -using cv::FileStorage; -using cv::Mat; -using cv::noArray; -using cv::OutputArrayOfArrays; -using cv::Point; -using cv::Ptr; -using cv::Rect; -using cv::Size; - -/// @todo Convert doxy comments to rst - -/** - * \brief Discriminant feature described by its location and label. - */ -struct CV_EXPORTS Feature -{ - int x; ///< x offset - int y; ///< y offset - int label; ///< Quantization - - Feature() : x(0), y(0), label(0) {} - Feature(int x, int y, int label); - - void read(const FileNode& fn); - void write(FileStorage& fs) const; -}; - -inline Feature::Feature(int _x, int _y, int _label) : x(_x), y(_y), label(_label) {} - -struct CV_EXPORTS Template -{ - int width; - int height; - int pyramid_level; - std::vector features; - - void read(const FileNode& fn); - void write(FileStorage& fs) const; -}; - -/** - * \brief Represents a modality operating over an image pyramid. - */ -class QuantizedPyramid -{ -public: - // Virtual destructor - virtual ~QuantizedPyramid() {} - - /** - * \brief Compute quantized image at current pyramid level for online detection. - * - * \param[out] dst The destination 8-bit image. For each pixel at most one bit is set, - * representing its classification. - */ - virtual void quantize(Mat& dst) const =0; - - /** - * \brief Extract most discriminant features at current pyramid level to form a new template. - * - * \param[out] templ The new template. - */ - virtual bool extractTemplate(Template& templ) const =0; - - /** - * \brief Go to the next pyramid level. - * - * \todo Allow pyramid scale factor other than 2 - */ - virtual void pyrDown() =0; - -protected: - /// Candidate feature with a score - struct Candidate - { - Candidate(int x, int y, int label, float score); - - /// Sort candidates with high score to the front - bool operator<(const Candidate& rhs) const - { - return score > rhs.score; - } - - Feature f; - float score; - }; - - /** - * \brief Choose candidate features so that they are not bunched together. - * - * \param[in] candidates Candidate features sorted by score. - * \param[out] features Destination vector of selected features. - * \param[in] num_features Number of candidates to select. - * \param[in] distance Hint for desired distance between features. - */ - static void selectScatteredFeatures(const std::vector& candidates, - std::vector& features, - size_t num_features, float distance); -}; - -inline QuantizedPyramid::Candidate::Candidate(int x, int y, int label, float _score) : f(x, y, label), score(_score) {} - -/** - * \brief Interface for modalities that plug into the LINE template matching representation. - * - * \todo Max response, to allow optimization of summing (255/MAX) features as uint8 - */ -class CV_EXPORTS Modality -{ -public: - // Virtual destructor - virtual ~Modality() {} - - /** - * \brief Form a quantized image pyramid from a source image. - * - * \param[in] src The source image. Type depends on the modality. - * \param[in] mask Optional mask. If not empty, unmasked pixels are set to zero - * in quantized image and cannot be extracted as features. - */ - Ptr process(const Mat& src, - const Mat& mask = Mat()) const - { - return processImpl(src, mask); - } - - virtual std::string name() const =0; - - virtual void read(const FileNode& fn) =0; - virtual void write(FileStorage& fs) const =0; - - /** - * \brief Create modality by name. - * - * The following modality types are supported: - * - "ColorGradient" - * - "DepthNormal" - */ - static Ptr create(const std::string& modality_type); - - /** - * \brief Load a modality from file. - */ - static Ptr create(const FileNode& fn); - -protected: - // Indirection is because process() has a default parameter. - virtual Ptr processImpl(const Mat& src, - const Mat& mask) const =0; -}; - -/** - * \brief Modality that computes quantized gradient orientations from a color image. - */ -class CV_EXPORTS ColorGradient : public Modality -{ -public: - /** - * \brief Default constructor. Uses reasonable default parameter values. - */ - ColorGradient(); - - /** - * \brief Constructor. - * - * \param weak_threshold When quantizing, discard gradients with magnitude less than this. - * \param num_features How many features a template must contain. - * \param strong_threshold Consider as candidate features only gradients whose norms are - * larger than this. - */ - ColorGradient(float weak_threshold, size_t num_features, float strong_threshold); - - virtual std::string name() const; - - virtual void read(const FileNode& fn); - virtual void write(FileStorage& fs) const; - - float weak_threshold; - size_t num_features; - float strong_threshold; - -protected: - virtual Ptr processImpl(const Mat& src, - const Mat& mask) const; -}; - -/** - * \brief Modality that computes quantized surface normals from a dense depth map. - */ -class CV_EXPORTS DepthNormal : public Modality -{ -public: - /** - * \brief Default constructor. Uses reasonable default parameter values. - */ - DepthNormal(); - - /** - * \brief Constructor. - * - * \param distance_threshold Ignore pixels beyond this distance. - * \param difference_threshold When computing normals, ignore contributions of pixels whose - * depth difference with the central pixel is above this threshold. - * \param num_features How many features a template must contain. - * \param extract_threshold Consider as candidate feature only if there are no differing - * orientations within a distance of extract_threshold. - */ - DepthNormal(int distance_threshold, int difference_threshold, size_t num_features, - int extract_threshold); - - virtual std::string name() const; - - virtual void read(const FileNode& fn); - virtual void write(FileStorage& fs) const; - - int distance_threshold; - int difference_threshold; - size_t num_features; - int extract_threshold; - -protected: - virtual Ptr processImpl(const Mat& src, - const Mat& mask) const; -}; - -/** - * \brief Debug function to colormap a quantized image for viewing. - */ -void colormap(const Mat& quantized, Mat& dst); - -/** - * \brief Represents a successful template match. - */ -struct CV_EXPORTS Match -{ - Match() - { - } - - Match(int x, int y, float similarity, const std::string& class_id, int template_id); - - /// Sort matches with high similarity to the front - bool operator<(const Match& rhs) const - { - // Secondarily sort on template_id for the sake of duplicate removal - if (similarity != rhs.similarity) - return similarity > rhs.similarity; - else - return template_id < rhs.template_id; - } - - bool operator==(const Match& rhs) const - { - return x == rhs.x && y == rhs.y && similarity == rhs.similarity && class_id == rhs.class_id; - } - - int x; - int y; - float similarity; - std::string class_id; - int template_id; -}; - -inline Match::Match(int _x, int _y, float _similarity, const std::string& _class_id, int _template_id) - : x(_x), y(_y), similarity(_similarity), class_id(_class_id), template_id(_template_id) - { - } - -/** - * \brief Object detector using the LINE template matching algorithm with any set of - * modalities. - */ -class CV_EXPORTS Detector -{ -public: - /** - * \brief Empty constructor, initialize with read(). - */ - Detector(); - - /** - * \brief Constructor. - * - * \param modalities Modalities to use (color gradients, depth normals, ...). - * \param T_pyramid Value of the sampling step T at each pyramid level. The - * number of pyramid levels is T_pyramid.size(). - */ - Detector(const std::vector< Ptr >& modalities, const std::vector& T_pyramid); - - /** - * \brief Detect objects by template matching. - * - * Matches globally at the lowest pyramid level, then refines locally stepping up the pyramid. - * - * \param sources Source images, one for each modality. - * \param threshold Similarity threshold, a percentage between 0 and 100. - * \param[out] matches Template matches, sorted by similarity score. - * \param class_ids If non-empty, only search for the desired object classes. - * \param[out] quantized_images Optionally return vector of quantized images. - * \param masks The masks for consideration during matching. The masks should be CV_8UC1 - * where 255 represents a valid pixel. If non-empty, the vector must be - * the same size as sources. Each element must be - * empty or the same size as its corresponding source. - */ - void match(const std::vector& sources, float threshold, std::vector& matches, - const std::vector& class_ids = std::vector(), - OutputArrayOfArrays quantized_images = noArray(), - const std::vector& masks = std::vector()) const; - - /** - * \brief Add new object template. - * - * \param sources Source images, one for each modality. - * \param class_id Object class ID. - * \param object_mask Mask separating object from background. - * \param[out] bounding_box Optionally return bounding box of the extracted features. - * - * \return Template ID, or -1 if failed to extract a valid template. - */ - int addTemplate(const std::vector& sources, const std::string& class_id, - const Mat& object_mask, Rect* bounding_box = NULL); - - /** - * \brief Add a new object template computed by external means. - */ - int addSyntheticTemplate(const std::vector

        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

      2. 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%0A}oGrb+7^* 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 z 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%0DIUz!hhXOOY(&7SA(c*uB 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

      ?=*>Dj)=X#HH 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 HeRD!XkEwn{q< z9mj9Fn9N8ClwcSoO32?xJ*_n5*cqh@bsi!d8$@TjGay;5|Ba_gbokuz`pD)N&IA)R z-`=xeg&H?~9ztfP%!Y@** z=`D~hj0te>9Sgc0OZ5P#@21FPJIEP*IH}Q(WHj3Lm>~qt#AlsJv+UpT847=IU=T&l zNaIb0lFR^U#FqCsTZDLEqG)fFI1FQy&&-R<%6PaDbjodCV}#{`;^VbT^5Y=8<5&`< zy4JC7;%gR_LY+s*L!gY*2JtW>-#5@xF@UBJCD7{D!!W(KEbDJ}*&moZ!j0%Uu%iuN z5VZ6Y;))*na65DDwx>qnKTtYIe6FGTKduMXYUV+E(|Y=2sM;bA9HW>@SXbA=6_bQW zHw2EdQ|l_bcxxF%@=}sPh&F!cc_Blm0#rOVJS2iDWj!jVw$k%NNSdTJ>5g1^=bG`8 zA{(~pp@gXX#09X4YjfqY5IaY~xhpa4kj3ps6lbhsKaZTn3mRQl zkBauXU6+lDZdUwQg}EVr^_b{p!pnPbU=RYxa4t2b&RoURWWXAz9ooJ;mm@=tf!xH6 zEH;3^gFghQuGH;1WizE8)XXvl#O;XlH=_ggvP$!K^GJu=ahuGE=$>h(yBcYO$F%4I z-RV}K)a^cVxKnKB3_MpyOviBB9lOX@h?XFur^{*6^wfZm`1?H5NEMin_;Ym%X<0p{ zzg4EE7ucQ>d2&x}FTs9Nugw@xD(lcWwC!6{?xFSYnJm*WE@^Zuw5k+!48LS2cZ|pr zJ4OS;9jhu?@9oX#m70^UKRW<7q?`L9<5=Z1Uv1&L0#vwcG-KB_1JV3iiwJ-4;b?py8X+^+0$(6TLzik2|J9}Ak-(RxXJrU@TeoKA1mH)4-m*N+BH6%)R3n0d zM$)g$K^{dk*(mZb%ntU#;%Ok$MNtG|z{ZFyH8ius2ok#p@i_xQ%)XOBg;N;JmSVKxl$BZj@cxxOr7f0JUa%dQj&wFm`iYPk z+KA8v(Z&!>R-FKu$nH69buCj3Cne;esQJRVVwV~+DUd}X7?V7gpRDL$^hoq@^eB(U zYxL|4Q`{hL$agK`0?7iZGrW0e8Uw_aowwd~$)jQnl$r`+R2mkEgynYCkAgw-Kr#Dhchw67+1=*pW)d5tEd-TP;cO#eG}2j^ z6-Q&G=yRXr*~1uiZXD;JE-9EE#Lmj~Hf5@H`9Q4;B2C3AUZ-xz_U>&rqf1~Roy(4x zhMMWcT*RvS9He7CtiaXCHhSaUmQB9YId)6a=yEKunP})o(yHHP^sH~FkI=`xiqdqh z>SH-u$yX3*3nDYn_~g1>b!XxO`&B6)N}I=W`_=9EHnIsEEUyG53~$ACH;s$3#mVJj zX;;(fW9esgB)V_xCN_1iI(#l)gLhV)yj}&-(VfzupquB=bot~B)-AW|OSwseNVoe- z)Fr-nk-_R6Zg*kyz}Ou?5Q#E|An({6CA)FNGj_{xo#sj?par$vXfSx$;^tf(V;-jB z@Um>;E!zm3u$upGfDf_^s#-$Qz_N1e0B_BrnA$_;kYz9yTI)d{Bg-u{k`+UyGkV=S zE+$duBvZ)Irl6b%Alb!@SZ9f`w|6M?!WL6yWEGZds~v=A=47G zgI@)j3r|BTNzD;=kRH}-lzNDiP-R`s zj2M+QkJpDP>#|Ih^_NNif2p$0mCCyP$eV!eChh}nScS0FDE&eI(wy@cE@5oWj6a|> zH0JmhFLDVhtB>yyqk&VAR zY7^@1DL|G0A;}fa|%$;DFE-J%3XeZ4W79(;O#K4gxEc-){+YF>3$$>f8tI4 znv+e40n*G=t0Havi!cz1PODWbht;Z9rwWpPC1QiMX+>)7iHcP8S!_Vv?uptV)C7;V z(WX33@>Pc(CqB@|F>?6T%Y4vqrT4bm{WWx}I?FQZS-`9}de!ei zoL@A$RgSAnRVY?f)$v@__N1w8$8c@ZtriZeRd=FRJv5|N1$ko}Y&aWBj-lv@9z)d= zO!zd~9&@sR&c_~Z7}YFlA02HJ(TV6Y=vEI$*KxAZ?`%N3`keLwR)h@~4g^|5XdApI zQxCGtqI+E`-D|kGT0SsRNH*)%7%)ofR)$QMx?Q?Ct(#p}jOG{7m#e3Ivl1gx*%)N) zAt~D!(~&Dv(oTJkD@Ifx@v_2*m-#HF@V!&8q>$r{iEe}Q8P1tH+hnfJw@TDH7iQa4 zJ<4#fGYq$do2A)oYB{pUsW>UDE|O+--e8HmYo~c$N6#=H;nfAL^XBZ>o*1Xs2dk72 zN8u$Um`d#!Oi!?tBnVdkZ`XwgDmmQoX-Stt!*Hn-|uS*1GQ?_fw~08^#Hw)sX*&p-Bx6pj_`sy}?fqsg#p1%U4sc5QEZBnV7_^ z)H8hJY-d<|m|AU$W<=bpBH;p=S_I?fTC4Wrm7;?9Lq`41eO{_l|J<(W5#X-lh|BU} zKeB|(Xx=Z4*dU7aOVJR(&4QI}zyLz%Fv}aT$*6X5IIj{o`<3BCb-ce#Ju4PHMjmZD9Ucq)xLM__x)-*#hWWOo8qowwcX{;J{8vEbJ#L+;@3P2qQf z@0*CDxg0{s$|WT$mmO~G$?~W8;Psns*QnTW|1pg0L+IQ+D_f|%h8GwtD#PO{!_*#} zyugV!Innh}+V4eaAKeh$7E~2t&Ld<_{UyxU+mfn8xMz%WuY{cWO{=M!q^9;BK~2q? zoVo`IhC>O6xsHx97#F$SIeZzZoVT>-IHxgtIm3w^Fb98TTv*e-2nJoj{~S^5*ZVj0 zag*&J8uoqO{?vK!{9$_=UK^*qd_=P;)SfT6M4iORU@l+O{$%t?q*Zg=pw6SXLO+!& zjcMM)=p%R`PDY0KRrBlgGJp)ARz1n^QY)zAb%d(wKgo;m^<26$fkj_162Deic%^_k!H9)#Q0k6DM zpEPyyke!+>#O`d-4{!i5p}6EN1nkb$ihUm8`9hHJIm$+#!-T7bt)61KmggHIF2Z!I z{ivy9=i-Hau3wX9?oS%X5%=2GRFSJ<`2(X_J0olZGvAw8~M*W5`TBBL80I)j{Es1F$U^F2(!k5 z#z^p7wvmPT$#XMtXVD3`^NQdPaVMTJ11I3l`@;XnV$W^fk<}M4+>^01C}$pSdqHEr z$D>Q$v&-DBYbHWO9O>IRaDR5xz2#Ph)b!<=iQrX!ev&*H=(NbpL+Jm8+1SA1oSqGH zv*6UT@h8KlJx)0`d!5sTPrLm*`J&8?rY1w%!8gvwL1%Jbyq7Vk=-2If7T%NkTd~*sKTg-^r>$Dv zhcl`^fi=93jcG=;pJpvi*BAK{)ORh5P`W%dWG)n=x8_VZ{cloZ{j(8c2No9q6ELSdYu6|sYcr<_N+?B1p93N0dquK)ppeB zarPqH3P2!NMSv^h4fjvyA*6DZ8`qBDWF#=lF&ox_|E2c_Qu3^fDKSiu=svkUwNEVOgG7y)%hl^MJjhY`cqo_(QFOKVD#XY2w z@{mbsB_&jH`72~(KuV8NY%3%sO`*q>wA`pv{1rX+;|Zl)6Y;OEW2P6lU0;Y$N`r&o zx`}<rq+r;Q<;4^Da=Sl_ zlv_($@o<{k{pD<8TZx^dSm~1rei9UX!F_PtJSL}J1s}XRdmgoa)r9jEY%sw}q7%hm zH{sC=&NacyvimyTe6mQcMtJ#qwkrmX*f%uf8fWN+ejeZQYf@x!Now;q>?hsO-uD1wL{4r18G zO&FVFC?n;F$U$Txa~>8h1Y7K&9nv>c4r1_eKKwmO^W@jav%S0=}c zgSN4-7fw$ZG(~Gkei}AB@T(y2!`j#e4*?tSylLTamqcBHreI14UP&ZlJ6}^}aGC>JG{9rkw)ZXh% zrEGAAM$Gb`Lp#i-G?;!s_{)%c9owlWjE<*H^MYNfcpo|zF$S8gJM^5fBir_Ru;2oD zrBgA`qS0IZl8UBNb?TtDgXRlP^NwzN9X{0HJ@7lSEIKQl#`p*$!LNpGzvnve+(qND ztP#F4$8#ysOvIfAImy#ZjwX{sxJ!=NRxvgfc;w8~(> z^tDHGX=lRD!BLHXI46%xN~?Ci;fUJ?IjHO~x{RGzfjmJvDmJ>zI4p2G?=GMg+e*-3 zEHw6*R(NwfoHOvO8Mc|}!-%4FB7O|Ta&7HjAgrTT*Fdn*QQ(O6ErMkPARNC^_fd75?ZtC6Xh;Vcd;>mpc4 za6YL(&cK*l6N2T%jkZAg1>Ag-#OVzsA|6jqyz-rM#fnw3e1(X{y{!%IJ8gxiz`bpm zII*pze1&Mpy>0KAN)`pUw`D0AdBpUET7mEc7z#W(5VGwzmn=tEDVAovrSw z72;RUX8*?%n5T}d%^wGiRUtFeFwYyums+3aU6Bn04gQZS$mT`HaXiwvus9r~Fcb7G zt^oLrOowhR33D(|YG1nnz7_9_ls_QMb#HqDM(hW=4dvfuBsF-CA4o966OUQaQ_eN{?F%)3Z2=a0QChI(ck!)R&UzKtL|Sx5PzoU>%rb0bEzypDXHML9AJJifZd&@n$Al5C+R9Z0D>0fj&BFC9RT;m;vYVv77|AYi2IK7@c6bIsbOn zgys4ZDq!fFrzRHFJ~WZcD9p{cu9VJ~^{X-SIiMTQj346*&Yh;-0SKMNvOK(Au=dM~G+|g!oPLFUp zl$2G$9m0s-9r{BZud;o zpX*_FsxoY;`?73Zj@*ev&R_`4bk(!0qII}ts@)6Ywl$+^+{=?^p=&y3Y;HK4=k^@p zfscF!R5Dz==c5dyGZ@{%2%^sO($m4vm~t~r{v~qY@L(4|{A-JE%hKV) zomTwR1r9DPU_KrCPG0pQ_b*u#-Oi6_ju8%ddwnBno;vL8R#E{AAIzSFYV&|NE}9)@ zOZoPe16%}l-sTybejmnNA|sYMfu*H^V`Xu3?_OiEny!eYYYVrK?5${)TP}9N_Jsz^ zRCS(=8*&PQtbe`j`trRkZ>#=+@IeYA($y#BHT%lES z5V+Z2VRjC()alS-66ED?JLYZKcAOUPMzL)<91zgU$To^>K$s?Bzs{bAAm z18a1UB2#S%)V*9HjHtrmW=e;7(o`}ZcM#&hx6n4ZtCc%xb1y$R_h-Z0W~Ye3jB;OW zbKie*?mW4gxYP8WDOT@cGlQ0b{!2fB=!VO7FF+}OAcB8w;CUU3#0b_8$&2N?t9m&) z0;ii8>!u*$1ql@4$FdMMo7~%eKi>493F$t0kTAZbYNSJVZ@o_`A?e*;d^d4E10PiF ze08W|Yj=?VO#|BWqY$-8qgb!aIyH{|g>ZbM@f}E12!@ zA<3(>Shm7!DZKvvUy|Y-Hn|vs1!3%uiG}JGz>IAHZjJT#w-d`HwGIt1y>bRw`o3Sw&Y!H)CZ1gq9ld zNtohe`~X-p`!TDYnXE0BJ^r*u-ymmG=c}`tap%zo`$Uz zqi4*66%#~$$fVUcJtW9DSaMa2csNTNX%072R0M9u5+Ca4$c8U!77%B1e9gF=4ryAr zrCdFahi~>Jr9tD`<2iPexKWtz0qs6&#~W4y!3>ai`qW_0V~v?*76 zHC*G>72a6OZ47;b#t%pyYD1DsKML>#MmqflL5Y?p_#DpytmIXI=J7ZJPrCtM=`?d< z9XTf%`4AO1wm-1|GO_k3tA$$aM~_i8$I-3sl5=(TbM&~x=DtgQm-Rs^u>OG6D4-0bQh`D5Ibgg%n zph%sE@aH{X_DzBIO{ujUIkU5VjGZ+Ca|G?G(qT5`I~NKO@DijiUF2Fu#04?9q94j;)y)Cpy!v_!Mn zjjhqy>0X+Y4Cx&RL69Xi{0sq3aHXr6Zfm8gw5)^>by)S{HrA%Y0vd=>nIF6H*GxpO2PYw3cHjWiD-)sLj$I@r{2$N|Ash4kBDw6Uv) zNY;DKkZ2ubFMWg7{yLF+nttaN*P9Hwova(kot?J6I$EnE7}9gSq1yRmnmdAy?R!y% zm{kLF!a_EZierXgS+VAMh4Z{7XgC55L%5J8^!)!(_b%X7RcHQxPI7<)q;Awyv5iC8 zW~O9dENN2M6Poh@fW z2fgZke0UQ<2!NL>Uaa^SiI1R2nf@e3@Z{xQ%A!gP;*n#ue0~=hKO^^$RPOi82b23v z9&PSEo&rx|15E7Z38RZ1U*YkOn)$@@JbC$-A~qx*GdU9*`QiF$a;@V@TDap~4dF|i zz+RKnd7awL(PJ)4NL){f?vpi=JA$iRn1m~7u{Ci8{%h{G;tc~cr7~0|>WN4RoA`q0 zzU~n9cbl&NCC}WyIq4Z$BLP?P;|o>VIAUJ2e?L=iAY$kw7zM73FqQFaVKy59`4$}j#gt|FET1*mVfP7cntncM$`U%W zTd|!VW6^4*4ZbN$krnVRv#Mh8E_Bs1A>EYM0lK-Ls9Weh4rAz(_JH27fZ$Vc!=@)} zoA>8@xAt$0gUgkBCB1G5CQcA zj-Y<*-X^ENKV@Umh?;wgF?*Czm(zY5H5k62+=vSL0fFT9q(9hV6k(kKDErwU^DqKrcM_G^S6N~)^3QC0w|Pb@yA2^sh-_%z6LjnsfH@15o6{f#N3c#XysD8Vt8%p1eg^zTOt8bro7zo&_ z!sEb}IKPM%ewkFKeZhdT^V4M+j>SZ7%F2pvp)Gkl=r1xF(CP&6G_Uk*J3sX06?H<{ zXqkR!kZRCCjnprHkwU)|7%LclVQ0F{0?sNY0>1E=)io=Ai%dFrA9YR%Innz8aT~Xp z-pwxqtO*^)uOR7H9oDZ9C77(;iM=gr`(m>i0*eiv^HWM5+ES(;i+0FyGXs=1xE@$; zaL}I)XF;KbA*832S|@6J(Xfn&dbnVMRs{Yur(ULh=2Og(6CG1*Xh+Nb(?C;|b7EJ+ z9TO)jeZ3BT&T6G=E6;3=7Jf<4t*L32oDS+Ja)r_u2>H1iCxk_X-x8FSS7%e=-~AH! zBS?%^fqH%A{10De>1(X~{sJwv=tuvBnRy%qF08hf!s8VhL5JZ>eX44*2A(uWOUj9@ zS8C!UKp5+ZiQ*IH_lVoHmHT#}l=UF-d#=nX1<2l^zS|ZQXH9sw@dfOBVfS4+LR|31 z3!t^r=s;<)BGM|5NvR^fL{bo~JrcGa#y(0GgerW1f+twO7zM>%J%N6<@o|cmG5&@^ zvWEtw36BD+%!xjaby(DfDr>0n%oD$jaQ__$`V)v9(`uM;_a}hY*4hY||@Nk!T_zDN^W6 zs8TKI7>}|@Gr~+WJq$C{(L+BG=c0obNOcNZybvE6Ry6gELr+eov9j@$M1HwK*|igKY? zii&!?w6KpaY)S0(?GA3#7#ia(MvD5G%y!gq51F=Z*MQFiXR5uR{H?YTPtiXan8m{> zNMrFSL7qOsle2P4NWLropi~g6d3q?Yt_*V!I~GurAOIzEKoi}ug?-P&5p(T+%$;Tt zutb@XGNxd)a`GpY%jQ5eV;6`dN_6XIsd=**lwdMEr7x&^Hj+vGmCp1{ehr&VB(-WU z|BD1wW8^AD^*~y=8K`)Xj`8S$5!}fS+(p3HJy@xplDF|*{3L_8iU&VhNuZx2 z1Ir5w07|ssMTM`}qEY=UEqt3FpsQ1$u#7!R^w?%nIEn=R&ot|}Qb9YH?aNth`nGv* zU?b~)Hu<~B&$6oGvT?ae&=%_z<}7=U%xb7&*DbNR6!BGoRy2Qs^;9D~P^_%g=8562 zr8NdQx+Jv5o5ejTRO7zxV<~wW;`4q^B_sc>4~1t~FkRMPP(0eO_%(r@N5`V>sOU^k?AYD@3RShB7|qmZ|2AGz9hnG)5gdh0-!2Ml37@y zeIl*I;t;Usb4~7UiUO<&{?Y`b#k^8LsSK3fI9IHtM$yQe5AjJaMfd3yND&|{cvXge zKoHGYqrcQ-p=;%PCisDUrrTeQGtmH-7B&OJ@m>IB{Puzdvl&6*4!ttnnQniHGH7=t zo%84mC#WF96cSz;bYOfUv{VSW`)Q`xbakn*69n!<*VQ|lgo%FqbkQ?f5pl*Q#in5cd zG_V)1AJbfHnYvFU!jXq^g7ouUv!T7EuVkBwZYIf}ZKthC!)C*jOt3zVPMZSUQ|oLY z)LTd}Zh|G*DnM|VHQ)tClhSg|q3iO6(xUh3+_B|7?;$Uho`9!V5k5fsoMl@A{#|Ta zC&D2b?}6|d5D)-FzZ$L8dV1XqG;VAN^RJeFmHexMQfa{l5MFp~;9mtuT;s(45z9Ry zqt<_*WwrSw4CTvMHkdR~P|ky}o3z?^a%|q`zEkuFs@xDhil`F&*;#36YMpy-$P1q0 zOuyIeCcg{qe*ma=YTNBB{RhEglXZ)8-dZ=hI7DfA-9`=X2)4YN1Nl;ZC;BP&G=Oi2 zz$&x+?@pX7!xQw0Mk6X+ro;0%d?DN#F(&pPwvt4-Qf&w*LK$fpFiR1q?I)TKZHn39 ziuE^Li2pZ(6=tltMQ-+ovg{1_qaWC(xv+Df31A)$I|p|pzK5mE#H+CIFyI2uOe8c> zlNrz5P{}Em~1a zM>vgR(d&3xacANt6o>S90Vv(Siuc#QQmG^&g#N^AY5KB1D;T%awb)VIm!7EOY5#8% z3TL7Ai@r#hLp)_590QJoDxfjRrYD(oV3f=&FM31^QRC(#!OKXn&a(c%BD3-W@0x{p zYvMc9aqtXO4Cu}Kz_F7B{!r~VFoj^pKe5XaYqZD*tQV*4X}fA>i?%%?c9ljczcT|6 z;C&+aM74mGiQ`l2u7S0Q-fDdgsIKz;;oAe))00HFMm#ayIpX6VroO5H>-Vo3>RS_E zRL$wy4x$$WapO2p?~cT7D5HUA`C#H#Hn519#B#Bw*G#vxo4L~ng(=Uq?lTZOehwv zpbx^FRDA;vs-DAjgHqK`PFJt0`8Fh@>LXNZS|4ks4-6MwHBrK%g_klXPV{sTa#z$e zfQlU}vXN;rm49(CBD{6VvxB6NQ5PN9ZJl<%=n&nOFl4%I>W^+1N&U9lGOFZQ$t3KL zyhg)xeIHE4A9;zx4QANQZ*t6snzwTmN{7;ysAi>@(FSttBZ8dnsJ=yenNNDDTIl5+ zsagMlW*8_YghP2zFHZ{LpjIWjsWjb(q%`Up+MBLvy}^>nHt1S;si{}T!VLhO6ld8pYzl}(1-50xL@EbCGipHE0giQCWGPg-+Gt0XDq4$@CCv(X zubDnE6t!p`VK}r#9lf%FpDdzl*x4fpp8bOQZA&2aXfR-boA?2YCJE80SwG9IAd4YG z{SG8pqsvJT>_Bcd53jLYwH|Qh-w@rL(BhG@4A!yPsb(Vgqvx!;SKSmYDv340s545A3WGOpEG7G6o z5uR!pJSjSfvC3~XhB1f@6rIfoSMfmt!*;R492s_i573R$Vfyi>QS)4teRKwiI2 zlWJopT`flIFGYGN+%!9}88pTA&{ku6NXN@FYGT<9tW8i3S=$Yk+cf|{hnX_*+gBAk zCx8P>)QZmhA{L9P4Lr+Bv5)iSrO1jmCLIafF#mUv%`1&;4z8A-BC%|((U0DBmOY7n zv`LU`o$~H#^bWwehcwsnTs`KtshfV=B+aWewqZ0WaJg3NA9r&yhU$ZF&hK<7 zZpj)27na2jGap#k%>eMTL_f=oLY(NwbwT)K*G3cgYC=JZaGOw&EEpRxv0PNugo0#s z8T`qlvO?5MDmz|?W1XN_9_lIdtQX{==vC7QiJ z8w0+DH(c4cA5{9Zb=f2U{2;;w%HD)a)ir~+K99SgF{b7>+Z{(QzdD{n#m102DQ!rd zlxaw<#>}a}KL2j*sx$r98eUm|Tq$wl2-QtR?wfc|UZ~>^+S6#AI=Fc%o>`NIxOqA> zJQF`y^7lnLjW3|y7tjR&dJNT@{?bAq}WeL|CnNWiLX z&@|bG(`08Q1Zw3tI}NFpANK^DhjEwDXAX?8Q2|1)Wk;@PEz>~AWdsmA8FnU^l0!~L zf6(aqQ&Fb>BXsTlQL>{Wz#!96xuHxBCKVulOTk)*@<-zf_wZ1Ms!|!- zvWmgTk^?hBtK(UOkga$uN1OO4aJu_!Ch>Q$iuH-Le%vQLA&O>U`r& zEvGtnqEAUgG(M4P+(aqWa>=k`En=-Tw(?AXM@&mNPhY3~YX&a9!gx8e!MpWE0d|%> zC>L2T-?azKz5Fl5b2ztLeMAQ7cqa{|QrYe#zC=)pB85%65hAAs1A9;jBKbM>1iHsw1HPdfyINd*t$cpQFUK|Xgv5E87iRe$PSOJY+fDY{P zl%y$Yb9x}^+)3GPpN1pv20K@7uj8$f{yktoXk`rpLc<7Pd1*ESQ=@@7cu)e{4nHiz z&9JmtxnXJ$P1mxssW9X=!@eEwUCjj>7w$R@h3)!dJ? zdnr=i(?2Y**LJ!$D4ddLMbAA;RBcx+9-OSvaDAfsk%dVtU2;&r(}C^E(6f6p>X zx33Q2h%RPgzb5%p3zA*^M|BlUue&Q?7A7mutUU%YGSoWH)C`pa4RfJ)6#Ci#1saB; zUGNePDmH)o|m$Vb}OdZprQxChO)q8sTGoxBUnE*$}u>w)2@=8z^U=q1_Z*1 zJtFltN2{EE#xQP`m zTYMRiUx|^y)NbIdcxcPqMxsEuIlM?dbtNAn&GQJxhLUn8VxvFI_FNUhc}g&sJk61S zV-?Pw_M2E9RHwZ*&r014Hj?Qe5_3sxoiv!I5j-VD@je$}oND@BZ3BaBH)oF`lM%$# zb|Z+}wo5Qo+eJd0&dWjyK^>h3-@*PSPcYuD5*O-RWPH06@1Cgr#$;-Jz&Nf;OxL07 zb--#C1&Zz)x+!HPi9NN=jGU40bcf(#BkHlR-=i5u7*gtT^VnQxQjPpz^Xk#$U2VM$ z`%PYPUz2ya@hCJmc3I~_lh=9+a?h*aj!))oGtPj715z7|U!dBs$awm3;9hy<^e4DX z|2Q54iBW3&aM4eLaz|PQiMP>i7aII5J34;e0WKSRzmLU?y}>C(15b^RB+7VO6isLc+{-=elKJDBjzMNE}b0XvXOP5q78wBqa-^Ec4dpMu)4K)l0j>nl^PGDggYxgFFIYydN-2B z5s4OXl4|%1oaPf)Uk!hRSF48qP&3;_1D&qjzT)ELp29`#8A{{<8jDwwy-J$6cY_f# zA{~es*Xu+dPab3iEglKOSqa;)>=rFDSeW<}S@4t6^3h*n-oxg-B>DbXy<_@FAi(jP zJbG|0uBd&3>+rkEA+<^sAFdjWxXvmy)xRP60$*ryA zR#tLrD`Ou^_cT`0Ls(R>uk@ayT543WED-vUrRKU9`}=kL>y$@9xvBlepS03_TA1Wn zMI7Ohs1hCg|XFKk% z2%K}zaQAsuBtlIM=uU%VHP{ajB_G7tKR7ElTgH5j(8GYkcs759J53JLG4D>bC(0pyC@ih%MZci)`s3UWa#3q^bkCI0xOplglweaC6 za8`huN6T~D>*T4Dpf(47tX;oBB*BUa` z;OYv53YU9Lx6yX%hCJo#)@#=|*FK*3Eu^4$SIhn(taw8?=boZEWWa3NWvGNnE#4Im zz7tkhz?9||FMX$s1conc4LjKTvVDPcfEb$A){Z8O&VsWdh#J+5EqF#3#uRq<$;h)$ zs>xbkHF;hN8a0=>d*-hdX_N&>CnM+k&%}z3P-Lph|58!P{Iw`bDY^X` zq{#v5$u-pW-4eRnn}K+70Rd%Wl1t*PWwyv2PGbmlhBc|UhtAIcHDWC z%!y$fcs%ep-2VGX)9xtENgapN38~EEa2v@K&#~e#lv{b@#%gTMvDRvA%(2qCF~*Wf zVzh6OP2BNze?J)LtvL^~VBMYlj*qp`^Vt=%c=~cSsG9g!-Wi)v-#`XZA_j6Vu_eLF zSx(m?dys%*g-+KA?3PJu&_vTa9PR8++`8G+ z#-cLp3Im7v9dL9aZjVfi%>GnX%Nm*31CinL?-`4HY)|h;3%64Wv~Irji)2-6GSdSE2(&8Y0e6wfsqE4w@LVHWElTR%#1LOyxf@G0}1Dh*k>< znP(=Z(puktK6&TLzmY`0M_6h6GDp$$k;%Dr<+2mai0ICO^(iSldMmI%?J!8Bb=i3h zLO>NTlJLq6ys3k^2G+>;mkvrp{Hl@drw@P_xp)AylbmRK2DEDpvzP?tJ8ui0jIXBxUCDJyL zy6T{;WyoBtYL?2BT*+Rw%Bl~(q+G{GtVL6XQGg6cb(ZoduV^5bEnYX@1gRt!|rEkbSuPb-1Ou8+V9)%mOm60E4190MhD;t^&qpg93YR;}HT!InPJ)B^E(k@`OVw{ziWw)}$NT-wffjTO!J6gC@QR@MTh~!545PS2pUuH?HiOauPT) z$l%Bn@cQChOWB;2R}a$_lt~&TG61s3l3SJ9DN1dhBzGVU(?0YbY9?hm43d;w7(azi z2Kz5gQ>BYpY8h0?r(K2~8QNv(k)>Ti4WWtSO+zphW?&qYlat+RgF@6A)TljX)Oa}q zH6Y(<^1)c-2sJ8%8Wt^vh>VDAh>TnkatDjJUd+21cX5h@OtBQuv&p$TYpoEMv5KSXD!0HXM`XW36pRZZW5TrpPRUkviG_0j;4wL)WL2#VaW$ku6b=_1Zjq2P3h0 zxRxCy^RN(Aok1J3R+~<|L)8K|Drof00XEkkRTgvA+Acvdzi z+c%@ZbUZJ8l{nk`=9tSsGC=}_pM(Uh~%5U_U)@jAZ&Nr?<%9*gI*w2 z`QpFt;|V)Vp7Y~w=SMvge!oZg31C6Ey+`9e-p<>EAMZ@14SjU{dcbnCS7-Oob?&y| z5$-^Kqp$W#48gk?t??RJ?$3m=UCx`%ajRWkG+T%2xf7>#gpPKX6^?Va_5CxYSb^i> z*M*e0w&&$hflVAO?rBLt)n|U#4+iSKOy2!hkXN_jUOzCet~QGnQ=O`bpOfo8#)Evs zOPssfKAkJLy4<#SGts39Z_UNx1+?S7WaR0)*v`wcmo*e^ZrMA`nf?aZMmwDgG*fWo zv51!i?tQ2ry3uNrdu}cgmNT;TdNY$32Iue7NkDh=yv8`P%J=ec^=SRyQ5+Domsp*} z{YLQ?UBBhN**YRVRgn%{^Um(uY3s83;}@orIFL+m&I?10FJW~;Zd<2&*}j`Ay)x9Z zohy4e+ejoUd+k?_JC*yl=x71MK9V+MQFZ$!HD-2Uq5EJl_N}tBIKjM*8{lxm_>5FC zlhPT@83FBUhXN;d4$GZh$Y@;1Z2(+e4@Dp8c-?B@ zxgi<)FG}CdwbNy+5PV7MTy(PO+C{@MdN%KS@fmq_raya5P4(wrcue)@yXi?_2lWH% z4~^DYg3%oE9O>UO_6F}G4c6i2O}vYdL!B9q5;gQxgKs-c5ZDlbXFJP2H`1Mv+Zr_= z(!JR<@B8r?Nkp4*y3oO5TFXb1{V|x9fmZD3<|8j1etw1v*&g(f4O54?FKw;8FU=fu zb%%pIb3Kq_EXY=dRV zDrZFN^F6QI`Am0-bElS{tOez@ydJ;?@5JPO%vu`B_8Yf7 zLR+`N%3<8&g@NO*~~fXjtVxeU7Y={+Ou4o;7*Y&C<;#_Y_|1j~ORfhUc@8#LBMat$g=>F3N$lpeS`KPY+wse~OD z!-<{tE=?PB@_1Olyt!b1o+ba5UbeDH;J5!(+4&9UVoCmO+HdJUlyb7@{~PSxvQ9-> zH1qC*@pITTJ|4P1&&Fk9>j>za|7t@d--*vC#kZ zK0Pt~nfo%|9B^OeaKoTkQKJ20ki(dqk<)X;oQP#tKNr1*C-?WqZxnlV8e%zdEmo8B)-(tC41<4*NV)6%kbcuK%{1D8g4 zWYKyk=h!T#^&?PDWLiVmJ~z^rHmrm>@4Em%qz=Wum?wXt*p{Zx`)fz{;P}%sB0f-d zI>PkiAmMW-D>fSZW4DKl{O9H%+xikM^6bwnL2uuo3aA|(RT8jl1PQRjY1_i#@Jz<_ z3*HmctZQ|i8!YVW{Dtu&$cwL%;$;=C-e!f7(qC`$&8ep){!^^Kw>g?h%}PB<53^;Y zciAUtTlPsRk$sZFWS^vJ>CcINQhIOe9$MhuJO5s-VYoqT4uvg0l}0o6>z1ENDUw1+ z(rJEDyfsKO#A4%`AGmLl#s2vEBoiLt=Wq|m(U{7SWYgCxM+Td|FqNahhtUsj%FI!m z%Av?wYR7#CnXH zln^mLDMXYVEJTdcaHoZcaR&(zQ~7~T`2Cq9Y)tm& z|F`nP9WdIY{7@*S`+p=qlpMSK016$q{IC#%+F>T=2n_1j^~XcW4<*MYKY&5UBR@>R zw3U<}zN}s)C+PnT`QdHcTaI6T_y^|nZz@0BtqQFCFfJ`WjC0x^J3xN8m3Jes-EQo( zoYSg*+43Jli0A)BjJan_yTk&xF%;P6lTwTOhBlKI2`hemvtejs7D$kAqLl~adu|^2 z4C7m5^Zig_h!g$r0r~DwKB-`00`nK!yzLTHoamz(Y0Je;-JbHAx=lo}o-qp~$xPOw0?>A*D$rC&tkQ~wBWP{wfASR z5L;&Jfu;+V7oI+8b6SQ?Q)UaNa~(#D#F==aCE?wQanvFM@dpmlEsq4x>3k4lPvQjJ z>}VfG4mEG`UkgrL(&>Ca5GB4X^x^%P(avn%LE`S=x|;!S2#&l9ll^`B0Du{Tg{AHo z`g@rUOr-kT@z;XOXy5l(1*!JU6u|d6zccoH2c7K|5yF}))yCzMN35{*_ zg~NhNQ$ml4H_gmr5Y0oJ_M)>5B98{uuuJv^I{VUB+a$t_Izj&kjMq)A8X7FKd<>6OHQXf6~ z`q+`;N;|I8;O=NnBF8%^%=IqTT0UmBXP3r1?E5AfUPvMDvID>!CzX6#;Fdr4zUS^1 zaA&~W-JY7euN`LY;0QXNeAr;$sn|k#Esio zQ~o|^;w`q*0_U>h5dECcIlUK~c$$@Y=r1|=%$POSNn!I42Bg!u(yWyptrcAUEkLc8 z&DM>;y(AY5&Y6*1B%9nBA!oq_%)W6bXu8sB=<}|!T|a~;!IAAh$F{%gEO_=$^5XdZ z4aqUsvBhHZ+_P=P7L$(|_0pKU!!;w_BAvn*K>I$$_G?lrNt;AZBQ^0!1~Hv9SV?`* zu5{8{6(s#;K+<+4eP=+@MkW0L_LVMpr;=t3NcwLjeP%$?A|*+NN*A23q>nQ?Hc7jo zSCC{B$5!7E8~a|Wh`vuxefQ0AYVJv$@b{e0L}#&s_do$M>)C|?!7g|Sx~$Ca|kzL(a zTizMPC+fUB=vDkn)|ydNJBEao4Se0u@`k>anAD<;PS>y;-bm2}$_4bZ+UfdsR*`^@ zb~pCCXEGOW)L|-Mlw{Nq-O#G@gV8-$VrX~mr>Lf=9tZudZ)H=uM(}{8=MtW4RNPJU z>>X9Sv1p_5Im!T5lvtzvfal%k@m123(>qGar58(&NyNM=8fN42I(#XJGJ(qczuIJ#4;iFUdxq}G@QGw2 zE&8C$4uJN`x(4w(9@v5$>j!qe6Z_Gz!OlMJzQH^wnJ_~Dp)RL2wiri6Xhag9Hme~*}wF(Mi=R+KO#Pp1`*pX?RCniztC zh*ex-E)k#YEt;t1)pr_>5~R{&Tz8jHp;3T9vBE$c0baHLO<5#7X{Z~q^FC3e=lLt`nB<88a?MeIv!wXm4M(cG(y7O$##b3d{?++@v zmrR2oOPzCv4CVRkAw|7I-?IcT5iyykjIf#KIvJTyROTr|iuUkpV{dNsYp6S(8m=I- zZx0f|fFN07WT=ve5r_g#;K$lY&Lky?o-G2#!e#K_9#D_5_8w;&%eOS1YhIb+(Reg@ zw>L95gu+&w-zwbx($_OP5_dl{!ZE!b zZ4$J|rqA6A#Fm$v(@^#~GwyR{JT_siQ?Y5nW?tNfn50s(NHMvDc(HWi zqJ!zg+vhN&tS;}yh2V_SS*`^?%ZaX)oy!u20R8K$pJfmQB7Xj0@5bB7OTKynejJdm zO!>sGZro(xO&dZ!B70XHkS|~PsF$w#v_OkeRcVR}AqT9eFAg?zfNZT*(1k^XOU(DM z0+WumS3a3DNg@%PJ{b#P7)P)ac&ezuO*qzbPck)(^McL(t?z~~h!7O|gkUTn@hdR* zN0(^$wU7^3`-T3!$pv-pI4$vv`=j&CoypZhp#Y6N)Lgx|6I;Xxa%%# zd1Y+;HluJi=WF9v4JPc=J%&VldlhYN!j8rrzEfc2Uk)riXDyY2Y@xXs zCrVsgfc~xLjI5S>#u{eTr!eV2oUkL(sjJf-zf-8`H5A~yaEQ^`(t0@fn1-)RHaT=5rCMUge^9%djHy-Pk6WO1U z8sUfn;(a9)pOUW(@hKzS*T}_luJmST!+-RJgj7y%R@L7i~gzeOvy?u%cy4V{k%tu z?D&w0H#MWcenZ}2l_PTAmvf!&!^?5VT}s9f?AlzNapLL3v>*)^cvf^77e6WB0LmVT zJj`(Wz6;4KtJQAhL&{#+uyMr@r|_~mRoZezu*_d7I~Nc zaEG4FeSr4;?=p|itdjMK)l1ZSh#G5+Uw5A+?J)EWQ(ix8B<|Zj_C3rTrYwp+l zYYmFG#5T;Gg8O3`bGTg%?jZ{0vZ)2}j|R3noh1sdwqD7&-ThHF2F8D;t0x0n)o~l> zrZsnB<5~zx8Jnqur&~?##{b}|&N;zd=YFYKpq=QeBqCaF=LZKTVMjTun=2A<^o{C_?D;*dP)#)!n|R`u~^nEhrUsPbtgW?*4{*W(?jDEW&-HAxEtfjIFlcO&M8}f-|hSc`Bj60E%p|y z94B^~f{@1SLTxOM$8dF&(3FV{+e%$IN-Cm^maB(@7^cCU?DfOy`>1n4I|H zF>@9wCg;6)O#A(;7cFErrcM8N%xvw)w6PzLnJxL4Hss?mvy~syMt(eIw%}vhfRD#y z?{Q=DpcfgNG9Q0L8w)G`^k5qd{_ok28zmOZeWS*BwL6ug^|gYmF|T2_wZ>zD?_S$v zo=v^iE;7%8?_L|_xo^zb_HNHW17@gXu{)z#(gMqRoB<~c$ax! zU3do1kN@TILF4)0a2j6k&-5%O3`^7qT8}R^KTp~Kj=U)Yqa~%%UDL`8y9P63-AyOP zb~S#CPa5N0;p*&2Ua$Go49n_`DXacmE&=^X^XXY$Y}-=>Alyu$ogF4O*6wjKL)GnXyE@l z3Sb-Vqjam=3|kdxyxe16s_n~q^HO799xyMp_GOcKnQ31hHZQa6%Qo{;Z(p9`#fzHY zQkrgX+otO<81@G08_iR%S(_NY=)S1Gq6O1(d9dynwy>p-S=ZuaGXKH{FL%V&e)dXV z;$0lk%N=LlA7j$nzfMtc79X)R7G?!m-4DIpl8U^-zIVP40WfeU7^2`r_c2}|bS-sc zUCx<*9g>W7dy777=*M?L@$-WSWQ0oBRy)U5*5*pHDjfCnSeV^R6Kby-j#CchuSZ0#hVj8OC$VM z3nNCHpf%-5zQ(%KG)?@2hRSK1!e({h9GJ$r&~>;>qg+YwR$D+jt>L`iEzMcfs$&F3cl|7Octhuf6gjy~SJ z%79mv#e&+&OMJd?%I$cC=ib=JJ~$Qcy=K8M+t8Nvq{Yv!zT;o{0P)&UK&qbFD4`s^ zv2k!DmAY+&8(T`Me?mGo`wdDOBIm}oKUa`-`KCCzkWJ>V%_?Bpy2CwvLwa65!R^?_ zSFfWGaP*32Xi}_=@%Limfo;e}M=su(UM&2Q`Pyq)^qDT+C*H#Q>0IC zvkPZIwsT0_yr(FYqsFGyaQI$wJ`J&#dRJWO%#am+*=hr8x25V$g1P%yK;C0PHsx4I zUa2D7F15AJ;=9yQRVgO1hfflIXs-rij6!6swpTRTON_`^0|Kb}8gP0sne<1d<^1qf zSI<}N-UghvmB6+J-@23EY!hHHwJ@;|^BL$Tr-%l*V18K%adGBQ;{ehLzBBzbXZpKL zV{4thfvn6uTF%z(6Z}z~_PR6eEnRYakusnQ(R@`&ICQnjnNDL_G3pURr;DMR^=Pj% zV%4-(TEJ4HOz zMT_n2VB&L&?frSnZR33WX!|zQ3Rt!Ao3$9?x8JJ&7ixLHj>CMZqQCxC*?t^G#hR}r z{F)sn?m%Zmt2s5s_HDi!crxeb#y*$Z?3GMKaH#dJ8RlIv%)f-Z&0I}Kay3Kh-XN}L z!Cg~t$?Yh5_a z@4ux;%$x^TT$omgclKI&C;BF20>iz%7jm`}ec8UVb1{{Fmkd(ifJuWCWAc(AL-nkC z{d%lW%2cQcY}K}zi@}|k(26?4>V*1jhJhHKq?JRw3NpK^-lzMM>~BVAl3h-9NWErr zFx4^jm(D$Mx$T@Pb~mecruq=27mhSdT; zH*;9+z3v&n{b4o6EQU0US-pu-7)y_<>6VSttxL76F$Attz-Mh9w%Lx4G}u#Nf)NO- z4jNM2?G7B)xwDQstm^s!!}=$fjMF(SJ*-cdgp26)B>qh^eZJ6yE1fn(;Yu$&AY7?y z@_*Idlu*WtKY|ldaCFzKg#&sL_SC}Ra@7H0PbFidZd~|ZUVJ!9OuE{mskU%z_*4t$ zfbgl&-62rg-es+>x{olb!up~|;PtoifQIynewLdhUbHDmEduXC0P4BS)QplXMBbg` zE$(Kfl*}$sJ=dcuE%0t&Gi>H&rP_$Lps#^%7uOi(9blT!z*du0m`olK7JDaYzM^i| zJIe?nRWV3cpsP4rNrPbJ8+lcMz~hh|A&LNTPh%jNR~2UzwNP!*z~dm??4G^cYnnR+ zt0Fr(k$G)s7Tjwpk%P@Gxa=(5))FYAL)ew!GQ`EMb`}hiKo!>pLx&NlER{_B8c)&q z3RyGI@MFflZ!8Rnxwu0!l(Ia;+ciXzh+g2=SO$0RZP^z%t-GZ=TfZCJwOZw#1RN9* zfLWC}@jDzsQ`RWvBS`tIzNhD%mUUQ7E2(20$~wYIG=>+)tp@NadPK-$+&&QiWjygp zuYS@uqwGQId3-TfU^39Xk4MeJ=KgJ;E%9~1Q~o&4H{Cq5;pxR@ukY!o`APh%KvT}1 z=QUz{;$zgrl-7a}5&a2h#N0*>WOSb~ zVVL)VQ`~jM-Kd!5S#zDb`D3SK$uXRg<&AG(l_p+)c*4HMrxR?l_Qy**B+05aM5qUB zZAh@dn*psJDa4r8f^V5yjmr6S_*Jap8O z+YQ<)5-v}itRmw7Qo(opGZ2hvNAkt5{)x9XGpz_QOUR?YmYxu+UZSEuVOZ_AD1sI- zHA%d@+c(iH;YB7I%rjP;iLa5d`A(_7G*$puskib&^W+9l6`zt9pFT1^HyFQKMwKu_ zQXBV-wHos}c*6k2uU1dATTqoVWyDzm=1kvYnsDA)*5mV|TJ| z3x0u*v%KIM60{8wao;1Mp0SpSQe#rNmPy!!$~Xh@c4l$^j!yui^*P$vvwe7Ay(J^u zf0n~GV9VXvgoi4NNcafHgLkT(fwj5}IkJaB_AZaqT>?3qdc~C=` z;%0S$zxdT-v6(se^&NVhL4)dSq%|7TE4m8-2(&=N?)91wn9qI1Vupb%_mXD_CiK&53q^Jz%l1r z@F2_{j;U(s>#=Sstx% z4)r-*Ws}w9CLmVuuc^_ggGkjNs|}_?mNx~eTY9ov)@8%c>Ya9nWT)#4XXON{t1W&t z)@>r2M}kh*75lxW04|X-i^9|{6e%+eO?*+0c9Ub*IbRAov5Vyxz;hH8Za{i%rTHk9q6*HCDGNezvMvn(3PY)xcnBXDcW(p96Q^JxV!T2t2b+mZMm7AsE&^EHKTeYy>Kyp($NIK}Z$fY_2_{(P z-3ao`XjsuAYGlog1)B`wNinI%&jQpSMi(+!v?@5 zp;m@a-X|7-t`X=m0A`p*909-}*%GaZO$%J?&I)(n5^UPY2YH2zeyH!x_rM}+JX>Sz z1=gyzS5okJ@B^5#F?=;6hdiNrrqf)R4ijBCFPd;j{UY$8a|bp!M^SzmKeDH`^rRIz-u8hP%{dTebZX z**m7nW>)In*D4QC>^YEL=Ja;TkkW*N&Qu!X&htEAy}*VrV-S!zVRFgfBJ*pl8#9Is zwQtxZhU;mOBH+?7HI$7IE5bXmpYTdEQnnjts9F?QE1-O+%p8xT360V6yKl!QISfbb zGyrQ|I{P0No1j)4Oqd#C@Rq9)NL=oH^jBT?`^<2u>#~z^ExZ|k{~F{Ez+xWk08IA> z;Nk%TF#V_l&??Ze{iXu=QHs~u(=ga;ny{R`8dNnGYn%t`BBDzM(Q`(d3wf~pBrB2i zXL#l)t4C&(Z6(Jw$}*oxzIorHJn^CdqpYSJag?XoQLb>JzsvDQ`8FQxC{NQUgOe9& zl=)2=(d?TYfLRvJq-0%cN@9^@It|8-Ab~-xU{D8{Z_^mmOZfK{Gn6yT4M$%YGL&JR zq5FvLOT&^UH2&+MsY6y%+p43%kv3 zU92|7EO?>O<%%{HJpyi;jhBafI~v65ZH=P8VS~4crG^?>3~q}HoAq_ES!99rV-{O` z#iM~oSW~l#y8~Ovveae~hWHtvY)w=k%3yK`=OK-p6(O`~XN|F?>7%pkElg%O4ja4J z(@(yF~fK@K%L|E&@-E1gx%)PKuuLAS6Dq zM#eX5Ql?C|Dz-aCpp&*X%vc)}-N7caU)P_OW$ay#zxHh6>21z+!=C`+ZTyFBAibar zh9q9#N&)c6Z4FDu*AnFW4A)>RYEpWDR0Q^y81sBoB14U(8u)aNMp?%WnM+U)_FQ0> zP*V854}AtH9;sEL?^n1F*AJWjm7oxp%gThfxSduMo7nk2<|XD+j_w;m=gaZ)QlKOR zTTqT7@LNzb(x5ovr6rVH5s8GDpwDuAU~MJUOJ6fZJr=j zs0Fj2x6rL7yVMe80Jbvu2>_{3Cjr85Qa#X1r%@2h6D89sLYn?1-o-n>w&nmhNfp7A z_8S94!AUj7XH|&{Qb6QxOCv7v8)QQ_WqZ^66~Zp{l=+h$p#-YZlY zo~i+WviNEz;v>}fzX^pwNLxC?2(}NX`=~B~Zt9QFj{3y)sA1Z~Ok9I9sNKuNO;R|G zRYA4~nH?_QKlHuE(`2@oiNUiPO3O+@w7G@51p-)c=yckEG53qk$|8R2|T0rvLKA)jlzVh_T$+3bY1M# z$Rh&~X~zaiCVm46(^aQ*K;}pork?HO5xr}hcS*2s!-wdu6~oEUqzqKh{t~hvy{_k& zVGr)az8NM~0LG3nZb_(ItH|rL{ZcutLIdlN>Igj$*60tA6<|mfcF2B~%4#Eg0GRpHFPQZ+(}|u6IiT)Z#-xn)8E)xxVXbE+S4XrV%^}e*?uSB3X){juvL?0} zM;a2L%HpySRYaQvqg>D23XrSWb-Ly$+;KUyt(jz~(T2!4O@K1TXN=vvf8tf4Isd?5 z-NxsM-_MSdsyl$Dj&ld?a1YsrrxDoC^AMiAjk&CG2p8ioJ zBFi+8(m=}0;(bN?)C?lNkrXz2VqWBP4P9JJkX7^$vs~R2#P#WUEcRh%!Fp1medVBb zwfiXXnBZ$?K~(HL8-DPaGE!1R<*Xoa{Y@l)B4IEu@$yi-GLNvt;ba8MM3B+2F*!$M z2B9Oan&SH$j;fOJ7(YE0bnbf@jKVfg72>WQP-^)AGneism5_Y`v zL{8KP2E?oQSK4}FvIFkqT&ELpv~1AG)<8zPFA^;@_Vdhm*DKQvKQOrZ5#pyDOT0?% zB;qoa*42!*TIoJmw9orNfzInVou`UKCL3(7YZys83^mtrJML;2l4|*tano`deNHkQ z;fqUP4cV^)S=9>xa$kN$S19x$8%I_VT{yRh*cI zOkI;P0Wh%Ecc4B4CSv|IL8dkf{7LepGC!PaG_x}ULqm1E?L7{OUGZec0M#MfA{(wVp@yW*1 z=F%UYAsWU;;aIrV3Gs`Afh`j%+4NW-BH3oQz1Xi`%quNuRZa7)LSj6gSDU09r~N7- zpTyT_+mvielx?DoKjQ9j7W^Y0*&J&BZ^#o3sp7MK%k@j`<>rW3eQX!xU*bI1J6yh2 z;B&|eohb9l1_$FK;?;Ta723PB!JI4Ol|kf{aJ)Jcc!SjqXCm)Rvm453VGOuvOn+1r zPWk=uTgj3J}^t<0XigSI~JEPJBo-JF*F%}(@jb=Z2PwQtmOq_C1U)(QaU$|KN5 z$*imfQY)1T_O!Q>6Vh9;;}enL&ayWH&-CmcUgs8T0>!vhgek0aqL-4<=_+p7pEc(Z zGP>J}b}FXO@ZHaleaAxw#P_=u@OIh!mGLgu>69?>{gBnOvgVfiu#PW28fUm3QN*}m zV4vSU6R&6==#=^XW!1I(pEM*sNrp1`;qZneo}o0-7tL_m7ah>8fdQ{RT6cu_YRSNb zp9S1mrc-{vq2rAh>4)!Zq|v4~^~r}PX=L#hCf6`_eyi0Zeyuuvl8(Mw)*8DQn!zn8 zvjU0pC=Jal2QSLS*u+=4MoMH9zKRMG7EXZ%VFh@(ujoErYs@L<1~2bw(i=z*=w2?V z(=~pMh)Id~MZDZo%pSL471n5S?Ts~P54_Su6p98!|F&)2ku zql*$6bWy_j(sIu6If?_(N)7tJpjk(YXLodd^5Y^}io<-MAMF82glJNdL>j#5K{#iQ zwa`fb@s+gXXbcob>QhWTb@S4r4B}y0{r*tpr>Fsv+l$`xegK_5SoWAq&4-pfW~G{$ z#O80Mnt06W<1q*wKhF?4zRZ9oJPyAn>Dw)|{qQJ#Ec9)M?qPyrPss#xQ2P%XbkHYm zedv8gel!&B3End4^(dNs2txfk)`Y(<2awi*g3b}*=OsyWK7dTcC-VSv4BrKoXWbz^ zG;tkmfux4kv8eb>IxoB}2ZjD;tnmDrh%KFKW6}585@8MJ=VMT%w7#jERlqYRDDVolXicd4J48jLXtLsXR$ zn{JnIb)o^nCVgmS<$en8_&GV{&sG~S#Uh2(9BKJ^S0^&GuYQCC+AbV0&kCPK|L9y zW*CnIvy&}TtyTo9L6FAaL>K7CCbXDb`UAuR`dMtZ&aIOGcu)%xAIVWbU4B1~0$Xw2 zIM7i*Ffo?2{#I@tpyFX21t#H226s|VeMbTHffNl`(otYJ&meMCUwlV_KaViaVRB|T z3fxYPqd5xbOg*}kMlAqkI@nP_^T18IauiUr0@f()I|@*Lt<$#YBx*m@xt{980*JGX zubm9td7P>Sn_?yq{tcY4GvvONhx8fmA&>CpNgF6#iBLyy3cdI`-&$%9bW$ES>lUy&QXY$S&`)2^#5it^Z& z_!U9N_h2P~s1(1J3oBl$ZV%(dNoPf-*!t()@3CfQ#xFAtvO+;TO>045xp~Tqr&W~%i_f1+4890hOab*tgW5)U}&$_mfi#i zf8z$~!K2lQegmHaikEY6`D{}s%*Oz(Dt;Bi;gfU!!RgAAhrX_@Gzx?qxx+pCMg$(C zisy;;$uLwAXtTWWAw%UM=k*zcUK@ri>t@={=SpExC0S|>#b2T6@ooH0Ta(!Jp4~4w zOE-<^d3nTHyv}35$H6X3oa?`)1;AV4A(?B_{vuz3qpLU0GMNvp{FW0n6_RTa^)kE# z=~GiiwT0!F{C-AiFnja7?o@$_zmLDjWuHB~zeqRjYBlZ>pW`^S*?m8Q2fLB~*ZPax z1JJ*hzsOZ313Vej6sB>2zli$GjOr)TU*rwgpc#NZ9_#>o@ctrYz{Vdz{vs1hHOK8Q zq8|O-{Y8doyIEfBIpm5jB#u7DI>i74b6%HkuSO zhKr5(!Ktg|Rt{Nhol5S9)+oS*@&sNBJjOmyGmi+XO~wu6W?uN*#?KhvlSKX_;@cz( zV=|Mwl}u6VG{RXdYkE!kfH<9{L!4#LlB)8D@EM^5_5;_Hpvo;N?AuNNt3)#fLXP_QVXUGb4>4G= z^5+V0NiXAn{SELTK}gK%t2_Vw9=mFF??Zpd3$wM?(FzY@qIK@dKXm1vxAIS0rO#UZ zI+i|bb-=N&fk&^BL35VpKGSnd!E)A)=`e?4%!xIuVOd#Ng#Ww&t2JuhSr0ILi)>`I zi^AEsF~zpwi^AEsF~zo7)r^c8$;a+w8s{x9 zJUalh8se?FN?+&kb$72+@Q5RAvrmd>oqK9aZ?@Z0yrn0ReOvZh|AqN_Do?C4ohPYJbXte<)xgpY z@7daxG>+mZ;QrREf4IsD41rw?*FtjZOv&66>v{^$3Cb zEf;dIxJ)4k<#JK1hn+nc=Z>UULTb%&v8MRR9j6mK>GB?qVMtiq%_$>}7|F6f5j`(?%IK$(Uj0)>M7Uw_(|OD( zqk2vmg;}#RrJm11F)Bwrufd~hX5&H=_$-q63By{qaQC)!RXXhv*l|O$4^0|(8t>(O z!9Op>LY5h$Qs#`}E#|;pS=QXsc&%_&=3VCtqPWzQHNH*@EAR+FR;-jx$@Xe_ABtJ(LvpMD+M_I3ypp*H>hCiXX7&Ys-# zyI9r`^xT%-O4Qw1L!9;ns#ZQK#v7#!Y9{R>Y)rVAYu}GU%AbIB{5?8`Z9h4rl;Mz4 zR)k%H87{L9DPgDWEseN!NI8^YZlJyR7z}g2f*BZ1?G_#mVF4UN@>vJ(tsHYbNsVxX zIFxS68lnlRDy)*PNz2+x`o6LQ1Y>&4oQTkXZSKCqT6?A79vb5gw)TGW_~+)Bti9Og zUJE$xSLjLNm8Vh`($8nwXODS+lA9Lo8l4@jhnRwoP>)umMy&6Qm*LQlGbu9({G^r96IYl+T*vQ;`boL@SqG%VKc`?EuM6r;urQ!VHch<1^ZWNb-J^41<~-N| zKBLF!d%EoZWAA<7tE$d??;LW31Dv{Ji5gp~nKqr05;f6ilakt~K~jy7jsfW%Iz#XH zaN$@0?eK!Y~g4WJ3UhZ5w=sOKRNbPd(2!Ve?si(dM+=6B#zqF z@;gu#+<&ip8SdN~{NJf9Y@mdKVH@m4;mC{OuHYs{C;v^H6B6)jZhB)z%kd+SF}n)ir>nj+u(qrQhr z+`G8%X&+&$cZ9~O8n#Io<3!4)8pS#_w5P@}^_eR%U17~{dTHb(Ephy2qjuee$1SW7 zg|zoF4>tmvcKW2={@*zB_{aIncKY&SId+n5I$@Ej3Mio8(fak{1t_%(#ZRthlSu(8 zKcDjSDY+o$mp7B6#&%1LVSNGSok#cBjNY02N`(A*@*7>hMGhurSu~>c>@f)6(L<6; zM|7ysx|}!~NUZ)dq(-wFZY4uLD2N58`J><~QJt0-3msIWhcrA#6EVKCLFi+G#qY6l z{>Zu8$(EWTyE*>YC6HnH1JpNt6 zM8I`9oHGBI?zVrbe4jsuMcx;XLd2Hm<;|1a%W5-}HH{63(Z|{MdaU!c*tj+YJ(Am> z9lM#j&Wik+CkE2DOdu~VOdv0(4C*uWe*7J3jBQK=2lwNpr-l(R6T^!0>0si8vc~mw{1jFpPtdSI5vY zeaivUQ}nGI%vp)IA_-<%ON!@*lpwJBu66kE+L6&!Lvq@(gPWr1_UzuU5o+$XTs3!- z0^G*kmZ#?tH)9Coam2_7`5^5(il#M@ESg#0lsGbc%{erZ{M$3q{mmwhTX6`R%AcgF zrUiv>y9l`vLPh(65weQfM*5dUy+xM`6(cy{!72uV6Sqy9u6a7QM%|+MhIzsxNYuGP z@wF_aunBx5#1J3hO?=*KUzew0_YZn2pV3WP&j8SD#(W&bi47~ua|mc#YT263^&bls z+pxbD>wG0PZn5EecHEz8C?5e5K>3DUM||p%cHv)xR?Uf@wUan z3smm9`;t+)>uz${A%R&}7Y}dw{&h30T z=J)xv@vwmmGLMVN2br};-03Jf>dO&o`uy~V@D*`>ddXhc8UbL@pbX{`g+s;N`u5@B z$%)LgCopPUWMz*=x~KeIe=1XLw~h2^40cXV+iAg^sGH^VJckho+Kk-iL;-hPn~g(` z8;9rp9GlhJ2W{=&#R zRIg}%-*OOpN!`h!uX`<0*AfSY|6DUFC{BKbIrTiwA$m5-hn1{+R-JoRtSj2oQg}G1 zDDaCNp%ojU{kH8K|5*owUmG=?HZ4C1V1VF}h-C*72bJJyoz2J~E@SZUI2Ps$tmL%# zz?PgiGI4kWqY!&glg^vSlN*5&C5p@L3(B}Pr10%>7*!Nu$!N5zSA2$B!A48C-k~@L zy75>fb+e|a7+7C|LOE-}X36o#1;p9sk{1>y9?dCvIvE{nr$KA}y%?`wog2h(vD>29e3K+N8hNVoSJ|gmzUuM%=SqPg+{SVDP3iZ9?A6yG1u`@~F zJFelwzagxpIo85yKNk`Ev*Bsi3uigvrjER3pNPC%5zAz?5AMqI6X^Jdx&FIAX@ zGz%u`z}?Db{_$I-Uji&wZs4UlOsoliYxQdZVdYQpxh_ne8vahxuRk|F_pgx%XQbsH zbu&Bc_612lvB4Y;s+y?dfPBjo%>P{px`kbb0HpHvwEPRdeUsh!AMH!e zF#dDE$pG#hyCU9(zSA_8$Z4L#rZVjuw-HypM!?5!x&JKG^`Gd3sIK`srBMI6=If+& z_oP5i{cGLbHD69W{p*^qgM0MPYb_(ZB;aDR_JyVtOo?$uP#8H^{wy8!7S4yL5zD8h zkzyGKq6NClpk<1oB`@;4&wW*Cw0P}Xj;Zyds9#oV@@_R8PE!uxNd8T%%{5WhkNFcd z;R>rES28^e>YrNWR+(d3elDtSRhj?p^4rr z4725t{r(lEZdnePM-d>DiW<_Y&TgKaszW1vlf8D9A{3cEG!uU3E&6wjdbS!0j4j*# zpmBlC|7^|wlE@xT5JLLe_mVAXCFgptrB!Vm8E%(aCBFkxej7g;-8~hXK$_jw@(o-A z-E@0lcPRZ)vH&3rfgS2|rTrp{Cd~G?y5=PyPY8ij9RmVY$1a0O7G3YP-r{(1G3rh! zY^Z3xsXLugcZyJVxNUF6B^p;hH2|t9P;*C)(cO7@4(V+REE^LL7+4gz(^MXie&+zB zkBDp*(ouHob4f?Z_SECl!@O|>IAHdKbO;yfblk>GqP=JRsYF+@dvQjcz8WFF84+_F zB9s2y&5egr_&gC7Qr;2P++zsqv`F_r!b(mK<@`b9{9BB;sJ8DKS2M&E32upU z`GA=TP3J;NRP9LV7Hu^<9w`yf;Kp%RBykW4KhtaZo=EB7a0}&4UI{5Z8C)243&~lW zVMP0wKTQcld?V}cXp)~pFBCR zwg?j|Hl2g*_>D5!OikM)aPfc9WjV8K+ptO6!h?>Tqx?t)j&d>(R~=Gzl;7oiV<3o5 zKxN|+Hp@n7mWi*768Cafm?LE$BqkVoE~eO*(Qz5HR32JpXumO`Im?~2Z;*!mTgUB} zm&N?8HZM|BNyMZ$)kI7P6Z{+z6SC|(?@Vy5gUJf-_FDf;?Z{b-gvCwuX%(c_OxGO81C^AB} zIqj{>WXyJy3{=MqPrftc$!zVTQB(#?gI3HKZze> ze5STgPvQPh-$mlEkt~!r5lN$qf^7d;clCTY6QQUj{qj!Klr0YLZl`A^u9vM9 z{Ac@i+kH*UypPGk96ax2bejB^RCn`JM(2#hnaP-j>k7%3%xruQiSv0U<}(s!d+@MS zI#e3=50+s-lp%ZkJ8hM=e=hCUTuMIkA2OHJ|Nr;QryqUD^Qr7Zn@{($%J=7(Pphcs z&p)3e*`5t9MY0W=PnmhsaO~{*uOwysH=%I*bId0hMn}&l&9MQp=|h`OU1l%*A0waM z-(L9e0Rpi^UtUM2gxTnAC8_+w#)SYmruvq-~XSJPj0y(V}EnV(7LnD z{>J$kdIg-m_f6AIYA(sx-q;x{ppMO4mSn}y8W2R)g)I64!4&rjKiFNy3 zI5@C6ox$0SnR%YfywJnKX{k${yJKP;&z!TGSjfm&OC@)fXYAEZ{ zoRs=!s=j|QgT-HHa>V%ov1LB$HK0A~LN)`R;cn->isQA^BJH@yLHRFPAhk@+X%)Im@orSm zqpa(>!(OY$$#s{kk{X1K;k6&o;>Bj!Yn#jQ58*$%GChAw2#%syXw95^QoaR_sCRyH zTmfuU@gK~gL9gAceQu(j%jM^GLej?aL;g3lHffE?AAiW&8tkflRSvDt^-N`RLytTT zw|>_%t0U~D@V7btEG{3dpvg%%e4qzyqg-`r^ak9ty43{x5hJfC?V>$tFIr)wcc2%I zgI#bhc`b9;8|CS7fPioz!_SfkMs zr^ME4e)$vQZ8q56qHfvY&NmN7%XqEeXh%7&TtUm3`X>s>{tnk$-f|AQx#kQDeM^G~ zHbX~gBC`3CUcXoa87eHKSfJq(DC4=5M{|n$x5pr2mY|E|hh|aAYqtgE;9D_Ui*jDz zeg1c$=ldN!pO#)qnP+aU^MiRdbzOYLJe#`Tjr-pU>G>I+M2zwi-lmL%;*238j%`64 zXSyLn(gl!ocVyRqqYqdb)w+YWiIWO=#9wG7U@s1J1pPxm)11^nz*Dfi1Ek7@PbSe&RiD$>EHQNAE55bdgpC3J>{Xz4l8` zK*pJecz=2gxNRtoAh!zqkHN`+WO*G_DIH6>xbU!}BRtSVG-N!`BjoBG7hHIhtCw&F z=jy#suHKx;GyaABu3nHP4pWdCCyN(;6nrPR|~2e=>8d;PEJjIlTGc5Map=gTwh z@9AxRju6>S+Y5AJq5YXbOlUys-fe%&4xF;-(wCUpa=c2TeX)|4Z-s=**eo7pU*e&0dxTO(1QU0_E z=^aGq!B=Sa1VTE~FNE}Q5nB?{gTkjIpOcdYt#5_W`Dv5RMK+2$Cd}5iCdOTFy+z;V zgPip*#hm^NPQ=XyuH${yN$0dz)val&pPFuNnJX=&i~FvX{KzbwUKIvqc#A%#cCyus zW13gJH`6THo?bd7qNSB~=;Y7OQ75%@`c8(A*>cD>4*I-GOQ)Or9oYkyPOpK--K|C9 zY_|Vf^9m3-Ap~L&mW!oRV`dh{A|@$MHS!n*$D|=w6pIJ>4@b?2Kj;(OX-g#nNVN4Y z<^`!s(^lKy^_i2gG+=8IT043__kyOmO(lN=14i2+iQSo_sdIGGPur^bpQY(_&-YK( zPfC!o01-lB)0S`&zdM{)8_HSor{_A{$WgZicZG8)9Tf8NfS`~mCkhHl_xuYqpFwy` z4*dDE4c{B&bF{rB&z3)B>tTxx-;lTy(?_*>QlTj6R=Z$C>R6Z8ZW@*Gk`Di2t=ajz z!gil7f5PVSW<$2xJ;7Yggr+c;j~ktm8RtoA*IG#&f&FXQ&}+GtesR7?>v#1_aLj*$ zcPJtgUTVv&_Y7EW^@(oTTET&AS46w4xMpeBe8Fu`%?o(fzcs6Wy7uAJiv&ZPI(ha0 zQx6H3)+C!s-k<+vn4gnRtXLDy3WJEv0j|{VUZRCil^o}_muFOrgKej2W5%ML027QO z4%wD-J70~#v1Fn+HDH`u@qNl4r)J!WuXvBt#?;pcPG5Y&g=BA$$?p%em`uRr<1Yg6 zE)#eDv5V7RW^sBjs4(giFHUzwQqvAHq$trF?NnISpFwX|-yKZi)ct(2_lbO5Y~6#c=Zh$E4YM{yN*SCp7?B{szn%2P(`itM+11C)@jgK^Sz&eZ4qOdXK&ernNf;<*0440rx%kGemMOXt1YKTdc2J9E|Ip5Dz*if!AK+E{rn zKPx&irycT&`JP(7Ln&_F7WRgeFkt33eP$3PWFWdC=H2!~;Lr5hm_y&~nc0w5d8q4Y z=rm2r{nO!BC(98u9n1xqt|Rp?6wQzY0zE5rrm>4M^NXdHYJX9?3$05{Fj9ByAf*$g z(lX$2$$&jC^e4Qbgcp@SyghBjYEL~TSZMggT)IvrNBW~PQx|bEOgg@3^nfBh*8x0t zQJ6pFk*n_`+QyRkr~NGcBZ)Vr1#9FKrrF|P@jX1Do6nX%K*lrY3$hQS=Vf{BHjIT8 zV_Xx1551^_0C2gn{0Rzy-uwvw;2U|~9q@e&2Lt7K$$#c6CnFRvIe*MdwDwKO z?s=6RKPsfc=}JrcasX@$|CfT$(Snb&Hioxx6%Ng@sryTM&gYqUp6iG6TNq;2Z(h9}vJOZ-|shlk}g zJc$4P(P`$e=e-#1-}+Cx^Inxn#Y`^9k04;s)RNrgm#oR*xMnocbt7m01t{e<>y6&Z zw;1KT&O@=nUL3G|UDS+VF+FFT={csS`PanSTC9|RgBAc1=1+nlNTQoR>4rFY(n2HL zp{Yz-uf$s49vlGJA-pn>x%AVRRp_kUAB5pwH2aZixrZkc>}um z0y}l1W?Wi3U0_++s0IVL3-XvTi33Ea)q+a%D)}46(v7iT zI$1ZQp!4NZlIunp6y^kX&&kVUAcalfhdPhMa58C!42_RS@*~b2Ew+^tl!4 z!YxlETeyeku%hf2_Uc3d^74gQDl)HOeI26tLAOAQZ*YZTXlfm!FX%0iii+%5C|WX;F^@ zwtQ$c;y7DAN^kO7Drf;$-+D8Uwc+E%po}daba@o*<#{WgR@C6rcBkD@1H zAGNKevEl)qlUXZ&OJ_pfW8x4x^yG)7dM(^CkiBvP`6`-~h zmy`dLx1I}V@cOdZL%UTg61~ldUE0K)Kasxd^0cbBRN&sfq8QrPQb>p zvySY0Ht~9n|IS#B|44Lws`K?zk}Jj;*O;aLx#y5#wb|}wIM@Mm2-c0wY__uk86Lq_ zJNTF55jV$u$G@aKbLMG=N3h4%HXr!E1=p2g6D50{yi$DLT)4!cY{T%G-pX+Q*JHN- z>le;N0)<^_;rv`&Xa+>i zjYeDAe~{r2voo74|EEB)hHMKGOiUej`;TI>lRw7(LhG}AKd}={8!fdd41|x$Fh%z2 z$%*!MsGUOF+G-iIxa^Ve1aHy#*1rEtxC837*oh&K6U~4))`>>{U=KAy!q090L6`O) zRI>lzSoA#(-vTp^NxV_4pjy(LF3>Fv}tc8=+BWmLF(aVA-2K*Lht*MGTHrAr=3c zxPLRNI)c?f*$Os~=kWxyS0zYJ}ifL?zsP(DO@y~^7E)9JMmdez+I1Zd~snEE1tEIlIZY(I3xq|4$M>!TdhLD&7l=zCCmqk!IM)RMr z+mi9`(VvQBv>8QS{<_j+^n3PzboKkFwAcu4Bk?9B+f5osW5qnki*#qSdx*cFtvagY z{26}n41dlL^!c`GrVOS=TQyF2ymW2Va3;)t@8^L`r_{&gHrp3gN+(KKg-q{t)wWJ= z(fz2j?9v>}*x(~4-r9+u@CQ1v17^ltVt?nI{G>ibOG@GrF5c$qjZu*w`5EWcyFs9^ z*u2h}A#R^HCJQGkX*^hUa*Bk1RooayjW)X0z~!BC6sizc#Y4VU247Rbnt{4RVy#ql z&OH1V)IvU%imQ6-%J+LUUF92jVeaS{3|+`t>a8D-8qwd7v#Umjd6Ji>RO2AwD=I(L;ftHX3DTP(|B~* zKn@M6;n2@@z8foi4v3g73;!3Q0xE$LrBN_6M|0?($}st$8pUWJs1zqiYZPyzHKjF* zvJ-IVNowhjV%s{-jIRcVZCO=)t5l_^a+2g4nMk>0fZkNANh>q?4E(snZD z@&P5G{tcMRldupZXx(JLRBwQkwg>>ow)vrPw6!?J;g)_UgIkLV4T7}Fn&WIqEptde zz=1qO?BZ?Ml^Gc!2ZPl~Kg^yX_EtN3GdjFP>nERJ1*3iIfR?gXm}%+OEW%*ske z6}$?h^524yX6i_ZY5J@LnCUa2p^nQkEzG>zq^M?8@1M(&w?>qiDgsG^Y88KXwR+N` z7IlgqZVqeKSstiOM=4C+ZMCXBJq;gL?H0t8I-euw#p`4-as8*5+WN_|pLEb7JDN33 z{ik3fldw&?;8Zmm%CT2)y^J4{Hh3fo(*_UdDD^k{`&0rR6qeY;3t*L|KBbe9+810X zq>M#52*>*t`HVvDGByY_lBlHMYFyy#zqC)Ogfkp40kvD$hI}1&)|?z?&sc)?3;S4KEWWk*6cmi=37pTj=ClLX9kQw$Qt2u2q72e|YjcSV6x>8D7+vm{z#tn zRcrr`;#p~GFFY7}S`hs=#M=fBp>sewV#zolk0BQ1U$+Qlt^PteVT*+>{Ysm(PW#93MWfnB=wL4-lt6lkLy{P8DclvVp+YQI#oH1#gy&{-Lee$SV zuJ@KJu30me4H4lFA!_Z$yR=+$c`Wr;NSU;a?2ORVKTGgz4Mi%J%wUn~EsDT|f*k+3 zP^{W{D`IiS@mGci)S!pI3V$wqKI{yY680F%=`*AkEwbC#b2vfC9o*s$SfSDZ$LeSr z^dGB(BQI5jXYRz6BK$v4g{bxUikw9s1db`8@K>auIG+|59_#a^4}4J$!A5dD7hD@l zosA4qYJ(&Y8J$Ydtv6~KpffylY*G+b?#kR6wmzWD7t~ay((}VNWJ4t?=;#3^>FCfT zg?%4wlJ+oOe+HA3BOKWAP|1#m6(Q6H1_EJ#Cr4mBi`fYnpY>M0DcSXA=*W8$KEf$E zCcfH6WW4O&q91CSI#0XFF}PyC#B`3}V>n>RUbaV6M&3@n4Y8VF5=u@8%jdn7hh-NW z4q^G2p(F##E#Z+5-lE|lEIOM(f*GlM^01UiPrTXmmeki!t>yq0C=Knr_t4O^q~#`mMoY8hR;OK`88Tl|SuG!j{~{ zqEXFT<=B@SL#?hVV^yyI`ytZZ{5__%{a%^S*)}?(F{86>;?QSwp4d$T7Ld8p&ga6R zJI-Vc*gYT@%?55Cq#a^q>?Fzg;rVuUp^K(>)-jCmg z1C8H9F9<(#Zso9WjmqBJwY?xxUliCuPxK6o*uhYAxM={HxNgULzj3J}SMX2w-+INZ#-n>Ue zB(~IzIWrDZr(uKtuJFT|w)ZpE`o~e{kMncAOVL&%Wk|LRy`OfIbD}|IG`KO!RZ4P= z`5fuakB(e%cTeqY*2PgV4y^h#$-=yaY_bxzaMx+1EVW`Zw}N8&$K!H)kO3D957gxl zU?qa|E#4g+G;%L*;e|S`C~0d*qdpzLo9*s6f{<%@%L;BP3jRJ8d_5jqHikRZ>bQGq zRlz-c0A;#0YN;OGnZ5NRgDGRkq3hCSL8n#oHvA6XoN0N0KZ`0W$*nn3q2FLaJZOr| z+oYT1A@gc?-|&dc?yLQZFkJXqbI9rnOWVegzT9~%`x$V_x&wH)ky$2M{}v0$n^Bpw zoUk1$(+j#Ut6|}CZp_Z$DSQ$&xVrBv1U{FbNU4#bnR_zNb&agGeH^Zlwf&8pZ~Hj3 zdaUnQVVt7JWs8s!hv?Ne!sV)hTVd8L-nmoM%hjW%I|{o(X8;kEM~6B;fQ`e3h*5#n zX^W87x8pP`E823I0p0UD&4+C_v@ik{pt+jq+oZ!@zouzUuO9-{aw}?hY&zz)!8&#Tt@TaoX!A~7@@G(Uf(wO__S zj{SN-(xn2k*cu1gh3GjN0t(MyF5RUOSY=m+B{t4ZbkxEQmXVg&P|R3N=SdT0X82pD z-}Eh6?s5d?c^ipgyeYTWGMAlh`A-8 zrfH;uNPQQ86dV^Aak5cegJb$qE~nLaYur;XoLzvuC#9? z9Nt~Bs-PKQ9>ilPJ;3~>{2DLO_NQ=F&(31=7Jd{`w~=;J`kJU4es5902Y2w0?Y;_+ zVRQSl>>#*HIEf}(v&+6St-QA9XxAb%3ZKeeXHfKA8}9$gOo;v#KKFhtoEPb}79e12 z0}`sh9-^r^H|eOamG9{2%y-j$dz`ixm4J{?=Cd@gllnyPgS!1i$lb^Gh5g<_}AjM`g>!-<5@?q8kW~K zzACsj&QWN#SlU#|aY1VM+IaANbC}^x{Jwe1CS;bzCTJ<73Nj+T+%iS>(CRcsyV6?? z<$0^?Q2#lXdxk%r3)ChLNoPBzt-9~m;cAGsnA8%dzBxR7PcbVNr|xFB#i^G>_7SI^KL3waD*HemB8OUk|4j6|r)deGAG`2$}WHax@ zE16!EY%0}|X)$qo;?QWOW+i}NHLW*56oqbpbi>B`o)nt#d#COs*|DkvJ+J!Rspoi? ze1(>rX>imDg&a0F1v)wy%AE`yIk{ug;(Q}os1y{L+@Y;XNgVDMxPa>`bklI+09cyM z1a(;2!V}|M@X<31i~pm-0+}J#Qs;23)UuuR~}dys~;;)v<5y zq_(L@4J*1F^Ur+IrP9@6BD!a3{jjmniuR`U4pAISC$-hK?yWyvzXZ`lwvUBhC2u+c zbDFpbuS!i}C#FpGAPN&_p*@b_zSEfs(`c^NTis%u+J6fU*SbYyT3=0&=X93p>a`}n z)RZDM6kHjjEq@PPF5g;zdSX-5-U6JVm8#?kV2tC#Z%+?}#EirxSq(97HEV5rq}>*P^$#O8>;cYgG#JhYDyiIdc$+TZ zuG+Rg8LjjWC3A~O)n&PforfbEc%Hg#f28~83P6htxKn&9q^5K7C0y_bTqmQ?cG|kb zy?rj*ZHkp2M%XbUZML~f#>cxQbNm9BUQ!G0FhhKNoMGp6+#SXn#%FlLc&*@xH@FDq z)Hh|ZfgEpj^^nv4pPBp>P&jSC0;(fNnE5iIyw+I^-%mfD+Q1L-2X6K=@_kR5ywp%@wlCLb_>tbj z`A&+R?|9UFCmEpKV*3R2ItihcVH#uPkX+Bw;TF%f`YZY5&i@q_`f9euN8?0tBv9( znCoe^k^8kVLZP%0t{s0|cN z(j{b3vq5T4s7p8*iCr~d>$;ZGwRJt*xbAMHfeg5XR$?G$TN=F4UdvOe4)Ex4BhjND ziAJ6p4BEmQQRD_psL-_Y7U=>lXL-4K>MXAlg5f{GrNCa>^K^85K7R_I@>7HZUe`B8 z`&l#kS*H4be!uE78}vi<3^|k5nlS7dj>d7*KfV`M<*IxitXg|ERY7gft2CEZ2sw=1 zP|y%43P&1Jg=SQ;@!}!g!#{1lU>8rek=uPe(v|OcSkm&nHs)W;?H`SCa&T{p1U+O9s^W_2T~X(NoPjS~7tBYLEgIeOi8sBjnHbSueWMyWie zT~!#Zx^J9o17rNK08qsY0~#62jr4a8J7wks56G9t_+A%Uyf~oNnT_3WK0X@f9~;u} zDY|8q9UAMJ^s3*4Pldjzr3KA2trmi{@{6J|E?g%2(z(x)D+=xxAS-Mrfqxdcvy%TM z24&8|_s88mbo-7Cpk(^>SnV33>(R_Kq)ZAdb3$=v`Ugt3!>DIrC)Dd;_F4u3RN#ZH zi)8b3UC)01fHJi1Wy?o)!)FYhtI~JFH=L<%a|VF2^ng3B`kBIBuX+>NYJ;od@Z{cgT;Blh=oeyUeR z2ZF!Jp|>VDsCnY%;EFsnyxM>p21&2Xim89@Mr}OyE9G$p5ntNuZ%*ty$7{b|S7`^g z>$p3{UM-d1m|y>C0GOUQ*eq3`o^X7x{hiJOr}VtWjWEztW#|5EK(8QEtvMx}ZhNHO zQwjjvNMO;?t2+NhF3O(jEfmFohHBDgLv&mleN90yJ}dj0{2;m*h+1|?&RjD(Ia=O` zYODmn2OEs(=mLw1jP(xvDz_);)8|+rh-nh}{OY zZwJb5Md!hhB^zcGZr~2ZtGx9!KVxRs{fv7vBjryuZ9`wLivZJ9E^w^F7!y}nVK@kG z&C!tI)=^jREWc1+%nE|gL;H4_nY=*r<=LkrMcLPk345_ygLzFsvb2_t*1E2z26w&o zn6AI0xpU3vRyK9j&iy(=#}(?@pEh5;2akPUHYJj%- z)>{_ScTrJ|P$?3Mgy`29O~T~fWW09ncqH7kf{MN~XDqIdvlTY73vx(b>%OP{libLD zY2skktuOPAD1KW_StK^lWd@ zW{sqB7|Ro|se4!~X0k{9qJrLyUw{cKaTKyAop^sb@jyB;UeNnbB-(j1;IQ^Vu>#SP z&1kx4L&VJHvU|g^J5ISfdwfnf(>rGj#%{B)+a_~yzD@OZ@qzM&y!uao;d)kynW>uL zud=rUMqS}%cqMJtK>fR!+3-y!hvZ~Xe}`s44fvSmE&K^7{)==<1fLm`K{NYqHz?|W zX7~8x%`QbS$wOMjHQ2;C$-6rZlJ z@u^K+%{*XyXGM_g%9w-GYL-Us*0B_?3VtSumRc@jgI%u7#!leZy#z=@KTij*ES{vMa*{H1YWd+TYYx)7A-#D;?XkT}Bi+xD!`~wS% zQPiH0KUXEzO0+QRuFBI;JLhc{SFD(o(&_usY(-D(@?cwEgosg!2S?agw@ ze{Z?|elhq)6c*j9TmTAkYJs8x`mGG^v@NyUz1BzNrk)brdz%*F*fhV2cmLOb{u)}y zs)FB8*lV+saS$xtO6Mm5=z0U*DSOl`KYDdy_YicS#S{@jfPD`?ox9FK(o}CdSm<(1 zXFX)5OPo#vkCKI|rgKBK*cUK%z8porsJ+pfwAAYIR-zg2BlI&_^j9E4)zkM5e)heH zp7aa7BaX*XTuUu9`v>=JX@Oh_w6RJ*>)ZwEOkNtP9Lvn5#7y87)#)Dvcj{+pfo#&$ zQ2vZtYF}wiJ@F>K=}mlB%h_KQ8$(F@ohUsuJuj25%`&{@P5dofyUnfzMg=H$*MmY` z9ek&rot6z|0ZFY>68w>l&rzW&S8Fx71p&!ZDIo;GN-Djpb%~UBj-Exf z{`2&6mDSD;jRl4aFkYhzV^?m4V5gF6R^)BfkR0ttUSLH&`)=ELUV4@0bMlrE$#0Gb z{N~@~XZZ`92eF1_nJu3GkFtCmdUd}w$o2o1l0d62zNT~jD!sQ@7s#oxWV+AdM+>q? z;m}{_G8gN14SvI?B0g34@d6&l(3SgDob4&3&fzzY z-&y?T@T=9cI9b#XkFnnSemWYPmaPLDI6SV+FJIJ@l$l9>9xa#>v>pVH@_C{K>u4Nke{9z)GY<20MDDM*T=EY2Rkle z_p0gT*5;>NQds|#0rgKgZv7XD#4`1lQNPzt46?hQlsO~7pSTAm}w8^w` zIsad6@LzLE;Z~l94W}>H3@hBqZ>AT|X$oapsZcKzNP=WVIL(2GHGoiSJ_I%mMyMSh zvlyYN3}c*GBWBC2F{(l!Lfd1Ks|+d7O#zjgeaVRAGPF9-Ks(2!x*S>Z1_CSf9l7m8 z9U0~;PP^1BImBKwr8SW`d1fM(2TFCNH<3T(I~t>XXW=aX(&TIfv6w-6pcL`+>xS3G zYniBPDD5p+$#J9f$CrNi{@Se=&PmMq)SxJ}4bSB^BHie_=^SsPA&C@)h$s?Go6n zod=`)He^vx{V<=GbM|d-%guJ`bw$H7^8ap(Vm#JzR6=#by=i&XBq?5*($ODuygDdt zorY_N&f;W+Wp@A!EL-CN7N@6%nfv%}V|yQgQo6vxUN;ALdyqFa9YY_Yc1I)7dxl1? zJ&H!o7Y-eXGfhP!sb}TtXdllm2qQg0^4U#%Isad+lZ@AovdW@Ha8V<;cBda*kRjhR z5vIOvRZU4#wzqytSknIkfa3{xenRw!s^22E(l&(W{oKmtF z8=|*mg=3RpG|+LlCC%2Q{zA&9w0)+dL0J!!Ed@dcY~7#~w+>mf&Dw0dfuw zcsa*vSa;Ikr28NSF0ckc9~I=izrJs@20^v)UYB}@RZB-G6F|EWO8Vw%@#_r92~Woo zN~*xgykDxiecs9z^MeIfEViw3we;(ECyiro?X`t5qt zb-y7ITpOAdv@4lK1=Yb{NBK|}++~{X3tsC6K~SCcMR~3Nu1@_{*JiiAKx@5}^V)7w zCS1@Dsat@rUWk2G!X&44rp{qIXl0^r$hHH8Pm!&ja;9j(g<)rnE<^pc15jBF-)lQx z3U%3uDKNX-Dti$oS1Elqa%kTRpio`yR%^>F1Np@3$uwu%k>u#V)&z`O^9thJJEG*%u(IEtKagjHbwZ$%HT9G zD1HZp5rNgxW$Q^+cW7feRW!l}R`3ejOKZ=Podyg#GKJTuuqG{;y{l1#y{kKzh|-4@ zcQlidi@r#6D8d3#yLZ)wdJX23RM_G)LU}Bl>WFe^Fonav;6_Pv_xVz0Yb;&#i7tvc#qRVvD@kV=23^*;ZgFzR0Vh(pf;0Arl}OL zu<399tE2)OBetPbwrP!jf!PsW%SbzSXo6F0+bHI>WVH90rjFsAI?V!SCD&6`+ z{?c?s*ae}-u;rEztQV4qN8u#hDJNED4eVS$4l|RT|rAe<47T#OE4>1lFoUZG&p29Q?^_Ha$ z0I%g^)QH}q7SLPbnfl*fZ=rrcJ)r&&%aY&KptmC189rb{s>O8rm$9#0pKJ^y}AON{(0fQJHPg-cR0hGFVoxkHYeHSPSauAS`dOw39Y(T5q=ep%y%r zmwtqPB2(2#X~C^eur}ni|BX|qTY2fP>O1yHP-*;~LJb9E6zVBQDb!uKjNq{9b2uSj z4i)~dI0MP~Y51rC#QYNDL8?l26+T_qUAV2V2mW&%uUUkp!D69M!=0O0a8oN7ia16Z zvi+UvaLq-2&n?Z)5W?zeRxSG>^?Q}W&B#a(HHu5%>t1HfN1nDat4Jejhkn@gPjM^d zgpk)hnx5C30)~o)gtLeZ@?LwKGYFm_uS#={4a-=xqv|Qa31=!{*;GhXtGp|**h+Zo zr?I9(vCae0kO?YUe4LK4QeZGix1KA0krHb`kM2#UKgR$wu;C?As)3_ zoLzGe^K&B0Ok-s&Wu~`i8(ceekcA2VMgLd9XmcrIP)W;h3c{nnk@{C{@d|agRi-Yo zpt9FnIJev6&*S8w^fL3emTYf*VeSMYwdQuEScUFDDG~CJ4BITjS zalzlnF1^dN)Ws%#p{UdXcbbK?jaSAkGi{^(QP5SX@_>5}O?fNPKsoG$b3f|5N&I1R zFgb2rZoEQ{09l(0Oq_9wlDD!idxgm+-gYC64T?)g}`*M?Ruq}M-EI-QVL z#;UF6bVUu*SariTc2lsNTPxLT96&U*r^cuk;i!chT>k5)M@d7uA5i5y7pkKPrzU56 ztq(qVu`wmlOIyQ;V`t*o6wvz?6)kb}Yb$ zq)n}J1Em>a1I4i3{I&D5Qh%k7E<~OQ&@8Mj{GYEMIl{|kds)g05LWrWr4CJ~&R2#6 zty*0TqIoPjUfgi40vW2^3lm(ulS0UF9CX#-FD+frwnPs+STDtA&|BW1h*)odU!f08Cn#{9Rk zPQ@Bn{8un@IcM?TI56Jd<8(YIF1Bi}mE+1)b1gLf-fp1dRg=<{R*SX2Fu`fIT875N zXS8QS8FPX!RRr_ifEUR=hAiYcg<4|0E4*jz=)(z0Nu z1{`b4`+Xt~ZvNWkU9qeD>G}~}31#3vse8I1!$p3vsdjO>t*sYF?z4iBEIwpq-$;8zK5r6#X{=kMR#R6b1=lmZPH&vEzBd zE)d*u8?!cYXaI&CCK)$563#%n!TYNvr&&N~w~3lNp93LMIc+G^?N7F$HwS^*LO*Of zE!{K9H#|eB>QoO-bq2rW2*a-+stQH7RnjW4#$3z2L`6~XIbj5<7z3@zS5W08KSjF5 zV>@NK%v-cnjbLuu04uY%K;iNwFO+nE#4)zHybUeFf0w_X3Ag@S>b3JyMsmZ&<*8dQ zpf*Wa(dD9-=?;;>B^?@;@|3q=8wsu)$5<3)&3#1i--(0l(owav!TIt9pJ^KDA80<% z?6r20ol&i#_3BOIvzmFX4t#ZpyhYUPC-p*dQS!;KR2U&^J4{vC-nr=>5ymJtXmoP#v2PXHE3xkHxtK011&#>LBX_ ztQ%D{ew2J{jhJ@!5n(9xA|+)g*~@lb0HS`1JLX2f;O+-brjK|O;sh{zNI-L6tj0e9tzi?`C{7lbIevf_H z{YLqm)fFw!Pw&tj=VtX@dQoxK;>izbSAHn;@J|MFMhCTdi6iIG(E@Mbv*Zqjc$>d) z$JhV$E8LMHgSpC<5DJ3ISnyX-Z!=sjUumB9qZGr~3WDm~;IHDr?7U#=Xm1NKzlbdR zTI4N% z5Aj+S@j(3e?bZAyFa1M;yB6mEKpz_mit@j$Xr9@suR5py0DQlwz`ENz^x1Q>5|2*v zdu@L>S&NPo{CE{PRSGtEAe*h&$(F3oh?rUz2nkgM#pUDYGz{PM|-^#x=#pv94S z7H5vCxKB9P#i?hs2`ZQO`avBVkmsF4E)NW9qu2IL(E(V*22;)Ti4M7ZM*I86^0#aJ zQ~=2`*nO_}D&OJV_5}*GzTn-VBehyTFYN=nAo45qewcSB1VnB1AfQwT4QlfPSqD0X zn;Wz0bprpe&Ns9DeTmm2k$s5+;PZ5?bJMxj?e*g+JBHKUH+^Ru5woivu{@H%_h>uDz_76GwRUfH z({aw&Sp@}7O7;^;di_}S4{IAuAOa6V6R$+trgh>#;pG(f0>2ap?uA`^ykxrOJGiH?zu7E?Eh0SutjM8}Zu%jED2 zpKNV7;jn@on~ zBe;{R&Y&q+aNQ}q#yAQfH$kUie|d;a&XE(l*0>BLXYcm0fC^2OLQ{5(&@{MB$T$*@ zc;3oKG=y*b8$)QU0wO8(TD0g46h)nV*+{iA;(mJkN7S{{+lqJynZ(qPN#qFy%-`3x zyINA;cGHqm-f1baLsPP(W1OUK;uC-ap|g=jF`u+Crf^s5_PLXAJaPweGd0y0vNzNO zbNQxkXSc-_TfoeT6H|~!EtIWaMYM6lOMO4a86n9mK{T8S*j}66w>7bGNZ&@A^r=a1 z-Pbr;W602R1T0-H2Uxqg6l_?AEk|X@Q-+TWsNvP4GVI$%hBvfPHLSrK$TVr<8D)4( z863i*%c%iGJ#_!W_x`-MP4)kHz}EuC8tryPEDtr{%S8ojY9K5FMgfkr)($Uot zokqI;B|4&s{iAQ%jnTb^q%{zCmj4Jof=78vbh2jJ^Gf&)${vGiL&{DZi3A$TTYwTm zus?+;q6#42smbWKgNmPxnK18LI#Pc6M?n{X1^%ASozYV|u9){NR&H5?CXF4_`5(11 zW0LF4tA;|ilmJ}PSV@J07YWA53p7(&@&dFy1}kLY#gxHs0>8tN=RX;F%v<^P3_pG? zL=@SBS8q(itNwH7i`?Z!m>ZtLRaA&@DJ_=-Xz5iKpXa=-m3a9K=F)$z1lVNsuLbYU zQ6aoL(0`|?2EjcYxCOBsuHQQi_z*?O6%OVXK#-7|0X{8y%sW{|);Wb*T&_rWz*hxQ ztha!O;>ckdD$;<}#rQD_yzBYcKT*-|?S`;Ou;7hF^EJ^i_HX3L12pd9n4d)b((k z>!Hpw;`~UI49@4Z9xlZ5q#pWPy_MU5pbU4qu$$=0X3>6EVK?ndqD%+k+0!p0ln2Ef zv=$VRFjKhSCgAE2Ze=}(@p!7TY*J=r|Lbro6CIpDl`tC|#j4jA^p&^sLB6+>G*;k!_6% zS6sp>`eNm1R7CgL$>JdWK$ZO=K!rYYG*rgQ`*EdszyEApMUREb=4C%rr+f%dVO<@KtEGcSP?t9SXX6TA z>(Njdd+Nv4unz$$R<)0Y%2;7PREog;&&E~kSg4jOsUNE09|BbH-J@|O=05uKzdsoA;$mdl;voqNTM!mViP4c!r2%#dSSTfUZ%?)c&#PoD@nwhA#+OyZ_zlnuYnG*qPTpU_| zbFi#sDg}XCYjkC)=Lx$&y{O{QYWdtTbv6 zPYRKNPQ@c#+iNO1U$s+HBafu^;o-&PTSt@F9MippwyfuDKy0KIotr?+f$Rlh4&IV~ z4Q-k?g?dc&cXali6M1CYyXeEp!WkKJZU`;Nl8zgkoza`j{dVWe*~taDk3%+Kq$*f7 zq@t8Q)<=4ItaOiW@L1&@_wZQl9)HJUjeFeBW37AqL!vj2p;?XUE*&@QKxn=(VHFRY z%SR0XG*o5QPaJGWUghvXJ>W6Q?`M`(3EUYL8tS zR!aOy%k4x}suDY@HAn6BmQz_|KXHiq;3A1OLSiMHkKDR@&W$uHbU~O^H!QP9kkkZ{ zBHNNn4NXD)kY0aPL}=pi4IYIi9{2DlH1YU59)%_z_wy(;@%RTGg(jhBN5g708QRB$ z5={;V3PPw#)_fx?x#BV9O@1{R+!_sTjwTLAyhY~$DZ3qCe^5Gj;oFH#=YXmrzpLjh zENaJN>`?dkI#T}H2*Kic*1V*1aeE^MHo7@s!QvBcTQJwp7@Od34yFcL{9FiOPZ0_Z4b*C6p+taWcrZYxv*{MWt zipJsEMOu+-=sJ2J@fLOVox}Gr+ulv(!e}7*>E;n!Bl<}F4=hiPW_mL+e1B>;&tUNR zp4W#TPU#$HdwFg6zLf4A_kWvsBpaqCr^IxM%56{<{+ib!HU2F)`+MXOq5K7TI4!p) z^)dlLj&rBJf)mZs?kB2=T5}(Ewdc${%~nq0_qyL$r~B1VWfqbidWeOj{U2i?DfEv| zUh_DfDV%V!~d3(>yacMLw$)YGI?^ms*R#Wut>DiA9oF_1d1rHJ!}es6IwELl4Cd-o&Gy zDAP<&bf3rb663#JU5O&n^7ZwBVs+_(QvO0@y>z21F@_iY`|S^dq?8Vvb}hZSP_K1` zrppHHH#>m8_pFY6-HDx1J#9(6v@_8OjYrPfJMT5h9GS;*d9%F2XX#!|{qDvo%r8`0 z%JZw1wmq?7h<{(f`BaX~@|TR^>E|2+ljS$C*eb)+#CRUIwR74?x*nl z`3AASM4iIVB3lK2%_@EpyYq?Emy)S}Bx=II3(cHyAA%pRVO+qWLL0&_Ki(r`;du(~ z>s6hzkoYanAjSM%o9>B@Yz{{G(#FpH3Y4e`62DQd4PkLZPw-<6G%cGg~_)LiX}Fjot+qS5!Hkn01|URncvCg2mguAL#HM- zd0zE9u+W;$!{%;-5VSp8lt@|knNNweLiG^bYD@XTR#bWi9qXkl5&sM%#FLm&Tijr^ zTSVLHd9#5-!VT66v)NLbI}xD0jb06nNYT zK*FOgVKG0fr!6RG<^kqW3Uw+CnWoAak}B$2u1D#VyZl24S3@4J+?HCyeRe>O+GU%7 znN=|+P;cIu#aZPq(u1N~PeTR0qC#D5%%Zs)E`4Kv-H_mYZ^xQdbnrRH|EeoW++)>YKR}kodi>gGTwCz8o3O z?^IoD&2QawSRTK%WOEZYlE{a6PFqsIUsa!6qKSoasJ(opey$e6V#a4avFLd%1eYoo z-=_k0%(uOF(cXx@;j0e6DGE{OwQ{d6tGrU9;$QrQBEFAJ6!FEg$e+^3lm4uMcm zxHXykbiN)ok2Q9|w-umO|9HGVeC#}!UD*AF)eJC+tHMNpn&U0Z!?dR7Ww6YAP)d|) z!#})vgaF~7Egzh(0Z15EHQ$CL5;g9pRzIBAluPt+BhQgUGk=4GW?&*w=Q2&T4~c2| zi7c7J4`BiIpMWStcHYXX8iOTO`uO(V=#}W?KS1Ut*<-}Ob73vcYDOM<^Osx)5|Zm| ziq=T+9~LWVLBUk0#9y-1a@}JeR@n2s`nxtZ5iP@R2voc@r%6x6h zd~L~my+8AHdFJb~%-7A~SAWT)Jar}3Wb&-af;J{Ss3ws@ucje)kT-oN|} zItn7s|5aoUMJwUkVhF4kC8JGZF3D9JYiTuk1)6P~y^_qs+Of56u*_7mraMvRG*AjZT1VoZn_z4p^T ziHyb1u?p;;b6nb7_<8Wkm0_mM_}x9dL^3%%fWStf!>U?SNeyG&mNVaIJhXHDL@qpl za6{S~yTAl8+heNzC8B;mk!K$TjK3sD%!1w9+&pNhHfs{%bU{Kh%1;#NS@8<%xh-_& z5Ydh10rWxuP==nOy-&WvbsN2;h}Z_^GXBrU-~m^ynhcg05P{(IA5f#g18T@m2t@W& z=y{35ohGmUfPg`AYNEQ{vpBjd8Qqvq0)g9wn*+=!?U&h4plfnzZKI?&(>u|b!bzKkpIgAks@~{Mg7LOfPS+~rsJSrK4G7|qJxH5MYu|~gawXJx zck9>_Z3u|*S|wZI$dc)WB8!XuLMrhFbPIvR>3ETDnyH0CB;KfLda!hOzN&N!v8g*8H*f}u$YCbq3s6#7pM%j@ie>j(%-{2xAX6ilQ`5Y$h zUxIjV;UWYvKq`@w5mWi$^pp?N25A!EKgI!fjE$lAv$uV3;1g&5|o;bg2Y?$;MxD%;@4zs!hAcRuptl zcf=|C?7wQ!8=c*(7Tr;rq&D-G!&yno`Q_{tWpb7X4{Y-7<#bkZ-OEdaUs-V4!=-oj zaE*C~cAVz7wpgqnC=y%f_Ma)-A98`h&G(+;1QePVAN#6$Fj>!mcMb`h{c9x&q1+U8 z2C@H6;lX|}{PH=WooQ8jE$`A*|DD8v$lTSD4$jr>6J^B?gq{XX;~hZ{c0^FF9UXb%n8??C?ws*22Nj3aabNWiB-H;O~eW zb*Z7zIzYZQ%leq*W~j=!YU=a zA}TZc)!crmi{+17>dcasx(SKkmEl{Mf zE5RN;GgiA2ZB!1?WhEQWjRZehtQ>ze)lbYO`TCB4SO4aEwrKhHP5lI)oUQNQ+<1y~ zzs}xM{lrW`cWGs3?=XLDGx@s`IegMT|C$OE6+Q>a=ta&Wa<+I)YYuP0l0QICs9%0i zgPSB-b$|51&m#nrYd5RH2Xeu{Z-3~U`W`IFqJ&S-7Jrv4COe9`{cX0tT*YNpg*OI? zX!H{_?+1W>qZ}RT9NKiYx-9g6qp1*K%uundMn-Tsg*q|KXR#21UA}JzJ_JSJAh}%f zRLTfPjGI^-Jun_vsb5M}G0F=5uB6WDbk-$17zr^6f31w*^swp}Bxr(w+a3f@#sI$- zz)0^mzzI+M{xA&ieN<6&>qjxbzaRsgod~kP_cZ(-RTiTT3mj*RS>W&HG^~V->j0v$ zWVd=Nz5o|41~eT(T+ivdRxN zETCPjuT14AZC&tCX?O30L%@;sRiu^5Fs&TOz*fi=N+qYy%#*CiqaXU!y+w?)sF<5D#n0h>yVU^ih|x#hQcnu^Rv`eoLWL8{n z%_T2;J+Uj_`_hKa{n^f073ud(vg5~V83vF{gEv&#IDliWB^_=hq7kZLd_uj-NpO6t zKD*y=aX1Mctd*F+$X`q)`iDm`A1O}C(lEsd3li=M6UqjFbKqvOF zgkTb>XQ%%*qgP1~VQ)|GNS-8fP(+=7vydA*@}a2d$#rHU5mk7fFv$fz`1w)4%vsBb zRoc16^#YSInK@nV3DlnO{klq~ChybpKVrXAv+(HgUboZz)@n#or)y_rqL=FZK#e%G z>*#UOmlFgOilP@u3$6UTg-ynKb3Xno@>R$R%oCe9nC)-!7QLi`+x(3z8o`{k46@-9 zJ-hwX@B_ixQZn0mQRv3qKg@qXO*%iV*YYJ$q%As&N_Yq?6K92NIGYolpY)3n!>(NF z%w3|$lI?(1OdDCLzeq8W-tO5se51d=a8F9-r)U>gY7er9Og3>qokqI1`U&TbZ=v6r zZ_?rTRuq1lX*iJ=nD|j2Y5jM9e=ZzauA|iSUglQmA+?*>l|6h@>LP?Vg;m#!14MoA zjXyj$%h8|7c}IedM|&%~P(cKiDxW`>`0P;jv`UtQd?Q(PZq!?Od1JCF%g#^voBn)G z=J-z5+}xO2fXq%tf98N1lG+Q5iG$(bHGP}$=wew4YOwLhwY4l8jp1((91lu7V1zKh zd){;zrT6vhJZ|aE0i_2HW$I!^p!2nOVpn|lp1yzU+-Xmn`d&CTzS)2B8vl{R8+rfp zH#7hJTfx}imK@|m9MX$%DXEw(3<<{0iHm+`=dSF;OTz+!J-w|xFL&-bkc@xdTYo(p zWKY9dX}cV%iEOlsImZ`)yEM`Bgsqb+KUc@ znRK#qiyr@v4uW92_w8ueqFz^b+bsfu{-g^`hnCp@3Wto2i-JNHpt?HW$_^^Z{Z2La z6z5*2dfu{&MPi2i)70x!s|3!sk=eui10Sg1v#wxr-Dkj<%n5F(tO%Na!wWPJO?`gk z`Q{jN-`#zwvlwSSjtQhnObt%I?)rcK77V_Dc{=`sG(oV~?w&;oX{I->iasIXxdB93uXBcM?snj-Ax1AdNTWh$YOV0GsCQ$Jz8Bl1QooMJI~_J z5^<+Vox?aeWjHl7>_If0^GEsq{kAmV@B(vY{ulD~NPh*foNE{h_cs z-jXC|tIY8-Di=|dI?a!y<>61C##`oE_?>I50j)I_H$VMaBwFf_92`}QFdQFX#IgoYZ2sIb(?Tf0J7Y(oJi zfFoug>0#759iMp|`A6t00;H%P>+)Xccx9Mf!z`t8>3K8CI(!k!Qbh(cEmc)dgpKg) zS1J~YAGz*x?fiK?pElWEQZ{FOPd4g2R$CHZv~|};y=gf;xG`^0-Xhor9pv`B>3-S) z-yN^&_appwIv&&SDdz2)`W?Te<5hwD#Kv9gLl8HN1u+~V?ME- z_A>{Grus}f$G;$)dDY8lK&^IQM%?re90D999J-p+3UnV+P`PRjsf*%J!x3w`*u^G!Y4sR)4ek1& zyc&j3v6#l8pUU}EJ<18Qo3u2r`tL-}A-}f#c!`D%%=JK?D-*F|$uU=?rsZPHTx&?H zYa+Zh3mU3!IXzmJ-sv|+aV#J$uWAT)eO0la7tB~am&ay~UxaIO_Hn}P+(346lxg=m z%(u?Olq>Xx2!FV}3z`V77Kzlk$)_0}9OevI?{?)$uAbwa`yTBs_uE#_>4#l9JH^Y~ zbR(Y)Vwjvrq&hmquAHM}*GD0_ntW`cDO2QIDBjI9!Klw%E7b{p%W4HMF6Uc?_Y}MX zq2T||EOZ*2k4lO~Bt~V~7c@yxIFXKwyX!8_7t{N>wR*&zcWGu_?Ou1bx=GvabkJ##UFh!H?cboyy|ezn=L z#>ZsK)x3?df$Eu1g)AwiLG?Ya=6gGwcaaeEjR_)OH?SS#Ox^3v*O_VMNCU(#Xo?4` zWYF+3L`AQ{1r)05A7ZBm1=SU=XxR|8GLtdt5Td|X& zjd6=?VkWD;v;!)tr?GiGgZXL}qKnH6_9xFVR*fXz%k*6~`JG&8O}y#})5-uZ04nCa z+cHu6ng0s!-zeVy2)aaU(bNAAIQRbp`O))=_L^6~{Kt#*%RmdeeD2bTIkh^$r_498QE6qBF_g*>>ui(}a)h!ew9&?+7}@a+ zhBb`yGH3tU(s=D)>q`egy--k3kX+bUz)6(Tb|DYm@!lRKDHybg3=qQ^I9@g|i(TJr zi{14skxC(<#>bl2f(3FBrRtcJ5Ed`%$WiM+nw!(qns?JlKmA~ zXkLvSp&Fdv@Bp3&4JWd%;E;!KDlc#spGywQA;t)&`BITgHeYffWTuSepOMkZms_B3 ztU3?qg1@aUjir7f=KrAXi;#!Qh$_GGBhuIkI(D=EvgnGBt<&6kt$u)M6fon4QMDN_ z%}?N@`l9#9It;OxcB4Ie3%rM%fz;4()Hmi%9l~O{^!I#&$;A2=Z{<#Z-jBBEckwp; zF8v+9{t>_~Rlo`FL8Wpx_hh&4>RCpWyrnzzBE6m8ojo(%&X>4J?JjFMTd4SyyR@HY ze^R8UyZEz{%DhPt&XF?rF;q~0QjxhY^(GbhlZwrKi8ra(H)Z>#EbpPzmXpeaagtg4x_L11}Sszd!g2 z6S+Oir!8W-2DJ$Gf$6Tg7&&1o6?`S)^%0wA+LO{~?KR(Ay&FX{gGZ)%qhp>~p6VZ& z*%zSA>Q}zgEUZb7?>6doW1(D+S$8 zs~N$?Zt9gCd`kw+;oS_A?W4TY!DfbvuE7Po^C4vo{-CTJ!{EpMjky=R$nCtEuCM(P zQemEM&T4SemvRHblCWUOQN!i2Q=s>p&D$|8(L9Sbs73W};ZU38P#5;556CTm`tofC z`I{+I6pz`G8pocOEy@t!3Ou$08R+7**RaY^rW0gii+%bIyqF!!<^N8ufR>9 z*gFQ-cm-7Bu*>ODKT+gORw$a8q>}?*+`KVc`v(?$5eD4cCX=ZbZ>r&bC68mJ7$=PHwoamMM7e~D2 zh<|a^YtB`uZ8U@PxUapTYn&Y>$6u-r$e}rw9ts#H`ZkF{yf;cm85ZQW<>r@++wHDE$-l z4wrY=IT61h>Ybzh35w1X*QdUw?jMX5Azr8y;>V``OGr035qu$C=(d^O@!ucme=B%X z5oSN$!xIS!dJyLSVi7|4higGm8$-ok zD+$Rksq@p~wQ&DZ21eccm~Zz7MK`$X*aCtfnF(1Mao}vlPE_hn<3}qS20{z_TUr&* zr3|facR^79NO6#Sq_poW!&LetQu1)FGZ+2j^-Z=9j8ItU9vIh5K)csAX~r(;+9U?O z2XBQ>NzWA;SOx_ZvCL1|H-r(b^KkJOD#1&`nzG*^Xvn|9brjFcvmX)X%z)=wZ&3rJj`R}K+H&HRSyblbs{zYxt_^j+L$9byW0? zk-~EDGV*_{GQs(6%ziW~g?bJMFEit=>OI zc~ROGIjU+aa@}3i?XJ1m6t%_%|E%p@_}{d$6wE|hLyf770%&s)jg$&YcVy1CO zN*>z-4`p}aZ)D=tb?1*zA^L3=L%cg`h<}D6>ST;J)QchhtNGa}n&{xMC2~m*dtofn z^vTd656e{t>jfqv3vm*FGisFi{;P)M(t%(wfg!#Naz5Ex8qDY|MpsfILxx9r$FL9r z9JS*tnaImH{M+6oYWo+7GuGqh#6hy>KMbU1B3>wSZSSHZc$`C<=D6o?LD_i(*E^y{ zIo;#8(wI2=1O&5R+`X}XxAV3F9L<1&?N%YPVrw{74d`P$<7toaplL{KAO@CJ zP-f=AF!l4AiP@f}>l3uS9?`$sPef9K#kG6d3Tv6rg*_2=K?_~bV!D71aE!L6lXji) zmea(Adx*CvDuR(pDTl#|{viaHIb0&{mBiUm#30~}%r^8yP)y}2NS8=;%kxNqg$-^H zY!RF)Yad=zSo@6ktb2Yx8JlZ+AckZ-tcf}3H&+w35RKMkkMqs}H8G`*sfqDrtTWYM ztHNka8f-0eJcY>KFGkc-!GvnEg_=A|;O_H#scthB6Ir$piU*wZYvsdnHp3)JG}fH) z3VoN1$NPsy>VdaFP&AHne22(aGJ+ImQw|#xRO&_I!%Zu-3ZSC|)ngPb)`L#wM^n96 zU5jzrNEocV=$^luOwCm72(B&Iim6L4eHn*lcJ~kAv8r;YPyaAMcy^6vXYu-x3Nc0; zb&lzZv4zuX-ZQ+2WxAo3?9X7MUXLBvO+CdyeNUOjoO;=!Df=3v_t#VOirhxnLw#>) zNYdF|$~rPRGBdOyD--@?C6Y3Yd>Yn;#1^SS#PD;|-@u!X)*3mJy#bFj z!ei3e(wyg~z>8?F44Y6T|E2ymq8Bumak$%z0|YXu2y}EM@wUh`ONPlywVP}f68LL) z#d&Y~KbM4(ooz@&gSRrnA9&@~pF~0{I}eE#a`By$zgpJ1*-m28PXv<+jCTr$257cK z{gQTO!@Q}1Pn&vn=cjty)Jr=cgBjT}N(A%_RF0+pB>9huTeTCzWCa$Q81^p(IIQe> zO(9#V`IxMFEMNYMozEanF zk}TP;0W&OL<*qrX+;39uNC%!u+Q4!w>RFmqbZ>n$anSB!TW9DeAp1{>_|@_-Y++)g zDb=L;7=2Kpmi@Ch@t4~O@@gJu>M_ZlUisw02K){~*0f;_QLP06j7B`eBkEJ#r;sL^ zxqr2F2Dw9>J+-ut%cu&M5ce}M`Q(3T{%p;QzSPD8cSrgcm8R}h5g%vr96FSCO*)FN zsqUiz-Y{B$&((g$AoIM_K&C2kZK*2zugV=v+Ls!dc*WbUcQl!eUH7n!{?oh}%Fgv&(%CZYInx^BwF?baEFAD=-WGNH_*mIzx zz3tk9;g&(uWsYMm`Svo-UJA=>cd{xSt_L%fFUp7Vyk!2-sqV-Z^U&*Bvn-7^2xVDU zrBMlx2r(3J+h<6vT*&W-FrwMlrQ97{&(iFZyhgu%OMNgA1aSnLh1K4WAI)yyUizp2 zi#QWtglj|u=0Uif?Ir@Pp-sEyIJLCuiH(W(Z&hj7Ds3#v^RJ2c-!Jv+j`wz(_|xa& zpHu1=9mQfrSF+IYbI+;Xhyqn73t_GWUpyM>ZrxDXopm6ys^RQKT;LhudZfTEF%Ht9 z*Qj=FEYjv`U-cY!HOl34T1c<4XF9zMmqzdSR3@4lD!t+~cy}YI zqLn8w>@*E}ApR3F@XAsVZl`D9-*%7e=`0fPDaYaJPHdSM+P6F@rImbBzPj*QA6~0< z&1%7@>J2_8^yodqT~c?Wbv(=8!WlP}xIr6c4Ud7*x zNC4+W^ijk^xSai|&&b)OtATPylULTBqv*;^gKE!dYdHz@DYAGa8Fet)PbkmiXXre$ z3`1>r7_ig$ zI!$Fmk zqi*^iRdeQeAf?*BGU699jb@9jyGqpj?u7LmXkGh^d)*hAxRd14s^{EQR1I;Y_9=XO zwOPNLu#u(Y3U?YmNCP8LS`YwJoYjtMXSy2D`%+ z^j)jUQ>DD@pT!=>(#B`>_C>vwHfMV%wQW~wNI|uk`3LohsAuwL?8!0?A9U5Lf%a)^N$ArEFN+Jkci=D zTTc}ZXB4}g|7`oEURI)S>wY9}C8({W_)7nRGN&8OvCkS1d9dukQ0&handAtmvDY-?saTsrSmw=Z7k+fO-sGI^w&Vt zi&DNNTc+z)D~}B=i?krVwRJZtClOp33oJrcxShWseXi0MFf$lzckgbwaKC$Z-C47} zwhQ+YO?b9feU{Dqhru4jhy4nHqcOM~*>%A_&dPJTj^ow-t_$|_kl%F?U%oQjb-{4z zt%9zL^0iF6we^v~F2C)@_xy?uZ_bVH0n@ANupl$p%RsrR8EyHlT@QZ0dZwF670O?` z+Xy_~N!_jZC*sB!ex;uCzf|UrCv?BNs+UDq#-pxwz5U8eOp4(579oa&bNPgEELFjQ*AZYj@REME0o=7_7XAQk4ildIvv z*;aJowW6DBv&v+-n{sEdZJ}phfnqt`Cwe~KzaWBzrt|X}iwa8fm?Al8U&Sl{CCEL( zWntKJFqdh?L32!K9HlEcdwDR)@o>L6+Iu?n+9GtYj+fiX<)$N$qxTLYS6feN2Ho_| zmNw2tny(>&He^Us+kDv9k0-~3M_6{g;Kd2Oj0E6EIM8D1lM`M9bJYZog=J=1o-`U= z1rX&ZR9%qoJi~0g(#vnXjdx8Bsw+V2b(r^pGbnRr)n=wOb69EOzO|EIskc%eYgqj~ zg*+AhQU2Ms{nB_JQ`NE+8iI&AxY4J?4!Ldps3Hw`piw=ro3Whz2pK|p5QBes!Sj@O zY1L-p`cmjD6`7UU7Jm#@Zzl9m)1=xJpg(#zNKSpmsHs2xUDzmLg3;!jxLkv3B6=$M zYEWIP-3$1cpl`hN_Ad{TK#0YiLC_ziL6OYG03qT|>mS`!`^Z&E!Wytp*K&ejFpy=b ztWIxUbQ`d%vwKBQZ6Hi`B0CTh3r-}-OjZ%*&_W|rfh=^*9K0W7W6g0sg)E^3iI&d* zwZ3-i0?85>7q1E|x!8On4v1thm0OQenGaCrTEko)k&U<0Y&#Rv#|%<9VPoyv?sW^r zz9=-cuOO(tzU7M4zKA{6j2an6rI_%A?%fUh4GZA}q2G4AybYKgf6QxxjlDds=a1uA z{vW@+<0U48d7L8DPl9dR@;c<(G~BcOu<`vKkx&$UsbbNu7*n_LzAsft!Tih1ewC_K zy@6_}y*+3>jSR?!{kV1NU?PrOY}hyc;f{v|OP;xr+QCHwgZGLeeg{Rok1lh0YpBa) zHP_8a6w+@E$FNbIi_jlN5{@Hb)e~s-P@h-mH@s&mTsyGn^=#78Wlac2`jg6Tlw@H} z#l2OcfVaCPSMVB)$Vyd${*)7Rxr9iPEh7noFySu&H~3`LbJ=g%NOL9E2}igGUTW)H zbcel0?+x3)=iJ8ROb6gH5A>g^3epg6!Tb`fV9je zf69FHbUFfmtSN0BFTF>9LW`yN%et%NQaz*gteCrGFED7jw3ZSzQZPMsaD4CIQKxt( zmF#ie0i$nHle*YHoOOP4b9uzSI%*cI%iX2_rcaZ~{C}FC+O{9!jro(}{rmhcm-Co< zc|Y*ACL?o78RdxcLT=Le72liV8sAuWIxYt5XZQ5x&-O~Dx_39N&kr9u^biRjrs-jv zeQ4@n5+fe}5ae7cPsMVEUrb&=1=xU4Tq^J%D{cJ=Uz#a>#)zazZKyM9v6|dXzjC!b zPt%7lr{`rI7oUfNftTqbk6wa z${jgc`o~`U?I_1wvv2mk@ zQcL~SH>{Q#)V90~_7?N&meZV=zv6~&-tO9(xi&}x z@p~%iM|g&GAbL|gZ@Itxm*VZ0MBCfGkdG&7JNb}ZpCDHm`D4H?hRR4Qx0}fDa(N_B zyo|gh998+36B@5260%Ym2mZp3*rF(BT(sp#KMxK(scsAqJ(*;8POH)oz_;j{C#& zk0v+mY_Ej-J1wXAzNjd@*>7lb({IyV!R5oX58p%G7P(V4sty6v7%{uE_?nlg{cnmW z@R!RT4{3Bt4*0*R2MCUAcj)ThA&?VxrQcu%muQ=?!`nDvzi9d$|J>NX9>1Z?UG*5K zEAt!T%v0P|jpYnOBc`~T*(qP+U`_AMtdy%!%(xmsnYrOlpUJ!3X+1N*yzR?Q5cQ`^ zuM#g)v;54UL~INTozsp;{%qa6-6>w z@3E9`RWcS5uFs!HNx_WkBW8(p@D$mL+;wd&XUr~`PZ&md3P(8#bGFA*cLbl|B9#1= zGu)*=0g}5W+P<3sca6E<>^#u{A z+U0FDKlo)ggvXlQ7G42hCfkKD`gu?Lb4%zk!hza2U%~B_EsX8He3Jf7N$nZOTz<(D zdz6=O(I2?OgP?oC0-UwbO=Wo-uf} zIn3-KY^{hmYkYz(>smjDd~Seq>uk4W-x~)o=9nDr<0bDTpPS z=4|ggmE5@m>7r*wvm~jaK|~oA!#CUxT}jv2k7-GX+%+pcUv?huGi#Q7{u5kr$(Vtb zItyLx(gix#d(MI_05K7DR2*8`7Uv-%7Xz^=s4%J;tfJA|?yh=T{v5p5`5oF7q-CBq z+9(062KzUNE#R(xa(=tKq!cqu`|q|N2D5LH*p<{T%<{ zaRl~Vr#~bP@T@a88|F_WUn6@%J2BepmaS~Whq(=a3yXPfu+Mk$yy!~*2C-AMH$-bO z!%efRW}vR-7O2e(!?U@7^dj?>NkW)HKtPnVjWRN*3~CVlHnU}hRBq5 z6q(L;)Lgp!SO`Ey)y^XN|?ub%#^aB*RO3t^3Jq?|?@P@FL zunlSyXTNNXb2AxsAmqT|cqbLrSWLH&C>2IIg42kDaEkctT->yFf%w0X7MI@1>9&{} zfinvP&tg7=&4m3?wY}~I{g90~6x*2yFh)Fj?%^jSW9BxY$J?6u6z&xiqC~kcOo;ed zI=Ec#+;l=E{h)+2%It6zZ;hlZrrWuS=d=@kN#Aj&_^oU`=f>_S<1x5shfWylG~Bm# zN6@fCzBm0H8(!z5l!ojvto+MA(C`5QRa>G+56Vs%dNyGt3o6QCB8}?euy1X@7Fcn{ zWjO#LV)g4B^=o;qU&)tb9~^z#z#eJavz?v7u}+Ju;bw%vwtmj+zJsy;nAadwYpY3F zpz8fm=9-p#rF-+$)3d!P@6S|k148z{u*TZ?C_Ht9P(&n_n1E7r5d;Akt}4sYT6U9~ z&rts?0-1489FBvco}rV1rb5Sgn7$L2vc6^FIkZosq|qyaqf4>QJ}VltOo_vBNs{g4 zO>RCIN^9#hS-=VhL;b)Zr&%1s?S`#jHv4;Z>KrQg(tDC8*?-{~`C!`Avrk41Xt0U) zRGh;N?cqurO%~fGjhUrJqqKuFdxx}3wV9~TO@0x94Ms=TqUoc+$G;!&!C$I-Qh%g2 z<=JlvQh^4RB*Q%)9b+9q?R)8)_`MXU{sr&%xmTZS1z~aw_92zYzh9bXP7CRV4!7{u zopPtqilh(-CnE~U93{32gMY_Q^kB!6DX)#LP*ROv|Nh(cbyPzMC$mOFv8svHN!;}J zF$reBDFfm)v3|R}ldBI#>Ft=%{5y<8|0XrvUvcd=baek-iD|#HsZ1gQa!kb~s)!V5uJ(0g|`i7z(MID8r1UG;%bC=@i1L<=F6H_F6|v5e*poW_txF zNaCus*uKNFdoPOmQ;Q~Skp?AKov_L>*<#M23N`E~#Cn$Wrxvs4j(6C${4*$x?bZzH zo{W@}gdZv7TRrK^t;6)6gJe34-r=BtcKwdta<-%5pg-`F8XD(a#F3)=Rb)l_mPV#+ zb?J64(pFy=N@yC*tEnAwgHP}rl%z?krX(n-!3kLyDTD;%!6kX#^Hkf|uY?JM`4#bY zWugOUm|9Lh1fBUqh^E?Dhr6U!lF@Gn5)ixXUggDXmhiG#Tw(gv*PQy7LB+qB;4ymllCj#oDT|RPrm0 zU_&K*sB{deEPE3+n!SlHsoo<-I(66ckV2E$KkgT~#Ia$S#LF6sDE^;??3%2`g|-cy zk458wH;4^Tbe#?GA`k{Jno$YEeMr57hQ$3Iw!Hd(!*vUR8DRgMY#6cMohh*F=WHC?=?I_C4WmjjB zs9I$w2HsNH-fmYz7dKu?|2jZuQZzyH)U;wX%~8`H`5J8hc3Zh5EjL)GI3(F^BvX&j z7ZS)LLjv5IF=q#oI2ROZMs1-{JT#U{F7ukMD>@+8$dohsyRlLVYm2Sb=TxiJXbq{? z>tM4LesdkfTH`&$Hc>OEzJN|!iD6?T5D_~Tj~{rsYIB#g?u&46c5mr%HnBmR*auUi zS6%A+^$VoyXton`m)!>f#_T8PJ}jiyp11arby_cZ{8Sw|2!G}D`KbiAUgzE<7eCct z9~$+5<-Ll4L5`Oa{J{(CS2lDky14&8luO^Dmp@*DKgIx?wWM^-@gef5;Q!AE3x8WW$w8?f@O zLWZdNc$qq%!;@n>I_5`)odT(gad+8NNv;Cc2e3`_`O|TD&uzp+S}@Sdav z_GWvX|M)uwGm;{;FVVWG<0=bXPFiI!@H}@}ivZ6t@nd4Vz;rN(DLG0Zn3WYA!;dI7 zMsIE-i#D-@(7QT6*AxM`t@^_-Ok58hO3*3=9EvSCJO^j+XY{jH!DK~mP$^vNbp>~I zd@Jkdy?B;+TW;QJzL{}Sn;ds-cWTE;q~dri7P$Z+U0O4DQ`xTi_(doX)exnQ=2Ccz zrC*mcxh9Gt_k-e5XL0Den9vISRZrCJa&PH%o@Pt#9s+~9U1uph7D?6@J~cLdq&WBr zaXc{9p8qtvXQz|&49QP;Nzk%rc-=)8UU(r3ZZU7iuD5#jpXBvV&?fg-Y9k>bcD*GJ z`I9E}29Ymg_2;#2&kl;tCVL%9bR50(@FtpUz1#{AXI)E9(+hC^(l}By_Pku^S9z8G zyofh9;?IkEbEE#eB4Qr;^N4&{?9VIl=9c*LO1-(I{=AqsH|EbP^X8WM^WxszxIeGl zn_KSBtMKMl`12~gxxlIR=2rXjYP`8M{@Hb2gYX^)X*GvE`yJ}hYjG` zz)er3vAYy-m;1lto)}?I^knmI&wuwnTaLhYaJF~+efoO4)1oM1$8|-Hw-i8I5-CPn zJB~3iCUW1F;H2~9EMHg9LC?A5DYW&9}7+8|(TP&`jzrl}cK4%^!wTCY7 z%)Prz+vEtM#_svW;u-quTWm%j0C81%X$G{aY0x361vWUt==IC5iZ_hqF@+?mVHqak@6jgt?T*1sYTub|T5b-MUgzzh zv9YcdM~bksFIcsO6XOX-`Be5T2~Eu7oIO4*Dun0M#QVgUFe$XZWcDOX@_MUw(y}Kt zsE_dWn79K+dAkYSY4`6DPi{M_&b5!bQ?)V^_s)%WtvD@-{V?QA8%62VdX%4roZDS` z4t;!I#Fke~dBRtZ=`$_WmSs=oyCDojD-fcq$4GWh?Vo;7`xzLi431+=KaR(EZuXM7 zYx2Q5mFaTskr#XRKWX}X#t61G^Ft!FQ|cErCRF62(=<7GRONN9rgywvAvX8rsNb%&62FxrsF>k+*O`gf z7BC4p;UVou#@QLod$rHH(*}$H@Ggw{)km6eZlqACs-8FP=fmE@a7+wfKUo-IC+USz zZ@X$i6UE?#))DWH_3XI8Sij!w+Dk=(>&!fGnP#~i8wG`?$NcLwuO*;x)e{_m9*Kka zSmt}LfC)U3w^IPV`GPBA>5Ie#K6BX!-2YGmO+u>RNq$CnGm>!9NW!a?uyAMMt7R+~ z>b^DVpORbhglYgp)D?{aH2 z__gkx-89CWd=N-X^$B*xPz;>+Nj=w+;3-$!*f!Hgel&Z=1MnvbW8_uTP?^j^0yk z@v@HwU3ztx-i+3PkVW*mvxlrRNW&y_34Q~n%Cqd{QhS+WFLUjs#a`yyi!2)CGjxx6 z$v$=2%Mvd4O2X5`8T_Bgf4Rk7%Kth1*G`-k{?F%s8wQPbCAEhsap|&8#)8|lq|EDF zQU*K%b)|METHo-tnqW}g-oXp-uX|v%zIoemWrPHy=0t@EZ}L2R431ck2w_Z8QktY2Owy~Cd+R$kXe4@DjU@4}yHf_81wZ)zGmy;r$nRqg|*BC>r|H3`#N6#J$KA3-qYol_zqocyqnAF z#ss;cK`mE)54C5u_Xsg;h-Bjo_^r94w&)t!nmlWR!Vi*N$2_yxB!j;GzTrPyp6N5LI*j(%MK?%5EcmD@T%yJ4+2?MWI zZSHurT_0A+NLlWkSMLX68(K5}r%KvH`SL}56x#HIM!xuKll*od1EiPtrA<^8Ab7z{ zeP!*L`?WLl8_eR@UHV(){RcvztsiHTt45Z^?WtYwPTNYruWUhBCGReQch^)OZepgX zhNNMh^oaL1>ZGl=>%CY3%*!1E6h2|$lJT#=Rpmbr?gHSN>i8w9!1{3`z$Gy4K1o%2 z>Uug&DD+mU!TyDLJFgYqoR;Y!HQaO7#}MVFHNJl*O=jY$z;nhCZisJ;mGpD>PvOq3 zUk~z&p%ux$NSVNv#52E3;x=qB>8})0?lE{h_ARXVue- zT#L-DUB76Dv@u1a1kTe+yXys|465G&9Tj338E4mX2wY@W)3W!_)+(qXq2sQNxGQ^8 zyBE1XLK(B^@XYT-8RLuuQc&jMz%KWKC4_4FM)$H!G+}4vx=UNR z@5A$zis(8^R|tF-3e7BkwdtzUS6k9;i8r?%?WaY?wP{0-P25Z>K# zt0tH3-K$$Q4dlEPryD7%vt1f!#~jjEk~XQdoQbMnbcMl+W3@8Dw5k#F06PV6j%9u_ z$Jx%SCSGWXXa+fxPKH@brF1(D$tDCIb!c+e+#pqx8DKN}oOo%L$eO(u2TSCCe@mgh z5<31Vcj-r%d#WEcwY~E24aA{hh zFfNt%N&gvmnU3veuFh=7t!JvkF+um7lpg%jt~Z%0_Ut)q!aFz*66xT`d-IB6S$p)W z9rjcLI!f(L1f8dqet`udFF6IGm#-YPX{1#%nMNfwmugD5cNfm~A}6KZ(o`#1fMuuA zO@G}^w<73jIU!^o{ZCxtZHrW!eeEv{Bb~aHia$TyNjA9S2J_HmA2#XXl6uwXyJKo( z_y6Ta5?9zSnGXuqT(!A-d*SI;NV;p@K^mlXI?g77Mcanq4E>bgpT`luZl@z&%h6B* z)Fa!<19o+EP3%Y$l>;ow|EPT6mF~g9+CF-$LXn`?yz5@j69V*a{nHP^+|X~0A0wUz z>1w31J~Hr1&mh4(e(bKh3XiiBh~F^-;_bSNVx6JWVN32behh(qGKA-LUIZF~x)a$h zfEnvyl9DN^{w!FzL>PkIx84R?HS65tY^4(+Xhn~z^wXD;pjKQW?gl3Ga@d_#d6>{6 zgUscm>Dc=T5qRgHG|jiiZGxw;`IKi`?Y)@&xai!-^57ee73WqATj6@BARjB_CDQ$) z4;JPoYU%-U(FiNg$gRFk!$B!klQ7%|THnY%GDIDYb{}@0AV7R-cjdh`beDVHNC!;G z3)kD+^q>9?`o;yNiL1i#q(8|GB)x+if!*Vixpy!(^I5Bpqs003Z&u|=AC$Hh>Vw|X z!o`Fa;epx1Sujs^kAv}5jP#thzGtw&kDXvcxX|5Zg`s9(kTt7n)9)v!>(%SoBS1A& z8-4xbV{Fz_q+n)_n_{fd(P<|g@@a29f*nS2zfhv=RL%@E9v6A+vHU_Co-AWfP{#*< ziaca9kN^BLoL4ZWIig=n=c3Y7w+VG@i1be*O-ilLQDXK=*b&^g!sv!o9MF&*r)e;r zJN69+HsC{PWCDP9y_kJXtFcq+&B-D#DeZpC4l0MSNZcj;uv zk2BX6M9iL1!!1xnD@6DpvYK=Z08Pt8`F0dPF6ENVHhwHh_*XlE>F_#@;@H2r>yB{O zeGQi^?ZZ(!u9}qU8^<_h81q9UBRI&IoKl}F1_l98YVxQ;ON_fOz6#H+`tVC(? z2WLxrOthG_rqNibHaRf<)38?{(m&;bQ4uhE|hJjF6zUj82M_l1L{zK+SKT#YiBj9k6`~&4$&H2Z*~R3$3`@ zEMwLKcHCc50k$I^W991|FAV1dWADRu6Yh^mDJTFN9ao5|m*>AQoc*}1k)a)MT}dm` z`I@4nmxJ2A^tPPGD^(Q)7;n^1%hT12zaJUlXQT^WF0A-eQ&PD~qDC^BH|w4rX-3#} zHlcm_>2?4^;N?}rD0$_a-zQ~dsj=W$Z^OW{>xtojyYhqRH zdvWIa9qI$aFa4aI^0ofA%`33c)^#X9oH$QKA*OQjRkB%)1<6!j0!k4vO`OE`9Cz7l z@g~vWN+AwC6tg;33-e@W&E5kYS`0S4U(4HVaZV{nPq8`>yokAj+Zk|vmcLed2YXe9 z-KFb=xRugCHr8L8?~wWQw7#}&hZ&I}eX|mTY-Z(LwJj81noMFV4~caf%0s5`bjygC z|A6`#W;%&iL^zpT`YX1U`{_Brp!;U2`?xlS*QW5A2(R_Js(0onSJ-`4-NyC8ST_KTKVYcqp z&DV}9t+-XLf8c>` zMlWPup1oLE?fk>rs&$^#)`*AY8M}{JYiG5mC$pCs($oQ5qSO}uMp<&aDMf_Y_#{Kf ztXC`!mA^_QuyXB$(VA!&%hM9nA4#5zrNiG6@2SvdGP5AE*(8+5J+;52z+3 zn@=BdHWt=6dzSziAqsx9ydd_zRDpivTHBh?H$aGF~2U z2J>`1pQ`nVYn@3l5&|8)@;KfaF)R-YX_vAZ5=O~+B=t^CrDUVhJ5I-LJ5Bogk5cAc zW}^2DG*TfoQKO>TB^Db-38{)^9frx?-FC89#bl51;dZT3r%DCfJ9g$IwQTn%F}9WR z6>@VPL1mr74fAV$-KFi+nh)i*w@OyJOTR)w?*;ZBQ1=?sBINDh$BpRKP+53B6)9&C zq;{>%@OOfIt8w;QE7|DBJ{!b-?5>%N#2Z3stwabUjO?zF^`hJnl%TGd!x|?SEc&&? zIlJ(+bG?rJ=kbNdj$*fd!V56CWzR`@gXvCyanZs!P%0fZO&;T~lqn65WfcBOcgc51 z7uf#8Gh}xd*XRW+xMn-#H$T(~MGcn{LC|YiR6QNFEiK zJq`FK{slCFeGJ=_IHh7n#2uwbz}71GRu2u#p{JXiop@i(rxSJDbhT9hsD{~^2^US! zRGFX<+l(y-0V?=k)M`=p_-{a{;eWT;LoJ= znbgh>ZIm90r+wmr?2J&gRB6NJ8>!Nq_O_+k(OWBJ5MNcP<_mQHfaL*q#ajTYDH&PI z{pus^gpN^4IpsZX?m0j@C5?2dysC}~U2UH`O<{PM%#Fz<1XdbRlQeZGKS0!Ie?cY9 zNft1$IH#oSeD*Ppz`>JOe90ipo?ku|^83}N$yeVV9G62M7w=uH!W zd!}s)WvpMlR<&bYu3Plk1_99R?QQpt1Dj<;@S+(rG#%S3UFHAx*j%ngjOnNU&#-B1 zm>O1)F|&BlEGjbiZA9BaLtd6INB;S4XO~NjF`r|LOCPTL{}qlcg?u=Q{Yw-gif#H3 z6uaU>;Mj&{Y5D+)Z88))=Y1%44#?5|i6%p_bKaj~H(81`j4GtqpUXrXj{p0masRKd z+4wh%|Hk*Jy*QGv+4v!_dGm+BCiS`Mvj_5`SjfR-Wt6U4Zmf)rLD7$lO=+HNN{!Bb z5nSy?ck0Ga$r>H*kE&c5x6E9SbP06YZeGHd5&*1ZCR|E_dWizw)$^_b0Z|T1UZP|` zri>=ZjI1M-QB!%d0E2EW{-1z-o2eM9T4;oP6D;u;37qOK=6~5WvJo<|MzKquss0KT zNxRv>zg28IH@}cco)RmKQQfd{YKg8TU?awLnm-TYdMz0HoVCwZj~Fu#wa*H3l^oo& z*Wj&Id1-PvVZ}5hp1ReK816{Zs>d!h=QKT){{EU?@~YEW0;Z|eBep!$H8V3ZrZD9) z)?tJQ0yJq9MP@2kht1PT6q!T?!we|1nw<~%MYcAQylXz%zBeBfGI9R{zDl$sPL>+~ zR!LL!iL(={0b(+^QldHO?FUU#i)X4ovyFtG_b(~cs>&4U(=r9DN^1)02byUb`CWk4 z+!Z@(^bPa%vm8G#lUSzKV{=hbdtGgzO&ipY!%FmgQ3wYZf;ZoO90NmZe{vqRC9Amh zx~dQchw6M_ep`oJesFL|9Txm$7}+)8fE7=>;TUasjH+^r*%&PAMD}gGOq9wlk>SFncCny!gsM;E&_uAm%Ut2(9&995l54!>}Le_ zKuf-zYjUCj8dOo#?8E>Gj2z;(;n`oV0oOCQul6a7$J5^FdFil@o&@`mjZM8Ay~OBB z+RK<8&>Sew8diP;?UfSq?Mxh_!^oS|TUbVh>u@X{;wRx?*Se zYt5YSE;APtlLwh5z%y8^N2jU|>K<%gMD(POcYPyYAFbH)O$K+>UiwWzFEvLsQ&V&i zZtLl-L=gK?`!(b|rt94N_bH~v6r+6T1Yyz=N~lrt5WKCN^qY|+<3~RG3u45c`63Vy zsJBX>I?wvI-Xjc@+!(}uXbLY-@>?G;FMp^oP;O_0KIu9qKl`4XKCEDVLB!Fdmah~X z9KowU7*b0CP{!o)jkQNk;!zw zE=taVR^FzIIcf!cO=@nl!^!hlj%!6j(#fzUc&F1b5YWsKxFl|Tf1R$`=ydD}#Q2xf z>FTq4WJ(W3qcvn$nTRGYnInM{oG)XtY?%^>Z@beT3x|l^U^fH(PQ=dOGa8;*b#{iq zpoR;TtqyhdMzf4uZ#G@KvXOFH-}FRz69rdXM$*H=pJ?{rlk)Mk%myV>rrUH<3UO3odZ_cZbSPmlk@^ zQL>J9I@9I04mH^>%=-sQYUvgF%YI8|C)l~$7~4yqoGNqvpF{40Ysv_yq$3@TVJA$E zMvtskb;lY4F!6-xgA2yhZgQvQ3?QUc{jzwFJj&;9kv^yMlO+KLXe z@fh84j8)>VRYs~-wpVJ@UoY`5HGj3~B0roTGHHZYSBBFg_rc!?V{Bud))!6)X}*x2 zeOql5%Y>>y!-$Rpt?}4R68%9z+Ny`OP4=Pmwl@sU#wcK_z5cR!|N9o$4pa?3YzKC$ z!~~T&aD0J5jU{gf1C9L?>=ow}t&QOpial%{d$8RQ(6n7+H9VnibU=>7*`t=trjLgs z(S6WYp6r#H@vb(yr}wTVNvo~fnwdTEhKW-4I1#bcsYj+!JPY6E`{%HIlTRdWm!VFyKWD$k4*fn; z->2~1a$2*BzTUVLnZ>X_jm(2n-CF;u2-ncFmCsWJO-;4>ZYI_#o6W4C{AuheNpSur zvoEN|7uLv9ztO)W=B_%YjG02vP2=5_Jp=pcx-8bVbK+jGK}<1x#M4*H2H8!VASHdN z{m=&d_#_(eV!BM8E-9zq{*-Y^39CR(Z+&JB37BS`EmQs+ z!Na~knjmu%pR-M))nSR#mZ5ewjIDbte*Z5Yy#2n+T_2|bpHz-1H9j%C6J>bGR&ANE zC5Uu;EL~jqZUtV@@(#`Z@kt3(|L23W~nh~c`wfND4 zTC85otS4c%65qw2%gzeeR_R}=R|+0c&9-d9LYi=H?71zjy|B3D zGquk@D1a^F%`(%RU(p*or0XG*57@(O{a5_SCACvZS|6@`-tGJ)?GnBxUQn(*=?#tu!NQVYXf!du& zJyZrcnS&knUrbv0nh^u=TckDq<_YtLLAH&rS$Spnz8d8P`t^N-ZM$8@7ZyFUEynk? zgz5$Q_5B&Jsn!b<6pS3(jxecWJcG@9JUIGwDKB^$psTfzI3 zc1u_q#78#${zkuKgpLj2t_N1bZ;?nXB~TgtXsS;V+_ zyD+lyQT_Vn*O<<5xw(^97^h3(2qY7IEVKOzn2E8kIXnFuw(y;vm+v|jg-GU6zGmwI z9Y%4q`?<^xKkUWcmWldh#zus|FQV&ezf9Schf_bcueTmOdwJCx9UDyQjM-nd+#!3Yl%b~*2$xXZ)tG}5Q`5*+O_-1sfGC_;05LI#uj zuVjun&Jf*{yj?FSa?fsU(SIxlQ4xs|rJ3Fk>fr5%?vJ}uH4Q^at}xn?IPv#N{V&JV z5v%~D)(2BxLjoypliO7A^&!gHxN+dE##g9JO)i_=ltdjA_Dx(1kE zQU!CZ4zD%3D(B#N_WTP4;5!xTln#37`~;BYX>p0nRb;{s=yXJ%JB=T#MKw`;d}~xa zdaT;*oD{XNC{71SB$b5;aZSNDq7=~}M<|v%2&aLfJ&;LlRU5#FXa-8kT(VLw8uO3hwe;@LF#{*Mjt!zgy9ZQ~01VQG zKDLcPQjPA?iL}IBb6hah+1cCfc2@AH!*&$f@}IDRve&?a2mK`EO#w^5nf|?0L4CMU z4j41L3jAsK(>BGw*;SIe{Z?1Wq27RQTaLL8N{3!)%jGnSzq_oUZ}o z?{*P%04r%Q-RYX_m|V&DKXxSxa`)fsN{+n0O!-GY&FM;}a>@Ql1&x0CzDY^O3(A8C z=Or}7|9Qfuu3{B6H<+H^H90>lY95(#_m@*t?*0e1sN7=(yn`1Mn0vg|JdS)#DY-#rEsLn;Uak05VbqacWxy8%H>p zT-Y_e(Ep0*2%YHAl{_Z*_(StJ^7Y>ZujI>P5@_|OD|tgM{jDa!zm7@pqg)mPB#1B( zB9LSJ$I4fneOBI{8o197vg*otL|-RXM81*4L$WEPwiR-eQ@NArc)49UV%S9#5i-a4 zoJE^0J26b%@Dw(6zwWNN{>Rs)=K+}$YaQ>g34J}U79jh}gQ9<^eZ1{ar*|#6$*dG?rA8=<^{ z)o7VSs!yX1v4J|5BM4#Xq3XTwyAw>)ZkrlWX7Dw#C)9(Q^NK zp^*eJdW3d#mAY-^xy$d#e%1+w3xQVl6{Su}HS_((RnB7BIR{ zDzfMD`GD}~%cs+hDCas8*lf`Rp9oQYLy=e9v%R$ID8HFAryb70ZYV+w2s_63l_pW|Dp`rOjd|;hgxTsUadrYjgV-4{H}P#G25|T0Z(9`ieCyXeakf zN|;3nm!>w%S?}Ml93|CHEz$2CE2OY$0|93}dGBDw;ie9CEg`D#GMW&8Z^~-$^C!xz z(MuW!-R>yTQK>q%3?#2CcCQs1J{>cNYmT}TVyI@sBR2Nde`L-xm--Oz3FuM(22*rO z)gYZ>36_!B%)M1@o=epxt|chdx)z~B=1t5mNSW#qJ6bb<#x)nbuCWt#1H#dw9H>DjBs4V6y?a9xLBy^Vn}<_qW*(wv%gd+z^Gx^-84Un&?& zjTufVD)o`Ok6Soe-3d*{A?XX zK48Axd%0lY@<9R-p#RStCyY%%J%LXMZ-XgOukYRegx?uhljeKrEu{1(waxBJ-z3hzP!MUl)E&B-0P-O zDT#?vVbD&R`IakAX_s3 zar{%mL3)UfHrbza7k;~rZ@$T>4tgHd)=%rZo*p+(B4_vRyEH;WdSz>nZNq-fZVE{} zq*q2us;3Z2XY!6ev77#Ts+n4=QG@jTwgBFxv4ACH=}Ua_1J#*Mv&IwgV}qTwqH#ag z5ypN_KiB&ABT$aUl_?w*A=dmrRh~Gx)QcR2c9&FmiJ1&>Y>T{i?_N8m^8T&w@ouCE zC~+XA!M$5%JnrN;8`gmy@-KwhBOs>eu;GM%VG##{aVh3#7Ua7HZ!0{EM^(DPl&SWO z^s!!7@mdX@#|N5Pp^lr)&c7M%-78fy-c{-yGnLcD<_Rs2EoixaUOC~|bc!#Pc-+|t zik-KS7e{p+6K2FhSi7a|>0GyH3lI&F%xL=!GDGh038(}A;K)&3+H8BAtQ0hta|}A4 zr^M9y{L#!6PF96%M7lTcZmTq84RDA>inK&l#5=eBd-e~1?6(fpl z(YH0oIp{zSV+Z-v0`!s=z%92uZ3mTg5H!ovbtN3lR=_+9=e=LSF z`yfX6kyMnOiHqCa&aa9aSZ!zIK<`KBa7JdM*g~Lt28Vj#3enmMBdBvcjVb5ENu}OY z9OsNyyHe7bFcbO>L`QT_1*5c@FretR40@vK@~m@txlL0KC8;5#Tkk}iwUuZWr<^$( zk9yj~cfZaU@Ke>|w7B4zX)z0{LH!ZV{W|&58>ewLR`2(%q<>|&A}@QC=8{GoqCEW2 zE|hC=ZiE#O{?hg?D%>obH@x+%se8Y$Lp~Zo2|j4pE(7KP+JhKo!lpOOQ4I5%QHE)Z z?l8=YsdhD%6BE&cP4q^(F#IZlskn$6_MbE=J4k_#mj?@norm!=KL2TSv4Sa4m|`)k z(K2H3)Bd*mM_FQZ$WN==R`_7ZyT9xCc8;Ohn&pCjfRyx^f;-^!GPlqS8 z#0)Pnf-Mvoska=$hom1Sqp-2YW$ zeF+{QB)ix4O2M%z$80a^uM}Z+JQNj8*|*H(B0=?+(O;yIXsR2&r;Xb$X0_`9L-hr# zEo-)yJ`ryYLh6FJL&%GX)7U`aO^X5dbw1nmgL{!t2_E;`)W+`ACEc*gx>Hwl!~Qp(r~thT$g zd*mTwSmIAEgO70anLTXvXAR4JTcz)ToJ{1YFvj$mGAdL+86$b5X0??8;@_qYc!@D< zk6lR~biVYFMl9Wg1Jm2~8DU%mhIebMsF`?}0xyMLZiBnMWlzqWy1#Uq?b6ZEU+1{m zjq>L?bvx6N?zqTw^xL^#B=jeI=Zkc(A>Pdx3AuW;vVLqVkG4|Uuq%b+tYKN(&spf^ zuOZ-T&N+IlNSwB*@th))63JszQ&!u20WAUu|3z-Or9-gev24NP`L?xPE|^G%Y*?zr zy|x{*_6^iL)!8Apt`5=2ZK%yI=$T_8F%=R)7%l!T#|?NQ#9utVVvC~$ zMY5j??k_d>3$v|V-2_I`NvQvF2{bLey8BQ8$m$Ntkxm?+QSHAN&KaxRmg1bzDWBDW zyi5j#z$t)jt9XGC$6Fh+Iavv8r;whZ+OGpgM8fu z-!Vb<)}jNc_&NOuWOHAS{PlJ2MJ4lS_}grj#eldt2{#Wqn_;!Cqqt!>26f~OCy`C5 z$bb3y!YmjlYBuqH&cfah;)dViYMpOx0PdP@X4OX{IaYYB;4NQ4!qN?#ag^eG&NBSw zVrS7f^bl1}VmJbh zABt6dhj~de2~ib|KRwgVZcdMyl!EC@OyA(w@2%ODyx0iniY=@Gdup}ZS#FtsPII=p zNzjbtBW+Jzb#_+hy2yq|L6+~SzJqG7=rrW&4q=0xoBoa2-DGSp-?Nm#<{KJS&j+6g zL|@KqDXb-@L>S03)37Ik1j>`8uXsO|deZgrKCFDO+HUrf5dlKEJ zl03SI`>m~z4slm}M%|KZ5iOe}698l)oYVacF_lo4YQ~UJW>_*GSBN zm4Xy)^2hT`d%hu3vVQ)ZNSwB{K4@9P{->*DEr!97?uMdQXKdo7LYjxtN-2!oMJUKlD`>SvOCE&mW*&i|M(PF&oNaHt*Xf1 zj9oeuUhr)4q6m{TX`hDLPoV{?k{4xz_6XnREK4Q+qAPJuOLNqDq`AvJ8+uODk5nH4 zO=sg%%L0Dv{j%5tZ?)7EF^}>lMZLLN@SFG@n&xig4uf`Guf-W7@6(+nFV1G($a&<} zEO&kI(P_GSsA*O@xE1@U#T(8eS7rl1^a+)AS%@ zsVIYOKgXM+nw+{aVo2l(T^P$#7#H@)FDBRjT5N?G(<{?>JB2h)BAL9~%{B_*tko*BiY7Jv&F@+F*@{!-Id6HMVQ4#jjg7j@?EcHcw!7Mz@{&UQC*{fMe7{{#1Lb6Q$aj!vyZX;SSbC)mn7$z4CE zWgVZiFRpiuQAgyI2koo{xyiW^C|(=!vhsJE&K<|3=zyul1+;)9lVnpP-1RVu8%=}S zaGo{wv3Q=WCgfSiCW6r%+BLrs4V8e1xfG-H19git-TkKXnX{~}Q=5;S#V-I;*SRPm zf&LE3I1OJiLLU-W%2ZP7Iv1L+A2Nci>-_m5((467j-wv^(|0f-OvnY^4Y@`AIzBF= z8b)SUl{gLOlZ{?b7OgMtPZ>;m_H`>|uznX!%ikS8bmZ1g=lhQ_^y`dw9Ohyh*v&i00Ggxz0Q*_F^GIMTQ|c#6%v<^XWWSUuQ)XsjhP4#U$$@jq$Pkb$cqQOe=0@ ziJD|+tLMp@m=-fWk{lnQgD7mf2{+oGNaoU?2OC6vJkWKWzcbG==yjbBnCB*8hYu{& z)(DnmOhVwPMpv|{0HaqknDux*Cp&W{@B!+yTRH1G6|iBE93-4YGL3bea-^KZnGmb% z`~uI_|7FzgGE|IFxA%e-%1XdB1=UK;S_eQ3Z=BTxm&Sd&L7IFGyG zMPpc0VNU%y=!HAp+-DbD2GN_LPn@_>`2sb|yqiq-ilP+Co(NjS;Kgmgib#McK1V4(Cler&+ z{)7`N-7UtWo0Kfx>Mb|@Pa8X8+rGz+7Wa_OGk*Px)o;k-_Lf&7Wo-cd5f+z;HE6qeD$BbE288Y^Dc@d3$wY;K5zcTUI^`tuAz+l znj=HyS8yc@Ep5$SoB)&C9$R;>Q4zgO#{|iVDf36w^C!#JGaiLyO+WmI*5oZ0BW~Gw zIhK%rHIg%Wa7G_ul_Sjj5;`8t;>1URZS>v0*?c?BjmvVh#z*s4|5ygf2dCjlR6uQb z(N6P_t@gEe44+ahS&c{kP=&KZ%5;YHt7+?IdiRJPZW)fri=YH9_nrm~&Ce1M8O~Uy z=K7OTA5ZM#V?pX;Rv#aSq(1t62;zP821lE|>BbSZK2%Hh^=b#7f42~4+Ff31g=D%% z{|ZnIyPxfY?!Toz7WKhVZR+D`-5<}?qk4#Mr#`;b2ib9ajJJ1IA8%}4b(ozTQh-s& zl)Lc6T}qg%6l61^Puz>1x~nSml|~QCBW;)OE}ul2A7dbI%5gp!+Ubg(ot7}#MiZNq zsc;(2l2KLDWWi%~%oHn~+$=GyVYT3+UGTqB_`_PvsZot39>D~#R)V|F>?q{k<7q*Y zvfasM1hNs=Ezgas>9xF}D{S}7Un;fO#S27}JwBw(N-O1-3ZTt~+J4j_@@|tY?3+Is&t>bx;)AVf- z(HCM6Q~7dDwpP1`-0LDvQz_q)R}9i;`z?~c)x9q2T^BJolR_RhK2K$BF$bKK`yiH7hj8w)%DW{Xj(%+^3z{fG!CLz}(bl_x+37Ha}OTrif zmbix69izCAlPKkpdN84#kxv>!xUMRXVw(`bgH(@9k3J(aw0%U|lmm=7xC_dip5x8e z@$EX=xnzxm?=%3V^) z&)+(yWj+4gUiT~uunm9~3!utABY$HG;JQda!f9Fs#lFe-Kj#zn1}n(59QAvvP9oO@ zpXwItl$c+N*;DFYyHYixbspKY=S{9!+hpqEHjzoyMey0(;?E^n^%n1lxRZxF4euc2 zpb1Su&DG?vT5|7h$WbBVY~DnN7Qc!}0^>J+7}Yy4$&-Uck>LXtE{D{@k z{0)+P(E)We2Z+5=W25$*5cD#Rw5fM5BcFm^=Ax)tzt(4YSJ2bssHbrjCG|cz>RlT{ z+Y5^}u_|a}jTTN8=KGv5!F>@7&_h1$Eq^m7Y&Pi9DHNjZZ)=RotalQd)Iv?od(%ea z25GO5S~ma7N=DkgS;ojV0LU8=no2lrbaX@6(9WRUxs{`H%q|~$zTZ*0zUH@6U7vpf zqI1XRcA2pKnm?n@WvDz!{N275Z)Cd?%?O20qmcAw62^ovfKFmR4a8acS1M>smPz<; zwU})4_z!xN6Xw+a5hGgXC%;UUcCc(?vkY$J{>sqt z<_`w2u5%0(>?FR--?~l(bJ@SFc{=DBhezH|HZ75rxn}s-aHY2I(*D-2y!YOF55D6( z+(Km+OpdrOZ`+s5y^U#jD!HK$sAOb4n%0?|uOL~edxWYh!~%>qHoJ<0!uM8{VQohj zb!w3>W|uJ)^I+LkS6O?FEilDm#>~W%wP3Yydz)Fex_!r|%2tgi+2?*-{XFYGIh_;C z&g%QR>ZY_cJ_0FGAbA3LDw630;v39uf)W>WTO+Fg=xozjJ-x_BRvGG>#IdOOmq|a2 zKhmWlTL=WQ1<6_bI1d!h7`i3&-hB*Kr@w{z45eFQ(TtOL5|XKSgtKS`Z^3HE8=w>{ zSNeBSQ$!ErbnW>KP1b!`R}tnPjCay~R1nlo4QGd>EXhW{gk(29!`OvfPOFV;oUMPY zW~{B!*zVe|*ObN7VOqgAb(sGi3eg%@PpyA=obhQq`xjG-V{~*o7iTT`t<-yvQREy& z?uq9aKWj`D!w4s#_`{emk5wm(iAeM7cf(AbpKsKCh|};Yuc-UXH>|o>JYm%RBc+;V zWrt$QpKAMobghc2ni_2#KTL_v!;7Vc))#*OHFUS3dz@U*@R*8%5-DbqkHRuADmp-~ zi_-O0r^2>N*cBhzAaC29Kdkx<|1kAJbNeqfw;9tGsE0?+-0YMi3H z!cV?}MxY+iXM#a}YUFzDPGHV3FzzaKW&)ZW^nWUb2u%RUGkyl8^M8TeWs7#aBim_M zE&Cj~|L)2~CdV@^Kd+FQtos>?Iwm1OES^nG)cL<6n4&{+8x~otJ5IA$2eGEuk-H4m zP47zWPIVT4&fx6j2+(-PariG5r(&9|jHfKlb)?q$-}rn$I6ok~!vg)n0$pMVx3Y0O z-hPv_crW!{=U;zvfb%zsLlIv4tHt@g#Tg2YDP+iL*lr)YPFz-C(Q?O9@q^Esy>Vky6N zucdsmrJSeK@ROP@5cj>ux8rx9C)pf1V$|7h*SQf!Bc$n1g4F51r8H10Q8B-RYU~DJ z@?)XQTL1L_!mVzp-s|Pndir7X%lqBu>?u^BdJOI;)PAO40d!0JbhXf#46b>>&B zQr%@!FSDt49I~)WZ0fnBvW_9g6ov<53`-eTNN}m9Q2|T76BKGVmeS9oP~P}q7K;eD zN?V-Xpt^>sxx(Ep@cxUu|IdY3Ikh?c^M4IAbz1DU`DY_%0ykS&F+sN}%kBF9@6pI* zcE9Rj;Jy3IoV@o>r93IF;axS{yLcFmQR4-l!=%J=m@OnA;*O7TVXM>BfF0CIKso4H zV=lQw7VtdMiVlpq>@pd@B3iq3vRo4a#)?5Tt987HGq&%xcCBW-Yd*#`&eOjIMMcKn zT&ZzIGO{*VR-fff%3*=UiSgzf8IjNZuV=RuDUnx1ZtEH}avrM}Lv(4Ct}IcDHKWLiG9)Q6RET44Mmw_B#y?hUAby zY$cZscNSHVgqz&#-4d($6r-&Utn`$P$%vzo7e|Q_FHf{!j|@u-pq^rBbpB>{8`r*R zkk#TW`jVLHtok+~)cf*sk&DMrtY;?up-EhB!g=z7fxe4C_rNBE{H zFSaF*w310MA1A*+WAIFky4U`5T70Dt`}7*2U6?h!05|tS#zsn#k%yC!MP5$w$5}Ky zNZ*GjVRYQ zPHA3jZ@IqTuV>r#kXA~V(|QRr7oGx1E`3-S#;@UEf+3!9b~G6I@kt11{4j6o@MLUZ zviQ<#yiwF@8|FLoeqG035sH)WbF;E;yrHf`11Bf(E^ki50iNqR{zCn5-4Q8u9SKyE zmC)w7OzHJ``0xZO7cPOyaQ@#jBiN6wxy&aB^Q6?xC~z?CVD;GlDxc#W`BkSl4Udym zyyFBem^0n*&}FPFA}K|gu|4fJ=lqHqZ*p$+apzB}tvWAdv-xBfe9+TvxXn~(V+6{? zVF016=kOD;LA@K_eGx;+S~WEp8C8SKz?)gcwvv$D8s4hWLpZ)#MS`Owv*__PnvY?m zIhq&Gc!Tt>Uk_R~29Ysaya|Ekuk$V&<}{wpv{Y!Lo5*`b%(1SHAI2Anyw`Y0RZ(yJ zDc$(Hkg&mj%i_PA!f!M9iYigDO$orfm8wj|I2`np^*+xCR$vd=QraEMB&!N87E%G?7oieTMsF#m6Oo zbEf=FJFV@}lFs6_e5NQ(7a?&CSs78)A}%9>KoT6n8s8go?=uHTCaZoMPS)-lOz{N6 ztvO^ATu=NGvP+PNHdRSdjPHx9{xKN1ET)KxMrw))oyV-!X#Vw5{R3&Jj@?A?t+v$S@aBN`N9 zM~v-*Z%TTf4Hj=!FCw%|xR|K4BEE^=ng=!rehVI z;t1MCjyT|H8<(4f8ZXtj@VG2aaW!ur2XAZ=<=c_qEn?md2XEYU!ncotHx6gx?T~q6 zHG50P;KoZk;=7}YqbAKEBabR1hBvnsBdc*C$5r7ss>!~K_e4c#PL)^dMA569@RHVG zs=MpnJ!_u)gOCtnA*M61@?D5n_2*yAM6B!hAM6_IVNk2O4zrjp;hSe|$f-UjWtS8u z@c$Wqv99A+5>_H&fbKHSFYp}ixWY+%9RMth?2zdYcck?z)-Fwf2g~fGFst#SR9K)$XVeXObyIh~aNl)0@UQkc5h0+&?HWQI6rk#$`y?3K(|2=MvXNY{Cfex?YFj8U< z0(6%API2tO09T#O6iW7u`KXwB7rGhZeN#ueTwOw!(DFz_n}as!p?{4!GmAnf%GU;c=V1;W331q+ z=ukC{+CiVJ2_*|pCXPAES#p(FK}PxSmptbzov61H;*S~`b89XKm^cqi9;N|%;-AQf zs4c-+^MDQfHy((4>bO;fwaw7<*Jraj>|=K~E8|8vNwY;#1-Hya8WZhnG+!$8rNuYB7N@Y-H&X_C;<^&JPTCyf*y5Y=EXlhQ>K1Y^#7FbU z9^FcALn_-gn3s`_GntK|(|g=NYWwa;>`&v2PMwD`EpKdN1!81JMPmiM<}}WFsW|L@ z&{*-2d#JJEkh{CFq9fiGjdyfbKaEvUQ7}Z!{P;H_GPhOv<*z&VMtqlp7h=9s>SWm! zA$K>9h7uadrDb2lJ>B1TI>1!TIU z0x|B(j=vK&LJFsZNfBqMh@4J=Sb9m}C*gn%=|8ud1Z7w8X!Mji-o}poPS$He-~Uw) z$J=aWG!CIWmyv3l@?6?zo5rP@rba4XNT!6j5EQ6wdcoOQ#^xA5WifSCx#os1iB=s9Jo5;(nihE&CyO8COCgn8aRG|8;Fr`5`Q4<`~T1&m>PVR;eEi0;i1Uz0IM>J z7k3%OX%}ldq)gdPgZ8s-G)mBjpbhq4ajR?zKDmiBbT1TLIZD(+GCr3I;wh4h&(;(E zcj;@4ESKwzz?ki$k+b&N#*njX`sG+Qa<)M7?W_Mn{nz>}f%V%h^*chBp{hPdRlPrW zxt%X08dula#V@jQ*1roxDz@ob={kL%xrI|_s+1-R@0auA66Dhd1O&6Ak)|2p$S^X) z#J#$O#2gLSs6D4?`C}p~RX!A|`Vsx+`F6Ba^&LDxRzS{U09E}b6o@Tb?(3nJILlf8 z$ThDy@xO!{PtilmN7;J*27=a0#JphN0NEXC`Djq%H;%-yuZQS$+&$eHRR0od^94(# zmqF%*0Z72y;Kpxs#Qmt4yWQR6e~bKK#69FBv=mC~X&xrd`KHrYUV-Yxa_CeWV-=K3 z7=Q7#>btw$bZOo3%%F7j=Vlybv@bPuvOTnU>*}Hf)vJ$w+F$p67kQ)2zvmr;3TUb^ z@GKXhyEW|alR~FsW$4w0jp)@f+KO~=2A|hr^7N9X zdv^(@5*Rt5rgN4l6T+ow{kO(DR#$Hje5v3~&_EXRF~ZJ4k1o92fDhurSy=M6v0wy7 z8WUY$;#k47+d^TQNlejsPxf{4Ftb30fsNem?K=pr-o$#4OBC8Bs_h=)XhEF;+|Cw| zx>n8q9_+Y=-N>OV#=tsiFGV4~A+mi($@1-0W%w-u;CIDlkl9X6KzytgUOU2 z!o?fBuM(Q_9+nf#n5XVzyGB^y%J|1;IEh8(VMf)hbst{{gH_daA8TUSNvv06`#9f8 zJZ>JY<{$tb>OQ`}eAOMh-uzs5JrWuP2@|l`h(eXTIREqRKKDJhoi>!u%x@&bh@|8L z_ux(Mf?!53>?xeb7PnEg&-=Ga2k9^7>#D@22F>XO1WUHgKh14*H<1M5NovI|r>koUnsiQtw{@rN_S1MsS2|ch?Z2|U8X~5$IJVyyuwgoh}lx*>r zijglasml_3`tM|6Nq(#INVVOyURpAzWkXcaPzFD5=(&WwWYt+Wy@DfDoFVo3HScDhK;160 zGN+Owx618&XY=a%>j8Q~T zSN{#*+*a+GRGBKhal_-mHopynS#tt_JuAO8TV+o~NZ7N>Cha!I=f6y!zG3WG2cup_9Sb{H8|Z`qj*h&eo>^^024^%iKTZqposZ(f17W{1dJT9JY0K-q))?56Eb;Cna>-1vJDa#8m*!}2kLRZzcTNR`LH z?^TlY$Z@nk3?8X2t@DVliHtMRM7zmG=E_;BWtrZ6YYsC{vu$q}bvlqRFWR_Nh-0ph z(i%y$1t+g*2qK480hE!v+}{HVVZCFJdFdN$gOjmW`K1lC1cc!NxaX zgKwHxCIi?gJiBFAwn_qMAsl&2JW+L@OEHoITp^4Q)2JG5u}?_DPL|%UI!u0F1~3OA zx#5a-_e7UJDRy0do3C2qV-9Y_FcI4oQi_w1rS8eLtVwUSo%&NzWSe=D2B9el7CvDz z|B<9P%6ojJkxn2%>dCxQx0-s=u*FhXDp~rxkK}x1!VI6zq8jFCe_$?&!@}s;HJtAk zwaS)D`Uu6|8WDAJEctf|xdSh$V641di)m0fv^@22_DsLDTrp%i>^42-rT|EgZ zWBnHiN7QkXkJRc3L8aBFQLFCy)W|+ft%f^GMrlMq!=%|ncLX+L1jTppZ)dT-t7}{B z$}E&v<8vMBp-JGxcgQi7@5M*SmkK!yXnMZ4E|IW%sPc3x#^XdNRS_vwE|e;hZMrHC z3pB{6a@8=4eU9vD7j~E$K!2nned~|^l;ka&&>9NQZLjN;uj0xyIQ6&l38BP{`%+~E z)hMf4Vm+BXerzr@#7te|}xpiRz^-ZeGzNK_MJo-Q5kF5e7DAkj&e*u!Q zAFs~*C{gl}4)DCpk9ox5@c+_8JwtVpFR}FK(LT1bA3ZhxN@cp>mTqp+g>*D+PYLOs zfU511`?f^>^!QvVC!(3)fZ5~T+=r-xC-=KK$<#!@zi(PwY7%@Ff9K=@_K zpPr;IfJOm)835#S)uXcZ3{vXeEtOUz@@DF1g*h_Jn>Wn+W@*ySj(THGtT+LLl$;8EGKss@1h%T_K$0{*Q+IS*8`FjU16?-T6nklxlM%+Q9E_=ix-2Cf{_J^%{N`KA!g|KX^oT z#RFbqrDidHFPKM`~Q5tereW=oU?fi8X-)s8$g&jFg!`nPM4_D0y4D8_}DW`-jGBi4C0Nu8INa-4JnC<(P-4yDC=? z0o;`_clj{A=l0@hVYel1>ceK{XcNWm6uYS|I-mW}-$+s4ikF5B>LZ{c()9`O0*nMqwu zpb|t=Qe|G{6JG?*xwy@XtNOOLdndT&NiBjeS^yLCOrnQm`hu@TQq5Y=Y4^FQMx#y(!ED?}^%qwF@GJt#RP#0;B?vXv;_*81lg6L|}Hqui_w(rPkIACwPb6Bm(ZM#;Jb zYwdkgr6%w=kLSt3bLBO>UxfIT&U2-nTXy9z0Gb!t>)zLJSj?_nF;xogtX(o$zb!jY z;EvkOEjx2Uo4E&fMS})SG6<|ws$NVHsx;pzjyT^+Y|@Owwn*{T9M(dpaFO_uxQK`J z3x251E?|;-=hUAhzj37*{dzKRvK2B=?(WdW_|6`g8yh>&@L)E~qAiuKr(q-`@Okd4sGcae8<$tkIu&wReJ1MbVUnygWLVPmfJB-#5yCgtuC@6;>k3vaK*Tk8BFDKZbik zBxqbERW>5fG_oFUR0kgdEf@xLE@W~5F@d!7@gi_E!}=C}$=F~g@}>z}%gUhp!%^n8lU$6%43dMT zDYjd(*Am$yf&LGuNaA&z4PB6Oofg}f#(*i?T)(N&Y6Ue!V^|UUq>bS;>Wku-#-Qh8 zH-_U=jbU48le?s6WAINzk=ce(Uk z)%34am-kuv&be+b_Ul0+)R?8t<3c{3YARfZ79Jync6R|0sl)ERf(3`&>kbo*npgb~#L-2W zOvM+r%;aMT+OU+R5x>tcnyn0%m`6efmD(}g^l9^)eFDT`HI7)`<1Si{>IsuS2z&$4CP-q1dRIaq-j4m{D9l_q+% z-f3C^P39uAS)YaI>o-+TEIGoWIh%T3vL>5Un$K*}DuPydUhOs?hqwm0%%+QHgkKw~ z`izh+=|Tz%solHJ#+CMM+ZQHh1%SA>$w@e3zPrF`)2DIs+hW>_QR)RPH29XJwfCdbuT+zir;*h9lTcRXBXPM}V3n5xMIr4J$Af zq{M?h)YwCd(>V-qtFLAl!e=dpI~uFcr864fR(;;$>R?xkYeZ%%+M94#N*8K(FFNc_ zI1Jmik!gAMgR~WY0e{T+wnvSBh{~iwd1*C{z{lXg2Lf+*l6Og$RO2aukLQAsCTZ}| zN@3$!-2xv{vTwmZcC-F>3mdIA-Mi7pHY4yQOEE(jfgT|*J6Uw?y$p_$8a&$dS|;ul zv=50V8)fPtls8D|yBS7_8Fl)HvMxf|W?9kN#VTmwW=b4RQtSCL zMWTK5pI9X7Q!G*sk*E!>?{0+@NH)Th#7XGta{ng&aIJS;hrGb*jVOc(_xTEwCT|X@ ziBPT}EO<>jWpnDkh$Q#CXab<8(HwfH!V4;45b92EA62(>mwU1CBhuQ2QH6On^^+MR z-QV6_ZuK-WGvNj8ZVi@*?!>=NfrOyR)A1k?zS`otx2nT&>L&x@XH%#E4j2pI)c=AI zf!QpCNj6=5di>M2mNEZLYxy=a>}hhiZEN4n;bm!Lmr-7T?E9#Ho7zhb$7m8??Lz8N z{~1j}(~I3r;s^yt`Fk~qcWmk>YZ6-JY1>iIBqq@$Os{aU=@m8(ph?hAU2DknR*kD{ z>L(M)h%TfaA~|Z4cn72Bzo@WKcavD=zoRzNPg^)0wedFqkf}R0v`K#@pVAb=S-J|1 z?OQqWy6dLRNqz?|jB@mF87AA*Pv$b5)P-au(XY#}sM|VG6+4hcrgm<&slBS=w4=KW zw|60lfxcSl*MK-iEBy>0{!A)0Q_=;h1anTXZRlwYSf%j40+#!p9TG%YhaC91CIl6j zhIzHPi&Zl6RpIJSduv{!GD43Vmy_wHD({w&PVz@As3A>Gc`(xTwe&INN!u0q3J^52 zHZ+m95I86C1=VUTGC~XrHJ}_J{bIsG9LG_mp2n$v zR;|NhnVYGWJx?g&)p7nB6AGZ~b?U##niK!~03;_z>B8=YcY33mlHV97s(!JCQdz*% zyK!8^L)YEUBU1A`3O{GaG3p+|@N= z(?TUPVzU>t7`s15bcaEg<0}pnZ7S+y08*L7PVCKW$nJT+S^V8{))bYp)}?}|z*sK+ zsO63>90YAEVOcp{$uRa3FOehdEjFXT-_fw7O z*td8`i~C%teIc{ZiXMz`4YJd?N1`DH@hDJQ(|R!(C=+jT&iRvboum$mV`V5!uc$M$ z&HF6hIModb!>ekzXP9O6hfZ;tc8Lmewq)MS`pLmi9N|2-{hgM5`_C`qae|^E!`+{X zVRxJENNm$Kso?}}xFohxTPApOwrt;Z@D&zp^Sphp26@9nTMhn1h;WPAKFc)$B#xjP zP9`JW3t*J@VQy|C`)_!0iyJutb$m_;8EU!dSQ=27TrAdwJhhC6VcgHIr9i{;2zJsE zeD_dWJqkq}PS)NKK3X(eMX_!!naewXN|Og9-g>jpqbUz-in`#0}eHhS5RPNbtySCh&$I<4_xU8IM1J&g#SN;bE~^MYq*$tkR{BQw$S;*;3r zrxwEtMks<#n{_YGeMG1?Ud~6QqyQwKKk$Xk_%su#rPFkK0qy@la^*;1lkw5Qu)EIy zsTEazYxElgm$0DAcw_xQu&cv{M_NTKtMwwoNUMUUdW-2ND7#(S(>l&V=z?R7`&-8u z7^mrjGl0Ykev+QKvw%1z`OXjwzw`8a@C_JKkRb@bkUm%G{7%#Fp7AstQ`{H?`pV|yNJlHYre-1 z4Z7)HJM(V;IT?AY79ukm3>$e9l3o?ZRX^~Ox2lmBwm;2fH4=fI1k3L5F{=by$zIub zt)5oZ@Hh0b^MF<&&7$}-6mJf%QN@Lq&*d+xRYGl{_xL>1TQiRY(@DZK`BZqTDg|hi zfF9;O?<`Vh(=sdEv*hP_=dvP_2b1LeAi^?R(>VO{O_)m*1?K2Lw#!K2!Elgm)YO|I2*v(?#faCd79~!E_H9!Q-x=K zX1cdVyakbhTXi{PrMqSH64sW(c13&O>D9aiQgpjG*{i6Y+i&br(eSw}!tlcR`H50(NU+ zpBUaSMT4l6%#X<&({~jy|1BDv?4K7micAyqRvJatx$6(KdvT-4wJ0*f^JXWJD@DdO zc*~74d)*nyHOSRvr=gQhj~y{W8o zn*Je!%KE;kNO%+qD#_UWs$Gg!$)pWwVw1x1uHu@sDlf~V%(h%(vlBuwk`VLzGqU|+ zAK5CyaBwGWx+p(Gr)TJO)yk|4dcPxOs7{BR1Ig7tCqW{Jzv^ev?KbaR)KvD zF4av{v!N9fTP2;4LF?(hOIiu7*;;-)O{&9|naEy=`QR&|b)k)F-_#-XIMcf%l5Za? zT+bM;*!{+EQA5ms=+md9z@Px9s-Nw8#%>8Y_g<7qF#0=FI#CfRxFW_&rMui%trqXZ z0uG&8Zj4ss9$7p0;;0vLFOGQ=V+9jr;mSG2mX<>OlqaX{izUk&VqU0VV$6*jyOmu) zKV|Gz8FnkuKp#?&9cY3w`pSH-(txUKMetM|u*8ipZ`EBDar*Y^FAekBX=}oh^W-)d!r!MC6AV zL<;&MVhSUX(p{CiSH#@uvCx(R43oRuh!`nZs#GmOFY{SfX$G>CTl7})5cL!o}~`w|TVuFN2??5lm3tS`|(U|WXKIJF-F z{fS1cFHoE*NE?Gt?m13!bOzy{p3^sHeTarSyZQXyqRH&of@fDtR1)XJi!dv7E%W zaJ(5!YCXeB`5DdwxE%5>oCn_b*2w2zQ|Vk>i)7Uw2%Q=~TD!TYh1O%iXJ8s@xR&Nou>5yf1VXdq{B42iY@1K`_yACub^|g5F{l5Ay-N>!E7cW* zSE>&v@bp~Z=^2*Gw^`@dvQ`ns%`{-}S|O$c>|PoT8!R4N$1{%tUkq)w948C&#lH9iBma<8!(AgA3+PIj64zwot}(q+4qoK8gMV!4IQ8JV zERE!IxPN1t&Y>7Wm)ZMcMI`kVU%Vok@j2S{nftk78J}ZapRx9a6~maP;|OMkUM4p8 zX7<6?L(jGxIrU(x;bt@#M}oBnXL&Ud0Udn3`+JQTN&ztHs)=Smh^H=yDB{e35L;ak zF-8Q|;u#k z^CYDdz|9eFUNi$jQtE<;dh=pH%!|4E55CgU9%KW=euV@tf*WIEbUz*Oi8aQu5WVo0 zH=pSlz94%l`+}vZ^~_j?V~rp98^&cGy;_C0T$UvqpUYn^FbusP z`XI0mGg3}4)&~FjPRt7Dt_s+jq`zk9V_W?^-XS*2TOQGf#;yWlwhFU_%@J)B{T|pQjmB^>5$}E?tRwds&!nK)h4b& z(MvYo_G!%H%mO{Pa5;~6X)SzK5~f)}A$Tl9?aNsKtJm9xk^XZYm@uv6NS|_N3V#A1 zCee8+cN%j}A$Ov{0F_aoJAii@KN@Bdxe+=H;!LM$w-W4En^wuf6{SrhOM4Uu>*Vec z@&hk(FiY-Fpjo!9eOrg~z?M)8aczw{WKN$ATd5hohcM7($O|mP9yb(#c~i`gJoRC0 z#Jwm&CZdpxm=P31Qo9(&lwzjvZFzXABs*l(i+;JGf1|EWo5@u`=!^zskX z0E!BCdJApn9z?W+_Iuas&a!gF5WE{B`S!8gU1bIl#dZ)uBJI2ick1i>tpo+QN@e7( zGJ^;q$9{tm6pW2Wko%-a0l@~4U1RJ+8;D&@inzwqdu9+Z3%)8ekQk(aL^fg?XCyK% z>RuG}#>Hqo$;cBhoyB;kg{8kmTK0RrxeV(1sCPpww9dUg=ADCtGQV_n@fLz1Xiu0c z#oKIo*N0kma;pF~I9a(mRxmx5j9r+lYK(o7Na{uV%>B7U$QD+eukfdYxNWWt`NB`bbROOZNKGt&r#Z{oD!i5~|3gYh^DOgOe6 zu8Kz!)xTTcq@sY|@I)%u=mam@+U;P}9UQ2C*oJb=-|%2}u$%4KXR!EhoOF1WEt|H4 znmkf)A}Z<@&K7jJ3N0h`jD{)8P0<3=Gk*jrn4TU*(}13Ut4?aAT$dmA%;+|3hPCM~ zP5APdyA|%^a$Gq3kyr-Bw4>i?==0^#u=!*G!V{w||4|l!hZ*tmA7zOf4`yQ2jNvVS zO-TVPSJ2&yx7$KAZPif8drkEi`-!o%3r^*k`eBDCmjt>N-u$JOnyDqsZt@>9&`v%Y z+S38rHD~qC?ZGb|CAWI!#~5K)dB=XfFi0 z-LIip4@u@84egZx?ZOPS`-dNe$=3q3=QIrKk=ul$q3sCJzLSCW2FH;1E0VVYwD&c( z>XBQ`(a_ogw0H*EiAO_wH$eMr2HL%!I|`Hg1GHaj{MLiX@kc}ZP-s;5*D}!FKj|pB zwFkK!6q9k&a3ag%?KmE{3oQ}v*>FxuK5iNf9qeH+If+TlHDS`Qrac_{lkne+W6$7e zdIY=E8(?~ubI*8cdK4Rw0nz2(Ul#SI$FK_-5M3_*WeT><3<792UUpJ=VvZT4fhFhW zsO;rtknYVM7i07!G2O7|T|HdGm&@SZn-B|aWv)}ho8K5ud4l+BG2aQb$fr(qg5ilH z6m98Ev$xdpdIMxgZDa;Sz*gZv*^+Y|IQ)og)IiuO&d9X4v_@w@7`DO_IR{SCqCPVq z(khc{?cmBk^)1#t9HYbk(r2ZK|93k4H<(53+2Nl#f|UP1bojGJQji`Uex5qL|F3uW znono%hB|zD?%PxdZ%0~(|GEYqk9#AJ4?29o%P@8*y$56m*H5S>(;;Oi1buP_^kJoB zLeCNxXX{(sa1mI~+thtwJ$ul$b2`&B**4@vzE3z@U<_!1F;@k~JQNtc4^O}%MsS}7 zg{Q~19Ws${V`>egyKdVduJE!(&R~TNmi4uXg0yVw$lqwEIBh%f2KBN_gSyNTY(#o} zoS?RBjaI~)Am^*RH-y@UFcd+dsEDsF0Qw1;J~*>6n3H;&$(~(A@2|c3hm6n0 z3R@HG*RWD?8Dk(F2d|qnVzeWzyNC|YSZT507B*DHHQMr4n)r)}y?{3x*IpX~E9@+B zDgyJ(PXn1YlgvG&W}F2^IT*8@2ZFe-#wv<7pch_zKMdH2idN*9QCMZyC~Tz}h0)w9 zzsxu9g|tTh^Pq8pWW0P~m*|wvW(wpaA2O{u9bsS4_A?OVHap1^G7u*8g|L+zG#GH2 zzN^nYSo+Vv?aIhO9=4NwRG)hwd^nU83`_=s#tlv~Cj;SK)d;9XsR4_ zv5^e4&m0X+O0BZJWqSN{CRegTq+gMk5hl6an1NPyG_)N-Zi6z=UZ+d%H@CL}w4eV2 zKs~hN#-pLN1!yBP(43>8y&IrC_Lbhb-J=7s`qN1>!bBvOW}sbkG_((c++NF2_Qe%T0)!K+>LhXpv8>4 zrpSfah`Rw?bNFh4p%HINGy_VV;YLdhD4Kk~-VA+~vSig4L@R=*rkzE*+6*!`st@yq zki`}|VPqK@LJnJk38j&+8ooNWH;Cai1;ZrUlxXDjus%{q7Hr0nF= z?JoxN+wzb8CCxu_*&2M$4csFZEYI_=1u~9zlTFC>A+(?8ng~Y+u*m+-7Z}d2Y{c~I zT&qv10UEE!&QN))G>FCjnSm}%WBdB!V6!6lKK*=#<7!!q>NLf&c?-5t*rmxVer*(p zU9y}c_|6+7$^)=u=@T?H;@@U2LZ|3Gp0|($NUv6UEU7sp`EXEDigCeK*hgu#UF!^) zh(0pE%*vx=?(M?j;BpYFm^53$H)JrEA7x(4qWpPg{h{Txe$#?$XgW1T&nvL*Zr}Ei z7x}4Is3VT2dBcAhdg|a)rscj-HTdAGt|lAZkBk%Ec#8W})nNCjgRi!HbZV&0rhOx% zL{`2(MPlPOvhn(udOF`qp!z?(L6Duva(2y2&tktR&O!ydWhu!*u{YsEcfx)za)BE; z%Z;4mMuxbNF9JQc{#7S&n}cNFpSi8M9Gmqe-dMZKPL;VKuU@WivUqXT_aHa}sA(MV zse+STm6r|R>^LhbL+-f4?znaqcU^SYy{O%be9n!W=SI%(BB!{K5;wxhw%bK_Cb^KS zlQ15wE+%P^hb{kzbq@SL4Tc|tJSs%)cUVpMly)i`y!ty?Z;xfFtb1Ck+s!75Wq8ds zo>_6pms!To*4m1dl~C5&3fkAaWbq?*)v>Z__3!wz)N(EWsvEmZnG17y54~vDB2&k+ zC|xa;&w6FKJYnP9I}iATi{_v-I-=!)GI_%ewx{M1yB?D3|#B zY|yQ=Y!wE=+TZ8Ms#O){|B8(?e}~xr$b=j7?N}~uyF)nKMW?@}rc!HyKb8iy&`Z-R zS}TTVv|u$@B#a`=(m0MW9{zeT?H;TOHr9^yGyXd$2V;JBYk%<&MMC`d*?q+PALTT= z0j8wcV7nXOOF!V^`(}T-PicewqnSWQDgoMLr;Pj$xec&?dd~~A*`Lex0R7XuKb_v7 zqk=9<2fdputY*Db|D>->haYon_%Efyzr;z;$DsegwP~XG;j!V@rNc*$4gas{@V`o} z59`0Y-%W=<@7VC?q{DA#qv0{io1G3{d2IOSzn>F{^Fc}#wu z|6ZDWzIJT*yVBvG-EmC%H>AUVuM0ld?UiY|#{o|_SY^7w8{arOea@0r_c;U{dZS5c zCyx35jJwmn6?$zB7|Xk-8B!fDF^i=>r?k_LX(MJX>9KIXUH?xrsmv1JH~>qwi3$`% z>F87{paMjNF#TrG)c?`76=^qZG*dz&dgUsf2M?I%o&VBz$^G5odss3qeLc{kkewW}uMsMzTVv$ams^^Ie`n#xFc-zTeG22;%FK^e^P94XC`I&miN+h1{>4 zcYn8!@|x%-a{gPd=F`8N|0{!x|0f~$o9_)72$Z)ukaPKf^DW3A;};3JUqAWKchaoN z_vy!wYdps-SWZ9toB5`pBfV-6l z;*N*`2=W;rAPzS076k);|60}{_fsN>-Z?9+hgwgM7TD`PtaZ>oT?a<*{^=pQwtn&m zq&6BX0x7)tBcDAM@Cn_(k8L>?@SnfkMfoy-#ed(*5peR`ZuqC4836o(ZuqGKfuGV1 zzw>_vK>v%~@HY$u{=IK?mDk@q0QygM!~byo0N|Ut;WrKh{#)JfQwIWnRyX`p8wSA7 z$N$t--irqU|7`hoECi*EQY4g~(XZupU#2EhLX-SCfW902@~Zup5ug{SrIoGID( z&8_`55`dntK+^#V;#qyS4?zFbg1(KM`)Nb~{lEe(P-WQoSl{%5_I7~*H!c6vF8OxN z-zz@bhvP#wgKRe6w7d)e;l+P6!g!lZV157ycUy!-1I}T-MTiXyAys~ZWXk`DL}u*M zvA7Fxv%7K67w$vE-%ZGGfcWda+0}Ob>#4s3e^EF7$$t<2xNiJ)Eq_P;+1>c1e-Hk; zZ*-Oa3F+P^mEWRn{L;S%e_S`d`}gpl-HqST+|7U5z=5fie%jB58I(O0HhlJZ8pVLn zmZqc40?mwvx<-Ee=QlkaasRe~=67m3+9J@*_@Ya{nI!0|e1R{r^Xg1r`|ld@ zs>SqeVeS@ok8zTJ^J|RJ)2&B8`D35vfDK(c2J~JYsL?qaG)(sFfmx}*4jh`^rN_IU z9#BpJVoNvTJP^C=bxx5{2lziqL?8ijdR)PuLn%Lz{TkPu{qO!B`;py^KkVC{s2l&JzXyL@H~vrmuJ+%Je{fAV|J)QpV>XePe)KbFAM2)NwvQ+? zy6GC;PY)bOU?CI&zr6?!Y&>v4hGc>;Q}*W_+SS19kCTq3<~UIM^U~C`{600{{C=5^ z_8+efJij^Vhy@@HtbAvuqdoDbf#-MN%Cz!b2I9c-TbqvdFhj3_%5!l#;slM^22|~r zr=z{XfNY@oos^C^SHr#m<@d%FX<|9V0BxZ8{jYSyAA>ls{C=2@HvALh_w{td`xxmB zEWgf*wDMg5+Ca;nSLNC1tS!@6DDbZaRB>NP$NoIn=|-s^vqrbO z@A9;6_sa~B1}cw-LF}?e&Vbv`ZRu#g`s2X!n~;uJ1meJI!AVDZ>Xm`#_tKQK@=XPC zVEO$r9c>pK{6OV7Cmpd`{?CA_{p@tK!Jx6GWS%|oivXGlolRT3-_6Z~T(s?qm4vg* zGLx>r+O!Q_U%#raKkNDuxiVP>Y7hxKsprRWokYq)U0>VpJuAz9kzPVUId_}8J-#RE zEz?>S8@)5Jxw;gs%|M&zoz~B2`Hz8&?~Afnflyyh;Q#Cfp3zNGvASegOM8msP2Erd zInnA3b%oemAvPrhR+b~J8FtML3|nc{x2L4_WzjSXau{wJMkU1Lw7Pb&ib%OPuhtBQF7ISA84?f<;#|M{>_dj10)$TQ26~Z6kH7OVfq09ABqvV{}l= zw2_eEcLqQDou^+`sOZ})d2gW&U}=-S)AT+|dr*}M?__7Qj+JMtmR{QU;f+;qrh=_B#=x(o*xYN_dT;ZMt} zEuhRL>~wLO#%dukCCumEpD^p+E5;n`?7Yos_&w<=+P(a`>mOwSFxUD*dveX?yY9*ts88<<*E8qrUdl~o zdT_Qln^52~oliSy`|P~3mc0jQFl8p4Mlim<>B^SqNu}uwa#ze_8o@kt|;m>JM=nd+WNXoc+$Z?HkRkzXh6;5 zO?z&RZ^&ucy`S<-_}H@-%yn=uue-*uT|C6?&}p^0*yGvlZwv9p?eBS>ITrXiXCg-@ z%bz#E+joBIgL*bdRecLt&vsYTn>`cFA3SaT`R!qyZWMB{lDVvW2?SIMbB&584dl(Hv87ZBJrSq zoJfEu7wnb3B&VNRz)G%`L&vcIlnKNM>sVh{t1n7Mm(aJ`1!vO|YSCG5P@rrAs6IKr z{jsR%wMU(a>q70wmvff)43%a_9#eDRxMKF5O(XfG0(6!$ywSO5V1pW&mH&Rrn_&u9 zQP*LWE+6&O*{P@T>pu4w^_!KvD9YvIp@Z@ET75r>aa|-r2HyU%cZ~ zTWP_XSf}Apa->x@>XMpxJC%Kp?8v2DkJQN;W2fOtWLw`{eL}ECLF&zVR<`}wI}Ej8 zH#aY7*X*|4dMcMC*(>U>=PQ6^1)htYo^3zeK}ydLllj0A+RwYCc_7}&cdka-a5r5} z*Ga!3Q?iZQm&u!2%z08>2~Ecs3*>*FIev!AvmNAkHy{Y3?XJ`RC{JKk zeW%lS7P@NN4{L2_glLsB23O71SMDU4hIN_7VZxks^D0$GstzL4NjuZRE7jEmWuq0L zv=u5Ml}zozP;><1GxFpml0(+E+o~=zVwvaf(;8k@b|)u~q+X`{nm2RCFnQL*+e7a7 znWr=#+!}ArcE``+IFSR+ie}gDh)(3SL9Xi#vbR*M;GVM9r_PkhT>_VB9jA#mNE1tp z^vz*5$@`2vU~Uxns*J+mccgx4>cgn&J9*?&o|5<-5wX9+^$SQ0kc3Uj4L;?VPuw}k z=ZMSQ&eMkfkpsh>#u`2Z;Hcw6VDTme=~9;DzJLR9Zf`+6terI^p_mF3x<>A|+?3Tql5wKey~Is7%s zUW|%Tz_f~bW}KmE*2P04DI$+sb?USiRwb=U*+zq2UHWD8O5SDR{YK;In%sTmv0ClSnN-#wx1v>Z>oz<@E0h#q!z)`A5$h9ACRYxfc6k>(-^u{4 zbXTlWOA1_!Ds}sVtqU-hXAF4({z!?=#c8?M9czzZ-Q0OcO*G(0PVOldaA zAg^mV6i%|g#tN-$_nWKFE8z+MN!y=#%XLvi{s(w0 zO+Qj$4I75L58zD7)UuoI_2h$pbf4?$V%-iPCT-uH%>9|O_IPLQmD!<}O5SrO{tf5D z`X}zqXaa1MJtmcCEvwJcum7eLhtOb3ITmJE!Ux7uFD!5NivM7$nyN8sK!)@Dp&x1d zmtH!K^iuJbHbR&(G%n<~tC+eMC$pH#De(WXV$P#fs8LyKWRVJJN*kz?<|IrDm?k4# zW#XY}tzg526coE>OV@46{ZZIxNX!isL*4pfl7eb>mL8&rAkGD*Y|jwl-ITYaox9wH zccKx<;stvUl61N!6P3N0xCkcvB=+)2S^h`$hqgM2AFhU2t5>dzc;5deOOuP9H~mFX zGXP@+;GaeNb2soB9iGv~+b)3c85rzfXd|f3w6TbbZFw3PbGx8_JxhVr7zLGXFC;;0 z+hmcGP+ISL^roVCEs8Dp+83%RdLM%zN=_VOH(T(AG3yp0iPu{8DbKBS_kSs z)^0nO3)4_7^cR%%H7aXRpBpnk4vhh10wBu#pvo^Ji za_0|s9(hoS^vk@B1mrH>oJZWdl{kL{pKZcIlQ22YTq@$uFLcL`N-@0Exwxh1Kxiwy z-!dyc$)do%nL%K=3b7*f)c~EryTIbjk^FTfFFFl}awssH&fex1ZiC zW|aHZ5PKv%HAm9>{=c1-b$)GLF>-@~`vHwYr0^k|^WUpKuz+i~FXP(Dkh?Ly5OKy(7Evyzc2Pj<^d$(o<=ir48B$HaV7Dei&RdP+eJkXNXc&@}!if`C(t% zPlB2Xszhp)uZ=SHHf^qOJ+O|!{Z~km*6t3at_!s#3JOMdP=A_&E8}Sj3yM`D=Yjp< z`8nW&W3CL(fke^sdq|3%#PD}v2iJ%nHqnhx$+~JksPY1<3GgRLbvyaZytV8Mb46!j zE=YBU>|ksr&+bbtABU4aiiVz*@)x^P$GW$ax${T2jxPl%i)Lb-RE0H+xrGk&6MS>o zhlND2Ws|~_;Vim?Cda(Sx~R8pe@iSzHrs6{6bmw$4qQg)+{jV&=2VNv_F)N(=ATYDN@my7dbJSvP@rgN*Dv!UH&5x|o zT-13q*W%RXjb@x}<0mt{`DG-R7Hulo&)q&DZ4WL5zL@{ZxHf2fsqN=CNmJ(J8pWkWvMN|v< z;kAq(IdWwuaFCu;|CUA*G7bCP_qo=`up0Hsj?3EKW+DJO{&apRo8&YC8HGYAr_;^G zRE!XW^<{jiyACnz7P>cWXx8@Kbvt#BD&r|mk8#$XVLYC#44Egi#*cKWoc69pdqBfu zs^VZPC^c69CBiHR&803*{h2(w+lrc7{Okkkvj4iWDmtf?fl|CRn}$#o-Z0n%W`3el zFlxdisOFGzWnO8#`7^p)xhx!`?uyr{`BDB+`i1M!d(Ly$#dkVX=&1N1$630Pbm!q8 zzlT|DX^&_-XKToLvKcc}N=G)zO$0ZfpRT;7mLiT~cdNV23QZCtW%Ty8(^c?fc|F%@ zg`BmQaQCaz=s`NPx#R<9;!E-NPIqc))kR~nuqaM_;Ps_Zim!`V@t@vF>o+(c^kB8= zDmhU!&u%Lhy#lr=owauK;4T(##n*Mil}tjs7-}UE2aMhv7~0w)f!NLDZjbeYI~>RS-QQv zc)@WvA?}96CZh$dWM$FZ4RB!teWT;eQT*;=uNXTI8D}Cd+uw8F7s|se*EEOt=Vo)J zhRY$N<6@lE|9|TR+g_oectzN$e_h`3)aaaLBu)wu)STob+vJUG^>5Lq$z$_d2&k|l z!)f{!)=GUGWs`$7Dyni;=8fGG``_%neSFl_nfISb1{iSk8#Q9A*_-sl^*!Zch~(bTWMhn1u9w@p4Ezk zR0OH`P#-cxo}>zaLhkqHobOB~A++vme}DY$Uz^t}^F7b!I@h_*b*^)r>zsr9>D^uJ zeY@7Xy<%X{smr5VL;j#+#Km(>s_Y~|xCkk{&(v1!a3&sAqU!_iE7kieEAM@k6?|W* zM!c_7Bi~o5QSU2N=zXOc{k~F-d0(l{dta%-?<>{$?<>^>?<`YD){9RY9&fo-_&Zt5YBKySQBYoW(wX>zcNNLM*DUren|J)=}QZo5j81eNo^MTwTn7kNDD)EFsqR=mSoSPH3^$1B9iiC$;L z^U*^c$ups7sw3GKiuQCw4|F6?h7#3d1J5N-@O?5-J&_6TK?an2ymWWzb6j-Y5-D*{ z2ey@NIlc$BSdwV@aZaLzD}I;TtCOEk6u4AVa{Q%4@OnYztXL(9ifW6f7OD0TN~37+ zbD>1p9oYZ?YJ`a;;;dMrTMwKS(K6*&9(kA?7BpZS0-a`z2No;s7VxK8&ph}Y1dTfe3QanU; zjIe1KI?LiGW)&jubjO`YE=9)P9ZeY*5yppWq5FDDv@!A!k{WB>{k4m#6?4=PbO z(Kw=F2@re?#jqm?jAnopd=E$zm}tB{1BUh20s2`$GK1Y$tO^S6#RvUD^ld8-0J z8+l8Tzjoko=rM?DubxLL`5K9*8}U_+3brb%d6NLl+ zSwNu?^Vjos5$RnN-5T`Qja>(5?FJ=Ik{J0WREYSQx{s4d<^8F{+>*dTLGiwT3Ies} z3jKvt4hW~XGt2VB`0s06&Rg@ZnyDn zD)O!?l)_dw=y2IZS7|cZmj`{;gIrzBQ3?5~c@qTp+z%vX1+jvG_Pw0aqa>RU?a@9+ zrF$gWSNDrL(l|FB<(-0^MjJ)GYLoBc1dki&QK4GzFS)=|{BwsyNS90h%(unwcp4!8OzGwVPF(LV+hkEHu z$eUKY?NiffxeA^@rpng8jh@MOVwVvnkYdYmFe%Qa>~?<}?E0eU<|dEn zeWqLU=+h?cCQwq0zqJI{JxTPX;ytaT#c< zm3ri_h)ifA-a~B@$`4Zb1g6M}-aPM{!P0G2$DN61q-g_jdI6S^+q0n4j)%M^SXUr$ z;+htUqwm_DO&yVz21Sh7l4tIzHAQbP?O~gqjeA~$uCATlSe|Gcp5b6pf6ihuhCaeQpZ_pJQqMxC zu2L>GZv>6A0>n{4t$QjF?#w_^+FiBRxo@N`zD!6>S&6%%e4lAQ=ydlBz1&jN8(b{J zzEH)>!>9EkIHc$!x994ZL2QLV?1h1oyu4i|G=bRft3>7@0X%C6z^K`KmR*qsc&<`5 z8PowScmsRRiaiEr$=?KpwlCVk{vg_xTngI$jKqfM=d%e0b(q2S;9wAXN;B2>lPW{w zCs;S&$*|lUn=O2U{f2JxixDc*EO-BhV7Zq?ugu9jvTgYxPxKTgzQx1Skz$%x#Envc z-FXvWiJv~nvrnB*C2q=d>Ynx*N|JrK$$(ZO}zC;CqES>yzj#`l}EdMAFipvyjjKR z0OcH!_L!U_Gd|@UmGLQOXh_b{nOM~cL|Jv7m+|G9TsMTBH5~?8YPjM2wC6^0-f%(2 zN1Zp&M4Rx&yy)hT)qAhLLMZp`^P+E;ak*HfZ0SneXBo*T02w?WneHxT*hidB$-~Z? zN@q&RxqyF%|BLv)*gYC&L!STh`OoM7!gy1pfd5N~9n1fv zxC{Be4EG24zg&ZhH@#sl339qYt+_%yL5(P&fE^Vx1S51`Npy3W*jHtLq_g;6TJJRW z1kRe-U~>X+1){eCliSCuEl1;Z1lHxor{~7&0;wsmIrm65T)^D~+)cpU1cW~9xCbDu z1yY_>=l?Qtet`eWQ#TD)P%VvC;RSx7LPomKbhA~Mnw?!(kixLfJt4SE0giF!8~4S= zU4XkDOx7D1FCpcngi{DDwD4cVcP!z;sKI9H#~{uWaRI@@7nv?5OeR}+lj*!mGKJOp z-P1&)n+6p~p@I!2>u1jAt3JMnm;%CWKR3}}L6u$5#T2yIfF{~7;PF*y%;Mzy!zHO7 zpqSKCu%)zpx-c|QFZ2Zk3{ar0r75fIrpU$QuwCI(VCtKL${U%xN7bk#FvWiH2PF0b5Xw1V7EhCPDc=caM9LWng{I z$nKNT*VxHPk`HcOgDSoA3JUZA`-uQ6-J*#;FZ@ysj2l*8hPMK5E#Bx!mUX+pT=XQR ze3aDXyE+e2QKcZ6TbO7Fq+!U%-tV<*lcz`02bHv=GLAsU{~Ry);~5mCN&OlWW5`(@ zCu@k9+csuvZDj7Xk6lYq_~+3EZgxOoM}!drLkfdWnLh3LN0w{RO@ZjCpwsz381gJZ zCxpQD1RS-2YrY(G63f)VUk|G*0MK-iv*2rt7U_%qcikY7jH%TlR4aO+s-C7FrcJG; z&)+OEv(o3i!jETqiy}>rxLZn}#fXUt-0jZ7jTDbEUft%JzIN7(F5LnWt5g3@6isMg zdX3#G44yvEx%X!vAkmPQ##u@74UsK#0*Yxyew!03(c&Sa06XmEh2*98l+18-ad3f609)9O2s1nEAb@@N2r3_yts3 z5rSBuD#K~g1e;ogxCgx^zOq=Pey86966h0r@uIj!Zzv2F%I?1Z}{bnSfjy0Im6D1Z=?F>43Tp z8_=2wsIdWUnE)RS=*gB*=fiPNCcuYdb|%1w^}~|Lo0Lmsmn>V3&>WU z*-f>uc_5milAP36@My{)z)V=q!p{;i(1b-^tzC!A1S%X6u{bxcS^2-Hqoim7*ZP?rdPqwEg z$~?;=<^f@)_NZSOmFlD&w6lp}g9Vx~HmhT#XuhvB_`5-z+zvwF<99wjG@vyAXJO=O zCyjwU;__Xo^O>bco>{on*lgjb{f7SDFNRVw3%3tZRL_hymaq(P`ak5XK}@))bmykt z^D}EXIV2A?tecH>Q_pq(^U9pk%}j9eB{0$hgVTSmjS%{AF<~%{22r9ntJ>XEzTw!T z-n}8FA-6SBBjr;}R@27ZBY&hZ_vn>h!MS+)MoR zM?qe^V5E%ewzs_#*n!526cts6+g^k|YP?mZ?uSg>0dyv&UeqsKYRg6zwRiTha~Kw({=st)q`Qv7dl3)Dts7M=-HEG82+Ohte~- zzW`GxG^!7grS~eyAD{5P5G*~_xo>V+oW*2#WHdJrU$FVB$f5Dr=9zqe#vZ4t@xH~n zG(3{WoS)jp&OGGN`zywe8H<;_F-XzU^V>_%S%g-ucy#{ecIvV#)5jw!5ZVjRDxIpi zB7|4|pjzf)+i9>i5gSN*~dYfurE&Q61zMiiz{9z&+uS+Ud-Kr|mJ zCt0-=97m8__wl-DtL*=Ot46G_WLy3oTSwE^6%$02MyzE3Rro|ruBYaGy!UT0!Ppq+ ze$(Asnxu#l_Y6mg*bW`N!yu$|ud^et-EG63F6f@Ym|djOdL^rk3VQO=#DZU{L!33A z51_ZI+BD}sDQ8djn-n=Zof@U%Lna#os4_s#YRJ3-qi^QzSz0e27|(Q&D0*Iix-XXU zvQqS|aadHSN0XFwV%)s3?1pRzB~yj*&tjJqLgh&4+ye&L78#gVx!uWAdG3qJ1G$0y z8pRsua0jE7bUEPnK)oI1B3;A^SsPAL9mjbV*Bj-&%W45Tau8h)x(svh7O5lM=f8lcv6CESs`d;<2h@trvhSrQ3Fc86UL6=%azZ=VP-VFB|I~$;g=P3r8uykAL(_Dp5E3`F-!JL7+>g3!}eg)*NDBV=`B5=Oob~}?_4(v(S zk%vQ+OLx_A+kAtQn6I|U0FKUsNE(5z);$Int~X``?h!D_w3j1XN?=>~sOFb?7;1>y z=kE$)?FpggmTpN&H){#3uPWJog_{hV;3V4)pU@7Jzc+*?Qtu!DbiY};z4s^`RGDtw z)~elpljdX^1c{d>tGecms@ly1kCS)6H4WmoyCW?tDc@k1KtsnRyv|lXW;GS}^dngE$ zyvQuztSJhJIiF~I+dUOHV>UBd?_q z0MmfX3P4CrVu8s=SA<~GfDm?11P+(>FyQm?1^d5OO=Ezz;u_|dw#U@%{)89MM27`e zY7`LLsgRTNb~1#ZYXz28a&&gJCPtrsSj0@1P&E`W!p9!=cYt*6H239S2o=tXK30{? zk(KVzJaiT12Q^Q+TNj)83(aUjUdhw(0#u;kJUe~89XL*sO2#@{2o-HF7&<>XbiS-6 zxIT3UH4IEkmwO-6oOFyi>GG{3`>wFEtCe%M@QdoA!!E{!bQyIi`Cw|*^ow! zAFhnv7xkz`C9SA*R=jMO%zXkZ5sPYebXMGV0v{#BC`dz*Q_y~SbXCY@_Ppa-t5Mo& zt5QPV5A`OR&BZ0;CSgN#lSpbhoJ{7OXlAH21f?{QI%h;g0+?hxB1VYExv;MP^*=bI zEoj#(L?-WlCQ$q~nH?_n{+w7Ia7IrQIWZl}Fd?}}dvmYX22t#5I8EdsQl;DNOAi;l zK3IBKbH2Z88r|GtMmq->e`z3~C?LQF`f7?xAV5-5oZ8CYb59Fry=-L%qML$MYn9M{ z&jgmk$&ve$-hBmXQA;G;t>dI2hF%3Oy%FC*83YBrsl{$V#JjlXYEBsN3iW@cQ7pSl zOm#q1=vibP(2djVboYdS7JQ+>exO*IC0)ylDgz{|CIUhK7x}E6@9C7+aGv_n1<0=fZ|S z=_%d?nK18P4I8Dd$~;&F+@OwN>@e=uknjooKB=li0i9x4LSj&hR%cDA}u)DcoH5#Z6m70x#8riA*MTxlMTT% zh1)SVo>Aj1iD;wx`bNsA;B1 zjDhq3a9L{x#|#+*mJl>tmSryu;8J@>Gq}wep#Nd_6AS)c$YeXI(xwc5+kQi?pOfg! zO7tJe-Ltzny@hD^4_Ol-%G5@*OB`m>EbQEOTpEjo+e8OUaL4yjevv7M^QHPaD>jlr zJzYfRI_RPXgP|hipO#3SR*49W5PEUogW8iK+zq_P&K+>M)0UN zV6ZuQpG7A|{@Oj@ZU>5>8;Als0oVCb&lIS7;_};K#MPoS$2#O@$UM5a#I7P&U!ndRG{05?{&Xpd zDkz~5Och`DRP@!{Xex*tqcsG&8)xBv&?4GeOn(>4fIF8h9D01p1&XXhD1j8fgUXvcLz`+r(KKY5d@JFB~a7;;dkElgDM) zC<`2S)-aws5X3|AOQC}~x@IHf?x2mKzzIVh^yMx$S=v{%W8Psf4Ax7CEf#b0Dk1?* zZy`5}l9Hto(Z?1bl zNu4!4B|8%Z6Wm^);P~p4{mztkt9Co}??6UV_Pcv>N5z#}dEFD^nfj`Nk$IayWf-Ml zS)}ve+?yyfh!9=O;aK($t^EsSkIR$|t(dZRWXeA3OxXcp9T-}A*p#kjL6pCtFGMF$ zhTcUmgeh9YUwr%}Tw$*|f>g5bAC*w(vW+Y1&0GB6YaL~|J+!fiW*7I4VE*7}*qSgc z>MBWMocuhG_JO1+;OiX>_v?>Vy^DuVvdE%~!$Mf#gqpJ%unN*-UI;M-OF@%J-RZnW z44Newy;SCO-p8C7-CSwN{cQc3yMq&ty3Pm6o}Orm%qZWrEkJ&wzX!VfctLl(zB@2r zH*^534X<*6bN|cVTnVFTjQn+s{h%pOP{+yQbt=xe?=SH=YaWk$9wmW$qPpMdyq%E8 zq@U>>WBa#rS8JF9Way;31J(VlM=<%?=ERFg26PSX?nL9UfO{mdIx>T$D?DO(WCn$; zCtj+$Iz{M&n083f569~xUvbua!hOl*7L=oQg?Y65AegCl%jQD^b>_4+=_I^N>VJY_ zFqjU-!=n2wBx6&e zt~OXF5U5$msHXXr_%KS&D@KS=T#>#EDe=bw#q-TK>HOK$MOuDp-=6;Yo7F+41EsE? zp~b60e4)U{M)Rq)<77iaiRQSaLiS8|8Z({wWg9l^>Cvi$M3*D#HaO)T#uJ^w4JJO19z5i5s zrCWKH9nq1Hl0@*qJl0#@-<$Q7R76mri#@CJWmH6sApS_+cNC`+RQ%R}Z+#dz`h@i{ z5G+=r#EtCZ*vqiMO7hJ-P^r@T7aN5cVe`-EEGDff_Bu?J^pta-CJSwS|CF!$4jQ_R zQdJdEa06Y5Er6NLP61E4D{GvDHkrVax|5bvgB@7}RCeHZR&1kH6O6vIf@L_GEXlp? z%0cgxZj|p<`Orl4Hu&;Bf${fLnzbJ9e5y4>UsjSsDyoXWo@*c>XCgls%+!$M;c!^IZ2^0TKwQ=!WUG!9qj;Xlwe=7?|lu%}rzKD&^eXfb+v_buGc7v)? zZQJREia?;7f-4atDq25;3!CX!jjAfu(5ZH!Qm%oxP|;i9`LimNNE$0+*GeFn|8|gC zo0f7>%XeWXo;1>BZuGZ=4y^eMReYNgC@H9!(nWH}{~a_zV$UQ__JpFZ!v2;P$D3;2+RpLv!-QzMc0YZnU-Dr^ZgD+>%R^gFp>RP_4 z5}g~p8eOlN^mJ(l$(^MeVPHm|$~WJe+Ri8JO`Xjr#6Z8TSuH4k*Vwf;r(2dX?9R$b?2(A%3EZD9yWYO0*J_r5B0I!pTras+y1W@|Srxdv&CP0?YUHUg#OkC+hO5JLi>QWyQ|8G%tx6xlZou3hx&n7mV<2xs@4W(>o?hn)T zOuwpE=-xq9eM?mIe(8EhRl`&DY4k?wskR|ibxP~*txES;=X+jViB}`Fw!yyB`8c#> zcLvf-O-#YC2z0))xel+u4%(g{9i%s2U~)n)tf69=3;Y8Gy;ljvlrRfa(5wnSs&kij zJ1=K1BMT1}yE~{fLT$_f?uoho)4}RQw#sgIZegNvOh>#SH@c}KUKlvyZY(`n_58g3 zaPde0daYooSi;mCY1@*z#h)A-#k3#9V+M)Y+4w{7AK=VX>QZG{pFu~zR~PYWf@yTL z&U=5T_$M8|f_73L7ZE+0DefR6Ayd|Ezo#sa>g5<-*fTXfR0flm zXe)9Mof=Gv#X2$FCGmUElGVNu>GI4Do*3vbv_TtQ`aM_!%V)v)V;&7OaDGiYgXbvM z&z1$wH`3XjVv2(@GPXs_tsogbY`>w?zFK% z`7Pq2Ija*DKz1yWAhgbxMbeW_j6$qZ`3oc*FiD!W?$ICp=p(m0ar3lk)6ysJW_h2U ztr;Vlyy|!=**A_G>DXoue=f<1&F#kz65>8zsu^T9%Ad=yjPUN1zKo~DuWRSq3a64r zQEH}HF7o*aUX_C>#eZejcdg!aMc$_iksqaXjQ_pnTv9SoOz>`MCv&}4LQ9mG#TkvM zHP~Q}MBhYsi%yFfu#cyh2g#Z|F|O-m>COZ<$C16xyKXk26QU|ndIBhza@pYcQJZo#k+~GW=?m_iU z4V|;T$-(H>-&^JFW1^eFf2hi8RmnV1HjRWL9X;gc=}eHU8v(cS7&I$V--$>{CBze`1q2Cg#(uGkMG z$pLdP+LLF1TXa~2#uYwWndc<;)@r`qLLiIs`tdEMQ%kT3sBN z6WxK!z`FLcS86vxf}9lavjA{5mDL0^0wxu^PqS1CJWUMqcj?AN(Nq)wUyUemW7o;! zFS@B@YFr@I)febWR8LVd@2e#Pfyy{5QE@Y+)>Pfp?kxIuO`0m3g zH2NuU1hlnc*nl}9bt`h4vvwk9vY}=Tr2$gULi^OUo?8)d7Op2txn0kD zA7jM1?>1wEoY(A@y6+|rj!7OWuzq%n2rOxKug1D4lW1n{aH+nU+w9H?dUu5~>24o3 z-OQ2A?wzCyN0TF?8}l=%XOi*kx^E9gH<4l1nCOP^HPsPkLA{m$n}c?zDWi|jmhmjw z-0IDf&Z{18yEm^8XEn}xZ(gud_Y&5%U9E(VY06oz8ONJ4n@NUA<-l3fOfMm&PtzfF zrZBPfDMiZdeWjh#uvN)9b=ZiQqN3Y47Df^M%v8ChCzG#@bXIh8p>pR^M0xjV<_KWW z*3&8PmatI^*EzAN#BG~stkB9gyeCb76T6BqrM+fisP#N|qOlnn^-8(IWc2qL_UwK~-ZoAPe6Sv)H7LByF!keo%6?7BSEN`MT#|u{}@s!z=Rimv!qF|#PF9K=+*l0J)S-eB+A58zBe2uEIns5abbBIrgPF6oV+hzYF4;RSus!f% z*NNkMx=sc*>TVV9<`Ogbi6`IEn96UpIdq)AtsJWMHXsnj{Sgq0-^*kYnvg3a#K zAQ$^v9GfzdJ!6{PTXLH})Sm~VYIbiBCsF66W~xY?a)+e-rT)asDfedVyP%yqhijoz z8<8a!lgyAxhtDJmMKX{}@Bq3XNGlbW#OWtm>nAco8i`&``O3fEAEqU=X^#nu=28Ti zu{8lo0~1A~_xVD+4c?uzU2L=K+PUN1A4a9(+f7wBq31Uj3oYss(UCSo!E6n>%pR}i zTMB+!@zX+y@LzhL%JJp|xB18Zr7O}U0G6KNmw_Zjs6kxwJ1%cpF_X$Wfn9V)#G9sB zC2v~9`&x++n~U9dG|jvNPaqkm1a=4BlY-qnlsq&p@Gij(U8e&F0=v9#NDC#cmyWs? zEcPyTp5~yy!TjhO8=Bp#IGVOCH+gVm^0goV(bour9gg*;B39&Pr<|FKJxW#bo)0ku z3bk4+Vx?HddQ-!i={MzPms&Ek@++yN*=56{*a8 zi|Uu?CZ9B~gEXtN%>al~#|Pgzz=DBJukRV3lR6|Cqzgn5uMnXGh6XW#|KeL|8vI%M zyaH#W8Ra$T@0=Akw6p9;1Zx<N&z-7bu2wRGCm3QKzI};J@HAoB**BdDmiaI)zpEd zq5ucN^JYi#W|k0ARCPo9ye9-fl+*8g{WF6SQOXQf{QE`9XnhS#qTai)-TOiz?QvGz zIJ@e4#>_Ic0rnx>2rSoJtq|;4b-rz5hvLaalFkjjp_4bpH+Ay974&Wk&7JJsoM{#f z+9fT=#qmb%$xaQ#v1{Q_eRLD&CPtBvmQ`&u4U#<#4XVp-(2cf1bpqD!V_mXgTO$}B z?j78J|M&*|$8xj3cW-w8A;Uomwchpg;q~oEKiUGb*PMrXZW(Lawoz@PVWh0_?kdDt z=gn6?atdOST1H6C;6A0KBJXtzZQNWMDO2xK+x$mrG}!dKPKd0o`3Ze;}DR2+TnOyC9Yrii}Uc)Ll=eJqHhld{E8zpn?{Ur){%^mz+uZ}nKEez_2ESg+2mx{*HD7BXB&T#-)^ZIaT# zbbrtK^H9O7dIGhGeMUICu07rJ9~;#3={=GAmFW6n*3pzxf+r{X${921T_5p2r){JN z0W^i`DiG6odx13^9vy^;7?Syf9S>eXRCiS7HqU=mQ(1VTd|~5D9vDl&jm>W3r*a@7 zRu_@BolM0t<1P{PSBlxe^d_)Is9*!6r0t&xok$*BW)LZv zDM?e&;QOSPM}DW)a-a0HBJWeil=cB^yxnLRf!&SjMFM1)rRE}FH>!sT(zq4Mi8w-b zm))_O##k!+zN9cu39)cg8QhN*J*kcP8cgnq)X}mfigDIfGDpuW?`IC48ECC4?TYpV z=6;O%u|`M7Y?>!$=axRt2|(@z;()CQ^DA|ptl_GR>t_eHDSya`#ncd+0>Ptsk{E9Nsh2g6J``C@A!=bXE1|s{Jcp#VN!}9Eyai?tj@G4u z+*LENE3ngIjRx=}kq#J(9%LRFds3i1s$AF{ShO547Mac>k3eZm9^$Jr>W4~qu+H!d zg4X0a3r}#mF@b{B58=#UPr%$_%gxdA&xrP&MJ-BGTcf+-6aRs`YIl1>qH#$$(Y`7l zDX-G)Wqp>@U;0e+RPNkT(N^NlJa?t71Ag{-{y&|YdikaP?(n)CK!sNxm-%6i(|JBMrZ2s{6t|l!-v!Mt%RTmQ?DLUi8P_@f z8(%7}#w~B@owjg%7W<&?i05eiAj>4YPev z0$cOGRa|v@`@FpdzPp3mT}JVuXZP-q%azD6bCb0{T0T{jby>B)Kaa*>S%9hD>@hj9 zFG2{Ibd8M%FE!V0KnT^8mXqq&e9fh;rt7?mxI-+aM!?7D#f?FZ9?9=~=X*@eQEN}j ziQt$f>WjIbon}hFMwn(8)OnLM|I~5K3-`Tnuo62b`C0uqE3{;4;%NmKp0jYN@{=KO z*v$}TrQk`!Wi0z7P&Vjv2Zc0{QQWdYNaKe8JAcO) zJC@qSl;C3LJIk4WkmaU3-}x8KM3*A{(bm98M59{gzDEd4+!n+Pk_6vZf{O%>TX3Zs zlTP&y*{K$!Q#FtZ_E^thElT>B(%cfHSW5bk(p)Nm-7WYl_c=IfbwINeqcM4Fq%xOO zO-}490Lr!-XHI4~u{-d*w~4!Qi=hD$(yaF$ zn4g##(0C8xgVmo5M&Ah~u0P?dK;B8dT9oW73T#gljIxdYXWdFMDQK~?6c2=Dv9mGV z^78B?5tBq6;}%?C@RLb*MRvN&(&@m^1$j)d80aBXIrm+zR1H3kE>J4HazaVN%%*&oIl!1o5Y)VQ{>cvYeQY+^n}1U1X|1Nn z)OUUPmMN?r6swzr<}}@MyDJHNZfp5r>fd#~dH|mnF@HO2Lf{i@H!{igjpSHyv=3oq z`9;Ntcn2Uh4c3nK)`@+@ymp3#=yim+J#I?H@V1p3v-jQiU_oTPg3!eqwBDt@cZBtd zNh+5643zgl-#f~Bm-*h1^*-WzM_cc5-#f;7ANIZHS?@!>mrDy&@=D)(KHe@}FHP8L z6UHdpj3asC0yjluvM(=r+OY{9CmasiIG!y>hUIp=sU_+}X4djurAds=IKq_=seW~r zu9>DEASa(%U=bQrjCyDy)r%_7*rS-fe{NfFEQRHyens#$ECVQWV2s||B)uViKNZgO zz`XZ=DT<=E1+O#(d`$%~yBLpd&?0e-+f#Z#*OcG;Lv~NRe4_{iFgwfBpgK5@bOIHc z=ecSv#oi$*4HsL(mp*PR#wykYDKVfcIckO^?xBDNB_|UZmirk@B}CN^o5`<12qMpH zKM%Lmr*;AJaU-9O2g_mrIff3oNt-vM2s*w6N{8V8j?HuK!WZj#fawm$bm#jUJ9!4| zGsIvG9Ut3uI-PhtL5W)eq!-hBAZeJ?_cvlLtPJOy47UX0HwOl?^wQ$QEx9HOB`XU# z(^;M+)>(5)Zv5ulfh;rNIf+~H&XMJM!=G-+>pBg#Zso%0x10s|F-1tguyl5IHyg`KHY}oV zv2L5G^_-bx+X<{(Oj3XfCZ34VlM8N` zI*3SMV=hSj1b6ddP9SUE(;rtB*hh)v!KwLEe>gS0>JO(TUj5;Gm=6RarzUIP`3O$^ z5vmDZe>gSu`w1iz_)dun`Xj*x<1o(61I}Oi&hmri)|WDQ=YEJwfe;~?Jtjb5HRJhe zV)-hAN!BxVVku)-D>v3Q=u@5A=i_4uQPBe-yqmeyRGbOIYQtVI%|zhmBM9S1m^=PD zr}o)+SOuvO3MZ%K*M5w>dYrHYs>x){BLOJ_9>AATwoVfe^_$Vy; z*XdP_)JqCoJ2u**jbqlE=#@=M6}0E9f*w#o3&@iAsYGroa0?KUXKYV$Y_{+X_8Yp% zFGfJ7_ccFDK|S#+5u(sfrT&4jYP3KDKXz-PiN$p#Nm_ji6m4*L97w61UuptL3$r@7;WJG^%0axme zkdlo{ZVs{-EYm>hAX=I=mMHDaVw_8wz=AHb8NT`o;zfwn34~@EU1$7Fy7s8{5}BkF zpri<+ppXS?JyzJpg4OLAFUyp&2!Yy&tL)G3O`LsRJ{IXv>2}=tvo%)U-fe|4-k}6k z7fL}jm0pdkYN|aH$34MMN<-n?_ljm>tAFxSijv5n97d|$_};JjrSKG+@l$TQ&KksC zXANReJDv!%{yAmq1=0@ks*InpwBl=Q<6WfVG0!m+ES%9TL4ZgEx4Z%n_6h8JFQWMJ zUFJza9wF2He0trrf)3CFG8GU-z1Q(}PzS)x@3tejL0XeJxu`7+Gpc}^6O0=A<@?M{ zP=>^MKgrFp#fMqzt$8|8e_o*KC^vt5dabGvH9QZCuPI>LC4hRljEzAQRy zcL~QdQ@AD?T!4O-tQdpMk{}_w%iQ;BK3{C_t@S&`Cs%{jRS*&;9^6KUZ1NJbxIHZO8eZP>wDN_J(CrgizKTX&{m;J~Vpr`q zT4^87PK(yIjkLx9n=Tpj7kyhJGU&|`r0yo~JQ@&kk0g8YykNlX%DikE*zIiZe#Pz6 zn?(5#YRG?=DC8AIAe~@zb9htwyoS3e`gW1GGW=m?$oHJiW$N_B6~&P1d*XafYylzB z^?N>noM2un@VrW5*&=gdEm|Q(B{y)InKxc|)hpVQpBJ4?g6=mM9bz6qFZ#PrvUUsd zplv8G`ZjKt8-bSmidDIvnS_335-9V~Y|);Mp*feR+I7qtdd?~2tazbx=kR$)NWK}8 zdmZvF_P*;4=w#>N+hOY+(Q$TOFDmg#WXD~o!7VC@8<&RxdPEL%HKgKUGj|M^xnsD@ z>KAWnD`z&VHnx5hvr&-gMUU{yo>kRG*95eW*=8^flx$Vx{FPXk&YWy_CO_>OKL-2C zk_nT~^M0ENo6_YjF}}@3hT#3~_j`USJ%2xV$@KiT?zf_60++pK`|!;^i_7R%$B?I? z073ElC;%F@xi<`=fPrl1q5#kK8~L3TyGwN~3iLLRZP?BihvF3-)A?j9J(At|S$WUd z`QDOtIwDO18_%wExV{tBc%I+ahIZ@$)@*2p>GafCDI4v4%?Z%vC-Z@Qd)|`jYc&72 zUf5rHoN>D}+1;PI6BbJn)a-dt8(k4f>Gb_#KmX0{?x`B@1zv|4?;AJ*Vur7`#Ed#S z+XoZDjb?8EN;^9EC~_<^l0U7$I`GN`~I^r0*&)gMurT20R=^4E&=OnF>S{GSFuGjcOY zO?k0Nz+4CNOg6vr>MA%ApWtjOnJH?C@eSFDg zB2gm!B|Z;1Z$vNnOTIFKM;n8rlN3}bZ!B--pOJoj9A>U<;sz(Siv3mQoaxv#ypP+Es~5mai)0QCL>9MIe=B|nT~MQw(4P>PO8nxTT%%7=zOZ# z{YbNWSFX7NuhLtx0T8cQx?YgBUXFm$z)m%@TXmx4k~4|cv1gbU8kjDty+?CCO7?@T zRX!hU)k;+&jZ6Wnk-gpB$M-X-e|k5vR=tGcbXdO)GX`(EIq5U(|9R^hU?7P{*Zn2# zRrR>NC3XB#T@#I*;jQ1!TuH^XiB;<=jq6szXKF6}HJTYf)CtwMg5IMVQOPs8fiu9- zkbEP^a|waNz$G)q7Q*V2r*jEQ1h;wXl{UKmZ6wFMMEhx-W3S+*NZ^T{IpW>kiX1UZ zlVSS>?qSO2py8C`z%YwdL(38GZf*6~nD~p_`k-*m zUhCu&0)ql7PB;rzQ4`0LIi_9VOy-BOD=gj79t>2DAfe4N3nnf&TH=qhI^t?MuHC|e z5IoNciSe{)>lI*_{Z>O_+(2+C2Q4KEe5=^Itt5aQCO5gX=G_%}?}kqnw_fNyI-STw z#fC&{n~>T{=0;F6v->1go4B3(Ya{cVPF<4OvHn+Jo-NzYi3A^w;|BW1OS~mzNH_G) z%(>?iF!K^;(Oc(ZMlXA~#zc5SqD+gM(D9v#`im~4&BZD|&s2=$uDe?#Tgtw(rt}3| zg}7#M6hI%&W= z32$BAKwjRGm^9#>q^Bh?q4oi;qZR3@*v2h0q-Qdbt4C2*>0LN;GKlG zZqz_5_o+-8@J_;8H_+HRT03dLJ1OLO>Q#(lpN<|vIrT(R>P5wo z!J)IDoy2;kNxcBwHoEV&PSc+`u+C|pMXBr)(P(IUm)6LH){%WVvfd(xhXIPRkLHU`H%Y0pF)chPzqgX5mGXCjWffX~L@ zxF_wID5$}Ljlppb|KalZ6rVaRA_7kbo)a<-o#!Ltj}a5AG!hLaSQ7t={dY?iJfltj z{*jS|&|rl{J@c_v>`G(gj}Q}s2gna3`5A68;!nuv81*Nzuza%_3lmEgqyFg0BKFx4 zAVa$^3!;)({{PQAZ(&L;xG;W8$X|0D%BVYLXrGjO3ulW6W|S`dV(+N$x=$-Q_LW$-0L1W9KK7*6zii=1QwhmU=rc$GngAQrld_B&}>& zMJtcWgH7dVCH_WUpg(XBnbIy1xL$)LLcW$ITKsrcg&B-EG1(gSFKJ<=>FXa@#36** zP6R4wxo+?1on2({Mb(b&ohhoDwD&B zJ*1FT%gL=fWfsc!sP5?YR?X7y`gJtSTcWGFfvVPf^l|(^F~eK6SuVt3!fz#HW-88- z7i`Spd^m`id3^79v=FSlW|TgksCSOA8+YFc?(ZPZo?EJCG5l6u>1kK1@K$tb(Zd&4 z^{E=?-g;#A)YD4+=muKB;{HlO^EhsAiP}Yts(A+S7LMA)`gIcwM7I(?Gj)JYjy|t>$>`fEZGx}v!0`X z3a#r?4Z?(|&QguPQeEmbuvASY*}d?V{1S|NtLlpRjW%4&Xk9C_FBCNmf!&FUmCf#7 zHM?KWMdd+?!66MMByUM0Uz?JHbV}UpRyMmcb5n2Y#seYQP%^kR3vORU_*P!>t=#i$ z$LO-u;QVbT5V>54s&ReT5;7!;%V=z&K(|MFMWgD~81R*hN^F**D&O-&|B2x9Is65- z`1-I$@=`%`i?otj*V`IYt_4l88V)G-HEuH5!ag*q2eggl*`>Xf!W1$ywOW0-B$iR@ zF_eGbh_QQ^Hbd5kp?fO5m{E(QzRTskU1tVqTT%&K!eK?P)K7I21*<_WSQcYVE!71J zS^j(I^lbl^*w)YX*I<>B?Z1LsV6y$AxvC}Ge^{?mug_{Wqbc_T5Brj{pI$n)50f3$ByTCKly1^n*TS#+PV`L&gJm8K$}9NUj1g^j zx@V%?wzo9$FyOF1az^EH<7L5LaYT@(HVE|=&r(hv0dp{^O}>(s7rb9N%Xd-fBT9fu z#n!Zr+jDbFiCG1CD`ykhb<$hcu2}nY{kZ{IHY^~987}S^77)N#PA2RI-UGF>WOAUb z{FzL;8u+qW*0-HWLq@inoBK99}V>$^UHr+q)l$bSUT%6U%eduLO>7Rn|mx zC%=ZVa@0fY4hHHg`Ml+;7Zb-(s3p?0`^>j7QP3bu8r`{=IIRVnwdGr2E%@`TqRU};93(NCV&b%N{HCTq{7 zPWWdsxqkz@PtL-BLIjO%aAKbpgpV2>?GouE5H#&XOx8gMQCwDj8I= z(rsbmB+wVw&XRvR_|$~l7=1O*oI+@H7np_;){qWsAnajaBMft%)(_~cE%RN8L}5ea zD9y~3owF>%;7TF*LR)dPZ}eQ9nw*7c{LFb5;;L235mnDQ_r7iA=vg$630}HGkR!#S z?gS`SQWz1)2&<2~`UsRYNF86DxSh#2-`5i|!_ZGgFA3+Jna)GO#a1;*p;8j&4^kXz zdY7_3Q+;$pJ~gIwj{>OkV4@+P%+u`=c5l7WSE7aF3e%lHB|Z58;nr|qNjT#Xi4AcA zkkr~{t~FI~C7|6q<%UPK6Q;~{UxHQCsb=>tc`(CPO&Ll@8Pl^9ve#_^r?ie@gEOm$ zRbD+QaEA9CKf)w8f3sMV+0)eiH-oo)7mQ+^7{yt`*Dwx-Z--$6X-+XTS%zJ>L-t4QsXb%PzV z{)k1}ch+bv-@sT+O)*oQk#!z5atuDf)GZo|5AJDt+2l@>1HBBnn!X>tx0OF7!%PvrbkDB^lCOo3 zw{JzyH71T|&dYsr=_94HoP6rgR?5jo%4RwF)S<1ElaC%OmXl8%+DbY3NVzO0pE@Zm zQEI~p;td6st8~AXsLrSI>9ntf!8u!pn4C3Nu`0~y70XJwE>{m2v^Z-%LJ_5iE-gmA zdIxZs*joZN`Zfa6@i^}QLK`pBNV4BXKsp}h9l&biWh$w70@Cp~?*M8WuM;wgS8Gb+ zQjyaN?@^8F?l*wDU2q2u2cD-VN%wyl{0kx-H01yCCdB@~-ULIow?H~`L`7Bc&j#%n z5b390M>h5C1?+JJNOm4PUK>X!o7?x&xw=KEpv!UOuqGk@_o(oO;8Zwb(6QQgHUhzVzYu< z8OFjBemTKgS5u6O>oYYmA61eEwbFABdGUHyd4c`OH**u!<;~j=J+{Sm-pW*{zvgWd z5&j6!+^9cqu@;4a-OV~P(7er@JYH?=)wN7dkb*ZP0u;tNI272Covbx7A#f;BeRZPg z>Hup!u5C$_RR#7oZ~GLv_?1>;nfCabb>_Btn-02paS4>noS{U0f^>fOSmEmoJ}?7= zjKkxxx@Du9J6XWl%+`v|eO_F<0ZvSUt~3^ASu?YhHzC&v#OT35)nVuUP3}vHvL7?~ z^!HxHfp8}_kL1|FUq}i)cio*Y2ZxgGGgT^Q`9WJWcDggEtk7E){;=e$wmH$+t%0pb zaEP^q6o7Mj0D3pK)%%h>h|1}m;|&W(%h&pQf294wx>g^?RG{iPTUqN^V}9KGUB#OQ z*zhNS91|jb61SbxBoiB!QFE`yoC+e;ZeJUV4dw13REw9UD zqG%aM0>uSM+rbCh)spgkvco*40_ZHdF2qh~VWQ;;5qly25?&JcWRAz~c{_J>zRa(L z&q6wwtLCoN>EE&l$qJjH1JkF#>a6`*ZfAcpwf%3Zabg=(JXE17678RqGAZO&A!?zD z7T(unVkCi73$;`?o=I(k!}eCBNJm7uWap z_lg2Xowch+7k`8McKe(a`;(_a-M?uDgB2>VsQZ)+qhu4R2X!J;`)#V7p3~auJZazP z8dURUi1Pi_{N!qj$+gRU2)fTWD_-(puq8Vy-c6nfQU06Fu1yVBti|g6F5VFpvG|SW z`G~B>|MP#Z@pWo^;n2nx()coJFF{}k`wiS0ye!~7C}n2(Q}eeTfgE9QoE*?i#q}$7 znOeRW;3|5+d9p=VZRM5@hzwF-WVh&chtH?6s1#I<7RTL>z4sKJ*V$2(a_XP0;>n%8 zP8wUJDpaZ>x+%gdkI*nmqq8&c4%ad#H*W~@dy)8`~2EE)0W3WtdB z&f7|yc5v#C8G?6WJE${F0gOa^jQ(Hg(-fK6A)Sg7`>yt8!L@r#uqIE9OP(HAo+?eb zFO|Pr`cfbj?JJ)5@quh%vh|bg;`9Dswz;44R#w7}y$2`o>mE&}keZ9m01^?V(~5s{-efO%CF>^^uVH8$4CReK|ZF*dC@yyo_RI z<>v8_lh?8=3{ncXE+woXAyFJ++^lryClf6{uqdNe8W>VYnPfOd~<0R zm$yXBb1j7oOJ4903@CjYFY5o`?&iFTNV9uSF7v7g!+CNyg-A@0gb|Yj*UsocL`yVY z72q4xy9>?kW%OGC_xtI*+=M`%crm~={U9gt)qu11<8B#+UhS;C2R3=P4EYL39}FCF zPs2ui`;xP4$)Tsd&*?aAf9)f|cYBdmWnA16>%y zuc;pCaZ}Q%z-}JZ<9(ZK*?>A2%dxIeYDkj?r;MjSUaDH=v_7xxoGBIg0)rjzLGf#E znOH(sADL@yID^nSoLC#B0evx#dA2+lgqbf*HfvDW)v2BD=5G-%;RI3(53$5_Q@&64 zIvDCRdvBRoy=VA3yzg`#)bNN<9{U+nh2N#+N4=F|^;A%d(!fjwyuErmT*~MDCGdU` z(vOstxnP3tU+()W@jGi5jIJ}`vhLfTJTtDD=KO>d?$PqSrAK*>6ZgE2$}qEn^8|}- z2nl+!86_men#4~0Cguib#a>u^;FuRL`6vbKIKH1})5f3;t9r)W;Y>beW**D&Db2Ku zogQ&?(~{v@vD`o{=xu9+H71oBAM^$v^r8&t!jlC(+IQ`|5@+qZg8EDJjGzWr0@)xl zzK#Kz0ohKdwtFqVr(?mT6Pu&0-PV;s*nQ`na<42?>tGGzcus0Z*O}w{^#bDld851f z{D#822hXcc>`mL#)9J*0rl-^M>)D-+rKl4t5{t8gH>;;3gK@;wTxOO}_q1tOR!^sU zesE8(HgZn}V4Hr?G@epFAzUOVqfXYEVO ztc&iEDD|Fb)rfWQ#_3Kx#qi_tcw~>jet&%$*O-=EwlN4)3}AowcK%fU2TgbHRd+Lw zb)DjM8J;ybX1aTa`;0SrKX3GAi!n`zG2$)iabJ{iVw?Qot=F*58s2QRI0|_-%eJDOcL}j z!}%aj63G8w8O~C-mp~z9MpC3C#6-V*NrkC5*ic(cyjBTiTHvvuq2t+1d6bDvGx7XQ zTH0{+Q4Eh)#57hmo_PmGHLkRb2Fzm~l*HeQh|ob2ts;s9>-n7WW%3LX+tSQxP$aE& zlie}{1v*F@QJB+NLt053g-XEwgxN`{Ra~l7#jp%B3q9Us{xD_E^hKo(7EXc7_CEKwz7LLB3}RG&6%8z;Nk%Yx+{2>D*tK6h^w0EA?lDS;77o7>SfV%U#u{b$e~F{8=N)kH=a13}-e^jblFD8%U+T zqD|MciH<{>3zi^mboC|f?8h_tSV~uINq!tY@%K?AWhIUe=-bZbSiE(=;AS=fNdNhM zJd^jQCgQc@S#Z`NN)HFW*3CoU->psJEEPiPU)TrN)LLZ6TxunXL8#smD* z{rJbJSxnhXC`M#RJ&pEDNecZWpGF8%l1Jz*KS<5B@In)SjuSV1*}BnbSCY*(D`$|(RHuD{L@oVTpn+k_?sB(30|vdhFU7*3Hh>y zB#6;H!~o#vBPNBFC?q)<2D?`m81E?GU%JEIWjF6~wXK4M+`<<_DmlAh?ja*4g%WMH z*V7Ett|+_D7{ShmlGVKc)Wn!?CdlQZa|~2=F)#!wCNhB}93rg%(lh19bX(rF^Ts-B zpRL;KEWFJ?BcaGlhy#rB^O9tjZP&C2>-mg)XA_l~2AxGe2g67{b}CFgIt;$QEe?(J zbT{Akg>Td*1Neq14#hWIUQ>QC!)geo3x(-AVfx1aEl;hbpL3zvO8)N~&6NMpS!iYj zV`ipdal9P?N^tn2VF1TlpuPbdua)ndIR4xq9M|IWWkWr_Cq2Zkr2?=r?A1sG;&8rK zv9H2Ky_F)J)Oxs2W;`sD=7{NnX;A%K$@hKrkLeOS9xO*4u8SZ(Bb5!?MG^7}`bBo@ka!3s+*@-KT~f537fa2d&1>q8iKahZ0Wo%(e3_(|7|Ziz{I-=J^7WCn5`mju4wwqN&kWKG z`jV1lXtO22*va$xo>eENHt4CKfmXdLY`*VSr4^uA5PvsQKvt{vabvMR8h9}~&3RXk zenn51olB+ax7Z-jE+e~tqaIBiMuJI~*5^!KX8HK)kE*n6^=umFg!w&@ifYK(X^MLN ztZAL$+U2H*VfCvNa3<9KX6kPw^BLu;6T4!7QHV3_f-ro}(8RoM@6Yo|k?3(sJYZZ{0+uEP3mCy#9LVY_=_V>xVXdTHadphtl8KGe|!B8@!e;mL5y}i1uYX zWi%_}xdEUvp1%Pj8Ba5au=9H9{!}5D)gmd)t|g7d|Bddn$pgnybCJ@N!mv*9OTR^_uNXL8;kY0~gw@UWLkGM*WdE7LJQ(}i0`ilMbvOPox5zMEaZyTtg@ zA8U=t>U_gEbmit`IGPo*ClFW zcr?gfGWvFV_F-&qm9bEJip}S07{*Mevk3JRhPjAn8mJ@XTOUK+$~(P}#`&@;Ysx-r zEi2?k0$Yq}R~^=}SXgpfv^i)U=rN)7+>(H7+qr?m&@!cChYGQuBiTG1eEda(=DLjm zYhsrPJ7~k|z4i5gVvlLFSKnlf?WnK89BbyH-@r-AlkE=XcG_{^40H00pgGzsgR}|6 z>S%MKb_)I#O`?HBQY0r70&I+OV!O)bZpjdfwWcJXE;-^w$F(&Vh=|1nDY;KgyXe?nk>x(H*P2jY7HKHMKh$TI&j^Z0y{|uW#cou8ni#ckpt+{E% zd2M=af{nq3;g2!P1g^UKw14)NVyd0aCUtE3)N=JD1kT{R@@Y;he-}l8Ascg6*`5}K zJUFpzPbnwrM_-7D6^6A}OB&`ogRe{jYsZ_jrTC<=sLA*W@P!G@x218Vgf%w|bP;&g zDQ1qudtTZa(a?`hF;`-6Mwy_j7(xvK(ZK2D3a!mXGxYh|GsnQ|mSrpnCBkuv8TzSU zIbTWN%Bs&^0Z`;0QBZ4a*@eTFCLKuFFEMk9xs4e-eTw-yim%ZrW`BOdHf7)-@%uT< zyoCa){lm=6AAdT}Y|nuYd!8ABm?^v3?~H+r2Onr|zsEn!T%!TQVdklJzSLRfRT?|( zpG&^UQRc+sSFij_W+HQpxxOki%sJ-Yoa-F(D#)ld!1eOcH_bWbpD@B2bkxK@$6PsZ zjyVy_TUn`U8uLS$v&_crA7(agjO=ub*|`1V%*Kszoz62Gw|}77xY-`mQD)=zk2D)M z7EwCPY~22#X5;1r?=+4w8@D;q4ElV&CwO(F*|`0q&Bl#sqs}(h z(w_9;X3w5s-PZY@4mmrWUz8;S_pN0gZcZ#X&my9=oNJ`~1J2g1v%+A&deTRntuKAX z*^dJsI^^uf;nFE*KMt3UIs0+Abk5n2!=;1HejF~HboS$L>8P_Ghf8Oj{Wx4Y?Ci(k z(rITu4wsHQ`*CUmnDOIq>A-V+c_?$@dGOKJE2W?ohSEn{|Jczp_`GXS8t^N}M zWf4%UMCx5n5|uq_{l|tK9lvh8Fr@R>_OR$7D~X!3*Iin{$?ob3si*W@p%$q+N@C8$ zYN5gkEQcf4(YJED`bPJ8>ve{dC5YBTEQvd%UhH4$S=|Hf%+-SXeRWOf-K z8OwFV*lMKYKXlq!8KRrpt$p(#ZGgQPjRnNpsCIRVmYHPZm z@G2$LVKBQuMfgp9MJhcGNS{1RXVg$t`hYa6cp7wT`}q`ATXoWz@&eG9#s4Ai{+L~5 z)}k5HLFwB9!>|6&qq1B5Q_^R{AY-Y?)GKq*mE(l&EVS1+hFM^&jZbd}llQ zHQ)I;(BnHlgwo7+p3>&EVKu28+6T7IN2Fkmijq?QhrRcYud2H8{&RD$5H#f=jTUXH zX`6OPN!w(anISc8BL;~!2(7V`PV>w#9VUZQI)j}{i=8O3_a^4_aKRarIx~*?^yxEW zAE?+$kqVN83aC>nkotR6s$lg#A524(_8vMEJg3jJ-t8o^uL9fnFfNeG0 zQ-&d26YO<=L+Wok2O!LkQ+;q-jRayG4ZXf?Js**R=7;z;P4^%4HXluGQ^P0>4^YnQ z`)YCO#jb(lB@k2@p@*+Is*tp)BVBTP<}PMj;x-R^n^A#~mO85Bfl++Lf5S<%9MVeRw}uk29e9+FIEKAm6^J`=p|;MPkMc|Uf-96 z1_^(dIudkXuKyB8bQcW+8V-E49JhcClmcXm2wq9i1ci#dzONONooX&Grm%dy!K3oMMsD^(GpUA(Q!_BZc{wRV!{y$Vw!7)IPk(LsiTR3=TD*Wx?q*=RjYJUszz`( zO5}3jtwN@`j70aacA6h{!u(R`H@Op;QcoW{>N3PMNTVvSHI?{*ZkvIlde%D zycUgE}$ zT<5^CT+dJdiw?hDj?399MbX#nmOt#k@o6!6hmMi;HG3@m#5B88IFGj7himpmp9eyttMZRz34q|2KV|M`Wa@q>A^=IsRw@n%{^dHi zWv98a=ZU;-yBG)jh$vz9@H0?CSuE3e6_oHJp$I2wC}xx}n_L)jL<;2vq%hY=VXkm{ zQc|FpAu-iac5WUmP)|e)IvFwREotE{F;}UBmopDW3yc#kxJo2J;fTFuzbF9aEIxsj zbA{t)Fq^abL+wQzRZZGD0`@+T!%_nyq=$uJ6a-EGdK2{J1bIl)w?uT(TL{ilVesMLA%Ap$VcYV*_Rp=KSklEgjO!N63hgKQc3KQ3Kn|S z#G41Mp6NnqyExh|u91%Tug$2KY<*#nxNdNWDrH-#j;C}WlD7ulEN2=Ymdm z)3Q$cR0pYcM42E_q83sIJ@XsU-TEmLU0E80!sUafL6fgY@Fbuxb=|38zN*H<7QH?#5 zxQApNcfnN`7y+2To$wQo$}`nJw9o47i8x=0Nj$@WO(2`w3#`0#e<7rG`@xs|VcXxu zQXv;Ub0g_}6q=oBcrCttRRwdnn5=0;nh$9~7VJ5y!nCBq8M&Fsn~NaTMf2pTq?U@| z$722QYa~4ef%rIJjj8&EusOm%g{P^4&4M!K4BS!sYWRj~u;{S3)iR+o&*g*2b9ATz8%h=DQ6c(tcRb<+OcLsNtnJ&kl&GtNz=F&3Z7sa{&Xo0QCaose3Z@=U3l zO%e89I@l0R_3Xjpnq8J1E*aMBf(@PyUV7^+2)k{cm{|Oi0iaH36?2-+rkD3j=W8Qw zb_L3AEtkW4AP#II&4NxoSl4~mzS1v-E`-Ds40%=U7PtURB_P#ikyouxH9_@vHPW)d z7X?64wRQs6>MED4+Xw-97d5H$@Z+)j<7+lHRq(n|D3U47sJd84$7{mnG)^e*%>2>% zeO~%j0qkCP0e05EMl^SnFw&0rAk0&|^j|<^vb)_v>G1^k6%k-GZ8l|(FYvDo@H^Wn!Nw?K*-a1Dr!r#V|Lv8wX$-`%&_ zsR0>kNdjrcSU{*NG{LkfU>ci&4U*4VDrfJ1?KIeS>gPn0W^~ImIu@#b7Hf9wjBB*1 z3ik4?laCIx3Uyf=72>3FzK)zVbkv_uGeg?r(z$Ug>_ZV0hxt4nil0$CunC9!(HO$* zs_23Qv6nV#cgD~wgf{?aR?u4k|JbHgA(awCC{CqX+|OeD431>Vil73XV=iFLP%72x zGPGG@s$D-ZyOtrGLcPu(Ym86KCi0gSm*Ho)ENT`E%u9csYz5f7b~!1Gyv*NS^{`_S zm5wmMMbfJanFOznNmQSlNmNhDBtBHYBywxb7?ZG&{=uc4Rr`YVT41cDpy?ZLxXh+|YvWbt;Ewhzbb|Bv1*g-{&Z_ zvXJE8LnlS@4^2YyCM1j>K;(*aX=ixTSdr{7b3Dtg%McqeQXbbmJ7JNPU7V;yHXFsb zbuN6ThTu3+v>IkBbb?j*ZN=8((ymP6TatRlfk2#TpEPR7MVSTqIwl&0f8mPGo=`MP zK;hkx#K~H>^*ERFI&vO<$94Jtx%=>{>2G7Osv)>VF*I?uOW!Mu`@@FJExjbb$WVW> zHhq=YcONLKfF?&`iqfac$haA-+{>7{68sLX{mCb6u5K6@96>bUg8N3sRbKmQ5a%wk zd54RGI05hW5cqUo{L+Ks+SCp=g;8A2Wu4^^mO7X{-N90X=VKi^qU_Sovd!@I6a-CJ!6@rn1{1Y*(LXLWzFF-XmZIWv~? z>_!`J&7&d;6Aufo!QtvkUHOuK7mjMl-oNCfzi0(@KTdQx&Xnki8(SIO?OB`XGH39w z{y-#vY7@^$++{Y|yRr;L++{WbE&GxDOxYWeL`p7`y1}GyMBQySa`_AIqf!Bf6E_yr zn#mi+}5b>O4jb}0u~kslF+Rd zsVVtK!8Y3plxO%v_}p_%i(L?jNwJnDMq(Od8?`Fdu^0Z+vG)RrVChf8TT}NgaRCm$ zs=!0RjY4i6-YiZXjlqdHHA*nVnWCXPdQr-943Gm9X`1e8m`)WpQeCj=HtSO7KV!T& z*Xvs?eRhowr=nXa_Xjx_$_r+Z^OX5E?a2aEQJfVWbq7EBTEV|MPIr>}9#Th#A5HCz zyXO~&A5QI7mDR4SOVw#p$~0xmNKh%&@lda6Ig3sct*iSylWVqj?N+)RY%Bd8;HgV= zO3`34diqgO`y!WIOlQGpAd3m+(J#t&dvA+=oAn#s%O8jTtcBgbU;-^p(^KLfJKX79 zgA^53r~top`VDs2#PM1UG;`}F@3ZxpKGpOwEBer+1bXlFT#OiHfbMSOiQ&~?DXFkb z&8me!7hc~-q+n*G4K7v?r$&N1w2iQj=h#P19)tgF&e*|IDQhmkCUDRD6!+yldQpRb zP4H4wpM=3sz~iM<>wX#2=l?3rsJ{c~{6}h^Oj-CYx#Tu@O~0bv1|BQiV+D`ZJbLpv z(#xl6s%lfDDtyw}Pp3wSR&}mCSm-#@P)#ed{UaP;U3A!6^mP3jUduD}Pw_&!w#uqm zs@FFEDGo_2I^r$*6&972VJU}?c$_|HP`D&v0O|;Y(oA_kgB&T~l3LAj>?vZ3Er0ju zdyho;+fns&hyMrOT{|kf0HoLV^uY51Vx>hcEWc*=CXKdzDB-`+L1dMr{wUn^?96hM zwTC;Z-cYSZQ(oWU4*ySzc`x@jjmSXZrT0);AK60wqqZf?u0+gC%eq8||M_CN$>G1+ zpk+uAfyy(jXUF_C7ECQzb4)exrk^Zzn!F8W*q%{Abq%c|JgUy3jo!n1bNsohbGi;j z{|~kANK{rsDdcOSpfIu^)x@63wBKX)B(LvNpy6zy^k=OsYxpQN2)S|(Rbrt_XG%cl#*k*G-b(NzE%*+1$qO%c+Hb{2bU|DHjT-bk%X%DFLW zTJ4hN4nKo&3o~zgn^YcMou4e`qk(_ax zNLP1KIoy5aX@nDM0_G0_rtVi)mQYtSu?3e$Vg2FX4u$?n#ka^^A(8-o!IS?eE-vv+ z+e9z^(eUSDL0^r&f7x&ff#RCIGf;5_o!b<7uQhzXn>6A~CZ}54D=!nX&O$?7{U~ig zFczjk_?69R*ES#caN_8H+8U-Gph5!3JtT=o1g3K5z`+?9&j`OL4{9{Ha325 z-A4LPU7}7cSq<2&vcRsePFRFyk&aZe69ao z&;vKgg}%COdZvBzqzo}Ui^;-TV#Uf=&Pc=KEhQIoMc(|&Hu z>$50brTgD-AO1(NQL{c-Qd_uAm?tr=C{JG2{Q+-k2BZ5)`{g)r=NeKtZbdMA!dUh4 zg4aj(GLiI0(4^~_mDgPWGFe#ElK;hy8HGkHqzp1i|hv7#lqrRtJNWevs(%rl|{D|Z_0(zp8Q0!gurpe;( zp0>#s^s6#aFrChN){b+l??kQRLSsu_OObF zsm`vfE>0Ww(<;ODrp!+${kiMsmc?xUGs5&wx?2tP*2NX6m}tX8cZzSDU>P#m-W` z%2`U?P^znAei8GBho9+wk(X88MZ+dop^$+NJ3Bw0wI-850etzaa?c2 z_Vrpq}9 zXRmkN&5LtpOzp6orxV;nn0xiK)N7}E>)xgBYwXMZ*Qi{dK%ne}3epB)t=oSbMGOzi z>0CLeD!%~*wJbQbn7#Nwy+DP(Jew~%1L@RnR5rdG&FLbA&aq}EUZfC>$K9sDo$75` zSNGpDO}*U(c?-9_tshVA?b<)eAAdv#wCeL-F}8m_miMk>T36;LoUa_k`8lZJ%KQW@ zVq3o+&(DF0`O5r+^GW!6B0mR5wXV!hIG=>CpOT-016x<-C!9~h*Qey?;Mmrc`3dKf z@b#(rIXJv^Wq!i>Bz(OjKL@_vSLP?2U*hhfh`o+u$&1{?(I_qufStdf@W73kg07`3Mhtb>%BzI$fU6#B!PJT7t1$2ggO%SBpVF5WH&vM$%uv0S9(<>KvfAnkIMjO8M&Av;F@buOHZ(D5}6zS}e)5D1p$ zslYnCwMxR?ivOO0JlOtLW*}H^XJnX%?gP;rh}1*{@&Bd*uKxIMDmc{png6fzp|_xd zQ~sL@{+kNidiMWgDwvw10(NQtEfi%1zu)eXe4HKW)_N(tRuBRtzNNAY2?;^!lSoiR z-MA|IEcx?Fq)Yqo86K|6zFfw`l}MEC3lCRiUoPX}N~B2lg@>!MFPHIfC6c52!h`ND zvX{$vxDsj6ec|D%?8{|5TnRAT7ap$4zFfw`l}Lr|3lCRiUoPX}O38&9&S!X7$iLF* zy$iV?*u-;f@wL_8XeUi=kJ?$mo}TO9UWn^_2r@g{QnsBl*kYEJ036(fbX}U4K7u_U z|DIlDq_WO}%-V+*-ihb#>6MBtIy`EMFBjo|oPz9jQ;=nKVw>#RIX370lnpjYxq>uh zda@nsuj36Zu(W3%4Q`J#Ww!C&QF&1LohogU1r4W;dr718P3~ulazrY%>bY@O9l3s{ zbZg1g8>!X0T&e%i*PW5x?Ru9cv%?c!wcFwtRqVD_fnTC;SeewSy8T7Kbe-1 z3H_5Y?M4ByY#KV3X$ZTgQQqs`C^L_n>iR7Pd~e--pb@(~!LQyaUI<$$Gp^IEV8PvF zw?BB7LM1}b(N;|&NLCr!&=h z%O0mj)7UL+_SRfPkGY~%y2fxFqZSBn1U6X^wj2x3CE}wSPt*+;^o-j~UFX7!)VA4Y zs@>ck2cq(*t{qJsFU|th>wZcGT32Qpx-*MwI#rnKh(mfw-Jyh%P<@M$Rlnv7BlD75 zYcdOB{ws%PS$jAIrbZH8`gEo-*pxnKb^3c&z7V8$+`&scy+uF4jvf7a+p$GI{_cSn z&-G8lcB8P~e>^q}-Y?rf8aAqP8@JJG+Uo8g=404{y~9j=^}D@=yHPtI6Dl1uUE;Fv z0AU`Zul`;X>ESR5!Fs#%-0nCJQo04*p^Dvf9^p=eF)I~FbBCj2N4nnH8qvEWYJUVe zHg>KaD>Pt#H+Zp#Ieo=>XdL5(rbNwRIsS3-_45MY z#R)VD@(+UrEyv8A0~2DMM&o9nb~HC#a|CJFlg^eUct(+*j7jnBW=STo6<$;ROig8C z_R$CnMv0ZOE}>;Rlpk z-C6hhARDY|(FtQ*EikV9vKCI=*;5UfK1lA=2$wVcQs%a_v#CUOqPGO^y^K=e9Rscb z+|C_O0Pn-UfM$#nJwSWjy34Fp=w=oukjII1#Gfg-*y0=CH++ecn*k|Py+a{?k3W=KCmgzESBdapY@OEVA{wO&3tx$y$Z`7cbXS)N z0&fTRvcL&fi_W&>BQ2b98KwroP1X5B;zj`Mm_uH<7iE#xiUyI_iN9~ZXLcN zW4;)Kymo9(zwK1aq9%}AYbdP>IR0Ky0S$|#w!Bgwk<2E2a&vl{EAt(tj7-ez?+wlN zo6fH_OUsj2ZdHjMN9aUU{jF3#Y2~-dupCwHI0S`^KfHD23Cyw+E%DMVDi$bkYv#^v1U3w|+Y+DTDsn<6FuY}qb+LHg z>B`BOX?%>{7u;z!Zz|{OlJmA$lbM#gPIyf&uICc@Cw7mr(xtZdV)Dc#?PV={bd|-i zg`wH`i8-u2K}v#o5SXxz?@Zi|Bhh*@f@_IZ$bZnVx2yZeZNE6h-%-~k*lf3vC`DCj z5~}#+Yg%9BufuII@knGZ{R4RfzgO`v?v%xx?=Ak8H&qb}<9)$)+YfNrcR(GPy0!j} zUt2X)QFULYIYu%)b7t~HjVzGc)T=v9wBPa*tLLY|c1i!4x}LGp?fyemdvOf{l5&h_ zW=TzQZ7hC~@yL>1_ept9eO9&6bg*5beWvsde}`2{nRedTAdy@(?5BTX-O_-MWxf`J zXm6os-d2VyCz3rf5T~DFRK^6pO|8apzrX`fD*GEIk>42=$C6j@Tly#Nx8zUVZ-Ro^ zdo73lu4Ycr&`&ZSW(qaiSgURqBin8Q1EGd)GWp>k zFuU#j$@d3$>O=>X2(Ocb*16N<1mfO^Cx+{CEr5=AN07J_&@B$O_p1Qt7%nFZhwcra z>4sjK2dmnH9Svgg!Isi4e*6JGH*!;u*xO5vsTz9&n(($2LAt>)!iF`{xw>A{^sr15F3lcdQi5TuL=fHuYiwu@%CUIxRxJ4h2KJh68Jea7_8 zSQKAZ&acgT7%8CENc~6reK=Ssb}}YsN!$u z*MSbCuj0H+Tc+&q5bK(GTtZSa5tOq={<3fC1JU-$of|MeiI@Ij%5&jcqh6n|#_(x<^?D1kTX~QL6rx6hv zW)fdfLDnY0dhXx|eq8OE!lvX*93Q!>xjUtv4Cw@B6ZsVJ72pu0`g5e`Ec6%g5~PGa zbgSu1GB3t9KT_(gyBt=+L3q5j{m|bv_^ifTwV#o%0OP-H`P5qWU87B4c0u$kM@5SlT{q)HWDBPR-QM5E!(xG zcx&!Z+VaY!3WYlwdxiY!4Cnn%DVn4w&qY0@KEf*`-)I@!JNUxj zFF>5;suO5O>9&_y%v$X~7?D8ezs`mC7fW_0n)`jRpK5LSi6*-Vq^3>wdIuSxLIyk= z=V<&ij)F?*g;$qNwU@?2w1}L^!589o?v*K35Tt}(Rylfos=8X+^BhCWo>!a;*{Y{r z_k4*37bK!3F}R~k;Ot8CSEL6DqChyTCUg(*oplvF8F3Sw+#jK>Ww&kj`fu?AAdDVaxvtiZ1o9Y1FR~_*(C!&GxR7|otkX$Aq zb;sAB0=vbDp#iNr|LD0G>Fl}GKnihDI9bmsf`}0 z@GZN%tp_Y1`4X5@?2(9RP_WtS{;75wf5ZO$s5pkjQd=vKc$t9Cfv#|`9znUP@f+pK3%z*|!+qG8tdk7QQKp?Q_JHm)S$*Pc1ThR$I*b1n&gNu{iXm)z&3 z!e)j3tn$)|1#oy~aHk1oZvShiLmd}Riw*>WqYf=6nX*zzz=18OX@jTJglR2Zj?znO z>yi$CZinAo9EOli{yZIgcLB7RrzGt~s~zJ{hJPqgB4vtFt@>#v>y3oBYraTvvRkI% z+DHtfPQ)m&zl`oV6IO_9DAF8W$fgl_1OcLp4#b^ElJ8)+ zBG_WGMSP2sHnOTiz?%#=60VM`Pkw%i|I;8{=R}w~ArmlO5v(b-jT$|pDe5u7mmPjP zGr3~*)%643x@{UYZ_vXEBo-#MotQH1UdsR+LT--q%{(1nqldP6A~TJxDV69$l_D^t zCrJtQFHvvu>IS(?s$uHCWB}<2&BI=|13zJU(q#B+;8Z_w_2;drOK1-X3Dx6$hu74P ztp1vGz&`Gl{7}WhmtrTvDS%60Gb$I@Jng^KZ^kJZO+05Ie^6s6tOK9gEzO4Ha%o86 zY(Cb%#^L7jucS_iuyG4IDm!CSbvl)EhB>S&5gfLHzPkrLc{? zFrt`B<`Wiz}5%Uq=t4eC_y&!?t#PxpR0_=|xfFGm>$o|``HSD7^+bWuO~ z{EJKW&YKZcJ+4!EwOgmGWtHKid{C_rcnR-8-TwT%9tU20IW;hyyP__9No^d?wy}aX z%7V5M|8f5*2Ap~x6OcORm+O-16*F{qG`AM^>O9s>1O9_C0?3tDLivdzzpcdUeN2O& zH%nbi-CJV9f9ees%=^Td-(cS-4eLpO@?Y!rslNqiCw>ccmi!j#Ed4FiIfFWx@bE^M znv=)4r4ACP_WZ|FKQ?T8aPawo7msm7Zo$*`4Gahx^chV4@pSK@!50ROzHFZdo}WJL zIG;1=4;w1ao0Y|m-wG~VJj4HOpo6APAn9hofnWSqy8c_~clhs2;&qO{aTrrq!gCNp zx5W_bOc%kkqR2{H;y=NrEcpATa}Hj?$3$?Q-65~d$$rf}=h6`GraB%qoGHCa;m5ec zlxSmY3wr-e+t1Q}?&q$c*vnjUv*2MWDJ6F9d4$igs=Rc-{9pcWKjN=xzv88p-qtPC z`hT6gg7&dqZ<#j0b5L4YU;58WidJ5+dNDmMvF5QopXMt+yhz;`e6IdsWOi@Sepk7F zZ1^!wgR+l=J0bcgzFirMUY-AO|17^Ib#H|;8ESvlPp{CI!U3!Fg{iF|DqDF`v)p4@C(Y= ziqRF&${T~v^&h4O6WaH-z7gD5u4yx%>fCQXpl2-9K@DBo6gO?E*Q2|TyS6o#8A3Nv4c34GoqFQ=dM@6arJy&K42z1QQP$>TNKnS4zEyh94)2r%~byD90G} z;L&(PWu|ne7=qVVPY7ZnGx{Oh4vjHaS*|K$CM*-+3EgkbhBI-`~Y+2ZAH^ENc@7j%Hby%JAD~E zVmr^ogbDH$#XGLUiyFFW9jnvo1A1<(hcu?b^5Od^EFOAF)f3Tdyz^kp`uaC~`O=g1 z^!}X2_{uBvH9JS)AM#D>$>V_`8VAmF;Jsw{@m}J8skcHb8yI*B4@&qi4=yDNi^f7d zgNG@R;HfnBtNO#@-doQce7674)cU7-%POxvojY$Q%N3l- z@#1nJuQX`01`pLA_8+0f;itPADvP3;nqCh7k?q-aLHYF5uDE|hy>sI5ad73rm%Ag5 z;v0`jp6);HMxt?rtEJ~)aAVA4A^~RpsKgP2tKsm@+5@Rw#s2=N8YVORU8=boN-R43 z{N19#!%yFht-R>)qj$p~iVp9)8~QIge7_^q-1$8JQQ1#YztomVahe-Ij?wFWiE1r% z0xVlch5oVB!Ko-a%GuME6Xow+q@mW*)#d5!G|{!aRqS--dnu6=O0U9rklxQ1CTi7b z>$g>l*V=o^7SB6vwcV&y7KTwtS)Gp=U^<0PTg#Xhe}C)n~1@0M=H3cB)T4*t+^3)+yxLi2!{VB-%q6}H0 zYH?i)v{1xeJWm^~^h;t*4_g%@JQ93cu|IoO0!je`Teu$XfxNYnbl}vzhZn(Qt~Yh^-(5o9%*T*y+^4gOsj&KOjmyR}8Am z&6NE^?UTe%XEK@?;;h4;AaYdKs&8BY?#5xgnX(1mU8WY^-QgE^?fg5N7a|}tnBm7e z(BNIfQ|vxI0-Yw=W&Toq>{&|2jMPz5&*HR}p%Nb*?6ILI*t$Xh&8as$Z`~&>v-Inz zm(#R;)7Px+!{5lpGhA;I9B6|5eFH=BAmPLW?>+_-+(AMeJkxBII zoXX(6J`RsJ7RPo4DIrDuE^om;uC*H8zYSm(`Bo`Vt2DL{OL!Jip|^E?FSWXPzqSNURNJo^E%t8MWmhg9 z$TaoGB>)lX)G#ew*+oA=FgfqcW=c_uNoB8zsv}3WO|=k^;DQ5lS}M!ohl2+-vka?3 zQ>iIE+!&-9Xjv|31jw3XMz{aQ8C`inkUH6HJ~mW}W=1;S)QNLfpY1Fq%%tya?K!BK zbZs8~Cdk1GLC+M;FLs(U&91B>c{cdZ0hum_2W~2ynr<*qFi07P@Lzg76J;WmZI;otvXhriTeqw6uzxFpBzITHRa>e+Wh!s2)q=(3Bujz`tLBJAdj86$b}*?qAs#1hkM9ADJ=R0=c7!M zxlQa8h0%;rT3Df|1Uae|lgd)<==v=xw}M)~#N3>s!{{E+uLGq=zND>QTx)MXSw)xEB+E2 zR_KWvXM)@B&{q`q*LYP>F)J{q1~**li8X558az12MZm zg?;{Ou4Y~GOPuTGU3_i|uI>zOcd&1?qtk1bR4^9Q_}=E7nhko?0;CnhvA*-8%wPipp({Lr<8@#*z`o!>l@2=8C3g7fW`qe0E`l7xKKkm}8t?^pp?JPZ& zoy9vei*r+lh)y<2ON+hqFd!eDB3w7z3hgG+v> z`#|!8RLgW$pAIN6LoO%S#^&l9ZvE;vuDE75ellFwFq2LZ$3sSZ*NbYouG|j(tHIg> zKZ1E^tNTTf!(6@C8UAWdkvmitZc<@g>F}p|>y{(pbaEB zHSP179#ZMKl&UN8njZCIoKAOtHa4{kW#&V+<{ph8?Sd=X1TRV1#n$DTZQ8kiRb3^)mf)`-Ev5E0G z(W+=cDy*msO`vF-fE#6q=Q2Rvx2k1!4VNf`e5o*08qnyL8Jy^aP0upcAY{!X85H1X zuD=_Us5|^_80II9VeXAF;hi0R*#-13+1ilX6P6^tm9-51DaU7dm zYV=d9KM?dd>2&1}Rh6;&@l_>%2x80)*46>=V8dK-AE6!MPK}9ag9m-EJ#j&YKfgFi zu#ZvNOyjS4nG#V#ex@>c{S@V8ni3`CXF78mxR#%(BudE7G;13iDnHYyQ9^#EvrSIU zYpyg($j?;14IIg@X?m0p4eT86F2bKVN!2;C)eJx7-Bor$2XqM8?bmE%_Y}G$V>TbW z=Hs!~^}+mh8&^KW?6ltTDZbY5asCK1)Pyg_jTDmeEi=T94SHNkqrF4k@3 zB!)k+z`y!#DiQx{nbQi#+Sz(WkukgO50o%t%)X?PxvZZ;$GAxUi^Qh92tr3ekxY5XOh0a3grnEv{ zv-WzHPw^TpOz@g;9q*zmk=qzGb^m~sczCxsmw)I-75sSJy(}HC?!rwl!-M}2V(|-a z?oDX(kFh^dKk}8AW4m4*00!>joL!jbV#)ZPV)2W)Mv-C~e!J4MRK6+#$c*H zzbIIc@aHFj1ttFcl3+opKVR{T8sHajo#$vnH2x&N0Ia#T-`l#u_RROQ=8@qtx}@x} zf!h95Hy@cPs^eo~LMj({ z%%3tLbqcA(6CPIsyUF>dPDnkK)Y1v5s3GT1pO8A;@rQ`CGYxU=s~0m_^NBb!HA@9& zAt)y8f}z>NPngh14CvTCazvDzUy!h4Z>ON7^TC7p1*g2df)K~Jf+cUSAXqT2;Hht~ zAdC9Af~9Y(pl)PZylpzA0qAAZ2M@*`BP3fMP!9;G=t88kI3S(HY+WriqwiA`3BT*8 zgj?LP)!WKd!?Mx{BC|FUz6mVNu7csI2)=2y>p1YS+CYIVZl&?MzeQDtXG^n_9tPwm zU3joWkn^OA&vyLCqs7Nt*Q=b_1?W4IEI@}hT7!S}Rt>J4f6~S-8Eb6yxw(cmP1ewz zqH9=Bi)ed>#DCU*to_jEyI~VbeW%oTP^<`etr746lwM@`G~J8s;@FvlzjQ5c=GgQX zIK@Kn4Vk89NfUL{I9K(2LW_Ob4I*VnG_codQ$%WAHOHJruaCGiNIrG?W1;bDas(es zywfz4xt!4c$#c>h=g_7);Rh$rY4jj>MCF7>oIIxyKsG0QBb&3Ji$Zo=PILW)mt=F= zhl1?F?p#jzOEzbICMSJ_*WlEGVIj9;7=Fr(UIACVv4VN`1IA`Q#Io>^vn(v-^))!G zqE9vtz8D+g4xh38hu%Yz2ZyFSA)T&A`oRu+%=T$G*|OSgH-=I1zVHoxOiQGU+OX44%LiqhFcWYZmw ziPF*fXVVS7+4`reD-kq5hQd+;!k})p)cUK%c`Gu6w;7+v?DBriE?aM2p9!+Ih5xF& z$idp-xeeKTVZGas4KZa}_W5(zFVo|@WK;qH zsL*fs0aMM(XYh-)_t%bws|9gKJmj%3v8pDLOZQ{bkcCGWJTr$wHKeHKYKf0|_;i|| zpPvitBAm^+CFY~@MYE#B zd_2DB>?koGi7zUT67wrn64m!eEF@JEI5!iw^ zvkAzTyp9;V^#N8u!l9l&>hF{uBixJ=nU;tjd>E7-+YE&nRt2TMJT5(<)k3(woTjN= zUJhCP10v@`ri2(cdLoDSnWk%x=i&aRtUcS$hCjA8-1B$cDrC~;^BSHO?dBQ&!Wltx znZK|sXr85zY71utjYyo@p}t*-^9`}8aT4c~q~#>eO}rrH%{-aJIg^jj%Qz{rj8v#% zTcstox5eZo>UU zu@M&LNOXKG&Zzlv_@0OBm!f;vGap^XWwGy{8~!C+-)*?q$L=Z)|4gfZs7N)6tK;}@ zOUJ2h>3DUrDvPLc+g;z^zB7CfSL#SH6!uY7_W72)XJ@Z+1ooOVwihPg#3iev14^hB zi+nCu`SlwgDl$!fsG}zIsm<1*+WT#1O9@-0e0Heei?pAA-vRnuce>8odZVPo%r?`J zcC~=493kIC3ntY5;|KJBc4+?xC10*Qi%sdyWn?PxZtl+{x*@?Lzh?;vK~FP(t*2!Rl%%rvbdwZnU)PH+>8Y>V~?Masg=!tM(rfudZ`TMaW_UI}XZ|&97 zCAvL{F`;FwxL;Q}^wiG|j|M$DHN-wnO1Nh*ZPxeb^wrAu20c1G6D+QXZCFJ^!Q#rG zadvD&ryA|)Qi`cq>;Ee0t^GM$+Mwsxp8z}!jm&{U!0r4culW~;^+>^5oa$+DKRVPD zT^!b9m0B~d>Qqmw%hbkCEY;JlA0Gq3hGXi}&C=m|oBy~o*szbj#&0%VZ%>Fl zJod!i#B~A)uqJD~N5=&-P2GfGC$YmqvIjklZs4C_K?HumTASG08%Q;aDq3@lx3Q}dzD2uxY->S1rt>=fzXQTi&l0gWjYbnSGGVCnBEX=~4X@RF^5`ir#Q z04o2ke%T?u4;ZHVv45>xVRyjUe&t8PXomwt;XcjVdV4M8!I)bxX`T_R6;AS0@Zmu6 ztl)EYAI}C&Sz)Pu)UFqK|j(2MC@QE%zl!3G&d{5Nz=patKG;^AjHAlvKs>TkG>zrlvcLIQk5%p9`q z<;OfF<{&$B@!Ip!s4dogjm@hUve2#yZtqggo*E%zpV>l?!D@06*5TmT(ULN z+zifI&KyaX8H}{s!4SEEn!RM#BM(KBxkuh2oM!PsQR4g{Jp`VZ` zpjA^~#1AV~2>&*h)88Od(#o@}i{ACS^c(Z8ADH$4ZXvL0h0|_x{og55lecadb`WeZ zPJ~fvr_g~Q9k*&k#yl8jXA~U6+x#$22|cnIQPm3UMmb~A(!j(ksECij2BRI$dSQ=Y z=S}?KpHF2sL7{fmk}RsX3f2D-{g&bQpK`P_)B1@bR)JQTia0x_R+c!@^46?p`jdZR zrlKF5;V=PQ{Qg<)5%ioxh-KE6B>+?BT3Yi=MN34qG8HYsj{@Ov3E!7^Et8mwmNT82 z((h>+gT5vFMZ{E%x625GFxjdr>%6-@bD|@PHtN4Vd;rDpXY{@XupyA{6b=qQp;SsN zjdL2QgRx-V6Z&~OKT7Iy4Gx_65SS{=%Nd9`SoBUEbJhN=&&BpYIeV#1TC&9^G&!HI zOBv`2Z|Cw4jS~4nHBeESpX6+U5Lem=shvzoZ}aQk=7#T?ooKJ^^hRfz{S}TR8`QE~ zZ=6MBmES-Y^!l{g}x5kpSbn3%=VGM8@*Gv>zb#s|(YnQdf zuF|DbRh#yr9y96nIbbJ?b1X_^1KEx55JT)g9tam+2XE zzgPl|isznA$)$V;S>QetYs2idtSEUl={ow;xmu3UOXu)}IZb{%ZJ4)Y^lCM1^Dug~ zMa7b++viWU&gej)WiX>x8$pc7=B3Zm*B-Hvy)GDt^@1^cUYO;^k3i(5cFHyt%WRN^ zEBUT$DDBJ!?aVSg+J|9W1TImGgeV|G5_Qibhu>%ZDJ;pK)E@473sq(2G1nyZ*JfNm zcRwMUeRF1wh0w@c?_y>wuS^V0-;ZX<1uDTDJy z$$Qt4Rc`*seV5 zi^WsC?(5OHVL6gymWD+xLYiU+TmjHFU((t2dd#i$nevk4SzSBDFiO5QBUt+;6x7vl z7V=vhjwD8*8*9j(JTsf?9YK%f>YO!Nl>C~L%7YCO#xse=frBNnec){(=o!hSWYWc5 z)B@p*ZrDe6Czc_H_7{^CRC2bUhV7+)EUCyg1NqHn)>tF7j^R32V)A^{nQaj#O!7zl z`drdMh1EhAN?*pBD-gVs{BTu)vLOcZ+u+83wyu^MW?;dFQe+fns{4B0$dU(9gVmfr z?(E8fOJK?GcNSc4=7Y_f`VOHaH*gJ*G~*w6RKEa5YGeGNtyzz z4qP^cS=cHw-mAZ?V7J@T$u5%(-Wg8XjLek++%^Ch^xRmjO`mNm*6p$s$>utNdtuTy ziPKwmuD0?~ML0kpjs+&9i)X$UF-*B_x4G9OTENV{)v$S;k8fDvwzFdo+s@m+!*n6H z{O7lw7bfdnuQEe`ZhHxB9j8ugwEkS+vC{xMn)KafCkt5IZ<6@?N&G%Gbn!P)t^7H!&c9N7Ll)6!>FnOE zW37nuKLX$ww24M>6Jm&2wo^R(CoS7ca+d7_T9UIXFL&NMlVN)>mByQV{cXp_Z7=r2 zTZwzq4{tJfH~IF{hTR*H02hM+bdj#beAD+^7c4DoG2irk@`9j%8NTT% z)&>D*!E`fgBUDEQaIgD&P=&zjrT-UC6F?jb*N~j0C&iR%8aQ}L)n24Ng{;71MhjJI zRvr$EP;6%X^Eb#hT)vq9>20q$>LlQ0^f~9Ta*E6;S#6^29tt)Nc5&Vk*fWAHy$rWI zwSSuVQ5Ya&~&@|HJG+Y@#aBS=&mEhis6i96|*51Fg+C!`+fh z>*=HHxwIz~M_vLpMCx=kPUY>Wd`(^jNS(O-%UTVP*l*6mu$H!x-ewZW+kA@c;_yYm zG;Pvst^y~@QV457ej&HDD=5dH@*D1?5XOZ3LX5DWM53_7GD=`*C@it8pad`ZZ7iV# zMu@@^OA1PezH*~slSBy&6on<07LjwvX9O zgSi3Ni&L=J8Kmf40&-;dw;e{C9aoArIui?Tn;`j*Eup- z)_Go$feOoHZP5sM)_EPad$b>Xm|@={dp_;HytNYf0|@Oyx5G0 z#A$Fw#EZ>{I8R2zX!*X3TD5#HUeCOK{-@4$q!rqRiUT&Y>9m|qIOI<8GS@a z@!3=DV?M`@KBA%cY^i-TqJCEW%5rhCprB};Zb}H;AEKTc-x@qf@B8T|`-Mo!T)>J7 zSWf|~DPS!*txos>IIlq)sOQw=uz&NVSYmD!=1_rh&3r0ar8CEyVj-L!mkM*I;4yNk zxK^Q$Z7Qtu5u01V=<;L><9c2n%s#uk?qbL*BxMw?$+9C^6;6L97*Q;dSIjM*6HDf} zvzx=HCLKFoG~i5%y_Xe*-=`Q`LdhMJ zZi^}IVQ1|A+5_Qd+sWcbY8OzneJFI3TD?7>Y21 z@@J9*udtKm!6EJ-=w-aJ^cLDw!_Cjq3vF$)EGP0}n-~;j&m#iruqI1Uxu;C zhnyaK|6DW-;iVEf;ECQ{t8r36x(cr`ho7|<0)~h*2rjxS^>aeXC2oTWDkLD+ord?) zovxh=$i^H?5>eHL6#zHrE7ntp<;$b zk}6r3?+BsG=P#7*ZRkIqz#l@gk(~}Aqhe5qCAWm%Q|ZWf>viksp+lKi@|>)O@eHS7 z^B$my+M2;7Js96B;N~)MfRWPOB${TUg8O0ueUhWG`$=nk!k( zt{xse2rYm;|HQ9<3E7>QTy1GS$`5Vv!vYG3%QJ7MWa(j1O#H)0M)rw$CsJ7|Is@D5?8yK@CL zx`~#8FP8)}e0doyn*oPyfWRA|;T8mspp0`LQT|=QN%ZbnhLLxcMxwi7d%s z0PNt;>pmQ{7vA@znI&xhC{&7gdTbOG#6Vc>kgLGIDnf?8d*nk!;c=L?vn-6GX#zpuTL`CRQa|0^J3-dEkwHCbAxG{IkYu~A#(2m52!Q3lcB%89gMgz8LX9dopkb+ zt)SLmgXM*G2cN}yLeF3cVg%RhG2*YQB&Tr%qz*7}Xx_a;`Qf@9D;?aM5Eflt%{FHb?_kq2s#tMf9dsC%wJt2g* z_5{1Dyu9U=LmR&be7BqFVpOJ!lu?}BGmXcb#haGLoQ3<1Jm%JSs%E>g%7x&rPgSrW zdTako%DoFBvxNCor7W0zaVph95q=iyXK*A4R7IvN3O$=jwJJR}koihU++BsWrSjGy zD!WtmE#Ji&b|2F2s`Jzgaro=){(?-|%c)cwHN;Y>cKwk49m?U+?^{E>3w&HbE!b%3 zTW?->20m}|1<7E&JniBJ#J!1c2v)&*Ilx5GV|q)AiCHd#fQ=_OLoRZ}IteWBO}-1B z1-22HNc5l%AWs||35nB9;B)~4IbnVe^4#Spk?QUGuw`EFxl|t;!V0(m2RMH(Wl}Fp zb-{1Etpufe4R6OK;B*U}D^lb(|7m%}?XnodT#~0414E8%)qn{IvUzYWw0GuNEs7 z-}p27*E~NeoY^@8sx<(6>nck~Fo!(Q!D2E~?~>r}msF7M8<6Qa?X~$2M91^XKI8RW ze1arN5Q{mY-&cAuZ!7HW@zik)L6(rbx&+Nv_x`EWl=Vui5W=NiEKVJdeN}hNu~Fag zse@d*1(cKgTak5a^t#(%9j=pUY3%g~T;}me9hBSjVJn9d2{X}N`y$OJ=g&iMSP``NzTi13O?y=z29LNfFvrBx2}|4%EBND)cJc>3GK>Wr@3fV zi_DC9zBZZa#m@gm)`X23CTauO0d78xXOP9Y*dRP$2vvaJy>zRIOpDEK!pma1-e%TA z{}r5V-t$&|HXoy4YsPut_+^!uLO&Y`D?>xy`Cfsi%^m&`VAYoEWcMGalRfgXF?G2= zpy*bwn$xHkf}XN%w}qi)cDya&`yPZ^YL8bPw@`zT%jr|W&63WDPYlsHUTH3MZuwugkuLLlbEH3*Jb;OR0DHAG4rF8t z;#g+EnZ)IGCb7NnOk%s8No=E;_K9Z_S5qZt5|`)d1E9@*Hhf|(=3(|sVq4ys#3qVr zn))g<#aq`(GLKjQ)EhUN?q!yc8=G#6`2$|JTn9P)?sZS&!9Px^3`x-@RJ z!ktF<;d9jzkI<61J#DCI4Cmq8*( zts*_uU*bz7x{m>leaj?v(*uoj1}>dgdWiaDv55g-vO z1A@}J;=IDiv)MJUbqVOYz zEfbLyfeU0^b9NV*yuKNk)|p+L&=<1axAJI&tosaEZ-T-iWCZ~ovhEPFhL=byYs<52 zxOvMn`o%a^BrX8{tQqrWlF-=^E6&>Q zqmS8jV_sS0B&{r374yrpe9SwOgys4OBPjUDDl$(INR#@g9bkS*7L$2rlhCG*(tYQD zWKF>$i2+t05dcv7Gii%6WfypNosZE@;($JBKjDVr7R1P*R%3IEU}Oq$3BBab`rFv( zS48#@2a8o%o1A@XkJ@$LT0>s|-5{b5737u4K)M$S2H%q43Gag^Oa(KDSLp91=*gkr z%QG^oX87ou=9T&QPR*O;<2p63T)tA~Qz9ela|~UlQ?Rm1Rh~FMVyoRx<|fVG-6swV zdjI82ZrDkd&|nMrb<&k!=Fm;SF3rYJ6;LKz+k|piL zTcNpvA52y_OWIT3s_=2x&}4N}Y;VfyFzE$BBlNAsvGom&(>B;1f~Fd|@!YW{IyuxOZIB?jzr#>4e9r2|!lgip- z?ztU%OiFdR5+}9CTwqqc>3s$Em{k9?NIy1Cqh`)oEktHV@8nc#L|4DO80=gY-iC%h zXg-)(e9$imE>8H(iQwWAznSM!zjwXW6lK35mrCW!jjI;n4Q6YgDyQeX;>IA;G z?M2GKJ#*kzm}L2HjIqqf{4=5GRTPaF^Y9bl5^asfiRZp#^FoQbP;S?^S1;h4Lich_ zdrG?qpo?@bC2L;su@7DOAHv^Lu^!X3nn5Eg@o%sl!Ptkb`oPVIR;9kVRyPS^leOwL z6qB^758+CRNtDh%*&bP5-gOU_m*wX7XL7>uGvR)iQAFUp-HZS;_V!@G+nWV%b0Czl zoPSjC<`=x_w%xIuHy5<`V8Pp)1#fdGr*X^x>|=HdZ6*3|K(%h<5&n5JSY>iahacH% zs(uNaVX4ey_9{^^JkCAVd(CDu=s@K1=|TNqCMyQ~TM@3JD~zqgHhmvO+p-+2f1bDK-|RRB0heMhY& zEk5S#Q;76mi>cAzW=q)nwK7vngJ6qF zZB5M*{KmF;ZE6E2$FmNAim7KGNbS0+p%{^%>1$_k;yS47o~?^#65Vy~E*j~N+PSum zN`j4c;CZ`g?3sN+toP=JQUe#az~L$UinPa_;`u zt9E4)2mF_-c5%5D4S%|is;^$~Ozt0j8bqF+I`U#EKyK9K6as_S)uw_4ym z5Y*jZ;4Ql$0auFmwoXr?^rQj;@CJ5@7C+>3y zu1H|rjP6+I4eCkFyUO9hU8&)SwR8IcVrJOOZq4bt5F3@-6dF~>z=|w8%;TTl|Jp^X zld#SluZ=L!OQl7PbY7r5UyUe|gIxHXyFCnYjb_Jj#%2F$x~+3`+fYEaPN$WlTVsgZ zjX4_K*3g>n>S&DUmWXtYZn+gMtM?u_I>EwQ?e*5Y128^(-g06SFW?V6vf6hV&$N)y zTf6)mMvK1+QlYrJLjCBI;_&VIN&Rg?&OdqtBWvaxP69rS#vWPnx;som@Pz2je%=mOC1ns4N zpZ%Fp@TshJnx?OV*bxQ$FOR2Sb&B5qXDIj|OCh=wv~;7!#)g+$bspQBs8m%$53V+f zteld(2#t7UEVU=5ylYpYh)kVGtb9&FID|R>Pr0l0Dd>%5brlo16wK+O0`N!(3Q8>@ zby;|~6qt}Nk?|QzdL9xY^0>qUw>+9b-w8*vbIaoFlP`<4EY_7->8OeU#E!uYD%~!| zNS_{i=_erDuI){)?T4&HbyaR8VEo!Gq}`3*Vwdr=|4P6Gf1kbz3ZKKMEY6B=^BVx z^G~G!0>?Dz5ZCc6Jp^FWf*MW-IfA=OKgQ9vV!CHn>Vl}ygzk(>gsny z1M|`?2(hj$*GjOx#X2I%p4PvP325b5yRJomGnbK+m~X1gEm6y0fzplbICvZjs0QK zq(6~=EYv=J(FRCEGqe54o1B}bkHMzRTGz-NQY7*6(e&5$=Z3AWW$R}61g5{dR%vX1d+TROwIKmvj3Pz68Eu3ooLNW{^MxG^_3d%qE@d=vr(&w(yxl#hB?Ko?2fs!w zc|w(Bw5)9QntJq4gP_8jMb1_mYslmE1wAkn ze4JP{v)=Fzd7F=?wwHd8Zc$EZa_*c;9qk$z)!p57{&u^X`=M(>VYat<#M>Man4Ao$ z7rO?Im!yU)=k{gqLFgILCBilS#xyVRis~S^i7xo5Ufw%s6rZQ+s@Q%qRR96D)IH# zTg8H7Z*j0*J&vz8s9H0@M!_b(fncNHFxEn_U7(=$V7r6CmHBPB`U=|+1paTf;p!`F zL(u)d*@mkxzm4!l)H|ptV!`?`kH0Z*%1q)L$P~>5K7VTy?x0e4OrjK2^)^dfR z`xL8$!q8Rf7hHey9STD?F$UenI)>?D(A{b4buwDWw@1d|f)#$kLO#rD$wGcs{z5LH zAZ2yI{Mj~WJ->kF5l0%>x2OMrXCY@pAeE3gKWg6sY0qU0MZKlJ>%38ejXHG0S&rh^ zD^8y@-Z#}Z4^$@|z3q*R(}kEs#74$97e=r9pWuf6Gj{Eh$$Q*S^)0RY?$*DQR{W}$ zf{ohV!Cx1XnKK0I8_DtiaQ8m&b=CF#e{OP1Q;eLV;h$q#HEIh{6TE7wR~IDEh!LVh z?Obuu_1jhLv}&qF3#8rza=g8znu547bwf9_Y*mXDDcGdirtJjU#`15XzyxxNKwC$f zR@?lZulMJibI-j=${(4J?Ux7ip1+^-`TPF=etiZXhX3 zh(#o?_v-`xQ@Mww?9cRicJYOLUeP}xBYsNcAAvSI2nMhSF6KC)o$MRA64uX0K;3~I zE%^fWGx%0&gooUIQr#Pz`~KvJnWXkC*je`uq8@Ui%}f59M$aTB8GfhW5_a-5afl5g z&|2#K{p|h3j)UIX9fjKM5H@wpmEn@|BxG)LNn`~&^r|FuxbXRXj{}eGu_X$T~*z_sOYu9 z4@e(zVM{F-J5ZYVhp;7L6eBow3tO678n!eSuNRR~!wOrhht)Tyfr7o-m@aNFmDpCwlDG)s zY?fSGhl0`f10*}XQHN~1*PFA&$+o%8DeBr3R7x3f{Cu48BI37CuSsQBLLesJmWrDNK zb73ZK8$GDiX2o4U3@Am0J$-3QUEVCBY(|R#X7;FAUQ&BOt}{~Q`M*%85(8)|ptn9U zjSfH3xXs_M?M#Q*TlO1+%OA1!ZZ-Y1(!Gpo*no#w7Une=jzatvqz24eGlChrXF0AdQ0+O+gRwG>@ zZ}~&K(c-U@oZ$p5MjlmAf|eGmZ-NF}gM;Xm&r8Bc4N8K#GfxJBPO2=OpSU_>`p*DdSxsW&VA>>dm4wT5Rv^$ zD}vX`J&Re5{bfd~5aBsg9oWfMWwm)*ZO>)c2(B%GArc-jJYqGJ^Mi?*5^P9wTmx}Z ztCQ-tbF`}E>Iy>mvAP|+uW?6eE88svIhR)E6mz3f!G58JMY_7X^nr1g9IFogl{88J zp2l4xkKcQggOSgkg3fe(Kr`?c_#?QxH_Uh~1lRU2#MSH{wooc6ATusVCnJEF&|Umv zZ?FN>nmS(aNBu+YCFeBIt9$I#%mlBJnPRR5m}nGd3hAN!kVsEmTC9Xm&HoA^_M z2bAUce3{s99EGi%Oz-7NeEn=!5U0=B*5osdE4zKzBZ;9d_B`v4eaUu7EIBThqN`{5JP3Y$kK0Q1kC@mwS2k{9bKVM4VGx5S^Kciiu6% zHadFyNt5Pgses^oUd5z2NfP;z_bLVWBF!#&nY%ZHS>zW>YhSOS-|X-l9u2ddim6Vc zJqS_acqljK<%YEf7f5cT#NR@DmTxgB;^?&0fg-!|HZHD2Q%H&!bZCojGoY}%0%6vy z1zQSh^|lj4j!cuV@;Ks(5nPyA3;S2Uov0DWfQ*Qf$sO;!t}Hd(2_M&5e1r9g?d|Fk zj31F-u8=;<-(Q|!yq8?#lFa*W!r;}+JD?(=_Wqym388&lyR<{wOB5R#DmQz~Wbt4gmucyHs@)L!4Y z@`CRO!eJ27fLOrX+laE>z8H%*(p-qq5=DWu;5)>K(C`6$Wc_gQpGa?J#PKp}`% zhe8O$?svPhD}6VCvCz0Jb{3|##sX{K0n5NIE|z_EE_R3~{dphGmXhIQo^<%f1(&M} z2LynTi3iAtQafpnPa+P?*8FM@iIT`S!oWUWCc>+nD1G_Y5G6#5xF91+6DpZ{J4uw@ z&#N?AXen(>mJD+$n!QtfWw;?3xVft^%68^2mr{ZO>x^fwo48tY%;Ku_SN-ip8Q{Z| zul0G3i>5Q%3;vSeYowGXn9bvCf$@x(4O7vKApF8}Y)Zmyn36{ozqJTj40q43O9%#} zQ~LW;NAnxR`x6Wv50rn{o5K&VXsiH#ufH!83)Y!7#EVXlDAc|kSpufviF1U@(RT_j zR78n=W_B1_)uo!4(`r8qmN(6Oz3`Poa}z zA%{^OypK)38Rt-FqDQP-02H-8o2X;J$`7S1I!7})*+Iv}ePc4crO7gm@>Bx_6nvkT~V1|KmP{N7n#1SMgjYcT6KM&xRh9LS8CKEokm)ZFQQt3Mnf zWN3y(-qy>nKBHpfmi_e=g`E81mNGbU{5C{X7(;003{Hpp%F%i&PgGRA?*s2I=FhKF zWLlxy1sXNYKprKFDdaBR+Al1tG6yDnx{VuzOx(cZsKB?XApYc${Uy~+Qoa0|n|P=k zUnUtVVS7e2Xp57r2((UZ@A-bQ7z@29(fm(9^Peo>f&s@?p+%zbv2Kb{z*d{A0J;B0 zZO)qkNWRV+>i(Q1+BHeNzf>uKRPvW@rFourw}K=(;!vyKV_6x9m;p5dU#3*CUM z;JVr@$Id6M?MTcR9QrDkXlv}O0vklP3iQE(RXX}5N1>IuMc-8ihQCPlcHSvjfYnBb ziHy#9OOj`Fnt9gx6!Y`hJh5-^P-UvEuE7k{v-U|K!UX(a%2|P%mYhyD^8Vbzm5_tM zhq1w~SxvcxMY|P&ka31=HD_U82V3ey-Pm)XhU>heAWuwUwl;(ZOunaw6|-SH^UBT{ z>S1&|GjS)())uKvN1T#;p0TJL^UW?!KiN*8U*W@fi%X4d*3MwuDw}mpoxjgQNYkjO z!d`oVZ+`xE)REb+uaG*SQ`Q1r2e{p(D|e7}9bC0Sk&#@h`sV;qs!d)`H&+$3 zxE>A2&H2V{#r3`=-9!UzMH_5|3yn2x6K0y4;0YOk z+!H#Qs0?}K-4i;R=!tpp6FMq+A~Z6v=8P=y%Q)Ejgbve)+_gS0Tmn7g4_YYoscx4=L0KWLqW{VHE2!GZ>(JHNo9}`uq9Z zJk8v^UA)Pdwx8+C=N0?yl6m`TQ_Fw$bBb>qa9hTAy_!1~UFG5*El$WqSA`5A86k9X z7$MY99wB7x@`~dSh+KpaL5ao-EcvyG@2OLal4HRNX_iU9Jmp7+?MKp=aQ*5&fbz(G|LY|M%m#qCMd^hIywO_^h#9LW! zJBQhTYaS(tsZH-~?yv(=q=zuZ_I1-I~jyKC8Ho*vZ`kXg3UsZ;gd$n4CG zy^@V`Pt-x3*RymwglNrozk9~PCoNP^QPl6nRyZ(gQ$8mnKXewX;>A+87PGtG;VDF| zzIz#BMCZMB!FS~mPr;{cI`vkp&O z7@#xqd1GNyVa*zw#<5~?&8e-yJaG=AT8-OW1W0i#9Od}GOu-~)HSQWp-&`TTkF6&o z(?){mk`mg$dF1Dt?joHhBWz3l3)-V)dh1Vh&^Qo$2=f7AILc)>X#CoIie6EAI9NzvreEdSmrX-{Qx`etEsEJV7vKeudp+7o~WF zdmqpD*dhdA$?G+l;YNEErnVa2&$gG}Zh|iE=W}U~yrOE{3lNK001KJnFu+Kl?D=yR zK&XW%*kTDRSiu&92oegmxR7N*u!W17{IN*6L)M)j*rFAe{z>_D7Hn}K88r!%M0wQY zLW&(9HQCR{iLz*Y+2u8K4&`~hm&ss*xXVCHW-5GXU(rRWUL&KPmu|D8-{F5>u!?X* zjQW-St=3I=7U@_&?AYFaACgG!D1_ufHR33Q*}HG5wrcz;MdtZt1XjvOg_BqKvAwCL!| zX6+|2Lj)}%Nwc;fKV7vH@vHIi#sg3pN6u0sjeDU#zrik>GwW276fe=@27k-o6IJ<4 zqw^(@mw}7r2`mShLdOr2dRy==_p%FAEl-)!OSHYgUab9oLf;GCAv3ZInRTo%W-vD> zWHw|eN#(Ibag1VR+n8s4hfqf0grnY^p^y)XFkHWpMQhqnFdetIq{hY0XKs@IFPLnw z^!&B_ngoCKK;cHm#P`$Tr=sgL3_diKj;&=5XP9BrvC~>WWmV6brA#HB=;XFx?eIo5 z=WRw|I7yGp|2X8xiN?bZOoJpTs`kB+V)o8hEM{?ZQU!7BwlV&^-g{-;;sxnNEy0xp zXXPz5F8CsX<-wLR% zSTePH*>rZV>J0VVNi4R-3=gap{okW_vs<`f474khtC_2%73uZRvty6_YZQ;uQ>PBG zM)f-}J*vyXur6Nj=XfI@l0C22za7+fU)f2)2_-#eO8Njwy4f8V#ztzz7feZKi8Y&; zq%VYJ70ag1R$AVy8@xKpy=qE2uO8NVi~_h((jmO6mR<`f(Jk;dd}OAc2dbJASbNA7Jg!yA1q_FNA%3m`dW2`BlTa=Ap<27&R1v# zcE#Q=XdXJo>FkK6Nt)TUU;3r-?L6sQG&6*`Jz4hBh>6x-Q)I@?;-RM%waHMtbYtT6 zUJ31qt(N|#;LDi1qXq;&wGk5mZXD3Jf;F_n2@~^U#V&!fi`NqSufcRQ4e!CZo-LH9 zhQWxrG~)Q-i)g1r+E%J3kycPZu}Et$e{K)!2}N4%VLhQpJ1&0solHg6Q&}R=7_MLw zX}zm9BRw-Q3|LK)v@zB`%&JSO4JAr_sKtDE zCYPEEuakEd@k+M5aGqVnz4qcK6brqGkJRWRrlC3h9=x7-L`8|PP0un3QO;{-DPl#J z5lzGYCRN4F#!Za_&L97Tcin*ST9pbGIujhTclcQ*g9Xb7qCnlSd{3a4UF#C-C{^Zhae`Ae(wIeCc- z@&T}({85v)L&qe`ZffN9q-`z3BdNobXXSW!hMWBlRGStVe4TKDcsgCIu5bi-5`lMu z>9q8(LXRNTXbo;A#z}K}hruEn>`Nk|Yu~WKE!tdccFawKA1Ykfaf?*(a099XMTa>M zt--|DR~oVhIDO)wboonDtXPp8dLH#hy?Jh zQ@7Ktg^uH7*pC$ApilrS=Rz0W-^pUNCgnMm1D?rO7*Qe>i|ff(nZm zy}b+?ux{*vz3qf>ffi7C(n~KZ5weiVwpmT7y37^EAVE=V!y=(_C(d$M9FCEKp4Jaj9=YM53s`Ss<^igFioZ+v{hb#zF+JBI4t3$yVBn^Ji*JLT1XrTG7; zb<21pwXU0gNxVb`%YyqZ@l^ou(^$l)Cm*?Ax?Ei|8r2*vr48!6*@kU^FNG^S^Y2r* zk!;aQnUU!K38BxJUUD~5Of*7VsV;(_4SZPOXBrr;pX&O9BV`#gNE~70S7ZrqSO2nn zgBq8^a^zD2MAKw7588rN!~}G`$|0znr`J)+0+be?q$K6Q3 z%Bw!!+IKB;K4-Q$;HhZ+4&r{6v6i?f;&5cz*B`>nJg>)~gdP2H(`%pqRFphJ)OFw= zjxb9sBu1GtcM7xQC|)Id&Fg(c9`L--r}DYe^{=5})DNh9wy)fd82ZC z0byn)!bg2RbG#XhO?ORT$JKg^c%Ue6s2gqJ&bs%q4y8aX%HOf`E;OOv3e>~gMcM&!qK=Q6c9@02^2 z4b9H2VW@oCBq+6?k6x{hHi8^ZyrqAr`_L4r2wu-RzDX39t6O)r@HafAnLvd|nI{L( zp-@()7<{}M+AM-CR!%R@vLI=7uJmRY0kfj1LL z!2+Rs>eW3VBnj5rc9(}%?~h8={4q%s z+=K5GH498vkjAzF=h{g9XYoiJF+@ShfG3>b@r`ke^>seNJ`nT1Tv zMG^j!B?dYxk>SV)fnh!mfCylNDrB#np@4e~9GQ&QcNNpoHowS9mXpUgqjI7M!F>#m zx6=O$+Ch~!c1O5a3~7c&%yno`-njs^YJ}O)iWxJijUDDTjzv&gdxR#lS>zcNI6~>l zxL0G8t_)KsqXGtx2uo&97^-uA{0FDstcjN2c+J3J#UplQ8w*6 zG=7X#r+z1z_LIP#b-GzyPsf&^%GtDUXP(vZ06FG1?IEzPYmW(gw)_q1*EkRv&@)Pi zCj5ansdKNz!Y`SyaA}MxH*UTX8KN0GA#{@B_;|m=ppqPrTm*S$cu5x55F#c4diGgr zBrb%fpm7`F7w2w=s@D4Z=r1Ta_slR$HN(hBjv_C5+PU4GYu|-U{?Od^EQCK?kN;i> zVjzndf>_T7nf)R4cNR{Q>+=i2_f!WmQ}K|BZj^vCf~gy#qp10t=+@N*B&EcqE-SNzp%;dsz9@4TvX4DmflJES6hGTqaJQu_`5? z98u`c!>Qg~TK5D1wbF>5w;@*+oYWKM*>7X^oQh63lR>VvK{g`;SCQP7&alN&ZQKR) z7Ou({+T?4vN9JE3l9dD!y5toaS4AG-fi|~c7>|dlO8CK|fG8`4FPq44{^d3X8uUsUpaapGPeg$1JE%#MZ3ZZ)y1t8lB^#l?AwmQfLgT@yR% zg{pOG`xMERs)WDEjL?K3bkPI!mY=Otoklvx)#3V=M_*H{kNP6~YJP)60jjf<2OtZl5E~M4IyJv^K6JPWcvlT_JNAa$#7R^MdUqzu21Z~>J>ke8>|uQT zU|1nHL#U8u2fPx$f2{{ZX3P7 zR3_s&%P0Wzpm-QZ(486`p>^K5slFn(SWY~1EV z~44ANVZI>Iy6A&3_%6{boADW-aqprLVs*31OA z$%4Vw{v*k>XUKJ~4Y78xpHP1yJIFGE^O>pK#NLScU2!dgDQ$JuKKuj;#HdUBGhxnf zWDG9UzTT{gJlesdj-|tzAz;(uq@cL=mO@}&>SM6NkAV+mwcmFg5i2Mp0v?#cqzxIA z1bfua@6znh9Hd~cuOYw4Gqwb)s??PqAO!aeELe3+kh}<62hiP8-&lm6Cqi5XlJ`P_ z1;*R|Kg8!HyTJ|bgE7Jl1?210N$QKm*0>=vrLU$TihB9W&~@y3&8Y^aE5{DxXNV&5 z=qzJ{dt(HVFiXLrzL6#BXMjvm*U2P3Ta4|4@aT}3IYMH(l2J8CZA8_b0e$!Z#Pad{ ztw=r^9DkDyB`0jSHHa%QJ^Q+37t5G12T+~pS@5@ztz1%Ao-RG*#e1E=vClcMW6Kkwe zNas$bvDU*iB->}gMxswX6OFZ27^Gh_= zb{f%9)L1*pG}ewXjdd-uH)YI?G}ei6rOPzdtheGI6=cz7CCv}8a?jnwcPWd(bDArx z)B>VxDU@Ok^JJMe`{<9936RugUv(z)mBn>j*UQmli#VmP4K>;SGK%+&8X~!VP5m1% z1_xt`X)`bLSnvrJPH10^2#Mw^vNfbde8sJ@#4@*_7AIGV0!(Mdz6WV;abbm%<}7rN z#c-;rEKZu;u$l%VRFZDH43XCCtH%4O5v!;!H(1RZHMU4>*-MNV@z1fPp8!GpAW}%Q z>_x#rQlpBwhpT%JxN3MkpG6hU+xPs#vgiHq?=?ht0 z!A}C@6_jONu}TNtQC_7RZIPI?J>cY9Ct~&SaP@NxdX-j;oiXKI&%m8u^IoRH6Y?mDEWhr#@U6j?|J+$a9rYmmnka`J~i2 z$mLoWw8;@8W>RO=E&9BM%Op_KLVk62c^$5KWpSunJdvbL)kBDt%owjHP=td`m#{;U zbtwv*hfOd5)@Q+IfEd*H@@h`iY4ZF$DG8i_~O?vXXo3%JcHwY znnmlaU)SV}I@#PK$OM^Jsf{;r3F;X_x-VqNMIen(PDCKvy(>QY=e&0e^!Az1u*iBR zaBZ{R9n*|a|1#*H%ot8yGBZYOxBL5(K2O@}fW=N4hNoh@lw2)ms$Bf)rNZhjX1Zy5_CbAE69QU9Zq{aCvy-wDjIj; zs-UJ!Ql`Qpd)R-zhb zcnlQ^Y|e5WQumX0LggxcQXfs;*9Vj5BEQLVkwJGZZ-TS6rS^w%tL$xt%x~Zn?8VJa z-2NRUh#M|aNqCf_!e2E94Ll0)bc}XkL|BZ*q$FLEMF$%P*iiX8Hm~g2hT7%!b@2c3 zBz@n)7!`-(^5e23bO~prGIa1{%N;z}2_U{Ry}l1)=ShuPunHSkYY*osSi4w09Xd|C z<8~dh;kd46b*%kUIj;BbB=TyfQscq~Y1zriGziCSvTmq7-ohcOHV7EhMYwGi;>?AE z?v=h%2zCpVw=k%^cM5GXMGjJhU>%wYQI6gcqKxL7>3^Y&mZOV0)IUGO7?tP)pLz#9 zWHUk=wOcIzM2XUtAnl|jd-%*;r+p+!kd8v)NsCTQuVh-ZIa6h>6Iv!6&=K=DOk9Y8 zDBu49n|F!Nuzd&D=`<+?7~A6xW77;ND#jlB1v*89XQ-K*xAvE}%+OyaY#Hf)Z(^-R z^;Qv9Z>P^h)g^mSsnB_AhKz?+YbQgw+P^TaJ-~g(Y=E;cVhmCnqKB;+IW4uYF%vc; zd_XI>2)=6FA^1ZJvAu9T~f$JbSBW$2V(Q!kE7+&WO4L@3_H4Jt}53|a- zJ6Ph?Rkn98tqlirN?d?zqbOstjpN#<+?nF=6?48 z@y{UBOqPy$)dgk9ZI*8R*txk)4$xR`-iZP59H4PS37~O9@X&(_2gFmR?}l6tThpHa zTN_Wbc?qAKZBe>(}TMgoweT>CoZ!KuV6dM^XqCa?Q2z4H^9$vWlVCLt;=p zT|CK_^ohWOPD*38ku+xSgjn5{vsc9Gj&jbRF^1*sp2c<&A#~>rz&a$fXMSes-@>Ygp23l0(nSofi z(Lb^9CarH+-T85aBd+`{sg#kY5=YKbh`}>r-{WiUSi9BE&>xD#KH}O%MqnT%AqPJ; z=Pt@2O(ElUO}U&HkcgPm0}~BEyzhLGxEbdc5iDoX{j>I8_B(0kz>LKBy-wiuA1(YuYuV zxa+8RnM^s_ee@kKk9Hr$hJ`ShL#;H*!+pY&o9GSTRIl1IjK_8d9+xfxDtbp`2e&w4 z?yX#_Gm8(V;M&E!H~at}qdwE|6AwSM{HOD!z#u1c-)!LSZjHXb>rEqLLHlkDj+>?- z7Asf8S^o{ff1$J1)OZG1*HH@L-(eYX8Td{IX+Zo-fMR>0W~~G9Z;wFywGk>AEeqq4 zA={nf`LPfiGs8+0X)guwZx0qyf*7(Az2?T~)SWbt=t?Q-Vte%obn1-dD1lDxvXnBz zkH_fLG!Cn&mF8HVFSJpLswbI4xTWnv9$n6t>H(+TOq1#ZUltU?0J)e^z0Wyd&rv;T4aI>CUr49_>Tw+R!`b$EDsMh5UJo^mS*@J z0(7^u%#>ta5`G+?7p+?*;m4`Rt_cfZVDvS~5nEcOKl_4Qfc6A&%)uM1mS(gtu|%)^JZN)l^M>&&fz z-KovNXEa*EebQ%`Jkc7twPUd=eZl>=ujys0w`s*Er($n5OUj z5?vvr&&2hR^$HK`qvMFLVYd{gLvm{XC?QKW-Wq^Wve)D3fK!DjK76=zsFs1wFSO^o zQ=`GBV`5gw?$*i+y2%A|g0>U7Cz!qKNH&UAs?=nT>+~+rF$2MQIBB`isSD9V{6?_@ z#H8Bw_VBkuzrjWn?sz@K$=zo$<_ck{)Gx~MCsEL1j>L_i1?M~Ph? z71>f2z;YeMj#rL9Q%Y#1Aa8Sr6_)yWNvYeR66EDgsdr5Piohs#N+ViqPM zr9ZqA-m!UFX%t8BMmS2?KSO5aqen17$QUI5Veswk@qPG5=eWqGW#nBG(1dKjl);$| zDt9a+6hmslXr)D99j~{9%Bp^)RYo}C!;i=B5Mh^yZ1Q>@fP)%$Pi-a@c^79m#0J>Z z_Ykx&XV^gvlkIk7OscM!v1-w|!T*DZn17$Q6W~D;?_MyoWcPxZ!C_ILMX<&42(My4 zfbbvpgX7T8xE~n#cIylG9&QEe3*!2ABzvKTvx)Y=wuq9T!4e$D?~v{8p7NWC-<^wS zxiGi{t5jL~dlCn~cmGtT?gQ23_MvE_(+TWDQ;ydXAXr(fE4kTe?-^WSHiS9CO~Fez zFW+S~0#{gB+-0@tvE|3A;f=0_!PWO3yCqLSK$RYPqUB&;K~372DhpJjGbKJtNv#0nStX zjP{IxAcp|!(Qfemm+&gG47F#3D+mtUK3;qixO?$!w`atKyy~iPa7c#Ai$^t8G<$(hK`a! z@NF;66l9KNgL{XP%fM|1U_>EaMk)h#d+=WW4znGHs}b~xa-#5tpW8Ah?npB^Q7FFc zR^#Y@xVckr6H~h~JfJP5R7EE(6?PMO4i>aUaoOz}}%4Sdr2aT(B3Dt7rgwoBx7!=ae?pfl02lrQ!Lw$wHiT`~H zdt6-hqUToj#U*7o1@{TygR+0IGv?LLc*~ag=()#SptjXkxI2uwPlBJxLUZgsot7!{ zLb;CJf{=_}d(60gfM6zw>u2@K-5p1tB=!O;kLz~}ov@-v{Q3h+LU-q*!PenxgeM(=9tzP<;ty5j@#w&*3=3r7IbeZ&yvsm5W}9+!>ED8IlJ66e2N0VUaaCCg=`lQ7 zsI5p@l3Xg+J%i`&2~j@EkUY%4H}dLDLY!80@nXdIA(wy6wJA8?nb8}xGa@V*u{5`N zO1$sx?`QA!&f6{a=4N+r?q<51JyadG%=sTNY#H{Ibl5VNJdwOxUv~FeICb&e6WraV z=-nBJwib9Fd=Yin7-2ADi$e@~HXH4n{5m$;c~8E+VpX(%&W#LH0-xsZVRnZ4@jKG| zQDuAojtgZlG%z;&JldYQ?1rdYh)-i4B#eX(9;+&3hOdNWm?uT`8mrszq(dF#RO6wu2O5v8dN2e+s10Ap4 z;tc(}8+W}mL>Jja)WP8tcXT%d7+DWE)=jiuq-3@xzuB(vuQcFbBF)xe_Va<U%=HSAw6-njnV7mif{_EV)~ttFYqEwmRPe_yV@t^{{=%pMJ3%BH z>7pGKyBP*PSZgeHFmcfuP=3+s9A8YJ2N%mk?2xhNi_l9#5_;ZD>``Hbjf{U!VYLkg zb)=t}cLY|Q|3huLN}&6v=IdbO@IQ(6XjVq3MsLOlNr`>0=a)p^SGg5<4()eaVgOUY z#P)55dn?asa+o`F=x-W54lY-**5i*!^Y^{#`K=aYHMbHcNvrVziE$W z&WIOI?~q-03B9#vXo&>VkHBaE9(uWvpwDC56$x64-Dp*?ihqZU>d@ZMXiLvm*o_6N z2xlQtLof_kujh9sP*)d%Wa}$rsRSQsQH23WKyQcWHcc$MrZAaKS*xuM+zeowE45KI z0*beBscolm1+6Hgi94ossPWEA8igR+Sb9Bcs1zM@E{|H!`%B-X1G;i)lMd+0*AUM< z5rX6d26!dBmKfk887@2C0KW#Oz<2}vf4-3cL>wc7^shOD#~9`?+f{iz7wCd5wc-%= z)y|CaNas(GM{0&X<&ky^h?tlx;#^^L%j-oSw&nE?U+3r72Fzm$ElbgyClNlC1%tS_ z$EVzGRkMV#(W2SqqC>P*YGsOf2}#ckA125w_i$Pn3ZQv|NtJuhKp!3i&D*fx3pD|u zT`i~!B2{kBt-iM8c3UIN*Jp+6ZImtEZi`Sm1uZAG+X^klgr2y4!|ZuhLMqyB3kQpm zmpo`tK5xKr4s7A6Fc>YX?Y3&Q-P_F6hyv5tS!N%!=|i#hBxq0=_i2|7)3l-qphCenReE6*D|TFS*Z8D~fOtIf;uPSBnUhVxKs5)W}~S z&u|?fNqP^=AWo9LpA!m!>ez2HwHXV3K=+wEWZ{XyZ=tv@|1;!fn|R5IFOl7=$az`o zS%;cNvBrBr^~6TYbxAH+%i5^X7D63vC9s@Kw9=K~2f)x0NNfii56x!Ldl!rXlh;xa zrK7z26?~bH8B0LHwcr9Nh94LhnL3*fc6l~#tlipjn2gJddwS0PtLM5nyOx%>u)QMX2BtJGaUy$J({ zhCy|%Q!nyIf7cg@rPur8lQfet(YsY(QlzA3Y)mBWBy;4KQA3dO%f zL`O^AJWT~;z(^)@H;Zy!Nq7fLLF`@3_cdxoPTU*$mqAF|Y(7`(*EZO}-iFf)Nm4%k zHNu`9d_=kMovD3=>{;~ITyNtVjSH=Yjn4Mg9-;DcNfPMIDWi?xoaIAfRBLc-T54>8 z`euQDDH!%+iq!EpXt#7Owt5?FblvNvuUuN0U!%Bkz1+f!{swKh&Iu6svr|t{2R>|d zSpK+TI4Ps#lW!02DvMubbf^prS<%zC`x|;FaQUEB^U$=^Hb$y_fqy}zw{hPB+B)A~ z*T(~ZHT4EWi09WxtoDASJf?>Q5;-@uTW#W~llHdqcBj8)5pQ@uf&eV=KUvA8HgyHD zN^|`Ui|v+H5vO{STXj4#*I%=OTeOz)7x))e+Bf`ltGIZKFLjlF$=|Rv`a<;4uzquk zUs`Qn>IlEY*IWH{*SZg}HzO5Oz&~+M(UiCN zYp&zM0{{Fy;fh>j7o9p(%$Wh%VhU-54kIpEaE zLyVl#$0!)>IeUU_@Q&JLi%-Cjvvot5k?31ZJ-cXFQ$&GYg+z@Wc-ZJz_5_HLg7`Dc zbpa|5KdK9)y5a6nOmvfX;m+lcc5~ASGE3f9PJ=SgH(Pf`g1g@6#86xCmgHx?#bS~l z=7etyrnbA%d>|e7Lw}k=a?$=}A{)i{5WhDP6&p`(eOa7v!aFokJ?ugr_f&{0VlwmGcG%24_ThHPW`dRx+GQJm4E zL^IvFn&K+t&WlZO=TU{d-rN7o#NG^Y_kRM}!dEg%F3ueg`0ex%Jn(7oZkh(r(3l_E z1n(=eDP)a0yKv286&zc#+2BJ{@+;Pf_Obp5-%SOO9Oedly4Y1r(+vxJ_GOTJ#ElEnwEbv<^{Vy50`jXaUe#HhOr0~1c?WsFiW>EjvOY~ac&*TR}c6sF# zeSh!)z{aZ5y2fGZ9{&a_lNVUZ5JdHqf3uZ*vz2VXSE}WsRD}xO>MF>gzLLMuopQ)& zy|?l2SfsD#Fynt$l*<3E);Ehvx1f?nvS#|<6{+&St3|HYQg>FtdA*G%F7QwBSJ`{3 zj4o_^5AS@S(qCoIud?U&!-^NYkA&l~{6$@%5pGWk>rl@<;yL{m1fBh2xcy^)h6d$V z7$5d)Rt1}|Nk&8=xE~XHydl%K<>PdFCMT3XQ(3}26+`<>qzGbuc8UxAA~bup4HLF? zQT>DYIQ4IcIv7BGD-M4Lcy1<%a4SUs?A_vxs1} zm?qS2c(s)`da5E*EY)Y65}NaOZh9r+FriP6XfgX|{31bu2AGV}XoxiyK1p)`VykYzHp2~?`+ zz3TpQ!@UWyM&toILX3T@ff6CeYV)m-&IkYI2Cjk8O~tC>g56hsFxyM+)QwF$fS z{?y2;--{^wBV9rbr|!+FS9kU{1NrUxDB`aKH{*6WDyWF=*xu5ukV+EEqWTwpId66}^`w?r1 z(zS}5%iW(hBV;XYP{V$Q^jlLf>|ZvdA(hVSc`@26tFB!tb@mMD97zC#zyGhJ&N3ff z)M_8;<>EL9i^b8C#XWuP;koW%$s0uwjC10L50ztU zv|)raKSEg@GF)deHH+u%tc@v0*V_{WBNY;iomjR+Fs6VIu3gxlYA~K#kEyAv(H5~8 zNEdRfMT{vs#29MmOP>`PnVt`@GSP~@jm$S?3r+@B);xp2g}PQ`ptGq@&y85i3Qn(c z32^c#x3UTa!6@aM#?uB%Zz}~WLx3^JY!0Y)G4^y263F%-d zT?%evusEP3a0tWGuaT-TBbD$1PBCIFU7E31UKFk9Vapvm)+4l8UGJu<3_)=<&0 zWOx2`Ni{`MRErR4$?NISxNgw6hJ$R}R3qHDi%!ihA5xCE!_}0>wl=njG0e+~!(2~W zU3Ct-@%@BVXFAo9)n^x(iO(Cta71P<)EPGs3hL! zvEY|nHwg*~k41&6+VDXL$VFYbJt?0Q7fEe{kJe5*h+Nk@Q(v4M_4D3OC;?4x1V>Gv zvs9vi;O(@)_Mg6=g=G6rKlO6HHX3akJ32V}vPpKJ?$Dy{z)d;f4%DsQ%6FeeZ^ekfOA8VUi zN@(?+rw*K-AgrJ5Y@N@R>?X^6Xqhzx9bVaw9Wa!8WFOlEAElTM@lxe~br6cPT?*<$ zVaVhj%Sq(|+5Hn~+9Uo98O{2YTL#8ofW$Ofn`Miqj_F zK>g}N2P$5Gn@yx9e1p!T3i224O)~2}-g477R5* zTi$|Gso*;%s(V0#}A*!!=x+6 z=T?@igZhigk_&j`zi>VnT{}aa4JM|(8HkD4 z_Za9BZ6c3&B=f_=EOluU=hF;n6Ys}804I_*v0I*k&_T70V{y%TT?jP_q`$rzLJMX{ zK{NO3pBmxI#1@ES3esrEB_R3#0z6yYm| zqmaK+wLdeieeVAr!WWuQG#(*PNIWVRJr#}06giLl@}YTN(7o^|l#f_W1lNs6aoma{ z_MFhY#tqtM|2uA63<{FK5ZUK%9)381?8R;*J5WWQ4%sWj*^oN)jAmo8RlSc3Y{Oo( znK%yFD-4k-t}{Jr^EH~F;k|?8^PF!CtRVoNhU0mm7GQmhF8PJ}Y&-3u6=Tn7en_7ulpM$yZ9R<79||Mow37L4pljPaotLG^L{km;oDj2 z@HO{0Z^_}?CdOaVhbA^aD0 zG)6mbJm5?x&PeDYuHX4vUYZPnVkcoFOmMjw7fxeTh_R3o`H55PSm}*;p$#=Uw^x`g z*wH+YelzHM^TCkjN}JcyDJ3TabI64_(w$mNXuosyD;((qMBwKh*`C{SX;$$S9h5Ln zSo;I{Z0}6AV#}v{GyJgT=2B`W9!`wwC6OnlhqlD3Q%g}q&DWk%qB(gR-&;xfN|or# zzS_*HBi@|Nl-uHjRkf2Co_Su+0MeSb^3`fVR|rlVVdT#67(!TG(A=Me=O9NDCcgUCI8Izx8QPY znH_j@Zr8@9mVd`%^JIJZvcDgEh8?LbTHqzP%dTp`@vA=kul5|=qknfEHfs`qxnvh# zx=0o1;Cg4A4;Xf!ZnR+ZI7U8TOOy|2wPPyGQ$CM0=oc*FN$}28_%w!__hW990fQvXdenSNOFusGCwxdK;%M z@KIEm3vF?jLz{&;w7D>cK3DRER-$5{{5~tLPsQc)Vv5)%=!T4vbY)CQ9h9-+4lYsE z6Oc0eFIi;5m&7T(jTaz3P|BBNO7XuWerZ(+B%OF0-v^&Ou{4z7eZ26Vl28U-n3?nh zt{Sp_oe5?-8bh>+(#R$5avPU54nv{a`6I>4a@s|g-xXh0w?5S|WK}*p+qGL@Bq8QQ6&~>tnADlU#=GF;Yb>t-BIu6*uK*w@o?DFqd2@ zGwe`_6yO{Uf~6U`l`3_ED2N+ zrltcG%trK20>yLQ=xjb3h934DFRRwdUyJ%s&4|~ulx@(_A`wb&Nf3*~s3Z$)LWH^q z{@G?h)Fwl=id>o*3sLOiY5Bn1Y&y0O)l@D-5mBBHqB7+|6r+q8)z-2Y z-$YDM1Pb1$JxAVuEpZW2Ebf1uNmK1eQ-33GTbVTezh(lx6UAb}33NWbdT-^|HTnNn zP9SE$q_g^e-2~DM31#r7nLsC9W64IZ`xtC_^DiN6kTRy=WH1)j?4MQPWCEVkSAt7{ z9P>A^IGXTc#h4RMAtzzNKE*b`knf;z7wT5M_l-^FGH{E>AFb9?ar|6x5@mrMrSK`K zfmno4p={fh#(`Of*@^D@yS&^5e71ag&!Z-Bet?wC$E9pOygj$sDVrf}%#mN-G%-X`nFDR+`+8=(CSP85(Yj=mReFqQTyYq0c)0VdZmpo&n zm{%|hat0Jw@0{HV7Ez#xHWbp5Gx4~AZ+D;;)N1W%-N{WJ^!=I+o(LB4bps43(Ot~d zbTC(zwOvKan&Or+!Ha~q=ps}Pd32VZwg}ap*DznBSmfU8(Hz2XR2M935!%$CKDd)x z$HcfnpwAWnO(G>%8w5b%vOx`VgMoD%KPRJ!#biEBTz}^(aeb3hryHraHz6`L$m^6r ziMEG&sC02dyWgH+Z*lPbS3~SS`JSQcp{ZuaFScsYq zMqFq-6Ev)m6@Q<)T{|W39Dahfx5-#vsQrE^bM*fUdowjIV#rxH z#icxL8NokOKzU$)1U#9*cLk1V;=J>E^3G3l@qM!`Cqp6p(Lh?bZ>zBDO29AQ#Fe6) zQV*TLslW0}JqPt;QcNZ;{cR9V9E*PC!FroL$GP%CaItLg=Yy2gr9`qHhVaNwoWKGq zli}M#E?~0!1QzusvG<9Uzz$|ldnD*sNRrFtT#9cjgcX^2Y~_!#TO{1WTf3r7AYDX+nge(1=2R5BG?itf@~(pEH*{3LtUh0(J_f4 z$ZRx4u&vaZUaAPv5s@4}u2QOv+GNsFOHvVRa*CjqcRN(7s0jWM*7UX#MX;${5tLht zRD-8dSP~+W=y-#u<`b(?y5RX=f>T*GtpMp|_Dou>+RDx+vue@83>u|&GMIp?BS)_9_Ero7q}3&er-RXAzC;m}U)i$z)~? zEoAzf9kh_{^EP7eIl;JR!Unp)Kd;jNqS-&cDElWt+V_n7{AKW@-xlmP26fkVus42&&C0nCLH&+E!Ac0~SGh8t zpsvt!$0n#J|E9=^9W7mGMg0*&{AuR2hWP7rSg2+EM0RWkbN7g-Qz3npuryvaI9fGp zM+o)r@8z%rZuxqwqbg_^5mr1wLLFnxx+CcdsVUU- z71B2&>Mrn!VnEux#e5dG$Y-&@Kf7eT2H!_BQqO%7C9G7@3;ym87)v+IA$+33>zPgu zhpWeBWJx)AT9nMbzqDc_aKUWQ!THm>A22Q=s5sX_90MMV711wEBE%A&AQ)YrS2Gp? z+)&z#*2tm*2mvRElMaaz8AIIK4 z$P)&J-zI2#!0-iZPt@stmH_5yf1i8SVWtVTbG_lLbs2T)* zQ85e&_{H})^O=Et2!63XC=_W}G&_?ds^?-bs5DRhj4H(QZKAWrtj1d8R81~r2X7+Y(&d%KER2SFl_1taitlxT1Hh^r9<(sC~t~$lk+S5qx z4l0Bl$=(ANdCyX3scQa&6W^>6^=6G|HfzKgvP2-UH3t^}beL?>7m-CKLE21L=C)M1 z=xUdFa%A>h-g$Q=Dtm%Cii(x34?1M*GR17B%?sw@5S~OD(k{)6jgn>?1p&BLPQ{&| zO&^8sw-joDWr_Sb{-;Jv9cyRhx?-%5=-tWQ4Bo!p;LANAH0ltu~pii zGjuqk2l8B@%gh~_P_ElcdomChq~l_Kli4wb_dqaM75u|9O@(Ds$FNbzGDu(%B*2*; zB^vts%;sj6ufan4?YtSSr_ie5Yy`m;xp$3gBp07e+r+}Vf!35Ryz1M>ji9t~x+EMy zDfi5HMle+FX-{Gng^Hp7DEa24V>ppgKmOg|-+2+dEgQ({-?_ymLdS&GZsJsAzNXUr zJP<>r6`|`|D6qZ6%AlApzYR|Ym6@N|F(iCDYQ)6v1~2AChc|BZ`Plsv)n}pVv+&u} zXBjxb)Mw$duFpBVn5fU+-^U=cR8bisW`~ z1u~Wt+#>V!p48w&MIc_xvXYIz^L@$20^<$-22(C8dYMC_9eBY}ky0TN8nd_qVC~}F zf95WiiG*}GwXfLpr|Tp+e0siwL%-Nb%Q*W}jgftR`-92P-^y9BZ>~7r`Ub>A*EhRw zP2OF|-DJO>{O@7ai$?bW5^h3H{(CojJ4pF3=_Pm>q=QejxVfkmCBm1PD!^;KC3>Mq zs1^YKckms}MOTJil6ln1;iZH3VHb{OqC_fi`1Ex7oa|6{?`BODyL*VU=dlv7$d1V? zQp5qDj!ayvL?vgBy>M0XPx!>S-`3~nk)xg)c^gLg-027+`U7m@o$NkG6#7u^zqzBo zq1-4(Bnsof_yb3>>wpqBl&c``Of1Oj`LbQA>Ux(DMi=LPR&Q{9AvJH@)xF`%rX{W3 z#LA{2g@Wq@|F8ft%%;vZ}<%#^Y0N_!sn$3Z}@FJspMU! zhYtiNQ750ivKywdJfI^1P+kf8r(?=<6CX4^AMgq!Fm%V}O?I zB*^s0P(!o@sY`^<=T*JI2dcca2&A{#CtY+9+spekb#6Syy`g<_ew^Kvu z!s2T7{mx}s{%jP`Z=k)FmhR^>TpKbf$QKm!Ajf^Dj`>||>MAzeb=hjYMJ~0M(5J@g+6O`?ssPCcy8~&WpyaiosItq`JC(I zmHctJpQdtKPS|~mb%;5ZHHE#LOG{8p3c(XN+DDt-Bx#IPHK+~;X zBgqGl>6ZK=-~R^!9x*m!={fQxZ>qTwuC-_7&0KU3}XUi&JF2PXMVqqPrA#x<2V%YAIu9PLHchcZYAG8N*DXN0glCrFV;0zul&_> zc^y^5yJ`vt`3SMGG zHg^$cVPQYkTHvX9%!ZCLS$wkw{ro~LQ{YO%c2UD>X4%+#Pt`zFs*1h(I4gW!cux~? zto?M|e@NCQyRUcJXXx4;y2fgT0)Kqqbku;(e0$oFfqZ+l-!B@FZ?6gSjoYW^n`<3C z(#v;XoYmLOnvt*G=H|=5D=5+?90q2Q>~MB~WT8&++vn!5R3oH4 zorynK?e(*DOup)|c5CQqss1h4->iBLl8!Y42`_k4!KZhxl4KKF4kI`^vAbMwn7 z=tf)mL+3gU5E81j---xT*Gr3pDoLUWJdq?(m%2CF6O?0Q_N~^t{-^1iRlz~Ce)a!~ z>Dt4DyPbVf7YBBQ^}4{WyxzMC#y1x1;xhU#)oRaenNDvn z^&z)^$M@M$lKO+Y&YWh38hLCOc$-=Ve%A@=wH@LC16?2C?N)F7asH;|4-GJDmLJx? zOWws>?L=}FYToW$^#XPCb;cbeIMnRx`jqIFyc8O^Ter^=&*|herteFypH&gep`FxE z47AEy`96gQiMid+8s(C={w#l|g)-%yOff*sy6FFo`Yi05SC@V4Jw!TZtCn2YeaTqG zl6Q7ra#gTVFZsid?RNOjCSQo#?7Hv_6OHP_7B}p{x*nNH@wS75xl@%2q-8DjM1`kiCo|woAt8~$8-848l zUA;Ndr=pH~K1zDKRmv;^e{7|GH>CEd$$xbFZm^)k1SfrY;K6`+hN3-3=k z$c`t3NZGcZN$OtfsoQF=eMYabzHV;j^vC><{30H@{PG3~yxzHk2Di8JACVk#d#Y#e zzwC6;QFZLE!>%}$=X}WV*Ech%atkH)AVr-{th!s%tUvPoBL+0@CAu!nQcqpLSz*Jd zmb$W@VP*?occ$pPeL>aXdRnD_@3*^5X8e|tQgS~Rb?M*Azj!^GAog$xOwA%MTu}U( zE)*7m=cZ-Yiee3 z2faf@zDaTVFrV10PwWm6Z`mk%b=^Xqp_CUp6=$K3&c9BsIIWSa4jkn{`b!Tf{Sy)~w4FFu=n<76D{_Eatc(e^J)|6(@^y z@-`!l7Y;J;t=vbD4+8E8HJnv(&Bal3Qjpie} zhX8H7yYTLm*S0gi;#SQUZ!NQI0h453P1$kFNeh zn@+A#e?lo|-;Fk=3#-(D`5V-!T416`-rCi-s&lJW->TWokhS=`9rL6=F&B2wkkwZ8 zuG;)6kp^{re$_qhs5$r3>R>h6o%RnU^BxKWo&%y4RKkf@wa2k1lxEH767BD$=rhre zPIa|rqG$o4#C%56Sq~y>!CXBt_)yjI!)Btm;%vUyc;LqfFqZP>yUl}~Qei$)_GN-N z7OfG%*GN^&=R}ASQjTUrEZzh=c*M=eu*UO3wJFpr<^dQ+p?umAJLwX!GWA21@02B7 z7crF5bh_rSeY;eV@~^`?6m;v0U9U#T^MB`W@p`qcS>84|AiCeyC`i)lG2A_RYrbhb z&~z?okonGZzQaT5vHm{I1|zLD*>kKKoNmLTtkJAj_#ThvZS4gGq;yTTmwDeLdBf^Nh9L=sY4~HP!KjK*cO76L|3?d zXIWjXl^k`O75+1(t+y6e_u!%FsoP06ZlP`A+ilXjZ=ugp+iiKeB^BHtT_>!MTzYOq z_;3fsSF7SaY;yUZ)mNC^ko)>P_oJ4pafyMfi3f6pntPVaBo}ED;zhmNmYlxxR^w~@ zXl?Q{&;5wnGt!GNPo;x-NdB6;fR~r8D$Z>!vASfHv-RZP#lS5bJX%#aznUq&F!&)Y za{33<+In#{+knS?YlMXALl|a+gI7D@;GJGFc&pW#`OFT}APWNUSaU7XjCyqiktD(A zb*TdaH;=DAR$g=JF;4>>wIHf}@Hkp@)c-__r;e~UZSE+&R&Z8HM?vOmzLb|)UKZb2 z#@E{lf1UP&S@-%QxkFX{p3Abc?`N~gJ)g~Z>*u5kADHq&2`i7K7p(I4vpvKWuNK*Z z*;NicSY7yZYT8y9I=!{z!5r9LrdJgdK=T3jy3+x0r zrDByz`#uIP|L))tKC$X;FSL7K<=)#);Bd*W*#F79YO}b_Jdsou_|$Y?O_gZrmdp1U z&D>kG;J)5!#!Oh~thNgabE}znZT>ebG0Z8>{#9nIX`|^sGBfU#k|&3*R1CHL=#-3j zj?pr7tsh-|vQ}IsxPU4m3VoA`<(JFyqBZ!7G;h%5R?&@dMMM5RzPdrRN?|54!8`RS zn!SlIZ{m41MW#dl&Yxf$s3`np z_25`lYAE;nX*4eDo%cJsvBke|I-krA&8blV{+zV`*R}qI)p=E<%l}-Bx0MYG{5hx6 zyhZe&LBIs3YCV_tTDLw0#o)!c)(L~Dj}M;CJ6-Al-tY8L@gHAV?1*<0q%vVgRQH#6 z#Jv=59dSD&)wpfKPKf4A{srEZcWEd=pSXixav`7#bE{K#xCW=GVVgf^IxVH|=K7zj z&Y!(h&CNZQ3j2YKi?GS_Oj>l!emM(&l~z&kSdm_8Jy{k3g*Q7ngZ-$G%X3dop*v)E zS@_r-XKgvR`wLiG{-XN}SX*YBwdD=o`ioNR=GO;R_}r`eI=nHg^Zs@wkp5$cw_Ns8 zJ;GHUF&oQGigL*6QGfem_pYL==lepK5kGASeoD<6w{0+KVxaLru#3Ptr} zz^%&3DqaxMpFg6eb;qn}SbkVv)paLSZUwOftX#BWJ{*(MF9rwV9H(iKI1=SR+J?5-|!YDvzZ;J}D@*poyl6 zkT414csP(gV8vFewKp$lY}EloArm0sQmzp}EQ(NM4w1VME<)b#ckMHmBon~Czt8XW zk2jxB=G@lad+oK?UVH7e*Iv72JE%4u9WK*afYyaQO;#abolchE1T~#@b7|{hRv620lIDT_203(&FVql=~8cL*jh~cH#CR8*(vWu zN_!DVEdW^uAp?NtI3PLN%EM>Sr%>~^FrRVWLK&tov1m!u59hAds+#d0^Vh%)(4bvr znWN{r%HuLnZ8PsUnak+Z`C8SROnk#htXat*Rs9D(vv*QD**0)7p^L%=*@%{QrlO_8 z`|{xW6)Jez7F46PsshB8Lk8un$~Xux5E9`7fc9w2Byw;z8VcyoNzy@xyCT2kj-9YjMS;jb z#lwr4oH??8jnW&e`=HQ+6$;H?L6(S2+e&-#IBjyGSt9;#UA-~tnK(?RL54L$djG$#OQ3z z$650@0z*XI9(2)9sP_iS9P?QdY_%DOrr3kSj3DB->W5eiC|wYh#ZQPVeuA zz3(5eS>Fj8E;>!<{{O`y31*jSDG;NV?wM%M-!2rsT}Zyg>?vA$>5t)0U7Bh5Ye5ZT z*7Nw){rp8s@qU(i|B}3y-&uT*a?&X#OV5ccU!MFFNUQ*%5Zx#0z_jX*2!?bFeGWtu z3-6*>b2^5#d+JyXP8F;Yj7CvoHhte3o%%jy2>%*}@FAz@`^~+P>R|RN?>|u;t?G8_ z=|}r$RTtyNd`GOeFknL5u%)VxOqz@-*$90JfQ&xN0*7?D0eR{4ltAIp8y*|l>R|R^(9}1!5 z48(9=HVcC~d&?;Q@pHjK!v-W94&i%pCr>$6?6!iLlEveo)Gu&(irlsEAeB1S3NZt(-HH5Wkk zdWWoZsQnoo8cnTm#1Pbfv{z&iVjU|l6HrQlJj9k_WmwkS_H_v5v#i-(CP2TL@e!_^ zT7#(hrrpSl{83;GcNqhWCq3{Yik?^DZ}8}+*r-NtHtTWhUs3J(s4IL}6&G1#8RlT_ zDecBqqS3BFKi@9oi){ZZ3#CSL&oqA52-o8g)VJ z>i}$r`ixm(Li^`gPWbjS|Ft&FC>M0-M{Xujz+%I+uHhyCS(-)1$x~}11sJsQ`@`Eb z7lBf)Lkn0V*$ns&Ou*D0Ut{h;t$H!PY~~jnN00mw2S)tEv>PB0QRflXpd$*4qn*cE z|La7A-X+#u%9fN51U%3OM4rt-3bY-U>twCnmT9*{Q(dM~6=943pfj}L_Yv``{}JC< z`+p*rmZ@R#xelpy+Z56QyqbW_n#BB1U9CjnnaJ^xnfJZzvwM~6YZ_kjrp@U(j~yr$aa3kunSbQ z>hoFYuo_>1B=m%uk-*ZQWoPgo$K!#`D8XNYM}5|G{94=i-R|c{Vo3#_rN5lD7%AW= zto(!XKzmB+Vq-jg8nK=1o;>6BiC~}%7z^MvYC0>b>&?O*T44~oPZ99KgW*0yo8C-w zky23@Ym~|q@i1&*i8M=d@WGu(1#Y_lBf@b$4g<7KD0;+jOp&L zhZ)lUxn{Txq)2Dc#!clIrDwdz@=zAeh0yAbF;bxyX8JTlV`1JY`hlz?{kf$A?^-~V zF^T@28ir#d<8_#{({!t*7fY+R@NGp>hJhD29wOjES@sk51-jH{6z;%hP41;v41F)&N4^Px)$g#jhAkuAV622of zhD=o-t1gA5AcF)+G#)NjHLuXB#Q1?y1=eP zkElptl3h{t1~rk2swYsuuBe@$o75_jzPmiuJKJT^11G%YmX&KWAEF@XiywQv2$snv zPN}&Xm*HQUr@TNx39|D`-OHlhNf0uZ{1qOfnEkfF+eiJe{}j(J#BdP0?XCU^zNOV0 zxSW7zeT`Pb6({&)QxRee>uiX-(fEX{z2raNGRI2)N$xGm!7)t<{v}QVq1SnRTTRIP z1qn__h&24^n*ev{b!}>%V&A+6kbM4L2D+FzhJ6t1L<8W(xX&Ghjb7DT0ATgOBRrKYP9>ttB4!|`docWxoo{u+)-)%!7;Wu}p zsfH)De}(26?ri@G?KQkx`&VeR;oaN6LbDC;(f$>hZn#Tc`Iq#J6smy0Jy7zpaTb-} z+S`OB@mO0;k+(n2+(46rNpKN9>&+l>CZ$o!tq^NDzJpX~*vvwlsw4QK1!3>9{) z8|UpGF713(d?UYP!X~|tbQ=Nc!nuwUxFZGL{*JQO@G9H4g}IW@q@+0%#5vEmwi?C= zr=a*GwnX`NY5u09%Fp)$D)>3itj_>&UeA@exHE?)mQK=Fsb+yCDC6U{oDM zXQe&8a%mA5P?%h;7m){m^Q0TJz|chhk|ckyF9b%0^$T_p?1$re6!$_USa;w}<-qK| z<#)mjpNm3EoF((mb>MqmUw$vgJAD#JJo@gjK|zT@iIruviniXPIhTv_T0 zF2{E}j_-RfW2e^Pw*Co%pBkSSSbQRC$o02UV|=P{d!A94;yB zuu_$%P3uMT`SC>aZjU)+zgBe(K4-1)A4e#;py*ZlS~#SE>e(_+G;VUX9z&fet;g$# zSJp$TtK^!innf<)YKeYB5%7-=Z*FgB$_h2SJ&4?mI}&7(JyWZ?jgJgNdqa^{w}9Co zH)a7J!kNd_$83Kt0^MJ$9x}lbE@bYk01A{vut3J`HUx$#w#~l0dc|P7V5kp+MHe)6pFjD1cGpqR;_@G78b5Cf~ z%lLeU3;R!gjMwSCA>PYeD648Bt2kY#U^uk8yVKCx^fCt8u2A4Oy1J^r5KUj@Z}H$v ziXP|?#U4lVk$f!?fElGv>YHUZ0=(-WNN)@}8qixZ%ojF;s=jsCwxJMh>N*(P%=f6< zlwdt;5EOu3h-8oG@a)Qg74RraXbXPs>A74B+zjJvl6+Z#rS_i7VJES=SAL$9l$6jj zsQ1PYl6$;tp&>}Ysp=7&7LftJE##mDt}*X{6AX?ptEofjV1+8Y4p$K}$=?92{d(3j z-#8Zw%UO3Ot1?H=0X1>cR&ZokK zc$%%!{j}=QX!lm`8NfVjJb56PwIOIFzLI$8FIx3Xyne+|Hrc<7&P1WU-9Tf-hIkbA zd+|H6CFopmGpA+|Ju}b0bexhcOUKQh_xFX1;<%W)_)?x+kJ z`ANQk$fRr?5@%ZTAr*vOtDgWu)*K3*>VE-STAWssq-a*d+>AHm$j!bjp{4XO6&T|M zz6WH@8-R3d_V1d^d8dW#)HDg?Fb~;=MVW>%2YoyfO$C=YTK#jf+FI_^0!ijW7zDH$ zvIw|PZ!wd5Ab7=$-!l_NGI`J?PAhmc$2joDi>$Meoy&3DaTLcVsLm2HTl*)#I5lG` z@&QDKZ*z71Fg0LXT8Q|C=q8iRkcIb|HE{yJY1)WJ+ zqf#sTbx#k|`ccrj{2tQz5a|s1YBRE!%?KC=A8|ohsk$7G=J+V3 z$vvcWYnakk908@thckY`UKmU3*GWCJ65s7d^Ut8iSjCeLsIiX_7DK-|JP{cc`qo1t z7i%@#*QJNFKnQ8F;ptTjjB^}E5lj+LP|C(5nFN34YHQVYVUppA=Fp@?_>h2>s_{Vm z2H-rlJL&_@8tFT(x5|dvqLv}Zx5&SJvYFl2w>h^_o0&m8&=zRV{o0gEn0+e5JUfZB z;|+)VCzwS)#-SOgW6q?XG56BDwZOUNSjUluin2OpsB+t{O_yo588#_g< zM9us*aJ*H8f+5fRAw;FYQ6U$AC#{Kir^}eE%a{y)O$TNi_r1JYLcV*nd2MnQ z_$Yk~j?UBSHkJhI@xC67P^FS}cdTTNd~e)jf8yF7wgAbY;Lr1ZwnBP&e^px2Y(eST zk~?p?3kcLQC)vxY&3qU=z<;!xR`m+}HME&e;t}>&%-^+YLk$OGP&1Zo{Dw{F2<5Ib zD%n=r%=^#?pbtxT9Lo)AGjCBZ1k*b8L0_)bEy+~@z9B-#Yt!eGChtfpR;2ofQORzJ zP53P2efeN!j|}TybA?`PE3CR}b*q%W5;on1RUoe8&h@g|$o~QCz`YidW+X#>_td85 zqGhsHIJWptKr6cm5B?KQNNKrolsRjPx+PG^HBDX*Y4d;sHaf_vV#=z~N!Xr%5vRCp zu3~Yv6bSng3exJ}zJ@xmCBX?cA2>dRm8SYD4o~Pn#_!2{;a*V2#N^W#r60_c9`LO6 z2D=~lR--4x>jxZ;5xrgYgM7OmT!kqW`@vA1kSbgNz z-5sSoXs){c*G>ll_g8P2l#99)qrcNyHAbsL*~SY*T&p|e*pK1&1a#~sn69LmACVh0 z^QE`}^BzSjfmxQ~Vk^c~-mmZghT^;>biYU3uWnNPwsPse@J;mOHt)M>?y?C+FU3EY zi7leC@eUVm5Y(~g1}tu{wR>5=$3>ght0Wjik6dBVXoW|afn&~MO~kWaRGnbe;^x{h z=!IIFf1rt z3$ubR;R$QABzF0aVrFBdpl5(AGkh?bVcFZ(K<21AcI#Z}b7-6*v}cjN1zVj^3YV{W zlHLf?yAVAOu2Q&Z-2qebaW-Hv0kr9L$RGMIe$iz)uyEKq&?^Qz%>0J|J4M;(G=%)w zG?+f>a5~^TyJ_%fK4^hE-MQ;Zzh{q3D1~0|Qt8s(D%&)G=~!TDh0_=oU;2;_Upb{K zK~nu3whH?jQ^SNU#(-K0fdSfIr%k(y8iSgOX|{~g>OQ7uG7G+wXiF+>dS7lgR`j8d z0P;t6lyn&E$6>EmCAnSyjqviTU-5pyQT$GJ=5Cra))tBwXseh48!*Ck!6GS&Np_jW=ZGo%j3T=D{b! zuM+!JR;r_eVc=Z|!9>^v0?VhaVJRdCYXVjT*xMop>!jj-5g{*1+54;aKp`#GW}E{9pl(z#+%uL!W_5;9*Aw;X9_7yJlaa@3i6=GN~Kad&tt0;);a3Y z>c(rpW1WOLi&Wz!RjtMKBtTpLZGXO3J%>{l;ZZWD?}7gm1mer6j{j6*=~Y>KKtacT zP_Na(A$98O2v8eewJIv=u@ILdJ(}tPye5B@8ga2UegpyhI&7#K&UmFnTkHQ*V>Bq_$<1;c01#lCxzY?pp#N zWXs?G-&BVa>Nf8ip_uB({HSGFOnnxxK5$x0Z>jqa>+`azkLMi4BB!s9h@*~LnKrX0 zV-<*QW(y#tmGRUe`vv!oYE{?K8khGSh&K^vTlM$FYGf-^!JRx8auiP1Rl8;VI9X`h ze*Zp3u=Cen8rP*HqMnS_L)O;4jFgi^Y!7#w|SH@Ych%pvXSUAs^3f=|wlACRbd|xy`lv;tb zL;$g&{Ph}gh4?L9Eag{uU%>}xYj5EKG%9$hQcuuKFvXrLMQg*3Dr-N6o(C8eovSLq zXS`O|1Z@_B(KrOtReH3IVt@4d+;!Sa1~VokTd2C;cvUpp872zC@s8NK0?Iysp)_f( zP#j}PIjB>N&)7|Y(nf*+qt$vbR>}qe8j7rXM)%XEa*Z&e&aT9RsI%N31Qn<(sm2Yz z0PdXJfU-u%YO~|95Tdl%zhTD8T^SF+DPWww+{T}+2a2#+Q8ALqfd#N!Wfj+|KEZh6 zSG4tnTVdvV=o#pXV^9Ov$1&r*k)&h57&R?2;-dq#*$UMgIbd+)%adpqPvG! zKgC^mJm_U5<0(d~61fPiigJwuQ*H7;sXyxs;nadgOEr+$3y|+$^%&|Uh!blGKdU9O+xEIZu3^xP@+-7575?Fw=xx3Ez2t4Eqa|c@2ZkuBSwWIRu*3YXKh|tg5~7{ z>ZJv)wq(^EJ;%5Td5i{)*d_*mM)02a%*zUAay?(Mm(9D%`mqfP@AU*L9S`VmqjiP_ z9*2Ppb3BYOx_F_fxqr@ftZ0owN7*;|b99r@!dN;t6O4naFJ9o~D4RcVSh=1o7P6+v zhvCbPrI*!{cT1}E3ae2V$B;4tuV?$!T=NLp!?7xNOw(NYgsg{lGHV#{&HcDqAc31LrpZY`q!9NNhEr31r&yn3Cl zfHiC+4qF=uL)Y??H1h3^@Vkk24q70Z#TdS`Yq3(LDaG-3^VE3`7`56a^@e~Lq@>$n zbfHmbI=FC;FWYWC7n4}FEssF;S3sH(J4t&E)*JMUDJu05NgZ@x1#NuUHtSxdo-QL9 zBpgR3D(nBm)iGVh6u9-upjJKj7~G&?`j-v;YVwbs{SqM?t(HB|s~SD_3+rEa1Wh<; zAb>qF>n}5f{xVb0U*$|$U%)xA^@a`JNt8Nth|+VXz<>yjXtREXfV8&xt|KV;I25W3 z1O5bnjzh4CZolUReh>G6rD~U_x~@v? zV{gzTO1nFu5hiEC9>`*8`+N?k~Up2ig$H66#y^uHqMUS~Qn!&uw6|3_J0!)fQn&S+8I zcO&T@MLI$Md8MWSQCmX;Yum-EDxhcpc19mofsZDK(f1-d#Y7k3PWfYE6V8_|8dz|) z9_oXT7l_uRCwq-YJ;r%07y35(*5GWJ{{9TFqc`g2NAxrOQBUazE%0>O$5STg8y)qi zhqHNS^B0b_djImvjKQvfgWZo_Xci|TNb_(=^#uPuOmM`8*}Sc1qj`rTs~-Da)??W= z_kjMSQ~PcGW6$d6wfx?{)FnDXtt~Ir`n(s?gNsETj6ey-lz&sb`bRk)P;Lsg3BrjG zY~a!NYk?U=NejGxaV0@t<5CWM#D7;q;3-Vfyu-1&{QJh!6}TVxbQOLdO*JPZ>i^&i zj3Dr*+yh)?ENcFu=OLc1cEBvep8o@o{*qyEuZs)#t-)O$-+tc-GjE_aE2s@>)CPT) zg)I`$;iM#8O4X{Kqxyj9J|wG03rx(KtOaU_W%D-TqF@moW{O}mg&1j5PB4vBv2qs| zL&8OyLx9N9;64}ab4TgQeag4QbS4P`t=b?imvC2bvP}tHkx5|^n9m-d?~g4Q9LrFy zZXggt5^c(Gg|u5059&Jgr%6nq#4#IzQ;53*o`aPgg8`f^G3+>fA>Sc0dw?LcOdG`U zBoz)&s>s$~CanyG5a(1y-3OL55ZOp`gW`+NiG+ zoCF-i*$A==>tY@8aG+g!^1x(v^0Zh)FsU)!CxJ?WkKa?w>F}gXNLYO17BDyP(gGU% zFJ>&jJ8jXe4rGp38GT|~5y(lCm;WHP86UmWgu||o6o3so1g5%2G8NV0jc?r>b>ixzeH9BF)UZRUtm}MvNKSB2GM#TR#i# zO6)z+o7TEHtEmJMHyOH}$5ED!k9j3}4%9o313#&WC^5zQ8%9O0gB^z^V*9VcJj*0l zA$u~hY@L6pSGuctccT6~)qyUI)^iDZ{wK{ldVXsC6d8#A5eq0ijl5S93`2s=tf|mD zV(Dgg$guEOV*MLfwU-ZtK%c=X^3g<`Xr}OL)KX4Bx^ve!@ z6<#SmF%v%l%U}^S_&Holr@NlVNNT3uWK4f09R-cu-H0?}H!x0v>Anecnh7j2QD6$F z;5FTMn{M54fYDTf+q>ga26A=5uwF~Kr3D5WZ?Oj&b12Nh!gqD^c1V%Ky1+oL)rb_S ziORLNPAk`Lw&mI@%sE!B9gNDgk095;Vp4*x3a=^xF>Mq;CYK%fwC3$Sn^pBHzo3}Y1rIEyh_w9%_~dgKq19`xgPy;w~G_0=HL#G?<3!5X6mIP>JDmyPJl?q5uQg< z>hqB7&o@X?VWM7N#xS4m2)NrddXcKCv($}im(Wg{f)W^&orVzJf4R;5pBFq+qCyuU1 zvxM>g0{E|11nR`AG1%KI5<%RYQP9+;sombPx6K<)D#TQfq?7qrxNROr<-_9S{U?^Df{D zxjtV={eyO-zO+55!*V@>uOW%_78GM33n4Z~t)GF^tFk_cj9M-=YPo=m)3?vJ(scLI zW-ZYMozw=cXJn>iRl2GUy7?%t8*yv2>LHNm3n-!%azLk4LOX~f4_M99x@7=7FEPJK zt3FZ+m&3OXQeM=31ZHBxW+)+#hkPyYPEHy=n(zFOK2Dg*a<4Ns!2E+e3QuOdWUAm7 z-5rfu;Mvg^l!2D-TrF}f?|;p_CoqI~9VakbPKN_D+QW^1mp1bztShM={m_O>%+vq? zG96naDpEECn@exDt^^3;pEo92E(mucWe4mb2IC5mL1SQS z$s_=<$}wik;6gk3$?lLaDQ5ERHSSqjbvh=h{-uR7K8GccEq!7I56nbLjo$>0r#`9} z{u_)W=B^7On z7l@SmR2y_0Qf`Ya=WHqdU7%*mFmw=i^9~}U1s>^UOX6>WkdWat!`&f{EC-__3x?kl zAV>-vvmhtj?BVv{5-`Y$c4PJ-LtrP2YRqPZ;x|VR+g!3%U~2Xe8}pR*+o0W;(3u~< z-Pi1EjU|lrI6ATFGS(H~_>x*8N(|AgbcZ3)I^vjUaq-oj-zlbOd211+nRtyNWxg=N zQ`me;ey1SByh*y9^#*i5HBy?3k;3-h=6*stIut`)cHw@6`8NB#p6#Xn9BQ4E0!IhF zG5n+X`#MLzFsb0vh28FW0aale_#e)ix&UJuVoUI$WO5wGtkI9`=WXH+_JOCkP)4*j+f3L6^(Dc7>g>|-pHG8eK;_=X!q z)x0@c(&M9iD-khFvQ}BX2l0YgT__Xw4jpz(R{5*fP-Ruw{1J$n{44*$k!TM@la$iTdkAM4NY=a!P7z-bKNB)Edjy`*or&cxv-qn|Bh?P-oI}q6l+W^C!Wty5!(2YKJEFZG0-eWc^s9jWV^qlWsWutQghszAylJdpRVo@Q zrlp|B~Ei%l)6_K1c3fk$Y}3F#64v`+T{73-?VGoYGg|uc=~s=!7oC_ zFSE1DINKIUCsqpPHqM(CW2b0R^-ylPSW*B4>ME0LyOYs8W(D`SxRL@Z3}P_@h-{eb zTkhLuX8cH-1r-Z6vXfA;1P5JE$KkdR0$@7#d!TPZ=$9=pPuHshTpa6aP;<)x0BByW z-c-MOL%njHkD8@v)%F&9FHvbkVvshC;{~qCm3zpXq^-Ue?~?s{2jMjla$%S7z!=F` zilIdj*aZU9IuIu1Cfs*!K-LQs&8h%JqZXiDj`cQaF_y%T_9B`_=39Qbzo)|zfjn^mt3+NcdW2C1Y3zfHXX?Wp%7M&d#hBNS|? z8Ik?tn%S|{s`e>*I(uW7b_!v0FSFlL+L1e#5XuKpd+-y=xztb6-qrSy( zJOE4~^^r1d5In9@Zih(hB1M{YGg6=h#hkM66iJRwfxJ@3;w6;=E%3%Ga#=*~*8+jR z;X)=OAU?jT9$oh1YwFRBN3S`%+ZZRhRlT;@U7hAZgDuXezMR*(wSKE2c+BOnKA;dr z{FUC7$5^_)RU2kuUJSs00I=rfubK8ONwen6X$GCkG$)xRAGh3g?>uv=4U*~ZQYovk_2@9k( zXj%uM!~H$Dt-I+Q0~I6fp^f*9T{eayjfN^JQRshYH0g_^{#eW;Y3f2!nJSr8nQtLm zfMuAYy1CKm)1j@Hv#-hre{@SYuWW)jqMysaDL{*Jw8dkvyK8_}cgnx7BG~3~>{IQ8 z1;ENSX{XiNuzh+<%|!xVo`M7yX@PsO6YT_Np=U^Sk3%KPM6#=p3?UMj%yp(@i7Htk zlHH7CINyxPoM%dwq>_zBvip$?EALF^Ia4yHwzwSsW4fQ24EJ;cETSdQT(o%1C1=XH zJD{@(?E>^q&IH{9(AZo&5rS{=m|l;o(cL~K*Nn!wd0*@ON6rKdAyb~L)wSYszJG5;@RZAOO7oJ{Ywo$&-*5@Wg=B=NDS`7ezN9$toPu$}qn=awoQm%o#nzOcRj=kH zaP(}qzuFCbIn9_Qim}rEI8T2&I?=-z;_N&pUSm)BI?Th{uu5Y-f#8&5+YWKamV9jU z^+~9nzT>`-nUOB$oK4!GWiaQ&%$Bw4ZAc$Gvy2uan%clwYP$b87lR}r7GI?d6gsx; zUnue$6xJVcLeHWw%N4gUdQpFa!Y0Mm%&v3;%-CyS%7{@*wJCSAIBAJU-O5onE`r7u zchtAr%=o?#vIz<(2&r0cmRSF**Gh5WwQLk)>%bifTg7Qq=fZf>;x{Pl^0O=K+W3Vv zf3w2M&aSY!?s03za4+AWX3NnS(Wyk2WV|eXVRZZa28D4lZiha>(u5XRkS8|%&W-r} zSdM{#)N~AqoFuL|zf>9>s4ho~6eoHXA zkLwXaqwBsU7)hiH!6^S*f)S0#ibmIeOE3zdhboK)b-?IA7e<5eiTc~|j0O$LP+*7! zQ}s9Vdi1oTFdC@kTYBX9j`SlEnv8Zm7xItIAY0c4&D;N_!d$RYVm08_CEitBZ@y|J%7 zmV~`Q)>%ie>~mUxF$9QRe^8@Qbp2r)BkV``=%P)X+mQxrd$l1(3AJ{$OZfRmofA%r z-vF<()&YE@qrc6+FULtvvsj#RZ(@x)wSS!S74g$Q54=02zdTNQ8sy{jpTEQ_fBVMH z)u(wsPWq$q%6~ad`l<2Lx5X>}{y6C?0{y}ew+PS?^25^GHtwbIBljlJ$!2C zl@@a7%Z(Lmus_@DE_%C_7Luaf+KOKLe{VG*BxWw}rI4&g<*^>fO-Ncw&*x#ud4Hm{!>4<&jn7iWxqedNnOsWbNLEBEW< z{(QOrQ0_01dq(>)`duRT|C0O5<$jyoUn%$hmiv6(dyIYsycS~_tWa)TM!zDtaU1=L z+&GL3$va+7WJ zE0>!bqu)fi$x}?xn4hmg_O|q~$738na5Nu-_HW5Ea3M_0{kUv*O~Ez!Fz&)97$3`a zFwW!&Pgx^I?joH3J}Oq(ggLhq-k)X*nCs88S6OLqHmkHjL^;t-HYomaAkpFkgT870=7@p?DM4W z&f%0F$0+R7U*Y;y4X6F$tA$DGr>FG@Q$jxCVa1anoaQZUy0}DQ>oy$NT3p=L0uNV@ zZ)?EPqFn)Zmb_B0xvUB@tu1|}YTW2|cz+|+o2SB=b@=i|7usI#IMz=s8ZQDqF35jX@S?Ci^ZlLNs2%c)g$fI zY8x5zE_9CF_R8w+aK|`~e(u5=Yh()t)>uC?Ggc#eoUqp$TpH`N#R z@-r;DIb0TAnyMyySTWbLz5YGe7qN%5@JTptbNV?PqCW`li;(z0fm;&ju*`*XZP6{Z z!*VtpmZQ~$2dwzKVRJ-GTVZoVjN4vx(?ED8&}?9Hgklfntb8EC=n*IE7#Vk5WZXn_ zb2uA@_n*M}`zef;n_^qB^fKU?V2-;5oF%x=vpgnFw!>_$jcj=0bll1U5WMjz&d;;1z?=sD(H%36X4-7cLghN>7izy&K6)$t zV{*tmxMuKb{EjM%G36zy0AM~y7B9Mq*L?c{h|tO7LMfGwZQYw9z_ykb{)5A1b5PnHXUxX!R?7j&vJK%7U=8PVvO{d$^Yv(XpDEl zx0)e+od*4>lOYvk{oJ9=yjIi*VSQlalx-1EA%3KLuq&?EHL#ew;y_YHgY7u=Z8ma5 znCs)6N}fm9Je~*zTOZeR^pPH|dO65PodSByj4#D-EmEC&jFRJ8;6aC;b2b=wh`}*p zz%3XZ47kUmLL41yD=_e|{Hk}M2BMif-Nhqw0Yc`m9h0@9wTmlK5M>#$2tj$5_!ruH zsa^z(?4`m$0MFcWK;fvofY=1RuC(cONrYbF5f9g-WZ0ggQUcJ1M=x~hkPnuiZGmv@ zT#-t}^T!RR+Q=vbr`l)*CS%ZOw_}Ri+OI zl|(7ebPuDLjX^^TOzQO?l`p#*Rrz2umLFrl?7I9Joy+h2f2DjjvP}a9IuADkwkEjs zeS*Q-u3JF0eR%Q`zXi&r1s-5@u7i z0oV_{z9XyK-Dn@DR2{UW;OE_9vEc!UDF{H}p&+CW>B+}3<9CS#Z3HtJ1KZs3CzxG51z6GTH;DsVD%7BY0Bfm2whwRV!B zvR`Wx&bb(MaY9%RZGi}D5ivRjV(jNc8EvEQj_Ba`CfW0z9NBhonccT8jP|Yeblrkb zN0^v0sDhwy3xsImg1f)?Q*|%254vCrEe$|Qw{XjNg!6Cm9yz4TH-oWNbXwLh% z4=WivNMLbDZpYPgb7U9Rc1Tnxkmr|s5!!O#5I0sLi!pJ;t2-gw5;||FMV7|-`Y@b} z!_BlD#)9@%+8`V%;i$&LddH!eA;!VfYFeb+D?jE4sFr2#?U_eV{gSt;G{HC;APGs)J4C*X9dIVD7bP)MOCo*nIz5?&;!d1Sx!q z?_xUWjGsYwgNBg7?`W=UE$};0kv18#pP?31;$I{IT%iUb<&26qsSK#QK-!%Pd01d-m%*D9O4XA0)R#<|E{eSTpZB~I;h+mp}RRL1)8NVcaj6A*QKgx zcZ|+BVT1ttL4kX)+gY`)5gyc)D2-*74w^|kk;)A|BHCTnA3-vqUq_xJy~umkWX?Pu zBmLSbCsrwhscfcMV3RjT$h#8p&#C__{hX(@yCG_MN-g)x6d@aim}Yjel~7;R`U&-L zGxcU4!e8T`feKR~AqkSoBJnN-|5T{c*ynNeLcizxH2kx-(2bw(JudY=9bVF@UT|9` zJjKw7^RChsXTo6&r{8LIhw;v7re2MXrUiZqrzN^QYJn_#ahx(s2jmA&_0U_ffxYe0 z)nIw{lQ~yVWIV>kQ_lvb{)BJ_2V@$<%QQ%;}VTCpjV+PvB<W2V)6@+0;STQ0@JWyZ%(uvk^nmry%z`>rkBJZ+4Gw;4C@2Xz7 z8jDKt3v@l&JS}CdV{AICX@uxzkB-#53oD zQj-czjXU0wY7|*OQJO%VvJt`5#uD|Y0FZ$Y-oPC=w{64zN1TDkDg<{WAyoYd)+kzS z8C;01>E2382+}BogeNkjgF>EVNd;^SR4~MFiBnTafN-H<3foly5c7*u4V8(N4cTeD zIU9{Cv06u#lIBIhlb3>hM(}n3uKn@PW0#-$DPl#rWBe;HXb>@EUx8A92Le1VCkoMO zl6x($8qblR*UlQ*dc)ZwPV1XoLg`wGf`Yox5tOu z;6!f`*UpOA8))=T&~9CA9fy`B`kB(F7-41vdT+6|sJk(1G$+g* zQl1SmXar9pP4%t|`L|sM(d7)?@~d{+bg_RA${j*kJ0PvnxJ6TMsNaoE-N*fHh^p`^ zKKi$H*Zo!KI!A^$unh5gs92D{)ek`>tFA|?bV0G|UOXd$Hj)lYWMHq^gu^=LbX<+s zxk;7VT8sIVgov)NFAS`$VCAZwfJE1wJbFsS2K@ez4Q)me@nL88mp_2`kdFZdB5I^R z)E(7unK(-owZR)NQif`-N2PEt8)HKce%jWCF#N#(nR>$@=K3;2+|2Zae@2$dpTr#Z z2984J>Tr|)6&8d);=2UbSl`&SC@3SooADn}WfYsCOEy>zUw;(GKS{ulY0Egb$Bc!0 zvgx}lTaugn9NDN%`1^3`vXd=83xKBGHg0oVj=E>+mfz@o7QBN z=B+CSPSB>Fhxb_<7I0Y1s>epvxATyx?l0u8QN-U_`BF>)e)$Ik(!$%!4TCLB9wJXe zRoHGMVJ!$y*x~w-QBlRa`qF=rlj{L#EF_-*Ubq?ONmjkax7_599)(cEit8LYPAOqG zI{!Lw-0SRdvE;YslCqA!R+rCMylm$OKLd0yZ-{aVxIT?B4}^tqwwN|;ARziTtZX8C74_uE^6lQY*t?IJ8wmJ5&@7Q@;-cRFkUaZ1UHDHv9{7 z-wf_ljbC<$>RtynZC6I8>Tc~^U8!Q$9=0A!wf+Z+D-JHl0Ec=FM(=dCJ}jR$0PVD^nvjFSC#r6N)`Knc&a1jpP(g#K4!OV z$E~;Jkr)N-x8B-hmVML_3Go+H&9}_A(k80i)KZ9&6TlR~F`PrST2Cps+O~shwIbM{jx*rTR)}F8|$Ch5#Tmt)1DV7!T4uQQ2H{fVDo(} zyAb(yOxb}kx&fdaV<_gEwiW4^WrX*IAl4M%q5P3}_SQ}m&9h6B%tDvrp!GQ()duTu zhc_64LaW-14|qip!oE!kV)W55Vl-a2q0L%_&$R<==e1$35wCIu|!m)v~?wG zPDuQdG&xQ698#@$SU_bpUxL%Os^-ie;J|uRjR73wpsSKv zKm!(Hhn_kTyK^qUnT*4RN|utLl1a#hzi_n|h{x=&s{Hb6z@p9>m=ZEXCbCL5$1TnD zA9Xa{;7q`q((w!N3(1X=ye&?Bv)&BjU;2VJ7E-zl)O05Lf_ej@MCsJ#y;@x(0-eFk zeD^7=riE|-Bo4F10Z#bjIIfTQ3iiSgcVi0{+7<8DIQHuWA7&$V%)r@#LD>tKPja1= zE#Pv0)P}hzF*E5`hCvL95f>W>L5g_NKD%ZDD&VH!+>mIu|J|=IjtXJLY-6Hof2D6t zv?H)0X+Z`4a4od2MZ6jdxzyY_1_OA4N3CT-pUX643q4X6+bKub*OB&hlzkm-Umviq zW9;iVUZE}K;XecUc!8@5;gH($)7TIW-!%%}DS*t&sHwX8uYidg!67vqcA$L(2X8on z!^>Dbk2zmgnO}a7crB8ts&Zs%4)kg2TC-PeSsm?Ez1I z80$8yqvqiV4qk3L$lyx3mk}INwd%F#PvLQ^QGz_J)ZgYP-f@`z06K*^Br;4R6bv;* zZQ6DC^)+IpVZR)#r(#O9;JjW0!^nrNg2Yx@nIuq6ZkMP9-mC{rsp5&MeiSDE_2ubC z%pO2QmqC0nJI>8D?Ze=-+le6yX%b&-H+*u`+Ot@AE#FZyFGt+2R%?Tr5d1>z#E@7o zP#VIdlhGu<8H5CP);O=WYf$}D0{F?yC0R$rX*lW;>ZTZ=*QfY{%H~S(2R+c)AC&a) zlr8T}iX{^?RX+8;O4;cZ}+lLGbX8jz@%0APGeD#ea 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